{"id":19339,"artifact_id":18321,"version":1,"data":{"version":1,"artifact":{"chain":"tezos","title":"Dream #20211215","artist":"tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F","tokenId":"584528","description":"An interactive 3D artwork, created by @neoyume\nOptimal experience :\n🔉 with sound ON (after a click on Chrome)\n🎧 with headphones\n🖥 on a computer\n\nMade with \nPolygonJs / ThreeJs\nLogic Pro X\n\nMore information\n➡️ neoyume.com","contractAddress":"KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton"},"snapshot":{"net":[{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","host":"ipfs.arkivo.art","path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R","type":"http","query":"?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","method":"GET","headers":{"sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\"","upgrade-insecure-requests":"1"},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723920091425},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","body":"","status":301,"headers":{"date":"Sat, 17 Aug 2024 18:41:31 GMT","server":"nginx/1.27.0","location":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","connection":"keep-alive","x-ipfs-path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R","content-type":"text/html; charset=utf-8","x-ipfs-roots":"QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R","content-length":"162","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type\nRange\nUser-Agent\nX-Requested-With","access-control-allow-methods":"GET\nHEAD\nOPTIONS","access-control-expose-headers":"Content-Length\nContent-Range\nX-Chunked-Output\nX-Ipfs-Path\nX-Ipfs-Roots\nX-Stream-Output"}},"type":2,"external":false,"timestamp":1723920091467},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","host":"ipfs.arkivo.art","path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/","type":"http","query":"?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","method":"GET","headers":{"sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\"","upgrade-insecure-requests":"1"},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723920091468},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 18:41:31 GMT","etag":"\"QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/","content-type":"text/html","x-ipfs-roots":"QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"2728","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type\nRange\nUser-Agent\nX-Requested-With","access-control-allow-methods":"GET\nHEAD\nOPTIONS","access-control-expose-headers":"Content-Length\nContent-Range\nX-Chunked-Output\nX-Ipfs-Path\nX-Ipfs-Roots\nX-Stream-Output"}},"type":2,"external":false,"timestamp":1723920091471},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/style.css","host":"ipfs.arkivo.art","path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/style.css","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723920091500},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/viewer.js","host":"ipfs.arkivo.art","path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/viewer.js","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723920091501},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/style.css","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 18:41:31 GMT","etag":"\"QmPbsQLLXNhFAwKHqFy7nJfyFfmhwqU4gypXMEAr9LWc7Y\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/style.css","content-type":"text/css; charset=utf-8","x-ipfs-roots":"QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R,QmPbsQLLXNhFAwKHqFy7nJfyFfmhwqU4gypXMEAr9LWc7Y","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"243","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723920091503},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/viewer.js","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 18:41:31 GMT","etag":"\"QmRBYaJ9nRSUg8YGywhpJmBWfv65FRnaph84RVyJxa95PJ\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/viewer.js","content-type":"text/javascript; charset=utf-8","x-ipfs-roots":"QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R,QmRBYaJ9nRSUg8YGywhpJmBWfv65FRnaph84RVyJxa95PJ","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"11766","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723920091514},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/dream09.polygonjs","host":"ipfs.arkivo.art","path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/dream09.polygonjs","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723920091537},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/poster.jpg","host":"ipfs.arkivo.art","path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/poster.jpg","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723920091537},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/poster.jpg","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 18:41:31 GMT","etag":"\"QmddH1KnUGkfRwb5CoaEMovTbd72AneqcRPQawcHLyEWMF\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/poster.jpg","content-type":"image/jpeg","x-ipfs-roots":"QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R,QmddH1KnUGkfRwb5CoaEMovTbd72AneqcRPQawcHLyEWMF","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"69665","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723920091544},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/dream09.polygonjs","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 18:41:31 GMT","etag":"\"QmXGabCAadhqR7BURUpsqBnEBQwKAYc5cBgfaWoEZ2XTxx\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/dream09.polygonjs","content-type":"application/zip","x-ipfs-roots":"QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R,QmXGabCAadhqR7BURUpsqBnEBQwKAYc5cBgfaWoEZ2XTxx","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"1001699","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723920091546},{"data":{"url":"blob:https://ipfs.arkivo.art/4bc5501d-edc8-4fb8-a6f3-736acd1f9808","host":"","path":"https://ipfs.arkivo.art/4bc5501d-edc8-4fb8-a6f3-736acd1f9808","type":"http","query":"","method":"GET","headers":{"origin":"https://ipfs.arkivo.art","referer":"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36"},"fragment":"","postData":null,"protocol":"blob:"},"type":1,"external":false,"timestamp":1723920091783},{"data":{"url":"blob:https://ipfs.arkivo.art/4bc5501d-edc8-4fb8-a6f3-736acd1f9808","body":"\"/*! For license information please see all.js.LICENSE.txt */\\nvar POLY=function(t){var e={};function n(i){if(e[i])return e[i].exports;var s=e[i]={i:i,l:!1,exports:{}};return t[i].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){\\\\\\\"undefined\\\\\\\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\\\\\\\"Module\\\\\\\"}),Object.defineProperty(t,\\\\\\\"__esModule\\\\\\\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\\\\\\\"object\\\\\\\"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\\\\\\\"default\\\\\\\",{enumerable:!0,value:t}),2&e&&\\\\\\\"string\\\\\\\"!=typeof t)for(var s in t)n.d(i,s,function(e){return t[e]}.bind(null,s));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\\\\\\\"a\\\\\\\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\\\\\\\"https://unpkg.com/@polygonjs/polygonjs@1.1.204/dist/\\\\\\\",n(n.s=216)}([function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(3),s=n(8);class r{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\\\\\\\"),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error(\\\\\\\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\"),this.applyQuaternion(a.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(a.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[3]*n+s[6]*i,this.y=s[1]*e+s[4]*n+s[7]*i,this.z=s[2]*e+s[5]*n+s[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,s=t.elements,r=1/(s[3]*e+s[7]*n+s[11]*i+s[15]);return this.x=(s[0]*e+s[4]*n+s[8]*i+s[12])*r,this.y=(s[1]*e+s[5]*n+s[9]*i+s[13])*r,this.z=(s[2]*e+s[6]*n+s[10]*i+s[14])*r,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,s=t.x,r=t.y,o=t.z,a=t.w,l=a*e+r*i-o*n,c=a*n+o*e-s*i,h=a*i+s*n-r*e,u=-s*e-r*n-o*i;return this.x=l*a+u*-s+c*-o-h*-r,this.y=c*a+u*-r+h*-s-l*-o,this.z=h*a+u*-o+l*-r-c*-s,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i,this.y=s[1]*e+s[5]*n+s[9]*i,this.z=s[2]*e+s[6]*n+s[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\\\\\\\"),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,s=t.z,r=e.x,o=e.y,a=e.z;return this.x=i*a-s*o,this.y=s*r-n*a,this.z=n*o-i*r,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return o.copy(this).projectOnVector(t),this.sub(o)}reflect(t){return this.sub(o.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(i.d(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}r.prototype.isVector3=!0;const o=new r,a=new s.a},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"hb\\\\\\\",(function(){return i})),n.d(e,\\\\\\\"Tc\\\\\\\",(function(){return s})),n.d(e,\\\\\\\"u\\\\\\\",(function(){return r})),n.d(e,\\\\\\\"s\\\\\\\",(function(){return o})),n.d(e,\\\\\\\"t\\\\\\\",(function(){return a})),n.d(e,\\\\\\\"k\\\\\\\",(function(){return l})),n.d(e,\\\\\\\"Fb\\\\\\\",(function(){return c})),n.d(e,\\\\\\\"Gb\\\\\\\",(function(){return h})),n.d(e,\\\\\\\"gd\\\\\\\",(function(){return u})),n.d(e,\\\\\\\"H\\\\\\\",(function(){return d})),n.d(e,\\\\\\\"i\\\\\\\",(function(){return p})),n.d(e,\\\\\\\"z\\\\\\\",(function(){return _})),n.d(e,\\\\\\\"F\\\\\\\",(function(){return m})),n.d(e,\\\\\\\"ub\\\\\\\",(function(){return f})),n.d(e,\\\\\\\"xb\\\\\\\",(function(){return g})),n.d(e,\\\\\\\"e\\\\\\\",(function(){return v})),n.d(e,\\\\\\\"Sc\\\\\\\",(function(){return y})),n.d(e,\\\\\\\"mb\\\\\\\",(function(){return x})),n.d(e,\\\\\\\"v\\\\\\\",(function(){return b})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return w})),n.d(e,\\\\\\\"Rc\\\\\\\",(function(){return T})),n.d(e,\\\\\\\"xc\\\\\\\",(function(){return A})),n.d(e,\\\\\\\"jb\\\\\\\",(function(){return M})),n.d(e,\\\\\\\"ib\\\\\\\",(function(){return E})),n.d(e,\\\\\\\"jd\\\\\\\",(function(){return S})),n.d(e,\\\\\\\"Ab\\\\\\\",(function(){return C})),n.d(e,\\\\\\\"Pc\\\\\\\",(function(){return N})),n.d(e,\\\\\\\"Eb\\\\\\\",(function(){return L})),n.d(e,\\\\\\\"Nc\\\\\\\",(function(){return O})),n.d(e,\\\\\\\"Db\\\\\\\",(function(){return P})),n.d(e,\\\\\\\"A\\\\\\\",(function(){return R})),n.d(e,\\\\\\\"Bb\\\\\\\",(function(){return I})),n.d(e,\\\\\\\"B\\\\\\\",(function(){return F})),n.d(e,\\\\\\\"Cb\\\\\\\",(function(){return D})),n.d(e,\\\\\\\"Oc\\\\\\\",(function(){return B})),n.d(e,\\\\\\\"tb\\\\\\\",(function(){return z})),n.d(e,\\\\\\\"g\\\\\\\",(function(){return k})),n.d(e,\\\\\\\"S\\\\\\\",(function(){return U})),n.d(e,\\\\\\\"T\\\\\\\",(function(){return G})),n.d(e,\\\\\\\"C\\\\\\\",(function(){return V})),n.d(e,\\\\\\\"L\\\\\\\",(function(){return H})),n.d(e,\\\\\\\"K\\\\\\\",(function(){return j})),n.d(e,\\\\\\\"yb\\\\\\\",(function(){return W})),n.d(e,\\\\\\\"nb\\\\\\\",(function(){return q})),n.d(e,\\\\\\\"lb\\\\\\\",(function(){return X})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return Y})),n.d(e,\\\\\\\"vb\\\\\\\",(function(){return $})),n.d(e,\\\\\\\"ab\\\\\\\",(function(){return J})),n.d(e,\\\\\\\"vc\\\\\\\",(function(){return Z})),n.d(e,\\\\\\\"m\\\\\\\",(function(){return K})),n.d(e,\\\\\\\"a\\\\\\\",(function(){return Q})),n.d(e,\\\\\\\"w\\\\\\\",(function(){return tt})),n.d(e,\\\\\\\"Yc\\\\\\\",(function(){return et})),n.d(e,\\\\\\\"o\\\\\\\",(function(){return nt})),n.d(e,\\\\\\\"p\\\\\\\",(function(){return it})),n.d(e,\\\\\\\"D\\\\\\\",(function(){return st})),n.d(e,\\\\\\\"E\\\\\\\",(function(){return rt})),n.d(e,\\\\\\\"q\\\\\\\",(function(){return ot})),n.d(e,\\\\\\\"r\\\\\\\",(function(){return at})),n.d(e,\\\\\\\"wc\\\\\\\",(function(){return lt})),n.d(e,\\\\\\\"n\\\\\\\",(function(){return ct})),n.d(e,\\\\\\\"kb\\\\\\\",(function(){return ht})),n.d(e,\\\\\\\"ob\\\\\\\",(function(){return ut})),n.d(e,\\\\\\\"sb\\\\\\\",(function(){return dt})),n.d(e,\\\\\\\"qb\\\\\\\",(function(){return pt})),n.d(e,\\\\\\\"rb\\\\\\\",(function(){return _t})),n.d(e,\\\\\\\"pb\\\\\\\",(function(){return mt})),n.d(e,\\\\\\\"V\\\\\\\",(function(){return ft})),n.d(e,\\\\\\\"Z\\\\\\\",(function(){return gt})),n.d(e,\\\\\\\"X\\\\\\\",(function(){return vt})),n.d(e,\\\\\\\"Y\\\\\\\",(function(){return yt})),n.d(e,\\\\\\\"W\\\\\\\",(function(){return xt})),n.d(e,\\\\\\\"Zc\\\\\\\",(function(){return bt})),n.d(e,\\\\\\\"l\\\\\\\",(function(){return wt})),n.d(e,\\\\\\\"Mc\\\\\\\",(function(){return Tt})),n.d(e,\\\\\\\"fd\\\\\\\",(function(){return At})),n.d(e,\\\\\\\"N\\\\\\\",(function(){return Mt})),n.d(e,\\\\\\\"bd\\\\\\\",(function(){return Et})),n.d(e,\\\\\\\"G\\\\\\\",(function(){return St})),n.d(e,\\\\\\\"M\\\\\\\",(function(){return Ct})),n.d(e,\\\\\\\"cd\\\\\\\",(function(){return Nt})),n.d(e,\\\\\\\"dd\\\\\\\",(function(){return Lt})),n.d(e,\\\\\\\"ed\\\\\\\",(function(){return Ot})),n.d(e,\\\\\\\"ad\\\\\\\",(function(){return Pt})),n.d(e,\\\\\\\"f\\\\\\\",(function(){return Rt})),n.d(e,\\\\\\\"ic\\\\\\\",(function(){return It})),n.d(e,\\\\\\\"Ib\\\\\\\",(function(){return Ft})),n.d(e,\\\\\\\"gb\\\\\\\",(function(){return Dt})),n.d(e,\\\\\\\"fb\\\\\\\",(function(){return Bt})),n.d(e,\\\\\\\"hc\\\\\\\",(function(){return zt})),n.d(e,\\\\\\\"x\\\\\\\",(function(){return kt})),n.d(e,\\\\\\\"y\\\\\\\",(function(){return Ut})),n.d(e,\\\\\\\"tc\\\\\\\",(function(){return Gt})),n.d(e,\\\\\\\"uc\\\\\\\",(function(){return Vt})),n.d(e,\\\\\\\"rc\\\\\\\",(function(){return Ht})),n.d(e,\\\\\\\"sc\\\\\\\",(function(){return jt})),n.d(e,\\\\\\\"jc\\\\\\\",(function(){return Wt})),n.d(e,\\\\\\\"Jb\\\\\\\",(function(){return qt})),n.d(e,\\\\\\\"qc\\\\\\\",(function(){return Xt})),n.d(e,\\\\\\\"cc\\\\\\\",(function(){return Yt})),n.d(e,\\\\\\\"dc\\\\\\\",(function(){return $t})),n.d(e,\\\\\\\"ec\\\\\\\",(function(){return Jt})),n.d(e,\\\\\\\"pc\\\\\\\",(function(){return Zt})),n.d(e,\\\\\\\"oc\\\\\\\",(function(){return Kt})),n.d(e,\\\\\\\"bc\\\\\\\",(function(){return Qt})),n.d(e,\\\\\\\"ac\\\\\\\",(function(){return te})),n.d(e,\\\\\\\"mc\\\\\\\",(function(){return ee})),n.d(e,\\\\\\\"nc\\\\\\\",(function(){return ne})),n.d(e,\\\\\\\"Zb\\\\\\\",(function(){return ie})),n.d(e,\\\\\\\"Qb\\\\\\\",(function(){return se})),n.d(e,\\\\\\\"Rb\\\\\\\",(function(){return re})),n.d(e,\\\\\\\"Sb\\\\\\\",(function(){return oe})),n.d(e,\\\\\\\"Tb\\\\\\\",(function(){return ae})),n.d(e,\\\\\\\"Ub\\\\\\\",(function(){return le})),n.d(e,\\\\\\\"Vb\\\\\\\",(function(){return ce})),n.d(e,\\\\\\\"Wb\\\\\\\",(function(){return he})),n.d(e,\\\\\\\"Xb\\\\\\\",(function(){return ue})),n.d(e,\\\\\\\"Lb\\\\\\\",(function(){return de})),n.d(e,\\\\\\\"Mb\\\\\\\",(function(){return pe})),n.d(e,\\\\\\\"Nb\\\\\\\",(function(){return _e})),n.d(e,\\\\\\\"Kb\\\\\\\",(function(){return me})),n.d(e,\\\\\\\"Ob\\\\\\\",(function(){return fe})),n.d(e,\\\\\\\"Pb\\\\\\\",(function(){return ge})),n.d(e,\\\\\\\"Yb\\\\\\\",(function(){return ve})),n.d(e,\\\\\\\"Ec\\\\\\\",(function(){return ye})),n.d(e,\\\\\\\"Fc\\\\\\\",(function(){return xe})),n.d(e,\\\\\\\"Gc\\\\\\\",(function(){return be})),n.d(e,\\\\\\\"Hc\\\\\\\",(function(){return we})),n.d(e,\\\\\\\"Ic\\\\\\\",(function(){return Te})),n.d(e,\\\\\\\"Jc\\\\\\\",(function(){return Ae})),n.d(e,\\\\\\\"Kc\\\\\\\",(function(){return Me})),n.d(e,\\\\\\\"Lc\\\\\\\",(function(){return Ee})),n.d(e,\\\\\\\"zc\\\\\\\",(function(){return Se})),n.d(e,\\\\\\\"Ac\\\\\\\",(function(){return Ce})),n.d(e,\\\\\\\"Bc\\\\\\\",(function(){return Ne})),n.d(e,\\\\\\\"yc\\\\\\\",(function(){return Le})),n.d(e,\\\\\\\"Cc\\\\\\\",(function(){return Oe})),n.d(e,\\\\\\\"Dc\\\\\\\",(function(){return Pe})),n.d(e,\\\\\\\"cb\\\\\\\",(function(){return Re})),n.d(e,\\\\\\\"eb\\\\\\\",(function(){return Ie})),n.d(e,\\\\\\\"db\\\\\\\",(function(){return Fe})),n.d(e,\\\\\\\"O\\\\\\\",(function(){return De})),n.d(e,\\\\\\\"P\\\\\\\",(function(){return Be})),n.d(e,\\\\\\\"Q\\\\\\\",(function(){return ze})),n.d(e,\\\\\\\"id\\\\\\\",(function(){return ke})),n.d(e,\\\\\\\"kd\\\\\\\",(function(){return Ue})),n.d(e,\\\\\\\"hd\\\\\\\",(function(){return Ge})),n.d(e,\\\\\\\"wb\\\\\\\",(function(){return Ve})),n.d(e,\\\\\\\"d\\\\\\\",(function(){return He})),n.d(e,\\\\\\\"Xc\\\\\\\",(function(){return je})),n.d(e,\\\\\\\"Wc\\\\\\\",(function(){return We})),n.d(e,\\\\\\\"Vc\\\\\\\",(function(){return qe})),n.d(e,\\\\\\\"U\\\\\\\",(function(){return Xe})),n.d(e,\\\\\\\"ld\\\\\\\",(function(){return Ye})),n.d(e,\\\\\\\"J\\\\\\\",(function(){return $e})),n.d(e,\\\\\\\"gc\\\\\\\",(function(){return Je})),n.d(e,\\\\\\\"bb\\\\\\\",(function(){return Ze})),n.d(e,\\\\\\\"lc\\\\\\\",(function(){return Ke})),n.d(e,\\\\\\\"kc\\\\\\\",(function(){return Qe})),n.d(e,\\\\\\\"fc\\\\\\\",(function(){return tn})),n.d(e,\\\\\\\"j\\\\\\\",(function(){return en})),n.d(e,\\\\\\\"Hb\\\\\\\",(function(){return nn})),n.d(e,\\\\\\\"Uc\\\\\\\",(function(){return sn})),n.d(e,\\\\\\\"zb\\\\\\\",(function(){return rn})),n.d(e,\\\\\\\"R\\\\\\\",(function(){return on})),n.d(e,\\\\\\\"h\\\\\\\",(function(){return an})),n.d(e,\\\\\\\"Qc\\\\\\\",(function(){return ln})),n.d(e,\\\\\\\"I\\\\\\\",(function(){return cn}));const i={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},s={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},r=0,o=1,a=2,l=0,c=1,h=2,u=3,d=0,p=1,_=2,m=1,f=0,g=1,v=2,y=3,x=4,b=5,w=100,T=101,A=102,M=103,E=104,S=200,C=201,N=202,L=203,O=204,P=205,R=206,I=207,F=208,D=209,B=210,z=0,k=1,U=2,G=3,V=4,H=5,j=6,W=7,q=0,X=1,Y=2,$=0,J=1,Z=2,K=3,Q=4,tt=5,et=300,nt=301,it=302,st=303,rt=304,ot=306,at=307,lt=1e3,ct=1001,ht=1002,ut=1003,dt=1004,pt=1004,_t=1005,mt=1005,ft=1006,gt=1007,vt=1007,yt=1008,xt=1008,bt=1009,wt=1010,Tt=1011,At=1012,Mt=1013,Et=1014,St=1015,Ct=1016,Nt=1017,Lt=1018,Ot=1019,Pt=1020,Rt=1021,It=1022,Ft=1023,Dt=1024,Bt=1025,zt=Ft,kt=1026,Ut=1027,Gt=1028,Vt=1029,Ht=1030,jt=1031,Wt=1032,qt=1033,Xt=33776,Yt=33777,$t=33778,Jt=33779,Zt=35840,Kt=35841,Qt=35842,te=35843,ee=36196,ne=37492,ie=37496,se=37808,re=37809,oe=37810,ae=37811,le=37812,ce=37813,he=37814,ue=37815,de=37816,pe=37817,_e=37818,me=37819,fe=37820,ge=37821,ve=36492,ye=37840,xe=37841,be=37842,we=37843,Te=37844,Ae=37845,Me=37846,Ee=37847,Se=37848,Ce=37849,Ne=37850,Le=37851,Oe=37852,Pe=37853,Re=2200,Ie=2201,Fe=2202,De=2300,Be=2301,ze=2302,ke=2400,Ue=2401,Ge=2402,Ve=2500,He=2501,je=0,We=1,qe=2,Xe=3e3,Ye=3001,$e=3007,Je=3002,Ze=3003,Ke=3004,Qe=3005,tn=3006,en=3200,nn=3201,sn=0,rn=1,on=7680,an=519,ln=35044,cn=\\\\\\\"300 es\\\\\\\"},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),s=this.x-t.x,r=this.y-t.y;return this.x=s*n-r*i+t.x,this.y=s*i+r*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}i.prototype.isVector2=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return s})),n.d(e,\\\\\\\"h\\\\\\\",(function(){return a})),n.d(e,\\\\\\\"d\\\\\\\",(function(){return l})),n.d(e,\\\\\\\"f\\\\\\\",(function(){return c})),n.d(e,\\\\\\\"j\\\\\\\",(function(){return h})),n.d(e,\\\\\\\"e\\\\\\\",(function(){return u})),n.d(e,\\\\\\\"k\\\\\\\",(function(){return d})),n.d(e,\\\\\\\"i\\\\\\\",(function(){return p})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return _})),n.d(e,\\\\\\\"g\\\\\\\",(function(){return m}));const i=Math.PI/180,s=180/Math.PI,r=[];for(let t=0;t<256;t++)r[t]=(t<16?\\\\\\\"0\\\\\\\":\\\\\\\"\\\\\\\")+t.toString(16);const o=\\\\\\\"undefined\\\\\\\"!=typeof crypto&&\\\\\\\"randomUUID\\\\\\\"in crypto;function a(){if(o)return crypto.randomUUID().toUpperCase();const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(r[255&t]+r[t>>8&255]+r[t>>16&255]+r[t>>24&255]+\\\\\\\"-\\\\\\\"+r[255&e]+r[e>>8&255]+\\\\\\\"-\\\\\\\"+r[e>>16&15|64]+r[e>>24&255]+\\\\\\\"-\\\\\\\"+r[63&n|128]+r[n>>8&255]+\\\\\\\"-\\\\\\\"+r[n>>16&255]+r[n>>24&255]+r[255&i]+r[i>>8&255]+r[i>>16&255]+r[i>>24&255]).toUpperCase()}function l(t,e,n){return Math.max(e,Math.min(n,t))}function c(t,e){return(t%e+e)%e}function h(t,e,n){return(1-n)*t+n*e}function u(t){return t*i}function d(t){return t*s}function p(t){return 0==(t&t-1)&&0!==t}function _(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function m(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"d\\\\\\\",(function(){return x})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return y})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return v})),n.d(e,\\\\\\\"i\\\\\\\",(function(){return g})),n.d(e,\\\\\\\"f\\\\\\\",(function(){return f})),n.d(e,\\\\\\\"h\\\\\\\",(function(){return m})),n.d(e,\\\\\\\"e\\\\\\\",(function(){return _})),n.d(e,\\\\\\\"k\\\\\\\",(function(){return p})),n.d(e,\\\\\\\"j\\\\\\\",(function(){return d})),n.d(e,\\\\\\\"g\\\\\\\",(function(){return u})),n.d(e,\\\\\\\"a\\\\\\\",(function(){return h}));var i=n(9),s=n(0),r=n(2),o=n(6),a=n(1);const l=new s.a,c=new r.a;class h{constructor(t,e,n){if(Array.isArray(t))throw new TypeError(\\\\\\\"THREE.BufferAttribute: array should be a Typed Array.\\\\\\\");this.name=\\\\\\\"\\\\\\\",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=a.Qc,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,s=this.itemSize;i<s;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}copyColorsArray(t){const e=this.array;let n=0;for(let i=0,s=t.length;i<s;i++){let s=t[i];void 0===s&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyColorsArray(): color is undefined\\\\\\\",i),s=new o.a),e[n++]=s.r,e[n++]=s.g,e[n++]=s.b}return this}copyVector2sArray(t){const e=this.array;let n=0;for(let i=0,s=t.length;i<s;i++){let s=t[i];void 0===s&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\\\\\\\",i),s=new r.a),e[n++]=s.x,e[n++]=s.y}return this}copyVector3sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\\\\\\\",i),r=new s.a),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z}return this}copyVector4sArray(t){const e=this.array;let n=0;for(let s=0,r=t.length;s<r;s++){let r=t[s];void 0===r&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\\\\\\\",s),r=new i.a),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z,e[n++]=r.w}return this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e<n;e++)c.fromBufferAttribute(this,e),c.applyMatrix3(t),this.setXY(e,c.x,c.y);else if(3===this.itemSize)for(let e=0,n=this.count;e<n;e++)l.fromBufferAttribute(this,e),l.applyMatrix3(t),this.setXYZ(e,l.x,l.y,l.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)l.x=this.getX(e),l.y=this.getY(e),l.z=this.getZ(e),l.applyMatrix4(t),this.setXYZ(e,l.x,l.y,l.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)l.x=this.getX(e),l.y=this.getY(e),l.z=this.getZ(e),l.applyNormalMatrix(t),this.setXYZ(e,l.x,l.y,l.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)l.x=this.getX(e),l.y=this.getY(e),l.z=this.getZ(e),l.transformDirection(t),this.setXYZ(e,l.x,l.y,l.z);return this}set(t,e=0){return this.array.set(t,e),this}getX(t){return this.array[t*this.itemSize]}setX(t,e){return this.array[t*this.itemSize]=e,this}getY(t){return this.array[t*this.itemSize+1]}setY(t,e){return this.array[t*this.itemSize+1]=e,this}getZ(t){return this.array[t*this.itemSize+2]}setZ(t,e){return this.array[t*this.itemSize+2]=e,this}getW(t){return this.array[t*this.itemSize+3]}setW(t,e){return this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,s){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=s,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),this.usage!==a.Qc&&(t.usage=this.usage),0===this.updateRange.offset&&-1===this.updateRange.count||(t.updateRange=this.updateRange),t}}h.prototype.isBufferAttribute=!0;class u extends h{constructor(t,e,n){super(new Int8Array(t),e,n)}}class d extends h{constructor(t,e,n){super(new Uint8Array(t),e,n)}}class p extends h{constructor(t,e,n){super(new Uint8ClampedArray(t),e,n)}}class _ extends h{constructor(t,e,n){super(new Int16Array(t),e,n)}}class m extends h{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class f extends h{constructor(t,e,n){super(new Int32Array(t),e,n)}}class g extends h{constructor(t,e,n){super(new Uint32Array(t),e,n)}}class v extends h{constructor(t,e,n){super(new Uint16Array(t),e,n)}}v.prototype.isFloat16BufferAttribute=!0;class y extends h{constructor(t,e,n){super(new Float32Array(t),e,n)}}class x extends h{constructor(t,e,n){super(new Float64Array(t),e,n)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(0);class s{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error(\\\\\\\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\\\\\\\")}set(t,e,n,i,s,r,o,a,l,c,h,u,d,p,_,m){const f=this.elements;return f[0]=t,f[4]=e,f[8]=n,f[12]=i,f[1]=s,f[5]=r,f[9]=o,f[13]=a,f[2]=l,f[6]=c,f[10]=h,f[14]=u,f[3]=d,f[7]=p,f[11]=_,f[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new s).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/r.setFromMatrixColumn(t,0).length(),s=1/r.setFromMatrixColumn(t,1).length(),o=1/r.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*s,e[5]=n[5]*s,e[6]=n[6]*s,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error(\\\\\\\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\\\\\\\");const e=this.elements,n=t.x,i=t.y,s=t.z,r=Math.cos(n),o=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(s),h=Math.sin(s);if(\\\\\\\"XYZ\\\\\\\"===t.order){const t=r*c,n=r*h,i=o*c,s=o*h;e[0]=a*c,e[4]=-a*h,e[8]=l,e[1]=n+i*l,e[5]=t-s*l,e[9]=-o*a,e[2]=s-t*l,e[6]=i+n*l,e[10]=r*a}else if(\\\\\\\"YXZ\\\\\\\"===t.order){const t=a*c,n=a*h,i=l*c,s=l*h;e[0]=t+s*o,e[4]=i*o-n,e[8]=r*l,e[1]=r*h,e[5]=r*c,e[9]=-o,e[2]=n*o-i,e[6]=s+t*o,e[10]=r*a}else if(\\\\\\\"ZXY\\\\\\\"===t.order){const t=a*c,n=a*h,i=l*c,s=l*h;e[0]=t-s*o,e[4]=-r*h,e[8]=i+n*o,e[1]=n+i*o,e[5]=r*c,e[9]=s-t*o,e[2]=-r*l,e[6]=o,e[10]=r*a}else if(\\\\\\\"ZYX\\\\\\\"===t.order){const t=r*c,n=r*h,i=o*c,s=o*h;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+s,e[1]=a*h,e[5]=s*l+t,e[9]=n*l-i,e[2]=-l,e[6]=o*a,e[10]=r*a}else if(\\\\\\\"YZX\\\\\\\"===t.order){const t=r*a,n=r*l,i=o*a,s=o*l;e[0]=a*c,e[4]=s-t*h,e[8]=i*h+n,e[1]=h,e[5]=r*c,e[9]=-o*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-s*h}else if(\\\\\\\"XZY\\\\\\\"===t.order){const t=r*a,n=r*l,i=o*a,s=o*l;e[0]=a*c,e[4]=-h,e[8]=l*c,e[1]=t*h+s,e[5]=r*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=o*c,e[10]=s*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(a,t,l)}lookAt(t,e,n){const i=this.elements;return u.subVectors(t,e),0===u.lengthSq()&&(u.z=1),u.normalize(),c.crossVectors(n,u),0===c.lengthSq()&&(1===Math.abs(n.z)?u.x+=1e-4:u.z+=1e-4,u.normalize(),c.crossVectors(n,u)),c.normalize(),h.crossVectors(u,c),i[0]=c.x,i[4]=h.x,i[8]=u.x,i[1]=c.y,i[5]=h.y,i[9]=u.y,i[2]=c.z,i[6]=h.z,i[10]=u.z,this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\\\\\\\"),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[4],a=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],_=n[6],m=n[10],f=n[14],g=n[3],v=n[7],y=n[11],x=n[15],b=i[0],w=i[4],T=i[8],A=i[12],M=i[1],E=i[5],S=i[9],C=i[13],N=i[2],L=i[6],O=i[10],P=i[14],R=i[3],I=i[7],F=i[11],D=i[15];return s[0]=r*b+o*M+a*N+l*R,s[4]=r*w+o*E+a*L+l*I,s[8]=r*T+o*S+a*O+l*F,s[12]=r*A+o*C+a*P+l*D,s[1]=c*b+h*M+u*N+d*R,s[5]=c*w+h*E+u*L+d*I,s[9]=c*T+h*S+u*O+d*F,s[13]=c*A+h*C+u*P+d*D,s[2]=p*b+_*M+m*N+f*R,s[6]=p*w+_*E+m*L+f*I,s[10]=p*T+_*S+m*O+f*F,s[14]=p*A+_*C+m*P+f*D,s[3]=g*b+v*M+y*N+x*R,s[7]=g*w+v*E+y*L+x*I,s[11]=g*T+v*S+y*O+x*F,s[15]=g*A+v*C+y*P+x*D,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],s=t[12],r=t[1],o=t[5],a=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+s*a*h-i*l*h-s*o*u+n*l*u+i*o*d-n*a*d)+t[7]*(+e*a*d-e*l*u+s*r*u-i*r*d+i*l*c-s*a*c)+t[11]*(+e*l*h-e*o*d-s*r*h+n*r*d+s*o*c-n*l*c)+t[15]*(-i*o*c-e*a*h+e*o*u+i*r*h-n*r*u+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],_=t[13],m=t[14],f=t[15],g=h*m*l-_*u*l+_*a*d-o*m*d-h*a*f+o*u*f,v=p*u*l-c*m*l-p*a*d+r*m*d+c*a*f-r*u*f,y=c*_*l-p*h*l+p*o*d-r*_*d-c*o*f+r*h*f,x=p*h*a-c*_*a-p*o*u+r*_*u+c*o*m-r*h*m,b=e*g+n*v+i*y+s*x;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/b;return t[0]=g*w,t[1]=(_*u*s-h*m*s-_*i*d+n*m*d+h*i*f-n*u*f)*w,t[2]=(o*m*s-_*a*s+_*i*l-n*m*l-o*i*f+n*a*f)*w,t[3]=(h*a*s-o*u*s-h*i*l+n*u*l+o*i*d-n*a*d)*w,t[4]=v*w,t[5]=(c*m*s-p*u*s+p*i*d-e*m*d-c*i*f+e*u*f)*w,t[6]=(p*a*s-r*m*s-p*i*l+e*m*l+r*i*f-e*a*f)*w,t[7]=(r*u*s-c*a*s+c*i*l-e*u*l-r*i*d+e*a*d)*w,t[8]=y*w,t[9]=(p*h*s-c*_*s-p*n*d+e*_*d+c*n*f-e*h*f)*w,t[10]=(r*_*s-p*o*s+p*n*l-e*_*l-r*n*f+e*o*f)*w,t[11]=(c*o*s-r*h*s-c*n*l+e*h*l+r*n*d-e*o*d)*w,t[12]=x*w,t[13]=(c*_*i-p*h*i+p*n*u-e*_*u-c*n*m+e*h*m)*w,t[14]=(p*o*i-r*_*i-p*n*a+e*_*a+r*n*m-e*o*m)*w,t[15]=(r*h*i-c*o*i+c*n*a-e*h*a-r*n*u+e*o*u)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,s=t.z;return e[0]*=n,e[4]*=i,e[8]*=s,e[1]*=n,e[5]*=i,e[9]*=s,e[2]*=n,e[6]*=i,e[10]*=s,e[3]*=n,e[7]*=i,e[11]*=s,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),s=1-n,r=t.x,o=t.y,a=t.z,l=s*r,c=s*o;return this.set(l*r+n,l*o-i*a,l*a+i*o,0,l*o+i*a,c*o+n,c*a-i*r,0,l*a-i*o,c*a+i*r,s*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,s,r){return this.set(1,n,s,0,t,1,r,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,s=e._x,r=e._y,o=e._z,a=e._w,l=s+s,c=r+r,h=o+o,u=s*l,d=s*c,p=s*h,_=r*c,m=r*h,f=o*h,g=a*l,v=a*c,y=a*h,x=n.x,b=n.y,w=n.z;return i[0]=(1-(_+f))*x,i[1]=(d+y)*x,i[2]=(p-v)*x,i[3]=0,i[4]=(d-y)*b,i[5]=(1-(u+f))*b,i[6]=(m+g)*b,i[7]=0,i[8]=(p+v)*w,i[9]=(m-g)*w,i[10]=(1-(u+_))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let s=r.set(i[0],i[1],i[2]).length();const a=r.set(i[4],i[5],i[6]).length(),l=r.set(i[8],i[9],i[10]).length();this.determinant()<0&&(s=-s),t.x=i[12],t.y=i[13],t.z=i[14],o.copy(this);const c=1/s,h=1/a,u=1/l;return o.elements[0]*=c,o.elements[1]*=c,o.elements[2]*=c,o.elements[4]*=h,o.elements[5]*=h,o.elements[6]*=h,o.elements[8]*=u,o.elements[9]*=u,o.elements[10]*=u,e.setFromRotationMatrix(o),n.x=s,n.y=a,n.z=l,this}makePerspective(t,e,n,i,s,r){void 0===r&&console.warn(\\\\\\\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\\\\\\\");const o=this.elements,a=2*s/(e-t),l=2*s/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(r+s)/(r-s),d=-2*r*s/(r-s);return o[0]=a,o[4]=0,o[8]=c,o[12]=0,o[1]=0,o[5]=l,o[9]=h,o[13]=0,o[2]=0,o[6]=0,o[10]=u,o[14]=d,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(t,e,n,i,s,r){const o=this.elements,a=1/(e-t),l=1/(n-i),c=1/(r-s),h=(e+t)*a,u=(n+i)*l,d=(r+s)*c;return o[0]=2*a,o[4]=0,o[8]=0,o[12]=-h,o[1]=0,o[5]=2*l,o[9]=0,o[13]=-u,o[2]=0,o[6]=0,o[10]=-2*c,o[14]=-d,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}s.prototype.isMatrix4=!0;const r=new i.a,o=new s,a=new i.a(0,0,0),l=new i.a(1,1,1),c=new i.a,h=new i.a,u=new i.a},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return h}));var i=n(3);const s={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},r={h:0,s:0,l:0},o={h:0,s:0,l:0};function a(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function l(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function c(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class h{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):\\\\\\\"number\\\\\\\"==typeof t?this.setHex(t):\\\\\\\"string\\\\\\\"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=i.f(t,1),e=i.d(e,0,1),n=i.d(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,s=2*n-i;this.r=a(s,i,t+1/3),this.g=a(s,i,t),this.b=a(s,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn(\\\\\\\"THREE.Color: Alpha component of \\\\\\\"+t+\\\\\\\" will be ignored.\\\\\\\")}let n;if(n=/^((?:rgb|hsl)a?)\\\\(([^\\\\)]*)\\\\)/.exec(t)){let t;const i=n[1],s=n[2];switch(i){case\\\\\\\"rgb\\\\\\\":case\\\\\\\"rgba\\\\\\\":if(t=/^\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(s))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(s))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case\\\\\\\"hsl\\\\\\\":case\\\\\\\"hsla\\\\\\\":if(t=/^\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(s)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,s=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,s)}}}else if(n=/^\\\\#([A-Fa-f\\\\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=s[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn(\\\\\\\"THREE.Color: Unknown color \\\\\\\"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=l(t.r),this.g=l(t.g),this.b=l(t.b),this}copyLinearToSRGB(t){return this.r=c(t.r),this.g=c(t.g),this.b=c(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return(\\\\\\\"000000\\\\\\\"+this.getHex().toString(16)).slice(-6)}getHSL(t){const e=this.r,n=this.g,i=this.b,s=Math.max(e,n,i),r=Math.min(e,n,i);let o,a;const l=(r+s)/2;if(r===s)o=0,a=0;else{const t=s-r;switch(a=l<=.5?t/(s+r):t/(2-s-r),s){case e:o=(n-i)/t+(n<i?6:0);break;case n:o=(i-e)/t+2;break;case i:o=(e-n)/t+4}o/=6}return t.h=o,t.s=a,t.l=l,t}getStyle(){return\\\\\\\"rgb(\\\\\\\"+(255*this.r|0)+\\\\\\\",\\\\\\\"+(255*this.g|0)+\\\\\\\",\\\\\\\"+(255*this.b|0)+\\\\\\\")\\\\\\\"}offsetHSL(t,e,n){return this.getHSL(r),r.h+=t,r.s+=e,r.l+=n,this.setHSL(r.h,r.s,r.l),this}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(r),t.getHSL(o);const n=i.j(r.h,o.h,e),s=i.j(r.s,o.s,e),a=i.j(r.l,o.l,e);return this.setHSL(n,s,a),this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),!0===t.normalized&&(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}}h.NAMES=s,h.prototype.isColor=!0,h.prototype.r=1,h.prototype.g=1,h.prototype.b=1},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return b}));var i=n(0),s=n(2),r=n(16),o=n(15),a=n(4),l=n(18),c=n(10),h=n(5),u=n(11),d=n(3),p=n(20);let _=0;const m=new h.a,f=new c.a,g=new i.a,v=new r.a,y=new r.a,x=new i.a;class b extends o.a{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:_++}),this.uuid=d.h(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"BufferGeometry\\\\\\\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Object(p.a)(t)>65535?a.i:a.h)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new u.a).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return m.makeRotationFromQuaternion(t),this.applyMatrix4(m),this}rotateX(t){return m.makeRotationX(t),this.applyMatrix4(m),this}rotateY(t){return m.makeRotationY(t),this.applyMatrix4(m),this}rotateZ(t){return m.makeRotationZ(t),this.applyMatrix4(m),this}translate(t,e,n){return m.makeTranslation(t,e,n),this.applyMatrix4(m),this}scale(t,e,n){return m.makeScale(t,e,n),this.applyMatrix4(m),this}lookAt(t){return f.lookAt(t),f.updateMatrix(),this.applyMatrix4(f.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(g).negate(),this.translate(g.x,g.y,g.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n<i;n++){const i=t[n];e.push(i.x,i.y,i.z||0)}return this.setAttribute(\\\\\\\"position\\\\\\\",new a.c(e,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new r.a);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".',this),void this.boundingBox.set(new i.a(-1/0,-1/0,-1/0),new i.a(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];v.setFromBufferAttribute(n),this.morphTargetsRelative?(x.addVectors(this.boundingBox.min,v.min),this.boundingBox.expandByPoint(x),x.addVectors(this.boundingBox.max,v.max),this.boundingBox.expandByPoint(x)):(this.boundingBox.expandByPoint(v.min),this.boundingBox.expandByPoint(v.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \\\\\\\"position\\\\\\\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new l.a);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".',this),void this.boundingSphere.set(new i.a,1/0);if(t){const n=this.boundingSphere.center;if(v.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];y.setFromBufferAttribute(n),this.morphTargetsRelative?(x.addVectors(v.min,y.min),v.expandByPoint(x),x.addVectors(v.max,y.max),v.expandByPoint(x)):(v.expandByPoint(y.min),v.expandByPoint(y.max))}v.getCenter(n);let i=0;for(let e=0,s=t.count;e<s;e++)x.fromBufferAttribute(t,e),i=Math.max(i,n.distanceToSquared(x));if(e)for(let s=0,r=e.length;s<r;s++){const r=e[s],o=this.morphTargetsRelative;for(let e=0,s=r.count;e<s;e++)x.fromBufferAttribute(r,e),o&&(g.fromBufferAttribute(t,e),x.add(g)),i=Math.max(i,n.distanceToSquared(x))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \\\\\\\"position\\\\\\\" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error(\\\\\\\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\\\\\\\");const n=t.array,r=e.position.array,o=e.normal.array,l=e.uv.array,c=r.length/3;void 0===e.tangent&&this.setAttribute(\\\\\\\"tangent\\\\\\\",new a.a(new Float32Array(4*c),4));const h=e.tangent.array,u=[],d=[];for(let t=0;t<c;t++)u[t]=new i.a,d[t]=new i.a;const p=new i.a,_=new i.a,m=new i.a,f=new s.a,g=new s.a,v=new s.a,y=new i.a,x=new i.a;function b(t,e,n){p.fromArray(r,3*t),_.fromArray(r,3*e),m.fromArray(r,3*n),f.fromArray(l,2*t),g.fromArray(l,2*e),v.fromArray(l,2*n),_.sub(p),m.sub(p),g.sub(f),v.sub(f);const i=1/(g.x*v.y-v.x*g.y);isFinite(i)&&(y.copy(_).multiplyScalar(v.y).addScaledVector(m,-g.y).multiplyScalar(i),x.copy(m).multiplyScalar(g.x).addScaledVector(_,-v.x).multiplyScalar(i),u[t].add(y),u[e].add(y),u[n].add(y),d[t].add(x),d[e].add(x),d[n].add(x))}let w=this.groups;0===w.length&&(w=[{start:0,count:n.length}]);for(let t=0,e=w.length;t<e;++t){const e=w[t],i=e.start;for(let t=i,s=i+e.count;t<s;t+=3)b(n[t+0],n[t+1],n[t+2])}const T=new i.a,A=new i.a,M=new i.a,E=new i.a;function S(t){M.fromArray(o,3*t),E.copy(M);const e=u[t];T.copy(e),T.sub(M.multiplyScalar(M.dot(e))).normalize(),A.crossVectors(E,e);const n=A.dot(d[t])<0?-1:1;h[4*t]=T.x,h[4*t+1]=T.y,h[4*t+2]=T.z,h[4*t+3]=n}for(let t=0,e=w.length;t<e;++t){const e=w[t],i=e.start;for(let t=i,s=i+e.count;t<s;t+=3)S(n[t+0]),S(n[t+1]),S(n[t+2])}}computeVertexNormals(){const t=this.index,e=this.getAttribute(\\\\\\\"position\\\\\\\");if(void 0!==e){let n=this.getAttribute(\\\\\\\"normal\\\\\\\");if(void 0===n)n=new a.a(new Float32Array(3*e.count),3),this.setAttribute(\\\\\\\"normal\\\\\\\",n);else for(let t=0,e=n.count;t<e;t++)n.setXYZ(t,0,0,0);const s=new i.a,r=new i.a,o=new i.a,l=new i.a,c=new i.a,h=new i.a,u=new i.a,d=new i.a;if(t)for(let i=0,a=t.count;i<a;i+=3){const a=t.getX(i+0),p=t.getX(i+1),_=t.getX(i+2);s.fromBufferAttribute(e,a),r.fromBufferAttribute(e,p),o.fromBufferAttribute(e,_),u.subVectors(o,r),d.subVectors(s,r),u.cross(d),l.fromBufferAttribute(n,a),c.fromBufferAttribute(n,p),h.fromBufferAttribute(n,_),l.add(u),c.add(u),h.add(u),n.setXYZ(a,l.x,l.y,l.z),n.setXYZ(p,c.x,c.y,c.z),n.setXYZ(_,h.x,h.y,h.z)}else for(let t=0,i=e.count;t<i;t+=3)s.fromBufferAttribute(e,t+0),r.fromBufferAttribute(e,t+1),o.fromBufferAttribute(e,t+2),u.subVectors(o,r),d.subVectors(s,r),u.cross(d),n.setXYZ(t+0,u.x,u.y,u.z),n.setXYZ(t+1,u.x,u.y,u.z),n.setXYZ(t+2,u.x,u.y,u.z);this.normalizeNormals(),n.needsUpdate=!0}}merge(t,e){if(!t||!t.isBufferGeometry)return void console.error(\\\\\\\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\\\\\\\",t);void 0===e&&(e=0,console.warn(\\\\\\\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\\\\\\\"));const n=this.attributes;for(const i in n){if(void 0===t.attributes[i])continue;const s=n[i].array,r=t.attributes[i],o=r.array,a=r.itemSize*e,l=Math.min(o.length,s.length-a);for(let t=0,e=a;t<l;t++,e++)s[e]=o[t]}return this}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)x.fromBufferAttribute(t,e),x.normalize(),t.setXYZ(e,x.x,x.y,x.z)}toNonIndexed(){function t(t,e){const n=t.array,i=t.itemSize,s=t.normalized,r=new n.constructor(e.length*i);let o=0,l=0;for(let s=0,a=e.length;s<a;s++){o=t.isInterleavedBufferAttribute?e[s]*t.data.stride+t.offset:e[s]*i;for(let t=0;t<i;t++)r[l++]=n[o++]}return new a.a(r,i,s)}if(null===this.index)return console.warn(\\\\\\\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\\\\\\\"),this;const e=new b,n=this.index.array,i=this.attributes;for(const s in i){const r=t(i[s],n);e.setAttribute(s,r)}const s=this.morphAttributes;for(const i in s){const r=[],o=s[i];for(let e=0,i=o.length;e<i;e++){const i=t(o[e],n);r.push(i)}e.morphAttributes[i]=r}e.morphTargetsRelative=this.morphTargetsRelative;const r=this.groups;for(let t=0,n=r.length;t<n;t++){const n=r[t];e.addGroup(n.start,n.count,n.materialIndex)}return e}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"BufferGeometry\\\\\\\",generator:\\\\\\\"BufferGeometry.toJSON\\\\\\\"}};if(t.uuid=this.uuid,t.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let s=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],r=[];for(let e=0,i=n.length;e<i;e++){const i=n[e];r.push(i.toJSON(t.data))}r.length>0&&(i[e]=r,s=!0)}s&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const r=this.groups;r.length>0&&(t.data.groups=JSON.parse(JSON.stringify(r)));const o=this.boundingSphere;return null!==o&&(t.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const s=t.morphAttributes;for(const t in s){const n=[],i=s[t];for(let t=0,s=i.length;t<s;t++)n.push(i[t].clone(e));this.morphAttributes[t]=n}this.morphTargetsRelative=t.morphTargetsRelative;const r=t.groups;for(let t=0,e=r.length;t<e;t++){const e=r[t];this.addGroup(e.start,e.count,e.materialIndex)}const o=t.boundingBox;null!==o&&(this.boundingBox=o.clone());const a=t.boundingSphere;return null!==a&&(this.boundingSphere=a.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,void 0!==t.parameters&&(this.parameters=Object.assign({},t.parameters)),this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}b.prototype.isBufferGeometry=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(3);class s{constructor(t=0,e=0,n=0,i=1){this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return console.warn(\\\\\\\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\\\\\\\"),n.slerpQuaternions(t,e,i)}static slerpFlat(t,e,n,i,s,r,o){let a=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=s[r+0],d=s[r+1],p=s[r+2],_=s[r+3];if(0===o)return t[e+0]=a,t[e+1]=l,t[e+2]=c,void(t[e+3]=h);if(1===o)return t[e+0]=u,t[e+1]=d,t[e+2]=p,void(t[e+3]=_);if(h!==_||a!==u||l!==d||c!==p){let t=1-o;const e=a*u+l*d+c*p+h*_,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const s=Math.sqrt(i),r=Math.atan2(s,e*n);t=Math.sin(t*r)/s,o=Math.sin(o*r)/s}const s=o*n;if(a=a*t+u*s,l=l*t+d*s,c=c*t+p*s,h=h*t+_*s,t===1-o){const t=1/Math.sqrt(a*a+l*l+c*c+h*h);a*=t,l*=t,c*=t,h*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,s,r){const o=n[i],a=n[i+1],l=n[i+2],c=n[i+3],h=s[r],u=s[r+1],d=s[r+2],p=s[r+3];return t[e]=o*p+c*h+a*d-l*u,t[e+1]=a*p+c*u+l*h-o*d,t[e+2]=l*p+c*d+o*u-a*h,t[e+3]=c*p-o*h-a*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error(\\\\\\\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\");const n=t._x,i=t._y,s=t._z,r=t._order,o=Math.cos,a=Math.sin,l=o(n/2),c=o(i/2),h=o(s/2),u=a(n/2),d=a(i/2),p=a(s/2);switch(r){case\\\\\\\"XYZ\\\\\\\":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case\\\\\\\"YXZ\\\\\\\":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case\\\\\\\"ZXY\\\\\\\":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case\\\\\\\"ZYX\\\\\\\":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case\\\\\\\"YZX\\\\\\\":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case\\\\\\\"XZY\\\\\\\":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn(\\\\\\\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \\\\\\\"+r)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],s=e[8],r=e[1],o=e[5],a=e[9],l=e[2],c=e[6],h=e[10],u=n+o+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-a)*t,this._y=(s-l)*t,this._z=(r-i)*t}else if(n>o&&n>h){const t=2*Math.sqrt(1+n-o-h);this._w=(c-a)/t,this._x=.25*t,this._y=(i+r)/t,this._z=(s+l)/t}else if(o>h){const t=2*Math.sqrt(1+o-n-h);this._w=(s-l)/t,this._x=(i+r)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+h-n-o);this._w=(r-i)/t,this._x=(s+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<Number.EPSILON?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(i.d(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\\\\\\\"),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,s=t._z,r=t._w,o=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+r*o+i*l-s*a,this._y=i*c+r*a+s*o-n*l,this._z=s*c+r*l+n*a-i*o,this._w=r*c-n*o-i*a-s*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,s=this._z,r=this._w;let o=r*t._w+n*t._x+i*t._y+s*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=r,this._x=n,this._y=i,this._z=s,this;const a=1-o*o;if(a<=Number.EPSILON){const t=1-e;return this._w=t*r+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*s+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,o),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=r*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=s*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),s=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(s),n*Math.cos(s),e*Math.sin(i))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}s.prototype.isQuaternion=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,s=this.w,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i+r[12]*s,this.y=r[1]*e+r[5]*n+r[9]*i+r[13]*s,this.z=r[2]*e+r[6]*n+r[10]*i+r[14]*s,this.w=r[3]*e+r[7]*n+r[11]*i+r[15]*s,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,s;const r=.01,o=.1,a=t.elements,l=a[0],c=a[4],h=a[8],u=a[1],d=a[5],p=a[9],_=a[2],m=a[6],f=a[10];if(Math.abs(c-u)<r&&Math.abs(h-_)<r&&Math.abs(p-m)<r){if(Math.abs(c+u)<o&&Math.abs(h+_)<o&&Math.abs(p+m)<o&&Math.abs(l+d+f-3)<o)return this.set(1,0,0,0),this;e=Math.PI;const t=(l+1)/2,a=(d+1)/2,g=(f+1)/2,v=(c+u)/4,y=(h+_)/4,x=(p+m)/4;return t>a&&t>g?t<r?(n=0,i=.707106781,s=.707106781):(n=Math.sqrt(t),i=v/n,s=y/n):a>g?a<r?(n=.707106781,i=0,s=.707106781):(i=Math.sqrt(a),n=v/i,s=x/i):g<r?(n=.707106781,i=.707106781,s=0):(s=Math.sqrt(g),n=y/s,i=x/s),this.set(n,i,s,e),this}let g=Math.sqrt((m-p)*(m-p)+(h-_)*(h-_)+(u-c)*(u-c));return Math.abs(g)<.001&&(g=1),this.x=(m-p)/g,this.y=(h-_)/g,this.z=(u-c)/g,this.w=Math.acos((l+d+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}i.prototype.isVector4=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return A}));var i=n(8),s=n(0),r=n(5),o=n(15),a=n(27),l=n(36),c=n(11),h=n(3);let u=0;const d=new s.a,p=new i.a,_=new r.a,m=new s.a,f=new s.a,g=new s.a,v=new i.a,y=new s.a(1,0,0),x=new s.a(0,1,0),b=new s.a(0,0,1),w={type:\\\\\\\"added\\\\\\\"},T={type:\\\\\\\"removed\\\\\\\"};class A extends o.a{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:u++}),this.uuid=h.h(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Object3D\\\\\\\",this.parent=null,this.children=[],this.up=A.DefaultUp.clone();const t=new s.a,e=new a.a,n=new i.a,o=new s.a(1,1,1);e._onChange((function(){n.setFromEuler(e,!1)})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1)})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:o},modelViewMatrix:{value:new r.a},normalMatrix:{value:new c.a}}),this.matrix=new r.a,this.matrixWorld=new r.a,this.matrixAutoUpdate=A.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new l.a,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return p.setFromAxisAngle(t,e),this.quaternion.multiply(p),this}rotateOnWorldAxis(t,e){return p.setFromAxisAngle(t,e),this.quaternion.premultiply(p),this}rotateX(t){return this.rotateOnAxis(y,t)}rotateY(t){return this.rotateOnAxis(x,t)}rotateZ(t){return this.rotateOnAxis(b,t)}translateOnAxis(t,e){return d.copy(t).applyQuaternion(this.quaternion),this.position.add(d.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(y,t)}translateY(t){return this.translateOnAxis(x,t)}translateZ(t){return this.translateOnAxis(b,t)}localToWorld(t){return t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return t.applyMatrix4(_.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?m.copy(t):m.set(t,e,n);const i=this.parent;this.updateWorldMatrix(!0,!1),f.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?_.lookAt(f,m,this.up):_.lookAt(m,f,this.up),this.quaternion.setFromRotationMatrix(_),i&&(_.extractRotation(i.matrixWorld),p.setFromRotationMatrix(_),this.quaternion.premultiply(p.invert()))}add(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error(\\\\\\\"THREE.Object3D.add: object can't be added as a child of itself.\\\\\\\",t),this):(t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(w)):console.error(\\\\\\\"THREE.Object3D.add: object not an instance of THREE.Object3D.\\\\\\\",t),this)}remove(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return-1!==e&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(T)),this}removeFromParent(){const t=this.parent;return null!==t&&t.remove(this),this}clear(){for(let t=0;t<this.children.length;t++){const e=this.children[t];e.parent=null,e.dispatchEvent(T)}return this.children.length=0,this}attach(t){return this.updateWorldMatrix(!0,!1),_.copy(this.matrixWorld).invert(),null!==t.parent&&(t.parent.updateWorldMatrix(!0,!1),_.multiply(t.parent.matrixWorld)),t.applyMatrix4(_),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\\\\\\\"id\\\\\\\",t)}getObjectByName(t){return this.getObjectByProperty(\\\\\\\"name\\\\\\\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n<i;n++){const i=this.children[n].getObjectByProperty(t,e);if(void 0!==i)return i}}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(f,t,g),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(f,v,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverse(t)}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;null!==e&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(!0===t&&null!==n&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e<n;e++)t[e].updateWorldMatrix(!1,!0)}}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t,n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{}},n.metadata={version:4.5,type:\\\\\\\"Object\\\\\\\",generator:\\\\\\\"Object3D.toJSON\\\\\\\"});const i={};function s(e,n){return void 0===e[n.uuid]&&(e[n.uuid]=n.toJSON(t)),n.uuid}if(i.uuid=this.uuid,i.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(i.name=this.name),!0===this.castShadow&&(i.castShadow=!0),!0===this.receiveShadow&&(i.receiveShadow=!0),!1===this.visible&&(i.visible=!1),!1===this.frustumCulled&&(i.frustumCulled=!1),0!==this.renderOrder&&(i.renderOrder=this.renderOrder),\\\\\\\"{}\\\\\\\"!==JSON.stringify(this.userData)&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type=\\\\\\\"InstancedMesh\\\\\\\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=s(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e<i;e++){const i=n[e];s(t.shapes,i)}else s(t.shapes,n)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(s(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,i=this.material.length;n<i;n++)e.push(s(t.materials,this.material[n]));i.material=e}else i.material=s(t.materials,this.material);if(this.children.length>0){i.children=[];for(let e=0;e<this.children.length;e++)i.children.push(this.children[e].toJSON(t).object)}if(this.animations.length>0){i.animations=[];for(let e=0;e<this.animations.length;e++){const n=this.animations[e];i.animations.push(s(t.animations,n))}}if(e){const e=r(t.geometries),i=r(t.materials),s=r(t.textures),o=r(t.images),a=r(t.shapes),l=r(t.skeletons),c=r(t.animations);e.length>0&&(n.geometries=e),i.length>0&&(n.materials=i),s.length>0&&(n.textures=s),o.length>0&&(n.images=o),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function r(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e<t.children.length;e++){const n=t.children[e];this.add(n.clone())}return this}}A.DefaultUp=new s.a(0,1,0),A.DefaultMatrixAutoUpdate=!0,A.prototype.isObject3D=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error(\\\\\\\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\\\\\\\")}set(t,e,n,i,s,r,o,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=o,c[3]=e,c[4]=s,c[5]=a,c[6]=n,c[7]=r,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[3],a=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],_=i[0],m=i[3],f=i[6],g=i[1],v=i[4],y=i[7],x=i[2],b=i[5],w=i[8];return s[0]=r*_+o*g+a*x,s[3]=r*m+o*v+a*b,s[6]=r*f+o*y+a*w,s[1]=l*_+c*g+h*x,s[4]=l*m+c*v+h*b,s[7]=l*f+c*y+h*w,s[2]=u*_+d*g+p*x,s[5]=u*m+d*v+p*b,s[8]=u*f+d*y+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],c=t[8];return e*r*c-e*o*l-n*s*c+n*o*a+i*s*l-i*r*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],c=t[8],h=c*r-o*l,u=o*a-c*s,d=l*s-r*a,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const _=1/p;return t[0]=h*_,t[1]=(i*l-c*n)*_,t[2]=(o*n-i*r)*_,t[3]=u*_,t[4]=(c*e-i*a)*_,t[5]=(i*s-o*e)*_,t[6]=d*_,t[7]=(n*a-l*e)*_,t[8]=(r*e-n*s)*_,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,s,r,o){const a=Math.cos(s),l=Math.sin(s);return this.set(n*a,n*l,-n*(a*r+l*o)+r+t,-i*l,i*a,-i*(-l*r+a*o)+o+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,s=i[0],r=i[3],o=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*s+n*a,i[3]=e*r+n*l,i[6]=e*o+n*c,i[1]=-n*s+e*a,i[4]=-n*r+e*l,i[7]=-n*o+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}i.prototype.isMatrix3=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(15),s=n(1),r=n(3);let o=0;class a extends i.a{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:o++}),this.uuid=r.h(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Material\\\\\\\",this.fog=!0,this.blending=s.xb,this.side=s.H,this.vertexColors=!1,this.opacity=1,this.format=s.Ib,this.transparent=!1,this.blendSrc=s.Nc,this.blendDst=s.Db,this.blendEquation=s.b,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=s.T,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=s.h,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=s.R,this.stencilZFail=s.R,this.stencilZPass=s.R,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(\\\\\\\"THREE.Material: '\\\\\\\"+e+\\\\\\\"' parameter is undefined.\\\\\\\");continue}if(\\\\\\\"shading\\\\\\\"===e){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\"),this.flatShading=n===s.F;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": '\\\\\\\"+e+\\\\\\\"' is not a property of this material.\\\\\\\")}}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:\\\\\\\"Material\\\\\\\",generator:\\\\\\\"Material.toJSON\\\\\\\"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenTint&&this.sheenTint.isColor&&(n.sheenTint=this.sheenTint.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularTint&&this.specularTint.isColor&&(n.specularTint=this.specularTint.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularTintMap&&this.specularTintMap.isTexture&&(n.specularTintMap=this.specularTintMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationTint&&(n.attenuationTint=this.attenuationTint.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==s.xb&&(n.blending=this.blending),this.side!==s.H&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.format!==s.Ib&&(n.format=this.format),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),\\\\\\\"round\\\\\\\"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),\\\\\\\"round\\\\\\\"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),\\\\\\\"{}\\\\\\\"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),s=i(t.images);e.length>0&&(n.textures=e),s.length>0&&(n.images=s)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.format=t.format,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}set needsUpdate(t){!0===t&&this.version++}}a.prototype.isMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(28);class s{constructor(t){this.manager=void 0!==t?t:i.a,this.crossOrigin=\\\\\\\"anonymous\\\\\\\",this.withCredentials=!1,this.path=\\\\\\\"\\\\\\\",this.resourcePath=\\\\\\\"\\\\\\\",this.requestHeader={}}load(){}loadAsync(t,e){const n=this;return new Promise((function(i,s){n.load(t,i,e,s)}))}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return L}));var i=n(0),s=n(2),r=n(18),o=n(39),a=n(5),l=n(10),c=n(40),h=n(1),u=n(29),d=n(7);const p=new a.a,_=new o.a,m=new r.a,f=new i.a,g=new i.a,v=new i.a,y=new i.a,x=new i.a,b=new i.a,w=new i.a,T=new i.a,A=new i.a,M=new s.a,E=new s.a,S=new s.a,C=new i.a,N=new i.a;class L extends l.a{constructor(t=new d.a,e=new u.a){super(),this.type=\\\\\\\"Mesh\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}raycast(t,e){const n=this.geometry,i=this.material,s=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),m.copy(n.boundingSphere),m.applyMatrix4(s),!1===t.ray.intersectsSphere(m))return;if(p.copy(s).invert(),_.copy(t.ray).applyMatrix4(p),null!==n.boundingBox&&!1===_.intersectsBox(n.boundingBox))return;let r;if(n.isBufferGeometry){const s=n.index,o=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==s)if(Array.isArray(i))for(let n=0,p=u.length;n<p;n++){const p=u[n],m=i[p.materialIndex];for(let n=Math.max(p.start,d.start),i=Math.min(s.count,Math.min(p.start+p.count,d.start+d.count));n<i;n+=3){const i=s.getX(n),u=s.getX(n+1),d=s.getX(n+2);r=O(this,m,t,_,o,a,l,c,h,i,u,d),r&&(r.faceIndex=Math.floor(n/3),r.face.materialIndex=p.materialIndex,e.push(r))}}else{for(let n=Math.max(0,d.start),u=Math.min(s.count,d.start+d.count);n<u;n+=3){const u=s.getX(n),d=s.getX(n+1),p=s.getX(n+2);r=O(this,i,t,_,o,a,l,c,h,u,d,p),r&&(r.faceIndex=Math.floor(n/3),e.push(r))}}else if(void 0!==o)if(Array.isArray(i))for(let n=0,s=u.length;n<s;n++){const s=u[n],p=i[s.materialIndex];for(let n=Math.max(s.start,d.start),i=Math.min(o.count,Math.min(s.start+s.count,d.start+d.count));n<i;n+=3){r=O(this,p,t,_,o,a,l,c,h,n,n+1,n+2),r&&(r.faceIndex=Math.floor(n/3),r.face.materialIndex=s.materialIndex,e.push(r))}}else{for(let n=Math.max(0,d.start),s=Math.min(o.count,d.start+d.count);n<s;n+=3){r=O(this,i,t,_,o,a,l,c,h,n,n+1,n+2),r&&(r.faceIndex=Math.floor(n/3),e.push(r))}}}else n.isGeometry&&console.error(\\\\\\\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}function O(t,e,n,r,o,a,l,u,d,p,_,m){f.fromBufferAttribute(o,p),g.fromBufferAttribute(o,_),v.fromBufferAttribute(o,m);const L=t.morphTargetInfluences;if(a&&L){w.set(0,0,0),T.set(0,0,0),A.set(0,0,0);for(let t=0,e=a.length;t<e;t++){const e=L[t],n=a[t];0!==e&&(y.fromBufferAttribute(n,p),x.fromBufferAttribute(n,_),b.fromBufferAttribute(n,m),l?(w.addScaledVector(y,e),T.addScaledVector(x,e),A.addScaledVector(b,e)):(w.addScaledVector(y.sub(f),e),T.addScaledVector(x.sub(g),e),A.addScaledVector(b.sub(v),e)))}f.add(w),g.add(T),v.add(A)}t.isSkinnedMesh&&(t.boneTransform(p,f),t.boneTransform(_,g),t.boneTransform(m,v));const O=function(t,e,n,i,s,r,o,a){let l;if(l=e.side===h.i?i.intersectTriangle(o,r,s,!0,a):i.intersectTriangle(s,r,o,e.side!==h.z,a),null===l)return null;N.copy(a),N.applyMatrix4(t.matrixWorld);const c=n.ray.origin.distanceTo(N);return c<n.near||c>n.far?null:{distance:c,point:N.clone(),object:t}}(t,e,n,r,f,g,v,C);if(O){u&&(M.fromBufferAttribute(u,p),E.fromBufferAttribute(u,_),S.fromBufferAttribute(u,m),O.uv=c.a.getUV(C,f,g,v,M,E,S,new s.a)),d&&(M.fromBufferAttribute(d,p),E.fromBufferAttribute(d,_),S.fromBufferAttribute(d,m),O.uv2=c.a.getUV(C,f,g,v,M,E,S,new s.a));const t={a:p,b:_,c:m,normal:new i.a,materialIndex:0};c.a.getNormal(f,g,v,t.normal),O.face=t}return O}L.prototype.isMesh=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e<i;e++)n[e].call(this,t);t.target=null}}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(0);class s{constructor(t=new i.a(1/0,1/0,1/0),e=new i.a(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,s=-1/0,r=-1/0,o=-1/0;for(let a=0,l=t.length;a<l;a+=3){const l=t[a],c=t[a+1],h=t[a+2];l<e&&(e=l),c<n&&(n=c),h<i&&(i=h),l>s&&(s=l),c>r&&(r=c),h>o&&(o=h)}return this.min.set(e,n,i),this.max.set(s,r,o),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,s=-1/0,r=-1/0,o=-1/0;for(let a=0,l=t.count;a<l;a++){const l=t.getX(a),c=t.getY(a),h=t.getZ(a);l<e&&(e=l),c<n&&(n=c),h<i&&(i=h),l>s&&(s=l),c>r&&(r=c),h>o&&(o=h)}return this.min.set(e,n,i),this.max.set(s,r,o),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=o.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t){return this.makeEmpty(),this.expandByObject(t)}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t){t.updateWorldMatrix(!1,!1);const e=t.geometry;void 0!==e&&(null===e.boundingBox&&e.computeBoundingBox(),a.copy(e.boundingBox),a.applyMatrix4(t.matrixWorld),this.union(a));const n=t.children;for(let t=0,e=n.length;t<e;t++)this.expandByObject(n[t]);return this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsSphere(t){return this.clampPoint(t.center,o),o.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(_),m.subVectors(this.max,_),l.subVectors(t.a,_),c.subVectors(t.b,_),h.subVectors(t.c,_),u.subVectors(c,l),d.subVectors(h,c),p.subVectors(l,h);let e=[0,-u.z,u.y,0,-d.z,d.y,0,-p.z,p.y,u.z,0,-u.x,d.z,0,-d.x,p.z,0,-p.x,-u.y,u.x,0,-d.y,d.x,0,-p.y,p.x,0];return!!v(e,l,c,h,m)&&(e=[1,0,0,0,1,0,0,0,1],!!v(e,l,c,h,m)&&(f.crossVectors(u,d),e=[f.x,f.y,f.z],v(e,l,c,h,m)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return o.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(o).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(r[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),r[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),r[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),r[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),r[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),r[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),r[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),r[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(r)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}s.prototype.isBox3=!0;const r=[new i.a,new i.a,new i.a,new i.a,new i.a,new i.a,new i.a,new i.a],o=new i.a,a=new s,l=new i.a,c=new i.a,h=new i.a,u=new i.a,d=new i.a,p=new i.a,_=new i.a,m=new i.a,f=new i.a,g=new i.a;function v(t,e,n,i,s){for(let r=0,o=t.length-3;r<=o;r+=3){g.fromArray(t,r);const o=s.x*Math.abs(g.x)+s.y*Math.abs(g.y)+s.z*Math.abs(g.z),a=e.dot(g),l=n.dot(g),c=i.dot(g);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>o)return!1}return!0}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));const i={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return c}));var i=n(16),s=n(0);const r=new i.a,o=new s.a,a=new s.a,l=new s.a;class c{constructor(t=new s.a,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):r.setFromPoints(t).getCenter(n);let i=0;for(let e=0,s=t.length;e<s;e++)i=Math.max(i,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){l.subVectors(t,this.center);const e=l.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(l.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return a.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(o.copy(t.center).add(a)),this.expandByPoint(o.copy(t.center).sub(a)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(8),s=n(1);const r={arraySlice:function(t,e,n){return r.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:\\\\\\\"number\\\\\\\"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,s=new t.constructor(i);for(let r=0,o=0;o!==i;++r){const i=n[r]*e;for(let n=0;n!==e;++n)s[o++]=t[i+n]}return s},flattenJSON:function(t,e,n,i){let s=1,r=t[0];for(;void 0!==r&&void 0===r[i];)r=t[s++];if(void 0===r)return;let o=r[i];if(void 0!==o)if(Array.isArray(o))do{o=r[i],void 0!==o&&(e.push(r.time),n.push.apply(n,o)),r=t[s++]}while(void 0!==r);else if(void 0!==o.toArray)do{o=r[i],void 0!==o&&(e.push(r.time),o.toArray(n,n.length)),r=t[s++]}while(void 0!==r);else do{o=r[i],void 0!==o&&(e.push(r.time),n.push(o)),r=t[s++]}while(void 0!==r)},subclip:function(t,e,n,i,s=30){const o=t.clone();o.name=e;const a=[];for(let t=0;t<o.tracks.length;++t){const e=o.tracks[t],l=e.getValueSize(),c=[],h=[];for(let t=0;t<e.times.length;++t){const r=e.times[t]*s;if(!(r<n||r>=i)){c.push(e.times[t]);for(let n=0;n<l;++n)h.push(e.values[t*l+n])}}0!==c.length&&(e.times=r.convertArray(c,e.times.constructor),e.values=r.convertArray(h,e.values.constructor),a.push(e))}o.tracks=a;let l=1/0;for(let t=0;t<o.tracks.length;++t)l>o.tracks[t].times[0]&&(l=o.tracks[t].times[0]);for(let t=0;t<o.tracks.length;++t)o.tracks[t].shift(-1*l);return o.resetDuration(),o},makeClipAdditive:function(t,e=0,n=t,o=30){o<=0&&(o=30);const a=n.tracks.length,l=e/o;for(let e=0;e<a;++e){const s=n.tracks[e],o=s.ValueTypeName;if(\\\\\\\"bool\\\\\\\"===o||\\\\\\\"string\\\\\\\"===o)continue;const a=t.tracks.find((function(t){return t.name===s.name&&t.ValueTypeName===o}));if(void 0===a)continue;let c=0;const h=s.getValueSize();s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(c=h/3);let u=0;const d=a.getValueSize();a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(u=d/3);const p=s.times.length-1;let _;if(l<=s.times[0]){const t=c,e=h-c;_=r.arraySlice(s.values,t,e)}else if(l>=s.times[p]){const t=p*h+c,e=t+h-c;_=r.arraySlice(s.values,t,e)}else{const t=s.createInterpolant(),e=c,n=h-c;t.evaluate(l),_=r.arraySlice(t.resultBuffer,e,n)}if(\\\\\\\"quaternion\\\\\\\"===o){(new i.a).fromArray(_).normalize().conjugate().toArray(_)}const m=a.times.length;for(let t=0;t<m;++t){const e=t*d+u;if(\\\\\\\"quaternion\\\\\\\"===o)i.a.multiplyQuaternionsFlat(a.values,e,_,0,a.values,e);else{const t=d-2*u;for(let n=0;n<t;++n)a.values[e+n]-=_[n]}}}return t.blendMode=s.d,t}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";function i(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;n<i;++n)t[n]>e&&(e=t[n]);return e}n.d(e,\\\\\\\"a\\\\\\\",(function(){return i})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return r})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return o}));const s={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function r(t,e){return new s[t](e)}function o(t){return document.createElementNS(\\\\\\\"http://www.w3.org/1999/xhtml\\\\\\\",t)}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(10);class s extends i.a{constructor(){super(),this.type=\\\\\\\"Group\\\\\\\"}}s.prototype.isGroup=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(17),s=n(13);const r={};class o extends s.a{constructor(t){super(t)}load(t,e,n,s){void 0===t&&(t=\\\\\\\"\\\\\\\"),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const o=this,a=i.a.get(t);if(void 0!==a)return o.manager.itemStart(t),setTimeout((function(){e&&e(a),o.manager.itemEnd(t)}),0),a;if(void 0!==r[t])return void r[t].push({onLoad:e,onProgress:n,onError:s});const l=t.match(/^data:(.*?)(;base64)?,(.*)$/);let c;if(l){const n=l[1],i=!!l[2];let r=l[3];r=decodeURIComponent(r),i&&(r=atob(r));try{let i;const s=(this.responseType||\\\\\\\"\\\\\\\").toLowerCase();switch(s){case\\\\\\\"arraybuffer\\\\\\\":case\\\\\\\"blob\\\\\\\":const t=new Uint8Array(r.length);for(let e=0;e<r.length;e++)t[e]=r.charCodeAt(e);i=\\\\\\\"blob\\\\\\\"===s?new Blob([t.buffer],{type:n}):t.buffer;break;case\\\\\\\"document\\\\\\\":const e=new DOMParser;i=e.parseFromString(r,n);break;case\\\\\\\"json\\\\\\\":i=JSON.parse(r);break;default:i=r}setTimeout((function(){e&&e(i),o.manager.itemEnd(t)}),0)}catch(e){setTimeout((function(){s&&s(e),o.manager.itemError(t),o.manager.itemEnd(t)}),0)}}else{r[t]=[],r[t].push({onLoad:e,onProgress:n,onError:s}),c=new XMLHttpRequest,c.open(\\\\\\\"GET\\\\\\\",t,!0),c.addEventListener(\\\\\\\"load\\\\\\\",(function(e){const n=this.response,s=r[t];if(delete r[t],200===this.status||0===this.status){0===this.status&&console.warn(\\\\\\\"THREE.FileLoader: HTTP Status 0 received.\\\\\\\"),i.a.add(t,n);for(let t=0,e=s.length;t<e;t++){const e=s[t];e.onLoad&&e.onLoad(n)}o.manager.itemEnd(t)}else{for(let t=0,n=s.length;t<n;t++){const n=s[t];n.onError&&n.onError(e)}o.manager.itemError(t),o.manager.itemEnd(t)}}),!1),c.addEventListener(\\\\\\\"progress\\\\\\\",(function(e){const n=r[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onProgress&&i.onProgress(e)}}),!1),c.addEventListener(\\\\\\\"error\\\\\\\",(function(e){const n=r[t];delete r[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}o.manager.itemError(t),o.manager.itemEnd(t)}),!1),c.addEventListener(\\\\\\\"abort\\\\\\\",(function(e){const n=r[t];delete r[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}o.manager.itemError(t),o.manager.itemEnd(t)}),!1),void 0!==this.responseType&&(c.responseType=this.responseType),void 0!==this.withCredentials&&(c.withCredentials=this.withCredentials),c.overrideMimeType&&c.overrideMimeType(void 0!==this.mimeType?this.mimeType:\\\\\\\"text/plain\\\\\\\");for(const t in this.requestHeader)c.setRequestHeader(t,this.requestHeader[t]);c.send(null)}return o.manager.itemStart(t),c}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return u}));var i=n(15),s=n(1),r=n(3),o=n(2),a=n(11),l=n(20);let c;let h=0;class u extends i.a{constructor(t=u.DEFAULT_IMAGE,e=u.DEFAULT_MAPPING,n=s.n,i=s.n,l=s.V,c=s.Y,d=s.Ib,p=s.Zc,_=1,m=s.U){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:h++}),this.uuid=r.h(),this.name=\\\\\\\"\\\\\\\",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=l,this.minFilter=c,this.anisotropy=_,this.format=d,this.internalFormat=null,this.type=p,this.offset=new o.a(0,0),this.repeat=new o.a(1,1),this.center=new o.a(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new a.a,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=m,this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:\\\\\\\"Texture\\\\\\\",generator:\\\\\\\"Texture.toJSON\\\\\\\"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=r.h()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t<n;t++)i[t].isDataTexture?e.push(d(i[t].image)):e.push(d(i[t]))}else e=d(i);t.images[i.uuid]={uuid:i.uuid,url:e}}n.image=i.uuid}return e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}transformUv(t){if(this.mapping!==s.Yc)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case s.wc:t.x=t.x-Math.floor(t.x);break;case s.n:t.x=t.x<0?0:1;break;case s.kb:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case s.wc:t.y=t.y-Math.floor(t.y);break;case s.n:t.y=t.y<0?0:1;break;case s.kb:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function d(t){return\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap?class{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if(\\\\\\\"undefined\\\\\\\"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===c&&(c=Object(l.b)(\\\\\\\"canvas\\\\\\\")),c.width=t.width,c.height=t.height;const n=c.getContext(\\\\\\\"2d\\\\\\\");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=c}return e.width>2048||e.height>2048?(console.warn(\\\\\\\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\\\\\\\",t),e.toDataURL(\\\\\\\"image/jpeg\\\\\\\",.6)):e.toDataURL(\\\\\\\"image/png\\\\\\\")}}.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn(\\\\\\\"THREE.Texture: Unable to serialize Texture.\\\\\\\"),{})}u.DEFAULT_IMAGE=void 0,u.DEFAULT_MAPPING=s.Yc,u.prototype.isTexture=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(12),s=n(6);class r extends i.a{constructor(t){super(),this.type=\\\\\\\"LineBasicMaterial\\\\\\\",this.color=new s.a(16777215),this.linewidth=1,this.linecap=\\\\\\\"round\\\\\\\",this.linejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this}}r.prototype.isLineBasicMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(3),s=n(2),r=n(0),o=n(5);class a{constructor(){this.type=\\\\\\\"Curve\\\\\\\",this.arcLengthDivisions=200}getPoint(){return console.warn(\\\\\\\"THREE.Curve: .getPoint() not implemented.\\\\\\\"),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),s=0;e.push(0);for(let r=1;r<=t;r++)n=this.getPoint(r/t),s+=n.distanceTo(i),e.push(s),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const s=n.length;let r;r=e||t*n[s-1];let o,a=0,l=s-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),o=n[i]-r,o<0)a=i+1;else{if(!(o>0)){l=i;break}l=i-1}if(i=l,n[i]===r)return i/(s-1);const c=n[i];return(i+(r-c)/(n[i+1]-c))/(s-1)}getTangent(t,e){const n=1e-4;let i=t-n,o=t+n;i<0&&(i=0),o>1&&(o=1);const a=this.getPoint(i),l=this.getPoint(o),c=e||(a.isVector2?new s.a:new r.a);return c.copy(l).sub(a).normalize(),c}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new r.a,s=[],a=[],l=[],c=new r.a,h=new o.a;for(let e=0;e<=t;e++){const n=e/t;s[e]=this.getTangentAt(n,new r.a)}a[0]=new r.a,l[0]=new r.a;let u=Number.MAX_VALUE;const d=Math.abs(s[0].x),p=Math.abs(s[0].y),_=Math.abs(s[0].z);d<=u&&(u=d,n.set(1,0,0)),p<=u&&(u=p,n.set(0,1,0)),_<=u&&n.set(0,0,1),c.crossVectors(s[0],n).normalize(),a[0].crossVectors(s[0],c),l[0].crossVectors(s[0],a[0]);for(let e=1;e<=t;e++){if(a[e]=a[e-1].clone(),l[e]=l[e-1].clone(),c.crossVectors(s[e-1],s[e]),c.length()>Number.EPSILON){c.normalize();const t=Math.acos(i.d(s[e-1].dot(s[e]),-1,1));a[e].applyMatrix4(h.makeRotationAxis(c,t))}l[e].crossVectors(s[e],a[e])}if(!0===e){let e=Math.acos(i.d(a[0].dot(a[t]),-1,1));e/=t,s[0].dot(c.crossVectors(a[0],a[t]))>0&&(e=-e);for(let n=1;n<=t;n++)a[n].applyMatrix4(h.makeRotationAxis(s[n],e*n)),l[n].crossVectors(s[n],a[n])}return{tangents:s,normals:a,binormals:l}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"Curve\\\\\\\",generator:\\\\\\\"Curve.toJSON\\\\\\\"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return c}));var i=n(1),s=n(70),r=n(71),o=n(38);class a extends o.a{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}}var l=n(19);class c{constructor(t,e,n,i){if(void 0===t)throw new Error(\\\\\\\"THREE.KeyframeTrack: track name is undefined\\\\\\\");if(void 0===e||0===e.length)throw new Error(\\\\\\\"THREE.KeyframeTrack: no keyframes in track named \\\\\\\"+t);this.name=t,this.times=l.a.convertArray(e,this.TimeBufferType),this.values=l.a.convertArray(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){const e=t.constructor;let n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:l.a.convertArray(t.times,Array),values:l.a.convertArray(t.values,Array)};const e=t.getInterpolation();e!==t.DefaultInterpolation&&(n.interpolation=e)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new a(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new r.a(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new s.a(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case i.O:e=this.InterpolantFactoryMethodDiscrete;break;case i.P:e=this.InterpolantFactoryMethodLinear;break;case i.Q:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){const e=\\\\\\\"unsupported interpolation for \\\\\\\"+this.ValueTypeName+\\\\\\\" keyframe track named \\\\\\\"+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(e);this.setInterpolation(this.DefaultInterpolation)}return console.warn(\\\\\\\"THREE.KeyframeTrack:\\\\\\\",e),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return i.O;case this.InterpolantFactoryMethodLinear:return i.P;case this.InterpolantFactoryMethodSmooth:return i.Q}}getValueSize(){return this.values.length/this.times.length}shift(t){if(0!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(1!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){const n=this.times,i=n.length;let s=0,r=i-1;for(;s!==i&&n[s]<t;)++s;for(;-1!==r&&n[r]>e;)--r;if(++r,0!==s||r!==i){s>=r&&(r=Math.max(r,1),s=r-1);const t=this.getValueSize();this.times=l.a.arraySlice(n,s,r),this.values=l.a.arraySlice(this.values,s*t,r*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error(\\\\\\\"THREE.KeyframeTrack: Invalid value size in track.\\\\\\\",this),t=!1);const n=this.times,i=this.values,s=n.length;0===s&&(console.error(\\\\\\\"THREE.KeyframeTrack: Track is empty.\\\\\\\",this),t=!1);let r=null;for(let e=0;e!==s;e++){const i=n[e];if(\\\\\\\"number\\\\\\\"==typeof i&&isNaN(i)){console.error(\\\\\\\"THREE.KeyframeTrack: Time is not a valid number.\\\\\\\",this,e,i),t=!1;break}if(null!==r&&r>i){console.error(\\\\\\\"THREE.KeyframeTrack: Out of order keys.\\\\\\\",this,e,i,r),t=!1;break}r=i}if(void 0!==i&&l.a.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error(\\\\\\\"THREE.KeyframeTrack: Value is not a valid number.\\\\\\\",this,e,n),t=!1;break}}return t}optimize(){const t=l.a.arraySlice(this.times),e=l.a.arraySlice(this.values),n=this.getValueSize(),s=this.getInterpolation()===i.Q,r=t.length-1;let o=1;for(let i=1;i<r;++i){let r=!1;const a=t[i];if(a!==t[i+1]&&(1!==i||a!==t[0]))if(s)r=!0;else{const t=i*n,s=t-n,o=t+n;for(let i=0;i!==n;++i){const n=e[t+i];if(n!==e[s+i]||n!==e[o+i]){r=!0;break}}}if(r){if(i!==o){t[o]=t[i];const s=i*n,r=o*n;for(let t=0;t!==n;++t)e[r+t]=e[s+t]}++o}}if(r>0){t[o]=t[r];for(let t=r*n,i=o*n,s=0;s!==n;++s)e[i+s]=e[t+s];++o}return o!==t.length?(this.times=l.a.arraySlice(t,0,o),this.values=l.a.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this}clone(){const t=l.a.arraySlice(this.times,0),e=l.a.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}c.prototype.TimeBufferType=Float32Array,c.prototype.ValueBufferType=Float32Array,c.prototype.DefaultInterpolation=i.P},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return c}));var i=n(8),s=n(0),r=n(5),o=n(3);const a=new r.a,l=new i.a;class c{constructor(t=0,e=0,n=0,i=c.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,s=i[0],r=i[4],a=i[8],l=i[1],c=i[5],h=i[9],u=i[2],d=i[6],p=i[10];switch(e){case\\\\\\\"XYZ\\\\\\\":this._y=Math.asin(Object(o.d)(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-r,s)):(this._x=Math.atan2(d,c),this._z=0);break;case\\\\\\\"YXZ\\\\\\\":this._x=Math.asin(-Object(o.d)(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-u,s),this._z=0);break;case\\\\\\\"ZXY\\\\\\\":this._x=Math.asin(Object(o.d)(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-r,c)):(this._y=0,this._z=Math.atan2(l,s));break;case\\\\\\\"ZYX\\\\\\\":this._y=Math.asin(-Object(o.d)(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,s)):(this._x=0,this._z=Math.atan2(-r,c));break;case\\\\\\\"YZX\\\\\\\":this._z=Math.asin(Object(o.d)(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,s)):(this._x=0,this._y=Math.atan2(a,p));break;case\\\\\\\"XZY\\\\\\\":this._z=Math.asin(-Object(o.d)(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,s)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn(\\\\\\\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \\\\\\\"+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return a.makeRotationFromQuaternion(t),this.setFromRotationMatrix(a,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return l.setFromEuler(this),this.setFromQuaternion(l,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new s.a(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}c.prototype.isEuler=!0,c.DefaultOrder=\\\\\\\"XYZ\\\\\\\",c.RotationOrders=[\\\\\\\"XYZ\\\\\\\",\\\\\\\"YZX\\\\\\\",\\\\\\\"ZXY\\\\\\\",\\\\\\\"XZY\\\\\\\",\\\\\\\"YXZ\\\\\\\",\\\\\\\"ZYX\\\\\\\"]},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return i}));class i{constructor(t,e,n){const i=this;let s,r=!1,o=0,a=0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===r&&void 0!==i.onStart&&i.onStart(t,o,a),r=!0},this.itemEnd=function(t){o++,void 0!==i.onProgress&&i.onProgress(t,o,a),o===a&&(r=!1,void 0!==i.onLoad&&i.onLoad())},this.itemError=function(t){void 0!==i.onError&&i.onError(t)},this.resolveURL=function(t){return s?s(t):t},this.setURLModifier=function(t){return s=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e&&l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e<n;e+=2){const n=l[e],i=l[e+1];if(n.global&&(n.lastIndex=0),n.test(t))return i}return null}}}const s=new i},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(12),s=n(1),r=n(6);class o extends i.a{constructor(t){super(),this.type=\\\\\\\"MeshBasicMaterial\\\\\\\",this.color=new r.a(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=s.nb,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}o.prototype.isMeshBasicMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(44),s=n(3);class r extends i.a{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type=\\\\\\\"PerspectiveCamera\\\\\\\",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*s.b*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*s.a*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*s.b*Math.atan(Math.tan(.5*s.a*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,s,r){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=s,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*s.a*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,s=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/s,i*=o.width/t,n*=o.height/s}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}r.prototype.isPerspectiveCamera=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(11),s=n(0);const r=new s.a,o=new s.a,a=new i.a;class l{constructor(t=new s.a(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=r.subVectors(n,e).cross(o.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(r),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const s=-(t.start.dot(this.normal)+this.constant)/i;return s<0||s>1?null:e.copy(n).multiplyScalar(s).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||a.getNormalMatrix(t),i=this.coplanarPoint(r).applyMatrix4(t),s=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(s),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}l.prototype.isPlane=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";function i(t,e,n,i,s){const r=.5*(i-e),o=.5*(s-n),a=t*t;return(2*n-2*i+r+o)*(t*a)+(-3*n+3*i-2*r-o)*a+r*t+n}function s(t,e,n,i){return function(t,e){const n=1-t;return n*n*e}(t,e)+function(t,e){return 2*(1-t)*t*e}(t,n)+function(t,e){return t*t*e}(t,i)}function r(t,e,n,i,s){return function(t,e){const n=1-t;return n*n*n*e}(t,e)+function(t,e){const n=1-t;return 3*n*n*t*e}(t,n)+function(t,e){return 3*(1-t)*t*t*e}(t,i)+function(t,e){return t*t*t*e}(t,s)}n.d(e,\\\\\\\"a\\\\\\\",(function(){return i})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return s})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return r}))},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(10),s=n(6);class r extends i.a{constructor(t,e=1){super(),this.type=\\\\\\\"Light\\\\\\\",this.color=new s.a(t),this.intensity=e}dispose(){}copy(t){return super.copy(t),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}r.prototype.isLight=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(23),s=n(1);class r extends i.a{constructor(t=null,e=1,n=1,i,r,o,a,l,c=s.ob,h=s.ob,u,d){super(null,o,a,l,c,h,i,r,u,d),this.image={data:t,width:e,height:n},this.magFilter=c,this.minFilter=h,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}r.prototype.isDataTexture=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(41),s=n(0),r=n(4);const o=new s.a,a=new s.a;class l extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"LineSegments\\\\\\\"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t<i;t+=2)o.fromBufferAttribute(e,t),a.fromBufferAttribute(e,t+1),n[t]=0===t?0:n[t-1],n[t+1]=n[t]+o.distanceTo(a);t.setAttribute(\\\\\\\"lineDistance\\\\\\\",new r.c(n,1))}else console.warn(\\\\\\\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");else t.isGeometry&&console.error(\\\\\\\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");return this}}l.prototype.isLineSegments=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(){this.mask=1}set(t){this.mask=1<<t|0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return 0!=(this.mask&t.mask)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(44);class s extends i.a{constructor(t=-1,e=1,n=1,i=-1,s=.1,r=2e3){super(),this.type=\\\\\\\"OrthographicCamera\\\\\\\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=s,this.far=r,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,s,r){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=s,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let s=n-t,r=n+t,o=i+e,a=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=t*this.view.offsetX,r=s+t*this.view.width,o-=e*this.view.offsetY,a=o-e*this.view.height}this.projectionMatrix.makeOrthographic(s,r,o,a,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}s.prototype.isOrthographicCamera=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){const e=this.parameterPositions;let n=this._cachedIndex,i=e[n],s=e[n-1];t:{e:{let r;n:{i:if(!(t<i)){for(let r=n+2;;){if(void 0===i){if(t<s)break i;return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,t,s)}if(n===r)break;if(s=i,i=e[++n],t<i)break e}r=e.length;break n}if(t>=s)break t;{const o=e[1];t<o&&(n=2,s=o);for(let r=n-2;;){if(void 0===s)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(n===r)break;if(i=s,s=e[--n-1],t>=s)break e}r=n,n=0}}for(;n<r;){const i=n+r>>>1;t<e[i]?r=i:n=i+1}if(i=e[n],s=e[n-1],void 0===s)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(void 0===i)return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,s,t)}this._cachedIndex=n,this.intervalChanged_(n,s,i)}return this.interpolate_(n,s,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){const e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,s=t*i;for(let t=0;t!==i;++t)e[t]=n[s+t];return e}interpolate_(){throw new Error(\\\\\\\"call to abstract method\\\\\\\")}intervalChanged_(){}}i.prototype.beforeStart_=i.prototype.copySampleValue_,i.prototype.afterEnd_=i.prototype.copySampleValue_},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return u}));var i=n(0);const s=new i.a,r=new i.a,o=new i.a,a=new i.a,l=new i.a,c=new i.a,h=new i.a;class u{constructor(t=new i.a,e=new i.a(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,s)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=s.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(s.copy(this.direction).multiplyScalar(e).add(this.origin),s.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){r.copy(t).add(e).multiplyScalar(.5),o.copy(e).sub(t).normalize(),a.copy(this.origin).sub(r);const s=.5*t.distanceTo(e),l=-this.direction.dot(o),c=a.dot(this.direction),h=-a.dot(o),u=a.lengthSq(),d=Math.abs(1-l*l);let p,_,m,f;if(d>0)if(p=l*h-c,_=l*c-h,f=s*d,p>=0)if(_>=-f)if(_<=f){const t=1/d;p*=t,_*=t,m=p*(p+l*_+2*c)+_*(l*p+_+2*h)+u}else _=s,p=Math.max(0,-(l*_+c)),m=-p*p+_*(_+2*h)+u;else _=-s,p=Math.max(0,-(l*_+c)),m=-p*p+_*(_+2*h)+u;else _<=-f?(p=Math.max(0,-(-l*s+c)),_=p>0?-s:Math.min(Math.max(-s,-h),s),m=-p*p+_*(_+2*h)+u):_<=f?(p=0,_=Math.min(Math.max(-s,-h),s),m=_*(_+2*h)+u):(p=Math.max(0,-(l*s+c)),_=p>0?s:Math.min(Math.max(-s,-h),s),m=-p*p+_*(_+2*h)+u);else _=l>0?-s:s,p=Math.max(0,-(l*_+c)),m=-p*p+_*(_+2*h)+u;return n&&n.copy(this.direction).multiplyScalar(p).add(this.origin),i&&i.copy(o).multiplyScalar(_).add(r),m}intersectSphere(t,e){s.subVectors(t.center,this.origin);const n=s.dot(this.direction),i=s.dot(s)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),a=n-o,l=n+o;return a<0&&l<0?null:a<0?this.at(l,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,s,r,o,a;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(s=(t.min.y-u.y)*c,r=(t.max.y-u.y)*c):(s=(t.max.y-u.y)*c,r=(t.min.y-u.y)*c),n>r||s>i?null:((s>n||n!=n)&&(n=s),(r<i||i!=i)&&(i=r),h>=0?(o=(t.min.z-u.z)*h,a=(t.max.z-u.z)*h):(o=(t.max.z-u.z)*h,a=(t.min.z-u.z)*h),n>a||o>i?null:((o>n||n!=n)&&(n=o),(a<i||i!=i)&&(i=a),i<0?null:this.at(n>=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,s)}intersectTriangle(t,e,n,i,s){l.subVectors(e,t),c.subVectors(n,t),h.crossVectors(l,c);let r,o=this.direction.dot(h);if(o>0){if(i)return null;r=1}else{if(!(o<0))return null;r=-1,o=-o}a.subVectors(this.origin,t);const u=r*this.direction.dot(c.crossVectors(a,c));if(u<0)return null;const d=r*this.direction.dot(l.cross(a));if(d<0)return null;if(u+d>o)return null;const p=-r*a.dot(h);return p<0?null:this.at(p/o,s)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return _}));var i=n(0);const s=new i.a,r=new i.a,o=new i.a,a=new i.a,l=new i.a,c=new i.a,h=new i.a,u=new i.a,d=new i.a,p=new i.a;class _{constructor(t=new i.a,e=new i.a,n=new i.a){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),s.subVectors(t,e),i.cross(s);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,a){s.subVectors(i,e),r.subVectors(n,e),o.subVectors(t,e);const l=s.dot(s),c=s.dot(r),h=s.dot(o),u=r.dot(r),d=r.dot(o),p=l*u-c*c;if(0===p)return a.set(-2,-1,-1);const _=1/p,m=(u*h-c*d)*_,f=(l*d-c*h)*_;return a.set(1-m-f,f,m)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,a),a.x>=0&&a.y>=0&&a.x+a.y<=1}static getUV(t,e,n,i,s,r,o,l){return this.getBarycoord(t,e,n,i,a),l.set(0,0),l.addScaledVector(s,a.x),l.addScaledVector(r,a.y),l.addScaledVector(o,a.z),l}static isFrontFacing(t,e,n,i){return s.subVectors(n,e),r.subVectors(t,e),s.cross(r).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return s.subVectors(this.c,this.b),r.subVectors(this.a,this.b),.5*s.cross(r).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return _.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return _.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,s){return _.getUV(t,this.a,this.b,this.c,e,n,i,s)}containsPoint(t){return _.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return _.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,s=this.c;let r,o;l.subVectors(i,n),c.subVectors(s,n),u.subVectors(t,n);const a=l.dot(u),_=c.dot(u);if(a<=0&&_<=0)return e.copy(n);d.subVectors(t,i);const m=l.dot(d),f=c.dot(d);if(m>=0&&f<=m)return e.copy(i);const g=a*f-m*_;if(g<=0&&a>=0&&m<=0)return r=a/(a-m),e.copy(n).addScaledVector(l,r);p.subVectors(t,s);const v=l.dot(p),y=c.dot(p);if(y>=0&&v<=y)return e.copy(s);const x=v*_-a*y;if(x<=0&&_>=0&&y<=0)return o=_/(_-y),e.copy(n).addScaledVector(c,o);const b=m*y-v*f;if(b<=0&&f-m>=0&&v-y>=0)return h.subVectors(s,i),o=(f-m)/(f-m+(v-y)),e.copy(i).addScaledVector(h,o);const w=1/(b+x+g);return r=x*w,o=g*w,e.copy(n).addScaledVector(l,r).addScaledVector(c,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return f}));var i=n(18),s=n(39),r=n(5),o=n(10),a=n(0),l=n(24),c=n(7),h=n(4);const u=new a.a,d=new a.a,p=new r.a,_=new s.a,m=new i.a;class f extends o.a{constructor(t=new c.a,e=new l.a){super(),this.type=\\\\\\\"Line\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[0];for(let t=1,i=e.count;t<i;t++)u.fromBufferAttribute(e,t-1),d.fromBufferAttribute(e,t),n[t]=n[t-1],n[t]+=u.distanceTo(d);t.setAttribute(\\\\\\\"lineDistance\\\\\\\",new h.c(n,1))}else console.warn(\\\\\\\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");else t.isGeometry&&console.error(\\\\\\\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");return this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,s=t.params.Line.threshold,r=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),m.copy(n.boundingSphere),m.applyMatrix4(i),m.radius+=s,!1===t.ray.intersectsSphere(m))return;p.copy(i).invert(),_.copy(t.ray).applyMatrix4(p);const o=s/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,c=new a.a,h=new a.a,u=new a.a,d=new a.a,f=this.isLineSegments?2:1;if(n.isBufferGeometry){const i=n.index,s=n.attributes.position;if(null!==i){for(let n=Math.max(0,r.start),o=Math.min(i.count,r.start+r.count)-1;n<o;n+=f){const r=i.getX(n),o=i.getX(n+1);c.fromBufferAttribute(s,r),h.fromBufferAttribute(s,o);if(_.distanceSqToSegment(c,h,d,u)>l)continue;d.applyMatrix4(this.matrixWorld);const a=t.ray.origin.distanceTo(d);a<t.near||a>t.far||e.push({distance:a,point:u.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,r.start),i=Math.min(s.count,r.start+r.count)-1;n<i;n+=f){c.fromBufferAttribute(s,n),h.fromBufferAttribute(s,n+1);if(_.distanceSqToSegment(c,h,d,u)>l)continue;d.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(d);i<t.near||i>t.far||e.push({distance:i,point:u.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error(\\\\\\\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}}f.prototype.isLine=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(12),s=n(6);class r extends i.a{constructor(t){super(),this.type=\\\\\\\"PointsMaterial\\\\\\\",this.color=new s.a(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this}}r.prototype.isPointsMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{static decodeText(t){if(\\\\\\\"undefined\\\\\\\"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e=\\\\\\\"\\\\\\\";for(let n=0,i=t.length;n<i;n++)e+=String.fromCharCode(t[n]);try{return decodeURIComponent(escape(e))}catch(t){return e}}static extractUrlBase(t){const e=t.lastIndexOf(\\\\\\\"/\\\\\\\");return-1===e?\\\\\\\"./\\\\\\\":t.substr(0,e+1)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(5),s=n(10);class r extends s.a{constructor(){super(),this.type=\\\\\\\"Camera\\\\\\\",this.matrixWorldInverse=new i.a,this.projectionMatrix=new i.a,this.projectionMatrixInverse=new i.a}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}r.prototype.isCamera=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return u}));var i=n(5),s=n(2),r=n(0),o=n(9),a=n(60);const l=new i.a,c=new r.a,h=new r.a;class u{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new s.a(512,512),this.map=null,this.mapPass=null,this.matrix=new i.a,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new a.a,this._frameExtents=new s.a(1,1),this._viewportCount=1,this._viewports=[new o.a(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;c.setFromMatrixPosition(t.matrixWorld),e.position.copy(c),h.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(h),e.updateMatrixWorld(),l.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(l),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(e.projectionMatrix),n.multiply(e.matrixWorldInverse)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias&&(t.bias=this.bias),0!==this.normalBias&&(t.normalBias=this.normalBias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(47),s=n(3);class r extends i.a{constructor(t){super(t),this.uuid=s.h(),this.type=\\\\\\\"Shape\\\\\\\",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n<i;n++)e[n]=this.holes[n].getPoints(t);return e}extractPoints(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}}copy(t){super.copy(t),this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.uuid=this.uuid,t.holes=[];for(let e=0,n=this.holes.length;e<n;e++){const n=this.holes[e];t.holes.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.uuid=t.uuid,this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push((new i.a).fromJSON(n))}return this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return d}));var i=n(2),s=n(25),r=n(74),o=n(79);class a extends s.a{constructor(){super(),this.type=\\\\\\\"CurvePath\\\\\\\",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new r.a(e,t))}getPoint(t,e){const n=t*this.getLength(),i=this.getCurveLengths();let s=0;for(;s<i.length;){if(i[s]>=n){const t=i[s]-n,r=this.curves[s],o=r.getLength(),a=0===o?0:1-t/o;return r.getPointAt(a,e)}s++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n<i;n++)e+=this.curves[n].getLength(),t.push(e);return this.cacheLengths=t,t}getSpacedPoints(t=40){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return this.autoClose&&e.push(e[0]),e}getPoints(t=12){const e=[];let n;for(let i=0,s=this.curves;i<s.length;i++){const r=s[i],o=r&&r.isEllipseCurve?2*t:r&&(r.isLineCurve||r.isLineCurve3)?1:r&&r.isSplineCurve?t*r.points.length:t,a=r.getPoints(o);for(let t=0;t<a.length;t++){const i=a[t];n&&n.equals(i)||(e.push(i),n=i)}}return this.autoClose&&e.length>1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push(n.clone())}return this.autoClose=t.autoClose,this}toJSON(){const t=super.toJSON();t.autoClose=this.autoClose,t.curves=[];for(let e=0,n=this.curves.length;e<n;e++){const n=this.curves[e];t.curves.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.autoClose=t.autoClose,this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push((new o[n.type]).fromJSON(n))}return this}}var l=n(57),c=n(77),h=n(75),u=n(76);class d extends a{constructor(t){super(),this.type=\\\\\\\"Path\\\\\\\",this.currentPoint=new i.a,t&&this.setFromPoints(t)}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e<n;e++)this.lineTo(t[e].x,t[e].y);return this}moveTo(t,e){return this.currentPoint.set(t,e),this}lineTo(t,e){const n=new r.a(this.currentPoint.clone(),new i.a(t,e));return this.curves.push(n),this.currentPoint.set(t,e),this}quadraticCurveTo(t,e,n,s){const r=new u.a(this.currentPoint.clone(),new i.a(t,e),new i.a(n,s));return this.curves.push(r),this.currentPoint.set(n,s),this}bezierCurveTo(t,e,n,s,r,o){const a=new h.a(this.currentPoint.clone(),new i.a(t,e),new i.a(n,s),new i.a(r,o));return this.curves.push(a),this.currentPoint.set(r,o),this}splineThru(t){const e=[this.currentPoint.clone()].concat(t),n=new c.a(e);return this.curves.push(n),this.currentPoint.copy(t[t.length-1]),this}arc(t,e,n,i,s,r){const o=this.currentPoint.x,a=this.currentPoint.y;return this.absarc(t+o,e+a,n,i,s,r),this}absarc(t,e,n,i,s,r){return this.absellipse(t,e,n,n,i,s,r),this}ellipse(t,e,n,i,s,r,o,a){const l=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(t+l,e+c,n,i,s,r,o,a),this}absellipse(t,e,n,i,s,r,o,a){const c=new l.a(t,e,n,i,s,r,o,a);if(this.curves.length>0){const t=c.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(c);const h=c.getPoint(1);return this.currentPoint.copy(h),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(6),s=n(47),r=n(46),o=n(53);class a{constructor(){this.type=\\\\\\\"ShapePath\\\\\\\",this.color=new i.a,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new s.a,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath.lineTo(t,e),this}quadraticCurveTo(t,e,n,i){return this.currentPath.quadraticCurveTo(t,e,n,i),this}bezierCurveTo(t,e,n,i,s,r){return this.currentPath.bezierCurveTo(t,e,n,i,s,r),this}splineThru(t){return this.currentPath.splineThru(t),this}toShapes(t,e){function n(t){const e=[];for(let n=0,i=t.length;n<i;n++){const i=t[n],s=new r.a;s.curves=i.curves,e.push(s)}return e}function i(t,e){const n=e.length;let i=!1;for(let s=n-1,r=0;r<n;s=r++){let n=e[s],o=e[r],a=o.x-n.x,l=o.y-n.y;if(Math.abs(l)>Number.EPSILON){if(l<0&&(n=e[r],a=-a,o=e[s],l=-l),t.y<n.y||t.y>o.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-a*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(o.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=o.x)return!0}}return i}const s=o.a.isClockWise,a=this.subPaths;if(0===a.length)return[];if(!0===e)return n(a);let l,c,h;const u=[];if(1===a.length)return c=a[0],h=new r.a,h.curves=c.curves,u.push(h),u;let d=!s(a[0].getPoints());d=t?!d:d;const p=[],_=[];let m,f,g=[],v=0;_[v]=void 0,g[v]=[];for(let e=0,n=a.length;e<n;e++)c=a[e],m=c.getPoints(),l=s(m),l=t?!l:l,l?(!d&&_[v]&&v++,_[v]={s:new r.a,p:m},_[v].s.curves=c.curves,d&&v++,g[v]=[]):g[v].push({h:c,p:m[0]});if(!_[0])return n(a);if(_.length>1){let t=!1;const e=[];for(let t=0,e=_.length;t<e;t++)p[t]=[];for(let n=0,s=_.length;n<s;n++){const s=g[n];for(let r=0;r<s.length;r++){const o=s[r];let a=!0;for(let s=0;s<_.length;s++)i(o.p,_[s].p)&&(n!==s&&e.push({froms:n,tos:s,hole:r}),a?(a=!1,p[s].push(o)):t=!0);a&&p[n].push(o)}}e.length>0&&(t||(g=p))}for(let t=0,e=_.length;t<e;t++){h=_[t].s,u.push(h),f=g[t];for(let t=0,e=f.length;t<e;t++)h.holes.push(f[t].h)}return u}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return _}));var i=n(18),s=n(39),r=n(5),o=n(10),a=n(0),l=n(42),c=n(7);const h=new r.a,u=new s.a,d=new i.a,p=new a.a;class _ extends o.a{constructor(t=new c.a,e=new l.a){super(),this.type=\\\\\\\"Points\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,s=t.params.Points.threshold,r=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),d.copy(n.boundingSphere),d.applyMatrix4(i),d.radius+=s,!1===t.ray.intersectsSphere(d))return;h.copy(i).invert(),u.copy(t.ray).applyMatrix4(h);const o=s/((this.scale.x+this.scale.y+this.scale.z)/3),a=o*o;if(n.isBufferGeometry){const s=n.index,o=n.attributes.position;if(null!==s){for(let n=Math.max(0,r.start),l=Math.min(s.count,r.start+r.count);n<l;n++){const r=s.getX(n);p.fromBufferAttribute(o,r),m(p,r,a,i,t,e,this)}}else{for(let n=Math.max(0,r.start),s=Math.min(o.count,r.start+r.count);n<s;n++)p.fromBufferAttribute(o,n),m(p,n,a,i,t,e,this)}}else console.error(\\\\\\\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}}function m(t,e,n,i,s,r,o){const l=u.distanceSqToPoint(t);if(l<n){const n=new a.a;u.closestPointToPoint(t,n),n.applyMatrix4(i);const c=s.ray.origin.distanceTo(n);if(c<s.near||c>s.far)return;r.push({distance:c,distanceToRay:Math.sqrt(l),point:n,index:e,face:null,object:o})}}_.prototype.isPoints=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(26);class s extends i.a{}s.prototype.ValueTypeName=\\\\\\\"number\\\\\\\"},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(26);class s extends i.a{}s.prototype.ValueTypeName=\\\\\\\"vector\\\\\\\"},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(10);class s extends i.a{constructor(){super(),this.type=\\\\\\\"Bone\\\\\\\"}}s.prototype.isBone=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return C}));const i=function(t,e,n=2){const i=e&&e.length,a=i?e[0]*n:t.length;let l=s(t,0,a,n,!0);const c=[];if(!l||l.next===l.prev)return c;let h,p,_,f,g,v,y;if(i&&(l=function(t,e,n,i){const o=[];let a,l,c,h,p;for(a=0,l=e.length;a<l;a++)c=e[a]*i,h=a<l-1?e[a+1]*i:t.length,p=s(t,c,h,i,!1),p===p.next&&(p.steiner=!0),o.push(m(p));for(o.sort(u),a=0;a<o.length;a++)d(o[a],n),n=r(n,n.next);return n}(t,e,l,n)),t.length>80*n){h=_=t[0],p=f=t[1];for(let e=n;e<a;e+=n)g=t[e],v=t[e+1],g<h&&(h=g),v<p&&(p=v),g>_&&(_=g),v>f&&(f=v);y=Math.max(_-h,f-p),y=0!==y?1/y:0}return o(l,c,n,h,p,y),c};function s(t,e,n,i,s){let r,o;if(s===function(t,e,n,i){let s=0;for(let r=e,o=n-i;r<n;r+=i)s+=(t[o]-t[r])*(t[r+1]+t[o+1]),o=r;return s}(t,e,n,i)>0)for(r=e;r<n;r+=i)o=M(r,t[r],t[r+1],o);else for(r=n-i;r>=e;r-=i)o=M(r,t[r],t[r+1],o);return o&&y(o,o.next)&&(E(o),o=o.next),o}function r(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!y(i,i.next)&&0!==v(i.prev,i,i.next))i=i.next;else{if(E(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function o(t,e,n,i,s,u,d){if(!t)return;!d&&u&&function(t,e,n,i){let s=t;do{null===s.z&&(s.z=_(s.x,s.y,e,n,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next}while(s!==t);s.prevZ.nextZ=null,s.prevZ=null,function(t){let e,n,i,s,r,o,a,l,c=1;do{for(n=t,t=null,r=null,o=0;n;){for(o++,i=n,a=0,e=0;e<c&&(a++,i=i.nextZ,i);e++);for(l=c;a>0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(s=n,n=n.nextZ,a--):(s=i,i=i.nextZ,l--),r?r.nextZ=s:t=s,s.prevZ=r,r=s;n=i}r.nextZ=null,c*=2}while(o>1)}(s)}(t,i,s,u);let p,m,f=t;for(;t.prev!==t.next;)if(p=t.prev,m=t.next,u?l(t,i,s,u):a(t))e.push(p.i/n),e.push(t.i/n),e.push(m.i/n),E(t),t=m.next,f=m.next;else if((t=m)===f){d?1===d?o(t=c(r(t),e,n),e,n,i,s,u,2):2===d&&h(t,e,n,i,s,u):o(r(t),e,n,i,s,u,1);break}}function a(t){const e=t.prev,n=t,i=t.next;if(v(e,n,i)>=0)return!1;let s=t.next.next;for(;s!==t.prev;){if(f(e.x,e.y,n.x,n.y,i.x,i.y,s.x,s.y)&&v(s.prev,s,s.next)>=0)return!1;s=s.next}return!0}function l(t,e,n,i){const s=t.prev,r=t,o=t.next;if(v(s,r,o)>=0)return!1;const a=s.x<r.x?s.x<o.x?s.x:o.x:r.x<o.x?r.x:o.x,l=s.y<r.y?s.y<o.y?s.y:o.y:r.y<o.y?r.y:o.y,c=s.x>r.x?s.x>o.x?s.x:o.x:r.x>o.x?r.x:o.x,h=s.y>r.y?s.y>o.y?s.y:o.y:r.y>o.y?r.y:o.y,u=_(a,l,e,n,i),d=_(c,h,e,n,i);let p=t.prevZ,m=t.nextZ;for(;p&&p.z>=u&&m&&m.z<=d;){if(p!==t.prev&&p!==t.next&&f(s.x,s.y,r.x,r.y,o.x,o.y,p.x,p.y)&&v(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&f(s.x,s.y,r.x,r.y,o.x,o.y,m.x,m.y)&&v(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&f(s.x,s.y,r.x,r.y,o.x,o.y,p.x,p.y)&&v(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&f(s.x,s.y,r.x,r.y,o.x,o.y,m.x,m.y)&&v(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function c(t,e,n){let i=t;do{const s=i.prev,r=i.next.next;!y(s,r)&&x(s,i,i.next,r)&&T(s,r)&&T(r,s)&&(e.push(s.i/n),e.push(i.i/n),e.push(r.i/n),E(i),E(i.next),i=t=r),i=i.next}while(i!==t);return r(i)}function h(t,e,n,i,s,a){let l=t;do{let t=l.next.next;for(;t!==l.prev;){if(l.i!==t.i&&g(l,t)){let c=A(l,t);return l=r(l,l.next),c=r(c,c.next),o(l,e,n,i,s,a),void o(c,e,n,i,s,a)}t=t.next}l=l.next}while(l!==t)}function u(t,e){return t.x-e.x}function d(t,e){if(e=function(t,e){let n=e;const i=t.x,s=t.y;let r,o=-1/0;do{if(s<=n.y&&s>=n.next.y&&n.next.y!==n.y){const t=n.x+(s-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>o){if(o=t,t===i){if(s===n.y)return n;if(s===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r;const a=r,l=r.x,c=r.y;let h,u=1/0;n=r;do{i>=n.x&&n.x>=l&&i!==n.x&&f(s<c?i:o,s,l,c,s<c?o:i,s,n.x,n.y)&&(h=Math.abs(s-n.y)/(i-n.x),T(n,t)&&(h<u||h===u&&(n.x>r.x||n.x===r.x&&p(r,n)))&&(r=n,u=h)),n=n.next}while(n!==a);return r}(t,e)){const n=A(e,t);r(e,e.next),r(n,n.next)}}function p(t,e){return v(t.prev,t,e.prev)<0&&v(e.next,t,t.next)<0}function _(t,e,n,i,s){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*s)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*s)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function m(t){let e=t,n=t;do{(e.x<n.x||e.x===n.x&&e.y<n.y)&&(n=e),e=e.next}while(e!==t);return n}function f(t,e,n,i,s,r,o,a){return(s-o)*(e-a)-(t-o)*(r-a)>=0&&(t-o)*(i-a)-(n-o)*(e-a)>=0&&(n-o)*(r-a)-(s-o)*(i-a)>=0}function g(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&x(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(T(t,e)&&T(e,t)&&function(t,e){let n=t,i=!1;const s=(t.x+e.x)/2,r=(t.y+e.y)/2;do{n.y>r!=n.next.y>r&&n.next.y!==n.y&&s<(n.next.x-n.x)*(r-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(v(t.prev,t,e.prev)||v(t,e.prev,e))||y(t,e)&&v(t.prev,t,t.next)>0&&v(e.prev,e,e.next)>0)}function v(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function y(t,e){return t.x===e.x&&t.y===e.y}function x(t,e,n,i){const s=w(v(t,e,n)),r=w(v(t,e,i)),o=w(v(n,i,t)),a=w(v(n,i,e));return s!==r&&o!==a||(!(0!==s||!b(t,n,e))||(!(0!==r||!b(t,i,e))||(!(0!==o||!b(n,t,i))||!(0!==a||!b(n,e,i)))))}function b(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function w(t){return t>0?1:t<0?-1:0}function T(t,e){return v(t.prev,t,t.next)<0?v(t,e,t.next)>=0&&v(t,t.prev,e)>=0:v(t,e,t.prev)<0||v(t,t.next,e)<0}function A(t,e){const n=new S(t.i,t.x,t.y),i=new S(e.i,e.x,e.y),s=t.next,r=e.prev;return t.next=e,e.prev=t,n.next=s,s.prev=n,i.next=n,n.prev=i,r.next=i,i.prev=r,i}function M(t,e,n,i){const s=new S(t,e,n);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function E(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function S(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class C{static area(t){const e=t.length;let n=0;for(let i=e-1,s=0;s<e;i=s++)n+=t[i].x*t[s].y-t[s].x*t[i].y;return.5*n}static isClockWise(t){return C.area(t)<0}static triangulateShape(t,e){const n=[],s=[],r=[];N(t),L(n,t);let o=t.length;e.forEach(N);for(let t=0;t<e.length;t++)s.push(o),o+=e[t].length,L(n,e[t]);const a=i(n,s);for(let t=0;t<a.length;t+=3)r.push(a.slice(t,t+3));return r}}function N(t){const e=t.length;e>2&&t[e-1].equals(t[0])&&t.pop()}function L(t,e){for(let n=0;n<e.length;n++)t.push(e[n].x),t.push(e[n].y)}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(1),s=n(26),r=n(38),o=n(8);class a extends r.a{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const s=this.resultBuffer,r=this.sampleValues,a=this.valueSize,l=(n-e)/(i-e);let c=t*a;for(let t=c+a;c!==t;c+=4)o.a.slerpFlat(s,0,r,c-a,r,c,l);return s}}class l extends s.a{InterpolantFactoryMethodLinear(t){return new a(this.times,this.values,this.getValueSize(),t)}}l.prototype.ValueTypeName=\\\\\\\"quaternion\\\\\\\",l.prototype.DefaultInterpolation=i.P,l.prototype.InterpolantFactoryMethodSmooth=void 0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(1),s=n(12),r=n(2),o=n(6);class a extends s.a{constructor(t){super(),this.defines={STANDARD:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshStandardMaterial\\\\\\\",this.color=new o.a(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new o.a(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=i.Uc,this.normalScale=new r.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\\\\\\\"\\\\\\\"},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}a.prototype.isMeshStandardMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(1),s=n(12),r=n(2),o=n(6);class a extends s.a{constructor(t){super(),this.type=\\\\\\\"MeshPhongMaterial\\\\\\\",this.color=new o.a(16777215),this.specular=new o.a(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new o.a(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=i.Uc,this.normalScale=new r.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=i.nb,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}a.prototype.isMeshPhongMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(25),s=n(2);class r extends i.a{constructor(t=0,e=0,n=1,i=1,s=0,r=2*Math.PI,o=!1,a=0){super(),this.type=\\\\\\\"EllipseCurve\\\\\\\",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=s,this.aEndAngle=r,this.aClockwise=o,this.aRotation=a}getPoint(t,e){const n=e||new s.a,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)<Number.EPSILON;for(;r<0;)r+=i;for(;r>i;)r-=i;r<Number.EPSILON&&(r=o?0:i),!0!==this.aClockwise||o||(r===i?r=-i:r-=i);const a=this.aStartAngle+t*r;let l=this.aX+this.xRadius*Math.cos(a),c=this.aY+this.yRadius*Math.sin(a);if(0!==this.aRotation){const t=Math.cos(this.aRotation),e=Math.sin(this.aRotation),n=l-this.aX,i=c-this.aY;l=n*t-i*e+this.aX,c=n*e+i*t+this.aY}return n.set(l,c)}copy(t){return super.copy(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}toJSON(){const t=super.toJSON();return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t}fromJSON(t){return super.fromJSON(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}}r.prototype.isEllipseCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return _}));var i=n(33),s=n(45),r=n(30),o=n(5),a=n(2),l=n(0),c=n(9);const h=new o.a,u=new l.a,d=new l.a;class p extends s.a{constructor(){super(new r.a(90,1,.5,500)),this._frameExtents=new a.a(4,2),this._viewportCount=6,this._viewports=[new c.a(2,1,1,1),new c.a(0,1,1,1),new c.a(3,1,1,1),new c.a(1,1,1,1),new c.a(3,0,1,1),new c.a(1,0,1,1)],this._cubeDirections=[new l.a(1,0,0),new l.a(-1,0,0),new l.a(0,0,1),new l.a(0,0,-1),new l.a(0,1,0),new l.a(0,-1,0)],this._cubeUps=[new l.a(0,1,0),new l.a(0,1,0),new l.a(0,1,0),new l.a(0,1,0),new l.a(0,0,1),new l.a(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,s=t.distance||n.far;s!==n.far&&(n.far=s,n.updateProjectionMatrix()),u.setFromMatrixPosition(t.matrixWorld),n.position.copy(u),d.copy(n.position),d.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(d),n.updateMatrixWorld(),i.makeTranslation(-u.x,-u.y,-u.z),h.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(h)}}p.prototype.isPointLightShadow=!0;class _ extends i.a{constructor(t,e,n=0,i=1){super(t,e),this.type=\\\\\\\"PointLight\\\\\\\",this.distance=n,this.decay=i,this.shadow=new p}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}_.prototype.isPointLight=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(2),s=n(55),r=n(6),o=n(3);class a extends s.a{constructor(t){super(),this.defines={STANDARD:\\\\\\\"\\\\\\\",PHYSICAL:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshPhysicalMaterial\\\\\\\",this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new i.a(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,\\\\\\\"reflectivity\\\\\\\",{get:function(){return o.d(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.sheenTint=new r.a(0),this.sheenRoughness=1,this.transmissionMap=null,this.thickness=.01,this.thicknessMap=null,this.attenuationDistance=0,this.attenuationTint=new r.a(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularTint=new r.a(1,1,1),this.specularTintMap=null,this._sheen=0,this._clearcoat=0,this._transmission=0,this.setValues(t)}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:\\\\\\\"\\\\\\\",PHYSICAL:\\\\\\\"\\\\\\\"},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.sheen=t.sheen,this.sheenTint.copy(t.sheenTint),this.sheenRoughness=t.sheenRoughness,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationTint.copy(t.attenuationTint),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularTint.copy(t.specularTint),this.specularTintMap=t.specularTintMap,this}}a.prototype.isMeshPhysicalMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(0),s=n(18),r=n(31);const o=new s.a,a=new i.a;class l{constructor(t=new r.a,e=new r.a,n=new r.a,i=new r.a,s=new r.a,o=new r.a){this.planes=[t,e,n,i,s,o]}set(t,e,n,i,s,r){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(i),o[4].copy(s),o[5].copy(r),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],s=n[1],r=n[2],o=n[3],a=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],_=n[11],m=n[12],f=n[13],g=n[14],v=n[15];return e[0].setComponents(o-i,h-a,_-u,v-m).normalize(),e[1].setComponents(o+i,h+a,_+u,v+m).normalize(),e[2].setComponents(o+s,h+l,_+d,v+f).normalize(),e[3].setComponents(o-s,h-l,_-d,v-f).normalize(),e[4].setComponents(o-r,h-c,_-p,v-g).normalize(),e[5].setComponents(o+r,h+c,_+p,v+g).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),o.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(o)}intersectsSprite(t){return o.center.set(0,0,0),o.radius=.7071067811865476,o.applyMatrix4(t.matrixWorld),this.intersectsSphere(o)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)<i)return!1}return!0}intersectsBox(t){const e=this.planes;for(let n=0;n<6;n++){const i=e[n];if(a.x=i.normal.x>0?t.max.x:t.min.x,a.y=i.normal.y>0?t.max.y:t.min.y,a.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(a)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));const i=new Float32Array(1),s=new Int32Array(i.buffer);class r{static toHalfFloat(t){t>65504&&(console.warn(\\\\\\\"THREE.DataUtils.toHalfFloat(): value exceeds 65504.\\\\\\\"),t=65504),i[0]=t;const e=s[0];let n=e>>16&32768,r=e>>12&2047;const o=e>>23&255;return o<103?n:o>142?(n|=31744,n|=(255==o?0:1)&&8388607&e,n):o<113?(r|=2048,n|=(r>>114-o)+(r>>113-o&1),n):(n|=o-112<<10|r>>1,n+=1&r,n)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(12),s=n(1),r=n(6);class o extends i.a{constructor(t){super(),this.type=\\\\\\\"MeshLambertMaterial\\\\\\\",this.color=new r.a(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new r.a(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=s.nb,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}o.prototype.isMeshLambertMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(17),s=n(13),r=n(20);class o extends s.a{constructor(t){super(t)}load(t,e,n,s){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const o=this,a=i.a.get(t);if(void 0!==a)return o.manager.itemStart(t),setTimeout((function(){e&&e(a),o.manager.itemEnd(t)}),0),a;const l=Object(r.b)(\\\\\\\"img\\\\\\\");function c(){l.removeEventListener(\\\\\\\"load\\\\\\\",c,!1),l.removeEventListener(\\\\\\\"error\\\\\\\",h,!1),i.a.add(t,this),e&&e(this),o.manager.itemEnd(t)}function h(e){l.removeEventListener(\\\\\\\"load\\\\\\\",c,!1),l.removeEventListener(\\\\\\\"error\\\\\\\",h,!1),s&&s(e),o.manager.itemError(t),o.manager.itemEnd(t)}return l.addEventListener(\\\\\\\"load\\\\\\\",c,!1),l.addEventListener(\\\\\\\"error\\\\\\\",h,!1),\\\\\\\"data:\\\\\\\"!==t.substr(0,5)&&void 0!==this.crossOrigin&&(l.crossOrigin=this.crossOrigin),o.manager.itemStart(t),l.src=t,l}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return p}));var i=n(19),s=n(26),r=n(1);class o extends s.a{}o.prototype.ValueTypeName=\\\\\\\"bool\\\\\\\",o.prototype.ValueBufferType=Array,o.prototype.DefaultInterpolation=r.O,o.prototype.InterpolantFactoryMethodLinear=void 0,o.prototype.InterpolantFactoryMethodSmooth=void 0;class a extends s.a{}a.prototype.ValueTypeName=\\\\\\\"color\\\\\\\";var l=n(50),c=n(54);class h extends s.a{}h.prototype.ValueTypeName=\\\\\\\"string\\\\\\\",h.prototype.ValueBufferType=Array,h.prototype.DefaultInterpolation=r.O,h.prototype.InterpolantFactoryMethodLinear=void 0,h.prototype.InterpolantFactoryMethodSmooth=void 0;var u=n(51),d=n(3);class p{constructor(t,e=-1,n,i=r.wb){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=d.h(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,s=n.length;t!==s;++t)e.push(_(n[t]).scale(i));const s=new this(t.name,t.duration,e,t.blendMode);return s.uuid=t.uuid,s}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(s.a.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,s){const r=e.length,o=[];for(let t=0;t<r;t++){let a=[],c=[];a.push((t+r-1)%r,t,(t+1)%r),c.push(0,1,0);const h=i.a.getKeyframeOrder(a);a=i.a.sortedArray(a,1,h),c=i.a.sortedArray(c,1,h),s||0!==a[0]||(a.push(r),c.push(c[0])),o.push(new l.a(\\\\\\\".morphTargetInfluences[\\\\\\\"+e[t].name+\\\\\\\"]\\\\\\\",a,c).scale(1/n))}return new this(t,-1,o)}static findByName(t,e){let n=t;if(!Array.isArray(t)){const e=t;n=e.geometry&&e.geometry.animations||e.animations}for(let t=0;t<n.length;t++)if(n[t].name===e)return n[t];return null}static CreateClipsFromMorphTargetSequences(t,e,n){const i={},s=/^([\\\\w-]*?)([\\\\d]+)$/;for(let e=0,n=t.length;e<n;e++){const n=t[e],r=n.name.match(s);if(r&&r.length>1){const t=r[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const r=[];for(const t in i)r.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return r}static parseAnimation(t,e){if(!t)return console.error(\\\\\\\"THREE.AnimationClip: No animation in JSONLoader data.\\\\\\\"),null;const n=function(t,e,n,s,r){if(0!==n.length){const o=[],a=[];i.a.flattenJSON(n,o,a,s),0!==o.length&&r.push(new t(e,o,a))}},s=[],r=t.name||\\\\\\\"default\\\\\\\",o=t.fps||30,a=t.blendMode;let h=t.length||-1;const d=t.hierarchy||[];for(let t=0;t<d.length;t++){const i=d[t].keys;if(i&&0!==i.length)if(i[0].morphTargets){const t={};let e;for(e=0;e<i.length;e++)if(i[e].morphTargets)for(let n=0;n<i[e].morphTargets.length;n++)t[i[e].morphTargets[n]]=-1;for(const n in t){const t=[],r=[];for(let s=0;s!==i[e].morphTargets.length;++s){const s=i[e];t.push(s.time),r.push(s.morphTarget===n?1:0)}s.push(new l.a(\\\\\\\".morphTargetInfluence[\\\\\\\"+n+\\\\\\\"]\\\\\\\",t,r))}h=t.length*(o||1)}else{const r=\\\\\\\".bones[\\\\\\\"+e[t].name+\\\\\\\"]\\\\\\\";n(u.a,r+\\\\\\\".position\\\\\\\",i,\\\\\\\"pos\\\\\\\",s),n(c.a,r+\\\\\\\".quaternion\\\\\\\",i,\\\\\\\"rot\\\\\\\",s),n(u.a,r+\\\\\\\".scale\\\\\\\",i,\\\\\\\"scl\\\\\\\",s)}}if(0===s.length)return null;return new this(r,h,s,a)}resetDuration(){let t=0;for(let e=0,n=this.tracks.length;e!==n;++e){const n=this.tracks[e];t=Math.max(t,n.times[n.times.length-1])}return this.duration=t,this}trim(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this}validate(){let t=!0;for(let e=0;e<this.tracks.length;e++)t=t&&this.tracks[e].validate();return t}optimize(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].optimize();return this}clone(){const t=[];for(let e=0;e<this.tracks.length;e++)t.push(this.tracks[e].clone());return new this.constructor(this.name,this.duration,t,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function _(t){if(void 0===t.type)throw new Error(\\\\\\\"THREE.KeyframeTrack: track type undefined, can not parse\\\\\\\");const e=function(t){switch(t.toLowerCase()){case\\\\\\\"scalar\\\\\\\":case\\\\\\\"double\\\\\\\":case\\\\\\\"float\\\\\\\":case\\\\\\\"number\\\\\\\":case\\\\\\\"integer\\\\\\\":return l.a;case\\\\\\\"vector\\\\\\\":case\\\\\\\"vector2\\\\\\\":case\\\\\\\"vector3\\\\\\\":case\\\\\\\"vector4\\\\\\\":return u.a;case\\\\\\\"color\\\\\\\":return a;case\\\\\\\"quaternion\\\\\\\":return c.a;case\\\\\\\"bool\\\\\\\":case\\\\\\\"boolean\\\\\\\":return o;case\\\\\\\"string\\\\\\\":return h}throw new Error(\\\\\\\"THREE.KeyframeTrack: Unsupported typeName: \\\\\\\"+t)}(t.type);if(void 0===t.times){const e=[],n=[];i.a.flattenJSON(t.keys,e,n,\\\\\\\"value\\\\\\\"),t.times=e,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(0),s=n(4);const r=new i.a;class o{constructor(t,e,n,i=!1){this.name=\\\\\\\"\\\\\\\",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e<n;e++)r.x=this.getX(e),r.y=this.getY(e),r.z=this.getZ(e),r.applyMatrix4(t),this.setXYZ(e,r.x,r.y,r.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)r.x=this.getX(e),r.y=this.getY(e),r.z=this.getZ(e),r.applyNormalMatrix(t),this.setXYZ(e,r.x,r.y,r.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)r.x=this.getX(e),r.y=this.getY(e),r.z=this.getZ(e),r.transformDirection(t),this.setXYZ(e,r.x,r.y,r.z);return this}setX(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){return this.data.array[t*this.data.stride+this.offset]}getY(t){return this.data.array[t*this.data.stride+this.offset+1]}getZ(t){return this.data.array[t*this.data.stride+this.offset+2]}getW(t){return this.data.array[t*this.data.stride+this.offset+3]}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this}setXYZW(t,e,n,i,s){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this.data.array[t+3]=s,this}clone(t){if(void 0===t){console.log(\\\\\\\"THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.\\\\\\\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return new s.a(new this.array.constructor(t),this.itemSize,this.normalized)}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new o(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(void 0===t){console.log(\\\\\\\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.\\\\\\\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}o.prototype.isInterleavedBufferAttribute=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return p}));const i=\\\\\\\"\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/\\\\\\\",s=new RegExp(\\\\\\\"[\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/]\\\\\\\",\\\\\\\"g\\\\\\\"),r=\\\\\\\"[^\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/]\\\\\\\",o=\\\\\\\"[^\\\\\\\"+i.replace(\\\\\\\"\\\\\\\\.\\\\\\\",\\\\\\\"\\\\\\\")+\\\\\\\"]\\\\\\\",a=/((?:WC+[\\\\/:])*)/.source.replace(\\\\\\\"WC\\\\\\\",r),l=/(WCOD+)?/.source.replace(\\\\\\\"WCOD\\\\\\\",o),c=/(?:\\\\.(WC+)(?:\\\\[(.+)\\\\])?)?/.source.replace(\\\\\\\"WC\\\\\\\",r),h=/\\\\.(WC+)(?:\\\\[(.+)\\\\])?/.source.replace(\\\\\\\"WC\\\\\\\",r),u=new RegExp(\\\\\\\"^\\\\\\\"+a+l+c+h+\\\\\\\"$\\\\\\\"),d=[\\\\\\\"material\\\\\\\",\\\\\\\"materials\\\\\\\",\\\\\\\"bones\\\\\\\"];class p{constructor(t,e,n){this.path=e,this.parsedPath=n||p.parseTrackName(e),this.node=p.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new p.Composite(t,e,n):new p(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\\\s/g,\\\\\\\"_\\\\\\\").replace(s,\\\\\\\"\\\\\\\")}static parseTrackName(t){const e=u.exec(t);if(!e)throw new Error(\\\\\\\"PropertyBinding: Cannot parse trackName: \\\\\\\"+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(\\\\\\\".\\\\\\\");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==d.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error(\\\\\\\"PropertyBinding: can not parse propertyName from trackName: \\\\\\\"+t);return n}static findNode(t,e){if(!e||\\\\\\\"\\\\\\\"===e||\\\\\\\".\\\\\\\"===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i<t.length;i++){const s=t[i];if(s.name===e||s.uuid===e)return s;const r=n(s.children);if(r)return r}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){const n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){const n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node;const e=this.parsedPath,n=e.objectName,i=e.propertyName;let s=e.propertyIndex;if(t||(t=p.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to update node for track: \\\\\\\"+this.path+\\\\\\\" but it wasn't found.\\\\\\\");if(n){let i=e.objectIndex;switch(n){case\\\\\\\"materials\\\\\\\":if(!t.material)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\\\\\\\",this);if(!t.material.materials)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\\\\\\\",this);t=t.material.materials;break;case\\\\\\\"bones\\\\\\\":if(!t.skeleton)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\\\\\\\",this);t=t.skeleton.bones;for(let e=0;e<t.length;e++)if(t[e].name===i){i=e;break}break;default:if(void 0===t[n])return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\\\\\\\",this);t=t[n]}if(void 0!==i){if(void 0===t[i])return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\\\\\\\",this,t);t=t[i]}}const r=t[i];if(void 0===r){const n=e.nodeName;return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to update property for track: \\\\\\\"+n+\\\\\\\".\\\\\\\"+i+\\\\\\\" but it wasn't found.\\\\\\\",t)}let o=this.Versioning.None;this.targetObject=t,void 0!==t.needsUpdate?o=this.Versioning.NeedsUpdate:void 0!==t.matrixWorldNeedsUpdate&&(o=this.Versioning.MatrixWorldNeedsUpdate);let a=this.BindingType.Direct;if(void 0!==s){if(\\\\\\\"morphTargetInfluences\\\\\\\"===i){if(!t.geometry)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\\\\\\\",this);if(!t.geometry.isBufferGeometry)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\",this);if(!t.geometry.morphAttributes)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\\\\\\\",this);void 0!==t.morphTargetDictionary[s]&&(s=t.morphTargetDictionary[s])}a=this.BindingType.ArrayElement,this.resolvedProperty=r,this.propertyIndex=s}else void 0!==r.fromArray&&void 0!==r.toArray?(a=this.BindingType.HasFromToArray,this.resolvedProperty=r):Array.isArray(r)?(a=this.BindingType.EntireArray,this.resolvedProperty=r):this.propertyName=i;this.getValue=this.GetterByBindingType[a],this.setValue=this.SetterByBindingTypeAndVersioning[a][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}p.Composite=class{constructor(t,e,n){const i=n||p.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)}setValue(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,s=n.length;i!==s;++i)n[i].setValue(t,e)}bind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},p.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},p.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},p.prototype.GetterByBindingType=[p.prototype._getValue_direct,p.prototype._getValue_array,p.prototype._getValue_arrayElement,p.prototype._getValue_toArray],p.prototype.SetterByBindingTypeAndVersioning=[[p.prototype._setValue_direct,p.prototype._setValue_direct_setNeedsUpdate,p.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[p.prototype._setValue_array,p.prototype._setValue_array_setNeedsUpdate,p.prototype._setValue_array_setMatrixWorldNeedsUpdate],[p.prototype._setValue_arrayElement,p.prototype._setValue_arrayElement_setNeedsUpdate,p.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[p.prototype._setValue_fromArray,p.prototype._setValue_fromArray_setNeedsUpdate,p.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]]},,function(t,e,n){var i=n(119),s=\\\\\\\"object\\\\\\\"==typeof self&&self&&self.Object===Object&&self,r=i||s||Function(\\\\\\\"return this\\\\\\\")();t.exports=r},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return d}));var i=n(14),s=n(5),r=n(0),o=n(9);const a=new r.a,l=new o.a,c=new o.a,h=new r.a,u=new s.a;class d extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"SkinnedMesh\\\\\\\",this.bindMode=\\\\\\\"attached\\\\\\\",this.bindMatrix=new s.a,this.bindMatrixInverse=new s.a}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new o.a,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;n<i;n++){t.x=e.getX(n),t.y=e.getY(n),t.z=e.getZ(n),t.w=e.getW(n);const i=1/t.manhattanLength();i!==1/0?t.multiplyScalar(i):t.set(1,0,0,0),e.setXYZW(n,t.x,t.y,t.z,t.w)}}updateMatrixWorld(t){super.updateMatrixWorld(t),\\\\\\\"attached\\\\\\\"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():\\\\\\\"detached\\\\\\\"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\\\\\\\"THREE.SkinnedMesh: Unrecognized bindMode: \\\\\\\"+this.bindMode)}boneTransform(t,e){const n=this.skeleton,i=this.geometry;l.fromBufferAttribute(i.attributes.skinIndex,t),c.fromBufferAttribute(i.attributes.skinWeight,t),a.copy(e).applyMatrix4(this.bindMatrix),e.set(0,0,0);for(let t=0;t<4;t++){const i=c.getComponent(t);if(0!==i){const s=l.getComponent(t);u.multiplyMatrices(n.bones[s].matrixWorld,n.boneInverses[s]),e.addScaledVector(h.copy(a).applyMatrix4(u),i)}}return e.applyMatrix4(this.bindMatrixInverse)}}d.prototype.isSkinnedMesh=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(1),s=n(38);class r extends s.a{constructor(t,e,n,s){super(t,e,n,s),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:i.id,endingEnd:i.id}}intervalChanged_(t,e,n){const s=this.parameterPositions;let r=t-2,o=t+1,a=s[r],l=s[o];if(void 0===a)switch(this.getSettings_().endingStart){case i.kd:r=t,a=2*e-n;break;case i.hd:r=s.length-2,a=e+s[r]-s[r+1];break;default:r=t,a=n}if(void 0===l)switch(this.getSettings_().endingEnd){case i.kd:o=t,l=2*n-e;break;case i.hd:o=1,l=n+s[1]-s[0];break;default:o=t-1,l=e}const c=.5*(n-e),h=this.valueSize;this._weightPrev=c/(e-a),this._weightNext=c/(l-n),this._offsetPrev=r*h,this._offsetNext=o*h}interpolate_(t,e,n,i){const s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,c=this._offsetPrev,h=this._offsetNext,u=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),_=p*p,m=_*p,f=-u*m+2*u*_-u*p,g=(1+u)*m+(-1.5-2*u)*_+(-.5+u)*p+1,v=(-1-d)*m+(1.5+d)*_+.5*p,y=d*m-d*_;for(let t=0;t!==o;++t)s[t]=f*r[c+t]+g*r[l+t]+v*r[a+t]+y*r[h+t];return s}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(38);class s extends i.a{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,c=(n-e)/(i-e),h=1-c;for(let t=0;t!==o;++t)s[t]=r[l+t]*h+r[a+t]*c;return s}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(33),s=n(45),r=n(37);class o extends s.a{constructor(){super(new r.a(-5,5,5,-5,.5,500))}}o.prototype.isDirectionalLightShadow=!0;var a=n(10);class l extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"DirectionalLight\\\\\\\",this.position.copy(a.a.DefaultUp),this.updateMatrix(),this.target=new a.a,this.shadow=new o}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}l.prototype.isDirectionalLight=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return c}));var i=n(33),s=n(45),r=n(3),o=n(30);class a extends s.a{constructor(){super(new o.a(50,1,.5,500)),this.focus=1}updateMatrices(t){const e=this.camera,n=2*r.b*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,s=t.distance||e.far;n===e.fov&&i===e.aspect&&s===e.far||(e.fov=n,e.aspect=i,e.far=s,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}a.prototype.isSpotLightShadow=!0;var l=n(10);class c extends i.a{constructor(t,e,n=0,i=Math.PI/3,s=0,r=1){super(t,e),this.type=\\\\\\\"SpotLight\\\\\\\",this.position.copy(l.a.DefaultUp),this.updateMatrix(),this.target=new l.a,this.distance=n,this.angle=i,this.penumbra=s,this.decay=r,this.shadow=new a}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}c.prototype.isSpotLight=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(2),s=n(25);class r extends s.a{constructor(t=new i.a,e=new i.a){super(),this.type=\\\\\\\"LineCurve\\\\\\\",this.v1=t,this.v2=e}getPoint(t,e=new i.a){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}getTangent(t,e){const n=e||new i.a;return n.copy(this.v2).sub(this.v1).normalize(),n}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}r.prototype.isLineCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(25),s=n(32),r=n(2);class o extends i.a{constructor(t=new r.a,e=new r.a,n=new r.a,i=new r.a){super(),this.type=\\\\\\\"CubicBezierCurve\\\\\\\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new r.a){const n=e,i=this.v0,o=this.v1,a=this.v2,l=this.v3;return n.set(Object(s.b)(t,i.x,o.x,a.x,l.x),Object(s.b)(t,i.y,o.y,a.y,l.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}o.prototype.isCubicBezierCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(25),s=n(32),r=n(2);class o extends i.a{constructor(t=new r.a,e=new r.a,n=new r.a){super(),this.type=\\\\\\\"QuadraticBezierCurve\\\\\\\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new r.a){const n=e,i=this.v0,o=this.v1,a=this.v2;return n.set(Object(s.c)(t,i.x,o.x,a.x),Object(s.c)(t,i.y,o.y,a.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}o.prototype.isQuadraticBezierCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(25),s=n(32),r=n(2);class o extends i.a{constructor(t=[]){super(),this.type=\\\\\\\"SplineCurve\\\\\\\",this.points=t}getPoint(t,e=new r.a){const n=e,i=this.points,o=(i.length-1)*t,a=Math.floor(o),l=o-a,c=i[0===a?a:a-1],h=i[a],u=i[a>i.length-2?i.length-1:a+1],d=i[a>i.length-3?i.length-1:a+2];return n.set(Object(s.a)(l,c.x,h.x,u.x,d.x),Object(s.a)(l,c.y,h.y,u.y,d.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new r.a).fromArray(n))}return this}}o.prototype.isSplineCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(3),s=n(1);class r{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=s.Qc,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=i.h()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,s=this.stride;i<s;i++)this.array[t+i]=e.array[n+i];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=i.h()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=i.h()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}r.prototype.isInterleavedBuffer=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.r(e),n.d(e,\\\\\\\"ArcCurve\\\\\\\",(function(){return s})),n.d(e,\\\\\\\"CatmullRomCurve3\\\\\\\",(function(){return r.a})),n.d(e,\\\\\\\"CubicBezierCurve\\\\\\\",(function(){return o.a})),n.d(e,\\\\\\\"CubicBezierCurve3\\\\\\\",(function(){return h})),n.d(e,\\\\\\\"EllipseCurve\\\\\\\",(function(){return i.a})),n.d(e,\\\\\\\"LineCurve\\\\\\\",(function(){return u.a})),n.d(e,\\\\\\\"LineCurve3\\\\\\\",(function(){return d})),n.d(e,\\\\\\\"QuadraticBezierCurve\\\\\\\",(function(){return p.a})),n.d(e,\\\\\\\"QuadraticBezierCurve3\\\\\\\",(function(){return _.a})),n.d(e,\\\\\\\"SplineCurve\\\\\\\",(function(){return m.a}));var i=n(57);class s extends i.a{constructor(t,e,n,i,s,r){super(t,e,n,n,i,s,r),this.type=\\\\\\\"ArcCurve\\\\\\\"}}s.prototype.isArcCurve=!0;var r=n(85),o=n(75),a=n(25),l=n(32),c=n(0);class h extends a.a{constructor(t=new c.a,e=new c.a,n=new c.a,i=new c.a){super(),this.type=\\\\\\\"CubicBezierCurve3\\\\\\\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new c.a){const n=e,i=this.v0,s=this.v1,r=this.v2,o=this.v3;return n.set(Object(l.b)(t,i.x,s.x,r.x,o.x),Object(l.b)(t,i.y,s.y,r.y,o.y),Object(l.b)(t,i.z,s.z,r.z,o.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}h.prototype.isCubicBezierCurve3=!0;var u=n(74);class d extends a.a{constructor(t=new c.a,e=new c.a){super(),this.type=\\\\\\\"LineCurve3\\\\\\\",this.isLineCurve3=!0,this.v1=t,this.v2=e}getPoint(t,e=new c.a){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}var p=n(76),_=n(90),m=n(77)},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(63),s=n(23),r=n(13);class o extends r.a{constructor(t){super(t)}load(t,e,n,r){const o=new s.a,a=new i.a(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(t,(function(t){o.image=t,o.needsUpdate=!0,void 0!==e&&e(o)}),n,r),o}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return h}));var i=n(1),s=n(52),r=n(5),o=n(34),a=n(3);const l=new r.a,c=new r.a;class h{constructor(t=[],e=[]){this.uuid=a.h(),this.bones=t.slice(0),this.boneInverses=e,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}init(){const t=this.bones,e=this.boneInverses;if(this.boneMatrices=new Float32Array(16*t.length),0===e.length)this.calculateInverses();else if(t.length!==e.length){console.warn(\\\\\\\"THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.\\\\\\\"),this.boneInverses=[];for(let t=0,e=this.bones.length;t<e;t++)this.boneInverses.push(new r.a)}}calculateInverses(){this.boneInverses.length=0;for(let t=0,e=this.bones.length;t<e;t++){const e=new r.a;this.bones[t]&&e.copy(this.bones[t].matrixWorld).invert(),this.boneInverses.push(e)}}pose(){for(let t=0,e=this.bones.length;t<e;t++){const e=this.bones[t];e&&e.matrixWorld.copy(this.boneInverses[t]).invert()}for(let t=0,e=this.bones.length;t<e;t++){const e=this.bones[t];e&&(e.parent&&e.parent.isBone?(e.matrix.copy(e.parent.matrixWorld).invert(),e.matrix.multiply(e.matrixWorld)):e.matrix.copy(e.matrixWorld),e.matrix.decompose(e.position,e.quaternion,e.scale))}}update(){const t=this.bones,e=this.boneInverses,n=this.boneMatrices,i=this.boneTexture;for(let i=0,s=t.length;i<s;i++){const s=t[i]?t[i].matrixWorld:c;l.multiplyMatrices(s,e[i]),l.toArray(n,16*i)}null!==i&&(i.needsUpdate=!0)}clone(){return new h(this.bones,this.boneInverses)}computeBoneTexture(){let t=Math.sqrt(4*this.bones.length);t=a.c(t),t=Math.max(t,4);const e=new Float32Array(t*t*4);e.set(this.boneMatrices);const n=new o.a(e,t,t,i.Ib,i.G);return this.boneMatrices=e,this.boneTexture=n,this.boneTextureSize=t,this}getBoneByName(t){for(let e=0,n=this.bones.length;e<n;e++){const n=this.bones[e];if(n.name===t)return n}}dispose(){null!==this.boneTexture&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(t,e){this.uuid=t.uuid;for(let n=0,i=t.bones.length;n<i;n++){const i=t.bones[n];let o=e[i];void 0===o&&(console.warn(\\\\\\\"THREE.Skeleton: No bone found with UUID:\\\\\\\",i),o=new s.a),this.bones.push(o),this.boneInverses.push((new r.a).fromArray(t.boneInverses[n]))}return this.init(),this}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"Skeleton\\\\\\\",generator:\\\\\\\"Skeleton.toJSON\\\\\\\"},bones:[],boneInverses:[]};t.uuid=this.uuid;const e=this.bones,n=this.boneInverses;for(let i=0,s=e.length;i<s;i++){const s=e[i];t.bones.push(s.uuid);const r=n[i];t.boneInverses.push(r.toArray())}return t}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return f}));var i=n(2);const s=new i.a;class r{constructor(t=new i.a(1/0,1/0),e=new i.a(-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=s.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(t){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return s.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}r.prototype.isBox2=!0;var o=n(7),a=n(22),l=n(4),c=n(13),h=n(11),u=n(47),d=n(46),p=n(48),_=n(53),m=n(0);class f extends c.a{constructor(t){super(t),this.defaultDPI=90,this.defaultUnit=\\\\\\\"px\\\\\\\"}load(t,e,n,i){const s=this,r=new a.a(s.manager);r.setPath(s.path),r.setRequestHeader(s.requestHeader),r.setWithCredentials(s.withCredentials),r.load(t,(function(n){try{e(s.parse(n))}catch(e){i?i(e):console.error(e),s.manager.itemError(t)}}),n,i)}parse(t){const e=this;function n(t,e,n,i,r,o,a,l){if(0==e||0==n)return void t.lineTo(l.x,l.y);i=i*Math.PI/180,e=Math.abs(e),n=Math.abs(n);const c=(a.x-l.x)/2,h=(a.y-l.y)/2,u=Math.cos(i)*c+Math.sin(i)*h,d=-Math.sin(i)*c+Math.cos(i)*h;let p=e*e,_=n*n;const m=u*u,f=d*d,g=m/p+f/_;if(g>1){const t=Math.sqrt(g);p=(e*=t)*e,_=(n*=t)*n}const v=p*f+_*m,y=(p*_-v)/v;let x=Math.sqrt(Math.max(0,y));r===o&&(x=-x);const b=x*e*d/n,w=-x*n*u/e,T=Math.cos(i)*b-Math.sin(i)*w+(a.x+l.x)/2,A=Math.sin(i)*b+Math.cos(i)*w+(a.y+l.y)/2,M=s(1,0,(u-b)/e,(d-w)/n),E=s((u-b)/e,(d-w)/n,(-u-b)/e,(-d-w)/n)%(2*Math.PI);t.currentPath.absellipse(T,A,e,n,M,M+E,0===o,i)}function s(t,e,n,i){const s=t*n+e*i,r=Math.sqrt(t*t+e*e)*Math.sqrt(n*n+i*i);let o=Math.acos(Math.max(-1,Math.min(1,s/r)));return t*i-e*n<0&&(o=-o),o}function r(t,e){e=Object.assign({},e);let n={};if(t.hasAttribute(\\\\\\\"class\\\\\\\")){const e=t.getAttribute(\\\\\\\"class\\\\\\\").split(/\\\\s/).filter(Boolean).map((t=>t.trim()));for(let t=0;t<e.length;t++)n=Object.assign(n,v[\\\\\\\".\\\\\\\"+e[t]])}function i(i,s,r){void 0===r&&(r=function(t){return t.startsWith(\\\\\\\"url\\\\\\\")&&console.warn(\\\\\\\"SVGLoader: url access in attributes is not implemented.\\\\\\\"),t}),t.hasAttribute(i)&&(e[s]=r(t.getAttribute(i))),n[i]&&(e[s]=r(n[i])),t.style&&\\\\\\\"\\\\\\\"!==t.style[i]&&(e[s]=r(t.style[i]))}function s(t){return Math.max(0,Math.min(1,d(t)))}function r(t){return Math.max(0,d(t))}return t.hasAttribute(\\\\\\\"id\\\\\\\")&&(n=Object.assign(n,v[\\\\\\\"#\\\\\\\"+t.getAttribute(\\\\\\\"id\\\\\\\")])),i(\\\\\\\"fill\\\\\\\",\\\\\\\"fill\\\\\\\"),i(\\\\\\\"fill-opacity\\\\\\\",\\\\\\\"fillOpacity\\\\\\\",s),i(\\\\\\\"fill-rule\\\\\\\",\\\\\\\"fillRule\\\\\\\"),i(\\\\\\\"opacity\\\\\\\",\\\\\\\"opacity\\\\\\\",s),i(\\\\\\\"stroke\\\\\\\",\\\\\\\"stroke\\\\\\\"),i(\\\\\\\"stroke-opacity\\\\\\\",\\\\\\\"strokeOpacity\\\\\\\",s),i(\\\\\\\"stroke-width\\\\\\\",\\\\\\\"strokeWidth\\\\\\\",r),i(\\\\\\\"stroke-linejoin\\\\\\\",\\\\\\\"strokeLineJoin\\\\\\\"),i(\\\\\\\"stroke-linecap\\\\\\\",\\\\\\\"strokeLineCap\\\\\\\"),i(\\\\\\\"stroke-miterlimit\\\\\\\",\\\\\\\"strokeMiterLimit\\\\\\\",r),i(\\\\\\\"visibility\\\\\\\",\\\\\\\"visibility\\\\\\\"),e}function o(t,e){return t-(e-t)}function a(t,e,n){if(\\\\\\\"string\\\\\\\"!=typeof t)throw new TypeError(\\\\\\\"Invalid input: \\\\\\\"+typeof t);const i={SEPARATOR:/[ \\\\t\\\\r\\\\n\\\\,.\\\\-+]/,WHITESPACE:/[ \\\\t\\\\r\\\\n]/,DIGIT:/[\\\\d]/,SIGN:/[-+]/,POINT:/\\\\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};let s=0,r=!0,o=\\\\\\\"\\\\\\\",a=\\\\\\\"\\\\\\\";const l=[];function c(t,e,n){const i=new SyntaxError('Unexpected character \\\\\\\"'+t+'\\\\\\\" at index '+e+\\\\\\\".\\\\\\\");throw i.partial=n,i}function h(){\\\\\\\"\\\\\\\"!==o&&(\\\\\\\"\\\\\\\"===a?l.push(Number(o)):l.push(Number(o)*Math.pow(10,Number(a)))),o=\\\\\\\"\\\\\\\",a=\\\\\\\"\\\\\\\"}let u;const d=t.length;for(let p=0;p<d;p++)if(u=t[p],Array.isArray(e)&&e.includes(l.length%n)&&i.FLAGS.test(u))s=1,o=u,h();else{if(0===s){if(i.WHITESPACE.test(u))continue;if(i.DIGIT.test(u)||i.SIGN.test(u)){s=1,o=u;continue}if(i.POINT.test(u)){s=2,o=u;continue}i.COMMA.test(u)&&(r&&c(u,p,l),r=!0)}if(1===s){if(i.DIGIT.test(u)){o+=u;continue}if(i.POINT.test(u)){o+=u,s=2;continue}if(i.EXP.test(u)){s=3;continue}i.SIGN.test(u)&&1===o.length&&i.SIGN.test(o[0])&&c(u,p,l)}if(2===s){if(i.DIGIT.test(u)){o+=u;continue}if(i.EXP.test(u)){s=3;continue}i.POINT.test(u)&&\\\\\\\".\\\\\\\"===o[o.length-1]&&c(u,p,l)}if(3===s){if(i.DIGIT.test(u)){a+=u;continue}if(i.SIGN.test(u)){if(\\\\\\\"\\\\\\\"===a){a+=u;continue}1===a.length&&i.SIGN.test(a)&&c(u,p,l)}}i.WHITESPACE.test(u)?(h(),s=0,r=!1):i.COMMA.test(u)?(h(),s=0,r=!0):i.SIGN.test(u)?(h(),s=1,o=u):i.POINT.test(u)?(h(),s=2,o=u):c(u,p,l)}return h(),l}const l=[\\\\\\\"mm\\\\\\\",\\\\\\\"cm\\\\\\\",\\\\\\\"in\\\\\\\",\\\\\\\"pt\\\\\\\",\\\\\\\"pc\\\\\\\",\\\\\\\"px\\\\\\\"],c={mm:{mm:1,cm:.1,in:1/25.4,pt:72/25.4,pc:6/25.4,px:-1},cm:{mm:10,cm:1,in:1/2.54,pt:72/2.54,pc:6/2.54,px:-1},in:{mm:25.4,cm:2.54,in:1,pt:72,pc:6,px:-1},pt:{mm:25.4/72,cm:2.54/72,in:1/72,pt:1,pc:6/72,px:-1},pc:{mm:25.4/6,cm:2.54/6,in:1/6,pt:12,pc:1,px:-1},px:{px:1}};function d(t){let n,i=\\\\\\\"px\\\\\\\";if(\\\\\\\"string\\\\\\\"==typeof t||t instanceof String)for(let e=0,n=l.length;e<n;e++){const n=l[e];if(t.endsWith(n)){i=n,t=t.substring(0,t.length-n.length);break}}return\\\\\\\"px\\\\\\\"===i&&\\\\\\\"px\\\\\\\"!==e.defaultUnit?n=c.in[e.defaultUnit]/e.defaultDPI:(n=c[i][e.defaultUnit],n<0&&(n=c[i].in*e.defaultDPI)),n*parseFloat(t)}function _(t){const e=t.elements;return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function f(t){const e=t.elements;return Math.sqrt(e[3]*e[3]+e[4]*e[4])}const g=[],v={},y=[],x=new h.a,b=new h.a,w=new h.a,T=new h.a,A=new i.a,M=new m.a,E=new h.a,S=(new DOMParser).parseFromString(t,\\\\\\\"image/svg+xml\\\\\\\");!function t(e,s){if(1!==e.nodeType)return;const l=function(t){if(!(t.hasAttribute(\\\\\\\"transform\\\\\\\")||\\\\\\\"use\\\\\\\"===t.nodeName&&(t.hasAttribute(\\\\\\\"x\\\\\\\")||t.hasAttribute(\\\\\\\"y\\\\\\\"))))return null;const e=function(t){const e=new h.a,n=x;if(\\\\\\\"use\\\\\\\"===t.nodeName&&(t.hasAttribute(\\\\\\\"x\\\\\\\")||t.hasAttribute(\\\\\\\"y\\\\\\\"))){const n=d(t.getAttribute(\\\\\\\"x\\\\\\\")),i=d(t.getAttribute(\\\\\\\"y\\\\\\\"));e.translate(n,i)}if(t.hasAttribute(\\\\\\\"transform\\\\\\\")){const i=t.getAttribute(\\\\\\\"transform\\\\\\\").split(\\\\\\\")\\\\\\\");for(let t=i.length-1;t>=0;t--){const s=i[t].trim();if(\\\\\\\"\\\\\\\"===s)continue;const r=s.indexOf(\\\\\\\"(\\\\\\\"),o=s.length;if(r>0&&r<o){const t=s.substr(0,r),e=a(s.substr(r+1,o-r-1));switch(n.identity(),t){case\\\\\\\"translate\\\\\\\":if(e.length>=1){const t=e[0];let i=t;e.length>=2&&(i=e[1]),n.translate(t,i)}break;case\\\\\\\"rotate\\\\\\\":if(e.length>=1){let t=0,i=0,s=0;t=-e[0]*Math.PI/180,e.length>=3&&(i=e[1],s=e[2]),b.identity().translate(-i,-s),w.identity().rotate(t),T.multiplyMatrices(w,b),b.identity().translate(i,s),n.multiplyMatrices(b,T)}break;case\\\\\\\"scale\\\\\\\":if(e.length>=1){const t=e[0];let i=t;e.length>=2&&(i=e[1]),n.scale(t,i)}break;case\\\\\\\"skewX\\\\\\\":1===e.length&&n.set(1,Math.tan(e[0]*Math.PI/180),0,0,1,0,0,0,1);break;case\\\\\\\"skewY\\\\\\\":1===e.length&&n.set(1,0,0,Math.tan(e[0]*Math.PI/180),1,0,0,0,1);break;case\\\\\\\"matrix\\\\\\\":6===e.length&&n.set(e[0],e[2],e[4],e[1],e[3],e[5],0,0,1)}}e.premultiply(n)}}return e}(t);y.length>0&&e.premultiply(y[y.length-1]);return E.copy(e),y.push(e),e}(e);let c=!0,m=null;switch(e.nodeName){case\\\\\\\"svg\\\\\\\":break;case\\\\\\\"style\\\\\\\":!function(t){if(!t.sheet||!t.sheet.cssRules||!t.sheet.cssRules.length)return;for(let e=0;e<t.sheet.cssRules.length;e++){const n=t.sheet.cssRules[e];if(1!==n.type)continue;const i=n.selectorText.split(/,/gm).filter(Boolean).map((t=>t.trim()));for(let t=0;t<i.length;t++)v[i[t]]=Object.assign(v[i[t]]||{},n.style)}}(e);break;case\\\\\\\"g\\\\\\\":s=r(e,s);break;case\\\\\\\"path\\\\\\\":s=r(e,s),e.hasAttribute(\\\\\\\"d\\\\\\\")&&(m=function(t){const e=new p.a,s=new i.a,r=new i.a,l=new i.a;let c=!0,h=!1;const u=t.getAttribute(\\\\\\\"d\\\\\\\").match(/[a-df-z][^a-df-z]*/gi);for(let t=0,i=u.length;t<i;t++){const i=u[t],d=i.charAt(0),p=i.substr(1).trim();let _;switch(!0===c&&(h=!0,c=!1),d){case\\\\\\\"M\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2)s.x=_[t+0],s.y=_[t+1],r.x=s.x,r.y=s.y,0===t?e.moveTo(s.x,s.y):e.lineTo(s.x,s.y),0===t&&!0===h&&l.copy(s);break;case\\\\\\\"H\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t++)s.x=_[t],r.x=s.x,r.y=s.y,e.lineTo(s.x,s.y),0===t&&!0===h&&l.copy(s);break;case\\\\\\\"V\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t++)s.y=_[t],r.x=s.x,r.y=s.y,e.lineTo(s.x,s.y),0===t&&!0===h&&l.copy(s);break;case\\\\\\\"L\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2)s.x=_[t+0],s.y=_[t+1],r.x=s.x,r.y=s.y,e.lineTo(s.x,s.y),0===t&&!0===h&&l.copy(s);break;case\\\\\\\"C\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=6)e.bezierCurveTo(_[t+0],_[t+1],_[t+2],_[t+3],_[t+4],_[t+5]),r.x=_[t+2],r.y=_[t+3],s.x=_[t+4],s.y=_[t+5],0===t&&!0===h&&l.copy(s);break;case\\\\\\\"S\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=4)e.bezierCurveTo(o(s.x,r.x),o(s.y,r.y),_[t+0],_[t+1],_[t+2],_[t+3]),r.x=_[t+0],r.y=_[t+1],s.x=_[t+2],s.y=_[t+3],0===t&&!0===h&&l.copy(s);break;case\\\\\\\"Q\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=4)e.quadraticCurveTo(_[t+0],_[t+1],_[t+2],_[t+3]),r.x=_[t+0],r.y=_[t+1],s.x=_[t+2],s.y=_[t+3],0===t&&!0===h&&l.copy(s);break;case\\\\\\\"T\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2){const n=o(s.x,r.x),i=o(s.y,r.y);e.quadraticCurveTo(n,i,_[t+0],_[t+1]),r.x=n,r.y=i,s.x=_[t+0],s.y=_[t+1],0===t&&!0===h&&l.copy(s)}break;case\\\\\\\"A\\\\\\\":_=a(p,[3,4],7);for(let t=0,i=_.length;t<i;t+=7){if(_[t+5]==s.x&&_[t+6]==s.y)continue;const i=s.clone();s.x=_[t+5],s.y=_[t+6],r.x=s.x,r.y=s.y,n(e,_[t],_[t+1],_[t+2],_[t+3],_[t+4],i,s),0===t&&!0===h&&l.copy(s)}break;case\\\\\\\"m\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2)s.x+=_[t+0],s.y+=_[t+1],r.x=s.x,r.y=s.y,0===t?e.moveTo(s.x,s.y):e.lineTo(s.x,s.y),0===t&&!0===h&&l.copy(s);break;case\\\\\\\"h\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t++)s.x+=_[t],r.x=s.x,r.y=s.y,e.lineTo(s.x,s.y),0===t&&!0===h&&l.copy(s);break;case\\\\\\\"v\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t++)s.y+=_[t],r.x=s.x,r.y=s.y,e.lineTo(s.x,s.y),0===t&&!0===h&&l.copy(s);break;case\\\\\\\"l\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2)s.x+=_[t+0],s.y+=_[t+1],r.x=s.x,r.y=s.y,e.lineTo(s.x,s.y),0===t&&!0===h&&l.copy(s);break;case\\\\\\\"c\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=6)e.bezierCurveTo(s.x+_[t+0],s.y+_[t+1],s.x+_[t+2],s.y+_[t+3],s.x+_[t+4],s.y+_[t+5]),r.x=s.x+_[t+2],r.y=s.y+_[t+3],s.x+=_[t+4],s.y+=_[t+5],0===t&&!0===h&&l.copy(s);break;case\\\\\\\"s\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=4)e.bezierCurveTo(o(s.x,r.x),o(s.y,r.y),s.x+_[t+0],s.y+_[t+1],s.x+_[t+2],s.y+_[t+3]),r.x=s.x+_[t+0],r.y=s.y+_[t+1],s.x+=_[t+2],s.y+=_[t+3],0===t&&!0===h&&l.copy(s);break;case\\\\\\\"q\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=4)e.quadraticCurveTo(s.x+_[t+0],s.y+_[t+1],s.x+_[t+2],s.y+_[t+3]),r.x=s.x+_[t+0],r.y=s.y+_[t+1],s.x+=_[t+2],s.y+=_[t+3],0===t&&!0===h&&l.copy(s);break;case\\\\\\\"t\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2){const n=o(s.x,r.x),i=o(s.y,r.y);e.quadraticCurveTo(n,i,s.x+_[t+0],s.y+_[t+1]),r.x=n,r.y=i,s.x=s.x+_[t+0],s.y=s.y+_[t+1],0===t&&!0===h&&l.copy(s)}break;case\\\\\\\"a\\\\\\\":_=a(p,[3,4],7);for(let t=0,i=_.length;t<i;t+=7){if(0==_[t+5]&&0==_[t+6])continue;const i=s.clone();s.x+=_[t+5],s.y+=_[t+6],r.x=s.x,r.y=s.y,n(e,_[t],_[t+1],_[t+2],_[t+3],_[t+4],i,s),0===t&&!0===h&&l.copy(s)}break;case\\\\\\\"Z\\\\\\\":case\\\\\\\"z\\\\\\\":e.currentPath.autoClose=!0,e.currentPath.curves.length>0&&(s.copy(l),e.currentPath.currentPoint.copy(s),c=!0);break;default:console.warn(i)}h=!1}return e}(e));break;case\\\\\\\"rect\\\\\\\":s=r(e,s),m=function(t){const e=d(t.getAttribute(\\\\\\\"x\\\\\\\")||0),n=d(t.getAttribute(\\\\\\\"y\\\\\\\")||0),i=d(t.getAttribute(\\\\\\\"rx\\\\\\\")||t.getAttribute(\\\\\\\"ry\\\\\\\")||0),s=d(t.getAttribute(\\\\\\\"ry\\\\\\\")||t.getAttribute(\\\\\\\"rx\\\\\\\")||0),r=d(t.getAttribute(\\\\\\\"width\\\\\\\")),o=d(t.getAttribute(\\\\\\\"height\\\\\\\")),a=.448084975506,l=new p.a;l.moveTo(e+i,n),l.lineTo(e+r-i,n),(0!==i||0!==s)&&l.bezierCurveTo(e+r-i*a,n,e+r,n+s*a,e+r,n+s);l.lineTo(e+r,n+o-s),(0!==i||0!==s)&&l.bezierCurveTo(e+r,n+o-s*a,e+r-i*a,n+o,e+r-i,n+o);l.lineTo(e+i,n+o),(0!==i||0!==s)&&l.bezierCurveTo(e+i*a,n+o,e,n+o-s*a,e,n+o-s);l.lineTo(e,n+s),(0!==i||0!==s)&&l.bezierCurveTo(e,n+s*a,e+i*a,n,e+i,n);return l}(e);break;case\\\\\\\"polygon\\\\\\\":s=r(e,s),m=function(t){function e(t,e,n){const r=d(e),o=d(n);0===s?i.moveTo(r,o):i.lineTo(r,o),s++}const n=/(-?[\\\\d\\\\.?]+)[,|\\\\s](-?[\\\\d\\\\.?]+)/g,i=new p.a;let s=0;return t.getAttribute(\\\\\\\"points\\\\\\\").replace(n,e),i.currentPath.autoClose=!0,i}(e);break;case\\\\\\\"polyline\\\\\\\":s=r(e,s),m=function(t){function e(t,e,n){const r=d(e),o=d(n);0===s?i.moveTo(r,o):i.lineTo(r,o),s++}const n=/(-?[\\\\d\\\\.?]+)[,|\\\\s](-?[\\\\d\\\\.?]+)/g,i=new p.a;let s=0;return t.getAttribute(\\\\\\\"points\\\\\\\").replace(n,e),i.currentPath.autoClose=!1,i}(e);break;case\\\\\\\"circle\\\\\\\":s=r(e,s),m=function(t){const e=d(t.getAttribute(\\\\\\\"cx\\\\\\\")||0),n=d(t.getAttribute(\\\\\\\"cy\\\\\\\")||0),i=d(t.getAttribute(\\\\\\\"r\\\\\\\")||0),s=new u.a;s.absarc(e,n,i,0,2*Math.PI);const r=new p.a;return r.subPaths.push(s),r}(e);break;case\\\\\\\"ellipse\\\\\\\":s=r(e,s),m=function(t){const e=d(t.getAttribute(\\\\\\\"cx\\\\\\\")||0),n=d(t.getAttribute(\\\\\\\"cy\\\\\\\")||0),i=d(t.getAttribute(\\\\\\\"rx\\\\\\\")||0),s=d(t.getAttribute(\\\\\\\"ry\\\\\\\")||0),r=new u.a;r.absellipse(e,n,i,s,0,2*Math.PI);const o=new p.a;return o.subPaths.push(r),o}(e);break;case\\\\\\\"line\\\\\\\":s=r(e,s),m=function(t){const e=d(t.getAttribute(\\\\\\\"x1\\\\\\\")||0),n=d(t.getAttribute(\\\\\\\"y1\\\\\\\")||0),i=d(t.getAttribute(\\\\\\\"x2\\\\\\\")||0),s=d(t.getAttribute(\\\\\\\"y2\\\\\\\")||0),r=new p.a;return r.moveTo(e,n),r.lineTo(i,s),r.currentPath.autoClose=!1,r}(e);break;case\\\\\\\"defs\\\\\\\":c=!1;break;case\\\\\\\"use\\\\\\\":s=r(e,s);const l=e.href.baseVal.substring(1),h=e.viewportElement.getElementById(l);h?t(h,s):console.warn(\\\\\\\"SVGLoader: 'use node' references non-existent node id: \\\\\\\"+l)}if(m&&(void 0!==s.fill&&\\\\\\\"none\\\\\\\"!==s.fill&&m.color.setStyle(s.fill),function(t,e){function n(t){M.set(t.x,t.y,1).applyMatrix3(e),t.set(M.x,M.y)}const i=function(t){return 0!==t.elements[1]||0!==t.elements[3]}(e),s=t.subPaths;for(let t=0,r=s.length;t<r;t++){const r=s[t].curves;for(let t=0;t<r.length;t++){const s=r[t];s.isLineCurve?(n(s.v1),n(s.v2)):s.isCubicBezierCurve?(n(s.v0),n(s.v1),n(s.v2),n(s.v3)):s.isQuadraticBezierCurve?(n(s.v0),n(s.v1),n(s.v2)):s.isEllipseCurve&&(i&&console.warn(\\\\\\\"SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.\\\\\\\"),A.set(s.aX,s.aY),n(A),s.aX=A.x,s.aY=A.y,s.xRadius*=_(e),s.yRadius*=f(e))}}}(m,E),g.push(m),m.userData={node:e,style:s}),c){const n=e.childNodes;for(let e=0;e<n.length;e++)t(n[e],s)}l&&(y.pop(),y.length>0?E.copy(y[y.length-1]):E.identity())}(S.documentElement,{fill:\\\\\\\"#000\\\\\\\",fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeLineJoin:\\\\\\\"miter\\\\\\\",strokeLineCap:\\\\\\\"butt\\\\\\\",strokeMiterLimit:4});return{paths:g,xml:S.documentElement}}static createShapes(t){const e=999999999,n=0,s=1,o=2,a=3,l=4,c=5,h=6,p={loc:n,t:0};function m(t,e,i,s){const r=t.x,a=e.x,l=i.x,c=s.x,h=t.y,u=e.y,d=i.y,_=s.y,m=(c-l)*(h-d)-(_-d)*(r-l),g=(_-d)*(a-r)-(c-l)*(u-h),v=m/g,y=((a-r)*(h-d)-(u-h)*(r-l))/g;if(0===g&&0!==m||v<=0||v>=1||y<0||y>1)return null;if(0===m&&0===g){for(let l=0;l<2;l++){if(f(0===l?i:s,t,e),p.loc==n){const t=0===l?i:s;return{x:t.x,y:t.y,t:p.t}}if(p.loc==o){return{x:+(r+p.t*(a-r)).toPrecision(10),y:+(h+p.t*(u-h)).toPrecision(10),t:p.t}}}return null}for(let r=0;r<2;r++)if(f(0===r?i:s,t,e),p.loc==n){const t=0===r?i:s;return{x:t.x,y:t.y,t:p.t}}return{x:+(r+v*(a-r)).toPrecision(10),y:+(h+v*(u-h)).toPrecision(10),t:v}}function f(t,e,i){const r=i.x-e.x,u=i.y-e.y,d=t.x-e.x,_=t.y-e.y,m=r*_-d*u;if(t.x===e.x&&t.y===e.y)return p.loc=n,void(p.t=0);if(t.x===i.x&&t.y===i.y)return p.loc=s,void(p.t=1);if(m<-Number.EPSILON)return void(p.loc=a);if(m>Number.EPSILON)return void(p.loc=l);if(r*d<0||u*_<0)return void(p.loc=c);if(Math.sqrt(r*r+u*u)<Math.sqrt(d*d+_*_))return void(p.loc=h);let f;f=0!==r?d/r:_/u,p.loc=o,p.t=f}function g(t,e,n){const s=new i.a;e.getCenter(s);const r=[];return n.forEach((e=>{if(e.boundingBox.containsPoint(s)){(function(t,e){const n=[],s=[];for(let r=1;r<t.length;r++){const o=t[r-1],a=t[r];for(let t=1;t<e.length;t++){const r=m(o,a,e[t-1],e[t]);null!==r&&void 0===n.find((t=>t.t<=r.t+Number.EPSILON&&t.t>=r.t-Number.EPSILON))&&(n.push(r),s.push(new i.a(r.x,r.y)))}}return s})(t,e.points).forEach((t=>{r.push({identifier:e.identifier,isCW:e.isCW,point:t})}))}})),r.sort(((t,e)=>t.point.x-e.point.x)),r}let v=0,y=e,x=-999999999,b=t.subPaths.map((t=>{const n=t.getPoints();let s=-999999999,o=e,a=-999999999,l=e;for(let t=0;t<n.length;t++){const e=n[t];e.y>s&&(s=e.y),e.y<o&&(o=e.y),e.x>a&&(a=e.x),e.x<l&&(l=e.x)}return x<=a&&(x=a+1),y>=l&&(y=l-1),{points:n,isCW:_.a.isClockWise(n),identifier:v++,boundingBox:new r(new i.a(l,o),new i.a(a,s))}}));b=b.filter((t=>t.points.length>1));const w=b.map((e=>function(t,e,n,s,r){null!=r&&\\\\\\\"\\\\\\\"!==r||(r=\\\\\\\"nonzero\\\\\\\");const o=new i.a;t.boundingBox.getCenter(o);const a=g([new i.a(n,o.y),new i.a(s,o.y)],t.boundingBox,e);a.sort(((t,e)=>t.point.x-e.point.x));const l=[],c=[];a.forEach((e=>{e.identifier===t.identifier?l.push(e):c.push(e)}));const h=l[0].point.x,u=[];let d=0;for(;d<c.length&&c[d].point.x<h;)u.length>0&&u[u.length-1]===c[d].identifier?u.pop():u.push(c[d].identifier),d++;if(u.push(t.identifier),\\\\\\\"evenodd\\\\\\\"===r){const e=u.length%2==0,n=u[u.length-2];return{identifier:t.identifier,isHole:e,for:n}}if(\\\\\\\"nonzero\\\\\\\"===r){let n=!0,i=null,s=null;for(let t=0;t<u.length;t++){const r=u[t];n?(s=e[r].isCW,n=!1,i=r):s!==e[r].isCW&&(s=e[r].isCW,n=!0)}return{identifier:t.identifier,isHole:n,for:i}}console.warn('fill-rule: \\\\\\\"'+r+'\\\\\\\" is currently not implemented.')}(e,b,y,x,t.userData.style.fillRule))),T=[];return b.forEach((t=>{if(!w[t.identifier].isHole){const e=new d.a(t.points);w.filter((e=>e.isHole&&e.for===t.identifier)).forEach((t=>{const n=b[t.identifier];e.holes.push(new u.a(n.points))})),T.push(e)}})),T}static getStrokeStyle(t,e,n,i,s){return{strokeColor:e=void 0!==e?e:\\\\\\\"#000\\\\\\\",strokeWidth:t=void 0!==t?t:1,strokeLineJoin:n=void 0!==n?n:\\\\\\\"miter\\\\\\\",strokeLineCap:i=void 0!==i?i:\\\\\\\"butt\\\\\\\",strokeMiterLimit:s=void 0!==s?s:4}}static pointsToStroke(t,e,n,i){const s=[],r=[],a=[];if(0===f.pointsToStrokeWithBuffers(t,e,n,i,s,r,a))return null;const c=new o.a;return c.setAttribute(\\\\\\\"position\\\\\\\",new l.c(s,3)),c.setAttribute(\\\\\\\"normal\\\\\\\",new l.c(r,3)),c.setAttribute(\\\\\\\"uv\\\\\\\",new l.c(a,2)),c}static pointsToStrokeWithBuffers(t,e,n,s,r,o,a,l){const c=new i.a,h=new i.a,u=new i.a,d=new i.a,p=new i.a,_=new i.a,m=new i.a,f=new i.a,g=new i.a,v=new i.a,y=new i.a,x=new i.a,b=new i.a,w=new i.a,T=new i.a,A=new i.a,M=new i.a;n=void 0!==n?n:12,s=void 0!==s?s:.001,l=void 0!==l?l:0;const E=(t=function(t){let e=!1;for(let n=1,i=t.length-1;n<i;n++)if(t[n].distanceTo(t[n+1])<s){e=!0;break}if(!e)return t;const n=[];n.push(t[0]);for(let e=1,i=t.length-1;e<i;e++)t[e].distanceTo(t[e+1])>=s&&n.push(t[e]);return n.push(t[t.length-1]),n}(t)).length;if(E<2)return 0;const S=t[0].equals(t[E-1]);let C,N,L=t[0];const O=e.strokeWidth/2,P=1/(E-1);let R,I,F,D,B=0,z=!1,k=0,U=3*l,G=2*l;V(t[0],t[1],c).multiplyScalar(O),f.copy(t[0]).sub(c),g.copy(t[0]).add(c),v.copy(f),y.copy(g);for(let n=1;n<E;n++){C=t[n],N=n===E-1?S?t[1]:void 0:t[n+1];const i=c;if(V(L,C,i),u.copy(i).multiplyScalar(O),x.copy(C).sub(u),b.copy(C).add(u),R=B+P,I=!1,void 0!==N){V(C,N,h),u.copy(h).multiplyScalar(O),w.copy(C).sub(u),T.copy(C).add(u),F=!0,u.subVectors(N,L),i.dot(u)<0&&(F=!1),1===n&&(z=F),u.subVectors(N,C),u.normalize();const t=Math.abs(i.dot(u));if(0!==t){const n=O/t;u.multiplyScalar(-n),d.subVectors(C,L),p.copy(d).setLength(n).add(u),A.copy(p).negate();const i=p.length(),s=d.length();d.divideScalar(s),_.subVectors(N,C);const r=_.length();switch(_.divideScalar(r),d.dot(A)<s&&_.dot(A)<r&&(I=!0),M.copy(p).add(C),A.add(C),D=!1,I?F?(T.copy(A),b.copy(A)):(w.copy(A),x.copy(A)):W(),e.strokeLineJoin){case\\\\\\\"bevel\\\\\\\":q(F,I,R);break;case\\\\\\\"round\\\\\\\":X(F,I),F?j(C,x,w,R,0):j(C,T,b,R,1);break;case\\\\\\\"miter\\\\\\\":case\\\\\\\"miter-clip\\\\\\\":default:const t=O*e.strokeMiterLimit/i;if(t<1){if(\\\\\\\"miter-clip\\\\\\\"!==e.strokeLineJoin){q(F,I,R);break}X(F,I),F?(_.subVectors(M,x).multiplyScalar(t).add(x),m.subVectors(M,w).multiplyScalar(t).add(w),H(x,R,0),H(_,R,0),H(C,R,.5),H(C,R,.5),H(_,R,0),H(m,R,0),H(C,R,.5),H(m,R,0),H(w,R,0)):(_.subVectors(M,b).multiplyScalar(t).add(b),m.subVectors(M,T).multiplyScalar(t).add(T),H(b,R,1),H(_,R,1),H(C,R,.5),H(C,R,.5),H(_,R,1),H(m,R,1),H(C,R,.5),H(m,R,1),H(T,R,1))}else I?(F?(H(g,B,1),H(f,B,0),H(M,R,0),H(g,B,1),H(M,R,0),H(A,R,1)):(H(g,B,1),H(f,B,0),H(M,R,1),H(f,B,0),H(A,R,0),H(M,R,1)),F?w.copy(M):T.copy(M)):F?(H(x,R,0),H(M,R,0),H(C,R,.5),H(C,R,.5),H(M,R,0),H(w,R,0)):(H(b,R,1),H(M,R,1),H(C,R,.5),H(C,R,.5),H(M,R,1),H(T,R,1)),D=!0}}else W()}else W();S||n!==E-1||Y(t[0],v,y,F,!0,B),B=R,L=C,f.copy(w),g.copy(T)}if(S){if(I&&r){let t=M,e=A;z!==F&&(t=A,e=M),F?(D||z)&&(e.toArray(r,0),e.toArray(r,9),D&&t.toArray(r,3)):!D&&z||(e.toArray(r,3),e.toArray(r,9),D&&t.toArray(r,0))}}else Y(C,x,b,F,!1,R);return k;function V(t,e,n){return n.subVectors(e,t),n.set(-n.y,n.x).normalize()}function H(t,e,n){r&&(r[U]=t.x,r[U+1]=t.y,r[U+2]=0,o&&(o[U]=0,o[U+1]=0,o[U+2]=1),U+=3,a&&(a[G]=e,a[G+1]=n,G+=2)),k+=3}function j(t,e,i,s,r){c.copy(e).sub(t).normalize(),h.copy(i).sub(t).normalize();let o=Math.PI;const a=c.dot(h);Math.abs(a)<1&&(o=Math.abs(Math.acos(a))),o/=n,u.copy(e);for(let e=0,i=n-1;e<i;e++)d.copy(u).rotateAround(t,o),H(u,s,r),H(d,s,r),H(t,s,.5),u.copy(d);H(d,s,r),H(i,s,r),H(t,s,.5)}function W(){H(g,B,1),H(f,B,0),H(x,R,0),H(g,B,1),H(x,R,1),H(b,R,0)}function q(t,e,n){e?t?(H(g,B,1),H(f,B,0),H(x,R,0),H(g,B,1),H(x,R,0),H(A,R,1),H(x,n,0),H(w,n,0),H(A,n,.5)):(H(g,B,1),H(f,B,0),H(b,R,1),H(f,B,0),H(A,R,0),H(b,R,1),H(b,n,1),H(T,n,0),H(A,n,.5)):t?(H(x,n,0),H(w,n,0),H(C,n,.5)):(H(b,n,1),H(T,n,0),H(C,n,.5))}function X(t,e){e&&(t?(H(g,B,1),H(f,B,0),H(x,R,0),H(g,B,1),H(x,R,0),H(A,R,1),H(x,B,0),H(C,R,.5),H(A,R,1),H(C,R,.5),H(w,B,0),H(A,R,1)):(H(g,B,1),H(f,B,0),H(b,R,1),H(f,B,0),H(A,R,0),H(b,R,1),H(b,B,1),H(A,R,0),H(C,R,.5),H(C,R,.5),H(A,R,0),H(T,B,1)))}function Y(t,n,i,s,o,a){switch(e.strokeLineCap){case\\\\\\\"round\\\\\\\":o?j(t,i,n,a,.5):j(t,n,i,a,.5);break;case\\\\\\\"square\\\\\\\":if(o)c.subVectors(n,t),h.set(c.y,-c.x),u.addVectors(c,h).add(t),d.subVectors(h,c).add(t),s?(u.toArray(r,3),d.toArray(r,0),d.toArray(r,9)):(u.toArray(r,3),u.toArray(r,9),d.toArray(r,0));else{c.subVectors(i,t),h.set(c.y,-c.x),u.addVectors(c,h).add(t),d.subVectors(h,c).add(t);const e=r.length;s?(u.toArray(r,e-3),d.toArray(r,e-6),d.toArray(r,e-12)):(u.toArray(r,e-6),d.toArray(r,e-3),d.toArray(r,e-12))}}}}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";var i;n.d(e,\\\\\\\"a\\\\\\\",(function(){return i})),function(t){t.CODE=\\\\\\\"code.json\\\\\\\",t.EDITOR=\\\\\\\"editor.json\\\\\\\",t.ASSETS=\\\\\\\"assets.json\\\\\\\",t.POLYGONJS=\\\\\\\"js/all.js\\\\\\\",t.POLY_CONFIG=\\\\\\\"js/polyConfig.js\\\\\\\",t.JS_FILES=\\\\\\\"js_files.json\\\\\\\",t.POSTER=\\\\\\\"poster.png\\\\\\\"}(i||(i={}))},function(t,e,n){var i=n(148),s=n(153);t.exports=function(t,e){var n=s(t,e);return i(n)?n:void 0}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return h}));var i=n(0),s=n(25);function r(){let t=0,e=0,n=0,i=0;function s(s,r,o,a){t=s,e=o,n=-3*s+3*r-2*o-a,i=2*s-2*r+o+a}return{initCatmullRom:function(t,e,n,i,r){s(e,n,r*(n-t),r*(i-e))},initNonuniformCatmullRom:function(t,e,n,i,r,o,a){let l=(e-t)/r-(n-t)/(r+o)+(n-e)/o,c=(n-e)/o-(i-e)/(o+a)+(i-n)/a;l*=o,c*=o,s(e,n,l,c)},calc:function(s){const r=s*s;return t+e*s+n*r+i*(r*s)}}}const o=new i.a,a=new r,l=new r,c=new r;class h extends s.a{constructor(t=[],e=!1,n=\\\\\\\"centripetal\\\\\\\",i=.5){super(),this.type=\\\\\\\"CatmullRomCurve3\\\\\\\",this.points=t,this.closed=e,this.curveType=n,this.tension=i}getPoint(t,e=new i.a){const n=e,s=this.points,r=s.length,h=(r-(this.closed?0:1))*t;let u,d,p=Math.floor(h),_=h-p;this.closed?p+=p>0?0:(Math.floor(Math.abs(p)/r)+1)*r:0===_&&p===r-1&&(p=r-2,_=1),this.closed||p>0?u=s[(p-1)%r]:(o.subVectors(s[0],s[1]).add(s[0]),u=o);const m=s[p%r],f=s[(p+1)%r];if(this.closed||p+2<r?d=s[(p+2)%r]:(o.subVectors(s[r-1],s[r-2]).add(s[r-1]),d=o),\\\\\\\"centripetal\\\\\\\"===this.curveType||\\\\\\\"chordal\\\\\\\"===this.curveType){const t=\\\\\\\"chordal\\\\\\\"===this.curveType?.5:.25;let e=Math.pow(u.distanceToSquared(m),t),n=Math.pow(m.distanceToSquared(f),t),i=Math.pow(f.distanceToSquared(d),t);n<1e-4&&(n=1),e<1e-4&&(e=n),i<1e-4&&(i=n),a.initNonuniformCatmullRom(u.x,m.x,f.x,d.x,e,n,i),l.initNonuniformCatmullRom(u.y,m.y,f.y,d.y,e,n,i),c.initNonuniformCatmullRom(u.z,m.z,f.z,d.z,e,n,i)}else\\\\\\\"catmullrom\\\\\\\"===this.curveType&&(a.initCatmullRom(u.x,m.x,f.x,d.x,this.tension),l.initCatmullRom(u.y,m.y,f.y,d.y,this.tension),c.initCatmullRom(u.z,m.z,f.z,d.z,this.tension));return n.set(a.calc(_),l.calc(_),c.calc(_)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new i.a).fromArray(n))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}}h.prototype.isCatmullRomCurve3=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";function i(t){return(window.URL||window.webkitURL).createObjectURL(t)}n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}))},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(33);class s extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"AmbientLight\\\\\\\"}}s.prototype.isAmbientLight=!0},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&(\\\\\\\"object\\\\\\\"==e||\\\\\\\"function\\\\\\\"==e)}},function(t,e){t.exports=function(t){return null!=t&&\\\\\\\"object\\\\\\\"==typeof t}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(25),s=n(32),r=n(0);class o extends i.a{constructor(t=new r.a,e=new r.a,n=new r.a){super(),this.type=\\\\\\\"QuadraticBezierCurve3\\\\\\\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new r.a){const n=e,i=this.v0,o=this.v1,a=this.v2;return n.set(Object(s.c)(t,i.x,o.x,a.x),Object(s.c)(t,i.y,o.y,a.y),Object(s.c)(t,i.z,o.z,a.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}o.prototype.isQuadraticBezierCurve3=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{static fadeOut(t){return new Promise((e=>{const n=setInterval((()=>{t.style.opacity||(t.style.opacity=\\\\\\\"1\\\\\\\");const i=parseFloat(t.style.opacity);i>0?t.style.opacity=\\\\\\\"\\\\\\\"+(i-.05):(e(),clearInterval(n))}),20)}))}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(41);class s extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"LineLoop\\\\\\\"}}s.prototype.isLineLoop=!0},,function(t,e,n){!function(n){\\\\\\\"use strict\\\\\\\";var i=\\\\\\\"Compound\\\\\\\",s=\\\\\\\"MemberExpression\\\\\\\",r=\\\\\\\"Literal\\\\\\\",o=function(t,e){var n=new Error(t+\\\\\\\" at character \\\\\\\"+e);throw n.index=e,n.description=t,n},a=!0,l={\\\\\\\"-\\\\\\\":a,\\\\\\\"!\\\\\\\":a,\\\\\\\"~\\\\\\\":a,\\\\\\\"+\\\\\\\":a},c={\\\\\\\"||\\\\\\\":1,\\\\\\\"&&\\\\\\\":2,\\\\\\\"|\\\\\\\":3,\\\\\\\"^\\\\\\\":4,\\\\\\\"&\\\\\\\":5,\\\\\\\"==\\\\\\\":6,\\\\\\\"!=\\\\\\\":6,\\\\\\\"===\\\\\\\":6,\\\\\\\"!==\\\\\\\":6,\\\\\\\"<\\\\\\\":7,\\\\\\\">\\\\\\\":7,\\\\\\\"<=\\\\\\\":7,\\\\\\\">=\\\\\\\":7,\\\\\\\"<<\\\\\\\":8,\\\\\\\">>\\\\\\\":8,\\\\\\\">>>\\\\\\\":8,\\\\\\\"+\\\\\\\":9,\\\\\\\"-\\\\\\\":9,\\\\\\\"*\\\\\\\":10,\\\\\\\"/\\\\\\\":10,\\\\\\\"%\\\\\\\":10},h=function(t){var e,n=0;for(var i in t)(e=i.length)>n&&t.hasOwnProperty(i)&&(n=e);return n},u=h(l),d=h(c),p={true:!0,false:!1,null:null},_=function(t){return c[t]||0},m=function(t,e,n){return{type:\\\\\\\"||\\\\\\\"===t||\\\\\\\"&&\\\\\\\"===t?\\\\\\\"LogicalExpression\\\\\\\":\\\\\\\"BinaryExpression\\\\\\\",operator:t,left:e,right:n}},f=function(t){return t>=48&&t<=57},g=function(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=128&&!c[String.fromCharCode(t)]},v=function(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t>=128&&!c[String.fromCharCode(t)]},y=function(t){for(var e,n,a=0,h=t.charAt,y=t.charCodeAt,x=function(e){return h.call(t,e)},b=function(e){return y.call(t,e)},w=t.length,T=function(){for(var t=b(a);32===t||9===t||10===t||13===t;)t=b(++a)},A=function(){var t,e,n=E();return T(),63!==b(a)?n:(a++,(t=A())||o(\\\\\\\"Expected expression\\\\\\\",a),T(),58===b(a)?(a++,(e=A())||o(\\\\\\\"Expected expression\\\\\\\",a),{type:\\\\\\\"ConditionalExpression\\\\\\\",test:n,consequent:t,alternate:e}):void o(\\\\\\\"Expected :\\\\\\\",a))},M=function(){T();for(var e=t.substr(a,d),n=e.length;n>0;){if(c.hasOwnProperty(e)&&(!g(b(a))||a+e.length<t.length&&!v(b(a+e.length))))return a+=n,e;e=e.substr(0,--n)}return!1},E=function(){var t,e,n,i,s,r,l,c,h;if(r=S(),!(e=M()))return r;for(s={value:e,prec:_(e)},(l=S())||o(\\\\\\\"Expected expression after \\\\\\\"+e,a),i=[r,s,l];(e=M())&&0!==(n=_(e));){for(s={value:e,prec:n},h=e;i.length>2&&n<=i[i.length-2].prec;)l=i.pop(),e=i.pop().value,r=i.pop(),t=m(e,r,l),i.push(t);(t=S())||o(\\\\\\\"Expected expression after \\\\\\\"+h,a),i.push(s,t)}for(t=i[c=i.length-1];c>1;)t=m(i[c-1].value,i[c-2],t),c-=2;return t},S=function(){var e,n,i;if(T(),e=b(a),f(e)||46===e)return C();if(39===e||34===e)return N();if(91===e)return I();for(i=(n=t.substr(a,u)).length;i>0;){if(l.hasOwnProperty(n)&&(!g(b(a))||a+n.length<t.length&&!v(b(a+n.length))))return a+=i,{type:\\\\\\\"UnaryExpression\\\\\\\",operator:n,argument:S(),prefix:!0};n=n.substr(0,--i)}return!(!g(e)&&40!==e)&&P()},C=function(){for(var t,e,n=\\\\\\\"\\\\\\\";f(b(a));)n+=x(a++);if(46===b(a))for(n+=x(a++);f(b(a));)n+=x(a++);if(\\\\\\\"e\\\\\\\"===(t=x(a))||\\\\\\\"E\\\\\\\"===t){for(n+=x(a++),\\\\\\\"+\\\\\\\"!==(t=x(a))&&\\\\\\\"-\\\\\\\"!==t||(n+=x(a++));f(b(a));)n+=x(a++);f(b(a-1))||o(\\\\\\\"Expected exponent (\\\\\\\"+n+x(a)+\\\\\\\")\\\\\\\",a)}return e=b(a),g(e)?o(\\\\\\\"Variable names cannot start with a number (\\\\\\\"+n+x(a)+\\\\\\\")\\\\\\\",a):46===e&&o(\\\\\\\"Unexpected period\\\\\\\",a),{type:r,value:parseFloat(n),raw:n}},N=function(){for(var t,e=\\\\\\\"\\\\\\\",n=x(a++),i=!1;a<w;){if((t=x(a++))===n){i=!0;break}if(\\\\\\\"\\\\\\\\\\\\\\\"===t)switch(t=x(a++)){case\\\\\\\"n\\\\\\\":e+=\\\\\\\"\\\\n\\\\\\\";break;case\\\\\\\"r\\\\\\\":e+=\\\\\\\"\\\\r\\\\\\\";break;case\\\\\\\"t\\\\\\\":e+=\\\\\\\"\\\\t\\\\\\\";break;case\\\\\\\"b\\\\\\\":e+=\\\\\\\"\\\\b\\\\\\\";break;case\\\\\\\"f\\\\\\\":e+=\\\\\\\"\\\\f\\\\\\\";break;case\\\\\\\"v\\\\\\\":e+=\\\\\\\"\\\\v\\\\\\\";break;default:e+=t}else e+=t}return i||o('Unclosed quote after \\\\\\\"'+e+'\\\\\\\"',a),{type:r,value:e,raw:n+e+n}},L=function(){var e,n=b(a),i=a;for(g(n)?a++:o(\\\\\\\"Unexpected \\\\\\\"+x(a),a);a<w&&(n=b(a),v(n));)a++;return e=t.slice(i,a),p.hasOwnProperty(e)?{type:r,value:p[e],raw:e}:\\\\\\\"this\\\\\\\"===e?{type:\\\\\\\"ThisExpression\\\\\\\"}:{type:\\\\\\\"Identifier\\\\\\\",name:e}},O=function(t){for(var e,n,s=[],r=!1,l=0;a<w;){if(T(),(e=b(a))===t){r=!0,a++,41===t&&l&&l>=s.length&&o(\\\\\\\"Unexpected token \\\\\\\"+String.fromCharCode(t),a);break}if(44===e){if(a++,++l!==s.length)if(41===t)o(\\\\\\\"Unexpected token ,\\\\\\\",a);else if(93===t)for(var c=s.length;c<l;c++)s.push(null)}else(n=A())&&n.type!==i||o(\\\\\\\"Expected comma\\\\\\\",a),s.push(n)}return r||o(\\\\\\\"Expected \\\\\\\"+String.fromCharCode(t),a),s},P=function(){var t,e;for(e=40===(t=b(a))?R():L(),T(),t=b(a);46===t||91===t||40===t;)a++,46===t?(T(),e={type:s,computed:!1,object:e,property:L()}):91===t?(e={type:s,computed:!0,object:e,property:A()},T(),93!==(t=b(a))&&o(\\\\\\\"Unclosed [\\\\\\\",a),a++):40===t&&(e={type:\\\\\\\"CallExpression\\\\\\\",arguments:O(41),callee:e}),T(),t=b(a);return e},R=function(){a++;var t=A();if(T(),41===b(a))return a++,t;o(\\\\\\\"Unclosed (\\\\\\\",a)},I=function(){return a++,{type:\\\\\\\"ArrayExpression\\\\\\\",elements:O(93)}},F=[];a<w;)59===(e=b(a))||44===e?a++:(n=A())?F.push(n):a<w&&o('Unexpected \\\\\\\"'+x(a)+'\\\\\\\"',a);return 1===F.length?F[0]:{type:i,body:F}};y.version=\\\\\\\"0.3.5\\\\\\\",y.toString=function(){return\\\\\\\"JavaScript Expression Parser (JSEP) v\\\\\\\"+y.version},y.addUnaryOp=function(t){return u=Math.max(t.length,u),l[t]=a,this},y.addBinaryOp=function(t,e){return d=Math.max(t.length,d),c[t]=e,this},y.addLiteral=function(t,e){return p[t]=e,this},y.removeUnaryOp=function(t){return delete l[t],t.length===u&&(u=h(l)),this},y.removeAllUnaryOps=function(){return l={},u=0,this},y.removeBinaryOp=function(t){return delete c[t],t.length===d&&(d=h(c)),this},y.removeAllBinaryOps=function(){return c={},d=0,this},y.removeLiteral=function(t){return delete p[t],this},y.removeAllLiterals=function(){return p={},this},t.exports?e=t.exports=y:e.parse=y}()},function(t,e,n){var i=n(138),s=n(139),r=n(140),o=n(141),a=n(142);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}l.prototype.clear=i,l.prototype.delete=s,l.prototype.get=r,l.prototype.has=o,l.prototype.set=a,t.exports=l},function(t,e,n){var i=n(117);t.exports=function(t,e){for(var n=t.length;n--;)if(i(t[n][0],e))return n;return-1}},function(t,e,n){var i=n(103),s=n(149),r=n(150),o=i?i.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?\\\\\\\"[object Undefined]\\\\\\\":\\\\\\\"[object Null]\\\\\\\":o&&o in Object(t)?s(t):r(t)}},function(t,e){var n;n=function(){return this}();try{n=n||new Function(\\\\\\\"return this\\\\\\\")()}catch(t){\\\\\\\"object\\\\\\\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var i=n(84)(Object,\\\\\\\"create\\\\\\\");t.exports=i},function(t,e,n){var i=n(163);t.exports=function(t,e){var n=t.__data__;return i(e)?n[\\\\\\\"string\\\\\\\"==typeof e?\\\\\\\"string\\\\\\\":\\\\\\\"hash\\\\\\\"]:n.map}},function(t,e,n){var i=n(121),s=n(122);t.exports=function(t,e,n,r){var o=!n;n||(n={});for(var a=-1,l=e.length;++a<l;){var c=e[a],h=r?r(n[c],t[c],c,n,t):void 0;void 0===h&&(h=t[c]),o?s(n,c,h):i(n,c,h)}return n}},function(t,e,n){var i=n(84)(n(68),\\\\\\\"Map\\\\\\\");t.exports=i},function(t,e,n){var i=n(68).Symbol;t.exports=i},function(t,e,n){var i=n(123),s=n(177),r=n(127);t.exports=function(t){return r(t)?i(t):s(t)}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,\\\\\\\"loaded\\\\\\\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\\\\\\\"id\\\\\\\",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var i=n(119),s=e&&!e.nodeType&&e,r=s&&\\\\\\\"object\\\\\\\"==typeof t&&t&&!t.nodeType&&t,o=r&&r.exports===s&&i.process,a=function(){try{var t=r&&r.require&&r.require(\\\\\\\"util\\\\\\\").types;return t||o&&o.binding&&o.binding(\\\\\\\"util\\\\\\\")}catch(t){}}();t.exports=a}).call(this,n(106)(t))},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===(\\\\\\\"function\\\\\\\"==typeof e&&e.prototype||n)}},function(t,e,n){var i=n(123),s=n(180),r=n(127);t.exports=function(t){return r(t)?i(t,!0):s(t)}},function(t,e,n){var i=n(185),s=n(128),r=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,a=o?function(t){return null==t?[]:(t=Object(t),i(o(t),(function(e){return r.call(t,e)})))}:s;t.exports=a},function(t,e,n){var i=n(189),s=n(102),r=n(190),o=n(191),a=n(192),l=n(97),c=n(120),h=\\\\\\\"[object Map]\\\\\\\",u=\\\\\\\"[object Promise]\\\\\\\",d=\\\\\\\"[object Set]\\\\\\\",p=\\\\\\\"[object WeakMap]\\\\\\\",_=\\\\\\\"[object DataView]\\\\\\\",m=c(i),f=c(s),g=c(r),v=c(o),y=c(a),x=l;(i&&x(new i(new ArrayBuffer(1)))!=_||s&&x(new s)!=h||r&&x(r.resolve())!=u||o&&x(new o)!=d||a&&x(new a)!=p)&&(x=function(t){var e=l(t),n=\\\\\\\"[object Object]\\\\\\\"==e?t.constructor:void 0,i=n?c(n):\\\\\\\"\\\\\\\";if(i)switch(i){case m:return _;case f:return h;case g:return u;case v:return d;case y:return p}return e}),t.exports=x},function(t,e,n){var i=n(195);t.exports=function(t){var e=new t.constructor(t.byteLength);return new i(e).set(new i(t)),e}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.decompressFrames=e.decompressFrame=e.parseGIF=void 0;var i,s=(i=n(206))&&i.__esModule?i:{default:i},r=n(133),o=n(134),a=n(207),l=n(208);e.parseGIF=function(t){var e=new Uint8Array(t);return(0,r.parse)((0,o.buildStream)(e),s.default)};var c=function(t,e,n){if(t.image){var i=t.image,s=i.descriptor.width*i.descriptor.height,r=(0,l.lzw)(i.data.minCodeSize,i.data.blocks,s);i.descriptor.lct.interlaced&&(r=(0,a.deinterlace)(r,i.descriptor.width));var o={pixels:r,dims:{top:t.image.descriptor.top,left:t.image.descriptor.left,width:t.image.descriptor.width,height:t.image.descriptor.height}};return i.descriptor.lct&&i.descriptor.lct.exists?o.colorTable=i.lct:o.colorTable=e,t.gce&&(o.delay=10*(t.gce.delay||10),o.disposalType=t.gce.extras.disposal,t.gce.extras.transparentColorGiven&&(o.transparentIndex=t.gce.transparentColorIndex)),n&&(o.patch=function(t){for(var e=t.pixels.length,n=new Uint8ClampedArray(4*e),i=0;i<e;i++){var s=4*i,r=t.pixels[i],o=t.colorTable[r]||[0,0,0];n[s]=o[0],n[s+1]=o[1],n[s+2]=o[2],n[s+3]=r!==t.transparentIndex?255:0}return n}(o)),o}console.warn(\\\\\\\"gif frame does not have associated image.\\\\\\\")};e.decompressFrame=c;e.decompressFrames=function(t,e){return t.frames.filter((function(t){return t.image})).map((function(n){return c(n,t.gct,e)}))}},,function(t,e,n){var i=n(137),s=n(167),r=n(121),o=n(169),a=n(179),l=n(182),c=n(183),h=n(184),u=n(186),d=n(187),p=n(188),_=n(112),m=n(193),f=n(194),g=n(200),v=n(105),y=n(124),x=n(202),b=n(88),w=n(204),T=n(104),A=n(110),M=\\\\\\\"[object Arguments]\\\\\\\",E=\\\\\\\"[object Function]\\\\\\\",S=\\\\\\\"[object Object]\\\\\\\",C={};C[M]=C[\\\\\\\"[object Array]\\\\\\\"]=C[\\\\\\\"[object ArrayBuffer]\\\\\\\"]=C[\\\\\\\"[object DataView]\\\\\\\"]=C[\\\\\\\"[object Boolean]\\\\\\\"]=C[\\\\\\\"[object Date]\\\\\\\"]=C[\\\\\\\"[object Float32Array]\\\\\\\"]=C[\\\\\\\"[object Float64Array]\\\\\\\"]=C[\\\\\\\"[object Int8Array]\\\\\\\"]=C[\\\\\\\"[object Int16Array]\\\\\\\"]=C[\\\\\\\"[object Int32Array]\\\\\\\"]=C[\\\\\\\"[object Map]\\\\\\\"]=C[\\\\\\\"[object Number]\\\\\\\"]=C[S]=C[\\\\\\\"[object RegExp]\\\\\\\"]=C[\\\\\\\"[object Set]\\\\\\\"]=C[\\\\\\\"[object String]\\\\\\\"]=C[\\\\\\\"[object Symbol]\\\\\\\"]=C[\\\\\\\"[object Uint8Array]\\\\\\\"]=C[\\\\\\\"[object Uint8ClampedArray]\\\\\\\"]=C[\\\\\\\"[object Uint16Array]\\\\\\\"]=C[\\\\\\\"[object Uint32Array]\\\\\\\"]=!0,C[\\\\\\\"[object Error]\\\\\\\"]=C[E]=C[\\\\\\\"[object WeakMap]\\\\\\\"]=!1,t.exports=function t(e,n,N,L,O,P){var R,I=1&n,F=2&n,D=4&n;if(N&&(R=O?N(e,L,O,P):N(e)),void 0!==R)return R;if(!b(e))return e;var B=v(e);if(B){if(R=m(e),!I)return c(e,R)}else{var z=_(e),k=z==E||\\\\\\\"[object GeneratorFunction]\\\\\\\"==z;if(y(e))return l(e,I);if(z==S||z==M||k&&!O){if(R=F||k?{}:g(e),!I)return F?u(e,a(R,e)):h(e,o(R,e))}else{if(!C[z])return O?e:{};R=f(e,z,I)}}P||(P=new i);var U=P.get(e);if(U)return U;P.set(e,R),w(e)?e.forEach((function(i){R.add(t(i,n,N,i,e,P))})):x(e)&&e.forEach((function(i,s){R.set(s,t(i,n,N,s,e,P))}));var G=B?void 0:(D?F?p:d:F?A:T)(e);return s(G||e,(function(i,s){G&&(i=e[s=i]),r(R,s,t(i,n,N,s,e,P))})),R}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var i=n(97),s=n(88);t.exports=function(t){if(!s(t))return!1;var e=i(t);return\\\\\\\"[object Function]\\\\\\\"==e||\\\\\\\"[object GeneratorFunction]\\\\\\\"==e||\\\\\\\"[object AsyncFunction]\\\\\\\"==e||\\\\\\\"[object Proxy]\\\\\\\"==e}},function(t,e,n){(function(e){var n=\\\\\\\"object\\\\\\\"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(98))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+\\\\\\\"\\\\\\\"}catch(t){}}return\\\\\\\"\\\\\\\"}},function(t,e,n){var i=n(122),s=n(117),r=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var o=t[e];r.call(t,e)&&s(o,n)&&(void 0!==n||e in t)||i(t,e,n)}},function(t,e,n){var i=n(168);t.exports=function(t,e,n){\\\\\\\"__proto__\\\\\\\"==e&&i?i(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},function(t,e,n){var i=n(170),s=n(171),r=n(105),o=n(124),a=n(174),l=n(175),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=r(t),h=!n&&s(t),u=!n&&!h&&o(t),d=!n&&!h&&!u&&l(t),p=n||h||u||d,_=p?i(t.length,String):[],m=_.length;for(var f in t)!e&&!c.call(t,f)||p&&(\\\\\\\"length\\\\\\\"==f||u&&(\\\\\\\"offset\\\\\\\"==f||\\\\\\\"parent\\\\\\\"==f)||d&&(\\\\\\\"buffer\\\\\\\"==f||\\\\\\\"byteLength\\\\\\\"==f||\\\\\\\"byteOffset\\\\\\\"==f)||a(f,m))||_.push(f);return _}},function(t,e,n){(function(t){var i=n(68),s=n(173),r=e&&!e.nodeType&&e,o=r&&\\\\\\\"object\\\\\\\"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===r?i.Buffer:void 0,l=(a?a.isBuffer:void 0)||s;t.exports=l}).call(this,n(106)(t))},function(t,e){t.exports=function(t){return\\\\\\\"number\\\\\\\"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var i=n(118),s=n(125);t.exports=function(t){return null!=t&&s(t.length)&&!i(t)}},function(t,e){t.exports=function(){return[]}},function(t,e,n){var i=n(130),s=n(131),r=n(111),o=n(128),a=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)i(e,r(t)),t=s(t);return e}:o;t.exports=a},function(t,e){t.exports=function(t,e){for(var n=-1,i=e.length,s=t.length;++n<i;)t[s+n]=e[n];return t}},function(t,e,n){var i=n(126)(Object.getPrototypeOf,Object);t.exports=i},function(t,e,n){var i=n(130),s=n(105);t.exports=function(t,e,n){var r=e(t);return s(t)?r:i(r,n(t))}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.loop=e.conditional=e.parse=void 0;e.parse=function t(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i;if(Array.isArray(n))n.forEach((function(n){return t(e,n,i,s)}));else if(\\\\\\\"function\\\\\\\"==typeof n)n(e,i,s,t);else{var r=Object.keys(n)[0];Array.isArray(n[r])?(s[r]={},t(e,n[r],i,s[r])):s[r]=n[r](e,i,s,t)}return i};e.conditional=function(t,e){return function(n,i,s,r){e(n,i,s)&&r(n,t,i,s)}};e.loop=function(t,e){return function(n,i,s,r){for(var o=[],a=n.pos;e(n,i,s);){var l={};if(r(n,t,i,l),n.pos===a)break;a=n.pos,o.push(l)}return o}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.readBits=e.readArray=e.readUnsigned=e.readString=e.peekBytes=e.readBytes=e.peekByte=e.readByte=e.buildStream=void 0;e.buildStream=function(t){return{data:t,pos:0}};var i=function(){return function(t){return t.data[t.pos++]}};e.readByte=i;e.peekByte=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return function(e){return e.data[e.pos+t]}};var s=function(t){return function(e){return e.data.subarray(e.pos,e.pos+=t)}};e.readBytes=s;e.peekBytes=function(t){return function(e){return e.data.subarray(e.pos,e.pos+t)}};e.readString=function(t){return function(e){return Array.from(s(t)(e)).map((function(t){return String.fromCharCode(t)})).join(\\\\\\\"\\\\\\\")}};e.readUnsigned=function(t){return function(e){var n=s(2)(e);return t?(n[1]<<8)+n[0]:(n[0]<<8)+n[1]}};e.readArray=function(t,e){return function(n,i,r){for(var o=\\\\\\\"function\\\\\\\"==typeof e?e(n,i,r):e,a=s(t),l=new Array(o),c=0;c<o;c++)l[c]=a(n);return l}};e.readBits=function(t){return function(e){for(var n=function(t){return t.data[t.pos++]}(e),i=new Array(8),s=0;s<8;s++)i[7-s]=!!(n&1<<s);return Object.keys(t).reduce((function(e,n){var s=t[n];return s.length?e[n]=function(t,e,n){for(var i=0,s=0;s<n;s++)i+=t[e+s]&&Math.pow(2,n-s-1);return i}(i,s.index,s.length):e[n]=i[s.index],e}),{})}}},function(t,e,n){var i=n(116);t.exports=function(t){return i(t,5)}},function(t,e,n){var i=n(116);t.exports=function(t){return i(t,4)}},function(t,e,n){var i=n(95),s=n(143),r=n(144),o=n(145),a=n(146),l=n(147);function c(t){var e=this.__data__=new i(t);this.size=e.size}c.prototype.clear=s,c.prototype.delete=r,c.prototype.get=o,c.prototype.has=a,c.prototype.set=l,t.exports=c},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var i=n(96),s=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=i(e,t);return!(n<0)&&(n==e.length-1?e.pop():s.call(e,n,1),--this.size,!0)}},function(t,e,n){var i=n(96);t.exports=function(t){var e=this.__data__,n=i(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var i=n(96);t.exports=function(t){return i(this.__data__,t)>-1}},function(t,e,n){var i=n(96);t.exports=function(t,e){var n=this.__data__,s=i(n,t);return s<0?(++this.size,n.push([t,e])):n[s][1]=e,this}},function(t,e,n){var i=n(95);t.exports=function(){this.__data__=new i,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var i=n(95),s=n(102),r=n(154);t.exports=function(t,e){var n=this.__data__;if(n instanceof i){var o=n.__data__;if(!s||o.length<199)return o.push([t,e]),this.size=++n.size,this;n=this.__data__=new r(o)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var i=n(118),s=n(151),r=n(88),o=n(120),a=/^\\\\[object .+?Constructor\\\\]$/,l=Function.prototype,c=Object.prototype,h=l.toString,u=c.hasOwnProperty,d=RegExp(\\\\\\\"^\\\\\\\"+h.call(u).replace(/[\\\\\\\\^$.*+?()[\\\\]{}|]/g,\\\\\\\"\\\\\\\\$&\\\\\\\").replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g,\\\\\\\"$1.*?\\\\\\\")+\\\\\\\"$\\\\\\\");t.exports=function(t){return!(!r(t)||s(t))&&(i(t)?d:a).test(o(t))}},function(t,e,n){var i=n(103),s=Object.prototype,r=s.hasOwnProperty,o=s.toString,a=i?i.toStringTag:void 0;t.exports=function(t){var e=r.call(t,a),n=t[a];try{t[a]=void 0;var i=!0}catch(t){}var s=o.call(t);return i&&(e?t[a]=n:delete t[a]),s}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var i,s=n(152),r=(i=/[^.]+$/.exec(s&&s.keys&&s.keys.IE_PROTO||\\\\\\\"\\\\\\\"))?\\\\\\\"Symbol(src)_1.\\\\\\\"+i:\\\\\\\"\\\\\\\";t.exports=function(t){return!!r&&r in t}},function(t,e,n){var i=n(68)[\\\\\\\"__core-js_shared__\\\\\\\"];t.exports=i},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var i=n(155),s=n(162),r=n(164),o=n(165),a=n(166);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}l.prototype.clear=i,l.prototype.delete=s,l.prototype.get=r,l.prototype.has=o,l.prototype.set=a,t.exports=l},function(t,e,n){var i=n(156),s=n(95),r=n(102);t.exports=function(){this.size=0,this.__data__={hash:new i,map:new(r||s),string:new i}}},function(t,e,n){var i=n(157),s=n(158),r=n(159),o=n(160),a=n(161);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}l.prototype.clear=i,l.prototype.delete=s,l.prototype.get=r,l.prototype.has=o,l.prototype.set=a,t.exports=l},function(t,e,n){var i=n(99);t.exports=function(){this.__data__=i?i(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var i=n(99),s=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(i){var n=e[t];return\\\\\\\"__lodash_hash_undefined__\\\\\\\"===n?void 0:n}return s.call(e,t)?e[t]:void 0}},function(t,e,n){var i=n(99),s=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return i?void 0!==e[t]:s.call(e,t)}},function(t,e,n){var i=n(99);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=i&&void 0===e?\\\\\\\"__lodash_hash_undefined__\\\\\\\":e,this}},function(t,e,n){var i=n(100);t.exports=function(t){var e=i(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return\\\\\\\"string\\\\\\\"==e||\\\\\\\"number\\\\\\\"==e||\\\\\\\"symbol\\\\\\\"==e||\\\\\\\"boolean\\\\\\\"==e?\\\\\\\"__proto__\\\\\\\"!==t:null===t}},function(t,e,n){var i=n(100);t.exports=function(t){return i(this,t).get(t)}},function(t,e,n){var i=n(100);t.exports=function(t){return i(this,t).has(t)}},function(t,e,n){var i=n(100);t.exports=function(t,e){var n=i(this,t),s=n.size;return n.set(t,e),this.size+=n.size==s?0:1,this}},function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length;++n<i&&!1!==e(t[n],n,t););return t}},function(t,e,n){var i=n(84),s=function(){try{var t=i(Object,\\\\\\\"defineProperty\\\\\\\");return t({},\\\\\\\"\\\\\\\",{}),t}catch(t){}}();t.exports=s},function(t,e,n){var i=n(101),s=n(104);t.exports=function(t,e){return t&&i(e,s(e),t)}},function(t,e){t.exports=function(t,e){for(var n=-1,i=Array(t);++n<t;)i[n]=e(n);return i}},function(t,e,n){var i=n(172),s=n(89),r=Object.prototype,o=r.hasOwnProperty,a=r.propertyIsEnumerable,l=i(function(){return arguments}())?i:function(t){return s(t)&&o.call(t,\\\\\\\"callee\\\\\\\")&&!a.call(t,\\\\\\\"callee\\\\\\\")};t.exports=l},function(t,e,n){var i=n(97),s=n(89);t.exports=function(t){return s(t)&&\\\\\\\"[object Arguments]\\\\\\\"==i(t)}},function(t,e){t.exports=function(){return!1}},function(t,e){var n=/^(?:0|[1-9]\\\\d*)$/;t.exports=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&(\\\\\\\"number\\\\\\\"==i||\\\\\\\"symbol\\\\\\\"!=i&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var i=n(176),s=n(107),r=n(108),o=r&&r.isTypedArray,a=o?s(o):i;t.exports=a},function(t,e,n){var i=n(97),s=n(125),r=n(89),o={};o[\\\\\\\"[object Float32Array]\\\\\\\"]=o[\\\\\\\"[object Float64Array]\\\\\\\"]=o[\\\\\\\"[object Int8Array]\\\\\\\"]=o[\\\\\\\"[object Int16Array]\\\\\\\"]=o[\\\\\\\"[object Int32Array]\\\\\\\"]=o[\\\\\\\"[object Uint8Array]\\\\\\\"]=o[\\\\\\\"[object Uint8ClampedArray]\\\\\\\"]=o[\\\\\\\"[object Uint16Array]\\\\\\\"]=o[\\\\\\\"[object Uint32Array]\\\\\\\"]=!0,o[\\\\\\\"[object Arguments]\\\\\\\"]=o[\\\\\\\"[object Array]\\\\\\\"]=o[\\\\\\\"[object ArrayBuffer]\\\\\\\"]=o[\\\\\\\"[object Boolean]\\\\\\\"]=o[\\\\\\\"[object DataView]\\\\\\\"]=o[\\\\\\\"[object Date]\\\\\\\"]=o[\\\\\\\"[object Error]\\\\\\\"]=o[\\\\\\\"[object Function]\\\\\\\"]=o[\\\\\\\"[object Map]\\\\\\\"]=o[\\\\\\\"[object Number]\\\\\\\"]=o[\\\\\\\"[object Object]\\\\\\\"]=o[\\\\\\\"[object RegExp]\\\\\\\"]=o[\\\\\\\"[object Set]\\\\\\\"]=o[\\\\\\\"[object String]\\\\\\\"]=o[\\\\\\\"[object WeakMap]\\\\\\\"]=!1,t.exports=function(t){return r(t)&&s(t.length)&&!!o[i(t)]}},function(t,e,n){var i=n(109),s=n(178),r=Object.prototype.hasOwnProperty;t.exports=function(t){if(!i(t))return s(t);var e=[];for(var n in Object(t))r.call(t,n)&&\\\\\\\"constructor\\\\\\\"!=n&&e.push(n);return e}},function(t,e,n){var i=n(126)(Object.keys,Object);t.exports=i},function(t,e,n){var i=n(101),s=n(110);t.exports=function(t,e){return t&&i(e,s(e),t)}},function(t,e,n){var i=n(88),s=n(109),r=n(181),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!i(t))return r(t);var e=s(t),n=[];for(var a in t)(\\\\\\\"constructor\\\\\\\"!=a||!e&&o.call(t,a))&&n.push(a);return n}},function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},function(t,e,n){(function(t){var i=n(68),s=e&&!e.nodeType&&e,r=s&&\\\\\\\"object\\\\\\\"==typeof t&&t&&!t.nodeType&&t,o=r&&r.exports===s?i.Buffer:void 0,a=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,i=a?a(n):new t.constructor(n);return t.copy(i),i}}).call(this,n(106)(t))},function(t,e){t.exports=function(t,e){var n=-1,i=t.length;for(e||(e=Array(i));++n<i;)e[n]=t[n];return e}},function(t,e,n){var i=n(101),s=n(111);t.exports=function(t,e){return i(t,s(t),e)}},function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length,s=0,r=[];++n<i;){var o=t[n];e(o,n,t)&&(r[s++]=o)}return r}},function(t,e,n){var i=n(101),s=n(129);t.exports=function(t,e){return i(t,s(t),e)}},function(t,e,n){var i=n(132),s=n(111),r=n(104);t.exports=function(t){return i(t,r,s)}},function(t,e,n){var i=n(132),s=n(129),r=n(110);t.exports=function(t){return i(t,r,s)}},function(t,e,n){var i=n(84)(n(68),\\\\\\\"DataView\\\\\\\");t.exports=i},function(t,e,n){var i=n(84)(n(68),\\\\\\\"Promise\\\\\\\");t.exports=i},function(t,e,n){var i=n(84)(n(68),\\\\\\\"Set\\\\\\\");t.exports=i},function(t,e,n){var i=n(84)(n(68),\\\\\\\"WeakMap\\\\\\\");t.exports=i},function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,i=new t.constructor(e);return e&&\\\\\\\"string\\\\\\\"==typeof t[0]&&n.call(t,\\\\\\\"index\\\\\\\")&&(i.index=t.index,i.input=t.input),i}},function(t,e,n){var i=n(113),s=n(196),r=n(197),o=n(198),a=n(199);t.exports=function(t,e,n){var l=t.constructor;switch(e){case\\\\\\\"[object ArrayBuffer]\\\\\\\":return i(t);case\\\\\\\"[object Boolean]\\\\\\\":case\\\\\\\"[object Date]\\\\\\\":return new l(+t);case\\\\\\\"[object DataView]\\\\\\\":return s(t,n);case\\\\\\\"[object Float32Array]\\\\\\\":case\\\\\\\"[object Float64Array]\\\\\\\":case\\\\\\\"[object Int8Array]\\\\\\\":case\\\\\\\"[object Int16Array]\\\\\\\":case\\\\\\\"[object Int32Array]\\\\\\\":case\\\\\\\"[object Uint8Array]\\\\\\\":case\\\\\\\"[object Uint8ClampedArray]\\\\\\\":case\\\\\\\"[object Uint16Array]\\\\\\\":case\\\\\\\"[object Uint32Array]\\\\\\\":return a(t,n);case\\\\\\\"[object Map]\\\\\\\":return new l;case\\\\\\\"[object Number]\\\\\\\":case\\\\\\\"[object String]\\\\\\\":return new l(t);case\\\\\\\"[object RegExp]\\\\\\\":return r(t);case\\\\\\\"[object Set]\\\\\\\":return new l;case\\\\\\\"[object Symbol]\\\\\\\":return o(t)}}},function(t,e,n){var i=n(68).Uint8Array;t.exports=i},function(t,e,n){var i=n(113);t.exports=function(t,e){var n=e?i(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},function(t,e){var n=/\\\\w*$/;t.exports=function(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}},function(t,e,n){var i=n(103),s=i?i.prototype:void 0,r=s?s.valueOf:void 0;t.exports=function(t){return r?Object(r.call(t)):{}}},function(t,e,n){var i=n(113);t.exports=function(t,e){var n=e?i(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},function(t,e,n){var i=n(201),s=n(131),r=n(109);t.exports=function(t){return\\\\\\\"function\\\\\\\"!=typeof t.constructor||r(t)?{}:i(s(t))}},function(t,e,n){var i=n(88),s=Object.create,r=function(){function t(){}return function(e){if(!i(e))return{};if(s)return s(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=r},function(t,e,n){var i=n(203),s=n(107),r=n(108),o=r&&r.isMap,a=o?s(o):i;t.exports=a},function(t,e,n){var i=n(112),s=n(89);t.exports=function(t){return s(t)&&\\\\\\\"[object Map]\\\\\\\"==i(t)}},function(t,e,n){var i=n(205),s=n(107),r=n(108),o=r&&r.isSet,a=o?s(o):i;t.exports=a},function(t,e,n){var i=n(112),s=n(89);t.exports=function(t){return s(t)&&\\\\\\\"[object Set]\\\\\\\"==i(t)}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.default=void 0;var i=n(133),s=n(134),r={blocks:function(t){for(var e=[],n=t.data.length,i=0,r=(0,s.readByte)()(t);0!==r&&r;r=(0,s.readByte)()(t)){if(t.pos+r>=n){var o=n-t.pos;e.push((0,s.readBytes)(o)(t)),i+=o;break}e.push((0,s.readBytes)(r)(t)),i+=r}for(var a=new Uint8Array(i),l=0,c=0;c<e.length;c++)a.set(e[c],l),l+=e[c].length;return a}},o=(0,i.conditional)({gce:[{codes:(0,s.readBytes)(2)},{byteSize:(0,s.readByte)()},{extras:(0,s.readBits)({future:{index:0,length:3},disposal:{index:3,length:3},userInput:{index:6},transparentColorGiven:{index:7}})},{delay:(0,s.readUnsigned)(!0)},{transparentColorIndex:(0,s.readByte)()},{terminator:(0,s.readByte)()}]},(function(t){var e=(0,s.peekBytes)(2)(t);return 33===e[0]&&249===e[1]})),a=(0,i.conditional)({image:[{code:(0,s.readByte)()},{descriptor:[{left:(0,s.readUnsigned)(!0)},{top:(0,s.readUnsigned)(!0)},{width:(0,s.readUnsigned)(!0)},{height:(0,s.readUnsigned)(!0)},{lct:(0,s.readBits)({exists:{index:0},interlaced:{index:1},sort:{index:2},future:{index:3,length:2},size:{index:5,length:3}})}]},(0,i.conditional)({lct:(0,s.readArray)(3,(function(t,e,n){return Math.pow(2,n.descriptor.lct.size+1)}))},(function(t,e,n){return n.descriptor.lct.exists})),{data:[{minCodeSize:(0,s.readByte)()},r]}]},(function(t){return 44===(0,s.peekByte)()(t)})),l=(0,i.conditional)({text:[{codes:(0,s.readBytes)(2)},{blockSize:(0,s.readByte)()},{preData:function(t,e,n){return(0,s.readBytes)(n.text.blockSize)(t)}},r]},(function(t){var e=(0,s.peekBytes)(2)(t);return 33===e[0]&&1===e[1]})),c=(0,i.conditional)({application:[{codes:(0,s.readBytes)(2)},{blockSize:(0,s.readByte)()},{id:function(t,e,n){return(0,s.readString)(n.blockSize)(t)}},r]},(function(t){var e=(0,s.peekBytes)(2)(t);return 33===e[0]&&255===e[1]})),h=(0,i.conditional)({comment:[{codes:(0,s.readBytes)(2)},r]},(function(t){var e=(0,s.peekBytes)(2)(t);return 33===e[0]&&254===e[1]})),u=[{header:[{signature:(0,s.readString)(3)},{version:(0,s.readString)(3)}]},{lsd:[{width:(0,s.readUnsigned)(!0)},{height:(0,s.readUnsigned)(!0)},{gct:(0,s.readBits)({exists:{index:0},resolution:{index:1,length:3},sort:{index:4},size:{index:5,length:3}})},{backgroundColorIndex:(0,s.readByte)()},{pixelAspectRatio:(0,s.readByte)()}]},(0,i.conditional)({gct:(0,s.readArray)(3,(function(t,e){return Math.pow(2,e.lsd.gct.size+1)}))},(function(t,e){return e.lsd.gct.exists})),{frames:(0,i.loop)([o,c,h,a,l],(function(t){var e=(0,s.peekByte)()(t);return 33===e||44===e}))}];e.default=u},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.deinterlace=void 0;e.deinterlace=function(t,e){for(var n=new Array(t.length),i=t.length/e,s=function(i,s){var r=t.slice(s*e,(s+1)*e);n.splice.apply(n,[i*e,e].concat(r))},r=[0,4,2,1],o=[8,8,4,2],a=0,l=0;l<4;l++)for(var c=r[l];c<i;c+=o[l])s(c,a),a++;return n}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.lzw=void 0;e.lzw=function(t,e,n){var i,s,r,o,a,l,c,h,u,d,p,_,m,f,g,v,y=4096,x=n,b=new Array(n),w=new Array(y),T=new Array(y),A=new Array(4097);for(a=(s=1<<(d=t))+1,i=s+2,c=-1,r=(1<<(o=d+1))-1,h=0;h<s;h++)w[h]=0,T[h]=h;for(p=_=m=f=g=v=0,u=0;u<x;){if(0===f){if(_<o){p+=e[v]<<_,_+=8,v++;continue}if(h=p&r,p>>=o,_-=o,h>i||h==a)break;if(h==s){r=(1<<(o=d+1))-1,i=s+2,c=-1;continue}if(-1==c){A[f++]=T[h],c=h,m=h;continue}for(l=h,h==i&&(A[f++]=m,h=c);h>s;)A[f++]=T[h],h=w[h];m=255&T[h],A[f++]=m,i<y&&(w[i]=c,T[i]=m,0==(++i&r)&&i<y&&(o++,r+=i)),c=l}f--,b[g++]=A[f],u++}for(u=g;u<x;u++)b[u]=0;return b}},,,,,,,,function(t,e,n){\\\\\\\"use strict\\\\\\\";n.r(e),n.d(e,\\\\\\\"PolyScene\\\\\\\",(function(){return Fl})),n.d(e,\\\\\\\"Poly\\\\\\\",(function(){return li})),n.d(e,\\\\\\\"SceneJsonImporter\\\\\\\",(function(){return Jl})),n.d(e,\\\\\\\"SceneDataManifestImporter\\\\\\\",(function(){return Zl})),n.d(e,\\\\\\\"mountScene\\\\\\\",(function(){return Kl}));var i={};n.r(i),n.d(i,\\\\\\\"ShadowMaterial\\\\\\\",(function(){return Hf})),n.d(i,\\\\\\\"SpriteMaterial\\\\\\\",(function(){return jf})),n.d(i,\\\\\\\"RawShaderMaterial\\\\\\\",(function(){return at})),n.d(i,\\\\\\\"ShaderMaterial\\\\\\\",(function(){return F})),n.d(i,\\\\\\\"PointsMaterial\\\\\\\",(function(){return bs.a})),n.d(i,\\\\\\\"MeshPhysicalMaterial\\\\\\\",(function(){return Wf.a})),n.d(i,\\\\\\\"MeshStandardMaterial\\\\\\\",(function(){return ws.a})),n.d(i,\\\\\\\"MeshPhongMaterial\\\\\\\",(function(){return qf.a})),n.d(i,\\\\\\\"MeshToonMaterial\\\\\\\",(function(){return Xf})),n.d(i,\\\\\\\"MeshNormalMaterial\\\\\\\",(function(){return Yf})),n.d(i,\\\\\\\"MeshLambertMaterial\\\\\\\",(function(){return Ts.a})),n.d(i,\\\\\\\"MeshDepthMaterial\\\\\\\",(function(){return Sn})),n.d(i,\\\\\\\"MeshDistanceMaterial\\\\\\\",(function(){return Cn})),n.d(i,\\\\\\\"MeshBasicMaterial\\\\\\\",(function(){return lt.a})),n.d(i,\\\\\\\"MeshMatcapMaterial\\\\\\\",(function(){return $f})),n.d(i,\\\\\\\"LineDashedMaterial\\\\\\\",(function(){return Jf})),n.d(i,\\\\\\\"LineBasicMaterial\\\\\\\",(function(){return As.a})),n.d(i,\\\\\\\"Material\\\\\\\",(function(){return O.a}));var s={};n.r(s),n.d(s,\\\\\\\"BoxGeometry\\\\\\\",(function(){return N})),n.d(s,\\\\\\\"BoxBufferGeometry\\\\\\\",(function(){return N})),n.d(s,\\\\\\\"CircleGeometry\\\\\\\",(function(){return hJ})),n.d(s,\\\\\\\"CircleBufferGeometry\\\\\\\",(function(){return hJ})),n.d(s,\\\\\\\"ConeGeometry\\\\\\\",(function(){return lG})),n.d(s,\\\\\\\"ConeBufferGeometry\\\\\\\",(function(){return lG})),n.d(s,\\\\\\\"CylinderGeometry\\\\\\\",(function(){return aG})),n.d(s,\\\\\\\"CylinderBufferGeometry\\\\\\\",(function(){return aG})),n.d(s,\\\\\\\"DodecahedronGeometry\\\\\\\",(function(){return uJ})),n.d(s,\\\\\\\"DodecahedronBufferGeometry\\\\\\\",(function(){return uJ})),n.d(s,\\\\\\\"EdgesGeometry\\\\\\\",(function(){return fJ})),n.d(s,\\\\\\\"ExtrudeGeometry\\\\\\\",(function(){return yJ})),n.d(s,\\\\\\\"ExtrudeBufferGeometry\\\\\\\",(function(){return yJ})),n.d(s,\\\\\\\"IcosahedronGeometry\\\\\\\",(function(){return bJ})),n.d(s,\\\\\\\"IcosahedronBufferGeometry\\\\\\\",(function(){return bJ})),n.d(s,\\\\\\\"LatheGeometry\\\\\\\",(function(){return wJ})),n.d(s,\\\\\\\"LatheBufferGeometry\\\\\\\",(function(){return wJ})),n.d(s,\\\\\\\"OctahedronGeometry\\\\\\\",(function(){return YU})),n.d(s,\\\\\\\"OctahedronBufferGeometry\\\\\\\",(function(){return YU})),n.d(s,\\\\\\\"PlaneGeometry\\\\\\\",(function(){return L})),n.d(s,\\\\\\\"PlaneBufferGeometry\\\\\\\",(function(){return L})),n.d(s,\\\\\\\"PolyhedronGeometry\\\\\\\",(function(){return XU})),n.d(s,\\\\\\\"PolyhedronBufferGeometry\\\\\\\",(function(){return XU})),n.d(s,\\\\\\\"RingGeometry\\\\\\\",(function(){return TJ})),n.d(s,\\\\\\\"RingBufferGeometry\\\\\\\",(function(){return TJ})),n.d(s,\\\\\\\"ShapeGeometry\\\\\\\",(function(){return AJ})),n.d(s,\\\\\\\"ShapeBufferGeometry\\\\\\\",(function(){return AJ})),n.d(s,\\\\\\\"SphereGeometry\\\\\\\",(function(){return tG})),n.d(s,\\\\\\\"SphereBufferGeometry\\\\\\\",(function(){return tG})),n.d(s,\\\\\\\"TetrahedronGeometry\\\\\\\",(function(){return MJ})),n.d(s,\\\\\\\"TetrahedronBufferGeometry\\\\\\\",(function(){return MJ})),n.d(s,\\\\\\\"TorusGeometry\\\\\\\",(function(){return EJ})),n.d(s,\\\\\\\"TorusBufferGeometry\\\\\\\",(function(){return EJ})),n.d(s,\\\\\\\"TorusKnotGeometry\\\\\\\",(function(){return SJ})),n.d(s,\\\\\\\"TorusKnotBufferGeometry\\\\\\\",(function(){return SJ})),n.d(s,\\\\\\\"TubeGeometry\\\\\\\",(function(){return NJ})),n.d(s,\\\\\\\"TubeBufferGeometry\\\\\\\",(function(){return NJ})),n.d(s,\\\\\\\"WireframeGeometry\\\\\\\",(function(){return LJ}));class r{constructor(t){this.scene=t,this._mainCameraNodePath=null}setMainCameraNodePath(t){this._mainCameraNodePath=t}mainCameraNodePath(){return this._mainCameraNodePath}mainCameraNode(){if(this.mainCameraNodePath){const t=this.mainCameraNodePath();if(!t)return this._find_any_camera();return this.scene.node(t)}return console.warn(\\\\\\\"main camera node not found\\\\\\\"),this._find_any_camera()}_find_any_camera(){const t=this.scene.root();return t.nodesByType(\\\\\\\"perspectiveCamera\\\\\\\")[0]||t.nodesByType(\\\\\\\"orthographicCamera\\\\\\\")[0]}}class o{constructor(t){this._scene=t,this._queue=new Map,this._block_level=0,this._process_item_bound=this._process_item.bind(this),this._block_level=0}block(){this._block_level+=1}unblock(){this._block_level-=1,this._block_level<0&&(this._block_level=0),this.process_queue()}get blocked(){return this._block_level>0}enqueue(t,e){this._queue.set(t.graphNodeId(),e)}process_queue(){this.blocked||this._queue.forEach(this._process_item_bound)}_process_item(t,e){const n=this._scene.graph.nodeFromId(e);n&&(this._queue.delete(e),n.dirtyController.runPostDirtyHooks(t))}}class a{constructor(){this._cooking_nodes_by_id=new Map,this._resolves=[]}addNode(t){this._cooking_nodes_by_id.set(t.graphNodeId(),t)}removeNode(t){this._cooking_nodes_by_id.delete(t.graphNodeId()),0==this._cooking_nodes_by_id.size&&this.flush()}cookingNodes(){const t=[];return this._cooking_nodes_by_id.forEach(((e,n)=>{t.push(e)})),t}flush(){let t;for(;t=this._resolves.pop();)t()}async waitForCooksCompleted(){return 0==this._cooking_nodes_by_id.size?void 0:new Promise(((t,e)=>{this._resolves.push(t)}))}}class l{constructor(){this._next_id=0,this._successors=new Map,this._predecessors=new Map,this._nodes_by_id=new Map,this._nodesCount=0,this._debugging=!1,this._addedNodesDuringDebugging=new Map}startDebugging(){this._debugging=!0,console.log(\\\\\\\"CoreGraph.startDebugging\\\\\\\",this._next_id)}stopDebugging(){this._debugging=!1,console.log(\\\\\\\"CoreGraph.stopDebugging\\\\\\\",this._next_id)}printDebug(){this._addedNodesDuringDebugging.forEach(((t,e)=>{console.log(e,t,t.graphPredecessors(),t.graphSuccessors())}))}setScene(t){this._scene=t}scene(){return this._scene}nextId(){return this._next_id+=1,this._next_id}nodesFromIds(t){const e=[];for(let n of t){const t=this.nodeFromId(n);t&&e.push(t)}return e}nodeFromId(t){return this._nodes_by_id.get(t)}hasNode(t){return null!=this._nodes_by_id.get(t.graphNodeId())}addNode(t){this._nodes_by_id.set(t.graphNodeId(),t),this._nodesCount+=1,this._debugging&&this._addedNodesDuringDebugging.set(t.graphNodeId(),t)}removeNode(t){this._nodes_by_id.delete(t.graphNodeId()),this._successors.delete(t.graphNodeId()),this._predecessors.delete(t.graphNodeId()),this._nodesCount-=1,this._debugging&&this._addedNodesDuringDebugging.delete(t.graphNodeId())}nodesCount(){return this._nodesCount}connect(t,e,n=!0){const i=t.graphNodeId(),s=e.graphNodeId();if(this.hasNode(t)&&this.hasNode(e)){if(n){n=!(!this._scene||this._scene.loadingController.isLoading())}let e=!1;return n&&(e=this._hasPredecessor(i,s)),!e&&(this._createConnection(i,s),t.dirtyController.clearSuccessorsCacheWithPredecessors(),!0)}return console.warn(`attempt to connect non existing node ${i} or ${s}`),!1}disconnect(t,e){this._remove_connection(t.graphNodeId(),e.graphNodeId()),t.dirtyController.clearSuccessorsCacheWithPredecessors()}disconnectPredecessors(t){const e=this.predecessors(t);for(let n of e)this.disconnect(n,t)}disconnectSuccessors(t){const e=this.successors(t);for(let n of e)this.disconnect(t,n)}predecessorIds(t){const e=this._predecessors.get(t);if(e){const t=[];return e.forEach(((e,n)=>{t.push(n)})),t}return[]}predecessors(t){const e=this.predecessorIds(t.graphNodeId());return this.nodesFromIds(e)}successorIds(t){const e=this._successors.get(t);if(e){const t=[];return e.forEach(((e,n)=>{t.push(n)})),t}return[]}successors(t){const e=this.successorIds(t.graphNodeId())||[];return this.nodesFromIds(e)}allPredecessorIds(t){return this.allNextIds(t,\\\\\\\"predecessorIds\\\\\\\")}allSuccessorIds(t){return this.allNextIds(t,\\\\\\\"successorIds\\\\\\\")}allPredecessors(t){const e=this.allPredecessorIds(t);return this.nodesFromIds(e)}allSuccessors(t){const e=this.allSuccessorIds(t);return this.nodesFromIds(e)}_createConnection(t,e){let n=this._successors.get(t);if(n||(n=new Set,this._successors.set(t,n)),n.has(e))return;n.add(e);let i=this._predecessors.get(e);i||(i=new Set,this._predecessors.set(e,i)),i.add(t)}_remove_connection(t,e){let n=this._successors.get(t);n&&(n.delete(e),0==n.size&&this._successors.delete(t));let i=this._predecessors.get(e);i&&(i.delete(t),0==i.size&&this._predecessors.delete(e))}allNextIds(t,e){const n=new Map,i=[];let s=this[e](t.graphNodeId());for(;s.length>0;){const t=[];for(let n of s)for(let i of this[e](n))t.push(i);for(let t of s)n.set(t,!0);for(let e of t)s.push(e);s=t}return n.forEach(((t,e)=>{i.push(e)})),i}_hasPredecessor(t,e){const n=this.predecessorIds(t);if(n){if(n.includes(e))return!0;for(let t of n)return this._hasPredecessor(t,e)}return!1}}class c{constructor(t){this._node=t,this._cooks_count=0,this._total_cook_time=0,this._total_inputs_time=0,this._total_params_time=0}update_cook_data(t){this._cooks_count+=1,this._total_cook_time+=t.cookTime,this._total_inputs_time+=t.inputsTime,this._total_params_time+=t.paramsTime}total_time(){return this._total_cook_time+this._total_inputs_time+this._total_params_time}total_cook_time(){return this._total_cook_time}cook_time_per_iteration(){return this._cooks_count>0?this._total_cook_time/this._cooks_count:0}total_inputs_time(){return this._total_inputs_time}inputs_time_per_iteration(){return this._cooks_count>0?this._total_inputs_time/this._cooks_count:0}total_params_time2(){return this._total_params_time}params_time_per_iteration2(){return this._cooks_count>0?this._total_params_time/this._cooks_count:0}cooks_count(){return this._cooks_count}print_object(){return{fullPath:this._node.path(),cooks_count:this.cooks_count(),total_time:this.total_time(),total_cook_time:this.total_cook_time(),cook_time_per_iteration:this.cook_time_per_iteration(),inputs_time_per_iteration:this.inputs_time_per_iteration(),params_time_per_iteration:this.params_time_per_iteration2()}}}class h{static arrayFromValues(t){const e=[];return t.forEach((t=>{e.push(t)})),e}static pushOnArrayAtEntry(t,e,n){t.has(e)?t.get(e).push(n):t.set(e,[n])}static addToSetAtEntry(t,e,n){if(t.has(e))t.get(e).add(n);else{const i=new Set;i.add(n),t.set(e,i)}}static popFromArrayAtEntry(t,e,n){if(t.has(e)){const i=t.get(e),s=i.indexOf(n);s>=0&&i.splice(s,1)}}static removeFromSetAtEntry(t,e,n){if(t.has(e)){const i=t.get(e);i.delete(n),0==i.size&&t.delete(e)}}static unshiftOnArrayAtEntry(t,e,n){t.has(e)?t.get(e).unshift(n):t.set(e,[n])}static concatOnArrayAtEntry(t,e,n){if(t.has(e)){let i=t.get(e);for(let t of n)i.push(t)}else t.set(e,n)}}class u{static toArray(t){const e=[];return t.forEach((t=>{e.push(t)})),e}static union(t,e){const n=new Set;return t.forEach((t=>n.add(t))),e.forEach((t=>n.add(t))),n}static intersection(t,e){const n=new Set;return t.forEach((t=>{e.has(t)&&n.add(t)})),e.forEach((e=>{t.has(e)&&n.add(e)})),n}static difference(t,e){const n=new Set;return t.forEach((t=>{e.has(t)||n.add(t)})),e.forEach((e=>{t.has(e)||n.add(e)})),n}}var d=n(2),p=n(0),_=n(9);class m{static isNumber(t){return\\\\\\\"number\\\\\\\"==typeof t}static isVector(t){return t instanceof d.a||t instanceof p.a||t instanceof _.a}static isString(t){return\\\\\\\"string\\\\\\\"==typeof t}static isBoolean(t){return!0===t||!1===t}static isNaN(t){return isNaN(t)}static isArray(t){return Array.isArray(t)}static isObject(t){var e=typeof t;return null!=t&&(\\\\\\\"object\\\\\\\"==e||\\\\\\\"function\\\\\\\"==e)}}class f{static shallowClone(t){return[...t]}static min(t){let e=t[0];for(let n of t)n<e&&(e=n);return e}static max(t){let e=t[0];for(let n of t)n>e&&(e=n);return e}static sum(t){let e=0;for(let n of t)e+=n;return e}static compact(t){const e=[];for(let n of t)null!=n&&e.push(n);return e}static uniq(t){const e=new Set;for(let n of t)e.add(n);const n=new Array(e.size);let i=0;return e.forEach((t=>{n[i]=t,i++})),n}static chunk(t,e){const n=[];let i=[];n.push(i);for(let s=0;s<t.length;s++)i.length==e&&(i=[],n.push(i)),i.push(t[s]);return n}static union(t,e){const n=[];return u.union(this.toSet(t),this.toSet(e)).forEach((t=>n.push(t))),n}static intersection(t,e){const n=[];return u.intersection(this.toSet(t),this.toSet(e)).forEach((t=>n.push(t))),n}static difference(t,e){const n=[];return u.difference(this.toSet(t),this.toSet(e)).forEach((t=>n.push(t))),n}static toSet(t){const e=new Set;for(let n of t)e.add(n);return e}static isEqual(t,e){if(t.length!=e.length)return!1;const n=t.length;for(let i=0;i<n;i++)if(t[i]!=e[i])return!1;return!0}static sortBy(t,e){if(0==t.length)return[];const n=new Map,i=new Set;for(let s of t){const t=e(s);i.add(t),h.pushOnArrayAtEntry(n,t,s)}const s=new Array(i.size);let r=0;i.forEach((t=>{s[r]=t,r++})),m.isString(s[0])?s.sort():s.sort(((t,e)=>t-e));const o=new Array(t.length);r=0;for(let t of s){const e=n.get(t);if(e)for(let t of e)o[r]=t,r++}return o}static range(t,e,n=1){null==e&&(e=t,t=0);const i=Math.floor((e-t)/n),s=new Array(i);for(let e=0;e<s.length;e++)s[e]=t+e*n;return s}}var g=n(135),v=n.n(g),y=n(136),x=n.n(y);class b{static isEqual(t,e){if(m.isObject(t)&&m.isObject(e)){const n=Object.keys(t),i=Object.keys(e);return!!f.isEqual(n,i)&&JSON.stringify(t)==JSON.stringify(e)}return!1}static merge(t,e){return Object.assign(t,e)}static clone(t){return x()(t)}static cloneDeep(t){return v()(t)}}var w=n(1),T=n(60),A=n(5);function M(){let t=null,e=!1,n=null,i=null;function s(e,r){n(e,r),i=t.requestAnimationFrame(s)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(s),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function E(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,s){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version<e.version)&&i.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute&&(e=e.data);const r=i.get(e);void 0===r?i.set(e,function(e,i){const s=e.array,r=e.usage,o=t.createBuffer();t.bindBuffer(i,o),t.bufferData(i,s,r),e.onUploadCallback();let a=t.FLOAT;return s instanceof Float32Array?a=t.FLOAT:s instanceof Float64Array?console.warn(\\\\\\\"THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.\\\\\\\"):s instanceof Uint16Array?e.isFloat16BufferAttribute?n?a=t.HALF_FLOAT:console.warn(\\\\\\\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\\\\\\\"):a=t.UNSIGNED_SHORT:s instanceof Int16Array?a=t.SHORT:s instanceof Uint32Array?a=t.UNSIGNED_INT:s instanceof Int32Array?a=t.INT:s instanceof Int8Array?a=t.BYTE:(s instanceof Uint8Array||s instanceof Uint8ClampedArray)&&(a=t.UNSIGNED_BYTE),{buffer:o,type:a,bytesPerElement:s.BYTES_PER_ELEMENT,version:e.version}}(e,s)):r.version<e.version&&(!function(e,i,s){const r=i.array,o=i.updateRange;t.bindBuffer(s,e),-1===o.count?t.bufferSubData(s,0,r):(n?t.bufferSubData(s,o.offset*r.BYTES_PER_ELEMENT,r,o.offset,o.count):t.bufferSubData(s,o.offset*r.BYTES_PER_ELEMENT,r.subarray(o.offset,o.offset+o.count)),o.count=-1)}(r.buffer,e,s),r.version=e.version)}}}var S=n(7),C=n(4);class N extends S.a{constructor(t=1,e=1,n=1,i=1,s=1,r=1){super(),this.type=\\\\\\\"BoxGeometry\\\\\\\",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:s,depthSegments:r};const o=this;i=Math.floor(i),s=Math.floor(s),r=Math.floor(r);const a=[],l=[],c=[],h=[];let u=0,d=0;function _(t,e,n,i,s,r,_,m,f,g,v){const y=r/f,x=_/g,b=r/2,w=_/2,T=m/2,A=f+1,M=g+1;let E=0,S=0;const C=new p.a;for(let r=0;r<M;r++){const o=r*x-w;for(let a=0;a<A;a++){const u=a*y-b;C[t]=u*i,C[e]=o*s,C[n]=T,l.push(C.x,C.y,C.z),C[t]=0,C[e]=0,C[n]=m>0?1:-1,c.push(C.x,C.y,C.z),h.push(a/f),h.push(1-r/g),E+=1}}for(let t=0;t<g;t++)for(let e=0;e<f;e++){const n=u+e+A*t,i=u+e+A*(t+1),s=u+(e+1)+A*(t+1),r=u+(e+1)+A*t;a.push(n,i,r),a.push(i,s,r),S+=6}o.addGroup(d,S,v),d+=S,u+=E}_(\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",-1,-1,n,e,t,r,s,0),_(\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",1,-1,n,e,-t,r,s,1),_(\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",1,1,t,n,e,i,r,2),_(\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",1,-1,t,n,-e,i,r,3),_(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",1,-1,t,e,n,i,s,4),_(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",-1,-1,t,e,-n,i,s,5),this.setIndex(a),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(l,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(c,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(h,2))}static fromJSON(t){return new N(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}class L extends S.a{constructor(t=1,e=1,n=1,i=1){super(),this.type=\\\\\\\"PlaneGeometry\\\\\\\",this.parameters={width:t,height:e,widthSegments:n,heightSegments:i};const s=t/2,r=e/2,o=Math.floor(n),a=Math.floor(i),l=o+1,c=a+1,h=t/o,u=e/a,d=[],p=[],_=[],m=[];for(let t=0;t<c;t++){const e=t*u-r;for(let n=0;n<l;n++){const i=n*h-s;p.push(i,-e,0),_.push(0,0,1),m.push(n/o),m.push(1-t/a)}}for(let t=0;t<a;t++)for(let e=0;e<o;e++){const n=e+l*t,i=e+l*(t+1),s=e+1+l*(t+1),r=e+1+l*t;d.push(n,i,r),d.push(i,s,r)}this.setIndex(d),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(p,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(_,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(m,2))}static fromJSON(t){return new L(t.width,t.height,t.widthSegments,t.heightSegments)}}var O=n(12);function P(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const s=t[n][i];s&&(s.isColor||s.isMatrix3||s.isMatrix4||s.isVector2||s.isVector3||s.isVector4||s.isTexture||s.isQuaternion)?e[n][i]=s.clone():Array.isArray(s)?e[n][i]=s.slice():e[n][i]=s}}return e}function R(t){const e={};for(let n=0;n<t.length;n++){const i=P(t[n]);for(const t in i)e[t]=i[t]}return e}const I={clone:P,merge:R};class F extends O.a{constructor(t){super(),this.type=\\\\\\\"ShaderMaterial\\\\\\\",this.defines={},this.uniforms={},this.vertexShader=\\\\\\\"\\\\nvoid main() {\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n}\\\\n\\\\\\\",this.fragmentShader=\\\\\\\"\\\\nvoid main() {\\\\n\\\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\\\n}\\\\n\\\\\\\",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==t&&(void 0!==t.attributes&&console.error(\\\\\\\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\\\\\\\"),this.setValues(t))}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=P(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const i=this.uniforms[n].value;i&&i.isTexture?e.uniforms[n]={type:\\\\\\\"t\\\\\\\",value:i.toJSON(t).uuid}:i&&i.isColor?e.uniforms[n]={type:\\\\\\\"c\\\\\\\",value:i.getHex()}:i&&i.isVector2?e.uniforms[n]={type:\\\\\\\"v2\\\\\\\",value:i.toArray()}:i&&i.isVector3?e.uniforms[n]={type:\\\\\\\"v3\\\\\\\",value:i.toArray()}:i&&i.isVector4?e.uniforms[n]={type:\\\\\\\"v4\\\\\\\",value:i.toArray()}:i&&i.isMatrix3?e.uniforms[n]={type:\\\\\\\"m3\\\\\\\",value:i.toArray()}:i&&i.isMatrix4?e.uniforms[n]={type:\\\\\\\"m4\\\\\\\",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}F.prototype.isShaderMaterial=!0;var D=n(6),B=n(14),z=\\\\\\\"\\\\n#ifdef USE_SHADOWMAP\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct DirectionalLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct SpotLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct PointLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraNear;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraFar;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t/*\\\\n\\\\t#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\t\\\\t// TODO (abelnation): create uniforms for area light shadows\\\\n\\\\n\\\\t#endif\\\\n\\\\t*/\\\\n\\\\n\\\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\\\n\\\\n\\\\t\\\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\\\n\\\\n\\\\t\\\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\\\n\\\\n\\\\t\\\\tfloat occlusion = 1.0;\\\\n\\\\n\\\\t\\\\tvec2 distribution = texture2DDistribution( shadow, uv );\\\\n\\\\n\\\\t\\\\tfloat hard_shadow = step( compare , distribution.x ); // Hard Shadow\\\\n\\\\n\\\\t\\\\tif (hard_shadow != 1.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat distance = compare - distribution.x ;\\\\n\\\\t\\\\t\\\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\\\n\\\\t\\\\t\\\\tfloat softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality\\\\n\\\\t\\\\t\\\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed\\\\n\\\\t\\\\t\\\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn occlusion;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\\\n\\\\n\\\\t\\\\tfloat shadow = 1.0;\\\\n\\\\n\\\\t\\\\tshadowCoord.xyz /= shadowCoord.w;\\\\n\\\\t\\\\tshadowCoord.z += shadowBias;\\\\n\\\\n\\\\t\\\\t// if ( something && something ) breaks ATI OpenGL shader compiler\\\\n\\\\t\\\\t// if ( all( something, something ) ) using this instead\\\\n\\\\n\\\\t\\\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\\\n\\\\t\\\\tbool inFrustum = all( inFrustumVec );\\\\n\\\\n\\\\t\\\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\\\n\\\\n\\\\t\\\\tbool frustumTest = all( frustumTestVec );\\\\n\\\\n\\\\t\\\\tif ( frustumTest ) {\\\\n\\\\n\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF )\\\\n\\\\n\\\\t\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\\\n\\\\n\\\\t\\\\t\\\\tfloat dx0 = - texelSize.x * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dy0 = - texelSize.y * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dx1 = + texelSize.x * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dy1 = + texelSize.y * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dx2 = dx0 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dy2 = dy0 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dx3 = dx1 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dy3 = dy1 / 2.0;\\\\n\\\\n\\\\t\\\\t\\\\tshadow = (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 17.0 );\\\\n\\\\n\\\\t\\\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\\\n\\\\n\\\\t\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat dx = texelSize.x;\\\\n\\\\t\\\\t\\\\tfloat dy = texelSize.y;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 uv = shadowCoord.xy;\\\\n\\\\t\\\\t\\\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\\\n\\\\t\\\\t\\\\tuv -= f * texelSize;\\\\n\\\\n\\\\t\\\\t\\\\tshadow = (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.x ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.x ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  f.x ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  f.x ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 9.0 );\\\\n\\\\n\\\\t\\\\t#elif defined( SHADOWMAP_TYPE_VSM )\\\\n\\\\n\\\\t\\\\t\\\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\\\n\\\\n\\\\t\\\\t#else // no percentage-closer filtering:\\\\n\\\\n\\\\t\\\\t\\\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn shadow;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\t// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D\\\\n\\\\t// vector suitable for 2D texture mapping. This code uses the following layout for the\\\\n\\\\t// 2D texture:\\\\n\\\\t//\\\\n\\\\t// xzXZ\\\\n\\\\t//  y Y\\\\n\\\\t//\\\\n\\\\t// Y - Positive y direction\\\\n\\\\t// y - Negative y direction\\\\n\\\\t// X - Positive x direction\\\\n\\\\t// x - Negative x direction\\\\n\\\\t// Z - Positive z direction\\\\n\\\\t// z - Negative z direction\\\\n\\\\t//\\\\n\\\\t// Source and test bed:\\\\n\\\\t// https://gist.github.com/tschw/da10c43c467ce8afd0c4\\\\n\\\\n\\\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\\\n\\\\n\\\\t\\\\t// Number of texels to avoid at the edge of each square\\\\n\\\\n\\\\t\\\\tvec3 absV = abs( v );\\\\n\\\\n\\\\t\\\\t// Intersect unit cube\\\\n\\\\n\\\\t\\\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\\\n\\\\t\\\\tabsV *= scaleToCube;\\\\n\\\\n\\\\t\\\\t// Apply scale to avoid seams\\\\n\\\\n\\\\t\\\\t// two texels less per square (one texel will do for NEAREST)\\\\n\\\\t\\\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\\\n\\\\n\\\\t\\\\t// Unwrap\\\\n\\\\n\\\\t\\\\t// space: -1 ... 1 range for each square\\\\n\\\\t\\\\t//\\\\n\\\\t\\\\t// #X##\\\\t\\\\tdim    := ( 4 , 2 )\\\\n\\\\t\\\\t//  # #\\\\t\\\\tcenter := ( 1 , 1 )\\\\n\\\\n\\\\t\\\\tvec2 planar = v.xy;\\\\n\\\\n\\\\t\\\\tfloat almostATexel = 1.5 * texelSizeY;\\\\n\\\\t\\\\tfloat almostOne = 1.0 - almostATexel;\\\\n\\\\n\\\\t\\\\tif ( absV.z >= almostOne ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( v.z > 0.0 )\\\\n\\\\t\\\\t\\\\t\\\\tplanar.x = 4.0 - v.x;\\\\n\\\\n\\\\t\\\\t} else if ( absV.x >= almostOne ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat signX = sign( v.x );\\\\n\\\\t\\\\t\\\\tplanar.x = v.z * signX + 2.0 * signX;\\\\n\\\\n\\\\t\\\\t} else if ( absV.y >= almostOne ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat signY = sign( v.y );\\\\n\\\\t\\\\t\\\\tplanar.x = v.x + 2.0 * signY + 2.0;\\\\n\\\\t\\\\t\\\\tplanar.y = v.z * signY - 2.0;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t// Transform to UV space\\\\n\\\\n\\\\t\\\\t// scale := 0.5 / dim\\\\n\\\\t\\\\t// translate := ( center + 0.5 ) / dim\\\\n\\\\t\\\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\\\n\\\\n\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\\\n\\\\n\\\\t\\\\t// for point lights, the uniform @vShadowCoord is re-purposed to hold\\\\n\\\\t\\\\t// the vector from the light to the world-space position of the fragment.\\\\n\\\\t\\\\tvec3 lightToPosition = shadowCoord.xyz;\\\\n\\\\n\\\\t\\\\t// dp = normalized distance from light to fragment position\\\\n\\\\t\\\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp?\\\\n\\\\t\\\\tdp += shadowBias;\\\\n\\\\n\\\\t\\\\t// bd3D = base direction 3D\\\\n\\\\t\\\\tvec3 bd3D = normalize( lightToPosition );\\\\n\\\\n\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\\\n\\\\n\\\\t\\\\t\\\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\\\n\\\\n\\\\t\\\\t\\\\treturn (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 9.0 );\\\\n\\\\n\\\\t\\\\t#else // no percentage-closer filtering\\\\n\\\\n\\\\t\\\\t\\\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",k=\\\\\\\"\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\n\\\\tfloat transmissionAlpha = 1.0;\\\\n\\\\tfloat transmissionFactor = transmission;\\\\n\\\\tfloat thicknessFactor = thickness;\\\\n\\\\n\\\\t#ifdef USE_TRANSMISSIONMAP\\\\n\\\\n\\\\t\\\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_THICKNESSMAP\\\\n\\\\n\\\\t\\\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tvec3 pos = vWorldPosition;\\\\n\\\\tvec3 v = normalize( cameraPosition - pos );\\\\n\\\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\n\\\\tvec4 transmission = getIBLVolumeRefraction(\\\\n\\\\t\\\\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\\\\n\\\\t\\\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\\\n\\\\t\\\\tattenuationTint, attenuationDistance );\\\\n\\\\n\\\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\\\\n\\\\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\\\\n#endif\\\\n\\\\\\\";const U={alphamap_fragment:\\\\\\\"\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\n\\\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\\\n\\\\n#endif\\\\n\\\\\\\",alphamap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\n\\\\tuniform sampler2D alphaMap;\\\\n\\\\n#endif\\\\n\\\\\\\",alphatest_fragment:\\\\\\\"\\\\n#ifdef USE_ALPHATEST\\\\n\\\\n\\\\tif ( diffuseColor.a < alphaTest ) discard;\\\\n\\\\n#endif\\\\n\\\\\\\",alphatest_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ALPHATEST\\\\n\\\\tuniform float alphaTest;\\\\n#endif\\\\n\\\\\\\",aomap_fragment:\\\\\\\"\\\\n#ifdef USE_AOMAP\\\\n\\\\n\\\\t// reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\\\n\\\\n\\\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\\\n\\\\n\\\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\\\n\\\\n\\\\t\\\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\\\n\\\\n\\\\t\\\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",aomap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_AOMAP\\\\n\\\\n\\\\tuniform sampler2D aoMap;\\\\n\\\\tuniform float aoMapIntensity;\\\\n\\\\n#endif\\\\n\\\\\\\",begin_vertex:\\\\\\\"\\\\nvec3 transformed = vec3( position );\\\\n\\\\\\\",beginnormal_vertex:\\\\\\\"\\\\nvec3 objectNormal = vec3( normal );\\\\n\\\\n#ifdef USE_TANGENT\\\\n\\\\n\\\\tvec3 objectTangent = vec3( tangent.xyz );\\\\n\\\\n#endif\\\\n\\\\\\\",bsdfs:'\\\\n\\\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\\\n\\\\n\\\\treturn RECIPROCAL_PI * diffuseColor;\\\\n\\\\n} // validated\\\\n\\\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\\\n\\\\n\\\\t// Original approximation by Christophe Schlick \\\\'94\\\\n\\\\t// float fresnel = pow( 1.0 - dotVH, 5.0 );\\\\n\\\\n\\\\t// Optimized variant (presented by Epic at SIGGRAPH \\\\'13)\\\\n\\\\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\\\\n\\\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\\\n\\\\n\\\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\\\n\\\\n} // validated\\\\n\\\\n// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2\\\\n// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\\\n\\\\n\\\\tfloat a2 = pow2( alpha );\\\\n\\\\n\\\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\\\n\\\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\\\n\\\\n\\\\treturn 0.5 / max( gv + gl, EPSILON );\\\\n\\\\n}\\\\n\\\\n// Microfacet Models for Refraction through Rough Surfaces - equation (33)\\\\n// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html\\\\n// alpha is \\\\\\\"roughness squared\\\\\\\" in Disney’s reparameterization\\\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\\\n\\\\n\\\\tfloat a2 = pow2( alpha );\\\\n\\\\n\\\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; // avoid alpha = 0 with dotNH = 1\\\\n\\\\n\\\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\\\n\\\\n}\\\\n\\\\n// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility\\\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\\\\n\\\\n\\\\tfloat alpha = pow2( roughness ); // UE4\\\\'s roughness\\\\n\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\n\\\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\\\n\\\\n\\\\tvec3 F = F_Schlick( f0, f90, dotVH );\\\\n\\\\n\\\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\\\n\\\\n\\\\tfloat D = D_GGX( alpha, dotNH );\\\\n\\\\n\\\\treturn F * ( V * D );\\\\n\\\\n}\\\\n\\\\n// Rect Area Light\\\\n\\\\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\\\\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\\\\n// code: https://github.com/selfshadow/ltc_code/\\\\n\\\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\\\n\\\\n\\\\tconst float LUT_SIZE = 64.0;\\\\n\\\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\\\n\\\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\\\n\\\\n\\\\tfloat dotNV = saturate( dot( N, V ) );\\\\n\\\\n\\\\t// texture parameterized by sqrt( GGX alpha ) and sqrt( 1 - cos( theta ) )\\\\n\\\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\\\n\\\\n\\\\tuv = uv * LUT_SCALE + LUT_BIAS;\\\\n\\\\n\\\\treturn uv;\\\\n\\\\n}\\\\n\\\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\\\n\\\\n\\\\t// Real-Time Area Lighting: a Journey from Research to Production (p.102)\\\\n\\\\t// An approximation of the form factor of a horizon-clipped rectangle.\\\\n\\\\n\\\\tfloat l = length( f );\\\\n\\\\n\\\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\\\n\\\\n}\\\\n\\\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\\\n\\\\n\\\\tfloat x = dot( v1, v2 );\\\\n\\\\n\\\\tfloat y = abs( x );\\\\n\\\\n\\\\t// rational polynomial approximation to theta / sin( theta ) / 2PI\\\\n\\\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\\\n\\\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\\\n\\\\tfloat v = a / b;\\\\n\\\\n\\\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\\\n\\\\n\\\\treturn cross( v1, v2 ) * theta_sintheta;\\\\n\\\\n}\\\\n\\\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\\\n\\\\n\\\\t// bail if point is on back side of plane of light\\\\n\\\\t// assumes ccw winding order of light vertices\\\\n\\\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\\\n\\\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\\\n\\\\tvec3 lightNormal = cross( v1, v2 );\\\\n\\\\n\\\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\\\n\\\\n\\\\t// construct orthonormal basis around N\\\\n\\\\tvec3 T1, T2;\\\\n\\\\tT1 = normalize( V - N * dot( V, N ) );\\\\n\\\\tT2 = - cross( N, T1 ); // negated from paper; possibly due to a different handedness of world coordinate system\\\\n\\\\n\\\\t// compute transform\\\\n\\\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\\\n\\\\n\\\\t// transform rect\\\\n\\\\tvec3 coords[ 4 ];\\\\n\\\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\\\n\\\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\\\n\\\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\\\n\\\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\\\n\\\\n\\\\t// project rect onto sphere\\\\n\\\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\\\n\\\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\\\n\\\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\\\n\\\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\\\n\\\\n\\\\t// calculate vector form factor\\\\n\\\\tvec3 vectorFormFactor = vec3( 0.0 );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\\\n\\\\n\\\\t// adjust for horizon clipping\\\\n\\\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\\\n\\\\n/*\\\\n\\\\t// alternate method of adjusting for horizon clipping (see referece)\\\\n\\\\t// refactoring required\\\\n\\\\tfloat len = length( vectorFormFactor );\\\\n\\\\tfloat z = vectorFormFactor.z / len;\\\\n\\\\n\\\\tconst float LUT_SIZE = 64.0;\\\\n\\\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\\\n\\\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\\\n\\\\n\\\\t// tabulated horizon-clipped sphere, apparently...\\\\n\\\\tvec2 uv = vec2( z * 0.5 + 0.5, len );\\\\n\\\\tuv = uv * LUT_SCALE + LUT_BIAS;\\\\n\\\\n\\\\tfloat scale = texture2D( ltc_2, uv ).w;\\\\n\\\\n\\\\tfloat result = len * scale;\\\\n*/\\\\n\\\\n\\\\treturn vec3( result );\\\\n\\\\n}\\\\n\\\\n// End Rect Area Light\\\\n\\\\n\\\\nfloat G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\\\\n\\\\n\\\\t// geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\\\\n\\\\treturn 0.25;\\\\n\\\\n}\\\\n\\\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\\\n\\\\n\\\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\\\n\\\\n}\\\\n\\\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\\\n\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\\\n\\\\n\\\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\\\n\\\\n\\\\tfloat G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\\\\n\\\\n\\\\tfloat D = D_BlinnPhong( shininess, dotNH );\\\\n\\\\n\\\\treturn F * ( G * D );\\\\n\\\\n} // validated\\\\n\\\\n#if defined( USE_SHEEN )\\\\n\\\\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\\\\nfloat D_Charlie( float roughness, float dotNH ) {\\\\n\\\\n\\\\tfloat alpha = pow2( roughness );\\\\n\\\\n\\\\t// Estevez and Kulla 2017, \\\\\\\"Production Friendly Microfacet Sheen BRDF\\\\\\\"\\\\n\\\\tfloat invAlpha = 1.0 / alpha;\\\\n\\\\tfloat cos2h = dotNH * dotNH;\\\\n\\\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 ); // 2^(-14/2), so sin2h^2 > 0 in fp16\\\\n\\\\n\\\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\\\n\\\\n}\\\\n\\\\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\\\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\\\n\\\\n\\\\t// Neubelt and Pettineo 2013, \\\\\\\"Crafting a Next-gen Material Pipeline for The Order: 1886\\\\\\\"\\\\n\\\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\\\n\\\\n}\\\\n\\\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenTint, const in float sheenRoughness ) {\\\\n\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\n\\\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\n\\\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\\\n\\\\tfloat V = V_Neubelt( dotNV, dotNL );\\\\n\\\\n\\\\treturn sheenTint * ( D * V );\\\\n\\\\n}\\\\n\\\\n#endif\\\\n',bumpmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_BUMPMAP\\\\n\\\\n\\\\tuniform sampler2D bumpMap;\\\\n\\\\tuniform float bumpScale;\\\\n\\\\n\\\\t// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen\\\\n\\\\t// http://api.unrealengine.com/attachments/Engine/Rendering/LightingAndShadows/BumpMappingWithoutTangentSpace/mm_sfgrad_bump.pdf\\\\n\\\\n\\\\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\\\\n\\\\n\\\\tvec2 dHdxy_fwd() {\\\\n\\\\n\\\\t\\\\tvec2 dSTdx = dFdx( vUv );\\\\n\\\\t\\\\tvec2 dSTdy = dFdy( vUv );\\\\n\\\\n\\\\t\\\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\\\n\\\\t\\\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\\\n\\\\t\\\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\\\n\\\\n\\\\t\\\\treturn vec2( dBx, dBy );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\\\n\\\\n\\\\t\\\\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\\\\n\\\\n\\\\t\\\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\\\n\\\\t\\\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\\\n\\\\t\\\\tvec3 vN = surf_norm;\\\\t\\\\t// normalized\\\\n\\\\n\\\\t\\\\tvec3 R1 = cross( vSigmaY, vN );\\\\n\\\\t\\\\tvec3 R2 = cross( vN, vSigmaX );\\\\n\\\\n\\\\t\\\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\\\n\\\\n\\\\t\\\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\\\n\\\\t\\\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",clipping_planes_fragment:\\\\\\\"\\\\n#if NUM_CLIPPING_PLANES > 0\\\\n\\\\n\\\\tvec4 plane;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\\\n\\\\n\\\\t\\\\tplane = clippingPlanes[ i ];\\\\n\\\\t\\\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\\\n\\\\n\\\\t\\\\tbool clipped = true;\\\\n\\\\n\\\\t\\\\t#pragma unroll_loop_start\\\\n\\\\t\\\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\\\n\\\\n\\\\t\\\\t\\\\tplane = clippingPlanes[ i ];\\\\n\\\\t\\\\t\\\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t\\\\tif ( clipped ) discard;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",clipping_planes_pars_fragment:\\\\\\\"\\\\n#if NUM_CLIPPING_PLANES > 0\\\\n\\\\n\\\\tvarying vec3 vClipPosition;\\\\n\\\\n\\\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\\\n\\\\n#endif\\\\n\\\\\\\",clipping_planes_pars_vertex:\\\\\\\"\\\\n#if NUM_CLIPPING_PLANES > 0\\\\n\\\\n\\\\tvarying vec3 vClipPosition;\\\\n\\\\n#endif\\\\n\\\\\\\",clipping_planes_vertex:\\\\\\\"\\\\n#if NUM_CLIPPING_PLANES > 0\\\\n\\\\n\\\\tvClipPosition = - mvPosition.xyz;\\\\n\\\\n#endif\\\\n\\\\\\\",color_fragment:\\\\\\\"\\\\n#if defined( USE_COLOR_ALPHA )\\\\n\\\\n\\\\tdiffuseColor *= vColor;\\\\n\\\\n#elif defined( USE_COLOR )\\\\n\\\\n\\\\tdiffuseColor.rgb *= vColor;\\\\n\\\\n#endif\\\\n\\\\\\\",color_pars_fragment:\\\\\\\"\\\\n#if defined( USE_COLOR_ALPHA )\\\\n\\\\n\\\\tvarying vec4 vColor;\\\\n\\\\n#elif defined( USE_COLOR )\\\\n\\\\n\\\\tvarying vec3 vColor;\\\\n\\\\n#endif\\\\n\\\\\\\",color_pars_vertex:\\\\\\\"\\\\n#if defined( USE_COLOR_ALPHA )\\\\n\\\\n\\\\tvarying vec4 vColor;\\\\n\\\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\\\n\\\\n\\\\tvarying vec3 vColor;\\\\n\\\\n#endif\\\\n\\\\\\\",color_vertex:\\\\\\\"\\\\n#if defined( USE_COLOR_ALPHA )\\\\n\\\\n\\\\tvColor = vec4( 1.0 );\\\\n\\\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\\\n\\\\n\\\\tvColor = vec3( 1.0 );\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_COLOR\\\\n\\\\n\\\\tvColor *= color;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_INSTANCING_COLOR\\\\n\\\\n\\\\tvColor.xyz *= instanceColor.xyz;\\\\n\\\\n#endif\\\\n\\\\\\\",common:\\\\\\\"\\\\n#define PI 3.141592653589793\\\\n#define PI2 6.283185307179586\\\\n#define PI_HALF 1.5707963267948966\\\\n#define RECIPROCAL_PI 0.3183098861837907\\\\n#define RECIPROCAL_PI2 0.15915494309189535\\\\n#define EPSILON 1e-6\\\\n\\\\n#ifndef saturate\\\\n// <tonemapping_pars_fragment> may have defined saturate() already\\\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\\\n#endif\\\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\\\n\\\\nfloat pow2( const in float x ) { return x*x; }\\\\nfloat pow3( const in float x ) { return x*x*x; }\\\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\\\n\\\\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\\\\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\\\\nhighp float rand( const in vec2 uv ) {\\\\n\\\\n\\\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\\\n\\\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\\\n\\\\n\\\\treturn fract( sin( sn ) * c );\\\\n\\\\n}\\\\n\\\\n#ifdef HIGH_PRECISION\\\\n\\\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\\\n#else\\\\n\\\\tfloat precisionSafeLength( vec3 v ) {\\\\n\\\\t\\\\tfloat maxComponent = max3( abs( v ) );\\\\n\\\\t\\\\treturn length( v / maxComponent ) * maxComponent;\\\\n\\\\t}\\\\n#endif\\\\n\\\\nstruct IncidentLight {\\\\n\\\\tvec3 color;\\\\n\\\\tvec3 direction;\\\\n\\\\tbool visible;\\\\n};\\\\n\\\\nstruct ReflectedLight {\\\\n\\\\tvec3 directDiffuse;\\\\n\\\\tvec3 directSpecular;\\\\n\\\\tvec3 indirectDiffuse;\\\\n\\\\tvec3 indirectSpecular;\\\\n};\\\\n\\\\nstruct GeometricContext {\\\\n\\\\tvec3 position;\\\\n\\\\tvec3 normal;\\\\n\\\\tvec3 viewDir;\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tvec3 clearcoatNormal;\\\\n#endif\\\\n};\\\\n\\\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\n\\\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\\\n\\\\n}\\\\n\\\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\n\\\\t// dir can be either a direction vector or a normal vector\\\\n\\\\t// upper-left 3x3 of matrix is assumed to be orthogonal\\\\n\\\\n\\\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\\\n\\\\n}\\\\n\\\\nmat3 transposeMat3( const in mat3 m ) {\\\\n\\\\n\\\\tmat3 tmp;\\\\n\\\\n\\\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\\\n\\\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\\\n\\\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\\\n\\\\n\\\\treturn tmp;\\\\n\\\\n}\\\\n\\\\n// https://en.wikipedia.org/wiki/Relative_luminance\\\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\\\n\\\\n\\\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\\\n\\\\n\\\\treturn dot( weights, color.rgb );\\\\n\\\\n}\\\\n\\\\nbool isPerspectiveMatrix( mat4 m ) {\\\\n\\\\n\\\\treturn m[ 2 ][ 3 ] == - 1.0;\\\\n\\\\n}\\\\n\\\\nvec2 equirectUv( in vec3 dir ) {\\\\n\\\\n\\\\t// dir is assumed to be unit length\\\\n\\\\n\\\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\\\n\\\\n\\\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\\\n\\\\n\\\\treturn vec2( u, v );\\\\n\\\\n}\\\\n\\\\\\\",cube_uv_reflection_fragment:\\\\\\\"\\\\n#ifdef ENVMAP_TYPE_CUBE_UV\\\\n\\\\n\\\\t#define cubeUV_maxMipLevel 8.0\\\\n\\\\t#define cubeUV_minMipLevel 4.0\\\\n\\\\t#define cubeUV_maxTileSize 256.0\\\\n\\\\t#define cubeUV_minTileSize 16.0\\\\n\\\\n\\\\t// These shader functions convert between the UV coordinates of a single face of\\\\n\\\\t// a cubemap, the 0-5 integer index of a cube face, and the direction vector for\\\\n\\\\t// sampling a textureCube (not generally normalized ).\\\\n\\\\n\\\\tfloat getFace( vec3 direction ) {\\\\n\\\\n\\\\t\\\\tvec3 absDirection = abs( direction );\\\\n\\\\n\\\\t\\\\tfloat face = - 1.0;\\\\n\\\\n\\\\t\\\\tif ( absDirection.x > absDirection.z ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( absDirection.x > absDirection.y )\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\\\n\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tif ( absDirection.z > absDirection.y )\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\\\n\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn face;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\t// RH coordinate system; PMREM face-indexing convention\\\\n\\\\tvec2 getUV( vec3 direction, float face ) {\\\\n\\\\n\\\\t\\\\tvec2 uv;\\\\n\\\\n\\\\t\\\\tif ( face == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( direction.z, direction.y ) / abs( direction.x ); // pos x\\\\n\\\\n\\\\t\\\\t} else if ( face == 1.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y ); // pos y\\\\n\\\\n\\\\t\\\\t} else if ( face == 2.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z ); // pos z\\\\n\\\\n\\\\t\\\\t} else if ( face == 3.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x ); // neg x\\\\n\\\\n\\\\t\\\\t} else if ( face == 4.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y ); // neg y\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( direction.x, direction.y ) / abs( direction.z ); // neg z\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn 0.5 * ( uv + 1.0 );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\\\n\\\\n\\\\t\\\\tfloat face = getFace( direction );\\\\n\\\\n\\\\t\\\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\\\n\\\\n\\\\t\\\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\\\n\\\\n\\\\t\\\\tfloat faceSize = exp2( mipInt );\\\\n\\\\n\\\\t\\\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\\\n\\\\n\\\\t\\\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\\\n\\\\n\\\\t\\\\tvec2 f = fract( uv );\\\\n\\\\n\\\\t\\\\tuv += 0.5 - f;\\\\n\\\\n\\\\t\\\\tif ( face > 2.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv.y += faceSize;\\\\n\\\\n\\\\t\\\\t\\\\tface -= 3.0;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tuv.x += face * faceSize;\\\\n\\\\n\\\\t\\\\tif ( mipInt < cubeUV_maxMipLevel ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv.y += 2.0 * cubeUV_maxTileSize;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\\\n\\\\n\\\\t\\\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\\\n\\\\n\\\\t\\\\tuv *= texelSize;\\\\n\\\\n\\\\t\\\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\tuv.x += texelSize;\\\\n\\\\n\\\\t\\\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\tuv.y += texelSize;\\\\n\\\\n\\\\t\\\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\tuv.x -= texelSize;\\\\n\\\\n\\\\t\\\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\tvec3 tm = mix( tl, tr, f.x );\\\\n\\\\n\\\\t\\\\tvec3 bm = mix( bl, br, f.x );\\\\n\\\\n\\\\t\\\\treturn mix( tm, bm, f.y );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\t// These defines must match with PMREMGenerator\\\\n\\\\n\\\\t#define r0 1.0\\\\n\\\\t#define v0 0.339\\\\n\\\\t#define m0 - 2.0\\\\n\\\\t#define r1 0.8\\\\n\\\\t#define v1 0.276\\\\n\\\\t#define m1 - 1.0\\\\n\\\\t#define r4 0.4\\\\n\\\\t#define v4 0.046\\\\n\\\\t#define m4 2.0\\\\n\\\\t#define r5 0.305\\\\n\\\\t#define v5 0.016\\\\n\\\\t#define m5 3.0\\\\n\\\\t#define r6 0.21\\\\n\\\\t#define v6 0.0038\\\\n\\\\t#define m6 4.0\\\\n\\\\n\\\\tfloat roughnessToMip( float roughness ) {\\\\n\\\\n\\\\t\\\\tfloat mip = 0.0;\\\\n\\\\n\\\\t\\\\tif ( roughness >= r1 ) {\\\\n\\\\n\\\\t\\\\t\\\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\\\n\\\\n\\\\t\\\\t} else if ( roughness >= r4 ) {\\\\n\\\\n\\\\t\\\\t\\\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\\\n\\\\n\\\\t\\\\t} else if ( roughness >= r5 ) {\\\\n\\\\n\\\\t\\\\t\\\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\\\n\\\\n\\\\t\\\\t} else if ( roughness >= r6 ) {\\\\n\\\\n\\\\t\\\\t\\\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tmip = - 2.0 * log2( 1.16 * roughness ); // 1.16 = 1.79^0.25\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn mip;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\\\n\\\\n\\\\t\\\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\\\n\\\\n\\\\t\\\\tfloat mipF = fract( mip );\\\\n\\\\n\\\\t\\\\tfloat mipInt = floor( mip );\\\\n\\\\n\\\\t\\\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\\\n\\\\n\\\\t\\\\tif ( mipF == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn vec4( color0, 1.0 );\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",defaultnormal_vertex:\\\\\\\"\\\\nvec3 transformedNormal = objectNormal;\\\\n\\\\n#ifdef USE_INSTANCING\\\\n\\\\n\\\\t// this is in lieu of a per-instance normal-matrix\\\\n\\\\t// shear transforms in the instance matrix are not supported\\\\n\\\\n\\\\tmat3 m = mat3( instanceMatrix );\\\\n\\\\n\\\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\\\n\\\\n\\\\ttransformedNormal = m * transformedNormal;\\\\n\\\\n#endif\\\\n\\\\ntransformedNormal = normalMatrix * transformedNormal;\\\\n\\\\n#ifdef FLIP_SIDED\\\\n\\\\n\\\\ttransformedNormal = - transformedNormal;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_TANGENT\\\\n\\\\n\\\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\\\n\\\\n\\\\t#ifdef FLIP_SIDED\\\\n\\\\n\\\\t\\\\ttransformedTangent = - transformedTangent;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",displacementmap_pars_vertex:\\\\\\\"\\\\n#ifdef USE_DISPLACEMENTMAP\\\\n\\\\n\\\\tuniform sampler2D displacementMap;\\\\n\\\\tuniform float displacementScale;\\\\n\\\\tuniform float displacementBias;\\\\n\\\\n#endif\\\\n\\\\\\\",displacementmap_vertex:\\\\\\\"\\\\n#ifdef USE_DISPLACEMENTMAP\\\\n\\\\n\\\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\\\n\\\\n#endif\\\\n\\\\\\\",emissivemap_fragment:\\\\\\\"\\\\n#ifdef USE_EMISSIVEMAP\\\\n\\\\n\\\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\\\n\\\\n\\\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\\\n\\\\n\\\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\\\n\\\\n#endif\\\\n\\\\\\\",emissivemap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_EMISSIVEMAP\\\\n\\\\n\\\\tuniform sampler2D emissiveMap;\\\\n\\\\n#endif\\\\n\\\\\\\",encodings_fragment:\\\\\\\"\\\\ngl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\\\\",encodings_pars_fragment:\\\\\\\"\\\\n// For a discussion of what this is, please read this: http://lousodrome.net/blog/light/2013/05/26/gamma-correct-and-hdr-rendering-in-a-32-bits-buffer/\\\\n\\\\nvec4 LinearToLinear( in vec4 value ) {\\\\n\\\\treturn value;\\\\n}\\\\n\\\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\\\n\\\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\\\n}\\\\n\\\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\\\n\\\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\\\n}\\\\n\\\\nvec4 sRGBToLinear( in vec4 value ) {\\\\n\\\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\\\n}\\\\n\\\\nvec4 LinearTosRGB( in vec4 value ) {\\\\n\\\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\\\n}\\\\n\\\\nvec4 RGBEToLinear( in vec4 value ) {\\\\n\\\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\\\n}\\\\n\\\\nvec4 LinearToRGBE( in vec4 value ) {\\\\n\\\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\\\n\\\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\\\n\\\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\\\n\\\\t// return vec4( value.brg, ( 3.0 + 128.0 ) / 256.0 );\\\\n}\\\\n\\\\n// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html\\\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\\\n\\\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\\\n}\\\\n\\\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\\\n\\\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\\\n\\\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\\\n\\\\tM = ceil( M * 255.0 ) / 255.0;\\\\n\\\\treturn vec4( value.rgb / ( M * maxRange ), M );\\\\n}\\\\n\\\\n// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html\\\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\\\n\\\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\\\n}\\\\n\\\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\\\n\\\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\\\n\\\\tfloat D = max( maxRange / maxRGB, 1.0 );\\\\n\\\\t// NOTE: The implementation with min causes the shader to not compile on\\\\n\\\\t// a common Alcatel A502DL in Chrome 78/Android 8.1. Some research suggests \\\\n\\\\t// that the chipset is Mediatek MT6739 w/ IMG PowerVR GE8100 GPU.\\\\n\\\\t// D = min( floor( D ) / 255.0, 1.0 );\\\\n\\\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\\\n\\\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\\\n}\\\\n\\\\n// LogLuv reference: http://graphicrants.blogspot.ca/2009/04/rgbm-color-encoding.html\\\\n\\\\n// M matrix, for encoding\\\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\\\nvec4 LinearToLogLuv( in vec4 value ) {\\\\n\\\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\\\n\\\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\\\n\\\\tvec4 vResult;\\\\n\\\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\\\n\\\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\\\n\\\\tvResult.w = fract( Le );\\\\n\\\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\\\n\\\\treturn vResult;\\\\n}\\\\n\\\\n// Inverse M matrix, for decoding\\\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\\\nvec4 LogLuvToLinear( in vec4 value ) {\\\\n\\\\tfloat Le = value.z * 255.0 + value.w;\\\\n\\\\tvec3 Xp_Y_XYZp;\\\\n\\\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\\\n\\\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\\\n\\\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\\\n\\\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\\\n\\\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\\\n}\\\\n\\\\\\\",envmap_fragment:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\n\\\\t\\\\tvec3 cameraToFrag;\\\\n\\\\n\\\\t\\\\tif ( isOrthographic ) {\\\\n\\\\n\\\\t\\\\t\\\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t// Transforming Normal Vectors with the Inverse Transformation\\\\n\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\n\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\n\\\\t\\\\t\\\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvec3 reflectVec = vReflect;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef ENVMAP_TYPE_CUBE\\\\n\\\\n\\\\t\\\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\\\n\\\\n\\\\t\\\\tenvColor = envMapTexelToLinear( envColor );\\\\n\\\\n\\\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\n\\\\t\\\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvec4 envColor = vec4( 0.0 );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\\\n\\\\n\\\\t\\\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\\\n\\\\n\\\\t#elif defined( ENVMAP_BLENDING_MIX )\\\\n\\\\n\\\\t\\\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\\\n\\\\n\\\\t#elif defined( ENVMAP_BLENDING_ADD )\\\\n\\\\n\\\\t\\\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",envmap_common_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\tuniform float envMapIntensity;\\\\n\\\\tuniform float flipEnvMap;\\\\n\\\\tuniform int maxMipLevel;\\\\n\\\\n\\\\t#ifdef ENVMAP_TYPE_CUBE\\\\n\\\\t\\\\tuniform samplerCube envMap;\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t#endif\\\\n\\\\t\\\\n#endif\\\\n\\\\\\\",envmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\tuniform float reflectivity;\\\\n\\\\n\\\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\\\n\\\\n\\\\t\\\\t#define ENV_WORLDPOS\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\t#else\\\\n\\\\t\\\\tvarying vec3 vReflect;\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",envmap_pars_vertex:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\\\n\\\\n\\\\t\\\\t#define ENV_WORLDPOS\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\t\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvarying vec3 vReflect;\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",envmap_physical_pars_fragment:\\\\\\\"\\\\n#if defined( USE_ENVMAP )\\\\n\\\\n\\\\t#ifdef ENVMAP_MODE_REFRACTION\\\\n\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\\\n\\\\n\\\\t\\\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\n\\\\t\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\treturn PI * envMapColor.rgb * envMapIntensity;\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\treturn vec3( 0.0 );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\\\n\\\\n\\\\t\\\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\n\\\\t\\\\t\\\\tvec3 reflectVec;\\\\n\\\\n\\\\t\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = reflect( - viewDir, normal );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\\\n\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = refract( - viewDir, normal, refractionRatio );\\\\n\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t\\\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\\\n\\\\n\\\\t\\\\t\\\\treturn envMapColor.rgb * envMapIntensity;\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\treturn vec3( 0.0 );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",envmap_vertex:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\n\\\\t\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvec3 cameraToVertex;\\\\n\\\\n\\\\t\\\\tif ( isOrthographic ) {\\\\n\\\\n\\\\t\\\\t\\\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\\\n\\\\n\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\n\\\\t\\\\t\\\\tvReflect = reflect( cameraToVertex, worldNormal );\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",fog_vertex:\\\\\\\"\\\\n#ifdef USE_FOG\\\\n\\\\n\\\\tvFogDepth = - mvPosition.z;\\\\n\\\\n#endif\\\\n\\\\\\\",fog_pars_vertex:\\\\\\\"\\\\n#ifdef USE_FOG\\\\n\\\\n\\\\tvarying float vFogDepth;\\\\n\\\\n#endif\\\\n\\\\\\\",fog_fragment:\\\\\\\"\\\\n#ifdef USE_FOG\\\\n\\\\n\\\\t#ifdef FOG_EXP2\\\\n\\\\n\\\\t\\\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\\\n\\\\n#endif\\\\n\\\\\\\",fog_pars_fragment:\\\\\\\"\\\\n#ifdef USE_FOG\\\\n\\\\n\\\\tuniform vec3 fogColor;\\\\n\\\\tvarying float vFogDepth;\\\\n\\\\n\\\\t#ifdef FOG_EXP2\\\\n\\\\n\\\\t\\\\tuniform float fogDensity;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tuniform float fogNear;\\\\n\\\\t\\\\tuniform float fogFar;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",gradientmap_pars_fragment:\\\\\\\"\\\\n\\\\n#ifdef USE_GRADIENTMAP\\\\n\\\\n\\\\tuniform sampler2D gradientMap;\\\\n\\\\n#endif\\\\n\\\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\\\n\\\\n\\\\t// dotNL will be from -1.0 to 1.0\\\\n\\\\tfloat dotNL = dot( normal, lightDirection );\\\\n\\\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\\\n\\\\n\\\\t#ifdef USE_GRADIENTMAP\\\\n\\\\n\\\\t\\\\treturn texture2D( gradientMap, coord ).rgb;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\\\n\\\\n\\\\t#endif\\\\n\\\\n}\\\\n\\\\\\\",lightmap_fragment:\\\\\\\"\\\\n#ifdef USE_LIGHTMAP\\\\n\\\\n\\\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\\\n\\\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\n\\\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\\\n\\\\n\\\\t\\\\tlightMapIrradiance *= PI;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\\\n\\\\n#endif\\\\n\\\\\\\",lightmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_LIGHTMAP\\\\n\\\\n\\\\tuniform sampler2D lightMap;\\\\n\\\\tuniform float lightMapIntensity;\\\\n\\\\n#endif\\\\n\\\\\\\",lights_lambert_vertex:\\\\\\\"\\\\nvec3 diffuse = vec3( 1.0 );\\\\n\\\\nGeometricContext geometry;\\\\ngeometry.position = mvPosition.xyz;\\\\ngeometry.normal = normalize( transformedNormal );\\\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\\\n\\\\nGeometricContext backGeometry;\\\\nbackGeometry.position = geometry.position;\\\\nbackGeometry.normal = -geometry.normal;\\\\nbackGeometry.viewDir = geometry.viewDir;\\\\n\\\\nvLightFront = vec3( 0.0 );\\\\nvIndirectFront = vec3( 0.0 );\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvLightBack = vec3( 0.0 );\\\\n\\\\tvIndirectBack = vec3( 0.0 );\\\\n#endif\\\\n\\\\nIncidentLight directLight;\\\\nfloat dotNL;\\\\nvec3 directLightColor_Diffuse;\\\\n\\\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\\\\n\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\n\\\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\\\\n\\\\n#endif\\\\n\\\\n#if NUM_POINT_LIGHTS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\\\\n\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if NUM_SPOT_LIGHTS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\\\\n\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if NUM_DIR_LIGHTS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\\\\n\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if NUM_HEMI_LIGHTS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\\\\",lights_pars_begin:\\\\\\\"\\\\nuniform bool receiveShadow;\\\\nuniform vec3 ambientLightColor;\\\\nuniform vec3 lightProbe[ 9 ];\\\\n\\\\n// get the irradiance (radiance convolved with cosine lobe) at the point 'normal' on the unit sphere\\\\n// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\\\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\\\n\\\\n\\\\t// normal is assumed to have unit length\\\\n\\\\n\\\\tfloat x = normal.x, y = normal.y, z = normal.z;\\\\n\\\\n\\\\t// band 0\\\\n\\\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\\\n\\\\n\\\\t// band 1\\\\n\\\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\\\n\\\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\\\n\\\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\\\n\\\\n\\\\t// band 2\\\\n\\\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\\\n\\\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\\\n\\\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\\\n\\\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\\\n\\\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\\\n\\\\n\\\\treturn result;\\\\n\\\\n}\\\\n\\\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\\\n\\\\n\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\n\\\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\\\n\\\\n\\\\treturn irradiance;\\\\n\\\\n}\\\\n\\\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\\\n\\\\n\\\\tvec3 irradiance = ambientLightColor;\\\\n\\\\n\\\\treturn irradiance;\\\\n\\\\n}\\\\n\\\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\\\n\\\\n\\\\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\\\n\\\\n\\\\t\\\\t// based upon Frostbite 3 Moving to Physically-based Rendering\\\\n\\\\t\\\\t// page 32, equation 26: E[window1]\\\\n\\\\t\\\\t// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\\\n\\\\t\\\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\\\n\\\\n\\\\t\\\\tif ( cutoffDistance > 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn distanceFalloff;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn 1.0;\\\\n\\\\n\\\\t#endif\\\\n\\\\n}\\\\n\\\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\\\n\\\\n\\\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\\\n\\\\n}\\\\n\\\\n#if NUM_DIR_LIGHTS > 0\\\\n\\\\n\\\\tstruct DirectionalLight {\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t};\\\\n\\\\n\\\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\\\n\\\\n\\\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\n\\\\t\\\\tlight.color = directionalLight.color;\\\\n\\\\t\\\\tlight.direction = directionalLight.direction;\\\\n\\\\t\\\\tlight.visible = true;\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\n\\\\n#if NUM_POINT_LIGHTS > 0\\\\n\\\\n\\\\tstruct PointLight {\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tfloat distance;\\\\n\\\\t\\\\tfloat decay;\\\\n\\\\t};\\\\n\\\\n\\\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\\\n\\\\n\\\\t// light is an out parameter as having it as a return value caused compiler errors on some devices\\\\n\\\\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\n\\\\t\\\\tvec3 lVector = pointLight.position - geometry.position;\\\\n\\\\n\\\\t\\\\tlight.direction = normalize( lVector );\\\\n\\\\n\\\\t\\\\tfloat lightDistance = length( lVector );\\\\n\\\\n\\\\t\\\\tlight.color = pointLight.color;\\\\n\\\\t\\\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\\\n\\\\t\\\\tlight.visible = ( light.color != vec3( 0.0 ) );\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\n\\\\n#if NUM_SPOT_LIGHTS > 0\\\\n\\\\n\\\\tstruct SpotLight {\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tfloat distance;\\\\n\\\\t\\\\tfloat decay;\\\\n\\\\t\\\\tfloat coneCos;\\\\n\\\\t\\\\tfloat penumbraCos;\\\\n\\\\t};\\\\n\\\\n\\\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\\\n\\\\n\\\\t// light is an out parameter as having it as a return value caused compiler errors on some devices\\\\n\\\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\n\\\\t\\\\tvec3 lVector = spotLight.position - geometry.position;\\\\n\\\\n\\\\t\\\\tlight.direction = normalize( lVector );\\\\n\\\\n\\\\t\\\\tfloat angleCos = dot( light.direction, spotLight.direction );\\\\n\\\\n\\\\t\\\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\\\n\\\\n\\\\t\\\\tif ( spotAttenuation > 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat lightDistance = length( lVector );\\\\n\\\\n\\\\t\\\\t\\\\tlight.color = spotLight.color * spotAttenuation;\\\\n\\\\t\\\\t\\\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\\\n\\\\t\\\\t\\\\tlight.visible = ( light.color != vec3( 0.0 ) );\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tlight.color = vec3( 0.0 );\\\\n\\\\t\\\\t\\\\tlight.visible = false;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\n\\\\n#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\tstruct RectAreaLight {\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 halfWidth;\\\\n\\\\t\\\\tvec3 halfHeight;\\\\n\\\\t};\\\\n\\\\n\\\\t// Pre-computed values of LinearTransformedCosine approximation of BRDF\\\\n\\\\t// BRDF approximation Texture is 64x64\\\\n\\\\tuniform sampler2D ltc_1; // RGBA Float\\\\n\\\\tuniform sampler2D ltc_2; // RGBA Float\\\\n\\\\n\\\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\\\n\\\\n#endif\\\\n\\\\n\\\\n#if NUM_HEMI_LIGHTS > 0\\\\n\\\\n\\\\tstruct HemisphereLight {\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 skyColor;\\\\n\\\\t\\\\tvec3 groundColor;\\\\n\\\\t};\\\\n\\\\n\\\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\\\n\\\\n\\\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\\\n\\\\n\\\\t\\\\tfloat dotNL = dot( normal, hemiLight.direction );\\\\n\\\\t\\\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\\\n\\\\n\\\\t\\\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\\\n\\\\n\\\\t\\\\treturn irradiance;\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",lights_toon_fragment:\\\\\\\"\\\\nToonMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb;\\\\n\\\\\\\",lights_toon_pars_fragment:\\\\\\\"\\\\nvarying vec3 vViewPosition;\\\\n\\\\nstruct ToonMaterial {\\\\n\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\n};\\\\n\\\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\\\n\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n}\\\\n\\\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n}\\\\n\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_Toon\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_Toon\\\\n\\\\n#define Material_LightProbeLOD( material )\\\\t(0)\\\\n\\\\\\\",lights_phong_fragment:\\\\\\\"\\\\nBlinnPhongMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb;\\\\nmaterial.specularColor = specular;\\\\nmaterial.specularShininess = shininess;\\\\nmaterial.specularStrength = specularStrength;\\\\n\\\\\\\",lights_phong_pars_fragment:\\\\\\\"\\\\nvarying vec3 vViewPosition;\\\\n\\\\nstruct BlinnPhongMaterial {\\\\n\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\tvec3 specularColor;\\\\n\\\\tfloat specularShininess;\\\\n\\\\tfloat specularStrength;\\\\n\\\\n};\\\\n\\\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\\\n\\\\tvec3 irradiance = dotNL * directLight.color;\\\\n\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n\\\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\\\n\\\\n}\\\\n\\\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n}\\\\n\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_BlinnPhong\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_BlinnPhong\\\\n\\\\n#define Material_LightProbeLOD( material )\\\\t(0)\\\\n\\\\\\\",lights_physical_fragment:\\\\\\\"\\\\nPhysicalMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\\\n\\\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\\\n\\\\nmaterial.roughness = max( roughnessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.\\\\nmaterial.roughness += geometryRoughness;\\\\nmaterial.roughness = min( material.roughness, 1.0 );\\\\n\\\\n#ifdef IOR\\\\n\\\\n\\\\t#ifdef SPECULAR\\\\n\\\\n\\\\t\\\\tfloat specularIntensityFactor = specularIntensity;\\\\n\\\\t\\\\tvec3 specularTintFactor = specularTint;\\\\n\\\\n\\\\t\\\\t#ifdef USE_SPECULARINTENSITYMAP\\\\n\\\\n\\\\t\\\\t\\\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t#ifdef USE_SPECULARTINTMAP\\\\n\\\\n\\\\t\\\\t\\\\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tfloat specularIntensityFactor = 1.0;\\\\n\\\\t\\\\tvec3 specularTintFactor = vec3( 1.0 );\\\\n\\\\t\\\\tmaterial.specularF90 = 1.0;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\\\n\\\\n#else\\\\n\\\\n\\\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\\\n\\\\tmaterial.specularF90 = 1.0;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\tmaterial.clearcoat = clearcoat;\\\\n\\\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\\\n\\\\tmaterial.clearcoatF0 = vec3( 0.04 );\\\\n\\\\tmaterial.clearcoatF90 = 1.0;\\\\n\\\\n\\\\t#ifdef USE_CLEARCOATMAP\\\\n\\\\n\\\\t\\\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\\\n\\\\n\\\\t\\\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tmaterial.clearcoat = saturate( material.clearcoat ); // Burley clearcoat model\\\\n\\\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\\\n\\\\tmaterial.clearcoatRoughness += geometryRoughness;\\\\n\\\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_SHEEN\\\\n\\\\n\\\\tmaterial.sheenTint = sheenTint;\\\\n\\\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\\\n\\\\n#endif\\\\n\\\\\\\",lights_physical_pars_fragment:'\\\\nstruct PhysicalMaterial {\\\\n\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\tfloat roughness;\\\\n\\\\tvec3 specularColor;\\\\n\\\\tfloat specularF90;\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tfloat clearcoat;\\\\n\\\\t\\\\tfloat clearcoatRoughness;\\\\n\\\\t\\\\tvec3 clearcoatF0;\\\\n\\\\t\\\\tfloat clearcoatF90;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_SHEEN\\\\n\\\\t\\\\tvec3 sheenTint;\\\\n\\\\t\\\\tfloat sheenRoughness;\\\\n\\\\t#endif\\\\n\\\\n};\\\\n\\\\n// temporary\\\\nvec3 clearcoatSpecular = vec3( 0.0 );\\\\n\\\\n// Analytical approximation of the DFG LUT, one half of the\\\\n// split-sum approximation used in indirect specular lighting.\\\\n// via \\\\'environmentBRDF\\\\' from \\\\\\\"Physically Based Shading on Mobile\\\\\\\"\\\\n// https://www.unrealengine.com/blog/physically-based-shading-on-mobile\\\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\\\n\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\n\\\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\\\n\\\\n\\\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\\\n\\\\n\\\\tvec4 r = roughness * c0 + c1;\\\\n\\\\n\\\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\\\n\\\\n\\\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\\\n\\\\n\\\\treturn fab;\\\\n\\\\n}\\\\n\\\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\\\n\\\\n\\\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\\\n\\\\n\\\\treturn specularColor * fab.x + specularF90 * fab.y;\\\\n\\\\n}\\\\n\\\\n// Fdez-Agüera\\\\'s \\\\\\\"Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting\\\\\\\"\\\\n// Approximates multiscattering in order to preserve energy.\\\\n// http://www.jcgt.org/published/0008/01/03/\\\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\\\n\\\\n\\\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\\\n\\\\n\\\\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\\\\n\\\\n\\\\tfloat Ess = fab.x + fab.y;\\\\n\\\\tfloat Ems = 1.0 - Ess;\\\\n\\\\n\\\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619; // 1/21\\\\n\\\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\\\n\\\\n\\\\tsingleScatter += FssEss;\\\\n\\\\tmultiScatter += Fms * Ems;\\\\n\\\\n}\\\\n\\\\n#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\t\\\\tvec3 normal = geometry.normal;\\\\n\\\\t\\\\tvec3 viewDir = geometry.viewDir;\\\\n\\\\t\\\\tvec3 position = geometry.position;\\\\n\\\\t\\\\tvec3 lightPos = rectAreaLight.position;\\\\n\\\\t\\\\tvec3 halfWidth = rectAreaLight.halfWidth;\\\\n\\\\t\\\\tvec3 halfHeight = rectAreaLight.halfHeight;\\\\n\\\\t\\\\tvec3 lightColor = rectAreaLight.color;\\\\n\\\\t\\\\tfloat roughness = material.roughness;\\\\n\\\\n\\\\t\\\\tvec3 rectCoords[ 4 ];\\\\n\\\\t\\\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight; // counterclockwise; light shines in local neg z direction\\\\n\\\\t\\\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\\\n\\\\t\\\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\\\n\\\\t\\\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\\\n\\\\n\\\\t\\\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\\\n\\\\n\\\\t\\\\tvec4 t1 = texture2D( ltc_1, uv );\\\\n\\\\t\\\\tvec4 t2 = texture2D( ltc_2, uv );\\\\n\\\\n\\\\t\\\\tmat3 mInv = mat3(\\\\n\\\\t\\\\t\\\\tvec3( t1.x, 0, t1.y ),\\\\n\\\\t\\\\t\\\\tvec3(    0, 1,    0 ),\\\\n\\\\t\\\\t\\\\tvec3( t1.z, 0, t1.w )\\\\n\\\\t\\\\t);\\\\n\\\\n\\\\t\\\\t// LTC Fresnel Approximation by Stephen Hill\\\\n\\\\t\\\\t// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf\\\\n\\\\t\\\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\\\n\\\\n\\\\t\\\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\\\n\\\\n\\\\t\\\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\\\n\\\\n\\\\tvec3 irradiance = dotNL * directLight.color;\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\t\\\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\\\n\\\\n\\\\t\\\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\\\n\\\\n\\\\t\\\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_SHEEN\\\\n\\\\n\\\\t\\\\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenTint, material.sheenRoughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\\\n\\\\n\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\n\\\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n}\\\\n\\\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\t\\\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t// Both indirect specular and indirect diffuse light accumulate here\\\\n\\\\n\\\\tvec3 singleScattering = vec3( 0.0 );\\\\n\\\\tvec3 multiScattering = vec3( 0.0 );\\\\n\\\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\\\n\\\\n\\\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\\\n\\\\n\\\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\\\n\\\\n\\\\treflectedLight.indirectSpecular += radiance * singleScattering;\\\\n\\\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\\\n\\\\n}\\\\n\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_Physical\\\\n#define RE_Direct_RectArea\\\\t\\\\tRE_Direct_RectArea_Physical\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_Physical\\\\n#define RE_IndirectSpecular\\\\t\\\\tRE_IndirectSpecular_Physical\\\\n\\\\n// ref: https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\\\n\\\\n\\\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\\\n\\\\n}\\\\n',lights_fragment_begin:\\\\\\\"\\\\n/**\\\\n * This is a template that can be used to light a material, it uses pluggable\\\\n * RenderEquations (RE)for specific lighting scenarios.\\\\n *\\\\n * Instructions for use:\\\\n * - Ensure that both RE_Direct, RE_IndirectDiffuse and RE_IndirectSpecular are defined\\\\n * - If you have defined an RE_IndirectSpecular, you need to also provide a Material_LightProbeLOD. <---- ???\\\\n * - Create a material parameter that is to be passed as the third parameter to your lighting functions.\\\\n *\\\\n * TODO:\\\\n * - Add area light support.\\\\n * - Add sphere light support.\\\\n * - Add diffuse light probe (irradiance cubemap) support.\\\\n */\\\\n\\\\nGeometricContext geometry;\\\\n\\\\ngeometry.position = - vViewPosition;\\\\ngeometry.normal = normal;\\\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\\\n\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\tgeometry.clearcoatNormal = clearcoatNormal;\\\\n\\\\n#endif\\\\n\\\\nIncidentLight directLight;\\\\n\\\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\n\\\\tPointLight pointLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\tPointLightShadow pointLightShadow;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tpointLight = pointLights[ i ];\\\\n\\\\n\\\\t\\\\tgetPointLightInfo( pointLight, geometry, directLight );\\\\n\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\\\n\\\\t\\\\tpointLightShadow = pointLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\n\\\\tSpotLight spotLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\tSpotLightShadow spotLightShadow;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tspotLight = spotLights[ i ];\\\\n\\\\n\\\\t\\\\tgetSpotLightInfo( spotLight, geometry, directLight );\\\\n\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\\\n\\\\t\\\\tspotLightShadow = spotLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\n\\\\tDirectionalLight directionalLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\tDirectionalLightShadow directionalLightShadow;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tdirectionalLight = directionalLights[ i ];\\\\n\\\\n\\\\t\\\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\\\n\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\\\n\\\\t\\\\tdirectionalLightShadow = directionalLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\\\n\\\\n\\\\tRectAreaLight rectAreaLight;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\trectAreaLight = rectAreaLights[ i ];\\\\n\\\\t\\\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if defined( RE_IndirectDiffuse )\\\\n\\\\n\\\\tvec3 iblIrradiance = vec3( 0.0 );\\\\n\\\\n\\\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\n\\\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\\\n\\\\n\\\\t#if ( NUM_HEMI_LIGHTS > 0 )\\\\n\\\\n\\\\t\\\\t#pragma unroll_loop_start\\\\n\\\\t\\\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\t\\\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\n#if defined( RE_IndirectSpecular )\\\\n\\\\n\\\\tvec3 radiance = vec3( 0.0 );\\\\n\\\\tvec3 clearcoatRadiance = vec3( 0.0 );\\\\n\\\\n#endif\\\\n\\\\\\\",lights_fragment_maps:\\\\\\\"\\\\n#if defined( RE_IndirectDiffuse )\\\\n\\\\n\\\\t#ifdef USE_LIGHTMAP\\\\n\\\\n\\\\t\\\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\\\n\\\\t\\\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\n\\\\t\\\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\\\n\\\\n\\\\t\\\\t\\\\tlightMapIrradiance *= PI;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tirradiance += lightMapIrradiance;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\n\\\\t\\\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\\\n\\\\n\\\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\t\\\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",lights_fragment_end:\\\\\\\"\\\\n#if defined( RE_IndirectDiffuse )\\\\n\\\\n\\\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\\\n\\\\n#endif\\\\n\\\\n#if defined( RE_IndirectSpecular )\\\\n\\\\n\\\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\\\n\\\\n#endif\\\\n\\\\\\\",logdepthbuf_fragment:\\\\\\\"\\\\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\\\n\\\\n\\\\t// Doing a strict comparison with == 1.0 can cause noise artifacts\\\\n\\\\t// on some platforms. See issue #17623.\\\\n\\\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\\\n\\\\n#endif\\\\n\\\\\\\",logdepthbuf_pars_fragment:\\\\\\\"\\\\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\\\n\\\\n\\\\tuniform float logDepthBufFC;\\\\n\\\\tvarying float vFragDepth;\\\\n\\\\tvarying float vIsPerspective;\\\\n\\\\n#endif\\\\n\\\\\\\",logdepthbuf_pars_vertex:\\\\\\\"\\\\n#ifdef USE_LOGDEPTHBUF\\\\n\\\\n\\\\t#ifdef USE_LOGDEPTHBUF_EXT\\\\n\\\\n\\\\t\\\\tvarying float vFragDepth;\\\\n\\\\t\\\\tvarying float vIsPerspective;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tuniform float logDepthBufFC;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",logdepthbuf_vertex:\\\\\\\"\\\\n#ifdef USE_LOGDEPTHBUF\\\\n\\\\n\\\\t#ifdef USE_LOGDEPTHBUF_EXT\\\\n\\\\n\\\\t\\\\tvFragDepth = 1.0 + gl_Position.w;\\\\n\\\\t\\\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position.z *= gl_Position.w;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",map_fragment:\\\\\\\"\\\\n#ifdef USE_MAP\\\\n\\\\n\\\\tvec4 texelColor = texture2D( map, vUv );\\\\n\\\\n\\\\ttexelColor = mapTexelToLinear( texelColor );\\\\n\\\\tdiffuseColor *= texelColor;\\\\n\\\\n#endif\\\\n\\\\\\\",map_pars_fragment:\\\\\\\"\\\\n#ifdef USE_MAP\\\\n\\\\n\\\\tuniform sampler2D map;\\\\n\\\\n#endif\\\\n\\\\\\\",map_particle_fragment:\\\\\\\"\\\\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\\\n\\\\n\\\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_MAP\\\\n\\\\n\\\\tvec4 mapTexel = texture2D( map, uv );\\\\n\\\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\n\\\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\\\n\\\\n#endif\\\\n\\\\\\\",map_particle_pars_fragment:\\\\\\\"\\\\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\\\n\\\\n\\\\tuniform mat3 uvTransform;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_MAP\\\\n\\\\n\\\\tuniform sampler2D map;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\n\\\\tuniform sampler2D alphaMap;\\\\n\\\\n#endif\\\\n\\\\\\\",metalnessmap_fragment:\\\\\\\"\\\\nfloat metalnessFactor = metalness;\\\\n\\\\n#ifdef USE_METALNESSMAP\\\\n\\\\n\\\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\\\n\\\\n\\\\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\tmetalnessFactor *= texelMetalness.b;\\\\n\\\\n#endif\\\\n\\\\\\\",metalnessmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_METALNESSMAP\\\\n\\\\n\\\\tuniform sampler2D metalnessMap;\\\\n\\\\n#endif\\\\n\\\\\\\",morphnormal_vertex:\\\\\\\"\\\\n#ifdef USE_MORPHNORMALS\\\\n\\\\n\\\\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\\\\n\\\\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)\\\\n\\\\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\\\\n\\\\tobjectNormal *= morphTargetBaseInfluence;\\\\n\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\n\\\\t\\\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",morphtarget_pars_vertex:\\\\\\\"\\\\n#ifdef USE_MORPHTARGETS\\\\n\\\\n\\\\tuniform float morphTargetBaseInfluence;\\\\n\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\n\\\\t\\\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\\\n\\\\t\\\\tuniform sampler2DArray morphTargetsTexture;\\\\n\\\\t\\\\tuniform vec2 morphTargetsTextureSize;\\\\n\\\\n\\\\t\\\\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat texelIndex = float( vertexIndex * stride + offset );\\\\n\\\\t\\\\t\\\\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\\\\n\\\\t\\\\t\\\\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\\\\n\\\\t\\\\t\\\\treturn texture( morphTargetsTexture, morphUV ).xyz;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\n\\\\t\\\\t\\\\tuniform float morphTargetInfluences[ 8 ];\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\tuniform float morphTargetInfluences[ 4 ];\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",morphtarget_vertex:\\\\\\\"\\\\n#ifdef USE_MORPHTARGETS\\\\n\\\\n\\\\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\\\\n\\\\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in position = sum((target - base) * influence)\\\\n\\\\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\\\\n\\\\ttransformed *= morphTargetBaseInfluence;\\\\n\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\n\\\\t\\\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\\\n\\\\n\\\\t\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\\\\n\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\\\\n\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\\\n\\\\t\\\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\\\n\\\\t\\\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\\\n\\\\t\\\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\\\n\\\\n\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",normal_fragment_begin:\\\\\\\"\\\\nfloat faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\\\n\\\\n#ifdef FLAT_SHADED\\\\n\\\\n\\\\t// Workaround for Adreno GPUs not able to do dFdx( vViewPosition )\\\\n\\\\n\\\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\\\n\\\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\\\n\\\\tvec3 normal = normalize( cross( fdx, fdy ) );\\\\n\\\\n#else\\\\n\\\\n\\\\tvec3 normal = normalize( vNormal );\\\\n\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\tnormal = normal * faceDirection;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tvec3 tangent = normalize( vTangent );\\\\n\\\\t\\\\tvec3 bitangent = normalize( vBitangent );\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\ttangent = tangent * faceDirection;\\\\n\\\\t\\\\t\\\\tbitangent = bitangent * faceDirection;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\\\n\\\\n\\\\t\\\\t\\\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\n// non perturbed normal for clearcoat among others\\\\n\\\\nvec3 geometryNormal = normal;\\\\n\\\\n\\\\\\\",normal_fragment_maps:\\\\\\\"\\\\n\\\\n#ifdef OBJECTSPACE_NORMALMAP\\\\n\\\\n\\\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals\\\\n\\\\n\\\\t#ifdef FLIP_SIDED\\\\n\\\\n\\\\t\\\\tnormal = - normal;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\tnormal = normal * faceDirection;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tnormal = normalize( normalMatrix * normal );\\\\n\\\\n#elif defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\n\\\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\tmapN.xy *= normalScale;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tnormal = normalize( vTBN * mapN );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#elif defined( USE_BUMPMAP )\\\\n\\\\n\\\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\\\n\\\\n#endif\\\\n\\\\\\\",normal_pars_fragment:\\\\\\\"\\\\n#ifndef FLAT_SHADED\\\\n\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tvarying vec3 vTangent;\\\\n\\\\t\\\\tvarying vec3 vBitangent;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",normal_pars_vertex:\\\\\\\"\\\\n#ifndef FLAT_SHADED\\\\n\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tvarying vec3 vTangent;\\\\n\\\\t\\\\tvarying vec3 vBitangent;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",normal_vertex:\\\\\\\"\\\\n#ifndef FLAT_SHADED // normal is computed with derivatives when FLAT_SHADED\\\\n\\\\n\\\\tvNormal = normalize( transformedNormal );\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tvTangent = normalize( transformedTangent );\\\\n\\\\t\\\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",normalmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_NORMALMAP\\\\n\\\\n\\\\tuniform sampler2D normalMap;\\\\n\\\\tuniform vec2 normalScale;\\\\n\\\\n#endif\\\\n\\\\n#ifdef OBJECTSPACE_NORMALMAP\\\\n\\\\n\\\\tuniform mat3 normalMatrix;\\\\n\\\\n#endif\\\\n\\\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\\\n\\\\n\\\\t// Normal Mapping Without Precomputed Tangents\\\\n\\\\t// http://www.thetenthplanet.de/archives/1180\\\\n\\\\n\\\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\\\n\\\\n\\\\t\\\\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\\\\n\\\\n\\\\t\\\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\\\n\\\\t\\\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\\\n\\\\t\\\\tvec2 st0 = dFdx( vUv.st );\\\\n\\\\t\\\\tvec2 st1 = dFdy( vUv.st );\\\\n\\\\n\\\\t\\\\tvec3 N = surf_norm; // normalized\\\\n\\\\n\\\\t\\\\tvec3 q1perp = cross( q1, N );\\\\n\\\\t\\\\tvec3 q0perp = cross( N, q0 );\\\\n\\\\n\\\\t\\\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\\\n\\\\t\\\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\\\n\\\\n\\\\t\\\\tfloat det = max( dot( T, T ), dot( B, B ) );\\\\n\\\\t\\\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\\\n\\\\n\\\\t\\\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",clearcoat_normal_fragment_begin:\\\\\\\"\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\tvec3 clearcoatNormal = geometryNormal;\\\\n\\\\n#endif\\\\n\\\\\\\",clearcoat_normal_fragment_maps:\\\\\\\"\\\\n#ifdef USE_CLEARCOAT_NORMALMAP\\\\n\\\\n\\\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\tclearcoatMapN.xy *= clearcoatNormalScale;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",clearcoat_pars_fragment:\\\\\\\"\\\\n\\\\n#ifdef USE_CLEARCOATMAP\\\\n\\\\n\\\\tuniform sampler2D clearcoatMap;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\\\n\\\\n\\\\tuniform sampler2D clearcoatRoughnessMap;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_CLEARCOAT_NORMALMAP\\\\n\\\\n\\\\tuniform sampler2D clearcoatNormalMap;\\\\n\\\\tuniform vec2 clearcoatNormalScale;\\\\n\\\\n#endif\\\\n\\\\\\\",output_fragment:\\\\\\\"\\\\n#ifdef OPAQUE\\\\ndiffuseColor.a = 1.0;\\\\n#endif\\\\n\\\\n// https://github.com/mrdoob/three.js/pull/22425\\\\n#ifdef USE_TRANSMISSION\\\\ndiffuseColor.a *= transmissionAlpha + 0.1;\\\\n#endif\\\\n\\\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\\\\n\\\\\\\",packing:\\\\\\\"\\\\nvec3 packNormalToRGB( const in vec3 normal ) {\\\\n\\\\treturn normalize( normal ) * 0.5 + 0.5;\\\\n}\\\\n\\\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\\\n\\\\treturn 2.0 * rgb.xyz - 1.0;\\\\n}\\\\n\\\\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\\\\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\\\\n\\\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\\\n\\\\nconst float ShiftRight8 = 1. / 256.;\\\\n\\\\nvec4 packDepthToRGBA( const in float v ) {\\\\n\\\\tvec4 r = vec4( fract( v * PackFactors ), v );\\\\n\\\\tr.yzw -= r.xyz * ShiftRight8; // tidy overflow\\\\n\\\\treturn r * PackUpscale;\\\\n}\\\\n\\\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\\\n\\\\treturn dot( v, UnpackFactors );\\\\n}\\\\n\\\\nvec4 pack2HalfToRGBA( vec2 v ) {\\\\n\\\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\\\n\\\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\\\n}\\\\n\\\\nvec2 unpackRGBATo2Half( vec4 v ) {\\\\n\\\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\\\n}\\\\n\\\\n// NOTE: viewZ/eyeZ is < 0 when in front of the camera per OpenGL conventions\\\\n\\\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\\\n\\\\treturn ( viewZ + near ) / ( near - far );\\\\n}\\\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\\\n\\\\treturn linearClipZ * ( near - far ) - near;\\\\n}\\\\n\\\\n// NOTE: https://twitter.com/gonnavis/status/1377183786949959682\\\\n\\\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\\\n\\\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\\\n}\\\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\\\n\\\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\\\n}\\\\n\\\\\\\",premultiplied_alpha_fragment:\\\\\\\"\\\\n#ifdef PREMULTIPLIED_ALPHA\\\\n\\\\n\\\\t// Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.\\\\n\\\\tgl_FragColor.rgb *= gl_FragColor.a;\\\\n\\\\n#endif\\\\n\\\\\\\",project_vertex:\\\\\\\"\\\\nvec4 mvPosition = vec4( transformed, 1.0 );\\\\n\\\\n#ifdef USE_INSTANCING\\\\n\\\\n\\\\tmvPosition = instanceMatrix * mvPosition;\\\\n\\\\n#endif\\\\n\\\\nmvPosition = modelViewMatrix * mvPosition;\\\\n\\\\ngl_Position = projectionMatrix * mvPosition;\\\\n\\\\\\\",dithering_fragment:\\\\\\\"\\\\n#ifdef DITHERING\\\\n\\\\n\\\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\\\n\\\\n#endif\\\\n\\\\\\\",dithering_pars_fragment:\\\\\\\"\\\\n#ifdef DITHERING\\\\n\\\\n\\\\t// based on https://www.shadertoy.com/view/MslGR8\\\\n\\\\tvec3 dithering( vec3 color ) {\\\\n\\\\t\\\\t//Calculate grid position\\\\n\\\\t\\\\tfloat grid_position = rand( gl_FragCoord.xy );\\\\n\\\\n\\\\t\\\\t//Shift the individual colors differently, thus making it even harder to see the dithering pattern\\\\n\\\\t\\\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\\\n\\\\n\\\\t\\\\t//modify shift acording to grid position.\\\\n\\\\t\\\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\\\n\\\\n\\\\t\\\\t//shift the color by dither_shift\\\\n\\\\t\\\\treturn color + dither_shift_RGB;\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",roughnessmap_fragment:\\\\\\\"\\\\nfloat roughnessFactor = roughness;\\\\n\\\\n#ifdef USE_ROUGHNESSMAP\\\\n\\\\n\\\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\\\n\\\\n\\\\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\troughnessFactor *= texelRoughness.g;\\\\n\\\\n#endif\\\\n\\\\\\\",roughnessmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ROUGHNESSMAP\\\\n\\\\n\\\\tuniform sampler2D roughnessMap;\\\\n\\\\n#endif\\\\n\\\\\\\",shadowmap_pars_fragment:z,shadowmap_pars_vertex:\\\\\\\"\\\\n#ifdef USE_SHADOWMAP\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct DirectionalLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct SpotLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct PointLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraNear;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraFar;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t/*\\\\n\\\\t#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\t\\\\t// TODO (abelnation): uniforms for area light shadows\\\\n\\\\n\\\\t#endif\\\\n\\\\t*/\\\\n\\\\n#endif\\\\n\\\\\\\",shadowmap_vertex:\\\\\\\"\\\\n#ifdef USE_SHADOWMAP\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\t// Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne.\\\\n\\\\t\\\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\\\n\\\\t\\\\tvec4 shadowWorldPosition;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t/*\\\\n\\\\t#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\t\\\\t// TODO (abelnation): update vAreaShadowCoord with area light info\\\\n\\\\n\\\\t#endif\\\\n\\\\t*/\\\\n\\\\n#endif\\\\n\\\\\\\",shadowmask_pars_fragment:\\\\\\\"\\\\nfloat getShadowMask() {\\\\n\\\\n\\\\tfloat shadow = 1.0;\\\\n\\\\n\\\\t#ifdef USE_SHADOWMAP\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\tDirectionalLightShadow directionalLight;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tdirectionalLight = directionalLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\tSpotLightShadow spotLight;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tspotLight = spotLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\tPointLightShadow pointLight;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tpointLight = pointLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t/*\\\\n\\\\t#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\t\\\\t// TODO (abelnation): update shadow for Area light\\\\n\\\\n\\\\t#endif\\\\n\\\\t*/\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\treturn shadow;\\\\n\\\\n}\\\\n\\\\\\\",skinbase_vertex:\\\\\\\"\\\\n#ifdef USE_SKINNING\\\\n\\\\n\\\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\\\n\\\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\\\n\\\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\\\n\\\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\\\n\\\\n#endif\\\\n\\\\\\\",skinning_pars_vertex:\\\\\\\"\\\\n#ifdef USE_SKINNING\\\\n\\\\n\\\\tuniform mat4 bindMatrix;\\\\n\\\\tuniform mat4 bindMatrixInverse;\\\\n\\\\n\\\\t#ifdef BONE_TEXTURE\\\\n\\\\n\\\\t\\\\tuniform highp sampler2D boneTexture;\\\\n\\\\t\\\\tuniform int boneTextureSize;\\\\n\\\\n\\\\t\\\\tmat4 getBoneMatrix( const in float i ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat j = i * 4.0;\\\\n\\\\t\\\\t\\\\tfloat x = mod( j, float( boneTextureSize ) );\\\\n\\\\t\\\\t\\\\tfloat y = floor( j / float( boneTextureSize ) );\\\\n\\\\n\\\\t\\\\t\\\\tfloat dx = 1.0 / float( boneTextureSize );\\\\n\\\\t\\\\t\\\\tfloat dy = 1.0 / float( boneTextureSize );\\\\n\\\\n\\\\t\\\\t\\\\ty = dy * ( y + 0.5 );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\\\n\\\\n\\\\t\\\\t\\\\tmat4 bone = mat4( v1, v2, v3, v4 );\\\\n\\\\n\\\\t\\\\t\\\\treturn bone;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tuniform mat4 boneMatrices[ MAX_BONES ];\\\\n\\\\n\\\\t\\\\tmat4 getBoneMatrix( const in float i ) {\\\\n\\\\n\\\\t\\\\t\\\\tmat4 bone = boneMatrices[ int(i) ];\\\\n\\\\t\\\\t\\\\treturn bone;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",skinning_vertex:\\\\\\\"\\\\n#ifdef USE_SKINNING\\\\n\\\\n\\\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\\\n\\\\n\\\\tvec4 skinned = vec4( 0.0 );\\\\n\\\\tskinned += boneMatX * skinVertex * skinWeight.x;\\\\n\\\\tskinned += boneMatY * skinVertex * skinWeight.y;\\\\n\\\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\\\n\\\\tskinned += boneMatW * skinVertex * skinWeight.w;\\\\n\\\\n\\\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\\\n\\\\n#endif\\\\n\\\\\\\",skinnormal_vertex:\\\\\\\"\\\\n#ifdef USE_SKINNING\\\\n\\\\n\\\\tmat4 skinMatrix = mat4( 0.0 );\\\\n\\\\tskinMatrix += skinWeight.x * boneMatX;\\\\n\\\\tskinMatrix += skinWeight.y * boneMatY;\\\\n\\\\tskinMatrix += skinWeight.z * boneMatZ;\\\\n\\\\tskinMatrix += skinWeight.w * boneMatW;\\\\n\\\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\\\n\\\\n\\\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",specularmap_fragment:\\\\\\\"\\\\nfloat specularStrength;\\\\n\\\\n#ifdef USE_SPECULARMAP\\\\n\\\\n\\\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\\\n\\\\tspecularStrength = texelSpecular.r;\\\\n\\\\n#else\\\\n\\\\n\\\\tspecularStrength = 1.0;\\\\n\\\\n#endif\\\\n\\\\\\\",specularmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_SPECULARMAP\\\\n\\\\n\\\\tuniform sampler2D specularMap;\\\\n\\\\n#endif\\\\n\\\\\\\",tonemapping_fragment:\\\\\\\"\\\\n#if defined( TONE_MAPPING )\\\\n\\\\n\\\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\\\n\\\\n#endif\\\\n\\\\\\\",tonemapping_pars_fragment:\\\\\\\"\\\\n#ifndef saturate\\\\n// <common> may have defined saturate() already\\\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\\\n#endif\\\\n\\\\nuniform float toneMappingExposure;\\\\n\\\\n// exposure only\\\\nvec3 LinearToneMapping( vec3 color ) {\\\\n\\\\n\\\\treturn toneMappingExposure * color;\\\\n\\\\n}\\\\n\\\\n// source: https://www.cs.utah.edu/~reinhard/cdrom/\\\\nvec3 ReinhardToneMapping( vec3 color ) {\\\\n\\\\n\\\\tcolor *= toneMappingExposure;\\\\n\\\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\\\n\\\\n}\\\\n\\\\n// source: http://filmicworlds.com/blog/filmic-tonemapping-operators/\\\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\\\n\\\\n\\\\t// optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\\\\n\\\\tcolor *= toneMappingExposure;\\\\n\\\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\\\n\\\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\\\n\\\\n}\\\\n\\\\n// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\\\\nvec3 RRTAndODTFit( vec3 v ) {\\\\n\\\\n\\\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\\\n\\\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\\\n\\\\treturn a / b;\\\\n\\\\n}\\\\n\\\\n// this implementation of ACES is modified to accommodate a brighter viewing environment.\\\\n// the scale factor of 1/0.6 is subjective. see discussion in #19621.\\\\n\\\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\\\n\\\\n\\\\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\\\\n\\\\tconst mat3 ACESInputMat = mat3(\\\\n\\\\t\\\\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\\\\n\\\\t\\\\tvec3( 0.35458, 0.90834, 0.13383 ),\\\\n\\\\t\\\\tvec3( 0.04823, 0.01566, 0.83777 )\\\\n\\\\t);\\\\n\\\\n\\\\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\\\\n\\\\tconst mat3 ACESOutputMat = mat3(\\\\n\\\\t\\\\tvec3(  1.60475, -0.10208, -0.00327 ), // transposed from source\\\\n\\\\t\\\\tvec3( -0.53108,  1.10813, -0.07276 ),\\\\n\\\\t\\\\tvec3( -0.07367, -0.00605,  1.07602 )\\\\n\\\\t);\\\\n\\\\n\\\\tcolor *= toneMappingExposure / 0.6;\\\\n\\\\n\\\\tcolor = ACESInputMat * color;\\\\n\\\\n\\\\t// Apply RRT and ODT\\\\n\\\\tcolor = RRTAndODTFit( color );\\\\n\\\\n\\\\tcolor = ACESOutputMat * color;\\\\n\\\\n\\\\t// Clamp to [0, 1]\\\\n\\\\treturn saturate( color );\\\\n\\\\n}\\\\n\\\\nvec3 CustomToneMapping( vec3 color ) { return color; }\\\\n\\\\\\\",transmission_fragment:k,transmission_pars_fragment:\\\\\\\"\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\n\\\\t// Transmission code is based on glTF-Sampler-Viewer\\\\n\\\\t// https://github.com/KhronosGroup/glTF-Sample-Viewer\\\\n\\\\n\\\\tuniform float transmission;\\\\n\\\\tuniform float thickness;\\\\n\\\\tuniform float attenuationDistance;\\\\n\\\\tuniform vec3 attenuationTint;\\\\n\\\\n\\\\t#ifdef USE_TRANSMISSIONMAP\\\\n\\\\n\\\\t\\\\tuniform sampler2D transmissionMap;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_THICKNESSMAP\\\\n\\\\n\\\\t\\\\tuniform sampler2D thicknessMap;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tuniform vec2 transmissionSamplerSize;\\\\n\\\\tuniform sampler2D transmissionSamplerMap;\\\\n\\\\n\\\\tuniform mat4 modelMatrix;\\\\n\\\\tuniform mat4 projectionMatrix;\\\\n\\\\n\\\\tvarying vec3 vWorldPosition;\\\\n\\\\n\\\\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\\\\n\\\\n\\\\t\\\\t// Direction of refracted light.\\\\n\\\\t\\\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\\\n\\\\n\\\\t\\\\t// Compute rotation-independant scaling of the model matrix.\\\\n\\\\t\\\\tvec3 modelScale;\\\\n\\\\t\\\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\\\n\\\\t\\\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\\\n\\\\t\\\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\\\n\\\\n\\\\t\\\\t// The thickness is specified in local space.\\\\n\\\\t\\\\treturn normalize( refractionVector ) * thickness * modelScale;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tfloat applyIorToRoughness( float roughness, float ior ) {\\\\n\\\\n\\\\t\\\\t// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and\\\\n\\\\t\\\\t// an IOR of 1.5 results in the default amount of microfacet refraction.\\\\n\\\\t\\\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\\\\n\\\\n\\\\t\\\\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\\\n\\\\n\\\\t\\\\t#ifdef TEXTURE_LOD_EXT\\\\n\\\\n\\\\t\\\\t\\\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\\\\n\\\\n\\\\t\\\\tif ( attenuationDistance == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t// Attenuation distance is +∞ (which we indicate by zero), i.e. the transmitted color is not attenuated at all.\\\\n\\\\t\\\\t\\\\treturn radiance;\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t// Compute light attenuation using Beer's law.\\\\n\\\\t\\\\t\\\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\\\n\\\\t\\\\t\\\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law\\\\n\\\\t\\\\t\\\\treturn transmittance * radiance;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\\\\n\\\\t\\\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\\\\n\\\\t\\\\tvec3 attenuationColor, float attenuationDistance ) {\\\\n\\\\n\\\\t\\\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\\\n\\\\t\\\\tvec3 refractedRayExit = position + transmissionRay;\\\\n\\\\n\\\\t\\\\t// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\\\\n\\\\t\\\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\\\n\\\\t\\\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\\\n\\\\t\\\\trefractionCoords += 1.0;\\\\n\\\\t\\\\trefractionCoords /= 2.0;\\\\n\\\\n\\\\t\\\\t// Sample framebuffer to get pixel the refracted ray hits.\\\\n\\\\t\\\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\\\n\\\\n\\\\t\\\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\\\n\\\\n\\\\t\\\\t// Get the specular component.\\\\n\\\\t\\\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\\\n\\\\n\\\\t\\\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\\\n\\\\n\\\\t}\\\\n#endif\\\\n\\\\\\\",uv_pars_fragment:\\\\\\\"\\\\n#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\\\n\\\\n\\\\tvarying vec2 vUv;\\\\n\\\\n#endif\\\\n\\\\\\\",uv_pars_vertex:\\\\\\\"\\\\n#ifdef USE_UV\\\\n\\\\n\\\\t#ifdef UVS_VERTEX_ONLY\\\\n\\\\n\\\\t\\\\tvec2 vUv;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tuniform mat3 uvTransform;\\\\n\\\\n#endif\\\\n\\\\\\\",uv_vertex:\\\\\\\"\\\\n#ifdef USE_UV\\\\n\\\\n\\\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\\\n\\\\n#endif\\\\n\\\\\\\",uv2_pars_fragment:\\\\\\\"\\\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\n\\\\tvarying vec2 vUv2;\\\\n\\\\n#endif\\\\n\\\\\\\",uv2_pars_vertex:\\\\\\\"\\\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\n\\\\tattribute vec2 uv2;\\\\n\\\\tvarying vec2 vUv2;\\\\n\\\\n\\\\tuniform mat3 uv2Transform;\\\\n\\\\n#endif\\\\n\\\\\\\",uv2_vertex:\\\\\\\"\\\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\n\\\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\\\n\\\\n#endif\\\\n\\\\\\\",worldpos_vertex:\\\\\\\"\\\\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\\\n\\\\n\\\\tvec4 worldPosition = vec4( transformed, 1.0 );\\\\n\\\\n\\\\t#ifdef USE_INSTANCING\\\\n\\\\n\\\\t\\\\tworldPosition = instanceMatrix * worldPosition;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tworldPosition = modelMatrix * worldPosition;\\\\n\\\\n#endif\\\\n\\\\\\\",background_vert:\\\\\\\"\\\\nvarying vec2 vUv;\\\\nuniform mat3 uvTransform;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\\\n\\\\n\\\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\\\n\\\\n}\\\\n\\\\\\\",background_frag:\\\\\\\"\\\\nuniform sampler2D t2D;\\\\n\\\\nvarying vec2 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 texColor = texture2D( t2D, vUv );\\\\n\\\\n\\\\tgl_FragColor = mapTexelToLinear( texColor );\\\\n\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\n}\\\\n\\\\\\\",cube_vert:\\\\\\\"\\\\nvarying vec3 vWorldDirection;\\\\n\\\\n#include <common>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tgl_Position.z = gl_Position.w; // set z to camera.far\\\\n\\\\n}\\\\n\\\\\\\",cube_frag:\\\\\\\"\\\\n#include <envmap_common_pars_fragment>\\\\nuniform float opacity;\\\\n\\\\nvarying vec3 vWorldDirection;\\\\n\\\\n#include <cube_uv_reflection_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec3 vReflect = vWorldDirection;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\n\\\\tgl_FragColor = envColor;\\\\n\\\\tgl_FragColor.a *= opacity;\\\\n\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\n}\\\\n\\\\\\\",depth_vert:\\\\\\\"\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\\\\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\\\\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\\\\nvarying vec2 vHighPrecisionZW;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\n\\\\t#ifdef USE_DISPLACEMENTMAP\\\\n\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvHighPrecisionZW = gl_Position.zw;\\\\n\\\\n}\\\\n\\\\\\\",depth_frag:\\\\\\\"\\\\n#if DEPTH_PACKING == 3200\\\\n\\\\n\\\\tuniform float opacity;\\\\n\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvarying vec2 vHighPrecisionZW;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( 1.0 );\\\\n\\\\n\\\\t#if DEPTH_PACKING == 3200\\\\n\\\\n\\\\t\\\\tdiffuseColor.a = opacity;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\n\\\\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\\\\n\\\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\\\n\\\\n\\\\t#if DEPTH_PACKING == 3200\\\\n\\\\n\\\\t\\\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\\\n\\\\n\\\\t#elif DEPTH_PACKING == 3201\\\\n\\\\n\\\\t\\\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\\\n\\\\n\\\\t#endif\\\\n\\\\n}\\\\n\\\\\\\",distanceRGBA_vert:\\\\\\\"\\\\n#define DISTANCE\\\\n\\\\nvarying vec3 vWorldPosition;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\n\\\\t#ifdef USE_DISPLACEMENTMAP\\\\n\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\n}\\\\n\\\\\\\",distanceRGBA_frag:\\\\\\\"\\\\n#define DISTANCE\\\\n\\\\nuniform vec3 referencePosition;\\\\nuniform float nearDistance;\\\\nuniform float farDistance;\\\\nvarying vec3 vWorldPosition;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main () {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( 1.0 );\\\\n\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\n\\\\tfloat dist = length( vWorldPosition - referencePosition );\\\\n\\\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\\\n\\\\tdist = saturate( dist ); // clamp to [ 0, 1 ]\\\\n\\\\n\\\\tgl_FragColor = packDepthToRGBA( dist );\\\\n\\\\n}\\\\n\\\\\\\",equirect_vert:\\\\\\\"\\\\nvarying vec3 vWorldDirection;\\\\n\\\\n#include <common>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n}\\\\n\\\\\\\",equirect_frag:\\\\\\\"\\\\nuniform sampler2D tEquirect;\\\\n\\\\nvarying vec3 vWorldDirection;\\\\n\\\\n#include <common>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec3 direction = normalize( vWorldDirection );\\\\n\\\\n\\\\tvec2 sampleUV = equirectUv( direction );\\\\n\\\\n\\\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\\\n\\\\n\\\\tgl_FragColor = mapTexelToLinear( texColor );\\\\n\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\n}\\\\n\\\\\\\",linedashed_vert:\\\\\\\"\\\\nuniform float scale;\\\\nattribute float lineDistance;\\\\n\\\\nvarying float vLineDistance;\\\\n\\\\n#include <common>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvLineDistance = scale * lineDistance;\\\\n\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",linedashed_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\n\\\\nuniform float dashSize;\\\\nuniform float totalSize;\\\\n\\\\nvarying float vLineDistance;\\\\n\\\\n#include <common>\\\\n#include <color_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\\\n\\\\n\\\\t\\\\tdiscard;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\n\\\\toutgoingLight = diffuseColor.rgb; // simple shader\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshbasic_vert:\\\\\\\"\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\\\n\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinbase_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\t\\\\t#include <defaultnormal_vertex>\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",meshbasic_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\n\\\\n#ifndef FLAT_SHADED\\\\n\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\n\\\\t// accumulation (baked indirect lighting only)\\\\n\\\\t#ifdef USE_LIGHTMAP\\\\n\\\\n\\\\t\\\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t// modulation\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\\\n\\\\n\\\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\\\n\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshlambert_vert:\\\\\\\"\\\\n#define LAMBERT\\\\n\\\\nvarying vec3 vLightFront;\\\\nvarying vec3 vIndirectFront;\\\\n\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvarying vec3 vLightBack;\\\\n\\\\tvarying vec3 vIndirectBack;\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <lights_lambert_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\n\\\\\\\",meshlambert_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float opacity;\\\\n\\\\nvarying vec3 vLightFront;\\\\nvarying vec3 vIndirectFront;\\\\n\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvarying vec3 vLightBack;\\\\n\\\\tvarying vec3 vIndirectBack;\\\\n#endif\\\\n\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <fog_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <shadowmask_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\n\\\\t// accumulation\\\\n\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += vIndirectFront;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <lightmap_fragment>\\\\n\\\\n\\\\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\\\\n\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\treflectedLight.directDiffuse = vLightFront;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\\\\n\\\\n\\\\t// modulation\\\\n\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\\\n\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\n\\\\\\\",meshmatcap_vert:\\\\\\\"\\\\n#define MATCAP\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n}\\\\n\\\\\\\",meshmatcap_frag:\\\\\\\"\\\\n#define MATCAP\\\\n\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\nuniform sampler2D matcap;\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <normal_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\n\\\\tvec3 viewDir = normalize( vViewPosition );\\\\n\\\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\\\n\\\\tvec3 y = cross( viewDir, x );\\\\n\\\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks\\\\n\\\\n\\\\t#ifdef USE_MATCAP\\\\n\\\\n\\\\t\\\\tvec4 matcapColor = texture2D( matcap, uv );\\\\n\\\\t\\\\tmatcapColor = matcapTexelToLinear( matcapColor );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvec4 matcapColor = vec4( 1.0 );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshnormal_vert:\\\\\\\"\\\\n#define NORMAL\\\\n\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\n\\\\tvarying vec3 vViewPosition;\\\\n\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n#endif\\\\n\\\\n}\\\\n\\\\\\\",meshnormal_frag:\\\\\\\"\\\\n#define NORMAL\\\\n\\\\nuniform float opacity;\\\\n\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\n\\\\tvarying vec3 vViewPosition;\\\\n\\\\n#endif\\\\n\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <normal_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\n\\\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\\\n\\\\n}\\\\n\\\\\\\",meshphong_vert:\\\\\\\"\\\\n#define PHONG\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",meshphong_frag:\\\\\\\"\\\\n#define PHONG\\\\n\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform vec3 specular;\\\\nuniform float shininess;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_phong_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\n\\\\t// accumulation\\\\n\\\\t#include <lights_phong_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\n\\\\t// modulation\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\\\n\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshphysical_vert:\\\\\\\"\\\\n#define STANDARD\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\n\\\\tvarying vec3 vWorldPosition;\\\\n\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\n#endif\\\\n}\\\\n\\\\\\\",meshphysical_frag:\\\\\\\"\\\\n#define STANDARD\\\\n\\\\n#ifdef PHYSICAL\\\\n\\\\t#define IOR\\\\n\\\\t#define SPECULAR\\\\n#endif\\\\n\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float roughness;\\\\nuniform float metalness;\\\\nuniform float opacity;\\\\n\\\\n#ifdef IOR\\\\n\\\\tuniform float ior;\\\\n#endif\\\\n\\\\n#ifdef SPECULAR\\\\n\\\\tuniform float specularIntensity;\\\\n\\\\tuniform vec3 specularTint;\\\\n\\\\n\\\\t#ifdef USE_SPECULARINTENSITYMAP\\\\n\\\\t\\\\tuniform sampler2D specularIntensityMap;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_SPECULARTINTMAP\\\\n\\\\t\\\\tuniform sampler2D specularTintMap;\\\\n\\\\t#endif\\\\n#endif\\\\n\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tuniform float clearcoat;\\\\n\\\\tuniform float clearcoatRoughness;\\\\n#endif\\\\n\\\\n#ifdef USE_SHEEN\\\\n\\\\tuniform vec3 sheenTint;\\\\n\\\\tuniform float sheenRoughness;\\\\n#endif\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_physical_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_physical_pars_fragment>\\\\n#include <transmission_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <clearcoat_pars_fragment>\\\\n#include <roughnessmap_pars_fragment>\\\\n#include <metalnessmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <roughnessmap_fragment>\\\\n\\\\t#include <metalnessmap_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <clearcoat_normal_fragment_begin>\\\\n\\\\t#include <clearcoat_normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\n\\\\t// accumulation\\\\n\\\\t#include <lights_physical_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\n\\\\t// modulation\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\\\n\\\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\\\n\\\\n\\\\t#include <transmission_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\t\\\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\\\n\\\\n\\\\t\\\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\\\n\\\\n\\\\t\\\\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshtoon_vert:\\\\\\\"\\\\n#define TOON\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",meshtoon_frag:\\\\\\\"\\\\n#define TOON\\\\n\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <gradientmap_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_toon_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\n\\\\t// accumulation\\\\n\\\\t#include <lights_toon_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\n\\\\t// modulation\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",points_vert:\\\\\\\"\\\\nuniform float size;\\\\nuniform float scale;\\\\n\\\\n#include <common>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tgl_PointSize = size;\\\\n\\\\n\\\\t#ifdef USE_SIZEATTENUATION\\\\n\\\\n\\\\t\\\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\\\n\\\\n\\\\t\\\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",points_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <color_pars_fragment>\\\\n#include <map_particle_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_particle_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\n}\\\\n\\\\\\\",shadow_vert:\\\\\\\"\\\\n#include <common>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",shadow_frag:\\\\\\\"\\\\nuniform vec3 color;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <shadowmask_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\\\n\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\n}\\\\n\\\\\\\",sprite_vert:\\\\\\\"\\\\nuniform float rotation;\\\\nuniform vec2 center;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\n\\\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\n\\\\tvec2 scale;\\\\n\\\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\\\n\\\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\\\n\\\\n\\\\t#ifndef USE_SIZEATTENUATION\\\\n\\\\n\\\\t\\\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\\\n\\\\n\\\\t\\\\tif ( isPerspective ) scale *= - mvPosition.z;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\\\n\\\\n\\\\tvec2 rotatedPosition;\\\\n\\\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\\\n\\\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\\\n\\\\n\\\\tmvPosition.xy += rotatedPosition;\\\\n\\\\n\\\\tgl_Position = projectionMatrix * mvPosition;\\\\n\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",sprite_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\n}\\\\n\\\\\\\"};var G=n(11);const V={common:{diffuse:{value:new D.a(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new G.a},uv2Transform:{value:new G.a},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new d.a(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new D.a(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new D.a(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new G.a}},sprite:{diffuse:{value:new D.a(16777215)},opacity:{value:1},center:{value:new d.a(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new G.a}}},H={basic:{uniforms:R([V.common,V.specularmap,V.envmap,V.aomap,V.lightmap,V.fog]),vertexShader:U.meshbasic_vert,fragmentShader:U.meshbasic_frag},lambert:{uniforms:R([V.common,V.specularmap,V.envmap,V.aomap,V.lightmap,V.emissivemap,V.fog,V.lights,{emissive:{value:new D.a(0)}}]),vertexShader:U.meshlambert_vert,fragmentShader:U.meshlambert_frag},phong:{uniforms:R([V.common,V.specularmap,V.envmap,V.aomap,V.lightmap,V.emissivemap,V.bumpmap,V.normalmap,V.displacementmap,V.fog,V.lights,{emissive:{value:new D.a(0)},specular:{value:new D.a(1118481)},shininess:{value:30}}]),vertexShader:U.meshphong_vert,fragmentShader:U.meshphong_frag},standard:{uniforms:R([V.common,V.envmap,V.aomap,V.lightmap,V.emissivemap,V.bumpmap,V.normalmap,V.displacementmap,V.roughnessmap,V.metalnessmap,V.fog,V.lights,{emissive:{value:new D.a(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:U.meshphysical_vert,fragmentShader:U.meshphysical_frag},toon:{uniforms:R([V.common,V.aomap,V.lightmap,V.emissivemap,V.bumpmap,V.normalmap,V.displacementmap,V.gradientmap,V.fog,V.lights,{emissive:{value:new D.a(0)}}]),vertexShader:U.meshtoon_vert,fragmentShader:U.meshtoon_frag},matcap:{uniforms:R([V.common,V.bumpmap,V.normalmap,V.displacementmap,V.fog,{matcap:{value:null}}]),vertexShader:U.meshmatcap_vert,fragmentShader:U.meshmatcap_frag},points:{uniforms:R([V.points,V.fog]),vertexShader:U.points_vert,fragmentShader:U.points_frag},dashed:{uniforms:R([V.common,V.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:U.linedashed_vert,fragmentShader:U.linedashed_frag},depth:{uniforms:R([V.common,V.displacementmap]),vertexShader:U.depth_vert,fragmentShader:U.depth_frag},normal:{uniforms:R([V.common,V.bumpmap,V.normalmap,V.displacementmap,{opacity:{value:1}}]),vertexShader:U.meshnormal_vert,fragmentShader:U.meshnormal_frag},sprite:{uniforms:R([V.sprite,V.fog]),vertexShader:U.sprite_vert,fragmentShader:U.sprite_frag},background:{uniforms:{uvTransform:{value:new G.a},t2D:{value:null}},vertexShader:U.background_vert,fragmentShader:U.background_frag},cube:{uniforms:R([V.envmap,{opacity:{value:1}}]),vertexShader:U.cube_vert,fragmentShader:U.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:U.equirect_vert,fragmentShader:U.equirect_frag},distanceRGBA:{uniforms:R([V.common,V.displacementmap,{referencePosition:{value:new p.a},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:U.distanceRGBA_vert,fragmentShader:U.distanceRGBA_frag},shadow:{uniforms:R([V.lights,V.fog,{color:{value:new D.a(0)},opacity:{value:1}}]),vertexShader:U.shadow_vert,fragmentShader:U.shadow_frag}};function j(t,e,n,i,s){const r=new D.a(0);let o,a,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,s)}return{getClearColor:function(){return r},setClearColor:function(t,e=1){r.set(t),l=e,d(r,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(r,l)},render:function(n,s){let p=!1,_=!0===s.isScene?s.background:null;_&&_.isTexture&&(_=e.get(_));const m=t.xr,f=m.getSession&&m.getSession();f&&\\\\\\\"additive\\\\\\\"===f.environmentBlendMode&&(_=null),null===_?d(r,l):_&&_.isColor&&(d(_,1),p=!0),(t.autoClear||p)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),_&&(_.isCubeTexture||_.mapping===w.q)?(void 0===a&&(a=new B.a(new N(1,1,1),new F({name:\\\\\\\"BackgroundCubeMaterial\\\\\\\",uniforms:P(H.cube.uniforms),vertexShader:H.cube.vertexShader,fragmentShader:H.cube.fragmentShader,side:w.i,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\"),a.geometry.deleteAttribute(\\\\\\\"uv\\\\\\\"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,\\\\\\\"envMap\\\\\\\",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),a.material.uniforms.envMap.value=_,a.material.uniforms.flipEnvMap.value=_.isCubeTexture&&!1===_.isRenderTargetTexture?-1:1,c===_&&h===_.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=_,h=_.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):_&&_.isTexture&&(void 0===o&&(o=new B.a(new L(2,2),new F({name:\\\\\\\"BackgroundMaterial\\\\\\\",uniforms:P(H.background.uniforms),vertexShader:H.background.vertexShader,fragmentShader:H.background.fragmentShader,side:w.H,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\"),Object.defineProperty(o.material,\\\\\\\"map\\\\\\\",{get:function(){return this.uniforms.t2D.value}}),i.update(o)),o.material.uniforms.t2D.value=_,!0===_.matrixAutoUpdate&&_.updateMatrix(),o.material.uniforms.uvTransform.value.copy(_.matrix),c===_&&h===_.version&&u===t.toneMapping||(o.material.needsUpdate=!0,c=_,h=_.version,u=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null))}}}function W(t,e,n,i){const s=t.getParameter(t.MAX_VERTEX_ATTRIBS),r=i.isWebGL2?null:e.get(\\\\\\\"OES_vertex_array_object\\\\\\\"),o=i.isWebGL2||null!==r,a={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):r.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):r.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t<s;t++)e[t]=0,n[t]=0,i[t]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:e,enabledAttributes:n,attributeDivisors:i,object:t,attributes:{},index:null}}function p(){const t=c.newAttributes;for(let e=0,n=t.length;e<n;e++)t[e]=0}function _(t){m(t,0)}function m(n,s){const r=c.newAttributes,o=c.enabledAttributes,a=c.attributeDivisors;if(r[n]=1,0===o[n]&&(t.enableVertexAttribArray(n),o[n]=1),a[n]!==s){(i.isWebGL2?t:e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"))[i.isWebGL2?\\\\\\\"vertexAttribDivisor\\\\\\\":\\\\\\\"vertexAttribDivisorANGLE\\\\\\\"](n,s),a[n]=s}}function f(){const e=c.newAttributes,n=c.enabledAttributes;for(let i=0,s=n.length;i<s;i++)n[i]!==e[i]&&(t.disableVertexAttribArray(i),n[i]=0)}function g(e,n,s,r,o,a){!0!==i.isWebGL2||s!==t.INT&&s!==t.UNSIGNED_INT?t.vertexAttribPointer(e,n,s,r,o,a):t.vertexAttribIPointer(e,n,s,o,a)}function v(){y(),c!==l&&(c=l,h(c.object))}function y(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:function(s,l,u,v,y){let x=!1;if(o){const e=function(e,n,s){const o=!0===s.wireframe;let l=a[e.id];void 0===l&&(l={},a[e.id]=l);let c=l[n.id];void 0===c&&(c={},l[n.id]=c);let h=c[o];void 0===h&&(h=d(i.isWebGL2?t.createVertexArray():r.createVertexArrayOES()),c[o]=h);return h}(v,u,l);c!==e&&(c=e,h(c.object)),x=function(t,e){const n=c.attributes,i=t.attributes;let s=0;for(const t in i){const e=n[t],r=i[t];if(void 0===e)return!0;if(e.attribute!==r)return!0;if(e.data!==r.data)return!0;s++}return c.attributesNum!==s||c.index!==e}(v,y),x&&function(t,e){const n={},i=t.attributes;let s=0;for(const t in i){const e=i[t],r={};r.attribute=e,e.data&&(r.data=e.data),n[t]=r,s++}c.attributes=n,c.attributesNum=s,c.index=e}(v,y)}else{const t=!0===l.wireframe;c.geometry===v.id&&c.program===u.id&&c.wireframe===t||(c.geometry=v.id,c.program=u.id,c.wireframe=t,x=!0)}!0===s.isInstancedMesh&&(x=!0),null!==y&&n.update(y,t.ELEMENT_ARRAY_BUFFER),x&&(!function(s,r,o,a){if(!1===i.isWebGL2&&(s.isInstancedMesh||a.isInstancedBufferGeometry)&&null===e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"))return;p();const l=a.attributes,c=o.getAttributes(),h=r.defaultAttributeValues;for(const e in c){const i=c[e];if(i.location>=0){let r=l[e];if(void 0===r&&(\\\\\\\"instanceMatrix\\\\\\\"===e&&s.instanceMatrix&&(r=s.instanceMatrix),\\\\\\\"instanceColor\\\\\\\"===e&&s.instanceColor&&(r=s.instanceColor)),void 0!==r){const e=r.normalized,o=r.itemSize,l=n.get(r);if(void 0===l)continue;const c=l.buffer,h=l.type,u=l.bytesPerElement;if(r.isInterleavedBufferAttribute){const n=r.data,l=n.stride,d=r.offset;if(n&&n.isInstancedInterleavedBuffer){for(let t=0;t<i.locationSize;t++)m(i.location+t,n.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)}else for(let t=0;t<i.locationSize;t++)_(i.location+t);t.bindBuffer(t.ARRAY_BUFFER,c);for(let t=0;t<i.locationSize;t++)g(i.location+t,o/i.locationSize,h,e,l*u,(d+o/i.locationSize*t)*u)}else{if(r.isInstancedBufferAttribute){for(let t=0;t<i.locationSize;t++)m(i.location+t,r.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===a._maxInstanceCount&&(a._maxInstanceCount=r.meshPerAttribute*r.count)}else for(let t=0;t<i.locationSize;t++)_(i.location+t);t.bindBuffer(t.ARRAY_BUFFER,c);for(let t=0;t<i.locationSize;t++)g(i.location+t,o/i.locationSize,h,e,o*u,o/i.locationSize*t*u)}}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i.location,n);break;case 3:t.vertexAttrib3fv(i.location,n);break;case 4:t.vertexAttrib4fv(i.location,n);break;default:t.vertexAttrib1fv(i.location,n)}}}}f()}(s,l,u,v),null!==y&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,n.get(y).buffer))},reset:v,resetDefaultState:y,dispose:function(){v();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:_,disableUnusedAttributes:f}}function q(t,e,n,i){const s=i.isWebGL2;let r;this.setMode=function(t){r=t},this.render=function(e,i){t.drawArrays(r,e,i),n.update(i,r,1)},this.renderInstances=function(i,o,a){if(0===a)return;let l,c;if(s)l=t,c=\\\\\\\"drawArraysInstanced\\\\\\\";else if(l=e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"),c=\\\\\\\"drawArraysInstancedANGLE\\\\\\\",null===l)return void console.error(\\\\\\\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");l[c](r,i,o,a),n.update(o,r,a)}}function X(t,e,n){let i;function s(e){if(\\\\\\\"highp\\\\\\\"===e){if(t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.HIGH_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision>0)return\\\\\\\"highp\\\\\\\";e=\\\\\\\"mediump\\\\\\\"}return\\\\\\\"mediump\\\\\\\"===e&&t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.MEDIUM_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision>0?\\\\\\\"mediump\\\\\\\":\\\\\\\"lowp\\\\\\\"}const r=\\\\\\\"undefined\\\\\\\"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||\\\\\\\"undefined\\\\\\\"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let o=void 0!==n.precision?n.precision:\\\\\\\"highp\\\\\\\";const a=s(o);a!==o&&(console.warn(\\\\\\\"THREE.WebGLRenderer:\\\\\\\",o,\\\\\\\"not supported, using\\\\\\\",a,\\\\\\\"instead.\\\\\\\"),o=a);const l=r||e.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),u=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),d=t.getParameter(t.MAX_TEXTURE_SIZE),p=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),_=t.getParameter(t.MAX_VERTEX_ATTRIBS),m=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),f=t.getParameter(t.MAX_VARYING_VECTORS),g=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),v=u>0,y=r||e.has(\\\\\\\"OES_texture_float\\\\\\\");return{isWebGL2:r,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")){const n=e.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:s,precision:o,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:_,maxVertexUniforms:m,maxVaryings:f,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:r?t.getParameter(t.MAX_SAMPLES):0}}H.physical={uniforms:R([H.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new d.a(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenTint:{value:new D.a(0)},sheenRoughness:{value:0},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new d.a},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationTint:{value:new D.a(0)},specularIntensity:{value:0},specularIntensityMap:{value:null},specularTint:{value:new D.a(1,1,1)},specularTintMap:{value:null}}]),vertexShader:U.meshphysical_vert,fragmentShader:U.meshphysical_frag};var Y=n(31);function $(t){const e=this;let n=null,i=0,s=!1,r=!1;const o=new Y.a,a=new G.a,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,s){const r=null!==t?t.length:0;let c=null;if(0!==r){if(c=l.value,!0!==s||null===c){const e=i+4*r,s=n.matrixWorldInverse;a.getNormalMatrix(s),(null===c||c.length<e)&&(c=new Float32Array(e));for(let e=0,n=i;e!==r;++e,n+=4)o.copy(t[e]).applyMatrix4(s,a),o.normal.toArray(c,n),c[n+3]=o.constant}l.value=c,l.needsUpdate=!0}return e.numPlanes=r,e.numIntersection=0,c}this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,r){const o=0!==t.length||e||0!==i||s;return s=e,n=h(t,r,0),i=t.length,o},this.beginShadows=function(){r=!0,h(null)},this.endShadows=function(){r=!1,c()},this.setState=function(e,o,a){const u=e.clippingPlanes,d=e.clipIntersection,p=e.clipShadows,_=t.get(e);if(!s||null===u||0===u.length||r&&!p)r?h(null):c();else{const t=r?0:i,e=4*t;let s=_.clippingState||null;l.value=s,s=h(u,o,e,a);for(let t=0;t!==e;++t)s[t]=n[t];_.clippingState=s,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}var J=n(15),Z=n(23);class K extends J.a{constructor(t,e,n={}){super(),this.width=t,this.height=e,this.depth=1,this.scissor=new _.a(0,0,t,e),this.scissorTest=!1,this.viewport=new _.a(0,0,t,e),this.texture=new Z.a(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.isRenderTargetTexture=!0,this.texture.image={width:t,height:e,depth:1},this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.internalFormat=void 0!==n.internalFormat?n.internalFormat:null,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:w.V,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setTexture(t){t.image={width:this.width,height:this.height,depth:this.depth},this.texture=t}setSize(t,e,n=1){this.width===t&&this.height===e&&this.depth===n||(this.width=t,this.height=e,this.depth=n,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.image={...this.texture.image},this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}K.prototype.isWebGLRenderTarget=!0;var Q=n(10),tt=n(30);const et=90;class nt extends Q.a{constructor(t,e,n){if(super(),this.type=\\\\\\\"CubeCamera\\\\\\\",!0!==n.isWebGLCubeRenderTarget)return void console.error(\\\\\\\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\\\\\\\");this.renderTarget=n;const i=new tt.a(et,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new p.a(1,0,0)),this.add(i);const s=new tt.a(et,1,t,e);s.layers=this.layers,s.up.set(0,-1,0),s.lookAt(new p.a(-1,0,0)),this.add(s);const r=new tt.a(et,1,t,e);r.layers=this.layers,r.up.set(0,0,1),r.lookAt(new p.a(0,1,0)),this.add(r);const o=new tt.a(et,1,t,e);o.layers=this.layers,o.up.set(0,0,-1),o.lookAt(new p.a(0,-1,0)),this.add(o);const a=new tt.a(et,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new p.a(0,0,1)),this.add(a);const l=new tt.a(et,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new p.a(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,s,r,o,a,l]=this.children,c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,s),t.setRenderTarget(n,2),t.render(e,r),t.setRenderTarget(n,3),t.render(e,o),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}class it extends Z.a{constructor(t,e,n,i,s,r,o,a,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:w.o,n,i,s,r,o,a,l,c),this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}it.prototype.isCubeTexture=!0;class st extends K{constructor(t,e,n){Number.isInteger(e)&&(console.warn(\\\\\\\"THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )\\\\\\\"),e=n),super(t,t,e),e=e||{},this.texture=new it(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:w.V,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=w.Ib,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec3 vWorldDirection;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <begin_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <project_vertex>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D tEquirect;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec3 vWorldDirection;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec3 direction = normalize( vWorldDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 sampleUV = equirectUv( direction );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\\\\"},i=new N(5,5,5),s=new F({name:\\\\\\\"CubemapFromEquirect\\\\\\\",uniforms:P(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:w.i,blending:w.ub});s.uniforms.tEquirect.value=e;const r=new B.a(i,s),o=e.minFilter;e.minFilter===w.Y&&(e.minFilter=w.V);return new nt(1,10,this).update(t,r),e.minFilter=o,r.geometry.dispose(),r.material.dispose(),this}clear(t,e,n,i){const s=t.getRenderTarget();for(let s=0;s<6;s++)t.setRenderTarget(this,s),t.clear(e,n,i);t.setRenderTarget(s)}}function rt(t){let e=new WeakMap;function n(t,e){return e===w.D?t.mapping=w.o:e===w.E&&(t.mapping=w.p),t}function i(t){const n=t.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",i);const s=e.get(n);void 0!==s&&(e.delete(n),s.dispose())}return{get:function(s){if(s&&s.isTexture&&!1===s.isRenderTargetTexture){const r=s.mapping;if(r===w.D||r===w.E){if(e.has(s)){return n(e.get(s).texture,s.mapping)}{const r=s.image;if(r&&r.height>0){const o=t.getRenderTarget(),a=new st(r.height/2);return a.fromEquirectangularTexture(t,s),e.set(s,a),t.setRenderTarget(o),s.addEventListener(\\\\\\\"dispose\\\\\\\",i),n(a.texture,s.mapping)}return null}}}return s},dispose:function(){e=new WeakMap}}}st.prototype.isWebGLCubeRenderTarget=!0;var ot=n(37);class at extends F{constructor(t){super(t),this.type=\\\\\\\"RawShaderMaterial\\\\\\\"}}at.prototype.isRawShaderMaterial=!0;var lt=n(29);const ct=Math.pow(2,8),ht=[.125,.215,.35,.446,.526,.582],ut=5+ht.length,dt=20,pt={[w.U]:0,[w.ld]:1,[w.gc]:2,[w.lc]:3,[w.kc]:4,[w.fc]:5,[w.J]:6},_t=new ot.a,{_lodPlanes:mt,_sizeLods:ft,_sigmas:gt}=Mt(),vt=new D.a;let yt=null;const xt=(1+Math.sqrt(5))/2,bt=1/xt,wt=[new p.a(1,1,1),new p.a(-1,1,1),new p.a(1,1,-1),new p.a(-1,1,-1),new p.a(0,xt,bt),new p.a(0,xt,-bt),new p.a(bt,0,xt),new p.a(-bt,0,xt),new p.a(xt,bt,0),new p.a(-xt,bt,0)];class Tt{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=function(t){const e=new Float32Array(t),n=new p.a(0,1,0);return new at({name:\\\\\\\"SphericalGaussianBlur\\\\\\\",defines:{n:t},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n},inputEncoding:{value:pt[w.U]},outputEncoding:{value:pt[w.U]}},vertexShader:Lt(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t\\\\t\\\\tuniform int samples;\\\\n\\\\t\\\\t\\\\tuniform float weights[ n ];\\\\n\\\\t\\\\t\\\\tuniform bool latitudinal;\\\\n\\\\t\\\\t\\\\tuniform float dTheta;\\\\n\\\\t\\\\t\\\\tuniform float mipInt;\\\\n\\\\t\\\\t\\\\tuniform vec3 poleAxis;\\\\n\\\\n\\\\t\\\\t\\\\t${Ot()}\\\\n\\\\n\\\\t\\\\t\\\\t#define ENVMAP_TYPE_CUBE_UV\\\\n\\\\t\\\\t\\\\t#include <cube_uv_reflection_fragment>\\\\n\\\\n\\\\t\\\\t\\\\tvec3 getSample( float theta, vec3 axis ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat cosTheta = cos( theta );\\\\n\\\\t\\\\t\\\\t\\\\t// Rodrigues' axis-angle rotation\\\\n\\\\t\\\\t\\\\t\\\\tvec3 sampleDirection = vOutputDirection * cosTheta\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ cross( axis, vOutputDirection ) * sin( theta )\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\taxis = normalize( axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfor ( int i = 1; i < n; i++ ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ( i >= samples ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat theta = dTheta * float( i );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:w.ub,depthTest:!1,depthWrite:!1})}(dt),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){yt=this._renderer.getRenderTarget();const s=this._allocateTargets();return this._sceneToCubeUV(t,n,i,s),e>0&&this._blur(s,0,0,e),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=Nt(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=Ct(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let t=0;t<mt.length;t++)mt[t].dispose()}_cleanup(t){this._pingPongRenderTarget.dispose(),this._renderer.setRenderTarget(yt),t.scissorTest=!1,St(t,0,0,t.width,t.height)}_fromTexture(t){yt=this._renderer.getRenderTarget();const e=this._allocateTargets(t);return this._textureToCubeUV(t,e),this._applyPMREM(e),this._cleanup(e),e}_allocateTargets(t){const e={magFilter:w.ob,minFilter:w.ob,generateMipmaps:!1,type:w.Zc,format:w.hc,encoding:At(t)?t.encoding:w.gc,depthBuffer:!1},n=Et(e);return n.depthBuffer=!t,this._pingPongRenderTarget=Et(e),n}_compileMaterial(t){const e=new B.a(mt[0],t);this._renderer.compile(e,_t)}_sceneToCubeUV(t,e,n,i){const s=new tt.a(90,1,e,n),r=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],a=this._renderer,l=a.autoClear,c=a.outputEncoding,h=a.toneMapping;a.getClearColor(vt),a.toneMapping=w.vb,a.outputEncoding=w.U,a.autoClear=!1;const u=new lt.a({name:\\\\\\\"PMREM.Background\\\\\\\",side:w.i,depthWrite:!1,depthTest:!1}),d=new B.a(new N,u);let p=!1;const _=t.background;_?_.isColor&&(u.color.copy(_),t.background=null,p=!0):(u.color.copy(vt),p=!0);for(let e=0;e<6;e++){const n=e%3;0==n?(s.up.set(0,r[e],0),s.lookAt(o[e],0,0)):1==n?(s.up.set(0,0,r[e]),s.lookAt(0,o[e],0)):(s.up.set(0,r[e],0),s.lookAt(0,0,o[e])),St(i,n*ct,e>2?ct:0,ct,ct),a.setRenderTarget(i),p&&a.render(d,s),a.render(t,s)}d.geometry.dispose(),d.material.dispose(),a.toneMapping=h,a.outputEncoding=c,a.autoClear=l,t.background=_}_setEncoding(t,e){!0===this._renderer.capabilities.isWebGL2&&e.format===w.Ib&&e.type===w.Zc&&e.encoding===w.ld?t.value=pt[w.U]:t.value=pt[e.encoding]}_textureToCubeUV(t,e){const n=this._renderer;t.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=Nt()):null==this._equirectShader&&(this._equirectShader=Ct());const i=t.isCubeTexture?this._cubemapShader:this._equirectShader,s=new B.a(mt[0],i),r=i.uniforms;r.envMap.value=t,t.isCubeTexture||r.texelSize.value.set(1/t.image.width,1/t.image.height),this._setEncoding(r.inputEncoding,t),this._setEncoding(r.outputEncoding,e.texture),St(e,0,0,3*ct,2*ct),n.setRenderTarget(e),n.render(s,_t)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;e<ut;e++){const n=Math.sqrt(gt[e]*gt[e]-gt[e-1]*gt[e-1]),i=wt[(e-1)%wt.length];this._blur(t,e-1,e,n,i)}e.autoClear=n}_blur(t,e,n,i,s){const r=this._pingPongRenderTarget;this._halfBlur(t,r,e,n,i,\\\\\\\"latitudinal\\\\\\\",s),this._halfBlur(r,t,n,n,i,\\\\\\\"longitudinal\\\\\\\",s)}_halfBlur(t,e,n,i,s,r,o){const a=this._renderer,l=this._blurMaterial;\\\\\\\"latitudinal\\\\\\\"!==r&&\\\\\\\"longitudinal\\\\\\\"!==r&&console.error(\\\\\\\"blur direction must be either latitudinal or longitudinal!\\\\\\\");const c=new B.a(mt[i],l),h=l.uniforms,u=ft[n]-1,d=isFinite(s)?Math.PI/(2*u):2*Math.PI/39,p=s/d,_=isFinite(s)?1+Math.floor(3*p):dt;_>dt&&console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${_} samples when the maximum is set to 20`);const m=[];let f=0;for(let t=0;t<dt;++t){const e=t/p,n=Math.exp(-e*e/2);m.push(n),0==t?f+=n:t<_&&(f+=2*n)}for(let t=0;t<m.length;t++)m[t]=m[t]/f;h.envMap.value=t.texture,h.samples.value=_,h.weights.value=m,h.latitudinal.value=\\\\\\\"latitudinal\\\\\\\"===r,o&&(h.poleAxis.value=o),h.dTheta.value=d,h.mipInt.value=8-n,this._setEncoding(h.inputEncoding,t.texture),this._setEncoding(h.outputEncoding,t.texture);const g=ft[i];St(e,3*Math.max(0,ct-2*g),(0===i?0:2*ct)+2*g*(i>4?i-8+4:0),3*g,2*g),a.setRenderTarget(e),a.render(c,_t)}}function At(t){return void 0!==t&&t.type===w.Zc&&(t.encoding===w.U||t.encoding===w.ld||t.encoding===w.J)}function Mt(){const t=[],e=[],n=[];let i=8;for(let s=0;s<ut;s++){const r=Math.pow(2,i);e.push(r);let o=1/r;s>4?o=ht[s-8+4-1]:0==s&&(o=0),n.push(o);const a=1/(r-1),l=-a/2,c=1+a/2,h=[l,l,c,l,c,c,l,l,c,c,l,c],u=6,d=6,p=3,_=2,m=1,f=new Float32Array(p*d*u),g=new Float32Array(_*d*u),v=new Float32Array(m*d*u);for(let t=0;t<u;t++){const e=t%3*2/3-1,n=t>2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];f.set(i,p*d*t),g.set(h,_*d*t);const s=[t,t,t,t,t,t];v.set(s,m*d*t)}const y=new S.a;y.setAttribute(\\\\\\\"position\\\\\\\",new C.a(f,p)),y.setAttribute(\\\\\\\"uv\\\\\\\",new C.a(g,_)),y.setAttribute(\\\\\\\"faceIndex\\\\\\\",new C.a(v,m)),t.push(y),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function Et(t){const e=new K(3*ct,3*ct,t);return e.texture.mapping=w.q,e.texture.name=\\\\\\\"PMREM.cubeUv\\\\\\\",e.scissorTest=!0,e}function St(t,e,n,i,s){t.viewport.set(e,n,i,s),t.scissor.set(e,n,i,s)}function Ct(){const t=new d.a(1,1);return new at({name:\\\\\\\"EquirectangularToCubeUV\\\\\\\",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:pt[w.U]},outputEncoding:{value:pt[w.U]}},vertexShader:Lt(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t\\\\t\\\\tuniform vec2 texelSize;\\\\n\\\\n\\\\t\\\\t\\\\t${Ot()}\\\\n\\\\n\\\\t\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 outputDirection = normalize( vOutputDirection );\\\\n\\\\t\\\\t\\\\t\\\\tvec2 uv = equirectUv( outputDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec2 f = fract( uv / texelSize - 0.5 );\\\\n\\\\t\\\\t\\\\t\\\\tuv -= f * texelSize;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.x += texelSize.x;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.y += texelSize.y;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.x -= texelSize.x;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tm = mix( tl, tr, f.x );\\\\n\\\\t\\\\t\\\\t\\\\tvec3 bm = mix( bl, br, f.x );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = mix( tm, bm, f.y );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:w.ub,depthTest:!1,depthWrite:!1})}function Nt(){return new at({name:\\\\\\\"CubemapToCubeUV\\\\\\\",uniforms:{envMap:{value:null},inputEncoding:{value:pt[w.U]},outputEncoding:{value:pt[w.U]}},vertexShader:Lt(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform samplerCube envMap;\\\\n\\\\n\\\\t\\\\t\\\\t${Ot()}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:w.ub,depthTest:!1,depthWrite:!1})}function Lt(){return\\\\\\\"\\\\n\\\\n\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\tattribute vec3 position;\\\\n\\\\t\\\\tattribute vec2 uv;\\\\n\\\\t\\\\tattribute float faceIndex;\\\\n\\\\n\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t// RH coordinate system; PMREM face-indexing convention\\\\n\\\\t\\\\tvec3 getDirection( vec2 uv, float face ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = 2.0 * uv - 1.0;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 direction = vec3( uv, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\tif ( face == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.zyx; // ( 1, v, u ) pos x\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 1.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.xzy;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 2.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 3.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.zyx;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 4.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.xzy;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 5.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\treturn direction;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvOutputDirection = getDirection( uv, faceIndex );\\\\n\\\\t\\\\t\\\\tgl_Position = vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\\\\"}function Ot(){return\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform int inputEncoding;\\\\n\\\\t\\\\tuniform int outputEncoding;\\\\n\\\\n\\\\t\\\\t#include <encodings_pars_fragment>\\\\n\\\\n\\\\t\\\\tvec4 inputTexelToLinear( vec4 value ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( inputEncoding == 0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn value;\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 1 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn sRGBToLinear( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 2 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBEToLinear( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 3 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBMToLinear( value, 7.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 4 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBMToLinear( value, 16.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 5 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBDToLinear( value, 256.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn GammaToLinear( value, 2.2 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec4 linearToOutputTexel( vec4 value ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( outputEncoding == 0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn value;\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 1 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearTosRGB( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 2 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBE( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 3 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBM( value, 7.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 4 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBM( value, 16.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 5 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBD( value, 256.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToGamma( value, 2.2 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec4 envMapTexelToLinear( vec4 color ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn inputTexelToLinear( color );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\\\\"}function Pt(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",i);const s=e.get(n);void 0!==s&&(e.delete(n),s.dispose())}return{get:function(s){if(s&&s.isTexture&&!1===s.isRenderTargetTexture){const r=s.mapping,o=r===w.D||r===w.E,a=r===w.o||r===w.p;if(o||a){if(e.has(s))return e.get(s).texture;{const r=s.image;if(o&&r&&r.height>0||a&&r&&function(t){let e=0;const n=6;for(let i=0;i<n;i++)void 0!==t[i]&&e++;return e===n}(r)){const r=t.getRenderTarget();null===n&&(n=new Tt(t));const a=o?n.fromEquirectangular(s):n.fromCubemap(s);return e.set(s,a),t.setRenderTarget(r),s.addEventListener(\\\\\\\"dispose\\\\\\\",i),a.texture}return null}}}return s},dispose:function(){e=new WeakMap,null!==n&&(n.dispose(),n=null)}}}function Rt(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case\\\\\\\"WEBGL_depth_texture\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_depth_texture\\\\\\\")||t.getExtension(\\\\\\\"MOZ_WEBGL_depth_texture\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_depth_texture\\\\\\\");break;case\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\":i=t.getExtension(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")||t.getExtension(\\\\\\\"MOZ_EXT_texture_filter_anisotropic\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_EXT_texture_filter_anisotropic\\\\\\\");break;case\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\")||t.getExtension(\\\\\\\"MOZ_WEBGL_compressed_texture_s3tc\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_s3tc\\\\\\\");break;case\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_pvrtc\\\\\\\");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n(\\\\\\\"EXT_color_buffer_float\\\\\\\"):(n(\\\\\\\"WEBGL_depth_texture\\\\\\\"),n(\\\\\\\"OES_texture_float\\\\\\\"),n(\\\\\\\"OES_texture_half_float\\\\\\\"),n(\\\\\\\"OES_texture_half_float_linear\\\\\\\"),n(\\\\\\\"OES_standard_derivatives\\\\\\\"),n(\\\\\\\"OES_element_index_uint\\\\\\\"),n(\\\\\\\"OES_vertex_array_object\\\\\\\"),n(\\\\\\\"ANGLE_instanced_arrays\\\\\\\")),n(\\\\\\\"OES_texture_float_linear\\\\\\\"),n(\\\\\\\"EXT_color_buffer_half_float\\\\\\\")},get:function(t){const e=n(t);return null===e&&console.warn(\\\\\\\"THREE.WebGLRenderer: \\\\\\\"+t+\\\\\\\" extension not supported.\\\\\\\"),e}}}var It=n(20);function Ft(t,e,n,i){const s={},r=new WeakMap;function o(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener(\\\\\\\"dispose\\\\\\\",o),delete s[a.id];const l=r.get(a);l&&(e.remove(l),r.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,s=t.attributes.position;let o=0;if(null!==i){const t=i.array;o=i.version;for(let e=0,i=t.length;e<i;e+=3){const i=t[e+0],s=t[e+1],r=t[e+2];n.push(i,s,s,r,r,i)}}else{const t=s.array;o=s.version;for(let e=0,i=t.length/3-1;e<i;e+=3){const t=e+0,i=e+1,s=e+2;n.push(t,i,i,s,s,t)}}const a=new(Object(It.a)(n)>65535?C.i:C.h)(n,1);a.version=o;const l=r.get(t);l&&e.remove(l),r.set(t,a)}return{get:function(t,e){return!0===s[e.id]||(e.addEventListener(\\\\\\\"dispose\\\\\\\",o),s[e.id]=!0,n.memory.geometries++),e},update:function(n){const i=n.attributes;for(const n in i)e.update(i[n],t.ARRAY_BUFFER);const s=n.morphAttributes;for(const n in s){const i=s[n];for(let n=0,s=i.length;n<s;n++)e.update(i[n],t.ARRAY_BUFFER)}},getWireframeAttribute:function(t){const e=r.get(t);if(e){const n=t.index;null!==n&&e.version<n.version&&a(t)}else a(t);return r.get(t)}}}function Dt(t,e,n,i){const s=i.isWebGL2;let r,o,a;this.setMode=function(t){r=t},this.setIndex=function(t){o=t.type,a=t.bytesPerElement},this.render=function(e,i){t.drawElements(r,i,o,e*a),n.update(i,r,1)},this.renderInstances=function(i,l,c){if(0===c)return;let h,u;if(s)h=t,u=\\\\\\\"drawElementsInstanced\\\\\\\";else if(h=e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"),u=\\\\\\\"drawElementsInstancedANGLE\\\\\\\",null===h)return void console.error(\\\\\\\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");h[u](r,l,o,i*a,c),n.update(l,r,c)}}function Bt(t){const e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(n,i,s){switch(e.calls++,i){case t.TRIANGLES:e.triangles+=s*(n/3);break;case t.LINES:e.lines+=s*(n/2);break;case t.LINE_STRIP:e.lines+=s*(n-1);break;case t.LINE_LOOP:e.lines+=s*n;break;case t.POINTS:e.points+=s*n;break;default:console.error(\\\\\\\"THREE.WebGLInfo: Unknown draw mode:\\\\\\\",i)}}}}class zt extends Z.a{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=w.ob,this.minFilter=w.ob,this.wrapR=w.n,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}function kt(t,e){return t[0]-e[0]}function Ut(t,e){return Math.abs(e[1])-Math.abs(t[1])}function Gt(t,e){let n=1;const i=e.isInterleavedBufferAttribute?e.data.array:e.array;i instanceof Int8Array?n=127:i instanceof Int16Array?n=32767:i instanceof Int32Array?n=2147483647:console.error(\\\\\\\"THREE.WebGLMorphtargets: Unsupported morph attribute data type: \\\\\\\",i),t.divideScalar(n)}function Vt(t,e,n){const i={},s=new Float32Array(8),r=new WeakMap,o=new p.a,a=[];for(let t=0;t<8;t++)a[t]=[t,0];return{update:function(l,c,h,u){const p=l.morphTargetInfluences;if(!0===e.isWebGL2){const i=c.morphAttributes.position.length;let s=r.get(c);if(void 0===s||s.count!==i){void 0!==s&&s.texture.dispose();const t=void 0!==c.morphAttributes.normal,n=c.morphAttributes.position,a=c.morphAttributes.normal||[],l=!0===t?2:1;let h=c.attributes.position.count*l,u=1;h>e.maxTextureSize&&(u=Math.ceil(h/e.maxTextureSize),h=e.maxTextureSize);const p=new Float32Array(h*u*4*i),_=new zt(p,h,u,i);_.format=w.Ib,_.type=w.G;const m=4*l;for(let e=0;e<i;e++){const i=n[e],s=a[e],r=h*u*4*e;for(let e=0;e<i.count;e++){o.fromBufferAttribute(i,e),!0===i.normalized&&Gt(o,i);const n=e*m;p[r+n+0]=o.x,p[r+n+1]=o.y,p[r+n+2]=o.z,p[r+n+3]=0,!0===t&&(o.fromBufferAttribute(s,e),!0===s.normalized&&Gt(o,s),p[r+n+4]=o.x,p[r+n+5]=o.y,p[r+n+6]=o.z,p[r+n+7]=0)}}s={count:i,texture:_,size:new d.a(h,u)},r.set(c,s)}let a=0;for(let t=0;t<p.length;t++)a+=p[t];const l=c.morphTargetsRelative?1:1-a;u.getUniforms().setValue(t,\\\\\\\"morphTargetBaseInfluence\\\\\\\",l),u.getUniforms().setValue(t,\\\\\\\"morphTargetInfluences\\\\\\\",p),u.getUniforms().setValue(t,\\\\\\\"morphTargetsTexture\\\\\\\",s.texture,n),u.getUniforms().setValue(t,\\\\\\\"morphTargetsTextureSize\\\\\\\",s.size)}else{const e=void 0===p?0:p.length;let n=i[c.id];if(void 0===n||n.length!==e){n=[];for(let t=0;t<e;t++)n[t]=[t,0];i[c.id]=n}for(let t=0;t<e;t++){const e=n[t];e[0]=t,e[1]=p[t]}n.sort(Ut);for(let t=0;t<8;t++)t<e&&n[t][1]?(a[t][0]=n[t][0],a[t][1]=n[t][1]):(a[t][0]=Number.MAX_SAFE_INTEGER,a[t][1]=0);a.sort(kt);const r=c.morphAttributes.position,o=c.morphAttributes.normal;let l=0;for(let t=0;t<8;t++){const e=a[t],n=e[0],i=e[1];n!==Number.MAX_SAFE_INTEGER&&i?(r&&c.getAttribute(\\\\\\\"morphTarget\\\\\\\"+t)!==r[n]&&c.setAttribute(\\\\\\\"morphTarget\\\\\\\"+t,r[n]),o&&c.getAttribute(\\\\\\\"morphNormal\\\\\\\"+t)!==o[n]&&c.setAttribute(\\\\\\\"morphNormal\\\\\\\"+t,o[n]),s[t]=i,l+=i):(r&&!0===c.hasAttribute(\\\\\\\"morphTarget\\\\\\\"+t)&&c.deleteAttribute(\\\\\\\"morphTarget\\\\\\\"+t),o&&!0===c.hasAttribute(\\\\\\\"morphNormal\\\\\\\"+t)&&c.deleteAttribute(\\\\\\\"morphNormal\\\\\\\"+t),s[t]=0)}const h=c.morphTargetsRelative?1:1-l;u.getUniforms().setValue(t,\\\\\\\"morphTargetBaseInfluence\\\\\\\",h),u.getUniforms().setValue(t,\\\\\\\"morphTargetInfluences\\\\\\\",s)}}}}zt.prototype.isDataTexture2DArray=!0;class Ht extends K{constructor(t,e,n){super(t,e,n),this.samples=4}copy(t){return super.copy.call(this,t),this.samples=t.samples,this}}function jt(t,e,n,i){let s=new WeakMap;function r(t){const e=t.target;e.removeEventListener(\\\\\\\"dispose\\\\\\\",r),n.remove(e.instanceMatrix),null!==e.instanceColor&&n.remove(e.instanceColor)}return{update:function(o){const a=i.render.frame,l=o.geometry,c=e.get(o,l);return s.get(c)!==a&&(e.update(c),s.set(c,a)),o.isInstancedMesh&&(!1===o.hasEventListener(\\\\\\\"dispose\\\\\\\",r)&&o.addEventListener(\\\\\\\"dispose\\\\\\\",r),n.update(o.instanceMatrix,t.ARRAY_BUFFER),null!==o.instanceColor&&n.update(o.instanceColor,t.ARRAY_BUFFER)),c},dispose:function(){s=new WeakMap}}}Ht.prototype.isWebGLMultisampleRenderTarget=!0;class Wt extends Z.a{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=w.ob,this.minFilter=w.ob,this.wrapR=w.n,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}Wt.prototype.isDataTexture3D=!0;const qt=new Z.a,Xt=new zt,Yt=new Wt,$t=new it,Jt=[],Zt=[],Kt=new Float32Array(16),Qt=new Float32Array(9),te=new Float32Array(4);function ee(t,e,n){const i=t[0];if(i<=0||i>0)return t;const s=e*n;let r=Jt[s];if(void 0===r&&(r=new Float32Array(s),Jt[s]=r),0!==e){i.toArray(r,0);for(let i=1,s=0;i!==e;++i)s+=n,t[i].toArray(r,s)}return r}function ne(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n<i;n++)if(t[n]!==e[n])return!1;return!0}function ie(t,e){for(let n=0,i=e.length;n<i;n++)t[n]=e[n]}function se(t,e){let n=Zt[e];void 0===n&&(n=new Int32Array(e),Zt[e]=n);for(let i=0;i!==e;++i)n[i]=t.allocateTextureUnit();return n}function re(t,e){const n=this.cache;n[0]!==e&&(t.uniform1f(this.addr,e),n[0]=e)}function oe(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y||(t.uniform2f(this.addr,e.x,e.y),n[0]=e.x,n[1]=e.y);else{if(ne(n,e))return;t.uniform2fv(this.addr,e),ie(n,e)}}function ae(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z||(t.uniform3f(this.addr,e.x,e.y,e.z),n[0]=e.x,n[1]=e.y,n[2]=e.z);else if(void 0!==e.r)n[0]===e.r&&n[1]===e.g&&n[2]===e.b||(t.uniform3f(this.addr,e.r,e.g,e.b),n[0]=e.r,n[1]=e.g,n[2]=e.b);else{if(ne(n,e))return;t.uniform3fv(this.addr,e),ie(n,e)}}function le(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z&&n[3]===e.w||(t.uniform4f(this.addr,e.x,e.y,e.z,e.w),n[0]=e.x,n[1]=e.y,n[2]=e.z,n[3]=e.w);else{if(ne(n,e))return;t.uniform4fv(this.addr,e),ie(n,e)}}function ce(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ne(n,e))return;t.uniformMatrix2fv(this.addr,!1,e),ie(n,e)}else{if(ne(n,i))return;te.set(i),t.uniformMatrix2fv(this.addr,!1,te),ie(n,i)}}function he(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ne(n,e))return;t.uniformMatrix3fv(this.addr,!1,e),ie(n,e)}else{if(ne(n,i))return;Qt.set(i),t.uniformMatrix3fv(this.addr,!1,Qt),ie(n,i)}}function ue(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ne(n,e))return;t.uniformMatrix4fv(this.addr,!1,e),ie(n,e)}else{if(ne(n,i))return;Kt.set(i),t.uniformMatrix4fv(this.addr,!1,Kt),ie(n,i)}}function de(t,e){const n=this.cache;n[0]!==e&&(t.uniform1i(this.addr,e),n[0]=e)}function pe(t,e){const n=this.cache;ne(n,e)||(t.uniform2iv(this.addr,e),ie(n,e))}function _e(t,e){const n=this.cache;ne(n,e)||(t.uniform3iv(this.addr,e),ie(n,e))}function me(t,e){const n=this.cache;ne(n,e)||(t.uniform4iv(this.addr,e),ie(n,e))}function fe(t,e){const n=this.cache;n[0]!==e&&(t.uniform1ui(this.addr,e),n[0]=e)}function ge(t,e){const n=this.cache;ne(n,e)||(t.uniform2uiv(this.addr,e),ie(n,e))}function ve(t,e){const n=this.cache;ne(n,e)||(t.uniform3uiv(this.addr,e),ie(n,e))}function ye(t,e){const n=this.cache;ne(n,e)||(t.uniform4uiv(this.addr,e),ie(n,e))}function xe(t,e,n){const i=this.cache,s=n.allocateTextureUnit();i[0]!==s&&(t.uniform1i(this.addr,s),i[0]=s),n.safeSetTexture2D(e||qt,s)}function be(t,e,n){const i=this.cache,s=n.allocateTextureUnit();i[0]!==s&&(t.uniform1i(this.addr,s),i[0]=s),n.setTexture3D(e||Yt,s)}function we(t,e,n){const i=this.cache,s=n.allocateTextureUnit();i[0]!==s&&(t.uniform1i(this.addr,s),i[0]=s),n.safeSetTextureCube(e||$t,s)}function Te(t,e,n){const i=this.cache,s=n.allocateTextureUnit();i[0]!==s&&(t.uniform1i(this.addr,s),i[0]=s),n.setTexture2DArray(e||Xt,s)}function Ae(t,e){t.uniform1fv(this.addr,e)}function Me(t,e){const n=ee(e,this.size,2);t.uniform2fv(this.addr,n)}function Ee(t,e){const n=ee(e,this.size,3);t.uniform3fv(this.addr,n)}function Se(t,e){const n=ee(e,this.size,4);t.uniform4fv(this.addr,n)}function Ce(t,e){const n=ee(e,this.size,4);t.uniformMatrix2fv(this.addr,!1,n)}function Ne(t,e){const n=ee(e,this.size,9);t.uniformMatrix3fv(this.addr,!1,n)}function Le(t,e){const n=ee(e,this.size,16);t.uniformMatrix4fv(this.addr,!1,n)}function Oe(t,e){t.uniform1iv(this.addr,e)}function Pe(t,e){t.uniform2iv(this.addr,e)}function Re(t,e){t.uniform3iv(this.addr,e)}function Ie(t,e){t.uniform4iv(this.addr,e)}function Fe(t,e){t.uniform1uiv(this.addr,e)}function De(t,e){t.uniform2uiv(this.addr,e)}function Be(t,e){t.uniform3uiv(this.addr,e)}function ze(t,e){t.uniform4uiv(this.addr,e)}function ke(t,e,n){const i=e.length,s=se(n,i);t.uniform1iv(this.addr,s);for(let t=0;t!==i;++t)n.safeSetTexture2D(e[t]||qt,s[t])}function Ue(t,e,n){const i=e.length,s=se(n,i);t.uniform1iv(this.addr,s);for(let t=0;t!==i;++t)n.safeSetTextureCube(e[t]||$t,s[t])}function Ge(t,e,n){this.id=t,this.addr=n,this.cache=[],this.setValue=function(t){switch(t){case 5126:return re;case 35664:return oe;case 35665:return ae;case 35666:return le;case 35674:return ce;case 35675:return he;case 35676:return ue;case 5124:case 35670:return de;case 35667:case 35671:return pe;case 35668:case 35672:return _e;case 35669:case 35673:return me;case 5125:return fe;case 36294:return ge;case 36295:return ve;case 36296:return ye;case 35678:case 36198:case 36298:case 36306:case 35682:return xe;case 35679:case 36299:case 36307:return be;case 35680:case 36300:case 36308:case 36293:return we;case 36289:case 36303:case 36311:case 36292:return Te}}(e.type)}function Ve(t,e,n){this.id=t,this.addr=n,this.cache=[],this.size=e.size,this.setValue=function(t){switch(t){case 5126:return Ae;case 35664:return Me;case 35665:return Ee;case 35666:return Se;case 35674:return Ce;case 35675:return Ne;case 35676:return Le;case 5124:case 35670:return Oe;case 35667:case 35671:return Pe;case 35668:case 35672:return Re;case 35669:case 35673:return Ie;case 5125:return Fe;case 36294:return De;case 36295:return Be;case 36296:return ze;case 35678:case 36198:case 36298:case 36306:case 35682:return ke;case 35680:case 36300:case 36308:case 36293:return Ue}}(e.type)}function He(t){this.id=t,this.seq=[],this.map={}}Ve.prototype.updateCache=function(t){const e=this.cache;t instanceof Float32Array&&e.length!==t.length&&(this.cache=new Float32Array(t.length)),ie(e,t)},He.prototype.setValue=function(t,e,n){const i=this.seq;for(let s=0,r=i.length;s!==r;++s){const r=i[s];r.setValue(t,e[r.id],n)}};const je=/(\\\\w+)(\\\\])?(\\\\[|\\\\.)?/g;function We(t,e){t.seq.push(e),t.map[e.id]=e}function qe(t,e,n){const i=t.name,s=i.length;for(je.lastIndex=0;;){const r=je.exec(i),o=je.lastIndex;let a=r[1];const l=\\\\\\\"]\\\\\\\"===r[2],c=r[3];if(l&&(a|=0),void 0===c||\\\\\\\"[\\\\\\\"===c&&o+2===s){We(n,void 0===c?new Ge(a,t,e):new Ve(a,t,e));break}{let t=n.map[a];void 0===t&&(t=new He(a),We(n,t)),n=t}}}function Xe(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let i=0;i<n;++i){const n=t.getActiveUniform(e,i);qe(n,t.getUniformLocation(e,n.name),this)}}function Ye(t,e,n){const i=t.createShader(e);return t.shaderSource(i,n),t.compileShader(i),i}Xe.prototype.setValue=function(t,e,n,i){const s=this.map[e];void 0!==s&&s.setValue(t,n,i)},Xe.prototype.setOptional=function(t,e,n){const i=e[n];void 0!==i&&this.setValue(t,n,i)},Xe.upload=function(t,e,n,i){for(let s=0,r=e.length;s!==r;++s){const r=e[s],o=n[r.id];!1!==o.needsUpdate&&r.setValue(t,o.value,i)}},Xe.seqWithValue=function(t,e){const n=[];for(let i=0,s=t.length;i!==s;++i){const s=t[i];s.id in e&&n.push(s)}return n};let $e=0;function Je(t){switch(t){case w.U:return[\\\\\\\"Linear\\\\\\\",\\\\\\\"( value )\\\\\\\"];case w.ld:return[\\\\\\\"sRGB\\\\\\\",\\\\\\\"( value )\\\\\\\"];case w.gc:return[\\\\\\\"RGBE\\\\\\\",\\\\\\\"( value )\\\\\\\"];case w.lc:return[\\\\\\\"RGBM\\\\\\\",\\\\\\\"( value, 7.0 )\\\\\\\"];case w.kc:return[\\\\\\\"RGBM\\\\\\\",\\\\\\\"( value, 16.0 )\\\\\\\"];case w.fc:return[\\\\\\\"RGBD\\\\\\\",\\\\\\\"( value, 256.0 )\\\\\\\"];case w.J:return[\\\\\\\"Gamma\\\\\\\",\\\\\\\"( value, float( GAMMA_FACTOR ) )\\\\\\\"];case w.bb:return[\\\\\\\"LogLuv\\\\\\\",\\\\\\\"( value )\\\\\\\"];default:return console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported encoding:\\\\\\\",t),[\\\\\\\"Linear\\\\\\\",\\\\\\\"( value )\\\\\\\"]}}function Ze(t,e,n){const i=t.getShaderParameter(e,t.COMPILE_STATUS),s=t.getShaderInfoLog(e).trim();return i&&\\\\\\\"\\\\\\\"===s?\\\\\\\"\\\\\\\":n.toUpperCase()+\\\\\\\"\\\\n\\\\n\\\\\\\"+s+\\\\\\\"\\\\n\\\\n\\\\\\\"+function(t){const e=t.split(\\\\\\\"\\\\n\\\\\\\");for(let t=0;t<e.length;t++)e[t]=t+1+\\\\\\\": \\\\\\\"+e[t];return e.join(\\\\\\\"\\\\n\\\\\\\")}(t.getShaderSource(e))}function Ke(t,e){const n=Je(e);return\\\\\\\"vec4 \\\\\\\"+t+\\\\\\\"( vec4 value ) { return \\\\\\\"+n[0]+\\\\\\\"ToLinear\\\\\\\"+n[1]+\\\\\\\"; }\\\\\\\"}function Qe(t,e){const n=Je(e);return\\\\\\\"vec4 \\\\\\\"+t+\\\\\\\"( vec4 value ) { return LinearTo\\\\\\\"+n[0]+n[1]+\\\\\\\"; }\\\\\\\"}function tn(t,e){let n;switch(e){case w.ab:n=\\\\\\\"Linear\\\\\\\";break;case w.vc:n=\\\\\\\"Reinhard\\\\\\\";break;case w.m:n=\\\\\\\"OptimizedCineon\\\\\\\";break;case w.a:n=\\\\\\\"ACESFilmic\\\\\\\";break;case w.w:n=\\\\\\\"Custom\\\\\\\";break;default:console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported toneMapping:\\\\\\\",e),n=\\\\\\\"Linear\\\\\\\"}return\\\\\\\"vec3 \\\\\\\"+t+\\\\\\\"( vec3 color ) { return \\\\\\\"+n+\\\\\\\"ToneMapping( color ); }\\\\\\\"}function en(t){return\\\\\\\"\\\\\\\"!==t}function nn(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function sn(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const rn=/^[ \\\\t]*#include +<([\\\\w\\\\d./]+)>/gm;function on(t){return t.replace(rn,an)}function an(t,e){const n=U[e];if(void 0===n)throw new Error(\\\\\\\"Can not resolve #include <\\\\\\\"+e+\\\\\\\">\\\\\\\");return on(n)}const ln=/#pragma unroll_loop[\\\\s]+?for \\\\( int i \\\\= (\\\\d+)\\\\; i < (\\\\d+)\\\\; i \\\\+\\\\+ \\\\) \\\\{([\\\\s\\\\S]+?)(?=\\\\})\\\\}/g,cn=/#pragma unroll_loop_start\\\\s+for\\\\s*\\\\(\\\\s*int\\\\s+i\\\\s*=\\\\s*(\\\\d+)\\\\s*;\\\\s*i\\\\s*<\\\\s*(\\\\d+)\\\\s*;\\\\s*i\\\\s*\\\\+\\\\+\\\\s*\\\\)\\\\s*{([\\\\s\\\\S]+?)}\\\\s+#pragma unroll_loop_end/g;function hn(t){return t.replace(cn,dn).replace(ln,un)}function un(t,e,n,i){return console.warn(\\\\\\\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\\\\\\\"),dn(t,e,n,i)}function dn(t,e,n,i){let s=\\\\\\\"\\\\\\\";for(let t=parseInt(e);t<parseInt(n);t++)s+=i.replace(/\\\\[\\\\s*i\\\\s*\\\\]/g,\\\\\\\"[ \\\\\\\"+t+\\\\\\\" ]\\\\\\\").replace(/UNROLLED_LOOP_INDEX/g,t);return s}function pn(t){let e=\\\\\\\"precision \\\\\\\"+t.precision+\\\\\\\" float;\\\\nprecision \\\\\\\"+t.precision+\\\\\\\" int;\\\\\\\";return\\\\\\\"highp\\\\\\\"===t.precision?e+=\\\\\\\"\\\\n#define HIGH_PRECISION\\\\\\\":\\\\\\\"mediump\\\\\\\"===t.precision?e+=\\\\\\\"\\\\n#define MEDIUM_PRECISION\\\\\\\":\\\\\\\"lowp\\\\\\\"===t.precision&&(e+=\\\\\\\"\\\\n#define LOW_PRECISION\\\\\\\"),e}function _n(t,e,n,i){const s=t.getContext(),r=n.defines;let o=n.vertexShader,a=n.fragmentShader;const l=function(t){let e=\\\\\\\"SHADOWMAP_TYPE_BASIC\\\\\\\";return t.shadowMapType===w.Fb?e=\\\\\\\"SHADOWMAP_TYPE_PCF\\\\\\\":t.shadowMapType===w.Gb?e=\\\\\\\"SHADOWMAP_TYPE_PCF_SOFT\\\\\\\":t.shadowMapType===w.gd&&(e=\\\\\\\"SHADOWMAP_TYPE_VSM\\\\\\\"),e}(n),c=function(t){let e=\\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";if(t.envMap)switch(t.envMapMode){case w.o:case w.p:e=\\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";break;case w.q:case w.r:e=\\\\\\\"ENVMAP_TYPE_CUBE_UV\\\\\\\"}return e}(n),h=function(t){let e=\\\\\\\"ENVMAP_MODE_REFLECTION\\\\\\\";if(t.envMap)switch(t.envMapMode){case w.p:case w.r:e=\\\\\\\"ENVMAP_MODE_REFRACTION\\\\\\\"}return e}(n),u=function(t){let e=\\\\\\\"ENVMAP_BLENDING_NONE\\\\\\\";if(t.envMap)switch(t.combine){case w.nb:e=\\\\\\\"ENVMAP_BLENDING_MULTIPLY\\\\\\\";break;case w.lb:e=\\\\\\\"ENVMAP_BLENDING_MIX\\\\\\\";break;case w.c:e=\\\\\\\"ENVMAP_BLENDING_ADD\\\\\\\"}return e}(n),d=t.gammaFactor>0?t.gammaFactor:1,p=n.isWebGL2?\\\\\\\"\\\\\\\":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||\\\\\\\"physical\\\\\\\"===t.shaderID?\\\\\\\"#extension GL_OES_standard_derivatives : enable\\\\\\\":\\\\\\\"\\\\\\\",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?\\\\\\\"#extension GL_EXT_frag_depth : enable\\\\\\\":\\\\\\\"\\\\\\\",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?\\\\\\\"#extension GL_EXT_draw_buffers : require\\\\\\\":\\\\\\\"\\\\\\\",(t.extensionShaderTextureLOD||t.envMap||t.transmission)&&t.rendererExtensionShaderTextureLod?\\\\\\\"#extension GL_EXT_shader_texture_lod : enable\\\\\\\":\\\\\\\"\\\\\\\"].filter(en).join(\\\\\\\"\\\\n\\\\\\\")}(n),_=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push(\\\\\\\"#define \\\\\\\"+n+\\\\\\\" \\\\\\\"+i)}return e.join(\\\\\\\"\\\\n\\\\\\\")}(r),m=s.createProgram();let f,g,v=n.glslVersion?\\\\\\\"#version \\\\\\\"+n.glslVersion+\\\\\\\"\\\\n\\\\\\\":\\\\\\\"\\\\\\\";n.isRawShaderMaterial?(f=[_].filter(en).join(\\\\\\\"\\\\n\\\\\\\"),f.length>0&&(f+=\\\\\\\"\\\\n\\\\\\\"),g=[p,_].filter(en).join(\\\\\\\"\\\\n\\\\\\\"),g.length>0&&(g+=\\\\\\\"\\\\n\\\\\\\")):(f=[pn(n),\\\\\\\"#define SHADER_NAME \\\\\\\"+n.shaderName,_,n.instancing?\\\\\\\"#define USE_INSTANCING\\\\\\\":\\\\\\\"\\\\\\\",n.instancingColor?\\\\\\\"#define USE_INSTANCING_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.supportsVertexTextures?\\\\\\\"#define VERTEX_TEXTURES\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"#define GAMMA_FACTOR \\\\\\\"+d,\\\\\\\"#define MAX_BONES \\\\\\\"+n.maxBones,n.useFog&&n.fog?\\\\\\\"#define USE_FOG\\\\\\\":\\\\\\\"\\\\\\\",n.useFog&&n.fogExp2?\\\\\\\"#define FOG_EXP2\\\\\\\":\\\\\\\"\\\\\\\",n.map?\\\\\\\"#define USE_MAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define USE_ENVMAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+h:\\\\\\\"\\\\\\\",n.lightMap?\\\\\\\"#define USE_LIGHTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.aoMap?\\\\\\\"#define USE_AOMAP\\\\\\\":\\\\\\\"\\\\\\\",n.emissiveMap?\\\\\\\"#define USE_EMISSIVEMAP\\\\\\\":\\\\\\\"\\\\\\\",n.bumpMap?\\\\\\\"#define USE_BUMPMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap?\\\\\\\"#define USE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.objectSpaceNormalMap?\\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.tangentSpaceNormalMap?\\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatMap?\\\\\\\"#define USE_CLEARCOATMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatRoughnessMap?\\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatNormalMap?\\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.displacementMap&&n.supportsVertexTextures?\\\\\\\"#define USE_DISPLACEMENTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularMap?\\\\\\\"#define USE_SPECULARMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularIntensityMap?\\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularTintMap?\\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.roughnessMap?\\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.metalnessMap?\\\\\\\"#define USE_METALNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaMap?\\\\\\\"#define USE_ALPHAMAP\\\\\\\":\\\\\\\"\\\\\\\",n.transmission?\\\\\\\"#define USE_TRANSMISSION\\\\\\\":\\\\\\\"\\\\\\\",n.transmissionMap?\\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\":\\\\\\\"\\\\\\\",n.thicknessMap?\\\\\\\"#define USE_THICKNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.vertexTangents?\\\\\\\"#define USE_TANGENT\\\\\\\":\\\\\\\"\\\\\\\",n.vertexColors?\\\\\\\"#define USE_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.vertexAlphas?\\\\\\\"#define USE_COLOR_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.vertexUvs?\\\\\\\"#define USE_UV\\\\\\\":\\\\\\\"\\\\\\\",n.uvsVertexOnly?\\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\":\\\\\\\"\\\\\\\",n.flatShading?\\\\\\\"#define FLAT_SHADED\\\\\\\":\\\\\\\"\\\\\\\",n.skinning?\\\\\\\"#define USE_SKINNING\\\\\\\":\\\\\\\"\\\\\\\",n.useVertexTexture?\\\\\\\"#define BONE_TEXTURE\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets?\\\\\\\"#define USE_MORPHTARGETS\\\\\\\":\\\\\\\"\\\\\\\",n.morphNormals&&!1===n.flatShading?\\\\\\\"#define USE_MORPHNORMALS\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets&&n.isWebGL2?\\\\\\\"#define MORPHTARGETS_TEXTURE\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets&&n.isWebGL2?\\\\\\\"#define MORPHTARGETS_COUNT \\\\\\\"+n.morphTargetsCount:\\\\\\\"\\\\\\\",n.doubleSided?\\\\\\\"#define DOUBLE_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.flipSided?\\\\\\\"#define FLIP_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define USE_SHADOWMAP\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define \\\\\\\"+l:\\\\\\\"\\\\\\\",n.sizeAttenuation?\\\\\\\"#define USE_SIZEATTENUATION\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer?\\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?\\\\\\\"#define USE_LOGDEPTHBUF_EXT\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"uniform mat4 modelMatrix;\\\\\\\",\\\\\\\"uniform mat4 modelViewMatrix;\\\\\\\",\\\\\\\"uniform mat4 projectionMatrix;\\\\\\\",\\\\\\\"uniform mat4 viewMatrix;\\\\\\\",\\\\\\\"uniform mat3 normalMatrix;\\\\\\\",\\\\\\\"uniform vec3 cameraPosition;\\\\\\\",\\\\\\\"uniform bool isOrthographic;\\\\\\\",\\\\\\\"#ifdef USE_INSTANCING\\\\\\\",\\\\\\\"\\\\tattribute mat4 instanceMatrix;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#ifdef USE_INSTANCING_COLOR\\\\\\\",\\\\\\\"\\\\tattribute vec3 instanceColor;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"attribute vec3 position;\\\\\\\",\\\\\\\"attribute vec3 normal;\\\\\\\",\\\\\\\"attribute vec2 uv;\\\\\\\",\\\\\\\"#ifdef USE_TANGENT\\\\\\\",\\\\\\\"\\\\tattribute vec4 tangent;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\\\\",\\\\\\\"\\\\tattribute vec4 color;\\\\\\\",\\\\\\\"#elif defined( USE_COLOR )\\\\\\\",\\\\\\\"\\\\tattribute vec3 color;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget0;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget1;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget2;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget3;\\\\\\\",\\\\\\\"\\\\t#ifdef USE_MORPHNORMALS\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal0;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal1;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal2;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal3;\\\\\\\",\\\\\\\"\\\\t#else\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget4;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget5;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget6;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget7;\\\\\\\",\\\\\\\"\\\\t#endif\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#ifdef USE_SKINNING\\\\\\\",\\\\\\\"\\\\tattribute vec4 skinIndex;\\\\\\\",\\\\\\\"\\\\tattribute vec4 skinWeight;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"\\\\n\\\\\\\"].filter(en).join(\\\\\\\"\\\\n\\\\\\\"),g=[p,pn(n),\\\\\\\"#define SHADER_NAME \\\\\\\"+n.shaderName,_,\\\\\\\"#define GAMMA_FACTOR \\\\\\\"+d,n.useFog&&n.fog?\\\\\\\"#define USE_FOG\\\\\\\":\\\\\\\"\\\\\\\",n.useFog&&n.fogExp2?\\\\\\\"#define FOG_EXP2\\\\\\\":\\\\\\\"\\\\\\\",n.map?\\\\\\\"#define USE_MAP\\\\\\\":\\\\\\\"\\\\\\\",n.matcap?\\\\\\\"#define USE_MATCAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define USE_ENVMAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+c:\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+h:\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+u:\\\\\\\"\\\\\\\",n.lightMap?\\\\\\\"#define USE_LIGHTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.aoMap?\\\\\\\"#define USE_AOMAP\\\\\\\":\\\\\\\"\\\\\\\",n.emissiveMap?\\\\\\\"#define USE_EMISSIVEMAP\\\\\\\":\\\\\\\"\\\\\\\",n.bumpMap?\\\\\\\"#define USE_BUMPMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap?\\\\\\\"#define USE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.objectSpaceNormalMap?\\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.tangentSpaceNormalMap?\\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoat?\\\\\\\"#define USE_CLEARCOAT\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatMap?\\\\\\\"#define USE_CLEARCOATMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatRoughnessMap?\\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatNormalMap?\\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularMap?\\\\\\\"#define USE_SPECULARMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularIntensityMap?\\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularTintMap?\\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.roughnessMap?\\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.metalnessMap?\\\\\\\"#define USE_METALNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaMap?\\\\\\\"#define USE_ALPHAMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaTest?\\\\\\\"#define USE_ALPHATEST\\\\\\\":\\\\\\\"\\\\\\\",n.sheen?\\\\\\\"#define USE_SHEEN\\\\\\\":\\\\\\\"\\\\\\\",n.transmission?\\\\\\\"#define USE_TRANSMISSION\\\\\\\":\\\\\\\"\\\\\\\",n.transmissionMap?\\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\":\\\\\\\"\\\\\\\",n.thicknessMap?\\\\\\\"#define USE_THICKNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.vertexTangents?\\\\\\\"#define USE_TANGENT\\\\\\\":\\\\\\\"\\\\\\\",n.vertexColors||n.instancingColor?\\\\\\\"#define USE_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.vertexAlphas?\\\\\\\"#define USE_COLOR_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.vertexUvs?\\\\\\\"#define USE_UV\\\\\\\":\\\\\\\"\\\\\\\",n.uvsVertexOnly?\\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\":\\\\\\\"\\\\\\\",n.gradientMap?\\\\\\\"#define USE_GRADIENTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.flatShading?\\\\\\\"#define FLAT_SHADED\\\\\\\":\\\\\\\"\\\\\\\",n.doubleSided?\\\\\\\"#define DOUBLE_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.flipSided?\\\\\\\"#define FLIP_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define USE_SHADOWMAP\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define \\\\\\\"+l:\\\\\\\"\\\\\\\",n.premultipliedAlpha?\\\\\\\"#define PREMULTIPLIED_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.physicallyCorrectLights?\\\\\\\"#define PHYSICALLY_CORRECT_LIGHTS\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer?\\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?\\\\\\\"#define USE_LOGDEPTHBUF_EXT\\\\\\\":\\\\\\\"\\\\\\\",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?\\\\\\\"#define TEXTURE_LOD_EXT\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"uniform mat4 viewMatrix;\\\\\\\",\\\\\\\"uniform vec3 cameraPosition;\\\\\\\",\\\\\\\"uniform bool isOrthographic;\\\\\\\",n.toneMapping!==w.vb?\\\\\\\"#define TONE_MAPPING\\\\\\\":\\\\\\\"\\\\\\\",n.toneMapping!==w.vb?U.tonemapping_pars_fragment:\\\\\\\"\\\\\\\",n.toneMapping!==w.vb?tn(\\\\\\\"toneMapping\\\\\\\",n.toneMapping):\\\\\\\"\\\\\\\",n.dithering?\\\\\\\"#define DITHERING\\\\\\\":\\\\\\\"\\\\\\\",n.format===w.ic?\\\\\\\"#define OPAQUE\\\\\\\":\\\\\\\"\\\\\\\",U.encodings_pars_fragment,n.map?Ke(\\\\\\\"mapTexelToLinear\\\\\\\",n.mapEncoding):\\\\\\\"\\\\\\\",n.matcap?Ke(\\\\\\\"matcapTexelToLinear\\\\\\\",n.matcapEncoding):\\\\\\\"\\\\\\\",n.envMap?Ke(\\\\\\\"envMapTexelToLinear\\\\\\\",n.envMapEncoding):\\\\\\\"\\\\\\\",n.emissiveMap?Ke(\\\\\\\"emissiveMapTexelToLinear\\\\\\\",n.emissiveMapEncoding):\\\\\\\"\\\\\\\",n.specularTintMap?Ke(\\\\\\\"specularTintMapTexelToLinear\\\\\\\",n.specularTintMapEncoding):\\\\\\\"\\\\\\\",n.lightMap?Ke(\\\\\\\"lightMapTexelToLinear\\\\\\\",n.lightMapEncoding):\\\\\\\"\\\\\\\",Qe(\\\\\\\"linearToOutputTexel\\\\\\\",n.outputEncoding),n.depthPacking?\\\\\\\"#define DEPTH_PACKING \\\\\\\"+n.depthPacking:\\\\\\\"\\\\\\\",\\\\\\\"\\\\n\\\\\\\"].filter(en).join(\\\\\\\"\\\\n\\\\\\\")),o=on(o),o=nn(o,n),o=sn(o,n),a=on(a),a=nn(a,n),a=sn(a,n),o=hn(o),a=hn(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(v=\\\\\\\"#version 300 es\\\\n\\\\\\\",f=[\\\\\\\"precision mediump sampler2DArray;\\\\\\\",\\\\\\\"#define attribute in\\\\\\\",\\\\\\\"#define varying out\\\\\\\",\\\\\\\"#define texture2D texture\\\\\\\"].join(\\\\\\\"\\\\n\\\\\\\")+\\\\\\\"\\\\n\\\\\\\"+f,g=[\\\\\\\"#define varying in\\\\\\\",n.glslVersion===w.I?\\\\\\\"\\\\\\\":\\\\\\\"out highp vec4 pc_fragColor;\\\\\\\",n.glslVersion===w.I?\\\\\\\"\\\\\\\":\\\\\\\"#define gl_FragColor pc_fragColor\\\\\\\",\\\\\\\"#define gl_FragDepthEXT gl_FragDepth\\\\\\\",\\\\\\\"#define texture2D texture\\\\\\\",\\\\\\\"#define textureCube texture\\\\\\\",\\\\\\\"#define texture2DProj textureProj\\\\\\\",\\\\\\\"#define texture2DLodEXT textureLod\\\\\\\",\\\\\\\"#define texture2DProjLodEXT textureProjLod\\\\\\\",\\\\\\\"#define textureCubeLodEXT textureLod\\\\\\\",\\\\\\\"#define texture2DGradEXT textureGrad\\\\\\\",\\\\\\\"#define texture2DProjGradEXT textureProjGrad\\\\\\\",\\\\\\\"#define textureCubeGradEXT textureGrad\\\\\\\"].join(\\\\\\\"\\\\n\\\\\\\")+\\\\\\\"\\\\n\\\\\\\"+g);const y=v+f+o,x=v+g+a,b=Ye(s,s.VERTEX_SHADER,y),T=Ye(s,s.FRAGMENT_SHADER,x);if(s.attachShader(m,b),s.attachShader(m,T),void 0!==n.index0AttributeName?s.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&s.bindAttribLocation(m,0,\\\\\\\"position\\\\\\\"),s.linkProgram(m),t.debug.checkShaderErrors){const t=s.getProgramInfoLog(m).trim(),e=s.getShaderInfoLog(b).trim(),n=s.getShaderInfoLog(T).trim();let i=!0,r=!0;if(!1===s.getProgramParameter(m,s.LINK_STATUS)){i=!1;const e=Ze(s,b,\\\\\\\"vertex\\\\\\\"),n=Ze(s,T,\\\\\\\"fragment\\\\\\\");console.error(\\\\\\\"THREE.WebGLProgram: Shader Error \\\\\\\"+s.getError()+\\\\\\\" - VALIDATE_STATUS \\\\\\\"+s.getProgramParameter(m,s.VALIDATE_STATUS)+\\\\\\\"\\\\n\\\\nProgram Info Log: \\\\\\\"+t+\\\\\\\"\\\\n\\\\\\\"+e+\\\\\\\"\\\\n\\\\\\\"+n)}else\\\\\\\"\\\\\\\"!==t?console.warn(\\\\\\\"THREE.WebGLProgram: Program Info Log:\\\\\\\",t):\\\\\\\"\\\\\\\"!==e&&\\\\\\\"\\\\\\\"!==n||(r=!1);r&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:f},fragmentShader:{log:n,prefix:g}})}let A,M;return s.deleteShader(b),s.deleteShader(T),this.getUniforms=function(){return void 0===A&&(A=new Xe(s,m)),A},this.getAttributes=function(){return void 0===M&&(M=function(t,e){const n={},i=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES);for(let s=0;s<i;s++){const i=t.getActiveAttrib(e,s),r=i.name;let o=1;i.type===t.FLOAT_MAT2&&(o=2),i.type===t.FLOAT_MAT3&&(o=3),i.type===t.FLOAT_MAT4&&(o=4),n[r]={type:i.type,location:t.getAttribLocation(e,r),locationSize:o}}return n}(s,m)),M},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(m),this.program=void 0},this.name=n.shaderName,this.id=$e++,this.cacheKey=e,this.usedTimes=1,this.program=m,this.vertexShader=b,this.fragmentShader=T,this}function mn(t,e,n,i,s,r,o){const a=[],l=s.isWebGL2,c=s.logarithmicDepthBuffer,h=s.floatVertexTextures,u=s.maxVertexUniforms,d=s.vertexTextures;let p=s.precision;const _={MeshDepthMaterial:\\\\\\\"depth\\\\\\\",MeshDistanceMaterial:\\\\\\\"distanceRGBA\\\\\\\",MeshNormalMaterial:\\\\\\\"normal\\\\\\\",MeshBasicMaterial:\\\\\\\"basic\\\\\\\",MeshLambertMaterial:\\\\\\\"lambert\\\\\\\",MeshPhongMaterial:\\\\\\\"phong\\\\\\\",MeshToonMaterial:\\\\\\\"toon\\\\\\\",MeshStandardMaterial:\\\\\\\"physical\\\\\\\",MeshPhysicalMaterial:\\\\\\\"physical\\\\\\\",MeshMatcapMaterial:\\\\\\\"matcap\\\\\\\",LineBasicMaterial:\\\\\\\"basic\\\\\\\",LineDashedMaterial:\\\\\\\"dashed\\\\\\\",PointsMaterial:\\\\\\\"points\\\\\\\",ShadowMaterial:\\\\\\\"shadow\\\\\\\",SpriteMaterial:\\\\\\\"sprite\\\\\\\"},m=[\\\\\\\"precision\\\\\\\",\\\\\\\"isWebGL2\\\\\\\",\\\\\\\"supportsVertexTextures\\\\\\\",\\\\\\\"outputEncoding\\\\\\\",\\\\\\\"instancing\\\\\\\",\\\\\\\"instancingColor\\\\\\\",\\\\\\\"map\\\\\\\",\\\\\\\"mapEncoding\\\\\\\",\\\\\\\"matcap\\\\\\\",\\\\\\\"matcapEncoding\\\\\\\",\\\\\\\"envMap\\\\\\\",\\\\\\\"envMapMode\\\\\\\",\\\\\\\"envMapEncoding\\\\\\\",\\\\\\\"envMapCubeUV\\\\\\\",\\\\\\\"lightMap\\\\\\\",\\\\\\\"lightMapEncoding\\\\\\\",\\\\\\\"aoMap\\\\\\\",\\\\\\\"emissiveMap\\\\\\\",\\\\\\\"emissiveMapEncoding\\\\\\\",\\\\\\\"bumpMap\\\\\\\",\\\\\\\"normalMap\\\\\\\",\\\\\\\"objectSpaceNormalMap\\\\\\\",\\\\\\\"tangentSpaceNormalMap\\\\\\\",\\\\\\\"clearcoat\\\\\\\",\\\\\\\"clearcoatMap\\\\\\\",\\\\\\\"clearcoatRoughnessMap\\\\\\\",\\\\\\\"clearcoatNormalMap\\\\\\\",\\\\\\\"displacementMap\\\\\\\",\\\\\\\"specularMap\\\\\\\",\\\\\\\"specularIntensityMap\\\\\\\",\\\\\\\"specularTintMap\\\\\\\",\\\\\\\"specularTintMapEncoding\\\\\\\",\\\\\\\"roughnessMap\\\\\\\",\\\\\\\"metalnessMap\\\\\\\",\\\\\\\"gradientMap\\\\\\\",\\\\\\\"alphaMap\\\\\\\",\\\\\\\"alphaTest\\\\\\\",\\\\\\\"combine\\\\\\\",\\\\\\\"vertexColors\\\\\\\",\\\\\\\"vertexAlphas\\\\\\\",\\\\\\\"vertexTangents\\\\\\\",\\\\\\\"vertexUvs\\\\\\\",\\\\\\\"uvsVertexOnly\\\\\\\",\\\\\\\"fog\\\\\\\",\\\\\\\"useFog\\\\\\\",\\\\\\\"fogExp2\\\\\\\",\\\\\\\"flatShading\\\\\\\",\\\\\\\"sizeAttenuation\\\\\\\",\\\\\\\"logarithmicDepthBuffer\\\\\\\",\\\\\\\"skinning\\\\\\\",\\\\\\\"maxBones\\\\\\\",\\\\\\\"useVertexTexture\\\\\\\",\\\\\\\"morphTargets\\\\\\\",\\\\\\\"morphNormals\\\\\\\",\\\\\\\"morphTargetsCount\\\\\\\",\\\\\\\"premultipliedAlpha\\\\\\\",\\\\\\\"numDirLights\\\\\\\",\\\\\\\"numPointLights\\\\\\\",\\\\\\\"numSpotLights\\\\\\\",\\\\\\\"numHemiLights\\\\\\\",\\\\\\\"numRectAreaLights\\\\\\\",\\\\\\\"numDirLightShadows\\\\\\\",\\\\\\\"numPointLightShadows\\\\\\\",\\\\\\\"numSpotLightShadows\\\\\\\",\\\\\\\"shadowMapEnabled\\\\\\\",\\\\\\\"shadowMapType\\\\\\\",\\\\\\\"toneMapping\\\\\\\",\\\\\\\"physicallyCorrectLights\\\\\\\",\\\\\\\"doubleSided\\\\\\\",\\\\\\\"flipSided\\\\\\\",\\\\\\\"numClippingPlanes\\\\\\\",\\\\\\\"numClipIntersection\\\\\\\",\\\\\\\"depthPacking\\\\\\\",\\\\\\\"dithering\\\\\\\",\\\\\\\"format\\\\\\\",\\\\\\\"sheen\\\\\\\",\\\\\\\"transmission\\\\\\\",\\\\\\\"transmissionMap\\\\\\\",\\\\\\\"thicknessMap\\\\\\\"];function f(t){let e;return t&&t.isTexture?e=t.encoding:t&&t.isWebGLRenderTarget?(console.warn(\\\\\\\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\\\\\\\"),e=t.texture.encoding):e=w.U,l&&t&&t.isTexture&&t.format===w.Ib&&t.type===w.Zc&&t.encoding===w.ld&&(e=w.U),e}return{getParameters:function(r,a,m,g,v){const y=g.fog,x=r.isMeshStandardMaterial?g.environment:null,b=(r.isMeshStandardMaterial?n:e).get(r.envMap||x),T=_[r.type],A=v.isSkinnedMesh?function(t){const e=t.skeleton.bones;if(h)return 1024;{const t=u,n=Math.floor((t-20)/4),i=Math.min(n,e.length);return i<e.length?(console.warn(\\\\\\\"THREE.WebGLRenderer: Skeleton has \\\\\\\"+e.length+\\\\\\\" bones. This GPU supports \\\\\\\"+i+\\\\\\\".\\\\\\\"),0):i}}(v):0;let M,E;if(null!==r.precision&&(p=s.getMaxPrecision(r.precision),p!==r.precision&&console.warn(\\\\\\\"THREE.WebGLProgram.getParameters:\\\\\\\",r.precision,\\\\\\\"not supported, using\\\\\\\",p,\\\\\\\"instead.\\\\\\\")),T){const t=H[T];M=t.vertexShader,E=t.fragmentShader}else M=r.vertexShader,E=r.fragmentShader;const S=t.getRenderTarget(),C=r.alphaTest>0,N=r.clearcoat>0;return{isWebGL2:l,shaderID:T,shaderName:r.type,vertexShader:M,fragmentShader:E,defines:r.defines,isRawShaderMaterial:!0===r.isRawShaderMaterial,glslVersion:r.glslVersion,precision:p,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:d,outputEncoding:null!==S?f(S.texture):t.outputEncoding,map:!!r.map,mapEncoding:f(r.map),matcap:!!r.matcap,matcapEncoding:f(r.matcap),envMap:!!b,envMapMode:b&&b.mapping,envMapEncoding:f(b),envMapCubeUV:!!b&&(b.mapping===w.q||b.mapping===w.r),lightMap:!!r.lightMap,lightMapEncoding:f(r.lightMap),aoMap:!!r.aoMap,emissiveMap:!!r.emissiveMap,emissiveMapEncoding:f(r.emissiveMap),bumpMap:!!r.bumpMap,normalMap:!!r.normalMap,objectSpaceNormalMap:r.normalMapType===w.zb,tangentSpaceNormalMap:r.normalMapType===w.Uc,clearcoat:N,clearcoatMap:N&&!!r.clearcoatMap,clearcoatRoughnessMap:N&&!!r.clearcoatRoughnessMap,clearcoatNormalMap:N&&!!r.clearcoatNormalMap,displacementMap:!!r.displacementMap,roughnessMap:!!r.roughnessMap,metalnessMap:!!r.metalnessMap,specularMap:!!r.specularMap,specularIntensityMap:!!r.specularIntensityMap,specularTintMap:!!r.specularTintMap,specularTintMapEncoding:f(r.specularTintMap),alphaMap:!!r.alphaMap,alphaTest:C,gradientMap:!!r.gradientMap,sheen:r.sheen>0,transmission:r.transmission>0,transmissionMap:!!r.transmissionMap,thicknessMap:!!r.thicknessMap,combine:r.combine,vertexTangents:!!r.normalMap&&!!v.geometry&&!!v.geometry.attributes.tangent,vertexColors:r.vertexColors,vertexAlphas:!0===r.vertexColors&&!!v.geometry&&!!v.geometry.attributes.color&&4===v.geometry.attributes.color.itemSize,vertexUvs:!!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatMap||r.clearcoatRoughnessMap||r.clearcoatNormalMap||r.displacementMap||r.transmissionMap||r.thicknessMap||r.specularIntensityMap||r.specularTintMap),uvsVertexOnly:!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatNormalMap||r.transmission>0||r.transmissionMap||r.thicknessMap||r.specularIntensityMap||r.specularTintMap||!r.displacementMap),fog:!!y,useFog:r.fog,fogExp2:y&&y.isFogExp2,flatShading:!!r.flatShading,sizeAttenuation:r.sizeAttenuation,logarithmicDepthBuffer:c,skinning:!0===v.isSkinnedMesh&&A>0,maxBones:A,useVertexTexture:h,morphTargets:!!v.geometry&&!!v.geometry.morphAttributes.position,morphNormals:!!v.geometry&&!!v.geometry.morphAttributes.normal,morphTargetsCount:v.geometry&&v.geometry.morphAttributes.position?v.geometry.morphAttributes.position.length:0,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,format:r.format,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&m.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:w.vb,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,doubleSided:r.side===w.z,flipSided:r.side===w.i,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:l||i.has(\\\\\\\"EXT_frag_depth\\\\\\\"),rendererExtensionDrawBuffers:l||i.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),rendererExtensionShaderTextureLod:l||i.has(\\\\\\\"EXT_shader_texture_lod\\\\\\\"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t<m.length;t++)n.push(e[m[t]]);n.push(t.outputEncoding),n.push(t.gammaFactor)}return n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=_[t.type];let n;if(e){const t=H[e];n=I.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=a.length;t<e;t++){const e=a[t];if(e.cacheKey===n){i=e,++i.usedTimes;break}}return void 0===i&&(i=new _n(t,n,e,r),a.push(i)),i},releaseProgram:function(t){if(0==--t.usedTimes){const e=a.indexOf(t);a[e]=a[a.length-1],a.pop(),t.destroy()}},programs:a}}function fn(){let t=new WeakMap;return{get:function(e){let n=t.get(e);return void 0===n&&(n={},t.set(e,n)),n},remove:function(e){t.delete(e)},update:function(e,n,i){t.get(e)[n]=i},dispose:function(){t=new WeakMap}}}function gn(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program!==e.program?t.program.id-e.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function vn(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function yn(t){const e=[];let n=0;const i=[],s=[],r=[],o={id:-1};function a(i,s,r,a,l,c){let h=e[n];const u=t.get(r);return void 0===h?(h={id:i.id,object:i,geometry:s,material:r,program:u.program||o,groupOrder:a,renderOrder:i.renderOrder,z:l,group:c},e[n]=h):(h.id=i.id,h.object=i,h.geometry=s,h.material=r,h.program=u.program||o,h.groupOrder=a,h.renderOrder=i.renderOrder,h.z=l,h.group=c),n++,h}return{opaque:i,transmissive:s,transparent:r,init:function(){n=0,i.length=0,s.length=0,r.length=0},push:function(t,e,n,o,l,c){const h=a(t,e,n,o,l,c);n.transmission>0?s.push(h):!0===n.transparent?r.push(h):i.push(h)},unshift:function(t,e,n,o,l,c){const h=a(t,e,n,o,l,c);n.transmission>0?s.unshift(h):!0===n.transparent?r.unshift(h):i.unshift(h)},finish:function(){for(let t=n,i=e.length;t<i;t++){const n=e[t];if(null===n.id)break;n.id=null,n.object=null,n.geometry=null,n.material=null,n.program=null,n.group=null}},sort:function(t,e){i.length>1&&i.sort(t||gn),s.length>1&&s.sort(e||vn),r.length>1&&r.sort(e||vn)}}}function xn(t){let e=new WeakMap;return{get:function(n,i){let s;return!1===e.has(n)?(s=new yn(t),e.set(n,[s])):i>=e.get(n).length?(s=new yn(t),e.get(n).push(s)):s=e.get(n)[i],s},dispose:function(){e=new WeakMap}}}function bn(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\\\\\\\"DirectionalLight\\\\\\\":n={direction:new p.a,color:new D.a};break;case\\\\\\\"SpotLight\\\\\\\":n={position:new p.a,direction:new p.a,color:new D.a,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\\\\\\\"PointLight\\\\\\\":n={position:new p.a,color:new D.a,distance:0,decay:0};break;case\\\\\\\"HemisphereLight\\\\\\\":n={direction:new p.a,skyColor:new D.a,groundColor:new D.a};break;case\\\\\\\"RectAreaLight\\\\\\\":n={color:new D.a,position:new p.a,halfWidth:new p.a,halfHeight:new p.a}}return t[e.id]=n,n}}}let wn=0;function Tn(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function An(t,e){const n=new bn,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\\\\\\\"DirectionalLight\\\\\\\":case\\\\\\\"SpotLight\\\\\\\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new d.a};break;case\\\\\\\"PointLight\\\\\\\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new d.a,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),s={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)s.probe.push(new p.a);const r=new p.a,o=new A.a,a=new A.a;return{setup:function(r,o){let a=0,l=0,c=0;for(let t=0;t<9;t++)s.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,_=0,m=0,f=0,g=0;r.sort(Tn);const v=!0!==o?Math.PI:1;for(let t=0,e=r.length;t<e;t++){const e=r[t],o=e.color,y=e.intensity,x=e.distance,b=e.shadow&&e.shadow.map?e.shadow.map.texture:null;if(e.isAmbientLight)a+=o.r*y*v,l+=o.g*y*v,c+=o.b*y*v;else if(e.isLightProbe)for(let t=0;t<9;t++)s.probe[t].addScaledVector(e.sh.coefficients[t],y);else if(e.isDirectionalLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*v),e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,s.directionalShadow[h]=n,s.directionalShadowMap[h]=b,s.directionalShadowMatrix[h]=e.shadow.matrix,m++}s.directional[h]=t,h++}else if(e.isSpotLight){const t=n.get(e);if(t.position.setFromMatrixPosition(e.matrixWorld),t.color.copy(o).multiplyScalar(y*v),t.distance=x,t.coneCos=Math.cos(e.angle),t.penumbraCos=Math.cos(e.angle*(1-e.penumbra)),t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,s.spotShadow[d]=n,s.spotShadowMap[d]=b,s.spotShadowMatrix[d]=e.shadow.matrix,g++}s.spot[d]=t,d++}else if(e.isRectAreaLight){const t=n.get(e);t.color.copy(o).multiplyScalar(y),t.halfWidth.set(.5*e.width,0,0),t.halfHeight.set(0,.5*e.height,0),s.rectArea[p]=t,p++}else if(e.isPointLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*v),t.distance=e.distance,t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,n.shadowCameraNear=t.camera.near,n.shadowCameraFar=t.camera.far,s.pointShadow[u]=n,s.pointShadowMap[u]=b,s.pointShadowMatrix[u]=e.shadow.matrix,f++}s.point[u]=t,u++}else if(e.isHemisphereLight){const t=n.get(e);t.skyColor.copy(e.color).multiplyScalar(y*v),t.groundColor.copy(e.groundColor).multiplyScalar(y*v),s.hemi[_]=t,_++}}p>0&&(e.isWebGL2||!0===t.has(\\\\\\\"OES_texture_float_linear\\\\\\\")?(s.rectAreaLTC1=V.LTC_FLOAT_1,s.rectAreaLTC2=V.LTC_FLOAT_2):!0===t.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\")?(s.rectAreaLTC1=V.LTC_HALF_1,s.rectAreaLTC2=V.LTC_HALF_2):console.error(\\\\\\\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\\\\\\\")),s.ambient[0]=a,s.ambient[1]=l,s.ambient[2]=c;const y=s.hash;y.directionalLength===h&&y.pointLength===u&&y.spotLength===d&&y.rectAreaLength===p&&y.hemiLength===_&&y.numDirectionalShadows===m&&y.numPointShadows===f&&y.numSpotShadows===g||(s.directional.length=h,s.spot.length=d,s.rectArea.length=p,s.point.length=u,s.hemi.length=_,s.directionalShadow.length=m,s.directionalShadowMap.length=m,s.pointShadow.length=f,s.pointShadowMap.length=f,s.spotShadow.length=g,s.spotShadowMap.length=g,s.directionalShadowMatrix.length=m,s.pointShadowMatrix.length=f,s.spotShadowMatrix.length=g,y.directionalLength=h,y.pointLength=u,y.spotLength=d,y.rectAreaLength=p,y.hemiLength=_,y.numDirectionalShadows=m,y.numPointShadows=f,y.numSpotShadows=g,s.version=wn++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e<d;e++){const d=t[e];if(d.isDirectionalLight){const t=s.directional[n];t.direction.setFromMatrixPosition(d.matrixWorld),r.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(r),t.direction.transformDirection(u),n++}else if(d.isSpotLight){const t=s.spot[l];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),t.direction.setFromMatrixPosition(d.matrixWorld),r.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(r),t.direction.transformDirection(u),l++}else if(d.isRectAreaLight){const t=s.rectArea[c];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),a.identity(),o.copy(d.matrixWorld),o.premultiply(u),a.extractRotation(o),t.halfWidth.set(.5*d.width,0,0),t.halfHeight.set(0,.5*d.height,0),t.halfWidth.applyMatrix4(a),t.halfHeight.applyMatrix4(a),c++}else if(d.isPointLight){const t=s.point[i];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),i++}else if(d.isHemisphereLight){const t=s.hemi[h];t.direction.setFromMatrixPosition(d.matrixWorld),t.direction.transformDirection(u),t.direction.normalize(),h++}}},state:s}}function Mn(t,e){const n=new An(t,e),i=[],s=[];return{init:function(){i.length=0,s.length=0},state:{lightsArray:i,shadowsArray:s,lights:n},setupLights:function(t){n.setup(i,t)},setupLightsView:function(t){n.setupView(i,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){s.push(t)}}}function En(t,e){let n=new WeakMap;return{get:function(i,s=0){let r;return!1===n.has(i)?(r=new Mn(t,e),n.set(i,[r])):s>=n.get(i).length?(r=new Mn(t,e),n.get(i).push(r)):r=n.get(i)[s],r},dispose:function(){n=new WeakMap}}}class Sn extends O.a{constructor(t){super(),this.type=\\\\\\\"MeshDepthMaterial\\\\\\\",this.depthPacking=w.j,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}Sn.prototype.isMeshDepthMaterial=!0;class Cn extends O.a{constructor(t){super(),this.type=\\\\\\\"MeshDistanceMaterial\\\\\\\",this.referencePosition=new p.a,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}Cn.prototype.isMeshDistanceMaterial=!0;function Nn(t,e,n){let i=new T.a;const s=new d.a,r=new d.a,o=new _.a,a=new Sn({depthPacking:w.Hb}),l=new Cn,c={},h=n.maxTextureSize,u={0:w.i,1:w.H,2:w.z},p=new F({uniforms:{shadow_pass:{value:null},resolution:{value:new d.a},radius:{value:4},samples:{value:8}},vertexShader:\\\\\\\"\\\\nvoid main() {\\\\n\\\\n\\\\tgl_Position = vec4( position, 1.0 );\\\\n\\\\n}\\\\n\\\\\\\",fragmentShader:\\\\\\\"\\\\nuniform sampler2D shadow_pass;\\\\nuniform vec2 resolution;\\\\nuniform float radius;\\\\nuniform float samples;\\\\n\\\\n#include <packing>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tfloat mean = 0.0;\\\\n\\\\tfloat squared_mean = 0.0;\\\\n\\\\n\\\\t// This seems totally useless but it's a crazy work around for a Adreno compiler bug\\\\n\\\\t// float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\\\n\\\\n\\\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\\\n\\\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\\\n\\\\tfor ( float i = 0.0; i < samples; i ++ ) {\\\\n\\\\n\\\\t\\\\tfloat uvOffset = uvStart + i * uvStride;\\\\n\\\\n\\\\t\\\\t#ifdef HORIZONTAL_PASS\\\\n\\\\n\\\\t\\\\t\\\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\\\n\\\\t\\\\t\\\\tmean += distribution.x;\\\\n\\\\t\\\\t\\\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\\\n\\\\t\\\\t\\\\tmean += depth;\\\\n\\\\t\\\\t\\\\tsquared_mean += depth * depth;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tmean = mean / samples;\\\\n\\\\tsquared_mean = squared_mean / samples;\\\\n\\\\n\\\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\\\n\\\\n\\\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\\\n\\\\n}\\\\n\\\\\\\"}),m=p.clone();m.defines.HORIZONTAL_PASS=1;const f=new S.a;f.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new B.a(f,p),v=this;function y(n,i){const s=e.update(g);p.uniforms.shadow_pass.value=n.map.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,p.uniforms.samples.value=n.blurSamples,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,s,p,g,null),m.uniforms.shadow_pass.value=n.mapPass.texture,m.uniforms.resolution.value=n.mapSize,m.uniforms.radius.value=n.radius,m.uniforms.samples.value=n.blurSamples,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,s,m,g,null)}function x(e,n,i,s,r,o,h){let d=null;const p=!0===s.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(d=void 0!==p?p:!0===s.isPointLight?l:a,t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0){const t=d.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let s=n[e];void 0===s&&(s=d.clone(),n[e]=s),d=s}return d.visible=i.visible,d.wireframe=i.wireframe,h===w.gd?d.side=null!==i.shadowSide?i.shadowSide:i.side:d.side=null!==i.shadowSide?i.shadowSide:u[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,d.clipShadows=i.clipShadows,d.clippingPlanes=i.clippingPlanes,d.clipIntersection=i.clipIntersection,d.displacementMap=i.displacementMap,d.displacementScale=i.displacementScale,d.displacementBias=i.displacementBias,d.wireframeLinewidth=i.wireframeLinewidth,d.linewidth=i.linewidth,!0===s.isPointLight&&!0===d.isMeshDistanceMaterial&&(d.referencePosition.setFromMatrixPosition(s.matrixWorld),d.nearDistance=r,d.farDistance=o),d}function b(n,s,r,o,a){if(!1===n.visible)return;if(n.layers.test(s.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&a===w.gd)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,n.matrixWorld);const i=e.update(n),s=n.material;if(Array.isArray(s)){const e=i.groups;for(let l=0,c=e.length;l<c;l++){const c=e[l],h=s[c.materialIndex];if(h&&h.visible){const e=x(n,0,h,o,r.near,r.far,a);t.renderBufferDirect(r,null,i,e,n,c)}}}else if(s.visible){const e=x(n,0,s,o,r.near,r.far,a);t.renderBufferDirect(r,null,i,e,n,null)}}const l=n.children;for(let t=0,e=l.length;t<e;t++)b(l[t],s,r,o,a)}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=w.Fb,this.render=function(e,n,a){if(!1===v.enabled)return;if(!1===v.autoUpdate&&!1===v.needsUpdate)return;if(0===e.length)return;const l=t.getRenderTarget(),c=t.getActiveCubeFace(),u=t.getActiveMipmapLevel(),d=t.state;d.setBlending(w.ub),d.buffers.color.setClear(1,1,1,1),d.buffers.depth.setTest(!0),d.setScissorTest(!1);for(let l=0,c=e.length;l<c;l++){const c=e[l],u=c.shadow;if(void 0===u){console.warn(\\\\\\\"THREE.WebGLShadowMap:\\\\\\\",c,\\\\\\\"has no shadow.\\\\\\\");continue}if(!1===u.autoUpdate&&!1===u.needsUpdate)continue;s.copy(u.mapSize);const p=u.getFrameExtents();if(s.multiply(p),r.copy(u.mapSize),(s.x>h||s.y>h)&&(s.x>h&&(r.x=Math.floor(h/p.x),s.x=r.x*p.x,u.mapSize.x=r.x),s.y>h&&(r.y=Math.floor(h/p.y),s.y=r.y*p.y,u.mapSize.y=r.y)),null===u.map&&!u.isPointLightShadow&&this.type===w.gd){const t={minFilter:w.V,magFilter:w.V,format:w.Ib};u.map=new K(s.x,s.y,t),u.map.texture.name=c.name+\\\\\\\".shadowMap\\\\\\\",u.mapPass=new K(s.x,s.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:w.ob,magFilter:w.ob,format:w.Ib};u.map=new K(s.x,s.y,t),u.map.texture.name=c.name+\\\\\\\".shadowMap\\\\\\\",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const _=u.getViewportCount();for(let t=0;t<_;t++){const e=u.getViewport(t);o.set(r.x*e.x,r.y*e.y,r.x*e.z,r.y*e.w),d.viewport(o),u.updateMatrices(c,t),i=u.getFrustum(),b(n,a,u.camera,c,this.type)}u.isPointLightShadow||this.type!==w.gd||y(u,a),u.needsUpdate=!1}v.needsUpdate=!1,t.setRenderTarget(l,c,u)}}function Ln(t,e,n){const i=n.isWebGL2;const s=new function(){let e=!1;const n=new _.a;let i=null;const s=new _.a(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,r,o,a){!0===a&&(e*=o,i*=o,r*=o),n.set(e,i,r,o),!1===s.equals(n)&&(t.clearColor(e,i,r,o),s.copy(n))},reset:function(){e=!1,i=null,s.set(-1,0,0,0)}}},r=new function(){let e=!1,n=null,i=null,s=null;return{setTest:function(e){e?k(t.DEPTH_TEST):U(t.DEPTH_TEST)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case w.tb:t.depthFunc(t.NEVER);break;case w.g:t.depthFunc(t.ALWAYS);break;case w.S:t.depthFunc(t.LESS);break;case w.T:t.depthFunc(t.LEQUAL);break;case w.C:t.depthFunc(t.EQUAL);break;case w.L:t.depthFunc(t.GEQUAL);break;case w.K:t.depthFunc(t.GREATER);break;case w.yb:t.depthFunc(t.NOTEQUAL);break;default:t.depthFunc(t.LEQUAL)}else t.depthFunc(t.LEQUAL);i=e}},setLocked:function(t){e=t},setClear:function(e){s!==e&&(t.clearDepth(e),s=e)},reset:function(){e=!1,n=null,i=null,s=null}}},o=new function(){let e=!1,n=null,i=null,s=null,r=null,o=null,a=null,l=null,c=null;return{setTest:function(n){e||(n?k(t.STENCIL_TEST):U(t.STENCIL_TEST))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,o){i===e&&s===n&&r===o||(t.stencilFunc(e,n,o),i=e,s=n,r=o)},setOp:function(e,n,i){o===e&&a===n&&l===i||(t.stencilOp(e,n,i),o=e,a=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,s=null,r=null,o=null,a=null,l=null,c=null}}};let a={},l=null,c={},h=null,u=!1,d=null,p=null,m=null,f=null,g=null,v=null,y=null,x=!1,b=null,T=null,A=null,M=null,E=null;const S=t.getParameter(t.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let C=!1,N=0;const L=t.getParameter(t.VERSION);-1!==L.indexOf(\\\\\\\"WebGL\\\\\\\")?(N=parseFloat(/^WebGL (\\\\d)/.exec(L)[1]),C=N>=1):-1!==L.indexOf(\\\\\\\"OpenGL ES\\\\\\\")&&(N=parseFloat(/^OpenGL ES (\\\\d)/.exec(L)[1]),C=N>=2);let O=null,P={};const R=t.getParameter(t.SCISSOR_BOX),I=t.getParameter(t.VIEWPORT),F=(new _.a).fromArray(R),D=(new _.a).fromArray(I);function B(e,n,i){const s=new Uint8Array(4),r=t.createTexture();t.bindTexture(e,r),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.NEAREST);for(let e=0;e<i;e++)t.texImage2D(n+e,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,s);return r}const z={};function k(e){!0!==a[e]&&(t.enable(e),a[e]=!0)}function U(e){!1!==a[e]&&(t.disable(e),a[e]=!1)}z[t.TEXTURE_2D]=B(t.TEXTURE_2D,t.TEXTURE_2D,1),z[t.TEXTURE_CUBE_MAP]=B(t.TEXTURE_CUBE_MAP,t.TEXTURE_CUBE_MAP_POSITIVE_X,6),s.setClear(0,0,0,1),r.setClear(1),o.setClear(0),k(t.DEPTH_TEST),r.setFunc(w.T),j(!1),W(w.s),k(t.CULL_FACE),H(w.ub);const G={[w.b]:t.FUNC_ADD,[w.Rc]:t.FUNC_SUBTRACT,[w.xc]:t.FUNC_REVERSE_SUBTRACT};if(i)G[w.jb]=t.MIN,G[w.ib]=t.MAX;else{const t=e.get(\\\\\\\"EXT_blend_minmax\\\\\\\");null!==t&&(G[w.jb]=t.MIN_EXT,G[w.ib]=t.MAX_EXT)}const V={[w.jd]:t.ZERO,[w.Ab]:t.ONE,[w.Pc]:t.SRC_COLOR,[w.Nc]:t.SRC_ALPHA,[w.Oc]:t.SRC_ALPHA_SATURATE,[w.B]:t.DST_COLOR,[w.A]:t.DST_ALPHA,[w.Eb]:t.ONE_MINUS_SRC_COLOR,[w.Db]:t.ONE_MINUS_SRC_ALPHA,[w.Cb]:t.ONE_MINUS_DST_COLOR,[w.Bb]:t.ONE_MINUS_DST_ALPHA};function H(e,n,i,s,r,o,a,l){if(e!==w.ub){if(!1===u&&(k(t.BLEND),u=!0),e===w.v)r=r||n,o=o||i,a=a||s,n===p&&r===g||(t.blendEquationSeparate(G[n],G[r]),p=n,g=r),i===m&&s===f&&o===v&&a===y||(t.blendFuncSeparate(V[i],V[s],V[o],V[a]),m=i,f=s,v=o,y=a),d=e,x=null;else if(e!==d||l!==x){if(p===w.b&&g===w.b||(t.blendEquation(t.FUNC_ADD),p=w.b,g=w.b),l)switch(e){case w.xb:t.blendFuncSeparate(t.ONE,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA);break;case w.e:t.blendFunc(t.ONE,t.ONE);break;case w.Sc:t.blendFuncSeparate(t.ZERO,t.ZERO,t.ONE_MINUS_SRC_COLOR,t.ONE_MINUS_SRC_ALPHA);break;case w.mb:t.blendFuncSeparate(t.ZERO,t.SRC_COLOR,t.ZERO,t.SRC_ALPHA);break;default:console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\",e)}else switch(e){case w.xb:t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA);break;case w.e:t.blendFunc(t.SRC_ALPHA,t.ONE);break;case w.Sc:t.blendFunc(t.ZERO,t.ONE_MINUS_SRC_COLOR);break;case w.mb:t.blendFunc(t.ZERO,t.SRC_COLOR);break;default:console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\",e)}m=null,f=null,v=null,y=null,d=e,x=l}}else!0===u&&(U(t.BLEND),u=!1)}function j(e){b!==e&&(e?t.frontFace(t.CW):t.frontFace(t.CCW),b=e)}function W(e){e!==w.u?(k(t.CULL_FACE),e!==T&&(e===w.s?t.cullFace(t.BACK):e===w.t?t.cullFace(t.FRONT):t.cullFace(t.FRONT_AND_BACK))):U(t.CULL_FACE),T=e}function q(e,n,i){e?(k(t.POLYGON_OFFSET_FILL),M===n&&E===i||(t.polygonOffset(n,i),M=n,E=i)):U(t.POLYGON_OFFSET_FILL)}function X(e){void 0===e&&(e=t.TEXTURE0+S-1),O!==e&&(t.activeTexture(e),O=e)}return{buffers:{color:s,depth:r,stencil:o},enable:k,disable:U,bindFramebuffer:function(e,n){return null===n&&null!==l&&(n=l),c[e]!==n&&(t.bindFramebuffer(e,n),c[e]=n,i&&(e===t.DRAW_FRAMEBUFFER&&(c[t.FRAMEBUFFER]=n),e===t.FRAMEBUFFER&&(c[t.DRAW_FRAMEBUFFER]=n)),!0)},bindXRFramebuffer:function(e){e!==l&&(t.bindFramebuffer(t.FRAMEBUFFER,e),l=e)},useProgram:function(e){return h!==e&&(t.useProgram(e),h=e,!0)},setBlending:H,setMaterial:function(e,n){e.side===w.z?U(t.CULL_FACE):k(t.CULL_FACE);let i=e.side===w.i;n&&(i=!i),j(i),e.blending===w.xb&&!1===e.transparent?H(w.ub):H(e.blending,e.blendEquation,e.blendSrc,e.blendDst,e.blendEquationAlpha,e.blendSrcAlpha,e.blendDstAlpha,e.premultipliedAlpha),r.setFunc(e.depthFunc),r.setTest(e.depthTest),r.setMask(e.depthWrite),s.setMask(e.colorWrite);const a=e.stencilWrite;o.setTest(a),a&&(o.setMask(e.stencilWriteMask),o.setFunc(e.stencilFunc,e.stencilRef,e.stencilFuncMask),o.setOp(e.stencilFail,e.stencilZFail,e.stencilZPass)),q(e.polygonOffset,e.polygonOffsetFactor,e.polygonOffsetUnits),!0===e.alphaToCoverage?k(t.SAMPLE_ALPHA_TO_COVERAGE):U(t.SAMPLE_ALPHA_TO_COVERAGE)},setFlipSided:j,setCullFace:W,setLineWidth:function(e){e!==A&&(C&&t.lineWidth(e),A=e)},setPolygonOffset:q,setScissorTest:function(e){e?k(t.SCISSOR_TEST):U(t.SCISSOR_TEST)},activeTexture:X,bindTexture:function(e,n){null===O&&X();let i=P[O];void 0===i&&(i={type:void 0,texture:void 0},P[O]=i),i.type===e&&i.texture===n||(t.bindTexture(e,n||z[e]),i.type=e,i.texture=n)},unbindTexture:function(){const e=P[O];void 0!==e&&void 0!==e.type&&(t.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},texImage3D:function(){try{t.texImage3D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},scissor:function(e){!1===F.equals(e)&&(t.scissor(e.x,e.y,e.z,e.w),F.copy(e))},viewport:function(e){!1===D.equals(e)&&(t.viewport(e.x,e.y,e.z,e.w),D.copy(e))},reset:function(){t.disable(t.BLEND),t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SCISSOR_TEST),t.disable(t.STENCIL_TEST),t.disable(t.SAMPLE_ALPHA_TO_COVERAGE),t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ONE,t.ZERO),t.blendFuncSeparate(t.ONE,t.ZERO,t.ONE,t.ZERO),t.colorMask(!0,!0,!0,!0),t.clearColor(0,0,0,0),t.depthMask(!0),t.depthFunc(t.LESS),t.clearDepth(1),t.stencilMask(4294967295),t.stencilFunc(t.ALWAYS,0,4294967295),t.stencilOp(t.KEEP,t.KEEP,t.KEEP),t.clearStencil(0),t.cullFace(t.BACK),t.frontFace(t.CCW),t.polygonOffset(0,0),t.activeTexture(t.TEXTURE0),t.bindFramebuffer(t.FRAMEBUFFER,null),!0===i&&(t.bindFramebuffer(t.DRAW_FRAMEBUFFER,null),t.bindFramebuffer(t.READ_FRAMEBUFFER,null)),t.useProgram(null),t.lineWidth(1),t.scissor(0,0,t.canvas.width,t.canvas.height),t.viewport(0,0,t.canvas.width,t.canvas.height),a={},O=null,P={},l=null,c={},h=null,u=!1,d=null,p=null,m=null,f=null,g=null,v=null,y=null,x=!1,b=null,T=null,A=null,M=null,E=null,F.set(0,0,t.canvas.width,t.canvas.height),D.set(0,0,t.canvas.width,t.canvas.height),s.reset(),r.reset(),o.reset()}}}var On=n(3);function Pn(t,e,n,i,s,r,o){const a=s.isWebGL2,l=s.maxTextures,c=s.maxCubemapSize,h=s.maxTextureSize,u=s.maxSamples,d=new WeakMap;let p,_=!1;try{_=\\\\\\\"undefined\\\\\\\"!=typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext(\\\\\\\"2d\\\\\\\")}catch(t){}function m(t,e){return _?new OffscreenCanvas(t,e):Object(It.b)(\\\\\\\"canvas\\\\\\\")}function f(t,e,n,i){let s=1;if((t.width>i||t.height>i)&&(s=i/Math.max(t.width,t.height)),s<1||!0===e){if(\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?On.g:Math.floor,r=i(s*t.width),o=i(s*t.height);void 0===p&&(p=m(r,o));const a=n?m(r,o):p;a.width=r,a.height=o;return a.getContext(\\\\\\\"2d\\\\\\\").drawImage(t,0,0,r,o),console.warn(\\\\\\\"THREE.WebGLRenderer: Texture has been resized from (\\\\\\\"+t.width+\\\\\\\"x\\\\\\\"+t.height+\\\\\\\") to (\\\\\\\"+r+\\\\\\\"x\\\\\\\"+o+\\\\\\\").\\\\\\\"),a}return\\\\\\\"data\\\\\\\"in t&&console.warn(\\\\\\\"THREE.WebGLRenderer: Image in DataTexture is too big (\\\\\\\"+t.width+\\\\\\\"x\\\\\\\"+t.height+\\\\\\\").\\\\\\\"),t}return t}function g(t){return On.i(t.width)&&On.i(t.height)}function v(t,e){return t.generateMipmaps&&e&&t.minFilter!==w.ob&&t.minFilter!==w.V}function y(e,n,s,r,o=1){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(s,r,o))}function x(n,i,s,r){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\\\\\\\"+n+\\\\\\\"'\\\\\\\")}let o=i;return i===t.RED&&(s===t.FLOAT&&(o=t.R32F),s===t.HALF_FLOAT&&(o=t.R16F),s===t.UNSIGNED_BYTE&&(o=t.R8)),i===t.RGB&&(s===t.FLOAT&&(o=t.RGB32F),s===t.HALF_FLOAT&&(o=t.RGB16F),s===t.UNSIGNED_BYTE&&(o=t.RGB8)),i===t.RGBA&&(s===t.FLOAT&&(o=t.RGBA32F),s===t.HALF_FLOAT&&(o=t.RGBA16F),s===t.UNSIGNED_BYTE&&(o=r===w.ld?t.SRGB8_ALPHA8:t.RGBA8)),o!==t.R16F&&o!==t.R32F&&o!==t.RGBA16F&&o!==t.RGBA32F||e.get(\\\\\\\"EXT_color_buffer_float\\\\\\\"),o}function b(e){return e===w.ob||e===w.sb||e===w.rb?t.NEAREST:t.LINEAR}function T(e){const n=e.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",T),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),o.memory.textures--}function A(e){const n=e.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",A),function(e){const n=e.texture,s=i.get(e),r=i.get(n);if(!e)return;void 0!==r.__webglTexture&&(t.deleteTexture(r.__webglTexture),o.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(s.__webglFramebuffer[e]),s.__webglDepthbuffer&&t.deleteRenderbuffer(s.__webglDepthbuffer[e]);else t.deleteFramebuffer(s.__webglFramebuffer),s.__webglDepthbuffer&&t.deleteRenderbuffer(s.__webglDepthbuffer),s.__webglMultisampledFramebuffer&&t.deleteFramebuffer(s.__webglMultisampledFramebuffer),s.__webglColorRenderbuffer&&t.deleteRenderbuffer(s.__webglColorRenderbuffer),s.__webglDepthRenderbuffer&&t.deleteRenderbuffer(s.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,s=n.length;e<s;e++){const s=i.get(n[e]);s.__webglTexture&&(t.deleteTexture(s.__webglTexture),o.memory.textures--),i.remove(n[e])}i.remove(n),i.remove(e)}(n)}let M=0;function E(e,s){const r=i.get(e);if(e.isVideoTexture&&function(t){const e=o.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(e),e.version>0&&r.__version!==e.version){const t=e.image;if(void 0===t)console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is undefined\\\\\\\");else{if(!1!==t.complete)return void P(r,e,s);console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\\\\\\\")}}n.activeTexture(t.TEXTURE0+s),n.bindTexture(t.TEXTURE_2D,r.__webglTexture)}function S(e,s){const o=i.get(e);e.version>0&&o.__version!==e.version?function(e,i,s){if(6!==i.image.length)return;O(e,i),n.activeTexture(t.TEXTURE0+s),n.bindTexture(t.TEXTURE_CUBE_MAP,e.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,i.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,i.unpackAlignment),t.pixelStorei(t.UNPACK_COLORSPACE_CONVERSION_WEBGL,t.NONE);const o=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=o||l?l?i.image[t].image:i.image[t]:f(i.image[t],!1,!0,c);const u=h[0],d=g(u)||a,p=r.convert(i.format),_=r.convert(i.type),m=x(i.internalFormat,p,_,i.encoding);let b;if(L(t.TEXTURE_CUBE_MAP,i,d),o){for(let e=0;e<6;e++){b=h[e].mipmaps;for(let s=0;s<b.length;s++){const r=b[s];i.format!==w.Ib&&i.format!==w.ic?null!==p?n.compressedTexImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,s,m,r.width,r.height,0,r.data):console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\\\\\\\"):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,s,m,r.width,r.height,0,p,_,r.data)}}e.__maxMipLevel=b.length-1}else{b=i.mipmaps;for(let e=0;e<6;e++)if(l){n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,m,h[e].width,h[e].height,0,p,_,h[e].data);for(let i=0;i<b.length;i++){const s=b[i].image[e].image;n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,i+1,m,s.width,s.height,0,p,_,s.data)}}else{n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,m,p,_,h[e]);for(let i=0;i<b.length;i++){const s=b[i];n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,i+1,m,p,_,s.image[e])}}e.__maxMipLevel=b.length}v(i,d)&&y(t.TEXTURE_CUBE_MAP,i,u.width,u.height);e.__version=i.version,i.onUpdate&&i.onUpdate(i)}(o,e,s):(n.activeTexture(t.TEXTURE0+s),n.bindTexture(t.TEXTURE_CUBE_MAP,o.__webglTexture))}const C={[w.wc]:t.REPEAT,[w.n]:t.CLAMP_TO_EDGE,[w.kb]:t.MIRRORED_REPEAT},N={[w.ob]:t.NEAREST,[w.sb]:t.NEAREST_MIPMAP_NEAREST,[w.rb]:t.NEAREST_MIPMAP_LINEAR,[w.V]:t.LINEAR,[w.Z]:t.LINEAR_MIPMAP_NEAREST,[w.Y]:t.LINEAR_MIPMAP_LINEAR};function L(n,r,o){if(o?(t.texParameteri(n,t.TEXTURE_WRAP_S,C[r.wrapS]),t.texParameteri(n,t.TEXTURE_WRAP_T,C[r.wrapT]),n!==t.TEXTURE_3D&&n!==t.TEXTURE_2D_ARRAY||t.texParameteri(n,t.TEXTURE_WRAP_R,C[r.wrapR]),t.texParameteri(n,t.TEXTURE_MAG_FILTER,N[r.magFilter]),t.texParameteri(n,t.TEXTURE_MIN_FILTER,N[r.minFilter])):(t.texParameteri(n,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(n,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),n!==t.TEXTURE_3D&&n!==t.TEXTURE_2D_ARRAY||t.texParameteri(n,t.TEXTURE_WRAP_R,t.CLAMP_TO_EDGE),r.wrapS===w.n&&r.wrapT===w.n||console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\\\\\\\"),t.texParameteri(n,t.TEXTURE_MAG_FILTER,b(r.magFilter)),t.texParameteri(n,t.TEXTURE_MIN_FILTER,b(r.minFilter)),r.minFilter!==w.ob&&r.minFilter!==w.V&&console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\\\\\\\")),!0===e.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")){const o=e.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");if(r.type===w.G&&!1===e.has(\\\\\\\"OES_texture_float_linear\\\\\\\"))return;if(!1===a&&r.type===w.M&&!1===e.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\"))return;(r.anisotropy>1||i.get(r).__currentAnisotropy)&&(t.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(r.anisotropy,s.getMaxAnisotropy())),i.get(r).__currentAnisotropy=r.anisotropy)}}function O(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener(\\\\\\\"dispose\\\\\\\",T),e.__webglTexture=t.createTexture(),o.memory.textures++)}function P(e,i,s){let o=t.TEXTURE_2D;i.isDataTexture2DArray&&(o=t.TEXTURE_2D_ARRAY),i.isDataTexture3D&&(o=t.TEXTURE_3D),O(e,i),n.activeTexture(t.TEXTURE0+s),n.bindTexture(o,e.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,i.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,i.unpackAlignment),t.pixelStorei(t.UNPACK_COLORSPACE_CONVERSION_WEBGL,t.NONE);const l=function(t){return!a&&(t.wrapS!==w.n||t.wrapT!==w.n||t.minFilter!==w.ob&&t.minFilter!==w.V)}(i)&&!1===g(i.image),c=f(i.image,l,!1,h),u=g(c)||a,d=r.convert(i.format);let p,_=r.convert(i.type),m=x(i.internalFormat,d,_,i.encoding);L(o,i,u);const b=i.mipmaps;if(i.isDepthTexture)m=t.DEPTH_COMPONENT,a?m=i.type===w.G?t.DEPTH_COMPONENT32F:i.type===w.bd?t.DEPTH_COMPONENT24:i.type===w.ad?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT16:i.type===w.G&&console.error(\\\\\\\"WebGLRenderer: Floating point depth texture requires WebGL2.\\\\\\\"),i.format===w.x&&m===t.DEPTH_COMPONENT&&i.type!==w.fd&&i.type!==w.bd&&(console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\\\\\\\"),i.type=w.fd,_=r.convert(i.type)),i.format===w.y&&m===t.DEPTH_COMPONENT&&(m=t.DEPTH_STENCIL,i.type!==w.ad&&(console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\\\\\\\"),i.type=w.ad,_=r.convert(i.type))),n.texImage2D(t.TEXTURE_2D,0,m,c.width,c.height,0,d,_,null);else if(i.isDataTexture)if(b.length>0&&u){for(let e=0,i=b.length;e<i;e++)p=b[e],n.texImage2D(t.TEXTURE_2D,e,m,p.width,p.height,0,d,_,p.data);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(t.TEXTURE_2D,0,m,c.width,c.height,0,d,_,c.data),e.__maxMipLevel=0;else if(i.isCompressedTexture){for(let e=0,s=b.length;e<s;e++)p=b[e],i.format!==w.Ib&&i.format!==w.ic?null!==d?n.compressedTexImage2D(t.TEXTURE_2D,e,m,p.width,p.height,0,p.data):console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\\\\\\\"):n.texImage2D(t.TEXTURE_2D,e,m,p.width,p.height,0,d,_,p.data);e.__maxMipLevel=b.length-1}else if(i.isDataTexture2DArray)n.texImage3D(t.TEXTURE_2D_ARRAY,0,m,c.width,c.height,c.depth,0,d,_,c.data),e.__maxMipLevel=0;else if(i.isDataTexture3D)n.texImage3D(t.TEXTURE_3D,0,m,c.width,c.height,c.depth,0,d,_,c.data),e.__maxMipLevel=0;else if(b.length>0&&u){for(let e=0,i=b.length;e<i;e++)p=b[e],n.texImage2D(t.TEXTURE_2D,e,m,d,_,p);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(t.TEXTURE_2D,0,m,d,_,c),e.__maxMipLevel=0;v(i,u)&&y(o,i,c.width,c.height),e.__version=i.version,i.onUpdate&&i.onUpdate(i)}function R(e,s,o,a,l){const c=r.convert(o.format),h=r.convert(o.type),u=x(o.internalFormat,c,h,o.encoding);l===t.TEXTURE_3D||l===t.TEXTURE_2D_ARRAY?n.texImage3D(l,0,u,s.width,s.height,s.depth,0,c,h,null):n.texImage2D(l,0,u,s.width,s.height,0,c,h,null),n.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,a,l,i.get(o).__webglTexture,0),n.bindFramebuffer(t.FRAMEBUFFER,null)}function I(e,n,i){if(t.bindRenderbuffer(t.RENDERBUFFER,e),n.depthBuffer&&!n.stencilBuffer){let s=t.DEPTH_COMPONENT16;if(i){const e=n.depthTexture;e&&e.isDepthTexture&&(e.type===w.G?s=t.DEPTH_COMPONENT32F:e.type===w.bd&&(s=t.DEPTH_COMPONENT24));const i=D(n);t.renderbufferStorageMultisample(t.RENDERBUFFER,i,s,n.width,n.height)}else t.renderbufferStorage(t.RENDERBUFFER,s,n.width,n.height);t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e)}else if(n.depthBuffer&&n.stencilBuffer){if(i){const e=D(n);t.renderbufferStorageMultisample(t.RENDERBUFFER,e,t.DEPTH24_STENCIL8,n.width,n.height)}else t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,n.width,n.height);t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture[0]:n.texture,s=r.convert(e.format),o=r.convert(e.type),a=x(e.internalFormat,s,o,e.encoding);if(i){const e=D(n);t.renderbufferStorageMultisample(t.RENDERBUFFER,e,a,n.width,n.height)}else t.renderbufferStorage(t.RENDERBUFFER,a,n.width,n.height)}t.bindRenderbuffer(t.RENDERBUFFER,null)}function F(e){const s=i.get(e),r=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture){if(r)throw new Error(\\\\\\\"target.depthTexture not supported in Cube render targets\\\\\\\");!function(e,s){if(s&&s.isWebGLCubeRenderTarget)throw new Error(\\\\\\\"Depth Texture with cube render targets is not supported\\\\\\\");if(n.bindFramebuffer(t.FRAMEBUFFER,e),!s.depthTexture||!s.depthTexture.isDepthTexture)throw new Error(\\\\\\\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\\\\\\\");i.get(s.depthTexture).__webglTexture&&s.depthTexture.image.width===s.width&&s.depthTexture.image.height===s.height||(s.depthTexture.image.width=s.width,s.depthTexture.image.height=s.height,s.depthTexture.needsUpdate=!0),E(s.depthTexture,0);const r=i.get(s.depthTexture).__webglTexture;if(s.depthTexture.format===w.x)t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.TEXTURE_2D,r,0);else{if(s.depthTexture.format!==w.y)throw new Error(\\\\\\\"Unknown depthTexture format\\\\\\\");t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.TEXTURE_2D,r,0)}}(s.__webglFramebuffer,e)}else if(r){s.__webglDepthbuffer=[];for(let i=0;i<6;i++)n.bindFramebuffer(t.FRAMEBUFFER,s.__webglFramebuffer[i]),s.__webglDepthbuffer[i]=t.createRenderbuffer(),I(s.__webglDepthbuffer[i],e,!1)}else n.bindFramebuffer(t.FRAMEBUFFER,s.__webglFramebuffer),s.__webglDepthbuffer=t.createRenderbuffer(),I(s.__webglDepthbuffer,e,!1);n.bindFramebuffer(t.FRAMEBUFFER,null)}function D(t){return a&&t.isWebGLMultisampleRenderTarget?Math.min(u,t.samples):0}let B=!1,z=!1;this.allocateTextureUnit=function(){const t=M;return t>=l&&console.warn(\\\\\\\"THREE.WebGLTextures: Trying to use \\\\\\\"+t+\\\\\\\" texture units while this GPU supports only \\\\\\\"+l),M+=1,t},this.resetTextureUnits=function(){M=0},this.setTexture2D=E,this.setTexture2DArray=function(e,s){const r=i.get(e);e.version>0&&r.__version!==e.version?P(r,e,s):(n.activeTexture(t.TEXTURE0+s),n.bindTexture(t.TEXTURE_2D_ARRAY,r.__webglTexture))},this.setTexture3D=function(e,s){const r=i.get(e);e.version>0&&r.__version!==e.version?P(r,e,s):(n.activeTexture(t.TEXTURE0+s),n.bindTexture(t.TEXTURE_3D,r.__webglTexture))},this.setTextureCube=S,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),h=i.get(l);e.addEventListener(\\\\\\\"dispose\\\\\\\",A),!0!==e.isWebGLMultipleRenderTargets&&(h.__webglTexture=t.createTexture(),h.__version=l.version,o.memory.textures++);const u=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,_=l.isDataTexture3D||l.isDataTexture2DArray,m=g(e)||a;if(!a||l.format!==w.ic||l.type!==w.G&&l.type!==w.M||(l.format=w.Ib,console.warn(\\\\\\\"THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.\\\\\\\")),u){c.__webglFramebuffer=[];for(let e=0;e<6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(s.drawBuffers){const n=e.texture;for(let e=0,s=n.length;e<s;e++){const s=i.get(n[e]);void 0===s.__webglTexture&&(s.__webglTexture=t.createTexture(),o.memory.textures++)}}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\\\\\\\");else if(p)if(a){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,c.__webglColorRenderbuffer);const i=r.convert(l.format),s=r.convert(l.type),o=x(l.internalFormat,i,s,l.encoding),a=D(e);t.renderbufferStorageMultisample(t.RENDERBUFFER,a,o,e.width,e.height),n.bindFramebuffer(t.FRAMEBUFFER,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.RENDERBUFFER,c.__webglColorRenderbuffer),t.bindRenderbuffer(t.RENDERBUFFER,null),e.depthBuffer&&(c.__webglDepthRenderbuffer=t.createRenderbuffer(),I(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(t.FRAMEBUFFER,null)}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\");if(u){n.bindTexture(t.TEXTURE_CUBE_MAP,h.__webglTexture),L(t.TEXTURE_CUBE_MAP,l,m);for(let n=0;n<6;n++)R(c.__webglFramebuffer[n],e,l,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+n);v(l,m)&&y(t.TEXTURE_CUBE_MAP,l,e.width,e.height),n.unbindTexture()}else if(d){const s=e.texture;for(let r=0,o=s.length;r<o;r++){const o=s[r],a=i.get(o);n.bindTexture(t.TEXTURE_2D,a.__webglTexture),L(t.TEXTURE_2D,o,m),R(c.__webglFramebuffer,e,o,t.COLOR_ATTACHMENT0+r,t.TEXTURE_2D),v(o,m)&&y(t.TEXTURE_2D,o,e.width,e.height)}n.unbindTexture()}else{let i=t.TEXTURE_2D;if(_)if(a){i=l.isDataTexture3D?t.TEXTURE_3D:t.TEXTURE_2D_ARRAY}else console.warn(\\\\\\\"THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.\\\\\\\");n.bindTexture(i,h.__webglTexture),L(i,l,m),R(c.__webglFramebuffer,e,l,t.COLOR_ATTACHMENT0,i),v(l,m)&&y(i,l,e.width,e.height,e.depth),n.unbindTexture()}e.depthBuffer&&F(e)},this.updateRenderTargetMipmap=function(e){const s=g(e)||a,r=!0===e.isWebGLMultipleRenderTargets?e.texture:[e.texture];for(let o=0,a=r.length;o<a;o++){const a=r[o];if(v(a,s)){const s=e.isWebGLCubeRenderTarget?t.TEXTURE_CUBE_MAP:t.TEXTURE_2D,r=i.get(a).__webglTexture;n.bindTexture(s,r),y(s,a,e.width,e.height),n.unbindTexture()}}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const s=e.width,r=e.height;let o=t.COLOR_BUFFER_BIT;e.depthBuffer&&(o|=t.DEPTH_BUFFER_BIT),e.stencilBuffer&&(o|=t.STENCIL_BUFFER_BIT);const a=i.get(e);n.bindFramebuffer(t.READ_FRAMEBUFFER,a.__webglMultisampledFramebuffer),n.bindFramebuffer(t.DRAW_FRAMEBUFFER,a.__webglFramebuffer),t.blitFramebuffer(0,0,s,r,0,0,s,r,o,t.NEAREST),n.bindFramebuffer(t.READ_FRAMEBUFFER,null),n.bindFramebuffer(t.DRAW_FRAMEBUFFER,a.__webglMultisampledFramebuffer)}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===B&&(console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\\\\\\\"),B=!0),t=t.texture),E(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===z&&(console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\\\\\\\"),z=!0),t=t.texture),S(t,e)}}function Rn(t,e,n){const i=n.isWebGL2;return{convert:function(n){let s;if(n===w.Zc)return t.UNSIGNED_BYTE;if(n===w.cd)return t.UNSIGNED_SHORT_4_4_4_4;if(n===w.dd)return t.UNSIGNED_SHORT_5_5_5_1;if(n===w.ed)return t.UNSIGNED_SHORT_5_6_5;if(n===w.l)return t.BYTE;if(n===w.Mc)return t.SHORT;if(n===w.fd)return t.UNSIGNED_SHORT;if(n===w.N)return t.INT;if(n===w.bd)return t.UNSIGNED_INT;if(n===w.G)return t.FLOAT;if(n===w.M)return i?t.HALF_FLOAT:(s=e.get(\\\\\\\"OES_texture_half_float\\\\\\\"),null!==s?s.HALF_FLOAT_OES:null);if(n===w.f)return t.ALPHA;if(n===w.ic)return t.RGB;if(n===w.Ib)return t.RGBA;if(n===w.gb)return t.LUMINANCE;if(n===w.fb)return t.LUMINANCE_ALPHA;if(n===w.x)return t.DEPTH_COMPONENT;if(n===w.y)return t.DEPTH_STENCIL;if(n===w.tc)return t.RED;if(n===w.uc)return t.RED_INTEGER;if(n===w.rc)return t.RG;if(n===w.sc)return t.RG_INTEGER;if(n===w.jc)return t.RGB_INTEGER;if(n===w.Jb)return t.RGBA_INTEGER;if(n===w.qc||n===w.cc||n===w.dc||n===w.ec){if(s=e.get(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\"),null===s)return null;if(n===w.qc)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===w.cc)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===w.dc)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===w.ec)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(n===w.pc||n===w.oc||n===w.bc||n===w.ac){if(s=e.get(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\"),null===s)return null;if(n===w.pc)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===w.oc)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===w.bc)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===w.ac)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(n===w.mc)return s=e.get(\\\\\\\"WEBGL_compressed_texture_etc1\\\\\\\"),null!==s?s.COMPRESSED_RGB_ETC1_WEBGL:null;if((n===w.nc||n===w.Zb)&&(s=e.get(\\\\\\\"WEBGL_compressed_texture_etc\\\\\\\"),null!==s)){if(n===w.nc)return s.COMPRESSED_RGB8_ETC2;if(n===w.Zb)return s.COMPRESSED_RGBA8_ETC2_EAC}return n===w.Qb||n===w.Rb||n===w.Sb||n===w.Tb||n===w.Ub||n===w.Vb||n===w.Wb||n===w.Xb||n===w.Lb||n===w.Mb||n===w.Nb||n===w.Kb||n===w.Ob||n===w.Pb||n===w.Ec||n===w.Fc||n===w.Gc||n===w.Hc||n===w.Ic||n===w.Jc||n===w.Kc||n===w.Lc||n===w.zc||n===w.Ac||n===w.Bc||n===w.yc||n===w.Cc||n===w.Dc?(s=e.get(\\\\\\\"WEBGL_compressed_texture_astc\\\\\\\"),null!==s?n:null):n===w.Yb?(s=e.get(\\\\\\\"EXT_texture_compression_bptc\\\\\\\"),null!==s?n:null):n===w.ad?i?t.UNSIGNED_INT_24_8:(s=e.get(\\\\\\\"WEBGL_depth_texture\\\\\\\"),null!==s?s.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}class In extends tt.a{constructor(t=[]){super(),this.cameras=t}}In.prototype.isArrayCamera=!0;var Fn=n(21);const Dn={type:\\\\\\\"move\\\\\\\"};class Bn{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new Fn.a,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new Fn.a,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new p.a,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new p.a),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new Fn.a,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new p.a,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new p.a),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:\\\\\\\"disconnected\\\\\\\",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,n){let i=null,s=null,r=null;const o=this._targetRay,a=this._grip,l=this._hand;if(t&&\\\\\\\"visible-blurred\\\\\\\"!==e.session.visibilityState)if(null!==o&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(o.matrix.fromArray(i.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),i.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(i.linearVelocity)):o.hasLinearVelocity=!1,i.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(i.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Dn))),l&&t.hand){r=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new Fn.a;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const s=l.joints[i.jointName];null!==t&&(s.matrix.fromArray(t.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.jointRadius=t.radius),s.visible=null!==t}const i=l.joints[\\\\\\\"index-finger-tip\\\\\\\"],s=l.joints[\\\\\\\"thumb-tip\\\\\\\"],o=i.position.distanceTo(s.position),a=.02,c=.005;l.inputState.pinching&&o>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:\\\\\\\"pinchend\\\\\\\",handedness:t.handedness,target:this})):!l.inputState.pinching&&o<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:\\\\\\\"pinchstart\\\\\\\",handedness:t.handedness,target:this}))}else null!==a&&t.gripSpace&&(s=e.getPose(t.gripSpace,n),null!==s&&(a.matrix.fromArray(s.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),s.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(s.linearVelocity)):a.hasLinearVelocity=!1,s.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(s.angularVelocity)):a.hasAngularVelocity=!1));return null!==o&&(o.visible=null!==i),null!==a&&(a.visible=null!==s),null!==l&&(l.visible=null!==r),this}}class zn extends J.a{constructor(t,e){super();const n=this,i=t.state;let s=null,r=1,o=null,a=\\\\\\\"local-floor\\\\\\\",l=null,c=null,h=null,u=null,d=null,m=!1,f=null,g=null,v=null,y=null,x=null,b=null;const w=[],T=new Map,A=new tt.a;A.layers.enable(1),A.viewport=new _.a;const E=new tt.a;E.layers.enable(2),E.viewport=new _.a;const S=[A,E],C=new In;C.layers.enable(1),C.layers.enable(2);let N=null,L=null;function O(t){const e=T.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function P(){T.forEach((function(t,e){t.disconnect(e)})),T.clear(),N=null,L=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),h&&e.deleteFramebuffer(h),f&&e.deleteFramebuffer(f),g&&e.deleteRenderbuffer(g),v&&e.deleteRenderbuffer(v),h=null,f=null,g=null,v=null,d=null,u=null,c=null,s=null,z.stop(),n.isPresenting=!1,n.dispatchEvent({type:\\\\\\\"sessionend\\\\\\\"})}function R(t){const e=s.inputSources;for(let t=0;t<w.length;t++)T.set(e[t],w[t]);for(let e=0;e<t.removed.length;e++){const n=t.removed[e],i=T.get(n);i&&(i.dispatchEvent({type:\\\\\\\"disconnected\\\\\\\",data:n}),T.delete(n))}for(let e=0;e<t.added.length;e++){const n=t.added[e],i=T.get(n);i&&i.dispatchEvent({type:\\\\\\\"connected\\\\\\\",data:n})}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=w[t];return void 0===e&&(e=new Bn,w[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=w[t];return void 0===e&&(e=new Bn,w[t]=e),e.getGripSpace()},this.getHand=function(t){let e=w[t];return void 0===e&&(e=new Bn,w[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){r=t,!0===n.isPresenting&&console.warn(\\\\\\\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\\\\\\\")},this.setReferenceSpaceType=function(t){a=t,!0===n.isPresenting&&console.warn(\\\\\\\"THREE.WebXRManager: Cannot change reference space type while presenting.\\\\\\\")},this.getReferenceSpace=function(){return o},this.getBaseLayer=function(){return null!==u?u:d},this.getBinding=function(){return c},this.getFrame=function(){return y},this.getSession=function(){return s},this.setSession=async function(t){if(s=t,null!==s){s.addEventListener(\\\\\\\"select\\\\\\\",O),s.addEventListener(\\\\\\\"selectstart\\\\\\\",O),s.addEventListener(\\\\\\\"selectend\\\\\\\",O),s.addEventListener(\\\\\\\"squeeze\\\\\\\",O),s.addEventListener(\\\\\\\"squeezestart\\\\\\\",O),s.addEventListener(\\\\\\\"squeezeend\\\\\\\",O),s.addEventListener(\\\\\\\"end\\\\\\\",P),s.addEventListener(\\\\\\\"inputsourceschange\\\\\\\",R);const t=e.getContextAttributes();if(!0!==t.xrCompatible&&await e.makeXRCompatible(),void 0===s.renderState.layers){const n={antialias:t.antialias,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(s,e,n),s.updateRenderState({baseLayer:d})}else if(e instanceof WebGLRenderingContext){const n={antialias:!0,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(s,e,n),s.updateRenderState({layers:[d]})}else{m=t.antialias;let n=null;t.depth&&(b=e.DEPTH_BUFFER_BIT,t.stencil&&(b|=e.STENCIL_BUFFER_BIT),x=t.stencil?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,n=t.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24);const o={colorFormat:t.alpha?e.RGBA8:e.RGB8,depthFormat:n,scaleFactor:r};c=new XRWebGLBinding(s,e),u=c.createProjectionLayer(o),h=e.createFramebuffer(),s.updateRenderState({layers:[u]}),m&&(f=e.createFramebuffer(),g=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,g),e.renderbufferStorageMultisample(e.RENDERBUFFER,4,e.RGBA8,u.textureWidth,u.textureHeight),i.bindFramebuffer(e.FRAMEBUFFER,f),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.RENDERBUFFER,g),e.bindRenderbuffer(e.RENDERBUFFER,null),null!==n&&(v=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,v),e.renderbufferStorageMultisample(e.RENDERBUFFER,4,n,u.textureWidth,u.textureHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,x,e.RENDERBUFFER,v),e.bindRenderbuffer(e.RENDERBUFFER,null)),i.bindFramebuffer(e.FRAMEBUFFER,null))}o=await s.requestReferenceSpace(a),z.setContext(s),z.start(),n.isPresenting=!0,n.dispatchEvent({type:\\\\\\\"sessionstart\\\\\\\"})}};const I=new p.a,F=new p.a;function D(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===s)return;C.near=E.near=A.near=t.near,C.far=E.far=A.far=t.far,N===C.near&&L===C.far||(s.updateRenderState({depthNear:C.near,depthFar:C.far}),N=C.near,L=C.far);const e=t.parent,n=C.cameras;D(C,e);for(let t=0;t<n.length;t++)D(n[t],e);C.matrixWorld.decompose(C.position,C.quaternion,C.scale),t.position.copy(C.position),t.quaternion.copy(C.quaternion),t.scale.copy(C.scale),t.matrix.copy(C.matrix),t.matrixWorld.copy(C.matrixWorld);const i=t.children;for(let t=0,e=i.length;t<e;t++)i[t].updateMatrixWorld(!0);2===n.length?function(t,e,n){I.setFromMatrixPosition(e.matrixWorld),F.setFromMatrixPosition(n.matrixWorld);const i=I.distanceTo(F),s=e.projectionMatrix.elements,r=n.projectionMatrix.elements,o=s[14]/(s[10]-1),a=s[14]/(s[10]+1),l=(s[9]+1)/s[5],c=(s[9]-1)/s[5],h=(s[8]-1)/s[0],u=(r[8]+1)/r[0],d=o*h,p=o*u,_=i/(-h+u),m=_*-h;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(m),t.translateZ(_),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.copy(t.matrixWorld).invert();const f=o+_,g=a+_,v=d-m,y=p+(i-m),x=l*a/g*f,b=c*a/g*f;t.projectionMatrix.makePerspective(v,y,x,b,f,g)}(C,A,E):C.projectionMatrix.copy(A.projectionMatrix)},this.getCamera=function(){return C},this.getFoveation=function(){return null!==u?u.fixedFoveation:null!==d?d.fixedFoveation:void 0},this.setFoveation=function(t){null!==u&&(u.fixedFoveation=t),null!==d&&void 0!==d.fixedFoveation&&(d.fixedFoveation=t)};let B=null;const z=new M;z.setAnimationLoop((function(t,n){if(l=n.getViewerPose(o),y=n,null!==l){const t=l.views;null!==d&&i.bindXRFramebuffer(d.framebuffer);let n=!1;t.length!==C.cameras.length&&(C.cameras.length=0,n=!0);for(let s=0;s<t.length;s++){const r=t[s];let o=null;if(null!==d)o=d.getViewport(r);else{const t=c.getViewSubImage(u,r);i.bindXRFramebuffer(h),void 0!==t.depthStencilTexture&&e.framebufferTexture2D(e.FRAMEBUFFER,x,e.TEXTURE_2D,t.depthStencilTexture,0),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t.colorTexture,0),o=t.viewport}const a=S[s];a.matrix.fromArray(r.transform.matrix),a.projectionMatrix.fromArray(r.projectionMatrix),a.viewport.set(o.x,o.y,o.width,o.height),0===s&&C.matrix.copy(a.matrix),!0===n&&C.cameras.push(a)}m&&(i.bindXRFramebuffer(f),null!==b&&e.clear(b))}const r=s.inputSources;for(let t=0;t<w.length;t++){const e=w[t],i=r[t];e.update(i,n,o)}if(B&&B(t,n),m){const t=u.textureWidth,n=u.textureHeight;i.bindFramebuffer(e.READ_FRAMEBUFFER,f),i.bindFramebuffer(e.DRAW_FRAMEBUFFER,h),e.invalidateFramebuffer(e.READ_FRAMEBUFFER,[x]),e.invalidateFramebuffer(e.DRAW_FRAMEBUFFER,[x]),e.blitFramebuffer(0,0,t,n,0,0,t,n,e.COLOR_BUFFER_BIT,e.NEAREST),e.invalidateFramebuffer(e.READ_FRAMEBUFFER,[e.COLOR_ATTACHMENT0]),i.bindFramebuffer(e.READ_FRAMEBUFFER,null),i.bindFramebuffer(e.DRAW_FRAMEBUFFER,null),i.bindFramebuffer(e.FRAMEBUFFER,f)}y=null})),this.setAnimationLoop=function(t){B=t},this.dispose=function(){}}}function kn(t){function e(e,n){e.opacity.value=n.opacity,n.color&&e.diffuse.value.copy(n.color),n.emissive&&e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map&&(e.map.value=n.map),n.alphaMap&&(e.alphaMap.value=n.alphaMap),n.specularMap&&(e.specularMap.value=n.specularMap),n.alphaTest>0&&(e.alphaTest.value=n.alphaTest);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,e.reflectivity.value=n.reflectivity,e.ior.value=n.ior,e.refractionRatio.value=n.refractionRatio;const s=t.get(i).__maxMipLevel;void 0!==s&&(e.maxMipLevel.value=s)}let s,r;n.lightMap&&(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap&&(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?s=n.map:n.specularMap?s=n.specularMap:n.displacementMap?s=n.displacementMap:n.normalMap?s=n.normalMap:n.bumpMap?s=n.bumpMap:n.roughnessMap?s=n.roughnessMap:n.metalnessMap?s=n.metalnessMap:n.alphaMap?s=n.alphaMap:n.emissiveMap?s=n.emissiveMap:n.clearcoatMap?s=n.clearcoatMap:n.clearcoatNormalMap?s=n.clearcoatNormalMap:n.clearcoatRoughnessMap?s=n.clearcoatRoughnessMap:n.specularIntensityMap?s=n.specularIntensityMap:n.specularTintMap?s=n.specularTintMap:n.transmissionMap?s=n.transmissionMap:n.thicknessMap&&(s=n.thicknessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),e.uvTransform.value.copy(s.matrix)),n.aoMap?r=n.aoMap:n.lightMap&&(r=n.lightMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uv2Transform.value.copy(r.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap&&(e.roughnessMap.value=n.roughnessMap),n.metalnessMap&&(e.metalnessMap.value=n.metalnessMap),n.emissiveMap&&(e.emissiveMap.value=n.emissiveMap),n.bumpMap&&(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,n.side===w.i&&(e.bumpScale.value*=-1)),n.normalMap&&(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),n.side===w.i&&e.normalScale.value.negate()),n.displacementMap&&(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap&&(e.envMapIntensity.value=n.envMapIntensity)}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,s,r,o){i.isMeshBasicMaterial?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap);e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===w.i&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===w.i&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===w.i&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===w.i&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),t.ior.value=e.ior,e.sheen>0&&(t.sheenTint.value.copy(e.sheenTint).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness);e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,e.side===w.i&&t.clearcoatNormalScale.value.negate()));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationTint.value.copy(e.attenuationTint));t.specularIntensity.value=e.specularIntensity,t.specularTint.value.copy(e.specularTint),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularTintMap&&(t.specularTintMap.value=e.specularTintMap)}(t,i,o):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===w.i&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===w.i&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===w.i&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===w.i&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let s;e.map?s=e.map:e.alphaMap&&(s=e.alphaMap);void 0!==s&&(!0===s.matrixAutoUpdate&&s.updateMatrix(),t.uvTransform.value.copy(s.matrix))}(t,i,s,r):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function Un(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=Object(It.b)(\\\\\\\"canvas\\\\\\\");return t.style.display=\\\\\\\"block\\\\\\\",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,s=void 0===t.depth||t.depth,r=void 0===t.stencil||t.stencil,o=void 0!==t.antialias&&t.antialias,a=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:\\\\\\\"default\\\\\\\",h=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let u=null,d=null;const m=[],f=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=w.U,this.physicallyCorrectLights=!1,this.toneMapping=w.vb,this.toneMappingExposure=1;const g=this;let v=!1,y=0,x=0,b=null,S=-1,C=null;const N=new _.a,L=new _.a;let O=null,P=e.width,R=e.height,I=1,F=null,D=null;const B=new _.a(0,0,P,R),z=new _.a(0,0,P,R);let k=!1;const U=[],G=new T.a;let V=!1,H=!1,Y=null;const J=new A.a,Z=new p.a,Q={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function tt(){return null===b?I:1}let et,nt,it,st,ot,at,lt,ct,ht,ut,dt,pt,_t,mt,ft,gt,vt,yt,xt,bt,wt,Tt,At,Mt=n;function Et(t,n){for(let i=0;i<t.length;i++){const s=t[i],r=e.getContext(s,n);if(null!==r)return r}return null}try{const t={alpha:i,depth:s,stencil:r,antialias:o,premultipliedAlpha:a,preserveDrawingBuffer:l,powerPreference:c,failIfMajorPerformanceCaveat:h};if(e.addEventListener(\\\\\\\"webglcontextlost\\\\\\\",Nt,!1),e.addEventListener(\\\\\\\"webglcontextrestored\\\\\\\",Lt,!1),null===Mt){const e=[\\\\\\\"webgl2\\\\\\\",\\\\\\\"webgl\\\\\\\",\\\\\\\"experimental-webgl\\\\\\\"];if(!0===g.isWebGL1Renderer&&e.shift(),Mt=Et(e,t),null===Mt)throw Et(e)?new Error(\\\\\\\"Error creating WebGL context with your selected attributes.\\\\\\\"):new Error(\\\\\\\"Error creating WebGL context.\\\\\\\")}void 0===Mt.getShaderPrecisionFormat&&(Mt.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error(\\\\\\\"THREE.WebGLRenderer: \\\\\\\"+t.message),t}function St(){et=new Rt(Mt),nt=new X(Mt,et,t),et.init(nt),Tt=new Rn(Mt,et,nt),it=new Ln(Mt,et,nt),U[0]=Mt.BACK,st=new Bt(Mt),ot=new fn,at=new Pn(Mt,et,it,ot,nt,Tt,st),lt=new rt(g),ct=new Pt(g),ht=new E(Mt,nt),At=new W(Mt,et,ht,nt),ut=new Ft(Mt,ht,st,At),dt=new jt(Mt,ut,ht,st),xt=new Vt(Mt,nt,at),gt=new $(ot),pt=new mn(g,lt,ct,et,nt,At,gt),_t=new kn(ot),mt=new xn(ot),ft=new En(et,nt),yt=new j(g,lt,it,dt,a),vt=new Nn(g,dt,nt),bt=new q(Mt,et,st,nt),wt=new Dt(Mt,et,st,nt),st.programs=pt.programs,g.capabilities=nt,g.extensions=et,g.properties=ot,g.renderLists=mt,g.shadowMap=vt,g.state=it,g.info=st}St();const Ct=new zn(g,Mt);function Nt(t){t.preventDefault(),console.log(\\\\\\\"THREE.WebGLRenderer: Context Lost.\\\\\\\"),v=!0}function Lt(){console.log(\\\\\\\"THREE.WebGLRenderer: Context Restored.\\\\\\\"),v=!1;const t=st.autoReset,e=vt.enabled,n=vt.autoUpdate,i=vt.needsUpdate,s=vt.type;St(),st.autoReset=t,vt.enabled=e,vt.autoUpdate=n,vt.needsUpdate=i,vt.type=s}function Ot(t){const e=t.target;e.removeEventListener(\\\\\\\"dispose\\\\\\\",Ot),function(t){(function(t){const e=ot.get(t).programs;void 0!==e&&e.forEach((function(t){pt.releaseProgram(t)}))})(t),ot.remove(t)}(e)}this.xr=Ct,this.getContext=function(){return Mt},this.getContextAttributes=function(){return Mt.getContextAttributes()},this.forceContextLoss=function(){const t=et.get(\\\\\\\"WEBGL_lose_context\\\\\\\");t&&t.loseContext()},this.forceContextRestore=function(){const t=et.get(\\\\\\\"WEBGL_lose_context\\\\\\\");t&&t.restoreContext()},this.getPixelRatio=function(){return I},this.setPixelRatio=function(t){void 0!==t&&(I=t,this.setSize(P,R,!1))},this.getSize=function(t){return t.set(P,R)},this.setSize=function(t,n,i){Ct.isPresenting?console.warn(\\\\\\\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\\\\\\\"):(P=t,R=n,e.width=Math.floor(t*I),e.height=Math.floor(n*I),!1!==i&&(e.style.width=t+\\\\\\\"px\\\\\\\",e.style.height=n+\\\\\\\"px\\\\\\\"),this.setViewport(0,0,t,n))},this.getDrawingBufferSize=function(t){return t.set(P*I,R*I).floor()},this.setDrawingBufferSize=function(t,n,i){P=t,R=n,I=i,e.width=Math.floor(t*i),e.height=Math.floor(n*i),this.setViewport(0,0,t,n)},this.getCurrentViewport=function(t){return t.copy(N)},this.getViewport=function(t){return t.copy(B)},this.setViewport=function(t,e,n,i){t.isVector4?B.set(t.x,t.y,t.z,t.w):B.set(t,e,n,i),it.viewport(N.copy(B).multiplyScalar(I).floor())},this.getScissor=function(t){return t.copy(z)},this.setScissor=function(t,e,n,i){t.isVector4?z.set(t.x,t.y,t.z,t.w):z.set(t,e,n,i),it.scissor(L.copy(z).multiplyScalar(I).floor())},this.getScissorTest=function(){return k},this.setScissorTest=function(t){it.setScissorTest(k=t)},this.setOpaqueSort=function(t){F=t},this.setTransparentSort=function(t){D=t},this.getClearColor=function(t){return t.copy(yt.getClearColor())},this.setClearColor=function(){yt.setClearColor.apply(yt,arguments)},this.getClearAlpha=function(){return yt.getClearAlpha()},this.setClearAlpha=function(){yt.setClearAlpha.apply(yt,arguments)},this.clear=function(t,e,n){let i=0;(void 0===t||t)&&(i|=Mt.COLOR_BUFFER_BIT),(void 0===e||e)&&(i|=Mt.DEPTH_BUFFER_BIT),(void 0===n||n)&&(i|=Mt.STENCIL_BUFFER_BIT),Mt.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener(\\\\\\\"webglcontextlost\\\\\\\",Nt,!1),e.removeEventListener(\\\\\\\"webglcontextrestored\\\\\\\",Lt,!1),mt.dispose(),ft.dispose(),ot.dispose(),lt.dispose(),ct.dispose(),dt.dispose(),At.dispose(),Ct.dispose(),Ct.removeEventListener(\\\\\\\"sessionstart\\\\\\\",kt),Ct.removeEventListener(\\\\\\\"sessionend\\\\\\\",Ut),Y&&(Y.dispose(),Y=null),Gt.stop()},this.renderBufferImmediate=function(t,e){At.initAttributes();const n=ot.get(t);t.hasPositions&&!n.position&&(n.position=Mt.createBuffer()),t.hasNormals&&!n.normal&&(n.normal=Mt.createBuffer()),t.hasUvs&&!n.uv&&(n.uv=Mt.createBuffer()),t.hasColors&&!n.color&&(n.color=Mt.createBuffer());const i=e.getAttributes();t.hasPositions&&(Mt.bindBuffer(Mt.ARRAY_BUFFER,n.position),Mt.bufferData(Mt.ARRAY_BUFFER,t.positionArray,Mt.DYNAMIC_DRAW),At.enableAttribute(i.position.location),Mt.vertexAttribPointer(i.position.location,3,Mt.FLOAT,!1,0,0)),t.hasNormals&&(Mt.bindBuffer(Mt.ARRAY_BUFFER,n.normal),Mt.bufferData(Mt.ARRAY_BUFFER,t.normalArray,Mt.DYNAMIC_DRAW),At.enableAttribute(i.normal.location),Mt.vertexAttribPointer(i.normal.location,3,Mt.FLOAT,!1,0,0)),t.hasUvs&&(Mt.bindBuffer(Mt.ARRAY_BUFFER,n.uv),Mt.bufferData(Mt.ARRAY_BUFFER,t.uvArray,Mt.DYNAMIC_DRAW),At.enableAttribute(i.uv.location),Mt.vertexAttribPointer(i.uv.location,2,Mt.FLOAT,!1,0,0)),t.hasColors&&(Mt.bindBuffer(Mt.ARRAY_BUFFER,n.color),Mt.bufferData(Mt.ARRAY_BUFFER,t.colorArray,Mt.DYNAMIC_DRAW),At.enableAttribute(i.color.location),Mt.vertexAttribPointer(i.color.location,3,Mt.FLOAT,!1,0,0)),At.disableUnusedAttributes(),Mt.drawArrays(Mt.TRIANGLES,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,n,i,s,r){null===e&&(e=Q);const o=s.isMesh&&s.matrixWorld.determinant()<0,a=Zt(t,e,n,i,s);it.setMaterial(i,o);let l=n.index;const c=n.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;let h,u=1;!0===i.wireframe&&(l=ut.getWireframeAttribute(n),u=2),At.setup(s,i,a,n,l);let d=bt;null!==l&&(h=ht.get(l),d=wt,d.setIndex(h));const p=null!==l?l.count:c.count,_=n.drawRange.start*u,m=n.drawRange.count*u,f=null!==r?r.start*u:0,g=null!==r?r.count*u:1/0,v=Math.max(_,f),y=Math.min(p,_+m,f+g)-1,x=Math.max(0,y-v+1);if(0!==x){if(s.isMesh)!0===i.wireframe?(it.setLineWidth(i.wireframeLinewidth*tt()),d.setMode(Mt.LINES)):d.setMode(Mt.TRIANGLES);else if(s.isLine){let t=i.linewidth;void 0===t&&(t=1),it.setLineWidth(t*tt()),s.isLineSegments?d.setMode(Mt.LINES):s.isLineLoop?d.setMode(Mt.LINE_LOOP):d.setMode(Mt.LINE_STRIP)}else s.isPoints?d.setMode(Mt.POINTS):s.isSprite&&d.setMode(Mt.TRIANGLES);if(s.isInstancedMesh)d.renderInstances(v,x,s.count);else if(n.isInstancedBufferGeometry){const t=Math.min(n.instanceCount,n._maxInstanceCount);d.renderInstances(v,x,t)}else d.render(v,x)}},this.compile=function(t,e){d=ft.get(t),d.init(),f.push(d),t.traverseVisible((function(t){t.isLight&&t.layers.test(e.layers)&&(d.pushLight(t),t.castShadow&&d.pushShadow(t))})),d.setupLights(g.physicallyCorrectLights),t.traverse((function(e){const n=e.material;if(n)if(Array.isArray(n))for(let i=0;i<n.length;i++){$t(n[i],t,e)}else $t(n,t,e)})),f.pop(),d=null};let zt=null;function kt(){Gt.stop()}function Ut(){Gt.start()}const Gt=new M;function Wt(t,e,n,i){if(!1===t.visible)return;if(t.layers.test(e.layers))if(t.isGroup)n=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(e);else if(t.isLight)d.pushLight(t),t.castShadow&&d.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||G.intersectsSprite(t)){i&&Z.setFromMatrixPosition(t.matrixWorld).applyMatrix4(J);const e=dt.update(t),s=t.material;s.visible&&u.push(t,e,s,n,Z.z,null)}}else if(t.isImmediateRenderObject)i&&Z.setFromMatrixPosition(t.matrixWorld).applyMatrix4(J),u.push(t,null,t.material,n,Z.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==st.render.frame&&(t.skeleton.update(),t.skeleton.frame=st.render.frame),!t.frustumCulled||G.intersectsObject(t))){i&&Z.setFromMatrixPosition(t.matrixWorld).applyMatrix4(J);const e=dt.update(t),s=t.material;if(Array.isArray(s)){const i=e.groups;for(let r=0,o=i.length;r<o;r++){const o=i[r],a=s[o.materialIndex];a&&a.visible&&u.push(t,e,a,n,Z.z,o)}}else s.visible&&u.push(t,e,s,n,Z.z,null)}const s=t.children;for(let t=0,r=s.length;t<r;t++)Wt(s[t],e,n,i)}function qt(t,e,n,i){const s=t.opaque,r=t.transmissive,a=t.transparent;d.setupLightsView(n),r.length>0&&function(t,e,n){if(null===Y){const t=!0===o&&!0===nt.isWebGL2;Y=new(t?Ht:K)(1024,1024,{generateMipmaps:!0,type:null!==Tt.convert(w.M)?w.M:w.Zc,minFilter:w.Y,magFilter:w.ob,wrapS:w.n,wrapT:w.n})}const i=g.getRenderTarget();g.setRenderTarget(Y),g.clear();const s=g.toneMapping;g.toneMapping=w.vb,Xt(t,e,n),g.toneMapping=s,at.updateMultisampleRenderTarget(Y),at.updateRenderTargetMipmap(Y),g.setRenderTarget(i)}(s,e,n),i&&it.viewport(N.copy(i)),s.length>0&&Xt(s,e,n),r.length>0&&Xt(r,e,n),a.length>0&&Xt(a,e,n)}function Xt(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let s=0,r=t.length;s<r;s++){const r=t[s],o=r.object,a=r.geometry,l=null===i?r.material:i,c=r.group;o.layers.test(n.layers)&&Yt(o,e,n,a,l,c)}}function Yt(t,e,n,i,s,r){if(t.onBeforeRender(g,e,n,i,s,r),t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),s.onBeforeRender(g,e,n,i,t,r),t.isImmediateRenderObject){const r=Zt(n,e,i,s,t);it.setMaterial(s),At.reset(),function(t,e){t.render((function(t){g.renderBufferImmediate(t,e)}))}(t,r)}else!0===s.transparent&&s.side===w.z?(s.side=w.i,s.needsUpdate=!0,g.renderBufferDirect(n,e,i,s,t,r),s.side=w.H,s.needsUpdate=!0,g.renderBufferDirect(n,e,i,s,t,r),s.side=w.z):g.renderBufferDirect(n,e,i,s,t,r);t.onAfterRender(g,e,n,i,s,r)}function $t(t,e,n){!0!==e.isScene&&(e=Q);const i=ot.get(t),s=d.state.lights,r=d.state.shadowsArray,o=s.state.version,a=pt.getParameters(t,s.state,r,e,n),l=pt.getProgramCacheKey(a);let c=i.programs;i.environment=t.isMeshStandardMaterial?e.environment:null,i.fog=e.fog,i.envMap=(t.isMeshStandardMaterial?ct:lt).get(t.envMap||i.environment),void 0===c&&(t.addEventListener(\\\\\\\"dispose\\\\\\\",Ot),c=new Map,i.programs=c);let h=c.get(l);if(void 0!==h){if(i.currentProgram===h&&i.lightsStateVersion===o)return Jt(t,a),h}else a.uniforms=pt.getUniforms(t),t.onBuild(a,g),t.onBeforeCompile(a,g),h=pt.acquireProgram(a,l),c.set(l,h),i.uniforms=a.uniforms;const u=i.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(u.clippingPlanes=gt.uniform),Jt(t,a),i.needsLights=function(t){return t.isMeshLambertMaterial||t.isMeshToonMaterial||t.isMeshPhongMaterial||t.isMeshStandardMaterial||t.isShadowMaterial||t.isShaderMaterial&&!0===t.lights}(t),i.lightsStateVersion=o,i.needsLights&&(u.ambientLightColor.value=s.state.ambient,u.lightProbe.value=s.state.probe,u.directionalLights.value=s.state.directional,u.directionalLightShadows.value=s.state.directionalShadow,u.spotLights.value=s.state.spot,u.spotLightShadows.value=s.state.spotShadow,u.rectAreaLights.value=s.state.rectArea,u.ltc_1.value=s.state.rectAreaLTC1,u.ltc_2.value=s.state.rectAreaLTC2,u.pointLights.value=s.state.point,u.pointLightShadows.value=s.state.pointShadow,u.hemisphereLights.value=s.state.hemi,u.directionalShadowMap.value=s.state.directionalShadowMap,u.directionalShadowMatrix.value=s.state.directionalShadowMatrix,u.spotShadowMap.value=s.state.spotShadowMap,u.spotShadowMatrix.value=s.state.spotShadowMatrix,u.pointShadowMap.value=s.state.pointShadowMap,u.pointShadowMatrix.value=s.state.pointShadowMatrix);const p=h.getUniforms(),_=Xe.seqWithValue(p.seq,u);return i.currentProgram=h,i.uniformsList=_,h}function Jt(t,e){const n=ot.get(t);n.outputEncoding=e.outputEncoding,n.instancing=e.instancing,n.skinning=e.skinning,n.morphTargets=e.morphTargets,n.morphNormals=e.morphNormals,n.morphTargetsCount=e.morphTargetsCount,n.numClippingPlanes=e.numClippingPlanes,n.numIntersection=e.numClipIntersection,n.vertexAlphas=e.vertexAlphas,n.vertexTangents=e.vertexTangents}function Zt(t,e,n,i,s){!0!==e.isScene&&(e=Q),at.resetTextureUnits();const r=e.fog,o=i.isMeshStandardMaterial?e.environment:null,a=null===b?g.outputEncoding:b.texture.encoding,l=(i.isMeshStandardMaterial?ct:lt).get(i.envMap||o),c=!0===i.vertexColors&&!!n&&!!n.attributes.color&&4===n.attributes.color.itemSize,h=!!i.normalMap&&!!n&&!!n.attributes.tangent,u=!!n&&!!n.morphAttributes.position,p=!!n&&!!n.morphAttributes.normal,_=n&&n.morphAttributes.position?n.morphAttributes.position.length:0,m=ot.get(i),f=d.state.lights;if(!0===V&&(!0===H||t!==C)){const e=t===C&&i.id===S;gt.setState(i,t,e)}let v=!1;i.version===m.__version?m.needsLights&&m.lightsStateVersion!==f.state.version||m.outputEncoding!==a||s.isInstancedMesh&&!1===m.instancing?v=!0:s.isInstancedMesh||!0!==m.instancing?s.isSkinnedMesh&&!1===m.skinning?v=!0:s.isSkinnedMesh||!0!==m.skinning?m.envMap!==l||i.fog&&m.fog!==r?v=!0:void 0===m.numClippingPlanes||m.numClippingPlanes===gt.numPlanes&&m.numIntersection===gt.numIntersection?(m.vertexAlphas!==c||m.vertexTangents!==h||m.morphTargets!==u||m.morphNormals!==p||!0===nt.isWebGL2&&m.morphTargetsCount!==_)&&(v=!0):v=!0:v=!0:v=!0:(v=!0,m.__version=i.version);let y=m.currentProgram;!0===v&&(y=$t(i,e,s));let x=!1,w=!1,T=!1;const A=y.getUniforms(),M=m.uniforms;if(it.useProgram(y.program)&&(x=!0,w=!0,T=!0),i.id!==S&&(S=i.id,w=!0),x||C!==t){if(A.setValue(Mt,\\\\\\\"projectionMatrix\\\\\\\",t.projectionMatrix),nt.logarithmicDepthBuffer&&A.setValue(Mt,\\\\\\\"logDepthBufFC\\\\\\\",2/(Math.log(t.far+1)/Math.LN2)),C!==t&&(C=t,w=!0,T=!0),i.isShaderMaterial||i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshStandardMaterial||i.envMap){const e=A.map.cameraPosition;void 0!==e&&e.setValue(Mt,Z.setFromMatrixPosition(t.matrixWorld))}(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)&&A.setValue(Mt,\\\\\\\"isOrthographic\\\\\\\",!0===t.isOrthographicCamera),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial||i.isShadowMaterial||s.isSkinnedMesh)&&A.setValue(Mt,\\\\\\\"viewMatrix\\\\\\\",t.matrixWorldInverse)}if(s.isSkinnedMesh){A.setOptional(Mt,s,\\\\\\\"bindMatrix\\\\\\\"),A.setOptional(Mt,s,\\\\\\\"bindMatrixInverse\\\\\\\");const t=s.skeleton;t&&(nt.floatVertexTextures?(null===t.boneTexture&&t.computeBoneTexture(),A.setValue(Mt,\\\\\\\"boneTexture\\\\\\\",t.boneTexture,at),A.setValue(Mt,\\\\\\\"boneTextureSize\\\\\\\",t.boneTextureSize)):A.setOptional(Mt,t,\\\\\\\"boneMatrices\\\\\\\"))}var E,N;return!n||void 0===n.morphAttributes.position&&void 0===n.morphAttributes.normal||xt.update(s,n,i,y),(w||m.receiveShadow!==s.receiveShadow)&&(m.receiveShadow=s.receiveShadow,A.setValue(Mt,\\\\\\\"receiveShadow\\\\\\\",s.receiveShadow)),w&&(A.setValue(Mt,\\\\\\\"toneMappingExposure\\\\\\\",g.toneMappingExposure),m.needsLights&&(N=T,(E=M).ambientLightColor.needsUpdate=N,E.lightProbe.needsUpdate=N,E.directionalLights.needsUpdate=N,E.directionalLightShadows.needsUpdate=N,E.pointLights.needsUpdate=N,E.pointLightShadows.needsUpdate=N,E.spotLights.needsUpdate=N,E.spotLightShadows.needsUpdate=N,E.rectAreaLights.needsUpdate=N,E.hemisphereLights.needsUpdate=N),r&&i.fog&&_t.refreshFogUniforms(M,r),_t.refreshMaterialUniforms(M,i,I,R,Y),Xe.upload(Mt,m.uniformsList,M,at)),i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&(Xe.upload(Mt,m.uniformsList,M,at),i.uniformsNeedUpdate=!1),i.isSpriteMaterial&&A.setValue(Mt,\\\\\\\"center\\\\\\\",s.center),A.setValue(Mt,\\\\\\\"modelViewMatrix\\\\\\\",s.modelViewMatrix),A.setValue(Mt,\\\\\\\"normalMatrix\\\\\\\",s.normalMatrix),A.setValue(Mt,\\\\\\\"modelMatrix\\\\\\\",s.matrixWorld),y}Gt.setAnimationLoop((function(t){zt&&zt(t)})),\\\\\\\"undefined\\\\\\\"!=typeof window&&Gt.setContext(window),this.setAnimationLoop=function(t){zt=t,Ct.setAnimationLoop(t),null===t?Gt.stop():Gt.start()},Ct.addEventListener(\\\\\\\"sessionstart\\\\\\\",kt),Ct.addEventListener(\\\\\\\"sessionend\\\\\\\",Ut),this.render=function(t,e){if(void 0!==e&&!0!==e.isCamera)return void console.error(\\\\\\\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\\\\\\\");if(!0===v)return;!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),!0===Ct.enabled&&!0===Ct.isPresenting&&(!0===Ct.cameraAutoUpdate&&Ct.updateCamera(e),e=Ct.getCamera()),!0===t.isScene&&t.onBeforeRender(g,t,e,b),d=ft.get(t,f.length),d.init(),f.push(d),J.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),G.setFromProjectionMatrix(J),H=this.localClippingEnabled,V=gt.init(this.clippingPlanes,H,e),u=mt.get(t,m.length),u.init(),m.push(u),Wt(t,e,0,g.sortObjects),u.finish(),!0===g.sortObjects&&u.sort(F,D),!0===V&&gt.beginShadows();const n=d.state.shadowsArray;if(vt.render(n,t,e),!0===V&&gt.endShadows(),!0===this.info.autoReset&&this.info.reset(),yt.render(u,t),d.setupLights(g.physicallyCorrectLights),e.isArrayCamera){const n=e.cameras;for(let e=0,i=n.length;e<i;e++){const i=n[e];qt(u,t,i,i.viewport)}}else qt(u,t,e);null!==b&&(at.updateMultisampleRenderTarget(b),at.updateRenderTargetMipmap(b)),!0===t.isScene&&t.onAfterRender(g,t,e),it.buffers.depth.setTest(!0),it.buffers.depth.setMask(!0),it.buffers.color.setMask(!0),it.setPolygonOffset(!1),At.resetDefaultState(),S=-1,C=null,f.pop(),d=f.length>0?f[f.length-1]:null,m.pop(),u=m.length>0?m[m.length-1]:null},this.getActiveCubeFace=function(){return y},this.getActiveMipmapLevel=function(){return x},this.getRenderTarget=function(){return b},this.setRenderTarget=function(t,e=0,n=0){b=t,y=e,x=n,t&&void 0===ot.get(t).__webglFramebuffer&&at.setupRenderTarget(t);let i=null,s=!1,r=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(r=!0);const o=ot.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=o[e],s=!0):i=t.isWebGLMultisampleRenderTarget?ot.get(t).__webglMultisampledFramebuffer:o,N.copy(t.viewport),L.copy(t.scissor),O=t.scissorTest}else N.copy(B).multiplyScalar(I).floor(),L.copy(z).multiplyScalar(I).floor(),O=k;if(it.bindFramebuffer(Mt.FRAMEBUFFER,i)&&nt.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(U.length!==n.length||U[0]!==Mt.COLOR_ATTACHMENT0){for(let t=0,e=n.length;t<e;t++)U[t]=Mt.COLOR_ATTACHMENT0+t;U.length=n.length,e=!0}}else 1===U.length&&U[0]===Mt.COLOR_ATTACHMENT0||(U[0]=Mt.COLOR_ATTACHMENT0,U.length=1,e=!0);else 1===U.length&&U[0]===Mt.BACK||(U[0]=Mt.BACK,U.length=1,e=!0);e&&(nt.isWebGL2?Mt.drawBuffers(U):et.get(\\\\\\\"WEBGL_draw_buffers\\\\\\\").drawBuffersWEBGL(U))}if(it.viewport(N),it.scissor(L),it.setScissorTest(O),s){const i=ot.get(t.texture);Mt.framebufferTexture2D(Mt.FRAMEBUFFER,Mt.COLOR_ATTACHMENT0,Mt.TEXTURE_CUBE_MAP_POSITIVE_X+e,i.__webglTexture,n)}else if(r){const i=ot.get(t.texture),s=e||0;Mt.framebufferTextureLayer(Mt.FRAMEBUFFER,Mt.COLOR_ATTACHMENT0,i.__webglTexture,n||0,s)}S=-1},this.readRenderTargetPixels=function(t,e,n,i,s,r,o){if(!t||!t.isWebGLRenderTarget)return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\\\\\\\");let a=ot.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==o&&(a=a[o]),a){it.bindFramebuffer(Mt.FRAMEBUFFER,a);try{const o=t.texture,a=o.format,l=o.type;if(a!==w.Ib&&Tt.convert(a)!==Mt.getParameter(Mt.IMPLEMENTATION_COLOR_READ_FORMAT))return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\\\\\\\");const c=l===w.M&&(et.has(\\\\\\\"EXT_color_buffer_half_float\\\\\\\")||nt.isWebGL2&&et.has(\\\\\\\"EXT_color_buffer_float\\\\\\\"));if(!(l===w.Zc||Tt.convert(l)===Mt.getParameter(Mt.IMPLEMENTATION_COLOR_READ_TYPE)||l===w.G&&(nt.isWebGL2||et.has(\\\\\\\"OES_texture_float\\\\\\\")||et.has(\\\\\\\"WEBGL_color_buffer_float\\\\\\\"))||c))return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\\\\\\\");Mt.checkFramebufferStatus(Mt.FRAMEBUFFER)===Mt.FRAMEBUFFER_COMPLETE?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-s&&Mt.readPixels(e,n,i,s,Tt.convert(a),Tt.convert(l),r):console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\\\\\\\")}finally{const t=null!==b?ot.get(b).__webglFramebuffer:null;it.bindFramebuffer(Mt.FRAMEBUFFER,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),s=Math.floor(e.image.width*i),r=Math.floor(e.image.height*i);let o=Tt.convert(e.format);nt.isWebGL2&&(o===Mt.RGB&&(o=Mt.RGB8),o===Mt.RGBA&&(o=Mt.RGBA8)),at.setTexture2D(e,0),Mt.copyTexImage2D(Mt.TEXTURE_2D,n,o,t.x,t.y,s,r,0),it.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const s=e.image.width,r=e.image.height,o=Tt.convert(n.format),a=Tt.convert(n.type);at.setTexture2D(n,0),Mt.pixelStorei(Mt.UNPACK_FLIP_Y_WEBGL,n.flipY),Mt.pixelStorei(Mt.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),Mt.pixelStorei(Mt.UNPACK_ALIGNMENT,n.unpackAlignment),e.isDataTexture?Mt.texSubImage2D(Mt.TEXTURE_2D,i,t.x,t.y,s,r,o,a,e.image.data):e.isCompressedTexture?Mt.compressedTexSubImage2D(Mt.TEXTURE_2D,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,o,e.mipmaps[0].data):Mt.texSubImage2D(Mt.TEXTURE_2D,i,t.x,t.y,o,a,e.image),0===i&&n.generateMipmaps&&Mt.generateMipmap(Mt.TEXTURE_2D),it.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,s=0){if(g.isWebGL1Renderer)return void console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\\\\\\\");const r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,a=t.max.z-t.min.z+1,l=Tt.convert(i.format),c=Tt.convert(i.type);let h;if(i.isDataTexture3D)at.setTexture3D(i,0),h=Mt.TEXTURE_3D;else{if(!i.isDataTexture2DArray)return void console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\\\\\\\");at.setTexture2DArray(i,0),h=Mt.TEXTURE_2D_ARRAY}Mt.pixelStorei(Mt.UNPACK_FLIP_Y_WEBGL,i.flipY),Mt.pixelStorei(Mt.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.premultiplyAlpha),Mt.pixelStorei(Mt.UNPACK_ALIGNMENT,i.unpackAlignment);const u=Mt.getParameter(Mt.UNPACK_ROW_LENGTH),d=Mt.getParameter(Mt.UNPACK_IMAGE_HEIGHT),p=Mt.getParameter(Mt.UNPACK_SKIP_PIXELS),_=Mt.getParameter(Mt.UNPACK_SKIP_ROWS),m=Mt.getParameter(Mt.UNPACK_SKIP_IMAGES),f=n.isCompressedTexture?n.mipmaps[0]:n.image;Mt.pixelStorei(Mt.UNPACK_ROW_LENGTH,f.width),Mt.pixelStorei(Mt.UNPACK_IMAGE_HEIGHT,f.height),Mt.pixelStorei(Mt.UNPACK_SKIP_PIXELS,t.min.x),Mt.pixelStorei(Mt.UNPACK_SKIP_ROWS,t.min.y),Mt.pixelStorei(Mt.UNPACK_SKIP_IMAGES,t.min.z),n.isDataTexture||n.isDataTexture3D?Mt.texSubImage3D(h,s,e.x,e.y,e.z,r,o,a,l,c,f.data):n.isCompressedTexture?(console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\\\\\\\"),Mt.compressedTexSubImage3D(h,s,e.x,e.y,e.z,r,o,a,l,f.data)):Mt.texSubImage3D(h,s,e.x,e.y,e.z,r,o,a,l,c,f),Mt.pixelStorei(Mt.UNPACK_ROW_LENGTH,u),Mt.pixelStorei(Mt.UNPACK_IMAGE_HEIGHT,d),Mt.pixelStorei(Mt.UNPACK_SKIP_PIXELS,p),Mt.pixelStorei(Mt.UNPACK_SKIP_ROWS,_),Mt.pixelStorei(Mt.UNPACK_SKIP_IMAGES,m),0===s&&i.generateMipmaps&&Mt.generateMipmap(h),it.unbindTexture()},this.initTexture=function(t){at.setTexture2D(t,0),it.unbindTexture()},this.resetState=function(){y=0,x=0,b=null,it.reset(),At.reset()},\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\",{detail:this}))}const Gn={};var Vn,Hn,jn;!function(t){t.WEBGL=\\\\\\\"webgl\\\\\\\",t.WEBGL2=\\\\\\\"webgl2\\\\\\\",t.EXPERIMENTAL_WEBGL=\\\\\\\"experimental-webgl\\\\\\\",t.EXPERIMENTAL_WEBGL2=\\\\\\\"experimental-webgl2\\\\\\\"}(Vn||(Vn={}));class Wn{constructor(){this._next_renderer_id=0,this._renderers={},this._printDebug=!1,this._require_webgl2=!1,this._resolves=[]}setPrintDebug(t=!0){this._printDebug=t}printDebug(){return this._printDebug}printDebugMessage(t){this._printDebug&&console.warn(\\\\\\\"[Poly debug]\\\\\\\",t)}setRequireWebGL2(){this._require_webgl2||(this._require_webgl2=!0)}webgl2Available(){return void 0===this._webgl2_available&&(this._webgl2_available=this._set_webgl2_available()),this._webgl2_available}_set_webgl2_available(){const t=document.createElement(\\\\\\\"canvas\\\\\\\");return null!=(window.WebGL2RenderingContext&&t.getContext(Vn.WEBGL2))}createWebGLRenderer(t){const e=new Un(t);return this.printDebugMessage([\\\\\\\"create renderer:\\\\\\\",t]),e}createRenderingContext(t){let e=null;return this._require_webgl2&&(e=this._getRenderingContextWebgl(t,!0),e||console.warn(\\\\\\\"failed to create webgl2 context\\\\\\\")),e||(e=this._getRenderingContextWebgl(t,!1)),e}_getRenderingContextWebgl(t,e){let n;n=this.webgl2Available()||e?Vn.WEBGL2:Vn.WEBGL;let i=t.getContext(n,Gn);return i?this.printDebugMessage(`create gl context: ${n}.`):(n=e?Vn.EXPERIMENTAL_WEBGL2:Vn.EXPERIMENTAL_WEBGL,this.printDebugMessage(`create gl context: ${n}.`),i=t.getContext(n,Gn)),i}registerRenderer(t){if(t._polygon_id)throw new Error(\\\\\\\"render already registered\\\\\\\");t._polygon_id=this._next_renderer_id+=1,this._renderers[t._polygon_id]=t,1==Object.keys(this._renderers).length&&this.flush_callbacks_with_renderer(t)}deregisterRenderer(t){delete this._renderers[t._polygon_id],t.dispose()}firstRenderer(){const t=Object.keys(this._renderers)[0];return t?this._renderers[t]:null}renderers(){return Object.values(this._renderers)}flush_callbacks_with_renderer(t){let e;for(;e=this._resolves.pop();)e(t)}async waitForRenderer(){const t=this.firstRenderer();return t||new Promise(((t,e)=>{this._resolves.push(t)}))}renderTarget(t,e,n){return this.webgl2Available()?new Ht(t,e,n):new K(t,e,n)}}class qn{constructor(){this._root=\\\\\\\"/three/js/libs\\\\\\\",this._BASISPath=\\\\\\\"/basis\\\\\\\",this._DRACOPath=\\\\\\\"/draco\\\\\\\",this._DRACOGLTFPath=\\\\\\\"/draco/gltf\\\\\\\"}root(){return this._root}setRoot(t){this._root=t}BASISPath(){return this._BASISPath}DRACOPath(){return this._DRACOPath}DRACOGLTFPath(){return this._DRACOGLTFPath}}class Xn{constructor(t){this.poly=t,this._node_register=new Map,this._node_register_categories=new Map,this._node_register_options=new Map}static type(t){return this.filterType(t.type())}static filterType(t){return t.toLowerCase()}register(t,e,n){const i=t.context(),s=Xn.type(t);let r=this._node_register.get(i);r||(r=new Map,this._node_register.set(i,r));if(r.get(s))console.error(`node ${i}/${s} already registered`);else{if(r.set(s,t),e){let t=this._node_register_categories.get(i);t||(t=new Map,this._node_register_categories.set(i,t)),t.set(s,e)}if(n){let t=this._node_register_options.get(i);t||(t=new Map,this._node_register_options.set(i,t)),t.set(s,n)}this.poly.pluginsRegister.registerNode(t)}}deregister(t,e){var n,i,s;e=Xn.filterType(e),null===(n=this._node_register.get(t))||void 0===n||n.delete(e),null===(i=this._node_register_categories.get(t))||void 0===i||i.delete(e),null===(s=this._node_register_options.get(t))||void 0===s||s.delete(e)}isRegistered(t,e){const n=this._node_register.get(t);return!!n&&(e=Xn.filterType(e),null!=n.get(e))}nodeOptions(t,e){var n;return e=Xn.filterType(e),null===(n=this._node_register_options.get(t))||void 0===n?void 0:n.get(e)}registeredNodesForContextAndParentType(t,e){var n;if(this._node_register.get(t)){const i=[];return null===(n=this._node_register.get(t))||void 0===n||n.forEach(((t,e)=>{i.push(t)})),i.filter((n=>{var i;const s=Xn.type(n),r=null===(i=this._node_register_options.get(t))||void 0===i?void 0:i.get(s);if(r){const n=r.only,i=r.except,s=`${t}/${e}`;return n?n.includes(s):!i||!i.includes(s)}return!0}))}return[]}registeredNodes(t,e){const n={},i=this.registeredNodesForContextAndParentType(t,e);for(let t of i){n[Xn.type(t)]=t}return n}registeredCategory(t,e){var n;return e=Xn.filterType(e),null===(n=this._node_register_categories.get(t))||void 0===n?void 0:n.get(e)}map(){return this._node_register}}class Yn{constructor(t){this.poly=t,this._operation_register=new Map}static type(t){return this.filterType(t.type())}static filterType(t){return t.toLowerCase()}register(t){const e=t.context();let n=this._operation_register.get(e);n||(n=new Map,this._operation_register.set(e,n));const i=Yn.type(t);if(n.get(i)){const t=`operation ${e}/${i} already registered`;console.error(t)}else n.set(i,t),this.poly.pluginsRegister.registerOperation(t)}registeredOperationsForContextAndParentType(t,e){var n;if(this._operation_register.get(t)){const e=[];return null===(n=this._operation_register.get(t))||void 0===n||n.forEach(((t,n)=>{e.push(t)})),e}return[]}registeredOperation(t,e){const n=this._operation_register.get(t);if(n)return e=Yn.filterType(e),n.get(e)}}class $n extends class{constructor(){this._methods_names=[],this._methods_by_name=new Map}register(t,e){this._methods_names.push(e),this._methods_by_name.set(e,t)}getMethod(t){return this._methods_by_name.get(t)}availableMethods(){return this._methods_names}}{getMethod(t){return super.getMethod(t)}}!function(t){t.BasisTextureLoader=\\\\\\\"BasisTextureLoader\\\\\\\",t.DRACOLoader=\\\\\\\"DRACOLoader\\\\\\\",t.EXRLoader=\\\\\\\"EXRLoader\\\\\\\",t.FBXLoader=\\\\\\\"FBXLoader\\\\\\\",t.GLTFLoader=\\\\\\\"GLTFLoader\\\\\\\",t.OBJLoader=\\\\\\\"OBJLoader\\\\\\\",t.PDBLoader=\\\\\\\"PDBLoader\\\\\\\",t.PLYLoader=\\\\\\\"PLYLoader\\\\\\\",t.RGBELoader=\\\\\\\"RGBELoader\\\\\\\",t.SVGLoader=\\\\\\\"SVGLoader\\\\\\\",t.STLLoader=\\\\\\\"STLLoader\\\\\\\",t.TTFLoader=\\\\\\\"TTFLoader\\\\\\\"}(Hn||(Hn={}));class Jn extends class{constructor(){this._module_by_name=new Map}register(t,e){this._module_by_name.set(t,e)}moduleNames(){const t=[];return this._module_by_name.forEach(((e,n)=>{t.push(n)})),t}module(t){return this._module_by_name.get(t)}}{}!function(t){t.GL_MESH_BASIC=\\\\\\\"GL_MESH_BASIC\\\\\\\",t.GL_MESH_LAMBERT=\\\\\\\"GL_MESH_LAMBERT\\\\\\\",t.GL_MESH_STANDARD=\\\\\\\"GL_MESH_STANDARD\\\\\\\",t.GL_MESH_PHONG=\\\\\\\"GL_MESH_PHONG\\\\\\\",t.GL_MESH_PHYSICAL=\\\\\\\"GL_MESH_PHYSICAL\\\\\\\",t.GL_PARTICLES=\\\\\\\"GL_PARTICLES\\\\\\\",t.GL_POINTS=\\\\\\\"GL_POINTS\\\\\\\",t.GL_LINE=\\\\\\\"GL_LINE\\\\\\\",t.GL_TEXTURE=\\\\\\\"GL_TEXTURE\\\\\\\",t.GL_VOLUME=\\\\\\\"GL_VOLUME\\\\\\\"}(jn||(jn={}));class Zn extends class{constructor(){this._controller_assembler_by_name=new Map}register(t,e,n){this._controller_assembler_by_name.set(t,{controller:e,assembler:n})}unregister(t){this._controller_assembler_by_name.delete(t)}}{assembler(t,e){const n=this._controller_assembler_by_name.get(e);if(n){return new(0,n.controller)(t,n.assembler)}return n}unregister(t){const e=this._controller_assembler_by_name.get(t);return super.unregister(t),e}}class Kn{constructor(t){this.poly=t,this._plugins_by_name=new Map,this._plugin_name_by_node_context_by_type=new Map,this._plugin_name_by_operation_context_by_type=new Map}register(t){this._current_plugin=t,this._plugins_by_name.set(t.name(),t),t.init(this.poly),this._current_plugin=void 0}pluginByName(t){return this._plugins_by_name.get(t)}registerNode(t){if(!this._current_plugin)return;const e=t.context(),n=t.type();let i=this._plugin_name_by_node_context_by_type.get(e);i||(i=new Map,this._plugin_name_by_node_context_by_type.set(e,i)),i.set(n,this._current_plugin.name())}registerOperation(t){if(!this._current_plugin)return;const e=t.context(),n=t.type();let i=this._plugin_name_by_operation_context_by_type.get(e);i||(i=new Map,this._plugin_name_by_operation_context_by_type.set(e,i)),i.set(n,this._current_plugin.name())}toJson(){const t={plugins:{},nodes:{},operations:{}};return this._plugins_by_name.forEach(((e,n)=>{t.plugins[n]=e.toJSON()})),this._plugin_name_by_node_context_by_type.forEach(((e,n)=>{t.nodes[n]={},e.forEach(((e,i)=>{t.nodes[n][i]=e}))})),this._plugin_name_by_operation_context_by_type.forEach(((e,n)=>{t.operations[n]={},e.forEach(((e,i)=>{t.operations[n][i]=e}))})),t}}class Qn{constructor(t){this._camera_types=[]}register(t){const e=t.type();this._camera_types.includes(e)||this._camera_types.push(e)}registeredTypes(){return this._camera_types}}var ti=n(86);class ei{constructor(){this._blobUrlsByStoredUrl=new Map,this._blobsByStoredUrl=new Map,this._blobDataByNodeId=new Map,this._globalBlobsByStoredUrl=new Map}registerBlobUrl(t){li.playerMode()&&this._blobUrlsByStoredUrl.set(t.storedUrl,t.blobUrl)}deregisterUrl(t){this._blobUrlsByStoredUrl.delete(t)}blobUrl(t){return this._blobUrlsByStoredUrl.get(t)}clear(){this._blobUrlsByStoredUrl.clear(),this._blobsByStoredUrl.clear(),this._blobDataByNodeId.clear()}_clearBlobForNode(t){const e=this._blobDataByNodeId.get(t.graphNodeId());e&&(this._blobsByStoredUrl.delete(e.storedUrl),this._blobUrlsByStoredUrl.delete(e.storedUrl)),this._blobDataByNodeId.delete(t.graphNodeId())}_assignBlobToNode(t,e){this._clearBlobForNode(t),this._blobDataByNodeId.set(t.graphNodeId(),{storedUrl:e.storedUrl,fullUrl:e.fullUrl})}async fetchBlobGlobal(t){if(li.playerMode())return{};try{if(this._blobUrlsByStoredUrl.get(t.storedUrl))return{};const e=li.assetUrls.remapedUrl(t.fullUrl),n=await fetch(e||t.fullUrl);if(n.ok){const e=await n.blob();return this._blobsByStoredUrl.set(t.storedUrl,e),this._blobUrlsByStoredUrl.set(t.storedUrl,this.createBlobUrl(e)),this._globalBlobsByStoredUrl.set(t.storedUrl,e),{blobData:{storedUrl:t.storedUrl,fullUrl:t.fullUrl}}}return{error:`failed to fetch ${t.fullUrl}`}}catch(e){return{error:`failed to fetch ${t.fullUrl}`}}}async fetchBlobForNode(t){if(li.playerMode())return{};try{if(this._blobUrlsByStoredUrl.get(t.storedUrl))return{};const e=li.assetUrls.remapedUrl(t.fullUrl),n=await fetch(e||t.fullUrl);if(n.ok){const e=await n.blob();return this._blobsByStoredUrl.set(t.storedUrl,e),this._blobUrlsByStoredUrl.set(t.storedUrl,this.createBlobUrl(e)),this._scene=t.node.scene(),this._assignBlobToNode(t.node,{storedUrl:t.storedUrl,fullUrl:t.fullUrl}),{blobData:{storedUrl:t.storedUrl,fullUrl:t.fullUrl}}}return{error:`failed to fetch ${t.fullUrl}`}}catch(e){return{error:`failed to fetch ${t.fullUrl}`}}}forEachBlob(t){this._blobDataByNodeId.forEach(((e,n)=>{if(this._scene){if(this._scene.graph.nodeFromId(n)){const{storedUrl:n}=e,i=this._blobsByStoredUrl.get(n);i&&t(i,n)}}}));let e=[];const n=new Map;this._globalBlobsByStoredUrl.forEach(((t,i)=>{e.push(i),n.set(i,t)})),e=e.sort(),e.forEach((e=>{const n=this._globalBlobsByStoredUrl.get(e);n&&t(n,e)}))}createBlobUrl(t){return Object(ti.a)(t)}}class ni{setMap(t){this._map=t}remapedUrl(t){if(!this._map)return;const e=t.split(\\\\\\\"?\\\\\\\"),n=e[0],i=e[1],s=this._map[n];return s?i?`${s}?${i}`:s:void 0}}var ii=n(91),si=n(83);class ri{markAsLoaded(t,e){this._sceneJsonImporterContructor=e,t()}load(t){if(!this._sceneJsonImporterContructor)return;const e=[];t.forEach(((t,n)=>{e.push(n)}));for(let n of e){const e=t.get(n);e&&(this._loadElement(n,e,this._sceneJsonImporterContructor),t.delete(n))}}async _loadElement(t,e,n){const{sceneData:i,assetsManifest:s,unzippedData:r}=e,o=Object.keys(s);for(let t of o){const e=r[`assets/${s[t]}`];if(!e)return void console.error(t,e);const n=new Blob([e]),i={storedUrl:t,blobUrl:li.blobs.createBlobUrl(n)};li.blobs.registerBlobUrl(i)}li.setPlayerMode(!0),li.libs.setRoot(null);const a=`${Math.random()}`.replace(\\\\\\\".\\\\\\\",\\\\\\\"_\\\\\\\"),l={Poly:`___POLY_polyConfig_configurePolygonjs_${a}`,scriptElementId:`___POLY_polyConfig_scriptElement_${a}`,loadSceneArgs:`___POLY_polyConfig_loadSceneArgs_${a}`};window[l.Poly]=li;const c={method:this._loadScene.bind(this),element:t,sceneData:i,sceneJsonImporterContructor:n};window[l.loadSceneArgs]=c;this._loadPolyConfig(l,r)||this._loadScene(t,i,n)}_loadPolyConfig(t,e){const n=e[si.a.POLY_CONFIG];if(!n)return!1;const i=this._createJsBlob(n,\\\\\\\"polyConfig\\\\\\\");let s=document.getElementById(t.scriptElementId);const r=[];return r.push(`import {configurePolygonjs, configureScene} from '${i}';`),r.push(`configurePolygonjs(window.${t.Poly});`),r.push(`window.${t.loadSceneArgs}.method(window.${t.loadSceneArgs}.element, window.${t.loadSceneArgs}.sceneData, window.${t.loadSceneArgs}.sceneJsonImporterContructor, configureScene);`),r.push(`delete window.${t.loadSceneArgs};`),s||(s=document.createElement(\\\\\\\"script\\\\\\\"),s.setAttribute(\\\\\\\"type\\\\\\\",\\\\\\\"module\\\\\\\"),s.text=r.join(\\\\\\\"\\\\n\\\\\\\"),document.body.append(s)),!0}async _loadScene(t,e,n,i){this._fadeOutPoster(t);const s=new n(e),r=await s.scene();i&&i(r);const o=r.mainCameraNode();if(!o)return void console.warn(\\\\\\\"no master camera found\\\\\\\");const a=o.createViewer(t);r.play(),t.scene=r,t.viewer=a}_fadeOutPoster(t){const e=t.firstElementChild;e&&(e.style.pointerEvents=\\\\\\\"none\\\\\\\",ii.a.fadeOut(e).then((()=>{var t;null===(t=e.parentElement)||void 0===t||t.removeChild(e)})))}_createJsBlob(t,e){const n=new Blob([t]),i=new File([n],`${e}.js`,{type:\\\\\\\"application/javascript\\\\\\\"});return Object(ti.a)(i)}}class oi{setPerformanceManager(t){this._performanceManager=t}performanceManager(){return this._performanceManager||window.performance}}class ai{constructor(){this.renderersController=new Wn,this.nodesRegister=new Xn(this),this.operationsRegister=new Yn(this),this.expressionsRegister=new $n,this.modulesRegister=new Jn,this.assemblersRegister=new Zn,this.pluginsRegister=new Kn(this),this.camerasRegister=new Qn(this),this.blobs=new ei,this.assetUrls=new ni,this.selfContainedScenesLoader=new ri,this.performance=new oi,this.scenesByUuid={},this._player_mode=!0,this._logger=null}static _instance_(){if(window.__POLYGONJS_POLY_INSTANCE__)return window.__POLYGONJS_POLY_INSTANCE__;{const t=new ai;return window.__POLYGONJS_POLY_INSTANCE__=t,window.__POLYGONJS_POLY_INSTANCE__}}setPlayerMode(t){this._player_mode=t}playerMode(){return this._player_mode}registerNode(t,e,n){this.nodesRegister.register(t,e,n)}registerOperation(t){this.operationsRegister.register(t)}registerCamera(t){this.camerasRegister.register(t)}registerPlugin(t){this.pluginsRegister.register(t)}registeredNodes(t,e){return this.nodesRegister.registeredNodes(t,e)}registeredOperation(t,e){return this.operationsRegister.registeredOperation(t,e)}registeredCameraTypes(){return this.camerasRegister.registeredTypes()}inWorkerThread(){return!1}desktopController(){}get libs(){return this._libs_controller=this._libs_controller||new qn}setEnv(t){this._env=t}env(){return this._env}setLogger(t){this._logger=t}log(t,...e){var n;null===(n=this._logger)||void 0===n||n.log(t,...e)}warn(t,...e){var n;null===(n=this._logger)||void 0===n||n.warn(t,...e)}error(t,...e){var n;null===(n=this._logger)||void 0===n||n.error(t,...e)}}const li=ai._instance_();class ci{constructor(){this._started=!1,this._start_time=0,this._previous_timestamp=0,this._nodes_cook_data={},this._durations_by_name={},this._durations_count_by_name={}}profile(t,e){const n=li.performance.performanceManager(),i=n.now();e();const s=n.now()-i;console.log(`${t}: ${s}`)}start(){if(!this._started){this.reset(),this._started=!0;const t=li.performance.performanceManager();this._start_time=t.now(),this._nodes_cook_data={},this._previous_timestamp=this._start_time}}stop(){this.reset()}reset(){this._started=!1,this._start_time=null,this._durations_by_name={},this._durations_count_by_name={},this._nodes_cook_data={}}started(){return this._started}record_node_cook_data(t,e){const n=t.graphNodeId();null==this._nodes_cook_data[n]&&(this._nodes_cook_data[n]=new c(t)),this._nodes_cook_data[n].update_cook_data(e)}record(t){this.started()||this.start();const e=performance.now();return null==this._durations_by_name[t]&&(this._durations_by_name[t]=0),this._durations_by_name[t]+=e-this._previous_timestamp,null==this._durations_count_by_name[t]&&(this._durations_count_by_name[t]=0),this._durations_count_by_name[t]+=1,this._previous_timestamp=e}print(){this.print_node_cook_data(),this.print_recordings()}print_node_cook_data(){let t=Object.values(this._nodes_cook_data);t=f.sortBy(t,(t=>t.total_cook_time()));const e=t.map((t=>t.print_object()));console.log(\\\\\\\"--------------- NODES COOK TIME -----------\\\\\\\");const n=[],i=f.sortBy(e,(t=>-t.total_cook_time));for(let t of i)n.push(t);return console.table(n),e}print_recordings(){const t=b.clone(this._durations_by_name),e=b.clone(this._durations_count_by_name),n=[],i={};for(let e of Object.keys(t)){const s=t[e];n.push(s),null==i[s]&&(i[s]=[]),i[s].push(e)}n.sort(((t,e)=>t-e));const s=f.uniq(n);console.log(\\\\\\\"--------------- PERF RECORDINGS -----------\\\\\\\");const r=[];for(let t of s){const n=i[t];for(let i of n){const n=e[i],s={duration:t,name:i,count:n,duration_per_iteration:t/n};r.push(s)}}return console.table(r),r}}class hi{constructor(t){this.scene=t}setListener(t){this._events_listener?console.warn(\\\\\\\"scene already has a listener\\\\\\\"):(this._events_listener=t,this.run_on_add_listener_callbacks())}onAddListener(t){this._events_listener?t():(this._on_add_listener_callbacks=this._on_add_listener_callbacks||[],this._on_add_listener_callbacks.push(t))}run_on_add_listener_callbacks(){if(this._on_add_listener_callbacks){let t;for(;t=this._on_add_listener_callbacks.pop();)t();this._on_add_listener_callbacks=void 0}}get eventsListener(){return this._events_listener}dispatch(t,e,n){var i;null===(i=this._events_listener)||void 0===i||i.process_events(t,e,n)}emitAllowed(){return null!=this._events_listener&&this.scene.loadingController.loaded()&&this.scene.loadingController.autoUpdating()}}class ui{constructor(){this._params_by_id=new Map}registerParam(t){this._params_by_id.set(t.graphNodeId(),t)}deregisterParam(t){this._params_by_id.delete(t.graphNodeId())}regenerateReferringExpressions(t){t.nameController.graph_node.setSuccessorsDirty(t)}}class di{constructor(t){this.scene=t,this._lifecycle_on_create_allowed=!0}onCreateHookAllowed(){return this.scene.loadingController.loaded()&&this._lifecycle_on_create_allowed}onCreatePrevent(t){this._lifecycle_on_create_allowed=!1,t(),this._lifecycle_on_create_allowed=!0}}class pi{constructor(t){this.dispatcher=t,this._nodes_by_graph_node_id=new Map,this._require_canvas_event_listeners=!1,this._activeEventDatas=[]}registerNode(t){this._nodes_by_graph_node_id.set(t.graphNodeId(),t),this.updateViewerEventListeners()}unregisterNode(t){this._nodes_by_graph_node_id.delete(t.graphNodeId()),this.updateViewerEventListeners()}processEvent(t){0!=this._activeEventDatas.length&&this._nodes_by_graph_node_id.forEach((e=>e.processEvent(t)))}updateViewerEventListeners(){this._update_active_event_types(),this._require_canvas_event_listeners&&this.dispatcher.scene.viewersRegister.traverseViewers((t=>{t.eventsController.updateEvents(this)}))}activeEventDatas(){return this._activeEventDatas}_update_active_event_types(){const t=new Map;this._nodes_by_graph_node_id.forEach((e=>{if(e.parent()){const n=e.activeEventDatas();for(let e of n)t.set(e,!0)}})),this._activeEventDatas=[],t.forEach(((t,e)=>{this._activeEventDatas.push(e)}))}}var _i;!function(t){t.LOADED=\\\\\\\"sceneLoaded\\\\\\\",t.PLAY=\\\\\\\"play\\\\\\\",t.PAUSE=\\\\\\\"pause\\\\\\\",t.TICK=\\\\\\\"tick\\\\\\\"}(_i||(_i={}));const mi=[_i.LOADED,_i.PLAY,_i.PAUSE,_i.TICK];class fi extends pi{type(){return\\\\\\\"scene\\\\\\\"}acceptedEventTypes(){return mi.map((t=>`${t}`))}}class gi{constructor(t){this.scene=t,this._loading_state=!1,this._auto_updating=!0,this._first_object_loaded=!1}get LOADED_EVENT_CONTEXT(){return this._LOADED_EVENT_CONTEXT=this._LOADED_EVENT_CONTEXT||{event:new Event(_i.LOADED)}}markAsLoading(){this._set_loading_state(!0)}async markAsLoaded(){this.scene.missingExpressionReferencesController.resolveMissingReferences(),await this._set_loading_state(!1),this.trigger_loaded_event()}trigger_loaded_event(){globalThis.Event&&this.scene.eventsDispatcher.sceneEventsController.processEvent(this.LOADED_EVENT_CONTEXT)}async _set_loading_state(t){this._loading_state=t,await this.set_auto_update(!this._loading_state)}isLoading(){return this._loading_state}loaded(){return!this._loading_state}autoUpdating(){return this._auto_updating}async set_auto_update(t){if(this._auto_updating!==t&&(this._auto_updating=t,this._auto_updating)){const t=this.scene.root();t&&await t.processQueue()}}on_first_object_loaded(){var t;if(!this._first_object_loaded){this._first_object_loaded=!0;const e=document.getElementById(\\\\\\\"scene_loading_container\\\\\\\");e&&(null===(t=e.parentElement)||void 0===t||t.removeChild(e))}}}const vi={EMPTY:\\\\\\\"\\\\\\\",UV:\\\\\\\"/COP/imageUv\\\\\\\",ENV_MAP:\\\\\\\"/COP/envMap\\\\\\\",CUBE_MAP:\\\\\\\"/COP/cubeCamera\\\\\\\"};class yi{constructor(t=\\\\\\\"\\\\\\\"){this._path=t,this._node=null}set_path(t){this._path=t}set_node(t){this._node=t}path(){return this._path}node(){return this._node}resolve(t){this._node=bi.findNode(t,this._path)}clone(){const t=new yi(this._path);return t.set_node(this._node),t}nodeWithContext(t,e){const n=this.node();if(!n)return void(null==e||e.set(`no node found at ${this.path()}`));const i=n.context();return i==t?n:void(null==e||e.set(`expected ${t} node, but got a ${i}`))}}class xi{constructor(t=\\\\\\\"\\\\\\\"){this._path=t,this._param=null}set_path(t){this._path=t}set_param(t){this._param=t}path(){return this._path}param(){return this._param}resolve(t){this._param=bi.findParam(t,this._path)}clone(){const t=new xi(this._path);return t.set_param(this._param),t}paramWithType(t,e){const n=this.param();if(n)return n.type()==t?n:void(null==e||e.set(`expected ${t} node, but got a ${n.type()}`));null==e||e.set(`no param found at ${this.path()}`)}}class bi{static split_parent_child(t){const e=t.split(bi.SEPARATOR).filter((t=>t.length>0)),n=e.pop();return{parent:e.join(bi.SEPARATOR),child:n}}static findNode(t,e,n){if(!t)return null;const i=e.split(bi.SEPARATOR).filter((t=>t.length>0)),s=i[0];let r=null;if(e[0]!==bi.SEPARATOR){switch(s){case bi.PARENT:null==n||n.add_path_element(s),r=t.parent();break;case bi.CURRENT:null==n||n.add_path_element(s),r=t;break;default:r=t.node(s),r&&(null==n||n.add_node(s,r))}if(null!=r&&i.length>1){const t=i.slice(1).join(bi.SEPARATOR);r=this.findNode(r,t,n)}return r}{const i=e.substr(1);r=this.findNode(t.root(),i,n)}return r}static findParam(t,e,n){if(!t)return null;const i=e.split(bi.SEPARATOR);if(1===i.length)return t.params.get(i[0]);{const e=i.slice(0,+(i.length-2)+1||void 0).join(bi.SEPARATOR),s=this.findNode(t,e,n);if(null!=s){const t=i[i.length-1],e=s.params.get(t);return n&&e&&n.add_node(t,e),e}return null}}static relativePath(t,e){const n=this.closestCommonParent(t,e);if(n){const i=this.distanceToParent(t,n);let s=\\\\\\\"\\\\\\\";if(i>0){let t=0;const e=[];for(;t++<i;)e.push(bi.PARENT);s=e.join(bi.SEPARATOR)+bi.SEPARATOR}const r=n.path().split(bi.SEPARATOR).filter((t=>t.length>0)),o=e.path().split(bi.SEPARATOR).filter((t=>t.length>0)),a=[];let l=0;for(let t of o)r[l]||a.push(t),l++;return`${s}${a.join(bi.SEPARATOR)}`}return e.path()}static closestCommonParent(t,e){const n=this.parents(t).reverse().concat([t]),i=this.parents(e).reverse().concat([e]),s=Math.min(n.length,i.length);let r=null;for(let t=0;t<s;t++)n[t].graphNodeId()==i[t].graphNodeId()&&(r=n[t]);return r}static parents(t){const e=[];let n=t.parent();for(;n;)e.push(n),n=n.parent();return e}static distanceToParent(t,e){let n=0,i=t;const s=e.graphNodeId();for(;i&&i.graphNodeId()!=s;)n+=1,i=i.parent();return i&&i.graphNodeId()==s?n:-1}static makeAbsolutePath(t,e){if(e[0]==bi.SEPARATOR)return e;const n=e.split(bi.SEPARATOR),i=n.shift();if(!i)return t.path();switch(i){case\\\\\\\"..\\\\\\\":{const e=t.parent();return e?e==t.scene().root()?bi.SEPARATOR+n.join(bi.SEPARATOR):this.makeAbsolutePath(e,n.join(bi.SEPARATOR)):null}case\\\\\\\".\\\\\\\":return this.makeAbsolutePath(t,n.join(bi.SEPARATOR));default:return[t.path(),e].join(bi.SEPARATOR)}}}bi.SEPARATOR=\\\\\\\"/\\\\\\\",bi.DOT=\\\\\\\".\\\\\\\",bi.CURRENT=bi.DOT,bi.PARENT=\\\\\\\"..\\\\\\\",bi.CURRENT_WITH_SLASH=`${bi.CURRENT}/`,bi.PARENT_WITH_SLASH=`${bi.PARENT}/`,bi.NON_LETTER_PREFIXES=[bi.SEPARATOR,bi.DOT];class wi{constructor(t,e){this.param=t,this.path=e}absolutePath(){return bi.makeAbsolutePath(this.param.node,this.path)}matchesPath(t){return this.absolutePath()==t}resolveMissingDependencies(){const t=this.param.rawInputSerialized();this.param.set(this.param.defaultValue()),this.param.set(t)}}class Ti{constructor(t){this.scene=t,this.references=new Map}register(t,e){const n=new wi(t,e);return h.addToSetAtEntry(this.references,t.graphNodeId(),n),n}deregisterParam(t){this.references.delete(t.graphNodeId())}resolveMissingReferences(){const t=[];this.references.forEach((e=>{for(let n of e)this._is_reference_resolvable(n)&&t.push(n)}));for(let e of t)e.resolveMissingDependencies()}_is_reference_resolvable(t){const e=t.absolutePath();if(e){if(this.scene.node(e))return!0;{const t=bi.split_parent_child(e);if(t.child){const e=this.scene.node(t.parent);if(e){if(e.params.get(t.child))return!0}}}}}checkForMissingReferences(t){this._checkForMissingReferencesForNode(t);for(let e of t.params.all)this._checkForMissingReferencesForParam(e)}_checkForMissingReferencesForNode(t){const e=t.graphNodeId(),n=h.arrayFromValues(this.references);for(let i of n){let n=!1;const s=u.toArray(i);for(let e of s)e.matchesPath(t.path())&&(n=!0,e.resolveMissingDependencies());n&&this.references.delete(e)}}_checkForMissingReferencesForParam(t){const e=t.graphNodeId(),n=h.arrayFromValues(this.references);for(let i of n){let n=!1;const s=u.toArray(i);for(let e of s)e.matchesPath(t.path())&&(n=!0,e.resolveMissingDependencies());n&&this.references.delete(e)}}}class Ai{constructor(t){this.node=t,this._dirty_count=0,this._dirty=!0}dispose(){this._cached_successors=void 0,this._post_dirty_hooks=void 0,this._post_dirty_hook_names=void 0}isDirty(){return!0===this._dirty}dirtyTimestamp(){return this._dirty_timestamp}dirtyCount(){return this._dirty_count}addPostDirtyHook(t,e){this._post_dirty_hook_names=this._post_dirty_hook_names||[],this._post_dirty_hooks=this._post_dirty_hooks||[],this._post_dirty_hook_names.includes(t)?console.warn(`hook with name ${t} already exists`,this.node):(this._post_dirty_hook_names.push(t),this._post_dirty_hooks.push(e))}removePostDirtyHook(t){if(this._post_dirty_hook_names&&this._post_dirty_hooks){const e=this._post_dirty_hook_names.indexOf(t);e>=0&&(this._post_dirty_hook_names.splice(e,1),this._post_dirty_hooks.splice(e,1))}}hasHook(t){return!!this._post_dirty_hook_names&&this._post_dirty_hook_names.includes(t)}removeDirtyState(){this._dirty=!1}setForbiddenTriggerNodes(t){this._forbidden_trigger_nodes=t.map((t=>t.graphNodeId()))}setDirty(t,e){if(null==e&&(e=!0),t&&this._forbidden_trigger_nodes&&this._forbidden_trigger_nodes.includes(t.graphNodeId()))return;null==t&&(t=this.node),this._dirty=!0;const n=li.performance.performanceManager();this._dirty_timestamp=n.now(),this._dirty_count+=1,this.runPostDirtyHooks(t),!0===e&&this.setSuccessorsDirty(t)}runPostDirtyHooks(t){if(this._post_dirty_hooks){const e=this.node.scene().cooker;if(e.blocked)e.enqueue(this.node,t);else for(let e of this._post_dirty_hooks)e(t)}}setSuccessorsDirty(t){this._cached_successors=this._cached_successors||this.node.graphAllSuccessors();for(let e of this._cached_successors)e.dirtyController.setDirty(t,false)}clearSuccessorsCache(){this._cached_successors=void 0}clearSuccessorsCacheWithPredecessors(){this.clearSuccessorsCache();for(let t of this.node.graphAllPredecessors())t.dirtyController.clearSuccessorsCache()}}class Mi{constructor(t,e){this._scene=t,this._name=e,this._dirty_controller=new Ai(this),this._graph_node_id=t.graph.nextId(),t.graph.addNode(this),this._graph=t.graph}dispose(){this._dirty_controller.dispose(),this.graphRemove()}name(){return this._name}setName(t){this._name=t}scene(){return this._scene}graphNodeId(){return this._graph_node_id}get dirtyController(){return this._dirty_controller}setDirty(t){t=t||this,this._dirty_controller.setDirty(t)}setSuccessorsDirty(t){this._dirty_controller.setSuccessorsDirty(t)}removeDirtyState(){this._dirty_controller.removeDirtyState()}isDirty(){return this._dirty_controller.isDirty()}addPostDirtyHook(t,e){this._dirty_controller.addPostDirtyHook(t,e)}graphRemove(){this._graph.removeNode(this)}addGraphInput(t,e=!0){return this._graph.connect(t,this,e)}removeGraphInput(t){this._graph.disconnect(t,this)}graphDisconnectPredecessors(){this._graph.disconnectPredecessors(this)}graphDisconnectSuccessors(){this._graph.disconnectSuccessors(this)}graphPredecessorIds(){return this._graph.predecessorIds(this._graph_node_id)||[]}graphPredecessors(){return this._graph.predecessors(this)}graphSuccessors(){return this._graph.successors(this)}graphAllPredecessors(){return this._graph.allPredecessors(this)}graphAllSuccessors(){return this._graph.allSuccessors(this)}}var Ei;!function(t){t.CREATED=\\\\\\\"node_created\\\\\\\",t.DELETED=\\\\\\\"node_deleted\\\\\\\",t.NAME_UPDATED=\\\\\\\"node_name_update\\\\\\\",t.OVERRIDE_CLONABLE_STATE_UPDATE=\\\\\\\"node_override_clonable_state_update\\\\\\\",t.NAMED_OUTPUTS_UPDATED=\\\\\\\"node_named_outputs_updated\\\\\\\",t.NAMED_INPUTS_UPDATED=\\\\\\\"node_named_inputs_updated\\\\\\\",t.INPUTS_UPDATED=\\\\\\\"node_inputs_updated\\\\\\\",t.PARAMS_UPDATED=\\\\\\\"node_params_updated\\\\\\\",t.UI_DATA_POSITION_UPDATED=\\\\\\\"node_ui_data_position_updated\\\\\\\",t.UI_DATA_COMMENT_UPDATED=\\\\\\\"node_ui_data_comment_updated\\\\\\\",t.ERROR_UPDATED=\\\\\\\"node_error_updated\\\\\\\",t.FLAG_BYPASS_UPDATED=\\\\\\\"bypass_flag_updated\\\\\\\",t.FLAG_DISPLAY_UPDATED=\\\\\\\"display_flag_updated\\\\\\\",t.FLAG_OPTIMIZE_UPDATED=\\\\\\\"optimize_flag_updated\\\\\\\",t.SELECTION_UPDATED=\\\\\\\"selection_updated\\\\\\\"}(Ei||(Ei={}));class Si{constructor(t,e=0,n=0){this.node=t,this._position=new d.a,this._width=50,this._color=new D.a(.75,.75,.75),this._layout_vertical=!0,this._json={x:0,y:0},this._position.x=e,this._position.y=n}setComment(t){this._comment=t,this.node.emit(Ei.UI_DATA_COMMENT_UPDATED)}comment(){return this._comment}setColor(t){this._color=t}color(){return this._color}setLayoutHorizontal(){this._layout_vertical=!1}isLayoutVertical(){return this._layout_vertical}copy(t){this._position.copy(t.position()),this._color.copy(t.color())}position(){return this._position}setPosition(t,e=0){if(m.isNumber(t)){const n=t;this._position.set(n,e)}else this._position.copy(t);this.node.emit(Ei.UI_DATA_POSITION_UPDATED)}translate(t,e=!1){this._position.add(t),e&&(this._position.x=Math.round(this._position.x),this._position.y=Math.round(this._position.y)),this.node.emit(Ei.UI_DATA_POSITION_UPDATED)}toJSON(){return this._json.x=this._position.x,this._json.y=this._position.y,this._json.comment=this._comment,this._json}}class Ci{constructor(t){this.node=t,this._state=!0,this._hooks=null}onUpdate(t){this._hooks=this._hooks||[],this._hooks.push(t)}_on_update(){}set(t){this._state!=t&&(this._state=t,this._on_update(),this.runHooks())}active(){return this._state}toggle(){this.set(!this._state)}runHooks(){if(this._hooks)for(let t of this._hooks)t()}}class Ni extends Ci{constructor(){super(...arguments),this._state=!1}_on_update(){this.node.emit(Ei.FLAG_BYPASS_UPDATED),this.node.setDirty()}}class Li extends Ci{_on_update(){this.node.emit(Ei.FLAG_DISPLAY_UPDATED)}}class Oi extends Ci{constructor(){super(...arguments),this._state=!1}_on_update(){this.node.emit(Ei.FLAG_OPTIMIZE_UPDATED)}}class Pi{constructor(t){this.node=t}hasDisplay(){return!1}hasBypass(){return!1}hasOptimize(){return!1}}function Ri(t){return class extends t{constructor(){super(...arguments),this.display=new Li(this.node)}hasDisplay(){return!0}}}function Ii(t){return class extends t{constructor(){super(...arguments),this.bypass=new Ni(this.node)}hasBypass(){return!0}}}function Fi(t){return class extends t{constructor(){super(...arguments),this.optimize=new Oi(this.node)}hasOptimize(){return!0}}}class Di extends(Ri(Pi)){}class Bi extends(Ii(Pi)){}class zi extends(Ii(Ri(Pi))){}class ki extends(Fi(Ii(Pi))){}class Ui extends(Fi(Ii(Ri(Pi)))){}class Gi{constructor(t){this.node=t}}class Vi extends Gi{active(){return this.paramsTimeDependent()||this.inputsTimeDependent()}paramsTimeDependent(){const t=this.node.params.names;for(let e of t){const t=this.node.params.get(e);if(t&&t.states.timeDependent.active())return!0}return!1}inputsTimeDependent(){const t=this.node.io.inputs.inputs();for(let e of t)if(e&&e.states.timeDependent.active())return!0;return!1}forceTimeDependent(){const t=this.node.graphPredecessors().map((t=>t.graphNodeId())),e=this.node.scene().timeController.graphNode;t.includes(e.graphNodeId())||this.node.addGraphInput(e,!1)}unforceTimeDependent(){const t=this.node.scene().timeController.graphNode;this.node.removeGraphInput(t)}}class Hi extends Gi{set(t){this._message!=t&&(t&&li.error(`[${this.node.path()}] error: '${t}'`),this._message=t,this.onUpdate())}message(){return this._message}clear(){this.set(void 0)}active(){return null!=this._message}onUpdate(){null!=this._message&&this.node._setContainer(null,`from error '${this._message}'`),this.node.emit(Ei.ERROR_UPDATED)}}class ji{constructor(t){this.node=t,this.timeDependent=new Vi(this.node),this.error=new Hi(this.node)}}class Wi{constructor(t){this.node=t,this._graph_node=new Mi(t.scene(),\\\\\\\"node_name_controller\\\\\\\")}dispose(){this._graph_node.dispose(),this._on_set_name_hooks=void 0,this._on_set_fullPath_hooks=void 0}get graph_node(){return this._graph_node}static base_name(t){let e=t.type();const n=e[e.length-1];return m.isNaN(parseInt(n))||(e+=\\\\\\\"_\\\\\\\"),`${e}1`}requestNameToParent(t){const e=this.node.parent();e&&e.childrenAllowed()&&e.childrenController?e.childrenController.setChildName(this.node,t):console.warn(\\\\\\\"requestNameToParent failed, no parent found\\\\\\\")}setName(t){t!=this.node.name()&&this.requestNameToParent(t)}updateNameFromParent(t){var e;if(this.node._set_core_name(t),this._postSetName(),this.runPostSetFullPathHooks(),this.node.childrenAllowed()){const t=null===(e=this.node.childrenController)||void 0===e?void 0:e.children();if(t)for(let e of t)e.nameController.runPostSetFullPathHooks()}this.node.lifecycle.creationCompleted()&&(this.node.scene().missingExpressionReferencesController.checkForMissingReferences(this.node),this.node.scene().expressionsController.regenerateReferringExpressions(this.node)),this.node.scene().referencesController.notifyNameUpdated(this.node),this.node.emit(Ei.NAME_UPDATED)}add_post_set_name_hook(t){this._on_set_name_hooks=this._on_set_name_hooks||[],this._on_set_name_hooks.push(t)}add_post_set_fullPath_hook(t){this._on_set_fullPath_hooks=this._on_set_fullPath_hooks||[],this._on_set_fullPath_hooks.push(t)}_postSetName(){if(this._on_set_name_hooks)for(let t of this._on_set_name_hooks)t()}runPostSetFullPathHooks(){if(this._on_set_fullPath_hooks)for(let t of this._on_set_fullPath_hooks)t()}}class qi{constructor(t){this.node=t,this._parent=null}parent(){return this._parent}setParent(t){t!=this.node.parentController.parent()&&(this._parent=t,this._parent&&this.node.nameController.requestNameToParent(Wi.base_name(this.node)))}firstAncestorWithContext(t){return this._parent?this._parent.context()==t?this._parent:this._parent.parentController.firstAncestorWithContext(t):null}path(t){const e=bi.SEPARATOR;if(null!=this._parent){if(this._parent==t)return this.node.name();{const n=this._parent.path(t);return n===e?n+this.node.name():n+e+this.node.name()}}return e}onSetParent(){if(this._on_set_parent_hooks)for(let t of this._on_set_parent_hooks)t()}findNode(t){if(null==t)return null;if(t==bi.CURRENT||t==bi.CURRENT_WITH_SLASH)return this.node;if(t==bi.PARENT||t==bi.PARENT_WITH_SLASH)return this.node.parent();const e=bi.SEPARATOR;if(t===e)return this.node.scene().root();if(t[0]===e)return t=t.substring(1,t.length),this.node.scene().root().node(t);if(t.split){const n=t.split(e);if(1===n.length){const t=n[0];return this.node.childrenController?this.node.childrenController.childByName(t):null}return bi.findNode(this.node,t)}return console.error(\\\\\\\"unexpected path given:\\\\\\\",t),null}}const Xi=/[, ]/,Yi=/\\\\d+$/,$i=/^0+/,Ji=/,| /,Zi=/^-?\\\\d+\\\\.?\\\\d*$/;var Ki,Qi,ts,es,ns,is;!function(t){t.TRUE=\\\\\\\"true\\\\\\\",t.FALSE=\\\\\\\"false\\\\\\\"}(Ki||(Ki={}));class ss{static isBoolean(t){return t==Ki.TRUE||t==Ki.FALSE}static toBoolean(t){return t==Ki.TRUE}static isNumber(t){return Zi.test(t)}static tailDigits(t){const e=t.match(Yi);return e?parseInt(e[0]):0}static increment(t){const e=t.match(Yi);if(e){let n=e[0],i=\\\\\\\"\\\\\\\";const s=n.match($i);s&&(i=s[0]);const r=parseInt(n);0==r&&i.length>0&&\\\\\\\"0\\\\\\\"==i[i.length-1]&&(i=i.slice(0,-1));return`${t.substring(0,t.length-e[0].length)}${i}${r+1}`}return`${t}1`}static pluralize(t){return\\\\\\\"s\\\\\\\"!==t[t.length-1]?`${t}s`:t}static camelCase(t){const e=t.replace(/_/g,\\\\\\\" \\\\\\\").split(\\\\\\\" \\\\\\\");let n=\\\\\\\"\\\\\\\";for(let t=0;t<e.length;t++){let i=e[t].toLowerCase();t>0&&(i=this.upperFirst(i)),n+=i}return n}static upperFirst(t){return t[0].toUpperCase()+t.substr(1)}static titleize(t){return t.split(/\\\\s|_/g).map((t=>this.upperFirst(t))).join(\\\\\\\" \\\\\\\")}static precision(t,e=2){e=Math.max(e,0);const n=`${t}`.split(\\\\\\\".\\\\\\\");if(e<=0)return n[0];let i=n[1];if(void 0!==i)return i.length>e&&(i=i.substring(0,e)),i=i.padEnd(e,\\\\\\\"0\\\\\\\"),`${n[0]}.${i}`;{const n=`${t}.`,i=n.length+e;return n.padEnd(i,\\\\\\\"0\\\\\\\")}}static ensureFloat(t){const e=`${t}`;return e.indexOf(\\\\\\\".\\\\\\\")>=0?e:`${e}.0`}static ensureInteger(t){const e=`${t}`;return e.indexOf(\\\\\\\".\\\\\\\")>=0?e.split(\\\\\\\".\\\\\\\")[0]:e}static matchMask(t,e){if(\\\\\\\"*\\\\\\\"===e)return!0;if(t==e)return!0;const n=e.split(\\\\\\\" \\\\\\\");if(n.length>1){for(let e of n){if(this.matchMask(t,e))return!0}return!1}e=`^${e=e.split(\\\\\\\"*\\\\\\\").join(\\\\\\\".*\\\\\\\")}$`;return new RegExp(e).test(t)}static matchesOneMask(t,e){let n=!1;for(let i of e)ss.matchMask(t,i)&&(n=!0);return n}static attribNames(t){const e=t.split(Xi),n=new Set;for(let t of e)t=t.trim(),t.length>0&&n.add(t);const i=new Array(n.size);let s=0;return n.forEach((t=>{i[s]=t,s++})),i}static indices(t){const e=t.split(Ji);if(e.length>1){const t=e.flatMap((t=>this.indices(t)));return f.uniq(t).sort(((t,e)=>t-e))}{const t=e[0];if(t){const e=\\\\\\\"-\\\\\\\";if(t.indexOf(e)>0){const n=t.split(e);return f.range(parseInt(n[0]),parseInt(n[1])+1)}{const e=parseInt(t);return m.isNumber(e)?[e]:[]}}return[]}}static escapeLineBreaks(t){return t.replace(/(\\\\r\\\\n|\\\\n|\\\\r)/gm,\\\\\\\"\\\\\\\\n\\\\\\\")}static sanitizeName(t){return t=(t=t.replace(/[^A-Za-z0-9]/g,\\\\\\\"_\\\\\\\")).replace(/^[0-9]/,\\\\\\\"_\\\\\\\")}}class rs{constructor(t){this._node=t,this._node_ids=[],this._json=[]}node(){return this._node}nodes(){return this._node.scene().graph.nodesFromIds(this._node_ids)}contains(t){return this._node_ids.includes(t.graphNodeId())}equals(t){const e=t.map((t=>t.graphNodeId())).sort();return f.isEqual(e,this._node_ids)}clear(){this._node_ids=[],this.send_update_event()}set(t){this._node_ids=[],this.add(t)}add(t){const e=t.map((t=>t.graphNodeId()));this._node_ids=f.union(this._node_ids,e),this.send_update_event()}remove(t){const e=t.map((t=>t.graphNodeId()));this._node_ids=f.difference(this._node_ids,e),this.send_update_event()}send_update_event(){this._node.emit(Ei.SELECTION_UPDATED)}toJSON(){return this._json=this._json||[],this._json=this._node_ids.map((t=>t)),this._json}}!function(t){t.ALWAYS=\\\\\\\"always\\\\\\\",t.NEVER=\\\\\\\"never\\\\\\\",t.FROM_NODE=\\\\\\\"from_node\\\\\\\"}(Qi||(Qi={}));class os{static unreachable(t){throw new Error(\\\\\\\"Didn't expect to get here\\\\\\\")}}class as{constructor(t){this.inputs_controller=t,this._clone_required_states=[],this._overridden=!1}init_inputs_cloned_state(t){m.isArray(t)?this._cloned_states=t:this._cloned_state=t,this._update_clone_required_state()}override_cloned_state_allowed(){if(this._cloned_states)for(let t of this._cloned_states)if(t==Qi.FROM_NODE)return!0;return!!this._cloned_state&&this._cloned_state==Qi.FROM_NODE}clone_required_state(t){return this._clone_required_states[t]}clone_required_states(){return this._clone_required_states}_get_clone_required_state(t){const e=this._cloned_states;if(e){const n=e[t];if(null!=n)return this.clone_required_from_state(n)}return!this._cloned_state||this.clone_required_from_state(this._cloned_state)}clone_required_from_state(t){switch(t){case Qi.ALWAYS:return!0;case Qi.NEVER:return!1;case Qi.FROM_NODE:return!this._overridden}return os.unreachable(t)}override_cloned_state(t){this._overridden=t,this._update_clone_required_state()}overriden(){return this._overridden}_update_clone_required_state(){if(this._cloned_states){const t=[];for(let e=0;e<this._cloned_states.length;e++)t[e]=this._get_clone_required_state(e);this._clone_required_states=t}else if(this._cloned_state){const t=this.inputs_controller.inputs_count(),e=[];for(let n=0;n<t;n++)e[n]=this._get_clone_required_state(n);this._clone_required_states=e}else;}}class ls{constructor(t){this.operation_container=t}inputs_count(){return this.operation_container.inputs_count()}init_inputs_cloned_state(t){this._cloned_states_controller||(this._cloned_states_controller=new as(this),this._cloned_states_controller.init_inputs_cloned_state(t))}clone_required(t){var e;const n=null===(e=this._cloned_states_controller)||void 0===e?void 0:e.clone_required_state(t);return null==n||n}override_cloned_state(t){var e;null===(e=this._cloned_states_controller)||void 0===e||e.override_cloned_state(t)}}class cs extends class{constructor(t,e,n){this.operation=t,this.name=e,this.params={},this._apply_default_params(),this._apply_init_params(n),this._init_cloned_states()}path_param_resolve_required(){return null!=this._path_params}resolve_path_params(t){if(this._path_params)for(let e of this._path_params)e.resolve(t)}_apply_default_params(){const t=this.operation.constructor.DEFAULT_PARAMS,e=Object.keys(t);for(let n of e){const e=t[n],i=this._convert_param_data(n,e);null!=i&&(this.params[n]=i)}}_apply_init_params(t){const e=Object.keys(t);for(let n of e){const e=t[n];if(null!=e.simple_data){const t=e.simple_data,i=this._convert_export_param_data(n,t);null!=i&&(this.params[n]=i)}}}_convert_param_data(t,e){if(m.isNumber(e)||m.isBoolean(e)||m.isString(e))return e;if(e instanceof yi){const t=e.clone();return this._path_params||(this._path_params=[]),this._path_params.push(t),t}return e instanceof D.a||e instanceof d.a||e instanceof p.a||e instanceof _.a?e.clone():void 0}_convert_export_param_data(t,e){const n=this.params[t];if(m.isBoolean(e))return e;if(m.isNumber(e))return m.isBoolean(n)?e>=1:e;if(m.isString(e)){if(n){if(n instanceof yi)return n.set_path(e);if(n instanceof xi)return n.set_path(e)}return e}m.isArray(e)&&this.params[t].fromArray(e)}setInput(t,e){this._inputs=this._inputs||[],this._inputs[t]=e}inputs_count(){return this._inputs?this._inputs.length:0}inputsController(){return this._inputs_controller=this._inputs_controller||new ls(this)}_init_cloned_states(){const t=this.operation.constructor.INPUT_CLONED_STATE;this.inputsController().init_inputs_cloned_state(t)}input_clone_required(t){return!this._inputs_controller||this._inputs_controller.clone_required(t)}override_input_clone_state(t){this.inputsController().override_cloned_state(t)}cook(t){return this.operation.cook(t,this.params)}}{constructor(t,e,n){super(t,e,n),this.operation=t,this.name=e,this.init_params=n,this._inputs=[],this._current_input_index=0,this._dirty=!0}add_input(t){super.setInput(this._current_input_index,t),this.increment_input_index()}increment_input_index(){this._current_input_index++}current_input_index(){return this._current_input_index}setDirty(){if(!this._dirty){this._compute_result=void 0;for(let t=0;t<this._inputs.length;t++){this._inputs[t].setDirty()}}}async compute(t,e){if(this._compute_result)return this._compute_result;const n=[],i=e.get(this);i&&i.forEach(((e,i)=>{n[i]=t[e]}));for(let i=0;i<this._inputs.length;i++){const s=this._inputs[i];let r=await s.compute(t,e);r&&(this.input_clone_required(i)&&(r=r.clone()),n[i]=r)}const s=this.operation.cook(n,this.params);return this._compute_result=s?s instanceof Promise?await s:s:void 0,this._dirty=!1,this._compute_result}}class hs{constructor(t,e){this.node=t,this._context=e,this._childrenByName=new Map,this._childrenByType=new Map,this._childrenAndGrandchildrenByContext=new Map}get selection(){return this._selection=this._selection||new rs(this.node)}dispose(){const t=this.children();for(let e of t)this.node.removeNode(e);this._selection=void 0}get context(){return this._context}set_output_node_find_method(t){this._output_node_find_method=t}output_node(){if(this._output_node_find_method)return this._output_node_find_method()}setChildName(t,e){let n;if(e=ss.sanitizeName(e),null!=(n=this._childrenByName.get(e))){if(t.name()===e&&n.graphNodeId()===t.graphNodeId())return;return e=ss.increment(e),this.setChildName(t,e)}{const n=t.name();this._childrenByName.get(n)&&this._childrenByName.delete(n),this._childrenByName.set(e,t),t.nameController.updateNameFromParent(e),this._addToNodesByType(t),this.node.scene().nodesController.addToInstanciatedNode(t)}}node_context_signature(){return`${this.node.context()}/${this.node.type()}`}available_children_classes(){return li.registeredNodes(this._context,this.node.type())}isValidChildType(t){return null!=this.available_children_classes()[t]}createNode(t,e,n=\\\\\\\"\\\\\\\"){if(\\\\\\\"string\\\\\\\"==typeof t){const i=this._find_node_class(t);return this._create_and_init_node(i,e,n)}return this._create_and_init_node(t,e,n)}_create_and_init_node(t,e,n=\\\\\\\"\\\\\\\"){const i=new t(this.node.scene(),`child_node_${n}`,e);return i.initialize_base_and_node(),this._addNode(i),i.lifecycle.setCreationCompleted(),i}_find_node_class(t){const e=this.available_children_classes()[t.toLowerCase()];if(null==e){const e=`child node type '${t}' not found for node '${this.node.path()}'. Available types are: ${Object.keys(this.available_children_classes()).join(\\\\\\\", \\\\\\\")}, ${this._context}, ${this.node.type()}`;throw console.error(e),e}return e}create_operation_container(t,e,n){const i=li.registeredOperation(this._context,t);if(null==i){const e=`no operation found with context ${this._context}/${t}`;throw console.error(e),e}{const t=new i(this.node.scene());return new cs(t,e,n||{})}}_addNode(t){if(t.setParent(this.node),t.params.init(),t.parentController.onSetParent(),t.nameController.runPostSetFullPathHooks(),t.childrenAllowed()&&t.childrenController)for(let e of t.childrenController.children())e.nameController.runPostSetFullPathHooks();return this.node.emit(Ei.CREATED,{child_node_json:t.toJSON()}),this.node.scene().lifecycleController.onCreateHookAllowed()&&t.lifecycle.run_on_create_hooks(),t.lifecycle.run_on_add_hooks(),this.setChildName(t,Wi.base_name(t)),this.node.lifecycle.run_on_child_add_hooks(t),t.require_webgl2()&&this.node.scene().webgl_controller.set_require_webgl2(),this.node.scene().missingExpressionReferencesController.checkForMissingReferences(t),t}removeNode(t){if(t.parent()!=this.node)return console.warn(`node ${t.name()} not under parent ${this.node.path()}`);{this.selection.contains(t)&&this.selection.remove([t]);const e=t.io.connections.firstInputConnection(),n=t.io.connections.inputConnections(),i=t.io.connections.outputConnections();if(n)for(let t of n)t&&t.disconnect({setInput:!0});if(i)for(let t of i)if(t&&(t.disconnect({setInput:!0}),e)){const n=e.node_src,i=t.output_index,s=t.node_dest,r=t.input_index;s.io.inputs.setInput(r,n,i)}t.setParent(null),this._childrenByName.delete(t.name()),this._removeFromNodesByType(t),this.node.scene().nodesController.removeFromInstanciatedNode(t),t.setSuccessorsDirty(this.node),t.graphDisconnectSuccessors(),this.node.lifecycle.run_on_child_remove_hooks(t),t.lifecycle.run_on_delete_hooks(),t.dispose(),t.emit(Ei.DELETED,{parent_id:this.node.graphNodeId()})}}_addToNodesByType(t){const e=t.graphNodeId(),n=t.type();h.addToSetAtEntry(this._childrenByType,n,e),this._addToChildrenAndGrandchildrenByContext(t)}_removeFromNodesByType(t){const e=t.graphNodeId(),n=t.type();h.removeFromSetAtEntry(this._childrenByType,n,e),this._removeFromChildrenAndGrandchildrenByContext(t)}_addToChildrenAndGrandchildrenByContext(t){var e;const n=t.graphNodeId(),i=t.context();h.addToSetAtEntry(this._childrenAndGrandchildrenByContext,i,n);const s=this.node.parent();s&&s.childrenAllowed()&&(null===(e=s.childrenController)||void 0===e||e._addToChildrenAndGrandchildrenByContext(t))}_removeFromChildrenAndGrandchildrenByContext(t){var e;const n=t.graphNodeId(),i=t.context();h.removeFromSetAtEntry(this._childrenAndGrandchildrenByContext,i,n);const s=this.node.parent();s&&s.childrenAllowed()&&(null===(e=s.childrenController)||void 0===e||e._removeFromChildrenAndGrandchildrenByContext(t))}nodesByType(t){const e=this._childrenByType.get(t);if(!e)return[];const n=this.node.scene().graph,i=[];for(let t of e){const e=n.nodeFromId(t);e&&i.push(e)}return i}childByName(t){return this._childrenByName.get(t)||null}hasChildrenAndGrandchildrenWithContext(t){return null!=this._childrenAndGrandchildrenByContext.get(t)}children(){const t=[];return this._childrenByName.forEach((e=>{t.push(e)})),t}childrenNames(){const t=[];return this._childrenByName.forEach(((e,n)=>{t.push(n)})),t}traverseChildren(t){this._childrenByName.forEach((e=>{var n;t(e),null===(n=e.childrenController)||void 0===n||n.traverseChildren(t)}))}}class us{constructor(t){this.node=t,this._creation_completed=!1}dispose(){this._on_child_add_hooks=void 0,this._on_child_remove_hooks=void 0,this._on_create_hooks=void 0,this._on_add_hooks=void 0,this._on_delete_hooks=void 0}setCreationCompleted(){this._creation_completed||(this._creation_completed=!0)}creationCompleted(){return this.node.scene().loadingController.loaded()&&this._creation_completed}add_on_child_add_hook(t){this._on_child_add_hooks=this._on_child_add_hooks||[],this._on_child_add_hooks.push(t)}run_on_child_add_hooks(t){this.execute_hooks_with_child_node(this._on_child_add_hooks,t)}add_on_child_remove_hook(t){this._on_child_remove_hooks=this._on_child_remove_hooks||[],this._on_child_remove_hooks.push(t)}run_on_child_remove_hooks(t){this.execute_hooks_with_child_node(this._on_child_remove_hooks,t)}add_on_create_hook(t){this._on_create_hooks=this._on_create_hooks||[],this._on_create_hooks.push(t)}run_on_create_hooks(){this.execute_hooks(this._on_create_hooks)}add_on_add_hook(t){this._on_add_hooks=this._on_add_hooks||[],this._on_add_hooks.push(t)}run_on_add_hooks(){this.execute_hooks(this._on_add_hooks)}add_delete_hook(t){this._on_delete_hooks=this._on_delete_hooks||[],this._on_delete_hooks.push(t)}run_on_delete_hooks(){this.execute_hooks(this._on_delete_hooks)}execute_hooks(t){if(t){let e;for(e of t)e()}}execute_hooks_with_child_node(t,e){if(t){let n;for(n of t)n(e)}}}!function(t){t.ANIM=\\\\\\\"anim\\\\\\\",t.COP=\\\\\\\"cop\\\\\\\",t.EVENT=\\\\\\\"event\\\\\\\",t.GL=\\\\\\\"gl\\\\\\\",t.JS=\\\\\\\"js\\\\\\\",t.MANAGER=\\\\\\\"manager\\\\\\\",t.MAT=\\\\\\\"mat\\\\\\\",t.OBJ=\\\\\\\"obj\\\\\\\",t.POST=\\\\\\\"post\\\\\\\",t.ROP=\\\\\\\"rop\\\\\\\",t.SOP=\\\\\\\"sop\\\\\\\"}(ts||(ts={})),function(t){t.ANIM=\\\\\\\"animationsNetwork\\\\\\\",t.COP=\\\\\\\"copNetwork\\\\\\\",t.EVENT=\\\\\\\"eventsNetwork\\\\\\\",t.MAT=\\\\\\\"materialsNetwork\\\\\\\",t.POST=\\\\\\\"postProcessNetwork\\\\\\\",t.ROP=\\\\\\\"renderersNetwork\\\\\\\"}(es||(es={})),function(t){t.INPUT=\\\\\\\"subnetInput\\\\\\\",t.OUTPUT=\\\\\\\"subnetOutput\\\\\\\"}(ns||(ns={})),function(t){t.PERSPECTIVE=\\\\\\\"perspectiveCamera\\\\\\\",t.ORTHOGRAPHIC=\\\\\\\"orthographicCamera\\\\\\\"}(is||(is={}));const ds=[is.ORTHOGRAPHIC,is.PERSPECTIVE];var ps,_s;!function(t){t.ATTRIBUTE=\\\\\\\"attribute\\\\\\\"}(ps||(ps={})),function(t){t.DEVICE_ORIENTATION=\\\\\\\"cameraDeviceOrientationControls\\\\\\\",t.MAP=\\\\\\\"cameraMapControls\\\\\\\",t.ORBIT=\\\\\\\"cameraOrbitControls\\\\\\\",t.FIRST_PERSON=\\\\\\\"firstPersonControls\\\\\\\",t.PLAYER=\\\\\\\"playerControls\\\\\\\",t.MOBILE_JOYSTICK=\\\\\\\"mobileJoystickControls\\\\\\\"}(_s||(_s={}));const ms=[_s.DEVICE_ORIENTATION,_s.MAP,_s.ORBIT,_s.FIRST_PERSON,_s.MOBILE_JOYSTICK];class fs{constructor(t){this._node=t}set_node(t){this._node=t}node(){return this._node}set_content(t){this._content=t,this._post_set_content()}has_content(){return null!=this._content}content(){return this._content}_post_set_content(){}coreContent(){return this._content}coreContentCloned(){return this._content}infos(){return[]}}var gs=n(69);class vs extends Q.a{constructor(){super(),this.type=\\\\\\\"Scene\\\\\\\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}vs.prototype.isScene=!0;var ys=n(49),xs=n(52),bs=n(42),ws=n(55),Ts=n(62),As=n(24),Ms=n(35);const Es=new p.a,Ss=new p.a;class Cs extends Q.a{constructor(){super(),this._currentLevel=0,this.type=\\\\\\\"LOD\\\\\\\",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t<n;t++){const n=e[t];this.addLevel(n.object.clone(),n.distance)}return this.autoUpdate=t.autoUpdate,this}addLevel(t,e=0){e=Math.abs(e);const n=this.levels;let i;for(i=0;i<n.length&&!(e<n[i].distance);i++);return n.splice(i,0,{distance:e,object:t}),this.add(t),this}getCurrentLevel(){return this._currentLevel}getObjectForDistance(t){const e=this.levels;if(e.length>0){let n,i;for(n=1,i=e.length;n<i&&!(t<e[n].distance);n++);return e[n-1].object}return null}raycast(t,e){if(this.levels.length>0){Es.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Es);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){Es.setFromMatrixPosition(t.matrixWorld),Ss.setFromMatrixPosition(this.matrixWorld);const n=Es.distanceTo(Ss)/t.zoom;let i,s;for(e[0].object.visible=!0,i=1,s=e.length;i<s&&n>=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;i<s;i++)e[i].object.visible=!1}}toJSON(t){const e=super.toJSON(t);!1===this.autoUpdate&&(e.object.autoUpdate=!1),e.object.levels=[];const n=this.levels;for(let t=0,i=n.length;t<i;t++){const i=n[t];e.object.levels.push({object:i.object.uuid,distance:i.distance})}return e}}var Ns;!function(t){t.OBJECT3D=\\\\\\\"Object3D\\\\\\\",t.GROUP=\\\\\\\"Group\\\\\\\",t.MESH=\\\\\\\"Mesh\\\\\\\",t.POINTS=\\\\\\\"Points\\\\\\\",t.LINE_SEGMENTS=\\\\\\\"LineSegments\\\\\\\",t.LOD=\\\\\\\"LOD\\\\\\\"}(Ns||(Ns={}));const Ls={[Ns.MESH]:B.a,[Ns.GROUP]:Fn.a,[Ns.POINTS]:ys.a,[Ns.LINE_SEGMENTS]:Ms.a,[Ns.OBJECT3D]:Q.a,[Ns.LOD]:Cs};function Os(t){switch(t){case Q.a:return Ns.OBJECT3D;case Fn.a:return Ns.GROUP;case B.a:return Ns.MESH;case ys.a:return Ns.POINTS;case Ms.a:return Ns.LINE_SEGMENTS;case Cs:return Ns.LOD;default:return li.warn(\\\\\\\"object type not supported\\\\\\\",t),Ns.MESH}}const Ps=[Ns.MESH,Ns.POINTS,Ns.LINE_SEGMENTS],Rs=[{name:\\\\\\\"Mesh\\\\\\\",value:Ps.indexOf(Ns.MESH)},{name:\\\\\\\"Points\\\\\\\",value:Ps.indexOf(Ns.POINTS)},{name:\\\\\\\"LineSegments\\\\\\\",value:Ps.indexOf(Ns.LINE_SEGMENTS)}],Is={MeshStandard:new ws.a({color:16777215,side:w.H,metalness:.5,roughness:.9}),[Ns.MESH]:new Ts.a({color:new D.a(1,1,1),side:w.H,vertexColors:!1,transparent:!0,depthTest:!0}),[Ns.POINTS]:new bs.a({color:16777215,size:.1,depthTest:!0}),[Ns.LINE_SEGMENTS]:new As.a({color:16777215,linewidth:1})};var Fs;!function(t){t[t.VERTEX=0]=\\\\\\\"VERTEX\\\\\\\",t[t.OBJECT=1]=\\\\\\\"OBJECT\\\\\\\"}(Fs||(Fs={}));const Ds=[Fs.VERTEX,Fs.OBJECT],Bs=[{name:\\\\\\\"vertex\\\\\\\",value:Fs.VERTEX},{name:\\\\\\\"object\\\\\\\",value:Fs.OBJECT}];var zs;!function(t){t[t.NUMERIC=0]=\\\\\\\"NUMERIC\\\\\\\",t[t.STRING=1]=\\\\\\\"STRING\\\\\\\"}(zs||(zs={}));const ks=[zs.NUMERIC,zs.STRING],Us=[{name:\\\\\\\"numeric\\\\\\\",value:zs.NUMERIC},{name:\\\\\\\"string\\\\\\\",value:zs.STRING}];var Gs;!function(t){t[t.FLOAT=1]=\\\\\\\"FLOAT\\\\\\\",t[t.VECTOR2=2]=\\\\\\\"VECTOR2\\\\\\\",t[t.VECTOR3=3]=\\\\\\\"VECTOR3\\\\\\\",t[t.VECTOR4=4]=\\\\\\\"VECTOR4\\\\\\\"}(Gs||(Gs={}));const Vs=[Gs.FLOAT,Gs.VECTOR2,Gs.VECTOR3,Gs.VECTOR4],Hs=[Gs.FLOAT,Gs.VECTOR4],js={ATTRIB_CLASS:{VERTEX:Fs.VERTEX,OBJECT:Fs.OBJECT},OBJECT_TYPES:Ps,CONSTRUCTOR_NAMES_BY_CONSTRUCTOR_NAME:{[vs.name]:\\\\\\\"Scene\\\\\\\",[Fn.a.name]:\\\\\\\"Group\\\\\\\",[Q.a.name]:\\\\\\\"Object3D\\\\\\\",[B.a.name]:\\\\\\\"Mesh\\\\\\\",[ys.a.name]:\\\\\\\"Points\\\\\\\",[Ms.a.name]:\\\\\\\"LineSegments\\\\\\\",[xs.a.name]:\\\\\\\"Bone\\\\\\\",[gs.a.name]:\\\\\\\"SkinnedMesh\\\\\\\"},CONSTRUCTORS_BY_NAME:{[Ns.MESH]:B.a,[Ns.POINTS]:ys.a,[Ns.LINE_SEGMENTS]:Ms.a},MATERIALS:Is};var Ws;!function(t){t.COLOR=\\\\\\\"color\\\\\\\",t.NORMAL=\\\\\\\"normal\\\\\\\",t.POSITION=\\\\\\\"position\\\\\\\",t.PSCALE=\\\\\\\"pscale\\\\\\\",t.UP=\\\\\\\"up\\\\\\\",t.UV=\\\\\\\"uv\\\\\\\",t.SCALE=\\\\\\\"scale\\\\\\\",t.TANGENT=\\\\\\\"tangent\\\\\\\"}(Ws||(Ws={}));const qs={P:Ws.POSITION,N:Ws.NORMAL,Cd:Ws.COLOR};class Xs{static remapName(t){return qs[t]||t}static arrayToIndexedArrays(t){const e={};let n=0;const i=[],s=[];let r=0;for(;r<t.length;){const o=t[r],a=e[o];null!=a?i.push(a):(s.push(o),i.push(n),e[o]=n,n+=1),r++}return{indices:i,values:s}}static default_value(t){switch(t){case 1:return 0;case 2:return new d.a(0,0);case 3:return new p.a(0,0,0);default:throw`size ${t} not yet implemented`}}static copy(t,e,n=!0){const i=null==t?void 0:t.array,s=null==e?void 0:e.array;if(i&&s){const t=Math.min(i.length,s.length);for(let e=0;e<t;e++)s[e]=i[e];n&&(e.needsUpdate=!0)}}static attribSizeFromValue(t){if(m.isString(t)||m.isNumber(t))return Gs.FLOAT;if(m.isArray(t))return t.length;switch(t.constructor){case d.a:return Gs.VECTOR2;case p.a:return Gs.VECTOR3;case _.a:return Gs.VECTOR4}return 0}}class Ys{constructor(t){this._index=t}index(){return this._index}}const $s=\\\\\\\"position\\\\\\\",Js=\\\\\\\"normal\\\\\\\";var Zs;!function(t){t.x=\\\\\\\"x\\\\\\\",t.y=\\\\\\\"y\\\\\\\",t.z=\\\\\\\"z\\\\\\\",t.w=\\\\\\\"w\\\\\\\",t.r=\\\\\\\"r\\\\\\\",t.g=\\\\\\\"g\\\\\\\",t.b=\\\\\\\"b\\\\\\\"}(Zs||(Zs={}));const Ks={x:0,y:1,z:2,w:3,r:0,g:1,b:2};class Qs extends Ys{constructor(t,e){super(e),this._coreGeometry=t,this._geometry=this._coreGeometry.geometry()}applyMatrix4(t){this.position().applyMatrix4(t)}coreGeometry(){return this._coreGeometry}geometry(){return this._geometry=this._geometry||this._coreGeometry.geometry()}attribSize(t){return t=Xs.remapName(t),this._geometry.getAttribute(t).itemSize}hasAttrib(t){const e=Xs.remapName(t);return this._coreGeometry.hasAttrib(e)}attribValue(t,e){if(\\\\\\\"ptnum\\\\\\\"===t)return this.index();{let n=null,i=null;\\\\\\\".\\\\\\\"===t[t.length-2]&&(n=t[t.length-1],i=Ks[n],t=t.substring(0,t.length-2));const s=Xs.remapName(t),r=this._geometry.getAttribute(s);if(!r){const e=`attrib ${t} not found. availables are: ${Object.keys(this._geometry.attributes||{}).join(\\\\\\\",\\\\\\\")}`;throw console.warn(e),e}{const{array:t}=r;if(this._coreGeometry.isAttribIndexed(s))return this.indexedAttribValue(s);{const n=r.itemSize,s=this._index*n;if(null==i)switch(n){case 1:return t[s];case 2:return(e=e||new d.a).fromArray(t,s),e;case 3:return(e=e||new p.a).fromArray(t,s),e;case 4:return(e=e||new _.a).fromArray(t,s),e;default:throw`size not valid (${n})`}else switch(n){case 1:return t[s];default:return t[s+i]}}}}}attribValueNumber(t){const e=Xs.remapName(t);return this._geometry.getAttribute(e).array[this._index]}attribValueVector2(t,e){const n=Xs.remapName(t),i=this._geometry.getAttribute(n);return e.fromArray(i.array,2*this._index),e}attribValueVector3(t,e){const n=Xs.remapName(t),i=this._geometry.getAttribute(n);return e.fromArray(i.array,3*this._index),e}attribValueVector4(t,e){const n=Xs.remapName(t),i=this._geometry.getAttribute(n);return e.fromArray(i.array,4*this._index),e}indexedAttribValue(t){const e=this.attribValueIndex(t);return this._coreGeometry.userDataAttrib(t)[e]}stringAttribValue(t){return this.indexedAttribValue(t)}attribValueIndex(t){return this._coreGeometry.isAttribIndexed(t)?this._geometry.getAttribute(t).array[this._index]:-1}isAttribIndexed(t){return this._coreGeometry.isAttribIndexed(t)}position(){return this._position||(this._position=this.getPosition(new p.a))}getPosition(t){const{array:e}=this._geometry.getAttribute($s);return t.fromArray(e,3*this._index)}setPosition(t){this.setAttribValueVector3($s,t)}normal(){return this._normal=this._normal||this.getNormal(new p.a)}getNormal(t){const{array:e}=this._geometry.getAttribute(Js);return t.fromArray(e,3*this._index)}setNormal(t){return this.setAttribValueVector3(Js,t)}setAttribValue(t,e){const n=this._geometry.getAttribute(t),i=n.array,s=n.itemSize;if(m.isArray(e))for(let t=0;t<s;t++)i[this._index*s+t]=e[t];else switch(s){case 1:i[this._index]=e;break;case 2:const t=e,n=2*this._index;i[n+0]=t.x,i[n+1]=t.y;break;case 3:const r=null!=e.r,o=3*this._index;if(r){const t=e;i[o+0]=t.r,i[o+1]=t.g,i[o+2]=t.b}else{const t=e;i[o+0]=t.x,i[o+1]=t.y,i[o+2]=t.z}break;case 4:const a=e,l=4*this._index;i[l+0]=a.x,i[l+1]=a.y,i[l+2]=a.z,i[l+3]=a.w;break;default:throw console.warn(`Point.set_attrib_value does not yet allow attrib size ${s}`),`attrib size ${s} not implemented`}}setAttribValueFromNumber(t,e){this._geometry.getAttribute(t).array[this._index]=e}setAttribValueFromVector2(t,e){const n=this._geometry.getAttribute(t);e.toArray(n.array,2*this._index)}setAttribValueFromVector3(t,e){const n=this._geometry.getAttribute(t);e.toArray(n.array,3*this._index)}setAttribValueFromVector4(t,e){const n=this._geometry.getAttribute(t);e.toArray(n.array,4*this._index)}setAttribValueVector3(t,e){if(null==e)return;if(null==t)throw\\\\\\\"Point.set_attrib_value requires a name\\\\\\\";const n=this._geometry.getAttribute(t).array,i=3*this._index;n[i]=e.x,n[i+1]=e.y,n[i+2]=e.z}setAttribIndex(t,e){return this._geometry.getAttribute(t).array[this._index]=e}}var tr=n(40);const er=function(t){return function(e){return Math.pow(e,t)}},nr=function(t){return function(e){return 1-Math.abs(Math.pow(e-1,t))}},ir=function(t){return function(e){return e<.5?er(t)(2*e)/2:nr(t)(2*e-1)/2+.5}},sr={linear:ir(1),ease_i:function(t,e){return er(e)(t)},ease_o:function(t,e){return nr(e)(t)},ease_io:function(t,e){return ir(e)(t)},ease_i2:er(2),ease_o2:nr(2),ease_io2:ir(2),ease_i3:ir(3),ease_o3:ir(3),ease_io3:ir(3),ease_i4:ir(4),ease_o4:ir(4),ease_io4:ir(4),ease_i_sin:function(t){return 1+Math.sin(Math.PI/2*t-Math.PI/2)},ease_o_sin:function(t){return Math.sin(Math.PI/2*t)},ease_io_sin:function(t){return(1+Math.sin(Math.PI*t-Math.PI/2))/2},ease_i_elastic:function(t){return(.04-.04/t)*Math.sin(25*t)+1},ease_o_elastic:function(t){return.04*t/--t*Math.sin(25*t)},ease_io_elastic:function(t){return(t-=.5)<0?(.02+.01/t)*Math.sin(50*t):(.02-.01/t)*Math.sin(50*t)+1}},rr=Math.PI/180;class or{static clamp(t,e,n){return t<e?e:t>n?n:t}static fit01(t,e,n){return this.fit(t,0,1,e,n)}static fit(t,e,n,i,s){return(t-e)/(n-e)*(s-i)+i}static blend(t,e,n){return(1-n)*t+n*e}static degrees_to_radians(t){return t*rr}static radians_to_degrees(t){return t/rr}static deg2rad(t){return this.degrees_to_radians(t)}static rad2deg(t){return this.radians_to_degrees(t)}static rand(t){return m.isNumber(t)?this.randFloat(t):this.randVec2(t)}static round(t,e){const n=t/e;return(t<0?Math.ceil(n):Math.floor(n))*e}static highest_even(t){return 2*Math.ceil(.5*t)}static randFloat(t,e=136574){return this._vec.x=t,this._vec.y=e,this.randVec2(this._vec)}static randVec2(t){const e=(12.9898*t.x+78.233*t.y)%Math.PI;return this.fract(43758.5453*Math.sin(e))}static geodesic_distance(t,e){var n=this.deg2rad(t.lat),i=this.deg2rad(e.lat),s=this.deg2rad(e.lat-t.lat),r=this.deg2rad(e.lng-t.lng),o=Math.sin(s/2)*Math.sin(s/2)+Math.cos(n)*Math.cos(i)*Math.sin(r/2)*Math.sin(r/2);return 6371e3*(2*Math.atan2(Math.sqrt(o),Math.sqrt(1-o)))}static expand_triangle(t,e){t.getMidpoint(this._triangle_mid),this._triangle_mid_to_corner.copy(t.a).sub(this._triangle_mid),this._triangle_mid_to_corner.normalize().multiplyScalar(e),t.a.add(this._triangle_mid_to_corner),this._triangle_mid_to_corner.copy(t.b).sub(this._triangle_mid),this._triangle_mid_to_corner.normalize().multiplyScalar(e),t.b.add(this._triangle_mid_to_corner),this._triangle_mid_to_corner.copy(t.c).sub(this._triangle_mid),this._triangle_mid_to_corner.normalize().multiplyScalar(e),t.c.add(this._triangle_mid_to_corner)}static nearestPower2(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.log(2)))}}or.Easing=sr,or.fract=t=>t-Math.floor(t),or._vec={x:0,y:136574},or._triangle_mid=new p.a,or._triangle_mid_to_corner=new p.a;class ar{constructor(t,e){this._coreGeometry=t,this._index=e,this._geometry=this._coreGeometry.geometry()}index(){return this._index}points(){return this._points=this._points||this._get_points()}applyMatrix4(t){for(let e of this.points())e.applyMatrix4(t)}_get_points(){var t;const e=(null===(t=this._geometry.index)||void 0===t?void 0:t.array)||[],n=3*this._index;return[new Qs(this._coreGeometry,e[n+0]),new Qs(this._coreGeometry,e[n+1]),new Qs(this._coreGeometry,e[n+2])]}positions(){return this._positions=this._positions||this._getPositions()}_getPositions(){const t=this.points();return[t[0].position(),t[1].position(),t[2].position()]}triangle(){return this._triangle=this._triangle||this._get_triangle()}_get_triangle(){const t=this.positions();return new tr.a(t[0],t[1],t[2])}deltas(){return this._deltas=this._deltas||this._getDeltas()}_getDeltas(){const t=this.positions();return[t[1].clone().sub(t[0]),t[2].clone().sub(t[0])]}area(){return this.triangle().getArea()}center(t){const e=this.positions();return t.x=(e[0].x+e[1].x+e[2].x)/3,t.y=(e[0].y+e[1].y+e[2].y)/3,t.z=(e[0].z+e[1].z+e[2].z)/3,t}randomPosition(t){let e=[or.randFloat(t),or.randFloat(6541*t)];return e[0]+e[1]>1&&(e[0]=1-e[0],e[1]=1-e[1]),this.positions()[0].clone().add(this.deltas()[0].clone().multiplyScalar(e[0])).add(this.deltas()[1].clone().multiplyScalar(e[1]))}attribValueAtPosition(t,e){const n=new p.a;this.triangle().getBarycoord(e,n);const i=n.toArray(),s=this._geometry.attributes[t].itemSize,r=this.points().map((e=>e.attribValue(t)));let o,a,l=0;switch(s){case 1:a=0;for(let t of r)a+=t*i[l],l++;o=a;break;default:for(let t of r){const e=t.multiplyScalar(i[l]);a?a.add(e):a=e,l++}o=a}return o}static interpolatedValue(t,e,n,i){const s=[e.a,e.b,e.c],r=t.getAttribute(\\\\\\\"position\\\\\\\").array,o=s.map((t=>new p.a(r[3*t+0],r[3*t+1],r[3*t+2]))),a=i.itemSize,l=i.array;let c=[];switch(a){case 1:c=s.map((t=>l[t]));break;case 2:c=s.map((t=>new d.a(l[2*t+0],l[2*t+1])));break;case 3:c=s.map((t=>new p.a(l[3*t+0],l[3*t+1],l[3*t+2])))}const h=s.map(((t,e)=>n.distanceTo(o[e]))),u=f.sum([h[0]*h[1],h[0]*h[2],h[1]*h[2]]),_=[h[1]*h[2]/u,h[0]*h[2]/u,h[0]*h[1]/u];let m;switch(a){case 1:m=f.sum(s.map(((t,e)=>_[e]*c[e])));break;default:var g=s.map(((t,e)=>c[e].multiplyScalar(_[e])));m=null;for(let t of g)m?m.add(t):m=t}return m}}class lr{from_points(t){t=this._filter_points(t);const e=new S.a,n=new fr(e),i=t[0];if(null!=i){const s=i.geometry(),r=i.coreGeometry(),o={};for(let e=0;e<t.length;e++)o[t[e].index()]=e;const a=this._indices_from_points(o,s);a&&e.setIndex(a);const{attributes:l}=s;for(let i of Object.keys(l)){if(null!=r.userDataAttribs()[i]){const s=f.uniq(t.map((t=>t.indexedAttribValue(i)))),r={};s.forEach(((t,e)=>r[t]=e)),n.userDataAttribs()[i]=s;const o=[];for(let e of t){const t=r[e.indexedAttribValue(i)];o.push(t)}e.setAttribute(i,new C.c(o,1))}else{const n=l[i].itemSize,s=new Array(t.length*n);switch(n){case 1:for(let e=0;e<t.length;e++)s[e]=t[e].attribValue(i);break;default:let e;for(let r=0;r<t.length;r++)e=t[r].attribValue(i),e.toArray(s,r*n)}e.setAttribute(i,new C.c(s,n))}}}return e}}var cr=n(78),hr=n(65);function ur(t,e=!1){const n=null!==t[0].index,i=new Set(Object.keys(t[0].attributes)),s=new Set(Object.keys(t[0].morphAttributes)),r={},o={},a=t[0].morphTargetsRelative,l=new S.a;let c=0;for(let h=0;h<t.length;++h){const u=t[h];let d=0;if(n!==(null!==u.index))return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+h+\\\\\\\". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.\\\\\\\"),null;for(const t in u.attributes){if(!i.has(t))return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+h+'. All geometries must have compatible attributes; make sure \\\\\\\"'+t+'\\\\\\\" attribute exists among all geometries, or in none of them.'),null;void 0===r[t]&&(r[t]=[]),r[t].push(u.attributes[t]),d++}if(d!==i.size)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+h+\\\\\\\". Make sure all geometries have the same number of attributes.\\\\\\\"),null;if(a!==u.morphTargetsRelative)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+h+\\\\\\\". .morphTargetsRelative must be consistent throughout all geometries.\\\\\\\"),null;for(const t in u.morphAttributes){if(!s.has(t))return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+h+\\\\\\\".  .morphAttributes must be consistent throughout all geometries.\\\\\\\"),null;void 0===o[t]&&(o[t]=[]),o[t].push(u.morphAttributes[t])}if(l.userData.mergedUserData=l.userData.mergedUserData||[],l.userData.mergedUserData.push(u.userData),e){let t;if(n)t=u.index.count;else{if(void 0===u.attributes.position)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+h+\\\\\\\". The geometry must have either an index or a position attribute\\\\\\\"),null;t=u.attributes.position.count}l.addGroup(c,t,h),c+=t}}if(n){let e=0;const n=[];for(let i=0;i<t.length;++i){const s=t[i].index;for(let t=0;t<s.count;++t)n.push(s.getX(t)+e);e+=t[i].attributes.position.count}l.setIndex(n)}for(const t in r){const e=dr(r[t]);if(!e)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \\\\\\\"+t+\\\\\\\" attribute.\\\\\\\"),null;l.setAttribute(t,e)}for(const t in o){const e=o[t][0].length;if(0===e)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[t]=[];for(let n=0;n<e;++n){const e=[];for(let i=0;i<o[t].length;++i)e.push(o[t][i][n]);const i=dr(e);if(!i)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \\\\\\\"+t+\\\\\\\" morphAttribute.\\\\\\\"),null;l.morphAttributes[t].push(i)}}return l}function dr(t){let e,n,i,s=0;for(let r=0;r<t.length;++r){const o=t[r];if(o.isInterleavedBufferAttribute)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.\\\\\\\"),null;if(void 0===e&&(e=o.array.constructor),e!==o.array.constructor)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.\\\\\\\"),null;if(void 0===n&&(n=o.itemSize),n!==o.itemSize)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.\\\\\\\"),null;if(void 0===i&&(i=o.normalized),i!==o.normalized)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.\\\\\\\"),null;s+=o.array.length}const r=new e(s);let o=0;for(let e=0;e<t.length;++e)r.set(t[e].array,o),o+=t[e].array.length;return new C.a(r,n,i)}class pr{static createIndexIfNone(t){if(!t.index){const e=t.getAttribute(\\\\\\\"position\\\\\\\");if(e){const n=e.array;t.setIndex(f.range(n.length/3))}}}}class _r{static merge(t){if(0===t.length)return;for(let e of t)pr.createIndexIfNone(e);const e=t.map((t=>new fr(t))),n=e[0].indexedAttributeNames(),i={};for(let t of n){const n={},s=[];for(let i of e){const e=i.points();for(let i of e){s.push(i);const e=i.indexedAttribValue(t);null!=n[e]?n[e]:n[e]=Object.keys(n).length}}const r=Object.keys(n);for(let e of s){const i=n[e.indexedAttribValue(t)];e.setAttribIndex(t,i)}i[t]=r}const s=ur(t),r=new fr(s);return Object.keys(i).forEach((t=>{const e=i[t];r.setIndexedAttributeValues(t,e)})),s&&delete s.userData.mergedUserData,s}}const mr=\\\\\\\"indexed_attrib_values\\\\\\\";class fr{constructor(t){this._geometry=t}geometry(){return this._geometry}uuid(){return this._geometry.uuid}boundingBox(){return this._bounding_box=this._bounding_box||this._create_bounding_box()}_create_bounding_box(){if(this._geometry.computeBoundingBox(),this._geometry.boundingBox)return this._geometry.boundingBox}markAsInstance(){this._geometry.userData.isInstance=!0}static markedAsInstance(t){return!0===t.userData.isInstance}markedAsInstance(){return fr.markedAsInstance(this._geometry)}positionAttribName(){let t=\\\\\\\"position\\\\\\\";return this.markedAsInstance()&&(t=\\\\\\\"instancePosition\\\\\\\"),t}computeVertexNormals(){this._geometry.computeVertexNormals()}userDataAttribs(){return this._geometry.userData[mr]=this._geometry.userData[mr]||{}}indexedAttributeNames(){return Object.keys(this.userDataAttribs()||{})}userDataAttrib(t){return t=Xs.remapName(t),this.userDataAttribs()[t]}isAttribIndexed(t){return t=Xs.remapName(t),null!=this.userDataAttrib(t)}hasAttrib(t){return\\\\\\\"ptnum\\\\\\\"===t||(t=Xs.remapName(t),null!=this._geometry.attributes[t])}attribType(t){return this.isAttribIndexed(t)?zs.STRING:zs.NUMERIC}static attribNames(t){return Object.keys(t.attributes)}attribNames(){return fr.attribNames(this._geometry)}static attribNamesMatchingMask(t,e){const n=ss.attribNames(e),i=[];for(let e of this.attribNames(t))for(let t of n)ss.matchMask(e,t)&&i.push(e);return f.uniq(i)}attribSizes(){const t={};for(let e of this.attribNames())t[e]=this._geometry.attributes[e].itemSize;return t}attribSize(t){let e;return t=Xs.remapName(t),null!=(e=this._geometry.attributes[t])?e.itemSize:\\\\\\\"ptnum\\\\\\\"===t?1:0}setIndexedAttributeValues(t,e){this.userDataAttribs()[t]=e}setIndexedAttribute(t,e,n){this.setIndexedAttributeValues(t,e),this._geometry.setAttribute(t,new C.f(n,1))}addNumericAttrib(t,e=1,n=0){const i=[];let s=!1;if(m.isNumber(n)){for(let t=0;t<this.pointsCount();t++)for(let t=0;t<e;t++)i.push(n);s=!0}else if(e>1)if(m.isArray(n)){for(let t=0;t<this.pointsCount();t++)for(let t=0;t<e;t++)i.push(n[t]);s=!0}else{const t=n;if(2==e&&null!=t.x&&null!=t.y){for(let e=0;e<this.pointsCount();e++)i.push(t.x),i.push(t.y);s=!0}const r=n;if(3==e&&null!=r.x&&null!=r.y&&null!=r.z){for(let t=0;t<this.pointsCount();t++)i.push(r.x),i.push(r.y),i.push(r.z);s=!0}const o=n;if(3==e&&null!=o.r&&null!=o.g&&null!=o.b){for(let t=0;t<this.pointsCount();t++)i.push(o.r),i.push(o.g),i.push(o.b);s=!0}const a=n;if(4==e&&null!=a.x&&null!=a.y&&null!=a.z&&null!=a.w){for(let t=0;t<this.pointsCount();t++)i.push(a.x),i.push(a.y),i.push(a.z),i.push(a.w);s=!0}}if(!s)throw console.warn(n),`CoreGeometry.add_numeric_attrib error: no other default value allowed for now in add_numeric_attrib (default given: ${n})`;this._geometry.setAttribute(t.trim(),new C.c(i,e))}initPositionAttribute(t,e){const n=[];null==e&&(e=new p.a);for(let i=0;i<t;i++)n.push(e.x),n.push(e.y),n.push(e.z);return this._geometry.setAttribute(\\\\\\\"position\\\\\\\",new C.c(n,3))}addAttribute(t,e){switch(e.type()){case zs.STRING:return console.log(\\\\\\\"TODO: to implement\\\\\\\");case zs.NUMERIC:return this.addNumericAttrib(t,e.size())}}renameAttrib(t,e){this.isAttribIndexed(t)&&(this.userDataAttribs()[e]=b.clone(this.userDataAttribs()[t]),delete this.userDataAttribs()[t]);const n=this._geometry.getAttribute(t);return this._geometry.setAttribute(e.trim(),new C.c(n.array,n.itemSize)),this._geometry.deleteAttribute(t)}deleteAttribute(t){return this.isAttribIndexed(t)&&delete this.userDataAttribs()[t],this._geometry.deleteAttribute(t)}clone(){return fr.clone(this._geometry)}static clone(t){let e;const n=t.clone();return null!=(e=t.userData)&&(n.userData=b.cloneDeep(e)),n}pointsCount(){return fr.pointsCount(this._geometry)}static pointsCount(t){let e,n=0;let i=\\\\\\\"position\\\\\\\";if(new this(t).markedAsInstance()&&(i=\\\\\\\"instancePosition\\\\\\\"),null!=(e=t.getAttribute(i))){let t;null!=(t=e.array)&&(n=t.length/3)}return n}points(){return this.pointsFromGeometry()}pointsFromGeometry(){const t=[],e=this._geometry.getAttribute(this.positionAttribName());if(null!=e){const n=e.array.length/3;for(let e=0;e<n;e++){const n=new Qs(this,e);t.push(n)}}return t}static geometryFromPoints(t,e){switch(e){case Ns.MESH:return this._mesh_builder.from_points(t);case Ns.POINTS:return this._points_builder.from_points(t);case Ns.LINE_SEGMENTS:return this._lines_segment_builder.from_points(t);case Ns.OBJECT3D:case Ns.GROUP:case Ns.LOD:return null}os.unreachable(e)}static mergeGeometries(t){return _r.merge(t)}static merge_geometries(t){return _r.merge(t)}segments(){var t;const e=(null===(t=this.geometry().index)||void 0===t?void 0:t.array)||[];return f.chunk(e,2)}faces(){return this.facesFromGeometry()}facesFromGeometry(){var t;const e=((null===(t=this.geometry().index)||void 0===t?void 0:t.array)||[]).length/3;return f.range(e).map((t=>new ar(this,t)))}}var gr;fr._mesh_builder=new class extends lr{_filter_points(t){var e;const n=t[0];if(n){const i=null===(e=n.geometry().getIndex())||void 0===e?void 0:e.array;if(i){const e={};for(let n of t)e[n.index()]=n;const n=[],s=i.length;let r,o,a;for(let t=0;t<s;t+=3)r=e[i[t+0]],o=e[i[t+1]],a=e[i[t+2]],r&&o&&a&&(n.push(r),n.push(o),n.push(a));return n}}return[]}_indices_from_points(t,e){const n=e.index;if(null!=n){const e=n.array,i=[];let s,r,o,a,l,c;for(let n=0;n<e.length;n+=3)s=e[n+0],r=e[n+1],o=e[n+2],a=t[s],l=t[r],c=t[o],null!=a&&null!=l&&null!=c&&(i.push(a),i.push(l),i.push(c));return i}}},fr._points_builder=new class extends lr{_filter_points(t){return t}_indices_from_points(t,e){const n=e.index;if(null!=n){const e=n.array,i=[];let s,r;for(let n=0;n<e.length;n++)s=e[n],r=t[s],null!=r&&i.push(r);return i}}},fr._lines_segment_builder=new class extends lr{_filter_points(t){var e;const n=t[0];if(n){const i=null===(e=n.geometry().getIndex())||void 0===e?void 0:e.array;if(i){const e={};for(let n of t)e[n.index()]=n;const n=[],s=i.length;let r,o;for(let t=0;t<s;t+=2)r=e[i[t+0]],o=e[i[t+1]],r&&o&&(n.push(r),n.push(o));return n}}return[]}_indices_from_points(t,e){const n=e.index;if(null!=n){const e=n.array,i=[];let s,r,o,a;for(let n=0;n<e.length;n+=2)s=e[n],r=e[n+1],o=t[s],a=t[r],null!=o&&null!=a&&(i.push(o),i.push(a));return i}}},function(t){t.customDistanceMaterial=\\\\\\\"customDistanceMaterial\\\\\\\",t.customDepthMaterial=\\\\\\\"customDepthMaterial\\\\\\\",t.customDepthDOFMaterial=\\\\\\\"customDepthDOFMaterial\\\\\\\"}(gr||(gr={}));const vr=(t,e,n,i,s,r)=>{};class yr{static node(t,e){return t.node(e.name)}static clone(t){const e=t.clone(),n=t.uniforms;return n&&(e.uniforms=I.clone(n)),e}static add_user_data_render_hook(t,e){t.userData.POLY_render_hook=e}static apply_render_hook(t,e){if(e.userData){const n=e.userData.POLY_render_hook;if(n)return void(t.onBeforeRender=(e,i,s,r,o,a)=>{n(e,i,s,r,o,a,t)})}t.onBeforeRender=vr}static applyCustomMaterials(t,e){const n=e;if(n.customMaterials)for(let e of Object.keys(n.customMaterials)){const i=e,s=n.customMaterials[i];s&&(t[i]=s,s.needsUpdate=!0)}}static assign_custom_uniforms(t,e,n){const i=t;if(i.customMaterials)for(let t of Object.keys(i.customMaterials)){const s=t,r=i.customMaterials[s];r&&(r.uniforms[e].value=n)}}static init_custom_material_uniforms(t,e,n){const i=t;if(i.customMaterials)for(let t of Object.keys(i.customMaterials)){const s=t,r=i.customMaterials[s];r&&(r.uniforms[e]=r.uniforms[e]||n)}}}const xr=\\\\\\\"name\\\\\\\";class br extends Ys{constructor(t,e){super(e),this._object=t,null==this._object.userData.attributes&&(this._object.userData.attributes={})}object(){return this._object}geometry(){return this._object.geometry}coreGeometry(){const t=this.geometry();return t?new fr(t):null}points(){var t;return(null===(t=this.coreGeometry())||void 0===t?void 0:t.points())||[]}pointsFromGroup(t){if(t){const e=ss.indices(t);if(e){const t=this.points();return e.map((e=>t[e]))}return[]}return this.points()}static isInGroup(t,e){const n=t.trim();if(0==n.length)return!0;const i=n.split(\\\\\\\"=\\\\\\\"),s=i[0];if(\\\\\\\"@\\\\\\\"==s[0]){const t=s.substr(1);return i[1]==this.attribValue(e,t)}return!1}computeVertexNormals(){var t;null===(t=this.coreGeometry())||void 0===t||t.computeVertexNormals()}static _convert_array_to_vector(t){switch(t.length){case 1:return t[0];case 2:return new d.a(t[0],t[1]);case 3:return new p.a(t[0],t[1],t[2]);case 4:return new _.a(t[0],t[1],t[2],t[3])}}static addAttribute(t,e,n){if(m.isArray(n)){if(!this._convert_array_to_vector(n)){const t=\\\\\\\"attribute_value invalid\\\\\\\";throw console.error(t,n),new Error(t)}}const i=n,s=t.userData;s.attributes=s.attributes||{},s.attributes[e]=i}addAttribute(t,e){br.addAttribute(this._object,t,e)}addNumericAttrib(t,e){this.addAttribute(t,e)}setAttribValue(t,e){this.addAttribute(t,e)}addNumericVertexAttrib(t,e,n){var i;null==n&&(n=Xs.default_value(e)),null===(i=this.coreGeometry())||void 0===i||i.addNumericAttrib(t,e,n)}attributeNames(){return Object.keys(this._object.userData.attributes)}attribNames(){return this.attributeNames()}hasAttrib(t){return this.attributeNames().includes(t)}renameAttrib(t,e){const n=this.attribValue(t);null!=n?(this.addAttribute(e,n),this.deleteAttribute(t)):console.warn(`attribute ${t} not found`)}deleteAttribute(t){delete this._object.userData.attributes[t]}static attribValue(t,e,n=0,i){if(\\\\\\\"ptnum\\\\\\\"===e)return n;if(t.userData&&t.userData.attributes){const n=t.userData.attributes[e];if(null==n){if(e==xr)return t.name}else if(m.isArray(n)&&i)return i.fromArray(n),i;return n}return e==xr?t.name:void 0}static stringAttribValue(t,e,n=0){const i=this.attribValue(t,e,n);if(null!=i)return m.isString(i)?i:`${i}`}attribValue(t,e){return br.attribValue(this._object,t,this._index,e)}stringAttribValue(t){return br.stringAttribValue(this._object,t,this._index)}name(){return this.attribValue(xr)}humanType(){return js.CONSTRUCTOR_NAMES_BY_CONSTRUCTOR_NAME[this._object.constructor.name]}attribTypes(){const t={};for(let e of this.attribNames()){const n=this.attribType(e);null!=n&&(t[e]=n)}return t}attribType(t){const e=this.attribValue(t);return m.isString(e)?zs.STRING:zs.NUMERIC}attribSizes(){const t={};for(let e of this.attribNames()){const n=this.attribSize(e);null!=n&&(t[e]=n)}return t}attribSize(t){const e=this.attribValue(t);return null==e?null:Xs.attribSizeFromValue(e)}clone(){return br.clone(this._object)}static clone(t){const e=t.clone();var n=new Map,i=new Map;return br.parallelTraverse(t,e,(function(t,e){n.set(e,t),i.set(t,e)})),e.traverse((function(e){const s=n.get(e),r=e;if(r.geometry){const t=s.geometry;r.geometry=fr.clone(t);const e=r.geometry;e.userData&&(e.userData=b.cloneDeep(t.userData))}if(r.material){r.material=s.material,yr.applyCustomMaterials(e,r.material);const t=r.material;null==t.color&&(t.color=new D.a(1,1,1))}t.userData&&(e.userData=b.cloneDeep(s.userData));const o=s;o.animations&&(e.animations=o.animations.map((t=>t.clone())));const a=e;if(a.isSkinnedMesh){var l=a,c=s,h=c.skeleton.bones;l.skeleton=c.skeleton.clone(),l.bindMatrix.copy(c.bindMatrix);const t=h.map((function(t){return i.get(t)}));l.skeleton.bones=t,l.bind(l.skeleton,l.bindMatrix)}})),e}static parallelTraverse(t,e,n){n(t,e);for(var i=0;i<t.children.length;i++)this.parallelTraverse(t.children[i],e.children[i],n)}}const wr={[ts.ANIM]:class extends fs{set_content(t){super.set_content(t)}setTimelineBuilder(t){return this.set_content(t)}timeline_builder(){return this.content()}coreContentCloned(){if(this._content)return this._content.clone()}},[ts.COP]:class extends fs{set_content(t){super.set_content(t)}texture(){return this._content}coreContent(){return this._content}coreContentCloned(){var t;const e=null===(t=this._content)||void 0===t?void 0:t.clone();return e&&(e.needsUpdate=!0),e}object(){return this.texture()}infos(){if(null!=this._content)return[this._content]}resolution(){if(this._content){const t=this._content.image;if(t){if(t instanceof HTMLImageElement||t instanceof Image||t instanceof ImageData||t instanceof HTMLCanvasElement)return[t.width,t.height];if(t.data&&null!=t.width&&null!=t.height)return[t.width,t.height];const e=t;return[e.videoWidth,e.videoHeight]}}return[-1,-1]}},[ts.EVENT]:class extends fs{set_content(t){super.set_content(t)}},[ts.GL]:class extends fs{object(){return this._content}},[ts.JS]:class extends fs{object(){return this._content}},[ts.MANAGER]:class extends fs{set_content(t){super.set_content(t)}},[ts.MAT]:class extends fs{set_content(t){super.set_content(t)}set_material(t){null!=this._content&&this._content.dispose(),this.set_content(t)}has_material(){return this.has_content()}material(){return this.content()}},[ts.OBJ]:class extends fs{set_content(t){super.set_content(t)}set_object(t){return this.set_content(t)}has_object(){return this.has_content()}object(){return this.content()}},[ts.POST]:class extends fs{set_content(t){super.set_content(t)}render_pass(){return this._content}object(t={}){return this.render_pass()}},[ts.ROP]:class extends fs{set_content(t){super.set_content(t)}renderer(){return this._content}},[ts.SOP]:class extends fs{coreContentCloned(){if(this._content)return this._content.clone()}set_content(t){super.set_content(t)}firstObject(){if(this._content)return this._content.objects()[0]}firstCoreObject(){const t=this.firstObject();if(t)return new br(t,0)}firstGeometry(){const t=this.firstObject();return t?t.geometry:null}objectsCount(){return this._content?this._content.objects().length:0}objectsVisibleCount(){let t=0;if(this._content){const e=this._content.objects();for(let n of e)n.visible&&t++}return t}objectsCountByType(){const t={},e=this._content;if(this._content&&e)for(let n of e.coreObjects()){const e=n.humanType();null==t[e]&&(t[e]=0),t[e]+=1}return t}objectsNamesByType(){const t={},e=this._content;if(this._content&&e)for(let n of e.coreObjects()){const e=n.humanType();t[e]=t[e]||[],t[e].push(n.name())}return t}pointAttributeNames(){let t=[];const e=this.firstGeometry();return e&&(t=Object.keys(e.attributes)),t}pointAttributeSizesByName(){let t={};const e=this.firstGeometry();return e&&Object.keys(e.attributes).forEach((n=>{const i=e.attributes[n];t[n]=i.itemSize})),t}objectAttributeSizesByName(){let t={};const e=this.firstCoreObject();if(e){const n=e.attribNames();for(let i of n){const n=e.attribSize(i);null!=n&&(t[i]=n)}}return t}pointAttributeTypesByName(){let t={};const e=this.firstGeometry();if(e){const n=new fr(e);Object.keys(e.attributes).forEach((e=>{t[e]=n.attribType(e)}))}return t}objectAttributeTypesByName(){let t={};const e=this.firstCoreObject();if(e)for(let n of e.attribNames())t[n]=e.attribType(n);return t}objectAttributeNames(){let t=[];const e=this.firstObject();return e&&(t=Object.keys(e.userData.attributes||{})),t}pointsCount(){return this._content?this._content.pointsCount():0}totalPointsCount(){return this._content?this._content.totalPointsCount():0}objectsData(){return this._content?this._content.objectsData():[]}boundingBox(t=!1){return this._content.boundingBox(t)}center(){return this._content.center()}size(){return this._content.size()}}};class Tr{constructor(t){this.node=t,this._callbacks=[],this._callbacks_tmp=[];const e=wr[t.context()];this._container=new e(this.node)}container(){return this._container}async compute(){var t,e;if(null===(e=null===(t=this.node.flags)||void 0===t?void 0:t.bypass)||void 0===e?void 0:e.active()){const t=await this.requestInputContainer(0)||this._container;return this.node.cookController.endCook(),t}return this.node.isDirty()?new Promise(((t,e)=>{this._callbacks.push(t),this.node.cookController.cookMain()})):this._container}async requestInputContainer(t){const e=this.node.io.inputs.input(t);return e?await e.compute():(this.node.states.error.set(`input ${t} required`),this.notifyRequesters(),null)}notifyRequesters(t){let e;for(this._callbacks_tmp=this._callbacks.slice(),this._callbacks.splice(0,this._callbacks.length),t||(t=this.node.containerController.container());e=this._callbacks_tmp.pop();)e(t);this.node.scene().cookController.removeNode(this.node)}}const Ar=li.performance.performanceManager();class Mr{constructor(t){this.cookController=t,this._inputs_start=0,this._params_start=0,this._cook_start=0,this._cooksCount=0,this._data={inputsTime:0,paramsTime:0,cookTime:0}}cooksCount(){return this._cooksCount}data2(){return this._data}active(){return this.cookController.performanceRecordStarted()}recordInputsStart(){this.active()&&(this._inputs_start=Ar.now())}recordInputsEnd(){this.active()&&(this._data.inputsTime=Ar.now()-this._inputs_start)}recordParamsStart(){this.active()&&(this._params_start=Ar.now())}recordParamsEnd(){this.active()&&(this._data.paramsTime=Ar.now()-this._params_start)}recordCookStart(){this.active()&&(this._cook_start=Ar.now())}recordCookEnd(){this.active()&&(this._data.cookTime=Ar.now()-this._cook_start,this._cooksCount+=1)}}class Er{constructor(t){this.node=t,this._cooking=!1,this._performanceController=new Mr(this),this._inputs_evaluation_required=!0,this._core_performance=this.node.scene().performance}performanceRecordStarted(){return this._core_performance.started()}disallowInputsEvaluation(){this._inputs_evaluation_required=!1}isCooking(){return!0===this._cooking}_start_cook_if_no_errors(t){if(this.node.states.error.active())this.endCook();else try{this._performanceController.recordCookStart(),this.node.cook(t)}catch(t){this.node.states.error.set(`node internal error: '${t}'.`),li.warn(t),this.endCook()}}async cookMain(){if(this.isCooking())return;let t;this._initCookingState(),this.node.states.error.clear(),this.node.scene().cookController.addNode(this.node),t=this._inputs_evaluation_required?await this._evaluateInputs():[],this.node.params.paramsEvalRequired()&&await this._evaluateParams(),this._start_cook_if_no_errors(t)}async cookMainWithoutInputs(){this.node.scene().cookController.addNode(this.node),this.isCooking()?li.warn(\\\\\\\"cook_main_without_inputs already cooking\\\\\\\",this.node.path()):(this._initCookingState(),this.node.states.error.clear(),this.node.params.paramsEvalRequired()&&await this._evaluateParams(),this._start_cook_if_no_errors([]))}endCook(t){this._finalizeCookPerformance();const e=this.node.dirtyController.dirtyTimestamp();null==e||e===this._cooking_dirty_timestamp?(this.node.removeDirtyState(),this._terminateCookProcess()):(li.log(\\\\\\\"COOK AGAIN\\\\\\\",e,this._cooking_dirty_timestamp,this.node.path()),this._cooking=!1,this.cookMain())}_initCookingState(){this._cooking=!0,this._cooking_dirty_timestamp=this.node.dirtyController.dirtyTimestamp()}_terminateCookProcess(){this.isCooking()&&(this._cooking=!1,this.node.containerController.notifyRequesters(),this._run_on_cook_complete_hooks())}async _evaluateInputs(){this._performanceController.recordInputsStart();let t=[];const e=this.node.io.inputs;this._inputs_evaluation_required&&(t=e.is_any_input_dirty()?await e.eval_required_inputs():await e.containers_without_evaluation());const n=e.inputs(),i=[];let s;for(let r=0;r<n.length;r++)s=t[r],s&&(e.cloneRequired(r)?i[r]=s.coreContentCloned():i[r]=s.coreContent());return this._performanceController.recordInputsEnd(),i}async _evaluateParams(){this._performanceController.recordParamsStart(),await this.node.params.evalAll(),this._performanceController.recordParamsEnd()}cooksCount(){return this._performanceController.cooksCount()}cookTime(){return this._performanceController.data2().cookTime}_finalizeCookPerformance(){this._core_performance.started()&&(this._performanceController.recordCookEnd(),this._core_performance.record_node_cook_data(this.node,this._performanceController.data2()))}registerOnCookEnd(t,e){this._on_cook_complete_hook_names=this._on_cook_complete_hook_names||[],this._on_cook_complete_hooks=this._on_cook_complete_hooks||[],this._on_cook_complete_hook_names.push(t),this._on_cook_complete_hooks.push(e)}deregisterOnCookEnd(t){var e;if(!this._on_cook_complete_hook_names||!this._on_cook_complete_hooks)return;const n=null===(e=this._on_cook_complete_hook_names)||void 0===e?void 0:e.indexOf(t);this._on_cook_complete_hook_names.splice(n,1),this._on_cook_complete_hooks.splice(n,1)}_run_on_cook_complete_hooks(){if(this._on_cook_complete_hooks)for(let t of this._on_cook_complete_hooks)t()}onCookEndCallbackNames(){return this._on_cook_complete_hook_names}}class Sr{constructor(t){this.node=t}toJSON(t=!1){var e,n,i,s,r,o;const a={name:this.node.name(),type:this.node.type(),graph_node_id:this.node.graphNodeId(),is_dirty:this.node.isDirty(),ui_data_json:this.node.uiData.toJSON(),error_message:this.node.states.error.message(),children:this.childrenIds(),maxInputsCount:this.maxInputsCount(),inputs:this.inputIds(),input_connection_output_indices:this.inputConnectionOutputIndices(),named_input_connection_points:this.namedInputConnectionPoints(),named_output_connection_points:this.namedOutputConnectionPoints(),param_ids:this.to_json_params(t),override_cloned_state_allowed:this.node.io.inputs.overrideClonedStateAllowed(),inputs_clone_required_states:this.node.io.inputs.cloneRequiredStates(),flags:{display:null===(n=null===(e=this.node.flags)||void 0===e?void 0:e.display)||void 0===n?void 0:n.active(),bypass:null===(s=null===(i=this.node.flags)||void 0===i?void 0:i.bypass)||void 0===s?void 0:s.active(),optimize:null===(o=null===(r=this.node.flags)||void 0===r?void 0:r.optimize)||void 0===o?void 0:o.active()},selection:void 0};return this.node.childrenAllowed()&&this.node.childrenController&&(a.selection=this.node.childrenController.selection.toJSON()),a}childrenIds(){return this.node.children().map((t=>t.graphNodeId()))}maxInputsCount(){return this.node.io.inputs.maxInputsCount()}inputIds(){return this.node.io.inputs.inputs().map((t=>null!=t?t.graphNodeId():void 0))}inputConnectionOutputIndices(){var t;return null===(t=this.node.io.connections.inputConnections())||void 0===t?void 0:t.map((t=>null!=t?t.output_index:void 0))}namedInputConnectionPoints(){return this.node.io.inputs.namedInputConnectionPoints().map((t=>t.toJSON()))}namedOutputConnectionPoints(){return this.node.io.outputs.namedOutputConnectionPoints().map((t=>t.toJSON()))}to_json_params_from_names(t,e=!1){return t.map((t=>this.node.params.get(t).graphNodeId()))}to_json_params(t=!1){return this.to_json_params_from_names(this.node.params.names,t)}}var Cr,Nr;!function(t){t.BOOLEAN=\\\\\\\"boolean\\\\\\\",t.BUTTON=\\\\\\\"button\\\\\\\",t.COLOR=\\\\\\\"color\\\\\\\",t.FLOAT=\\\\\\\"float\\\\\\\",t.FOLDER=\\\\\\\"folder\\\\\\\",t.INTEGER=\\\\\\\"integer\\\\\\\",t.OPERATOR_PATH=\\\\\\\"operator_path\\\\\\\",t.PARAM_PATH=\\\\\\\"param_path\\\\\\\",t.NODE_PATH=\\\\\\\"node_path\\\\\\\",t.RAMP=\\\\\\\"ramp\\\\\\\",t.STRING=\\\\\\\"string\\\\\\\",t.VECTOR2=\\\\\\\"vector2\\\\\\\",t.VECTOR3=\\\\\\\"vector3\\\\\\\",t.VECTOR4=\\\\\\\"vector4\\\\\\\"}(Cr||(Cr={})),function(t){t.VISIBLE_UPDATED=\\\\\\\"param_visible_updated\\\\\\\",t.RAW_INPUT_UPDATED=\\\\\\\"raw_input_updated\\\\\\\",t.VALUE_UPDATED=\\\\\\\"param_value_updated\\\\\\\",t.EXPRESSION_UPDATED=\\\\\\\"param_expression_update\\\\\\\",t.ERROR_UPDATED=\\\\\\\"param_error_updated\\\\\\\",t.DELETED=\\\\\\\"param_deleted\\\\\\\"}(Nr||(Nr={}));const Lr=\\\\\\\"dependentOnFoundNode\\\\\\\",Or=\\\\\\\"visibleIf\\\\\\\";var Pr,Rr;!function(t){t.TYPESCRIPT=\\\\\\\"typescript\\\\\\\"}(Pr||(Pr={})),function(t){t.AUDIO=\\\\\\\"audio\\\\\\\",t.TEXTURE_IMAGE=\\\\\\\"texture_image\\\\\\\",t.TEXTURE_VIDEO=\\\\\\\"texture_video\\\\\\\",t.GEOMETRY=\\\\\\\"geometry\\\\\\\",t.FONT=\\\\\\\"font\\\\\\\",t.SVG=\\\\\\\"svg\\\\\\\",t.JSON=\\\\\\\"json\\\\\\\"}(Rr||(Rr={}));class Ir{constructor(t){this._param=t,this._programatic_visible_state=!0,this._callbackAllowed=!1,this._updateVisibilityAndRemoveDirtyBound=this.updateVisibilityAndRemoveDirty.bind(this),this._ui_data_dependency_set=!1}dispose(){var t;try{this._options.callback=void 0,this._options.callbackString=void 0}catch(t){}null===(t=this._visibility_graph_node)||void 0===t||t.dispose()}set(t){this._default_options=t,this._options=b.cloneDeep(this._default_options),this.post_set_options()}copy(t){this._default_options=b.cloneDeep(t.default()),this._options=b.cloneDeep(t.current()),this.post_set_options()}setOption(t,e){if(this._options[t]=e,this._param.components)for(let n of this._param.components)n.options.setOption(t,e)}post_set_options(){this._handleComputeOnDirty()}param(){return this._param}node(){return this._param.node}default(){return this._default_options}current(){return this._options}hasOptionsOverridden(){return!b.isEqual(this._options,this._default_options)}overriddenOptions(){const t={},e=Object.keys(this._options);for(let n of e)if(!b.isEqual(this._options[n],this._default_options[n])){const e=b.cloneDeep(this._options[n]);Object.assign(t,{[n]:e})}return t}overriddenOptionNames(){return Object.keys(this.overriddenOptions())}computeOnDirty(){return this._options.computeOnDirty||!1}_handleComputeOnDirty(){this.computeOnDirty()&&(this._computeOnDirty_callback_added||(this.param().addPostDirtyHook(\\\\\\\"computeOnDirty\\\\\\\",this._computeParam.bind(this)),this._computeOnDirty_callback_added=!0))}async _computeParam(){await this.param().compute()}hasCallback(){return null!=this._options.callback||null!=this._options.callbackString}allowCallback(){this._callbackAllowed=!0}executeCallback(){if(!this._callbackAllowed)return;if(!this.node())return;const t=this.getCallback();if(!t)return;if(!this.node().scene().loadingController.loaded())return;const e=this.param().parent_param;e?e.options.executeCallback():t(this.node(),this.param())}getCallback(){if(this.hasCallback())return this._options.callback=this._options.callback||this.createCallbackFromString()}createCallbackFromString(){const t=this._options.callbackString;if(t){const e=new Function(\\\\\\\"node\\\\\\\",\\\\\\\"scene\\\\\\\",\\\\\\\"window\\\\\\\",\\\\\\\"location\\\\\\\",t);return()=>{e(this.node(),this.node().scene(),null,null)}}}colorConversion(){return this._options.conversion}makesNodeDirtyWhenDirty(){let t;if(null!=this.param().parent_param)return!1;let e=!0;return null!=(t=this._options.cook)&&(e=t),e}fileBrowseOption(){return this._options.fileBrowse}fileBrowseAllowed(){return null!=this.fileBrowseOption()}fileBrowseType(){const t=this.fileBrowseOption();return t?t.type:null}separatorBefore(){return this._options.separatorBefore}separatorAfter(){return this._options.separatorAfter}isExpressionForEntities(){const t=this._options.expression;return t&&t.forEntities||!1}level(){return this._options.level||0}hasMenu(){return null!=this.menuOptions()||null!=this.menuStringOptions()}menuOptions(){return this._options.menu}menuStringOptions(){return this._options.menuString}menuEntries(){const t=this.menuOptions()||this.menuStringOptions();return t?t.entries:[]}isMultiline(){return!0===this._options.multiline}language(){return this._options.language}isCode(){return null!=this.language()}nodeSelectionOptions(){return this._options.nodeSelection}nodeSelectionContext(){const t=this.nodeSelectionOptions();if(t)return t.context}nodeSelectionTypes(){const t=this.nodeSelectionOptions();if(t)return t.types}dependentOnFoundNode(){return!(Lr in this._options)||this._options.dependentOnFoundNode}isSelectingParam(){return null!=this.paramSelectionOptions()}paramSelectionOptions(){return this._options.paramSelection}paramSelectionType(){const t=this.paramSelectionOptions();if(t){const e=t;if(!m.isBoolean(e))return e}}range(){return this._options.range||[0,1]}step(){return this._options.step}rangeLocked(){return this._options.rangeLocked||[!1,!1]}ensureInRange(t){const e=this.range();return t>=e[0]&&t<=e[1]?t:t<e[0]?!0===this.rangeLocked()[0]?e[0]:t:!0===this.rangeLocked()[1]?e[1]:t}isSpare(){return this._options.spare||!1}textureOptions(){return this._options.texture}textureAsEnv(){const t=this.textureOptions();return null!=t&&!0===t.env}isHidden(){return!0===this._options.hidden||!1===this._programatic_visible_state}isVisible(){return!this.isHidden()}setVisibleState(t){this._options.hidden=!t,this.param().emit(Nr.VISIBLE_UPDATED)}label(){return this._options.label}isLabelHidden(){const t=this.param().type();return t===Cr.BUTTON||t===Cr.BOOLEAN&&this.isFieldHidden()}isFieldHidden(){return!1===this._options.field}uiDataDependsOnOtherParams(){return Or in this._options}visibilityPredecessors(){const t=this._options.visibleIf;if(!t)return[];let e=[];e=m.isArray(t)?f.uniq(t.map((t=>Object.keys(t))).flat()):Object.keys(t);const n=this.param().node;return f.compact(e.map((t=>{const e=n.params.get(t);if(e)return e;console.error(`param ${t} not found as visibility condition for ${this.param().name()} in node ${this.param().node.type()}`)})))}setUiDataDependency(){if(this._ui_data_dependency_set)return;this._ui_data_dependency_set=!0;const t=this.visibilityPredecessors();if(t.length>0){this._visibility_graph_node=new Mi(this.param().scene(),\\\\\\\"param_visibility\\\\\\\");for(let e of t)this._visibility_graph_node.addGraphInput(e);this._visibility_graph_node.addPostDirtyHook(\\\\\\\"_update_visibility_and_remove_dirty\\\\\\\",this._updateVisibilityAndRemoveDirtyBound)}}updateVisibilityAndRemoveDirty(){this.updateVisibility(),this.param().removeDirtyState()}async updateVisibility(){const t=this._options.visibleIf;if(t){const e=this.visibilityPredecessors(),n=e.map((t=>{if(t.isDirty())return t.compute()}));if(this._programatic_visible_state=!1,await Promise.all(n),m.isArray(t))for(let n of t){e.filter((t=>t.value==n[t.name()])).length==e.length&&(this._programatic_visible_state=!0)}else{const n=e.filter((e=>e.value==t[e.name()]));this._programatic_visible_state=n.length==e.length}this.param().emit(Nr.VISIBLE_UPDATED)}}}class Fr{constructor(t){this.param=t,this._blocked_emit=!1,this._blocked_parent_emit=!1,this._count_by_event_name={}}emitAllowed(){return!0!==this._blocked_emit&&(!this.param.scene().loadingController.isLoading()&&this.param.scene().dispatchController.emitAllowed())}blockEmit(){if(this._blocked_emit=!0,this.param.isMultiple()&&this.param.components)for(let t of this.param.components)t.emitController.blockEmit();return!0}unblockEmit(){if(this._blocked_emit=!1,this.param.isMultiple()&&this.param.components)for(let t of this.param.components)t.emitController.unblockEmit();return!0}blockParentEmit(){return this._blocked_parent_emit=!0,!0}unblockParentEmit(){return this._blocked_parent_emit=!1,!0}incrementCount(t){this._count_by_event_name[t]=this._count_by_event_name[t]||0,this._count_by_event_name[t]+=1}eventsCount(t){return this._count_by_event_name[t]||0}emit(t){this.emitAllowed()&&(this.param.emit(t),null!=this.param.parent_param&&!0!==this._blocked_parent_emit&&this.param.parent_param.emit(t))}}class Dr{constructor(t){this.param=t}toJSON(){const t={name:this.param.name(),type:this.param.type(),raw_input:this.rawInput(),value:this.value(),value_pre_conversion:this.value_pre_conversion(),expression:this.expression(),graph_node_id:this.param.graphNodeId(),error_message:this.error_message(),is_visible:this.is_visible(),components:void 0};return this.param.isMultiple()&&this.param.components&&(t.components=this.param.components.map((t=>t.graphNodeId()))),t}rawInput(){return this.param.rawInputSerialized()}value(){return this.param.valueSerialized()}value_pre_conversion(){return this.param.valuePreConversionSerialized()}expression(){var t;return this.param.hasExpression()?null===(t=this.param.expressionController)||void 0===t?void 0:t.expression():void 0}error_message(){return this.param.states.error.message()}is_visible(){return this.param.options.isVisible()}}class Br{constructor(t){this.param=t}active(){const t=this.param.scene().timeController.graphNode.graphNodeId();return this.param.graphPredecessorIds().includes(t)}}class zr{constructor(t){this.param=t}set(t){this._message!=t&&(this._message=t,this._message&&li.warn(this.param.path(),this._message),this.param.emitController.emit(Nr.ERROR_UPDATED))}message(){return this._message}clear(){this.set(void 0)}active(){return null!=this._message}}class kr{constructor(t){this.param=t,this.timeDependent=new Br(this.param),this.error=new zr(this.param)}}class Ur extends Mi{constructor(t,e,n){var i;super(t.scene(),\\\\\\\"MethodDependency\\\\\\\"),this.param=t,this.path_argument=e,this.decomposed_path=n,this._update_from_name_change_bound=this._update_from_name_change.bind(this),null===(i=t.expressionController)||void 0===i||i.registerMethodDependency(this),this.addPostDirtyHook(\\\\\\\"_update_from_name_change\\\\\\\",this._update_from_name_change_bound)}_update_from_name_change(t){if(t&&this.decomposed_path){const e=t;this.decomposed_path.update_from_name_change(e);const n=this.decomposed_path.to_path(),i=this.jsep_node;i&&(i.value=`${i.value}`.replace(`${this.path_argument}`,n),i.raw=i.raw.replace(`${this.path_argument}`,n)),this.param.expressionController&&this.param.expressionController.updateFromMethodDependencyNameChange()}}reset(){this.graphDisconnectPredecessors()}listen_for_name_changes(){if(this.jsep_node&&this.decomposed_path)for(let t of this.decomposed_path.named_nodes())if(t){const e=t;e.nameController&&this.addGraphInput(e.nameController.graph_node)}}set_jsep_node(t){this.jsep_node=t}set_resolved_graph_node(t){this.resolved_graph_node=t}set_unresolved_path(t){this.unresolved_path=t}static create(t,e,n,i){const s=m.isNumber(e),r=new Ur(t,e,i);if(n)r.set_resolved_graph_node(n);else if(!s){const t=e;r.set_unresolved_path(t)}return r}}const Gr=[];class Vr extends Mi{constructor(t,e){super(t,\\\\\\\"BaseParam\\\\\\\"),this._options=new Ir(this),this._emit_controller=new Fr(this),this._is_computing=!1,this._node=e,this.initialize_param()}get options(){return this._options=this._options||new Ir(this)}get emitController(){return this._emit_controller=this._emit_controller||new Fr(this)}get expressionController(){return this._expression_controller}get serializer(){return this._serializer=this._serializer||new Dr(this)}get states(){return this._states=this._states||new kr(this)}dispose(){var t,e;const n=this.graphPredecessors();for(let t of n)t instanceof Ur&&t.dispose();this.scene().missingExpressionReferencesController.deregisterParam(this),null===(t=this._expression_controller)||void 0===t||t.dispose(),super.dispose(),null===(e=this._options)||void 0===e||e.dispose()}initialize_param(){}static type(){return Cr.FLOAT}type(){return this.constructor.type()}isNumeric(){return!1}setName(t){super.setName(t)}get value(){return this._value}copy_value(t){t.type()==this.type()?this._copy_value(t):console.warn(`cannot copy value from ${t.type()} to ${this.type()}`)}_copy_value(t){throw\\\\\\\"abstract method param._copy_value\\\\\\\"}valuePreConversionSerialized(){}convert(t){return null}static are_raw_input_equal(t,e){return!1}is_raw_input_equal(t){return this.constructor.are_raw_input_equal(this._raw_input,t)}static are_values_equal(t,e){return!1}is_value_equal(t){return this.constructor.are_values_equal(this.value,t)}_clone_raw_input(t){return t}set(t){this._raw_input=this._clone_raw_input(this._prefilter_invalid_raw_input(t)),this.emitController.emit(Nr.RAW_INPUT_UPDATED),this.processRawInput()}_prefilter_invalid_raw_input(t){return t}defaultValue(){return this._default_value}isDefault(){return this._raw_input==this._default_value}rawInput(){return this._raw_input}processRawInput(){}async compute(){if(this.scene().loadingController.isLoading()&&console.warn(`param attempt to compute ${this.path()}`),this.isDirty()){if(this._is_computing)return new Promise(((t,e)=>{this._compute_resolves=this._compute_resolves||[],this._compute_resolves.push(t)}));if(this._is_computing=!0,await this.processComputation(),this._is_computing=!1,this._compute_resolves){let t;for(;t=this._compute_resolves.pop();)t()}}}async processComputation(){}setInitValue(t){this._default_value=this._clone_raw_input(this._prefilter_invalid_raw_input(t))}_setupNodeDependencies(t){var e,n;if(t?(this.options.allowCallback(),this.parent_param||(this.options.makesNodeDirtyWhenDirty()?null===(n=t.params.params_node)||void 0===n||n.addGraphInput(this,!1):this.dirtyController.addPostDirtyHook(\\\\\\\"run callback\\\\\\\",(async()=>{await this.compute(),this.options.executeCallback()})))):this._node&&(null===(e=this._node.params.params_node)||void 0===e||e.removeGraphInput(this)),this.components)for(let e of this.components)e._setupNodeDependencies(t)}get node(){return this._node}parent(){return this.node}set_parent_param(t){t.addGraphInput(this,!1),this._parent_param=t}get parent_param(){return this._parent_param}has_parent_param(){return null!=this._parent_param}path(){var t;return(null===(t=this.node)||void 0===t?void 0:t.path())+\\\\\\\"/\\\\\\\"+this.name()}pathRelativeTo(t){const e=bi.relativePath(t,this.node);return e.length>0?`${e}${bi.SEPARATOR}${this.name()}`:this.name()}emit(t){this.emitController.emitAllowed()&&(this.emitController.incrementCount(t),this.scene().dispatchController.dispatch(this,t))}get components(){return this._components}componentNames(){return Gr}isMultiple(){return this.componentNames().length>0}initComponents(){}hasExpression(){return null!=this.expressionController&&this.expressionController.active()}toJSON(){return this.serializer.toJSON()}}var Hr=n(94),jr=n.n(Hr);jr.a.addUnaryOp(\\\\\\\"@\\\\\\\");jr.a.addBinaryOp(\\\\\\\"**\\\\\\\",10);class Wr{constructor(){}parse_expression(t){try{this.reset(),this.node=jr()(t)}catch(e){const n=`could not parse the expression '${t}' (error: ${e})`;this.error_message=n}}parse_expression_for_string_param(t){try{this.reset();const e=Wr.string_value_elements(t),n=[];for(let t=0;t<e.length;t++){const i=e[t];let s;if(t%2==1)s=jr()(i);else{const t=i.replace(/\\\\'/g,\\\\\\\"\\\\\\\\'\\\\\\\");s={type:\\\\\\\"Literal\\\\\\\",value:`'${t}'`,raw:`'${t}'`}}n.push(s)}this.node={type:\\\\\\\"CallExpression\\\\\\\",arguments:n,callee:{type:\\\\\\\"Identifier\\\\\\\",name:\\\\\\\"strConcat\\\\\\\"}}}catch(e){const n=`could not parse the expression '${t}' (error: ${e})`;this.error_message=n}}static string_value_elements(t){return null!=t&&m.isString(t)?t.split(\\\\\\\"`\\\\\\\"):[]}reset(){this.node=void 0,this.error_message=void 0}}class qr{constructor(t){this.param=t,this._set_error_from_error_bound=this._set_error_from_error.bind(this)}clear_error(){this._error_message=void 0}set_error(t){this._error_message=this._error_message||t}_set_error_from_error(t){m.isString(t)?this._error_message=t:this._error_message=t.message}is_errored(){return null!=this._error_message}error_message(){return this._error_message}reset(){this._error_message=void 0}traverse_node(t){const e=`traverse_${t.type}`;if(this[e])return this[e](t);this.set_error(`expression unknown node type: ${t.type}`)}traverse_BinaryExpression(t){return`${this.traverse_node(t.left)} ${t.operator} ${this.traverse_node(t.right)}`}traverse_LogicalExpression(t){return`${this.traverse_node(t.left)} ${t.operator} ${this.traverse_node(t.right)}`}traverse_MemberExpression(t){return`${this.traverse_node(t.object)}.${this.traverse_node(t.property)}`}traverse_ConditionalExpression(t){return`(${this.traverse_node(t.test)}) ? (${this.traverse_node(t.consequent)}) : (${this.traverse_node(t.alternate)})`}traverse_Compound(t){const e=t.body;let n=[];for(let t=0;t<e.length;t++){const i=e[t];\\\\\\\"Identifier\\\\\\\"==i.type?\\\\\\\"$\\\\\\\"==i.name[0]?n.push(\\\\\\\"`${\\\\\\\"+this.traverse_node(i)+\\\\\\\"}`\\\\\\\"):n.push(`'${i.name}'`):n.push(\\\\\\\"`${\\\\\\\"+this.traverse_node(i)+\\\\\\\"}`\\\\\\\")}return n.join(\\\\\\\" + \\\\\\\")}traverse_Literal(t){return`${t.raw}`}}class Xr{constructor(){}reset(){this._attributeNames&&this._attributeNames.clear()}assignAttributesLines(){if(this._attributeNames){const t=[];for(let e of this._attributeNames)t.push(Xr.assignAttributeLine(e));return t.join(\\\\\\\";\\\\n\\\\\\\")}return\\\\\\\"\\\\\\\"}assignArraysLines(){if(this._attributeNames){const t=[];if(this._attributeNames.size>0){const e=\\\\\\\"const coreGeometry = entities[0].coreGeometry();\\\\\\\";t.push(e)}for(let e of this._attributeNames)t.push(Xr.assignItemSizeLine(e)),t.push(Xr.assignArrayLine(e));return t.join(\\\\\\\";\\\\n\\\\\\\")}return\\\\\\\"\\\\\\\"}attributePresenceCheckLine(){if(this._attributeNames){const t=[];for(let e of this._attributeNames){const n=Xr._varAttribute(e);t.push(n)}if(t.length>0)return t.join(\\\\\\\" && \\\\\\\")}return\\\\\\\"true\\\\\\\"}add(t){this._attributeNames=this._attributeNames||new Set,this._attributeNames.add(t)}static assignAttributeLine(t){return`const ${this._varAttribute(t)} = entities[0].geometry().attributes['${t}']`}static assignItemSizeLine(t){const e=this._varAttribute(t);return`const ${this._varAttribSize(t)} = ${e}.itemSize`}static assignArrayLine(t){const e=this._varAttribute(t);return`const ${this._varArray(t)} = ${`coreGeometry.isAttribIndexed('${t}')`} ? ${`entities.map(e=>e.indexedAttribValue('${t}'))`} : ${`${e}.array`}`}static _varAttribute(t){return`attrib_${t}`}static _varAttribSize(t){return`attrib_size_${t}`}static _varArray(t){return`array_${t}`}varAttributeSize(t){return Xr._varAttribSize(t)}varArray(t){return Xr._varArray(t)}}const Yr={math_random:\\\\\\\"random\\\\\\\"},$r=Object.keys(sr),Jr={};[\\\\\\\"abs\\\\\\\",\\\\\\\"acos\\\\\\\",\\\\\\\"acosh\\\\\\\",\\\\\\\"asin\\\\\\\",\\\\\\\"asinh\\\\\\\",\\\\\\\"atan\\\\\\\",\\\\\\\"atan2\\\\\\\",\\\\\\\"atanh\\\\\\\",\\\\\\\"ceil\\\\\\\",\\\\\\\"cos\\\\\\\",\\\\\\\"cosh\\\\\\\",\\\\\\\"exp\\\\\\\",\\\\\\\"expm1\\\\\\\",\\\\\\\"floor\\\\\\\",\\\\\\\"log\\\\\\\",\\\\\\\"log1p\\\\\\\",\\\\\\\"log2\\\\\\\",\\\\\\\"log10\\\\\\\",\\\\\\\"max\\\\\\\",\\\\\\\"min\\\\\\\",\\\\\\\"pow\\\\\\\",\\\\\\\"round\\\\\\\",\\\\\\\"sign\\\\\\\",\\\\\\\"sin\\\\\\\",\\\\\\\"sinh\\\\\\\",\\\\\\\"sqrt\\\\\\\",\\\\\\\"tan\\\\\\\",\\\\\\\"tanh\\\\\\\"].forEach((t=>{Jr[t]=`Math.${t}`})),[\\\\\\\"cbrt\\\\\\\",\\\\\\\"hypot\\\\\\\",\\\\\\\"log10\\\\\\\",\\\\\\\"trunc\\\\\\\"].forEach((t=>{Jr[t]=`Math.${t}`})),Object.keys(Yr).forEach((t=>{const e=Yr[t];Jr[t]=`Math.${e}`})),[\\\\\\\"fit\\\\\\\",\\\\\\\"fit01\\\\\\\",\\\\\\\"fract\\\\\\\",\\\\\\\"deg2rad\\\\\\\",\\\\\\\"rad2deg\\\\\\\",\\\\\\\"rand\\\\\\\",\\\\\\\"clamp\\\\\\\"].forEach((t=>{Jr[t]=`Core.Math.${t}`})),$r.forEach((t=>{Jr[t]=`Core.Math.Easing.${t}`})),[\\\\\\\"precision\\\\\\\"].forEach((t=>{Jr[t]=`Core.String.${t}`}));const Zr={if:class{static if(t){return`(${t[0]}) ? (${t[1]}) : (${t[2]})`}}.if},Kr={};[\\\\\\\"E\\\\\\\",\\\\\\\"LN2\\\\\\\",\\\\\\\"LN10\\\\\\\",\\\\\\\"LOG10E\\\\\\\",\\\\\\\"LOG2E\\\\\\\",\\\\\\\"PI\\\\\\\",\\\\\\\"SQRT1_2\\\\\\\",\\\\\\\"SQRT2\\\\\\\"].forEach((t=>{Kr[t]=`Math.${t}`}));const Qr={x:0,y:1,z:2,w:3,r:0,g:1,b:2};class to extends qr{constructor(t){super(t),this.param=t,this._attribute_requirements_controller=new Xr,this.methods=[],this.method_index=-1,this.method_dependencies=[],this.immutable_dependencies=[]}parse_tree(t){if(this.reset(),null==t.error_message){try{if(this._attribute_requirements_controller=new Xr,t.node){const e=this.traverse_node(t.node);e&&!this.is_errored()&&(this.function_main_string=e)}else console.warn(\\\\\\\"no parsed_tree.node\\\\\\\")}catch(t){console.warn(`error in expression for param ${this.param.path()}`),console.warn(t)}if(this.function_main_string)try{const t=this._functionBody();this.function=new Function(\\\\\\\"Core\\\\\\\",\\\\\\\"param\\\\\\\",\\\\\\\"methods\\\\\\\",\\\\\\\"_set_error_from_error\\\\\\\",`\\\\n\\\\t\\\\t\\\\t\\\\t\\\\ttry {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t${t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t} catch(e) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t_set_error_from_error(e)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treturn null;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}`)}catch(t){console.warn(t),this.set_error(\\\\\\\"cannot generate function\\\\\\\")}else this.set_error(\\\\\\\"cannot generate function body\\\\\\\")}else this.set_error(\\\\\\\"cannot parse expression\\\\\\\")}reset(){super.reset(),this.function_main_string=void 0,this.methods=[],this.method_index=-1,this.function=void 0,this.method_dependencies=[],this.immutable_dependencies=[]}_functionBody(){return this.param.options.isExpressionForEntities()?`\\\\n\\\\t\\\\t\\\\tconst entities = param.expressionController.entities();\\\\n\\\\t\\\\t\\\\tif(entities){\\\\n\\\\t\\\\t\\\\t\\\\treturn new Promise( async (resolve, reject)=>{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tlet entity;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tconst entity_callback = param.expressionController.entity_callback();\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t// assign_attributes_lines\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t${this._attribute_requirements_controller.assignAttributesLines()}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t// check if attributes are present\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif( ${this._attribute_requirements_controller.attributePresenceCheckLine()} ){\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t// assign_arrays_lines\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t${this._attribute_requirements_controller.assignArraysLines()}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfor(let index=0; index < entities.length; index++){\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tentity = entities[index];\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tresult = ${this.function_main_string};\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tentity_callback(entity, result);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tresolve()\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tconst error = new Error('attribute not found')\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t_set_error_from_error(error)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treject(error)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t})\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\treturn []`:`\\\\n\\\\t\\\\t\\\\treturn new Promise( async (resolve, reject)=>{\\\\n\\\\t\\\\t\\\\t\\\\ttry {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tconst value = ${this.function_main_string}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tresolve(value)\\\\n\\\\t\\\\t\\\\t\\\\t} catch(e) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t_set_error_from_error(e)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treject()\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t})\\\\n\\\\t\\\\t\\\\t`}evalAllowed(){return null!=this.function}evalFunction(){if(this.function){this.clear_error();const t={Math:or,String:ss};return this.function(t,this.param,this.methods,this._set_error_from_error_bound)}}traverse_CallExpression(t){const e=t.arguments.map((t=>this.traverse_node(t))),n=t.callee.name;if(n){const i=Zr[n];if(i)return i(e);const s=`${e.join(\\\\\\\", \\\\\\\")}`,r=Jr[n];if(r)return`${r}(${s})`;const o=li.expressionsRegister;if(o.getMethod(n)){const i=t.arguments[0],r=`return ${e[0]}`;let o,a=[];try{o=new Function(r),a=o()}catch{}return this._create_method_and_dependencies(n,a,i),`(await methods[${this.method_index}].processArguments([${s}]))`}{const t=`method not found (${n}), available methods are: ${o.availableMethods().join(\\\\\\\", \\\\\\\")}`;li.warn(t)}}this.set_error(`unknown method: ${n}`)}traverse_BinaryExpression(t){return`(${this.traverse_node(t.left)} ${t.operator} ${this.traverse_node(t.right)})`}traverse_LogicalExpression(t){return`(${this.traverse_node(t.left)} ${t.operator} ${this.traverse_node(t.right)})`}traverse_MemberExpression(t){return`${this.traverse_node(t.object)}.${this.traverse_node(t.property)}`}traverse_UnaryExpression(t){if(\\\\\\\"@\\\\\\\"===t.operator){let e,n,i=t.argument;switch(i.type){case\\\\\\\"Identifier\\\\\\\":e=i.name;break;case\\\\\\\"MemberExpression\\\\\\\":{const t=i,s=t.object,r=t.property;e=s.name,n=r.name;break}}if(e){if(e=Xs.remapName(e),\\\\\\\"ptnum\\\\\\\"==e)return\\\\\\\"((entity != null) ? entity.index() : 0)\\\\\\\";{const t=this._attribute_requirements_controller.varAttributeSize(e),i=this._attribute_requirements_controller.varArray(e);if(this._attribute_requirements_controller.add(e),n){return`${i}[entity.index()*${t}+${Qr[n]}]`}return`${i}[entity.index()*${t}]`}}return console.warn(\\\\\\\"attribute not found\\\\\\\"),\\\\\\\"\\\\\\\"}return`${t.operator}${this.traverse_node(t.argument)}`}traverse_Literal(t){return`${t.raw}`}traverse_Identifier(t){if(\\\\\\\"$\\\\\\\"!=t.name[0])return t.name;{const e=t.name.substr(1),n=Kr[e];if(n)return n;const i=`traverse_Identifier_${e}`;if(this[i])return this[i]();this.set_error(`identifier unknown: ${t.name}`)}}traverse_Identifier_F(){return this.immutable_dependencies.push(this.param.scene().timeController.graphNode),\\\\\\\"param.scene().timeController.frame()\\\\\\\"}traverse_Identifier_T(){return this.immutable_dependencies.push(this.param.scene().timeController.graphNode),\\\\\\\"param.scene().timeController.time()\\\\\\\"}traverse_Identifier_OS(){return`'${this.param.node.name()}'`}traverse_Identifier_CH(){return`'${this.param.name()}'`}traverse_Identifier_CEX(){return this._method_centroid(\\\\\\\"x\\\\\\\")}traverse_Identifier_CEY(){return this._method_centroid(\\\\\\\"y\\\\\\\")}traverse_Identifier_CEZ(){return this._method_centroid(\\\\\\\"z\\\\\\\")}_method_centroid(t){const e=[0,`'${t}'`].join(\\\\\\\", \\\\\\\");return this._create_method_and_dependencies(\\\\\\\"centroid\\\\\\\",0),`(await methods[${this.method_index}].processArguments([${e}]))`}_create_method_and_dependencies(t,e,n){const i=li.expressionsRegister,s=i.getMethod(t);if(!s){const e=`method not found (${t}), available methods are: ${i.availableMethods().join(\\\\\\\", \\\\\\\")}`;return this.set_error(e),void li.warn(e)}const r=new s(this.param);if(this.method_index+=1,this.methods[this.method_index]=r,r.require_dependency()){const t=r.findDependency(e);t?(n&&t.set_jsep_node(n),this.method_dependencies.push(t)):n&&m.isString(e)&&this.param.scene().missingExpressionReferencesController.register(this.param,e)}}}class eo extends qr{constructor(t){super(t),this.param=t}parse_tree(t){if(null==t.error_message&&t.node)try{return this.traverse_node(t.node)}catch(t){this.set_error(\\\\\\\"could not traverse tree\\\\\\\")}else this.set_error(\\\\\\\"cannot parse tree\\\\\\\")}traverse_CallExpression(t){const e=`${t.arguments.map((t=>this.traverse_node(t))).join(\\\\\\\", \\\\\\\")}`;return`${t.callee.name}(${e})`}traverse_UnaryExpression(t){return`${t.operator}${this.traverse_node(t.argument)}`}traverse_Identifier(t){return`${t.name}`}}class no{constructor(t){this.param=t,this.cyclic_graph_detected=!1,this.method_dependencies=[]}set_error(t){this.error_message=this.error_message||t}reset(){this.param.graphDisconnectPredecessors(),this.method_dependencies.forEach((t=>{t.reset()})),this.method_dependencies=[]}update(t){this.cyclic_graph_detected=!1,this.connect_immutable_dependencies(t),this.method_dependencies=t.method_dependencies,this.handle_method_dependencies(),this.listen_for_name_changes()}connect_immutable_dependencies(t){t.immutable_dependencies.forEach((t=>{if(0==this.cyclic_graph_detected&&0==this.param.addGraphInput(t))return this.cyclic_graph_detected=!0,this.set_error(\\\\\\\"cannot create expression, infinite graph detected\\\\\\\"),void this.reset()}))}handle_method_dependencies(){this.method_dependencies.forEach((t=>{0==this.cyclic_graph_detected&&this.handle_method_dependency(t)}))}handle_method_dependency(t){const e=t.resolved_graph_node;if(e&&!this.param.addGraphInput(e))return this.cyclic_graph_detected=!0,this.set_error(\\\\\\\"cannot create expression, infinite graph detected\\\\\\\"),void this.reset()}listen_for_name_changes(){this.method_dependencies.forEach((t=>{t.listen_for_name_changes()}))}}class io{constructor(t){this.param=t,this.parse_completed=!1,this.parse_started=!1,this.parsed_tree=new Wr,this._functionGenerator=new to(this.param),this.dependencies_controller=new no(this.param)}parseExpression(t){if(this.parse_started)throw new Error(`parse in progress for param ${this.param.path()}`);this.parse_started=!0,this.parse_completed=!1,this.parsed_tree=this.parsed_tree||new Wr,this.reset(),this.param.type()==Cr.STRING?this.parsed_tree.parse_expression_for_string_param(t):this.parsed_tree.parse_expression(t),this._functionGenerator.parse_tree(this.parsed_tree),null==this._functionGenerator.error_message()&&(this.dependencies_controller.update(this._functionGenerator),this.dependencies_controller.error_message?this.param.states.error.set(this.dependencies_controller.error_message):(this.parse_completed=!0,this.parse_started=!1))}async computeFunction(){if(!this._computeAllowed())return new Promise(((t,e)=>{t(null)}));try{return await this._functionGenerator.evalFunction()}catch(t){return}}reset(){this.parse_completed=!1,this.parse_started=!1,this.dependencies_controller.reset(),this._functionGenerator.reset()}is_errored(){return this._functionGenerator.is_errored()}error_message(){return this._functionGenerator.error_message()}_computeAllowed(){return this._functionGenerator.evalAllowed()}updateFromMethodDependencyNameChange(){this.expression_string_generator=this.expression_string_generator||new eo(this.param);const t=this.expression_string_generator.parse_tree(this.parsed_tree);t?this.param.set(t):console.warn(\\\\\\\"failed to regenerate expression\\\\\\\")}}class so{constructor(t){this.param=t}dispose(){this.param.scene().expressionsController.deregisterParam(this.param),this._resetMethodDependencies()}_resetMethodDependencies(){var t,e;null===(t=this._method_dependencies_by_graph_node_id)||void 0===t||t.forEach((t=>{t.dispose()})),null===(e=this._method_dependencies_by_graph_node_id)||void 0===e||e.clear()}registerMethodDependency(t){this._method_dependencies_by_graph_node_id=this._method_dependencies_by_graph_node_id||new Map,this._method_dependencies_by_graph_node_id.set(t.graphNodeId(),t)}active(){return null!=this._expression}expression(){return this._expression}is_errored(){return!!this._manager&&this._manager.is_errored()}error_message(){return this._manager?this._manager.error_message():null}requires_entities(){return this.param.options.isExpressionForEntities()}set_expression(t,e=!0){var n;this.param.scene().missingExpressionReferencesController.deregisterParam(this.param),this.param.scene().expressionsController.deregisterParam(this.param),this._expression!=t&&(this._resetMethodDependencies(),this._expression=t,this._expression?(this._manager=this._manager||new io(this.param),this._manager.parseExpression(this._expression)):null===(n=this._manager)||void 0===n||n.reset(),e&&this.param.setDirty())}updateFromMethodDependencyNameChange(){this._manager&&this.active()&&this._manager.updateFromMethodDependencyNameChange()}async computeExpression(){if(this._manager&&this.active()){return await this._manager.computeFunction()}}async computeExpressionForEntities(t,e){var n,i;this.set_entities(t,e),await this.computeExpression(),(null===(n=this._manager)||void 0===n?void 0:n.error_message())&&this.param.node.states.error.set(`expression evalution error: ${null===(i=this._manager)||void 0===i?void 0:i.error_message()}`),this.reset_entities()}computeExpressionForPoints(t,e){return this.computeExpressionForEntities(t,e)}computeExpressionForObjects(t,e){return this.computeExpressionForEntities(t,e)}entities(){return this._entities}entity_callback(){return this._entity_callback}set_entities(t,e){this._entities=t,this._entity_callback=e}reset_entities(){this._entities=void 0,this._entity_callback=void 0}}class ro extends Vr{isNumeric(){return!0}isDefault(){return this._raw_input==this._default_value}_prefilter_invalid_raw_input(t){return m.isArray(t)?t[0]:t}processRawInput(){this.states.error.clear();const t=this.convert(this._raw_input);null!=t?(this._expression_controller&&(this._expression_controller.set_expression(void 0,!1),this.emitController.emit(Nr.EXPRESSION_UPDATED)),t!=this._value&&(this._update_value(t),this.setSuccessorsDirty(this))):m.isString(this._raw_input)?(this._expression_controller=this._expression_controller||new so(this),this._raw_input!=this._expression_controller.expression()&&(this._expression_controller.set_expression(this._raw_input),this.emitController.emit(Nr.EXPRESSION_UPDATED))):this.states.error.set(`param input is invalid (${this.path()})`)}async processComputation(){var t;if((null===(t=this.expressionController)||void 0===t?void 0:t.active())&&!this.expressionController.requires_entities()){const t=await this.expressionController.computeExpression();if(this.expressionController.is_errored())this.states.error.set(`expression error: \\\\\\\"${this.expressionController.expression()}\\\\\\\" (${this.expressionController.error_message()})`);else{const e=this.convert(t);null!=e?(this.states.error.active()&&this.states.error.clear(),this._update_value(e)):this.states.error.set(`expression returns an invalid type (${t}) (${this.expressionController.expression()})`)}}}_update_value(t){this._value=t,this.parent_param&&this.parent_param.set_value_from_components(),this.options.executeCallback(),this.emitController.emit(Nr.VALUE_UPDATED),this.removeDirtyState()}}class oo extends ro{static type(){return Cr.FLOAT}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){this.set(t.valueSerialized())}_prefilter_invalid_raw_input(t){return m.isArray(t)?t[0]:m.isString(t)&&ss.isNumber(t)?parseFloat(t):t}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}static convert(t){if(m.isNumber(t))return t;if(m.isBoolean(t))return t?1:0;if(ss.isNumber(t)){const e=parseFloat(t);if(m.isNumber(e))return e}return null}convert(t){const e=oo.convert(t);return e?this.options.ensureInRange(e):e}}class ao extends Vr{constructor(){super(...arguments),this._components_contructor=oo}get components(){return this._components}isNumeric(){return!0}isDefault(){for(let t of this.components)if(!t.isDefault())return!1;return!0}rawInput(){return this._components.map((t=>t.rawInput()))}rawInputSerialized(){return this._components.map((t=>t.rawInputSerialized()))}_copy_value(t){for(let e=0;e<this.components.length;e++){const n=this.components[e],i=t.components[e];n.copy_value(i)}}initComponents(){if(null!=this._components)return;let t=0;this._components=new Array(this.componentNames().length);for(let e of this.componentNames()){const n=new this._components_contructor(this.scene(),this._node);let i;i=m.isArray(this._default_value)?this._default_value[t]:this._default_value[e],n.options.copy(this.options),n.setInitValue(i),n.setName(`${this.name()}${e}`),n.set_parent_param(this),this._components[t]=n,t++}}async processComputation(){await this.compute_components(),this.set_value_from_components()}set_value_from_components(){}hasExpression(){var t;for(let e of this.components)if(null===(t=e.expressionController)||void 0===t?void 0:t.active())return!0;return!1}async compute_components(){const t=this.components,e=[];for(let n of t)n.isDirty()&&e.push(n.compute());await Promise.all(e),this.removeDirtyState()}_prefilter_invalid_raw_input(t){if(m.isArray(t))return t;{const e=t;return this.componentNames().map((()=>e))}}processRawInput(){const t=this.scene().cooker;t.block();const e=this.components;for(let t of e)t.emitController.blockParentEmit();const n=this._raw_input;let i=0;if(m.isArray(n))for(let t=0;t<e.length;t++){let s=n[t];null==s&&(s=i),e[t].set(s),i=s}else for(let t=0;t<e.length;t++){let s=n[this.componentNames()[t]];null==s&&(s=i),e[t].set(s),i=s}t.unblock();for(let t=0;t<e.length;t++)e[t].emitController.unblockParentEmit();this.emitController.emit(Nr.VALUE_UPDATED)}}var lo;!function(t){t.NONE=\\\\\\\"no conversion\\\\\\\",t.GAMMA_TO_LINEAR=\\\\\\\"gamma -> linear\\\\\\\",t.LINEAR_TO_GAMMA=\\\\\\\"linear -> gamma\\\\\\\",t.SRGB_TO_LINEAR=\\\\\\\"sRGB -> linear\\\\\\\",t.LINEAR_TO_SRGB=\\\\\\\"linear -> sRGB\\\\\\\"}(lo||(lo={}));lo.NONE,lo.GAMMA_TO_LINEAR,lo.LINEAR_TO_GAMMA,lo.SRGB_TO_LINEAR,lo.LINEAR_TO_SRGB;class co{static set_hsv(t,e,n,i){t=Object(On.f)(t,1),e=Object(On.d)(e,0,1),n=Object(On.d)(n,0,1),i.setHSL(t,e*n/((t=(2-e)*n)<1?t:2-t),.5*t)}}const ho=[\\\\\\\"r\\\\\\\",\\\\\\\"g\\\\\\\",\\\\\\\"b\\\\\\\"];class uo extends ro{static type(){return Cr.INTEGER}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){this.set(t.valueSerialized())}_prefilter_invalid_raw_input(t){return m.isArray(t)?t[0]:m.isString(t)&&ss.isNumber(t)?parseInt(t):t}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}static convert(t){if(m.isNumber(t))return Math.round(t);if(m.isBoolean(t))return t?1:0;if(ss.isNumber(t)){const e=parseInt(t);if(m.isNumber(e))return e}return null}convert(t){const e=uo.convert(t);return e?this.options.ensureInRange(e):e}}class po{constructor(){this._index=-1,this._path_elements=[],this._named_nodes=[],this._graph_node_ids=[],this._node_element_by_graph_node_id=new Map}reset(){this._index=-1,this._path_elements=[],this._named_nodes=[],this._graph_node_ids=[],this._node_element_by_graph_node_id.clear()}add_node(t,e){this._index+=1,t==e.name()&&(this._named_nodes[this._index]=e),this._graph_node_ids[this._index]=e.graphNodeId(),this._node_element_by_graph_node_id.set(e.graphNodeId(),t)}add_path_element(t){this._index+=1,this._path_elements[this._index]=t}named_graph_nodes(){return this._named_nodes}named_nodes(){const t=[];for(let e of this._named_nodes)if(e){const n=e;n.nameController&&t.push(n)}return t}update_from_name_change(t){this._named_nodes.map((t=>null==t?void 0:t.graphNodeId())).includes(t.graphNodeId())&&this._node_element_by_graph_node_id.set(t.graphNodeId(),t.name())}to_path(){const t=new Array(this._index);for(let e=0;e<=this._index;e++){const n=this._named_nodes[e];if(n){const i=this._node_element_by_graph_node_id.get(n.graphNodeId());i&&(t[e]=i)}else{const n=this._path_elements[e];n&&(t[e]=n)}}let e=t.join(bi.SEPARATOR);const n=e[0];return n&&(bi.NON_LETTER_PREFIXES.includes(n)||(e=`${bi.SEPARATOR}${e}`)),e}}class _o extends Vr{constructor(){super(...arguments),this.decomposed_path=new po}_handleReferences(t,e){this.scene().referencesController.setNamedNodesFromParam(this),t?this.scene().referencesController.setReferenceFromParam(this,t):this.scene().missingExpressionReferencesController.register(this,e)}}var mo;!function(t){t.NODE=\\\\\\\"NODE\\\\\\\",t.PARAM=\\\\\\\"PARAM\\\\\\\"}(mo||(mo={}));class fo extends _o{constructor(){super(...arguments),this._found_node=null,this._found_node_with_expected_type=null,this._found_param=null,this._found_param_with_expected_type=null}static type(){return Cr.OPERATOR_PATH}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return`${this._raw_input}`}valueSerialized(){return`${this.value}`}_copy_value(t){this.set(t.valueSerialized())}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}isDefault(){return this._value==this._default_value}setNode(t){this.set(t.path())}processRawInput(){this._value!=this._raw_input&&(this._value=this._raw_input,this.setDirty(),this.emitController.emit(Nr.VALUE_UPDATED))}async processComputation(){this.find_target()}find_target(){if(!this.node)return;const t=this._value;let e=null,n=null;const i=null!=t&&\\\\\\\"\\\\\\\"!==t,s=this.options.paramSelectionOptions()?mo.PARAM:mo.NODE;this.scene().referencesController.resetReferenceFromParam(this),this.decomposed_path.reset(),i&&(s==mo.PARAM?n=bi.findParam(this.node,t,this.decomposed_path):e=bi.findNode(this.node,t,this.decomposed_path));const r=s==mo.PARAM?this._found_param:this._found_node,o=s==mo.PARAM?n:e;if(this._handleReferences(e,t),(null==r?void 0:r.graphNodeId())!==(null==o?void 0:o.graphNodeId())){const t=this.options.dependentOnFoundNode();this._found_node&&t&&this.removeGraphInput(this._found_node),s==mo.PARAM?(this._found_param=n,this._found_node=null):(this._found_node=e,this._found_param=null),e&&this._assign_found_node(e),n&&this._assign_found_param(n),this.options.executeCallback()}this.removeDirtyState()}_assign_found_node(t){const e=this.options.dependentOnFoundNode();this._is_node_expected_context(t)?this._is_node_expected_type(t)?(this._found_node_with_expected_type=t,e&&this.addGraphInput(t)):this.states.error.set(`node type is ${t.type()} but the params expects one of ${(this._expected_node_types()||[]).join(\\\\\\\", \\\\\\\")}`):this.states.error.set(`node context is ${t.context()} but the params expects a ${this._expected_context()}`)}_assign_found_param(t){this._is_param_expected_type(t)?this._found_param_with_expected_type=t:this.states.error.set(`param type is ${t.type()} but the params expects a ${this._expected_param_type()}`)}found_node(){return this._found_node}found_param(){return this._found_param}found_node_with_context(t){return this._found_node_with_expected_type}found_node_with_context_and_type(t,e){const n=this.found_node_with_context(t);if(n)if(m.isArray(e)){for(let t of e)if(n.type()==t)return n;this.states.error.set(`expected node type to be ${e.join(\\\\\\\", \\\\\\\")}, but was instead ${n.type()}`)}else{const t=e;if(n.type()==t)return n;this.states.error.set(`expected node type to be ${t}, but was instead ${n.type()}`)}}found_param_with_type(t){if(this._found_param_with_expected_type)return this._found_param_with_expected_type}found_node_with_expected_type(){return this._found_node_with_expected_type}_expected_context(){return this.options.nodeSelectionContext()}_is_node_expected_context(t){var e,n;const i=this._expected_context();if(null==i)return!0;return i==(null===(n=null===(e=t.parent())||void 0===e?void 0:e.childrenController)||void 0===n?void 0:n.context)}_expected_node_types(){return this.options.nodeSelectionTypes()}_expected_param_type(){return this.options.paramSelectionType()}_is_node_expected_type(t){const e=this._expected_node_types();return null==e||(null==e?void 0:e.includes(t.type()))}_is_param_expected_type(t){const e=this._expected_node_types();return null==e||e.includes(t.type())}notifyPathRebuildRequired(t){this.decomposed_path.update_from_name_change(t);const e=this.decomposed_path.to_path();this.set(e)}notifyTargetParamOwnerParamsUpdated(t){this.setDirty()}}var go,vo=n(34),yo=n(70);class xo{constructor(t=0,e=0){this._position=t,this._value=e}toJSON(){return{position:this._position,value:this._value}}position(){return this._position}value(){return this._value}copy(t){this._position=t.position(),this._value=t.value()}clone(){const t=new xo;return t.copy(this),t}isEqual(t){return this._position==t.position()&&this._value==t.value()}isEqualJSON(t){return this._position==t.position&&this._value==t.value}fromJSON(t){this._position=t.position,this._value=t.value}static areEqualJSON(t,e){return t.position==e.position&&t.value==e.value}static fromJSON(t){return new xo(t.position,t.value)}}!function(t){t.LINEAR=\\\\\\\"linear\\\\\\\"}(go||(go={}));class bo{constructor(t=go.LINEAR,e=[]){this._interpolation=t,this._points=e,this._uuid=Object(On.h)()}uuid(){return this._uuid}interpolation(){return this._interpolation}points(){return this._points}static fromJSON(t){const e=[];for(let n of t.points)e.push(xo.fromJSON(n));return new bo(t.interpolation,e)}toJSON(){return{interpolation:this._interpolation,points:this._points.map((t=>t.toJSON()))}}clone(){const t=new bo;return t.copy(this),t}copy(t){this._interpolation=t.interpolation();let e=0;for(let n of t.points()){const t=this._points[e];t?t.copy(n):this._points.push(n.clone()),e+=1}}is_equal(t){if(this._interpolation!=t.interpolation())return!1;const e=t.points();if(this._points.length!=e.length)return!1;let n=0;for(let t of this._points){const i=e[n];if(!t.isEqual(i))return!1;n+=1}return!0}is_equal_json(t){if(this._interpolation!=t.interpolation)return!1;if(this._points.length!=t.points.length)return!1;let e=0;for(let n of this._points){const i=t.points[e];if(!n.isEqualJSON(i))return!1;e+=1}return!0}static are_json_equal(t,e){if(t.interpolation!=e.interpolation)return!1;if(t.points.length!=e.points.length)return!1;let n=0;for(let i of t.points){const t=e.points[n];if(!xo.areEqualJSON(i,t))return!1;n+=1}return!0}from_json(t){this._interpolation=t.interpolation;let e=0;for(let n of t.points){const t=this._points[e];t?t.fromJSON(n):this._points.push(xo.fromJSON(n)),e+=1}}}const wo=1024,To=255;class Ao extends Vr{constructor(){super(...arguments),this._texture_data=new Uint8Array(3072),this._ramp_texture=new vo.a(this._texture_data,wo,1,w.ic)}static type(){return Cr.RAMP}defaultValueSerialized(){return this._default_value instanceof bo?this._default_value.toJSON():this._default_value}_clone_raw_input(t){return t instanceof bo?t.clone():bo.fromJSON(t).toJSON()}rawInputSerialized(){return this._raw_input instanceof bo?this._raw_input.toJSON():bo.fromJSON(this._raw_input).toJSON()}valueSerialized(){return this.value.toJSON()}_copy_value(t){this.set(t.valueSerialized())}static are_raw_input_equal(t,e){return t instanceof bo?e instanceof bo?t.is_equal(e):t.is_equal_json(e):e instanceof bo?e.is_equal_json(t):bo.are_json_equal(t,e)}static are_values_equal(t,e){return t.is_equal(e)}isDefault(){return this._default_value instanceof bo?this.value.is_equal(this._default_value):this.value.is_equal_json(this._default_value)}processRawInput(){this._raw_input instanceof bo?this._value?this._value.copy(this._raw_input):this._value=this._raw_input:this._value?this._value.from_json(this._raw_input):this._value=bo.fromJSON(this._raw_input),this._resetRampInterpolant(),this._updateRampTexture(),this.options.executeCallback(),this.emitController.emit(Nr.VALUE_UPDATED),this.setSuccessorsDirty(this)}hasExpression(){return!1}_resetRampInterpolant(){this._ramp_interpolant=void 0}rampTexture(){return this._ramp_texture}_updateRampTexture(){this._updateRampTextureData(),this.rampTexture().needsUpdate=!0}_updateRampTextureData(){let t=0,e=0,n=0;for(var i=0;i<1024;i++)t=3*i,e=i/wo,n=this.valueAtPosition(e),n<=0?(this._texture_data[t+0]=(Object(On.d)(n,-1,0)+1)*To,this._texture_data[t+1]=0,this._texture_data[t+2]=0):n<=1?(this._texture_data[t+0]=To,this._texture_data[t+1]=Object(On.d)(n,0,1)*To,this._texture_data[t+2]=0):(this._texture_data[t+0]=To,this._texture_data[t+1]=To,this._texture_data[t+2]=(Object(On.d)(n,1,2)-1)*To)}static createInterpolant(t,e){const n=new Float32Array(1);return new yo.a(t,e,1,n)}interpolant(){return this._ramp_interpolant=this._ramp_interpolant||this._createInterpolant()}_createInterpolant(){const t=this.value.points(),e=f.sortBy(t,(t=>t.position())),n=new Float32Array(e.length),i=new Float32Array(e.length);let s=0;for(let t of e)n[s]=t.position(),i[s]=t.value(),s++;return Ao.createInterpolant(n,i)}valueAtPosition(t){return this.interpolant().evaluate(t)[0]}}Ao.DEFAULT_VALUE=new bo(go.LINEAR,[new xo(0,0),new xo(1,1)]),Ao.DEFAULT_VALUE_JSON=Ao.DEFAULT_VALUE.toJSON();class Mo extends Vr{static type(){return Cr.STRING}defaultValueSerialized(){return this._default_value}_clone_raw_input(t){return`${t}`}rawInputSerialized(){return`${this._raw_input}`}valueSerialized(){return`${this.value}`}_copy_value(t){this.set(t.value)}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}isDefault(){return this._raw_input==this._default_value}convert(t){return m.isString(t)?t:`${t}`}rawInput(){return this._raw_input}processRawInput(){this.states.error.clear(),this._value_elements(this._raw_input).length>=3?(this._expression_controller=this._expression_controller||new so(this),this._raw_input!=this._expression_controller.expression()&&(this._expression_controller.set_expression(this._raw_input),this.setDirty(),this.emitController.emit(Nr.EXPRESSION_UPDATED))):this._raw_input!=this._value&&(this._value=this._raw_input,this.removeDirtyState(),this.setSuccessorsDirty(this),this.emitController.emit(Nr.VALUE_UPDATED),this.options.executeCallback(),this._expression_controller&&(this._expression_controller.set_expression(void 0,!1),this.emitController.emit(Nr.EXPRESSION_UPDATED)))}async processComputation(){var t;if((null===(t=this.expressionController)||void 0===t?void 0:t.active())&&!this.expressionController.requires_entities()){const t=await this.expressionController.computeExpression();if(this.expressionController.is_errored())this.states.error.set(`expression error: ${this.expressionController.error_message()}`);else{const e=this.convert(t);null!=e?(this._value=e,this.emitController.emit(Nr.VALUE_UPDATED),this.options.executeCallback()):this.states.error.set(`expression returns an invalid type (${t})`),this.removeDirtyState()}}}_value_elements(t){return Wr.string_value_elements(t)}}const Eo=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"];const So=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"];const Co=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"];const No={[Cr.BOOLEAN]:class extends ro{static type(){return Cr.BOOLEAN}defaultValueSerialized(){return m.isString(this._default_value)?this._default_value:this.convert(this._default_value)||!1}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){this.set(t.value)}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}convert(t){if(m.isBoolean(t))return t;if(m.isNumber(t))return t>=1;if(m.isString(t)){if(ss.isBoolean(t))return ss.toBoolean(t);if(ss.isNumber(t)){return parseFloat(t)>=1}}return null}},[Cr.BUTTON]:class extends Vr{static type(){return Cr.BUTTON}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){}static are_raw_input_equal(t,e){return!0}static are_values_equal(t,e){return!0}async pressButton(){(this.node.isDirty()||this.node.cookController.isCooking())&&await this.node.compute(),this.options.executeCallback()}},[Cr.COLOR]:class extends ao{constructor(){super(...arguments),this._value=new D.a,this._value_pre_conversion=new D.a,this._value_serialized_dirty=!1,this._value_serialized=[0,0,0],this._value_pre_conversion_serialized=[0,0,0],this._copied_value=[0,0,0]}static type(){return Cr.COLOR}componentNames(){return ho}defaultValueSerialized(){return m.isArray(this._default_value)?this._default_value:this._default_value.toArray()}valueSerialized(){return this._update_value_serialized_if_required(),this._value_serialized}valuePreConversionSerialized(){return this._update_value_serialized_if_required(),this._value_pre_conversion_serialized}_copy_value(t){t.value.toArray(this._copied_value),this.set(this._copied_value)}_clone_raw_input(t){if(t instanceof D.a)return t.clone();{const e=[t[0],t[1],t[2]];return null==e[0]&&(e[0]=e[0]||0),null==e[1]&&(e[1]=e[1]||e[0]),null==e[2]&&(e[2]=e[2]||e[1]),e}}static are_raw_input_equal(t,e){return t instanceof D.a?e instanceof D.a?t.equals(e):t.r==e[0]&&t.g==e[1]&&t.b==e[2]:e instanceof D.a?t[0]==e.r&&t[1]==e.g&&t[2]==e.b:t[0]==e[0]&&t[1]==e[1]&&t[2]==e[2]}static are_values_equal(t,e){return t.equals(e)}initComponents(){super.initComponents(),this.r=this.components[0],this.g=this.components[1],this.b=this.components[2],this._value_serialized_dirty=!0}_update_value_serialized_if_required(){this._value_serialized_dirty&&(this._value_serialized[0]=this._value.r,this._value_serialized[1]=this._value.g,this._value_serialized[2]=this._value.b,this._value_pre_conversion_serialized[0]=this._value_pre_conversion.r,this._value_pre_conversion_serialized[1]=this._value_pre_conversion.g,this._value_pre_conversion_serialized[2]=this._value_pre_conversion.b)}valuePreConversion(){return this._value_pre_conversion}set_value_from_components(){this._value_pre_conversion.r=this.r.value,this._value_pre_conversion.g=this.g.value,this._value_pre_conversion.b=this.b.value,this._value.copy(this._value_pre_conversion);const t=this.options.colorConversion();if(null!=t&&t!=lo.NONE){switch(t){case lo.GAMMA_TO_LINEAR:return void this._value.convertGammaToLinear();case lo.LINEAR_TO_GAMMA:return void this._value.convertLinearToGamma();case lo.SRGB_TO_LINEAR:return void this._value.convertSRGBToLinear();case lo.LINEAR_TO_SRGB:return void this._value.convertLinearToSRGB()}os.unreachable(t)}this._value_serialized_dirty=!0}},[Cr.FLOAT]:oo,[Cr.FOLDER]:class extends Vr{static type(){return Cr.FOLDER}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){}static are_raw_input_equal(t,e){return!0}static are_values_equal(t,e){return!0}},[Cr.INTEGER]:uo,[Cr.OPERATOR_PATH]:fo,[Cr.PARAM_PATH]:class extends _o{static type(){return Cr.PARAM_PATH}initialize_param(){this._value=new xi}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return`${this._raw_input}`}valueSerialized(){return`${this.value}`}_copy_value(t){this.set(t.valueSerialized())}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}isDefault(){return this._raw_input==this._default_value}setParam(t){this.set(t.path())}processRawInput(){this._value.path()!=this._raw_input&&(this._value.set_path(this._raw_input),this.find_target(),this.setDirty(),this.emitController.emit(Nr.VALUE_UPDATED))}async processComputation(){this.find_target()}find_target(){if(!this.node)return;const t=this._raw_input;let e=null;const n=null!=t&&\\\\\\\"\\\\\\\"!==t;this.scene().referencesController.resetReferenceFromParam(this),this.decomposed_path.reset(),n&&(e=bi.findParam(this.node,t,this.decomposed_path));const i=this._value.param(),s=e;if(this._handleReferences(e,t),(null==i?void 0:i.graphNodeId())!==(null==s?void 0:s.graphNodeId())){const t=this.options.dependentOnFoundNode(),n=this._value.param();n&&t&&this.removeGraphInput(n),e?this._assign_found_node(e):this._value.set_param(null),this.options.executeCallback()}this.removeDirtyState()}_assign_found_node(t){const e=this.options.dependentOnFoundNode();this._value.set_param(t),e&&this.addGraphInput(t)}notifyPathRebuildRequired(t){this.decomposed_path.update_from_name_change(t);const e=this.decomposed_path.to_path();this.set(e)}notifyTargetParamOwnerParamsUpdated(t){this.setDirty()}},[Cr.NODE_PATH]:class extends _o{static type(){return Cr.NODE_PATH}initialize_param(){this._value=new yi}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return`${this._raw_input}`}valueSerialized(){return`${this.value}`}_copy_value(t){this.set(t.valueSerialized())}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}isDefault(){return this._raw_input==this._default_value}setNode(t){this.set(t.path())}processRawInput(){this._value.path()!=this._raw_input&&(this._value.set_path(this._raw_input),this._findTarget(),this.setDirty(),this.emitController.emit(Nr.VALUE_UPDATED))}async processComputation(){this._findTarget()}_findTarget(){if(!this.node)return;const t=this._raw_input;let e=null;const n=null!=t&&\\\\\\\"\\\\\\\"!==t;this.scene().referencesController.resetReferenceFromParam(this),this.decomposed_path.reset(),n&&(e=bi.findNode(this.node,t,this.decomposed_path));const i=this._value.node(),s=e;if(this._handleReferences(e,t),(null==i?void 0:i.graphNodeId())!==(null==s?void 0:s.graphNodeId())){const t=this.options.dependentOnFoundNode(),n=this._value.node();n&&t&&this.removeGraphInput(n),e?this._assign_found_node(e):this._value.set_node(null),this.options.executeCallback()}n&&!e&&this.scene().loadingController.loaded()&&n&&this.states.error.set(`no node found at path '${t}'`),this.removeDirtyState()}_assign_found_node(t){const e=this.options.dependentOnFoundNode();this._isNodeExpectedContext(t)?this._is_node_expected_type(t)?(this.states.error.clear(),this._value.set_node(t),e&&this.addGraphInput(t)):this.states.error.set(`node type is ${t.type()} but the params expects one of ${(this._expected_node_types()||[]).join(\\\\\\\", \\\\\\\")}`):this.states.error.set(`node context is ${t.context()} but the params expects a ${this._expectedContext()}`)}_expectedContext(){return this.options.nodeSelectionContext()}_isNodeExpectedContext(t){var e,n;const i=this._expectedContext();if(null==i)return!0;return i==(null===(n=null===(e=t.parent())||void 0===e?void 0:e.childrenController)||void 0===n?void 0:n.context)}_expected_node_types(){return this.options.nodeSelectionTypes()}_is_node_expected_type(t){const e=this._expected_node_types();return null==e||(null==e?void 0:e.includes(t.type()))}notifyPathRebuildRequired(t){this.decomposed_path.update_from_name_change(t);const e=this.decomposed_path.to_path();this.set(e)}notifyTargetParamOwnerParamsUpdated(t){this.setDirty()}},[Cr.RAMP]:Ao,[Cr.STRING]:Mo,[Cr.VECTOR2]:class extends ao{constructor(){super(...arguments),this._value=new d.a,this._copied_value=[0,0]}static type(){return Cr.VECTOR2}componentNames(){return Eo}defaultValueSerialized(){return m.isArray(this._default_value)?this._default_value:this._default_value.toArray()}valueSerialized(){return this.value.toArray()}_copy_value(t){t.value.toArray(this._copied_value),this.set(this._copied_value)}_clone_raw_input(t){if(t instanceof d.a)return t.clone();{const e=[t[0],t[1]];return null==e[0]&&(e[0]=e[0]||0),null==e[1]&&(e[1]=e[1]||e[0]),e}}static are_raw_input_equal(t,e){return t instanceof d.a?e instanceof d.a?t.equals(e):t.x==e[0]&&t.y==e[1]:e instanceof d.a?t[0]==e.x&&t[1]==e.y:t[0]==e[0]&&t[1]==e[1]}static are_values_equal(t,e){return t.equals(e)}initComponents(){super.initComponents(),this.x=this.components[0],this.y=this.components[1]}set_value_from_components(){this._value.x=this.x.value,this._value.y=this.y.value}},[Cr.VECTOR3]:class extends ao{constructor(){super(...arguments),this._value=new p.a,this._copied_value=[0,0,0]}static type(){return Cr.VECTOR3}componentNames(){return So}defaultValueSerialized(){return m.isArray(this._default_value)?this._default_value:this._default_value.toArray()}valueSerialized(){return this.value.toArray()}_copy_value(t){t.value.toArray(this._copied_value),this.set(this._copied_value)}_clone_raw_input(t){if(t instanceof p.a)return t.clone();{const e=[t[0],t[1],t[2]];return null==e[0]&&(e[0]=e[0]||0),null==e[1]&&(e[1]=e[1]||e[0]),null==e[2]&&(e[2]=e[2]||e[1]),e}}static are_raw_input_equal(t,e){return t instanceof p.a?e instanceof p.a?t.equals(e):t.x==e[0]&&t.y==e[1]&&t.z==e[2]:e instanceof p.a?t[0]==e.x&&t[1]==e.y&&t[2]==e.z:t[0]==e[0]&&t[1]==e[1]&&t[2]==e[2]}static are_values_equal(t,e){return t.equals(e)}initComponents(){super.initComponents(),this.x=this.components[0],this.y=this.components[1],this.z=this.components[2]}set_value_from_components(){this._value.x=this.x.value,this._value.y=this.y.value,this._value.z=this.z.value}},[Cr.VECTOR4]:class extends ao{constructor(){super(...arguments),this._value=new _.a,this._copied_value=[0,0,0,0]}static type(){return Cr.VECTOR4}componentNames(){return Co}defaultValueSerialized(){return m.isArray(this._default_value)?this._default_value:this._default_value.toArray()}valueSerialized(){return this.value.toArray()}_copy_value(t){t.value.toArray(this._copied_value),this.set(this._copied_value)}_clone_raw_input(t){if(t instanceof _.a)return t.clone();{const e=[t[0],t[1],t[2],t[3]];return null==e[0]&&(e[0]=e[0]||0),null==e[1]&&(e[1]=e[1]||e[0]),null==e[2]&&(e[2]=e[2]||e[1]),null==e[3]&&(e[3]=e[3]||e[2]),e}}static are_raw_input_equal(t,e){return t instanceof _.a?e instanceof _.a?t.equals(e):t.x==e[0]&&t.y==e[1]&&t.z==e[2]&&t.w==e[3]:e instanceof _.a?t[0]==e.x&&t[1]==e.y&&t[2]==e.z&&t[3]==e.w:t[0]==e[0]&&t[1]==e[1]&&t[2]==e[2]&&t[3]==e[3]}static are_values_equal(t,e){return t.equals(e)}initComponents(){super.initComponents(),this.x=this.components[0],this.y=this.components[1],this.z=this.components[2],this.w=this.components[3]}set_value_from_components(){this._value.x=this.x.value,this._value.y=this.y.value,this._value.z=this.z.value,this._value.w=this.w.value}}};class Lo{dispose(){this._callback=void 0}params(){return this._params}callback(){return this._callback}init(t,e){if(this._params=t,e)this._callback=e;else{const t=this._params[0];switch(t.type()){case Cr.STRING:return this._handle_string_param(t);case Cr.OPERATOR_PATH:return this._handle_operator_path_param(t);case Cr.NODE_PATH:return this._handle_node_path_param(t);case Cr.PARAM_PATH:return this._handle_param_path_param(t);case Cr.FLOAT:case Cr.INTEGER:return this._handle_number_param(t)}}}_handle_string_param(t){this._callback=()=>t.value}_handle_operator_path_param(t){this._callback=()=>t.value}_handle_node_path_param(t){this._callback=()=>t.value.path()}_handle_param_path_param(t){this._callback=()=>t.value.path()}_handle_number_param(t){this._callback=()=>`${t.value}`}}class Oo{constructor(t){this.node=t,this._param_create_mode=!1,this._params_created=!1,this._params_by_name={},this._params_list=[],this._param_names=[],this._non_spare_params=[],this._spare_params=[],this._non_spare_param_names=[],this._spare_param_names=[],this._params_added_since_last_params_eval=!1}get label(){return this._label_controller=this._label_controller||new Lo}hasLabelController(){return null!=this._label_controller}dispose(){var t;this._params_node&&this._params_node.dispose();for(let t of this.all)t.dispose();this._post_create_params_hook_names=void 0,this._post_create_params_hooks=void 0,this._on_scene_load_hooks=void 0,this._on_scene_load_hook_names=void 0,null===(t=this._label_controller)||void 0===t||t.dispose()}initDependencyNode(){this._params_node||(this._params_node=new Mi(this.node.scene(),\\\\\\\"params\\\\\\\"),this.node.addGraphInput(this._params_node,!1))}init(){this.initDependencyNode(),this._param_create_mode=!0,this._initFromParamsConfig(),this.node.createParams(),this._postCreateParams()}_postCreateParams(){this._updateCaches(),this._initParamAccessors(),this._param_create_mode=!1,this._params_created=!0,this._runPostCreateParamsHooks()}postCreateSpareParams(){this._updateCaches(),this._initParamAccessors(),this.node.scene().referencesController.notifyParamsUpdated(this.node),this.node.emit(Ei.PARAMS_UPDATED)}updateParams(t){let e=!1,n=!1;if(t.namesToDelete)for(let e of t.namesToDelete)this.has(e)&&(this._deleteParam(e),n=!0);if(t.toAdd)for(let n of t.toAdd){const t=this.addParam(n.type,n.name,n.init_value,n.options);t&&(null!=n.raw_input&&t.set(n.raw_input),e=!0)}(n||e)&&this.postCreateSpareParams()}_initFromParamsConfig(){const t=this.node.paramsConfig;let e=!1;if(t)for(let n of Object.keys(t)){const i=t[n];let s;this.node.params_init_value_overrides&&(s=this.node.params_init_value_overrides[n],e=!0),this.addParam(i.type,n,i.init_value,i.options,s)}e&&this.node.setDirty(),this.node.params_init_value_overrides=void 0}_initParamAccessors(){let t=Object.getOwnPropertyNames(this.node.pv);this._removeUnneededAccessors(t),t=Object.getOwnPropertyNames(this.node.pv);for(let e of this.all){const n=e.options.isSpare();(!t.includes(e.name())||n)&&(Object.defineProperty(this.node.pv,e.name(),{get:()=>e.value,configurable:n}),Object.defineProperty(this.node.p,e.name(),{get:()=>e,configurable:n}))}}_removeUnneededAccessors(t){const e=this._param_names,n=[];for(let i of t)e.includes(i)||n.push(i);for(let t of n)Object.defineProperty(this.node.pv,t,{get:()=>{},configurable:!0}),Object.defineProperty(this.node.p,t,{get:()=>{},configurable:!0})}get params_node(){return this._params_node}get all(){return this._params_list}get non_spare(){return this._non_spare_params}get spare(){return this._spare_params}get names(){return this._param_names}get non_spare_names(){return this._non_spare_param_names}get spare_names(){return this._spare_param_names}set_with_type(t,e,n){const i=this.param_with_type(t,n);i?i.set(e):li.warn(`param ${t} not found with type ${n}`)}set_float(t,e){this.set_with_type(t,e,Cr.FLOAT)}set_vector3(t,e){this.set_with_type(t,e,Cr.VECTOR3)}has_param(t){return null!=this._params_by_name[t]}has(t){return this.has_param(t)}get(t){return this.param(t)}param_with_type(t,e){const n=this.param(t);if(n&&n.type()==e)return n}get_float(t){return this.param_with_type(t,Cr.FLOAT)}get_operator_path(t){return this.param_with_type(t,Cr.OPERATOR_PATH)}value(t){var e;return null===(e=this.param(t))||void 0===e?void 0:e.value}value_with_type(t,e){var n;return null===(n=this.param_with_type(t,e))||void 0===n?void 0:n.value}boolean(t){return this.value_with_type(t,Cr.BOOLEAN)}float(t){return this.value_with_type(t,Cr.FLOAT)}integer(t){return this.value_with_type(t,Cr.INTEGER)}string(t){return this.value_with_type(t,Cr.STRING)}vector2(t){return this.value_with_type(t,Cr.VECTOR2)}vector3(t){return this.value_with_type(t,Cr.VECTOR3)}color(t){return this.value_with_type(t,Cr.COLOR)}param(t){const e=this._params_by_name[t];return null!=e?e:(li.warn(`tried to access param '${t}' in node ${this.node.path()}, but existing params are: ${this.names} on node ${this.node.path()}`),null)}_deleteParam(t){const e=this._params_by_name[t];if(!e)throw new Error(`param '${t}' does not exist on node ${this.node.path()}`);if(this._params_node&&this._params_node.removeGraphInput(this._params_by_name[t]),e._setupNodeDependencies(null),delete this._params_by_name[t],e.isMultiple()&&e.components)for(let t of e.components){const e=t.name();delete this._params_by_name[e]}}addParam(t,e,n,i={},s){const r=i.spare||!1;!1!==this._param_create_mode||r||li.warn(`node ${this.node.path()} (${this.node.type()}) param '${e}' cannot be created outside of create_params`),null==this.node.scene()&&li.warn(`node ${this.node.path()} (${this.node.type()}) has no scene assigned`);const o=No[t];if(null!=o){const a=this._params_by_name[e];a&&(r?a.type()!=t&&this._deleteParam(a.name()):li.warn(`a param named ${e} already exists`,this.node));const l=new o(this.node.scene(),this.node);if(l.options.set(i),l.setName(e),l.setInitValue(n),l.initComponents(),null==s)l.set(n);else if(l.options.isExpressionForEntities()&&l.set(n),null!=s.raw_input)l.set(s.raw_input);else if(null!=s.simple_data)l.set(s.simple_data);else if(null!=s.complex_data){const t=s.complex_data.raw_input;t?l.set(t):l.set(n);const e=s.complex_data.overriden_options;if(null!=e){const t=Object.keys(e);for(let n of t)l.options.setOption(n,e[n])}}if(l._setupNodeDependencies(this.node),this._params_by_name[l.name()]=l,l.isMultiple()&&l.components)for(let t of l.components)this._params_by_name[t.name()]=t;return this._params_added_since_last_params_eval=!0,l}}_updateCaches(){this._params_list=Object.values(this._params_by_name),this._param_names=Object.keys(this._params_by_name),this._non_spare_params=Object.values(this._params_by_name).filter((t=>!t.options.isSpare())),this._spare_params=Object.values(this._params_by_name).filter((t=>t.options.isSpare())),this._non_spare_param_names=Object.values(this._params_by_name).filter((t=>!t.options.isSpare())).map((t=>t.name())),this._spare_param_names=Object.values(this._params_by_name).filter((t=>t.options.isSpare())).map((t=>t.name()))}async _evalParam(t){t.isDirty()&&(await t.compute(),t.states.error.active()&&this.node.states.error.set(`param '${t.name()}' error: ${t.states.error.message()}`))}async evalParams(t){const e=[];for(let n of t)n.isDirty()&&e.push(this._evalParam(n));await Promise.all(e),this.node.states.error.active()&&this.node._setContainer(null)}paramsEvalRequired(){return null!=this._params_node&&(this._params_node.isDirty()||this._params_added_since_last_params_eval)}async evalAll(){var t;this.paramsEvalRequired()&&(await this.evalParams(this._params_list),null===(t=this._params_node)||void 0===t||t.removeDirtyState(),this._params_added_since_last_params_eval=!1)}onParamsCreated(t,e){if(this._params_created)e();else{if(this._post_create_params_hook_names&&this._post_create_params_hook_names.includes(t))return void li.error(`hook name ${t} already exists`);this._post_create_params_hook_names=this._post_create_params_hook_names||[],this._post_create_params_hook_names.push(t),this._post_create_params_hooks=this._post_create_params_hooks||[],this._post_create_params_hooks.push(e)}}addOnSceneLoadHook(t,e){this._on_scene_load_hook_names=this._on_scene_load_hook_names||[],this._on_scene_load_hooks=this._on_scene_load_hooks||[],this._on_scene_load_hook_names.includes(t)?li.warn(`hook with name ${t} already exists`,this.node):(this._on_scene_load_hook_names.push(t),this._on_scene_load_hooks.push(e))}_runPostCreateParamsHooks(){if(this._post_create_params_hooks)for(let t of this._post_create_params_hooks)t()}runOnSceneLoadHooks(){if(this._on_scene_load_hooks)for(let t of this._on_scene_load_hooks)t()}}class Po{constructor(){}}class Ro{constructor(t,e,n=0,i=0){if(this._node_src=t,this._node_dest=e,this._output_index=n,this._input_index=i,null==this._output_index)throw\\\\\\\"bad output index\\\\\\\";if(null==this._input_index)throw\\\\\\\"bad input index\\\\\\\";this._id=Ro._next_id++,this._node_src.io.connections&&this._node_dest.io.connections&&(this._node_src.io.connections.addOutputConnection(this),this._node_dest.io.connections.addInputConnection(this))}get id(){return this._id}get node_src(){return this._node_src}get node_dest(){return this._node_dest}get output_index(){return this._output_index}get input_index(){return this._input_index}src_connection_point(){const t=this._node_src,e=this._output_index;return t.io.outputs.namedOutputConnectionPoints()[e]}dest_connection_point(){const t=this._node_dest,e=this._input_index;return t.io.inputs.namedInputConnectionPoints()[e]}disconnect(t={}){this._node_src.io.connections&&this._node_dest.io.connections&&(this._node_src.io.connections.removeOutputConnection(this),this._node_dest.io.connections.removeInputConnection(this)),!0===t.setInput&&this._node_dest.io.inputs.setInput(this._input_index,null)}}Ro._next_id=0;class Io{constructor(t){this.inputs_controller=t,this._clone_required_states=[],this._overridden=!1,this.node=t.node}initInputsClonedState(t){m.isArray(t)?this._cloned_states=t:this._cloned_state=t,this._update_clone_required_state()}overrideClonedStateAllowed(){if(this._cloned_states)for(let t of this._cloned_states)if(t==Qi.FROM_NODE)return!0;return!!this._cloned_state&&this._cloned_state==Qi.FROM_NODE}cloneRequiredState(t){return this._clone_required_states[t]}cloneRequiredStates(){return this._clone_required_states}_get_clone_required_state(t){const e=this._cloned_states;if(e){const n=e[t];if(null!=n)return this.clone_required_from_state(n)}return!this._cloned_state||this.clone_required_from_state(this._cloned_state)}clone_required_from_state(t){switch(t){case Qi.ALWAYS:return!0;case Qi.NEVER:return!1;case Qi.FROM_NODE:return!this._overridden}return os.unreachable(t)}overrideClonedState(t){this._overridden=t,this._update_clone_required_state(),this.node.emit(Ei.OVERRIDE_CLONABLE_STATE_UPDATE),this.node.setDirty()}overriden(){return this._overridden}_update_clone_required_state(){if(this._cloned_states){const t=[];for(let e=0;e<this._cloned_states.length;e++)t[e]=this._get_clone_required_state(e);this._clone_required_states=t}else if(this._cloned_state){const t=this.inputs_controller.maxInputsCount(),e=[];for(let n=0;n<t;n++)e[n]=this._get_clone_required_state(n);this._clone_required_states=e}else;}}class Fo{constructor(t){this.node=t,this._graph_node_inputs=[],this._inputs=[],this._has_named_inputs=!1,this._minInputsCount=0,this._maxInputsCount=0,this._maxInputsCountOnInput=0,this._depends_on_inputs=!0}dispose(){this._graph_node&&this._graph_node.dispose();for(let t of this._graph_node_inputs)t&&t.dispose();this._on_update_hooks=void 0,this._on_update_hook_names=void 0}set_depends_on_inputs(t){this._depends_on_inputs=t}setMinCount(t){this._minInputsCount=t}minCount(){return this._minInputsCount}setMaxCount(t){0==this._maxInputsCount&&(this._maxInputsCountOnInput=t),this._maxInputsCount=t,this._initGraphNodeInputs()}namedInputConnectionPointsByName(t){if(this._named_input_connection_points)for(let e of this._named_input_connection_points)if(e&&e.name()==t)return e}setNamedInputConnectionPoints(t){this._has_named_inputs=!0;const e=this.node.io.connections.inputConnections();if(e)for(let n of e)n&&n.input_index>=t.length&&n.disconnect({setInput:!0});this._named_input_connection_points=t,this.setMinCount(0),this.setMaxCount(t.length),this._initGraphNodeInputs(),this.node.emit(Ei.NAMED_INPUTS_UPDATED)}hasNamedInputs(){return this._has_named_inputs}namedInputConnectionPoints(){return this._named_input_connection_points||[]}_initGraphNodeInputs(){for(let t=0;t<this._maxInputsCount;t++)this._graph_node_inputs[t]=this._graph_node_inputs[t]||this._createGraphNodeInput(t)}_createGraphNodeInput(t){const e=new Mi(this.node.scene(),`input_${t}`);return this._graph_node||(this._graph_node=new Mi(this.node.scene(),\\\\\\\"inputs\\\\\\\"),this.node.addGraphInput(this._graph_node,!1)),this._graph_node.addGraphInput(e,!1),e}maxInputsCount(){return this._maxInputsCount||0}maxInputsCountOverriden(){return this._maxInputsCount!=this._maxInputsCountOnInput}inputGraphNode(t){return this._graph_node_inputs[t]}setCount(t,e){null==e&&(e=t),this.setMinCount(t),this.setMaxCount(e),this._initConnectionControllerInputs()}_initConnectionControllerInputs(){this.node.io.connections.initInputs()}is_any_input_dirty(){var t;return(null===(t=this._graph_node)||void 0===t?void 0:t.isDirty())||!1}async containers_without_evaluation(){const t=[];for(let e=0;e<this._inputs.length;e++){const n=this._inputs[e];let i;n&&(i=await n.compute()),t.push(i)}return t}existing_input_indices(){const t=[];if(this._maxInputsCount>0)for(let e=0;e<this._inputs.length;e++)this._inputs[e]&&t.push(e);return t}async eval_required_inputs(){var t;let e=[];if(this._maxInputsCount>0){const n=this.existing_input_indices();if(n.length<this._minInputsCount)this.node.states.error.set(\\\\\\\"inputs are missing\\\\\\\");else if(n.length>0){const n=[];let i;for(let t=0;t<this._inputs.length;t++)i=this._inputs[t],i&&n.push(this.eval_required_input(t));e=await Promise.all(n),null===(t=this._graph_node)||void 0===t||t.removeDirtyState()}}return e}async eval_required_input(t){let e;const n=this.input(t);if(n&&(e=await n.compute(),this._graph_node_inputs[t].removeDirtyState()),e&&e.coreContent());else{const e=this.input(t);if(e){const n=e.states.error.message();n&&this.node.states.error.set(`input ${t} is invalid (error: ${n})`)}}return e}get_named_input_index(t){var e;if(this._named_input_connection_points)for(let n=0;n<this._named_input_connection_points.length;n++)if((null===(e=this._named_input_connection_points[n])||void 0===e?void 0:e.name())==t)return n;return-1}get_input_index(t){if(m.isString(t)){if(this.hasNamedInputs())return this.get_named_input_index(t);throw new Error(`node ${this.node.path()} has no named inputs`)}return t}setInput(t,e,n=0){const i=this.get_input_index(t)||0;if(i<0){const e=`invalid input (${t}) for node ${this.node.path()}`;throw console.warn(e),new Error(e)}let s=0;if(e&&e.io.outputs.hasNamedOutputs()&&(s=e.io.outputs.getOutputIndex(n),null==s||s<0)){const t=e.io.outputs.namedOutputConnectionPoints().map((t=>t.name()));return void console.warn(`node ${e.path()} does not have an output named ${n}. inputs are: ${t.join(\\\\\\\", \\\\\\\")}`)}const r=this._graph_node_inputs[i];if(null==r){const t=`graph_input_node not found at index ${i}`;throw console.warn(t),new Error(t)}if(e&&this.node.parent()!=e.parent())return;const o=this._inputs[i];let a,l=null;this.node.io.connections&&(a=this.node.io.connections.inputConnection(i)),a&&(l=a.output_index),e===o&&s==l||(null!=o&&this._depends_on_inputs&&r.removeGraphInput(o),null!=e?r.addGraphInput(e)?(this._depends_on_inputs||r.removeGraphInput(e),a&&a.disconnect({setInput:!1}),this._inputs[i]=e,new Ro(e,this.node,s,i)):console.warn(`cannot connect ${e.path()} to ${this.node.path()}`):(this._inputs[i]=null,a&&a.disconnect({setInput:!1})),this._run_on_set_input_hooks(),r.setSuccessorsDirty(),this.node.emit(Ei.INPUTS_UPDATED))}remove_input(t){const e=this.inputs();let n;for(let i=0;i<e.length;i++)n=e[i],null!=n&&null!=t&&n.graphNodeId()===t.graphNodeId()&&this.setInput(i,null)}input(t){return this._inputs[t]}named_input(t){if(this.hasNamedInputs()){const e=this.get_input_index(t);return this._inputs[e]}return null}named_input_connection_point(t){if(this.hasNamedInputs()&&this._named_input_connection_points){const e=this.get_input_index(t);return this._named_input_connection_points[e]}}has_named_input(t){return this.get_named_input_index(t)>=0}has_input(t){return null!=this._inputs[t]}inputs(){return this._inputs}initInputsClonedState(t){this._cloned_states_controller||(this._cloned_states_controller=new Io(this),this._cloned_states_controller.initInputsClonedState(t))}overrideClonedStateAllowed(){var t;return(null===(t=this._cloned_states_controller)||void 0===t?void 0:t.overrideClonedStateAllowed())||!1}overrideClonedState(t){var e;null===(e=this._cloned_states_controller)||void 0===e||e.overrideClonedState(t)}clonedStateOverriden(){var t;return(null===(t=this._cloned_states_controller)||void 0===t?void 0:t.overriden())||!1}cloneRequired(t){var e;const n=null===(e=this._cloned_states_controller)||void 0===e?void 0:e.cloneRequiredState(t);return null==n||n}cloneRequiredStates(){var t;const e=null===(t=this._cloned_states_controller)||void 0===t?void 0:t.cloneRequiredStates();return null==e||e}add_on_set_input_hook(t,e){this._on_update_hooks=this._on_update_hooks||[],this._on_update_hook_names=this._on_update_hook_names||[],this._on_update_hook_names.includes(t)?console.warn(`hook with name ${t} already exists`,this.node):(this._on_update_hooks.push(e),this._on_update_hook_names.push(t))}_run_on_set_input_hooks(){if(this._on_update_hooks)for(let t of this._on_update_hooks)t()}}class Do{constructor(t){this.node=t,this._has_outputs=!1,this._has_named_outputs=!1}setHasOneOutput(){this._has_outputs=!0}setHasNoOutput(){this._has_outputs=!1}hasOutputs(){return this._has_outputs}hasNamedOutputs(){return this._has_named_outputs}hasNamedOutput(t){return this.getNamedOutputIndex(t)>=0}namedOutputConnectionPoints(){return this._named_output_connection_points||[]}namedOutputConnection(t){if(this._named_output_connection_points)return this._named_output_connection_points[t]}getNamedOutputIndex(t){var e;if(this._named_output_connection_points)for(let n=0;n<this._named_output_connection_points.length;n++)if((null===(e=this._named_output_connection_points[n])||void 0===e?void 0:e.name())==t)return n;return-1}getOutputIndex(t){return null!=t?m.isString(t)?this.hasNamedOutputs()?this.getNamedOutputIndex(t):(console.warn(`node ${this.node.path()} has no named outputs`),-1):t:-1}namedOutputConnectionPointsByName(t){if(this._named_output_connection_points)for(let e of this._named_output_connection_points)if((null==e?void 0:e.name())==t)return e}setNamedOutputConnectionPoints(t,e=!0){this._has_named_outputs=!0;const n=this.node.io.connections.outputConnections();if(n)for(let e of n)e&&e.output_index>=t.length&&e.disconnect({setInput:!0});this._named_output_connection_points=t,e&&this.node.scene()&&this.node.setDirty(this.node),this.node.emit(Ei.NAMED_OUTPUTS_UPDATED)}used_output_names(){var t;const e=this.node.io.connections;if(e){let n=e.outputConnections().map((t=>t?t.output_index:null));n=f.uniq(n);const i=[];n.forEach((t=>{m.isNumber(t)&&i.push(t)}));const s=[];for(let e of i){const n=null===(t=this.namedOutputConnectionPoints()[e])||void 0===t?void 0:t.name();n&&s.push(n)}return s}return[]}}class Bo{constructor(t){this._node=t,this._output_connections=new Map}initInputs(){const t=this._node.io.inputs.maxInputsCount();for(this._input_connections=this._input_connections||new Array(t);this._input_connections.length<t;)this._input_connections.push(void 0)}addInputConnection(t){this._input_connections?this._input_connections[t.input_index]=t:console.warn(\\\\\\\"input connections array not initialized\\\\\\\")}removeInputConnection(t){if(this._input_connections)if(t.input_index<this._input_connections.length){this._input_connections[t.input_index]=void 0;let e=!0;for(let n=t.input_index;n<this._input_connections.length;n++)this._input_connections[n]&&(e=!1);e&&(this._input_connections=this._input_connections.slice(0,t.input_index))}else console.warn(`attempt to remove an input connection at index ${t.input_index}`);else console.warn(\\\\\\\"input connections array not initialized\\\\\\\")}inputConnection(t){if(this._input_connections)return this._input_connections[t]}firstInputConnection(){return this._input_connections?f.compact(this._input_connections)[0]:null}inputConnections(){return this._input_connections}existingInputConnections(){const t=this._input_connections;if(t)for(;t.length>1&&void 0===t[t.length-1];)t.pop();return t}addOutputConnection(t){const e=t.output_index,n=t.id;let i=this._output_connections.get(e);i||(i=new Map,this._output_connections.set(e,i)),i.set(n,t)}removeOutputConnection(t){const e=t.output_index,n=t.id;let i=this._output_connections.get(e);i&&i.delete(n)}outputConnections(){let t=[];return this._output_connections.forEach(((e,n)=>{e.forEach(((e,n)=>{e&&t.push(e)}))})),t}}class zo{constructor(t){this._node=t}set_in(t){this._in=t}set_out(t){this._out=t}clear(){this._in=void 0,this._out=void 0}in(){return this._in}out(){return this._out}}class ko{constructor(t,e,n){this._name=t,this._type=e,this._init_value=n}get init_value(){return this._init_value}name(){return this._name}type(){return this._type}are_types_matched(t,e){return!0}toJSON(){return this._json=this._json||this._create_json()}_create_json(){return{name:this._name,type:this._type}}}var Uo;!function(t){t.BOOL=\\\\\\\"bool\\\\\\\",t.INT=\\\\\\\"int\\\\\\\",t.FLOAT=\\\\\\\"float\\\\\\\",t.VEC2=\\\\\\\"vec2\\\\\\\",t.VEC3=\\\\\\\"vec3\\\\\\\",t.VEC4=\\\\\\\"vec4\\\\\\\",t.SAMPLER_2D=\\\\\\\"sampler2D\\\\\\\",t.SSS_MODEL=\\\\\\\"SSSModel\\\\\\\"}(Uo||(Uo={}));const Go=[Uo.BOOL,Uo.INT,Uo.FLOAT,Uo.VEC2,Uo.VEC3,Uo.VEC4],Vo={[Uo.BOOL]:Cr.BOOLEAN,[Uo.INT]:Cr.INTEGER,[Uo.FLOAT]:Cr.FLOAT,[Uo.VEC2]:Cr.VECTOR2,[Uo.VEC3]:Cr.VECTOR3,[Uo.VEC4]:Cr.VECTOR4,[Uo.SAMPLER_2D]:Cr.RAMP,[Uo.SSS_MODEL]:Cr.STRING},Ho={[Cr.BOOLEAN]:Uo.BOOL,[Cr.COLOR]:Uo.VEC3,[Cr.INTEGER]:Uo.INT,[Cr.FLOAT]:Uo.FLOAT,[Cr.FOLDER]:void 0,[Cr.VECTOR2]:Uo.VEC2,[Cr.VECTOR3]:Uo.VEC3,[Cr.VECTOR4]:Uo.VEC4,[Cr.BUTTON]:void 0,[Cr.OPERATOR_PATH]:void 0,[Cr.PARAM_PATH]:void 0,[Cr.NODE_PATH]:void 0,[Cr.RAMP]:void 0,[Cr.STRING]:void 0},jo={[Uo.BOOL]:!1,[Uo.INT]:0,[Uo.FLOAT]:0,[Uo.VEC2]:[0,0],[Uo.VEC3]:[0,0,0],[Uo.VEC4]:[0,0,0,0],[Uo.SAMPLER_2D]:Ao.DEFAULT_VALUE_JSON,[Uo.SSS_MODEL]:\\\\\\\"SSSModel()\\\\\\\"},Wo={[Uo.BOOL]:1,[Uo.INT]:1,[Uo.FLOAT]:1,[Uo.VEC2]:2,[Uo.VEC3]:3,[Uo.VEC4]:4,[Uo.SAMPLER_2D]:1,[Uo.SSS_MODEL]:1};class qo extends ko{constructor(t,e,n){super(t,e),this._name=t,this._type=e,this._init_value=n,this._init_value=this._init_value||jo[this._type]}type(){return this._type}are_types_matched(t,e){return t==e}get param_type(){return Vo[this._type]}get init_value(){return this._init_value}toJSON(){return this._json=this._json||this._create_json()}_create_json(){return{name:this._name,type:this._type}}}var Xo;!function(t){t.BOOL=\\\\\\\"bool\\\\\\\",t.INT=\\\\\\\"int\\\\\\\",t.FLOAT=\\\\\\\"float\\\\\\\",t.VEC2=\\\\\\\"vec2\\\\\\\",t.VEC3=\\\\\\\"vec3\\\\\\\",t.VEC4=\\\\\\\"vec4\\\\\\\"}(Xo||(Xo={}));const Yo=[Xo.BOOL,Xo.INT,Xo.FLOAT,Xo.VEC2,Xo.VEC3,Xo.VEC4],$o={[Xo.BOOL]:Cr.BOOLEAN,[Xo.INT]:Cr.INTEGER,[Xo.FLOAT]:Cr.FLOAT,[Xo.VEC2]:Cr.VECTOR2,[Xo.VEC3]:Cr.VECTOR3,[Xo.VEC4]:Cr.VECTOR4},Jo={[Cr.BOOLEAN]:Xo.BOOL,[Cr.COLOR]:Xo.VEC3,[Cr.INTEGER]:Xo.INT,[Cr.FLOAT]:Xo.FLOAT,[Cr.FOLDER]:void 0,[Cr.VECTOR2]:Xo.VEC2,[Cr.VECTOR3]:Xo.VEC3,[Cr.VECTOR4]:Xo.VEC4,[Cr.BUTTON]:void 0,[Cr.OPERATOR_PATH]:void 0,[Cr.PARAM_PATH]:void 0,[Cr.NODE_PATH]:void 0,[Cr.RAMP]:void 0,[Cr.STRING]:void 0},Zo={[Xo.BOOL]:!1,[Xo.INT]:0,[Xo.FLOAT]:0,[Xo.VEC2]:[0,0],[Xo.VEC3]:[0,0,0],[Xo.VEC4]:[0,0,0,0]};Xo.BOOL,Xo.INT,Xo.FLOAT,Xo.VEC2,Xo.VEC3,Xo.VEC4;class Ko extends ko{constructor(t,e){super(t,e),this._name=t,this._type=e,this._init_value=Zo[this._type]}type(){return this._type}are_types_matched(t,e){return t==e}get param_type(){return $o[this._type]}get init_value(){return this._init_value}toJSON(){return this._json=this._json||this._create_json()}_create_json(){return{name:this._name,type:this._type}}}var Qo;!function(t){t.BASE=\\\\\\\"base\\\\\\\",t.DRAG=\\\\\\\"drag\\\\\\\",t.KEYBOARD=\\\\\\\"keyboard\\\\\\\",t.MOUSE=\\\\\\\"mouse\\\\\\\",t.POINTER=\\\\\\\"pointer\\\\\\\"}(Qo||(Qo={}));class ta extends ko{constructor(t,e,n){super(t,e),this._name=t,this._type=e,this._event_listener=n}type(){return this._type}get param_type(){return Cr.FLOAT}are_types_matched(t,e){return e==Qo.BASE||t==e}get event_listener(){return this._event_listener}toJSON(){return this._json=this._json||this._create_json()}_create_json(){return{name:this._name,type:this._type}}}const ea={[ts.ANIM]:void 0,[ts.COP]:void 0,[ts.EVENT]:Qo.BASE,[ts.GL]:Uo.FLOAT,[ts.JS]:Xo.FLOAT,[ts.MANAGER]:void 0,[ts.MAT]:void 0,[ts.OBJ]:void 0,[ts.POST]:void 0,[ts.ROP]:void 0,[ts.SOP]:void 0};function na(t,e,n){switch(t){case ts.EVENT:return new ta(e,n);case ts.GL:return new qo(e,n);case ts.JS:return new Ko(e,n);default:return}}class ia{constructor(t,e){this.node=t,this._context=e,this._raw_input_serialized_by_param_name=new Map,this._default_value_serialized_by_param_name=new Map,this._initialized=!1}initializeNode(){this._initialized?console.warn(\\\\\\\"already initialized\\\\\\\",this.node):(this._initialized=!0,this.node.params.onParamsCreated(\\\\\\\"create_inputs_from_params\\\\\\\",this.create_inputs_from_params.bind(this)))}initialized(){return this._initialized}create_inputs_from_params(){const t=function(t){switch(t){case ts.EVENT:return;case ts.GL:return Ho;case ts.JS:return Jo;default:return}}(this._context);if(!t)return;const e=[];for(let n of this.node.params.names){let i=!0;if(this._inputless_param_names&&this._inputless_param_names.length>0&&this._inputless_param_names.includes(n)&&(i=!1),i&&this.node.params.has(n)){const i=this.node.params.get(n);if(i&&!i.parent_param){const n=t[i.type()];if(n){const t=na(this._context,i.name(),n);t&&e.push(t)}}}}this.node.io.inputs.setNamedInputConnectionPoints(e)}set_inputless_param_names(t){return this._inputless_param_names=t}createSpareParameters(){if(this.node.scene().loadingController.isLoading())return;const t=this.node.params.spare_names,e={};for(let n of t)if(this.node.params.has(n)){const t=this.node.params.get(n);t&&(this._raw_input_serialized_by_param_name.set(n,t.rawInputSerialized()),this._default_value_serialized_by_param_name.set(n,t.defaultValueSerialized()),e.namesToDelete=e.namesToDelete||[],e.namesToDelete.push(n))}for(let t of this.node.io.inputs.namedInputConnectionPoints())if(t){const n=t.name(),i=t.param_type;let s=t.init_value;const r=this._default_value_serialized_by_param_name.get(n);let o=this.node.paramDefaultValue(n);if(s=null!=o?o:null!=r?r:t.init_value,m.isArray(t.init_value))if(m.isNumber(s)){const e=new Array(t.init_value.length);e.fill(s),s=e}else m.isArray(s)&&s.length==t.init_value.length&&null!=r&&(s=t.init_value);null!=s&&(e.toAdd=e.toAdd||[],e.toAdd.push({name:n,type:i,init_value:b.clone(s),raw_input:b.clone(s),options:{spare:!0}}))}this.node.params.updateParams(e);for(let t of this.node.params.spare)if(!t.parent_param){const e=this._raw_input_serialized_by_param_name.get(t.name());e&&t.set(e)}}}class sa{constructor(t,e){this.node=t,this._context=e,this._create_spare_params_from_inputs=!0,this._functions_overridden=!1,this._input_name_function=t=>`in${t}`,this._output_name_function=t=>0==t?\\\\\\\"val\\\\\\\":`val${t}`,this._expected_input_types_function=()=>{const t=this.first_input_connection_type()||this.default_connection_type();return[t,t]},this._expected_output_types_function=()=>[this._expected_input_types_function()[0]],this._update_signature_if_required_bound=this.update_signature_if_required.bind(this),this._initialized=!1,this._spare_params_controller=new ia(this.node,this._context)}default_connection_type(){return ea[this._context]}create_connection_point(t,e){return na(this._context,t,e)}functions_overridden(){return this._functions_overridden}initialized(){return this._initialized}set_create_spare_params_from_inputs(t){this._create_spare_params_from_inputs=t}set_input_name_function(t){this._initialize_if_required(),this._input_name_function=t}set_output_name_function(t){this._initialize_if_required(),this._output_name_function=t}set_expected_input_types_function(t){this._initialize_if_required(),this._functions_overridden=!0,this._expected_input_types_function=t}set_expected_output_types_function(t){this._initialize_if_required(),this._functions_overridden=!0,this._expected_output_types_function=t}input_name(t){return this._wrapped_input_name_function(t)}output_name(t){return this._wrapped_output_name_function(t)}initializeNode(){this._initialized?console.warn(\\\\\\\"already initialized\\\\\\\",this.node):(this._initialized=!0,this.node.io.inputs.add_on_set_input_hook(\\\\\\\"_update_signature_if_required\\\\\\\",this._update_signature_if_required_bound),this.node.params.addOnSceneLoadHook(\\\\\\\"_update_signature_if_required\\\\\\\",this._update_signature_if_required_bound),this.node.params.onParamsCreated(\\\\\\\"_update_signature_if_required_bound\\\\\\\",this._update_signature_if_required_bound),this.node.addPostDirtyHook(\\\\\\\"_update_signature_if_required\\\\\\\",this._update_signature_if_required_bound),this._spare_params_controller.initialized()||this._spare_params_controller.initializeNode())}_initialize_if_required(){this._initialized||this.initializeNode()}get spare_params(){return this._spare_params_controller}update_signature_if_required(t){this.node.lifecycle.creationCompleted()&&this._connections_match_inputs()||(this.update_connection_types(),this.node.removeDirtyState(),this.node.scene().loadingController.isLoading()||this.make_successors_update_signatures())}make_successors_update_signatures(){const t=this.node.graphAllSuccessors();if(this.node.childrenAllowed()){const e=this.node.nodesByType(ns.INPUT),n=this.node.nodesByType(ns.OUTPUT);for(let n of e)t.push(n);for(let e of n)t.push(e)}for(let e of t){const t=e;t.io&&t.io.has_connection_points_controller&&t.io.connection_points.initialized()&&t.io.connection_points.update_signature_if_required(this.node)}}update_connection_types(){const t=this._wrapped_expected_input_types_function(),e=this._wrapped_expected_output_types_function(),n=[];for(let e=0;e<t.length;e++){const i=t[e],s=this.create_connection_point(this._wrapped_input_name_function(e),i);n.push(s)}const i=[];for(let t=0;t<e.length;t++){const n=e[t],s=this.create_connection_point(this._wrapped_output_name_function(t),n);i.push(s)}this.node.io.inputs.setNamedInputConnectionPoints(n),this.node.io.outputs.setNamedOutputConnectionPoints(i,!1),this._create_spare_params_from_inputs&&this._spare_params_controller.createSpareParameters()}_connections_match_inputs(){const t=this.node.io.inputs.namedInputConnectionPoints().map((t=>null==t?void 0:t.type())),e=this.node.io.outputs.namedOutputConnectionPoints().map((t=>null==t?void 0:t.type())),n=this._wrapped_expected_input_types_function(),i=this._wrapped_expected_output_types_function();if(n.length!=t.length)return!1;if(i.length!=e.length)return!1;for(let e=0;e<t.length;e++)if(t[e]!=n[e])return!1;for(let t=0;t<e.length;t++)if(e[t]!=i[t])return!1;return!0}_wrapped_expected_input_types_function(){if(this.node.scene().loadingController.isLoading()){const t=this.node.io.saved_connection_points_data.in();if(t)return t.map((t=>t.type))}return this._expected_input_types_function()}_wrapped_expected_output_types_function(){if(this.node.scene().loadingController.isLoading()){const t=this.node.io.saved_connection_points_data.out();if(t)return t.map((t=>t.type))}return this._expected_output_types_function()}_wrapped_input_name_function(t){if(this.node.scene().loadingController.isLoading()){const e=this.node.io.saved_connection_points_data.in();if(e)return e[t].name}return this._input_name_function(t)}_wrapped_output_name_function(t){if(this.node.scene().loadingController.isLoading()){const e=this.node.io.saved_connection_points_data.out();if(e)return e[t].name}return this._output_name_function(t)}first_input_connection_type(){return this.input_connection_type(0)}input_connection_type(t){const e=this.node.io.connections.inputConnections();if(e){const n=e[t];if(n)return n.src_connection_point().type()}}}class ra{constructor(t){this.node=t,this._connections=new Bo(this.node)}get connections(){return this._connections}get inputs(){return this._inputs=this._inputs||new Fo(this.node)}has_inputs(){return null!=this._inputs}get outputs(){return this._outputs=this._outputs||new Do(this.node)}has_outputs(){return null!=this._outputs}get connection_points(){return this._connection_points=this._connection_points||new sa(this.node,this.node.context())}get has_connection_points_controller(){return null!=this._connection_points}get saved_connection_points_data(){return this._saved_connection_points_data=this._saved_connection_points_data||new zo(this.node)}clear_saved_connection_points_data(){this._saved_connection_points_data&&(this._saved_connection_points_data.clear(),this._saved_connection_points_data=void 0)}}class oa{constructor(){}}class aa extends Mi{constructor(t,e=\\\\\\\"BaseNode\\\\\\\",n){super(t,e),this.params_init_value_overrides=n,this.containerController=new Tr(this),this.pv=new Po,this.p=new oa,this._initialized=!1}copy_param_values(t){const e=this.params.non_spare;for(let n of e){const e=t.params.get(n.name());e&&n.copy_value(e)}}get parentController(){return this._parent_controller=this._parent_controller||new qi(this)}static displayedInputNames(){return[]}get childrenControllerContext(){return this._children_controller_context}_create_children_controller(){if(this._children_controller_context)return new hs(this,this._children_controller_context)}get childrenController(){return this._children_controller=this._children_controller||this._create_children_controller()}childrenAllowed(){return null!=this._children_controller_context}get uiData(){return this._ui_data=this._ui_data||new Si(this)}get states(){return this._states=this._states||new ji(this)}get lifecycle(){return this._lifecycle=this._lifecycle||new us(this)}get serializer(){return this._serializer=this._serializer||new Sr(this)}get cookController(){return this._cook_controller=this._cook_controller||new Er(this)}get io(){return this._io=this._io||new ra(this)}get nameController(){return this._name_controller=this._name_controller||new Wi(this)}setName(t){this.nameController.setName(t)}_set_core_name(t){this._name=t}get params(){return this._params_controller=this._params_controller||new Oo(this)}initialize_base_and_node(){var t;this._initialized?console.warn(\\\\\\\"node already initialized\\\\\\\"):(this._initialized=!0,null===(t=this.displayNodeController)||void 0===t||t.initializeNode(),this.initializeBaseNode(),this.initializeNode(),this.polyNodeController&&this.polyNodeController.initializeNode())}initializeBaseNode(){}initializeNode(){}static type(){throw\\\\\\\"type to be overriden\\\\\\\"}type(){return this.constructor.type()}static context(){throw console.error(\\\\\\\"node has no node_context\\\\\\\",this),\\\\\\\"context requires override\\\\\\\"}context(){return this.constructor.context()}static require_webgl2(){return!1}require_webgl2(){return this.constructor.require_webgl2()}setParent(t){this.parentController.setParent(t)}parent(){return this.parentController.parent()}firstAncestorWithContext(t){return this.parentController.firstAncestorWithContext(t)}root(){return this._scene.root()}path(t){return this.parentController.path(t)}createParams(){}addParam(t,e,n,i){var s;return null===(s=this._params_controller)||void 0===s?void 0:s.addParam(t,e,n,i)}paramDefaultValue(t){return null}cook(t){return null}onCookEnd(t,e){this.cookController.registerOnCookEnd(t,e)}async compute(){var t,e;return this.isDirty()||(null===(e=null===(t=this.flags)||void 0===t?void 0:t.bypass)||void 0===e?void 0:e.active())?await this.containerController.compute():this.containerController.container()}_setContainer(t,e=null){this.containerController.container().set_content(t),null!=t&&(t.name||(t.name=this.path()),t.node||(t.node=this)),this.cookController.endCook(e)}createNode(t,e){var n;return null===(n=this.childrenController)||void 0===n?void 0:n.createNode(t,e)}create_operation_container(t,e,n){var i;return null===(i=this.childrenController)||void 0===i?void 0:i.create_operation_container(t,e,n)}removeNode(t){var e;null===(e=this.childrenController)||void 0===e||e.removeNode(t)}dispose(){var t,e;super.dispose(),this.setParent(null),this.io.inputs.dispose(),this.lifecycle.dispose(),null===(t=this.displayNodeController)||void 0===t||t.dispose(),this.nameController.dispose(),null===(e=this.childrenController)||void 0===e||e.dispose(),this.params.dispose()}children(){var t;return(null===(t=this.childrenController)||void 0===t?void 0:t.children())||[]}node(t){var e;return(null===(e=this.parentController)||void 0===e?void 0:e.findNode(t))||null}nodeSibbling(t){var e;const n=this.parent();if(n){const i=null===(e=n.childrenController)||void 0===e?void 0:e.childByName(t);if(i)return i}return null}nodesByType(t){var e;return(null===(e=this.childrenController)||void 0===e?void 0:e.nodesByType(t))||[]}setInput(t,e,n=0){this.io.inputs.setInput(t,e,n)}emit(t,e=null){this.scene().dispatchController.dispatch(this,t,e)}toJSON(t=!1){return this.serializer.toJSON(t)}async requiredModules(){}usedAssembler(){}integrationData(){}}class la extends aa{static context(){return ts.MANAGER}}class ca{constructor(t,e,n){this.type=t,this.init_value=e,this.options=n}}class ha{static BUTTON(t,e){return new ca(Cr.BUTTON,t,e)}static BOOLEAN(t,e){return new ca(Cr.BOOLEAN,t,e)}static COLOR(t,e){return t instanceof D.a&&(t=t.toArray()),new ca(Cr.COLOR,t,e)}static FLOAT(t,e){return new ca(Cr.FLOAT,t,e)}static FOLDER(t=null,e){return new ca(Cr.FOLDER,t,e)}static INTEGER(t,e){return new ca(Cr.INTEGER,t,e)}static RAMP(t=Ao.DEFAULT_VALUE,e){return new ca(Cr.RAMP,t,e)}static STRING(t=\\\\\\\"\\\\\\\",e){return new ca(Cr.STRING,t,e)}static VECTOR2(t,e){return t instanceof d.a&&(t=t.toArray()),new ca(Cr.VECTOR2,t,e)}static VECTOR3(t,e){return t instanceof p.a&&(t=t.toArray()),new ca(Cr.VECTOR3,t,e)}static VECTOR4(t,e){return t instanceof _.a&&(t=t.toArray()),new ca(Cr.VECTOR4,t,e)}static OPERATOR_PATH(t,e){return new ca(Cr.OPERATOR_PATH,t,e)}static NODE_PATH(t,e){return new ca(Cr.NODE_PATH,t,e)}static PARAM_PATH(t,e){return new ca(Cr.PARAM_PATH,t,e)}}class ua{}class da{constructor(t){this.scene=t}findObjectByMask(t){return this.findObjectByMaskInObject(t,this.scene.threejsScene())}findObjectByMaskInObject(t,e,n=\\\\\\\"\\\\\\\"){for(let i of e.children){const e=this._removeTrailingOrHeadingSlash(i.name),s=`${n=this._removeTrailingOrHeadingSlash(n)}/${e}`;if(ss.matchMask(s,t))return i;const r=this.findObjectByMaskInObject(t,i,s);if(r)return r}}objectsByMask(t){return this.objectsByMaskInObject(t,this.scene.threejsScene(),[],\\\\\\\"\\\\\\\")}objectsByMaskInObject(t,e,n=[],i=\\\\\\\"\\\\\\\"){for(let s of e.children){const e=this._removeTrailingOrHeadingSlash(s.name),r=`${i=this._removeTrailingOrHeadingSlash(i)}/${e}`;ss.matchMask(r,t)&&n.push(s),this.objectsByMaskInObject(t,s,n,r)}return n}_removeTrailingOrHeadingSlash(t){return\\\\\\\"/\\\\\\\"==t[0]&&(t=t.substr(1)),\\\\\\\"/\\\\\\\"==t[t.length-1]&&(t=t.substr(0,t.length-1)),t}}const pa={computeOnDirty:!1,callback:t=>{ma.update(t)}};function _a(t){return class extends t{constructor(){super(...arguments),this.autoUpdate=ha.BOOLEAN(1,pa)}}}_a(ua);class ma{constructor(t){this.node=t}async update(){const t=this.node.object,e=this.node.pv;e.autoUpdate!=t.autoUpdate&&(t.autoUpdate=e.autoUpdate)}static async update(t){t.sceneAutoUpdateController.update()}}var fa;!function(t){t.NONE=\\\\\\\"none\\\\\\\",t.COLOR=\\\\\\\"color\\\\\\\",t.TEXTURE=\\\\\\\"texture\\\\\\\"}(fa||(fa={}));const ga=[fa.NONE,fa.COLOR,fa.TEXTURE],va={computeOnDirty:!1,callback:t=>{xa.update(t)}};function ya(t){return class extends t{constructor(){super(...arguments),this.backgroundMode=ha.INTEGER(ga.indexOf(fa.NONE),{menu:{entries:ga.map(((t,e)=>({name:t,value:e})))},...va}),this.bgColor=ha.COLOR([0,0,0],{visibleIf:{backgroundMode:ga.indexOf(fa.COLOR)},...va}),this.bgTexture=ha.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{backgroundMode:ga.indexOf(fa.TEXTURE)},nodeSelection:{context:ts.COP},dependentOnFoundNode:!1,...va})}}}ya(ua);class xa{constructor(t){this.node=t}update(){const t=this.node.object,e=this.node.pv;if(e.backgroundMode==ga.indexOf(fa.NONE))t.background=null;else if(e.backgroundMode==ga.indexOf(fa.COLOR))t.background=e.bgColor;else{const n=e.bgTexture.nodeWithContext(ts.COP);n?n.compute().then((e=>{t.background=e.texture()})):this.node.states.error.set(\\\\\\\"bgTexture node not found\\\\\\\")}}static update(t){t.sceneBackgroundController.update()}}const ba={computeOnDirty:!1,callback:t=>{Ta.update(t)}};function wa(t){return class extends t{constructor(){super(...arguments),this.useEnvironment=ha.BOOLEAN(0,ba),this.environment=ha.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{useEnvironment:1},nodeSelection:{context:ts.COP},dependentOnFoundNode:!1,...ba})}}}wa(ua);class Ta{constructor(t){this.node=t}async update(){const t=this.node.object,e=this.node.pv;if(e.useEnvironment){const n=e.environment.nodeWithContext(ts.COP);n?n.compute().then((e=>{t.environment=e.texture()})):this.node.states.error.set(\\\\\\\"bgTexture node not found\\\\\\\")}else t.environment=null}static async update(t){t.sceneEnvController.update()}}class Aa{constructor(t,e=1,n=1e3){this.name=\\\\\\\"\\\\\\\",this.color=new D.a(t),this.near=e,this.far=n}clone(){return new Aa(this.color,this.near,this.far)}toJSON(){return{type:\\\\\\\"Fog\\\\\\\",color:this.color.getHex(),near:this.near,far:this.far}}}Aa.prototype.isFog=!0;class Ma{constructor(t,e=25e-5){this.name=\\\\\\\"\\\\\\\",this.color=new D.a(t),this.density=e}clone(){return new Ma(this.color,this.density)}toJSON(){return{type:\\\\\\\"FogExp2\\\\\\\",color:this.color.getHex(),density:this.density}}}Ma.prototype.isFogExp2=!0;const Ea={computeOnDirty:!1,callback:t=>{La.update(t)}};var Sa;!function(t){t.LINEAR=\\\\\\\"linear\\\\\\\",t.EXPONENTIAL=\\\\\\\"exponential\\\\\\\"}(Sa||(Sa={}));const Ca=[Sa.LINEAR,Sa.EXPONENTIAL];function Na(t){return class extends t{constructor(){super(...arguments),this.useFog=ha.BOOLEAN(0,Ea),this.fogType=ha.INTEGER(Ca.indexOf(Sa.EXPONENTIAL),{visibleIf:{useFog:1},menu:{entries:Ca.map(((t,e)=>({name:t,value:e})))},...Ea}),this.fogColor=ha.COLOR([1,1,1],{visibleIf:{useFog:1},...Ea}),this.fogNear=ha.FLOAT(1,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useFog:1,fogType:Ca.indexOf(Sa.LINEAR)},...Ea}),this.fogFar=ha.FLOAT(100,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useFog:1,fogType:Ca.indexOf(Sa.LINEAR)},...Ea}),this.fogDensity=ha.FLOAT(25e-5,{visibleIf:{useFog:1,fogType:Ca.indexOf(Sa.EXPONENTIAL)},...Ea})}}}Na(ua);class La{constructor(t){this.node=t}async update(){const t=this.node.object,e=this.node.pv;if(e.useFog)if(e.fogType==Ca.indexOf(Sa.LINEAR)){const n=this.fog2(e);t.fog=n,n.color=e.fogColor,n.near=e.fogNear,n.far=e.fogFar}else{const n=this.fogExp2(e);t.fog=this.fogExp2(e),n.color=e.fogColor,n.density=e.fogDensity}else{t.fog&&(t.fog=null)}}fog2(t){return this._fog=this._fog||new Aa(16777215,t.fogNear,t.fogFar)}fogExp2(t){return this._fogExp2=this._fogExp2||new Ma(16777215,t.fogDensity)}static async update(t){t.sceneFogController.update()}}const Oa={computeOnDirty:!1,callback:t=>{Ra.update(t)}};function Pa(t){return class extends t{constructor(){super(...arguments),this.useOverrideMaterial=ha.BOOLEAN(0,Oa),this.overrideMaterial=ha.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{useOverrideMaterial:1},nodeSelection:{context:ts.MAT},dependentOnFoundNode:!1,...Oa})}}}Pa(ua);class Ra{constructor(t){this.node=t}async update(){const t=this.node.object,e=this.node.pv;if(e.useOverrideMaterial){const n=e.overrideMaterial.nodeWithContext(ts.MAT);n?n.compute().then((e=>{t.overrideMaterial=e.material()})):this.node.states.error.set(\\\\\\\"bgTexture node not found\\\\\\\")}else t.overrideMaterial=null}static async update(t){t.SceneMaterialOverrideController.update()}}class Ia extends(Pa(wa(Na(ya(_a(ua)))))){}const Fa=new Ia;class Da extends la{constructor(){super(...arguments),this.paramsConfig=Fa,this._object=this._createScene(),this._queued_nodes_by_id=new Map,this.sceneAutoUpdateController=new ma(this),this.sceneBackgroundController=new xa(this),this.sceneEnvController=new Ta(this),this.sceneFogController=new La(this),this.sceneMaterialOverrideController=new Ra(this),this._children_controller_context=ts.OBJ}static type(){return\\\\\\\"obj\\\\\\\"}initializeNode(){this._object.matrixAutoUpdate=!1,this.lifecycle.add_on_child_add_hook(this._on_child_add.bind(this)),this.lifecycle.add_on_child_remove_hook(this._on_child_remove.bind(this))}_createScene(){const t=new vs;return t.name=\\\\\\\"/\\\\\\\",t.matrixAutoUpdate=!1,t}get object(){return this._object}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}_updateScene(){this.sceneAutoUpdateController.update(),this.sceneBackgroundController.update(),this.sceneEnvController.update(),this.sceneFogController.update(),this.sceneMaterialOverrideController.update()}_addToQueue(t){const e=t.graphNodeId();return this._queued_nodes_by_id.has(e)||this._queued_nodes_by_id.set(e,t),t}async processQueue(){this._updateScene();const t=new Map,e=[];this._queued_nodes_by_id.forEach(((n,i)=>{const s=`_____${n.renderOrder}__${n.path()}`;e.push(s),t.set(s,n)})),this._queued_nodes_by_id.clear();for(let n of e){const e=t.get(n);e&&(t.delete(n),this._addToScene(e))}}_update_object(t){return this.scene().loadingController.autoUpdating()?this._addToScene(t):this._addToQueue(t)}getParentForNode(t){if(t.attachableToHierarchy()){const e=t.io.inputs.input(0);return e?e.children_group:this._object}return null}_addToScene(t){var e;if(t.attachableToHierarchy()){const n=this.getParentForNode(t);n&&(t.usedInScene()?(null===(e=t.childrenDisplayController)||void 0===e||e.request_display_node_container(),t.addObjectToParent(n)):t.removeObjectFromParent())}}_removeFromScene(t){t.removeObjectFromParent()}areChildrenCooking(){const t=this.children();for(let e of t)if(e.cookController.isCooking()||e.isDisplayNodeCooking())return!0;return!1}addToParentTransform(t){this._update_object(t)}removeFromParentTransform(t){this._update_object(t)}_on_child_add(t){t&&this._update_object(t)}_on_child_remove(t){t&&this._removeFromScene(t)}}class Ba{constructor(t){this.scene=t,this._node_context_signatures={},this._instanciated_nodes_by_context_and_type={}}init(){this._root=new Da(this.scene),this._root.initialize_base_and_node(),this._root.params.init(),this._root._set_core_name(\\\\\\\"RootNode\\\\\\\")}root(){return this._root}_traverseNode(t,e){const n=t.children();if(n&&0!=n.length)for(let t of n)e(t),t.childrenController&&this._traverseNode(t,e)}clear(){var t;const e=this.root().children();for(let n of e)null===(t=this.root().childrenController)||void 0===t||t.removeNode(n)}node(t){return\\\\\\\"/\\\\\\\"===t?this.root():this.root().node(t)}allNodes(){let t=[this.root()],e=[this.root()],n=0;for(;e.length>0&&n<10;){const i=e.map((t=>t.childrenAllowed()?t.children():[])).flat();t=t.concat(i),e=i,n+=1}return t.flat()}nodesFromMask(t){const e=this.allNodes(),n=[];for(let i of e){const e=i.path();ss.matchMask(e,t)&&n.push(i)}return n}reset_node_context_signatures(){this._node_context_signatures={}}register_node_context_signature(t){t.childrenAllowed()&&t.childrenController&&(this._node_context_signatures[t.childrenController.node_context_signature()]=!0)}node_context_signatures(){return Object.keys(this._node_context_signatures).sort().map((t=>t.toLowerCase()))}addToInstanciatedNode(t){const e=t.context(),n=t.type();this._instanciated_nodes_by_context_and_type[e]=this._instanciated_nodes_by_context_and_type[e]||{},this._instanciated_nodes_by_context_and_type[e][n]=this._instanciated_nodes_by_context_and_type[e][n]||{},this._instanciated_nodes_by_context_and_type[e][n][t.graphNodeId()]=t}removeFromInstanciatedNode(t){const e=t.context(),n=t.type();delete this._instanciated_nodes_by_context_and_type[e][n][t.graphNodeId()]}nodesByType(t){const e=[];return this._traverseNode(this.scene.root(),(n=>{n.type()==t&&e.push(n)})),e}nodesByContextAndType(t,e){const n=[],i=this._instanciated_nodes_by_context_and_type[t];if(i){const t=i[e];if(t)for(let e of Object.keys(t))n.push(t[e])}return n}}class za{constructor(t){this.scene=t}toJSON(t=!1){const e={},n={};for(let i of this.scene.nodesController.allNodes()){const s=new Sr(i);e[i.graphNodeId()]=s.toJSON(t);const r=i.params.all;for(let t of r)n[t.graphNodeId()]=t.toJSON()}return{nodes_by_graph_node_id:e,params_by_graph_node_id:n}}}var ka;!function(t){t.auxclick=\\\\\\\"auxclick\\\\\\\",t.click=\\\\\\\"click\\\\\\\",t.contextmenu=\\\\\\\"contextmenu\\\\\\\",t.dblclick=\\\\\\\"dblclick\\\\\\\",t.mousedown=\\\\\\\"mousedown\\\\\\\",t.mouseenter=\\\\\\\"mouseenter\\\\\\\",t.mouseleave=\\\\\\\"mouseleave\\\\\\\",t.mousemove=\\\\\\\"mousemove\\\\\\\",t.mouseover=\\\\\\\"mouseover\\\\\\\",t.mouseout=\\\\\\\"mouseout\\\\\\\",t.mouseup=\\\\\\\"mouseup\\\\\\\",t.pointerlockchange=\\\\\\\"pointerlockchange\\\\\\\",t.pointerlockerror=\\\\\\\"pointerlockerror\\\\\\\",t.select=\\\\\\\"select\\\\\\\",t.wheel=\\\\\\\"wheel\\\\\\\"}(ka||(ka={}));const Ua=[ka.auxclick,ka.click,ka.contextmenu,ka.dblclick,ka.mousedown,ka.mouseenter,ka.mouseleave,ka.mousemove,ka.mouseover,ka.mouseout,ka.mouseup,ka.pointerlockchange,ka.pointerlockerror,ka.select,ka.wheel];class Ga extends pi{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"mouse\\\\\\\"}acceptedEventTypes(){return Ua.map((t=>`${t}`))}}class Va extends aa{constructor(){super(...arguments),this._cook_without_inputs_bound=this._cook_without_inputs.bind(this)}static context(){return ts.EVENT}initializeBaseNode(){this.uiData.setLayoutHorizontal(),this.addPostDirtyHook(\\\\\\\"cook_without_inputs_on_dirty\\\\\\\",this._cook_without_inputs_bound),this.io.inputs.set_depends_on_inputs(!1),this.io.connections.initInputs(),this.io.connection_points.spare_params.initializeNode()}_cook_without_inputs(){this.cookController.cookMainWithoutInputs()}cook(){this.cookController.endCook()}processEventViaConnectionPoint(t,e){e.event_listener?e.event_listener(t):this.processEvent(t)}processEvent(t){}async dispatchEventToOutput(t,e){this.run_on_dispatch_hook(t,e);const n=this.io.outputs.getOutputIndex(t);if(n>=0){const t=this.io.connections.outputConnections().filter((t=>t.output_index==n));let i;for(let n of t){i=n.node_dest;const t=i.io.inputs.namedInputConnectionPoints()[n.input_index];i.processEventViaConnectionPoint(e,t)}}else console.warn(`requested output '${t}' does not exist on node '${this.path()}'`)}onDispatch(t,e){this._on_dispatch_hooks_by_output_name=this._on_dispatch_hooks_by_output_name||new Map,h.pushOnArrayAtEntry(this._on_dispatch_hooks_by_output_name,t,e)}run_on_dispatch_hook(t,e){if(this._on_dispatch_hooks_by_output_name){const n=this._on_dispatch_hooks_by_output_name.get(t);if(n)for(let t of n)t(e)}}}var Ha;!function(t){t.CANVAS=\\\\\\\"canvas\\\\\\\",t.DOCUMENT=\\\\\\\"document\\\\\\\"}(Ha||(Ha={}));const ja=[Ha.CANVAS,Ha.DOCUMENT];class Wa{constructor(t){this.viewer=t,this._bound_listener_map_by_event_controller_type=new Map}updateEvents(t){const e=this.canvas();if(!e)return;const n=t.type();let i=this._bound_listener_map_by_event_controller_type.get(n);i||(i=new Map,this._bound_listener_map_by_event_controller_type.set(n,i)),i.forEach(((t,n)=>{this._eventOwner(t.data,e).removeEventListener(n,t.listener)})),i.clear();const s=e=>{this.processEvent(e,t)};for(let n of t.activeEventDatas()){this._eventOwner(n,e).addEventListener(n.type,s),i.set(n.type,{listener:s,data:n})}}_eventOwner(t,e){return\\\\\\\"resize\\\\\\\"==t.type?window:t.emitter==Ha.CANVAS?e:document}cameraNode(){return this.viewer.camerasController.cameraNode()}canvas(){return this.viewer.canvas()}init(){this.canvas&&this.viewer.scene().eventsDispatcher.traverseControllers((t=>{this.updateEvents(t)}))}registeredEventTypes(){const t=[];return this._bound_listener_map_by_event_controller_type.forEach((e=>{e.forEach(((e,n)=>{t.push(n)}))})),t}dispose(){const t=this.canvas();this._bound_listener_map_by_event_controller_type.forEach((e=>{t&&e.forEach(((e,n)=>{this._eventOwner(e.data,t).removeEventListener(n,e.listener)}))}))}processEvent(t,e){if(!this.canvas())return;const n={viewer:this.viewer,event:t,cameraNode:this.cameraNode()};e.processEvent(n)}}const qa={visibleIf:{active:1},callback:t=>{Ya.PARAM_CALLBACK_updateRegister(t)}};class Xa extends Va{constructor(){super(...arguments),this._activeEventDatas=[]}initializeBaseNode(){super.initializeBaseNode();this.lifecycle.add_on_add_hook((()=>{this.scene().eventsDispatcher.registerEventNode(this)})),this.lifecycle.add_delete_hook((()=>{this.scene().eventsDispatcher.unregisterEventNode(this)})),this.params.onParamsCreated(\\\\\\\"update_register\\\\\\\",(()=>{this._updateRegister()}))}processEvent(t){this.pv.active&&t.event&&this.dispatchEventToOutput(t.event.type,t)}static PARAM_CALLBACK_updateRegister(t){t._updateRegister()}_updateRegister(){this._updateActiveEventDatas(),this.scene().eventsDispatcher.updateViewerEventListeners(this)}_updateActiveEventDatas(){if(this._activeEventDatas=[],this.pv.active){const t=this.acceptedEventTypes();for(let e of t){const t=this.params.get(e);t&&t.value&&this._activeEventDatas.push({type:e,emitter:ja[this.pv.element]})}}}activeEventDatas(){return this._activeEventDatas}}class Ya extends Xa{acceptedEventTypes(){return[]}}const $a=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(!0,{callback:t=>{Ja.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=ha.INTEGER(ja.indexOf(Ha.CANVAS),{menu:{entries:ja.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.auxclick=ha.BOOLEAN(0,qa),this.click=ha.BOOLEAN(0,qa),this.contextmenu=ha.BOOLEAN(0,qa),this.dblclick=ha.BOOLEAN(0,qa),this.mousedown=ha.BOOLEAN(1,qa),this.mouseenter=ha.BOOLEAN(0,qa),this.mouseleave=ha.BOOLEAN(0,qa),this.mousemove=ha.BOOLEAN(1,qa),this.mouseover=ha.BOOLEAN(0,qa),this.mouseout=ha.BOOLEAN(0,qa),this.mouseup=ha.BOOLEAN(1,qa),this.pointerlockchange=ha.BOOLEAN(0,qa),this.pointerlockerror=ha.BOOLEAN(0,qa),this.select=ha.BOOLEAN(0,qa),this.wheel=ha.BOOLEAN(0,qa),this.ctrlKey=ha.BOOLEAN(0,{...qa,separatorBefore:!0}),this.altKey=ha.BOOLEAN(0,qa),this.shiftKey=ha.BOOLEAN(0,qa),this.metaKey=ha.BOOLEAN(0,qa)}};class Ja extends Xa{constructor(){super(...arguments),this.paramsConfig=$a}static type(){return\\\\\\\"mouse\\\\\\\"}acceptedEventTypes(){return Ua.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(Ua.map((t=>new ta(t,Qo.MOUSE)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.auxclick,this.p.click,this.p.dblclick,this.p.mousedown,this.p.mouseenter,this.p.mouseleave,this.p.mousemove,this.p.mouseout,this.p.mouseout,this.p.mouseup,this.p.pointerlockchange,this.p.pointerlockerror,this.p.select,this.p.wheel];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){if(!this.pv.active)return;if(!t.event)return;const e=t.event;e.ctrlKey==this.pv.ctrlKey&&e.shiftKey==this.pv.shiftKey&&e.altKey==this.pv.altKey&&e.metaKey==this.pv.metaKey&&this.dispatchEventToOutput(t.event.type,t)}}var Za;!function(t){t.pointerdown=\\\\\\\"pointerdown\\\\\\\",t.pointermove=\\\\\\\"pointermove\\\\\\\",t.pointerup=\\\\\\\"pointerup\\\\\\\"}(Za||(Za={}));const Ka=[Za.pointerdown,Za.pointermove,Za.pointerup];class Qa extends pi{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"pointer\\\\\\\"}acceptedEventTypes(){return Ka.map((t=>`${t}`))}}const tl=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(!0,{callback:t=>{el.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=ha.INTEGER(ja.indexOf(Ha.CANVAS),{menu:{entries:ja.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.pointerdown=ha.BOOLEAN(1,qa),this.pointermove=ha.BOOLEAN(0,qa),this.pointerup=ha.BOOLEAN(0,qa),this.ctrlKey=ha.BOOLEAN(0,{...qa,separatorBefore:!0}),this.altKey=ha.BOOLEAN(0,qa),this.shiftKey=ha.BOOLEAN(0,qa),this.metaKey=ha.BOOLEAN(0,qa)}};class el extends Xa{constructor(){super(...arguments),this.paramsConfig=tl}static type(){return\\\\\\\"pointer\\\\\\\"}acceptedEventTypes(){return Ka.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(Ka.map((t=>new ta(t,Qo.POINTER)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.pointerdown,this.p.pointermove,this.p.pointerup];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){if(!this.pv.active)return;if(!t.event)return;const e=t.event;e.ctrlKey==this.pv.ctrlKey&&e.shiftKey==this.pv.shiftKey&&e.altKey==this.pv.altKey&&e.metaKey==this.pv.metaKey&&this.dispatchEventToOutput(t.event.type,t)}}var nl,il;!function(t){t.SET_FRAME=\\\\\\\"setFrame\\\\\\\"}(nl||(nl={})),function(t){t.TIME_REACHED=\\\\\\\"timeReached\\\\\\\"}(il||(il={}));const sl=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(!0,{callback:(t,e)=>{rl.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=ha.INTEGER(0,{hidden:!0}),this.sceneLoaded=ha.BOOLEAN(1,qa),this.play=ha.BOOLEAN(1,qa),this.pause=ha.BOOLEAN(1,qa),this.tick=ha.BOOLEAN(1,{separatorAfter:!0,...qa}),this.treachedTime=ha.BOOLEAN(0,{callback:t=>{rl.PARAM_CALLBACK_update_time_dependency(t)}}),this.reachedTime=ha.INTEGER(10,{visibleIf:{treachedTime:1},range:[0,100],separatorAfter:!0}),this.setFrameValue=ha.INTEGER(1,{range:[0,100]}),this.setFrame=ha.BUTTON(null,{callback:t=>{rl.PARAM_CALLBACK_setFrame(t)}})}};class rl extends Xa{constructor(){super(...arguments),this.paramsConfig=sl}static type(){return\\\\\\\"scene\\\\\\\"}acceptedEventTypes(){return mi.map((t=>`${t}`))}dispose(){var t;null===(t=this.graph_node)||void 0===t||t.dispose(),super.dispose()}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(nl.SET_FRAME,Qo.BASE,this._onSetFrame.bind(this)),new ta(_i.PLAY,Qo.BASE,this._play.bind(this)),new ta(_i.PAUSE,Qo.BASE,this._pause.bind(this))]);const t=mi.map((t=>new ta(t,Qo.BASE)));t.push(new ta(il.TIME_REACHED,Qo.BASE)),this.io.outputs.setNamedOutputConnectionPoints(t),this.params.onParamsCreated(\\\\\\\"update_time_dependency\\\\\\\",(()=>{this.update_time_dependency()}))}_onSetFrame(t){this.scene().setFrame(this.pv.setFrameValue)}_play(t){this.scene().play()}_pause(t){this.scene().pause()}_onFrameUpdate(){this.scene().time()>=this.pv.reachedTime&&this.dispatchEventToOutput(il.TIME_REACHED,{})}update_time_dependency(){this.pv.treachedTime?(this.graph_node=this.graph_node||new Mi(this.scene(),\\\\\\\"scene_node_time_graph_node\\\\\\\"),this.graph_node.addGraphInput(this.scene().timeController.graphNode),this.graph_node.addPostDirtyHook(\\\\\\\"time_update\\\\\\\",this._onFrameUpdate.bind(this))):this.graph_node&&this.graph_node.graphDisconnectPredecessors()}static PARAM_CALLBACK_setFrame(t){t._onSetFrame({})}static PARAM_CALLBACK_update_time_dependency(t){t.update_time_dependency()}}var ol;!function(t){t.keydown=\\\\\\\"keydown\\\\\\\",t.keypress=\\\\\\\"keypress\\\\\\\",t.keyup=\\\\\\\"keyup\\\\\\\"}(ol||(ol={}));const al=[ol.keydown,ol.keypress,ol.keyup];class ll extends pi{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"keyboard\\\\\\\"}acceptedEventTypes(){return al.map((t=>`${t}`))}}const cl=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(!0,{callback:(t,e)=>{hl.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=ha.INTEGER(ja.indexOf(Ha.CANVAS),{menu:{entries:ja.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.keydown=ha.BOOLEAN(1,qa),this.keypress=ha.BOOLEAN(0,qa),this.keyup=ha.BOOLEAN(0,qa),this.keyCodes=ha.STRING(\\\\\\\"Digit1 KeyE ArrowDown\\\\\\\",qa),this.ctrlKey=ha.BOOLEAN(0,qa),this.altKey=ha.BOOLEAN(0,qa),this.shiftKey=ha.BOOLEAN(0,qa),this.metaKey=ha.BOOLEAN(0,qa)}};class hl extends Xa{constructor(){super(...arguments),this.paramsConfig=cl}static type(){return\\\\\\\"keyboard\\\\\\\"}acceptedEventTypes(){return al.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(al.map((t=>new ta(t,Qo.KEYBOARD)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.keydown,this.p.keypress,this.p.keyup];this.params.label.init(t.concat([this.p.keyCodes]),(()=>`${t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")} (${this.pv.keyCodes})`))}))}))}processEvent(t){if(!this.pv.active)return;if(!t.event)return;const e=t.event;if(e.ctrlKey!=this.pv.ctrlKey)return;if(e.shiftKey!=this.pv.shiftKey)return;if(e.altKey!=this.pv.altKey)return;if(e.metaKey!=this.pv.metaKey)return;if(this.pv.keyCodes.trim().length>0){if(!this.pv.keyCodes.split(\\\\\\\" \\\\\\\").includes(e.code))return}this.dispatchEventToOutput(t.event.type,t)}}var ul;!function(t){t.resize=\\\\\\\"resize\\\\\\\"}(ul||(ul={}));const dl=[ul.resize];class pl extends pi{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"window\\\\\\\"}acceptedEventTypes(){return dl.map((t=>`${t}`))}}const _l=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(!0,{callback:t=>{ml.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=ha.INTEGER(0,{hidden:!0}),this.resize=ha.BOOLEAN(1,qa)}};class ml extends Xa{constructor(){super(...arguments),this.paramsConfig=_l}static type(){return\\\\\\\"window\\\\\\\"}acceptedEventTypes(){return dl.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(dl.map((t=>new ta(t,Qo.POINTER)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.resize];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){this.pv.active&&t.event&&this.dispatchEventToOutput(t.event.type,t)}}var fl;!function(t){t.dragover=\\\\\\\"dragover\\\\\\\"}(fl||(fl={}));const gl=[fl.dragover];class vl extends pi{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"drag\\\\\\\"}acceptedEventTypes(){return gl.map((t=>`${t}`))}}var yl;!function(t){t.touchstart=\\\\\\\"touchstart\\\\\\\",t.touchmove=\\\\\\\"touchmove\\\\\\\",t.touchend=\\\\\\\"touchend\\\\\\\"}(yl||(yl={}));const xl=[yl.touchstart,yl.touchmove,yl.touchend];class bl extends pi{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"touch\\\\\\\"}acceptedEventTypes(){return xl.map((t=>`${t}`))}}const wl=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(!0,{callback:t=>{Tl.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=ha.INTEGER(ja.indexOf(Ha.CANVAS),{menu:{entries:ja.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.dragover=ha.BOOLEAN(1,qa),this.ctrlKey=ha.BOOLEAN(0,{...qa,separatorBefore:!0}),this.altKey=ha.BOOLEAN(0,qa),this.shiftKey=ha.BOOLEAN(0,qa),this.metaKey=ha.BOOLEAN(0,qa)}};class Tl extends Xa{constructor(){super(...arguments),this.paramsConfig=wl}static type(){return\\\\\\\"drag\\\\\\\"}acceptedEventTypes(){return gl.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(gl.map((t=>new ta(t,Qo.DRAG)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.dragover];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){if(!this.pv.active)return;if(!t.event)return;const e=t.event;e.ctrlKey==this.pv.ctrlKey&&e.shiftKey==this.pv.shiftKey&&e.altKey==this.pv.altKey&&e.metaKey==this.pv.metaKey&&this.dispatchEventToOutput(t.event.type,t)}}const Al=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(!0,{callback:t=>{Ml.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=ha.INTEGER(ja.indexOf(Ha.CANVAS),{menu:{entries:ja.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.touchstart=ha.BOOLEAN(1,qa),this.touchmove=ha.BOOLEAN(0,qa),this.touchend=ha.BOOLEAN(0,qa)}};class Ml extends Xa{constructor(){super(...arguments),this.paramsConfig=Al}static type(){return\\\\\\\"touch\\\\\\\"}acceptedEventTypes(){return xl.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(xl.map((t=>new ta(t,Qo.DRAG)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.touchstart,this.p.touchmove,this.p.touchend];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){this.pv.active&&t.event&&this.dispatchEventToOutput(t.event.type,t)}}class El{constructor(t){this.scene=t,this._controllers=[]}registerEventNode(t){const e=this._find_or_create_controller_for_node(t);e&&e.registerNode(t)}unregisterEventNode(t){const e=this._find_or_create_controller_for_node(t);e&&e.unregisterNode(t)}updateViewerEventListeners(t){const e=this._find_or_create_controller_for_node(t);e&&e.updateViewerEventListeners()}traverseControllers(t){for(let e of this._controllers)t(e)}_find_or_create_controller_for_node(t){switch(t.type()){case hl.type():return this.keyboardEventsController;case Ja.type():return this.mouseEventsController;case Tl.type():return this.dragEventsController;case el.type():return this.pointerEventsController;case rl.type():return this.sceneEventsController;case Ml.type():return this.touchEventsController;case ml.type():return this.windowEventsController}}get keyboardEventsController(){return this._keyboard_events_controller=this._keyboard_events_controller||this._create_controller(ll)}get mouseEventsController(){return this._mouse_events_controller=this._mouse_events_controller||this._create_controller(Ga)}get dragEventsController(){return this._drag_events_controller=this._drag_events_controller||this._create_controller(vl)}get pointerEventsController(){return this._pointer_events_controller=this._pointer_events_controller||this._create_controller(Qa)}get sceneEventsController(){return this._scene_events_controller=this._scene_events_controller||this._create_controller(fi)}get windowEventsController(){return this._window_events_controller=this._window_events_controller||this._create_controller(pl)}get touchEventsController(){return this._touch_events_controller=this._touch_events_controller||this._create_controller(bl)}_create_controller(t){const e=new t(this);return this._controllers.includes(e)||this._controllers.push(e),e}}class Sl{constructor(t){this.scene=t,this._referenced_nodes_by_src_param_id=new Map,this._referencing_params_by_referenced_node_id=new Map,this._referencing_params_by_all_named_node_ids=new Map}setReferenceFromParam(t,e){this._referenced_nodes_by_src_param_id.set(t.graphNodeId(),e),h.pushOnArrayAtEntry(this._referencing_params_by_referenced_node_id,e.graphNodeId(),t)}setNamedNodesFromParam(t){const e=t.decomposed_path.named_nodes();for(let n of e)h.pushOnArrayAtEntry(this._referencing_params_by_all_named_node_ids,n.graphNodeId(),t)}resetReferenceFromParam(t){const e=this._referenced_nodes_by_src_param_id.get(t.graphNodeId());if(e){h.popFromArrayAtEntry(this._referencing_params_by_referenced_node_id,e.graphNodeId(),t);const n=t.decomposed_path.named_nodes();for(let e of n)h.popFromArrayAtEntry(this._referencing_params_by_all_named_node_ids,e.graphNodeId(),t);this._referenced_nodes_by_src_param_id.delete(t.graphNodeId())}}referencing_params(t){return this._referencing_params_by_referenced_node_id.get(t.graphNodeId())}referencing_nodes(t){const e=this._referencing_params_by_referenced_node_id.get(t.graphNodeId());if(e){const t=new Map;for(let n of e){const e=n.node;t.set(e.graphNodeId(),e)}const n=[];return t.forEach((t=>{n.push(t)})),n}}nodes_referenced_by(t){const e=new Set([Cr.OPERATOR_PATH,Cr.NODE_PATH]),n=[];for(let i of t.params.all)e.has(i.type())&&n.push(i);const i=new Map,s=[];for(let t of n)this._check_param(t,i,s);for(let t of s)i.set(t.node.graphNodeId(),t.node);const r=[];return i.forEach((t=>{r.push(t)})),r}_check_param(t,e,n){if(t instanceof fo){const i=t.found_node(),s=t.found_param();return i&&e.set(i.graphNodeId(),i),void(s&&n.push(s))}}notifyNameUpdated(t){const e=this._referencing_params_by_all_named_node_ids.get(t.graphNodeId());if(e){const n=f.shallowClone(e);for(let e of n)e.notifyPathRebuildRequired(t)}}notifyParamsUpdated(t){const e=this._referencing_params_by_all_named_node_ids.get(t.graphNodeId());if(e){const n=f.shallowClone(e);for(let e of n)e.options.isSelectingParam()&&e.notifyTargetParamOwnerParamsUpdated(t)}}}var Cl;!function(t){t.MAX_FRAME_UPDATED=\\\\\\\"scene_maxFrameUpdated\\\\\\\",t.REALTIME_STATUS_UPDATED=\\\\\\\"scene_realtime_status_updated\\\\\\\",t.FRAME_UPDATED=\\\\\\\"scene_frame_updated\\\\\\\",t.PLAY_STATE_UPDATED=\\\\\\\"scene_play_state_updated\\\\\\\"}(Cl||(Cl={}));class Nl{constructor(t){this.scene=t,this._frame=0,this._time=0,this._realtimeState=!0,this._maxFrame=600,this._maxFrameLocked=!1,this._playing=!1,this._delta=0,this._graph_node=new Mi(t,\\\\\\\"time controller\\\\\\\")}get PLAY_EVENT_CONTEXT(){return this._PLAY_EVENT_CONTEXT=this._PLAY_EVENT_CONTEXT||{event:new Event(_i.PLAY)}}get PAUSE_EVENT_CONTEXT(){return this._PAUSE_EVENT_CONTEXT=this._PAUSE_EVENT_CONTEXT||{event:new Event(_i.PAUSE)}}get TICK_EVENT_CONTEXT(){return this._TICK_EVENT_CONTEXT=this._TICK_EVENT_CONTEXT||{event:new Event(_i.TICK)}}get graphNode(){return this._graph_node}frame(){return this._frame}time(){return this._time}maxFrame(){return this._maxFrame}maxFrameLocked(){return this._maxFrameLocked}realtimeState(){return this._realtimeState}setMaxFrame(t){this._maxFrame=Math.floor(t),this.scene.dispatchController.dispatch(this._graph_node,Cl.MAX_FRAME_UPDATED)}setMaxFrameLocked(t){this._maxFrameLocked=t,this.scene.dispatchController.dispatch(this._graph_node,Cl.MAX_FRAME_UPDATED)}setRealtimeState(t){this._realtimeState=t,this.scene.dispatchController.dispatch(this._graph_node,Cl.REALTIME_STATUS_UPDATED)}setTime(t,e=!0){var n,i;if(t!=this._time){if(this._time=t,null===(n=this._onBeforeTickCallbacks)||void 0===n||n.forEach((t=>t(this._delta))),e){const t=Math.floor(60*this._time),e=this._ensureFrameWithinBounds(t);t!=e?this.setFrame(e,!0):this._frame=t}this.scene.dispatchController.dispatch(this._graph_node,Cl.FRAME_UPDATED),this.scene.uniformsController.updateTimeDependentUniformOwners(),this.scene.cooker.block(),this.graphNode.setSuccessorsDirty(),this.scene.cooker.unblock(),this.scene.eventsDispatcher.sceneEventsController.processEvent(this.TICK_EVENT_CONTEXT),null===(i=this._onAfterTickCallbacks)||void 0===i||i.forEach((t=>t(this._delta)))}}setFrame(t,e=!0){t!=this._frame&&(t=this._ensureFrameWithinBounds(t))!=this._frame&&(this._frame=t,e&&this.setTime(this._frame/60,!1))}setFrameToStart(){this.setFrame(Nl.START_FRAME,!0)}incrementTimeIfPlaying(t){this._playing&&(this.scene.root().areChildrenCooking()||this.incrementTime(t))}incrementTime(t){if(this._realtimeState){this._delta=t;const e=this._time+this._delta;this.setTime(e)}else this.setFrame(this.frame()+1)}_ensureFrameWithinBounds(t){if(this._playing){if(this._maxFrameLocked&&t>this._maxFrame)return Nl.START_FRAME}else{if(this._maxFrameLocked&&t>this._maxFrame)return this._maxFrame;if(t<Nl.START_FRAME)return Nl.START_FRAME}return t}playing(){return!0===this._playing}pause(){1==this._playing&&(this._playing=!1,this.scene.dispatchController.dispatch(this._graph_node,Cl.PLAY_STATE_UPDATED),this.scene.eventsDispatcher.sceneEventsController.processEvent(this.PAUSE_EVENT_CONTEXT))}play(){!0!==this._playing&&(this._playing=!0,this.scene.dispatchController.dispatch(this._graph_node,Cl.PLAY_STATE_UPDATED),this.scene.eventsDispatcher.sceneEventsController.processEvent(this.PLAY_EVENT_CONTEXT))}togglePlayPause(){this.playing()?this.pause():this.play()}registerOnBeforeTick(t,e){this._registerCallback(t,e,this.registeredBeforeTickCallbacks())}unRegisterOnBeforeTick(t){this._unregisterCallback(t,this._onBeforeTickCallbacks)}registeredBeforeTickCallbacks(){return this._onBeforeTickCallbacks=this._onBeforeTickCallbacks||new Map}registerOnAfterTick(t,e){this._registerCallback(t,e,this.registeredAfterTickCallbacks())}unRegisterOnAfterTick(t){this._unregisterCallback(t,this._onAfterTickCallbacks)}registeredAfterTickCallbacks(){return this._onAfterTickCallbacks=this._onAfterTickCallbacks||new Map}_registerCallback(t,e,n){n.has(t)?console.warn(`callback ${t} already registered`):n.set(t,e)}_unregisterCallback(t,e){e&&e.delete(t)}}Nl.START_FRAME=0;class Ll{constructor(t){this.scene=t,this._time_dependent_uniform_owners={},this._time_dependent_uniform_owners_ids=null,this._resolution=new d.a(1,1),this._resolution_dependent_uniform_owners={},this._resolution_dependent_uniform_owners_ids=[]}addTimeDependentUniformOwner(t,e){this._time_dependent_uniform_owners[t]=e,this._time_dependent_uniform_owners_ids||(this._time_dependent_uniform_owners_ids=[]),this._time_dependent_uniform_owners_ids.includes(t)||this._time_dependent_uniform_owners_ids.push(t)}removeTimeDependentUniformOwner(t){if(delete this._time_dependent_uniform_owners[t],this._time_dependent_uniform_owners_ids){const e=this._time_dependent_uniform_owners_ids.indexOf(t);e>=0&&this._time_dependent_uniform_owners_ids.splice(e,1)}}updateTimeDependentUniformOwners(){const t=this.scene.time();if(this._time_dependent_uniform_owners_ids)for(let e of this._time_dependent_uniform_owners_ids){this._time_dependent_uniform_owners[e].time.value=t}}addResolutionDependentUniformOwner(t,e){this._resolution_dependent_uniform_owners[t]=e,this._resolution_dependent_uniform_owners_ids||(this._resolution_dependent_uniform_owners_ids=[]),this._resolution_dependent_uniform_owners_ids.includes(t)||this._resolution_dependent_uniform_owners_ids.push(t),this._resolution&&this.updateResolutionDependentUniforms(e)}removeResolutionDependentUniformOwner(t){if(delete this._resolution_dependent_uniform_owners[t],this._resolution_dependent_uniform_owners_ids){const e=this._resolution_dependent_uniform_owners_ids.indexOf(t);e>=0&&this._resolution_dependent_uniform_owners_ids.splice(e,1)}}updateResolutionDependentUniformOwners(t){this._resolution.copy(t);for(let t of this._resolution_dependent_uniform_owners_ids){const e=this._resolution_dependent_uniform_owners[t];this.updateResolutionDependentUniforms(e)}}updateResolutionDependentUniforms(t){t.resolution.value.x=this._resolution.x,t.resolution.value.y=this._resolution.y}}class Ol{constructor(t){this.scene=t,this._viewers_by_id=new Map}registerViewer(t){this._viewers_by_id.set(t.id(),t)}unregisterViewer(t){this._viewers_by_id.delete(t.id())}traverseViewers(t){this._viewers_by_id.forEach(t)}}class Pl{constructor(){this._require_webgl2=!1}require_webgl2(){return this._require_webgl2}set_require_webgl2(){this._require_webgl2||(this._require_webgl2=!0,li.renderersController.setRequireWebGL2())}}class Rl{constructor(t){this._scene=t,this._onWindowResizeBound=this._onWindowResize.bind(this)}graphNode(){return this._coreGraphNode=this._coreGraphNode||this._createGraphNode()}_createGraphNode(){const t=new Mi(this._scene,\\\\\\\"SceneWindowController\\\\\\\");return window.addEventListener(\\\\\\\"resize\\\\\\\",this._onWindowResizeBound),t}_onWindowResize(){this.graphNode().setSuccessorsDirty()}dispose(){window.removeEventListener(\\\\\\\"resize\\\\\\\",this._onWindowResizeBound)}}class Il{constructor(){this._params_by_id=new Map,this._assets_root=null}register_param(t){this._params_by_id.set(t.graphNodeId(),t)}deregister_param(t){this._params_by_id.delete(t.graphNodeId())}traverse_params(t){this._params_by_id.forEach(((e,n)=>{t(e)}))}root(){return this._assets_root}setRoot(t){\\\\\\\"\\\\\\\"==t&&(t=null),this._assets_root=t}}class Fl{constructor(){this._cameras_controller=new r(this),this._cooker=new o(this),this.cookController=new a,this._graph=new l,this._missing_expression_references_controller=new Ti(this),this._expressions_controller=new ui,this._nodes_controller=new Ba(this),this._objects_controller=new da(this),this._references_controller=new Sl(this),this._time_controller=new Nl(this),this._read_only=!1,this._graph.setScene(this),this.nodesController.init()}threejsScene(){return this.root().object}setUuid(t){return this._uuid=t}get uuid(){return this._uuid}setName(t){return t=ss.sanitizeName(t),this._name=t}name(){return this._name}get camerasController(){return this._cameras_controller}mainCameraNode(){return this.camerasController.mainCameraNode()}get cooker(){return this._cooker}get assets(){return this._assets_controller=this._assets_controller||new Il}async waitForCooksCompleted(){return this.cookController.waitForCooksCompleted()}get dispatchController(){return this._dispatch_controller=this._dispatch_controller||new hi(this)}get eventsDispatcher(){return this._events_dispatcher=this._events_dispatcher||new El(this)}get graph(){return this._graph}get lifecycleController(){return this._lifecycle_controller=this._lifecycle_controller||new di(this)}get loadingController(){return this._loading_controller=this._loading_controller||new gi(this)}get missingExpressionReferencesController(){return this._missing_expression_references_controller}get expressionsController(){return this._expressions_controller}get nodesController(){return this._nodes_controller}createNode(t,e){return this.root().createNode(t,e)}nodesByType(t){return this.nodesController.nodesByType(t)}get objectsController(){return this._objects_controller}findObjectByMask(t){return this._objects_controller.findObjectByMask(t)}objectsByMask(t){return this._objects_controller.objectsByMask(t)}get referencesController(){return this._references_controller}get performance(){return this._performance=this._performance||new ci}get viewersRegister(){return this._viewers_register=this._viewers_register||new Ol(this)}get timeController(){return this._time_controller}setFrame(t){this.timeController.setFrame(t)}setFrameToStart(){this.timeController.setFrameToStart()}frame(){return this.timeController.frame()}time(){return this.timeController.time()}maxFrame(){return this.timeController.maxFrame()}play(){this.timeController.play()}pause(){this.timeController.pause()}get serializer(){return this._serializer=this._serializer||new za(this)}toJSON(){return this.serializer.toJSON()}markAsReadOnly(t){this._read_only||(this._read_only_requester=t,this._read_only=!0)}readOnly(){return this._read_only}readOnlyRequester(){return this._read_only_requester}get uniformsController(){return this._uniformsController=this._uniformsController||new Ll(this)}get webgl_controller(){return this._webgl_controller=this._webgl_controller||new Pl}get windowController(){return this._windowController=this._windowController||new Rl(this)}dispose(){var t;null===(t=this._windowController)||void 0===t||t.dispose()}batchUpdates(t){this._cooker.block(),t(),this._cooker.unblock()}node(t){return this.nodesController.node(t)}root(){return this.nodesController.root()}registerOnBeforeTick(t,e){this.timeController.registerOnBeforeTick(t,e)}unRegisterOnBeforeTick(t){this.timeController.unRegisterOnBeforeTick(t)}registeredBeforeTickCallbacks(){return this.timeController.registeredBeforeTickCallbacks()}registerOnAfterTick(t,e){this.timeController.registerOnAfterTick(t,e)}unRegisterOnAfterTick(t){this.timeController.unRegisterOnAfterTick(t)}registeredAfterTickCallbacks(){return this.timeController.registeredAfterTickCallbacks()}}class Dl{constructor(t){this._param=t}process_data(t){const e=t.raw_input;void 0!==e&&this._param.set(e),this.add_main(t)}add_main(t){}static spare_params_data(t){return this.params_data(!0,t)}static non_spare_params_data_value(t){return this.params_data_value(!1,t)}static params_data(t,e){let n;if(e){n={};const t=Object.keys(e);let i;for(let s of t)i=e[s],i&&(n[s]=e)}return n}static params_data_value(t,e){let n;if(e){n={};const i=Object.keys(e);let s;for(let r of i)if(s=e[r],null!=s){const e=s.options,i=s.overriden_options;if(e||i){const o=s;e&&e.spare==t?null!=o.raw_input&&(n[r]={complex_data:o}):i&&(n[r]={complex_data:o})}else{const t=s;(i||null!=t)&&(n[r]={simple_data:t})}}}return n}}const Bl=\\\\\\\"operationsComposer\\\\\\\";class zl{constructor(t,e,n){this._scene=t,this.states=e,this._node=n}static type(){throw\\\\\\\"type to be overriden\\\\\\\"}type(){return this.constructor.type()}static context(){throw console.error(\\\\\\\"operation has no node_context\\\\\\\",this),\\\\\\\"context requires override\\\\\\\"}context(){return this.constructor.context()}scene(){return this._scene}cook(t,e){}}zl.DEFAULT_PARAMS={},zl.INPUT_CLONED_STATE=[];class kl{constructor(t){this._node=t,this._nodes=[],this._optimized_root_node_names=new Set,this._operation_containers_by_name=new Map,this._node_inputs=[]}nodes(){return this._nodes}process_data(t,e){var n,i,s;if(!e)return;if(!this._node.childrenAllowed()||!this._node.childrenController)return;const{optimized_names:r}=kl.child_names_by_optimized_state(e);this._nodes=[],this._optimized_root_node_names=new Set;for(let t of r)kl.is_optimized_root_node(e,t)&&this._optimized_root_node_names.add(t);for(let r of this._optimized_root_node_names){const o=e[r],a=this._node.createNode(Bl);if(a){a.setName(r),this._nodes.push(a),(null===(n=o.flags)||void 0===n?void 0:n.display)&&(null===(s=null===(i=a.flags)||void 0===i?void 0:i.display)||void 0===s||s.set(!0));const e=this._create_operation_container(t,a,o,a.name());a.set_output_operation_container(e)}}for(let n of this._nodes){const i=n.output_operation_container();if(i){this._node_inputs=[],this._add_optimized_node_inputs(t,n,e,n.name(),i),n.io.inputs.setCount(this._node_inputs.length);for(let t=0;t<this._node_inputs.length;t++)n.setInput(t,this._node_inputs[t])}}}_add_optimized_node_inputs(t,e,n,i,s){var r;const o=n[i],a=o.inputs;if(a){for(let i of a)if(m.isString(i)){const o=n[i];if(o)if(kl.is_node_optimized(o)&&!this._optimized_root_node_names.has(i)){let r=this._operation_containers_by_name.get(i);r||(r=this._create_operation_container(t,e,o,i),r&&this._add_optimized_node_inputs(t,e,n,i,r)),s.add_input(r)}else{const t=null===(r=e.parent())||void 0===r?void 0:r.node(i);if(t){this._node_inputs.push(t);const n=this._node_inputs.length-1;e.add_input_config(s,{operation_input_index:s.current_input_index(),node_input_index:n}),s.increment_input_index()}}}1==o.cloned_state_overriden&&s.override_input_clone_state(o.cloned_state_overriden)}}static child_names_by_optimized_state(t){const e=Object.keys(t),n=[],i=[];for(let s of e){const e=t[s];li.playerMode()&&this.is_node_optimized(e)?n.push(s):i.push(s)}return{optimized_names:n,non_optimized_names:i}}static is_optimized_root_node_generic(t){return 0==t.outputs_count||t.non_optimized_count>0}static is_optimized_root_node(t,e){const n=this.node_outputs(t,e);let i=0;return n.forEach((e=>{const n=t[e];this.is_node_optimized(n)||i++})),this.is_optimized_root_node_generic({outputs_count:n.size,non_optimized_count:i})}static is_optimized_root_node_from_node(t){var e,n,i,s;if(!(null===(n=null===(e=t.flags)||void 0===e?void 0:e.optimize)||void 0===n?void 0:n.active()))return!1;const r=t.io.connections.outputConnections().map((t=>t.node_dest));let o=0;for(let t of r)(null===(s=null===(i=t.flags)||void 0===i?void 0:i.optimize)||void 0===s?void 0:s.active())||o++;return this.is_optimized_root_node_generic({outputs_count:r.length,non_optimized_count:o})}static node_outputs(t,e){const n=Object.keys(t),i=new Set;for(let s of n)if(s!=e){const n=t[s].inputs;if(n)for(let t of n)if(m.isString(t)){t==e&&i.add(s)}}return i}_create_operation_container(t,e,n,i){const s=Dl.non_spare_params_data_value(n.params),r=kl.operation_type(n),o=this._node.create_operation_container(r,i,s);return o&&(this._operation_containers_by_name.set(i,o),o.path_param_resolve_required()&&(e.add_operation_container_with_path_param_resolve_required(o),t.add_operations_composer_node_with_path_param_resolve_required(e))),o}static operation_type(t){return kl.is_node_bypassed(t)?\\\\\\\"null\\\\\\\":t.type}static is_node_optimized(t){const e=t.flags;return!(!e||!e.optimize)}static is_node_bypassed(t){const e=t.flags;return!(!e||!e.bypass)}}class Ul{constructor(t){this._node=t}process_data(t,e){var n;if(!e)return;if(!this._node.childrenAllowed()||!this._node.childrenController)return;const{optimized_names:i,non_optimized_names:s}=kl.child_names_by_optimized_state(e),r=[];for(let n of s){const i=e[n],s=i.type.toLowerCase(),o=Dl.non_spare_params_data_value(i.params);try{const t=this._node.createNode(s,o);t&&(t.setName(n),r.push(t))}catch(e){console.error(`error importing node: cannot create with type ${s}`,e);const i=ss.camelCase(s);try{const t=this._node.createNode(i,o);t&&(t.setName(n),r.push(t))}catch(e){const a=`${s}Network`;try{const t=this._node.createNode(a,o);t&&(t.setName(n),r.push(t))}catch(e){const n=`failed to create node with type '${s}', '${i}' or '${a}'`;t.report.addWarning(n),li.warn(n,e)}}}}if(i.length>0){const i=new kl(this._node);if(i.process_data(t,e),this._node.childrenController.context==ts.SOP){const t=Object.keys(e);let s;for(let i of t){(null===(n=e[i].flags)||void 0===n?void 0:n.display)&&(s=i)}if(s){const t=r.map((t=>t.name())),e=i.nodes();for(let n of e)t.push(n.name());if(!t.includes(s)){const t=`node '${`${this._node.path()}/${s}`}' with display flag has been optimized and does not exist in player mode`;console.error(t)}}}}const o=new Map;for(let n of r){if(e[n.name()]){const i=Yl.dispatch_node(n);o.set(n.name(),i),i.process_data(t,e[n.name()])}else li.warn(`possible import error for node ${n.name()}`)}for(let t of r){const n=o.get(t.name());n&&n.process_inputs_data(e[t.name()])}}}const Gl=[\\\\\\\"overriden_options\\\\\\\",\\\\\\\"type\\\\\\\"];class Vl{constructor(t){this._node=t}process_data(t,e){if(this.set_connection_points(e.connection_points),this._node.childrenAllowed()&&this.create_nodes(t,e.nodes),this.set_selection(e.selection),this._node.io.inputs.overrideClonedStateAllowed()){const t=e.cloned_state_overriden;t&&this._node.io.inputs.overrideClonedState(t)}this.set_flags(e),this.set_params(e.params),e.persisted_config&&this.set_persisted_config(e.persisted_config),this.from_data_custom(e)}process_inputs_data(t){const e=t.maxInputsCount;if(null!=e){const t=this._node.io.inputs.minCount();this._node.io.inputs.setCount(t,e)}this.setInputs(t.inputs)}process_ui_data(t,e){if(!e)return;if(li.playerMode())return;const n=this._node.uiData,i=e.pos;if(i){const t=(new d.a).fromArray(i);n.setPosition(t)}const s=e.comment;s&&n.setComment(s),this._node.childrenAllowed()&&this.process_nodes_ui_data(t,e.nodes)}create_nodes(t,e){if(!e)return;new Ul(this._node).process_data(t,e)}set_selection(t){if(this._node.childrenAllowed()&&this._node.childrenController&&t&&t.length>0){const e=[];t.forEach((t=>{const n=this._node.node(t);n&&e.push(n)})),this._node.childrenController.selection.set(e)}}set_flags(t){var e,n,i,s,r,o;const a=t.flags;if(a){const t=a.bypass;null!=t&&(null===(n=null===(e=this._node.flags)||void 0===e?void 0:e.bypass)||void 0===n||n.set(t));const l=a.display;null!=l&&(null===(s=null===(i=this._node.flags)||void 0===i?void 0:i.display)||void 0===s||s.set(l));const c=a.optimize;null!=c&&(null===(o=null===(r=this._node.flags)||void 0===r?void 0:r.optimize)||void 0===o||o.set(c))}}set_connection_points(t){t&&(t.in&&this._node.io.saved_connection_points_data.set_in(t.in),t.out&&this._node.io.saved_connection_points_data.set_out(t.out),this._node.io.has_connection_points_controller&&this._node.io.connection_points.update_signature_if_required())}setInputs(t){if(!t)return;let e;for(let n=0;n<t.length;n++)if(e=t[n],e&&this._node.parent())if(m.isString(e)){const t=e,i=this._node.nodeSibbling(t);this._node.setInput(n,i)}else{const t=this._node.nodeSibbling(e.node),n=e.index;this._node.setInput(n,t,e.output)}}process_nodes_ui_data(t,e){if(!e)return;if(li.playerMode())return;const n=Object.keys(e);for(let i of n){const n=this._node.node(i);if(n){const s=e[i];Yl.dispatch_node(n).process_ui_data(t,s)}}}set_params(t){if(!t)return;const e=Object.keys(t),n={};for(let i of e){const e=t[i],s=e.options;0;const r=e.type;let o,a=!1;this._node.params.has_param(i)&&(o=this._node.params.get(i),(o&&o.type()==r||null==r)&&(a=!0)),a?this._is_param_data_complex(e)?this._process_param_data_complex(i,e):this._process_param_data_simple(i,e):(n.namesToDelete=n.namesToDelete||[],n.namesToDelete.push(i),n.toAdd=n.toAdd||[],n.toAdd.push({name:i,type:r,init_value:e.default_value,raw_input:e.raw_input,options:s}))}const i=n.namesToDelete&&n.namesToDelete.length>0,s=n.toAdd&&n.toAdd.length>0;if(i||s){this._node.params.updateParams(n);for(let e of this._node.params.spare){const n=t[e.name()];!e.parent_param&&n&&(this._is_param_data_complex(n)?this._process_param_data_complex(e.name(),n):this._process_param_data_simple(e.name(),n))}}this._node.params.runOnSceneLoadHooks()}_process_param_data_simple(t,e){var n;null===(n=this._node.params.get(t))||void 0===n||n.set(e)}_process_param_data_complex(t,e){const n=this._node.params.get(t);n&&Yl.dispatch_param(n).process_data(e)}_is_param_data_complex(t){if(m.isString(t)||m.isNumber(t)||m.isArray(t)||m.isBoolean(t))return!1;if(m.isObject(t)){const e=Object.keys(t);for(let t of Gl)if(e.includes(t))return!0}return!1}set_persisted_config(t){this._node.persisted_config&&this._node.persisted_config.load(t)}from_data_custom(t){}}class Hl extends Dl{add_main(t){}}const jl=/\\\\\\\\n+/g;class Wl extends Dl{add_main(t){let e=t.raw_input;void 0!==e&&(e=e.replace(jl,\\\\\\\"\\\\n\\\\\\\"),this._param.set(e))}}class ql extends Dl{add_main(t){const e=t.raw_input;e&&this._param.set(e)}}class Xl extends Vl{create_nodes(t,e){const n=this._node.polyNodeController;n&&n.createChildNodesFromDefinition()}}class Yl{static dispatch_node(t){return t.polyNodeController?new Xl(t):new Vl(t)}static dispatch_param(t){return t instanceof ao?new Hl(t):t instanceof Mo?new Wl(t):t instanceof Ao?new ql(t):new Dl(t)}}class $l{constructor(t){this._warnings=[]}warnings(){return this._warnings}reset(){this._warnings=[]}addWarning(t){this._warnings.push(t)}}class Jl{constructor(t){this._data=t,this.report=new $l(this)}static async loadData(t){const e=new Jl(t);return await e.scene()}async scene(){const t=new Fl;t.loadingController.markAsLoading();const e=this._data.properties;if(e){const n=e.maxFrame||600;t.timeController.setMaxFrame(n);const i=e.maxFrameLocked;i&&t.timeController.setMaxFrameLocked(i);const s=e.realtimeState;null!=s&&t.timeController.setRealtimeState(s),t.setFrame(e.frame||Nl.START_FRAME),e.mainCameraNodePath&&t.camerasController.setMainCameraNodePath(e.mainCameraNodePath)}t.cooker.block(),this._base_operations_composer_nodes_with_resolve_required=void 0;const n=Yl.dispatch_node(t.root());return this._data.root&&n.process_data(this,this._data.root),this._data.ui&&n.process_ui_data(this,this._data.ui),this._resolve_operation_containers_with_path_param_resolve(),await t.loadingController.markAsLoaded(),t.cooker.unblock(),t}add_operations_composer_node_with_path_param_resolve_required(t){this._base_operations_composer_nodes_with_resolve_required||(this._base_operations_composer_nodes_with_resolve_required=[]),this._base_operations_composer_nodes_with_resolve_required.push(t)}_resolve_operation_containers_with_path_param_resolve(){if(this._base_operations_composer_nodes_with_resolve_required)for(let t of this._base_operations_composer_nodes_with_resolve_required)t.resolve_operation_containers_path_params()}}class Zl{static async importSceneData(t){null==t.editorMode&&(t.editorMode=!1);const{manifest:e,urlPrefix:n}=t,i=Object.keys(e.nodes),s=[];for(let t of i){const i=`${n}/root/${t}.json?t=${e.nodes[t]}`;s.push(i)}const r=[`${n}/root.json?t=${e.root}`,`${n}/properties.json?t=${e.properties}`];if(t.editorMode){const t=Date.now();r.push(`${n}/ui.json?t=${t}`)}for(let t of s)r.push(t);let o=0;const a=r.length,l=r.map((async e=>{const n=await fetch(e);return t.onProgress&&(o++,t.onProgress({count:o,total:a})),n})),c=await Promise.all(l),h=[];for(let t of c)h.push(await t.json());const u={root:h[0],properties:h[1]};let d=2;t.editorMode&&(u.ui=h[2],d+=1);const p={},_=Object.keys(e.nodes);for(let t=0;t<_.length;t++){const e=_[t],n=h[t+d];p[e]=n}return this.assemble(u,_,p)}static async assemble(t,e,n){const i={root:t.root,properties:t.properties,ui:t.ui};for(let t=0;t<e.length;t++){const s=e[t],r=n[s];this.insert_child_data(i.root,s,r)}return i}static insert_child_data(t,e,n){const i=e.split(\\\\\\\"/\\\\\\\");if(1==i.length)t.nodes||(t.nodes={}),t.nodes[e]=n;else{const e=i.shift(),s=i.join(\\\\\\\"/\\\\\\\"),r=t.nodes[e];this.insert_child_data(r,s,n)}}}async function Kl(t){const e=t.scenesSrcRoot||\\\\\\\"/src/polygonjs/scenes\\\\\\\",n=t.scenesSrcRoot||\\\\\\\"/public/polygonjs/scenes\\\\\\\",i=t.sceneName;const s=await async function(){const t=await fetch(`${e}/${i}/manifest.json`);return await t.json()}(),r=await async function(t){return await Zl.importSceneData({manifest:t,urlPrefix:`${n}/${i}`})}(s);return await async function(e){const n=new Jl(e),i=await n.scene(),s=i.mainCameraNode();if(!s)return void console.warn(\\\\\\\"no master camera found\\\\\\\");const r=m.isString(t.domElement)?document.getElementById(t.domElement):t.domElement;if(!r)return void console.warn(\\\\\\\"no element to mount the viewer onto\\\\\\\");const o=s.createViewer(r);return{scene:i,cameraNode:s,viewer:o}}(r)}const Ql=\\\\\\\"networks\\\\\\\",tc=\\\\\\\"misc\\\\\\\",ec=\\\\\\\"modifiers\\\\\\\",nc=Ql,ic=\\\\\\\"prop\\\\\\\",sc=\\\\\\\"timing\\\\\\\",rc=\\\\\\\"advanced\\\\\\\",oc=\\\\\\\"inputs\\\\\\\",ac=\\\\\\\"misc\\\\\\\",lc=Ql,cc=\\\\\\\"cameras\\\\\\\",hc=\\\\\\\"inputs\\\\\\\",uc=\\\\\\\"misc\\\\\\\",dc=\\\\\\\"scene\\\\\\\",pc=Ql,_c=\\\\\\\"color\\\\\\\",mc=\\\\\\\"conversion\\\\\\\",fc=\\\\\\\"geometry\\\\\\\",gc=\\\\\\\"globals\\\\\\\",vc=\\\\\\\"lighting\\\\\\\",yc=\\\\\\\"logic\\\\\\\",xc=\\\\\\\"math\\\\\\\",bc=\\\\\\\"physics\\\\\\\",wc=\\\\\\\"quat\\\\\\\",Tc=\\\\\\\"trigo\\\\\\\",Ac=\\\\\\\"util\\\\\\\",Mc=\\\\\\\"globals\\\\\\\",Ec=\\\\\\\"advanced\\\\\\\",Sc=\\\\\\\"lines\\\\\\\",Cc=\\\\\\\"meshes\\\\\\\",Nc=Ql,Lc=\\\\\\\"points\\\\\\\",Oc=\\\\\\\"volumes\\\\\\\",Pc=\\\\\\\"advanced\\\\\\\",Rc=\\\\\\\"audio\\\\\\\",Ic=\\\\\\\"cameras\\\\\\\",Fc=\\\\\\\"geometries\\\\\\\",Dc=\\\\\\\"lights\\\\\\\",Bc=Ql,zc=\\\\\\\"transform\\\\\\\",kc=\\\\\\\"css\\\\\\\",Uc=Ql,Gc=\\\\\\\"webgl\\\\\\\",Vc=\\\\\\\"advanced\\\\\\\",Hc=\\\\\\\"animation\\\\\\\",jc=\\\\\\\"attributes\\\\\\\",Wc=\\\\\\\"dynamics\\\\\\\",qc=\\\\\\\"inputs\\\\\\\",Xc=\\\\\\\"lights\\\\\\\",Yc=\\\\\\\"misc\\\\\\\",$c=\\\\\\\"modifiers\\\\\\\",Jc=Ql,Zc=\\\\\\\"primitives\\\\\\\",Kc=\\\\\\\"render\\\\\\\",Qc=\\\\\\\"blur\\\\\\\",th=\\\\\\\"color\\\\\\\",eh=\\\\\\\"effect\\\\\\\",nh=\\\\\\\"misc\\\\\\\",ih=Ql,sh=\\\\\\\"input animation clip\\\\\\\",rh=[sh,sh,sh,sh];class oh extends aa{constructor(){super(...arguments),this.flags=new Bi(this)}static context(){return ts.ANIM}static displayedInputNames(){return rh}initializeBaseNode(){this.io.outputs.setHasOneOutput()}setTimelineBuilder(t){this._setContainer(t)}}class ah extends Mi{constructor(t){super(t,\\\\\\\"CopyStamp\\\\\\\"),this._global_index=0}set_global_index(t){this._global_index=t,this.setDirty(),this.removeDirtyState()}value(t){return this._global_index}}class lh extends ah{}var ch,hh=n(8);!function(t){t.NONE=\\\\\\\"none\\\\\\\",t.POWER1=\\\\\\\"power1\\\\\\\",t.POWER2=\\\\\\\"power2\\\\\\\",t.POWER3=\\\\\\\"power3\\\\\\\",t.POWER4=\\\\\\\"power4\\\\\\\",t.BACK=\\\\\\\"back\\\\\\\",t.ELASTIC=\\\\\\\"elastic\\\\\\\",t.BOUNCE=\\\\\\\"bounce\\\\\\\",t.SLOW=\\\\\\\"slow\\\\\\\",t.STEPS=\\\\\\\"steps\\\\\\\",t.CIRC=\\\\\\\"circ\\\\\\\",t.EXPO=\\\\\\\"expo\\\\\\\",t.SINE=\\\\\\\"sine\\\\\\\"}(ch||(ch={}));const uh=[ch.NONE,ch.POWER1,ch.POWER2,ch.POWER3,ch.POWER4,ch.BACK,ch.ELASTIC,ch.BOUNCE,ch.SLOW,ch.STEPS,ch.CIRC,ch.EXPO,ch.SINE];var dh;!function(t){t.IN=\\\\\\\"in\\\\\\\",t.OUT=\\\\\\\"out\\\\\\\",t.IN_OUT=\\\\\\\"inOut\\\\\\\"}(dh||(dh={}));const ph=[dh.IN,dh.OUT,dh.IN_OUT];class _h{constructor(){this._debug=!1}setName(t){this._propertyName=t}setTargetValue(t){this._targetValue=t}name(){return this._propertyName}targetValue(){return this._targetValue}setDebug(t){this._debug=t}_printDebug(t){this._debug&&console.log(t)}clone(){const t=new _h;if(this._propertyName&&t.setName(this._propertyName),null!=this._targetValue){const e=m.isNumber(this._targetValue)?this._targetValue:this._targetValue.clone();t.setTargetValue(e)}return t}addToTimeline(t,e,n){const i=n.objects();i&&this._populateWithObjects(i,t,e);const s=n.node();s&&this._populateWithNode(s,t,e)}_populateWithObjects(t,e,n){if(this._printDebug([\\\\\\\"_populateWithObjects\\\\\\\",t]),!this._propertyName)return void li.warn(\\\\\\\"no property name given\\\\\\\");if(null==this._targetValue)return void li.warn(\\\\\\\"no target value given\\\\\\\");const i=e.operation(),s=e.updateCallback();for(let r of t){const t=this._sceneGraphProps(r,this._propertyName);if(t){let{targetProperty:o,toTarget:a,propertyNames:l}=t;const c=this._commonVars(e);if(s&&s.updateMatrix()){const t=r.matrixAutoUpdate;c.onStart=()=>{r.matrixAutoUpdate=!0},c.onComplete=()=>{r.matrixAutoUpdate=t,r.matrixAutoUpdate||r.updateMatrix()}}if(o instanceof hh.a&&this._targetValue instanceof hh.a){const t={value:0},e=o,n=(new hh.a).copy(o),i=this._targetValue;c.onUpdate=()=>{e.slerpQuaternions(n,i,t.value)},a=t,c.value=1}if(m.isNumber(this._targetValue)){if(m.isNumber(o))for(let t of l)c[t]=this.withOp(o,this._targetValue,i)}else if(!m.isNumber(o))for(let t of l)c[t]=this.withOp(o[t],this._targetValue[t],i);a&&this._startTimeline(e,n,c,a)}}}_sceneGraphProps(t,e){const n=e.split(\\\\\\\".\\\\\\\");if(!(n.length>1)){const n=t[e];let i=null;const s=[];return m.isNumber(n)?(i=t,s.push(e)):(i=n,this._targetValue instanceof d.a&&s.push(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"),this._targetValue instanceof p.a&&s.push(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"),this._targetValue instanceof _.a&&s.push(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"),this._targetValue,hh.a),{targetProperty:n,toTarget:i,propertyNames:s}}{const e=t[n.shift()];if(e){const t=n.join(\\\\\\\".\\\\\\\");return this._sceneGraphProps(e,t)}}}_populateWithNode(t,e,n){this._printDebug([\\\\\\\"_populateWithNode\\\\\\\",t]);const i=t.p[this._propertyName];this._printDebug([\\\\\\\"targetParam\\\\\\\",i]),i?i&&this._populateVarsForParam(i,e,n):li.warn(`${this._propertyName} not found on node ${t.path()}`)}_populateVarsForParam(t,e,n){switch(this._printDebug([\\\\\\\"_populateVarsForParam\\\\\\\",t]),t.type()){case Cr.INTEGER:return this._populateVarsForParamInteger(t,e,n);case Cr.FLOAT:return this._populateVarsForParamFloat(t,e,n);case Cr.VECTOR2:return this._populateVarsForParamVector2(t,e,n);case Cr.VECTOR3:return this._populateVarsForParamVector3(t,e,n);case Cr.COLOR:return this._populateVarsForParamColor(t,e,n);case Cr.VECTOR4:return this._populateVarsForParamVector4(t,e,n)}li.warn(`param type cannot be animated (yet): '${t.type()}' '${t.path()}'`)}_populateVarsForParamInteger(t,e,n){if(!m.isNumber(this._targetValue))return void li.warn(`TimelineBuilderProperty error: cannot animate integer param '${t.path()}' with targetValue`,this._targetValue);const i=this._commonVars(e),s={num:t.value};i.onUpdate=()=>{t.set(s.num)};const r=e.operation();i.num=this.withOp(t.value,this._targetValue,r),this._startTimeline(e,n,i,s)}_populateVarsForParamFloat(t,e,n){if(!m.isNumber(this._targetValue))return void li.warn(`TimelineBuilderProperty error: cannot animate float param '${t.path()}' with targetValue`,this._targetValue);const i=this._commonVars(e),s={num:t.value};i.onUpdate=()=>{t.set(s.num)};const r=e.operation();i.num=this.withOp(t.value,this._targetValue,r),this._startTimeline(e,n,i,s)}_populateVarsForParamVector2(t,e,n){if(!(this._targetValue instanceof d.a))return void li.warn(`TimelineBuilderProperty error: cannot animate vector2 param '${t.path()}' with targetValue`,this._targetValue);const i=this._commonVars(e),s=t.value.clone(),r=[0,0];i.onUpdate=()=>{s.toArray(r),t.set(r)};const o=e.operation();i.x=this.withOp(t.value.x,this._targetValue.x,o),i.y=this.withOp(t.value.y,this._targetValue.y,o),this._startTimeline(e,n,i,s)}_populateVarsForParamVector3(t,e,n){if(!(this._targetValue instanceof p.a))return void li.warn(`TimelineBuilderProperty error: cannot animate vector3 param '${t.path()}' with targetValue`,this._targetValue);const i=this._commonVars(e),s=t.value.clone(),r=[0,0,0];i.onUpdate=()=>{s.toArray(r),t.set(r)};const o=e.operation();i.x=this.withOp(t.value.x,this._targetValue.x,o),i.y=this.withOp(t.value.y,this._targetValue.y,o),i.z=this.withOp(t.value.z,this._targetValue.z,o),this._startTimeline(e,n,i,s)}_populateVarsForParamVector4(t,e,n){if(!(this._targetValue instanceof _.a))return void li.warn(`TimelineBuilderProperty error: cannot animate vector4 param '${t.path()}' with targetValue`,this._targetValue);const i=this._commonVars(e),s=t.value.clone(),r=[0,0,0,0];i.onUpdate=()=>{s.toArray(r),t.set(r)};const o=e.operation();i.x=this.withOp(t.value.x,this._targetValue.x,o),i.y=this.withOp(t.value.y,this._targetValue.y,o),i.z=this.withOp(t.value.z,this._targetValue.z,o),i.w=this.withOp(t.value.w,this._targetValue.w,o),this._startTimeline(e,n,i,s)}_populateVarsForParamColor(t,e,n){if(!(this._targetValue instanceof p.a))return void li.warn(`TimelineBuilderProperty error: cannot animate color param '${t.path()}' with targetValue`,this._targetValue);const i=this._commonVars(e),s=t.valuePreConversion(),r=new p.a(s.r,s.g,s.b),o=[0,0,0];i.onUpdate=()=>{r.toArray(o),t.set(o)};const a=e.operation();i.x=this.withOp(t.value.r,this._targetValue.x,a),i.y=this.withOp(t.value.g,this._targetValue.y,a),i.z=this.withOp(t.value.b,this._targetValue.z,a),this._startTimeline(e,n,i,r)}withOp(t,e,n){switch(n){case I_.SET:return e;case I_.ADD:return t+e;case I_.SUBSTRACT:return t-e}os.unreachable(n)}_commonVars(t){const e={duration:t.duration()},n=t.easing()||ch.NONE;n&&(e.ease=n);const i=t.delay();null!=i&&(e.delay=i);const s=t.repeatParams();return s&&(e.repeat=s.count,e.repeatDelay=s.delay,e.yoyo=s.yoyo),e}_startTimeline(t,e,n,i){const s=t.position(),r=s?s.toParameter():void 0;e.to(i,n,r)}}function mh(t){if(void 0===t)throw new ReferenceError(\\\\\\\"this hasn't been initialised - super() hasn't been called\\\\\\\");return t}function fh(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}var gh,vh,yh,xh,bh,wh,Th,Ah,Mh,Eh,Sh,Ch,Nh,Lh={autoSleep:120,force3D:\\\\\\\"auto\\\\\\\",nullTargetWarn:1,units:{lineHeight:\\\\\\\"\\\\\\\"}},Oh={duration:.5,overwrite:!1,delay:0},Ph=1e8,Rh=1e-8,Ih=2*Math.PI,Fh=Ih/4,Dh=0,Bh=Math.sqrt,zh=Math.cos,kh=Math.sin,Uh=function(t){return\\\\\\\"string\\\\\\\"==typeof t},Gh=function(t){return\\\\\\\"function\\\\\\\"==typeof t},Vh=function(t){return\\\\\\\"number\\\\\\\"==typeof t},Hh=function(t){return void 0===t},jh=function(t){return\\\\\\\"object\\\\\\\"==typeof t},Wh=function(t){return!1!==t},qh=function(){return\\\\\\\"undefined\\\\\\\"!=typeof window},Xh=function(t){return Gh(t)||Uh(t)},Yh=\\\\\\\"function\\\\\\\"==typeof ArrayBuffer&&ArrayBuffer.isView||function(){},$h=Array.isArray,Jh=/(?:-?\\\\.?\\\\d|\\\\.)+/gi,Zh=/[-+=.]*\\\\d+[.e\\\\-+]*\\\\d*[e\\\\-+]*\\\\d*/g,Kh=/[-+=.]*\\\\d+[.e-]*\\\\d*[a-z%]*/g,Qh=/[-+=.]*\\\\d+\\\\.?\\\\d*(?:e-|e\\\\+)?\\\\d*/gi,tu=/[+-]=-?[.\\\\d]+/,eu=/[^,'\\\\\\\"\\\\[\\\\]\\\\s]+/gi,nu=/[\\\\d.+\\\\-=]+(?:e[-+]\\\\d*)*/i,iu={},su={},ru=function(t){return(su=Ou(t,iu))&&vp},ou=function(t,e){return console.warn(\\\\\\\"Invalid property\\\\\\\",t,\\\\\\\"set to\\\\\\\",e,\\\\\\\"Missing plugin? gsap.registerPlugin()\\\\\\\")},au=function(t,e){return!e&&console.warn(t)},lu=function(t,e){return t&&(iu[t]=e)&&su&&(su[t]=e)||iu},cu=function(){return 0},hu={},uu=[],du={},pu={},_u={},mu=30,fu=[],gu=\\\\\\\"\\\\\\\",vu=function(t){var e,n,i=t[0];if(jh(i)||Gh(i)||(t=[t]),!(e=(i._gsap||{}).harness)){for(n=fu.length;n--&&!fu[n].targetTest(i););e=fu[n]}for(n=t.length;n--;)t[n]&&(t[n]._gsap||(t[n]._gsap=new Hd(t[n],e)))||t.splice(n,1);return t},yu=function(t){return t._gsap||vu(ld(t))[0]._gsap},xu=function(t,e,n){return(n=t[e])&&Gh(n)?t[e]():Hh(n)&&t.getAttribute&&t.getAttribute(e)||n},bu=function(t,e){return(t=t.split(\\\\\\\",\\\\\\\")).forEach(e)||t},wu=function(t){return Math.round(1e5*t)/1e5||0},Tu=function(t){return Math.round(1e7*t)/1e7||0},Au=function(t,e){for(var n=e.length,i=0;t.indexOf(e[i])<0&&++i<n;);return i<n},Mu=function(){var t,e,n=uu.length,i=uu.slice(0);for(du={},uu.length=0,t=0;t<n;t++)(e=i[t])&&e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0)._lazy=0)},Eu=function(t,e,n,i){uu.length&&Mu(),t.render(e,n,i),uu.length&&Mu()},Su=function(t){var e=parseFloat(t);return(e||0===e)&&(t+\\\\\\\"\\\\\\\").match(eu).length<2?e:Uh(t)?t.trim():t},Cu=function(t){return t},Nu=function(t,e){for(var n in e)n in t||(t[n]=e[n]);return t},Lu=function(t,e){for(var n in e)n in t||\\\\\\\"duration\\\\\\\"===n||\\\\\\\"ease\\\\\\\"===n||(t[n]=e[n])},Ou=function(t,e){for(var n in e)t[n]=e[n];return t},Pu=function t(e,n){for(var i in n)\\\\\\\"__proto__\\\\\\\"!==i&&\\\\\\\"constructor\\\\\\\"!==i&&\\\\\\\"prototype\\\\\\\"!==i&&(e[i]=jh(n[i])?t(e[i]||(e[i]={}),n[i]):n[i]);return e},Ru=function(t,e){var n,i={};for(n in t)n in e||(i[n]=t[n]);return i},Iu=function(t){var e=t.parent||vh,n=t.keyframes?Lu:Nu;if(Wh(t.inherit))for(;e;)n(t,e.vars.defaults),e=e.parent||e._dp;return t},Fu=function(t,e,n,i){void 0===n&&(n=\\\\\\\"_first\\\\\\\"),void 0===i&&(i=\\\\\\\"_last\\\\\\\");var s=e._prev,r=e._next;s?s._next=r:t[n]===e&&(t[n]=r),r?r._prev=s:t[i]===e&&(t[i]=s),e._next=e._prev=e.parent=null},Du=function(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove(t),t._act=0},Bu=function(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var n=t;n;)n._dirty=1,n=n.parent;return t},zu=function(t){for(var e=t.parent;e&&e.parent;)e._dirty=1,e.totalDuration(),e=e.parent;return t},ku=function t(e){return!e||e._ts&&t(e.parent)},Uu=function(t){return t._repeat?Gu(t._tTime,t=t.duration()+t._rDelay)*t:0},Gu=function(t,e){var n=Math.floor(t/=e);return t&&n===t?n-1:n},Vu=function(t,e){return(t-e._start)*e._ts+(e._ts>=0?0:e._dirty?e.totalDuration():e._tDur)},Hu=function(t){return t._end=Tu(t._start+(t._tDur/Math.abs(t._ts||t._rts||Rh)||0))},ju=function(t,e){var n=t._dp;return n&&n.smoothChildTiming&&t._ts&&(t._start=Tu(n._time-(t._ts>0?e/t._ts:((t._dirty?t.totalDuration():t._tDur)-e)/-t._ts)),Hu(t),n._dirty||Bu(n,t)),t},Wu=function(t,e){var n;if((e._time||e._initted&&!e._dur)&&(n=Vu(t.rawTime(),e),(!e._dur||id(0,e.totalDuration(),n)-e._tTime>Rh)&&e.render(n,!0)),Bu(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur<t.duration())for(n=t;n._dp;)n.rawTime()>=0&&n.totalTime(n._tTime),n=n._dp;t._zTime=-1e-8}},qu=function(t,e,n,i){return e.parent&&Du(e),e._start=Tu((Vh(n)?n:n||t!==vh?td(t,n,e):t._time)+e._delay),e._end=Tu(e._start+(e.totalDuration()/Math.abs(e.timeScale())||0)),function(t,e,n,i,s){void 0===n&&(n=\\\\\\\"_first\\\\\\\"),void 0===i&&(i=\\\\\\\"_last\\\\\\\");var r,o=t[i];if(s)for(r=e[s];o&&o[s]>r;)o=o._prev;o?(e._next=o._next,o._next=e):(e._next=t[n],t[n]=e),e._next?e._next._prev=e:t[i]=e,e._prev=o,e.parent=e._dp=t}(t,e,\\\\\\\"_first\\\\\\\",\\\\\\\"_last\\\\\\\",t._sort?\\\\\\\"_start\\\\\\\":0),Ju(e)||(t._recent=e),i||Wu(t,e),t},Xu=function(t,e){return(iu.ScrollTrigger||ou(\\\\\\\"scrollTrigger\\\\\\\",e))&&iu.ScrollTrigger.create(e,t)},Yu=function(t,e,n,i){return Jd(t,e),t._initted?!n&&t._pt&&(t._dur&&!1!==t.vars.lazy||!t._dur&&t.vars.lazy)&&Th!==Ld.frame?(uu.push(t),t._lazy=[e,i],1):void 0:1},$u=function t(e){var n=e.parent;return n&&n._ts&&n._initted&&!n._lock&&(n.rawTime()<0||t(n))},Ju=function(t){var e=t.data;return\\\\\\\"isFromStart\\\\\\\"===e||\\\\\\\"isStart\\\\\\\"===e},Zu=function(t,e,n,i){var s=t._repeat,r=Tu(e)||0,o=t._tTime/t._tDur;return o&&!i&&(t._time*=r/t._dur),t._dur=r,t._tDur=s?s<0?1e10:Tu(r*(s+1)+t._rDelay*s):r,o&&!i?ju(t,t._tTime=t._tDur*o):t.parent&&Hu(t),n||Bu(t.parent,t),t},Ku=function(t){return t instanceof Wd?Bu(t):Zu(t,t._dur)},Qu={_start:0,endTime:cu,totalDuration:cu},td=function t(e,n,i){var s,r,o,a=e.labels,l=e._recent||Qu,c=e.duration()>=Ph?l.endTime(!1):e._dur;return Uh(n)&&(isNaN(n)||n in a)?(r=n.charAt(0),o=\\\\\\\"%\\\\\\\"===n.substr(-1),s=n.indexOf(\\\\\\\"=\\\\\\\"),\\\\\\\"<\\\\\\\"===r||\\\\\\\">\\\\\\\"===r?(s>=0&&(n=n.replace(/=/,\\\\\\\"\\\\\\\")),(\\\\\\\"<\\\\\\\"===r?l._start:l.endTime(l._repeat>=0))+(parseFloat(n.substr(1))||0)*(o?(s<0?l:i).totalDuration()/100:1)):s<0?(n in a||(a[n]=c),a[n]):(r=parseFloat(n.charAt(s-1)+n.substr(s+1)),o&&i&&(r=r/100*($h(i)?i[0]:i).totalDuration()),s>1?t(e,n.substr(0,s-1),i)+r:c+r)):null==n?c:+n},ed=function(t,e,n){var i,s,r=Vh(e[1]),o=(r?2:1)+(t<2?0:1),a=e[o];if(r&&(a.duration=e[1]),a.parent=n,t){for(i=a,s=n;s&&!(\\\\\\\"immediateRender\\\\\\\"in i);)i=s.vars.defaults||{},s=Wh(s.vars.inherit)&&s.parent;a.immediateRender=Wh(i.immediateRender),t<2?a.runBackwards=1:a.startAt=e[o-1]}return new tp(e[0],a,e[o+1])},nd=function(t,e){return t||0===t?e(t):e},id=function(t,e,n){return n<t?t:n>e?e:n},sd=function(t){if(\\\\\\\"string\\\\\\\"!=typeof t)return\\\\\\\"\\\\\\\";var e=nu.exec(t);return e?t.substr(e.index+e[0].length):\\\\\\\"\\\\\\\"},rd=[].slice,od=function(t,e){return t&&jh(t)&&\\\\\\\"length\\\\\\\"in t&&(!e&&!t.length||t.length-1 in t&&jh(t[0]))&&!t.nodeType&&t!==yh},ad=function(t,e,n){return void 0===n&&(n=[]),t.forEach((function(t){var i;return Uh(t)&&!e||od(t,1)?(i=n).push.apply(i,ld(t)):n.push(t)}))||n},ld=function(t,e,n){return!Uh(t)||n||!xh&&Od()?$h(t)?ad(t,n):od(t)?rd.call(t,0):t?[t]:[]:rd.call((e||bh).querySelectorAll(t),0)},cd=function(t){return t.sort((function(){return.5-Math.random()}))},hd=function(t){if(Gh(t))return t;var e=jh(t)?t:{each:t},n=zd(e.ease),i=e.from||0,s=parseFloat(e.base)||0,r={},o=i>0&&i<1,a=isNaN(i)||o,l=e.axis,c=i,h=i;return Uh(i)?c=h={center:.5,edges:.5,end:1}[i]||0:!o&&a&&(c=i[0],h=i[1]),function(t,o,u){var d,p,_,m,f,g,v,y,x,b=(u||e).length,w=r[b];if(!w){if(!(x=\\\\\\\"auto\\\\\\\"===e.grid?0:(e.grid||[1,Ph])[1])){for(v=-Ph;v<(v=u[x++].getBoundingClientRect().left)&&x<b;);x--}for(w=r[b]=[],d=a?Math.min(x,b)*c-.5:i%x,p=a?b*h/x-.5:i/x|0,v=0,y=Ph,g=0;g<b;g++)_=g%x-d,m=p-(g/x|0),w[g]=f=l?Math.abs(\\\\\\\"y\\\\\\\"===l?m:_):Bh(_*_+m*m),f>v&&(v=f),f<y&&(y=f);\\\\\\\"random\\\\\\\"===i&&cd(w),w.max=v-y,w.min=y,w.v=b=(parseFloat(e.amount)||parseFloat(e.each)*(x>b?b-1:l?\\\\\\\"y\\\\\\\"===l?b/x:x:Math.max(x,b/x))||0)*(\\\\\\\"edges\\\\\\\"===i?-1:1),w.b=b<0?s-b:s,w.u=sd(e.amount||e.each)||0,n=n&&b<0?Dd(n):n}return b=(w[t]-w.min)/w.max||0,Tu(w.b+(n?n(b):b)*w.v)+w.u}},ud=function(t){var e=Math.pow(10,((t+\\\\\\\"\\\\\\\").split(\\\\\\\".\\\\\\\")[1]||\\\\\\\"\\\\\\\").length);return function(n){var i=Math.round(parseFloat(n)/t)*t*e;return(i-i%1)/e+(Vh(n)?0:sd(n))}},dd=function(t,e){var n,i,s=$h(t);return!s&&jh(t)&&(n=s=t.radius||Ph,t.values?(t=ld(t.values),(i=!Vh(t[0]))&&(n*=n)):t=ud(t.increment)),nd(e,s?Gh(t)?function(e){return i=t(e),Math.abs(i-e)<=n?i:e}:function(e){for(var s,r,o=parseFloat(i?e.x:e),a=parseFloat(i?e.y:0),l=Ph,c=0,h=t.length;h--;)(s=i?(s=t[h].x-o)*s+(r=t[h].y-a)*r:Math.abs(t[h]-o))<l&&(l=s,c=h);return c=!n||l<=n?t[c]:e,i||c===e||Vh(e)?c:c+sd(e)}:ud(t))},pd=function(t,e,n,i){return nd($h(t)?!e:!0===n?!!(n=0):!i,(function(){return $h(t)?t[~~(Math.random()*t.length)]:(n=n||1e-5)&&(i=n<1?Math.pow(10,(n+\\\\\\\"\\\\\\\").length-2):1)&&Math.floor(Math.round((t-n/2+Math.random()*(e-t+.99*n))/n)*n*i)/i}))},_d=function(t,e,n){return nd(n,(function(n){return t[~~e(n)]}))},md=function(t){for(var e,n,i,s,r=0,o=\\\\\\\"\\\\\\\";~(e=t.indexOf(\\\\\\\"random(\\\\\\\",r));)i=t.indexOf(\\\\\\\")\\\\\\\",e),s=\\\\\\\"[\\\\\\\"===t.charAt(e+7),n=t.substr(e+7,i-e-7).match(s?eu:Jh),o+=t.substr(r,e-r)+pd(s?n:+n[0],s?0:+n[1],+n[2]||1e-5),r=i+1;return o+t.substr(r,t.length-r)},fd=function(t,e,n,i,s){var r=e-t,o=i-n;return nd(s,(function(e){return n+((e-t)/r*o||0)}))},gd=function(t,e,n){var i,s,r,o=t.labels,a=Ph;for(i in o)(s=o[i]-e)<0==!!n&&s&&a>(s=Math.abs(s))&&(r=i,a=s);return r},vd=function(t,e,n){var i,s,r=t.vars,o=r[e];if(o)return i=r[e+\\\\\\\"Params\\\\\\\"],s=r.callbackScope||t,n&&uu.length&&Mu(),i?o.apply(s,i):o.call(s)},yd=function(t){return Du(t),t.scrollTrigger&&t.scrollTrigger.kill(!1),t.progress()<1&&vd(t,\\\\\\\"onInterrupt\\\\\\\"),t},xd=function(t){var e=(t=!t.name&&t.default||t).name,n=Gh(t),i=e&&!n&&t.init?function(){this._props=[]}:t,s={init:cu,render:cp,add:Yd,kill:up,modifier:hp,rawVars:0},r={targetTest:0,get:0,getSetter:rp,aliases:{},register:0};if(Od(),t!==i){if(pu[e])return;Nu(i,Nu(Ru(t,s),r)),Ou(i.prototype,Ou(s,Ru(t,r))),pu[i.prop=e]=i,t.targetTest&&(fu.push(i),hu[e]=1),e=(\\\\\\\"css\\\\\\\"===e?\\\\\\\"CSS\\\\\\\":e.charAt(0).toUpperCase()+e.substr(1))+\\\\\\\"Plugin\\\\\\\"}lu(e,i),t.register&&t.register(vp,i,_p)},bd=255,wd={aqua:[0,bd,bd],lime:[0,bd,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,bd],navy:[0,0,128],white:[bd,bd,bd],olive:[128,128,0],yellow:[bd,bd,0],orange:[bd,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[bd,0,0],pink:[bd,192,203],cyan:[0,bd,bd],transparent:[bd,bd,bd,0]},Td=function(t,e,n){return(6*(t=t<0?t+1:t>1?t-1:t)<1?e+(n-e)*t*6:t<.5?n:3*t<2?e+(n-e)*(2/3-t)*6:e)*bd+.5|0},Ad=function(t,e,n){var i,s,r,o,a,l,c,h,u,d,p=t?Vh(t)?[t>>16,t>>8&bd,t&bd]:0:wd.black;if(!p){if(\\\\\\\",\\\\\\\"===t.substr(-1)&&(t=t.substr(0,t.length-1)),wd[t])p=wd[t];else if(\\\\\\\"#\\\\\\\"===t.charAt(0)){if(t.length<6&&(i=t.charAt(1),s=t.charAt(2),r=t.charAt(3),t=\\\\\\\"#\\\\\\\"+i+i+s+s+r+r+(5===t.length?t.charAt(4)+t.charAt(4):\\\\\\\"\\\\\\\")),9===t.length)return[(p=parseInt(t.substr(1,6),16))>>16,p>>8&bd,p&bd,parseInt(t.substr(7),16)/255];p=[(t=parseInt(t.substr(1),16))>>16,t>>8&bd,t&bd]}else if(\\\\\\\"hsl\\\\\\\"===t.substr(0,3))if(p=d=t.match(Jh),e){if(~t.indexOf(\\\\\\\"=\\\\\\\"))return p=t.match(Zh),n&&p.length<4&&(p[3]=1),p}else o=+p[0]%360/360,a=+p[1]/100,i=2*(l=+p[2]/100)-(s=l<=.5?l*(a+1):l+a-l*a),p.length>3&&(p[3]*=1),p[0]=Td(o+1/3,i,s),p[1]=Td(o,i,s),p[2]=Td(o-1/3,i,s);else p=t.match(Jh)||wd.transparent;p=p.map(Number)}return e&&!d&&(i=p[0]/bd,s=p[1]/bd,r=p[2]/bd,l=((c=Math.max(i,s,r))+(h=Math.min(i,s,r)))/2,c===h?o=a=0:(u=c-h,a=l>.5?u/(2-c-h):u/(c+h),o=c===i?(s-r)/u+(s<r?6:0):c===s?(r-i)/u+2:(i-s)/u+4,o*=60),p[0]=~~(o+.5),p[1]=~~(100*a+.5),p[2]=~~(100*l+.5)),n&&p.length<4&&(p[3]=1),p},Md=function(t){var e=[],n=[],i=-1;return t.split(Sd).forEach((function(t){var s=t.match(Kh)||[];e.push.apply(e,s),n.push(i+=s.length+1)})),e.c=n,e},Ed=function(t,e,n){var i,s,r,o,a=\\\\\\\"\\\\\\\",l=(t+a).match(Sd),c=e?\\\\\\\"hsla(\\\\\\\":\\\\\\\"rgba(\\\\\\\",h=0;if(!l)return t;if(l=l.map((function(t){return(t=Ad(t,e,1))&&c+(e?t[0]+\\\\\\\",\\\\\\\"+t[1]+\\\\\\\"%,\\\\\\\"+t[2]+\\\\\\\"%,\\\\\\\"+t[3]:t.join(\\\\\\\",\\\\\\\"))+\\\\\\\")\\\\\\\"})),n&&(r=Md(t),(i=n.c).join(a)!==r.c.join(a)))for(o=(s=t.replace(Sd,\\\\\\\"1\\\\\\\").split(Kh)).length-1;h<o;h++)a+=s[h]+(~i.indexOf(h)?l.shift()||c+\\\\\\\"0,0,0,0)\\\\\\\":(r.length?r:l.length?l:n).shift());if(!s)for(o=(s=t.split(Sd)).length-1;h<o;h++)a+=s[h]+l[h];return a+s[o]},Sd=function(){var t,e=\\\\\\\"(?:\\\\\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\\\\\(.+?\\\\\\\\))|\\\\\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\\\\\b\\\\\\\";for(t in wd)e+=\\\\\\\"|\\\\\\\"+t+\\\\\\\"\\\\\\\\b\\\\\\\";return new RegExp(e+\\\\\\\")\\\\\\\",\\\\\\\"gi\\\\\\\")}(),Cd=/hsl[a]?\\\\(/,Nd=function(t){var e,n=t.join(\\\\\\\" \\\\\\\");if(Sd.lastIndex=0,Sd.test(n))return e=Cd.test(n),t[1]=Ed(t[1],e),t[0]=Ed(t[0],e,Md(t[1])),!0},Ld=function(){var t,e,n,i,s,r,o=Date.now,a=500,l=33,c=o(),h=c,u=1e3/240,d=u,p=[],_=function n(_){var m,f,g,v,y=o()-h,x=!0===_;if(y>a&&(c+=y-l),((m=(g=(h+=y)-c)-d)>0||x)&&(v=++i.frame,s=g-1e3*i.time,i.time=g/=1e3,d+=m+(m>=u?4:u-m),f=1),x||(t=e(n)),f)for(r=0;r<p.length;r++)p[r](g,s,v,_)};return i={time:0,frame:0,tick:function(){_(!0)},deltaRatio:function(t){return s/(1e3/(t||60))},wake:function(){wh&&(!xh&&qh()&&(yh=xh=window,bh=yh.document||{},iu.gsap=vp,(yh.gsapVersions||(yh.gsapVersions=[])).push(vp.version),ru(su||yh.GreenSockGlobals||!yh.gsap&&yh||{}),n=yh.requestAnimationFrame),t&&i.sleep(),e=n||function(t){return setTimeout(t,d-1e3*i.time+1|0)},Mh=1,_(2))},sleep:function(){(n?yh.cancelAnimationFrame:clearTimeout)(t),Mh=0,e=cu},lagSmoothing:function(t,e){a=t||1e8,l=Math.min(e,a,0)},fps:function(t){u=1e3/(t||240),d=1e3*i.time+u},add:function(t){p.indexOf(t)<0&&p.push(t),Od()},remove:function(t){var e;~(e=p.indexOf(t))&&p.splice(e,1)&&r>=e&&r--},_listeners:p}}(),Od=function(){return!Mh&&Ld.wake()},Pd={},Rd=/^[\\\\d.\\\\-M][\\\\d.\\\\-,\\\\s]/,Id=/[\\\\\\\"']/g,Fd=function(t){for(var e,n,i,s={},r=t.substr(1,t.length-3).split(\\\\\\\":\\\\\\\"),o=r[0],a=1,l=r.length;a<l;a++)n=r[a],e=a!==l-1?n.lastIndexOf(\\\\\\\",\\\\\\\"):n.length,i=n.substr(0,e),s[o]=isNaN(i)?i.replace(Id,\\\\\\\"\\\\\\\").trim():+i,o=n.substr(e+1).trim();return s},Dd=function(t){return function(e){return 1-t(1-e)}},Bd=function t(e,n){for(var i,s=e._first;s;)s instanceof Wd?t(s,n):!s.vars.yoyoEase||s._yoyo&&s._repeat||s._yoyo===n||(s.timeline?t(s.timeline,n):(i=s._ease,s._ease=s._yEase,s._yEase=i,s._yoyo=n)),s=s._next},zd=function(t,e){return t&&(Gh(t)?t:Pd[t]||function(t){var e,n,i,s,r=(t+\\\\\\\"\\\\\\\").split(\\\\\\\"(\\\\\\\"),o=Pd[r[0]];return o&&r.length>1&&o.config?o.config.apply(null,~t.indexOf(\\\\\\\"{\\\\\\\")?[Fd(r[1])]:(e=t,n=e.indexOf(\\\\\\\"(\\\\\\\")+1,i=e.indexOf(\\\\\\\")\\\\\\\"),s=e.indexOf(\\\\\\\"(\\\\\\\",n),e.substring(n,~s&&s<i?e.indexOf(\\\\\\\")\\\\\\\",i+1):i)).split(\\\\\\\",\\\\\\\").map(Su)):Pd._CE&&Rd.test(t)?Pd._CE(\\\\\\\"\\\\\\\",t):o}(t))||e},kd=function(t,e,n,i){void 0===n&&(n=function(t){return 1-e(1-t)}),void 0===i&&(i=function(t){return t<.5?e(2*t)/2:1-e(2*(1-t))/2});var s,r={easeIn:e,easeOut:n,easeInOut:i};return bu(t,(function(t){for(var e in Pd[t]=iu[t]=r,Pd[s=t.toLowerCase()]=n,r)Pd[s+(\\\\\\\"easeIn\\\\\\\"===e?\\\\\\\".in\\\\\\\":\\\\\\\"easeOut\\\\\\\"===e?\\\\\\\".out\\\\\\\":\\\\\\\".inOut\\\\\\\")]=Pd[t+\\\\\\\".\\\\\\\"+e]=r[e]})),r},Ud=function(t){return function(e){return e<.5?(1-t(1-2*e))/2:.5+t(2*(e-.5))/2}},Gd=function t(e,n,i){var s=n>=1?n:1,r=(i||(e?.3:.45))/(n<1?n:1),o=r/Ih*(Math.asin(1/s)||0),a=function(t){return 1===t?1:s*Math.pow(2,-10*t)*kh((t-o)*r)+1},l=\\\\\\\"out\\\\\\\"===e?a:\\\\\\\"in\\\\\\\"===e?function(t){return 1-a(1-t)}:Ud(a);return r=Ih/r,l.config=function(n,i){return t(e,n,i)},l},Vd=function t(e,n){void 0===n&&(n=1.70158);var i=function(t){return t?--t*t*((n+1)*t+n)+1:0},s=\\\\\\\"out\\\\\\\"===e?i:\\\\\\\"in\\\\\\\"===e?function(t){return 1-i(1-t)}:Ud(i);return s.config=function(n){return t(e,n)},s};bu(\\\\\\\"Linear,Quad,Cubic,Quart,Quint,Strong\\\\\\\",(function(t,e){var n=e<5?e+1:e;kd(t+\\\\\\\",Power\\\\\\\"+(n-1),e?function(t){return Math.pow(t,n)}:function(t){return t},(function(t){return 1-Math.pow(1-t,n)}),(function(t){return t<.5?Math.pow(2*t,n)/2:1-Math.pow(2*(1-t),n)/2}))})),Pd.Linear.easeNone=Pd.none=Pd.Linear.easeIn,kd(\\\\\\\"Elastic\\\\\\\",Gd(\\\\\\\"in\\\\\\\"),Gd(\\\\\\\"out\\\\\\\"),Gd()),Eh=7.5625,Ch=1/(Sh=2.75),kd(\\\\\\\"Bounce\\\\\\\",(function(t){return 1-Nh(1-t)}),Nh=function(t){return t<Ch?Eh*t*t:t<.7272727272727273?Eh*Math.pow(t-1.5/Sh,2)+.75:t<.9090909090909092?Eh*(t-=2.25/Sh)*t+.9375:Eh*Math.pow(t-2.625/Sh,2)+.984375}),kd(\\\\\\\"Expo\\\\\\\",(function(t){return t?Math.pow(2,10*(t-1)):0})),kd(\\\\\\\"Circ\\\\\\\",(function(t){return-(Bh(1-t*t)-1)})),kd(\\\\\\\"Sine\\\\\\\",(function(t){return 1===t?1:1-zh(t*Fh)})),kd(\\\\\\\"Back\\\\\\\",Vd(\\\\\\\"in\\\\\\\"),Vd(\\\\\\\"out\\\\\\\"),Vd()),Pd.SteppedEase=Pd.steps=iu.SteppedEase={config:function(t,e){void 0===t&&(t=1);var n=1/t,i=t+(e?0:1),s=e?1:0;return function(t){return((i*id(0,.99999999,t)|0)+s)*n}}},Oh.ease=Pd[\\\\\\\"quad.out\\\\\\\"],bu(\\\\\\\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\\\\\\\",(function(t){return gu+=t+\\\\\\\",\\\\\\\"+t+\\\\\\\"Params,\\\\\\\"}));var Hd=function(t,e){this.id=Dh++,t._gsap=this,this.target=t,this.harness=e,this.get=e?e.get:xu,this.set=e?e.getSetter:rp},jd=function(){function t(t){this.vars=t,this._delay=+t.delay||0,(this._repeat=t.repeat===1/0?-2:t.repeat||0)&&(this._rDelay=t.repeatDelay||0,this._yoyo=!!t.yoyo||!!t.yoyoEase),this._ts=1,Zu(this,+t.duration,1,1),this.data=t.data,Mh||Ld.wake()}var e=t.prototype;return e.delay=function(t){return t||0===t?(this.parent&&this.parent.smoothChildTiming&&this.startTime(this._start+t-this._delay),this._delay=t,this):this._delay},e.duration=function(t){return arguments.length?this.totalDuration(this._repeat>0?t+(t+this._rDelay)*this._repeat:t):this.totalDuration()&&this._dur},e.totalDuration=function(t){return arguments.length?(this._dirty=0,Zu(this,this._repeat<0?t:(t-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},e.totalTime=function(t,e){if(Od(),!arguments.length)return this._tTime;var n=this._dp;if(n&&n.smoothChildTiming&&this._ts){for(ju(this,t),!n._dp||n.parent||Wu(n,this);n&&n.parent;)n.parent._time!==n._start+(n._ts>=0?n._tTime/n._ts:(n.totalDuration()-n._tTime)/-n._ts)&&n.totalTime(n._tTime,!0),n=n.parent;!this.parent&&this._dp.autoRemoveChildren&&(this._ts>0&&t<this._tDur||this._ts<0&&t>0||!this._tDur&&!t)&&qu(this._dp,this,this._start-this._delay)}return(this._tTime!==t||!this._dur&&!e||this._initted&&Math.abs(this._zTime)===Rh||!t&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=t),Eu(this,t,e)),this},e.time=function(t,e){return arguments.length?this.totalTime(Math.min(this.totalDuration(),t+Uu(this))%(this._dur+this._rDelay)||(t?this._dur:0),e):this._time},e.totalProgress=function(t,e){return arguments.length?this.totalTime(this.totalDuration()*t,e):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.ratio},e.progress=function(t,e){return arguments.length?this.totalTime(this.duration()*(!this._yoyo||1&this.iteration()?t:1-t)+Uu(this),e):this.duration()?Math.min(1,this._time/this._dur):this.ratio},e.iteration=function(t,e){var n=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(t-1)*n,e):this._repeat?Gu(this._tTime,n)+1:1},e.timeScale=function(t){if(!arguments.length)return-1e-8===this._rts?0:this._rts;if(this._rts===t)return this;var e=this.parent&&this._ts?Vu(this.parent._time,this):this._tTime;return this._rts=+t||0,this._ts=this._ps||-1e-8===t?0:this._rts,zu(this.totalTime(id(-this._delay,this._tDur,e),!0)),Hu(this),this},e.paused=function(t){return arguments.length?(this._ps!==t&&(this._ps=t,t?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(Od(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,1===this.progress()&&Math.abs(this._zTime)!==Rh&&(this._tTime-=Rh)))),this):this._ps},e.startTime=function(t){if(arguments.length){this._start=t;var e=this.parent||this._dp;return e&&(e._sort||!this.parent)&&qu(e,this,t-this._delay),this}return this._start},e.endTime=function(t){return this._start+(Wh(t)?this.totalDuration():this.duration())/Math.abs(this._ts||1)},e.rawTime=function(t){var e=this.parent||this._dp;return e?t&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?Vu(e.rawTime(t),this):this._tTime:this._tTime},e.globalTime=function(t){for(var e=this,n=arguments.length?t:e.rawTime();e;)n=e._start+n/(e._ts||1),e=e._dp;return n},e.repeat=function(t){return arguments.length?(this._repeat=t===1/0?-2:t,Ku(this)):-2===this._repeat?1/0:this._repeat},e.repeatDelay=function(t){if(arguments.length){var e=this._time;return this._rDelay=t,Ku(this),e?this.time(e):this}return this._rDelay},e.yoyo=function(t){return arguments.length?(this._yoyo=t,this):this._yoyo},e.seek=function(t,e){return this.totalTime(td(this,t),Wh(e))},e.restart=function(t,e){return this.play().totalTime(t?-this._delay:0,Wh(e))},e.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},e.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},e.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},e.resume=function(){return this.paused(!1)},e.reversed=function(t){return arguments.length?(!!t!==this.reversed()&&this.timeScale(-this._rts||(t?-1e-8:0)),this):this._rts<0},e.invalidate=function(){return this._initted=this._act=0,this._zTime=-1e-8,this},e.isActive=function(){var t,e=this.parent||this._dp,n=this._start;return!(e&&!(this._ts&&this._initted&&e.isActive()&&(t=e.rawTime(!0))>=n&&t<this.endTime(!0)-Rh))},e.eventCallback=function(t,e,n){var i=this.vars;return arguments.length>1?(e?(i[t]=e,n&&(i[t+\\\\\\\"Params\\\\\\\"]=n),\\\\\\\"onUpdate\\\\\\\"===t&&(this._onUpdate=e)):delete i[t],this):i[t]},e.then=function(t){var e=this;return new Promise((function(n){var i=Gh(t)?t:Cu,s=function(){var t=e.then;e.then=null,Gh(i)&&(i=i(e))&&(i.then||i===e)&&(e.then=t),n(i),e.then=t};e._initted&&1===e.totalProgress()&&e._ts>=0||!e._tTime&&e._ts<0?s():e._prom=s}))},e.kill=function(){yd(this)},t}();Nu(jd.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-1e-8,_prom:0,_ps:!1,_rts:1});var Wd=function(t){function e(e,n){var i;return void 0===e&&(e={}),(i=t.call(this,e)||this).labels={},i.smoothChildTiming=!!e.smoothChildTiming,i.autoRemoveChildren=!!e.autoRemoveChildren,i._sort=Wh(e.sortChildren),vh&&qu(e.parent||vh,mh(i),n),e.reversed&&i.reverse(),e.paused&&i.paused(!0),e.scrollTrigger&&Xu(mh(i),e.scrollTrigger),i}fh(e,t);var n=e.prototype;return n.to=function(t,e,n){return ed(0,arguments,this),this},n.from=function(t,e,n){return ed(1,arguments,this),this},n.fromTo=function(t,e,n,i){return ed(2,arguments,this),this},n.set=function(t,e,n){return e.duration=0,e.parent=this,Iu(e).repeatDelay||(e.repeat=0),e.immediateRender=!!e.immediateRender,new tp(t,e,td(this,n),1),this},n.call=function(t,e,n){return qu(this,tp.delayedCall(0,t,e),n)},n.staggerTo=function(t,e,n,i,s,r,o){return n.duration=e,n.stagger=n.stagger||i,n.onComplete=r,n.onCompleteParams=o,n.parent=this,new tp(t,n,td(this,s)),this},n.staggerFrom=function(t,e,n,i,s,r,o){return n.runBackwards=1,Iu(n).immediateRender=Wh(n.immediateRender),this.staggerTo(t,e,n,i,s,r,o)},n.staggerFromTo=function(t,e,n,i,s,r,o,a){return i.startAt=n,Iu(i).immediateRender=Wh(i.immediateRender),this.staggerTo(t,e,i,s,r,o,a)},n.render=function(t,e,n){var i,s,r,o,a,l,c,h,u,d,p,_,m=this._time,f=this._dirty?this.totalDuration():this._tDur,g=this._dur,v=t<=0?0:Tu(t),y=this._zTime<0!=t<0&&(this._initted||!g);if(this!==vh&&v>f&&t>=0&&(v=f),v!==this._tTime||n||y){if(m!==this._time&&g&&(v+=this._time-m,t+=this._time-m),i=v,u=this._start,l=!(h=this._ts),y&&(g||(m=this._zTime),(t||!e)&&(this._zTime=t)),this._repeat){if(p=this._yoyo,a=g+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*a+t,e,n);if(i=Tu(v%a),v===f?(o=this._repeat,i=g):((o=~~(v/a))&&o===v/a&&(i=g,o--),i>g&&(i=g)),d=Gu(this._tTime,a),!m&&this._tTime&&d!==o&&(d=o),p&&1&o&&(i=g-i,_=1),o!==d&&!this._lock){var x=p&&1&d,b=x===(p&&1&o);if(o<d&&(x=!x),m=x?0:g,this._lock=1,this.render(m||(_?0:Tu(o*a)),e,!g)._lock=0,this._tTime=v,!e&&this.parent&&vd(this,\\\\\\\"onRepeat\\\\\\\"),this.vars.repeatRefresh&&!_&&(this.invalidate()._lock=1),m&&m!==this._time||l!==!this._ts||this.vars.onRepeat&&!this.parent&&!this._act)return this;if(g=this._dur,f=this._tDur,b&&(this._lock=2,m=x?g:-1e-4,this.render(m,!0),this.vars.repeatRefresh&&!_&&this.invalidate()),this._lock=0,!this._ts&&!l)return this;Bd(this,_)}}if(this._hasPause&&!this._forcing&&this._lock<2&&(c=function(t,e,n){var i;if(n>e)for(i=t._first;i&&i._start<=n;){if(!i._dur&&\\\\\\\"isPause\\\\\\\"===i.data&&i._start>e)return i;i=i._next}else for(i=t._last;i&&i._start>=n;){if(!i._dur&&\\\\\\\"isPause\\\\\\\"===i.data&&i._start<e)return i;i=i._prev}}(this,Tu(m),Tu(i)))&&(v-=i-(i=c._start)),this._tTime=v,this._time=i,this._act=!h,this._initted||(this._onUpdate=this.vars.onUpdate,this._initted=1,this._zTime=t,m=0),!m&&i&&!e&&(vd(this,\\\\\\\"onStart\\\\\\\"),this._tTime!==v))return this;if(i>=m&&t>=0)for(s=this._first;s;){if(r=s._next,(s._act||i>=s._start)&&s._ts&&c!==s){if(s.parent!==this)return this.render(t,e,n);if(s.render(s._ts>0?(i-s._start)*s._ts:(s._dirty?s.totalDuration():s._tDur)+(i-s._start)*s._ts,e,n),i!==this._time||!this._ts&&!l){c=0,r&&(v+=this._zTime=-1e-8);break}}s=r}else{s=this._last;for(var w=t<0?t:i;s;){if(r=s._prev,(s._act||w<=s._end)&&s._ts&&c!==s){if(s.parent!==this)return this.render(t,e,n);if(s.render(s._ts>0?(w-s._start)*s._ts:(s._dirty?s.totalDuration():s._tDur)+(w-s._start)*s._ts,e,n),i!==this._time||!this._ts&&!l){c=0,r&&(v+=this._zTime=w?-1e-8:Rh);break}}s=r}}if(c&&!e&&(this.pause(),c.render(i>=m?0:-1e-8)._zTime=i>=m?1:-1,this._ts))return this._start=u,Hu(this),this.render(t,e,n);this._onUpdate&&!e&&vd(this,\\\\\\\"onUpdate\\\\\\\",!0),(v===f&&f>=this.totalDuration()||!v&&m)&&(u!==this._start&&Math.abs(h)===Math.abs(this._ts)||this._lock||((t||!g)&&(v===f&&this._ts>0||!v&&this._ts<0)&&Du(this,1),e||t<0&&!m||!v&&!m&&f||(vd(this,v===f&&t>=0?\\\\\\\"onComplete\\\\\\\":\\\\\\\"onReverseComplete\\\\\\\",!0),this._prom&&!(v<f&&this.timeScale()>0)&&this._prom())))}return this},n.add=function(t,e){var n=this;if(Vh(e)||(e=td(this,e,t)),!(t instanceof jd)){if($h(t))return t.forEach((function(t){return n.add(t,e)})),this;if(Uh(t))return this.addLabel(t,e);if(!Gh(t))return this;t=tp.delayedCall(0,t)}return this!==t?qu(this,t,e):this},n.getChildren=function(t,e,n,i){void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===n&&(n=!0),void 0===i&&(i=-Ph);for(var s=[],r=this._first;r;)r._start>=i&&(r instanceof tp?e&&s.push(r):(n&&s.push(r),t&&s.push.apply(s,r.getChildren(!0,e,n)))),r=r._next;return s},n.getById=function(t){for(var e=this.getChildren(1,1,1),n=e.length;n--;)if(e[n].vars.id===t)return e[n]},n.remove=function(t){return Uh(t)?this.removeLabel(t):Gh(t)?this.killTweensOf(t):(Fu(this,t),t===this._recent&&(this._recent=this._last),Bu(this))},n.totalTime=function(e,n){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=Tu(Ld.time-(this._ts>0?e/this._ts:(this.totalDuration()-e)/-this._ts))),t.prototype.totalTime.call(this,e,n),this._forcing=0,this):this._tTime},n.addLabel=function(t,e){return this.labels[t]=td(this,e),this},n.removeLabel=function(t){return delete this.labels[t],this},n.addPause=function(t,e,n){var i=tp.delayedCall(0,e||cu,n);return i.data=\\\\\\\"isPause\\\\\\\",this._hasPause=1,qu(this,i,td(this,t))},n.removePause=function(t){var e=this._first;for(t=td(this,t);e;)e._start===t&&\\\\\\\"isPause\\\\\\\"===e.data&&Du(e),e=e._next},n.killTweensOf=function(t,e,n){for(var i=this.getTweensOf(t,n),s=i.length;s--;)qd!==i[s]&&i[s].kill(t,e);return this},n.getTweensOf=function(t,e){for(var n,i=[],s=ld(t),r=this._first,o=Vh(e);r;)r instanceof tp?Au(r._targets,s)&&(o?(!qd||r._initted&&r._ts)&&r.globalTime(0)<=e&&r.globalTime(r.totalDuration())>e:!e||r.isActive())&&i.push(r):(n=r.getTweensOf(s,e)).length&&i.push.apply(i,n),r=r._next;return i},n.tweenTo=function(t,e){e=e||{};var n,i=this,s=td(i,t),r=e,o=r.startAt,a=r.onStart,l=r.onStartParams,c=r.immediateRender,h=tp.to(i,Nu({ease:e.ease||\\\\\\\"none\\\\\\\",lazy:!1,immediateRender:!1,time:s,overwrite:\\\\\\\"auto\\\\\\\",duration:e.duration||Math.abs((s-(o&&\\\\\\\"time\\\\\\\"in o?o.time:i._time))/i.timeScale())||Rh,onStart:function(){if(i.pause(),!n){var t=e.duration||Math.abs((s-(o&&\\\\\\\"time\\\\\\\"in o?o.time:i._time))/i.timeScale());h._dur!==t&&Zu(h,t,0,1).render(h._time,!0,!0),n=1}a&&a.apply(h,l||[])}},e));return c?h.render(0):h},n.tweenFromTo=function(t,e,n){return this.tweenTo(e,Nu({startAt:{time:td(this,t)}},n))},n.recent=function(){return this._recent},n.nextLabel=function(t){return void 0===t&&(t=this._time),gd(this,td(this,t))},n.previousLabel=function(t){return void 0===t&&(t=this._time),gd(this,td(this,t),1)},n.currentLabel=function(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+Rh)},n.shiftChildren=function(t,e,n){void 0===n&&(n=0);for(var i,s=this._first,r=this.labels;s;)s._start>=n&&(s._start+=t,s._end+=t),s=s._next;if(e)for(i in r)r[i]>=n&&(r[i]+=t);return Bu(this)},n.invalidate=function(){var e=this._first;for(this._lock=0;e;)e.invalidate(),e=e._next;return t.prototype.invalidate.call(this)},n.clear=function(t){void 0===t&&(t=!0);for(var e,n=this._first;n;)e=n._next,this.remove(n),n=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),Bu(this)},n.totalDuration=function(t){var e,n,i,s=0,r=this,o=r._last,a=Ph;if(arguments.length)return r.timeScale((r._repeat<0?r.duration():r.totalDuration())/(r.reversed()?-t:t));if(r._dirty){for(i=r.parent;o;)e=o._prev,o._dirty&&o.totalDuration(),(n=o._start)>a&&r._sort&&o._ts&&!r._lock?(r._lock=1,qu(r,o,n-o._delay,1)._lock=0):a=n,n<0&&o._ts&&(s-=n,(!i&&!r._dp||i&&i.smoothChildTiming)&&(r._start+=n/r._ts,r._time-=n,r._tTime-=n),r.shiftChildren(-n,!1,-Infinity),a=0),o._end>s&&o._ts&&(s=o._end),o=e;Zu(r,r===vh&&r._time>s?r._time:s,1,1),r._dirty=0}return r._tDur},e.updateRoot=function(t){if(vh._ts&&(Eu(vh,Vu(t,vh)),Th=Ld.frame),Ld.frame>=mu){mu+=Lh.autoSleep||120;var e=vh._first;if((!e||!e._ts)&&Lh.autoSleep&&Ld._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Ld.sleep()}}},e}(jd);Nu(Wd.prototype,{_lock:0,_hasPause:0,_forcing:0});var qd,Xd=function(t,e,n,i,s,r,o){var a,l,c,h,u,d,p,_,m=new _p(this._pt,t,e,0,1,lp,null,s),f=0,g=0;for(m.b=n,m.e=i,n+=\\\\\\\"\\\\\\\",(p=~(i+=\\\\\\\"\\\\\\\").indexOf(\\\\\\\"random(\\\\\\\"))&&(i=md(i)),r&&(r(_=[n,i],t,e),n=_[0],i=_[1]),l=n.match(Qh)||[];a=Qh.exec(i);)h=a[0],u=i.substring(f,a.index),c?c=(c+1)%5:\\\\\\\"rgba(\\\\\\\"===u.substr(-5)&&(c=1),h!==l[g++]&&(d=parseFloat(l[g-1])||0,m._pt={_next:m._pt,p:u||1===g?u:\\\\\\\",\\\\\\\",s:d,c:\\\\\\\"=\\\\\\\"===h.charAt(1)?parseFloat(h.substr(2))*(\\\\\\\"-\\\\\\\"===h.charAt(0)?-1:1):parseFloat(h)-d,m:c&&c<4?Math.round:0},f=Qh.lastIndex);return m.c=f<i.length?i.substring(f,i.length):\\\\\\\"\\\\\\\",m.fp=o,(tu.test(i)||p)&&(m.e=0),this._pt=m,m},Yd=function(t,e,n,i,s,r,o,a,l){Gh(i)&&(i=i(s||0,t,r));var c,h=t[e],u=\\\\\\\"get\\\\\\\"!==n?n:Gh(h)?l?t[e.indexOf(\\\\\\\"set\\\\\\\")||!Gh(t[\\\\\\\"get\\\\\\\"+e.substr(3)])?e:\\\\\\\"get\\\\\\\"+e.substr(3)](l):t[e]():h,d=Gh(h)?l?ip:np:ep;if(Uh(i)&&(~i.indexOf(\\\\\\\"random(\\\\\\\")&&(i=md(i)),\\\\\\\"=\\\\\\\"===i.charAt(1)&&((c=parseFloat(u)+parseFloat(i.substr(2))*(\\\\\\\"-\\\\\\\"===i.charAt(0)?-1:1)+(sd(u)||0))||0===c)&&(i=c)),u!==i)return isNaN(u*i)||\\\\\\\"\\\\\\\"===i?(!h&&!(e in t)&&ou(e,i),Xd.call(this,t,e,u,i,d,a||Lh.stringFilter,l)):(c=new _p(this._pt,t,e,+u||0,i-(u||0),\\\\\\\"boolean\\\\\\\"==typeof h?ap:op,0,d),l&&(c.fp=l),o&&c.modifier(o,this,t),this._pt=c)},$d=function(t,e,n,i,s,r){var o,a,l,c;if(pu[t]&&!1!==(o=new pu[t]).init(s,o.rawVars?e[t]:function(t,e,n,i,s){if(Gh(t)&&(t=Zd(t,s,e,n,i)),!jh(t)||t.style&&t.nodeType||$h(t)||Yh(t))return Uh(t)?Zd(t,s,e,n,i):t;var r,o={};for(r in t)o[r]=Zd(t[r],s,e,n,i);return o}(e[t],i,s,r,n),n,i,r)&&(n._pt=a=new _p(n._pt,s,t,0,1,o.render,o,0,o.priority),n!==Ah))for(l=n._ptLookup[n._targets.indexOf(s)],c=o._props.length;c--;)l[o._props[c]]=a;return o},Jd=function t(e,n){var i,s,r,o,a,l,c,h,u,d,p,_,m,f=e.vars,g=f.ease,v=f.startAt,y=f.immediateRender,x=f.lazy,b=f.onUpdate,w=f.onUpdateParams,T=f.callbackScope,A=f.runBackwards,M=f.yoyoEase,E=f.keyframes,S=f.autoRevert,C=e._dur,N=e._startAt,L=e._targets,O=e.parent,P=O&&\\\\\\\"nested\\\\\\\"===O.data?O.parent._targets:L,R=\\\\\\\"auto\\\\\\\"===e._overwrite&&!gh,I=e.timeline;if(I&&(!E||!g)&&(g=\\\\\\\"none\\\\\\\"),e._ease=zd(g,Oh.ease),e._yEase=M?Dd(zd(!0===M?g:M,Oh.ease)):0,M&&e._yoyo&&!e._repeat&&(M=e._yEase,e._yEase=e._ease,e._ease=M),e._from=!I&&!!f.runBackwards,!I){if(_=(h=L[0]?yu(L[0]).harness:0)&&f[h.prop],i=Ru(f,hu),N&&N.render(-1,!0).kill(),v)if(Du(e._startAt=tp.set(L,Nu({data:\\\\\\\"isStart\\\\\\\",overwrite:!1,parent:O,immediateRender:!0,lazy:Wh(x),startAt:null,delay:0,onUpdate:b,onUpdateParams:w,callbackScope:T,stagger:0},v))),n<0&&!y&&!S&&e._startAt.render(-1,!0),y){if(n>0&&!S&&(e._startAt=0),C&&n<=0)return void(n&&(e._zTime=n))}else!1===S&&(e._startAt=0);else if(A&&C)if(N)!S&&(e._startAt=0);else if(n&&(y=!1),r=Nu({overwrite:!1,data:\\\\\\\"isFromStart\\\\\\\",lazy:y&&Wh(x),immediateRender:y,stagger:0,parent:O},i),_&&(r[h.prop]=_),Du(e._startAt=tp.set(L,r)),n<0&&e._startAt.render(-1,!0),y){if(!n)return}else t(e._startAt,Rh);for(e._pt=0,x=C&&Wh(x)||x&&!C,s=0;s<L.length;s++){if(c=(a=L[s])._gsap||vu(L)[s]._gsap,e._ptLookup[s]=d={},du[c.id]&&uu.length&&Mu(),p=P===L?s:P.indexOf(a),h&&!1!==(u=new h).init(a,_||i,e,p,P)&&(e._pt=o=new _p(e._pt,a,u.name,0,1,u.render,u,0,u.priority),u._props.forEach((function(t){d[t]=o})),u.priority&&(l=1)),!h||_)for(r in i)pu[r]&&(u=$d(r,i,e,p,a,P))?u.priority&&(l=1):d[r]=o=Yd.call(e,a,r,\\\\\\\"get\\\\\\\",i[r],p,P,0,f.stringFilter);e._op&&e._op[s]&&e.kill(a,e._op[s]),R&&e._pt&&(qd=e,vh.killTweensOf(a,d,e.globalTime(n)),m=!e.parent,qd=0),e._pt&&x&&(du[c.id]=1)}l&&pp(e),e._onInit&&e._onInit(e)}e._onUpdate=b,e._initted=(!e._op||e._pt)&&!m},Zd=function(t,e,n,i,s){return Gh(t)?t.call(e,n,i,s):Uh(t)&&~t.indexOf(\\\\\\\"random(\\\\\\\")?md(t):t},Kd=gu+\\\\\\\"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase\\\\\\\",Qd=(Kd+\\\\\\\",id,stagger,delay,duration,paused,scrollTrigger\\\\\\\").split(\\\\\\\",\\\\\\\"),tp=function(t){function e(e,n,i,s){var r;\\\\\\\"number\\\\\\\"==typeof n&&(i.duration=n,n=i,i=null);var o,a,l,c,h,u,d,p,_=(r=t.call(this,s?n:Iu(n))||this).vars,m=_.duration,f=_.delay,g=_.immediateRender,v=_.stagger,y=_.overwrite,x=_.keyframes,b=_.defaults,w=_.scrollTrigger,T=_.yoyoEase,A=n.parent||vh,M=($h(e)||Yh(e)?Vh(e[0]):\\\\\\\"length\\\\\\\"in n)?[e]:ld(e);if(r._targets=M.length?vu(M):au(\\\\\\\"GSAP target \\\\\\\"+e+\\\\\\\" not found. https://greensock.com\\\\\\\",!Lh.nullTargetWarn)||[],r._ptLookup=[],r._overwrite=y,x||v||Xh(m)||Xh(f)){if(n=r.vars,(o=r.timeline=new Wd({data:\\\\\\\"nested\\\\\\\",defaults:b||{}})).kill(),o.parent=o._dp=mh(r),o._start=0,x)Iu(Nu(o.vars.defaults,{ease:\\\\\\\"none\\\\\\\"})),v?M.forEach((function(t,e){return x.forEach((function(n,i){return o.to(t,n,i?\\\\\\\">\\\\\\\":e*v)}))})):x.forEach((function(t){return o.to(M,t,\\\\\\\">\\\\\\\")}));else{if(c=M.length,d=v?hd(v):cu,jh(v))for(h in v)~Kd.indexOf(h)&&(p||(p={}),p[h]=v[h]);for(a=0;a<c;a++){for(h in l={},n)Qd.indexOf(h)<0&&(l[h]=n[h]);l.stagger=0,T&&(l.yoyoEase=T),p&&Ou(l,p),u=M[a],l.duration=+Zd(m,mh(r),a,u,M),l.delay=(+Zd(f,mh(r),a,u,M)||0)-r._delay,!v&&1===c&&l.delay&&(r._delay=f=l.delay,r._start+=f,l.delay=0),o.to(u,l,d(a,u,M))}o.duration()?m=f=0:r.timeline=0}m||r.duration(m=o.duration())}else r.timeline=0;return!0!==y||gh||(qd=mh(r),vh.killTweensOf(M),qd=0),qu(A,mh(r),i),n.reversed&&r.reverse(),n.paused&&r.paused(!0),(g||!m&&!x&&r._start===Tu(A._time)&&Wh(g)&&ku(mh(r))&&\\\\\\\"nested\\\\\\\"!==A.data)&&(r._tTime=-1e-8,r.render(Math.max(0,-f))),w&&Xu(mh(r),w),r}fh(e,t);var n=e.prototype;return n.render=function(t,e,n){var i,s,r,o,a,l,c,h,u,d=this._time,p=this._tDur,_=this._dur,m=t>p-Rh&&t>=0?p:t<Rh?0:t;if(_){if(m!==this._tTime||!t||n||!this._initted&&this._tTime||this._startAt&&this._zTime<0!=t<0){if(i=m,h=this.timeline,this._repeat){if(o=_+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*o+t,e,n);if(i=Tu(m%o),m===p?(r=this._repeat,i=_):((r=~~(m/o))&&r===m/o&&(i=_,r--),i>_&&(i=_)),(l=this._yoyo&&1&r)&&(u=this._yEase,i=_-i),a=Gu(this._tTime,o),i===d&&!n&&this._initted)return this;r!==a&&(h&&this._yEase&&Bd(h,l),!this.vars.repeatRefresh||l||this._lock||(this._lock=n=1,this.render(Tu(o*r),!0).invalidate()._lock=0))}if(!this._initted){if(Yu(this,t<0?t:i,n,e))return this._tTime=0,this;if(_!==this._dur)return this.render(t,e,n)}if(this._tTime=m,this._time=i,!this._act&&this._ts&&(this._act=1,this._lazy=0),this.ratio=c=(u||this._ease)(i/_),this._from&&(this.ratio=c=1-c),i&&!d&&!e&&(vd(this,\\\\\\\"onStart\\\\\\\"),this._tTime!==m))return this;for(s=this._pt;s;)s.r(c,s.d),s=s._next;h&&h.render(t<0?t:!i&&l?-1e-8:h._dur*c,e,n)||this._startAt&&(this._zTime=t),this._onUpdate&&!e&&(t<0&&this._startAt&&this._startAt.render(t,!0,n),vd(this,\\\\\\\"onUpdate\\\\\\\")),this._repeat&&r!==a&&this.vars.onRepeat&&!e&&this.parent&&vd(this,\\\\\\\"onRepeat\\\\\\\"),m!==this._tDur&&m||this._tTime!==m||(t<0&&this._startAt&&!this._onUpdate&&this._startAt.render(t,!0,!0),(t||!_)&&(m===this._tDur&&this._ts>0||!m&&this._ts<0)&&Du(this,1),e||t<0&&!d||!m&&!d||(vd(this,m===p?\\\\\\\"onComplete\\\\\\\":\\\\\\\"onReverseComplete\\\\\\\",!0),this._prom&&!(m<p&&this.timeScale()>0)&&this._prom()))}}else!function(t,e,n,i){var s,r,o,a=t.ratio,l=e<0||!e&&(!t._start&&$u(t)&&(t._initted||!Ju(t))||(t._ts<0||t._dp._ts<0)&&!Ju(t))?0:1,c=t._rDelay,h=0;if(c&&t._repeat&&(h=id(0,t._tDur,e),r=Gu(h,c),o=Gu(t._tTime,c),t._yoyo&&1&r&&(l=1-l),r!==o&&(a=1-l,t.vars.repeatRefresh&&t._initted&&t.invalidate())),l!==a||i||t._zTime===Rh||!e&&t._zTime){if(!t._initted&&Yu(t,e,i,n))return;for(o=t._zTime,t._zTime=e||(n?Rh:0),n||(n=e&&!o),t.ratio=l,t._from&&(l=1-l),t._time=0,t._tTime=h,s=t._pt;s;)s.r(l,s.d),s=s._next;t._startAt&&e<0&&t._startAt.render(e,!0,!0),t._onUpdate&&!n&&vd(t,\\\\\\\"onUpdate\\\\\\\"),h&&t._repeat&&!n&&t.parent&&vd(t,\\\\\\\"onRepeat\\\\\\\"),(e>=t._tDur||e<0)&&t.ratio===l&&(l&&Du(t,1),n||(vd(t,l?\\\\\\\"onComplete\\\\\\\":\\\\\\\"onReverseComplete\\\\\\\",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,n);return this},n.targets=function(){return this._targets},n.invalidate=function(){return this._pt=this._op=this._startAt=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(),t.prototype.invalidate.call(this)},n.kill=function(t,e){if(void 0===e&&(e=\\\\\\\"all\\\\\\\"),!(t||e&&\\\\\\\"all\\\\\\\"!==e))return this._lazy=this._pt=0,this.parent?yd(this):this;if(this.timeline){var n=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,qd&&!0!==qd.vars.overwrite)._first||yd(this),this.parent&&n!==this.timeline.totalDuration()&&Zu(this,this._dur*this.timeline._tDur/n,0,1),this}var i,s,r,o,a,l,c,h=this._targets,u=t?ld(t):h,d=this._ptLookup,p=this._pt;if((!e||\\\\\\\"all\\\\\\\"===e)&&function(t,e){for(var n=t.length,i=n===e.length;i&&n--&&t[n]===e[n];);return n<0}(h,u))return\\\\\\\"all\\\\\\\"===e&&(this._pt=0),yd(this);for(i=this._op=this._op||[],\\\\\\\"all\\\\\\\"!==e&&(Uh(e)&&(a={},bu(e,(function(t){return a[t]=1})),e=a),e=function(t,e){var n,i,s,r,o=t[0]?yu(t[0]).harness:0,a=o&&o.aliases;if(!a)return e;for(i in n=Ou({},e),a)if(i in n)for(s=(r=a[i].split(\\\\\\\",\\\\\\\")).length;s--;)n[r[s]]=n[i];return n}(h,e)),c=h.length;c--;)if(~u.indexOf(h[c]))for(a in s=d[c],\\\\\\\"all\\\\\\\"===e?(i[c]=e,o=s,r={}):(r=i[c]=i[c]||{},o=e),o)(l=s&&s[a])&&(\\\\\\\"kill\\\\\\\"in l.d&&!0!==l.d.kill(a)||Fu(this,l,\\\\\\\"_pt\\\\\\\"),delete s[a]),\\\\\\\"all\\\\\\\"!==r&&(r[a]=1);return this._initted&&!this._pt&&p&&yd(this),this},e.to=function(t,n){return new e(t,n,arguments[2])},e.from=function(t,e){return ed(1,arguments)},e.delayedCall=function(t,n,i,s){return new e(n,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:n,onReverseComplete:n,onCompleteParams:i,onReverseCompleteParams:i,callbackScope:s})},e.fromTo=function(t,e,n){return ed(2,arguments)},e.set=function(t,n){return n.duration=0,n.repeatDelay||(n.repeat=0),new e(t,n)},e.killTweensOf=function(t,e,n){return vh.killTweensOf(t,e,n)},e}(jd);Nu(tp.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),bu(\\\\\\\"staggerTo,staggerFrom,staggerFromTo\\\\\\\",(function(t){tp[t]=function(){var e=new Wd,n=rd.call(arguments,0);return n.splice(\\\\\\\"staggerFromTo\\\\\\\"===t?5:4,0,0),e[t].apply(e,n)}}));var ep=function(t,e,n){return t[e]=n},np=function(t,e,n){return t[e](n)},ip=function(t,e,n,i){return t[e](i.fp,n)},sp=function(t,e,n){return t.setAttribute(e,n)},rp=function(t,e){return Gh(t[e])?np:Hh(t[e])&&t.setAttribute?sp:ep},op=function(t,e){return e.set(e.t,e.p,Math.round(1e6*(e.s+e.c*t))/1e6,e)},ap=function(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},lp=function(t,e){var n=e._pt,i=\\\\\\\"\\\\\\\";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;n;)i=n.p+(n.m?n.m(n.s+n.c*t):Math.round(1e4*(n.s+n.c*t))/1e4)+i,n=n._next;i+=e.c}e.set(e.t,e.p,i,e)},cp=function(t,e){for(var n=e._pt;n;)n.r(t,n.d),n=n._next},hp=function(t,e,n,i){for(var s,r=this._pt;r;)s=r._next,r.p===i&&r.modifier(t,e,n),r=s},up=function(t){for(var e,n,i=this._pt;i;)n=i._next,i.p===t&&!i.op||i.op===t?Fu(this,i,\\\\\\\"_pt\\\\\\\"):i.dep||(e=1),i=n;return!e},dp=function(t,e,n,i){i.mSet(t,e,i.m.call(i.tween,n,i.mt),i)},pp=function(t){for(var e,n,i,s,r=t._pt;r;){for(e=r._next,n=i;n&&n.pr>r.pr;)n=n._next;(r._prev=n?n._prev:s)?r._prev._next=r:i=r,(r._next=n)?n._prev=r:s=r,r=e}t._pt=i},_p=function(){function t(t,e,n,i,s,r,o,a,l){this.t=e,this.s=i,this.c=s,this.p=n,this.r=r||op,this.d=o||this,this.set=a||ep,this.pr=l||0,this._next=t,t&&(t._prev=this)}return t.prototype.modifier=function(t,e,n){this.mSet=this.mSet||this.set,this.set=dp,this.m=t,this.mt=n,this.tween=e},t}();bu(gu+\\\\\\\"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\\\\\\\",(function(t){return hu[t]=1})),iu.TweenMax=iu.TweenLite=tp,iu.TimelineLite=iu.TimelineMax=Wd,vh=new Wd({sortChildren:!1,defaults:Oh,autoRemoveChildren:!0,id:\\\\\\\"root\\\\\\\",smoothChildTiming:!0}),Lh.stringFilter=Nd;var mp={registerPlugin:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];e.forEach((function(t){return xd(t)}))},timeline:function(t){return new Wd(t)},getTweensOf:function(t,e){return vh.getTweensOf(t,e)},getProperty:function(t,e,n,i){Uh(t)&&(t=ld(t)[0]);var s=yu(t||{}).get,r=n?Cu:Su;return\\\\\\\"native\\\\\\\"===n&&(n=\\\\\\\"\\\\\\\"),t?e?r((pu[e]&&pu[e].get||s)(t,e,n,i)):function(e,n,i){return r((pu[e]&&pu[e].get||s)(t,e,n,i))}:t},quickSetter:function(t,e,n){if((t=ld(t)).length>1){var i=t.map((function(t){return vp.quickSetter(t,e,n)})),s=i.length;return function(t){for(var e=s;e--;)i[e](t)}}t=t[0]||{};var r=pu[e],o=yu(t),a=o.harness&&(o.harness.aliases||{})[e]||e,l=r?function(e){var i=new r;Ah._pt=0,i.init(t,n?e+n:e,Ah,0,[t]),i.render(1,i),Ah._pt&&cp(1,Ah)}:o.set(t,a);return r?l:function(e){return l(t,a,n?e+n:e,o,1)}},isTweening:function(t){return vh.getTweensOf(t,!0).length>0},defaults:function(t){return t&&t.ease&&(t.ease=zd(t.ease,Oh.ease)),Pu(Oh,t||{})},config:function(t){return Pu(Lh,t||{})},registerEffect:function(t){var e=t.name,n=t.effect,i=t.plugins,s=t.defaults,r=t.extendTimeline;(i||\\\\\\\"\\\\\\\").split(\\\\\\\",\\\\\\\").forEach((function(t){return t&&!pu[t]&&!iu[t]&&au(e+\\\\\\\" effect requires \\\\\\\"+t+\\\\\\\" plugin.\\\\\\\")})),_u[e]=function(t,e,i){return n(ld(t),Nu(e||{},s),i)},r&&(Wd.prototype[e]=function(t,n,i){return this.add(_u[e](t,jh(n)?n:(i=n)&&{},this),i)})},registerEase:function(t,e){Pd[t]=zd(e)},parseEase:function(t,e){return arguments.length?zd(t,e):Pd},getById:function(t){return vh.getById(t)},exportRoot:function(t,e){void 0===t&&(t={});var n,i,s=new Wd(t);for(s.smoothChildTiming=Wh(t.smoothChildTiming),vh.remove(s),s._dp=0,s._time=s._tTime=vh._time,n=vh._first;n;)i=n._next,!e&&!n._dur&&n instanceof tp&&n.vars.onComplete===n._targets[0]||qu(s,n,n._start-n._delay),n=i;return qu(vh,s,0),s},utils:{wrap:function t(e,n,i){var s=n-e;return $h(e)?_d(e,t(0,e.length),n):nd(i,(function(t){return(s+(t-e)%s)%s+e}))},wrapYoyo:function t(e,n,i){var s=n-e,r=2*s;return $h(e)?_d(e,t(0,e.length-1),n):nd(i,(function(t){return e+((t=(r+(t-e)%r)%r||0)>s?r-t:t)}))},distribute:hd,random:pd,snap:dd,normalize:function(t,e,n){return fd(t,e,0,1,n)},getUnit:sd,clamp:function(t,e,n){return nd(n,(function(n){return id(t,e,n)}))},splitColor:Ad,toArray:ld,selector:function(t){return t=ld(t)[0]||au(\\\\\\\"Invalid scope\\\\\\\")||{},function(e){var n=t.current||t.nativeElement||t;return ld(e,n.querySelectorAll?n:n===t?au(\\\\\\\"Invalid scope\\\\\\\")||bh.createElement(\\\\\\\"div\\\\\\\"):t)}},mapRange:fd,pipe:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return function(t){return e.reduce((function(t,e){return e(t)}),t)}},unitize:function(t,e){return function(n){return t(parseFloat(n))+(e||sd(n))}},interpolate:function t(e,n,i,s){var r=isNaN(e+n)?0:function(t){return(1-t)*e+t*n};if(!r){var o,a,l,c,h,u=Uh(e),d={};if(!0===i&&(s=1)&&(i=null),u)e={p:e},n={p:n};else if($h(e)&&!$h(n)){for(l=[],c=e.length,h=c-2,a=1;a<c;a++)l.push(t(e[a-1],e[a]));c--,r=function(t){t*=c;var e=Math.min(h,~~t);return l[e](t-e)},i=n}else s||(e=Ou($h(e)?[]:{},e));if(!l){for(o in n)Yd.call(d,e,o,\\\\\\\"get\\\\\\\",n[o]);r=function(t){return cp(t,d)||(u?e.p:e)}}}return nd(i,r)},shuffle:cd},install:ru,effects:_u,ticker:Ld,updateRoot:Wd.updateRoot,plugins:pu,globalTimeline:vh,core:{PropTween:_p,globals:lu,Tween:tp,Timeline:Wd,Animation:jd,getCache:yu,_removeLinkedListItem:Fu,suppressOverwrites:function(t){return gh=t}}};bu(\\\\\\\"to,from,fromTo,delayedCall,set,killTweensOf\\\\\\\",(function(t){return mp[t]=tp[t]})),Ld.add(Wd.updateRoot),Ah=mp.to({},{duration:0});var fp=function(t,e){for(var n=t._pt;n&&n.p!==e&&n.op!==e&&n.fp!==e;)n=n._next;return n},gp=function(t,e){return{name:t,rawVars:1,init:function(t,n,i){i._onInit=function(t){var i,s;if(Uh(n)&&(i={},bu(n,(function(t){return i[t]=1})),n=i),e){for(s in i={},n)i[s]=e(n[s]);n=i}!function(t,e){var n,i,s,r=t._targets;for(n in e)for(i=r.length;i--;)(s=t._ptLookup[i][n])&&(s=s.d)&&(s._pt&&(s=fp(s,n)),s&&s.modifier&&s.modifier(e[n],t,r[i],n))}(t,n)}}}},vp=mp.registerPlugin({name:\\\\\\\"attr\\\\\\\",init:function(t,e,n,i,s){var r,o;for(r in e)(o=this.add(t,\\\\\\\"setAttribute\\\\\\\",(t.getAttribute(r)||0)+\\\\\\\"\\\\\\\",e[r],i,s,0,0,r))&&(o.op=r),this._props.push(r)}},{name:\\\\\\\"endArray\\\\\\\",init:function(t,e){for(var n=e.length;n--;)this.add(t,n,t[n]||0,e[n])}},gp(\\\\\\\"roundProps\\\\\\\",ud),gp(\\\\\\\"modifiers\\\\\\\"),gp(\\\\\\\"snap\\\\\\\",dd))||mp;tp.version=Wd.version=vp.version=\\\\\\\"3.8.0\\\\\\\",wh=1,qh()&&Od();Pd.Power0,Pd.Power1,Pd.Power2,Pd.Power3,Pd.Power4,Pd.Linear,Pd.Quad,Pd.Cubic,Pd.Quart,Pd.Quint,Pd.Strong,Pd.Elastic,Pd.Back,Pd.SteppedEase,Pd.Bounce,Pd.Sine,Pd.Expo,Pd.Circ;var yp,xp,bp,wp,Tp,Ap,Mp,Ep={},Sp=180/Math.PI,Cp=Math.PI/180,Np=Math.atan2,Lp=/([A-Z])/g,Op=/(?:left|right|width|margin|padding|x)/i,Pp=/[\\\\s,\\\\(]\\\\S/,Rp={autoAlpha:\\\\\\\"opacity,visibility\\\\\\\",scale:\\\\\\\"scaleX,scaleY\\\\\\\",alpha:\\\\\\\"opacity\\\\\\\"},Ip=function(t,e){return e.set(e.t,e.p,Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)},Fp=function(t,e){return e.set(e.t,e.p,1===t?e.e:Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)},Dp=function(t,e){return e.set(e.t,e.p,t?Math.round(1e4*(e.s+e.c*t))/1e4+e.u:e.b,e)},Bp=function(t,e){var n=e.s+e.c*t;e.set(e.t,e.p,~~(n+(n<0?-.5:.5))+e.u,e)},zp=function(t,e){return e.set(e.t,e.p,t?e.e:e.b,e)},kp=function(t,e){return e.set(e.t,e.p,1!==t?e.b:e.e,e)},Up=function(t,e,n){return t.style[e]=n},Gp=function(t,e,n){return t.style.setProperty(e,n)},Vp=function(t,e,n){return t._gsap[e]=n},Hp=function(t,e,n){return t._gsap.scaleX=t._gsap.scaleY=n},jp=function(t,e,n,i,s){var r=t._gsap;r.scaleX=r.scaleY=n,r.renderTransform(s,r)},Wp=function(t,e,n,i,s){var r=t._gsap;r[e]=n,r.renderTransform(s,r)},qp=\\\\\\\"transform\\\\\\\",Xp=qp+\\\\\\\"Origin\\\\\\\",Yp=function(t,e){var n=xp.createElementNS?xp.createElementNS((e||\\\\\\\"http://www.w3.org/1999/xhtml\\\\\\\").replace(/^https/,\\\\\\\"http\\\\\\\"),t):xp.createElement(t);return n.style?n:xp.createElement(t)},$p=function t(e,n,i){var s=getComputedStyle(e);return s[n]||s.getPropertyValue(n.replace(Lp,\\\\\\\"-$1\\\\\\\").toLowerCase())||s.getPropertyValue(n)||!i&&t(e,Zp(n)||n,1)||\\\\\\\"\\\\\\\"},Jp=\\\\\\\"O,Moz,ms,Ms,Webkit\\\\\\\".split(\\\\\\\",\\\\\\\"),Zp=function(t,e,n){var i=(e||Tp).style,s=5;if(t in i&&!n)return t;for(t=t.charAt(0).toUpperCase()+t.substr(1);s--&&!(Jp[s]+t in i););return s<0?null:(3===s?\\\\\\\"ms\\\\\\\":s>=0?Jp[s]:\\\\\\\"\\\\\\\")+t},Kp=function(){\\\\\\\"undefined\\\\\\\"!=typeof window&&window.document&&(yp=window,xp=yp.document,bp=xp.documentElement,Tp=Yp(\\\\\\\"div\\\\\\\")||{style:{}},Yp(\\\\\\\"div\\\\\\\"),qp=Zp(qp),Xp=qp+\\\\\\\"Origin\\\\\\\",Tp.style.cssText=\\\\\\\"border-width:0;line-height:0;position:absolute;padding:0\\\\\\\",Mp=!!Zp(\\\\\\\"perspective\\\\\\\"),wp=1)},Qp=function t(e){var n,i=Yp(\\\\\\\"svg\\\\\\\",this.ownerSVGElement&&this.ownerSVGElement.getAttribute(\\\\\\\"xmlns\\\\\\\")||\\\\\\\"http://www.w3.org/2000/svg\\\\\\\"),s=this.parentNode,r=this.nextSibling,o=this.style.cssText;if(bp.appendChild(i),i.appendChild(this),this.style.display=\\\\\\\"block\\\\\\\",e)try{n=this.getBBox(),this._gsapBBox=this.getBBox,this.getBBox=t}catch(t){}else this._gsapBBox&&(n=this._gsapBBox());return s&&(r?s.insertBefore(this,r):s.appendChild(this)),bp.removeChild(i),this.style.cssText=o,n},t_=function(t,e){for(var n=e.length;n--;)if(t.hasAttribute(e[n]))return t.getAttribute(e[n])},e_=function(t){var e;try{e=t.getBBox()}catch(n){e=Qp.call(t,!0)}return e&&(e.width||e.height)||t.getBBox===Qp||(e=Qp.call(t,!0)),!e||e.width||e.x||e.y?e:{x:+t_(t,[\\\\\\\"x\\\\\\\",\\\\\\\"cx\\\\\\\",\\\\\\\"x1\\\\\\\"])||0,y:+t_(t,[\\\\\\\"y\\\\\\\",\\\\\\\"cy\\\\\\\",\\\\\\\"y1\\\\\\\"])||0,width:0,height:0}},n_=function(t){return!(!t.getCTM||t.parentNode&&!t.ownerSVGElement||!e_(t))},i_=function(t,e){if(e){var n=t.style;e in Ep&&e!==Xp&&(e=qp),n.removeProperty?(\\\\\\\"ms\\\\\\\"!==e.substr(0,2)&&\\\\\\\"webkit\\\\\\\"!==e.substr(0,6)||(e=\\\\\\\"-\\\\\\\"+e),n.removeProperty(e.replace(Lp,\\\\\\\"-$1\\\\\\\").toLowerCase())):n.removeAttribute(e)}},s_=function(t,e,n,i,s,r){var o=new _p(t._pt,e,n,0,1,r?kp:zp);return t._pt=o,o.b=i,o.e=s,t._props.push(n),o},r_={deg:1,rad:1,turn:1},o_=function t(e,n,i,s){var r,o,a,l,c=parseFloat(i)||0,h=(i+\\\\\\\"\\\\\\\").trim().substr((c+\\\\\\\"\\\\\\\").length)||\\\\\\\"px\\\\\\\",u=Tp.style,d=Op.test(n),p=\\\\\\\"svg\\\\\\\"===e.tagName.toLowerCase(),_=(p?\\\\\\\"client\\\\\\\":\\\\\\\"offset\\\\\\\")+(d?\\\\\\\"Width\\\\\\\":\\\\\\\"Height\\\\\\\"),m=100,f=\\\\\\\"px\\\\\\\"===s,g=\\\\\\\"%\\\\\\\"===s;return s===h||!c||r_[s]||r_[h]?c:(\\\\\\\"px\\\\\\\"!==h&&!f&&(c=t(e,n,i,\\\\\\\"px\\\\\\\")),l=e.getCTM&&n_(e),!g&&\\\\\\\"%\\\\\\\"!==h||!Ep[n]&&!~n.indexOf(\\\\\\\"adius\\\\\\\")?(u[d?\\\\\\\"width\\\\\\\":\\\\\\\"height\\\\\\\"]=m+(f?h:s),o=~n.indexOf(\\\\\\\"adius\\\\\\\")||\\\\\\\"em\\\\\\\"===s&&e.appendChild&&!p?e:e.parentNode,l&&(o=(e.ownerSVGElement||{}).parentNode),o&&o!==xp&&o.appendChild||(o=xp.body),(a=o._gsap)&&g&&a.width&&d&&a.time===Ld.time?wu(c/a.width*m):((g||\\\\\\\"%\\\\\\\"===h)&&(u.position=$p(e,\\\\\\\"position\\\\\\\")),o===e&&(u.position=\\\\\\\"static\\\\\\\"),o.appendChild(Tp),r=Tp[_],o.removeChild(Tp),u.position=\\\\\\\"absolute\\\\\\\",d&&g&&((a=yu(o)).time=Ld.time,a.width=o[_]),wu(f?r*c/m:r&&c?m/r*c:0))):(r=l?e.getBBox()[d?\\\\\\\"width\\\\\\\":\\\\\\\"height\\\\\\\"]:e[_],wu(g?c/r*m:c/100*r)))},a_=function(t,e,n,i){var s;return wp||Kp(),e in Rp&&\\\\\\\"transform\\\\\\\"!==e&&~(e=Rp[e]).indexOf(\\\\\\\",\\\\\\\")&&(e=e.split(\\\\\\\",\\\\\\\")[0]),Ep[e]&&\\\\\\\"transform\\\\\\\"!==e?(s=v_(t,i),s=\\\\\\\"transformOrigin\\\\\\\"!==e?s[e]:s.svg?s.origin:y_($p(t,Xp))+\\\\\\\" \\\\\\\"+s.zOrigin+\\\\\\\"px\\\\\\\"):(!(s=t.style[e])||\\\\\\\"auto\\\\\\\"===s||i||~(s+\\\\\\\"\\\\\\\").indexOf(\\\\\\\"calc(\\\\\\\"))&&(s=u_[e]&&u_[e](t,e,n)||$p(t,e)||xu(t,e)||(\\\\\\\"opacity\\\\\\\"===e?1:0)),n&&!~(s+\\\\\\\"\\\\\\\").trim().indexOf(\\\\\\\" \\\\\\\")?o_(t,e,s,n)+n:s},l_=function(t,e,n,i){if(!n||\\\\\\\"none\\\\\\\"===n){var s=Zp(e,t,1),r=s&&$p(t,s,1);r&&r!==n?(e=s,n=r):\\\\\\\"borderColor\\\\\\\"===e&&(n=$p(t,\\\\\\\"borderTopColor\\\\\\\"))}var o,a,l,c,h,u,d,p,_,m,f,g,v=new _p(this._pt,t.style,e,0,1,lp),y=0,x=0;if(v.b=n,v.e=i,n+=\\\\\\\"\\\\\\\",\\\\\\\"auto\\\\\\\"===(i+=\\\\\\\"\\\\\\\")&&(t.style[e]=i,i=$p(t,e)||i,t.style[e]=n),Nd(o=[n,i]),i=o[1],l=(n=o[0]).match(Kh)||[],(i.match(Kh)||[]).length){for(;a=Kh.exec(i);)d=a[0],_=i.substring(y,a.index),h?h=(h+1)%5:\\\\\\\"rgba(\\\\\\\"!==_.substr(-5)&&\\\\\\\"hsla(\\\\\\\"!==_.substr(-5)||(h=1),d!==(u=l[x++]||\\\\\\\"\\\\\\\")&&(c=parseFloat(u)||0,f=u.substr((c+\\\\\\\"\\\\\\\").length),(g=\\\\\\\"=\\\\\\\"===d.charAt(1)?+(d.charAt(0)+\\\\\\\"1\\\\\\\"):0)&&(d=d.substr(2)),p=parseFloat(d),m=d.substr((p+\\\\\\\"\\\\\\\").length),y=Kh.lastIndex-m.length,m||(m=m||Lh.units[e]||f,y===i.length&&(i+=m,v.e+=m)),f!==m&&(c=o_(t,e,u,m)||0),v._pt={_next:v._pt,p:_||1===x?_:\\\\\\\",\\\\\\\",s:c,c:g?g*p:p-c,m:h&&h<4||\\\\\\\"zIndex\\\\\\\"===e?Math.round:0});v.c=y<i.length?i.substring(y,i.length):\\\\\\\"\\\\\\\"}else v.r=\\\\\\\"display\\\\\\\"===e&&\\\\\\\"none\\\\\\\"===i?kp:zp;return tu.test(i)&&(v.e=0),this._pt=v,v},c_={top:\\\\\\\"0%\\\\\\\",bottom:\\\\\\\"100%\\\\\\\",left:\\\\\\\"0%\\\\\\\",right:\\\\\\\"100%\\\\\\\",center:\\\\\\\"50%\\\\\\\"},h_=function(t,e){if(e.tween&&e.tween._time===e.tween._dur){var n,i,s,r=e.t,o=r.style,a=e.u,l=r._gsap;if(\\\\\\\"all\\\\\\\"===a||!0===a)o.cssText=\\\\\\\"\\\\\\\",i=1;else for(s=(a=a.split(\\\\\\\",\\\\\\\")).length;--s>-1;)n=a[s],Ep[n]&&(i=1,n=\\\\\\\"transformOrigin\\\\\\\"===n?Xp:qp),i_(r,n);i&&(i_(r,qp),l&&(l.svg&&r.removeAttribute(\\\\\\\"transform\\\\\\\"),v_(r,1),l.uncache=1))}},u_={clearProps:function(t,e,n,i,s){if(\\\\\\\"isFromStart\\\\\\\"!==s.data){var r=t._pt=new _p(t._pt,e,n,0,0,h_);return r.u=i,r.pr=-10,r.tween=s,t._props.push(n),1}}},d_=[1,0,0,1,0,0],p_={},__=function(t){return\\\\\\\"matrix(1, 0, 0, 1, 0, 0)\\\\\\\"===t||\\\\\\\"none\\\\\\\"===t||!t},m_=function(t){var e=$p(t,qp);return __(e)?d_:e.substr(7).match(Zh).map(wu)},f_=function(t,e){var n,i,s,r,o=t._gsap||yu(t),a=t.style,l=m_(t);return o.svg&&t.getAttribute(\\\\\\\"transform\\\\\\\")?\\\\\\\"1,0,0,1,0,0\\\\\\\"===(l=[(s=t.transform.baseVal.consolidate().matrix).a,s.b,s.c,s.d,s.e,s.f]).join(\\\\\\\",\\\\\\\")?d_:l:(l!==d_||t.offsetParent||t===bp||o.svg||(s=a.display,a.display=\\\\\\\"block\\\\\\\",(n=t.parentNode)&&t.offsetParent||(r=1,i=t.nextSibling,bp.appendChild(t)),l=m_(t),s?a.display=s:i_(t,\\\\\\\"display\\\\\\\"),r&&(i?n.insertBefore(t,i):n?n.appendChild(t):bp.removeChild(t))),e&&l.length>6?[l[0],l[1],l[4],l[5],l[12],l[13]]:l)},g_=function(t,e,n,i,s,r){var o,a,l,c=t._gsap,h=s||f_(t,!0),u=c.xOrigin||0,d=c.yOrigin||0,p=c.xOffset||0,_=c.yOffset||0,m=h[0],f=h[1],g=h[2],v=h[3],y=h[4],x=h[5],b=e.split(\\\\\\\" \\\\\\\"),w=parseFloat(b[0])||0,T=parseFloat(b[1])||0;n?h!==d_&&(a=m*v-f*g)&&(l=w*(-f/a)+T*(m/a)-(m*x-f*y)/a,w=w*(v/a)+T*(-g/a)+(g*x-v*y)/a,T=l):(w=(o=e_(t)).x+(~b[0].indexOf(\\\\\\\"%\\\\\\\")?w/100*o.width:w),T=o.y+(~(b[1]||b[0]).indexOf(\\\\\\\"%\\\\\\\")?T/100*o.height:T)),i||!1!==i&&c.smooth?(y=w-u,x=T-d,c.xOffset=p+(y*m+x*g)-y,c.yOffset=_+(y*f+x*v)-x):c.xOffset=c.yOffset=0,c.xOrigin=w,c.yOrigin=T,c.smooth=!!i,c.origin=e,c.originIsAbsolute=!!n,t.style[Xp]=\\\\\\\"0px 0px\\\\\\\",r&&(s_(r,c,\\\\\\\"xOrigin\\\\\\\",u,w),s_(r,c,\\\\\\\"yOrigin\\\\\\\",d,T),s_(r,c,\\\\\\\"xOffset\\\\\\\",p,c.xOffset),s_(r,c,\\\\\\\"yOffset\\\\\\\",_,c.yOffset)),t.setAttribute(\\\\\\\"data-svg-origin\\\\\\\",w+\\\\\\\" \\\\\\\"+T)},v_=function(t,e){var n=t._gsap||new Hd(t);if(\\\\\\\"x\\\\\\\"in n&&!e&&!n.uncache)return n;var i,s,r,o,a,l,c,h,u,d,p,_,m,f,g,v,y,x,b,w,T,A,M,E,S,C,N,L,O,P,R,I,F=t.style,D=n.scaleX<0,B=\\\\\\\"px\\\\\\\",z=\\\\\\\"deg\\\\\\\",k=$p(t,Xp)||\\\\\\\"0\\\\\\\";return i=s=r=l=c=h=u=d=p=0,o=a=1,n.svg=!(!t.getCTM||!n_(t)),f=f_(t,n.svg),n.svg&&(E=(!n.uncache||\\\\\\\"0px 0px\\\\\\\"===k)&&!e&&t.getAttribute(\\\\\\\"data-svg-origin\\\\\\\"),g_(t,E||k,!!E||n.originIsAbsolute,!1!==n.smooth,f)),_=n.xOrigin||0,m=n.yOrigin||0,f!==d_&&(x=f[0],b=f[1],w=f[2],T=f[3],i=A=f[4],s=M=f[5],6===f.length?(o=Math.sqrt(x*x+b*b),a=Math.sqrt(T*T+w*w),l=x||b?Np(b,x)*Sp:0,(u=w||T?Np(w,T)*Sp+l:0)&&(a*=Math.abs(Math.cos(u*Cp))),n.svg&&(i-=_-(_*x+m*w),s-=m-(_*b+m*T))):(I=f[6],P=f[7],N=f[8],L=f[9],O=f[10],R=f[11],i=f[12],s=f[13],r=f[14],c=(g=Np(I,O))*Sp,g&&(E=A*(v=Math.cos(-g))+N*(y=Math.sin(-g)),S=M*v+L*y,C=I*v+O*y,N=A*-y+N*v,L=M*-y+L*v,O=I*-y+O*v,R=P*-y+R*v,A=E,M=S,I=C),h=(g=Np(-w,O))*Sp,g&&(v=Math.cos(-g),R=T*(y=Math.sin(-g))+R*v,x=E=x*v-N*y,b=S=b*v-L*y,w=C=w*v-O*y),l=(g=Np(b,x))*Sp,g&&(E=x*(v=Math.cos(g))+b*(y=Math.sin(g)),S=A*v+M*y,b=b*v-x*y,M=M*v-A*y,x=E,A=S),c&&Math.abs(c)+Math.abs(l)>359.9&&(c=l=0,h=180-h),o=wu(Math.sqrt(x*x+b*b+w*w)),a=wu(Math.sqrt(M*M+I*I)),g=Np(A,M),u=Math.abs(g)>2e-4?g*Sp:0,p=R?1/(R<0?-R:R):0),n.svg&&(E=t.getAttribute(\\\\\\\"transform\\\\\\\"),n.forceCSS=t.setAttribute(\\\\\\\"transform\\\\\\\",\\\\\\\"\\\\\\\")||!__($p(t,qp)),E&&t.setAttribute(\\\\\\\"transform\\\\\\\",E))),Math.abs(u)>90&&Math.abs(u)<270&&(D?(o*=-1,u+=l<=0?180:-180,l+=l<=0?180:-180):(a*=-1,u+=u<=0?180:-180)),n.x=i-((n.xPercent=i&&(n.xPercent||(Math.round(t.offsetWidth/2)===Math.round(-i)?-50:0)))?t.offsetWidth*n.xPercent/100:0)+B,n.y=s-((n.yPercent=s&&(n.yPercent||(Math.round(t.offsetHeight/2)===Math.round(-s)?-50:0)))?t.offsetHeight*n.yPercent/100:0)+B,n.z=r+B,n.scaleX=wu(o),n.scaleY=wu(a),n.rotation=wu(l)+z,n.rotationX=wu(c)+z,n.rotationY=wu(h)+z,n.skewX=u+z,n.skewY=d+z,n.transformPerspective=p+B,(n.zOrigin=parseFloat(k.split(\\\\\\\" \\\\\\\")[2])||0)&&(F[Xp]=y_(k)),n.xOffset=n.yOffset=0,n.force3D=Lh.force3D,n.renderTransform=n.svg?E_:Mp?M_:b_,n.uncache=0,n},y_=function(t){return(t=t.split(\\\\\\\" \\\\\\\"))[0]+\\\\\\\" \\\\\\\"+t[1]},x_=function(t,e,n){var i=sd(e);return wu(parseFloat(e)+parseFloat(o_(t,\\\\\\\"x\\\\\\\",n+\\\\\\\"px\\\\\\\",i)))+i},b_=function(t,e){e.z=\\\\\\\"0px\\\\\\\",e.rotationY=e.rotationX=\\\\\\\"0deg\\\\\\\",e.force3D=0,M_(t,e)},w_=\\\\\\\"0deg\\\\\\\",T_=\\\\\\\"0px\\\\\\\",A_=\\\\\\\") \\\\\\\",M_=function(t,e){var n=e||this,i=n.xPercent,s=n.yPercent,r=n.x,o=n.y,a=n.z,l=n.rotation,c=n.rotationY,h=n.rotationX,u=n.skewX,d=n.skewY,p=n.scaleX,_=n.scaleY,m=n.transformPerspective,f=n.force3D,g=n.target,v=n.zOrigin,y=\\\\\\\"\\\\\\\",x=\\\\\\\"auto\\\\\\\"===f&&t&&1!==t||!0===f;if(v&&(h!==w_||c!==w_)){var b,w=parseFloat(c)*Cp,T=Math.sin(w),A=Math.cos(w);w=parseFloat(h)*Cp,b=Math.cos(w),r=x_(g,r,T*b*-v),o=x_(g,o,-Math.sin(w)*-v),a=x_(g,a,A*b*-v+v)}m!==T_&&(y+=\\\\\\\"perspective(\\\\\\\"+m+A_),(i||s)&&(y+=\\\\\\\"translate(\\\\\\\"+i+\\\\\\\"%, \\\\\\\"+s+\\\\\\\"%) \\\\\\\"),(x||r!==T_||o!==T_||a!==T_)&&(y+=a!==T_||x?\\\\\\\"translate3d(\\\\\\\"+r+\\\\\\\", \\\\\\\"+o+\\\\\\\", \\\\\\\"+a+\\\\\\\") \\\\\\\":\\\\\\\"translate(\\\\\\\"+r+\\\\\\\", \\\\\\\"+o+A_),l!==w_&&(y+=\\\\\\\"rotate(\\\\\\\"+l+A_),c!==w_&&(y+=\\\\\\\"rotateY(\\\\\\\"+c+A_),h!==w_&&(y+=\\\\\\\"rotateX(\\\\\\\"+h+A_),u===w_&&d===w_||(y+=\\\\\\\"skew(\\\\\\\"+u+\\\\\\\", \\\\\\\"+d+A_),1===p&&1===_||(y+=\\\\\\\"scale(\\\\\\\"+p+\\\\\\\", \\\\\\\"+_+A_),g.style[qp]=y||\\\\\\\"translate(0, 0)\\\\\\\"},E_=function(t,e){var n,i,s,r,o,a=e||this,l=a.xPercent,c=a.yPercent,h=a.x,u=a.y,d=a.rotation,p=a.skewX,_=a.skewY,m=a.scaleX,f=a.scaleY,g=a.target,v=a.xOrigin,y=a.yOrigin,x=a.xOffset,b=a.yOffset,w=a.forceCSS,T=parseFloat(h),A=parseFloat(u);d=parseFloat(d),p=parseFloat(p),(_=parseFloat(_))&&(p+=_=parseFloat(_),d+=_),d||p?(d*=Cp,p*=Cp,n=Math.cos(d)*m,i=Math.sin(d)*m,s=Math.sin(d-p)*-f,r=Math.cos(d-p)*f,p&&(_*=Cp,o=Math.tan(p-_),s*=o=Math.sqrt(1+o*o),r*=o,_&&(o=Math.tan(_),n*=o=Math.sqrt(1+o*o),i*=o)),n=wu(n),i=wu(i),s=wu(s),r=wu(r)):(n=m,r=f,i=s=0),(T&&!~(h+\\\\\\\"\\\\\\\").indexOf(\\\\\\\"px\\\\\\\")||A&&!~(u+\\\\\\\"\\\\\\\").indexOf(\\\\\\\"px\\\\\\\"))&&(T=o_(g,\\\\\\\"x\\\\\\\",h,\\\\\\\"px\\\\\\\"),A=o_(g,\\\\\\\"y\\\\\\\",u,\\\\\\\"px\\\\\\\")),(v||y||x||b)&&(T=wu(T+v-(v*n+y*s)+x),A=wu(A+y-(v*i+y*r)+b)),(l||c)&&(o=g.getBBox(),T=wu(T+l/100*o.width),A=wu(A+c/100*o.height)),o=\\\\\\\"matrix(\\\\\\\"+n+\\\\\\\",\\\\\\\"+i+\\\\\\\",\\\\\\\"+s+\\\\\\\",\\\\\\\"+r+\\\\\\\",\\\\\\\"+T+\\\\\\\",\\\\\\\"+A+\\\\\\\")\\\\\\\",g.setAttribute(\\\\\\\"transform\\\\\\\",o),w&&(g.style[qp]=o)},S_=function(t,e,n,i,s,r){var o,a,l=360,c=Uh(s),h=parseFloat(s)*(c&&~s.indexOf(\\\\\\\"rad\\\\\\\")?Sp:1),u=r?h*r:h-i,d=i+u+\\\\\\\"deg\\\\\\\";return c&&(\\\\\\\"short\\\\\\\"===(o=s.split(\\\\\\\"_\\\\\\\")[1])&&(u%=l)!==u%180&&(u+=u<0?l:-360),\\\\\\\"cw\\\\\\\"===o&&u<0?u=(u+36e9)%l-~~(u/l)*l:\\\\\\\"ccw\\\\\\\"===o&&u>0&&(u=(u-36e9)%l-~~(u/l)*l)),t._pt=a=new _p(t._pt,e,n,i,u,Fp),a.e=d,a.u=\\\\\\\"deg\\\\\\\",t._props.push(n),a},C_=function(t,e){for(var n in e)t[n]=e[n];return t},N_=function(t,e,n){var i,s,r,o,a,l,c,h=C_({},n._gsap),u=n.style;for(s in h.svg?(r=n.getAttribute(\\\\\\\"transform\\\\\\\"),n.setAttribute(\\\\\\\"transform\\\\\\\",\\\\\\\"\\\\\\\"),u[qp]=e,i=v_(n,1),i_(n,qp),n.setAttribute(\\\\\\\"transform\\\\\\\",r)):(r=getComputedStyle(n)[qp],u[qp]=e,i=v_(n,1),u[qp]=r),Ep)(r=h[s])!==(o=i[s])&&\\\\\\\"perspective,force3D,transformOrigin,svgOrigin\\\\\\\".indexOf(s)<0&&(a=sd(r)!==(c=sd(o))?o_(n,s,r,c):parseFloat(r),l=parseFloat(o),t._pt=new _p(t._pt,i,s,a,l-a,Ip),t._pt.u=c||0,t._props.push(s));C_(i,h)};bu(\\\\\\\"padding,margin,Width,Radius\\\\\\\",(function(t,e){var n=\\\\\\\"Top\\\\\\\",i=\\\\\\\"Right\\\\\\\",s=\\\\\\\"Bottom\\\\\\\",r=\\\\\\\"Left\\\\\\\",o=(e<3?[n,i,s,r]:[n+r,n+i,s+i,s+r]).map((function(n){return e<2?t+n:\\\\\\\"border\\\\\\\"+n+t}));u_[e>1?\\\\\\\"border\\\\\\\"+t:t]=function(t,e,n,i,s){var r,a;if(arguments.length<4)return r=o.map((function(e){return a_(t,e,n)})),5===(a=r.join(\\\\\\\" \\\\\\\")).split(r[0]).length?r[0]:a;r=(i+\\\\\\\"\\\\\\\").split(\\\\\\\" \\\\\\\"),a={},o.forEach((function(t,e){return a[t]=r[e]=r[e]||r[(e-1)/2|0]})),t.init(e,a,s)}}));var L_,O_,P_,R_={name:\\\\\\\"css\\\\\\\",register:Kp,targetTest:function(t){return t.style&&t.nodeType},init:function(t,e,n,i,s){var r,o,a,l,c,h,u,d,p,_,m,f,g,v,y,x,b,w,T,A=this._props,M=t.style,E=n.vars.startAt;for(u in wp||Kp(),e)if(\\\\\\\"autoRound\\\\\\\"!==u&&(o=e[u],!pu[u]||!$d(u,e,n,i,t,s)))if(c=typeof o,h=u_[u],\\\\\\\"function\\\\\\\"===c&&(c=typeof(o=o.call(n,i,t,s))),\\\\\\\"string\\\\\\\"===c&&~o.indexOf(\\\\\\\"random(\\\\\\\")&&(o=md(o)),h)h(this,t,u,o,n)&&(y=1);else if(\\\\\\\"--\\\\\\\"===u.substr(0,2))r=(getComputedStyle(t).getPropertyValue(u)+\\\\\\\"\\\\\\\").trim(),o+=\\\\\\\"\\\\\\\",Sd.lastIndex=0,Sd.test(r)||(d=sd(r),p=sd(o)),p?d!==p&&(r=o_(t,u,r,p)+p):d&&(o+=d),this.add(M,\\\\\\\"setProperty\\\\\\\",r,o,i,s,0,0,u),A.push(u);else if(\\\\\\\"undefined\\\\\\\"!==c){if(E&&u in E?(r=\\\\\\\"function\\\\\\\"==typeof E[u]?E[u].call(n,i,t,s):E[u],u in Lh.units&&!sd(r)&&(r+=Lh.units[u]),Uh(r)&&~r.indexOf(\\\\\\\"random(\\\\\\\")&&(r=md(r)),\\\\\\\"=\\\\\\\"===(r+\\\\\\\"\\\\\\\").charAt(1)&&(r=a_(t,u))):r=a_(t,u),l=parseFloat(r),(_=\\\\\\\"string\\\\\\\"===c&&\\\\\\\"=\\\\\\\"===o.charAt(1)?+(o.charAt(0)+\\\\\\\"1\\\\\\\"):0)&&(o=o.substr(2)),a=parseFloat(o),u in Rp&&(\\\\\\\"autoAlpha\\\\\\\"===u&&(1===l&&\\\\\\\"hidden\\\\\\\"===a_(t,\\\\\\\"visibility\\\\\\\")&&a&&(l=0),s_(this,M,\\\\\\\"visibility\\\\\\\",l?\\\\\\\"inherit\\\\\\\":\\\\\\\"hidden\\\\\\\",a?\\\\\\\"inherit\\\\\\\":\\\\\\\"hidden\\\\\\\",!a)),\\\\\\\"scale\\\\\\\"!==u&&\\\\\\\"transform\\\\\\\"!==u&&~(u=Rp[u]).indexOf(\\\\\\\",\\\\\\\")&&(u=u.split(\\\\\\\",\\\\\\\")[0])),m=u in Ep)if(f||((g=t._gsap).renderTransform&&!e.parseTransform||v_(t,e.parseTransform),v=!1!==e.smoothOrigin&&g.smooth,(f=this._pt=new _p(this._pt,M,qp,0,1,g.renderTransform,g,0,-1)).dep=1),\\\\\\\"scale\\\\\\\"===u)this._pt=new _p(this._pt,g,\\\\\\\"scaleY\\\\\\\",g.scaleY,(_?_*a:a-g.scaleY)||0),A.push(\\\\\\\"scaleY\\\\\\\",u),u+=\\\\\\\"X\\\\\\\";else{if(\\\\\\\"transformOrigin\\\\\\\"===u){b=void 0,w=void 0,T=void 0,b=(x=o).split(\\\\\\\" \\\\\\\"),w=b[0],T=b[1]||\\\\\\\"50%\\\\\\\",\\\\\\\"top\\\\\\\"!==w&&\\\\\\\"bottom\\\\\\\"!==w&&\\\\\\\"left\\\\\\\"!==T&&\\\\\\\"right\\\\\\\"!==T||(x=w,w=T,T=x),b[0]=c_[w]||w,b[1]=c_[T]||T,o=b.join(\\\\\\\" \\\\\\\"),g.svg?g_(t,o,0,v,0,this):((p=parseFloat(o.split(\\\\\\\" \\\\\\\")[2])||0)!==g.zOrigin&&s_(this,g,\\\\\\\"zOrigin\\\\\\\",g.zOrigin,p),s_(this,M,u,y_(r),y_(o)));continue}if(\\\\\\\"svgOrigin\\\\\\\"===u){g_(t,o,1,v,0,this);continue}if(u in p_){S_(this,g,u,l,o,_);continue}if(\\\\\\\"smoothOrigin\\\\\\\"===u){s_(this,g,\\\\\\\"smooth\\\\\\\",g.smooth,o);continue}if(\\\\\\\"force3D\\\\\\\"===u){g[u]=o;continue}if(\\\\\\\"transform\\\\\\\"===u){N_(this,o,t);continue}}else u in M||(u=Zp(u)||u);if(m||(a||0===a)&&(l||0===l)&&!Pp.test(o)&&u in M)a||(a=0),(d=(r+\\\\\\\"\\\\\\\").substr((l+\\\\\\\"\\\\\\\").length))!==(p=sd(o)||(u in Lh.units?Lh.units[u]:d))&&(l=o_(t,u,r,p)),this._pt=new _p(this._pt,m?g:M,u,l,_?_*a:a-l,m||\\\\\\\"px\\\\\\\"!==p&&\\\\\\\"zIndex\\\\\\\"!==u||!1===e.autoRound?Ip:Bp),this._pt.u=p||0,d!==p&&\\\\\\\"%\\\\\\\"!==p&&(this._pt.b=r,this._pt.r=Dp);else if(u in M)l_.call(this,t,u,r,o);else{if(!(u in t)){ou(u,o);continue}this.add(t,u,r||t[u],o,i,s)}A.push(u)}y&&pp(this)},get:a_,aliases:Rp,getSetter:function(t,e,n){var i=Rp[e];return i&&i.indexOf(\\\\\\\",\\\\\\\")<0&&(e=i),e in Ep&&e!==Xp&&(t._gsap.x||a_(t,\\\\\\\"x\\\\\\\"))?n&&Ap===n?\\\\\\\"scale\\\\\\\"===e?Hp:Vp:(Ap=n||{})&&(\\\\\\\"scale\\\\\\\"===e?jp:Wp):t.style&&!Hh(t.style[e])?Up:~e.indexOf(\\\\\\\"-\\\\\\\")?Gp:rp(t,e)},core:{_removeProperty:i_,_getMatrix:f_}};vp.utils.checkPrefix=Zp,P_=bu((L_=\\\\\\\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\\\\\\\")+\\\\\\\",\\\\\\\"+(O_=\\\\\\\"rotation,rotationX,rotationY,skewX,skewY\\\\\\\")+\\\\\\\",transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\\\\\\\",(function(t){Ep[t]=1})),bu(O_,(function(t){Lh.units[t]=\\\\\\\"deg\\\\\\\",p_[t]=1})),Rp[P_[13]]=L_+\\\\\\\",\\\\\\\"+O_,bu(\\\\\\\"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\\\\\\\",(function(t){var e=t.split(\\\\\\\":\\\\\\\");Rp[e[1]]=P_[e[0]]})),bu(\\\\\\\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\\\\\\\",(function(t){Lh.units[t]=\\\\\\\"px\\\\\\\"})),vp.registerPlugin(R_);var I_,F_=vp.registerPlugin(R_)||vp;F_.core.Tween;!function(t){t.SET=\\\\\\\"set\\\\\\\",t.ADD=\\\\\\\"add\\\\\\\",t.SUBSTRACT=\\\\\\\"substract\\\\\\\"}(I_||(I_={}));const D_=[I_.SET,I_.ADD,I_.SUBSTRACT];class B_{constructor(){this._timelineBuilders=[],this._duration=1,this._operation=I_.SET,this._delay=0,this._debug=!1}setDebug(t){this._debug=t}_printDebug(t){this._debug&&console.log(t)}addTimelineBuilder(t){this._timelineBuilders.push(t),t.setParent(this)}timelineBuilders(){return this._timelineBuilders}setParent(t){this._parent=t}parent(){return this._parent}setTarget(t){this._target=t;for(let e of this._timelineBuilders)e.setTarget(t)}target(){return this._target}setDuration(t){if(t>=0){this._duration=t;for(let e of this._timelineBuilders)e.setDuration(t)}}duration(){return this._duration}setEasing(t){this._easing=t;for(let e of this._timelineBuilders)e.setEasing(t)}easing(){return this._easing}setOperation(t){this._operation=t;for(let e of this._timelineBuilders)e.setOperation(t)}operation(){return this._operation}setRepeatParams(t){this._repeatParams=t;for(let e of this._timelineBuilders)e.setRepeatParams(t)}repeatParams(){return this._repeatParams}setDelay(t){this._delay=t;for(let e of this._timelineBuilders)e.setDelay(t)}delay(){return this._delay}setPosition(t){this._position=t}position(){return this._position}setUpdateCallback(t){this._updateCallback=t}updateCallback(){return this._updateCallback}clone(){const t=new B_;if(t.setDuration(this._duration),t.setOperation(this._operation),t.setDelay(this._delay),this._target&&t.setTarget(this._target.clone()),this._easing&&t.setEasing(this._easing),this._delay&&t.setDelay(this._delay),this._updateCallback&&t.setUpdateCallback(this._updateCallback.clone()),this._repeatParams&&t.setRepeatParams({count:this._repeatParams.count,delay:this._repeatParams.delay,yoyo:this._repeatParams.yoyo}),this._property){const e=this._property.name();e&&t.setPropertyName(e);const n=this._property.targetValue();null!=n&&t.setPropertyValue(n)}this._position&&t.setPosition(this._position.clone());for(let e of this._timelineBuilders){const n=e.clone();t.addTimelineBuilder(n)}return t}setPropertyName(t){this.property().setName(t)}property(){return this._property=this._property||new _h}propertyName(){return this.property().name()}setPropertyValue(t){this.property().setTargetValue(t)}populate(t){var e;this._printDebug([\\\\\\\"populate\\\\\\\",this,t]);for(let n of this._timelineBuilders){const i=F_.timeline();n.setDebug(this._debug),n.populate(i);const s=(null===(e=n.position())||void 0===e?void 0:e.toParameter())||void 0;t.add(i,s)}this._property&&this._target&&(this._property.setDebug(this._debug),this._property.addToTimeline(this,t,this._target))}}const z_=new class extends ua{constructor(){super(...arguments),this.count=ha.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1]})}};class k_ extends oh{constructor(){super(...arguments),this.paramsConfig=z_}static type(){return\\\\\\\"copy\\\\\\\"}initializeNode(){this.io.inputs.setCount(1)}async cook(t){const e=new B_;for(let t=0;t<this.pv.count;t++){this.stampNode().set_global_index(t);const n=await this.containerController.requestInputContainer(0);if(n){const t=n.coreContentCloned();t&&e.addTimelineBuilder(t)}}this.setTimelineBuilder(e)}stamp_value(t){return this.stampNode().value(t)}stampNode(){return this._stamp_node=this._stamp_node||this.create_stamp_node()}create_stamp_node(){const t=new lh(this.scene());return this.dirtyController.setForbiddenTriggerNodes([t]),t}}const U_=new class extends ua{constructor(){super(...arguments),this.delay=ha.FLOAT(1)}};class G_ extends oh{constructor(){super(...arguments),this.paramsConfig=U_}static type(){return\\\\\\\"delay\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.delay])}))}))}cook(t){const e=t[0]||new B_;e.setDelay(this.pv.delay),this.setTimelineBuilder(e)}}const V_=new class extends ua{constructor(){super(...arguments),this.duration=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]})}};class H_ extends oh{constructor(){super(...arguments),this.paramsConfig=V_}static type(){return\\\\\\\"duration\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.duration])}))}))}cook(t){const e=t[0]||new B_;e.setDuration(this.pv.duration),this.setTimelineBuilder(e)}}const j_=new class extends ua{constructor(){super(...arguments),this.name=ha.INTEGER(uh.indexOf(ch.POWER4),{menu:{entries:uh.map(((t,e)=>({name:t,value:e})))}}),this.inOut=ha.INTEGER(ph.indexOf(dh.OUT),{menu:{entries:ph.map(((t,e)=>({name:t,value:e})))}})}};class W_ extends oh{constructor(){super(...arguments),this.paramsConfig=j_}static type(){return\\\\\\\"easing\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name,this.p.inOut],(()=>this.easing_full_name()))}))}))}easing_full_name(){const t=uh[this.pv.name];if(t==ch.NONE)return t;return`${t}.${ph[this.pv.inOut]}`}cook(t){const e=t[0]||new B_,n=this.easing_full_name();e.setEasing(n),this.setTimelineBuilder(e)}}var q_;!function(t){t.RELATIVE=\\\\\\\"relative\\\\\\\",t.ABSOLUTE=\\\\\\\"absolute\\\\\\\"}(q_||(q_={}));const X_=[q_.RELATIVE,q_.ABSOLUTE];var Y_;!function(t){t.START=\\\\\\\"start\\\\\\\",t.END=\\\\\\\"end\\\\\\\"}(Y_||(Y_={}));const $_=[Y_.START,Y_.END];class J_{constructor(){this._mode=q_.RELATIVE,this._relativeTo=Y_.END,this._offset=0}clone(){const t=new J_;return t.setMode(this._mode),t.setRelativeTo(this._relativeTo),t.setOffset(this._offset),t}setMode(t){this._mode=t}mode(){return this._mode}setRelativeTo(t){this._relativeTo=t}relativeTo(){return this._relativeTo}setOffset(t){this._offset=t}offset(){return this._offset}toParameter(){switch(this._mode){case q_.RELATIVE:return this._relative_position_param();case q_.ABSOLUTE:return this._absolutePositionParam()}os.unreachable(this._mode)}_relative_position_param(){switch(this._relativeTo){case Y_.END:return this._offsetString();case Y_.START:return`<${this._offset}`}os.unreachable(this._relativeTo)}_absolutePositionParam(){return this._offset}_offsetString(){return this._offset>0?`+=${this._offset}`:`-=${Math.abs(this._offset)}`}}var Z_;!function(t){t.ALL_TOGETHER=\\\\\\\"play all together\\\\\\\",t.ONE_AT_A_TIME=\\\\\\\"play one at a time\\\\\\\"}(Z_||(Z_={}));const K_=[Z_.ALL_TOGETHER,Z_.ONE_AT_A_TIME];const Q_=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(0,{menu:{entries:K_.map(((t,e)=>({name:t,value:e})))}}),this.offset=ha.FLOAT(0,{range:[-1,1]}),this.overridePositions=ha.BOOLEAN(0),this.inputsCount=ha.INTEGER(4,{range:[1,32],rangeLocked:[!0,!1],callback:t=>{tm.PARAM_CALLBACK_setInputsCount(t)}})}};class tm extends oh{constructor(){super(...arguments),this.paramsConfig=Q_}static type(){return\\\\\\\"merge\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.mode],(()=>K_[this.pv.mode]))})),this.params.addOnSceneLoadHook(\\\\\\\"update inputs\\\\\\\",(()=>{this._callbackUpdateInputsCount()}))}))}cook(t){const e=new B_;let n=0;for(let i of t)i&&(n>0&&this._updateTimelineBuilder(i),e.addTimelineBuilder(i),n++);this.setTimelineBuilder(e)}_updateTimelineBuilder(t){const e=K_[this.pv.mode];switch(e){case Z_.ALL_TOGETHER:return this._setPlayAllTogether(t);case Z_.ONE_AT_A_TIME:return this._setPlayOneAtATime(t)}os.unreachable(e)}_setPlayAllTogether(t){let e=t.position();e&&!this.pv.overridePositions||(e=new J_,e.setMode(q_.RELATIVE),e.setRelativeTo(Y_.START),e.setOffset(this.pv.offset),t.setPosition(e))}_setPlayOneAtATime(t){let e=t.position();e&&!this.pv.overridePositions||(e=new J_,e.setMode(q_.RELATIVE),e.setRelativeTo(Y_.END),e.setOffset(this.pv.offset),t.setPosition(e))}_callbackUpdateInputsCount(){this.io.inputs.setCount(1,this.pv.inputsCount),this.emit(Ei.INPUTS_UPDATED)}static PARAM_CALLBACK_setInputsCount(t){t._callbackUpdateInputsCount()}}const em=new class extends ua{constructor(){super(...arguments),this.play=ha.BUTTON(null,{callback:t=>{nm.PARAM_CALLBACK_play(t)}}),this.pause=ha.BUTTON(null,{callback:t=>{nm.PARAM_CALLBACK_pause(t)}}),this.debug=ha.BOOLEAN(0)}};class nm extends oh{constructor(){super(...arguments),this.paramsConfig=em}static type(){return\\\\\\\"null\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){const e=t[0]||new B_;this.setTimelineBuilder(e)}async play(){return new Promise((async t=>{const e=await this.compute();if(!e)return;if(this._timelineBuilder=e.coreContent(),!this._timelineBuilder)return;this._timeline&&this._timeline.kill();let n=!1;this._timeline=F_.timeline({onComplete:function(){n||(n=!0,t())}}),this.pv.debug&&li.log(`play from '${this.path()}'`),this._timeline.pjsid=Math.random(),this._timelineBuilder.setDebug(this.pv.debug),this._timelineBuilder.populate(this._timeline)}))}async pause(){this._timeline&&this._timeline.pause()}static PARAM_CALLBACK_play(t){t.play()}static PARAM_CALLBACK_pause(t){t.pause()}}const im=new class extends ua{constructor(){super(...arguments),this.operation=ha.INTEGER(0,{menu:{entries:D_.map(((t,e)=>({value:e,name:t})))}})}};class sm extends oh{constructor(){super(...arguments),this.paramsConfig=im}static type(){return\\\\\\\"operation\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.operation],(()=>D_[this.pv.operation]))}))}))}cook(t){const e=t[0]||new B_;e.setOperation(D_[this.pv.operation]),this.setTimelineBuilder(e)}}const rm=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(0,{menu:{entries:X_.map(((t,e)=>({name:t,value:e})))}}),this.relativeTo=ha.INTEGER(0,{menu:{entries:$_.map(((t,e)=>({name:t,value:e})))}}),this.offset=ha.FLOAT(0)}};class om extends oh{constructor(){super(...arguments),this.paramsConfig=rm}static type(){return\\\\\\\"position\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.mode,this.p.relativeTo,this.p.offset],(()=>{switch(X_[this.pv.mode]){case q_.RELATIVE:return this._relative_label();case q_.ABSOLUTE:return this._absolute_label()}}))}))}))}_relative_label(){const t=this.pv.offset>0?\\\\\\\"after\\\\\\\":\\\\\\\"before\\\\\\\",e=$_[this.pv.relativeTo];return`${Math.abs(this.pv.offset)} ${t} ${e}`}_absolute_label(){return\\\\\\\"absolute\\\\\\\"}cook(t){const e=t[0]||new B_,n=new J_;n.setMode(X_[this.pv.mode]),n.setRelativeTo($_[this.pv.relativeTo]),n.setOffset(this.pv.offset),e.setPosition(n),this.setTimelineBuilder(e)}}const am=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(\\\\\\\"position\\\\\\\")}};class lm extends oh{constructor(){super(...arguments),this.paramsConfig=am}static type(){return\\\\\\\"propertyName\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}cook(t){const e=t[0]||new B_;e.setPropertyName(this.pv.name),this.setTimelineBuilder(e)}}var cm;!function(t){t.CUSTOM=\\\\\\\"custom\\\\\\\",t.FROM_SCENE_GRAPH=\\\\\\\"from scene graph\\\\\\\",t.FROM_NODE=\\\\\\\"from node\\\\\\\"}(cm||(cm={}));const hm=[cm.CUSTOM,cm.FROM_SCENE_GRAPH,cm.FROM_NODE],um=hm.indexOf(cm.CUSTOM),dm=hm.indexOf(cm.FROM_SCENE_GRAPH),pm=hm.indexOf(cm.FROM_NODE);const _m=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(um,{menu:{entries:hm.map(((t,e)=>({name:t,value:e})))}}),this.nodePath=ha.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{mode:pm}}),this.objectMask=ha.STRING(\\\\\\\"*geo1\\\\\\\",{visibleIf:{mode:dm}}),this.printResolve=ha.BUTTON(null,{visibleIf:{mode:dm},callback:t=>{mm.PARAM_CALLBACK_printResolve(t)}}),this.overridePropertyName=ha.BOOLEAN(0,{visibleIf:[{mode:dm},{mode:pm}]}),this.propertyName=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:[{overridePropertyName:!0,mode:dm},{overridePropertyName:!0,mode:pm}]}),this.size=ha.INTEGER(3,{range:[1,4],rangeLocked:[!0,!0],visibleIf:{mode:um}}),this.value1=ha.FLOAT(0,{visibleIf:{mode:um,size:1}}),this.value2=ha.VECTOR2([0,0],{visibleIf:{mode:um,size:2}}),this.value3=ha.VECTOR3([0,0,0],{visibleIf:{mode:um,size:3}}),this.value4=ha.VECTOR4([0,0,0,0],{visibleIf:{mode:um,size:4}})}};class mm extends oh{constructor(){super(...arguments),this.paramsConfig=_m}static type(){return\\\\\\\"propertyValue\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1)}async cook(t){const e=t[0]||new B_;await this._prepareTimelineBuilder(e),this.setTimelineBuilder(e)}setMode(t){this.p.mode.set(hm.indexOf(t))}async _prepareTimelineBuilder(t){const e=hm[this.pv.mode];switch(e){case cm.CUSTOM:return this._prepareTimebuilderCustom(t);case cm.FROM_SCENE_GRAPH:return this._prepareTimebuilderFromSceneGraph(t);case cm.FROM_NODE:return await this._prepareTimebuilderFromNode(t)}os.unreachable(e)}_prepareTimebuilderCustom(t){const e=[this.pv.value1,this.pv.value2.clone(),this.pv.value3.clone(),this.pv.value4.clone()][this.pv.size-1];t.setPropertyValue(e)}_prepareTimebuilderFromSceneGraph(t){const e=this.pv.overridePropertyName?this.pv.propertyName:t.propertyName();if(!e)return;const n=this._foundObjectFromSceneGraph();if(n){const i=n[e];i&&(m.isNumber(i)||m.isVector(i)||i instanceof hh.a)&&t.setPropertyValue(i)}}async _prepareTimebuilderFromNode(t){const e=this.pv.overridePropertyName?this.pv.propertyName:t.propertyName();if(!e)return;const n=this.pv.nodePath.node();if(!n)return;const i=n.params.get(e);if(!i)return;i.isDirty()&&await i.compute();const s=i.value;s&&(m.isNumber(s)||m.isVector(s))&&t.setPropertyValue(s)}static PARAM_CALLBACK_printResolve(t){t.printResolve()}_foundObjectFromSceneGraph(){return this.scene().findObjectByMask(this.pv.objectMask)}printResolve(){const t=this._foundObjectFromSceneGraph();console.log(t)}}const fm=new class extends ua{constructor(){super(...arguments),this.unlimited=ha.BOOLEAN(0),this.count=ha.INTEGER(1,{range:[0,10],visibleIf:{unlimited:0}}),this.delay=ha.FLOAT(0),this.yoyo=ha.BOOLEAN(0)}};class gm extends oh{constructor(){super(...arguments),this.paramsConfig=fm}static type(){return\\\\\\\"repeat\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.unlimited,this.p.count,this.p.yoyo],(()=>`${`${this.p.unlimited?\\\\\\\"unlimited\\\\\\\":this.pv.count}`} (yoyo: ${this.pv.yoyo})`))}))}))}_repeat_params(){return{count:this.pv.unlimited?-1:this.pv.count,delay:this.pv.delay,yoyo:this.pv.yoyo}}cook(t){const e=t[0]||new B_;e.setRepeatParams(this._repeat_params()),this.setTimelineBuilder(e)}}const vm=new class extends ua{constructor(){super(...arguments),this.input=ha.INTEGER(0,{range:[0,3],rangeLocked:[!0,!0]})}};class ym extends oh{constructor(){super(...arguments),this.paramsConfig=vm}static type(){return\\\\\\\"switch\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4)}cook(t){const e=t[this.pv.input];e?this.setTimelineBuilder(e):this.states.error.set(`input ${this.pv.input} is not valid`)}}class xm{constructor(t,e){this._scene=t,this._options=e}clone(){return new xm(this._scene,this._options)}objects(){const t=this._options.objectMask;if(t)return this._scene.objectsByMask(t)}node(){if(!this._options.node)return;const t=this._options.node;return t.relativeTo.node(t.path)}}class bm{constructor(){this._update_matrix=!1}clone(){const t=new bm;return t.setUpdateMatrix(this._update_matrix),t}setUpdateMatrix(t){this._update_matrix=t}updateMatrix(){return this._update_matrix}}var wm;!function(t){t.SCENE_GRAPH=\\\\\\\"scene graph\\\\\\\",t.NODE=\\\\\\\"node\\\\\\\"}(wm||(wm={}));const Tm=[wm.SCENE_GRAPH,wm.NODE],Am=Tm.indexOf(wm.SCENE_GRAPH),Mm=Tm.indexOf(wm.NODE);const Em=new class extends ua{constructor(){super(...arguments),this.type=ha.INTEGER(Am,{menu:{entries:Tm.map(((t,e)=>({name:t,value:e})))}}),this.nodePath=ha.OPERATOR_PATH(\\\\\\\"\\\\\\\",{visibleIf:{type:Mm}}),this.objectMask=ha.STRING(\\\\\\\"/geo*\\\\\\\",{visibleIf:{type:Am}}),this.updateMatrix=ha.BOOLEAN(0,{visibleIf:{type:Am}}),this.printResolve=ha.BUTTON(null,{callback:(t,e)=>{Sm.PARAM_CALLBACK_print_resolve(t)}})}};class Sm extends oh{constructor(){super(...arguments),this.paramsConfig=Em}static type(){return\\\\\\\"target\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.type,this.p.nodePath,this.p.objectMask],(()=>{const t=Tm[this.pv.type];switch(t){case wm.NODE:return this.pv.nodePath;case wm.SCENE_GRAPH:return this.pv.objectMask}os.unreachable(t)}))}))}))}cook(t){const e=t[0]||new B_,n=this._create_target(e);e.setTarget(n),this._set_update_callback(e),this.setTimelineBuilder(e)}setTargetType(t){this.p.type.set(Tm.indexOf(t))}_create_target(t){const e=Tm[this.pv.type];switch(e){case wm.NODE:return new xm(this.scene(),{node:{path:this.pv.nodePath,relativeTo:this}});case wm.SCENE_GRAPH:return new xm(this.scene(),{objectMask:this.pv.objectMask})}os.unreachable(e)}_set_update_callback(t){const e=Tm[this.pv.type];let n=t.updateCallback();switch(e){case wm.NODE:return;case wm.SCENE_GRAPH:return void(this.pv.updateMatrix&&(n=n||new bm,n.setUpdateMatrix(this.pv.updateMatrix),t.setUpdateCallback(n)))}os.unreachable(e)}static PARAM_CALLBACK_print_resolve(t){t.print_resolve()}print_resolve(){const t=Tm[this.pv.type],e=new B_,n=this._create_target(e);switch(t){case wm.NODE:return console.log(n.node());case wm.SCENE_GRAPH:return console.log(n.objects())}}}class Cm extends aa{static context(){return ts.ANIM}cook(){this.cookController.endCook()}}class Nm extends Cm{}class Lm extends Nm{constructor(){super(...arguments),this._children_controller_context=ts.ANIM}static type(){return es.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Om extends Nm{constructor(){super(...arguments),this._children_controller_context=ts.COP}static type(){return es.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Pm extends Nm{constructor(){super(...arguments),this._children_controller_context=ts.EVENT}static type(){return es.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Rm extends Nm{constructor(){super(...arguments),this._children_controller_context=ts.MAT}static type(){return es.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}const Im={dependsOnDisplayNode:!0};class Fm{constructor(t,e,n=Im){this.node=t,this.options=n,this._initialized=!1,this._display_node=void 0,this._graph_node=new Mi(t.scene(),\\\\\\\"DisplayNodeController\\\\\\\"),this._graph_node.node=t,this._on_display_node_remove_callback=e.onDisplayNodeRemove,this._on_display_node_set_callback=e.onDisplayNodeSet,this._on_display_node_update_callback=e.onDisplayNodeUpdate}dispose(){this._graph_node.dispose()}displayNode(){return this._display_node}initializeNode(){this._initialized?console.error(\\\\\\\"display node controller already initialed\\\\\\\",this.node):(this._initialized=!0,this.node.lifecycle.add_on_child_add_hook((t=>{var e,n;this._display_node||null===(n=null===(e=t.flags)||void 0===e?void 0:e.display)||void 0===n||n.set(!0)})),this.node.lifecycle.add_on_child_remove_hook((t=>{var e,n,i;if(t.graphNodeId()==(null===(e=this._display_node)||void 0===e?void 0:e.graphNodeId())){const t=this.node.children(),e=t[t.length-1];e?null===(i=null===(n=e.flags)||void 0===n?void 0:n.display)||void 0===i||i.set(!0):this.setDisplayNode(void 0)}})),this._graph_node.dirtyController.addPostDirtyHook(\\\\\\\"_request_display_node_container\\\\\\\",(()=>{this._on_display_node_update_callback&&this._on_display_node_update_callback()})))}async setDisplayNode(t){if(this._initialized||console.error(\\\\\\\"display node controller not initialized\\\\\\\",this.node),this._display_node!=t){const e=this._display_node;e&&(e.flags.display.set(!1),this.options.dependsOnDisplayNode&&this._graph_node.removeGraphInput(e),this._on_display_node_remove_callback&&this._on_display_node_remove_callback()),this._display_node=t,this._display_node&&(this.options.dependsOnDisplayNode&&this._graph_node.addGraphInput(this._display_node),this._on_display_node_set_callback&&this._on_display_node_set_callback())}}}class Dm{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=Bm(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const e=Bm();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}function Bm(){return(\\\\\\\"undefined\\\\\\\"==typeof performance?Date:performance).now()}var zm={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float opacity;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\t\\\\t\\\\tgl_FragColor = opacity * texel;\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class km{constructor(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error(\\\\\\\"THREE.Pass: .render() must be implemented in derived pass.\\\\\\\")}}const Um=new ot.a(-1,1,1,-1,0,1),Gm=new S.a;Gm.setAttribute(\\\\\\\"position\\\\\\\",new C.c([-1,3,0,-1,-1,0,3,-1,0],3)),Gm.setAttribute(\\\\\\\"uv\\\\\\\",new C.c([0,2,0,0,2,0],2));class Vm{constructor(t){this._mesh=new B.a(Gm,t)}dispose(){this._mesh.geometry.dispose()}render(t){t.render(this._mesh,Um)}get material(){return this._mesh.material}set material(t){this._mesh.material=t}}class Hm extends km{constructor(t,e){super(),this.textureID=void 0!==e?e:\\\\\\\"tDiffuse\\\\\\\",t instanceof F?(this.uniforms=t.uniforms,this.material=t):t&&(this.uniforms=I.clone(t.uniforms),this.material=new F({defines:Object.assign({},t.defines),uniforms:this.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})),this.fsQuad=new Vm(this.material)}render(t,e,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=n.texture),this.fsQuad.material=this.material,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this.fsQuad.render(t))}}class jm extends km{constructor(t,e){super(),this.scene=t,this.camera=e,this.clear=!0,this.needsSwap=!1,this.inverse=!1}render(t,e,n){const i=t.getContext(),s=t.state;let r,o;s.buffers.color.setMask(!1),s.buffers.depth.setMask(!1),s.buffers.color.setLocked(!0),s.buffers.depth.setLocked(!0),this.inverse?(r=0,o=1):(r=1,o=0),s.buffers.stencil.setTest(!0),s.buffers.stencil.setOp(i.REPLACE,i.REPLACE,i.REPLACE),s.buffers.stencil.setFunc(i.ALWAYS,r,4294967295),s.buffers.stencil.setClear(o),s.buffers.stencil.setLocked(!0),t.setRenderTarget(n),this.clear&&t.clear(),t.render(this.scene,this.camera),t.setRenderTarget(e),this.clear&&t.clear(),t.render(this.scene,this.camera),s.buffers.color.setLocked(!1),s.buffers.depth.setLocked(!1),s.buffers.stencil.setLocked(!1),s.buffers.stencil.setFunc(i.EQUAL,1,4294967295),s.buffers.stencil.setOp(i.KEEP,i.KEEP,i.KEEP),s.buffers.stencil.setLocked(!0)}}class Wm extends km{constructor(){super(),this.needsSwap=!1}render(t){t.state.buffers.stencil.setLocked(!1),t.state.buffers.stencil.setTest(!1)}}class qm{constructor(t,e){if(this.renderer=t,void 0===e){const n={minFilter:w.V,magFilter:w.V,format:w.Ib},i=t.getSize(new d.a);this._pixelRatio=t.getPixelRatio(),this._width=i.width,this._height=i.height,(e=new K(this._width*this._pixelRatio,this._height*this._pixelRatio,n)).texture.name=\\\\\\\"EffectComposer.rt1\\\\\\\"}else this._pixelRatio=1,this._width=e.width,this._height=e.height;this.renderTarget1=e,this.renderTarget2=e.clone(),this.renderTarget2.texture.name=\\\\\\\"EffectComposer.rt2\\\\\\\",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],void 0===zm&&console.error(\\\\\\\"THREE.EffectComposer relies on CopyShader\\\\\\\"),void 0===Hm&&console.error(\\\\\\\"THREE.EffectComposer relies on ShaderPass\\\\\\\"),this.copyPass=new Hm(zm),this.clock=new Dm}swapBuffers(){const t=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=t}addPass(t){this.passes.push(t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}insertPass(t,e){this.passes.splice(e,0,t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}removePass(t){const e=this.passes.indexOf(t);-1!==e&&this.passes.splice(e,1)}isLastEnabledPass(t){for(let e=t+1;e<this.passes.length;e++)if(this.passes[e].enabled)return!1;return!0}render(t){void 0===t&&(t=this.clock.getDelta());const e=this.renderer.getRenderTarget();let n=!1;for(let e=0,i=this.passes.length;e<i;e++){const i=this.passes[e];if(!1!==i.enabled){if(i.renderToScreen=this.renderToScreen&&this.isLastEnabledPass(e),i.render(this.renderer,this.writeBuffer,this.readBuffer,t,n),i.needsSwap){if(n){const e=this.renderer.getContext(),n=this.renderer.state.buffers.stencil;n.setFunc(e.NOTEQUAL,1,4294967295),this.copyPass.render(this.renderer,this.writeBuffer,this.readBuffer,t),n.setFunc(e.EQUAL,1,4294967295)}this.swapBuffers()}void 0!==jm&&(i instanceof jm?n=!0:i instanceof Wm&&(n=!1))}}this.renderer.setRenderTarget(e)}reset(t){if(void 0===t){const e=this.renderer.getSize(new d.a);this._pixelRatio=this.renderer.getPixelRatio(),this._width=e.width,this._height=e.height,(t=this.renderTarget1.clone()).setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}this.renderTarget1.dispose(),this.renderTarget2.dispose(),this.renderTarget1=t,this.renderTarget2=t.clone(),this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2}setSize(t,e){this._width=t,this._height=e;const n=this._width*this._pixelRatio,i=this._height*this._pixelRatio;this.renderTarget1.setSize(n,i),this.renderTarget2.setSize(n,i);for(let t=0;t<this.passes.length;t++)this.passes[t].setSize(n,i)}setPixelRatio(t){this._pixelRatio=t,this.setSize(this._width,this._height)}}new ot.a(-1,1,1,-1,0,1);const Xm=new S.a;Xm.setAttribute(\\\\\\\"position\\\\\\\",new C.c([-1,3,0,-1,-1,0,3,-1,0],3)),Xm.setAttribute(\\\\\\\"uv\\\\\\\",new C.c([0,2,0,0,2,0],2));class Ym extends km{constructor(t,e,n,i,s){super(),this.scene=t,this.camera=e,this.overrideMaterial=n,this.clearColor=i,this.clearAlpha=void 0!==s?s:0,this.clear=!0,this.clearDepth=!1,this.needsSwap=!1,this._oldClearColor=new D.a}render(t,e,n){const i=t.autoClear;let s,r;t.autoClear=!1,void 0!==this.overrideMaterial&&(r=this.scene.overrideMaterial,this.scene.overrideMaterial=this.overrideMaterial),this.clearColor&&(t.getClearColor(this._oldClearColor),s=t.getClearAlpha(),t.setClearColor(this.clearColor,this.clearAlpha)),this.clearDepth&&t.clearDepth(),t.setRenderTarget(this.renderToScreen?null:n),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),t.render(this.scene,this.camera),this.clearColor&&t.setClearColor(this._oldClearColor,s),void 0!==this.overrideMaterial&&(this.scene.overrideMaterial=r),t.autoClear=i}}const $m=[{LinearFilter:w.V},{NearestFilter:w.ob}],Jm=[{NearestFilter:w.ob},{NearestMipMapNearestFilter:w.qb},{NearestMipMapLinearFilter:w.pb},{LinearFilter:w.V},{LinearMipMapNearestFilter:w.X},{LinearMipMapLinearFilter:w.W}],Zm=Object.values($m[0])[0],Km=Object.values(Jm[5])[0],Qm=$m.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]}))),tf=Jm.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})));class ef extends ua{constructor(){super(...arguments),this.prependRenderPass=ha.BOOLEAN(1),this.useRenderTarget=ha.BOOLEAN(1),this.tmagFilter=ha.BOOLEAN(0,{visibleIf:{useRenderTarget:1}}),this.magFilter=ha.INTEGER(Zm,{visibleIf:{useRenderTarget:1,tmagFilter:1},menu:{entries:Qm}}),this.tminFilter=ha.BOOLEAN(0,{visibleIf:{useRenderTarget:1}}),this.minFilter=ha.INTEGER(Km,{visibleIf:{useRenderTarget:1,tminFilter:1},menu:{entries:tf}}),this.stencilBuffer=ha.BOOLEAN(0,{visibleIf:{useRenderTarget:1}}),this.sampling=ha.INTEGER(1,{range:[1,4],rangeLocked:[!0,!1]})}}class nf{constructor(t){this.node=t,this._renderer_size=new d.a}displayNodeControllerCallbacks(){return{onDisplayNodeRemove:()=>{},onDisplayNodeSet:()=>{this.node.setDirty()},onDisplayNodeUpdate:()=>{this.node.setDirty()}}}createEffectsComposer(t){const e=t.renderer;let n;if(this.node.pv.useRenderTarget){const t=this._create_render_target(e);n=new qm(e,t)}else n=new qm(e);return n.setPixelRatio(window.devicePixelRatio*this.node.pv.sampling),this._build_passes(n,t),n}_create_render_target(t){let e;t.autoClear=!1;const n={format:w.ic,stencilBuffer:this.node.pv.stencilBuffer};return this.node.pv.tminFilter&&(n.minFilter=this.node.pv.minFilter),this.node.pv.tmagFilter&&(n.magFilter=this.node.pv.magFilter),t.getDrawingBufferSize(this._renderer_size),e=li.renderersController.renderTarget(this._renderer_size.x,this._renderer_size.y,n),e}_build_passes(t,e){if(this.node.pv.prependRenderPass){const n=new Ym(e.scene,e.camera);t.addPass(n)}const n=this.node.displayNodeController.displayNode();n&&n.setupComposer({composer:t,camera:e.camera,resolution:e.resolution,camera_node:e.camera_node,scene:e.scene,requester:e.requester})}}class sf extends Cm{constructor(){super(...arguments),this.paramsConfig=new ef,this.effectsComposerController=new nf(this),this.displayNodeController=new Fm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=ts.POST}static type(){return es.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class rf extends Nm{constructor(){super(...arguments),this._children_controller_context=ts.ROP}static type(){return es.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}var of=n(44);const af=\\\\\\\"input texture\\\\\\\",lf=[af,af,af,af];for(var cf=new Uint16Array(32),hf=0;hf<32;hf++)cf[hf]=28898;const uf=new vo.a(cf,32,1,w.gb,w.M);class df extends aa{constructor(t){super(t,\\\\\\\"BaseCopNode\\\\\\\"),this.flags=new ki(this)}static context(){return ts.COP}static displayedInputNames(){return lf}initializeBaseNode(){this.io.outputs.setHasOneOutput()}setTexture(t){t.name=this.path();const e=this.containerController.container().texture();if(e){if(e.uuid!=t.uuid){const n=Object.keys(t);for(let i of n)e[i]=t[i];e.needsUpdate=!0}this._setContainer(e)}else this._setContainer(t)}_clearTexture(){this._setContainer(uf)}}class pf extends df{}class _f{constructor(){this._id=_f.__next_id++}id(){return this._id}handle_globals_node(t,e,n){}}_f.__next_id=0;class mf{static any(t){return m.isString(t)?t:m.isBoolean(t)?`${t}`:m.isNumber(t)?`${ss.ensureFloat(t)}`:m.isArray(t)?this.numeric_array(t):t instanceof d.a||t instanceof p.a||t instanceof _.a||t instanceof D.a?this.numeric_array(t.toArray()):`ThreeToGl error: unknown value type '${t}'`}static numeric_array(t){const e=new Array(t.length);for(let n=0;n<t.length;n++)e[n]=`${ss.ensureFloat(t[n])}`;return`${`vec${t.length}`}(${e.join(\\\\\\\", \\\\\\\")})`}static vector4(t){if(m.isString(t))return t;return`vec4(${t.toArray().map((t=>`${ss.ensureFloat(t)}`)).join(\\\\\\\", \\\\\\\")})`}static vector3(t){if(m.isString(t))return t;return`vec3(${t.toArray().map((t=>`${ss.ensureFloat(t)}`)).join(\\\\\\\", \\\\\\\")})`}static vector2(t){if(m.isString(t))return t;return`vec2(${t.toArray().map((t=>`${ss.ensureFloat(t)}`)).join(\\\\\\\", \\\\\\\")})`}static vector3_float(t,e){return m.isNumber(e)&&(e=ss.ensureFloat(e)),`vec4(${this.vector3(t)}, ${e})`}static float4(t,e,n,i){return m.isNumber(t)&&(t=ss.ensureFloat(t)),m.isNumber(e)&&(e=ss.ensureFloat(e)),m.isNumber(n)&&(n=ss.ensureFloat(n)),m.isNumber(i)&&(i=ss.ensureFloat(i)),`vec4(${t}, ${e}, ${n}, ${i})`}static float3(t,e,n){return m.isNumber(t)&&(t=ss.ensureFloat(t)),m.isNumber(e)&&(e=ss.ensureFloat(e)),m.isNumber(n)&&(n=ss.ensureFloat(n)),`vec3(${t}, ${e}, ${n})`}static float2(t,e){return m.isNumber(t)&&(t=ss.ensureFloat(t)),m.isNumber(e)&&(e=ss.ensureFloat(e)),`vec2(${t}, ${e})`}static float(t){if(m.isNumber(t))return ss.ensureFloat(t);{const e=parseFloat(t);return m.isNaN(e)?t:ss.ensureFloat(e)}}static integer(t){if(m.isNumber(t))return ss.ensureInteger(t);{const e=parseInt(t);return m.isNaN(e)?t:ss.ensureInteger(e)}}static bool(t){return m.isBoolean(t)?`${t}`:t}}const ff=/\\\\/+/g;class gf extends aa{static context(){return ts.GL}initializeBaseNode(){this.uiData.setLayoutHorizontal(),this.io.connections.initInputs(),this.io.connection_points.spare_params.initializeNode()}cook(){console.warn(\\\\\\\"gl nodes should never cook\\\\\\\")}_set_mat_to_recompile(){var t,e;null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e||e.set_compilation_required_and_dirty(this)}get material_node(){var t;const e=this.parent();if(e)return e.context()==ts.GL?null===(t=e)||void 0===t?void 0:t.material_node:e}glVarName(t){return`v_POLY_${this.path(this.material_node).replace(ff,\\\\\\\"_\\\\\\\")}_${t}`}variableForInputParam(t){return this.variableForInput(t.name())}variableForInput(t){var e;const n=this.io.inputs.get_input_index(t),i=this.io.connections.inputConnection(n);if(i){const e=i.node_src,n=e.io.outputs.namedOutputConnectionPoints()[i.output_index];if(n){const t=n.name();return e.glVarName(t)}throw console.warn(`no output called '${t}' for gl node ${e.path()}`),\\\\\\\"variable_for_input ERROR\\\\\\\"}if(this.params.has(t))return mf.any(null===(e=this.params.get(t))||void 0===e?void 0:e.value);{const t=this.io.inputs.namedInputConnectionPoints()[n];return mf.any(t.init_value)}}setLines(t){}reset_code(){var t;null===(t=this._param_configs_controller)||void 0===t||t.reset()}setParamConfigs(){}param_configs(){var t;return null===(t=this._param_configs_controller)||void 0===t?void 0:t.list()}paramsGenerating(){return!1}paramDefaultValue(t){return null}}const vf=new class extends ua{};class yf extends gf{constructor(){super(...arguments),this.paramsConfig=vf}}const xf=[Uo.FLOAT,Uo.VEC2,Uo.VEC3,Uo.VEC4];const bf=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(\\\\\\\"\\\\\\\"),this.type=ha.INTEGER(0,{menu:{entries:xf.map(((t,e)=>({name:t,value:e})))}}),this.texportWhenConnected=ha.BOOLEAN(0,{hidden:!0}),this.exportWhenConnected=ha.BOOLEAN(0,{visibleIf:{texportWhenConnected:1}})}};class wf extends gf{constructor(){super(...arguments),this.paramsConfig=bf,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this),this._bound_setExportWhenConnectedStatus=this._setExportWhenConnectedStatus.bind(this)}static type(){return ps.ATTRIBUTE}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile_if_is_exporting.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function((()=>{var t,e;return(null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e?void 0:e.allow_attribute_exports())?[xf[this.pv.type]]:[]})),this.io.connection_points.set_input_name_function((t=>wf.INPUT_NAME)),this.io.connection_points.set_expected_output_types_function((()=>[xf[this.pv.type]])),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name,this.p.exportWhenConnected],(()=>this.pv.exportWhenConnected?`${this.pv.name} (EXPORTED)`:this.pv.name))}))})),this.lifecycle.add_on_add_hook(this._bound_setExportWhenConnectedStatus),this.params.addOnSceneLoadHook(\\\\\\\"prepare params\\\\\\\",this._bound_setExportWhenConnectedStatus)}_setExportWhenConnectedStatus(){var t,e;(null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e?void 0:e.allow_attribute_exports())&&this.p.texportWhenConnected.set(1)}setAttribSize(t){this.p.type.set(t-1)}get input_name(){return wf.INPUT_NAME}get output_name(){return wf.OUTPUT_NAME}setLines(t){t.assembler().set_node_lines_attribute(this,t)}get attribute_name(){return this.pv.name.trim()}gl_type(){return this.io.outputs.namedOutputConnectionPoints()[0].type()}set_gl_type(t){this.p.type.set(xf.indexOf(t))}connected_input_node(){return this.io.inputs.named_input(wf.INPUT_NAME)}connected_input_connection_point(){return this.io.inputs.named_input_connection_point(wf.INPUT_NAME)}output_connection_point(){return this.io.outputs.namedOutputConnectionPointsByName(this.output_name)}isImporting(){return this.io.outputs.used_output_names().length>0}isExporting(){if(this.pv.exportWhenConnected){return null!=this.io.inputs.named_input(wf.INPUT_NAME)}return!1}_set_mat_to_recompile_if_is_exporting(){this.isExporting()&&this._set_mat_to_recompile()}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}wf.INPUT_NAME=\\\\\\\"in\\\\\\\",wf.OUTPUT_NAME=\\\\\\\"val\\\\\\\";class Tf{constructor(t=[]){this._definitions=t,this._errored=!1}get errored(){return this._errored}get error_message(){return this._error_message}uniq(){const t=new Map,e=[];for(let n of this._definitions)if(!this._errored){const i=n.name(),s=t.get(i);s?s.data_type!=n.data_type&&(this._errored=!0,this._error_message=`attempt to create '${n.name()}' with types '${n.data_type}' by node '${n.node.path()}', when there is already an existing with type ${s.data_type} from node '${s.node.path()}'`,console.warn(\\\\\\\"emitting error message:\\\\\\\",this._error_message)):(t.set(i,n),e.push(i))}const n=[];for(let i of e){const e=t.get(i);e&&n.push(e)}return n}}var Af,Mf;!function(t){t.ATTRIBUTE=\\\\\\\"attribute\\\\\\\",t.FUNCTION=\\\\\\\"function\\\\\\\",t.UNIFORM=\\\\\\\"uniform\\\\\\\",t.VARYING=\\\\\\\"varying\\\\\\\"}(Af||(Af={}));class Ef{constructor(t,e,n,i){this._definition_type=t,this._data_type=e,this._node=n,this._name=i}get definition_type(){return this._definition_type}get data_type(){return this._data_type}get node(){return this._node}name(){return this._name}collection_instance(){return new Tf}}class Sf extends Ef{constructor(t,e,n){super(Af.ATTRIBUTE,e,t,n),this._node=t,this._data_type=e,this._name=n}get line(){return`attribute ${this.data_type} ${this.name()}`}}class Cf extends Ef{constructor(t,e){super(Af.FUNCTION,Uo.FLOAT,t,e),this._node=t,this._name=e}get line(){return this.name()}}class Nf extends Ef{constructor(t,e,n){super(Af.UNIFORM,e,t,n),this._node=t,this._data_type=e,this._name=n}get line(){return`uniform ${this.data_type} ${this.name()}`}}class Lf extends Ef{constructor(t,e,n){super(Af.VARYING,e,t,n),this._node=t,this._data_type=e,this._name=n}get line(){return`varying ${this.data_type} ${this.name()}`}}!function(t){t.VERTEX=\\\\\\\"vertex\\\\\\\",t.FRAGMENT=\\\\\\\"fragment\\\\\\\",t.LEAVES_FROM_NODES_SHADER=\\\\\\\"leaves_from_nodes_shader\\\\\\\"}(Mf||(Mf={}));const Of={position:\\\\\\\"vec3( position )\\\\\\\"};class Pf extends _f{handle_globals_node(t,e,n){var i,s;const r=t.io.outputs.namedOutputConnectionPointsByName(e);if(!r)return;const o=t.glVarName(e),a=r.type(),l=new Lf(t,a,o);n.addDefinitions(t,[l]);const c=null===(s=null===(i=t.material_node)||void 0===i?void 0:i.assemblerController)||void 0===s?void 0:s.assembler;if(!c)return;const h=c.shader_config(n.current_shader_name);if(!h)return;const u=h.dependencies(),d=[],p=`${o} = modelMatrix * vec4( position, 1.0 )`,_=`${o} = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal )`;switch(e){case\\\\\\\"worldPosition\\\\\\\":d.push(p);break;case\\\\\\\"worldNormal\\\\\\\":d.push(_);break;default:d.push(`${o} = ${a}(${e})`)}for(let e of u)n.addDefinitions(t,[l],e),n.addBodyLines(t,d,e);0==u.length&&n.addBodyLines(t,d)}static variable_config_default(t){return Of[t]}variable_config_default(t){return Pf.variable_config_default(t)}read_attribute(t,e,n,i){return Pf.read_attribute(t,e,n,i)}static read_attribute(t,e,n,i){var s,r;Pf.PRE_DEFINED_ATTRIBUTES.indexOf(n)<0&&i.addDefinitions(t,[new Sf(t,e,n)],Mf.VERTEX);const o=i.current_shader_name;switch(o){case Mf.VERTEX:return n;case Mf.FRAGMENT:{if(!(t instanceof wf))return;const a=\\\\\\\"varying_\\\\\\\"+t.glVarName(t.output_name),l=new Lf(t,e,a),c=new Map;c.set(Mf.FRAGMENT,[]);const u=new Map;u.set(Mf.FRAGMENT,[]),h.pushOnArrayAtEntry(c,o,l);const d=`${a} = ${e}(${n})`,p=null===(r=null===(s=t.material_node)||void 0===s?void 0:s.assemblerController)||void 0===r?void 0:r.assembler.shader_config(o);if(p){const e=p.dependencies();for(let t of e)h.pushOnArrayAtEntry(c,t,l),h.pushOnArrayAtEntry(u,t,d);c.forEach(((e,n)=>{i.addDefinitions(t,e,n)})),u.forEach(((e,n)=>{i.addBodyLines(t,e,n)}))}return a}}}handle_attribute_node(t,e,n,i){return Pf.read_attribute(t,e,n,i)}}Pf.PRE_DEFINED_ATTRIBUTES=[\\\\\\\"position\\\\\\\",\\\\\\\"color\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"uv\\\\\\\",\\\\\\\"uv2\\\\\\\",\\\\\\\"morphTarget0\\\\\\\",\\\\\\\"morphTarget1\\\\\\\",\\\\\\\"morphTarget2\\\\\\\",\\\\\\\"morphTarget3\\\\\\\",\\\\\\\"skinIndex\\\\\\\",\\\\\\\"skinWeight\\\\\\\"],Pf.IF_RULE={uv:\\\\\\\"defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\\\\\\"};const Rf=[Uo.FLOAT,Uo.VEC2,Uo.VEC3,Uo.VEC4];const If=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(\\\\\\\"\\\\\\\"),this.type=ha.INTEGER(0,{menu:{entries:Rf.map(((t,e)=>({name:t,value:e})))}})}};class Ff extends gf{constructor(){super(...arguments),this.paramsConfig=If,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"varyingWrite\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_input_name_function((()=>this.input_name)),this.io.connection_points.set_expected_input_types_function((()=>[Rf[this.pv.type]])),this.io.connection_points.set_expected_output_types_function((()=>[])),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}get input_name(){return Ff.INPUT_NAME}setLines(t){if(t.current_shader_name==Mf.VERTEX){const e=this.gl_type();if(!e)return;const n=this.pv.name,i=new Lf(this,e,n),s=`${n} = ${mf.any(this.variableForInput(Ff.INPUT_NAME))}`;t.addDefinitions(this,[i],Mf.VERTEX),t.addBodyLines(this,[s],Mf.VERTEX)}}get attribute_name(){return this.pv.name.trim()}gl_type(){const t=this.io.inputs.namedInputConnectionPoints()[0];if(t)return t.type()}set_gl_type(t){this.p.type.set(Rf.indexOf(t))}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}Ff.INPUT_NAME=\\\\\\\"vertex\\\\\\\";class Df{static findOutputNodes(t){return t.nodesByType(\\\\\\\"output\\\\\\\")}static findParamGeneratingNodes(t){var e;const n=[];return null===(e=t.childrenController)||void 0===e||e.traverseChildren((t=>{const e=t;e.paramsGenerating()&&n.push(e)})),n}static findVaryingNodes(t){return t.nodesByType(Ff.type())}static findAttributeExportNodes(t){return t.nodesByType(wf.type()).filter((t=>t.isExporting()))}}class Bf{static overlay(t,e){return new Promise(((n,i)=>{let s=document.createElement(\\\\\\\"canvas\\\\\\\");s.width=Math.max(t.width,e.width),s.height=Math.max(t.height,e.height);let r=s.getContext(\\\\\\\"2d\\\\\\\");r.drawImage(t,0,0,t.width,t.height),r.drawImage(e,0,0,e.width,e.height);const o=s.toDataURL(\\\\\\\"image/png\\\\\\\"),a=new Image;a.onload=()=>{n(a)},a.src=o}))}static create_white_image(t,e){return new Promise(((n,i)=>{let s=document.createElement(\\\\\\\"canvas\\\\\\\");s.width=t,s.height=e;let r=s.getContext(\\\\\\\"2d\\\\\\\");r.beginPath(),r.rect(0,0,t,e),r.fillStyle=\\\\\\\"white\\\\\\\",r.fill();const o=s.toDataURL(\\\\\\\"image/png\\\\\\\"),a=new Image;a.onload=()=>{n(a)},a.src=o}))}static make_square(t){return new Promise(((e,n)=>{let i=document.createElement(\\\\\\\"canvas\\\\\\\");const s=Math.min(t.width,t.height),r=t.width/t.height;i.width=s,i.height=s;let o=i.getContext(\\\\\\\"2d\\\\\\\");const a=r>1,l=a?(t.width-s)/2:(t.height-s)/2;a?o.drawImage(t,l,0,s,s,0,0,s,s):o.drawImage(t,0,l,s,s,0,0,s,s);const c=i.toDataURL(\\\\\\\"image/png\\\\\\\"),h=new Image;h.onload=()=>{e(h)},h.src=c}))}static async image_to_blob(t){return new Promise((function(e,n){try{let i=new XMLHttpRequest;i.open(\\\\\\\"GET\\\\\\\",t.src),i.responseType=\\\\\\\"blob\\\\\\\",i.onerror=function(){n(\\\\\\\"Network error.\\\\\\\")},i.onload=function(){200===i.status?e(i.response):n(\\\\\\\"Loading error:\\\\\\\"+i.statusText)},i.send()}catch(t){n(t.message)}}))}static data_from_url(t){return new Promise(((e,n)=>{const i=new Image;i.crossOrigin=\\\\\\\"Anonymous\\\\\\\",i.onload=()=>{const t=this.data_from_image(i);e(t)},i.src=t}))}static data_from_image(t){const e=document.createElement(\\\\\\\"canvas\\\\\\\");e.width=t.width,e.height=t.height;const n=e.getContext(\\\\\\\"2d\\\\\\\");return n.drawImage(t,0,0,t.width,t.height),n.getImageData(0,0,t.width,t.height)}}var zf;!function(t){t.Uint8Array=\\\\\\\"Uint8Array\\\\\\\",t.Uint8ClampedArray=\\\\\\\"Uint8ClampedArray\\\\\\\",t.Float32Array=\\\\\\\"Float32Array\\\\\\\"}(zf||(zf={}));class kf{constructor(t){this.buffer_type=t}from_render_target(t,e){return this._data_texture&&this._same_dimensions(e.texture)||(this._data_texture=this._create_data_texture(e.texture)),this._copy_to_data_texture(t,e),this._data_texture}from_texture(t){const e=Bf.data_from_image(t.image);this._data_texture&&this._same_dimensions(t)||(this._data_texture=this._create_data_texture(t));const n=e.width*e.height,i=e.data,s=this._data_texture.image.data,r=4*n;for(let t=0;t<r;t++)s[t]=i[t];return this._data_texture}get data_texture(){return this._data_texture}reset(){this._data_texture=void 0}_copy_to_data_texture(t,e){const n=e.texture.image;this._data_texture=this._data_texture||this._create_data_texture(e.texture),t.readRenderTargetPixels(e,0,0,n.width,n.height,this._data_texture.image.data),this._data_texture.needsUpdate=!0}_create_data_texture(t){const e=t.image,n=this._create_pixel_buffer(e.width,e.height);return new vo.a(n,e.width,e.height,t.format,t.type,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.anisotropy,t.encoding)}_create_pixel_buffer(t,e){const n=t*e*4;switch(this.buffer_type){case zf.Uint8Array:return new Uint8Array(n);case zf.Uint8ClampedArray:return new Uint8ClampedArray(n);case zf.Float32Array:return new Float32Array(n)}os.unreachable(this.buffer_type)}_same_dimensions(t){if(this._data_texture){const e=this._data_texture.image.width==t.image.width,n=this._data_texture.image.height==t.image.height;return e&&n}return!0}}new class extends ua{};class Uf{constructor(t){this.node=t}async renderer(){return await this.cameraRenderer()}reset(){var t;null===(t=this._renderer)||void 0===t||t.dispose(),this._renderer=void 0}async cameraRenderer(){let t=li.renderersController.firstRenderer();return t||await li.renderersController.waitForRenderer()}save_state(){this.make_linear()}make_linear(){}restore_state(){}}var Gf=n(22),Vf=n(13);class Hf extends O.a{constructor(t){super(),this.type=\\\\\\\"ShadowMaterial\\\\\\\",this.color=new D.a(0),this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this}}Hf.prototype.isShadowMaterial=!0;class jf extends O.a{constructor(t){super(),this.type=\\\\\\\"SpriteMaterial\\\\\\\",this.color=new D.a(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this}}jf.prototype.isSpriteMaterial=!0;var Wf=n(59),qf=n(56);class Xf extends O.a{constructor(t){super(),this.defines={TOON:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshToonMaterial\\\\\\\",this.color=new D.a(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new D.a(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=w.Uc,this.normalScale=new d.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}Xf.prototype.isMeshToonMaterial=!0;class Yf extends O.a{constructor(t){super(),this.type=\\\\\\\"MeshNormalMaterial\\\\\\\",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=w.Uc,this.normalScale=new d.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}Yf.prototype.isMeshNormalMaterial=!0;class $f extends O.a{constructor(t){super(),this.defines={MATCAP:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshMatcapMaterial\\\\\\\",this.color=new D.a(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=w.Uc,this.normalScale=new d.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:\\\\\\\"\\\\\\\"},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this}}$f.prototype.isMeshMatcapMaterial=!0;class Jf extends As.a{constructor(t){super(),this.type=\\\\\\\"LineDashedMaterial\\\\\\\",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}Jf.prototype.isLineDashedMaterial=!0;class Zf extends Vf.a{constructor(t){super(t),this.textures={}}load(t,e,n,i){const s=this,r=new Gf.a(s.manager);r.setPath(s.path),r.setRequestHeader(s.requestHeader),r.setWithCredentials(s.withCredentials),r.load(t,(function(n){try{e(s.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),s.manager.itemError(t)}}),n,i)}parse(t){const e=this.textures;function n(t){return void 0===e[t]&&console.warn(\\\\\\\"THREE.MaterialLoader: Undefined texture\\\\\\\",t),e[t]}const s=new i[t.type];if(void 0!==t.uuid&&(s.uuid=t.uuid),void 0!==t.name&&(s.name=t.name),void 0!==t.color&&void 0!==s.color&&s.color.setHex(t.color),void 0!==t.roughness&&(s.roughness=t.roughness),void 0!==t.metalness&&(s.metalness=t.metalness),void 0!==t.sheen&&(s.sheen=t.sheen),void 0!==t.sheenTint&&(s.sheenTint=(new D.a).setHex(t.sheenTint)),void 0!==t.sheenRoughness&&(s.sheenRoughness=t.sheenRoughness),void 0!==t.emissive&&void 0!==s.emissive&&s.emissive.setHex(t.emissive),void 0!==t.specular&&void 0!==s.specular&&s.specular.setHex(t.specular),void 0!==t.specularIntensity&&(s.specularIntensity=t.specularIntensity),void 0!==t.specularTint&&void 0!==s.specularTint&&s.specularTint.setHex(t.specularTint),void 0!==t.shininess&&(s.shininess=t.shininess),void 0!==t.clearcoat&&(s.clearcoat=t.clearcoat),void 0!==t.clearcoatRoughness&&(s.clearcoatRoughness=t.clearcoatRoughness),void 0!==t.transmission&&(s.transmission=t.transmission),void 0!==t.thickness&&(s.thickness=t.thickness),void 0!==t.attenuationDistance&&(s.attenuationDistance=t.attenuationDistance),void 0!==t.attenuationTint&&void 0!==s.attenuationTint&&s.attenuationTint.setHex(t.attenuationTint),void 0!==t.fog&&(s.fog=t.fog),void 0!==t.flatShading&&(s.flatShading=t.flatShading),void 0!==t.blending&&(s.blending=t.blending),void 0!==t.combine&&(s.combine=t.combine),void 0!==t.side&&(s.side=t.side),void 0!==t.shadowSide&&(s.shadowSide=t.shadowSide),void 0!==t.opacity&&(s.opacity=t.opacity),void 0!==t.format&&(s.format=t.format),void 0!==t.transparent&&(s.transparent=t.transparent),void 0!==t.alphaTest&&(s.alphaTest=t.alphaTest),void 0!==t.depthTest&&(s.depthTest=t.depthTest),void 0!==t.depthWrite&&(s.depthWrite=t.depthWrite),void 0!==t.colorWrite&&(s.colorWrite=t.colorWrite),void 0!==t.stencilWrite&&(s.stencilWrite=t.stencilWrite),void 0!==t.stencilWriteMask&&(s.stencilWriteMask=t.stencilWriteMask),void 0!==t.stencilFunc&&(s.stencilFunc=t.stencilFunc),void 0!==t.stencilRef&&(s.stencilRef=t.stencilRef),void 0!==t.stencilFuncMask&&(s.stencilFuncMask=t.stencilFuncMask),void 0!==t.stencilFail&&(s.stencilFail=t.stencilFail),void 0!==t.stencilZFail&&(s.stencilZFail=t.stencilZFail),void 0!==t.stencilZPass&&(s.stencilZPass=t.stencilZPass),void 0!==t.wireframe&&(s.wireframe=t.wireframe),void 0!==t.wireframeLinewidth&&(s.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap&&(s.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin&&(s.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.rotation&&(s.rotation=t.rotation),1!==t.linewidth&&(s.linewidth=t.linewidth),void 0!==t.dashSize&&(s.dashSize=t.dashSize),void 0!==t.gapSize&&(s.gapSize=t.gapSize),void 0!==t.scale&&(s.scale=t.scale),void 0!==t.polygonOffset&&(s.polygonOffset=t.polygonOffset),void 0!==t.polygonOffsetFactor&&(s.polygonOffsetFactor=t.polygonOffsetFactor),void 0!==t.polygonOffsetUnits&&(s.polygonOffsetUnits=t.polygonOffsetUnits),void 0!==t.dithering&&(s.dithering=t.dithering),void 0!==t.alphaToCoverage&&(s.alphaToCoverage=t.alphaToCoverage),void 0!==t.premultipliedAlpha&&(s.premultipliedAlpha=t.premultipliedAlpha),void 0!==t.visible&&(s.visible=t.visible),void 0!==t.toneMapped&&(s.toneMapped=t.toneMapped),void 0!==t.userData&&(s.userData=t.userData),void 0!==t.vertexColors&&(\\\\\\\"number\\\\\\\"==typeof t.vertexColors?s.vertexColors=t.vertexColors>0:s.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const i=t.uniforms[e];switch(s.uniforms[e]={},i.type){case\\\\\\\"t\\\\\\\":s.uniforms[e].value=n(i.value);break;case\\\\\\\"c\\\\\\\":s.uniforms[e].value=(new D.a).setHex(i.value);break;case\\\\\\\"v2\\\\\\\":s.uniforms[e].value=(new d.a).fromArray(i.value);break;case\\\\\\\"v3\\\\\\\":s.uniforms[e].value=(new p.a).fromArray(i.value);break;case\\\\\\\"v4\\\\\\\":s.uniforms[e].value=(new _.a).fromArray(i.value);break;case\\\\\\\"m3\\\\\\\":s.uniforms[e].value=(new G.a).fromArray(i.value);break;case\\\\\\\"m4\\\\\\\":s.uniforms[e].value=(new A.a).fromArray(i.value);break;default:s.uniforms[e].value=i.value}}if(void 0!==t.defines&&(s.defines=t.defines),void 0!==t.vertexShader&&(s.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(s.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)s.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(s.flatShading=1===t.shading),void 0!==t.size&&(s.size=t.size),void 0!==t.sizeAttenuation&&(s.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(s.map=n(t.map)),void 0!==t.matcap&&(s.matcap=n(t.matcap)),void 0!==t.alphaMap&&(s.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(s.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(s.bumpScale=t.bumpScale),void 0!==t.normalMap&&(s.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(s.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),s.normalScale=(new d.a).fromArray(e)}return void 0!==t.displacementMap&&(s.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(s.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(s.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(s.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(s.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(s.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(s.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(s.specularMap=n(t.specularMap)),void 0!==t.specularIntensityMap&&(s.specularIntensityMap=n(t.specularIntensityMap)),void 0!==t.specularTintMap&&(s.specularTintMap=n(t.specularTintMap)),void 0!==t.envMap&&(s.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(s.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(s.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(s.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(s.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(s.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(s.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(s.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(s.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(s.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(s.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(s.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(s.clearcoatNormalScale=(new d.a).fromArray(t.clearcoatNormalScale)),void 0!==t.transmissionMap&&(s.transmissionMap=n(t.transmissionMap)),void 0!==t.thicknessMap&&(s.thicknessMap=n(t.thicknessMap)),s}setTextures(t){return this.textures=t,this}}class Kf{constructor(t){this.node=t,this._found_uniform_texture_by_id=new Map,this._found_uniform_textures_id_by_uniform_name=new Map,this._found_param_texture_by_id=new Map,this._found_param_textures_id_by_uniform_name=new Map}toJSON(){}load(t){}_materialToJson(t,e){let n;this._unassignTextures(t);try{n=t.toJSON({}),n&&(n.shadowSide=t.shadowSide,n.colorWrite=t.colorWrite)}catch(e){console.error(\\\\\\\"failed to save material data\\\\\\\"),console.log(t)}return n&&null!=t.lights&&(n.lights=t.lights),n&&(n.uuid=`${e.node.path()}-${e.suffix}`),this._reassignTextures(t),n}_unassignTextures(t){this._found_uniform_texture_by_id.clear(),this._found_uniform_textures_id_by_uniform_name.clear(),this._found_param_texture_by_id.clear(),this._found_param_textures_id_by_uniform_name.clear();const e=t.uniforms,n=Object.keys(e);for(let t of n){const n=e[t].value;if(n&&n.uuid){const i=n;this._found_uniform_texture_by_id.set(i.uuid,n),this._found_uniform_textures_id_by_uniform_name.set(t,i.uuid),e[t].value=null}}const i=Object.keys(t);for(let e of i){const n=t[e];if(n&&n.uuid){const i=n;this._found_param_texture_by_id.set(i.uuid,i),this._found_param_textures_id_by_uniform_name.set(e,i.uuid),t[e]=null}}}_reassignTextures(t){const e=[],n=[];this._found_uniform_textures_id_by_uniform_name.forEach(((t,n)=>{e.push(n)})),this._found_param_textures_id_by_uniform_name.forEach(((t,e)=>{n.push(e)}));const i=t.uniforms;for(let t of e){const e=this._found_uniform_textures_id_by_uniform_name.get(t);if(e){const n=this._found_uniform_texture_by_id.get(e);n&&(i[t].value=n)}}for(let e of n){const n=this._found_param_textures_id_by_uniform_name.get(e);if(n){const i=this._found_param_texture_by_id.get(n);i&&(t[e]=i)}}}_loadMaterial(t){t.color=void 0;const e=(new Zf).parse(t);t.shadowSide&&(e.shadowSide=t.shadowSide),null!=t.lights&&(e.lights=t.lights);const n=e.uniforms.uv2Transform;n&&this.mat4ToMat3(n);const i=e.uniforms.uvTransform;return i&&this.mat4ToMat3(i),e}mat4ToMat3(t){const e=t.value;if(null==e.elements[e.elements.length-1]){const n=new G.a;for(let t=0;t<n.elements.length;t++)n.elements[t]=e.elements[t];t.value=n}}}class Qf{constructor(t,e,n){this._type=t,this._name=e,this._default_value=n}static from_param(t){return new Qf(t.type(),t.name(),t.defaultValue())}type(){return this._type}name(){return this._name}get default_value(){return this._default_value}get param_options(){const t=this._callback.bind(this);switch(this._type){case Cr.OPERATOR_PATH:return{callback:t,nodeSelection:{context:ts.COP}};default:return{callback:t}}}_callback(t,e){}}class tg extends Qf{constructor(t,e,n,i){super(t,e,n),this._uniform_name=i}get uniform_name(){return this._uniform_name}get uniform(){return this._uniform=this._uniform||this._create_uniform()}_create_uniform(){return tg.uniform_by_type(this._type)}execute_callback(t,e){this._callback(t,e)}_callback(t,e){tg.callback(e,this.uniform)}static callback(t,e){switch(t.type()){case Cr.RAMP:return void(e.value=t.rampTexture());case Cr.OPERATOR_PATH:return void tg.set_uniform_value_from_texture(t,e);case Cr.NODE_PATH:return void tg.set_uniform_value_from_texture_from_node_path_param(t,e);default:e.value=t.value}}static uniform_by_type(t){switch(t){case Cr.BOOLEAN:case Cr.BUTTON:return{value:0};case Cr.COLOR:return{value:new D.a(0,0,0)};case Cr.FLOAT:case Cr.FOLDER:case Cr.INTEGER:case Cr.OPERATOR_PATH:case Cr.NODE_PATH:case Cr.PARAM_PATH:return{value:0};case Cr.RAMP:case Cr.STRING:return{value:null};case Cr.VECTOR2:return{value:new d.a(0,0)};case Cr.VECTOR3:return{value:new p.a(0,0,0)};case Cr.VECTOR4:return{value:new _.a(0,0,0,0)}}os.unreachable(t)}static set_uniform_value_from_texture(t,e){const n=t.found_node();if(n)if(n.isDirty())n.compute().then((t=>{const n=t.texture();e.value=n}));else{const t=n.containerController.container().texture();e.value=t}else e.value=null}static async set_uniform_value_from_texture_from_node_path_param(t,e){t.isDirty()&&await t.compute();const n=t.value.nodeWithContext(ts.COP);if(n)if(n.isDirty())n.compute().then((t=>{const n=t.texture();e.value=n}));else{const t=n.containerController.container().texture();e.value=t}else e.value=null}set_uniform_value_from_ramp(t,e){e.value=t.rampTexture()}}class eg extends Kf{constructor(t){super(t),this.node=t}toJSON(){const t=this.node.assemblerController;if(!t)return;const e=[],n=t.assembler.param_configs();for(let t of n)e.push([t.name(),t.uniform_name]);return{fragment_shader:this.node.texture_material.fragmentShader,uniforms:this.node.texture_material.uniforms,param_uniform_pairs:e,uniforms_time_dependent:t.assembler.uniformsTimeDependent(),uniforms_resolution_dependent:t.assembler.uniforms_resolution_dependent()}}load(t){this.node.texture_material.fragmentShader=t.fragment_shader,this.node.texture_material.uniforms=t.uniforms,rg.handleDependencies(this.node,t.uniforms_time_dependent||!1,t.uniforms);for(let e of t.param_uniform_pairs){const n=this.node.params.get(e[0]),i=t.uniforms[e[1]];n&&i&&n.options.set({callback:()=>{tg.callback(n,i)}})}}}class ng{static isChrome(){return navigator&&null!=navigator.userAgent&&-1!=navigator.userAgent.indexOf(\\\\\\\"Chrome\\\\\\\")}static isMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}static isiOS(){return/(iPad|iPhone|iPod)/g.test(navigator.userAgent)}static isAndroid(){return/(Android)/g.test(navigator.userAgent)}static isTouchDevice(){var t=document.createElement(\\\\\\\"div\\\\\\\");return t.setAttribute(\\\\\\\"ongesturestart\\\\\\\",\\\\\\\"return;\\\\\\\"),\\\\\\\"function\\\\\\\"==typeof t.ongesturestart}}const ig=[256,256];const sg=new class extends ua{constructor(){super(...arguments),this.resolution=ha.VECTOR2(ig),this.useCameraRenderer=ha.BOOLEAN(0)}};class rg extends df{constructor(){super(...arguments),this.paramsConfig=sg,this.persisted_config=new eg(this),this._assembler_controller=this._create_assembler_controller(),this._texture_mesh=new B.a(new L(2,2)),this.texture_material=new F({uniforms:{},vertexShader:\\\\\\\"\\\\nvoid main()\\\\t{\\\\n\\\\tgl_Position = vec4( position, 1.0 );\\\\n}\\\\n\\\\\\\",fragmentShader:\\\\\\\"\\\\\\\"}),this._texture_scene=new vs,this._texture_camera=new of.a,this._children_controller_context=ts.GL,this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this),this._boundRenderOnTarget=this.renderOnTarget.bind(this)}static type(){return\\\\\\\"builder\\\\\\\"}usedAssembler(){return jn.GL_TEXTURE}_create_assembler_controller(){const t=li.assemblersRegister.assembler(this,this.usedAssembler());if(t){const e=new Pf;return t.set_assembler_globals_handler(e),t}}get assemblerController(){return this._assembler_controller}initializeNode(){this._texture_mesh.material=this.texture_material,this._texture_mesh.scale.multiplyScalar(.25),this._texture_scene.add(this._texture_mesh),this._texture_camera.position.z=1,this.addPostDirtyHook(\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\",(()=>{setTimeout(this._cook_main_without_inputs_when_dirty_bound,0)}))}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}childrenAllowed(){return this.assemblerController?super.childrenAllowed():(this.scene().markAsReadOnly(this),!1)}async _cook_main_without_inputs_when_dirty(){await this.cookController.cookMainWithoutInputs()}async cook(){this.compileIfRequired(),this.renderOnTarget()}shaders_by_name(){return{fragment:this._fragment_shader}}compileIfRequired(){var t;(null===(t=this.assemblerController)||void 0===t?void 0:t.compileRequired())&&this.compile()}compile(){const t=this.assemblerController;if(!t)return;const e=Df.findOutputNodes(this);if(e.length>1)return void this.states.error.set(\\\\\\\"only one output node allowed\\\\\\\");if(e[0]){const n=e;t.assembler.set_root_nodes(n),t.assembler.update_fragment_shader();const i=t.assembler.fragment_shader(),s=t.assembler.uniforms();i&&s&&(this._fragment_shader=i,this._uniforms=s),rg.handleDependencies(this,t.assembler.uniformsTimeDependent())}this._fragment_shader&&this._uniforms&&(this.texture_material.fragmentShader=this._fragment_shader,this.texture_material.uniforms=this._uniforms,this.texture_material.needsUpdate=!0,this.texture_material.uniforms.resolution={value:this.pv.resolution}),t.post_compile()}static handleDependencies(t,e,n){const i=t.scene();if(e){n&&i.uniformsController.addTimeDependentUniformOwner(t._uniformCallbackName(),n);const e=t._callbackName();i.registeredBeforeTickCallbacks().has(e)||i.registerOnBeforeTick(e,t._boundRenderOnTarget)}else t._removeCallbacks()}_callbackName(){return`cop/builder_${this.graphNodeId()}`}_uniformCallbackName(){return`cop/builder_uniforms_${this.graphNodeId()}`}dispose(){super.dispose(),this._removeCallbacks()}_removeCallbacks(){const t=this.scene();t.uniformsController.removeTimeDependentUniformOwner(this._uniformCallbackName()),t.unRegisterOnBeforeTick(this._callbackName())}async renderOnTarget(){if(this.createRenderTargetIfRequired(),!this._render_target)return;this._renderer_controller=this._renderer_controller||new Uf(this);const t=await this._renderer_controller.renderer(),e=t.getRenderTarget();if(t.setRenderTarget(this._render_target),t.clear(),t.render(this._texture_scene,this._texture_camera),t.setRenderTarget(e),this._render_target.texture)if(this.pv.useCameraRenderer)this.setTexture(this._render_target.texture);else{this._data_texture_controller=this._data_texture_controller||new kf(zf.Float32Array);const e=this._data_texture_controller.from_render_target(t,this._render_target);this.setTexture(e)}else this.cookController.endCook()}renderTarget(){return this._render_target=this._render_target||this._createRenderTarget(this.pv.resolution.x,this.pv.resolution.y)}createRenderTargetIfRequired(){var t;this._render_target&&this._renderTargetResolutionValid()||(this._render_target=this._createRenderTarget(this.pv.resolution.x,this.pv.resolution.y),null===(t=this._data_texture_controller)||void 0===t||t.reset())}_renderTargetResolutionValid(){if(this._render_target){const t=this._render_target.texture.image;return t.width==this.pv.resolution.x&&t.height==this.pv.resolution.y}return!1}_createRenderTarget(t,e){if(this._render_target){const n=this._render_target.texture.image;if(n.width==t&&n.height==e)return this._render_target}const n=w.n,i=w.n,s=w.V,r=w.ob;var o=new K(t,e,{wrapS:n,wrapT:i,minFilter:s,magFilter:r,format:w.Ib,type:ng.isiOS()?w.M:w.G,stencilBuffer:!1,depthBuffer:!1});return li.warn(\\\\\\\"created render target\\\\\\\",this.path(),t,e),o}}const og=[{LinearEncoding:w.U},{sRGBEncoding:w.ld},{GammaEncoding:w.J},{RGBEEncoding:w.gc},{LogLuvEncoding:w.bb},{RGBM7Encoding:w.lc},{RGBM16Encoding:w.kc},{RGBDEncoding:w.fc},{BasicDepthPacking:w.j},{RGBADepthPacking:w.Hb}],ag=[{ClampToEdgeWrapping:w.n},{RepeatWrapping:w.wc},{MirroredRepeatWrapping:w.kb}],lg=[{UVMapping:w.Yc},{CubeReflectionMapping:w.o},{CubeRefractionMapping:w.p},{EquirectangularReflectionMapping:w.D},{EquirectangularRefractionMapping:w.E},{CubeUVReflectionMapping:w.q},{CubeUVRefractionMapping:w.r}],cg=[{UnsignedByteType:w.Zc},{ByteType:w.l},{ShortType:w.Mc},{UnsignedShortType:w.fd},{IntType:w.N},{UnsignedIntType:w.bd},{FloatType:w.G},{HalfFloatType:w.M},{UnsignedShort4444Type:w.cd},{UnsignedShort5551Type:w.dd},{UnsignedShort565Type:w.ed},{UnsignedInt248Type:w.ad}],hg=[{AlphaFormat:w.f},{RedFormat:w.tc},{RedIntegerFormat:w.uc},{RGFormat:w.rc},{RGIntegerFormat:w.sc},{RGBFormat:w.ic},{RGBIntegerFormat:w.jc},{RGBAFormat:w.Ib},{RGBAIntegerFormat:w.Jb},{LuminanceFormat:w.gb},{LuminanceAlphaFormat:w.fb},{DepthFormat:w.x},{DepthStencilFormat:w.y}];function ug(t){return{cook:!1,callback:e=>{Sg[t](e)}}}const dg={ENCODING:w.U,FORMAT:w.Ib,MAPPING:w.Yc,MIN_FILTER:w.V,MAG_FILTER:w.V,TYPE:w.Zc,WRAPPING:w.wc},pg=ug(\\\\\\\"PARAM_CALLBACK_update_encoding\\\\\\\"),_g=ug(\\\\\\\"PARAM_CALLBACK_update_mapping\\\\\\\"),mg=ug(\\\\\\\"PARAM_CALLBACK_update_wrap\\\\\\\"),fg=ug(\\\\\\\"PARAM_CALLBACK_update_filter\\\\\\\"),gg=ug(\\\\\\\"PARAM_CALLBACK_update_anisotropy\\\\\\\"),vg=ug(\\\\\\\"PARAM_CALLBACK_update_flipY\\\\\\\"),yg=ug(\\\\\\\"PARAM_CALLBACK_update_transform\\\\\\\"),xg=ug(\\\\\\\"PARAM_CALLBACK_update_repeat\\\\\\\"),bg=ug(\\\\\\\"PARAM_CALLBACK_update_offset\\\\\\\"),wg=ug(\\\\\\\"PARAM_CALLBACK_update_rotation\\\\\\\"),Tg=ug(\\\\\\\"PARAM_CALLBACK_update_center\\\\\\\"),Ag=ug(\\\\\\\"PARAM_CALLBACK_update_advanced\\\\\\\");function Mg(t,e){return class extends t{constructor(){super(...arguments),this.tencoding=ha.BOOLEAN((null==e?void 0:e.tencoding)||0,{...pg}),this.encoding=ha.INTEGER((null==e?void 0:e.encoding)||dg.ENCODING,{visibleIf:{tencoding:1},menu:{entries:og.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...pg}),this.tmapping=ha.BOOLEAN(0,{..._g}),this.mapping=ha.INTEGER(dg.MAPPING,{visibleIf:{tmapping:1},menu:{entries:lg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},..._g}),this.twrap=ha.BOOLEAN(0,{...mg}),this.wrapS=ha.INTEGER(dg.WRAPPING,{visibleIf:{twrap:1},menu:{entries:ag.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...mg}),this.wrapT=ha.INTEGER(dg.WRAPPING,{visibleIf:{twrap:1},menu:{entries:ag.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},separatorAfter:!0,...mg}),this.tminFilter=ha.BOOLEAN(0,{...fg}),this.minFilter=ha.INTEGER(Km,{visibleIf:{tminFilter:1},menu:{entries:tf},...fg}),this.tmagFilter=ha.BOOLEAN(0,{...fg}),this.magFilter=ha.INTEGER(Zm,{visibleIf:{tmagFilter:1},menu:{entries:Qm},...fg}),this.tanisotropy=ha.BOOLEAN(0,{...gg}),this.useRendererMaxAnisotropy=ha.BOOLEAN(0,{visibleIf:{tanisotropy:1},...gg}),this.anisotropy=ha.INTEGER(2,{visibleIf:{tanisotropy:1,useRendererMaxAnisotropy:0},range:[0,32],rangeLocked:[!0,!1],...gg}),this.tflipY=ha.BOOLEAN(0,{...vg}),this.flipY=ha.BOOLEAN(0,{visibleIf:{tflipY:1},...vg}),this.ttransform=ha.BOOLEAN(0,{...yg}),this.offset=ha.VECTOR2([0,0],{visibleIf:{ttransform:1},...bg}),this.repeat=ha.VECTOR2([1,1],{visibleIf:{ttransform:1},...xg}),this.rotation=ha.FLOAT(0,{range:[-1,1],visibleIf:{ttransform:1},...wg}),this.center=ha.VECTOR2([0,0],{visibleIf:{ttransform:1},...Tg}),this.tadvanced=ha.BOOLEAN(0,{...Ag}),this.tformat=ha.BOOLEAN(0,{visibleIf:{tadvanced:1},...Ag}),this.format=ha.INTEGER(dg.FORMAT,{visibleIf:{tadvanced:1,tformat:1},menu:{entries:hg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...Ag}),this.ttype=ha.BOOLEAN(0,{visibleIf:{tadvanced:1},...Ag}),this.type=ha.INTEGER(dg.TYPE,{visibleIf:{tadvanced:1,ttype:1},menu:{entries:cg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...Ag})}}}class Eg extends(Mg(ua)){}new Eg;class Sg{constructor(t){this.node=t}async update(t){const e=this.node.pv;this._updateEncoding(t,e),this._updateAdvanced(t,e),this._updateMapping(t,e),this._updateWrap(t,e),this._updateFilter(t,e),this._updateFlip(t,e),await this._updateAnisotropy(t,e),this._updateTransform(t)}_updateEncoding(t,e){e.tencoding?t.encoding=e.encoding:t.encoding=dg.ENCODING,t.needsUpdate=!0}_updateAdvanced(t,e){e.tadvanced&&(e.tformat?t.format=e.format:t.format=dg.FORMAT,e.ttype?t.type=e.type:t.type=dg.TYPE),t.needsUpdate=!0}_updateMapping(t,e){e.tmapping?t.mapping=e.mapping:t.mapping=dg.MAPPING,t.needsUpdate=!0}_updateWrap(t,e){e.twrap?(t.wrapS=e.wrapS,t.wrapT=e.wrapT):(t.wrapS=dg.WRAPPING,t.wrapT=dg.WRAPPING),t.needsUpdate=!0}_updateFilter(t,e){e.tminFilter?t.minFilter=e.minFilter:t.minFilter=w.V,e.tmagFilter?t.magFilter=e.magFilter:t.magFilter=w.V,t.needsUpdate=!0}_updateFlip(t,e){t.flipY=e.tflipY&&e.flipY,t.needsUpdate=!0}async _updateAnisotropy(t,e){if(e.tanisotropy){if(e.useRendererMaxAnisotropy)t.anisotropy=await this._maxRendererAnisotropy();else{const n=e.anisotropy;t.anisotropy=n<=2?n:Math.min(n,await this._maxRendererAnisotropy())}t.needsUpdate=!0}else t.anisotropy=1}async _maxRendererAnisotropy(){this._renderer_controller=this._renderer_controller||new Uf(this.node);return(await this._renderer_controller.renderer()).capabilities.getMaxAnisotropy()}_updateTransform(t){if(!this.node.pv.ttransform)return t.offset.set(0,0),t.rotation=0,t.repeat.set(1,1),void t.center.set(0,0);this._updateTransformOffset(t,!1),this._updateTransformRepeat(t,!1),this._updateTransformRotation(t,!1),this._updateTransformCenter(t,!1),t.updateMatrix()}async _updateTransformOffset(t,e){t.offset.copy(this.node.pv.offset),e&&t.updateMatrix()}async _updateTransformRepeat(t,e){t.repeat.copy(this.node.pv.repeat),e&&t.updateMatrix()}async _updateTransformRotation(t,e){t.rotation=this.node.pv.rotation,e&&t.updateMatrix()}async _updateTransformCenter(t,e){t.center.copy(this.node.pv.center),e&&t.updateMatrix()}static PARAM_CALLBACK_update_encoding(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateEncoding(e,t.pv)}static PARAM_CALLBACK_update_mapping(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateMapping(e,t.pv)}static PARAM_CALLBACK_update_wrap(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateWrap(e,t.pv)}static PARAM_CALLBACK_update_filter(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateFilter(e,t.pv)}static PARAM_CALLBACK_update_anisotropy(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateAnisotropy(e,t.pv)}static PARAM_CALLBACK_update_flipY(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateFlip(e,t.pv)}static PARAM_CALLBACK_update_transform(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransform(e)}static PARAM_CALLBACK_update_offset(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransformOffset(e,!0)}static PARAM_CALLBACK_update_repeat(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransformRepeat(e,!0)}static PARAM_CALLBACK_update_rotation(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransformRotation(e,!0)}static PARAM_CALLBACK_update_center(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransformCenter(e,!0)}static PARAM_CALLBACK_update_advanced(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateAdvanced(e,t.pv)}static copyTextureAttributes(t,e){t.encoding=e.encoding,t.mapping=e.mapping,t.wrapS=e.wrapS,t.wrapT=e.wrapT,t.minFilter=e.minFilter,t.magFilter=e.magFilter,t.magFilter=e.magFilter,t.anisotropy=e.anisotropy,t.flipY=e.flipY,t.repeat.copy(e.repeat),t.offset.copy(e.offset),t.center.copy(e.center),t.rotation=e.rotation,t.type=e.type,t.format=e.format,t.needsUpdate=!0}paramLabelsParams(){const t=this.node.p;return[t.tencoding,t.encoding,t.tmapping,t.mapping,t.twrap,t.wrapS,t.wrapT,t.tminFilter,t.minFilter,t.tmagFilter,t.magFilter,t.tflipY,t.flipY]}paramLabels(){const t=[],e=this.node.pv;if(e.tencoding)for(let n of og){const i=Object.keys(n)[0];n[i]==e.encoding&&t.push(`encoding: ${i}`)}if(e.tmapping)for(let n of lg){const i=Object.keys(n)[0];n[i]==e.mapping&&t.push(`mapping: ${i}`)}if(e.twrap){function n(n){for(let i of ag){const s=Object.keys(i)[0];i[s]==e[n]&&t.push(`${n}: ${s}`)}}n(\\\\\\\"wrapS\\\\\\\"),n(\\\\\\\"wrapT\\\\\\\")}if(e.tminFilter)for(let n of Jm){const i=Object.keys(n)[0];n[i]==e.minFilter&&t.push(`minFilter: ${i}`)}if(e.tmagFilter)for(let n of $m){const i=Object.keys(n)[0];n[i]==e.magFilter&&t.push(`magFilter: ${i}`)}return e.tflipY&&t.push(`flipY: ${e.flipY}`),t}}class Cg extends Z.a{constructor(t,e,n,i,s,r,o,a,l){super(t,e,n,i,s,r,o,a,l),this.needsUpdate=!0}}Cg.prototype.isCanvasTexture=!0;class Ng extends(Mg(function(t){return class extends t{constructor(){super(...arguments),this.canvasId=ha.STRING(\\\\\\\"canvas-id\\\\\\\"),this.update=ha.BUTTON(null,{cook:!1,callback:t=>{Og.PARAM_CALLBACK_update(t)}})}}}(ua))){}const Lg=new Ng;class Og extends df{constructor(){super(...arguments),this.paramsConfig=Lg,this.textureParamsController=new Sg(this)}static type(){return\\\\\\\"canvas\\\\\\\"}async cook(){const t=this.pv.canvasId,e=document.getElementById(t);if(!e)return this.states.error.set(`element with id '${t}' not found`),void this.cookController.endCook();if(!(e instanceof HTMLCanvasElement))return this.states.error.set(\\\\\\\"element found is not a canvas\\\\\\\"),void this.cookController.endCook();const n=new Cg(e);await this.textureParamsController.update(n),this.setTexture(n)}static PARAM_CALLBACK_update(t){t.markTextureNeedsUpdate()}markTextureNeedsUpdate(){const t=this.containerController.container().texture();t&&(t.needsUpdate=!0)}}const Pg=new class extends ua{constructor(){super(...arguments),this.resolution=ha.VECTOR2([256,256],{callback:t=>{Rg.PARAM_CALLBACK_reset(t)}}),this.color=ha.COLOR([1,1,1])}};class Rg extends df{constructor(){super(...arguments),this.paramsConfig=Pg}static type(){return\\\\\\\"color\\\\\\\"}cook(){const t=this.pv.resolution.x,e=this.pv.resolution.y;this._data_texture=this._data_texture||this._create_data_texture(t,e);const n=e*t,i=this.pv.color.toArray(),s=255*i[0],r=255*i[1],o=255*i[2],a=this._data_texture.image.data;for(let t=0;t<n;t++)a[4*t+0]=s,a[4*t+1]=r,a[4*t+2]=o,a[4*t+3]=255;this._data_texture.needsUpdate=!0,this.setTexture(this._data_texture)}_create_data_texture(t,e){const n=this._create_pixel_buffer(t,e);return new vo.a(n,t,e)}_create_pixel_buffer(t,e){return new Uint8Array(t*e*4)}static PARAM_CALLBACK_reset(t){t._reset()}_reset(){this._data_texture=void 0}}var Ig,Fg,Dg;!function(t){t.GEO=\\\\\\\"geo\\\\\\\",t.CUBE_CAMERA=\\\\\\\"cubeCamera\\\\\\\",t.AUDIO_LISTENER=\\\\\\\"audioListener\\\\\\\",t.POSITIONAL_AUDIO=\\\\\\\"positionalAudio\\\\\\\"}(Ig||(Ig={})),function(t){t.CUBE_CAMERA=\\\\\\\"cubeCamera\\\\\\\",t.VIDEO=\\\\\\\"video\\\\\\\",t.WEB_CAM=\\\\\\\"webCam\\\\\\\",t.SNAPSHOT=\\\\\\\"snapshot\\\\\\\"}(Fg||(Fg={})),function(t){t.REFLECTION=\\\\\\\"reflection\\\\\\\",t.REFRACTION=\\\\\\\"refraction\\\\\\\"}(Dg||(Dg={}));const Bg=[Dg.REFLECTION,Dg.REFRACTION];const zg=new class extends ua{constructor(){super(...arguments),this.cubeCamera=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.OBJ,types:[Ig.CUBE_CAMERA]}}),this.mode=ha.INTEGER(0,{menu:{entries:Bg.map(((t,e)=>({name:t,value:e})))}})}};class kg extends df{constructor(){super(...arguments),this.paramsConfig=zg}static type(){return Fg.CUBE_CAMERA}async cook(){const t=this.pv.cubeCamera.nodeWithContext(ts.OBJ,this.states.error);if(!t)return this.states.error.set(`cubeCamera not found at '${this.pv.cubeCamera.path()}'`),this.cookController.endCook();const e=t.renderTarget();if(!e)return this.states.error.set(\\\\\\\"cubeCamera has no render target'\\\\\\\"),this.cookController.endCook();const n=e.texture;Bg[this.pv.mode]==Dg.REFLECTION?n.mapping=w.o:n.mapping=w.p,this.setTexture(n)}}var Ug;!function(t){t.REFLECTION=\\\\\\\"reflection\\\\\\\",t.REFRACTION=\\\\\\\"refraction\\\\\\\"}(Ug||(Ug={}));const Gg=[Ug.REFLECTION,Ug.REFRACTION];const Vg=new class extends ua{constructor(){super(...arguments),this.useCameraRenderer=ha.BOOLEAN(1),this.mode=ha.INTEGER(0,{menu:{entries:Gg.map(((t,e)=>({name:t,value:e})))}})}};class Hg extends df{constructor(){super(...arguments),this.paramsConfig=Vg}static type(){return\\\\\\\"envMap\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){const e=t[0];this.convert_texture_to_env_map(e)}async convert_texture_to_env_map(t){this._renderer_controller=this._renderer_controller||new Uf(this);const e=await this._renderer_controller.renderer();if(e){const n=new Tt(e).fromEquirectangular(t);if(this.pv.useCameraRenderer)this._set_mapping(n.texture),this.setTexture(n.texture);else{this._data_texture_controller=this._data_texture_controller||new kf(zf.Uint8Array);const t=this._data_texture_controller.from_render_target(e,n);this._set_mapping(t),this.setTexture(t)}}else this.states.error.set(\\\\\\\"no renderer found to convert the texture to an env map\\\\\\\"),this.cookController.endCook()}_set_mapping(t){Gg[this.pv.mode]==Ug.REFLECTION?t.mapping=w.q:t.mapping=w.r}}class jg extends Z.a{constructor(t,e,n,i,s,r,o,a,l){super(t,e,n,i,s,r,o,a,l),this.format=void 0!==o?o:w.ic,this.minFilter=void 0!==r?r:w.V,this.magFilter=void 0!==s?s:w.V,this.generateMipmaps=!1;const c=this;\\\\\\\"requestVideoFrameCallback\\\\\\\"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1===\\\\\\\"requestVideoFrameCallback\\\\\\\"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}jg.prototype.isVideoTexture=!0;var Wg=n(80);const qg=\\\\\\\"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/\\\\\\\";var Xg=n(28);const Yg=new Xg.b;Yg.setURLModifier((t=>{const e=li.assetUrls.remapedUrl(t);if(e)return e;const n=li.blobs.blobUrl(t);return n||t}));class $g{constructor(t,e,n){this._url=t,this._scene=e,this._node=n,this.loadingManager=Yg}static extension(t){let e=null;try{e=new URL(t).searchParams.get(\\\\\\\"ext\\\\\\\")}catch(t){}if(!e){const n=t.split(\\\\\\\"?\\\\\\\")[0].split(\\\\\\\".\\\\\\\");e=n[n.length-1].toLowerCase()}return e}extension(){return $g.extension(this._url)}async _urlToLoad(){const{storedUrl:t,fullUrl:e}=this._urlData();this._node&&await li.blobs.fetchBlobForNode({storedUrl:t,fullUrl:e,node:this._node});return li.blobs.blobUrl(t)||e}deregisterUrl(){const{storedUrl:t}=this._urlData();li.blobs.deregisterUrl(t)}_urlData(){let t=this._url;const e=this._url.split(\\\\\\\"?\\\\\\\")[0];if(\\\\\\\"h\\\\\\\"!=t[0]){const e=this._scene.assets.root();e&&(t=`${e}${t}`)}return{fullUrl:t,storedUrl:e}}static async _loadMultipleBlobGlobal(t){const e=[];for(let n of t.files){const i=n.storedUrl,s=n.fullUrl,r=t.node;e.push(li.blobs.fetchBlobGlobal({storedUrl:i,fullUrl:s,node:r}))}const n=await Promise.all(e);for(let e of n)e.error&&t.node.states.error.set(t.error)}}$g.loadingManager=Yg;const Jg=[\\\\\\\"mp4\\\\\\\",\\\\\\\"ogv\\\\\\\",\\\\\\\"ogg\\\\\\\"];var Zg;!function(t){t.JPG=\\\\\\\"jpg\\\\\\\",t.JPEG=\\\\\\\"jpeg\\\\\\\",t.PNG=\\\\\\\"png\\\\\\\",t.EXR=\\\\\\\"exr\\\\\\\",t.BASIS=\\\\\\\"basis\\\\\\\",t.HDR=\\\\\\\"hdr\\\\\\\"}(Zg||(Zg={}));const Kg=[Zg.JPEG,Zg.JPG,Zg.PNG,Zg.EXR,Zg.BASIS,Zg.HDR];function Qg(t){const e=t.split(\\\\\\\"?\\\\\\\")[0].split(\\\\\\\".\\\\\\\");return e[e.length-1]}class tv extends $g{constructor(t,e,n,i,s){super(t,i,n),this._param=e,this._node=n,this._scene=i,this._forceVideo=!1,this._forceImage=!1,this._forceVideo=(null==s?void 0:s.forceVideo)||this._forceVideo,this._forceImage=(null==s?void 0:s.forceImage)||this._forceImage}static onTextureLoaded(t){this._onTextureLoadedCallback=t}async load_texture_from_url_or_op(t){let e=null,n=null;if(\\\\\\\"op:\\\\\\\"==this._url.substring(0,3)){const t=this._url.substring(3);if(n=bi.findNode(this._node,t),n)if(n instanceof pf){e=(await n.compute()).texture()}else this._node.states.error.set(\\\\\\\"found node is not a texture node\\\\\\\");else this._node.states.error.set(`no node found in path '${t}'`)}else e=await this._loadUrl(t),e||this._node.states.error.set(`could not load texture ${this._url}`);return n&&this._param.graphPredecessors()[0]!=n&&(this._param.graphDisconnectPredecessors(),this._param.addGraphInput(n)),e}async _loadUrl(t){return new Promise((async(e,n)=>{const i=this.extension(),s=await this._urlToLoad();if(this._forceVideo||Jg.includes(i)){e(await this._loadVideo(s))}else if(this._forceImage||Kg.includes(i))try{e(await this._loadImage(s,t))}catch(t){n()}}))}_loadImage(t,e){return new Promise((async(n,i)=>{const s=this.extension();this.loader_for_ext(s,e).then((async e=>{e?(tv.incrementInProgressLoadsCount(),await tv.waitForMaxConcurrentLoadsQueueFreed(),e.load(t,(e=>{tv.decrementInProgressLoadsCount();const i=tv._onTextureLoadedCallback;i&&i(t,e),n(e)}),void 0,(t=>{tv.decrementInProgressLoadsCount(),li.warn(\\\\\\\"error\\\\\\\",t),i()}))):i()}))}))}_loadVideo(t){return new Promise((async(e,n)=>{tv.incrementInProgressLoadsCount(),await tv.waitForMaxConcurrentLoadsQueueFreed();const i=document.createElement(\\\\\\\"video\\\\\\\");i.setAttribute(\\\\\\\"crossOrigin\\\\\\\",\\\\\\\"anonymous\\\\\\\"),i.setAttribute(\\\\\\\"autoplay\\\\\\\",\\\\\\\"true\\\\\\\"),i.setAttribute(\\\\\\\"loop\\\\\\\",\\\\\\\"true\\\\\\\"),i.onloadedmetadata=function(){i.pause();const n=new jg(i);tv.decrementInProgressLoadsCount();const s=tv._onTextureLoadedCallback;s&&s(t,n),e(n)};const s=document.createElement(\\\\\\\"source\\\\\\\"),r=$g.extension(t);let o=tv.VIDEO_SOURCE_TYPE_BY_EXT[r];o=o||tv._default_video_source_type(t),s.setAttribute(\\\\\\\"type\\\\\\\",o),s.setAttribute(\\\\\\\"src\\\\\\\",t),i.appendChild(s);let a=t;a=\\\\\\\"mp4\\\\\\\"==r?tv.replaceExtension(t,\\\\\\\"ogv\\\\\\\"):tv.replaceExtension(t,\\\\\\\"mp4\\\\\\\");const l=document.createElement(\\\\\\\"source\\\\\\\"),c=$g.extension(a);o=tv.VIDEO_SOURCE_TYPE_BY_EXT[c],o=o||tv._default_video_source_type(t),l.setAttribute(\\\\\\\"type\\\\\\\",o),l.setAttribute(\\\\\\\"src\\\\\\\",t),i.appendChild(l)}))}static module_names(t){switch(t){case Zg.EXR:return[Hn.EXRLoader];case Zg.HDR:return[Hn.RGBELoader];case Zg.BASIS:return[Hn.BasisTextureLoader]}}async loader_for_ext(t,e){switch(t.toLowerCase()){case Zg.EXR:return await this._exr_loader(e);case Zg.HDR:return await this._hdr_loader(e);case Zg.BASIS:return await tv._basis_loader(this._node)}return new Wg.a(this.loadingManager)}async _exr_loader(t){const e=await li.modulesRegister.module(Hn.EXRLoader);if(e){const n=new e(this.loadingManager);return t.tdataType&&n.setDataType(t.dataType),n}}async _hdr_loader(t){const e=await li.modulesRegister.module(Hn.RGBELoader);if(e){const n=new e(this.loadingManager);return t.tdataType&&n.setDataType(t.dataType),n}}static async _basis_loader(t){const e=await li.modulesRegister.module(Hn.BasisTextureLoader);if(e){const n=new e(this.loadingManager),i=li.libs.root(),s=li.libs.BASISPath();if(i||s){const e=`${i||\\\\\\\"\\\\\\\"}${s||\\\\\\\"\\\\\\\"}/`;if(t){const n=[\\\\\\\"basis_transcoder.js\\\\\\\",\\\\\\\"basis_transcoder.wasm\\\\\\\"];await this._loadMultipleBlobGlobal({files:n.map((t=>({storedUrl:`${s}/${t}`,fullUrl:`${e}${t}`}))),node:t,error:\\\\\\\"failed to load basis libraries. Make sure to install them to load .basis files\\\\\\\"})}n.setTranscoderPath(e)}else n.setTranscoderPath(void 0);const r=await li.renderersController.waitForRenderer();return r?n.detectSupport(r):li.warn(\\\\\\\"texture loader found no renderer for basis texture loader\\\\\\\"),n}}static _default_video_source_type(t){return`video/${$g.extension(t)}`}static pixel_data(t){const e=t.image,n=document.createElement(\\\\\\\"canvas\\\\\\\");n.width=e.width,n.height=e.height;const i=n.getContext(\\\\\\\"2d\\\\\\\");if(i)return i.drawImage(e,0,0,e.width,e.height),i.getImageData(0,0,e.width,e.height)}static replaceExtension(t,e){const n=t.split(\\\\\\\"?\\\\\\\"),i=n[0].split(\\\\\\\".\\\\\\\");return i.pop(),i.push(e),[i.join(\\\\\\\".\\\\\\\"),n[1]].join(\\\\\\\"?\\\\\\\")}static setMaxConcurrentLoadsCount(t){this._maxConcurrentLoadsCountMethod=t}static _init_max_concurrent_loads_count(){return this._maxConcurrentLoadsCountMethod?this._maxConcurrentLoadsCountMethod():ng.isChrome()?10:4}static _init_concurrent_loads_delay(){return ng.isChrome()?0:10}static incrementInProgressLoadsCount(){this.in_progress_loads_count++}static decrementInProgressLoadsCount(){this.in_progress_loads_count--;const t=this._queue.pop();if(t){const e=this.CONCURRENT_LOADS_DELAY;setTimeout((()=>{t()}),e)}}static async waitForMaxConcurrentLoadsQueueFreed(){return this.in_progress_loads_count<=this.MAX_CONCURRENT_LOADS_COUNT?void 0:new Promise((t=>{this._queue.push(t)}))}}tv.PARAM_DEFAULT=`${qg}/textures/uv.jpg`,tv.PARAM_ENV_DEFAULT=`${qg}/textures/piz_compressed.exr`,tv.VIDEO_SOURCE_TYPE_BY_EXT={ogg:'video/ogg; codecs=\\\\\\\"theora, vorbis\\\\\\\"',ogv:'video/ogg; codecs=\\\\\\\"theora, vorbis\\\\\\\"',mp4:'video/mp4; codecs=\\\\\\\"avc1.42E01E, mp4a.40.2\\\\\\\"'},tv.MAX_CONCURRENT_LOADS_COUNT=tv._init_max_concurrent_loads_count(),tv.CONCURRENT_LOADS_DELAY=tv._init_concurrent_loads_delay(),tv.in_progress_loads_count=0,tv._queue=[];var ev=n(114);class nv extends(Mg(function(t){return class extends t{constructor(){super(...arguments),this.url=ha.STRING(tv.PARAM_DEFAULT,{fileBrowse:{type:[Rr.TEXTURE_IMAGE]}}),this.reload=ha.BUTTON(null,{callback:(t,e)=>{sv.PARAM_CALLBACK_reload(t)}}),this.play=ha.BOOLEAN(1,{cook:!1,callback:t=>{sv.PARAM_CALLBACK_gifUpdatePlay(t)}}),this.gifFrame=ha.INTEGER(0,{cook:!1,range:[0,100],rangeLocked:[!0,!1],callback:t=>{sv.PARAM_CALLBACK_gifUpdateFrameIndex(t)}})}}}(ua))){}const iv=new nv;class sv extends df{constructor(){super(...arguments),this.paramsConfig=iv,this.textureParamsController=new Sg(this),this._gifCanvasContext=null,this._tmpCanvasContext=null,this._parsedFrames=[],this._frameDelay=100,this._frameIndex=0}static type(){return\\\\\\\"gif\\\\\\\"}async requiredModules(){this.p.url.isDirty()&&await this.p.url.compute();const t=$g.extension(this.pv.url||\\\\\\\"\\\\\\\");return tv.module_names(t)}static displayedInputNames(){return[\\\\\\\"optional texture to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{let t=[this.p.url];t=t.concat(this.textureParamsController.paramLabelsParams()),this.params.label.init(t,(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\"),n=e[e.length-1],i=this.textureParamsController.paramLabels();return[n].concat(i)}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){if(\\\\\\\"gif\\\\\\\"!=Qg(this.pv.url).toLowerCase())this.states.error.set(\\\\\\\"url is not an image\\\\\\\");else{tv.incrementInProgressLoadsCount(),await tv.waitForMaxConcurrentLoadsQueueFreed();const t=await fetch(this.pv.url),e=await t.arrayBuffer(),n=await Object(ev.parseGIF)(e),i=!0;this._parsedFrames=await Object(ev.decompressFrames)(n,i);const s=this._parsedFrames[0];if(this._frameDelay=s.delay,this._frameIndex=this.pv.gifFrame-1,this._createCanvas(),tv.decrementInProgressLoadsCount(),this._gifCanvasElement){const t=new Cg(this._gifCanvasElement);await this.textureParamsController.update(t),this.setTexture(t)}else this.states.error.set(\\\\\\\"failed to create canvas\\\\\\\")}}_createCanvas(){const t=this._parsedFrames[0];this._gifCanvasElement=document.createElement(\\\\\\\"canvas\\\\\\\"),this._tmpCanvasElement=document.createElement(\\\\\\\"canvas\\\\\\\"),this._gifCanvasElement.width=t.dims.width,this._gifCanvasElement.height=t.dims.height,this._tmpCanvasElement.width=t.dims.width,this._tmpCanvasElement.height=t.dims.height,this._gifCanvasContext=this._gifCanvasElement.getContext(\\\\\\\"2d\\\\\\\"),this._tmpCanvasContext=this._tmpCanvasElement.getContext(\\\\\\\"2d\\\\\\\"),this._drawNextFrame()}_drawOnCanvas(){if(!(this._gifCanvasContext&&this._tmpCanvasElement&&this._tmpCanvasContext))return;let t=this._parsedFrames[this._frameIndex];if(t||(console.warn(`no frame at index ${this._frameIndex}, using last frame`),t=this._parsedFrames[this._parsedFrames.length-1]),t){const e=t.dims;this._frameImageData&&e.width==this._frameImageData.width&&e.height==this._frameImageData.height||(this._tmpCanvasElement.width=e.width,this._tmpCanvasElement.height=e.height,this._frameImageData=this._tmpCanvasContext.createImageData(e.width,e.height)),this._frameImageData.data.set(t.patch),this._tmpCanvasContext.putImageData(this._frameImageData,0,0),this._gifCanvasContext.drawImage(this._tmpCanvasElement,e.left,e.top);const n=this.containerController.container().texture();if(!n)return;n.needsUpdate=!0}}_drawNextFrame(){this._frameIndex++,this._frameIndex>=this._parsedFrames.length&&(this._frameIndex=0),this._drawOnCanvas(),this.pv.play&&setTimeout((()=>{this._drawNextFrame()}),this._frameDelay)}gifUpdateFrameIndex(){this._frameIndex=this.pv.gifFrame,this._drawOnCanvas()}static PARAM_CALLBACK_reload(t){t.paramCallbackReload()}paramCallbackReload(){this.p.url.setDirty()}static PARAM_CALLBACK_gifUpdatePlay(t){t.gifUpdatePlay()}gifUpdatePlay(){this.pv.play&&this._drawNextFrame()}static PARAM_CALLBACK_gifUpdateFrameIndex(t){t.gifUpdateFrameIndex()}}function rv(t){return class extends t{constructor(){super(...arguments),this.checkFileType=ha.BOOLEAN(!0)}}}class ov extends(rv(Mg(function(t){return class extends t{constructor(){super(...arguments),this.url=ha.STRING(tv.PARAM_DEFAULT,{fileBrowse:{type:[Rr.TEXTURE_IMAGE]}}),this.reload=ha.BUTTON(null,{callback:(t,e)=>{lv.PARAM_CALLBACK_reload(t,e)}})}}}(ua)))){}const av=new ov;class lv extends df{constructor(){super(...arguments),this.paramsConfig=av,this.textureParamsController=new Sg(this)}static type(){return\\\\\\\"image\\\\\\\"}async requiredModules(){this.p.url.isDirty()&&await this.p.url.compute();const t=$g.extension(this.pv.url||\\\\\\\"\\\\\\\");return tv.module_names(t)}static displayedInputNames(){return[\\\\\\\"optional texture to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{let t=[this.p.url];t=t.concat(this.textureParamsController.paramLabelsParams()),this.params.label.init(t,(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\"),n=e[e.length-1],i=this.textureParamsController.paramLabels();return[n].concat(i)}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){if(this.pv.checkFileType&&(e=this.pv.url,!Kg.includes(Qg(e).toLowerCase())))this.states.error.set(\\\\\\\"url is not an image\\\\\\\");else{const e=await this._loadTexture();if(e){const n=t[0];n&&Sg.copyTextureAttributes(e,n),await this.textureParamsController.update(e),this.setTexture(e)}else this._clearTexture()}var e}static PARAM_CALLBACK_reload(t,e){t.paramCallbackReload()}paramCallbackReload(){this.clearLoadedBlob(),this.p.url.setDirty()}_loader(){return new tv(this.pv.url,this.p.url,this,this.scene(),{forceImage:!this.pv.checkFileType})}async _loadTexture(){let t=null;try{t=await this._loader().load_texture_from_url_or_op({tdataType:this.pv.ttype&&this.pv.tadvanced,dataType:this.pv.type}),t&&(t.matrixAutoUpdate=!1)}catch(t){}return t||this.states.error.set(`could not load texture '${this.pv.url}'`),t}clearLoadedBlob(){this._loader().deregisterUrl()}}var cv=n(33);const hv=.005;class uv{constructor(t,e=1024){this.renderer=t,this.res=e,this.objectTargets=[],this.lights=[],this.scene=new vs,this.buffer1Active=!1,this._params={lightRadius:1,iterations:1,iterationBlend:hv,blur:!1,blurAmount:0},this._objectStateByObject=new WeakMap,this._previousRenderTarget=null,this._lightHierarchyStateByLight=new WeakMap,this._lightMatrixStateByLight=new WeakMap,this._t=new p.a,this._q=new hh.a,this._s=new p.a;const n=ng.isAndroid()||ng.isiOS()?w.M:w.G;this.progressiveLightMap1=new K(this.res,this.res,{type:n}),this.progressiveLightMap2=new K(this.res,this.res,{type:n}),this.uvMat=this._createUVMat()}textureRenderTarget(){return this.progressiveLightMap2}texture(){return this.textureRenderTarget().texture}setParams(t){this._params.lightRadius=t.lightRadius,this._params.iterations=t.iterations,this._params.iterationBlend=t.iterationBlend,this._params.blur=t.blur,this._params.blurAmount=t.blurAmount}init(t,e){this._setObjects(t),this._setLights(e)}_setObjects(t){this.objectTargets=[];for(let e of t)null==this.blurringPlane&&this._initializeBlurPlane(this.res,this.progressiveLightMap1),this.objectTargets.push(e);this._saveObjectsState()}_setLights(t){this.lights=t;for(let e of t)this._saveLightHierarchyState(e),this.scene.attach(e),this._saveLightMatrixState(e)}_saveLightHierarchyState(t){this._lightHierarchyStateByLight.set(t,{parent:t.parent,matrixAutoUpdate:t.matrixAutoUpdate}),t.matrixAutoUpdate=!0}_saveLightMatrixState(t){t.updateMatrix(),t.matrix.decompose(this._t,this._q,this._s),this._lightMatrixStateByLight.set(t,{matrix:t.matrix.clone(),position:this._t.clone()})}_saveObjectsState(){let t=0;for(let e of this.objectTargets)this._objectStateByObject.set(e,{frustumCulled:e.frustumCulled,material:e.material,parent:e.parent,castShadow:e.castShadow,receiveShadow:e.receiveShadow}),e.material=this.uvMat,e.frustumCulled=!1,e.castShadow=!0,e.receiveShadow=!0,e.renderOrder=1e3+t,this.scene.attach(e),t++;this._previousRenderTarget=this.renderer.getRenderTarget()}_moveLights(){const t=this._params.lightRadius;for(let e of this.lights){const n=this._lightMatrixStateByLight.get(e);if(n){const i=n.position;e.position.x=i.x+t*(Math.random()-.5),e.position.y=i.y+t*(Math.random()-.5),e.position.z=i.z+t*(Math.random()-.5)}}}restoreState(){this._restoreObjectsState(),this._restoreLightsState(),this.renderer.setRenderTarget(this._previousRenderTarget)}_restoreObjectsState(){for(let t of this.objectTargets){const e=this._objectStateByObject.get(t);if(e){t.frustumCulled=e.frustumCulled,t.castShadow=e.castShadow,t.receiveShadow=e.receiveShadow,t.material=e.material;const n=e.parent;n&&n.add(t)}}}_restoreLightsState(){var t;for(let e of this.lights){const n=this._lightHierarchyStateByLight.get(e),i=this._lightMatrixStateByLight.get(e);n&&i&&(e.matrixAutoUpdate=n.matrixAutoUpdate,e.matrix.copy(i.matrix),e.matrix.decompose(e.position,e.quaternion,e.scale),e.updateMatrix(),null===(t=n.parent)||void 0===t||t.attach(e))}}runUpdates(t){if(!this.blurMaterial)return;if(null==this.blurringPlane)return;const e=this._params.iterations;this.blurMaterial.uniforms.pixelOffset.value=this._params.blurAmount/this.res,this.blurringPlane.visible=this._params.blur,this.uvMat.uniforms.iterationBlend.value=this._params.iterationBlend,this._clear(t);for(let n=0;n<e;n++)this._moveLights(),this._update(t)}_clear(t){this.scene.visible=!1,this._update(t),this._update(t),this.scene.visible=!0}_update(t){if(!this.blurMaterial)return;const e=this.buffer1Active?this.progressiveLightMap1:this.progressiveLightMap2,n=this.buffer1Active?this.progressiveLightMap2:this.progressiveLightMap1;this.renderer.setRenderTarget(e),this.uvMat.uniforms.previousShadowMap.value=n.texture,this.blurMaterial.uniforms.previousShadowMap.value=n.texture,this.buffer1Active=!this.buffer1Active,this.renderer.render(this.scene,t)}_initializeBlurPlane(t,e){this.blurMaterial=this._createBlurPlaneMaterial(t,e),this.blurringPlane=new B.a(new L(1,1),this.blurMaterial),this.blurringPlane.name=\\\\\\\"Blurring Plane\\\\\\\",this.blurringPlane.frustumCulled=!1,this.blurringPlane.renderOrder=0,this.blurMaterial.depthWrite=!1,this.scene.add(this.blurringPlane)}_createBlurPlaneMaterial(t,e){const n=new lt.a;return n.uniforms={previousShadowMap:{value:null},pixelOffset:{value:1/t}},n.onBeforeCompile=i=>{i.vertexShader=\\\\\\\"#define USE_UV\\\\n\\\\\\\"+i.vertexShader.slice(0,-2)+\\\\\\\"\\\\tgl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }\\\\\\\";const s=i.fragmentShader.indexOf(\\\\\\\"void main() {\\\\\\\");i.fragmentShader=\\\\\\\"#define USE_UV\\\\n\\\\\\\"+i.fragmentShader.slice(0,s)+\\\\\\\"\\\\tuniform sampler2D previousShadowMap;\\\\n\\\\tuniform float pixelOffset;\\\\n\\\\\\\"+i.fragmentShader.slice(s-1,-2)+\\\\\\\"\\\\tgl_FragColor.rgb = (\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset,  0.0        )).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( 0.0        ,  pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( 0.0        , -pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset,  0.0        )).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset,  pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset,  pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\";const r={previousShadowMap:{value:e.texture},pixelOffset:{value:.5/t}};i.uniforms.previousShadowMap=r.previousShadowMap,i.uniforms.pixelOffset=r.pixelOffset,n.uniforms.previousShadowMap=r.previousShadowMap,n.uniforms.pixelOffset=r.pixelOffset,n.userData.shader=i},n}_createUVMat(){const t=new qf.a;return t.uniforms={previousShadowMap:{value:null},iterationBlend:{value:hv}},t.name=\\\\\\\"uvMat\\\\\\\",t.onBeforeCompile=e=>{e.vertexShader=\\\\\\\"#define USE_LIGHTMAP\\\\n\\\\\\\"+e.vertexShader.slice(0,-2)+\\\\\\\"\\\\tgl_Position = vec4((uv2 - 0.5) * 2.0, 1.0, 1.0); }\\\\\\\";const n=e.fragmentShader.indexOf(\\\\\\\"void main() {\\\\\\\");e.fragmentShader=\\\\\\\"varying vec2 vUv2;\\\\n\\\\\\\"+e.fragmentShader.slice(0,n)+\\\\\\\"\\\\tuniform sampler2D previousShadowMap;\\\\n\\\\tuniform float iterationBlend;\\\\n\\\\\\\"+e.fragmentShader.slice(n-1,-2)+\\\\\\\"\\\\nvec3 texelOld = texture2D(previousShadowMap, vUv2).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, iterationBlend);\\\\n\\\\t\\\\t\\\\t\\\\t// gl_FragColor.rgb = vec3(vUv2,1.0);\\\\n\\\\t\\\\t\\\\t}\\\\\\\";const i={previousShadowMap:{value:this.progressiveLightMap1.texture},iterationBlend:{value:hv}};e.uniforms.previousShadowMap=i.previousShadowMap,e.uniforms.iterationBlend=i.iterationBlend,t.uniforms.previousShadowMap=i.previousShadowMap,t.uniforms.iterationBlend=i.iterationBlend,t.userData.shader=e},t}}const dv=new class extends ua{constructor(){super(...arguments),this.update=ha.BUTTON(null,{callback:t=>{pv.PARAM_CALLBACK_updateManual(t)}}),this.useCameraRenderer=ha.BOOLEAN(1),this.lightMapRes=ha.INTEGER(1024,{range:[1,2048],rangeLocked:[!0,!1]}),this.iterations=ha.INTEGER(512,{range:[1,2048],rangeLocked:[!0,!1]}),this.iterationBlend=ha.FLOAT(hv,{range:[0,1],rangeLocked:[!0,!0]}),this.blur=ha.BOOLEAN(1),this.blurAmount=ha.FLOAT(1,{visibleIf:{blur:1},range:[0,1],rangeLocked:[!0,!1]}),this.lightRadius=ha.FLOAT(1,{range:[0,10]}),this.objectsMask=ha.STRING(\\\\\\\"\\\\\\\"),this.lightsMask=ha.STRING(\\\\\\\"*\\\\\\\"),this.printResolveObjectsList=ha.BUTTON(null,{callback:t=>{pv.PARAM_CALLBACK_printResolveObjectsList(t)}})}};class pv extends df{constructor(){super(...arguments),this.paramsConfig=dv,this._includedObjects=[],this._includedLights=[]}static type(){return\\\\\\\"lightMap\\\\\\\"}async cook(){this._updateManual()}async _createLightMapController(){const t=await li.renderersController.firstRenderer();if(!t)return void console.warn(\\\\\\\"no renderer found\\\\\\\");return new uv(t,this.pv.lightMapRes)}static PARAM_CALLBACK_update_updateMode(t){}async _updateManual(){if(this.lightMapController=this.lightMapController||await this._createLightMapController(),!this.lightMapController)return;const t=this.scene().mainCameraNode();if(!t)return;this._updateObjectsAndLightsList(),this.lightMapController.init(this._includedObjects,this._includedLights);const e=t.camera();this.lightMapController.setParams({lightRadius:this.pv.lightRadius,iterations:this.pv.iterations,iterationBlend:this.pv.iterationBlend,blur:this.pv.blur,blurAmount:this.pv.blurAmount}),this.lightMapController.runUpdates(e),this.lightMapController.restoreState();const n=this.lightMapController.textureRenderTarget();if(this.pv.useCameraRenderer)this.setTexture(n.texture);else{this._data_texture_controller=this._data_texture_controller||new kf(zf.Float32Array),this._renderer_controller=this._renderer_controller||new Uf(this);const t=await this._renderer_controller.renderer(),e=this._data_texture_controller.from_render_target(t,n);this.setTexture(e)}}static PARAM_CALLBACK_updateManual(t){t._updateManual()}_updateObjectsAndLightsList(){let t=[],e=[];this._includedLights=[],this._includedObjects=[];const n=new WeakSet;if(\\\\\\\"\\\\\\\"!=this.pv.lightsMask){e=this.scene().objectsByMask(this.pv.lightsMask);for(let t of e)t instanceof cv.a&&(this._includedLights.push(t),n.add(t))}if(\\\\\\\"\\\\\\\"!=this.pv.objectsMask){t=this.scene().objectsByMask(this.pv.objectsMask);for(let e of t)e instanceof cv.a||!n.has(e)&&e instanceof B.a&&this._includedObjects.push(e)}}static PARAM_CALLBACK_printResolveObjectsList(t){t._printResolveObjectsList()}_printResolveObjectsList(){this._updateObjectsAndLightsList(),console.log(\\\\\\\"included objects:\\\\\\\"),console.log(this._includedObjects),console.log(\\\\\\\"included lights:\\\\\\\"),console.log(this._includedLights)}}const _v=new ua;class mv extends df{constructor(){super(...arguments),this.paramsConfig=_v}static type(){return\\\\\\\"null\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){const e=t[0];this.setTexture(e)}}class fv extends(Mg(function(t){return class extends t{constructor(){super(...arguments),this.camera=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.OBJ,types:ds}}),this.resolution=ha.VECTOR2([1024,1024]),this.useCameraRenderer=ha.BOOLEAN(1),this.render=ha.BUTTON(null,{callback:t=>{vv.PARAM_CALLBACK_render(t)}})}}}(ua))){}const gv=new fv;class vv extends df{constructor(){super(...arguments),this.paramsConfig=gv,this.textureParamsController=new Sg(this)}static type(){return\\\\\\\"render\\\\\\\"}async cook(){this._texture_scene=this.scene().threejsScene(),this._camera_node=this.pv.camera.nodeWithContext(ts.OBJ),this._camera_node&&ds.includes(this._camera_node.type())?(this._texture_camera=this._camera_node.object,await this._camera_node.compute(),this.renderOnTarget()):this._texture_camera=void 0}async renderOnTarget(){if(await this.createRenderTargetIfRequired(),!(this._render_target&&this._texture_scene&&this._texture_camera))return;this._renderer_controller=this._renderer_controller||new Uf(this);const t=await this._renderer_controller.renderer(),e=t.getRenderTarget();if(t.setRenderTarget(this._render_target),t.clear(),t.render(this._texture_scene,this._texture_camera),t.setRenderTarget(e),this._render_target.texture)if(this.pv.useCameraRenderer)this.setTexture(this._render_target.texture);else{this._data_texture_controller=this._data_texture_controller||new kf(zf.Float32Array);const e=this._data_texture_controller.from_render_target(t,this._render_target);await this.textureParamsController.update(e),this.setTexture(e)}else this.cookController.endCook()}async renderTarget(){return this._render_target=this._render_target||await this._createRenderTarget(this.pv.resolution.x,this.pv.resolution.y)}async createRenderTargetIfRequired(){var t;this._render_target&&this._renderTargetResolutionValid()||(this._render_target=await this._createRenderTarget(this.pv.resolution.x,this.pv.resolution.y),null===(t=this._data_texture_controller)||void 0===t||t.reset())}_renderTargetResolutionValid(){if(this._render_target){const t=this._render_target.texture.image;return t.width==this.pv.resolution.x&&t.height==this.pv.resolution.y}return!1}async _createRenderTarget(t,e){if(this._render_target){const n=this._render_target.texture.image;if(n.width==t&&n.height==e)return this._render_target}const n=w.n,i=w.n,s=w.V,r=w.ob;var o=new K(t,e,{wrapS:n,wrapT:i,minFilter:s,magFilter:r,format:w.Ib,generateMipmaps:!0,type:ng.isiOS()?w.M:w.G,stencilBuffer:!1,depthBuffer:!1});return await this.textureParamsController.update(o.texture),li.warn(\\\\\\\"created render target\\\\\\\",this.path(),t,e),o}static PARAM_CALLBACK_render(t){t.renderOnTarget()}}const yv=t=>(t.preventDefault(),!1);class xv{static disableContextMenu(){document.addEventListener(\\\\\\\"contextmenu\\\\\\\",yv)}static reEstablishContextMenu(){document.removeEventListener(\\\\\\\"contextmenu\\\\\\\",yv)}static isHTMLVideoElementLoaded(t){return 4===t.readyState}}class bv extends(function(t){return class extends t{constructor(){super(...arguments),this.capture=ha.BUTTON(null,{callback:t=>{Tv.PARAM_CALLBACK_snapshot(t)}})}}}(ua)){}const wv=new bv;class Tv extends df{constructor(){super(...arguments),this.paramsConfig=wv}static type(){return Fg.SNAPSHOT}static displayedInputNames(){return[\\\\\\\"input to take a snapshot of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){const e=t[0];if(e&&e instanceof jg){const t=await this._canvasToTexture(e);if(t)return Sg.copyTextureAttributes(t,e),void this.setTexture(t)}else this.states.error.set(\\\\\\\"input texture is not a video\\\\\\\");this.cookController.endCook()}static PARAM_CALLBACK_snapshot(t){t.paramCallbackSnapshot()}paramCallbackSnapshot(){this.setDirty()}_videoSnapshotCanvas(t){const e=t.image;if(!xv.isHTMLVideoElementLoaded(e))return void this.states.error.set(\\\\\\\"video not loaded\\\\\\\");const n=document.createElement(\\\\\\\"canvas\\\\\\\");n.width=t.image.videoWidth,n.height=t.image.videoHeight;return n.getContext(\\\\\\\"2d\\\\\\\").drawImage(t.image,0,0,n.width,n.height),n}_canvasToTexture(t){const e=this._canvas;let n=!0;const i=this._videoSnapshotCanvas(t);if(i)return e&&i.width==e.width&&i.height==e.height&&(n=!1),this._canvas=i,new Promise((e=>{if(!this._canvas)return;const i=this._canvas.toDataURL(\\\\\\\"image/png\\\\\\\"),s=new Image;s.onload=()=>{let i;n?(i=new Z.a(s),i.encoding=t.encoding):(i=this.containerController.container().coreContent(),i.copy(t)),i.needsUpdate=!0,e(i)},s.src=i}))}}const Av=new class extends ua{constructor(){super(...arguments),this.input=ha.INTEGER(0,{range:[0,3],rangeLocked:[!0,!0]})}};class Mv extends df{constructor(){super(...arguments),this.paramsConfig=Av}static type(){return\\\\\\\"switch\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4),this.io.inputs.initInputsClonedState(Qi.NEVER),this.cookController.disallowInputsEvaluation()}async cook(){const t=this.pv.input;if(this.io.inputs.has_input(t)){const e=await this.containerController.requestInputContainer(t);if(e)return void this.setTexture(e.texture())}else this.states.error.set(`no input ${t}`);this.cookController.endCook()}}class Ev extends(Mg(ua)){}const Sv=new Ev;class Cv extends df{constructor(){super(...arguments),this.paramsConfig=Sv,this.textureParamsController=new Sg(this)}static type(){return\\\\\\\"textureProperties\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.FROM_NODE])}async cook(t){const e=t[0];this.textureParamsController.update(e),this.setTexture(e)}}class Nv extends(rv(Mg(function(t){return class extends t{constructor(){super(...arguments),this.url=ha.STRING(tv.PARAM_DEFAULT,{fileBrowse:{type:[Rr.TEXTURE_VIDEO]}}),this.reload=ha.BUTTON(null,{callback:(t,e)=>{Ov.PARAM_CALLBACK_reload(t,e)}}),this.play=ha.BOOLEAN(1,{cook:!1,callback:t=>{Ov.PARAM_CALLBACK_video_update_play(t)}}),this.muted=ha.BOOLEAN(1,{cook:!1,callback:t=>{Ov.PARAM_CALLBACK_video_update_muted(t)}}),this.loop=ha.BOOLEAN(1,{cook:!1,callback:t=>{Ov.PARAM_CALLBACK_video_update_loop(t)}}),this.videoTime=ha.FLOAT(0,{cook:!1}),this.setVideoTime=ha.BUTTON(null,{cook:!1,callback:t=>{Ov.PARAM_CALLBACK_video_update_time(t)}})}}}(ua)))){}const Lv=new Nv;class Ov extends df{constructor(){super(...arguments),this.paramsConfig=Lv,this.textureParamsController=new Sg(this)}static type(){return Fg.VIDEO}async requiredModules(){this.p.url.isDirty()&&await this.p.url.compute();const t=$g.extension(this.pv.url||\\\\\\\"\\\\\\\");return tv.module_names(t)}HTMLVideoElement(){return this._video}static displayedInputNames(){return[\\\\\\\"optional texture to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){if(this.pv.checkFileType&&(e=this.pv.url,!Jg.includes(Qg(e).toLowerCase())))this.states.error.set(\\\\\\\"url is not a video\\\\\\\");else{const e=await this._load_texture(this.pv.url);if(e){this._video=e.image,this._video&&document.body.appendChild(this._video);const n=t[0];n&&Sg.copyTextureAttributes(e,n),this.video_update_loop(),this.video_update_muted(),this.video_update_play(),this.video_update_time(),await this.textureParamsController.update(e),this.setTexture(e)}else this.cookController.endCook()}var e}dispose(){var t;super.dispose(),this._video&&(null===(t=this._video.parentElement)||void 0===t||t.removeChild(this._video))}static PARAM_CALLBACK_video_update_time(t){t.video_update_time()}static PARAM_CALLBACK_video_update_play(t){t.video_update_play()}static PARAM_CALLBACK_video_update_muted(t){t.video_update_muted()}static PARAM_CALLBACK_video_update_loop(t){t.video_update_loop()}async video_update_time(){if(this._video){const t=this.p.videoTime;t.isDirty()&&await t.compute(),this._video.currentTime=t.value}}video_update_muted(){this._video&&(this._video.muted=this.pv.muted)}video_update_loop(){this._video&&(this._video.loop=this.pv.loop)}video_update_play(){this._video&&(this.pv.play?this._video.play():this._video.pause())}static PARAM_CALLBACK_reload(t,e){t.paramCallbackReload()}paramCallbackReload(){this.p.url.setDirty()}async _load_texture(t){let e=null;const n=this.p.url;this._texture_loader=this._texture_loader||new tv(t,n,this,this.scene(),{forceVideo:!this.pv.checkFileType});try{e=await this._texture_loader.load_texture_from_url_or_op({tdataType:this.pv.ttype&&this.pv.tadvanced,dataType:this.pv.type}),e&&(e.matrixAutoUpdate=!1)}catch(t){}return e||this.states.error.set(`could not load texture '${t}'`),e}}class Pv extends(Mg(function(t){return class extends t{constructor(){super(...arguments),this.res=ha.VECTOR2([1024,1024])}}}(ua),{tencoding:!0,encoding:w.ld})){}const Rv=new Pv;class Iv extends df{constructor(){super(...arguments),this.paramsConfig=Rv,this.textureParamsController=new Sg(this)}static type(){return Fg.WEB_CAM}HTMLVideoElement(){return this._video}static displayedInputNames(){return[\\\\\\\"optional texture to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.NEVER)}dispose(){super.dispose(),this._cancelWebcamRequest()}_cancelWebcamRequest(){try{this._stream&&this._stream.getTracks().forEach((function(t){t.stop()}))}catch(t){console.error(t),console.warn(\\\\\\\"failed to cancel webcam request\\\\\\\")}}_createHTMLVideoElement(){this._video&&document.body.removeChild(this._video);const t=document.createElement(\\\\\\\"video\\\\\\\");return t.style.display=\\\\\\\"none\\\\\\\",t.width=this.pv.res.x,t.height=this.pv.res.y,t.autoplay=!0,t.setAttribute(\\\\\\\"autoplay\\\\\\\",\\\\\\\"true\\\\\\\"),t.setAttribute(\\\\\\\"muted\\\\\\\",\\\\\\\"true\\\\\\\"),t.setAttribute(\\\\\\\"playsinline\\\\\\\",\\\\\\\"true\\\\\\\"),document.body.appendChild(t),t}async cook(t){this._video=this._createHTMLVideoElement();const e=new jg(this._video),n=t[0];if(n&&Sg.copyTextureAttributes(e,n),await this.textureParamsController.update(e),navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){const t={video:{width:this.pv.res.x,height:this.pv.res.y,facingMode:\\\\\\\"user\\\\\\\"}};navigator.mediaDevices.getUserMedia(t).then((t=>{this._stream=t,this._video&&(this._video.srcObject=t,this._video.play(),this.setTexture(e))})).catch((t=>{this.states.error.set(\\\\\\\"Unable to access the camera/webcam\\\\\\\")}))}else this.states.error.set(\\\\\\\"MediaDevices interface not available.\\\\\\\")}}class Fv extends aa{static context(){return ts.COP}cook(){this.cookController.endCook()}}class Dv extends Fv{}class Bv extends Dv{constructor(){super(...arguments),this._children_controller_context=ts.ANIM}static type(){return es.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class zv extends Dv{constructor(){super(...arguments),this._children_controller_context=ts.EVENT}static type(){return es.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class kv extends Dv{constructor(){super(...arguments),this._children_controller_context=ts.COP}static type(){return es.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Uv extends Dv{constructor(){super(...arguments),this._children_controller_context=ts.MAT}static type(){return es.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Gv extends Fv{constructor(){super(...arguments),this.paramsConfig=new ef,this.effectsComposerController=new nf(this),this.displayNodeController=new Fm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=ts.POST}static type(){return es.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Vv extends Dv{constructor(){super(...arguments),this._children_controller_context=ts.ROP}static type(){return es.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}var Hv,jv;!function(t){t.START=\\\\\\\"start\\\\\\\",t.STOP=\\\\\\\"stop\\\\\\\",t.UPDATE=\\\\\\\"update\\\\\\\"}(Hv||(Hv={})),function(t){t.START=\\\\\\\"start\\\\\\\",t.COMPLETE=\\\\\\\"completed\\\\\\\"}(jv||(jv={}));const Wv=new class extends ua{constructor(){super(...arguments),this.animation=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.ANIM},dependentOnFoundNode:!1}),this.play=ha.BUTTON(null,{callback:t=>{qv.PARAM_CALLBACK_play(t)}}),this.pause=ha.BUTTON(null,{callback:t=>{qv.PARAM_CALLBACK_pause(t)}})}};class qv extends Va{constructor(){super(...arguments),this.paramsConfig=Wv}static type(){return\\\\\\\"animation\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(Hv.START,Qo.BASE,this._play.bind(this)),new ta(Hv.STOP,Qo.BASE,this._pause.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(jv.START,Qo.BASE),new ta(jv.COMPLETE,Qo.BASE)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.animation],(()=>this.pv.animation.path()))}))}))}processEvent(t){}static PARAM_CALLBACK_play(t){t._play({})}static PARAM_CALLBACK_pause(t){t._pause()}async _play(t){const e=this.p.animation;e.isDirty()&&await e.compute();const n=e.value.nodeWithContext(ts.ANIM);if(!n)return;const i=await n.compute();i&&(this._timelineBuilder=i.coreContent(),this._timelineBuilder&&(this._timeline&&this._timeline.kill(),this._timeline=F_.timeline(),this._timelineBuilder.populate(this._timeline),this._timeline.vars.onStart=()=>{this._triggerAnimationStarted(t)},this._timeline.vars.onComplete=()=>{this._timeline&&this._timeline.kill(),this._triggerAnimationCompleted(t)}))}_pause(){this._timeline&&this._timeline.pause()}_triggerAnimationStarted(t){this.dispatchEventToOutput(jv.START,t)}_triggerAnimationCompleted(t){this.dispatchEventToOutput(jv.COMPLETE,t)}}const Xv=\\\\\\\"event\\\\\\\";const Yv=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(1),this.inputsCount=ha.INTEGER(5,{range:[1,10],rangeLocked:[!0,!1]})}};class $v extends Va{constructor(){super(...arguments),this.paramsConfig=Yv}static type(){return\\\\\\\"any\\\\\\\"}initializeNode(){this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_input_name_function(this._input_name.bind(this)),this.io.connection_points.set_output_name_function((()=>Xv)),this.io.connection_points.set_expected_output_types_function((()=>[Qo.BASE]))}_expected_input_types(){const t=new Array(this.pv.inputsCount);return t.fill(Qo.BASE),t}_input_name(t){return`trigger${t}`}async processEvent(t){this.p.active.isDirty()&&await this.p.active.compute(),this.pv.active&&this.dispatchEventToOutput(Xv,t)}}const Jv=new class extends ua{constructor(){super(...arguments),this.blocking=ha.BOOLEAN(1)}};class Zv extends Va{constructor(){super(...arguments),this.paramsConfig=Jv}static type(){return\\\\\\\"block\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(\\\\\\\"in\\\\\\\",Qo.BASE,this._process_incoming_event.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(Zv.OUTPUT,Qo.BASE)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.blocking],(()=>this.pv.blocking?\\\\\\\"blocking (X)\\\\\\\":\\\\\\\"pass-through (--\\\\x3e)\\\\\\\"))}))}))}trigger_output(t){this.dispatchEventToOutput(Zv.OUTPUT,t)}_process_incoming_event(t){this.pv.blocking||this.trigger_output(t)}}var Kv;Zv.OUTPUT=\\\\\\\"output\\\\\\\",function(t){t.OUT=\\\\\\\"out\\\\\\\"}(Kv||(Kv={}));const Qv=new class extends ua{constructor(){super(...arguments),this.dispatch=ha.BUTTON(null,{callback:t=>{ty.PARAM_CALLBACK_execute(t)}})}};class ty extends Va{constructor(){super(...arguments),this.paramsConfig=Qv}static type(){return\\\\\\\"button\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new ta(Kv.OUT,Qo.BASE)])}processEvent(t){}process_event_execute(t){this.dispatchEventToOutput(Kv.OUT,t)}static PARAM_CALLBACK_execute(t){t.process_event_execute({})}}class ey extends Va{constructor(){super(...arguments),this._controls_by_viewer=new Map}async apply_controls(t,e){var n;null===(n=e.controlsController)||void 0===n||n.dispose_controls();const i=e.canvas();if(!i)return;const s=await this.createControlsInstance(t,i),r=this._controls_by_viewer.get(e);r&&r.dispose(),this._controls_by_viewer.set(e,s);const o=li.performance.performanceManager().now();return s.name=`${this.path()}:${t.name}:${o}:${this.controls_id()}`,await this.params.evalAll(),this.setupControls(s),s}controls_id(){return JSON.stringify(this.params.all.map((t=>t.valueSerialized())))}}var ny=n(27);const iy=new p.a(0,0,1),sy=new ny.a,ry=new hh.a,oy=new hh.a(-Math.sqrt(.5),0,0,Math.sqrt(.5)),ay={type:\\\\\\\"change\\\\\\\"};class ly extends J.a{constructor(t){super(),!1===window.isSecureContext&&console.error(\\\\\\\"THREE.DeviceOrientationControls: DeviceOrientationEvent is only available in secure contexts (https)\\\\\\\");const e=this,n=new hh.a;this.object=t,this.object.rotation.reorder(\\\\\\\"YXZ\\\\\\\"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;const i=function(t){e.deviceOrientation=t},s=function(){e.screenOrientation=window.orientation||0};this.connect=function(){s(),void 0!==window.DeviceOrientationEvent&&\\\\\\\"function\\\\\\\"==typeof window.DeviceOrientationEvent.requestPermission?window.DeviceOrientationEvent.requestPermission().then((function(t){\\\\\\\"granted\\\\\\\"==t&&(window.addEventListener(\\\\\\\"orientationchange\\\\\\\",s),window.addEventListener(\\\\\\\"deviceorientation\\\\\\\",i))})).catch((function(t){console.error(\\\\\\\"THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:\\\\\\\",t)})):(window.addEventListener(\\\\\\\"orientationchange\\\\\\\",s),window.addEventListener(\\\\\\\"deviceorientation\\\\\\\",i)),e.enabled=!0},this.disconnect=function(){window.removeEventListener(\\\\\\\"orientationchange\\\\\\\",s),window.removeEventListener(\\\\\\\"deviceorientation\\\\\\\",i),e.enabled=!1},this.update=function(){if(!1===e.enabled)return;const t=e.deviceOrientation;if(t){const i=t.alpha?On.e(t.alpha)+e.alphaOffset:0,s=t.beta?On.e(t.beta):0,r=t.gamma?On.e(t.gamma):0,o=e.screenOrientation?On.e(e.screenOrientation):0;!function(t,e,n,i,s){sy.set(n,e,-i,\\\\\\\"YXZ\\\\\\\"),t.setFromEuler(sy),t.multiply(oy),t.multiply(ry.setFromAxisAngle(iy,-s))}(e.object.quaternion,i,s,r,o),8*(1-n.dot(e.object.quaternion))>1e-6&&(n.copy(e.object.quaternion),e.dispatchEvent(ay))}},this.dispose=function(){e.disconnect()},this.connect()}}const cy=new class extends ua{constructor(){super(...arguments),this.enabled=ha.BOOLEAN(1)}};class hy extends ey{constructor(){super(...arguments),this.paramsConfig=cy,this._controls_by_element_id=new Map}static type(){return _s.DEVICE_ORIENTATION}endEventName(){return\\\\\\\"end\\\\\\\"}async createControlsInstance(t,e){const n=new ly(t);return this._controls_by_element_id.set(e.id,n),n}setupControls(t){t.enabled=this.pv.enabled}updateRequired(){return!0}disposeControlsForHtmlElementId(t){const e=this._controls_by_element_id.get(t);e&&(e.dispose(),this._controls_by_element_id.delete(t))}}class uy{constructor(t=1,e=0,n=0){return this.radius=t,this.phi=e,this.theta=n,this}set(t,e,n){return this.radius=t,this.phi=e,this.theta=n,this}copy(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this}makeSafe(){const t=1e-6;return this.phi=Math.max(t,Math.min(Math.PI-t,this.phi)),this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,n){return this.radius=Math.sqrt(t*t+e*e+n*n),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(t,n),this.phi=Math.acos(On.d(e/this.radius,-1,1))),this}clone(){return(new this.constructor).copy(this)}}const dy={type:\\\\\\\"change\\\\\\\"},py={type:\\\\\\\"start\\\\\\\"},_y={type:\\\\\\\"end\\\\\\\"};class my extends J.a{constructor(t,e){super(),void 0===e&&console.warn('THREE.OrbitControls: The second parameter \\\\\\\"domElement\\\\\\\" is now mandatory.'),e===document&&console.error('THREE.OrbitControls: \\\\\\\"document\\\\\\\" should not be used as the target \\\\\\\"domElement\\\\\\\". Please use \\\\\\\"renderer.domElement\\\\\\\" instead.'),this.object=t,this.domElement=e,this.domElement.style.touchAction=\\\\\\\"none\\\\\\\",this.enabled=!0,this.target=new p.a,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keyMode=\\\\\\\"pan\\\\\\\",this.keyRotateSpeedVertical=1,this.keyRotateSpeedHorizontal=1,this.keys={LEFT:\\\\\\\"ArrowLeft\\\\\\\",UP:\\\\\\\"ArrowUp\\\\\\\",RIGHT:\\\\\\\"ArrowRight\\\\\\\",BOTTOM:\\\\\\\"ArrowDown\\\\\\\"},this.mouseButtons={LEFT:w.hb.ROTATE,MIDDLE:w.hb.DOLLY,RIGHT:w.hb.PAN},this.touches={ONE:w.Tc.ROTATE,TWO:w.Tc.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this.getPolarAngle=function(){return o.phi},this.getAzimuthalAngle=function(){return o.theta},this.getDistance=function(){return this.object.position.distanceTo(this.target)},this.listenToKeyEvents=function(t){t.addEventListener(\\\\\\\"keydown\\\\\\\",q),this._domElementKeyEvents=t},this.saveState=function(){n.target0.copy(n.target),n.position0.copy(n.object.position),n.zoom0=n.object.zoom},this.reset=function(){n.target.copy(n.target0),n.object.position.copy(n.position0),n.object.zoom=n.zoom0,n.object.updateProjectionMatrix(),n.dispatchEvent(dy),n.update(),s=i.NONE},this.update=function(){const e=new p.a,u=(new hh.a).setFromUnitVectors(t.up,new p.a(0,1,0)),d=u.clone().invert(),_=new p.a,m=new hh.a,f=2*Math.PI;let g=!1;return function(){const t=n.object.position;if(e.copy(t).sub(n.target),e.applyQuaternion(u),o.setFromVector3(e),n.autoRotate&&s===i.NONE&&E(2*Math.PI/60/60*n.autoRotateSpeed),n.enableDamping){const t=a.theta*n.dampingFactor,e=a.phi*n.dampingFactor;t<r&&e<r?g||(n.dispatchEvent(_y),g=!0):g=!1,o.theta+=t,o.phi+=e}else o.theta+=a.theta,o.phi+=a.phi;let p=n.minAzimuthAngle,v=n.maxAzimuthAngle;return isFinite(p)&&isFinite(v)&&(p<-Math.PI?p+=f:p>Math.PI&&(p-=f),v<-Math.PI?v+=f:v>Math.PI&&(v-=f),o.theta=p<v?Math.max(p,Math.min(v,o.theta)):o.theta>(p+v)/2?Math.max(p,o.theta):Math.min(v,o.theta)),o.phi=Math.max(n.minPolarAngle,Math.min(n.maxPolarAngle,o.phi)),o.makeSafe(),o.radius*=l,o.radius=Math.max(n.minDistance,Math.min(n.maxDistance,o.radius)),!0===n.enableDamping?n.target.addScaledVector(c,n.dampingFactor):n.target.add(c),e.setFromSpherical(o),e.applyQuaternion(d),t.copy(n.target).add(e),n.object.lookAt(n.target),!0===n.enableDamping?(a.theta*=1-n.dampingFactor,a.phi*=1-n.dampingFactor,c.multiplyScalar(1-n.dampingFactor)):(a.set(0,0,0),c.set(0,0,0)),l=1,!!(h||_.distanceToSquared(n.object.position)>r||8*(1-m.dot(n.object.quaternion))>r)&&(n.dispatchEvent(dy),_.copy(n.object.position),m.copy(n.object.quaternion),h=!1,!0)}}(),this.dispose=function(){n.domElement.removeEventListener(\\\\\\\"contextmenu\\\\\\\",X,!1),n.domElement.removeEventListener(\\\\\\\"pointerdown\\\\\\\",G,!1),n.domElement.removeEventListener(\\\\\\\"pointercancel\\\\\\\",j),n.domElement.removeEventListener(\\\\\\\"wheel\\\\\\\",W,!1),n.domElement.ownerDocument.removeEventListener(\\\\\\\"pointermove\\\\\\\",V,!1),n.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerup\\\\\\\",H,!1),null!==n._domElementKeyEvents&&n._domElementKeyEvents.removeEventListener(\\\\\\\"keydown\\\\\\\",q)};const n=this,i={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let s=i.NONE;const r=1e-6,o=new uy,a=new uy;let l=1;const c=new p.a;let h=!1;const u=new d.a,_=new d.a,m=new d.a,f=new d.a,g=new d.a,v=new d.a,y=new d.a,x=new d.a,b=new d.a,T=[],A={};function M(){return Math.pow(.95,n.zoomSpeed)}function E(t){a.theta-=t}function S(t){a.phi-=t}const C=function(){const t=new p.a;return function(e,n){t.setFromMatrixColumn(n,0),t.multiplyScalar(-e),c.add(t)}}(),N=function(){const t=new p.a;return function(e,i){!0===n.screenSpacePanning?t.setFromMatrixColumn(i,1):(t.setFromMatrixColumn(i,0),t.crossVectors(n.object.up,t)),t.multiplyScalar(e),c.add(t)}}(),L=function(){const t=new p.a;return function(e,i){const s=n.domElement;if(n.object.isPerspectiveCamera){const r=n.object.position;t.copy(r).sub(n.target);let o=t.length();o*=Math.tan(n.object.fov/2*Math.PI/180),C(2*e*o/s.clientHeight,n.object.matrix),N(2*i*o/s.clientHeight,n.object.matrix)}else n.object.isOrthographicCamera?(C(e*(n.object.right-n.object.left)/n.object.zoom/s.clientWidth,n.object.matrix),N(i*(n.object.top-n.object.bottom)/n.object.zoom/s.clientHeight,n.object.matrix)):(console.warn(\\\\\\\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\\\\\\\"),n.enablePan=!1)}}();function O(t){n.object.isPerspectiveCamera?l/=t:n.object.isOrthographicCamera?(n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom*t)),n.object.updateProjectionMatrix(),h=!0):(console.warn(\\\\\\\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\\\\\\\"),n.enableZoom=!1)}function P(t){n.object.isPerspectiveCamera?l*=t:n.object.isOrthographicCamera?(n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom/t)),n.object.updateProjectionMatrix(),h=!0):(console.warn(\\\\\\\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\\\\\\\"),n.enableZoom=!1)}function R(t){u.set(t.clientX,t.clientY)}function I(t){f.set(t.clientX,t.clientY)}function F(){if(1===T.length)u.set(T[0].pageX,T[0].pageY);else{const t=.5*(T[0].pageX+T[1].pageX),e=.5*(T[0].pageY+T[1].pageY);u.set(t,e)}}function D(){if(1===T.length)f.set(T[0].pageX,T[0].pageY);else{const t=.5*(T[0].pageX+T[1].pageX),e=.5*(T[0].pageY+T[1].pageY);f.set(t,e)}}function B(){const t=T[0].pageX-T[1].pageX,e=T[0].pageY-T[1].pageY,n=Math.sqrt(t*t+e*e);y.set(0,n)}function z(t){if(1==T.length)_.set(t.pageX,t.pageY);else{const e=J(t),n=.5*(t.pageX+e.x),i=.5*(t.pageY+e.y);_.set(n,i)}m.subVectors(_,u).multiplyScalar(n.rotateSpeed);const e=n.domElement;E(2*Math.PI*m.x/e.clientHeight),S(2*Math.PI*m.y/e.clientHeight),u.copy(_)}function k(t){if(1===T.length)g.set(t.pageX,t.pageY);else{const e=J(t),n=.5*(t.pageX+e.x),i=.5*(t.pageY+e.y);g.set(n,i)}v.subVectors(g,f).multiplyScalar(n.panSpeed),L(v.x,v.y),f.copy(g)}function U(t){const e=J(t),i=t.pageX-e.x,s=t.pageY-e.y,r=Math.sqrt(i*i+s*s);x.set(0,r),b.set(0,Math.pow(x.y/y.y,n.zoomSpeed)),O(b.y),y.copy(x)}function G(t){!1!==n.enabled&&(0===T.length&&(n.domElement.setPointerCapture(t.pointerId),n.domElement.ownerDocument.addEventListener(\\\\\\\"pointermove\\\\\\\",V),n.domElement.ownerDocument.addEventListener(\\\\\\\"pointerup\\\\\\\",H)),function(t){T.push(t)}(t),\\\\\\\"touch\\\\\\\"===t.pointerType?function(t){switch($(t),T.length){case 1:switch(n.touches.ONE){case w.Tc.ROTATE:if(!1===n.enableRotate)return;F(),s=i.TOUCH_ROTATE;break;case w.Tc.PAN:if(!1===n.enablePan)return;D(),s=i.TOUCH_PAN;break;default:s=i.NONE}break;case 2:switch(n.touches.TWO){case w.Tc.DOLLY_PAN:if(!1===n.enableZoom&&!1===n.enablePan)return;n.enableZoom&&B(),n.enablePan&&D(),s=i.TOUCH_DOLLY_PAN;break;case w.Tc.DOLLY_ROTATE:if(!1===n.enableZoom&&!1===n.enableRotate)return;n.enableZoom&&B(),n.enableRotate&&F(),s=i.TOUCH_DOLLY_ROTATE;break;default:s=i.NONE}break;default:s=i.NONE}s!==i.NONE&&n.dispatchEvent(py)}(t):function(t){let e;switch(t.button){case 0:e=n.mouseButtons.LEFT;break;case 1:e=n.mouseButtons.MIDDLE;break;case 2:e=n.mouseButtons.RIGHT;break;default:e=-1}switch(e){case w.hb.DOLLY:if(!1===n.enableZoom)return;!function(t){y.set(t.clientX,t.clientY)}(t),s=i.DOLLY;break;case w.hb.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===n.enablePan)return;I(t),s=i.PAN}else{if(!1===n.enableRotate)return;R(t),s=i.ROTATE}break;case w.hb.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===n.enableRotate)return;R(t),s=i.ROTATE}else{if(!1===n.enablePan)return;I(t),s=i.PAN}break;default:s=i.NONE}s!==i.NONE&&n.dispatchEvent(py)}(t))}function V(t){!1!==n.enabled&&(\\\\\\\"touch\\\\\\\"===t.pointerType?function(t){switch($(t),s){case i.TOUCH_ROTATE:if(!1===n.enableRotate)return;z(t),n.update();break;case i.TOUCH_PAN:if(!1===n.enablePan)return;k(t),n.update();break;case i.TOUCH_DOLLY_PAN:if(!1===n.enableZoom&&!1===n.enablePan)return;!function(t){n.enableZoom&&U(t),n.enablePan&&k(t)}(t),n.update();break;case i.TOUCH_DOLLY_ROTATE:if(!1===n.enableZoom&&!1===n.enableRotate)return;!function(t){n.enableZoom&&U(t),n.enableRotate&&z(t)}(t),n.update();break;default:s=i.NONE}}(t):function(t){if(!1===n.enabled)return;switch(s){case i.ROTATE:if(!1===n.enableRotate)return;!function(t){_.set(t.clientX,t.clientY),m.subVectors(_,u).multiplyScalar(n.rotateSpeed);var e=n.domElement;E(2*Math.PI*m.x/e.clientHeight),S(2*Math.PI*m.y/e.clientHeight),u.copy(_),n.update()}(t);break;case i.DOLLY:if(!1===n.enableZoom)return;!function(t){x.set(t.clientX,t.clientY),b.subVectors(x,y),b.y>0?O(M()):b.y<0&&P(M()),y.copy(x),n.update()}(t);break;case i.PAN:if(!1===n.enablePan)return;!function(t){g.set(t.clientX,t.clientY),v.subVectors(g,f).multiplyScalar(n.panSpeed),L(v.x,v.y),f.copy(g),n.update()}(t)}}(t))}function H(t){!1!==n.enabled&&(t.pointerType,n.dispatchEvent(_y),s=i.NONE,Y(t),0===T.length&&(n.domElement.releasePointerCapture(t.pointerId),n.domElement.ownerDocument.removeEventListener(\\\\\\\"pointermove\\\\\\\",V),n.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerup\\\\\\\",H)))}function j(t){Y(t)}function W(t){!1===n.enabled||!1===n.enableZoom||s!==i.NONE&&s!==i.ROTATE||(t.preventDefault(),n.dispatchEvent(py),function(t){t.deltaY<0?P(M()):t.deltaY>0&&O(M()),n.update()}(t),n.dispatchEvent(_y))}function q(t){!1!==n.enabled&&!1!==n.enablePan&&function(t){let e=!1;if(\\\\\\\"pan\\\\\\\"==n.keyMode)switch(t.code){case n.keys.UP:L(0,n.keyPanSpeed),e=!0;break;case n.keys.BOTTOM:L(0,-n.keyPanSpeed),e=!0;break;case n.keys.LEFT:L(n.keyPanSpeed,0),e=!0;break;case n.keys.RIGHT:L(-n.keyPanSpeed,0),e=!0}else switch(t.code){case n.keys.UP:S(n.keyRotateSpeedVertical),e=!0;break;case n.keys.BOTTOM:S(-n.keyRotateSpeedVertical),e=!0;break;case n.keys.LEFT:E(n.keyRotateSpeedHorizontal),e=!0;break;case n.keys.RIGHT:E(-n.keyRotateSpeedHorizontal),e=!0}e&&(t.preventDefault(),n.update())}(t)}function X(t){!1!==n.enabled&&t.preventDefault()}function Y(t){delete A[t.pointerId];for(let e=0;e<T.length;e++)if(T[e].pointerId==t.pointerId)return void T.splice(e,1)}function $(t){let e=A[t.pointerId];void 0===e&&(e=new d.a,A[t.pointerId]=e),e.set(t.pageX,t.pageY)}function J(t){const e=t.pointerId===T[0].pointerId?T[1]:T[0];return A[e.pointerId]}n.domElement.addEventListener(\\\\\\\"contextmenu\\\\\\\",X),n.domElement.addEventListener(\\\\\\\"pointerdown\\\\\\\",G),n.domElement.addEventListener(\\\\\\\"pointercancel\\\\\\\",j),n.domElement.addEventListener(\\\\\\\"wheel\\\\\\\",W,{passive:!1}),this.update()}}class fy extends my{constructor(t,e){super(t,e),this.screenSpacePanning=!1,this.mouseButtons.LEFT=w.hb.PAN,this.mouseButtons.RIGHT=w.hb.ROTATE,this.touches.ONE=w.Tc.PAN,this.touches.TWO=w.Tc.DOLLY_ROTATE}}const gy=\\\\\\\"start\\\\\\\",vy=\\\\\\\"change\\\\\\\";var yy;!function(t){t.PAN=\\\\\\\"pan\\\\\\\",t.ROTATE=\\\\\\\"rotate\\\\\\\"}(yy||(yy={}));const xy=[yy.PAN,yy.ROTATE];const by=new class extends ua{constructor(){super(...arguments),this.enabled=ha.BOOLEAN(1),this.allowPan=ha.BOOLEAN(1),this.allowRotate=ha.BOOLEAN(1),this.allowZoom=ha.BOOLEAN(1),this.tdamping=ha.BOOLEAN(1),this.damping=ha.FLOAT(.1,{visibleIf:{tdamping:!0}}),this.screenSpacePanning=ha.BOOLEAN(1),this.rotateSpeed=ha.FLOAT(.5),this.minDistance=ha.FLOAT(1,{range:[0,100],rangeLocked:[!0,!1]}),this.maxDistance=ha.FLOAT(50,{range:[0,100],rangeLocked:[!0,!1]}),this.limitAzimuthAngle=ha.BOOLEAN(0),this.azimuthAngleRange=ha.VECTOR2([\\\\\\\"-2*$PI\\\\\\\",\\\\\\\"2*$PI\\\\\\\"],{visibleIf:{limitAzimuthAngle:1}}),this.polarAngleRange=ha.VECTOR2([0,\\\\\\\"$PI\\\\\\\"]),this.target=ha.VECTOR3([0,0,0],{cook:!1,computeOnDirty:!0,callback:t=>{wy.PARAM_CALLBACK_update_target(t)}}),this.enableKeys=ha.BOOLEAN(0),this.keysMode=ha.INTEGER(xy.indexOf(yy.PAN),{visibleIf:{enableKeys:1},menu:{entries:xy.map(((t,e)=>({name:t,value:e})))}}),this.keysPanSpeed=ha.FLOAT(7,{range:[0,10],rangeLocked:[!1,!1],visibleIf:{enableKeys:1,keysMode:xy.indexOf(yy.PAN)}}),this.keysRotateSpeedVertical=ha.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],visibleIf:{enableKeys:1,keysMode:xy.indexOf(yy.ROTATE)}}),this.keysRotateSpeedHorizontal=ha.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],visibleIf:{enableKeys:1,keysMode:xy.indexOf(yy.ROTATE)}})}};class wy extends ey{constructor(){super(...arguments),this.paramsConfig=by,this._controls_by_element_id=new Map,this._target_array=[0,0,0]}static type(){return _s.ORBIT}endEventName(){return\\\\\\\"end\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new ta(gy,Qo.BASE),new ta(vy,Qo.BASE),new ta(\\\\\\\"end\\\\\\\",Qo.BASE)])}async createControlsInstance(t,e){const n=new my(t,e);return n.addEventListener(\\\\\\\"end\\\\\\\",(()=>{this._on_controls_end(n)})),this._controls_by_element_id.set(e.id,n),this._bind_listeners_to_controls_instance(n),n}_bind_listeners_to_controls_instance(t){t.addEventListener(\\\\\\\"start\\\\\\\",(()=>{this.dispatchEventToOutput(gy,{})})),t.addEventListener(\\\\\\\"change\\\\\\\",(()=>{this.dispatchEventToOutput(vy,{})})),t.addEventListener(\\\\\\\"end\\\\\\\",(()=>{this.dispatchEventToOutput(\\\\\\\"end\\\\\\\",{})}))}setupControls(t){t.enabled=this.pv.enabled,t.enablePan=this.pv.allowPan,t.enableRotate=this.pv.allowRotate,t.enableZoom=this.pv.allowZoom,t.enableDamping=this.pv.tdamping,t.dampingFactor=this.pv.damping,t.rotateSpeed=this.pv.rotateSpeed,t.screenSpacePanning=this.pv.screenSpacePanning,t.minDistance=this.pv.minDistance,t.maxDistance=this.pv.maxDistance,this._set_azimuth_angle(t),t.minPolarAngle=this.pv.polarAngleRange.x,t.maxPolarAngle=this.pv.polarAngleRange.y,t.target.copy(this.pv.target),t.enabled&&t.update(),t.enableKeys=this.pv.enableKeys,t.enableKeys&&(t.keyMode=xy[this.pv.keysMode],t.keyRotateSpeedVertical=this.pv.keysRotateSpeedVertical,t.keyRotateSpeedHorizontal=this.pv.keysRotateSpeedHorizontal,t.keyPanSpeed=this.pv.keysPanSpeed)}_set_azimuth_angle(t){this.pv.limitAzimuthAngle?(t.minAzimuthAngle=this.pv.azimuthAngleRange.x,t.maxAzimuthAngle=this.pv.azimuthAngleRange.y):(t.minAzimuthAngle=1/0,t.maxAzimuthAngle=1/0)}updateRequired(){return this.pv.tdamping}_on_controls_end(t){this.pv.allowPan&&(t.target.toArray(this._target_array),this.p.target.set(this._target_array))}static PARAM_CALLBACK_update_target(t){t._update_target()}_update_target(){const t=this.pv.target;this._controls_by_element_id.forEach(((e,n)=>{const i=e.target;i.equals(t)||(i.copy(t),e.update())}))}disposeControlsForHtmlElementId(t){this._controls_by_element_id.get(t)&&this._controls_by_element_id.delete(t)}}class Ty extends wy{static type(){return _s.MAP}async create_controls_instance(t,e){const n=new fy(t,e);return this._bind_listeners_to_controls_instance(n),n}}const Ay=new class extends ua{constructor(){super(...arguments),this.delay=ha.INTEGER(1e3,{range:[0,1e3],rangeLocked:[!0,!1]})}};class My extends Va{constructor(){super(...arguments),this.paramsConfig=Ay}static type(){return\\\\\\\"delay\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(\\\\\\\"in\\\\\\\",Qo.BASE,this._process_input.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(\\\\\\\"out\\\\\\\",Qo.BASE)])}_process_input(t){setTimeout((()=>{this.dispatchEventToOutput(\\\\\\\"out\\\\\\\",t)}),this.pv.delay)}}const Ey={type:\\\\\\\"change\\\\\\\"},Sy={type:\\\\\\\"lock\\\\\\\"},Cy={type:\\\\\\\"unlock\\\\\\\"},Ny=Math.PI/2,Ly=new p.a,Oy=new uy;class Py extends J.a{constructor(t,e,n){super(),this.camera=t,this.domElement=e,this.player=n,this.isLocked=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.rotateSpeed=1,this.euler=new ny.a(0,0,0,\\\\\\\"YXZ\\\\\\\"),this.boundMethods={onMouseMove:this.onMouseMove.bind(this),onPointerlockChange:this.onPointerlockChange.bind(this),onPointerlockError:this.onPointerlockError.bind(this)},this._azimuthalAngle=0,this.connect()}onMouseMove(t){if(!1!==this.isLocked){var e=t.movementX||t.mozMovementX||t.webkitMovementX||0,n=t.movementY||t.mozMovementY||t.webkitMovementY||0;this.euler.setFromQuaternion(this.camera.quaternion),this.euler.y-=.002*e*this.rotateSpeed,this.euler.x-=.002*n*this.rotateSpeed,this.euler.x=Math.max(Ny-this.maxPolarAngle,Math.min(Ny-this.minPolarAngle,this.euler.x)),this.camera.quaternion.setFromEuler(this.euler),this._computeAzimuthalAngle(),this.dispatchEvent(Ey)}}_computeAzimuthalAngle(){this.camera.updateMatrixWorld(),Ly.set(0,0,1),this.camera.localToWorld(Ly),Ly.sub(this.camera.position),Oy.setFromVector3(Ly),this._azimuthalAngle=Oy.theta}onPointerlockChange(){this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(Sy),this.isLocked=!0):(this.dispatchEvent(Cy),this.isLocked=!1)}onPointerlockError(){console.error(\\\\\\\"THREE.PointerLockControls: Unable to use Pointer Lock API (Note that you need to wait for 2 seconds to lock the pointer after having just unlocked it)\\\\\\\")}connect(){this.domElement.ownerDocument.addEventListener(\\\\\\\"mousemove\\\\\\\",this.boundMethods.onMouseMove),this.domElement.ownerDocument.addEventListener(\\\\\\\"pointerlockchange\\\\\\\",this.boundMethods.onPointerlockChange),this.domElement.ownerDocument.addEventListener(\\\\\\\"pointerlockerror\\\\\\\",this.boundMethods.onPointerlockError)}disconnect(){this.domElement.ownerDocument.removeEventListener(\\\\\\\"mousemove\\\\\\\",this.boundMethods.onMouseMove),this.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerlockchange\\\\\\\",this.boundMethods.onPointerlockChange),this.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerlockerror\\\\\\\",this.boundMethods.onPointerlockError)}dispose(){this.disconnect()}getObject(){return this.camera}lock(){this.domElement.requestPointerLock()}unlock(){this.domElement.ownerDocument.exitPointerLock()}update(t){this.player&&(this.player.setAzimuthalAngle(this._azimuthalAngle),this.player.update(t))}}var Ry=n(16);const Iy=new p.a,Fy=new p.a;class Dy{constructor(t=new p.a,e=new p.a){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Iy.subVectors(t,this.start),Fy.subVectors(this.end,this.start);const n=Fy.dot(Fy);let i=Fy.dot(Iy)/n;return e&&(i=On.d(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}const By=new p.a;function zy(t,e,n,i,s,r){const o=2*Math.PI*s/4,a=Math.max(r-2*s,0),l=Math.PI/4;By.copy(e),By[i]=0,By.normalize();const c=.5*o/(o+a),h=1-By.angleTo(t)/l;if(1===Math.sign(By[n]))return h*c;return a/(o+a)+c+c*(1-h)}class ky extends N{constructor(t=1,e=1,n=1,i=2,s=.1){if(i=2*i+1,s=Math.min(t/2,e/2,n/2,s),super(1,1,1,i,i,i),1===i)return;const r=this.toNonIndexed();this.index=null,this.attributes.position=r.attributes.position,this.attributes.normal=r.attributes.normal,this.attributes.uv=r.attributes.uv;const o=new p.a,a=new p.a,l=new p.a(t,e,n).divideScalar(2).subScalar(s),c=this.attributes.position.array,h=this.attributes.normal.array,u=this.attributes.uv.array,d=c.length/6,_=new p.a,m=.5/i;for(let i=0,r=0;i<c.length;i+=3,r+=2){o.fromArray(c,i),a.copy(o),a.x-=Math.sign(a.x)*m,a.y-=Math.sign(a.y)*m,a.z-=Math.sign(a.z)*m,a.normalize(),c[i+0]=l.x*Math.sign(o.x)+a.x*s,c[i+1]=l.y*Math.sign(o.y)+a.y*s,c[i+2]=l.z*Math.sign(o.z)+a.z*s,h[i+0]=a.x,h[i+1]=a.y,h[i+2]=a.z;switch(Math.floor(i/d)){case 0:_.set(1,0,0),u[r+0]=zy(_,a,\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",s,n),u[r+1]=1-zy(_,a,\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",s,e);break;case 1:_.set(-1,0,0),u[r+0]=1-zy(_,a,\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",s,n),u[r+1]=1-zy(_,a,\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",s,e);break;case 2:_.set(0,1,0),u[r+0]=1-zy(_,a,\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",s,t),u[r+1]=zy(_,a,\\\\\\\"z\\\\\\\",\\\\\\\"x\\\\\\\",s,n);break;case 3:_.set(0,-1,0),u[r+0]=1-zy(_,a,\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",s,t),u[r+1]=1-zy(_,a,\\\\\\\"z\\\\\\\",\\\\\\\"x\\\\\\\",s,n);break;case 4:_.set(0,0,1),u[r+0]=1-zy(_,a,\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",s,t),u[r+1]=1-zy(_,a,\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",s,e);break;case 5:_.set(0,0,-1),u[r+0]=zy(_,a,\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",s,t),u[r+1]=1-zy(_,a,\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",s,e)}}}}function Uy(t){const e=t.radius,n=t.height,i=2*e,s=new ky(i,n+i,i,10,e);return s.translate(0,-n/2,0),s}const Gy=new p.a(0,0,0),Vy=new p.a(0,1,0),Hy=new p.a,jy=new p.a,Wy=new Ry.a,qy=new A.a,Xy=new Dy,Yy=new p.a;class $y{constructor(t){this._pressed={forward:!1,backward:!1,left:!1,right:!1},this._onGround=!1,this._velocity=new p.a,this.capsuleInfo={radius:.5,segment:new Dy(new p.a,new p.a(0,-1,0))},this.startPosition=new p.a(0,5,0),this.startRotation=new p.a(0,0,0),this.jumpAllowed=!0,this.jumpStrength=10,this.runAllowed=!0,this.runSpeedMult=2,this._running=!1,this.speed=10,this.physicsSteps=5,this.gravity=new p.a(0,-30,0),this._azimuthalAngle=0,this._resetRequiredCallback=()=>this.object.position.y<-25,this.object=t.object,this.object.matrixAutoUpdate=!0,this.collider=t.collider,t.meshName&&(this._mesh=new B.a,this._mesh.geometry=Uy({radius:this.capsuleInfo.radius,height:1}),this._mesh.name=t.meshName,this._mesh.receiveShadow=!0,this._mesh.castShadow=!0)}setCollider(t){this.collider=t}setCapsule(t){this.capsuleInfo.radius=t.radius,this.capsuleInfo.segment.end.y=-t.height,this._mesh&&(this._mesh.geometry=Uy(t))}setUsePlayerMesh(t){t?(this._mesh=this._mesh||this._createMesh(),this.object.add(this._mesh)):this._mesh&&this.object.remove(this._mesh)}_createMesh(){const t=new B.a;return t.geometry=Uy({radius:this.capsuleInfo.radius,height:1}),t.name=this._meshName||\\\\\\\"defaultPlayerMeshName\\\\\\\",t.receiveShadow=!0,t.castShadow=!0,t}setMaterial(t){this._mesh&&(this._mesh.material=t)}reset(){this.stop(),this.object.position.copy(this.startPosition),Yy.copy(this.startRotation).multiplyScalar(On.a),this.object.rotation.setFromVector3(Yy)}stop(){this._pressed.forward=!1,this._pressed.backward=!1,this._pressed.left=!1,this._pressed.right=!1,this._running=!1}setResetRequiredCallback(t){this._resetRequiredCallback=t}setAzimuthalAngle(t){this._azimuthalAngle=t}update(t){const e=Math.min(t,.1);for(let t=0;t<this.physicsSteps;t++)this._updateStep(e/this.physicsSteps)}_updateStep(t){this._onGround||(Gy.copy(this.gravity).multiplyScalar(t),this._velocity.add(Gy)),this.object.position.addScaledVector(this._velocity,t);const e=this._azimuthalAngle,n=this.speed*t*(this._running?this.runSpeedMult:1);jy.set(0,0,0),this._pressed.forward&&(Hy.set(0,0,-1).applyAxisAngle(Vy,e),jy.add(Hy)),this._pressed.backward&&(Hy.set(0,0,1).applyAxisAngle(Vy,e),jy.add(Hy)),this._pressed.left&&(Hy.set(-1,0,0).applyAxisAngle(Vy,e),jy.add(Hy)),this._pressed.right&&(Hy.set(1,0,0).applyAxisAngle(Vy,e),jy.add(Hy)),jy.normalize().multiplyScalar(n),this.object.position.add(jy),this.object.updateMatrixWorld();const i=this.capsuleInfo;Wy.makeEmpty(),qy.copy(this.collider.matrixWorld).invert(),Xy.copy(i.segment),Xy.start.applyMatrix4(this.object.matrixWorld).applyMatrix4(qy),Xy.end.applyMatrix4(this.object.matrixWorld).applyMatrix4(qy),Wy.expandByPoint(Xy.start),Wy.expandByPoint(Xy.end),Wy.min.addScalar(-i.radius),Wy.max.addScalar(i.radius),this.collider.geometry.boundsTree.shapecast({intersectsBounds:t=>t.intersectsBox(Wy),intersectsTriangle:t=>{const e=Hy,n=jy,s=t.closestPointToSegment(Xy,e,n);if(s<i.radius){const t=i.radius-s,r=n.sub(e).normalize();Xy.start.addScaledVector(r,t),Xy.end.addScaledVector(r,t)}}});const s=Hy;s.copy(Xy.start).applyMatrix4(this.collider.matrixWorld);const r=jy;r.subVectors(s,this.object.position),this._onGround=r.y>Math.abs(t*this._velocity.y*.25);const o=Math.max(0,r.length()-1e-5);r.normalize().multiplyScalar(o),this.object.position.add(r),this._onGround?this._velocity.set(0,0,0):(r.normalize(),this._velocity.addScaledVector(r,-r.dot(this._velocity))),this._resetRequiredCallback()&&this.reset()}setForward(t){this._pressed.forward=t}setBackward(t){this._pressed.backward=t}setLeft(t){this._pressed.left=t}setRight(t){this._pressed.right=t}jump(){this._onGround&&this.jumpAllowed&&(this._velocity.y=this.jumpStrength)}setRun(t){t?this._onGround&&this.runAllowed&&(this._running=!0):this._running=!1}running(){return this._running}}function Jy(t){t.preventDefault()}class Zy{constructor(t){this.player=t,this._bounds={keydown:this._onKeyDown.bind(this),keyup:this._onKeyUp.bind(this)}}_onKeyDown(t){if(!t.ctrlKey)switch(t.code){case\\\\\\\"ArrowUp\\\\\\\":case\\\\\\\"KeyW\\\\\\\":this.player.setForward(!0),Jy(t);break;case\\\\\\\"ArrowDown\\\\\\\":case\\\\\\\"KeyS\\\\\\\":this.player.setBackward(!0),Jy(t);break;case\\\\\\\"ArrowRight\\\\\\\":case\\\\\\\"KeyD\\\\\\\":this.player.setRight(!0),Jy(t);break;case\\\\\\\"ArrowLeft\\\\\\\":case\\\\\\\"KeyA\\\\\\\":this.player.setLeft(!0),Jy(t);break;case\\\\\\\"Space\\\\\\\":this.player.jump(),Jy(t);break;case\\\\\\\"ShiftLeft\\\\\\\":case\\\\\\\"ShiftRight\\\\\\\":this.player.setRun(!0),Jy(t)}}_onKeyUp(t){switch(t.code){case\\\\\\\"ArrowUp\\\\\\\":case\\\\\\\"KeyW\\\\\\\":this.player.setForward(!1);break;case\\\\\\\"ArrowDown\\\\\\\":case\\\\\\\"KeyS\\\\\\\":this.player.setBackward(!1);break;case\\\\\\\"ArrowRight\\\\\\\":case\\\\\\\"KeyD\\\\\\\":this.player.setRight(!1);break;case\\\\\\\"ArrowLeft\\\\\\\":case\\\\\\\"KeyA\\\\\\\":this.player.setLeft(!1);break;case\\\\\\\"ShiftLeft\\\\\\\":case\\\\\\\"ShiftRight\\\\\\\":this.player.setRun(!1),Jy(t)}}addEvents(){document.addEventListener(\\\\\\\"keydown\\\\\\\",this._bounds.keydown),document.addEventListener(\\\\\\\"keyup\\\\\\\",this._bounds.keyup)}removeEvents(){document.removeEventListener(\\\\\\\"keydown\\\\\\\",this._bounds.keydown),document.removeEventListener(\\\\\\\"keyup\\\\\\\",this._bounds.keyup)}}Ky=ua;var Ky;class Qy extends Va{static PARAM_CALLBACK_updateCollider(t){}}class tx{constructor(t){this.node=t}_colliderNodeGraphNode(){return this.__colliderNodeGraphNode=this.__colliderNodeGraphNode||new Mi(this.node.scene(),\\\\\\\"colliderGraphNode\\\\\\\")}async getCollider(){var t;const e=this.node.pv.colliderObject.nodeWithContext(ts.SOP);if(!e)return void this.node.states.error.set(\\\\\\\"collider node not found\\\\\\\");(null===(t=this._colliderNode)||void 0===t?void 0:t.graphNodeId())!=e.graphNodeId()&&(this._colliderNode&&this._colliderNodeGraphNode().removeGraphInput(this._colliderNode),this._colliderNodeGraphNode().addGraphInput(e),this._colliderNodeGraphNode().addPostDirtyHook(\\\\\\\"onColliderDirty\\\\\\\",(()=>{this.updateCollider()})),this._colliderNode=e);const n=(await e.compute()).coreContent();if(!n)return void this.node.states.error.set(\\\\\\\"invalid collider node\\\\\\\");return n.objects()[0]}async updateCollider(){var t;const e=await this.getCollider();e?null===(t=this.node.player())||void 0===t||t.setCollider(e):this.node.states.error.set(\\\\\\\"invalid collider\\\\\\\")}}const ex=\\\\\\\"lock\\\\\\\",nx=\\\\\\\"change\\\\\\\",ix=\\\\\\\"unlock\\\\\\\";function sx(){return{cook:!1,callback:t=>{ox.PARAM_CALLBACK_updatePlayerParams(t)}}}const rx=new class extends ua{constructor(){super(...arguments),this.main=ha.FOLDER(),this.colliderObject=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.SOP},dependentOnFoundNode:!1,callback:t=>{ox.PARAM_CALLBACK_updateCollider(t)}}),this.lock=ha.BUTTON(null,{callback:t=>{ox.PARAM_CALLBACK_lockControls(t)}}),this.unlock=ha.BUTTON(null,{callback:t=>{ox.PARAM_CALLBACK_unlockControls(t)}}),this.capsuleRadius=ha.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!1],...sx()}),this.capsuleHeight=ha.FLOAT(1,{range:[0,2],rangeLocked:[!0,!1],...sx()}),this.physics=ha.FOLDER(),this.physicsSteps=ha.INTEGER(5,{range:[1,10],rangeLocked:[!0,!1],...sx()}),this.gravity=ha.VECTOR3([0,-30,0],{...sx()}),this.translateSpeed=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1],...sx()}),this.rotateSpeed=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]}),this.jumpAllowed=ha.BOOLEAN(!0,{...sx()}),this.jumpStrength=ha.FLOAT(10,{range:[0,100],rangeLocked:[!0,!1],...sx()}),this.runAllowed=ha.BOOLEAN(!0,{...sx()}),this.runSpeedMult=ha.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],...sx()}),this.updateCollider=ha.BUTTON(null,{callback:t=>{ox.PARAM_CALLBACK_updateCollider(t)}}),this.init=ha.FOLDER(),this.startPosition=ha.VECTOR3([0,2,0],{...sx()}),this.startRotation=ha.VECTOR3([0,0,0],{...sx()}),this.reset=ha.BUTTON(null,{callback:t=>{ox.PARAM_CALLBACK_resetPlayer(t)}}),this.minPolarAngle=ha.FLOAT(0,{range:[0,Math.PI],rangeLocked:[!0,!0]}),this.maxPolarAngle=ha.FLOAT(\\\\\\\"$PI\\\\\\\",{range:[0,Math.PI],rangeLocked:[!0,!0]})}};class ox extends ey{constructor(){super(...arguments),this.paramsConfig=rx,this._controls_by_element_id=new Map}static type(){return _s.FIRST_PERSON}endEventName(){return\\\\\\\"unlock\\\\\\\"}collisionController(){return this._collisionController=this._collisionController||new tx(this)}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(ex,Qo.BASE,this.lockControls.bind(this)),new ta(ox.INPUT_UPDATE_COLLIDER,Qo.BASE,this._updateCollider.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(ex,Qo.BASE),new ta(nx,Qo.BASE),new ta(ix,Qo.BASE)])}async createControlsInstance(t,e){await this._initPlayer(t);const n=new Py(t,e,this._player);return this._controls_by_element_id.set(e.id,n),this._bind_listeners_to_controls_instance(n),n}async _initPlayer(t){this._player=this._player||await this._createPlayer(t),this._player&&(this._updatePlayerParams(),this._player.reset())}player(){return this._player}async _updatePlayerParams(){this._player&&(this._player.startPosition.copy(this.pv.startPosition),this._player.startRotation.copy(this.pv.startRotation),this._player.physicsSteps=this.pv.physicsSteps,this._player.jumpAllowed=this.pv.jumpAllowed,this._player.jumpStrength=this.pv.jumpStrength,this._player.runAllowed=this.pv.runAllowed,this._player.runSpeedMult=this.pv.runSpeedMult,this._player.gravity.copy(this.pv.gravity),this._player.speed=this.pv.translateSpeed,this._player.setCapsule({radius:this.pv.capsuleRadius,height:this.pv.capsuleHeight}))}async _createPlayer(t){const e=t,n=await this.collisionController().getCollider();if(!n)return void this.states.error.set(\\\\\\\"invalid collider\\\\\\\");return new $y({object:e,collider:n})}_resetPlayer(){var t;null===(t=this._player)||void 0===t||t.reset()}async _updateCollider(){await this.collisionController().updateCollider()}_bind_listeners_to_controls_instance(t){t.addEventListener(ex,(()=>{this.dispatchEventToOutput(ex,{})})),t.addEventListener(nx,(()=>{this.dispatchEventToOutput(nx,{})})),t.addEventListener(ix,(()=>{this.dispatchEventToOutput(ix,{})}))}updateRequired(){return!0}setupControls(t){t.minPolarAngle=this.pv.minPolarAngle,t.maxPolarAngle=this.pv.maxPolarAngle,t.rotateSpeed=this.pv.rotateSpeed}disposeControlsForHtmlElementId(t){const e=this._controls_by_element_id.get(t);e&&(e.dispose(),this._controls_by_element_id.delete(t))}unlockControls(){const t=this._firstControls();t&&t.unlock()}lockControls(){const t=this._firstControls();if(t){if(this._player){this._corePlayerKeyEvents=this._corePlayerKeyEvents||new Zy(this._player),this._corePlayerKeyEvents.addEvents();const e=()=>{var n,i;t&&t.domElement.ownerDocument.pointerLockElement!=t.domElement&&(t.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerlockchange\\\\\\\",e),null===(n=this._corePlayerKeyEvents)||void 0===n||n.removeEvents(),null===(i=this._player)||void 0===i||i.stop())};t.domElement.ownerDocument.addEventListener(\\\\\\\"pointerlockchange\\\\\\\",e)}t.lock()}}_firstControls(){let t;return this._controls_by_element_id.forEach(((e,n)=>{t=t||e})),t}static PARAM_CALLBACK_lockControls(t){t.lockControls()}static PARAM_CALLBACK_unlockControls(t){t.unlockControls()}static PARAM_CALLBACK_updateCollider(t){t._updateCollider()}static PARAM_CALLBACK_updatePlayerParams(t){t._updatePlayerParams()}static PARAM_CALLBACK_resetPlayer(t){t._resetPlayer()}}var ax,lx;ox.INPUT_UPDATE_COLLIDER=\\\\\\\"updateCollider\\\\\\\",function(t){t.TRIGGER=\\\\\\\"trigger\\\\\\\",t.RESET=\\\\\\\"reset\\\\\\\"}(ax||(ax={})),function(t){t.OUT=\\\\\\\"out\\\\\\\",t.LAST=\\\\\\\"last\\\\\\\"}(lx||(lx={}));const cx=new class extends ua{constructor(){super(...arguments),this.maxCount=ha.INTEGER(5,{range:[0,10],rangeLocked:[!0,!1]}),this.reset=ha.BUTTON(null,{callback:t=>{hx.PARAM_CALLBACK_reset(t)}})}};class hx extends Va{constructor(){super(...arguments),this.paramsConfig=cx,this._process_count=0,this._last_dispatched=!1}static type(){return\\\\\\\"limit\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(ax.TRIGGER,Qo.BASE,this.processEventTrigger.bind(this)),new ta(ax.RESET,Qo.BASE,this.process_event_reset.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(lx.OUT,Qo.BASE),new ta(lx.LAST,Qo.BASE)])}processEvent(t){}processEventTrigger(t){this._process_count<this.pv.maxCount?(this._process_count+=1,this.dispatchEventToOutput(lx.OUT,t)):this._last_dispatched||(this._last_dispatched=!0,this.dispatchEventToOutput(lx.LAST,t))}process_event_reset(t){this._process_count=0,this._last_dispatched=!1}static PARAM_CALLBACK_reset(t){t.process_event_reset({})}}const ux=new class extends ua{constructor(){super(...arguments),this.alert=ha.BOOLEAN(0),this.console=ha.BOOLEAN(1)}};class dx extends Va{constructor(){super(...arguments),this.paramsConfig=ux}static type(){return\\\\\\\"message\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(\\\\\\\"trigger\\\\\\\",Qo.BASE,this._process_trigger_event.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(dx.OUTPUT,Qo.BASE)])}trigger_output(t){this.dispatchEventToOutput(dx.OUTPUT,t)}_process_trigger_event(t){this.pv.alert&&alert(t),this.pv.console&&console.log(this.path(),Date.now(),t),this.trigger_output(t)}}dx.OUTPUT=\\\\\\\"output\\\\\\\";const px=100,_x=301,mx=302,fx=303,gx=304,vx=306,yx=307,xx=1e3,bx=1001,wx=1002,Tx=1003,Ax=1004,Mx=1005,Ex=1006,Sx=1007,Cx=1008,Nx=1009,Lx=1012,Ox=1014,Px=1015,Rx=1016,Ix=1020,Fx=1022,Dx=1023,Bx=1026,zx=1027,kx=2300,Ux=2301,Gx=2302,Vx=2400,Hx=2401,jx=2402,Wx=2500,qx=3e3,Xx=3001,Yx=3007,$x=3002,Jx=7680,Zx=35044,Kx=35048,Qx=\\\\\\\"300 es\\\\\\\";class tb{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e<i;e++)n[e].call(this,t);t.target=null}}}let eb=1234567;const nb=Math.PI/180,ib=180/Math.PI,sb=[];for(let t=0;t<256;t++)sb[t]=(t<16?\\\\\\\"0\\\\\\\":\\\\\\\"\\\\\\\")+t.toString(16);const rb=\\\\\\\"undefined\\\\\\\"!=typeof crypto&&\\\\\\\"randomUUID\\\\\\\"in crypto;function ob(){if(rb)return crypto.randomUUID().toUpperCase();const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(sb[255&t]+sb[t>>8&255]+sb[t>>16&255]+sb[t>>24&255]+\\\\\\\"-\\\\\\\"+sb[255&e]+sb[e>>8&255]+\\\\\\\"-\\\\\\\"+sb[e>>16&15|64]+sb[e>>24&255]+\\\\\\\"-\\\\\\\"+sb[63&n|128]+sb[n>>8&255]+\\\\\\\"-\\\\\\\"+sb[n>>16&255]+sb[n>>24&255]+sb[255&i]+sb[i>>8&255]+sb[i>>16&255]+sb[i>>24&255]).toUpperCase()}function ab(t,e,n){return Math.max(e,Math.min(n,t))}function lb(t,e){return(t%e+e)%e}function cb(t,e,n){return(1-n)*t+n*e}function hb(t){return 0==(t&t-1)&&0!==t}function ub(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function db(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var pb=Object.freeze({__proto__:null,DEG2RAD:nb,RAD2DEG:ib,generateUUID:ob,clamp:ab,euclideanModulo:lb,mapLinear:function(t,e,n,i,s){return i+(t-e)*(s-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:cb,damp:function(t,e,n,i){return cb(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(lb(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(eb=t%2147483647),eb=16807*eb%2147483647,(eb-1)/2147483646},degToRad:function(t){return t*nb},radToDeg:function(t){return t*ib},isPowerOfTwo:hb,ceilPowerOfTwo:ub,floorPowerOfTwo:db,setQuaternionFromProperEuler:function(t,e,n,i,s){const r=Math.cos,o=Math.sin,a=r(n/2),l=o(n/2),c=r((e+i)/2),h=o((e+i)/2),u=r((e-i)/2),d=o((e-i)/2),p=r((i-e)/2),_=o((i-e)/2);switch(s){case\\\\\\\"XYX\\\\\\\":t.set(a*h,l*u,l*d,a*c);break;case\\\\\\\"YZY\\\\\\\":t.set(l*d,a*h,l*u,a*c);break;case\\\\\\\"ZXZ\\\\\\\":t.set(l*u,l*d,a*h,a*c);break;case\\\\\\\"XZX\\\\\\\":t.set(a*h,l*_,l*p,a*c);break;case\\\\\\\"YXY\\\\\\\":t.set(l*p,a*h,l*_,a*c);break;case\\\\\\\"ZYZ\\\\\\\":t.set(l*_,l*p,a*h,a*c);break;default:console.warn(\\\\\\\"THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: \\\\\\\"+s)}}});class _b{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),s=this.x-t.x,r=this.y-t.y;return this.x=s*n-r*i+t.x,this.y=s*i+r*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}_b.prototype.isVector2=!0;class mb{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error(\\\\\\\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\\\\\\\")}set(t,e,n,i,s,r,o,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=o,c[3]=e,c[4]=s,c[5]=a,c[6]=n,c[7]=r,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[3],a=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],_=i[0],m=i[3],f=i[6],g=i[1],v=i[4],y=i[7],x=i[2],b=i[5],w=i[8];return s[0]=r*_+o*g+a*x,s[3]=r*m+o*v+a*b,s[6]=r*f+o*y+a*w,s[1]=l*_+c*g+h*x,s[4]=l*m+c*v+h*b,s[7]=l*f+c*y+h*w,s[2]=u*_+d*g+p*x,s[5]=u*m+d*v+p*b,s[8]=u*f+d*y+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],c=t[8];return e*r*c-e*o*l-n*s*c+n*o*a+i*s*l-i*r*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],c=t[8],h=c*r-o*l,u=o*a-c*s,d=l*s-r*a,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const _=1/p;return t[0]=h*_,t[1]=(i*l-c*n)*_,t[2]=(o*n-i*r)*_,t[3]=u*_,t[4]=(c*e-i*a)*_,t[5]=(i*s-o*e)*_,t[6]=d*_,t[7]=(n*a-l*e)*_,t[8]=(r*e-n*s)*_,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,s,r,o){const a=Math.cos(s),l=Math.sin(s);return this.set(n*a,n*l,-n*(a*r+l*o)+r+t,-i*l,i*a,-i*(-l*r+a*o)+o+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,s=i[0],r=i[3],o=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*s+n*a,i[3]=e*r+n*l,i[6]=e*o+n*c,i[1]=-n*s+e*a,i[4]=-n*r+e*l,i[7]=-n*o+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}function fb(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;n<i;++n)t[n]>e&&(e=t[n]);return e}mb.prototype.isMatrix3=!0;Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array;function gb(t){return document.createElementNS(\\\\\\\"http://www.w3.org/1999/xhtml\\\\\\\",t)}let vb;class yb{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if(\\\\\\\"undefined\\\\\\\"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===vb&&(vb=gb(\\\\\\\"canvas\\\\\\\")),vb.width=t.width,vb.height=t.height;const n=vb.getContext(\\\\\\\"2d\\\\\\\");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=vb}return e.width>2048||e.height>2048?(console.warn(\\\\\\\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\\\\\\\",t),e.toDataURL(\\\\\\\"image/jpeg\\\\\\\",.6)):e.toDataURL(\\\\\\\"image/png\\\\\\\")}}let xb=0;class bb extends tb{constructor(t=bb.DEFAULT_IMAGE,e=bb.DEFAULT_MAPPING,n=1001,i=1001,s=1006,r=1008,o=1023,a=1009,l=1,c=3e3){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:xb++}),this.uuid=ob(),this.name=\\\\\\\"\\\\\\\",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=s,this.minFilter=r,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=a,this.offset=new _b(0,0),this.repeat=new _b(1,1),this.center=new _b(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new mb,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:\\\\\\\"Texture\\\\\\\",generator:\\\\\\\"Texture.toJSON\\\\\\\"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=ob()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t<n;t++)i[t].isDataTexture?e.push(wb(i[t].image)):e.push(wb(i[t]))}else e=wb(i);t.images[i.uuid]={uuid:i.uuid,url:e}}n.image=i.uuid}return e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}transformUv(t){if(300!==this.mapping)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case xx:t.x=t.x-Math.floor(t.x);break;case bx:t.x=t.x<0?0:1;break;case wx:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case xx:t.y=t.y-Math.floor(t.y);break;case bx:t.y=t.y<0?0:1;break;case wx:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function wb(t){return\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap?yb.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn(\\\\\\\"THREE.Texture: Unable to serialize Texture.\\\\\\\"),{})}bb.DEFAULT_IMAGE=void 0,bb.DEFAULT_MAPPING=300,bb.prototype.isTexture=!0;class Tb{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,s=this.w,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i+r[12]*s,this.y=r[1]*e+r[5]*n+r[9]*i+r[13]*s,this.z=r[2]*e+r[6]*n+r[10]*i+r[14]*s,this.w=r[3]*e+r[7]*n+r[11]*i+r[15]*s,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,s;const r=.01,o=.1,a=t.elements,l=a[0],c=a[4],h=a[8],u=a[1],d=a[5],p=a[9],_=a[2],m=a[6],f=a[10];if(Math.abs(c-u)<r&&Math.abs(h-_)<r&&Math.abs(p-m)<r){if(Math.abs(c+u)<o&&Math.abs(h+_)<o&&Math.abs(p+m)<o&&Math.abs(l+d+f-3)<o)return this.set(1,0,0,0),this;e=Math.PI;const t=(l+1)/2,a=(d+1)/2,g=(f+1)/2,v=(c+u)/4,y=(h+_)/4,x=(p+m)/4;return t>a&&t>g?t<r?(n=0,i=.707106781,s=.707106781):(n=Math.sqrt(t),i=v/n,s=y/n):a>g?a<r?(n=.707106781,i=0,s=.707106781):(i=Math.sqrt(a),n=v/i,s=x/i):g<r?(n=.707106781,i=.707106781,s=0):(s=Math.sqrt(g),n=y/s,i=x/s),this.set(n,i,s,e),this}let g=Math.sqrt((m-p)*(m-p)+(h-_)*(h-_)+(u-c)*(u-c));return Math.abs(g)<.001&&(g=1),this.x=(m-p)/g,this.y=(h-_)/g,this.z=(u-c)/g,this.w=Math.acos((l+d+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}Tb.prototype.isVector4=!0;class Ab extends tb{constructor(t,e,n={}){super(),this.width=t,this.height=e,this.depth=1,this.scissor=new Tb(0,0,t,e),this.scissorTest=!1,this.viewport=new Tb(0,0,t,e),this.texture=new bb(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.isRenderTargetTexture=!0,this.texture.image={width:t,height:e,depth:1},this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.internalFormat=void 0!==n.internalFormat?n.internalFormat:null,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:Ex,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setTexture(t){t.image={width:this.width,height:this.height,depth:this.depth},this.texture=t}setSize(t,e,n=1){this.width===t&&this.height===e&&this.depth===n||(this.width=t,this.height=e,this.depth=n,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.image={...this.texture.image},this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}Ab.prototype.isWebGLRenderTarget=!0;(class extends Ab{constructor(t,e,n){super(t,e);const i=this.texture;this.texture=[];for(let t=0;t<n;t++)this.texture[t]=i.clone()}setSize(t,e,n=1){if(this.width!==t||this.height!==e||this.depth!==n){this.width=t,this.height=e,this.depth=n;for(let i=0,s=this.texture.length;i<s;i++)this.texture[i].image.width=t,this.texture[i].image.height=e,this.texture[i].image.depth=n;this.dispose()}return this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e),this}copy(t){this.dispose(),this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this.texture.length=0;for(let e=0,n=t.texture.length;e<n;e++)this.texture[e]=t.texture[e].clone();return this}}).prototype.isWebGLMultipleRenderTargets=!0;class Mb extends Ab{constructor(t,e,n){super(t,e,n),this.samples=4}copy(t){return super.copy.call(this,t),this.samples=t.samples,this}}Mb.prototype.isWebGLMultisampleRenderTarget=!0;class Eb{constructor(t=0,e=0,n=0,i=1){this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return console.warn(\\\\\\\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\\\\\\\"),n.slerpQuaternions(t,e,i)}static slerpFlat(t,e,n,i,s,r,o){let a=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=s[r+0],d=s[r+1],p=s[r+2],_=s[r+3];if(0===o)return t[e+0]=a,t[e+1]=l,t[e+2]=c,void(t[e+3]=h);if(1===o)return t[e+0]=u,t[e+1]=d,t[e+2]=p,void(t[e+3]=_);if(h!==_||a!==u||l!==d||c!==p){let t=1-o;const e=a*u+l*d+c*p+h*_,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const s=Math.sqrt(i),r=Math.atan2(s,e*n);t=Math.sin(t*r)/s,o=Math.sin(o*r)/s}const s=o*n;if(a=a*t+u*s,l=l*t+d*s,c=c*t+p*s,h=h*t+_*s,t===1-o){const t=1/Math.sqrt(a*a+l*l+c*c+h*h);a*=t,l*=t,c*=t,h*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,s,r){const o=n[i],a=n[i+1],l=n[i+2],c=n[i+3],h=s[r],u=s[r+1],d=s[r+2],p=s[r+3];return t[e]=o*p+c*h+a*d-l*u,t[e+1]=a*p+c*u+l*h-o*d,t[e+2]=l*p+c*d+o*u-a*h,t[e+3]=c*p-o*h-a*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error(\\\\\\\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\");const n=t._x,i=t._y,s=t._z,r=t._order,o=Math.cos,a=Math.sin,l=o(n/2),c=o(i/2),h=o(s/2),u=a(n/2),d=a(i/2),p=a(s/2);switch(r){case\\\\\\\"XYZ\\\\\\\":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case\\\\\\\"YXZ\\\\\\\":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case\\\\\\\"ZXY\\\\\\\":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case\\\\\\\"ZYX\\\\\\\":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case\\\\\\\"YZX\\\\\\\":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case\\\\\\\"XZY\\\\\\\":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn(\\\\\\\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \\\\\\\"+r)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],s=e[8],r=e[1],o=e[5],a=e[9],l=e[2],c=e[6],h=e[10],u=n+o+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-a)*t,this._y=(s-l)*t,this._z=(r-i)*t}else if(n>o&&n>h){const t=2*Math.sqrt(1+n-o-h);this._w=(c-a)/t,this._x=.25*t,this._y=(i+r)/t,this._z=(s+l)/t}else if(o>h){const t=2*Math.sqrt(1+o-n-h);this._w=(s-l)/t,this._x=(i+r)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+h-n-o);this._w=(r-i)/t,this._x=(s+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<Number.EPSILON?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(ab(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\\\\\\\"),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,s=t._z,r=t._w,o=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+r*o+i*l-s*a,this._y=i*c+r*a+s*o-n*l,this._z=s*c+r*l+n*a-i*o,this._w=r*c-n*o-i*a-s*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,s=this._z,r=this._w;let o=r*t._w+n*t._x+i*t._y+s*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=r,this._x=n,this._y=i,this._z=s,this;const a=1-o*o;if(a<=Number.EPSILON){const t=1-e;return this._w=t*r+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*s+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,o),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=r*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=s*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),s=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(s),n*Math.cos(s),e*Math.sin(i))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}Eb.prototype.isQuaternion=!0;class Sb{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\\\\\\\"),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error(\\\\\\\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\"),this.applyQuaternion(Nb.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Nb.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[3]*n+s[6]*i,this.y=s[1]*e+s[4]*n+s[7]*i,this.z=s[2]*e+s[5]*n+s[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,s=t.elements,r=1/(s[3]*e+s[7]*n+s[11]*i+s[15]);return this.x=(s[0]*e+s[4]*n+s[8]*i+s[12])*r,this.y=(s[1]*e+s[5]*n+s[9]*i+s[13])*r,this.z=(s[2]*e+s[6]*n+s[10]*i+s[14])*r,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,s=t.x,r=t.y,o=t.z,a=t.w,l=a*e+r*i-o*n,c=a*n+o*e-s*i,h=a*i+s*n-r*e,u=-s*e-r*n-o*i;return this.x=l*a+u*-s+c*-o-h*-r,this.y=c*a+u*-r+h*-s-l*-o,this.z=h*a+u*-o+l*-r-c*-s,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i,this.y=s[1]*e+s[5]*n+s[9]*i,this.z=s[2]*e+s[6]*n+s[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\\\\\\\"),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,s=t.z,r=e.x,o=e.y,a=e.z;return this.x=i*a-s*o,this.y=s*r-n*a,this.z=n*o-i*r,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Cb.copy(this).projectOnVector(t),this.sub(Cb)}reflect(t){return this.sub(Cb.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(ab(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}Sb.prototype.isVector3=!0;const Cb=new Sb,Nb=new Eb;class Lb{constructor(t=new Sb(1/0,1/0,1/0),e=new Sb(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,s=-1/0,r=-1/0,o=-1/0;for(let a=0,l=t.length;a<l;a+=3){const l=t[a],c=t[a+1],h=t[a+2];l<e&&(e=l),c<n&&(n=c),h<i&&(i=h),l>s&&(s=l),c>r&&(r=c),h>o&&(o=h)}return this.min.set(e,n,i),this.max.set(s,r,o),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,s=-1/0,r=-1/0,o=-1/0;for(let a=0,l=t.count;a<l;a++){const l=t.getX(a),c=t.getY(a),h=t.getZ(a);l<e&&(e=l),c<n&&(n=c),h<i&&(i=h),l>s&&(s=l),c>r&&(r=c),h>o&&(o=h)}return this.min.set(e,n,i),this.max.set(s,r,o),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=Pb.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t){return this.makeEmpty(),this.expandByObject(t)}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t){t.updateWorldMatrix(!1,!1);const e=t.geometry;void 0!==e&&(null===e.boundingBox&&e.computeBoundingBox(),Rb.copy(e.boundingBox),Rb.applyMatrix4(t.matrixWorld),this.union(Rb));const n=t.children;for(let t=0,e=n.length;t<e;t++)this.expandByObject(n[t]);return this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsSphere(t){return this.clampPoint(t.center,Pb),Pb.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Ub),Gb.subVectors(this.max,Ub),Ib.subVectors(t.a,Ub),Fb.subVectors(t.b,Ub),Db.subVectors(t.c,Ub),Bb.subVectors(Fb,Ib),zb.subVectors(Db,Fb),kb.subVectors(Ib,Db);let e=[0,-Bb.z,Bb.y,0,-zb.z,zb.y,0,-kb.z,kb.y,Bb.z,0,-Bb.x,zb.z,0,-zb.x,kb.z,0,-kb.x,-Bb.y,Bb.x,0,-zb.y,zb.x,0,-kb.y,kb.x,0];return!!jb(e,Ib,Fb,Db,Gb)&&(e=[1,0,0,0,1,0,0,0,1],!!jb(e,Ib,Fb,Db,Gb)&&(Vb.crossVectors(Bb,zb),e=[Vb.x,Vb.y,Vb.z],jb(e,Ib,Fb,Db,Gb)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Pb.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(Pb).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(Ob[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Ob[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Ob[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Ob[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Ob[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Ob[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Ob[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Ob[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Ob)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}Lb.prototype.isBox3=!0;const Ob=[new Sb,new Sb,new Sb,new Sb,new Sb,new Sb,new Sb,new Sb],Pb=new Sb,Rb=new Lb,Ib=new Sb,Fb=new Sb,Db=new Sb,Bb=new Sb,zb=new Sb,kb=new Sb,Ub=new Sb,Gb=new Sb,Vb=new Sb,Hb=new Sb;function jb(t,e,n,i,s){for(let r=0,o=t.length-3;r<=o;r+=3){Hb.fromArray(t,r);const o=s.x*Math.abs(Hb.x)+s.y*Math.abs(Hb.y)+s.z*Math.abs(Hb.z),a=e.dot(Hb),l=n.dot(Hb),c=i.dot(Hb);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>o)return!1}return!0}const Wb=new Lb,qb=new Sb,Xb=new Sb,Yb=new Sb;class $b{constructor(t=new Sb,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):Wb.setFromPoints(t).getCenter(n);let i=0;for(let e=0,s=t.length;e<s;e++)i=Math.max(i,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Yb.subVectors(t,this.center);const e=Yb.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Yb.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return Xb.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(qb.copy(t.center).add(Xb)),this.expandByPoint(qb.copy(t.center).sub(Xb)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Jb=new Sb,Zb=new Sb,Kb=new Sb,Qb=new Sb,tw=new Sb,ew=new Sb,nw=new Sb;class iw{constructor(t=new Sb,e=new Sb(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Jb)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Jb.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Jb.copy(this.direction).multiplyScalar(e).add(this.origin),Jb.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Zb.copy(t).add(e).multiplyScalar(.5),Kb.copy(e).sub(t).normalize(),Qb.copy(this.origin).sub(Zb);const s=.5*t.distanceTo(e),r=-this.direction.dot(Kb),o=Qb.dot(this.direction),a=-Qb.dot(Kb),l=Qb.lengthSq(),c=Math.abs(1-r*r);let h,u,d,p;if(c>0)if(h=r*a-o,u=r*o-a,p=s*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+r*u+2*o)+u*(r*h+u+2*a)+l}else u=s,h=Math.max(0,-(r*u+o)),d=-h*h+u*(u+2*a)+l;else u=-s,h=Math.max(0,-(r*u+o)),d=-h*h+u*(u+2*a)+l;else u<=-p?(h=Math.max(0,-(-r*s+o)),u=h>0?-s:Math.min(Math.max(-s,-a),s),d=-h*h+u*(u+2*a)+l):u<=p?(h=0,u=Math.min(Math.max(-s,-a),s),d=u*(u+2*a)+l):(h=Math.max(0,-(r*s+o)),u=h>0?s:Math.min(Math.max(-s,-a),s),d=-h*h+u*(u+2*a)+l);else u=r>0?-s:s,h=Math.max(0,-(r*u+o)),d=-h*h+u*(u+2*a)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Kb).multiplyScalar(u).add(Zb),d}intersectSphere(t,e){Jb.subVectors(t.center,this.origin);const n=Jb.dot(this.direction),i=Jb.dot(Jb)-n*n,s=t.radius*t.radius;if(i>s)return null;const r=Math.sqrt(s-i),o=n-r,a=n+r;return o<0&&a<0?null:o<0?this.at(a,e):this.at(o,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,s,r,o,a;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(s=(t.min.y-u.y)*c,r=(t.max.y-u.y)*c):(s=(t.max.y-u.y)*c,r=(t.min.y-u.y)*c),n>r||s>i?null:((s>n||n!=n)&&(n=s),(r<i||i!=i)&&(i=r),h>=0?(o=(t.min.z-u.z)*h,a=(t.max.z-u.z)*h):(o=(t.max.z-u.z)*h,a=(t.min.z-u.z)*h),n>a||o>i?null:((o>n||n!=n)&&(n=o),(a<i||i!=i)&&(i=a),i<0?null:this.at(n>=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Jb)}intersectTriangle(t,e,n,i,s){tw.subVectors(e,t),ew.subVectors(n,t),nw.crossVectors(tw,ew);let r,o=this.direction.dot(nw);if(o>0){if(i)return null;r=1}else{if(!(o<0))return null;r=-1,o=-o}Qb.subVectors(this.origin,t);const a=r*this.direction.dot(ew.crossVectors(Qb,ew));if(a<0)return null;const l=r*this.direction.dot(tw.cross(Qb));if(l<0)return null;if(a+l>o)return null;const c=-r*Qb.dot(nw);return c<0?null:this.at(c/o,s)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class sw{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error(\\\\\\\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\\\\\\\")}set(t,e,n,i,s,r,o,a,l,c,h,u,d,p,_,m){const f=this.elements;return f[0]=t,f[4]=e,f[8]=n,f[12]=i,f[1]=s,f[5]=r,f[9]=o,f[13]=a,f[2]=l,f[6]=c,f[10]=h,f[14]=u,f[3]=d,f[7]=p,f[11]=_,f[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new sw).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/rw.setFromMatrixColumn(t,0).length(),s=1/rw.setFromMatrixColumn(t,1).length(),r=1/rw.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*s,e[5]=n[5]*s,e[6]=n[6]*s,e[7]=0,e[8]=n[8]*r,e[9]=n[9]*r,e[10]=n[10]*r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error(\\\\\\\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\\\\\\\");const e=this.elements,n=t.x,i=t.y,s=t.z,r=Math.cos(n),o=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(s),h=Math.sin(s);if(\\\\\\\"XYZ\\\\\\\"===t.order){const t=r*c,n=r*h,i=o*c,s=o*h;e[0]=a*c,e[4]=-a*h,e[8]=l,e[1]=n+i*l,e[5]=t-s*l,e[9]=-o*a,e[2]=s-t*l,e[6]=i+n*l,e[10]=r*a}else if(\\\\\\\"YXZ\\\\\\\"===t.order){const t=a*c,n=a*h,i=l*c,s=l*h;e[0]=t+s*o,e[4]=i*o-n,e[8]=r*l,e[1]=r*h,e[5]=r*c,e[9]=-o,e[2]=n*o-i,e[6]=s+t*o,e[10]=r*a}else if(\\\\\\\"ZXY\\\\\\\"===t.order){const t=a*c,n=a*h,i=l*c,s=l*h;e[0]=t-s*o,e[4]=-r*h,e[8]=i+n*o,e[1]=n+i*o,e[5]=r*c,e[9]=s-t*o,e[2]=-r*l,e[6]=o,e[10]=r*a}else if(\\\\\\\"ZYX\\\\\\\"===t.order){const t=r*c,n=r*h,i=o*c,s=o*h;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+s,e[1]=a*h,e[5]=s*l+t,e[9]=n*l-i,e[2]=-l,e[6]=o*a,e[10]=r*a}else if(\\\\\\\"YZX\\\\\\\"===t.order){const t=r*a,n=r*l,i=o*a,s=o*l;e[0]=a*c,e[4]=s-t*h,e[8]=i*h+n,e[1]=h,e[5]=r*c,e[9]=-o*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-s*h}else if(\\\\\\\"XZY\\\\\\\"===t.order){const t=r*a,n=r*l,i=o*a,s=o*l;e[0]=a*c,e[4]=-h,e[8]=l*c,e[1]=t*h+s,e[5]=r*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=o*c,e[10]=s*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(aw,t,lw)}lookAt(t,e,n){const i=this.elements;return uw.subVectors(t,e),0===uw.lengthSq()&&(uw.z=1),uw.normalize(),cw.crossVectors(n,uw),0===cw.lengthSq()&&(1===Math.abs(n.z)?uw.x+=1e-4:uw.z+=1e-4,uw.normalize(),cw.crossVectors(n,uw)),cw.normalize(),hw.crossVectors(uw,cw),i[0]=cw.x,i[4]=hw.x,i[8]=uw.x,i[1]=cw.y,i[5]=hw.y,i[9]=uw.y,i[2]=cw.z,i[6]=hw.z,i[10]=uw.z,this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\\\\\\\"),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[4],a=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],_=n[6],m=n[10],f=n[14],g=n[3],v=n[7],y=n[11],x=n[15],b=i[0],w=i[4],T=i[8],A=i[12],M=i[1],E=i[5],S=i[9],C=i[13],N=i[2],L=i[6],O=i[10],P=i[14],R=i[3],I=i[7],F=i[11],D=i[15];return s[0]=r*b+o*M+a*N+l*R,s[4]=r*w+o*E+a*L+l*I,s[8]=r*T+o*S+a*O+l*F,s[12]=r*A+o*C+a*P+l*D,s[1]=c*b+h*M+u*N+d*R,s[5]=c*w+h*E+u*L+d*I,s[9]=c*T+h*S+u*O+d*F,s[13]=c*A+h*C+u*P+d*D,s[2]=p*b+_*M+m*N+f*R,s[6]=p*w+_*E+m*L+f*I,s[10]=p*T+_*S+m*O+f*F,s[14]=p*A+_*C+m*P+f*D,s[3]=g*b+v*M+y*N+x*R,s[7]=g*w+v*E+y*L+x*I,s[11]=g*T+v*S+y*O+x*F,s[15]=g*A+v*C+y*P+x*D,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],s=t[12],r=t[1],o=t[5],a=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+s*a*h-i*l*h-s*o*u+n*l*u+i*o*d-n*a*d)+t[7]*(+e*a*d-e*l*u+s*r*u-i*r*d+i*l*c-s*a*c)+t[11]*(+e*l*h-e*o*d-s*r*h+n*r*d+s*o*c-n*l*c)+t[15]*(-i*o*c-e*a*h+e*o*u+i*r*h-n*r*u+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],_=t[13],m=t[14],f=t[15],g=h*m*l-_*u*l+_*a*d-o*m*d-h*a*f+o*u*f,v=p*u*l-c*m*l-p*a*d+r*m*d+c*a*f-r*u*f,y=c*_*l-p*h*l+p*o*d-r*_*d-c*o*f+r*h*f,x=p*h*a-c*_*a-p*o*u+r*_*u+c*o*m-r*h*m,b=e*g+n*v+i*y+s*x;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/b;return t[0]=g*w,t[1]=(_*u*s-h*m*s-_*i*d+n*m*d+h*i*f-n*u*f)*w,t[2]=(o*m*s-_*a*s+_*i*l-n*m*l-o*i*f+n*a*f)*w,t[3]=(h*a*s-o*u*s-h*i*l+n*u*l+o*i*d-n*a*d)*w,t[4]=v*w,t[5]=(c*m*s-p*u*s+p*i*d-e*m*d-c*i*f+e*u*f)*w,t[6]=(p*a*s-r*m*s-p*i*l+e*m*l+r*i*f-e*a*f)*w,t[7]=(r*u*s-c*a*s+c*i*l-e*u*l-r*i*d+e*a*d)*w,t[8]=y*w,t[9]=(p*h*s-c*_*s-p*n*d+e*_*d+c*n*f-e*h*f)*w,t[10]=(r*_*s-p*o*s+p*n*l-e*_*l-r*n*f+e*o*f)*w,t[11]=(c*o*s-r*h*s-c*n*l+e*h*l+r*n*d-e*o*d)*w,t[12]=x*w,t[13]=(c*_*i-p*h*i+p*n*u-e*_*u-c*n*m+e*h*m)*w,t[14]=(p*o*i-r*_*i-p*n*a+e*_*a+r*n*m-e*o*m)*w,t[15]=(r*h*i-c*o*i+c*n*a-e*h*a-r*n*u+e*o*u)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,s=t.z;return e[0]*=n,e[4]*=i,e[8]*=s,e[1]*=n,e[5]*=i,e[9]*=s,e[2]*=n,e[6]*=i,e[10]*=s,e[3]*=n,e[7]*=i,e[11]*=s,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),s=1-n,r=t.x,o=t.y,a=t.z,l=s*r,c=s*o;return this.set(l*r+n,l*o-i*a,l*a+i*o,0,l*o+i*a,c*o+n,c*a-i*r,0,l*a-i*o,c*a+i*r,s*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,s,r){return this.set(1,n,s,0,t,1,r,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,s=e._x,r=e._y,o=e._z,a=e._w,l=s+s,c=r+r,h=o+o,u=s*l,d=s*c,p=s*h,_=r*c,m=r*h,f=o*h,g=a*l,v=a*c,y=a*h,x=n.x,b=n.y,w=n.z;return i[0]=(1-(_+f))*x,i[1]=(d+y)*x,i[2]=(p-v)*x,i[3]=0,i[4]=(d-y)*b,i[5]=(1-(u+f))*b,i[6]=(m+g)*b,i[7]=0,i[8]=(p+v)*w,i[9]=(m-g)*w,i[10]=(1-(u+_))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let s=rw.set(i[0],i[1],i[2]).length();const r=rw.set(i[4],i[5],i[6]).length(),o=rw.set(i[8],i[9],i[10]).length();this.determinant()<0&&(s=-s),t.x=i[12],t.y=i[13],t.z=i[14],ow.copy(this);const a=1/s,l=1/r,c=1/o;return ow.elements[0]*=a,ow.elements[1]*=a,ow.elements[2]*=a,ow.elements[4]*=l,ow.elements[5]*=l,ow.elements[6]*=l,ow.elements[8]*=c,ow.elements[9]*=c,ow.elements[10]*=c,e.setFromRotationMatrix(ow),n.x=s,n.y=r,n.z=o,this}makePerspective(t,e,n,i,s,r){void 0===r&&console.warn(\\\\\\\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\\\\\\\");const o=this.elements,a=2*s/(e-t),l=2*s/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(r+s)/(r-s),d=-2*r*s/(r-s);return o[0]=a,o[4]=0,o[8]=c,o[12]=0,o[1]=0,o[5]=l,o[9]=h,o[13]=0,o[2]=0,o[6]=0,o[10]=u,o[14]=d,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(t,e,n,i,s,r){const o=this.elements,a=1/(e-t),l=1/(n-i),c=1/(r-s),h=(e+t)*a,u=(n+i)*l,d=(r+s)*c;return o[0]=2*a,o[4]=0,o[8]=0,o[12]=-h,o[1]=0,o[5]=2*l,o[9]=0,o[13]=-u,o[2]=0,o[6]=0,o[10]=-2*c,o[14]=-d,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}sw.prototype.isMatrix4=!0;const rw=new Sb,ow=new sw,aw=new Sb(0,0,0),lw=new Sb(1,1,1),cw=new Sb,hw=new Sb,uw=new Sb,dw=new sw,pw=new Eb;class _w{constructor(t=0,e=0,n=0,i=_w.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,s=i[0],r=i[4],o=i[8],a=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e){case\\\\\\\"XYZ\\\\\\\":this._y=Math.asin(ab(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-r,s)):(this._x=Math.atan2(u,l),this._z=0);break;case\\\\\\\"YXZ\\\\\\\":this._x=Math.asin(-ab(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(a,l)):(this._y=Math.atan2(-h,s),this._z=0);break;case\\\\\\\"ZXY\\\\\\\":this._x=Math.asin(ab(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-r,l)):(this._y=0,this._z=Math.atan2(a,s));break;case\\\\\\\"ZYX\\\\\\\":this._y=Math.asin(-ab(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(a,s)):(this._x=0,this._z=Math.atan2(-r,l));break;case\\\\\\\"YZX\\\\\\\":this._z=Math.asin(ab(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,s)):(this._x=0,this._y=Math.atan2(o,d));break;case\\\\\\\"XZY\\\\\\\":this._z=Math.asin(-ab(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn(\\\\\\\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \\\\\\\"+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return dw.makeRotationFromQuaternion(t),this.setFromRotationMatrix(dw,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return pw.setFromEuler(this),this.setFromQuaternion(pw,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new Sb(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}_w.prototype.isEuler=!0,_w.DefaultOrder=\\\\\\\"XYZ\\\\\\\",_w.RotationOrders=[\\\\\\\"XYZ\\\\\\\",\\\\\\\"YZX\\\\\\\",\\\\\\\"ZXY\\\\\\\",\\\\\\\"XZY\\\\\\\",\\\\\\\"YXZ\\\\\\\",\\\\\\\"ZYX\\\\\\\"];class mw{constructor(){this.mask=1}set(t){this.mask=1<<t|0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return 0!=(this.mask&t.mask)}}let fw=0;const gw=new Sb,vw=new Eb,yw=new sw,xw=new Sb,bw=new Sb,ww=new Sb,Tw=new Eb,Aw=new Sb(1,0,0),Mw=new Sb(0,1,0),Ew=new Sb(0,0,1),Sw={type:\\\\\\\"added\\\\\\\"},Cw={type:\\\\\\\"removed\\\\\\\"};class Nw extends tb{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:fw++}),this.uuid=ob(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Object3D\\\\\\\",this.parent=null,this.children=[],this.up=Nw.DefaultUp.clone();const t=new Sb,e=new _w,n=new Eb,i=new Sb(1,1,1);e._onChange((function(){n.setFromEuler(e,!1)})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1)})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new sw},normalMatrix:{value:new mb}}),this.matrix=new sw,this.matrixWorld=new sw,this.matrixAutoUpdate=Nw.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new mw,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return vw.setFromAxisAngle(t,e),this.quaternion.multiply(vw),this}rotateOnWorldAxis(t,e){return vw.setFromAxisAngle(t,e),this.quaternion.premultiply(vw),this}rotateX(t){return this.rotateOnAxis(Aw,t)}rotateY(t){return this.rotateOnAxis(Mw,t)}rotateZ(t){return this.rotateOnAxis(Ew,t)}translateOnAxis(t,e){return gw.copy(t).applyQuaternion(this.quaternion),this.position.add(gw.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(Aw,t)}translateY(t){return this.translateOnAxis(Mw,t)}translateZ(t){return this.translateOnAxis(Ew,t)}localToWorld(t){return t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return t.applyMatrix4(yw.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?xw.copy(t):xw.set(t,e,n);const i=this.parent;this.updateWorldMatrix(!0,!1),bw.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?yw.lookAt(bw,xw,this.up):yw.lookAt(xw,bw,this.up),this.quaternion.setFromRotationMatrix(yw),i&&(yw.extractRotation(i.matrixWorld),vw.setFromRotationMatrix(yw),this.quaternion.premultiply(vw.invert()))}add(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error(\\\\\\\"THREE.Object3D.add: object can't be added as a child of itself.\\\\\\\",t),this):(t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(Sw)):console.error(\\\\\\\"THREE.Object3D.add: object not an instance of THREE.Object3D.\\\\\\\",t),this)}remove(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return-1!==e&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Cw)),this}removeFromParent(){const t=this.parent;return null!==t&&t.remove(this),this}clear(){for(let t=0;t<this.children.length;t++){const e=this.children[t];e.parent=null,e.dispatchEvent(Cw)}return this.children.length=0,this}attach(t){return this.updateWorldMatrix(!0,!1),yw.copy(this.matrixWorld).invert(),null!==t.parent&&(t.parent.updateWorldMatrix(!0,!1),yw.multiply(t.parent.matrixWorld)),t.applyMatrix4(yw),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\\\\\\\"id\\\\\\\",t)}getObjectByName(t){return this.getObjectByProperty(\\\\\\\"name\\\\\\\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n<i;n++){const i=this.children[n].getObjectByProperty(t,e);if(void 0!==i)return i}}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(bw,t,ww),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(bw,Tw,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverse(t)}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;null!==e&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(!0===t&&null!==n&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e<n;e++)t[e].updateWorldMatrix(!1,!0)}}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t,n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{}},n.metadata={version:4.5,type:\\\\\\\"Object\\\\\\\",generator:\\\\\\\"Object3D.toJSON\\\\\\\"});const i={};function s(e,n){return void 0===e[n.uuid]&&(e[n.uuid]=n.toJSON(t)),n.uuid}if(i.uuid=this.uuid,i.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(i.name=this.name),!0===this.castShadow&&(i.castShadow=!0),!0===this.receiveShadow&&(i.receiveShadow=!0),!1===this.visible&&(i.visible=!1),!1===this.frustumCulled&&(i.frustumCulled=!1),0!==this.renderOrder&&(i.renderOrder=this.renderOrder),\\\\\\\"{}\\\\\\\"!==JSON.stringify(this.userData)&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type=\\\\\\\"InstancedMesh\\\\\\\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=s(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e<i;e++){const i=n[e];s(t.shapes,i)}else s(t.shapes,n)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(s(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,i=this.material.length;n<i;n++)e.push(s(t.materials,this.material[n]));i.material=e}else i.material=s(t.materials,this.material);if(this.children.length>0){i.children=[];for(let e=0;e<this.children.length;e++)i.children.push(this.children[e].toJSON(t).object)}if(this.animations.length>0){i.animations=[];for(let e=0;e<this.animations.length;e++){const n=this.animations[e];i.animations.push(s(t.animations,n))}}if(e){const e=r(t.geometries),i=r(t.materials),s=r(t.textures),o=r(t.images),a=r(t.shapes),l=r(t.skeletons),c=r(t.animations);e.length>0&&(n.geometries=e),i.length>0&&(n.materials=i),s.length>0&&(n.textures=s),o.length>0&&(n.images=o),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function r(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e<t.children.length;e++){const n=t.children[e];this.add(n.clone())}return this}}Nw.DefaultUp=new Sb(0,1,0),Nw.DefaultMatrixAutoUpdate=!0,Nw.prototype.isObject3D=!0;const Lw=new Sb,Ow=new Sb,Pw=new Sb,Rw=new Sb,Iw=new Sb,Fw=new Sb,Dw=new Sb,Bw=new Sb,zw=new Sb,kw=new Sb;class Uw{constructor(t=new Sb,e=new Sb,n=new Sb){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),Lw.subVectors(t,e),i.cross(Lw);const s=i.lengthSq();return s>0?i.multiplyScalar(1/Math.sqrt(s)):i.set(0,0,0)}static getBarycoord(t,e,n,i,s){Lw.subVectors(i,e),Ow.subVectors(n,e),Pw.subVectors(t,e);const r=Lw.dot(Lw),o=Lw.dot(Ow),a=Lw.dot(Pw),l=Ow.dot(Ow),c=Ow.dot(Pw),h=r*l-o*o;if(0===h)return s.set(-2,-1,-1);const u=1/h,d=(l*a-o*c)*u,p=(r*c-o*a)*u;return s.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Rw),Rw.x>=0&&Rw.y>=0&&Rw.x+Rw.y<=1}static getUV(t,e,n,i,s,r,o,a){return this.getBarycoord(t,e,n,i,Rw),a.set(0,0),a.addScaledVector(s,Rw.x),a.addScaledVector(r,Rw.y),a.addScaledVector(o,Rw.z),a}static isFrontFacing(t,e,n,i){return Lw.subVectors(n,e),Ow.subVectors(t,e),Lw.cross(Ow).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Lw.subVectors(this.c,this.b),Ow.subVectors(this.a,this.b),.5*Lw.cross(Ow).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Uw.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Uw.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,s){return Uw.getUV(t,this.a,this.b,this.c,e,n,i,s)}containsPoint(t){return Uw.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Uw.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,s=this.c;let r,o;Iw.subVectors(i,n),Fw.subVectors(s,n),Bw.subVectors(t,n);const a=Iw.dot(Bw),l=Fw.dot(Bw);if(a<=0&&l<=0)return e.copy(n);zw.subVectors(t,i);const c=Iw.dot(zw),h=Fw.dot(zw);if(c>=0&&h<=c)return e.copy(i);const u=a*h-c*l;if(u<=0&&a>=0&&c<=0)return r=a/(a-c),e.copy(n).addScaledVector(Iw,r);kw.subVectors(t,s);const d=Iw.dot(kw),p=Fw.dot(kw);if(p>=0&&d<=p)return e.copy(s);const _=d*l-a*p;if(_<=0&&l>=0&&p<=0)return o=l/(l-p),e.copy(n).addScaledVector(Fw,o);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return Dw.subVectors(s,i),o=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Dw,o);const f=1/(m+_+u);return r=_*f,o=u*f,e.copy(n).addScaledVector(Iw,r).addScaledVector(Fw,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let Gw=0;class Vw extends tb{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:Gw++}),this.uuid=ob(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Material\\\\\\\",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.format=Dx,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=px,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=Jx,this.stencilZFail=Jx,this.stencilZPass=Jx,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(\\\\\\\"THREE.Material: '\\\\\\\"+e+\\\\\\\"' parameter is undefined.\\\\\\\");continue}if(\\\\\\\"shading\\\\\\\"===e){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\"),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": '\\\\\\\"+e+\\\\\\\"' is not a property of this material.\\\\\\\")}}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:\\\\\\\"Material\\\\\\\",generator:\\\\\\\"Material.toJSON\\\\\\\"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenTint&&this.sheenTint.isColor&&(n.sheenTint=this.sheenTint.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularTint&&this.specularTint.isColor&&(n.specularTint=this.specularTint.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularTintMap&&this.specularTintMap.isTexture&&(n.specularTintMap=this.specularTintMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationTint&&(n.attenuationTint=this.attenuationTint.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.format!==Dx&&(n.format=this.format),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),\\\\\\\"round\\\\\\\"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),\\\\\\\"round\\\\\\\"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),\\\\\\\"{}\\\\\\\"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),s=i(t.images);e.length>0&&(n.textures=e),s.length>0&&(n.images=s)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.format=t.format,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}set needsUpdate(t){!0===t&&this.version++}}Vw.prototype.isMaterial=!0;const Hw={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},jw={h:0,s:0,l:0},Ww={h:0,s:0,l:0};function qw(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Xw(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Yw(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class $w{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):\\\\\\\"number\\\\\\\"==typeof t?this.setHex(t):\\\\\\\"string\\\\\\\"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=lb(t,1),e=ab(e,0,1),n=ab(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,s=2*n-i;this.r=qw(s,i,t+1/3),this.g=qw(s,i,t),this.b=qw(s,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn(\\\\\\\"THREE.Color: Alpha component of \\\\\\\"+t+\\\\\\\" will be ignored.\\\\\\\")}let n;if(n=/^((?:rgb|hsl)a?)\\\\(([^\\\\)]*)\\\\)/.exec(t)){let t;const i=n[1],s=n[2];switch(i){case\\\\\\\"rgb\\\\\\\":case\\\\\\\"rgba\\\\\\\":if(t=/^\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(s))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(s))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case\\\\\\\"hsl\\\\\\\":case\\\\\\\"hsla\\\\\\\":if(t=/^\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(s)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,s=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,s)}}}else if(n=/^\\\\#([A-Fa-f\\\\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Hw[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn(\\\\\\\"THREE.Color: Unknown color \\\\\\\"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Xw(t.r),this.g=Xw(t.g),this.b=Xw(t.b),this}copyLinearToSRGB(t){return this.r=Yw(t.r),this.g=Yw(t.g),this.b=Yw(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return(\\\\\\\"000000\\\\\\\"+this.getHex().toString(16)).slice(-6)}getHSL(t){const e=this.r,n=this.g,i=this.b,s=Math.max(e,n,i),r=Math.min(e,n,i);let o,a;const l=(r+s)/2;if(r===s)o=0,a=0;else{const t=s-r;switch(a=l<=.5?t/(s+r):t/(2-s-r),s){case e:o=(n-i)/t+(n<i?6:0);break;case n:o=(i-e)/t+2;break;case i:o=(e-n)/t+4}o/=6}return t.h=o,t.s=a,t.l=l,t}getStyle(){return\\\\\\\"rgb(\\\\\\\"+(255*this.r|0)+\\\\\\\",\\\\\\\"+(255*this.g|0)+\\\\\\\",\\\\\\\"+(255*this.b|0)+\\\\\\\")\\\\\\\"}offsetHSL(t,e,n){return this.getHSL(jw),jw.h+=t,jw.s+=e,jw.l+=n,this.setHSL(jw.h,jw.s,jw.l),this}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(jw),t.getHSL(Ww);const n=cb(jw.h,Ww.h,e),i=cb(jw.s,Ww.s,e),s=cb(jw.l,Ww.l,e);return this.setHSL(n,i,s),this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),!0===t.normalized&&(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}}$w.NAMES=Hw,$w.prototype.isColor=!0,$w.prototype.r=1,$w.prototype.g=1,$w.prototype.b=1;class Jw extends Vw{constructor(t){super(),this.type=\\\\\\\"MeshBasicMaterial\\\\\\\",this.color=new $w(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}Jw.prototype.isMeshBasicMaterial=!0;const Zw=new Sb,Kw=new _b;class Qw{constructor(t,e,n){if(Array.isArray(t))throw new TypeError(\\\\\\\"THREE.BufferAttribute: array should be a Typed Array.\\\\\\\");this.name=\\\\\\\"\\\\\\\",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=Zx,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,s=this.itemSize;i<s;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}copyColorsArray(t){const e=this.array;let n=0;for(let i=0,s=t.length;i<s;i++){let s=t[i];void 0===s&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyColorsArray(): color is undefined\\\\\\\",i),s=new $w),e[n++]=s.r,e[n++]=s.g,e[n++]=s.b}return this}copyVector2sArray(t){const e=this.array;let n=0;for(let i=0,s=t.length;i<s;i++){let s=t[i];void 0===s&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\\\\\\\",i),s=new _b),e[n++]=s.x,e[n++]=s.y}return this}copyVector3sArray(t){const e=this.array;let n=0;for(let i=0,s=t.length;i<s;i++){let s=t[i];void 0===s&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\\\\\\\",i),s=new Sb),e[n++]=s.x,e[n++]=s.y,e[n++]=s.z}return this}copyVector4sArray(t){const e=this.array;let n=0;for(let i=0,s=t.length;i<s;i++){let s=t[i];void 0===s&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\\\\\\\",i),s=new Tb),e[n++]=s.x,e[n++]=s.y,e[n++]=s.z,e[n++]=s.w}return this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e<n;e++)Kw.fromBufferAttribute(this,e),Kw.applyMatrix3(t),this.setXY(e,Kw.x,Kw.y);else if(3===this.itemSize)for(let e=0,n=this.count;e<n;e++)Zw.fromBufferAttribute(this,e),Zw.applyMatrix3(t),this.setXYZ(e,Zw.x,Zw.y,Zw.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)Zw.x=this.getX(e),Zw.y=this.getY(e),Zw.z=this.getZ(e),Zw.applyMatrix4(t),this.setXYZ(e,Zw.x,Zw.y,Zw.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)Zw.x=this.getX(e),Zw.y=this.getY(e),Zw.z=this.getZ(e),Zw.applyNormalMatrix(t),this.setXYZ(e,Zw.x,Zw.y,Zw.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)Zw.x=this.getX(e),Zw.y=this.getY(e),Zw.z=this.getZ(e),Zw.transformDirection(t),this.setXYZ(e,Zw.x,Zw.y,Zw.z);return this}set(t,e=0){return this.array.set(t,e),this}getX(t){return this.array[t*this.itemSize]}setX(t,e){return this.array[t*this.itemSize]=e,this}getY(t){return this.array[t*this.itemSize+1]}setY(t,e){return this.array[t*this.itemSize+1]=e,this}getZ(t){return this.array[t*this.itemSize+2]}setZ(t,e){return this.array[t*this.itemSize+2]=e,this}getW(t){return this.array[t*this.itemSize+3]}setW(t,e){return this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,s){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=s,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),this.usage!==Zx&&(t.usage=this.usage),0===this.updateRange.offset&&-1===this.updateRange.count||(t.updateRange=this.updateRange),t}}Qw.prototype.isBufferAttribute=!0;class tT extends Qw{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class eT extends Qw{constructor(t,e,n){super(new Uint32Array(t),e,n)}}(class extends Qw{constructor(t,e,n){super(new Uint16Array(t),e,n)}}).prototype.isFloat16BufferAttribute=!0;class nT extends Qw{constructor(t,e,n){super(new Float32Array(t),e,n)}}let iT=0;const sT=new sw,rT=new Nw,oT=new Sb,aT=new Lb,lT=new Lb,cT=new Sb;class hT extends tb{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:iT++}),this.uuid=ob(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"BufferGeometry\\\\\\\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(fb(t)>65535?eT:tT)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new mb).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return sT.makeRotationFromQuaternion(t),this.applyMatrix4(sT),this}rotateX(t){return sT.makeRotationX(t),this.applyMatrix4(sT),this}rotateY(t){return sT.makeRotationY(t),this.applyMatrix4(sT),this}rotateZ(t){return sT.makeRotationZ(t),this.applyMatrix4(sT),this}translate(t,e,n){return sT.makeTranslation(t,e,n),this.applyMatrix4(sT),this}scale(t,e,n){return sT.makeScale(t,e,n),this.applyMatrix4(sT),this}lookAt(t){return rT.lookAt(t),rT.updateMatrix(),this.applyMatrix4(rT.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(oT).negate(),this.translate(oT.x,oT.y,oT.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n<i;n++){const i=t[n];e.push(i.x,i.y,i.z||0)}return this.setAttribute(\\\\\\\"position\\\\\\\",new nT(e,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Lb);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".',this),void this.boundingBox.set(new Sb(-1/0,-1/0,-1/0),new Sb(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];aT.setFromBufferAttribute(n),this.morphTargetsRelative?(cT.addVectors(this.boundingBox.min,aT.min),this.boundingBox.expandByPoint(cT),cT.addVectors(this.boundingBox.max,aT.max),this.boundingBox.expandByPoint(cT)):(this.boundingBox.expandByPoint(aT.min),this.boundingBox.expandByPoint(aT.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \\\\\\\"position\\\\\\\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new $b);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".',this),void this.boundingSphere.set(new Sb,1/0);if(t){const n=this.boundingSphere.center;if(aT.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];lT.setFromBufferAttribute(n),this.morphTargetsRelative?(cT.addVectors(aT.min,lT.min),aT.expandByPoint(cT),cT.addVectors(aT.max,lT.max),aT.expandByPoint(cT)):(aT.expandByPoint(lT.min),aT.expandByPoint(lT.max))}aT.getCenter(n);let i=0;for(let e=0,s=t.count;e<s;e++)cT.fromBufferAttribute(t,e),i=Math.max(i,n.distanceToSquared(cT));if(e)for(let s=0,r=e.length;s<r;s++){const r=e[s],o=this.morphTargetsRelative;for(let e=0,s=r.count;e<s;e++)cT.fromBufferAttribute(r,e),o&&(oT.fromBufferAttribute(t,e),cT.add(oT)),i=Math.max(i,n.distanceToSquared(cT))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \\\\\\\"position\\\\\\\" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error(\\\\\\\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\\\\\\\");const n=t.array,i=e.position.array,s=e.normal.array,r=e.uv.array,o=i.length/3;void 0===e.tangent&&this.setAttribute(\\\\\\\"tangent\\\\\\\",new Qw(new Float32Array(4*o),4));const a=e.tangent.array,l=[],c=[];for(let t=0;t<o;t++)l[t]=new Sb,c[t]=new Sb;const h=new Sb,u=new Sb,d=new Sb,p=new _b,_=new _b,m=new _b,f=new Sb,g=new Sb;function v(t,e,n){h.fromArray(i,3*t),u.fromArray(i,3*e),d.fromArray(i,3*n),p.fromArray(r,2*t),_.fromArray(r,2*e),m.fromArray(r,2*n),u.sub(h),d.sub(h),_.sub(p),m.sub(p);const s=1/(_.x*m.y-m.x*_.y);isFinite(s)&&(f.copy(u).multiplyScalar(m.y).addScaledVector(d,-_.y).multiplyScalar(s),g.copy(d).multiplyScalar(_.x).addScaledVector(u,-m.x).multiplyScalar(s),l[t].add(f),l[e].add(f),l[n].add(f),c[t].add(g),c[e].add(g),c[n].add(g))}let y=this.groups;0===y.length&&(y=[{start:0,count:n.length}]);for(let t=0,e=y.length;t<e;++t){const e=y[t],i=e.start;for(let t=i,s=i+e.count;t<s;t+=3)v(n[t+0],n[t+1],n[t+2])}const x=new Sb,b=new Sb,w=new Sb,T=new Sb;function A(t){w.fromArray(s,3*t),T.copy(w);const e=l[t];x.copy(e),x.sub(w.multiplyScalar(w.dot(e))).normalize(),b.crossVectors(T,e);const n=b.dot(c[t])<0?-1:1;a[4*t]=x.x,a[4*t+1]=x.y,a[4*t+2]=x.z,a[4*t+3]=n}for(let t=0,e=y.length;t<e;++t){const e=y[t],i=e.start;for(let t=i,s=i+e.count;t<s;t+=3)A(n[t+0]),A(n[t+1]),A(n[t+2])}}computeVertexNormals(){const t=this.index,e=this.getAttribute(\\\\\\\"position\\\\\\\");if(void 0!==e){let n=this.getAttribute(\\\\\\\"normal\\\\\\\");if(void 0===n)n=new Qw(new Float32Array(3*e.count),3),this.setAttribute(\\\\\\\"normal\\\\\\\",n);else for(let t=0,e=n.count;t<e;t++)n.setXYZ(t,0,0,0);const i=new Sb,s=new Sb,r=new Sb,o=new Sb,a=new Sb,l=new Sb,c=new Sb,h=new Sb;if(t)for(let u=0,d=t.count;u<d;u+=3){const d=t.getX(u+0),p=t.getX(u+1),_=t.getX(u+2);i.fromBufferAttribute(e,d),s.fromBufferAttribute(e,p),r.fromBufferAttribute(e,_),c.subVectors(r,s),h.subVectors(i,s),c.cross(h),o.fromBufferAttribute(n,d),a.fromBufferAttribute(n,p),l.fromBufferAttribute(n,_),o.add(c),a.add(c),l.add(c),n.setXYZ(d,o.x,o.y,o.z),n.setXYZ(p,a.x,a.y,a.z),n.setXYZ(_,l.x,l.y,l.z)}else for(let t=0,o=e.count;t<o;t+=3)i.fromBufferAttribute(e,t+0),s.fromBufferAttribute(e,t+1),r.fromBufferAttribute(e,t+2),c.subVectors(r,s),h.subVectors(i,s),c.cross(h),n.setXYZ(t+0,c.x,c.y,c.z),n.setXYZ(t+1,c.x,c.y,c.z),n.setXYZ(t+2,c.x,c.y,c.z);this.normalizeNormals(),n.needsUpdate=!0}}merge(t,e){if(!t||!t.isBufferGeometry)return void console.error(\\\\\\\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\\\\\\\",t);void 0===e&&(e=0,console.warn(\\\\\\\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\\\\\\\"));const n=this.attributes;for(const i in n){if(void 0===t.attributes[i])continue;const s=n[i].array,r=t.attributes[i],o=r.array,a=r.itemSize*e,l=Math.min(o.length,s.length-a);for(let t=0,e=a;t<l;t++,e++)s[e]=o[t]}return this}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)cT.fromBufferAttribute(t,e),cT.normalize(),t.setXYZ(e,cT.x,cT.y,cT.z)}toNonIndexed(){function t(t,e){const n=t.array,i=t.itemSize,s=t.normalized,r=new n.constructor(e.length*i);let o=0,a=0;for(let s=0,l=e.length;s<l;s++){o=t.isInterleavedBufferAttribute?e[s]*t.data.stride+t.offset:e[s]*i;for(let t=0;t<i;t++)r[a++]=n[o++]}return new Qw(r,i,s)}if(null===this.index)return console.warn(\\\\\\\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\\\\\\\"),this;const e=new hT,n=this.index.array,i=this.attributes;for(const s in i){const r=t(i[s],n);e.setAttribute(s,r)}const s=this.morphAttributes;for(const i in s){const r=[],o=s[i];for(let e=0,i=o.length;e<i;e++){const i=t(o[e],n);r.push(i)}e.morphAttributes[i]=r}e.morphTargetsRelative=this.morphTargetsRelative;const r=this.groups;for(let t=0,n=r.length;t<n;t++){const n=r[t];e.addGroup(n.start,n.count,n.materialIndex)}return e}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"BufferGeometry\\\\\\\",generator:\\\\\\\"BufferGeometry.toJSON\\\\\\\"}};if(t.uuid=this.uuid,t.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let s=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],r=[];for(let e=0,i=n.length;e<i;e++){const i=n[e];r.push(i.toJSON(t.data))}r.length>0&&(i[e]=r,s=!0)}s&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const r=this.groups;r.length>0&&(t.data.groups=JSON.parse(JSON.stringify(r)));const o=this.boundingSphere;return null!==o&&(t.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const s=t.morphAttributes;for(const t in s){const n=[],i=s[t];for(let t=0,s=i.length;t<s;t++)n.push(i[t].clone(e));this.morphAttributes[t]=n}this.morphTargetsRelative=t.morphTargetsRelative;const r=t.groups;for(let t=0,e=r.length;t<e;t++){const e=r[t];this.addGroup(e.start,e.count,e.materialIndex)}const o=t.boundingBox;null!==o&&(this.boundingBox=o.clone());const a=t.boundingSphere;return null!==a&&(this.boundingSphere=a.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,void 0!==t.parameters&&(this.parameters=Object.assign({},t.parameters)),this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}hT.prototype.isBufferGeometry=!0;const uT=new sw,dT=new iw,pT=new $b,_T=new Sb,mT=new Sb,fT=new Sb,gT=new Sb,vT=new Sb,yT=new Sb,xT=new Sb,bT=new Sb,wT=new Sb,TT=new _b,AT=new _b,MT=new _b,ET=new Sb,ST=new Sb;class CT extends Nw{constructor(t=new hT,e=new Jw){super(),this.type=\\\\\\\"Mesh\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}raycast(t,e){const n=this.geometry,i=this.material,s=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),pT.copy(n.boundingSphere),pT.applyMatrix4(s),!1===t.ray.intersectsSphere(pT))return;if(uT.copy(s).invert(),dT.copy(t.ray).applyMatrix4(uT),null!==n.boundingBox&&!1===dT.intersectsBox(n.boundingBox))return;let r;if(n.isBufferGeometry){const s=n.index,o=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==s)if(Array.isArray(i))for(let n=0,p=u.length;n<p;n++){const p=u[n],_=i[p.materialIndex];for(let n=Math.max(p.start,d.start),i=Math.min(s.count,Math.min(p.start+p.count,d.start+d.count));n<i;n+=3){const i=s.getX(n),u=s.getX(n+1),d=s.getX(n+2);r=NT(this,_,t,dT,o,a,l,c,h,i,u,d),r&&(r.faceIndex=Math.floor(n/3),r.face.materialIndex=p.materialIndex,e.push(r))}}else{for(let n=Math.max(0,d.start),u=Math.min(s.count,d.start+d.count);n<u;n+=3){const u=s.getX(n),d=s.getX(n+1),p=s.getX(n+2);r=NT(this,i,t,dT,o,a,l,c,h,u,d,p),r&&(r.faceIndex=Math.floor(n/3),e.push(r))}}else if(void 0!==o)if(Array.isArray(i))for(let n=0,s=u.length;n<s;n++){const s=u[n],p=i[s.materialIndex];for(let n=Math.max(s.start,d.start),i=Math.min(o.count,Math.min(s.start+s.count,d.start+d.count));n<i;n+=3){r=NT(this,p,t,dT,o,a,l,c,h,n,n+1,n+2),r&&(r.faceIndex=Math.floor(n/3),r.face.materialIndex=s.materialIndex,e.push(r))}}else{for(let n=Math.max(0,d.start),s=Math.min(o.count,d.start+d.count);n<s;n+=3){r=NT(this,i,t,dT,o,a,l,c,h,n,n+1,n+2),r&&(r.faceIndex=Math.floor(n/3),e.push(r))}}}else n.isGeometry&&console.error(\\\\\\\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}function NT(t,e,n,i,s,r,o,a,l,c,h,u){_T.fromBufferAttribute(s,c),mT.fromBufferAttribute(s,h),fT.fromBufferAttribute(s,u);const d=t.morphTargetInfluences;if(r&&d){xT.set(0,0,0),bT.set(0,0,0),wT.set(0,0,0);for(let t=0,e=r.length;t<e;t++){const e=d[t],n=r[t];0!==e&&(gT.fromBufferAttribute(n,c),vT.fromBufferAttribute(n,h),yT.fromBufferAttribute(n,u),o?(xT.addScaledVector(gT,e),bT.addScaledVector(vT,e),wT.addScaledVector(yT,e)):(xT.addScaledVector(gT.sub(_T),e),bT.addScaledVector(vT.sub(mT),e),wT.addScaledVector(yT.sub(fT),e)))}_T.add(xT),mT.add(bT),fT.add(wT)}t.isSkinnedMesh&&(t.boneTransform(c,_T),t.boneTransform(h,mT),t.boneTransform(u,fT));const p=function(t,e,n,i,s,r,o,a){let l;if(l=1===e.side?i.intersectTriangle(o,r,s,!0,a):i.intersectTriangle(s,r,o,2!==e.side,a),null===l)return null;ST.copy(a),ST.applyMatrix4(t.matrixWorld);const c=n.ray.origin.distanceTo(ST);return c<n.near||c>n.far?null:{distance:c,point:ST.clone(),object:t}}(t,e,n,i,_T,mT,fT,ET);if(p){a&&(TT.fromBufferAttribute(a,c),AT.fromBufferAttribute(a,h),MT.fromBufferAttribute(a,u),p.uv=Uw.getUV(ET,_T,mT,fT,TT,AT,MT,new _b)),l&&(TT.fromBufferAttribute(l,c),AT.fromBufferAttribute(l,h),MT.fromBufferAttribute(l,u),p.uv2=Uw.getUV(ET,_T,mT,fT,TT,AT,MT,new _b));const t={a:c,b:h,c:u,normal:new Sb,materialIndex:0};Uw.getNormal(_T,mT,fT,t.normal),p.face=t}return p}CT.prototype.isMesh=!0;class LT extends hT{constructor(t=1,e=1,n=1,i=1,s=1,r=1){super(),this.type=\\\\\\\"BoxGeometry\\\\\\\",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:s,depthSegments:r};const o=this;i=Math.floor(i),s=Math.floor(s),r=Math.floor(r);const a=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,s,r,p,_,m,f,g){const v=r/m,y=p/f,x=r/2,b=p/2,w=_/2,T=m+1,A=f+1;let M=0,E=0;const S=new Sb;for(let r=0;r<A;r++){const o=r*y-b;for(let a=0;a<T;a++){const u=a*v-x;S[t]=u*i,S[e]=o*s,S[n]=w,l.push(S.x,S.y,S.z),S[t]=0,S[e]=0,S[n]=_>0?1:-1,c.push(S.x,S.y,S.z),h.push(a/m),h.push(1-r/f),M+=1}}for(let t=0;t<f;t++)for(let e=0;e<m;e++){const n=u+e+T*t,i=u+e+T*(t+1),s=u+(e+1)+T*(t+1),r=u+(e+1)+T*t;a.push(n,i,r),a.push(i,s,r),E+=6}o.addGroup(d,E,g),d+=E,u+=M}p(\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",-1,-1,n,e,t,r,s,0),p(\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",1,-1,n,e,-t,r,s,1),p(\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",1,1,t,n,e,i,r,2),p(\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",1,-1,t,n,-e,i,r,3),p(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",1,-1,t,e,n,i,s,4),p(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",-1,-1,t,e,-n,i,s,5),this.setIndex(a),this.setAttribute(\\\\\\\"position\\\\\\\",new nT(l,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new nT(c,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new nT(h,2))}static fromJSON(t){return new LT(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function OT(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const s=t[n][i];s&&(s.isColor||s.isMatrix3||s.isMatrix4||s.isVector2||s.isVector3||s.isVector4||s.isTexture||s.isQuaternion)?e[n][i]=s.clone():Array.isArray(s)?e[n][i]=s.slice():e[n][i]=s}}return e}function PT(t){const e={};for(let n=0;n<t.length;n++){const i=OT(t[n]);for(const t in i)e[t]=i[t]}return e}const RT={clone:OT,merge:PT};class IT extends Vw{constructor(t){super(),this.type=\\\\\\\"ShaderMaterial\\\\\\\",this.defines={},this.uniforms={},this.vertexShader=\\\\\\\"void main() {\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n}\\\\\\\",this.fragmentShader=\\\\\\\"void main() {\\\\n\\\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\\\n}\\\\\\\",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==t&&(void 0!==t.attributes&&console.error(\\\\\\\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\\\\\\\"),this.setValues(t))}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=OT(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const i=this.uniforms[n].value;i&&i.isTexture?e.uniforms[n]={type:\\\\\\\"t\\\\\\\",value:i.toJSON(t).uuid}:i&&i.isColor?e.uniforms[n]={type:\\\\\\\"c\\\\\\\",value:i.getHex()}:i&&i.isVector2?e.uniforms[n]={type:\\\\\\\"v2\\\\\\\",value:i.toArray()}:i&&i.isVector3?e.uniforms[n]={type:\\\\\\\"v3\\\\\\\",value:i.toArray()}:i&&i.isVector4?e.uniforms[n]={type:\\\\\\\"v4\\\\\\\",value:i.toArray()}:i&&i.isMatrix3?e.uniforms[n]={type:\\\\\\\"m3\\\\\\\",value:i.toArray()}:i&&i.isMatrix4?e.uniforms[n]={type:\\\\\\\"m4\\\\\\\",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}IT.prototype.isShaderMaterial=!0;class FT extends Nw{constructor(){super(),this.type=\\\\\\\"Camera\\\\\\\",this.matrixWorldInverse=new sw,this.projectionMatrix=new sw,this.projectionMatrixInverse=new sw}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}FT.prototype.isCamera=!0;class DT extends FT{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type=\\\\\\\"PerspectiveCamera\\\\\\\",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*ib*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*nb*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*ib*Math.atan(Math.tan(.5*nb*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,s,r){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=s,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*nb*this.fov)/this.zoom,n=2*e,i=this.aspect*n,s=-.5*i;const r=this.view;if(null!==this.view&&this.view.enabled){const t=r.fullWidth,o=r.fullHeight;s+=r.offsetX*i/t,e-=r.offsetY*n/o,i*=r.width/t,n*=r.height/o}const o=this.filmOffset;0!==o&&(s+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}DT.prototype.isPerspectiveCamera=!0;const BT=90;class zT extends Nw{constructor(t,e,n){if(super(),this.type=\\\\\\\"CubeCamera\\\\\\\",!0!==n.isWebGLCubeRenderTarget)return void console.error(\\\\\\\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\\\\\\\");this.renderTarget=n;const i=new DT(BT,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new Sb(1,0,0)),this.add(i);const s=new DT(BT,1,t,e);s.layers=this.layers,s.up.set(0,-1,0),s.lookAt(new Sb(-1,0,0)),this.add(s);const r=new DT(BT,1,t,e);r.layers=this.layers,r.up.set(0,0,1),r.lookAt(new Sb(0,1,0)),this.add(r);const o=new DT(BT,1,t,e);o.layers=this.layers,o.up.set(0,0,-1),o.lookAt(new Sb(0,-1,0)),this.add(o);const a=new DT(BT,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new Sb(0,0,1)),this.add(a);const l=new DT(BT,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new Sb(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,s,r,o,a,l]=this.children,c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,s),t.setRenderTarget(n,2),t.render(e,r),t.setRenderTarget(n,3),t.render(e,o),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}class kT extends bb{constructor(t,e,n,i,s,r,o,a,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:_x,n,i,s,r,o,a,l,c),this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}kT.prototype.isCubeTexture=!0;class UT extends Ab{constructor(t,e,n){Number.isInteger(e)&&(console.warn(\\\\\\\"THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )\\\\\\\"),e=n),super(t,t,e),e=e||{},this.texture=new kT(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:Ex,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=Dx,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec3 vWorldDirection;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <begin_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <project_vertex>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D tEquirect;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec3 vWorldDirection;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec3 direction = normalize( vWorldDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 sampleUV = equirectUv( direction );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\\\\"},i=new LT(5,5,5),s=new IT({name:\\\\\\\"CubemapFromEquirect\\\\\\\",uniforms:OT(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});s.uniforms.tEquirect.value=e;const r=new CT(i,s),o=e.minFilter;e.minFilter===Cx&&(e.minFilter=Ex);return new zT(1,10,this).update(t,r),e.minFilter=o,r.geometry.dispose(),r.material.dispose(),this}clear(t,e,n,i){const s=t.getRenderTarget();for(let s=0;s<6;s++)t.setRenderTarget(this,s),t.clear(e,n,i);t.setRenderTarget(s)}}UT.prototype.isWebGLCubeRenderTarget=!0;const GT=new Sb,VT=new Sb,HT=new mb;class jT{constructor(t=new Sb(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=GT.subVectors(n,e).cross(VT.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(GT),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const s=-(t.start.dot(this.normal)+this.constant)/i;return s<0||s>1?null:e.copy(n).multiplyScalar(s).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||HT.getNormalMatrix(t),i=this.coplanarPoint(GT).applyMatrix4(t),s=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(s),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}jT.prototype.isPlane=!0;const WT=new $b,qT=new Sb;class XT{constructor(t=new jT,e=new jT,n=new jT,i=new jT,s=new jT,r=new jT){this.planes=[t,e,n,i,s,r]}set(t,e,n,i,s,r){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(i),o[4].copy(s),o[5].copy(r),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],s=n[1],r=n[2],o=n[3],a=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],_=n[11],m=n[12],f=n[13],g=n[14],v=n[15];return e[0].setComponents(o-i,h-a,_-u,v-m).normalize(),e[1].setComponents(o+i,h+a,_+u,v+m).normalize(),e[2].setComponents(o+s,h+l,_+d,v+f).normalize(),e[3].setComponents(o-s,h-l,_-d,v-f).normalize(),e[4].setComponents(o-r,h-c,_-p,v-g).normalize(),e[5].setComponents(o+r,h+c,_+p,v+g).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),WT.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(WT)}intersectsSprite(t){return WT.center.set(0,0,0),WT.radius=.7071067811865476,WT.applyMatrix4(t.matrixWorld),this.intersectsSphere(WT)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)<i)return!1}return!0}intersectsBox(t){const e=this.planes;for(let n=0;n<6;n++){const i=e[n];if(qT.x=i.normal.x>0?t.max.x:t.min.x,qT.y=i.normal.y>0?t.max.y:t.min.y,qT.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(qT)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function YT(){let t=null,e=!1,n=null,i=null;function s(e,r){n(e,r),i=t.requestAnimationFrame(s)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(s),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function $T(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,s){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version<e.version)&&i.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute&&(e=e.data);const r=i.get(e);void 0===r?i.set(e,function(e,i){const s=e.array,r=e.usage,o=t.createBuffer();t.bindBuffer(i,o),t.bufferData(i,s,r),e.onUploadCallback();let a=5126;return s instanceof Float32Array?a=5126:s instanceof Float64Array?console.warn(\\\\\\\"THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.\\\\\\\"):s instanceof Uint16Array?e.isFloat16BufferAttribute?n?a=5131:console.warn(\\\\\\\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\\\\\\\"):a=5123:s instanceof Int16Array?a=5122:s instanceof Uint32Array?a=5125:s instanceof Int32Array?a=5124:s instanceof Int8Array?a=5120:(s instanceof Uint8Array||s instanceof Uint8ClampedArray)&&(a=5121),{buffer:o,type:a,bytesPerElement:s.BYTES_PER_ELEMENT,version:e.version}}(e,s)):r.version<e.version&&(!function(e,i,s){const r=i.array,o=i.updateRange;t.bindBuffer(s,e),-1===o.count?t.bufferSubData(s,0,r):(n?t.bufferSubData(s,o.offset*r.BYTES_PER_ELEMENT,r,o.offset,o.count):t.bufferSubData(s,o.offset*r.BYTES_PER_ELEMENT,r.subarray(o.offset,o.offset+o.count)),o.count=-1)}(r.buffer,e,s),r.version=e.version)}}}class JT extends hT{constructor(t=1,e=1,n=1,i=1){super(),this.type=\\\\\\\"PlaneGeometry\\\\\\\",this.parameters={width:t,height:e,widthSegments:n,heightSegments:i};const s=t/2,r=e/2,o=Math.floor(n),a=Math.floor(i),l=o+1,c=a+1,h=t/o,u=e/a,d=[],p=[],_=[],m=[];for(let t=0;t<c;t++){const e=t*u-r;for(let n=0;n<l;n++){const i=n*h-s;p.push(i,-e,0),_.push(0,0,1),m.push(n/o),m.push(1-t/a)}}for(let t=0;t<a;t++)for(let e=0;e<o;e++){const n=e+l*t,i=e+l*(t+1),s=e+1+l*(t+1),r=e+1+l*t;d.push(n,i,r),d.push(i,s,r)}this.setIndex(d),this.setAttribute(\\\\\\\"position\\\\\\\",new nT(p,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new nT(_,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new nT(m,2))}static fromJSON(t){return new JT(t.width,t.height,t.widthSegments,t.heightSegments)}}const ZT={alphamap_fragment:\\\\\\\"#ifdef USE_ALPHAMAP\\\\n\\\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\\\n#endif\\\\\\\",alphamap_pars_fragment:\\\\\\\"#ifdef USE_ALPHAMAP\\\\n\\\\tuniform sampler2D alphaMap;\\\\n#endif\\\\\\\",alphatest_fragment:\\\\\\\"#ifdef USE_ALPHATEST\\\\n\\\\tif ( diffuseColor.a < alphaTest ) discard;\\\\n#endif\\\\\\\",alphatest_pars_fragment:\\\\\\\"#ifdef USE_ALPHATEST\\\\n\\\\tuniform float alphaTest;\\\\n#endif\\\\\\\",aomap_fragment:\\\\\\\"#ifdef USE_AOMAP\\\\n\\\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\\\n\\\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\\\n\\\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\\\n\\\\t\\\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\\\n\\\\t\\\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\\\n\\\\t#endif\\\\n#endif\\\\\\\",aomap_pars_fragment:\\\\\\\"#ifdef USE_AOMAP\\\\n\\\\tuniform sampler2D aoMap;\\\\n\\\\tuniform float aoMapIntensity;\\\\n#endif\\\\\\\",begin_vertex:\\\\\\\"vec3 transformed = vec3( position );\\\\\\\",beginnormal_vertex:\\\\\\\"vec3 objectNormal = vec3( normal );\\\\n#ifdef USE_TANGENT\\\\n\\\\tvec3 objectTangent = vec3( tangent.xyz );\\\\n#endif\\\\\\\",bsdfs:\\\\\\\"vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\\\n\\\\treturn RECIPROCAL_PI * diffuseColor;\\\\n}\\\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\\\n\\\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\\\n\\\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\\\n}\\\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\\\n\\\\tfloat a2 = pow2( alpha );\\\\n\\\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\\\n\\\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\\\n\\\\treturn 0.5 / max( gv + gl, EPSILON );\\\\n}\\\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\\\n\\\\tfloat a2 = pow2( alpha );\\\\n\\\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\\\n\\\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\\\n}\\\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\\\\n\\\\tfloat alpha = pow2( roughness );\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\\\n\\\\tvec3 F = F_Schlick( f0, f90, dotVH );\\\\n\\\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\\\n\\\\tfloat D = D_GGX( alpha, dotNH );\\\\n\\\\treturn F * ( V * D );\\\\n}\\\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\\\n\\\\tconst float LUT_SIZE = 64.0;\\\\n\\\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\\\n\\\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\\\n\\\\tfloat dotNV = saturate( dot( N, V ) );\\\\n\\\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\\\n\\\\tuv = uv * LUT_SCALE + LUT_BIAS;\\\\n\\\\treturn uv;\\\\n}\\\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\\\n\\\\tfloat l = length( f );\\\\n\\\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\\\n}\\\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\\\n\\\\tfloat x = dot( v1, v2 );\\\\n\\\\tfloat y = abs( x );\\\\n\\\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\\\n\\\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\\\n\\\\tfloat v = a / b;\\\\n\\\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\\\n\\\\treturn cross( v1, v2 ) * theta_sintheta;\\\\n}\\\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\\\n\\\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\\\n\\\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\\\n\\\\tvec3 lightNormal = cross( v1, v2 );\\\\n\\\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\\\n\\\\tvec3 T1, T2;\\\\n\\\\tT1 = normalize( V - N * dot( V, N ) );\\\\n\\\\tT2 = - cross( N, T1 );\\\\n\\\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\\\n\\\\tvec3 coords[ 4 ];\\\\n\\\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\\\n\\\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\\\n\\\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\\\n\\\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\\\n\\\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\\\n\\\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\\\n\\\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\\\n\\\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\\\n\\\\tvec3 vectorFormFactor = vec3( 0.0 );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\\\n\\\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\\\n\\\\treturn vec3( result );\\\\n}\\\\nfloat G_BlinnPhong_Implicit( ) {\\\\n\\\\treturn 0.25;\\\\n}\\\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\\\n\\\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\\\n}\\\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\\\n\\\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\\\n\\\\tfloat G = G_BlinnPhong_Implicit( );\\\\n\\\\tfloat D = D_BlinnPhong( shininess, dotNH );\\\\n\\\\treturn F * ( G * D );\\\\n}\\\\n#if defined( USE_SHEEN )\\\\nfloat D_Charlie( float roughness, float dotNH ) {\\\\n\\\\tfloat alpha = pow2( roughness );\\\\n\\\\tfloat invAlpha = 1.0 / alpha;\\\\n\\\\tfloat cos2h = dotNH * dotNH;\\\\n\\\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\\\n\\\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\\\n}\\\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\\\n\\\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\\\n}\\\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenTint, const in float sheenRoughness ) {\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\\\n\\\\tfloat V = V_Neubelt( dotNV, dotNL );\\\\n\\\\treturn sheenTint * ( D * V );\\\\n}\\\\n#endif\\\\\\\",bumpmap_pars_fragment:\\\\\\\"#ifdef USE_BUMPMAP\\\\n\\\\tuniform sampler2D bumpMap;\\\\n\\\\tuniform float bumpScale;\\\\n\\\\tvec2 dHdxy_fwd() {\\\\n\\\\t\\\\tvec2 dSTdx = dFdx( vUv );\\\\n\\\\t\\\\tvec2 dSTdy = dFdy( vUv );\\\\n\\\\t\\\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\\\n\\\\t\\\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\\\n\\\\t\\\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\\\n\\\\t\\\\treturn vec2( dBx, dBy );\\\\n\\\\t}\\\\n\\\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\\\n\\\\t\\\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\\\n\\\\t\\\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\\\n\\\\t\\\\tvec3 vN = surf_norm;\\\\n\\\\t\\\\tvec3 R1 = cross( vSigmaY, vN );\\\\n\\\\t\\\\tvec3 R2 = cross( vN, vSigmaX );\\\\n\\\\t\\\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\\\n\\\\t\\\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\\\n\\\\t\\\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\\\n\\\\t}\\\\n#endif\\\\\\\",clipping_planes_fragment:\\\\\\\"#if NUM_CLIPPING_PLANES > 0\\\\n\\\\tvec4 plane;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\\\n\\\\t\\\\tplane = clippingPlanes[ i ];\\\\n\\\\t\\\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\\\n\\\\t\\\\tbool clipped = true;\\\\n\\\\t\\\\t#pragma unroll_loop_start\\\\n\\\\t\\\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\\\n\\\\t\\\\t\\\\tplane = clippingPlanes[ i ];\\\\n\\\\t\\\\t\\\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t#pragma unroll_loop_end\\\\n\\\\t\\\\tif ( clipped ) discard;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",clipping_planes_pars_fragment:\\\\\\\"#if NUM_CLIPPING_PLANES > 0\\\\n\\\\tvarying vec3 vClipPosition;\\\\n\\\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\\\n#endif\\\\\\\",clipping_planes_pars_vertex:\\\\\\\"#if NUM_CLIPPING_PLANES > 0\\\\n\\\\tvarying vec3 vClipPosition;\\\\n#endif\\\\\\\",clipping_planes_vertex:\\\\\\\"#if NUM_CLIPPING_PLANES > 0\\\\n\\\\tvClipPosition = - mvPosition.xyz;\\\\n#endif\\\\\\\",color_fragment:\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\n\\\\tdiffuseColor *= vColor;\\\\n#elif defined( USE_COLOR )\\\\n\\\\tdiffuseColor.rgb *= vColor;\\\\n#endif\\\\\\\",color_pars_fragment:\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\n\\\\tvarying vec4 vColor;\\\\n#elif defined( USE_COLOR )\\\\n\\\\tvarying vec3 vColor;\\\\n#endif\\\\\\\",color_pars_vertex:\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\n\\\\tvarying vec4 vColor;\\\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\\\n\\\\tvarying vec3 vColor;\\\\n#endif\\\\\\\",color_vertex:\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\n\\\\tvColor = vec4( 1.0 );\\\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\\\n\\\\tvColor = vec3( 1.0 );\\\\n#endif\\\\n#ifdef USE_COLOR\\\\n\\\\tvColor *= color;\\\\n#endif\\\\n#ifdef USE_INSTANCING_COLOR\\\\n\\\\tvColor.xyz *= instanceColor.xyz;\\\\n#endif\\\\\\\",common:\\\\\\\"#define PI 3.141592653589793\\\\n#define PI2 6.283185307179586\\\\n#define PI_HALF 1.5707963267948966\\\\n#define RECIPROCAL_PI 0.3183098861837907\\\\n#define RECIPROCAL_PI2 0.15915494309189535\\\\n#define EPSILON 1e-6\\\\n#ifndef saturate\\\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\\\n#endif\\\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\\\nfloat pow2( const in float x ) { return x*x; }\\\\nfloat pow3( const in float x ) { return x*x*x; }\\\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\\\nhighp float rand( const in vec2 uv ) {\\\\n\\\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\\\n\\\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\\\n\\\\treturn fract( sin( sn ) * c );\\\\n}\\\\n#ifdef HIGH_PRECISION\\\\n\\\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\\\n#else\\\\n\\\\tfloat precisionSafeLength( vec3 v ) {\\\\n\\\\t\\\\tfloat maxComponent = max3( abs( v ) );\\\\n\\\\t\\\\treturn length( v / maxComponent ) * maxComponent;\\\\n\\\\t}\\\\n#endif\\\\nstruct IncidentLight {\\\\n\\\\tvec3 color;\\\\n\\\\tvec3 direction;\\\\n\\\\tbool visible;\\\\n};\\\\nstruct ReflectedLight {\\\\n\\\\tvec3 directDiffuse;\\\\n\\\\tvec3 directSpecular;\\\\n\\\\tvec3 indirectDiffuse;\\\\n\\\\tvec3 indirectSpecular;\\\\n};\\\\nstruct GeometricContext {\\\\n\\\\tvec3 position;\\\\n\\\\tvec3 normal;\\\\n\\\\tvec3 viewDir;\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tvec3 clearcoatNormal;\\\\n#endif\\\\n};\\\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\\\n}\\\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\\\n}\\\\nmat3 transposeMat3( const in mat3 m ) {\\\\n\\\\tmat3 tmp;\\\\n\\\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\\\n\\\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\\\n\\\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\\\n\\\\treturn tmp;\\\\n}\\\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\\\n\\\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\\\n\\\\treturn dot( weights, color.rgb );\\\\n}\\\\nbool isPerspectiveMatrix( mat4 m ) {\\\\n\\\\treturn m[ 2 ][ 3 ] == - 1.0;\\\\n}\\\\nvec2 equirectUv( in vec3 dir ) {\\\\n\\\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\\\n\\\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\\\n\\\\treturn vec2( u, v );\\\\n}\\\\\\\",cube_uv_reflection_fragment:\\\\\\\"#ifdef ENVMAP_TYPE_CUBE_UV\\\\n\\\\t#define cubeUV_maxMipLevel 8.0\\\\n\\\\t#define cubeUV_minMipLevel 4.0\\\\n\\\\t#define cubeUV_maxTileSize 256.0\\\\n\\\\t#define cubeUV_minTileSize 16.0\\\\n\\\\tfloat getFace( vec3 direction ) {\\\\n\\\\t\\\\tvec3 absDirection = abs( direction );\\\\n\\\\t\\\\tfloat face = - 1.0;\\\\n\\\\t\\\\tif ( absDirection.x > absDirection.z ) {\\\\n\\\\t\\\\t\\\\tif ( absDirection.x > absDirection.y )\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tif ( absDirection.z > absDirection.y )\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn face;\\\\n\\\\t}\\\\n\\\\tvec2 getUV( vec3 direction, float face ) {\\\\n\\\\t\\\\tvec2 uv;\\\\n\\\\t\\\\tif ( face == 0.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\\\n\\\\t\\\\t} else if ( face == 1.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\\\n\\\\t\\\\t} else if ( face == 2.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\\\n\\\\t\\\\t} else if ( face == 3.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\\\n\\\\t\\\\t} else if ( face == 4.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn 0.5 * ( uv + 1.0 );\\\\n\\\\t}\\\\n\\\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\\\n\\\\t\\\\tfloat face = getFace( direction );\\\\n\\\\t\\\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\\\n\\\\t\\\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\\\n\\\\t\\\\tfloat faceSize = exp2( mipInt );\\\\n\\\\t\\\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\\\n\\\\t\\\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\\\n\\\\t\\\\tvec2 f = fract( uv );\\\\n\\\\t\\\\tuv += 0.5 - f;\\\\n\\\\t\\\\tif ( face > 2.0 ) {\\\\n\\\\t\\\\t\\\\tuv.y += faceSize;\\\\n\\\\t\\\\t\\\\tface -= 3.0;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuv.x += face * faceSize;\\\\n\\\\t\\\\tif ( mipInt < cubeUV_maxMipLevel ) {\\\\n\\\\t\\\\t\\\\tuv.y += 2.0 * cubeUV_maxTileSize;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\\\n\\\\t\\\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\\\n\\\\t\\\\tuv *= texelSize;\\\\n\\\\t\\\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\t\\\\tuv.x += texelSize;\\\\n\\\\t\\\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\t\\\\tuv.y += texelSize;\\\\n\\\\t\\\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\t\\\\tuv.x -= texelSize;\\\\n\\\\t\\\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\t\\\\tvec3 tm = mix( tl, tr, f.x );\\\\n\\\\t\\\\tvec3 bm = mix( bl, br, f.x );\\\\n\\\\t\\\\treturn mix( tm, bm, f.y );\\\\n\\\\t}\\\\n\\\\t#define r0 1.0\\\\n\\\\t#define v0 0.339\\\\n\\\\t#define m0 - 2.0\\\\n\\\\t#define r1 0.8\\\\n\\\\t#define v1 0.276\\\\n\\\\t#define m1 - 1.0\\\\n\\\\t#define r4 0.4\\\\n\\\\t#define v4 0.046\\\\n\\\\t#define m4 2.0\\\\n\\\\t#define r5 0.305\\\\n\\\\t#define v5 0.016\\\\n\\\\t#define m5 3.0\\\\n\\\\t#define r6 0.21\\\\n\\\\t#define v6 0.0038\\\\n\\\\t#define m6 4.0\\\\n\\\\tfloat roughnessToMip( float roughness ) {\\\\n\\\\t\\\\tfloat mip = 0.0;\\\\n\\\\t\\\\tif ( roughness >= r1 ) {\\\\n\\\\t\\\\t\\\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\\\n\\\\t\\\\t} else if ( roughness >= r4 ) {\\\\n\\\\t\\\\t\\\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\\\n\\\\t\\\\t} else if ( roughness >= r5 ) {\\\\n\\\\t\\\\t\\\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\\\n\\\\t\\\\t} else if ( roughness >= r6 ) {\\\\n\\\\t\\\\t\\\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tmip = - 2.0 * log2( 1.16 * roughness );\\\\t\\\\t}\\\\n\\\\t\\\\treturn mip;\\\\n\\\\t}\\\\n\\\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\\\n\\\\t\\\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\\\n\\\\t\\\\tfloat mipF = fract( mip );\\\\n\\\\t\\\\tfloat mipInt = floor( mip );\\\\n\\\\t\\\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\\\n\\\\t\\\\tif ( mipF == 0.0 ) {\\\\n\\\\t\\\\t\\\\treturn vec4( color0, 1.0 );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\\\n\\\\t\\\\t\\\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n#endif\\\\\\\",defaultnormal_vertex:\\\\\\\"vec3 transformedNormal = objectNormal;\\\\n#ifdef USE_INSTANCING\\\\n\\\\tmat3 m = mat3( instanceMatrix );\\\\n\\\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\\\n\\\\ttransformedNormal = m * transformedNormal;\\\\n#endif\\\\ntransformedNormal = normalMatrix * transformedNormal;\\\\n#ifdef FLIP_SIDED\\\\n\\\\ttransformedNormal = - transformedNormal;\\\\n#endif\\\\n#ifdef USE_TANGENT\\\\n\\\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\\\n\\\\t#ifdef FLIP_SIDED\\\\n\\\\t\\\\ttransformedTangent = - transformedTangent;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",displacementmap_pars_vertex:\\\\\\\"#ifdef USE_DISPLACEMENTMAP\\\\n\\\\tuniform sampler2D displacementMap;\\\\n\\\\tuniform float displacementScale;\\\\n\\\\tuniform float displacementBias;\\\\n#endif\\\\\\\",displacementmap_vertex:\\\\\\\"#ifdef USE_DISPLACEMENTMAP\\\\n\\\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\\\n#endif\\\\\\\",emissivemap_fragment:\\\\\\\"#ifdef USE_EMISSIVEMAP\\\\n\\\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\\\n\\\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\\\n\\\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\\\n#endif\\\\\\\",emissivemap_pars_fragment:\\\\\\\"#ifdef USE_EMISSIVEMAP\\\\n\\\\tuniform sampler2D emissiveMap;\\\\n#endif\\\\\\\",encodings_fragment:\\\\\\\"gl_FragColor = linearToOutputTexel( gl_FragColor );\\\\\\\",encodings_pars_fragment:\\\\\\\"\\\\nvec4 LinearToLinear( in vec4 value ) {\\\\n\\\\treturn value;\\\\n}\\\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\\\n\\\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\\\n}\\\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\\\n\\\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\\\n}\\\\nvec4 sRGBToLinear( in vec4 value ) {\\\\n\\\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\\\n}\\\\nvec4 LinearTosRGB( in vec4 value ) {\\\\n\\\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\\\n}\\\\nvec4 RGBEToLinear( in vec4 value ) {\\\\n\\\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\\\n}\\\\nvec4 LinearToRGBE( in vec4 value ) {\\\\n\\\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\\\n\\\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\\\n\\\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\\\n}\\\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\\\n\\\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\\\n}\\\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\\\n\\\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\\\n\\\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\\\n\\\\tM = ceil( M * 255.0 ) / 255.0;\\\\n\\\\treturn vec4( value.rgb / ( M * maxRange ), M );\\\\n}\\\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\\\n\\\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\\\n}\\\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\\\n\\\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\\\n\\\\tfloat D = max( maxRange / maxRGB, 1.0 );\\\\n\\\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\\\n\\\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\\\n}\\\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\\\nvec4 LinearToLogLuv( in vec4 value ) {\\\\n\\\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\\\n\\\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\\\n\\\\tvec4 vResult;\\\\n\\\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\\\n\\\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\\\n\\\\tvResult.w = fract( Le );\\\\n\\\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\\\n\\\\treturn vResult;\\\\n}\\\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\\\nvec4 LogLuvToLinear( in vec4 value ) {\\\\n\\\\tfloat Le = value.z * 255.0 + value.w;\\\\n\\\\tvec3 Xp_Y_XYZp;\\\\n\\\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\\\n\\\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\\\n\\\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\\\n\\\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\\\n\\\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\\\n}\\\\\\\",envmap_fragment:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\tvec3 cameraToFrag;\\\\n\\\\t\\\\tif ( isOrthographic ) {\\\\n\\\\t\\\\t\\\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\t\\\\t\\\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\\\n\\\\t\\\\t#endif\\\\n\\\\t#else\\\\n\\\\t\\\\tvec3 reflectVec = vReflect;\\\\n\\\\t#endif\\\\n\\\\t#ifdef ENVMAP_TYPE_CUBE\\\\n\\\\t\\\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\\\n\\\\t\\\\tenvColor = envMapTexelToLinear( envColor );\\\\n\\\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\t\\\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\\\n\\\\t#else\\\\n\\\\t\\\\tvec4 envColor = vec4( 0.0 );\\\\n\\\\t#endif\\\\n\\\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\\\n\\\\t\\\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\\\n\\\\t#elif defined( ENVMAP_BLENDING_MIX )\\\\n\\\\t\\\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\\\n\\\\t#elif defined( ENVMAP_BLENDING_ADD )\\\\n\\\\t\\\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",envmap_common_pars_fragment:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\tuniform float envMapIntensity;\\\\n\\\\tuniform float flipEnvMap;\\\\n\\\\tuniform int maxMipLevel;\\\\n\\\\t#ifdef ENVMAP_TYPE_CUBE\\\\n\\\\t\\\\tuniform samplerCube envMap;\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t#endif\\\\n\\\\t\\\\n#endif\\\\\\\",envmap_pars_fragment:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\tuniform float reflectivity;\\\\n\\\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\\\n\\\\t\\\\t#define ENV_WORLDPOS\\\\n\\\\t#endif\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\t#else\\\\n\\\\t\\\\tvarying vec3 vReflect;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",envmap_pars_vertex:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\\\n\\\\t\\\\t#define ENV_WORLDPOS\\\\n\\\\t#endif\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\t\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t#else\\\\n\\\\t\\\\tvarying vec3 vReflect;\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",envmap_physical_pars_fragment:\\\\\\\"#if defined( USE_ENVMAP )\\\\n\\\\t#ifdef ENVMAP_MODE_REFRACTION\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\t#endif\\\\n\\\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\\\n\\\\t\\\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\t\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\t\\\\t\\\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\\\n\\\\t\\\\t\\\\treturn PI * envMapColor.rgb * envMapIntensity;\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\treturn vec3( 0.0 );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\\\n\\\\t\\\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\t\\\\t\\\\tvec3 reflectVec;\\\\n\\\\t\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = reflect( - viewDir, normal );\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = refract( - viewDir, normal, refractionRatio );\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\\\n\\\\t\\\\t\\\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\\\n\\\\t\\\\t\\\\treturn envMapColor.rgb * envMapIntensity;\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\treturn vec3( 0.0 );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n#endif\\\\\\\",envmap_vertex:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\t#else\\\\n\\\\t\\\\tvec3 cameraToVertex;\\\\n\\\\t\\\\tif ( isOrthographic ) {\\\\n\\\\t\\\\t\\\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\\\n\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\t\\\\t\\\\tvReflect = reflect( cameraToVertex, worldNormal );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\\\n\\\\t\\\\t#endif\\\\n\\\\t#endif\\\\n#endif\\\\\\\",fog_vertex:\\\\\\\"#ifdef USE_FOG\\\\n\\\\tvFogDepth = - mvPosition.z;\\\\n#endif\\\\\\\",fog_pars_vertex:\\\\\\\"#ifdef USE_FOG\\\\n\\\\tvarying float vFogDepth;\\\\n#endif\\\\\\\",fog_fragment:\\\\\\\"#ifdef USE_FOG\\\\n\\\\t#ifdef FOG_EXP2\\\\n\\\\t\\\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\\\n\\\\t#else\\\\n\\\\t\\\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\\\n\\\\t#endif\\\\n\\\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\\\n#endif\\\\\\\",fog_pars_fragment:\\\\\\\"#ifdef USE_FOG\\\\n\\\\tuniform vec3 fogColor;\\\\n\\\\tvarying float vFogDepth;\\\\n\\\\t#ifdef FOG_EXP2\\\\n\\\\t\\\\tuniform float fogDensity;\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform float fogNear;\\\\n\\\\t\\\\tuniform float fogFar;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",gradientmap_pars_fragment:\\\\\\\"#ifdef USE_GRADIENTMAP\\\\n\\\\tuniform sampler2D gradientMap;\\\\n#endif\\\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\\\n\\\\tfloat dotNL = dot( normal, lightDirection );\\\\n\\\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\\\n\\\\t#ifdef USE_GRADIENTMAP\\\\n\\\\t\\\\treturn texture2D( gradientMap, coord ).rgb;\\\\n\\\\t#else\\\\n\\\\t\\\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\\\n\\\\t#endif\\\\n}\\\\\\\",lightmap_fragment:\\\\\\\"#ifdef USE_LIGHTMAP\\\\n\\\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\\\n\\\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\\\n\\\\t\\\\tlightMapIrradiance *= PI;\\\\n\\\\t#endif\\\\n\\\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\\\n#endif\\\\\\\",lightmap_pars_fragment:\\\\\\\"#ifdef USE_LIGHTMAP\\\\n\\\\tuniform sampler2D lightMap;\\\\n\\\\tuniform float lightMapIntensity;\\\\n#endif\\\\\\\",lights_lambert_vertex:\\\\\\\"vec3 diffuse = vec3( 1.0 );\\\\nGeometricContext geometry;\\\\ngeometry.position = mvPosition.xyz;\\\\ngeometry.normal = normalize( transformedNormal );\\\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\\\nGeometricContext backGeometry;\\\\nbackGeometry.position = geometry.position;\\\\nbackGeometry.normal = -geometry.normal;\\\\nbackGeometry.viewDir = geometry.viewDir;\\\\nvLightFront = vec3( 0.0 );\\\\nvIndirectFront = vec3( 0.0 );\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvLightBack = vec3( 0.0 );\\\\n\\\\tvIndirectBack = vec3( 0.0 );\\\\n#endif\\\\nIncidentLight directLight;\\\\nfloat dotNL;\\\\nvec3 directLightColor_Diffuse;\\\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\\\\n#endif\\\\n#if NUM_POINT_LIGHTS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if NUM_SPOT_LIGHTS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if NUM_DIR_LIGHTS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if NUM_HEMI_LIGHTS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\\\\",lights_pars_begin:\\\\\\\"uniform bool receiveShadow;\\\\nuniform vec3 ambientLightColor;\\\\nuniform vec3 lightProbe[ 9 ];\\\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\\\n\\\\tfloat x = normal.x, y = normal.y, z = normal.z;\\\\n\\\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\\\n\\\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\\\n\\\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\\\n\\\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\\\n\\\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\\\n\\\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\\\n\\\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\\\n\\\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\\\n\\\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\\\n\\\\treturn result;\\\\n}\\\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\\\n\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\\\n\\\\treturn irradiance;\\\\n}\\\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\\\n\\\\tvec3 irradiance = ambientLightColor;\\\\n\\\\treturn irradiance;\\\\n}\\\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\\\n\\\\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\\\n\\\\t\\\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\\\n\\\\t\\\\tif ( cutoffDistance > 0.0 ) {\\\\n\\\\t\\\\t\\\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn distanceFalloff;\\\\n\\\\t#else\\\\n\\\\t\\\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\\\n\\\\t\\\\t\\\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn 1.0;\\\\n\\\\t#endif\\\\n}\\\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\\\n\\\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\\\n}\\\\n#if NUM_DIR_LIGHTS > 0\\\\n\\\\tstruct DirectionalLight {\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t};\\\\n\\\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\\\n\\\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\t\\\\tlight.color = directionalLight.color;\\\\n\\\\t\\\\tlight.direction = directionalLight.direction;\\\\n\\\\t\\\\tlight.visible = true;\\\\n\\\\t}\\\\n#endif\\\\n#if NUM_POINT_LIGHTS > 0\\\\n\\\\tstruct PointLight {\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tfloat distance;\\\\n\\\\t\\\\tfloat decay;\\\\n\\\\t};\\\\n\\\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\\\n\\\\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\t\\\\tvec3 lVector = pointLight.position - geometry.position;\\\\n\\\\t\\\\tlight.direction = normalize( lVector );\\\\n\\\\t\\\\tfloat lightDistance = length( lVector );\\\\n\\\\t\\\\tlight.color = pointLight.color;\\\\n\\\\t\\\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\\\n\\\\t\\\\tlight.visible = ( light.color != vec3( 0.0 ) );\\\\n\\\\t}\\\\n#endif\\\\n#if NUM_SPOT_LIGHTS > 0\\\\n\\\\tstruct SpotLight {\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tfloat distance;\\\\n\\\\t\\\\tfloat decay;\\\\n\\\\t\\\\tfloat coneCos;\\\\n\\\\t\\\\tfloat penumbraCos;\\\\n\\\\t};\\\\n\\\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\\\n\\\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\t\\\\tvec3 lVector = spotLight.position - geometry.position;\\\\n\\\\t\\\\tlight.direction = normalize( lVector );\\\\n\\\\t\\\\tfloat angleCos = dot( light.direction, spotLight.direction );\\\\n\\\\t\\\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\\\n\\\\t\\\\tif ( spotAttenuation > 0.0 ) {\\\\n\\\\t\\\\t\\\\tfloat lightDistance = length( lVector );\\\\n\\\\t\\\\t\\\\tlight.color = spotLight.color * spotAttenuation;\\\\n\\\\t\\\\t\\\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\\\n\\\\t\\\\t\\\\tlight.visible = ( light.color != vec3( 0.0 ) );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tlight.color = vec3( 0.0 );\\\\n\\\\t\\\\t\\\\tlight.visible = false;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n#endif\\\\n#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\tstruct RectAreaLight {\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 halfWidth;\\\\n\\\\t\\\\tvec3 halfHeight;\\\\n\\\\t};\\\\n\\\\tuniform sampler2D ltc_1;\\\\tuniform sampler2D ltc_2;\\\\n\\\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\\\n#endif\\\\n#if NUM_HEMI_LIGHTS > 0\\\\n\\\\tstruct HemisphereLight {\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 skyColor;\\\\n\\\\t\\\\tvec3 groundColor;\\\\n\\\\t};\\\\n\\\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\\\n\\\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\\\n\\\\t\\\\tfloat dotNL = dot( normal, hemiLight.direction );\\\\n\\\\t\\\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\\\n\\\\t\\\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\\\n\\\\t\\\\treturn irradiance;\\\\n\\\\t}\\\\n#endif\\\\\\\",lights_toon_fragment:\\\\\\\"ToonMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb;\\\\\\\",lights_toon_pars_fragment:\\\\\\\"varying vec3 vViewPosition;\\\\nstruct ToonMaterial {\\\\n\\\\tvec3 diffuseColor;\\\\n};\\\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_Toon\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_Toon\\\\n#define Material_LightProbeLOD( material )\\\\t(0)\\\\\\\",lights_phong_fragment:\\\\\\\"BlinnPhongMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb;\\\\nmaterial.specularColor = specular;\\\\nmaterial.specularShininess = shininess;\\\\nmaterial.specularStrength = specularStrength;\\\\\\\",lights_phong_pars_fragment:\\\\\\\"varying vec3 vViewPosition;\\\\nstruct BlinnPhongMaterial {\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\tvec3 specularColor;\\\\n\\\\tfloat specularShininess;\\\\n\\\\tfloat specularStrength;\\\\n};\\\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\\\n\\\\tvec3 irradiance = dotNL * directLight.color;\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\\\n}\\\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_BlinnPhong\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_BlinnPhong\\\\n#define Material_LightProbeLOD( material )\\\\t(0)\\\\\\\",lights_physical_fragment:\\\\\\\"PhysicalMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\\\nmaterial.roughness = min( material.roughness, 1.0 );\\\\n#ifdef IOR\\\\n\\\\t#ifdef SPECULAR\\\\n\\\\t\\\\tfloat specularIntensityFactor = specularIntensity;\\\\n\\\\t\\\\tvec3 specularTintFactor = specularTint;\\\\n\\\\t\\\\t#ifdef USE_SPECULARINTENSITYMAP\\\\n\\\\t\\\\t\\\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t#ifdef USE_SPECULARTINTMAP\\\\n\\\\t\\\\t\\\\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\\\n\\\\t#else\\\\n\\\\t\\\\tfloat specularIntensityFactor = 1.0;\\\\n\\\\t\\\\tvec3 specularTintFactor = vec3( 1.0 );\\\\n\\\\t\\\\tmaterial.specularF90 = 1.0;\\\\n\\\\t#endif\\\\n\\\\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\\\n#else\\\\n\\\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\\\n\\\\tmaterial.specularF90 = 1.0;\\\\n#endif\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tmaterial.clearcoat = clearcoat;\\\\n\\\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\\\n\\\\tmaterial.clearcoatF0 = vec3( 0.04 );\\\\n\\\\tmaterial.clearcoatF90 = 1.0;\\\\n\\\\t#ifdef USE_CLEARCOATMAP\\\\n\\\\t\\\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\\\n\\\\t\\\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\\\n\\\\t#endif\\\\n\\\\tmaterial.clearcoat = saturate( material.clearcoat );\\\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\\\n\\\\tmaterial.clearcoatRoughness += geometryRoughness;\\\\n\\\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\\\n#endif\\\\n#ifdef USE_SHEEN\\\\n\\\\tmaterial.sheenTint = sheenTint;\\\\n\\\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\\\n#endif\\\\\\\",lights_physical_pars_fragment:\\\\\\\"struct PhysicalMaterial {\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\tfloat roughness;\\\\n\\\\tvec3 specularColor;\\\\n\\\\tfloat specularF90;\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tfloat clearcoat;\\\\n\\\\t\\\\tfloat clearcoatRoughness;\\\\n\\\\t\\\\tvec3 clearcoatF0;\\\\n\\\\t\\\\tfloat clearcoatF90;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_SHEEN\\\\n\\\\t\\\\tvec3 sheenTint;\\\\n\\\\t\\\\tfloat sheenRoughness;\\\\n\\\\t#endif\\\\n};\\\\nvec3 clearcoatSpecular = vec3( 0.0 );\\\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\\\n\\\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\\\n\\\\tvec4 r = roughness * c0 + c1;\\\\n\\\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\\\n\\\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\\\n\\\\treturn fab;\\\\n}\\\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\\\n\\\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\\\n\\\\treturn specularColor * fab.x + specularF90 * fab.y;\\\\n}\\\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\\\n\\\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\\\n\\\\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\\\\n\\\\tfloat Ess = fab.x + fab.y;\\\\n\\\\tfloat Ems = 1.0 - Ess;\\\\n\\\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\\\n\\\\tsingleScatter += FssEss;\\\\n\\\\tmultiScatter += Fms * Ems;\\\\n}\\\\n#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\t\\\\tvec3 normal = geometry.normal;\\\\n\\\\t\\\\tvec3 viewDir = geometry.viewDir;\\\\n\\\\t\\\\tvec3 position = geometry.position;\\\\n\\\\t\\\\tvec3 lightPos = rectAreaLight.position;\\\\n\\\\t\\\\tvec3 halfWidth = rectAreaLight.halfWidth;\\\\n\\\\t\\\\tvec3 halfHeight = rectAreaLight.halfHeight;\\\\n\\\\t\\\\tvec3 lightColor = rectAreaLight.color;\\\\n\\\\t\\\\tfloat roughness = material.roughness;\\\\n\\\\t\\\\tvec3 rectCoords[ 4 ];\\\\n\\\\t\\\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\\\t\\\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\\\n\\\\t\\\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\\\n\\\\t\\\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\\\n\\\\t\\\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\\\n\\\\t\\\\tvec4 t1 = texture2D( ltc_1, uv );\\\\n\\\\t\\\\tvec4 t2 = texture2D( ltc_2, uv );\\\\n\\\\t\\\\tmat3 mInv = mat3(\\\\n\\\\t\\\\t\\\\tvec3( t1.x, 0, t1.y ),\\\\n\\\\t\\\\t\\\\tvec3(    0, 1,    0 ),\\\\n\\\\t\\\\t\\\\tvec3( t1.z, 0, t1.w )\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\\\n\\\\t\\\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\\\n\\\\t\\\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\\\n\\\\t}\\\\n#endif\\\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\\\n\\\\tvec3 irradiance = dotNL * directLight.color;\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\\\n\\\\t\\\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\\\n\\\\t\\\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_SHEEN\\\\n\\\\t\\\\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenTint, material.sheenRoughness );\\\\n\\\\t#endif\\\\n\\\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\\\n\\\\t#endif\\\\n\\\\tvec3 singleScattering = vec3( 0.0 );\\\\n\\\\tvec3 multiScattering = vec3( 0.0 );\\\\n\\\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\\\n\\\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\\\n\\\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\\\n\\\\treflectedLight.indirectSpecular += radiance * singleScattering;\\\\n\\\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\\\n\\\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\\\n}\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_Physical\\\\n#define RE_Direct_RectArea\\\\t\\\\tRE_Direct_RectArea_Physical\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_Physical\\\\n#define RE_IndirectSpecular\\\\t\\\\tRE_IndirectSpecular_Physical\\\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\\\n\\\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\\\n}\\\\\\\",lights_fragment_begin:\\\\\\\"\\\\nGeometricContext geometry;\\\\ngeometry.position = - vViewPosition;\\\\ngeometry.normal = normal;\\\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tgeometry.clearcoatNormal = clearcoatNormal;\\\\n#endif\\\\nIncidentLight directLight;\\\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\tPointLight pointLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\tPointLightShadow pointLightShadow;\\\\n\\\\t#endif\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tpointLight = pointLights[ i ];\\\\n\\\\t\\\\tgetPointLightInfo( pointLight, geometry, directLight );\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\\\n\\\\t\\\\tpointLightShadow = pointLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\tSpotLight spotLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\tSpotLightShadow spotLightShadow;\\\\n\\\\t#endif\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tspotLight = spotLights[ i ];\\\\n\\\\t\\\\tgetSpotLightInfo( spotLight, geometry, directLight );\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\\\n\\\\t\\\\tspotLightShadow = spotLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\tDirectionalLight directionalLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\tDirectionalLightShadow directionalLightShadow;\\\\n\\\\t#endif\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tdirectionalLight = directionalLights[ i ];\\\\n\\\\t\\\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\\\n\\\\t\\\\tdirectionalLightShadow = directionalLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\\\n\\\\tRectAreaLight rectAreaLight;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\\\n\\\\t\\\\trectAreaLight = rectAreaLights[ i ];\\\\n\\\\t\\\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if defined( RE_IndirectDiffuse )\\\\n\\\\tvec3 iblIrradiance = vec3( 0.0 );\\\\n\\\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\\\n\\\\t#if ( NUM_HEMI_LIGHTS > 0 )\\\\n\\\\t\\\\t#pragma unroll_loop_start\\\\n\\\\t\\\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\\\n\\\\t\\\\t\\\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n#endif\\\\n#if defined( RE_IndirectSpecular )\\\\n\\\\tvec3 radiance = vec3( 0.0 );\\\\n\\\\tvec3 clearcoatRadiance = vec3( 0.0 );\\\\n#endif\\\\\\\",lights_fragment_maps:\\\\\\\"#if defined( RE_IndirectDiffuse )\\\\n\\\\t#ifdef USE_LIGHTMAP\\\\n\\\\t\\\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\\\n\\\\t\\\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\t\\\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\\\n\\\\t\\\\t\\\\tlightMapIrradiance *= PI;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tirradiance += lightMapIrradiance;\\\\n\\\\t#endif\\\\n\\\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\t\\\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\\\n\\\\t#endif\\\\n#endif\\\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\\\n\\\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\\\n\\\\t#endif\\\\n#endif\\\\\\\",lights_fragment_end:\\\\\\\"#if defined( RE_IndirectDiffuse )\\\\n\\\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\\\n#endif\\\\n#if defined( RE_IndirectSpecular )\\\\n\\\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\\\n#endif\\\\\\\",logdepthbuf_fragment:\\\\\\\"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\\\n\\\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\\\n#endif\\\\\\\",logdepthbuf_pars_fragment:\\\\\\\"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\\\n\\\\tuniform float logDepthBufFC;\\\\n\\\\tvarying float vFragDepth;\\\\n\\\\tvarying float vIsPerspective;\\\\n#endif\\\\\\\",logdepthbuf_pars_vertex:\\\\\\\"#ifdef USE_LOGDEPTHBUF\\\\n\\\\t#ifdef USE_LOGDEPTHBUF_EXT\\\\n\\\\t\\\\tvarying float vFragDepth;\\\\n\\\\t\\\\tvarying float vIsPerspective;\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform float logDepthBufFC;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",logdepthbuf_vertex:\\\\\\\"#ifdef USE_LOGDEPTHBUF\\\\n\\\\t#ifdef USE_LOGDEPTHBUF_EXT\\\\n\\\\t\\\\tvFragDepth = 1.0 + gl_Position.w;\\\\n\\\\t\\\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\\\n\\\\t#else\\\\n\\\\t\\\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\\\n\\\\t\\\\t\\\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\\\n\\\\t\\\\t\\\\tgl_Position.z *= gl_Position.w;\\\\n\\\\t\\\\t}\\\\n\\\\t#endif\\\\n#endif\\\\\\\",map_fragment:\\\\\\\"#ifdef USE_MAP\\\\n\\\\tvec4 texelColor = texture2D( map, vUv );\\\\n\\\\ttexelColor = mapTexelToLinear( texelColor );\\\\n\\\\tdiffuseColor *= texelColor;\\\\n#endif\\\\\\\",map_pars_fragment:\\\\\\\"#ifdef USE_MAP\\\\n\\\\tuniform sampler2D map;\\\\n#endif\\\\\\\",map_particle_fragment:\\\\\\\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\\\n\\\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\\\n#endif\\\\n#ifdef USE_MAP\\\\n\\\\tvec4 mapTexel = texture2D( map, uv );\\\\n\\\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\\\n#endif\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\\\n#endif\\\\\\\",map_particle_pars_fragment:\\\\\\\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\\\n\\\\tuniform mat3 uvTransform;\\\\n#endif\\\\n#ifdef USE_MAP\\\\n\\\\tuniform sampler2D map;\\\\n#endif\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\tuniform sampler2D alphaMap;\\\\n#endif\\\\\\\",metalnessmap_fragment:\\\\\\\"float metalnessFactor = metalness;\\\\n#ifdef USE_METALNESSMAP\\\\n\\\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\\\n\\\\tmetalnessFactor *= texelMetalness.b;\\\\n#endif\\\\\\\",metalnessmap_pars_fragment:\\\\\\\"#ifdef USE_METALNESSMAP\\\\n\\\\tuniform sampler2D metalnessMap;\\\\n#endif\\\\\\\",morphnormal_vertex:\\\\\\\"#ifdef USE_MORPHNORMALS\\\\n\\\\tobjectNormal *= morphTargetBaseInfluence;\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\t\\\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\\\n\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\\\\n\\\\t\\\\t}\\\\n\\\\t#else\\\\n\\\\t\\\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\\\n\\\\t#endif\\\\n#endif\\\\\\\",morphtarget_pars_vertex:\\\\\\\"#ifdef USE_MORPHTARGETS\\\\n\\\\tuniform float morphTargetBaseInfluence;\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\t\\\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\\\n\\\\t\\\\tuniform sampler2DArray morphTargetsTexture;\\\\n\\\\t\\\\tuniform vec2 morphTargetsTextureSize;\\\\n\\\\t\\\\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\\\\n\\\\t\\\\t\\\\tfloat texelIndex = float( vertexIndex * stride + offset );\\\\n\\\\t\\\\t\\\\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\\\\n\\\\t\\\\t\\\\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\\\\n\\\\t\\\\t\\\\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\\\\n\\\\t\\\\t\\\\treturn texture( morphTargetsTexture, morphUV ).xyz;\\\\n\\\\t\\\\t}\\\\n\\\\t#else\\\\n\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\t\\\\t\\\\tuniform float morphTargetInfluences[ 8 ];\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tuniform float morphTargetInfluences[ 4 ];\\\\n\\\\t\\\\t#endif\\\\n\\\\t#endif\\\\n#endif\\\\\\\",morphtarget_vertex:\\\\\\\"#ifdef USE_MORPHTARGETS\\\\n\\\\ttransformed *= morphTargetBaseInfluence;\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\t\\\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\\\n\\\\t\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\t\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t}\\\\n\\\\t#else\\\\n\\\\t\\\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\\\n\\\\t\\\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\\\n\\\\t\\\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\\\n\\\\t\\\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\\\n\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\\\n\\\\t\\\\t#endif\\\\n\\\\t#endif\\\\n#endif\\\\\\\",normal_fragment_begin:\\\\\\\"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\\\n#ifdef FLAT_SHADED\\\\n\\\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\\\n\\\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\\\n\\\\tvec3 normal = normalize( cross( fdx, fdy ) );\\\\n#else\\\\n\\\\tvec3 normal = normalize( vNormal );\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\tnormal = normal * faceDirection;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tvec3 tangent = normalize( vTangent );\\\\n\\\\t\\\\tvec3 bitangent = normalize( vBitangent );\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\ttangent = tangent * faceDirection;\\\\n\\\\t\\\\t\\\\tbitangent = bitangent * faceDirection;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\\\n\\\\t\\\\t\\\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\\\n\\\\t\\\\t#endif\\\\n\\\\t#endif\\\\n#endif\\\\nvec3 geometryNormal = normal;\\\\\\\",normal_fragment_maps:\\\\\\\"#ifdef OBJECTSPACE_NORMALMAP\\\\n\\\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\t#ifdef FLIP_SIDED\\\\n\\\\t\\\\tnormal = - normal;\\\\n\\\\t#endif\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\tnormal = normal * faceDirection;\\\\n\\\\t#endif\\\\n\\\\tnormal = normalize( normalMatrix * normal );\\\\n#elif defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\tmapN.xy *= normalScale;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tnormal = normalize( vTBN * mapN );\\\\n\\\\t#else\\\\n\\\\t\\\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\\\n\\\\t#endif\\\\n#elif defined( USE_BUMPMAP )\\\\n\\\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\\\n#endif\\\\\\\",normal_pars_fragment:\\\\\\\"#ifndef FLAT_SHADED\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tvarying vec3 vTangent;\\\\n\\\\t\\\\tvarying vec3 vBitangent;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",normal_pars_vertex:\\\\\\\"#ifndef FLAT_SHADED\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tvarying vec3 vTangent;\\\\n\\\\t\\\\tvarying vec3 vBitangent;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",normal_vertex:\\\\\\\"#ifndef FLAT_SHADED\\\\n\\\\tvNormal = normalize( transformedNormal );\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tvTangent = normalize( transformedTangent );\\\\n\\\\t\\\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\\\n\\\\t#endif\\\\n#endif\\\\\\\",normalmap_pars_fragment:\\\\\\\"#ifdef USE_NORMALMAP\\\\n\\\\tuniform sampler2D normalMap;\\\\n\\\\tuniform vec2 normalScale;\\\\n#endif\\\\n#ifdef OBJECTSPACE_NORMALMAP\\\\n\\\\tuniform mat3 normalMatrix;\\\\n#endif\\\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\\\n\\\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\\\n\\\\t\\\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\\\n\\\\t\\\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\\\n\\\\t\\\\tvec2 st0 = dFdx( vUv.st );\\\\n\\\\t\\\\tvec2 st1 = dFdy( vUv.st );\\\\n\\\\t\\\\tvec3 N = surf_norm;\\\\n\\\\t\\\\tvec3 q1perp = cross( q1, N );\\\\n\\\\t\\\\tvec3 q0perp = cross( N, q0 );\\\\n\\\\t\\\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\\\n\\\\t\\\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\\\n\\\\t\\\\tfloat det = max( dot( T, T ), dot( B, B ) );\\\\n\\\\t\\\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\\\n\\\\t\\\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\\\n\\\\t}\\\\n#endif\\\\\\\",clearcoat_normal_fragment_begin:\\\\\\\"#ifdef USE_CLEARCOAT\\\\n\\\\tvec3 clearcoatNormal = geometryNormal;\\\\n#endif\\\\\\\",clearcoat_normal_fragment_maps:\\\\\\\"#ifdef USE_CLEARCOAT_NORMALMAP\\\\n\\\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\tclearcoatMapN.xy *= clearcoatNormalScale;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\\\n\\\\t#else\\\\n\\\\t\\\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\\\n\\\\t#endif\\\\n#endif\\\\\\\",clearcoat_pars_fragment:\\\\\\\"#ifdef USE_CLEARCOATMAP\\\\n\\\\tuniform sampler2D clearcoatMap;\\\\n#endif\\\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\\\n\\\\tuniform sampler2D clearcoatRoughnessMap;\\\\n#endif\\\\n#ifdef USE_CLEARCOAT_NORMALMAP\\\\n\\\\tuniform sampler2D clearcoatNormalMap;\\\\n\\\\tuniform vec2 clearcoatNormalScale;\\\\n#endif\\\\\\\",output_fragment:\\\\\\\"#ifdef OPAQUE\\\\ndiffuseColor.a = 1.0;\\\\n#endif\\\\n#ifdef USE_TRANSMISSION\\\\ndiffuseColor.a *= transmissionAlpha + 0.1;\\\\n#endif\\\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\\\\\\\",packing:\\\\\\\"vec3 packNormalToRGB( const in vec3 normal ) {\\\\n\\\\treturn normalize( normal ) * 0.5 + 0.5;\\\\n}\\\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\\\n\\\\treturn 2.0 * rgb.xyz - 1.0;\\\\n}\\\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\\\nconst float ShiftRight8 = 1. / 256.;\\\\nvec4 packDepthToRGBA( const in float v ) {\\\\n\\\\tvec4 r = vec4( fract( v * PackFactors ), v );\\\\n\\\\tr.yzw -= r.xyz * ShiftRight8;\\\\treturn r * PackUpscale;\\\\n}\\\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\\\n\\\\treturn dot( v, UnpackFactors );\\\\n}\\\\nvec4 pack2HalfToRGBA( vec2 v ) {\\\\n\\\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\\\n\\\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\\\n}\\\\nvec2 unpackRGBATo2Half( vec4 v ) {\\\\n\\\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\\\n}\\\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\\\n\\\\treturn ( viewZ + near ) / ( near - far );\\\\n}\\\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\\\n\\\\treturn linearClipZ * ( near - far ) - near;\\\\n}\\\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\\\n\\\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\\\n}\\\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\\\n\\\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\\\n}\\\\\\\",premultiplied_alpha_fragment:\\\\\\\"#ifdef PREMULTIPLIED_ALPHA\\\\n\\\\tgl_FragColor.rgb *= gl_FragColor.a;\\\\n#endif\\\\\\\",project_vertex:\\\\\\\"vec4 mvPosition = vec4( transformed, 1.0 );\\\\n#ifdef USE_INSTANCING\\\\n\\\\tmvPosition = instanceMatrix * mvPosition;\\\\n#endif\\\\nmvPosition = modelViewMatrix * mvPosition;\\\\ngl_Position = projectionMatrix * mvPosition;\\\\\\\",dithering_fragment:\\\\\\\"#ifdef DITHERING\\\\n\\\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\\\n#endif\\\\\\\",dithering_pars_fragment:\\\\\\\"#ifdef DITHERING\\\\n\\\\tvec3 dithering( vec3 color ) {\\\\n\\\\t\\\\tfloat grid_position = rand( gl_FragCoord.xy );\\\\n\\\\t\\\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\\\n\\\\t\\\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\\\n\\\\t\\\\treturn color + dither_shift_RGB;\\\\n\\\\t}\\\\n#endif\\\\\\\",roughnessmap_fragment:\\\\\\\"float roughnessFactor = roughness;\\\\n#ifdef USE_ROUGHNESSMAP\\\\n\\\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\\\n\\\\troughnessFactor *= texelRoughness.g;\\\\n#endif\\\\\\\",roughnessmap_pars_fragment:\\\\\\\"#ifdef USE_ROUGHNESSMAP\\\\n\\\\tuniform sampler2D roughnessMap;\\\\n#endif\\\\\\\",shadowmap_pars_fragment:\\\\\\\"#ifdef USE_SHADOWMAP\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct DirectionalLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct SpotLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct PointLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraNear;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraFar;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\\\n\\\\t\\\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\\\n\\\\t}\\\\n\\\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\\\n\\\\t\\\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\\\n\\\\t}\\\\n\\\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\\\n\\\\t\\\\tfloat occlusion = 1.0;\\\\n\\\\t\\\\tvec2 distribution = texture2DDistribution( shadow, uv );\\\\n\\\\t\\\\tfloat hard_shadow = step( compare , distribution.x );\\\\n\\\\t\\\\tif (hard_shadow != 1.0 ) {\\\\n\\\\t\\\\t\\\\tfloat distance = compare - distribution.x ;\\\\n\\\\t\\\\t\\\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\\\n\\\\t\\\\t\\\\tfloat softness_probability = variance / (variance + distance * distance );\\\\t\\\\t\\\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\\\t\\\\t\\\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn occlusion;\\\\n\\\\t}\\\\n\\\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\\\n\\\\t\\\\tfloat shadow = 1.0;\\\\n\\\\t\\\\tshadowCoord.xyz /= shadowCoord.w;\\\\n\\\\t\\\\tshadowCoord.z += shadowBias;\\\\n\\\\t\\\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\\\n\\\\t\\\\tbool inFrustum = all( inFrustumVec );\\\\n\\\\t\\\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\\\n\\\\t\\\\tbool frustumTest = all( frustumTestVec );\\\\n\\\\t\\\\tif ( frustumTest ) {\\\\n\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF )\\\\n\\\\t\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat dx0 = - texelSize.x * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dy0 = - texelSize.y * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dx1 = + texelSize.x * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dy1 = + texelSize.y * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dx2 = dx0 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dy2 = dy0 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dx3 = dx1 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dy3 = dy1 / 2.0;\\\\n\\\\t\\\\t\\\\tshadow = (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 17.0 );\\\\n\\\\t\\\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\\\n\\\\t\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat dx = texelSize.x;\\\\n\\\\t\\\\t\\\\tfloat dy = texelSize.y;\\\\n\\\\t\\\\t\\\\tvec2 uv = shadowCoord.xy;\\\\n\\\\t\\\\t\\\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\\\n\\\\t\\\\t\\\\tuv -= f * texelSize;\\\\n\\\\t\\\\t\\\\tshadow = (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.x ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.x ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  f.x ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  f.x ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 9.0 );\\\\n\\\\t\\\\t#elif defined( SHADOWMAP_TYPE_VSM )\\\\n\\\\t\\\\t\\\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn shadow;\\\\n\\\\t}\\\\n\\\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\\\n\\\\t\\\\tvec3 absV = abs( v );\\\\n\\\\t\\\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\\\n\\\\t\\\\tabsV *= scaleToCube;\\\\n\\\\t\\\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\\\n\\\\t\\\\tvec2 planar = v.xy;\\\\n\\\\t\\\\tfloat almostATexel = 1.5 * texelSizeY;\\\\n\\\\t\\\\tfloat almostOne = 1.0 - almostATexel;\\\\n\\\\t\\\\tif ( absV.z >= almostOne ) {\\\\n\\\\t\\\\t\\\\tif ( v.z > 0.0 )\\\\n\\\\t\\\\t\\\\t\\\\tplanar.x = 4.0 - v.x;\\\\n\\\\t\\\\t} else if ( absV.x >= almostOne ) {\\\\n\\\\t\\\\t\\\\tfloat signX = sign( v.x );\\\\n\\\\t\\\\t\\\\tplanar.x = v.z * signX + 2.0 * signX;\\\\n\\\\t\\\\t} else if ( absV.y >= almostOne ) {\\\\n\\\\t\\\\t\\\\tfloat signY = sign( v.y );\\\\n\\\\t\\\\t\\\\tplanar.x = v.x + 2.0 * signY + 2.0;\\\\n\\\\t\\\\t\\\\tplanar.y = v.z * signY - 2.0;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\\\n\\\\t}\\\\n\\\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\\\n\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\\\n\\\\t\\\\tvec3 lightToPosition = shadowCoord.xyz;\\\\n\\\\t\\\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\\\t\\\\tdp += shadowBias;\\\\n\\\\t\\\\tvec3 bd3D = normalize( lightToPosition );\\\\n\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\\\n\\\\t\\\\t\\\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\\\n\\\\t\\\\t\\\\treturn (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 9.0 );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n#endif\\\\\\\",shadowmap_pars_vertex:\\\\\\\"#ifdef USE_SHADOWMAP\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct DirectionalLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct SpotLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct PointLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraNear;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraFar;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n#endif\\\\\\\",shadowmap_vertex:\\\\\\\"#ifdef USE_SHADOWMAP\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\\\n\\\\t\\\\tvec4 shadowWorldPosition;\\\\n\\\\t#endif\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n#endif\\\\\\\",shadowmask_pars_fragment:\\\\\\\"float getShadowMask() {\\\\n\\\\tfloat shadow = 1.0;\\\\n\\\\t#ifdef USE_SHADOWMAP\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\tDirectionalLightShadow directionalLight;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tdirectionalLight = directionalLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\tSpotLightShadow spotLight;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tspotLight = spotLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\tPointLightShadow pointLight;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tpointLight = pointLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#endif\\\\n\\\\treturn shadow;\\\\n}\\\\\\\",skinbase_vertex:\\\\\\\"#ifdef USE_SKINNING\\\\n\\\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\\\n\\\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\\\n\\\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\\\n\\\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\\\n#endif\\\\\\\",skinning_pars_vertex:\\\\\\\"#ifdef USE_SKINNING\\\\n\\\\tuniform mat4 bindMatrix;\\\\n\\\\tuniform mat4 bindMatrixInverse;\\\\n\\\\t#ifdef BONE_TEXTURE\\\\n\\\\t\\\\tuniform highp sampler2D boneTexture;\\\\n\\\\t\\\\tuniform int boneTextureSize;\\\\n\\\\t\\\\tmat4 getBoneMatrix( const in float i ) {\\\\n\\\\t\\\\t\\\\tfloat j = i * 4.0;\\\\n\\\\t\\\\t\\\\tfloat x = mod( j, float( boneTextureSize ) );\\\\n\\\\t\\\\t\\\\tfloat y = floor( j / float( boneTextureSize ) );\\\\n\\\\t\\\\t\\\\tfloat dx = 1.0 / float( boneTextureSize );\\\\n\\\\t\\\\t\\\\tfloat dy = 1.0 / float( boneTextureSize );\\\\n\\\\t\\\\t\\\\ty = dy * ( y + 0.5 );\\\\n\\\\t\\\\t\\\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\\\n\\\\t\\\\t\\\\tmat4 bone = mat4( v1, v2, v3, v4 );\\\\n\\\\t\\\\t\\\\treturn bone;\\\\n\\\\t\\\\t}\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform mat4 boneMatrices[ MAX_BONES ];\\\\n\\\\t\\\\tmat4 getBoneMatrix( const in float i ) {\\\\n\\\\t\\\\t\\\\tmat4 bone = boneMatrices[ int(i) ];\\\\n\\\\t\\\\t\\\\treturn bone;\\\\n\\\\t\\\\t}\\\\n\\\\t#endif\\\\n#endif\\\\\\\",skinning_vertex:\\\\\\\"#ifdef USE_SKINNING\\\\n\\\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\\\n\\\\tvec4 skinned = vec4( 0.0 );\\\\n\\\\tskinned += boneMatX * skinVertex * skinWeight.x;\\\\n\\\\tskinned += boneMatY * skinVertex * skinWeight.y;\\\\n\\\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\\\n\\\\tskinned += boneMatW * skinVertex * skinWeight.w;\\\\n\\\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\\\n#endif\\\\\\\",skinnormal_vertex:\\\\\\\"#ifdef USE_SKINNING\\\\n\\\\tmat4 skinMatrix = mat4( 0.0 );\\\\n\\\\tskinMatrix += skinWeight.x * boneMatX;\\\\n\\\\tskinMatrix += skinWeight.y * boneMatY;\\\\n\\\\tskinMatrix += skinWeight.z * boneMatZ;\\\\n\\\\tskinMatrix += skinWeight.w * boneMatW;\\\\n\\\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\\\n\\\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",specularmap_fragment:\\\\\\\"float specularStrength;\\\\n#ifdef USE_SPECULARMAP\\\\n\\\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\\\n\\\\tspecularStrength = texelSpecular.r;\\\\n#else\\\\n\\\\tspecularStrength = 1.0;\\\\n#endif\\\\\\\",specularmap_pars_fragment:\\\\\\\"#ifdef USE_SPECULARMAP\\\\n\\\\tuniform sampler2D specularMap;\\\\n#endif\\\\\\\",tonemapping_fragment:\\\\\\\"#if defined( TONE_MAPPING )\\\\n\\\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\\\n#endif\\\\\\\",tonemapping_pars_fragment:\\\\\\\"#ifndef saturate\\\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\\\n#endif\\\\nuniform float toneMappingExposure;\\\\nvec3 LinearToneMapping( vec3 color ) {\\\\n\\\\treturn toneMappingExposure * color;\\\\n}\\\\nvec3 ReinhardToneMapping( vec3 color ) {\\\\n\\\\tcolor *= toneMappingExposure;\\\\n\\\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\\\n}\\\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\\\n\\\\tcolor *= toneMappingExposure;\\\\n\\\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\\\n\\\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\\\n}\\\\nvec3 RRTAndODTFit( vec3 v ) {\\\\n\\\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\\\n\\\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\\\n\\\\treturn a / b;\\\\n}\\\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\\\n\\\\tconst mat3 ACESInputMat = mat3(\\\\n\\\\t\\\\tvec3( 0.59719, 0.07600, 0.02840 ),\\\\t\\\\tvec3( 0.35458, 0.90834, 0.13383 ),\\\\n\\\\t\\\\tvec3( 0.04823, 0.01566, 0.83777 )\\\\n\\\\t);\\\\n\\\\tconst mat3 ACESOutputMat = mat3(\\\\n\\\\t\\\\tvec3(  1.60475, -0.10208, -0.00327 ),\\\\t\\\\tvec3( -0.53108,  1.10813, -0.07276 ),\\\\n\\\\t\\\\tvec3( -0.07367, -0.00605,  1.07602 )\\\\n\\\\t);\\\\n\\\\tcolor *= toneMappingExposure / 0.6;\\\\n\\\\tcolor = ACESInputMat * color;\\\\n\\\\tcolor = RRTAndODTFit( color );\\\\n\\\\tcolor = ACESOutputMat * color;\\\\n\\\\treturn saturate( color );\\\\n}\\\\nvec3 CustomToneMapping( vec3 color ) { return color; }\\\\\\\",transmission_fragment:\\\\\\\"#ifdef USE_TRANSMISSION\\\\n\\\\tfloat transmissionAlpha = 1.0;\\\\n\\\\tfloat transmissionFactor = transmission;\\\\n\\\\tfloat thicknessFactor = thickness;\\\\n\\\\t#ifdef USE_TRANSMISSIONMAP\\\\n\\\\t\\\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_THICKNESSMAP\\\\n\\\\t\\\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\\\n\\\\t#endif\\\\n\\\\tvec3 pos = vWorldPosition;\\\\n\\\\tvec3 v = normalize( cameraPosition - pos );\\\\n\\\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\tvec4 transmission = getIBLVolumeRefraction(\\\\n\\\\t\\\\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\\\\n\\\\t\\\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\\\n\\\\t\\\\tattenuationTint, attenuationDistance );\\\\n\\\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\\\\n\\\\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\\\\n#endif\\\\\\\",transmission_pars_fragment:\\\\\\\"#ifdef USE_TRANSMISSION\\\\n\\\\tuniform float transmission;\\\\n\\\\tuniform float thickness;\\\\n\\\\tuniform float attenuationDistance;\\\\n\\\\tuniform vec3 attenuationTint;\\\\n\\\\t#ifdef USE_TRANSMISSIONMAP\\\\n\\\\t\\\\tuniform sampler2D transmissionMap;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_THICKNESSMAP\\\\n\\\\t\\\\tuniform sampler2D thicknessMap;\\\\n\\\\t#endif\\\\n\\\\tuniform vec2 transmissionSamplerSize;\\\\n\\\\tuniform sampler2D transmissionSamplerMap;\\\\n\\\\tuniform mat4 modelMatrix;\\\\n\\\\tuniform mat4 projectionMatrix;\\\\n\\\\tvarying vec3 vWorldPosition;\\\\n\\\\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\\\\n\\\\t\\\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\\\n\\\\t\\\\tvec3 modelScale;\\\\n\\\\t\\\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\\\n\\\\t\\\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\\\n\\\\t\\\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\\\n\\\\t\\\\treturn normalize( refractionVector ) * thickness * modelScale;\\\\n\\\\t}\\\\n\\\\tfloat applyIorToRoughness( float roughness, float ior ) {\\\\n\\\\t\\\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\\\n\\\\t}\\\\n\\\\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\\\\n\\\\t\\\\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\\\n\\\\t\\\\t#ifdef TEXTURE_LOD_EXT\\\\n\\\\t\\\\t\\\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\\\\n\\\\t\\\\tif ( attenuationDistance == 0.0 ) {\\\\n\\\\t\\\\t\\\\treturn radiance;\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\\\n\\\\t\\\\t\\\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\\\t\\\\t\\\\treturn transmittance * radiance;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\\\\n\\\\t\\\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\\\\n\\\\t\\\\tvec3 attenuationColor, float attenuationDistance ) {\\\\n\\\\t\\\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\\\n\\\\t\\\\tvec3 refractedRayExit = position + transmissionRay;\\\\n\\\\t\\\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\\\n\\\\t\\\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\\\n\\\\t\\\\trefractionCoords += 1.0;\\\\n\\\\t\\\\trefractionCoords /= 2.0;\\\\n\\\\t\\\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\\\n\\\\t\\\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\\\n\\\\t\\\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\\\n\\\\t\\\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\\\n\\\\t}\\\\n#endif\\\\\\\",uv_pars_fragment:\\\\\\\"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\\\n\\\\tvarying vec2 vUv;\\\\n#endif\\\\\\\",uv_pars_vertex:\\\\\\\"#ifdef USE_UV\\\\n\\\\t#ifdef UVS_VERTEX_ONLY\\\\n\\\\t\\\\tvec2 vUv;\\\\n\\\\t#else\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\t#endif\\\\n\\\\tuniform mat3 uvTransform;\\\\n#endif\\\\\\\",uv_vertex:\\\\\\\"#ifdef USE_UV\\\\n\\\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\\\n#endif\\\\\\\",uv2_pars_fragment:\\\\\\\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\tvarying vec2 vUv2;\\\\n#endif\\\\\\\",uv2_pars_vertex:\\\\\\\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\tattribute vec2 uv2;\\\\n\\\\tvarying vec2 vUv2;\\\\n\\\\tuniform mat3 uv2Transform;\\\\n#endif\\\\\\\",uv2_vertex:\\\\\\\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\\\n#endif\\\\\\\",worldpos_vertex:\\\\\\\"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\\\n\\\\tvec4 worldPosition = vec4( transformed, 1.0 );\\\\n\\\\t#ifdef USE_INSTANCING\\\\n\\\\t\\\\tworldPosition = instanceMatrix * worldPosition;\\\\n\\\\t#endif\\\\n\\\\tworldPosition = modelMatrix * worldPosition;\\\\n#endif\\\\\\\",background_vert:\\\\\\\"varying vec2 vUv;\\\\nuniform mat3 uvTransform;\\\\nvoid main() {\\\\n\\\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\\\n\\\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\\\n}\\\\\\\",background_frag:\\\\\\\"uniform sampler2D t2D;\\\\nvarying vec2 vUv;\\\\nvoid main() {\\\\n\\\\tvec4 texColor = texture2D( t2D, vUv );\\\\n\\\\tgl_FragColor = mapTexelToLinear( texColor );\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n}\\\\\\\",cube_vert:\\\\\\\"varying vec3 vWorldDirection;\\\\n#include <common>\\\\nvoid main() {\\\\n\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\tgl_Position.z = gl_Position.w;\\\\n}\\\\\\\",cube_frag:\\\\\\\"#include <envmap_common_pars_fragment>\\\\nuniform float opacity;\\\\nvarying vec3 vWorldDirection;\\\\n#include <cube_uv_reflection_fragment>\\\\nvoid main() {\\\\n\\\\tvec3 vReflect = vWorldDirection;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\tgl_FragColor = envColor;\\\\n\\\\tgl_FragColor.a *= opacity;\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n}\\\\\\\",depth_vert:\\\\\\\"#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvarying vec2 vHighPrecisionZW;\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#ifdef USE_DISPLACEMENTMAP\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\t#endif\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvHighPrecisionZW = gl_Position.zw;\\\\n}\\\\\\\",depth_frag:\\\\\\\"#if DEPTH_PACKING == 3200\\\\n\\\\tuniform float opacity;\\\\n#endif\\\\n#include <common>\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvarying vec2 vHighPrecisionZW;\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( 1.0 );\\\\n\\\\t#if DEPTH_PACKING == 3200\\\\n\\\\t\\\\tdiffuseColor.a = opacity;\\\\n\\\\t#endif\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\\\n\\\\t#if DEPTH_PACKING == 3200\\\\n\\\\t\\\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\\\n\\\\t#elif DEPTH_PACKING == 3201\\\\n\\\\t\\\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\\\n\\\\t#endif\\\\n}\\\\\\\",distanceRGBA_vert:\\\\\\\"#define DISTANCE\\\\nvarying vec3 vWorldPosition;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#ifdef USE_DISPLACEMENTMAP\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\t#endif\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n}\\\\\\\",distanceRGBA_frag:\\\\\\\"#define DISTANCE\\\\nuniform vec3 referencePosition;\\\\nuniform float nearDistance;\\\\nuniform float farDistance;\\\\nvarying vec3 vWorldPosition;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main () {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( 1.0 );\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\tfloat dist = length( vWorldPosition - referencePosition );\\\\n\\\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\\\n\\\\tdist = saturate( dist );\\\\n\\\\tgl_FragColor = packDepthToRGBA( dist );\\\\n}\\\\\\\",equirect_vert:\\\\\\\"varying vec3 vWorldDirection;\\\\n#include <common>\\\\nvoid main() {\\\\n\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <project_vertex>\\\\n}\\\\\\\",equirect_frag:\\\\\\\"uniform sampler2D tEquirect;\\\\nvarying vec3 vWorldDirection;\\\\n#include <common>\\\\nvoid main() {\\\\n\\\\tvec3 direction = normalize( vWorldDirection );\\\\n\\\\tvec2 sampleUV = equirectUv( direction );\\\\n\\\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\\\n\\\\tgl_FragColor = mapTexelToLinear( texColor );\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n}\\\\\\\",linedashed_vert:\\\\\\\"uniform float scale;\\\\nattribute float lineDistance;\\\\nvarying float vLineDistance;\\\\n#include <common>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\tvLineDistance = scale * lineDistance;\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",linedashed_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform float opacity;\\\\nuniform float dashSize;\\\\nuniform float totalSize;\\\\nvarying float vLineDistance;\\\\n#include <common>\\\\n#include <color_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\\\n\\\\t\\\\tdiscard;\\\\n\\\\t}\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n}\\\\\\\",meshbasic_vert:\\\\\\\"#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinbase_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\t\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#endif\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",meshbasic_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform float opacity;\\\\n#ifndef FLAT_SHADED\\\\n\\\\tvarying vec3 vNormal;\\\\n#endif\\\\n#include <common>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\t#ifdef USE_LIGHTMAP\\\\n\\\\t\\\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\t#else\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\\\n\\\\t#endif\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\\\n\\\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshlambert_vert:\\\\\\\"#define LAMBERT\\\\nvarying vec3 vLightFront;\\\\nvarying vec3 vIndirectFront;\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvarying vec3 vLightBack;\\\\n\\\\tvarying vec3 vIndirectBack;\\\\n#endif\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <lights_lambert_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",meshlambert_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float opacity;\\\\nvarying vec3 vLightFront;\\\\nvarying vec3 vIndirectFront;\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvarying vec3 vLightBack;\\\\n\\\\tvarying vec3 vIndirectBack;\\\\n#endif\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <fog_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <shadowmask_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\\\n\\\\t#else\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += vIndirectFront;\\\\n\\\\t#endif\\\\n\\\\t#include <lightmap_fragment>\\\\n\\\\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\\\n\\\\t#else\\\\n\\\\t\\\\treflectedLight.directDiffuse = vLightFront;\\\\n\\\\t#endif\\\\n\\\\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshmatcap_vert:\\\\\\\"#define MATCAP\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n}\\\\\\\",meshmatcap_frag:\\\\\\\"#define MATCAP\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\nuniform sampler2D matcap;\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <normal_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\tvec3 viewDir = normalize( vViewPosition );\\\\n\\\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\\\n\\\\tvec3 y = cross( viewDir, x );\\\\n\\\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\\\n\\\\t#ifdef USE_MATCAP\\\\n\\\\t\\\\tvec4 matcapColor = texture2D( matcap, uv );\\\\n\\\\t\\\\tmatcapColor = matcapTexelToLinear( matcapColor );\\\\n\\\\t#else\\\\n\\\\t\\\\tvec4 matcapColor = vec4( 1.0 );\\\\n\\\\t#endif\\\\n\\\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshnormal_vert:\\\\\\\"#define NORMAL\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\tvarying vec3 vViewPosition;\\\\n#endif\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n#endif\\\\n}\\\\\\\",meshnormal_frag:\\\\\\\"#define NORMAL\\\\nuniform float opacity;\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\tvarying vec3 vViewPosition;\\\\n#endif\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <normal_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\\\n}\\\\\\\",meshphong_vert:\\\\\\\"#define PHONG\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",meshphong_frag:\\\\\\\"#define PHONG\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform vec3 specular;\\\\nuniform float shininess;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_phong_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\t#include <lights_phong_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshphysical_vert:\\\\\\\"#define STANDARD\\\\nvarying vec3 vViewPosition;\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\tvarying vec3 vWorldPosition;\\\\n#endif\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n#endif\\\\n}\\\\\\\",meshphysical_frag:\\\\\\\"#define STANDARD\\\\n#ifdef PHYSICAL\\\\n\\\\t#define IOR\\\\n\\\\t#define SPECULAR\\\\n#endif\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float roughness;\\\\nuniform float metalness;\\\\nuniform float opacity;\\\\n#ifdef IOR\\\\n\\\\tuniform float ior;\\\\n#endif\\\\n#ifdef SPECULAR\\\\n\\\\tuniform float specularIntensity;\\\\n\\\\tuniform vec3 specularTint;\\\\n\\\\t#ifdef USE_SPECULARINTENSITYMAP\\\\n\\\\t\\\\tuniform sampler2D specularIntensityMap;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_SPECULARTINTMAP\\\\n\\\\t\\\\tuniform sampler2D specularTintMap;\\\\n\\\\t#endif\\\\n#endif\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tuniform float clearcoat;\\\\n\\\\tuniform float clearcoatRoughness;\\\\n#endif\\\\n#ifdef USE_SHEEN\\\\n\\\\tuniform vec3 sheenTint;\\\\n\\\\tuniform float sheenRoughness;\\\\n#endif\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_physical_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_physical_pars_fragment>\\\\n#include <transmission_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <clearcoat_pars_fragment>\\\\n#include <roughnessmap_pars_fragment>\\\\n#include <metalnessmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <roughnessmap_fragment>\\\\n\\\\t#include <metalnessmap_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <clearcoat_normal_fragment_begin>\\\\n\\\\t#include <clearcoat_normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\t#include <lights_physical_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\\\n\\\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\\\n\\\\t#include <transmission_fragment>\\\\n\\\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\\\n\\\\t\\\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\\\n\\\\t\\\\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\\\\n\\\\t#endif\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshtoon_vert:\\\\\\\"#define TOON\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",meshtoon_frag:\\\\\\\"#define TOON\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <gradientmap_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_toon_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\t#include <lights_toon_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",points_vert:\\\\\\\"uniform float size;\\\\nuniform float scale;\\\\n#include <common>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\tgl_PointSize = size;\\\\n\\\\t#ifdef USE_SIZEATTENUATION\\\\n\\\\t\\\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\\\n\\\\t\\\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\\\n\\\\t#endif\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",points_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <color_pars_fragment>\\\\n#include <map_particle_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_particle_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n}\\\\\\\",shadow_vert:\\\\\\\"#include <common>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",shadow_frag:\\\\\\\"uniform vec3 color;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <shadowmask_pars_fragment>\\\\nvoid main() {\\\\n\\\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n}\\\\\\\",sprite_vert:\\\\\\\"uniform float rotation;\\\\nuniform vec2 center;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\tvec2 scale;\\\\n\\\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\\\n\\\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\\\n\\\\t#ifndef USE_SIZEATTENUATION\\\\n\\\\t\\\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\\\n\\\\t\\\\tif ( isPerspective ) scale *= - mvPosition.z;\\\\n\\\\t#endif\\\\n\\\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\\\n\\\\tvec2 rotatedPosition;\\\\n\\\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\\\n\\\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\\\n\\\\tmvPosition.xy += rotatedPosition;\\\\n\\\\tgl_Position = projectionMatrix * mvPosition;\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",sprite_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n}\\\\\\\"},KT={common:{diffuse:{value:new $w(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new mb},uv2Transform:{value:new mb},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new _b(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new $w(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new $w(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new mb}},sprite:{diffuse:{value:new $w(16777215)},opacity:{value:1},center:{value:new _b(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new mb}}},QT={basic:{uniforms:PT([KT.common,KT.specularmap,KT.envmap,KT.aomap,KT.lightmap,KT.fog]),vertexShader:ZT.meshbasic_vert,fragmentShader:ZT.meshbasic_frag},lambert:{uniforms:PT([KT.common,KT.specularmap,KT.envmap,KT.aomap,KT.lightmap,KT.emissivemap,KT.fog,KT.lights,{emissive:{value:new $w(0)}}]),vertexShader:ZT.meshlambert_vert,fragmentShader:ZT.meshlambert_frag},phong:{uniforms:PT([KT.common,KT.specularmap,KT.envmap,KT.aomap,KT.lightmap,KT.emissivemap,KT.bumpmap,KT.normalmap,KT.displacementmap,KT.fog,KT.lights,{emissive:{value:new $w(0)},specular:{value:new $w(1118481)},shininess:{value:30}}]),vertexShader:ZT.meshphong_vert,fragmentShader:ZT.meshphong_frag},standard:{uniforms:PT([KT.common,KT.envmap,KT.aomap,KT.lightmap,KT.emissivemap,KT.bumpmap,KT.normalmap,KT.displacementmap,KT.roughnessmap,KT.metalnessmap,KT.fog,KT.lights,{emissive:{value:new $w(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:ZT.meshphysical_vert,fragmentShader:ZT.meshphysical_frag},toon:{uniforms:PT([KT.common,KT.aomap,KT.lightmap,KT.emissivemap,KT.bumpmap,KT.normalmap,KT.displacementmap,KT.gradientmap,KT.fog,KT.lights,{emissive:{value:new $w(0)}}]),vertexShader:ZT.meshtoon_vert,fragmentShader:ZT.meshtoon_frag},matcap:{uniforms:PT([KT.common,KT.bumpmap,KT.normalmap,KT.displacementmap,KT.fog,{matcap:{value:null}}]),vertexShader:ZT.meshmatcap_vert,fragmentShader:ZT.meshmatcap_frag},points:{uniforms:PT([KT.points,KT.fog]),vertexShader:ZT.points_vert,fragmentShader:ZT.points_frag},dashed:{uniforms:PT([KT.common,KT.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:ZT.linedashed_vert,fragmentShader:ZT.linedashed_frag},depth:{uniforms:PT([KT.common,KT.displacementmap]),vertexShader:ZT.depth_vert,fragmentShader:ZT.depth_frag},normal:{uniforms:PT([KT.common,KT.bumpmap,KT.normalmap,KT.displacementmap,{opacity:{value:1}}]),vertexShader:ZT.meshnormal_vert,fragmentShader:ZT.meshnormal_frag},sprite:{uniforms:PT([KT.sprite,KT.fog]),vertexShader:ZT.sprite_vert,fragmentShader:ZT.sprite_frag},background:{uniforms:{uvTransform:{value:new mb},t2D:{value:null}},vertexShader:ZT.background_vert,fragmentShader:ZT.background_frag},cube:{uniforms:PT([KT.envmap,{opacity:{value:1}}]),vertexShader:ZT.cube_vert,fragmentShader:ZT.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:ZT.equirect_vert,fragmentShader:ZT.equirect_frag},distanceRGBA:{uniforms:PT([KT.common,KT.displacementmap,{referencePosition:{value:new Sb},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:ZT.distanceRGBA_vert,fragmentShader:ZT.distanceRGBA_frag},shadow:{uniforms:PT([KT.lights,KT.fog,{color:{value:new $w(0)},opacity:{value:1}}]),vertexShader:ZT.shadow_vert,fragmentShader:ZT.shadow_frag}};function tA(t,e,n,i,s){const r=new $w(0);let o,a,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,s)}return{getClearColor:function(){return r},setClearColor:function(t,e=1){r.set(t),l=e,d(r,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(r,l)},render:function(n,s){let p=!1,_=!0===s.isScene?s.background:null;_&&_.isTexture&&(_=e.get(_));const m=t.xr,f=m.getSession&&m.getSession();f&&\\\\\\\"additive\\\\\\\"===f.environmentBlendMode&&(_=null),null===_?d(r,l):_&&_.isColor&&(d(_,1),p=!0),(t.autoClear||p)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),_&&(_.isCubeTexture||_.mapping===vx)?(void 0===a&&(a=new CT(new LT(1,1,1),new IT({name:\\\\\\\"BackgroundCubeMaterial\\\\\\\",uniforms:OT(QT.cube.uniforms),vertexShader:QT.cube.vertexShader,fragmentShader:QT.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\"),a.geometry.deleteAttribute(\\\\\\\"uv\\\\\\\"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,\\\\\\\"envMap\\\\\\\",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),a.material.uniforms.envMap.value=_,a.material.uniforms.flipEnvMap.value=_.isCubeTexture&&!1===_.isRenderTargetTexture?-1:1,c===_&&h===_.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=_,h=_.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):_&&_.isTexture&&(void 0===o&&(o=new CT(new JT(2,2),new IT({name:\\\\\\\"BackgroundMaterial\\\\\\\",uniforms:OT(QT.background.uniforms),vertexShader:QT.background.vertexShader,fragmentShader:QT.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\"),Object.defineProperty(o.material,\\\\\\\"map\\\\\\\",{get:function(){return this.uniforms.t2D.value}}),i.update(o)),o.material.uniforms.t2D.value=_,!0===_.matrixAutoUpdate&&_.updateMatrix(),o.material.uniforms.uvTransform.value.copy(_.matrix),c===_&&h===_.version&&u===t.toneMapping||(o.material.needsUpdate=!0,c=_,h=_.version,u=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null))}}}function eA(t,e,n,i){const s=t.getParameter(34921),r=i.isWebGL2?null:e.get(\\\\\\\"OES_vertex_array_object\\\\\\\"),o=i.isWebGL2||null!==r,a={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):r.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):r.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t<s;t++)e[t]=0,n[t]=0,i[t]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:e,enabledAttributes:n,attributeDivisors:i,object:t,attributes:{},index:null}}function p(){const t=c.newAttributes;for(let e=0,n=t.length;e<n;e++)t[e]=0}function _(t){m(t,0)}function m(n,s){const r=c.newAttributes,o=c.enabledAttributes,a=c.attributeDivisors;if(r[n]=1,0===o[n]&&(t.enableVertexAttribArray(n),o[n]=1),a[n]!==s){(i.isWebGL2?t:e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"))[i.isWebGL2?\\\\\\\"vertexAttribDivisor\\\\\\\":\\\\\\\"vertexAttribDivisorANGLE\\\\\\\"](n,s),a[n]=s}}function f(){const e=c.newAttributes,n=c.enabledAttributes;for(let i=0,s=n.length;i<s;i++)n[i]!==e[i]&&(t.disableVertexAttribArray(i),n[i]=0)}function g(e,n,s,r,o,a){!0!==i.isWebGL2||5124!==s&&5125!==s?t.vertexAttribPointer(e,n,s,r,o,a):t.vertexAttribIPointer(e,n,s,o,a)}function v(){y(),c!==l&&(c=l,h(c.object))}function y(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:function(s,l,u,v,y){let x=!1;if(o){const e=function(e,n,s){const o=!0===s.wireframe;let l=a[e.id];void 0===l&&(l={},a[e.id]=l);let c=l[n.id];void 0===c&&(c={},l[n.id]=c);let h=c[o];void 0===h&&(h=d(i.isWebGL2?t.createVertexArray():r.createVertexArrayOES()),c[o]=h);return h}(v,u,l);c!==e&&(c=e,h(c.object)),x=function(t,e){const n=c.attributes,i=t.attributes;let s=0;for(const t in i){const e=n[t],r=i[t];if(void 0===e)return!0;if(e.attribute!==r)return!0;if(e.data!==r.data)return!0;s++}return c.attributesNum!==s||c.index!==e}(v,y),x&&function(t,e){const n={},i=t.attributes;let s=0;for(const t in i){const e=i[t],r={};r.attribute=e,e.data&&(r.data=e.data),n[t]=r,s++}c.attributes=n,c.attributesNum=s,c.index=e}(v,y)}else{const t=!0===l.wireframe;c.geometry===v.id&&c.program===u.id&&c.wireframe===t||(c.geometry=v.id,c.program=u.id,c.wireframe=t,x=!0)}!0===s.isInstancedMesh&&(x=!0),null!==y&&n.update(y,34963),x&&(!function(s,r,o,a){if(!1===i.isWebGL2&&(s.isInstancedMesh||a.isInstancedBufferGeometry)&&null===e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"))return;p();const l=a.attributes,c=o.getAttributes(),h=r.defaultAttributeValues;for(const e in c){const i=c[e];if(i.location>=0){let r=l[e];if(void 0===r&&(\\\\\\\"instanceMatrix\\\\\\\"===e&&s.instanceMatrix&&(r=s.instanceMatrix),\\\\\\\"instanceColor\\\\\\\"===e&&s.instanceColor&&(r=s.instanceColor)),void 0!==r){const e=r.normalized,o=r.itemSize,l=n.get(r);if(void 0===l)continue;const c=l.buffer,h=l.type,u=l.bytesPerElement;if(r.isInterleavedBufferAttribute){const n=r.data,l=n.stride,d=r.offset;if(n&&n.isInstancedInterleavedBuffer){for(let t=0;t<i.locationSize;t++)m(i.location+t,n.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)}else for(let t=0;t<i.locationSize;t++)_(i.location+t);t.bindBuffer(34962,c);for(let t=0;t<i.locationSize;t++)g(i.location+t,o/i.locationSize,h,e,l*u,(d+o/i.locationSize*t)*u)}else{if(r.isInstancedBufferAttribute){for(let t=0;t<i.locationSize;t++)m(i.location+t,r.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===a._maxInstanceCount&&(a._maxInstanceCount=r.meshPerAttribute*r.count)}else for(let t=0;t<i.locationSize;t++)_(i.location+t);t.bindBuffer(34962,c);for(let t=0;t<i.locationSize;t++)g(i.location+t,o/i.locationSize,h,e,o*u,o/i.locationSize*t*u)}}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i.location,n);break;case 3:t.vertexAttrib3fv(i.location,n);break;case 4:t.vertexAttrib4fv(i.location,n);break;default:t.vertexAttrib1fv(i.location,n)}}}}f()}(s,l,u,v),null!==y&&t.bindBuffer(34963,n.get(y).buffer))},reset:v,resetDefaultState:y,dispose:function(){v();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:_,disableUnusedAttributes:f}}function nA(t,e,n,i){const s=i.isWebGL2;let r;this.setMode=function(t){r=t},this.render=function(e,i){t.drawArrays(r,e,i),n.update(i,r,1)},this.renderInstances=function(i,o,a){if(0===a)return;let l,c;if(s)l=t,c=\\\\\\\"drawArraysInstanced\\\\\\\";else if(l=e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"),c=\\\\\\\"drawArraysInstancedANGLE\\\\\\\",null===l)return void console.error(\\\\\\\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");l[c](r,i,o,a),n.update(o,r,a)}}function iA(t,e,n){let i;function s(e){if(\\\\\\\"highp\\\\\\\"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return\\\\\\\"highp\\\\\\\";e=\\\\\\\"mediump\\\\\\\"}return\\\\\\\"mediump\\\\\\\"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?\\\\\\\"mediump\\\\\\\":\\\\\\\"lowp\\\\\\\"}const r=\\\\\\\"undefined\\\\\\\"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||\\\\\\\"undefined\\\\\\\"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let o=void 0!==n.precision?n.precision:\\\\\\\"highp\\\\\\\";const a=s(o);a!==o&&(console.warn(\\\\\\\"THREE.WebGLRenderer:\\\\\\\",o,\\\\\\\"not supported, using\\\\\\\",a,\\\\\\\"instead.\\\\\\\"),o=a);const l=r||e.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),_=t.getParameter(34921),m=t.getParameter(36347),f=t.getParameter(36348),g=t.getParameter(36349),v=u>0,y=r||e.has(\\\\\\\"OES_texture_float\\\\\\\");return{isWebGL2:r,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")){const n=e.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:s,precision:o,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:_,maxVertexUniforms:m,maxVaryings:f,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:r?t.getParameter(36183):0}}function sA(t){const e=this;let n=null,i=0,s=!1,r=!1;const o=new jT,a=new mb,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,s){const r=null!==t?t.length:0;let c=null;if(0!==r){if(c=l.value,!0!==s||null===c){const e=i+4*r,s=n.matrixWorldInverse;a.getNormalMatrix(s),(null===c||c.length<e)&&(c=new Float32Array(e));for(let e=0,n=i;e!==r;++e,n+=4)o.copy(t[e]).applyMatrix4(s,a),o.normal.toArray(c,n),c[n+3]=o.constant}l.value=c,l.needsUpdate=!0}return e.numPlanes=r,e.numIntersection=0,c}this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,r){const o=0!==t.length||e||0!==i||s;return s=e,n=h(t,r,0),i=t.length,o},this.beginShadows=function(){r=!0,h(null)},this.endShadows=function(){r=!1,c()},this.setState=function(e,o,a){const u=e.clippingPlanes,d=e.clipIntersection,p=e.clipShadows,_=t.get(e);if(!s||null===u||0===u.length||r&&!p)r?h(null):c();else{const t=r?0:i,e=4*t;let s=_.clippingState||null;l.value=s,s=h(u,o,e,a);for(let t=0;t!==e;++t)s[t]=n[t];_.clippingState=s,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function rA(t){let e=new WeakMap;function n(t,e){return e===fx?t.mapping=_x:e===gx&&(t.mapping=mx),t}function i(t){const n=t.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",i);const s=e.get(n);void 0!==s&&(e.delete(n),s.dispose())}return{get:function(s){if(s&&s.isTexture&&!1===s.isRenderTargetTexture){const r=s.mapping;if(r===fx||r===gx){if(e.has(s)){return n(e.get(s).texture,s.mapping)}{const r=s.image;if(r&&r.height>0){const o=t.getRenderTarget(),a=new UT(r.height/2);return a.fromEquirectangularTexture(t,s),e.set(s,a),t.setRenderTarget(o),s.addEventListener(\\\\\\\"dispose\\\\\\\",i),n(a.texture,s.mapping)}return null}}}return s},dispose:function(){e=new WeakMap}}}QT.physical={uniforms:PT([QT.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new _b(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenTint:{value:new $w(0)},sheenRoughness:{value:0},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new _b},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationTint:{value:new $w(0)},specularIntensity:{value:0},specularIntensityMap:{value:null},specularTint:{value:new $w(1,1,1)},specularTintMap:{value:null}}]),vertexShader:ZT.meshphysical_vert,fragmentShader:ZT.meshphysical_frag};class oA extends FT{constructor(t=-1,e=1,n=1,i=-1,s=.1,r=2e3){super(),this.type=\\\\\\\"OrthographicCamera\\\\\\\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=s,this.far=r,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,s,r){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=s,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let s=n-t,r=n+t,o=i+e,a=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=t*this.view.offsetX,r=s+t*this.view.width,o-=e*this.view.offsetY,a=o-e*this.view.height}this.projectionMatrix.makeOrthographic(s,r,o,a,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}oA.prototype.isOrthographicCamera=!0;class aA extends IT{constructor(t){super(t),this.type=\\\\\\\"RawShaderMaterial\\\\\\\"}}aA.prototype.isRawShaderMaterial=!0;const lA=Math.pow(2,8),cA=[.125,.215,.35,.446,.526,.582],hA=5+cA.length,uA=20,dA={[qx]:0,[Xx]:1,[$x]:2,3004:3,3005:4,3006:5,[Yx]:6},pA=new oA,{_lodPlanes:_A,_sizeLods:mA,_sigmas:fA}=AA(),gA=new $w;let vA=null;const yA=(1+Math.sqrt(5))/2,xA=1/yA,bA=[new Sb(1,1,1),new Sb(-1,1,1),new Sb(1,1,-1),new Sb(-1,1,-1),new Sb(0,yA,xA),new Sb(0,yA,-xA),new Sb(xA,0,yA),new Sb(-xA,0,yA),new Sb(yA,xA,0),new Sb(-yA,xA,0)];class wA{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=function(t){const e=new Float32Array(t),n=new Sb(0,1,0);return new aA({name:\\\\\\\"SphericalGaussianBlur\\\\\\\",defines:{n:t},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n},inputEncoding:{value:dA[3e3]},outputEncoding:{value:dA[3e3]}},vertexShader:NA(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t\\\\t\\\\tuniform int samples;\\\\n\\\\t\\\\t\\\\tuniform float weights[ n ];\\\\n\\\\t\\\\t\\\\tuniform bool latitudinal;\\\\n\\\\t\\\\t\\\\tuniform float dTheta;\\\\n\\\\t\\\\t\\\\tuniform float mipInt;\\\\n\\\\t\\\\t\\\\tuniform vec3 poleAxis;\\\\n\\\\n\\\\t\\\\t\\\\t${LA()}\\\\n\\\\n\\\\t\\\\t\\\\t#define ENVMAP_TYPE_CUBE_UV\\\\n\\\\t\\\\t\\\\t#include <cube_uv_reflection_fragment>\\\\n\\\\n\\\\t\\\\t\\\\tvec3 getSample( float theta, vec3 axis ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat cosTheta = cos( theta );\\\\n\\\\t\\\\t\\\\t\\\\t// Rodrigues' axis-angle rotation\\\\n\\\\t\\\\t\\\\t\\\\tvec3 sampleDirection = vOutputDirection * cosTheta\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ cross( axis, vOutputDirection ) * sin( theta )\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\taxis = normalize( axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfor ( int i = 1; i < n; i++ ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ( i >= samples ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat theta = dTheta * float( i );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:0,depthTest:!1,depthWrite:!1})}(uA),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){vA=this._renderer.getRenderTarget();const s=this._allocateTargets();return this._sceneToCubeUV(t,n,i,s),e>0&&this._blur(s,0,0,e),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=CA(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=SA(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let t=0;t<_A.length;t++)_A[t].dispose()}_cleanup(t){this._pingPongRenderTarget.dispose(),this._renderer.setRenderTarget(vA),t.scissorTest=!1,EA(t,0,0,t.width,t.height)}_fromTexture(t){vA=this._renderer.getRenderTarget();const e=this._allocateTargets(t);return this._textureToCubeUV(t,e),this._applyPMREM(e),this._cleanup(e),e}_allocateTargets(t){const e={magFilter:Tx,minFilter:Tx,generateMipmaps:!1,type:Nx,format:1023,encoding:TA(t)?t.encoding:$x,depthBuffer:!1},n=MA(e);return n.depthBuffer=!t,this._pingPongRenderTarget=MA(e),n}_compileMaterial(t){const e=new CT(_A[0],t);this._renderer.compile(e,pA)}_sceneToCubeUV(t,e,n,i){const s=new DT(90,1,e,n),r=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],a=this._renderer,l=a.autoClear,c=a.outputEncoding,h=a.toneMapping;a.getClearColor(gA),a.toneMapping=0,a.outputEncoding=qx,a.autoClear=!1;const u=new Jw({name:\\\\\\\"PMREM.Background\\\\\\\",side:1,depthWrite:!1,depthTest:!1}),d=new CT(new LT,u);let p=!1;const _=t.background;_?_.isColor&&(u.color.copy(_),t.background=null,p=!0):(u.color.copy(gA),p=!0);for(let e=0;e<6;e++){const n=e%3;0==n?(s.up.set(0,r[e],0),s.lookAt(o[e],0,0)):1==n?(s.up.set(0,0,r[e]),s.lookAt(0,o[e],0)):(s.up.set(0,r[e],0),s.lookAt(0,0,o[e])),EA(i,n*lA,e>2?lA:0,lA,lA),a.setRenderTarget(i),p&&a.render(d,s),a.render(t,s)}d.geometry.dispose(),d.material.dispose(),a.toneMapping=h,a.outputEncoding=c,a.autoClear=l,t.background=_}_setEncoding(t,e){!0===this._renderer.capabilities.isWebGL2&&e.format===Dx&&e.type===Nx&&e.encoding===Xx?t.value=dA[3e3]:t.value=dA[e.encoding]}_textureToCubeUV(t,e){const n=this._renderer;t.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=CA()):null==this._equirectShader&&(this._equirectShader=SA());const i=t.isCubeTexture?this._cubemapShader:this._equirectShader,s=new CT(_A[0],i),r=i.uniforms;r.envMap.value=t,t.isCubeTexture||r.texelSize.value.set(1/t.image.width,1/t.image.height),this._setEncoding(r.inputEncoding,t),this._setEncoding(r.outputEncoding,e.texture),EA(e,0,0,3*lA,2*lA),n.setRenderTarget(e),n.render(s,pA)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;e<hA;e++){const n=Math.sqrt(fA[e]*fA[e]-fA[e-1]*fA[e-1]),i=bA[(e-1)%bA.length];this._blur(t,e-1,e,n,i)}e.autoClear=n}_blur(t,e,n,i,s){const r=this._pingPongRenderTarget;this._halfBlur(t,r,e,n,i,\\\\\\\"latitudinal\\\\\\\",s),this._halfBlur(r,t,n,n,i,\\\\\\\"longitudinal\\\\\\\",s)}_halfBlur(t,e,n,i,s,r,o){const a=this._renderer,l=this._blurMaterial;\\\\\\\"latitudinal\\\\\\\"!==r&&\\\\\\\"longitudinal\\\\\\\"!==r&&console.error(\\\\\\\"blur direction must be either latitudinal or longitudinal!\\\\\\\");const c=new CT(_A[i],l),h=l.uniforms,u=mA[n]-1,d=isFinite(s)?Math.PI/(2*u):2*Math.PI/39,p=s/d,_=isFinite(s)?1+Math.floor(3*p):uA;_>uA&&console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${_} samples when the maximum is set to 20`);const m=[];let f=0;for(let t=0;t<uA;++t){const e=t/p,n=Math.exp(-e*e/2);m.push(n),0==t?f+=n:t<_&&(f+=2*n)}for(let t=0;t<m.length;t++)m[t]=m[t]/f;h.envMap.value=t.texture,h.samples.value=_,h.weights.value=m,h.latitudinal.value=\\\\\\\"latitudinal\\\\\\\"===r,o&&(h.poleAxis.value=o),h.dTheta.value=d,h.mipInt.value=8-n,this._setEncoding(h.inputEncoding,t.texture),this._setEncoding(h.outputEncoding,t.texture);const g=mA[i];EA(e,3*Math.max(0,lA-2*g),(0===i?0:2*lA)+2*g*(i>4?i-8+4:0),3*g,2*g),a.setRenderTarget(e),a.render(c,pA)}}function TA(t){return void 0!==t&&t.type===Nx&&(t.encoding===qx||t.encoding===Xx||t.encoding===Yx)}function AA(){const t=[],e=[],n=[];let i=8;for(let s=0;s<hA;s++){const r=Math.pow(2,i);e.push(r);let o=1/r;s>4?o=cA[s-8+4-1]:0==s&&(o=0),n.push(o);const a=1/(r-1),l=-a/2,c=1+a/2,h=[l,l,c,l,c,c,l,l,c,c,l,c],u=6,d=6,p=3,_=2,m=1,f=new Float32Array(p*d*u),g=new Float32Array(_*d*u),v=new Float32Array(m*d*u);for(let t=0;t<u;t++){const e=t%3*2/3-1,n=t>2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];f.set(i,p*d*t),g.set(h,_*d*t);const s=[t,t,t,t,t,t];v.set(s,m*d*t)}const y=new hT;y.setAttribute(\\\\\\\"position\\\\\\\",new Qw(f,p)),y.setAttribute(\\\\\\\"uv\\\\\\\",new Qw(g,_)),y.setAttribute(\\\\\\\"faceIndex\\\\\\\",new Qw(v,m)),t.push(y),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function MA(t){const e=new Ab(3*lA,3*lA,t);return e.texture.mapping=vx,e.texture.name=\\\\\\\"PMREM.cubeUv\\\\\\\",e.scissorTest=!0,e}function EA(t,e,n,i,s){t.viewport.set(e,n,i,s),t.scissor.set(e,n,i,s)}function SA(){const t=new _b(1,1);return new aA({name:\\\\\\\"EquirectangularToCubeUV\\\\\\\",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:dA[3e3]},outputEncoding:{value:dA[3e3]}},vertexShader:NA(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t\\\\t\\\\tuniform vec2 texelSize;\\\\n\\\\n\\\\t\\\\t\\\\t${LA()}\\\\n\\\\n\\\\t\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 outputDirection = normalize( vOutputDirection );\\\\n\\\\t\\\\t\\\\t\\\\tvec2 uv = equirectUv( outputDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec2 f = fract( uv / texelSize - 0.5 );\\\\n\\\\t\\\\t\\\\t\\\\tuv -= f * texelSize;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.x += texelSize.x;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.y += texelSize.y;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.x -= texelSize.x;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tm = mix( tl, tr, f.x );\\\\n\\\\t\\\\t\\\\t\\\\tvec3 bm = mix( bl, br, f.x );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = mix( tm, bm, f.y );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:0,depthTest:!1,depthWrite:!1})}function CA(){return new aA({name:\\\\\\\"CubemapToCubeUV\\\\\\\",uniforms:{envMap:{value:null},inputEncoding:{value:dA[3e3]},outputEncoding:{value:dA[3e3]}},vertexShader:NA(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform samplerCube envMap;\\\\n\\\\n\\\\t\\\\t\\\\t${LA()}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:0,depthTest:!1,depthWrite:!1})}function NA(){return\\\\\\\"\\\\n\\\\n\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\tattribute vec3 position;\\\\n\\\\t\\\\tattribute vec2 uv;\\\\n\\\\t\\\\tattribute float faceIndex;\\\\n\\\\n\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t// RH coordinate system; PMREM face-indexing convention\\\\n\\\\t\\\\tvec3 getDirection( vec2 uv, float face ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = 2.0 * uv - 1.0;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 direction = vec3( uv, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\tif ( face == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.zyx; // ( 1, v, u ) pos x\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 1.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.xzy;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 2.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 3.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.zyx;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 4.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.xzy;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 5.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\treturn direction;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvOutputDirection = getDirection( uv, faceIndex );\\\\n\\\\t\\\\t\\\\tgl_Position = vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\\\\"}function LA(){return\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform int inputEncoding;\\\\n\\\\t\\\\tuniform int outputEncoding;\\\\n\\\\n\\\\t\\\\t#include <encodings_pars_fragment>\\\\n\\\\n\\\\t\\\\tvec4 inputTexelToLinear( vec4 value ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( inputEncoding == 0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn value;\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 1 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn sRGBToLinear( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 2 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBEToLinear( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 3 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBMToLinear( value, 7.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 4 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBMToLinear( value, 16.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 5 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBDToLinear( value, 256.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn GammaToLinear( value, 2.2 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec4 linearToOutputTexel( vec4 value ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( outputEncoding == 0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn value;\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 1 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearTosRGB( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 2 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBE( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 3 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBM( value, 7.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 4 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBM( value, 16.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 5 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBD( value, 256.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToGamma( value, 2.2 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec4 envMapTexelToLinear( vec4 color ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn inputTexelToLinear( color );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\\\\"}function OA(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",i);const s=e.get(n);void 0!==s&&(e.delete(n),s.dispose())}return{get:function(s){if(s&&s.isTexture&&!1===s.isRenderTargetTexture){const r=s.mapping,o=r===fx||r===gx,a=r===_x||r===mx;if(o||a){if(e.has(s))return e.get(s).texture;{const r=s.image;if(o&&r&&r.height>0||a&&r&&function(t){let e=0;const n=6;for(let i=0;i<n;i++)void 0!==t[i]&&e++;return e===n}(r)){const r=t.getRenderTarget();null===n&&(n=new wA(t));const a=o?n.fromEquirectangular(s):n.fromCubemap(s);return e.set(s,a),t.setRenderTarget(r),s.addEventListener(\\\\\\\"dispose\\\\\\\",i),a.texture}return null}}}return s},dispose:function(){e=new WeakMap,null!==n&&(n.dispose(),n=null)}}}function PA(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case\\\\\\\"WEBGL_depth_texture\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_depth_texture\\\\\\\")||t.getExtension(\\\\\\\"MOZ_WEBGL_depth_texture\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_depth_texture\\\\\\\");break;case\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\":i=t.getExtension(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")||t.getExtension(\\\\\\\"MOZ_EXT_texture_filter_anisotropic\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_EXT_texture_filter_anisotropic\\\\\\\");break;case\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\")||t.getExtension(\\\\\\\"MOZ_WEBGL_compressed_texture_s3tc\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_s3tc\\\\\\\");break;case\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_pvrtc\\\\\\\");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n(\\\\\\\"EXT_color_buffer_float\\\\\\\"):(n(\\\\\\\"WEBGL_depth_texture\\\\\\\"),n(\\\\\\\"OES_texture_float\\\\\\\"),n(\\\\\\\"OES_texture_half_float\\\\\\\"),n(\\\\\\\"OES_texture_half_float_linear\\\\\\\"),n(\\\\\\\"OES_standard_derivatives\\\\\\\"),n(\\\\\\\"OES_element_index_uint\\\\\\\"),n(\\\\\\\"OES_vertex_array_object\\\\\\\"),n(\\\\\\\"ANGLE_instanced_arrays\\\\\\\")),n(\\\\\\\"OES_texture_float_linear\\\\\\\"),n(\\\\\\\"EXT_color_buffer_half_float\\\\\\\")},get:function(t){const e=n(t);return null===e&&console.warn(\\\\\\\"THREE.WebGLRenderer: \\\\\\\"+t+\\\\\\\" extension not supported.\\\\\\\"),e}}}function RA(t,e,n,i){const s={},r=new WeakMap;function o(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener(\\\\\\\"dispose\\\\\\\",o),delete s[a.id];const l=r.get(a);l&&(e.remove(l),r.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,s=t.attributes.position;let o=0;if(null!==i){const t=i.array;o=i.version;for(let e=0,i=t.length;e<i;e+=3){const i=t[e+0],s=t[e+1],r=t[e+2];n.push(i,s,s,r,r,i)}}else{const t=s.array;o=s.version;for(let e=0,i=t.length/3-1;e<i;e+=3){const t=e+0,i=e+1,s=e+2;n.push(t,i,i,s,s,t)}}const a=new(fb(n)>65535?eT:tT)(n,1);a.version=o;const l=r.get(t);l&&e.remove(l),r.set(t,a)}return{get:function(t,e){return!0===s[e.id]||(e.addEventListener(\\\\\\\"dispose\\\\\\\",o),s[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t<i;t++)e.update(n[t],34962)}},getWireframeAttribute:function(t){const e=r.get(t);if(e){const n=t.index;null!==n&&e.version<n.version&&a(t)}else a(t);return r.get(t)}}}function IA(t,e,n,i){const s=i.isWebGL2;let r,o,a;this.setMode=function(t){r=t},this.setIndex=function(t){o=t.type,a=t.bytesPerElement},this.render=function(e,i){t.drawElements(r,i,o,e*a),n.update(i,r,1)},this.renderInstances=function(i,l,c){if(0===c)return;let h,u;if(s)h=t,u=\\\\\\\"drawElementsInstanced\\\\\\\";else if(h=e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"),u=\\\\\\\"drawElementsInstancedANGLE\\\\\\\",null===h)return void console.error(\\\\\\\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");h[u](r,l,o,i*a,c),n.update(l,r,c)}}function FA(t){const e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(t,n,i){switch(e.calls++,n){case 4:e.triangles+=i*(t/3);break;case 1:e.lines+=i*(t/2);break;case 3:e.lines+=i*(t-1);break;case 2:e.lines+=i*t;break;case 0:e.points+=i*t;break;default:console.error(\\\\\\\"THREE.WebGLInfo: Unknown draw mode:\\\\\\\",n)}}}}class DA extends bb{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=Tx,this.minFilter=Tx,this.wrapR=bx,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}function BA(t,e){return t[0]-e[0]}function zA(t,e){return Math.abs(e[1])-Math.abs(t[1])}function kA(t,e){let n=1;const i=e.isInterleavedBufferAttribute?e.data.array:e.array;i instanceof Int8Array?n=127:i instanceof Int16Array?n=32767:i instanceof Int32Array?n=2147483647:console.error(\\\\\\\"THREE.WebGLMorphtargets: Unsupported morph attribute data type: \\\\\\\",i),t.divideScalar(n)}function UA(t,e,n){const i={},s=new Float32Array(8),r=new WeakMap,o=new Sb,a=[];for(let t=0;t<8;t++)a[t]=[t,0];return{update:function(l,c,h,u){const d=l.morphTargetInfluences;if(!0===e.isWebGL2){const i=c.morphAttributes.position.length;let s=r.get(c);if(void 0===s||s.count!==i){void 0!==s&&s.texture.dispose();const t=void 0!==c.morphAttributes.normal,n=c.morphAttributes.position,a=c.morphAttributes.normal||[],l=!0===t?2:1;let h=c.attributes.position.count*l,u=1;h>e.maxTextureSize&&(u=Math.ceil(h/e.maxTextureSize),h=e.maxTextureSize);const d=new Float32Array(h*u*4*i),p=new DA(d,h,u,i);p.format=Dx,p.type=Px;const _=4*l;for(let e=0;e<i;e++){const i=n[e],s=a[e],r=h*u*4*e;for(let e=0;e<i.count;e++){o.fromBufferAttribute(i,e),!0===i.normalized&&kA(o,i);const n=e*_;d[r+n+0]=o.x,d[r+n+1]=o.y,d[r+n+2]=o.z,d[r+n+3]=0,!0===t&&(o.fromBufferAttribute(s,e),!0===s.normalized&&kA(o,s),d[r+n+4]=o.x,d[r+n+5]=o.y,d[r+n+6]=o.z,d[r+n+7]=0)}}s={count:i,texture:p,size:new _b(h,u)},r.set(c,s)}let a=0;for(let t=0;t<d.length;t++)a+=d[t];const l=c.morphTargetsRelative?1:1-a;u.getUniforms().setValue(t,\\\\\\\"morphTargetBaseInfluence\\\\\\\",l),u.getUniforms().setValue(t,\\\\\\\"morphTargetInfluences\\\\\\\",d),u.getUniforms().setValue(t,\\\\\\\"morphTargetsTexture\\\\\\\",s.texture,n),u.getUniforms().setValue(t,\\\\\\\"morphTargetsTextureSize\\\\\\\",s.size)}else{const e=void 0===d?0:d.length;let n=i[c.id];if(void 0===n||n.length!==e){n=[];for(let t=0;t<e;t++)n[t]=[t,0];i[c.id]=n}for(let t=0;t<e;t++){const e=n[t];e[0]=t,e[1]=d[t]}n.sort(zA);for(let t=0;t<8;t++)t<e&&n[t][1]?(a[t][0]=n[t][0],a[t][1]=n[t][1]):(a[t][0]=Number.MAX_SAFE_INTEGER,a[t][1]=0);a.sort(BA);const r=c.morphAttributes.position,o=c.morphAttributes.normal;let l=0;for(let t=0;t<8;t++){const e=a[t],n=e[0],i=e[1];n!==Number.MAX_SAFE_INTEGER&&i?(r&&c.getAttribute(\\\\\\\"morphTarget\\\\\\\"+t)!==r[n]&&c.setAttribute(\\\\\\\"morphTarget\\\\\\\"+t,r[n]),o&&c.getAttribute(\\\\\\\"morphNormal\\\\\\\"+t)!==o[n]&&c.setAttribute(\\\\\\\"morphNormal\\\\\\\"+t,o[n]),s[t]=i,l+=i):(r&&!0===c.hasAttribute(\\\\\\\"morphTarget\\\\\\\"+t)&&c.deleteAttribute(\\\\\\\"morphTarget\\\\\\\"+t),o&&!0===c.hasAttribute(\\\\\\\"morphNormal\\\\\\\"+t)&&c.deleteAttribute(\\\\\\\"morphNormal\\\\\\\"+t),s[t]=0)}const h=c.morphTargetsRelative?1:1-l;u.getUniforms().setValue(t,\\\\\\\"morphTargetBaseInfluence\\\\\\\",h),u.getUniforms().setValue(t,\\\\\\\"morphTargetInfluences\\\\\\\",s)}}}}function GA(t,e,n,i){let s=new WeakMap;function r(t){const e=t.target;e.removeEventListener(\\\\\\\"dispose\\\\\\\",r),n.remove(e.instanceMatrix),null!==e.instanceColor&&n.remove(e.instanceColor)}return{update:function(t){const o=i.render.frame,a=t.geometry,l=e.get(t,a);return s.get(l)!==o&&(e.update(l),s.set(l,o)),t.isInstancedMesh&&(!1===t.hasEventListener(\\\\\\\"dispose\\\\\\\",r)&&t.addEventListener(\\\\\\\"dispose\\\\\\\",r),n.update(t.instanceMatrix,34962),null!==t.instanceColor&&n.update(t.instanceColor,34962)),l},dispose:function(){s=new WeakMap}}}DA.prototype.isDataTexture2DArray=!0;class VA extends bb{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=Tx,this.minFilter=Tx,this.wrapR=bx,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}VA.prototype.isDataTexture3D=!0;const HA=new bb,jA=new DA,WA=new VA,qA=new kT,XA=[],YA=[],$A=new Float32Array(16),JA=new Float32Array(9),ZA=new Float32Array(4);function KA(t,e,n){const i=t[0];if(i<=0||i>0)return t;const s=e*n;let r=XA[s];if(void 0===r&&(r=new Float32Array(s),XA[s]=r),0!==e){i.toArray(r,0);for(let i=1,s=0;i!==e;++i)s+=n,t[i].toArray(r,s)}return r}function QA(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n<i;n++)if(t[n]!==e[n])return!1;return!0}function tM(t,e){for(let n=0,i=e.length;n<i;n++)t[n]=e[n]}function eM(t,e){let n=YA[e];void 0===n&&(n=new Int32Array(e),YA[e]=n);for(let i=0;i!==e;++i)n[i]=t.allocateTextureUnit();return n}function nM(t,e){const n=this.cache;n[0]!==e&&(t.uniform1f(this.addr,e),n[0]=e)}function iM(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y||(t.uniform2f(this.addr,e.x,e.y),n[0]=e.x,n[1]=e.y);else{if(QA(n,e))return;t.uniform2fv(this.addr,e),tM(n,e)}}function sM(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z||(t.uniform3f(this.addr,e.x,e.y,e.z),n[0]=e.x,n[1]=e.y,n[2]=e.z);else if(void 0!==e.r)n[0]===e.r&&n[1]===e.g&&n[2]===e.b||(t.uniform3f(this.addr,e.r,e.g,e.b),n[0]=e.r,n[1]=e.g,n[2]=e.b);else{if(QA(n,e))return;t.uniform3fv(this.addr,e),tM(n,e)}}function rM(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z&&n[3]===e.w||(t.uniform4f(this.addr,e.x,e.y,e.z,e.w),n[0]=e.x,n[1]=e.y,n[2]=e.z,n[3]=e.w);else{if(QA(n,e))return;t.uniform4fv(this.addr,e),tM(n,e)}}function oM(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(QA(n,e))return;t.uniformMatrix2fv(this.addr,!1,e),tM(n,e)}else{if(QA(n,i))return;ZA.set(i),t.uniformMatrix2fv(this.addr,!1,ZA),tM(n,i)}}function aM(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(QA(n,e))return;t.uniformMatrix3fv(this.addr,!1,e),tM(n,e)}else{if(QA(n,i))return;JA.set(i),t.uniformMatrix3fv(this.addr,!1,JA),tM(n,i)}}function lM(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(QA(n,e))return;t.uniformMatrix4fv(this.addr,!1,e),tM(n,e)}else{if(QA(n,i))return;$A.set(i),t.uniformMatrix4fv(this.addr,!1,$A),tM(n,i)}}function cM(t,e){const n=this.cache;n[0]!==e&&(t.uniform1i(this.addr,e),n[0]=e)}function hM(t,e){const n=this.cache;QA(n,e)||(t.uniform2iv(this.addr,e),tM(n,e))}function uM(t,e){const n=this.cache;QA(n,e)||(t.uniform3iv(this.addr,e),tM(n,e))}function dM(t,e){const n=this.cache;QA(n,e)||(t.uniform4iv(this.addr,e),tM(n,e))}function pM(t,e){const n=this.cache;n[0]!==e&&(t.uniform1ui(this.addr,e),n[0]=e)}function _M(t,e){const n=this.cache;QA(n,e)||(t.uniform2uiv(this.addr,e),tM(n,e))}function mM(t,e){const n=this.cache;QA(n,e)||(t.uniform3uiv(this.addr,e),tM(n,e))}function fM(t,e){const n=this.cache;QA(n,e)||(t.uniform4uiv(this.addr,e),tM(n,e))}function gM(t,e,n){const i=this.cache,s=n.allocateTextureUnit();i[0]!==s&&(t.uniform1i(this.addr,s),i[0]=s),n.safeSetTexture2D(e||HA,s)}function vM(t,e,n){const i=this.cache,s=n.allocateTextureUnit();i[0]!==s&&(t.uniform1i(this.addr,s),i[0]=s),n.setTexture3D(e||WA,s)}function yM(t,e,n){const i=this.cache,s=n.allocateTextureUnit();i[0]!==s&&(t.uniform1i(this.addr,s),i[0]=s),n.safeSetTextureCube(e||qA,s)}function xM(t,e,n){const i=this.cache,s=n.allocateTextureUnit();i[0]!==s&&(t.uniform1i(this.addr,s),i[0]=s),n.setTexture2DArray(e||jA,s)}function bM(t,e){t.uniform1fv(this.addr,e)}function wM(t,e){const n=KA(e,this.size,2);t.uniform2fv(this.addr,n)}function TM(t,e){const n=KA(e,this.size,3);t.uniform3fv(this.addr,n)}function AM(t,e){const n=KA(e,this.size,4);t.uniform4fv(this.addr,n)}function MM(t,e){const n=KA(e,this.size,4);t.uniformMatrix2fv(this.addr,!1,n)}function EM(t,e){const n=KA(e,this.size,9);t.uniformMatrix3fv(this.addr,!1,n)}function SM(t,e){const n=KA(e,this.size,16);t.uniformMatrix4fv(this.addr,!1,n)}function CM(t,e){t.uniform1iv(this.addr,e)}function NM(t,e){t.uniform2iv(this.addr,e)}function LM(t,e){t.uniform3iv(this.addr,e)}function OM(t,e){t.uniform4iv(this.addr,e)}function PM(t,e){t.uniform1uiv(this.addr,e)}function RM(t,e){t.uniform2uiv(this.addr,e)}function IM(t,e){t.uniform3uiv(this.addr,e)}function FM(t,e){t.uniform4uiv(this.addr,e)}function DM(t,e,n){const i=e.length,s=eM(n,i);t.uniform1iv(this.addr,s);for(let t=0;t!==i;++t)n.safeSetTexture2D(e[t]||HA,s[t])}function BM(t,e,n){const i=e.length,s=eM(n,i);t.uniform1iv(this.addr,s);for(let t=0;t!==i;++t)n.safeSetTextureCube(e[t]||qA,s[t])}function zM(t,e,n){this.id=t,this.addr=n,this.cache=[],this.setValue=function(t){switch(t){case 5126:return nM;case 35664:return iM;case 35665:return sM;case 35666:return rM;case 35674:return oM;case 35675:return aM;case 35676:return lM;case 5124:case 35670:return cM;case 35667:case 35671:return hM;case 35668:case 35672:return uM;case 35669:case 35673:return dM;case 5125:return pM;case 36294:return _M;case 36295:return mM;case 36296:return fM;case 35678:case 36198:case 36298:case 36306:case 35682:return gM;case 35679:case 36299:case 36307:return vM;case 35680:case 36300:case 36308:case 36293:return yM;case 36289:case 36303:case 36311:case 36292:return xM}}(e.type)}function kM(t,e,n){this.id=t,this.addr=n,this.cache=[],this.size=e.size,this.setValue=function(t){switch(t){case 5126:return bM;case 35664:return wM;case 35665:return TM;case 35666:return AM;case 35674:return MM;case 35675:return EM;case 35676:return SM;case 5124:case 35670:return CM;case 35667:case 35671:return NM;case 35668:case 35672:return LM;case 35669:case 35673:return OM;case 5125:return PM;case 36294:return RM;case 36295:return IM;case 36296:return FM;case 35678:case 36198:case 36298:case 36306:case 35682:return DM;case 35680:case 36300:case 36308:case 36293:return BM}}(e.type)}function UM(t){this.id=t,this.seq=[],this.map={}}kM.prototype.updateCache=function(t){const e=this.cache;t instanceof Float32Array&&e.length!==t.length&&(this.cache=new Float32Array(t.length)),tM(e,t)},UM.prototype.setValue=function(t,e,n){const i=this.seq;for(let s=0,r=i.length;s!==r;++s){const r=i[s];r.setValue(t,e[r.id],n)}};const GM=/(\\\\w+)(\\\\])?(\\\\[|\\\\.)?/g;function VM(t,e){t.seq.push(e),t.map[e.id]=e}function HM(t,e,n){const i=t.name,s=i.length;for(GM.lastIndex=0;;){const r=GM.exec(i),o=GM.lastIndex;let a=r[1];const l=\\\\\\\"]\\\\\\\"===r[2],c=r[3];if(l&&(a|=0),void 0===c||\\\\\\\"[\\\\\\\"===c&&o+2===s){VM(n,void 0===c?new zM(a,t,e):new kM(a,t,e));break}{let t=n.map[a];void 0===t&&(t=new UM(a),VM(n,t)),n=t}}}function jM(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,35718);for(let i=0;i<n;++i){const n=t.getActiveUniform(e,i);HM(n,t.getUniformLocation(e,n.name),this)}}function WM(t,e,n){const i=t.createShader(e);return t.shaderSource(i,n),t.compileShader(i),i}jM.prototype.setValue=function(t,e,n,i){const s=this.map[e];void 0!==s&&s.setValue(t,n,i)},jM.prototype.setOptional=function(t,e,n){const i=e[n];void 0!==i&&this.setValue(t,n,i)},jM.upload=function(t,e,n,i){for(let s=0,r=e.length;s!==r;++s){const r=e[s],o=n[r.id];!1!==o.needsUpdate&&r.setValue(t,o.value,i)}},jM.seqWithValue=function(t,e){const n=[];for(let i=0,s=t.length;i!==s;++i){const s=t[i];s.id in e&&n.push(s)}return n};let qM=0;function XM(t){switch(t){case qx:return[\\\\\\\"Linear\\\\\\\",\\\\\\\"( value )\\\\\\\"];case Xx:return[\\\\\\\"sRGB\\\\\\\",\\\\\\\"( value )\\\\\\\"];case $x:return[\\\\\\\"RGBE\\\\\\\",\\\\\\\"( value )\\\\\\\"];case 3004:return[\\\\\\\"RGBM\\\\\\\",\\\\\\\"( value, 7.0 )\\\\\\\"];case 3005:return[\\\\\\\"RGBM\\\\\\\",\\\\\\\"( value, 16.0 )\\\\\\\"];case 3006:return[\\\\\\\"RGBD\\\\\\\",\\\\\\\"( value, 256.0 )\\\\\\\"];case Yx:return[\\\\\\\"Gamma\\\\\\\",\\\\\\\"( value, float( GAMMA_FACTOR ) )\\\\\\\"];case 3003:return[\\\\\\\"LogLuv\\\\\\\",\\\\\\\"( value )\\\\\\\"];default:return console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported encoding:\\\\\\\",t),[\\\\\\\"Linear\\\\\\\",\\\\\\\"( value )\\\\\\\"]}}function YM(t,e,n){const i=t.getShaderParameter(e,35713),s=t.getShaderInfoLog(e).trim();return i&&\\\\\\\"\\\\\\\"===s?\\\\\\\"\\\\\\\":n.toUpperCase()+\\\\\\\"\\\\n\\\\n\\\\\\\"+s+\\\\\\\"\\\\n\\\\n\\\\\\\"+function(t){const e=t.split(\\\\\\\"\\\\n\\\\\\\");for(let t=0;t<e.length;t++)e[t]=t+1+\\\\\\\": \\\\\\\"+e[t];return e.join(\\\\\\\"\\\\n\\\\\\\")}(t.getShaderSource(e))}function $M(t,e){const n=XM(e);return\\\\\\\"vec4 \\\\\\\"+t+\\\\\\\"( vec4 value ) { return \\\\\\\"+n[0]+\\\\\\\"ToLinear\\\\\\\"+n[1]+\\\\\\\"; }\\\\\\\"}function JM(t,e){const n=XM(e);return\\\\\\\"vec4 \\\\\\\"+t+\\\\\\\"( vec4 value ) { return LinearTo\\\\\\\"+n[0]+n[1]+\\\\\\\"; }\\\\\\\"}function ZM(t,e){let n;switch(e){case 1:n=\\\\\\\"Linear\\\\\\\";break;case 2:n=\\\\\\\"Reinhard\\\\\\\";break;case 3:n=\\\\\\\"OptimizedCineon\\\\\\\";break;case 4:n=\\\\\\\"ACESFilmic\\\\\\\";break;case 5:n=\\\\\\\"Custom\\\\\\\";break;default:console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported toneMapping:\\\\\\\",e),n=\\\\\\\"Linear\\\\\\\"}return\\\\\\\"vec3 \\\\\\\"+t+\\\\\\\"( vec3 color ) { return \\\\\\\"+n+\\\\\\\"ToneMapping( color ); }\\\\\\\"}function KM(t){return\\\\\\\"\\\\\\\"!==t}function QM(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function tE(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const eE=/^[ \\\\t]*#include +<([\\\\w\\\\d./]+)>/gm;function nE(t){return t.replace(eE,iE)}function iE(t,e){const n=ZT[e];if(void 0===n)throw new Error(\\\\\\\"Can not resolve #include <\\\\\\\"+e+\\\\\\\">\\\\\\\");return nE(n)}const sE=/#pragma unroll_loop[\\\\s]+?for \\\\( int i \\\\= (\\\\d+)\\\\; i < (\\\\d+)\\\\; i \\\\+\\\\+ \\\\) \\\\{([\\\\s\\\\S]+?)(?=\\\\})\\\\}/g,rE=/#pragma unroll_loop_start\\\\s+for\\\\s*\\\\(\\\\s*int\\\\s+i\\\\s*=\\\\s*(\\\\d+)\\\\s*;\\\\s*i\\\\s*<\\\\s*(\\\\d+)\\\\s*;\\\\s*i\\\\s*\\\\+\\\\+\\\\s*\\\\)\\\\s*{([\\\\s\\\\S]+?)}\\\\s+#pragma unroll_loop_end/g;function oE(t){return t.replace(rE,lE).replace(sE,aE)}function aE(t,e,n,i){return console.warn(\\\\\\\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\\\\\\\"),lE(t,e,n,i)}function lE(t,e,n,i){let s=\\\\\\\"\\\\\\\";for(let t=parseInt(e);t<parseInt(n);t++)s+=i.replace(/\\\\[\\\\s*i\\\\s*\\\\]/g,\\\\\\\"[ \\\\\\\"+t+\\\\\\\" ]\\\\\\\").replace(/UNROLLED_LOOP_INDEX/g,t);return s}function cE(t){let e=\\\\\\\"precision \\\\\\\"+t.precision+\\\\\\\" float;\\\\nprecision \\\\\\\"+t.precision+\\\\\\\" int;\\\\\\\";return\\\\\\\"highp\\\\\\\"===t.precision?e+=\\\\\\\"\\\\n#define HIGH_PRECISION\\\\\\\":\\\\\\\"mediump\\\\\\\"===t.precision?e+=\\\\\\\"\\\\n#define MEDIUM_PRECISION\\\\\\\":\\\\\\\"lowp\\\\\\\"===t.precision&&(e+=\\\\\\\"\\\\n#define LOW_PRECISION\\\\\\\"),e}function hE(t,e,n,i){const s=t.getContext(),r=n.defines;let o=n.vertexShader,a=n.fragmentShader;const l=function(t){let e=\\\\\\\"SHADOWMAP_TYPE_BASIC\\\\\\\";return 1===t.shadowMapType?e=\\\\\\\"SHADOWMAP_TYPE_PCF\\\\\\\":2===t.shadowMapType?e=\\\\\\\"SHADOWMAP_TYPE_PCF_SOFT\\\\\\\":3===t.shadowMapType&&(e=\\\\\\\"SHADOWMAP_TYPE_VSM\\\\\\\"),e}(n),c=function(t){let e=\\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";if(t.envMap)switch(t.envMapMode){case _x:case mx:e=\\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";break;case vx:case yx:e=\\\\\\\"ENVMAP_TYPE_CUBE_UV\\\\\\\"}return e}(n),h=function(t){let e=\\\\\\\"ENVMAP_MODE_REFLECTION\\\\\\\";if(t.envMap)switch(t.envMapMode){case mx:case yx:e=\\\\\\\"ENVMAP_MODE_REFRACTION\\\\\\\"}return e}(n),u=function(t){let e=\\\\\\\"ENVMAP_BLENDING_NONE\\\\\\\";if(t.envMap)switch(t.combine){case 0:e=\\\\\\\"ENVMAP_BLENDING_MULTIPLY\\\\\\\";break;case 1:e=\\\\\\\"ENVMAP_BLENDING_MIX\\\\\\\";break;case 2:e=\\\\\\\"ENVMAP_BLENDING_ADD\\\\\\\"}return e}(n),d=t.gammaFactor>0?t.gammaFactor:1,p=n.isWebGL2?\\\\\\\"\\\\\\\":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||\\\\\\\"physical\\\\\\\"===t.shaderID?\\\\\\\"#extension GL_OES_standard_derivatives : enable\\\\\\\":\\\\\\\"\\\\\\\",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?\\\\\\\"#extension GL_EXT_frag_depth : enable\\\\\\\":\\\\\\\"\\\\\\\",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?\\\\\\\"#extension GL_EXT_draw_buffers : require\\\\\\\":\\\\\\\"\\\\\\\",(t.extensionShaderTextureLOD||t.envMap||t.transmission)&&t.rendererExtensionShaderTextureLod?\\\\\\\"#extension GL_EXT_shader_texture_lod : enable\\\\\\\":\\\\\\\"\\\\\\\"].filter(KM).join(\\\\\\\"\\\\n\\\\\\\")}(n),_=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push(\\\\\\\"#define \\\\\\\"+n+\\\\\\\" \\\\\\\"+i)}return e.join(\\\\\\\"\\\\n\\\\\\\")}(r),m=s.createProgram();let f,g,v=n.glslVersion?\\\\\\\"#version \\\\\\\"+n.glslVersion+\\\\\\\"\\\\n\\\\\\\":\\\\\\\"\\\\\\\";n.isRawShaderMaterial?(f=[_].filter(KM).join(\\\\\\\"\\\\n\\\\\\\"),f.length>0&&(f+=\\\\\\\"\\\\n\\\\\\\"),g=[p,_].filter(KM).join(\\\\\\\"\\\\n\\\\\\\"),g.length>0&&(g+=\\\\\\\"\\\\n\\\\\\\")):(f=[cE(n),\\\\\\\"#define SHADER_NAME \\\\\\\"+n.shaderName,_,n.instancing?\\\\\\\"#define USE_INSTANCING\\\\\\\":\\\\\\\"\\\\\\\",n.instancingColor?\\\\\\\"#define USE_INSTANCING_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.supportsVertexTextures?\\\\\\\"#define VERTEX_TEXTURES\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"#define GAMMA_FACTOR \\\\\\\"+d,\\\\\\\"#define MAX_BONES \\\\\\\"+n.maxBones,n.useFog&&n.fog?\\\\\\\"#define USE_FOG\\\\\\\":\\\\\\\"\\\\\\\",n.useFog&&n.fogExp2?\\\\\\\"#define FOG_EXP2\\\\\\\":\\\\\\\"\\\\\\\",n.map?\\\\\\\"#define USE_MAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define USE_ENVMAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+h:\\\\\\\"\\\\\\\",n.lightMap?\\\\\\\"#define USE_LIGHTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.aoMap?\\\\\\\"#define USE_AOMAP\\\\\\\":\\\\\\\"\\\\\\\",n.emissiveMap?\\\\\\\"#define USE_EMISSIVEMAP\\\\\\\":\\\\\\\"\\\\\\\",n.bumpMap?\\\\\\\"#define USE_BUMPMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap?\\\\\\\"#define USE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.objectSpaceNormalMap?\\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.tangentSpaceNormalMap?\\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatMap?\\\\\\\"#define USE_CLEARCOATMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatRoughnessMap?\\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatNormalMap?\\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.displacementMap&&n.supportsVertexTextures?\\\\\\\"#define USE_DISPLACEMENTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularMap?\\\\\\\"#define USE_SPECULARMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularIntensityMap?\\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularTintMap?\\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.roughnessMap?\\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.metalnessMap?\\\\\\\"#define USE_METALNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaMap?\\\\\\\"#define USE_ALPHAMAP\\\\\\\":\\\\\\\"\\\\\\\",n.transmission?\\\\\\\"#define USE_TRANSMISSION\\\\\\\":\\\\\\\"\\\\\\\",n.transmissionMap?\\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\":\\\\\\\"\\\\\\\",n.thicknessMap?\\\\\\\"#define USE_THICKNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.vertexTangents?\\\\\\\"#define USE_TANGENT\\\\\\\":\\\\\\\"\\\\\\\",n.vertexColors?\\\\\\\"#define USE_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.vertexAlphas?\\\\\\\"#define USE_COLOR_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.vertexUvs?\\\\\\\"#define USE_UV\\\\\\\":\\\\\\\"\\\\\\\",n.uvsVertexOnly?\\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\":\\\\\\\"\\\\\\\",n.flatShading?\\\\\\\"#define FLAT_SHADED\\\\\\\":\\\\\\\"\\\\\\\",n.skinning?\\\\\\\"#define USE_SKINNING\\\\\\\":\\\\\\\"\\\\\\\",n.useVertexTexture?\\\\\\\"#define BONE_TEXTURE\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets?\\\\\\\"#define USE_MORPHTARGETS\\\\\\\":\\\\\\\"\\\\\\\",n.morphNormals&&!1===n.flatShading?\\\\\\\"#define USE_MORPHNORMALS\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets&&n.isWebGL2?\\\\\\\"#define MORPHTARGETS_TEXTURE\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets&&n.isWebGL2?\\\\\\\"#define MORPHTARGETS_COUNT \\\\\\\"+n.morphTargetsCount:\\\\\\\"\\\\\\\",n.doubleSided?\\\\\\\"#define DOUBLE_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.flipSided?\\\\\\\"#define FLIP_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define USE_SHADOWMAP\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define \\\\\\\"+l:\\\\\\\"\\\\\\\",n.sizeAttenuation?\\\\\\\"#define USE_SIZEATTENUATION\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer?\\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?\\\\\\\"#define USE_LOGDEPTHBUF_EXT\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"uniform mat4 modelMatrix;\\\\\\\",\\\\\\\"uniform mat4 modelViewMatrix;\\\\\\\",\\\\\\\"uniform mat4 projectionMatrix;\\\\\\\",\\\\\\\"uniform mat4 viewMatrix;\\\\\\\",\\\\\\\"uniform mat3 normalMatrix;\\\\\\\",\\\\\\\"uniform vec3 cameraPosition;\\\\\\\",\\\\\\\"uniform bool isOrthographic;\\\\\\\",\\\\\\\"#ifdef USE_INSTANCING\\\\\\\",\\\\\\\"\\\\tattribute mat4 instanceMatrix;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#ifdef USE_INSTANCING_COLOR\\\\\\\",\\\\\\\"\\\\tattribute vec3 instanceColor;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"attribute vec3 position;\\\\\\\",\\\\\\\"attribute vec3 normal;\\\\\\\",\\\\\\\"attribute vec2 uv;\\\\\\\",\\\\\\\"#ifdef USE_TANGENT\\\\\\\",\\\\\\\"\\\\tattribute vec4 tangent;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\\\\",\\\\\\\"\\\\tattribute vec4 color;\\\\\\\",\\\\\\\"#elif defined( USE_COLOR )\\\\\\\",\\\\\\\"\\\\tattribute vec3 color;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget0;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget1;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget2;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget3;\\\\\\\",\\\\\\\"\\\\t#ifdef USE_MORPHNORMALS\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal0;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal1;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal2;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal3;\\\\\\\",\\\\\\\"\\\\t#else\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget4;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget5;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget6;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget7;\\\\\\\",\\\\\\\"\\\\t#endif\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#ifdef USE_SKINNING\\\\\\\",\\\\\\\"\\\\tattribute vec4 skinIndex;\\\\\\\",\\\\\\\"\\\\tattribute vec4 skinWeight;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"\\\\n\\\\\\\"].filter(KM).join(\\\\\\\"\\\\n\\\\\\\"),g=[p,cE(n),\\\\\\\"#define SHADER_NAME \\\\\\\"+n.shaderName,_,\\\\\\\"#define GAMMA_FACTOR \\\\\\\"+d,n.useFog&&n.fog?\\\\\\\"#define USE_FOG\\\\\\\":\\\\\\\"\\\\\\\",n.useFog&&n.fogExp2?\\\\\\\"#define FOG_EXP2\\\\\\\":\\\\\\\"\\\\\\\",n.map?\\\\\\\"#define USE_MAP\\\\\\\":\\\\\\\"\\\\\\\",n.matcap?\\\\\\\"#define USE_MATCAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define USE_ENVMAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+c:\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+h:\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+u:\\\\\\\"\\\\\\\",n.lightMap?\\\\\\\"#define USE_LIGHTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.aoMap?\\\\\\\"#define USE_AOMAP\\\\\\\":\\\\\\\"\\\\\\\",n.emissiveMap?\\\\\\\"#define USE_EMISSIVEMAP\\\\\\\":\\\\\\\"\\\\\\\",n.bumpMap?\\\\\\\"#define USE_BUMPMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap?\\\\\\\"#define USE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.objectSpaceNormalMap?\\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.tangentSpaceNormalMap?\\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoat?\\\\\\\"#define USE_CLEARCOAT\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatMap?\\\\\\\"#define USE_CLEARCOATMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatRoughnessMap?\\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatNormalMap?\\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularMap?\\\\\\\"#define USE_SPECULARMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularIntensityMap?\\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularTintMap?\\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.roughnessMap?\\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.metalnessMap?\\\\\\\"#define USE_METALNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaMap?\\\\\\\"#define USE_ALPHAMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaTest?\\\\\\\"#define USE_ALPHATEST\\\\\\\":\\\\\\\"\\\\\\\",n.sheen?\\\\\\\"#define USE_SHEEN\\\\\\\":\\\\\\\"\\\\\\\",n.transmission?\\\\\\\"#define USE_TRANSMISSION\\\\\\\":\\\\\\\"\\\\\\\",n.transmissionMap?\\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\":\\\\\\\"\\\\\\\",n.thicknessMap?\\\\\\\"#define USE_THICKNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.vertexTangents?\\\\\\\"#define USE_TANGENT\\\\\\\":\\\\\\\"\\\\\\\",n.vertexColors||n.instancingColor?\\\\\\\"#define USE_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.vertexAlphas?\\\\\\\"#define USE_COLOR_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.vertexUvs?\\\\\\\"#define USE_UV\\\\\\\":\\\\\\\"\\\\\\\",n.uvsVertexOnly?\\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\":\\\\\\\"\\\\\\\",n.gradientMap?\\\\\\\"#define USE_GRADIENTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.flatShading?\\\\\\\"#define FLAT_SHADED\\\\\\\":\\\\\\\"\\\\\\\",n.doubleSided?\\\\\\\"#define DOUBLE_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.flipSided?\\\\\\\"#define FLIP_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define USE_SHADOWMAP\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define \\\\\\\"+l:\\\\\\\"\\\\\\\",n.premultipliedAlpha?\\\\\\\"#define PREMULTIPLIED_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.physicallyCorrectLights?\\\\\\\"#define PHYSICALLY_CORRECT_LIGHTS\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer?\\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?\\\\\\\"#define USE_LOGDEPTHBUF_EXT\\\\\\\":\\\\\\\"\\\\\\\",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?\\\\\\\"#define TEXTURE_LOD_EXT\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"uniform mat4 viewMatrix;\\\\\\\",\\\\\\\"uniform vec3 cameraPosition;\\\\\\\",\\\\\\\"uniform bool isOrthographic;\\\\\\\",0!==n.toneMapping?\\\\\\\"#define TONE_MAPPING\\\\\\\":\\\\\\\"\\\\\\\",0!==n.toneMapping?ZT.tonemapping_pars_fragment:\\\\\\\"\\\\\\\",0!==n.toneMapping?ZM(\\\\\\\"toneMapping\\\\\\\",n.toneMapping):\\\\\\\"\\\\\\\",n.dithering?\\\\\\\"#define DITHERING\\\\\\\":\\\\\\\"\\\\\\\",n.format===Fx?\\\\\\\"#define OPAQUE\\\\\\\":\\\\\\\"\\\\\\\",ZT.encodings_pars_fragment,n.map?$M(\\\\\\\"mapTexelToLinear\\\\\\\",n.mapEncoding):\\\\\\\"\\\\\\\",n.matcap?$M(\\\\\\\"matcapTexelToLinear\\\\\\\",n.matcapEncoding):\\\\\\\"\\\\\\\",n.envMap?$M(\\\\\\\"envMapTexelToLinear\\\\\\\",n.envMapEncoding):\\\\\\\"\\\\\\\",n.emissiveMap?$M(\\\\\\\"emissiveMapTexelToLinear\\\\\\\",n.emissiveMapEncoding):\\\\\\\"\\\\\\\",n.specularTintMap?$M(\\\\\\\"specularTintMapTexelToLinear\\\\\\\",n.specularTintMapEncoding):\\\\\\\"\\\\\\\",n.lightMap?$M(\\\\\\\"lightMapTexelToLinear\\\\\\\",n.lightMapEncoding):\\\\\\\"\\\\\\\",JM(\\\\\\\"linearToOutputTexel\\\\\\\",n.outputEncoding),n.depthPacking?\\\\\\\"#define DEPTH_PACKING \\\\\\\"+n.depthPacking:\\\\\\\"\\\\\\\",\\\\\\\"\\\\n\\\\\\\"].filter(KM).join(\\\\\\\"\\\\n\\\\\\\")),o=nE(o),o=QM(o,n),o=tE(o,n),a=nE(a),a=QM(a,n),a=tE(a,n),o=oE(o),a=oE(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(v=\\\\\\\"#version 300 es\\\\n\\\\\\\",f=[\\\\\\\"precision mediump sampler2DArray;\\\\\\\",\\\\\\\"#define attribute in\\\\\\\",\\\\\\\"#define varying out\\\\\\\",\\\\\\\"#define texture2D texture\\\\\\\"].join(\\\\\\\"\\\\n\\\\\\\")+\\\\\\\"\\\\n\\\\\\\"+f,g=[\\\\\\\"#define varying in\\\\\\\",n.glslVersion===Qx?\\\\\\\"\\\\\\\":\\\\\\\"out highp vec4 pc_fragColor;\\\\\\\",n.glslVersion===Qx?\\\\\\\"\\\\\\\":\\\\\\\"#define gl_FragColor pc_fragColor\\\\\\\",\\\\\\\"#define gl_FragDepthEXT gl_FragDepth\\\\\\\",\\\\\\\"#define texture2D texture\\\\\\\",\\\\\\\"#define textureCube texture\\\\\\\",\\\\\\\"#define texture2DProj textureProj\\\\\\\",\\\\\\\"#define texture2DLodEXT textureLod\\\\\\\",\\\\\\\"#define texture2DProjLodEXT textureProjLod\\\\\\\",\\\\\\\"#define textureCubeLodEXT textureLod\\\\\\\",\\\\\\\"#define texture2DGradEXT textureGrad\\\\\\\",\\\\\\\"#define texture2DProjGradEXT textureProjGrad\\\\\\\",\\\\\\\"#define textureCubeGradEXT textureGrad\\\\\\\"].join(\\\\\\\"\\\\n\\\\\\\")+\\\\\\\"\\\\n\\\\\\\"+g);const y=v+g+a,x=WM(s,35633,v+f+o),b=WM(s,35632,y);if(s.attachShader(m,x),s.attachShader(m,b),void 0!==n.index0AttributeName?s.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&s.bindAttribLocation(m,0,\\\\\\\"position\\\\\\\"),s.linkProgram(m),t.debug.checkShaderErrors){const t=s.getProgramInfoLog(m).trim(),e=s.getShaderInfoLog(x).trim(),n=s.getShaderInfoLog(b).trim();let i=!0,r=!0;if(!1===s.getProgramParameter(m,35714)){i=!1;const e=YM(s,x,\\\\\\\"vertex\\\\\\\"),n=YM(s,b,\\\\\\\"fragment\\\\\\\");console.error(\\\\\\\"THREE.WebGLProgram: Shader Error \\\\\\\"+s.getError()+\\\\\\\" - VALIDATE_STATUS \\\\\\\"+s.getProgramParameter(m,35715)+\\\\\\\"\\\\n\\\\nProgram Info Log: \\\\\\\"+t+\\\\\\\"\\\\n\\\\\\\"+e+\\\\\\\"\\\\n\\\\\\\"+n)}else\\\\\\\"\\\\\\\"!==t?console.warn(\\\\\\\"THREE.WebGLProgram: Program Info Log:\\\\\\\",t):\\\\\\\"\\\\\\\"!==e&&\\\\\\\"\\\\\\\"!==n||(r=!1);r&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:f},fragmentShader:{log:n,prefix:g}})}let w,T;return s.deleteShader(x),s.deleteShader(b),this.getUniforms=function(){return void 0===w&&(w=new jM(s,m)),w},this.getAttributes=function(){return void 0===T&&(T=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let s=0;s<i;s++){const i=t.getActiveAttrib(e,s),r=i.name;let o=1;35674===i.type&&(o=2),35675===i.type&&(o=3),35676===i.type&&(o=4),n[r]={type:i.type,location:t.getAttribLocation(e,r),locationSize:o}}return n}(s,m)),T},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(m),this.program=void 0},this.name=n.shaderName,this.id=qM++,this.cacheKey=e,this.usedTimes=1,this.program=m,this.vertexShader=x,this.fragmentShader=b,this}function uE(t,e,n,i,s,r,o){const a=[],l=s.isWebGL2,c=s.logarithmicDepthBuffer,h=s.floatVertexTextures,u=s.maxVertexUniforms,d=s.vertexTextures;let p=s.precision;const _={MeshDepthMaterial:\\\\\\\"depth\\\\\\\",MeshDistanceMaterial:\\\\\\\"distanceRGBA\\\\\\\",MeshNormalMaterial:\\\\\\\"normal\\\\\\\",MeshBasicMaterial:\\\\\\\"basic\\\\\\\",MeshLambertMaterial:\\\\\\\"lambert\\\\\\\",MeshPhongMaterial:\\\\\\\"phong\\\\\\\",MeshToonMaterial:\\\\\\\"toon\\\\\\\",MeshStandardMaterial:\\\\\\\"physical\\\\\\\",MeshPhysicalMaterial:\\\\\\\"physical\\\\\\\",MeshMatcapMaterial:\\\\\\\"matcap\\\\\\\",LineBasicMaterial:\\\\\\\"basic\\\\\\\",LineDashedMaterial:\\\\\\\"dashed\\\\\\\",PointsMaterial:\\\\\\\"points\\\\\\\",ShadowMaterial:\\\\\\\"shadow\\\\\\\",SpriteMaterial:\\\\\\\"sprite\\\\\\\"},m=[\\\\\\\"precision\\\\\\\",\\\\\\\"isWebGL2\\\\\\\",\\\\\\\"supportsVertexTextures\\\\\\\",\\\\\\\"outputEncoding\\\\\\\",\\\\\\\"instancing\\\\\\\",\\\\\\\"instancingColor\\\\\\\",\\\\\\\"map\\\\\\\",\\\\\\\"mapEncoding\\\\\\\",\\\\\\\"matcap\\\\\\\",\\\\\\\"matcapEncoding\\\\\\\",\\\\\\\"envMap\\\\\\\",\\\\\\\"envMapMode\\\\\\\",\\\\\\\"envMapEncoding\\\\\\\",\\\\\\\"envMapCubeUV\\\\\\\",\\\\\\\"lightMap\\\\\\\",\\\\\\\"lightMapEncoding\\\\\\\",\\\\\\\"aoMap\\\\\\\",\\\\\\\"emissiveMap\\\\\\\",\\\\\\\"emissiveMapEncoding\\\\\\\",\\\\\\\"bumpMap\\\\\\\",\\\\\\\"normalMap\\\\\\\",\\\\\\\"objectSpaceNormalMap\\\\\\\",\\\\\\\"tangentSpaceNormalMap\\\\\\\",\\\\\\\"clearcoat\\\\\\\",\\\\\\\"clearcoatMap\\\\\\\",\\\\\\\"clearcoatRoughnessMap\\\\\\\",\\\\\\\"clearcoatNormalMap\\\\\\\",\\\\\\\"displacementMap\\\\\\\",\\\\\\\"specularMap\\\\\\\",\\\\\\\"specularIntensityMap\\\\\\\",\\\\\\\"specularTintMap\\\\\\\",\\\\\\\"specularTintMapEncoding\\\\\\\",\\\\\\\"roughnessMap\\\\\\\",\\\\\\\"metalnessMap\\\\\\\",\\\\\\\"gradientMap\\\\\\\",\\\\\\\"alphaMap\\\\\\\",\\\\\\\"alphaTest\\\\\\\",\\\\\\\"combine\\\\\\\",\\\\\\\"vertexColors\\\\\\\",\\\\\\\"vertexAlphas\\\\\\\",\\\\\\\"vertexTangents\\\\\\\",\\\\\\\"vertexUvs\\\\\\\",\\\\\\\"uvsVertexOnly\\\\\\\",\\\\\\\"fog\\\\\\\",\\\\\\\"useFog\\\\\\\",\\\\\\\"fogExp2\\\\\\\",\\\\\\\"flatShading\\\\\\\",\\\\\\\"sizeAttenuation\\\\\\\",\\\\\\\"logarithmicDepthBuffer\\\\\\\",\\\\\\\"skinning\\\\\\\",\\\\\\\"maxBones\\\\\\\",\\\\\\\"useVertexTexture\\\\\\\",\\\\\\\"morphTargets\\\\\\\",\\\\\\\"morphNormals\\\\\\\",\\\\\\\"morphTargetsCount\\\\\\\",\\\\\\\"premultipliedAlpha\\\\\\\",\\\\\\\"numDirLights\\\\\\\",\\\\\\\"numPointLights\\\\\\\",\\\\\\\"numSpotLights\\\\\\\",\\\\\\\"numHemiLights\\\\\\\",\\\\\\\"numRectAreaLights\\\\\\\",\\\\\\\"numDirLightShadows\\\\\\\",\\\\\\\"numPointLightShadows\\\\\\\",\\\\\\\"numSpotLightShadows\\\\\\\",\\\\\\\"shadowMapEnabled\\\\\\\",\\\\\\\"shadowMapType\\\\\\\",\\\\\\\"toneMapping\\\\\\\",\\\\\\\"physicallyCorrectLights\\\\\\\",\\\\\\\"doubleSided\\\\\\\",\\\\\\\"flipSided\\\\\\\",\\\\\\\"numClippingPlanes\\\\\\\",\\\\\\\"numClipIntersection\\\\\\\",\\\\\\\"depthPacking\\\\\\\",\\\\\\\"dithering\\\\\\\",\\\\\\\"format\\\\\\\",\\\\\\\"sheen\\\\\\\",\\\\\\\"transmission\\\\\\\",\\\\\\\"transmissionMap\\\\\\\",\\\\\\\"thicknessMap\\\\\\\"];function f(t){let e;return t&&t.isTexture?e=t.encoding:t&&t.isWebGLRenderTarget?(console.warn(\\\\\\\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\\\\\\\"),e=t.texture.encoding):e=qx,l&&t&&t.isTexture&&t.format===Dx&&t.type===Nx&&t.encoding===Xx&&(e=qx),e}return{getParameters:function(r,a,m,g,v){const y=g.fog,x=r.isMeshStandardMaterial?g.environment:null,b=(r.isMeshStandardMaterial?n:e).get(r.envMap||x),w=_[r.type],T=v.isSkinnedMesh?function(t){const e=t.skeleton.bones;if(h)return 1024;{const t=u,n=Math.floor((t-20)/4),i=Math.min(n,e.length);return i<e.length?(console.warn(\\\\\\\"THREE.WebGLRenderer: Skeleton has \\\\\\\"+e.length+\\\\\\\" bones. This GPU supports \\\\\\\"+i+\\\\\\\".\\\\\\\"),0):i}}(v):0;let A,M;if(null!==r.precision&&(p=s.getMaxPrecision(r.precision),p!==r.precision&&console.warn(\\\\\\\"THREE.WebGLProgram.getParameters:\\\\\\\",r.precision,\\\\\\\"not supported, using\\\\\\\",p,\\\\\\\"instead.\\\\\\\")),w){const t=QT[w];A=t.vertexShader,M=t.fragmentShader}else A=r.vertexShader,M=r.fragmentShader;const E=t.getRenderTarget(),S=r.alphaTest>0,C=r.clearcoat>0;return{isWebGL2:l,shaderID:w,shaderName:r.type,vertexShader:A,fragmentShader:M,defines:r.defines,isRawShaderMaterial:!0===r.isRawShaderMaterial,glslVersion:r.glslVersion,precision:p,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:d,outputEncoding:null!==E?f(E.texture):t.outputEncoding,map:!!r.map,mapEncoding:f(r.map),matcap:!!r.matcap,matcapEncoding:f(r.matcap),envMap:!!b,envMapMode:b&&b.mapping,envMapEncoding:f(b),envMapCubeUV:!!b&&(b.mapping===vx||b.mapping===yx),lightMap:!!r.lightMap,lightMapEncoding:f(r.lightMap),aoMap:!!r.aoMap,emissiveMap:!!r.emissiveMap,emissiveMapEncoding:f(r.emissiveMap),bumpMap:!!r.bumpMap,normalMap:!!r.normalMap,objectSpaceNormalMap:1===r.normalMapType,tangentSpaceNormalMap:0===r.normalMapType,clearcoat:C,clearcoatMap:C&&!!r.clearcoatMap,clearcoatRoughnessMap:C&&!!r.clearcoatRoughnessMap,clearcoatNormalMap:C&&!!r.clearcoatNormalMap,displacementMap:!!r.displacementMap,roughnessMap:!!r.roughnessMap,metalnessMap:!!r.metalnessMap,specularMap:!!r.specularMap,specularIntensityMap:!!r.specularIntensityMap,specularTintMap:!!r.specularTintMap,specularTintMapEncoding:f(r.specularTintMap),alphaMap:!!r.alphaMap,alphaTest:S,gradientMap:!!r.gradientMap,sheen:r.sheen>0,transmission:r.transmission>0,transmissionMap:!!r.transmissionMap,thicknessMap:!!r.thicknessMap,combine:r.combine,vertexTangents:!!r.normalMap&&!!v.geometry&&!!v.geometry.attributes.tangent,vertexColors:r.vertexColors,vertexAlphas:!0===r.vertexColors&&!!v.geometry&&!!v.geometry.attributes.color&&4===v.geometry.attributes.color.itemSize,vertexUvs:!!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatMap||r.clearcoatRoughnessMap||r.clearcoatNormalMap||r.displacementMap||r.transmissionMap||r.thicknessMap||r.specularIntensityMap||r.specularTintMap),uvsVertexOnly:!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatNormalMap||r.transmission>0||r.transmissionMap||r.thicknessMap||r.specularIntensityMap||r.specularTintMap||!r.displacementMap),fog:!!y,useFog:r.fog,fogExp2:y&&y.isFogExp2,flatShading:!!r.flatShading,sizeAttenuation:r.sizeAttenuation,logarithmicDepthBuffer:c,skinning:!0===v.isSkinnedMesh&&T>0,maxBones:T,useVertexTexture:h,morphTargets:!!v.geometry&&!!v.geometry.morphAttributes.position,morphNormals:!!v.geometry&&!!v.geometry.morphAttributes.normal,morphTargetsCount:v.geometry&&v.geometry.morphAttributes.position?v.geometry.morphAttributes.position.length:0,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,format:r.format,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&m.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:l||i.has(\\\\\\\"EXT_frag_depth\\\\\\\"),rendererExtensionDrawBuffers:l||i.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),rendererExtensionShaderTextureLod:l||i.has(\\\\\\\"EXT_shader_texture_lod\\\\\\\"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t<m.length;t++)n.push(e[m[t]]);n.push(t.outputEncoding),n.push(t.gammaFactor)}return n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=_[t.type];let n;if(e){const t=QT[e];n=RT.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=a.length;t<e;t++){const e=a[t];if(e.cacheKey===n){i=e,++i.usedTimes;break}}return void 0===i&&(i=new hE(t,n,e,r),a.push(i)),i},releaseProgram:function(t){if(0==--t.usedTimes){const e=a.indexOf(t);a[e]=a[a.length-1],a.pop(),t.destroy()}},programs:a}}function dE(){let t=new WeakMap;return{get:function(e){let n=t.get(e);return void 0===n&&(n={},t.set(e,n)),n},remove:function(e){t.delete(e)},update:function(e,n,i){t.get(e)[n]=i},dispose:function(){t=new WeakMap}}}function pE(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program!==e.program?t.program.id-e.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function _E(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function mE(t){const e=[];let n=0;const i=[],s=[],r=[],o={id:-1};function a(i,s,r,a,l,c){let h=e[n];const u=t.get(r);return void 0===h?(h={id:i.id,object:i,geometry:s,material:r,program:u.program||o,groupOrder:a,renderOrder:i.renderOrder,z:l,group:c},e[n]=h):(h.id=i.id,h.object=i,h.geometry=s,h.material=r,h.program=u.program||o,h.groupOrder=a,h.renderOrder=i.renderOrder,h.z=l,h.group=c),n++,h}return{opaque:i,transmissive:s,transparent:r,init:function(){n=0,i.length=0,s.length=0,r.length=0},push:function(t,e,n,o,l,c){const h=a(t,e,n,o,l,c);n.transmission>0?s.push(h):!0===n.transparent?r.push(h):i.push(h)},unshift:function(t,e,n,o,l,c){const h=a(t,e,n,o,l,c);n.transmission>0?s.unshift(h):!0===n.transparent?r.unshift(h):i.unshift(h)},finish:function(){for(let t=n,i=e.length;t<i;t++){const n=e[t];if(null===n.id)break;n.id=null,n.object=null,n.geometry=null,n.material=null,n.program=null,n.group=null}},sort:function(t,e){i.length>1&&i.sort(t||pE),s.length>1&&s.sort(e||_E),r.length>1&&r.sort(e||_E)}}}function fE(t){let e=new WeakMap;return{get:function(n,i){let s;return!1===e.has(n)?(s=new mE(t),e.set(n,[s])):i>=e.get(n).length?(s=new mE(t),e.get(n).push(s)):s=e.get(n)[i],s},dispose:function(){e=new WeakMap}}}function gE(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\\\\\\\"DirectionalLight\\\\\\\":n={direction:new Sb,color:new $w};break;case\\\\\\\"SpotLight\\\\\\\":n={position:new Sb,direction:new Sb,color:new $w,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\\\\\\\"PointLight\\\\\\\":n={position:new Sb,color:new $w,distance:0,decay:0};break;case\\\\\\\"HemisphereLight\\\\\\\":n={direction:new Sb,skyColor:new $w,groundColor:new $w};break;case\\\\\\\"RectAreaLight\\\\\\\":n={color:new $w,position:new Sb,halfWidth:new Sb,halfHeight:new Sb}}return t[e.id]=n,n}}}let vE=0;function yE(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function xE(t,e){const n=new gE,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\\\\\\\"DirectionalLight\\\\\\\":case\\\\\\\"SpotLight\\\\\\\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new _b};break;case\\\\\\\"PointLight\\\\\\\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new _b,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),s={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)s.probe.push(new Sb);const r=new Sb,o=new sw,a=new sw;return{setup:function(r,o){let a=0,l=0,c=0;for(let t=0;t<9;t++)s.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,_=0,m=0,f=0,g=0;r.sort(yE);const v=!0!==o?Math.PI:1;for(let t=0,e=r.length;t<e;t++){const e=r[t],o=e.color,y=e.intensity,x=e.distance,b=e.shadow&&e.shadow.map?e.shadow.map.texture:null;if(e.isAmbientLight)a+=o.r*y*v,l+=o.g*y*v,c+=o.b*y*v;else if(e.isLightProbe)for(let t=0;t<9;t++)s.probe[t].addScaledVector(e.sh.coefficients[t],y);else if(e.isDirectionalLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*v),e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,s.directionalShadow[h]=n,s.directionalShadowMap[h]=b,s.directionalShadowMatrix[h]=e.shadow.matrix,m++}s.directional[h]=t,h++}else if(e.isSpotLight){const t=n.get(e);if(t.position.setFromMatrixPosition(e.matrixWorld),t.color.copy(o).multiplyScalar(y*v),t.distance=x,t.coneCos=Math.cos(e.angle),t.penumbraCos=Math.cos(e.angle*(1-e.penumbra)),t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,s.spotShadow[d]=n,s.spotShadowMap[d]=b,s.spotShadowMatrix[d]=e.shadow.matrix,g++}s.spot[d]=t,d++}else if(e.isRectAreaLight){const t=n.get(e);t.color.copy(o).multiplyScalar(y),t.halfWidth.set(.5*e.width,0,0),t.halfHeight.set(0,.5*e.height,0),s.rectArea[p]=t,p++}else if(e.isPointLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*v),t.distance=e.distance,t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,n.shadowCameraNear=t.camera.near,n.shadowCameraFar=t.camera.far,s.pointShadow[u]=n,s.pointShadowMap[u]=b,s.pointShadowMatrix[u]=e.shadow.matrix,f++}s.point[u]=t,u++}else if(e.isHemisphereLight){const t=n.get(e);t.skyColor.copy(e.color).multiplyScalar(y*v),t.groundColor.copy(e.groundColor).multiplyScalar(y*v),s.hemi[_]=t,_++}}p>0&&(e.isWebGL2||!0===t.has(\\\\\\\"OES_texture_float_linear\\\\\\\")?(s.rectAreaLTC1=KT.LTC_FLOAT_1,s.rectAreaLTC2=KT.LTC_FLOAT_2):!0===t.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\")?(s.rectAreaLTC1=KT.LTC_HALF_1,s.rectAreaLTC2=KT.LTC_HALF_2):console.error(\\\\\\\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\\\\\\\")),s.ambient[0]=a,s.ambient[1]=l,s.ambient[2]=c;const y=s.hash;y.directionalLength===h&&y.pointLength===u&&y.spotLength===d&&y.rectAreaLength===p&&y.hemiLength===_&&y.numDirectionalShadows===m&&y.numPointShadows===f&&y.numSpotShadows===g||(s.directional.length=h,s.spot.length=d,s.rectArea.length=p,s.point.length=u,s.hemi.length=_,s.directionalShadow.length=m,s.directionalShadowMap.length=m,s.pointShadow.length=f,s.pointShadowMap.length=f,s.spotShadow.length=g,s.spotShadowMap.length=g,s.directionalShadowMatrix.length=m,s.pointShadowMatrix.length=f,s.spotShadowMatrix.length=g,y.directionalLength=h,y.pointLength=u,y.spotLength=d,y.rectAreaLength=p,y.hemiLength=_,y.numDirectionalShadows=m,y.numPointShadows=f,y.numSpotShadows=g,s.version=vE++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e<d;e++){const d=t[e];if(d.isDirectionalLight){const t=s.directional[n];t.direction.setFromMatrixPosition(d.matrixWorld),r.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(r),t.direction.transformDirection(u),n++}else if(d.isSpotLight){const t=s.spot[l];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),t.direction.setFromMatrixPosition(d.matrixWorld),r.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(r),t.direction.transformDirection(u),l++}else if(d.isRectAreaLight){const t=s.rectArea[c];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),a.identity(),o.copy(d.matrixWorld),o.premultiply(u),a.extractRotation(o),t.halfWidth.set(.5*d.width,0,0),t.halfHeight.set(0,.5*d.height,0),t.halfWidth.applyMatrix4(a),t.halfHeight.applyMatrix4(a),c++}else if(d.isPointLight){const t=s.point[i];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),i++}else if(d.isHemisphereLight){const t=s.hemi[h];t.direction.setFromMatrixPosition(d.matrixWorld),t.direction.transformDirection(u),t.direction.normalize(),h++}}},state:s}}function bE(t,e){const n=new xE(t,e),i=[],s=[];return{init:function(){i.length=0,s.length=0},state:{lightsArray:i,shadowsArray:s,lights:n},setupLights:function(t){n.setup(i,t)},setupLightsView:function(t){n.setupView(i,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){s.push(t)}}}function wE(t,e){let n=new WeakMap;return{get:function(i,s=0){let r;return!1===n.has(i)?(r=new bE(t,e),n.set(i,[r])):s>=n.get(i).length?(r=new bE(t,e),n.get(i).push(r)):r=n.get(i)[s],r},dispose:function(){n=new WeakMap}}}class TE extends Vw{constructor(t){super(),this.type=\\\\\\\"MeshDepthMaterial\\\\\\\",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}TE.prototype.isMeshDepthMaterial=!0;class AE extends Vw{constructor(t){super(),this.type=\\\\\\\"MeshDistanceMaterial\\\\\\\",this.referencePosition=new Sb,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}AE.prototype.isMeshDistanceMaterial=!0;function ME(t,e,n){let i=new XT;const s=new _b,r=new _b,o=new Tb,a=new TE({depthPacking:3201}),l=new AE,c={},h=n.maxTextureSize,u={0:1,1:0,2:2},d=new IT({uniforms:{shadow_pass:{value:null},resolution:{value:new _b},radius:{value:4},samples:{value:8}},vertexShader:\\\\\\\"void main() {\\\\n\\\\tgl_Position = vec4( position, 1.0 );\\\\n}\\\\\\\",fragmentShader:\\\\\\\"uniform sampler2D shadow_pass;\\\\nuniform vec2 resolution;\\\\nuniform float radius;\\\\nuniform float samples;\\\\n#include <packing>\\\\nvoid main() {\\\\n\\\\tfloat mean = 0.0;\\\\n\\\\tfloat squared_mean = 0.0;\\\\n\\\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\\\n\\\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\\\n\\\\tfor ( float i = 0.0; i < samples; i ++ ) {\\\\n\\\\t\\\\tfloat uvOffset = uvStart + i * uvStride;\\\\n\\\\t\\\\t#ifdef HORIZONTAL_PASS\\\\n\\\\t\\\\t\\\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\\\n\\\\t\\\\t\\\\tmean += distribution.x;\\\\n\\\\t\\\\t\\\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\\\n\\\\t\\\\t\\\\tmean += depth;\\\\n\\\\t\\\\t\\\\tsquared_mean += depth * depth;\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\tmean = mean / samples;\\\\n\\\\tsquared_mean = squared_mean / samples;\\\\n\\\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\\\n\\\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\\\n}\\\\\\\"}),p=d.clone();p.defines.HORIZONTAL_PASS=1;const _=new hT;_.setAttribute(\\\\\\\"position\\\\\\\",new Qw(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const m=new CT(_,d),f=this;function g(n,i){const s=e.update(m);d.uniforms.shadow_pass.value=n.map.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,d.uniforms.samples.value=n.blurSamples,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,s,d,m,null),p.uniforms.shadow_pass.value=n.mapPass.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,p.uniforms.samples.value=n.blurSamples,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,s,p,m,null)}function v(e,n,i,s,r,o,h){let d=null;const p=!0===s.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(d=void 0!==p?p:!0===s.isPointLight?l:a,t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0){const t=d.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let s=n[e];void 0===s&&(s=d.clone(),n[e]=s),d=s}return d.visible=i.visible,d.wireframe=i.wireframe,d.side=3===h?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:u[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,d.clipShadows=i.clipShadows,d.clippingPlanes=i.clippingPlanes,d.clipIntersection=i.clipIntersection,d.displacementMap=i.displacementMap,d.displacementScale=i.displacementScale,d.displacementBias=i.displacementBias,d.wireframeLinewidth=i.wireframeLinewidth,d.linewidth=i.linewidth,!0===s.isPointLight&&!0===d.isMeshDistanceMaterial&&(d.referencePosition.setFromMatrixPosition(s.matrixWorld),d.nearDistance=r,d.farDistance=o),d}function y(n,s,r,o,a){if(!1===n.visible)return;if(n.layers.test(s.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===a)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,n.matrixWorld);const i=e.update(n),s=n.material;if(Array.isArray(s)){const e=i.groups;for(let l=0,c=e.length;l<c;l++){const c=e[l],h=s[c.materialIndex];if(h&&h.visible){const e=v(n,0,h,o,r.near,r.far,a);t.renderBufferDirect(r,null,i,e,n,c)}}}else if(s.visible){const e=v(n,0,s,o,r.near,r.far,a);t.renderBufferDirect(r,null,i,e,n,null)}}const l=n.children;for(let t=0,e=l.length;t<e;t++)y(l[t],s,r,o,a)}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(e,n,a){if(!1===f.enabled)return;if(!1===f.autoUpdate&&!1===f.needsUpdate)return;if(0===e.length)return;const l=t.getRenderTarget(),c=t.getActiveCubeFace(),u=t.getActiveMipmapLevel(),d=t.state;d.setBlending(0),d.buffers.color.setClear(1,1,1,1),d.buffers.depth.setTest(!0),d.setScissorTest(!1);for(let l=0,c=e.length;l<c;l++){const c=e[l],u=c.shadow;if(void 0===u){console.warn(\\\\\\\"THREE.WebGLShadowMap:\\\\\\\",c,\\\\\\\"has no shadow.\\\\\\\");continue}if(!1===u.autoUpdate&&!1===u.needsUpdate)continue;s.copy(u.mapSize);const p=u.getFrameExtents();if(s.multiply(p),r.copy(u.mapSize),(s.x>h||s.y>h)&&(s.x>h&&(r.x=Math.floor(h/p.x),s.x=r.x*p.x,u.mapSize.x=r.x),s.y>h&&(r.y=Math.floor(h/p.y),s.y=r.y*p.y,u.mapSize.y=r.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:Ex,magFilter:Ex,format:Dx};u.map=new Ab(s.x,s.y,t),u.map.texture.name=c.name+\\\\\\\".shadowMap\\\\\\\",u.mapPass=new Ab(s.x,s.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:Tx,magFilter:Tx,format:Dx};u.map=new Ab(s.x,s.y,t),u.map.texture.name=c.name+\\\\\\\".shadowMap\\\\\\\",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const _=u.getViewportCount();for(let t=0;t<_;t++){const e=u.getViewport(t);o.set(r.x*e.x,r.y*e.y,r.x*e.z,r.y*e.w),d.viewport(o),u.updateMatrices(c,t),i=u.getFrustum(),y(n,a,u.camera,c,this.type)}u.isPointLightShadow||3!==this.type||g(u,a),u.needsUpdate=!1}f.needsUpdate=!1,t.setRenderTarget(l,c,u)}}function EE(t,e,n){const i=n.isWebGL2;const s=new function(){let e=!1;const n=new Tb;let i=null;const s=new Tb(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,r,o,a){!0===a&&(e*=o,i*=o,r*=o),n.set(e,i,r,o),!1===s.equals(n)&&(t.clearColor(e,i,r,o),s.copy(n))},reset:function(){e=!1,i=null,s.set(-1,0,0,0)}}},r=new function(){let e=!1,n=null,i=null,s=null;return{setTest:function(t){t?B(2929):z(2929)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case 0:t.depthFunc(512);break;case 1:t.depthFunc(519);break;case 2:t.depthFunc(513);break;case 3:t.depthFunc(515);break;case 4:t.depthFunc(514);break;case 5:t.depthFunc(518);break;case 6:t.depthFunc(516);break;case 7:t.depthFunc(517);break;default:t.depthFunc(515)}else t.depthFunc(515);i=e}},setLocked:function(t){e=t},setClear:function(e){s!==e&&(t.clearDepth(e),s=e)},reset:function(){e=!1,n=null,i=null,s=null}}},o=new function(){let e=!1,n=null,i=null,s=null,r=null,o=null,a=null,l=null,c=null;return{setTest:function(t){e||(t?B(2960):z(2960))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,o){i===e&&s===n&&r===o||(t.stencilFunc(e,n,o),i=e,s=n,r=o)},setOp:function(e,n,i){o===e&&a===n&&l===i||(t.stencilOp(e,n,i),o=e,a=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,s=null,r=null,o=null,a=null,l=null,c=null}}};let a={},l=null,c={},h=null,u=!1,d=null,p=null,_=null,m=null,f=null,g=null,v=null,y=!1,x=null,b=null,w=null,T=null,A=null;const M=t.getParameter(35661);let E=!1,S=0;const C=t.getParameter(7938);-1!==C.indexOf(\\\\\\\"WebGL\\\\\\\")?(S=parseFloat(/^WebGL (\\\\d)/.exec(C)[1]),E=S>=1):-1!==C.indexOf(\\\\\\\"OpenGL ES\\\\\\\")&&(S=parseFloat(/^OpenGL ES (\\\\d)/.exec(C)[1]),E=S>=2);let N=null,L={};const O=t.getParameter(3088),P=t.getParameter(2978),R=(new Tb).fromArray(O),I=(new Tb).fromArray(P);function F(e,n,i){const s=new Uint8Array(4),r=t.createTexture();t.bindTexture(e,r),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;e<i;e++)t.texImage2D(n+e,0,6408,1,1,0,6408,5121,s);return r}const D={};function B(e){!0!==a[e]&&(t.enable(e),a[e]=!0)}function z(e){!1!==a[e]&&(t.disable(e),a[e]=!1)}D[3553]=F(3553,3553,1),D[34067]=F(34067,34069,6),s.setClear(0,0,0,1),r.setClear(1),o.setClear(0),B(2929),r.setFunc(3),V(!1),H(1),B(2884),G(0);const k={[px]:32774,101:32778,102:32779};if(i)k[103]=32775,k[104]=32776;else{const t=e.get(\\\\\\\"EXT_blend_minmax\\\\\\\");null!==t&&(k[103]=t.MIN_EXT,k[104]=t.MAX_EXT)}const U={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function G(e,n,i,s,r,o,a,l){if(0!==e){if(!1===u&&(B(3042),u=!0),5===e)r=r||n,o=o||i,a=a||s,n===p&&r===f||(t.blendEquationSeparate(k[n],k[r]),p=n,f=r),i===_&&s===m&&o===g&&a===v||(t.blendFuncSeparate(U[i],U[s],U[o],U[a]),_=i,m=s,g=o,v=a),d=e,y=null;else if(e!==d||l!==y){if(p===px&&f===px||(t.blendEquation(32774),p=px,f=px),l)switch(e){case 1:t.blendFuncSeparate(1,771,1,771);break;case 2:t.blendFunc(1,1);break;case 3:t.blendFuncSeparate(0,0,769,771);break;case 4:t.blendFuncSeparate(0,768,0,770);break;default:console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\",e)}else switch(e){case 1:t.blendFuncSeparate(770,771,1,771);break;case 2:t.blendFunc(770,1);break;case 3:t.blendFunc(0,769);break;case 4:t.blendFunc(0,768);break;default:console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\",e)}_=null,m=null,g=null,v=null,d=e,y=l}}else!0===u&&(z(3042),u=!1)}function V(e){x!==e&&(e?t.frontFace(2304):t.frontFace(2305),x=e)}function H(e){0!==e?(B(2884),e!==b&&(1===e?t.cullFace(1029):2===e?t.cullFace(1028):t.cullFace(1032))):z(2884),b=e}function j(e,n,i){e?(B(32823),T===n&&A===i||(t.polygonOffset(n,i),T=n,A=i)):z(32823)}function W(e){void 0===e&&(e=33984+M-1),N!==e&&(t.activeTexture(e),N=e)}return{buffers:{color:s,depth:r,stencil:o},enable:B,disable:z,bindFramebuffer:function(e,n){return null===n&&null!==l&&(n=l),c[e]!==n&&(t.bindFramebuffer(e,n),c[e]=n,i&&(36009===e&&(c[36160]=n),36160===e&&(c[36009]=n)),!0)},bindXRFramebuffer:function(e){e!==l&&(t.bindFramebuffer(36160,e),l=e)},useProgram:function(e){return h!==e&&(t.useProgram(e),h=e,!0)},setBlending:G,setMaterial:function(t,e){2===t.side?z(2884):B(2884);let n=1===t.side;e&&(n=!n),V(n),1===t.blending&&!1===t.transparent?G(0):G(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha),r.setFunc(t.depthFunc),r.setTest(t.depthTest),r.setMask(t.depthWrite),s.setMask(t.colorWrite);const i=t.stencilWrite;o.setTest(i),i&&(o.setMask(t.stencilWriteMask),o.setFunc(t.stencilFunc,t.stencilRef,t.stencilFuncMask),o.setOp(t.stencilFail,t.stencilZFail,t.stencilZPass)),j(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits),!0===t.alphaToCoverage?B(32926):z(32926)},setFlipSided:V,setCullFace:H,setLineWidth:function(e){e!==w&&(E&&t.lineWidth(e),w=e)},setPolygonOffset:j,setScissorTest:function(t){t?B(3089):z(3089)},activeTexture:W,bindTexture:function(e,n){null===N&&W();let i=L[N];void 0===i&&(i={type:void 0,texture:void 0},L[N]=i),i.type===e&&i.texture===n||(t.bindTexture(e,n||D[e]),i.type=e,i.texture=n)},unbindTexture:function(){const e=L[N];void 0!==e&&void 0!==e.type&&(t.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},texImage3D:function(){try{t.texImage3D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},scissor:function(e){!1===R.equals(e)&&(t.scissor(e.x,e.y,e.z,e.w),R.copy(e))},viewport:function(e){!1===I.equals(e)&&(t.viewport(e.x,e.y,e.z,e.w),I.copy(e))},reset:function(){t.disable(3042),t.disable(2884),t.disable(2929),t.disable(32823),t.disable(3089),t.disable(2960),t.disable(32926),t.blendEquation(32774),t.blendFunc(1,0),t.blendFuncSeparate(1,0,1,0),t.colorMask(!0,!0,!0,!0),t.clearColor(0,0,0,0),t.depthMask(!0),t.depthFunc(513),t.clearDepth(1),t.stencilMask(4294967295),t.stencilFunc(519,0,4294967295),t.stencilOp(7680,7680,7680),t.clearStencil(0),t.cullFace(1029),t.frontFace(2305),t.polygonOffset(0,0),t.activeTexture(33984),t.bindFramebuffer(36160,null),!0===i&&(t.bindFramebuffer(36009,null),t.bindFramebuffer(36008,null)),t.useProgram(null),t.lineWidth(1),t.scissor(0,0,t.canvas.width,t.canvas.height),t.viewport(0,0,t.canvas.width,t.canvas.height),a={},N=null,L={},l=null,c={},h=null,u=!1,d=null,p=null,_=null,m=null,f=null,g=null,v=null,y=!1,x=null,b=null,w=null,T=null,A=null,R.set(0,0,t.canvas.width,t.canvas.height),I.set(0,0,t.canvas.width,t.canvas.height),s.reset(),r.reset(),o.reset()}}}function SE(t,e,n,i,s,r,o){const a=s.isWebGL2,l=s.maxTextures,c=s.maxCubemapSize,h=s.maxTextureSize,u=s.maxSamples,d=new WeakMap;let p,_=!1;try{_=\\\\\\\"undefined\\\\\\\"!=typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext(\\\\\\\"2d\\\\\\\")}catch(t){}function m(t,e){return _?new OffscreenCanvas(t,e):gb(\\\\\\\"canvas\\\\\\\")}function f(t,e,n,i){let s=1;if((t.width>i||t.height>i)&&(s=i/Math.max(t.width,t.height)),s<1||!0===e){if(\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?db:Math.floor,r=i(s*t.width),o=i(s*t.height);void 0===p&&(p=m(r,o));const a=n?m(r,o):p;a.width=r,a.height=o;return a.getContext(\\\\\\\"2d\\\\\\\").drawImage(t,0,0,r,o),console.warn(\\\\\\\"THREE.WebGLRenderer: Texture has been resized from (\\\\\\\"+t.width+\\\\\\\"x\\\\\\\"+t.height+\\\\\\\") to (\\\\\\\"+r+\\\\\\\"x\\\\\\\"+o+\\\\\\\").\\\\\\\"),a}return\\\\\\\"data\\\\\\\"in t&&console.warn(\\\\\\\"THREE.WebGLRenderer: Image in DataTexture is too big (\\\\\\\"+t.width+\\\\\\\"x\\\\\\\"+t.height+\\\\\\\").\\\\\\\"),t}return t}function g(t){return hb(t.width)&&hb(t.height)}function v(t,e){return t.generateMipmaps&&e&&t.minFilter!==Tx&&t.minFilter!==Ex}function y(e,n,s,r,o=1){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(s,r,o))}function x(n,i,s,r){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\\\\\\\"+n+\\\\\\\"'\\\\\\\")}let o=i;return 6403===i&&(5126===s&&(o=33326),5131===s&&(o=33325),5121===s&&(o=33321)),6407===i&&(5126===s&&(o=34837),5131===s&&(o=34843),5121===s&&(o=32849)),6408===i&&(5126===s&&(o=34836),5131===s&&(o=34842),5121===s&&(o=r===Xx?35907:32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get(\\\\\\\"EXT_color_buffer_float\\\\\\\"),o}function b(t){return t===Tx||t===Ax||t===Mx?9728:9729}function w(e){const n=e.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),o.memory.textures--}function T(e){const n=e.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",T),function(e){const n=e.texture,s=i.get(e),r=i.get(n);if(!e)return;void 0!==r.__webglTexture&&(t.deleteTexture(r.__webglTexture),o.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(s.__webglFramebuffer[e]),s.__webglDepthbuffer&&t.deleteRenderbuffer(s.__webglDepthbuffer[e]);else t.deleteFramebuffer(s.__webglFramebuffer),s.__webglDepthbuffer&&t.deleteRenderbuffer(s.__webglDepthbuffer),s.__webglMultisampledFramebuffer&&t.deleteFramebuffer(s.__webglMultisampledFramebuffer),s.__webglColorRenderbuffer&&t.deleteRenderbuffer(s.__webglColorRenderbuffer),s.__webglDepthRenderbuffer&&t.deleteRenderbuffer(s.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,s=n.length;e<s;e++){const s=i.get(n[e]);s.__webglTexture&&(t.deleteTexture(s.__webglTexture),o.memory.textures--),i.remove(n[e])}i.remove(n),i.remove(e)}(n)}let A=0;function M(t,e){const s=i.get(t);if(t.isVideoTexture&&function(t){const e=o.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(t),t.version>0&&s.__version!==t.version){const n=t.image;if(void 0===n)console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is undefined\\\\\\\");else{if(!1!==n.complete)return void O(s,t,e);console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\\\\\\\")}}n.activeTexture(33984+e),n.bindTexture(3553,s.__webglTexture)}function E(e,s){const o=i.get(e);e.version>0&&o.__version!==e.version?function(e,i,s){if(6!==i.image.length)return;L(e,i),n.activeTexture(33984+s),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const o=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=o||l?l?i.image[t].image:i.image[t]:f(i.image[t],!1,!0,c);const u=h[0],d=g(u)||a,p=r.convert(i.format),_=r.convert(i.type),m=x(i.internalFormat,p,_,i.encoding);let b;if(N(34067,i,d),o){for(let t=0;t<6;t++){b=h[t].mipmaps;for(let e=0;e<b.length;e++){const s=b[e];i.format!==Dx&&i.format!==Fx?null!==p?n.compressedTexImage2D(34069+t,e,m,s.width,s.height,0,s.data):console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\\\\\\\"):n.texImage2D(34069+t,e,m,s.width,s.height,0,p,_,s.data)}}e.__maxMipLevel=b.length-1}else{b=i.mipmaps;for(let t=0;t<6;t++)if(l){n.texImage2D(34069+t,0,m,h[t].width,h[t].height,0,p,_,h[t].data);for(let e=0;e<b.length;e++){const i=b[e].image[t].image;n.texImage2D(34069+t,e+1,m,i.width,i.height,0,p,_,i.data)}}else{n.texImage2D(34069+t,0,m,p,_,h[t]);for(let e=0;e<b.length;e++){const i=b[e];n.texImage2D(34069+t,e+1,m,p,_,i.image[t])}}e.__maxMipLevel=b.length}v(i,d)&&y(34067,i,u.width,u.height);e.__version=i.version,i.onUpdate&&i.onUpdate(i)}(o,e,s):(n.activeTexture(33984+s),n.bindTexture(34067,o.__webglTexture))}const S={[xx]:10497,[bx]:33071,[wx]:33648},C={[Tx]:9728,[Ax]:9984,[Mx]:9986,[Ex]:9729,[Sx]:9985,[Cx]:9987};function N(n,r,o){if(o?(t.texParameteri(n,10242,S[r.wrapS]),t.texParameteri(n,10243,S[r.wrapT]),32879!==n&&35866!==n||t.texParameteri(n,32882,S[r.wrapR]),t.texParameteri(n,10240,C[r.magFilter]),t.texParameteri(n,10241,C[r.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n&&35866!==n||t.texParameteri(n,32882,33071),r.wrapS===bx&&r.wrapT===bx||console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\\\\\\\"),t.texParameteri(n,10240,b(r.magFilter)),t.texParameteri(n,10241,b(r.minFilter)),r.minFilter!==Tx&&r.minFilter!==Ex&&console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\\\\\\\")),!0===e.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")){const o=e.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");if(r.type===Px&&!1===e.has(\\\\\\\"OES_texture_float_linear\\\\\\\"))return;if(!1===a&&r.type===Rx&&!1===e.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\"))return;(r.anisotropy>1||i.get(r).__currentAnisotropy)&&(t.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(r.anisotropy,s.getMaxAnisotropy())),i.get(r).__currentAnisotropy=r.anisotropy)}}function L(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener(\\\\\\\"dispose\\\\\\\",w),e.__webglTexture=t.createTexture(),o.memory.textures++)}function O(e,i,s){let o=3553;i.isDataTexture2DArray&&(o=35866),i.isDataTexture3D&&(o=32879),L(e,i),n.activeTexture(33984+s),n.bindTexture(o,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const l=function(t){return!a&&(t.wrapS!==bx||t.wrapT!==bx||t.minFilter!==Tx&&t.minFilter!==Ex)}(i)&&!1===g(i.image),c=f(i.image,l,!1,h),u=g(c)||a,d=r.convert(i.format);let p,_=r.convert(i.type),m=x(i.internalFormat,d,_,i.encoding);N(o,i,u);const b=i.mipmaps;if(i.isDepthTexture)m=6402,a?m=i.type===Px?36012:i.type===Ox?33190:i.type===Ix?35056:33189:i.type===Px&&console.error(\\\\\\\"WebGLRenderer: Floating point depth texture requires WebGL2.\\\\\\\"),i.format===Bx&&6402===m&&i.type!==Lx&&i.type!==Ox&&(console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\\\\\\\"),i.type=Lx,_=r.convert(i.type)),i.format===zx&&6402===m&&(m=34041,i.type!==Ix&&(console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\\\\\\\"),i.type=Ix,_=r.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,_,null);else if(i.isDataTexture)if(b.length>0&&u){for(let t=0,e=b.length;t<e;t++)p=b[t],n.texImage2D(3553,t,m,p.width,p.height,0,d,_,p.data);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(3553,0,m,c.width,c.height,0,d,_,c.data),e.__maxMipLevel=0;else if(i.isCompressedTexture){for(let t=0,e=b.length;t<e;t++)p=b[t],i.format!==Dx&&i.format!==Fx?null!==d?n.compressedTexImage2D(3553,t,m,p.width,p.height,0,p.data):console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\\\\\\\"):n.texImage2D(3553,t,m,p.width,p.height,0,d,_,p.data);e.__maxMipLevel=b.length-1}else if(i.isDataTexture2DArray)n.texImage3D(35866,0,m,c.width,c.height,c.depth,0,d,_,c.data),e.__maxMipLevel=0;else if(i.isDataTexture3D)n.texImage3D(32879,0,m,c.width,c.height,c.depth,0,d,_,c.data),e.__maxMipLevel=0;else if(b.length>0&&u){for(let t=0,e=b.length;t<e;t++)p=b[t],n.texImage2D(3553,t,m,d,_,p);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(3553,0,m,d,_,c),e.__maxMipLevel=0;v(i,u)&&y(o,i,c.width,c.height),e.__version=i.version,i.onUpdate&&i.onUpdate(i)}function P(e,s,o,a,l){const c=r.convert(o.format),h=r.convert(o.type),u=x(o.internalFormat,c,h,o.encoding);32879===l||35866===l?n.texImage3D(l,0,u,s.width,s.height,s.depth,0,c,h,null):n.texImage2D(l,0,u,s.width,s.height,0,c,h,null),n.bindFramebuffer(36160,e),t.framebufferTexture2D(36160,a,l,i.get(o).__webglTexture,0),n.bindFramebuffer(36160,null)}function R(e,n,i){if(t.bindRenderbuffer(36161,e),n.depthBuffer&&!n.stencilBuffer){let s=33189;if(i){const e=n.depthTexture;e&&e.isDepthTexture&&(e.type===Px?s=36012:e.type===Ox&&(s=33190));const i=F(n);t.renderbufferStorageMultisample(36161,i,s,n.width,n.height)}else t.renderbufferStorage(36161,s,n.width,n.height);t.framebufferRenderbuffer(36160,36096,36161,e)}else if(n.depthBuffer&&n.stencilBuffer){if(i){const e=F(n);t.renderbufferStorageMultisample(36161,e,35056,n.width,n.height)}else t.renderbufferStorage(36161,34041,n.width,n.height);t.framebufferRenderbuffer(36160,33306,36161,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture[0]:n.texture,s=r.convert(e.format),o=r.convert(e.type),a=x(e.internalFormat,s,o,e.encoding);if(i){const e=F(n);t.renderbufferStorageMultisample(36161,e,a,n.width,n.height)}else t.renderbufferStorage(36161,a,n.width,n.height)}t.bindRenderbuffer(36161,null)}function I(e){const s=i.get(e),r=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture){if(r)throw new Error(\\\\\\\"target.depthTexture not supported in Cube render targets\\\\\\\");!function(e,s){if(s&&s.isWebGLCubeRenderTarget)throw new Error(\\\\\\\"Depth Texture with cube render targets is not supported\\\\\\\");if(n.bindFramebuffer(36160,e),!s.depthTexture||!s.depthTexture.isDepthTexture)throw new Error(\\\\\\\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\\\\\\\");i.get(s.depthTexture).__webglTexture&&s.depthTexture.image.width===s.width&&s.depthTexture.image.height===s.height||(s.depthTexture.image.width=s.width,s.depthTexture.image.height=s.height,s.depthTexture.needsUpdate=!0),M(s.depthTexture,0);const r=i.get(s.depthTexture).__webglTexture;if(s.depthTexture.format===Bx)t.framebufferTexture2D(36160,36096,3553,r,0);else{if(s.depthTexture.format!==zx)throw new Error(\\\\\\\"Unknown depthTexture format\\\\\\\");t.framebufferTexture2D(36160,33306,3553,r,0)}}(s.__webglFramebuffer,e)}else if(r){s.__webglDepthbuffer=[];for(let i=0;i<6;i++)n.bindFramebuffer(36160,s.__webglFramebuffer[i]),s.__webglDepthbuffer[i]=t.createRenderbuffer(),R(s.__webglDepthbuffer[i],e,!1)}else n.bindFramebuffer(36160,s.__webglFramebuffer),s.__webglDepthbuffer=t.createRenderbuffer(),R(s.__webglDepthbuffer,e,!1);n.bindFramebuffer(36160,null)}function F(t){return a&&t.isWebGLMultisampleRenderTarget?Math.min(u,t.samples):0}let D=!1,B=!1;this.allocateTextureUnit=function(){const t=A;return t>=l&&console.warn(\\\\\\\"THREE.WebGLTextures: Trying to use \\\\\\\"+t+\\\\\\\" texture units while this GPU supports only \\\\\\\"+l),A+=1,t},this.resetTextureUnits=function(){A=0},this.setTexture2D=M,this.setTexture2DArray=function(t,e){const s=i.get(t);t.version>0&&s.__version!==t.version?O(s,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,s.__webglTexture))},this.setTexture3D=function(t,e){const s=i.get(t);t.version>0&&s.__version!==t.version?O(s,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,s.__webglTexture))},this.setTextureCube=E,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),h=i.get(l);e.addEventListener(\\\\\\\"dispose\\\\\\\",T),!0!==e.isWebGLMultipleRenderTargets&&(h.__webglTexture=t.createTexture(),h.__version=l.version,o.memory.textures++);const u=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,_=l.isDataTexture3D||l.isDataTexture2DArray,m=g(e)||a;if(!a||l.format!==Fx||l.type!==Px&&l.type!==Rx||(l.format=Dx,console.warn(\\\\\\\"THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.\\\\\\\")),u){c.__webglFramebuffer=[];for(let e=0;e<6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(s.drawBuffers){const n=e.texture;for(let e=0,s=n.length;e<s;e++){const s=i.get(n[e]);void 0===s.__webglTexture&&(s.__webglTexture=t.createTexture(),o.memory.textures++)}}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\\\\\\\");else if(p)if(a){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,c.__webglColorRenderbuffer);const i=r.convert(l.format),s=r.convert(l.type),o=x(l.internalFormat,i,s,l.encoding),a=F(e);t.renderbufferStorageMultisample(36161,a,o,e.width,e.height),n.bindFramebuffer(36160,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,c.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(c.__webglDepthRenderbuffer=t.createRenderbuffer(),R(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\");if(u){n.bindTexture(34067,h.__webglTexture),N(34067,l,m);for(let t=0;t<6;t++)P(c.__webglFramebuffer[t],e,l,36064,34069+t);v(l,m)&&y(34067,l,e.width,e.height),n.unbindTexture()}else if(d){const t=e.texture;for(let s=0,r=t.length;s<r;s++){const r=t[s],o=i.get(r);n.bindTexture(3553,o.__webglTexture),N(3553,r,m),P(c.__webglFramebuffer,e,r,36064+s,3553),v(r,m)&&y(3553,r,e.width,e.height)}n.unbindTexture()}else{let t=3553;if(_)if(a){t=l.isDataTexture3D?32879:35866}else console.warn(\\\\\\\"THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.\\\\\\\");n.bindTexture(t,h.__webglTexture),N(t,l,m),P(c.__webglFramebuffer,e,l,36064,t),v(l,m)&&y(t,l,e.width,e.height,e.depth),n.unbindTexture()}e.depthBuffer&&I(e)},this.updateRenderTargetMipmap=function(t){const e=g(t)||a,s=!0===t.isWebGLMultipleRenderTargets?t.texture:[t.texture];for(let r=0,o=s.length;r<o;r++){const o=s[r];if(v(o,e)){const e=t.isWebGLCubeRenderTarget?34067:3553,s=i.get(o).__webglTexture;n.bindTexture(e,s),y(e,o,t.width,t.height),n.unbindTexture()}}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const s=e.width,r=e.height;let o=16384;e.depthBuffer&&(o|=256),e.stencilBuffer&&(o|=1024);const a=i.get(e);n.bindFramebuffer(36008,a.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,a.__webglFramebuffer),t.blitFramebuffer(0,0,s,r,0,0,s,r,o,9728),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,a.__webglMultisampledFramebuffer)}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===D&&(console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\\\\\\\"),D=!0),t=t.texture),M(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===B&&(console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\\\\\\\"),B=!0),t=t.texture),E(t,e)}}function CE(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(t===Nx)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(t===Lx)return 5123;if(1013===t)return 5124;if(t===Ox)return 5125;if(t===Px)return 5126;if(t===Rx)return i?5131:(n=e.get(\\\\\\\"OES_texture_half_float\\\\\\\"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(t===Fx)return 6407;if(t===Dx)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(t===Bx)return 6402;if(t===zx)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get(\\\\\\\"WEBGL_compressed_texture_etc1\\\\\\\"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get(\\\\\\\"WEBGL_compressed_texture_etc\\\\\\\"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get(\\\\\\\"WEBGL_compressed_texture_astc\\\\\\\"),null!==n?t:null):36492===t?(n=e.get(\\\\\\\"EXT_texture_compression_bptc\\\\\\\"),null!==n?t:null):t===Ix?i?34042:(n=e.get(\\\\\\\"WEBGL_depth_texture\\\\\\\"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}class NE extends DT{constructor(t=[]){super(),this.cameras=t}}NE.prototype.isArrayCamera=!0;class LE extends Nw{constructor(){super(),this.type=\\\\\\\"Group\\\\\\\"}}LE.prototype.isGroup=!0;const OE={type:\\\\\\\"move\\\\\\\"};class PE{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new LE,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new LE,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new Sb,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new Sb),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new LE,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new Sb,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new Sb),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:\\\\\\\"disconnected\\\\\\\",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,n){let i=null,s=null,r=null;const o=this._targetRay,a=this._grip,l=this._hand;if(t&&\\\\\\\"visible-blurred\\\\\\\"!==e.session.visibilityState)if(null!==o&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(o.matrix.fromArray(i.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),i.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(i.linearVelocity)):o.hasLinearVelocity=!1,i.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(i.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(OE))),l&&t.hand){r=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new LE;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const s=l.joints[i.jointName];null!==t&&(s.matrix.fromArray(t.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.jointRadius=t.radius),s.visible=null!==t}const i=l.joints[\\\\\\\"index-finger-tip\\\\\\\"],s=l.joints[\\\\\\\"thumb-tip\\\\\\\"],o=i.position.distanceTo(s.position),a=.02,c=.005;l.inputState.pinching&&o>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:\\\\\\\"pinchend\\\\\\\",handedness:t.handedness,target:this})):!l.inputState.pinching&&o<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:\\\\\\\"pinchstart\\\\\\\",handedness:t.handedness,target:this}))}else null!==a&&t.gripSpace&&(s=e.getPose(t.gripSpace,n),null!==s&&(a.matrix.fromArray(s.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),s.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(s.linearVelocity)):a.hasLinearVelocity=!1,s.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(s.angularVelocity)):a.hasAngularVelocity=!1));return null!==o&&(o.visible=null!==i),null!==a&&(a.visible=null!==s),null!==l&&(l.visible=null!==r),this}}class RE extends tb{constructor(t,e){super();const n=this,i=t.state;let s=null,r=1,o=null,a=\\\\\\\"local-floor\\\\\\\",l=null,c=null,h=null,u=null,d=null,p=!1,_=null,m=null,f=null,g=null,v=null,y=null;const x=[],b=new Map,w=new DT;w.layers.enable(1),w.viewport=new Tb;const T=new DT;T.layers.enable(2),T.viewport=new Tb;const A=[w,T],M=new NE;M.layers.enable(1),M.layers.enable(2);let E=null,S=null;function C(t){const e=b.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function N(){b.forEach((function(t,e){t.disconnect(e)})),b.clear(),E=null,S=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),h&&e.deleteFramebuffer(h),_&&e.deleteFramebuffer(_),m&&e.deleteRenderbuffer(m),f&&e.deleteRenderbuffer(f),h=null,_=null,m=null,f=null,d=null,u=null,c=null,s=null,F.stop(),n.isPresenting=!1,n.dispatchEvent({type:\\\\\\\"sessionend\\\\\\\"})}function L(t){const e=s.inputSources;for(let t=0;t<x.length;t++)b.set(e[t],x[t]);for(let e=0;e<t.removed.length;e++){const n=t.removed[e],i=b.get(n);i&&(i.dispatchEvent({type:\\\\\\\"disconnected\\\\\\\",data:n}),b.delete(n))}for(let e=0;e<t.added.length;e++){const n=t.added[e],i=b.get(n);i&&i.dispatchEvent({type:\\\\\\\"connected\\\\\\\",data:n})}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=x[t];return void 0===e&&(e=new PE,x[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=x[t];return void 0===e&&(e=new PE,x[t]=e),e.getGripSpace()},this.getHand=function(t){let e=x[t];return void 0===e&&(e=new PE,x[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){r=t,!0===n.isPresenting&&console.warn(\\\\\\\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\\\\\\\")},this.setReferenceSpaceType=function(t){a=t,!0===n.isPresenting&&console.warn(\\\\\\\"THREE.WebXRManager: Cannot change reference space type while presenting.\\\\\\\")},this.getReferenceSpace=function(){return o},this.getBaseLayer=function(){return null!==u?u:d},this.getBinding=function(){return c},this.getFrame=function(){return g},this.getSession=function(){return s},this.setSession=async function(t){if(s=t,null!==s){s.addEventListener(\\\\\\\"select\\\\\\\",C),s.addEventListener(\\\\\\\"selectstart\\\\\\\",C),s.addEventListener(\\\\\\\"selectend\\\\\\\",C),s.addEventListener(\\\\\\\"squeeze\\\\\\\",C),s.addEventListener(\\\\\\\"squeezestart\\\\\\\",C),s.addEventListener(\\\\\\\"squeezeend\\\\\\\",C),s.addEventListener(\\\\\\\"end\\\\\\\",N),s.addEventListener(\\\\\\\"inputsourceschange\\\\\\\",L);const t=e.getContextAttributes();if(!0!==t.xrCompatible&&await e.makeXRCompatible(),void 0===s.renderState.layers){const n={antialias:t.antialias,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(s,e,n),s.updateRenderState({baseLayer:d})}else if(e instanceof WebGLRenderingContext){const n={antialias:!0,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(s,e,n),s.updateRenderState({layers:[d]})}else{p=t.antialias;let n=null;t.depth&&(y=256,t.stencil&&(y|=1024),v=t.stencil?33306:36096,n=t.stencil?35056:33190);const o={colorFormat:t.alpha?32856:32849,depthFormat:n,scaleFactor:r};c=new XRWebGLBinding(s,e),u=c.createProjectionLayer(o),h=e.createFramebuffer(),s.updateRenderState({layers:[u]}),p&&(_=e.createFramebuffer(),m=e.createRenderbuffer(),e.bindRenderbuffer(36161,m),e.renderbufferStorageMultisample(36161,4,32856,u.textureWidth,u.textureHeight),i.bindFramebuffer(36160,_),e.framebufferRenderbuffer(36160,36064,36161,m),e.bindRenderbuffer(36161,null),null!==n&&(f=e.createRenderbuffer(),e.bindRenderbuffer(36161,f),e.renderbufferStorageMultisample(36161,4,n,u.textureWidth,u.textureHeight),e.framebufferRenderbuffer(36160,v,36161,f),e.bindRenderbuffer(36161,null)),i.bindFramebuffer(36160,null))}o=await s.requestReferenceSpace(a),F.setContext(s),F.start(),n.isPresenting=!0,n.dispatchEvent({type:\\\\\\\"sessionstart\\\\\\\"})}};const O=new Sb,P=new Sb;function R(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===s)return;M.near=T.near=w.near=t.near,M.far=T.far=w.far=t.far,E===M.near&&S===M.far||(s.updateRenderState({depthNear:M.near,depthFar:M.far}),E=M.near,S=M.far);const e=t.parent,n=M.cameras;R(M,e);for(let t=0;t<n.length;t++)R(n[t],e);M.matrixWorld.decompose(M.position,M.quaternion,M.scale),t.position.copy(M.position),t.quaternion.copy(M.quaternion),t.scale.copy(M.scale),t.matrix.copy(M.matrix),t.matrixWorld.copy(M.matrixWorld);const i=t.children;for(let t=0,e=i.length;t<e;t++)i[t].updateMatrixWorld(!0);2===n.length?function(t,e,n){O.setFromMatrixPosition(e.matrixWorld),P.setFromMatrixPosition(n.matrixWorld);const i=O.distanceTo(P),s=e.projectionMatrix.elements,r=n.projectionMatrix.elements,o=s[14]/(s[10]-1),a=s[14]/(s[10]+1),l=(s[9]+1)/s[5],c=(s[9]-1)/s[5],h=(s[8]-1)/s[0],u=(r[8]+1)/r[0],d=o*h,p=o*u,_=i/(-h+u),m=_*-h;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(m),t.translateZ(_),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.copy(t.matrixWorld).invert();const f=o+_,g=a+_,v=d-m,y=p+(i-m),x=l*a/g*f,b=c*a/g*f;t.projectionMatrix.makePerspective(v,y,x,b,f,g)}(M,w,T):M.projectionMatrix.copy(w.projectionMatrix)},this.getCamera=function(){return M},this.getFoveation=function(){return null!==u?u.fixedFoveation:null!==d?d.fixedFoveation:void 0},this.setFoveation=function(t){null!==u&&(u.fixedFoveation=t),null!==d&&void 0!==d.fixedFoveation&&(d.fixedFoveation=t)};let I=null;const F=new YT;F.setAnimationLoop((function(t,n){if(l=n.getViewerPose(o),g=n,null!==l){const t=l.views;null!==d&&i.bindXRFramebuffer(d.framebuffer);let n=!1;t.length!==M.cameras.length&&(M.cameras.length=0,n=!0);for(let s=0;s<t.length;s++){const r=t[s];let o=null;if(null!==d)o=d.getViewport(r);else{const t=c.getViewSubImage(u,r);i.bindXRFramebuffer(h),void 0!==t.depthStencilTexture&&e.framebufferTexture2D(36160,v,3553,t.depthStencilTexture,0),e.framebufferTexture2D(36160,36064,3553,t.colorTexture,0),o=t.viewport}const a=A[s];a.matrix.fromArray(r.transform.matrix),a.projectionMatrix.fromArray(r.projectionMatrix),a.viewport.set(o.x,o.y,o.width,o.height),0===s&&M.matrix.copy(a.matrix),!0===n&&M.cameras.push(a)}p&&(i.bindXRFramebuffer(_),null!==y&&e.clear(y))}const r=s.inputSources;for(let t=0;t<x.length;t++){const e=x[t],i=r[t];e.update(i,n,o)}if(I&&I(t,n),p){const t=u.textureWidth,n=u.textureHeight;i.bindFramebuffer(36008,_),i.bindFramebuffer(36009,h),e.invalidateFramebuffer(36008,[v]),e.invalidateFramebuffer(36009,[v]),e.blitFramebuffer(0,0,t,n,0,0,t,n,16384,9728),e.invalidateFramebuffer(36008,[36064]),i.bindFramebuffer(36008,null),i.bindFramebuffer(36009,null),i.bindFramebuffer(36160,_)}g=null})),this.setAnimationLoop=function(t){I=t},this.dispose=function(){}}}function IE(t){function e(e,n){e.opacity.value=n.opacity,n.color&&e.diffuse.value.copy(n.color),n.emissive&&e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map&&(e.map.value=n.map),n.alphaMap&&(e.alphaMap.value=n.alphaMap),n.specularMap&&(e.specularMap.value=n.specularMap),n.alphaTest>0&&(e.alphaTest.value=n.alphaTest);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,e.reflectivity.value=n.reflectivity,e.ior.value=n.ior,e.refractionRatio.value=n.refractionRatio;const s=t.get(i).__maxMipLevel;void 0!==s&&(e.maxMipLevel.value=s)}let s,r;n.lightMap&&(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap&&(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?s=n.map:n.specularMap?s=n.specularMap:n.displacementMap?s=n.displacementMap:n.normalMap?s=n.normalMap:n.bumpMap?s=n.bumpMap:n.roughnessMap?s=n.roughnessMap:n.metalnessMap?s=n.metalnessMap:n.alphaMap?s=n.alphaMap:n.emissiveMap?s=n.emissiveMap:n.clearcoatMap?s=n.clearcoatMap:n.clearcoatNormalMap?s=n.clearcoatNormalMap:n.clearcoatRoughnessMap?s=n.clearcoatRoughnessMap:n.specularIntensityMap?s=n.specularIntensityMap:n.specularTintMap?s=n.specularTintMap:n.transmissionMap?s=n.transmissionMap:n.thicknessMap&&(s=n.thicknessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),e.uvTransform.value.copy(s.matrix)),n.aoMap?r=n.aoMap:n.lightMap&&(r=n.lightMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uv2Transform.value.copy(r.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap&&(e.roughnessMap.value=n.roughnessMap),n.metalnessMap&&(e.metalnessMap.value=n.metalnessMap),n.emissiveMap&&(e.emissiveMap.value=n.emissiveMap),n.bumpMap&&(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,1===n.side&&(e.bumpScale.value*=-1)),n.normalMap&&(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),1===n.side&&e.normalScale.value.negate()),n.displacementMap&&(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap&&(e.envMapIntensity.value=n.envMapIntensity)}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,s,r,o){i.isMeshBasicMaterial?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap);e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),t.ior.value=e.ior,e.sheen>0&&(t.sheenTint.value.copy(e.sheenTint).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness);e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side&&t.clearcoatNormalScale.value.negate()));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationTint.value.copy(e.attenuationTint));t.specularIntensity.value=e.specularIntensity,t.specularTint.value.copy(e.specularTint),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularTintMap&&(t.specularTintMap.value=e.specularTintMap)}(t,i,o):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let s;e.map?s=e.map:e.alphaMap&&(s=e.alphaMap);void 0!==s&&(!0===s.matrixAutoUpdate&&s.updateMatrix(),t.uvTransform.value.copy(s.matrix))}(t,i,s,r):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function FE(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=gb(\\\\\\\"canvas\\\\\\\");return t.style.display=\\\\\\\"block\\\\\\\",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,s=void 0===t.depth||t.depth,r=void 0===t.stencil||t.stencil,o=void 0!==t.antialias&&t.antialias,a=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:\\\\\\\"default\\\\\\\",h=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let u=null,d=null;const p=[],_=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=qx,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const m=this;let f=!1,g=0,v=0,y=null,x=-1,b=null;const w=new Tb,T=new Tb;let A=null,M=e.width,E=e.height,S=1,C=null,N=null;const L=new Tb(0,0,M,E),O=new Tb(0,0,M,E);let P=!1;const R=[],I=new XT;let F=!1,D=!1,B=null;const z=new sw,k=new Sb,U={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function G(){return null===y?S:1}let V,H,j,W,q,X,Y,$,J,Z,K,Q,tt,et,nt,it,st,rt,ot,at,lt,ct,ht,ut=n;function dt(t,n){for(let i=0;i<t.length;i++){const s=t[i],r=e.getContext(s,n);if(null!==r)return r}return null}try{const t={alpha:i,depth:s,stencil:r,antialias:o,premultipliedAlpha:a,preserveDrawingBuffer:l,powerPreference:c,failIfMajorPerformanceCaveat:h};if(e.addEventListener(\\\\\\\"webglcontextlost\\\\\\\",mt,!1),e.addEventListener(\\\\\\\"webglcontextrestored\\\\\\\",ft,!1),null===ut){const e=[\\\\\\\"webgl2\\\\\\\",\\\\\\\"webgl\\\\\\\",\\\\\\\"experimental-webgl\\\\\\\"];if(!0===m.isWebGL1Renderer&&e.shift(),ut=dt(e,t),null===ut)throw dt(e)?new Error(\\\\\\\"Error creating WebGL context with your selected attributes.\\\\\\\"):new Error(\\\\\\\"Error creating WebGL context.\\\\\\\")}void 0===ut.getShaderPrecisionFormat&&(ut.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error(\\\\\\\"THREE.WebGLRenderer: \\\\\\\"+t.message),t}function pt(){V=new PA(ut),H=new iA(ut,V,t),V.init(H),ct=new CE(ut,V,H),j=new EE(ut,V,H),R[0]=1029,W=new FA(ut),q=new dE,X=new SE(ut,V,j,q,H,ct,W),Y=new rA(m),$=new OA(m),J=new $T(ut,H),ht=new eA(ut,V,J,H),Z=new RA(ut,J,W,ht),K=new GA(ut,Z,J,W),ot=new UA(ut,H,X),it=new sA(q),Q=new uE(m,Y,$,V,H,ht,it),tt=new IE(q),et=new fE(q),nt=new wE(V,H),rt=new tA(m,Y,j,K,a),st=new ME(m,K,H),at=new nA(ut,V,W,H),lt=new IA(ut,V,W,H),W.programs=Q.programs,m.capabilities=H,m.extensions=V,m.properties=q,m.renderLists=et,m.shadowMap=st,m.state=j,m.info=W}pt();const _t=new RE(m,ut);function mt(t){t.preventDefault(),console.log(\\\\\\\"THREE.WebGLRenderer: Context Lost.\\\\\\\"),f=!0}function ft(){console.log(\\\\\\\"THREE.WebGLRenderer: Context Restored.\\\\\\\"),f=!1;const t=W.autoReset,e=st.enabled,n=st.autoUpdate,i=st.needsUpdate,s=st.type;pt(),W.autoReset=t,st.enabled=e,st.autoUpdate=n,st.needsUpdate=i,st.type=s}function gt(t){const e=t.target;e.removeEventListener(\\\\\\\"dispose\\\\\\\",gt),function(t){(function(t){const e=q.get(t).programs;void 0!==e&&e.forEach((function(t){Q.releaseProgram(t)}))})(t),q.remove(t)}(e)}this.xr=_t,this.getContext=function(){return ut},this.getContextAttributes=function(){return ut.getContextAttributes()},this.forceContextLoss=function(){const t=V.get(\\\\\\\"WEBGL_lose_context\\\\\\\");t&&t.loseContext()},this.forceContextRestore=function(){const t=V.get(\\\\\\\"WEBGL_lose_context\\\\\\\");t&&t.restoreContext()},this.getPixelRatio=function(){return S},this.setPixelRatio=function(t){void 0!==t&&(S=t,this.setSize(M,E,!1))},this.getSize=function(t){return t.set(M,E)},this.setSize=function(t,n,i){_t.isPresenting?console.warn(\\\\\\\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\\\\\\\"):(M=t,E=n,e.width=Math.floor(t*S),e.height=Math.floor(n*S),!1!==i&&(e.style.width=t+\\\\\\\"px\\\\\\\",e.style.height=n+\\\\\\\"px\\\\\\\"),this.setViewport(0,0,t,n))},this.getDrawingBufferSize=function(t){return t.set(M*S,E*S).floor()},this.setDrawingBufferSize=function(t,n,i){M=t,E=n,S=i,e.width=Math.floor(t*i),e.height=Math.floor(n*i),this.setViewport(0,0,t,n)},this.getCurrentViewport=function(t){return t.copy(w)},this.getViewport=function(t){return t.copy(L)},this.setViewport=function(t,e,n,i){t.isVector4?L.set(t.x,t.y,t.z,t.w):L.set(t,e,n,i),j.viewport(w.copy(L).multiplyScalar(S).floor())},this.getScissor=function(t){return t.copy(O)},this.setScissor=function(t,e,n,i){t.isVector4?O.set(t.x,t.y,t.z,t.w):O.set(t,e,n,i),j.scissor(T.copy(O).multiplyScalar(S).floor())},this.getScissorTest=function(){return P},this.setScissorTest=function(t){j.setScissorTest(P=t)},this.setOpaqueSort=function(t){C=t},this.setTransparentSort=function(t){N=t},this.getClearColor=function(t){return t.copy(rt.getClearColor())},this.setClearColor=function(){rt.setClearColor.apply(rt,arguments)},this.getClearAlpha=function(){return rt.getClearAlpha()},this.setClearAlpha=function(){rt.setClearAlpha.apply(rt,arguments)},this.clear=function(t,e,n){let i=0;(void 0===t||t)&&(i|=16384),(void 0===e||e)&&(i|=256),(void 0===n||n)&&(i|=1024),ut.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener(\\\\\\\"webglcontextlost\\\\\\\",mt,!1),e.removeEventListener(\\\\\\\"webglcontextrestored\\\\\\\",ft,!1),et.dispose(),nt.dispose(),q.dispose(),Y.dispose(),$.dispose(),K.dispose(),ht.dispose(),_t.dispose(),_t.removeEventListener(\\\\\\\"sessionstart\\\\\\\",yt),_t.removeEventListener(\\\\\\\"sessionend\\\\\\\",xt),B&&(B.dispose(),B=null),bt.stop()},this.renderBufferImmediate=function(t,e){ht.initAttributes();const n=q.get(t);t.hasPositions&&!n.position&&(n.position=ut.createBuffer()),t.hasNormals&&!n.normal&&(n.normal=ut.createBuffer()),t.hasUvs&&!n.uv&&(n.uv=ut.createBuffer()),t.hasColors&&!n.color&&(n.color=ut.createBuffer());const i=e.getAttributes();t.hasPositions&&(ut.bindBuffer(34962,n.position),ut.bufferData(34962,t.positionArray,35048),ht.enableAttribute(i.position.location),ut.vertexAttribPointer(i.position.location,3,5126,!1,0,0)),t.hasNormals&&(ut.bindBuffer(34962,n.normal),ut.bufferData(34962,t.normalArray,35048),ht.enableAttribute(i.normal.location),ut.vertexAttribPointer(i.normal.location,3,5126,!1,0,0)),t.hasUvs&&(ut.bindBuffer(34962,n.uv),ut.bufferData(34962,t.uvArray,35048),ht.enableAttribute(i.uv.location),ut.vertexAttribPointer(i.uv.location,2,5126,!1,0,0)),t.hasColors&&(ut.bindBuffer(34962,n.color),ut.bufferData(34962,t.colorArray,35048),ht.enableAttribute(i.color.location),ut.vertexAttribPointer(i.color.location,3,5126,!1,0,0)),ht.disableUnusedAttributes(),ut.drawArrays(4,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,n,i,s,r){null===e&&(e=U);const o=s.isMesh&&s.matrixWorld.determinant()<0,a=Ct(t,e,n,i,s);j.setMaterial(i,o);let l=n.index;const c=n.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;let h,u=1;!0===i.wireframe&&(l=Z.getWireframeAttribute(n),u=2),ht.setup(s,i,a,n,l);let d=at;null!==l&&(h=J.get(l),d=lt,d.setIndex(h));const p=null!==l?l.count:c.count,_=n.drawRange.start*u,m=n.drawRange.count*u,f=null!==r?r.start*u:0,g=null!==r?r.count*u:1/0,v=Math.max(_,f),y=Math.min(p,_+m,f+g)-1,x=Math.max(0,y-v+1);if(0!==x){if(s.isMesh)!0===i.wireframe?(j.setLineWidth(i.wireframeLinewidth*G()),d.setMode(1)):d.setMode(4);else if(s.isLine){let t=i.linewidth;void 0===t&&(t=1),j.setLineWidth(t*G()),s.isLineSegments?d.setMode(1):s.isLineLoop?d.setMode(2):d.setMode(3)}else s.isPoints?d.setMode(0):s.isSprite&&d.setMode(4);if(s.isInstancedMesh)d.renderInstances(v,x,s.count);else if(n.isInstancedBufferGeometry){const t=Math.min(n.instanceCount,n._maxInstanceCount);d.renderInstances(v,x,t)}else d.render(v,x)}},this.compile=function(t,e){d=nt.get(t),d.init(),_.push(d),t.traverseVisible((function(t){t.isLight&&t.layers.test(e.layers)&&(d.pushLight(t),t.castShadow&&d.pushShadow(t))})),d.setupLights(m.physicallyCorrectLights),t.traverse((function(e){const n=e.material;if(n)if(Array.isArray(n))for(let i=0;i<n.length;i++){Et(n[i],t,e)}else Et(n,t,e)})),_.pop(),d=null};let vt=null;function yt(){bt.stop()}function xt(){bt.start()}const bt=new YT;function wt(t,e,n,i){if(!1===t.visible)return;if(t.layers.test(e.layers))if(t.isGroup)n=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(e);else if(t.isLight)d.pushLight(t),t.castShadow&&d.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||I.intersectsSprite(t)){i&&k.setFromMatrixPosition(t.matrixWorld).applyMatrix4(z);const e=K.update(t),s=t.material;s.visible&&u.push(t,e,s,n,k.z,null)}}else if(t.isImmediateRenderObject)i&&k.setFromMatrixPosition(t.matrixWorld).applyMatrix4(z),u.push(t,null,t.material,n,k.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==W.render.frame&&(t.skeleton.update(),t.skeleton.frame=W.render.frame),!t.frustumCulled||I.intersectsObject(t))){i&&k.setFromMatrixPosition(t.matrixWorld).applyMatrix4(z);const e=K.update(t),s=t.material;if(Array.isArray(s)){const i=e.groups;for(let r=0,o=i.length;r<o;r++){const o=i[r],a=s[o.materialIndex];a&&a.visible&&u.push(t,e,a,n,k.z,o)}}else s.visible&&u.push(t,e,s,n,k.z,null)}const s=t.children;for(let t=0,r=s.length;t<r;t++)wt(s[t],e,n,i)}function Tt(t,e,n,i){const s=t.opaque,r=t.transmissive,a=t.transparent;d.setupLightsView(n),r.length>0&&function(t,e,n){if(null===B){const t=!0===o&&!0===H.isWebGL2;B=new(t?Mb:Ab)(1024,1024,{generateMipmaps:!0,type:null!==ct.convert(Rx)?Rx:Nx,minFilter:Cx,magFilter:Tx,wrapS:bx,wrapT:bx})}const i=m.getRenderTarget();m.setRenderTarget(B),m.clear();const s=m.toneMapping;m.toneMapping=0,At(t,e,n),m.toneMapping=s,X.updateMultisampleRenderTarget(B),X.updateRenderTargetMipmap(B),m.setRenderTarget(i)}(s,e,n),i&&j.viewport(w.copy(i)),s.length>0&&At(s,e,n),r.length>0&&At(r,e,n),a.length>0&&At(a,e,n)}function At(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let s=0,r=t.length;s<r;s++){const r=t[s],o=r.object,a=r.geometry,l=null===i?r.material:i,c=r.group;o.layers.test(n.layers)&&Mt(o,e,n,a,l,c)}}function Mt(t,e,n,i,s,r){if(t.onBeforeRender(m,e,n,i,s,r),t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),s.onBeforeRender(m,e,n,i,t,r),t.isImmediateRenderObject){const r=Ct(n,e,i,s,t);j.setMaterial(s),ht.reset(),function(t,e){t.render((function(t){m.renderBufferImmediate(t,e)}))}(t,r)}else!0===s.transparent&&2===s.side?(s.side=1,s.needsUpdate=!0,m.renderBufferDirect(n,e,i,s,t,r),s.side=0,s.needsUpdate=!0,m.renderBufferDirect(n,e,i,s,t,r),s.side=2):m.renderBufferDirect(n,e,i,s,t,r);t.onAfterRender(m,e,n,i,s,r)}function Et(t,e,n){!0!==e.isScene&&(e=U);const i=q.get(t),s=d.state.lights,r=d.state.shadowsArray,o=s.state.version,a=Q.getParameters(t,s.state,r,e,n),l=Q.getProgramCacheKey(a);let c=i.programs;i.environment=t.isMeshStandardMaterial?e.environment:null,i.fog=e.fog,i.envMap=(t.isMeshStandardMaterial?$:Y).get(t.envMap||i.environment),void 0===c&&(t.addEventListener(\\\\\\\"dispose\\\\\\\",gt),c=new Map,i.programs=c);let h=c.get(l);if(void 0!==h){if(i.currentProgram===h&&i.lightsStateVersion===o)return St(t,a),h}else a.uniforms=Q.getUniforms(t),t.onBuild(a,m),t.onBeforeCompile(a,m),h=Q.acquireProgram(a,l),c.set(l,h),i.uniforms=a.uniforms;const u=i.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(u.clippingPlanes=it.uniform),St(t,a),i.needsLights=function(t){return t.isMeshLambertMaterial||t.isMeshToonMaterial||t.isMeshPhongMaterial||t.isMeshStandardMaterial||t.isShadowMaterial||t.isShaderMaterial&&!0===t.lights}(t),i.lightsStateVersion=o,i.needsLights&&(u.ambientLightColor.value=s.state.ambient,u.lightProbe.value=s.state.probe,u.directionalLights.value=s.state.directional,u.directionalLightShadows.value=s.state.directionalShadow,u.spotLights.value=s.state.spot,u.spotLightShadows.value=s.state.spotShadow,u.rectAreaLights.value=s.state.rectArea,u.ltc_1.value=s.state.rectAreaLTC1,u.ltc_2.value=s.state.rectAreaLTC2,u.pointLights.value=s.state.point,u.pointLightShadows.value=s.state.pointShadow,u.hemisphereLights.value=s.state.hemi,u.directionalShadowMap.value=s.state.directionalShadowMap,u.directionalShadowMatrix.value=s.state.directionalShadowMatrix,u.spotShadowMap.value=s.state.spotShadowMap,u.spotShadowMatrix.value=s.state.spotShadowMatrix,u.pointShadowMap.value=s.state.pointShadowMap,u.pointShadowMatrix.value=s.state.pointShadowMatrix);const p=h.getUniforms(),_=jM.seqWithValue(p.seq,u);return i.currentProgram=h,i.uniformsList=_,h}function St(t,e){const n=q.get(t);n.outputEncoding=e.outputEncoding,n.instancing=e.instancing,n.skinning=e.skinning,n.morphTargets=e.morphTargets,n.morphNormals=e.morphNormals,n.morphTargetsCount=e.morphTargetsCount,n.numClippingPlanes=e.numClippingPlanes,n.numIntersection=e.numClipIntersection,n.vertexAlphas=e.vertexAlphas,n.vertexTangents=e.vertexTangents}function Ct(t,e,n,i,s){!0!==e.isScene&&(e=U),X.resetTextureUnits();const r=e.fog,o=i.isMeshStandardMaterial?e.environment:null,a=null===y?m.outputEncoding:y.texture.encoding,l=(i.isMeshStandardMaterial?$:Y).get(i.envMap||o),c=!0===i.vertexColors&&!!n&&!!n.attributes.color&&4===n.attributes.color.itemSize,h=!!i.normalMap&&!!n&&!!n.attributes.tangent,u=!!n&&!!n.morphAttributes.position,p=!!n&&!!n.morphAttributes.normal,_=n&&n.morphAttributes.position?n.morphAttributes.position.length:0,f=q.get(i),g=d.state.lights;if(!0===F&&(!0===D||t!==b)){const e=t===b&&i.id===x;it.setState(i,t,e)}let v=!1;i.version===f.__version?f.needsLights&&f.lightsStateVersion!==g.state.version||f.outputEncoding!==a||s.isInstancedMesh&&!1===f.instancing?v=!0:s.isInstancedMesh||!0!==f.instancing?s.isSkinnedMesh&&!1===f.skinning?v=!0:s.isSkinnedMesh||!0!==f.skinning?f.envMap!==l||i.fog&&f.fog!==r?v=!0:void 0===f.numClippingPlanes||f.numClippingPlanes===it.numPlanes&&f.numIntersection===it.numIntersection?(f.vertexAlphas!==c||f.vertexTangents!==h||f.morphTargets!==u||f.morphNormals!==p||!0===H.isWebGL2&&f.morphTargetsCount!==_)&&(v=!0):v=!0:v=!0:v=!0:(v=!0,f.__version=i.version);let w=f.currentProgram;!0===v&&(w=Et(i,e,s));let T=!1,A=!1,M=!1;const C=w.getUniforms(),N=f.uniforms;if(j.useProgram(w.program)&&(T=!0,A=!0,M=!0),i.id!==x&&(x=i.id,A=!0),T||b!==t){if(C.setValue(ut,\\\\\\\"projectionMatrix\\\\\\\",t.projectionMatrix),H.logarithmicDepthBuffer&&C.setValue(ut,\\\\\\\"logDepthBufFC\\\\\\\",2/(Math.log(t.far+1)/Math.LN2)),b!==t&&(b=t,A=!0,M=!0),i.isShaderMaterial||i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshStandardMaterial||i.envMap){const e=C.map.cameraPosition;void 0!==e&&e.setValue(ut,k.setFromMatrixPosition(t.matrixWorld))}(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)&&C.setValue(ut,\\\\\\\"isOrthographic\\\\\\\",!0===t.isOrthographicCamera),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial||i.isShadowMaterial||s.isSkinnedMesh)&&C.setValue(ut,\\\\\\\"viewMatrix\\\\\\\",t.matrixWorldInverse)}if(s.isSkinnedMesh){C.setOptional(ut,s,\\\\\\\"bindMatrix\\\\\\\"),C.setOptional(ut,s,\\\\\\\"bindMatrixInverse\\\\\\\");const t=s.skeleton;t&&(H.floatVertexTextures?(null===t.boneTexture&&t.computeBoneTexture(),C.setValue(ut,\\\\\\\"boneTexture\\\\\\\",t.boneTexture,X),C.setValue(ut,\\\\\\\"boneTextureSize\\\\\\\",t.boneTextureSize)):C.setOptional(ut,t,\\\\\\\"boneMatrices\\\\\\\"))}var L,O;return!n||void 0===n.morphAttributes.position&&void 0===n.morphAttributes.normal||ot.update(s,n,i,w),(A||f.receiveShadow!==s.receiveShadow)&&(f.receiveShadow=s.receiveShadow,C.setValue(ut,\\\\\\\"receiveShadow\\\\\\\",s.receiveShadow)),A&&(C.setValue(ut,\\\\\\\"toneMappingExposure\\\\\\\",m.toneMappingExposure),f.needsLights&&(O=M,(L=N).ambientLightColor.needsUpdate=O,L.lightProbe.needsUpdate=O,L.directionalLights.needsUpdate=O,L.directionalLightShadows.needsUpdate=O,L.pointLights.needsUpdate=O,L.pointLightShadows.needsUpdate=O,L.spotLights.needsUpdate=O,L.spotLightShadows.needsUpdate=O,L.rectAreaLights.needsUpdate=O,L.hemisphereLights.needsUpdate=O),r&&i.fog&&tt.refreshFogUniforms(N,r),tt.refreshMaterialUniforms(N,i,S,E,B),jM.upload(ut,f.uniformsList,N,X)),i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&(jM.upload(ut,f.uniformsList,N,X),i.uniformsNeedUpdate=!1),i.isSpriteMaterial&&C.setValue(ut,\\\\\\\"center\\\\\\\",s.center),C.setValue(ut,\\\\\\\"modelViewMatrix\\\\\\\",s.modelViewMatrix),C.setValue(ut,\\\\\\\"normalMatrix\\\\\\\",s.normalMatrix),C.setValue(ut,\\\\\\\"modelMatrix\\\\\\\",s.matrixWorld),w}bt.setAnimationLoop((function(t){vt&&vt(t)})),\\\\\\\"undefined\\\\\\\"!=typeof window&&bt.setContext(window),this.setAnimationLoop=function(t){vt=t,_t.setAnimationLoop(t),null===t?bt.stop():bt.start()},_t.addEventListener(\\\\\\\"sessionstart\\\\\\\",yt),_t.addEventListener(\\\\\\\"sessionend\\\\\\\",xt),this.render=function(t,e){if(void 0!==e&&!0!==e.isCamera)return void console.error(\\\\\\\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\\\\\\\");if(!0===f)return;!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),!0===_t.enabled&&!0===_t.isPresenting&&(!0===_t.cameraAutoUpdate&&_t.updateCamera(e),e=_t.getCamera()),!0===t.isScene&&t.onBeforeRender(m,t,e,y),d=nt.get(t,_.length),d.init(),_.push(d),z.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),I.setFromProjectionMatrix(z),D=this.localClippingEnabled,F=it.init(this.clippingPlanes,D,e),u=et.get(t,p.length),u.init(),p.push(u),wt(t,e,0,m.sortObjects),u.finish(),!0===m.sortObjects&&u.sort(C,N),!0===F&&it.beginShadows();const n=d.state.shadowsArray;if(st.render(n,t,e),!0===F&&it.endShadows(),!0===this.info.autoReset&&this.info.reset(),rt.render(u,t),d.setupLights(m.physicallyCorrectLights),e.isArrayCamera){const n=e.cameras;for(let e=0,i=n.length;e<i;e++){const i=n[e];Tt(u,t,i,i.viewport)}}else Tt(u,t,e);null!==y&&(X.updateMultisampleRenderTarget(y),X.updateRenderTargetMipmap(y)),!0===t.isScene&&t.onAfterRender(m,t,e),j.buffers.depth.setTest(!0),j.buffers.depth.setMask(!0),j.buffers.color.setMask(!0),j.setPolygonOffset(!1),ht.resetDefaultState(),x=-1,b=null,_.pop(),d=_.length>0?_[_.length-1]:null,p.pop(),u=p.length>0?p[p.length-1]:null},this.getActiveCubeFace=function(){return g},this.getActiveMipmapLevel=function(){return v},this.getRenderTarget=function(){return y},this.setRenderTarget=function(t,e=0,n=0){y=t,g=e,v=n,t&&void 0===q.get(t).__webglFramebuffer&&X.setupRenderTarget(t);let i=null,s=!1,r=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(r=!0);const o=q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=o[e],s=!0):i=t.isWebGLMultisampleRenderTarget?q.get(t).__webglMultisampledFramebuffer:o,w.copy(t.viewport),T.copy(t.scissor),A=t.scissorTest}else w.copy(L).multiplyScalar(S).floor(),T.copy(O).multiplyScalar(S).floor(),A=P;if(j.bindFramebuffer(36160,i)&&H.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(R.length!==n.length||36064!==R[0]){for(let t=0,e=n.length;t<e;t++)R[t]=36064+t;R.length=n.length,e=!0}}else 1===R.length&&36064===R[0]||(R[0]=36064,R.length=1,e=!0);else 1===R.length&&1029===R[0]||(R[0]=1029,R.length=1,e=!0);e&&(H.isWebGL2?ut.drawBuffers(R):V.get(\\\\\\\"WEBGL_draw_buffers\\\\\\\").drawBuffersWEBGL(R))}if(j.viewport(w),j.scissor(T),j.setScissorTest(A),s){const i=q.get(t.texture);ut.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(r){const i=q.get(t.texture),s=e||0;ut.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,s)}x=-1},this.readRenderTargetPixels=function(t,e,n,i,s,r,o){if(!t||!t.isWebGLRenderTarget)return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\\\\\\\");let a=q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==o&&(a=a[o]),a){j.bindFramebuffer(36160,a);try{const o=t.texture,a=o.format,l=o.type;if(a!==Dx&&ct.convert(a)!==ut.getParameter(35739))return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\\\\\\\");const c=l===Rx&&(V.has(\\\\\\\"EXT_color_buffer_half_float\\\\\\\")||H.isWebGL2&&V.has(\\\\\\\"EXT_color_buffer_float\\\\\\\"));if(!(l===Nx||ct.convert(l)===ut.getParameter(35738)||l===Px&&(H.isWebGL2||V.has(\\\\\\\"OES_texture_float\\\\\\\")||V.has(\\\\\\\"WEBGL_color_buffer_float\\\\\\\"))||c))return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\\\\\\\");36053===ut.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-s&&ut.readPixels(e,n,i,s,ct.convert(a),ct.convert(l),r):console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\\\\\\\")}finally{const t=null!==y?q.get(y).__webglFramebuffer:null;j.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),s=Math.floor(e.image.width*i),r=Math.floor(e.image.height*i);let o=ct.convert(e.format);H.isWebGL2&&(6407===o&&(o=32849),6408===o&&(o=32856)),X.setTexture2D(e,0),ut.copyTexImage2D(3553,n,o,t.x,t.y,s,r,0),j.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const s=e.image.width,r=e.image.height,o=ct.convert(n.format),a=ct.convert(n.type);X.setTexture2D(n,0),ut.pixelStorei(37440,n.flipY),ut.pixelStorei(37441,n.premultiplyAlpha),ut.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?ut.texSubImage2D(3553,i,t.x,t.y,s,r,o,a,e.image.data):e.isCompressedTexture?ut.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,o,e.mipmaps[0].data):ut.texSubImage2D(3553,i,t.x,t.y,o,a,e.image),0===i&&n.generateMipmaps&&ut.generateMipmap(3553),j.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,s=0){if(m.isWebGL1Renderer)return void console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\\\\\\\");const r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,a=t.max.z-t.min.z+1,l=ct.convert(i.format),c=ct.convert(i.type);let h;if(i.isDataTexture3D)X.setTexture3D(i,0),h=32879;else{if(!i.isDataTexture2DArray)return void console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\\\\\\\");X.setTexture2DArray(i,0),h=35866}ut.pixelStorei(37440,i.flipY),ut.pixelStorei(37441,i.premultiplyAlpha),ut.pixelStorei(3317,i.unpackAlignment);const u=ut.getParameter(3314),d=ut.getParameter(32878),p=ut.getParameter(3316),_=ut.getParameter(3315),f=ut.getParameter(32877),g=n.isCompressedTexture?n.mipmaps[0]:n.image;ut.pixelStorei(3314,g.width),ut.pixelStorei(32878,g.height),ut.pixelStorei(3316,t.min.x),ut.pixelStorei(3315,t.min.y),ut.pixelStorei(32877,t.min.z),n.isDataTexture||n.isDataTexture3D?ut.texSubImage3D(h,s,e.x,e.y,e.z,r,o,a,l,c,g.data):n.isCompressedTexture?(console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\\\\\\\"),ut.compressedTexSubImage3D(h,s,e.x,e.y,e.z,r,o,a,l,g.data)):ut.texSubImage3D(h,s,e.x,e.y,e.z,r,o,a,l,c,g),ut.pixelStorei(3314,u),ut.pixelStorei(32878,d),ut.pixelStorei(3316,p),ut.pixelStorei(3315,_),ut.pixelStorei(32877,f),0===s&&i.generateMipmaps&&ut.generateMipmap(h),j.unbindTexture()},this.initTexture=function(t){X.setTexture2D(t,0),j.unbindTexture()},this.resetState=function(){g=0,v=0,y=null,j.reset(),ht.reset()},\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\",{detail:this}))}(class extends FE{}).prototype.isWebGL1Renderer=!0;class DE{constructor(t,e=25e-5){this.name=\\\\\\\"\\\\\\\",this.color=new $w(t),this.density=e}clone(){return new DE(this.color,this.density)}toJSON(){return{type:\\\\\\\"FogExp2\\\\\\\",color:this.color.getHex(),density:this.density}}}DE.prototype.isFogExp2=!0;class BE{constructor(t,e=1,n=1e3){this.name=\\\\\\\"\\\\\\\",this.color=new $w(t),this.near=e,this.far=n}clone(){return new BE(this.color,this.near,this.far)}toJSON(){return{type:\\\\\\\"Fog\\\\\\\",color:this.color.getHex(),near:this.near,far:this.far}}}BE.prototype.isFog=!0;class zE extends Nw{constructor(){super(),this.type=\\\\\\\"Scene\\\\\\\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}zE.prototype.isScene=!0;class kE{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Zx,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=ob()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,s=this.stride;i<s;i++)this.array[t+i]=e.array[n+i];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=ob()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=ob()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}kE.prototype.isInterleavedBuffer=!0;const UE=new Sb;class GE{constructor(t,e,n,i=!1){this.name=\\\\\\\"\\\\\\\",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e<n;e++)UE.x=this.getX(e),UE.y=this.getY(e),UE.z=this.getZ(e),UE.applyMatrix4(t),this.setXYZ(e,UE.x,UE.y,UE.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)UE.x=this.getX(e),UE.y=this.getY(e),UE.z=this.getZ(e),UE.applyNormalMatrix(t),this.setXYZ(e,UE.x,UE.y,UE.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)UE.x=this.getX(e),UE.y=this.getY(e),UE.z=this.getZ(e),UE.transformDirection(t),this.setXYZ(e,UE.x,UE.y,UE.z);return this}setX(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){return this.data.array[t*this.data.stride+this.offset]}getY(t){return this.data.array[t*this.data.stride+this.offset+1]}getZ(t){return this.data.array[t*this.data.stride+this.offset+2]}getW(t){return this.data.array[t*this.data.stride+this.offset+3]}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this}setXYZW(t,e,n,i,s){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this.data.array[t+3]=s,this}clone(t){if(void 0===t){console.log(\\\\\\\"THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.\\\\\\\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return new Qw(new this.array.constructor(t),this.itemSize,this.normalized)}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new GE(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(void 0===t){console.log(\\\\\\\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.\\\\\\\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}GE.prototype.isInterleavedBufferAttribute=!0;class VE extends Vw{constructor(t){super(),this.type=\\\\\\\"SpriteMaterial\\\\\\\",this.color=new $w(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this}}let HE;VE.prototype.isSpriteMaterial=!0;const jE=new Sb,WE=new Sb,qE=new Sb,XE=new _b,YE=new _b,$E=new sw,JE=new Sb,ZE=new Sb,KE=new Sb,QE=new _b,tS=new _b,eS=new _b;class nS extends Nw{constructor(t){if(super(),this.type=\\\\\\\"Sprite\\\\\\\",void 0===HE){HE=new hT;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new kE(t,5);HE.setIndex([0,1,2,0,2,3]),HE.setAttribute(\\\\\\\"position\\\\\\\",new GE(e,3,0,!1)),HE.setAttribute(\\\\\\\"uv\\\\\\\",new GE(e,2,3,!1))}this.geometry=HE,this.material=void 0!==t?t:new VE,this.center=new _b(.5,.5)}raycast(t,e){null===t.camera&&console.error('THREE.Sprite: \\\\\\\"Raycaster.camera\\\\\\\" needs to be set in order to raycast against sprites.'),WE.setFromMatrixScale(this.matrixWorld),$E.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),qE.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&WE.multiplyScalar(-qE.z);const n=this.material.rotation;let i,s;0!==n&&(s=Math.cos(n),i=Math.sin(n));const r=this.center;iS(JE.set(-.5,-.5,0),qE,r,WE,i,s),iS(ZE.set(.5,-.5,0),qE,r,WE,i,s),iS(KE.set(.5,.5,0),qE,r,WE,i,s),QE.set(0,0),tS.set(1,0),eS.set(1,1);let o=t.ray.intersectTriangle(JE,ZE,KE,!1,jE);if(null===o&&(iS(ZE.set(-.5,.5,0),qE,r,WE,i,s),tS.set(0,1),o=t.ray.intersectTriangle(JE,KE,ZE,!1,jE),null===o))return;const a=t.ray.origin.distanceTo(jE);a<t.near||a>t.far||e.push({distance:a,point:jE.clone(),uv:Uw.getUV(jE,JE,ZE,KE,QE,tS,eS,new _b),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function iS(t,e,n,i,s,r){XE.subVectors(t,n).addScalar(.5).multiply(i),void 0!==s?(YE.x=r*XE.x-s*XE.y,YE.y=s*XE.x+r*XE.y):YE.copy(XE),t.copy(e),t.x+=YE.x,t.y+=YE.y,t.applyMatrix4($E)}nS.prototype.isSprite=!0;const sS=new Sb,rS=new Tb,oS=new Tb,aS=new Sb,lS=new sw;class cS extends CT{constructor(t,e){super(t,e),this.type=\\\\\\\"SkinnedMesh\\\\\\\",this.bindMode=\\\\\\\"attached\\\\\\\",this.bindMatrix=new sw,this.bindMatrixInverse=new sw}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new Tb,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;n<i;n++){t.x=e.getX(n),t.y=e.getY(n),t.z=e.getZ(n),t.w=e.getW(n);const i=1/t.manhattanLength();i!==1/0?t.multiplyScalar(i):t.set(1,0,0,0),e.setXYZW(n,t.x,t.y,t.z,t.w)}}updateMatrixWorld(t){super.updateMatrixWorld(t),\\\\\\\"attached\\\\\\\"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():\\\\\\\"detached\\\\\\\"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\\\\\\\"THREE.SkinnedMesh: Unrecognized bindMode: \\\\\\\"+this.bindMode)}boneTransform(t,e){const n=this.skeleton,i=this.geometry;rS.fromBufferAttribute(i.attributes.skinIndex,t),oS.fromBufferAttribute(i.attributes.skinWeight,t),sS.copy(e).applyMatrix4(this.bindMatrix),e.set(0,0,0);for(let t=0;t<4;t++){const i=oS.getComponent(t);if(0!==i){const s=rS.getComponent(t);lS.multiplyMatrices(n.bones[s].matrixWorld,n.boneInverses[s]),e.addScaledVector(aS.copy(sS).applyMatrix4(lS),i)}}return e.applyMatrix4(this.bindMatrixInverse)}}cS.prototype.isSkinnedMesh=!0;class hS extends Nw{constructor(){super(),this.type=\\\\\\\"Bone\\\\\\\"}}hS.prototype.isBone=!0;class uS extends bb{constructor(t=null,e=1,n=1,i,s,r,o,a,l=1003,c=1003,h,u){super(null,r,o,a,l,c,i,s,h,u),this.image={data:t,width:e,height:n},this.magFilter=l,this.minFilter=c,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}uS.prototype.isDataTexture=!0;class dS extends Qw{constructor(t,e,n,i=1){\\\\\\\"number\\\\\\\"==typeof n&&(i=n,n=!1,console.error(\\\\\\\"THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.\\\\\\\")),super(t,e,n),this.meshPerAttribute=i}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}dS.prototype.isInstancedBufferAttribute=!0;const pS=new sw,_S=new sw,mS=[],fS=new CT;class gS extends CT{constructor(t,e,n){super(t,e),this.instanceMatrix=new dS(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}copy(t){return super.copy(t),this.instanceMatrix.copy(t.instanceMatrix),null!==t.instanceColor&&(this.instanceColor=t.instanceColor.clone()),this.count=t.count,this}getColorAt(t,e){e.fromArray(this.instanceColor.array,3*t)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,16*t)}raycast(t,e){const n=this.matrixWorld,i=this.count;if(fS.geometry=this.geometry,fS.material=this.material,void 0!==fS.material)for(let s=0;s<i;s++){this.getMatrixAt(s,pS),_S.multiplyMatrices(n,pS),fS.matrixWorld=_S,fS.raycast(t,mS);for(let t=0,n=mS.length;t<n;t++){const n=mS[t];n.instanceId=s,n.object=this,e.push(n)}mS.length=0}}setColorAt(t,e){null===this.instanceColor&&(this.instanceColor=new dS(new Float32Array(3*this.instanceMatrix.count),3)),e.toArray(this.instanceColor.array,3*t)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,16*t)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}gS.prototype.isInstancedMesh=!0;class vS extends Vw{constructor(t){super(),this.type=\\\\\\\"LineBasicMaterial\\\\\\\",this.color=new $w(16777215),this.linewidth=1,this.linecap=\\\\\\\"round\\\\\\\",this.linejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this}}vS.prototype.isLineBasicMaterial=!0;const yS=new Sb,xS=new Sb,bS=new sw,wS=new iw,TS=new $b;class AS extends Nw{constructor(t=new hT,e=new vS){super(),this.type=\\\\\\\"Line\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[0];for(let t=1,i=e.count;t<i;t++)yS.fromBufferAttribute(e,t-1),xS.fromBufferAttribute(e,t),n[t]=n[t-1],n[t]+=yS.distanceTo(xS);t.setAttribute(\\\\\\\"lineDistance\\\\\\\",new nT(n,1))}else console.warn(\\\\\\\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");else t.isGeometry&&console.error(\\\\\\\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");return this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,s=t.params.Line.threshold,r=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),TS.copy(n.boundingSphere),TS.applyMatrix4(i),TS.radius+=s,!1===t.ray.intersectsSphere(TS))return;bS.copy(i).invert(),wS.copy(t.ray).applyMatrix4(bS);const o=s/((this.scale.x+this.scale.y+this.scale.z)/3),a=o*o,l=new Sb,c=new Sb,h=new Sb,u=new Sb,d=this.isLineSegments?2:1;if(n.isBufferGeometry){const i=n.index,s=n.attributes.position;if(null!==i){for(let n=Math.max(0,r.start),o=Math.min(i.count,r.start+r.count)-1;n<o;n+=d){const r=i.getX(n),o=i.getX(n+1);l.fromBufferAttribute(s,r),c.fromBufferAttribute(s,o);if(wS.distanceSqToSegment(l,c,u,h)>a)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);d<t.near||d>t.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,r.start),i=Math.min(s.count,r.start+r.count)-1;n<i;n+=d){l.fromBufferAttribute(s,n),c.fromBufferAttribute(s,n+1);if(wS.distanceSqToSegment(l,c,u,h)>a)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);i<t.near||i>t.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error(\\\\\\\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}}AS.prototype.isLine=!0;const MS=new Sb,ES=new Sb;class SS extends AS{constructor(t,e){super(t,e),this.type=\\\\\\\"LineSegments\\\\\\\"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t<i;t+=2)MS.fromBufferAttribute(e,t),ES.fromBufferAttribute(e,t+1),n[t]=0===t?0:n[t-1],n[t+1]=n[t]+MS.distanceTo(ES);t.setAttribute(\\\\\\\"lineDistance\\\\\\\",new nT(n,1))}else console.warn(\\\\\\\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");else t.isGeometry&&console.error(\\\\\\\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");return this}}SS.prototype.isLineSegments=!0;class CS extends AS{constructor(t,e){super(t,e),this.type=\\\\\\\"LineLoop\\\\\\\"}}CS.prototype.isLineLoop=!0;class NS extends Vw{constructor(t){super(),this.type=\\\\\\\"PointsMaterial\\\\\\\",this.color=new $w(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this}}NS.prototype.isPointsMaterial=!0;const LS=new sw,OS=new iw,PS=new $b,RS=new Sb;class IS extends Nw{constructor(t=new hT,e=new NS){super(),this.type=\\\\\\\"Points\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,s=t.params.Points.threshold,r=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),PS.copy(n.boundingSphere),PS.applyMatrix4(i),PS.radius+=s,!1===t.ray.intersectsSphere(PS))return;LS.copy(i).invert(),OS.copy(t.ray).applyMatrix4(LS);const o=s/((this.scale.x+this.scale.y+this.scale.z)/3),a=o*o;if(n.isBufferGeometry){const s=n.index,o=n.attributes.position;if(null!==s){for(let n=Math.max(0,r.start),l=Math.min(s.count,r.start+r.count);n<l;n++){const r=s.getX(n);RS.fromBufferAttribute(o,r),FS(RS,r,a,i,t,e,this)}}else{for(let n=Math.max(0,r.start),s=Math.min(o.count,r.start+r.count);n<s;n++)RS.fromBufferAttribute(o,n),FS(RS,n,a,i,t,e,this)}}else console.error(\\\\\\\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}}function FS(t,e,n,i,s,r,o){const a=OS.distanceSqToPoint(t);if(a<n){const n=new Sb;OS.closestPointToPoint(t,n),n.applyMatrix4(i);const l=s.ray.origin.distanceTo(n);if(l<s.near||l>s.far)return;r.push({distance:l,distanceToRay:Math.sqrt(a),point:n,index:e,face:null,object:o})}}IS.prototype.isPoints=!0;(class extends bb{constructor(t,e,n,i,s,r,o,a,l){super(t,e,n,i,s,r,o,a,l),this.format=void 0!==o?o:Fx,this.minFilter=void 0!==r?r:Ex,this.magFilter=void 0!==s?s:Ex,this.generateMipmaps=!1;const c=this;\\\\\\\"requestVideoFrameCallback\\\\\\\"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1===\\\\\\\"requestVideoFrameCallback\\\\\\\"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}).prototype.isVideoTexture=!0;class DS extends bb{constructor(t,e,n,i,s,r,o,a,l,c,h,u){super(null,r,o,a,l,c,i,s,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}DS.prototype.isCompressedTexture=!0;(class extends bb{constructor(t,e,n,i,s,r,o,a,l){super(t,e,n,i,s,r,o,a,l),this.needsUpdate=!0}}).prototype.isCanvasTexture=!0;(class extends bb{constructor(t,e,n,i,s,r,o,a,l,c){if((c=void 0!==c?c:Bx)!==Bx&&c!==zx)throw new Error(\\\\\\\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\\\\\\\");void 0===n&&c===Bx&&(n=Lx),void 0===n&&c===zx&&(n=Ix),super(null,i,s,r,o,a,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==o?o:Tx,this.minFilter=void 0!==a?a:Tx,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isDepthTexture=!0;new Sb,new Sb,new Sb,new Uw;class BS{constructor(){this.type=\\\\\\\"Curve\\\\\\\",this.arcLengthDivisions=200}getPoint(){return console.warn(\\\\\\\"THREE.Curve: .getPoint() not implemented.\\\\\\\"),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),s=0;e.push(0);for(let r=1;r<=t;r++)n=this.getPoint(r/t),s+=n.distanceTo(i),e.push(s),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const s=n.length;let r;r=e||t*n[s-1];let o,a=0,l=s-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),o=n[i]-r,o<0)a=i+1;else{if(!(o>0)){l=i;break}l=i-1}if(i=l,n[i]===r)return i/(s-1);const c=n[i];return(i+(r-c)/(n[i+1]-c))/(s-1)}getTangent(t,e){const n=1e-4;let i=t-n,s=t+n;i<0&&(i=0),s>1&&(s=1);const r=this.getPoint(i),o=this.getPoint(s),a=e||(r.isVector2?new _b:new Sb);return a.copy(o).sub(r).normalize(),a}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new Sb,i=[],s=[],r=[],o=new Sb,a=new sw;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new Sb)}s[0]=new Sb,r[0]=new Sb;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),o.crossVectors(i[0],n).normalize(),s[0].crossVectors(i[0],o),r[0].crossVectors(i[0],s[0]);for(let e=1;e<=t;e++){if(s[e]=s[e-1].clone(),r[e]=r[e-1].clone(),o.crossVectors(i[e-1],i[e]),o.length()>Number.EPSILON){o.normalize();const t=Math.acos(ab(i[e-1].dot(i[e]),-1,1));s[e].applyMatrix4(a.makeRotationAxis(o,t))}r[e].crossVectors(i[e],s[e])}if(!0===e){let e=Math.acos(ab(s[0].dot(s[t]),-1,1));e/=t,i[0].dot(o.crossVectors(s[0],s[t]))>0&&(e=-e);for(let n=1;n<=t;n++)s[n].applyMatrix4(a.makeRotationAxis(i[n],e*n)),r[n].crossVectors(i[n],s[n])}return{tangents:i,normals:s,binormals:r}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"Curve\\\\\\\",generator:\\\\\\\"Curve.toJSON\\\\\\\"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class zS extends BS{constructor(t=0,e=0,n=1,i=1,s=0,r=2*Math.PI,o=!1,a=0){super(),this.type=\\\\\\\"EllipseCurve\\\\\\\",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=s,this.aEndAngle=r,this.aClockwise=o,this.aRotation=a}getPoint(t,e){const n=e||new _b,i=2*Math.PI;let s=this.aEndAngle-this.aStartAngle;const r=Math.abs(s)<Number.EPSILON;for(;s<0;)s+=i;for(;s>i;)s-=i;s<Number.EPSILON&&(s=r?0:i),!0!==this.aClockwise||r||(s===i?s=-i:s-=i);const o=this.aStartAngle+t*s;let a=this.aX+this.xRadius*Math.cos(o),l=this.aY+this.yRadius*Math.sin(o);if(0!==this.aRotation){const t=Math.cos(this.aRotation),e=Math.sin(this.aRotation),n=a-this.aX,i=l-this.aY;a=n*t-i*e+this.aX,l=n*e+i*t+this.aY}return n.set(a,l)}copy(t){return super.copy(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}toJSON(){const t=super.toJSON();return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t}fromJSON(t){return super.fromJSON(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}}zS.prototype.isEllipseCurve=!0;class kS extends zS{constructor(t,e,n,i,s,r){super(t,e,n,n,i,s,r),this.type=\\\\\\\"ArcCurve\\\\\\\"}}function US(){let t=0,e=0,n=0,i=0;function s(s,r,o,a){t=s,e=o,n=-3*s+3*r-2*o-a,i=2*s-2*r+o+a}return{initCatmullRom:function(t,e,n,i,r){s(e,n,r*(n-t),r*(i-e))},initNonuniformCatmullRom:function(t,e,n,i,r,o,a){let l=(e-t)/r-(n-t)/(r+o)+(n-e)/o,c=(n-e)/o-(i-e)/(o+a)+(i-n)/a;l*=o,c*=o,s(e,n,l,c)},calc:function(s){const r=s*s;return t+e*s+n*r+i*(r*s)}}}kS.prototype.isArcCurve=!0;const GS=new Sb,VS=new US,HS=new US,jS=new US;class WS extends BS{constructor(t=[],e=!1,n=\\\\\\\"centripetal\\\\\\\",i=.5){super(),this.type=\\\\\\\"CatmullRomCurve3\\\\\\\",this.points=t,this.closed=e,this.curveType=n,this.tension=i}getPoint(t,e=new Sb){const n=e,i=this.points,s=i.length,r=(s-(this.closed?0:1))*t;let o,a,l=Math.floor(r),c=r-l;this.closed?l+=l>0?0:(Math.floor(Math.abs(l)/s)+1)*s:0===c&&l===s-1&&(l=s-2,c=1),this.closed||l>0?o=i[(l-1)%s]:(GS.subVectors(i[0],i[1]).add(i[0]),o=GS);const h=i[l%s],u=i[(l+1)%s];if(this.closed||l+2<s?a=i[(l+2)%s]:(GS.subVectors(i[s-1],i[s-2]).add(i[s-1]),a=GS),\\\\\\\"centripetal\\\\\\\"===this.curveType||\\\\\\\"chordal\\\\\\\"===this.curveType){const t=\\\\\\\"chordal\\\\\\\"===this.curveType?.5:.25;let e=Math.pow(o.distanceToSquared(h),t),n=Math.pow(h.distanceToSquared(u),t),i=Math.pow(u.distanceToSquared(a),t);n<1e-4&&(n=1),e<1e-4&&(e=n),i<1e-4&&(i=n),VS.initNonuniformCatmullRom(o.x,h.x,u.x,a.x,e,n,i),HS.initNonuniformCatmullRom(o.y,h.y,u.y,a.y,e,n,i),jS.initNonuniformCatmullRom(o.z,h.z,u.z,a.z,e,n,i)}else\\\\\\\"catmullrom\\\\\\\"===this.curveType&&(VS.initCatmullRom(o.x,h.x,u.x,a.x,this.tension),HS.initCatmullRom(o.y,h.y,u.y,a.y,this.tension),jS.initCatmullRom(o.z,h.z,u.z,a.z,this.tension));return n.set(VS.calc(c),HS.calc(c),jS.calc(c)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new Sb).fromArray(n))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}}function qS(t,e,n,i,s){const r=.5*(i-e),o=.5*(s-n),a=t*t;return(2*n-2*i+r+o)*(t*a)+(-3*n+3*i-2*r-o)*a+r*t+n}function XS(t,e,n,i){return function(t,e){const n=1-t;return n*n*e}(t,e)+function(t,e){return 2*(1-t)*t*e}(t,n)+function(t,e){return t*t*e}(t,i)}function YS(t,e,n,i,s){return function(t,e){const n=1-t;return n*n*n*e}(t,e)+function(t,e){const n=1-t;return 3*n*n*t*e}(t,n)+function(t,e){return 3*(1-t)*t*t*e}(t,i)+function(t,e){return t*t*t*e}(t,s)}WS.prototype.isCatmullRomCurve3=!0;class $S extends BS{constructor(t=new _b,e=new _b,n=new _b,i=new _b){super(),this.type=\\\\\\\"CubicBezierCurve\\\\\\\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new _b){const n=e,i=this.v0,s=this.v1,r=this.v2,o=this.v3;return n.set(YS(t,i.x,s.x,r.x,o.x),YS(t,i.y,s.y,r.y,o.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}$S.prototype.isCubicBezierCurve=!0;class JS extends BS{constructor(t=new Sb,e=new Sb,n=new Sb,i=new Sb){super(),this.type=\\\\\\\"CubicBezierCurve3\\\\\\\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new Sb){const n=e,i=this.v0,s=this.v1,r=this.v2,o=this.v3;return n.set(YS(t,i.x,s.x,r.x,o.x),YS(t,i.y,s.y,r.y,o.y),YS(t,i.z,s.z,r.z,o.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}JS.prototype.isCubicBezierCurve3=!0;class ZS extends BS{constructor(t=new _b,e=new _b){super(),this.type=\\\\\\\"LineCurve\\\\\\\",this.v1=t,this.v2=e}getPoint(t,e=new _b){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}getTangent(t,e){const n=e||new _b;return n.copy(this.v2).sub(this.v1).normalize(),n}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}ZS.prototype.isLineCurve=!0;class KS extends BS{constructor(t=new _b,e=new _b,n=new _b){super(),this.type=\\\\\\\"QuadraticBezierCurve\\\\\\\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new _b){const n=e,i=this.v0,s=this.v1,r=this.v2;return n.set(XS(t,i.x,s.x,r.x),XS(t,i.y,s.y,r.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}KS.prototype.isQuadraticBezierCurve=!0;class QS extends BS{constructor(t=new Sb,e=new Sb,n=new Sb){super(),this.type=\\\\\\\"QuadraticBezierCurve3\\\\\\\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new Sb){const n=e,i=this.v0,s=this.v1,r=this.v2;return n.set(XS(t,i.x,s.x,r.x),XS(t,i.y,s.y,r.y),XS(t,i.z,s.z,r.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}QS.prototype.isQuadraticBezierCurve3=!0;class tC extends BS{constructor(t=[]){super(),this.type=\\\\\\\"SplineCurve\\\\\\\",this.points=t}getPoint(t,e=new _b){const n=e,i=this.points,s=(i.length-1)*t,r=Math.floor(s),o=s-r,a=i[0===r?r:r-1],l=i[r],c=i[r>i.length-2?i.length-1:r+1],h=i[r>i.length-3?i.length-1:r+2];return n.set(qS(o,a.x,l.x,c.x,h.x),qS(o,a.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new _b).fromArray(n))}return this}}tC.prototype.isSplineCurve=!0;var eC=Object.freeze({__proto__:null,ArcCurve:kS,CatmullRomCurve3:WS,CubicBezierCurve:$S,CubicBezierCurve3:JS,EllipseCurve:zS,LineCurve:ZS,LineCurve3:class extends BS{constructor(t=new Sb,e=new Sb){super(),this.type=\\\\\\\"LineCurve3\\\\\\\",this.isLineCurve3=!0,this.v1=t,this.v2=e}getPoint(t,e=new Sb){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}},QuadraticBezierCurve:KS,QuadraticBezierCurve3:QS,SplineCurve:tC});class nC extends BS{constructor(){super(),this.type=\\\\\\\"CurvePath\\\\\\\",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new ZS(e,t))}getPoint(t,e){const n=t*this.getLength(),i=this.getCurveLengths();let s=0;for(;s<i.length;){if(i[s]>=n){const t=i[s]-n,r=this.curves[s],o=r.getLength(),a=0===o?0:1-t/o;return r.getPointAt(a,e)}s++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n<i;n++)e+=this.curves[n].getLength(),t.push(e);return this.cacheLengths=t,t}getSpacedPoints(t=40){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return this.autoClose&&e.push(e[0]),e}getPoints(t=12){const e=[];let n;for(let i=0,s=this.curves;i<s.length;i++){const r=s[i],o=r&&r.isEllipseCurve?2*t:r&&(r.isLineCurve||r.isLineCurve3)?1:r&&r.isSplineCurve?t*r.points.length:t,a=r.getPoints(o);for(let t=0;t<a.length;t++){const i=a[t];n&&n.equals(i)||(e.push(i),n=i)}}return this.autoClose&&e.length>1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push(n.clone())}return this.autoClose=t.autoClose,this}toJSON(){const t=super.toJSON();t.autoClose=this.autoClose,t.curves=[];for(let e=0,n=this.curves.length;e<n;e++){const n=this.curves[e];t.curves.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.autoClose=t.autoClose,this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push((new eC[n.type]).fromJSON(n))}return this}}class iC extends nC{constructor(t){super(),this.type=\\\\\\\"Path\\\\\\\",this.currentPoint=new _b,t&&this.setFromPoints(t)}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e<n;e++)this.lineTo(t[e].x,t[e].y);return this}moveTo(t,e){return this.currentPoint.set(t,e),this}lineTo(t,e){const n=new ZS(this.currentPoint.clone(),new _b(t,e));return this.curves.push(n),this.currentPoint.set(t,e),this}quadraticCurveTo(t,e,n,i){const s=new KS(this.currentPoint.clone(),new _b(t,e),new _b(n,i));return this.curves.push(s),this.currentPoint.set(n,i),this}bezierCurveTo(t,e,n,i,s,r){const o=new $S(this.currentPoint.clone(),new _b(t,e),new _b(n,i),new _b(s,r));return this.curves.push(o),this.currentPoint.set(s,r),this}splineThru(t){const e=[this.currentPoint.clone()].concat(t),n=new tC(e);return this.curves.push(n),this.currentPoint.copy(t[t.length-1]),this}arc(t,e,n,i,s,r){const o=this.currentPoint.x,a=this.currentPoint.y;return this.absarc(t+o,e+a,n,i,s,r),this}absarc(t,e,n,i,s,r){return this.absellipse(t,e,n,n,i,s,r),this}ellipse(t,e,n,i,s,r,o,a){const l=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(t+l,e+c,n,i,s,r,o,a),this}absellipse(t,e,n,i,s,r,o,a){const l=new zS(t,e,n,i,s,r,o,a);if(this.curves.length>0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class sC extends iC{constructor(t){super(t),this.uuid=ob(),this.type=\\\\\\\"Shape\\\\\\\",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n<i;n++)e[n]=this.holes[n].getPoints(t);return e}extractPoints(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}}copy(t){super.copy(t),this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.uuid=this.uuid,t.holes=[];for(let e=0,n=this.holes.length;e<n;e++){const n=this.holes[e];t.holes.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.uuid=t.uuid,this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push((new iC).fromJSON(n))}return this}}const rC=function(t,e,n=2){const i=e&&e.length,s=i?e[0]*n:t.length;let r=oC(t,0,s,n,!0);const o=[];if(!r||r.next===r.prev)return o;let a,l,c,h,u,d,p;if(i&&(r=function(t,e,n,i){const s=[];let r,o,a,l,c;for(r=0,o=e.length;r<o;r++)a=e[r]*i,l=r<o-1?e[r+1]*i:t.length,c=oC(t,a,l,i,!1),c===c.next&&(c.steiner=!0),s.push(gC(c));for(s.sort(pC),r=0;r<s.length;r++)_C(s[r],n),n=aC(n,n.next);return n}(t,e,r,n)),t.length>80*n){a=c=t[0],l=h=t[1];for(let e=n;e<s;e+=n)u=t[e],d=t[e+1],u<a&&(a=u),d<l&&(l=d),u>c&&(c=u),d>h&&(h=d);p=Math.max(c-a,h-l),p=0!==p?1/p:0}return lC(r,o,n,a,l,p),o};function oC(t,e,n,i,s){let r,o;if(s===function(t,e,n,i){let s=0;for(let r=e,o=n-i;r<n;r+=i)s+=(t[o]-t[r])*(t[r+1]+t[o+1]),o=r;return s}(t,e,n,i)>0)for(r=e;r<n;r+=i)o=SC(r,t[r],t[r+1],o);else for(r=n-i;r>=e;r-=i)o=SC(r,t[r],t[r+1],o);return o&&bC(o,o.next)&&(CC(o),o=o.next),o}function aC(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!bC(i,i.next)&&0!==xC(i.prev,i,i.next))i=i.next;else{if(CC(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function lC(t,e,n,i,s,r,o){if(!t)return;!o&&r&&function(t,e,n,i){let s=t;do{null===s.z&&(s.z=fC(s.x,s.y,e,n,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next}while(s!==t);s.prevZ.nextZ=null,s.prevZ=null,function(t){let e,n,i,s,r,o,a,l,c=1;do{for(n=t,t=null,r=null,o=0;n;){for(o++,i=n,a=0,e=0;e<c&&(a++,i=i.nextZ,i);e++);for(l=c;a>0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(s=n,n=n.nextZ,a--):(s=i,i=i.nextZ,l--),r?r.nextZ=s:t=s,s.prevZ=r,r=s;n=i}r.nextZ=null,c*=2}while(o>1)}(s)}(t,i,s,r);let a,l,c=t;for(;t.prev!==t.next;)if(a=t.prev,l=t.next,r?hC(t,i,s,r):cC(t))e.push(a.i/n),e.push(t.i/n),e.push(l.i/n),CC(t),t=l.next,c=l.next;else if((t=l)===c){o?1===o?lC(t=uC(aC(t),e,n),e,n,i,s,r,2):2===o&&dC(t,e,n,i,s,r):lC(aC(t),e,n,i,s,r,1);break}}function cC(t){const e=t.prev,n=t,i=t.next;if(xC(e,n,i)>=0)return!1;let s=t.next.next;for(;s!==t.prev;){if(vC(e.x,e.y,n.x,n.y,i.x,i.y,s.x,s.y)&&xC(s.prev,s,s.next)>=0)return!1;s=s.next}return!0}function hC(t,e,n,i){const s=t.prev,r=t,o=t.next;if(xC(s,r,o)>=0)return!1;const a=s.x<r.x?s.x<o.x?s.x:o.x:r.x<o.x?r.x:o.x,l=s.y<r.y?s.y<o.y?s.y:o.y:r.y<o.y?r.y:o.y,c=s.x>r.x?s.x>o.x?s.x:o.x:r.x>o.x?r.x:o.x,h=s.y>r.y?s.y>o.y?s.y:o.y:r.y>o.y?r.y:o.y,u=fC(a,l,e,n,i),d=fC(c,h,e,n,i);let p=t.prevZ,_=t.nextZ;for(;p&&p.z>=u&&_&&_.z<=d;){if(p!==t.prev&&p!==t.next&&vC(s.x,s.y,r.x,r.y,o.x,o.y,p.x,p.y)&&xC(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,_!==t.prev&&_!==t.next&&vC(s.x,s.y,r.x,r.y,o.x,o.y,_.x,_.y)&&xC(_.prev,_,_.next)>=0)return!1;_=_.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&vC(s.x,s.y,r.x,r.y,o.x,o.y,p.x,p.y)&&xC(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;_&&_.z<=d;){if(_!==t.prev&&_!==t.next&&vC(s.x,s.y,r.x,r.y,o.x,o.y,_.x,_.y)&&xC(_.prev,_,_.next)>=0)return!1;_=_.nextZ}return!0}function uC(t,e,n){let i=t;do{const s=i.prev,r=i.next.next;!bC(s,r)&&wC(s,i,i.next,r)&&MC(s,r)&&MC(r,s)&&(e.push(s.i/n),e.push(i.i/n),e.push(r.i/n),CC(i),CC(i.next),i=t=r),i=i.next}while(i!==t);return aC(i)}function dC(t,e,n,i,s,r){let o=t;do{let t=o.next.next;for(;t!==o.prev;){if(o.i!==t.i&&yC(o,t)){let a=EC(o,t);return o=aC(o,o.next),a=aC(a,a.next),lC(o,e,n,i,s,r),void lC(a,e,n,i,s,r)}t=t.next}o=o.next}while(o!==t)}function pC(t,e){return t.x-e.x}function _C(t,e){if(e=function(t,e){let n=e;const i=t.x,s=t.y;let r,o=-1/0;do{if(s<=n.y&&s>=n.next.y&&n.next.y!==n.y){const t=n.x+(s-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>o){if(o=t,t===i){if(s===n.y)return n;if(s===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r;const a=r,l=r.x,c=r.y;let h,u=1/0;n=r;do{i>=n.x&&n.x>=l&&i!==n.x&&vC(s<c?i:o,s,l,c,s<c?o:i,s,n.x,n.y)&&(h=Math.abs(s-n.y)/(i-n.x),MC(n,t)&&(h<u||h===u&&(n.x>r.x||n.x===r.x&&mC(r,n)))&&(r=n,u=h)),n=n.next}while(n!==a);return r}(t,e)){const n=EC(e,t);aC(e,e.next),aC(n,n.next)}}function mC(t,e){return xC(t.prev,t,e.prev)<0&&xC(e.next,t,t.next)<0}function fC(t,e,n,i,s){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*s)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*s)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function gC(t){let e=t,n=t;do{(e.x<n.x||e.x===n.x&&e.y<n.y)&&(n=e),e=e.next}while(e!==t);return n}function vC(t,e,n,i,s,r,o,a){return(s-o)*(e-a)-(t-o)*(r-a)>=0&&(t-o)*(i-a)-(n-o)*(e-a)>=0&&(n-o)*(r-a)-(s-o)*(i-a)>=0}function yC(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&wC(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(MC(t,e)&&MC(e,t)&&function(t,e){let n=t,i=!1;const s=(t.x+e.x)/2,r=(t.y+e.y)/2;do{n.y>r!=n.next.y>r&&n.next.y!==n.y&&s<(n.next.x-n.x)*(r-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(xC(t.prev,t,e.prev)||xC(t,e.prev,e))||bC(t,e)&&xC(t.prev,t,t.next)>0&&xC(e.prev,e,e.next)>0)}function xC(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function bC(t,e){return t.x===e.x&&t.y===e.y}function wC(t,e,n,i){const s=AC(xC(t,e,n)),r=AC(xC(t,e,i)),o=AC(xC(n,i,t)),a=AC(xC(n,i,e));return s!==r&&o!==a||(!(0!==s||!TC(t,n,e))||(!(0!==r||!TC(t,i,e))||(!(0!==o||!TC(n,t,i))||!(0!==a||!TC(n,e,i)))))}function TC(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function AC(t){return t>0?1:t<0?-1:0}function MC(t,e){return xC(t.prev,t,t.next)<0?xC(t,e,t.next)>=0&&xC(t,t.prev,e)>=0:xC(t,e,t.prev)<0||xC(t,t.next,e)<0}function EC(t,e){const n=new NC(t.i,t.x,t.y),i=new NC(e.i,e.x,e.y),s=t.next,r=e.prev;return t.next=e,e.prev=t,n.next=s,s.prev=n,i.next=n,n.prev=i,r.next=i,i.prev=r,i}function SC(t,e,n,i){const s=new NC(t,e,n);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function CC(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function NC(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class LC{static area(t){const e=t.length;let n=0;for(let i=e-1,s=0;s<e;i=s++)n+=t[i].x*t[s].y-t[s].x*t[i].y;return.5*n}static isClockWise(t){return LC.area(t)<0}static triangulateShape(t,e){const n=[],i=[],s=[];OC(t),PC(n,t);let r=t.length;e.forEach(OC);for(let t=0;t<e.length;t++)i.push(r),r+=e[t].length,PC(n,e[t]);const o=rC(n,i);for(let t=0;t<o.length;t+=3)s.push(o.slice(t,t+3));return s}}function OC(t){const e=t.length;e>2&&t[e-1].equals(t[0])&&t.pop()}function PC(t,e){for(let n=0;n<e.length;n++)t.push(e[n].x),t.push(e[n].y)}class RC extends hT{constructor(t=new sC([new _b(.5,.5),new _b(-.5,.5),new _b(-.5,-.5),new _b(.5,-.5)]),e={}){super(),this.type=\\\\\\\"ExtrudeGeometry\\\\\\\",this.parameters={shapes:t,options:e},t=Array.isArray(t)?t:[t];const n=this,i=[],s=[];for(let e=0,n=t.length;e<n;e++){r(t[e])}function r(t){const r=[],o=void 0!==e.curveSegments?e.curveSegments:12,a=void 0!==e.steps?e.steps:1;let l=void 0!==e.depth?e.depth:1,c=void 0===e.bevelEnabled||e.bevelEnabled,h=void 0!==e.bevelThickness?e.bevelThickness:.2,u=void 0!==e.bevelSize?e.bevelSize:h-.1,d=void 0!==e.bevelOffset?e.bevelOffset:0,p=void 0!==e.bevelSegments?e.bevelSegments:3;const _=e.extrudePath,m=void 0!==e.UVGenerator?e.UVGenerator:IC;void 0!==e.amount&&(console.warn(\\\\\\\"THREE.ExtrudeBufferGeometry: amount has been renamed to depth.\\\\\\\"),l=e.amount);let f,g,v,y,x,b=!1;_&&(f=_.getSpacedPoints(a),b=!0,c=!1,g=_.computeFrenetFrames(a,!1),v=new Sb,y=new Sb,x=new Sb),c||(p=0,h=0,u=0,d=0);const w=t.extractPoints(o);let T=w.shape;const A=w.holes;if(!LC.isClockWise(T)){T=T.reverse();for(let t=0,e=A.length;t<e;t++){const e=A[t];LC.isClockWise(e)&&(A[t]=e.reverse())}}const M=LC.triangulateShape(T,A),E=T;for(let t=0,e=A.length;t<e;t++){const e=A[t];T=T.concat(e)}function S(t,e,n){return e||console.error(\\\\\\\"THREE.ExtrudeGeometry: vec does not exist\\\\\\\"),e.clone().multiplyScalar(n).add(t)}const C=T.length,N=M.length;function L(t,e,n){let i,s,r;const o=t.x-e.x,a=t.y-e.y,l=n.x-t.x,c=n.y-t.y,h=o*o+a*a,u=o*c-a*l;if(Math.abs(u)>Number.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-a/u,_=e.y+o/u,m=((n.x-c/d-p)*c-(n.y+l/d-_)*l)/(o*c-a*l);i=p+o*m-t.x,s=_+a*m-t.y;const f=i*i+s*s;if(f<=2)return new _b(i,s);r=Math.sqrt(f/2)}else{let t=!1;o>Number.EPSILON?l>Number.EPSILON&&(t=!0):o<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,s=o,r=Math.sqrt(h)):(i=o,s=a,r=Math.sqrt(h/2))}return new _b(i/r,s/r)}const O=[];for(let t=0,e=E.length,n=e-1,i=t+1;t<e;t++,n++,i++)n===e&&(n=0),i===e&&(i=0),O[t]=L(E[t],E[n],E[i]);const P=[];let R,I=O.concat();for(let t=0,e=A.length;t<e;t++){const e=A[t];R=[];for(let t=0,n=e.length,i=n-1,s=t+1;t<n;t++,i++,s++)i===n&&(i=0),s===n&&(s=0),R[t]=L(e[t],e[i],e[s]);P.push(R),I=I.concat(R)}for(let t=0;t<p;t++){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t<e;t++){const e=S(E[t],O[t],i);B(e.x,e.y,-n)}for(let t=0,e=A.length;t<e;t++){const e=A[t];R=P[t];for(let t=0,s=e.length;t<s;t++){const s=S(e[t],R[t],i);B(s.x,s.y,-n)}}}const F=u+d;for(let t=0;t<C;t++){const e=c?S(T[t],I[t],F):T[t];b?(y.copy(g.normals[0]).multiplyScalar(e.x),v.copy(g.binormals[0]).multiplyScalar(e.y),x.copy(f[0]).add(y).add(v),B(x.x,x.y,x.z)):B(e.x,e.y,0)}for(let t=1;t<=a;t++)for(let e=0;e<C;e++){const n=c?S(T[e],I[e],F):T[e];b?(y.copy(g.normals[t]).multiplyScalar(n.x),v.copy(g.binormals[t]).multiplyScalar(n.y),x.copy(f[t]).add(y).add(v),B(x.x,x.y,x.z)):B(n.x,n.y,l/a*t)}for(let t=p-1;t>=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t<e;t++){const e=S(E[t],O[t],i);B(e.x,e.y,l+n)}for(let t=0,e=A.length;t<e;t++){const e=A[t];R=P[t];for(let t=0,s=e.length;t<s;t++){const s=S(e[t],R[t],i);b?B(s.x,s.y+f[a-1].y,f[a-1].x+n):B(s.x,s.y,l+n)}}}function D(t,e){let n=t.length;for(;--n>=0;){const i=n;let s=n-1;s<0&&(s=t.length-1);for(let t=0,n=a+2*p;t<n;t++){const n=C*t,r=C*(t+1);k(e+i+n,e+s+n,e+s+r,e+i+r)}}}function B(t,e,n){r.push(t),r.push(e),r.push(n)}function z(t,e,s){U(t),U(e),U(s);const r=i.length/3,o=m.generateTopUV(n,i,r-3,r-2,r-1);G(o[0]),G(o[1]),G(o[2])}function k(t,e,s,r){U(t),U(e),U(r),U(e),U(s),U(r);const o=i.length/3,a=m.generateSideWallUV(n,i,o-6,o-3,o-2,o-1);G(a[0]),G(a[1]),G(a[3]),G(a[1]),G(a[2]),G(a[3])}function U(t){i.push(r[3*t+0]),i.push(r[3*t+1]),i.push(r[3*t+2])}function G(t){s.push(t.x),s.push(t.y)}!function(){const t=i.length/3;if(c){let t=0,e=C*t;for(let t=0;t<N;t++){const n=M[t];z(n[2]+e,n[1]+e,n[0]+e)}t=a+2*p,e=C*t;for(let t=0;t<N;t++){const n=M[t];z(n[0]+e,n[1]+e,n[2]+e)}}else{for(let t=0;t<N;t++){const e=M[t];z(e[2],e[1],e[0])}for(let t=0;t<N;t++){const e=M[t];z(e[0]+C*a,e[1]+C*a,e[2]+C*a)}}n.addGroup(t,i.length/3-t,0)}(),function(){const t=i.length/3;let e=0;D(E,e),e+=E.length;for(let t=0,n=A.length;t<n;t++){const n=A[t];D(n,e),e+=n.length}n.addGroup(t,i.length/3-t,1)}()}this.setAttribute(\\\\\\\"position\\\\\\\",new nT(i,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new nT(s,2)),this.computeVertexNormals()}toJSON(){const t=super.toJSON();return function(t,e,n){if(n.shapes=[],Array.isArray(t))for(let e=0,i=t.length;e<i;e++){const i=t[e];n.shapes.push(i.uuid)}else n.shapes.push(t.uuid);void 0!==e.extrudePath&&(n.options.extrudePath=e.extrudePath.toJSON());return n}(this.parameters.shapes,this.parameters.options,t)}static fromJSON(t,e){const n=[];for(let i=0,s=t.shapes.length;i<s;i++){const s=e[t.shapes[i]];n.push(s)}const i=t.options.extrudePath;return void 0!==i&&(t.options.extrudePath=(new eC[i.type]).fromJSON(i)),new RC(n,t.options)}}const IC={generateTopUV:function(t,e,n,i,s){const r=e[3*n],o=e[3*n+1],a=e[3*i],l=e[3*i+1],c=e[3*s],h=e[3*s+1];return[new _b(r,o),new _b(a,l),new _b(c,h)]},generateSideWallUV:function(t,e,n,i,s,r){const o=e[3*n],a=e[3*n+1],l=e[3*n+2],c=e[3*i],h=e[3*i+1],u=e[3*i+2],d=e[3*s],p=e[3*s+1],_=e[3*s+2],m=e[3*r],f=e[3*r+1],g=e[3*r+2];return Math.abs(a-h)<Math.abs(o-c)?[new _b(o,1-l),new _b(c,1-u),new _b(d,1-_),new _b(m,1-g)]:[new _b(a,1-l),new _b(h,1-u),new _b(p,1-_),new _b(f,1-g)]}};class FC extends hT{constructor(t=new sC([new _b(0,.5),new _b(-.5,-.5),new _b(.5,-.5)]),e=12){super(),this.type=\\\\\\\"ShapeGeometry\\\\\\\",this.parameters={shapes:t,curveSegments:e};const n=[],i=[],s=[],r=[];let o=0,a=0;if(!1===Array.isArray(t))l(t);else for(let e=0;e<t.length;e++)l(t[e]),this.addGroup(o,a,e),o+=a,a=0;function l(t){const o=i.length/3,l=t.extractPoints(e);let c=l.shape;const h=l.holes;!1===LC.isClockWise(c)&&(c=c.reverse());for(let t=0,e=h.length;t<e;t++){const e=h[t];!0===LC.isClockWise(e)&&(h[t]=e.reverse())}const u=LC.triangulateShape(c,h);for(let t=0,e=h.length;t<e;t++){const e=h[t];c=c.concat(e)}for(let t=0,e=c.length;t<e;t++){const e=c[t];i.push(e.x,e.y,0),s.push(0,0,1),r.push(e.x,e.y)}for(let t=0,e=u.length;t<e;t++){const e=u[t],i=e[0]+o,s=e[1]+o,r=e[2]+o;n.push(i,s,r),a+=3}}this.setIndex(n),this.setAttribute(\\\\\\\"position\\\\\\\",new nT(i,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new nT(s,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new nT(r,2))}toJSON(){const t=super.toJSON();return function(t,e){if(e.shapes=[],Array.isArray(t))for(let n=0,i=t.length;n<i;n++){const i=t[n];e.shapes.push(i.uuid)}else e.shapes.push(t.uuid);return e}(this.parameters.shapes,t)}static fromJSON(t,e){const n=[];for(let i=0,s=t.shapes.length;i<s;i++){const s=e[t.shapes[i]];n.push(s)}return new FC(n,t.curveSegments)}}class DC extends Vw{constructor(t){super(),this.type=\\\\\\\"ShadowMaterial\\\\\\\",this.color=new $w(0),this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this}}DC.prototype.isShadowMaterial=!0;class BC extends Vw{constructor(t){super(),this.defines={STANDARD:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshStandardMaterial\\\\\\\",this.color=new $w(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new $w(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _b(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\\\\\\\"\\\\\\\"},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}BC.prototype.isMeshStandardMaterial=!0;class zC extends BC{constructor(t){super(),this.defines={STANDARD:\\\\\\\"\\\\\\\",PHYSICAL:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshPhysicalMaterial\\\\\\\",this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new _b(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,\\\\\\\"reflectivity\\\\\\\",{get:function(){return ab(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.sheenTint=new $w(0),this.sheenRoughness=1,this.transmissionMap=null,this.thickness=.01,this.thicknessMap=null,this.attenuationDistance=0,this.attenuationTint=new $w(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularTint=new $w(1,1,1),this.specularTintMap=null,this._sheen=0,this._clearcoat=0,this._transmission=0,this.setValues(t)}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:\\\\\\\"\\\\\\\",PHYSICAL:\\\\\\\"\\\\\\\"},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.sheen=t.sheen,this.sheenTint.copy(t.sheenTint),this.sheenRoughness=t.sheenRoughness,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationTint.copy(t.attenuationTint),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularTint.copy(t.specularTint),this.specularTintMap=t.specularTintMap,this}}zC.prototype.isMeshPhysicalMaterial=!0;class kC extends Vw{constructor(t){super(),this.type=\\\\\\\"MeshPhongMaterial\\\\\\\",this.color=new $w(16777215),this.specular=new $w(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new $w(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _b(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}kC.prototype.isMeshPhongMaterial=!0;class UC extends Vw{constructor(t){super(),this.defines={TOON:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshToonMaterial\\\\\\\",this.color=new $w(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new $w(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _b(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}UC.prototype.isMeshToonMaterial=!0;class GC extends Vw{constructor(t){super(),this.type=\\\\\\\"MeshNormalMaterial\\\\\\\",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _b(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}GC.prototype.isMeshNormalMaterial=!0;class VC extends Vw{constructor(t){super(),this.type=\\\\\\\"MeshLambertMaterial\\\\\\\",this.color=new $w(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new $w(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}VC.prototype.isMeshLambertMaterial=!0;class HC extends Vw{constructor(t){super(),this.defines={MATCAP:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshMatcapMaterial\\\\\\\",this.color=new $w(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _b(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:\\\\\\\"\\\\\\\"},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this}}HC.prototype.isMeshMatcapMaterial=!0;class jC extends vS{constructor(t){super(),this.type=\\\\\\\"LineDashedMaterial\\\\\\\",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}jC.prototype.isLineDashedMaterial=!0;const WC={arraySlice:function(t,e,n){return WC.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:\\\\\\\"number\\\\\\\"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,s=new t.constructor(i);for(let r=0,o=0;o!==i;++r){const i=n[r]*e;for(let n=0;n!==e;++n)s[o++]=t[i+n]}return s},flattenJSON:function(t,e,n,i){let s=1,r=t[0];for(;void 0!==r&&void 0===r[i];)r=t[s++];if(void 0===r)return;let o=r[i];if(void 0!==o)if(Array.isArray(o))do{o=r[i],void 0!==o&&(e.push(r.time),n.push.apply(n,o)),r=t[s++]}while(void 0!==r);else if(void 0!==o.toArray)do{o=r[i],void 0!==o&&(e.push(r.time),o.toArray(n,n.length)),r=t[s++]}while(void 0!==r);else do{o=r[i],void 0!==o&&(e.push(r.time),n.push(o)),r=t[s++]}while(void 0!==r)},subclip:function(t,e,n,i,s=30){const r=t.clone();r.name=e;const o=[];for(let t=0;t<r.tracks.length;++t){const e=r.tracks[t],a=e.getValueSize(),l=[],c=[];for(let t=0;t<e.times.length;++t){const r=e.times[t]*s;if(!(r<n||r>=i)){l.push(e.times[t]);for(let n=0;n<a;++n)c.push(e.values[t*a+n])}}0!==l.length&&(e.times=WC.convertArray(l,e.times.constructor),e.values=WC.convertArray(c,e.values.constructor),o.push(e))}r.tracks=o;let a=1/0;for(let t=0;t<r.tracks.length;++t)a>r.tracks[t].times[0]&&(a=r.tracks[t].times[0]);for(let t=0;t<r.tracks.length;++t)r.tracks[t].shift(-1*a);return r.resetDuration(),r},makeClipAdditive:function(t,e=0,n=t,i=30){i<=0&&(i=30);const s=n.tracks.length,r=e/i;for(let e=0;e<s;++e){const i=n.tracks[e],s=i.ValueTypeName;if(\\\\\\\"bool\\\\\\\"===s||\\\\\\\"string\\\\\\\"===s)continue;const o=t.tracks.find((function(t){return t.name===i.name&&t.ValueTypeName===s}));if(void 0===o)continue;let a=0;const l=i.getValueSize();i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(a=l/3);let c=0;const h=o.getValueSize();o.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(c=h/3);const u=i.times.length-1;let d;if(r<=i.times[0]){const t=a,e=l-a;d=WC.arraySlice(i.values,t,e)}else if(r>=i.times[u]){const t=u*l+a,e=t+l-a;d=WC.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=a,n=l-a;t.evaluate(r),d=WC.arraySlice(t.resultBuffer,e,n)}if(\\\\\\\"quaternion\\\\\\\"===s){(new Eb).fromArray(d).normalize().conjugate().toArray(d)}const p=o.times.length;for(let t=0;t<p;++t){const e=t*h+c;if(\\\\\\\"quaternion\\\\\\\"===s)Eb.multiplyQuaternionsFlat(o.values,e,d,0,o.values,e);else{const t=h-2*c;for(let n=0;n<t;++n)o.values[e+n]-=d[n]}}}return t.blendMode=2501,t}};class qC{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){const e=this.parameterPositions;let n=this._cachedIndex,i=e[n],s=e[n-1];t:{e:{let r;n:{i:if(!(t<i)){for(let r=n+2;;){if(void 0===i){if(t<s)break i;return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,t,s)}if(n===r)break;if(s=i,i=e[++n],t<i)break e}r=e.length;break n}if(t>=s)break t;{const o=e[1];t<o&&(n=2,s=o);for(let r=n-2;;){if(void 0===s)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(n===r)break;if(i=s,s=e[--n-1],t>=s)break e}r=n,n=0}}for(;n<r;){const i=n+r>>>1;t<e[i]?r=i:n=i+1}if(i=e[n],s=e[n-1],void 0===s)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(void 0===i)return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,s,t)}this._cachedIndex=n,this.intervalChanged_(n,s,i)}return this.interpolate_(n,s,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){const e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,s=t*i;for(let t=0;t!==i;++t)e[t]=n[s+t];return e}interpolate_(){throw new Error(\\\\\\\"call to abstract method\\\\\\\")}intervalChanged_(){}}qC.prototype.beforeStart_=qC.prototype.copySampleValue_,qC.prototype.afterEnd_=qC.prototype.copySampleValue_;class XC extends qC{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:Vx,endingEnd:Vx}}intervalChanged_(t,e,n){const i=this.parameterPositions;let s=t-2,r=t+1,o=i[s],a=i[r];if(void 0===o)switch(this.getSettings_().endingStart){case Hx:s=t,o=2*e-n;break;case jx:s=i.length-2,o=e+i[s]-i[s+1];break;default:s=t,o=n}if(void 0===a)switch(this.getSettings_().endingEnd){case Hx:r=t,a=2*n-e;break;case jx:r=1,a=n+i[1]-i[0];break;default:r=t-1,a=e}const l=.5*(n-e),c=this.valueSize;this._weightPrev=l/(e-o),this._weightNext=l/(a-n),this._offsetPrev=s*c,this._offsetNext=r*c}interpolate_(t,e,n,i){const s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,c=this._offsetPrev,h=this._offsetNext,u=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),_=p*p,m=_*p,f=-u*m+2*u*_-u*p,g=(1+u)*m+(-1.5-2*u)*_+(-.5+u)*p+1,v=(-1-d)*m+(1.5+d)*_+.5*p,y=d*m-d*_;for(let t=0;t!==o;++t)s[t]=f*r[c+t]+g*r[l+t]+v*r[a+t]+y*r[h+t];return s}}class YC extends qC{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,c=(n-e)/(i-e),h=1-c;for(let t=0;t!==o;++t)s[t]=r[l+t]*h+r[a+t]*c;return s}}class $C extends qC{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}}class JC{constructor(t,e,n,i){if(void 0===t)throw new Error(\\\\\\\"THREE.KeyframeTrack: track name is undefined\\\\\\\");if(void 0===e||0===e.length)throw new Error(\\\\\\\"THREE.KeyframeTrack: no keyframes in track named \\\\\\\"+t);this.name=t,this.times=WC.convertArray(e,this.TimeBufferType),this.values=WC.convertArray(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){const e=t.constructor;let n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:WC.convertArray(t.times,Array),values:WC.convertArray(t.values,Array)};const e=t.getInterpolation();e!==t.DefaultInterpolation&&(n.interpolation=e)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new $C(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new YC(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new XC(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case kx:e=this.InterpolantFactoryMethodDiscrete;break;case Ux:e=this.InterpolantFactoryMethodLinear;break;case Gx:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){const e=\\\\\\\"unsupported interpolation for \\\\\\\"+this.ValueTypeName+\\\\\\\" keyframe track named \\\\\\\"+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(e);this.setInterpolation(this.DefaultInterpolation)}return console.warn(\\\\\\\"THREE.KeyframeTrack:\\\\\\\",e),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return kx;case this.InterpolantFactoryMethodLinear:return Ux;case this.InterpolantFactoryMethodSmooth:return Gx}}getValueSize(){return this.values.length/this.times.length}shift(t){if(0!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(1!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){const n=this.times,i=n.length;let s=0,r=i-1;for(;s!==i&&n[s]<t;)++s;for(;-1!==r&&n[r]>e;)--r;if(++r,0!==s||r!==i){s>=r&&(r=Math.max(r,1),s=r-1);const t=this.getValueSize();this.times=WC.arraySlice(n,s,r),this.values=WC.arraySlice(this.values,s*t,r*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error(\\\\\\\"THREE.KeyframeTrack: Invalid value size in track.\\\\\\\",this),t=!1);const n=this.times,i=this.values,s=n.length;0===s&&(console.error(\\\\\\\"THREE.KeyframeTrack: Track is empty.\\\\\\\",this),t=!1);let r=null;for(let e=0;e!==s;e++){const i=n[e];if(\\\\\\\"number\\\\\\\"==typeof i&&isNaN(i)){console.error(\\\\\\\"THREE.KeyframeTrack: Time is not a valid number.\\\\\\\",this,e,i),t=!1;break}if(null!==r&&r>i){console.error(\\\\\\\"THREE.KeyframeTrack: Out of order keys.\\\\\\\",this,e,i,r),t=!1;break}r=i}if(void 0!==i&&WC.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error(\\\\\\\"THREE.KeyframeTrack: Value is not a valid number.\\\\\\\",this,e,n),t=!1;break}}return t}optimize(){const t=WC.arraySlice(this.times),e=WC.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===Gx,s=t.length-1;let r=1;for(let o=1;o<s;++o){let s=!1;const a=t[o];if(a!==t[o+1]&&(1!==o||a!==t[0]))if(i)s=!0;else{const t=o*n,i=t-n,r=t+n;for(let o=0;o!==n;++o){const n=e[t+o];if(n!==e[i+o]||n!==e[r+o]){s=!0;break}}}if(s){if(o!==r){t[r]=t[o];const i=o*n,s=r*n;for(let t=0;t!==n;++t)e[s+t]=e[i+t]}++r}}if(s>0){t[r]=t[s];for(let t=s*n,i=r*n,o=0;o!==n;++o)e[i+o]=e[t+o];++r}return r!==t.length?(this.times=WC.arraySlice(t,0,r),this.values=WC.arraySlice(e,0,r*n)):(this.times=t,this.values=e),this}clone(){const t=WC.arraySlice(this.times,0),e=WC.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}JC.prototype.TimeBufferType=Float32Array,JC.prototype.ValueBufferType=Float32Array,JC.prototype.DefaultInterpolation=Ux;class ZC extends JC{}ZC.prototype.ValueTypeName=\\\\\\\"bool\\\\\\\",ZC.prototype.ValueBufferType=Array,ZC.prototype.DefaultInterpolation=kx,ZC.prototype.InterpolantFactoryMethodLinear=void 0,ZC.prototype.InterpolantFactoryMethodSmooth=void 0;class KC extends JC{}KC.prototype.ValueTypeName=\\\\\\\"color\\\\\\\";class QC extends JC{}QC.prototype.ValueTypeName=\\\\\\\"number\\\\\\\";class tN extends qC{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=(n-e)/(i-e);let l=t*o;for(let t=l+o;l!==t;l+=4)Eb.slerpFlat(s,0,r,l-o,r,l,a);return s}}class eN extends JC{InterpolantFactoryMethodLinear(t){return new tN(this.times,this.values,this.getValueSize(),t)}}eN.prototype.ValueTypeName=\\\\\\\"quaternion\\\\\\\",eN.prototype.DefaultInterpolation=Ux,eN.prototype.InterpolantFactoryMethodSmooth=void 0;class nN extends JC{}nN.prototype.ValueTypeName=\\\\\\\"string\\\\\\\",nN.prototype.ValueBufferType=Array,nN.prototype.DefaultInterpolation=kx,nN.prototype.InterpolantFactoryMethodLinear=void 0,nN.prototype.InterpolantFactoryMethodSmooth=void 0;class iN extends JC{}iN.prototype.ValueTypeName=\\\\\\\"vector\\\\\\\";class sN{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=ob(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,s=n.length;t!==s;++t)e.push(rN(n[t]).scale(i));const s=new this(t.name,t.duration,e,t.blendMode);return s.uuid=t.uuid,s}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(JC.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const s=e.length,r=[];for(let t=0;t<s;t++){let o=[],a=[];o.push((t+s-1)%s,t,(t+1)%s),a.push(0,1,0);const l=WC.getKeyframeOrder(o);o=WC.sortedArray(o,1,l),a=WC.sortedArray(a,1,l),i||0!==o[0]||(o.push(s),a.push(a[0])),r.push(new QC(\\\\\\\".morphTargetInfluences[\\\\\\\"+e[t].name+\\\\\\\"]\\\\\\\",o,a).scale(1/n))}return new this(t,-1,r)}static findByName(t,e){let n=t;if(!Array.isArray(t)){const e=t;n=e.geometry&&e.geometry.animations||e.animations}for(let t=0;t<n.length;t++)if(n[t].name===e)return n[t];return null}static CreateClipsFromMorphTargetSequences(t,e,n){const i={},s=/^([\\\\w-]*?)([\\\\d]+)$/;for(let e=0,n=t.length;e<n;e++){const n=t[e],r=n.name.match(s);if(r&&r.length>1){const t=r[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const r=[];for(const t in i)r.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return r}static parseAnimation(t,e){if(!t)return console.error(\\\\\\\"THREE.AnimationClip: No animation in JSONLoader data.\\\\\\\"),null;const n=function(t,e,n,i,s){if(0!==n.length){const r=[],o=[];WC.flattenJSON(n,r,o,i),0!==r.length&&s.push(new t(e,r,o))}},i=[],s=t.name||\\\\\\\"default\\\\\\\",r=t.fps||30,o=t.blendMode;let a=t.length||-1;const l=t.hierarchy||[];for(let t=0;t<l.length;t++){const s=l[t].keys;if(s&&0!==s.length)if(s[0].morphTargets){const t={};let e;for(e=0;e<s.length;e++)if(s[e].morphTargets)for(let n=0;n<s[e].morphTargets.length;n++)t[s[e].morphTargets[n]]=-1;for(const n in t){const t=[],r=[];for(let i=0;i!==s[e].morphTargets.length;++i){const i=s[e];t.push(i.time),r.push(i.morphTarget===n?1:0)}i.push(new QC(\\\\\\\".morphTargetInfluence[\\\\\\\"+n+\\\\\\\"]\\\\\\\",t,r))}a=t.length*(r||1)}else{const r=\\\\\\\".bones[\\\\\\\"+e[t].name+\\\\\\\"]\\\\\\\";n(iN,r+\\\\\\\".position\\\\\\\",s,\\\\\\\"pos\\\\\\\",i),n(eN,r+\\\\\\\".quaternion\\\\\\\",s,\\\\\\\"rot\\\\\\\",i),n(iN,r+\\\\\\\".scale\\\\\\\",s,\\\\\\\"scl\\\\\\\",i)}}if(0===i.length)return null;return new this(s,a,i,o)}resetDuration(){let t=0;for(let e=0,n=this.tracks.length;e!==n;++e){const n=this.tracks[e];t=Math.max(t,n.times[n.times.length-1])}return this.duration=t,this}trim(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this}validate(){let t=!0;for(let e=0;e<this.tracks.length;e++)t=t&&this.tracks[e].validate();return t}optimize(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].optimize();return this}clone(){const t=[];for(let e=0;e<this.tracks.length;e++)t.push(this.tracks[e].clone());return new this.constructor(this.name,this.duration,t,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function rN(t){if(void 0===t.type)throw new Error(\\\\\\\"THREE.KeyframeTrack: track type undefined, can not parse\\\\\\\");const e=function(t){switch(t.toLowerCase()){case\\\\\\\"scalar\\\\\\\":case\\\\\\\"double\\\\\\\":case\\\\\\\"float\\\\\\\":case\\\\\\\"number\\\\\\\":case\\\\\\\"integer\\\\\\\":return QC;case\\\\\\\"vector\\\\\\\":case\\\\\\\"vector2\\\\\\\":case\\\\\\\"vector3\\\\\\\":case\\\\\\\"vector4\\\\\\\":return iN;case\\\\\\\"color\\\\\\\":return KC;case\\\\\\\"quaternion\\\\\\\":return eN;case\\\\\\\"bool\\\\\\\":case\\\\\\\"boolean\\\\\\\":return ZC;case\\\\\\\"string\\\\\\\":return nN}throw new Error(\\\\\\\"THREE.KeyframeTrack: Unsupported typeName: \\\\\\\"+t)}(t.type);if(void 0===t.times){const e=[],n=[];WC.flattenJSON(t.keys,e,n,\\\\\\\"value\\\\\\\"),t.times=e,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}const oN={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}};class aN{constructor(t,e,n){const i=this;let s,r=!1,o=0,a=0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===r&&void 0!==i.onStart&&i.onStart(t,o,a),r=!0},this.itemEnd=function(t){o++,void 0!==i.onProgress&&i.onProgress(t,o,a),o===a&&(r=!1,void 0!==i.onLoad&&i.onLoad())},this.itemError=function(t){void 0!==i.onError&&i.onError(t)},this.resolveURL=function(t){return s?s(t):t},this.setURLModifier=function(t){return s=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e&&l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e<n;e+=2){const n=l[e],i=l[e+1];if(n.global&&(n.lastIndex=0),n.test(t))return i}return null}}}const lN=new aN;class cN{constructor(t){this.manager=void 0!==t?t:lN,this.crossOrigin=\\\\\\\"anonymous\\\\\\\",this.withCredentials=!1,this.path=\\\\\\\"\\\\\\\",this.resourcePath=\\\\\\\"\\\\\\\",this.requestHeader={}}load(){}loadAsync(t,e){const n=this;return new Promise((function(i,s){n.load(t,i,e,s)}))}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}}const hN={};class uN extends cN{constructor(t){super(t)}load(t,e,n,i){void 0===t&&(t=\\\\\\\"\\\\\\\"),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const s=this,r=oN.get(t);if(void 0!==r)return s.manager.itemStart(t),setTimeout((function(){e&&e(r),s.manager.itemEnd(t)}),0),r;if(void 0!==hN[t])return void hN[t].push({onLoad:e,onProgress:n,onError:i});const o=t.match(/^data:(.*?)(;base64)?,(.*)$/);let a;if(o){const n=o[1],r=!!o[2];let a=o[3];a=decodeURIComponent(a),r&&(a=atob(a));try{let i;const r=(this.responseType||\\\\\\\"\\\\\\\").toLowerCase();switch(r){case\\\\\\\"arraybuffer\\\\\\\":case\\\\\\\"blob\\\\\\\":const t=new Uint8Array(a.length);for(let e=0;e<a.length;e++)t[e]=a.charCodeAt(e);i=\\\\\\\"blob\\\\\\\"===r?new Blob([t.buffer],{type:n}):t.buffer;break;case\\\\\\\"document\\\\\\\":const e=new DOMParser;i=e.parseFromString(a,n);break;case\\\\\\\"json\\\\\\\":i=JSON.parse(a);break;default:i=a}setTimeout((function(){e&&e(i),s.manager.itemEnd(t)}),0)}catch(e){setTimeout((function(){i&&i(e),s.manager.itemError(t),s.manager.itemEnd(t)}),0)}}else{hN[t]=[],hN[t].push({onLoad:e,onProgress:n,onError:i}),a=new XMLHttpRequest,a.open(\\\\\\\"GET\\\\\\\",t,!0),a.addEventListener(\\\\\\\"load\\\\\\\",(function(e){const n=this.response,i=hN[t];if(delete hN[t],200===this.status||0===this.status){0===this.status&&console.warn(\\\\\\\"THREE.FileLoader: HTTP Status 0 received.\\\\\\\"),oN.add(t,n);for(let t=0,e=i.length;t<e;t++){const e=i[t];e.onLoad&&e.onLoad(n)}s.manager.itemEnd(t)}else{for(let t=0,n=i.length;t<n;t++){const n=i[t];n.onError&&n.onError(e)}s.manager.itemError(t),s.manager.itemEnd(t)}}),!1),a.addEventListener(\\\\\\\"progress\\\\\\\",(function(e){const n=hN[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onProgress&&i.onProgress(e)}}),!1),a.addEventListener(\\\\\\\"error\\\\\\\",(function(e){const n=hN[t];delete hN[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}s.manager.itemError(t),s.manager.itemEnd(t)}),!1),a.addEventListener(\\\\\\\"abort\\\\\\\",(function(e){const n=hN[t];delete hN[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}s.manager.itemError(t),s.manager.itemEnd(t)}),!1),void 0!==this.responseType&&(a.responseType=this.responseType),void 0!==this.withCredentials&&(a.withCredentials=this.withCredentials),a.overrideMimeType&&a.overrideMimeType(void 0!==this.mimeType?this.mimeType:\\\\\\\"text/plain\\\\\\\");for(const t in this.requestHeader)a.setRequestHeader(t,this.requestHeader[t]);a.send(null)}return s.manager.itemStart(t),a}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class dN extends cN{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const s=this,r=oN.get(t);if(void 0!==r)return s.manager.itemStart(t),setTimeout((function(){e&&e(r),s.manager.itemEnd(t)}),0),r;const o=gb(\\\\\\\"img\\\\\\\");function a(){o.removeEventListener(\\\\\\\"load\\\\\\\",a,!1),o.removeEventListener(\\\\\\\"error\\\\\\\",l,!1),oN.add(t,this),e&&e(this),s.manager.itemEnd(t)}function l(e){o.removeEventListener(\\\\\\\"load\\\\\\\",a,!1),o.removeEventListener(\\\\\\\"error\\\\\\\",l,!1),i&&i(e),s.manager.itemError(t),s.manager.itemEnd(t)}return o.addEventListener(\\\\\\\"load\\\\\\\",a,!1),o.addEventListener(\\\\\\\"error\\\\\\\",l,!1),\\\\\\\"data:\\\\\\\"!==t.substr(0,5)&&void 0!==this.crossOrigin&&(o.crossOrigin=this.crossOrigin),s.manager.itemStart(t),o.src=t,o}}class pN extends cN{constructor(t){super(t)}load(t,e,n,i){const s=new kT,r=new dN(this.manager);r.setCrossOrigin(this.crossOrigin),r.setPath(this.path);let o=0;function a(n){r.load(t[n],(function(t){s.images[n]=t,o++,6===o&&(s.needsUpdate=!0,e&&e(s))}),void 0,i)}for(let e=0;e<t.length;++e)a(e);return s}}class _N extends cN{constructor(t){super(t)}load(t,e,n,i){const s=new bb,r=new dN(this.manager);return r.setCrossOrigin(this.crossOrigin),r.setPath(this.path),r.load(t,(function(t){s.image=t,s.needsUpdate=!0,void 0!==e&&e(s)}),n,i),s}}class mN extends Nw{constructor(t,e=1){super(),this.type=\\\\\\\"Light\\\\\\\",this.color=new $w(t),this.intensity=e}dispose(){}copy(t){return super.copy(t),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}mN.prototype.isLight=!0;class fN extends mN{constructor(t,e,n){super(t,n),this.type=\\\\\\\"HemisphereLight\\\\\\\",this.position.copy(Nw.DefaultUp),this.updateMatrix(),this.groundColor=new $w(e)}copy(t){return mN.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}fN.prototype.isHemisphereLight=!0;const gN=new sw,vN=new Sb,yN=new Sb;class xN{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new _b(512,512),this.map=null,this.mapPass=null,this.matrix=new sw,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new XT,this._frameExtents=new _b(1,1),this._viewportCount=1,this._viewports=[new Tb(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;vN.setFromMatrixPosition(t.matrixWorld),e.position.copy(vN),yN.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(yN),e.updateMatrixWorld(),gN.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(gN),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(e.projectionMatrix),n.multiply(e.matrixWorldInverse)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias&&(t.bias=this.bias),0!==this.normalBias&&(t.normalBias=this.normalBias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class bN extends xN{constructor(){super(new DT(50,1,.5,500)),this.focus=1}updateMatrices(t){const e=this.camera,n=2*ib*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,s=t.distance||e.far;n===e.fov&&i===e.aspect&&s===e.far||(e.fov=n,e.aspect=i,e.far=s,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}bN.prototype.isSpotLightShadow=!0;class wN extends mN{constructor(t,e,n=0,i=Math.PI/3,s=0,r=1){super(t,e),this.type=\\\\\\\"SpotLight\\\\\\\",this.position.copy(Nw.DefaultUp),this.updateMatrix(),this.target=new Nw,this.distance=n,this.angle=i,this.penumbra=s,this.decay=r,this.shadow=new bN}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}wN.prototype.isSpotLight=!0;const TN=new sw,AN=new Sb,MN=new Sb;class EN extends xN{constructor(){super(new DT(90,1,.5,500)),this._frameExtents=new _b(4,2),this._viewportCount=6,this._viewports=[new Tb(2,1,1,1),new Tb(0,1,1,1),new Tb(3,1,1,1),new Tb(1,1,1,1),new Tb(3,0,1,1),new Tb(1,0,1,1)],this._cubeDirections=[new Sb(1,0,0),new Sb(-1,0,0),new Sb(0,0,1),new Sb(0,0,-1),new Sb(0,1,0),new Sb(0,-1,0)],this._cubeUps=[new Sb(0,1,0),new Sb(0,1,0),new Sb(0,1,0),new Sb(0,1,0),new Sb(0,0,1),new Sb(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,s=t.distance||n.far;s!==n.far&&(n.far=s,n.updateProjectionMatrix()),AN.setFromMatrixPosition(t.matrixWorld),n.position.copy(AN),MN.copy(n.position),MN.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(MN),n.updateMatrixWorld(),i.makeTranslation(-AN.x,-AN.y,-AN.z),TN.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(TN)}}EN.prototype.isPointLightShadow=!0;class SN extends mN{constructor(t,e,n=0,i=1){super(t,e),this.type=\\\\\\\"PointLight\\\\\\\",this.distance=n,this.decay=i,this.shadow=new EN}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}SN.prototype.isPointLight=!0;class CN extends xN{constructor(){super(new oA(-5,5,5,-5,.5,500))}}CN.prototype.isDirectionalLightShadow=!0;class NN extends mN{constructor(t,e){super(t,e),this.type=\\\\\\\"DirectionalLight\\\\\\\",this.position.copy(Nw.DefaultUp),this.updateMatrix(),this.target=new Nw,this.shadow=new CN}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}NN.prototype.isDirectionalLight=!0;class LN extends mN{constructor(t,e){super(t,e),this.type=\\\\\\\"AmbientLight\\\\\\\"}}LN.prototype.isAmbientLight=!0;class ON extends mN{constructor(t,e,n=10,i=10){super(t,e),this.type=\\\\\\\"RectAreaLight\\\\\\\",this.width=n,this.height=i}get power(){return this.intensity*this.width*this.height*Math.PI}set power(t){this.intensity=t/(this.width*this.height*Math.PI)}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}ON.prototype.isRectAreaLight=!0;class PN{constructor(){this.coefficients=[];for(let t=0;t<9;t++)this.coefficients.push(new Sb)}set(t){for(let e=0;e<9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t<9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,s=t.z,r=this.coefficients;return e.copy(r[0]).multiplyScalar(.282095),e.addScaledVector(r[1],.488603*i),e.addScaledVector(r[2],.488603*s),e.addScaledVector(r[3],.488603*n),e.addScaledVector(r[4],n*i*1.092548),e.addScaledVector(r[5],i*s*1.092548),e.addScaledVector(r[6],.315392*(3*s*s-1)),e.addScaledVector(r[7],n*s*1.092548),e.addScaledVector(r[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,s=t.z,r=this.coefficients;return e.copy(r[0]).multiplyScalar(.886227),e.addScaledVector(r[1],1.023328*i),e.addScaledVector(r[2],1.023328*s),e.addScaledVector(r[3],1.023328*n),e.addScaledVector(r[4],.858086*n*i),e.addScaledVector(r[5],.858086*i*s),e.addScaledVector(r[6],.743125*s*s-.247708),e.addScaledVector(r[7],.858086*n*s),e.addScaledVector(r[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e<9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n<9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e<9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n<9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e<9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,s=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*s,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*s,e[6]=.315392*(3*s*s-1),e[7]=1.092548*n*s,e[8]=.546274*(n*n-i*i)}}PN.prototype.isSphericalHarmonics3=!0;class RN extends mN{constructor(t=new PN,e=1){super(void 0,e),this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}RN.prototype.isLightProbe=!0;class IN{static decodeText(t){if(\\\\\\\"undefined\\\\\\\"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e=\\\\\\\"\\\\\\\";for(let n=0,i=t.length;n<i;n++)e+=String.fromCharCode(t[n]);try{return decodeURIComponent(escape(e))}catch(t){return e}}static extractUrlBase(t){const e=t.lastIndexOf(\\\\\\\"/\\\\\\\");return-1===e?\\\\\\\"./\\\\\\\":t.substr(0,e+1)}}class FN extends hT{constructor(){super(),this.type=\\\\\\\"InstancedBufferGeometry\\\\\\\",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}clone(){return(new this.constructor).copy(this)}toJSON(){const t=super.toJSON(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}FN.prototype.isInstancedBufferGeometry=!0;let DN;(class extends cN{constructor(t){super(t),\\\\\\\"undefined\\\\\\\"==typeof createImageBitmap&&console.warn(\\\\\\\"THREE.ImageBitmapLoader: createImageBitmap() not supported.\\\\\\\"),\\\\\\\"undefined\\\\\\\"==typeof fetch&&console.warn(\\\\\\\"THREE.ImageBitmapLoader: fetch() not supported.\\\\\\\"),this.options={premultiplyAlpha:\\\\\\\"none\\\\\\\"}}setOptions(t){return this.options=t,this}load(t,e,n,i){void 0===t&&(t=\\\\\\\"\\\\\\\"),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const s=this,r=oN.get(t);if(void 0!==r)return s.manager.itemStart(t),setTimeout((function(){e&&e(r),s.manager.itemEnd(t)}),0),r;const o={};o.credentials=\\\\\\\"anonymous\\\\\\\"===this.crossOrigin?\\\\\\\"same-origin\\\\\\\":\\\\\\\"include\\\\\\\",o.headers=this.requestHeader,fetch(t,o).then((function(t){return t.blob()})).then((function(t){return createImageBitmap(t,Object.assign(s.options,{colorSpaceConversion:\\\\\\\"none\\\\\\\"}))})).then((function(n){oN.add(t,n),e&&e(n),s.manager.itemEnd(t)})).catch((function(e){i&&i(e),s.manager.itemError(t),s.manager.itemEnd(t)})),s.manager.itemStart(t)}}).prototype.isImageBitmapLoader=!0;const BN=function(){return void 0===DN&&(DN=new(window.AudioContext||window.webkitAudioContext)),DN};class zN extends cN{constructor(t){super(t)}load(t,e,n,i){const s=this,r=new uN(this.manager);r.setResponseType(\\\\\\\"arraybuffer\\\\\\\"),r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(t,(function(n){try{const t=n.slice(0);BN().decodeAudioData(t,(function(t){e(t)}))}catch(e){i?i(e):console.error(e),s.manager.itemError(t)}}),n,i)}}(class extends RN{constructor(t,e,n=1){super(void 0,n);const i=(new $w).set(t),s=(new $w).set(e),r=new Sb(i.r,i.g,i.b),o=new Sb(s.r,s.g,s.b),a=Math.sqrt(Math.PI),l=a*Math.sqrt(.75);this.sh.coefficients[0].copy(r).add(o).multiplyScalar(a),this.sh.coefficients[1].copy(r).sub(o).multiplyScalar(l)}}).prototype.isHemisphereLightProbe=!0;(class extends RN{constructor(t,e=1){super(void 0,e);const n=(new $w).set(t);this.sh.coefficients[0].set(n.r,n.g,n.b).multiplyScalar(2*Math.sqrt(Math.PI))}}).prototype.isAmbientLightProbe=!0;class kN extends Nw{constructor(t){super(),this.type=\\\\\\\"Audio\\\\\\\",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=\\\\\\\"empty\\\\\\\",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"audioNode\\\\\\\",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"mediaNode\\\\\\\",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"mediaStreamNode\\\\\\\",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType=\\\\\\\"buffer\\\\\\\",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn(\\\\\\\"THREE.Audio: Audio is already playing.\\\\\\\");if(!1===this.hasPlaybackControl)return void console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}getFilters(){return this.filters}setFilters(t){return t||(t=[]),!0===this._connected?(this.disconnect(),this.filters=t.slice(),this.connect()):this.filters=t.slice(),this}setDetune(t){if(this.detune=t,void 0!==this.source.detune)return!0===this.isPlaying&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(t){return this.setFilters(t?[t]:[])}setPlaybackRate(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return!1===this.hasPlaybackControl?(console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\"),!1):this.loop}setLoop(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}setLoopStart(t){return this.loopStart=t,this}setLoopEnd(t){return this.loopEnd=t,this}getVolume(){return this.gain.gain.value}setVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}class UN{constructor(t,e,n){let i,s,r;switch(this.binding=t,this.valueSize=n,e){case\\\\\\\"quaternion\\\\\\\":i=this._slerp,s=this._slerpAdditive,r=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*n),this._workIndex=5;break;case\\\\\\\"string\\\\\\\":case\\\\\\\"bool\\\\\\\":i=this._select,s=this._select,r=this._setAdditiveIdentityOther,this.buffer=new Array(5*n);break;default:i=this._lerp,s=this._lerpAdditive,r=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*n)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=s,this._setIdentity=r,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(t,e){const n=this.buffer,i=this.valueSize,s=t*i+i;let r=this.cumulativeWeight;if(0===r){for(let t=0;t!==i;++t)n[s+t]=n[t];r=e}else{r+=e;const t=e/r;this._mixBufferRegion(n,s,0,t,i)}this.cumulativeWeight=r}accumulateAdditive(t){const e=this.buffer,n=this.valueSize,i=n*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(e,i,0,t,n),this.cumulativeWeightAdditive+=t}apply(t){const e=this.valueSize,n=this.buffer,i=t*e+e,s=this.cumulativeWeight,r=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,s<1){const t=e*this._origIndex;this._mixBufferRegion(n,i,t,1-s,e)}r>0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,s=e+e;t!==s;++t)if(n[t]!==n[t+e]){o.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,s=i;t!==s;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n<e;n++)this.buffer[n]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const t=this._origIndex*this.valueSize,e=this._addIndex*this.valueSize;for(let n=0;n<this.valueSize;n++)this.buffer[e+n]=this.buffer[t+n]}_select(t,e,n,i,s){if(i>=.5)for(let i=0;i!==s;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){Eb.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,s){const r=this._workIndex*s;Eb.multiplyQuaternionsFlat(t,r,t,e,t,n),Eb.slerpFlat(t,e,t,e,t,r,i)}_lerp(t,e,n,i,s){const r=1-i;for(let o=0;o!==s;++o){const s=e+o;t[s]=t[s]*r+t[n+o]*i}}_lerpAdditive(t,e,n,i,s){for(let r=0;r!==s;++r){const s=e+r;t[s]=t[s]+t[n+r]*i}}}const GN=\\\\\\\"\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/\\\\\\\",VN=new RegExp(\\\\\\\"[\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/]\\\\\\\",\\\\\\\"g\\\\\\\"),HN=\\\\\\\"[^\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/]\\\\\\\",jN=\\\\\\\"[^\\\\\\\"+GN.replace(\\\\\\\"\\\\\\\\.\\\\\\\",\\\\\\\"\\\\\\\")+\\\\\\\"]\\\\\\\",WN=/((?:WC+[\\\\/:])*)/.source.replace(\\\\\\\"WC\\\\\\\",HN),qN=/(WCOD+)?/.source.replace(\\\\\\\"WCOD\\\\\\\",jN),XN=/(?:\\\\.(WC+)(?:\\\\[(.+)\\\\])?)?/.source.replace(\\\\\\\"WC\\\\\\\",HN),YN=/\\\\.(WC+)(?:\\\\[(.+)\\\\])?/.source.replace(\\\\\\\"WC\\\\\\\",HN),$N=new RegExp(\\\\\\\"^\\\\\\\"+WN+qN+XN+YN+\\\\\\\"$\\\\\\\"),JN=[\\\\\\\"material\\\\\\\",\\\\\\\"materials\\\\\\\",\\\\\\\"bones\\\\\\\"];class ZN{constructor(t,e,n){this.path=e,this.parsedPath=n||ZN.parseTrackName(e),this.node=ZN.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new ZN.Composite(t,e,n):new ZN(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\\\s/g,\\\\\\\"_\\\\\\\").replace(VN,\\\\\\\"\\\\\\\")}static parseTrackName(t){const e=$N.exec(t);if(!e)throw new Error(\\\\\\\"PropertyBinding: Cannot parse trackName: \\\\\\\"+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(\\\\\\\".\\\\\\\");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==JN.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error(\\\\\\\"PropertyBinding: can not parse propertyName from trackName: \\\\\\\"+t);return n}static findNode(t,e){if(!e||\\\\\\\"\\\\\\\"===e||\\\\\\\".\\\\\\\"===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i<t.length;i++){const s=t[i];if(s.name===e||s.uuid===e)return s;const r=n(s.children);if(r)return r}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){const n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){const n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node;const e=this.parsedPath,n=e.objectName,i=e.propertyName;let s=e.propertyIndex;if(t||(t=ZN.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to update node for track: \\\\\\\"+this.path+\\\\\\\" but it wasn't found.\\\\\\\");if(n){let i=e.objectIndex;switch(n){case\\\\\\\"materials\\\\\\\":if(!t.material)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\\\\\\\",this);if(!t.material.materials)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\\\\\\\",this);t=t.material.materials;break;case\\\\\\\"bones\\\\\\\":if(!t.skeleton)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\\\\\\\",this);t=t.skeleton.bones;for(let e=0;e<t.length;e++)if(t[e].name===i){i=e;break}break;default:if(void 0===t[n])return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\\\\\\\",this);t=t[n]}if(void 0!==i){if(void 0===t[i])return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\\\\\\\",this,t);t=t[i]}}const r=t[i];if(void 0===r){const n=e.nodeName;return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to update property for track: \\\\\\\"+n+\\\\\\\".\\\\\\\"+i+\\\\\\\" but it wasn't found.\\\\\\\",t)}let o=this.Versioning.None;this.targetObject=t,void 0!==t.needsUpdate?o=this.Versioning.NeedsUpdate:void 0!==t.matrixWorldNeedsUpdate&&(o=this.Versioning.MatrixWorldNeedsUpdate);let a=this.BindingType.Direct;if(void 0!==s){if(\\\\\\\"morphTargetInfluences\\\\\\\"===i){if(!t.geometry)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\\\\\\\",this);if(!t.geometry.isBufferGeometry)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\",this);if(!t.geometry.morphAttributes)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\\\\\\\",this);void 0!==t.morphTargetDictionary[s]&&(s=t.morphTargetDictionary[s])}a=this.BindingType.ArrayElement,this.resolvedProperty=r,this.propertyIndex=s}else void 0!==r.fromArray&&void 0!==r.toArray?(a=this.BindingType.HasFromToArray,this.resolvedProperty=r):Array.isArray(r)?(a=this.BindingType.EntireArray,this.resolvedProperty=r):this.propertyName=i;this.getValue=this.GetterByBindingType[a],this.setValue=this.SetterByBindingTypeAndVersioning[a][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}ZN.Composite=class{constructor(t,e,n){const i=n||ZN.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)}setValue(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,s=n.length;i!==s;++i)n[i].setValue(t,e)}bind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},ZN.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},ZN.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},ZN.prototype.GetterByBindingType=[ZN.prototype._getValue_direct,ZN.prototype._getValue_array,ZN.prototype._getValue_arrayElement,ZN.prototype._getValue_toArray],ZN.prototype.SetterByBindingTypeAndVersioning=[[ZN.prototype._setValue_direct,ZN.prototype._setValue_direct_setNeedsUpdate,ZN.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[ZN.prototype._setValue_array,ZN.prototype._setValue_array_setNeedsUpdate,ZN.prototype._setValue_array_setMatrixWorldNeedsUpdate],[ZN.prototype._setValue_arrayElement,ZN.prototype._setValue_arrayElement_setNeedsUpdate,ZN.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[ZN.prototype._setValue_fromArray,ZN.prototype._setValue_fromArray_setNeedsUpdate,ZN.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];class KN{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const s=e.tracks,r=s.length,o=new Array(r),a={endingStart:Vx,endingEnd:Vx};for(let t=0;t!==r;++t){const e=s[t].createInterpolant(null);o[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(r),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,s=i/n,r=n/i;t.warp(1,s,e),this.warp(r,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,s=i.time,r=this.timeScale;let o=this._timeScaleInterpolant;null===o&&(o=i._lendControlInterpolant(),this._timeScaleInterpolant=o);const a=o.parameterPositions,l=o.sampleValues;return a[0]=s,a[1]=s+n,l[0]=t/r,l[1]=e/r,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const s=this._startTime;if(null!==s){const i=(t-s)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const r=this._updateTime(e),o=this._updateWeight(t);if(o>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(r),e[n].accumulateAdditive(o);break;case Wx:default:for(let n=0,s=t.length;n!==s;++n)t[n].evaluate(r),e[n].accumulate(i,o)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,s=this._loopCount;const r=2202===n;if(0===t)return-1===s?i:r&&1==(1&s)?e-i:i;if(2200===n){-1===s&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"finished\\\\\\\",action:this,direction:t<0?-1:1})}}else{if(-1===s&&(t>=0?(s=0,this._setEndings(!0,0===this.repetitions,r)):this._setEndings(0===this.repetitions,!0,r)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,s+=Math.abs(n);const o=this.repetitions-s;if(o<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"finished\\\\\\\",action:this,direction:t>0?1:-1});else{if(1===o){const e=t<0;this._setEndings(e,!e,r)}else this._setEndings(!1,!1,r);this._loopCount=s,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"loop\\\\\\\",action:this,loopDelta:n})}}else this.time=i;if(r&&1==(1&s))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=Hx,i.endingEnd=Hx):(i.endingStart=t?this.zeroSlopeAtStart?Hx:Vx:jx,i.endingEnd=e?this.zeroSlopeAtEnd?Hx:Vx:jx)}_scheduleFading(t,e,n){const i=this._mixer,s=i.time;let r=this._weightInterpolant;null===r&&(r=i._lendControlInterpolant(),this._weightInterpolant=r);const o=r.parameterPositions,a=r.sampleValues;return o[0]=s,a[0]=e,o[1]=s+t,a[1]=n,this}}(class extends tb{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,s=i.length,r=t._propertyBindings,o=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==s;++t){const s=i[t],l=s.name;let h=c[l];if(void 0!==h)r[t]=h;else{if(h=r[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new UN(ZN.create(n,l,i),s.ValueTypeName,s.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,a,l),r[t]=h}o[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e<this._nActiveActions}_addInactiveAction(t,e,n){const i=this._actions,s=this._actionsByClip;let r=s[e];if(void 0===r)r={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,s[e]=r;else{const e=r.knownActions;t._byClipCacheIndex=e.length,e.push(t)}t._cacheIndex=i.length,i.push(t),r.actionByRoot[n]=t}_removeInactiveAction(t){const e=this._actions,n=e[e.length-1],i=t._cacheIndex;n._cacheIndex=i,e[i]=n,e.pop(),t._cacheIndex=null;const s=t._clip.uuid,r=this._actionsByClip,o=r[s],a=o.knownActions,l=a[a.length-1],c=t._byClipCacheIndex;l._byClipCacheIndex=c,a[c]=l,a.pop(),t._byClipCacheIndex=null;delete o.actionByRoot[(t._localRoot||this._root).uuid],0===a.length&&delete r[s],this._removeInactiveBindingsForAction(t)}_removeInactiveBindingsForAction(t){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.referenceCount&&this._removeInactiveBinding(n)}}_lendAction(t){const e=this._actions,n=t._cacheIndex,i=this._nActiveActions++,s=e[i];t._cacheIndex=i,e[i]=t,s._cacheIndex=n,e[n]=s}_takeBackAction(t){const e=this._actions,n=t._cacheIndex,i=--this._nActiveActions,s=e[i];t._cacheIndex=i,e[i]=t,s._cacheIndex=n,e[n]=s}_addInactiveBinding(t,e,n){const i=this._bindingsByRootAndName,s=this._bindings;let r=i[e];void 0===r&&(r={},i[e]=r),r[n]=t,t._cacheIndex=s.length,s.push(t)}_removeInactiveBinding(t){const e=this._bindings,n=t.binding,i=n.rootNode.uuid,s=n.path,r=this._bindingsByRootAndName,o=r[i],a=e[e.length-1],l=t._cacheIndex;a._cacheIndex=l,e[l]=a,e.pop(),delete o[s],0===Object.keys(o).length&&delete r[i]}_lendBinding(t){const e=this._bindings,n=t._cacheIndex,i=this._nActiveBindings++,s=e[i];t._cacheIndex=i,e[i]=t,s._cacheIndex=n,e[n]=s}_takeBackBinding(t){const e=this._bindings,n=t._cacheIndex,i=--this._nActiveBindings,s=e[i];t._cacheIndex=i,e[i]=t,s._cacheIndex=n,e[n]=s}_lendControlInterpolant(){const t=this._controlInterpolants,e=this._nActiveControlInterpolants++;let n=t[e];return void 0===n&&(n=new YC(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),n.__cacheIndex=e,t[e]=n),n}_takeBackControlInterpolant(t){const e=this._controlInterpolants,n=t.__cacheIndex,i=--this._nActiveControlInterpolants,s=e[i];t.__cacheIndex=i,e[i]=t,s.__cacheIndex=n,e[n]=s}clipAction(t,e,n){const i=e||this._root,s=i.uuid;let r=\\\\\\\"string\\\\\\\"==typeof t?sN.findByName(i,t):t;const o=null!==r?r.uuid:t,a=this._actionsByClip[o];let l=null;if(void 0===n&&(n=null!==r?r.blendMode:Wx),void 0!==a){const t=a.actionByRoot[s];if(void 0!==t&&t.blendMode===n)return t;l=a.knownActions[0],null===r&&(r=l._clip)}if(null===r)return null;const c=new KN(this,r,e,n);return this._bindAction(c,l),this._addInactiveAction(c,o,s),c}existingAction(t,e){const n=e||this._root,i=n.uuid,s=\\\\\\\"string\\\\\\\"==typeof t?sN.findByName(n,t):t,r=s?s.uuid:t,o=this._actionsByClip[r];return void 0!==o&&o.actionByRoot[i]||null}stopAllAction(){const t=this._actions;for(let e=this._nActiveActions-1;e>=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,s=Math.sign(t),r=this._accuIndex^=1;for(let o=0;o!==n;++o){e[o]._update(i,t,s,r)}const o=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)o[t].apply(r);return this}setTime(t){this.time=0;for(let t=0;t<this._actions.length;t++)this._actions[t].time=0;return this.update(t)}getRoot(){return this._root}uncacheClip(t){const e=this._actions,n=t.uuid,i=this._actionsByClip,s=i[n];if(void 0!==s){const t=s.knownActions;for(let n=0,i=t.length;n!==i;++n){const i=t[n];this._deactivateAction(i);const s=i._cacheIndex,r=e[e.length-1];i._cacheIndex=null,i._byClipCacheIndex=null,r._cacheIndex=s,e[s]=r,e.pop(),this._removeInactiveBindingsForAction(i)}delete i[n]}}uncacheRoot(t){const e=t.uuid,n=this._actionsByClip;for(const t in n){const i=n[t].actionByRoot[e];void 0!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}const i=this._bindingsByRootAndName[e];if(void 0!==i)for(const t in i){const e=i[t];e.restoreOriginalState(),this._removeInactiveBinding(e)}}uncacheAction(t,e){const n=this.existingAction(t,e);null!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}}).prototype._controlInterpolantsResultBuffer=new Float32Array(1);class QN{constructor(t){\\\\\\\"string\\\\\\\"==typeof t&&(console.warn(\\\\\\\"THREE.Uniform: Type parameter is no longer needed.\\\\\\\"),t=arguments[1]),this.value=t}clone(){return new QN(void 0===this.value.clone?this.value:this.value.clone())}}(class extends kE{constructor(t,e,n=1){super(t,e),this.meshPerAttribute=n}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}clone(t){const e=super.clone(t);return e.meshPerAttribute=this.meshPerAttribute,e}toJSON(t){const e=super.toJSON(t);return e.isInstancedInterleavedBuffer=!0,e.meshPerAttribute=this.meshPerAttribute,e}}).prototype.isInstancedInterleavedBuffer=!0;const tL=new _b;class eL{constructor(t=new _b(1/0,1/0),e=new _b(-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=tL.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(t){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return tL.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}eL.prototype.isBox2=!0;const nL=new Sb,iL=new Sb;class sL{constructor(t=new Sb,e=new Sb){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){nL.subVectors(t,this.start),iL.subVectors(this.end,this.start);const n=iL.dot(iL);let i=iL.dot(nL)/n;return e&&(i=ab(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}(class extends Nw{constructor(t){super(),this.material=t,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}).prototype.isImmediateRenderObject=!0;const rL=new Sb,oL=new sw,aL=new sw;function lL(t){const e=[];t&&t.isBone&&e.push(t);for(let n=0;n<t.children.length;n++)e.push.apply(e,lL(t.children[n]));return e}const cL=new Float32Array(1);new Int32Array(cL.buffer);BS.create=function(t,e){return console.log(\\\\\\\"THREE.Curve.create() has been deprecated\\\\\\\"),t.prototype=Object.create(BS.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},iC.prototype.fromPoints=function(t){return console.warn(\\\\\\\"THREE.Path: .fromPoints() has been renamed to .setFromPoints().\\\\\\\"),this.setFromPoints(t)},class extends SS{constructor(t=10,e=10,n=4473924,i=8947848){n=new $w(n),i=new $w(i);const s=e/2,r=t/e,o=t/2,a=[],l=[];for(let t=0,c=0,h=-o;t<=e;t++,h+=r){a.push(-o,0,h,o,0,h),a.push(h,0,-o,h,0,o);const e=t===s?n:i;e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3}const c=new hT;c.setAttribute(\\\\\\\"position\\\\\\\",new nT(a,3)),c.setAttribute(\\\\\\\"color\\\\\\\",new nT(l,3));super(c,new vS({vertexColors:!0,toneMapped:!1})),this.type=\\\\\\\"GridHelper\\\\\\\"}}.prototype.setColors=function(){console.error(\\\\\\\"THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.\\\\\\\")},class extends SS{constructor(t){const e=lL(t),n=new hT,i=[],s=[],r=new $w(0,0,1),o=new $w(0,1,0);for(let t=0;t<e.length;t++){const n=e[t];n.parent&&n.parent.isBone&&(i.push(0,0,0),i.push(0,0,0),s.push(r.r,r.g,r.b),s.push(o.r,o.g,o.b))}n.setAttribute(\\\\\\\"position\\\\\\\",new nT(i,3)),n.setAttribute(\\\\\\\"color\\\\\\\",new nT(s,3));super(n,new vS({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0})),this.type=\\\\\\\"SkeletonHelper\\\\\\\",this.isSkeletonHelper=!0,this.root=t,this.bones=e,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1}updateMatrixWorld(t){const e=this.bones,n=this.geometry,i=n.getAttribute(\\\\\\\"position\\\\\\\");aL.copy(this.root.matrixWorld).invert();for(let t=0,n=0;t<e.length;t++){const s=e[t];s.parent&&s.parent.isBone&&(oL.multiplyMatrices(aL,s.matrixWorld),rL.setFromMatrixPosition(oL),i.setXYZ(n,rL.x,rL.y,rL.z),oL.multiplyMatrices(aL,s.parent.matrixWorld),rL.setFromMatrixPosition(oL),i.setXYZ(n+1,rL.x,rL.y,rL.z),n+=2)}n.getAttribute(\\\\\\\"position\\\\\\\").needsUpdate=!0,super.updateMatrixWorld(t)}}.prototype.update=function(){console.error(\\\\\\\"THREE.SkeletonHelper: update() no longer needs to be called.\\\\\\\")},cN.prototype.extractUrlBase=function(t){return console.warn(\\\\\\\"THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.\\\\\\\"),IN.extractUrlBase(t)},cN.Handlers={add:function(){console.error(\\\\\\\"THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.\\\\\\\")},get:function(){console.error(\\\\\\\"THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.\\\\\\\")}},eL.prototype.center=function(t){return console.warn(\\\\\\\"THREE.Box2: .center() has been renamed to .getCenter().\\\\\\\"),this.getCenter(t)},eL.prototype.empty=function(){return console.warn(\\\\\\\"THREE.Box2: .empty() has been renamed to .isEmpty().\\\\\\\"),this.isEmpty()},eL.prototype.isIntersectionBox=function(t){return console.warn(\\\\\\\"THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().\\\\\\\"),this.intersectsBox(t)},eL.prototype.size=function(t){return console.warn(\\\\\\\"THREE.Box2: .size() has been renamed to .getSize().\\\\\\\"),this.getSize(t)},Lb.prototype.center=function(t){return console.warn(\\\\\\\"THREE.Box3: .center() has been renamed to .getCenter().\\\\\\\"),this.getCenter(t)},Lb.prototype.empty=function(){return console.warn(\\\\\\\"THREE.Box3: .empty() has been renamed to .isEmpty().\\\\\\\"),this.isEmpty()},Lb.prototype.isIntersectionBox=function(t){return console.warn(\\\\\\\"THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().\\\\\\\"),this.intersectsBox(t)},Lb.prototype.isIntersectionSphere=function(t){return console.warn(\\\\\\\"THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().\\\\\\\"),this.intersectsSphere(t)},Lb.prototype.size=function(t){return console.warn(\\\\\\\"THREE.Box3: .size() has been renamed to .getSize().\\\\\\\"),this.getSize(t)},$b.prototype.empty=function(){return console.warn(\\\\\\\"THREE.Sphere: .empty() has been renamed to .isEmpty().\\\\\\\"),this.isEmpty()},XT.prototype.setFromMatrix=function(t){return console.warn(\\\\\\\"THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().\\\\\\\"),this.setFromProjectionMatrix(t)},sL.prototype.center=function(t){return console.warn(\\\\\\\"THREE.Line3: .center() has been renamed to .getCenter().\\\\\\\"),this.getCenter(t)},mb.prototype.flattenToArrayOffset=function(t,e){return console.warn(\\\\\\\"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\\\\\\\"),this.toArray(t,e)},mb.prototype.multiplyVector3=function(t){return console.warn(\\\\\\\"THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.\\\\\\\"),t.applyMatrix3(this)},mb.prototype.multiplyVector3Array=function(){console.error(\\\\\\\"THREE.Matrix3: .multiplyVector3Array() has been removed.\\\\\\\")},mb.prototype.applyToBufferAttribute=function(t){return console.warn(\\\\\\\"THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.\\\\\\\"),t.applyMatrix3(this)},mb.prototype.applyToVector3Array=function(){console.error(\\\\\\\"THREE.Matrix3: .applyToVector3Array() has been removed.\\\\\\\")},mb.prototype.getInverse=function(t){return console.warn(\\\\\\\"THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\\\\\\\"),this.copy(t).invert()},sw.prototype.extractPosition=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().\\\\\\\"),this.copyPosition(t)},sw.prototype.flattenToArrayOffset=function(t,e){return console.warn(\\\\\\\"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\\\\\\\"),this.toArray(t,e)},sw.prototype.getPosition=function(){return console.warn(\\\\\\\"THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.\\\\\\\"),(new Sb).setFromMatrixColumn(this,3)},sw.prototype.setRotationFromQuaternion=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().\\\\\\\"),this.makeRotationFromQuaternion(t)},sw.prototype.multiplyToArray=function(){console.warn(\\\\\\\"THREE.Matrix4: .multiplyToArray() has been removed.\\\\\\\")},sw.prototype.multiplyVector3=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.\\\\\\\"),t.applyMatrix4(this)},sw.prototype.multiplyVector4=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.\\\\\\\"),t.applyMatrix4(this)},sw.prototype.multiplyVector3Array=function(){console.error(\\\\\\\"THREE.Matrix4: .multiplyVector3Array() has been removed.\\\\\\\")},sw.prototype.rotateAxis=function(t){console.warn(\\\\\\\"THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.\\\\\\\"),t.transformDirection(this)},sw.prototype.crossVector=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.\\\\\\\"),t.applyMatrix4(this)},sw.prototype.translate=function(){console.error(\\\\\\\"THREE.Matrix4: .translate() has been removed.\\\\\\\")},sw.prototype.rotateX=function(){console.error(\\\\\\\"THREE.Matrix4: .rotateX() has been removed.\\\\\\\")},sw.prototype.rotateY=function(){console.error(\\\\\\\"THREE.Matrix4: .rotateY() has been removed.\\\\\\\")},sw.prototype.rotateZ=function(){console.error(\\\\\\\"THREE.Matrix4: .rotateZ() has been removed.\\\\\\\")},sw.prototype.rotateByAxis=function(){console.error(\\\\\\\"THREE.Matrix4: .rotateByAxis() has been removed.\\\\\\\")},sw.prototype.applyToBufferAttribute=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.\\\\\\\"),t.applyMatrix4(this)},sw.prototype.applyToVector3Array=function(){console.error(\\\\\\\"THREE.Matrix4: .applyToVector3Array() has been removed.\\\\\\\")},sw.prototype.makeFrustum=function(t,e,n,i,s,r){return console.warn(\\\\\\\"THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.\\\\\\\"),this.makePerspective(t,e,i,n,s,r)},sw.prototype.getInverse=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\\\\\\\"),this.copy(t).invert()},jT.prototype.isIntersectionLine=function(t){return console.warn(\\\\\\\"THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().\\\\\\\"),this.intersectsLine(t)},Eb.prototype.multiplyVector3=function(t){return console.warn(\\\\\\\"THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.\\\\\\\"),t.applyQuaternion(this)},Eb.prototype.inverse=function(){return console.warn(\\\\\\\"THREE.Quaternion: .inverse() has been renamed to invert().\\\\\\\"),this.invert()},iw.prototype.isIntersectionBox=function(t){return console.warn(\\\\\\\"THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().\\\\\\\"),this.intersectsBox(t)},iw.prototype.isIntersectionPlane=function(t){return console.warn(\\\\\\\"THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().\\\\\\\"),this.intersectsPlane(t)},iw.prototype.isIntersectionSphere=function(t){return console.warn(\\\\\\\"THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().\\\\\\\"),this.intersectsSphere(t)},Uw.prototype.area=function(){return console.warn(\\\\\\\"THREE.Triangle: .area() has been renamed to .getArea().\\\\\\\"),this.getArea()},Uw.prototype.barycoordFromPoint=function(t,e){return console.warn(\\\\\\\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\\\\\\\"),this.getBarycoord(t,e)},Uw.prototype.midpoint=function(t){return console.warn(\\\\\\\"THREE.Triangle: .midpoint() has been renamed to .getMidpoint().\\\\\\\"),this.getMidpoint(t)},Uw.prototypenormal=function(t){return console.warn(\\\\\\\"THREE.Triangle: .normal() has been renamed to .getNormal().\\\\\\\"),this.getNormal(t)},Uw.prototype.plane=function(t){return console.warn(\\\\\\\"THREE.Triangle: .plane() has been renamed to .getPlane().\\\\\\\"),this.getPlane(t)},Uw.barycoordFromPoint=function(t,e,n,i,s){return console.warn(\\\\\\\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\\\\\\\"),Uw.getBarycoord(t,e,n,i,s)},Uw.normal=function(t,e,n,i){return console.warn(\\\\\\\"THREE.Triangle: .normal() has been renamed to .getNormal().\\\\\\\"),Uw.getNormal(t,e,n,i)},sC.prototype.extractAllPoints=function(t){return console.warn(\\\\\\\"THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.\\\\\\\"),this.extractPoints(t)},sC.prototype.extrude=function(t){return console.warn(\\\\\\\"THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.\\\\\\\"),new RC(this,t)},sC.prototype.makeGeometry=function(t){return console.warn(\\\\\\\"THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.\\\\\\\"),new FC(this,t)},_b.prototype.fromAttribute=function(t,e,n){return console.warn(\\\\\\\"THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().\\\\\\\"),this.fromBufferAttribute(t,e,n)},_b.prototype.distanceToManhattan=function(t){return console.warn(\\\\\\\"THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\\\\\\\"),this.manhattanDistanceTo(t)},_b.prototype.lengthManhattan=function(){return console.warn(\\\\\\\"THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().\\\\\\\"),this.manhattanLength()},Sb.prototype.setEulerFromRotationMatrix=function(){console.error(\\\\\\\"THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.\\\\\\\")},Sb.prototype.setEulerFromQuaternion=function(){console.error(\\\\\\\"THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.\\\\\\\")},Sb.prototype.getPositionFromMatrix=function(t){return console.warn(\\\\\\\"THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().\\\\\\\"),this.setFromMatrixPosition(t)},Sb.prototype.getScaleFromMatrix=function(t){return console.warn(\\\\\\\"THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().\\\\\\\"),this.setFromMatrixScale(t)},Sb.prototype.getColumnFromMatrix=function(t,e){return console.warn(\\\\\\\"THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().\\\\\\\"),this.setFromMatrixColumn(e,t)},Sb.prototype.applyProjection=function(t){return console.warn(\\\\\\\"THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.\\\\\\\"),this.applyMatrix4(t)},Sb.prototype.fromAttribute=function(t,e,n){return console.warn(\\\\\\\"THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().\\\\\\\"),this.fromBufferAttribute(t,e,n)},Sb.prototype.distanceToManhattan=function(t){return console.warn(\\\\\\\"THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\\\\\\\"),this.manhattanDistanceTo(t)},Sb.prototype.lengthManhattan=function(){return console.warn(\\\\\\\"THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().\\\\\\\"),this.manhattanLength()},Tb.prototype.fromAttribute=function(t,e,n){return console.warn(\\\\\\\"THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().\\\\\\\"),this.fromBufferAttribute(t,e,n)},Tb.prototype.lengthManhattan=function(){return console.warn(\\\\\\\"THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().\\\\\\\"),this.manhattanLength()},Nw.prototype.getChildByName=function(t){return console.warn(\\\\\\\"THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().\\\\\\\"),this.getObjectByName(t)},Nw.prototype.renderDepth=function(){console.warn(\\\\\\\"THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.\\\\\\\")},Nw.prototype.translate=function(t,e){return console.warn(\\\\\\\"THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.\\\\\\\"),this.translateOnAxis(e,t)},Nw.prototype.getWorldRotation=function(){console.error(\\\\\\\"THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.\\\\\\\")},Nw.prototype.applyMatrix=function(t){return console.warn(\\\\\\\"THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().\\\\\\\"),this.applyMatrix4(t)},Object.defineProperties(Nw.prototype,{eulerOrder:{get:function(){return console.warn(\\\\\\\"THREE.Object3D: .eulerOrder is now .rotation.order.\\\\\\\"),this.rotation.order},set:function(t){console.warn(\\\\\\\"THREE.Object3D: .eulerOrder is now .rotation.order.\\\\\\\"),this.rotation.order=t}},useQuaternion:{get:function(){console.warn(\\\\\\\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\\\\\\\")}}}),CT.prototype.setDrawMode=function(){console.error(\\\\\\\"THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\\\\\\\")},Object.defineProperties(CT.prototype,{drawMode:{get:function(){return console.error(\\\\\\\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.\\\\\\\"),0},set:function(){console.error(\\\\\\\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\\\\\\\")}}}),cS.prototype.initBones=function(){console.error(\\\\\\\"THREE.SkinnedMesh: initBones() has been removed.\\\\\\\")},DT.prototype.setLens=function(t,e){console.warn(\\\\\\\"THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.\\\\\\\"),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(mN.prototype,{onlyShadow:{set:function(){console.warn(\\\\\\\"THREE.Light: .onlyShadow has been removed.\\\\\\\")}},shadowCameraFov:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraFov is now .shadow.camera.fov.\\\\\\\"),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraLeft is now .shadow.camera.left.\\\\\\\"),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraRight is now .shadow.camera.right.\\\\\\\"),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraTop is now .shadow.camera.top.\\\\\\\"),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.\\\\\\\"),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraNear is now .shadow.camera.near.\\\\\\\"),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraFar is now .shadow.camera.far.\\\\\\\"),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn(\\\\\\\"THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.\\\\\\\")}},shadowBias:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowBias is now .shadow.bias.\\\\\\\"),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn(\\\\\\\"THREE.Light: .shadowDarkness has been removed.\\\\\\\")}},shadowMapWidth:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.\\\\\\\"),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.\\\\\\\"),this.shadow.mapSize.height=t}}}),Object.defineProperties(Qw.prototype,{length:{get:function(){return console.warn(\\\\\\\"THREE.BufferAttribute: .length has been deprecated. Use .count instead.\\\\\\\"),this.array.length}},dynamic:{get:function(){return console.warn(\\\\\\\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\\\\\\\"),this.usage===Kx},set:function(){console.warn(\\\\\\\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\\\\\\\"),this.setUsage(Kx)}}}),Qw.prototype.setDynamic=function(t){return console.warn(\\\\\\\"THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.\\\\\\\"),this.setUsage(!0===t?Kx:Zx),this},Qw.prototype.copyIndicesArray=function(){console.error(\\\\\\\"THREE.BufferAttribute: .copyIndicesArray() has been removed.\\\\\\\")},Qw.prototype.setArray=function(){console.error(\\\\\\\"THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\\\\\\\")},hT.prototype.addIndex=function(t){console.warn(\\\\\\\"THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().\\\\\\\"),this.setIndex(t)},hT.prototype.addAttribute=function(t,e){return console.warn(\\\\\\\"THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().\\\\\\\"),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?\\\\\\\"index\\\\\\\"===t?(console.warn(\\\\\\\"THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.\\\\\\\"),this.setIndex(e),this):this.setAttribute(t,e):(console.warn(\\\\\\\"THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).\\\\\\\"),this.setAttribute(t,new Qw(arguments[1],arguments[2])))},hT.prototype.addDrawCall=function(t,e,n){void 0!==n&&console.warn(\\\\\\\"THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.\\\\\\\"),console.warn(\\\\\\\"THREE.BufferGeometry: .addDrawCall() is now .addGroup().\\\\\\\"),this.addGroup(t,e)},hT.prototype.clearDrawCalls=function(){console.warn(\\\\\\\"THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().\\\\\\\"),this.clearGroups()},hT.prototype.computeOffsets=function(){console.warn(\\\\\\\"THREE.BufferGeometry: .computeOffsets() has been removed.\\\\\\\")},hT.prototype.removeAttribute=function(t){return console.warn(\\\\\\\"THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().\\\\\\\"),this.deleteAttribute(t)},hT.prototype.applyMatrix=function(t){return console.warn(\\\\\\\"THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().\\\\\\\"),this.applyMatrix4(t)},Object.defineProperties(hT.prototype,{drawcalls:{get:function(){return console.error(\\\\\\\"THREE.BufferGeometry: .drawcalls has been renamed to .groups.\\\\\\\"),this.groups}},offsets:{get:function(){return console.warn(\\\\\\\"THREE.BufferGeometry: .offsets has been renamed to .groups.\\\\\\\"),this.groups}}}),kE.prototype.setDynamic=function(t){return console.warn(\\\\\\\"THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.\\\\\\\"),this.setUsage(!0===t?Kx:Zx),this},kE.prototype.setArray=function(){console.error(\\\\\\\"THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\\\\\\\")},RC.prototype.getArrays=function(){console.error(\\\\\\\"THREE.ExtrudeGeometry: .getArrays() has been removed.\\\\\\\")},RC.prototype.addShapeList=function(){console.error(\\\\\\\"THREE.ExtrudeGeometry: .addShapeList() has been removed.\\\\\\\")},RC.prototype.addShape=function(){console.error(\\\\\\\"THREE.ExtrudeGeometry: .addShape() has been removed.\\\\\\\")},zE.prototype.dispose=function(){console.error(\\\\\\\"THREE.Scene: .dispose() has been removed.\\\\\\\")},QN.prototype.onUpdate=function(){return console.warn(\\\\\\\"THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.\\\\\\\"),this},Object.defineProperties(Vw.prototype,{wrapAround:{get:function(){console.warn(\\\\\\\"THREE.Material: .wrapAround has been removed.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.Material: .wrapAround has been removed.\\\\\\\")}},overdraw:{get:function(){console.warn(\\\\\\\"THREE.Material: .overdraw has been removed.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.Material: .overdraw has been removed.\\\\\\\")}},wrapRGB:{get:function(){return console.warn(\\\\\\\"THREE.Material: .wrapRGB has been removed.\\\\\\\"),new $w}},shading:{get:function(){console.error(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\")},set:function(t){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\"),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .stencilMask has been removed. Use .stencilFuncMask instead.\\\\\\\"),this.stencilFuncMask},set:function(t){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .stencilMask has been removed. Use .stencilFuncMask instead.\\\\\\\"),this.stencilFuncMask=t}},vertexTangents:{get:function(){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .vertexTangents has been removed.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .vertexTangents has been removed.\\\\\\\")}}}),Object.defineProperties(IT.prototype,{derivatives:{get:function(){return console.warn(\\\\\\\"THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\\\\\\\"),this.extensions.derivatives},set:function(t){console.warn(\\\\\\\"THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\\\\\\\"),this.extensions.derivatives=t}}}),FE.prototype.clearTarget=function(t,e,n,i){console.warn(\\\\\\\"THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.\\\\\\\"),this.setRenderTarget(t),this.clear(e,n,i)},FE.prototype.animate=function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .animate() is now .setAnimationLoop().\\\\\\\"),this.setAnimationLoop(t)},FE.prototype.getCurrentRenderTarget=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().\\\\\\\"),this.getRenderTarget()},FE.prototype.getMaxAnisotropy=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().\\\\\\\"),this.capabilities.getMaxAnisotropy()},FE.prototype.getPrecision=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.\\\\\\\"),this.capabilities.precision},FE.prototype.resetGLState=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .resetGLState() is now .state.reset().\\\\\\\"),this.state.reset()},FE.prototype.supportsFloatTextures=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).\\\\\\\"),this.extensions.get(\\\\\\\"OES_texture_float\\\\\\\")},FE.prototype.supportsHalfFloatTextures=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).\\\\\\\"),this.extensions.get(\\\\\\\"OES_texture_half_float\\\\\\\")},FE.prototype.supportsStandardDerivatives=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).\\\\\\\"),this.extensions.get(\\\\\\\"OES_standard_derivatives\\\\\\\")},FE.prototype.supportsCompressedTextureS3TC=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).\\\\\\\"),this.extensions.get(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\")},FE.prototype.supportsCompressedTexturePVRTC=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).\\\\\\\"),this.extensions.get(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\")},FE.prototype.supportsBlendMinMax=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).\\\\\\\"),this.extensions.get(\\\\\\\"EXT_blend_minmax\\\\\\\")},FE.prototype.supportsVertexTextures=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.\\\\\\\"),this.capabilities.vertexTextures},FE.prototype.supportsInstancedArrays=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).\\\\\\\"),this.extensions.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\")},FE.prototype.enableScissorTest=function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().\\\\\\\"),this.setScissorTest(t)},FE.prototype.initMaterial=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .initMaterial() has been removed.\\\\\\\")},FE.prototype.addPrePlugin=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .addPrePlugin() has been removed.\\\\\\\")},FE.prototype.addPostPlugin=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .addPostPlugin() has been removed.\\\\\\\")},FE.prototype.updateShadowMap=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .updateShadowMap() has been removed.\\\\\\\")},FE.prototype.setFaceCulling=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .setFaceCulling() has been removed.\\\\\\\")},FE.prototype.allocTextureUnit=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .allocTextureUnit() has been removed.\\\\\\\")},FE.prototype.setTexture=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .setTexture() has been removed.\\\\\\\")},FE.prototype.setTexture2D=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .setTexture2D() has been removed.\\\\\\\")},FE.prototype.setTextureCube=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .setTextureCube() has been removed.\\\\\\\")},FE.prototype.getActiveMipMapLevel=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().\\\\\\\"),this.getActiveMipmapLevel()},Object.defineProperties(FE.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.\\\\\\\"),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.\\\\\\\"),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\\\\\\\")}},context:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.\\\\\\\"),this.getContext()}},vr:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .vr has been renamed to .xr\\\\\\\"),this.xr}},gammaInput:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\\\\\\\"),!1},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\\\\\\\")}},gammaOutput:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\\\\\\\"),!1},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\\\\\\\"),this.outputEncoding=!0===t?Xx:qx}},toneMappingWhitePoint:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\\\\\\\"),1},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\\\\\\\")}}}),Object.defineProperties(ME.prototype,{cullFace:{get:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\\\\\\\")}},renderReverseSided:{get:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\\\\\\\")}},renderSingleSided:{get:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\\\\\\\")}}}),Object.defineProperties(Ab.prototype,{wrapS:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\\\\\\\"),this.texture.wrapS},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\\\\\\\"),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\\\\\\\"),this.texture.wrapT},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\\\\\\\"),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\\\\\\\"),this.texture.magFilter},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\\\\\\\"),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\\\\\\\"),this.texture.minFilter},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\\\\\\\"),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\\\\\\\"),this.texture.anisotropy},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\\\\\\\"),this.texture.anisotropy=t}},offset:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\\\\\\\"),this.texture.offset},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\\\\\\\"),this.texture.offset=t}},repeat:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\\\\\\\"),this.texture.repeat},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\\\\\\\"),this.texture.repeat=t}},format:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .format is now .texture.format.\\\\\\\"),this.texture.format},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .format is now .texture.format.\\\\\\\"),this.texture.format=t}},type:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .type is now .texture.type.\\\\\\\"),this.texture.type},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .type is now .texture.type.\\\\\\\"),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\\\\\\\"),this.texture.generateMipmaps},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\\\\\\\"),this.texture.generateMipmaps=t}}}),kN.prototype.load=function(t){console.warn(\\\\\\\"THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.\\\\\\\");const e=this;return(new zN).load(t,(function(t){e.setBuffer(t)})),this},zT.prototype.updateCubeMap=function(t,e){return console.warn(\\\\\\\"THREE.CubeCamera: .updateCubeMap() is now .update().\\\\\\\"),this.update(t,e)},zT.prototype.clear=function(t,e,n,i){return console.warn(\\\\\\\"THREE.CubeCamera: .clear() is now .renderTarget.clear().\\\\\\\"),this.renderTarget.clear(t,e,n,i)},yb.crossOrigin=void 0,yb.loadTexture=function(t,e,n,i){console.warn(\\\\\\\"THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.\\\\\\\");const s=new _N;s.setCrossOrigin(this.crossOrigin);const r=s.load(t,n,void 0,i);return e&&(r.mapping=e),r},yb.loadTextureCube=function(t,e,n,i){console.warn(\\\\\\\"THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.\\\\\\\");const s=new pN;s.setCrossOrigin(this.crossOrigin);const r=s.load(t,n,void 0,i);return e&&(r.mapping=e),r},yb.loadCompressedTexture=function(){console.error(\\\\\\\"THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.\\\\\\\")},yb.loadCompressedTextureCube=function(){console.error(\\\\\\\"THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.\\\\\\\")};\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"register\\\\\\\",{detail:{revision:\\\\\\\"133\\\\\\\"}})),\\\\\\\"undefined\\\\\\\"!=typeof window&&(window.__THREE__?console.warn(\\\\\\\"WARNING: Multiple instances of Three.js being imported.\\\\\\\"):window.__THREE__=\\\\\\\"133\\\\\\\");const hL=new Sb,uL=new Sb,dL=new Sb;class pL{constructor(t=new Sb(0,0,0),e=new Sb(0,1,0),n=1){this.start=t,this.end=e,this.radius=n}clone(){return new pL(this.start.clone(),this.end.clone(),this.radius)}set(t,e,n){this.start.copy(t),this.end.copy(e),this.radius=n}copy(t){this.start.copy(t.start),this.end.copy(t.end),this.radius=t.radius}getCenter(t){return t.copy(this.end).add(this.start).multiplyScalar(.5)}translate(t){this.start.add(t),this.end.add(t)}checkAABBAxis(t,e,n,i,s,r,o,a,l){return(s-t<l||s-n<l)&&(t-r<l||n-r<l)&&(o-e<l||o-i<l)&&(e-a<l||i-a<l)}intersectsBox(t){return this.checkAABBAxis(this.start.x,this.start.y,this.end.x,this.end.y,t.min.x,t.max.x,t.min.y,t.max.y,this.radius)&&this.checkAABBAxis(this.start.x,this.start.z,this.end.x,this.end.z,t.min.x,t.max.x,t.min.z,t.max.z,this.radius)&&this.checkAABBAxis(this.start.y,this.start.z,this.end.y,this.end.z,t.min.y,t.max.y,t.min.z,t.max.z,this.radius)}lineLineMinimumPoints(t,e){const n=hL.copy(t.end).sub(t.start),i=uL.copy(e.end).sub(e.start),s=dL.copy(e.start).sub(t.start),r=n.dot(i),o=n.dot(n),a=i.dot(i),l=i.dot(s),c=n.dot(s);let h,u;const d=o*a-r*r;if(Math.abs(d)<1e-10){const t=-l/a,e=(r-l)/a;Math.abs(t-.5)<Math.abs(e-.5)?(h=0,u=t):(h=1,u=e)}else h=(l*r+c*a)/d,u=(h*r-l)/a;u=Math.max(0,Math.min(1,u)),h=Math.max(0,Math.min(1,h));return[n.multiplyScalar(h).add(t.start),i.multiplyScalar(u).add(e.start)]}}const _L=new Sb,mL=new Sb,fL=new jT,gL=new sL,vL=new sL,yL=new $b,xL=new pL;class bL{constructor(t){this.triangles=[],this.box=t,this.subTrees=[]}addTriangle(t){return this.bounds||(this.bounds=new Lb),this.bounds.min.x=Math.min(this.bounds.min.x,t.a.x,t.b.x,t.c.x),this.bounds.min.y=Math.min(this.bounds.min.y,t.a.y,t.b.y,t.c.y),this.bounds.min.z=Math.min(this.bounds.min.z,t.a.z,t.b.z,t.c.z),this.bounds.max.x=Math.max(this.bounds.max.x,t.a.x,t.b.x,t.c.x),this.bounds.max.y=Math.max(this.bounds.max.y,t.a.y,t.b.y,t.c.y),this.bounds.max.z=Math.max(this.bounds.max.z,t.a.z,t.b.z,t.c.z),this.triangles.push(t),this}calcBox(){return this.box=this.bounds.clone(),this.box.min.x-=.01,this.box.min.y-=.01,this.box.min.z-=.01,this}split(t){if(!this.box)return;const e=[],n=mL.copy(this.box.max).sub(this.box.min).multiplyScalar(.5);for(let t=0;t<2;t++)for(let i=0;i<2;i++)for(let s=0;s<2;s++){const r=new Lb,o=_L.set(t,i,s);r.min.copy(this.box.min).add(o.multiply(n)),r.max.copy(r.min).add(n),e.push(new bL(r))}let i;for(;i=this.triangles.pop();)for(let t=0;t<e.length;t++)e[t].box.intersectsTriangle(i)&&e[t].triangles.push(i);for(let n=0;n<e.length;n++){const i=e[n].triangles.length;i>8&&t<16&&e[n].split(t+1),0!==i&&this.subTrees.push(e[n])}return this}build(){return this.calcBox(),this.split(0),this}getRayTriangles(t,e){for(let n=0;n<this.subTrees.length;n++){const i=this.subTrees[n];if(t.intersectsBox(i.box))if(i.triangles.length>0)for(let t=0;t<i.triangles.length;t++)-1===e.indexOf(i.triangles[t])&&e.push(i.triangles[t]);else i.getRayTriangles(t,e)}return e}triangleCapsuleIntersect(t,e){e.getPlane(fL);const n=fL.distanceToPoint(t.start)-t.radius,i=fL.distanceToPoint(t.end)-t.radius;if(n>0&&i>0||n<-t.radius&&i<-t.radius)return!1;const s=Math.abs(n/(Math.abs(n)+Math.abs(i))),r=_L.copy(t.start).lerp(t.end,s);if(e.containsPoint(r))return{normal:fL.normal.clone(),point:r.clone(),depth:Math.abs(Math.min(n,i))};const o=t.radius*t.radius,a=gL.set(t.start,t.end),l=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let e=0;e<l.length;e++){const n=vL.set(l[e][0],l[e][1]),[i,s]=t.lineLineMinimumPoints(a,n);if(i.distanceToSquared(s)<o)return{normal:i.clone().sub(s).normalize(),point:s.clone(),depth:t.radius-i.distanceTo(s)}}return!1}triangleSphereIntersect(t,e){if(e.getPlane(fL),!t.intersectsPlane(fL))return!1;const n=Math.abs(fL.distanceToSphere(t)),i=t.radius*t.radius-n*n,s=fL.projectPoint(t.center,_L);if(e.containsPoint(t.center))return{normal:fL.normal.clone(),point:s.clone(),depth:Math.abs(fL.distanceToSphere(t))};const r=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let e=0;e<r.length;e++){gL.set(r[e][0],r[e][1]),gL.closestPointToPoint(s,!0,mL);const n=mL.distanceToSquared(t.center);if(n<i)return{normal:t.center.clone().sub(mL).normalize(),point:mL.clone(),depth:t.radius-Math.sqrt(n)}}return!1}getSphereTriangles(t,e){for(let n=0;n<this.subTrees.length;n++){const i=this.subTrees[n];if(t.intersectsBox(i.box))if(i.triangles.length>0)for(let t=0;t<i.triangles.length;t++)-1===e.indexOf(i.triangles[t])&&e.push(i.triangles[t]);else i.getSphereTriangles(t,e)}}getCapsuleTriangles(t,e){for(let n=0;n<this.subTrees.length;n++){const i=this.subTrees[n];if(t.intersectsBox(i.box))if(i.triangles.length>0)for(let t=0;t<i.triangles.length;t++)-1===e.indexOf(i.triangles[t])&&e.push(i.triangles[t]);else i.getCapsuleTriangles(t,e)}}sphereIntersect(t){yL.copy(t);const e=[];let n,i=!1;this.getSphereTriangles(t,e);for(let t=0;t<e.length;t++)(n=this.triangleSphereIntersect(yL,e[t]))&&(i=!0,yL.center.add(n.normal.multiplyScalar(n.depth)));if(i){const e=yL.center.clone().sub(t.center),n=e.length();return{normal:e.normalize(),depth:n}}return!1}capsuleIntersect(t){xL.copy(t);const e=[];let n,i=!1;this.getCapsuleTriangles(xL,e);for(let t=0;t<e.length;t++)(n=this.triangleCapsuleIntersect(xL,e[t]))&&(i=!0,xL.translate(n.normal.multiplyScalar(n.depth)));if(i){const e=xL.getCenter(new Sb).sub(t.getCenter(_L)),n=e.length();return{normal:e.normalize(),depth:n}}return!1}rayIntersect(t){if(0===t.direction.length())return;const e=[];let n,i,s=1e100;this.getRayTriangles(t,e);for(let r=0;r<e.length;r++){const o=t.intersectTriangle(e[r].a,e[r].b,e[r].c,!0,_L);if(o){const a=o.sub(t.origin).length();s>a&&(i=o.clone().add(t.origin),s=a,n=e[r])}}return s<1e100&&{distance:s,triangle:n,position:i}}fromGraphNode(t){return t.updateWorldMatrix(!0,!0),t.traverse((t=>{if(!0===t.isMesh){let e,n=!1;null!==t.geometry.index?(n=!0,e=t.geometry.toNonIndexed()):e=t.geometry;const i=e.getAttribute(\\\\\\\"position\\\\\\\");for(let e=0;e<i.count;e+=3){const n=(new Sb).fromBufferAttribute(i,e),s=(new Sb).fromBufferAttribute(i,e+1),r=(new Sb).fromBufferAttribute(i,e+2);n.applyMatrix4(t.matrixWorld),s.applyMatrix4(t.matrixWorld),r.applyMatrix4(t.matrixWorld),this.addTriangle(new Uw(n,s,r))}n&&e.dispose()}})),this.build(),this}}class wL{constructor(t){this._object=t,this._octree=new bL,this._capsuleHeight=new p.a(0,1,0),this._capsule=new pL(new p.a(0,.35,0),new p.a(0,1,0),.6),this._octree.fromGraphNode(this._object)}setCapsule(t){this._capsule.copy(t),this._capsuleHeight.copy(t.end).sub(t.start)}testPosition(t){return this._capsule.end.copy(t),this._capsule.start.copy(t).sub(this._capsuleHeight),this._octree.capsuleIntersect(this._capsule)}}class TL extends J.a{setCheckCollisions(t){if(t){let e;t.traverse((t=>{if(!e){const n=t;n.geometry&&(e=n)}})),e?this._playerCollisionController=new wL(e):console.error(\\\\\\\"no geo found in\\\\\\\",t)}else this._playerCollisionController=void 0}setCollisionCapsule(t){var e;null===(e=this._playerCollisionController)||void 0===e||e.setCapsule(t)}setJumpParams(t){}setGravity(t){}setPlayerMass(t){}}const AL={rotateSpeed:1,rotationRange:{min:.25*-Math.PI,max:.25*Math.PI}},ML={type:\\\\\\\"change\\\\\\\"},EL=new p.a,SL=new uy;class CL extends TL{constructor(t,e,n){super(),this._camera=t,this.domElement=e,this.player=n,this.translationData={direction:new p.a},this.rotationData={direction:{x:0,y:0}},this._boundMethods={onRotateStart:this._onRotateStart.bind(this),onRotateMove:this._onRotateMove.bind(this),onRotateEnd:this._onRotateEnd.bind(this),onTranslateStart:this._onTranslateStart.bind(this),onTranslateMove:this._onTranslateMove.bind(this),onTranslateEnd:this._onTranslateEnd.bind(this),onJump:this._onJump.bind(this),onRunToggle:this._onRunToggle.bind(this)},this._startCameraRotation=new ny.a,this._rotationSpeed=AL.rotateSpeed,this._rotationRange={min:AL.rotationRange.min,max:AL.rotationRange.max},this._azimuthalAngle=0,this.vLeft=new p.a,this.vRight=new p.a,this.vTop=new p.a,this.vBottom=new p.a,this.angleY=0,this.angleX=0,this._rotationStartPosition=new d.a,this._rotationMovePosition=new d.a,this._rotationDelta=new d.a,this._startCameraPosition=new p.a,this._translationStartPosition=new d.a,this._translationMovePosition=new d.a,this._translationDelta=new d.a,this._camera.rotation.order=\\\\\\\"ZYX\\\\\\\",this._translateDomElement=this._createTranslateDomElement(),this._translateDomElementRect=this._translateDomElement.getBoundingClientRect(),this._runDomElement=this._createRunDomElement(),this._jumpDomElement=this._createJumpDomElement(),this._addElements(),this._addEvents()}dispose(){this._removeEvents(),this._removeElements(),this.updateElements()}_createTranslateDomElement(){const t=this.domElement.getBoundingClientRect(),e=Math.min(t.width,t.height),n=Math.round(.4*e),i=Math.round(.1*e),s=document.createElement(\\\\\\\"div\\\\\\\");return s.id=\\\\\\\"MobileJoystickControls-translate\\\\\\\",s.style.width=`${n}px`,s.style.height=s.style.width,s.style.border=\\\\\\\"1px solid black\\\\\\\",s.style.borderRadius=`${n}px`,s.style.position=\\\\\\\"absolute\\\\\\\",s.style.bottom=`${i}px`,s.style.left=`${i}px`,s}_jumpDomElementSize(){const t=this.domElement.getBoundingClientRect(),e=Math.min(t.width,t.height);return{size:Math.round(.2*e),margin:Math.round(.05*e)}}_createJumpDomElement(){const{size:t,margin:e}=this._jumpDomElementSize(),n=document.createElement(\\\\\\\"div\\\\\\\");n.id=\\\\\\\"MobileJoystickControls-jump\\\\\\\",n.style.width=`${t}px`;const i=Math.floor(t);return n.style.height=`${i}px`,n.style.border=\\\\\\\"1px solid black\\\\\\\",n.style.position=\\\\\\\"absolute\\\\\\\",n.style.bottom=`${2*e+parseInt(this._runDomElement.style.height)}px`,n.style.right=`${e}px`,n.style.borderRadius=`${i}px`,n}_createRunDomElement(){const t=document.createElement(\\\\\\\"div\\\\\\\"),e=this.domElement.getBoundingClientRect(),n=Math.min(e.width,e.height),i=Math.round(.2*n),s=Math.round(.05*n);return t.id=\\\\\\\"MobileJoystickControls-run\\\\\\\",t.style.width=`${i}px`,t.style.height=`${Math.floor(i)}px`,t.style.border=\\\\\\\"1px solid black\\\\\\\",t.style.position=\\\\\\\"absolute\\\\\\\",t.style.bottom=`${s}px`,t.style.right=`${s}px`,t.style.translate=\\\\\\\"-50%\\\\\\\",t}_addElements(){var t,e,n;null===(t=this.domElement.parentElement)||void 0===t||t.append(this._translateDomElement),null===(e=this.domElement.parentElement)||void 0===e||e.append(this._jumpDomElement),null===(n=this.domElement.parentElement)||void 0===n||n.append(this._runDomElement)}_removeElements(){var t;const e=[this._translateDomElement,this._jumpDomElement,this._runDomElement];for(let n of e)null===(t=n.parentElement)||void 0===t||t.removeChild(n)}updateElements(){this.player&&(this._jumpDomElement.style.display=this.player.jumpAllowed?\\\\\\\"block\\\\\\\":\\\\\\\"none\\\\\\\",this._runDomElement.style.display=this.player.runAllowed?\\\\\\\"block\\\\\\\":\\\\\\\"none\\\\\\\")}_addEvents(){xv.disableContextMenu(),this.domElement.addEventListener(\\\\\\\"touchstart\\\\\\\",this._boundMethods.onRotateStart),this.domElement.addEventListener(\\\\\\\"touchmove\\\\\\\",this._boundMethods.onRotateMove),this.domElement.addEventListener(\\\\\\\"touchend\\\\\\\",this._boundMethods.onRotateEnd),this._translateDomElement.addEventListener(\\\\\\\"touchstart\\\\\\\",this._boundMethods.onTranslateStart),this._translateDomElement.addEventListener(\\\\\\\"touchmove\\\\\\\",this._boundMethods.onTranslateMove),this._translateDomElement.addEventListener(\\\\\\\"touchend\\\\\\\",this._boundMethods.onTranslateEnd),this._jumpDomElement.addEventListener(\\\\\\\"pointerdown\\\\\\\",this._boundMethods.onJump),this._runDomElement.addEventListener(\\\\\\\"pointerdown\\\\\\\",this._boundMethods.onRunToggle)}_removeEvents(){xv.reEstablishContextMenu(),this.domElement.removeEventListener(\\\\\\\"touchstart\\\\\\\",this._boundMethods.onRotateStart),this.domElement.removeEventListener(\\\\\\\"touchmove\\\\\\\",this._boundMethods.onRotateMove),this.domElement.removeEventListener(\\\\\\\"touchend\\\\\\\",this._boundMethods.onRotateEnd),this._translateDomElement.removeEventListener(\\\\\\\"touchstart\\\\\\\",this._boundMethods.onTranslateStart),this._translateDomElement.removeEventListener(\\\\\\\"touchmove\\\\\\\",this._boundMethods.onTranslateMove),this._translateDomElement.removeEventListener(\\\\\\\"touchend\\\\\\\",this._boundMethods.onTranslateEnd),this._jumpDomElement.removeEventListener(\\\\\\\"pointerdown\\\\\\\",this._boundMethods.onJump),this._runDomElement.removeEventListener(\\\\\\\"pointerdown\\\\\\\",this._boundMethods.onRunToggle)}setRotationSpeed(t){this._rotationSpeed=t}setRotationRange(t){this._rotationRange.min=t.min,this._rotationRange.max=t.max}_onRotateStart(t){this._startCameraRotation.copy(this._camera.rotation);const e=this._getTouch(t,this.domElement);e&&(this._rotationStartPosition.set(e.clientX,e.clientY),this.vLeft.set(-1,0,.5),this.vRight.set(1,0,.5),[this.vLeft,this.vRight].forEach((t=>{t.unproject(this._camera),this._camera.worldToLocal(t)})),this.angleY=this.vLeft.angleTo(this.vRight),this.vTop.set(0,1,.5),this.vBottom.set(0,-1,.5),[this.vTop,this.vBottom].forEach((t=>{t.unproject(this._camera),this._camera.worldToLocal(t)})),this.angleX=this.vTop.angleTo(this.vBottom))}_onRotateMove(t){const e=this._getTouch(t,this.domElement);e&&(this._rotationMovePosition.set(e.clientX,e.clientY),this._rotationDelta.copy(this._rotationMovePosition).sub(this._rotationStartPosition),this.rotationData.direction.x=this._rotationDelta.x/this.domElement.clientWidth,this.rotationData.direction.y=this._rotationDelta.y/this.domElement.clientHeight,this._rotateCamera(this.rotationData))}_onRotateEnd(){this.rotationData.direction.x=0,this.rotationData.direction.y=0}_rotateCamera(t){let e=this.angleY*t.direction.x*this._rotationSpeed;this._camera.rotation.y=this._startCameraRotation.y+-e;let n=this.angleX*t.direction.y*this._rotationSpeed;this._camera.rotation.x=or.clamp(this._startCameraRotation.x+-n,this._rotationRange.min,this._rotationRange.max),this._computeAzimuthalAngle(),this.dispatchEvent(ML)}_computeAzimuthalAngle(){this._camera.updateMatrixWorld(),EL.set(0,0,1),this._camera.localToWorld(EL),EL.sub(this._camera.position),SL.setFromVector3(EL),this._azimuthalAngle=SL.theta}_onTranslateStart(t){this._startCameraPosition.copy(this._camera.position);if(!this._getTouch(t,this._translateDomElement))return;this._translateDomElementRect=this._translateDomElement.getBoundingClientRect();const e=this._translateDomElementRect.left+.5*this._translateDomElementRect.width,n=this._translateDomElementRect.top+.5*this._translateDomElementRect.height;this._translationStartPosition.set(e,n)}_onTranslateMove(t){const e=this._getTouch(t,this._translateDomElement);e&&(this._translationMovePosition.set(e.clientX,e.clientY),this._translationDelta.copy(this._translationMovePosition).sub(this._translationStartPosition),this.translationData.direction.x=this._translationDelta.x/this._translateDomElementRect.width*.5,this.translationData.direction.z=-this._translationDelta.y/this._translateDomElementRect.height*.5,this._updatePlayerTranslate(),this.dispatchEvent(ML))}_onTranslateEnd(){this.translationData.direction.x=0,this.translationData.direction.z=0,this._updatePlayerTranslate()}_updatePlayerTranslate(){if(!this.player)return;const t=this.translationData.direction;this.player.setForward(!1),this.player.setBackward(!1),this.player.setLeft(!1),this.player.setRight(!1);const e=Math.abs(t.x),n=Math.abs(t.z),i=n-e;function s(e){t.z>0&&e.setForward(!0),t.z<0&&e.setBackward(!0)}function r(e){t.x>0&&e.setRight(!0),t.x<0&&e.setLeft(!0)}i>0?(s(this.player),i<.5*n&&r(this.player)):(r(this.player),i<.5*e&&s(this.player))}_onJump(){var t;null===(t=this.player)||void 0===t||t.jump()}_onRunToggle(){if(!this.player)return;const t=this.player.running();this.player.setRun(!t);const e=this.player.running()?3:1;this._runDomElement.style.border=`${e}px solid black`}update(t){this.player&&(this.player.setAzimuthalAngle(this._azimuthalAngle),this.player.update(t))}_getTouch(t,e){for(let n=0;n<t.touches.length;n++){const i=t.touches[n];if(i.target===e)return i}}}const NL=\\\\\\\"start\\\\\\\",LL=\\\\\\\"change\\\\\\\",OL=\\\\\\\"end\\\\\\\";function PL(){return{cook:!1,callback:t=>{IL.PARAM_CALLBACK_updatePlayerParams(t)}}}const RL=new class extends ua{constructor(){super(...arguments),this.main=ha.FOLDER(),this.colliderObject=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.SOP},dependentOnFoundNode:!1,callback:t=>{IL.PARAM_CALLBACK_updateCollider(t)}}),this.capsuleRadius=ha.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!1],...PL()}),this.capsuleHeight=ha.FLOAT(1,{range:[0,2],rangeLocked:[!0,!1],...PL()}),this.physics=ha.FOLDER(),this.physicsSteps=ha.INTEGER(5,{range:[1,10],rangeLocked:[!0,!1],...PL()}),this.gravity=ha.VECTOR3([0,-30,0],{...PL()}),this.translateSpeed=ha.FLOAT(1),this.rotateSpeed=ha.FLOAT(AL.rotateSpeed),this.jumpAllowed=ha.BOOLEAN(!0,{...PL()}),this.jumpStrength=ha.FLOAT(10,{range:[0,100],rangeLocked:[!0,!1],...PL()}),this.runAllowed=ha.BOOLEAN(!0,{...PL()}),this.runSpeedMult=ha.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],...PL()}),this.updateCollider=ha.BUTTON(null,{callback:t=>{IL.PARAM_CALLBACK_updateCollider(t)}}),this.init=ha.FOLDER(),this.startPosition=ha.VECTOR3([0,2,0],{...PL()}),this.startRotation=ha.VECTOR3([0,0,0],{...PL()}),this.reset=ha.BUTTON(null,{callback:t=>{IL.PARAM_CALLBACK_resetPlayer(t)}}),this.minPolarAngle=ha.FLOAT(\\\\\\\"-$PI*0.5\\\\\\\",{range:[-Math.PI,Math.PI],rangeLocked:[!0,!0]}),this.maxPolarAngle=ha.FLOAT(\\\\\\\"$PI*0.5\\\\\\\",{range:[-Math.PI,Math.PI],rangeLocked:[!0,!0]})}};class IL extends ey{constructor(){super(...arguments),this.paramsConfig=RL,this._controls_by_element_id=new Map}static type(){return _s.MOBILE_JOYSTICK}endEventName(){return\\\\\\\"end\\\\\\\"}collisionController(){return this._collisionController=this._collisionController||new tx(this)}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(IL.INPUT_UPDATE_COLLIDER,Qo.BASE,this._updateCollider.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(NL,Qo.BASE),new ta(LL,Qo.BASE),new ta(OL,Qo.BASE)])}async createControlsInstance(t,e){await this._initPlayer(t);const n=new CL(t,e,this._player);return this._controls_by_element_id.set(e.id,n),this._bind_listeners_to_controls_instance(n),n}async _initPlayer(t){this._player=this._player||await this._createPlayer(t),this._player&&(this._updatePlayerParams(),this._player.reset())}player(){return this._player}async _updatePlayerParams(){this._player&&(this._player.startPosition.copy(this.pv.startPosition),this._player.physicsSteps=this.pv.physicsSteps,this._player.jumpAllowed=this.pv.jumpAllowed,this._player.jumpStrength=this.pv.jumpStrength,this._player.runAllowed=this.pv.runAllowed,this._player.runSpeedMult=this.pv.runSpeedMult,this._player.gravity.copy(this.pv.gravity),this._player.speed=this.pv.translateSpeed,this._player.setCapsule({radius:this.pv.capsuleRadius,height:this.pv.capsuleHeight}),this._controls_by_element_id.forEach((t=>t.updateElements())))}async _createPlayer(t){const e=t,n=await this.collisionController().getCollider();if(!n)return void this.states.error.set(\\\\\\\"invalid collider\\\\\\\");return new $y({object:e,collider:n})}_resetPlayer(){var t;null===(t=this._player)||void 0===t||t.reset()}async _updateCollider(){await this.collisionController().updateCollider()}_bind_listeners_to_controls_instance(t){t.addEventListener(NL,(()=>{this.dispatchEventToOutput(NL,{})})),t.addEventListener(LL,(()=>{this.dispatchEventToOutput(LL,{})})),t.addEventListener(OL,(()=>{this.dispatchEventToOutput(OL,{})}))}updateRequired(){return!0}setupControls(t){t.setRotationSpeed(this.pv.rotateSpeed),t.setRotationRange({min:this.pv.minPolarAngle,max:this.pv.maxPolarAngle}),t.updateElements()}disposeControlsForHtmlElementId(t){this._controls_by_element_id.get(t)&&this._controls_by_element_id.delete(t)}static PARAM_CALLBACK_updateCollider(t){t._updateCollider()}static PARAM_CALLBACK_updatePlayerParams(t){t._updatePlayerParams()}static PARAM_CALLBACK_resetPlayer(t){t._resetPlayer()}}var FL;IL.INPUT_UPDATE_COLLIDER=\\\\\\\"updateCollider\\\\\\\",function(t){t.ALL_TOGETHER=\\\\\\\"all together\\\\\\\",t.BATCH=\\\\\\\"batch\\\\\\\"}(FL||(FL={}));const DL=[FL.ALL_TOGETHER,FL.BATCH];const BL=new class extends ua{constructor(){super(...arguments),this.mask=ha.STRING(\\\\\\\"/geo*\\\\\\\",{callback:t=>{zL.PARAM_CALLBACK_updateResolvedNodes(t)}}),this.force=ha.BOOLEAN(0),this.cookMode=ha.INTEGER(DL.indexOf(FL.ALL_TOGETHER),{menu:{entries:DL.map(((t,e)=>({name:t,value:e})))}}),this.batchSize=ha.INTEGER(1,{visibleIf:{cookMode:DL.indexOf(FL.BATCH)},separatorAfter:!0}),this.registerOnlyFirstCooks=ha.BOOLEAN(!0),this.updateResolve=ha.BUTTON(null,{callback:(t,e)=>{zL.PARAM_CALLBACK_updateResolve(t)}}),this.printResolve=ha.BUTTON(null,{callback:(t,e)=>{zL.PARAM_CALLBACK_printResolve(t)}})}};class zL extends Va{constructor(){super(...arguments),this.paramsConfig=BL,this._resolvedNodes=[],this._dispatchedFirstNodeCooked=!1,this._dispatchedAllNodesCooked=!1,this._cookStateByNodeId=new Map}static type(){return\\\\\\\"nodeCook\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(zL.INPUT_TRIGGER,Qo.BASE,this.processEventTrigger.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(zL.OUTPUT_FIRST_NODE,Qo.BASE),new ta(zL.OUTPUT_EACH_NODE,Qo.BASE),new ta(zL.OUTPUT_ALL_NODES,Qo.BASE)])}trigger(){this.processEventTrigger({})}cook(){this._updateResolvedNodes(),this.cookController.endCook()}dispose(){super.dispose(),this._reset()}resolvedNodes(){return this._resolvedNodes}processEventTrigger(t){this._cook_nodes_with_mode()}_cook_nodes_with_mode(){this._updateResolvedNodes();const t=DL[this.pv.cookMode];switch(t){case FL.ALL_TOGETHER:return this._cookNodesAllTogether();case FL.BATCH:return this._cookNodesInBatch()}os.unreachable(t)}_cookNodesAllTogether(){this._cookNodes(this._resolvedNodes)}async _cookNodesInBatch(){const t=this.pv.batchSize,e=Math.ceil(this._resolvedNodes.length/t);for(let n=0;n<e;n++){const e=n*t,i=(n+1)*t,s=this._resolvedNodes.slice(e,i);await this._cookNodes(s)}}async _cookNodes(t){const e=[];for(let n of t)e.push(this._cookNode(n));return await Promise.all(e)}_cookNode(t){return this.pv.force&&t.setDirty(this),t.compute()}static PARAM_CALLBACK_updateResolvedNodes(t){t._updateResolvedNodes()}_updateResolvedNodes(){this._reset(),this._resolvedNodes=this.scene().nodesController.nodesFromMask(this.pv.mask||\\\\\\\"\\\\\\\");for(let t of this._resolvedNodes)t.cookController.registerOnCookEnd(this._callbackNameForNode(t),(()=>{this._onNodeCookComplete(t)})),this._cookStateByNodeId.set(t.graphNodeId(),!1)}_callbackNameForNode(t){return`owner-${this.graphNodeId()}-target-${t.graphNodeId()}`}_reset(){this._dispatchedFirstNodeCooked=!1,this._cookStateByNodeId.clear();for(let t of this._resolvedNodes)t.cookController.deregisterOnCookEnd(this._callbackNameForNode(t));this._resolvedNodes=[]}_allNodesHaveCooked(){for(let t of this._resolvedNodes){if(!this._cookStateByNodeId.get(t.graphNodeId()))return!1}return!0}_onNodeCookComplete(t){const e={value:{node:t}};this._dispatchedFirstNodeCooked||(this._dispatchedFirstNodeCooked=!0,this.dispatchEventToOutput(zL.OUTPUT_FIRST_NODE,e));this._cookStateByNodeId.get(t.graphNodeId())&&this.pv.registerOnlyFirstCooks||this.dispatchEventToOutput(zL.OUTPUT_EACH_NODE,e),this._cookStateByNodeId.set(t.graphNodeId(),!0),this._dispatchedAllNodesCooked||this._allNodesHaveCooked()&&(this._dispatchedAllNodesCooked=!0,this.dispatchEventToOutput(zL.OUTPUT_ALL_NODES,{}))}static PARAM_CALLBACK_updateResolve(t){t._allNodesHaveCooked()}static PARAM_CALLBACK_printResolve(t){t.printResolve()}printResolve(){console.log(this._resolvedNodes)}}var kL,UL;zL.INPUT_TRIGGER=\\\\\\\"trigger\\\\\\\",zL.OUTPUT_FIRST_NODE=\\\\\\\"first\\\\\\\",zL.OUTPUT_EACH_NODE=\\\\\\\"each\\\\\\\",zL.OUTPUT_ALL_NODES=\\\\\\\"all\\\\\\\",function(t){t.TRIGGER=\\\\\\\"trigger\\\\\\\"}(kL||(kL={})),function(t){t.OUT=\\\\\\\"out\\\\\\\"}(UL||(UL={}));const GL=new class extends ua{};class VL extends Va{constructor(){super(...arguments),this.paramsConfig=GL}static type(){return\\\\\\\"null\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(kL.TRIGGER,Qo.BASE,this.processEventTrigger.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(UL.OUT,Qo.BASE)])}processEvent(t){}processEventTrigger(t){this.dispatchEventToOutput(UL.OUT,t)}}const HL=\\\\\\\"init\\\\\\\",jL=\\\\\\\"dispose\\\\\\\",WL=\\\\\\\"reset\\\\\\\";function qL(){return{callback:t=>{ZL.PARAM_CALLBACK_updatePlayerParams(t)}}}const XL=new p.a,YL=new p.a,$L=new uy;const JL=new class extends ua{constructor(){super(...arguments),this.main=ha.FOLDER(),this.playerObject=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.OBJ}}),this.colliderObject=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.SOP},dependentOnFoundNode:!1,callback:t=>{ZL.PARAM_CALLBACK_updateCollider(t)}}),this.camera=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{types:[is.PERSPECTIVE,is.ORTHOGRAPHIC],context:ts.OBJ}}),this.initPlayer=ha.BUTTON(null,{callback:t=>{ZL.PARAM_CALLBACK_initPlayer(t)}}),this.capsuleRadius=ha.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!1],...qL()}),this.capsuleHeight=ha.FLOAT(1,{range:[0,2],rangeLocked:[!0,!1],...qL()}),this.physics=ha.FOLDER(),this.physicsSteps=ha.INTEGER(5,{range:[1,10],rangeLocked:[!0,!1],...qL()}),this.gravity=ha.VECTOR3([0,-30,0],{...qL()}),this.speed=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1],...qL()}),this.jumpAllowed=ha.BOOLEAN(!0,{...qL()}),this.jumpStrength=ha.FLOAT(10,{range:[0,100],rangeLocked:[!0,!1],...qL()}),this.runAllowed=ha.BOOLEAN(!0,{...qL()}),this.runSpeedMult=ha.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],...qL()}),this.updateCollider=ha.BUTTON(null,{callback:t=>{ZL.PARAM_CALLBACK_updateCollider(t)}}),this.mesh=ha.FOLDER(),this.useMesh=ha.BOOLEAN(!0,{callback:t=>{ZL.PARAM_CALLBACK_updatePlayerMesh(t)}}),this.material=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.MAT},callback:t=>{ZL.PARAM_CALLBACK_updatePlayerMaterial(t)}}),this.init=ha.FOLDER(),this.startPosition=ha.VECTOR3([0,5,0],{...qL()}),this.reset=ha.BUTTON(null,{callback:t=>{ZL.PARAM_CALLBACK_resetPlayer(t)}})}};class ZL extends Va{constructor(){super(...arguments),this.paramsConfig=JL}static type(){return _s.PLAYER}collisionController(){return this._collisionController=this._collisionController||new tx(this)}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(HL,Qo.BASE,this._initPlayer.bind(this)),new ta(jL,Qo.BASE,this._disposePlayer.bind(this)),new ta(WL,Qo.BASE,this._resetPlayer.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(HL,Qo.BASE),new ta(jL,Qo.BASE),new ta(WL,Qo.BASE)])}async _initPlayer(){if(this._player=this._player||await this._createPlayer(),!this._player)return void this.states.error.set(\\\\\\\"could not create player\\\\\\\");this._updatePlayerMesh(),this._updatePlayerMaterial(),this._updatePlayerParams(),this._corePlayerKeyEvents=new Zy(this._player),this._corePlayerKeyEvents.addEvents(),this._player.reset();const t=this._player;this.scene().registerOnBeforeTick(this._callbackName(),(e=>{t.setAzimuthalAngle(this._getAzimuthalAngle()),t.update(e)})),this.dispatchEventToOutput(HL,{})}player(){return this._player}_callbackName(){return`event/PlayerControls-${this.graphNodeId()}`}_disposePlayer(){var t;this._player&&(null===(t=this._corePlayerKeyEvents)||void 0===t||t.removeEvents(),this.scene().unRegisterOnBeforeTick(this._callbackName())),this.dispatchEventToOutput(jL,{})}_resetPlayer(){this._player&&this._player.reset(),this.dispatchEventToOutput(WL,{})}async _updatePlayerParams(){this._player&&(this._player.startPosition.copy(this.pv.startPosition),this._player.physicsSteps=this.pv.physicsSteps,this._player.jumpAllowed=this.pv.jumpAllowed,this._player.jumpStrength=this.pv.jumpStrength,this._player.runAllowed=this.pv.runAllowed,this._player.runSpeedMult=this.pv.runSpeedMult,this._player.gravity.copy(this.pv.gravity),this._player.speed=this.pv.speed,this._player.setCapsule({radius:this.pv.capsuleRadius,height:this.pv.capsuleHeight}))}_updatePlayerMesh(){this._player&&this._player.setUsePlayerMesh(this.pv.useMesh)}async _updatePlayerMaterial(){if(!this._player)return;const t=this.pv.material.nodeWithContext(ts.MAT);if(!t)return void this.states.error.set(\\\\\\\"material node not found\\\\\\\");const e=(await t.compute()).material();this._player.setMaterial(e)}async _createPlayer(){const t=this.pv.playerObject.nodeWithContext(ts.OBJ);if(!t)return void this.states.error.set(\\\\\\\"player node not found\\\\\\\");const e=this.pv.camera.nodeWithContext(ts.OBJ);if(!e)return void this.states.error.set(\\\\\\\"invalid camera node\\\\\\\");this._cameraObject=e.object;const n=t.object,i=await this.collisionController().getCollider();if(!i)return void this.states.error.set(\\\\\\\"invalid collider\\\\\\\");return new $y({object:n,collider:i,meshName:this.path()})}async _updateCollider(){await this.collisionController().updateCollider()}_getAzimuthalAngle(){if(!this._cameraObject||!this._player)return 0;const t=this._cameraObject.position,e=this._player.object.position;return XL.copy(t),YL.copy(e),XL.sub(YL),$L.setFromVector3(XL),$L.theta}static PARAM_CALLBACK_initPlayer(t){t._initPlayer()}static PARAM_CALLBACK_updatePlayerParams(t){t._updatePlayerParams()}static PARAM_CALLBACK_updatePlayerMaterial(t){t._updatePlayerMaterial()}static PARAM_CALLBACK_updatePlayerMesh(t){t._updatePlayerMesh()}static PARAM_CALLBACK_updateCollider(t){t._updateCollider()}static PARAM_CALLBACK_resetPlayer(t){t._resetPlayer()}}var KL,QL=n(39),tO=n(36);class eO{constructor(t,e,n=0,i=1/0){this.ray=new QL.a(t,e),this.near=n,this.far=i,this.camera=null,this.layers=new tO.a,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(t,e){this.ray.set(t,e)}setFromCamera(t,e){e&&e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(t.x,t.y,.5).unproject(e).sub(this.ray.origin).normalize(),this.camera=e):e&&e.isOrthographicCamera?(this.ray.origin.set(t.x,t.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld),this.camera=e):console.error(\\\\\\\"THREE.Raycaster: Unsupported camera type: \\\\\\\"+e.type)}intersectObject(t,e=!0,n=[]){return iO(t,this,n,e),n.sort(nO),n}intersectObjects(t,e=!0,n=[]){for(let i=0,s=t.length;i<s;i++)iO(t[i],this,n,e);return n.sort(nO),n}}function nO(t,e){return t.distance-e.distance}function iO(t,e,n,i){if(t.layers.test(e.layers)&&t.raycast(e,n),!0===i){const i=t.children;for(let t=0,s=i.length;t<s;t++)iO(i[t],e,n,!0)}}!function(t){t.GEOMETRY=\\\\\\\"geometry\\\\\\\",t.PLANE=\\\\\\\"plane\\\\\\\"}(KL||(KL={}));KL.GEOMETRY,KL.PLANE;class sO{constructor(t){this._node=t,this._set_pos_timestamp=-1,this._hit_velocity=new p.a(0,0,0),this._hit_velocity_array=[0,0,0]}process(t){if(!this._node.pv.tvelocity)return;if(!this._prev_position)return this._prev_position=this._prev_position||new p.a,void this._prev_position.copy(t);const e=li.performance.performanceManager().now(),n=e-this._set_pos_timestamp;if(this._set_pos_timestamp=e,this._hit_velocity.copy(t).sub(this._prev_position).divideScalar(n).multiplyScalar(1e3),this._hit_velocity.toArray(this._hit_velocity_array),this._node.pv.tvelocityTarget){if(li.playerMode())this._found_velocity_target_param=this._found_velocity_target_param||this._node.pv.velocityTarget.paramWithType(Cr.VECTOR3);else{const t=this._node.pv.velocityTarget;this._found_velocity_target_param=t.paramWithType(Cr.VECTOR3)}this._found_velocity_target_param&&this._found_velocity_target_param.set(this._hit_velocity_array)}else this._node.p.velocity.set(this._hit_velocity_array);this._prev_position.copy(t)}reset(){this._prev_position=void 0}}var rO;!function(t){t.GEOMETRY=\\\\\\\"geometry\\\\\\\",t.PLANE=\\\\\\\"plane\\\\\\\"}(rO||(rO={}));const oO=[rO.GEOMETRY,rO.PLANE];function aO(t,e,n){var i=e.getBoundingClientRect();n.offsetX=t.pageX-i.left,n.offsetY=t.pageY-i.top}class lO{constructor(t){this._node=t,this._offset={offsetX:0,offsetY:0},this._mouse=new d.a,this._mouse_array=[0,0],this._raycaster=function(){const t=new eO;return t.firstHitOnly=!0,t}(),this._plane=new Y.a,this._plane_intersect_target=new p.a,this._intersections=[],this._hit_position_array=[0,0,0],this.velocity_controller=new sO(this._node)}updateMouse(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas(),i=t.cameraNode;if(!n||!i)return;const s=t.event;if((s instanceof MouseEvent||s instanceof DragEvent||s instanceof PointerEvent)&&aO(s,n,this._offset),window.TouchEvent&&s instanceof TouchEvent){aO(s.touches[0],n,this._offset)}(t=>{this._mouse.x=t.offsetX/n.offsetWidth*2-1,this._mouse.y=-t.offsetY/n.offsetHeight*2+1,this._mouse.toArray(this._mouse_array),this._node.p.mouse.set(this._mouse_array)})(this._offset),this._raycaster.setFromCamera(this._mouse,i.object)}processEvent(t){this._prepareRaycaster(t);const e=oO[this._node.pv.intersectWith];switch(e){case rO.GEOMETRY:return this._intersect_with_geometry(t);case rO.PLANE:return this._intersect_with_plane(t)}os.unreachable(e)}_intersect_with_plane(t){this._plane.normal.copy(this._node.pv.planeDirection),this._plane.constant=this._node.pv.planeOffset,this._raycaster.ray.intersectPlane(this._plane,this._plane_intersect_target),this._set_position_param(this._plane_intersect_target),this._node.trigger_hit(t)}_intersect_with_geometry(t){if(this._resolved_targets||this.update_target(),this._resolved_targets){this._intersections.length=0;const e=this._raycaster.intersectObjects(this._resolved_targets,this._node.pv.traverseChildren,this._intersections)[0];e?(this._set_position_param(e.point),this._node.pv.geoAttribute&&this._resolve_geometry_attribute(e),t.value={intersect:e},this._node.trigger_hit(t)):this._node.trigger_miss(t)}}_resolve_geometry_attribute(t){const e=ks[this._node.pv.geoAttributeType],n=lO.resolve_geometry_attribute(t,this._node.pv.geoAttributeName,e);if(null!=n){switch(e){case zs.NUMERIC:return void this._node.p.geoAttributeValue1.set(n);case zs.STRING:return void(m.isString(n)&&this._node.p.geoAttributeValues.set(n))}os.unreachable(e)}}static resolve_geometry_attribute(t,e,n){switch(Os(t.object.constructor)){case Ns.MESH:return this.resolve_geometry_attribute_for_mesh(t,e,n);case Ns.POINTS:return this.resolve_geometry_attribute_for_point(t,e,n)}}static resolve_geometry_attribute_for_mesh(t,e,n){const i=t.object.geometry;if(i){const s=i.getAttribute(e);if(s){switch(n){case zs.NUMERIC:{const e=i.getAttribute(\\\\\\\"position\\\\\\\");return t.face?(this._vA.fromBufferAttribute(e,t.face.a),this._vB.fromBufferAttribute(e,t.face.b),this._vC.fromBufferAttribute(e,t.face.c),this._uvA.fromBufferAttribute(s,t.face.a),this._uvB.fromBufferAttribute(s,t.face.b),this._uvC.fromBufferAttribute(s,t.face.c),t.uv=tr.a.getUV(t.point,this._vA,this._vB,this._vC,this._uvA,this._uvB,this._uvC,this._hitUV),this._hitUV.x):void 0}case zs.STRING:{const t=new fr(i).points()[0];return t?t.stringAttribValue(e):void 0}}os.unreachable(n)}}}static resolve_geometry_attribute_for_point(t,e,n){const i=t.object.geometry;if(i&&null!=t.index){switch(n){case zs.NUMERIC:{const n=i.getAttribute(e);return n?n.array[t.index]:void 0}case zs.STRING:{const n=new fr(i).points()[t.index];return n?n.stringAttribValue(e):void 0}}os.unreachable(n)}}_set_position_param(t){if(t.toArray(this._hit_position_array),this._node.pv.tpositionTarget){if(li.playerMode())this._found_position_target_param=this._found_position_target_param||this._node.pv.positionTarget.paramWithType(Cr.VECTOR3);else{const t=this._node.pv.positionTarget;this._found_position_target_param=t.paramWithType(Cr.VECTOR3)}this._found_position_target_param&&this._found_position_target_param.set(this._hit_position_array)}else this._node.p.position.set(this._hit_position_array);this.velocity_controller.process(t)}_prepareRaycaster(t){const e=this._raycaster.params.Points;e&&(e.threshold=this._node.pv.pointsThreshold);let n=t.cameraNode;if(this._node.pv.overrideCamera)if(this._node.pv.overrideRay)this._raycaster.ray.origin.copy(this._node.pv.rayOrigin),this._raycaster.ray.direction.copy(this._node.pv.rayDirection);else{const t=this._node.p.camera.found_node_with_context(ts.OBJ);t&&(n=t)}n&&!this._node.pv.overrideRay&&n.prepareRaycaster(this._mouse,this._raycaster)}update_target(){const t=vO[this._node.pv.targetType];switch(t){case gO.NODE:return this._update_target_from_node();case gO.SCENE_GRAPH:return this._update_target_from_scene_graph()}os.unreachable(t)}_update_target_from_node(){const t=this._node.p.targetNode.value.nodeWithContext(ts.OBJ);if(t){const e=this._node.pv.traverseChildren?t.object:t.childrenDisplayController.sopGroup();this._resolved_targets=e?[e]:void 0}else this._node.states.error.set(\\\\\\\"node is not an object\\\\\\\")}_update_target_from_scene_graph(){const t=this._node.scene().objectsByMask(this._node.pv.objectMask);t.length>0?this._resolved_targets=t:this._resolved_targets=void 0}async update_position_target(){this._node.p.positionTarget.isDirty()&&await this._node.p.positionTarget.compute()}static PARAM_CALLBACK_update_target(t){t.cpuController.update_target()}static PARAM_CALLBACK_print_resolve(t){t.cpuController.print_resolve()}print_resolve(){this.update_target(),console.log(this._resolved_targets)}}lO._vA=new p.a,lO._vB=new p.a,lO._vC=new p.a,lO._uvA=new d.a,lO._uvB=new d.a,lO._uvC=new d.a,lO._hitUV=new d.a;class cO{constructor(t){this._node=t,this._resolved_material=null,this._restore_context={scene:{overrideMaterial:null},renderer:{toneMapping:-1,outputEncoding:-1}},this._mouse=new d.a,this._mouse_array=[0,0],this._read=new Float32Array(4),this._param_read=[0,0,0,0]}updateMouse(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas();n&&t.event&&(t.event instanceof MouseEvent||t.event instanceof DragEvent||t.event instanceof PointerEvent?(this._mouse.x=t.event.offsetX/n.offsetWidth,this._mouse.y=1-t.event.offsetY/n.offsetHeight,this._mouse.toArray(this._mouse_array),this._node.p.mouse.set(this._mouse_array)):console.warn(\\\\\\\"event type not implemented\\\\\\\"))}processEvent(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas();if(!n||!t.cameraNode)return;const i=t.cameraNode,s=i.renderController;if(s){if(this._render_target=this._render_target||new K(n.offsetWidth,n.offsetHeight,{minFilter:w.V,magFilter:w.ob,format:w.Ib,type:w.G}),!this._resolved_material)return this.update_material(),void console.warn(\\\\\\\"no material found\\\\\\\");const e=i,r=s.resolved_scene||i.scene().threejsScene(),o=s.renderer(n);this._modify_scene_and_renderer(r,o),o.setRenderTarget(this._render_target),o.clear(),o.render(r,e.object),o.setRenderTarget(null),this._restore_scene_and_renderer(r,o),o.readRenderTargetPixels(this._render_target,Math.round(this._mouse.x*n.offsetWidth),Math.round(this._mouse.y*n.offsetHeight),1,1,this._read),this._param_read[0]=this._read[0],this._param_read[1]=this._read[1],this._param_read[2]=this._read[2],this._param_read[3]=this._read[3],this._node.p.pixelValue.set(this._param_read),this._node.pv.pixelValue.x>this._node.pv.hitThreshold?this._node.trigger_hit(t):this._node.trigger_miss(t)}}_modify_scene_and_renderer(t,e){this._restore_context.scene.overrideMaterial=t.overrideMaterial,this._restore_context.renderer.outputEncoding=e.outputEncoding,this._restore_context.renderer.toneMapping=e.toneMapping,t.overrideMaterial=this._resolved_material,e.toneMapping=w.vb,e.outputEncoding=w.U}_restore_scene_and_renderer(t,e){t.overrideMaterial=this._restore_context.scene.overrideMaterial,e.outputEncoding=this._restore_context.renderer.outputEncoding,e.toneMapping=this._restore_context.renderer.toneMapping}update_material(){const t=this._node.p.material.found_node();t?t.context()==ts.MAT?this._resolved_material=t.material:this._node.states.error.set(\\\\\\\"target is not an obj\\\\\\\"):this._node.states.error.set(\\\\\\\"no target found\\\\\\\")}static PARAM_CALLBACK_update_material(t){t.gpuController.update_material()}}const hO=1e3/60;var uO;!function(t){t.CPU=\\\\\\\"cpu\\\\\\\",t.GPU=\\\\\\\"gpu\\\\\\\"}(uO||(uO={}));const dO=[uO.CPU,uO.GPU];function pO(t={}){return t.mode=dO.indexOf(uO.CPU),{visibleIf:t}}function _O(t={}){return t.mode=dO.indexOf(uO.CPU),t.intersectWith=oO.indexOf(rO.GEOMETRY),{visibleIf:t}}function mO(t={}){return t.mode=dO.indexOf(uO.CPU),t.intersectWith=oO.indexOf(rO.PLANE),{visibleIf:t}}function fO(t={}){return t.mode=dO.indexOf(uO.GPU),{visibleIf:t}}var gO;!function(t){t.SCENE_GRAPH=\\\\\\\"scene graph\\\\\\\",t.NODE=\\\\\\\"node\\\\\\\"}(gO||(gO={}));const vO=[gO.SCENE_GRAPH,gO.NODE];const yO=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(dO.indexOf(uO.CPU),{menu:{entries:dO.map(((t,e)=>({name:t,value:e})))}}),this.mouse=ha.VECTOR2([0,0],{cook:!1}),this.overrideCamera=ha.BOOLEAN(0),this.overrideRay=ha.BOOLEAN(0,{visibleIf:{mode:dO.indexOf(uO.CPU),overrideCamera:1}}),this.camera=ha.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{nodeSelection:{context:ts.OBJ},dependentOnFoundNode:!1,visibleIf:{overrideCamera:1,overrideRay:0}}),this.rayOrigin=ha.VECTOR3([0,0,0],{visibleIf:{overrideCamera:1,overrideRay:1}}),this.rayDirection=ha.VECTOR3([0,0,1],{visibleIf:{overrideCamera:1,overrideRay:1}}),this.material=ha.OPERATOR_PATH(\\\\\\\"/MAT/mesh_basic_builder1\\\\\\\",{nodeSelection:{context:ts.MAT},dependentOnFoundNode:!1,callback:(t,e)=>{cO.PARAM_CALLBACK_update_material(t)},...fO()}),this.pixelValue=ha.VECTOR4([0,0,0,0],{cook:!1,...fO()}),this.hitThreshold=ha.FLOAT(.5,{cook:!1,...fO()}),this.intersectWith=ha.INTEGER(oO.indexOf(rO.GEOMETRY),{menu:{entries:oO.map(((t,e)=>({name:t,value:e})))},...pO()}),this.pointsThreshold=ha.FLOAT(1,{range:[0,100],rangeLocked:[!0,!1],...pO()}),this.planeDirection=ha.VECTOR3([0,1,0],{...mO()}),this.planeOffset=ha.FLOAT(0,{...mO()}),this.targetType=ha.INTEGER(0,{menu:{entries:vO.map(((t,e)=>({name:t,value:e})))},..._O()}),this.targetNode=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.OBJ},dependentOnFoundNode:!1,callback:(t,e)=>{lO.PARAM_CALLBACK_update_target(t)},..._O({targetType:vO.indexOf(gO.NODE)})}),this.objectMask=ha.STRING(\\\\\\\"*geo1*\\\\\\\",{callback:(t,e)=>{lO.PARAM_CALLBACK_update_target(t)},..._O({targetType:vO.indexOf(gO.SCENE_GRAPH)})}),this.printFoundObjectsFromMask=ha.BUTTON(null,{callback:(t,e)=>{lO.PARAM_CALLBACK_print_resolve(t)},..._O({targetType:vO.indexOf(gO.SCENE_GRAPH)})}),this.traverseChildren=ha.BOOLEAN(!0,{callback:(t,e)=>{lO.PARAM_CALLBACK_update_target(t)},..._O(),separatorAfter:!0}),this.tpositionTarget=ha.BOOLEAN(0,{cook:!1,...pO()}),this.position=ha.VECTOR3([0,0,0],{cook:!1,...pO({tpositionTarget:0})}),this.positionTarget=ha.PARAM_PATH(\\\\\\\"\\\\\\\",{cook:!1,...pO({tpositionTarget:1}),paramSelection:Cr.VECTOR3,computeOnDirty:!0}),this.tvelocity=ha.BOOLEAN(0,{cook:!1}),this.tvelocityTarget=ha.BOOLEAN(0,{cook:!1,...pO({tvelocity:1})}),this.velocity=ha.VECTOR3([0,0,0],{cook:!1,...pO({tvelocity:1,tvelocityTarget:0})}),this.velocityTarget=ha.PARAM_PATH(\\\\\\\"\\\\\\\",{cook:!1,...pO({tvelocity:1,tvelocityTarget:1}),paramSelection:Cr.VECTOR3,computeOnDirty:!0}),this.geoAttribute=ha.BOOLEAN(0,_O()),this.geoAttributeName=ha.STRING(\\\\\\\"id\\\\\\\",{cook:!1,..._O({geoAttribute:1})}),this.geoAttributeType=ha.INTEGER(ks.indexOf(zs.NUMERIC),{menu:{entries:Us},..._O({geoAttribute:1})}),this.geoAttributeValue1=ha.FLOAT(0,{cook:!1,..._O({geoAttribute:1,geoAttributeType:ks.indexOf(zs.NUMERIC)})}),this.geoAttributeValues=ha.STRING(\\\\\\\"\\\\\\\",{..._O({geoAttribute:1,geoAttributeType:ks.indexOf(zs.STRING)})})}};class xO extends Va{constructor(){super(...arguments),this.paramsConfig=yO,this.cpuController=new lO(this),this.gpuController=new cO(this),this._last_event_processed_at=-1}static type(){return\\\\\\\"raycast\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(xO.INPUT_TRIGGER,Qo.BASE,this._process_trigger_event_throttled.bind(this)),new ta(xO.INPUT_MOUSE,Qo.MOUSE,this._process_mouse_event.bind(this)),new ta(xO.INPUT_UPDATE_OBJECTS,Qo.BASE,this._process_trigger_update_objects.bind(this)),new ta(xO.INPUT_TRIGGER_VEL_RESET,Qo.BASE,this._process_trigger_vel_reset.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(xO.OUTPUT_HIT,Qo.BASE),new ta(xO.OUTPUT_MISS,Qo.BASE)])}trigger_hit(t){this.dispatchEventToOutput(xO.OUTPUT_HIT,t)}trigger_miss(t){this.dispatchEventToOutput(xO.OUTPUT_MISS,t)}_process_mouse_event(t){this.pv.mode==dO.indexOf(uO.CPU)?this.cpuController.updateMouse(t):this.gpuController.updateMouse(t)}_process_trigger_event_throttled(t){const e=this._last_event_processed_at,n=li.performance.performanceManager().now();this._last_event_processed_at=n;const i=n-e;i<hO?setTimeout((()=>{this._process_trigger_event(t)}),hO-i):this._process_trigger_event(t)}_process_trigger_event(t){this.pv.mode==dO.indexOf(uO.CPU)?this.cpuController.processEvent(t):this.gpuController.processEvent(t)}_process_trigger_update_objects(t){this.pv.mode==dO.indexOf(uO.CPU)&&this.cpuController.update_target()}_process_trigger_vel_reset(t){this.pv.mode==dO.indexOf(uO.CPU)&&this.cpuController.velocity_controller.reset()}}var bO;xO.INPUT_TRIGGER=\\\\\\\"trigger\\\\\\\",xO.INPUT_MOUSE=\\\\\\\"mouse\\\\\\\",xO.INPUT_UPDATE_OBJECTS=\\\\\\\"updateObjects\\\\\\\",xO.INPUT_TRIGGER_VEL_RESET=\\\\\\\"triggerVelReset\\\\\\\",xO.OUTPUT_HIT=\\\\\\\"hit\\\\\\\",xO.OUTPUT_MISS=\\\\\\\"miss\\\\\\\",function(t){t.SET=\\\\\\\"set\\\\\\\",t.TOGGLE=\\\\\\\"toggle\\\\\\\"}(bO||(bO={}));const wO=[bO.SET,bO.TOGGLE];const TO=new class extends ua{constructor(){super(...arguments),this.mask=ha.STRING(\\\\\\\"/geo*\\\\\\\",{separatorAfter:!0}),this.tdisplay=ha.BOOLEAN(0),this.displayMode=ha.INTEGER(wO.indexOf(bO.SET),{visibleIf:{tdisplay:1},menu:{entries:wO.map(((t,e)=>({name:t,value:e})))}}),this.display=ha.BOOLEAN(0,{visibleIf:{tdisplay:1,displayMode:wO.indexOf(bO.SET)},separatorAfter:!0}),this.tbypass=ha.BOOLEAN(0),this.bypassMode=ha.INTEGER(wO.indexOf(bO.SET),{visibleIf:{tbypass:1},menu:{entries:wO.map(((t,e)=>({name:t,value:e})))}}),this.bypass=ha.BOOLEAN(0,{visibleIf:{tbypass:1,displayMode:wO.indexOf(bO.SET)}}),this.execute=ha.BUTTON(null,{callback:t=>{AO.PARAM_CALLBACK_execute(t)}})}};class AO extends Va{constructor(){super(...arguments),this.paramsConfig=TO}static type(){return\\\\\\\"setFlag\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(\\\\\\\"trigger\\\\\\\",Qo.BASE)])}async processEvent(t){let e=this.pv.mask;if(t.value){const n=t.value.node;if(n){const t=n.parent();t&&(e=`${t.path()}/${e}`)}}const n=this.scene().nodesController.nodesFromMask(e);for(let t of n)this._update_node_flags(t)}_update_node_flags(t){this._update_node_display_flag(t),this._update_node_bypass_flag(t)}_update_node_display_flag(t){var e;if(!this.pv.tdisplay)return;if(!(null===(e=t.flags)||void 0===e?void 0:e.hasDisplay()))return;const n=t.flags.display;if(!n)return;const i=wO[this.pv.displayMode];switch(i){case bO.SET:return void n.set(this.pv.display);case bO.TOGGLE:return void n.set(!n.active())}os.unreachable(i)}_update_node_bypass_flag(t){var e;if(!this.pv.tbypass)return;if(!(null===(e=t.flags)||void 0===e?void 0:e.hasBypass()))return;const n=t.flags.bypass;if(!n)return;const i=wO[this.pv.bypassMode];switch(i){case bO.SET:return void n.set(this.pv.bypass);case bO.TOGGLE:return void n.set(!n.active())}os.unreachable(i)}static PARAM_CALLBACK_execute(t){t.processEvent({})}}var MO;!function(t){t.BOOLEAN=\\\\\\\"boolean\\\\\\\",t.BUTTON=\\\\\\\"button\\\\\\\",t.NUMBER=\\\\\\\"number\\\\\\\",t.VECTOR2=\\\\\\\"vector2\\\\\\\",t.VECTOR3=\\\\\\\"vector3\\\\\\\",t.VECTOR4=\\\\\\\"vector4\\\\\\\",t.STRING=\\\\\\\"string\\\\\\\"}(MO||(MO={}));const EO=[MO.BOOLEAN,MO.BUTTON,MO.NUMBER,MO.VECTOR2,MO.VECTOR3,MO.VECTOR4,MO.STRING],SO=EO.indexOf(MO.BOOLEAN),CO=EO.indexOf(MO.NUMBER),NO=EO.indexOf(MO.VECTOR2),LO=EO.indexOf(MO.VECTOR3),OO=EO.indexOf(MO.VECTOR4),PO=EO.indexOf(MO.STRING),RO=\\\\\\\"output\\\\\\\";const IO=new class extends ua{constructor(){super(...arguments),this.param=ha.PARAM_PATH(\\\\\\\"\\\\\\\",{paramSelection:!0,computeOnDirty:!0}),this.type=ha.INTEGER(CO,{menu:{entries:EO.map(((t,e)=>({name:t,value:e})))}}),this.toggle=ha.BOOLEAN(0,{visibleIf:{type:SO}}),this.boolean=ha.BOOLEAN(0,{visibleIf:{type:SO,toggle:0}}),this.number=ha.FLOAT(0,{visibleIf:{type:CO}}),this.vector2=ha.VECTOR2([0,0],{visibleIf:{type:NO}}),this.vector3=ha.VECTOR3([0,0,0],{visibleIf:{type:LO}}),this.vector4=ha.VECTOR4([0,0,0,0],{visibleIf:{type:OO}}),this.increment=ha.BOOLEAN(0,{visibleIf:[{type:CO},{type:NO},{type:LO},{type:OO}]}),this.string=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{type:PO}}),this.execute=ha.BUTTON(null,{callback:t=>{FO.PARAM_CALLBACK_execute(t)}})}};class FO extends Va{constructor(){super(...arguments),this.paramsConfig=IO,this._tmp_vector2=new d.a,this._tmp_vector3=new p.a,this._tmp_vector4=new _.a,this._tmp_array2=[0,0],this._tmp_array3=[0,0,0],this._tmp_array4=[0,0,0,0]}static type(){return\\\\\\\"setParam\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(\\\\\\\"trigger\\\\\\\",Qo.BASE)]),this.io.outputs.setNamedOutputConnectionPoints([new ta(RO,Qo.BASE)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.param])}))}))}async processEvent(t){this.p.param.isDirty()&&await this.p.param.compute();const e=this.p.param.value.param();if(e){const t=await this._new_param_value(e);null!=t&&e.set(t)}else this.states.error.set(\\\\\\\"target param not found\\\\\\\");this.dispatchEventToOutput(RO,t)}async _new_param_value(t){const e=EO[this.pv.type];switch(e){case MO.BOOLEAN:return await this._compute_params_if_dirty([this.p.toggle]),this.pv.toggle?t.value?0:1:this.pv.boolean?1:0;case MO.BUTTON:return t.options.executeCallback();case MO.NUMBER:return await this._compute_params_if_dirty([this.p.increment,this.p.number]),this.pv.increment?t.type()==Cr.FLOAT?t.value+this.pv.number:t.value:this.pv.number;case MO.VECTOR2:return await this._compute_params_if_dirty([this.p.increment,this.p.vector2]),this.pv.increment?t.type()==Cr.VECTOR2?(this._tmp_vector2.copy(t.value),this._tmp_vector2.add(this.pv.vector2),this._tmp_vector2.toArray(this._tmp_array2)):t.value.toArray(this._tmp_array2):this.pv.vector2.toArray(this._tmp_array2),this._tmp_array2;case MO.VECTOR3:return await this._compute_params_if_dirty([this.p.increment,this.p.vector3]),this.pv.increment?t.type()==Cr.VECTOR3?(this._tmp_vector3.copy(t.value),this._tmp_vector3.add(this.pv.vector3),this._tmp_vector3.toArray(this._tmp_array3)):t.value.toArray(this._tmp_array3):this.pv.vector3.toArray(this._tmp_array3),this._tmp_array3;case MO.VECTOR4:return await this._compute_params_if_dirty([this.p.increment,this.p.vector4]),this.pv.increment?t.type()==Cr.VECTOR4?(this._tmp_vector4.copy(t.value),this._tmp_vector4.add(this.pv.vector4),this._tmp_vector4.toArray(this._tmp_array4)):t.value.toArray(this._tmp_array4):this.pv.vector4.toArray(this._tmp_array4),this._tmp_array4;case MO.STRING:return await this._compute_params_if_dirty([this.p.string]),this.pv.string}os.unreachable(e)}static PARAM_CALLBACK_execute(t){t.processEvent({})}async _compute_params_if_dirty(t){const e=[];for(let n of t)n.isDirty()&&e.push(n);const n=[];for(let t of e)n.push(t.compute());return await Promise.all(n)}}const DO=new class extends ua{constructor(){super(...arguments),this.outputsCount=ha.INTEGER(5,{range:[1,10],rangeLocked:[!0,!1]})}};class BO extends Va{constructor(){super(...arguments),this.paramsConfig=DO}static type(){return\\\\\\\"sequence\\\\\\\"}initializeNode(){this.io.connection_points.set_input_name_function((()=>\\\\\\\"trigger\\\\\\\")),this.io.connection_points.set_expected_input_types_function((()=>[Qo.BASE])),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_output_name_function(this._output_name.bind(this))}_expected_output_types(){const t=new Array(this.pv.outputsCount);return t.fill(Qo.BASE),t}_output_name(t){return`out${t}`}processEvent(t){const e=this.pv.outputsCount;for(let n=0;n<e;n++){const e=this.io.outputs.namedOutputConnectionPoints()[n];this.dispatchEventToOutput(e.name(),t)}}}const zO=\\\\\\\"tick\\\\\\\";const kO=new class extends ua{constructor(){super(...arguments),this.period=ha.INTEGER(1e3),this.count=ha.INTEGER(-1)}};class UO extends Va{constructor(){super(...arguments),this.paramsConfig=kO,this._timer_active=!1,this._current_count=0}static type(){return\\\\\\\"timer\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(\\\\\\\"start\\\\\\\",Qo.BASE,this._start_timer.bind(this)),new ta(\\\\\\\"stop\\\\\\\",Qo.BASE,this._stop_timer.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new ta(zO,Qo.BASE)])}_start_timer(t){this._timer_active||(this._timer_active=!0,this._current_count=0),this._run_timer(t)}_stop_timer(){this._timer_active=!1}_run_timer(t){setTimeout((()=>{this._timer_active&&(this.pv.count<=0||this._current_count<this.pv.count?(this.dispatchEventToOutput(zO,t),this._current_count+=1,this._run_timer(t)):this._stop_timer())}),this.pv.period)}}const GO=new class extends ua{constructor(){super(...arguments),this.className=ha.STRING(\\\\\\\"active\\\\\\\")}};class VO extends Va{constructor(){super(...arguments),this.paramsConfig=GO}static type(){return\\\\\\\"viewer\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new ta(\\\\\\\"setCss\\\\\\\",Qo.BASE,this._process_trigger_setClass.bind(this)),new ta(\\\\\\\"unSetCss\\\\\\\",Qo.BASE,this._process_trigger_unsetClass.bind(this)),new ta(\\\\\\\"createControls\\\\\\\",Qo.BASE,this._process_trigger_createControls.bind(this)),new ta(\\\\\\\"disposeControls\\\\\\\",Qo.BASE,this._process_trigger_disposeControls.bind(this))])}_process_trigger_setClass(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas();n&&n.classList.add(this.pv.className)}_process_trigger_unsetClass(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas();n&&n.classList.remove(this.pv.className)}_process_trigger_createControls(t){this.scene().viewersRegister.traverseViewers((t=>{var e;null===(e=t.controlsController)||void 0===e||e.create_controls()}))}_process_trigger_disposeControls(t){this.scene().viewersRegister.traverseViewers((t=>{var e;null===(e=t.controlsController)||void 0===e||e.dispose_controls()}))}}class HO extends aa{static context(){return ts.EVENT}cook(){this.cookController.endCook()}}class jO extends HO{}class WO extends jO{constructor(){super(...arguments),this._children_controller_context=ts.ANIM}static type(){return es.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class qO extends jO{constructor(){super(...arguments),this._children_controller_context=ts.COP}static type(){return es.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class XO extends jO{constructor(){super(...arguments),this._children_controller_context=ts.EVENT}static type(){return es.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class YO extends jO{constructor(){super(...arguments),this._children_controller_context=ts.MAT}static type(){return es.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class $O extends HO{constructor(){super(...arguments),this.paramsConfig=new ef,this.effectsComposerController=new nf(this),this.displayNodeController=new Fm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=ts.POST}static type(){return es.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class JO extends jO{constructor(){super(...arguments),this._children_controller_context=ts.ROP}static type(){return es.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}const ZO=\\\\\\\"int\\\\\\\";const KO=new class extends ua{constructor(){super(...arguments),this.float=ha.FLOAT(0)}};class QO extends gf{constructor(){super(...arguments),this.paramsConfig=KO}static type(){return\\\\\\\"floatToInt\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(ZO,Uo.INT)])}setLines(t){const e=this.variableForInputParam(this.p.float),n=`int ${this.glVarName(ZO)} = int(${mf.float(e)})`;t.addBodyLines(this,[n])}}const tP=\\\\\\\"float\\\\\\\";const eP=new class extends ua{constructor(){super(...arguments),this.int=ha.INTEGER(0)}};class nP extends gf{constructor(){super(...arguments),this.paramsConfig=eP}static type(){return\\\\\\\"intToFloat\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(tP,Uo.FLOAT)])}setLines(t){const e=this.variableForInputParam(this.p.int),n=`float ${this.glVarName(tP)} = float(${mf.integer(e)})`;t.addBodyLines(this,[n])}}const iP=\\\\\\\"bool\\\\\\\";const sP=new class extends ua{constructor(){super(...arguments),this.int=ha.INTEGER(0)}};class rP extends gf{constructor(){super(...arguments),this.paramsConfig=sP}static type(){return\\\\\\\"intToBool\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(iP,Uo.BOOL)])}setLines(t){const e=this.variableForInputParam(this.p.int),n=`bool ${this.glVarName(iP)} = bool(${mf.integer(e)})`;t.addBodyLines(this,[n])}}const oP=new class extends ua{constructor(){super(...arguments),this.bool=ha.BOOLEAN(0)}};class aP extends gf{constructor(){super(...arguments),this.paramsConfig=oP}static type(){return\\\\\\\"boolToInt\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(ZO,Uo.INT)])}setLines(t){const e=this.variableForInputParam(this.p.bool),n=`int ${this.glVarName(ZO)} = int(${mf.bool(e)})`;t.addBodyLines(this,[n])}}const lP=new class extends ua{constructor(){super(...arguments),this.x=ha.FLOAT(0),this.y=ha.FLOAT(0)}};class cP extends gf{constructor(){super(...arguments),this.paramsConfig=lP}static type(){return\\\\\\\"floatToVec2\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(cP.OUTPUT_NAME,Uo.VEC2)])}setLines(t){const e=this.variableForInputParam(this.p.x),n=this.variableForInputParam(this.p.y),i=`vec2 ${this.glVarName(cP.OUTPUT_NAME)} = ${mf.float2(e,n)}`;t.addBodyLines(this,[i])}}cP.OUTPUT_NAME=\\\\\\\"vec2\\\\\\\";const hP=new class extends ua{constructor(){super(...arguments),this.x=ha.FLOAT(0),this.y=ha.FLOAT(0),this.z=ha.FLOAT(0)}};class uP extends gf{constructor(){super(...arguments),this.paramsConfig=hP}static type(){return\\\\\\\"floatToVec3\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(uP.OUTPUT_NAME,Uo.VEC3)])}setLines(t){const e=this.variableForInputParam(this.p.x),n=this.variableForInputParam(this.p.y),i=this.variableForInputParam(this.p.z),s=`vec3 ${this.glVarName(uP.OUTPUT_NAME)} = ${mf.float3(e,n,i)}`;t.addBodyLines(this,[s])}}uP.OUTPUT_NAME=\\\\\\\"vec3\\\\\\\";const dP=new class extends ua{constructor(){super(...arguments),this.x=ha.FLOAT(0),this.y=ha.FLOAT(0),this.z=ha.FLOAT(0),this.w=ha.FLOAT(0)}};class pP extends gf{constructor(){super(...arguments),this.paramsConfig=dP}static type(){return\\\\\\\"floatToVec4\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(pP.OUTPUT_NAME,Uo.VEC4)])}setLines(t){const e=this.variableForInputParam(this.p.x),n=this.variableForInputParam(this.p.y),i=this.variableForInputParam(this.p.z),s=this.variableForInputParam(this.p.w),r=`vec4 ${this.glVarName(pP.OUTPUT_NAME)} = ${mf.float4(e,n,i,s)}`;t.addBodyLines(this,[r])}}pP.OUTPUT_NAME=\\\\\\\"vec4\\\\\\\";const _P=new class extends ua{};class mP extends gf{constructor(){super(...arguments),this.paramsConfig=_P}}function fP(t,e){const n=e.components,i=e.param_type;return class extends mP{static type(){return t}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(n.map((t=>new qo(t,Uo.FLOAT))))}createParams(){this.addParam(i,\\\\\\\"vec\\\\\\\",n.map((t=>0)))}setLines(t){const e=[],n=this.variableForInput(\\\\\\\"vec\\\\\\\");this.io.outputs.used_output_names().forEach((t=>{const i=this.glVarName(t);e.push(`float ${i} = ${n}.${t}`)})),t.addBodyLines(this,e)}}}const gP=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"],vP=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"],yP=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"];class xP extends(fP(\\\\\\\"vec2ToFloat\\\\\\\",{components:[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"],param_type:Cr.VECTOR2})){}class bP extends(fP(\\\\\\\"vec3ToFloat\\\\\\\",{components:[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"],param_type:Cr.VECTOR3})){}class wP extends(fP(\\\\\\\"vec4ToFloat\\\\\\\",{components:yP,param_type:Cr.VECTOR4})){}class TP extends mP{static type(){return\\\\\\\"vec4ToVec3\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(TP.OUTPUT_NAME_VEC3,Uo.VEC3),new qo(TP.OUTPUT_NAME_W,Uo.FLOAT)])}createParams(){this.addParam(Cr.VECTOR4,TP.INPUT_NAME_VEC4,yP.map((t=>0)))}setLines(t){const e=[],n=TP.INPUT_NAME_VEC4,i=TP.OUTPUT_NAME_VEC3,s=TP.OUTPUT_NAME_W,r=this.variableForInput(n),o=this.io.outputs.used_output_names();if(o.indexOf(i)>=0){const t=this.glVarName(i);e.push(`vec3 ${t} = ${r}.xyz`)}if(o.indexOf(s)>=0){const t=this.glVarName(s);e.push(`float ${t} = ${r}.w`)}t.addBodyLines(this,e)}}TP.INPUT_NAME_VEC4=\\\\\\\"vec4\\\\\\\",TP.OUTPUT_NAME_VEC3=\\\\\\\"vec3\\\\\\\",TP.OUTPUT_NAME_W=\\\\\\\"w\\\\\\\";class AP extends mP{static type(){return\\\\\\\"vec3ToVec2\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(AP.OUTPUT_NAME_VEC2,Uo.VEC2),new qo(AP.OUTPUT_NAME_Z,Uo.FLOAT)])}createParams(){this.addParam(Cr.VECTOR3,AP.INPUT_NAME_VEC3,vP.map((t=>0)))}setLines(t){const e=[],n=AP.INPUT_NAME_VEC3,i=AP.OUTPUT_NAME_VEC2,s=AP.OUTPUT_NAME_Z,r=this.variableForInput(n),o=this.io.outputs.used_output_names();if(o.indexOf(i)>=0){const t=this.glVarName(i);e.push(`vec2 ${t} = ${r}.xy`)}if(o.indexOf(s)>=0){const t=this.glVarName(s);e.push(`float ${t} = ${r}.z`)}t.addBodyLines(this,e)}}AP.INPUT_NAME_VEC3=\\\\\\\"vec3\\\\\\\",AP.OUTPUT_NAME_VEC2=\\\\\\\"vec2\\\\\\\",AP.OUTPUT_NAME_Z=\\\\\\\"z\\\\\\\";class MP extends mP{static type(){return\\\\\\\"vec2ToVec3\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(MP.OUTPUT_NAME_VEC3,Uo.VEC3)])}createParams(){this.addParam(Cr.VECTOR2,MP.INPUT_NAME_VEC2,gP.map((t=>0))),this.addParam(Cr.FLOAT,MP.INPUT_NAME_Z,0)}setLines(t){const e=[],n=MP.INPUT_NAME_VEC2,i=MP.INPUT_NAME_Z,s=MP.OUTPUT_NAME_VEC3,r=this.variableForInput(n),o=this.variableForInput(i),a=this.glVarName(s);e.push(`vec3 ${a} = vec3(${r}.xy, ${o})`),t.addBodyLines(this,e)}}MP.INPUT_NAME_VEC2=\\\\\\\"vec3\\\\\\\",MP.INPUT_NAME_Z=\\\\\\\"z\\\\\\\",MP.OUTPUT_NAME_VEC3=\\\\\\\"vec3\\\\\\\";class EP extends mP{static type(){return\\\\\\\"vec3ToVec4\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(EP.OUTPUT_NAME_VEC4,Uo.VEC4)])}createParams(){this.addParam(Cr.VECTOR3,EP.INPUT_NAME_VEC3,vP.map((t=>0))),this.addParam(Cr.FLOAT,EP.INPUT_NAME_W,0)}setLines(t){const e=[],n=EP.INPUT_NAME_VEC3,i=EP.INPUT_NAME_W,s=EP.OUTPUT_NAME_VEC4,r=this.variableForInput(n),o=this.variableForInput(i),a=this.glVarName(s);e.push(`vec4 ${a} = vec4(${r}.xyz, ${o})`),t.addBodyLines(this,e)}}EP.INPUT_NAME_VEC3=\\\\\\\"vec3\\\\\\\",EP.INPUT_NAME_W=\\\\\\\"w\\\\\\\",EP.OUTPUT_NAME_VEC4=\\\\\\\"vec4\\\\\\\";const SP=new class extends ua{};class CP extends gf{constructor(){super(...arguments),this.paramsConfig=SP}gl_method_name(){return\\\\\\\"\\\\\\\"}gl_function_definitions(){return[]}initializeNode(){super.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this))}_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Uo.FLOAT;if(this.io.connections.firstInputConnection()){const e=this.io.connections.inputConnections();if(e){let n=Math.max(f.compact(e).length+1,2);return f.range(n).map((e=>t))}return[]}return f.range(2).map((e=>t))}_expected_output_types(){return[this._expected_input_types()[0]]}_gl_input_name(t){return\\\\\\\"in\\\\\\\"}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=this.io.inputs.namedInputConnectionPoints().map(((t,e)=>{const n=t.name();return mf.any(this.variableForInput(n))})).join(\\\\\\\", \\\\\\\"),i=`${e} ${this.glVarName(this.io.connection_points.output_name(0))} = ${this.gl_method_name()}(${n})`;t.addBodyLines(this,[i]),t.addDefinitions(this,this.gl_function_definitions())}}class NP extends CP{_gl_input_name(t){return\\\\\\\"in\\\\\\\"}_expected_input_types(){return[this.io.connection_points.first_input_connection_type()||Uo.FLOAT]}}class LP extends CP{_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Uo.FLOAT;return[t,t]}}class OP extends CP{_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Uo.FLOAT;return[t,t,t]}}class PP extends CP{_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Uo.FLOAT;return[t,t,t,t]}}class RP extends CP{_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Uo.FLOAT;return[t,t,t,t,t]}}function IP(t,e={}){const n=e.method||t,i=e.out||\\\\\\\"val\\\\\\\",s=e.in||\\\\\\\"in\\\\\\\";return class extends NP{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this))}_gl_input_name(t){return s}_gl_output_name(t){return i}gl_method_name(){return n}}}class FP extends(IP(\\\\\\\"abs\\\\\\\")){}class DP extends(IP(\\\\\\\"acos\\\\\\\",{out:\\\\\\\"radians\\\\\\\"})){}class BP extends(IP(\\\\\\\"asin\\\\\\\",{out:\\\\\\\"radians\\\\\\\"})){}class zP extends(IP(\\\\\\\"atan\\\\\\\",{out:\\\\\\\"radians\\\\\\\"})){}class kP extends(IP(\\\\\\\"ceil\\\\\\\")){}class UP extends(IP(\\\\\\\"cos\\\\\\\",{in:\\\\\\\"radians\\\\\\\"})){}class GP extends(IP(\\\\\\\"degrees\\\\\\\",{in:\\\\\\\"radians\\\\\\\",out:\\\\\\\"degrees\\\\\\\"})){}class VP extends(IP(\\\\\\\"exp\\\\\\\")){}class HP extends(IP(\\\\\\\"exp2\\\\\\\")){}class jP extends(IP(\\\\\\\"floor\\\\\\\")){}class WP extends(IP(\\\\\\\"fract\\\\\\\")){}class qP extends(IP(\\\\\\\"inverseSqrt\\\\\\\",{method:\\\\\\\"inversesqrt\\\\\\\"})){}class XP extends(IP(\\\\\\\"log\\\\\\\")){}class YP extends(IP(\\\\\\\"log2\\\\\\\")){}class $P extends(IP(\\\\\\\"normalize\\\\\\\",{out:\\\\\\\"normalized\\\\\\\"})){}class JP extends(IP(\\\\\\\"radians\\\\\\\",{in:\\\\\\\"degrees\\\\\\\",out:\\\\\\\"radians\\\\\\\"})){}class ZP extends(IP(\\\\\\\"sign\\\\\\\")){}class KP extends(IP(\\\\\\\"sin\\\\\\\",{in:\\\\\\\"radians\\\\\\\"})){}class QP extends(IP(\\\\\\\"sqrt\\\\\\\")){}class tR extends(IP(\\\\\\\"tan\\\\\\\")){}function eR(t,e={}){const n=e.method||t,i=e.out||\\\\\\\"val\\\\\\\",s=e.in||[\\\\\\\"in0\\\\\\\",\\\\\\\"in1\\\\\\\"],r=e.default_in_type,o=e.allowed_in_types,a=e.out_type,l=e.functions||[];return class extends LP{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),a&&this.io.connection_points.set_expected_output_types_function((()=>[a]))}_gl_input_name(t){return s[t]}_gl_output_name(t){return i}gl_method_name(){return n}gl_function_definitions(){return l?l.map((t=>new Cf(this,t))):[]}_expected_input_types(){let t=this.io.connection_points.first_input_connection_type();if(t&&o&&!o.includes(t)){const e=this.io.inputs.namedInputConnectionPoints()[0];t=e?e.type():r}const e=t||r||Uo.FLOAT;return[e,e]}}}class nR extends(eR(\\\\\\\"distance\\\\\\\",{in:[\\\\\\\"p0\\\\\\\",\\\\\\\"p1\\\\\\\"],default_in_type:Uo.VEC3,allowed_in_types:[Uo.VEC2,Uo.VEC3,Uo.VEC4],out_type:Uo.FLOAT})){}class iR extends(eR(\\\\\\\"dot\\\\\\\",{in:[\\\\\\\"vec0\\\\\\\",\\\\\\\"vec1\\\\\\\"],default_in_type:Uo.VEC3,allowed_in_types:[Uo.VEC2,Uo.VEC3,Uo.VEC4],out_type:Uo.FLOAT})){}class sR extends(eR(\\\\\\\"max\\\\\\\")){}class rR extends(eR(\\\\\\\"min\\\\\\\")){}class oR extends(eR(\\\\\\\"mod\\\\\\\")){paramDefaultValue(t){return{in1:1}[t]}_expected_input_types(){const t=Uo.FLOAT;return[t,t]}}class aR extends(eR(\\\\\\\"pow\\\\\\\",{in:[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"]})){}class lR extends(eR(\\\\\\\"reflect\\\\\\\",{in:[\\\\\\\"I\\\\\\\",\\\\\\\"N\\\\\\\"],default_in_type:Uo.VEC3})){}class cR extends(eR(\\\\\\\"step\\\\\\\",{in:[\\\\\\\"edge\\\\\\\",\\\\\\\"x\\\\\\\"]})){}function hR(t,e={}){const n=e.method||t,i=e.out||\\\\\\\"val\\\\\\\",s=e.in||[\\\\\\\"in0\\\\\\\",\\\\\\\"in1\\\\\\\",\\\\\\\"in2\\\\\\\"],r=e.default||{},o=e.out_type||Uo.FLOAT,a=e.functions||[];return class extends OP{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_gl_input_name(t){return s[t]}_gl_output_name(t){return i}gl_method_name(){return n}_expected_output_types(){return[o]}paramDefaultValue(t){return r[t]}gl_function_definitions(){return a.map((t=>new Cf(this,t)))}}}class uR extends(hR(\\\\\\\"clamp\\\\\\\",{in:[\\\\\\\"value\\\\\\\",\\\\\\\"min\\\\\\\",\\\\\\\"max\\\\\\\"],default:{max:1}})){_expected_output_types(){return[this._expected_input_types()[0]]}}class dR extends(hR(\\\\\\\"faceForward\\\\\\\",{in:[\\\\\\\"N\\\\\\\",\\\\\\\"I\\\\\\\",\\\\\\\"Nref\\\\\\\"]})){}class pR extends(hR(\\\\\\\"smoothstep\\\\\\\",{in:[\\\\\\\"edge0\\\\\\\",\\\\\\\"edge1\\\\\\\",\\\\\\\"x\\\\\\\"],default:{edge1:1}})){_expected_output_types(){return[this._expected_input_types()[0]]}}function _R(t,e){const n=e.in_prefix||t,i=e.out||\\\\\\\"val\\\\\\\",s=e.operation,r=e.allowed_in_types;return class extends LP{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=this.io.inputs.namedInputConnectionPoints().map(((t,e)=>{const n=t.name(),i=this.variableForInput(n);if(i)return mf.any(i)})).join(` ${this.gl_operation()} `),i=`${e} ${this.glVarName(this.io.connection_points.output_name(0))} = ${this.gl_method_name()}(${n})`;t.addBodyLines(this,[i])}_gl_input_name(t){return`${n}${t}`}_gl_output_name(t){return i}gl_operation(){return s}_expected_input_types(){let t=this.io.connection_points.first_input_connection_type();if(t&&r&&!r.includes(t)){const e=this.io.inputs.namedInputConnectionPoints()[0];e&&(t=e.type())}const e=t||Uo.FLOAT,n=this.io.connections.existingInputConnections(),i=n?Math.max(n.length+1,2):2,s=[];for(let t=0;t<i;t++)s.push(e);return s}_expected_output_types(){const t=this._expected_input_types();return[t[1]||t[0]||Uo.FLOAT]}}}class mR extends(_R(\\\\\\\"add\\\\\\\",{in_prefix:\\\\\\\"add\\\\\\\",out:\\\\\\\"sum\\\\\\\",operation:\\\\\\\"+\\\\\\\"})){}class fR extends(_R(\\\\\\\"divide\\\\\\\",{in_prefix:\\\\\\\"div\\\\\\\",out:\\\\\\\"divide\\\\\\\",operation:\\\\\\\"/\\\\\\\"})){paramDefaultValue(t){return 1}}class gR extends(_R(\\\\\\\"substract\\\\\\\",{in_prefix:\\\\\\\"sub\\\\\\\",out:\\\\\\\"substract\\\\\\\",operation:\\\\\\\"-\\\\\\\"})){}class vR extends(_R(\\\\\\\"mult\\\\\\\",{in_prefix:\\\\\\\"mult\\\\\\\",out:\\\\\\\"product\\\\\\\",operation:\\\\\\\"*\\\\\\\"})){static type(){return\\\\\\\"mult\\\\\\\"}paramDefaultValue(t){return 1}initializeNode(){super.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_expected_output_type(){const t=this._expected_input_types();return[t[t.length-1]]}_expected_input_types(){const t=this.io.connections.existingInputConnections();if(t){const e=t[0];if(e){const n=e.node_src.io.outputs.namedOutputConnectionPoints()[e.output_index].type(),i=Math.max(t.length+1,2),s=new Array(i);if(n==Uo.FLOAT){const e=t[1];if(e){const t=e.node_src.io.outputs.namedOutputConnectionPoints()[e.output_index].type();return t==Uo.FLOAT?s.fill(n):[n,t]}return[n,n]}return s.fill(n)}}return[Uo.FLOAT,Uo.FLOAT]}}class yR extends LP{initializeNode(){super.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_expected_input_types(){return[Uo.BOOL,Uo.BOOL]}_expected_output_types(){return[Uo.BOOL]}setLines(t){const e=this.io.inputs.namedInputConnectionPoints().map(((t,e)=>{const n=t.name();return mf.any(this.variableForInput(n))})).join(` ${this.boolean_operation()} `),n=`bool ${this.glVarName(this.io.connection_points.output_name(0))} = ${e}`;t.addBodyLines(this,[n])}}function xR(t,e){return class extends yR{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this))}boolean_operation(){return e.op}_gl_output_name(e){return t}_gl_input_name(e=0){return`${t}${e}`}}}class bR extends(xR(\\\\\\\"and\\\\\\\",{op:\\\\\\\"&&\\\\\\\"})){}class wR extends(xR(\\\\\\\"or\\\\\\\",{op:\\\\\\\"||\\\\\\\"})){}var TR;!function(t){t.TIME=\\\\\\\"time\\\\\\\",t.DELTA_TIME=\\\\\\\"delta_time\\\\\\\"}(TR||(TR={}));var AR,MR;!function(t){t.POSITION=\\\\\\\"position\\\\\\\",t.VELOCITY=\\\\\\\"velocity\\\\\\\",t.MASS=\\\\\\\"mass\\\\\\\",t.FORCE=\\\\\\\"force\\\\\\\"}(AR||(AR={})),function(t){t.POSITION=\\\\\\\"position\\\\\\\",t.VELOCITY=\\\\\\\"velocity\\\\\\\"}(MR||(MR={}));const ER=[AR.POSITION,AR.VELOCITY,AR.MASS,AR.FORCE],SR=[MR.POSITION,MR.VELOCITY],CR={[AR.POSITION]:[0,0,0],[AR.VELOCITY]:[0,0,0],[AR.MASS]:1,[AR.FORCE]:[0,-9.8,0]};const NR=new class extends ua{};class LR extends gf{constructor(){super(...arguments),this.paramsConfig=NR}static type(){return\\\\\\\"acceleration\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(MR.POSITION,Uo.VEC3),new qo(MR.VELOCITY,Uo.VEC3)]),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this))}_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Uo.VEC3;return[t,t,Uo.FLOAT,t]}_expected_output_types(){const t=this._expected_input_types()[0];return[t,t]}_gl_input_name(t){return ER[t]}_gl_output_name(t){return SR[t]}paramDefaultValue(t){return CR[t]}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=new Nf(this,Uo.FLOAT,TR.DELTA_TIME),i=new Cf(this,\\\\\\\"float compute_velocity_from_acceleration(float vel, float force, float mass, float time_delta){\\\\n\\\\tfloat impulse = (force * mass) * time_delta;\\\\n\\\\treturn vel + impulse;\\\\n}\\\\nvec2 compute_velocity_from_acceleration(vec2 vel, vec2 force, float mass, float time_delta){\\\\n\\\\tvec2 impulse = (force * mass) * time_delta;\\\\n\\\\treturn vel + impulse;\\\\n}\\\\nvec3 compute_velocity_from_acceleration(vec3 vel, vec3 force, float mass, float time_delta){\\\\n\\\\tvec3 impulse = (force * mass) * time_delta;\\\\n\\\\treturn vel + impulse;\\\\n}\\\\nvec4 compute_velocity_from_acceleration(vec4 vel, vec4 force, float mass, float time_delta){\\\\n\\\\tvec4 impulse = (force * mass) * time_delta;\\\\n\\\\treturn vel + impulse;\\\\n}\\\\nfloat compute_position_from_velocity(float position, float velocity, float time_delta){\\\\n\\\\treturn position + (velocity * time_delta);\\\\n}\\\\nvec2 compute_position_from_velocity(vec2 position, vec2 velocity, float time_delta){\\\\n\\\\treturn position + (velocity * time_delta);\\\\n}\\\\nvec3 compute_position_from_velocity(vec3 position, vec3 velocity, float time_delta){\\\\n\\\\treturn position + (velocity * time_delta);\\\\n}\\\\nvec4 compute_position_from_velocity(vec4 position, vec4 velocity, float time_delta){\\\\n\\\\treturn position + (velocity * time_delta);\\\\n}\\\\\\\");t.addDefinitions(this,[n,i]);const s=mf.any(this.variableForInput(AR.POSITION)),r=mf.any(this.variableForInput(AR.VELOCITY)),o=mf.float(this.variableForInput(AR.MASS)),a=mf.any(this.variableForInput(AR.FORCE)),l=this.glVarName(MR.POSITION),c=this.glVarName(MR.VELOCITY),h=`${e} ${c} = compute_velocity_from_acceleration(${[r,a,o,TR.DELTA_TIME].join(\\\\\\\", \\\\\\\")})`,u=`${e} ${l} = compute_position_from_velocity(${[s,c,TR.DELTA_TIME].join(\\\\\\\", \\\\\\\")})`;t.addBodyLines(this,[h,u])}}var OR,PR=\\\\\\\"\\\\n\\\\n// https://github.com/mattatz/ShibuyaCrowd/blob/master/source/shaders/common/quaternion.glsl\\\\nvec4 quatMult(vec4 q1, vec4 q2)\\\\n{\\\\n\\\\treturn vec4(\\\\n\\\\tq1.w * q2.x + q1.x * q2.w + q1.z * q2.y - q1.y * q2.z,\\\\n\\\\tq1.w * q2.y + q1.y * q2.w + q1.x * q2.z - q1.z * q2.x,\\\\n\\\\tq1.w * q2.z + q1.z * q2.w + q1.y * q2.x - q1.x * q2.y,\\\\n\\\\tq1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z\\\\n\\\\t);\\\\n}\\\\n// http://glmatrix.net/docs/quat.js.html#line97\\\\n//   let ax = a[0], ay = a[1], az = a[2], aw = a[3];\\\\n\\\\n//   let bx = b[0], by = b[1], bz = b[2], bw = b[3];\\\\n\\\\n//   out[0] = ax * bw + aw * bx + ay * bz - az * by;\\\\n\\\\n//   out[1] = ay * bw + aw * by + az * bx - ax * bz;\\\\n\\\\n//   out[2] = az * bw + aw * bz + ax * by - ay * bx;\\\\n\\\\n//   out[3] = aw * bw - ax * bx - ay * by - az * bz;\\\\n\\\\n//   return out\\\\n\\\\n\\\\n\\\\n// http://www.neilmendoza.com/glsl-rotation-about-an-arbitrary-axis/\\\\nmat4 rotationMatrix(vec3 axis, float angle)\\\\n{\\\\n\\\\taxis = normalize(axis);\\\\n\\\\tfloat s = sin(angle);\\\\n\\\\tfloat c = cos(angle);\\\\n\\\\tfloat oc = 1.0 - c;\\\\n\\\\n \\\\treturn mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s,  oc * axis.z * axis.x + axis.y * s, 0.0, oc * axis.x * axis.y + axis.z * s,  oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s,  0.0, oc * axis.z * axis.x - axis.y * s,  oc * axis.y * axis.z + axis.x * s,  oc * axis.z * axis.z + c, 0.0, 0.0, 0.0, 0.0, 1.0);\\\\n}\\\\n\\\\n// https://www.geeks3d.com/20141201/how-to-rotate-a-vertex-by-a-quaternion-in-glsl/\\\\nvec4 quatFromAxisAngle(vec3 axis, float angle)\\\\n{\\\\n\\\\tvec4 qr;\\\\n\\\\tfloat half_angle = (angle * 0.5); // * 3.14159 / 180.0;\\\\n\\\\tfloat sin_half_angle = sin(half_angle);\\\\n\\\\tqr.x = axis.x * sin_half_angle;\\\\n\\\\tqr.y = axis.y * sin_half_angle;\\\\n\\\\tqr.z = axis.z * sin_half_angle;\\\\n\\\\tqr.w = cos(half_angle);\\\\n\\\\treturn qr;\\\\n}\\\\nvec3 rotateWithAxisAngle(vec3 position, vec3 axis, float angle)\\\\n{\\\\n\\\\tvec4 q = quatFromAxisAngle(axis, angle);\\\\n\\\\tvec3 v = position.xyz;\\\\n\\\\treturn v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v);\\\\n}\\\\n// vec3 applyQuaternionToVector( vec4 q, vec3 v ){\\\\n// \\\\treturn v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\\\\n// }\\\\nvec3 rotateWithQuat( vec3 v, vec4 q )\\\\n{\\\\n\\\\t// vec4 qv = multQuat( quat, vec4(vec, 0.0) );\\\\n\\\\t// return multQuat( qv, vec4(-quat.x, -quat.y, -quat.z, quat.w) ).xyz;\\\\n\\\\treturn v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\\\\n}\\\\n// https://github.com/glslify/glsl-look-at/blob/gh-pages/index.glsl\\\\n// mat3 rotation_matrix(vec3 origin, vec3 target, float roll) {\\\\n// \\\\tvec3 rr = vec3(sin(roll), cos(roll), 0.0);\\\\n// \\\\tvec3 ww = normalize(target - origin);\\\\n// \\\\tvec3 uu = normalize(cross(ww, rr));\\\\n// \\\\tvec3 vv = normalize(cross(uu, ww));\\\\n\\\\n// \\\\treturn mat3(uu, vv, ww);\\\\n// }\\\\n// mat3 rotation_matrix(vec3 target, float roll) {\\\\n// \\\\tvec3 rr = vec3(sin(roll), cos(roll), 0.0);\\\\n// \\\\tvec3 ww = normalize(target);\\\\n// \\\\tvec3 uu = normalize(cross(ww, rr));\\\\n// \\\\tvec3 vv = normalize(cross(uu, ww));\\\\n\\\\n// \\\\treturn mat3(uu, vv, ww);\\\\n// }\\\\n\\\\nfloat vectorAngle(vec3 start, vec3 dest){\\\\n\\\\tstart = normalize(start);\\\\n\\\\tdest = normalize(dest);\\\\n\\\\n\\\\tfloat cosTheta = dot(start, dest);\\\\n\\\\tvec3 c1 = cross(start, dest);\\\\n\\\\t// We use the dot product of the cross with the Y axis.\\\\n\\\\t// This is a little arbitrary, but can still give a good sense of direction\\\\n\\\\tvec3 y_axis = vec3(0.0, 1.0, 0.0);\\\\n\\\\tfloat d1 = dot(c1, y_axis);\\\\n\\\\tfloat angle = acos(cosTheta) * sign(d1);\\\\n\\\\treturn angle;\\\\n}\\\\n\\\\n// http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quaternions/#i-need-an-equivalent-of-glulookat-how-do-i-orient-an-object-towards-a-point-\\\\nvec4 vectorAlign(vec3 start, vec3 dest){\\\\n\\\\tstart = normalize(start);\\\\n\\\\tdest = normalize(dest);\\\\n\\\\n\\\\tfloat cosTheta = dot(start, dest);\\\\n\\\\tvec3 axis;\\\\n\\\\n\\\\t// if (cosTheta < -1 + 0.001f){\\\\n\\\\t// \\\\t// special case when vectors in opposite directions:\\\\n\\\\t// \\\\t// there is no ideal rotation axis\\\\n\\\\t// \\\\t// So guess one; any will do as long as it's perpendicular to start\\\\n\\\\t// \\\\taxis = cross(vec3(0.0f, 0.0f, 1.0f), start);\\\\n\\\\t// \\\\tif (length2(axis) < 0.01 ) // bad luck, they were parallel, try again!\\\\n\\\\t// \\\\t\\\\taxis = cross(vec3(1.0f, 0.0f, 0.0f), start);\\\\n\\\\n\\\\t// \\\\taxis = normalize(axis);\\\\n\\\\t// \\\\treturn gtx::quaternion::angleAxis(glm::radians(180.0f), axis);\\\\n\\\\t// }\\\\n\\\\tif(cosTheta > (1.0 - 0.0001) || cosTheta < (-1.0 + 0.0001) ){\\\\n\\\\t\\\\taxis = normalize(cross(start, vec3(0.0, 1.0, 0.0)));\\\\n\\\\t\\\\tif (length(axis) < 0.001 ){ // bad luck, they were parallel, try again!\\\\n\\\\t\\\\t\\\\taxis = normalize(cross(start, vec3(1.0, 0.0, 0.0)));\\\\n\\\\t\\\\t}\\\\n\\\\t} else {\\\\n\\\\t\\\\taxis = normalize(cross(start, dest));\\\\n\\\\t}\\\\n\\\\n\\\\tfloat angle = acos(cosTheta);\\\\n\\\\n\\\\treturn quatFromAxisAngle(axis, angle);\\\\n}\\\\nvec4 vectorAlignWithUp(vec3 start, vec3 dest, vec3 up){\\\\n\\\\tvec4 rot1 = vectorAlign(start, dest);\\\\n\\\\tup = normalize(up);\\\\n\\\\n\\\\t// Recompute desiredUp so that it's perpendicular to the direction\\\\n\\\\t// You can skip that part if you really want to force desiredUp\\\\n\\\\t// vec3 right = normalize(cross(dest, up));\\\\n\\\\t// up = normalize(cross(right, dest));\\\\n\\\\n\\\\t// Because of the 1rst rotation, the up is probably completely screwed up.\\\\n\\\\t// Find the rotation between the up of the rotated object, and the desired up\\\\n\\\\tvec3 newUp = rotateWithQuat(vec3(0.0, 1.0, 0.0), rot1);//rot1 * vec3(0.0, 1.0, 0.0);\\\\n\\\\tvec4 rot2 = vectorAlign(up, newUp);\\\\n\\\\n\\\\t// return rot1;\\\\n\\\\treturn rot2;\\\\n\\\\t// return multQuat(rot1, rot2);\\\\n\\\\t// return rot2 * rot1;\\\\n\\\\n}\\\\n\\\\n// https://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\\\\nfloat quatToAngle(vec4 q){\\\\n\\\\treturn 2.0 * acos(q.w);\\\\n}\\\\nvec3 quatToAxis(vec4 q){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tq.x / sqrt(1.0-q.w*q.w),\\\\n\\\\t\\\\tq.y / sqrt(1.0-q.w*q.w),\\\\n\\\\t\\\\tq.z / sqrt(1.0-q.w*q.w)\\\\n\\\\t);\\\\n}\\\\n\\\\nvec4 align(vec3 dir, vec3 up){\\\\n\\\\tvec3 start_dir = vec3(0.0, 0.0, 1.0);\\\\n\\\\tvec3 start_up = vec3(0.0, 1.0, 0.0);\\\\n\\\\tvec4 rot1 = vectorAlign(start_dir, dir);\\\\n\\\\tup = normalize(up);\\\\n\\\\n\\\\t// Recompute desiredUp so that it's perpendicular to the direction\\\\n\\\\t// You can skip that part if you really want to force desiredUp\\\\n\\\\tvec3 right = normalize(cross(dir, up));\\\\n\\\\tif(length(right)<0.001){\\\\n\\\\t\\\\tright = vec3(1.0, 0.0, 0.0);\\\\n\\\\t}\\\\n\\\\tup = normalize(cross(right, dir));\\\\n\\\\n\\\\t// Because of the 1rst rotation, the up is probably completely screwed up.\\\\n\\\\t// Find the rotation between the up of the rotated object, and the desired up\\\\n\\\\tvec3 newUp = rotateWithQuat(start_up, rot1);//rot1 * vec3(0.0, 1.0, 0.0);\\\\n\\\\tvec4 rot2 = vectorAlign(normalize(newUp), up);\\\\n\\\\n\\\\t// return rot1;\\\\n\\\\treturn quatMult(rot1, rot2);\\\\n\\\\t// return rot2 * rot1;\\\\n\\\\n}\\\\\\\";!function(t){t.DIR=\\\\\\\"dir\\\\\\\",t.UP=\\\\\\\"up\\\\\\\"}(OR||(OR={}));const RR=[OR.DIR,OR.UP],IR={[OR.DIR]:[0,0,1],[OR.UP]:[0,1,0]};class FR extends LP{static type(){return\\\\\\\"align\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>RR[t])),this.io.connection_points.set_expected_input_types_function((()=>[Uo.VEC3,Uo.VEC3])),this.io.connection_points.set_expected_output_types_function((()=>[Uo.VEC4]))}paramDefaultValue(t){return IR[t]}gl_method_name(){return\\\\\\\"align\\\\\\\"}gl_function_definitions(){return[new Cf(this,PR)]}}var DR;!function(t){t.LINEAR=\\\\\\\"Linear\\\\\\\",t.GAMMA=\\\\\\\"Gamma\\\\\\\",t.SRGB=\\\\\\\"sRGB\\\\\\\",t.RGBE=\\\\\\\"RGBE\\\\\\\",t.RGBM=\\\\\\\"RGBM\\\\\\\",t.RGBD=\\\\\\\"RGBD\\\\\\\",t.LogLuv=\\\\\\\"LogLuv\\\\\\\"}(DR||(DR={}));const BR=[DR.LINEAR,DR.GAMMA,DR.SRGB,DR.RGBE,DR.RGBM,DR.RGBD,DR.LogLuv];const zR=new class extends ua{constructor(){super(...arguments),this.color=ha.VECTOR4([1,1,1,1]),this.from=ha.INTEGER(BR.indexOf(DR.LINEAR),{menu:{entries:BR.map(((t,e)=>({name:t,value:e})))}}),this.to=ha.INTEGER(BR.indexOf(DR.GAMMA),{menu:{entries:BR.map(((t,e)=>({name:t,value:e})))}}),this.gammaFactor=ha.FLOAT(2.2)}};class kR extends gf{constructor(){super(...arguments),this.paramsConfig=zR}static type(){return\\\\\\\"colorCorrect\\\\\\\"}initializeNode(){this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"to\\\\\\\",\\\\\\\"from\\\\\\\"]),this.io.outputs.setNamedOutputConnectionPoints([new qo(kR.OUTPUT_NAME,Uo.VEC4)])}setLines(t){const e=BR[this.pv.from],n=BR[this.pv.to],i=this.glVarName(kR.OUTPUT_NAME),s=mf.any(this.variableForInput(kR.INPUT_NAME)),r=[];if(e!=n){const t=`${e}To${n}`,o=[];if(o.push(s),e==DR.GAMMA||n==DR.GAMMA){const t=mf.any(this.variableForInputParam(this.p.gammaFactor));o.push(t)}r.push(`vec4 ${i} = ${t}(${o.join(\\\\\\\", \\\\\\\")})`)}else r.push(`vec4 ${i} = ${s}`);t.addBodyLines(this,r)}}var UR,GR;kR.INPUT_NAME=\\\\\\\"color\\\\\\\",kR.INPUT_GAMMA_FACTOR=\\\\\\\"gammaFactor\\\\\\\",kR.OUTPUT_NAME=\\\\\\\"out\\\\\\\",function(t){t.EQUAL=\\\\\\\"Equal\\\\\\\",t.LESS_THAN=\\\\\\\"Less Than\\\\\\\",t.GREATER_THAN=\\\\\\\"Greater Than\\\\\\\",t.LESS_THAN_OR_EQUAL=\\\\\\\"Less Than Or Equal\\\\\\\",t.GREATER_THAN_OR_EQUAL=\\\\\\\"Greater Than Or Equal\\\\\\\",t.NOT_EQUAL=\\\\\\\"Not Equal\\\\\\\"}(UR||(UR={})),function(t){t.EQUAL=\\\\\\\"==\\\\\\\",t.LESS_THAN=\\\\\\\"<\\\\\\\",t.GREATER_THAN=\\\\\\\">\\\\\\\",t.LESS_THAN_OR_EQUAL=\\\\\\\"<=\\\\\\\",t.GREATER_THAN_OR_EQUAL=\\\\\\\">=\\\\\\\",t.NOT_EQUAL=\\\\\\\"!=\\\\\\\"}(GR||(GR={}));const VR=[UR.EQUAL,UR.LESS_THAN,UR.GREATER_THAN,UR.LESS_THAN_OR_EQUAL,UR.GREATER_THAN_OR_EQUAL,UR.NOT_EQUAL],HR=[GR.EQUAL,GR.LESS_THAN,GR.GREATER_THAN,GR.LESS_THAN_OR_EQUAL,GR.GREATER_THAN_OR_EQUAL,GR.NOT_EQUAL],jR=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"];const WR=new class extends ua{constructor(){super(...arguments),this.test=ha.INTEGER(0,{menu:{entries:VR.map(((t,e)=>({name:`${HR[e].padEnd(2,\\\\\\\" \\\\\\\")} (${t})`,value:e})))}})}};class qR extends gf{constructor(){super(...arguments),this.paramsConfig=WR}static type(){return\\\\\\\"compare\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"test\\\\\\\"]),this.io.connection_points.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function((t=>\\\\\\\"val\\\\\\\")),this.io.connection_points.set_expected_input_types_function(this._expected_input_type.bind(this)),this.io.connection_points.set_expected_output_types_function((()=>[Uo.BOOL]))}set_test_name(t){this.p.test.set(VR.indexOf(t))}_gl_input_name(t){return[\\\\\\\"value0\\\\\\\",\\\\\\\"value1\\\\\\\"][t]}_expected_input_type(){const t=this.io.connection_points.first_input_connection_type()||Uo.FLOAT;return[t,t]}setLines(t){const e=[],n=this.glVarName(\\\\\\\"val\\\\\\\"),i=HR[this.pv.test],s=mf.any(this.variableForInput(this._gl_input_name(0))),r=mf.any(this.variableForInput(this._gl_input_name(1))),o=this.io.inputs.namedInputConnectionPoints()[0];let a=1;if(o&&(a=Wo[o.type()]||1),a>1){let t=[];for(let n=0;n<a;n++){const o=this.glVarName(`tmp_value_${n}`),a=jR[n];t.push(o),e.push(`bool ${o} = (${s}.${a} ${i} ${r}.${a})`)}e.push(`bool ${n} = (${t.join(\\\\\\\" && \\\\\\\")})`)}else e.push(`bool ${n} = (${s} ${i} ${r})`);t.addBodyLines(this,e)}}class XR extends NP{static type(){return\\\\\\\"complement\\\\\\\"}gl_method_name(){return\\\\\\\"complement\\\\\\\"}gl_function_definitions(){return[new Cf(this,\\\\\\\"float complement(float x){return 1.0-x;}\\\\nvec2 complement(vec2 x){return vec2(1.0-x.x, 1.0-x.y);}\\\\nvec3 complement(vec3 x){return vec3(1.0-x.x, 1.0-x.y, 1.0-x.z);}\\\\nvec4 complement(vec4 x){return vec4(1.0-x.x, 1.0-x.y, 1.0-x.z, 1.0-x.w);}\\\\n\\\\\\\")]}}function YR(t){return{visibleIf:{type:Go.indexOf(t)}}}const $R=new class extends ua{constructor(){super(...arguments),this.type=ha.INTEGER(Go.indexOf(Uo.FLOAT),{menu:{entries:Go.map(((t,e)=>({name:t,value:e})))}}),this.bool=ha.BOOLEAN(0,YR(Uo.BOOL)),this.int=ha.INTEGER(0,YR(Uo.INT)),this.float=ha.FLOAT(0,YR(Uo.FLOAT)),this.vec2=ha.VECTOR2([0,0],YR(Uo.VEC2)),this.vec3=ha.VECTOR3([0,0,0],YR(Uo.VEC3)),this.vec4=ha.VECTOR4([0,0,0,0],YR(Uo.VEC4))}};class JR extends gf{constructor(){super(...arguments),this.paramsConfig=$R,this._allow_inputs_created_from_params=!1}static type(){return\\\\\\\"constant\\\\\\\"}initializeNode(){this.io.connection_points.set_output_name_function((t=>JR.OUTPUT_NAME)),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[this._current_connection_type]))}setLines(t){const e=this._current_param;if(e){const n=this._current_connection_type;let i=mf.any(e.value);e.name()==this.p.int.name()&&m.isNumber(e.value)&&(i=mf.integer(e.value));const s=`${n} ${this._current_var_name} = ${i}`;t.addBodyLines(this,[s])}else console.warn(`no param found for constant node for type '${this.pv.type}'`)}get _current_connection_type(){null==this.pv.type&&console.warn(\\\\\\\"constant gl node type if not valid\\\\\\\");const t=Go[this.pv.type];return null==t&&console.warn(\\\\\\\"constant gl node type if not valid\\\\\\\"),t}get _current_param(){this._params_by_type=this._params_by_type||new Map([[Uo.BOOL,this.p.bool],[Uo.INT,this.p.int],[Uo.FLOAT,this.p.float],[Uo.VEC2,this.p.vec2],[Uo.VEC3,this.p.vec3],[Uo.VEC4,this.p.vec4]]);const t=Go[this.pv.type];return this._params_by_type.get(t)}get _current_var_name(){return this.glVarName(JR.OUTPUT_NAME)}set_gl_type(t){this.p.type.set(Go.indexOf(t))}}JR.OUTPUT_NAME=\\\\\\\"val\\\\\\\";const ZR=\\\\\\\"cross\\\\\\\";const KR=new class extends ua{constructor(){super(...arguments),this.x=ha.VECTOR3([0,0,1]),this.y=ha.VECTOR3([0,1,0])}};class QR extends gf{constructor(){super(...arguments),this.paramsConfig=KR}static type(){return\\\\\\\"cross\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(ZR,Uo.VEC3)])}setLines(t){const e=mf.float(this.variableForInputParam(this.p.x)),n=mf.float(this.variableForInputParam(this.p.y)),i=`vec3 ${this.glVarName(ZR)} = cross(${e}, ${n})`;t.addBodyLines(this,[i])}}class tI extends(hR(\\\\\\\"cycle\\\\\\\",{in:[\\\\\\\"in\\\\\\\",\\\\\\\"min\\\\\\\",\\\\\\\"max\\\\\\\"],default:{max:1},functions:[\\\\\\\"float cycle(float val, float val_min, float val_max){\\\\n\\\\tif(val >= val_min && val < val_max){\\\\n\\\\t\\\\treturn val;\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat range = val_max - val_min;\\\\n\\\\t\\\\tif(val >= val_max){\\\\n\\\\t\\\\t\\\\tfloat delta = (val - val_max);\\\\n\\\\t\\\\t\\\\treturn val_min + mod(delta, range);\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tfloat delta = (val_min - val);\\\\n\\\\t\\\\t\\\\treturn val_max - mod(delta, range);\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n}\\\\\\\"]})){}var eI=\\\\\\\"float disk_feather(float dist, float radius, float feather){\\\\n\\\\tif(feather <= 0.0){\\\\n\\\\t\\\\tif(dist < radius){return 1.0;}else{return 0.0;}\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat half_feather = feather * 0.5;\\\\n\\\\t\\\\tif(dist < (radius - half_feather)){\\\\n\\\\t\\\\t\\\\treturn 1.0;\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tif(dist > (radius + half_feather)){\\\\n\\\\t\\\\t\\\\t\\\\treturn 0.0;\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tfloat feather_start = (radius - half_feather);\\\\n\\\\t\\\\t\\\\t\\\\tfloat blend = 1.0 - (dist - feather_start) / feather;\\\\n\\\\t\\\\t\\\\t\\\\treturn blend;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n}\\\\n\\\\nfloat disk2d(vec2 pos, vec2 center, float radius, float feather){\\\\n\\\\tfloat dist = distance(pos, center);\\\\n\\\\treturn disk_feather(dist, radius, feather);\\\\n}\\\\n\\\\n// function could be called sphere, but is an overload of disk, and is the same\\\\nfloat disk3d(vec3 pos, vec3 center, float radius, float feather){\\\\n\\\\tfloat dist = distance(pos, center);\\\\n\\\\treturn disk_feather(dist, radius, feather);\\\\n}\\\\\\\";const nI=new class extends ua{constructor(){super(...arguments),this.position=ha.VECTOR2([0,0]),this.center=ha.VECTOR2([0,0]),this.radius=ha.FLOAT(1),this.feather=ha.FLOAT(.1)}};class iI extends gf{constructor(){super(...arguments),this.paramsConfig=nI}static type(){return\\\\\\\"disk\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"float\\\\\\\",Uo.FLOAT)])}setLines(t){const e=mf.vector2(this.variableForInputParam(this.p.position)),n=mf.vector2(this.variableForInputParam(this.p.center)),i=mf.float(this.variableForInputParam(this.p.radius)),s=mf.float(this.variableForInputParam(this.p.feather)),r=`float ${this.glVarName(\\\\\\\"float\\\\\\\")} = disk2d(${e}, ${n}, ${i}, ${s})`;t.addBodyLines(this,[r]),t.addDefinitions(this,[new Cf(this,eI)])}}var sI=\\\\\\\"\\\\nfloat bounceOut(float t) {\\\\n  const float a = 4.0 / 11.0;\\\\n  const float b = 8.0 / 11.0;\\\\n  const float c = 9.0 / 10.0;\\\\n\\\\n  const float ca = 4356.0 / 361.0;\\\\n  const float cb = 35442.0 / 1805.0;\\\\n  const float cc = 16061.0 / 1805.0;\\\\n\\\\n  float t2 = t * t;\\\\n\\\\n  return t < a\\\\n    ? 7.5625 * t2\\\\n    : t < b\\\\n      ? 9.075 * t2 - 9.9 * t + 3.4\\\\n      : t < c\\\\n        ? ca * t2 - cb * t + cc\\\\n        : 10.8 * t * t - 20.52 * t + 10.72;\\\\n}\\\\n\\\\n\\\\\\\";const rI=[\\\\\\\"back-in-out\\\\\\\",\\\\\\\"back-in\\\\\\\",\\\\\\\"back-out\\\\\\\",\\\\\\\"bounce-in-out\\\\\\\",\\\\\\\"bounce-in\\\\\\\",\\\\\\\"bounce-out\\\\\\\",\\\\\\\"circular-in-out\\\\\\\",\\\\\\\"circular-in\\\\\\\",\\\\\\\"circular-out\\\\\\\",\\\\\\\"cubic-in-out\\\\\\\",\\\\\\\"cubic-in\\\\\\\",\\\\\\\"cubic-out\\\\\\\",\\\\\\\"elastic-in-out\\\\\\\",\\\\\\\"elastic-in\\\\\\\",\\\\\\\"elastic-out\\\\\\\",\\\\\\\"exponential-in-out\\\\\\\",\\\\\\\"exponential-in\\\\\\\",\\\\\\\"exponential-out\\\\\\\",\\\\\\\"linear\\\\\\\",\\\\\\\"quadratic-in-out\\\\\\\",\\\\\\\"quadratic-in\\\\\\\",\\\\\\\"quadratic-out\\\\\\\",\\\\\\\"sine-in-out\\\\\\\",\\\\\\\"sine-in\\\\\\\",\\\\\\\"sine-out\\\\\\\"],oI={\\\\\\\"circular-in-out\\\\\\\":\\\\\\\"float circularInOut(float t) {\\\\n  return t < 0.5\\\\n    ? 0.5 * (1.0 - sqrt(1.0 - 4.0 * t * t))\\\\n    : 0.5 * (sqrt((3.0 - 2.0 * t) * (2.0 * t - 1.0)) + 1.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"exponential-in-out\\\\\\\":\\\\\\\"float exponentialInOut(float t) {\\\\n  return t == 0.0 || t == 1.0\\\\n    ? t\\\\n    : t < 0.5\\\\n      ? +0.5 * pow(2.0, (20.0 * t) - 10.0)\\\\n      : -0.5 * pow(2.0, 10.0 - (t * 20.0)) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"circular-in\\\\\\\":\\\\\\\"float circularIn(float t) {\\\\n  return 1.0 - sqrt(1.0 - t * t);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"elastic-out\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat elasticOut(float t) {\\\\n  return sin(-13.0 * (t + 1.0) * HALF_PI) * pow(2.0, -10.0 * t) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"cubic-in\\\\\\\":\\\\\\\"float cubicIn(float t) {\\\\n  return t * t * t;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"exponential-out\\\\\\\":\\\\\\\"float exponentialOut(float t) {\\\\n  return t == 1.0 ? t : 1.0 - pow(2.0, -10.0 * t);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quintic-out\\\\\\\":\\\\\\\"float quinticOut(float t) {\\\\n  return 1.0 - (pow(t - 1.0, 5.0));\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"elastic-in-out\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat elasticInOut(float t) {\\\\n  return t < 0.5\\\\n    ? 0.5 * sin(+13.0 * HALF_PI * 2.0 * t) * pow(2.0, 10.0 * (2.0 * t - 1.0))\\\\n    : 0.5 * sin(-13.0 * HALF_PI * ((2.0 * t - 1.0) + 1.0)) * pow(2.0, -10.0 * (2.0 * t - 1.0)) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",linear:\\\\\\\"float linear(float t) {\\\\n  return t;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"circular-out\\\\\\\":\\\\\\\"float circularOut(float t) {\\\\n  return sqrt((2.0 - t) * t);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"back-in-out\\\\\\\":\\\\\\\"\\\\nfloat backInOut(float t) {\\\\n  float f = t < 0.5\\\\n    ? 2.0 * t\\\\n    : 1.0 - (2.0 * t - 1.0);\\\\n\\\\n  float g = pow(f, 3.0) - f * sin(f * PI);\\\\n\\\\n  return t < 0.5\\\\n    ? 0.5 * g\\\\n    : 0.5 * (1.0 - g) + 0.5;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"back-in\\\\\\\":\\\\\\\"\\\\nfloat backIn(float t) {\\\\n  return pow(t, 3.0) - t * sin(t * PI);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"sine-in\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat sineIn(float t) {\\\\n  return sin((t - 1.0) * HALF_PI) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"back-out\\\\\\\":\\\\\\\"\\\\nfloat backOut(float t) {\\\\n  float f = 1.0 - t;\\\\n  return 1.0 - (pow(f, 3.0) - f * sin(f * PI));\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quartic-in-out\\\\\\\":\\\\\\\"float quarticInOut(float t) {\\\\n  return t < 0.5\\\\n    ? +8.0 * pow(t, 4.0)\\\\n    : -8.0 * pow(t - 1.0, 4.0) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quadratic-in\\\\\\\":\\\\\\\"float quadraticIn(float t) {\\\\n  return t * t;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"cubic-in-out\\\\\\\":\\\\\\\"float cubicInOut(float t) {\\\\n  return t < 0.5\\\\n    ? 4.0 * t * t * t\\\\n    : 0.5 * pow(2.0 * t - 2.0, 3.0) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"elastic-in\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat elasticIn(float t) {\\\\n  return sin(13.0 * t * HALF_PI) * pow(2.0, 10.0 * (t - 1.0));\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"bounce-out\\\\\\\":sI,\\\\\\\"quadratic-in-out\\\\\\\":\\\\\\\"float quadraticInOut(float t) {\\\\n  float p = 2.0 * t * t;\\\\n  return t < 0.5 ? p : -p + (4.0 * t) - 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"exponential-in\\\\\\\":\\\\\\\"float exponentialIn(float t) {\\\\n  return t == 0.0 ? t : pow(2.0, 10.0 * (t - 1.0));\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quintic-in-out\\\\\\\":\\\\\\\"float quinticInOut(float t) {\\\\n  return t < 0.5\\\\n    ? +16.0 * pow(t, 5.0)\\\\n    : -0.5 * pow(2.0 * t - 2.0, 5.0) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"sine-in-out\\\\\\\":\\\\\\\"\\\\nfloat sineInOut(float t) {\\\\n  return -0.5 * (cos(PI * t) - 1.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"cubic-out\\\\\\\":\\\\\\\"float cubicOut(float t) {\\\\n  float f = t - 1.0;\\\\n  return f * f * f + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quadratic-out\\\\\\\":\\\\\\\"float quadraticOut(float t) {\\\\n  return -t * (t - 2.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"bounce-in-out\\\\\\\":\\\\\\\"\\\\nfloat bounceInOut(float t) {\\\\n  return t < 0.5\\\\n    ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\\\\n    : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\\\\n}\\\\n\\\\n\\\\n\\\\n\\\\\\\",\\\\\\\"quintic-in\\\\\\\":\\\\\\\"float quinticIn(float t) {\\\\n  return pow(t, 5.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quartic-in\\\\\\\":\\\\\\\"float quarticIn(float t) {\\\\n  return pow(t, 4.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quartic-out\\\\\\\":\\\\\\\"float quarticOut(float t) {\\\\n  return pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"bounce-in\\\\\\\":\\\\\\\"\\\\nfloat bounceIn(float t) {\\\\n  return 1.0 - bounceOut(1.0 - t);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"sine-out\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat sineOut(float t) {\\\\n  return sin(t * HALF_PI);\\\\n}\\\\n\\\\n\\\\\\\"},aI={\\\\\\\"bounce-in\\\\\\\":[sI],\\\\\\\"bounce-in-out\\\\\\\":[sI]},lI={\\\\\\\"circular-in-out\\\\\\\":\\\\\\\"circularInOut\\\\\\\",\\\\\\\"exponential-in-out\\\\\\\":\\\\\\\"exponentialInOut\\\\\\\",\\\\\\\"circular-in\\\\\\\":\\\\\\\"circularIn\\\\\\\",\\\\\\\"elastic-out\\\\\\\":\\\\\\\"elasticOut\\\\\\\",\\\\\\\"cubic-in\\\\\\\":\\\\\\\"cubicIn\\\\\\\",\\\\\\\"exponential-out\\\\\\\":\\\\\\\"exponentialOut\\\\\\\",\\\\\\\"quintic-out\\\\\\\":\\\\\\\"quinticOut\\\\\\\",\\\\\\\"elastic-in-out\\\\\\\":\\\\\\\"elasticInOut\\\\\\\",linear:\\\\\\\"linear\\\\\\\",\\\\\\\"circular-out\\\\\\\":\\\\\\\"circularOut\\\\\\\",\\\\\\\"back-in-out\\\\\\\":\\\\\\\"backInOut\\\\\\\",\\\\\\\"back-in\\\\\\\":\\\\\\\"backIn\\\\\\\",\\\\\\\"sine-in\\\\\\\":\\\\\\\"sineIn\\\\\\\",\\\\\\\"back-out\\\\\\\":\\\\\\\"backOut\\\\\\\",\\\\\\\"quartic-in-out\\\\\\\":\\\\\\\"quarticInOut\\\\\\\",\\\\\\\"quadratic-in\\\\\\\":\\\\\\\"quadraticIn\\\\\\\",\\\\\\\"cubic-in-out\\\\\\\":\\\\\\\"cubicInOut\\\\\\\",\\\\\\\"elastic-in\\\\\\\":\\\\\\\"elasticIn\\\\\\\",\\\\\\\"bounce-out\\\\\\\":\\\\\\\"bounceOut\\\\\\\",\\\\\\\"quadratic-in-out\\\\\\\":\\\\\\\"quadraticInOut\\\\\\\",\\\\\\\"exponential-in\\\\\\\":\\\\\\\"exponentialIn\\\\\\\",\\\\\\\"quintic-in-out\\\\\\\":\\\\\\\"quinticInOut\\\\\\\",\\\\\\\"sine-in-out\\\\\\\":\\\\\\\"sineInOut\\\\\\\",\\\\\\\"cubic-out\\\\\\\":\\\\\\\"cubicOut\\\\\\\",\\\\\\\"quadratic-out\\\\\\\":\\\\\\\"quadraticOut\\\\\\\",\\\\\\\"bounce-in-out\\\\\\\":\\\\\\\"bounceInOut\\\\\\\",\\\\\\\"quintic-in\\\\\\\":\\\\\\\"quinticIn\\\\\\\",\\\\\\\"quartic-in\\\\\\\":\\\\\\\"quarticIn\\\\\\\",\\\\\\\"quartic-out\\\\\\\":\\\\\\\"quarticOut\\\\\\\",\\\\\\\"bounce-in\\\\\\\":\\\\\\\"bounceIn\\\\\\\",\\\\\\\"sine-out\\\\\\\":\\\\\\\"sineOut\\\\\\\"},cI=rI.indexOf(\\\\\\\"sine-in-out\\\\\\\");const hI=new class extends ua{constructor(){super(...arguments),this.type=ha.INTEGER(cI,{menu:{entries:rI.map(((t,e)=>({name:t,value:e})))}}),this.input=ha.FLOAT(0)}};class uI extends gf{constructor(){super(...arguments),this.paramsConfig=hI}static type(){return\\\\\\\"easing\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"type\\\\\\\"]),this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"out\\\\\\\",Uo.FLOAT)])}setLines(t){const e=rI[this.pv.type],n=lI[e];let i=[new Cf(this,oI[e])];const s=(aI[e]||[]).map((t=>new Cf(this,t)));s&&(i=s.concat(i));const r=mf.float(this.variableForInputParam(this.p.input)),o=`float ${this.glVarName(\\\\\\\"out\\\\\\\")} = ${n}(${r})`;t.addDefinitions(this,i),t.addBodyLines(this,[o])}}var dI=\\\\\\\"//\\\\n//\\\\n// FIT\\\\n//\\\\n//\\\\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\\\\n\\\\tfloat src_range = srcMax - srcMin;\\\\n\\\\tfloat dest_range = destMax - destMin;\\\\n\\\\n\\\\tfloat r = (val - srcMin) / src_range;\\\\n\\\\treturn (r * dest_range) + destMin;\\\\n}\\\\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\\\\n\\\\treturn vec2(\\\\n\\\\t\\\\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\\\\n\\\\t\\\\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\\\\n\\\\t);\\\\n}\\\\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\\\\n\\\\t\\\\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\\\\n\\\\t\\\\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\\\\n\\\\t);\\\\n}\\\\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\\\\n\\\\treturn vec4(\\\\n\\\\t\\\\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\\\\n\\\\t\\\\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\\\\n\\\\t\\\\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\\\\n\\\\t\\\\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\\\\n\\\\t);\\\\n}\\\\n\\\\n//\\\\n//\\\\n// FIT TO 01\\\\n// fits the range [srcMin, srcMax] to [0, 1]\\\\n//\\\\nfloat fitTo01(float val, float srcMin, float srcMax){\\\\n\\\\tfloat size = srcMax - srcMin;\\\\n\\\\treturn (val - srcMin) / size;\\\\n}\\\\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\\\\n\\\\treturn vec2(\\\\n\\\\t\\\\tfitTo01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitTo01(val.y, srcMin.y, srcMax.y)\\\\n\\\\t);\\\\n}\\\\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tfitTo01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitTo01(val.y, srcMin.y, srcMax.y),\\\\n\\\\t\\\\tfitTo01(val.z, srcMin.z, srcMax.z)\\\\n\\\\t);\\\\n}\\\\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\\\\n\\\\treturn vec4(\\\\n\\\\t\\\\tfitTo01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitTo01(val.y, srcMin.y, srcMax.y),\\\\n\\\\t\\\\tfitTo01(val.z, srcMin.z, srcMax.z),\\\\n\\\\t\\\\tfitTo01(val.w, srcMin.w, srcMax.w)\\\\n\\\\t);\\\\n}\\\\n\\\\n//\\\\n//\\\\n// FIT FROM 01\\\\n// fits the range [0, 1] to [destMin, destMax]\\\\n//\\\\nfloat fitFrom01(float val, float destMin, float destMax){\\\\n\\\\treturn fit(val, 0.0, 1.0, destMin, destMax);\\\\n}\\\\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\\\\n\\\\treturn vec2(\\\\n\\\\t\\\\tfitFrom01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitFrom01(val.y, srcMin.y, srcMax.y)\\\\n\\\\t);\\\\n}\\\\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tfitFrom01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitFrom01(val.y, srcMin.y, srcMax.y),\\\\n\\\\t\\\\tfitFrom01(val.z, srcMin.z, srcMax.z)\\\\n\\\\t);\\\\n}\\\\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\\\\n\\\\treturn vec4(\\\\n\\\\t\\\\tfitFrom01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitFrom01(val.y, srcMin.y, srcMax.y),\\\\n\\\\t\\\\tfitFrom01(val.z, srcMin.z, srcMax.z),\\\\n\\\\t\\\\tfitFrom01(val.w, srcMin.w, srcMax.w)\\\\n\\\\t);\\\\n}\\\\n\\\\n//\\\\n//\\\\n// FIT FROM 01 TO VARIANCE\\\\n// fits the range [0, 1] to [center - variance, center + variance]\\\\n//\\\\nfloat fitFrom01ToVariance(float val, float center, float variance){\\\\n\\\\treturn fitFrom01(val, center - variance, center + variance);\\\\n}\\\\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\\\\n\\\\treturn vec2(\\\\n\\\\t\\\\tfitFrom01ToVariance(val.x, center.x, variance.x),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.y, center.y, variance.y)\\\\n\\\\t);\\\\n}\\\\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tfitFrom01ToVariance(val.x, center.x, variance.x),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.y, center.y, variance.y),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.z, center.z, variance.z)\\\\n\\\\t);\\\\n}\\\\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\\\\n\\\\treturn vec4(\\\\n\\\\t\\\\tfitFrom01ToVariance(val.x, center.x, variance.x),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.y, center.y, variance.y),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.z, center.z, variance.z),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.w, center.w, variance.w)\\\\n\\\\t);\\\\n}\\\\\\\";const pI={srcMin:0,srcMax:1,destMin:0,destMax:1};class _I extends RP{static type(){return\\\\\\\"fit\\\\\\\"}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"srcMin\\\\\\\",\\\\\\\"srcMax\\\\\\\",\\\\\\\"destMin\\\\\\\",\\\\\\\"destMax\\\\\\\"][t]}paramDefaultValue(t){return pI[t]}gl_method_name(){return\\\\\\\"fit\\\\\\\"}gl_function_definitions(){return[new Cf(this,dI)]}}const mI={srcMin:0,srcMax:1};class fI extends OP{static type(){return\\\\\\\"fitTo01\\\\\\\"}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"srcMin\\\\\\\",\\\\\\\"srcMax\\\\\\\"][t]}paramDefaultValue(t){return mI[t]}gl_method_name(){return\\\\\\\"fitTo01\\\\\\\"}gl_function_definitions(){return[new Cf(this,dI)]}}const gI={destMin:0,destMax:1};class vI extends OP{static type(){return\\\\\\\"fitFrom01\\\\\\\"}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"destMin\\\\\\\",\\\\\\\"destMax\\\\\\\"][t]}paramDefaultValue(t){return gI[t]}gl_method_name(){return\\\\\\\"fitFrom01\\\\\\\"}gl_function_definitions(){return[new Cf(this,dI)]}}const yI={center:.5,variance:.5};class xI extends OP{static type(){return\\\\\\\"fitFrom01ToVariance\\\\\\\"}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"center\\\\\\\",\\\\\\\"variance\\\\\\\"][t]}paramDefaultValue(t){return yI[t]}gl_method_name(){return\\\\\\\"fitFrom01ToVariance\\\\\\\"}gl_function_definitions(){return[new Cf(this,dI)]}}const bI=\\\\\\\"color\\\\\\\";const wI=new class extends ua{constructor(){super(...arguments),this.mvPosition=ha.VECTOR4([0,0,0,0]),this.baseColor=ha.COLOR([0,0,0]),this.fogColor=ha.COLOR([1,1,1]),this.near=ha.FLOAT(0),this.far=ha.FLOAT(0)}};class TI extends gf{constructor(){super(...arguments),this.paramsConfig=wI}static type(){return\\\\\\\"fog\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(bI,Uo.VEC3)])}setLines(t){if(t.current_shader_name==Mf.FRAGMENT){const e=this.glVarName(this.name()),n=new Lf(this,Uo.VEC4,e),i=`${e} = modelViewMatrix * vec4(position, 1.0)`;t.addDefinitions(this,[n],Mf.VERTEX),t.addBodyLines(this,[i],Mf.VERTEX);const s=new Cf(this,\\\\\\\"vec3 compute_fog(vec4 mvPosition, vec3 base_color, vec3 fog_color, float near, float far) {\\\\n\\\\tfloat blend = (-mvPosition.z - near) / (far - near);\\\\n\\\\tblend = clamp(blend, 0.0, 1.0);\\\\n\\\\treturn blend * fog_color + (1.0 - blend) * base_color;\\\\n}\\\\\\\"),r=mf.vector4(this.variableForInputParam(this.p.mvPosition)),o=mf.vector3(this.variableForInputParam(this.p.baseColor)),a=mf.vector3(this.variableForInputParam(this.p.fogColor)),l=mf.vector3(this.variableForInputParam(this.p.near)),c=mf.vector3(this.variableForInputParam(this.p.far)),h=`vec3 ${this.glVarName(bI)} = compute_fog(${[r,o,a,l,c].join(\\\\\\\", \\\\\\\")})`;t.addDefinitions(this,[n,s]),t.addBodyLines(this,[h])}}}const AI=new class extends ua{};class MI extends gf{constructor(){super(...arguments),this.paramsConfig=AI}static type(){return ns.OUTPUT}initializeNode(){this.io.connection_points.set_input_name_function(this._expected_input_name.bind(this)),this.io.connection_points.set_expected_output_types_function((()=>[])),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_create_spare_params_from_inputs(!1),this.addPostDirtyHook(\\\\\\\"setParentDirty\\\\\\\",(()=>{var t;null===(t=this.parent())||void 0===t||t.setDirty(this)}))}parent(){return super.parent()}_expected_input_name(t){const e=this.parent();return(null==e?void 0:e.child_expected_output_connection_point_name(t))||`in${t}`}_expected_input_types(){const t=this.parent();return(null==t?void 0:t.child_expected_output_connection_point_types())||[]}setLines(t){const e=this.parent();if(!e)return;const n=[],i=this.io.connections.inputConnections();if(i)for(let t of i)if(t){const i=t.dest_connection_point(),s=mf.any(this.variableForInput(i.name())),r=`\\\\t${e.glVarName(i.name())} = ${s}`;n.push(r)}t.addBodyLines(this,n),e.set_lines_block_end(t,this)}}class EI extends gf{constructor(){super(...arguments),this._children_controller_context=ts.GL}initializeNode(){var t;null===(t=this.childrenController)||void 0===t||t.set_output_node_find_method((()=>this.nodesByType(MI.type())[0])),this.io.connection_points.set_input_name_function(this._expected_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._expected_output_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_expected_inputs_count(){const t=this.io.connections.inputConnections();return t?t.length+1:1}_expected_input_types(){const t=[],e=Uo.FLOAT,n=this.io.connections.inputConnections(),i=this._expected_inputs_count();for(let s=0;s<i;s++)if(n){const i=n[s];if(i){const e=i.src_connection_point().type();t.push(e)}else t.push(e)}else t.push(e);return t}_expected_output_types(){const t=[],e=this._expected_input_types();for(let n=0;n<e.length;n++)t.push(e[n]);return t}_expected_input_name(t){const e=this.io.connections.inputConnection(t);if(e){return e.src_connection_point().name()}return`in${t}`}_expected_output_name(t){return this._expected_input_name(t)}child_expected_input_connection_point_types(){return this._expected_input_types()}child_expected_output_connection_point_types(){return this._expected_output_types()}child_expected_input_connection_point_name(t){return this._expected_input_name(t)}child_expected_output_connection_point_name(t){return this._expected_output_name(t)}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}set_lines_block_start(t,e){const n=[],i=this.io.inputs.namedInputConnectionPoints();for(let t=0;t<i.length;t++){const e=i[t],s=`${e.type()} ${this.glVarName(e.name())} = ${mf.any(this.variableForInput(e.name()))}`;n.push(s)}n.push(\\\\\\\"if(true){\\\\\\\");const s=this.io.connections.inputConnections();if(s)for(let t of s)if(t){const i=t.dest_connection_point(),s=mf.any(this.variableForInput(i.name())),r=`\\\\t${i.type()} ${e.glVarName(i.name())} = ${s}`;n.push(r)}t.addBodyLines(e,n)}set_lines_block_end(t,e){t.addBodyLines(e,[\\\\\\\"}\\\\\\\"])}setLines(t){}}const SI=new class extends ua{};class CI extends EI{constructor(){super(...arguments),this.paramsConfig=SI}static type(){return\\\\\\\"subnet\\\\\\\"}}var NI;!function(t){t.START_INDEX=\\\\\\\"i\\\\\\\",t.MAX=\\\\\\\"max\\\\\\\",t.STEP=\\\\\\\"step\\\\\\\"}(NI||(NI={}));const LI={[NI.START_INDEX]:0,[NI.MAX]:10,[NI.STEP]:1};const OI=new class extends ua{constructor(){super(...arguments),this.start=ha.FLOAT(0),this.max=ha.FLOAT(10,{range:[0,100],rangeLocked:[!1,!1]}),this.step=ha.FLOAT(1)}};class PI extends EI{constructor(){super(...arguments),this.paramsConfig=OI}static type(){return\\\\\\\"forLoop\\\\\\\"}paramDefaultValue(t){return LI[t]}_expected_inputs_count(){const t=this.io.connections.inputConnections();return t?t.length+1:1}_expected_input_types(){const t=[],e=Uo.FLOAT,n=this.io.connections.inputConnections(),i=this._expected_inputs_count();for(let s=0;s<i;s++)if(n){const i=n[s];if(i){const e=i.src_connection_point().type();t.push(e)}else t.push(e)}else t.push(e);return t}_expected_output_types(){const t=[],e=this._expected_input_types();for(let n=0;n<e.length;n++)t.push(e[n]);return t}_expected_input_name(t){const e=this.io.connections.inputConnection(t);if(e){return e.src_connection_point().name()}return`in${t}`}_expected_output_name(t){return this._expected_input_name(t+0)}child_expected_input_connection_point_types(){return this._expected_input_types()}child_expected_input_connection_point_name(t){return this._expected_input_name(t)}child_expected_output_connection_point_types(){return this._expected_output_types()}child_expected_output_connection_point_name(t){return this._expected_output_name(t)}set_lines_block_start(t,e){const n=[],i=this.io.inputs.namedInputConnectionPoints();for(let t=0;t<i.length;t++){const e=i[t],s=`${e.type()} ${this.glVarName(e.name())} = ${mf.any(this.variableForInput(e.name()))}`;n.push(s)}const s=this.io.connections.inputConnections();if(s)for(let t of s)if(t&&t.input_index>=0){const e=t.dest_connection_point(),i=mf.any(this.variableForInput(e.name())),s=`${e.type()} ${this.glVarName(e.name())} = ${i}`;n.push(s)}const r=this.pv.start,o=this.pv.max,a=this.pv.step,l=mf.float(r),c=mf.float(o),h=mf.float(a),u=this.glVarName(\\\\\\\"i\\\\\\\"),d=`for(float ${u} = ${l}; ${u} < ${c}; ${u}+= ${h}){`;n.push(d);const p=`\\\\tfloat ${e.glVarName(NI.START_INDEX)} = ${u}`;if(n.push(p),s)for(let t of s)if(t&&t.input_index>=0){const i=t.dest_connection_point(),s=this.glVarName(i.name()),r=`\\\\t${i.type()} ${e.glVarName(i.name())} = ${s}`;n.push(r)}t.addBodyLines(e,n)}setLines(t){}}const RI=new class extends ua{};class II extends gf{constructor(){super(...arguments),this.paramsConfig=RI}static type(){return\\\\\\\"globals\\\\\\\"}initializeNode(){super.initializeNode(),this.lifecycle.add_on_add_hook((()=>{var t,e;null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e||e.add_globals_outputs(this)}))}setLines(t){t.assembler().set_node_lines_globals(this,t)}}const FI=new class extends ua{constructor(){super(...arguments),this.hsluv=ha.VECTOR3([1,1,1])}};class DI extends gf{constructor(){super(...arguments),this.paramsConfig=FI}static type(){return\\\\\\\"hsluvToRgb\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"rgb\\\\\\\",Uo.VEC3)])}setLines(t){const e=[],n=[];e.push(new Cf(this,\\\\\\\"// from https://github.com/williammalo/hsluv-glsl\\\\n/*\\\\nHSLUV-GLSL v4.2\\\\nHSLUV is a human-friendly alternative to HSL. ( http://www.hsluv.org )\\\\nGLSL port by William Malo ( https://github.com/williammalo )\\\\nPut this code in your fragment shader.\\\\n*/\\\\n\\\\nvec3 hsluv_intersectLineLine(vec3 line1x, vec3 line1y, vec3 line2x, vec3 line2y) {\\\\n\\\\treturn (line1y - line2y) / (line2x - line1x);\\\\n}\\\\n\\\\nvec3 hsluv_distanceFromPole(vec3 pointx,vec3 pointy) {\\\\n\\\\treturn sqrt(pointx*pointx + pointy*pointy);\\\\n}\\\\n\\\\nvec3 hsluv_lengthOfRayUntilIntersect(float theta, vec3 x, vec3 y) {\\\\n\\\\tvec3 len = y / (sin(theta) - x * cos(theta));\\\\n\\\\tif (len.r < 0.0) {len.r=1000.0;}\\\\n\\\\tif (len.g < 0.0) {len.g=1000.0;}\\\\n\\\\tif (len.b < 0.0) {len.b=1000.0;}\\\\n\\\\treturn len;\\\\n}\\\\n\\\\nfloat hsluv_maxSafeChromaForL(float L){\\\\n\\\\tmat3 m2 = mat3(\\\\n\\\\t\\\\t 3.2409699419045214  ,-0.96924363628087983 , 0.055630079696993609,\\\\n\\\\t\\\\t-1.5373831775700935  , 1.8759675015077207  ,-0.20397695888897657 ,\\\\n\\\\t\\\\t-0.49861076029300328 , 0.041555057407175613, 1.0569715142428786  \\\\n\\\\t);\\\\n\\\\tfloat sub0 = L + 16.0;\\\\n\\\\tfloat sub1 = sub0 * sub0 * sub0 * .000000641;\\\\n\\\\tfloat sub2 = sub1 > 0.0088564516790356308 ? sub1 : L / 903.2962962962963;\\\\n\\\\n\\\\tvec3 top1   = (284517.0 * m2[0] - 94839.0  * m2[2]) * sub2;\\\\n\\\\tvec3 bottom = (632260.0 * m2[2] - 126452.0 * m2[1]) * sub2;\\\\n\\\\tvec3 top2   = (838422.0 * m2[2] + 769860.0 * m2[1] + 731718.0 * m2[0]) * L * sub2;\\\\n\\\\n\\\\tvec3 bounds0x = top1 / bottom;\\\\n\\\\tvec3 bounds0y = top2 / bottom;\\\\n\\\\n\\\\tvec3 bounds1x =              top1 / (bottom+126452.0);\\\\n\\\\tvec3 bounds1y = (top2-769860.0*L) / (bottom+126452.0);\\\\n\\\\n\\\\tvec3 xs0 = hsluv_intersectLineLine(bounds0x, bounds0y, -1.0/bounds0x, vec3(0.0) );\\\\n\\\\tvec3 xs1 = hsluv_intersectLineLine(bounds1x, bounds1y, -1.0/bounds1x, vec3(0.0) );\\\\n\\\\n\\\\tvec3 lengths0 = hsluv_distanceFromPole( xs0, bounds0y + xs0 * bounds0x );\\\\n\\\\tvec3 lengths1 = hsluv_distanceFromPole( xs1, bounds1y + xs1 * bounds1x );\\\\n\\\\n\\\\treturn  min(lengths0.r,\\\\n\\\\t\\\\t\\\\tmin(lengths1.r,\\\\n\\\\t\\\\t\\\\tmin(lengths0.g,\\\\n\\\\t\\\\t\\\\tmin(lengths1.g,\\\\n\\\\t\\\\t\\\\tmin(lengths0.b,\\\\n\\\\t\\\\t\\\\t\\\\tlengths1.b)))));\\\\n}\\\\n\\\\nfloat hsluv_maxChromaForLH(float L, float H) {\\\\n\\\\n\\\\tfloat hrad = radians(H);\\\\n\\\\n\\\\tmat3 m2 = mat3(\\\\n\\\\t\\\\t 3.2409699419045214  ,-0.96924363628087983 , 0.055630079696993609,\\\\n\\\\t\\\\t-1.5373831775700935  , 1.8759675015077207  ,-0.20397695888897657 ,\\\\n\\\\t\\\\t-0.49861076029300328 , 0.041555057407175613, 1.0569715142428786  \\\\n\\\\t);\\\\n\\\\tfloat sub1 = pow(L + 16.0, 3.0) / 1560896.0;\\\\n\\\\tfloat sub2 = sub1 > 0.0088564516790356308 ? sub1 : L / 903.2962962962963;\\\\n\\\\n\\\\tvec3 top1   = (284517.0 * m2[0] - 94839.0  * m2[2]) * sub2;\\\\n\\\\tvec3 bottom = (632260.0 * m2[2] - 126452.0 * m2[1]) * sub2;\\\\n\\\\tvec3 top2   = (838422.0 * m2[2] + 769860.0 * m2[1] + 731718.0 * m2[0]) * L * sub2;\\\\n\\\\n\\\\tvec3 bound0x = top1 / bottom;\\\\n\\\\tvec3 bound0y = top2 / bottom;\\\\n\\\\n\\\\tvec3 bound1x =              top1 / (bottom+126452.0);\\\\n\\\\tvec3 bound1y = (top2-769860.0*L) / (bottom+126452.0);\\\\n\\\\n\\\\tvec3 lengths0 = hsluv_lengthOfRayUntilIntersect(hrad, bound0x, bound0y );\\\\n\\\\tvec3 lengths1 = hsluv_lengthOfRayUntilIntersect(hrad, bound1x, bound1y );\\\\n\\\\n\\\\treturn  min(lengths0.r,\\\\n\\\\t\\\\t\\\\tmin(lengths1.r,\\\\n\\\\t\\\\t\\\\tmin(lengths0.g,\\\\n\\\\t\\\\t\\\\tmin(lengths1.g,\\\\n\\\\t\\\\t\\\\tmin(lengths0.b,\\\\n\\\\t\\\\t\\\\t\\\\tlengths1.b)))));\\\\n}\\\\n\\\\nfloat hsluv_fromLinear(float c) {\\\\n\\\\treturn c <= 0.0031308 ? 12.92 * c : 1.055 * pow(c, 1.0 / 2.4) - 0.055;\\\\n}\\\\nvec3 hsluv_fromLinear(vec3 c) {\\\\n\\\\treturn vec3( hsluv_fromLinear(c.r), hsluv_fromLinear(c.g), hsluv_fromLinear(c.b) );\\\\n}\\\\n\\\\nfloat hsluv_toLinear(float c) {\\\\n\\\\treturn c > 0.04045 ? pow((c + 0.055) / (1.0 + 0.055), 2.4) : c / 12.92;\\\\n}\\\\n\\\\nvec3 hsluv_toLinear(vec3 c) {\\\\n\\\\treturn vec3( hsluv_toLinear(c.r), hsluv_toLinear(c.g), hsluv_toLinear(c.b) );\\\\n}\\\\n\\\\nfloat hsluv_yToL(float Y){\\\\n\\\\treturn Y <= 0.0088564516790356308 ? Y * 903.2962962962963 : 116.0 * pow(Y, 1.0 / 3.0) - 16.0;\\\\n}\\\\n\\\\nfloat hsluv_lToY(float L) {\\\\n\\\\treturn L <= 8.0 ? L / 903.2962962962963 : pow((L + 16.0) / 116.0, 3.0);\\\\n}\\\\n\\\\nvec3 xyzToRgb(vec3 tuple) {\\\\n\\\\tconst mat3 m = mat3( \\\\n\\\\t\\\\t3.2409699419045214  ,-1.5373831775700935 ,-0.49861076029300328 ,\\\\n\\\\t\\\\t-0.96924363628087983 , 1.8759675015077207 , 0.041555057407175613,\\\\n\\\\t\\\\t0.055630079696993609,-0.20397695888897657, 1.0569715142428786  );\\\\n\\\\t\\\\n\\\\treturn hsluv_fromLinear(tuple*m);\\\\n}\\\\n\\\\nvec3 rgbToXyz(vec3 tuple) {\\\\n\\\\tconst mat3 m = mat3(\\\\n\\\\t\\\\t0.41239079926595948 , 0.35758433938387796, 0.18048078840183429 ,\\\\n\\\\t\\\\t0.21263900587151036 , 0.71516867876775593, 0.072192315360733715,\\\\n\\\\t\\\\t0.019330818715591851, 0.11919477979462599, 0.95053215224966058 \\\\n\\\\t);\\\\n\\\\treturn hsluv_toLinear(tuple) * m;\\\\n}\\\\n\\\\nvec3 xyzToLuv(vec3 tuple){\\\\n\\\\tfloat X = tuple.x;\\\\n\\\\tfloat Y = tuple.y;\\\\n\\\\tfloat Z = tuple.z;\\\\n\\\\n\\\\tfloat L = hsluv_yToL(Y);\\\\n\\\\t\\\\n\\\\tfloat div = 1./dot(tuple,vec3(1,15,3)); \\\\n\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\t1.,\\\\n\\\\t\\\\t(52. * (X*div) - 2.57179),\\\\n\\\\t\\\\t(117.* (Y*div) - 6.08816)\\\\n\\\\t) * L;\\\\n}\\\\n\\\\n\\\\nvec3 luvToXyz(vec3 tuple) {\\\\n\\\\tfloat L = tuple.x;\\\\n\\\\n\\\\tfloat U = tuple.y / (13.0 * L) + 0.19783000664283681;\\\\n\\\\tfloat V = tuple.z / (13.0 * L) + 0.468319994938791;\\\\n\\\\n\\\\tfloat Y = hsluv_lToY(L);\\\\n\\\\tfloat X = 2.25 * U * Y / V;\\\\n\\\\tfloat Z = (3./V - 5.)*Y - (X/3.);\\\\n\\\\n\\\\treturn vec3(X, Y, Z);\\\\n}\\\\n\\\\nvec3 luvToLch(vec3 tuple) {\\\\n\\\\tfloat L = tuple.x;\\\\n\\\\tfloat U = tuple.y;\\\\n\\\\tfloat V = tuple.z;\\\\n\\\\n\\\\tfloat C = length(tuple.yz);\\\\n\\\\tfloat H = degrees(atan(V,U));\\\\n\\\\tif (H < 0.0) {\\\\n\\\\t\\\\tH = 360.0 + H;\\\\n\\\\t}\\\\n\\\\t\\\\n\\\\treturn vec3(L, C, H);\\\\n}\\\\n\\\\nvec3 lchToLuv(vec3 tuple) {\\\\n\\\\tfloat hrad = radians(tuple.b);\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\ttuple.r,\\\\n\\\\t\\\\tcos(hrad) * tuple.g,\\\\n\\\\t\\\\tsin(hrad) * tuple.g\\\\n\\\\t);\\\\n}\\\\n\\\\nvec3 hsluvToLch(vec3 tuple) {\\\\n\\\\ttuple.g *= hsluv_maxChromaForLH(tuple.b, tuple.r) * .01;\\\\n\\\\treturn tuple.bgr;\\\\n}\\\\n\\\\nvec3 lchToHsluv(vec3 tuple) {\\\\n\\\\ttuple.g /= hsluv_maxChromaForLH(tuple.r, tuple.b) * .01;\\\\n\\\\treturn tuple.bgr;\\\\n}\\\\n\\\\nvec3 hpluvToLch(vec3 tuple) {\\\\n\\\\ttuple.g *= hsluv_maxSafeChromaForL(tuple.b) * .01;\\\\n\\\\treturn tuple.bgr;\\\\n}\\\\n\\\\nvec3 lchToHpluv(vec3 tuple) {\\\\n\\\\ttuple.g /= hsluv_maxSafeChromaForL(tuple.r) * .01;\\\\n\\\\treturn tuple.bgr;\\\\n}\\\\n\\\\nvec3 lchToRgb(vec3 tuple) {\\\\n\\\\treturn xyzToRgb(luvToXyz(lchToLuv(tuple)));\\\\n}\\\\n\\\\nvec3 rgbToLch(vec3 tuple) {\\\\n\\\\treturn luvToLch(xyzToLuv(rgbToXyz(tuple)));\\\\n}\\\\n\\\\nvec3 hsluvToRgb(vec3 tuple) {\\\\n\\\\treturn lchToRgb(hsluvToLch(tuple));\\\\n}\\\\n\\\\nvec3 rgbToHsluv(vec3 tuple) {\\\\n\\\\treturn lchToHsluv(rgbToLch(tuple));\\\\n}\\\\n\\\\nvec3 hpluvToRgb(vec3 tuple) {\\\\n\\\\treturn lchToRgb(hpluvToLch(tuple));\\\\n}\\\\n\\\\nvec3 rgbToHpluv(vec3 tuple) {\\\\n\\\\treturn lchToHpluv(rgbToLch(tuple));\\\\n}\\\\n\\\\nvec3 luvToRgb(vec3 tuple){\\\\n\\\\treturn xyzToRgb(luvToXyz(tuple));\\\\n}\\\\n\\\\n// allow vec4's\\\\nvec4   xyzToRgb(vec4 c) {return vec4(   xyzToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   rgbToXyz(vec4 c) {return vec4(   rgbToXyz( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   xyzToLuv(vec4 c) {return vec4(   xyzToLuv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   luvToXyz(vec4 c) {return vec4(   luvToXyz( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   luvToLch(vec4 c) {return vec4(   luvToLch( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   lchToLuv(vec4 c) {return vec4(   lchToLuv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 hsluvToLch(vec4 c) {return vec4( hsluvToLch( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 lchToHsluv(vec4 c) {return vec4( lchToHsluv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 hpluvToLch(vec4 c) {return vec4( hpluvToLch( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 lchToHpluv(vec4 c) {return vec4( lchToHpluv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   lchToRgb(vec4 c) {return vec4(   lchToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   rgbToLch(vec4 c) {return vec4(   rgbToLch( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 hsluvToRgb(vec4 c) {return vec4( hsluvToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 rgbToHsluv(vec4 c) {return vec4( rgbToHsluv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 hpluvToRgb(vec4 c) {return vec4( hpluvToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 rgbToHpluv(vec4 c) {return vec4( rgbToHpluv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   luvToRgb(vec4 c) {return vec4(   luvToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\n// allow 3 floats\\\\nvec3   xyzToRgb(float x, float y, float z) {return   xyzToRgb( vec3(x,y,z) );}\\\\nvec3   rgbToXyz(float x, float y, float z) {return   rgbToXyz( vec3(x,y,z) );}\\\\nvec3   xyzToLuv(float x, float y, float z) {return   xyzToLuv( vec3(x,y,z) );}\\\\nvec3   luvToXyz(float x, float y, float z) {return   luvToXyz( vec3(x,y,z) );}\\\\nvec3   luvToLch(float x, float y, float z) {return   luvToLch( vec3(x,y,z) );}\\\\nvec3   lchToLuv(float x, float y, float z) {return   lchToLuv( vec3(x,y,z) );}\\\\nvec3 hsluvToLch(float x, float y, float z) {return hsluvToLch( vec3(x,y,z) );}\\\\nvec3 lchToHsluv(float x, float y, float z) {return lchToHsluv( vec3(x,y,z) );}\\\\nvec3 hpluvToLch(float x, float y, float z) {return hpluvToLch( vec3(x,y,z) );}\\\\nvec3 lchToHpluv(float x, float y, float z) {return lchToHpluv( vec3(x,y,z) );}\\\\nvec3   lchToRgb(float x, float y, float z) {return   lchToRgb( vec3(x,y,z) );}\\\\nvec3   rgbToLch(float x, float y, float z) {return   rgbToLch( vec3(x,y,z) );}\\\\nvec3 hsluvToRgb(float x, float y, float z) {return hsluvToRgb( vec3(x,y,z) );}\\\\nvec3 rgbToHsluv(float x, float y, float z) {return rgbToHsluv( vec3(x,y,z) );}\\\\nvec3 hpluvToRgb(float x, float y, float z) {return hpluvToRgb( vec3(x,y,z) );}\\\\nvec3 rgbToHpluv(float x, float y, float z) {return rgbToHpluv( vec3(x,y,z) );}\\\\nvec3   luvToRgb(float x, float y, float z) {return   luvToRgb( vec3(x,y,z) );}\\\\n// allow 4 floats\\\\nvec4   xyzToRgb(float x, float y, float z, float a) {return   xyzToRgb( vec4(x,y,z,a) );}\\\\nvec4   rgbToXyz(float x, float y, float z, float a) {return   rgbToXyz( vec4(x,y,z,a) );}\\\\nvec4   xyzToLuv(float x, float y, float z, float a) {return   xyzToLuv( vec4(x,y,z,a) );}\\\\nvec4   luvToXyz(float x, float y, float z, float a) {return   luvToXyz( vec4(x,y,z,a) );}\\\\nvec4   luvToLch(float x, float y, float z, float a) {return   luvToLch( vec4(x,y,z,a) );}\\\\nvec4   lchToLuv(float x, float y, float z, float a) {return   lchToLuv( vec4(x,y,z,a) );}\\\\nvec4 hsluvToLch(float x, float y, float z, float a) {return hsluvToLch( vec4(x,y,z,a) );}\\\\nvec4 lchToHsluv(float x, float y, float z, float a) {return lchToHsluv( vec4(x,y,z,a) );}\\\\nvec4 hpluvToLch(float x, float y, float z, float a) {return hpluvToLch( vec4(x,y,z,a) );}\\\\nvec4 lchToHpluv(float x, float y, float z, float a) {return lchToHpluv( vec4(x,y,z,a) );}\\\\nvec4   lchToRgb(float x, float y, float z, float a) {return   lchToRgb( vec4(x,y,z,a) );}\\\\nvec4   rgbToLch(float x, float y, float z, float a) {return   rgbToLch( vec4(x,y,z,a) );}\\\\nvec4 hsluvToRgb(float x, float y, float z, float a) {return hsluvToRgb( vec4(x,y,z,a) );}\\\\nvec4 rgbToHslul(float x, float y, float z, float a) {return rgbToHsluv( vec4(x,y,z,a) );}\\\\nvec4 hpluvToRgb(float x, float y, float z, float a) {return hpluvToRgb( vec4(x,y,z,a) );}\\\\nvec4 rgbToHpluv(float x, float y, float z, float a) {return rgbToHpluv( vec4(x,y,z,a) );}\\\\nvec4   luvToRgb(float x, float y, float z, float a) {return   luvToRgb( vec4(x,y,z,a) );}\\\\n\\\\n/*\\\\nEND HSLUV-GLSL\\\\n*/\\\\n\\\\n\\\\n// from https://gist.github.com/mattatz/44f081cac87e2f7c8980\\\\n// converted to glsl by gui@polygonjs.com\\\\n// and made function names consistent with the ones above\\\\n/*\\\\n * Conversion between RGB and LAB colorspace.\\\\n * Import from flowabs glsl program : https://code.google.com/p/flowabs/source/browse/glsl/?r=f36cbdcf7790a28d90f09e2cf89ec9a64911f138\\\\n */\\\\n\\\\n\\\\n\\\\nvec3 xyzToLab( vec3 c ) {\\\\n\\\\tvec3 n = c / vec3(95.047, 100, 108.883);\\\\n\\\\tvec3 v;\\\\n\\\\tv.x = ( n.x > 0.008856 ) ? pow( n.x, 1.0 / 3.0 ) : ( 7.787 * n.x ) + ( 16.0 / 116.0 );\\\\n\\\\tv.y = ( n.y > 0.008856 ) ? pow( n.y, 1.0 / 3.0 ) : ( 7.787 * n.y ) + ( 16.0 / 116.0 );\\\\n\\\\tv.z = ( n.z > 0.008856 ) ? pow( n.z, 1.0 / 3.0 ) : ( 7.787 * n.z ) + ( 16.0 / 116.0 );\\\\n\\\\treturn vec3(( 116.0 * v.y ) - 16.0, 500.0 * ( v.x - v.y ), 200.0 * ( v.y - v.z ));\\\\n}\\\\n\\\\nvec3 rgbToLab( vec3 c ) {\\\\n\\\\tvec3 lab = xyzToLab( rgbToXyz( c ) );\\\\n\\\\treturn vec3( lab.x / 100.0, 0.5 + 0.5 * ( lab.y / 127.0 ), 0.5 + 0.5 * ( lab.z / 127.0 ));\\\\n}\\\\n\\\\nvec3 labToXyz( vec3 c ) {\\\\n\\\\tfloat fy = ( c.x + 16.0 ) / 116.0;\\\\n\\\\tfloat fx = c.y / 500.0 + fy;\\\\n\\\\tfloat fz = fy - c.z / 200.0;\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\t 95.047 * (( fx > 0.206897 ) ? fx * fx * fx : ( fx - 16.0 / 116.0 ) / 7.787),\\\\n\\\\t\\\\t100.000 * (( fy > 0.206897 ) ? fy * fy * fy : ( fy - 16.0 / 116.0 ) / 7.787),\\\\n\\\\t\\\\t108.883 * (( fz > 0.206897 ) ? fz * fz * fz : ( fz - 16.0 / 116.0 ) / 7.787)\\\\n\\\\t);\\\\n}\\\\n\\\\n\\\\n\\\\nvec3 labToRgb( vec3 c ) {\\\\n\\\\treturn xyzToRgb( labToXyz( vec3(100.0 * c.x, 2.0 * 127.0 * (c.y - 0.5), 2.0 * 127.0 * (c.z - 0.5)) ) );\\\\n}\\\\\\\"));const i=mf.vector3(this.variableForInputParam(this.p.hsluv)),s=this.glVarName(\\\\\\\"rgb\\\\\\\");n.push(`vec3 ${s} = hsluvToRgb(${i}.x * 360.0, ${i}.y * 100.0, ${i}.z * 100.0)`),t.addDefinitions(this,e),t.addBodyLines(this,n)}}const BI=new class extends ua{constructor(){super(...arguments),this.hsv=ha.VECTOR3([1,1,1])}};class zI extends gf{constructor(){super(...arguments),this.paramsConfig=BI}static type(){return\\\\\\\"hsvToRgb\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"rgb\\\\\\\",Uo.VEC3)])}setLines(t){const e=[],n=[];e.push(new Cf(this,\\\\\\\"// https://github.com/hughsk/glsl-hsv2rgb\\\\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\\\\nvec3 hsv2rgb(vec3 c) {\\\\n\\\\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\\\\n\\\\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\\\\n\\\\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\\\\n}\\\\\\\"));const i=mf.vector3(this.variableForInputParam(this.p.hsv)),s=this.glVarName(\\\\\\\"rgb\\\\\\\");n.push(`vec3 ${s} = hsv2rgb(${i})`),t.addDefinitions(this,e),t.addBodyLines(this,n)}}const kI=\\\\\\\"condition\\\\\\\";const UI=new class extends ua{};class GI extends CI{constructor(){super(...arguments),this.paramsConfig=UI}static type(){return\\\\\\\"ifThen\\\\\\\"}_expected_inputs_count(){const t=this.io.connections.inputConnections();return t?Math.max(t.length+1,2):2}_expected_input_types(){const t=[Uo.BOOL],e=Uo.FLOAT,n=this.io.connections.inputConnections(),i=this._expected_inputs_count();for(let s=1;s<i;s++)if(n){const i=n[s];if(i){const e=i.src_connection_point().type();t.push(e)}else t.push(e)}else t.push(e);return t}_expected_output_types(){const t=[],e=this._expected_input_types();for(let n=1;n<e.length;n++)t.push(e[n]);return t}_expected_input_name(t){if(0==t)return kI;{const e=this.io.connections.inputConnection(t);if(e){return e.src_connection_point().name()}return`in${t}`}}_expected_output_name(t){return this._expected_input_name(t+1)}child_expected_input_connection_point_types(){return this._expected_output_types()}child_expected_input_connection_point_name(t){return this._expected_output_name(t)}child_expected_output_connection_point_types(){return this._expected_output_types()}child_expected_output_connection_point_name(t){return this._expected_output_name(t)}set_lines_block_start(t,e){const n=[],i=this.io.inputs.namedInputConnectionPoints();for(let t=1;t<i.length;t++){const e=i[t],s=`${e.type()} ${this.glVarName(e.name())} = ${mf.any(this.variableForInput(e.name()))}`;n.push(s)}const s=`if(${mf.any(this.variableForInput(kI))}){`;n.push(s);const r=this.io.connections.inputConnections();if(r)for(let t of r)if(t&&0!=t.input_index){const i=t.dest_connection_point(),s=mf.any(this.variableForInput(i.name())),r=`\\\\t${i.type()} ${e.glVarName(i.name())} = ${s}`;n.push(r)}t.addBodyLines(e,n)}setLines(t){}}const VI=new class extends ua{constructor(){super(...arguments),this.center=ha.VECTOR3([0,0,0]),this.cameraPos=ha.VECTOR3([0,0,0]),this.uv=ha.VECTOR2([0,0]),this.tilesCount=ha.INTEGER(8,{range:[0,32],rangeLocked:[!0,!1]}),this.offset=ha.FLOAT(0)}};class HI extends gf{constructor(){super(...arguments),this.paramsConfig=VI}static type(){return\\\\\\\"impostorUv\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"uv\\\\\\\",Uo.VEC2)])}setLines(t){const e=[];t.addDefinitions(this,[new Cf(this,PR),new Cf(this,\\\\\\\"// ANGLE_NORMALIZER = 1 / (2*PI)\\\\n# define IMPOSTOR_UV_ANGLE_NORMALIZER 0.15915494309189535\\\\nvec2 impostor_uv(vec3 center, vec3 camera_pos, vec2 imp_uv, float tiles_count, float offset){\\\\n\\\\timp_uv.x /= tiles_count;\\\\n\\\\n\\\\tcamera_pos.y = center.y;\\\\n\\\\tvec3 delta = normalize(center - camera_pos);\\\\n\\\\tvec3 angle_start = vec3(-1.0,0.0,0.0);\\\\n\\\\tfloat angle = vector_angle(delta, angle_start) + offset;\\\\n\\\\tangle *= IMPOSTOR_UV_ANGLE_NORMALIZER;\\\\n\\\\tangle *= tiles_count;\\\\n\\\\tangle = floor(angle);\\\\n\\\\tangle /= tiles_count;\\\\n\\\\timp_uv.x -= angle;\\\\n\\\\n\\\\treturn imp_uv;\\\\n}\\\\n\\\\\\\")]);const n=mf.vector3(this.variableForInputParam(this.p.center)),i=mf.vector3(this.variableForInputParam(this.p.cameraPos)),s=mf.vector2(this.variableForInputParam(this.p.uv)),r=mf.float(this.variableForInputParam(this.p.tilesCount)),o=mf.float(this.variableForInputParam(this.p.offset)),a=this.glVarName(\\\\\\\"uv\\\\\\\"),l=[n,i,s,r,o].join(\\\\\\\", \\\\\\\");e.push(`vec2 ${a} = impostor_uv(${l})`),t.addBodyLines(this,e)}}const jI=\\\\\\\"position\\\\\\\",WI=\\\\\\\"normal\\\\\\\",qI=\\\\\\\"instancePosition\\\\\\\",XI=\\\\\\\"instanceOrientation\\\\\\\",YI=\\\\\\\"instanceScale\\\\\\\";const $I=new class extends ua{constructor(){super(...arguments),this.position=ha.VECTOR3([0,0,0]),this.normal=ha.VECTOR3([0,0,1]),this.instancePosition=ha.VECTOR3([0,0,0]),this.instanceOrientation=ha.VECTOR4([0,0,0,0]),this.instanceScale=ha.VECTOR3([1,1,1])}};class JI extends gf{constructor(){super(...arguments),this.paramsConfig=$I}static type(){return\\\\\\\"instanceTransform\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(this.gl_output_name_position(),Uo.VEC3),new qo(this.gl_output_name_normal(),Uo.VEC3)])}setLines(t){const e=[],n=[];n.push(new Cf(this,PR));const i=this.io.inputs.named_input(this.p.position.name())?mf.float(this.variableForInputParam(this.p.position)):this._default_position(),s=this.io.inputs.named_input(this.p.normal.name())?mf.float(this.variableForInputParam(this.p.normal)):this._default_normal(),r=this.io.inputs.named_input(this.p.instancePosition.name())?mf.float(this.variableForInputParam(this.p.instancePosition)):this._default_instancePosition(t),o=this.io.inputs.named_input(this.p.instanceOrientation.name())?mf.float(this.variableForInputParam(this.p.instanceOrientation)):this._default_input_instanceOrientation(t),a=this.io.inputs.named_input(this.p.instanceScale.name())?mf.float(this.variableForInputParam(this.p.instanceScale)):this._default_input_instanceScale(t),l=this.glVarName(this.gl_output_name_position()),c=this.glVarName(this.gl_output_name_normal());e.push(`vec3 ${l} = vec3(${i})`),e.push(`${l} *= ${a}`),e.push(`${l} = rotateWithQuat( ${l}, ${o} )`),e.push(`${l} += ${r}`),e.push(`vec3 ${c} = vec3(${s})`),e.push(`${c} = rotateWithQuat( ${c}, ${o} )`),t.addBodyLines(this,e),t.addDefinitions(this,n)}gl_output_name_position(){return\\\\\\\"position\\\\\\\"}gl_output_name_normal(){return\\\\\\\"normal\\\\\\\"}_default_position(){return jI}_default_normal(){return WI}_default_instancePosition(t){var e;return null===(e=t.assembler().globals_handler)||void 0===e?void 0:e.read_attribute(this,Uo.VEC3,qI,t)}_default_input_instanceOrientation(t){var e;return null===(e=t.assembler().globals_handler)||void 0===e?void 0:e.read_attribute(this,Uo.VEC4,XI,t)}_default_input_instanceScale(t){var e;return null===(e=t.assembler().globals_handler)||void 0===e?void 0:e.read_attribute(this,Uo.VEC3,YI,t)}}class ZI extends NP{static type(){return\\\\\\\"length\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_gl_input_name(t){return[\\\\\\\"x\\\\\\\"][t]}gl_method_name(){return\\\\\\\"length\\\\\\\"}_expected_output_types(){return[Uo.FLOAT]}}const KI=new class extends ua{constructor(){super(...arguments),this.color=ha.VECTOR3([1,1,1])}};class QI extends gf{constructor(){super(...arguments),this.paramsConfig=KI}static type(){return\\\\\\\"luminance\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"lum\\\\\\\",Uo.FLOAT)])}setLines(t){const e=mf.vector3(this.variableForInputParam(this.p.color)),n=`float ${this.glVarName(\\\\\\\"lum\\\\\\\")} = linearToRelativeLuminance(${e})`;t.addBodyLines(this,[n])}}const tF={max:1};class eF extends LP{static type(){return\\\\\\\"maxLength\\\\\\\"}_expected_input_types(){return[this.io.connection_points.first_input_connection_type()||Uo.VEC3,Uo.FLOAT]}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"max\\\\\\\"][t]}paramDefaultValue(t){return tF[t]}gl_method_name(){return\\\\\\\"maxLength\\\\\\\"}gl_function_definitions(){return[new Cf(this,\\\\\\\"//\\\\n//\\\\n// CLAMP_LENGTH\\\\n//\\\\n//\\\\nfloat maxLength(float val, float max_l){\\\\n\\\\treturn min(val, max_l);\\\\n}\\\\nvec2 maxLength(vec2 val, float max_l){\\\\n\\\\tfloat vec_length = length(val);\\\\n\\\\tif(vec_length == 0.0){\\\\n\\\\t\\\\treturn val;\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat new_length = min(vec_length, max_l);\\\\n\\\\t\\\\treturn new_length * normalize(val);\\\\n\\\\t}\\\\n}\\\\nvec3 maxLength(vec3 val, float max_l){\\\\n\\\\tfloat vec_length = length(val);\\\\n\\\\tif(vec_length == 0.0){\\\\n\\\\t\\\\treturn val;\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat new_length = min(vec_length, max_l);\\\\n\\\\t\\\\treturn new_length * normalize(val);\\\\n\\\\t}\\\\n}\\\\nvec4 maxLength(vec4 val, float max_l){\\\\n\\\\tfloat vec_length = length(val);\\\\n\\\\tif(vec_length == 0.0){\\\\n\\\\t\\\\treturn val;\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat new_length = min(vec_length, max_l);\\\\n\\\\t\\\\treturn new_length * normalize(val);\\\\n\\\\t}\\\\n}\\\\n\\\\\\\")]}}const nF={blend:.5};class iF extends CP{static type(){return\\\\\\\"mix\\\\\\\"}gl_method_name(){return\\\\\\\"mix\\\\\\\"}paramDefaultValue(t){return nF[t]}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"value0\\\\\\\",\\\\\\\"value1\\\\\\\",\\\\\\\"blend\\\\\\\"][t])),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_gl_output_name(){return\\\\\\\"mix\\\\\\\"}_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Uo.FLOAT;return[t,t,Uo.FLOAT]}_expected_output_types(){return[this._expected_input_types()[0]]}}const sF=\\\\\\\"mvMult\\\\\\\";const rF=new class extends ua{constructor(){super(...arguments),this.vector=ha.VECTOR3([0,0,0])}};class oF extends gf{constructor(){super(...arguments),this.paramsConfig=rF}static type(){return\\\\\\\"modelViewMatrixMult\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(sF,Uo.VEC4)])}setLines(t){if(t.current_shader_name==Mf.VERTEX){const e=mf.vector3(this.variableForInputParam(this.p.vector)),n=`vec4 ${this.glVarName(sF)} = modelViewMatrix * vec4(${e}, 1.0)`;t.addBodyLines(this,[n],Mf.VERTEX)}}}const aF={mult:1};var lF;!function(t){t.VALUE=\\\\\\\"value\\\\\\\",t.PRE_ADD=\\\\\\\"preAdd\\\\\\\",t.MULT=\\\\\\\"mult\\\\\\\",t.POST_ADD=\\\\\\\"postAdd\\\\\\\"}(lF||(lF={}));class cF extends PP{static type(){return\\\\\\\"multAdd\\\\\\\"}_gl_input_name(t){return[lF.VALUE,lF.PRE_ADD,lF.MULT,lF.POST_ADD][t]}paramDefaultValue(t){return aF[t]}setLines(t){const e=mf.any(this.variableForInput(lF.VALUE)),n=mf.any(this.variableForInput(lF.PRE_ADD)),i=mf.any(this.variableForInput(lF.MULT)),s=mf.any(this.variableForInput(lF.POST_ADD)),r=this._expected_output_types()[0],o=this.io.outputs.namedOutputConnectionPoints()[0].name(),a=`${r} ${this.glVarName(o)} = (${i}*(${e} + ${n})) + ${s}`;t.addBodyLines(this,[a])}}class hF extends NP{static type(){return\\\\\\\"negate\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"in\\\\\\\"][t]))}_gl_input_name(t){return[\\\\\\\"in\\\\\\\"][t]}setLines(t){const e=mf.any(this.variableForInput(this._gl_input_name(0))),n=`${this.io.inputs.namedInputConnectionPoints()[0].type()} ${this.glVarName(this.io.connection_points.output_name(0))} = -1.0 * ${e}`;t.addBodyLines(this,[n])}}var uF;!function(t){t.CLASSIC_PERLIN_2D=\\\\\\\"Classic Perlin 2D\\\\\\\",t.CLASSIC_PERLIN_3D=\\\\\\\"Classic Perlin 3D\\\\\\\",t.CLASSIC_PERLIN_4D=\\\\\\\"Classic Perlin 4D\\\\\\\",t.NOISE_2D=\\\\\\\"noise2D\\\\\\\",t.NOISE_3D=\\\\\\\"noise3D\\\\\\\",t.NOISE_4D=\\\\\\\"noise4D\\\\\\\"}(uF||(uF={}));const dF=[uF.CLASSIC_PERLIN_2D,uF.CLASSIC_PERLIN_3D,uF.CLASSIC_PERLIN_4D,uF.NOISE_2D,uF.NOISE_3D,uF.NOISE_4D],pF={[uF.CLASSIC_PERLIN_2D]:'//\\\\n// GLSL textureless classic 2D noise \\\\\\\"cnoise\\\\\\\",\\\\n// with an RSL-style periodic variant \\\\\\\"pnoise\\\\\\\".\\\\n// Author:  Stefan Gustavson (stefan.gustavson@liu.se)\\\\n// Version: 2011-08-22\\\\n//\\\\n// Many thanks to Ian McEwan of Ashima Arts for the\\\\n// ideas for permutation and gradient selection.\\\\n//\\\\n// Copyright (c) 2011 Stefan Gustavson. All rights reserved.\\\\n// Distributed under the MIT license. See LICENSE file.\\\\n// https://github.com/stegu/webgl-noise\\\\n//\\\\n\\\\n\\\\n// Classic Perlin noise\\\\nfloat cnoise(vec2 P)\\\\n{\\\\n  vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);\\\\n  vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);\\\\n  Pi = mod289(Pi); // To avoid truncation effects in permutation\\\\n  vec4 ix = Pi.xzxz;\\\\n  vec4 iy = Pi.yyww;\\\\n  vec4 fx = Pf.xzxz;\\\\n  vec4 fy = Pf.yyww;\\\\n\\\\n  vec4 i = permute(permute(ix) + iy);\\\\n\\\\n  vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ;\\\\n  vec4 gy = abs(gx) - 0.5 ;\\\\n  vec4 tx = floor(gx + 0.5);\\\\n  gx = gx - tx;\\\\n\\\\n  vec2 g00 = vec2(gx.x,gy.x);\\\\n  vec2 g10 = vec2(gx.y,gy.y);\\\\n  vec2 g01 = vec2(gx.z,gy.z);\\\\n  vec2 g11 = vec2(gx.w,gy.w);\\\\n\\\\n  vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));\\\\n  g00 *= norm.x;  \\\\n  g01 *= norm.y;  \\\\n  g10 *= norm.z;  \\\\n  g11 *= norm.w;  \\\\n\\\\n  float n00 = dot(g00, vec2(fx.x, fy.x));\\\\n  float n10 = dot(g10, vec2(fx.y, fy.y));\\\\n  float n01 = dot(g01, vec2(fx.z, fy.z));\\\\n  float n11 = dot(g11, vec2(fx.w, fy.w));\\\\n\\\\n  vec2 fade_xy = fade(Pf.xy);\\\\n  vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);\\\\n  float n_xy = mix(n_x.x, n_x.y, fade_xy.y);\\\\n  return 2.3 * n_xy;\\\\n}\\\\n\\\\n// Classic Perlin noise, periodic variant\\\\nfloat pnoise(vec2 P, vec2 rep)\\\\n{\\\\n  vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);\\\\n  vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);\\\\n  Pi = mod(Pi, rep.xyxy); // To create noise with explicit period\\\\n  Pi = mod289(Pi);        // To avoid truncation effects in permutation\\\\n  vec4 ix = Pi.xzxz;\\\\n  vec4 iy = Pi.yyww;\\\\n  vec4 fx = Pf.xzxz;\\\\n  vec4 fy = Pf.yyww;\\\\n\\\\n  vec4 i = permute(permute(ix) + iy);\\\\n\\\\n  vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ;\\\\n  vec4 gy = abs(gx) - 0.5 ;\\\\n  vec4 tx = floor(gx + 0.5);\\\\n  gx = gx - tx;\\\\n\\\\n  vec2 g00 = vec2(gx.x,gy.x);\\\\n  vec2 g10 = vec2(gx.y,gy.y);\\\\n  vec2 g01 = vec2(gx.z,gy.z);\\\\n  vec2 g11 = vec2(gx.w,gy.w);\\\\n\\\\n  vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));\\\\n  g00 *= norm.x;  \\\\n  g01 *= norm.y;  \\\\n  g10 *= norm.z;  \\\\n  g11 *= norm.w;  \\\\n\\\\n  float n00 = dot(g00, vec2(fx.x, fy.x));\\\\n  float n10 = dot(g10, vec2(fx.y, fy.y));\\\\n  float n01 = dot(g01, vec2(fx.z, fy.z));\\\\n  float n11 = dot(g11, vec2(fx.w, fy.w));\\\\n\\\\n  vec2 fade_xy = fade(Pf.xy);\\\\n  vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);\\\\n  float n_xy = mix(n_x.x, n_x.y, fade_xy.y);\\\\n  return 2.3 * n_xy;\\\\n}\\\\n',[uF.CLASSIC_PERLIN_3D]:'//\\\\n// GLSL textureless classic 3D noise \\\\\\\"cnoise\\\\\\\",\\\\n// with an RSL-style periodic variant \\\\\\\"pnoise\\\\\\\".\\\\n// Author:  Stefan Gustavson (stefan.gustavson@liu.se)\\\\n// Version: 2011-10-11\\\\n//\\\\n// Many thanks to Ian McEwan of Ashima Arts for the\\\\n// ideas for permutation and gradient selection.\\\\n//\\\\n// Copyright (c) 2011 Stefan Gustavson. All rights reserved.\\\\n// Distributed under the MIT license. See LICENSE file.\\\\n// https://github.com/stegu/webgl-noise\\\\n//\\\\n\\\\n// Classic Perlin noise\\\\nfloat cnoise(vec3 P)\\\\n{\\\\n  vec3 Pi0 = floor(P); // Integer part for indexing\\\\n  vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1\\\\n  Pi0 = mod289(Pi0);\\\\n  Pi1 = mod289(Pi1);\\\\n  vec3 Pf0 = fract(P); // Fractional part for interpolation\\\\n  vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\\\\n  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\\\n  vec4 iy = vec4(Pi0.yy, Pi1.yy);\\\\n  vec4 iz0 = Pi0.zzzz;\\\\n  vec4 iz1 = Pi1.zzzz;\\\\n\\\\n  vec4 ixy = permute(permute(ix) + iy);\\\\n  vec4 ixy0 = permute(ixy + iz0);\\\\n  vec4 ixy1 = permute(ixy + iz1);\\\\n\\\\n  vec4 gx0 = ixy0 * (1.0 / 7.0);\\\\n  vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\\\\n  gx0 = fract(gx0);\\\\n  vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\\\\n  vec4 sz0 = step(gz0, vec4(0.0));\\\\n  gx0 -= sz0 * (step(0.0, gx0) - 0.5);\\\\n  gy0 -= sz0 * (step(0.0, gy0) - 0.5);\\\\n\\\\n  vec4 gx1 = ixy1 * (1.0 / 7.0);\\\\n  vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\\\\n  gx1 = fract(gx1);\\\\n  vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\\\\n  vec4 sz1 = step(gz1, vec4(0.0));\\\\n  gx1 -= sz1 * (step(0.0, gx1) - 0.5);\\\\n  gy1 -= sz1 * (step(0.0, gy1) - 0.5);\\\\n\\\\n  vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\\\\n  vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\\\\n  vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\\\\n  vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\\\\n  vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\\\\n  vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\\\\n  vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\\\\n  vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\\\\n\\\\n  vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\\\\n  g000 *= norm0.x;\\\\n  g010 *= norm0.y;\\\\n  g100 *= norm0.z;\\\\n  g110 *= norm0.w;\\\\n  vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\\\\n  g001 *= norm1.x;\\\\n  g011 *= norm1.y;\\\\n  g101 *= norm1.z;\\\\n  g111 *= norm1.w;\\\\n\\\\n  float n000 = dot(g000, Pf0);\\\\n  float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\\\\n  float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\\\\n  float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\\\\n  float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\\\\n  float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\\\\n  float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\\\\n  float n111 = dot(g111, Pf1);\\\\n\\\\n  vec3 fade_xyz = fade(Pf0);\\\\n  vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\\\\n  vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\\\\n  float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); \\\\n  return 2.2 * n_xyz;\\\\n}\\\\n\\\\n// Classic Perlin noise, periodic variant\\\\nfloat pnoise(vec3 P, vec3 rep)\\\\n{\\\\n  vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period\\\\n  vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period\\\\n  Pi0 = mod289(Pi0);\\\\n  Pi1 = mod289(Pi1);\\\\n  vec3 Pf0 = fract(P); // Fractional part for interpolation\\\\n  vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\\\\n  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\\\n  vec4 iy = vec4(Pi0.yy, Pi1.yy);\\\\n  vec4 iz0 = Pi0.zzzz;\\\\n  vec4 iz1 = Pi1.zzzz;\\\\n\\\\n  vec4 ixy = permute(permute(ix) + iy);\\\\n  vec4 ixy0 = permute(ixy + iz0);\\\\n  vec4 ixy1 = permute(ixy + iz1);\\\\n\\\\n  vec4 gx0 = ixy0 * (1.0 / 7.0);\\\\n  vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\\\\n  gx0 = fract(gx0);\\\\n  vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\\\\n  vec4 sz0 = step(gz0, vec4(0.0));\\\\n  gx0 -= sz0 * (step(0.0, gx0) - 0.5);\\\\n  gy0 -= sz0 * (step(0.0, gy0) - 0.5);\\\\n\\\\n  vec4 gx1 = ixy1 * (1.0 / 7.0);\\\\n  vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\\\\n  gx1 = fract(gx1);\\\\n  vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\\\\n  vec4 sz1 = step(gz1, vec4(0.0));\\\\n  gx1 -= sz1 * (step(0.0, gx1) - 0.5);\\\\n  gy1 -= sz1 * (step(0.0, gy1) - 0.5);\\\\n\\\\n  vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\\\\n  vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\\\\n  vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\\\\n  vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\\\\n  vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\\\\n  vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\\\\n  vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\\\\n  vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\\\\n\\\\n  vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\\\\n  g000 *= norm0.x;\\\\n  g010 *= norm0.y;\\\\n  g100 *= norm0.z;\\\\n  g110 *= norm0.w;\\\\n  vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\\\\n  g001 *= norm1.x;\\\\n  g011 *= norm1.y;\\\\n  g101 *= norm1.z;\\\\n  g111 *= norm1.w;\\\\n\\\\n  float n000 = dot(g000, Pf0);\\\\n  float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\\\\n  float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\\\\n  float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\\\\n  float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\\\\n  float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\\\\n  float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\\\\n  float n111 = dot(g111, Pf1);\\\\n\\\\n  vec3 fade_xyz = fade(Pf0);\\\\n  vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\\\\n  vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\\\\n  float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); \\\\n  return 2.2 * n_xyz;\\\\n}\\\\n',[uF.CLASSIC_PERLIN_4D]:'//\\\\n// GLSL textureless classic 4D noise \\\\\\\"cnoise\\\\\\\",\\\\n// with an RSL-style periodic variant \\\\\\\"pnoise\\\\\\\".\\\\n// Author:  Stefan Gustavson (stefan.gustavson@liu.se)\\\\n// Version: 2011-08-22\\\\n//\\\\n// Many thanks to Ian McEwan of Ashima Arts for the\\\\n// ideas for permutation and gradient selection.\\\\n//\\\\n// Copyright (c) 2011 Stefan Gustavson. All rights reserved.\\\\n// Distributed under the MIT license. See LICENSE file.\\\\n// https://github.com/stegu/webgl-noise\\\\n//\\\\n\\\\n\\\\n\\\\n// Classic Perlin noise\\\\nfloat cnoise(vec4 P)\\\\n{\\\\n  vec4 Pi0 = floor(P); // Integer part for indexing\\\\n  vec4 Pi1 = Pi0 + 1.0; // Integer part + 1\\\\n  Pi0 = mod289(Pi0);\\\\n  Pi1 = mod289(Pi1);\\\\n  vec4 Pf0 = fract(P); // Fractional part for interpolation\\\\n  vec4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0\\\\n  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\\\n  vec4 iy = vec4(Pi0.yy, Pi1.yy);\\\\n  vec4 iz0 = vec4(Pi0.zzzz);\\\\n  vec4 iz1 = vec4(Pi1.zzzz);\\\\n  vec4 iw0 = vec4(Pi0.wwww);\\\\n  vec4 iw1 = vec4(Pi1.wwww);\\\\n\\\\n  vec4 ixy = permute(permute(ix) + iy);\\\\n  vec4 ixy0 = permute(ixy + iz0);\\\\n  vec4 ixy1 = permute(ixy + iz1);\\\\n  vec4 ixy00 = permute(ixy0 + iw0);\\\\n  vec4 ixy01 = permute(ixy0 + iw1);\\\\n  vec4 ixy10 = permute(ixy1 + iw0);\\\\n  vec4 ixy11 = permute(ixy1 + iw1);\\\\n\\\\n  vec4 gx00 = ixy00 * (1.0 / 7.0);\\\\n  vec4 gy00 = floor(gx00) * (1.0 / 7.0);\\\\n  vec4 gz00 = floor(gy00) * (1.0 / 6.0);\\\\n  gx00 = fract(gx00) - 0.5;\\\\n  gy00 = fract(gy00) - 0.5;\\\\n  gz00 = fract(gz00) - 0.5;\\\\n  vec4 gw00 = vec4(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\\\\n  vec4 sw00 = step(gw00, vec4(0.0));\\\\n  gx00 -= sw00 * (step(0.0, gx00) - 0.5);\\\\n  gy00 -= sw00 * (step(0.0, gy00) - 0.5);\\\\n\\\\n  vec4 gx01 = ixy01 * (1.0 / 7.0);\\\\n  vec4 gy01 = floor(gx01) * (1.0 / 7.0);\\\\n  vec4 gz01 = floor(gy01) * (1.0 / 6.0);\\\\n  gx01 = fract(gx01) - 0.5;\\\\n  gy01 = fract(gy01) - 0.5;\\\\n  gz01 = fract(gz01) - 0.5;\\\\n  vec4 gw01 = vec4(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\\\\n  vec4 sw01 = step(gw01, vec4(0.0));\\\\n  gx01 -= sw01 * (step(0.0, gx01) - 0.5);\\\\n  gy01 -= sw01 * (step(0.0, gy01) - 0.5);\\\\n\\\\n  vec4 gx10 = ixy10 * (1.0 / 7.0);\\\\n  vec4 gy10 = floor(gx10) * (1.0 / 7.0);\\\\n  vec4 gz10 = floor(gy10) * (1.0 / 6.0);\\\\n  gx10 = fract(gx10) - 0.5;\\\\n  gy10 = fract(gy10) - 0.5;\\\\n  gz10 = fract(gz10) - 0.5;\\\\n  vec4 gw10 = vec4(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\\\\n  vec4 sw10 = step(gw10, vec4(0.0));\\\\n  gx10 -= sw10 * (step(0.0, gx10) - 0.5);\\\\n  gy10 -= sw10 * (step(0.0, gy10) - 0.5);\\\\n\\\\n  vec4 gx11 = ixy11 * (1.0 / 7.0);\\\\n  vec4 gy11 = floor(gx11) * (1.0 / 7.0);\\\\n  vec4 gz11 = floor(gy11) * (1.0 / 6.0);\\\\n  gx11 = fract(gx11) - 0.5;\\\\n  gy11 = fract(gy11) - 0.5;\\\\n  gz11 = fract(gz11) - 0.5;\\\\n  vec4 gw11 = vec4(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\\\\n  vec4 sw11 = step(gw11, vec4(0.0));\\\\n  gx11 -= sw11 * (step(0.0, gx11) - 0.5);\\\\n  gy11 -= sw11 * (step(0.0, gy11) - 0.5);\\\\n\\\\n  vec4 g0000 = vec4(gx00.x,gy00.x,gz00.x,gw00.x);\\\\n  vec4 g1000 = vec4(gx00.y,gy00.y,gz00.y,gw00.y);\\\\n  vec4 g0100 = vec4(gx00.z,gy00.z,gz00.z,gw00.z);\\\\n  vec4 g1100 = vec4(gx00.w,gy00.w,gz00.w,gw00.w);\\\\n  vec4 g0010 = vec4(gx10.x,gy10.x,gz10.x,gw10.x);\\\\n  vec4 g1010 = vec4(gx10.y,gy10.y,gz10.y,gw10.y);\\\\n  vec4 g0110 = vec4(gx10.z,gy10.z,gz10.z,gw10.z);\\\\n  vec4 g1110 = vec4(gx10.w,gy10.w,gz10.w,gw10.w);\\\\n  vec4 g0001 = vec4(gx01.x,gy01.x,gz01.x,gw01.x);\\\\n  vec4 g1001 = vec4(gx01.y,gy01.y,gz01.y,gw01.y);\\\\n  vec4 g0101 = vec4(gx01.z,gy01.z,gz01.z,gw01.z);\\\\n  vec4 g1101 = vec4(gx01.w,gy01.w,gz01.w,gw01.w);\\\\n  vec4 g0011 = vec4(gx11.x,gy11.x,gz11.x,gw11.x);\\\\n  vec4 g1011 = vec4(gx11.y,gy11.y,gz11.y,gw11.y);\\\\n  vec4 g0111 = vec4(gx11.z,gy11.z,gz11.z,gw11.z);\\\\n  vec4 g1111 = vec4(gx11.w,gy11.w,gz11.w,gw11.w);\\\\n\\\\n  vec4 norm00 = taylorInvSqrt(vec4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\\\\n  g0000 *= norm00.x;\\\\n  g0100 *= norm00.y;\\\\n  g1000 *= norm00.z;\\\\n  g1100 *= norm00.w;\\\\n\\\\n  vec4 norm01 = taylorInvSqrt(vec4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\\\\n  g0001 *= norm01.x;\\\\n  g0101 *= norm01.y;\\\\n  g1001 *= norm01.z;\\\\n  g1101 *= norm01.w;\\\\n\\\\n  vec4 norm10 = taylorInvSqrt(vec4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\\\\n  g0010 *= norm10.x;\\\\n  g0110 *= norm10.y;\\\\n  g1010 *= norm10.z;\\\\n  g1110 *= norm10.w;\\\\n\\\\n  vec4 norm11 = taylorInvSqrt(vec4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\\\\n  g0011 *= norm11.x;\\\\n  g0111 *= norm11.y;\\\\n  g1011 *= norm11.z;\\\\n  g1111 *= norm11.w;\\\\n\\\\n  float n0000 = dot(g0000, Pf0);\\\\n  float n1000 = dot(g1000, vec4(Pf1.x, Pf0.yzw));\\\\n  float n0100 = dot(g0100, vec4(Pf0.x, Pf1.y, Pf0.zw));\\\\n  float n1100 = dot(g1100, vec4(Pf1.xy, Pf0.zw));\\\\n  float n0010 = dot(g0010, vec4(Pf0.xy, Pf1.z, Pf0.w));\\\\n  float n1010 = dot(g1010, vec4(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\\\\n  float n0110 = dot(g0110, vec4(Pf0.x, Pf1.yz, Pf0.w));\\\\n  float n1110 = dot(g1110, vec4(Pf1.xyz, Pf0.w));\\\\n  float n0001 = dot(g0001, vec4(Pf0.xyz, Pf1.w));\\\\n  float n1001 = dot(g1001, vec4(Pf1.x, Pf0.yz, Pf1.w));\\\\n  float n0101 = dot(g0101, vec4(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\\\\n  float n1101 = dot(g1101, vec4(Pf1.xy, Pf0.z, Pf1.w));\\\\n  float n0011 = dot(g0011, vec4(Pf0.xy, Pf1.zw));\\\\n  float n1011 = dot(g1011, vec4(Pf1.x, Pf0.y, Pf1.zw));\\\\n  float n0111 = dot(g0111, vec4(Pf0.x, Pf1.yzw));\\\\n  float n1111 = dot(g1111, Pf1);\\\\n\\\\n  vec4 fade_xyzw = fade(Pf0);\\\\n  vec4 n_0w = mix(vec4(n0000, n1000, n0100, n1100), vec4(n0001, n1001, n0101, n1101), fade_xyzw.w);\\\\n  vec4 n_1w = mix(vec4(n0010, n1010, n0110, n1110), vec4(n0011, n1011, n0111, n1111), fade_xyzw.w);\\\\n  vec4 n_zw = mix(n_0w, n_1w, fade_xyzw.z);\\\\n  vec2 n_yzw = mix(n_zw.xy, n_zw.zw, fade_xyzw.y);\\\\n  float n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\\\\n  return 2.2 * n_xyzw;\\\\n}\\\\n\\\\n// Classic Perlin noise, periodic version\\\\nfloat pnoise(vec4 P, vec4 rep)\\\\n{\\\\n  vec4 Pi0 = mod(floor(P), rep); // Integer part modulo rep\\\\n  vec4 Pi1 = mod(Pi0 + 1.0, rep); // Integer part + 1 mod rep\\\\n  Pi0 = mod289(Pi0);\\\\n  Pi1 = mod289(Pi1);\\\\n  vec4 Pf0 = fract(P); // Fractional part for interpolation\\\\n  vec4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0\\\\n  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\\\n  vec4 iy = vec4(Pi0.yy, Pi1.yy);\\\\n  vec4 iz0 = vec4(Pi0.zzzz);\\\\n  vec4 iz1 = vec4(Pi1.zzzz);\\\\n  vec4 iw0 = vec4(Pi0.wwww);\\\\n  vec4 iw1 = vec4(Pi1.wwww);\\\\n\\\\n  vec4 ixy = permute(permute(ix) + iy);\\\\n  vec4 ixy0 = permute(ixy + iz0);\\\\n  vec4 ixy1 = permute(ixy + iz1);\\\\n  vec4 ixy00 = permute(ixy0 + iw0);\\\\n  vec4 ixy01 = permute(ixy0 + iw1);\\\\n  vec4 ixy10 = permute(ixy1 + iw0);\\\\n  vec4 ixy11 = permute(ixy1 + iw1);\\\\n\\\\n  vec4 gx00 = ixy00 * (1.0 / 7.0);\\\\n  vec4 gy00 = floor(gx00) * (1.0 / 7.0);\\\\n  vec4 gz00 = floor(gy00) * (1.0 / 6.0);\\\\n  gx00 = fract(gx00) - 0.5;\\\\n  gy00 = fract(gy00) - 0.5;\\\\n  gz00 = fract(gz00) - 0.5;\\\\n  vec4 gw00 = vec4(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\\\\n  vec4 sw00 = step(gw00, vec4(0.0));\\\\n  gx00 -= sw00 * (step(0.0, gx00) - 0.5);\\\\n  gy00 -= sw00 * (step(0.0, gy00) - 0.5);\\\\n\\\\n  vec4 gx01 = ixy01 * (1.0 / 7.0);\\\\n  vec4 gy01 = floor(gx01) * (1.0 / 7.0);\\\\n  vec4 gz01 = floor(gy01) * (1.0 / 6.0);\\\\n  gx01 = fract(gx01) - 0.5;\\\\n  gy01 = fract(gy01) - 0.5;\\\\n  gz01 = fract(gz01) - 0.5;\\\\n  vec4 gw01 = vec4(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\\\\n  vec4 sw01 = step(gw01, vec4(0.0));\\\\n  gx01 -= sw01 * (step(0.0, gx01) - 0.5);\\\\n  gy01 -= sw01 * (step(0.0, gy01) - 0.5);\\\\n\\\\n  vec4 gx10 = ixy10 * (1.0 / 7.0);\\\\n  vec4 gy10 = floor(gx10) * (1.0 / 7.0);\\\\n  vec4 gz10 = floor(gy10) * (1.0 / 6.0);\\\\n  gx10 = fract(gx10) - 0.5;\\\\n  gy10 = fract(gy10) - 0.5;\\\\n  gz10 = fract(gz10) - 0.5;\\\\n  vec4 gw10 = vec4(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\\\\n  vec4 sw10 = step(gw10, vec4(0.0));\\\\n  gx10 -= sw10 * (step(0.0, gx10) - 0.5);\\\\n  gy10 -= sw10 * (step(0.0, gy10) - 0.5);\\\\n\\\\n  vec4 gx11 = ixy11 * (1.0 / 7.0);\\\\n  vec4 gy11 = floor(gx11) * (1.0 / 7.0);\\\\n  vec4 gz11 = floor(gy11) * (1.0 / 6.0);\\\\n  gx11 = fract(gx11) - 0.5;\\\\n  gy11 = fract(gy11) - 0.5;\\\\n  gz11 = fract(gz11) - 0.5;\\\\n  vec4 gw11 = vec4(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\\\\n  vec4 sw11 = step(gw11, vec4(0.0));\\\\n  gx11 -= sw11 * (step(0.0, gx11) - 0.5);\\\\n  gy11 -= sw11 * (step(0.0, gy11) - 0.5);\\\\n\\\\n  vec4 g0000 = vec4(gx00.x,gy00.x,gz00.x,gw00.x);\\\\n  vec4 g1000 = vec4(gx00.y,gy00.y,gz00.y,gw00.y);\\\\n  vec4 g0100 = vec4(gx00.z,gy00.z,gz00.z,gw00.z);\\\\n  vec4 g1100 = vec4(gx00.w,gy00.w,gz00.w,gw00.w);\\\\n  vec4 g0010 = vec4(gx10.x,gy10.x,gz10.x,gw10.x);\\\\n  vec4 g1010 = vec4(gx10.y,gy10.y,gz10.y,gw10.y);\\\\n  vec4 g0110 = vec4(gx10.z,gy10.z,gz10.z,gw10.z);\\\\n  vec4 g1110 = vec4(gx10.w,gy10.w,gz10.w,gw10.w);\\\\n  vec4 g0001 = vec4(gx01.x,gy01.x,gz01.x,gw01.x);\\\\n  vec4 g1001 = vec4(gx01.y,gy01.y,gz01.y,gw01.y);\\\\n  vec4 g0101 = vec4(gx01.z,gy01.z,gz01.z,gw01.z);\\\\n  vec4 g1101 = vec4(gx01.w,gy01.w,gz01.w,gw01.w);\\\\n  vec4 g0011 = vec4(gx11.x,gy11.x,gz11.x,gw11.x);\\\\n  vec4 g1011 = vec4(gx11.y,gy11.y,gz11.y,gw11.y);\\\\n  vec4 g0111 = vec4(gx11.z,gy11.z,gz11.z,gw11.z);\\\\n  vec4 g1111 = vec4(gx11.w,gy11.w,gz11.w,gw11.w);\\\\n\\\\n  vec4 norm00 = taylorInvSqrt(vec4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\\\\n  g0000 *= norm00.x;\\\\n  g0100 *= norm00.y;\\\\n  g1000 *= norm00.z;\\\\n  g1100 *= norm00.w;\\\\n\\\\n  vec4 norm01 = taylorInvSqrt(vec4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\\\\n  g0001 *= norm01.x;\\\\n  g0101 *= norm01.y;\\\\n  g1001 *= norm01.z;\\\\n  g1101 *= norm01.w;\\\\n\\\\n  vec4 norm10 = taylorInvSqrt(vec4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\\\\n  g0010 *= norm10.x;\\\\n  g0110 *= norm10.y;\\\\n  g1010 *= norm10.z;\\\\n  g1110 *= norm10.w;\\\\n\\\\n  vec4 norm11 = taylorInvSqrt(vec4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\\\\n  g0011 *= norm11.x;\\\\n  g0111 *= norm11.y;\\\\n  g1011 *= norm11.z;\\\\n  g1111 *= norm11.w;\\\\n\\\\n  float n0000 = dot(g0000, Pf0);\\\\n  float n1000 = dot(g1000, vec4(Pf1.x, Pf0.yzw));\\\\n  float n0100 = dot(g0100, vec4(Pf0.x, Pf1.y, Pf0.zw));\\\\n  float n1100 = dot(g1100, vec4(Pf1.xy, Pf0.zw));\\\\n  float n0010 = dot(g0010, vec4(Pf0.xy, Pf1.z, Pf0.w));\\\\n  float n1010 = dot(g1010, vec4(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\\\\n  float n0110 = dot(g0110, vec4(Pf0.x, Pf1.yz, Pf0.w));\\\\n  float n1110 = dot(g1110, vec4(Pf1.xyz, Pf0.w));\\\\n  float n0001 = dot(g0001, vec4(Pf0.xyz, Pf1.w));\\\\n  float n1001 = dot(g1001, vec4(Pf1.x, Pf0.yz, Pf1.w));\\\\n  float n0101 = dot(g0101, vec4(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\\\\n  float n1101 = dot(g1101, vec4(Pf1.xy, Pf0.z, Pf1.w));\\\\n  float n0011 = dot(g0011, vec4(Pf0.xy, Pf1.zw));\\\\n  float n1011 = dot(g1011, vec4(Pf1.x, Pf0.y, Pf1.zw));\\\\n  float n0111 = dot(g0111, vec4(Pf0.x, Pf1.yzw));\\\\n  float n1111 = dot(g1111, Pf1);\\\\n\\\\n  vec4 fade_xyzw = fade(Pf0);\\\\n  vec4 n_0w = mix(vec4(n0000, n1000, n0100, n1100), vec4(n0001, n1001, n0101, n1101), fade_xyzw.w);\\\\n  vec4 n_1w = mix(vec4(n0010, n1010, n0110, n1110), vec4(n0011, n1011, n0111, n1111), fade_xyzw.w);\\\\n  vec4 n_zw = mix(n_0w, n_1w, fade_xyzw.z);\\\\n  vec2 n_yzw = mix(n_zw.xy, n_zw.zw, fade_xyzw.y);\\\\n  float n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\\\\n  return 2.2 * n_xyzw;\\\\n}\\\\n',[uF.NOISE_2D]:\\\\\\\"//\\\\n// Description : Array and textureless GLSL 2D simplex noise function.\\\\n//      Author : Ian McEwan, Ashima Arts.\\\\n//  Maintainer : stegu\\\\n//     Lastmod : 20110822 (ijm)\\\\n//     License : Copyright (C) 2011 Ashima Arts. All rights reserved.\\\\n//               Distributed under the MIT License. See LICENSE file.\\\\n//               https://github.com/ashima/webgl-noise\\\\n//               https://github.com/stegu/webgl-noise\\\\n// \\\\n\\\\n\\\\nfloat snoise(vec2 v)\\\\n  {\\\\n  const vec4 C = vec4(0.211324865405187,  // (3.0-sqrt(3.0))/6.0\\\\n                      0.366025403784439,  // 0.5*(sqrt(3.0)-1.0)\\\\n                     -0.577350269189626,  // -1.0 + 2.0 * C.x\\\\n                      0.024390243902439); // 1.0 / 41.0\\\\n// First corner\\\\n  vec2 i  = floor(v + dot(v, C.yy) );\\\\n  vec2 x0 = v -   i + dot(i, C.xx);\\\\n\\\\n// Other corners\\\\n  vec2 i1;\\\\n  //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0\\\\n  //i1.y = 1.0 - i1.x;\\\\n  i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\\\\n  // x0 = x0 - 0.0 + 0.0 * C.xx ;\\\\n  // x1 = x0 - i1 + 1.0 * C.xx ;\\\\n  // x2 = x0 - 1.0 + 2.0 * C.xx ;\\\\n  vec4 x12 = x0.xyxy + C.xxzz;\\\\n  x12.xy -= i1;\\\\n\\\\n// Permutations\\\\n  i = mod289(i); // Avoid truncation effects in permutation\\\\n  vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))\\\\n\\\\t\\\\t+ i.x + vec3(0.0, i1.x, 1.0 ));\\\\n\\\\n  vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);\\\\n  m = m*m ;\\\\n  m = m*m ;\\\\n\\\\n// Gradients: 41 points uniformly over a line, mapped onto a diamond.\\\\n// The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)\\\\n\\\\n  vec3 x = 2.0 * fract(p * C.www) - 1.0;\\\\n  vec3 h = abs(x) - 0.5;\\\\n  vec3 ox = floor(x + 0.5);\\\\n  vec3 a0 = x - ox;\\\\n\\\\n// Normalise gradients implicitly by scaling m\\\\n// Approximation of: m *= inversesqrt( a0*a0 + h*h );\\\\n  m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );\\\\n\\\\n// Compute final noise value at P\\\\n  vec3 g;\\\\n  g.x  = a0.x  * x0.x  + h.x  * x0.y;\\\\n  g.yz = a0.yz * x12.xz + h.yz * x12.yw;\\\\n  return 130.0 * dot(m, g);\\\\n}\\\\n\\\\\\\",[uF.NOISE_3D]:\\\\\\\"//\\\\n// Description : Array and textureless GLSL 2D/3D/4D simplex \\\\n//               noise functions.\\\\n//      Author : Ian McEwan, Ashima Arts.\\\\n//  Maintainer : stegu\\\\n//     Lastmod : 20110822 (ijm)\\\\n//     License : Copyright (C) 2011 Ashima Arts. All rights reserved.\\\\n//               Distributed under the MIT License. See LICENSE file.\\\\n//               https://github.com/ashima/webgl-noise\\\\n//               https://github.com/stegu/webgl-noise\\\\n// \\\\n\\\\n\\\\n\\\\nfloat snoise(vec3 v)\\\\n  { \\\\n  const vec2  C = vec2(1.0/6.0, 1.0/3.0) ;\\\\n  const vec4  D = vec4(0.0, 0.5, 1.0, 2.0);\\\\n\\\\n// First corner\\\\n  vec3 i  = floor(v + dot(v, C.yyy) );\\\\n  vec3 x0 =   v - i + dot(i, C.xxx) ;\\\\n\\\\n// Other corners\\\\n  vec3 g = step(x0.yzx, x0.xyz);\\\\n  vec3 l = 1.0 - g;\\\\n  vec3 i1 = min( g.xyz, l.zxy );\\\\n  vec3 i2 = max( g.xyz, l.zxy );\\\\n\\\\n  //   x0 = x0 - 0.0 + 0.0 * C.xxx;\\\\n  //   x1 = x0 - i1  + 1.0 * C.xxx;\\\\n  //   x2 = x0 - i2  + 2.0 * C.xxx;\\\\n  //   x3 = x0 - 1.0 + 3.0 * C.xxx;\\\\n  vec3 x1 = x0 - i1 + C.xxx;\\\\n  vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\\\\n  vec3 x3 = x0 - D.yyy;      // -1.0+3.0*C.x = -0.5 = -D.y\\\\n\\\\n// Permutations\\\\n  i = mod289(i); \\\\n  vec4 p = permute( permute( permute( \\\\n             i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\\\\n           + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) \\\\n           + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\\\\n\\\\n// Gradients: 7x7 points over a square, mapped onto an octahedron.\\\\n// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\\\\n  float n_ = 0.142857142857; // 1.0/7.0\\\\n  vec3  ns = n_ * D.wyz - D.xzx;\\\\n\\\\n  vec4 j = p - 49.0 * floor(p * ns.z * ns.z);  //  mod(p,7*7)\\\\n\\\\n  vec4 x_ = floor(j * ns.z);\\\\n  vec4 y_ = floor(j - 7.0 * x_ );    // mod(j,N)\\\\n\\\\n  vec4 x = x_ *ns.x + ns.yyyy;\\\\n  vec4 y = y_ *ns.x + ns.yyyy;\\\\n  vec4 h = 1.0 - abs(x) - abs(y);\\\\n\\\\n  vec4 b0 = vec4( x.xy, y.xy );\\\\n  vec4 b1 = vec4( x.zw, y.zw );\\\\n\\\\n  //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\\\\n  //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\\\\n  vec4 s0 = floor(b0)*2.0 + 1.0;\\\\n  vec4 s1 = floor(b1)*2.0 + 1.0;\\\\n  vec4 sh = -step(h, vec4(0.0));\\\\n\\\\n  vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\\\\n  vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\\\\n\\\\n  vec3 p0 = vec3(a0.xy,h.x);\\\\n  vec3 p1 = vec3(a0.zw,h.y);\\\\n  vec3 p2 = vec3(a1.xy,h.z);\\\\n  vec3 p3 = vec3(a1.zw,h.w);\\\\n\\\\n//Normalise gradients\\\\n  vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\\\\n  p0 *= norm.x;\\\\n  p1 *= norm.y;\\\\n  p2 *= norm.z;\\\\n  p3 *= norm.w;\\\\n\\\\n// Mix final noise value\\\\n  vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\\\\n  m = m * m;\\\\n  return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), \\\\n                                dot(p2,x2), dot(p3,x3) ) );\\\\n  }\\\\n\\\\\\\",[uF.NOISE_4D]:\\\\\\\"//\\\\n// Description : Array and textureless GLSL 2D/3D/4D simplex \\\\n//               noise functions.\\\\n//      Author : Ian McEwan, Ashima Arts.\\\\n//  Maintainer : stegu\\\\n//     Lastmod : 20110822 (ijm)\\\\n//     License : Copyright (C) 2011 Ashima Arts. All rights reserved.\\\\n//               Distributed under the MIT License. See LICENSE file.\\\\n//               https://github.com/ashima/webgl-noise\\\\n//               https://github.com/stegu/webgl-noise\\\\n// \\\\n\\\\n\\\\n\\\\n\\\\n\\\\n\\\\n\\\\nvec4 grad4(float j, vec4 ip)\\\\n  {\\\\n  const vec4 ones = vec4(1.0, 1.0, 1.0, -1.0);\\\\n  vec4 p,s;\\\\n\\\\n  p.xyz = floor( fract (vec3(j) * ip.xyz) * 7.0) * ip.z - 1.0;\\\\n  p.w = 1.5 - dot(abs(p.xyz), ones.xyz);\\\\n  s = vec4(lessThan(p, vec4(0.0)));\\\\n  p.xyz = p.xyz + (s.xyz*2.0 - 1.0) * s.www; \\\\n\\\\n  return p;\\\\n  }\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\n// (sqrt(5) - 1)/4 = F4, used once below\\\\n#define F4 0.309016994374947451\\\\n\\\\nfloat snoise(vec4 v)\\\\n  {\\\\n  const vec4  C = vec4( 0.138196601125011,  // (5 - sqrt(5))/20  G4\\\\n                        0.276393202250021,  // 2 * G4\\\\n                        0.414589803375032,  // 3 * G4\\\\n                       -0.447213595499958); // -1 + 4 * G4\\\\n\\\\n// First corner\\\\n  vec4 i  = floor(v + dot(v, vec4(F4)) );\\\\n  vec4 x0 = v -   i + dot(i, C.xxxx);\\\\n\\\\n// Other corners\\\\n\\\\n// Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)\\\\n  vec4 i0;\\\\n  vec3 isX = step( x0.yzw, x0.xxx );\\\\n  vec3 isYZ = step( x0.zww, x0.yyz );\\\\n//  i0.x = dot( isX, vec3( 1.0 ) );\\\\n  i0.x = isX.x + isX.y + isX.z;\\\\n  i0.yzw = 1.0 - isX;\\\\n//  i0.y += dot( isYZ.xy, vec2( 1.0 ) );\\\\n  i0.y += isYZ.x + isYZ.y;\\\\n  i0.zw += 1.0 - isYZ.xy;\\\\n  i0.z += isYZ.z;\\\\n  i0.w += 1.0 - isYZ.z;\\\\n\\\\n  // i0 now contains the unique values 0,1,2,3 in each channel\\\\n  vec4 i3 = clamp( i0, 0.0, 1.0 );\\\\n  vec4 i2 = clamp( i0-1.0, 0.0, 1.0 );\\\\n  vec4 i1 = clamp( i0-2.0, 0.0, 1.0 );\\\\n\\\\n  //  x0 = x0 - 0.0 + 0.0 * C.xxxx\\\\n  //  x1 = x0 - i1  + 1.0 * C.xxxx\\\\n  //  x2 = x0 - i2  + 2.0 * C.xxxx\\\\n  //  x3 = x0 - i3  + 3.0 * C.xxxx\\\\n  //  x4 = x0 - 1.0 + 4.0 * C.xxxx\\\\n  vec4 x1 = x0 - i1 + C.xxxx;\\\\n  vec4 x2 = x0 - i2 + C.yyyy;\\\\n  vec4 x3 = x0 - i3 + C.zzzz;\\\\n  vec4 x4 = x0 + C.wwww;\\\\n\\\\n// Permutations\\\\n  i = mod289(i); \\\\n  float j0 = permute( permute( permute( permute(i.w) + i.z) + i.y) + i.x);\\\\n  vec4 j1 = permute( permute( permute( permute (\\\\n             i.w + vec4(i1.w, i2.w, i3.w, 1.0 ))\\\\n           + i.z + vec4(i1.z, i2.z, i3.z, 1.0 ))\\\\n           + i.y + vec4(i1.y, i2.y, i3.y, 1.0 ))\\\\n           + i.x + vec4(i1.x, i2.x, i3.x, 1.0 ));\\\\n\\\\n// Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope\\\\n// 7*7*6 = 294, which is close to the ring size 17*17 = 289.\\\\n  vec4 ip = vec4(1.0/294.0, 1.0/49.0, 1.0/7.0, 0.0) ;\\\\n\\\\n  vec4 p0 = grad4(j0,   ip);\\\\n  vec4 p1 = grad4(j1.x, ip);\\\\n  vec4 p2 = grad4(j1.y, ip);\\\\n  vec4 p3 = grad4(j1.z, ip);\\\\n  vec4 p4 = grad4(j1.w, ip);\\\\n\\\\n// Normalise gradients\\\\n  vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\\\\n  p0 *= norm.x;\\\\n  p1 *= norm.y;\\\\n  p2 *= norm.z;\\\\n  p3 *= norm.w;\\\\n  p4 *= taylorInvSqrt(dot(p4,p4));\\\\n\\\\n// Mix contributions from the five corners\\\\n  vec3 m0 = max(0.6 - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.0);\\\\n  vec2 m1 = max(0.6 - vec2(dot(x3,x3), dot(x4,x4)            ), 0.0);\\\\n  m0 = m0 * m0;\\\\n  m1 = m1 * m1;\\\\n  return 49.0 * ( dot(m0*m0, vec3( dot( p0, x0 ), dot( p1, x1 ), dot( p2, x2 )))\\\\n               + dot(m1*m1, vec2( dot( p3, x3 ), dot( p4, x4 ) ) ) ) ;\\\\n\\\\n  }\\\\n\\\\\\\"},_F={[uF.CLASSIC_PERLIN_2D]:Uo.VEC2,[uF.CLASSIC_PERLIN_3D]:Uo.VEC3,[uF.CLASSIC_PERLIN_4D]:Uo.VEC4,[uF.NOISE_2D]:Uo.VEC2,[uF.NOISE_3D]:Uo.VEC3,[uF.NOISE_4D]:Uo.VEC4},mF={[uF.CLASSIC_PERLIN_2D]:Uo.FLOAT,[uF.CLASSIC_PERLIN_3D]:Uo.FLOAT,[uF.CLASSIC_PERLIN_4D]:Uo.FLOAT,[uF.NOISE_2D]:Uo.FLOAT,[uF.NOISE_3D]:Uo.FLOAT,[uF.NOISE_4D]:Uo.FLOAT},fF={[uF.CLASSIC_PERLIN_2D]:\\\\\\\"cnoise\\\\\\\",[uF.CLASSIC_PERLIN_3D]:\\\\\\\"cnoise\\\\\\\",[uF.CLASSIC_PERLIN_4D]:\\\\\\\"cnoise\\\\\\\",[uF.NOISE_2D]:\\\\\\\"snoise\\\\\\\",[uF.NOISE_3D]:\\\\\\\"snoise\\\\\\\",[uF.NOISE_4D]:\\\\\\\"snoise\\\\\\\"};var gF;!function(t){t[t.NoChange=0]=\\\\\\\"NoChange\\\\\\\",t[t.Float=1]=\\\\\\\"Float\\\\\\\",t[t.Vec2=2]=\\\\\\\"Vec2\\\\\\\",t[t.Vec3=3]=\\\\\\\"Vec3\\\\\\\",t[t.Vec4=4]=\\\\\\\"Vec4\\\\\\\"}(gF||(gF={}));const vF=[gF.NoChange,gF.Float,gF.Vec2,gF.Vec3,gF.Vec4],yF={[gF.NoChange]:\\\\\\\"Same as noise\\\\\\\",[gF.Float]:\\\\\\\"Float\\\\\\\",[gF.Vec2]:\\\\\\\"Vec2\\\\\\\",[gF.Vec3]:\\\\\\\"Vec3\\\\\\\",[gF.Vec4]:\\\\\\\"Vec4\\\\\\\"},xF={[gF.NoChange]:Uo.FLOAT,[gF.Float]:Uo.FLOAT,[gF.Vec2]:Uo.VEC2,[gF.Vec3]:Uo.VEC3,[gF.Vec4]:Uo.VEC4},bF=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"],wF=\\\\\\\"noise\\\\\\\",TF=dF.indexOf(uF.NOISE_3D),AF=gF.NoChange,MF={amp:1,freq:1};var EF;!function(t){t.AMP=\\\\\\\"amp\\\\\\\",t.POSITION=\\\\\\\"position\\\\\\\",t.FREQ=\\\\\\\"freq\\\\\\\",t.OFFSET=\\\\\\\"offset\\\\\\\"}(EF||(EF={}));const SF=new class extends ua{constructor(){super(...arguments),this.type=ha.INTEGER(TF,{menu:{entries:dF.map(((t,e)=>({name:`${t} (output: ${mF[t]})`,value:e})))}}),this.outputType=ha.INTEGER(AF,{menu:{entries:vF.map((t=>{const e=vF[t];return{name:yF[e],value:e}}))}}),this.octaves=ha.INTEGER(3,{range:[1,10],rangeLocked:[!0,!1]}),this.ampAttenuation=ha.FLOAT(.5,{range:[0,1]}),this.freqIncrease=ha.FLOAT(2,{range:[0,10],separatorAfter:!0})}};class CF extends gf{constructor(){super(...arguments),this.paramsConfig=SF}static type(){return\\\\\\\"noise\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.initializeNode(),this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"octaves\\\\\\\",\\\\\\\"ampAttenuation\\\\\\\",\\\\\\\"freqIncrease\\\\\\\"]),this.io.outputs.setNamedOutputConnectionPoints([new qo(wF,Uo.FLOAT)]),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function((()=>wF))}_gl_input_name(t){return[EF.AMP,EF.POSITION,EF.FREQ,EF.OFFSET][t]}paramDefaultValue(t){return MF[t]}_expected_input_types(){const t=dF[this.pv.type],e=this._expected_output_types()[0],n=_F[t];return[e,n,n,n]}_expected_output_types(){const t=dF[this.pv.type],e=vF[this.pv.outputType];return e==gF.NoChange?[_F[t]]:[xF[e]]}setLines(t){const e=[],n=[],i=dF[this.pv.type],s=pF[i],r=mF[i];e.push(new Cf(this,\\\\\\\"// Modulo 289 without a division (only multiplications)\\\\nfloat mod289(float x) {\\\\n  return x - floor(x * (1.0 / 289.0)) * 289.0;\\\\n}\\\\nvec2 mod289(vec2 x) {\\\\n  return x - floor(x * (1.0 / 289.0)) * 289.0;\\\\n}\\\\nvec3 mod289(vec3 x) {\\\\n  return x - floor(x * (1.0 / 289.0)) * 289.0;\\\\n}\\\\nvec4 mod289(vec4 x) {\\\\n  return x - floor(x * (1.0 / 289.0)) * 289.0;\\\\n}\\\\n// Modulo 7 without a division\\\\nvec3 mod7(vec3 x) {\\\\n  return x - floor(x * (1.0 / 7.0)) * 7.0;\\\\n}\\\\n\\\\n// Permutation polynomial: (34x^2 + x) mod 289\\\\nfloat permute(float x) {\\\\n     return mod289(((x*34.0)+1.0)*x);\\\\n}\\\\nvec3 permute(vec3 x) {\\\\n  return mod289((34.0 * x + 1.0) * x);\\\\n}\\\\nvec4 permute(vec4 x) {\\\\n     return mod289(((x*34.0)+1.0)*x);\\\\n}\\\\n\\\\nfloat taylorInvSqrt(float r)\\\\n{\\\\n  return 1.79284291400159 - 0.85373472095314 * r;\\\\n}\\\\nvec4 taylorInvSqrt(vec4 r)\\\\n{\\\\n  return 1.79284291400159 - 0.85373472095314 * r;\\\\n}\\\\n\\\\nvec2 fade(vec2 t) {\\\\n  return t*t*t*(t*(t*6.0-15.0)+10.0);\\\\n}\\\\nvec3 fade(vec3 t) {\\\\n  return t*t*t*(t*(t*6.0-15.0)+10.0);\\\\n}\\\\nvec4 fade(vec4 t) {\\\\n  return t*t*t*(t*(t*6.0-15.0)+10.0);\\\\n}\\\\\\\")),e.push(new Cf(this,s)),e.push(new Cf(this,this.fbm_function()));const o=this._expected_output_types()[0];if(o==r){const t=this.single_noise_line();n.push(t)}else{const t=Wo[o],e=[],s=this.glVarName(\\\\\\\"noise\\\\\\\");for(let r=0;r<t;r++){const t=bF[r];e.push(`${s}${t}`);const o=_F[i],a=Wo[o],l=`${o}(${f.range(a).map((t=>mf.float(1e3*r))).join(\\\\\\\", \\\\\\\")})`,c=this.single_noise_line(t,t,l);n.push(c)}const r=`vec${t} ${s} = vec${t}(${e.join(\\\\\\\", \\\\\\\")})`;n.push(r)}t.addDefinitions(this,e),t.addBodyLines(this,n)}fbm_method_name(){const t=dF[this.pv.type];return`fbm_${fF[t]}_${this.name()}`}fbm_function(){const t=dF[this.pv.type],e=fF[t],n=_F[t];return`\\\\nfloat ${this.fbm_method_name()} (in ${n} st) {\\\\n\\\\tfloat value = 0.0;\\\\n\\\\tfloat amplitude = 1.0;\\\\n\\\\tfor (int i = 0; i < ${mf.integer(this.pv.octaves)}; i++) {\\\\n\\\\t\\\\tvalue += amplitude * ${e}(st);\\\\n\\\\t\\\\tst *= ${mf.float(this.pv.freqIncrease)};\\\\n\\\\t\\\\tamplitude *= ${mf.float(this.pv.ampAttenuation)};\\\\n\\\\t}\\\\n\\\\treturn value;\\\\n}\\\\n`}single_noise_line(t,e,n){const i=this.fbm_method_name(),s=mf.any(this.variableForInput(EF.AMP)),r=mf.any(this.variableForInput(EF.POSITION)),o=mf.any(this.variableForInput(EF.FREQ));let a=mf.any(this.variableForInput(EF.OFFSET));n&&(a=`(${a}+${n})`);const l=[`(${r}*${o})+${a}`].join(\\\\\\\", \\\\\\\"),c=this.glVarName(wF),h=`${s}*${i}(${l})`;if(e)return`float ${c}${t} = (${h}).${e}`;return`${this.io.outputs.namedOutputConnectionPoints()[0].type()} ${c} = ${h}`}}class NF extends NP{static type(){return\\\\\\\"null\\\\\\\"}setLines(t){const e=mf.any(this.variableForInput(this._gl_input_name(0))),n=this.io.outputs.namedOutputConnectionPoints()[0],i=`${n.type()} ${this.glVarName(n.name())} = ${e}`;t.addBodyLines(this,[i])}}const LF=new class extends ua{};class OF extends gf{constructor(){super(...arguments),this.paramsConfig=LF}static type(){return\\\\\\\"output\\\\\\\"}initializeNode(){super.initializeNode(),this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.lifecycle.add_on_add_hook((()=>{var t,e;null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e||e.add_output_inputs(this)}))}setLines(t){t.assembler().set_node_lines_output(this,t)}}class PF{constructor(){this._param_configs=[]}reset(){this._param_configs=[]}push(t){this._param_configs.push(t)}list(){return this._param_configs}}const RF=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(\\\\\\\"\\\\\\\"),this.type=ha.INTEGER(Go.indexOf(Uo.FLOAT),{menu:{entries:Go.map(((t,e)=>({name:t,value:e})))}}),this.asColor=ha.BOOLEAN(0,{visibleIf:{type:Go.indexOf(Uo.VEC3)}})}};class IF extends gf{constructor(){super(...arguments),this.paramsConfig=RF,this._allow_inputs_created_from_params=!1,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"param\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[Go[this.pv.type]])),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}setLines(t){const e=[],n=Go[this.pv.type],i=this.uniform_name();e.push(new Nf(this,n,i)),t.addDefinitions(this,e)}paramsGenerating(){return!0}setParamConfigs(){const t=Go[this.pv.type],e=jo[t];let n=Vo[t];if(this._param_configs_controller=this._param_configs_controller||new PF,this._param_configs_controller.reset(),n==Cr.VECTOR3&&this.p.asColor.value&&m.isArray(e)&&3==e.length){const t=new tg(Cr.COLOR,this.pv.name,e,this.uniform_name());this._param_configs_controller.push(t)}else{const t=new tg(n,this.pv.name,e,this.uniform_name());this._param_configs_controller.push(t)}}uniform_name(){const t=this.io.outputs.namedOutputConnectionPoints()[0];return this.glVarName(t.name())}set_gl_type(t){const e=Go.indexOf(t);this.p.type.set(e)}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}class FF extends CP{static type(){return\\\\\\\"refract\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"I\\\\\\\",\\\\\\\"N\\\\\\\",\\\\\\\"eta\\\\\\\"][t])),this.io.connection_points.set_output_name_function((t=>\\\\\\\"refract\\\\\\\")),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}gl_method_name(){return\\\\\\\"refract\\\\\\\"}_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Uo.VEC3;return[t,t,Uo.FLOAT]}_expected_output_types(){return[this._expected_input_types()[0]]}}const DF=\\\\\\\"SSSModel\\\\\\\";const BF=new class extends ua{constructor(){super(...arguments),this.color=ha.COLOR([1,1,1]),this.thickness=ha.FLOAT(.1),this.power=ha.FLOAT(2),this.scale=ha.FLOAT(16),this.distortion=ha.FLOAT(.1),this.ambient=ha.FLOAT(.4),this.attenuation=ha.FLOAT(.8)}};class zF extends gf{constructor(){super(...arguments),this.paramsConfig=BF}static type(){return\\\\\\\"SSSModel\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(DF,Uo.SSS_MODEL)])}setLines(t){const e=[],n=this.glVarName(DF);e.push(`SSSModel ${n}`),e.push(`${n}.isActive = true;`),e.push(this._paramLineFloat(n,this.p.color)),e.push(this._paramLineFloat(n,this.p.thickness)),e.push(this._paramLineFloat(n,this.p.power)),e.push(this._paramLineFloat(n,this.p.scale)),e.push(this._paramLineFloat(n,this.p.distortion)),e.push(this._paramLineFloat(n,this.p.ambient)),e.push(this._paramLineFloat(n,this.p.attenuation)),t.addBodyLines(this,e)}_paramLineFloat(t,e){return`${t}.${e.name()} = ${mf.vector3(this.variableForInputParam(e))};`}}class kF extends NP{static type(){return\\\\\\\"quatMult\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"quat0\\\\\\\",\\\\\\\"quat1\\\\\\\"][t])),this.io.connection_points.set_expected_input_types_function((()=>[Uo.VEC4,Uo.VEC4])),this.io.connection_points.set_expected_output_types_function((()=>[Uo.VEC4]))}gl_method_name(){return\\\\\\\"quatMult\\\\\\\"}gl_function_definitions(){return[new Cf(this,PR)]}}var UF;!function(t){t.AXIS=\\\\\\\"axis\\\\\\\",t.ANGLE=\\\\\\\"angle\\\\\\\"}(UF||(UF={}));const GF=[UF.AXIS,UF.ANGLE],VF={[UF.AXIS]:[0,0,1],[UF.ANGLE]:0};class HF extends LP{static type(){return\\\\\\\"quatFromAxisAngle\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>GF[t])),this.io.connection_points.set_expected_input_types_function((()=>[Uo.VEC3,Uo.FLOAT])),this.io.connection_points.set_expected_output_types_function((()=>[Uo.VEC4]))}paramDefaultValue(t){return VF[t]}gl_method_name(){return\\\\\\\"quatFromAxisAngle\\\\\\\"}gl_function_definitions(){return[new Cf(this,PR)]}}class jF extends NP{static type(){return\\\\\\\"quatToAngle\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"quat\\\\\\\"][t])),this.io.connection_points.set_expected_input_types_function((()=>[Uo.VEC4])),this.io.connection_points.set_expected_output_types_function((()=>[Uo.FLOAT]))}gl_method_name(){return\\\\\\\"quatToAngle\\\\\\\"}gl_function_definitions(){return[new Cf(this,PR)]}}class WF extends NP{static type(){return\\\\\\\"quatToAxis\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"quat\\\\\\\"][t])),this.io.connection_points.set_expected_input_types_function((()=>[Uo.VEC4])),this.io.connection_points.set_expected_output_types_function((()=>[Uo.VEC3]))}gl_method_name(){return\\\\\\\"quatToAxis\\\\\\\"}gl_function_definitions(){return[new Cf(this,PR)]}}const qF=\\\\\\\"val\\\\\\\";const XF=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(\\\\\\\"ramp\\\\\\\"),this.input=ha.FLOAT(0)}};class YF extends gf{constructor(){super(...arguments),this.paramsConfig=XF}static type(){return\\\\\\\"ramp\\\\\\\"}initializeNode(){super.initializeNode(),this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.io.outputs.setNamedOutputConnectionPoints([new qo(qF,Uo.FLOAT)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}setLines(t){const e=Uo.VEC3,n=this.glVarName(\\\\\\\"tmpTexureVarName\\\\\\\"),i=Uo.FLOAT,s=this._uniform_name(),r=this.glVarName(qF),o=new Nf(this,Uo.SAMPLER_2D,s);t.addDefinitions(this,[o]);const a=this.variableForInputParam(this.p.input),l=[`${e} ${n} = texture2D(${this._uniform_name()}, vec2(${a}, 0.0)).xyz`,`${i} ${r} = -1.0 + ${n}.x + ${n}.y + ${n}.z`];t.addBodyLines(this,l)}paramsGenerating(){return!0}setParamConfigs(){this._param_configs_controller=this._param_configs_controller||new PF,this._param_configs_controller.reset();const t=new tg(Cr.RAMP,this.pv.name,Ao.DEFAULT_VALUE,this._uniform_name());this._param_configs_controller.push(t)}_uniform_name(){return\\\\\\\"ramp_texture_\\\\\\\"+this.glVarName(qF)}}const $F=\\\\\\\"rand\\\\\\\";const JF=new class extends ua{constructor(){super(...arguments),this.seed=ha.VECTOR2([1,1])}};class ZF extends gf{constructor(){super(...arguments),this.paramsConfig=JF}static type(){return\\\\\\\"random\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo($F,Uo.FLOAT)])}setLines(t){const e=this.io.inputs.namedInputConnectionPoints()[0].name(),n=mf.vector2(this.variableForInput(e)),i=`float ${this.glVarName($F)} = rand(${n})`;t.addBodyLines(this,[i])}}const KF=new class extends ua{constructor(){super(...arguments),this.rgb=ha.VECTOR3([1,1,1])}};class QF extends gf{constructor(){super(...arguments),this.paramsConfig=KF}static type(){return\\\\\\\"rgbToHsv\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"hsv\\\\\\\",Uo.VEC3)])}setLines(t){const e=[],n=[];e.push(new Cf(this,\\\\\\\"// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\\\\nvec3 rgb2hsv(vec3 c)\\\\n{\\\\n\\\\tvec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\\\\n\\\\tvec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\\\\n\\\\tvec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\\\\n\\\\n\\\\tfloat d = q.x - min(q.w, q.y);\\\\n\\\\tfloat e = 1.0e-10;\\\\n\\\\treturn vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\\\\n}\\\\\\\"));const i=mf.vector3(this.variableForInputParam(this.p.rgb)),s=this.glVarName(\\\\\\\"hsv\\\\\\\");n.push(`vec3 ${s} = rgb2hsv(${i})`),t.addDefinitions(this,e),t.addBodyLines(this,n)}}var tD;!function(t){t[t.AXIS=0]=\\\\\\\"AXIS\\\\\\\",t[t.QUAT=1]=\\\\\\\"QUAT\\\\\\\"}(tD||(tD={}));const eD=[tD.AXIS,tD.QUAT],nD={[tD.AXIS]:\\\\\\\"from axis + angle\\\\\\\",[tD.QUAT]:\\\\\\\"from quaternion\\\\\\\"},iD={[tD.AXIS]:[\\\\\\\"vector\\\\\\\",\\\\\\\"axis\\\\\\\",\\\\\\\"angle\\\\\\\"],[tD.QUAT]:[\\\\\\\"vector\\\\\\\",\\\\\\\"quat\\\\\\\"]},sD={[tD.AXIS]:\\\\\\\"rotateWithAxisAngle\\\\\\\",[tD.QUAT]:\\\\\\\"rotateWithQuat\\\\\\\"},rD={[tD.AXIS]:[Uo.VEC3,Uo.VEC3,Uo.FLOAT],[tD.QUAT]:[Uo.VEC3,Uo.VEC4]},oD={vector:[0,0,1],axis:[0,1,0]};const aD=new class extends ua{constructor(){super(...arguments),this.signature=ha.INTEGER(tD.AXIS,{menu:{entries:eD.map(((t,e)=>({name:nD[t],value:e})))}})}};class lD extends gf{constructor(){super(...arguments),this.paramsConfig=aD}static type(){return\\\\\\\"rotate\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this))}set_signature(t){const e=eD.indexOf(t);this.p.signature.set(e)}_gl_input_name(t){const e=eD[this.pv.signature];return iD[e][t]}paramDefaultValue(t){return oD[t]}gl_method_name(){const t=eD[this.pv.signature];return sD[t]}_expected_input_types(){const t=eD[this.pv.signature];return rD[t]}_expected_output_types(){return[Uo.VEC3]}gl_function_definitions(){return[new Cf(this,PR)]}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=this.io.inputs.namedInputConnectionPoints().map(((t,e)=>{const n=t.name();return mf.any(this.variableForInput(n))})).join(\\\\\\\", \\\\\\\"),i=`${e} ${this.glVarName(this.io.connection_points.output_name(0))} = ${this.gl_method_name()}(${n})`;t.addBodyLines(this,[i]),t.addDefinitions(this,this.gl_function_definitions())}}const cD=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"];class hD extends NP{static type(){return\\\\\\\"round\\\\\\\"}setLines(t){const e=this.io.inputs.namedInputConnectionPoints()[0],n=mf.vector2(this.variableForInput(e.name())),i=this.io.outputs.namedOutputConnectionPoints()[0],s=this.glVarName(i.name()),r=[];if(1==Wo[i.type()])r.push(`${i.type()} ${s} = ${this._simple_line(n)}`);else{const t=cD.map((t=>this._simple_line(`${n}.${t}`)));r.push(`${i.type()} ${s} = ${i.type()}(${t.join(\\\\\\\",\\\\\\\")})`)}t.addBodyLines(this,r)}_simple_line(t){return`sign(${t})*floor(abs(${t})+0.5)`}}const uD=new class extends ua{constructor(){super(...arguments),this.position=ha.VECTOR3([0,0,0]),this.center=ha.VECTOR3([0,0,0]),this.radius=ha.FLOAT(1),this.feather=ha.FLOAT(.1)}};class dD extends gf{constructor(){super(...arguments),this.paramsConfig=uD}static type(){return\\\\\\\"sphere\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"float\\\\\\\",Uo.FLOAT)])}setLines(t){const e=mf.vector2(this.variableForInputParam(this.p.position)),n=mf.vector2(this.variableForInputParam(this.p.center)),i=mf.float(this.variableForInputParam(this.p.radius)),s=mf.float(this.variableForInputParam(this.p.feather)),r=`float ${this.glVarName(\\\\\\\"float\\\\\\\")} = disk3d(${e}, ${n}, ${i}, ${s})`;t.addBodyLines(this,[r]),t.addDefinitions(this,[new Cf(this,eI)])}}const pD=new class extends ua{};class _D extends gf{constructor(){super(...arguments),this.paramsConfig=pD}static type(){return ns.INPUT}initializeNode(){this.io.connection_points.set_output_name_function(this._expected_output_names.bind(this)),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}parent(){return super.parent()}_expected_output_names(t){const e=this.parent();return(null==e?void 0:e.child_expected_input_connection_point_name(t))||`out${t}`}_expected_output_types(){const t=this.parent();return(null==t?void 0:t.child_expected_input_connection_point_types())||[]}setLines(t){const e=this.parent();e&&e.set_lines_block_start(t,this)}}const mD=new class extends ua{};class fD extends gf{constructor(){super(...arguments),this.paramsConfig=mD}static type(){return\\\\\\\"switch\\\\\\\"}initializeNode(){this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_gl_input_name(t){return 0==t?fD.INPUT_INDEX:\\\\\\\"in\\\\\\\"+(t-1)}_expected_input_types(){const t=this.io.connection_points.input_connection_type(1)||Uo.FLOAT,e=this.io.connections.inputConnections(),n=e?or.clamp(e.length,2,16):2,i=[Uo.INT];for(let e=0;e<n;e++)i.push(t);return i}_expected_output_types(){return[this._expected_input_types()[1]||Uo.FLOAT]}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=this.glVarName(this.io.connection_points.output_name(0)),i=this.io.connection_points.input_name(0),s=mf.integer(this.variableForInput(i)),r=this.glVarName(\\\\\\\"index\\\\\\\"),o=[`${e} ${n};`,`int ${r} = ${s}`],a=this._expected_input_types().length-1;for(let t=0;t<a;t++){const e=0==t?\\\\\\\"if\\\\\\\":\\\\\\\"else if\\\\\\\",i=`${r} == ${t}`,s=this.io.connection_points.input_name(t+1),a=`${e}(${i}){${`${n} = ${mf.any(this.variableForInput(s))};`}}`;o.push(a)}t.addBodyLines(this,o)}}fD.INPUT_INDEX=\\\\\\\"index\\\\\\\";const gD=new class extends ua{constructor(){super(...arguments),this.paramName=ha.STRING(\\\\\\\"textureMap\\\\\\\"),this.defaultValue=ha.STRING(vi.UV),this.uv=ha.VECTOR2([0,0])}};class vD extends gf{constructor(){super(...arguments),this.paramsConfig=gD}static type(){return\\\\\\\"texture\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.io.outputs.setNamedOutputConnectionPoints([new qo(vD.OUTPUT_NAME,Uo.VEC4)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.paramName])}))}))}setLines(t){const e=mf.vector2(this.variableForInputParam(this.p.uv)),n=this.glVarName(vD.OUTPUT_NAME),i=this._uniform_name(),s=new Nf(this,Uo.SAMPLER_2D,i),r=`vec4 ${n} = texture2D(${i}, ${e})`;t.addDefinitions(this,[s]),t.addBodyLines(this,[r])}paramsGenerating(){return!0}setParamConfigs(){this._param_configs_controller=this._param_configs_controller||new PF,this._param_configs_controller.reset();const t=new tg(Cr.OPERATOR_PATH,this.pv.paramName,this.pv.defaultValue,this._uniform_name());this._param_configs_controller.push(t)}_uniform_name(){return this.glVarName(this.pv.paramName)}}var yD;vD.OUTPUT_NAME=\\\\\\\"rgba\\\\\\\",function(t){t.POSITION=\\\\\\\"position\\\\\\\",t.DIR_VEC=\\\\\\\"direction vector\\\\\\\"}(yD||(yD={}));const xD=[yD.POSITION,yD.DIR_VEC];const bD=new class extends ua{constructor(){super(...arguments),this.vec=ha.VECTOR3([0,0,0]),this.interpretation=ha.INTEGER(0,{menu:{entries:xD.map(((t,e)=>({name:t,value:e})))}})}};class wD extends gf{constructor(){super(...arguments),this.paramsConfig=bD}static type(){return\\\\\\\"toWorldSpace\\\\\\\"}initializeNode(){this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"interpretation\\\\\\\"]),this.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"out\\\\\\\",Uo.VEC3)])}setLines(t){const e=[],n=mf.vector3(this.variableForInputParam(this.p.vec)),i=this.glVarName(\\\\\\\"out\\\\\\\");switch(xD[this.pv.interpretation]){case yD.POSITION:e.push(`vec3 ${i} = (modelMatrix * vec4( ${n}, 1.0 )).xyz`);break;case yD.DIR_VEC:e.push(`vec3 ${i} = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * ${n} )`)}t.addBodyLines(this,e)}}var TD;!function(t){t.CONDITION=\\\\\\\"condition\\\\\\\",t.IF_TRUE=\\\\\\\"ifTrue\\\\\\\",t.IF_FALSE=\\\\\\\"ifFalse\\\\\\\"}(TD||(TD={}));const AD=[TD.CONDITION,TD.IF_TRUE,TD.IF_FALSE];class MD extends yf{static type(){return\\\\\\\"twoWaySwitch\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this))}_gl_input_name(t){return AD[t]}_gl_output_name(){return\\\\\\\"val\\\\\\\"}_expected_input_types(){const t=this.io.connections.inputConnection(1)||this.io.connections.inputConnection(2),e=t?t.src_connection_point().type():Uo.FLOAT;return[Uo.BOOL,e,e]}_expected_output_types(){return[this._expected_input_types()[1]]}setLines(t){const e=[],n=this.glVarName(\\\\\\\"val\\\\\\\"),i=mf.bool(this.variableForInput(TD.CONDITION)),s=mf.any(this.variableForInput(TD.IF_TRUE)),r=mf.any(this.variableForInput(TD.IF_FALSE)),o=this._expected_output_types()[0];e.push(`${o} ${n}`),e.push(`if(${i}){`),e.push(`${n} = ${s}`),e.push(\\\\\\\"} else {\\\\\\\"),e.push(`${n} = ${r}`),e.push(\\\\\\\"}\\\\\\\"),t.addBodyLines(this,e)}}const ED=[Uo.FLOAT,Uo.VEC2,Uo.VEC3,Uo.VEC4];const SD=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(\\\\\\\"\\\\\\\"),this.type=ha.INTEGER(0,{menu:{entries:ED.map(((t,e)=>({name:t,value:e})))}})}};class CD extends gf{constructor(){super(...arguments),this.paramsConfig=SD,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"varyingRead\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_output_name_function((()=>this.output_name)),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[ED[this.pv.type]])),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}get output_name(){return CD.OUTPUT_NAME}setLines(t){if(t.current_shader_name==Mf.FRAGMENT){const e=this.pv.name,n=new Lf(this,this.gl_type(),e),i=this.glVarName(CD.OUTPUT_NAME),s=`${this.gl_type()} ${i} = ${e}`;t.addDefinitions(this,[n]),t.addBodyLines(this,[s])}}get attribute_name(){return this.pv.name.trim()}gl_type(){return this.io.outputs.namedOutputConnectionPoints()[0].type()}set_gl_type(t){this.p.type.set(ED.indexOf(t))}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}CD.OUTPUT_NAME=\\\\\\\"fragment\\\\\\\";const ND={start:[0,0,1],end:[1,0,0],up:[0,1,0]};class LD extends(hR(\\\\\\\"vectorAlign\\\\\\\",{in:[\\\\\\\"start\\\\\\\",\\\\\\\"end\\\\\\\",\\\\\\\"up\\\\\\\"],method:\\\\\\\"vectorAlignWithUp\\\\\\\",functions:[PR]})){_expected_input_types(){const t=Uo.VEC3;return[t,t,t]}_expected_output_types(){return[Uo.VEC4]}paramDefaultValue(t){return ND[t]}}const OD={start:[0,0,1],end:[1,0,0]};class PD extends(eR(\\\\\\\"vectorAngle\\\\\\\",{in:[\\\\\\\"start\\\\\\\",\\\\\\\"end\\\\\\\"],method:\\\\\\\"vectorAngle\\\\\\\",functions:[PR]})){_expected_input_types(){const t=Uo.VEC3;return[t,t]}_expected_output_types(){return[Uo.FLOAT]}paramDefaultValue(t){return OD[t]}}const RD={only:[`${GI.context()}/${GI.type()}`,`${CI.context()}/${CI.type()}`,`${PI.context()}/${PI.type()}`]};class ID extends aa{static context(){return ts.JS}initializeBaseNode(){this.uiData.setLayoutHorizontal(),this.io.connection_points.initializeNode()}cook(){console.warn(\\\\\\\"js nodes should never cook\\\\\\\")}_set_function_node_to_recompile(){var t;null===(t=this.function_node)||void 0===t||t.assembler_controller.set_compilation_required_and_dirty(this)}get function_node(){var t;const e=this.parent();if(e)return e.type()==this.type()?null===(t=e)||void 0===t?void 0:t.function_node:e}js_var_name(t){return`v_POLY_${this.name()}_${t}`}variableForInput(t){const e=this.io.inputs.get_input_index(t),n=this.io.connections.inputConnection(e);if(n){const e=n.node_src,i=e.io.outputs.namedOutputConnectionPoints()[n.output_index];if(i){const t=i.name();return e.js_var_name(t)}throw console.warn(`no output called '${t}' for gl node ${e.path()}`),\\\\\\\"variable_for_input ERROR\\\\\\\"}return\\\\\\\"to debug...\\\\\\\"}setLines(t){}reset_code(){var t;null===(t=this._param_configs_controller)||void 0===t||t.reset()}setParamConfigs(){}param_configs(){var t;return null===(t=this._param_configs_controller)||void 0===t?void 0:t.list()}js_input_default_value(t){return null}}new class extends ua{};const FD=[Xo.FLOAT,Xo.VEC2,Xo.VEC3,Xo.VEC4];const DD=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(\\\\\\\"\\\\\\\"),this.type=ha.INTEGER(0,{menu:{entries:FD.map(((t,e)=>({name:t,value:e})))}})}};class BD extends ID{constructor(){super(...arguments),this.paramsConfig=DD,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"attribute\\\\\\\"}initializeNode(){this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[FD[this.pv.type]]))}get input_name(){return BD.INPUT_NAME}get output_name(){return BD.OUTPUT_NAME}setLines(t){var e;null===(e=this.function_node)||void 0===e||e.assembler_controller.assembler.set_node_lines_attribute(this,t)}get attribute_name(){return this.pv.name.trim()}gl_type(){return this.io.outputs.namedOutputConnectionPoints()[0].type()}set_gl_type(t){this.p.type.set(FD.indexOf(t))}connected_input_node(){return this.io.inputs.named_input(BD.INPUT_NAME)}connected_input_connection_point(){return this.io.inputs.named_input_connection_point(BD.INPUT_NAME)}output_connection_point(){return this.io.outputs.namedOutputConnectionPointsByName(this.input_name)}get is_importing(){return this.io.outputs.used_output_names().length>0}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}BD.INPUT_NAME=\\\\\\\"export\\\\\\\",BD.OUTPUT_NAME=\\\\\\\"val\\\\\\\";const zD=new class extends ua{};class kD extends ID{constructor(){super(...arguments),this.paramsConfig=zD}static type(){return\\\\\\\"globals\\\\\\\"}createParams(){var t;null===(t=this.function_node)||void 0===t||t.assembler_controller.add_globals_outputs(this)}setLines(t){var e,n;null===(n=null===(e=this.function_node)||void 0===e?void 0:e.assembler_controller)||void 0===n||n.assembler.set_node_lines_globals(this,t)}}const UD=new class extends ua{};class GD extends ID{constructor(){super(...arguments),this.paramsConfig=UD}static type(){return\\\\\\\"output\\\\\\\"}initializeNode(){super.initializeNode(),this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_function_node_to_recompile.bind(this))}createParams(){var t;null===(t=this.function_node)||void 0===t||t.assembler_controller.add_output_inputs(this)}setLines(t){var e;null===(e=this.function_node)||void 0===e||e.assembler_controller.assembler.set_node_lines_output(this,t)}}class VD{constructor(t=[]){this._definitions=t,this._errored=!1}get errored(){return this._errored}get error_message(){return this._error_message}uniq(){const t=new Map,e=[];for(let n of this._definitions)if(!this._errored){const i=n.name(),s=t.get(i);s?s.data_type!=n.data_type&&(this._errored=!0,this._error_message=`attempt to create '${n.name()}' with types '${n.data_type}' by node '${n.node.path()}', when there is already an existing with type ${s.data_type} from node '${s.node.path()}'`,console.warn(\\\\\\\"emitting error message:\\\\\\\",this._error_message)):(t.set(i,n),e.push(i))}const n=[];for(let i of e){const e=t.get(i);e&&n.push(e)}return n}}var HD;!function(t){t.ATTRIBUTE=\\\\\\\"attribute\\\\\\\",t.FUNCTION=\\\\\\\"function\\\\\\\",t.UNIFORM=\\\\\\\"uniform\\\\\\\"}(HD||(HD={}));class jD{constructor(t,e,n,i){this._definition_type=t,this._data_type=e,this._node=n,this._name=i}get definition_type(){return this._definition_type}get data_type(){return this._data_type}get node(){return this._node}name(){return this._name}collection_instance(){return new VD}}class WD extends jD{constructor(t,e,n){super(HD.UNIFORM,e,t,n),this._node=t,this._data_type=e,this._name=n}get line(){return`uniform ${this.data_type} ${this.name()}`}}class qD extends Qf{constructor(t,e,n,i){super(t,e,n),this._uniform_name=i}get uniform_name(){return this._uniform_name}static uniform_by_type(t){switch(t){case Cr.BOOLEAN:case Cr.BUTTON:return{value:0};case Cr.COLOR:return{value:new D.a(0,0,0)};case Cr.FLOAT:case Cr.FOLDER:case Cr.INTEGER:case Cr.OPERATOR_PATH:case Cr.NODE_PATH:case Cr.PARAM_PATH:return{value:0};case Cr.RAMP:case Cr.STRING:return{value:null};case Cr.VECTOR2:return{value:new d.a(0,0)};case Cr.VECTOR3:return{value:new p.a(0,0,0)};case Cr.VECTOR4:return{value:new _.a(0,0,0,0)}}os.unreachable(t)}}const XD=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(\\\\\\\"\\\\\\\"),this.type=ha.INTEGER(Yo.indexOf(Xo.FLOAT),{menu:{entries:Yo.map(((t,e)=>({name:t,value:e})))}}),this.asColor=ha.BOOLEAN(0,{visibleIf:{type:Yo.indexOf(Xo.VEC3)}})}};class YD extends ID{constructor(){super(...arguments),this.paramsConfig=XD,this._allow_inputs_created_from_params=!1,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"param\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_function_node_to_recompile.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[Yo[this.pv.type]]))}setLines(t){const e=[],n=Yo[this.pv.type],i=this.uniform_name();e.push(new WD(this,n,i)),t.addDefinitions(this,e)}setParamConfigs(){const t=Yo[this.pv.type],e=Zo[t];let n=$o[t];if(this._param_configs_controller=this._param_configs_controller||new PF,this._param_configs_controller.reset(),n==Cr.VECTOR3&&this.p.asColor.value&&m.isArray(e)&&3==e.length){const t=new qD(Cr.COLOR,this.pv.name,e,this.uniform_name());this._param_configs_controller.push(t)}else{const t=new qD(n,this.pv.name,e,this.uniform_name());this._param_configs_controller.push(t)}}uniform_name(){const t=this.io.outputs.namedOutputConnectionPoints()[0];return this.js_var_name(t.name())}set_gl_type(t){const e=Yo.indexOf(t);this.p.type.set(e)}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}class $D extends aa{constructor(){super(...arguments),this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this)}static context(){return ts.MAT}initializeBaseNode(){super.initializeBaseNode(),this.nameController.add_post_set_fullPath_hook(this.set_material_name.bind(this)),this.addPostDirtyHook(\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\",(()=>{setTimeout(this._cook_main_without_inputs_when_dirty_bound,0)}))}async _cook_main_without_inputs_when_dirty(){await this.cookController.cookMainWithoutInputs()}set_material_name(){this._material&&(this._material.name=this.path())}get material(){return this._material=this._material||this.createMaterial()}setMaterial(t){this._setContainer(t)}}class JD{constructor(t){this.node=t}add_params(){}update(){}get material(){return this.node.material}}const ZD={NoBlending:w.ub,NormalBlending:w.xb,AdditiveBlending:w.e,SubtractiveBlending:w.Sc,MultiplyBlending:w.mb},KD=Object.keys(ZD);function QD(t){return class extends t{constructor(){super(...arguments),this.doubleSided=ha.BOOLEAN(0),this.front=ha.BOOLEAN(1,{visibleIf:{doubleSided:!1}}),this.overrideShadowSide=ha.BOOLEAN(0),this.shadowDoubleSided=ha.BOOLEAN(0,{visibleIf:{overrideShadowSide:!0}}),this.shadowFront=ha.BOOLEAN(1,{visibleIf:{overrideShadowSide:!0,shadowDoubleSided:!1}}),this.colorWrite=ha.BOOLEAN(1,{separatorBefore:!0,cook:!1,callback:(t,e)=>{tB.update(t)}}),this.depthWrite=ha.BOOLEAN(1,{cook:!1,callback:(t,e)=>{tB.update(t)}}),this.depthTest=ha.BOOLEAN(1,{cook:!1,callback:(t,e)=>{tB.update(t)}}),this.premultipliedAlpha=ha.BOOLEAN(!1,{separatorAfter:!0}),this.blending=ha.INTEGER(w.xb,{menu:{entries:KD.map((t=>({name:t,value:ZD[t]})))}}),this.dithering=ha.BOOLEAN(0),this.polygonOffset=ha.BOOLEAN(!1,{separatorBefore:!0}),this.polygonOffsetFactor=ha.INTEGER(0,{range:[0,1e3],visibleIf:{polygonOffset:1}}),this.polygonOffsetUnits=ha.INTEGER(0,{range:[0,1e3],visibleIf:{polygonOffset:1}})}}}QD(ua);class tB extends JD{constructor(t){super(t),this.node=t}initializeNode(){}async update(){const t=this.node.material,e=this.node.pv;this._updateSides(t,e),t.colorWrite=e.colorWrite,t.depthWrite=e.depthWrite,t.depthTest=e.depthTest,t.blending=e.blending,t.premultipliedAlpha=e.premultipliedAlpha,t.dithering=e.dithering,t.polygonOffset=e.polygonOffset,t.polygonOffset&&(t.polygonOffsetFactor=e.polygonOffsetFactor,t.polygonOffsetUnits=e.polygonOffsetUnits,t.needsUpdate=!0)}_updateSides(t,e){const n=e.front?w.H:w.i,i=e.doubleSided?w.z:n;if(i!=t.side&&(t.side=i,t.needsUpdate=!0),e.overrideShadowSide){const t=e.shadowFront?w.H:w.i,n=e.shadowDoubleSided?w.z:t,i=this.node.material;n!=i.shadowSide&&(i.shadowSide=n,i.needsUpdate=!0)}else t.shadowSide=null;const s=t.customMaterials;if(s){const t=Object.keys(s);for(let n of t){const t=s[n];t&&this._updateSides(t,e)}}}static async update(t){t.controllers.advancedCommon.update()}}class eB extends(QD(ua)){constructor(){super(...arguments),this.color=ha.COLOR([1,1,1]),this.lineWidth=ha.FLOAT(1,{range:[1,10],rangeLocked:[!0,!1]})}}const nB=new eB;class iB extends $D{constructor(){super(...arguments),this.paramsConfig=nB,this.controllers={advancedCommon:new tB(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"lineBasic\\\\\\\"}createMaterial(){return new As.a({color:16777215,linewidth:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();this.material.color.copy(this.pv.color),this.material.linewidth=this.pv.lineWidth,this.setMaterial(this.material)}}function sB(t){return class extends t{constructor(){super(...arguments),this.transparent=ha.BOOLEAN(0),this.opacity=ha.FLOAT(1),this.alphaTest=ha.FLOAT(0)}}}sB(ua);class rB extends JD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;this._updateTransparency(e,n)}static _updateTransparency(t,e){t.transparent=e.transparent,this._updateCommon(t,e)}static _updateCommon(t,e){t.uniforms.opacity&&(t.uniforms.opacity.value=e.opacity),t.opacity=e.opacity,t.alphaTest=e.alphaTest;const n=t.customMaterials;if(n){const t=Object.keys(n);for(let i of t){const t=n[i];t&&this._updateCommon(t,e)}}}}class oB extends Kf{constructor(t){super(t),this.node=t}toJSON(){const t=this.node.assemblerController;if(!t)return;const e={},n=this.node.material.customMaterials;if(n){const t=Object.keys(n);for(let i of t){const t=n[i];if(t){const n=this._materialToJson(t,{node:this.node,suffix:i});n&&(e[i]=n)}}}const i=[],s=t.assembler.param_configs();for(let t of s)i.push([t.name(),t.uniform_name]);const r=this._materialToJson(this.node.material,{node:this.node,suffix:\\\\\\\"main\\\\\\\"});r||console.warn(\\\\\\\"failed to save material from node\\\\\\\",this.node.path());return{material:r||{},uniforms_time_dependent:t.assembler.uniformsTimeDependent(),uniforms_resolution_dependent:t.assembler.uniforms_resolution_dependent(),param_uniform_pairs:i,customMaterials:e}}load(t){if(this._material=this._loadMaterial(t.material),this._material){if(this._material.customMaterials=this._material.customMaterials||{},t.customMaterials){const e=Object.keys(t.customMaterials);for(let n of e){const e=t.customMaterials[n],i=this._loadMaterial(e);i&&(this._material.customMaterials[n]=i)}}if(t.uniforms_time_dependent&&this.node.scene().uniformsController.addTimeDependentUniformOwner(this._material.uuid,this._material.uniforms),t.uniforms_resolution_dependent&&this.node.scene().uniformsController.addResolutionDependentUniformOwner(this._material.uuid,this._material.uniforms),t.param_uniform_pairs)for(let e of t.param_uniform_pairs){const t=e[0],n=e[1],i=this.node.params.get(t),s=this._material.uniforms[n],r=Object.keys(this._material.customMaterials);let o;for(let t of r){const e=this._material.customMaterials[t],i=null==e?void 0:e.uniforms[n];i&&(o=o||[],o.push(i))}i&&(s||o)&&i.options.setOption(\\\\\\\"callback\\\\\\\",(()=>{if(s&&tg.callback(i,s),o)for(let t of o)tg.callback(i,t)}))}}}material(){if(li.playerMode())return this._material}}function aB(t){return class extends t{constructor(){super(...arguments),this.setBuilderNode=ha.BOOLEAN(0,{callback:t=>{lB.PARAM_CALLBACK_setCompileRequired(t)}}),this.builderNode=ha.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{setBuilderNode:!0},callback:t=>{lB.PARAM_CALLBACK_setCompileRequired(t)}})}}}aB(ua);class lB extends $D{constructor(){super(...arguments),this._children_controller_context=ts.GL,this.persisted_config=new oB(this)}createMaterial(){var t;let e;return this.persisted_config&&(e=this.persisted_config.material()),e||(e=null===(t=this.assemblerController)||void 0===t?void 0:t.assembler.createMaterial()),e}get assemblerController(){return this._assembler_controller=this._assembler_controller||this._create_assembler_controller()}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}childrenAllowed(){return this.assemblerController?super.childrenAllowed():(this.scene().markAsReadOnly(this),!1)}compileIfRequired(){var t;(null===(t=this.assemblerController)||void 0===t?void 0:t.compileRequired())&&this._compile()}_compile(){const t=this.assemblerController;this.material&&t&&(t.assembler.setGlParentNode(this),this._setAssemblerGlParentNode(t),t.assembler.compileMaterial(this.material),t.post_compile())}_setAssemblerGlParentNode(t){if(!this.pv.setBuilderNode)return;const e=this.pv.builderNode.nodeWithContext(ts.MAT);if(!e)return;const n=e;n.assemblerController?n.type()==this.type()?t.assembler.setGlParentNode(n):this.states.error.set(`resolved node '${e.path()}' does not have the same type '${e.type()}' as current node '${this.type()}'`):this.states.error.set(`resolved node '${e.path()}' is not a builder node`)}static PARAM_CALLBACK_setCompileRequired(t){t.PARAM_CALLBACK_setCompileRequired()}PARAM_CALLBACK_setCompileRequired(){var t;null===(t=this.assemblerController)||void 0===t||t.setCompilationRequired(!0)}}function cB(t){return class extends t{constructor(){super(...arguments),this.useFog=ha.BOOLEAN(0)}}}cB(ua);class hB extends JD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.fog=n.useFog}}function uB(t){return class extends t{constructor(){super(...arguments),this.default=ha.FOLDER(null)}}}function dB(t){return class extends t{constructor(){super(...arguments),this.advanced=ha.FOLDER(null)}}}class pB extends(cB(QD(aB(dB(sB(uB(ua))))))){constructor(){super(...arguments),this.linewidth=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]})}}const _B=new pB;class mB extends lB{constructor(){super(...arguments),this.paramsConfig=_B,this.controllers={advancedCommon:new tB(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"lineBasicBuilder\\\\\\\"}usedAssembler(){return jn.GL_LINE}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();rB.update(this),hB.update(this),this.compileIfRequired(),this.material.linewidth=this.pv.linewidth,this.setMaterial(this.material)}}function fB(t){return class extends t{constructor(){super(...arguments),this.color=ha.COLOR([1,1,1],{conversion:lo.SRGB_TO_LINEAR}),this.useVertexColors=ha.BOOLEAN(0,{separatorAfter:!0}),this.transparent=ha.BOOLEAN(0),this.opacity=ha.FLOAT(1),this.alphaTest=ha.FLOAT(0)}}}O.a;fB(ua);class gB extends JD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.color.copy(n.color);const i=n.useVertexColors;i!=e.vertexColors&&(e.vertexColors=i,e.needsUpdate=!0),e.opacity=n.opacity,e.transparent=n.transparent,e.alphaTest=n.alphaTest}}function vB(t){return class extends t{constructor(){super(...arguments),this.useFog=ha.BOOLEAN(0)}}}vB(ua);class yB extends JD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.fog=n.useFog}}function xB(t){return{cook:!1,callback:(e,n)=>{t.update(e)}}}function bB(t,e,n){return{visibleIf:{[e]:1},nodeSelection:{context:ts.COP,types:null==n?void 0:n.types},cook:!1,callback:(e,n)=>{t.update(e)}}}class wB extends JD{constructor(t,e){super(t),this.node=t,this._update_options=e}add_hooks(t,e){t.addPostDirtyHook(\\\\\\\"TextureController\\\\\\\",(()=>{this.update()})),e.addPostDirtyHook(\\\\\\\"TextureController\\\\\\\",(()=>{this.update()}))}static update(t){}async _update(t,e,n,i){if(this._update_options.uniforms){const s=t,r=e;await this._update_texture_on_uniforms(s,r,n,i)}if(this._update_options.directParams){const s=t,r=e;await this._update_texture_on_material(s,r,n,i)}}async _update_texture_on_uniforms(t,e,n,i){this._update_required_attribute(t,t.uniforms,e,n,i,this._apply_texture_on_uniforms.bind(this),this._remove_texture_from_uniforms.bind(this))}_apply_texture_on_uniforms(t,e,n,i){const s=null!=e[n]&&null!=e[n].value;let r=!1;if(s){e[n].value.uuid!=i.uuid&&(r=!0)}if(!s||r){e[n]&&(e[n].value=i),this._apply_texture_on_material(t,t,n,i),t.needsUpdate=!0;const s=t.customMaterials;if(s){const t=Object.keys(s);for(let e of t){const t=s[e];t&&this._apply_texture_on_uniforms(t,t.uniforms,n,i)}}}}_remove_texture_from_uniforms(t,e,n){if(e[n]){if(e[n].value){e[n].value=null,this._remove_texture_from_material(t,t,n),t.needsUpdate=!0;const i=t.customMaterials;if(i){const t=Object.keys(i);for(let e of t){const t=i[e];t&&this._remove_texture_from_uniforms(t,t.uniforms,n)}}}}else li.warn(`'${n}' uniform not found. existing uniforms are:`,Object.keys(e).sort())}async _update_texture_on_material(t,e,n,i){this._update_required_attribute(t,t,e,n,i,this._apply_texture_on_material.bind(this),this._remove_texture_from_material.bind(this))}_apply_texture_on_material(t,e,n,i){const s=null!=e[n];let r=!1;if(s){e[n].uuid!=i.uuid&&(r=!0)}s&&!r||(e[n]=i,t.needsUpdate=!0)}_remove_texture_from_material(t,e,n){e[n]&&(e[n]=null,t.needsUpdate=!0)}async _update_required_attribute(t,e,n,i,s,r,o){i.isDirty()&&await i.compute();if(i.value){s.isDirty()&&await s.compute();const i=s.value.nodeWithContext(ts.COP);if(i){const s=(await i.compute()).texture();if(s)return void r(t,e,n,s)}}o(t,e,n)}}function TB(t){return class extends t{constructor(){super(...arguments),this.useMap=ha.BOOLEAN(0,xB(AB)),this.map=ha.NODE_PATH(vi.EMPTY,bB(AB,\\\\\\\"useMap\\\\\\\"))}}}O.a;TB(ua);class AB extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useMap,this.node.p.map)}async update(){this._update(this.node.material,\\\\\\\"map\\\\\\\",this.node.p.useMap,this.node.p.map)}static async update(t){t.controllers.map.update()}}function MB(t){return class extends t{constructor(){super(...arguments),this.useAlphaMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(EB)}),this.alphaMap=ha.NODE_PATH(vi.EMPTY,bB(EB,\\\\\\\"useAlphaMap\\\\\\\"))}}}O.a;MB(ua);class EB extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useAlphaMap,this.node.p.alphaMap)}async update(){this._update(this.node.material,\\\\\\\"alphaMap\\\\\\\",this.node.p.useAlphaMap,this.node.p.alphaMap)}static async update(t){t.controllers.alphaMap.update()}}function SB(t){return class extends t{constructor(){super(...arguments),this.useAOMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(CB)}),this.aoMap=ha.NODE_PATH(vi.EMPTY,bB(CB,\\\\\\\"useAOMap\\\\\\\")),this.aoMapIntensity=ha.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],visibleIf:{useAOMap:1}})}}}O.a;SB(ua);class CB extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useAOMap,this.node.p.aoMap)}async update(){if(this._update(this.node.material,\\\\\\\"aoMap\\\\\\\",this.node.p.useAOMap,this.node.p.aoMap),this._update_options.uniforms){this.node.material.uniforms.aoMapIntensity.value=this.node.pv.aoMapIntensity}if(this._update_options.directParams){this.node.material.aoMapIntensity=this.node.pv.aoMapIntensity}}static async update(t){t.controllers.aoMap.update()}}var NB;!function(t){t.MULT=\\\\\\\"mult\\\\\\\",t.ADD=\\\\\\\"add\\\\\\\",t.MIX=\\\\\\\"mix\\\\\\\"}(NB||(NB={}));const LB=[NB.MULT,NB.ADD,NB.MIX],OB={[NB.MULT]:w.nb,[NB.ADD]:w.c,[NB.MIX]:w.lb};function PB(t){return class extends t{constructor(){super(...arguments),this.useEnvMap=ha.BOOLEAN(0,xB(RB)),this.envMap=ha.NODE_PATH(vi.EMPTY,bB(RB,\\\\\\\"useEnvMap\\\\\\\",{types:[Fg.CUBE_CAMERA]})),this.combine=ha.INTEGER(0,{visibleIf:{useEnvMap:1},menu:{entries:LB.map(((t,e)=>({name:t,value:e})))}}),this.reflectivity=ha.FLOAT(1,{visibleIf:{useEnvMap:1}}),this.refractionRatio=ha.FLOAT(.98,{range:[-1,1],rangeLocked:[!1,!1],visibleIf:{useEnvMap:1}})}}}PB(ua);class RB extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useEnvMap,this.node.p.envMap)}async update(){this._update(this.node.material,\\\\\\\"envMap\\\\\\\",this.node.p.useEnvMap,this.node.p.envMap);const t=OB[LB[this.node.pv.combine]];if(this._update_options.uniforms){const t=this.node.material;t.uniforms.reflectivity.value=this.node.pv.reflectivity,t.uniforms.refractionRatio.value=this.node.pv.refractionRatio}if(this._update_options.directParams){const e=this.node.material;e.combine=t,e.reflectivity=this.node.pv.reflectivity,e.refractionRatio=this.node.pv.refractionRatio}}static async update(t){t.controllers.envMap.update()}}function IB(t){return class extends t{constructor(){super(...arguments),this.useLightMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(FB)}),this.lightMap=ha.NODE_PATH(vi.EMPTY,bB(FB,\\\\\\\"useLightMap\\\\\\\")),this.lightMapIntensity=ha.FLOAT(1,{visibleIf:{useLightMap:1}})}}}O.a;IB(ua);class FB extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useLightMap,this.node.p.lightMap)}async update(){if(this._update(this.node.material,\\\\\\\"lightMap\\\\\\\",this.node.p.useLightMap,this.node.p.lightMap),this._update_options.uniforms){this.node.material.uniforms.lightMapIntensity.value=this.node.pv.lightMapIntensity}if(this._update_options.directParams){this.node.material.lightMapIntensity=this.node.pv.lightMapIntensity}}static async update(t){t.controllers.lightMap.update()}}var DB;!function(t){t.ROUND=\\\\\\\"round\\\\\\\",t.BUTT=\\\\\\\"butt\\\\\\\",t.SQUARE=\\\\\\\"square\\\\\\\"}(DB||(DB={}));const BB=[DB.ROUND,DB.BUTT,DB.SQUARE];var zB;!function(t){t.ROUND=\\\\\\\"round\\\\\\\",t.BEVEL=\\\\\\\"bevel\\\\\\\",t.MITER=\\\\\\\"miter\\\\\\\"}(zB||(zB={}));const kB=[zB.ROUND,zB.BEVEL,zB.MITER];function UB(t){return class extends t{constructor(){super(...arguments),this.wireframe=ha.BOOLEAN(0,{separatorBefore:!0}),this.wireframeLinecap=ha.INTEGER(0,{menu:{entries:BB.map(((t,e)=>({name:t,value:e})))},visibleIf:{wireframe:1}}),this.wireframeLinejoin=ha.INTEGER(0,{menu:{entries:kB.map(((t,e)=>({name:t,value:e})))},visibleIf:{wireframe:1}})}}}O.a;UB(ua);class GB extends JD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.wireframe=n.wireframe,e.wireframeLinecap=BB[n.wireframeLinecap],e.wireframeLinejoin=kB[n.wireframeLinejoin],e.needsUpdate=!0}}function VB(t){return class extends t{constructor(){super(...arguments),this.textures=ha.FOLDER(null)}}}const HB={directParams:!0};class jB extends(vB(UB(QD(dB(IB(PB(SB(MB(TB(VB(fB(uB(ua))))))))))))){}const WB=new jB;class qB extends $D{constructor(){super(...arguments),this.paramsConfig=WB,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,HB),aoMap:new CB(this,HB),envMap:new RB(this,HB),lightMap:new FB(this,HB),map:new AB(this,HB)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshBasic\\\\\\\"}createMaterial(){return new lt.a({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),yB.update(this),GB.update(this),this.setMaterial(this.material)}}function XB(t){return class extends t{constructor(){super(...arguments),this.wireframe=ha.BOOLEAN(0)}}}XB(ua);class YB extends JD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.wireframe=n.wireframe,e.needsUpdate=!0}}const $B={uniforms:!0};class JB extends(cB(XB(QD(aB(dB(PB(SB(MB(TB(VB(sB(uB(ua))))))))))))){}const ZB=new JB;class KB extends lB{constructor(){super(...arguments),this.paramsConfig=ZB,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,$B),aoMap:new CB(this,$B),envMap:new RB(this,$B),map:new AB(this,$B)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshBasicBuilder\\\\\\\"}usedAssembler(){return jn.GL_MESH_BASIC}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();rB.update(this),hB.update(this),YB.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}function QB(t){return class extends t{constructor(){super(...arguments),this.emissive=ha.COLOR([0,0,0],{separatorBefore:!0}),this.useEmissiveMap=ha.BOOLEAN(0,xB(tz)),this.emissiveMap=ha.NODE_PATH(vi.EMPTY,bB(tz,\\\\\\\"useEmissiveMap\\\\\\\")),this.emissiveIntensity=ha.FLOAT(1)}}}O.a;QB(ua);class tz extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useEmissiveMap,this.node.p.emissiveMap)}async update(){if(this._update(this.node.material,\\\\\\\"emissiveMap\\\\\\\",this.node.p.useEmissiveMap,this.node.p.emissiveMap),this._update_options.uniforms){this.node.material.uniforms.emissive.value.copy(this.node.pv.emissive)}if(this._update_options.directParams){const t=this.node.material;t.emissive.copy(this.node.pv.emissive),t.emissiveIntensity=this.node.pv.emissiveIntensity}}static async update(t){t.controllers.emissiveMap.update()}}const ez={directParams:!0};class nz extends(vB(UB(QD(dB(IB(PB(QB(SB(MB(TB(VB(fB(uB(ua)))))))))))))){}const iz=new nz;class sz extends $D{constructor(){super(...arguments),this.paramsConfig=iz,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,ez),aoMap:new CB(this,ez),emissiveMap:new tz(this,ez),envMap:new RB(this,ez),lightMap:new FB(this,ez),map:new AB(this,ez)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshLambert\\\\\\\"}createMaterial(){return new Ts.a({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),yB.update(this),GB.update(this),this.setMaterial(this.material)}}function rz(t){return class extends t{constructor(){super(...arguments),this.shadowPCSS=ha.BOOLEAN(0,{callback:t=>{oz.PARAM_CALLBACK_setRecompileRequired(t)},separatorBefore:!0}),this.shadowPCSSSamplesCount=ha.INTEGER(16,{visibleIf:{shadowPCSS:1},range:[0,128],rangeLocked:[!0,!1]}),this.shadowPCSSFilterSize=ha.FLOAT(1,{visibleIf:{shadowPCSS:1},range:[0,10],rangeLocked:[!0,!1]})}}}rz(ua);class oz extends JD{constructor(t){super(t),this.node=t}initializeNode(){}static filterFragmentShader(t,e){const n=`\\\\n#define NUM_SAMPLES ${mf.integer(t.pv.shadowPCSSSamplesCount)}\\\\n#define PCSS_FILTER_SIZE ${mf.float(t.pv.shadowPCSSFilterSize)}\\\\n#define LIGHT_WORLD_SIZE 0.005\\\\n// #define LIGHT_FRUSTUM_WIDTH 1.0\\\\n// #define PCSS_FILTER_SIZE 1.0\\\\n#define LIGHT_SIZE_UV (PCSS_FILTER_SIZE * LIGHT_WORLD_SIZE)\\\\n#define NEAR_PLANE 9.5\\\\n\\\\n// #define NUM_SAMPLES 32\\\\n#define NUM_RINGS 11\\\\n#define BLOCKER_SEARCH_NUM_SAMPLES NUM_SAMPLES\\\\n#define PCF_NUM_SAMPLES NUM_SAMPLES\\\\n\\\\nvec2 poissonDisk[NUM_SAMPLES];\\\\n\\\\nvoid initPoissonSamples( const in vec2 randomSeed ) {\\\\n\\\\tfloat ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );\\\\n\\\\tfloat INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );\\\\n\\\\n\\\\t// jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/\\\\n\\\\tfloat angle = rand( randomSeed ) * PI2;\\\\n\\\\tfloat radius = INV_NUM_SAMPLES;\\\\n\\\\tfloat radiusStep = radius;\\\\n\\\\n\\\\tfor( int i = 0; i < NUM_SAMPLES; i ++ ) {\\\\n\\\\t\\\\tpoissonDisk[i] = vec2( cos( angle ), sin( angle ) ) * pow( radius, 0.75 );\\\\n\\\\t\\\\tradius += radiusStep;\\\\n\\\\t\\\\tangle += ANGLE_STEP;\\\\n\\\\t}\\\\n}\\\\n\\\\nfloat penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation\\\\n\\\\treturn (zReceiver - zBlocker) / zBlocker;\\\\n}\\\\n\\\\nfloat findBlocker( sampler2D shadowMap, const in vec2 uv, const in float zReceiver ) {\\\\n\\\\t// This uses similar triangles to compute what\\\\n\\\\t// area of the shadow map we should search\\\\n\\\\tfloat searchRadius = LIGHT_SIZE_UV * ( zReceiver - NEAR_PLANE ) / zReceiver;\\\\n\\\\tfloat blockerDepthSum = 0.0;\\\\n\\\\tint numBlockers = 0;\\\\n\\\\n\\\\tfor( int i = 0; i < BLOCKER_SEARCH_NUM_SAMPLES; i++ ) {\\\\n\\\\t\\\\tfloat shadowMapDepth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[i] * searchRadius));\\\\n\\\\t\\\\tif ( shadowMapDepth < zReceiver ) {\\\\n\\\\t\\\\t\\\\tblockerDepthSum += shadowMapDepth;\\\\n\\\\t\\\\t\\\\tnumBlockers ++;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tif( numBlockers == 0 ) return -1.0;\\\\n\\\\n\\\\treturn blockerDepthSum / float( numBlockers );\\\\n}\\\\n\\\\nfloat PCF_Filter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius ) {\\\\n\\\\tfloat sum = 0.0;\\\\n\\\\tfor( int i = 0; i < PCF_NUM_SAMPLES; i ++ ) {\\\\n\\\\t\\\\tfloat depth = unpackRGBAToDepth( texture2D( shadowMap, uv + poissonDisk[ i ] * filterRadius ) );\\\\n\\\\t\\\\tif( zReceiver <= depth ) sum += 1.0;\\\\n\\\\t}\\\\n\\\\tfor( int i = 0; i < PCF_NUM_SAMPLES; i ++ ) {\\\\n\\\\t\\\\tfloat depth = unpackRGBAToDepth( texture2D( shadowMap, uv + -poissonDisk[ i ].yx * filterRadius ) );\\\\n\\\\t\\\\tif( zReceiver <= depth ) sum += 1.0;\\\\n\\\\t}\\\\n\\\\treturn sum / ( 2.0 * float( PCF_NUM_SAMPLES ) );\\\\n}\\\\n\\\\nfloat PCSS ( sampler2D shadowMap, vec4 coords ) {\\\\n\\\\tvec2 uv = coords.xy;\\\\n\\\\tfloat zReceiver = coords.z; // Assumed to be eye-space z in this code\\\\n\\\\n\\\\tinitPoissonSamples( uv );\\\\n\\\\t// STEP 1: blocker search\\\\n\\\\tfloat avgBlockerDepth = findBlocker( shadowMap, uv, zReceiver );\\\\n\\\\n\\\\t//There are no occluders so early out (this saves filtering)\\\\n\\\\tif( avgBlockerDepth == -1.0 ) return 1.0;\\\\n\\\\n\\\\t// STEP 2: penumbra size\\\\n\\\\tfloat penumbraRatio = penumbraSize( zReceiver, avgBlockerDepth );\\\\n\\\\tfloat filterRadius = penumbraRatio * LIGHT_SIZE_UV * NEAR_PLANE / zReceiver;\\\\n\\\\n\\\\t// STEP 3: filtering\\\\n\\\\t//return avgBlockerDepth;\\\\n\\\\treturn PCF_Filter( shadowMap, uv, zReceiver, filterRadius );\\\\n}\\\\n`;let i=z;return i=i.replace(\\\\\\\"#ifdef USE_SHADOWMAP\\\\\\\",`#ifdef USE_SHADOWMAP\\\\n${n}\\\\n\\\\t\\\\t\\\\t\\\\t`),i=i.replace(\\\\\\\"#if defined( SHADOWMAP_TYPE_PCF )\\\\\\\",\\\\\\\"\\\\n\\\\t\\\\t\\\\t\\\\treturn PCSS( shadowMap, shadowCoord );\\\\n\\\\t\\\\t\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF )\\\\\\\"),e=e.replace(\\\\\\\"#include <shadowmap_pars_fragment>\\\\\\\",i)}async update(){const t=this.node;if(!t.assemblerController)return;const e=\\\\\\\"PCSS\\\\\\\";this.node.pv.shadowPCSS?t.assemblerController.addFilterFragmentShaderCallback(e,(t=>oz.filterFragmentShader(this.node,t))):t.assemblerController.removeFilterFragmentShaderCallback(e)}static async update(t){t.controllers.PCSS.update()}static PARAM_CALLBACK_setRecompileRequired(t){t.controllers.PCSS.update()}}const az={uniforms:!0};class lz extends(rz(cB(XB(QD(aB(dB(IB(PB(QB(SB(MB(TB(VB(sB(uB(ua)))))))))))))))){}const cz=new lz;class hz extends lB{constructor(){super(...arguments),this.paramsConfig=cz,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,az),aoMap:new CB(this,az),emissiveMap:new tz(this,az),envMap:new RB(this,az),lightMap:new FB(this,az),map:new AB(this,az),PCSS:new oz(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshLambertBuilder\\\\\\\"}usedAssembler(){return jn.GL_MESH_LAMBERT}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();rB.update(this),hB.update(this),YB.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}function uz(t){return class extends t{constructor(){super(...arguments),this.useBumpMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(dz)}),this.bumpMap=ha.NODE_PATH(\\\\\\\"\\\\\\\",bB(dz,\\\\\\\"useBumpMap\\\\\\\")),this.bumpScale=ha.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],...bB(dz,\\\\\\\"useBumpMap\\\\\\\")}),this.bumpBias=ha.FLOAT(0,{range:[0,1],rangeLocked:[!1,!1],...bB(dz,\\\\\\\"useBumpMap\\\\\\\")})}}}O.a;uz(ua);class dz extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useBumpMap,this.node.p.bumpMap)}async update(){if(this._update(this.node.material,\\\\\\\"bumpMap\\\\\\\",this.node.p.useBumpMap,this.node.p.bumpMap),this._update_options.uniforms){this.node.material.uniforms.bumpScale.value=this.node.pv.bumpScale}if(this._update_options.directParams){this.node.material.bumpScale=this.node.pv.bumpScale}}static async update(t){t.controllers.bumpMap.update()}}var pz;!function(t){t.TANGENT=\\\\\\\"tangent\\\\\\\",t.OBJECT=\\\\\\\"object\\\\\\\"}(pz||(pz={}));const _z=[pz.TANGENT,pz.OBJECT],mz={[pz.TANGENT]:w.Uc,[pz.OBJECT]:w.zb};function fz(t){return class extends t{constructor(){super(...arguments),this.useNormalMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(gz)}),this.normalMap=ha.NODE_PATH(vi.EMPTY,bB(gz,\\\\\\\"useNormalMap\\\\\\\")),this.normalMapType=ha.INTEGER(0,{visibleIf:{useNormalMap:1},menu:{entries:_z.map(((t,e)=>({name:t,value:e})))}}),this.normalScale=ha.VECTOR2([1,1],{visibleIf:{useNormalMap:1}})}}}O.a;fz(ua);class gz extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useNormalMap,this.node.p.normalMap)}async update(){this._update(this.node.material,\\\\\\\"normalMap\\\\\\\",this.node.p.useNormalMap,this.node.p.normalMap);const t=mz[_z[this.node.pv.normalMapType]];if(this._update_options.uniforms){this.node.material.uniforms.normalScale.value.copy(this.node.pv.normalScale)}const e=this.node.material;e.normalMapType=t,this._update_options.directParams&&e.normalScale.copy(this.node.pv.normalScale)}static async update(t){t.controllers.normalMap.update()}}function vz(t){return class extends t{constructor(){super(...arguments),this.useDisplacementMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(yz)}),this.displacementMap=ha.NODE_PATH(\\\\\\\"\\\\\\\",bB(yz,\\\\\\\"useDisplacementMap\\\\\\\")),this.displacementScale=ha.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],...bB(yz,\\\\\\\"useDisplacementMap\\\\\\\")}),this.displacementBias=ha.FLOAT(0,{range:[0,1],rangeLocked:[!1,!1],...bB(yz,\\\\\\\"useDisplacementMap\\\\\\\")})}}}O.a;vz(ua);class yz extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useDisplacementMap,this.node.p.displacementMap)}async update(){if(this._update(this.node.material,\\\\\\\"displacementMap\\\\\\\",this.node.p.useDisplacementMap,this.node.p.displacementMap),this._update_options.uniforms){const t=this.node.material;t.uniforms.displacementScale.value=this.node.pv.displacementScale,t.uniforms.displacementBias.value=this.node.pv.displacementBias}if(this._update_options.directParams){const t=this.node.material;t.displacementScale=this.node.pv.displacementScale,t.displacementBias=this.node.pv.displacementBias}}static async update(t){t.controllers.displacementMap.update()}}function xz(t){return class extends t{constructor(){super(...arguments),this.useMatcapMap=ha.BOOLEAN(0,xB(bz)),this.matcapMap=ha.NODE_PATH(vi.EMPTY,bB(bz,\\\\\\\"useMatcapMap\\\\\\\"))}}}O.a;xz(ua);class bz extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useMatcapMap,this.node.p.matcapMap)}async update(){this._update(this.node.material,\\\\\\\"matcap\\\\\\\",this.node.p.useMatcapMap,this.node.p.matcapMap)}static async update(t){t.controllers.matcap.update()}}const wz={directParams:!0};class Tz extends(vB(QD(dB(fz(vz(uz(MB(TB(xz(VB(fB(uB(ua))))))))))))){}const Az=new Tz;class Mz extends $D{constructor(){super(...arguments),this.paramsConfig=Az,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,wz),bumpMap:new dz(this,wz),displacementMap:new yz(this,wz),map:new AB(this,wz),matcap:new bz(this,wz),normalMap:new gz(this,wz)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshMatcap\\\\\\\"}createMaterial(){return new $f({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),yB.update(this),this.setMaterial(this.material)}}const Ez={directParams:!0};class Sz extends(vB(QD(fz(vz(uz(VB(uB(ua)))))))){}const Cz=new Sz;class Nz extends $D{constructor(){super(...arguments),this.paramsConfig=Cz,this.controllers={advancedCommon:new tB(this),bumpMap:new dz(this,Ez),displacementMap:new yz(this,Ez),normalMap:new gz(this,Ez)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshNormal\\\\\\\"}createMaterial(){return new Yf({vertexColors:!1,side:w.H,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();yB.update(this),this.setMaterial(this.material)}}function Lz(t){return class extends t{constructor(){super(...arguments),this.useSpecularMap=ha.BOOLEAN(0,xB(Oz)),this.specularMap=ha.NODE_PATH(vi.EMPTY,bB(Oz,\\\\\\\"useSpecularMap\\\\\\\"))}}}O.a;Lz(ua);class Oz extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useSpecularMap,this.node.p.specularMap)}async update(){this._update(this.node.material,\\\\\\\"specularMap\\\\\\\",this.node.p.useSpecularMap,this.node.p.specularMap)}static async update(t){t.controllers.specularMap.update()}}const Pz={directParams:!0};class Rz extends(vB(UB(QD(dB(Lz(fz(IB(PB(QB(vz(uz(SB(MB(TB(VB(fB(uB(ua)))))))))))))))))){constructor(){super(...arguments),this.flatShading=ha.BOOLEAN(0)}}const Iz=new Rz;class Fz extends $D{constructor(){super(...arguments),this.paramsConfig=Iz,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,Pz),aoMap:new CB(this,Pz),bumpMap:new dz(this,Pz),displacementMap:new yz(this,Pz),emissiveMap:new tz(this,Pz),envMap:new RB(this,Pz),lightMap:new FB(this,Pz),map:new AB(this,Pz),normalMap:new gz(this,Pz),specularMap:new Oz(this,Pz)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshPhong\\\\\\\"}createMaterial(){return new qf.a({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),yB.update(this),GB.update(this),this.material.flatShading!=this.pv.flatShading&&(this.material.flatShading=this.pv.flatShading,this.material.needsUpdate=!0),this.setMaterial(this.material)}}const Dz={uniforms:!0};class Bz extends(rz(cB(XB(QD(aB(dB(Lz(fz(IB(PB(QB(vz(uz(SB(MB(TB(VB(sB(uB(ua)))))))))))))))))))){}const zz=new Bz;class kz extends lB{constructor(){super(...arguments),this.paramsConfig=zz,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,Dz),aoMap:new CB(this,Dz),bumpMap:new dz(this,Dz),displacementMap:new yz(this,Dz),emissiveMap:new tz(this,Dz),envMap:new RB(this,Dz),lightMap:new FB(this,Dz),map:new AB(this,Dz),normalMap:new gz(this,Dz),specularMap:new Oz(this,Dz),PCSS:new oz(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshPhongBuilder\\\\\\\"}usedAssembler(){return jn.GL_MESH_PHONG}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();rB.update(this),hB.update(this),YB.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}function Uz(t){return class extends t{constructor(){super(...arguments),this.useEnvMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(Gz)}),this.envMap=ha.NODE_PATH(vi.EMPTY,bB(Gz,\\\\\\\"useEnvMap\\\\\\\")),this.envMapIntensity=ha.FLOAT(1,{visibleIf:{useEnvMap:1}}),this.refractionRatio=ha.FLOAT(.98,{range:[-1,1],rangeLocked:[!1,!1],visibleIf:{useEnvMap:1}})}}}Uz(ua);class Gz extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useEnvMap,this.node.p.envMap)}async update(){if(this._update(this.node.material,\\\\\\\"envMap\\\\\\\",this.node.p.useEnvMap,this.node.p.envMap),this._update_options.uniforms){const t=this.node.material;t.uniforms.envMapIntensity.value=this.node.pv.envMapIntensity,t.uniforms.refractionRatio.value=this.node.pv.refractionRatio}if(this._update_options.directParams){const t=this.node.material;t.envMapIntensity=this.node.pv.envMapIntensity,t.refractionRatio=this.node.pv.refractionRatio}}static async update(t){t.controllers.envMap.update()}}function Vz(t){return class extends t{constructor(){super(...arguments),this.useMetalnessMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(Hz)}),this.metalnessMap=ha.NODE_PATH(vi.EMPTY,bB(Hz,\\\\\\\"useMetalnessMap\\\\\\\")),this.metalness=ha.FLOAT(1),this.useRoughnessMap=ha.BOOLEAN(0,{separatorBefore:!0,...xB(Hz)}),this.roughnessMap=ha.NODE_PATH(vi.EMPTY,bB(Hz,\\\\\\\"useRoughnessMap\\\\\\\")),this.roughness=ha.FLOAT(.5)}}}O.a;Vz(ua);class Hz extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useMetalnessMap,this.node.p.metalnessMap)}async update(){if(this._update(this.node.material,\\\\\\\"metalnessMap\\\\\\\",this.node.p.useMetalnessMap,this.node.p.metalnessMap),this._update_options.uniforms){this.node.material.uniforms.metalness.value=this.node.pv.metalness}if(this._update_options.directParams){this.node.material.metalness=this.node.pv.metalness}if(this._update(this.node.material,\\\\\\\"roughnessMap\\\\\\\",this.node.p.useRoughnessMap,this.node.p.roughnessMap),this._update_options.uniforms){this.node.material.uniforms.roughness.value=this.node.pv.roughness}if(this._update_options.directParams){this.node.material.roughness=this.node.pv.roughness}}static async update(t){t.controllers.metalnessRoughnessMap.update()}}function jz(t){return class extends t{constructor(){super(...arguments),this.clearcoat=ha.FLOAT(0,{separatorBefore:!0}),this.useClearCoatMap=ha.BOOLEAN(0,xB(qz)),this.clearcoatMap=ha.NODE_PATH(vi.EMPTY,bB(qz,\\\\\\\"useClearCoatMap\\\\\\\")),this.useClearCoatNormalMap=ha.BOOLEAN(0,xB(qz)),this.clearcoatNormalMap=ha.NODE_PATH(vi.EMPTY,bB(qz,\\\\\\\"useClearCoatNormalMap\\\\\\\")),this.clearcoatNormalScale=ha.VECTOR2([1,1],{visibleIf:{useClearCoatNormalMap:1}}),this.clearcoatRoughness=ha.FLOAT(0),this.useClearCoatRoughnessMap=ha.BOOLEAN(0,xB(qz)),this.clearcoatRoughnessMap=ha.NODE_PATH(vi.EMPTY,bB(qz,\\\\\\\"useClearCoatRoughnessMap\\\\\\\")),this.useSheen=ha.BOOLEAN(0),this.sheen=ha.FLOAT(0,{range:[0,1],rangeLocked:[!0,!1],visibleIf:{useSheen:1}}),this.sheenRoughness=ha.FLOAT(1,{range:[0,1],rangeLocked:[!0,!1],visibleIf:{useSheen:1}}),this.sheenColor=ha.COLOR([1,1,1],{visibleIf:{useSheen:1}}),this.transmission=ha.FLOAT(0,{range:[0,1]}),this.useTransmissionMap=ha.BOOLEAN(0),this.transmissionMap=ha.NODE_PATH(vi.EMPTY,{visibleIf:{useTransmissionMap:1}}),this.ior=ha.FLOAT(1.5,{range:[1,2.3333],rangeLocked:[!0,!0]}),this.thickness=ha.FLOAT(.01,{range:[0,10],rangeLocked:[!0,!1]}),this.useThicknessMap=ha.BOOLEAN(0),this.thicknessMap=ha.NODE_PATH(vi.EMPTY,{visibleIf:{useThicknessMap:1}}),this.attenuationDistance=ha.FLOAT(0,{range:[0,10],rangeLocked:[!0,!1]}),this.attenuationColor=ha.COLOR([1,1,1])}}}jz(ua);const Wz=new Wf.a;class qz extends wB{constructor(t,e){super(t,e),this.node=t,this._sheenColorClone=new D.a}initializeNode(){this.add_hooks(this.node.p.useClearCoatMap,this.node.p.clearcoatMap),this.add_hooks(this.node.p.useClearCoatNormalMap,this.node.p.clearcoatNormalMap),this.add_hooks(this.node.p.useClearCoatRoughnessMap,this.node.p.clearcoatRoughnessMap),this.add_hooks(this.node.p.useTransmissionMap,this.node.p.transmissionMap),this.add_hooks(this.node.p.useThicknessMap,this.node.p.thicknessMap)}async update(){this._update(this.node.material,\\\\\\\"clearcoatMap\\\\\\\",this.node.p.useClearCoatMap,this.node.p.clearcoatMap),this._update(this.node.material,\\\\\\\"clearcoatNormalMap\\\\\\\",this.node.p.useClearCoatNormalMap,this.node.p.clearcoatNormalMap),this._update(this.node.material,\\\\\\\"clearcoatRoughnessMap\\\\\\\",this.node.p.useClearCoatRoughnessMap,this.node.p.clearcoatRoughnessMap),this._update(this.node.material,\\\\\\\"transmissionMap\\\\\\\",this.node.p.useTransmissionMap,this.node.p.transmissionMap),this._update(this.node.material,\\\\\\\"thicknessMap\\\\\\\",this.node.p.useThicknessMap,this.node.p.thicknessMap);const t=this.node.pv;Wz.ior=t.ior;const e=Wz.reflectivity;if(this._update_options.uniforms){const n=this.node.material;n.uniforms.clearcoat.value=t.clearcoat,n.uniforms.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),n.uniforms.clearcoatRoughness.value=t.clearcoatRoughness,n.uniforms.reflectivity.value=e,n.uniforms.transmission.value=t.transmission,n.uniforms.thickness.value=t.thickness,n.uniforms.attenuationDistance.value=t.attenuationDistance,n.uniforms.attenuationTint.value=t.attenuationColor,t.useSheen?(this._sheenColorClone.copy(t.sheenColor),n.uniforms.sheen.value=t.sheen,n.uniforms.sheenRoughness.value=t.sheenRoughness,n.uniforms.sheenTint.value=this._sheenColorClone):n.uniforms.sheen.value=0,n.uniforms.ior.value=t.ior,n.specularTint=n.uniforms.specularTint.value,n.ior=n.uniforms.ior.value}if(this._update_options.directParams){const n=this.node.material;n.clearcoat=t.clearcoat,null!=n.clearcoatNormalScale&&n.clearcoatNormalScale.copy(t.clearcoatNormalScale),n.clearcoatRoughness=t.clearcoatRoughness,n.reflectivity=e,t.useSheen?(this._sheenColorClone.copy(t.sheenColor),n.sheen=t.sheen,n.sheenRoughness=t.sheenRoughness,n.sheenTint=this._sheenColorClone):n.sheen=0,n.transmission=t.transmission,n.thickness=t.thickness,n.attenuationDistance=t.attenuationDistance,n.attenuationTint=t.attenuationColor}}static async update(t){t.controllers.physical.update()}}const Xz={directParams:!0};class Yz extends(vB(UB(QD(dB(jz(Vz(fz(IB(Uz(QB(vz(uz(SB(MB(TB(VB(fB(uB(ua))))))))))))))))))){}const $z=new Yz;class Jz extends $D{constructor(){super(...arguments),this.paramsConfig=$z,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,Xz),aoMap:new CB(this,Xz),bumpMap:new dz(this,Xz),displacementMap:new yz(this,Xz),emissiveMap:new tz(this,Xz),envMap:new Gz(this,Xz),lightMap:new FB(this,Xz),map:new AB(this,Xz),metalnessRoughnessMap:new Hz(this,Xz),normalMap:new gz(this,Xz),physical:new qz(this,Xz)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshPhysical\\\\\\\"}createMaterial(){return new Wf.a({vertexColors:!1,side:w.H,color:16777215,opacity:1,metalness:1,roughness:0})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),yB.update(this),GB.update(this),this.setMaterial(this.material)}}const Zz={uniforms:!0};class Kz extends(function(t){return class extends(rz(cB(XB(QD(aB(t)))))){}}(dB(jz(Vz(fz(IB(Uz(QB(vz(uz(SB(MB(TB(VB(sB(uB(ua))))))))))))))))){}const Qz=new Kz;class tk extends lB{constructor(){super(...arguments),this.paramsConfig=Qz,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,Zz),aoMap:new CB(this,Zz),bumpMap:new dz(this,Zz),displacementMap:new yz(this,Zz),emissiveMap:new tz(this,Zz),envMap:new Gz(this,{uniforms:!0,directParams:!0}),lightMap:new FB(this,Zz),map:new AB(this,Zz),metalnessRoughnessMap:new Hz(this,{uniforms:!0,directParams:!0}),normalMap:new gz(this,Zz),physical:new qz(this,{uniforms:!0,directParams:!0}),PCSS:new oz(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshPhysicalBuilder\\\\\\\"}usedAssembler(){return jn.GL_MESH_PHYSICAL}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}createMaterial(){const t=super.createMaterial();return t.isMeshStandardMaterial=!0,t.isMeshPhysicalMaterial=!0,t}async cook(){for(let t of this.controllerNames)this.controllers[t].update();rB.update(this),hB.update(this),YB.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}const ek={directParams:!0};class nk extends(vB(UB(QD(dB(Vz(fz(IB(Uz(QB(vz(uz(SB(MB(TB(VB(fB(uB(ua)))))))))))))))))){}const ik=new nk;class sk extends $D{constructor(){super(...arguments),this.paramsConfig=ik,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,ek),aoMap:new CB(this,ek),bumpMap:new dz(this,ek),displacementMap:new yz(this,ek),emissiveMap:new tz(this,ek),envMap:new Gz(this,ek),lightMap:new FB(this,ek),map:new AB(this,ek),metalnessRoughnessMap:new Hz(this,ek),normalMap:new gz(this,ek)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshStandard\\\\\\\"}createMaterial(){return new ws.a({vertexColors:!1,side:w.H,color:16777215,opacity:1,metalness:1,roughness:0})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),yB.update(this),GB.update(this),this.setMaterial(this.material)}}const rk={uniforms:!0};class ok extends(rz(cB(XB(QD(aB(dB(Vz(fz(IB(Uz(QB(vz(uz(SB(MB(TB(VB(sB(uB(ua)))))))))))))))))))){}const ak=new ok;class lk extends lB{constructor(){super(...arguments),this.paramsConfig=ak,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,rk),aoMap:new CB(this,rk),bumpMap:new dz(this,rk),displacementMap:new yz(this,rk),emissiveMap:new tz(this,rk),envMap:new Gz(this,rk),lightMap:new FB(this,rk),map:new AB(this,rk),metalnessRoughnessMap:new Hz(this,rk),normalMap:new gz(this,rk),PCSS:new oz(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshStandardBuilder\\\\\\\"}usedAssembler(){return jn.GL_MESH_STANDARD}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();rB.update(this),hB.update(this),YB.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}const ck=U.meshphong_frag.slice(0,U.meshphong_frag.indexOf(\\\\\\\"void main() {\\\\\\\")),hk=U.meshphong_frag.slice(U.meshphong_frag.indexOf(\\\\\\\"void main() {\\\\\\\")),uk={uniforms:I.merge([H.phong.uniforms,{thicknessMap:{value:null},thicknessColor:{value:new D.a(16777215)},thicknessDistortion:{value:.1},thicknessAmbient:{value:0},thicknessAttenuation:{value:.1},thicknessPower:{value:2},thicknessScale:{value:10}}]),vertexShader:[\\\\\\\"#define USE_UV\\\\\\\",U.meshphong_vert].join(\\\\\\\"\\\\n\\\\\\\"),fragmentShader:[\\\\\\\"#define USE_UV\\\\\\\",\\\\\\\"#define SUBSURFACE\\\\\\\",ck,\\\\\\\"uniform sampler2D thicknessMap;\\\\\\\",\\\\\\\"uniform float thicknessPower;\\\\\\\",\\\\\\\"uniform float thicknessScale;\\\\\\\",\\\\\\\"uniform float thicknessDistortion;\\\\\\\",\\\\\\\"uniform float thicknessAmbient;\\\\\\\",\\\\\\\"uniform float thicknessAttenuation;\\\\\\\",\\\\\\\"uniform vec3 thicknessColor;\\\\\\\",\\\\\\\"void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\\\\\\\",\\\\\\\"\\\\tvec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r;\\\\\\\",\\\\\\\"\\\\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\\\\\\\",\\\\\\\"\\\\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\\\\\\\",\\\\\\\"\\\\tvec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\\\\\\\",\\\\\\\"\\\\treflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\\\\\\\",\\\\\\\"}\\\\\\\",hk.replace(\\\\\\\"#include <lights_fragment_begin>\\\\\\\",(dk=U.lights_fragment_begin,pk=\\\\\\\"RE_Direct( directLight, geometry, material, reflectedLight );\\\\\\\",_k=[\\\\\\\"RE_Direct( directLight, geometry, material, reflectedLight );\\\\\\\",\\\\\\\"#if defined( SUBSURFACE ) && defined( USE_UV )\\\\\\\",\\\\\\\" RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\\\\\\\",\\\\\\\"#endif\\\\\\\"].join(\\\\\\\"\\\\n\\\\\\\"),dk.split(pk).join(_k)))].join(\\\\\\\"\\\\n\\\\\\\")};var dk,pk,_k;function mk(t){return{cook:!1,callback:(e,n)=>{xk.PARAM_CALLBACK_update_uniformColor(e,n,t)}}}function fk(t){return{cook:!1,callback:(e,n)=>{xk.PARAM_CALLBACK_update_uniformN(e,n,t)}}}const gk={uniforms:!0};class vk extends(vB(XB(QD(dB(MB(TB(VB(function(t){return class extends t{constructor(){var t;super(...arguments),this.diffuse=ha.COLOR([1,1,1],{...mk(\\\\\\\"diffuse\\\\\\\")}),this.shininess=ha.FLOAT(1,{range:[0,1e3]}),this.thicknessMap=ha.NODE_PATH(vi.EMPTY,{nodeSelection:{context:ts.COP},...(t=\\\\\\\"thicknessMap\\\\\\\",{cook:!1,callback:(e,n)=>{xk.PARAM_CALLBACK_update_uniformTexture(e,n,t)}})}),this.thicknessColor=ha.COLOR([.5,.3,0],{...mk(\\\\\\\"thicknessColor\\\\\\\")}),this.thicknessDistortion=ha.FLOAT(.1,{...fk(\\\\\\\"thicknessDistortion\\\\\\\")}),this.thicknessAmbient=ha.FLOAT(.4,{...fk(\\\\\\\"thicknessAmbient\\\\\\\")}),this.thicknessAttenuation=ha.FLOAT(.8,{...fk(\\\\\\\"thicknessAttenuation\\\\\\\")}),this.thicknessPower=ha.FLOAT(2,{range:[0,10],...fk(\\\\\\\"thicknessPower\\\\\\\")}),this.thicknessScale=ha.FLOAT(16,{range:[0,100],...fk(\\\\\\\"thicknessScale\\\\\\\")})}}}(uB(ua)))))))))){}const yk=new vk;class xk extends $D{constructor(){super(...arguments),this.paramsConfig=yk,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,gk),map:new AB(this,gk)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshSubsurfaceScattering\\\\\\\"}createMaterial(){const t=I.clone(uk.uniforms),e=new F({uniforms:t,vertexShader:uk.vertexShader,fragmentShader:uk.fragmentShader,lights:!0});return e.extensions.derivatives=!0,e}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();yB.update(this),YB.update(this),this.update_map(this.p.thicknessMap,\\\\\\\"thicknessMap\\\\\\\"),this.material.uniforms.diffuse.value.copy(this.pv.diffuse),this.material.uniforms.shininess.value=this.pv.shininess,this.material.uniforms.thicknessColor.value.copy(this.pv.thicknessColor),this.material.uniforms.thicknessDistortion.value=this.pv.thicknessDistortion,this.material.uniforms.thicknessAmbient.value=this.pv.thicknessAmbient,this.material.uniforms.thicknessAttenuation.value=this.pv.thicknessAttenuation,this.material.uniforms.thicknessPower.value=this.pv.thicknessPower,this.material.uniforms.thicknessScale.value=this.pv.thicknessScale,this.setMaterial(this.material)}static PARAM_CALLBACK_update_uniformN(t,e,n){t.material.uniforms[n].value=e.value}static PARAM_CALLBACK_update_uniformColor(t,e,n){e.parent_param&&t.material.uniforms[n].value.copy(e.parent_param.value)}static PARAM_CALLBACK_update_uniformTexture(t,e,n){t.update_map(e,n)}async update_map(t,e){const n=t.value.nodeWithContext(ts.COP);n||(this.material.uniforms[e].value=null);const i=n,s=await i.compute();this.material.uniforms[e].value=s.texture()}}function bk(t){return class extends t{constructor(){super(...arguments),this.useGradientMap=ha.BOOLEAN(0,xB(wk)),this.gradientMap=ha.NODE_PATH(vi.EMPTY,bB(wk,\\\\\\\"useGradientMap\\\\\\\"))}}}O.a;bk(ua);class wk extends wB{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useGradientMap,this.node.p.gradientMap)}async update(){this._update(this.node.material,\\\\\\\"gradientMap\\\\\\\",this.node.p.useGradientMap,this.node.p.gradientMap)}static async update(t){t.controllers.gradientMap.update()}}const Tk={directParams:!0};class Ak extends(vB(UB(QD(dB(fz(IB(bk(QB(vz(uz(SB(MB(TB(VB(fB(uB(ua))))))))))))))))){}const Mk=new Ak;class Ek extends $D{constructor(){super(...arguments),this.paramsConfig=Mk,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,Tk),aoMap:new CB(this,Tk),bumpMap:new dz(this,Tk),displacementMap:new yz(this,Tk),emissiveMap:new tz(this,Tk),gradientMap:new wk(this,Tk),lightMap:new FB(this,Tk),map:new AB(this,Tk),normalMap:new gz(this,Tk)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshToon\\\\\\\"}createMaterial(){return new Xf({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),yB.update(this),GB.update(this),this.setMaterial(this.material)}}const Sk={directParams:!0};class Ck extends(cB(QD(dB(MB(TB(VB(fB(function(t){return class extends t{constructor(){super(...arguments),this.size=ha.FLOAT(1),this.sizeAttenuation=ha.BOOLEAN(1)}}}(uB(ua)))))))))){}const Nk=new Ck;class Lk extends $D{constructor(){super(...arguments),this.paramsConfig=Nk,this.controllers={advancedCommon:new tB(this),alphaMap:new EB(this,Sk),map:new AB(this,Sk)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"points\\\\\\\"}createMaterial(){return new bs.a({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),hB.update(this),this.material.size=this.pv.size,this.material.sizeAttenuation=this.pv.sizeAttenuation,this.setMaterial(this.material)}}class Ok extends(cB(QD(aB(dB(sB(uB(ua))))))){}const Pk=new Ok;class Rk extends lB{constructor(){super(...arguments),this.paramsConfig=Pk,this.controllers={advancedCommon:new tB(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"pointsBuilder\\\\\\\"}usedAssembler(){return jn.GL_POINTS}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();rB.update(this),hB.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}class Ik extends(QD(fB(ua))){}const Fk=new Ik;class Dk extends $D{constructor(){super(...arguments),this.paramsConfig=Fk,this.controllers={advancedCommon:new tB(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"shadow\\\\\\\"}createMaterial(){return new Hf({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();gB.update(this),this.setMaterial(this.material)}}class Bk extends B.a{constructor(){const t=Bk.SkyShader,e=new F({name:\\\\\\\"SkyShader\\\\\\\",fragmentShader:t.fragmentShader,vertexShader:t.vertexShader,uniforms:I.clone(t.uniforms),side:w.i,depthWrite:!1});super(new N(1,1,1),e)}}Bk.prototype.isSky=!0,Bk.SkyShader={uniforms:{turbidity:{value:2},rayleigh:{value:1},mieCoefficient:{value:.005},mieDirectionalG:{value:.8},sunPosition:{value:new p.a},up:{value:new p.a(0,1,0)}},vertexShader:\\\\\\\"\\\\n\\\\t\\\\tuniform vec3 sunPosition;\\\\n\\\\t\\\\tuniform float rayleigh;\\\\n\\\\t\\\\tuniform float turbidity;\\\\n\\\\t\\\\tuniform float mieCoefficient;\\\\n\\\\t\\\\tuniform vec3 up;\\\\n\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t\\\\tvarying vec3 vSunDirection;\\\\n\\\\t\\\\tvarying float vSunfade;\\\\n\\\\t\\\\tvarying vec3 vBetaR;\\\\n\\\\t\\\\tvarying vec3 vBetaM;\\\\n\\\\t\\\\tvarying float vSunE;\\\\n\\\\n\\\\t\\\\t// constants for atmospheric scattering\\\\n\\\\t\\\\tconst float e = 2.71828182845904523536028747135266249775724709369995957;\\\\n\\\\t\\\\tconst float pi = 3.141592653589793238462643383279502884197169;\\\\n\\\\n\\\\t\\\\t// wavelength of used primaries, according to preetham\\\\n\\\\t\\\\tconst vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\\\\n\\\\t\\\\t// this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\\\\n\\\\t\\\\t// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\\\\n\\\\t\\\\tconst vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\\\\n\\\\n\\\\t\\\\t// mie stuff\\\\n\\\\t\\\\t// K coefficient for the primaries\\\\n\\\\t\\\\tconst float v = 4.0;\\\\n\\\\t\\\\tconst vec3 K = vec3( 0.686, 0.678, 0.666 );\\\\n\\\\t\\\\t// MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\\\\n\\\\t\\\\tconst vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\\\\n\\\\n\\\\t\\\\t// earth shadow hack\\\\n\\\\t\\\\t// cutoffAngle = pi / 1.95;\\\\n\\\\t\\\\tconst float cutoffAngle = 1.6110731556870734;\\\\n\\\\t\\\\tconst float steepness = 1.5;\\\\n\\\\t\\\\tconst float EE = 1000.0;\\\\n\\\\n\\\\t\\\\tfloat sunIntensity( float zenithAngleCos ) {\\\\n\\\\t\\\\t\\\\tzenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\\\\n\\\\t\\\\t\\\\treturn EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec3 totalMie( float T ) {\\\\n\\\\t\\\\t\\\\tfloat c = ( 0.2 * T ) * 10E-18;\\\\n\\\\t\\\\t\\\\treturn 0.434 * c * MieConst;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\tgl_Position.z = gl_Position.w; // set z to camera.far\\\\n\\\\n\\\\t\\\\t\\\\tvSunDirection = normalize( sunPosition );\\\\n\\\\n\\\\t\\\\t\\\\tvSunE = sunIntensity( dot( vSunDirection, up ) );\\\\n\\\\n\\\\t\\\\t\\\\tvSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\tfloat rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\\\\n\\\\n\\\\t\\\\t\\\\t// extinction (absorbtion + out scattering)\\\\n\\\\t\\\\t\\\\t// rayleigh coefficients\\\\n\\\\t\\\\t\\\\tvBetaR = totalRayleigh * rayleighCoefficient;\\\\n\\\\n\\\\t\\\\t\\\\t// mie coefficients\\\\n\\\\t\\\\t\\\\tvBetaM = totalMie( turbidity ) * mieCoefficient;\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t\\\\tvarying vec3 vSunDirection;\\\\n\\\\t\\\\tvarying float vSunfade;\\\\n\\\\t\\\\tvarying vec3 vBetaR;\\\\n\\\\t\\\\tvarying vec3 vBetaM;\\\\n\\\\t\\\\tvarying float vSunE;\\\\n\\\\n\\\\t\\\\tuniform float mieDirectionalG;\\\\n\\\\t\\\\tuniform vec3 up;\\\\n\\\\n\\\\t\\\\tconst vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );\\\\n\\\\n\\\\t\\\\t// constants for atmospheric scattering\\\\n\\\\t\\\\tconst float pi = 3.141592653589793238462643383279502884197169;\\\\n\\\\n\\\\t\\\\tconst float n = 1.0003; // refractive index of air\\\\n\\\\t\\\\tconst float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\\\\n\\\\n\\\\t\\\\t// optical length at zenith for molecules\\\\n\\\\t\\\\tconst float rayleighZenithLength = 8.4E3;\\\\n\\\\t\\\\tconst float mieZenithLength = 1.25E3;\\\\n\\\\t\\\\t// 66 arc seconds -> degrees, and the cosine of that\\\\n\\\\t\\\\tconst float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\\\\n\\\\n\\\\t\\\\t// 3.0 / ( 16.0 * pi )\\\\n\\\\t\\\\tconst float THREE_OVER_SIXTEENPI = 0.05968310365946075;\\\\n\\\\t\\\\t// 1.0 / ( 4.0 * pi )\\\\n\\\\t\\\\tconst float ONE_OVER_FOURPI = 0.07957747154594767;\\\\n\\\\n\\\\t\\\\tfloat rayleighPhase( float cosTheta ) {\\\\n\\\\t\\\\t\\\\treturn THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat hgPhase( float cosTheta, float g ) {\\\\n\\\\t\\\\t\\\\tfloat g2 = pow( g, 2.0 );\\\\n\\\\t\\\\t\\\\tfloat inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\\\\n\\\\t\\\\t\\\\treturn ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec3 direction = normalize( vWorldPosition - cameraPos );\\\\n\\\\n\\\\t\\\\t\\\\t// optical length\\\\n\\\\t\\\\t\\\\t// cutoff angle at 90 to avoid singularity in next formula.\\\\n\\\\t\\\\t\\\\tfloat zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\\\\n\\\\t\\\\t\\\\tfloat inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\\\\n\\\\t\\\\t\\\\tfloat sR = rayleighZenithLength * inverse;\\\\n\\\\t\\\\t\\\\tfloat sM = mieZenithLength * inverse;\\\\n\\\\n\\\\t\\\\t\\\\t// combined extinction factor\\\\n\\\\t\\\\t\\\\tvec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\\\\n\\\\n\\\\t\\\\t\\\\t// in scattering\\\\n\\\\t\\\\t\\\\tfloat cosTheta = dot( direction, vSunDirection );\\\\n\\\\n\\\\t\\\\t\\\\tfloat rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\\\\n\\\\t\\\\t\\\\tvec3 betaRTheta = vBetaR * rPhase;\\\\n\\\\n\\\\t\\\\t\\\\tfloat mPhase = hgPhase( cosTheta, mieDirectionalG );\\\\n\\\\t\\\\t\\\\tvec3 betaMTheta = vBetaM * mPhase;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\\\\n\\\\t\\\\t\\\\tLin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\\\\n\\\\n\\\\t\\\\t\\\\t// nightsky\\\\n\\\\t\\\\t\\\\tfloat theta = acos( direction.y ); // elevation --\\\\x3e y-axis, [-pi/2, pi/2]\\\\n\\\\t\\\\t\\\\tfloat phi = atan( direction.z, direction.x ); // azimuth --\\\\x3e x-axis [-pi/2, pi/2]\\\\n\\\\t\\\\t\\\\tvec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\\\\n\\\\t\\\\t\\\\tvec3 L0 = vec3( 0.1 ) * Fex;\\\\n\\\\n\\\\t\\\\t\\\\t// composition + solar disc\\\\n\\\\t\\\\t\\\\tfloat sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\\\\n\\\\t\\\\t\\\\tL0 += ( vSunE * 19000.0 * Fex ) * sundisk;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( retColor, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\t#include <tonemapping_fragment>\\\\n\\\\t\\\\t\\\\t#include <encodings_fragment>\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const zk=new class extends ua{constructor(){super(...arguments),this.turbidity=ha.FLOAT(2,{range:[0,20]}),this.rayleigh=ha.FLOAT(1,{range:[0,4]}),this.mieCoefficient=ha.FLOAT(.005),this.mieDirectional=ha.FLOAT(.8),this.inclination=ha.FLOAT(.5),this.azimuth=ha.FLOAT(.25),this.up=ha.VECTOR3([0,1,0])}};class kk extends $D{constructor(){super(...arguments),this.paramsConfig=zk}static type(){return\\\\\\\"sky\\\\\\\"}createMaterial(){const t=(new Bk).material;return t.depthWrite=!0,t}async cook(){const t=this.material.uniforms;t.turbidity.value=this.pv.turbidity,t.rayleigh.value=this.pv.rayleigh,t.mieCoefficient.value=this.pv.mieCoefficient,t.mieDirectionalG.value=this.pv.mieDirectional,t.up.value.copy(this.pv.up);const e=Math.PI*(this.pv.inclination-.5),n=2*Math.PI*(this.pv.azimuth-.5);t.sunPosition.value.x=Math.cos(n),t.sunPosition.value.y=Math.sin(n)*Math.sin(e),t.sunPosition.value.z=Math.sin(n)*Math.cos(e),this.setMaterial(this.material)}}var Uk=\\\\\\\"precision highp float;\\\\nprecision highp int;\\\\n\\\\nvarying vec3 vPw;\\\\n\\\\n#include <common>\\\\n\\\\nvoid main()\\\\t{\\\\n\\\\n\\\\t// start builder body code\\\\n\\\\n\\\\tvPw = position;\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n}\\\\\\\",Gk=\\\\\\\"precision highp float;\\\\nprecision highp int;\\\\n\\\\n#include <common>\\\\n\\\\n#define DIR_LIGHTS_COUNT 1\\\\n#define MAX_STEPS_COUNT 4096\\\\n\\\\nuniform vec3 u_Color;\\\\nuniform float u_VolumeDensity;\\\\nuniform float u_ShadowDensity;\\\\nuniform float u_StepSize;\\\\nuniform vec3 u_BoundingBoxMin;\\\\nuniform vec3 u_BoundingBoxMax;\\\\n//const int u_PointsCount = 3;\\\\n//uniform vec3 u_Points[3];\\\\nuniform sampler2D u_Map;\\\\n\\\\n//const int u_DirectionalLightsCount = 1;\\\\nuniform vec3 u_DirectionalLightDirection; //[DIR_LIGHTS_COUNT];\\\\n\\\\nvarying vec3 vPw;\\\\n// varying vec3 vN;\\\\n// varying vec2 vUV;\\\\n//varying vec3 vPCameraSpace;\\\\n// varying vec4 vCd;\\\\n\\\\nvec3 normalize_in_bbox(vec3 point){\\\\n\\\\n\\\\tvec3 min = u_BoundingBoxMin;\\\\n\\\\tvec3 max = u_BoundingBoxMax;\\\\n\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\t(point.x - min.x) / (max.x - min.x),\\\\n\\\\t\\\\t(point.y - min.y) / (max.y - min.y),\\\\n\\\\t\\\\t(point.z - min.z) / (max.z - min.z)\\\\n\\\\t);\\\\n}\\\\n\\\\nbool is_inside_bbox(vec3 Pw){\\\\n\\\\n\\\\tvec3 min = u_BoundingBoxMin;\\\\n\\\\tvec3 max = u_BoundingBoxMax;\\\\n\\\\n\\\\treturn (\\\\n\\\\t\\\\tPw.x > min.x &&\\\\n\\\\t\\\\tPw.y > min.y &&\\\\n\\\\t\\\\tPw.z > min.z &&\\\\n\\\\n\\\\t\\\\tPw.x < max.x &&\\\\n\\\\t\\\\tPw.y < max.y &&\\\\n\\\\t\\\\tPw.z < max.z\\\\n\\\\t\\\\t);\\\\n}\\\\n\\\\nfloat density_to_opacity(float density, float step_size){\\\\n\\\\tfloat curent_density = density;\\\\n\\\\tcurent_density = max(0.0, curent_density);\\\\n\\\\n\\\\tfloat opacity = (1.0-exp(-curent_density * step_size));\\\\n\\\\treturn max(opacity,0.0);\\\\n}\\\\n\\\\nfloat density_function(vec3 position_for_step){\\\\n\\\\tfloat density = 1.0;\\\\n\\\\t// start builder body code\\\\n\\\\n\\\\treturn density;\\\\n}\\\\n\\\\nvec4 raymarch_light(vec3 ray_dir, vec3 start_pos){\\\\n\\\\n\\\\tfloat step_size = u_StepSize;\\\\n\\\\tvec3 step_vector = ray_dir * step_size;\\\\n\\\\n\\\\tvec3 current_pos = start_pos + step_vector*rand(start_pos.x*ray_dir.xy);\\\\n\\\\tfloat opacity = 0.0;\\\\n\\\\tfor(int i=0; i<MAX_STEPS_COUNT; i++){\\\\n\\\\t\\\\tif(opacity >= 0.99){ break; }\\\\n\\\\n\\\\t\\\\tif( is_inside_bbox(current_pos) ){\\\\n\\\\n\\\\t\\\\t\\\\tfloat density = density_function(current_pos) * u_ShadowDensity;\\\\n\\\\t\\\\t\\\\topacity += density_to_opacity(density, step_size);\\\\n\\\\t\\\\t\\\\tcurrent_pos += step_vector;\\\\n\\\\n\\\\t\\\\t}else{\\\\n\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 light_color = vec3(1.0, 1.0, 1.0) * u_Color;\\\\n\\\\tlight_color *= (1.0-opacity);\\\\n\\\\treturn vec4(light_color, 1.0-opacity);\\\\n}\\\\n\\\\nvec4 raymarch_bbox(vec3 start_pos, vec3 ray_dir){\\\\n\\\\n\\\\tfloat step_size = u_StepSize;\\\\n\\\\tvec3 step_vector = ray_dir * step_size;\\\\n\\\\n\\\\tvec3 current_pos = start_pos - step_vector*rand(ray_dir.xz);\\\\n\\\\tfloat opacity = 0.0;\\\\n\\\\tvec3 color = vec3(0.0, 0.0, 0.0);\\\\n\\\\tfloat steps_count = 0.0;\\\\n\\\\tbool was_inside_bbox = false;\\\\n\\\\tfor(int i=0; i<MAX_STEPS_COUNT; i++){\\\\n\\\\t\\\\tif(opacity >= 0.99){ break; }\\\\n\\\\n\\\\t\\\\tif( i==0 || is_inside_bbox(current_pos) ){\\\\n\\\\t\\\\t\\\\twas_inside_bbox = true;\\\\n\\\\n\\\\t\\\\t\\\\tfloat density = density_function(current_pos) * u_VolumeDensity;\\\\n\\\\t\\\\t\\\\topacity += density_to_opacity(density, step_size);\\\\n\\\\n\\\\t\\\\t\\\\tvec4 light_color = vec4(0.0,0.0,0.0,1.0); //vec4(1.0,1.0,1.0,1.0);\\\\n\\\\t\\\\t\\\\t// vec3 directional_light_direction;\\\\n\\\\t\\\\t\\\\t// for ( int l = 0; l < DIR_LIGHTS_COUNT; l++ ) {\\\\n\\\\t\\\\t\\\\t// directional_light_direction = u_DirectionalLightsDirection[ l ];\\\\n\\\\t\\\\t\\\\tlight_color += raymarch_light(-u_DirectionalLightDirection, current_pos);\\\\n\\\\t\\\\t\\\\t// }\\\\n\\\\t\\\\t\\\\tfloat blend = 1.0-opacity;\\\\n\\\\t\\\\t\\\\tcolor = mix( color.xyz, light_color.xyz, vec3(blend, blend, blend) );\\\\n\\\\t\\\\t\\\\tsteps_count += 1.0;\\\\n\\\\n\\\\t\\\\t}else{\\\\n\\\\t\\\\t\\\\tif (was_inside_bbox) { break; }\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tcurrent_pos += step_vector;\\\\n\\\\t}\\\\n\\\\n\\\\treturn vec4(color, opacity);\\\\n\\\\t// steps_count = steps_count / 5.0;\\\\n\\\\t// return vec4(vec3(steps_count, steps_count, steps_count), 1.0);\\\\n}\\\\n\\\\nvoid main()\\\\t{\\\\n\\\\n\\\\tvec3 eye = normalize(vPw - cameraPosition);\\\\n\\\\t// we can start from the bbox, as we are front facing\\\\n\\\\tvec3 start_pos = vPw;\\\\n\\\\n\\\\tvec4 color = raymarch_bbox(start_pos, eye);\\\\n\\\\tgl_FragColor = color;\\\\n\\\\n}\\\\\\\";const Vk={u_Color:{value:new D.a(1,1,1)},u_VolumeDensity:{value:5},u_ShadowDensity:{value:2},u_StepSize:{value:.01},u_BoundingBoxMin:{value:new p.a(-1,-1,-1)},u_BoundingBoxMax:{value:new p.a(1,1,1)},u_DirectionalLightDirection:{value:new p.a(-1,-1,-1)}};function Hk(t){return class extends t{constructor(){super(...arguments),this.color=ha.COLOR([1,1,1]),this.stepSize=ha.FLOAT(.01),this.density=ha.FLOAT(1),this.shadowDensity=ha.FLOAT(1),this.lightDir=ha.VECTOR3([-1,-1,-1])}}}Hk(ua);class jk{constructor(t){this.node=t}static render_hook(t,e,n,i,s,r,o){if(o){this._object_bbox.setFromObject(o);const t=s;t.uniforms.u_BoundingBoxMin.value.copy(this._object_bbox.min),t.uniforms.u_BoundingBoxMax.value.copy(this._object_bbox.max)}}update_uniforms_from_params(){const t=this.node.material.uniforms;t.u_Color.value.copy(this.node.pv.color),t.u_StepSize.value=this.node.pv.stepSize,t.u_VolumeDensity.value=this.node.pv.density,t.u_ShadowDensity.value=this.node.pv.shadowDensity;const e=t.u_DirectionalLightDirection.value,n=this.node.pv.lightDir;e&&(e.x=n.x,e.y=n.y,e.z=n.z)}}jk._object_bbox=new Ry.a;class Wk extends(Hk(ua)){}const qk=new Wk;class Xk extends $D{constructor(){super(...arguments),this.paramsConfig=qk,this._volume_controller=new jk(this)}static type(){return\\\\\\\"volume\\\\\\\"}createMaterial(){const t=new F({vertexShader:Uk,fragmentShader:Gk,side:w.H,transparent:!0,depthTest:!0,uniforms:I.clone(Vk)});return yr.add_user_data_render_hook(t,jk.render_hook.bind(jk)),t}initializeNode(){}async cook(){this._volume_controller.update_uniforms_from_params(),this.setMaterial(this.material)}}class Yk extends(aB(Hk(ua))){}const $k=new Yk;class Jk extends lB{constructor(){super(...arguments),this.paramsConfig=$k,this._volume_controller=new jk(this)}static type(){return\\\\\\\"volumeBuilder\\\\\\\"}usedAssembler(){return jn.GL_VOLUME}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){}async cook(){this._volume_controller.update_uniforms_from_params(),this.compileIfRequired(),this.setMaterial(this.material)}}class Zk extends aa{static context(){return ts.MAT}cook(){this.cookController.endCook()}}class Kk extends Zk{}class Qk extends Kk{constructor(){super(...arguments),this._children_controller_context=ts.ANIM}static type(){return es.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class tU extends Kk{constructor(){super(...arguments),this._children_controller_context=ts.COP}static type(){return es.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class eU extends Kk{constructor(){super(...arguments),this._children_controller_context=ts.EVENT}static type(){return es.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class nU extends Kk{constructor(){super(...arguments),this._children_controller_context=ts.MAT}static type(){return es.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class iU extends Zk{constructor(){super(...arguments),this.paramsConfig=new ef,this.effectsComposerController=new nf(this),this.displayNodeController=new Fm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=ts.POST}static type(){return es.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class sU extends Kk{constructor(){super(...arguments),this._children_controller_context=ts.ROP}static type(){return es.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}var rU=n(87);const oU=\\\\\\\"parent object\\\\\\\",aU=[oU,oU,oU,oU];var lU;!function(t){t[t.MANAGER=0]=\\\\\\\"MANAGER\\\\\\\",t[t.CAMERA=2]=\\\\\\\"CAMERA\\\\\\\",t[t.LIGHT=3]=\\\\\\\"LIGHT\\\\\\\"}(lU||(lU={}));class cU extends aa{constructor(){super(...arguments),this.renderOrder=lU.MANAGER,this._children_group=this._create_children_group(),this._attachableToHierarchy=!0,this._used_in_scene=!0}static context(){return ts.OBJ}static displayedInputNames(){return aU}_create_children_group(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}attachableToHierarchy(){return this._attachableToHierarchy}usedInScene(){return this._used_in_scene}addObjectToParent(t){this.attachableToHierarchy()&&t.add(this.object)}removeObjectFromParent(){if(this.attachableToHierarchy()){const t=this.object.parent;t&&t.remove(this.object)}}initializeBaseNode(){this._object=this._create_object_with_attributes(),this.nameController.add_post_set_fullPath_hook(this.set_object_name.bind(this)),this.set_object_name()}get children_group(){return this._children_group}get object(){return this._object}_create_object_with_attributes(){const t=this.createObject();return t.node=this,t.add(this._children_group),t}set_object_name(){this._object&&(this._object.name=this.path(),this._children_group.name=`${this.path()}:parented_outputs`)}createObject(){const t=new Q.a;return t.matrixAutoUpdate=!1,t}isDisplayNodeCooking(){if(this.displayNodeController){const t=this.displayNodeController.displayNode();if(t)return t.cookController.isCooking()}return!1}isDisplayed(){var t,e;return(null===(e=null===(t=this.flags)||void 0===t?void 0:t.display)||void 0===e?void 0:e.active())||!1}}class hU extends cU{constructor(){super(...arguments),this.flags=new Di(this),this.renderOrder=lU.LIGHT,this._color_with_intensity=new D.a(0),this._used_in_scene=!0,this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this)}get light(){return this._light}initializeBaseNode(){super.initializeBaseNode(),this._light=this.createLight(),this.object.add(this._light),this.flags.display.onUpdate((()=>{this._updateLightAttachment()})),this.dirtyController.addPostDirtyHook(\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\",this._cook_main_without_inputs_when_dirty_bound)}async _cook_main_without_inputs_when_dirty(){await this.cookController.cookMainWithoutInputs()}set_object_name(){super.set_object_name(),this._light&&(this._light.name=`${this.path()}:light`)}_updateLightAttachment(){this.flags.display.active()?(this.object.add(this.light),this._cook_main_without_inputs_when_dirty()):this.object.remove(this.light)}cook(){this.updateLightParams(),this.updateShadowParams(),this.cookController.endCook()}updateLightParams(){}updateShadowParams(){}}const uU=new class extends ua{constructor(){super(...arguments),this.color=ha.COLOR([1,1,1],{conversion:lo.SRGB_TO_LINEAR}),this.intensity=ha.FLOAT(1)}};class dU extends hU{constructor(){super(...arguments),this.paramsConfig=uU}static type(){return\\\\\\\"ambientLight\\\\\\\"}createLight(){const t=new rU.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.io.inputs.setCount(0,1)}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity}}class pU extends cv.a{constructor(t,e,n=10,i=10){super(t,e),this.type=\\\\\\\"RectAreaLight\\\\\\\",this.width=n,this.height=i}get power(){return this.intensity*this.width*this.height*Math.PI}set power(t){this.intensity=t/(this.width*this.height*Math.PI)}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}pU.prototype.isRectAreaLight=!0;var _U,mU=n(61);class fU{static init(){const t=[1,0,0,2e-5,1,0,0,503905e-9,1,0,0,.00201562,1,0,0,.00453516,1,0,0,.00806253,1,0,0,.0125978,1,0,0,.018141,1,0,0,.0246924,1,0,0,.0322525,1,0,0,.0408213,1,0,0,.0503999,1,0,0,.0609894,1,0,0,.0725906,1,0,0,.0852058,1,0,0,.0988363,1,0,0,.113484,1,0,0,.129153,1,0,0,.145839,1,0,0,.163548,1,0,0,.182266,1,0,0,.201942,1,0,0,.222314,1,0,0,.241906,1,0,0,.262314,1,0,0,.285754,1,0,0,.310159,1,0,0,.335426,1,0,0,.361341,1,0,0,.387445,1,0,0,.412784,1,0,0,.438197,1,0,0,.466966,1,0,0,.49559,1,0,0,.523448,1,0,0,.549938,1,0,0,.57979,1,0,0,.608746,1,0,0,.636185,1,0,0,.664748,1,0,0,.69313,1,0,0,.71966,1,0,0,.747662,1,0,0,.774023,1,0,0,.799775,1,0,0,.825274,1,0,0,.849156,1,0,0,.873248,1,0,0,.89532,1,0,0,.917565,1,0,0,.937863,1,0,0,.958139,1,0,0,.976563,1,0,0,.994658,1,0,0,1.0112,1,0,0,1.02712,1,0,0,1.04189,1,0,0,1.05568,1,0,0,1.06877,1,0,0,1.08058,1,0,0,1.09194,1,0,0,1.10191,1,0,0,1.11161,1,0,0,1.1199,1,0,0,1.12813,.999547,-4.48815e-7,.0224417,199902e-10,.999495,-113079e-10,.0224406,503651e-9,.999496,-452317e-10,.0224406,.00201461,.999496,-101772e-9,.0224406,.00453287,.999495,-180928e-9,.0224406,.00805845,.999497,-282702e-9,.0224406,.0125914,.999496,-407096e-9,.0224406,.0181319,.999498,-554114e-9,.0224406,.02468,.999499,-723768e-9,.0224406,.0322363,.999495,-916058e-9,.0224405,.0408009,.999499,-.00113101,.0224408,.050375,.999494,-.00136863,.0224405,.0609586,.999489,-.00162896,.0224401,.0725537,.999489,-.00191201,.0224414,.0851619,.999498,-.00221787,.0224413,.0987867,.999492,-.00254642,.0224409,.113426,.999507,-.00289779,.0224417,.129088,.999494,-.0032716,.0224386,.145767,.999546,-.0036673,.0224424,.163472,.999543,-.00408166,.0224387,.182182,.999499,-.00450056,.0224338,.201843,.999503,-.00483661,.0224203,.222198,.999546,-.00452928,.022315,.241714,.999508,-.00587403,.0224329,.262184,.999509,-.00638806,.0224271,.285609,.999501,-.00691028,.0224166,.309998,.999539,-.00741979,.0223989,.335262,.999454,-.00786282,.0223675,.361154,.999529,-.00811928,.0222828,.387224,.999503,-.00799941,.0221063,.41252,.999561,-.00952753,.0223057,.438006,.999557,-.0099134,.0222065,.466735,.999541,-.0100935,.0220402,.495332,.999562,-.00996821,.0218067,.523197,.999556,-.0105031,.0217096,.550223,.999561,-.0114191,.0217215,.579498,.999588,-.0111818,.0213357,.608416,.999633,-.0107725,.0208689,.635965,.999527,-.0121671,.0210149,.664476,.999508,-.0116005,.020431,.692786,.999568,-.0115604,.0199791,.719709,.999671,-.0121117,.0197415,.74737,.999688,-.0110769,.0188846,.773692,.99962,-.0122368,.0188452,.799534,.999823,-.0110325,.0178001,.825046,.999599,-.0114923,.0174221,.849075,.999619,-.0105923,.0164345,.872999,.999613,-.0105988,.0158227,.895371,.99964,-.00979861,.0148131,.917364,.99977,-.00967238,.0140721,.938002,.999726,-.00869175,.0129543,.957917,.99973,-.00866872,.0122329,.976557,.999773,-.00731956,.0108958,.994459,.999811,-.00756027,.0102715,1.01118,.999862,-.00583732,.00878781,1.02701,.999835,-.00631438,.00827529,1.04186,.999871,-.00450785,.00674583,1.05569,.999867,-.00486079,.00621041,1.06861,.999939,-.00322072,.00478301,1.08064,.999918,-.00318199,.00406395,1.09181,1.00003,-.00193348,.00280682,1.10207,.999928,-.00153729,.00198741,1.11152,.999933,-623666e-9,917714e-9,1.12009,1,-102387e-11,9.07581e-7,1.12813,.997866,-8.96716e-7,.0448334,199584e-10,.997987,-225945e-10,.0448389,502891e-9,.997987,-903781e-10,.0448388,.00201156,.997985,-203351e-9,.0448388,.00452602,.997986,-361514e-9,.0448388,.00804629,.997987,-56487e-8,.0448389,.0125724,.997988,-813423e-9,.0448389,.0181045,.997984,-.00110718,.0448387,.0246427,.997985,-.00144616,.0448388,.0321875,.997987,-.00183038,.044839,.0407392,.997983,-.00225987,.0448387,.0502986,.997991,-.00273467,.0448389,.0608667,.997984,-.00325481,.0448384,.0724444,.998002,-.00382043,.044839,.0850348,.997997,-.00443145,.0448396,.0986372,.998007,-.00508796,.0448397,.113255,.998008,-.00578985,.04484,.128891,.998003,-.00653683,.0448384,.145548,.997983,-.00732713,.0448358,.163221,.997985,-.00815454,.0448358,.181899,.998005,-.00898985,.0448286,.201533,.998026,-.00964404,.0447934,.221821,.998055,-.00922677,.044611,.241282,.99804,-.0117361,.0448245,.261791,.998048,-.0127628,.0448159,.285181,.998088,-.0138055,.0447996,.30954,.998058,-.0148206,.0447669,.334751,.998099,-.0156998,.044697,.36061,.998116,-.0161976,.0445122,.386603,.998195,-.015945,.0441711,.411844,.998168,-.0183947,.0444255,.43773,.998184,-.0197913,.0443809,.466009,.998251,-.0201426,.0440689,.494574,.998305,-.0198847,.0435632,.522405,.998273,-.0210577,.043414,.549967,.998254,-.0227901,.0433943,.578655,.998349,-.0223108,.0426529,.60758,.99843,-.0223088,.042,.635524,.998373,-.0241141,.0418987,.663621,.998425,-.0231446,.0408118,.691906,.998504,-.0233684,.0400565,.719339,.998443,-.0241652,.0394634,.74643,.99848,-.0228715,.0380002,.773086,.998569,-.023519,.0372322,.798988,.998619,-.0223108,.0356468,.824249,.998594,-.0223105,.034523,.848808,.998622,-.0213426,.0328887,.87227,.998669,-.0207912,.0314374,.895157,.998705,-.0198416,.0296925,.916769,.998786,-.0189168,.0279634,.937773,.998888,-.0178811,.0261597,.957431,.99906,-.0166845,.0242159,.976495,.999038,-.0155464,.0222638,.994169,.999237,-.0141349,.0201967,1.01112,.999378,-.0129324,.0181744,1.02692,.999433,-.0113192,.0159898,1.04174,.999439,-.0101244,.0140385,1.05559,.999614,-.00837456,.0117826,1.06852,.999722,-.00721769,.00983745,1.08069,.999817,-.00554067,.00769002,1.09176,.99983,-.00426961,.005782,1.10211,.999964,-.00273904,.00374503,1.11152,1.00001,-.00136739,.00187176,1.12031,.999946,393227e-10,-28919e-9,1.12804,.995847,-13435e-10,.0671785,19916e-9,.995464,-338387e-10,.0671527,501622e-9,.99547,-135355e-9,.0671531,.00200649,.995471,-30455e-8,.0671532,.00451461,.99547,-541423e-9,.0671531,.008026,.995471,-84598e-8,.0671531,.0125407,.99547,-.00121823,.0671531,.0180589,.99547,-.00165817,.0671531,.0245806,.995463,-.00216583,.0671526,.0321062,.995468,-.00274127,.0671527,.0406366,.995474,-.00338447,.0671534,.0501717,.995473,-.00409554,.0671533,.0607131,.995478,-.00487451,.0671531,.0722618,.995476,-.00572148,.0671532,.0848191,.995477,-.00663658,.0671539,.0983882,.995498,-.00761986,.0671541,.112972,.995509,-.00867094,.0671542,.128568,.995509,-.00978951,.0671531,.145183,.995503,-.0109725,.0671491,.162808,.995501,-.012211,.0671465,.181441,.99553,-.0134565,.0671371,.201015,.99555,-.014391,.0670831,.221206,.99558,-.014351,.0668883,.240813,.995577,-.0173997,.0671055,.261257,.995602,-.0191111,.0671178,.284467,.995623,-.0206705,.0670946,.308765,.995658,-.022184,.0670472,.333905,.995705,-.0234832,.0669417,.359677,.995719,-.0241933,.0666714,.385554,.995786,-.0243539,.066266,.410951,.995887,-.0271866,.0664367,.437163,.995944,-.0296012,.0664931,.464842,.996004,-.0301045,.0660105,.49332,.996128,-.0298311,.0652694,.521131,.996253,-.0316426,.0650739,.549167,.996244,-.0339043,.0649433,.57737,.996309,-.033329,.0638926,.606073,.996417,-.0338935,.0630849,.634527,.996372,-.0353104,.0625083,.66256,.996542,-.0348942,.0611986,.690516,.996568,-.0351614,.060069,.718317,.996711,-.0354317,.0588522,.74528,.996671,-.0349513,.0571902,.772061,.996865,-.0345622,.0555321,.798089,.996802,-.0342566,.0537816,.823178,.996992,-.0330862,.0516095,.847949,.996944,-.0324666,.0495537,.871431,.997146,-.0309544,.0470302,.894357,.997189,-.0299372,.0446043,.916142,.997471,-.0281389,.0418812,.937193,.997515,-.0268702,.0391823,.957,.997812,-.0247166,.0361338,.975936,.998027,-.0233525,.0333945,.99391,.998233,-.0209839,.0301917,1.01075,.998481,-.0194309,.027271,1.02669,.998859,-.0169728,.0240162,1.04173,.99894,-.0152322,.0210517,1.05551,.999132,-.0127497,.0178632,1.06856,.999369,-.0108282,.014787,1.08054,.999549,-.00845886,.0116185,1.09185,.999805,-.0063937,.00867209,1.10207,.99985,-.00414582,.00566823,1.1117,.999912,-.00207443,.00277562,1.12022,1.00001,870226e-10,-53766e-9,1.12832,.991943,-178672e-11,.0893382,198384e-10,.991952,-450183e-10,.089339,499849e-9,.991956,-180074e-9,.0893394,.0019994,.991955,-405167e-9,.0893393,.00449867,.991953,-720298e-9,.0893391,.00799764,.991955,-.00112548,.0893393,.0124964,.991957,-.0016207,.0893395,.0179951,.991958,-.00220601,.0893396,.0244939,.991947,-.00288137,.0893385,.0319929,.991962,-.00364693,.0893399,.0404933,.991965,-.00450264,.0893399,.049995,.99198,-.00544862,.0893411,.0604995,.99197,-.00648491,.0893397,.0720074,.991976,-.00761164,.089341,.0845207,.99198,-.00882891,.0893405,.0980413,.991982,-.0101367,.0893396,.112571,.992008,-.011535,.0893415,.128115,.992026,-.0130228,.0893414,.144672,.992064,-.0145966,.0893418,.162241,.992041,-.0162421,.0893359,.180801,.992086,-.0178888,.0893214,.200302,.992157,-.0190368,.0892401,.220332,.992181,-.0195584,.0890525,.240144,.992175,-.0227257,.0892153,.260728,.99221,-.0254195,.089304,.283473,.99222,-.0274883,.0892703,.307673,.992317,-.0294905,.0892027,.332729,.992374,-.0311861,.0890577,.358387,.992505,-.0320656,.0886994,.384102,.992568,-.0329715,.0883198,.409767,.992675,-.036006,.0883602,.436145,.992746,-.0392897,.0884591,.463217,.992873,-.0399337,.0878287,.491557,.992934,-.040231,.0870108,.519516,.993091,-.0422013,.0865857,.547741,.993259,-.0443503,.0861937,.575792,.993455,-.0446368,.0851187,.604233,.993497,-.0454299,.0840576,.632925,.993694,-.0463296,.0829671,.660985,.993718,-.0470619,.0817185,.688714,.993973,-.0468838,.0800294,.716743,.994207,-.046705,.0781286,.74377,.994168,-.0469698,.0763337,.77042,.9945,-.0456816,.0738184,.796659,.994356,-.0455518,.0715545,.821868,.994747,-.0439488,.0686085,.846572,.994937,-.0430056,.065869,.870435,.995142,-.0413414,.0626446,.893272,.995451,-.0396521,.05929,.915376,.995445,-.0378453,.0558503,.936196,.995967,-.0355219,.0520949,.956376,.996094,-.0335146,.048377,.975327,.996622,-.030682,.0442575,.993471,.996938,-.0285504,.0404693,1.01052,.997383,-.0253399,.0360903,1.02637,.997714,-.0231651,.0322176,1.04139,.998249,-.0198138,.0278433,1.05542,.998596,-.0174337,.0238759,1.06846,.998946,-.0141349,.0195944,1.08056,.99928,-.0115603,.0156279,1.09181,.999507,-.00839065,.0114607,1.10213,.999697,-.005666,.00763325,1.11169,.999869,-.00269902,.00364946,1.12042,1.00001,623836e-10,-319288e-10,1.12832,.987221,-222675e-11,.111332,197456e-10,.98739,-561116e-10,.111351,497563e-9,.987448,-224453e-9,.111357,.00199031,.987441,-505019e-9,.111357,.0044782,.987442,-897816e-9,.111357,.00796129,.987442,-.00140284,.111357,.0124396,.987444,-.00202012,.111357,.0179132,.987442,-.00274964,.111357,.0243824,.987446,-.00359147,.111357,.0318474,.987435,-.00454562,.111356,.0403086,.987461,-.00561225,.111358,.0497678,.987458,-.00679125,.111358,.0602239,.987443,-.0080828,.111356,.0716792,.987476,-.0094872,.111358,.0841364,.98749,-.0110044,.111361,.097597,.987508,-.0126344,.111362,.112062,.987494,-.0143767,.111357,.127533,.987526,-.0162307,.111359,.144015,.987558,-.0181912,.111361,.161502,.987602,-.0202393,.111355,.179979,.987692,-.022273,.111346,.199386,.987702,-.0235306,.111215,.219183,.987789,-.0247628,.111061,.239202,.987776,-.0280668,.111171,.259957,.987856,-.0316751,.111327,.282198,.987912,-.0342468,.111282,.306294,.988,-.0367205,.111198,.331219,.988055,-.0387766,.110994,.356708,.988241,-.0397722,.110547,.382234,.988399,-.0416076,.110198,.408227,.988539,-.0448192,.110137,.434662,.988661,-.0483793,.110143,.461442,.988967,-.0495895,.109453,.489318,.989073,-.0506797,.108628,.517516,.989274,-.0526953,.108003,.545844,.989528,-.054578,.107255,.573823,.989709,-.0561503,.106294,.601944,.989991,-.056866,.104896,.630855,.990392,-.0572914,.103336,.658925,.990374,-.0586224,.10189,.686661,.990747,-.0584764,.099783,.714548,.991041,-.0582662,.0974309,.74186,.991236,-.0584118,.0951678,.768422,.991585,-.0573055,.0921581,.794817,.991984,-.0564241,.0891167,.820336,.9921,-.0553608,.085805,.84493,.992749,-.0533816,.0820354,.868961,.99288,-.0518661,.0782181,.891931,.993511,-.0492492,.0738935,.914186,.993617,-.0471956,.0696402,.93532,.99411,-.044216,.0649659,.95543,.994595,-.0416654,.0603177,.974685,.994976,-.0384314,.0553493,.992807,.995579,-.0353491,.0503942,1.00996,.996069,-.0319787,.0452123,1.02606,.996718,-.028472,.0400112,1.04114,.997173,-.0250789,.0349456,1.05517,.997818,-.0213326,.029653,1.0683,.998318,-.0178509,.024549,1.0805,.998853,-.0141118,.0194197,1.09177,.999218,-.0105914,.0143869,1.1022,.999594,-.00693474,.00943517,1.11175,.99975,-.00340478,.00464051,1.12056,1.00001,109172e-9,-112821e-9,1.12853,.983383,-266524e-11,.133358,196534e-10,.981942,-671009e-10,.133162,494804e-9,.981946,-268405e-9,.133163,.00197923,.981944,-603912e-9,.133163,.00445326,.981941,-.00107362,.133162,.00791693,.981946,-.00167755,.133163,.0123703,.981944,-.00241569,.133162,.0178135,.981945,-.00328807,.133163,.0242466,.981945,-.00429472,.133162,.03167,.981955,-.00543573,.133164,.0400846,.981951,-.00671105,.133163,.0494901,.981968,-.00812092,.133165,.0598886,.981979,-.00966541,.133166,.0712811,.981996,-.0113446,.133168,.083669,.982014,-.0131585,.133169,.0970533,.982011,-.0151073,.133167,.111438,.982062,-.0171906,.133172,.126826,.9821,-.0194067,.133175,.143215,.982149,-.0217502,.133176,.160609,.982163,-.0241945,.133173,.178981,.982247,-.0265907,.133148,.198249,.982291,-.027916,.132974,.217795,.982396,-.0299663,.132868,.238042,.982456,-.0334544,.132934,.258901,.982499,-.0378636,.133137,.280639,.982617,-.0409274,.133085,.304604,.98274,-.0438523,.132985,.329376,.982944,-.0462288,.132728,.354697,.98308,-.0475995,.132228,.380102,.983391,-.0501901,.131924,.406256,.983514,-.0535899,.131737,.432735,.98373,-.0571858,.131567,.459359,.984056,-.0592353,.130932,.486637,.984234,-.0610488,.130092,.51509,.984748,-.0630758,.12923,.543461,.985073,-.0647398,.128174,.571376,.985195,-.0671941,.127133,.599414,.985734,-.0681345,.125576,.628134,.986241,-.0686089,.123639,.656399,.986356,-.0698511,.121834,.684258,.986894,-.0700931,.119454,.711818,.987382,-.0698321,.116718,.739511,.988109,-.0693975,.113699,.766267,.988363,-.0689584,.110454,.792456,.989112,-.0672353,.106602,.81813,.989241,-.0662034,.10267,.842889,.990333,-.0638938,.0981381,.867204,.990591,-.0618534,.0935388,.89038,.991106,-.0593117,.088553,.912576,.991919,-.0562676,.0832187,.934118,.992111,-.0534085,.0778302,.954254,.992997,-.0495459,.0720453,.973722,.993317,-.0463707,.0663458,.991949,.994133,-.0421245,.0601883,1.00936,.994705,-.0384977,.0542501,1.02559,.995495,-.0340956,.0479862,1.04083,.996206,-.030105,.041887,1.05497,.996971,-.0256095,.0355355,1.06824,.997796,-.0213932,.0293655,1.08056,.998272,-.0169612,.0232926,1.09182,.998857,-.0126756,.0172786,1.10219,.99939,-.00832486,.0113156,1.11192,.999752,-.00410826,.00557892,1.12075,1,150957e-9,-119101e-9,1.12885,.975169,-309397e-11,.154669,195073e-10,.975439,-779608e-10,.154712,491534e-9,.975464,-311847e-9,.154716,.00196617,.975464,-701656e-9,.154716,.00442387,.975462,-.0012474,.154715,.0078647,.975461,-.00194906,.154715,.0122886,.975464,-.00280667,.154715,.0176959,.975468,-.00382025,.154716,.0240867,.975471,-.00498985,.154716,.0314612,.975472,-.00631541,.154717,.0398199,.975486,-.00779719,.154718,.0491639,.975489,-.00943505,.154718,.0594932,.975509,-.0112295,.154721,.0708113,.97554,-.0131802,.154724,.0831176,.975557,-.0152876,.154726,.096415,.975585,-.0175512,.154728,.110705,.975605,-.0199713,.154729,.125992,.975645,-.0225447,.154729,.142272,.975711,-.0252649,.154735,.159549,.975788,-.0280986,.154736,.177805,.975872,-.0308232,.154704,.196911,.975968,-.0324841,.154525,.216324,.976063,-.0351281,.154432,.236628,.976157,-.0388618,.15446,.257539,.976204,-.0437704,.154665,.278975,.976358,-.047514,.154652,.302606,.976571,-.0508638,.154535,.327204,.976725,-.0534995,.154221,.352276,.977013,-.0555547,.153737,.377696,.977294,-.0586728,.153403,.403855,.977602,-.0622715,.15312,.430333,.977932,-.0658166,.152755,.456855,.978241,-.0689877,.152233,.483668,.978602,-.0712805,.15132,.512097,.979234,-.0732775,.150235,.540455,.97977,-.075163,.148978,.568486,.979995,-.0778026,.147755,.596524,.98078,-.0791854,.146019,.624825,.981628,-.0799666,.143906,.653403,.982067,-.0808532,.141561,.681445,.98271,-.0816024,.139025,.708918,.983734,-.0812511,.135764,.736594,.98431,-.0806201,.132152,.763576,.985071,-.0801605,.12846,.789797,.98618,-.0784208,.124084,.815804,.986886,-.0766643,.1193,.840869,.987485,-.0747744,.114236,.864952,.988431,-.0716701,.108654,.888431,.988886,-.0691609,.102994,.910963,.990024,-.0654048,.0967278,.932629,.990401,-.0619765,.090384,.95313,.991093,-.0579296,.0837885,.972587,.992018,-.0536576,.0770171,.991184,.992536,-.0493719,.0701486,1.00863,.993421,-.0444813,.062953,1.02494,.993928,-.040008,.0560455,1.04017,.994994,-.0347982,.04856,1.05463,.995866,-.0301017,.0416152,1.06807,.996916,-.0248225,.0342597,1.08039,.997766,-.0199229,.0271668,1.09177,.998479,-.0147422,.0201387,1.10235,.99921,-.00980173,.0131944,1.11206,.999652,-.0047426,.00640712,1.12104,.999998,891673e-10,-10379e-8,1.12906,.967868,-351885e-11,.175947,193569e-10,.968001,-886733e-10,.175972,487782e-9,.96801,-354697e-9,.175973,.00195115,.968012,-798063e-9,.175974,.00439006,.968011,-.00141879,.175973,.00780461,.968011,-.00221686,.175973,.0121948,.968016,-.00319231,.175974,.0175607,.968019,-.00434515,.175974,.0239027,.968018,-.00567538,.175974,.0312208,.968033,-.00718308,.175977,.0395158,.968049,-.00886836,.175979,.0487885,.968047,-.0107312,.175978,.0590394,.968072,-.0127719,.175981,.0702705,.968108,-.0149905,.175986,.0824836,.968112,-.0173866,.175985,.0956783,.968173,-.0199611,.175993,.109862,.96827,-.0227128,.176008,.125033,.968292,-.025639,.17601,.141193,.968339,-.0287299,.176007,.158336,.968389,-.0319399,.176001,.176441,.968501,-.034941,.175962,.195359,.968646,-.0370812,.175793,.214686,.968789,-.0402329,.175708,.234973,.96886,-.0442601,.1757,.255871,.969013,-.049398,.175876,.277238,.969242,-.0539932,.17594,.300326,.969419,-.0577299,.175781,.324702,.969763,-.0605643,.175432,.349527,.970093,-.0634488,.174992,.374976,.970361,-.0670589,.174611,.401097,.970825,-.0708246,.174226,.427496,.971214,-.0742871,.173684,.453858,.971622,-.0782608,.173186,.480637,.972175,-.0813151,.172288,.508655,.972944,-.0832678,.170979,.536973,.973595,-.0855964,.169573,.565138,.974345,-.0882163,.168152,.593222,.975233,-.0901671,.166314,.621201,.976239,-.0912111,.163931,.649919,.977289,-.0916959,.161106,.678011,.978076,-.0927061,.158272,.705717,.979533,-.0925562,.15475,.733228,.980335,-.0918159,.150638,.760454,.981808,-.0908508,.146201,.786918,.983061,-.0896172,.141386,.812953,.984148,-.0871588,.135837,.838281,.985047,-.0850624,.130135,.862594,.986219,-.0818541,.123882,.88633,.987043,-.0784523,.117126,.908952,.988107,-.0749601,.110341,.930744,.988955,-.0703548,.102885,.951728,.989426,-.0662798,.0954167,.971166,.990421,-.0610834,.0876331,.989984,.991032,-.0562936,.0797785,1.00765,.992041,-.0508154,.0718166,1.02434,.992794,-.0454045,.0637125,1.03976,.993691,-.0398194,.0555338,1.05418,.994778,-.0341482,.0473388,1.06772,.995915,-.028428,.0391016,1.08028,.997109,-.022642,.0309953,1.09185,.998095,-.0168738,.0230288,1.10247,.998985,-.0111274,.0150722,1.11229,.999581,-.00543881,.00740605,1.12131,1.00003,162239e-9,-105549e-9,1.12946,.959505,-393734e-11,.196876,191893e-10,.959599,-992157e-10,.196895,483544e-9,.959641,-396868e-9,.196903,.0019342,.959599,-892948e-9,.196895,.00435193,.959603,-.00158747,.196896,.0077368,.959604,-.00248042,.196896,.0120888,.959605,-.00357184,.196896,.0174082,.959605,-.00486169,.196896,.0236949,.959613,-.00635008,.196897,.0309497,.959619,-.00803696,.196898,.0391725,.959636,-.00992255,.196901,.0483649,.959634,-.0120067,.1969,.0585266,.959675,-.0142898,.196906,.0696609,.959712,-.0167717,.196911,.0817678,.959752,-.0194524,.196918,.0948494,.959807,-.0223321,.196925,.10891,.959828,-.0254091,.196924,.123947,.959906,-.0286815,.196934,.139968,.960005,-.0321371,.196944,.156968,.960071,-.0357114,.196936,.17491,.960237,-.0389064,.196882,.193597,.960367,-.041623,.196731,.21285,.960562,-.0452655,.196654,.233075,.960735,-.0496207,.196643,.253941,.960913,-.0549379,.196774,.275278,.961121,-.0603414,.196893,.297733,.96139,-.0644244,.196717,.321877,.961818,-.067556,.196314,.346476,.962175,-.0712709,.195917,.371907,.96255,-.0752848,.1955,.397916,.963164,-.0792073,.195026,.424229,.963782,-.0828225,.194424,.450637,.964306,-.0873119,.193831,.477288,.964923,-.0911051,.192973,.504716,.966048,-.093251,.19151,.533053,.967024,-.0958983,.190013,.561366,.968038,-.09835,.188253,.589464,.969152,-.100754,.186257,.617433,.970557,-.102239,.183775,.645801,.972104,-.102767,.180645,.674278,.973203,-.103492,.177242,.702004,.975123,-.103793,.17345,.729529,.97641,-.102839,.168886,.756712,.978313,-.101687,.163892,.783801,.980036,-.100314,.158439,.809671,.981339,-.097836,.152211,.835402,.982794,-.0950006,.145679,.860081,.984123,-.0920994,.138949,.883757,.984918,-.0878641,.131283,.90685,.985999,-.083939,.123464,.928786,.987151,-.0791234,.115324,.94983,.987827,-.0739332,.106854,.96962,.988806,-.0688088,.0982691,.98861,.989588,-.0628962,.0893456,1.00667,.990438,-.0573146,.0805392,1.02344,.991506,-.0509433,.0713725,1.03933,.992492,-.0448724,.0623732,1.05378,.993663,-.0383497,.0530838,1.06747,.994956,-.0319593,.0439512,1.08007,.99634,-.025401,.0347803,1.09182,.99761,-.0189687,.0257954,1.1025,.99863,-.0124441,.0169893,1.11247,.99947,-.00614003,.00829498,1.12151,1.00008,216624e-9,-146107e-9,1.12993,.950129,-434955e-11,.217413,190081e-10,.950264,-10957e-8,.217444,47884e-8,.9503,-438299e-9,.217451,.00191543,.950246,-986124e-9,.21744,.00430951,.950246,-.00175311,.21744,.00766137,.950245,-.00273923,.21744,.011971,.950253,-.00394453,.217441,.0172385,.950258,-.00536897,.217442,.0234641,.950267,-.00701262,.217444,.030648,.950277,-.00887551,.217446,.038791,.950284,-.0109576,.217446,.0478931,.950312,-.0132591,.217451,.0579568,.950334,-.01578,.217454,.0689821,.950378,-.0185204,.217462,.0809714,.950417,-.0214803,.217467,.0939265,.950488,-.0246594,.217479,.10785,.950534,-.0280565,.217483,.122743,.950633,-.0316685,.217498,.138611,.950698,-.0354787,.217499,.155442,.950844,-.0394003,.217507,.173208,.950999,-.0426812,.217419,.191605,.951221,-.0461302,.217317,.21084,.951412,-.0502131,.217238,.230945,.951623,-.0549183,.21722,.251745,.951867,-.0604493,.217306,.273001,.952069,-.0665189,.217466,.294874,.952459,-.0709179,.217266,.318732,.952996,-.0746112,.216891,.34318,.953425,-.0789252,.216503,.36849,.953885,-.0833293,.216042,.394373,.954617,-.087371,.215469,.420505,.955429,-.0914054,.214802,.446907,.956068,-.0961671,.214146,.473522,.957094,-.10048,.213286,.50052,.958372,-.103248,.211796,.528715,.959654,-.106033,.21016,.557065,.961305,-.108384,.208149,.585286,.962785,-.111122,.206024,.613334,.964848,-.112981,.203442,.641334,.966498,-.113717,.19996,.669955,.968678,-.114121,.196105,.698094,.970489,-.114524,.191906,.725643,.972903,-.113792,.186963,.752856,.974701,-.112406,.181343,.780013,.976718,-.110685,.175185,.806268,.978905,-.108468,.168535,.832073,.980267,-.105061,.161106,.857149,.981967,-.101675,.153387,.881145,.983063,-.0974492,.145199,.904255,.984432,-.0925815,.136527,.926686,.985734,-.0877983,.127584,.947901,.986228,-.081884,.118125,.968111,.98719,-.0761208,.108594,.98719,.988228,-.0698196,.0989996,1.00559,.989046,-.0632739,.0890074,1.02246,.990242,-.056522,.0790832,1.03841,.991252,-.0495272,.0689182,1.05347,.992542,-.0425373,.0588592,1.06724,.994096,-.0353198,.0486833,1.08009,.995593,-.028235,.0385977,1.09177,.99711,-.0209511,.0286457,1.10274,.998263,-.0139289,.0188497,1.11262,.999254,-.0067359,.009208,1.12191,.999967,141846e-9,-657764e-10,1.13024,.935608,-474692e-11,.236466,187817e-10,.93996,-11971e-8,.237568,473646e-9,.939959,-478845e-9,.237567,.0018946,.939954,-.0010774,.237566,.00426284,.939956,-.00191538,.237566,.00757842,.939954,-.00299277,.237566,.0118413,.93996,-.00430961,.237567,.0170518,.939969,-.00586589,.237569,.02321,.939982,-.00766166,.237572,.0303164,.939987,-.00969686,.237572,.0383711,.939997,-.0119715,.237574,.0473751,.940031,-.0144858,.237581,.0573298,.940073,-.0172399,.237589,.0682366,.94012,-.0202335,.237598,.080097,.940162,-.0234663,.237604,.0929116,.940237,-.0269387,.237615,.106686,.940328,-.0306489,.237632,.121421,.940419,-.0345917,.237645,.137115,.940522,-.0387481,.237654,.153766,.940702,-.0429906,.237661,.17133,.940871,-.0465089,.237561,.189502,.941103,-.050531,.23748,.208616,.941369,-.0550657,.237423,.228595,.941641,-.0601337,.237399,.249287,.941903,-.0658804,.237443,.270467,.942224,-.0722674,.237597,.292024,.942633,-.0771788,.237419,.315272,.943172,-.0815623,.237068,.339579,.943691,-.0863973,.236682,.364717,.944382,-.0911536,.236213,.390435,.945392,-.0952967,.235562,.416425,.946185,-.0998948,.234832,.442772,.947212,-.104796,.234114,.469347,.948778,-.10928,.233222,.496162,.950149,-.113081,.231845,.523978,.951989,-.115893,.230005,.552295,.953921,-.11846,.227862,.580569,.955624,-.12115,.225439,.608698,.958234,-.123373,.222635,.636696,.960593,-.124519,.219093,.665208,.963201,-.124736,.214749,.693557,.965642,-.125012,.210059,.721334,.968765,-.124661,.204935,.748613,.971753,-.122996,.198661,.776224,.973751,-.120998,.191823,.802461,.976709,-.118583,.184359,.828399,.977956,-.115102,.176437,.853693,.979672,-.111077,.167681,.877962,.981816,-.10688,.158872,.901564,.98238,-.101469,.149398,.924057,.983964,-.0960013,.139436,.945751,.984933,-.0899626,.12943,.966272,.985694,-.0832973,.11894,.985741,.986822,-.0767082,.108349,1.00407,.987725,-.0693614,.0976026,1.02154,.98877,-.06211,.086652,1.03757,.990129,-.0544143,.0756182,1.05296,.991337,-.046744,.0645753,1.06683,.992978,-.0387931,.0534683,1.0798,.994676,-.030973,.0424137,1.09181,.99645,-.0230311,.0314035,1.10286,.997967,-.0152065,.0206869,1.11291,.99922,-.00744837,.010155,1.12237,1.00002,240209e-9,-752767e-10,1.13089,.922948,-515351e-11,.255626,186069e-10,.928785,-129623e-9,.257244,468009e-9,.928761,-51849e-8,.257237,.00187202,.928751,-.0011666,.257235,.00421204,.928751,-.00207395,.257234,.0074881,.928754,-.00324055,.257235,.0117002,.92876,-.00466639,.257236,.0168486,.928763,-.00635149,.257237,.0229334,.928774,-.00829584,.257239,.029955,.928791,-.0104995,.257243,.0379139,.928804,-.0129623,.257245,.0468108,.928847,-.0156846,.257255,.0566473,.92889,-.0186661,.257263,.0674246,.928924,-.0219067,.257268,.0791433,.928989,-.0254066,.257282,.0918076,.92909,-.0291651,.257301,.105419,.92918,-.0331801,.257316,.119978,.92929,-.0374469,.257332,.135491,.929453,-.041939,.257357,.151948,.929586,-.0464612,.257347,.169275,.929858,-.0503426,.257269,.187257,.930125,-.0548409,.257199,.206204,.930403,-.0598063,.257149,.22601,.930726,-.0652437,.257122,.246561,.931098,-.0712376,.257153,.267618,.931396,-.0777506,.257237,.288993,.931947,-.0832374,.257124,.311527,.932579,-.0883955,.25683,.335697,.933194,-.0937037,.256444,.360634,.934013,-.0987292,.255939,.386126,.935307,-.103215,.255282,.412018,.936374,-.108234,.254538,.438292,.93776,-.113234,.253728,.464805,.939599,-.118013,.25275,.491464,.941036,-.122661,.251404,.518751,.94337,-.125477,.249435,.547133,.945318,-.128374,.247113,.575456,.947995,-.130996,.244441,.60372,.950818,-.133438,.241352,.63174,.954378,-.135004,.237849,.659971,.957151,-.135313,.233188,.688478,.960743,-.13521,.228001,.716767,.964352,-.135007,.222249,.744349,.967273,-.133523,.21542,.771786,.969767,-.131155,.208039,.798639,.973195,-.128492,.200076,.824774,.975557,-.125094,.191451,.850222,.977692,-.120578,.18184,.874761,.98026,-.115882,.172102,.898497,.981394,-.110372,.161859,.921636,.982386,-.10415,.15108,.943467,.983783,-.0978128,.140407,.964045,.98422,-.0906171,.129058,.98398,.985447,-.0832921,.117614,1.00276,.986682,-.0754412,.10585,1.02047,.987326,-.0673885,.0940943,1.03678,.988707,-.0592565,.0822093,1.05218,.990185,-.050717,.070192,1.06652,.991866,-.0423486,.0582081,1.07965,.993897,-.0336118,.0460985,1.09188,.995841,-.0252178,.0342737,1.10307,.997605,-.0164893,.0224829,1.11324,.999037,-.00817112,.0110647,1.12262,1.00003,291686e-9,-168673e-9,1.13139,.915304,-552675e-11,.275999,183285e-10,.91668,-139285e-9,.276414,461914e-9,.916664,-55713e-8,.276409,.00184763,.916653,-.00125354,.276406,.00415715,.916651,-.00222851,.276405,.00739053,.916655,-.00348205,.276406,.0115478,.916653,-.00501414,.276405,.0166291,.916667,-.00682478,.276409,.0226346,.91668,-.00891398,.276412,.0295648,.91669,-.0112817,.276413,.0374199,.916727,-.013928,.276422,.0462016,.916759,-.0168528,.276429,.0559101,.916793,-.0200558,.276436,.0665466,.916849,-.0235373,.276448,.0781139,.916964,-.0272973,.276474,.0906156,.917047,-.0313344,.276491,.104051,.917152,-.0356465,.276511,.118424,.917286,-.0402271,.276533,.133736,.917469,-.0450408,.276564,.149978,.917686,-.0497872,.276563,.167057,.917953,-.0540937,.276493,.184846,.918228,-.0590709,.276437,.203614,.918572,-.0644277,.276398,.223212,.918918,-.0702326,.276362,.243584,.919356,-.076484,.276383,.264465,.919842,-.0830808,.276434,.285701,.920451,-.0892972,.276407,.307559,.921113,-.095016,.276128,.331501,.921881,-.100771,.275754,.356207,.923027,-.106029,.275254,.381477,.924364,-.111029,.274595,.40722,.925818,-.116345,.273841,.433385,.92746,-.121424,.272913,.459848,.929167,-.12657,.271837,.486493,.931426,-.131581,.270575,.513432,.934001,-.135038,.268512,.541502,.936296,-.138039,.266135,.569658,.939985,-.140687,.263271,.598375,.943516,-.143247,.260058,.626563,.94782,-.145135,.256138,.654711,.951023,-.145733,.251154,.683285,.955338,-.145554,.245562,.711831,.959629,-.145008,.239265,.739573,.963123,-.144003,.232064,.767027,.966742,-.141289,.224036,.794359,.969991,-.138247,.215305,.820361,.973403,-.134786,.206051,.846548,.975317,-.129966,.195914,.871541,.977647,-.12471,.185184,.895313,.980137,-.119086,.174161,.918398,.981031,-.112297,.162792,.940679,.982037,-.105372,.150952,.961991,.983164,-.097821,.138921,.981913,.983757,-.0897245,.126611,1.00109,.985036,-.0815974,.114228,1.01902,.986289,-.0727725,.101389,1.03604,.987329,-.0639323,.0886476,1.05149,.989193,-.0548109,.0756837,1.06619,.990716,-.045687,.0627581,1.07948,.992769,-.0364315,.0498337,1.09172,.99524,-.0271761,.0370305,1.1033,.997154,-.0179609,.0243959,1.11353,.998845,-.00878063,.0119567,1.12319,1.00002,259038e-9,-108146e-9,1.13177,.903945,-591681e-11,.295126,181226e-10,.903668,-148672e-9,.295037,455367e-9,.903677,-594683e-9,.29504,.00182145,.903673,-.00133805,.295039,.00409831,.903666,-.00237872,.295036,.00728584,.903668,-.00371676,.295037,.0113842,.903679,-.00535212,.29504,.0163936,.903684,-.00728479,.295041,.0223141,.903698,-.00951473,.295044,.0291462,.903718,-.0120419,.295049,.0368904,.903754,-.0148664,.295058,.0455477,.903801,-.017988,.29507,.0551194,.903851,-.0214064,.295082,.0656058,.903921,-.0251219,.295097,.0770109,.904002,-.0291337,.295116,.0893354,.904111,-.033441,.29514,.102583,.904246,-.0380415,.295169,.116755,.904408,-.0429258,.295202,.131853,.904637,-.0480468,.295245,.147869,.904821,-.0529208,.295214,.164658,.905163,-.0577748,.295185,.182274,.905469,-.0631763,.295143,.200828,.905851,-.068917,.295112,.2202,.906322,-.0750861,.295104,.240372,.906761,-.0815855,.295086,.261082,.90735,-.0882138,.295095,.282123,.908087,-.095082,.295139,.303563,.908826,-.101488,.29492,.327028,.909832,-.107577,.294577,.351464,.911393,-.113033,.294115,.376497,.912804,-.118629,.293446,.402115,.914081,-.124232,.292581,.428111,.91637,-.129399,.29166,.454442,.91814,-.134892,.290422,.481024,.921179,-.140069,.289194,.507924,.924544,-.144431,.287421,.535557,.927995,-.147498,.284867,.563984,.931556,-.150197,.281722,.5923,.935777,-.152711,.278207,.620832,.940869,-.154836,.274148,.649069,.945994,-.155912,.269057,.677746,.949634,-.155641,.262799,.706293,.955032,-.154809,.256097,.734278,.95917,-.153678,.248618,.761751,.962931,-.151253,.239794,.789032,.966045,-.147625,.230281,.815422,.96971,-.143964,.220382,.841787,.972747,-.139464,.209846,.867446,.975545,-.133459,.198189,.892004,.978381,-.127424,.186362,.915458,.979935,-.120506,.173964,.937948,.980948,-.11282,.161429,.959732,.982234,-.104941,.148557,.980118,.982767,-.0962905,.135508,.999463,.983544,-.0873625,.122338,1.01756,.984965,-.0783447,.108669,1.03492,.986233,-.0684798,.0949911,1.05087,.987796,-.0590867,.0811386,1.0656,.989885,-.0489145,.0673099,1.0794,.991821,-.0391,.0535665,1.09174,.99448,-.029087,.0397529,1.10341,.996769,-.019114,.0261463,1.11383,.998641,-.00947007,.0128731,1.1237,.999978,446316e-9,-169093e-9,1.13253,.888362,-627064e-11,.312578,178215e-10,.889988,-157791e-9,.313148,448451e-9,.889825,-631076e-9,.313092,.00179356,.88984,-.00141994,.313097,.00403554,.889828,-.0025243,.313092,.00717429,.889831,-.00394421,.313093,.0112099,.889831,-.00567962,.313093,.0161425,.889844,-.00773051,.313096,.0219724,.889858,-.0100968,.3131,.0286999,.889882,-.0127786,.313106,.0363256,.889918,-.0157757,.313116,.0448509,.889967,-.0190878,.313129,.0542758,.89003,-.022715,.313145,.0646032,.890108,-.0266566,.313165,.0758339,.890218,-.0309131,.313193,.0879729,.890351,-.0354819,.313226,.101019,.89051,-.0403613,.313263,.114979,.890672,-.0455385,.313294,.129848,.890882,-.0509444,.313333,.145616,.891189,-.0559657,.313324,.162122,.891457,-.0613123,.313281,.179524,.891856,-.0671488,.313281,.197855,.892312,-.0732732,.313268,.216991,.892819,-.0797865,.313263,.236924,.893369,-.0865269,.313247,.257433,.894045,-.0931592,.313205,.278215,.894884,-.100532,.313276,.299467,.895832,-.107716,.313205,.322276,.897043,-.114099,.312873,.34642,.898515,-.119941,.312331,.371187,.900191,-.126044,.311731,.396656,.90188,-.131808,.310859,.422488,.904359,-.137289,.309857,.448744,.906923,-.142991,.308714,.475239,.910634,-.148253,.307465,.501983,.914502,-.153332,.305774,.529254,.919046,-.156646,.303156,.557709,.923194,-.159612,.299928,.586267,.928858,-.162027,.296245,.614925,.934464,-.164203,.291832,.643187,.939824,-.165602,.286565,.671601,.944582,-.165383,.280073,.700213,.949257,-.164439,.272891,.728432,.954389,-.162953,.264771,.756082,.958595,-.161007,.255927,.78369,.962138,-.157243,.245769,.810769,.966979,-.152872,.235127,.836999,.969566,-.148209,.22347,.862684,.972372,-.142211,.211147,.887847,.975916,-.135458,.198606,.911843,.978026,-.128398,.185498,.934795,.979686,-.120313,.17171,.956787,.980748,-.11166,.158159,.978046,.981622,-.103035,.144399,.997693,.982356,-.0930328,.13001,1.01642,.983308,-.0834627,.115778,1.03366,.985037,-.0732249,.101327,1.05014,.986493,-.0628145,.086554,1.06507,.988484,-.0526556,.0720413,1.07907,.991051,-.0415744,.0571151,1.09189,.993523,-.0314275,.0426643,1.10369,.99628,-.0203603,.0279325,1.11423,.998344,-.0102446,.0138182,1.12421,.999997,42612e-8,-193628e-9,1.1333,.871555,-660007e-11,.329176,174749e-10,.875255,-166579e-9,.330571,441051e-9,.875644,-666394e-9,.330718,.00176441,.875159,-.00149903,.330536,.00396899,.87516,-.00266493,.330536,.007056,.875158,-.00416393,.330535,.0110251,.87516,-.00599598,.330535,.0158764,.875163,-.00816108,.330536,.0216101,.875174,-.0106591,.330538,.0282266,.875199,-.0134899,.330545,.0357266,.875257,-.0166538,.330563,.0441117,.875304,-.0201501,.330575,.0533821,.875373,-.0239785,.330595,.0635395,.875464,-.0281389,.330619,.0745872,.875565,-.0326301,.330645,.0865255,.875691,-.0374516,.330676,.0993599,.875897,-.0425993,.330733,.113093,.876091,-.0480576,.330776,.127722,.876353,-.0537216,.330826,.143227,.876649,-.0589807,.330809,.159462,.877034,-.0647865,.330819,.176642,.877443,-.0709789,.330817,.194702,.877956,-.0774782,.330832,.213577,.878499,-.0843175,.330822,.233246,.879144,-.0912714,.330804,.253512,.879982,-.0980824,.330766,.274137,.88097,-.105823,.330864,.295209,.882051,-.113671,.330896,.317226,.883397,-.120303,.330545,.341068,.884987,-.12667,.330068,.365613,.886789,-.133118,.329418,.390807,.889311,-.139024,.328683,.416494,.891995,-.144971,.327729,.442618,.895106,-.150747,.326521,.469131,.899527,-.156283,.325229,.495921,.90504,-.161707,.32378,.523162,.909875,-.165661,.32122,.55092,.91561,-.168755,.317942,.579928,.921225,-.171193,.313983,.608539,.927308,-.17319,.309636,.636854,.933077,-.174819,.304262,.66523,.938766,-.175002,.297563,.693609,.943667,-.173946,.289613,.722157,.949033,-.172221,.281227,.750021,.953765,-.169869,.271545,.777466,.95804,-.166578,.261034,.804853,.962302,-.161761,.249434,.831569,.966544,-.156636,.237484,.857779,.969372,-.150784,.224395,.883051,.972486,-.143672,.210786,.907864,.975853,-.135772,.196556,.931223,.977975,-.127942,.182307,.954061,.979122,-.118347,.167607,.97531,.980719,-.109112,.152739,.995666,.981223,-.0991789,.137932,1.01475,.98216,-.0883553,.122692,1.03253,.983379,-.0780825,.107493,1.04917,.985434,-.0665646,.0917791,1.06464,.987332,-.0557714,.0764949,1.07896,.990004,-.0442805,.060721,1.09199,.992975,-.0331676,.0452284,1.10393,.995811,-.0219547,.0297934,1.11476,.9982,-.0107613,.0146415,1.12484,1.00002,248678e-9,-14555e-8,1.13413,.859519,-693595e-11,.347264,171673e-10,.859843,-17503e-8,.347394,433219e-9,.859656,-700076e-9,.347319,.00173277,.859671,-.00157517,.347325,.00389875,.859669,-.00280028,.347324,.00693112,.85967,-.0043754,.347324,.01083,.859665,-.00630049,.347321,.0155954,.859685,-.0085755,.347328,.0212278,.859694,-.0112003,.347329,.0277273,.859718,-.0141747,.347336,.0350946,.85976,-.0174988,.347348,.0433314,.85982,-.0211722,.347366,.0524384,.859892,-.0251941,.347387,.0624168,.860006,-.0295649,.347422,.0732708,.860122,-.0342825,.347453,.0849999,.860282,-.0393462,.347499,.0976102,.860482,-.0447513,.347554,.111104,.860719,-.0504775,.347614,.125479,.860998,-.0563577,.347666,.140703,.861322,-.0619473,.347662,.156681,.861724,-.0681277,.347684,.173597,.862198,-.0746567,.347709,.191371,.862733,-.0815234,.347727,.209976,.863371,-.0886643,.347744,.229351,.86414,-.0957908,.347734,.24934,.865138,-.102912,.34772,.269797,.866182,-.110924,.3478,.290654,.867436,-.119223,.347911,.312074,.869087,-.126197,.347649,.335438,.870859,-.133145,.347222,.359732,.872997,-.139869,.346645,.38467,.875939,-.146089,.345935,.41019,.879012,-.152334,.345012,.436218,.883353,-.15821,.343924,.462641,.888362,-.164097,.342636,.489449,.895026,-.169528,.341351,.516629,.900753,-.174408,.339115,.544109,.906814,-.17751,.335809,.572857,.912855,-.180101,.331597,.601554,.919438,-.182116,.32698,.630198,.925962,-.183494,.321449,.658404,.931734,-.184159,.314595,.686625,.93762,-.18304,.306462,.71531,.943858,-.181323,.297514,.744272,.948662,-.178683,.287447,.771462,.953299,-.175379,.276166,.798593,.957346,-.170395,.263758,.8256,.962565,-.165042,.251019,.852575,.966075,-.158655,.237011,.878316,.969048,-.151707,.222518,.90329,.972423,-.143271,.207848,.927745,.975833,-.134824,.192463,.950859,.977629,-.125444,.1768,.972947,.978995,-.114949,.161033,.993263,.980533,-.104936,.145523,1.01337,.980745,-.0935577,.129799,1.03128,.981814,-.0822956,.113486,1.04825,.983943,-.0710082,.0972925,1.06405,.986141,-.0587931,.0808138,1.0785,.988878,-.0472755,.0644915,1.09204,.992132,-.0349128,.0478128,1.10413,.9953,-.0232407,.031621,1.11527,.998117,-.0112713,.0154935,1.12551,1.00003,339743e-9,-195763e-9,1.13504,.845441,-729126e-11,.364305,169208e-10,.843588,-183164e-9,.363506,425067e-9,.843412,-73253e-8,.36343,.00169999,.843401,-.00164818,.363426,.00382495,.843399,-.00293008,.363425,.00679993,.843401,-.00457822,.363425,.010625,.843394,-.00659249,.363421,.0153002,.843398,-.00897282,.363421,.0208258,.843415,-.0117191,.363426,.0272024,.843438,-.0148312,.363432,.0344305,.843483,-.018309,.363447,.0425116,.84356,-.0221521,.363472,.0514471,.843646,-.0263597,.363499,.061238,.843743,-.0309315,.363527,.0718873,.84388,-.0358658,.363569,.0833969,.844079,-.0411624,.363631,.0957742,.844279,-.0468128,.363688,.109015,.844549,-.0527923,.363761,.123124,.844858,-.0588204,.363817,.138044,.84522,-.0647573,.36383,.153755,.845669,-.0713181,.363879,.170394,.846155,-.0781697,.363908,.187861,.846789,-.0853913,.363969,.206176,.847502,-.0928086,.363999,.225244,.8484,-.10005,.363997,.244926,.849461,-.107615,.364008,.265188,.850562,-.115814,.364055,.28587,.851962,-.124334,.364179,.306926,.854326,-.131995,.364233,.329605,.856295,-.139338,.363856,.35359,.858857,-.146346,.363347,.37831,.862428,-.152994,.362807,.403722,.866203,-.159463,.361963,.429537,.871629,-.165623,.36112,.456,.877365,-.171649,.359917,.482773,.883744,-.177151,.35848,.509705,.890693,-.182381,.356523,.537215,.897278,-.186076,.3533,.565493,.903958,-.188602,.349095,.594293,.910908,-.190755,.344215,.623165,.918117,-.192063,.338606,.651573,.924644,-.192758,.331544,.679869,.931054,-.192238,.323163,.708668,.937303,-.190035,.313529,.737201,.943387,-.187162,.303152,.764977,.948494,-.183876,.29146,.792683,.952546,-.178901,.277917,.819228,.958077,-.173173,.264753,.846559,.962462,-.16645,.25002,.872962,.966569,-.159452,.234873,.898729,.969108,-.15074,.218752,.923126,.973072,-.141523,.202673,.947278,.975452,-.132075,.186326,.969938,.977784,-.121257,.169396,.991325,.97899,-.110182,.153044,1.01123,.979777,-.0989634,.136485,1.0299,.980865,-.0865894,.119343,1.04727,.982432,-.0746115,.102452,1.06341,.984935,-.0621822,.0852423,1.07834,.987776,-.0495694,.0678546,1.092,.99103,-.0372386,.0506917,1.1043,.99474,-.0244353,.0333316,1.11576,.997768,-.0121448,.0164348,1.12617,1.00003,31774e-8,-169504e-9,1.13598,.825551,-756799e-11,.378425,165099e-10,.82664,-190922e-9,.378923,416504e-9,.826323,-763495e-9,.378779,.0016656,.826359,-.00171789,.378795,.00374768,.82636,-.00305402,.378795,.00666259,.826368,-.00477185,.378798,.0104104,.826364,-.00687131,.378795,.0149912,.826368,-.00935232,.378795,.0204054,.826376,-.0122146,.378797,.0266532,.826399,-.0154581,.378803,.0337355,.82646,-.0190825,.378824,.0416537,.826525,-.0230873,.378846,.0504091,.826614,-.0274719,.378876,.0600032,.82674,-.0322355,.378917,.0704393,.826888,-.0373766,.378964,.0817195,.827078,-.0428936,.379024,.0938492,.827318,-.0487778,.379099,.106828,.82764,-.0549935,.379199,.120659,.827926,-.0611058,.379227,.13526,.828325,-.0675054,.379275,.150713,.828801,-.0743455,.379332,.167034,.8294,-.0815523,.379415,.184209,.830094,-.0890779,.379495,.202203,.8309,-.096736,.379555,.220945,.831943,-.104135,.379577,.240306,.833037,-.112106,.379604,.260317,.834278,-.120554,.379668,.2808,.836192,-.129128,.3799,.301654,.838671,-.137541,.380109,.323502,.840939,-.14523,.379809,.347176,.844575,-.15248,.379593,.371706,.848379,-.159607,.37909,.39688,.853616,-.166267,.378617,.422702,.858921,-.172698,.377746,.448919,.865324,-.178823,.376749,.475661,.872207,-.184542,.375363,.502599,.880018,-.189836,.373657,.529914,.88694,-.194294,.370673,.557683,.894779,-.197022,.36662,.586848,.902242,-.199108,.36138,.615831,.909914,-.200398,.355434,.644478,.917088,-.20094,.348173,.672905,.923888,-.200671,.339482,.701327,.930495,-.198773,.32956,.730101,.937247,-.195394,.318363,.758383,.943108,-.191956,.306323,.786539,.948296,-.187227,.292576,.813637,.953472,-.181165,.278234,.840793,.958485,-.174119,.263054,.867712,.962714,-.166564,.246756,.893635,.966185,-.158181,.229945,.919028,.970146,-.148275,.212633,.943413,.973491,-.138157,.195229,.966627,.975741,-.127574,.178048,.988817,.977238,-.11554,.160312,1.00924,.978411,-.10364,.142857,1.02845,.979811,-.0913122,.125317,1.04648,.98116,-.0782558,.107627,1.06284,.983543,-.0655957,.0895862,1.07798,.986789,-.0520411,.0713756,1.092,.990292,-.0389727,.053228,1.10484,.994187,-.025808,.0351945,1.11642,.997499,-.0126071,.0173198,1.12703,.999999,275604e-9,-148602e-9,1.13674,.81075,-78735e-10,.394456,161829e-10,.808692,-198293e-9,.393453,407564e-9,.80846,-792877e-9,.39334,.00162965,.808595,-.00178416,.393407,.00366711,.808597,-.00317182,.393408,.00651934,.808598,-.00495589,.393408,.0101866,.808591,-.00713627,.393403,.0146689,.808592,-.00971285,.393402,.0199667,.80861,-.0126855,.393407,.0260803,.808633,-.0160538,.393413,.0330107,.80868,-.0198175,.393429,.0407589,.808748,-.0239758,.393453,.0493264,.808854,-.0285286,.39349,.0587161,.808992,-.0334748,.39354,.0689304,.809141,-.0388116,.393588,.0799707,.809352,-.0445375,.39366,.0918432,.809608,-.0506427,.393742,.104549,.809915,-.0570708,.393834,.118085,.810253,-.0633526,.393885,.132377,.810687,-.0700966,.393953,.147537,.811233,-.0772274,.394047,.163543,.811865,-.0847629,.394148,.180394,.812648,-.0925663,.394265,.198051,.813583,-.100416,.394363,.216443,.814683,-.108119,.394402,.235502,.815948,-.11644,.394489,.255242,.817278,-.125036,.394542,.275441,.819605,-.133655,.39486,.296094,.822256,-.142682,.395248,.317309,.825349,-.150756,.395241,.340516,.829605,-.158392,.395285,.364819,.83391,-.165801,.394922,.389736,.839808,-.172677,.394691,.415409,.845708,-.179448,.394006,.441546,.853025,-.185746,.393279,.46832,.859666,-.191684,.391655,.495302,.86789,-.197146,.390068,.52262,.875845,-.201904,.38727,.550336,.882634,-.205023,.382688,.578825,.891076,-.207098,.377543,.608103,.900589,-.208474,.371752,.63723,.90791,-.209068,.364016,.665769,.915971,-.208655,.355593,.694428,.923455,-.20729,.345439,.723224,.931514,-.203821,.334099,.751925,.937885,-.19986,.321069,.780249,.943136,-.194993,.306571,.8077,.948818,-.189132,.291556,.83497,.954433,-.181617,.275745,.86188,.959078,-.173595,.258695,.888562,.962705,-.164855,.240825,.914008,.966753,-.155129,.22268,.939145,.970704,-.144241,.204542,.963393,.973367,-.133188,.185927,.985983,.975984,-.121146,.167743,1.00704,.976994,-.108366,.149218,1.02715,.978485,-.0956746,.13131,1.0455,.980074,-.0820733,.112513,1.06221,.98225,-.0684061,.0938323,1.07782,.98553,-.0549503,.0749508,1.09199,.989529,-.0407857,.055848,1.10508,.993536,-.0271978,.0368581,1.11684,.997247,-.0132716,.0181845,1.12789,1,431817e-9,-198809e-9,1.13792,.785886,-812608e-11,.405036,157669e-10,.790388,-205278e-9,.407355,398297e-9,.790145,-820824e-9,.407231,.00159263,.790135,-.00184681,.407226,.00358336,.790119,-.00328316,.407218,.00637039,.790126,-.00512988,.40722,.0099539,.79013,-.00738684,.407221,.0143339,.790135,-.0100538,.407221,.0195107,.790134,-.0131306,.407217,.0254848,.79016,-.0166169,.407224,.0322572,.790197,-.020512,.407236,.0398284,.790273,-.0248157,.407263,.0482014,.790381,-.029527,.407304,.0573777,.790521,-.0346446,.407355,.0673602,.790704,-.0401665,.40742,.0781522,.790925,-.0460896,.407499,.0897582,.791195,-.0524017,.407589,.10218,.791522,-.0590121,.407691,.11541,.791878,-.0654876,.407748,.12939,.792361,-.0725207,.407849,.144237,.792942,-.0799844,.407963,.159924,.79362,-.0877896,.408087,.176425,.794529,-.0958451,.408259,.193733,.795521,-.103827,.408362,.211756,.796778,-.111937,.408482,.230524,.798027,-.120521,.408547,.249967,.799813,-.129242,.408721,.269926,.802387,-.138048,.409148,.290338,.805279,-.147301,.409641,.311193,.809251,-.155895,.410154,.333611,.813733,-.163942,.410297,.357615,.819081,-.171666,.410373,.382339,.825427,-.178905,.410348,.407828,.83172,-.185812,.409486,.434034,.83877,-.192318,.408776,.460493,.845817,-.198249,.407176,.487346,.854664,-.204034,.405719,.514832,.863495,-.208908,.403282,.542401,.871883,-.212765,.399293,.570683,.88065,-.214911,.393803,.599947,.89004,-.216214,.387536,.62932,.898476,-.216745,.379846,.658319,.906738,-.216387,.370625,.687138,.914844,-.215053,.360139,.71601,.923877,-.212007,.348849,.745124,.931925,-.207481,.335639,.773366,.938054,-.202418,.320798,.801636,.943895,-.196507,.304772,.829055,.949468,-.189009,.288033,.856097,.955152,-.180539,.270532,.88301,.959403,-.171437,.251639,.909296,.963309,-.161661,.232563,.934868,.967399,-.150425,.213231,.959662,.972009,-.138659,.194247,.98302,.97433,-.126595,.174718,1.00517,.975823,-.113205,.155518,1.02566,.976371,-.0996096,.136709,1.04418,.978705,-.0860754,.117571,1.06146,.981477,-.0714438,.0980046,1.07777,.984263,-.0572304,.0782181,1.09214,.988423,-.0428875,.0584052,1.10553,.993,-.0282442,.038522,1.11758,.99704,-.0140183,.0190148,1.12864,.999913,369494e-9,-145203e-9,1.13901,.777662,-84153e-10,.423844,154403e-10,.770458,-211714e-9,.419915,38845e-8,.770716,-846888e-9,.420055,.00155386,.770982,-.00190567,.420202,.00349653,.770981,-.00338782,.420201,.00621606,.77098,-.00529338,.4202,.00971274,.770983,-.00762223,.4202,.0139867,.770985,-.0103741,.420198,.0190381,.770996,-.0135489,.4202,.0248677,.771029,-.0171461,.420212,.0314764,.771052,-.0211647,.420215,.0388648,.771131,-.0256048,.420245,.047036,.771235,-.0304647,.420284,.0559911,.771383,-.0357436,.420341,.0657346,.771591,-.0414392,.420423,.0762694,.771819,-.0475462,.420506,.0875984,.772123,-.0540506,.420617,.099727,.772464,-.060797,.42072,.112637,.772855,-.0675393,.420799,.126313,.773317,-.0748323,.420893,.140824,.773981,-.0825681,.421058,.15617,.774746,-.0906307,.421226,.172322,.77566,-.0988982,.421397,.189253,.776837,-.106994,.421569,.206912,.778097,-.115528,.421704,.225359,.779588,-.124317,.421849,.24447,.781574,-.133139,.422097,.264156,.784451,-.142179,.422615,.284318,.787682,-.15165,.423269,.304902,.792433,-.160771,.424396,.3265,.797359,-.169166,.424772,.35014,.803986,-.177149,.425475,.374768,.809504,-.184745,.424996,.399928,.815885,-.19173,.424247,.425796,.823513,-.198525,.423515,.452287,.832549,-.204709,.422787,.479321,.841653,-.210447,.421187,.506718,.850401,-.215501,.418519,.53432,.859854,-.219752,.414715,.56242,.869364,-.222305,.409462,.591558,.878837,-.223744,.402926,.621074,.888636,-.224065,.395043,.650538,.898132,-.223742,.38564,.679538,.907181,-.222308,.375378,.708674,.915621,-.219837,.363212,.737714,.9239,-.215233,.349313,.767014,.931644,-.209592,.334162,.795133,.938887,-.203644,.317943,.823228,.945282,-.196349,.300581,.850822,.950758,-.18742,.282195,.877594,.956146,-.177879,.262481,.904564,.960355,-.167643,.242487,.930741,.965256,-.156671,.222668,.955868,.968029,-.144123,.201907,.979869,.97251,-.131305,.18202,1.00291,.974925,-.118335,.161909,1.02392,.975402,-.103714,.142129,1.0433,.976987,-.089415,.122447,1.06089,.979677,-.0748858,.102248,1.07713,.983184,-.0596086,.0814851,1.09218,.987466,-.0447671,.0609484,1.10585,.992348,-.0295217,.0401835,1.11829,.996674,-.0143917,.0198163,1.12966,1.00003,321364e-9,-149983e-9,1.1402,.757901,-869074e-11,.436176,151011e-10,.751195,-217848e-9,.432317,378533e-9,.751178,-871373e-9,.432307,.0015141,.751195,-.00196061,.432317,.0034068,.751198,-.00348552,.432318,.00605659,.751195,-.00544599,.432315,.00946353,.751207,-.00784203,.43232,.013628,.751213,-.0106732,.43232,.0185499,.751221,-.0139393,.432319,.0242302,.751244,-.0176398,.432325,.0306694,.7513,-.0217743,.432348,.0378698,.751358,-.0263412,.432367,.0458321,.751458,-.0313396,.432404,.0545587,.751608,-.0367682,.432464,.0640543,.7518,-.0426246,.43254,.0743222,.752065,-.0489031,.432645,.0853668,.752376,-.0555828,.432762,.0971911,.752715,-.0623861,.432859,.109768,.753137,-.069415,.432958,.123126,.753676,-.0770039,.433099,.137308,.754345,-.084971,.433272,.15229,.755235,-.0932681,.433504,.168075,.756186,-.10171,.433693,.184625,.757363,-.110019,.433857,.201897,.75884,-.11887,.434102,.220014,.760467,-.127881,.434306,.238778,.762969,-.136766,.434751,.258172,.765823,-.14612,.43529,.278062,.769676,-.15566,.436236,.298437,.774909,-.165177,.437754,.319532,.77994,-.17402,.438343,.342505,.785757,-.182201,.438609,.366693,.792487,-.190104,.438762,.391668,.80038,-.197438,.438795,.417494,.808494,-.204365,.438226,.443933,.817695,-.210714,.437283,.470929,.828111,-.216651,.436087,.498569,.837901,-.221804,.433717,.526165,.847813,-.226318,.430133,.554155,.858314,-.229297,.425213,.582822,.868891,-.230999,.418576,.612847,.878941,-.231155,.410405,.642445,.888809,-.230935,.400544,.672024,.898089,-.229343,.389613,.701366,.908081,-.226886,.377197,.730763,.916819,-.222676,.363397,.759642,.924968,-.216835,.347437,.788775,.932906,-.210245,.32995,.817135,.940025,-.202992,.312262,.844912,.946101,-.19436,.293313,.872164,.952835,-.184125,.273638,.899443,.957347,-.173657,.252385,.926389,.961434,-.162204,.231038,.951947,.965522,-.14979,.209834,.976751,.969412,-.136307,.188821,1.00022,.973902,-.122527,.168013,1.02229,.974045,-.108213,.147634,1.04199,.975775,-.0927397,.12705,1.06019,.978383,-.0778212,.106309,1.07711,.98211,-.0621216,.0849279,1.09245,.986517,-.0463847,.0633519,1.10651,.991696,-.0309353,.0419698,1.11903,.996349,-.0150914,.0206272,1.13073,1.00003,442449e-9,-231396e-9,1.14146,.727498,-885074e-11,.441528,145832e-10,.730897,-223525e-9,.443589,368298e-9,.730796,-893996e-9,.443528,.00147303,.730805,-.00201149,.443533,.00331433,.730814,-.00357596,.443538,.00589222,.730815,-.00558734,.443538,.00920678,.730822,-.00804544,.44354,.0132582,.730836,-.0109501,.443545,.0180468,.730848,-.0143008,.443546,.0235732,.730871,-.0180969,.443552,.0298382,.730915,-.022338,.443567,.0368438,.730982,-.0270225,.443591,.044591,.731076,-.0321491,.443627,.0530831,.731245,-.0377166,.443699,.0623243,.73144,-.0437216,.443777,.0723181,.7317,-.0501576,.443881,.0830691,.732034,-.0569942,.444014,.0945809,.732388,-.0638756,.444113,.106825,.732853,-.071203,.444247,.119859,.733473,-.0790076,.444442,.13369,.734195,-.0871937,.444645,.148304,.735069,-.095696,.444877,.163702,.736169,-.10426,.445133,.179861,.73747,-.112853,.44537,.196778,.738991,-.12199,.445651,.214496,.740865,-.131153,.445958,.232913,.743637,-.140245,.446548,.251977,.746797,-.149722,.447246,.271551,.751517,-.159341,.448656,.291774,.756156,-.169106,.449866,.312455,.761519,-.178436,.450919,.334552,.768295,-.186904,.451776,.358491,.776613,-.195117,.452832,.383446,.783966,-.202695,.45249,.408945,.793542,-.20985,.452587,.435364,.803192,-.216403,.451852,.462336,.813892,-.22251,.450708,.48987,.824968,-.227676,.4486,.517697,.835859,-.232443,.445156,.545975,.846825,-.235775,.440351,.574483,.858085,-.237897,.433641,.604246,.868825,-.238074,.425354,.634101,.879638,-.237661,.415383,.664201,.889966,-.236186,.404136,.693918,.899479,-.233599,.390917,.723481,.908769,-.229737,.376352,.75258,.917966,-.223836,.360372,.781764,.926304,-.217067,.342551,.811139,.934626,-.209309,.324238,.839585,.941841,-.20071,.304484,.867044,.94789,-.190602,.283607,.894579,.954196,-.179253,.262205,.921743,.958383,-.167646,.239847,.948026,.963119,-.155073,.218078,.973296,.966941,-.141426,.195899,.998135,.970836,-.126849,.174121,1.02021,.973301,-.112296,.153052,1.04085,.97448,-.0964965,.131733,1.05946,.977045,-.080489,.10997,1.07693,.980751,-.064844,.0881657,1.09254,.985475,-.0481938,.0657987,1.10697,.991089,-.0319185,.0435215,1.12004,.996122,-.0158088,.0214779,1.13173,1.00001,372455e-9,-200295e-9,1.14291,.708622,-907597e-11,.45304,141962e-10,.711162,-228911e-9,.454662,358052e-9,.709812,-914446e-9,.453797,.00143034,.709865,-.00205819,.453834,.00321935,.709864,-.00365894,.453833,.00572331,.709855,-.00571692,.453826,.00894278,.709862,-.00823201,.453828,.012878,.709875,-.011204,.453832,.0175295,.709896,-.0146323,.453839,.0228978,.709925,-.0185163,.453847,.0289839,.709974,-.0228551,.453866,.0357894,.710045,-.0276473,.453892,.0433161,.710133,-.032891,.453924,.0515665,.710292,-.0385851,.453992,.0605458,.710485,-.0447254,.45407,.0702574,.710769,-.0513051,.454192,.0807077,.711106,-.0582733,.454329,.091896,.711516,-.0652866,.45446,.103814,.712071,-.0728426,.454653,.116508,.712676,-.0808307,.45484,.129968,.713476,-.0892216,.455096,.144206,.714377,-.0979047,.455346,.159212,.715579,-.106531,.455647,.174973,.716977,-.115492,.455961,.191504,.71862,-.124821,.456315,.208835,.72084,-.134079,.4568,.226869,.723786,-.143427,.457521,.245582,.727464,-.153061,.458475,.264957,.732771,-.162768,.460239,.284948,.736515,-.172627,.460899,.30522,.743519,-.182487,.463225,.326717,.750041,-.191295,.464027,.350113,.758589,-.199746,.465227,.374782,.767703,-.207584,.465877,.400226,.777484,-.214973,.465996,.426442,.788792,-.221796,.466019,.453688,.800194,-.228038,.465083,.481246,.811234,-.233346,.462506,.509086,.822859,-.238073,.459257,.537338,.835082,-.241764,.454863,.566108,.846332,-.244241,.448163,.595126,.858355,-.244736,.439709,.625574,.87034,-.244278,.429837,.65617,.881027,-.24255,.418002,.686029,.891007,-.239912,.404325,.716039,.900874,-.236133,.389222,.745518,.911072,-.230672,.373269,.775026,.920359,-.22356,.355083,.804521,.928604,-.215591,.335533,.834045,.937175,-.206503,.315278,.861612,.942825,-.196684,.293653,.889131,.949805,-.185116,.271503,.916853,.955535,-.172703,.248821,.943541,.959843,-.159978,.225591,.970132,.964393,-.146375,.202719,.994709,.968008,-.131269,.179928,1.0186,.971013,-.11569,.158007,1.03928,.973334,-.1003,.13624,1.05887,.975775,-.0833352,.1138,1.07652,.979579,-.0668981,.0913141,1.09297,.984323,-.0500902,.0683051,1.10734,.990351,-.0332377,.0451771,1.12084,.995823,-.0161491,.0221705,1.13296,1.0001,234083e-9,-108712e-9,1.14441,.683895,-924677e-11,.46015,137429e-10,.68833,-233383e-9,.463134,346865e-9,.688368,-933547e-9,.463159,.00138748,.688367,-.00210049,.463159,.00312187,.688369,-.00373415,.463159,.00555004,.688377,-.00583449,.463163,.00867216,.688386,-.00840128,.463166,.0124884,.688398,-.0114343,.463169,.0169993,.688418,-.0149329,.463175,.0222054,.688453,-.0188964,.463188,.028108,.688515,-.0233239,.463214,.0347085,.68857,-.0282136,.463231,.0420091,.688679,-.033564,.463276,.0500132,.688854,-.0393733,.463356,.0587255,.689038,-.0456354,.46343,.0681476,.689321,-.0523433,.463553,.0782897,.689662,-.059412,.463693,.0891501,.690188,-.0665736,.4639,.100735,.690755,-.0743106,.464107,.113074,.691405,-.0824722,.464329,.126161,.692198,-.0910484,.464585,.140007,.693196,-.0998778,.464893,.154612,.69454,-.108651,.465285,.169984,.695921,-.117855,.465596,.186106,.697749,-.12734,.466056,.203034,.700375,-.136714,.466771,.220703,.703395,-.146386,.467579,.239062,.707904,-.156096,.469067,.258188,.711673,-.165904,.469851,.277759,.717489,-.175812,.471815,.297935,.724051,-.185931,.47389,.318916,.731965,-.195238,.47587,.341591,.741151,-.204021,.477523,.366062,.751416,-.212113,.478881,.391396,.761848,-.21979,.479226,.417599,.771886,-.2267,.478495,.444401,.783998,-.232991,.477622,.472084,.796523,-.238645,.475833,.500193,.808851,-.243396,.472568,.52865,.821191,-.247226,.467857,.557362,.834261,-.250102,.461871,.586768,.846762,-.251056,.453543,.617085,.859867,-.250604,.443494,.647659,.871948,-.248783,.431711,.678119,.882967,-.245855,.417911,.708399,.892826,-.242168,.401993,.738256,.90332,-.237062,.385371,.767999,.913633,-.22997,.366837,.798191,.922774,-.221687,.346372,.827756,.931371,-.212345,.325682,.856425,.938929,-.20206,.303665,.884299,.944821,-.190981,.280786,.912023,.951792,-.178065,.2573,.939669,.957712,-.164634,.233448,.96655,.961912,-.150863,.209504,.992366,.966382,-.13577,.18597,1.01633,.969588,-.119593,.162905,1.03843,.971777,-.103203,.14053,1.05841,.97433,-.0865888,.117909,1.07632,.978686,-.0690829,.0944101,1.09326,.983281,-.0516568,.0705671,1.10796,.989562,-.034558,.0468592,1.12182,.995465,-.0167808,.0229846,1.1342,.999991,373016e-9,-235606e-9,1.1459,.662251,-939016e-11,.468575,132714e-10,.666634,-237624e-9,.471675,335842e-9,.666411,-950385e-9,.471516,.00134321,.666399,-.00213833,.471509,.00302221,.666386,-.0038014,.471499,.00537283,.666405,-.00593958,.471511,.00839533,.666406,-.00855253,.471508,.0120898,.666428,-.0116401,.471519,.0164569,.666444,-.0152015,.471522,.0214971,.66649,-.0192362,.471543,.027212,.666537,-.0237428,.471558,.033603,.666617,-.0287198,.471591,.0406728,.666718,-.0341647,.471631,.0484238,.666889,-.0400759,.47171,.0568621,.667104,-.0464479,.471805,.0659915,.667374,-.0532677,.471923,.0758178,.667772,-.0603805,.472098,.0863425,.668371,-.0677392,.472363,.0975917,.668971,-.0756028,.472596,.109567,.669696,-.0839293,.472869,.122272,.670481,-.0926683,.473126,.135718,.6715,-.1016,.473442,.149914,.672911,-.110566,.47389,.164882,.674512,-.119984,.474354,.180602,.67651,-.129574,.474922,.19711,.679292,-.139106,.475764,.214371,.682798,-.148993,.476886,.232405,.686955,-.158737,.478179,.251153,.691406,-.168754,.479432,.270436,.697438,-.178703,.481481,.290374,.704761,-.188955,.484143,.311044,.713599,-.198814,.487007,.333003,.723194,-.207869,.488962,.357144,.732601,-.216189,.489815,.382169,.744193,-.22398,.490888,.408227,.754907,-.231156,.490355,.434928,.767403,-.23747,.489548,.462599,.78107,-.243503,.488274,.490908,.793893,-.248114,.484843,.519421,.807296,-.25222,.4803,.548561,.820529,-.255265,.474097,.577772,.833716,-.256741,.466041,.607782,.848403,-.25637,.456547,.638807,.860755,-.254804,.443946,.670058,.874012,-.251834,.430852,.700749,.885619,-.247867,.414903,.731446,.896069,-.242634,.397276,.761191,.906266,-.236093,.378535,.791053,.916759,-.227543,.358038,.821298,.92523,-.21783,.335705,.850747,.93436,-.207534,.313797,.879258,.941631,-.195983,.289671,.907734,.947564,-.183567,.265319,.935206,.953681,-.169345,.240815,.962739,.960008,-.154909,.216119,.989227,.964145,-.140161,.192096,1.01465,.968171,-.123411,.167855,1.03737,.969859,-.106525,.144817,1.05767,.972666,-.0891023,.12149,1.0761,.977055,-.0718094,.0975306,1.09336,.982527,-.0534213,.0730217,1.10878,.989001,-.0355579,.0483366,1.12285,.99512,-.0176383,.023938,1.13548,1.00007,368831e-9,-211581e-9,1.14744,.651047,-960845e-11,.484101,12922e-9,.644145,-241347e-9,.478968,324578e-9,.64396,-965142e-9,.478831,.00129798,.64396,-.00217154,.47883,.00292046,.643968,-.00386049,.478835,.00519202,.643974,-.00603186,.478838,.0081128,.643977,-.0086854,.478836,.011683,.643982,-.0118207,.478834,.0159031,.644024,-.0154374,.478856,.0207743,.644059,-.0195343,.478868,.0262975,.644122,-.0241103,.478896,.0324747,.644207,-.0291638,.478933,.039309,.64432,-.0346919,.478981,.0468029,.644481,-.0406919,.479053,.0549614,.644722,-.047159,.479169,.0637909,.645013,-.0540748,.479302,.0732974,.645503,-.0612001,.479541,.0834898,.646117,-.0687303,.479829,.0943873,.646707,-.0767846,.480061,.105991,.647431,-.0852465,.480343,.11831,.64831,-.0940719,.48066,.131348,.649486,-.103056,.481083,.14514,.650864,-.112261,.481528,.159676,.652604,-.121852,.482102,.174979,.654825,-.131505,.482813,.191079,.657876,-.141189,.483876,.207927,.661339,-.151239,.48499,.225586,.665463,-.161091,.486279,.243947,.670542,-.171235,.487968,.262957,.677361,-.181347,.49053,.282781,.685672,-.191679,.493862,.303311,.694551,-.201781,.49699,.324607,.703753,-.211164,.498884,.347916,.713703,-.219675,.500086,.372628,.725911,-.227836,.501554,.398694,.73862,-.23533,.502193,.425529,.752118,-.241786,.501811,.453209,.76579,-.247865,.500185,.481381,.779568,-.252696,.497159,.51011,.793991,-.256802,.492765,.539322,.808182,-.259942,.486827,.569078,.821698,-.261703,.478386,.598818,.836009,-.262006,.468772,.629762,.849824,-.260333,.456352,.661366,.863888,-.257398,.442533,.69295,.876585,-.253264,.426573,.723608,.888665,-.248026,.408964,.754378,.899537,-.241487,.389677,.784761,.9094,-.233463,.368516,.814688,.920166,-.223397,.346624,.845009,.928899,-.21255,.322717,.874431,.937156,-.200869,.298698,.902922,.943861,-.188387,.273491,.931356,.949557,-.174341,.247866,.958854,.955862,-.158994,.222496,.986098,.961721,-.143664,.197522,1.01229,.965976,-.127412,.17302,1.03571,.968652,-.109798,.148954,1.05699,.971084,-.0916787,.125044,1.07587,.975584,-.0739634,.100577,1.09372,.98122,-.055322,.0753666,1.10948,.988253,-.0366825,.0498899,1.12394,.99482,-.0180389,.024611,1.13694,1.00001,229839e-9,-188283e-9,1.14919,.613867,-964198e-11,.479449,123452e-10,.621485,-244534e-9,.485399,313091e-9,.621429,-978202e-9,.485353,.00125245,.62112,-.00220004,.485114,.00281687,.621119,-.0039111,.485112,.00500783,.621122,-.00611091,.485112,.00782498,.621133,-.00879922,.485117,.0112687,.621152,-.0119756,.485125,.0153394,.621183,-.0156396,.485139,.0200382,.621227,-.0197898,.485158,.0253663,.621298,-.0244253,.485192,.0313261,.621388,-.0295441,.485233,.0379204,.621507,-.0351432,.485286,.0451523,.621693,-.0412198,.485378,.0530277,.621933,-.0477673,.485495,.0615522,.622232,-.0547574,.485635,.0707316,.622809,-.0619417,.485943,.0805883,.623407,-.069625,.486232,.0911267,.62406,-.077796,.486516,.102354,.624835,-.0863731,.486838,.114279,.625758,-.095251,.487188,.126902,.627043,-.104299,.487695,.140285,.628438,-.113724,.488163,.154397,.630325,-.123417,.488858,.169267,.632801,-.133137,.489754,.184941,.635784,-.143052,.490815,.20136,.639406,-.153132,.492048,.218643,.643872,-.163143,.49363,.236615,.6499,-.17333,.496009,.255449,.657201,-.183622,.498994,.275006,.666221,-.194019,.502888,.295354,.674419,-.204192,.505459,.316244,.683729,-.21406,.507771,.33849,.695584,-.222854,.510245,.363166,.708583,-.231315,.512293,.389071,.721233,-.238911,.512747,.415737,.735134,-.245657,.512482,.443331,.750179,-.251879,.511526,.471891,.765073,-.256911,.508935,.500892,.779794,-.261144,.504341,.530294,.794801,-.264316,.498515,.560144,.810339,-.266276,.491015,.590213,.824818,-.266981,.481126,.620865,.839375,-.265778,.468685,.652687,.853043,-.262748,.453925,.684759,.867335,-.258474,.437912,.716209,.88037,-.253187,.419648,.747508,.891711,-.246476,.39982,.77797,.902896,-.238735,.37879,.808586,.913601,-.22885,.355891,.838843,.923019,-.217656,.331773,.869014,.933432,-.205539,.307356,.898512,.939691,-.192595,.281321,.9269,.946938,-.178945,.255441,.955297,.952372,-.163587,.229013,.983231,.95909,-.147214,.203179,1.00971,.963675,-.13064,.17792,1.03438,.968247,-.113121,.152898,1.05625,.97001,-.0945824,.128712,1.07598,.974458,-.0755648,.103349,1.094,.980168,-.0571998,.0776731,1.1104,.987295,-.0377994,.0514445,1.12491,.994432,-.0186417,.025429,1.13851,.999975,542714e-9,-282356e-9,1.15108,.592656,-980249e-11,.486018,119532e-10,.598467,-247275e-9,.490781,301531e-9,.597934,-988317e-9,.490343,.00120517,.597903,-.00222366,.490319,.0027116,.597913,-.00395315,.490327,.00482077,.597919,-.00617653,.490329,.00753264,.597936,-.00889375,.490339,.0108478,.597956,-.0121043,.490347,.0147668,.597992,-.0158073,.490365,.0192905,.598032,-.0200017,.490382,.0244204,.598109,-.0246865,.49042,.0301593,.598215,-.0298594,.490474,.03651,.59833,-.0355167,.490524,.0434757,.598525,-.0416559,.490624,.0510629,.598778,-.0482692,.490753,.0592781,.599135,-.0553114,.49094,.0681304,.599802,-.062542,.491328,.0776467,.600361,-.0703638,.491598,.0878184,.60101,-.0786256,.491882,.0986573,.601811,-.0872962,.492232,.11018,.602861,-.0962284,.492684,.1224,.604167,-.10538,.493213,.135354,.605693,-.114896,.493799,.149034,.607682,-.124654,.494576,.163469,.610672,-.13456,.4959,.178747,.613313,-.144581,.496713,.194723,.617603,-.154703,.498499,.211617,.622174,-.16489,.500188,.229183,.628855,-.175164,.503072,.247786,.636963,-.185565,.506798,.267116,.644866,-.195911,.509719,.28702,.653741,-.206104,.512776,.307763,.664942,-.216447,.516812,.329631,.67633,-.22552,.519181,.353515,.690012,-.234316,.521681,.379226,.704243,-.242032,.523129,.405901,.719396,-.249172,.523768,.433585,.734471,-.255543,.522541,.462085,.750539,-.260697,.520217,.491233,.766365,-.26501,.516293,.521094,.781677,-.268409,.509708,.551014,.797132,-.270399,.501944,.581463,.812655,-.271247,.492025,.612402,.828592,-.270708,.480424,.643798,.844044,-.268085,.465955,.67682,.857305,-.263459,.448425,.708496,.87114,-.258151,.430243,.74046,.884936,-.251171,.410578,.771583,.895772,-.243305,.38862,.802234,.906961,-.234037,.365214,.833179,.917775,-.222714,.34116,.86353,.927883,-.210175,.31572,.893557,.936617,-.196925,.289159,.922976,.943384,-.182788,.261996,.951606,.949713,-.167965,.235324,.979958,.955818,-.151109,.208408,1.00765,.961344,-.133834,.182591,1.03329,.965469,-.115987,.156958,1.0557,.968693,-.09746,.132239,1.07583,.973165,-.0778514,.106195,1.09451,.979387,-.0585067,.0797669,1.11137,.98671,-.0390409,.0530263,1.12643,.994093,-.019408,.0263163,1.14016,1.00002,540029e-9,-194487e-9,1.15299,.574483,-989066e-11,.494533,114896e-10,.574478,-249127e-9,.494528,289403e-9,.574607,-996811e-9,.494637,.00115797,.574396,-.00224241,.494458,.00260498,.574377,-.00398632,.49444,.00463102,.574386,-.00622836,.494445,.00723623,.574401,-.0089683,.494453,.010421,.574419,-.0122056,.49446,.0141859,.574459,-.0159396,.494481,.0185322,.574525,-.0201692,.49452,.0234617,.574587,-.0248924,.494547,.0289762,.574697,-.0301074,.494604,.0350797,.574853,-.0358114,.494688,.0417767,.575027,-.041999,.494772,.0490718,.575294,-.0486618,.494915,.0569728,.575733,-.0557148,.495173,.0654955,.576356,-.0630489,.495537,.0746612,.576944,-.0709285,.495836,.0844615,.57765,-.0792723,.496177,.0949142,.578491,-.0880167,.496563,.10603,.579639,-.0969462,.497096,.117841,.580989,-.10622,.497684,.130367,.582587,-.115861,.498337,.143609,.584951,-.125605,.499414,.157625,.587602,-.135608,.500518,.172413,.59076,-.145742,.501767,.187999,.594992,-.155934,.503542,.20445,.600656,-.166303,.506135,.221764,.607816,-.176681,.509542,.24002,.61522,-.187071,.51263,.258992,.623702,-.197465,.516021,.278773,.634192,-.207816,.520422,.299377,.644936,-.218183,.524073,.320802,.657888,-.2278,.528049,.34384,.670666,-.236747,.52986,.36916,.685626,-.24484,.531892,.395867,.701304,-.252071,.532727,.423488,.717727,-.258714,.532146,.452201,.733914,-.264211,.529883,.481579,.750529,-.26859,.5259,.511558,.76747,-.272046,.51999,.542042,.785189,-.274225,.513083,.572799,.800954,-.275189,.502936,.603816,.816962,-.274946,.490921,.635461,.83336,-.272695,.47684,.6676,.848143,-.268223,.459405,.70051,.861818,-.262768,.440319,.732902,.876828,-.255872,.420123,.765084,.889312,-.247703,.398379,.796391,.900412,-.238381,.374496,.827333,.912251,-.227783,.349874,.858385,.921792,-.214832,.323181,.888652,.931273,-.200949,.296624,.917763,.940295,-.186537,.269211,.947878,.946812,-.171538,.241447,.977016,.953588,-.155254,.213829,1.00501,.958841,-.137156,.186807,1.03179,.963746,-.118699,.160706,1.05502,.966468,-.0998358,.135504,1.07568,.971178,-.0805186,.109131,1.09479,.97831,-.0599348,.0818293,1.1123,.985886,-.0399661,.0545872,1.12771,.994021,-.0198682,.0269405,1.14186,1.00009,271022e-9,-12989e-8,1.15514,.538716,-990918e-11,.486732,109675e-10,.550656,-250642e-9,.497518,277412e-9,.55057,-.00100265,.497441,.00110974,.550903,-.00225672,.497733,.00249779,.550568,-.00401046,.497438,.00443906,.550574,-.00626613,.49744,.00693637,.550591,-.0090226,.497449,.00998921,.550623,-.0122795,.497469,.0135984,.550667,-.0160361,.497495,.0177654,.550724,-.0202908,.497526,.0224915,.550792,-.0250421,.497557,.0277795,.550918,-.0302878,.49763,.0336334,.551058,-.0360241,.497701,.0400573,.551276,-.0422473,.497824,.0470585,.551551,-.0489441,.497977,.0546433,.552074,-.0559596,.498312,.0628367,.552681,-.0633978,.498679,.071646,.553324,-.0713176,.499031,.0810746,.554011,-.0797268,.499365,.091129,.55488,-.0885238,.499779,.101837,.556171,-.0974417,.500444,.113239,.557498,-.106841,.501025,.125316,.559299,-.116533,.501864,.138128,.561647,-.126298,.502967,.151695,.564347,-.136388,.504129,.16604,.567863,-.146576,.505713,.181207,.572569,-.156832,.507953,.197259,.578919,-.167323,.511186,.214258,.585387,-.177712,.514042,.232038,.593134,-.188184,.517484,.250733,.603295,-.198717,.522345,.270454,.613854,-.209177,.526751,.290807,.626092,-.219644,.531595,.312202,.637868,-.229494,.534721,.334435,.652458,-.238718,.538304,.359184,.666985,-.247061,.539875,.385637,.683301,-.254652,.541042,.41328,.69998,-.261376,.540735,.441903,.717824,-.267085,.539139,.471609,.734617,-.271465,.534958,.501446,.753663,-.27528,.53032,.532571,.770512,-.277617,.522134,.563641,.787356,-.278525,.51206,.595067,.806252,-.278512,.50119,.627226,.822061,-.277023,.486791,.659402,.838959,-.273175,.470467,.692874,.85379,-.267238,.450688,.725702,.868268,-.260327,.429741,.75832,.881994,-.251946,.407223,.790189,.893885,-.242432,.383214,.821625,.905118,-.231904,.357297,.853011,.916045,-.219545,.330733,.883773,.927614,-.205378,.303916,.914435,.936005,-.190388,.275941,.944502,.944533,-.1749,.247493,.974439,.950758,-.158588,.218996,1.00286,.957078,-.141027,.191559,1.0304,.962448,-.121507,.164457,1.05466,.964993,-.102068,.138636,1.0761,.970017,-.0822598,.111861,1.09541,.97661,-.062033,.0843438,1.11317,.985073,-.0409832,.0558496,1.12911,.993515,-.020146,.0275331,1.1438,1.00006,27329e-8,-107883e-9,1.15736,.525324,-999341e-11,.498153,105385e-10,.526513,-251605e-9,.499277,265329e-9,.526517,-.00100641,.499282,.0010613,.526588,-.00226466,.499337,.00238823,.526539,-.0040255,.499302,.00424535,.526547,-.00628954,.499306,.00663364,.526561,-.00905628,.499313,.00955337,.526593,-.0123253,.499334,.0130054,.526642,-.0160957,.499365,.0169911,.5267,-.0203661,.499396,.0215122,.526792,-.0251347,.499451,.0265718,.526904,-.0303985,.499511,.0321732,.527079,-.0361554,.499617,.0383231,.527285,-.0423982,.499731,.045026,.527602,-.0491121,.499924,.0522936,.528166,-.0561127,.500306,.0601528,.52879,-.0635988,.5007,.0686059,.529421,-.071581,.501048,.0776518,.530144,-.0799854,.501421,.0873148,.531062,-.0888032,.501884,.0976084,.532374,-.0977643,.50259,.108588,.533828,-.107197,.50329,.120234,.53581,-.116887,.504312,.132602,.538063,-.126755,.505365,.145721,.5409,-.136819,.506668,.159617,.544882,-.147117,.508731,.174369,.550238,-.157446,.511601,.190028,.556038,-.167988,.514431,.206587,.563031,-.178364,.517808,.224046,.571543,-.189007,.521937,.242503,.582255,-.199546,.527415,.261977,.59272,-.210084,.531682,.282162,.605648,-.220448,.537123,.303426,.61785,-.230593,.540664,.325323,.632223,-.240238,.544467,.348993,.648819,-.24887,.547594,.375462,.665825,-.256657,.54912,.403024,.683389,-.263711,.549294,.431773,.701495,-.269666,.547649,.461494,.719197,-.274169,.543786,.491623,.737906,-.278124,.538644,.522994,.756652,-.280632,.531057,.554775,.775279,-.281741,.521972,.586441,.792688,-.281652,.509613,.618596,.811894,-.280345,.496497,.651462,.827938,-.277128,.47968,.684023,.844837,-.271646,.460688,.718024,.859239,-.264397,.438872,.751207,.874088,-.256144,.41577,.784232,.887693,-.246311,.391369,.816191,.899402,-.235497,.365872,.847828,.910973,-.223631,.338618,.87934,.92204,-.209874,.310803,.910325,.930987,-.194265,.281802,.940695,.94,-.178125,.252836,.970958,.948018,-.161479,.224239,1.00078,.955141,-.144038,.195857,1.0288,.960513,-.124915,.168487,1.05371,.963964,-.104284,.141495,1.07596,.968713,-.0838732,.114437,1.09628,.975524,-.0635579,.0863105,1.11448,.98431,-.042291,.0574774,1.13069,.992916,-.0209131,.0284343,1.14568,.999926,743097e-9,-379265e-9,1.15955,.501042,-998428e-11,.498726,100306e-10,.502992,-252112e-9,.500665,253283e-9,.502417,-.00100791,.500092,.00101259,.502965,-.00226919,.500621,.00227978,.502318,-.00403109,.499994,.00405011,.502333,-.00629832,.500005,.00632868,.502362,-.00906907,.500027,.00911446,.502369,-.0123423,.500023,.0124078,.50243,-.0161178,.500066,.016211,.502493,-.0203937,.500103,.0205256,.502592,-.0251684,.500166,.0253548,.502707,-.0304389,.50023,.0307029,.502881,-.0362015,.500335,.0365753,.503124,-.0424507,.500488,.0429798,.503443,-.0491582,.500686,.0499268,.504083,-.0561476,.501155,.0574541,.504668,-.0636846,.501524,.0655408,.505319,-.0716834,.501904,.0742072,.50609,-.0800925,.502321,.0834699,.507122,-.0888425,.502896,.0933603,.508414,-.097855,.503603,.10391,.509955,-.107304,.504416,.115113,.512061,-.116921,.505565,.127054,.514419,-.12689,.506732,.139709,.517529,-.136934,.508338,.153173,.522085,-.147327,.510987,.167528,.526986,-.157612,.513527,.182708,.533122,-.168213,.516717,.198881,.540807,-.178688,.520832,.215986,.550687,-.189511,.52632,.234335,.560567,-.199998,.531009,.253375,.571698,-.210652,.535839,.273499,.584364,-.220917,.541091,.294355,.599066,-.23137,.546875,.316525,.614148,-.241206,.551306,.339671,.631157,-.250379,.555187,.36531,.647919,-.258397,.556595,.392767,.666112,-.265528,.556949,.421397,.686158,-.271827,.556617,.451433,.704838,-.27674,.552975,.482131,.723957,-.280733,.547814,.513458,.74262,-.283359,.53997,.545446,.762009,-.284541,.530422,.57775,.781314,-.284507,.518546,.610434,.799116,-.283309,.504178,.643178,.817604,-.280378,.48843,.676248,.83459,-.275619,.469457,.709698,.850974,-.26856,.447698,.744245,.866747,-.260094,.424791,.777695,.881412,-.249929,.399913,.810392,.8936,-.239137,.37308,.842872,.905943,-.226818,.345705,.874677,.916408,-.213699,.31706,.906257,.927215,-.198428,.288444,.936881,.935625,-.181643,.258329,.96795,.944076,-.164386,.228488,.998216,.951229,-.146339,.199763,1.02689,.958793,-.127709,.172153,1.0535,.963219,-.107244,.144989,1.07646,.967562,-.0857764,.11685,1.09675,.974866,-.0645377,.0880571,1.11576,.983353,-.0431732,.0587352,1.13227,.992503,-.0218356,.0294181,1.1478,1.00003,605203e-9,-231013e-9,1.16207,.482935,-101177e-10,.504695,968142e-11,.477554,-251521e-9,.499071,240676e-9,.477904,-.00100683,.499436,96342e-8,.478368,-.00226636,.499899,.0021687,.477977,-.00402719,.499513,.00385384,.477993,-.00629226,.499525,.0060221,.478011,-.00906011,.499536,.00867289,.478051,-.0123305,.499566,.0118074,.478089,-.016102,.499587,.0154269,.478171,-.0203736,.499645,.0195341,.478254,-.025143,.499692,.0241318,.47839,-.0304071,.499779,.0292247,.478588,-.0361631,.499911,.0348196,.478812,-.0424023,.500046,.0409231,.479208,-.0490724,.500326,.047552,.479841,-.0560722,.500805,.0547377,.480392,-.0636125,.501152,.0624607,.481068,-.0716134,.501561,.0707473,.481898,-.0800062,.502054,.0796118,.483022,-.0886568,.502728,.0890974,.484332,-.0977553,.503479,.0992099,.486126,-.107173,.504546,.10999,.488066,-.11677,.50557,.121476,.490521,-.126725,.506849,.133672,.494232,-.136793,.50911,.146731,.498302,-.147116,.511345,.160577,.503565,-.157446,.514344,.175335,.510902,-.168121,.518824,.191207,.519263,-.178799,.523666,.208058,.528204,-.189407,.528296,.225875,.538854,-.200145,.533724,.244782,.551278,-.210701,.539833,.264753,.565222,-.221303,.546131,.285745,.579403,-.231688,.551496,.307592,.595469,-.241718,.556809,.330582,.610929,-.250992,.559641,.354995,.629433,-.259602,.562379,.382471,.648504,-.267038,.563676,.411126,.66756,-.273388,.562092,.440924,.689143,-.278788,.560807,.472118,.709056,-.282783,.555701,.503774,.729855,-.285836,.548698,.536364,.748954,-.287078,.538544,.56895,.768373,-.287133,.526711,.601991,.78827,-.285839,.512511,.635403,.807465,-.283238,.496323,.668797,.825194,-.27906,.477638,.702584,.842203,-.272286,.456253,.736393,.857749,-.263854,.432412,.77096,.874799,-.253943,.407806,.80489,.887497,-.24237,.38033,.83771,.89966,-.230278,.352446,.870376,.911753,-.21646,.323268,.902256,.923011,-.202071,.294314,.933306,.932375,-.185519,.264104,.965177,.940537,-.167604,.234035,.996303,.948904,-.149068,.20412,1.0261,.955263,-.129539,.175431,1.05304,.960303,-.109932,.148116,1.07617,.965512,-.0880572,.119693,1.09742,.973466,-.0660548,.0901619,1.11721,.98284,-.0439228,.0599875,1.13436,.992216,-.0219588,.0298975,1.15006,.999946,119402e-9,-208547e-10,1.16471,.447827,-100414e-10,.491543,914833e-11,.454778,-251257e-9,.499172,22891e-8,.453519,-.00100342,.497787,914184e-9,.45357,-.00225776,.497847,.00205701,.453578,-.00401371,.497855,.00365705,.45357,-.00627107,.497841,.00571453,.453598,-.00902968,.497864,.00823019,.453627,-.0122888,.497882,.0112049,.453684,-.0160475,.497923,.0146405,.453764,-.0203044,.49798,.0185394,.453866,-.0250576,.498049,.0229054,.453996,-.0303028,.49813,.0277424,.454196,-.0360379,.498267,.0330587,.454457,-.0422521,.498445,.0388613,.454926,-.0488393,.498812,.0451767,.455525,-.0558653,.499272,.0520153,.456074,-.0633772,.499625,.0593754,.456752,-.0713606,.500049,.0672751,.457648,-.07971,.500615,.0757447,.458849,-.0883032,.501399,.0848231,.46029,-.0974095,.502293,.0945135,.462,-.106729,.503301,.104848,.464121,-.116354,.504533,.115884,.466889,-.126214,.506172,.127652,.470744,-.136324,.508667,.14024,.47488,-.146595,.510995,.153673,.480845,-.157027,.514832,.168053,.488262,-.167658,.519506,.183508,.496547,-.178343,.524347,.199948,.506254,-.188916,.52983,.217503,.517961,-.199975,.536357,.236272,.531484,-.210624,.543641,.256096,.545496,-.221227,.550048,.277085,.559497,-.231568,.555076,.298615,.575752,-.241698,.560541,.321547,.591999,-.251172,.564156,.345602,.610654,-.260178,.567607,.371851,.630484,-.268094,.56923,.40076,.651807,-.274661,.569779,.430801,.67239,-.280331,.566791,.461939,.693024,-.284501,.562007,.493854,.715473,-.287852,.555791,.526992,.736323,-.28929,.546345,.560102,.755771,-.289405,.534,.593543,.775424,-.2881,.519114,.627256,.795447,-.285562,.502543,.661464,.815319,-.281416,.484773,.695206,.831769,-.275523,.463445,.729044,.849464,-.267516,.440269,.764069,.866775,-.257584,.415049,.799089,.881252,-.245817,.388049,.831948,.894209,-.233127,.35889,.865526,.906922,-.219579,.329915,.89818,.919686,-.204491,.300441,.930013,.929044,-.188962,.269445,.962061,.938393,-.171079,.238402,.994214,.94661,-.15199,.208204,1.02533,.953095,-.131953,.178653,1.0529,.958644,-.111233,.150684,1.0771,.963925,-.0903098,.122359,1.09855,.971995,-.0680505,.0923342,1.11874,.981658,-.0448512,.0614195,1.13635,.991649,-.0221931,.0303582,1.15238,.999985,393403e-9,-111086e-9,1.16772,.396806,-971563e-11,.457671,842355e-11,.429186,-249421e-9,.495017,21625e-8,.429324,-998052e-9,.495173,865322e-9,.429175,-.00224487,.494999,.00194637,.429129,-.00399041,.494952,.00346004,.429153,-.00623476,.494974,.00540684,.429168,-.0089773,.494983,.00778714,.429207,-.0122175,.495012,.0106022,.429257,-.0159542,.495047,.0138535,.429338,-.0201864,.495106,.0175443,.429431,-.0249104,.495165,.0216774,.429587,-.0301252,.495279,.0262594,.429796,-.0358249,.495432,.0312968,.430065,-.0419972,.495621,.0367985,.430588,-.0485144,.496061,.042798,.43113,-.0555028,.496472,.0492914,.431743,-.0629852,.496904,.0562907,.432448,-.0709256,.497369,.0638056,.433414,-.0791942,.498032,.071885,.434638,-.0877346,.498854,.0805517,.43611,-.0968056,.499812,.0898047,.437859,-.106002,.500891,.0997142,.440017,-.115648,.502198,.110289,.443236,-.125427,.504389,.121644,.44697,-.135492,.506809,.133769,.451689,-.145746,.509858,.146787,.45811,-.156219,.514247,.160793,.465305,-.166834,.518816,.175791,.474085,-.177546,.524331,.191906,.484808,-.188262,.53104,.209199,.49732,-.199346,.538511,.227825,.509693,-.209951,.544554,.247269,.524367,-.220533,.551616,.267978,.539228,-.231082,.557368,.289672,.55644,-.241342,.563782,.31268,.574204,-.250964,.568851,.33651,.593388,-.260306,.57312,.362219,.613358,-.268667,.574916,.390322,.634512,-.275591,.575053,.420478,.65563,-.281328,.572404,.451614,.678265,-.285948,.568893,.484112,.70011,-.289408,.561878,.517348,.723005,-.291328,.55359,.551355,.743744,-.291418,.541099,.585109,.763949,-.290252,.526489,.619487,.784186,-.287648,.509496,.65404,.804304,-.283782,.491484,.688649,.823629,-.278067,.470517,.723133,.84094,-.270588,.44705,.757163,.857852,-.261188,.421252,.792816,.874934,-.249313,.394191,.827248,.888709,-.236492,.365359,.861074,.902589,-.222185,.336016,.894417,.914201,-.207314,.30527,.926825,.925978,-.191146,.274532,.9595,.93512,-.174135,.243393,.991583,.943656,-.155231,.212414,1.02356,.951719,-.134403,.182005,1.05239,.957164,-.113023,.153043,1.07754,.962656,-.0914493,.124186,1.09984,.970695,-.0694179,.0941654,1.12,.980749,-.0466199,.0629671,1.13849,.991205,-.0227032,.0311146,1.15494,.999884,632388e-9,-254483e-9,1.1706,.379821,-957289e-11,.460637,789337e-11,.405188,-247483e-9,.491396,204064e-9,.404796,-989434e-9,.490914,815853e-9,.40483,-.00222607,.490949,.00183559,.40473,-.00395723,.49084,.00326332,.404731,-.00618287,.490836,.00509945,.404768,-.00890258,.490871,.00734463,.404791,-.0121156,.490883,.00999992,.404857,-.0158214,.490938,.0130676,.404943,-.0200178,.491004,.0165503,.405059,-.0247027,.491093,.0204521,.405213,-.0298729,.491205,.0247788,.405399,-.0355226,.491333,.0295373,.405731,-.0416352,.491604,.034741,.406303,-.0480807,.492116,.0404255,.406814,-.0550458,.492506,.0465732,.407404,-.0624652,.492926,.0532058,.408149,-.0702958,.493442,.0603442,.409128,-.0784623,.494136,.0680297,.410408,-.087007,.495054,.0762786,.411813,-.0959639,.495962,.0851046,.413735,-.105075,.497257,.0945878,.416137,-.114646,.498882,.104725,.41934,-.124394,.501132,.11563,.423326,-.134328,.503883,.127325,.428419,-.14458,.50747,.139911,.43484,-.154979,.511964,.153481,.442641,-.165628,.517328,.168114,.452511,-.176365,.524258,.183995,.463473,-.187298,.531248,.200953,.475564,-.198244,.538367,.219176,.488664,-.208938,.545175,.238514,.504073,-.219599,.553227,.259129,.520832,-.230378,.560653,.280997,.538455,-.240703,.567523,.303821,.55709,-.250548,.573287,.327948,.576646,-.259964,.577795,.353362,.596705,-.268721,.580077,.380336,.618053,-.276054,.58018,.4101,.640303,-.282176,.578747,.44161,.662365,-.286931,.574294,.474106,.684542,-.290521,.567035,.507549,.707984,-.292672,.558687,.541853,.730913,-.293189,.547606,.576581,.752948,-.292199,.533471,.61172,.773452,-.289508,.516395,.646339,.794715,-.285716,.497873,.682131,.814251,-.280051,.476845,.716396,.833057,-.272873,.453449,.751503,.84959,-.263982,.427857,.786085,.867022,-.252745,.400335,.821355,.882277,-.239655,.371304,.85646,.895375,-.225386,.340397,.890828,.909347,-.209587,.310005,.923532,.921885,-.193433,.2796,.956419,.932127,-.176135,.247276,.989445,.941869,-.157872,.216186,1.02221,.949735,-.137577,.185602,1.05195,.956617,-.115285,.155767,1.07822,.961974,-.0928418,.126103,1.10149,.96972,-.0700592,.0956758,1.12207,.98012,-.0474671,.0643269,1.1408,.990825,-.0238113,.0320863,1.1577,.999876,381574e-9,-812203e-10,1.17403,.367636,-961342e-11,.469176,753287e-11,.380377,-244772e-9,.485434,191797e-9,.380416,-978857e-9,.485475,767015e-9,.380376,-.00220165,.485435,.00172522,.380419,-.00391408,.485487,.00306734,.380438,-.00611549,.485505,.00479332,.380462,-.00880558,.485525,.00690391,.380496,-.0119837,.485551,.00940039,.38056,-.0156487,.485605,.0122848,.38064,-.0197988,.485666,.0155601,.380767,-.0244324,.48577,.0192313,.380909,-.0295444,.485871,.0233032,.381142,-.0351321,.48606,.0277861,.381472,-.0411535,.486336,.0326939,.382015,-.0475408,.486833,.0380565,.382523,-.0544395,.487231,.0438615,.383129,-.061784,.487683,.0501332,.383952,-.0695085,.488313,.0568996,.38498,-.0775819,.489077,.0641952,.386331,-.0860443,.490113,.0720324,.387788,-.0948406,.491099,.0804379,.389808,-.103899,.492566,.0894899,.39252,-.113313,.494601,.0992098,.395493,-.123007,.496619,.109641,.399826,-.132859,.499912,.120919,.405341,-.143077,.504061,.133107,.411932,-.153465,.508905,.146263,.420591,-.164108,.515482,.160544,.43101,-.174893,.523191,.176123,.441881,-.185839,.53026,.192757,.453919,-.196633,.537295,.210535,.468715,-.207611,.546156,.229886,.485182,-.218517,.555173,.250543,.501926,-.229249,.562728,.27221,.51785,-.239481,.567494,.294892,.536947,-.249395,.573889,.318987,.557115,-.259,.578831,.344348,.577966,-.268075,.582055,.371223,.599489,-.276115,.583307,.399834,.62479,-.282523,.583902,.431415,.647504,-.287663,.57953,.464301,.670601,-.291538,.573103,.498123,.693539,-.293842,.563731,.532662,.717385,-.294681,.553169,.567925,.741533,-.293717,.539908,.603502,.762142,-.291156,.521902,.639074,.783014,-.28719,.502815,.674439,.805158,-.281773,.482598,.710497,.823646,-.274682,.458949,.7456,.841879,-.266184,.433129,.781085,.859515,-.255682,.406064,.816,.875335,-.242849,.376509,.851074,.890147,-.228329,.345502,.886473,.903144,-.212491,.31428,.920751,.916618,-.195695,.282994,.954606,.927953,-.178267,.251091,.988402,.937414,-.159549,.219107,1.02141,.946823,-.140022,.18896,1.05167,.954651,-.118154,.158667,1.07819,.959955,-.0946636,.128808,1.1025,.96858,-.0711792,.0973787,1.12391,.97938,-.0475046,.0650965,1.14322,.990498,-.024059,.0326267,1.16077,.999844,-512408e-10,112444e-9,1.17727,.316912,-934977e-11,.425996,695559e-11,.356423,-241372e-9,.479108,179562e-9,.356272,-965292e-9,.478897,71811e-8,.356262,-.00217182,.478894,.00161574,.356265,-.00386092,.478895,.00287261,.356278,-.0060324,.478905,.00448907,.356293,-.00868565,.478914,.00646572,.356346,-.0118207,.478965,.00880438,.356395,-.0154355,.479001,.0115066,.356484,-.019529,.479075,.0145762,.356609,-.0240991,.47918,.018018,.356766,-.0291413,.479305,.0218379,.357009,-.0346498,.479512,.0260454,.357424,-.0405462,.479909,.0306657,.357899,-.0468825,.480337,.0357054,.358424,-.0536887,.480771,.0411728,.359041,-.0609416,.481242,.0470841,.359903,-.0685239,.481943,.0534831,.360932,-.0764883,.482741,.0603795,.362196,-.0848364,.483688,.0678028,.363847,-.0935002,.484947,.0758086,.365972,-.102471,.486588,.0844173,.368741,-.111751,.488787,.0937199,.372146,-.121334,.491405,.103732,.377114,-.131147,.495604,.114608,.38226,-.141213,.499436,.126345,.389609,-.151632,.505334,.139116,.397925,-.162073,.51168,.152995,.407824,-.172819,.518876,.168071,.420014,-.183929,.527639,.184495,.434266,-.195032,.537588,.20232,.447352,-.205792,.544379,.221189,.463726,-.216704,.553422,.241616,.481406,-.227531,.562074,.263298,.498707,-.238017,.568227,.286116,.518039,-.247936,.574473,.3101,.538277,-.257437,.579191,.335401,.561166,-.266829,.584807,.362246,.583189,-.275329,.586476,.390609,.606024,-.28234,.585578,.420998,.632419,-.287924,.584496,.454357,.656128,-.291972,.577766,.488233,.679953,-.29456,.56875,.523248,.704654,-.295816,.558388,.559168,.729016,-.295157,.544826,.595326,.752062,-.292779,.528273,.631864,.773138,-.288681,.508482,.667793,.794869,-.283358,.487341,.704035,.815101,-.27608,.46354,.739925,.834212,-.26767,.438672,.775539,.852368,-.257397,.411239,.810895,.870207,-.245689,.3829,.846472,.884063,-.231452,.351496,.881788,.898284,-.215561,.31895,.917438,.912964,-.198208,.287367,.952422,.924666,-.180426,.254487,.987551,.934429,-.161525,.222226,1.02142,.943485,-.141197,.191143,1.05218,.9521,-.120085,.161112,1.07937,.957876,-.0975881,.130982,1.10403,.966943,-.0726842,.0990553,1.12616,.978313,-.0483705,.0662818,1.14619,.990048,-.0239072,.0329243,1.16413,.999984,461885e-9,-772859e-10,1.18099,.321287,-935049e-11,.455413,659662e-11,.332595,-237513e-9,.471437,167562e-9,.332729,-949964e-9,.471618,670192e-9,.332305,-.00213618,.471028,.00150712,.332326,-.00379765,.471055,.00267959,.332344,-.00593353,.471072,.00418751,.332356,-.00854349,.471077,.00603172,.332403,-.0116268,.471121,.00821362,.332461,-.0151824,.47117,.0107357,.332552,-.0192088,.471251,.0136014,.332657,-.0237024,.47133,.0168152,.332835,-.0286615,.471487,.0203853,.333083,-.0340765,.471708,.0243212,.333547,-.0398563,.47219,.0286518,.333989,-.0460916,.472587,.0333763,.334532,-.0527897,.473054,.0385084,.335167,-.0599284,.473568,.0440638,.33608,-.0673514,.474362,.0500962,.337146,-.0752237,.475231,.0566022,.338462,-.083418,.476282,.0636272,.34014,-.0919382,.477615,.0712153,.342341,-.100741,.479404,.079417,.345088,-.109905,.481618,.0882631,.349049,-.119369,.485081,.0978851,.353939,-.129033,.489317,.108336,.359893,-.139038,.494309,.119698,.366945,-.149411,.499983,.132024,.375814,-.159843,.507185,.145558,.387112,-.170664,.516392,.160433,.40023,-.181897,.526519,.176648,.412555,-.192785,.53423,.193922,.427023,-.203663,.542741,.212662,.443685,-.214695,.552066,.232944,.461499,-.225561,.560762,.254495,.480975,-.236257,.569421,.277531,.501,-.24639,.576101,.301724,.521691,-.256101,.581493,.327112,.543478,-.265289,.585221,.353917,.566094,-.273938,.587614,.381941,.589578,-.281679,.587991,.41172,.614583,-.287655,.585928,.444148,.641813,-.292228,.582092,.478617,.666189,-.295172,.57398,.51397,.690475,-.29648,.561676,.550118,.715543,-.296203,.548758,.586933,.740405,-.293999,.532792,.62384,.762183,-.28998,.512735,.660723,.786069,-.28478,.492402,.69807,.806812,-.277568,.469058,.734422,.826987,-.268951,.443017,.770946,.844588,-.259049,.415501,.80699,.863725,-.2471,.387328,.842107,.879137,-.234157,.356108,.878078,.894634,-.218719,.324315,.914058,.909162,-.201293,.291813,.949922,.92072,-.18267,.258474,.985337,.93158,-.163212,.225593,1.0205,.941238,-.142771,.193986,1.05273,.949293,-.120956,.163392,1.08075,.956226,-.0985743,.132934,1.10559,.96546,-.075118,.101255,1.12823,.977403,-.0497921,.0675441,1.149,.989648,-.0241574,.0334681,1.16765,1.00001,5762e-7,-184807e-9,1.18519,.303474,-916603e-11,.4542,61243e-10,.308894,-232869e-9,.462306,155592e-9,.309426,-931661e-9,.463093,622499e-9,.308643,-.0020949,.461933,.00139979,.308651,-.0037242,.461941,.00248874,.308662,-.00581873,.46195,.00388933,.308687,-.00837818,.461974,.00560247,.308728,-.0114016,.462011,.00762948,.308789,-.0148884,.462067,.00997326,.308882,-.0188369,.462151,.0126375,.309007,-.0232436,.462263,.0156271,.30918,-.0281054,.462417,.0189498,.309442,-.0334065,.462667,.0226167,.309901,-.0390589,.463162,.0266614,.310331,-.0452042,.463555,.0310715,.310858,-.0517735,.464019,.0358698,.311576,-.0587359,.464669,.0410848,.312436,-.0660383,.465406,.0467453,.313526,-.0737266,.466339,.0528718,.314903,-.0817574,.467504,.0595039,.316814,-.090167,.469226,.0666888,.318965,-.0987555,.470981,.0744658,.322077,-.107792,.473814,.082912,.325947,-.117098,.477241,.0920846,.331008,-.126602,.48184,.102137,.337893,-.136619,.488334,.113135,.345106,-.146838,.494415,.12511,.355111,-.157357,.503275,.138356,.365095,-.167955,.510966,.152686,.378344,-.179157,.521508,.16856,.391599,-.190143,.530455,.18561,.407786,-.20123,.541275,.204308,.425294,-.212456,.551784,.224623,.444021,-.223568,.561493,.246172,.463418,-.234154,.569886,.268979,.484077,-.244546,.577116,.293411,.505513,-.254301,.582914,.318936,.527672,-.263564,.587208,.345856,.550565,-.272332,.589277,.374054,.573656,-.280011,.588426,.403276,.59827,-.286924,.587504,.43474,.624731,-.291994,.583401,.468767,.652396,-.295159,.576997,.504411,.67732,-.296954,.565863,.54114,.703147,-.296877,.552316,.57816,.728715,-.295147,.536773,.616124,.752448,-.291275,.51771,.653885,.775169,-.285905,.496087,.691537,.799307,-.279064,.474232,.729251,.819482,-.270294,.447676,.766267,.837659,-.260032,.419656,.802616,.856903,-.248497,.391328,.838583,.873325,-.235252,.360285,.874711,.889788,-.221126,.329215,.91077,.904486,-.204304,.296392,.94653,.917711,-.185562,.262159,.983828,.928969,-.165635,.229142,1.01955,.939707,-.14442,.19673,1.05317,.948167,-.122147,.165095,1.0823,.955222,-.099098,.13451,1.10791,.964401,-.0755332,.102476,1.1312,.976605,-.0513817,.0689667,1.15218,.989085,-.0258499,.034506,1.17129,.999908,617773e-9,-271268e-9,1.18961,.285803,-905752e-11,.452348,572272e-11,.284689,-22732e-8,.450581,143626e-9,.285263,-910214e-9,.451482,575099e-9,.285302,-.00204784,.451553,.00129395,.285318,-.00364057,.451574,.0023006,.28533,-.00568813,.451585,.00359547,.285361,-.00819001,.451618,.00517934,.285397,-.0111458,.45165,.007054,.285447,-.0145536,.451688,.00922167,.285527,-.0184127,.451758,.0116869,.285688,-.0227207,.451929,.0144555,.28584,-.0274712,.452055,.0175341,.286136,-.0326278,.452369,.0209406,.286574,-.0381792,.452853,.0246965,.287012,-.0441879,.453272,.0287996,.287542,-.0506096,.453752,.033268,.288299,-.0573634,.454488,.0381504,.289186,-.0645458,.455294,.0434447,.290302,-.0720405,.456301,.0491973,.291776,-.0799046,.457648,.0554453,.29372,-.088117,.459483,.0622311,.296052,-.0965328,.461571,.0695992,.299563,-.105409,.465085,.077658,.30335,-.114553,.468506,.0864176,.309167,-.123917,.474423,.0961078,.31529,-.13381,.47995,.106643,.324163,-.144021,.488592,.118322,.333272,-.154382,.496461,.131133,.344224,-.165015,.50562,.145208,.357733,-.176168,.516719,.16073,.373046,-.187468,.528513,.177807,.38788,-.198488,.537713,.196072,.405133,-.209545,.547999,.21605,.423845,-.220724,.55759,.237484,.443777,-.231518,.566246,.26039,.464824,-.242035,.574326,.284835,.486635,-.251898,.58037,.310518,.51012,-.261304,.58568,.337678,.535301,-.270384,.590197,.366242,.559193,-.27841,.590569,.395873,.583544,-.285325,.588161,.426857,.608834,-.291113,.584249,.459477,.635753,-.294882,.57763,.494734,.664367,-.297088,.569479,.532023,.689688,-.297364,.555064,.569629,.715732,-.295949,.539522,.608124,.741307,-.292259,.521613,.646231,.764949,-.287063,.49969,.684938,.788599,-.28012,.476747,.723548,.81048,-.27153,.45116,.761135,.831372,-.261289,.424101,.798916,.850092,-.249559,.39443,.835952,.867777,-.236348,.363849,.871606,.884632,-.221569,.332477,.907843,.90047,-.20618,.300667,.944187,.914524,-.188771,.266552,.981371,.926892,-.168362,.232349,1.01841,.937951,-.146761,.199359,1.05308,.947236,-.123813,.1675,1.0839,.954367,-.099984,.136166,1.11047,.963907,-.0759278,.103808,1.13414,.976218,-.0511367,.0697061,1.15575,.988772,-.0267415,.0352529,1.17531,.999888,-520778e-9,289926e-9,1.19389,.263546,-883274e-11,.441896,526783e-11,.262352,-221849e-9,.439889,132311e-9,.262325,-886683e-9,.439848,528824e-9,.26228,-.00199476,.439765,.00118975,.262372,-.00354671,.439922,.00211568,.26239,-.00554141,.439941,.00330652,.262412,-.00797888,.439961,.00476346,.262453,-.0108584,.440002,.00648818,.262528,-.0141788,.440085,.0084835,.262615,-.017938,.440166,.0107533,.262744,-.0221346,.440291,.0133044,.262939,-.026762,.440493,.0161445,.263277,-.0317573,.440889,.0192974,.26368,-.0371832,.441338,.0227699,.264106,-.0430371,.441753,.0265698,.264624,-.0493035,.442227,.0307178,.265378,-.0558669,.442985,.0352616,.266253,-.0628718,.443795,.0401968,.267478,-.0701569,.445008,.04559,.269062,-.077845,.446599,.0514539,.270926,-.0857941,.448349,.0578382,.273693,-.0940773,.451221,.0648363,.276746,-.102704,.454097,.0724389,.281693,-.111735,.459517,.0808744,.287335,-.121004,.46531,.0901551,.29448,-.130734,.472605,.100371,.30257,-.140777,.480251,.111644,.312465,-.15111,.489444,.124111,.324856,-.16189,.500919,.137979,.33774,-.172946,.511317,.153163,.35255,-.184152,.522684,.169817,.367786,-.19522,.53248,.187886,.385474,-.20632,.543326,.207634,.404976,-.217744,.554109,.229165,.425203,-.228691,.563395,.252068,.446704,-.239299,.571565,.276471,.468951,-.249348,.577935,.302323,.493487,-.258933,.584309,.329882,.517861,-.268009,.58773,.358525,.543309,-.276238,.589612,.388585,.569704,-.28356,.589294,.419787,.594871,-.289497,.585137,.452114,.622555,-.294452,.580356,.486466,.651167,-.296918,.57185,.523079,.677332,-.297647,.558428,.5611,.703718,-.296321,.542232,.599592,.730262,-.293339,.524541,.639138,.754304,-.288036,.502691,.677978,.778051,-.281018,.479212,.716537,.801557,-.272414,.454071,.75586,.822559,-.262419,.425952,.794477,.843051,-.250702,.397313,.832664,.86232,-.237264,.366534,.869876,.879044,-.222716,.334816,.906973,.896362,-.206827,.303143,.943558,.910342,-.189659,.269699,.979759,.924119,-.171108,.236411,1.01718,.935374,-.149579,.202224,1.05289,.944295,-.126295,.16989,1.08496,.952227,-.101511,.138089,1.11256,.962041,-.0766392,.105053,1.1375,.97528,-.0511967,.070329,1.15983,.988476,-.025463,.0351268,1.17987,.999962,286808e-10,145564e-10,1.19901,.227089,-841413e-11,.404216,472707e-11,.239725,-215083e-9,.426708,120833e-9,.239904,-860718e-9,.427028,483555e-9,.239911,-.00193661,.427039,.00108806,.239914,-.00344276,.42704,.00193457,.239933,-.00537907,.427064,.00302363,.239944,-.00774482,.427065,.00435604,.239993,-.01054,.427122,.00593398,.240052,-.0137626,.427179,.00775987,.240148,-.0174115,.427279,.00983854,.240278,-.021484,.42741,.0121763,.240472,-.0259729,.427618,.0147827,.240839,-.0308131,.428086,.0176837,.241201,-.0360893,.428482,.0208775,.241626,-.0417723,.428907,.0243821,.242207,-.0478337,.42952,.0282228,.24298,-.0542199,.430332,.0324333,.243881,-.0610015,.431222,.0370252,.245123,-.0680874,.432512,.0420535,.24667,-.0755482,.434088,.0475414,.248779,-.0832873,.436323,.0535542,.251665,-.0913546,.439509,.0601716,.255305,-.0998489,.443478,.0674282,.260049,-.108576,.448713,.0754673,.266192,-.117754,.455524,.084339,.273158,-.127294,.4627,.0941683,.282131,-.137311,.472068,.10515,.293332,-.147736,.483565,.117402,.304667,-.158357,.493702,.130824,.317785,-.169274,.504708,.145724,.333245,-.180595,.517107,.16215,.349843,-.191892,.528849,.180149,.367944,-.203168,.540301,.199746,.387579,-.214443,.551514,.221047,.408247,-.225624,.560906,.243981,.43014,-.236422,.56959,.268513,.452669,-.24654,.576098,.294409,.476196,-.256157,.580925,.322002,.501157,-.265289,.584839,.351052,.527632,-.273671,.587614,.3812,.555754,-.281254,.589119,.412994,.581682,-.287448,.585204,.445498,.608196,-.292614,.579006,.479505,.635661,-.296068,.571297,.514643,.664999,-.297395,.560855,.552213,.691039,-.296645,.544525,.591365,.7179,-.293785,.526535,.630883,.744059,-.289089,.50545,.670932,.76863,-.282239,.482514,.710904,.793273,-.273688,.457246,.750259,.814731,-.26328,.428872,.78948,.835603,-.251526,.399384,.828597,.85489,-.238339,.368811,.866892,.872828,-.223607,.336617,.90563,.889462,-.207538,.303997,.943538,.904929,-.190297,.270812,.980591,.919101,-.172034,.237453,1.01935,.930536,-.152058,.204431,1.05498,.941223,-.129515,.172495,1.08717,.94982,-.104263,.140175,1.11551,.960592,-.0781944,.106465,1.14098,.974629,-.051688,.0711592,1.16418,.98811,-.0253929,.0354432,1.18465,1.00004,804378e-9,-330876e-9,1.20462,.214668,-821282e-11,.406619,433582e-11,.218053,-208144e-9,.413025,109887e-9,.217987,-832212e-9,.412901,439362e-9,.217971,-.00187246,.412876,988623e-9,.217968,-.00332855,.41286,.00175772,.217985,-.00520055,.412882,.00274729,.218014,-.00748814,.412916,.00395842,.218054,-.0101901,.412957,.00539274,.218106,-.0133057,.413005,.00705348,.218217,-.0168342,.413139,.00894581,.218338,-.0207707,.413258,.0110754,.21855,-.0251001,.413509,.0134551,.218913,-.0297861,.413992,.0161081,.219265,-.0348956,.414383,.0190307,.219696,-.0403909,.414839,.0222458,.220329,-.0462003,.415567,.025792,.220989,-.0524208,.41621,.0296637,.222027,-.058948,.417385,.0339323,.223301,-.0658208,.418779,.0386055,.224988,-.0730347,.420665,.0437355,.227211,-.0805274,.423198,.0493844,.230131,-.088395,.426566,.0556135,.233908,-.0966208,.43091,.0624829,.239092,-.105223,.437148,.0701636,.245315,-.11424,.444302,.0786949,.253166,-.12368,.453262,.0882382,.262374,-.133569,.463211,.0988682,.273145,-.143836,.474271,.110727,.285512,-.154577,.4863,.123945,.299512,-.165501,.498817,.138581,.314287,-.176698,.510341,.154676,.331083,-.188066,.522583,.172459,.349615,-.199597,.534879,.191979,.369318,-.210843,.546083,.21309,.390377,-.222068,.5562,.235998,.412411,-.233059,.564704,.260518,.435715,-.24357,.572314,.286795,.461196,-.253356,.579395,.314559,.485587,-.262362,.581985,.343581,.511908,-.270895,.584347,.374367,.539798,-.278452,.58505,.406015,.567974,-.284877,.583344,.439168,.594303,-.290124,.577348,.473005,.622951,-.294183,.570751,.508534,.652404,-.296389,.561541,.544764,.679291,-.296605,.546426,.582927,.706437,-.294095,.528599,.622681,.734485,-.28978,.508676,.663567,.758841,-.283363,.484768,.704092,.78537,-.275015,.460434,.745101,.807315,-.264689,.432166,.784712,.8271,-.252597,.401807,.824241,.849191,-.239154,.371458,.863803,.867046,-.224451,.338873,.903063,.8852,-.208342,.306175,.942763,.901771,-.190684,.272759,.981559,.915958,-.172105,.239306,1.02048,.928046,-.152214,.206071,1.05765,.939961,-.130247,.17367,1.08999,.948711,-.10672,.142201,1.11829,.959305,-.0808688,.108454,1.14467,.973009,-.0539145,.0728109,1.16839,.987631,-.0262947,.0360625,1.19004,.999978,.00132758,-559424e-9,1.21058,.193925,-793421e-11,.391974,392537e-11,.196746,-200315e-9,.397675,991033e-10,.19667,-801099e-9,.397521,396342e-9,.196633,-.00180246,.397445,891829e-9,.196654,-.00320443,.397482,.00158582,.196659,-.00500647,.39748,.00247867,.196683,-.0072086,.397506,.00357167,.196728,-.00981001,.397562,.00486675,.196792,-.0128096,.397633,.00636707,.19689,-.0162055,.397746,.00807752,.197017,-.0199943,.397884,.0100052,.19729,-.024139,.39827,.0121691,.197583,-.0286671,.398639,.0145755,.197927,-.0335858,.399034,.0172355,.198383,-.0388806,.399554,.0201718,.199002,-.0444736,.400289,.0234194,.199739,-.0504583,.401111,.026984,.200784,-.056729,.402349,.0309217,.202075,-.0633643,.403841,.0352496,.203898,-.0703247,.406076,.0400313,.206199,-.0775565,.408841,.0453282,.209252,-.085184,.41259,.0511794,.213638,-.0931994,.418288,.0577459,.21881,-.101617,.424681,.0650508,.225642,-.11052,.433429,.0732759,.233717,-.119772,.442897,.0824683,.242823,-.129505,.452888,.0927484,.254772,-.139906,.466407,.104417,.266603,-.150402,.477413,.117211,.28073,-.161395,.490519,.131598,.295399,-.172465,.50201,.147407,.312705,-.183982,.515311,.165031,.331335,-.195532,.52786,.184336,.351037,-.206971,.5392,.205361,.372175,-.218117,.54941,.228043,.394548,-.229327,.558642,.25267,.419598,-.240052,.567861,.279071,.443922,-.249937,.573332,.306882,.471495,-.259407,.58013,.33661,.496769,-.267749,.580564,.367328,.524951,-.275524,.581696,.399753,.55318,-.282148,.579885,.433134,.581577,-.287533,.575471,.467534,.609231,-.291612,.567445,.502943,.637478,-.293911,.557657,.53871,.667795,-.295096,.546535,.576568,.694272,-.294073,.529561,.614929,.722937,-.290386,.510561,.655909,.749682,-.284481,.487846,.697663,.774754,-.276188,.462487,.738515,.799301,-.266215,.43481,.779802,.820762,-.254116,.404879,.820045,.843231,-.240393,.374559,.860294,.861857,-.225503,.341582,.900965,.880815,-.209382,.308778,.941727,.89766,-.19155,.275232,.980916,.912926,-.172346,.240938,1.02162,.926391,-.151799,.207223,1.0597,.938429,-.129968,.17484,1.09291,.947834,-.10651,.142984,1.12248,.958432,-.0824098,.109902,1.149,.972402,-.0565242,.0744454,1.1733,.987191,-.028427,.0373794,1.19538,.999975,385685e-10,-4203e-8,1.21676,.178114,-766075e-11,.385418,354027e-11,.176074,-191966e-9,.381002,887135e-10,.17601,-767549e-9,.380861,354715e-9,.17598,-.00172696,.380798,798168e-9,.175994,-.00307012,.380824,.00141928,.176017,-.00479684,.380858,.00221859,.176019,-.00690648,.380839,.00319714,.176072,-.00939888,.380913,.0043572,.176131,-.0122726,.380979,.005702,.176239,-.0155264,.38112,.00723689,.176371,-.0191551,.381272,.00896907,.176638,-.023117,.381669,.0109194,.176912,-.0274633,.382015,.0130903,.177279,-.032173,.382476,.0154949,.17774,-.0372219,.383041,.0181669,.178344,-.0426132,.38378,.0211209,.179153,-.0483309,.384773,.0243899,.180197,-.0543447,.386076,.0280062,.181581,-.0607122,.387809,.032004,.18344,-.0673855,.390205,.036453,.186139,-.0743989,.393944,.0414162,.189432,-.0817731,.39832,.0469394,.193795,-.0895464,.404188,.0531442,.199641,-.0978264,.4121,.0601374,.206679,-.106499,.421425,.0680078,.214865,-.115654,.431504,.076919,.224406,-.125268,.442526,.0868835,.235876,-.135475,.455465,.0981875,.248335,-.146023,.4681,.110759,.262868,-.157016,.482069,.124885,.278962,-.168245,.496182,.140645,.295082,-.17958,.507401,.157838,.313738,-.191227,.520252,.17695,.333573,-.202718,.531708,.197817,.356433,-.214424,.544509,.220785,.378853,-.225492,.55373,.245306,.402717,-.236236,.561348,.271593,.428375,-.246568,.568538,.299776,.454724,-.255941,.573462,.329433,.482291,-.264511,.576356,.360598,.509706,-.272129,.576446,.393204,.538805,-.278979,.575298,.427227,.568919,-.284528,.572154,.462157,.596804,-.288801,.564691,.497997,.625987,-.291334,.555134,.534467,.656414,-.292722,.545051,.571736,.683916,-.292185,.528813,.610158,.711809,-.290043,.51106,.649061,.739547,-.285246,.490103,.690081,.766914,-.277647,.465523,.732554,.791375,-.267603,.437718,.773982,.814772,-.256109,.40882,.81609,.836691,-.242281,.377823,.856849,.856984,-.227155,.34496,.898363,.876332,-.210395,.311335,.939471,.894988,-.192612,.277703,.980799,.911113,-.173236,.243019,1.02215,.924092,-.152258,.209037,1.06139,.936828,-.129575,.175909,1.09635,.946869,-.10594,.143852,1.12707,.958284,-.081318,.110289,1.15419,.972325,-.0556133,.0747232,1.17909,.986878,-.0297899,.0383149,1.20163,.999936,-.00197169,912402e-9,1.22338,.151174,-720365e-11,.351531,309789e-11,.155594,-18279e-8,.361806,78608e-9,.156099,-731569e-9,.362982,314615e-9,.156053,-.00164578,.362869,707845e-9,.156093,-.0029261,.362961,.00125884,.156099,-.00457155,.362959,.00196783,.15612,-.00658224,.362982,.00283622,.156168,-.00895774,.363048,.00386625,.156221,-.0116962,.363101,.00506109,.156324,-.0147973,.363241,.00642675,.156476,-.0182503,.363448,.00797175,.156731,-.0220266,.36384,.00971484,.156994,-.026176,.364179,.0116575,.157341,-.0306701,.36462,.0138207,.157867,-.0354591,.365364,.0162356,.15846,-.0406141,.366111,.0189092,.159308,-.0460519,.367248,.021885,.160426,-.0518096,.368767,.0252004,.161877,-.0578906,.370745,.0288825,.163995,-.0642812,.373831,.0330139,.16655,-.0710067,.377366,.0376283,.170237,-.0781522,.382799,.0428493,.175096,-.0857172,.389915,.0487324,.181069,-.0938025,.398487,.0554214,.188487,-.102363,.408799,.0630189,.197029,-.111343,.419991,.071634,.206684,-.120812,.431455,.0812797,.218698,-.131033,.445746,.0923651,.230726,-.141373,.457471,.104545,.245516,-.152387,.472388,.118449,.261551,-.163628,.486671,.133923,.277437,-.174814,.49762,.150849,.296662,-.186713,.51162,.169924,.31795,-.198513,.525435,.190848,.339422,-.210119,.536267,.213504,.362143,-.221354,.545982,.237947,.387198,-.23224,.555364,.264427,.412349,-.24257,.561489,.292519,.439274,-.252284,.566903,.322561,.466779,-.261023,.569614,.353952,.496011,-.26899,.571589,.387278,.524964,-.275498,.570325,.421356,.556518,-.281449,.568792,.457314,.584363,-.285526,.560268,.493199,.614214,-.28844,.55205,.530276,.645684,-.289777,.541906,.56855,.673446,-.289722,.526464,.606927,.701924,-.287792,.509872,.645945,.73037,-.284315,.490649,.685564,.757405,-.278804,.467964,.726511,.784025,-.269543,.441468,.768601,.808255,-.258117,.41216,.811321,.830739,-.244728,.380606,.853496,.851914,-.229428,.348111,.895374,.872586,-.212508,.314732,.937674,.891581,-.194025,.280338,.979869,.907641,-.174711,.245203,1.02253,.922233,-.153509,.21077,1.06371,.935878,-.130418,.177399,1.09972,.946338,-.105558,.144507,1.13124,.957265,-.080059,.110508,1.15973,.971668,-.0539766,.0742311,1.18515,.9866,-.0277101,.0375224,1.20858,1.00021,-515531e-9,135226e-9,1.23135,.137468,-686011e-11,.345041,273315e-11,.13703,-173378e-9,.343936,690761e-10,.136986,-693048e-9,.34383,276126e-9,.136964,-.00155931,.343761,621337e-9,.137003,-.00277211,.343863,.00110494,.137012,-.00433103,.343868,.00172744,.137043,-.00623606,.343916,.00249022,.13709,-.0084868,.343986,.00339559,.137145,-.0110814,.344045,.00444687,.137242,-.0140187,.344177,.00565007,.137431,-.0172713,.344491,.00701868,.137644,-.0208605,.344805,.00856042,.13791,-.024792,.345172,.0102863,.138295,-.0290461,.345734,.0122185,.138764,-.0335957,.346371,.0143771,.139415,-.038467,.347298,.0167894,.140272,-.0436176,.348527,.0194895,.141457,-.0491016,.350276,.0225043,.14303,-.0548764,.352646,.0258962,.145289,-.0610096,.356206,.0297168,.148502,-.0674777,.361488,.0340562,.152188,-.074345,.367103,.0389534,.157359,-.0817442,.375247,.0445541,.16379,-.0896334,.385064,.0509535,.171376,-.098005,.396082,.0582611,.179901,-.106817,.407418,.06654,.189892,-.116239,.420031,.075994,.201838,-.12627,.434321,.0867239,.214311,-.136701,.447631,.0987517,.228902,-.147616,.462046,.112353,.245107,-.158871,.476942,.127605,.262292,-.170261,.490285,.144469,.281215,-.182017,.503783,.163282,.301058,-.193729,.515505,.183873,.322752,-.205512,.52682,.206466,.347547,-.217214,.539473,.231194,.370969,-.227966,.546625,.257288,.397533,-.238555,.55472,.285789,.42398,-.248278,.559468,.315746,.452928,-.257422,.564095,.347724,.482121,-.265306,.565426,.380922,.510438,-.272043,.563205,.415639,.541188,-.277614,.561087,.451702,.571667,-.281927,.554922,.48845,.602432,-.285015,.546838,.526442,.634126,-.286512,.537415,.564896,.662816,-.286388,.522906,.604037,.692411,-.284734,.507003,.643795,.720946,-.281297,.488398,.68298,.748293,-.276262,.466353,.723466,.776931,-.269978,.443573,.764565,.801065,-.260305,.415279,.805838,.825843,-.247426,.384773,.849985,.84807,-.232437,.352555,.893174,.869122,-.215806,.318642,.936564,.888963,-.197307,.28381,.980253,.905547,-.177203,.247888,1.02463,.918554,-.155542,.212904,1.06714,.931395,-.131948,.1787,1.10451,.941749,-.106723,.145902,1.13694,.954551,-.0804939,.111193,1.1666,.970279,-.0534239,.0744697,1.19249,.986117,-.0257452,.0368788,1.21665,.999938,.00190634,-.0010291,1.23981,.118493,-647439e-11,.32272,23772e-10,.118765,-163023e-9,.323456,598573e-10,.118772,-65212e-8,.323477,239447e-9,.118843,-.00146741,.323657,538881e-9,.118804,-.00260846,.323553,95826e-8,.118826,-.00407576,.323595,.00149845,.118846,-.00586826,.323617,.00216047,.118886,-.00798578,.32367,.00294679,.118947,-.0104273,.323753,.00386124,.119055,-.0131909,.323922,.00490999,.119241,-.0162444,.324251,.00610804,.11944,-.0196339,.324544,.00745805,.119739,-.0233378,.325026,.00897805,.12011,-.0273179,.325586,.0106895,.120571,-.0316143,.326231,.0126073,.12124,-.0361939,.327264,.0147654,.122162,-.0410511,.328733,.0172001,.123378,-.0462233,.330659,.0199375,.125183,-.0517109,.333754,.0230498,.127832,-.0575652,.338507,.026597,.130909,-.0637441,.343666,.0306345,.135221,-.0704302,.351063,.035273,.14082,-.0776364,.360604,.0406137,.146781,-.0852293,.369638,.0466788,.155121,-.0935351,.3827,.0537628,.16398,-.102234,.39522,.0617985,.173926,-.111465,.40793,.07097,.185137,-.121296,.42105,.0813426,.19826,-.13169,.435735,.0931596,.212938,-.142614,.450932,.106547,.229046,-.153884,.465726,.121575,.246246,-.165382,.479461,.138286,.264637,-.176806,.492106,.15666,.284959,-.188793,.504774,.17728,.308157,-.200763,.518805,.19988,.330951,-.21239,.528231,.224293,.3549,-.223521,.536376,.250541,.381502,-.234169,.544846,.278902,.409529,-.244077,.551717,.309227,.437523,-.253363,.55517,.341426,.467624,-.261659,.557772,.37518,.497268,-.268498,.556442,.41007,.528294,-.274018,.553915,.446445,.559053,-.278169,.549153,.483779,.589329,-.281229,.539878,.522249,.622503,-.282902,.53162,.561754,.652382,-.282815,.518119,.601544,.681847,-.281247,.502187,.641574,.712285,-.277986,.484824,.682633,.740094,-.273017,.463483,.723426,.768478,-.266692,.441299,.763747,.794556,-.258358,.415238,.805565,.819408,-.248807,.386912,.847254,.843411,-.236214,.356165,.891091,.862397,-.219794,.320562,.936174,.883113,-.201768,.285322,.982562,.90023,-.181672,.249713,1.02862,.915192,-.159279,.214546,1.07163,.928458,-.134725,.180285,1.10995,.94069,-.10913,.147119,1.14354,.953409,-.0821315,.112492,1.17372,.969537,-.0542677,.0752014,1.20043,.985612,-.0259096,.0370361,1.22528,.999835,.00298198,-.00151801,1.24959,.10097,-602574e-11,.300277,202619e-11,.101577,-152164e-9,.302077,511662e-10,.101572,-608889e-9,.302066,204751e-9,.101566,-.00136997,.302047,460753e-9,.101592,-.00243557,.302114,819497e-9,.101608,-.0038053,.30214,.00128154,.101627,-.00547906,.30216,.0018483,.101669,-.00745647,.302224,.00252223,.101732,-.00973615,.302318,.00330716,.101844,-.0123097,.302513,.00421061,.102025,-.0151681,.30285,.00524481,.102224,-.0183334,.303166,.0064154,.102515,-.0217819,.303654,.00774063,.102886,-.0255067,.304243,.0092398,.103395,-.029514,.305089,.0109339,.104109,-.0337912,.306301,.0128561,.105074,-.0383565,.30798,.0150338,.10654,-.0432132,.310726,.0175228,.108478,-.0484244,.314351,.0203648,.111015,-.0539339,.319032,.0236325,.114682,-.0598885,.32605,.0274188,.11911,-.0663375,.334109,.0317905,.124736,-.0733011,.344013,.0368502,.131479,-.0807744,.355358,.0427104,.139283,-.0888204,.367614,.0494788,.148054,-.0973394,.380072,.0572367,.159037,-.10665,.395678,.0662704,.169794,-.116221,.40795,.0763192,.18314,-.126632,.423546,.087956,.197515,-.137383,.438213,.101042,.213514,-.148641,.453248,.115827,.23065,-.160117,.46688,.132283,.249148,-.171807,.479962,.150644,.270219,-.183695,.494618,.171073,.292338,-.195574,.506937,.193378,.314999,-.207205,.516463,.217585,.340991,-.218955,.528123,.24428,.367982,-.229917,.537025,.272784,.39432,-.239737,.541627,.302742,.423364,-.249048,.546466,.335112,.453751,-.257329,.549466,.369032,.48416,-.264623,.549503,.404577,.515262,-.270411,.547008,.441337,.547036,-.274581,.542249,.479162,.576614,-.277266,.533015,.517904,.611143,-.279144,.525512,.558508,.640989,-.279001,.51154,.598995,.671182,-.277324,.495641,.639935,.700848,-.273908,.477526,.681017,.729862,-.269063,.457955,.722764,.758273,-.262282,.434846,.764349,.784121,-.254281,.409203,.806206,.809798,-.24505,.382694,.848617,.834953,-.233861,.354034,.892445,.856817,-.221308,.321764,.936263,.877609,-.205996,.288118,.982401,.897489,-.186702,.253277,1.02975,.913792,-.164618,.217963,1.07488,.92785,-.140023,.183221,1.11487,.940378,-.11328,.149385,1.14947,.95273,-.0853958,.114152,1.1807,.969059,-.0568698,.0769845,1.20912,.985574,-.0276502,.0381186,1.23498,.999943,.00239052,-.00126861,1.25987,.0852715,-560067e-11,.279021,171162e-11,.0854143,-140871e-9,.279483,430516e-10,.0854191,-563385e-9,.2795,172184e-9,.0854188,-.00126753,.279493,387464e-9,.0854229,-.00225337,.279501,68918e-8,.0854443,-.00352086,.279549,.00107803,.0854697,-.00506962,.279591,.00155536,.0855093,-.00689873,.279652,.00212354,.0855724,-.00900821,.279752,.00278703,.0856991,-.0113799,.280011,.0035551,.085855,-.0140314,.280297,.00443449,.0860682,-.016963,.280682,.00543636,.086344,-.0201438,.281159,.0065788,.0867426,-.0235999,.281886,.00787977,.087239,-.0273069,.282745,.0093606,.0879815,-.031269,.284139,.011056,.0891258,-.035531,.28647,.0130065,.0906909,-.0400947,.289708,.0152495,.0927624,-.0449638,.293904,.0178454,.0958376,-.0502427,.300471,.0208915,.0995827,-.0559514,.30806,.0244247,.104526,-.0622152,.317874,.0285721,.110532,-.0690046,.329332,.0334227,.117385,-.0763068,.341217,.0390466,.12522,-.084184,.353968,.0455786,.134037,-.0925248,.366797,.0530773,.144014,-.101487,.380209,.0617424,.156013,-.111273,.395956,.071777,.168872,-.121431,.41053,.0830905,.183089,-.132105,.425073,.0959341,.198763,-.143286,.439833,.110448,.216159,-.154841,.454507,.126769,.234859,-.166588,.468368,.14495,.255879,-.178626,.482846,.165233,.27677,-.190218,.493489,.187217,.301184,-.202227,.506549,.211659,.325852,-.213764,.5158,.237922,.352824,-.22487,.525442,.26632,.380882,-.235246,.532487,.296691,.410137,-.244847,.537703,.329179,.439787,-.253122,.540361,.363135,.472291,-.260517,.542734,.399222,.501856,-.266519,.538826,.436352,.534816,-.270905,.535152,.474505,.565069,-.273826,.525979,.513988,.597154,-.275333,.516394,.554852,.630473,-.275314,.506206,.596592,.660574,-.273323,.489769,.638117,.692015,-.270008,.472578,.680457,.720647,-.265001,.452134,.723008,.750528,-.258311,.430344,.765954,.777568,-.250046,.405624,.809012,.80387,-.240114,.378339,.852425,.828439,-.228737,.349877,.895346,.851472,-.216632,.318968,.940695,.873906,-.202782,.287489,.987235,.89467,-.187059,.254394,1.03348,.912281,-.168818,.221294,1.07812,.927358,-.146494,.18675,1.11928,.940385,-.120009,.152322,1.15609,.952672,-.0917183,.117514,1.18875,.968496,-.0620321,.0797405,1.21821,.985236,-.0314945,.0402383,1.24523,.99998,-575153e-9,110644e-9,1.27133,.0702429,-512222e-11,.255273,140947e-11,.0702981,-128826e-9,.255469,354488e-10,.0703691,-515562e-9,.255727,141874e-9,.0703805,-.00116,.255754,31929e-8,.0703961,-.00206224,.255813,567999e-9,.0704102,-.00322223,.255839,88871e-8,.0704298,-.00463928,.255863,.00128272,.0704759,-.00631375,.255953,.00175283,.0705434,-.00824317,.256079,.00230342,.0706693,-.010412,.25636,.0029443,.0708189,-.0128439,.256647,.00368031,.0710364,-.0155177,.257084,.00452614,.0713223,-.0184374,.257637,.00549706,.0717182,-.0216002,.258416,.00661246,.072321,-.0249966,.259699,.00790147,.0731446,-.0286566,.261475,.0093884,.0743352,-.0325888,.264132,.0111186,.0760676,-.036843,.26815,.013145,.078454,-.0414292,.273636,.0155251,.0818618,-.0464634,.281653,.0183525,.0857382,-.0519478,.289992,.0216642,.0908131,-.0579836,.30066,.0255956,.0967512,-.0645124,.312204,.0301954,.103717,-.0716505,.325001,.0356017,.111596,-.0793232,.338129,.041896,.120933,-.087645,.352853,.0492447,.130787,-.096492,.366192,.0576749,.142311,-.105973,.380864,.0673969,.155344,-.116182,.396575,.0785899,.169535,-.126815,.411443,.0912377,.185173,-.138015,.426256,.105607,.201755,-.149325,.439607,.121551,.221334,-.161207,.455467,.139608,.241461,-.173162,.469096,.159591,.26294,-.18504,.481014,.18156,.286776,-.196881,.493291,.205781,.311596,-.208311,.503556,.231819,.338667,-.219671,.513268,.260274,.366021,-.230451,.519414,.290862,.395875,-.240131,.526766,.323196,.425564,-.248566,.52905,.357071,.457094,-.256195,.530796,.393262,.488286,-.262331,.528703,.430797,.522291,-.267141,.52727,.470231,.554172,-.270411,.519848,.510477,.586427,-.271986,.510307,.551594,.619638,-.27192,.499158,.593849,.650656,-.269817,.483852,.636314,.68284,-.266267,.467515,.679679,.714356,-.26113,.44931,.723884,.742717,-.254067,.425789,.767245,.770894,-.245652,.401144,.811819,.797358,-.235554,.374224,.856315,.823377,-.223896,.346167,.901077,.847456,-.210865,.316056,.946502,.870697,-.196574,.284503,.993711,.891068,-.180814,.251628,1.04134,.909267,-.163314,.219065,1.08609,.925653,-.143304,.186446,1.12702,.940017,-.121322,.153416,1.16371,.952398,-.0973872,.120334,1.19712,.967568,-.0698785,.08352,1.22791,.984772,-.0390031,.0439209,1.25672,1.00026,-.0070087,.00315668,1.28428,.0556653,-459654e-11,.227325,112556e-11,.0565238,-116382e-9,.230826,284985e-10,.0565717,-465666e-9,.231026,114036e-9,.0565859,-.00104773,.231079,256656e-9,.0565761,-.00186255,.231025,45663e-8,.0565913,-.00291002,.231058,714664e-9,.0566108,-.00418998,.231085,.00103224,.0566532,-.00570206,.231169,.00141202,.0567473,-.00743666,.231417,.00186018,.0568567,-.00940298,.231661,.00238264,.0569859,-.0115991,.231895,.00298699,.0572221,-.0140096,.232456,.00368957,.057519,-.0166508,.233096,.00450303,.0579534,-.01951,.234094,.00544945,.0585922,-.0225991,.235629,.00655564,.0595647,-.0259416,.238106,.00785724,.0609109,-.0295661,.241557,.00939127,.0628751,-.0335126,.246652,.0112198,.0656908,-.0378604,.254091,.0134168,.0691347,-.0426543,.262666,.0160374,.0732165,-.0478967,.272029,.0191514,.0782863,-.0536716,.283007,.0228597,.0843973,-.0600683,.295732,.0272829,.0913598,-.0670095,.308779,.032484,.0994407,-.0745516,.322886,.0385886,.108189,-.082712,.336408,.0457133,.118574,-.0914927,.351692,.0539832,.129989,-.100854,.366502,.0635162,.142722,-.110837,.381675,.0744386,.156654,-.121353,.3963,.0868483,.172151,-.132414,.411477,.100963,.188712,-.143809,.42508,.116795,.208093,-.155765,.441328,.134715,.227936,-.167608,.454328,.154396,.249495,-.179579,.467235,.176179,.27362,-.191488,.480248,.200193,.296371,-.202618,.487886,.225775,.324234,-.214133,.499632,.25441,.353049,-.225212,.509532,.285077,.381785,-.234875,.514265,.317047,.414038,-.244205,.521282,.351874,.445251,-.252145,.522931,.388279,.476819,-.258433,.520947,.425825,.509209,-.263411,.517669,.465104,.542759,-.266732,.512841,.505741,.574822,-.268263,.503317,.547611,.609324,-.268489,.493035,.590953,.641772,-.266941,.478816,.63488,.674049,-.263297,.462863,.679072,.705071,-.257618,.442931,.723487,.734709,-.250625,.421299,.768708,.763704,-.24179,.397085,.814375,.791818,-.231115,.370577,.859907,.817439,-.21922,.34232,.906715,.843202,-.205658,.312627,.953943,.866639,-.190563,.280933,1.00185,.888129,-.173978,.248393,1.05105,.907239,-.155485,.216007,1.09704,.923893,-.134782,.183233,1.13857,.938882,-.11249,.150376,1.17539,.952464,-.0890706,.117177,1.20924,.968529,-.0646523,.0813095,1.24055,.984763,-.038606,.0439378,1.27018,1.00053,-.01238,.00598668,1.29873,.0437928,-409594e-11,.204012,8.79224e-7,.0440166,-103395e-9,.205049,221946e-10,.0440529,-413633e-9,.205225,887981e-10,.0440493,-930594e-9,.2052,199858e-9,.0439884,-.00165352,.204901,355495e-9,.0440716,-.0025849,.205255,556983e-9,.0440968,-.00372222,.205311,805326e-9,.0441359,-.00506478,.205391,.00110333,.0442231,-.00660384,.205638,.00145768,.0443254,-.00835246,.205877,.00187275,.0444832,-.0102992,.20627,.00235938,.0447001,-.0124449,.206796,.0029299,.0450168,-.0147935,.207593,.0036005,.0454816,-.017336,.208819,.00439246,.0462446,-.0201156,.211036,.00533864,.0473694,-.0231568,.214388,.00646984,.0490191,-.0264941,.219357,.00783856,.0512776,-.030184,.226061,.00950182,.0541279,-.0342661,.234094,.0115156,.0578989,-.0388539,.244297,.0139687,.0620835,-.0438735,.254457,.0169015,.0673497,-.04951,.266706,.0204554,.0731759,-.0556263,.278753,.0246606,.0803937,-.0624585,.29309,.0297126,.0879287,-.0697556,.305856,.0355868,.0970669,-.0778795,.321059,.0425768,.106508,-.0863541,.333873,.05056,.11776,-.0955935,.349008,.0598972,.130081,-.105438,.363776,.0706314,.144454,-.115899,.380112,.0828822,.1596,-.126827,.394843,.0967611,.176097,-.138161,.409033,.112381,.194726,-.149904,.424257,.129952,.213944,-.161675,.436945,.149333,.235516,-.173659,.450176,.170892,.260564,-.185963,.466305,.194984,.285183,-.197582,.477328,.220805,.311095,-.208697,.486566,.248694,.338924,-.219519,.494811,.279015,.369757,-.229766,.504065,.311725,.3996,-.238879,.507909,.345844,.430484,-.246802,.509805,.381749,.46413,-.253924,.511436,.420251,.497077,-.259319,.508787,.459957,.530434,-.263297,.50394,.501356,.565725,-.265619,.49804,.544252,.599254,-.265842,.487346,.587856,.631251,-.263978,.472975,.631969,.663972,-.26043,.457135,.677471,.697724,-.255358,.439844,.723744,.727725,-.248308,.417872,.770653,.756417,-.239181,.39273,.817357,.785419,-.22814,.367839,.864221,.81266,-.215681,.339449,.912701,.839391,-.201623,.309279,.962419,.86366,-.185624,.278029,1.0122,.885028,-.16797,.245294,1.06186,.904639,-.148336,.212689,1.10934,.922048,-.12637,.179616,1.15063,.936952,-.102928,.146749,1.18885,.951895,-.0785268,.112733,1.22352,.967198,-.0530153,.0760056,1.25681,.984405,-.02649,.0383183,1.28762,1.00021,70019e-8,-20039e-8,1.31656,.0325964,-355447e-11,.176706,6.55682e-7,.0329333,-899174e-10,.178527,165869e-10,.0329181,-359637e-9,.178453,663498e-10,.0329085,-808991e-9,.178383,149332e-9,.0329181,-.00143826,.178394,265873e-9,.0329425,-.00224678,.178517,416597e-9,.0329511,-.00323575,.17849,603299e-9,.033011,-.00439875,.178695,829422e-9,.0330733,-.00574059,.178843,.00109908,.0331857,-.00725896,.179176,.00141933,.0333445,-.00895289,.179618,.0017999,.0335674,-.0108219,.180238,.00225316,.033939,-.0128687,.181417,.00279765,.0345239,-.015114,.183395,.0034564,.0354458,-.017596,.186616,.00425864,.0368313,-.0203524,.191547,.00524936,.0386115,-.0234105,.197508,.00647033,.0410303,-.0268509,.205395,.00798121,.0442245,-.0307481,.215365,.0098557,.0478659,-.0350863,.225595,.0121417,.0522416,-.0399506,.236946,.0149385,.0574513,-.045357,.249442,.0183189,.0631208,-.0512863,.261222,.0223644,.0701124,-.0579273,.275418,.0272418,.0777331,-.0650652,.288989,.0329458,.0862709,-.0728813,.302546,.0396819,.096103,-.081363,.317164,.04757,.106976,-.0904463,.331733,.0567012,.119175,-.100105,.34661,.067202,.132919,-.110375,.362249,.0792588,.147727,-.121115,.376978,.0928672,.163618,-.132299,.390681,.108228,.182234,-.143887,.406571,.125502,.201809,-.155827,.42042,.144836,.225041,-.168357,.438411,.166706,.247621,-.18004,.450368,.189909,.27097,-.191536,.460083,.215251,.296658,-.203024,.469765,.243164,.325892,-.214056,.481837,.273388,.35406,-.224104,.487474,.305344,.384372,-.233489,.492773,.339741,.41749,-.241874,.498451,.376287,.45013,-.248834,.499632,.414195,.481285,-.254658,.495233,.454077,.519183,-.259367,.496401,.496352,.551544,-.261818,.487686,.538798,.587349,-.262964,.479453,.583626,.621679,-.262128,.467709,.629451,.654991,-.258998,.452123,.67566,.686873,-.254119,.433495,.723248,.719801,-.246946,.413657,.771156,.750355,-.237709,.390366,.81989,.780033,-.226549,.364947,.868601,.809254,-.214186,.337256,.920034,.836576,-.199639,.307395,.971706,.861774,-.183169,.275431,1.02479,.885707,-.165111,.243431,1.07837,.904742,-.144363,.210921,1.12783,.915604,-.121305,.17647,1.17254,.930959,-.0962119,.143106,1.21012,.948404,-.069969,.108112,1.24474,.967012,-.0427586,.0708478,1.27718,.984183,-.0147043,.032335,1.3083,.999577,.0142165,-.00726867,1.3382,.0229227,-299799e-11,.148623,4.62391e-7,.0232194,-758796e-10,.15054,117033e-10,.0232315,-303636e-9,.15063,468397e-10,.0232354,-683189e-9,.150624,105472e-9,.0232092,-.0012136,.150445,187744e-9,.0232523,-.00189765,.150679,294847e-9,.0232828,-.00273247,.150789,428013e-9,.0233371,-.00371287,.150995,591134e-9,.0234015,-.00484794,.15118,787642e-9,.023514,-.00612877,.151562,.00102547,.023679,-.00756125,.152116,.00131351,.0239559,-.00914651,.153162,.00166594,.0244334,-.010904,.155133,.00210182,.025139,-.0128615,.158035,.00264406,.0262598,-.0150628,.162751,.00332923,.0277875,-.0175532,.168944,.00419773,.0298472,-.0203981,.176835,.00530034,.0325444,-.023655,.186686,.00669777,.0355581,-.0272982,.196248,.00842661,.0392841,-.0314457,.207352,.0105854,.0436815,-.0361157,.219279,.0132458,.0485272,-.0412932,.230728,.0164736,.0541574,-.0470337,.242994,.0203715,.0609479,-.0535002,.257042,.0250953,.0685228,-.0605409,.27102,.0306856,.0768042,-.0680553,.28406,.037193,.0864844,-.0765011,.299186,.0449795,.0969415,-.0852674,.3132,.0538316,.108478,-.0947333,.327138,.0641149,.121705,-.10481,.342345,.0759185,.136743,-.115474,.358472,.0894116,.152986,-.126536,.374067,.104562,.170397,-.138061,.388267,.121632,.191392,-.150203,.406467,.140996,.211566,-.161751,.418641,.161696,.233567,-.173407,.430418,.184557,.257769,-.185397,.44277,.210092,.28531,-.197048,.457191,.237827,.311726,-.20784,.464712,.267253,.340537,-.218345,.472539,.299332,.372921,-.228306,.482331,.333988,.402924,-.236665,.484378,.369722,.434475,-.244097,.484717,.407836,.469736,-.250547,.487093,.448465,.505045,-.25511,.485575,.490263,.540262,-.258444,.481225,.534495,.576347,-.259903,.473481,.579451,.608656,-.259572,.4603,.625604,.646679,-.257908,.450341,.674511,.679902,-.253663,.431561,.723269,.714159,-.247419,.412684,.773263,.745345,-.239122,.389388,.824182,.778248,-.228837,.365361,.876634,.807208,-.216197,.337667,.92945,.835019,-.201772,.307197,.985261,.860261,-.185291,.274205,1.04299,.877601,-.165809,.240178,1.09816,.898211,-.143897,.207571,1.14694,.915789,-.119513,.174904,1.19008,.931831,-.0932919,.141423,1.2297,.949244,-.0656528,.105603,1.26553,.967527,-.0370262,.0679551,1.29986,.984139,-.00730117,.0283133,1.33252,.999713,.0234648,-.0121785,1.36397,.0152135,-245447e-11,.122795,3.04092e-7,.0151652,-615778e-10,.122399,76292e-10,.0151181,-245948e-9,.122023,304802e-10,.0151203,-553394e-9,.12203,686634e-10,.015125,-983841e-9,.122037,122463e-9,.0151427,-.00153774,.12214,192706e-9,.0151708,-.0022103,.122237,281219e-9,.0152115,-.00300741,.12238,390804e-9,.0152877,-.00392494,.1227,526317e-9,.015412,-.00496597,.123244,69443e-8,.0156201,-.00613314,.124228,90547e-8,.0159658,-.00744113,.125945,.0011732,.0165674,-.00892546,.129098,.00151888,.017487,-.010627,.133865,.00197007,.018839,-.0126043,.140682,.0025637,.020554,-.0148814,.148534,.00333637,.0226727,-.0175123,.157381,.00433738,.0251879,-.0205266,.166685,.00561664,.0283635,-.0240319,.177796,.00725563,.0318694,-.0279432,.188251,.00928811,.0361044,-.0324313,.200038,.011835,.0406656,-.0373527,.210685,.0149146,.0463846,-.0430132,.224182,.0187254,.0525696,-.0491013,.23634,.0232283,.0598083,-.0559175,.250013,.0286521,.0679437,-.0633657,.263981,.0350634,.0771181,-.0714602,.278072,.0425882,.0881273,-.0803502,.29511,.0514487,.0996628,-.0896903,.309976,.0615766,.112702,-.099644,.325611,.0732139,.126488,-.109829,.339321,.0862324,.142625,-.120859,.35574,.101275,.15953,-.131956,.369845,.117892,.176991,-.143145,.38146,.136205,.199715,-.155292,.40052,.157252,.220787,-.167066,.412055,.179966,.243697,-.178396,.423133,.204418,.272106,-.190433,.439524,.232141,.297637,-.201265,.447041,.261109,.325273,-.211834,.454488,.292627,.357219,-.221889,.465004,.326669,.387362,-.230729,.468527,.362426,.423131,-.23924,.475836,.401533,.45543,-.246067,.475017,.441902,.493393,-.251557,.478017,.484239,.526253,-.255571,.4709,.528586,.560554,-.257752,.463167,.574346,.599306,-.258076,.456452,.621655,.634541,-.256471,.443725,.670492,.668907,-.253283,.428719,.721943,.705619,-.247562,.411348,.772477,.739034,-.240626,.388939,.8264,.771408,-.231493,.36425,.881702,.803312,-.220125,.337321,.9385,.828457,-.206645,.305364,.997437,.854819,-.190664,.273715,1.05693,.878666,-.171429,.242218,1.11251,.898404,-.149235,.209556,1.16398,.917416,-.12435,.176863,1.21014,.933133,-.0972703,.142775,1.25178,.95066,-.0683607,.106735,1.29028,.968589,-.0378724,.0681609,1.32703,.984776,-.00605712,.0273966,1.36158,.99994,.0263276,-.0138124,1.3943,.00867437,-186005e-11,.0928979,1.73682e-7,.00864003,-466389e-10,.0925237,435505e-11,.00864593,-186594e-9,.0925806,174322e-10,.00864095,-419639e-9,.0924903,392862e-10,.00863851,-746272e-9,.0924589,702598e-10,.00868531,-.00116456,.0929,111188e-9,.00869667,-.00167711,.0928529,163867e-9,.00874332,-.00228051,.0930914,23104e-8,.00882709,-.00297864,.0935679,31741e-8,.00898874,-.00377557,.0946165,430186e-9,.00929346,-.00469247,.0967406,580383e-9,.00978271,-.00575491,.100084,783529e-9,.0105746,-.00701514,.105447,.00106304,.0116949,-.00851797,.112494,.00144685,.0130419,-.0102757,.119876,.00196439,.0148375,-.012381,.129034,.00266433,.0168725,-.01482,.137812,.00358364,.0193689,-.0176563,.147696,.00478132,.0222691,-.0209211,.157795,.00631721,.0256891,-.0246655,.168431,.00826346,.0294686,-.0288597,.178587,.0106714,.0340412,-.0336441,.190251,.0136629,.0393918,-.039033,.202999,.0173272,.0453947,-.0450087,.215655,.0217448,.0521936,-.0515461,.228686,.0269941,.0600279,-.058817,.242838,.033272,.0692398,-.0667228,.258145,.0406457,.0793832,-.0752401,.273565,.0492239,.0902297,-.0841851,.287735,.0590105,.102014,-.0936479,.301161,.0702021,.116054,-.103967,.317438,.0832001,.13191,-.114622,.334166,.0977951,.148239,-.125452,.348192,.113985,.165809,-.136453,.361094,.131928,.184616,-.147648,.373534,.151811,.207491,-.159607,.39101,.174476,.230106,-.171119,.402504,.198798,.257036,-.182906,.418032,.225796,.281172,-.193605,.425468,.254027,.312034,-.204771,.440379,.285713,.340402,-.214988,.445406,.319196,.370231,-.224711,.44968,.35537,.407105,-.233516,.460747,.393838,.439037,-.240801,.460624,.433747,.47781,-.24762,.465957,.477234,.510655,-.251823,.460054,.52044,.550584,-.255552,.459172,.567853,.585872,-.257036,.450311,.615943,.620466,-.257535,.437763,.667693,.660496,-.255248,.426639,.718988,.695578,-.251141,.409185,.772503,.732176,-.244718,.39015,.827023,.760782,-.236782,.362594,.885651,.79422,-.225923,.33711,.943756,.824521,-.213855,.308272,1.00874,.854964,-.197723,.278529,1.06764,.878065,-.179209,.246208,1.12836,.899834,-.157569,.21329,1.18318,.918815,-.133206,.181038,1.23161,.934934,-.106545,.146993,1.27644,.952115,-.0780574,.111175,1.31842,.96906,-.0478279,.0728553,1.35839,.985178,-.0160014,.032579,1.39697,1.00039,.0173126,-.0095256,1.43312,.00384146,-124311e-11,.0613583,7.78271e-8,.00390023,-314043e-10,.0622919,196626e-11,.00389971,-125622e-9,.0622632,787379e-11,.00389491,-282352e-9,.0620659,1778e-8,.00391618,-502512e-9,.0624687,320918e-10,.00392662,-784458e-9,.0625113,515573e-10,.00396053,-.00112907,.0628175,778668e-10,.00401911,-.00153821,.0633286,113811e-9,.00414994,-.0020208,.0646443,16445e-8,.00441223,-.00260007,.0673886,237734e-9,.00484427,-.0033097,.0716528,345929e-9,.00549109,-.00418966,.0774998,505987e-9,.00636293,-.00527331,.0844758,739208e-9,.00746566,-.00660428,.0921325,.00107347,.00876625,-.00818826,.0997067,.00153691,.0103125,-.0100811,.107433,.00217153,.0123309,-.0123643,.117088,.00303427,.0146274,-.0150007,.126438,.00416018,.0172295,-.0180531,.135672,.00561513,.0204248,-.0215962,.146244,.007478,.0241597,-.0256234,.157481,.00981046,.0284693,-.0302209,.169125,.0127148,.033445,-.0353333,.181659,.0162453,.0391251,-.0410845,.1944,.0205417,.0454721,-.0473451,.207082,.0256333,.0530983,-.0542858,.221656,.0317036,.0615356,-.0618384,.236036,.0388319,.0703363,-.0697631,.248398,.046974,.0810391,-.0784757,.263611,.0565246,.0920144,-.0873488,.275857,.0671724,.105584,-.0973652,.292555,.0798105,.119506,-.107271,.306333,.0935945,.134434,-.117608,.318888,.109106,.153399,-.128938,.337552,.127074,.171258,-.139944,.349955,.14643,.191059,-.151288,.361545,.168,.215069,-.163018,.378421,.192082,.237838,-.174226,.38879,.217838,.266965,-.186063,.405857,.246931,.292827,-.196909,.414146,.277505,.324352,-.207473,.426955,.310711,.354427,-.217713,.433429,.346794,.389854,-.227183,.443966,.385237,.420749,-.235131,.44471,.424955,.459597,-.242786,.451729,.468446,.495316,-.248767,.45072,.513422,.534903,-.253351,.450924,.560618,.572369,-.256277,.445266,.609677,.612383,-.2576,.438798,.660995,.644037,-.256931,.421693,.713807,.686749,-.254036,.4109,.767616,.719814,-.249785,.390151,.82533,.754719,-.244283,.367847,.888311,.792022,-.235076,.345013,.948177,.822404,-.225061,.316193,1.01661,.853084,-.211113,.287013,1.08075,.879871,-.19449,.255424,1.14501,.901655,-.174023,.222879,1.20203,.919957,-.1509,.18989,1.25698,.938412,-.124923,.15606,1.30588,.953471,-.0968139,.120512,1.3529,.970451,-.066734,.0828515,1.3986,.985522,-.034734,.0424458,1.44148,1.00099,-.00102222,678929e-9,1.48398,965494e-9,-6.27338e-7,.0306409,1.97672e-8,99168e-8,-158573e-10,.0314638,4.99803e-7,991068e-9,-634012e-10,.031363,200682e-11,974567e-9,-14144e-8,.03036,457312e-11,998079e-9,-252812e-9,.031496,860131e-11,.00102243,-396506e-9,.0319955,148288e-10,.00107877,-577593e-9,.0331376,249141e-10,.00121622,-816816e-9,.0359396,423011e-10,.0014455,-.00113761,.0399652,724613e-10,.00178791,-.00156959,.0450556,123929e-9,.00225668,-.00214064,.0508025,208531e-9,.00285627,-.00287655,.0568443,341969e-9,.0035991,-.00380271,.0630892,544158e-9,.00455524,-.00496264,.0702204,842423e-9,.00569143,-.0063793,.0773426,.00126704,.00716928,-.00813531,.0860839,.00186642,.00885307,-.0101946,.0944079,.00267014,.0109316,-.0126386,.103951,.00374033,.0133704,-.0154876,.113786,.0051304,.0161525,-.0187317,.123477,.00688858,.0194267,-.0224652,.133986,.00910557,.0230967,-.0265976,.143979,.0118074,.0273627,-.0312848,.154645,.0151266,.0323898,-.0365949,.166765,.0191791,.0379225,-.0422914,.177932,.0239236,.0447501,-.0487469,.19167,.0296568,.0519391,-.0556398,.203224,.0362924,.0599464,-.0631646,.215652,.0440585,.0702427,-.0714308,.232089,.0531619,.0806902,-.0800605,.245258,.0634564,.0923194,-.0892815,.258609,.0752481,.106938,-.09931,.276654,.0888914,.121238,-.109575,.289847,.104055,.138817,-.120461,.307566,.121266,.15595,-.131209,.320117,.139944,.178418,-.143049,.339677,.161591,.197875,-.154074,.349886,.184303,.224368,-.166307,.369352,.210669,.252213,-.178051,.386242,.238895,.277321,-.189335,.395294,.269182,.310332,-.200683,.412148,.302508,.338809,-.210856,.418266,.337264,.372678,-.220655,.428723,.374881,.405632,-.230053,.433887,.415656,.442293,-.237993,.439911,.457982,.477256,-.244897,.440175,.502831,.515592,-.250657,.441079,.550277,.550969,-.255459,.435219,.601102,.592883,-.257696,.432882,.651785,.629092,-.259894,.421054,.708961,.672033,-.258592,.41177,.763806,.709147,-.256525,.395267,.824249,.745367,-.254677,.375013,.8951,.784715,-.247892,.353906,.959317,.818107,-.240162,.327801,1.03153,.847895,-.229741,.298821,1.10601,.879603,-.213084,.269115,1.164,.902605,-.195242,.236606,1.22854,.922788,-.174505,.203442,1.29017,.944831,-.150169,.169594,1.34157,.959656,-.124099,.135909,1.3956,.972399,-.0960626,.0990563,1.45128,.986549,-.0657097,.0602348,1.50312,1.00013,-.0333558,.0186694,1.55364,619747e-11,-1e-7,.00778326,796756e-16,2.37499e-8,-9.99999e-8,282592e-10,1.14596e-10,100292e-11,-166369e-11,250354e-9,6.77492e-9,350752e-11,-637769e-11,357289e-9,6.31655e-8,826445e-11,-174689e-10,516179e-9,3.1851e-7,242481e-10,-450868e-10,.0010223,130577e-11,455631e-10,-89044e-9,.00144302,374587e-11,971222e-10,-178311e-9,.00241912,102584e-10,171403e-9,-313976e-9,.00354938,236481e-10,292747e-9,-520026e-9,.00513765,496014e-10,789827e-9,-.00118187,.0238621,139056e-9,.00114093,-.00171827,.0286691,244093e-9,.00176119,-.00249667,.0368565,420623e-9,.0022233,-.00333742,.0400469,65673e-8,.00343382,-.00481976,.0535751,.00109323,.00427602,-.00600755,.057099,.00155268,.00461435,-.00737637,.0551084,.00215031,.00695698,-.00971401,.0715767,.00316529,.00867619,-.0120943,.0793314,.00436995,.0106694,-.0148202,.0869391,.0058959,.0140351,-.0183501,.101572,.00798757,.0168939,-.022006,.11018,.0104233,.020197,-.0261568,.119041,.0134167,.0254702,-.0312778,.135404,.0173009,.0298384,-.0362469,.1437,.0215428,.035159,-.042237,.15512,.0268882,.0427685,-.0488711,.17128,.033235,.0494848,-.0557997,.181813,.0404443,.0592394,-.0635578,.198745,.0490043,.0681463,-.071838,.210497,.0588239,.0804753,-.0809297,.228864,.0702835,.0942205,-.0906488,.247008,.0834012,.106777,-.100216,.258812,.0975952,.124471,-.110827,.278617,.114162,.138389,-.121193,.287049,.131983,.159543,-.13253,.307151,.152541,.176432,-.143611,.31564,.174673,.201723,-.15548,.33538,.199842,.229721,-.167166,.355256,.227097,.250206,-.178238,.360047,.256014,.282118,-.189905,.378761,.28855,.312821,-.201033,.39181,.323348,.341482,-.211584,.397716,.360564,.377368,-.221314,.410141,.400004,.418229,-.230474,.423485,.442371,.444881,-.239443,.418874,.488796,.488899,-.245987,.427545,.535012,.520317,-.253948,.422147,.589678,.568566,-.256616,.42719,.637683,.599607,-.26376,.415114,.703363,.64222,-.268687,.408715,.771363,.685698,-.2694,.399722,.83574,.732327,-.266642,.388651,.897764,.769873,-.267712,.369198,.983312,.806733,-.263479,.346802,1.06222,.843466,-.254575,.321368,1.13477,.873008,-.242749,.29211,1.20712,.908438,-.22725,.262143,1.27465,.936321,-.207621,.228876,1.33203,.950353,-.187932,.19484,1.40439,.96442,-.165154,.163178,1.4732,.979856,-.139302,.127531,1.53574,.982561,-.11134,.0903457,1.59982,.996389,-.0808124,.0489007,1.6577],e=[1,0,0,0,1,791421e-36,0,0,1,104392e-29,0,0,1,349405e-26,0,0,1,109923e-23,0,0,1,947414e-22,0,0,1,359627e-20,0,0,1,772053e-19,0,0,1,108799e-17,0,0,1,110655e-16,0,0,1,865818e-16,0,0,.999998,5.45037e-10,0,0,.999994,2.85095e-9,0,0,.999989,1.26931e-8,0,0,.999973,4.89938e-8,0,0,.999947,1.66347e-7,0,0,.999894,5.02694e-7,0,0,.999798,136532e-11,0,0,.999617,335898e-11,0,0,.999234,752126e-11,0,0,.998258,152586e-10,0,0,.99504,266207e-10,0,0,.980816,236802e-10,0,0,.967553,207684e-11,0,0,.966877,403733e-11,0,0,.965752,741174e-11,0,0,.96382,127746e-10,0,0,.960306,202792e-10,0,0,.953619,280232e-10,0,0,.941103,278816e-10,0,0,.926619,160221e-10,0,0,.920983,235164e-10,0,0,.912293,311924e-10,0,.0158731,.899277,348118e-10,0,.0476191,.880884,26041e-9,0,.0793651,.870399,338726e-10,0,.111111,.856138,392906e-10,0,.142857,.837436,372874e-10,0,.174603,.820973,392558e-10,0,.206349,.803583,434658e-10,0,.238095,.782168,40256e-9,0,.269841,.764107,448159e-10,0,.301587,.743092,457627e-10,0,.333333,.721626,455314e-10,0,.365079,.700375,477335e-10,0,.396825,.677334,461072e-10,0,.428571,.655702,484393e-10,0,.460317,.632059,464583e-10,0,.492064,.610125,483923e-10,0,.52381,.58653,464342e-10,0,.555556,.564508,477033e-10,0,.587302,.541405,459263e-10,0,.619048,.519556,46412e-9,0,.650794,.497292,448913e-10,0,.68254,.475898,445789e-10,0,.714286,.454722,433496e-10,0,.746032,.434042,423054e-10,0,.777778,.414126,413737e-10,0,.809524,.394387,397265e-10,0,.84127,.375841,390709e-10,0,.873016,.357219,369938e-10,0,.904762,.340084,365618e-10,0,.936508,.322714,342533e-10,0,.968254,.306974,339596e-10,0,1,1,101524e-23,0,0,1,10292e-22,0,0,1,130908e-23,0,0,1,473331e-23,0,0,1,625319e-22,0,0,1,107932e-20,0,0,1,163779e-19,0,0,1,203198e-18,0,0,1,204717e-17,0,0,.999999,168995e-16,0,0,.999998,1.15855e-10,0,0,.999996,6.6947e-10,0,0,.999991,3.30863e-9,0,0,.999983,1.41737e-8,0,0,.999968,5.32626e-8,0,0,.99994,1.77431e-7,0,0,.999891,5.28835e-7,0,0,.999797,142169e-11,0,0,.999617,347057e-11,0,0,.999227,77231e-10,0,0,.998239,155753e-10,0,0,.994937,268495e-10,0,0,.980225,213742e-10,0,0,.967549,21631e-10,0,0,.966865,417989e-11,0,0,.965739,763341e-11,0,0,.963794,130892e-10,0,0,.960244,206456e-10,0,0,.953495,282016e-10,0,148105e-9,.940876,271581e-10,0,.002454,.926569,164159e-10,0,.00867491,.920905,239521e-10,0,.01956,.912169,315127e-10,0,.035433,.899095,346626e-10,0,.056294,.882209,290223e-10,0,.0818191,.870272,342992e-10,0,.111259,.855977,394164e-10,0,.142857,.837431,372343e-10,0,.174603,.820826,396691e-10,0,.206349,.803408,435395e-10,0,.238095,.782838,419579e-10,0,.269841,.763941,450953e-10,0,.301587,.742904,455847e-10,0,.333333,.721463,458833e-10,0,.365079,.700197,477159e-10,0,.396825,.677501,470641e-10,0,.428571,.655527,484732e-10,0,.460317,.6324,476834e-10,0,.492064,.609964,484213e-10,0,.52381,.586839,475541e-10,0,.555556,.564353,476951e-10,0,.587302,.541589,467611e-10,0,.619048,.519413,463493e-10,0,.650794,.497337,453994e-10,0,.68254,.475797,445308e-10,0,.714286,.454659,435787e-10,0,.746032,.434065,424839e-10,0,.777778,.414018,41436e-9,0,.809524,.39455,401902e-10,0,.84127,.375742,390813e-10,0,.873016,.357501,377116e-10,0,.904762,.339996,36535e-9,0,.936508,.323069,351265e-10,0,.968254,.306897,339112e-10,0,1,1,10396e-19,0,0,1,104326e-20,0,0,1,110153e-20,0,0,1,144668e-20,0,0,1,34528e-19,0,0,1,175958e-19,0,0,1,12627e-17,0,0,1,936074e-18,0,0,1,645742e-17,0,0,.999998,401228e-16,0,0,.999997,2.22338e-10,0,0,.999995,1.0967e-9,0,0,.999991,4.82132e-9,0,0,.999981,1.89434e-8,0,0,.999967,6.67716e-8,0,0,.999938,2.12066e-7,0,0,.999886,6.0977e-7,0,0,.999792,159504e-11,0,0,.999608,381191e-11,0,0,.999209,833727e-11,0,0,.998179,165288e-10,0,0,.994605,274387e-10,0,0,.979468,167316e-10,0,0,.967529,242877e-11,0,0,.966836,461696e-11,0,0,.96569,830977e-11,0,0,.963706,140427e-10,0,244659e-11,.960063,217353e-10,0,760774e-9,.953113,286606e-10,0,.00367261,.940192,247691e-10,0,.00940263,.927731,195814e-10,0,.018333,.920669,252531e-10,0,.0306825,.911799,324277e-10,0,.0465556,.89857,340982e-10,0,.0659521,.883283,319622e-10,0,.0887677,.86989,35548e-9,0,.114784,.855483,397143e-10,0,.143618,.837987,391665e-10,0,.174606,.820546,411306e-10,0,.206349,.802878,436753e-10,0,.238095,.783402,444e-7,0,.269841,.763439,458726e-10,0,.301587,.742925,467097e-10,0,.333333,.721633,478887e-10,0,.365079,.69985,481251e-10,0,.396825,.67783,491811e-10,0,.428571,.655126,488199e-10,0,.460318,.632697,496025e-10,0,.492064,.609613,48829e-9,0,.52381,.587098,492754e-10,0,.555556,.564119,482625e-10,0,.587302,.541813,482807e-10,0,.619048,.519342,471552e-10,0,.650794,.497514,466765e-10,0,.68254,.475879,455582e-10,0,.714286,.454789,446007e-10,0,.746032,.434217,435382e-10,0,.777778,.414086,421753e-10,0,.809524,.394744,412093e-10,0,.84127,.375782,396634e-10,0,.873016,.357707,386419e-10,0,.904762,.340038,370345e-10,0,.936508,.323284,359725e-10,0,.968254,.306954,3436e-8,0,1,1,599567e-19,0,0,1,600497e-19,0,0,1,614839e-19,0,0,1,686641e-19,0,0,1,972658e-19,0,0,1,221271e-18,0,0,1,833195e-18,0,0,1,403601e-17,0,0,.999999,206001e-16,0,0,.999998,1.01739e-10,0,0,.999997,4.70132e-10,0,0,.999993,2.00436e-9,0,0,.999988,7.83682e-9,0,0,.999979,2.80338e-8,0,0,.999962,9.17033e-8,0,0,.999933,2.74514e-7,0,0,.999881,7.53201e-7,0,0,.999783,189826e-11,0,0,.999594,440279e-11,0,0,.999178,93898e-10,0,0,.998073,181265e-10,0,0,.993993,280487e-10,0,0,.979982,149422e-10,0,0,.968145,378481e-11,0,0,.966786,53771e-10,0,0,.965611,947508e-11,0,388934e-10,.963557,156616e-10,0,9693e-7,.959752,235144e-10,0,.00370329,.952461,291568e-10,0,.00868428,.940193,240102e-10,0,.0161889,.929042,231235e-10,0,.0263948,.920266,273968e-10,0,.0394088,.911178,337915e-10,0,.0552818,.897873,333629e-10,0,.0740138,.884053,351405e-10,0,.0955539,.869455,378034e-10,0,.119795,.854655,399378e-10,0,.14656,.838347,419108e-10,0,.175573,.820693,440831e-10,0,.206388,.802277,445599e-10,0,.238095,.783634,472691e-10,0,.269841,.763159,476984e-10,0,.301587,.742914,491487e-10,0,.333333,.721662,502312e-10,0,.365079,.699668,502817e-10,0,.396825,.677839,51406e-9,0,.428571,.655091,511095e-10,0,.460317,.632665,516067e-10,0,.492064,.609734,512255e-10,0,.52381,.587043,510263e-10,0,.555556,.564298,50565e-9,0,.587302,.541769,497951e-10,0,.619048,.519529,492698e-10,0,.650794,.497574,482066e-10,0,.68254,.476028,473689e-10,0,.714286,.454961,461941e-10,0,.746032,.434341,450618e-10,0,.777778,.414364,438355e-10,0,.809524,.394832,424196e-10,0,.84127,.376109,412563e-10,0,.873016,.35779,396226e-10,0,.904762,.340379,384886e-10,0,.936508,.323385,368214e-10,0,.968254,.307295,356636e-10,0,1,1,106465e-17,0,0,1,106555e-17,0,0,1,107966e-17,0,0,1,114601e-17,0,0,1,137123e-17,0,0,1,21243e-16,0,0,.999999,489653e-17,0,0,.999999,160283e-16,0,0,.999998,62269e-15,0,0,.999997,2.51859e-10,0,0,.999996,9.96192e-10,0,0,.999992,3.74531e-9,0,0,.999986,1.32022e-8,0,0,.999975,4.33315e-8,0,0,.999959,1.31956e-7,0,0,.999927,3.72249e-7,0,0,.999871,9.72461e-7,0,0,.999771,235343e-11,0,0,.999572,52768e-10,0,0,.999133,109237e-10,0,0,.997912,203675e-10,0,0,.993008,279396e-10,0,0,.980645,139604e-10,0,0,.970057,646596e-11,0,0,.966717,65089e-10,0,474145e-10,.965497,111863e-10,0,89544e-8,.96334,179857e-10,0,.0032647,.959294,259045e-10,0,.0075144,.951519,292327e-10,0,.0138734,.940517,249769e-10,0,.0224952,.93014,26803e-9,0,.0334828,.91972,303656e-10,0,.0468973,.910294,353323e-10,0,.0627703,.897701,351002e-10,0,.0811019,.884522,388104e-10,0,.10186,.869489,412932e-10,0,.124985,.853983,415781e-10,0,.150372,.838425,454066e-10,0,.177868,.820656,471624e-10,0,.207245,.801875,475243e-10,0,.238143,.783521,505621e-10,0,.269841,.763131,50721e-9,0,.301587,.74261,523293e-10,0,.333333,.72148,528699e-10,0,.365079,.699696,538677e-10,0,.396825,.677592,539255e-10,0,.428571,.65525,546367e-10,0,.460317,.632452,541348e-10,0,.492064,.609903,544976e-10,0,.52381,.586928,536201e-10,0,.555556,.564464,535185e-10,0,.587302,.541801,524949e-10,0,.619048,.519681,51812e-9,0,.650794,.497685,507687e-10,0,.68254,.47622,496243e-10,0,.714286,.455135,485714e-10,0,.746032,.4346,471847e-10,0,.777778,.414564,459294e-10,0,.809524,.395165,444705e-10,0,.84127,.376333,430772e-10,0,.873016,.358197,416229e-10,0,.904762,.34064,401019e-10,0,.936508,.323816,386623e-10,0,.968254,.307581,370933e-10,0,1,1,991541e-17,0,0,1,992077e-17,0,0,1,100041e-16,0,0,1,10385e-15,0,0,1,115777e-16,0,0,1,150215e-16,0,0,.999999,254738e-16,0,0,.999999,598822e-16,0,0,.999998,1.79597e-10,0,0,.999997,6.02367e-10,0,0,.999994,2.06835e-9,0,0,.99999,6.94952e-9,0,0,.999984,2.23363e-8,0,0,.999972,6.78578e-8,0,0,.999952,1.93571e-7,0,0,.999919,5.16594e-7,0,0,.99986,128739e-11,0,0,.999753,299298e-11,0,0,.999546,648258e-11,0,0,.999074,129985e-10,0,0,.997671,232176e-10,0,0,.991504,256701e-10,0,0,.981148,131141e-10,0,0,.971965,869048e-11,0,280182e-10,.966624,808301e-11,0,695475e-9,.965344,135235e-10,0,.00265522,.963048,210592e-10,0,.00622975,.958673,287473e-10,0,.0116234,.950262,281379e-10,0,.018976,.940836,271089e-10,0,.0283844,.930996,30926e-9,0,.0399151,.919848,348359e-10,0,.0536063,.909136,366092e-10,0,.0694793,.897554,384162e-10,0,.0875342,.884691,430971e-10,0,.107749,.869414,447803e-10,0,.130087,.853462,452858e-10,0,.154481,.838187,495769e-10,0,.180833,.820381,502709e-10,0,.209005,.801844,522713e-10,0,.238791,.783061,541505e-10,0,.269869,.763205,553712e-10,0,.301587,.742362,564909e-10,0,.333333,.721393,572646e-10,0,.365079,.699676,581012e-10,0,.396825,.677395,58096e-9,0,.428571,.655208,585766e-10,0,.460317,.632451,583602e-10,0,.492064,.609839,580234e-10,0,.52381,.587093,577161e-10,0,.555556,.564467,568447e-10,0,.587302,.542043,563166e-10,0,.619048,.519826,55156e-9,0,.650794,.497952,541682e-10,0,.68254,.476477,528971e-10,0,.714286,.455412,514952e-10,0,.746032,.434926,502222e-10,0,.777778,.4149,485779e-10,0,.809524,.395552,472242e-10,0,.84127,.376712,454891e-10,0,.873016,.358622,440924e-10,0,.904762,.341048,422984e-10,0,.936508,.324262,408582e-10,0,.968254,.308013,390839e-10,0,1,1,613913e-16,0,0,1,614145e-16,0,0,1,617708e-16,0,0,1,633717e-16,0,0,1,681648e-16,0,0,1,808291e-16,0,0,1,1.14608e-10,0,0,.999998,2.10507e-10,0,0,.999997,4.99595e-10,0,0,.999995,1.39897e-9,0,0,.999994,4.19818e-9,0,0,.999988,1.27042e-8,0,0,.999979,3.75153e-8,0,0,.999965,1.06206e-7,0,0,.999945,2.85381e-7,0,0,.999908,7.23611e-7,0,0,.999846,17255e-10,0,0,.999733,386104e-11,0,0,.999511,808493e-11,0,0,.998993,156884e-10,0,0,.997326,265538e-10,0,0,.989706,206466e-10,0,0,.981713,130756e-10,0,70005e-10,.973636,106473e-10,0,464797e-9,.966509,10194e-9,0,.00201743,.965149,165881e-10,0,.00497549,.962669,249147e-10,0,.00953262,.95786,317449e-10,0,.0158211,.949334,281045e-10,0,.0239343,.941041,303263e-10,0,.0339372,.931575,356754e-10,0,.0458738,.920102,397075e-10,0,.059772,.908002,384886e-10,0,.075645,.897269,43027e-9,0,.0934929,.884559,479925e-10,0,.113302,.869161,48246e-9,0,.135045,.853342,509505e-10,0,.158678,.837633,542846e-10,0,.184136,.820252,554139e-10,0,.211325,.801872,581412e-10,0,.240113,.782418,585535e-10,0,.270306,.7631,610923e-10,0,.301594,.742183,613678e-10,0,.333333,.721098,627275e-10,0,.365079,.699512,629413e-10,0,.396825,.677372,636351e-10,0,.428571,.655059,633555e-10,0,.460317,.632567,636513e-10,0,.492064,.609784,628965e-10,0,.52381,.587237,625546e-10,0,.555556,.564525,615825e-10,0,.587302,.542181,605048e-10,0,.619048,.520017,596329e-10,0,.650794,.498204,581516e-10,0,.68254,.476742,569186e-10,0,.714286,.455803,553833e-10,0,.746032,.435251,537807e-10,0,.777778,.415374,522025e-10,0,.809524,.395921,503421e-10,0,.84127,.377253,488211e-10,0,.873016,.359021,468234e-10,0,.904762,.341637,453269e-10,0,.936508,.3247,433014e-10,0,.968254,.308625,418007e-10,0,1,1,2.86798e-10,0,0,1,2.86877e-10,0,0,1,2.88094e-10,0,0,1,2.93506e-10,0,0,1,3.09262e-10,0,0,.999999,3.48593e-10,0,0,.999999,4.44582e-10,0,0,.999998,6.88591e-10,0,0,.999996,1.34391e-9,0,0,.999993,3.17438e-9,0,0,.999989,8.35609e-9,0,0,.999983,2.28677e-8,0,0,.999974,6.23361e-8,0,0,.999959,1.65225e-7,0,0,.999936,4.19983e-7,0,0,.999896,101546e-11,0,0,.99983,232376e-11,0,0,.999709,50156e-10,0,0,.999469,10167e-9,0,0,.998886,190775e-10,0,0,.996819,300511e-10,0,0,.988837,185092e-10,0,1.68222e-7,.982178,134622e-10,0,259622e-9,.975017,125961e-10,0,.00142595,.967101,13507e-9,0,.00382273,.964905,205003e-10,0,.00764164,.96218,29546e-9,0,.0130121,.956821,343738e-10,0,.0200253,.948829,305063e-10,0,.0287452,.941092,346487e-10,0,.039218,.931883,412061e-10,0,.0514748,.920211,444651e-10,0,.0655351,.907307,431252e-10,0,.0814082,.89684,490382e-10,0,.0990939,.884119,53334e-9,0,.118583,.869148,54114e-9,0,.139856,.853377,578536e-10,0,.162882,.836753,592285e-10,0,.187615,.820063,622787e-10,0,.213991,.801694,645492e-10,0,.241918,.782116,65353e-9,0,.271267,.762673,674344e-10,0,.301847,.742133,682788e-10,0,.333333,.720779,691959e-10,0,.365079,.699386,696817e-10,0,.396826,.67732,699583e-10,0,.428572,.654888,698447e-10,0,.460318,.632499,694063e-10,0,.492064,.609825,691612e-10,0,.52381,.587287,681576e-10,0,.555556,.564743,674138e-10,0,.587302,.542409,661617e-10,0,.619048,.520282,647785e-10,0,.650794,.498506,633836e-10,0,.68254,.477102,615905e-10,0,.714286,.456167,601013e-10,0,.746032,.435728,581457e-10,0,.777778,.415809,564215e-10,0,.809524,.396517,544997e-10,0,.84127,.377737,525061e-10,0,.873016,.359698,506831e-10,0,.904762,.342164,48568e-9,0,.936508,.325417,467826e-10,0,.968254,.309186,446736e-10,0,1,1,1.09018e-9,0,0,1,1.0904e-9,0,0,1,1.09393e-9,0,0,1,1.1095e-9,0,0,1,1.154e-9,0,0,1,1.26089e-9,0,0,.999999,1.5059e-9,0,0,.999997,2.07899e-9,0,0,.999994,3.48164e-9,0,0,.999993,7.05728e-9,0,0,.999987,1.63692e-8,0,0,.999981,4.06033e-8,0,0,.999969,1.0245e-7,0,0,.999953,2.55023e-7,0,0,.999925,6.1511e-7,0,0,.999881,142218e-11,0,0,.99981,313086e-11,0,0,.99968,653119e-11,0,0,.999418,12832e-9,0,0,.998748,232497e-10,0,0,.996066,329522e-10,0,0,.988379,179613e-10,0,108799e-9,.982567,143715e-10,0,921302e-9,.976097,148096e-10,0,.00280738,.968475,178905e-10,0,.00596622,.964606,253921e-10,0,.0105284,.961564,348623e-10,0,.0165848,.955517,357612e-10,0,.0242,.948381,343493e-10,0,.03342,.941095,405849e-10,0,.0442777,.931923,475394e-10,0,.0567958,.91996,484328e-10,0,.0709879,.907419,502146e-10,0,.086861,.89618,561654e-10,0,.104415,.88337,587612e-10,0,.123643,.869046,618057e-10,0,.144531,.853278,657392e-10,0,.167057,.836091,66303e-9,0,.191188,.819644,704445e-10,0,.216878,.801246,714071e-10,0,.244062,.782031,740093e-10,0,.272649,.762066,74685e-9,0,.302509,.741964,766647e-10,0,.333442,.720554,766328e-10,0,.365079,.699098,777857e-10,0,.396826,.677189,774633e-10,0,.428572,.65484,776235e-10,0,.460318,.632496,770316e-10,0,.492064,.609908,762669e-10,0,.52381,.587312,753972e-10,0,.555556,.564938,739994e-10,0,.587302,.542577,728382e-10,0,.619048,.52062,71112e-9,0,.650794,.498819,694004e-10,0,.68254,.477555,675575e-10,0,.714286,.456568,653449e-10,0,.746032,.436278,636068e-10,0,.777778,.41637,613466e-10,0,.809524,.397144,594177e-10,0,.84127,.378412,570987e-10,0,.873016,.360376,550419e-10,0,.904762,.342906,527422e-10,0,.936508,.326136,506544e-10,0,.968254,.30997,484307e-10,0,1,1,3.54014e-9,0,0,1,3.54073e-9,0,0,1,3.54972e-9,0,0,1,3.58929e-9,0,0,1,3.70093e-9,0,0,.999999,3.96194e-9,0,0,.999998,4.53352e-9,0,0,.999997,5.78828e-9,0,0,.999994,8.63812e-9,0,0,.999991,1.53622e-8,0,0,.999985,3.16356e-8,0,0,.999977,7.12781e-8,0,0,.999964,1.66725e-7,0,0,.999945,3.90501e-7,0,0,.999912,8.95622e-7,0,0,.999866,198428e-11,0,0,.999786,421038e-11,0,0,.999647,850239e-11,0,0,.999356,162059e-10,0,0,.998563,282652e-10,0,0,.994928,336309e-10,0,244244e-10,.987999,178458e-10,0,523891e-9,.982893,159162e-10,0,.00194729,.977044,178056e-10,0,.00451099,.969972,230624e-10,0,.00835132,.964237,313922e-10,0,.013561,.960791,406145e-10,0,.0202056,.954292,372796e-10,0,.0283321,.948052,403199e-10,0,.0379739,.940938,479537e-10,0,.0491551,.931689,545292e-10,0,.0618918,.91987,54038e-9,0,.0761941,.907665,589909e-10,0,.0920672,.895281,642651e-10,0,.109511,.882621,659707e-10,0,.12852,.86873,709973e-10,0,.149085,.853008,742221e-10,0,.171189,.835944,761754e-10,0,.194809,.818949,797052e-10,0,.21991,.800951,812434e-10,0,.246447,.781847,838075e-10,0,.274352,.761649,84501e-9,0,.303535,.74152,860258e-10,0,.333857,.720495,866233e-10,0,.365104,.698742,868326e-10,0,.396826,.677096,87133e-9,0,.428572,.654782,863497e-10,0,.460318,.632335,860206e-10,0,.492064,.610031,849337e-10,0,.52381,.587457,838279e-10,0,.555556,.56513,82309e-9,0,.587302,.542877,803542e-10,0,.619048,.5209,786928e-10,0,.650794,.499291,765171e-10,0,.68254,.477971,744753e-10,0,.714286,.457221,72209e-9,0,.746032,.436803,697448e-10,0,.777778,.417083,675333e-10,0,.809524,.397749,648058e-10,0,.84127,.379177,625759e-10,0,.873016,.361061,598584e-10,0,.904762,.343713,575797e-10,0,.936508,.326894,549999e-10,0,.968254,.310816,527482e-10,0,1,1,1.0153e-8,0,0,1,1.01544e-8,0,0,1,1.01751e-8,0,0,1,1.02662e-8,0,0,1,1.0521e-8,0,0,.999999,1.11049e-8,0,0,.999999,1.23408e-8,0,0,.999996,1.4924e-8,0,0,.999992,2.04471e-8,0,0,.999989,3.26539e-8,0,0,.99998,6.03559e-8,0,0,.999971,1.23936e-7,0,0,.999955,2.69058e-7,0,0,.999933,5.93604e-7,0,0,.999901,129633e-11,0,0,.999847,275621e-11,0,0,.999761,564494e-11,0,0,.999607,110485e-10,0,0,.999282,204388e-10,0,0,.99831,341084e-10,0,2.2038e-7,.993288,294949e-10,0,242388e-9,.987855,192736e-10,0,.0012503,.983167,182383e-10,0,.0032745,.977908,218633e-10,0,.00646321,.971194,290662e-10,0,.0109133,.963867,386401e-10,0,.0166927,.95982,462827e-10,0,.0238494,.953497,420705e-10,0,.0324178,.947621,477743e-10,0,.0424225,.940611,568258e-10,0,.0538808,.931174,618061e-10,0,.0668047,.919919,627098e-10,0,.0812014,.907856,694714e-10,0,.0970745,.894509,735008e-10,0,.114424,.881954,763369e-10,0,.133246,.868309,821896e-10,0,.153534,.852511,83769e-9,0,.175275,.835821,881615e-10,0,.198453,.817981,896368e-10,0,.223042,.800504,930906e-10,0,.249009,.78141,945056e-10,0,.276304,.761427,963605e-10,0,.304862,.74094,968088e-10,0,.334584,.720233,981481e-10,0,.365322,.698592,979122e-10,0,.396826,.676763,981057e-10,0,.428571,.654808,973956e-10,0,.460318,.632326,962619e-10,0,.492064,.610049,952996e-10,0,.52381,.58763,933334e-10,0,.555556,.565261,917573e-10,0,.587302,.543244,896636e-10,0,.619048,.521273,873304e-10,0,.650794,.499818,852648e-10,0,.68254,.478536,823961e-10,0,.714286,.457826,79939e-9,0,.746032,.437549,77126e-9,0,.777778,.41776,743043e-10,0,.809524,.39863,716426e-10,0,.84127,.379954,686456e-10,0,.873016,.362025,660514e-10,0,.904762,.344581,630755e-10,0,.936508,.327909,605439e-10,0,.968254,.311736,576345e-10,0,1,1,2.63344e-8,0,0,1,2.63373e-8,0,0,1,2.63815e-8,0,0,1,2.65753e-8,0,0,1,2.71132e-8,0,0,.999999,2.83279e-8,0,0,.999997,3.0833e-8,0,0,.999995,3.58711e-8,0,0,.999992,4.61266e-8,0,0,.999985,6.7574e-8,0,0,.999977,1.1358e-7,0,0,.999966,2.13657e-7,0,0,.999948,4.31151e-7,0,0,.999923,8.96656e-7,0,0,.999884,186603e-11,0,0,.999826,381115e-11,0,0,.999732,754184e-11,0,0,.999561,143192e-10,0,0,.999191,257061e-10,0,0,.997955,405724e-10,0,744132e-10,.992228,276537e-10,0,716477e-9,.987638,208885e-10,0,.0022524,.983395,215226e-10,0,.00484816,.978614,270795e-10,0,.00860962,.972389,365282e-10,0,.0136083,.964392,474747e-10,0,.0198941,.95861,509141e-10,0,.0275023,.952806,48963e-9,0,.0364584,.94712,571119e-10,0,.04678,.940104,671704e-10,0,.0584799,.930398,687586e-10,0,.0715665,.919866,738161e-10,0,.086045,.907853,813235e-10,0,.101918,.894078,834582e-10,0,.119186,.881177,892093e-10,0,.137845,.867575,944548e-10,0,.157891,.852107,969607e-10,0,.179316,.835502,101456e-9,0,.202106,.81756,103256e-9,0,.226243,.79984,106954e-9,0,.251704,.780998,108066e-9,0,.278451,.761132,110111e-9,0,.306436,.740429,110459e-9,0,.335586,.719836,111219e-9,0,.365796,.698467,11145e-8,0,.3969,.676446,110393e-9,0,.428571,.654635,110035e-9,0,.460318,.632411,108548e-9,0,.492064,.609986,106963e-9,0,.52381,.587872,105238e-9,0,.555556,.565528,102665e-9,0,.587302,.543563,100543e-9,0,.619048,.52176,976182e-10,0,.650794,.500188,947099e-10,0,.68254,.479204,919929e-10,0,.714286,.458413,886139e-10,0,.746032,.438314,857839e-10,0,.777778,.418573,82411e-9,0,.809524,.39947,792211e-10,0,.84127,.380892,759546e-10,0,.873016,.362953,727571e-10,0,.904762,.345601,695738e-10,0,.936508,.328895,664907e-10,0,.968254,.312808,634277e-10,0,1,1,6.28647e-8,0,0,1,6.28705e-8,0,0,1,6.29587e-8,0,0,1,6.33441e-8,0,0,.999999,6.44087e-8,0,0,.999998,6.67856e-8,0,0,.999997,7.15889e-8,0,0,.999995,8.09577e-8,0,0,.999989,9.92764e-8,0,0,.999983,1.35834e-7,0,0,.999974,2.10482e-7,0,0,.999959,3.65215e-7,0,0,.999939,6.86693e-7,0,0,.999911,13472e-10,0,0,.999868,26731e-10,0,0,.999804,524756e-11,0,0,.9997,100403e-10,0,0,.99951,185019e-10,0,0,.999078,322036e-10,0,620676e-11,.997428,470002e-10,0,341552e-9,.99162,287123e-10,0,.00143727,.987479,234706e-10,0,.00349201,.983582,260083e-10,0,.0066242,.979186,337927e-10,0,.0109113,.97325,454689e-10,0,.0164064,.965221,573759e-10,0,.0231463,.957262,544114e-10,0,.0311571,.952211,587006e-10,0,.0404572,.946631,692256e-10,0,.0510592,.939391,787819e-10,0,.0629723,.929795,792368e-10,0,.0762025,.91965,875075e-10,0,.090753,.907737,950903e-10,0,.106626,.893899,972963e-10,0,.123822,.880239,10459e-8,0,.142337,.866562,107689e-9,0,.16217,.85164,113081e-9,0,.183314,.835021,116636e-9,0,.20576,.817311,120074e-9,0,.229496,.798845,121921e-9,0,.254502,.780479,12475e-8,0,.280753,.760694,125255e-9,0,.308212,.740142,126719e-9,0,.336825,.719248,12636e-8,0,.366517,.698209,126712e-9,0,.397167,.676398,125769e-9,0,.428578,.654378,124432e-9,0,.460318,.632484,123272e-9,0,.492064,.610113,12085e-8,0,.52381,.587931,118411e-9,0,.555556,.565872,11569e-8,0,.587302,.543814,112521e-9,0,.619048,.522265,109737e-9,0,.650794,.500835,106228e-9,0,.68254,.479818,102591e-9,0,.714286,.459258,991288e-10,0,.746032,.439061,952325e-10,0,.777778,.419552,91895e-9,0,.809524,.400399,879051e-10,0,.84127,.381976,844775e-10,0,.873016,.364009,806316e-10,0,.904762,.346761,771848e-10,0,.936508,.330049,735429e-10,0,.968254,.314018,702103e-10,0,1,1,1.39968e-7,0,0,1,1.39979e-7,0,0,1,1.40145e-7,0,0,1,1.4087e-7,0,0,.999999,1.42865e-7,0,0,.999998,1.47279e-7,0,0,.999997,1.56057e-7,0,0,.999992,1.7276e-7,0,0,.999989,2.04352e-7,0,0,.99998,2.6494e-7,0,0,.999969,3.83435e-7,0,0,.999953,6.18641e-7,0,0,.999929,108755e-11,0,0,.999898,201497e-11,0,0,.999849,381346e-11,0,0,.999778,719815e-11,0,0,.999661,133215e-10,0,0,.999451,238313e-10,0,0,.998936,401343e-10,0,113724e-9,.99662,517346e-10,0,820171e-9,.991094,304323e-10,0,.00238143,.987487,281757e-10,0,.00493527,.983731,320048e-10,0,.00856859,.979647,423905e-10,0,.0133393,.973837,562935e-10,0,.0192863,.96584,677442e-10,0,.0264369,.956309,623073e-10,0,.03481,.951523,704131e-10,0,.0444184,.946003,836594e-10,0,.0552713,.938454,911736e-10,0,.0673749,.929279,938264e-10,0,.0807329,.919239,103754e-9,0,.0953479,.907293,109928e-9,0,.111221,.893936,115257e-9,0,.128352,.879674,122265e-9,0,.14674,.865668,125733e-9,0,.166382,.850998,132305e-9,0,.187276,.834498,134844e-9,0,.209413,.816903,139276e-9,0,.232786,.798235,140984e-9,0,.257382,.779724,14378e-8,0,.283181,.760251,144623e-9,0,.310156,.739808,145228e-9,0,.338269,.718762,14539e-8,0,.367461,.697815,144432e-9,0,.397646,.67631,143893e-9,0,.428685,.654278,141846e-9,0,.460318,.632347,13935e-8,0,.492064,.610296,137138e-9,0,.52381,.588039,133806e-9,0,.555556,.566218,130755e-9,0,.587302,.544346,127128e-9,0,.619048,.522701,123002e-9,0,.650794,.501542,119443e-9,0,.68254,.480508,115055e-9,0,.714286,.460092,111032e-9,0,.746032,.440021,106635e-9,0,.777778,.420446,102162e-9,0,.809524,.401512,98184e-9,0,.84127,.38299,936497e-10,0,.873016,.365232,89813e-9,0,.904762,.347865,853073e-10,0,.936508,.331342,817068e-10,0,.968254,.315202,773818e-10,0,1,1,2.9368e-7,0,0,1,2.937e-7,0,0,1,2.93998e-7,0,0,1,2.95298e-7,0,0,.999999,2.98865e-7,0,0,.999998,3.067e-7,0,0,.999995,3.22082e-7,0,0,.999992,3.50767e-7,0,0,.999986,4.03538e-7,0,0,.999976,5.01372e-7,0,0,.999964,6.8562e-7,0,0,.999945,10374e-10,0,0,.999919,171269e-11,0,0,.999882,300175e-11,0,0,.999829,542144e-11,0,0,.999749,984182e-11,0,0,.99962,176213e-10,0,0,.999382,305995e-10,0,138418e-10,.998751,496686e-10,0,389844e-9,.995344,510733e-10,0,.00150343,.990768,345829e-10,0,.00352451,.987464,342841e-10,0,.00655379,.983846,399072e-10,0,.0106554,.980007,533219e-10,0,.0158723,.974494,696992e-10,0,.0222333,.96622,776754e-10,0,.029758,.956273,747718e-10,0,.0384596,.950952,864611e-10,0,.0483473,.945215,100464e-9,0,.0594266,.937287,103729e-9,0,.0717019,.928649,111665e-9,0,.0851752,.918791,12353e-8,0,.0998479,.906685,127115e-9,0,.115721,.893706,13628e-8,0,.132794,.879248,142427e-9,0,.151067,.864685,148091e-9,0,.170538,.850032,153517e-9,0,.191204,.833853,157322e-9,0,.213063,.816353,161086e-9,0,.236107,.797834,164111e-9,0,.260329,.778831,165446e-9,0,.285714,.759756,167492e-9,0,.312243,.739419,166928e-9,0,.339887,.718491,167e-6,0,.368604,.697392,165674e-9,0,.398329,.676102,163815e-9,0,.428961,.654243,162003e-9,0,.460331,.632176,158831e-9,0,.492064,.610407,155463e-9,0,.52381,.588394,152062e-9,0,.555556,.56645,147665e-9,0,.587302,.5449,14375e-8,0,.619048,.523276,138905e-9,0,.650794,.502179,134189e-9,0,.68254,.481359,129392e-9,0,.714286,.46092,124556e-9,0,.746032,.441084,11957e-8,0,.777778,.421517,114652e-9,0,.809524,.402721,109688e-9,0,.84127,.384222,104667e-9,0,.873016,.366534,999633e-10,0,.904762,.349205,950177e-10,0,.936508,.332702,907301e-10,0,.968254,.316599,859769e-10,0,1,1,5.85473e-7,0,0,1,5.85507e-7,0,0,1,5.8602e-7,0,0,.999999,5.88259e-7,0,0,.999999,5.94381e-7,0,0,.999998,6.07754e-7,0,0,.999995,6.33729e-7,0,0,.99999,6.8137e-7,0,0,.999984,7.67003e-7,0,0,.999973,9.21212e-7,0,0,.999959,120218e-11,0,0,.999936,172024e-11,0,0,.999907,268088e-11,0,0,.999866,445512e-11,0,0,.999806,768481e-11,0,0,.999716,1342e-8,0,0,.999576,232473e-10,0,0,.9993,391694e-10,0,129917e-9,.998498,608429e-10,0,845035e-9,.994132,489743e-10,0,.00237616,.99031,384644e-10,0,.00484456,.987409,421768e-10,0,.00832472,.983981,504854e-10,0,.0128643,.980268,671028e-10,0,.0184947,.974875,852749e-10,0,.025237,.966063,85531e-9,0,.0331046,.956779,900588e-10,0,.0421067,.950259,10577e-8,0,.0522487,.944239,119458e-9,0,.0635343,.936341,122164e-9,0,.0759654,.928047,134929e-9,0,.0895434,.918065,145544e-9,0,.104269,.906267,150531e-9,0,.120142,.893419,161652e-9,0,.137163,.878758,16593e-8,0,.15533,.863699,174014e-9,0,.174645,.848876,177877e-9,0,.195106,.833032,184049e-9,0,.21671,.815557,186088e-9,0,.239454,.797323,19054e-8,0,.263332,.778124,191765e-9,0,.288336,.758929,192535e-9,0,.314451,.738979,192688e-9,0,.341658,.718213,191522e-9,0,.369924,.696947,190491e-9,0,.399202,.675807,187913e-9,0,.429416,.654147,184451e-9,0,.460447,.63229,181442e-9,0,.492064,.610499,177139e-9,0,.523809,.588747,172596e-9,0,.555555,.566783,167457e-9,0,.587301,.545359,162518e-9,0,.619048,.523984,156818e-9,0,.650794,.502917,151884e-9,0,.68254,.482294,145514e-9,0,.714286,.461945,140199e-9,0,.746032,.442133,134101e-9,0,.777778,.422705,128374e-9,0,.809524,.403916,122996e-9,0,.84127,.38554,116808e-9,0,.873016,.367909,111973e-9,0,.904762,.350651,105938e-9,0,.936508,.334208,101355e-9,0,.968254,.318123,957629e-10,0,1,1,111633e-11,0,0,1,111639e-11,0,0,1,111725e-11,0,0,1,112096e-11,0,0,.999999,11311e-10,0,0,.999997,115315e-11,0,0,.999995,11956e-10,0,0,.999989,127239e-11,0,0,.999981,140772e-11,0,0,.999969,164541e-11,0,0,.999952,206607e-11,0,0,.999928,281783e-11,0,0,.999895,416835e-11,0,0,.999848,658728e-11,0,0,.999781,108648e-10,0,0,.999682,182579e-10,0,0,.999523,306003e-10,0,159122e-10,.999205,499862e-10,0,391184e-9,.998131,73306e-9,0,.00147534,.993334,513229e-10,0,.0034227,.99016,467783e-10,0,.00632232,.987321,523413e-10,0,.0102295,.984099,64267e-9,0,.0151794,.980432,843042e-10,0,.0211947,.974976,102819e-9,0,.0282899,.966429,996234e-10,0,.0364739,.957633,111074e-9,0,.0457522,.949422,128644e-9,0,.0561278,.943045,140076e-9,0,.0676023,.935448,146349e-9,0,.0801762,.927225,161854e-9,0,.0938499,.917033,169135e-9,0,.108623,.905762,179987e-9,0,.124496,.892879,189832e-9,0,.141469,.878435,195881e-9,0,.159541,.863114,20466e-8,0,.178713,.84776,209473e-9,0,.198985,.832084,214861e-9,0,.220355,.814915,217695e-9,0,.242823,.796711,220313e-9,0,.266385,.777603,22313e-8,0,.291036,.757991,222471e-9,0,.316767,.738371,222869e-9,0,.343563,.717872,221243e-9,0,.371402,.696619,218089e-9,0,.400248,.675379,21562e-8,0,.430047,.65411,21169e-8,0,.460709,.63241,206947e-9,0,.492079,.61046,201709e-9,0,.52381,.58903,196753e-9,0,.555556,.567267,189637e-9,0,.587302,.545886,184735e-9,0,.619048,.524714,177257e-9,0,.650794,.503789,171424e-9,0,.68254,.483204,164688e-9,0,.714286,.462976,157172e-9,0,.746032,.443294,151341e-9,0,.777778,.423988,143737e-9,0,.809524,.405325,138098e-9,0,.84127,.386981,130698e-9,0,.873016,.369436,125276e-9,0,.904762,.35219,118349e-9,0,.936508,.335804,11312e-8,0,.968254,.319749,106687e-9,0,1,1,204685e-11,0,0,1,204694e-11,0,0,1,204831e-11,0,0,.999999,205428e-11,0,0,.999999,207056e-11,0,0,.999997,210581e-11,0,0,.999993,21732e-10,0,0,.999987,229365e-11,0,0,.999979,250243e-11,0,0,.999965,286127e-11,0,0,.999947,348028e-11,0,0,.999918,455588e-11,0,0,.999881,643303e-11,0,0,.999828,970064e-11,0,0,.999753,153233e-10,0,0,.999642,24793e-9,0,0,.999464,402032e-10,0,122947e-9,.999089,635852e-10,0,807414e-9,.997567,857026e-10,0,.00227206,.992903,594912e-10,0,.00462812,.990011,578515e-10,0,.00794162,.987192,65399e-9,0,.0122534,.98418,819675e-10,0,.0175888,.980491,105514e-9,0,.0239635,.974779,121532e-9,0,.031387,.96675,119144e-9,0,.0398644,.958248,136125e-9,0,.0493982,.948884,155408e-9,0,.0599896,.941673,162281e-9,0,.0716382,.934521,176754e-9,0,.0843437,.926205,192873e-9,0,.0981056,.916089,200038e-9,0,.112923,.904963,213624e-9,0,.128796,.892089,221834e-9,0,.145725,.878028,232619e-9,0,.163709,.86249,238632e-9,0,.182749,.846587,247002e-9,0,.202847,.830988,250702e-9,0,.224001,.814165,255562e-9,0,.246214,.796135,257505e-9,0,.269482,.777052,258625e-9,0,.293805,.757201,258398e-9,0,.319176,.737655,256714e-9,0,.345587,.717477,255187e-9,0,.373021,.696433,251792e-9,0,.401454,.675084,247223e-9,0,.430844,.653907,242213e-9,0,.461125,.632561,237397e-9,0,.492187,.610658,229313e-9,0,.52381,.589322,224402e-9,0,.555556,.567857,216116e-9,0,.587302,.54652,209124e-9,0,.619048,.525433,201601e-9,0,.650794,.504679,192957e-9,0,.68254,.484203,186052e-9,0,.714286,.464203,177672e-9,0,.746032,.444549,170005e-9,0,.777778,.425346,162401e-9,0,.809524,.406706,1544e-7,0,.84127,.388576,147437e-9,0,.873016,.37094,139493e-9,0,.904762,.353996,133219e-9,0,.936508,.337391,125573e-9,0,.968254,.321648,119867e-9,0,1,1,362511e-11,0,0,1,362525e-11,0,0,1,362739e-11,0,0,.999999,363673e-11,0,0,.999998,366214e-11,0,0,.999996,371698e-11,0,0,.999992,382116e-11,0,0,.999986,400554e-11,0,0,.999976,432058e-11,0,0,.999961,485194e-11,0,0,.999938,574808e-11,0,0,.999908,726643e-11,0,0,.999865,984707e-11,0,0,.999807,142217e-10,0,0,.999723,215581e-10,0,0,.999602,336114e-10,0,119113e-10,.999398,527353e-10,0,355813e-9,.998946,805809e-10,0,.00137768,.996647,942908e-10,0,.00322469,.992298,668733e-10,0,.00597897,.989802,716564e-10,0,.00968903,.987019,821355e-10,0,.0143845,.984219,104555e-9,0,.0200831,.980425,131245e-9,0,.0267948,.974241,139613e-9,0,.034525,.967006,145931e-9,0,.0432757,.95893,167153e-9,0,.0530471,.949157,188146e-9,0,.0638386,.94062,194625e-9,0,.0756487,.933509,213721e-9,0,.0884762,.925088,229616e-9,0,.10232,.915178,239638e-9,0,.117178,.904093,254814e-9,0,.133051,.891337,263685e-9,0,.149939,.877326,274789e-9,0,.167841,.861794,280534e-9,0,.18676,.845758,289534e-9,0,.206696,.829792,294446e-9,0,.22765,.813037,296877e-9,0,.249625,.795285,300217e-9,0,.27262,.776323,299826e-9,0,.296636,.756673,299787e-9,0,.321671,.736856,297867e-9,0,.347718,.716883,294052e-9,0,.374768,.696089,289462e-9,0,.402804,.67505,285212e-9,0,.431796,.653509,27653e-8,0,.461695,.63258,271759e-9,0,.49242,.61104,262811e-9,0,.523822,.589567,255151e-9,0,.555556,.568322,246434e-9,0,.587302,.547235,237061e-9,0,.619048,.52616,228343e-9,0,.650794,.505716,219236e-9,0,.68254,.485274,209595e-9,0,.714286,.465411,201011e-9,0,.746032,.445854,19109e-8,0,.777778,.426911,182897e-9,0,.809524,.408222,173569e-9,0,.84127,.390307,165496e-9,0,.873016,.372624,156799e-9,0,.904762,.355804,14917e-8,0,.936508,.33924,140907e-9,0,.968254,.323534,134062e-9,0,1,1,622487e-11,0,0,1,62251e-10,0,0,1,622837e-11,0,0,.999999,624259e-11,0,0,.999998,628127e-11,0,0,.999996,636451e-11,0,0,.999991,65218e-10,0,0,.999984,679782e-11,0,0,.999973,726361e-11,0,0,.999955,803644e-11,0,0,.999931,931397e-11,0,0,.999896,114299e-10,0,0,.999847,149402e-10,0,0,.999784,207461e-10,0,0,.999692,302493e-10,0,0,.999554,454957e-10,0,997275e-10,.999326,690762e-10,0,724813e-9,.998757,101605e-9,0,.0020972,.995367,958745e-10,0,.00432324,.99209,832808e-10,0,.00746347,.989517,887601e-10,0,.0115534,.987008,10564e-8,0,.0166134,.98421,133179e-9,0,.0226552,.98021,161746e-9,0,.0296838,.973676,161821e-9,0,.0377016,.967052,178635e-9,0,.0467079,.959385,206765e-9,0,.0567013,.949461,22476e-8,0,.0676796,.939578,23574e-8,0,.0796403,.932416,25893e-8,0,.0925812,.923759,271228e-9,0,.106501,.914223,289165e-9,0,.121397,.902942,301156e-9,0,.13727,.890419,313852e-9,0,.15412,.876639,324408e-9,0,.171946,.861316,33249e-8,0,.190751,.84496,338497e-9,0,.210537,.828427,345861e-9,0,.231305,.811871,347863e-9,0,.253057,.794397,350225e-9,0,.275797,.775726,349915e-9,0,.299525,.75617,347297e-9,0,.324242,.736091,344232e-9,0,.349947,.716213,340835e-9,0,.376633,.695736,332369e-9,0,.404289,.674961,327943e-9,0,.432895,.653518,318533e-9,0,.462415,.632574,310391e-9,0,.492788,.61134,300755e-9,0,.523909,.590017,290506e-9,0,.555556,.568752,280446e-9,0,.587302,.548061,269902e-9,0,.619048,.52711,258815e-9,0,.650794,.506682,248481e-9,0,.68254,.486524,237141e-9,0,.714286,.466812,226872e-9,0,.746032,.44732,216037e-9,0,.777778,.428473,205629e-9,0,.809524,.409921,195691e-9,0,.84127,.392028,185457e-9,0,.873016,.374606,176436e-9,0,.904762,.357601,166508e-9,0,.936508,.341348,158385e-9,0,.968254,.32542,149203e-9,0,1,1,103967e-10,0,0,1,10397e-9,0,0,1,104019e-10,0,0,.999999,104231e-10,0,0,.999998,104806e-10,0,0,.999995,106042e-10,0,0,.999991,108366e-10,0,0,.999982,112415e-10,0,0,.999968,119174e-10,0,0,.99995,130227e-10,0,0,.999922,148176e-10,0,0,.999884,177303e-10,0,0,.99983,224564e-10,0,0,.999758,300966e-10,0,0,.999654,423193e-10,0,549083e-11,.999503,614848e-10,0,296087e-9,.999237,903576e-10,0,.00123144,.998491,1271e-7,0,.00295954,.994594,107754e-9,0,.00555829,.99178,103025e-9,0,.00907209,.989265,11154e-8,0,.0135257,.986998,136296e-9,0,.0189327,.984137,169154e-9,0,.0252993,.979798,196671e-9,0,.0326272,.97337,196678e-9,0,.0409157,.967239,223121e-9,0,.0501623,.959543,253809e-9,0,.0603638,.949466,265972e-9,0,.0715171,.939074,288372e-9,0,.0836187,.931118,310983e-9,0,.0966657,.922525,325561e-9,0,.110656,.912983,345725e-9,0,.125588,.901617,3556e-7,0,.141461,.889487,374012e-9,0,.158275,.875787,383445e-9,0,.176031,.860654,393972e-9,0,.19473,.844417,400311e-9,0,.214374,.82741,405004e-9,0,.234967,.810545,407378e-9,0,.256512,.793312,407351e-9,0,.279011,.774847,406563e-9,0,.302468,.755621,404903e-9,0,.326887,.735511,397486e-9,0,.352266,.715435,39357e-8,0,.378605,.695403,384739e-9,0,.405897,.674681,376108e-9,0,.43413,.65359,365997e-9,0,.463277,.632471,354957e-9,0,.493295,.61151,343593e-9,0,.524106,.59064,331841e-9,0,.555561,.569386,318891e-9,0,.587302,.548785,3072e-7,0,.619048,.528146,29361e-8,0,.650794,.507872,281709e-9,0,.68254,.487805,268627e-9,0,.714286,.468196,255887e-9,0,.746032,.448922,243997e-9,0,.777778,.430093,231662e-9,0,.809524,.411845,220339e-9,0,.84127,.393808,208694e-9,0,.873016,.376615,198045e-9,0,.904762,.359655,187375e-9,0,.936508,.343452,177371e-9,0,.968254,.32765,167525e-9,0,1,1,169351e-10,0,0,1,169356e-10,0,0,1,169427e-10,0,0,.999999,169736e-10,0,0,.999998,170575e-10,0,0,.999995,172372e-10,0,0,.99999,175739e-10,0,0,.999979,181568e-10,0,0,.999966,191206e-10,0,0,.999944,20677e-9,0,0,.999912,231644e-10,0,0,.999869,271268e-10,0,0,.999811,334272e-10,0,0,.99973,433979e-10,0,0,.999617,590083e-10,0,680315e-10,.999445,829497e-10,0,612796e-9,.999138,118019e-9,0,.00187408,.998095,156712e-9,0,.00395791,.993919,125054e-9,0,.00692144,.991333,126091e-9,0,.0107962,.989226,144912e-9,0,.0155986,.986954,175737e-9,0,.0213364,.983982,213883e-9,0,.0280114,.979128,234526e-9,0,.0356226,.973327,243725e-9,0,.0441668,.967416,2773e-7,0,.0536399,.959729,308799e-9,0,.0640376,.949758,322447e-9,0,.0753554,.939173,350021e-9,0,.0875893,.9296,370089e-9,0,.100736,.921181,391365e-9,0,.114793,.91164,413636e-9,0,.129759,.900435,427068e-9,0,.145632,.888183,441046e-9,0,.162412,.874772,454968e-9,0,.180101,.859566,461882e-9,0,.1987,.843579,471556e-9,0,.218213,.826453,474335e-9,0,.238641,.809164,477078e-9,0,.259989,.792179,47755e-8,0,.282262,.773866,472573e-9,0,.305464,.754944,469765e-9,0,.329599,.735133,462371e-9,0,.35467,.714858,453674e-9,0,.380678,.694829,443888e-9,0,.407622,.674453,432052e-9,0,.435493,.653685,420315e-9,0,.464275,.632666,406829e-9,0,.493938,.611676,392234e-9,0,.524422,.591193,379208e-9,0,.555624,.570145,36319e-8,0,.587302,.549566,349111e-9,0,.619048,.529278,334166e-9,0,.650794,.509026,318456e-9,0,.68254,.489186,30449e-8,0,.714286,.469662,289051e-9,0,.746032,.450691,275494e-9,0,.777778,.431841,261437e-9,0,.809524,.413752,247846e-9,0,.84127,.395951,235085e-9,0,.873016,.378633,222245e-9,0,.904762,.36194,210533e-9,0,.936508,.345599,198494e-9,0,.968254,.329999,188133e-9,0,1,1,269663e-10,0,0,1,26967e-9,0,0,1,269772e-10,0,0,.999999,270214e-10,0,0,.999998,271415e-10,0,0,.999994,27398e-9,0,0,.999988,278771e-10,0,0,.999977,287019e-10,0,0,.999961,300544e-10,0,0,.999937,322138e-10,0,0,.999904,356163e-10,0,0,.999854,409465e-10,0,0,.99979,492651e-10,0,0,.999699,621722e-10,0,8.8288e-7,.999572,819715e-10,0,223369e-9,.999381,111689e-9,0,.00105414,.999016,153862e-9,0,.0026493,.997437,187667e-9,0,.00508608,.993545,155672e-9,0,.00840554,.991135,161455e-9,0,.012629,.989157,188241e-9,0,.0177661,.986874,226229e-9,0,.0238198,.983714,268668e-9,0,.0307887,.978301,277109e-9,0,.0386688,.973227,303446e-9,0,.0474554,.967317,341851e-9,0,.0571428,.959477,370885e-9,0,.0677256,.950012,392753e-9,0,.0791988,.939484,42781e-8,0,.0915576,.928135,443866e-9,0,.104798,.919819,472959e-9,0,.118918,.910049,491551e-9,0,.133915,.899181,512616e-9,0,.149788,.886881,523563e-9,0,.166537,.87359,540183e-9,0,.184164,.858613,547386e-9,0,.202669,.842809,554809e-9,0,.222056,.825727,558316e-9,0,.242329,.808086,557824e-9,0,.263492,.790728,556346e-9,0,.285551,.772987,552672e-9,0,.30851,.7541,543738e-9,0,.332376,.734669,536107e-9,0,.357153,.714411,523342e-9,0,.382845,.694196,512238e-9,0,.409454,.674252,497465e-9,0,.436977,.65357,481096e-9,0,.465404,.632999,467054e-9,0,.494713,.611994,448771e-9,0,.524864,.591604,431889e-9,0,.555779,.571134,415238e-9,0,.587302,.550528,396369e-9,0,.619048,.530292,379477e-9,0,.650794,.510364,361488e-9,0,.68254,.490749,343787e-9,0,.714286,.471266,327822e-9,0,.746032,.452462,310626e-9,0,.777778,.433907,295352e-9,0,.809524,.415659,279179e-9,0,.84127,.398138,264685e-9,0,.873016,.380833,249905e-9,0,.904762,.364247,236282e-9,0,.936508,.348041,222905e-9,0,.968254,.332389,210522e-9,0,1,1,420604e-10,0,0,1,420614e-10,0,0,1,420757e-10,0,0,.999999,42138e-9,0,0,.999997,423067e-10,0,0,.999993,426668e-10,0,0,.999986,433372e-10,0,0,.999974,444857e-10,0,0,.999956,463554e-10,0,0,.99993,493105e-10,0,0,.999892,539077e-10,0,0,.999838,610005e-10,0,0,.999767,718822e-10,0,0,.999666,884581e-10,0,365471e-10,.999525,113398e-9,0,485623e-9,.999311,150043e-9,0,.00162096,.998865,200063e-9,0,.00355319,.996278,211014e-9,0,.00633818,.992956,189672e-9,0,.0100043,.991017,210262e-9,0,.0145648,.989055,244292e-9,0,.0200237,.986741,290481e-9,0,.0263798,.983288,334303e-9,0,.033629,.977784,340307e-9,0,.0417652,.973037,377864e-9,0,.0507821,.967181,4239e-7,0,.060673,.958971,443854e-9,0,.0714314,.950093,483039e-9,0,.0830518,.939552,517934e-9,0,.0955288,.927678,539449e-9,0,.108859,.918278,568604e-9,0,.123038,.908449,588505e-9,0,.138065,.897713,612473e-9,0,.153938,.885533,625575e-9,0,.170657,.872131,63854e-8,0,.188224,.857517,647034e-9,0,.20664,.841796,65209e-8,0,.225909,.824726,6544e-7,0,.246035,.807297,655744e-9,0,.267022,.789058,646716e-9,0,.288878,.77189,643898e-9,0,.311607,.753082,629973e-9,0,.335216,.7341,621564e-9,0,.359713,.714094,605171e-9,0,.385103,.693839,588752e-9,0,.41139,.673891,573294e-9,0,.438576,.653565,552682e-9,0,.466656,.633326,533446e-9,0,.495617,.612582,514635e-9,0,.525431,.59205,49303e-8,0,.556041,.571918,471842e-9,0,.587338,.551572,451713e-9,0,.619048,.531553,430049e-9,0,.650794,.51175,410445e-9,0,.68254,.49238,390098e-9,0,.714286,.473143,370033e-9,0,.746032,.45423,351205e-9,0,.777778,.435963,332049e-9,0,.809524,.41787,315021e-9,0,.84127,.400387,297315e-9,0,.873016,.383332,281385e-9,0,.904762,.366665,265397e-9,0,.936508,.350633,250601e-9,0,.968254,.334964,23589e-8,0,1,1,643736e-10,0,0,1,64375e-9,0,0,1,643947e-10,0,0,.999999,64481e-9,0,0,.999997,647143e-10,0,0,.999994,652119e-10,0,0,.999985,661359e-10,0,0,.999972,677116e-10,0,0,.999952,702599e-10,0,0,.999922,742517e-10,0,0,.99988,803906e-10,0,0,.99982,897315e-10,0,0,.999741,103838e-9,0,0,.999629,12496e-8,0,149024e-9,.999474,156161e-9,0,861027e-9,.999229,201034e-9,0,.00231198,.998662,259069e-9,0,.00458147,.995299,245439e-9,0,.00770895,.992732,24498e-8,0,.0117126,.990847,273211e-9,0,.0165989,.988911,316492e-9,0,.0223674,.98654,37161e-8,0,.0290135,.982636,410352e-9,0,.0365309,.977346,421756e-9,0,.0449117,.972909,475578e-9,0,.0541481,.966821,522482e-9,0,.0642326,.958686,545008e-9,0,.075158,.949754,589286e-9,0,.0869181,.939184,619995e-9,0,.0995074,.927505,654266e-9,0,.112922,.916606,682362e-9,0,.127157,.906707,704286e-9,0,.142212,.895937,725909e-9,0,.158085,.883913,743939e-9,0,.174776,.870642,755157e-9,0,.192287,.856241,764387e-9,0,.210619,.84069,771032e-9,0,.229775,.823728,765906e-9,0,.249761,.806481,767604e-9,0,.270582,.787924,754385e-9,0,.292243,.770588,749668e-9,0,.314753,.751991,731613e-9,0,.338118,.733407,717655e-9,0,.362347,.713688,700604e-9,0,.387447,.693595,678765e-9,0,.413424,.673426,657042e-9,0,.440284,.65359,635892e-9,0,.468027,.633576,611569e-9,0,.496645,.613144,586011e-9,0,.526122,.592711,563111e-9,0,.556417,.572722,537699e-9,0,.587451,.552762,512556e-9,0,.619048,.532985,489757e-9,0,.650794,.513219,464139e-9,0,.68254,.493992,442193e-9,0,.714286,.47509,418629e-9,0,.746032,.456287,397045e-9,0,.777778,.438152,375504e-9,0,.809524,.420294,35492e-8,0,.84127,.402749,335327e-9,0,.873016,.385879,316422e-9,0,.904762,.369352,298333e-9,0,.936508,.353301,281417e-9,0,.968254,.337781,265203e-9,0,1,1,968267e-10,0,0,1,968284e-10,0,0,1,968556e-10,0,0,.999999,969733e-10,0,0,.999997,972913e-10,0,0,.999993,979688e-10,0,0,.999984,992239e-10,0,0,.999969,101356e-9,0,0,.999946,104784e-9,0,0,.999913,110111e-9,0,0,.999868,118217e-9,0,0,.999801,130396e-9,0,0,.999712,148523e-9,0,124907e-10,.999589,175233e-9,0,355405e-9,.999416,213999e-9,0,.0013528,.999136,268529e-9,0,.00312557,.998367,333088e-9,0,.00573045,.994701,304757e-9,0,.00919397,.992497,318031e-9,0,.0135261,.990608,353863e-9,0,.0187278,.988715,409044e-9,0,.0247947,.986241,472967e-9,0,.0317196,.981696,495104e-9,0,.039494,.977097,532873e-9,0,.0481087,.972583,594447e-9,0,.0575549,.966142,636867e-9,0,.0678242,.95823,669899e-9,0,.0789089,.949677,719499e-9,0,.0908023,.939226,750584e-9,0,.103499,.927501,793183e-9,0,.116993,.915199,81995e-8,0,.131282,.90498,847654e-9,0,.146364,.894243,868929e-9,0,.162237,.882154,884278e-9,0,.178902,.869161,898108e-9,0,.196358,.854751,901254e-9,0,.21461,.839368,90679e-8,0,.23366,.822874,901541e-9,0,.253512,.805514,897297e-9,0,.274174,.78716,881856e-9,0,.29565,.769061,870032e-9,0,.31795,.751,851719e-9,0,.341081,.732614,830671e-9,0,.365053,.713171,806569e-9,0,.389874,.693472,78338e-8,0,.415553,.673528,756404e-9,0,.442098,.653397,726872e-9,0,.469512,.633781,700494e-9,0,.497794,.613877,67105e-8,0,.526935,.593506,640361e-9,0,.556908,.573667,613502e-9,0,.587657,.553932,583177e-9,0,.61906,.534345,554375e-9,0,.650794,.515042,527811e-9,0,.68254,.495674,499367e-9,0,.714286,.477132,47429e-8,0,.746032,.458609,447726e-9,0,.777778,.440354,424205e-9,0,.809524,.422765,399549e-9,0,.84127,.405472,378315e-9,0,.873016,.388482,355327e-9,0,.904762,.372191,336122e-9,0,.936508,.356099,315247e-9,0,.968254,.340737,29794e-8,0,1,1,143327e-9,0,0,1,14333e-8,0,0,1,143366e-9,0,0,.999999,143524e-9,0,0,.999996,143952e-9,0,0,.999991,144862e-9,0,0,.999981,146544e-9,0,0,.999966,149391e-9,0,0,.999941,153946e-9,0,0,.999905,160971e-9,0,0,.999852,171562e-9,0,0,.99978,18729e-8,0,0,.999681,210386e-9,0,826239e-10,.999546,243906e-9,0,664807e-9,.999352,291739e-9,0,.00196192,.999027,357419e-9,0,.00405941,.997886,422349e-9,0,.00699664,.99419,385008e-9,0,.0107896,.99214,409775e-9,0,.0154415,.990274,456418e-9,0,.0209488,.988455,527008e-9,0,.0273037,.985804,597685e-9,0,.0344969,.98103,613124e-9,0,.0425183,.976674,668321e-9,0,.0513575,.972021,736985e-9,0,.0610046,.965274,773789e-9,0,.0714508,.958046,830852e-9,0,.0826877,.949333,875766e-9,0,.0947085,.939135,917088e-9,0,.107507,.927119,952244e-9,0,.121078,.91469,990626e-9,0,.135419,.903006,.00101304,0,.150526,.892368,.00103834,0,.166399,.880231,.00105002,0,.183038,.867432,.00106331,0,.200443,.853208,.00106783,0,.218618,.837956,.00106458,0,.237566,.821772,.00105945,0,.257291,.804328,.00104685,0,.2778,.786465,.00103178,0,.2991,.768004,.00101077,0,.321199,.74972,985504e-9,0,.344106,.731682,962893e-9,0,.36783,.712813,932146e-9,0,.392383,.693139,89871e-8,0,.417774,.673566,869678e-9,0,.444013,.653483,835525e-9,0,.471107,.633891,799853e-9,0,.49906,.614433,766838e-9,0,.527869,.594586,732227e-9,0,.557517,.574769,696442e-9,0,.587966,.555149,663935e-9,0,.61913,.535898,629826e-9,0,.650794,.516753,596486e-9,0,.68254,.497816,567078e-9,0,.714286,.479034,534399e-9,0,.746032,.460975,507013e-9,0,.777778,.442935,477421e-9,0,.809524,.425263,451101e-9,0,.84127,.408248,424964e-9,0,.873016,.391339,39993e-8,0,.904762,.37513,377619e-9,0,.936508,.359172,354418e-9,0,.968254,.343876,334823e-9,0,1,1,209042e-9,0,0,1,209045e-9,0,0,1,209093e-9,0,0,.999999,209304e-9,0,0,.999996,209871e-9,0,0,.999991,211078e-9,0,0,.999979,213304e-9,0,0,.999963,217061e-9,0,0,.999933,223042e-9,0,0,.999894,232206e-9,0,0,.999837,245901e-9,0,0,.999756,266023e-9,0,102927e-11,.999648,295204e-9,0,233468e-9,.999499,336958e-9,0,.00108237,.999283,395563e-9,0,.00268832,.998896,473785e-9,0,.00511138,.997006,520008e-9,0,.00837705,.993819,497261e-9,0,.0124928,.991632,523722e-9,0,.0174561,.989875,587258e-9,0,.0232596,.988109,676329e-9,0,.0298932,.985155,747701e-9,0,.0373453,.980479,768803e-9,0,.0456045,.976271,841054e-9,0,.0546593,.971347,911469e-9,0,.0644994,.964528,953057e-9,0,.0751152,.957632,.00102221,0,.0864981,.948681,.00106122,0,.0986407,.938716,.00111857,0,.111537,.926629,.00114762,0,.125182,.914025,.00118995,0,.139571,.901026,.00121228,0,.154703,.890358,.00123946,0,.170576,.878283,.0012527,0,.18719,.865459,.00125536,0,.204547,.851407,.00126134,0,.222648,.836276,.00124759,0,.241498,.820436,.00124443,0,.261101,.803253,.00122071,0,.281465,.785562,.00120107,0,.302595,.76718,.00117762,0,.324501,.748551,.00114289,0,.347192,.730564,.00110872,0,.370679,.712253,.00107636,0,.394973,.692867,.00103646,0,.420085,.673695,996793e-9,0,.446027,.653912,95675e-8,0,.47281,.634129,916739e-9,0,.500441,.615004,874401e-9,0,.528921,.595587,833411e-9,0,.558244,.575965,794556e-9,0,.588384,.5566,75196e-8,0,.619281,.537428,716381e-9,0,.650795,.518623,676558e-9,0,.68254,.499964,64074e-8,0,.714286,.481356,605984e-9,0,.746032,.463279,570256e-9,0,.777778,.445673,540138e-9,0,.809524,.428032,507299e-9,0,.84127,.411112,479553e-9,0,.873016,.394444,450737e-9,0,.904762,.378247,424269e-9,0,.936508,.362415,399111e-9,0,.968254,.347103,375274e-9,0,1,1,300729e-9,0,0,1,300733e-9,0,0,1,300797e-9,0,0,.999998,301072e-9,0,0,.999996,301817e-9,0,0,.999989,303398e-9,0,0,.999977,306309e-9,0,0,.999958,311209e-9,0,0,.999927,318975e-9,0,0,.999884,330804e-9,0,0,.99982,34834e-8,0,0,.999733,373854e-9,0,326995e-10,.999613,410424e-9,0,477174e-9,.999447,462047e-9,0,.00161099,.999204,533322e-9,0,.00353153,.998725,624964e-9,0,.00627965,.995871,631786e-9,0,.0098693,.993194,632017e-9,0,.0143011,.991541,68923e-8,0,.019568,.989773,766892e-9,0,.0256593,.987647,863668e-9,0,.0325625,.984193,922089e-9,0,.0402647,.980016,970749e-9,0,.0487532,.975859,.00106027,0,.058016,.970514,.00112239,0,.0680419,.963625,.00117212,0,.0788208,.956959,.00125211,0,.0903439,.947956,.00129411,0,.102604,.93809,.00135879,0,.115594,.92659,.00139309,0,.129309,.913829,.00143253,0,.143745,.90005,.00145809,0,.158901,.888129,.0014748,0,.174774,.87607,.00148756,0,.191365,.863461,.00148714,0,.208674,.849594,.00148892,0,.226705,.834531,.00146496,0,.245461,.81903,.0014579,0,.264947,.802122,.00143039,0,.28517,.78445,.00139717,0,.306137,.766434,.00136312,0,.327857,.747816,.00132597,0,.350341,.729519,.00128323,0,.373598,.711454,.00123803,0,.397642,.692699,.00119097,0,.422485,.673723,.00114565,0,.448139,.654386,.00109552,0,.474619,.634673,.00104553,0,.501933,.615554,99985e-8,0,.530089,.596462,948207e-9,0,.559087,.577385,902299e-9,0,.588913,.558257,856448e-9,0,.619525,.5392,810395e-9,0,.650826,.520543,768558e-9,0,.68254,.502206,7239e-7,0,.714286,.48402,685794e-9,0,.746032,.465779,64471e-8,0,.777778,.448455,609583e-9,0,.809524,.431091,57227e-8,0,.84127,.414147,54042e-8,0,.873016,.39765,506545e-9,0,.904762,.381576,477635e-9,0,.936508,.365881,448446e-9,0,.968254,.350582,421424e-9,0,1,1,427144e-9,0,0,1,427151e-9,0,0,1,427232e-9,0,0,.999998,42759e-8,0,0,.999995,428555e-9,0,0,.999988,430603e-9,0,0,.999976,434368e-9,0,0,.999952,440688e-9,0,0,.999919,450667e-9,0,0,.999871,46578e-8,0,0,.999801,488024e-9,0,0,.999704,520092e-9,0,129791e-9,.999572,565553e-9,0,821056e-9,.999389,628906e-9,0,.00225241,.999114,714911e-9,0,.00449109,.998488,819218e-9,0,.00756249,.995234,80415e-8,0,.0114716,.993021,830181e-9,0,.0162131,.991407,902645e-9,0,.021776,.989625,996934e-9,0,.0281471,.987064,.00109707,0,.0353118,.983265,.00114353,0,.0432562,.979535,.0012272,0,.0519665,.975224,.00132642,0,.0614298,.969574,.00138092,0,.0716348,.963021,.00145896,0,.0825709,.956046,.00152834,0,.094229,.947136,.00158217,0,.106602,.937313,.0016347,0,.119682,.926073,.00168383,0,.133465,.913121,.00171627,0,.147947,.899165,.00174229,0,.163125,.885891,.00176137,0,.178998,.873783,.00176406,0,.195566,.861331,.00176156,0,.21283,.847569,.00175346,0,.230793,.832785,.00172753,0,.249459,.817442,.00170204,0,.268832,.800613,.00166576,0,.28892,.783597,.00162909,0,.30973,.76571,.0015826,0,.331271,.747021,.00153106,0,.353554,.728593,.00148036,0,.37659,.710661,.00142808,0,.400391,.692426,.00136906,0,.424973,.673623,.00131066,0,.450347,.65494,.00125569,0,.476531,.635448,.00119517,0,.503535,.616221,.00113828,0,.531372,.597531,.0010816,0,.560047,.578795,.00102673,0,.589554,.559892,970985e-9,0,.619869,.541307,919773e-9,0,.650923,.522608,868479e-9,0,.68254,.504484,82137e-8,0,.714286,.486603,772916e-9,0,.746032,.468802,730353e-9,0,.777778,.451172,684955e-9,0,.809524,.434348,647565e-9,0,.84127,.417445,605863e-9,0,.873016,.401077,571885e-9,0,.904762,.385039,536034e-9,0,.936508,.369483,504227e-9,0,.968254,.354272,473165e-9,0,1,1,599525e-9,0,0,1,599533e-9,0,0,1,599639e-9,0,0,.999998,600097e-9,0,0,.999994,601336e-9,0,0,.999987,603958e-9,0,0,.999972,608775e-9,0,0,.999949,616842e-9,0,0,.999912,629534e-9,0,0,.999857,648658e-9,0,0,.999781,676615e-9,0,538873e-11,.999674,716574e-9,0,308602e-9,.999528,772641e-9,0,.00127003,.999326,849806e-9,0,.00300783,.999009,952682e-9,0,.00556637,.998112,.00106394,0,.00895889,.994496,.00102228,0,.0131827,.992806,.00108586,0,.0182277,.991211,.0011759,0,.0240795,.989415,.00128955,0,.030723,.986499,.00139038,0,.0381418,.982679,.00144539,0,.046321,.978839,.00153954,0,.0552459,.974295,.00164417,0,.0649034,.968784,.00171517,0,.0752814,.962324,.00180282,0,.0863693,.954956,.00186387,0,.0981578,.94624,.00193817,0,.110639,.936517,.00198156,0,.123806,.925186,.00203042,0,.137655,.91252,.0020664,0,.15218,.898441,.00207822,0,.16738,.884394,.0020992,0,.183253,.871273,.00208748,0,.199799,.859057,.00208686,0,.21702,.845243,.00205519,0,.234918,.830723,.00202868,0,.253496,.815801,.00199501,0,.272761,.79914,.00194193,0,.292719,.782372,.00188824,0,.313377,.76482,.00183695,0,.334745,.746586,.00177418,0,.356833,.7281,.00170628,0,.379654,.709842,.00164063,0,.403221,.692019,.00157355,0,.427548,.67364,.00150262,0,.452651,.655277,.00143473,0,.478545,.636438,.00136371,0,.505246,.617364,.00129911,0,.532768,.598603,.00123014,0,.561122,.580195,.00116587,0,.590309,.561786,.00110398,0,.620318,.543377,.00104148,0,.651102,.525093,983984e-9,0,.682545,.506791,92667e-8,0,.714286,.489291,874326e-9,0,.746032,.471811,821734e-9,0,.777778,.454435,774698e-9,0,.809524,.437493,727302e-9,0,.84127,.420977,684039e-9,0,.873016,.404729,64373e-8,0,.904762,.388756,60285e-8,0,.936508,.373344,56765e-8,0,.968254,.358191,531929e-9,0,1,1,832169e-9,0,0,1,832178e-9,0,0,1,83231e-8,0,0,.999998,832893e-9,0,0,.999995,834465e-9,0,0,.999985,837791e-9,0,0,.999969,843893e-9,0,0,.999944,854086e-9,0,0,.999903,870071e-9,0,0,.999843,894042e-9,0,0,.999759,928865e-9,0,531805e-10,.999643,978242e-9,0,579365e-9,.99948,.00104684,0,.00182774,.999255,.00114012,0,.00387804,.998885,.00126188,0,.00675709,.997405,.00135888,0,.010468,.99424,.00133626,0,.0150018,.992458,.00140905,0,.0203443,.990929,.00152305,0,.0264786,.989116,.00165882,0,.0333875,.985624,.00174128,0,.0410536,.982003,.00182108,0,.0494609,.978336,.00194498,0,.0585941,.973184,.00202708,0,.0684396,.9678,.00212166,0,.0789851,.961348,.00221366,0,.0902199,.953841,.00228219,0,.102134,.94534,.00235662,0,.114721,.935552,.00240572,0,.127972,.924064,.00244405,0,.141884,.911827,.00247557,0,.156451,.897731,.00248374,0,.171672,.883409,.00249863,0,.187545,.868625,.00246688,0,.20407,.856529,.00246523,0,.221249,.842999,.00242368,0,.239083,.828505,.00237354,0,.257578,.813825,.00232588,0,.276738,.797813,.00226731,0,.296569,.781097,.00219704,0,.31708,.764038,.00212394,0,.338281,.746067,.00204786,0,.360181,.727687,.00196728,0,.382794,.709571,.00188779,0,.406133,.691503,.00180532,0,.430213,.673673,.00171849,0,.45505,.655732,.00164147,0,.480662,.637399,.00155858,0,.507065,.618616,.00147641,0,.534278,.60005,.00140125,0,.562313,.581713,.00132441,0,.59118,.563546,.00125014,0,.620875,.545605,.00118249,0,.651373,.527559,.0011116,0,.682593,.509764,.00104979,0,.714286,.49193,985977e-9,0,.746032,.475011,928592e-9,0,.777778,.457878,873466e-9,0,.809524,.440979,819585e-9,0,.84127,.424613,772365e-9,0,.873016,.408549,722195e-9,0,.904762,.392771,680014e-9,0,.936508,.377317,636797e-9,0,.968254,.362352,598318e-9,0,1,1,.00114313,0,0,1,.00114314,0,0,.999999,.00114331,0,0,.999998,.00114404,0,0,.999994,.00114601,0,0,.999984,.00115019,0,0,.999967,.00115784,0,0,.999937,.0011706,0,0,.999894,.00119054,0,0,.999828,.00122031,0,0,.999735,.00126331,0,169263e-9,.999606,.00132382,0,949167e-9,.999426,.0014071,0,.00249668,.999173,.00151895,0,.00486392,.99873,.00166102,0,.00806323,.996243,.0017023,0,.0120895,.993779,.00172782,0,.0169288,.9919,.0018108,0,.0225633,.990524,.00196028,0,.028974,.98868,.00212014,0,.036142,.984663,.00217598,0,.044049,.981457,.00230563,0,.0526781,.977608,.00243966,0,.0620137,.972215,.00251336,0,.0720418,.966798,.0026285,0,.0827499,.960241,.00271409,0,.0941271,.952489,.00278381,0,.106164,.944127,.00285399,0,.118852,.934282,.00290994,0,.132185,.923271,.00294558,0,.146157,.910803,.00296269,0,.160766,.896705,.00296803,0,.176007,.88238,.00296637,0,.19188,.867116,.00293163,0,.208385,.853636,.00289418,0,.225523,.840469,.00284663,0,.243296,.82639,.00278594,0,.261709,.811759,.00271618,0,.280767,.796113,.00263187,0,.300476,.779518,.00254589,0,.320845,.763142,.00246003,0,.341883,.745464,.00236529,0,.363601,.727491,.00226536,0,.386011,.709414,.00216375,0,.409128,.691396,.00207127,0,.432967,.67368,.00197106,0,.457545,.656049,.00187022,0,.482881,.638188,.00177605,0,.508992,.620177,.00168482,0,.535899,.601506,.00158909,0,.563619,.58362,.00150583,0,.592165,.565496,.00141791,0,.621544,.54789,.00133693,0,.651743,.530323,.00126038,0,.682709,.512795,.00118556,0,.714286,.495199,.00111527,0,.746032,.478101,.0010489,0,.777778,.461511,984264e-9,0,.809524,.444879,92591e-8,0,.84127,.428424,866582e-9,0,.873016,.412495,814463e-9,0,.904762,.396975,764498e-9,0,.936508,.381614,715967e-9,0,.968254,.366732,672483e-9,0,1,1,.00155501,0,0,1,.00155503,0,0,1,.00155524,0,0,.999998,.00155615,0,0,.999994,.0015586,0,0,.999983,.00156379,0,0,.999963,.0015733,0,0,.999932,.00158911,0,0,.999882,.00161376,0,0,.99981,.00165041,0,100875e-10,.999708,.00170304,0,367658e-9,.999565,.00177658,0,.0014234,.999368,.00187688,0,.00327939,.999081,.00200989,0,.00596629,.99852,.00217177,0,.0094852,.99549,.0021745,0,.013824,.993252,.00222357,0,.0189642,.991727,.00235022,0,.0248856,.989951,.00250561,0,.0315669,.988029,.00268829,0,.0389882,.984029,.0027496,0,.0471302,.980683,.00289793,0,.0559754,.976554,.00303315,0,.0655081,.97139,.00313257,0,.0757138,.965544,.00323656,0,.08658,.95912,.00333432,0,.0980954,.951183,.0034039,0,.110251,.942974,.00347515,0,.123038,.932642,.00350381,0,.13645,.922158,.00354519,0,.150482,.909404,.00353851,0,.165129,.896071,.0035435,0,.18039,.881206,.00349936,0,.196263,.866077,.00347256,0,.212748,.85093,.003415,0,.229847,.837703,.00333367,0,.247561,.823878,.003249,0,.265895,.809449,.00316347,0,.284854,.794379,.00306351,0,.304445,.778138,.0029499,0,.324675,.761997,.00284099,0,.345555,.744938,.00272104,0,.367095,.727212,.00260715,0,.389309,.709549,.00248855,0,.41221,.691704,.00236783,0,.435814,.673689,.00225178,0,.460138,.656453,.00213765,0,.485203,.639128,.00202178,0,.511028,.621512,.00191443,0,.537634,.603598,.00180977,0,.565041,.58559,.00170456,0,.593268,.567852,.00160927,0,.622327,.5503,.00151395,0,.652217,.533033,.00142499,0,.682907,.515942,.00133955,0,.714296,.498814,.0012602,0,.746032,.481595,.00118188,0,.777778,.465117,.00111171,0,.809524,.448865,.00104091,0,.84127,.432711,976618e-9,0,.873016,.416822,91859e-8,0,.904762,.401272,857704e-9,0,.936508,.386226,807172e-9,0,.968254,.371321,75464e-8,0,1,1,.00209596,0,0,1,.00209598,0,0,1,.00209624,0,0,.999997,.00209736,0,0,.999991,.00210039,0,0,.999979,.00210678,0,0,.999959,.00211847,0,0,.999925,.0021379,0,0,.99987,.00216809,0,0,.999791,.00221281,0,681487e-10,.999677,.00227669,0,658161e-9,.999521,.00236533,0,.00200635,.999301,.00248514,0,.0041779,.998977,.00264185,0,.00718648,.998191,.00281695,0,.0110239,.994801,.00278518,0,.015672,.993091,.00288774,0,.0211091,.991571,.00303931,0,.0273123,.9897,.00321643,0,.034259,.987023,.00337332,0,.0419282,.983289,.00346146,0,.0502998,.979892,.00363704,0,.0593562,.975111,.00373601,0,.069081,.970351,.0038842,0,.0794598,.964131,.00397053,0,.0904798,.957747,.00408078,0,.10213,.949536,.00413533,0,.1144,.941372,.00420305,0,.127284,.931049,.00422815,0,.140772,.920647,.00425048,0,.154862,.908033,.0042281,0,.169548,.895028,.00422026,0,.184828,.879968,.00415042,0,.200701,.864875,.00408821,0,.217167,.84918,.00400909,0,.234227,.834934,.00391178,0,.251884,.821397,.00380066,0,.270141,.807135,.00367974,0,.289004,.792363,.00355172,0,.308479,.776661,.003411,0,.328575,.760705,.00328123,0,.349301,.744408,.00314003,0,.370668,.726994,.0029906,0,.392689,.709598,.00285034,0,.415379,.692112,.00271179,0,.438754,.674435,.00257185,0,.46283,.65676,.00243425,0,.48763,.639982,.00230351,0,.513173,.622983,.0021777,0,.539482,.605471,.00204991,0,.566579,.58796,.00193759,0,.594488,.570463,.00181976,0,.623226,.553058,.00171497,0,.6528,.535894,.00161109,0,.683198,.519089,.00151394,0,.714354,.502454,.00142122,0,.746032,.485681,.00133488,0,.777778,.468935,.00124975,0,.809524,.452951,.00117309,0,.84127,.437139,.00110155,0,.873016,.421446,.00103124,0,.904762,.405951,966387e-9,0,.936508,.391003,908119e-9,0,.968254,.376198,848057e-9,0,1,1,.00280076,0,0,1,.00280078,0,0,.999999,.00280109,0,0,.999997,.00280246,0,0,.999992,.00280616,0,0,.999979,.00281396,0,0,.999956,.00282822,0,0,.999916,.00285186,0,0,.999857,.0028885,0,0,.999768,.00294259,0,196026e-9,.999645,.00301946,0,.00104842,.99947,.00312541,0,.00270199,.999229,.00326733,0,.00519449,.998852,.00344992,0,.00852602,.997558,.00361052,0,.0126804,.994417,.0035898,0,.017635,.992824,.00372393,0,.023365,.991344,.00390695,0,.0298456,.989337,.00410392,0,.0370529,.985811,.00420987,0,.0449651,.982772,.00437488,0,.0535615,.979001,.00455069,0,.0628243,.974102,.00464462,0,.0727368,.969197,.00480577,0,.0832844,.962759,.00487818,0,.0944545,.956207,.00498176,0,.106236,.947909,.00503392,0,.118619,.939596,.00507474,0,.131595,.929642,.00509798,0,.145159,.918807,.00508476,0,.159305,.906921,.00505634,0,.174028,.893312,.00498845,0,.189327,.878933,.0049133,0,.2052,.863986,.0048259,0,.221647,.847936,.00470848,0,.23867,.832253,.00456889,0,.25627,.818619,.00442726,0,.274453,.804788,.00427677,0,.293222,.790241,.00411906,0,.312585,.775162,.00394833,0,.33255,.759463,.00377366,0,.353126,.743598,.00361026,0,.374324,.72697,.00343627,0,.396158,.709646,.00326422,0,.418641,.69277,.00309717,0,.44179,.675371,.0029356,0,.465624,.657863,.00277712,0,.490163,.640772,.00261738,0,.515429,.624441,.0024737,0,.541445,.607497,.00233125,0,.568236,.590438,.00218994,0,.595828,.573224,.0020664,0,.624242,.556168,.00193526,0,.653496,.539232,.00182463,0,.683588,.522352,.00170735,0,.714482,.506172,.00160555,0,.746032,.489842,.00150451,0,.777778,.473463,.00140938,0,.809524,.457266,.00132568,0,.84127,.441609,.0012376,0,.873016,.426348,.00116265,0,.904762,.411002,.00108935,0,.936508,.396045,.00101946,0,.968254,.381448,955665e-9,0,1,1,.0037121,0,0,1,.00371213,0,0,1,.00371251,0,0,.999997,.00371417,0,0,.99999,.00371863,0,0,.999977,.00372807,0,0,.99995,.00374529,0,0,.999908,.0037738,0,0,.999843,.00381789,0,123596e-10,.999745,.00388273,0,407442e-9,.999608,.00397443,0,.0015447,.999415,.00409998,0,.00351385,.999143,.00426662,0,.0063316,.9987,.00447625,0,.00998679,.996363,.00455323,0,.0144569,.994021,.00461052,0,.0197151,.992372,.00476359,0,.0257344,.991007,.00499101,0,.0324882,.988767,.0051972,0,.0399517,.984872,.00528407,0,.0481022,.982004,.00548926,0,.0569191,.977714,.00564385,0,.0663839,.973076,.0057693,0,.0764801,.967565,.0058924,0,.0871928,.961384,.00599629,0,.0985095,.954435,.00605998,0,.110419,.946303,.0061133,0,.122912,.937662,.00612028,0,.13598,.927867,.00612209,0,.149617,.916475,.00604813,0,.163817,.90541,.00603088,0,.178577,.891591,.00592218,0,.193894,.877573,.00578854,0,.209767,.862511,.00566648,0,.226196,.846861,.00551481,0,.243182,.83068,.00533754,0,.260728,.815725,.00515487,0,.278837,.802321,.0049655,0,.297515,.787826,.00475421,0,.316768,.773454,.00456002,0,.336605,.758224,.00434727,0,.357034,.74265,.00414444,0,.378067,.726729,.00393738,0,.399717,.710155,.00373575,0,.421998,.693312,.00353736,0,.444928,.67653,.00334368,0,.468523,.659444,.00315981,0,.492806,.642051,.00297809,0,.517798,.625758,.00280592,0,.543525,.609615,.00264254,0,.570012,.592919,.00248459,0,.597288,.576298,.00233327,0,.625379,.559489,.00219519,0,.654307,.542891,.00205441,0,.684084,.526255,.00193385,0,.714693,.509853,.00180745,0,.746044,.494131,.00169817,0,.777778,.478114,.0015913,0,.809524,.462274,.00148981,0,.84127,.446412,.00139537,0,.873016,.431274,.00130984,0,.904762,.41635,.00122403,0,.936508,.401476,.00114809,0,.968254,.386993,.00107563,0,1,1,.00488216,0,0,1,.0048822,0,0,1,.00488265,0,0,.999997,.00488463,0,0,.999988,.00488999,0,0,.999974,.00490129,0,0,.999946,.00492191,0,0,.999897,.00495598,0,0,.999825,.00500855,0,744791e-10,.999718,.00508559,0,712744e-9,.999565,.005194,0,.00215249,.999352,.00534147,0,.00444576,.999046,.00553523,0,.00759218,.998492,.00577016,0,.0115714,.995564,.00578487,0,.0163557,.993339,.00586414,0,.021915,.991834,.00606002,0,.0282201,.990496,.00633312,0,.0352433,.987826,.00651941,0,.042959,.98383,.00660842,0,.0513439,.98109,.00685523,0,.0603772,.976131,.00695778,0,.0700402,.971922,.00714236,0,.0803163,.965901,.00721437,0,.0911908,.959606,.00732017,0,.102651,.952504,.00735788,0,.114686,.944365,.00738493,0,.127286,.935652,.00737969,0,.140443,.925813,.00733612,0,.154151,.914397,.00723094,0,.168405,.903257,.00714002,0,.183201,.890015,.00700149,0,.198536,.876014,.00682813,0,.214409,.861436,.00665567,0,.23082,.845752,.00644526,0,.24777,.829169,.00621635,0,.265263,.813435,.00597789,0,.283301,.799701,.00575694,0,.301889,.785726,.00549866,0,.321035,.77152,.0052503,0,.340746,.75683,.00499619,0,.361032,.741951,.0047543,0,.381904,.726367,.0045084,0,.403374,.710537,.00426784,0,.425457,.693965,.00403487,0,.448169,.677724,.0038075,0,.47153,.66117,.00359431,0,.495561,.644274,.00338354,0,.520284,.627449,.00318163,0,.545725,.611645,.00299672,0,.571911,.595614,.00281016,0,.598873,.579426,.00264252,0,.62664,.563016,.00247509,0,.655239,.546728,.00232647,0,.684692,.530539,.00217803,0,.714999,.514164,.00204216,0,.746106,.498344,.00191403,0,.777778,.482957,.00179203,0,.809524,.467336,.00167695,0,.84127,.451994,.00157567,0,.873016,.436514,.00147113,0,.904762,.42178,.00138034,0,.936508,.407271,.00129219,0,.968254,.392822,.0012098,0,1,1,.00637427,0,0,1,.00637431,0,0,.999999,.00637485,0,0,.999996,.00637721,0,0,.999987,.00638357,0,0,.999971,.006397,0,0,.999939,.00642142,0,0,.999888,.00646177,0,0,.999807,.00652387,0,207916e-9,.999689,.00661454,0,.00112051,.99952,.00674155,0,.00287719,.999283,.00691313,0,.00550145,.998936,.00713598,0,.00897928,.998165,.00738501,0,.0132829,.994847,.00734388,0,.01838,.993182,.00749991,0,.0242381,.991665,.0077246,0,.030826,.989708,.00797579,0,.0381152,.986663,.00813011,0,.0460794,.983288,.00830365,0,.0546951,.980104,.00853496,0,.0639411,.974855,.00861045,0,.0737988,.97045,.00879133,0,.0842516,.964509,.00886377,0,.0952848,.957594,.00890346,0,.106886,.950546,.00893289,0,.119044,.942225,.00890074,0,.131749,.933365,.00886826,0,.144994,.923202,.0087316,0,.158772,.912605,.00863082,0,.173078,.901099,.00847403,0,.187908,.888177,.00825838,0,.203261,.873955,.00801834,0,.219134,.860091,.00779026,0,.235527,.84434,.00752478,0,.252443,.828517,.00724074,0,.269883,.81239,.00693769,0,.287851,.79721,.00664817,0,.306352,.783489,.00634763,0,.325393,.769514,.00604221,0,.344981,.755419,.00573568,0,.365126,.741083,.00544359,0,.385839,.726059,.00515515,0,.407132,.710809,.00487139,0,.42902,.695052,.00459846,0,.45152,.678886,.00433412,0,.474651,.663042,.00407981,0,.498433,.646634,.00384264,0,.52289,.630117,.00360897,0,.548048,.613804,.00338863,0,.573936,.598338,.00318486,0,.600584,.582687,.00298377,0,.628027,.566809,.00280082,0,.656295,.550817,.00262255,0,.685417,.534937,.00245835,0,.715406,.519151,.00230574,0,.74624,.503118,.0021549,0,.777778,.487723,.00202008,0,.809524,.472725,.00189355,0,.84127,.457599,.00177108,0,.873016,.442558,.00165843,0,.904762,.427624,.00155494,0,.936508,.413171,.00145273,0,.968254,.399122,.00136454,0,1,1,.00826496,0,0,1,.00826499,0,0,1,.00826564,0,0,.999996,.00826842,0,0,.999987,.00827589,0,0,.999967,.00829167,0,0,.999933,.00832037,0,0,.999876,.00836768,0,109338e-10,.999786,.00844031,0,427145e-9,.999655,.00854603,0,.0016384,.999468,.00869337,0,.00372392,.999203,.008891,0,.00668513,.998803,.00914387,0,.0104968,.99748,.00935838,0,.015125,.994446,.00933309,0,.0205338,.99292,.00953084,0,.0266884,.991414,.0097893,0,.0335565,.989049,.0100228,0,.0411086,.98582,.0101664,0,.0493181,.982441,.0103582,0,.0581613,.978595,.0105292,0,.0676169,.973495,.0106274,0,.0776661,.968405,.0107261,0,.0882926,.962717,.0108234,0,.0994817,.955478,.0108102,0,.111221,.948275,.0107914,0,.123499,.940006,.0107161,0,.136308,.930831,.0106309,0,.149639,.920648,.0104083,0,.163485,.910205,.0102312,0,.177843,.898445,.0100051,0,.192707,.885986,.00971928,0,.208077,.872204,.00940747,0,.22395,.858436,.0091085,0,.240326,.843454,.00876595,0,.257208,.827437,.00839794,0,.274596,.811488,.00803692,0,.292496,.796039,.00767352,0,.310911,.781083,.0073097,0,.329849,.767642,.00694032,0,.349316,.753901,.00657476,0,.369323,.740131,.00622699,0,.38988,.725845,.0058838,0,.410999,.710991,.00555586,0,.432696,.696002,.00523089,0,.454987,.680461,.00492494,0,.47789,.664875,.00463464,0,.501426,.649273,.00435422,0,.52562,.63302,.0040875,0,.550498,.61705,.00384075,0,.576089,.601154,.00359557,0,.602427,.586008,.00337636,0,.629544,.570699,.00316019,0,.657479,.555166,.00296033,0,.686264,.539645,.00277552,0,.715924,.524159,.00259499,0,.746459,.508682,.00243257,0,.777789,.493163,.00227851,0,.809524,.478004,.00213083,0,.84127,.46347,.00199502,0,.873016,.448778,.00186967,0,.904762,.434105,.00174732,0,.936508,.419576,.00163861,0,.968254,.405541,.00153341,0,1,1,.0106462,0,0,1,.0106462,0,0,.999999,.010647,0,0,.999995,.0106502,0,0,.999985,.0106589,0,0,.999964,.0106773,0,0,.999925,.0107106,0,0,.999861,.0107655,0,712986e-10,.999763,.0108497,0,743959e-9,.999616,.0109716,0,.00227361,.999408,.0111408,0,.0046983,.999112,.0113659,0,.00800158,.998637,.0116475,0,.0121493,.996223,.0117231,0,.0171023,.994006,.0118064,0,.0228218,.992444,.0120254,0,.0292711,.991028,.0123314,0,.036417,.98803,.0124954,0,.0442295,.984816,.0126538,0,.0526815,.981399,.0128537,0,.0617492,.977085,.0129694,0,.0714114,.972154,.013091,0,.0816495,.966617,.0131166,0,.0924472,.960628,.0131583,0,.10379,.953295,.0131094,0,.115665,.94575,.0129966,0,.128062,.937654,.0128796,0,.140972,.927716,.0126477,0,.154387,.917932,.0123889,0,.168301,.907719,.012131,0,.182709,.89584,.0118013,0,.197608,.883526,.0114145,0,.212994,.870301,.0110075,0,.228867,.856272,.0106019,0,.245227,.842251,.0101938,0,.262074,.826466,.00973254,0,.279412,.810859,.0092846,0,.297244,.795051,.00883304,0,.315575,.780053,.00840272,0,.334412,.76575,.00796438,0,.35376,.752298,.00752526,0,.373631,.739153,.00711486,0,.394034,.725514,.00670361,0,.414983,.711473,.00632656,0,.436491,.696936,.00595206,0,.458575,.682126,.00559191,0,.481253,.667027,.00525362,0,.504547,.651875,.00493805,0,.528481,.636463,.00462848,0,.553081,.620641,.00433936,0,.578377,.604931,.00407,0,.604404,.589549,.00380864,0,.631197,.574712,.00357049,0,.658795,.559775,.00334466,0,.687238,.544514,.00312505,0,.716559,.529555,.00293199,0,.746776,.514402,.00274204,0,.777849,.499302,.00256647,0,.809524,.484114,.00239901,0,.84127,.469308,.00225148,0,.873016,.455133,.00210178,0,.904762,.440939,.0019727,0,.936508,.426627,.00184382,0,.968254,.412509,.00172548,0,1,1,.013628,0,0,1,.0136281,0,0,.999999,.0136289,0,0,.999995,.0136327,0,0,.999983,.0136427,0,0,.99996,.0136638,0,0,.999917,.0137022,0,0,.999846,.0137652,0,204597e-9,.999736,.0138615,0,.00116837,.999573,.0140007,0,.00303325,.99934,.0141927,0,.00580613,.999004,.0144457,0,.00945626,.998407,.0147489,0,.0139421,.995464,.014731,0,.0192202,.993328,.0148283,0,.0252495,.991799,.0150797,0,.0319921,.990397,.0154316,0,.0394138,.986835,.0155005,0,.0474843,.983938,.0157308,0,.0561763,.980154,.0158753,0,.0654661,.975659,.0159581,0,.0753326,.970171,.0159832,0,.0857571,.964803,.0160084,0,.0967236,.958366,.0159484,0,.108218,.950613,.0158001,0,.120227,.942874,.0155845,0,.132741,.935005,.0154292,0,.145751,.924991,.0150742,0,.159249,.914814,.0146757,0,.17323,.904743,.0143097,0,.187687,.893216,.0138695,0,.202619,.880769,.0133706,0,.218021,.868136,.0128606,0,.233894,.85469,.0123403,0,.250238,.840593,.0118091,0,.267052,.825808,.011253,0,.284341,.81009,.0107099,0,.302106,.79504,.0101636,0,.320354,.779757,.00964041,0,.33909,.764697,.00911896,0,.358322,.750913,.00859533,0,.378059,.738175,.00811592,0,.398311,.725242,.00764504,0,.41909,.711864,.00718885,0,.440412,.698009,.00675843,0,.462292,.683841,.00634984,0,.484748,.669391,.00595502,0,.507802,.654731,.00558671,0,.531477,.639805,.00523578,0,.555802,.624789,.00490834,0,.580805,.609325,.00459448,0,.606522,.593975,.00430342,0,.63299,.578983,.00403019,0,.66025,.564442,.0037707,0,.688346,.549835,.0035316,0,.717319,.535039,.00330255,0,.7472,.520403,.00308932,0,.777982,.505687,.00289335,0,.809524,.490939,.00270818,0,.84127,.476233,.0025343,0,.873016,.461624,.00237097,0,.904762,.447833,.00222065,0,.936508,.433992,.00207561,0,.968254,.420147,.00194955,0,1,1,.0173415,0,0,1,.0173416,0,0,.999999,.0173426,0,0,.999995,.0173468,0,0,.999983,.0173582,0,0,.999954,.0173822,0,0,.999908,.0174258,0,669501e-11,.999828,.0174973,0,427399e-9,.999705,.0176063,0,.00171019,.999524,.0177631,0,.0039248,.999263,.0179781,0,.00705382,.998878,.018258,0,.0110552,.998012,.0185551,0,.0158812,.994614,.0184264,0,.0214852,.993132,.0186385,0,.0278239,.991563,.0189067,0,.0348585,.989298,.0191577,0,.0425544,.986036,.0192522,0,.050881,.982558,.0194063,0,.059811,.978531,.019486,0,.0693209,.974198,.0195847,0,.0793895,.968148,.0194749,0,.0899984,.962565,.0194277,0,.101132,.956041,.0192991,0,.112775,.947749,.0189893,0,.124917,.94018,.018704,0,.137547,.93165,.0183458,0,.150655,.921798,.0178775,0,.164236,.911573,.0173618,0,.178281,.901569,.0168482,0,.192788,.890341,.016265,0,.207752,.877835,.0156199,0,.223171,.865472,.0149516,0,.239044,.852905,.0143274,0,.255371,.838906,.0136643,0,.272153,.824888,.0129903,0,.289393,.809977,.0123218,0,.307093,.794697,.0116572,0,.325259,.780028,.0110307,0,.343896,.765124,.0104236,0,.363012,.750411,.0098219,0,.382617,.737264,.00924397,0,.402719,.724799,.00868719,0,.423332,.712253,.00816476,0,.444469,.699267,.00767262,0,.466146,.685618,.00719746,0,.488383,.671736,.00673916,0,.511199,.657777,.00631937,0,.534618,.643497,.00592411,0,.558668,.62889,.00553928,0,.58338,.614299,.0051934,0,.608787,.599197,.00485985,0,.634929,.584175,.00454357,0,.661849,.569541,.00425787,0,.689594,.555193,.00397905,0,.718211,.540947,.00372364,0,.747742,.526593,.00348599,0,.778205,.512335,.00326103,0,.80953,.498017,.00305137,0,.84127,.483609,.00285485,0,.873016,.469368,.00267472,0,.904762,.455037,.00249945,0,.936508,.441493,.00234792,0,.968254,.428147,.00219936,0,1,1,.0219422,0,0,1,.0219423,0,0,.999998,.0219434,0,0,.999993,.0219481,0,0,.999981,.021961,0,0,.999949,.0219879,0,0,.999896,.0220367,0,593194e-10,.999808,.0221167,0,75364e-8,.99967,.0222383,0,.00237884,.999466,.0224125,0,.00495612,.999174,.0226495,0,.00844887,.998725,.0229525,0,.0128058,.996979,.0231123,0,.0179742,.994317,.0230742,0,.0239047,.992781,.0232895,0,.0305526,.991191,.0235734,0,.0378786,.987787,.0236152,0,.0458475,.985092,.0237994,0,.0544287,.981121,.0238553,0,.0635952,.976924,.0238706,0,.0733233,.97218,.0238704,0,.0835922,.965956,.0236598,0,.0943839,.959998,.0234735,0,.105682,.953245,.0232277,0,.117474,.944445,.0226973,0,.129747,.937087,.0223527,0,.142491,.928341,.0218144,0,.155697,.9184,.0211516,0,.169358,.907959,.0204553,0,.183469,.89808,.0197673,0,.198024,.887047,.0189915,0,.21302,.875221,.0182082,0,.228455,.86269,.0173584,0,.244329,.850735,.0165718,0,.260639,.837545,.0157524,0,.277389,.823639,.0149482,0,.29458,.809699,.0141431,0,.312216,.794797,.0133527,0,.3303,.780578,.0126193,0,.34884,.766019,.0118914,0,.367842,.751447,.0111839,0,.387315,.737275,.010514,0,.40727,.724545,.00987277,0,.427717,.712644,.00926569,0,.448671,.700432,.00869029,0,.470149,.687664,.00814691,0,.492167,.674288,.00763012,0,.514746,.660966,.00714437,0,.537911,.647264,.00668457,0,.561688,.633431,.00626581,0,.586108,.619133,.00585593,0,.611206,.604935,.00548188,0,.637022,.590236,.00513288,0,.663599,.575473,.0047906,0,.690989,.561228,.00448895,0,.719242,.547054,.00420233,0,.748411,.533175,.00392869,0,.778531,.519163,.00367445,0,.809583,.505328,.00344097,0,.84127,.491446,.00322003,0,.873016,.477356,.00301283,0,.904762,.46356,.00282592,0,.936508,.449623,.00264956,0,.968254,.436068,.00246956,0,1,1,.0276135,0,0,1,.0276136,0,0,.999998,.0276148,0,0,.999993,.0276201,0,0,.999976,.0276342,0,0,.999945,.027664,0,0,.999884,.0277179,0,18679e-8,.999784,.027806,0,.00119607,.99963,.0279394,0,.00318407,.999401,.0281295,0,.00613601,.999066,.0283858,0,.00999963,.998524,.0287027,0,.0147164,.995702,.0286256,0,.0202295,.993593,.0286733,0,.0264876,.992067,.0288989,0,.0334452,.990548,.0292135,0,.0410621,.986775,.0291296,0,.0493032,.984054,.0293099,0,.0581381,.979481,.0291881,0,.0675397,.975297,.0291598,0,.0774848,.96981,.028954,0,.0879528,.963524,.028628,0,.0989258,.957398,.0283135,0,.110388,.950088,.0278469,0,.122327,.941538,.0271798,0,.134729,.933332,.0265388,0,.147587,.924392,.0257776,0,.160889,.914581,.024916,0,.174631,.904347,.0240242,0,.188806,.894324,.0231229,0,.203409,.883724,.022153,0,.218437,.872207,.0211355,0,.233888,.859927,.0201048,0,.249761,.848373,.0191263,0,.266056,.836023,.0181306,0,.282774,.82289,.0171718,0,.299917,.809324,.0162196,0,.317488,.795361,.0152622,0,.335493,.781253,.01439,0,.353936,.767338,.013533,0,.372825,.753156,.0127244,0,.392168,.739122,.0119454,0,.411976,.725358,.0112054,0,.432259,.712949,.010487,0,.453032,.701621,.00984032,0,.47431,.689703,.00921495,0,.496111,.677216,.00862492,0,.518456,.664217,.00806882,0,.541367,.65137,.00755922,0,.564872,.638,.00705705,0,.589001,.62453,.00661266,0,.613789,.610601,.00618432,0,.639277,.59676,.00578033,0,.66551,.582433,.00540927,0,.692539,.568026,.00506104,0,.720422,.55414,.0047353,0,.749216,.540178,.00442889,0,.778974,.526513,.00414363,0,.809711,.512954,.00388237,0,.84127,.499403,.00362875,0,.873016,.486026,.00340827,0,.904762,.472345,.00318598,0,.936508,.458828,.00297635,0,.968254,.445379,.00279447,0,1,1,.0345716,0,0,1,.0345717,0,0,.999999,.034573,0,0,.999991,.0345787,0,0,.999974,.0345941,0,0,.999937,.0346263,0,188589e-11,.999869,.0346847,0,409238e-9,.999757,.0347798,0,.0017674,.999582,.0349233,0,.00413658,.999322,.0351265,0,.00747408,.998939,.0353967,0,.0117157,.998219,.0357018,0,.0167966,.994974,.0354726,0,.0226572,.993201,.0355621,0,.0292445,.991573,.0357641,0,.0365123,.989301,.0359252,0,.0444203,.985712,.0358017,0,.0529334,.982411,.0358353,0,.0620214,.977827,.035617,0,.0716574,.973278,.0354398,0,.0818186,.967397,.0350483,0,.0924846,.960696,.0344795,0,.103638,.954349,.0339861,0,.115263,.946066,.0331323,0,.127348,.938012,.032359,0,.13988,.929413,.0314413,0,.152849,.920355,.0304103,0,.166248,.910586,.0292785,0,.18007,.900609,.0281391,0,.194308,.890093,.0269103,0,.208958,.880013,.0257269,0,.224018,.869001,.0244671,0,.239485,.85751,.0232252,0,.255359,.84582,.0220117,0,.271638,.834383,.0208274,0,.288324,.822158,.0196628,0,.305419,.809056,.0185306,0,.322927,.795832,.0174174,0,.340851,.782547,.0163758,0,.359199,.7689,.015391,0,.377975,.755526,.0144488,0,.397189,.741681,.0135372,0,.416851,.728178,.0126957,0,.436971,.714642,.0118812,0,.457564,.702756,.0111165,0,.478644,.69175,.0104145,0,.500229,.680159,.00974439,0,.522339,.668073,.00911926,0,.544997,.655405,.00851393,0,.56823,.642921,.00797637,0,.592068,.629993,.00745119,0,.616546,.616828,.00696972,0,.641705,.603305,.00652425,0,.66759,.589833,.00610188,0,.694255,.575945,.00570834,0,.72176,.561745,.00533384,0,.750168,.548277,.00500001,0,.779545,.534467,.00467582,0,.809933,.521032,.00438092,0,.841272,.507877,.00410348,0,.873016,.494654,.00383618,0,.904762,.481592,.00358699,0,.936508,.468509,.00337281,0,.968254,.455293,.00316196,0,1,1,.0430698,0,0,1,.0430699,0,0,.999998,.0430713,0,0,.999991,.0430773,0,0,.99997,.0430936,0,0,.999928,.0431277,0,406396e-10,.999852,.0431893,0,744376e-9,.999724,.0432895,0,.0024806,.999527,.0434397,0,.00524779,.99923,.0436507,0,.00898164,.998783,.0439255,0,.0136083,.997507,.0441104,0,.0190582,.994418,.0438225,0,.0252694,.992864,.0439396,0,.0321879,.991127,.0440962,0,.039767,.987331,.0438408,0,.0479667,.984819,.0438991,0,.056752,.980384,.0435906,0,.0660929,.975846,.0432543,0,.075963,.970748,.0428293,0,.0863398,.964303,.042153,0,.0972035,.95772,.0414111,0,.108537,.950747,.0405893,0,.120325,.942533,.0394887,0,.132554,.934045,.0383544,0,.145215,.924942,.037057,0,.158296,.915811,.0356993,0,.17179,.90612,.0342401,0,.185691,.896434,.0328078,0,.199993,.886021,.031288,0,.214691,.876081,.0297776,0,.229782,.865608,.0282334,0,.245265,.854924,.026749,0,.261138,.843607,.02526,0,.277401,.832456,.0238214,0,.294056,.821342,.0224682,0,.311104,.809303,.0211297,0,.328548,.796468,.0198387,0,.346394,.784046,.0186227,0,.364645,.771262,.0174561,0,.38331,.758118,.0163806,0,.402396,.745075,.0153287,0,.421912,.731926,.0143647,0,.44187,.71863,.0134363,0,.462283,.705414,.0125603,0,.483165,.693792,.0117508,0,.504535,.683108,.0110016,0,.52641,.67183,.0102757,0,.548816,.66015,.00962044,0,.571776,.647907,.00898031,0,.595323,.635734,.00840811,0,.619489,.623208,.00786211,0,.644317,.610438,.00734953,0,.669852,.597345,.00687688,0,.696148,.584138,.00643469,0,.723267,.5707,.00602236,0,.75128,.556966,.0056324,0,.780258,.543607,.00528277,0,.810268,.530213,.00493999,0,.841311,.516912,.00462265,0,.873016,.503916,.0043307,0,.904762,.491146,.00406858,0,.936508,.478439,.00381436,0,.968254,.465834,.00358003,0,1,1,.0534039,0,0,1,.053404,0,0,.999998,.0534055,0,0,.999989,.0534116,0,0,.999968,.0534283,0,0,.999918,.0534633,0,155895e-9,.99983,.0535262,0,.00120914,.999685,.0536281,0,.00334944,.999461,.0537799,0,.00653077,.999119,.0539902,0,.0106718,.998582,.0542524,0,.0156907,.995919,.0540318,0,.0215147,.993735,.0538914,0,.0280801,.992126,.0539557,0,.0353323,.990266,.0540401,0,.0432247,.986317,.0536064,0,.0517172,.983213,.0534425,0,.0607754,.978303,.0528622,0,.0703698,.973665,.0523363,0,.0804742,.968091,.0516165,0,.0910667,.961026,.0505434,0,.102128,.954333,.049523,0,.113641,.946372,.0481698,0,.125591,.938254,.0467674,0,.137965,.929516,.0452341,0,.150754,.920106,.0435083,0,.163947,.910899,.0417399,0,.177537,.901532,.0399389,0,.191516,.891919,.0380901,0,.205881,.882006,.0362341,0,.220626,.871965,.0343444,0,.235749,.862145,.0324832,0,.251248,.852058,.0306681,0,.267121,.84161,.0289097,0,.283368,.830806,.0272079,0,.299992,.820476,.0256089,0,.316992,.809514,.0240394,0,.334374,.797865,.0225379,0,.35214,.785621,.0211235,0,.370296,.773765,.0197908,0,.388849,.761629,.0185235,0,.407807,.748891,.0173358,0,.427178,.736437,.0162305,0,.446974,.723707,.0151778,0,.467207,.710606,.0141791,0,.487892,.698019,.0132592,0,.509046,.686203,.0123887,0,.530687,.675692,.0115976,0,.552839,.664826,.0108325,0,.575527,.65349,.0101348,0,.59878,.641774,.00947756,0,.622634,.629794,.00886058,0,.647128,.617647,.00828526,0,.672308,.60534,.00775312,0,.698231,.592718,.00726033,0,.724958,.579746,.00679731,0,.752563,.566763,.00636111,0,.781127,.553515,.00595228,0,.810733,.540118,.00556876,0,.841426,.527325,.00523051,0,.873016,.514265,.00490712,0,.904762,.501406,.00460297,0,.936508,.488922,.00431247,0,.968254,.476541,.0040472,0,1,1,.0659184,0,0,1,.0659185,0,0,.999998,.06592,0,0,.999988,.0659259,0,0,.999963,.0659423,0,0,.999907,.0659764,0,374198e-9,.999806,.0660376,0,.00182071,.999639,.0661361,0,.0043894,.999378,.0662814,0,.00800055,.998985,.0664779,0,.0125594,.998285,.0666914,0,.0179786,.995071,.0661989,0,.0241822,.993172,.0660454,0,.031106,.991438,.0660105,0,.0386952,.988428,.0656875,0,.0469032,.985218,.0652913,0,.0556905,.981128,.0647107,0,.065023,.976015,.0638491,0,.0748717,.97097,.062993,0,.0852112,.964582,.0617927,0,.0960199,.957383,.0603626,0,.107279,.949969,.0588128,0,.118971,.941843,.0570274,0,.131084,.933624,.0551885,0,.143604,.924543,.053122,0,.156521,.914919,.0508897,0,.169825,.905773,.0486418,0,.18351,.896434,.0463364,0,.197569,.887195,.0440623,0,.211997,.877706,.0417799,0,.226789,.867719,.03945,0,.241944,.858587,.037243,0,.257458,.849317,.0350956,0,.273331,.839585,.0329852,0,.289563,.829856,.0310028,0,.306154,.819589,.0290953,0,.323108,.809714,.0272738,0,.340426,.79934,.0255631,0,.358113,.788224,.0239175,0,.376175,.776619,.0223831,0,.394616,.76521,.0209298,0,.413445,.753716,.0195786,0,.432671,.741564,.0183001,0,.452305,.729413,.0171259,0,.472358,.717146,.0159933,0,.492845,.70436,.0149495,0,.513783,.69219,.0139681,0,.535189,.680289,.0130577,0,.557087,.669611,.0122198,0,.5795,.659113,.0114174,0,.602459,.648148,.0106729,0,.625997,.636905,.00998997,0,.650154,.625154,.00934313,0,.674976,.613481,.00874839,0,.700518,.60154,.00818265,0,.726845,.58943,.00766889,0,.754032,.576828,.00717153,0,.782167,.564194,.00672696,0,.811344,.551501,.00630863,0,.841644,.538635,.00592177,0,.873016,.525724,.00554888,0,.904762,.513209,.00520225,0,.936508,.500457,.00488231,0,.968254,.48799,.00457153,0,1,1,.0810131,0,0,1,.0810133,0,0,.999997,.0810145,0,0,.999985,.08102,0,0,.999956,.0810347,0,195026e-10,.999893,.0810656,0,719316e-9,.999777,.0811205,0,.00259774,.999583,.081208,0,.00561807,.999281,.0813343,0,.00967472,.998813,.0814969,0,.0146627,.997597,.0815217,0,.0204902,.994379,.0808502,0,.0270802,.992744,.0806792,0,.0343674,.990745,.0804589,0,.0422974,.986646,.0796107,0,.0508242,.983611,.0790913,0,.0599087,.978869,.0780746,0,.0695175,.973475,.0768218,0,.0796223,.967845,.0754926,0,.0901983,.960778,.0737063,0,.101224,.953333,.0718052,0,.112682,.945274,.0695946,0,.124555,.936955,.0672492,0,.136831,.928319,.0647732,0,.149496,.919075,.0620947,0,.162542,.909114,.0591816,0,.175958,.900137,.0563917,0,.189739,.891069,.0535392,0,.203877,.882262,.0507642,0,.218368,.873232,.0479793,0,.233208,.864042,.045226,0,.248393,.855002,.0425413,0,.263923,.846569,.0400126,0,.279796,.837714,.0375269,0,.296012,.828918,.0352027,0,.312573,.819783,.0330011,0,.329479,.810129,.0308908,0,.346734,.800866,.0289112,0,.364342,.79093,.0270255,0,.382307,.780593,.0252758,0,.400637,.769511,.0236178,0,.419337,.758558,.0220652,0,.438418,.747632,.0206289,0,.457889,.736146,.0192873,0,.477761,.724093,.0180333,0,.49805,.71234,.0168264,0,.51877,.700201,.015746,0,.53994,.687949,.0147027,0,.561581,.676163,.0137512,0,.583718,.665001,.0128655,0,.60638,.65472,.0120366,0,.629599,.644213,.0112604,0,.653415,.633382,.0105413,0,.677874,.62212,.00986498,0,.70303,.610631,.00923308,0,.728948,.599078,.00864206,0,.755706,.587519,.00811784,0,.783396,.575505,.00761237,0,.812121,.563148,.00713949,0,.841989,.550828,.00668379,0,.873035,.538458,.00627715,0,.904762,.525905,.00588336,0,.936508,.513517,.00552687,0,.968254,.501395,.00519681,0,1,1,.0991506,0,0,1,.0991504,0,0,.999996,.0991515,0,0,.999984,.0991558,0,0,.999947,.0991672,0,114389e-9,.999874,.0991912,0,.00121503,.999739,.0992331,0,.00356108,.999514,.0992983,0,.00705578,.999159,.0993877,0,.011574,.998586,.0994837,0,.017003,.995731,.0988425,0,.0232484,.993384,.098276,0,.0302318,.991615,.0979269,0,.0378884,.989029,.0973432,0,.0461641,.985373,.0963539,0,.0550136,.981278,.0952306,0,.0643988,.975777,.0936233,0,.0742868,.970526,.0920219,0,.0846501,.963755,.0898912,0,.0954644,.956676,.0876064,0,.106709,.948099,.0847751,0,.118367,.939718,.0818638,0,.130423,.931305,.078857,0,.142862,.922342,.0756127,0,.155674,.912842,.0721473,0,.168849,.903304,.0686195,0,.182378,.89411,.0650589,0,.196255,.885512,.0616022,0,.210473,.877193,.0582434,0,.225027,.86877,.0548979,0,.239915,.860267,.0516095,0,.255132,.851915,.048468,0,.270678,.843912,.0454447,0,.286551,.83604,.0425612,0,.302751,.828245,.0398752,0,.31928,.820159,.0373198,0,.336138,.81167,.034916,0,.35333,.802659,.0326402,0,.370858,.793921,.0304901,0,.388728,.784713,.0284857,0,.406944,.774946,.0266186,0,.425515,.76448,.0248593,0,.444449,.753793,.0232114,0,.463756,.743506,.0217039,0,.483447,.732555,.0202841,0,.503535,.720965,.0189648,0,.524036,.709422,.0177189,0,.544968,.697756,.0165626,0,.56635,.685565,.015483,0,.588208,.673987,.0144892,0,.610569,.66244,.0135607,0,.633466,.651675,.0126956,0,.656936,.641598,.0118788,0,.681025,.63121,.0111261,0,.705788,.620514,.010437,0,.731289,.609366,.00978747,0,.757606,.598137,.00917257,0,.784834,.586966,.00859778,0,.813085,.575549,.00806803,0,.842485,.563797,.00757294,0,.87313,.551758,.00710592,0,.904762,.539894,.0066841,0,.936508,.527901,.00627901,0,.968254,.515819,.00590506,0,1,1,.120864,0,0,1,.120864,0,0,.999996,.120864,0,0,.99998,.120867,0,0,.99994,.120872,0,323781e-9,.999852,.120884,0,.00188693,.999693,.120903,0,.00473489,.999426,.120929,0,.00872704,.999002,.120955,0,.0137237,.998235,.120918,0,.0196068,.994608,.119764,0,.0262803,.992997,.119265,0,.0336657,.990968,.11863,0,.0416987,.987002,.117261,0,.0503261,.983524,.116009,0,.0595035,.97875,.114252,0,.0691935,.972652,.11193,0,.0793645,.966613,.109555,0,.0899894,.959275,.106612,0,.101045,.951272,.103375,0,.112512,.942323,.0996594,0,.124372,.933679,.0958841,0,.136611,.924822,.0919265,0,.149216,.915742,.0878061,0,.162176,.906348,.0834894,0,.175482,.896883,.079085,0,.189125,.88774,.0746745,0,.203098,.87986,.0705773,0,.217396,.871998,.0665005,0,.232015,.864325,.0625413,0,.24695,.856685,.0586781,0,.2622,.84925,.0550063,0,.277761,.841719,.0514727,0,.293634,.834755,.0481398,0,.309819,.827853,.0450172,0,.326315,.820888,.0420969,0,.343126,.813616,.0393702,0,.360254,.805767,.0367771,0,.377701,.797338,.0343274,0,.395474,.789122,.0320529,0,.413577,.780601,.0299485,0,.432018,.771424,.0279812,0,.450804,.761502,.0261054,0,.469944,.751166,.0243942,0,.489451,.741276,.0228087,0,.509337,.730898,.0213265,0,.529617,.719878,.0199307,0,.550307,.708379,.0186574,0,.571428,.697165,.0174446,0,.593003,.685554,.0163144,0,.615059,.673631,.015276,0,.637628,.662385,.0143003,0,.660746,.651059,.0134112,0,.68446,.640451,.0125794,0,.70882,.630536,.011793,0,.733893,.620316,.0110547,0,.759756,.609722,.0103668,0,.786505,.598804,.00973009,0,.814259,.587871,.00912812,0,.843157,.577121,.00858916,0,.87334,.566019,.00807333,0,.904762,.554664,.00759687,0,.936508,.543101,.00714759,0,.968254,.531558,.00673418,0,1,1,.146767,0,0,1,.146767,0,0,.999997,.146767,0,0,.999977,.146765,0,320658e-11,.999929,.146762,0,682576e-9,.999823,.146753,0,.00276402,.999633,.146735,0,.00614771,.999314,.146699,0,.0106613,.998796,.14662,0,.0161546,.997124,.146107,0,.0225063,.994062,.144857,0,.0296198,.992154,.144011,0,.037417,.989186,.142712,0,.0458348,.985279,.140926,0,.0548211,.980826,.13885,0,.0643326,.975056,.136168,0,.074333,.969005,.133217,0,.0847917,.961554,.12959,0,.0956828,.954206,.125886,0,.106984,.945046,.121335,0,.118675,.935678,.116492,0,.130741,.926748,.111635,0,.143166,.917764,.106625,0,.155939,.908358,.101325,0,.169049,.899219,.0960249,0,.182487,.890089,.0906527,0,.196245,.881488,.0853905,0,.210317,.874031,.0804177,0,.224697,.866932,.0756005,0,.23938,.859976,.0709019,0,.254364,.853375,.0664391,0,.269646,.846971,.0622012,0,.285223,.840483,.058129,0,.301096,.833969,.0542762,0,.317265,.82806,.0507042,0,.333729,.822128,.047368,0,.350491,.815989,.044272,0,.367554,.809336,.0413444,0,.38492,.802177,.038601,0,.402594,.79441,.0360227,0,.420582,.786573,.0336383,0,.438891,.778619,.0314321,0,.457527,.77,.029362,0,.476499,.760698,.0274102,0,.49582,.750932,.0256146,0,.5155,.740993,.023974,0,.535555,.731159,.0224182,0,.556,.720836,.0209889,0,.576855,.709913,.0196411,0,.598143,.698415,.0183824,0,.619888,.68745,.0172222,0,.642123,.676154,.0161509,0,.664883,.664383,.0151397,0,.688211,.6533,.0141873,0,.71216,.642072,.0133105,0,.736792,.631412,.0124932,0,.762186,.621622,.0117408,0,.788439,.611681,.0110358,0,.815672,.60142,.0103775,0,.844034,.59083,.00975623,0,.873699,.580254,.00918084,0,.904765,.569841,.00864721,0,.936508,.559224,.00815731,0,.968254,.548315,.00767924,0,1,1,.177563,0,0,1,.177563,0,0,.999994,.177562,0,0,.999972,.177555,0,664171e-10,.999914,.177536,0,.0012276,.999787,.177496,0,.00388025,.999556,.17742,0,.00783463,.999165,.177285,0,.0128953,.9985,.177037,0,.0189053,.995388,.175634,0,.025742,.993102,.174375,0,.033309,.990992,.173121,0,.0415298,.986932,.170896,0,.0503425,.982786,.16847,0,.0596964,.977592,.165455,0,.0695498,.971075,.161676,0,.0798676,.963967,.157458,0,.0906201,.956397,.152836,0,.101783,.947489,.147467,0,.113333,.937564,.14145,0,.125254,.928182,.135383,0,.137529,.919027,.129212,0,.150144,.909618,.12276,0,.163088,.900492,.116273,0,.176351,.891671,.1098,0,.189924,.883146,.103362,0,.203799,.875151,.0970799,0,.21797,.868338,.0911732,0,.232433,.862033,.0854966,0,.247182,.856107,.0800691,0,.262216,.850644,.0749618,0,.27753,.845261,.070079,0,.293124,.839885,.0654321,0,.308997,.834609,.0610975,0,.325149,.829083,.0569741,0,.341581,.82404,.0531736,0,.358294,.818968,.049665,0,.37529,.813496,.0463856,0,.392573,.807533,.0433217,0,.410148,.80099,.0404402,0,.428019,.793891,.0377578,0,.446192,.786281,.0352616,0,.464676,.778773,.0329577,0,.483478,.770737,.030808,0,.502608,.762094,.0287964,0,.522079,.752898,.0269254,0,.541905,.743306,.0251926,0,.5621,.733416,.023595,0,.582684,.723742,.0221155,0,.603677,.713542,.0207435,0,.625106,.702755,.019434,0,.646998,.691484,.0182046,0,.66939,.680531,.0170771,0,.692324,.66953,.0160339,0,.715849,.658126,.0150677,0,.740028,.646933,.0141551,0,.764937,.636107,.0133179,0,.790673,.625271,.0125284,0,.817358,.615225,.0117937,0,.84515,.605678,.0111181,0,.874244,.59583,.0104759,0,.904828,.585704,.00986672,0,.936508,.575413,.00929712,0,.968254,.565373,.00876713,0,1,1,.214058,0,0,.999999,.214058,0,0,.999994,.214055,0,0,.999966,.214039,0,259642e-9,.999893,.213998,0,.00200075,.999737,.21391,0,.00527775,.999449,.213745,0,.00983959,.99896,.213458,0,.0154755,.9979,.212855,0,.0220249,.994278,.210779,0,.0293654,.992254,.20926,0,.0374021,.98881,.206908,0,.0460604,.984715,.204009,0,.0552802,.979738,.200471,0,.0650127,.972884,.195813,0,.0752175,.965996,.190856,0,.0858612,.957974,.185077,0,.0969155,.949155,.17868,0,.108356,.939288,.171513,0,.120163,.928996,.163838,0,.132319,.919563,.156246,0,.144808,.910004,.148359,0,.157618,.900791,.140417,0,.170737,.892135,.132569,0,.184155,.883803,.124741,0,.197866,.876034,.117091,0,.211861,.869219,.109835,0,.226134,.863062,.102859,0,.240682,.857795,.0962928,0,.255499,.853009,.0900725,0,.270583,.848603,.0842101,0,.285931,.844335,.0786527,0,.301542,.840208,.0734397,0,.317415,.836035,.0685334,0,.33355,.83172,.0639275,0,.349948,.827135,.0595909,0,.36661,.822797,.0556204,0,.383539,.818387,.0519394,0,.400738,.813565,.0485317,0,.41821,.808142,.0453138,0,.435961,.802212,.0423354,0,.453997,.79573,.0395553,0,.472324,.788741,.036988,0,.490951,.781093,.0345688,0,.509887,.773597,.0323297,0,.529144,.765622,.0302719,0,.548735,.757083,.0283477,0,.568674,.747992,.0265562,0,.588979,.738591,.0248844,0,.609671,.728719,.0233342,0,.630773,.719146,.0219081,0,.652314,.709165,.0205711,0,.674328,.69875,.0193248,0,.696854,.687884,.0181582,0,.719942,.676818,.0170746,0,.743651,.666247,.0160718,0,.768057,.655284,.0151262,0,.793253,.64401,.0142561,0,.819363,.633353,.0134327,0,.846547,.622674,.012653,0,.875017,.612265,.0119354,0,.905021,.602455,.0112533,0,.936508,.593147,.0106234,0,.968254,.583592,.0100213,0,1,1,.25717,0,0,1,.25717,0,0,.999992,.257164,0,0,.999958,.257135,0,641715e-9,.999864,.25706,0,.00305314,.999666,.256897,0,.00700975,.999302,.256596,0,.0122194,.998663,.25607,0,.0184622,.995607,.254123,0,.0255773,.993094,.252081,0,.0334439,.9907,.249867,0,.0419696,.98594,.246118,0,.0510823,.981214,.242049,0,.0607242,.974966,.236869,0,.0708486,.967589,.230724,0,.081417,.95915,.223635,0,.0923974,.950257,.21596,0,.103763,.940165,.207296,0,.115491,.929396,.197901,0,.127562,.919288,.188437,0,.13996,.909428,.178762,0,.15267,.900105,.169072,0,.165679,.891418,.159478,0,.178979,.883347,.15002,0,.192558,.875992,.140813,0,.20641,.869466,.13196,0,.220529,.863699,.123501,0,.234907,.858553,.115436,0,.249542,.854379,.107901,0,.264428,.850894,.10088,0,.279564,.847632,.0942296,0,.294947,.844571,.0879861,0,.310575,.84163,.0821534,0,.326448,.838542,.0766409,0,.342566,.835412,.0715322,0,.358929,.831899,.0666883,0,.37554,.828177,.0622175,0,.392399,.82416,.0580452,0,.409511,.820393,.054267,0,.426878,.816068,.0507172,0,.444506,.811201,.0474041,0,.4624,.805785,.0443174,0,.480566,.799878,.0414562,0,.499013,.793469,.0388147,0,.517749,.786473,.0363453,0,.536785,.778874,.0340225,0,.556134,.771277,.0318599,0,.575809,.763426,.0298859,0,.595827,.755044,.0280357,0,.616207,.746161,.0262979,0,.636973,.737124,.0247295,0,.65815,.72761,.0232514,0,.679772,.717822,.0218755,0,.701876,.708279,.0205942,0,.724509,.698333,.0193947,0,.74773,.68802,.0182717,0,.771609,.677321,.0172044,0,.79624,.666504,.0162122,0,.821743,.656184,.0152924,0,.84828,.64556,.0144326,0,.876069,.634636,.0136157,0,.905404,.624124,.0128612,0,.936508,.613914,.0121435,0,.968254,.603589,.0114887,0,1,1,.307946,0,0,.999999,.307945,0,0,.999988,.307934,0,204479e-10,.999944,.307886,0,.00127833,.999824,.307756,0,.00445047,.999565,.30748,0,.00914673,.999085,.306966,0,.0150498,.998103,.306004,0,.0219367,.994249,.303028,0,.0296485,.991807,.300435,0,.038068,.987773,.296554,0,.0471062,.982673,.2916,0,.0566942,.976623,.285641,0,.0667768,.968757,.27815,0,.0773099,.959849,.269529,0,.088257,.950663,.260248,0,.0995879,.940129,.249704,0,.111277,.92895,.238291,0,.123304,.917996,.226501,0,.13565,.907813,.214669,0,.148299,.898305,.202835,0,.161237,.889626,.191158,0,.174455,.88175,.179695,0,.187941,.874715,.168548,0,.201687,.868746,.15792,0,.215687,.863703,.147807,0,.229933,.859315,.138149,0,.24442,.855538,.128993,0,.259145,.852428,.120414,0,.274103,.850168,.112498,0,.289293,.848132,.105054,0,.304711,.846291,.0981087,0,.320357,.844431,.0915942,0,.33623,.842493,.0855056,0,.35233,.840368,.0798204,0,.368658,.83798,.0745097,0,.385214,.83523,.0695424,0,.402002,.832091,.0649092,0,.419023,.828667,.0606291,0,.436282,.824805,.0566523,0,.453782,.820988,.0530229,0,.471529,.816635,.0496364,0,.489528,.811725,.0464658,0,.507788,.806316,.0435082,0,.526317,.800469,.0407873,0,.545124,.794107,.038255,0,.564221,.787218,.0358825,0,.583621,.779872,.0336785,0,.603341,.772097,.0316379,0,.623397,.764484,.0297379,0,.643812,.756428,.0279581,0,.664611,.748022,.0263153,0,.685824,.739268,.0247799,0,.707488,.73024,.0233385,0,.729646,.720893,.0220035,0,.752354,.71119,.0207555,0,.77568,.701791,.0195843,0,.799715,.692184,.0184891,0,.824574,.682258,.0174541,0,.850417,.67206,.0164873,0,.877466,.661717,.0155959,0,.90604,.651462,.0147519,0,.936528,.641467,.0139727,0,.968254,.631229,.0132363,0,1,1,.367573,0,0,.999999,.367571,0,0,.999984,.367553,0,183382e-9,.999925,.367473,0,.00225254,.999759,.367259,0,.00628165,.99941,.366801,0,.0117858,.998739,.365946,0,.0184359,.995529,.363191,0,.0260114,.992875,.360171,0,.0343581,.989135,.355981,0,.0433637,.984166,.350401,0,.0529438,.977871,.343348,0,.0630334,.96951,.334341,0,.0735805,.959964,.323862,0,.0845437,.950162,.312521,0,.095889,.938882,.299577,0,.107588,.926992,.285573,0,.119617,.915589,.271212,0,.131957,.904791,.256611,0,.144591,.895177,.242224,0,.157503,.886403,.227952,0,.170682,.878957,.214192,0,.184117,.872418,.200795,0,.197799,.867029,.188015,0,.21172,.862835,.175975,0,.225873,.859411,.164526,0,.240253,.856655,.153693,0,.254854,.854519,.14352,0,.269673,.852828,.13397,0,.284707,.851412,.124984,0,.299953,.850609,.116748,0,.315408,.849855,.10905,0,.331073,.849017,.101839,0,.346946,.848079,.0951359,0,.363028,.846911,.0888774,0,.379318,.845445,.0830375,0,.395818,.84362,.0775844,0,.41253,.841411,.0725054,0,.429457,.838768,.0677691,0,.446602,.835801,.0634016,0,.463968,.832341,.0593095,0,.481561,.828424,.0555121,0,.499386,.824312,.052024,0,.51745,.819918,.0487865,0,.535761,.815072,.0457801,0,.554328,.809863,.0430184,0,.573162,.804164,.0404245,0,.592275,.798034,.0380146,0,.611681,.791436,.0357436,0,.631398,.784498,.0336475,0,.651445,.777125,.0316666,0,.671845,.769365,.0298122,0,.692628,.761579,.0281001,0,.713827,.753746,.0265049,0,.735484,.745573,.0250067,0,.75765,.737083,.0236026,0,.78039,.728545,.0223302,0,.803789,.719691,.0211243,0,.82796,.710569,.0199983,0,.853056,.701216,.0189569,0,.879298,.692094,.0179702,0,.907014,.682909,.0170418,0,.936691,.673509,.0161732,0,.968254,.663863,.0153406,0,1,1,.437395,0,0,.999998,.437394,0,0,.99998,.437363,0,616704e-9,.999891,.437232,0,.00367925,.999656,.436877,0,.00867446,.999148,.436121,0,.0150679,.997959,.434564,0,.022531,.993464,.430134,0,.0308507,.990606,.426077,0,.0398805,.985027,.419397,0,.0495148,.978491,.41118,0,.0596749,.969643,.40048,0,.0703001,.959189,.38769,0,.0813427,.948223,.373575,0,.0927641,.935955,.357622,0,.104533,.923237,.34043,0,.116624,.911074,.322735,0,.129015,.899724,.30479,0,.141687,.890189,.287392,0,.154626,.881796,.270248,0,.167818,.874781,.253659,0,.181252,.869166,.237786,0,.194918,.864725,.222618,0,.208807,.861565,.208356,0,.222913,.859284,.194867,0,.237229,.857677,.18212,0,.25175,.856714,.17018,0,.266473,.856155,.158969,0,.281392,.8558,.148413,0,.296505,.855672,.138578,0,.311811,.855538,.129345,0,.327306,.855689,.120861,0,.342991,.855767,.112969,0,.358864,.855618,.105593,0,.374925,.85525,.0987451,0,.391176,.854583,.0923727,0,.407616,.853534,.0864143,0,.424249,.852061,.0808338,0,.441076,.850253,.0756771,0,.4581,.848004,.0708612,0,.475324,.845333,.0663784,0,.492754,.842376,.0622631,0,.510394,.838956,.0584112,0,.528251,.835121,.0548328,0,.546331,.830842,.0514838,0,.564644,.826212,.048355,0,.583198,.821522,.0454714,0,.602005,.816551,.0428263,0,.621078,.811211,.0403612,0,.640434,.805479,.038039,0,.660089,.799409,.0358739,0,.680066,.79306,.0338727,0,.70039,.786395,.0319985,0,.721094,.779416,.030241,0,.742215,.77214,.0285951,0,.7638,.764636,.0270747,0,.785912,.756836,.0256354,0,.808628,.749315,.0243027,0,.832055,.741561,.0230497,0,.856338,.733589,.0218801,0,.88169,.725479,.020784,0,.908441,.717255,.0197702,0,.937125,.708829,.0188168,0,.968254,.700191,.0179113,0,1,1,.518937,0,0,.999998,.518933,0,0,.999967,.518883,0,.00147741,.999832,.51866,0,.00573221,.999466,.518057,0,.011826,.998644,.516752,0,.0192116,.994458,.512347,0,.027573,.991223,.507675,0,.0367099,.985515,.500188,0,.046487,.978308,.490408,0,.0568071,.968359,.477357,0,.0675984,.95682,.461752,0,.0788059,.943929,.443796,0,.090386,.930224,.423893,0,.102304,.916514,.402682,0,.114532,.903653,.380914,0,.127047,.892315,.359212,0,.139828,.882942,.338102,0,.152861,.875438,.31773,0,.16613,.869642,.298186,0,.179624,.865304,.279491,0,.193332,.862382,.261804,0,.207247,.860666,.245146,0,.22136,.859788,.229406,0,.235666,.859608,.214605,0,.250158,.859912,.200691,0,.264832,.86053,.187623,0,.279684,.861368,.17539,0,.294711,.862237,.163901,0,.309911,.863127,.153175,0,.32528,.863923,.143147,0,.340819,.864567,.133781,0,.356524,.865013,.125042,0,.372397,.86539,.116952,0,.388438,.865591,.109476,0,.404645,.865517,.102542,0,.421022,.865084,.0960688,0,.437569,.864309,.0900499,0,.454287,.863151,.0844328,0,.471181,.861649,.0792218,0,.488253,.859742,.0743482,0,.505507,.857446,.0697963,0,.522947,.854757,.0655364,0,.54058,.851783,.061608,0,.558412,.848516,.0579701,0,.576449,.844897,.0545742,0,.594701,.840956,.0514167,0,.613178,.836676,.0484598,0,.631892,.832075,.0456934,0,.650856,.827191,.0431178,0,.670088,.822295,.0407718,0,.689606,.817294,.0386032,0,.709434,.812013,.0365675,0,.7296,.806465,.0346547,0,.750138,.800691,.0328717,0,.771093,.794709,.031211,0,.792519,.788493,.0296504,0,.814488,.782049,.0281782,0,.837097,.775403,.0267965,0,.860481,.76857,.0255002,0,.884842,.761536,.0242759,0,.910494,.754303,.0231142,0,.937985,.74692,.0220305,0,.968254,.739745,.0210192,0,1,1,.613914,0,0,.999996,.613907,0,963597e-10,.999942,.613814,0,.00301247,.999704,.613407,0,.00870385,.999046,.612302,0,.0160714,.995516,.608266,0,.0245899,.991726,.602863,0,.0339681,.985157,.593956,0,.0440254,.97642,.581748,0,.0546409,.964404,.565183,0,.0657284,.950601,.545273,0,.0772246,.935158,.522129,0,.0890812,.919364,.496782,0,.10126,.904754,.470571,0,.113731,.89176,.444037,0,.126469,.881492,.418322,0,.139454,.873656,.393522,0,.15267,.868053,.369795,0,.166101,.864336,.347171,0,.179736,.862259,.325737,0,.193565,.861556,.305532,0,.207578,.861776,.286416,0,.221769,.862661,.268355,0,.23613,.864015,.251334,0,.250656,.865711,.235352,0,.265343,.867519,.220302,0,.280187,.869351,.206161,0,.295183,.871144,.192908,0,.31033,.872839,.180505,0,.325624,.874307,.168848,0,.341065,.875667,.158021,0,.35665,.876758,.147877,0,.37238,.87764,.138441,0,.388253,.878237,.129627,0,.404269,.878563,.121415,0,.42043,.878572,.113741,0,.436735,.87842,.106652,0,.453187,.878057,.100097,0,.469786,.877413,.0940128,0,.486536,.87646,.0883462,0,.503439,.875233,.0830924,0,.520498,.8737,.0781975,0,.537717,.871873,.07364,0,.555102,.86978,.0694103,0,.572657,.867405,.0654696,0,.59039,.864751,.0617914,0,.608307,.861818,.0583491,0,.626419,.858645,.0551443,0,.644733,.855307,.0521894,0,.663264,.851736,.0494334,0,.682025,.847927,.0468504,0,.701032,.843888,.0444261,0,.720308,.839629,.0421497,0,.739875,.835158,.0400082,0,.759764,.830509,.0380076,0,.780014,.825714,.0361488,0,.800673,.820729,.0343956,0,.821803,.815751,.0327781,0,.843492,.810752,.031275,0,.86586,.805587,.0298542,0,.889087,.800317,.0285397,0,.913466,.79489,.0272948,0,.93952,.789314,.0261139,0,.96835,.783593,.0249938,0,1,1,.724258,0,0,.999992,.724243,0,726889e-9,.99987,.724044,0,.00569574,.999336,.72317,0,.0131702,.996271,.719432,0,.0220738,.991159,.712576,0,.0319405,.982465,.700927,0,.0425202,.97049,.684297,0,.0536599,.953973,.661244,0,.065258,.935546,.633804,0,.0772427,.916596,.603071,0,.0895616,.899353,.57105,0,.102175,.885216,.539206,0,.11505,.875076,.508714,0,.128164,.868334,.479571,0,.141495,.864414,.451796,0,.155026,.862678,.425328,0,.168745,.862835,.400352,0,.182639,.864067,.376532,0,.196699,.866086,.35391,0,.210915,.868557,.332424,0,.225282,.871271,.312053,0,.239792,.874058,.292764,0,.25444,.8768,.27453,0,.269223,.87939,.257297,0,.284135,.8819,.24114,0,.299174,.884187,.225934,0,.314337,.886262,.211669,0,.329622,.888119,.198311,0,.345026,.889709,.185783,0,.360549,.891054,.174063,0,.376189,.892196,.163143,0,.391946,.893101,.152952,0,.407819,.893803,.143475,0,.423808,.894277,.134647,0,.439914,.894532,.126434,0,.456137,.894576,.1188,0,.472479,.894393,.111694,0,.48894,.893976,.105069,0,.505523,.893346,.0989077,0,.52223,.892502,.0931724,0,.539064,.891441,.0878276,0,.556028,.890276,.082903,0,.573125,.888972,.0783505,0,.590361,.887469,.0741083,0,.607741,.885785,.0701633,0,.62527,.883914,.0664835,0,.642957,.881872,.0630567,0,.660809,.879651,.0598527,0,.678836,.877267,.0568615,0,.69705,.874717,.05406,0,.715465,.872012,.0514378,0,.734098,.869157,.0489805,0,.752968,.866155,.0466727,0,.772101,.863014,.0445056,0,.791529,.859748,.0424733,0,.81129,.856416,.0405957,0,.831438,.852958,.0388273,0,.852044,.849382,.0371619,0,.87321,.845694,.0355959,0,.89509,.841893,.0341155,0,.917932,.837981,.0327141,0,.942204,.833963,.0313856,0,.968981,.829847,.0301275,0,1,1,.85214,0,0,.999969,.852095,0,.00279627,.999483,.851408,0,.0107635,.994545,.84579,0,.0206454,.986188,.835231,0,.0315756,.969847,.814687,0,.0432021,.945951,.783735,0,.0553396,.91917,.746074,0,.0678766,.895488,.706938,0,.0807395,.878232,.669534,0,.0938767,.868252,.635168,0,.10725,.863873,.603069,0,.120832,.863369,.572514,0,.134598,.86545,.543169,0,.148533,.868803,.514578,0,.16262,.872794,.486762,0,.176849,.87702,.459811,0,.19121,.881054,.433654,0,.205694,.884974,.408574,0,.220294,.888587,.384525,0,.235005,.891877,.36156,0,.24982,.894793,.339661,0,.264737,.89743,.318913,0,.279751,.899796,.299302,0,.294859,.901943,.280843,0,.310058,.903858,.263481,0,.325346,.905574,.247197,0,.340721,.907069,.231915,0,.356181,.908379,.217614,0,.371725,.90952,.20425,0,.387353,.910483,.191758,0,.403063,.91128,.180092,0,.418854,.911936,.169222,0,.434727,.912454,.159098,0,.450682,.912835,.149668,0,.466718,.913078,.140884,0,.482837,.913192,.132709,0,.499038,.913175,.125095,0,.515324,.91304,.118012,0,.531695,.912781,.111417,0,.548153,.91241,.105281,0,.5647,.911924,.0995691,0,.581338,.911331,.0942531,0,.59807,.910637,.0893076,0,.6149,.90984,.0846998,0,.63183,.908941,.0804044,0,.648865,.907944,.0763984,0,.666011,.906857,.0726638,0,.683273,.90568,.0691783,0,.700659,.904416,.0659222,0,.718176,.903067,.0628782,0,.735834,.901637,.0600307,0,.753646,.900128,.0573647,0,.771625,.898544,.0548668,0,.78979,.89689,.052527,0,.808162,.895165,.0503306,0,.826771,.893371,.0482668,0,.845654,.891572,.0463605,0,.864863,.889763,.0445998,0,.884472,.887894,.0429451,0,.904592,.885967,.0413884,0,.925407,.883984,.0399225,0,.947271,.881945,.0385405,0,.97105,.879854,.0372362,0,1,.999804,.995833,0,0,.938155,.933611,0,.0158731,.864755,.854311,0,.0317461,.888594,.865264,0,.0476191,.905575,.863922,0,.0634921,.915125,.850558,0,.0793651,.920665,.829254,0,.0952381,.924073,.802578,0,.111111,.926304,.772211,0,.126984,.927829,.739366,0,.142857,.928924,.705033,0,.15873,.92973,.670019,0,.174603,.930339,.634993,0,.190476,.930811,.600485,0,.206349,.931191,.566897,0,.222222,.93149,.534485,0,.238095,.931737,.503429,0,.253968,.931939,.473811,0,.269841,.932108,.445668,0,.285714,.93225,.418993,0,.301587,.932371,.393762,0,.31746,.932474,.369939,0,.333333,.932562,.347479,0,.349206,.932638,.326336,0,.365079,.932703,.306462,0,.380952,.93276,.287805,0,.396825,.932809,.270313,0,.412698,.932851,.253933,0,.428571,.932887,.23861,0,.444444,.932917,.224289,0,.460317,.932943,.210917,0,.47619,.932965,.19844,0,.492063,.932982,.186807,0,.507937,.932995,.175966,0,.52381,.933005,.165869,0,.539683,.933011,.156468,0,.555556,.933013,.147719,0,.571429,.933013,.139579,0,.587302,.93301,.132007,0,.603175,.933004,.124965,0,.619048,.932994,.118416,0,.634921,.932982,.112326,0,.650794,.932968,.106663,0,.666667,.93295,.101397,0,.68254,.932931,.0964993,0,.698413,.932908,.0919438,0,.714286,.932883,.0877057,0,.730159,.932856,.0837623,0,.746032,.932827,.0800921,0,.761905,.932796,.0766754,0,.777778,.932762,.0734936,0,.793651,.932727,.0705296,0,.809524,.932689,.0677676,0,.825397,.93265,.0651929,0,.84127,.932609,.0627917,0,.857143,.932565,.0605515,0,.873016,.932521,.0584606,0,.888889,.932474,.0565082,0,.904762,.932427,.0546841,0,.920635,.932377,.0529793,0,.936508,.932326,.0513851,0,.952381,.932274,.0498936,0,.968254,.93222,.0484975,0,.984127,.932164,.0471899,0,1],n=new Float32Array(t),i=new Float32Array(e);V.LTC_FLOAT_1=new vo.a(n,64,64,w.Ib,w.G,w.Yc,w.n,w.n,w.V,w.ob,1),V.LTC_FLOAT_2=new vo.a(i,64,64,w.Ib,w.G,w.Yc,w.n,w.n,w.V,w.ob,1);const s=new Uint16Array(t.length);t.forEach((function(t,e){s[e]=mU.a.toHalfFloat(t)}));const r=new Uint16Array(e.length);e.forEach((function(t,e){r[e]=mU.a.toHalfFloat(t)})),V.LTC_HALF_1=new vo.a(s,64,64,w.Ib,w.M,w.Yc,w.n,w.n,w.V,w.ob,1),V.LTC_HALF_2=new vo.a(r,64,64,w.Ib,w.M,w.Yc,w.n,w.n,w.V,w.ob,1)}}!function(t){t.OBJECTS=\\\\\\\"objects\\\\\\\",t.GEOMETRIES=\\\\\\\"geometries\\\\\\\"}(_U||(_U={}));const gU=[_U.GEOMETRIES,_U.OBJECTS];var vU;!function(t){t.XYZ=\\\\\\\"XYZ\\\\\\\",t.XZY=\\\\\\\"XZY\\\\\\\",t.YXZ=\\\\\\\"YXZ\\\\\\\",t.YZX=\\\\\\\"YZX\\\\\\\",t.ZYX=\\\\\\\"ZYX\\\\\\\",t.ZXY=\\\\\\\"ZXY\\\\\\\"}(vU||(vU={}));const yU=[vU.XYZ,vU.XZY,vU.YXZ,vU.YZX,vU.ZXY,vU.ZYX],xU=vU.XYZ;class bU{constructor(){this._translation_matrix=new A.a,this._translation_matrix_q=new hh.a,this._translation_matrix_s=new p.a(1,1,1),this._matrix=(new A.a).identity(),this._matrix_q=new hh.a,this._matrix_euler=new ny.a,this._matrix_s=new p.a,this._rotate_geometry_m=new A.a,this._rotate_geometry_q=new hh.a,this._rotate_geometry_vec_dest=new p.a}static setParamsFromMatrix(t,e,n={}){let i=n.scale;null==i&&(i=!0),t.decompose(this.set_params_from_matrix_position,this.set_params_from_matrix_quaternion,this.set_params_from_matrix_scale),this.set_params_from_matrix_euler.setFromQuaternion(this.set_params_from_matrix_quaternion),this.set_params_from_matrix_euler.toVector3(this.set_params_from_matrix_rotation),this.set_params_from_matrix_rotation.divideScalar(Math.PI/180),this.set_params_from_matrix_position.toArray(this.set_params_from_matrix_t),this.set_params_from_matrix_rotation.toArray(this.set_params_from_matrix_r),this.set_params_from_matrix_scale.toArray(this.set_params_from_matrix_s),e.scene().batchUpdates((()=>{e.params.set_vector3(\\\\\\\"t\\\\\\\",this.set_params_from_matrix_t),e.params.set_vector3(\\\\\\\"r\\\\\\\",this.set_params_from_matrix_r),e.params.set_vector3(\\\\\\\"s\\\\\\\",this.set_params_from_matrix_s),i&&e.params.set_float(\\\\\\\"scale\\\\\\\",1)}))}static setParamsFromObject(t,e){t.position.toArray(this.set_params_from_object_position_array),t.rotation.toArray(this.set_params_from_object_rotation_array),this.set_params_from_object_rotation_deg.fromArray(this.set_params_from_object_rotation_array),this.set_params_from_object_rotation_deg.multiplyScalar(180/Math.PI),this.set_params_from_object_rotation_deg.toArray(this.set_params_from_object_rotation_array),e.scene().batchUpdates((()=>{e.params.set_vector3(\\\\\\\"t\\\\\\\",this.set_params_from_object_position_array),e.params.set_vector3(\\\\\\\"r\\\\\\\",this.set_params_from_object_rotation_array)}))}translationMatrix(t){return this._translation_matrix.compose(t,this._translation_matrix_q,this._translation_matrix_s),this._translation_matrix}matrix(t,e,n,i,s){return this._matrix_euler.set(Object(On.e)(e.x),Object(On.e)(e.y),Object(On.e)(e.z),s),this._matrix_q.setFromEuler(this._matrix_euler),this._matrix_s.copy(n).multiplyScalar(i),this._matrix.compose(t,this._matrix_q,this._matrix_s),this._matrix}rotateGeometry(t,e,n){this._rotate_geometry_vec_dest.copy(n),this._rotate_geometry_vec_dest.normalize(),this._rotate_geometry_q.setFromUnitVectors(e,this._rotate_geometry_vec_dest),this._rotate_geometry_m.makeRotationFromQuaternion(this._rotate_geometry_q),t.applyMatrix4(this._rotate_geometry_m)}static decomposeMatrix(t){t.matrix.decompose(t.position,t.quaternion,t.scale)}}function wU(t,e){const n=(null==e?void 0:e.matrixAutoUpdate)||!1;return class extends t{constructor(){super(...arguments),this.transform=ha.FOLDER(),this.keepPosWhenParenting=ha.BOOLEAN(0),this.rotationOrder=ha.INTEGER(yU.indexOf(vU.XYZ),{menu:{entries:yU.map(((t,e)=>({name:t,value:e})))}}),this.t=ha.VECTOR3([0,0,0]),this.r=ha.VECTOR3([0,0,0]),this.s=ha.VECTOR3([1,1,1]),this.scale=ha.FLOAT(1),this.matrixAutoUpdate=ha.BOOLEAN(n?1:0),this.updateTransformFromObject=ha.BUTTON(null,{callback:t=>{AU.PARAM_CALLBACK_update_transform_from_object(t)}})}}}bU.set_params_from_matrix_position=new p.a,bU.set_params_from_matrix_quaternion=new hh.a,bU.set_params_from_matrix_scale=new p.a,bU.set_params_from_matrix_euler=new ny.a,bU.set_params_from_matrix_rotation=new p.a,bU.set_params_from_matrix_t=[0,0,0],bU.set_params_from_matrix_r=[0,0,0],bU.set_params_from_matrix_s=[0,0,0],bU.set_params_from_object_position_array=[0,0,0],bU.set_params_from_object_rotation_deg=new p.a,bU.set_params_from_object_rotation_array=[0,0,0];wU(ua);const TU=\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\";class AU{constructor(t){this.node=t,this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this),this._core_transform=new bU,this._keep_pos_when_parenting_m_object=new A.a,this._keep_pos_when_parenting_m_new_parent_inv=new A.a}initializeNode(){this.node.dirtyController.hasHook(TU)||this.node.dirtyController.addPostDirtyHook(TU,this._cook_main_without_inputs_when_dirty_bound)}async _cook_main_without_inputs_when_dirty(){await this.node.cookController.cookMainWithoutInputs()}update(){this.update_transform_with_matrix();this.node.object.matrixAutoUpdate=this.node.pv.matrixAutoUpdate}update_transform_with_matrix(t){const e=this.node.object;null==t||t.equals(e.matrix)?this._update_matrix_from_params_with_core_transform():(e.matrix.copy(t),e.dispatchEvent({type:\\\\\\\"change\\\\\\\"}))}_update_matrix_from_params_with_core_transform(){const t=this.node.object;let e=t.matrixAutoUpdate;e&&(t.matrixAutoUpdate=!1);const n=this._core_transform.matrix(this.node.pv.t,this.node.pv.r,this.node.pv.s,this.node.pv.scale,yU[this.node.pv.rotationOrder]);t.matrix.identity(),t.applyMatrix4(n),this._apply_look_at(),t.updateMatrix(),e&&(t.matrixAutoUpdate=!0),t.dispatchEvent({type:\\\\\\\"change\\\\\\\"})}_apply_look_at(){}set_params_from_matrix(t,e={}){bU.setParamsFromMatrix(t,this.node,e)}static update_node_transform_params_if_required(t,e){t.transformController.update_node_transform_params_if_required(e)}update_node_transform_params_if_required(t){if(!this.node.pv.keepPosWhenParenting)return;if(!this.node.scene().loadingController.loaded())return;if(t==this.node.object.parent)return;const e=this.node.object;e.updateMatrixWorld(!0),t.updateMatrixWorld(!0),this._keep_pos_when_parenting_m_object.copy(e.matrixWorld),this._keep_pos_when_parenting_m_new_parent_inv.copy(t.matrixWorld),this._keep_pos_when_parenting_m_new_parent_inv.invert(),this._keep_pos_when_parenting_m_object.premultiply(this._keep_pos_when_parenting_m_new_parent_inv),bU.setParamsFromMatrix(this._keep_pos_when_parenting_m_object,this.node,{scale:!0})}update_node_transform_params_from_object(t=!1){const e=this.node.object;t&&e.updateMatrix(),bU.setParamsFromMatrix(e.matrix,this.node,{scale:!0})}static PARAM_CALLBACK_update_transform_from_object(t){t.transformController.update_node_transform_params_from_object()}}class MU{constructor(t){this.node=t}initializeNode(){this.node.io.inputs.setCount(0,1),this.node.io.inputs.set_depends_on_inputs(!1),this.node.io.outputs.setHasOneOutput(),this.node.io.inputs.add_on_set_input_hook(\\\\\\\"on_input_updated:update_parent\\\\\\\",(()=>{this.on_input_updated()}))}static on_input_updated(t){const e=t.root().getParentForNode(t);t.transformController&&e&&AU.update_node_transform_params_if_required(t,e),null!=t.io.inputs.input(0)?t.root().addToParentTransform(t):t.root().removeFromParentTransform(t)}on_input_updated(){MU.on_input_updated(this.node)}}wU(ua);class EU extends hU{constructor(){super(...arguments),this.flags=new Di(this),this.hierarchyController=new MU(this),this.transformController=new AU(this)}initializeBaseNode(){super.initializeBaseNode(),this.hierarchyController.initializeNode(),this.transformController.initializeNode()}cook(){this.transformController.update(),this.updateLightParams(),this.updateShadowParams(),this.cookController.endCook()}}class SU{constructor(t,e,n){this.node=t,this._helperConstructor=e,this._name=n}initializeNode(){this.node.flags.display.onUpdate((()=>{this.update()}))}visible(){return this.node.flags.display.active()&&this.node.pv.showHelper}_createHelper(){const t=new this._helperConstructor(this.node,this._name);return t.build(),t}update(){this.visible()?(this._helper||(this._helper=this._createHelper()),this._helper&&(this.node.light.add(this._helper.object),this._helper.update())):this._helper&&this.node.light.remove(this._helper.object)}}var CU=n(41);class NU extends CU.a{constructor(t,e){const n=new S.a;n.setAttribute(\\\\\\\"position\\\\\\\",new C.c([1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],3)),n.computeBoundingSphere();super(n,new As.a({fog:!1})),this.light=t,this.color=e,this.type=\\\\\\\"RectAreaLightHelper\\\\\\\";const i=new S.a;i.setAttribute(\\\\\\\"position\\\\\\\",new C.c([1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],3)),i.computeBoundingSphere(),this.add(new B.a(i,new lt.a({side:w.i,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),void 0!==this.color)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const t=this.material.color,e=Math.max(t.r,t.g,t.b);e>1&&t.multiplyScalar(1/e),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}class LU{constructor(t,e){this.node=t,this._name=e,this._object=this.createObject(),this._material=new lt.a({wireframe:!0,fog:!1})}build(){this._object.matrixAutoUpdate=!1,this._object.name=this._name,this.buildHelper()}get object(){return this._object}}class OU extends LU{createObject(){return new NU(this.node.light)}buildHelper(){}update(){this._object.updateMatrixWorld()}}class PU extends(function(t){return class extends t{constructor(){super(...arguments),this.light=ha.FOLDER(),this.color=ha.COLOR([1,1,1],{conversion:lo.SRGB_TO_LINEAR}),this.intensity=ha.FLOAT(1,{range:[0,10]}),this.width=ha.FLOAT(1,{range:[0,10]}),this.height=ha.FLOAT(1,{range:[0,10]}),this.showHelper=ha.BOOLEAN(0)}}}(wU(ua))){}const RU=new PU;class IU extends EU{constructor(){super(...arguments),this.paramsConfig=RU,this._helperController=new SU(this,OU,\\\\\\\"RectAreaLightObjNodeHelper\\\\\\\")}static type(){return\\\\\\\"areaLight\\\\\\\"}initializeNode(){this._helperController.initializeNode()}createLight(){const t=new pU(16777215,1,1,1);return t.matrixAutoUpdate=!1,fU.initialized||(fU.init(),fU.initialized=!0),t}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity,this.light.width=this.pv.width,this.light.height=this.pv.height,this._helperController.update()}}var FU=n(72);const DU=new p.a,BU=new of.a;class zU extends Ms.a{constructor(t){const e=new S.a,n=new As.a({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],s=[],r={},o=new D.a(16755200),a=new D.a(16711680),l=new D.a(43775),c=new D.a(16777215),h=new D.a(3355443);function u(t,e,n){d(t,n),d(e,n)}function d(t,e){i.push(0,0,0),s.push(e.r,e.g,e.b),void 0===r[t]&&(r[t]=[]),r[t].push(i.length/3-1)}u(\\\\\\\"n1\\\\\\\",\\\\\\\"n2\\\\\\\",o),u(\\\\\\\"n2\\\\\\\",\\\\\\\"n4\\\\\\\",o),u(\\\\\\\"n4\\\\\\\",\\\\\\\"n3\\\\\\\",o),u(\\\\\\\"n3\\\\\\\",\\\\\\\"n1\\\\\\\",o),u(\\\\\\\"f1\\\\\\\",\\\\\\\"f2\\\\\\\",o),u(\\\\\\\"f2\\\\\\\",\\\\\\\"f4\\\\\\\",o),u(\\\\\\\"f4\\\\\\\",\\\\\\\"f3\\\\\\\",o),u(\\\\\\\"f3\\\\\\\",\\\\\\\"f1\\\\\\\",o),u(\\\\\\\"n1\\\\\\\",\\\\\\\"f1\\\\\\\",o),u(\\\\\\\"n2\\\\\\\",\\\\\\\"f2\\\\\\\",o),u(\\\\\\\"n3\\\\\\\",\\\\\\\"f3\\\\\\\",o),u(\\\\\\\"n4\\\\\\\",\\\\\\\"f4\\\\\\\",o),u(\\\\\\\"p\\\\\\\",\\\\\\\"n1\\\\\\\",a),u(\\\\\\\"p\\\\\\\",\\\\\\\"n2\\\\\\\",a),u(\\\\\\\"p\\\\\\\",\\\\\\\"n3\\\\\\\",a),u(\\\\\\\"p\\\\\\\",\\\\\\\"n4\\\\\\\",a),u(\\\\\\\"u1\\\\\\\",\\\\\\\"u2\\\\\\\",l),u(\\\\\\\"u2\\\\\\\",\\\\\\\"u3\\\\\\\",l),u(\\\\\\\"u3\\\\\\\",\\\\\\\"u1\\\\\\\",l),u(\\\\\\\"c\\\\\\\",\\\\\\\"t\\\\\\\",c),u(\\\\\\\"p\\\\\\\",\\\\\\\"c\\\\\\\",h),u(\\\\\\\"cn1\\\\\\\",\\\\\\\"cn2\\\\\\\",h),u(\\\\\\\"cn3\\\\\\\",\\\\\\\"cn4\\\\\\\",h),u(\\\\\\\"cf1\\\\\\\",\\\\\\\"cf2\\\\\\\",h),u(\\\\\\\"cf3\\\\\\\",\\\\\\\"cf4\\\\\\\",h),e.setAttribute(\\\\\\\"position\\\\\\\",new C.c(i,3)),e.setAttribute(\\\\\\\"color\\\\\\\",new C.c(s,3)),super(e,n),this.type=\\\\\\\"CameraHelper\\\\\\\",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrixAutoUpdate=!1,this.pointMap=r,this.update()}update(){const t=this.geometry,e=this.pointMap;BU.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),kU(\\\\\\\"c\\\\\\\",e,t,BU,0,0,-1),kU(\\\\\\\"t\\\\\\\",e,t,BU,0,0,1),kU(\\\\\\\"n1\\\\\\\",e,t,BU,-1,-1,-1),kU(\\\\\\\"n2\\\\\\\",e,t,BU,1,-1,-1),kU(\\\\\\\"n3\\\\\\\",e,t,BU,-1,1,-1),kU(\\\\\\\"n4\\\\\\\",e,t,BU,1,1,-1),kU(\\\\\\\"f1\\\\\\\",e,t,BU,-1,-1,1),kU(\\\\\\\"f2\\\\\\\",e,t,BU,1,-1,1),kU(\\\\\\\"f3\\\\\\\",e,t,BU,-1,1,1),kU(\\\\\\\"f4\\\\\\\",e,t,BU,1,1,1),kU(\\\\\\\"u1\\\\\\\",e,t,BU,.7,1.1,-1),kU(\\\\\\\"u2\\\\\\\",e,t,BU,-.7,1.1,-1),kU(\\\\\\\"u3\\\\\\\",e,t,BU,0,2,-1),kU(\\\\\\\"cf1\\\\\\\",e,t,BU,-1,0,1),kU(\\\\\\\"cf2\\\\\\\",e,t,BU,1,0,1),kU(\\\\\\\"cf3\\\\\\\",e,t,BU,0,-1,1),kU(\\\\\\\"cf4\\\\\\\",e,t,BU,0,1,1),kU(\\\\\\\"cn1\\\\\\\",e,t,BU,-1,0,-1),kU(\\\\\\\"cn2\\\\\\\",e,t,BU,1,0,-1),kU(\\\\\\\"cn3\\\\\\\",e,t,BU,0,-1,-1),kU(\\\\\\\"cn4\\\\\\\",e,t,BU,0,1,-1),t.getAttribute(\\\\\\\"position\\\\\\\").needsUpdate=!0}}function kU(t,e,n,i,s,r,o){DU.set(s,r,o).unproject(i);const a=e[t];if(void 0!==a){const t=n.getAttribute(\\\\\\\"position\\\\\\\");for(let e=0,n=a.length;e<n;e++)t.setXYZ(a[e],DU.x,DU.y,DU.z)}}class UU extends LU{constructor(){super(...arguments),this._square=new CU.a,this._line_material=new As.a({fog:!1})}createObject(){return new B.a}buildHelper(){const t=new S.a;t.setAttribute(\\\\\\\"position\\\\\\\",new C.c([-1,1,0,1,1,0,1,-1,0,-1,-1,0,-1,1,0],3)),this._square.geometry=t,this._square.material=this._line_material,this._square.rotateX(.5*Math.PI),this._square.updateMatrix(),this._square.matrixAutoUpdate=!1,this.object.add(this._square),this._cameraHelper=new zU(this.node.light.shadow.camera),this._cameraHelper.rotateX(.5*-Math.PI),this._cameraHelper.updateMatrix(),this._cameraHelper.matrixAutoUpdate=!1,this.object.add(this._cameraHelper)}update(){this._object.updateMatrix(),this._cameraHelper.update(),this._line_material.color.copy(this.node.light.color)}}var GU,VU;!function(t){t.DIRECTIONAL=\\\\\\\"directionalLight\\\\\\\",t.HEMISPHERE=\\\\\\\"hemisphereLight\\\\\\\",t.POINT=\\\\\\\"pointLight\\\\\\\",t.SPOT=\\\\\\\"spotLight\\\\\\\"}(GU||(GU={})),function(t){t.DIRECTIONAL=\\\\\\\"DirectionalLight\\\\\\\",t.HEMISPHERE=\\\\\\\"HemisphereLight\\\\\\\",t.POINT=\\\\\\\"PointLight\\\\\\\",t.SPOT=\\\\\\\"SpotLight\\\\\\\"}(VU||(VU={}));class HU extends(function(t){return class extends t{constructor(){super(...arguments),this.light=ha.FOLDER(),this.color=ha.COLOR([1,1,1],{conversion:lo.SRGB_TO_LINEAR}),this.intensity=ha.FLOAT(1),this.distance=ha.FLOAT(100,{range:[0,100]}),this.showHelper=ha.BOOLEAN(0),this.shadow=ha.FOLDER(),this.castShadow=ha.BOOLEAN(1),this.shadowRes=ha.VECTOR2([1024,1024],{visibleIf:{castShadow:!0}}),this.shadowSize=ha.VECTOR2([2,2],{visibleIf:{castShadow:!0}}),this.shadowBias=ha.FLOAT(.001,{visibleIf:{castShadow:!0}}),this.shadowRadius=ha.FLOAT(0,{visibleIf:{castShadow:1},range:[0,10],rangeLocked:[!0,!1]})}}}(wU(ua))){}const jU=new HU;class WU extends EU{constructor(){super(...arguments),this.paramsConfig=jU,this._helperController=new SU(this,UU,\\\\\\\"DirectionalLightHelper\\\\\\\")}static type(){return GU.DIRECTIONAL}initializeNode(){this._helperController.initializeNode()}createLight(){const t=new FU.a;return t.matrixAutoUpdate=!1,t.castShadow=!0,t.shadow.bias=-.001,t.shadow.mapSize.x=1024,t.shadow.mapSize.y=1024,t.shadow.camera.near=.1,this._target_target=t.target,this._target_target.name=\\\\\\\"DirectionalLight Default Target\\\\\\\",this.object.add(this._target_target),t}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity,this.light.shadow.camera.far=this.pv.distance}updateShadowParams(){this.light.castShadow=this.pv.castShadow,this.light.shadow.mapSize.copy(this.pv.shadowRes),this.light.shadow.bias=this.pv.shadowBias,this.light.shadow.radius=this.pv.shadowRadius;const t=this.light.shadow.camera,e=this.pv.shadowSize;t.left=.5*-e.x,t.right=.5*e.x,t.top=.5*e.y,t.bottom=.5*-e.y,this.light.shadow.camera.updateProjectionMatrix(),this._helperController.update()}}class qU extends cv.a{constructor(t,e,n){super(t,n),this.type=\\\\\\\"HemisphereLight\\\\\\\",this.position.copy(Q.a.DefaultUp),this.updateMatrix(),this.groundColor=new D.a(e)}copy(t){return cv.a.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}qU.prototype.isHemisphereLight=!0;class XU extends S.a{constructor(t=[],e=[],n=1,i=0){super(),this.type=\\\\\\\"PolyhedronGeometry\\\\\\\",this.parameters={vertices:t,indices:e,radius:n,detail:i};const s=[],r=[];function o(t,e,n,i){const s=i+1,r=[];for(let i=0;i<=s;i++){r[i]=[];const o=t.clone().lerp(n,i/s),a=e.clone().lerp(n,i/s),l=s-i;for(let t=0;t<=l;t++)r[i][t]=0===t&&i===s?o:o.clone().lerp(a,t/l)}for(let t=0;t<s;t++)for(let e=0;e<2*(s-t)-1;e++){const n=Math.floor(e/2);e%2==0?(a(r[t][n+1]),a(r[t+1][n]),a(r[t][n])):(a(r[t][n+1]),a(r[t+1][n+1]),a(r[t+1][n]))}}function a(t){s.push(t.x,t.y,t.z)}function l(e,n){const i=3*e;n.x=t[i+0],n.y=t[i+1],n.z=t[i+2]}function c(t,e,n,i){i<0&&1===t.x&&(r[e]=t.x-1),0===n.x&&0===n.z&&(r[e]=i/2/Math.PI+.5)}function h(t){return Math.atan2(t.z,-t.x)}!function(t){const n=new p.a,i=new p.a,s=new p.a;for(let r=0;r<e.length;r+=3)l(e[r+0],n),l(e[r+1],i),l(e[r+2],s),o(n,i,s,t)}(i),function(t){const e=new p.a;for(let n=0;n<s.length;n+=3)e.x=s[n+0],e.y=s[n+1],e.z=s[n+2],e.normalize().multiplyScalar(t),s[n+0]=e.x,s[n+1]=e.y,s[n+2]=e.z}(n),function(){const t=new p.a;for(let n=0;n<s.length;n+=3){t.x=s[n+0],t.y=s[n+1],t.z=s[n+2];const i=h(t)/2/Math.PI+.5,o=(e=t,Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5);r.push(i,1-o)}var e;(function(){const t=new p.a,e=new p.a,n=new p.a,i=new p.a,o=new d.a,a=new d.a,l=new d.a;for(let u=0,d=0;u<s.length;u+=9,d+=6){t.set(s[u+0],s[u+1],s[u+2]),e.set(s[u+3],s[u+4],s[u+5]),n.set(s[u+6],s[u+7],s[u+8]),o.set(r[d+0],r[d+1]),a.set(r[d+2],r[d+3]),l.set(r[d+4],r[d+5]),i.copy(t).add(e).add(n).divideScalar(3);const p=h(i);c(o,d+0,t,p),c(a,d+2,e,p),c(l,d+4,n,p)}})(),function(){for(let t=0;t<r.length;t+=6){const e=r[t+0],n=r[t+2],i=r[t+4],s=Math.max(e,n,i),o=Math.min(e,n,i);s>.9&&o<.1&&(e<.2&&(r[t+0]+=1),n<.2&&(r[t+2]+=1),i<.2&&(r[t+4]+=1))}}()}(),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(s,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(s.slice(),3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(r,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(t){return new XU(t.vertices,t.indices,t.radius,t.details)}}class YU extends XU{constructor(t=1,e=0){super([1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type=\\\\\\\"OctahedronGeometry\\\\\\\",this.parameters={radius:t,detail:e}}static fromJSON(t){return new YU(t.radius,t.detail)}}class $U extends LU{constructor(){super(...arguments),this._geometry=new YU(1),this._quat=new hh.a,this._default_position=new p.a(0,1,0),this._color1=new D.a,this._color2=new D.a}createObject(){return new B.a}buildHelper(){this._geometry.rotateZ(.5*Math.PI),this._material.vertexColors=!0;const t=this._geometry.getAttribute(\\\\\\\"position\\\\\\\"),e=new Float32Array(3*t.count);this._geometry.setAttribute(\\\\\\\"color\\\\\\\",new C.a(e,3)),this._object.geometry=this._geometry,this._object.material=this._material,this._object.matrixAutoUpdate=!1}update(){if(!this.node.pv.position)return;this._object.position.copy(this.node.pv.position).multiplyScalar(-1),this._quat.setFromUnitVectors(this._default_position,this.node.pv.position),this._object.setRotationFromQuaternion(this._quat),this._object.scale.setScalar(this.node.pv.helperSize),this._object.updateMatrix();const t=this._geometry.getAttribute(\\\\\\\"color\\\\\\\");this._color1.copy(this.node.light.color),this._color2.copy(this.node.light.groundColor);for(let e=0,n=t.count;e<n;e++){const i=e<n/2?this._color1:this._color2;t.setXYZ(e,i.r,i.g,i.b)}t.needsUpdate=!0}}const JU={skyColor:new D.a(1,1,1),groundColor:new D.a(0,0,0)};const ZU=new class extends ua{constructor(){super(...arguments),this.skyColor=ha.COLOR(JU.skyColor,{conversion:lo.SRGB_TO_LINEAR}),this.groundColor=ha.COLOR(JU.groundColor,{conversion:lo.SRGB_TO_LINEAR}),this.intensity=ha.FLOAT(1),this.position=ha.VECTOR3([0,1,0]),this.showHelper=ha.BOOLEAN(0),this.helperSize=ha.FLOAT(1,{visibleIf:{showHelper:1}})}};class KU extends hU{constructor(){super(...arguments),this.paramsConfig=ZU,this._helperController=new SU(this,$U,\\\\\\\"HemisphereLightHelper\\\\\\\")}static type(){return GU.HEMISPHERE}createLight(){const t=new qU;return t.matrixAutoUpdate=!1,t.color.copy(JU.skyColor),t.groundColor.copy(JU.groundColor),t}initializeNode(){this.io.inputs.setCount(0,1),this._helperController.initializeNode()}updateLightParams(){this.light.color=this.pv.skyColor,this.light.groundColor=this.pv.groundColor,this.light.position.copy(this.pv.position),this.light.intensity=this.pv.intensity,this._helperController.update()}}var QU=n(58);class tG extends S.a{constructor(t=1,e=32,n=16,i=0,s=2*Math.PI,r=0,o=Math.PI){super(),this.type=\\\\\\\"SphereGeometry\\\\\\\",this.parameters={radius:t,widthSegments:e,heightSegments:n,phiStart:i,phiLength:s,thetaStart:r,thetaLength:o},e=Math.max(3,Math.floor(e)),n=Math.max(2,Math.floor(n));const a=Math.min(r+o,Math.PI);let l=0;const c=[],h=new p.a,u=new p.a,d=[],_=[],m=[],f=[];for(let d=0;d<=n;d++){const p=[],g=d/n;let v=0;0==d&&0==r?v=.5/e:d==n&&a==Math.PI&&(v=-.5/e);for(let n=0;n<=e;n++){const a=n/e;h.x=-t*Math.cos(i+a*s)*Math.sin(r+g*o),h.y=t*Math.cos(r+g*o),h.z=t*Math.sin(i+a*s)*Math.sin(r+g*o),_.push(h.x,h.y,h.z),u.copy(h).normalize(),m.push(u.x,u.y,u.z),f.push(a+v,1-g),p.push(l++)}c.push(p)}for(let t=0;t<n;t++)for(let i=0;i<e;i++){const e=c[t][i+1],s=c[t][i],o=c[t+1][i],l=c[t+1][i+1];(0!==t||r>0)&&d.push(e,s,l),(t!==n-1||a<Math.PI)&&d.push(s,o,l)}this.setIndex(d),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(_,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(m,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(f,2))}static fromJSON(t){return new tG(t.radius,t.widthSegments,t.heightSegments,t.phiStart,t.phiLength,t.thetaStart,t.thetaLength)}}class eG extends LU{constructor(){super(...arguments),this._matrix_scale=new p.a(1,1,1)}createObject(){return new B.a}buildHelper(){this._object.geometry=new tG(1,4,2),this._object.matrixAutoUpdate=!1,this._object.material=this._material}update(){const t=this.node.pv.helperSize;this._matrix_scale.set(t,t,t),this._object.matrix.identity(),this._object.matrix.scale(this._matrix_scale),this._material.color.copy(this.node.light.color)}}class nG extends(wU(ua)){constructor(){super(...arguments),this.light=ha.FOLDER(),this.color=ha.COLOR([1,1,1],{conversion:lo.SRGB_TO_LINEAR}),this.intensity=ha.FLOAT(1),this.decay=ha.FLOAT(.1),this.distance=ha.FLOAT(100),this.castShadows=ha.BOOLEAN(1),this.shadowRes=ha.VECTOR2([1024,1024],{visibleIf:{castShadows:1}}),this.shadowBias=ha.FLOAT(.001,{visibleIf:{castShadows:1}}),this.shadowNear=ha.FLOAT(1,{visibleIf:{castShadows:1}}),this.shadowFar=ha.FLOAT(100,{visibleIf:{castShadows:1}}),this.showHelper=ha.BOOLEAN(0),this.helperSize=ha.FLOAT(1,{visibleIf:{showHelper:1}})}}const iG=new nG;class sG extends EU{constructor(){super(...arguments),this.paramsConfig=iG,this._helperController=new SU(this,eG,\\\\\\\"PointLightHelper\\\\\\\")}static type(){return GU.POINT}initializeNode(){this._helperController.initializeNode()}createLight(){const t=new QU.a;return t.matrixAutoUpdate=!1,t.castShadow=!0,t.shadow.bias=-.001,t.shadow.mapSize.x=1024,t.shadow.mapSize.y=1024,t.shadow.camera.near=.1,t}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity,this.light.decay=this.pv.decay,this.light.distance=this.pv.distance,this._helperController.update()}updateShadowParams(){this.light.castShadow=this.pv.castShadows,this.light.shadow.mapSize.copy(this.pv.shadowRes),this.light.shadow.camera.near=this.pv.shadowNear,this.light.shadow.camera.far=this.pv.shadowFar,this.light.shadow.bias=this.pv.shadowBias}}var rG=n(73);class oG extends LU{constructor(){super(...arguments),this._cone=new Ms.a,this._line_material=new As.a({fog:!1})}createObject(){return new B.a}static buildConeGeometry(){const t=new S.a,e=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let t=0,n=1,i=32;t<i;t++,n++){const s=t/i*Math.PI*2,r=n/i*Math.PI*2;e.push(Math.cos(s),Math.sin(s),1,Math.cos(r),Math.sin(r),1)}return t.setAttribute(\\\\\\\"position\\\\\\\",new C.c(e,3)),t}static updateConeObject(t,e){const n=(e.distance?e.distance:1e3)*e.sizeMult,i=n*Math.tan(e.angle);this._matrix_scale.set(i,i,n),t.matrix.identity(),t.matrix.makeRotationX(.5*Math.PI),t.matrix.scale(this._matrix_scale)}buildHelper(){this._cone.geometry=oG.buildConeGeometry(),this._cone.material=this._line_material,this._cone.matrixAutoUpdate=!1,this.object.add(this._cone)}update(){oG.updateConeObject(this._cone,{sizeMult:this.node.pv.helperSize,distance:this.node.light.distance,angle:this.node.light.angle}),this._line_material.color.copy(this.node.light.color)}}oG._matrix_scale=new p.a;class aG extends S.a{constructor(t=1,e=1,n=1,i=8,s=1,r=!1,o=0,a=2*Math.PI){super(),this.type=\\\\\\\"CylinderGeometry\\\\\\\",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:s,openEnded:r,thetaStart:o,thetaLength:a};const l=this;i=Math.floor(i),s=Math.floor(s);const c=[],h=[],u=[],_=[];let m=0;const f=[],g=n/2;let v=0;function y(n){const s=m,r=new d.a,f=new p.a;let y=0;const x=!0===n?t:e,b=!0===n?1:-1;for(let t=1;t<=i;t++)h.push(0,g*b,0),u.push(0,b,0),_.push(.5,.5),m++;const w=m;for(let t=0;t<=i;t++){const e=t/i*a+o,n=Math.cos(e),s=Math.sin(e);f.x=x*s,f.y=g*b,f.z=x*n,h.push(f.x,f.y,f.z),u.push(0,b,0),r.x=.5*n+.5,r.y=.5*s*b+.5,_.push(r.x,r.y),m++}for(let t=0;t<i;t++){const e=s+t,i=w+t;!0===n?c.push(i,i+1,e):c.push(i+1,i,e),y+=3}l.addGroup(v,y,!0===n?1:2),v+=y}!function(){const r=new p.a,d=new p.a;let y=0;const x=(e-t)/n;for(let l=0;l<=s;l++){const c=[],p=l/s,v=p*(e-t)+t;for(let t=0;t<=i;t++){const e=t/i,s=e*a+o,l=Math.sin(s),f=Math.cos(s);d.x=v*l,d.y=-p*n+g,d.z=v*f,h.push(d.x,d.y,d.z),r.set(l,x,f).normalize(),u.push(r.x,r.y,r.z),_.push(e,1-p),c.push(m++)}f.push(c)}for(let t=0;t<i;t++)for(let e=0;e<s;e++){const n=f[e][t],i=f[e+1][t],s=f[e+1][t+1],r=f[e][t+1];c.push(n,i,r),c.push(i,s,r),y+=6}l.addGroup(v,y,0),v+=y}(),!1===r&&(t>0&&y(!0),e>0&&y(!1)),this.setIndex(c),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(h,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(u,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(_,2))}static fromJSON(t){return new aG(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class lG extends aG{constructor(t=1,e=1,n=8,i=1,s=!1,r=0,o=2*Math.PI){super(0,t,e,n,i,s,r,o),this.type=\\\\\\\"ConeGeometry\\\\\\\",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:s,thetaStart:r,thetaLength:o}}static fromJSON(t){return new lG(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class cG{constructor(t){this.node=t}update(){const t=this.node.pv;if(t.tvolumetric){const e=this.object(),n=this.node.light;oG.updateConeObject(e,{sizeMult:t.helperSize,distance:n.distance,angle:n.angle});const i=e.material.uniforms;i.lightColor.value.copy(n.color),i.attenuation.value=t.volAttenuation,i.anglePower.value=t.volAnglePower,this.node.light.add(e)}else this._mesh&&this.node.light.remove(this._mesh)}object(){return this._mesh=this._mesh||this._createMesh()}_createMesh(){const t=new lG(1,1,256,1);t.applyMatrix4((new A.a).makeTranslation(0,-.5,0)),t.applyMatrix4((new A.a).makeRotationX(-Math.PI/2));const e=this._createMaterial(),n=new B.a(t,e);return n.matrixAutoUpdate=!1,n.name=\\\\\\\"Volumetric\\\\\\\",e.uniforms.lightColor.value.set(\\\\\\\"white\\\\\\\"),n}_createMaterial(){return new F({uniforms:{attenuation:{value:5},anglePower:{value:1.2},lightColor:{value:new D.a(\\\\\\\"cyan\\\\\\\")}},vertexShader:\\\\\\\"varying vec3 vNormal;\\\\nvarying vec3 vWorldPosition;\\\\nvarying vec3 vWorldOrigin;\\\\n\\\\nvoid main(){\\\\n\\\\t// compute intensity\\\\n\\\\tvNormal\\\\t\\\\t= normalize( normalMatrix * normal );\\\\n\\\\n\\\\tvec4 worldPosition\\\\t= modelMatrix * vec4( position, 1.0 );\\\\n\\\\tvWorldPosition\\\\t\\\\t= worldPosition.xyz;\\\\n\\\\n\\\\tvec4 worldOrigin\\\\t= modelMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\tvWorldOrigin\\\\t\\\\t= worldOrigin.xyz;\\\\n\\\\n\\\\t// set gl_Position\\\\n\\\\tgl_Position\\\\t= projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n}\\\\\\\",fragmentShader:\\\\\\\"varying vec3 vNormal;\\\\nvarying vec3 vWorldPosition;\\\\nvarying vec3 vWorldOrigin;\\\\n\\\\nuniform vec3 lightColor;\\\\n\\\\n// uniform vec3 spotPosition;\\\\n\\\\nuniform float attenuation;\\\\nuniform float anglePower;\\\\n\\\\nvoid main(){\\\\n\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\t// distance attenuation   //\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\tfloat intensity = distance(vWorldPosition, vWorldOrigin) / attenuation;\\\\n\\\\tintensity = 1.0 - clamp(intensity, 0.0, 1.0);\\\\n\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\t// intensity on angle   //\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\tvec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));\\\\n\\\\tfloat angleIntensity = pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );\\\\n\\\\tintensity = intensity * angleIntensity;\\\\n\\\\t// 'gl_FragColor = vec4( lightColor, intensity );\\\\n\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\t// final color   //\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\n\\\\t// set the final color\\\\n\\\\tgl_FragColor = vec4( lightColor, intensity);\\\\n}\\\\\\\",transparent:!0,depthWrite:!1})}}class hG extends(wU(ua)){constructor(){super(...arguments),this.light=ha.FOLDER(),this.color=ha.COLOR([1,1,1],{conversion:lo.SRGB_TO_LINEAR}),this.intensity=ha.FLOAT(1),this.angle=ha.FLOAT(45,{range:[0,180]}),this.penumbra=ha.FLOAT(.1),this.decay=ha.FLOAT(.1,{range:[0,1]}),this.distance=ha.FLOAT(100,{range:[0,100]}),this.showHelper=ha.BOOLEAN(0),this.helperSize=ha.FLOAT(1,{visibleIf:{showHelper:1}}),this.shadow=ha.FOLDER(),this.castShadow=ha.BOOLEAN(1),this.shadowAutoUpdate=ha.BOOLEAN(1,{visibleIf:{castShadow:1}}),this.shadowUpdateOnNextRender=ha.BOOLEAN(0,{visibleIf:{castShadow:1,shadowAutoUpdate:0}}),this.shadowRes=ha.VECTOR2([256,256],{visibleIf:{castShadow:1}}),this.shadowBias=ha.FLOAT(.001,{visibleIf:{castShadow:1},range:[-.01,.01],rangeLocked:[!1,!1]}),this.shadowNear=ha.FLOAT(.1,{visibleIf:{castShadow:1},range:[0,100],rangeLocked:[!0,!1]}),this.shadowFar=ha.FLOAT(100,{visibleIf:{castShadow:1},range:[0,100],rangeLocked:[!0,!1]}),this.shadowRadius=ha.FLOAT(0,{visibleIf:{castShadow:1},range:[0,10],rangeLocked:[!0,!1]}),this.volumetric=ha.FOLDER(),this.tvolumetric=ha.BOOLEAN(0),this.volAttenuation=ha.FLOAT(5,{range:[0,10],rangeLocked:[!0,!1]}),this.volAnglePower=ha.FLOAT(10,{range:[0,20],rangeLocked:[!0,!1]})}}const uG=new hG;class dG extends EU{constructor(){super(...arguments),this.paramsConfig=uG,this._helperController=new SU(this,oG,\\\\\\\"SpotLightHelper\\\\\\\"),this._volumetricController=new cG(this)}static type(){return GU.SPOT}initializeNode(){this._helperController.initializeNode()}createLight(){const t=new rG.a;return t.matrixAutoUpdate=!1,t.castShadow=!0,t.shadow.bias=-.001,t.shadow.mapSize.x=256,t.shadow.mapSize.y=256,t.shadow.camera.near=.1,this._target_target=t.target,this._target_target.name=\\\\\\\"SpotLight Default Target\\\\\\\",this._target_target.matrixAutoUpdate=!1,this.object.add(this._target_target),t}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity,this.light.angle=this.pv.angle*(Math.PI/180),this.light.penumbra=this.pv.penumbra,this.light.decay=this.pv.decay,this.light.distance=this.pv.distance,this._helperController.update(),this._volumetricController.update()}updateShadowParams(){this.light.castShadow=this.pv.castShadow,this.light.shadow.autoUpdate=this.pv.shadowAutoUpdate,this.light.shadow.needsUpdate=this.pv.shadowUpdateOnNextRender,this.light.shadow.mapSize.copy(this.pv.shadowRes),this.light.shadow.camera.near=this.pv.shadowNear,this.light.shadow.camera.far=this.pv.shadowFar,this.light.shadow.bias=this.pv.shadowBias,this.light.shadow.radius=this.pv.shadowRadius}}let pG;const _G=function(){return void 0===pG&&(pG=new(window.AudioContext||window.webkitAudioContext)),pG},mG=new p.a,fG=new hh.a,gG=new p.a,vG=new p.a;class yG extends Q.a{constructor(){super(),this.type=\\\\\\\"AudioListener\\\\\\\",this.context=_G(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Dm}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(mG,fG,gG),vG.set(0,0,-1).applyQuaternion(fG),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(mG.x,t),e.positionY.linearRampToValueAtTime(mG.y,t),e.positionZ.linearRampToValueAtTime(mG.z,t),e.forwardX.linearRampToValueAtTime(vG.x,t),e.forwardY.linearRampToValueAtTime(vG.y,t),e.forwardZ.linearRampToValueAtTime(vG.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(mG.x,mG.y,mG.z),e.setOrientation(vG.x,vG.y,vG.z,n.x,n.y,n.z)}}class xG extends(wU(ua)){constructor(){super(...arguments),this.audio=ha.FOLDER(),this.soundOn=ha.BOOLEAN(1),this.masterVolume=ha.FLOAT(1,{range:[0,1],rangeLocked:[!0,!1]})}}const bG=new xG;class wG extends cU{constructor(){super(...arguments),this.paramsConfig=bG,this.hierarchyController=new MU(this),this.transformController=new AU(this),this.flags=new Di(this)}static type(){return Ig.AUDIO_LISTENER}createObject(){const t=new yG;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.soundOn],(()=>this.pv.soundOn?\\\\\\\"on\\\\\\\":\\\\\\\"off\\\\\\\"))}))}))}cook(){this.transformController.update(),this._updatePositionalAudio(),this.cookController.endCook()}_updatePositionalAudio(){const t=this.pv.soundOn?this.pv.masterVolume:0;this.object.setMasterVolume(t)}}class TG extends Ms.a{constructor(t=1){const e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t],n=new S.a;n.setAttribute(\\\\\\\"position\\\\\\\",new C.c(e,3)),n.setAttribute(\\\\\\\"color\\\\\\\",new C.c([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));super(n,new As.a({vertexColors:!0,toneMapped:!1})),this.type=\\\\\\\"AxesHelper\\\\\\\"}setColors(t,e,n){const i=new D.a,s=this.geometry.attributes.color.array;return i.set(t),i.toArray(s,0),i.toArray(s,3),i.set(e),i.toArray(s,6),i.toArray(s,9),i.set(n),i.toArray(s,12),i.toArray(s,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}var AG;!function(t){t.TOGETHER=\\\\\\\"translate + rotate together\\\\\\\",t.SEPARATELY=\\\\\\\"translate + rotate separately\\\\\\\"}(AG||(AG={}));const MG=[AG.TOGETHER,AG.SEPARATELY];const EG=new class extends ua{constructor(){super(...arguments),this.object0=ha.OPERATOR_PATH(\\\\\\\"/geo1\\\\\\\",{nodeSelection:{context:ts.OBJ}}),this.object1=ha.OPERATOR_PATH(\\\\\\\"/geo2\\\\\\\",{nodeSelection:{context:ts.OBJ}}),this.mode=ha.INTEGER(MG.indexOf(AG.TOGETHER),{menu:{entries:MG.map(((t,e)=>({name:t,value:e})))}}),this.blend=ha.FLOAT(0,{visibleIf:{mode:MG.indexOf(AG.TOGETHER)},range:[0,1],rangeLocked:[!1,!1]}),this.blendT=ha.FLOAT(0,{visibleIf:{mode:MG.indexOf(AG.SEPARATELY)},range:[0,1],rangeLocked:[!1,!1]}),this.blendR=ha.FLOAT(0,{visibleIf:{mode:MG.indexOf(AG.SEPARATELY)},range:[0,1],rangeLocked:[!1,!1]})}};class SG extends cU{constructor(){super(...arguments),this.paramsConfig=EG,this.hierarchyController=new MU(this),this.flags=new Di(this),this._helper=new TG(1),this._t0=new p.a,this._q0=new hh.a,this._s0=new p.a,this._t1=new p.a,this._q1=new hh.a,this._s1=new p.a}static type(){return\\\\\\\"blend\\\\\\\"}createObject(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.io.inputs.setCount(0),this.addPostDirtyHook(\\\\\\\"blend_on_dirty\\\\\\\",(()=>{this.cookController.cookMainWithoutInputs()})),this._updateHelperHierarchy(),this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this.flags.display.active()?this.object.add(this._helper):this.object.remove(this._helper)}cook(){const t=this.p.object0.found_node_with_context(ts.OBJ),e=this.p.object1.found_node_with_context(ts.OBJ);t&&e&&this._blend(t.object,e.object),this.cookController.endCook()}_blend(t,e){const n=MG[this.pv.mode];switch(n){case AG.TOGETHER:return this._blend_together(t,e);case AG.SEPARATELY:return this._blend_separately(t,e)}os.unreachable(n)}_blend_together(t,e){this._decompose_matrices(t,e),this._object.position.copy(this._t0).lerp(this._t1,this.pv.blend),this._object.quaternion.copy(this._q0).slerp(this._q1,this.pv.blend),this._object.matrixAutoUpdate||this._object.updateMatrix()}_blend_separately(t,e){this._decompose_matrices(t,e),this._object.position.copy(this._t0).lerp(this._t1,this.pv.blendT),this._object.quaternion.copy(this._q0).slerp(this._q1,this.pv.blendR),this._object.matrixAutoUpdate||this._object.updateMatrix()}_decompose_matrices(t,e){t.matrixWorld.decompose(this._t0,this._q0,this._s0),e.matrixWorld.decompose(this._t1,this._q1,this._s1)}}var CG={uniforms:{tDiffuse:{value:null},h:{value:1/512}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float h;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 sum = vec4( 0.0 );\\\\n\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = sum;\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const NG={uniforms:{tDiffuse:{value:null},v:{value:1/512}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float v;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 sum = vec4( 0.0 );\\\\n\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = sum;\\\\n\\\\n\\\\t\\\\t}\\\\\\\"},LG=1/256e3;class OG{constructor(t){this._renderTargetBlur=this._createRenderTarget(t),this._camera=this._createCamera(),this._blurPlane=this._createBlurPlane(),this._horizontalBlurMaterial=new F(CG),this._horizontalBlurMaterial.depthTest=!1,this._verticalBlurMaterial=new F(NG),this._verticalBlurMaterial.depthTest=!1}setSize(t,e){this._renderTargetBlur.setSize(t,e)}_createRenderTarget(t){const e=new K(t.x,t.y);return e.texture.generateMipmaps=!1,e}_createCamera(){const t=new ot.a(-.5,.5,.5,-.5,0,1);return t.position.z=.5,t}_createBlurPlane(){const t=new L(1,1);return new B.a(t)}applyBlur(t,e,n,i){const s=Math.max(this._renderTargetBlur.width,this._renderTargetBlur.height);this._horizontalBlurMaterial.uniforms.tDiffuse.value=t.texture,this._horizontalBlurMaterial.uniforms.h.value=n*s*LG,this._blurPlane.material=this._horizontalBlurMaterial,e.setRenderTarget(this._renderTargetBlur),e.render(this._blurPlane,this._camera),this._verticalBlurMaterial.uniforms.tDiffuse.value=this._renderTargetBlur.texture,this._verticalBlurMaterial.uniforms.v.value=i*s*LG,this._blurPlane.material=this._verticalBlurMaterial,e.setRenderTarget(t),e.render(this._blurPlane,this._camera)}}var PG;!function(t){t.ON_RENDER=\\\\\\\"On Every Render\\\\\\\",t.MANUAL=\\\\\\\"Manual\\\\\\\"}(PG||(PG={}));const RG=[PG.ON_RENDER,PG.MANUAL];class IG extends(wU(ua)){constructor(){super(...arguments),this.shadow=ha.FOLDER(),this.dist=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]}),this.planeSize=ha.VECTOR2([1,1]),this.shadowRes=ha.VECTOR2([256,256]),this.blur=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]}),this.tblur2=ha.BOOLEAN(1),this.blur2=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1],visibleIf:{tblur2:1}}),this.darkness=ha.FLOAT(1),this.opacity=ha.FLOAT(1),this.showHelper=ha.BOOLEAN(0),this.updateMode=ha.INTEGER(RG.indexOf(PG.ON_RENDER),{callback:t=>{BG.PARAM_CALLBACK_update_updateMode(t)},menu:{entries:RG.map(((t,e)=>({name:t,value:e})))}}),this.update=ha.BUTTON(null,{callback:t=>{BG.PARAM_CALLBACK_updateManual(t)},visibleIf:{updateMode:RG.indexOf(PG.MANUAL)}}),this.scene=ha.FOLDER(),this.include=ha.STRING(\\\\\\\"\\\\\\\"),this.exclude=ha.STRING(\\\\\\\"\\\\\\\"),this.updateObjectsList=ha.BUTTON(null,{callback:t=>{BG.PARAM_CALLBACK_updateObjectsList(t)}}),this.printResolveObjectsList=ha.BUTTON(null,{callback:t=>{BG.PARAM_CALLBACK_printResolveObjectsList(t)}})}}const FG=new IG,DG=new d.a(256,256);class BG extends cU{constructor(){super(...arguments),this.paramsConfig=FG,this.hierarchyController=new MU(this),this.flags=new Di(this),this._renderTarget=this._createRenderTarget(DG),this._coreRenderBlur=this._createCoreRenderBlur(DG),this._includedObjects=[],this._includedAncestors=[],this._excludedObjects=[],this.transformController=new AU(this),this._darknessUniform={value:1},this._emptyOnBeforeRender=()=>{},this._emptyRenderHook=()=>{},this._on_object_before_render_bound=this._update.bind(this),this._initialVisibilityState=new WeakMap}static type(){return\\\\\\\"contactShadow\\\\\\\"}_createRenderTarget(t){const e=new K(t.x,t.y);return e.texture.generateMipmaps=!1,e}_createCoreRenderBlur(t){return new OG(t)}createObject(){const t=new Fn.a;this._shadowGroup=new Fn.a,t.add(this._shadowGroup),this._shadowGroup.name=\\\\\\\"shadowGroup\\\\\\\";const e=new L(1,1).rotateX(-Math.PI/2),n=e.getAttribute(\\\\\\\"uv\\\\\\\").array;for(let t of[1,3,5,7])n[t]=1-n[t];return this._planeMaterial=new lt.a({map:this._renderTarget.texture,opacity:1,transparent:!0,depthWrite:!1}),this._plane=new B.a(e,this._planeMaterial),this._plane.renderOrder=1,this._plane.matrixAutoUpdate=!1,this._shadowGroup.add(this._plane),this._createDepthCamera(this._shadowGroup),this._createMaterials(),t}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this._updateShadowGroupVisibility(),this._updateHelperVisibility(),this.flags.display.onUpdate((()=>{this._updateShadowGroupVisibility(),this._updateHelperVisibility()}))}async cook(){this.transformController.update(),this._updateRenderHook(),this._updateHelperVisibility(),this._updateObjectsList(),this._planeMaterial&&(this._planeMaterial.opacity=this.pv.opacity),this._darknessUniform.value=this.pv.darkness,this._plane&&this._shadowCamera&&this._helper&&(this._plane.scale.x=this.pv.planeSize.x,this._plane.scale.z=this.pv.planeSize.y,this._plane.updateMatrix(),this._shadowCamera.left=-this.pv.planeSize.x/2,this._shadowCamera.right=this.pv.planeSize.x/2,this._shadowCamera.bottom=-this.pv.planeSize.y/2,this._shadowCamera.top=this.pv.planeSize.y/2,this._shadowCamera.far=this.pv.dist,this._shadowCamera.updateProjectionMatrix(),this._helper.update()),this._renderTarget.width==this.pv.shadowRes.x&&this._renderTarget.height==this.pv.shadowRes.y||this._planeMaterial&&(this._renderTarget=this._createRenderTarget(this.pv.shadowRes),this._coreRenderBlur=this._createCoreRenderBlur(this.pv.shadowRes),this._planeMaterial.map=this._renderTarget.texture),this.cookController.endCook()}_createDepthCamera(t){this._shadowCamera=new ot.a(-.5,.5,.5,-.5,0,1),this._shadowCamera.rotation.x=Math.PI/2,t.add(this._shadowCamera),this._helper=new zU(this._shadowCamera),this._helper.visible=!1,this._shadowCamera.add(this._helper)}_createMaterials(){this._depthMaterial=new Sn,this._depthMaterial.onBeforeCompile=t=>{t.uniforms.darkness=this._darknessUniform,t.fragmentShader=`\\\\n\\\\t\\\\t\\\\tuniform float darkness;\\\\n\\\\t\\\\t\\\\t${t.fragmentShader.replace(\\\\\\\"gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\\\\\\",\\\\\\\"gl_FragColor = vec4( vec3( 0.0 ), ( 1.0 - fragCoordZ ) * darkness );\\\\\\\")}\\\\n\\\\t\\\\t`},this._depthMaterial.depthTest=!1,this._depthMaterial.depthWrite=!1}_renderShadow(t,e){if(!this._helper)return;if(!this._depthMaterial)return;if(!this._shadowCamera)return;if(!this._helper)return;if(!this._plane)return;const n=this._plane.onBeforeRender,i=e.background,s=this._helper.visible;e.background=null,this._plane.onBeforeRender=this._emptyOnBeforeRender,this._helper.visible=!1,e.overrideMaterial=this._depthMaterial,this._initVisibility(e),t.setRenderTarget(this._renderTarget),t.render(e,this._shadowCamera),this._coreRenderBlur.applyBlur(this._renderTarget,t,this.pv.blur,this.pv.blur),this.pv.tblur2&&this._coreRenderBlur.applyBlur(this._renderTarget,t,this.pv.blur2,this.pv.blur2),this._restoreVisibility(e),e.overrideMaterial=null,this._helper.visible=s,t.setRenderTarget(null),e.background=i,this._plane.onBeforeRender=n}_updateShadowGroupVisibility(){this._shadowGroup&&(this.flags.display.active()?this._shadowGroup.visible=!0:this._shadowGroup.visible=!1)}_updateHelperVisibility(){this._helper&&(this.flags.display.active()&&this.pv.showHelper?this._helper.visible=!0:this._helper.visible=!1)}_updateRenderHook(){const t=RG[this.pv.updateMode];switch(t){case PG.ON_RENDER:return this._addRenderHook();case PG.MANUAL:return this._removeRenderHook()}os.unreachable(t)}_addRenderHook(){this._plane&&this._plane.onBeforeRender!=this._on_object_before_render_bound&&(this._plane.onBeforeRender=this._on_object_before_render_bound)}_removeRenderHook(){this._plane&&this._plane.onBeforeRender!=this._emptyRenderHook&&(this._plane.onBeforeRender=this._emptyRenderHook)}_update(t,e,n,i,s,r){t&&e?this._renderShadow(t,e):console.log(\\\\\\\"no renderer or scene\\\\\\\")}_updateManual(){const t=li.renderersController.firstRenderer();if(!t)return void console.log(\\\\\\\"no renderer found\\\\\\\");const e=this.scene().threejsScene();this._renderShadow(t,e)}static PARAM_CALLBACK_update_updateMode(t){t._updateRenderHook()}static PARAM_CALLBACK_updateManual(t){t._updateManual()}static PARAM_CALLBACK_updateObjectsList(t){t._updateObjectsList()}_updateObjectsList(){\\\\\\\"\\\\\\\"!=this.pv.include?this._includedObjects=this.scene().objectsByMask(this.pv.include):this._includedObjects=[];const t=new Map;for(let e of this._includedObjects)e.traverseAncestors((e=>{t.set(e.uuid,e)}));this._includedAncestors=[],t.forEach(((t,e)=>{this._includedAncestors.push(t)})),\\\\\\\"\\\\\\\"!=this.pv.exclude?this._excludedObjects=this.scene().objectsByMask(this.pv.exclude):this._excludedObjects=[]}static PARAM_CALLBACK_printResolveObjectsList(t){t._printResolveObjectsList()}_printResolveObjectsList(){console.log(\\\\\\\"included objects:\\\\\\\"),console.log(this._includedObjects),console.log(\\\\\\\"included parents:\\\\\\\"),console.log(this._includedAncestors),console.log(\\\\\\\"excluded objects:\\\\\\\"),console.log(this._excludedObjects)}_initVisibility(t){this._includedObjects.length>0?t.traverse((t=>{this._initialVisibilityState.set(t,t.visible),t.visible=!1})):(this._storeObjectsVisibility(this._includedObjects),this._storeObjectsVisibility(this._includedAncestors),this._storeObjectsVisibility(this._excludedObjects)),this._setObjectsVisibility(this._includedObjects,!0),this._setObjectsVisibility(this._includedAncestors,!0),this._setObjectsVisibility(this._excludedObjects,!1)}_storeObjectsVisibility(t){for(let e of t)this._initialVisibilityState.set(e,e.visible)}_setObjectsVisibility(t,e){for(let n of t)n.visible=e}_restoreVisibility(t){this._includedObjects.length>0?t.traverse((t=>{const e=this._initialVisibilityState.get(t);e&&(t.visible=e)})):(this._restoreObjectsVisibility(this._includedObjects),this._restoreObjectsVisibility(this._includedAncestors),this._restoreObjectsVisibility(this._excludedObjects))}_restoreObjectsVisibility(t){for(let e of t){const t=this._initialVisibilityState.get(e);t&&(e.visible=t)}}}const zG=\\\\\\\"display\\\\\\\";class kG{constructor(t){this.node=t,this._children_uuids_dict=new Map,this._children_length=0,this._sop_group=this._create_sop_group()}_create_sop_group(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}sopGroup(){return this._sop_group}set_sop_group_name(){this._sop_group.name=`${this.node.name()}:sop_group`}displayNodeControllerCallbacks(){return{onDisplayNodeRemove:()=>{this.remove_children()},onDisplayNodeSet:()=>{setTimeout((()=>{this.request_display_node_container()}),0)},onDisplayNodeUpdate:()=>{this.request_display_node_container()}}}initializeNode(){var t;this.node.object.add(this.sopGroup()),this.node.nameController.add_post_set_fullPath_hook(this.set_sop_group_name.bind(this)),this._create_sop_group();const e=null===(t=this.node.flags)||void 0===t?void 0:t.display;e&&e.onUpdate((()=>{this._updateSopGroupHierarchy(),e.active()&&this.request_display_node_container()}))}_updateSopGroupHierarchy(){var t;if(null===(t=this.node.flags)||void 0===t?void 0:t.display){const t=this.sopGroup();this.usedInScene()?(t.visible=!0,this.node.object.add(t),t.updateMatrix()):(t.visible=!1,this.node.object.remove(t))}}usedInScene(){var t,e;const n=this.node.params.has(zG),i=this.node.params.boolean(zG),s=this.node.usedInScene(),r=(null===(e=null===(t=this.node.flags)||void 0===t?void 0:t.display)||void 0===e?void 0:e.active())||!1;return s&&r&&(!n||i)}async request_display_node_container(){this.node.scene().loadingController.loaded()&&this.usedInScene()&&await this._set_content_under_sop_group()}remove_children(){if(0==this._sop_group.children.length)return;let t;for(;t=this._sop_group.children[0];)this._sop_group.remove(t);this._children_uuids_dict.clear(),this._children_length=0}async _set_content_under_sop_group(){var t;const e=this.node.displayNodeController.displayNode();if(e&&(null===(t=e.parent())||void 0===t?void 0:t.graphNodeId())==this.node.graphNodeId()){const t=(await e.compute()).coreContent();if(t){const e=t.objects();let n=e.length!=this._children_length;if(!n)for(let t of e)this._children_uuids_dict.get(t.uuid)||(n=!0);if(n){this.remove_children();for(let t of e)this._sop_group.add(t),t.updateMatrix(),this._children_uuids_dict.set(t.uuid,!0);this._children_length=e.length}return}}this.remove_children()}}class UG extends(wU(ua)){constructor(){super(...arguments),this.display=ha.BOOLEAN(1),this.renderOrder=ha.INTEGER(0,{range:[0,10],rangeLocked:[!0,!1]})}}const GG=new UG;class VG extends cU{constructor(){super(...arguments),this.paramsConfig=GG,this.hierarchyController=new MU(this),this.transformController=new AU(this),this.flags=new Di(this),this.childrenDisplayController=new kG(this),this.displayNodeController=new Fm(this,this.childrenDisplayController.displayNodeControllerCallbacks()),this._children_controller_context=ts.SOP,this._onChildAddBound=this._onChildAdd.bind(this)}static type(){return Ig.GEO}createObject(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.lifecycle.add_on_child_add_hook(this._onChildAddBound),this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this.childrenDisplayController.initializeNode()}isDisplayNodeCooking(){if(this.flags.display.active()){const t=this.displayNodeController.displayNode();return!!t&&t.isDirty()}return!1}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}_onChildAdd(t){var e,n;this.scene().loadingController.loaded()&&1==this.children().length&&(null===(n=null===(e=t.flags)||void 0===e?void 0:e.display)||void 0===n||n.set(!0))}cook(){this.transformController.update(),this.object.visible=this.pv.display,this.object.renderOrder=this.pv.renderOrder,this.cookController.endCook()}}class HG extends(wU(ua)){}const jG=new HG;class WG extends cU{constructor(){super(...arguments),this.paramsConfig=jG,this.hierarchyController=new MU(this),this.transformController=new AU(this),this.flags=new Di(this),this._helper=new TG(1)}static type(){return\\\\\\\"null\\\\\\\"}createObject(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this._updateHelperHierarchy(),this._helper.matrixAutoUpdate=!1,this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this.flags.display.active()?(this.object.add(this._helper),this._helper.updateMatrix()):this.object.remove(this._helper)}cook(){this.transformController.update(),this.cookController.endCook()}}const qG=new class extends ua{constructor(){super(...arguments),this.center=ha.VECTOR3([0,0,0]),this.longitude=ha.FLOAT(0,{range:[0,360]}),this.latitude=ha.FLOAT(0,{range:[-180,180]}),this.depth=ha.FLOAT(1,{range:[0,10]})}},XG=\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\",YG=new p.a(0,1,0),$G=new p.a(-1,0,0);class JG extends cU{constructor(){super(...arguments),this.paramsConfig=qG,this.hierarchyController=new MU(this),this.flags=new Di(this),this._helper=new TG(1),this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this),this._centerMatrix=new A.a,this._longitudeMatrix=new A.a,this._latitudeMatrix=new A.a,this._depthMatrix=new A.a,this._fullMatrix=new A.a,this._decomposed={t:new p.a,q:new hh.a,s:new p.a}}static type(){return\\\\\\\"polarTransform\\\\\\\"}createObject(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.dirtyController.hasHook(XG)||this.dirtyController.addPostDirtyHook(XG,this._cook_main_without_inputs_when_dirty_bound),this._updateHelperHierarchy(),this._helper.matrixAutoUpdate=!1,this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this.flags.display.active()?(this.object.add(this._helper),this._helper.updateMatrix()):this.object.remove(this._helper)}async _cook_main_without_inputs_when_dirty(){await this.cookController.cookMainWithoutInputs()}cook(){const t=this.object;this._centerMatrix.identity(),this._longitudeMatrix.identity(),this._latitudeMatrix.identity(),this._depthMatrix.identity(),this._centerMatrix.makeTranslation(this.pv.center.x,this.pv.center.y,this.pv.center.z),this._longitudeMatrix.makeRotationAxis(YG,Object(On.e)(this.pv.longitude)),this._latitudeMatrix.makeRotationAxis($G,Object(On.e)(this.pv.latitude)),this._depthMatrix.makeTranslation(0,0,this.pv.depth),this._fullMatrix.copy(this._centerMatrix).multiply(this._longitudeMatrix).multiply(this._latitudeMatrix).multiply(this._depthMatrix),this._fullMatrix.decompose(this._decomposed.t,this._decomposed.q,this._decomposed.s),t.position.copy(this._decomposed.t),t.quaternion.copy(this._decomposed.q),t.scale.copy(this._decomposed.s),t.updateMatrix(),this.cookController.endCook()}}class ZG{constructor(t){this._scene=t,this._data={}}data(t){this._scene.nodesController.reset_node_context_signatures();const e=rV.dispatch_node(this._scene.root()),n=e.data(),i=e.ui_data();return this._data={properties:{frame:this._scene.frame()||Nl.START_FRAME,maxFrame:this._scene.maxFrame(),maxFrameLocked:this._scene.timeController.maxFrameLocked(),realtimeState:this._scene.timeController.realtimeState(),mainCameraNodePath:this._scene.camerasController.mainCameraNodePath(),versions:t},root:n,ui:i},this._data}static sanitize_string(t){return t=t.replace(/'/g,\\\\\\\"'\\\\\\\"),t=ss.escapeLineBreaks(t)}}class KG{constructor(t){this._node=t}data(t={}){var e,n,i,s,r,o,a;this.is_root()||this._node.scene().nodesController.register_node_context_signature(this._node),this._data={type:this._node.type()};const l=this.nodes_data(t);Object.keys(l).length>0&&(this._data.nodes=l);const c=this.params_data();if(Object.keys(c).length>0&&(this._data.params=c),!this.is_root()){this._node.io.inputs.maxInputsCountOverriden()&&(this._data.maxInputsCount=this._node.io.inputs.maxInputsCount());const t=this.inputs_data();t.length>0&&(this._data.inputs=t);const e=this.connection_points_data();e&&(this._data.connection_points=e)}if(this._node.flags){const t={};(this._node.flags.hasBypass()||this._node.flags.hasDisplay()||this._node.flags.hasOptimize())&&(this._node.flags.hasBypass()&&(null===(e=this._node.flags.bypass)||void 0===e?void 0:e.active())&&(t.bypass=this._node.flags.bypass.active()),this._node.flags.hasDisplay()&&(!(null===(n=this._node.flags.display)||void 0===n?void 0:n.active())&&(null===(i=this._node.parent())||void 0===i?void 0:i.displayNodeController)||(t.display=null===(s=this._node.flags.display)||void 0===s?void 0:s.active())),this._node.flags.hasOptimize()&&(null===(r=this._node.flags.optimize)||void 0===r?void 0:r.active())&&(t.optimize=null===(o=this._node.flags.optimize)||void 0===o?void 0:o.active())),Object.keys(t).length>0&&(this._data.flags=t)}if(this._node.childrenAllowed()){const t=null===(a=this._node.childrenController)||void 0===a?void 0:a.selection;if(t&&this._node.children().length>0){const e=[],n={};for(let e of t.nodes())n[e.graphNodeId()]=!0;for(let t of this._node.children())t.graphNodeId()in n&&e.push(t);const i=e.map((t=>t.name()));i.length>0&&(this._data.selection=i)}}if(this._node.io.inputs.overrideClonedStateAllowed()){const t=this._node.io.inputs.clonedStateOverriden();t&&(this._data.cloned_state_overriden=t)}if(this._node.persisted_config){const t=this._node.persisted_config.toJSON();t&&(this._data.persisted_config=t)}return this.add_custom(),this._data}ui_data(t={}){const e=this.ui_data_without_children(),n=this._node.children();return n.length>0&&(e.nodes={},n.forEach((n=>{const i=rV.dispatch_node(n);e.nodes[n.name()]=i.ui_data(t)}))),e}ui_data_without_children(){const t={};if(!this.is_root()){const e=this._node.uiData;t.pos=e.position().toArray();const n=e.comment();n&&(t.comment=ZG.sanitize_string(n))}return t}is_root(){return null===this._node.parent()&&this._node.graphNodeId()==this._node.root().graphNodeId()}inputs_data(){const t=[];return this._node.io.inputs.inputs().forEach(((e,n)=>{var i;if(e){const s=this._node.io.connections.inputConnection(n);if(this._node.io.inputs.hasNamedInputs()){const r=s.output_index,o=null===(i=e.io.outputs.namedOutputConnectionPoints()[r])||void 0===i?void 0:i.name();o&&(t[n]={index:n,node:e.name(),output:o})}else t[n]=e.name()}})),t}connection_points_data(){if(this._node.io.has_connection_points_controller&&this._node.io.connection_points.initialized()&&(this._node.io.inputs.hasNamedInputs()||this._node.io.outputs.hasNamedOutputs())){const t={};if(this._node.io.inputs.hasNamedInputs()){t.in=[];for(let e of this._node.io.inputs.namedInputConnectionPoints())e&&t.in.push(e.toJSON())}if(this._node.io.outputs.hasNamedOutputs()){t.out=[];for(let e of this._node.io.outputs.namedOutputConnectionPoints())e&&t.out.push(e.toJSON())}return t}}params_data(){const t={};for(let e of this._node.params.names){const n=this._node.params.get(e);if(n&&!n.parent_param){const e=rV.dispatch_param(n);if(e.required()){const i=e.data();t[n.name()]=i}}}return t}nodes_data(t={}){const e={};for(let n of this._node.children()){const i=rV.dispatch_node(n);e[n.name()]=i.data(t)}return e}add_custom(){}}class QG{constructor(t){this._param=t,this._complex_data={}}required(){const t=this._param.options.isSpare()&&!this._param.parent_param,e=!this._param.isDefault();return t||e||this._param.options.hasOptionsOverridden()}data(){if(this._param.parent_param)throw console.warn(\\\\\\\"no component should be saved\\\\\\\"),\\\\\\\"no component should be saved\\\\\\\";return this._require_data_complex()?this._data_complex():this._data_simple()}_data_simple(){return this._param.rawInputSerialized()}_data_complex(){if(this._complex_data={},this._param.options.isSpare()&&!this._param.parent_param&&(this._complex_data.type=this._param.type(),this._complex_data.default_value=this._param.defaultValueSerialized(),this._complex_data.options=this._param.options.current()),this._param.isDefault()||(this._complex_data.raw_input=this._param.rawInputSerialized()),this._param.options.hasOptionsOverridden()){const t={},e=this._param.options.overriddenOptions();for(let n of Object.keys(e)){const i=e[n];m.isString(i)||m.isNumber(i)?t[n]=i:t[n]=JSON.stringify(i)}this._complex_data.overriden_options=t}return this._complex_data}_require_data_complex(){return!!this._param.options.isSpare()||!!this._param.options.hasOptionsOverridden()}add_main(){}}class tV extends QG{add_main(){if(!this._require_data_complex())return this._param.rawInputSerialized();this._complex_data.raw_input=this._param.rawInputSerialized()}}class eV extends QG{add_main(){let t=this._param.rawInput();if(t=ZG.sanitize_string(t),!this._require_data_complex())return t;this._complex_data.raw_input=t}}class nV extends QG{add_main(){let t=this._param.rawInput();if(t=ZG.sanitize_string(t),!this._require_data_complex())return t;this._complex_data.raw_input=t}}class iV extends QG{add_main(){if(!this._require_data_complex())return this._param.rawInputSerialized();this._complex_data.raw_input=this._param.rawInputSerialized()}}class sV extends KG{nodes_data(t={}){return t.showPolyNodesData?super.nodes_data(t):{}}ui_data(t={}){return t.showPolyNodesData?super.ui_data(t):this.ui_data_without_children()}}class rV{static dispatch_node(t){return t.polyNodeController?new sV(t):new KG(t)}static dispatch_param(t){return t instanceof ro?new tV(t):t instanceof fo?new eV(t):t instanceof Mo?new nV(t):t instanceof Ao?new iV(t):new QG(t)}}class oV{constructor(){this._objects=[],this._objects_with_geo=[],this.touch()}timestamp(){return this._timestamp}touch(){const t=li.performance.performanceManager();this._timestamp=t.now(),this.reset()}reset(){this._bounding_box=void 0,this._core_geometries=void 0,this._core_objects=void 0}clone(){const t=new oV;if(this._objects){const e=[];for(let t of this._objects)e.push(br.clone(t));t.setObjects(e)}return t}setObjects(t){this._objects=t,this._objects_with_geo=t.filter((t=>null!=t.geometry)),this.touch()}objects(){return this._objects}objectsWithGeo(){return this._objects_with_geo}coreObjects(){return this._core_objects=this._core_objects||this._create_core_objects()}_create_core_objects(){return this._objects?this._objects.map(((t,e)=>new br(t,e))):[]}objectsData(){return this._objects?this._objects.map((t=>this._objectData(t))):[]}_objectData(t){let e=0;return t.geometry&&(e=fr.pointsCount(t.geometry)),{type:Os(t.constructor),name:t.name,children_count:t.children.length,points_count:e}}geometries(){const t=[];for(let e of this.coreObjects()){const n=e.object().geometry;n&&t.push(n)}return t}coreGeometries(){return this._core_geometries=this._core_geometries||this._createCoreGeometries()}_createCoreGeometries(){const t=[];for(let e of this.geometries())t.push(new fr(e));return t}static geometryFromObject(t){return t.isMesh||t.isLine||t.isPoints?t.geometry:null}faces(){const t=[];for(let e of this.objectsWithGeo())if(e.geometry){const n=new fr(e.geometry).faces();for(let i of n)i.applyMatrix4(e.matrix),t.push(i)}return t}points(){return this.coreGeometries().map((t=>t.points())).flat()}pointsCount(){return f.sum(this.coreGeometries().map((t=>t.pointsCount())))}totalPointsCount(){if(this._objects){let t=0;for(let e of this._objects)e.traverse((e=>{const n=e.geometry;n&&(t+=fr.pointsCount(n))}));return t}return 0}pointsFromGroup(t){if(t){const e=ss.indices(t),n=this.points();return f.compact(e.map((t=>n[t])))}return this.points()}static _fromObjects(t){const e=new oV;return e.setObjects(t),e}objectsFromGroup(t){return this.coreObjectsFromGroup(t).map((t=>t.object()))}coreObjectsFromGroup(t){if(\\\\\\\"\\\\\\\"!==(t=t.trim())){const e=parseInt(t);return m.isNaN(e)?this.coreObjects().filter((e=>ss.matchMask(t,e.name()))):f.compact([this.coreObjects()[e]])}return this.coreObjects()}boundingBox(t=!1){return this._bounding_box=t?this._computeBoundingBox():this._bounding_box||this._computeBoundingBox()}center(){const t=new p.a;return this.boundingBox().getCenter(t),t}size(){const t=new p.a;return this.boundingBox().getSize(t),t}_computeBoundingBox(){let t;if(this._objects)for(let e of this._objects){const n=e.geometry;n&&(n.computeBoundingBox(),t?t.expandByObject(e):n.boundingBox&&(t=n.boundingBox.clone()))}return t=t||new Ry.a(new p.a(-1,-1,-1),new p.a(1,1,1)),t}computeVertexNormals(){for(let t of this.coreObjects())t.computeVertexNormals()}hasAttrib(t){let e;return null!=(e=this.coreGeometries()[0])&&e.hasAttrib(t)}attribType(t){const e=this.coreGeometries()[0];return null!=e?e.attribType(t):null}objectAttribType(t){const e=this.coreObjects()[0];return null!=e?e.attribType(t):null}renameAttrib(t,e,n){switch(n){case js.ATTRIB_CLASS.VERTEX:if(this.hasAttrib(t)&&this._objects)for(let n of this._objects)n.traverse((n=>{const i=oV.geometryFromObject(n);if(i){new fr(i).renameAttrib(t,e)}}));break;case js.ATTRIB_CLASS.OBJECT:if(this.hasAttrib(t)&&this._objects)for(let n of this._objects)n.traverse((n=>{new br(n,0).renameAttrib(t,e)}))}}attribNames(){let t;return null!=(t=this.coreGeometries()[0])?t.attribNames():[]}objectAttribNames(){let t;return null!=(t=this.coreObjects()[0])?t.attribNames():[]}attribNamesMatchingMask(t){const e=ss.attribNames(t),n=[];for(let t of this.attribNames())for(let i of e)if(ss.matchMask(t,i))n.push(t);else{t==Xs.remapName(i)&&n.push(t)}return f.uniq(n)}attribSizes(){let t;return null!=(t=this.coreGeometries()[0])?t.attribSizes():{}}objectAttribSizes(){let t;return null!=(t=this.coreObjects()[0])?t.attribSizes():{}}attribSize(t){let e;return null!=(e=this.coreGeometries()[0])?e.attribSize(t):0}addNumericVertexAttrib(t,e,n){null==n&&(n=Xs.default_value(e));for(let i of this.coreGeometries())i.addNumericAttrib(t,e,n)}static clone(t){const e=new Fn.a;return t.children.forEach((t=>{const n=br.clone(t);e.add(n)})),e}}class aV extends zl{static context(){return ts.SOP}cook(t,e){}createCoreGroupFromObjects(t){const e=new oV;return e.setObjects(t),e}createCoreGroupFromGeometry(t,e=Ns.MESH){const n=aV.createObject(t,e);return this.createCoreGroupFromObjects([n])}createObject(t,e,n){return aV.createObject(t,e,n)}static createObject(t,e,n){this.createIndexIfNone(t);const i=new(0,Ls[e])(t,n=n||js.MATERIALS[e].clone());return i.castShadow=!0,i.receiveShadow=!0,i.frustumCulled=!1,i.matrixAutoUpdate=!1,i}createIndexIfNone(t){aV.createIndexIfNone(t)}static createIndexIfNone(t){pr.createIndexIfNone(t)}}var lV;!function(t){t.FROM_SET_CORE_GROUP=\\\\\\\"from set_core_group\\\\\\\",t.FROM_SET_GROUP=\\\\\\\"from set_group\\\\\\\",t.FROM_SET_OBJECTS=\\\\\\\"from set_objects\\\\\\\",t.FROM_SET_OBJECT=\\\\\\\"from set_object\\\\\\\",t.FROM_SET_GEOMETRIES=\\\\\\\"from set_geometries\\\\\\\",t.FROM_SET_GEOMETRY=\\\\\\\"from set_geometry\\\\\\\"}(lV||(lV={}));const cV=\\\\\\\"input geometry\\\\\\\",hV=[cV,cV,cV,cV];class uV extends aa{constructor(){super(...arguments),this.flags=new Ui(this)}static context(){return ts.SOP}static displayedInputNames(){return hV}initializeBaseNode(){this.flags.display.set(!1),this.flags.display.onUpdate((()=>{if(this.flags.display.active()){const t=this.parent();t&&t.displayNodeController&&t.displayNodeController.setDisplayNode(this)}})),this.io.outputs.setHasOneOutput()}setCoreGroup(t){this._setContainer(t,lV.FROM_SET_CORE_GROUP)}setObject(t){this._setContainerObjects([t],lV.FROM_SET_OBJECT)}setObjects(t){this._setContainerObjects(t,lV.FROM_SET_OBJECTS)}setGeometry(t,e=Ns.MESH){const n=this.createObject(t,e);this._setContainerObjects([n],lV.FROM_SET_GEOMETRY)}setGeometries(t,e=Ns.MESH){const n=[];let i;for(let s of t)i=this.createObject(s,e),n.push(i);this._setContainerObjects(n,lV.FROM_SET_GEOMETRIES)}_setContainerObjects(t,e){const n=this.containerController.container().coreContent()||new oV;n.setObjects(t),n.touch(),this._setContainer(n)}static createObject(t,e,n){return aV.createObject(t,e,n)}createObject(t,e,n){return uV.createObject(t,e,n)}static createIndexIfNone(t){aV.createIndexIfNone(t)}_createIndexIfNone(t){uV.createIndexIfNone(t)}}const dV=new class extends ua{};class pV extends uV{constructor(){super(...arguments),this.paramsConfig=dV}static type(){return ns.OUTPUT}initializeNode(){this.io.inputs.setCount(1),this.io.outputs.setHasNoOutput(),this.io.inputs.initInputsClonedState(Qi.NEVER)}cook(t){this.setCoreGroup(t[0])}}class _V extends uV{constructor(){super(...arguments),this.childrenDisplayController=new fV(this),this.displayNodeController=new Fm(this,this.childrenDisplayController.displayNodeControllerCallbacks()),this._children_controller_context=ts.SOP}initializeBaseNode(){super.initializeBaseNode(),this.childrenDisplayController.initializeNode(),this.cookController.disallowInputsEvaluation()}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}async cook(t){const e=this.childrenDisplayController.output_node();if(e){const t=(await e.compute()).coreContent();t?this.setCoreGroup(t):e.states.error.active()?this.states.error.set(e.states.error.message()):this.setObjects([])}else this.states.error.set(\\\\\\\"no output node found inside subnet\\\\\\\")}}const mV={dependsOnDisplayNode:!0};class fV{constructor(t,e=mV){this.node=t,this.options=e,this._output_node_needs_update=!0}dispose(){var t;null===(t=this._graph_node)||void 0===t||t.dispose()}displayNodeControllerCallbacks(){return{onDisplayNodeRemove:()=>{this.node.setDirty()},onDisplayNodeSet:()=>{this.node.setDirty()},onDisplayNodeUpdate:()=>{this.node.setDirty()}}}output_node(){return this._output_node_needs_update&&this._update_output_node(),this._output_node}initializeNode(){var t;const e=null===(t=this.node.flags)||void 0===t?void 0:t.display;e&&e.onUpdate((()=>{e.active()&&this.node.setDirty()})),this.node.lifecycle.add_on_child_add_hook((()=>{this._output_node_needs_update=!0,this.node.setDirty()})),this.node.lifecycle.add_on_child_remove_hook((()=>{this._output_node_needs_update=!0,this.node.setDirty()}))}_update_output_node(){const t=this.node.nodesByType(pV.type())[0];null!=this._output_node&&null!=t&&this._output_node.graphNodeId()==t.graphNodeId()||(this._graph_node&&this._output_node&&this._graph_node.removeGraphInput(this._output_node),this._output_node=t,this._output_node&&this.options.dependsOnDisplayNode&&(this._graph_node=this._graph_node||this._create_graph_node(),this._graph_node.addGraphInput(this._output_node)))}_create_graph_node(){const t=new Mi(this.node.scene(),\\\\\\\"subnetChildrenDisplayController\\\\\\\");return t.addPostDirtyHook(\\\\\\\"subnetChildrenDisplayController\\\\\\\",(()=>{this.node.setDirty()})),t}}function gV(t,e){const n=new class extends ua{constructor(){super(...arguments),this.template=ha.OPERATOR_PATH(\\\\\\\"../template\\\\\\\"),this.debug=ha.BUTTON(null,{callback:t=>{i.PARAM_CALLBACK_debug(t)}})}};class i extends _V{constructor(){super(...arguments),this.paramsConfig=n,this.polyNodeController=new xV(this,e)}static type(){return t}static PARAM_CALLBACK_debug(t){t._debug()}_debug(){this.polyNodeController.debug(this.p.template)}}return i}const vV=gV(\\\\\\\"poly\\\\\\\",{nodeContext:ts.SOP,inputs:[0,4]});class yV extends vV{}class xV{constructor(t,e){this.node=t,this._definition=e}initializeNode(){this.init_inputs(),this.node.params.onParamsCreated(\\\\\\\"poly_node_init\\\\\\\",(()=>{this.create_params_from_definition()})),this.node.lifecycle.add_on_create_hook((()=>{this.create_params_from_definition(),this.createChildNodesFromDefinition()}))}init_inputs(){const t=this._definition.inputs;t&&this.node.io.inputs.setCount(t[0],t[1])}create_params_from_definition(){const t=this._definition.params;if(t){for(let e of t)e.options=e.options||{},e.options.spare=!0;this.node.params.updateParams({toAdd:t})}}createChildNodesFromDefinition(){const t=this._definition.nodes;if(!t)return;const e=this.node.scene().loadingController.loaded();e&&this.node.scene().loadingController.markAsLoading();const n=new Jl({}),i=new Vl(this.node);i.create_nodes(n,t);const s=this._definition.ui;s&&i.process_nodes_ui_data(n,s),e&&this.node.scene().loadingController.markAsLoaded()}debug(t){const e=t.found_node();if(e){const t=rV.dispatch_node(e),n=t.data({showPolyNodesData:!0}),i=t.ui_data({showPolyNodesData:!0}),s={nodeContext:e.context(),inputs:[0,0],params:[],nodes:n.nodes,ui:i.nodes};console.log(JSON.stringify(s))}}static createNodeClass(t,e,n){switch(e){case ts.SOP:return gV(t,n);case ts.OBJ:return bV(t,n)}}}function bV(t,e){const n=new class extends ua{constructor(){super(...arguments),this.display=ha.BOOLEAN(1),this.template=ha.OPERATOR_PATH(\\\\\\\"../template\\\\\\\"),this.debug=ha.BUTTON(null,{callback:t=>{i.PARAM_CALLBACK_debug(t)}})}};class i extends cU{constructor(){super(...arguments),this.paramsConfig=n,this.hierarchyController=new MU(this),this.flags=new Di(this),this.childrenDisplayController=new kG(this),this.displayNodeController=new Fm(this,this.childrenDisplayController.displayNodeControllerCallbacks()),this._children_controller_context=ts.SOP,this.polyNodeController=new xV(this,e)}static type(){return t}createObject(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.childrenDisplayController.initializeNode()}isDisplayNodeCooking(){if(this.flags.display.active()){const t=this.displayNodeController.displayNode();return!!t&&t.isDirty()}return!1}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}cook(){this.object.visible=this.pv.display,this.cookController.endCook()}static PARAM_CALLBACK_debug(t){t._debug()}_debug(){this.polyNodeController.debug(this.p.template)}}return i}const wV=bV(\\\\\\\"poly\\\\\\\",{nodeContext:ts.OBJ});class TV extends wV{}class AV extends Q.a{constructor(t){super(),this.type=\\\\\\\"Audio\\\\\\\",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=\\\\\\\"empty\\\\\\\",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"audioNode\\\\\\\",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"mediaNode\\\\\\\",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"mediaStreamNode\\\\\\\",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType=\\\\\\\"buffer\\\\\\\",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn(\\\\\\\"THREE.Audio: Audio is already playing.\\\\\\\");if(!1===this.hasPlaybackControl)return void console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}getFilters(){return this.filters}setFilters(t){return t||(t=[]),!0===this._connected?(this.disconnect(),this.filters=t.slice(),this.connect()):this.filters=t.slice(),this}setDetune(t){if(this.detune=t,void 0!==this.source.detune)return!0===this.isPlaying&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(t){return this.setFilters(t?[t]:[])}setPlaybackRate(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return!1===this.hasPlaybackControl?(console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\"),!1):this.loop}setLoop(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}setLoopStart(t){return this.loopStart=t,this}setLoopEnd(t){return this.loopEnd=t,this}getVolume(){return this.gain.gain.value}setVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}const MV=new p.a,EV=new hh.a,SV=new p.a,CV=new p.a;class NV extends AV{constructor(t){super(t),this.panner=this.context.createPanner(),this.panner.panningModel=\\\\\\\"HRTF\\\\\\\",this.panner.connect(this.gain)}getOutput(){return this.panner}getRefDistance(){return this.panner.refDistance}setRefDistance(t){return this.panner.refDistance=t,this}getRolloffFactor(){return this.panner.rolloffFactor}setRolloffFactor(t){return this.panner.rolloffFactor=t,this}getDistanceModel(){return this.panner.distanceModel}setDistanceModel(t){return this.panner.distanceModel=t,this}getMaxDistance(){return this.panner.maxDistance}setMaxDistance(t){return this.panner.maxDistance=t,this}setDirectionalCone(t,e,n){return this.panner.coneInnerAngle=t,this.panner.coneOuterAngle=e,this.panner.coneOuterGain=n,this}updateMatrixWorld(t){if(super.updateMatrixWorld(t),!0===this.hasPlaybackControl&&!1===this.isPlaying)return;this.matrixWorld.decompose(MV,EV,SV),CV.set(0,0,1).applyQuaternion(EV);const e=this.panner;if(e.positionX){const t=this.context.currentTime+this.listener.timeDelta;e.positionX.linearRampToValueAtTime(MV.x,t),e.positionY.linearRampToValueAtTime(MV.y,t),e.positionZ.linearRampToValueAtTime(MV.z,t),e.orientationX.linearRampToValueAtTime(CV.x,t),e.orientationY.linearRampToValueAtTime(CV.y,t),e.orientationZ.linearRampToValueAtTime(CV.z,t)}else e.setPosition(MV.x,MV.y,MV.z),e.setOrientation(CV.x,CV.y,CV.z)}}class LV extends CU.a{constructor(t,e=1,n=16,i=2){const s=new S.a,r=new Float32Array(3*(3*(n+2*i)+3));s.setAttribute(\\\\\\\"position\\\\\\\",new C.a(r,3));const o=new As.a({color:65280});super(s,[new As.a({color:16776960}),o]),this.audio=t,this.range=e,this.divisionsInnerAngle=n,this.divisionsOuterAngle=i,this.type=\\\\\\\"PositionalAudioHelper\\\\\\\",this.update()}update(){const t=this.audio,e=this.range,n=this.divisionsInnerAngle,i=this.divisionsOuterAngle,s=On.e(t.panner.coneInnerAngle),r=On.e(t.panner.coneOuterAngle),o=s/2,a=r/2;let l,c,h=0,u=0;const d=this.geometry,p=d.attributes.position;function _(t,n,i,s){const r=(n-t)/i;for(p.setXYZ(h,0,0,0),u++,l=t;l<n;l+=r)c=h+u,p.setXYZ(c,Math.sin(l)*e,0,Math.cos(l)*e),p.setXYZ(c+1,Math.sin(Math.min(l+r,n))*e,0,Math.cos(Math.min(l+r,n))*e),p.setXYZ(c+2,0,0,0),u+=3;d.addGroup(h,u,s),h+=u,u=0}d.clearGroups(),_(-a,-o,i,0),_(-o,o,n,1),_(o,a,i,0),p.needsUpdate=!0,s===r&&(this.material[0].visible=!1)}dispose(){this.geometry.dispose(),this.material[0].dispose(),this.material[1].dispose()}}class OV extends Vf.a{constructor(t){super(t)}load(t,e,n,i){const s=this,r=new Gf.a(this.manager);r.setResponseType(\\\\\\\"arraybuffer\\\\\\\"),r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(t,(function(n){try{const t=n.slice(0);_G().decodeAudioData(t,(function(t){e(t)}))}catch(e){i?i(e):console.error(e),s.manager.itemError(t)}}),n,i)}}var PV;!function(t){t.MP3=\\\\\\\"mp3\\\\\\\",t.WAV=\\\\\\\"wav\\\\\\\"}(PV||(PV={}));PV.MP3,PV.WAV;class RV extends $g{async load(){const t=new OV(this.loadingManager),e=await this._urlToLoad();return new Promise((n=>{t.load(e,(function(t){n(t)}))}))}}var IV;!function(t){t.LINEAR=\\\\\\\"linear\\\\\\\",t.INVERSE=\\\\\\\"inverse\\\\\\\",t.EXPONENTIAL=\\\\\\\"exponential\\\\\\\"}(IV||(IV={}));const FV=[IV.LINEAR,IV.INVERSE,IV.EXPONENTIAL];class DV extends(wU(ua)){constructor(){super(...arguments),this.audio=ha.FOLDER(),this.listener=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.OBJ,types:[Ig.AUDIO_LISTENER]}}),this.url=ha.STRING(\\\\\\\"\\\\\\\",{fileBrowse:{type:[Rr.AUDIO]}}),this.volume=ha.FLOAT(1),this.loop=ha.BOOLEAN(1,{separatorBefore:!0}),this.loopStart=ha.FLOAT(0,{visibleIf:{loop:1}}),this.loopEnd=ha.FLOAT(0,{visibleIf:{loop:1},separatorAfter:!0}),this.refDistance=ha.FLOAT(10,{range:[0,10],rangeLocked:[!0,!1]}),this.rolloffFactor=ha.FLOAT(10,{range:[0,10],rangeLocked:[!0,!1]}),this.maxDistance=ha.FLOAT(100,{range:[.001,100],rangeLocked:[!0,!1]}),this.distanceModel=ha.INTEGER(FV.indexOf(IV.LINEAR),{menu:{entries:FV.map(((t,e)=>({name:t,value:e})))}}),this.coneInnerAngle=ha.FLOAT(180,{range:[0,360],rangeLocked:[!0,!0]}),this.coneOuterAngle=ha.FLOAT(230,{range:[0,360],rangeLocked:[!0,!0]}),this.coneOuterGain=ha.FLOAT(.1,{range:[0,1],rangeLocked:[!0,!0]}),this.autoplay=ha.BOOLEAN(1),this.showHelper=ha.BOOLEAN(0),this.helperSize=ha.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1],visibleIf:{showHelper:!0}}),this.play=ha.BUTTON(null,{callback:t=>{zV.PARAM_CALLBACK_play(t)}}),this.pause=ha.BUTTON(null,{callback:t=>{zV.PARAM_CALLBACK_pause(t)}})}}const BV=new DV;class zV extends cU{constructor(){super(...arguments),this.paramsConfig=BV,this.hierarchyController=new MU(this),this.transformController=new AU(this),this.flags=new Di(this)}static type(){return Ig.POSITIONAL_AUDIO}createObject(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this._updateHelperHierarchy(),this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()})),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}_updateHelperHierarchy(){this._helper&&(this.flags.display.active()?this.object.add(this._helper):this.object.remove(this._helper))}cook(){this.transformController.update(),this._updatePositionalAudio(),this.cookController.endCook()}async _updatePositionalAudio(){this.p.listener.isDirty()&&await this.p.listener.compute();const t=this.pv.url;if(this._loadedUrl!=t)try{await this._createPositionalAudio()}catch(t){this.states.error.set(`error when creating audio: ${t}`)}this._positionalAudio&&(this._positionalAudio.setVolume(this.pv.volume),this._positionalAudio.setLoop(this.pv.loop),this._positionalAudio.setLoopStart(this.pv.loopStart),this._positionalAudio.setLoopEnd(this.pv.loopEnd),this._positionalAudio.setRefDistance(this.pv.refDistance),this._positionalAudio.setRolloffFactor(this.pv.rolloffFactor),this._positionalAudio.setMaxDistance(this.pv.maxDistance),this._positionalAudio.setDistanceModel(FV[this.pv.distanceModel]),this._positionalAudio.setDirectionalCone(this.pv.coneInnerAngle,this.pv.coneOuterAngle,this.pv.coneOuterGain),this.pv.showHelper&&(this._helper=this._helper||this._createHelper(this._positionalAudio),this.object.add(this._helper)),this._helper&&(this._helper.visible=this.pv.showHelper,this._helper.range=this.pv.helperSize,this._helper.update()))}_createHelper(t){const e=new LV(t);return e.matrixAutoUpdate=!1,e}async _createPositionalAudio(){const t=this.pv.listener.nodeWithContext(ts.OBJ);if(!t)return;const e=t.object;this._positionalAudio&&(this._positionalAudio.source&&(this._positionalAudio.stop(),this._positionalAudio.disconnect()),this.object.remove(this._positionalAudio),this._positionalAudio=void 0),this._helper&&(this._helper.dispose(),this._helper=void 0),this._positionalAudio=new NV(e),this._positionalAudio.matrixAutoUpdate=!1;const n=new RV(this.pv.url,this.scene(),this),i=await n.load();this._loadedUrl=this.pv.url,this._positionalAudio.autoplay=this.pv.autoplay,this._positionalAudio.setBuffer(i),this.object.add(this._positionalAudio)}isPlaying(){return!!this._positionalAudio&&this._positionalAudio.isPlaying}static PARAM_CALLBACK_play(t){t.PARAM_CALLBACK_play()}static PARAM_CALLBACK_pause(t){t.PARAM_CALLBACK_pause()}PARAM_CALLBACK_play(){this._positionalAudio&&(this.isPlaying()||this._positionalAudio.play())}PARAM_CALLBACK_pause(){this._positionalAudio&&this.isPlaying()&&this._positionalAudio.pause()}}var kV;!function(t){t.ON_RENDER=\\\\\\\"On Every Render\\\\\\\",t.MANUAL=\\\\\\\"Manual\\\\\\\"}(kV||(kV={}));const UV=[kV.ON_RENDER,kV.MANUAL];const GV=new class extends ua{constructor(){super(...arguments),this.object=ha.OPERATOR_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.OBJ},dependentOnFoundNode:!1,computeOnDirty:!0,callback:t=>{VV.PARAM_CALLBACK_update_resolved_object(t)}}),this.pointIndex=ha.INTEGER(0,{range:[0,100]}),this.updateMode=ha.INTEGER(UV.indexOf(kV.ON_RENDER),{callback:t=>{VV.PARAM_CALLBACK_update_updateMode(t)},menu:{entries:UV.map(((t,e)=>({name:t,value:e})))}}),this.update=ha.BUTTON(null,{callback:t=>{VV.PARAM_CALLBACK_update(t)},visibleIf:{updateMode:UV.indexOf(kV.MANUAL)}})}};class VV extends cU{constructor(){super(...arguments),this.paramsConfig=GV,this.hierarchyController=new MU(this),this.flags=new Di(this),this._helper=new TG(1),this._found_point_post=new p.a,this._on_object_before_render_bound=this._update.bind(this)}static type(){return\\\\\\\"rivet\\\\\\\"}createObject(){const t=new B.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.addPostDirtyHook(\\\\\\\"rivet_on_dirty\\\\\\\",(()=>{this.cookController.cookMainWithoutInputs()})),this._updateHelperHierarchy(),this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this.flags.display.active()?this.object.add(this._helper):this.object.remove(this._helper)}async cook(){await this._update_resolved_object(),this._update_render_hook(),this.cookController.endCook()}_update_render_hook(){const t=UV[this.pv.updateMode];switch(t){case kV.ON_RENDER:return this._add_render_hook();case kV.MANUAL:return this._remove_render_hook()}os.unreachable(t)}_add_render_hook(){this.object.onBeforeRender=this._on_object_before_render_bound,this.object.frustumCulled=!1}_remove_render_hook(){this.object.onBeforeRender=()=>{}}_update(t,e,n,i,s,r){const o=this._resolved_object();if(o){const t=o.geometry;if(t){const e=t.attributes.position;if(e){const t=e.array;this._found_point_post.fromArray(t,3*this.pv.pointIndex),o.updateWorldMatrix(!0,!1),o.localToWorld(this._found_point_post),this.object.matrix.makeTranslation(this._found_point_post.x,this._found_point_post.y,this._found_point_post.z)}}}}static PARAM_CALLBACK_update_resolved_object(t){t._update_resolved_object()}async _update_resolved_object(){this.p.object.isDirty()&&await this.p.object.compute();const t=this.p.object.found_node();if(t)if(t.context()==ts.OBJ&&t.type()==VG.type()){const e=t;this._resolved_sop_group=e.childrenDisplayController.sopGroup()}else this.states.error.set(\\\\\\\"found node is not a geo node\\\\\\\")}_resolved_object(){if(!this._resolved_sop_group)return;const t=this._resolved_sop_group.children[0];return t||void 0}static PARAM_CALLBACK_update_updateMode(t){t._update_render_hook()}static PARAM_CALLBACK_update(t){t._update()}}class HV extends(Pa(Na(wa(ya(_a(ua)))))){}const jV=new HV;class WV extends cU{constructor(){super(...arguments),this.paramsConfig=jV,this.hierarchyController=new MU(this),this.SceneAutoUpdateController=new ma(this),this.sceneBackgroundController=new xa(this),this.SceneEnvController=new Ta(this),this.sceneFogController=new La(this),this.sceneMaterialOverrideController=new Ra(this)}static type(){return\\\\\\\"scene\\\\\\\"}createObject(){const t=new vs;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode()}cook(){this.SceneAutoUpdateController.update(),this.sceneBackgroundController.update(),this.SceneEnvController.update(),this.sceneFogController.update(),this.sceneMaterialOverrideController.update(),this.cookController.endCook()}}class qV{constructor(t,e,n){this._camera_node_id=t,this._controls_node=e,this._controls=n,this._updateRequired=this._controls_node.updateRequired()}updateRequired(){return this._updateRequired}get camera_node_id(){return this._camera_node_id}get controls(){return this._controls}get controls_node(){return this._controls_node}is_equal(t){return t.camera_node_id==this._camera_node_id&&t.controls_node.graphNodeId()==this._controls_node.graphNodeId()}}const XV=\\\\\\\"controls\\\\\\\";class YV{constructor(t){this.node=t,this._applied_controls_by_element_id=new Map,this._controls_node=null}controls_param(){return this.node.params.has(XV)?this.node.params.get(XV):null}async controls_node(){const t=this.node.p.controls,e=t.rawInput();if(e&&\\\\\\\"\\\\\\\"!=e){t.isDirty()&&await t.compute();const e=t.value.node();if(e){if(ms.includes(e.type()))return e;this.node.states.error.set(\\\\\\\"found node is not of a camera control type\\\\\\\")}else this.node.states.error.set(\\\\\\\"no node has been found\\\\\\\")}return null}async update_controls(){const t=await this.controls_node();t&&this._controls_node!=t&&this._dispose_control_refs(),this._controls_node=t}async apply_controls(t){const e=t.canvas();if(!e)return;const n=await this.controls_node();if(n){this._controlsEndEventName=n.endEventName();const i=n.controls_id();let s=!1,r=this._applied_controls_by_element_id.get(e.id);if(r&&r.get(i)&&(s=!0),!s){r=new Map,this._applied_controls_by_element_id.set(e.id,r),r.set(i,n);const s=await n.apply_controls(this.node.object,t);if(!s)return;const o=new qV(this.node.graphNodeId(),n,s);return this.set_controls_events(s),o}}}_dispose_control_refs(){this._applied_controls_by_element_id.forEach(((t,e)=>{this._dispose_controls_for_element_id(e)})),this._applied_controls_by_element_id.clear(),this._controlsEndEventName=void 0}_dispose_controls_for_element_id(t){const e=this._applied_controls_by_element_id.get(t);e&&e.forEach(((e,n)=>{e.disposeControlsForHtmlElementId(t)})),this._applied_controls_by_element_id.delete(t)}async dispose_controls(t){this._dispose_controls_for_element_id(t.id)}set_controls_events(t){const e=UH[this.node.pv.updateFromControlsMode];switch(e){case kH.ON_END:return this._set_controls_events_to_update_on_end(t);case kH.ALWAYS:return this._set_controls_events_to_update_always(t);case kH.NEVER:return this._reset(t)}os.unreachable(e)}_reset(t){this.controls_change_listener&&(t.removeEventListener(\\\\\\\"change\\\\\\\",this.controls_change_listener),this.controls_change_listener=void 0),this.controls_end_listener&&this._controlsEndEventName&&(t.removeEventListener(this._controlsEndEventName,this.controls_end_listener),this.controls_end_listener=void 0)}_set_controls_events_to_update_on_end(t){this._reset(t),this._controlsEndEventName&&(this.controls_end_listener=()=>{this.node.update_transform_params_from_object()},t.addEventListener(this._controlsEndEventName,this.controls_end_listener))}_set_controls_events_to_update_always(t){this._reset(t),this.controls_change_listener=()=>{this.node.update_transform_params_from_object()},t.addEventListener(\\\\\\\"change\\\\\\\",this.controls_change_listener)}}function $V(t){return class extends t{constructor(){super(...arguments),this.layer=ha.INTEGER(0,{range:[0,31],rangeLocked:[!0,!0]})}}}class JV{constructor(t){this.node=t}update(){const t=this.node.object;t.layers.set(0),t.layers.enable(this.node.params.integer(\\\\\\\"layer\\\\\\\"))}}const ZV={callback:t=>{$H.PARAM_CALLBACK_reset_effects_composer(t)}};function KV(t){return class extends t{constructor(){super(...arguments),this.doPostProcess=ha.BOOLEAN(0),this.postProcessNode=ha.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{doPostProcess:1},nodeSelection:{types:[es.POST]},...ZV})}}}class QV{constructor(t){this.node=t,this._composers_by_canvas_id={},this.node.p.postProcessNode?this._add_param_dirty_hook():this.node.params.onParamsCreated(\\\\\\\"post process add param dirty hook\\\\\\\",(()=>{this._add_param_dirty_hook()}))}_add_param_dirty_hook(){this.node.p.postProcessNode.addPostDirtyHook(\\\\\\\"on_post_node_dirty\\\\\\\",(()=>{this.reset()}))}render(t,e){const n=this.composer(t);n&&(e&&n.setSize(e.x,e.y),n.render())}reset(){const t=Object.keys(this._composers_by_canvas_id);for(let e of t)delete this._composers_by_canvas_id[e]}composer(t){return this._composers_by_canvas_id[t.id]=this._composers_by_canvas_id[t.id]||this._create_composer(t)}_create_composer(t){const e=this.node.renderController.renderer(t);if(e){const n=this.node.renderController.resolved_scene||this.node.scene().threejsScene(),i=this.node.object,s=this.node.p.postProcessNode.value.node();if(s){if(s.type()==es.POST){const r=s,o=this.node.renderController.canvas_resolution(t);return r.effectsComposerController.createEffectsComposer({renderer:e,scene:n,camera:i,resolution:o,requester:this.node,camera_node:this.node})}this.node.states.error.set(\\\\\\\"found node is not a post process node\\\\\\\")}else this.node.states.error.set(\\\\\\\"no post node found\\\\\\\")}}}class tH extends aa{constructor(){super(...arguments),this.flags=new Pi(this)}static context(){return ts.ROP}initializeBaseNode(){this.dirtyController.addPostDirtyHook(\\\\\\\"cook_immediately\\\\\\\",(()=>{this.cookController.cookMainWithoutInputs()}))}cook(){this.cookController.endCook()}}var eH,nH,iH,sH;!function(t){t.CSS2D=\\\\\\\"CSS2DRenderer\\\\\\\",t.CSS3D=\\\\\\\"CSS3DRenderer\\\\\\\",t.WEBGL=\\\\\\\"WebGLRenderer\\\\\\\"}(eH||(eH={})),function(t){t.Linear=\\\\\\\"Linear\\\\\\\",t.sRGB=\\\\\\\"sRGB\\\\\\\",t.Gamma=\\\\\\\"Gamma\\\\\\\",t.RGBE=\\\\\\\"RGBE\\\\\\\",t.LogLuv=\\\\\\\"LogLuv\\\\\\\",t.RGBM7=\\\\\\\"RGBM7\\\\\\\",t.RGBM16=\\\\\\\"RGBM16\\\\\\\",t.RGBD=\\\\\\\"RGBD\\\\\\\"}(nH||(nH={})),(sH=iH||(iH={}))[sH.Linear=w.U]=\\\\\\\"Linear\\\\\\\",sH[sH.sRGB=w.ld]=\\\\\\\"sRGB\\\\\\\",sH[sH.Gamma=w.J]=\\\\\\\"Gamma\\\\\\\",sH[sH.RGBE=w.gc]=\\\\\\\"RGBE\\\\\\\",sH[sH.LogLuv=w.bb]=\\\\\\\"LogLuv\\\\\\\",sH[sH.RGBM7=w.lc]=\\\\\\\"RGBM7\\\\\\\",sH[sH.RGBM16=w.kc]=\\\\\\\"RGBM16\\\\\\\",sH[sH.RGBD=w.fc]=\\\\\\\"RGBD\\\\\\\";const rH=[nH.Linear,nH.sRGB,nH.Gamma,nH.RGBE,nH.LogLuv,nH.RGBM7,nH.RGBM16,nH.RGBD],oH=[iH.Linear,iH.sRGB,iH.Gamma,iH.RGBE,iH.LogLuv,iH.RGBM7,iH.RGBM16,iH.RGBD],aH=iH.sRGB;var lH,cH,hH;!function(t){t.No=\\\\\\\"No\\\\\\\",t.Linear=\\\\\\\"Linear\\\\\\\",t.Reinhard=\\\\\\\"Reinhard\\\\\\\",t.Cineon=\\\\\\\"Cineon\\\\\\\",t.ACESFilmic=\\\\\\\"ACESFilmic\\\\\\\"}(lH||(lH={})),(hH=cH||(cH={}))[hH.No=w.vb]=\\\\\\\"No\\\\\\\",hH[hH.Linear=w.ab]=\\\\\\\"Linear\\\\\\\",hH[hH.Reinhard=w.vc]=\\\\\\\"Reinhard\\\\\\\",hH[hH.Cineon=w.m]=\\\\\\\"Cineon\\\\\\\",hH[hH.ACESFilmic=w.a]=\\\\\\\"ACESFilmic\\\\\\\";const uH=[lH.No,lH.Linear,lH.Reinhard,lH.Cineon,lH.ACESFilmic],dH=[cH.No,cH.Linear,cH.Reinhard,cH.Cineon,cH.ACESFilmic],pH=cH.ACESFilmic,_H=uH.map(((t,e)=>({name:t,value:dH[e]})));var mH;!function(t){t.HIGH=\\\\\\\"highp\\\\\\\",t.MEDIUM=\\\\\\\"mediump\\\\\\\",t.LOW=\\\\\\\"lowp\\\\\\\"}(mH||(mH={}));const fH=[mH.HIGH,mH.MEDIUM,mH.LOW];var gH;!function(t){t.HIGH=\\\\\\\"high-performance\\\\\\\",t.LOW=\\\\\\\"low-power\\\\\\\",t.DEFAULT=\\\\\\\"default\\\\\\\"}(gH||(gH={}));const vH=[gH.HIGH,gH.LOW,gH.DEFAULT];var yH,xH,bH;!function(t){t.Basic=\\\\\\\"Basic\\\\\\\",t.PCF=\\\\\\\"PCF\\\\\\\",t.PCFSoft=\\\\\\\"PCFSoft\\\\\\\",t.VSM=\\\\\\\"VSM\\\\\\\"}(yH||(yH={})),(bH=xH||(xH={}))[bH.Basic=w.k]=\\\\\\\"Basic\\\\\\\",bH[bH.PCF=w.Fb]=\\\\\\\"PCF\\\\\\\",bH[bH.PCFSoft=w.Gb]=\\\\\\\"PCFSoft\\\\\\\",bH[bH.VSM=w.gd]=\\\\\\\"VSM\\\\\\\";const wH=[yH.Basic,yH.PCF,yH.PCFSoft,yH.VSM],TH=[xH.Basic,xH.PCF,xH.PCFSoft,xH.VSM],AH=(w.k,w.Fb,w.Gb,w.gd,xH.PCFSoft),MH={alpha:!1,precision:mH.HIGH,premultipliedAlpha:!0,antialias:!1,stencil:!0,preserveDrawingBuffer:!1,powerPreference:gH.DEFAULT,depth:!0,logarithmicDepthBuffer:!1};const EH=new class extends ua{constructor(){super(...arguments),this.tprecision=ha.BOOLEAN(0),this.precision=ha.INTEGER(fH.indexOf(mH.HIGH),{visibleIf:{tprecision:1},menu:{entries:fH.map(((t,e)=>({value:e,name:t})))}}),this.tpowerPreference=ha.BOOLEAN(0),this.powerPreference=ha.INTEGER(vH.indexOf(gH.DEFAULT),{visibleIf:{tpowerPreference:1},menu:{entries:vH.map(((t,e)=>({value:e,name:t})))}}),this.alpha=ha.BOOLEAN(1),this.premultipliedAlpha=ha.BOOLEAN(1),this.antialias=ha.BOOLEAN(1),this.stencil=ha.BOOLEAN(1),this.depth=ha.BOOLEAN(1),this.logarithmicDepthBuffer=ha.BOOLEAN(0),this.toneMapping=ha.INTEGER(pH,{menu:{entries:_H}}),this.toneMappingExposure=ha.FLOAT(1,{range:[0,2]}),this.outputEncoding=ha.INTEGER(aH,{menu:{entries:rH.map(((t,e)=>({name:t,value:oH[e]})))}}),this.physicallyCorrectLights=ha.BOOLEAN(1),this.sortObjects=ha.BOOLEAN(1),this.tpixelRatio=ha.BOOLEAN(0),this.pixelRatio=ha.INTEGER(2,{visibleIf:{tpixelRatio:!0},range:[1,4],rangeLocked:[!0,!1]}),this.tshadowMap=ha.BOOLEAN(1),this.shadowMapAutoUpdate=ha.BOOLEAN(1,{visibleIf:{tshadowMap:1}}),this.shadowMapNeedsUpdate=ha.BOOLEAN(0,{visibleIf:{tshadowMap:1}}),this.shadowMapType=ha.INTEGER(AH,{visibleIf:{tshadowMap:1},menu:{entries:wH.map(((t,e)=>({name:t,value:TH[e]})))}})}};class SH extends tH{constructor(){super(...arguments),this.paramsConfig=EH,this._renderers_by_canvas_id={}}static type(){return eH.WEBGL}createRenderer(t,e){const n={},i=Object.keys(MH);let s;for(s of i)n[s]=MH[s];if(this.pv.tprecision){const t=fH[this.pv.precision];n.precision=t}if(this.pv.tpowerPreference){const t=vH[this.pv.powerPreference];n.powerPreference=t}n.antialias=this.pv.antialias,n.antialias=this.pv.antialias,n.alpha=this.pv.alpha,n.premultipliedAlpha=this.pv.premultipliedAlpha,n.depth=this.pv.depth,n.stencil=this.pv.stencil,n.logarithmicDepthBuffer=this.pv.logarithmicDepthBuffer,n.canvas=t,n.context=e;const r=li.renderersController.createWebGLRenderer(n);return li.renderersController.printDebug()&&(li.renderersController.printDebugMessage(`create renderer from node '${this.path()}'`),li.renderersController.printDebugMessage({params:n})),this._update_renderer(r),this._renderers_by_canvas_id[t.id]=r,r}cook(){const t=Object.keys(this._renderers_by_canvas_id);for(let e of t){const t=this._renderers_by_canvas_id[e];this._update_renderer(t)}this._traverse_scene_and_update_materials(),this.cookController.endCook()}_update_renderer(t){t.physicallyCorrectLights=this.pv.physicallyCorrectLights,t.outputEncoding=this.pv.outputEncoding,t.toneMapping=this.pv.toneMapping,t.toneMappingExposure=this.pv.toneMappingExposure,t.shadowMap.enabled=this.pv.tshadowMap,t.shadowMap.autoUpdate=this.pv.shadowMapAutoUpdate,t.shadowMap.needsUpdate=this.pv.shadowMapNeedsUpdate,t.shadowMap.type=this.pv.shadowMapType,t.sortObjects=this.pv.sortObjects;const e=this.pv.tpixelRatio?this.pv.pixelRatio:NH.defaultPixelRatio();li.renderersController.printDebug()&&(li.renderersController.printDebugMessage(`set renderer pixelRatio from '${this.path()}'`),li.renderersController.printDebugMessage({pixelRatio:e})),t.setPixelRatio(e)}_traverse_scene_and_update_materials(){this.scene().threejsScene().traverse((t=>{const e=t.material;if(e)if(m.isArray(e))for(let t of e)t.needsUpdate=!0;else e.needsUpdate=!0}))}}function CH(t){return class extends t{constructor(){super(...arguments),this.render=ha.FOLDER(),this.setScene=ha.BOOLEAN(0),this.scene=ha.OPERATOR_PATH(\\\\\\\"\\\\\\\",{visibleIf:{setScene:1},nodeSelection:{context:ts.OBJ,types:[WV.type()]}}),this.setRenderer=ha.BOOLEAN(0),this.renderer=ha.OPERATOR_PATH(\\\\\\\"\\\\\\\",{visibleIf:{setRenderer:1},nodeSelection:{context:ts.ROP,types:[SH.type()]}}),this.setCSSRenderer=ha.BOOLEAN(0),this.CSSRenderer=ha.OPERATOR_PATH(\\\\\\\"\\\\\\\",{visibleIf:{setCSSRenderer:1},nodeSelection:{context:ts.ROP,types:[eH.CSS2D,eH.CSS3D]}})}}}class NH{constructor(t){this.node=t,this._renderers_by_canvas_id={},this._resolution_by_canvas_id={},this._super_sampling_size=new d.a}render(t,e,n,i){if(this.node.pv.doPostProcess?this.node.postProcessController.render(t,e):this.renderWithRenderer(t,i),this._resolved_cssRenderer_rop&&this._resolved_scene&&this.node.pv.setCSSRenderer){const e=this.cssRenderer(t);e&&e.render(this._resolved_scene,this.node.object)}}renderWithRenderer(t,e){const n=this.renderer(t);if(n){const t=this._resolved_scene;t&&n.render(t,this.node.object)}}async update(){this.update_scene(),this.update_renderer(),this.update_cssRenderer()}get resolved_scene(){return this._resolved_scene}update_scene(){if(this.node.pv.setScene){const t=this.node.p.scene;t.isDirty()&&t.find_target();const e=t.found_node_with_context_and_type(ts.OBJ,WV.type());e&&(e.isDirty()&&e.cookController.cookMainWithoutInputs(),this._resolved_scene=e.object)}else this._resolved_scene=this.node.scene().threejsScene()}update_renderer(){if(this.node.pv.setRenderer){const t=this.node.p.renderer;t.isDirty()&&t.find_target(),this._resolved_renderer_rop=t.found_node_with_context_and_type(ts.ROP,eH.WEBGL)}else this._resolved_renderer_rop=void 0}update_cssRenderer(){if(this.node.pv.setCSSRenderer){const t=this.node.p.CSSRenderer;t.isDirty()&&t.find_target(),this._resolved_cssRenderer_rop=t.found_node_with_context_and_type(ts.ROP,[eH.CSS2D,eH.CSS3D])}else this._resolved_cssRenderer_rop,this._resolved_cssRenderer_rop=void 0}renderer(t){return this._renderers_by_canvas_id[t.id]}cssRenderer(t){if(this._resolved_cssRenderer_rop&&this.node.pv.setCSSRenderer)return this._resolved_cssRenderer_rop.renderer(t)}createRenderer(t,e){const n=li.renderersController.createRenderingContext(t);if(!n)return void console.error(\\\\\\\"failed to create webgl context\\\\\\\");let i;return this.node.pv.setRenderer&&(this.update_renderer(),this._resolved_renderer_rop&&(i=this._resolved_renderer_rop.createRenderer(t,n))),i||(i=NH._createDefaultRenderer(t,n)),li.renderersController.registerRenderer(i),this._renderers_by_canvas_id[t.id]=i,this._super_sampling_size.copy(e),this.set_renderer_size(t,this._super_sampling_size),i}static defaultPixelRatio(){return ng.isMobile()?1:Math.max(2,window.devicePixelRatio)}static _createDefaultRenderer(t,e){const n={canvas:t,antialias:!1,alpha:!1,context:e},i=li.renderersController.createWebGLRenderer(n),s=this.defaultPixelRatio();return i.setPixelRatio(s),i.shadowMap.enabled=!0,i.shadowMap.type=AH,i.physicallyCorrectLights=!0,i.toneMapping=pH,i.toneMappingExposure=1,i.outputEncoding=aH,li.renderersController.printDebug()&&(li.renderersController.printDebugMessage(\\\\\\\"create default renderer\\\\\\\"),li.renderersController.printDebugMessage({params:n,pixelRatio:s})),i}deleteRenderer(t){const e=this.renderer(t);e&&li.renderersController.deregisterRenderer(e)}canvas_resolution(t){return this._resolution_by_canvas_id[t.id]}set_renderer_size(t,e){this._resolution_by_canvas_id[t.id]=this._resolution_by_canvas_id[t.id]||new d.a,this._resolution_by_canvas_id[t.id].copy(e);const n=this.renderer(t);if(n){const t=!1;n.setSize(e.x,e.y,t)}if(this._resolved_cssRenderer_rop){const n=this.cssRenderer(t);n&&n.setSize(e.x,e.y)}}}class LH{constructor(t){this.viewer=t,this._active=!1,this._controls=null,this._bound_on_controls_start=this._on_controls_start.bind(this),this._bound_on_controls_end=this._on_controls_end.bind(this),this._update_graph_node()}controls(){return this._controls}async create_controls(){var t;this.dispose_controls();this.viewer.canvas()&&(this._config=await(null===(t=this.viewer.cameraControlsController)||void 0===t?void 0:t.apply_controls(this.viewer)),this._config&&(this._controls=this._config.controls,this._controls&&(this.viewer.active()?(this._controls.addEventListener(\\\\\\\"start\\\\\\\",this._bound_on_controls_start),this._controls.addEventListener(\\\\\\\"end\\\\\\\",this._bound_on_controls_end)):this.dispose_controls())))}update(t){this._config&&this._controls&&this._config.updateRequired()&&this._controls.update(t)}dispose(){var t;null===(t=this._graph_node)||void 0===t||t.graphDisconnectPredecessors(),this.dispose_controls()}dispose_controls(){var t;if(this._controls){const e=this.viewer.canvas();e&&(null===(t=this.viewer)||void 0===t||t.cameraControlsController.dispose_controls(e)),this._bound_on_controls_start&&this._controls.removeEventListener(\\\\\\\"start\\\\\\\",this._bound_on_controls_start),this._bound_on_controls_end&&this._controls.removeEventListener(\\\\\\\"end\\\\\\\",this._bound_on_controls_end),this._controls.dispose(),this._controls=null}}_on_controls_start(){this._active=!0}_on_controls_end(){this._active=!1}_update_graph_node(){const t=this.viewer.cameraNode().p.controls;this._graph_node=this._graph_node||this._create_graph_node(),this._graph_node&&(this._graph_node.graphDisconnectPredecessors(),this._graph_node.addGraphInput(t))}_create_graph_node(){const t=new Mi(this.viewer.cameraNode().scene(),\\\\\\\"viewer-controls\\\\\\\");return t.addPostDirtyHook(\\\\\\\"this.viewer.controls_controller\\\\\\\",(async()=>{await this.create_controls()})),t}}class OH{constructor(t){this._viewer=t,this._size=new d.a(100,100),this._aspect=1}cameraNode(){return this._viewer.cameraNode()}get size(){return this._size}get aspect(){return this._aspect}computeSizeAndAspect(){this._updateSize(),this.cameraNode().scene().uniformsController.updateResolutionDependentUniformOwners(this._size),this._aspect=this._getAspect()}_updateSize(){this._size.x=this._viewer.domElement().offsetWidth,this._size.y=this._viewer.domElement().offsetHeight}_getAspect(){return this._size.x/this._size.y}updateCameraAspect(){this.cameraNode().setupForAspectRatio(this._aspect)}async prepareCurrentCamera(){await this.cameraNode().compute(),await this._updateFromCameraContainer()}async _updateFromCameraContainer(){var t;this.updateCameraAspect(),await(null===(t=this._viewer.controlsController)||void 0===t?void 0:t.create_controls())}}class PH{constructor(t){this.viewer=t}init(){const t=this.viewer.canvas();t&&(t.onwebglcontextlost=this._on_webglcontextlost.bind(this),t.onwebglcontextrestored=this._on_webglcontextrestored.bind(this))}_on_webglcontextlost(){console.warn(\\\\\\\"context lost at frame\\\\\\\",this.viewer.scene().frame()),this.request_animation_frame_id?cancelAnimationFrame(this.request_animation_frame_id):console.warn(\\\\\\\"request_animation_frame_id not initialized\\\\\\\"),console.warn(\\\\\\\"not canceled\\\\\\\",this.request_animation_frame_id)}_on_webglcontextrestored(){console.log(\\\\\\\"context restored\\\\\\\")}}const RH=\\\\\\\"hovered\\\\\\\";class IH{constructor(t,e,n){this._container=t,this._scene=e,this._camera_node=n,this._active=!1,this._id=IH._next_viewer_id++,this._scene.viewersRegister.registerViewer(this)}setRenderObjectOverride(t){console.log(\\\\\\\"setRenderObjectOverride\\\\\\\",t),this._renderObjectOverride=t||void 0}active(){return this._active}activate(){this._active=!0}deactivate(){this._active=!1}get camerasController(){return this._cameras_controller=this._cameras_controller||new OH(this)}get controlsController(){return this._controls_controller}get eventsController(){return this._events_controller=this._events_controller||new Wa(this)}get webglController(){return this._webgl_controller=this._webgl_controller||new PH(this)}domElement(){return this._container}scene(){return this._scene}canvas(){return this._canvas}cameraNode(){return this._camera_node}get cameraControlsController(){}id(){return this._id}dispose(){let t;for(this._scene.viewersRegister.unregisterViewer(this),this.eventsController.dispose();t=this._container.children[0];)this._container.removeChild(t)}resetContainerClass(){this.domElement().classList.remove(RH)}setContainerClassHovered(){this.domElement().classList.add(RH)}registerOnBeforeTick(t,e){this._registerCallback(t,e,this.registeredBeforeTickCallbacks())}unRegisterOnBeforeTick(t){this._unregisterCallback(t,this._onBeforeTickCallbacks)}registeredBeforeTickCallbacks(){return this._onBeforeTickCallbacks=this._onBeforeTickCallbacks||new Map}registerOnAfterTick(t,e){this._registerCallback(t,e,this.registeredAfterTickCallbacks())}unRegisterOnAfterTick(t){this._unregisterCallback(t,this._onAfterTickCallbacks)}registeredAfterTickCallbacks(){return this._onAfterTickCallbacks=this._onAfterTickCallbacks||new Map}registerOnBeforeRender(t,e){this._registerCallback(t,e,this.registeredBeforeRenderCallbacks())}unRegisterOnBeforeRender(t){this._unregisterCallback(t,this._onBeforeRenderCallbacks)}registeredBeforeRenderCallbacks(){return this._onBeforeRenderCallbacks=this._onBeforeRenderCallbacks||new Map}registerOnAfterRender(t,e){this._registerCallback(t,e,this.registeredAfterRenderCallbacks())}unRegisterOnAfterRender(t){this._unregisterCallback(t,this._onAfterRenderCallbacks)}registeredAfterRenderCallbacks(){return this._onAfterRenderCallbacks=this._onAfterRenderCallbacks||new Map}_registerCallback(t,e,n){n.has(t)?console.warn(`callback ${t} already registered`):n.set(t,e)}_unregisterCallback(t,e){e&&e.delete(t)}}IH._next_viewer_id=0;class FH extends IH{constructor(t,e,n,i){super(t,e,n),this._scene=e,this._camera_node=n,this._properties=i,this._do_render=!0,this._clock=new Dm,this._delta=0,this._animate_method=this.animate.bind(this),this._onResizeBound=this.onResize.bind(this),this._do_render=null==this._properties||this._properties.autoRender,this._canvas=document.createElement(\\\\\\\"canvas\\\\\\\"),this._canvas.id=`canvas_id_${Math.random()}`.replace(\\\\\\\".\\\\\\\",\\\\\\\"_\\\\\\\"),this._canvas.style.display=\\\\\\\"block\\\\\\\",this._canvas.style.outline=\\\\\\\"none\\\\\\\",this._container.appendChild(this._canvas),this._container.classList.add(\\\\\\\"CoreThreejsViewer\\\\\\\"),this._build(),this._setEvents()}get controlsController(){return this._controls_controller=this._controls_controller||new LH(this)}_build(){this._init_display(),this.activate()}dispose(){this._cancel_animate(),this.controlsController.dispose(),this._disposeEvents(),super.dispose()}get cameraControlsController(){return this._camera_node.controls_controller}_setEvents(){this.eventsController.init(),this.webglController.init(),window.addEventListener(\\\\\\\"resize\\\\\\\",this._onResizeBound.bind(this),!1)}_disposeEvents(){window.removeEventListener(\\\\\\\"resize\\\\\\\",this._onResizeBound.bind(this),!1)}onResize(){const t=this.canvas();t&&(this.camerasController.computeSizeAndAspect(),this._camera_node.renderController.set_renderer_size(t,this.camerasController.size),this.camerasController.updateCameraAspect())}_init_display(){if(!this._canvas)return void console.warn(\\\\\\\"no canvas found for viewer\\\\\\\");this.camerasController.computeSizeAndAspect();const t=this.camerasController.size;this._camera_node.renderController.createRenderer(this._canvas,t),this.camerasController.prepareCurrentCamera(),this.animate()}setAutoRender(t=!0){this._do_render=t,this._do_render&&this.animate()}animate(){var t,e,n;this._do_render&&(this._delta=this._clock.getDelta(),this._request_animation_frame_id=requestAnimationFrame(this._animate_method),null===(t=this._onBeforeTickCallbacks)||void 0===t||t.forEach((t=>t(this._delta))),this._scene.timeController.incrementTimeIfPlaying(this._delta),null===(e=this._onAfterTickCallbacks)||void 0===e||e.forEach((t=>t(this._delta))),this.render(this._delta),null===(n=this._controls_controller)||void 0===n||n.update(this._delta))}_cancel_animate(){this._do_render=!1,this._request_animation_frame_id&&cancelAnimationFrame(this._request_animation_frame_id),this._canvas&&this._camera_node.renderController.deleteRenderer(this._canvas)}render(t){var e,n;if(this.camerasController.cameraNode()&&this._canvas){null===(e=this._onBeforeRenderCallbacks)||void 0===e||e.forEach((e=>e(t)));const i=this.camerasController.size,s=this.camerasController.aspect;this._camera_node.renderController.render(this._canvas,i,s,this._renderObjectOverride),null===(n=this._onAfterRenderCallbacks)||void 0===n||n.forEach((e=>e(t)))}else console.warn(\\\\\\\"no camera to render with\\\\\\\")}renderer(){if(this._canvas)return this._camera_node.renderController.renderer(this._canvas)}}const DH={type:\\\\\\\"change\\\\\\\"},BH=1,zH=100;var kH;!function(t){t.ON_END=\\\\\\\"on move end\\\\\\\",t.ALWAYS=\\\\\\\"always\\\\\\\",t.NEVER=\\\\\\\"never\\\\\\\"}(kH||(kH={}));const UH=[kH.ON_END,kH.ALWAYS,kH.NEVER];function GH(t){return class extends t{constructor(){super(...arguments),this.setMainCamera=ha.BUTTON(null,{callback:(t,e)=>{YH.PARAM_CALLBACK_setMasterCamera(t)}})}}}function VH(t){return class extends t{constructor(){super(...arguments),this.camera=ha.FOLDER(),this.controls=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.EVENT}}),this.updateFromControlsMode=ha.INTEGER(UH.indexOf(kH.ON_END),{menu:{entries:UH.map(((t,e)=>({name:t,value:e})))}}),this.near=ha.FLOAT(BH,{range:[0,100],cook:!1,computeOnDirty:!0,callback:(t,e)=>{$H.PARAM_CALLBACK_update_near_far_from_param(t,e)}}),this.far=ha.FLOAT(zH,{range:[0,100],cook:!1,computeOnDirty:!0,callback:(t,e)=>{$H.PARAM_CALLBACK_update_near_far_from_param(t,e)}}),this.display=ha.BOOLEAN(1),this.showHelper=ha.BOOLEAN(0)}}}var HH;!function(t){t.DEFAULT=\\\\\\\"default\\\\\\\",t.COVER=\\\\\\\"cover\\\\\\\",t.CONTAIN=\\\\\\\"contain\\\\\\\"}(HH||(HH={}));const jH=[HH.DEFAULT,HH.COVER,HH.CONTAIN];function WH(t){return class extends t{constructor(){super(...arguments),this.fovAdjustMode=ha.INTEGER(jH.indexOf(HH.DEFAULT),{menu:{entries:jH.map(((t,e)=>({name:t,value:e})))}}),this.expectedAspectRatio=ha.FLOAT(\\\\\\\"16/9\\\\\\\",{visibleIf:[{fovAdjustMode:jH.indexOf(HH.COVER)},{fovAdjustMode:jH.indexOf(HH.CONTAIN)}],range:[0,2],rangeLocked:[!0,!1]})}}}GH(ua);KV(CH(wU($V(VH(GH(ua))))));class qH extends cU{constructor(){super(...arguments),this.renderOrder=lU.CAMERA,this._aspect=-1}get object(){return this._object}async cook(){this.updateCamera(),this._object.dispatchEvent(DH),this.cookController.endCook()}on_create(){}on_delete(){}prepareRaycaster(t,e){}camera(){return this._object}updateCamera(){}static PARAM_CALLBACK_setMasterCamera(t){t.set_as_master_camera()}set_as_master_camera(){this.scene().camerasController.setMainCameraNodePath(this.path())}setupForAspectRatio(t){}_updateForAspectRatio(){}update_transform_params_from_object(){bU.setParamsFromObject(this._object,this)}static PARAM_CALLBACK_update_from_param(t,e){t.object[e.name()]=t.pv[e.name()]}}class XH extends qH{constructor(){super(...arguments),this.flags=new Di(this),this.hierarchyController=new MU(this),this.transformController=new AU(this),this.childrenDisplayController=new kG(this),this.displayNodeController=new Fm(this,this.childrenDisplayController.displayNodeControllerCallbacks()),this._children_controller_context=ts.SOP}get controls_controller(){return this._controls_controller=this._controls_controller||new YV(this)}get layers_controller(){return this._layers_controller=this._layers_controller||new JV(this)}get renderController(){return this._render_controller=this._render_controller||new NH(this)}get postProcessController(){return this._post_process_controller=this._post_process_controller||new QV(this)}initializeBaseNode(){super.initializeBaseNode(),this.io.outputs.setHasOneOutput(),this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this.childrenDisplayController.initializeNode(),this.initHelperHook()}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}prepareRaycaster(t,e){e.setFromCamera(t,this._object)}async cook(){this.transformController.update(),this.layers_controller.update(),this.updateNearFar(),this.renderController.update(),this.updateCamera(),this._updateHelper(),this.controls_controller.update_controls(),this._object.dispatchEvent(DH),this.cookController.endCook()}static PARAM_CALLBACK_update_near_far_from_param(t,e){t.updateNearFar()}updateNearFar(){this._object.near==this.pv.near&&this._object.far==this.pv.far||(this._object.near=this.pv.near,this._object.far=this.pv.far,this._object.updateProjectionMatrix(),this._updateHelper())}setupForAspectRatio(t){m.isNaN(t)||t&&this._aspect!=t&&(this._aspect=t,this._updateForAspectRatio())}createViewer(t,e){return new FH(t,this.scene(),this,e)}static PARAM_CALLBACK_reset_effects_composer(t){t.postProcessController.reset()}initHelperHook(){this.flags.display.onUpdate((()=>{this._updateHelper()}))}helperVisible(){return this.flags.display.active()&&this.pv.showHelper}_createHelper(){const t=new zU(this.object);return t.update(),t}_updateHelper(){this.helperVisible()?(this._helper||(this._helper=this._createHelper()),this._helper&&(this.object.add(this._helper),this._helper.update())):this._helper&&this.object.remove(this._helper)}}class YH extends qH{}class $H extends XH{PARAM_CALLBACK_update_effects_composer(t){}}const JH=-.5,ZH=.5,KH=.5,QH=-.5;class tj extends(KV(CH($V(GH(WH(function(t){return class extends t{constructor(){super(...arguments),this.size=ha.FLOAT(1)}}}(VH(wU(ua,{matrixAutoUpdate:!0}))))))))){}const ej=new tj;class nj extends XH{constructor(){super(...arguments),this.paramsConfig=ej}static type(){return is.ORTHOGRAPHIC}createObject(){return new ot.a(2*JH,2*ZH,2*KH,2*QH,BH,zH)}updateCamera(){this._updateForAspectRatio()}_updateForAspectRatio(){this._aspect&&(this._adjustFOVFromMode(),this._object.updateProjectionMatrix())}_adjustFOVFromMode(){const t=jH[this.pv.fovAdjustMode];switch(t){case HH.DEFAULT:return this._adjustFOVFromModeDefault();case HH.COVER:return this._adjustFOVFromModeCover();case HH.CONTAIN:return this._adjustFOVFromModeContain()}os.unreachable(t)}_adjustFOVFromModeDefault(){this._adjustFOVFromSize(this.pv.size||1)}_adjustFOVFromModeCover(){const t=this.pv.size||1;this._aspect>this.pv.expectedAspectRatio?this._adjustFOVFromSize(this.pv.expectedAspectRatio*t/this._aspect):this._adjustFOVFromSize(t)}_adjustFOVFromModeContain(){const t=this.pv.size||1;this._aspect>this.pv.expectedAspectRatio?this._adjustFOVFromSize(t):this._adjustFOVFromSize(this.pv.expectedAspectRatio*t/this._aspect)}_adjustFOVFromSize(t){const e=t*this._aspect;this._object.left=JH*e*1,this._object.right=ZH*e*1,this._object.top=KH*t*1,this._object.bottom=QH*t*1}}const ij=50;class sj extends(KV(CH($V(GH(WH(function(t){return class extends t{constructor(){super(...arguments),this.fov=ha.FLOAT(ij,{range:[0,100]})}}}(VH(wU(ua,{matrixAutoUpdate:!0}))))))))){}const rj=new sj;class oj extends XH{constructor(){super(...arguments),this.paramsConfig=rj}static type(){return is.PERSPECTIVE}createObject(){return new tt.a(ij,1,BH,zH)}updateCamera(){this._object.fov!=this.pv.fov&&(this._object.fov=this.pv.fov,this._object.updateProjectionMatrix()),this._updateForAspectRatio()}_updateForAspectRatio(){this._aspect&&(this._object.aspect=this._aspect,this._adjustFOVFromMode(),this._object.updateProjectionMatrix())}_adjustFOVFromMode(){const t=jH[this.pv.fovAdjustMode];switch(t){case HH.DEFAULT:return this._adjustFOVFromModeDefault();case HH.COVER:return this._adjustFOVFromModeCover();case HH.CONTAIN:return this._adjustFOVFromModeContain()}os.unreachable(t)}_adjustFOVFromModeDefault(){this._object.fov=this.pv.fov}_adjustFOVFromModeCover(){if(this._object.aspect>this.pv.expectedAspectRatio){const t=Math.tan(Object(On.e)(this.pv.fov/2))/(this._object.aspect/this.pv.expectedAspectRatio);this._object.fov=2*Object(On.k)(Math.atan(t))}else this._object.fov=this.pv.fov}_adjustFOVFromModeContain(){if(this._object.aspect>this.pv.expectedAspectRatio)this._object.fov=this.pv.fov;else{const t=Math.tan(Object(On.e)(this.pv.fov/2))/(this._object.aspect/this.pv.expectedAspectRatio);this._object.fov=2*Object(On.k)(Math.atan(t))}}}class aj extends(function(t){return class extends t{constructor(){super(...arguments),this.main=ha.FOLDER(),this.resolution=ha.INTEGER(256),this.excludedObjects=ha.STRING(\\\\\\\"*`$OS`\\\\\\\"),this.printResolve=ha.BUTTON(null,{callback:t=>{cj.PARAM_CALLBACK_printResolve(t)}}),this.near=ha.FLOAT(1),this.far=ha.FLOAT(100),this.render=ha.BUTTON(null,{callback:t=>{cj.PARAM_CALLBACK_render(t)}}),this.renderTarget=ha.FOLDER(),this.tencoding=ha.BOOLEAN(0),this.encoding=ha.INTEGER(w.ld,{visibleIf:{tencoding:1},menu:{entries:og.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))}}),this.tminFilter=ha.BOOLEAN(0),this.minFilter=ha.INTEGER(Km,{visibleIf:{tminFilter:1},menu:{entries:tf}}),this.tmagFilter=ha.BOOLEAN(0),this.magFilter=ha.INTEGER(Zm,{visibleIf:{tmagFilter:1},menu:{entries:Qm}})}}}(wU(ua))){}const lj=new aj;class cj extends cU{constructor(){super(...arguments),this.paramsConfig=lj,this.hierarchyController=new MU(this),this.transformController=new AU(this),this.flags=new Di(this),this._excludedObjects=[],this._previousVisibleStateByUuid=new Map,this._helper=new TG(1)}static type(){return Ig.CUBE_CAMERA}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this._updateHelperHierarchy(),this._helper.matrixAutoUpdate=!1,this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()})),this.io.inputs.setCount(0,1)}createObject(){const t=new Fn.a;return t.matrixAutoUpdate=!0,t}cook(){this.transformController.update(),this._resolveObjects();const t=this._setupCubeCamera();this._cubeCamera&&!t||this._createCubeCamera(),this.cookController.endCook()}_updateHelperHierarchy(){this.flags.display.active()?this.object.add(this._helper):this.object.remove(this._helper)}_setupCubeCamera(){let t=!1;if(this._cubeCamera){const e=this._cubeCamera.children[0],n=e.near,i=e.far,s=this._cubeCamera.renderTarget.width;n==this.pv.near&&i==this.pv.far&&s==this.pv.resolution||(t=!0),t&&this.object.remove(this._cubeCamera)}return t}_createCubeCamera(){const t=new st(this.pv.resolution,{encoding:this.pv.tencoding?this.pv.encoding:w.ld,minFilter:this.pv.tminFilter?this.pv.minFilter:void 0,magFilter:this.pv.tmagFilter?this.pv.magFilter:void 0});this._cubeCamera=new nt(this.pv.near,this.pv.far,t),this._cubeCamera.matrixAutoUpdate=!0,this.object.add(this._cubeCamera)}renderTarget(){if(this._cubeCamera)return this._cubeCamera.renderTarget}render(){const t=li.renderersController.firstRenderer();if(t)if(this._cubeCamera){for(let t of this._excludedObjects)this._previousVisibleStateByUuid.set(t.uuid,t.visible),t.visible=!1;this._cubeCamera.update(t,this.scene().threejsScene());for(let t of this._excludedObjects){const e=this._previousVisibleStateByUuid.get(t.uuid);e&&(t.visible=e)}this._previousVisibleStateByUuid.clear()}else console.warn(`no cubeCamera for ${this.path()}`);else console.warn(`no renderer found for ${this.path()}`)}_resolveObjects(){const t=this.scene().objectsByMask(this.pv.excludedObjects),e=new Map;for(let n of t)e.set(n.uuid,n);this._excludedObjects=[];for(let n of t){const t=n.parent;t&&(e.get(t.uuid)||this._excludedObjects.push(n))}}static PARAM_CALLBACK_printResolve(t){t.param_callback_printResolve()}param_callback_printResolve(){this._resolveObjects(),console.log(this._excludedObjects)}static PARAM_CALLBACK_render(t){t.param_callback_render()}param_callback_render(){this.render()}}class hj extends cU{constructor(){super(...arguments),this._attachableToHierarchy=!1}createObject(){const t=new Fn.a;return t.matrixAutoUpdate=!1,t}cook(){this.cookController.endCook()}}class uj extends hj{}class dj extends uj{constructor(){super(...arguments),this._children_controller_context=ts.ANIM}static type(){return es.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class pj extends dj{constructor(){super(...arguments),this.renderOrder=lU.MANAGER}}class _j extends uj{constructor(){super(...arguments),this._children_controller_context=ts.COP}static type(){return es.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class mj extends uj{constructor(){super(...arguments),this.renderOrder=lU.MANAGER,this._children_controller_context=ts.EVENT}static type(){return es.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class fj extends uj{constructor(){super(...arguments),this.renderOrder=lU.MANAGER,this._children_controller_context=ts.MAT}static type(){return es.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class gj extends hj{constructor(){super(...arguments),this.paramsConfig=new ef,this.effectsComposerController=new nf(this),this.displayNodeController=new Fm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=ts.POST}static type(){return es.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class vj extends uj{constructor(){super(...arguments),this.renderOrder=lU.MANAGER,this._children_controller_context=ts.ROP}static type(){return es.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}const yj=[\\\\\\\"input pass\\\\\\\"];const xj={cook:!1,callback:function(t,e){bj.PARAM_CALLBACK_updatePasses(t)},computeOnDirty:!0};class bj extends aa{constructor(){super(...arguments),this.flags=new zi(this),this._passes_by_requester_id=new Map,this._update_pass_bound=this.updatePass.bind(this)}static context(){return ts.POST}static displayedInputNames(){return yj}initializeNode(){this.flags.display.set(!1),this.flags.display.onUpdate((()=>{if(this.flags.display.active()){const t=this.parent();t&&t.displayNodeController&&t.displayNodeController.setDisplayNode(this)}})),this.io.inputs.setCount(0,1),this.io.outputs.setHasOneOutput()}cook(){this.cookController.endCook()}setupComposer(t){if(this._addPassFromInput(0,t),!this.flags.bypass.active()){let e=this._passes_by_requester_id.get(t.requester.graphNodeId());e||(e=this._createPass(t),e&&this._passes_by_requester_id.set(t.requester.graphNodeId(),e)),e&&t.composer.addPass(e)}}_addPassFromInput(t,e){const n=this.io.inputs.input(t);n&&n.setupComposer(e)}_createPass(t){}static PARAM_CALLBACK_updatePasses(t){t._updatePasses()}_updatePasses(){this._passes_by_requester_id.forEach(this._update_pass_bound)}updatePass(t){}}const wj={uniforms:{tDiffuse:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tfloat l = linearToRelativeLuminance( texel.rgb );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( l, l, l, texel.w );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};var Tj={uniforms:{tDiffuse:{value:null},averageLuminance:{value:1},luminanceMap:{value:null},maxLuminance:{value:16},minLuminance:{value:.01},middleGrey:{value:.6}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tuniform float middleGrey;\\\\n\\\\t\\\\tuniform float minLuminance;\\\\n\\\\t\\\\tuniform float maxLuminance;\\\\n\\\\t\\\\t#ifdef ADAPTED_LUMINANCE\\\\n\\\\t\\\\t\\\\tuniform sampler2D luminanceMap;\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tuniform float averageLuminance;\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tvec3 ToneMap( vec3 vColor ) {\\\\n\\\\t\\\\t\\\\t#ifdef ADAPTED_LUMINANCE\\\\n\\\\t\\\\t\\\\t\\\\t// Get the calculated average luminance\\\\n\\\\t\\\\t\\\\t\\\\tfloat fLumAvg = texture2D(luminanceMap, vec2(0.5, 0.5)).r;\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\tfloat fLumAvg = averageLuminance;\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t\\\\t// Calculate the luminance of the current pixel\\\\n\\\\t\\\\t\\\\tfloat fLumPixel = linearToRelativeLuminance( vColor );\\\\n\\\\n\\\\t\\\\t\\\\t// Apply the modified operator (Eq. 4)\\\\n\\\\t\\\\t\\\\tfloat fLumScaled = (fLumPixel * middleGrey) / max( minLuminance, fLumAvg );\\\\n\\\\n\\\\t\\\\t\\\\tfloat fLumCompressed = (fLumScaled * (1.0 + (fLumScaled / (maxLuminance * maxLuminance)))) / (1.0 + fLumScaled);\\\\n\\\\t\\\\t\\\\treturn fLumCompressed * vColor;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( ToneMap( texel.xyz ), texel.w );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class Aj extends km{constructor(t,e){super(),this.resolution=void 0!==e?e:256,this.needsInit=!0,this.adaptive=void 0===t||!!t,this.luminanceRT=null,this.previousLuminanceRT=null,this.currentLuminanceRT=null,void 0===zm&&console.error(\\\\\\\"THREE.AdaptiveToneMappingPass relies on CopyShader\\\\\\\");const n=zm;this.copyUniforms=I.clone(n.uniforms),this.materialCopy=new F({uniforms:this.copyUniforms,vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,blending:w.ub,depthTest:!1}),void 0===wj&&console.error(\\\\\\\"THREE.AdaptiveToneMappingPass relies on LuminosityShader\\\\\\\"),this.materialLuminance=new F({uniforms:I.clone(wj.uniforms),vertexShader:wj.vertexShader,fragmentShader:wj.fragmentShader,blending:w.ub}),this.adaptLuminanceShader={defines:{MIP_LEVEL_1X1:(Math.log(this.resolution)/Math.log(2)).toFixed(1)},uniforms:{lastLum:{value:null},currentLum:{value:null},minLuminance:{value:.01},delta:{value:.016},tau:{value:1}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D lastLum;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D currentLum;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float minLuminance;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float delta;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float tau;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 lastLum = texture2D( lastLum, vUv, MIP_LEVEL_1X1 );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 currentLum = texture2D( currentLum, vUv, MIP_LEVEL_1X1 );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat fLastLum = max( minLuminance, lastLum.r );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat fCurrentLum = max( minLuminance, currentLum.r );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t//The adaption seems to work better in extreme lighting differences\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t//if the input luminance is squared.\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfCurrentLum *= fCurrentLum;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t// Adapt the luminance using Pattanaik's technique\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat fAdaptedLum = fLastLum + (fCurrentLum - fLastLum) * (1.0 - exp(-delta * tau));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t// \\\\\\\\\\\"fAdaptedLum = sqrt(fAdaptedLum);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.r = fAdaptedLum;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"},this.materialAdaptiveLum=new F({uniforms:I.clone(this.adaptLuminanceShader.uniforms),vertexShader:this.adaptLuminanceShader.vertexShader,fragmentShader:this.adaptLuminanceShader.fragmentShader,defines:Object.assign({},this.adaptLuminanceShader.defines),blending:w.ub}),void 0===Tj&&console.error(\\\\\\\"THREE.AdaptiveToneMappingPass relies on ToneMapShader\\\\\\\"),this.materialToneMap=new F({uniforms:I.clone(Tj.uniforms),vertexShader:Tj.vertexShader,fragmentShader:Tj.fragmentShader,blending:w.ub}),this.fsQuad=new Vm(null)}render(t,e,n,i){this.needsInit&&(this.reset(t),this.luminanceRT.texture.type=n.texture.type,this.previousLuminanceRT.texture.type=n.texture.type,this.currentLuminanceRT.texture.type=n.texture.type,this.needsInit=!1),this.adaptive&&(this.fsQuad.material=this.materialLuminance,this.materialLuminance.uniforms.tDiffuse.value=n.texture,t.setRenderTarget(this.currentLuminanceRT),this.fsQuad.render(t),this.fsQuad.material=this.materialAdaptiveLum,this.materialAdaptiveLum.uniforms.delta.value=i,this.materialAdaptiveLum.uniforms.lastLum.value=this.previousLuminanceRT.texture,this.materialAdaptiveLum.uniforms.currentLum.value=this.currentLuminanceRT.texture,t.setRenderTarget(this.luminanceRT),this.fsQuad.render(t),this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.luminanceRT.texture,t.setRenderTarget(this.previousLuminanceRT),this.fsQuad.render(t)),this.fsQuad.material=this.materialToneMap,this.materialToneMap.uniforms.tDiffuse.value=n.texture,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(),this.fsQuad.render(t))}reset(){this.luminanceRT&&this.luminanceRT.dispose(),this.currentLuminanceRT&&this.currentLuminanceRT.dispose(),this.previousLuminanceRT&&this.previousLuminanceRT.dispose();const t={minFilter:w.V,magFilter:w.V,format:w.Ib};this.luminanceRT=new K(this.resolution,this.resolution,t),this.luminanceRT.texture.name=\\\\\\\"AdaptiveToneMappingPass.l\\\\\\\",this.luminanceRT.texture.generateMipmaps=!1,this.previousLuminanceRT=new K(this.resolution,this.resolution,t),this.previousLuminanceRT.texture.name=\\\\\\\"AdaptiveToneMappingPass.pl\\\\\\\",this.previousLuminanceRT.texture.generateMipmaps=!1,t.minFilter=w.Y,t.generateMipmaps=!0,this.currentLuminanceRT=new K(this.resolution,this.resolution,t),this.currentLuminanceRT.texture.name=\\\\\\\"AdaptiveToneMappingPass.cl\\\\\\\",this.adaptive&&(this.materialToneMap.defines.ADAPTED_LUMINANCE=\\\\\\\"\\\\\\\",this.materialToneMap.uniforms.luminanceMap.value=this.luminanceRT.texture),this.fsQuad.material=new lt.a({color:7829367}),this.materialLuminance.needsUpdate=!0,this.materialAdaptiveLum.needsUpdate=!0,this.materialToneMap.needsUpdate=!0}setAdaptive(t){t?(this.adaptive=!0,this.materialToneMap.defines.ADAPTED_LUMINANCE=\\\\\\\"\\\\\\\",this.materialToneMap.uniforms.luminanceMap.value=this.luminanceRT.texture):(this.adaptive=!1,delete this.materialToneMap.defines.ADAPTED_LUMINANCE,this.materialToneMap.uniforms.luminanceMap.value=null),this.materialToneMap.needsUpdate=!0}setAdaptionRate(t){t&&(this.materialAdaptiveLum.uniforms.tau.value=Math.abs(t))}setMinLuminance(t){t&&(this.materialToneMap.uniforms.minLuminance.value=t,this.materialAdaptiveLum.uniforms.minLuminance.value=t)}setMaxLuminance(t){t&&(this.materialToneMap.uniforms.maxLuminance.value=t)}setAverageLuminance(t){t&&(this.materialToneMap.uniforms.averageLuminance.value=t)}setMiddleGrey(t){t&&(this.materialToneMap.uniforms.middleGrey.value=t)}dispose(){this.luminanceRT&&this.luminanceRT.dispose(),this.previousLuminanceRT&&this.previousLuminanceRT.dispose(),this.currentLuminanceRT&&this.currentLuminanceRT.dispose(),this.materialLuminance&&this.materialLuminance.dispose(),this.materialAdaptiveLum&&this.materialAdaptiveLum.dispose(),this.materialCopy&&this.materialCopy.dispose(),this.materialToneMap&&this.materialToneMap.dispose()}}const Mj=new class extends ua{constructor(){super(...arguments),this.adaptive=ha.BOOLEAN(1,{...xj}),this.averageLuminance=ha.FLOAT(.7,{...xj}),this.midGrey=ha.FLOAT(.04,{...xj}),this.maxLuminance=ha.FLOAT(16,{range:[0,20],...xj}),this.adaptiveRange=ha.FLOAT(2,{range:[0,10],...xj})}};class Ej extends bj{constructor(){super(...arguments),this.paramsConfig=Mj}static type(){return\\\\\\\"adaptiveToneMapping\\\\\\\"}_createPass(t){const e=new Aj(this.pv.adaptive,t.resolution.x);return this.updatePass(e),e}updatePass(t){t.setMaxLuminance(this.pv.maxLuminance),t.setMiddleGrey(this.pv.midGrey),t.setAverageLuminance(this.pv.averageLuminance)}}const Sj={uniforms:{damp:{value:.96},tOld:{value:null},tNew:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float damp;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tOld;\\\\n\\\\t\\\\tuniform sampler2D tNew;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvec4 when_gt( vec4 x, float y ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn max( sign( x - y ), 0.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texelOld = texture2D( tOld, vUv );\\\\n\\\\t\\\\t\\\\tvec4 texelNew = texture2D( tNew, vUv );\\\\n\\\\n\\\\t\\\\t\\\\ttexelOld *= damp * when_gt( texelOld, 0.1 );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = max(texelNew, texelOld);\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class Cj extends km{constructor(t=.96){super(),void 0===Sj&&console.error(\\\\\\\"THREE.AfterimagePass relies on AfterimageShader\\\\\\\"),this.shader=Sj,this.uniforms=I.clone(this.shader.uniforms),this.uniforms.damp.value=t,this.textureComp=new K(window.innerWidth,window.innerHeight,{minFilter:w.V,magFilter:w.ob,format:w.Ib}),this.textureOld=new K(window.innerWidth,window.innerHeight,{minFilter:w.V,magFilter:w.ob,format:w.Ib}),this.shaderMaterial=new F({uniforms:this.uniforms,vertexShader:this.shader.vertexShader,fragmentShader:this.shader.fragmentShader}),this.compFsQuad=new Vm(this.shaderMaterial);const e=new lt.a;this.copyFsQuad=new Vm(e)}render(t,e,n){this.uniforms.tOld.value=this.textureOld.texture,this.uniforms.tNew.value=n.texture,t.setRenderTarget(this.textureComp),this.compFsQuad.render(t),this.copyFsQuad.material.map=this.textureComp.texture,this.renderToScreen?(t.setRenderTarget(null),this.copyFsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(),this.copyFsQuad.render(t));const i=this.textureOld;this.textureOld=this.textureComp,this.textureComp=i}setSize(t,e){this.textureComp.setSize(t,e),this.textureOld.setSize(t,e)}}const Nj=new class extends ua{constructor(){super(...arguments),this.damp=ha.FLOAT(.96,{range:[0,1],rangeLocked:[!0,!0],...xj})}};class Lj extends bj{constructor(){super(...arguments),this.paramsConfig=Nj}static type(){return\\\\\\\"afterImage\\\\\\\"}_createPass(t){const e=new Cj;return this.updatePass(e),e}updatePass(t){t.uniforms.damp.value=this.pv.damp}}const Oj={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float opacity;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 base = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 lumCoeff = vec3( 0.25, 0.65, 0.1 );\\\\n\\\\t\\\\t\\\\tfloat lum = dot( lumCoeff, base.rgb );\\\\n\\\\t\\\\t\\\\tvec3 blend = vec3( lum );\\\\n\\\\n\\\\t\\\\t\\\\tfloat L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 result1 = 2.0 * base.rgb * blend;\\\\n\\\\t\\\\t\\\\tvec3 result2 = 1.0 - 2.0 * ( 1.0 - blend ) * ( 1.0 - base.rgb );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 newColor = mix( result1, result2, L );\\\\n\\\\n\\\\t\\\\t\\\\tfloat A2 = opacity * base.a;\\\\n\\\\t\\\\t\\\\tvec3 mixRGB = A2 * newColor.rgb;\\\\n\\\\t\\\\t\\\\tmixRGB += ( ( 1.0 - A2 ) * base.rgb );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( mixRGB, base.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const Pj=new class extends ua{constructor(){super(...arguments),this.opacity=ha.FLOAT(.95,{range:[-5,5],rangeLocked:[!0,!0],...xj})}};class Rj extends bj{constructor(){super(...arguments),this.paramsConfig=Pj}static type(){return\\\\\\\"bleach\\\\\\\"}_createPass(t){const e=new Hm(Oj);return this.updatePass(e),e}updatePass(t){t.uniforms.opacity.value=this.pv.opacity}}const Ij={uniforms:{tDiffuse:{value:null},brightness:{value:0},contrast:{value:0}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float brightness;\\\\n\\\\t\\\\tuniform float contrast;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor.rgb += brightness;\\\\n\\\\n\\\\t\\\\t\\\\tif (contrast > 0.0) {\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5;\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const Fj=new class extends ua{constructor(){super(...arguments),this.brightness=ha.FLOAT(0,{range:[-1,1],rangeLocked:[!1,!1],...xj}),this.contrast=ha.FLOAT(0,{range:[-1,1],rangeLocked:[!1,!1],...xj}),this.transparent=ha.BOOLEAN(1,xj)}};class Dj extends bj{constructor(){super(...arguments),this.paramsConfig=Fj}static type(){return\\\\\\\"brightnessContrast\\\\\\\"}_createPass(t){const e=new Hm(Ij);return e.fsQuad.material.transparent=!0,this.updatePass(e),e}updatePass(t){t.uniforms.brightness.value=this.pv.brightness,t.uniforms.contrast.value=this.pv.contrast,t.material.transparent=this.pv.transparent}}class Bj extends km{constructor(t,e){super(),this.needsSwap=!1,this.clearColor=void 0!==t?t:0,this.clearAlpha=void 0!==e?e:0,this._oldClearColor=new D.a}render(t,e,n){let i;this.clearColor&&(t.getClearColor(this._oldClearColor),i=t.getClearAlpha(),t.setClearColor(this.clearColor,this.clearAlpha)),t.setRenderTarget(this.renderToScreen?null:n),t.clear(),this.clearColor&&t.setClearColor(this._oldClearColor,i)}}const zj=new class extends ua{};class kj extends bj{constructor(){super(...arguments),this.paramsConfig=zj}static type(){return\\\\\\\"clear\\\\\\\"}_createPass(t){const e=new Bj;return this.updatePass(e),e}updatePass(t){}}const Uj=new class extends ua{};class Gj extends bj{constructor(){super(...arguments),this.paramsConfig=Uj}static type(){return\\\\\\\"clearMask\\\\\\\"}_createPass(t){const e=new Wm;return this.updatePass(e),e}updatePass(t){}}const Vj={uniforms:{tDiffuse:{value:null},powRGB:{value:new p.a(2,2,2)},mulRGB:{value:new p.a(1,1,1)},addRGB:{value:new p.a(0,0,0)}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform vec3 powRGB;\\\\n\\\\t\\\\tuniform vec3 mulRGB;\\\\n\\\\t\\\\tuniform vec3 addRGB;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = texture2D( tDiffuse, vUv );\\\\n\\\\t\\\\t\\\\tgl_FragColor.rgb = mulRGB * pow( ( gl_FragColor.rgb + addRGB ), powRGB );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const Hj=new class extends ua{constructor(){super(...arguments),this.pow=ha.VECTOR3([2,2,2],{...xj}),this.mult=ha.COLOR([1,1,1],{...xj}),this.add=ha.COLOR([0,0,0],{...xj})}};class jj extends bj{constructor(){super(...arguments),this.paramsConfig=Hj}static type(){return\\\\\\\"colorCorrection\\\\\\\"}_createPass(t){const e=new Hm(Vj);return this.updatePass(e),e}updatePass(t){t.uniforms.powRGB.value.copy(this.pv.pow),t.uniforms.mulRGB.value.set(this.pv.mult.r,this.pv.mult.g,this.pv.mult.b),t.uniforms.addRGB.value.set(this.pv.add.r,this.pv.add.g,this.pv.add.b)}}const Wj=new class extends ua{constructor(){super(...arguments),this.opacity=ha.FLOAT(1,{range:[0,1],rangeLocked:[!0,!0],...xj}),this.transparent=ha.BOOLEAN(1,xj)}};class qj extends bj{constructor(){super(...arguments),this.paramsConfig=Wj}static type(){return\\\\\\\"copy\\\\\\\"}_createPass(t){const e=new Hm(zm);return this.updatePass(e),e}updatePass(t){t.uniforms.opacity.value=this.pv.opacity,t.material.transparent=this.pv.transparent}}const Xj={uniforms:{textureWidth:{value:1},textureHeight:{value:1},focalDepth:{value:1},focalLength:{value:24},fstop:{value:.9},tColor:{value:null},tDepth:{value:null},maxblur:{value:1},showFocus:{value:0},manualdof:{value:0},vignetting:{value:0},depthblur:{value:0},threshold:{value:.5},gain:{value:2},bias:{value:.5},fringe:{value:.7},znear:{value:.1},zfar:{value:100},noise:{value:1},dithering:{value:1e-4},pentagon:{value:0},shaderFocus:{value:1},focusCoords:{value:new d.a}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tColor;\\\\n\\\\t\\\\tuniform sampler2D tDepth;\\\\n\\\\t\\\\tuniform float textureWidth;\\\\n\\\\t\\\\tuniform float textureHeight;\\\\n\\\\n\\\\t\\\\tuniform float focalDepth;  //focal distance value in meters, but you may use autofocus option below\\\\n\\\\t\\\\tuniform float focalLength; //focal length in mm\\\\n\\\\t\\\\tuniform float fstop; //f-stop value\\\\n\\\\t\\\\tuniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range)\\\\n\\\\n\\\\t\\\\t/*\\\\n\\\\t\\\\tmake sure that these two values are the same for your camera, otherwise distances will be wrong.\\\\n\\\\t\\\\t*/\\\\n\\\\n\\\\t\\\\tuniform float znear; // camera clipping start\\\\n\\\\t\\\\tuniform float zfar; // camera clipping end\\\\n\\\\n\\\\t\\\\t//------------------------------------------\\\\n\\\\t\\\\t//user variables\\\\n\\\\n\\\\t\\\\tconst int samples = SAMPLES; //samples on the first ring\\\\n\\\\t\\\\tconst int rings = RINGS; //ring count\\\\n\\\\n\\\\t\\\\tconst int maxringsamples = rings * samples;\\\\n\\\\n\\\\t\\\\tuniform bool manualdof; // manual dof calculation\\\\n\\\\t\\\\tfloat ndofstart = 1.0; // near dof blur start\\\\n\\\\t\\\\tfloat ndofdist = 2.0; // near dof blur falloff distance\\\\n\\\\t\\\\tfloat fdofstart = 1.0; // far dof blur start\\\\n\\\\t\\\\tfloat fdofdist = 3.0; // far dof blur falloff distance\\\\n\\\\n\\\\t\\\\tfloat CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm)\\\\n\\\\n\\\\t\\\\tuniform bool vignetting; // use optical lens vignetting\\\\n\\\\n\\\\t\\\\tfloat vignout = 1.3; // vignetting outer border\\\\n\\\\t\\\\tfloat vignin = 0.0; // vignetting inner border\\\\n\\\\t\\\\tfloat vignfade = 22.0; // f-stops till vignete fades\\\\n\\\\n\\\\t\\\\tuniform bool shaderFocus;\\\\n\\\\t\\\\t// disable if you use external focalDepth value\\\\n\\\\n\\\\t\\\\tuniform vec2 focusCoords;\\\\n\\\\t\\\\t// autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right)\\\\n\\\\t\\\\t// if center of screen use vec2(0.5, 0.5);\\\\n\\\\n\\\\t\\\\tuniform float maxblur;\\\\n\\\\t\\\\t//clamp value of max blur (0.0 = no blur, 1.0 default)\\\\n\\\\n\\\\t\\\\tuniform float threshold; // highlight threshold;\\\\n\\\\t\\\\tuniform float gain; // highlight gain;\\\\n\\\\n\\\\t\\\\tuniform float bias; // bokeh edge bias\\\\n\\\\t\\\\tuniform float fringe; // bokeh chromatic aberration / fringing\\\\n\\\\n\\\\t\\\\tuniform bool noise; //use noise instead of pattern for sample dithering\\\\n\\\\n\\\\t\\\\tuniform float dithering;\\\\n\\\\n\\\\t\\\\tuniform bool depthblur; // blur the depth buffer\\\\n\\\\t\\\\tfloat dbsize = 1.25; // depth blur size\\\\n\\\\n\\\\t\\\\t/*\\\\n\\\\t\\\\tnext part is experimental\\\\n\\\\t\\\\tnot looking good with small sample and ring count\\\\n\\\\t\\\\tlooks okay starting from samples = 4, rings = 4\\\\n\\\\t\\\\t*/\\\\n\\\\n\\\\t\\\\tuniform bool pentagon; //use pentagon as bokeh shape?\\\\n\\\\t\\\\tfloat feather = 0.4; //pentagon shape feather\\\\n\\\\n\\\\t\\\\t//------------------------------------------\\\\n\\\\n\\\\t\\\\tfloat penta(vec2 coords) {\\\\n\\\\t\\\\t\\\\t//pentagonal shape\\\\n\\\\t\\\\t\\\\tfloat scale = float(rings) - 1.3;\\\\n\\\\t\\\\t\\\\tvec4  HS0 = vec4( 1.0,         0.0,         0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS1 = vec4( 0.309016994, 0.951056516, 0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS2 = vec4(-0.809016994, 0.587785252, 0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS3 = vec4(-0.809016994,-0.587785252, 0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS4 = vec4( 0.309016994,-0.951056516, 0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS5 = vec4( 0.0        ,0.0         , 1.0,  1.0);\\\\n\\\\n\\\\t\\\\t\\\\tvec4  one = vec4( 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 P = vec4((coords),vec2(scale, scale));\\\\n\\\\n\\\\t\\\\t\\\\tvec4 dist = vec4(0.0);\\\\n\\\\t\\\\t\\\\tfloat inorout = -4.0;\\\\n\\\\n\\\\t\\\\t\\\\tdist.x = dot( P, HS0 );\\\\n\\\\t\\\\t\\\\tdist.y = dot( P, HS1 );\\\\n\\\\t\\\\t\\\\tdist.z = dot( P, HS2 );\\\\n\\\\t\\\\t\\\\tdist.w = dot( P, HS3 );\\\\n\\\\n\\\\t\\\\t\\\\tdist = smoothstep( -feather, feather, dist );\\\\n\\\\n\\\\t\\\\t\\\\tinorout += dot( dist, one );\\\\n\\\\n\\\\t\\\\t\\\\tdist.x = dot( P, HS4 );\\\\n\\\\t\\\\t\\\\tdist.y = HS5.w - abs( P.z );\\\\n\\\\n\\\\t\\\\t\\\\tdist = smoothstep( -feather, feather, dist );\\\\n\\\\t\\\\t\\\\tinorout += dist.x;\\\\n\\\\n\\\\t\\\\t\\\\treturn clamp( inorout, 0.0, 1.0 );\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat bdepth(vec2 coords) {\\\\n\\\\t\\\\t\\\\t// Depth buffer blur\\\\n\\\\t\\\\t\\\\tfloat d = 0.0;\\\\n\\\\t\\\\t\\\\tfloat kernel[9];\\\\n\\\\t\\\\t\\\\tvec2 offset[9];\\\\n\\\\n\\\\t\\\\t\\\\tvec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize;\\\\n\\\\n\\\\t\\\\t\\\\toffset[0] = vec2(-wh.x,-wh.y);\\\\n\\\\t\\\\t\\\\toffset[1] = vec2( 0.0, -wh.y);\\\\n\\\\t\\\\t\\\\toffset[2] = vec2( wh.x -wh.y);\\\\n\\\\n\\\\t\\\\t\\\\toffset[3] = vec2(-wh.x,  0.0);\\\\n\\\\t\\\\t\\\\toffset[4] = vec2( 0.0,   0.0);\\\\n\\\\t\\\\t\\\\toffset[5] = vec2( wh.x,  0.0);\\\\n\\\\n\\\\t\\\\t\\\\toffset[6] = vec2(-wh.x, wh.y);\\\\n\\\\t\\\\t\\\\toffset[7] = vec2( 0.0,  wh.y);\\\\n\\\\t\\\\t\\\\toffset[8] = vec2( wh.x, wh.y);\\\\n\\\\n\\\\t\\\\t\\\\tkernel[0] = 1.0/16.0;   kernel[1] = 2.0/16.0;   kernel[2] = 1.0/16.0;\\\\n\\\\t\\\\t\\\\tkernel[3] = 2.0/16.0;   kernel[4] = 4.0/16.0;   kernel[5] = 2.0/16.0;\\\\n\\\\t\\\\t\\\\tkernel[6] = 1.0/16.0;   kernel[7] = 2.0/16.0;   kernel[8] = 1.0/16.0;\\\\n\\\\n\\\\n\\\\t\\\\t\\\\tfor( int i=0; i<9; i++ ) {\\\\n\\\\t\\\\t\\\\t\\\\tfloat tmp = texture2D(tDepth, coords + offset[i]).r;\\\\n\\\\t\\\\t\\\\t\\\\td += tmp * kernel[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\treturn d;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\n\\\\t\\\\tvec3 color(vec2 coords,float blur) {\\\\n\\\\t\\\\t\\\\t//processing the sample\\\\n\\\\n\\\\t\\\\t\\\\tvec3 col = vec3(0.0);\\\\n\\\\t\\\\t\\\\tvec2 texel = vec2(1.0/textureWidth,1.0/textureHeight);\\\\n\\\\n\\\\t\\\\t\\\\tcol.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r;\\\\n\\\\t\\\\t\\\\tcol.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g;\\\\n\\\\t\\\\t\\\\tcol.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 lumcoeff = vec3(0.299,0.587,0.114);\\\\n\\\\t\\\\t\\\\tfloat lum = dot(col.rgb, lumcoeff);\\\\n\\\\t\\\\t\\\\tfloat thresh = max((lum-threshold)*gain, 0.0);\\\\n\\\\t\\\\t\\\\treturn col+mix(vec3(0.0),col,thresh*blur);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec3 debugFocus(vec3 col, float blur, float depth) {\\\\n\\\\t\\\\t\\\\tfloat edge = 0.002*depth; //distance based edge smoothing\\\\n\\\\t\\\\t\\\\tfloat m = clamp(smoothstep(0.0,edge,blur),0.0,1.0);\\\\n\\\\t\\\\t\\\\tfloat e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0);\\\\n\\\\n\\\\t\\\\t\\\\tcol = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6);\\\\n\\\\t\\\\t\\\\tcol = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2);\\\\n\\\\n\\\\t\\\\t\\\\treturn col;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat linearize(float depth) {\\\\n\\\\t\\\\t\\\\treturn -zfar * znear / (depth * (zfar - znear) - zfar);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat vignette() {\\\\n\\\\t\\\\t\\\\tfloat dist = distance(vUv.xy, vec2(0.5,0.5));\\\\n\\\\t\\\\t\\\\tdist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist);\\\\n\\\\t\\\\t\\\\treturn clamp(dist,0.0,1.0);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) {\\\\n\\\\t\\\\t\\\\tfloat rings2 = float(rings);\\\\n\\\\t\\\\t\\\\tfloat step = PI*2.0 / float(ringsamples);\\\\n\\\\t\\\\t\\\\tfloat pw = cos(j*step)*i;\\\\n\\\\t\\\\t\\\\tfloat ph = sin(j*step)*i;\\\\n\\\\t\\\\t\\\\tfloat p = 1.0;\\\\n\\\\t\\\\t\\\\tif (pentagon) {\\\\n\\\\t\\\\t\\\\t\\\\tp = penta(vec2(pw,ph));\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\tcol += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p;\\\\n\\\\t\\\\t\\\\treturn 1.0 * mix(1.0, i /rings2, bias) * p;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t//scene depth calculation\\\\n\\\\n\\\\t\\\\t\\\\tfloat depth = linearize(texture2D(tDepth,vUv.xy).x);\\\\n\\\\n\\\\t\\\\t\\\\t// Blur depth?\\\\n\\\\t\\\\t\\\\tif ( depthblur ) {\\\\n\\\\t\\\\t\\\\t\\\\tdepth = linearize(bdepth(vUv.xy));\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t//focal plane calculation\\\\n\\\\n\\\\t\\\\t\\\\tfloat fDepth = focalDepth;\\\\n\\\\n\\\\t\\\\t\\\\tif (shaderFocus) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfDepth = linearize(texture2D(tDepth,focusCoords).x);\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t// dof blur factor calculation\\\\n\\\\n\\\\t\\\\t\\\\tfloat blur = 0.0;\\\\n\\\\n\\\\t\\\\t\\\\tif (manualdof) {\\\\n\\\\t\\\\t\\\\t\\\\tfloat a = depth-fDepth; // Focal plane\\\\n\\\\t\\\\t\\\\t\\\\tfloat b = (a-fdofstart)/fdofdist; // Far DoF\\\\n\\\\t\\\\t\\\\t\\\\tfloat c = (-a-ndofstart)/ndofdist; // Near Dof\\\\n\\\\t\\\\t\\\\t\\\\tblur = (a>0.0) ? b : c;\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tfloat f = focalLength; // focal length in mm\\\\n\\\\t\\\\t\\\\t\\\\tfloat d = fDepth*1000.0; // focal plane in mm\\\\n\\\\t\\\\t\\\\t\\\\tfloat o = depth*1000.0; // depth in mm\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat a = (o*f)/(o-f);\\\\n\\\\t\\\\t\\\\t\\\\tfloat b = (d*f)/(d-f);\\\\n\\\\t\\\\t\\\\t\\\\tfloat c = (d-f)/(d*fstop*CoC);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tblur = abs(a-b)*c;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tblur = clamp(blur,0.0,1.0);\\\\n\\\\n\\\\t\\\\t\\\\t// calculation of pattern for dithering\\\\n\\\\n\\\\t\\\\t\\\\tvec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur;\\\\n\\\\n\\\\t\\\\t\\\\t// getting blur x and y step factor\\\\n\\\\n\\\\t\\\\t\\\\tfloat w = (1.0/textureWidth)*blur*maxblur+noise.x;\\\\n\\\\t\\\\t\\\\tfloat h = (1.0/textureHeight)*blur*maxblur+noise.y;\\\\n\\\\n\\\\t\\\\t\\\\t// calculation of final color\\\\n\\\\n\\\\t\\\\t\\\\tvec3 col = vec3(0.0);\\\\n\\\\n\\\\t\\\\t\\\\tif(blur < 0.05) {\\\\n\\\\t\\\\t\\\\t\\\\t//some optimization thingy\\\\n\\\\t\\\\t\\\\t\\\\tcol = texture2D(tColor, vUv.xy).rgb;\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tcol = texture2D(tColor, vUv.xy).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tfloat s = 1.0;\\\\n\\\\t\\\\t\\\\t\\\\tint ringsamples;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfor (int i = 1; i <= rings; i++) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t/*unboxstart*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tringsamples = i * samples;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfor (int j = 0 ; j < maxringsamples ; j++) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif (j >= ringsamples) break;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ts += gather(float(i), float(j), ringsamples, col, w, h, blur);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t/*unboxend*/\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcol /= s; //divide by sample count\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tif (showFocus) {\\\\n\\\\t\\\\t\\\\t\\\\tcol = debugFocus(col, blur, depth);\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tif (vignetting) {\\\\n\\\\t\\\\t\\\\t\\\\tcol *= vignette();\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor.rgb = col;\\\\n\\\\t\\\\t\\\\tgl_FragColor.a = 1.0;\\\\n\\\\t\\\\t}\\\\\\\"},Yj={uniforms:{mNear:{value:1},mFar:{value:1e3}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying float vViewZDepth;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t#include <begin_vertex>\\\\n\\\\t\\\\t\\\\t#include <project_vertex>\\\\n\\\\n\\\\t\\\\t\\\\tvViewZDepth = - mvPosition.z;\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float mNear;\\\\n\\\\t\\\\tuniform float mFar;\\\\n\\\\n\\\\t\\\\tvarying float vViewZDepth;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tfloat color = 1.0 - smoothstep( mNear, mFar, vViewZDepth );\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( vec3( color ), 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class $j{constructor(t){this._scene=t}scene(){return this._scene}with_overriden_material(t,e,n,i){const s={};let r;this._scene.traverse((i=>{const o=i;if(o.material){const i=o.geometry;if(i){const a=o.customDepthDOFMaterial;if(a){if(r=a,r.uniforms)for(let t of Object.keys(n))r.uniforms[t].value=n[t].value}else r=fr.markedAsInstance(i)?e:t;r&&(s[o.uuid]=o.material,o.material=r)}}})),i(),this._scene.traverse((t=>{const e=t;if(e.material){e.geometry&&(e.material=s[e.uuid])}}));for(let t of Object.keys(s))delete s[t]}}class Jj{constructor(t,e,n,i){this._depth_of_field_node=t,this._scene=e,this._camera=n,this._resolution=i,this._camera_uniforms={mNear:{value:0},mFar:{value:0}},this.enabled=!0,this.needsSwap=!0,this.clear=!0,this.renderToScreen=!0,this._processing_scene=new vs,this.clear_color=new D.a(1,1,1),this._prev_clear_color=new D.a,this._core_scene=new $j(this._scene);const s=3,r=4;this._processing_camera=new ot.a(this._resolution.x/-2,this._resolution.x/2,this._resolution.y/2,this._resolution.y/-2,-1e4,1e4),this._processing_camera.position.z=100,this._processing_scene.add(this._processing_camera);var o={minFilter:w.V,magFilter:w.V,format:w.ic};this._rtTextureDepth=new K(this._resolution.x,this._resolution.y,o),this._rtTextureColor=new K(this._resolution.x,this._resolution.y,o);var a=Xj;a||console.error(\\\\\\\"BokehPass relies on BokehShader\\\\\\\"),this.bokeh_uniforms=I.clone(a.uniforms),this.bokeh_uniforms.tColor.value=this._rtTextureColor.texture,this.bokeh_uniforms.tDepth.value=this._rtTextureDepth.texture,this.bokeh_uniforms.textureWidth.value=this._resolution.x,this.bokeh_uniforms.textureHeight.value=this._resolution.y,this.bokeh_material=new F({uniforms:this.bokeh_uniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,defines:{RINGS:s,SAMPLES:r}}),this._quad=new B.a(new L(this._resolution.x,this._resolution.y),this.bokeh_material),this._quad.position.z=-500,this._processing_scene.add(this._quad);var l=Yj;l||console.error(\\\\\\\"BokehPass relies on BokehDepthShader\\\\\\\"),this.materialDepth=new F({uniforms:l.uniforms,vertexShader:l.vertexShader,fragmentShader:l.fragmentShader}),this.materialDepthInstance=new F({uniforms:l.uniforms,vertexShader:\\\\\\\"#include <common>\\\\n\\\\nvec3 rotate_with_quat( vec3 v, vec4 q )\\\\n{\\\\n\\\\treturn v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\\\\n}\\\\n\\\\n\\\\nattribute vec4 instanceOrientation;\\\\nattribute vec3 instancePosition;\\\\nattribute vec3 instanceScale;\\\\nvarying float vViewZDepth;\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec3 v_POLYGON_instance_transform1_position = vec3(position);\\\\n\\\\tv_POLYGON_instance_transform1_position *= instanceScale;\\\\n\\\\tv_POLYGON_instance_transform1_position = rotate_with_quat( v_POLYGON_instance_transform1_position, instanceOrientation );\\\\n\\\\tv_POLYGON_instance_transform1_position += instancePosition;\\\\n\\\\t\\\\n\\\\t// replaces #include <begin_vertex>\\\\n\\\\tvec3 transformed = v_POLYGON_instance_transform1_position;\\\\n\\\\n\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tvViewZDepth = - mvPosition.z;\\\\n}\\\\\\\",fragmentShader:l.fragmentShader}),this.update_camera_uniforms_with_node(this._depth_of_field_node,this._camera)}setSize(t,e){this._rtTextureDepth.setSize(t,e),this._rtTextureColor.setSize(t,e),this.bokeh_uniforms.textureWidth.value=t,this.bokeh_uniforms.textureHeight.value=e}dispose(){this._rtTextureDepth.dispose(),this._rtTextureColor.dispose()}render(t,e,n){t.getClearColor(this._prev_clear_color),t.setClearColor(this.clear_color),t.clear(),t.setRenderTarget(this._rtTextureColor),t.clear(),t.render(this._scene,this._camera),t.setClearColor(0),this._core_scene.with_overriden_material(this.materialDepth,this.materialDepthInstance,this._camera_uniforms,(()=>{t.setRenderTarget(this._rtTextureDepth),t.clear(),t.render(this._scene,this._camera)})),t.setRenderTarget(null),t.clear(),t.render(this._processing_scene,this._processing_camera),t.setClearColor(this._prev_clear_color)}update_camera_uniforms_with_node(t,e){this.bokeh_uniforms.focalLength.value=e.getFocalLength(),this.bokeh_uniforms.znear.value=e.near,this.bokeh_uniforms.zfar.value=e.far;var n=Kj.smoothstep(e.near,e.far,t.pv.focalDepth),i=Kj.linearize(1-n,e.near,e.far);this.bokeh_uniforms.focalDepth.value=i,this._camera_uniforms={mNear:{value:e.near},mFar:{value:e.far}};for(let t of[this.materialDepth,this.materialDepthInstance])t.uniforms.mNear.value=this._camera_uniforms.mNear.value,t.uniforms.mFar.value=this._camera_uniforms.mFar.value}}const Zj=new class extends ua{constructor(){super(...arguments),this.focalDepth=ha.FLOAT(10,{range:[0,50],rangeLocked:[!0,!1],step:.001,...xj}),this.fStep=ha.FLOAT(10,{range:[.1,22],rangeLocked:[!0,!0],...xj}),this.maxBlur=ha.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],...xj}),this.vignetting=ha.BOOLEAN(0,{...xj}),this.depthBlur=ha.BOOLEAN(0,{...xj}),this.threshold=ha.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!0],step:.001,...xj}),this.gain=ha.FLOAT(1,{range:[0,100],rangeLocked:[!0,!0],step:.001,...xj}),this.bias=ha.FLOAT(1,{range:[0,3],rangeLocked:[!0,!0],step:.001,...xj}),this.fringe=ha.FLOAT(.7,{range:[0,5],rangeLocked:[!0,!1],step:.001,...xj}),this.noise=ha.BOOLEAN(0,{...xj}),this.dithering=ha.FLOAT(0,{range:[0,.001],rangeLocked:[!0,!0],step:1e-4,...xj}),this.pentagon=ha.BOOLEAN(0,{...xj}),this.rings=ha.INTEGER(3,{range:[1,8],rangeLocked:[!0,!0],...xj}),this.samples=ha.INTEGER(4,{range:[1,13],rangeLocked:[!0,!0],...xj}),this.clearColor=ha.COLOR([1,1,1],{...xj})}};class Kj extends bj{constructor(){super(...arguments),this.paramsConfig=Zj}static type(){return\\\\\\\"depthOfField\\\\\\\"}static saturate(t){return Math.max(0,Math.min(1,t))}static linearize(t,e,n){return-n*e/(t*(n-e)-n)}static smoothstep(t,e,n){var i=this.saturate((n-t)/(e-t));return i*i*(3-2*i)}_createPass(t){if(t.camera.isPerspectiveCamera){const e=t.camera_node;if(e){const n=new Jj(this,t.scene,e.object,t.resolution);this.updatePass(n);const i=new Mi(this.scene(),\\\\\\\"DOF\\\\\\\");return i.addGraphInput(e.p.near),i.addGraphInput(e.p.far),i.addGraphInput(e.p.fov),i.addGraphInput(this.p.focalDepth),i.addPostDirtyHook(\\\\\\\"post/DOF\\\\\\\",(()=>{this.update_pass_from_camera_node(n,e)})),n}}}update_pass_from_camera_node(t,e){t.update_camera_uniforms_with_node(this,e.object)}updatePass(t){t.bokeh_uniforms.fstop.value=this.pv.fStep,t.bokeh_uniforms.maxblur.value=this.pv.maxBlur,t.bokeh_uniforms.threshold.value=this.pv.threshold,t.bokeh_uniforms.gain.value=this.pv.gain,t.bokeh_uniforms.bias.value=this.pv.bias,t.bokeh_uniforms.fringe.value=this.pv.fringe,t.bokeh_uniforms.dithering.value=this.pv.dithering,t.bokeh_uniforms.noise.value=this.pv.noise?1:0,t.bokeh_uniforms.pentagon.value=this.pv.pentagon?1:0,t.bokeh_uniforms.vignetting.value=this.pv.vignetting?1:0,t.bokeh_uniforms.depthblur.value=this.pv.depthBlur?1:0,t.bokeh_uniforms.shaderFocus.value=0,t.bokeh_uniforms.showFocus.value=0,t.bokeh_uniforms.manualdof.value=0,t.bokeh_uniforms.focusCoords.value.set(.5,.5),t.bokeh_material.defines.RINGS=this.pv.rings,t.bokeh_material.defines.SAMPLES=this.pv.samples,t.bokeh_material.needsUpdate=!0,t.clear_color.copy(this.pv.clearColor)}}const Qj={uniforms:{tDiffuse:{value:null},tSize:{value:new d.a(256,256)},center:{value:new d.a(.5,.5)},angle:{value:1.57},scale:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform vec2 center;\\\\n\\\\t\\\\tuniform float angle;\\\\n\\\\t\\\\tuniform float scale;\\\\n\\\\t\\\\tuniform vec2 tSize;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tfloat pattern() {\\\\n\\\\n\\\\t\\\\t\\\\tfloat s = sin( angle ), c = cos( angle );\\\\n\\\\n\\\\t\\\\t\\\\tvec2 tex = vUv * tSize - center;\\\\n\\\\t\\\\t\\\\tvec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * scale;\\\\n\\\\n\\\\t\\\\t\\\\treturn ( sin( point.x ) * sin( point.y ) ) * 4.0;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 color = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tfloat average = ( color.r + color.g + color.b ) / 3.0;\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( vec3( average * 10.0 - 5.0 + pattern() ), color.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const tW=new class extends ua{constructor(){super(...arguments),this.center=ha.VECTOR2([.5,.5],{...xj}),this.angle=ha.FLOAT(\\\\\\\"$PI*0.5\\\\\\\",{range:[0,10],rangeLocked:[!1,!1],...xj}),this.scale=ha.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],...xj})}};class eW extends bj{constructor(){super(...arguments),this.paramsConfig=tW}static type(){return\\\\\\\"dotScreen\\\\\\\"}_createPass(t){const e=new Hm(Qj);return this.updatePass(e),e}updatePass(t){t.uniforms.center.value=this.pv.center,t.uniforms.angle.value=this.pv.angle,t.uniforms.scale.value=this.pv.scale}}const nW={uniforms:{tDiffuse:{value:null},time:{value:0},nIntensity:{value:.5},sIntensity:{value:.05},sCount:{value:4096},grayscale:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t// control parameter\\\\n\\\\t\\\\tuniform float time;\\\\n\\\\n\\\\t\\\\tuniform bool grayscale;\\\\n\\\\n\\\\t\\\\t// noise effect intensity value (0 = no effect, 1 = full effect)\\\\n\\\\t\\\\tuniform float nIntensity;\\\\n\\\\n\\\\t\\\\t// scanlines effect intensity value (0 = no effect, 1 = full effect)\\\\n\\\\t\\\\tuniform float sIntensity;\\\\n\\\\n\\\\t\\\\t// scanlines effect count value (0 = no effect, 4096 = full effect)\\\\n\\\\t\\\\tuniform float sCount;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t// sample the source\\\\n\\\\t\\\\t\\\\tvec4 cTextureScreen = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t// make some noise\\\\n\\\\t\\\\t\\\\tfloat dx = rand( vUv + time );\\\\n\\\\n\\\\t\\\\t// add noise\\\\n\\\\t\\\\t\\\\tvec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx, 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t// get us a sine and cosine\\\\n\\\\t\\\\t\\\\tvec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );\\\\n\\\\n\\\\t\\\\t// add scanlines\\\\n\\\\t\\\\t\\\\tcResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;\\\\n\\\\n\\\\t\\\\t// interpolate between source and result by intensity\\\\n\\\\t\\\\t\\\\tcResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );\\\\n\\\\n\\\\t\\\\t// convert to grayscale if desired\\\\n\\\\t\\\\t\\\\tif( grayscale ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor =  vec4( cResult, cTextureScreen.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class iW extends km{constructor(t,e,n,i){super(),void 0===nW&&console.error(\\\\\\\"THREE.FilmPass relies on FilmShader\\\\\\\");const s=nW;this.uniforms=I.clone(s.uniforms),this.material=new F({uniforms:this.uniforms,vertexShader:s.vertexShader,fragmentShader:s.fragmentShader}),void 0!==i&&(this.uniforms.grayscale.value=i),void 0!==t&&(this.uniforms.nIntensity.value=t),void 0!==e&&(this.uniforms.sIntensity.value=e),void 0!==n&&(this.uniforms.sCount.value=n),this.fsQuad=new Vm(this.material)}render(t,e,n,i){this.uniforms.tDiffuse.value=n.texture,this.uniforms.time.value+=i,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(),this.fsQuad.render(t))}}const sW=new class extends ua{constructor(){super(...arguments),this.noiseIntensity=ha.FLOAT(.5,{range:[0,1],rangeLocked:[!1,!1],...xj}),this.scanlinesIntensity=ha.FLOAT(.05,{range:[0,1],rangeLocked:[!0,!1],...xj}),this.scanlinesCount=ha.FLOAT(4096,{range:[0,4096],rangeLocked:[!0,!1],...xj}),this.grayscale=ha.BOOLEAN(1,{...xj})}};class rW extends bj{constructor(){super(...arguments),this.paramsConfig=sW}static type(){return\\\\\\\"film\\\\\\\"}_createPass(t){const e=new iW(this.pv.noiseIntensity,this.pv.scanlinesIntensity,this.pv.scanlinesCount,this.pv.grayscale?1:0);return this.updatePass(e),e}updatePass(t){t.uniforms.nIntensity.value=this.pv.noiseIntensity,t.uniforms.sIntensity.value=this.pv.scanlinesIntensity,t.uniforms.sCount.value=this.pv.scanlinesCount,t.uniforms.grayscale.value=this.pv.grayscale?1:0}}const oW={uniforms:{tDiffuse:{value:null},resolution:{value:new d.a(1/1024,1/512)}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:'\\\\n\\\\n\\\\t\\\\tprecision highp float;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tuniform vec2 resolution;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\t#define FXAA_PC 1\\\\n\\\\t\\\\t#define FXAA_GLSL_100 1\\\\n\\\\t\\\\t#define FXAA_QUALITY_PRESET 12\\\\n\\\\n\\\\t\\\\t#define FXAA_GREEN_AS_LUMA 1\\\\n\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_PC_CONSOLE\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// The console algorithm for PC is included\\\\n\\\\t\\\\t\\\\t\\\\t// for developers targeting really low spec machines.\\\\n\\\\t\\\\t\\\\t\\\\t// Likely better to just run FXAA_PC, and use a really low preset.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_PC_CONSOLE 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_GLSL_120\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_GLSL_120 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_GLSL_130\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_GLSL_130 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_HLSL_3\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_HLSL_3 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_HLSL_4\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_HLSL_4 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_HLSL_5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_HLSL_5 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*==========================================================================*/\\\\n\\\\t\\\\t#ifndef FXAA_GREEN_AS_LUMA\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// For those using non-linear color,\\\\n\\\\t\\\\t\\\\t\\\\t// and either not able to get luma in alpha, or not wanting to,\\\\n\\\\t\\\\t\\\\t\\\\t// this enables FXAA to run using green as a proxy for luma.\\\\n\\\\t\\\\t\\\\t\\\\t// So with this enabled, no need to pack luma in alpha.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// This will turn off AA on anything which lacks some amount of green.\\\\n\\\\t\\\\t\\\\t\\\\t// Pure red and blue or combination of only R and B, will get no AA.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Might want to lower the settings for both,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\tfxaaConsoleEdgeThresholdMin\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\tfxaaQualityEdgeThresholdMin\\\\n\\\\t\\\\t\\\\t\\\\t// In order to insure AA does not get turned off on colors\\\\n\\\\t\\\\t\\\\t\\\\t// which contain a minor amount of green.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = On.\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = Off.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_GREEN_AS_LUMA 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_EARLY_EXIT\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Controls algorithm\\\\'s early exit path.\\\\n\\\\t\\\\t\\\\t\\\\t// On PS3 turning this ON adds 2 cycles to the shader.\\\\n\\\\t\\\\t\\\\t\\\\t// On 360 turning this OFF adds 10ths of a millisecond to the shader.\\\\n\\\\t\\\\t\\\\t\\\\t// Turning this off on console will result in a more blurry image.\\\\n\\\\t\\\\t\\\\t\\\\t// So this defaults to on.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = On.\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = Off.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_EARLY_EXIT 1\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_DISCARD\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only valid for PC OpenGL currently.\\\\n\\\\t\\\\t\\\\t\\\\t// Probably will not work when FXAA_GREEN_AS_LUMA = 1.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = Use discard on pixels which don\\\\'t need AA.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\t For APIs which enable concurrent TEX+ROP from same surface.\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = Return unchanged color on pixels which don\\\\'t need AA.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_DISCARD 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_FAST_PIXEL_OFFSET\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Used for GLSL 120 only.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = GL API supports fast pixel offsets\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = do not use fast pixel offsets\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_EXT_gpu_shader4\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_FAST_PIXEL_OFFSET 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_NV_gpu_shader5\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_FAST_PIXEL_OFFSET 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_ARB_gpu_shader5\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_FAST_PIXEL_OFFSET 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifndef FXAA_FAST_PIXEL_OFFSET\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_FAST_PIXEL_OFFSET 0\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_GATHER4_ALPHA\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = API supports gather4 on alpha channel.\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = API does not support gather4 on alpha channel.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_HLSL_5 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_GATHER4_ALPHA 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_ARB_gpu_shader5\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_GATHER4_ALPHA 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_NV_gpu_shader5\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_GATHER4_ALPHA 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifndef FXAA_GATHER4_ALPHA\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_GATHER4_ALPHA 0\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFXAA QUALITY - TUNING KNOBS\\\\n\\\\t\\\\t------------------------------------------------------------------------------\\\\n\\\\t\\\\tNOTE the other tuning knobs are now in the shader function inputs!\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#ifndef FXAA_QUALITY_PRESET\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Choose the quality preset.\\\\n\\\\t\\\\t\\\\t\\\\t// This needs to be compiled into the shader as it effects code.\\\\n\\\\t\\\\t\\\\t\\\\t// Best option to include multiple presets is to\\\\n\\\\t\\\\t\\\\t\\\\t// in each shader define the preset, then include this file.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// OPTIONS\\\\n\\\\t\\\\t\\\\t\\\\t// -----------------------------------------------------------------------\\\\n\\\\t\\\\t\\\\t\\\\t// 10 to 15 - default medium dither (10=fastest, 15=highest quality)\\\\n\\\\t\\\\t\\\\t\\\\t// 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\\\\n\\\\t\\\\t\\\\t\\\\t// 39\\\\t\\\\t\\\\t - no dither, very expensive\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// NOTES\\\\n\\\\t\\\\t\\\\t\\\\t// -----------------------------------------------------------------------\\\\n\\\\t\\\\t\\\\t\\\\t// 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\\\\n\\\\t\\\\t\\\\t\\\\t// 13 = about same speed as FXAA 3.9 and better than 12\\\\n\\\\t\\\\t\\\\t\\\\t// 23 = closest to FXAA 3.9 visually and performance wise\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t_ = the lowest digit is directly related to performance\\\\n\\\\t\\\\t\\\\t\\\\t// _\\\\t= the highest digit is directly related to style\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PRESET 12\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA QUALITY - PRESETS\\\\n\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA QUALITY - MEDIUM DITHER PRESETS\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 10)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 3\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 3.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 11)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 4\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 3.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 12)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 13)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 6\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 14)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 7\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 15)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 8\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA QUALITY - LOW DITHER PRESETS\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 20)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 3\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 21)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 4\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 22)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 23)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 6\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 24)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 7\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 3.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 25)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 8\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 26)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 9\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 27)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 10\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P9 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 28)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 11\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P9 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P10 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 29)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 12\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P9 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P10 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P11 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA QUALITY - EXTREME QUALITY\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 39)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 12\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P9 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P10 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P11 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tAPI PORTING\\\\n\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaBool bool\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaDiscard discard\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat float\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat2 vec2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat3 vec3\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat4 vec4\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf float\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf2 vec2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf3 vec3\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf4 vec4\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaInt2 ivec2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaSat(x) clamp(x, 0.0, 1.0)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTex sampler2D\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaBool bool\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaDiscard clip(-1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat float\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat2 float2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat3 float3\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat4 float4\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf half\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf2 half2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf3 half3\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf4 half4\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaSat(x) saturate(x)\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_GLSL_100 == 1)\\\\n\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) texture2D(t, p, 0.0)\\\\n\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_GLSL_120 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t// Requires,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t#version 120\\\\n\\\\t\\\\t\\\\t\\\\t// And at least,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t#extension GL_EXT_gpu_shader4 : enable\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t(or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_FAST_PIXEL_OFFSET == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\\\\n\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_GATHER4_ALPHA == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t// use #extension GL_ARB_gpu_shader5 : enable\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexGreen4(t, p) textureGather(t, p, 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_GLSL_130 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t// Requires \\\\\\\"#version 130\\\\\\\" or better\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) textureLod(t, p, 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_GATHER4_ALPHA == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t// use #extension GL_ARB_gpu_shader5 : enable\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexGreen4(t, p) textureGather(t, p, 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_HLSL_3 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaInt2 float2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTex sampler2D\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_HLSL_4 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaInt2 int2\\\\n\\\\t\\\\t\\\\t\\\\tstruct FxaaTex { SamplerState smpl; Texture2D tex; };\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_HLSL_5 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaInt2 int2\\\\n\\\\t\\\\t\\\\t\\\\tstruct FxaaTex { SamplerState smpl; Texture2D tex; };\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t GREEN AS LUMA OPTION SUPPORT FUNCTION\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA3 QUALITY - PC\\\\n\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_PC == 1)\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\tFxaaFloat4 FxaaPixelShader(\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Use noperspective interpolation here (turn off perspective interpolation).\\\\n\\\\t\\\\t\\\\t\\\\t// {xy} = center of pixel\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 pos,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Used only for FXAA Console, and not used on the 360 version.\\\\n\\\\t\\\\t\\\\t\\\\t// Use noperspective interpolation here (turn off perspective interpolation).\\\\n\\\\t\\\\t\\\\t\\\\t// {xy_} = upper left of pixel\\\\n\\\\t\\\\t\\\\t\\\\t// {_zw} = lower right of pixel\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsolePosPos,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Input color texture.\\\\n\\\\t\\\\t\\\\t\\\\t// {rgb_} = color in linear or perceptual color space\\\\n\\\\t\\\\t\\\\t\\\\t// if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\t {__a} = luma in perceptual color space (not linear)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaTex tex,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on the optimized 360 version of FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// For everything but 360, just use the same input here as for \\\\\\\"tex\\\\\\\".\\\\n\\\\t\\\\t\\\\t\\\\t// For 360, same texture, just alias with a 2nd sampler.\\\\n\\\\t\\\\t\\\\t\\\\t// This sampler needs to have an exponent bias of -1.\\\\n\\\\t\\\\t\\\\t\\\\tFxaaTex fxaaConsole360TexExpBiasNegOne,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on the optimized 360 version of FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// For everything but 360, just use the same input here as for \\\\\\\"tex\\\\\\\".\\\\n\\\\t\\\\t\\\\t\\\\t// For 360, same texture, just alias with a 3nd sampler.\\\\n\\\\t\\\\t\\\\t\\\\t// This sampler needs to have an exponent bias of -2.\\\\n\\\\t\\\\t\\\\t\\\\tFxaaTex fxaaConsole360TexExpBiasNegTwo,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Quality.\\\\n\\\\t\\\\t\\\\t\\\\t// This must be from a constant/uniform.\\\\n\\\\t\\\\t\\\\t\\\\t// {x_} = 1.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_y} = 1.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 fxaaQualityRcpFrame,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// This must be from a constant/uniform.\\\\n\\\\t\\\\t\\\\t\\\\t// This effects sub-pixel AA quality and inversely sharpness.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Where N ranges between,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\t N = 0.50 (default)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\t N = 0.33 (sharper)\\\\n\\\\t\\\\t\\\\t\\\\t// {x__} = -N/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_y_} = -N/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_z_} =\\\\tN/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {__w} =\\\\tN/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsoleRcpFrameOpt,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// Not used on 360, but used on PS3 and PC.\\\\n\\\\t\\\\t\\\\t\\\\t// This must be from a constant/uniform.\\\\n\\\\t\\\\t\\\\t\\\\t// {x__} = -2.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_y_} = -2.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_z_} =\\\\t2.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {__w} =\\\\t2.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsoleRcpFrameOpt2,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\\\\n\\\\t\\\\t\\\\t\\\\t// This must be from a constant/uniform.\\\\n\\\\t\\\\t\\\\t\\\\t// {x__} =\\\\t8.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_y_} =\\\\t8.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_z_} = -4.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {__w} = -4.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsole360RcpFrameOpt2,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Quality.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_QUALITY_SUBPIX define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// Choose the amount of sub-pixel aliasing removal.\\\\n\\\\t\\\\t\\\\t\\\\t// This can effect sharpness.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 1.00 - upper limit (softer)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.75 - default amount of filtering\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.25 - almost off\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.00 - completely off\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaQualitySubpix,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Quality.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// The minimum amount of local contrast required to apply algorithm.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.333 - too little (faster)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.250 - low quality\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.166 - default\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.125 - high quality\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.063 - overkill (slower)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaQualityEdgeThreshold,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Quality.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// Trims the algorithm from processing darks.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.0833 - upper limit (default, the start of visible unfiltered edges)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.0625 - high quality (faster)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.0312 - visible limit (slower)\\\\n\\\\t\\\\t\\\\t\\\\t// Special notes when using FXAA_GREEN_AS_LUMA,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Likely want to set this to zero.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t As colors that are mostly not-green\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t will appear very dark in the green channel!\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Tune by looking at mostly non-green content,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t then start at zero and increase until aliasing is a problem.\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaQualityEdgeThresholdMin,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// This does not effect PS3, as this needs to be compiled in.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Due to the PS3 being ALU bound,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t there are only three safe values here: 2 and 4 and 8.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t These options use the shaders ability to a free *|/ by 2|4|8.\\\\n\\\\t\\\\t\\\\t\\\\t// For all other platforms can be a non-power of two.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 8.0 is sharper (default!!!)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 4.0 is softer\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 2.0 is really soft (good only for vector graphics inputs)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaConsoleEdgeSharpness,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// This does not effect PS3, as this needs to be compiled in.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Due to the PS3 being ALU bound,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t there are only two safe values here: 1/4 and 1/8.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t These options use the shaders ability to a free *|/ by 2|4|8.\\\\n\\\\t\\\\t\\\\t\\\\t// The console setting has a different mapping than the quality setting.\\\\n\\\\t\\\\t\\\\t\\\\t// Other platforms can use other values.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.125 leaves less aliasing, but is softer (default!!!)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.25 leaves more aliasing, and is sharper\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaConsoleEdgeThreshold,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// Trims the algorithm from processing darks.\\\\n\\\\t\\\\t\\\\t\\\\t// The console setting has a different mapping than the quality setting.\\\\n\\\\t\\\\t\\\\t\\\\t// This only applies when FXAA_EARLY_EXIT is 1.\\\\n\\\\t\\\\t\\\\t\\\\t// This does not apply to PS3,\\\\n\\\\t\\\\t\\\\t\\\\t// PS3 was simplified to avoid more shader instructions.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.06 - faster but more aliasing in darks\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.05 - default\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.04 - slower and less aliasing in darks\\\\n\\\\t\\\\t\\\\t\\\\t// Special notes when using FXAA_GREEN_AS_LUMA,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Likely want to set this to zero.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t As colors that are mostly not-green\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t will appear very dark in the green channel!\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Tune by looking at mostly non-green content,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t then start at zero and increase until aliasing is a problem.\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaConsoleEdgeThresholdMin,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Extra constants for 360 FXAA Console only.\\\\n\\\\t\\\\t\\\\t\\\\t// Use zeros or anything else for other platforms.\\\\n\\\\t\\\\t\\\\t\\\\t// These must be in physical constant registers and NOT immediates.\\\\n\\\\t\\\\t\\\\t\\\\t// Immediates will result in compiler un-optimizing.\\\\n\\\\t\\\\t\\\\t\\\\t// {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsole360ConstDir\\\\n\\\\t\\\\t) {\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 posM;\\\\n\\\\t\\\\t\\\\t\\\\tposM.x = pos.x;\\\\n\\\\t\\\\t\\\\t\\\\tposM.y = pos.y;\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_GATHER4_ALPHA == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_DISCARD == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM rgbyM.w\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM rgbyM.y\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_DISCARD == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM luma4A.w\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaE luma4A.z\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaS luma4A.x\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaSE luma4A.y\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaNW luma4B.w\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaN luma4B.z\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaW luma4B.x\\\\n\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM rgbyM.w\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM rgbyM.y\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GLSL_100 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat maxSM = max(lumaS, lumaM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat minSM = min(lumaS, lumaM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat maxESM = max(lumaE, maxSM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat minESM = min(lumaE, minSM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat maxWN = max(lumaN, lumaW);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat minWN = min(lumaN, lumaW);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat rangeMax = max(maxWN, maxESM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat rangeMin = min(minWN, minESM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat range = rangeMax - rangeMin;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool earlyExit = range < rangeMaxClamped;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tif(earlyExit)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_DISCARD == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaDiscard;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treturn rgbyM;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_GATHER4_ALPHA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GLSL_100 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNS = lumaN + lumaS;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaWE = lumaW + lumaE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixRcpRange = 1.0/range;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixNSWE = lumaNS + lumaWE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNESE = lumaNE + lumaSE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNWNE = lumaNW + lumaNE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNWSW = lumaNW + lumaSW;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSWSE = lumaSW + lumaSE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lengthSign = fxaaQualityRcpFrame.x;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool horzSpan = edgeHorz >= edgeVert;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) lumaN = lumaW;\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) lumaS = lumaE;\\\\n\\\\t\\\\t\\\\t\\\\tif(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat gradientN = lumaN - lumaM;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat gradientS = lumaS - lumaM;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNN = lumaN + lumaM;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSS = lumaS + lumaM;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool pairN = abs(gradientN) >= abs(gradientS);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat gradient = max(abs(gradientN), abs(gradientS));\\\\n\\\\t\\\\t\\\\t\\\\tif(pairN) lengthSign = -lengthSign;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 posB;\\\\n\\\\t\\\\t\\\\t\\\\tposB.x = posM.x;\\\\n\\\\t\\\\t\\\\t\\\\tposB.y = posM.y;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 offNP;\\\\n\\\\t\\\\t\\\\t\\\\toffNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\\\\n\\\\t\\\\t\\\\t\\\\toffNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) posB.x += lengthSign * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tif( horzSpan) posB.y += lengthSign * 0.5;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 posN;\\\\n\\\\t\\\\t\\\\t\\\\tposN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\\\\n\\\\t\\\\t\\\\t\\\\tposN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 posP;\\\\n\\\\t\\\\t\\\\t\\\\tposP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\\\\n\\\\t\\\\t\\\\t\\\\tposP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixE = subpixC * subpixC;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tif(!pairN) lumaNN = lumaSS;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat gradientScaled = gradient * 1.0/4.0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaMM = lumaM - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixF = subpixD * subpixE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool lumaMLTZero = lumaMM < 0.0;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tlumaEndN -= lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tlumaEndP -= lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool doneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool doneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\\\\n\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool doneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\\\\n\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 4)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 5)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 6)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 7)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 8)\\\\n\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 9)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 10)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 11)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 12)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat dstN = posM.x - posN.x;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat dstP = posP.x - posM.x;\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) dstN = posM.y - posN.y;\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) dstP = posP.y - posM.y;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat spanLength = (dstP + dstN);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat spanLengthRcp = 1.0/spanLength;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool directionN = dstN < dstP;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat dst = min(dstN, dstP);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixG = subpixF * subpixF;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixH = subpixG * fxaaQualitySubpix;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\\\\n\\\\t\\\\t\\\\t\\\\tif( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_DISCARD == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treturn FxaaTexTop(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treturn FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t/*==========================================================================*/\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\tgl_FragColor = FxaaPixelShader(\\\\n\\\\t\\\\t\\\\t\\\\tvUv,\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0),\\\\n\\\\t\\\\t\\\\t\\\\ttDiffuse,\\\\n\\\\t\\\\t\\\\t\\\\ttDiffuse,\\\\n\\\\t\\\\t\\\\t\\\\ttDiffuse,\\\\n\\\\t\\\\t\\\\t\\\\tresolution,\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0),\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0),\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0),\\\\n\\\\t\\\\t\\\\t\\\\t0.75,\\\\n\\\\t\\\\t\\\\t\\\\t0.166,\\\\n\\\\t\\\\t\\\\t\\\\t0.0833,\\\\n\\\\t\\\\t\\\\t\\\\t0.0,\\\\n\\\\t\\\\t\\\\t\\\\t0.0,\\\\n\\\\t\\\\t\\\\t\\\\t0.0,\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\n\\\\t\\\\t\\\\t// TODO avoid querying texture twice for same texel\\\\n\\\\t\\\\t\\\\tgl_FragColor.a = texture2D(tDiffuse, vUv).a;\\\\n\\\\t\\\\t}'};const aW=new class extends ua{constructor(){super(...arguments),this.transparent=ha.BOOLEAN(1,xj)}};class lW extends bj{constructor(){super(...arguments),this.paramsConfig=aW}static type(){return\\\\\\\"FXAA\\\\\\\"}_createPass(t){const e=new Hm(oW);return e.uniforms.resolution.value.set(1/t.resolution.x,1/t.resolution.y),e.material.transparent=!0,this.updatePass(e),e}updatePass(t){t.material.transparent=this.pv.transparent}}const cW={uniforms:{tDiffuse:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 tex = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = LinearTosRGB( tex ); // optional: LinearToGamma( tex, float( GAMMA_FACTOR ) );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const hW=new class extends ua{};class uW extends bj{constructor(){super(...arguments),this.paramsConfig=hW}static type(){return\\\\\\\"gammaCorrection\\\\\\\"}_createPass(t){const e=new Hm(cW);return this.updatePass(e),e}updatePass(t){}}const dW=new class extends ua{constructor(){super(...arguments),this.amount=ha.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],step:.01,...xj}),this.transparent=ha.BOOLEAN(1,xj)}};class pW extends bj{constructor(){super(...arguments),this.paramsConfig=dW}static type(){return\\\\\\\"horizontalBlur\\\\\\\"}_createPass(t){const e=new Hm(CG);return e.resolution_x=t.resolution.x,this.updatePass(e),e}updatePass(t){t.uniforms.h.value=this.pv.amount/(t.resolution_x*window.devicePixelRatio),t.material.transparent=this.pv.transparent}}const _W=new class extends ua{constructor(){super(...arguments),this.map=ha.OPERATOR_PATH(vi.UV,{nodeSelection:{context:ts.COP},...xj}),this.darkness=ha.FLOAT(0,{range:[0,2],rangeLocked:[!0,!1],...xj}),this.offset=ha.FLOAT(0,{range:[0,2],rangeLocked:[!0,!1],...xj})}};class mW extends bj{constructor(){super(...arguments),this.paramsConfig=_W}static type(){return\\\\\\\"image\\\\\\\"}static _create_shader(){return{uniforms:{tDiffuse:{value:null},map:{value:null},offset:{value:1},darkness:{value:1}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\nvoid main() {\\\\n\\\\tvUv = uv;\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n}\\\\\\\",fragmentShader:\\\\\\\"uniform float offset;\\\\nuniform float darkness;\\\\nuniform sampler2D tDiffuse;\\\\nuniform sampler2D map;\\\\nvarying vec2 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\tvec4 map_val = texture2D( map, vUv );\\\\n\\\\tvec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );\\\\n\\\\t// gl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );\\\\n\\\\tgl_FragColor = vec4( mix( texel.rgb, map_val.rgb, map_val.a ), texel.a );\\\\n\\\\n}\\\\n\\\\\\\"}}_createPass(t){const e=new Hm(mW._create_shader());return this.updatePass(e),e}updatePass(t){t.uniforms.darkness.value=this.pv.darkness,t.uniforms.offset.value=this.pv.offset,this._update_map(t)}async _update_map(t){this.p.map.isDirty()&&await this.p.map.compute();const e=this.p.map.found_node();if(e)if(e.context()==ts.COP){const n=e,i=(await n.compute()).coreContent();t.uniforms.map.value=i}else this.states.error.set(\\\\\\\"node is not COP\\\\\\\");else this.states.error.set(\\\\\\\"no map found\\\\\\\")}}const fW={tDiffuse:{value:null},texture1:{value:null},texture2:{value:null},h:{value:1/512}},gW=\\\\\\\"varying vec2 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvUv = uv;\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n}\\\\\\\",vW=\\\\\\\"uniform sampler2D texture1;\\\\nuniform sampler2D texture2;\\\\nvarying vec2 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 t1 = texture2D( texture1, vUv);\\\\n\\\\tvec4 t2 = texture2D( texture2, vUv);\\\\n\\\\n\\\\tvec3 c1 = t1.rgb * t1.a * (1.0-t2.a);\\\\n\\\\tvec3 c2 = t2.rgb * t2.a;\\\\n\\\\tfloat a = t2.a + t1.a;\\\\n\\\\tvec3 c = max(c1,c2);\\\\n\\\\n\\\\tgl_FragColor = vec4(c,a);\\\\n\\\\n}\\\\\\\";class yW extends km{constructor(t,e){super(),this._composer1=t,this._composer2=e,this.uniforms=I.clone(fW),this.material=new F({uniforms:this.uniforms,vertexShader:gW,fragmentShader:vW,transparent:!0}),this.fsQuad=new Vm(this.material)}render(t,e){this._composer1.render(),this._composer2.render(),this.uniforms.texture1.value=this._composer1.readBuffer.texture,this.uniforms.texture2.value=this._composer2.readBuffer.texture,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this.fsQuad.render(t))}}const xW=new class extends ua{};class bW extends bj{constructor(){super(...arguments),this.paramsConfig=xW}static type(){return\\\\\\\"layer\\\\\\\"}initializeNode(){super.initializeNode(),this.io.inputs.setCount(2)}setupComposer(t){const e=t.composer.renderer,n={minFilter:w.V,magFilter:w.V,format:w.Ib,stencilBuffer:!0},i=li.renderersController.renderTarget(e.domElement.offsetWidth,e.domElement.offsetHeight,n),s=li.renderersController.renderTarget(e.domElement.offsetWidth,e.domElement.offsetHeight,n),r=new qm(e,i),o=new qm(e,s);r.renderToScreen=!1,o.renderToScreen=!1;const a={...t},l={...t};a.composer=r,l.composer=o,this._addPassFromInput(0,a),this._addPassFromInput(1,l);const c=new yW(r,o);this.updatePass(c),t.composer.addPass(c)}updatePass(t){}}const wW=new class extends ua{constructor(){super(...arguments),this.overrideScene=ha.BOOLEAN(0,xj),this.scene=ha.OPERATOR_PATH(\\\\\\\"/scene1\\\\\\\",{visibleIf:{overrideScene:1},nodeSelection:{context:ts.OBJ,types:[WV.type()]},...xj}),this.overrideCamera=ha.BOOLEAN(0,xj),this.camera=ha.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{visibleIf:{overrideCamera:1},nodeSelection:{context:ts.OBJ},...xj}),this.inverse=ha.BOOLEAN(0,xj)}};class TW extends bj{constructor(){super(...arguments),this.paramsConfig=wW}static type(){return\\\\\\\"mask\\\\\\\"}_createPass(t){const e=new jm(t.scene,t.camera);return e.context={scene:t.scene,camera:t.camera},this.updatePass(e),e}updatePass(t){t.inverse=this.pv.inverse,this._update_scene(t),this._updateCamera(t)}async _update_scene(t){if(this.pv.overrideScene){this.p.scene.isDirty()&&await this.p.scene.compute();const e=this.p.scene.found_node_with_expected_type();if(e)return void(t.scene=e.object)}t.scene=t.context.scene}async _updateCamera(t){if(this.pv.overrideCamera){this.p.camera.isDirty()&&await this.p.camera.compute();const e=this.p.camera.found_node_with_expected_type();if(e)return void(t.camera=e.object)}t.camera=t.context.camera}}const AW=new class extends ua{};class MW extends bj{constructor(){super(...arguments),this.paramsConfig=AW}static type(){return\\\\\\\"null\\\\\\\"}}class EW extends km{constructor(t,e,n,i){super(),this.renderScene=e,this.renderCamera=n,this.selectedObjects=void 0!==i?i:[],this.visibleEdgeColor=new D.a(1,1,1),this.hiddenEdgeColor=new D.a(.1,.04,.02),this.edgeGlow=0,this.usePatternTexture=!1,this.edgeThickness=1,this.edgeStrength=3,this.downSampleRatio=2,this.pulsePeriod=0,this._visibilityCache=new Map,this.resolution=void 0!==t?new d.a(t.x,t.y):new d.a(256,256);const s={minFilter:w.V,magFilter:w.V,format:w.Ib},r=Math.round(this.resolution.x/this.downSampleRatio),o=Math.round(this.resolution.y/this.downSampleRatio);this.maskBufferMaterial=new lt.a({color:16777215}),this.maskBufferMaterial.side=w.z,this.renderTargetMaskBuffer=new K(this.resolution.x,this.resolution.y,s),this.renderTargetMaskBuffer.texture.name=\\\\\\\"OutlinePass.mask\\\\\\\",this.renderTargetMaskBuffer.texture.generateMipmaps=!1,this.depthMaterial=new Sn,this.depthMaterial.side=w.z,this.depthMaterial.depthPacking=w.Hb,this.depthMaterial.blending=w.ub,this.prepareMaskMaterial=this.getPrepareMaskMaterial(),this.prepareMaskMaterial.side=w.z,this.prepareMaskMaterial.fragmentShader=function(t,e){var n=e.isPerspectiveCamera?\\\\\\\"perspective\\\\\\\":\\\\\\\"orthographic\\\\\\\";return t.replace(/DEPTH_TO_VIEW_Z/g,n+\\\\\\\"DepthToViewZ\\\\\\\")}(this.prepareMaskMaterial.fragmentShader,this.renderCamera),this.renderTargetDepthBuffer=new K(this.resolution.x,this.resolution.y,s),this.renderTargetDepthBuffer.texture.name=\\\\\\\"OutlinePass.depth\\\\\\\",this.renderTargetDepthBuffer.texture.generateMipmaps=!1,this.renderTargetMaskDownSampleBuffer=new K(r,o,s),this.renderTargetMaskDownSampleBuffer.texture.name=\\\\\\\"OutlinePass.depthDownSample\\\\\\\",this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps=!1,this.renderTargetBlurBuffer1=new K(r,o,s),this.renderTargetBlurBuffer1.texture.name=\\\\\\\"OutlinePass.blur1\\\\\\\",this.renderTargetBlurBuffer1.texture.generateMipmaps=!1,this.renderTargetBlurBuffer2=new K(Math.round(r/2),Math.round(o/2),s),this.renderTargetBlurBuffer2.texture.name=\\\\\\\"OutlinePass.blur2\\\\\\\",this.renderTargetBlurBuffer2.texture.generateMipmaps=!1,this.edgeDetectionMaterial=this.getEdgeDetectionMaterial(),this.renderTargetEdgeBuffer1=new K(r,o,s),this.renderTargetEdgeBuffer1.texture.name=\\\\\\\"OutlinePass.edge1\\\\\\\",this.renderTargetEdgeBuffer1.texture.generateMipmaps=!1,this.renderTargetEdgeBuffer2=new K(Math.round(r/2),Math.round(o/2),s),this.renderTargetEdgeBuffer2.texture.name=\\\\\\\"OutlinePass.edge2\\\\\\\",this.renderTargetEdgeBuffer2.texture.generateMipmaps=!1;this.separableBlurMaterial1=this.getSeperableBlurMaterial(4),this.separableBlurMaterial1.uniforms.texSize.value.set(r,o),this.separableBlurMaterial1.uniforms.kernelRadius.value=1,this.separableBlurMaterial2=this.getSeperableBlurMaterial(4),this.separableBlurMaterial2.uniforms.texSize.value.set(Math.round(r/2),Math.round(o/2)),this.separableBlurMaterial2.uniforms.kernelRadius.value=4,this.overlayMaterial=this.getOverlayMaterial(),void 0===zm&&console.error(\\\\\\\"THREE.OutlinePass relies on CopyShader\\\\\\\");const a=zm;this.copyUniforms=I.clone(a.uniforms),this.copyUniforms.opacity.value=1,this.materialCopy=new F({uniforms:this.copyUniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,blending:w.ub,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this._oldClearColor=new D.a,this.oldClearAlpha=1,this.fsQuad=new Vm(null),this.tempPulseColor1=new D.a,this.tempPulseColor2=new D.a,this.textureMatrix=new A.a}dispose(){this.renderTargetMaskBuffer.dispose(),this.renderTargetDepthBuffer.dispose(),this.renderTargetMaskDownSampleBuffer.dispose(),this.renderTargetBlurBuffer1.dispose(),this.renderTargetBlurBuffer2.dispose(),this.renderTargetEdgeBuffer1.dispose(),this.renderTargetEdgeBuffer2.dispose()}setSize(t,e){this.renderTargetMaskBuffer.setSize(t,e),this.renderTargetDepthBuffer.setSize(t,e);let n=Math.round(t/this.downSampleRatio),i=Math.round(e/this.downSampleRatio);this.renderTargetMaskDownSampleBuffer.setSize(n,i),this.renderTargetBlurBuffer1.setSize(n,i),this.renderTargetEdgeBuffer1.setSize(n,i),this.separableBlurMaterial1.uniforms.texSize.value.set(n,i),n=Math.round(n/2),i=Math.round(i/2),this.renderTargetBlurBuffer2.setSize(n,i),this.renderTargetEdgeBuffer2.setSize(n,i),this.separableBlurMaterial2.uniforms.texSize.value.set(n,i)}changeVisibilityOfSelectedObjects(t){const e=this._visibilityCache;function n(n){n.isMesh&&(!0===t?n.visible=e.get(n):(e.set(n,n.visible),n.visible=t))}for(let t=0;t<this.selectedObjects.length;t++){this.selectedObjects[t].traverse(n)}}changeVisibilityOfNonSelectedObjects(t){const e=this._visibilityCache,n=[];function i(t){t.isMesh&&n.push(t)}for(let t=0;t<this.selectedObjects.length;t++){this.selectedObjects[t].traverse(i)}this.renderScene.traverse((function(i){if(i.isMesh||i.isSprite){let s=!1;for(let t=0;t<n.length;t++){if(n[t].id===i.id){s=!0;break}}if(!1===s){const n=i.visible;!1!==t&&!0!==e.get(i)||(i.visible=t),e.set(i,n)}}else(i.isPoints||i.isLine)&&(!0===t?i.visible=e.get(i):(e.set(i,i.visible),i.visible=t))}))}updateTextureMatrix(){this.textureMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),this.textureMatrix.multiply(this.renderCamera.projectionMatrix),this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse)}render(t,e,n,i,s){if(this.selectedObjects.length>0){t.getClearColor(this._oldClearColor),this.oldClearAlpha=t.getClearAlpha();const e=t.autoClear;t.autoClear=!1,s&&t.state.buffers.stencil.setTest(!1),t.setClearColor(16777215,1),this.changeVisibilityOfSelectedObjects(!1);const i=this.renderScene.background;if(this.renderScene.background=null,this.renderScene.overrideMaterial=this.depthMaterial,t.setRenderTarget(this.renderTargetDepthBuffer),t.clear(),t.render(this.renderScene,this.renderCamera),this.changeVisibilityOfSelectedObjects(!0),this._visibilityCache.clear(),this.updateTextureMatrix(),this.changeVisibilityOfNonSelectedObjects(!1),this.renderScene.overrideMaterial=this.prepareMaskMaterial,this.prepareMaskMaterial.uniforms.cameraNearFar.value.set(this.renderCamera.near,this.renderCamera.far),this.prepareMaskMaterial.uniforms.depthTexture.value=this.renderTargetDepthBuffer.texture,this.prepareMaskMaterial.uniforms.textureMatrix.value=this.textureMatrix,t.setRenderTarget(this.renderTargetMaskBuffer),t.clear(),t.render(this.renderScene,this.renderCamera),this.renderScene.overrideMaterial=null,this.changeVisibilityOfNonSelectedObjects(!0),this._visibilityCache.clear(),this.renderScene.background=i,this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetMaskBuffer.texture,t.setRenderTarget(this.renderTargetMaskDownSampleBuffer),t.clear(),this.fsQuad.render(t),this.tempPulseColor1.copy(this.visibleEdgeColor),this.tempPulseColor2.copy(this.hiddenEdgeColor),this.pulsePeriod>0){const t=.625+.75*Math.cos(.01*performance.now()/this.pulsePeriod)/2;this.tempPulseColor1.multiplyScalar(t),this.tempPulseColor2.multiplyScalar(t)}this.fsQuad.material=this.edgeDetectionMaterial,this.edgeDetectionMaterial.uniforms.maskTexture.value=this.renderTargetMaskDownSampleBuffer.texture,this.edgeDetectionMaterial.uniforms.texSize.value.set(this.renderTargetMaskDownSampleBuffer.width,this.renderTargetMaskDownSampleBuffer.height),this.edgeDetectionMaterial.uniforms.visibleEdgeColor.value=this.tempPulseColor1,this.edgeDetectionMaterial.uniforms.hiddenEdgeColor.value=this.tempPulseColor2,t.setRenderTarget(this.renderTargetEdgeBuffer1),t.clear(),this.fsQuad.render(t),this.fsQuad.material=this.separableBlurMaterial1,this.separableBlurMaterial1.uniforms.colorTexture.value=this.renderTargetEdgeBuffer1.texture,this.separableBlurMaterial1.uniforms.direction.value=EW.BlurDirectionX,this.separableBlurMaterial1.uniforms.kernelRadius.value=this.edgeThickness,t.setRenderTarget(this.renderTargetBlurBuffer1),t.clear(),this.fsQuad.render(t),this.separableBlurMaterial1.uniforms.colorTexture.value=this.renderTargetBlurBuffer1.texture,this.separableBlurMaterial1.uniforms.direction.value=EW.BlurDirectionY,t.setRenderTarget(this.renderTargetEdgeBuffer1),t.clear(),this.fsQuad.render(t),this.fsQuad.material=this.separableBlurMaterial2,this.separableBlurMaterial2.uniforms.colorTexture.value=this.renderTargetEdgeBuffer1.texture,this.separableBlurMaterial2.uniforms.direction.value=EW.BlurDirectionX,t.setRenderTarget(this.renderTargetBlurBuffer2),t.clear(),this.fsQuad.render(t),this.separableBlurMaterial2.uniforms.colorTexture.value=this.renderTargetBlurBuffer2.texture,this.separableBlurMaterial2.uniforms.direction.value=EW.BlurDirectionY,t.setRenderTarget(this.renderTargetEdgeBuffer2),t.clear(),this.fsQuad.render(t),this.fsQuad.material=this.overlayMaterial,this.overlayMaterial.uniforms.maskTexture.value=this.renderTargetMaskBuffer.texture,this.overlayMaterial.uniforms.edgeTexture1.value=this.renderTargetEdgeBuffer1.texture,this.overlayMaterial.uniforms.edgeTexture2.value=this.renderTargetEdgeBuffer2.texture,this.overlayMaterial.uniforms.patternTexture.value=this.patternTexture,this.overlayMaterial.uniforms.edgeStrength.value=this.edgeStrength,this.overlayMaterial.uniforms.edgeGlow.value=this.edgeGlow,this.overlayMaterial.uniforms.usePatternTexture.value=this.usePatternTexture,s&&t.state.buffers.stencil.setTest(!0),t.setRenderTarget(n),this.fsQuad.render(t),t.setClearColor(this._oldClearColor,this.oldClearAlpha),t.autoClear=e}this.renderToScreen&&(this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=n.texture,t.setRenderTarget(null),this.fsQuad.render(t))}getPrepareMaskMaterial(){return new F({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new d.a(.5,.5)},textureMatrix:{value:null}},vertexShader:\\\\\\\"#include <morphtarget_pars_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t#include <skinning_pars_vertex>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec4 projTexCoord;\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec4 vPosition;\\\\n\\\\t\\\\t\\\\t\\\\tuniform mat4 textureMatrix;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <skinbase_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <begin_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <morphtarget_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <skinning_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <project_vertex>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvPosition = mvPosition;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tprojTexCoord = textureMatrix * worldPosition;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"#include <packing>\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec4 vPosition;\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec4 projTexCoord;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D depthTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 cameraNearFar;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}getEdgeDetectionMaterial(){return new F({uniforms:{maskTexture:{value:null},texSize:{value:new d.a(.5,.5)},visibleEdgeColor:{value:new p.a(1,1,1)},hiddenEdgeColor:{value:new p.a(1,1,1)}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D maskTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 texSize;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec3 visibleEdgeColor;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec3 hiddenEdgeColor;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 invSize = 1.0 / texSize;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat diff1 = (c1.r - c2.r)*0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat diff2 = (c3.r - c4.r)*0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat d = length( vec2(diff1, diff2) );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat a1 = min(c1.g, c2.g);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat a2 = min(c3.g, c4.g);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat visibilityFactor = min(a1, a2);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}getSeperableBlurMaterial(t){return new F({defines:{MAX_RADIUS:t},uniforms:{colorTexture:{value:null},texSize:{value:new d.a(.5,.5)},direction:{value:new d.a(.5,.5)},kernelRadius:{value:1}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"#include <common>\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D colorTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 texSize;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 direction;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float kernelRadius;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat gaussianPdf(in float x, in float sigma) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 invSize = 1.0 / texSize;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat weightSum = gaussianPdf(0.0, kernelRadius);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 uvOffset = delta;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfor( int i = 1; i <= MAX_RADIUS; i ++ ) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfloat w = gaussianPdf(uvOffset.x, kernelRadius);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdiffuseSum += ((sample1 + sample2) * w);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tweightSum += (2.0 * w);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tuvOffset += delta;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = diffuseSum/weightSum;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}getOverlayMaterial(){return new F({uniforms:{maskTexture:{value:null},edgeTexture1:{value:null},edgeTexture2:{value:null},patternTexture:{value:null},edgeStrength:{value:1},edgeGlow:{value:1},usePatternTexture:{value:0}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D maskTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D edgeTexture1;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D edgeTexture2;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D patternTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float edgeStrength;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float edgeGlow;\\\\n\\\\t\\\\t\\\\t\\\\tuniform bool usePatternTexture;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 edgeValue1 = texture2D(edgeTexture1, vUv);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 edgeValue2 = texture2D(edgeTexture2, vUv);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 maskColor = texture2D(maskTexture, vUv);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 patternColor = texture2D(patternTexture, 6.0 * vUv);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 finalColor = edgeStrength * maskColor.r * edgeValue;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif(usePatternTexture)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfinalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = finalColor;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",blending:w.e,depthTest:!1,depthWrite:!1,transparent:!0})}}EW.BlurDirectionX=new d.a(1,0),EW.BlurDirectionY=new d.a(0,1);const SW=new class extends ua{constructor(){super(...arguments),this.objectsMask=ha.STRING(\\\\\\\"*outlined*\\\\\\\",{...xj}),this.refreshObjects=ha.BUTTON(null,{...xj}),this.printObjects=ha.BUTTON(null,{cook:!1,callback:t=>{CW.PARAM_CALLBACK_printResolve(t)}}),this.edgeStrength=ha.FLOAT(3,{range:[0,10],rangeLocked:[!0,!1],...xj}),this.edgeThickness=ha.FLOAT(1,{range:[0,4],rangeLocked:[!0,!1],...xj}),this.edgeGlow=ha.FLOAT(0,{range:[0,1],rangeLocked:[!0,!1],...xj}),this.pulsePeriod=ha.FLOAT(0,{range:[0,5],rangeLocked:[!0,!1],...xj}),this.visibleEdgeColor=ha.COLOR([1,1,1],{...xj}),this.hiddenEdgeColor=ha.COLOR([.2,.1,.4],{...xj})}};class CW extends bj{constructor(){super(...arguments),this.paramsConfig=SW,this._resolvedObjects=[],this._map=new Map}static type(){return\\\\\\\"outline\\\\\\\"}_createPass(t){const e=new EW(new d.a(t.resolution.x,t.resolution.y),t.scene,t.camera,t.scene.children);return this.updatePass(e),e}updatePass(t){t.edgeStrength=this.pv.edgeStrength,t.edgeThickness=this.pv.edgeThickness,t.edgeGlow=this.pv.edgeGlow,t.pulsePeriod=this.pv.pulsePeriod,t.visibleEdgeColor=this.pv.visibleEdgeColor,t.hiddenEdgeColor=this.pv.hiddenEdgeColor,this._setSelectedObjects(t)}_setSelectedObjects(t){const e=this.scene().objectsByMask(this.pv.objectsMask);this._map.clear();for(let t of e)this._map.set(t.uuid,t);this._resolvedObjects=e.filter((t=>{let e=!1;return t.traverseAncestors((t=>{this._map.has(t.uuid)&&(e=!0)})),!e})),t.selectedObjects=this._resolvedObjects}static PARAM_CALLBACK_printResolve(t){t.printResolve()}printResolve(){console.log(this._resolvedObjects)}}const NW={uniforms:{tDiffuse:{value:null},resolution:{value:null},pixelSize:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying highp vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float pixelSize;\\\\n\\\\t\\\\tuniform vec2 resolution;\\\\n\\\\n\\\\t\\\\tvarying highp vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main(){\\\\n\\\\n\\\\t\\\\t\\\\tvec2 dxy = pixelSize / resolution;\\\\n\\\\t\\\\t\\\\tvec2 coord = dxy * floor( vUv / dxy );\\\\n\\\\t\\\\t\\\\tgl_FragColor = texture2D(tDiffuse, coord);\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const LW=new class extends ua{constructor(){super(...arguments),this.pixelSize=ha.INTEGER(16,{range:[1,50],rangeLocked:[!0,!1],...xj})}};class OW extends bj{constructor(){super(...arguments),this.paramsConfig=LW}static type(){return\\\\\\\"pixel\\\\\\\"}_createPass(t){const e=new Hm(NW);return e.uniforms.resolution.value=t.resolution,e.uniforms.resolution.value.multiplyScalar(window.devicePixelRatio),this.updatePass(e),e}updatePass(t){t.uniforms.pixelSize.value=this.pv.pixelSize}}const PW=new class extends ua{constructor(){super(...arguments),this.overrideScene=ha.BOOLEAN(0,xj),this.scene=ha.OPERATOR_PATH(\\\\\\\"/scene1\\\\\\\",{visibleIf:{overrideScene:1},nodeSelection:{context:ts.OBJ,types:[WV.type()]},...xj}),this.overrideCamera=ha.BOOLEAN(0,xj),this.camera=ha.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{visibleIf:{overrideCamera:1},nodeSelection:{context:ts.OBJ},...xj})}};class RW extends bj{constructor(){super(...arguments),this.paramsConfig=PW}static type(){return\\\\\\\"render\\\\\\\"}_createPass(t){const e=new Ym(t.scene,t.camera);return e.context={camera:t.camera,scene:t.scene},this.updatePass(e),e}updatePass(t){this._updateCamera(t),this._update_scene(t)}async _updateCamera(t){if(this.pv.overrideCamera){this.p.camera.isDirty()&&await this.p.camera.compute();const e=this.p.camera.found_node_with_context(ts.OBJ);if(e&&(e.type()==is.PERSPECTIVE||e.type()==is.ORTHOGRAPHIC)){const n=e.object;t.camera=n}}else t.camera=t.context.camera}async _update_scene(t){if(this.pv.overrideScene){this.p.camera.isDirty()&&await this.p.scene.compute();const e=this.p.scene.found_node_with_context(ts.OBJ);if(e&&e.type()==WV.type()){const n=e.object;t.scene=n}}else t.scene=t.context.scene}}const IW={uniforms:{tDiffuse:{value:null},amount:{value:.005},angle:{value:0}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float amount;\\\\n\\\\t\\\\tuniform float angle;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec2 offset = amount * vec2( cos(angle), sin(angle));\\\\n\\\\t\\\\t\\\\tvec4 cr = texture2D(tDiffuse, vUv + offset);\\\\n\\\\t\\\\t\\\\tvec4 cga = texture2D(tDiffuse, vUv);\\\\n\\\\t\\\\t\\\\tvec4 cb = texture2D(tDiffuse, vUv - offset);\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const FW=new class extends ua{constructor(){super(...arguments),this.amount=ha.FLOAT(.005,{range:[0,1],rangeLocked:[!0,!1],...xj}),this.angle=ha.FLOAT(0,{range:[0,10],rangeLocked:[!0,!1],...xj})}};class DW extends bj{constructor(){super(...arguments),this.paramsConfig=FW}static type(){return\\\\\\\"RGBShift\\\\\\\"}_createPass(t){const e=new Hm(IW);return this.updatePass(e),e}updatePass(t){t.uniforms.amount.value=this.pv.amount,t.uniforms.angle.value=this.pv.angle}}const BW={uniforms:{tDiffuse:{value:null},amount:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float amount;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 color = texture2D( tDiffuse, vUv );\\\\n\\\\t\\\\t\\\\tvec3 c = color.rgb;\\\\n\\\\n\\\\t\\\\t\\\\tcolor.r = dot( c, vec3( 1.0 - 0.607 * amount, 0.769 * amount, 0.189 * amount ) );\\\\n\\\\t\\\\t\\\\tcolor.g = dot( c, vec3( 0.349 * amount, 1.0 - 0.314 * amount, 0.168 * amount ) );\\\\n\\\\t\\\\t\\\\tcolor.b = dot( c, vec3( 0.272 * amount, 0.534 * amount, 1.0 - 0.869 * amount ) );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( min( vec3( 1.0 ), color.rgb ), color.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const zW=new class extends ua{constructor(){super(...arguments),this.amount=ha.FLOAT(.5,{range:[0,2],rangeLocked:[!1,!1],...xj})}};class kW extends bj{constructor(){super(...arguments),this.paramsConfig=zW}static type(){return\\\\\\\"sepia\\\\\\\"}_createPass(t){const e=new Hm(BW);return this.updatePass(e),e}updatePass(t){t.uniforms.amount.value=this.pv.amount}}const UW=new class extends ua{};class GW extends bj{constructor(){super(...arguments),this.paramsConfig=UW}static type(){return\\\\\\\"sequence\\\\\\\"}initializeNode(){super.initializeNode(),this.io.inputs.setCount(0,4)}setupComposer(t){this._addPassFromInput(0,t),this._addPassFromInput(1,t),this._addPassFromInput(2,t),this._addPassFromInput(3,t)}}const VW=I.clone(CG.uniforms);VW.delta={value:new d.a};const HW={uniforms:VW,vertexShader:CG.vertexShader,fragmentShader:\\\\\\\"\\\\n#include <common>\\\\n#define ITERATIONS 10.0\\\\nuniform sampler2D tDiffuse;\\\\nuniform vec2 delta;\\\\nvarying vec2 vUv;\\\\nvoid main() {\\\\n\\\\tvec4 color = vec4( 0.0 );\\\\n\\\\tfloat total = 0.0;\\\\n\\\\tfloat offset = rand( vUv );\\\\n\\\\tfor ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) {\\\\n\\\\t\\\\tfloat percent = ( t + offset - 0.5 ) / ITERATIONS;\\\\n\\\\t\\\\tfloat weight = 1.0 - abs( percent );\\\\n\\\\t\\\\tcolor += texture2D( tDiffuse, vUv + delta * percent ) * weight;\\\\n\\\\t\\\\ttotal += weight;\\\\n\\\\t}\\\\n\\\\tgl_FragColor = color / total;\\\\n}\\\\\\\"};const jW=new class extends ua{constructor(){super(...arguments),this.delta=ha.VECTOR2([2,2],{...xj})}};class WW extends bj{constructor(){super(...arguments),this.paramsConfig=jW}static type(){return\\\\\\\"triangleBlur\\\\\\\"}_createPass(t){const e=new Hm(HW);return e.resolution=t.resolution.clone(),this.updatePass(e),e}updatePass(t){t.uniforms.delta.value.copy(this.pv.delta).divide(t.resolution).multiplyScalar(window.devicePixelRatio)}}const qW={shaderID:\\\\\\\"luminosityHighPass\\\\\\\",uniforms:{tDiffuse:{value:null},luminosityThreshold:{value:1},smoothWidth:{value:1},defaultColor:{value:new D.a(0)},defaultOpacity:{value:0}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform vec3 defaultColor;\\\\n\\\\t\\\\tuniform float defaultOpacity;\\\\n\\\\t\\\\tuniform float luminosityThreshold;\\\\n\\\\t\\\\tuniform float smoothWidth;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 luma = vec3( 0.299, 0.587, 0.114 );\\\\n\\\\n\\\\t\\\\t\\\\tfloat v = dot( texel.xyz, luma );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );\\\\n\\\\n\\\\t\\\\t\\\\tfloat alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = mix( outputColor, texel, alpha );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class XW extends km{constructor(t,e,n,i){super(),this.strength=void 0!==e?e:1,this.radius=n,this.threshold=i,this.resolution=void 0!==t?new d.a(t.x,t.y):new d.a(256,256),this.clearColor=new D.a(0,0,0);const s={minFilter:w.V,magFilter:w.V,format:w.Ib};this.renderTargetsHorizontal=[],this.renderTargetsVertical=[],this.nMips=5;let r=Math.round(this.resolution.x/2),o=Math.round(this.resolution.y/2);this.renderTargetBright=new K(r,o,s),this.renderTargetBright.texture.name=\\\\\\\"UnrealBloomPass.bright\\\\\\\",this.renderTargetBright.texture.generateMipmaps=!1;for(let t=0;t<this.nMips;t++){const e=new K(r,o,s);e.texture.name=\\\\\\\"UnrealBloomPass.h\\\\\\\"+t,e.texture.generateMipmaps=!1,this.renderTargetsHorizontal.push(e);const n=new K(r,o,s);n.texture.name=\\\\\\\"UnrealBloomPass.v\\\\\\\"+t,n.texture.generateMipmaps=!1,this.renderTargetsVertical.push(n),r=Math.round(r/2),o=Math.round(o/2)}void 0===qW&&console.error(\\\\\\\"THREE.UnrealBloomPass relies on LuminosityHighPassShader\\\\\\\");const a=qW;this.highPassUniforms=I.clone(a.uniforms),this.highPassUniforms.luminosityThreshold.value=i,this.highPassUniforms.smoothWidth.value=.01,this.materialHighPassFilter=new F({uniforms:this.highPassUniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,defines:{}}),this.separableBlurMaterials=[];const l=[3,5,7,9,11];r=Math.round(this.resolution.x/2),o=Math.round(this.resolution.y/2);for(let t=0;t<this.nMips;t++)this.separableBlurMaterials.push(this.getSeperableBlurMaterial(l[t])),this.separableBlurMaterials[t].uniforms.texSize.value=new d.a(r,o),r=Math.round(r/2),o=Math.round(o/2);this.compositeMaterial=this.getCompositeMaterial(this.nMips),this.compositeMaterial.uniforms.blurTexture1.value=this.renderTargetsVertical[0].texture,this.compositeMaterial.uniforms.blurTexture2.value=this.renderTargetsVertical[1].texture,this.compositeMaterial.uniforms.blurTexture3.value=this.renderTargetsVertical[2].texture,this.compositeMaterial.uniforms.blurTexture4.value=this.renderTargetsVertical[3].texture,this.compositeMaterial.uniforms.blurTexture5.value=this.renderTargetsVertical[4].texture,this.compositeMaterial.uniforms.bloomStrength.value=e,this.compositeMaterial.uniforms.bloomRadius.value=.1,this.compositeMaterial.needsUpdate=!0;this.compositeMaterial.uniforms.bloomFactors.value=[1,.8,.6,.4,.2],this.bloomTintColors=[new p.a(1,1,1),new p.a(1,1,1),new p.a(1,1,1),new p.a(1,1,1),new p.a(1,1,1)],this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors,void 0===zm&&console.error(\\\\\\\"THREE.UnrealBloomPass relies on CopyShader\\\\\\\");const c=zm;this.copyUniforms=I.clone(c.uniforms),this.copyUniforms.opacity.value=1,this.materialCopy=new F({uniforms:this.copyUniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader,blending:w.e,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this._oldClearColor=new D.a,this.oldClearAlpha=1,this.basic=new lt.a,this.fsQuad=new Vm(null)}dispose(){for(let t=0;t<this.renderTargetsHorizontal.length;t++)this.renderTargetsHorizontal[t].dispose();for(let t=0;t<this.renderTargetsVertical.length;t++)this.renderTargetsVertical[t].dispose();this.renderTargetBright.dispose()}setSize(t,e){let n=Math.round(t/2),i=Math.round(e/2);this.renderTargetBright.setSize(n,i);for(let t=0;t<this.nMips;t++)this.renderTargetsHorizontal[t].setSize(n,i),this.renderTargetsVertical[t].setSize(n,i),this.separableBlurMaterials[t].uniforms.texSize.value=new d.a(n,i),n=Math.round(n/2),i=Math.round(i/2)}render(t,e,n,i,s){t.getClearColor(this._oldClearColor),this.oldClearAlpha=t.getClearAlpha();const r=t.autoClear;t.autoClear=!1,t.setClearColor(this.clearColor,0),s&&t.state.buffers.stencil.setTest(!1),this.renderToScreen&&(this.fsQuad.material=this.basic,this.basic.map=n.texture,t.setRenderTarget(null),t.clear(),this.fsQuad.render(t)),this.highPassUniforms.tDiffuse.value=n.texture,this.highPassUniforms.luminosityThreshold.value=this.threshold,this.fsQuad.material=this.materialHighPassFilter,t.setRenderTarget(this.renderTargetBright),t.clear(),this.fsQuad.render(t);let o=this.renderTargetBright;for(let e=0;e<this.nMips;e++)this.fsQuad.material=this.separableBlurMaterials[e],this.separableBlurMaterials[e].uniforms.colorTexture.value=o.texture,this.separableBlurMaterials[e].uniforms.direction.value=XW.BlurDirectionX,t.setRenderTarget(this.renderTargetsHorizontal[e]),t.clear(),this.fsQuad.render(t),this.separableBlurMaterials[e].uniforms.colorTexture.value=this.renderTargetsHorizontal[e].texture,this.separableBlurMaterials[e].uniforms.direction.value=XW.BlurDirectionY,t.setRenderTarget(this.renderTargetsVertical[e]),t.clear(),this.fsQuad.render(t),o=this.renderTargetsVertical[e];this.fsQuad.material=this.compositeMaterial,this.compositeMaterial.uniforms.bloomStrength.value=this.strength,this.compositeMaterial.uniforms.bloomRadius.value=this.radius,this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors,t.setRenderTarget(this.renderTargetsHorizontal[0]),t.clear(),this.fsQuad.render(t),this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetsHorizontal[0].texture,s&&t.state.buffers.stencil.setTest(!0),this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(n),this.fsQuad.render(t)),t.setClearColor(this._oldClearColor,this.oldClearAlpha),t.autoClear=r}getSeperableBlurMaterial(t){return new F({defines:{KERNEL_RADIUS:t,SIGMA:t},uniforms:{colorTexture:{value:null},texSize:{value:new d.a(.5,.5)},direction:{value:new d.a(.5,.5)}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"#include <common>\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D colorTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 texSize;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 direction;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat gaussianPdf(in float x, in float sigma) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 invSize = 1.0 / texSize;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat fSigma = float(SIGMA);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat weightSum = gaussianPdf(0.0, fSigma);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfor( int i = 1; i < KERNEL_RADIUS; i ++ ) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfloat x = float(i);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfloat w = gaussianPdf(x, fSigma);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec2 uvOffset = direction * invSize * x;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdiffuseSum += (sample1 + sample2) * w;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tweightSum += 2.0 * w;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4(diffuseSum/weightSum, 1.0);\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}getCompositeMaterial(t){return new F({defines:{NUM_MIPS:t},uniforms:{blurTexture1:{value:null},blurTexture2:{value:null},blurTexture3:{value:null},blurTexture4:{value:null},blurTexture5:{value:null},dirtTexture:{value:null},bloomStrength:{value:1},bloomFactors:{value:null},bloomTintColors:{value:null},bloomRadius:{value:0}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture1;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture2;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture3;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture4;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture5;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D dirtTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float bloomStrength;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float bloomRadius;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float bloomFactors[NUM_MIPS];\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec3 bloomTintColors[NUM_MIPS];\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat lerpBloomFactor(const in float factor) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat mirrorFactor = 1.2 - factor;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn mix(factor, mirrorFactor, bloomRadius);\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tlerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tlerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tlerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tlerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}}XW.BlurDirectionX=new d.a(1,0),XW.BlurDirectionY=new d.a(0,1);const YW=new class extends ua{constructor(){super(...arguments),this.strength=ha.FLOAT(1.5,{range:[0,3],rangeLocked:[!0,!1],...xj}),this.radius=ha.FLOAT(1,{...xj}),this.threshold=ha.FLOAT(0,{...xj})}};class $W extends bj{constructor(){super(...arguments),this.paramsConfig=YW}static type(){return\\\\\\\"unrealBloom\\\\\\\"}_createPass(t){return new XW(new d.a(t.resolution.x,t.resolution.y),this.pv.strength,this.pv.radius,this.pv.threshold)}updatePass(t){t.strength=this.pv.strength,t.radius=this.pv.radius,t.threshold=this.pv.threshold}}const JW=new class extends ua{constructor(){super(...arguments),this.amount=ha.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],step:.01,...xj}),this.transparent=ha.BOOLEAN(1,xj)}};class ZW extends bj{constructor(){super(...arguments),this.paramsConfig=JW}static type(){return\\\\\\\"verticalBlur\\\\\\\"}_createPass(t){const e=new Hm(NG);return e.resolution_y=t.resolution.y,this.updatePass(e),e}updatePass(t){t.uniforms.v.value=this.pv.amount/(t.resolution_y*window.devicePixelRatio),t.material.transparent=this.pv.transparent}}const KW={uniforms:{tDiffuse:{value:null},offset:{value:1},darkness:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float offset;\\\\n\\\\t\\\\tuniform float darkness;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t// Eskil's vignette\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\t\\\\t\\\\tvec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const QW=new class extends ua{constructor(){super(...arguments),this.offset=ha.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],...xj}),this.darkness=ha.FLOAT(1,{range:[0,2],rangeLocked:[!0,!1],...xj})}};class tq extends bj{constructor(){super(...arguments),this.paramsConfig=QW}static type(){return\\\\\\\"vignette\\\\\\\"}_createPass(t){const e=new Hm(KW);return this.updatePass(e),e}updatePass(t){t.uniforms.offset.value=this.pv.offset,t.uniforms.darkness.value=this.pv.darkness}}class eq extends aa{static context(){return ts.POST}cook(){this.cookController.endCook()}}class nq extends eq{}class iq extends nq{constructor(){super(...arguments),this._children_controller_context=ts.ANIM}static type(){return es.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class sq extends nq{constructor(){super(...arguments),this._children_controller_context=ts.COP}static type(){return es.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class rq extends nq{constructor(){super(...arguments),this._children_controller_context=ts.EVENT}static type(){return es.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class oq extends nq{constructor(){super(...arguments),this._children_controller_context=ts.MAT}static type(){return es.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class aq extends eq{constructor(){super(...arguments),this.paramsConfig=new ef,this.effectsComposerController=new nf(this),this.displayNodeController=new Fm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=ts.POST}static type(){return es.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class lq extends nq{constructor(){super(...arguments),this._children_controller_context=ts.ROP}static type(){return es.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class cq extends aa{static context(){return ts.ROP}cook(){this.cookController.endCook()}}class hq extends cq{}class uq extends hq{constructor(){super(...arguments),this._children_controller_context=ts.COP}static type(){return es.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class dq extends Q.a{constructor(t){super(),this._element=t,this._element.style.position=\\\\\\\"absolute\\\\\\\",this.addEventListener(\\\\\\\"removed\\\\\\\",this._on_removed.bind(this))}_on_removed(){this.traverse((function(t){t instanceof dq&&t.element instanceof Element&&null!==t.element.parentNode&&t.element.parentNode.removeChild(t.element)}))}get element(){return this._element}clone(t){const e=this._element.cloneNode(!0);return new dq(e).copy(this,t)}copy(t,e){return Q.a.prototype.copy.call(this,t,e),this._element=t.element.cloneNode(!0),this.matrixAutoUpdate=t.matrixAutoUpdate,this}}class pq{constructor(){this._width=0,this._height=0,this._widthHalf=0,this._heightHalf=0,this.vector=new p.a,this.viewMatrix=new A.a,this.viewProjectionMatrix=new A.a,this.cache_distanceToCameraSquared=new WeakMap,this.domElement=document.createElement(\\\\\\\"div\\\\\\\"),this._sort_objects=!1,this._use_fog=!1,this._fog_near=1,this._fog_far=100,this.a=new p.a,this.b=new p.a,this.domElement.classList.add(\\\\\\\"polygonjs-CSS2DRenderer\\\\\\\")}getSize(){return{width:this._width,height:this._height}}setSize(t,e){this._width=t,this._height=e,this._widthHalf=this._width/2,this._heightHalf=this._height/2,this.domElement.style.width=t+\\\\\\\"px\\\\\\\",this.domElement.style.height=e+\\\\\\\"px\\\\\\\"}renderObject(t,e,n){if(t instanceof dq){this.vector.setFromMatrixPosition(t.matrixWorld),this.vector.applyMatrix4(this.viewProjectionMatrix);var i=t.element,s=\\\\\\\"translate(-50%,-50%) translate(\\\\\\\"+(this.vector.x*this._widthHalf+this._widthHalf)+\\\\\\\"px,\\\\\\\"+(-this.vector.y*this._heightHalf+this._heightHalf)+\\\\\\\"px)\\\\\\\";if(i.style.webkitTransform=s,i.style.transform=s,i.style.display=t.visible&&this.vector.z>=-1&&this.vector.z<=1?\\\\\\\"\\\\\\\":\\\\\\\"none\\\\\\\",this._sort_objects||this._use_fog){const e=this.getDistanceToSquared(n,t);if(this._use_fog){const t=Math.sqrt(e),n=or.fit(t,this._fog_near,this._fog_far,0,1),s=or.clamp(1-n,0,1);i.style.opacity=`${s}`,0==s&&(i.style.display=\\\\\\\"none\\\\\\\")}this.cache_distanceToCameraSquared.set(t,e)}i.parentNode!==this.domElement&&this.domElement.appendChild(i)}for(var r=0,o=t.children.length;r<o;r++)this.renderObject(t.children[r],e,n)}getDistanceToSquared(t,e){return this.a.setFromMatrixPosition(t.matrixWorld),this.b.setFromMatrixPosition(e.matrixWorld),this.a.distanceToSquared(this.b)}filterAndFlatten(t){const e=[];return t.traverse((function(t){t instanceof dq&&e.push(t)})),e}render(t,e){!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),this.viewMatrix.copy(e.matrixWorldInverse),this.viewProjectionMatrix.multiplyMatrices(e.projectionMatrix,this.viewMatrix),this.renderObject(t,t,e),this._sort_objects&&this.zOrder(t)}set_sorting(t){this._sort_objects=t}zOrder(t){const e=this.filterAndFlatten(t).sort(((t,e)=>{const n=this.cache_distanceToCameraSquared.get(t),i=this.cache_distanceToCameraSquared.get(e);return null!=n&&null!=i?n-i:0})),n=e.length;for(let t=0,i=e.length;t<i;t++)e[t].element.style.zIndex=\\\\\\\"\\\\\\\"+(n-t)}set_use_fog(t){this._use_fog=t}set_fog_range(t,e){this._fog_near=t,this._fog_far=e}}const _q=new class extends ua{constructor(){super(...arguments),this.css=ha.STRING(\\\\\\\"\\\\\\\",{multiline:!0}),this.sortObjects=ha.BOOLEAN(0),this.useFog=ha.BOOLEAN(0),this.fogNear=ha.FLOAT(1,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useFog:1}}),this.fogFar=ha.FLOAT(100,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useFog:1}})}};class mq extends tH{constructor(){super(...arguments),this.paramsConfig=_q,this._renderers_by_canvas_id=new Map}static type(){return eH.CSS2D}createRenderer(t){const e=new pq;this._renderers_by_canvas_id.set(t.id,e);const n=t.parentElement;n&&(n.prepend(e.domElement),n.style.position=\\\\\\\"relative\\\\\\\"),e.domElement.style.position=\\\\\\\"absolute\\\\\\\",e.domElement.style.top=\\\\\\\"0px\\\\\\\",e.domElement.style.left=\\\\\\\"0px\\\\\\\",e.domElement.style.pointerEvents=\\\\\\\"none\\\\\\\";const i=t.getBoundingClientRect();return e.setSize(i.width,i.height),this._update_renderer(e),e}renderer(t){return this._renderers_by_canvas_id.get(t.id)||this.createRenderer(t)}cook(){this._update_css(),this._renderers_by_canvas_id.forEach((t=>{this._update_renderer(t)})),this.cookController.endCook()}_update_renderer(t){t.set_sorting(this.pv.sortObjects),t.set_use_fog(this.pv.useFog),t.set_fog_range(this.pv.fogNear,this.pv.fogFar)}_update_css(){this.css_element().innerHTML=this.pv.css}css_element(){return this._css_element=this._css_element||this._find_element()||this._create_element()}_find_element(){return document.getElementById(this._css_element_id())}_create_element(){const t=document.createElement(\\\\\\\"style\\\\\\\");return t.appendChild(document.createTextNode(\\\\\\\"\\\\\\\")),document.head.appendChild(t),t.id=this._css_element_id(),t}_css_element_id(){return`css_2d_renderer-${this.graphNodeId()}`}}class fq extends hq{constructor(){super(...arguments),this._children_controller_context=ts.ANIM}static type(){return es.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class gq extends hq{constructor(){super(...arguments),this._children_controller_context=ts.EVENT}static type(){return es.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class vq extends hq{constructor(){super(...arguments),this._children_controller_context=ts.MAT}static type(){return es.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class yq extends cq{constructor(){super(...arguments),this.paramsConfig=new ef,this.effectsComposerController=new nf(this),this.displayNodeController=new Fm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=ts.POST}static type(){return es.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class xq extends hq{constructor(){super(...arguments),this._children_controller_context=ts.ROP}static type(){return es.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class bq extends aV{static type(){return\\\\\\\"add\\\\\\\"}cook(t,e){const n=[];return this._create_point(n,e),this._create_polygon(t[0],n,e),this.createCoreGroupFromObjects(n)}_create_point(t,e){if(!e.createPoint)return;const n=new S.a,i=[];for(let t=0;t<e.pointsCount;t++)e.position.toArray(i,3*t);n.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(i),3));const s=this.createObject(n,Ns.POINTS);t&&t.push(s)}_create_polygon(t,e,n){if(!n.connectInputPoints)return;t.points().length>0&&this._create_polygon_open(t,e,n)}_create_polygon_open(t,e,n){const i=t.points();let s=[];const r=[];let o;for(let t=0;t<i.length;t++)o=i[t],o.position().toArray(s,3*t),t>0&&(r.push(t-1),r.push(t));if(i.length>2&&n.connectToLastPoint){i[0].position().toArray(s,s.length);const t=r[r.length-1];r.push(t),r.push(0)}const a=new S.a;a.setAttribute(\\\\\\\"position\\\\\\\",new C.c(s,3)),a.setIndex(r);const l=this.createObject(a,Ns.LINE_SEGMENTS);e.push(l)}}bq.DEFAULT_PARAMS={createPoint:!0,pointsCount:1,position:new p.a(0,0,0),connectInputPoints:!1,connectToLastPoint:!1};const wq=bq.DEFAULT_PARAMS;const Tq=new class extends ua{constructor(){super(...arguments),this.createPoint=ha.BOOLEAN(wq.createPoint),this.pointsCount=ha.INTEGER(wq.pointsCount,{range:[1,100],rangeLocked:[!0,!1],visibleIf:{createPoint:!0}}),this.position=ha.VECTOR3(wq.position,{visibleIf:{createPoint:!0}}),this.connectInputPoints=ha.BOOLEAN(wq.connectInputPoints),this.connectToLastPoint=ha.BOOLEAN(wq.connectToLastPoint)}};class Aq extends uV{constructor(){super(...arguments),this.paramsConfig=Tq}static type(){return\\\\\\\"add\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create polygons from (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1)}cook(t){this._operation=this._operation||new bq(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const Mq=new class extends ua{};class Eq extends uV{constructor(){super(...arguments),this.paramsConfig=Mq}static type(){return\\\\\\\"animationCopy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to copy animation to\\\\\\\",\\\\\\\"geometry to copy animation from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER])}cook(t){const e=t[0],n=t[1].objects()[0],i=e.objects()[0],s=n.animations;s?(i.animations=s.map((t=>t.clone())),this.setCoreGroup(e)):this.states.error.set(\\\\\\\"no animation found\\\\\\\")}}class Sq{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const s=e.tracks,r=s.length,o=new Array(r),a={endingStart:w.id,endingEnd:w.id};for(let t=0;t!==r;++t){const e=s[t].createInterpolant(null);o[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(r),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=w.eb,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,s=i/n,r=n/i;t.warp(1,s,e),this.warp(r,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,s=i.time,r=this.timeScale;let o=this._timeScaleInterpolant;null===o&&(o=i._lendControlInterpolant(),this._timeScaleInterpolant=o);const a=o.parameterPositions,l=o.sampleValues;return a[0]=s,a[1]=s+n,l[0]=t/r,l[1]=e/r,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const s=this._startTime;if(null!==s){const i=(t-s)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const r=this._updateTime(e),o=this._updateWeight(t);if(o>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case w.d:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(r),e[n].accumulateAdditive(o);break;case w.wb:default:for(let n=0,s=t.length;n!==s;++n)t[n].evaluate(r),e[n].accumulate(i,o)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,s=this._loopCount;const r=n===w.db;if(0===t)return-1===s?i:r&&1==(1&s)?e-i:i;if(n===w.cb){-1===s&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"finished\\\\\\\",action:this,direction:t<0?-1:1})}}else{if(-1===s&&(t>=0?(s=0,this._setEndings(!0,0===this.repetitions,r)):this._setEndings(0===this.repetitions,!0,r)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,s+=Math.abs(n);const o=this.repetitions-s;if(o<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"finished\\\\\\\",action:this,direction:t>0?1:-1});else{if(1===o){const e=t<0;this._setEndings(e,!e,r)}else this._setEndings(!1,!1,r);this._loopCount=s,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"loop\\\\\\\",action:this,loopDelta:n})}}else this.time=i;if(r&&1==(1&s))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=w.kd,i.endingEnd=w.kd):(i.endingStart=t?this.zeroSlopeAtStart?w.kd:w.id:w.hd,i.endingEnd=e?this.zeroSlopeAtEnd?w.kd:w.id:w.hd)}_scheduleFading(t,e,n){const i=this._mixer,s=i.time;let r=this._weightInterpolant;null===r&&(r=i._lendControlInterpolant(),this._weightInterpolant=r);const o=r.parameterPositions,a=r.sampleValues;return o[0]=s,a[0]=e,o[1]=s+t,a[1]=n,this}}var Cq=n(71),Nq=n(66);class Lq{constructor(t,e,n){let i,s,r;switch(this.binding=t,this.valueSize=n,e){case\\\\\\\"quaternion\\\\\\\":i=this._slerp,s=this._slerpAdditive,r=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*n),this._workIndex=5;break;case\\\\\\\"string\\\\\\\":case\\\\\\\"bool\\\\\\\":i=this._select,s=this._select,r=this._setAdditiveIdentityOther,this.buffer=new Array(5*n);break;default:i=this._lerp,s=this._lerpAdditive,r=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*n)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=s,this._setIdentity=r,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(t,e){const n=this.buffer,i=this.valueSize,s=t*i+i;let r=this.cumulativeWeight;if(0===r){for(let t=0;t!==i;++t)n[s+t]=n[t];r=e}else{r+=e;const t=e/r;this._mixBufferRegion(n,s,0,t,i)}this.cumulativeWeight=r}accumulateAdditive(t){const e=this.buffer,n=this.valueSize,i=n*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(e,i,0,t,n),this.cumulativeWeightAdditive+=t}apply(t){const e=this.valueSize,n=this.buffer,i=t*e+e,s=this.cumulativeWeight,r=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,s<1){const t=e*this._origIndex;this._mixBufferRegion(n,i,t,1-s,e)}r>0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,s=e+e;t!==s;++t)if(n[t]!==n[t+e]){o.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,s=i;t!==s;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n<e;n++)this.buffer[n]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const t=this._origIndex*this.valueSize,e=this._addIndex*this.valueSize;for(let n=0;n<this.valueSize;n++)this.buffer[e+n]=this.buffer[t+n]}_select(t,e,n,i,s){if(i>=.5)for(let i=0;i!==s;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){hh.a.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,s){const r=this._workIndex*s;hh.a.multiplyQuaternionsFlat(t,r,t,e,t,n),hh.a.slerpFlat(t,e,t,e,t,r,i)}_lerp(t,e,n,i,s){const r=1-i;for(let o=0;o!==s;++o){const s=e+o;t[s]=t[s]*r+t[n+o]*i}}_lerpAdditive(t,e,n,i,s){for(let r=0;r!==s;++r){const s=e+r;t[s]=t[s]+t[n+r]*i}}}var Oq=n(64);class Pq extends J.a{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,s=i.length,r=t._propertyBindings,o=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==s;++t){const s=i[t],l=s.name;let h=c[l];if(void 0!==h)r[t]=h;else{if(h=r[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Lq(Nq.a.create(n,l,i),s.ValueTypeName,s.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,a,l),r[t]=h}o[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e<this._nActiveActions}_addInactiveAction(t,e,n){const i=this._actions,s=this._actionsByClip;let r=s[e];if(void 0===r)r={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,s[e]=r;else{const e=r.knownActions;t._byClipCacheIndex=e.length,e.push(t)}t._cacheIndex=i.length,i.push(t),r.actionByRoot[n]=t}_removeInactiveAction(t){const e=this._actions,n=e[e.length-1],i=t._cacheIndex;n._cacheIndex=i,e[i]=n,e.pop(),t._cacheIndex=null;const s=t._clip.uuid,r=this._actionsByClip,o=r[s],a=o.knownActions,l=a[a.length-1],c=t._byClipCacheIndex;l._byClipCacheIndex=c,a[c]=l,a.pop(),t._byClipCacheIndex=null;delete o.actionByRoot[(t._localRoot||this._root).uuid],0===a.length&&delete r[s],this._removeInactiveBindingsForAction(t)}_removeInactiveBindingsForAction(t){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.referenceCount&&this._removeInactiveBinding(n)}}_lendAction(t){const e=this._actions,n=t._cacheIndex,i=this._nActiveActions++,s=e[i];t._cacheIndex=i,e[i]=t,s._cacheIndex=n,e[n]=s}_takeBackAction(t){const e=this._actions,n=t._cacheIndex,i=--this._nActiveActions,s=e[i];t._cacheIndex=i,e[i]=t,s._cacheIndex=n,e[n]=s}_addInactiveBinding(t,e,n){const i=this._bindingsByRootAndName,s=this._bindings;let r=i[e];void 0===r&&(r={},i[e]=r),r[n]=t,t._cacheIndex=s.length,s.push(t)}_removeInactiveBinding(t){const e=this._bindings,n=t.binding,i=n.rootNode.uuid,s=n.path,r=this._bindingsByRootAndName,o=r[i],a=e[e.length-1],l=t._cacheIndex;a._cacheIndex=l,e[l]=a,e.pop(),delete o[s],0===Object.keys(o).length&&delete r[i]}_lendBinding(t){const e=this._bindings,n=t._cacheIndex,i=this._nActiveBindings++,s=e[i];t._cacheIndex=i,e[i]=t,s._cacheIndex=n,e[n]=s}_takeBackBinding(t){const e=this._bindings,n=t._cacheIndex,i=--this._nActiveBindings,s=e[i];t._cacheIndex=i,e[i]=t,s._cacheIndex=n,e[n]=s}_lendControlInterpolant(){const t=this._controlInterpolants,e=this._nActiveControlInterpolants++;let n=t[e];return void 0===n&&(n=new Cq.a(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),n.__cacheIndex=e,t[e]=n),n}_takeBackControlInterpolant(t){const e=this._controlInterpolants,n=t.__cacheIndex,i=--this._nActiveControlInterpolants,s=e[i];t.__cacheIndex=i,e[i]=t,s.__cacheIndex=n,e[n]=s}clipAction(t,e,n){const i=e||this._root,s=i.uuid;let r=\\\\\\\"string\\\\\\\"==typeof t?Oq.a.findByName(i,t):t;const o=null!==r?r.uuid:t,a=this._actionsByClip[o];let l=null;if(void 0===n&&(n=null!==r?r.blendMode:w.wb),void 0!==a){const t=a.actionByRoot[s];if(void 0!==t&&t.blendMode===n)return t;l=a.knownActions[0],null===r&&(r=l._clip)}if(null===r)return null;const c=new Sq(this,r,e,n);return this._bindAction(c,l),this._addInactiveAction(c,o,s),c}existingAction(t,e){const n=e||this._root,i=n.uuid,s=\\\\\\\"string\\\\\\\"==typeof t?Oq.a.findByName(n,t):t,r=s?s.uuid:t,o=this._actionsByClip[r];return void 0!==o&&o.actionByRoot[i]||null}stopAllAction(){const t=this._actions;for(let e=this._nActiveActions-1;e>=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,s=Math.sign(t),r=this._accuIndex^=1;for(let o=0;o!==n;++o){e[o]._update(i,t,s,r)}const o=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)o[t].apply(r);return this}setTime(t){this.time=0;for(let t=0;t<this._actions.length;t++)this._actions[t].time=0;return this.update(t)}getRoot(){return this._root}uncacheClip(t){const e=this._actions,n=t.uuid,i=this._actionsByClip,s=i[n];if(void 0!==s){const t=s.knownActions;for(let n=0,i=t.length;n!==i;++n){const i=t[n];this._deactivateAction(i);const s=i._cacheIndex,r=e[e.length-1];i._cacheIndex=null,i._byClipCacheIndex=null,r._cacheIndex=s,e[s]=r,e.pop(),this._removeInactiveBindingsForAction(i)}delete i[n]}}uncacheRoot(t){const e=t.uuid,n=this._actionsByClip;for(const t in n){const i=n[t].actionByRoot[e];void 0!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}const i=this._bindingsByRootAndName[e];if(void 0!==i)for(const t in i){const e=i[t];e.restoreOriginalState(),this._removeInactiveBinding(e)}}uncacheAction(t,e){const n=this.existingAction(t,e);null!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}}Pq.prototype._controlInterpolantsResultBuffer=new Float32Array(1);const Rq=new class extends ua{constructor(){super(...arguments),this.time=ha.FLOAT(\\\\\\\"$T\\\\\\\",{range:[0,10]}),this.clip=ha.OPERATOR_PATH(\\\\\\\"/ANIM/OUT\\\\\\\",{nodeSelection:{context:ts.ANIM},dependentOnFoundNode:!1}),this.reset=ha.BUTTON(null,{callback:(t,e)=>{Iq.PARAM_CALLBACK_reset(t,e)}})}};class Iq extends uV{constructor(){super(...arguments),this.paramsConfig=Rq}static type(){return\\\\\\\"animationMixer\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to be animated\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){const e=t[0].objects()[0];e&&(await this.create_mixer_if_required(e),this._update_mixer()),this.setObjects([e])}async create_mixer_if_required(t){if(!this._mixer){const e=await this._create_mixer(t);e&&(this._mixer=e)}}async _create_mixer(t){this.p.clip.isDirty()&&await this.p.clip.compute();if(this.p.clip.found_node_with_context(ts.ANIM)){return new Pq(t)}}_update_mixer(){this._set_mixer_time()}_set_mixer_time(){this.pv.time!=this._previous_time&&(this._mixer&&this._mixer.setTime(this.pv.time),this._previous_time=this.pv.time)}static PARAM_CALLBACK_reset(t,e){e.setDirty(),t.reset_animation_mixer()}async reset_animation_mixer(){this._mixer=void 0,this._previous_time=void 0,this.setDirty()}}class Fq extends aV{static type(){return\\\\\\\"attribAddMult\\\\\\\"}cook(t,e){const n=t[0],i=n.attribNamesMatchingMask(e.name);for(let t of i){const i=n.geometries();for(let n of i)this._update_attrib(t,n,e)}return n}_update_attrib(t,e,n){const i=e.getAttribute(t);if(i){const t=i.array,e=n.preAdd,s=n.mult,r=n.postAdd;for(let n=0;n<t.length;n++){const i=t[n];t[n]=(i+e)*s+r}i.needsUpdate=!0}}}Fq.DEFAULT_PARAMS={name:\\\\\\\"\\\\\\\",preAdd:0,mult:1,postAdd:0},Fq.INPUT_CLONED_STATE=Qi.FROM_NODE;const Dq=Fq.DEFAULT_PARAMS;const Bq=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(Dq.name),this.preAdd=ha.FLOAT(Dq.preAdd,{range:[0,1]}),this.mult=ha.FLOAT(Dq.mult,{range:[0,1]}),this.postAdd=ha.FLOAT(Dq.postAdd,{range:[0,1]})}};class zq extends uV{constructor(){super(...arguments),this.paramsConfig=Bq}static type(){return\\\\\\\"attribAddMult\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Fq.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new Fq(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var kq;!function(t){t.Float64BufferAttribute=\\\\\\\"Float64BufferAttribute\\\\\\\",t.Float32BufferAttribute=\\\\\\\"Float32BufferAttribute\\\\\\\",t.Float16BufferAttribute=\\\\\\\"Float16BufferAttribute\\\\\\\",t.Uint32BufferAttribute=\\\\\\\"Uint32BufferAttribute\\\\\\\",t.Int32BufferAttribute=\\\\\\\"Int32BufferAttribute\\\\\\\",t.Uint16BufferAttribute=\\\\\\\"Uint16BufferAttribute\\\\\\\",t.Int16BufferAttribute=\\\\\\\"Int16BufferAttribute\\\\\\\",t.Uint8ClampedBufferAttribute=\\\\\\\"Uint8ClampedBufferAttribute\\\\\\\",t.Uint8BufferAttribute=\\\\\\\"Uint8BufferAttribute\\\\\\\",t.Int8BufferAttribute=\\\\\\\"Int8BufferAttribute\\\\\\\"}(kq||(kq={}));const Uq=[kq.Float64BufferAttribute,kq.Float32BufferAttribute,kq.Float16BufferAttribute,kq.Uint32BufferAttribute,kq.Int32BufferAttribute,kq.Uint16BufferAttribute,kq.Int16BufferAttribute,kq.Uint8ClampedBufferAttribute,kq.Uint8BufferAttribute,kq.Int8BufferAttribute],Gq={[kq.Float64BufferAttribute]:C.d,[kq.Float32BufferAttribute]:C.c,[kq.Float16BufferAttribute]:C.b,[kq.Uint32BufferAttribute]:C.i,[kq.Int32BufferAttribute]:C.f,[kq.Uint16BufferAttribute]:C.h,[kq.Int16BufferAttribute]:C.e,[kq.Uint8ClampedBufferAttribute]:C.k,[kq.Uint8BufferAttribute]:C.j,[kq.Int8BufferAttribute]:C.g},Vq={[kq.Float64BufferAttribute]:Float64Array,[kq.Float32BufferAttribute]:Float32Array,[kq.Float16BufferAttribute]:Uint16Array,[kq.Uint32BufferAttribute]:Uint32Array,[kq.Int32BufferAttribute]:Int32Array,[kq.Uint16BufferAttribute]:Uint16Array,[kq.Int16BufferAttribute]:Int16Array,[kq.Uint8ClampedBufferAttribute]:Uint8Array,[kq.Uint8BufferAttribute]:Uint8Array,[kq.Int8BufferAttribute]:Int8Array};class Hq extends aV{static type(){return\\\\\\\"attribCast\\\\\\\"}cook(t,e){const n=t[0],i=n.objectsWithGeo();for(let t of i)this._castGeoAttributes(t.geometry,e);return n}_castGeoAttributes(t,e){const n=Uq[e.type],i=Gq[n],s=Vq[n];if(e.castAttributes){const n=fr.attribNamesMatchingMask(t,e.mask);for(let e of n){const n=t.attributes[e],r=n.array,o=new s(n.count*n.itemSize);for(let t=0;t<r.length;t++)o[t]=r[t];const a=new i(o,1);t.setAttribute(e,a)}}if(e.castIndex){const e=t.getIndex();if(e){const n=e.array,r=new s(e.count*1);for(let t=0;t<n.length;t++)r[t]=n[t];const o=new i(r,1);t.setIndex(o)}}}}Hq.DEFAULT_PARAMS={castAttributes:!0,mask:\\\\\\\"*\\\\\\\",castIndex:!1,type:Uq.indexOf(kq.Float32BufferAttribute)},Hq.INPUT_CLONED_STATE=Qi.FROM_NODE;const jq=Hq.DEFAULT_PARAMS;const Wq=new class extends ua{constructor(){super(...arguments),this.castAttributes=ha.BOOLEAN(jq.castAttributes),this.mask=ha.STRING(jq.mask,{visibleIf:{castAttributes:1}}),this.castIndex=ha.BOOLEAN(jq.castIndex),this.type=ha.INTEGER(jq.type,{menu:{entries:Uq.map(((t,e)=>({name:t,value:e})))}})}};class qq extends uV{constructor(){super(...arguments),this.paramsConfig=Wq}static type(){return\\\\\\\"attribCast\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Hq.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.type],(()=>Uq[this.pv.type]))}))}))}cook(t){this._operation=this._operation||new Hq(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class Xq extends aV{static type(){return\\\\\\\"attribCopy\\\\\\\"}cook(t,e){const n=t[0],i=t[1]||n,s=i.attribNamesMatchingMask(e.name);for(let t of s)this.copy_vertex_attribute_between_core_groups(n,i,t,e);return n}copy_vertex_attribute_between_core_groups(t,e,n,i){var s;const r=e.objectsWithGeo(),o=t.objectsWithGeo();if(o.length>r.length)null===(s=this.states)||void 0===s||s.error.set(\\\\\\\"second input does not have enough objects to copy attributes from\\\\\\\");else for(let t=0;t<o.length;t++){const e=o[t].geometry,s=r[t].geometry;this.copy_vertex_attribute_between_geometries(e,s,n,i)}}copy_vertex_attribute_between_geometries(t,e,n,i){var s,r;const o=e.getAttribute(n);if(o){const r=o.itemSize,a=e.getAttribute(\\\\\\\"position\\\\\\\").array.length/3,l=t.getAttribute(\\\\\\\"position\\\\\\\").array.length/3;l>a&&(null===(s=this.states)||void 0===s||s.error.set(\\\\\\\"not enough points in second input\\\\\\\"));const c=i.tnewName?i.newName:n;let h=t.getAttribute(c);if(h)this._fill_dest_array(h,o,i),h.needsUpdate=!0;else{const e=o.array.slice(0,l*r);t.setAttribute(c,new C.c(e,r))}}else null===(r=this.states)||void 0===r||r.error.set(`attribute '${n}' does not exist on second input`)}_fill_dest_array(t,e,n){const i=t.array,s=e.array,r=i.length,o=t.itemSize,a=e.itemSize,l=n.srcOffset,c=n.destOffset;if(t.itemSize==e.itemSize){t.copyArray(e.array);for(let t=0;t<r;t++)i[t]=s[t]}else{const t=i.length/o;if(o<a)for(let e=0;e<t;e++)for(let t=0;t<o;t++)i[e*o+t+c]=s[e*a+t+l];else for(let e=0;e<t;e++)for(let t=0;t<a;t++)i[e*o+t+c]=s[e*a+t+l]}}}Xq.DEFAULT_PARAMS={name:\\\\\\\"\\\\\\\",tnewName:!1,newName:\\\\\\\"\\\\\\\",srcOffset:0,destOffset:0},Xq.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.NEVER];const Yq=Xq.DEFAULT_PARAMS;const $q=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(Yq.name),this.tnewName=ha.BOOLEAN(Yq.tnewName),this.newName=ha.STRING(Yq.newName,{visibleIf:{tnewName:1}}),this.srcOffset=ha.INTEGER(Yq.srcOffset,{range:[0,3],rangeLocked:[!0,!0]}),this.destOffset=ha.INTEGER(Yq.destOffset,{range:[0,3],rangeLocked:[!0,!0]})}};class Jq extends uV{constructor(){super(...arguments),this.paramsConfig=$q}static type(){return\\\\\\\"attribCopy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to copy attributes to\\\\\\\",\\\\\\\"geometry to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState(Xq.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name,this.p.tnewName,this.p.newName],(()=>this.pv.tnewName?`${this.pv.name} -> ${this.pv.newName}`:this.pv.name))}))}))}cook(t){this._operation=this._operation||new Xq(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class Zq extends aV{static type(){return\\\\\\\"attribCreate\\\\\\\"}cook(t,e){var n;const i=t[0];return e.name&&\\\\\\\"\\\\\\\"!=e.name.trim()?this._add_attribute(Ds[e.class],i,e):null===(n=this.states)||void 0===n||n.error.set(\\\\\\\"attribute name is not valid\\\\\\\"),i}async _add_attribute(t,e,n){const i=ks[n.type];switch(t){case Fs.VERTEX:return void await this.add_point_attribute(i,e,n);case Fs.OBJECT:return void await this.add_object_attribute(i,e,n)}os.unreachable(t)}async add_point_attribute(t,e,n){const i=e.coreObjects();switch(t){case zs.NUMERIC:for(let t=0;t<i.length;t++)await this.add_numeric_attribute_to_points(i[t],n);return;case zs.STRING:for(let t=0;t<i.length;t++)await this.add_string_attribute_to_points(i[t],n);return}os.unreachable(t)}async add_object_attribute(t,e,n){const i=e.coreObjectsFromGroup(n.group);switch(t){case zs.NUMERIC:return void await this.add_numeric_attribute_to_object(i,n);case zs.STRING:return void await this.add_string_attribute_to_object(i,n)}os.unreachable(t)}async add_numeric_attribute_to_points(t,e){if(!t.coreGeometry())return;const n=[e.value1,e.value2,e.value3,e.value4][e.size-1];t.addNumericVertexAttrib(e.name,e.size,n)}async add_numeric_attribute_to_object(t,e){const n=[e.value1,e.value2,e.value3,e.value4][e.size-1];for(let i of t)i.setAttribValue(e.name,n)}async add_string_attribute_to_points(t,e){const n=t.pointsFromGroup(e.group),i=e.string,s=new Array(n.length);for(let t=0;t<n.length;t++)s[t]=i;const r=Xs.arrayToIndexedArrays(s),o=t.coreGeometry();o&&o.setIndexedAttribute(e.name,r.values,r.indices)}async add_string_attribute_to_object(t,e){const n=e.string;for(let i of t)i.setAttribValue(e.name,n)}}Zq.DEFAULT_PARAMS={group:\\\\\\\"\\\\\\\",class:Ds.indexOf(Fs.VERTEX),type:ks.indexOf(zs.NUMERIC),name:\\\\\\\"new_attrib\\\\\\\",size:1,value1:0,value2:new d.a(0,0),value3:new p.a(0,0,0),value4:new _.a(0,0,0,0),string:\\\\\\\"\\\\\\\"},Zq.INPUT_CLONED_STATE=Qi.FROM_NODE;const Kq=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"],Qq=Zq.DEFAULT_PARAMS;const tX=new class extends ua{constructor(){super(...arguments),this.group=ha.STRING(Qq.group),this.class=ha.INTEGER(Qq.class,{menu:{entries:Bs}}),this.type=ha.INTEGER(Qq.type,{menu:{entries:Us}}),this.name=ha.STRING(Qq.name),this.size=ha.INTEGER(Qq.size,{range:[1,4],rangeLocked:[!0,!0],visibleIf:{type:zs.NUMERIC}}),this.value1=ha.FLOAT(Qq.value1,{visibleIf:{type:zs.NUMERIC,size:1},expression:{forEntities:!0}}),this.value2=ha.VECTOR2(Qq.value2,{visibleIf:{type:zs.NUMERIC,size:2},expression:{forEntities:!0}}),this.value3=ha.VECTOR3(Qq.value3,{visibleIf:{type:zs.NUMERIC,size:3},expression:{forEntities:!0}}),this.value4=ha.VECTOR4(Qq.value4,{visibleIf:{type:zs.NUMERIC,size:4},expression:{forEntities:!0}}),this.string=ha.STRING(Qq.string,{visibleIf:{type:zs.STRING},expression:{forEntities:!0}})}};class eX extends uV{constructor(){super(...arguments),this.paramsConfig=tX,this._x_arrays_by_geometry_uuid={},this._y_arrays_by_geometry_uuid={},this._z_arrays_by_geometry_uuid={},this._w_arrays_by_geometry_uuid={}}static type(){return\\\\\\\"attribCreate\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Zq.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}cook(t){if(this._is_using_expression())this.pv.name&&\\\\\\\"\\\\\\\"!=this.pv.name.trim()?this._addAttribute(Ds[this.pv.class],t[0]):this.states.error.set(\\\\\\\"attribute name is not valid\\\\\\\");else{this._operation=this._operation||new Zq(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}async _addAttribute(t,e){const n=ks[this.pv.type];switch(t){case Fs.VERTEX:return await this._addPointAttribute(n,e),this.setCoreGroup(e);case Fs.OBJECT:return await this._addObjectAttribute(n,e),this.setCoreGroup(e)}os.unreachable(t)}async _addPointAttribute(t,e){const n=e.coreObjects();switch(t){case zs.NUMERIC:for(let t=0;t<n.length;t++)await this._addNumericAttributeToPoints(n[t]);return;case zs.STRING:for(let t=0;t<n.length;t++)await this._addStringAttributeToPoints(n[t]);return}os.unreachable(t)}async _addObjectAttribute(t,e){const n=e.coreObjectsFromGroup(this.pv.group);switch(t){case zs.NUMERIC:return void await this.add_numeric_attribute_to_object(n);case zs.STRING:return void await this.add_string_attribute_to_object(n)}os.unreachable(t)}async _addNumericAttributeToPoints(t){const e=t.coreGeometry();if(!e)return;const n=t.pointsFromGroup(this.pv.group),i=[this.p.value1,this.p.value2,this.p.value3,this.p.value4][this.pv.size-1];if(i.hasExpression()){e.hasAttrib(this.pv.name)||e.addNumericAttrib(this.pv.name,this.pv.size,i.value);const t=e.geometry(),s=t.getAttribute(this.pv.name).array;if(1==this.pv.size)this.p.value1.expressionController&&await this.p.value1.expressionController.computeExpressionForPoints(n,((t,e)=>{s[t.index()*this.pv.size+0]=e}));else{let e=[this.p.value2,this.p.value3,this.p.value4][this.pv.size-2].components;const i=new Array(e.length);let r;const o=[this._x_arrays_by_geometry_uuid,this._y_arrays_by_geometry_uuid,this._z_arrays_by_geometry_uuid,this._w_arrays_by_geometry_uuid];for(let a=0;a<e.length;a++)if(r=e[a],r.hasExpression()&&r.expressionController)i[a]=this._init_array_if_required(t,o[a],n.length),await r.expressionController.computeExpressionForPoints(n,((t,e)=>{i[a][t.index()]=e}));else{const t=r.value;for(let e of n)s[e.index()*this.pv.size+a]=t}for(let t=0;t<i.length;t++){const e=i[t];if(e)for(let n=0;n<e.length;n++)s[n*this.pv.size+t]=e[n]}}}}async add_numeric_attribute_to_object(t){if([this.p.value1,this.p.value2,this.p.value3,this.p.value4][this.pv.size-1].hasExpression())if(1==this.pv.size)this.p.value1.expressionController&&await this.p.value1.expressionController.computeExpressionForObjects(t,((t,e)=>{t.setAttribValue(this.pv.name,e)}));else{let e=[this.p.value2,this.p.value3,this.p.value4][this.pv.size-2].components,n={};const i=this._vector_by_attrib_size(this.pv.size);if(i){for(let e of t)n[e.index()]=i;for(let i=0;i<e.length;i++){const s=e[i],r=Kq[i];if(s.hasExpression()&&s.expressionController)await s.expressionController.computeExpressionForObjects(t,((t,e)=>{n[t.index()][r]=e}));else for(let e of t){n[e.index()][r]=s.value}}for(let e=0;e<t.length;e++){const i=t[e],s=n[i.index()];i.setAttribValue(this.pv.name,s)}}}}_vector_by_attrib_size(t){switch(t){case 2:return new d.a(0,0);case 3:return new p.a(0,0,0);case 4:return new _.a(0,0,0,0)}}async _addStringAttributeToPoints(t){const e=t.pointsFromGroup(this.pv.group),n=this.p.string,i=new Array(e.length);n.hasExpression()&&n.expressionController&&await n.expressionController.computeExpressionForPoints(e,((t,e)=>{i[t.index()]=e}));const s=Xs.arrayToIndexedArrays(i),r=t.coreGeometry();r&&r.setIndexedAttribute(this.pv.name,s.values,s.indices)}async add_string_attribute_to_object(t){const e=this.p.string;e.hasExpression()&&e.expressionController&&await e.expressionController.computeExpressionForObjects(t,((t,e)=>{t.setAttribValue(this.pv.name,e)}))}_init_array_if_required(t,e,n){const i=t.uuid,s=e[i];return s?s.length<n&&(e[i]=new Array(n)):e[i]=new Array(n),e[i]}_is_using_expression(){switch(ks[this.pv.type]){case zs.NUMERIC:return[this.p.value1,this.p.value2,this.p.value3,this.p.value4][this.pv.size-1].hasExpression();case zs.STRING:return this.p.string.hasExpression()}}setType(t){this.p.type.set(ks.indexOf(t))}}const nX=new class extends ua{constructor(){super(...arguments),this.class=ha.INTEGER(Fs.VERTEX,{menu:{entries:Bs}}),this.name=ha.STRING(\\\\\\\"\\\\\\\")}};class iX extends uV{constructor(){super(...arguments),this.paramsConfig=nX}static type(){return\\\\\\\"attribDelete\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to delete attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}cook(t){const e=t[0],n=e.attribNamesMatchingMask(this.pv.name);for(let t of n)switch(this.pv.class){case Fs.VERTEX:this.delete_vertex_attribute(e,t);case Fs.OBJECT:this.delete_object_attribute(e,t)}this.setCoreGroup(e)}delete_vertex_attribute(t,e){for(let n of t.objects())n.traverse((t=>{const n=t;if(n.geometry){new fr(n.geometry).deleteAttribute(e)}}))}delete_object_attribute(t,e){for(let n of t.objects()){let t=0;n.traverse((n=>{new br(n,t).deleteAttribute(e),t++}))}}}class sX{set_attrib(t){const e=t.geometry,n=t.targetAttribSize;if(n<1||n>4)return;const i=t.add,s=t.mult,r=this._data_from_texture(t.texture);if(!r)return;const{data:o,resx:a,resy:l}=r,c=o.length/(a*l),h=e.getAttribute(t.uvAttribName).array,u=h.length/2,d=new Array(u*n);let p,_,m,f,g,v,y,x,b;const w=or.clamp;for(v=0;v<u;v++)for(p=2*v,_=w(h[p],0,1),m=w(h[p+1],0,1),f=Math.floor((a-1)*_),g=Math.floor((l-1)*(1-m)),y=g*a+f,b=0;b<n;b++)x=o[c*y+b],d[v*n+b]=s*x+i;const T=Xs.remapName(t.targetAttribName),A=new Float32Array(d);e.setAttribute(T,new C.a(A,n))}_data_from_texture(t){if(t.image)return t.image.data?this._data_from_data_texture(t):this._data_from_default_texture(t)}_data_from_default_texture(t){const e=t.image.width,n=t.image.height;return{data:Bf.data_from_image(t.image).data,resx:e,resy:n}}_data_from_data_texture(t){return{data:t.image.data,resx:t.image.width,resy:t.image.height}}}class rX extends aV{static type(){return\\\\\\\"attribFromTexture\\\\\\\"}async cook(t,e){var n;const i=t[0],s=e.texture.nodeWithContext(ts.COP,null===(n=this.states)||void 0===n?void 0:n.error);if(!s)return i;const r=(await s.compute()).texture();for(let t of i.coreObjects())this._set_position_from_data_texture(t,r,e);return i}_set_position_from_data_texture(t,e,n){var i,s;const r=null===(i=t.coreGeometry())||void 0===i?void 0:i.geometry();if(!r)return;if(null==r.getAttribute(n.uvAttrib))return void(null===(s=this.states)||void 0===s||s.error.set(`param '${n.uvAttrib} not found'`));(new sX).set_attrib({geometry:r,texture:e,uvAttribName:n.uvAttrib,targetAttribName:n.attrib,targetAttribSize:n.attribSize,add:n.add,mult:n.mult})}}rX.DEFAULT_PARAMS={texture:new yi(vi.EMPTY),uvAttrib:\\\\\\\"uv\\\\\\\",attrib:\\\\\\\"pscale\\\\\\\",attribSize:1,add:0,mult:1},rX.INPUT_CLONED_STATE=Qi.FROM_NODE;const oX=rX.DEFAULT_PARAMS;const aX=new class extends ua{constructor(){super(...arguments),this.texture=ha.NODE_PATH(oX.texture.path(),{nodeSelection:{context:ts.COP}}),this.uvAttrib=ha.STRING(oX.uvAttrib),this.attrib=ha.STRING(oX.attrib),this.attribSize=ha.INTEGER(oX.attribSize,{range:[1,3],rangeLocked:[!0,!0]}),this.add=ha.FLOAT(oX.add),this.mult=ha.FLOAT(oX.mult)}};class lX extends uV{constructor(){super(...arguments),this.paramsConfig=aX}static type(){return\\\\\\\"attribFromTexture\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.attrib])}))}))}async cook(t){this._operation=this._operation||new rX(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var cX;!function(t){t.MIN_MAX_TO_01=\\\\\\\"min/max to 0/1\\\\\\\",t.VECTOR_TO_LENGTH_1=\\\\\\\"vectors to length 1\\\\\\\"}(cX||(cX={}));const hX=[cX.MIN_MAX_TO_01,cX.VECTOR_TO_LENGTH_1];class uX extends aV{constructor(){super(...arguments),this.min3=new p.a,this.max3=new p.a,this._vec=new p.a}static type(){return\\\\\\\"attribNormalize\\\\\\\"}cook(t,e){const n=t[0],i=t[0].objectsWithGeo(),s=ss.attribNames(e.name);for(let t of i){const n=t.geometry;for(let t of s){const i=n.getAttribute(t);if(i){let t=i;e.changeName&&\\\\\\\"\\\\\\\"!=e.newName&&(t=n.getAttribute(e.newName),t&&(t.needsUpdate=!0),t=t||i.clone()),this._normalize_attribute(i,t,e)}}}return n}_normalize_attribute(t,e,n){switch(hX[n.mode]){case cX.MIN_MAX_TO_01:return this._normalize_from_min_max_to_01(t,e);case cX.VECTOR_TO_LENGTH_1:return this._normalize_vectors(t,e)}}_normalize_from_min_max_to_01(t,e){const n=t.itemSize,i=t.array,s=e.array;switch(n){case 1:{const t=Math.min(...i),e=Math.max(...i);for(let n=0;n<s.length;n++)s[n]=(i[n]-t)/(e-t);return}case 3:{const t=i.length/n,e=new Array(t),r=new Array(t),o=new Array(t);let a=0;for(let s=0;s<t;s++)a=s*n,e[s]=i[a+0],r[s]=i[a+1],o[s]=i[a+2];this.min3.set(Math.min(...e),Math.min(...r),Math.min(...o)),this.max3.set(Math.max(...e),Math.max(...r),Math.max(...o));for(let i=0;i<t;i++)a=i*n,s[a+0]=(e[i]-this.min3.x)/(this.max3.x-this.min3.x),s[a+1]=(r[i]-this.min3.y)/(this.max3.y-this.min3.y),s[a+2]=(o[i]-this.min3.z)/(this.max3.z-this.min3.z);return}}}_normalize_vectors(t,e){const n=t.array,i=e.array,s=n.length;if(3==t.itemSize)for(let t=0;t<s;t+=3)this._vec.fromArray(n,t),this._vec.normalize(),this._vec.toArray(i,t)}}uX.DEFAULT_PARAMS={mode:0,name:\\\\\\\"position\\\\\\\",changeName:!1,newName:\\\\\\\"\\\\\\\"},uX.INPUT_CLONED_STATE=Qi.FROM_NODE;const dX=uX.DEFAULT_PARAMS;const pX=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(dX.mode,{menu:{entries:hX.map(((t,e)=>({name:t,value:e})))}}),this.name=ha.STRING(dX.name),this.changeName=ha.BOOLEAN(dX.changeName),this.newName=ha.STRING(dX.newName,{visibleIf:{changeName:1}})}};class _X extends uV{constructor(){super(...arguments),this.paramsConfig=pX}static type(){return\\\\\\\"attribNormalize\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(uX.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}set_mode(t){this.p.mode.set(hX.indexOf(t))}cook(t){this._operation=this._operation||new uX(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var mX;!function(t){t[t.MIN=0]=\\\\\\\"MIN\\\\\\\",t[t.MAX=1]=\\\\\\\"MAX\\\\\\\",t[t.FIRST_FOUND=2]=\\\\\\\"FIRST_FOUND\\\\\\\"}(mX||(mX={}));class fX extends aV{constructor(){super(...arguments),this._values_per_attrib_name={},this._filtered_values_per_attrib_name={}}static type(){return\\\\\\\"attribPromote\\\\\\\"}cook(t,e){this._core_group=t[0],this._values_per_attrib_name={},this._filtered_values_per_attrib_name={};for(let t of this._core_group.coreObjects())this._core_object=t,this.find_values(e),this.filter_values(e),this.set_values(e);return this._core_group}find_values(t){const e=ss.attribNames(t.name);for(let n of e)this._find_values_for_attrib_name(n,t)}_find_values_for_attrib_name(t,e){switch(e.classFrom){case Fs.VERTEX:return this.find_values_from_points(t,e);case Fs.OBJECT:return this.find_values_from_object(t,e)}}find_values_from_points(t,e){if(this._core_object){const e=this._core_object.points(),n=e[0];if(n&&!n.isAttribIndexed(t)){const n=new Array(e.length);let i;for(let s=0;s<e.length;s++)i=e[s],n[s]=i.attribValue(t);this._values_per_attrib_name[t]=n}}}find_values_from_object(t,e){this._values_per_attrib_name[t]=[],this._core_object&&this._values_per_attrib_name[t].push(this._core_object.attribValue(t))}filter_values(t){const e=Object.keys(this._values_per_attrib_name);for(let n of e){const e=this._values_per_attrib_name[n];switch(t.mode){case mX.MIN:this._filtered_values_per_attrib_name[n]=f.min(e);break;case mX.MAX:this._filtered_values_per_attrib_name[n]=f.max(e);break;case mX.FIRST_FOUND:this._filtered_values_per_attrib_name[n]=e[0]}}}set_values(t){const e=Object.keys(this._filtered_values_per_attrib_name);for(let n of e){const e=this._filtered_values_per_attrib_name[n];if(null!=e)switch(t.classTo){case Fs.VERTEX:this.set_values_to_points(n,e,t);break;case Fs.OBJECT:this.set_values_to_object(n,e,t)}}}set_values_to_points(t,e,n){if(this._core_group&&this._core_object){if(!this._core_group.hasAttrib(t)){const n=Xs.attribSizeFromValue(e);n&&this._core_group.addNumericVertexAttrib(t,n,e)}const n=this._core_object.points();for(let i of n)i.setAttribValue(t,e)}}set_values_to_object(t,e,n){var i;null===(i=this._core_object)||void 0===i||i.setAttribValue(t,e)}}fX.DEFAULT_PARAMS={classFrom:Fs.VERTEX,classTo:Fs.OBJECT,mode:mX.FIRST_FOUND,name:\\\\\\\"\\\\\\\"},fX.INPUT_CLONED_STATE=Qi.FROM_NODE;const gX=[{name:\\\\\\\"min\\\\\\\",value:mX.MIN},{name:\\\\\\\"max\\\\\\\",value:mX.MAX},{name:\\\\\\\"first_found\\\\\\\",value:mX.FIRST_FOUND}],vX=fX.DEFAULT_PARAMS;const yX=new class extends ua{constructor(){super(...arguments),this.classFrom=ha.INTEGER(vX.classFrom,{menu:{entries:Bs}}),this.classTo=ha.INTEGER(vX.classTo,{menu:{entries:Bs}}),this.mode=ha.INTEGER(vX.mode,{menu:{entries:gX}}),this.name=ha.STRING(vX.name)}};class xX extends uV{constructor(){super(...arguments),this.paramsConfig=yX}static type(){return\\\\\\\"attribPromote\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(fX.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name,this.p.classFrom,this.p.classTo],(()=>{if(\\\\\\\"\\\\\\\"!=this.pv.name){const t=Bs.filter((t=>t.value==this.pv.classFrom))[0].name,e=Bs.filter((t=>t.value==this.pv.classTo))[0].name;return`${this.pv.name} (${t} -> ${e})`}return\\\\\\\"\\\\\\\"}))}))}))}cook(t){this._operation=this._operation||new fX(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const bX=new class extends ua{constructor(){super(...arguments),this.name=ha.STRING(),this.ramp=ha.RAMP(),this.changeName=ha.BOOLEAN(0),this.newName=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{changeName:1}})}};class wX extends uV{constructor(){super(...arguments),this.paramsConfig=bX}static type(){return\\\\\\\"attribRemap\\\\\\\"}initializeNode(){this.io.inputs.setCount(1)}cook(t){const e=t[0];this._remap_attribute(e),this.setCoreGroup(e)}_remap_attribute(t){const e=t.points();if(0===e.length)return;if(\\\\\\\"\\\\\\\"===this.pv.name)return;const n=e[0].attribSize(this.pv.name),i=e.map((t=>t.attribValue(this.pv.name)));let s=new Array(e.length);this._get_remaped_values(n,i,s);let r=this.pv.name;this.pv.changeName&&(r=this.pv.newName,t.hasAttrib(r)||t.addNumericVertexAttrib(r,n,0));let o=0;for(let t of s){e[o].setAttribValue(r,t),o++}}_get_remaped_values(t,e,n){switch(t){case Gs.FLOAT:return this._get_normalized_float(e,n);case Gs.VECTOR2:return this._get_normalized_vector2(e,n);case Gs.VECTOR3:return this._get_normalized_vector3(e,n);case Gs.VECTOR4:return this._get_normalized_vector4(e,n)}os.unreachable(t)}_get_normalized_float(t,e){const n=t,i=this.p.ramp;for(let t=0;t<n.length;t++){const s=n[t],r=i.valueAtPosition(s);e[t]=r}}_get_normalized_vector2(t,e){const n=t,i=this.p.ramp;for(let t=0;t<n.length;t++){const s=n[t],r=new d.a(i.valueAtPosition(s.x),i.valueAtPosition(s.y));e[t]=r}}_get_normalized_vector3(t,e){const n=t,i=this.p.ramp;for(let t=0;t<n.length;t++){const s=n[t],r=new p.a(i.valueAtPosition(s.x),i.valueAtPosition(s.y),i.valueAtPosition(s.z));e[t]=r}}_get_normalized_vector4(t,e){const n=t,i=this.p.ramp;for(let t=0;t<n.length;t++){const s=n[t],r=new _.a(i.valueAtPosition(s.x),i.valueAtPosition(s.y),i.valueAtPosition(s.z),i.valueAtPosition(s.w));e[t]=r}}}const TX=new class extends ua{constructor(){super(...arguments),this.class=ha.INTEGER(Fs.VERTEX,{menu:{entries:Bs}}),this.oldName=ha.STRING(),this.newName=ha.STRING()}};class AX extends uV{constructor(){super(...arguments),this.paramsConfig=TX}static type(){return\\\\\\\"attribRename\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.oldName,this.p.newName],(()=>\\\\\\\"\\\\\\\"!=this.pv.oldName&&\\\\\\\"\\\\\\\"!=this.pv.newName?`${this.pv.oldName} -> ${this.pv.newName}`:\\\\\\\"\\\\\\\"))}))}))}cook(t){const e=t[0];e.renameAttrib(this.pv.oldName,this.pv.newName,this.pv.class),this.setCoreGroup(e)}}var MX=n(18);class EX{constructor(t,e=0){this._bbox=t,this._level=e,this._leaves_by_octant={},this._points_by_octant_id={},this._leaves=[],this._bounding_boxes_by_octant={},this._bounding_boxes_by_octant_prepared=!1,this._center=this._bbox.max.clone().add(this._bbox.min).multiplyScalar(.5)}level(){return this._level}traverse(t){t(this);Object.values(this._leaves_by_octant).forEach((e=>{e.traverse(t)}))}intersects_sphere(t){return!!this._bbox&&this._bbox.intersectsSphere(t)}points_in_sphere(t,e){if(0==this._leaves.length){Object.values(this._points_by_octant_id).flat().filter((e=>t.containsPoint(e.position()))).forEach((t=>{e.push(t)}))}else{this._leaves.filter((e=>e.intersects_sphere(t))).forEach((n=>n.points_in_sphere(t,e)))}}bounding_box(){return this._bbox}set_points(t){this._points_by_octant_id={};for(let e of t)this.add_point(e);const e=Object.keys(this._points_by_octant_id);e.length>1&&e.forEach((t=>{this.create_leaf(t)}))}create_leaf(t){const e=this._leaf_bbox(t),n=new EX(e,this._level+1);this._leaves_by_octant[t]=n,this._leaves.push(n),n.set_points(this._points_by_octant_id[t])}add_point(t){const e=this._octant_id(t.position());null==this._points_by_octant_id[e]&&(this._points_by_octant_id[e]=[]),this._points_by_octant_id[e].push(t)}_octant_id(t){return`${t.x>this._center.x?1:0}${t.y>this._center.y?1:0}${t.z>this._center.z?1:0}`}_leaf_bbox(t){return this._bounding_boxes_by_octant_prepared||(this._prepare_leaves_bboxes(),this._bounding_boxes_by_octant_prepared=!0),this._bounding_boxes_by_octant[t]}_bbox_center(t,e,n){const i=this._bbox.min.clone();return t&&(i.x=this._bbox.max.x),e&&(i.y=this._bbox.max.y),n&&(i.z=this._bbox.max.z),i.clone().add(this._center).multiplyScalar(.5)}_prepare_leaves_bboxes(){const t=[];t.push(this._bbox_center(0,0,0)),t.push(this._bbox_center(0,0,1)),t.push(this._bbox_center(0,1,0)),t.push(this._bbox_center(0,1,1)),t.push(this._bbox_center(1,0,0)),t.push(this._bbox_center(1,0,1)),t.push(this._bbox_center(1,1,0)),t.push(this._bbox_center(1,1,1));const e=this._bbox.max.clone().sub(this._bbox.min).multiplyScalar(.25);for(let n of t){const t=this._octant_id(n),i=new Ry.a(n.clone().sub(e),n.clone().add(e));this._bounding_boxes_by_octant[t]=i}}}class SX{constructor(t){this._root=new EX(t)}set_points(t){this._root.set_points(t)}traverse(t){this._root.traverse(t)}find_points(t,e,n){const i=new MX.a(t,e);let s=[];return this._root.intersects_sphere(i)&&this._root.points_in_sphere(i,s),null==n||s.length>n&&(s=f.sortBy(s,(e=>e.position().distanceTo(t))),s=s.slice(0,n)),s}}class CX{constructor(t={}){this._array_index=0,this._count=0,this._current_count_index=0,this._resolve=null,this._max_time_per_chunk=t.max_time_per_chunk||10,this._check_every_interations=t.check_every_interations||100}async startWithCount(t,e){if(this._count=t,this._current_count_index=0,this._iteratee_method_count=e,this._bound_next_with_count=this.nextWithCount.bind(this),this._resolve)throw\\\\\\\"an iterator cannot be started twice\\\\\\\";return new Promise(((t,e)=>{this._resolve=t,this.nextWithCount()}))}nextWithCount(){const t=li.performance.performanceManager(),e=t.now();if(this._iteratee_method_count&&this._bound_next_with_count)for(;this._current_count_index<this._count;)if(this._iteratee_method_count(this._current_count_index),this._current_count_index++,this._current_count_index%this._check_every_interations==0&&t.now()-e>this._max_time_per_chunk){setTimeout(this._bound_next_with_count,1);break}this._current_count_index>=this._count&&this._resolve&&this._resolve()}async startWithArray(t,e){if(this._array=t,this._array_index=0,this._iteratee_method_array=e,this._bound_next_with_array=this.nextWithArray.bind(this),this._resolve)throw\\\\\\\"an iterator cannot be started twice\\\\\\\";return new Promise(((t,e)=>{this._resolve=t,this.nextWithArray()}))}nextWithArray(){const t=li.performance.performanceManager(),e=t.now();if(this._iteratee_method_array&&this._bound_next_with_array&&this._array)for(;this._current_array_element=this._array[this._array_index];)if(this._iteratee_method_array(this._current_array_element,this._array_index),this._array_index++,this._array_index%this._check_every_interations==0&&t.now()-e>this._max_time_per_chunk){setTimeout(this._bound_next_with_array,1);break}void 0===this._current_array_element&&this._resolve&&this._resolve()}}const NX=new class extends ua{constructor(){super(...arguments),this.srcGroup=ha.STRING(),this.destGroup=ha.STRING(),this.name=ha.STRING(),this.maxSamplesCount=ha.INTEGER(1,{range:[1,10],rangeLocked:[!0,!1]}),this.distanceThreshold=ha.FLOAT(1),this.blendWidth=ha.FLOAT(0)}};class LX extends uV{constructor(){super(...arguments),this.paramsConfig=NX}static type(){return\\\\\\\"attribTransfer\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to transfer attributes to\\\\\\\",\\\\\\\"geometry to transfer attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER])}async cook(t){this._core_group_dest=t[0];const e=this._core_group_dest.pointsFromGroup(this.pv.destGroup);this._core_group_src=t[1],this._attrib_names=this._core_group_src.attribNamesMatchingMask(this.pv.name),this._error_if_attribute_not_found_on_second_input(),this._build_octree_if_required(this._core_group_src),this._add_attribute_if_required(),await this._transfer_attributes(e),this.setCoreGroup(this._core_group_dest)}_error_if_attribute_not_found_on_second_input(){for(let t of this._attrib_names)this._core_group_src.hasAttrib(t)||this.states.error.set(`attribute '${t}' not found on second input`)}_build_octree_if_required(t){const e=null==this._octree_timestamp||this._octree_timestamp!==t.timestamp();if(this._prev_param_srcGroup!==this.pv.srcGroup||e){this._octree_timestamp=t.timestamp(),this._prev_param_srcGroup=this.pv.srcGroup;const e=this._core_group_src.pointsFromGroup(this.pv.srcGroup);this._octree=new SX(this._core_group_src.boundingBox()),this._octree.set_points(e)}}_add_attribute_if_required(){for(let t of this._attrib_names)if(!this._core_group_dest.hasAttrib(t)){const e=this._core_group_src.attribSize(t);this._core_group_dest.addNumericVertexAttrib(t,e,0)}}async _transfer_attributes(t){const e=new CX;await e.startWithArray(t,this._transfer_attributes_for_point.bind(this))}_transfer_attributes_for_point(t){var e;const n=this.pv.distanceThreshold+this.pv.blendWidth,i=(null===(e=this._octree)||void 0===e?void 0:e.find_points(t.position(),n,this.pv.maxSamplesCount))||[];for(let e of this._attrib_names)this._interpolate_points(t,i,e)}_interpolate_points(t,e,n){let i;i=class{static perform(t,e,n,i,s){switch(e.length){case 0:return t.attribValue(n);case 1:return this._interpolate_with_1_point(t,e[0],n,i,s);default:return this._interpolate_with_multiple_points(t,e,n,i,s)}}static _interpolate_with_1_point(t,e,n,i,s){const r=t.position(),o=e.position(),a=r.distanceTo(o),l=e.attribValue(n);return m.isNumber(l)?this._weighted_value_from_distance(t,l,n,a,i,s):(console.warn(\\\\\\\"value is not a number\\\\\\\",l),0)}static _weight_from_distance(t,e,n){return(t-e)/n}static _weighted_value_from_distance(t,e,n,i,s,r){if(i<=s)return e;{const o=t.attribValue(n);if(m.isNumber(o)){const t=this._weight_from_distance(i,s,r);return t*o+(1-t)*e}return console.warn(\\\\\\\"value is not a number\\\\\\\",o),0}}static _interpolate_with_multiple_points(t,e,n,i,s){const r=e.map((e=>this._interpolate_with_1_point(t,e,n,i,s)));return f.max(r)||0}static weights(t,e){switch(e.length){case 1:return 1;case 2:return this._weights_from_2(t,e);default:return e=e.slice(0,3),this._weights_from_3(t,e)}}static _weights_from_2(t,e){const n=e.map((e=>t.distanceTo(e))),i=f.sum(n);return[n[1]/i,n[0]/i]}static _weights_from_3(t,e){const n=e.map((e=>t.distanceTo(e))),i=f.sum([n[0]*n[1],n[0]*n[2],n[1]*n[2]]);return[n[1]*n[2]/i,n[0]*n[2]/i,n[0]*n[1]/i]}}.perform(t,e,n,this.pv.distanceThreshold,this.pv.blendWidth),null!=i&&t.setAttribValue(n,i)}}const OX=new class extends ua{constructor(){super(...arguments),this.stepSize=ha.FLOAT(.1)}};class PX extends uV{constructor(){super(...arguments),this.paramsConfig=OX}static type(){return\\\\\\\"bboxScatter\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create points from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1)}cook(t){const e=t[0],n=this.pv.stepSize,i=e.boundingBox(),s=i.min,r=i.max,o=[];for(let t=s.x;t<=r.x;t+=n)for(let e=s.y;e<=r.y;e+=n)for(let i=s.z;i<=r.z;i+=n)o.push(t),o.push(e),o.push(i);const a=new S.a;a.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(o),3)),this.setGeometry(a,Ns.POINTS)}}const RX=new class extends ua{constructor(){super(...arguments),this.attribName=ha.STRING(\\\\\\\"position\\\\\\\"),this.blend=ha.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!0]})}};class IX extends uV{constructor(){super(...arguments),this.paramsConfig=RX}static type(){return\\\\\\\"blend\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to blend from\\\\\\\",\\\\\\\"geometry to blend to\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER])}cook(t){const e=t[0],n=t[1],i=e.objects(),s=n.objects();let r,o;for(let t=0;t<i.length;t++)r=i[t],o=s[t],this.blend(r,o,this.pv.blend);this.setCoreGroup(e)}blend(t,e,n){const i=t.geometry,s=e.geometry;if(null==i||null==s)return;const r=i.getAttribute(this.pv.attribName),o=s.getAttribute(this.pv.attribName);if(null==r||null==o)return;const a=r.array,l=o.array;let c,h;for(let t=0;t<a.length;t++)c=a[t],h=l[t],null!=h&&(a[t]=(1-n)*c+n*h);i.computeVertexNormals()}}class FX{constructor(){this.polygons=[]}clone(){let t=new FX;return t.polygons=this.polygons.map((function(t){return t.clone()})),t}toPolygons(){return this.polygons}union(t){let e=new VX(this.clone().polygons),n=new VX(t.clone().polygons);return e.clipTo(n),n.clipTo(e),n.invert(),n.clipTo(e),n.invert(),e.build(n.allPolygons()),FX.fromPolygons(e.allPolygons())}subtract(t){let e=new VX(this.clone().polygons),n=new VX(t.clone().polygons);return e.invert(),e.clipTo(n),n.clipTo(e),n.invert(),n.clipTo(e),n.invert(),e.build(n.allPolygons()),e.invert(),FX.fromPolygons(e.allPolygons())}intersect(t){let e=new VX(this.clone().polygons),n=new VX(t.clone().polygons);return e.invert(),n.clipTo(e),n.invert(),e.clipTo(n),n.clipTo(e),e.build(n.allPolygons()),e.invert(),FX.fromPolygons(e.allPolygons())}inverse(){let t=this.clone();return t.polygons.forEach((t=>t.flip())),t}}FX.fromPolygons=function(t){let e=new FX;return e.polygons=t,e};class DX{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}clone(){return new DX(this.x,this.y,this.z)}negate(){return this.x*=-1,this.y*=-1,this.z*=-1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}times(t){return this.x*=t,this.y*=t,this.z*=t,this}dividedBy(t){return this.x/=t,this.y/=t,this.z/=t,this}lerp(t,e){return this.add(BX.copy(t).sub(this).times(e))}unit(){return this.dividedBy(this.length())}length(){return Math.sqrt(this.x**2+this.y**2+this.z**2)}normalize(){return this.unit()}cross(t){let e=this;const n=e.x,i=e.y,s=e.z,r=t.x,o=t.y,a=t.z;return this.x=i*a-s*o,this.y=s*r-n*a,this.z=n*o-i*r,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}}let BX=new DX,zX=new DX;class kX{constructor(t,e,n,i){this.pos=(new DX).copy(t),this.normal=(new DX).copy(e),this.uv=(new DX).copy(n),this.uv.z=0,i&&(this.color=(new DX).copy(i))}clone(){return new kX(this.pos,this.normal,this.uv,this.color)}flip(){this.normal.negate()}interpolate(t,e){return new kX(this.pos.clone().lerp(t.pos,e),this.normal.clone().lerp(t.normal,e),this.uv.clone().lerp(t.uv,e),this.color&&t.color&&this.color.clone().lerp(t.color,e))}}class UX{constructor(t,e){this.normal=t,this.w=e}clone(){return new UX(this.normal.clone(),this.w)}flip(){this.normal.negate(),this.w=-this.w}splitPolygon(t,e,n,i,s){let r=0,o=[];for(let e=0;e<t.vertices.length;e++){let n=this.normal.dot(t.vertices[e].pos)-this.w,i=n<-UX.EPSILON?2:n>UX.EPSILON?1:0;r|=i,o.push(i)}switch(r){case 0:(this.normal.dot(t.plane.normal)>0?e:n).push(t);break;case 1:i.push(t);break;case 2:s.push(t);break;case 3:let r=[],a=[];for(let e=0;e<t.vertices.length;e++){let n=(e+1)%t.vertices.length,i=o[e],s=o[n],l=t.vertices[e],c=t.vertices[n];if(2!=i&&r.push(l),1!=i&&a.push(2!=i?l.clone():l),3==(i|s)){let t=(this.w-this.normal.dot(l.pos))/this.normal.dot(BX.copy(c.pos).sub(l.pos)),e=l.interpolate(c,t);r.push(e),a.push(e.clone())}}r.length>=3&&i.push(new GX(r,t.shared)),a.length>=3&&s.push(new GX(a,t.shared))}}}UX.EPSILON=1e-5,UX.fromPoints=function(t,e,n){let i=BX.copy(e).sub(t).cross(zX.copy(n).sub(t)).normalize();return new UX(i.clone(),i.dot(t))};class GX{constructor(t,e){this.vertices=t,this.shared=e,this.plane=UX.fromPoints(t[0].pos,t[1].pos,t[2].pos)}clone(){return new GX(this.vertices.map((t=>t.clone())),this.shared)}flip(){this.vertices.reverse().map((t=>t.flip())),this.plane.flip()}}class VX{constructor(t){this.plane=null,this.front=null,this.back=null,this.polygons=[],t&&this.build(t)}clone(){let t=new VX;return t.plane=this.plane&&this.plane.clone(),t.front=this.front&&this.front.clone(),t.back=this.back&&this.back.clone(),t.polygons=this.polygons.map((t=>t.clone())),t}invert(){for(let t=0;t<this.polygons.length;t++)this.polygons[t].flip();this.plane&&this.plane.flip(),this.front&&this.front.invert(),this.back&&this.back.invert();let t=this.front;this.front=this.back,this.back=t}clipPolygons(t){if(!this.plane)return t.slice();let e=[],n=[];for(let i=0;i<t.length;i++)this.plane.splitPolygon(t[i],e,n,e,n);return this.front&&(e=this.front.clipPolygons(e)),n=this.back?this.back.clipPolygons(n):[],e.concat(n)}clipTo(t){this.polygons=t.clipPolygons(this.polygons),this.front&&this.front.clipTo(t),this.back&&this.back.clipTo(t)}allPolygons(){let t=this.polygons.slice();return this.front&&(t=t.concat(this.front.allPolygons())),this.back&&(t=t.concat(this.back.allPolygons())),t}build(t){if(!t.length)return;this.plane||(this.plane=t[0].plane.clone());let e=[],n=[];for(let i=0;i<t.length;i++)this.plane.splitPolygon(t[i],this.polygons,this.polygons,e,n);e.length&&(this.front||(this.front=new VX),this.front.build(e)),n.length&&(this.back||(this.back=new VX),this.back.build(n))}}FX.fromJSON=function(t){return FX.fromPolygons(t.polygons.map((t=>new GX(t.vertices.map((t=>new kX(t.pos,t.normal,t.uv))),t.shared))))},FX.fromGeometry=function(t,e){let n=[];if(t.isGeometry){let i=t.faces,s=t.vertices,r=[\\\\\\\"a\\\\\\\",\\\\\\\"b\\\\\\\",\\\\\\\"c\\\\\\\"];for(let o=0;o<i.length;o++){let a=i[o],l=[];for(let e=0;e<3;e++)l.push(new kX(s[a[r[e]]],a.vertexNormals[e],t.faceVertexUvs[0][o][e]));n.push(new GX(l,e))}}else if(t.isBufferGeometry){let i,s=t.attributes.position,r=t.attributes.normal,o=t.attributes.uv,a=t.attributes.color;if(t.index)i=t.index.array;else{i=new Array(s.array.length/s.itemSize|0);for(let t=0;t<i.length;t++)i[t]=t}let l=i.length/3|0;n=new Array(l);for(let t=0,l=0,c=i.length;t<c;t+=3,l++){let c=new Array(3);for(let e=0;e<3;e++){let n=i[t+e],l=3*n,h=2*n,u=s.array[l],d=s.array[l+1],p=s.array[l+2],_=r.array[l],m=r.array[l+1],f=r.array[l+2],g=o.array[h],v=o.array[h+1];c[e]=new kX({x:u,y:d,z:p},{x:_,y:m,z:f},{x:g,y:v,z:0},a&&{x:a.array[h],y:a.array[h+1],z:a.array[h+2]})}n[l]=new GX(c,e)}}else console.error(\\\\\\\"Unsupported CSG input type:\\\\\\\"+t.type);return FX.fromPolygons(n)};let HX=new p.a,jX=new G.a;FX.fromMesh=function(t,e){let n=FX.fromGeometry(t.geometry,e);jX.getNormalMatrix(t.matrix);for(let e=0;e<n.polygons.length;e++){let i=n.polygons[e];for(let e=0;e<i.vertices.length;e++){let n=i.vertices[e];n.pos.copy(HX.copy(n.pos).applyMatrix4(t.matrix)),n.normal.copy(HX.copy(n.normal).applyMatrix3(jX))}}return n};let WX=t=>({top:0,array:new Float32Array(t),write:function(t){this.array[this.top++]=t.x,this.array[this.top++]=t.y,this.array[this.top++]=t.z}}),qX=t=>({top:0,array:new Float32Array(t),write:function(t){this.array[this.top++]=t.x,this.array[this.top++]=t.y}});var XX;FX.toMesh=function(t,e,n){let i,s,r=t.polygons;{let t=0;r.forEach((e=>t+=e.vertices.length-2)),i=new S.a;let e,n=WX(3*t*3),o=WX(3*t*3),a=qX(2*t*3),l=[];if(r.forEach((i=>{let s=i.vertices,r=s.length;void 0!==i.shared&&(l[i.shared]||(l[i.shared]=[])),r&&void 0!==s[0].color&&(e||(e=WX(3*t*3)));for(let t=3;t<=r;t++)void 0!==i.shared&&l[i.shared].push(n.top/3,n.top/3+1,n.top/3+2),n.write(s[0].pos),n.write(s[t-2].pos),n.write(s[t-1].pos),o.write(s[0].normal),o.write(s[t-2].normal),o.write(s[t-1].normal),a.write(s[0].uv),a.write(s[t-2].uv),a.write(s[t-1].uv),e&&(e.write(s[0].color)||e.write(s[t-2].color)||e.write(s[t-1].color))})),i.setAttribute(\\\\\\\"position\\\\\\\",new C.a(n.array,3)),i.setAttribute(\\\\\\\"normal\\\\\\\",new C.a(o.array,3)),i.setAttribute(\\\\\\\"uv\\\\\\\",new C.a(a.array,2)),e&&i.setAttribute(\\\\\\\"color\\\\\\\",new C.a(e.array,3)),l.length){let t=[],e=0;for(let n=0;n<l.length;n++)i.addGroup(e,l[n].length,n),e+=l[n].length,t=t.concat(l[n]);i.setIndex(t)}s=i}let o=(new A.a).copy(e).invert();i.applyMatrix4(o),i.computeBoundingSphere(),i.computeBoundingBox();let a=new B.a(i,n);return a.matrix.copy(e),a.matrix.decompose(a.position,a.quaternion,a.scale),a.rotation.setFromQuaternion(a.quaternion),a.updateMatrixWorld(),a.castShadow=a.receiveShadow=!0,a},function(t){t.INTERSECT=\\\\\\\"intersect\\\\\\\",t.SUBSTRACT=\\\\\\\"substract\\\\\\\",t.UNION=\\\\\\\"union\\\\\\\"}(XX||(XX={}));const YX=[XX.INTERSECT,XX.SUBSTRACT,XX.UNION];class $X extends aV{static type(){return\\\\\\\"boolean\\\\\\\"}cook(t,e){const n=t[0].objectsWithGeo()[0],i=t[1].objectsWithGeo()[0],s=this._applyBooleaOperation(n,i,e);let r=n.material;if(e.useBothMaterials){r=m.isArray(r)?r[0]:r;let t=i.material;t=m.isArray(t)?t[0]:t,r=[r,t]}const o=FX.toMesh(s,n.matrix,r);return this.createCoreGroupFromObjects([o])}_applyBooleaOperation(t,e,n){const i=YX[n.operation];let s=FX.fromMesh(t,0),r=FX.fromMesh(e,1);switch(i){case XX.INTERSECT:return s.intersect(r);case XX.SUBSTRACT:return s.subtract(r);case XX.UNION:return s.union(r)}os.unreachable(i)}}$X.DEFAULT_PARAMS={operation:YX.indexOf(XX.INTERSECT),useBothMaterials:!0},$X.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.NEVER];const JX=$X.DEFAULT_PARAMS;const ZX=new class extends ua{constructor(){super(...arguments),this.operation=ha.INTEGER(JX.operation,{menu:{entries:YX.map(((t,e)=>({name:t,value:e})))}}),this.useBothMaterials=ha.BOOLEAN(JX.useBothMaterials)}};class KX extends uV{constructor(){super(...arguments),this.paramsConfig=ZX}static type(){return\\\\\\\"boolean\\\\\\\"}initializeNode(){super.initializeNode(),this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState($X.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.operation],(()=>YX[this.pv.operation]))}))}))}setOperation(t){this.p.operation.set(YX.indexOf(t))}async cook(t){this._operation=this._operation||new $X(this.scene(),this.states,this);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class QX extends aV{constructor(){super(...arguments),this._core_transform=new bU}static type(){return\\\\\\\"box\\\\\\\"}cook(t,e){const n=t[0],i=n?this._cookWithInput(n,e):this._cookWithoutInput(e);return this.createCoreGroupFromGeometry(i)}_cookWithoutInput(t){const e=t.divisions,n=t.size,i=new N(n,n,n,e,e,e);return i.translate(t.center.x,t.center.y,t.center.z),i.computeVertexNormals(),i}_cookWithInput(t,e){const n=e.divisions,i=t.boundingBox(),s=i.max.clone().sub(i.min),r=i.max.clone().add(i.min).multiplyScalar(.5),o=new N(s.x,s.y,s.z,n,n,n),a=this._core_transform.translationMatrix(r);return o.applyMatrix4(a),o}}QX.DEFAULT_PARAMS={size:1,divisions:1,center:new p.a(0,0,0)},QX.INPUT_CLONED_STATE=Qi.NEVER;const tY=QX.DEFAULT_PARAMS;const eY=new class extends ua{constructor(){super(...arguments),this.size=ha.FLOAT(tY.size),this.divisions=ha.INTEGER(tY.divisions,{range:[1,10],rangeLocked:[!0,!1]}),this.center=ha.VECTOR3(tY.center)}};class nY extends uV{constructor(){super(...arguments),this.paramsConfig=eY}static type(){return\\\\\\\"box\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create bounding box from (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(QX.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new QX(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class iY{constructor(){}}function sY(t,e,n){return n.min.x=e[t],n.min.y=e[t+1],n.min.z=e[t+2],n.max.x=e[t+3],n.max.y=e[t+4],n.max.z=e[t+5],n}function rY(t){let e=-1,n=-1/0;for(let i=0;i<3;i++){const s=t[i+3]-t[i];s>n&&(n=s,e=i)}return e}function oY(t,e){e.set(t)}function aY(t,e,n){let i,s;for(let r=0;r<3;r++){const o=r+3;i=t[r],s=e[r],n[r]=i<s?i:s,i=t[o],s=e[o],n[o]=i>s?i:s}}function lY(t){const e=t[3]-t[0],n=t[4]-t[1],i=t[5]-t[2];return 2*(e*n+n*i+i*e)}const cY=Math.pow(2,-24);function hY(t,e,n,i,s=null){let r=1/0,o=1/0,a=1/0,l=-1/0,c=-1/0,h=-1/0,u=1/0,d=1/0,p=1/0,_=-1/0,m=-1/0,f=-1/0;const g=null!==s;for(let i=6*e,s=6*(e+n);i<s;i+=6){const e=t[i+0],n=t[i+1],s=e-n,v=e+n;s<r&&(r=s),v>l&&(l=v),g&&e<u&&(u=e),g&&e>_&&(_=e);const y=t[i+2],x=t[i+3],b=y-x,w=y+x;b<o&&(o=b),w>c&&(c=w),g&&y<d&&(d=y),g&&y>m&&(m=y);const T=t[i+4],A=t[i+5],M=T-A,E=T+A;M<a&&(a=M),E>h&&(h=E),g&&T<p&&(p=T),g&&T>f&&(f=T)}i[0]=r,i[1]=o,i[2]=a,i[3]=l,i[4]=c,i[5]=h,g&&(s[0]=u,s[1]=d,s[2]=p,s[3]=_,s[4]=m,s[5]=f)}const uY=32,dY=new Array(uY).fill().map((()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),candidate:0}))),pY=new Float32Array(6);function _Y(t,e){function n(e,i,d,p=null,_=0){if(!u&&_>=a&&(u=!0,l&&(console.warn(`MeshBVH: Max depth of ${a} reached when generating BVH. Consider increasing maxDepth.`),console.warn(t))),d<=c||_>=a)return e.offset=i,e.count=d,e;const m=function(t,e,n,i,s,r){let o=-1,a=0;if(0===r)o=rY(e),-1!==o&&(a=(e[o]+e[o+3])/2);else if(1===r)o=rY(t),-1!==o&&(a=function(t,e,n,i){let s=0;for(let r=e,o=e+n;r<o;r++)s+=t[6*r+2*i];return s/n}(n,i,s,o));else if(2===r){const r=lY(t);let l=1.25*s;const c=6*i,h=6*(i+s);for(let t=0;t<3;t++){const i=e[t],u=(e[t+3]-i)/uY;for(let t=0;t<uY;t++){const e=dY[t];e.count=0,e.candidate=i+u+t*u;const n=e.bounds;for(let t=0;t<3;t++)n[t]=1/0,n[t+3]=-1/0}for(let e=c;e<h;e+=6){let s=~~((n[e+2*t]-i)/u);s>=uY&&(s=31);const r=dY[s];r.count++;const o=r.bounds;for(let t=0;t<3;t++){const i=n[e+2*t],s=n[e+2*t+1],r=i-s,a=i+s;r<o[t]&&(o[t]=r),a>o[t+3]&&(o[t+3]=a)}}const d=dY[31];oY(d.bounds,d.rightCacheBounds);for(let t=30;t>=0;t--){const e=dY[t],n=dY[t+1];aY(e.bounds,n.rightCacheBounds,e.rightCacheBounds)}let p=0;for(let e=0;e<31;e++){const n=dY[e],i=n.count,c=n.bounds,h=dY[e+1].rightCacheBounds;0!==i&&(0===p?oY(c,pY):aY(c,pY,pY)),p+=i;let u=0,d=0;0!==p&&(u=lY(pY)/r);const _=s-p;0!==_&&(d=lY(h)/r);const m=1+1.25*(u*p+d*_);m<l&&(o=t,l=m,a=n.candidate)}}}return{axis:o,pos:a}}(e.boundingData,p,r,i,d,h);if(-1===m.axis)return e.offset=i,e.count=d,e;const f=function(t,e,n,i,s){let r=n,o=n+i-1;const a=s.pos,l=2*s.axis;for(;;){for(;r<=o&&e[6*r+l]<a;)r++;for(;r<=o&&e[6*o+l]>=a;)o--;if(!(r<o))return r;for(let n=0;n<3;n++){let i=t[3*r+n];t[3*r+n]=t[3*o+n],t[3*o+n]=i;let s=e[6*r+2*n+0];e[6*r+2*n+0]=e[6*o+2*n+0],e[6*o+2*n+0]=s;let a=e[6*r+2*n+1];e[6*r+2*n+1]=e[6*o+2*n+1],e[6*o+2*n+1]=a}r++,o--}}(o,r,i,d,m);if(f===i||f===i+d)e.offset=i,e.count=d;else{e.splitAxis=m.axis;const t=new iY,o=i,a=f-i;e.left=t,t.boundingData=new Float32Array(6),hY(r,o,a,t.boundingData,s),n(t,o,a,s,_+1);const l=new iY,c=f,h=d-a;e.right=l,l.boundingData=new Float32Array(6),hY(r,c,h,l.boundingData,s),n(l,c,h,s,_+1)}return e}!function(t,e){if(!t.index){const n=t.attributes.position.count,i=e.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer;let s;s=n>65535?new Uint32Array(new i(4*n)):new Uint16Array(new i(2*n)),t.setIndex(new Qw(s,1));for(let t=0;t<n;t++)s[t]=t}}(t,e);const i=new Float32Array(6),s=new Float32Array(6),r=function(t,e){const n=t.attributes.position,i=n.array,s=t.index.array,r=s.length/3,o=new Float32Array(6*r),a=n.offset||0;let l=3;n.isInterleavedBufferAttribute&&(l=n.data.stride);for(let t=0;t<r;t++){const n=3*t,r=6*t,c=s[n+0]*l+a,h=s[n+1]*l+a,u=s[n+2]*l+a;for(let t=0;t<3;t++){const n=i[c+t],s=i[h+t],a=i[u+t];let l=n;s<l&&(l=s),a<l&&(l=a);let d=n;s>d&&(d=s),a>d&&(d=a);const p=(d-l)/2,_=2*t;o[r+_+0]=l+p,o[r+_+1]=p+(Math.abs(l)+p)*cY,l<e[t]&&(e[t]=l),d>e[t+3]&&(e[t+3]=d)}}return o}(t,i),o=t.index.array,a=e.maxDepth,l=e.verbose,c=e.maxLeafTris,h=e.strategy;let u=!1;const d=[],p=function(t){if(!t.groups||!t.groups.length)return[{offset:0,count:t.index.count/3}];const e=[],n=new Set;for(const e of t.groups)n.add(e.start),n.add(e.start+e.count);const i=Array.from(n.values()).sort(((t,e)=>t-e));for(let t=0;t<i.length-1;t++){const n=i[t],s=i[t+1];e.push({offset:n/3,count:(s-n)/3})}return e}(t);if(1===p.length){const t=p[0],e=new iY;e.boundingData=i,function(t,e,n,i){let s=1/0,r=1/0,o=1/0,a=-1/0,l=-1/0,c=-1/0;for(let i=6*e,h=6*(e+n);i<h;i+=6){const e=t[i+0];e<s&&(s=e),e>a&&(a=e);const n=t[i+2];n<r&&(r=n),n>l&&(l=n);const h=t[i+4];h<o&&(o=h),h>c&&(c=h)}i[0]=s,i[1]=r,i[2]=o,i[3]=a,i[4]=l,i[5]=c}(r,t.offset,t.count,s),n(e,t.offset,t.count,s),d.push(e)}else for(let t of p){const e=new iY;e.boundingData=new Float32Array(6),hY(r,t.offset,t.count,e.boundingData,s),n(e,t.offset,t.count,s),d.push(e)}return d}const mY=65535;class fY{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(t,e){let n=1/0,i=-1/0;for(let s=0,r=t.length;s<r;s++){const r=t[s][e];n=r<n?r:n,i=r>i?r:i}this.min=n,this.max=i}setFromPoints(t,e){let n=1/0,i=-1/0;for(let s=0,r=e.length;s<r;s++){const r=e[s],o=t.dot(r);n=o<n?o:n,i=o>i?o:i}this.min=n,this.max=i}isSeparated(t){return this.min>t.max||t.min>this.max}}fY.prototype.setFromBox=function(){const t=new Sb;return function(e,n){const i=n.min,s=n.max;let r=1/0,o=-1/0;for(let n=0;n<=1;n++)for(let a=0;a<=1;a++)for(let l=0;l<=1;l++){t.x=i.x*n+s.x*(1-n),t.y=i.y*a+s.y*(1-a),t.z=i.z*l+s.z*(1-l);const c=e.dot(t);r=Math.min(c,r),o=Math.max(c,o)}this.min=r,this.max=o}}();!function(){const t=new fY}();const gY=function(){const t=new Sb,e=new Sb,n=new Sb;return function(i,s,r){const o=i.start,a=t,l=s.start,c=e;n.subVectors(o,l),t.subVectors(i.end,s.start),e.subVectors(s.end,s.start);const h=n.dot(c),u=c.dot(a),d=c.dot(c),p=n.dot(a),_=a.dot(a)*d-u*u;let m,f;m=0!==_?(h*u-p*d)/_:0,f=(h+m*u)/d,r.x=m,r.y=f}}(),vY=function(){const t=new _b,e=new Sb,n=new Sb;return function(i,s,r,o){gY(i,s,t);let a=t.x,l=t.y;if(a>=0&&a<=1&&l>=0&&l<=1)return i.at(a,r),void s.at(l,o);if(a>=0&&a<=1)return l<0?s.at(0,o):s.at(1,o),void i.closestPointToPoint(o,!0,r);if(l>=0&&l<=1)return a<0?i.at(0,r):i.at(1,r),void s.closestPointToPoint(r,!0,o);{let t,c;t=a<0?i.start:i.end,c=l<0?s.start:s.end;const h=e,u=n;return i.closestPointToPoint(c,!0,e),s.closestPointToPoint(t,!0,n),h.distanceToSquared(c)<=u.distanceToSquared(t)?(r.copy(h),void o.copy(c)):(r.copy(t),void o.copy(u))}}}(),yY=function(){const t=new Sb,e=new Sb,n=new jT,i=new sL;return function(s,r){const{radius:o,center:a}=s,{a:l,b:c,c:h}=r;i.start=l,i.end=c;if(i.closestPointToPoint(a,!0,t).distanceTo(a)<=o)return!0;i.start=l,i.end=h;if(i.closestPointToPoint(a,!0,t).distanceTo(a)<=o)return!0;i.start=c,i.end=h;if(i.closestPointToPoint(a,!0,t).distanceTo(a)<=o)return!0;const u=r.getPlane(n);if(Math.abs(u.distanceToPoint(a))<=o){const t=u.projectPoint(a,e);if(r.containsPoint(t))return!0}return!1}}();class xY extends Uw{constructor(...t){super(...t),this.isSeparatingAxisTriangle=!0,this.satAxes=new Array(4).fill().map((()=>new Sb)),this.satBounds=new Array(4).fill().map((()=>new fY)),this.points=[this.a,this.b,this.c],this.sphere=new $b,this.plane=new jT,this.needsUpdate=!1}intersectsSphere(t){return yY(t,this)}update(){const t=this.a,e=this.b,n=this.c,i=this.points,s=this.satAxes,r=this.satBounds,o=s[0],a=r[0];this.getNormal(o),a.setFromPoints(o,i);const l=s[1],c=r[1];l.subVectors(t,e),c.setFromPoints(l,i);const h=s[2],u=r[2];h.subVectors(e,n),u.setFromPoints(h,i);const d=s[3],p=r[3];d.subVectors(n,t),p.setFromPoints(d,i),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(o,t),this.needsUpdate=!1}}xY.prototype.closestPointToSegment=function(){const t=new Sb,e=new Sb,n=new sL;return function(i,s=null,r=null){const{start:o,end:a}=i,l=this.points;let c,h=1/0;for(let o=0;o<3;o++){const a=(o+1)%3;n.start.copy(l[o]),n.end.copy(l[a]),vY(n,i,t,e),c=t.distanceToSquared(e),c<h&&(h=c,s&&s.copy(t),r&&r.copy(e))}return this.closestPointToPoint(o,t),c=o.distanceToSquared(t),c<h&&(h=c,s&&s.copy(t),r&&r.copy(o)),this.closestPointToPoint(a,t),c=a.distanceToSquared(t),c<h&&(h=c,s&&s.copy(t),r&&r.copy(a)),Math.sqrt(h)}}(),xY.prototype.intersectsTriangle=function(){const t=new xY,e=new Array(3),n=new Array(3),i=new fY,s=new fY,r=new Sb,o=new Sb,a=new Sb,l=new Sb,c=new sL,h=new sL,u=new sL;return function(d,p=null){this.needsUpdate&&this.update(),d.isSeparatingAxisTriangle?d.needsUpdate&&d.update():(t.copy(d),t.update(),d=t);const _=this.satBounds,m=this.satAxes;n[0]=d.a,n[1]=d.b,n[2]=d.c;for(let t=0;t<4;t++){const e=_[t],s=m[t];if(i.setFromPoints(s,n),e.isSeparated(i))return!1}const f=d.satBounds,g=d.satAxes;e[0]=this.a,e[1]=this.b,e[2]=this.c;for(let t=0;t<4;t++){const n=f[t],s=g[t];if(i.setFromPoints(s,e),n.isSeparated(i))return!1}for(let t=0;t<4;t++){const o=m[t];for(let t=0;t<4;t++){const a=g[t];if(r.crossVectors(o,a),i.setFromPoints(r,e),s.setFromPoints(r,n),i.isSeparated(s))return!1}}if(p){const t=this.plane,e=d.plane;if(Math.abs(t.normal.dot(e.normal))>1-1e-10)console.warn(\\\\\\\"SeparatingAxisTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0.\\\\\\\"),p.start.set(0,0,0),p.end.set(0,0,0);else{const n=this.points;let i=!1;for(let t=0;t<3;t++){const s=n[t],r=n[(t+1)%3];if(c.start.copy(s),c.end.copy(r),e.intersectLine(c,i?h.start:h.end)){if(i)break;i=!0}}const s=d.points;let r=!1;for(let e=0;e<3;e++){const n=s[e],i=s[(e+1)%3];if(c.start.copy(n),c.end.copy(i),t.intersectLine(c,r?u.start:u.end)){if(r)break;r=!0}}if(h.delta(o),u.delta(a),o.dot(a)<0){let t=u.start;u.start=u.end,u.end=t}l.subVectors(h.start,u.start),l.dot(o)>0?p.start.copy(h.start):p.start.copy(u.start),l.subVectors(h.end,u.end),l.dot(o)<0?p.end.copy(h.end):p.end.copy(u.end)}}return!0}}(),xY.prototype.distanceToPoint=function(){const t=new Sb;return function(e){return this.closestPointToPoint(e,t),e.distanceTo(t)}}(),xY.prototype.distanceToTriangle=function(){const t=new Sb,e=new Sb,n=[\\\\\\\"a\\\\\\\",\\\\\\\"b\\\\\\\",\\\\\\\"c\\\\\\\"],i=new sL,s=new sL;return function(r,o=null,a=null){const l=o||a?i:null;if(this.intersectsTriangle(r,l))return(o||a)&&(o&&l.getCenter(o),a&&l.getCenter(a)),0;let c=1/0;for(let e=0;e<3;e++){let i;const s=n[e],l=r[s];this.closestPointToPoint(l,t),i=l.distanceToSquared(t),i<c&&(c=i,o&&o.copy(t),a&&a.copy(l));const h=this[s];r.closestPointToPoint(h,t),i=h.distanceToSquared(t),i<c&&(c=i,o&&o.copy(h),a&&a.copy(t))}for(let l=0;l<3;l++){const h=n[l],u=n[(l+1)%3];i.set(this[h],this[u]);for(let l=0;l<3;l++){const h=n[l],u=n[(l+1)%3];s.set(r[h],r[u]),vY(i,s,t,e);const d=t.distanceToSquared(e);d<c&&(c=d,o&&o.copy(t),a&&a.copy(e))}}return Math.sqrt(c)}}();class bY extends Lb{constructor(...t){super(...t),this.isOrientedBox=!0,this.matrix=new sw,this.invMatrix=new sw,this.points=new Array(8).fill().map((()=>new Sb)),this.satAxes=new Array(3).fill().map((()=>new Sb)),this.satBounds=new Array(3).fill().map((()=>new fY)),this.alignedSatBounds=new Array(3).fill().map((()=>new fY)),this.needsUpdate=!1}set(t,e,n){super.set(t,e),this.matrix=n,this.needsUpdate=!0}copy(t){super.copy(t),this.matrix.copy(t.matrix),this.needsUpdate=!0}}bY.prototype.update=function(){const t=this.matrix,e=this.min,n=this.max,i=this.points;for(let s=0;s<=1;s++)for(let r=0;r<=1;r++)for(let o=0;o<=1;o++){const a=i[1*s|2*r|4*o];a.x=s?n.x:e.x,a.y=r?n.y:e.y,a.z=o?n.z:e.z,a.applyMatrix4(t)}const s=this.satBounds,r=this.satAxes,o=i[0];for(let t=0;t<3;t++){const e=r[t],n=s[t],a=i[1<<t];e.subVectors(o,a),n.setFromPoints(e,i)}const a=this.alignedSatBounds;a[0].setFromPointsField(i,\\\\\\\"x\\\\\\\"),a[1].setFromPointsField(i,\\\\\\\"y\\\\\\\"),a[2].setFromPointsField(i,\\\\\\\"z\\\\\\\"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1},bY.prototype.intersectsBox=function(){const t=new fY;return function(e){this.needsUpdate&&this.update();const n=e.min,i=e.max,s=this.satBounds,r=this.satAxes,o=this.alignedSatBounds;if(t.min=n.x,t.max=i.x,o[0].isSeparated(t))return!1;if(t.min=n.y,t.max=i.y,o[1].isSeparated(t))return!1;if(t.min=n.z,t.max=i.z,o[2].isSeparated(t))return!1;for(let n=0;n<3;n++){const i=r[n],o=s[n];if(t.setFromBox(i,e),o.isSeparated(t))return!1}return!0}}(),bY.prototype.intersectsTriangle=function(){const t=new xY,e=new Array(3),n=new fY,i=new fY,s=new Sb;return function(r){this.needsUpdate&&this.update(),r.isSeparatingAxisTriangle?r.needsUpdate&&r.update():(t.copy(r),t.update(),r=t);const o=this.satBounds,a=this.satAxes;e[0]=r.a,e[1]=r.b,e[2]=r.c;for(let t=0;t<3;t++){const i=o[t],s=a[t];if(n.setFromPoints(s,e),i.isSeparated(n))return!1}const l=r.satBounds,c=r.satAxes,h=this.points;for(let t=0;t<3;t++){const e=l[t],i=c[t];if(n.setFromPoints(i,h),e.isSeparated(n))return!1}for(let t=0;t<3;t++){const r=a[t];for(let t=0;t<4;t++){const o=c[t];if(s.crossVectors(r,o),n.setFromPoints(s,e),i.setFromPoints(s,h),n.isSeparated(i))return!1}}return!0}}(),bY.prototype.closestPointToPoint=function(t,e){return this.needsUpdate&&this.update(),e.copy(t).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),e},bY.prototype.distanceToPoint=function(){const t=new Sb;return function(e){return this.closestPointToPoint(e,t),e.distanceTo(t)}}(),bY.prototype.distanceToBox=function(){const t=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"],e=new Array(12).fill().map((()=>new sL)),n=new Array(12).fill().map((()=>new sL)),i=new Sb,s=new Sb;return function(r,o=0,a=null,l=null){if(this.needsUpdate&&this.update(),this.intersectsBox(r))return(a||l)&&(r.getCenter(s),this.closestPointToPoint(s,i),r.closestPointToPoint(i,s),a&&a.copy(i),l&&l.copy(s)),0;const c=o*o,h=r.min,u=r.max,d=this.points;let p=1/0;for(let t=0;t<8;t++){const e=d[t];s.copy(e).clamp(h,u);const n=e.distanceToSquared(s);if(n<p&&(p=n,a&&a.copy(e),l&&l.copy(s),n<c))return Math.sqrt(n)}let _=0;for(let i=0;i<3;i++)for(let s=0;s<=1;s++)for(let r=0;r<=1;r++){const o=(i+1)%3,a=(i+2)%3,l=1<<i|s<<o|r<<a,c=d[s<<o|r<<a],p=d[l];e[_].set(c,p);const m=t[i],f=t[o],g=t[a],v=n[_],y=v.start,x=v.end;y[m]=h[m],y[f]=s?h[f]:u[f],y[g]=r?h[g]:u[f],x[m]=u[m],x[f]=s?h[f]:u[f],x[g]=r?h[g]:u[f],_++}for(let t=0;t<=1;t++)for(let e=0;e<=1;e++)for(let n=0;n<=1;n++){s.x=t?u.x:h.x,s.y=e?u.y:h.y,s.z=n?u.z:h.z,this.closestPointToPoint(s,i);const r=s.distanceToSquared(i);if(r<p&&(p=r,a&&a.copy(i),l&&l.copy(s),r<c))return Math.sqrt(r)}for(let t=0;t<12;t++){const r=e[t];for(let t=0;t<12;t++){const e=n[t];vY(r,e,i,s);const o=i.distanceToSquared(s);if(o<p&&(p=o,a&&a.copy(i),l&&l.copy(s),o<c))return Math.sqrt(o)}}return Math.sqrt(p)}}();const wY=new Sb,TY=new Sb,AY=new Sb,MY=new _b,EY=new _b,SY=new _b,CY=new Sb;function NY(t,e,n,i,s){const r=3*i,o=t.index.getX(r),a=t.index.getX(r+1),l=t.index.getX(r+2),c=function(t,e,n,i,s,r,o){wY.fromBufferAttribute(e,i),TY.fromBufferAttribute(e,s),AY.fromBufferAttribute(e,r);const a=function(t,e,n,i,s,r){let o;return o=1===r?t.intersectTriangle(i,n,e,!0,s):t.intersectTriangle(e,n,i,2!==r,s),null===o?null:{distance:t.origin.distanceTo(s),point:s.clone()}}(t,wY,TY,AY,CY,o);if(a){n&&(MY.fromBufferAttribute(n,i),EY.fromBufferAttribute(n,s),SY.fromBufferAttribute(n,r),a.uv=Uw.getUV(CY,wY,TY,AY,MY,EY,SY,new _b));const t={a:i,b:s,c:r,normal:new Sb,materialIndex:0};Uw.getNormal(wY,TY,AY,t.normal),a.face=t,a.faceIndex=i}return a}(n,t.attributes.position,t.attributes.uv,o,a,l,e);return c?(c.faceIndex=i,s&&s.push(c),c):null}function LY(t,e,n){return null===t?null:(t.point.applyMatrix4(e.matrixWorld),t.distance=t.point.distanceTo(n.ray.origin),t.object=e,t.distance<n.near||t.distance>n.far?null:t)}function OY(t,e,n,i){const s=t.a,r=t.b,o=t.c;let a=e,l=e+1,c=e+2;n&&(a=n.getX(e),l=n.getX(e+1),c=n.getX(e+2)),s.x=i.getX(a),s.y=i.getY(a),s.z=i.getZ(a),r.x=i.getX(l),r.y=i.getY(l),r.z=i.getZ(l),o.x=i.getX(c),o.y=i.getY(c),o.z=i.getZ(c)}function PY(t,e,n,i,s,r,o){const a=n.index,l=n.attributes.position;for(let n=t,c=e+t;n<c;n++)if(OY(o,3*n,a,l),o.needsUpdate=!0,i(o,n,s,r))return!0;return!1}class RY{constructor(t){this._getNewPrimitive=t,this._primitives=[]}getPrimitive(){const t=this._primitives;return 0===t.length?this._getNewPrimitive():t.pop()}releasePrimitive(t){this._primitives.push(t)}}function IY(t,e){return 65535===e[t+15]}function FY(t,e){return e[t+6]}function DY(t,e){return e[t+14]}function BY(t){return t+8}function zY(t,e){return e[t+6]}const kY=new Lb,UY=new Sb,GY=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"];function VY(t,e,n,i,s){let r=2*t,o=$Y,a=JY,l=ZY;if(IY(r,a)){!function(t,e,n,i,s,r){for(let o=i,a=i+s;o<a;o++)NY(t,e,n,o,r)}(e,n,i,FY(t,l),DY(r,a),s)}else{const r=BY(t);qY(r,o,i,UY)&&VY(r,e,n,i,s);const a=zY(t,l);qY(a,o,i,UY)&&VY(a,e,n,i,s)}}function HY(t,e,n,i){let s=2*t,r=$Y,o=JY,a=ZY;if(IY(s,o)){return function(t,e,n,i,s){let r=1/0,o=null;for(let a=i,l=i+s;a<l;a++){const i=NY(t,e,n,a);i&&i.distance<r&&(o=i,r=i.distance)}return o}(e,n,i,FY(t,a),DY(s,o))}{const s=function(t,e){return e[t+7]}(t,a),o=GY[s],l=i.direction[o]>=0;let c,h;l?(c=BY(t),h=zY(t,a)):(c=zY(t,a),h=BY(t));const u=qY(c,r,i,UY)?HY(c,e,n,i):null;if(u){const t=u.point[o];if(l?t<=r[h+s]:t>=r[h+s+3])return u}const d=qY(h,r,i,UY)?HY(h,e,n,i):null;return u&&d?u.distance<=d.distance?u:d:u||d||null}}const jY=function(){let t,e;const n=[],i=new RY((()=>new Lb));return function(...r){t=i.getPrimitive(),e=i.getPrimitive(),n.push(t,e);const o=s(...r);i.releasePrimitive(t),i.releasePrimitive(e),n.pop(),n.pop();const a=n.length;return a>0&&(e=n[a-1],t=n[a-2]),o};function s(n,i,r,o,a=null,l=0,c=0){function h(t){let e=2*t,n=JY,i=ZY;for(;!IY(e,n);)e=2*(t=BY(t));return FY(t,i)}function u(t){let e=2*t,n=JY,i=ZY;for(;!IY(e,n);)e=2*(t=zY(t,i));return FY(t,i)+DY(e,n)}let d=2*n,p=$Y,_=JY,m=ZY;if(IY(d,_)){const e=FY(n,m),i=DY(d,_);return sY(n,p,t),o(e,i,!1,c,l+n,t)}{const d=BY(n),f=zY(n,m);let g,v,y,x,b=d,w=f;if(a&&(y=t,x=e,sY(b,p,y),sY(w,p,x),g=a(y),v=a(x),v<g)){b=f,w=d;const t=g;g=v,v=t,y=x}y||(y=t,sY(b,p,y));const T=r(y,IY(2*b,_),g,c+1,l+b);let A;if(2===T){const t=h(b);A=o(t,u(b)-t,!0,c+1,l+b,y)}else A=T&&s(b,i,r,o,a,l,c+1);if(A)return!0;x=e,sY(w,p,x);const M=r(x,IY(2*w,_),v,c+1,l+w);let E;if(2===M){const t=h(w);E=o(t,u(w)-t,!0,c+1,l+w,x)}else E=M&&s(w,i,r,o,a,l,c+1);return!!E}}}(),WY=function(){const t=new xY,e=new xY,n=new sw,i=new bY,s=new bY;return function r(o,a,l,c,h=null){let u=2*o,d=$Y,p=JY,_=ZY;null===h&&(l.boundingBox||l.computeBoundingBox(),i.set(l.boundingBox.min,l.boundingBox.max,c),h=i);if(!IY(u,p)){const t=o+8,e=_[o+6];sY(t,d,kY);if(h.intersectsBox(kY)&&r(t,a,l,c,h))return!0;sY(e,d,kY);return!!(h.intersectsBox(kY)&&r(e,a,l,c,h))}{const i=a,r=i.index,h=i.attributes.position,m=l.index,f=l.attributes.position,g=FY(o,_),v=DY(u,p);if(n.copy(c).invert(),l.boundsTree){sY(o,d,s),s.matrix.copy(n),s.needsUpdate=!0;return l.boundsTree.shapecast({intersectsBounds:t=>s.intersectsBox(t),intersectsTriangle:t=>{t.a.applyMatrix4(c),t.b.applyMatrix4(c),t.c.applyMatrix4(c),t.needsUpdate=!0;for(let n=3*g,i=3*(v+g);n<i;n+=3)if(OY(e,n,r,h),e.needsUpdate=!0,t.intersectsTriangle(e))return!0;return!1}})}for(let i=3*g,s=v+3*g;i<s;i+=3){OY(t,i,r,h),t.a.applyMatrix4(n),t.b.applyMatrix4(n),t.c.applyMatrix4(n),t.needsUpdate=!0;for(let n=0,i=m.count;n<i;n+=3)if(OY(e,n,m,f),e.needsUpdate=!0,t.intersectsTriangle(e))return!0}}}}();function qY(t,e,n,i){return sY(t,e,kY),n.intersectBox(kY,i)}const XY=[];let YY,$Y,JY,ZY;function KY(t){YY&&XY.push(YY),YY=t,$Y=new Float32Array(t),JY=new Uint16Array(t),ZY=new Uint32Array(t)}function QY(){YY=null,$Y=null,JY=null,ZY=null,XY.length&&KY(XY.pop())}const t$=Symbol(\\\\\\\"skip tree generation\\\\\\\"),e$=new Lb,n$=new Lb,i$=new sw,s$=new bY,r$=new bY,o$=new Sb,a$=new Sb,l$=new Sb,c$=new Sb,h$=new Sb,u$=new Lb,d$=new RY((()=>new xY));class p${static serialize(t,e={}){if(e.isBufferGeometry)return console.warn(\\\\\\\"MeshBVH.serialize: The arguments for the function have changed. See documentation for new signature.\\\\\\\"),p$.serialize(arguments[0],{cloneBuffers:void 0===arguments[2]||arguments[2]});e={cloneBuffers:!0,...e};const n=t.geometry,i=t._roots,s=n.getIndex();let r;return r=e.cloneBuffers?{roots:i.map((t=>t.slice())),index:s.array.slice()}:{roots:i,index:s.array},r}static deserialize(t,e,n={}){if(\\\\\\\"boolean\\\\\\\"==typeof n)return console.warn(\\\\\\\"MeshBVH.deserialize: The arguments for the function have changed. See documentation for new signature.\\\\\\\"),p$.deserialize(arguments[0],arguments[1],{setIndex:void 0===arguments[2]||arguments[2]});n={setIndex:!0,...n};const{index:i,roots:s}=t,r=new p$(e,{...n,[t$]:!0});if(r._roots=s,n.setIndex){const n=e.getIndex();if(null===n){const n=new Qw(t.index,1,!1);e.setIndex(n)}else n.array!==i&&(n.array.set(i),n.needsUpdate=!0)}return r}constructor(t,e={}){if(!t.isBufferGeometry)throw new Error(\\\\\\\"MeshBVH: Only BufferGeometries are supported.\\\\\\\");if(t.index&&t.index.isInterleavedBufferAttribute)throw new Error(\\\\\\\"MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.\\\\\\\");if((e=Object.assign({strategy:0,maxDepth:40,maxLeafTris:10,verbose:!0,useSharedArrayBuffer:!1,setBoundingBox:!0,[t$]:!1},e)).useSharedArrayBuffer&&\\\\\\\"undefined\\\\\\\"==typeof SharedArrayBuffer)throw new Error(\\\\\\\"MeshBVH: SharedArrayBuffer is not available.\\\\\\\");this._roots=null,e[t$]||(this._roots=function(t,e){const n=_Y(t,e);let i,s,r;const o=[],a=e.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer;for(let t=0;t<n.length;t++){const e=n[t],h=new a(32*l(e));i=new Float32Array(h),s=new Uint32Array(h),r=new Uint16Array(h),c(0,e),o.push(h)}return o;function l(t){return t.count?1:1+l(t.left)+l(t.right)}function c(t,e){const n=t/4,o=t/2,a=!!e.count,l=e.boundingData;for(let t=0;t<6;t++)i[n+t]=l[t];if(a){const i=e.offset,a=e.count;return s[n+6]=i,r[o+14]=a,r[o+15]=mY,t+32}{const i=e.left,r=e.right,o=e.splitAxis;let a;if(a=c(t+32,i),a/4>Math.pow(2,32))throw new Error(\\\\\\\"MeshBVH: Cannot store child pointer greater than 32 bits.\\\\\\\");return s[n+6]=a/4,a=c(a,r),s[n+7]=o,a}}}(t,e),!t.boundingBox&&e.setBoundingBox&&(t.boundingBox=this.getBoundingBox(new Lb))),this.geometry=t}refit(t=null){t&&Array.isArray(t)&&(t=new Set(t));const e=this.geometry,n=e.index.array,i=e.attributes.position,s=i.array,r=i.offset||0;let o,a,l,c,h=3;i.isInterleavedBufferAttribute&&(h=i.data.stride);let u=0;const d=this._roots;for(let t=0,e=d.length;t<e;t++)o=d[t],a=new Uint32Array(o),l=new Uint16Array(o),c=new Float32Array(o),p(0,u),u+=o.byteLength;function p(e,i,o=!1){const u=2*e;if(l[u+15]===mY){const t=a[e+6];let i=1/0,o=1/0,d=1/0,p=-1/0,_=-1/0,m=-1/0;for(let e=3*t,a=3*(t+l[u+14]);e<a;e++){const t=n[e]*h+r,a=s[t+0],l=s[t+1],c=s[t+2];a<i&&(i=a),a>p&&(p=a),l<o&&(o=l),l>_&&(_=l),c<d&&(d=c),c>m&&(m=c)}return(c[e+0]!==i||c[e+1]!==o||c[e+2]!==d||c[e+3]!==p||c[e+4]!==_||c[e+5]!==m)&&(c[e+0]=i,c[e+1]=o,c[e+2]=d,c[e+3]=p,c[e+4]=_,c[e+5]=m,!0)}{const n=e+8,s=a[e+6],r=n+i,l=s+i;let h=o,u=!1,d=!1;t?h||(u=t.has(r),d=t.has(l),h=!u&&!d):(u=!0,d=!0);const _=h||d;let m=!1;(h||u)&&(m=p(n,i,h));let f=!1;_&&(f=p(s,i,h));const g=m||f;if(g)for(let t=0;t<3;t++){const i=n+t,r=s+t,o=c[i],a=c[i+3],l=c[r],h=c[r+3];c[e+t]=o<l?o:l,c[e+t+3]=a>h?a:h}return g}}}traverse(t,e=0){const n=this._roots[e],i=new Uint32Array(n),s=new Uint16Array(n);!function e(r,o=0){const a=2*r,l=s[a+15]===mY;if(l){const e=i[r+6],c=s[a+14];t(o,l,new Float32Array(n,4*r,6),e,c)}else{const s=r+8,a=i[r+6],c=i[r+7];t(o,l,new Float32Array(n,4*r,6),c)||(e(s,o+1),e(a,o+1))}}(0)}raycast(t,e=0){const n=this._roots,i=this.geometry,s=[],r=e.isMaterial,o=Array.isArray(e),a=i.groups,l=r?e.side:e;for(let r=0,c=n.length;r<c;r++){const c=o?e[a[r].materialIndex].side:l,h=s.length;if(KY(n[r]),VY(0,i,c,t,s),QY(),o){const t=a[r].materialIndex;for(let e=h,n=s.length;e<n;e++)s[e].face.materialIndex=t}}return s}raycastFirst(t,e=0){const n=this._roots,i=this.geometry,s=e.isMaterial,r=Array.isArray(e);let o=null;const a=i.groups,l=s?e.side:e;for(let s=0,c=n.length;s<c;s++){const c=r?e[a[s].materialIndex].side:l;KY(n[s]);const h=HY(0,i,c,t);QY(),null!=h&&(null==o||h.distance<o.distance)&&(o=h,r&&(h.face.materialIndex=a[s].materialIndex))}return o}intersectsGeometry(t,e){const n=this.geometry;let i=!1;for(const s of this._roots)if(KY(s),i=WY(0,n,t,e),QY(),i)break;return i}shapecast(t,e,n){const i=this.geometry;if(t instanceof Function){if(e){const t=e;e=(e,n,i,s)=>{const r=3*n;return t(e,r,r+1,r+2,i,s)}}t={boundsTraverseOrder:n,intersectsBounds:t,intersectsTriangle:e,intersectsRange:null},console.warn(\\\\\\\"MeshBVH: Shapecast function signature has changed and now takes an object of callbacks as a second argument. See docs for new signature.\\\\\\\")}const s=d$.getPrimitive();let{boundsTraverseOrder:r,intersectsBounds:o,intersectsRange:a,intersectsTriangle:l}=t;if(a&&l){const t=a;a=(e,n,r,o,a)=>!!t(e,n,r,o,a)||PY(e,n,i,l,r,o,s)}else a||(a=l?(t,e,n,r)=>PY(t,e,i,l,n,r,s):(t,e,n)=>n);let c=!1,h=0;for(const t of this._roots){if(KY(t),c=jY(0,i,o,a,r,h),QY(),c)break;h+=t.byteLength}return d$.releasePrimitive(s),c}bvhcast(t,e,n){let{intersectsRanges:i,intersectsTriangles:s}=n;const r=t.geometry,o=r.index,a=r.attributes.position;i$.copy(e).invert();const l=d$.getPrimitive(),c=d$.getPrimitive();if(s){function h(t,n,i,r,h,u,d,p){for(let _=i,m=i+r;_<m;_++){OY(c,3*_,o,a),c.a.applyMatrix4(e),c.b.applyMatrix4(e),c.c.applyMatrix4(e),c.needsUpdate=!0;for(let e=t,i=t+n;e<i;e++)if(OY(l,3*e,o,a),l.needsUpdate=!0,s(l,c,e,_,h,u,d,p))return!0}return!1}if(i){const t=i;i=function(e,n,i,s,r,o,a,l){return!!t(e,n,i,s,r,o,a,l)||h(e,n,i,s,r,o,a,l)}}else i=h}this.getBoundingBox(n$),n$.applyMatrix4(e);const u=this.shapecast({intersectsBounds:t=>n$.intersectsBox(t),intersectsRange:(e,n,s,r,o,a)=>(e$.copy(a),e$.applyMatrix4(i$),t.shapecast({intersectsBounds:t=>e$.intersectsBox(t),intersectsRange:(t,s,a,l,c)=>i(e,n,t,s,r,o,l,c)}))});return d$.releasePrimitive(l),d$.releasePrimitive(c),u}intersectsBox(t,e){return s$.set(t.min,t.max,e),s$.needsUpdate=!0,this.shapecast({intersectsBounds:t=>s$.intersectsBox(t),intersectsTriangle:t=>s$.intersectsTriangle(t)})}intersectsSphere(t){return this.shapecast({intersectsBounds:e=>t.intersectsBox(e),intersectsTriangle:e=>e.intersectsSphere(t)})}closestPointToGeometry(t,e,n={},i={},s=0,r=1/0){t.boundingBox||t.computeBoundingBox(),s$.set(t.boundingBox.min,t.boundingBox.max,e),s$.needsUpdate=!0;const o=this.geometry,a=o.attributes.position,l=o.index,c=t.attributes.position,h=t.index,u=d$.getPrimitive(),d=d$.getPrimitive();let p=a$,_=l$,m=null,f=null;i&&(m=c$,f=h$);let g=1/0,v=null,y=null;return i$.copy(e).invert(),r$.matrix.copy(i$),this.shapecast({boundsTraverseOrder:t=>s$.distanceToBox(t,Math.min(g,r)),intersectsBounds:(t,e,n)=>n<g&&n<r&&(e&&(r$.min.copy(t.min),r$.max.copy(t.max),r$.needsUpdate=!0),!0),intersectsRange:(n,i)=>{if(t.boundsTree)return t.boundsTree.shapecast({boundsTraverseOrder:t=>r$.distanceToBox(t,Math.min(g,r)),intersectsBounds:(t,e,n)=>n<g&&n<r,intersectsRange:(t,r)=>{for(let o=3*t,x=3*(t+r);o<x;o+=3){OY(d,o,h,c),d.a.applyMatrix4(e),d.b.applyMatrix4(e),d.c.applyMatrix4(e),d.needsUpdate=!0;for(let t=3*n,e=3*(n+i);t<e;t+=3){OY(u,t,l,a),u.needsUpdate=!0;const e=u.distanceToTriangle(d,p,m);if(e<g&&(_.copy(p),f&&f.copy(m),g=e,v=t/3,y=o/3),e<s)return!0}}}});for(let t=0,r=h?h.count:c.count;t<r;t+=3){OY(d,t,h,c),d.a.applyMatrix4(e),d.b.applyMatrix4(e),d.c.applyMatrix4(e),d.needsUpdate=!0;for(let e=3*n,r=3*(n+i);e<r;e+=3){OY(u,e,l,a),u.needsUpdate=!0;const n=u.distanceToTriangle(d,p,m);if(n<g&&(_.copy(p),f&&f.copy(m),g=n,v=e/3,y=t/3),n<s)return!0}}}}),d$.releasePrimitive(u),d$.releasePrimitive(d),g===1/0?null:(n.point?n.point.copy(_):n.point=_.clone(),n.distance=g,n.faceIndex=v,i&&(i.point?i.point.copy(f):i.point=f.clone(),i.point.applyMatrix4(i$),_.applyMatrix4(i$),i.distance=_.sub(i.point).length(),i.faceIndex=y),n)}closestPointToPoint(t,e={},n=0,i=1/0){const s=n*n,r=i*i;let o=1/0,a=null;if(this.shapecast({boundsTraverseOrder:e=>(o$.copy(t).clamp(e.min,e.max),o$.distanceToSquared(t)),intersectsBounds:(t,e,n)=>n<o&&n<r,intersectsTriangle:(e,n)=>{e.closestPointToPoint(t,o$);const i=t.distanceToSquared(o$);return i<o&&(a$.copy(o$),o=i,a=n),i<s}}),o===1/0)return null;const l=Math.sqrt(o);return e.point?e.point.copy(a$):e.point=a$.clone(),e.distance=l,e.faceIndex=a,e}getBoundingBox(t){t.makeEmpty();return this._roots.forEach((e=>{sY(0,new Float32Array(e),u$),t.union(u$)})),t}}const _$=p$.prototype.raycast;p$.prototype.raycast=function(...t){if(t[0].isMesh){console.warn('MeshBVH: The function signature and results frame for \\\\\\\"raycast\\\\\\\" has changed. See docs for new signature.');const[e,n,i,s]=t;return _$.call(this,i,e.material).forEach((t=>{(t=LY(t,e,n))&&s.push(t)})),s}return _$.apply(this,t)};const m$=p$.prototype.raycastFirst;p$.prototype.raycastFirst=function(...t){if(t[0].isMesh){console.warn('MeshBVH: The function signature and results frame for \\\\\\\"raycastFirst\\\\\\\" has changed. See docs for new signature.');const[e,n,i]=t;return LY(m$.call(this,i,e.material),e,n)}return m$.apply(this,t)};const f$=p$.prototype.closestPointToPoint;p$.prototype.closestPointToPoint=function(...t){if(t[0].isMesh){console.warn('MeshBVH: The function signature and results frame for \\\\\\\"closestPointToPoint\\\\\\\" has changed. See docs for new signature.'),t.unshift();const e=t[1],n={};return t[1]=n,f$.apply(this,t),e&&e.copy(n.point),n.distance}return f$.apply(this,t)};const g$=p$.prototype.closestPointToGeometry;p$.prototype.closestPointToGeometry=function(...t){const e=t[2],n=t[3];if(e&&e.isVector3||n&&n.isVector3){console.warn('MeshBVH: The function signature and results frame for \\\\\\\"closestPointToGeometry\\\\\\\" has changed. See docs for new signature.');const i={},s={},r=t[1];return t[2]=i,t[3]=s,g$.apply(this,t),e&&e.copy(i.point),n&&n.copy(s.point).applyMatrix4(r),i.distance}return g$.apply(this,t)};const v$=p$.prototype.refit;p$.prototype.refit=function(...t){const e=t[0],n=t[1];if(n&&(n instanceof Set||Array.isArray(n))){console.warn('MeshBVH: The function signature for \\\\\\\"refit\\\\\\\" has changed. See docs for new signature.');const t=new Set;n.forEach((e=>t.add(e))),e&&e.forEach((e=>t.add(e))),v$.call(this,t)}else v$.apply(this,t)},[\\\\\\\"intersectsGeometry\\\\\\\",\\\\\\\"shapecast\\\\\\\",\\\\\\\"intersectsBox\\\\\\\",\\\\\\\"intersectsSphere\\\\\\\"].forEach((t=>{const e=p$.prototype[t];p$.prototype[t]=function(...n){return(null===n[0]||n[0].isMesh)&&(n.shift(),console.warn(`MeshBVH: The function signature for \\\\\\\"${t}\\\\\\\" has changed and no longer takes Mesh. See docs for new signature.`)),e.apply(this,n)}}));const y$=new iw,x$=new sw,b$=CT.prototype.raycast;function w$(t,e){if(this.geometry.boundsTree){if(void 0===this.material)return;x$.copy(this.matrixWorld).invert(),y$.copy(t.ray).applyMatrix4(x$);const n=this.geometry.boundsTree;if(!0===t.firstHitOnly){const i=LY(n.raycastFirst(y$,this.material),this,t);i&&e.push(i)}else{const i=n.raycast(y$,this.material);for(let n=0,s=i.length;n<s;n++){const s=LY(i[n],this,t);s&&e.push(s)}}}else b$.call(this,t,e)}const T$=new Lb;class A$ extends Nw{get isMesh(){return!this.displayEdges}get isLineSegments(){return this.displayEdges}get isLine(){return this.displayEdges}constructor(t,e,n=10,i=0){super(),this.material=e,this.geometry=new hT,this.name=\\\\\\\"MeshBVHRootVisualizer\\\\\\\",this.depth=n,this.displayParents=!1,this.mesh=t,this.displayEdges=!0,this._group=i}raycast(){}update(){const t=this.geometry,e=this.mesh.geometry.boundsTree,n=this._group;if(t.dispose(),this.visible=!1,e){const i=this.depth-1,s=this.displayParents;let r=0;e.traverse(((t,e)=>{if(t===i||e)return r++,!0;s&&r++}),n);let o=0;const a=new Float32Array(24*r);let l,c;e.traverse(((t,e,n)=>{const r=t===i||e;if(r||s){sY(0,n,T$);const{min:t,max:e}=T$;for(let n=-1;n<=1;n+=2){const i=n<0?t.x:e.x;for(let n=-1;n<=1;n+=2){const s=n<0?t.y:e.y;for(let n=-1;n<=1;n+=2){const r=n<0?t.z:e.z;a[o+0]=i,a[o+1]=s,a[o+2]=r,o+=3}}}return r}}),n),c=this.displayEdges?new Uint8Array([0,4,1,5,2,6,3,7,0,2,1,3,4,6,5,7,0,1,2,3,4,5,6,7]):new Uint8Array([0,1,2,2,1,3,4,6,5,6,7,5,1,4,5,0,4,1,2,3,6,3,7,6,0,2,4,2,6,4,1,5,3,3,5,7]),l=a.length>65535?new Uint32Array(c.length*r):new Uint16Array(c.length*r);const h=c.length;for(let t=0;t<r;t++){const e=8*t,n=t*h;for(let t=0;t<h;t++)l[n+t]=e+c[t]}t.setIndex(new Qw(l,1,!1)),t.setAttribute(\\\\\\\"position\\\\\\\",new Qw(a,3,!1)),this.visible=!0}}}class M$ extends LE{get color(){return this.edgeMaterial.color}get opacity(){return this.edgeMaterial.opacity}set opacity(t){this.edgeMaterial.opacity=t,this.meshMaterial.opacity=t}constructor(t,e=10){super(),this.name=\\\\\\\"MeshBVHVisualizer\\\\\\\",this.depth=e,this.mesh=t,this.displayParents=!1,this.displayEdges=!0,this._roots=[];const n=new vS({color:65416,transparent:!0,opacity:.3,depthWrite:!1}),i=new Jw({color:65416,transparent:!0,opacity:.3,depthWrite:!1});i.color=n.color,this.edgeMaterial=n,this.meshMaterial=i,this.update()}update(){const t=this.mesh.geometry.boundsTree,e=t?t._roots.length:0;for(;this._roots.length>e;)this._roots.pop();for(let t=0;t<e;t++){if(t>=this._roots.length){const e=new A$(this.mesh,this.edgeMaterial,this.depth,t);this.add(e),this._roots.push(e)}const e=this._roots[t];e.depth=this.depth,e.mesh=this.mesh,e.displayParents=this.displayParents,e.displayEdges=this.displayEdges,e.material=this.displayEdges?this.edgeMaterial:this.meshMaterial,e.update()}}updateMatrixWorld(...t){this.position.copy(this.mesh.position),this.rotation.copy(this.mesh.rotation),this.scale.copy(this.mesh.scale),super.updateMatrixWorld(...t)}copy(t){this.depth=t.depth,this.mesh=t.mesh}clone(){return new M$(this.mesh,this.depth)}dispose(){this.edgeMaterial.dispose(),this.meshMaterial.dispose();const t=this.children;for(let e=0,n=t.length;e<n;e++)t[e].geometry.dispose()}}class E$ extends aV{static type(){return\\\\\\\"BVH\\\\\\\"}cook(t,e){const n=[];for(let i of t)if(i){const t=i.objects();for(let i of t)i.traverse((t=>{const i=t;if(i.isMesh){if(e.keepOnlyPosition){const t=i.geometry;for(const e in t.attributes)\\\\\\\"position\\\\\\\"!==e&&t.deleteAttribute(e)}n.push(i)}}))}const i=this._makeCompact(n);if(i){i.matrixAutoUpdate=!1,i.raycast=w$;const t=new p$(i.geometry,{verbose:!1});return i.geometry.boundsTree=t,this.createCoreGroupFromObjects([i])}return this.createCoreGroupFromObjects([])}_makeCompact(t){var e,n;const i=[];let s;for(let e of t){s=s||e.material;const t=e.geometry;t.applyMatrix4(e.matrix),i.push(t)}try{const t=fr.mergeGeometries(i);if(t){return this.createObject(t,Ns.MESH,s)}null===(e=this.states)||void 0===e||e.error.set(\\\\\\\"merge failed, check that input geometries have the same attributes\\\\\\\")}catch(t){null===(n=this.states)||void 0===n||n.error.set(t.message)}}}E$.DEFAULT_PARAMS={keepOnlyPosition:!1},E$.INPUT_CLONED_STATE=Qi.ALWAYS;const S$=E$.DEFAULT_PARAMS;const C$=new class extends ua{constructor(){super(...arguments),this.keepOnlyPosition=ha.BOOLEAN(S$.keepOnlyPosition)}};class N$ extends uV{constructor(){super(...arguments),this.paramsConfig=C$}static type(){return\\\\\\\"BVH\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create BVH from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(E$.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new E$(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class L$ extends aV{static type(){return\\\\\\\"BVHVisualizer\\\\\\\"}cook(t,e){const n=t[0].objects()[0],i=new M$(n,e.depth);return i.opacity=1,i.update(),this.createCoreGroupFromObjects([i])}}L$.DEFAULT_PARAMS={depth:0},L$.INPUT_CLONED_STATE=Qi.NEVER;const O$=L$.DEFAULT_PARAMS;const P$=new class extends ua{constructor(){super(...arguments),this.depth=ha.INTEGER(O$.depth,{range:[0,20],rangeLocked:[!0,!1]})}};class R$ extends uV{constructor(){super(...arguments),this.paramsConfig=P$}static type(){return\\\\\\\"BVHVisualizer\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry with bvh\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(L$.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new L$(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class I$ extends C.a{constructor(t,e,n,i=1){\\\\\\\"number\\\\\\\"==typeof n&&(i=n,n=!1,console.error(\\\\\\\"THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.\\\\\\\")),super(t,e,n),this.meshPerAttribute=i}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}I$.prototype.isInstancedBufferAttribute=!0;const F$=new A.a,D$=new A.a,B$=[],z$=new B.a;class k$ extends B.a{constructor(t,e,n){super(t,e),this.instanceMatrix=new I$(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}copy(t){return super.copy(t),this.instanceMatrix.copy(t.instanceMatrix),null!==t.instanceColor&&(this.instanceColor=t.instanceColor.clone()),this.count=t.count,this}getColorAt(t,e){e.fromArray(this.instanceColor.array,3*t)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,16*t)}raycast(t,e){const n=this.matrixWorld,i=this.count;if(z$.geometry=this.geometry,z$.material=this.material,void 0!==z$.material)for(let s=0;s<i;s++){this.getMatrixAt(s,F$),D$.multiplyMatrices(n,F$),z$.matrixWorld=D$,z$.raycast(t,B$);for(let t=0,n=B$.length;t<n;t++){const n=B$[t];n.instanceId=s,n.object=this,e.push(n)}B$.length=0}}setColorAt(t,e){null===this.instanceColor&&(this.instanceColor=new I$(new Float32Array(3*this.instanceMatrix.count),3)),e.toArray(this.instanceColor.array,3*t)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,16*t)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}let U$;k$.prototype.isInstancedMesh=!0;const G$=new p.a,V$=new p.a,H$=new p.a,j$=new d.a,W$=new d.a,q$=new A.a,X$=new p.a,Y$=new p.a,$$=new p.a,J$=new d.a,Z$=new d.a,K$=new d.a;class Q$ extends Q.a{constructor(t){if(super(),this.type=\\\\\\\"Sprite\\\\\\\",void 0===U$){U$=new S.a;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new cr.a(t,5);U$.setIndex([0,1,2,0,2,3]),U$.setAttribute(\\\\\\\"position\\\\\\\",new hr.a(e,3,0,!1)),U$.setAttribute(\\\\\\\"uv\\\\\\\",new hr.a(e,2,3,!1))}this.geometry=U$,this.material=void 0!==t?t:new jf,this.center=new d.a(.5,.5)}raycast(t,e){null===t.camera&&console.error('THREE.Sprite: \\\\\\\"Raycaster.camera\\\\\\\" needs to be set in order to raycast against sprites.'),V$.setFromMatrixScale(this.matrixWorld),q$.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),H$.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&V$.multiplyScalar(-H$.z);const n=this.material.rotation;let i,s;0!==n&&(s=Math.cos(n),i=Math.sin(n));const r=this.center;tJ(X$.set(-.5,-.5,0),H$,r,V$,i,s),tJ(Y$.set(.5,-.5,0),H$,r,V$,i,s),tJ($$.set(.5,.5,0),H$,r,V$,i,s),J$.set(0,0),Z$.set(1,0),K$.set(1,1);let o=t.ray.intersectTriangle(X$,Y$,$$,!1,G$);if(null===o&&(tJ(Y$.set(-.5,.5,0),H$,r,V$,i,s),Z$.set(0,1),o=t.ray.intersectTriangle(X$,$$,Y$,!1,G$),null===o))return;const a=t.ray.origin.distanceTo(G$);a<t.near||a>t.far||e.push({distance:a,point:G$.clone(),uv:tr.a.getUV(G$,X$,Y$,$$,J$,Z$,K$,new d.a),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function tJ(t,e,n,i,s,r){j$.subVectors(t,n).addScalar(.5).multiply(i),void 0!==s?(W$.x=r*j$.x-s*j$.y,W$.y=s*j$.x+r*j$.y):W$.copy(j$),t.copy(e),t.x+=W$.x,t.y+=W$.y,t.applyMatrix4(q$)}Q$.prototype.isSprite=!0;var eJ=n(92),nJ=n(81),iJ=n(46);class sJ{constructor(){this.coefficients=[];for(let t=0;t<9;t++)this.coefficients.push(new p.a)}set(t){for(let e=0;e<9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t<9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,s=t.z,r=this.coefficients;return e.copy(r[0]).multiplyScalar(.282095),e.addScaledVector(r[1],.488603*i),e.addScaledVector(r[2],.488603*s),e.addScaledVector(r[3],.488603*n),e.addScaledVector(r[4],n*i*1.092548),e.addScaledVector(r[5],i*s*1.092548),e.addScaledVector(r[6],.315392*(3*s*s-1)),e.addScaledVector(r[7],n*s*1.092548),e.addScaledVector(r[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,s=t.z,r=this.coefficients;return e.copy(r[0]).multiplyScalar(.886227),e.addScaledVector(r[1],1.023328*i),e.addScaledVector(r[2],1.023328*s),e.addScaledVector(r[3],1.023328*n),e.addScaledVector(r[4],.858086*n*i),e.addScaledVector(r[5],.858086*i*s),e.addScaledVector(r[6],.743125*s*s-.247708),e.addScaledVector(r[7],.858086*n*s),e.addScaledVector(r[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e<9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n<9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e<9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n<9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e<9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,s=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*s,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*s,e[6]=.315392*(3*s*s-1),e[7]=1.092548*n*s,e[8]=.546274*(n*n-i*i)}}sJ.prototype.isSphericalHarmonics3=!0;class rJ extends cv.a{constructor(t=new sJ,e=1){super(void 0,e),this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}rJ.prototype.isLightProbe=!0;var oJ=n(63),aJ=n(43);class lJ extends S.a{constructor(){super(),this.type=\\\\\\\"InstancedBufferGeometry\\\\\\\",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}clone(){return(new this.constructor).copy(this)}toJSON(){const t=super.toJSON(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}lJ.prototype.isInstancedBufferGeometry=!0;class cJ extends Vf.a{constructor(t){super(t)}load(t,e,n,i){const s=this,r=new Gf.a(s.manager);r.setPath(s.path),r.setRequestHeader(s.requestHeader),r.setWithCredentials(s.withCredentials),r.load(t,(function(n){try{e(s.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),s.manager.itemError(t)}}),n,i)}parse(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const s=t.interleavedBuffers[i],r=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],s=new Uint32Array(i).buffer;return n[e]=s,s}(t,s.buffer),o=Object(It.c)(s.type,r),a=new cr.a(o,s.stride);return a.uuid=s.uuid,e[i]=a,a}const s=t.isInstancedBufferGeometry?new lJ:new S.a,r=t.data.index;if(void 0!==r){const t=Object(It.c)(r.type,r.array);s.setIndex(new C.a(t,1))}const o=t.data.attributes;for(const e in o){const n=o[e];let r;if(n.isInterleavedBufferAttribute){const e=i(t.data,n.data);r=new hr.a(e,n.itemSize,n.offset,n.normalized)}else{const t=Object(It.c)(n.type,n.array);r=new(n.isInstancedBufferAttribute?I$:C.a)(t,n.itemSize,n.normalized)}void 0!==n.name&&(r.name=n.name),void 0!==n.usage&&r.setUsage(n.usage),void 0!==n.updateRange&&(r.updateRange.offset=n.updateRange.offset,r.updateRange.count=n.updateRange.count),s.setAttribute(e,r)}const a=t.data.morphAttributes;if(a)for(const e in a){const n=a[e],r=[];for(let e=0,s=n.length;e<s;e++){const s=n[e];let o;if(s.isInterleavedBufferAttribute){const e=i(t.data,s.data);o=new hr.a(e,s.itemSize,s.offset,s.normalized)}else{const t=Object(It.c)(s.type,s.array);o=new C.a(t,s.itemSize,s.normalized)}void 0!==s.name&&(o.name=s.name),r.push(o)}s.morphAttributes[e]=r}t.data.morphTargetsRelative&&(s.morphTargetsRelative=!0);const l=t.data.groups||t.data.drawcalls||t.data.offsets;if(void 0!==l)for(let t=0,e=l.length;t!==e;++t){const e=l[t];s.addGroup(e.start,e.count,e.materialIndex)}const c=t.data.boundingSphere;if(void 0!==c){const t=new p.a;void 0!==c.center&&t.fromArray(c.center),s.boundingSphere=new MX.a(t,c.radius)}return t.name&&(s.name=t.name),t.userData&&(s.userData=t.userData),s}}class hJ extends S.a{constructor(t=1,e=8,n=0,i=2*Math.PI){super(),this.type=\\\\\\\"CircleGeometry\\\\\\\",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:i},e=Math.max(3,e);const s=[],r=[],o=[],a=[],l=new p.a,c=new d.a;r.push(0,0,0),o.push(0,0,1),a.push(.5,.5);for(let s=0,h=3;s<=e;s++,h+=3){const u=n+s/e*i;l.x=t*Math.cos(u),l.y=t*Math.sin(u),r.push(l.x,l.y,l.z),o.push(0,0,1),c.x=(r[h]/t+1)/2,c.y=(r[h+1]/t+1)/2,a.push(c.x,c.y)}for(let t=1;t<=e;t++)s.push(t,t+1,0);this.setIndex(s),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(r,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(o,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(a,2))}static fromJSON(t){return new hJ(t.radius,t.segments,t.thetaStart,t.thetaLength)}}class uJ extends XU{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type=\\\\\\\"DodecahedronGeometry\\\\\\\",this.parameters={radius:t,detail:e}}static fromJSON(t){return new uJ(t.radius,t.detail)}}const dJ=new p.a,pJ=new p.a,_J=new p.a,mJ=new tr.a;class fJ extends S.a{constructor(t=null,e=1){if(super(),this.type=\\\\\\\"EdgesGeometry\\\\\\\",this.parameters={geometry:t,thresholdAngle:e},null!==t){const n=4,i=Math.pow(10,n),s=Math.cos(On.a*e),r=t.getIndex(),o=t.getAttribute(\\\\\\\"position\\\\\\\"),a=r?r.count:o.count,l=[0,0,0],c=[\\\\\\\"a\\\\\\\",\\\\\\\"b\\\\\\\",\\\\\\\"c\\\\\\\"],h=new Array(3),u={},d=[];for(let t=0;t<a;t+=3){r?(l[0]=r.getX(t),l[1]=r.getX(t+1),l[2]=r.getX(t+2)):(l[0]=t,l[1]=t+1,l[2]=t+2);const{a:e,b:n,c:a}=mJ;if(e.fromBufferAttribute(o,l[0]),n.fromBufferAttribute(o,l[1]),a.fromBufferAttribute(o,l[2]),mJ.getNormal(_J),h[0]=`${Math.round(e.x*i)},${Math.round(e.y*i)},${Math.round(e.z*i)}`,h[1]=`${Math.round(n.x*i)},${Math.round(n.y*i)},${Math.round(n.z*i)}`,h[2]=`${Math.round(a.x*i)},${Math.round(a.y*i)},${Math.round(a.z*i)}`,h[0]!==h[1]&&h[1]!==h[2]&&h[2]!==h[0])for(let t=0;t<3;t++){const e=(t+1)%3,n=h[t],i=h[e],r=mJ[c[t]],o=mJ[c[e]],a=`${n}_${i}`,p=`${i}_${n}`;p in u&&u[p]?(_J.dot(u[p].normal)<=s&&(d.push(r.x,r.y,r.z),d.push(o.x,o.y,o.z)),u[p]=null):a in u||(u[a]={index0:l[t],index1:l[e],normal:_J.clone()})}}for(const t in u)if(u[t]){const{index0:e,index1:n}=u[t];dJ.fromBufferAttribute(o,e),pJ.fromBufferAttribute(o,n),d.push(dJ.x,dJ.y,dJ.z),d.push(pJ.x,pJ.y,pJ.z)}this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(d,3))}}}var gJ=n(79),vJ=n(53);class yJ extends S.a{constructor(t=new iJ.a([new d.a(.5,.5),new d.a(-.5,.5),new d.a(-.5,-.5),new d.a(.5,-.5)]),e={}){super(),this.type=\\\\\\\"ExtrudeGeometry\\\\\\\",this.parameters={shapes:t,options:e},t=Array.isArray(t)?t:[t];const n=this,i=[],s=[];for(let e=0,n=t.length;e<n;e++){r(t[e])}function r(t){const r=[],o=void 0!==e.curveSegments?e.curveSegments:12,a=void 0!==e.steps?e.steps:1;let l=void 0!==e.depth?e.depth:1,c=void 0===e.bevelEnabled||e.bevelEnabled,h=void 0!==e.bevelThickness?e.bevelThickness:.2,u=void 0!==e.bevelSize?e.bevelSize:h-.1,_=void 0!==e.bevelOffset?e.bevelOffset:0,m=void 0!==e.bevelSegments?e.bevelSegments:3;const f=e.extrudePath,g=void 0!==e.UVGenerator?e.UVGenerator:xJ;void 0!==e.amount&&(console.warn(\\\\\\\"THREE.ExtrudeBufferGeometry: amount has been renamed to depth.\\\\\\\"),l=e.amount);let v,y,x,b,w,T=!1;f&&(v=f.getSpacedPoints(a),T=!0,c=!1,y=f.computeFrenetFrames(a,!1),x=new p.a,b=new p.a,w=new p.a),c||(m=0,h=0,u=0,_=0);const A=t.extractPoints(o);let M=A.shape;const E=A.holes;if(!vJ.a.isClockWise(M)){M=M.reverse();for(let t=0,e=E.length;t<e;t++){const e=E[t];vJ.a.isClockWise(e)&&(E[t]=e.reverse())}}const S=vJ.a.triangulateShape(M,E),C=M;for(let t=0,e=E.length;t<e;t++){const e=E[t];M=M.concat(e)}function N(t,e,n){return e||console.error(\\\\\\\"THREE.ExtrudeGeometry: vec does not exist\\\\\\\"),e.clone().multiplyScalar(n).add(t)}const L=M.length,O=S.length;function P(t,e,n){let i,s,r;const o=t.x-e.x,a=t.y-e.y,l=n.x-t.x,c=n.y-t.y,h=o*o+a*a,u=o*c-a*l;if(Math.abs(u)>Number.EPSILON){const u=Math.sqrt(h),p=Math.sqrt(l*l+c*c),_=e.x-a/u,m=e.y+o/u,f=((n.x-c/p-_)*c-(n.y+l/p-m)*l)/(o*c-a*l);i=_+o*f-t.x,s=m+a*f-t.y;const g=i*i+s*s;if(g<=2)return new d.a(i,s);r=Math.sqrt(g/2)}else{let t=!1;o>Number.EPSILON?l>Number.EPSILON&&(t=!0):o<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,s=o,r=Math.sqrt(h)):(i=o,s=a,r=Math.sqrt(h/2))}return new d.a(i/r,s/r)}const R=[];for(let t=0,e=C.length,n=e-1,i=t+1;t<e;t++,n++,i++)n===e&&(n=0),i===e&&(i=0),R[t]=P(C[t],C[n],C[i]);const I=[];let F,D=R.concat();for(let t=0,e=E.length;t<e;t++){const e=E[t];F=[];for(let t=0,n=e.length,i=n-1,s=t+1;t<n;t++,i++,s++)i===n&&(i=0),s===n&&(s=0),F[t]=P(e[t],e[i],e[s]);I.push(F),D=D.concat(F)}for(let t=0;t<m;t++){const e=t/m,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+_;for(let t=0,e=C.length;t<e;t++){const e=N(C[t],R[t],i);k(e.x,e.y,-n)}for(let t=0,e=E.length;t<e;t++){const e=E[t];F=I[t];for(let t=0,s=e.length;t<s;t++){const s=N(e[t],F[t],i);k(s.x,s.y,-n)}}}const B=u+_;for(let t=0;t<L;t++){const e=c?N(M[t],D[t],B):M[t];T?(b.copy(y.normals[0]).multiplyScalar(e.x),x.copy(y.binormals[0]).multiplyScalar(e.y),w.copy(v[0]).add(b).add(x),k(w.x,w.y,w.z)):k(e.x,e.y,0)}for(let t=1;t<=a;t++)for(let e=0;e<L;e++){const n=c?N(M[e],D[e],B):M[e];T?(b.copy(y.normals[t]).multiplyScalar(n.x),x.copy(y.binormals[t]).multiplyScalar(n.y),w.copy(v[t]).add(b).add(x),k(w.x,w.y,w.z)):k(n.x,n.y,l/a*t)}for(let t=m-1;t>=0;t--){const e=t/m,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+_;for(let t=0,e=C.length;t<e;t++){const e=N(C[t],R[t],i);k(e.x,e.y,l+n)}for(let t=0,e=E.length;t<e;t++){const e=E[t];F=I[t];for(let t=0,s=e.length;t<s;t++){const s=N(e[t],F[t],i);T?k(s.x,s.y+v[a-1].y,v[a-1].x+n):k(s.x,s.y,l+n)}}}function z(t,e){let n=t.length;for(;--n>=0;){const i=n;let s=n-1;s<0&&(s=t.length-1);for(let t=0,n=a+2*m;t<n;t++){const n=L*t,r=L*(t+1);G(e+i+n,e+s+n,e+s+r,e+i+r)}}}function k(t,e,n){r.push(t),r.push(e),r.push(n)}function U(t,e,s){V(t),V(e),V(s);const r=i.length/3,o=g.generateTopUV(n,i,r-3,r-2,r-1);H(o[0]),H(o[1]),H(o[2])}function G(t,e,s,r){V(t),V(e),V(r),V(e),V(s),V(r);const o=i.length/3,a=g.generateSideWallUV(n,i,o-6,o-3,o-2,o-1);H(a[0]),H(a[1]),H(a[3]),H(a[1]),H(a[2]),H(a[3])}function V(t){i.push(r[3*t+0]),i.push(r[3*t+1]),i.push(r[3*t+2])}function H(t){s.push(t.x),s.push(t.y)}!function(){const t=i.length/3;if(c){let t=0,e=L*t;for(let t=0;t<O;t++){const n=S[t];U(n[2]+e,n[1]+e,n[0]+e)}t=a+2*m,e=L*t;for(let t=0;t<O;t++){const n=S[t];U(n[0]+e,n[1]+e,n[2]+e)}}else{for(let t=0;t<O;t++){const e=S[t];U(e[2],e[1],e[0])}for(let t=0;t<O;t++){const e=S[t];U(e[0]+L*a,e[1]+L*a,e[2]+L*a)}}n.addGroup(t,i.length/3-t,0)}(),function(){const t=i.length/3;let e=0;z(C,e),e+=C.length;for(let t=0,n=E.length;t<n;t++){const n=E[t];z(n,e),e+=n.length}n.addGroup(t,i.length/3-t,1)}()}this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(i,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(s,2)),this.computeVertexNormals()}toJSON(){const t=super.toJSON();return function(t,e,n){if(n.shapes=[],Array.isArray(t))for(let e=0,i=t.length;e<i;e++){const i=t[e];n.shapes.push(i.uuid)}else n.shapes.push(t.uuid);void 0!==e.extrudePath&&(n.options.extrudePath=e.extrudePath.toJSON());return n}(this.parameters.shapes,this.parameters.options,t)}static fromJSON(t,e){const n=[];for(let i=0,s=t.shapes.length;i<s;i++){const s=e[t.shapes[i]];n.push(s)}const i=t.options.extrudePath;return void 0!==i&&(t.options.extrudePath=(new gJ[i.type]).fromJSON(i)),new yJ(n,t.options)}}const xJ={generateTopUV:function(t,e,n,i,s){const r=e[3*n],o=e[3*n+1],a=e[3*i],l=e[3*i+1],c=e[3*s],h=e[3*s+1];return[new d.a(r,o),new d.a(a,l),new d.a(c,h)]},generateSideWallUV:function(t,e,n,i,s,r){const o=e[3*n],a=e[3*n+1],l=e[3*n+2],c=e[3*i],h=e[3*i+1],u=e[3*i+2],p=e[3*s],_=e[3*s+1],m=e[3*s+2],f=e[3*r],g=e[3*r+1],v=e[3*r+2];return Math.abs(a-h)<Math.abs(o-c)?[new d.a(o,1-l),new d.a(c,1-u),new d.a(p,1-m),new d.a(f,1-v)]:[new d.a(a,1-l),new d.a(h,1-u),new d.a(_,1-m),new d.a(g,1-v)]}};class bJ extends XU{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2;super([-1,n,0,1,n,0,-1,-n,0,1,-n,0,0,-1,n,0,1,n,0,-1,-n,0,1,-n,n,0,-1,n,0,1,-n,0,-1,-n,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],t,e),this.type=\\\\\\\"IcosahedronGeometry\\\\\\\",this.parameters={radius:t,detail:e}}static fromJSON(t){return new bJ(t.radius,t.detail)}}class wJ extends S.a{constructor(t=[new d.a(0,.5),new d.a(.5,0),new d.a(0,-.5)],e=12,n=0,i=2*Math.PI){super(),this.type=\\\\\\\"LatheGeometry\\\\\\\",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e),i=On.d(i,0,2*Math.PI);const s=[],r=[],o=[],a=1/e,l=new p.a,c=new d.a;for(let s=0;s<=e;s++){const h=n+s*a*i,u=Math.sin(h),d=Math.cos(h);for(let n=0;n<=t.length-1;n++)l.x=t[n].x*u,l.y=t[n].y,l.z=t[n].x*d,r.push(l.x,l.y,l.z),c.x=s/e,c.y=n/(t.length-1),o.push(c.x,c.y)}for(let n=0;n<e;n++)for(let e=0;e<t.length-1;e++){const i=e+n*t.length,r=i,o=i+t.length,a=i+t.length+1,l=i+1;s.push(r,o,l),s.push(o,a,l)}if(this.setIndex(s),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(r,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(o,2)),this.computeVertexNormals(),i===2*Math.PI){const n=this.attributes.normal.array,i=new p.a,s=new p.a,r=new p.a,o=e*t.length*3;for(let e=0,a=0;e<t.length;e++,a+=3)i.x=n[a+0],i.y=n[a+1],i.z=n[a+2],s.x=n[o+a+0],s.y=n[o+a+1],s.z=n[o+a+2],r.addVectors(i,s).normalize(),n[a+0]=n[o+a+0]=r.x,n[a+1]=n[o+a+1]=r.y,n[a+2]=n[o+a+2]=r.z}}static fromJSON(t){return new wJ(t.points,t.segments,t.phiStart,t.phiLength)}}class TJ extends S.a{constructor(t=.5,e=1,n=8,i=1,s=0,r=2*Math.PI){super(),this.type=\\\\\\\"RingGeometry\\\\\\\",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:n,phiSegments:i,thetaStart:s,thetaLength:r},n=Math.max(3,n);const o=[],a=[],l=[],c=[];let h=t;const u=(e-t)/(i=Math.max(1,i)),_=new p.a,m=new d.a;for(let t=0;t<=i;t++){for(let t=0;t<=n;t++){const i=s+t/n*r;_.x=h*Math.cos(i),_.y=h*Math.sin(i),a.push(_.x,_.y,_.z),l.push(0,0,1),m.x=(_.x/e+1)/2,m.y=(_.y/e+1)/2,c.push(m.x,m.y)}h+=u}for(let t=0;t<i;t++){const e=t*(n+1);for(let t=0;t<n;t++){const i=t+e,s=i,r=i+n+1,a=i+n+2,l=i+1;o.push(s,r,l),o.push(r,a,l)}}this.setIndex(o),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(a,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(l,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(c,2))}static fromJSON(t){return new TJ(t.innerRadius,t.outerRadius,t.thetaSegments,t.phiSegments,t.thetaStart,t.thetaLength)}}class AJ extends S.a{constructor(t=new iJ.a([new d.a(0,.5),new d.a(-.5,-.5),new d.a(.5,-.5)]),e=12){super(),this.type=\\\\\\\"ShapeGeometry\\\\\\\",this.parameters={shapes:t,curveSegments:e};const n=[],i=[],s=[],r=[];let o=0,a=0;if(!1===Array.isArray(t))l(t);else for(let e=0;e<t.length;e++)l(t[e]),this.addGroup(o,a,e),o+=a,a=0;function l(t){const o=i.length/3,l=t.extractPoints(e);let c=l.shape;const h=l.holes;!1===vJ.a.isClockWise(c)&&(c=c.reverse());for(let t=0,e=h.length;t<e;t++){const e=h[t];!0===vJ.a.isClockWise(e)&&(h[t]=e.reverse())}const u=vJ.a.triangulateShape(c,h);for(let t=0,e=h.length;t<e;t++){const e=h[t];c=c.concat(e)}for(let t=0,e=c.length;t<e;t++){const e=c[t];i.push(e.x,e.y,0),s.push(0,0,1),r.push(e.x,e.y)}for(let t=0,e=u.length;t<e;t++){const e=u[t],i=e[0]+o,s=e[1]+o,r=e[2]+o;n.push(i,s,r),a+=3}}this.setIndex(n),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(i,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(s,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(r,2))}toJSON(){const t=super.toJSON();return function(t,e){if(e.shapes=[],Array.isArray(t))for(let n=0,i=t.length;n<i;n++){const i=t[n];e.shapes.push(i.uuid)}else e.shapes.push(t.uuid);return e}(this.parameters.shapes,t)}static fromJSON(t,e){const n=[];for(let i=0,s=t.shapes.length;i<s;i++){const s=e[t.shapes[i]];n.push(s)}return new AJ(n,t.curveSegments)}}class MJ extends XU{constructor(t=1,e=0){super([1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type=\\\\\\\"TetrahedronGeometry\\\\\\\",this.parameters={radius:t,detail:e}}static fromJSON(t){return new MJ(t.radius,t.detail)}}class EJ extends S.a{constructor(t=1,e=.4,n=8,i=6,s=2*Math.PI){super(),this.type=\\\\\\\"TorusGeometry\\\\\\\",this.parameters={radius:t,tube:e,radialSegments:n,tubularSegments:i,arc:s},n=Math.floor(n),i=Math.floor(i);const r=[],o=[],a=[],l=[],c=new p.a,h=new p.a,u=new p.a;for(let r=0;r<=n;r++)for(let d=0;d<=i;d++){const p=d/i*s,_=r/n*Math.PI*2;h.x=(t+e*Math.cos(_))*Math.cos(p),h.y=(t+e*Math.cos(_))*Math.sin(p),h.z=e*Math.sin(_),o.push(h.x,h.y,h.z),c.x=t*Math.cos(p),c.y=t*Math.sin(p),u.subVectors(h,c).normalize(),a.push(u.x,u.y,u.z),l.push(d/i),l.push(r/n)}for(let t=1;t<=n;t++)for(let e=1;e<=i;e++){const n=(i+1)*t+e-1,s=(i+1)*(t-1)+e-1,o=(i+1)*(t-1)+e,a=(i+1)*t+e;r.push(n,s,a),r.push(s,o,a)}this.setIndex(r),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(o,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(a,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(l,2))}static fromJSON(t){return new EJ(t.radius,t.tube,t.radialSegments,t.tubularSegments,t.arc)}}class SJ extends S.a{constructor(t=1,e=.4,n=64,i=8,s=2,r=3){super(),this.type=\\\\\\\"TorusKnotGeometry\\\\\\\",this.parameters={radius:t,tube:e,tubularSegments:n,radialSegments:i,p:s,q:r},n=Math.floor(n),i=Math.floor(i);const o=[],a=[],l=[],c=[],h=new p.a,u=new p.a,d=new p.a,_=new p.a,m=new p.a,f=new p.a,g=new p.a;for(let o=0;o<=n;++o){const p=o/n*s*Math.PI*2;v(p,s,r,t,d),v(p+.01,s,r,t,_),f.subVectors(_,d),g.addVectors(_,d),m.crossVectors(f,g),g.crossVectors(m,f),m.normalize(),g.normalize();for(let t=0;t<=i;++t){const s=t/i*Math.PI*2,r=-e*Math.cos(s),p=e*Math.sin(s);h.x=d.x+(r*g.x+p*m.x),h.y=d.y+(r*g.y+p*m.y),h.z=d.z+(r*g.z+p*m.z),a.push(h.x,h.y,h.z),u.subVectors(h,d).normalize(),l.push(u.x,u.y,u.z),c.push(o/n),c.push(t/i)}}for(let t=1;t<=n;t++)for(let e=1;e<=i;e++){const n=(i+1)*(t-1)+(e-1),s=(i+1)*t+(e-1),r=(i+1)*t+e,a=(i+1)*(t-1)+e;o.push(n,s,a),o.push(s,r,a)}function v(t,e,n,i,s){const r=Math.cos(t),o=Math.sin(t),a=n/e*t,l=Math.cos(a);s.x=i*(2+l)*.5*r,s.y=i*(2+l)*o*.5,s.z=i*Math.sin(a)*.5}this.setIndex(o),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(a,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(l,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(c,2))}static fromJSON(t){return new SJ(t.radius,t.tube,t.tubularSegments,t.radialSegments,t.p,t.q)}}var CJ=n(90);class NJ extends S.a{constructor(t=new CJ.a(new p.a(-1,-1,0),new p.a(-1,1,0),new p.a(1,1,0)),e=64,n=1,i=8,s=!1){super(),this.type=\\\\\\\"TubeGeometry\\\\\\\",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:i,closed:s};const r=t.computeFrenetFrames(e,s);this.tangents=r.tangents,this.normals=r.normals,this.binormals=r.binormals;const o=new p.a,a=new p.a,l=new d.a;let c=new p.a;const h=[],u=[],_=[],m=[];function f(s){c=t.getPointAt(s/e,c);const l=r.normals[s],d=r.binormals[s];for(let t=0;t<=i;t++){const e=t/i*Math.PI*2,s=Math.sin(e),r=-Math.cos(e);a.x=r*l.x+s*d.x,a.y=r*l.y+s*d.y,a.z=r*l.z+s*d.z,a.normalize(),u.push(a.x,a.y,a.z),o.x=c.x+n*a.x,o.y=c.y+n*a.y,o.z=c.z+n*a.z,h.push(o.x,o.y,o.z)}}!function(){for(let t=0;t<e;t++)f(t);f(!1===s?e:0),function(){for(let t=0;t<=e;t++)for(let n=0;n<=i;n++)l.x=t/e,l.y=n/i,_.push(l.x,l.y)}(),function(){for(let t=1;t<=e;t++)for(let e=1;e<=i;e++){const n=(i+1)*(t-1)+(e-1),s=(i+1)*t+(e-1),r=(i+1)*t+e,o=(i+1)*(t-1)+e;m.push(n,s,o),m.push(s,r,o)}}()}(),this.setIndex(m),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(h,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(u,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(_,2))}toJSON(){const t=super.toJSON();return t.path=this.parameters.path.toJSON(),t}static fromJSON(t){return new NJ((new gJ[t.path.type]).fromJSON(t.path),t.tubularSegments,t.radius,t.radialSegments,t.closed)}}class LJ extends S.a{constructor(t=null){if(super(),this.type=\\\\\\\"WireframeGeometry\\\\\\\",this.parameters={geometry:t},null!==t){const e=[],n=new Set,i=new p.a,s=new p.a;if(null!==t.index){const r=t.attributes.position,o=t.index;let a=t.groups;0===a.length&&(a=[{start:0,count:o.count,materialIndex:0}]);for(let t=0,l=a.length;t<l;++t){const l=a[t],c=l.start;for(let t=c,a=c+l.count;t<a;t+=3)for(let a=0;a<3;a++){const l=o.getX(t+a),c=o.getX(t+(a+1)%3);i.fromBufferAttribute(r,l),s.fromBufferAttribute(r,c),!0===OJ(i,s,n)&&(e.push(i.x,i.y,i.z),e.push(s.x,s.y,s.z))}}}else{const r=t.attributes.position;for(let t=0,o=r.count/3;t<o;t++)for(let o=0;o<3;o++){const a=3*t+o,l=3*t+(o+1)%3;i.fromBufferAttribute(r,a),s.fromBufferAttribute(r,l),!0===OJ(i,s,n)&&(e.push(i.x,i.y,i.z),e.push(s.x,s.y,s.z))}}this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(e,3))}}}function OJ(t,e,n){const i=`${t.x},${t.y},${t.z}-${e.x},${e.y},${e.z}`,s=`${e.x},${e.y},${e.z}-${t.x},${t.y},${t.z}`;return!0!==n.has(i)&&!0!==n.has(s)&&(n.add(i,s),!0)}class PJ extends Vf.a{constructor(t){super(t)}load(t,e,n,i){const s=this,r=\\\\\\\"\\\\\\\"===this.path?aJ.a.extractUrlBase(t):this.path;this.resourcePath=this.resourcePath||r;const o=new Gf.a(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(t,(function(n){let r=null;try{r=JSON.parse(n)}catch(e){return void 0!==i&&i(e),void console.error(\\\\\\\"THREE:ObjectLoader: Can't parse \\\\\\\"+t+\\\\\\\".\\\\\\\",e.message)}const o=r.metadata;void 0!==o&&void 0!==o.type&&\\\\\\\"geometry\\\\\\\"!==o.type.toLowerCase()?s.parse(r,e):console.error(\\\\\\\"THREE.ObjectLoader: Can't load \\\\\\\"+t)}),n,i)}async loadAsync(t,e){const n=\\\\\\\"\\\\\\\"===this.path?aJ.a.extractUrlBase(t):this.path;this.resourcePath=this.resourcePath||n;const i=new Gf.a(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials);const s=await i.loadAsync(t,e),r=JSON.parse(s),o=r.metadata;if(void 0===o||void 0===o.type||\\\\\\\"geometry\\\\\\\"===o.type.toLowerCase())throw new Error(\\\\\\\"THREE.ObjectLoader: Can't load \\\\\\\"+t);return await this.parseAsync(r)}parse(t,e){const n=this.parseAnimations(t.animations),i=this.parseShapes(t.shapes),s=this.parseGeometries(t.geometries,i),r=this.parseImages(t.images,(function(){void 0!==e&&e(l)})),o=this.parseTextures(t.textures,r),a=this.parseMaterials(t.materials,o),l=this.parseObject(t.object,s,a,o,n),c=this.parseSkeletons(t.skeletons,l);if(this.bindSkeletons(l,c),void 0!==e){let t=!1;for(const e in r)if(r[e]instanceof HTMLImageElement){t=!0;break}!1===t&&e(l)}return l}async parseAsync(t){const e=this.parseAnimations(t.animations),n=this.parseShapes(t.shapes),i=this.parseGeometries(t.geometries,n),s=await this.parseImagesAsync(t.images),r=this.parseTextures(t.textures,s),o=this.parseMaterials(t.materials,r),a=this.parseObject(t.object,i,o,r,e),l=this.parseSkeletons(t.skeletons,a);return this.bindSkeletons(a,l),a}parseShapes(t){const e={};if(void 0!==t)for(let n=0,i=t.length;n<i;n++){const i=(new iJ.a).fromJSON(t[n]);e[i.uuid]=i}return e}parseSkeletons(t,e){const n={},i={};if(e.traverse((function(t){t.isBone&&(i[t.uuid]=t)})),void 0!==t)for(let e=0,s=t.length;e<s;e++){const s=(new nJ.a).fromJSON(t[e],i);n[s.uuid]=s}return n}parseGeometries(t,e){const n={};if(void 0!==t){const i=new cJ;for(let r=0,o=t.length;r<o;r++){let o;const a=t[r];switch(a.type){case\\\\\\\"BufferGeometry\\\\\\\":case\\\\\\\"InstancedBufferGeometry\\\\\\\":o=i.parse(a);break;case\\\\\\\"Geometry\\\\\\\":console.error(\\\\\\\"THREE.ObjectLoader: The legacy Geometry type is no longer supported.\\\\\\\");break;default:a.type in s?o=s[a.type].fromJSON(a,e):console.warn(`THREE.ObjectLoader: Unsupported geometry type \\\\\\\"${a.type}\\\\\\\"`)}o.uuid=a.uuid,void 0!==a.name&&(o.name=a.name),!0===o.isBufferGeometry&&void 0!==a.userData&&(o.userData=a.userData),n[a.uuid]=o}}return n}parseMaterials(t,e){const n={},i={};if(void 0!==t){const s=new Zf;s.setTextures(e);for(let e=0,r=t.length;e<r;e++){const r=t[e];if(\\\\\\\"MultiMaterial\\\\\\\"===r.type){const t=[];for(let e=0;e<r.materials.length;e++){const i=r.materials[e];void 0===n[i.uuid]&&(n[i.uuid]=s.parse(i)),t.push(n[i.uuid])}i[r.uuid]=t}else void 0===n[r.uuid]&&(n[r.uuid]=s.parse(r)),i[r.uuid]=n[r.uuid]}}return i}parseAnimations(t){const e={};if(void 0!==t)for(let n=0;n<t.length;n++){const i=t[n],s=Oq.a.parse(i);e[s.uuid]=s}return e}parseImages(t,e){const n=this,i={};let s;function r(t){if(\\\\\\\"string\\\\\\\"==typeof t){const e=t;return function(t){return n.manager.itemStart(t),s.load(t,(function(){n.manager.itemEnd(t)}),void 0,(function(){n.manager.itemError(t),n.manager.itemEnd(t)}))}(/^(\\\\/\\\\/)|([a-z]+:(\\\\/\\\\/)?)/i.test(e)?e:n.resourcePath+e)}return t.data?{data:Object(It.c)(t.type,t.data),width:t.width,height:t.height}:null}if(void 0!==t&&t.length>0){const n=new Xg.b(e);s=new oJ.a(n),s.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e<n;e++){const n=t[e],s=n.url;if(Array.isArray(s)){i[n.uuid]=[];for(let t=0,e=s.length;t<e;t++){const e=r(s[t]);null!==e&&(e instanceof HTMLImageElement?i[n.uuid].push(e):i[n.uuid].push(new vo.a(e.data,e.width,e.height)))}}else{const t=r(n.url);null!==t&&(i[n.uuid]=t)}}}return i}async parseImagesAsync(t){const e=this,n={};let i;async function s(t){if(\\\\\\\"string\\\\\\\"==typeof t){const n=t,s=/^(\\\\/\\\\/)|([a-z]+:(\\\\/\\\\/)?)/i.test(n)?n:e.resourcePath+n;return await i.loadAsync(s)}return t.data?{data:Object(It.c)(t.type,t.data),width:t.width,height:t.height}:null}if(void 0!==t&&t.length>0){i=new oJ.a(this.manager),i.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e<i;e++){const i=t[e],r=i.url;if(Array.isArray(r)){n[i.uuid]=[];for(let t=0,e=r.length;t<e;t++){const e=r[t],o=await s(e);null!==o&&(o instanceof HTMLImageElement?n[i.uuid].push(o):n[i.uuid].push(new vo.a(o.data,o.width,o.height)))}}else{const t=await s(i.url);null!==t&&(n[i.uuid]=t)}}}return n}parseTextures(t,e){function n(t,e){return\\\\\\\"number\\\\\\\"==typeof t?t:(console.warn(\\\\\\\"THREE.ObjectLoader.parseTexture: Constant should be in numeric form.\\\\\\\",t),e[t])}const i={};if(void 0!==t)for(let s=0,r=t.length;s<r;s++){const r=t[s];let o;void 0===r.image&&console.warn('THREE.ObjectLoader: No \\\\\\\"image\\\\\\\" specified for',r.uuid),void 0===e[r.image]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined image\\\\\\\",r.image);const a=e[r.image];Array.isArray(a)?(o=new it(a),6===a.length&&(o.needsUpdate=!0)):(o=a&&a.data?new vo.a(a.data,a.width,a.height):new Z.a(a),a&&(o.needsUpdate=!0)),o.uuid=r.uuid,void 0!==r.name&&(o.name=r.name),void 0!==r.mapping&&(o.mapping=n(r.mapping,RJ)),void 0!==r.offset&&o.offset.fromArray(r.offset),void 0!==r.repeat&&o.repeat.fromArray(r.repeat),void 0!==r.center&&o.center.fromArray(r.center),void 0!==r.rotation&&(o.rotation=r.rotation),void 0!==r.wrap&&(o.wrapS=n(r.wrap[0],IJ),o.wrapT=n(r.wrap[1],IJ)),void 0!==r.format&&(o.format=r.format),void 0!==r.type&&(o.type=r.type),void 0!==r.encoding&&(o.encoding=r.encoding),void 0!==r.minFilter&&(o.minFilter=n(r.minFilter,FJ)),void 0!==r.magFilter&&(o.magFilter=n(r.magFilter,FJ)),void 0!==r.anisotropy&&(o.anisotropy=r.anisotropy),void 0!==r.flipY&&(o.flipY=r.flipY),void 0!==r.premultiplyAlpha&&(o.premultiplyAlpha=r.premultiplyAlpha),void 0!==r.unpackAlignment&&(o.unpackAlignment=r.unpackAlignment),i[r.uuid]=o}return i}parseObject(t,e,n,i,s){let r,o,a;function l(t){return void 0===e[t]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined geometry\\\\\\\",t),e[t]}function c(t){if(void 0!==t){if(Array.isArray(t)){const e=[];for(let i=0,s=t.length;i<s;i++){const s=t[i];void 0===n[s]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined material\\\\\\\",s),e.push(n[s])}return e}return void 0===n[t]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined material\\\\\\\",t),n[t]}}function h(t){return void 0===i[t]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined texture\\\\\\\",t),i[t]}switch(t.type){case\\\\\\\"Scene\\\\\\\":r=new vs,void 0!==t.background&&(Number.isInteger(t.background)?r.background=new D.a(t.background):r.background=h(t.background)),void 0!==t.environment&&(r.environment=h(t.environment)),void 0!==t.fog&&(\\\\\\\"Fog\\\\\\\"===t.fog.type?r.fog=new Aa(t.fog.color,t.fog.near,t.fog.far):\\\\\\\"FogExp2\\\\\\\"===t.fog.type&&(r.fog=new Ma(t.fog.color,t.fog.density)));break;case\\\\\\\"PerspectiveCamera\\\\\\\":r=new tt.a(t.fov,t.aspect,t.near,t.far),void 0!==t.focus&&(r.focus=t.focus),void 0!==t.zoom&&(r.zoom=t.zoom),void 0!==t.filmGauge&&(r.filmGauge=t.filmGauge),void 0!==t.filmOffset&&(r.filmOffset=t.filmOffset),void 0!==t.view&&(r.view=Object.assign({},t.view));break;case\\\\\\\"OrthographicCamera\\\\\\\":r=new ot.a(t.left,t.right,t.top,t.bottom,t.near,t.far),void 0!==t.zoom&&(r.zoom=t.zoom),void 0!==t.view&&(r.view=Object.assign({},t.view));break;case\\\\\\\"AmbientLight\\\\\\\":r=new rU.a(t.color,t.intensity);break;case\\\\\\\"DirectionalLight\\\\\\\":r=new FU.a(t.color,t.intensity);break;case\\\\\\\"PointLight\\\\\\\":r=new QU.a(t.color,t.intensity,t.distance,t.decay);break;case\\\\\\\"RectAreaLight\\\\\\\":r=new pU(t.color,t.intensity,t.width,t.height);break;case\\\\\\\"SpotLight\\\\\\\":r=new rG.a(t.color,t.intensity,t.distance,t.angle,t.penumbra,t.decay);break;case\\\\\\\"HemisphereLight\\\\\\\":r=new qU(t.color,t.groundColor,t.intensity);break;case\\\\\\\"LightProbe\\\\\\\":r=(new rJ).fromJSON(t);break;case\\\\\\\"SkinnedMesh\\\\\\\":o=l(t.geometry),a=c(t.material),r=new gs.a(o,a),void 0!==t.bindMode&&(r.bindMode=t.bindMode),void 0!==t.bindMatrix&&r.bindMatrix.fromArray(t.bindMatrix),void 0!==t.skeleton&&(r.skeleton=t.skeleton);break;case\\\\\\\"Mesh\\\\\\\":o=l(t.geometry),a=c(t.material),r=new B.a(o,a);break;case\\\\\\\"InstancedMesh\\\\\\\":o=l(t.geometry),a=c(t.material);const e=t.count,n=t.instanceMatrix,i=t.instanceColor;r=new k$(o,a,e),r.instanceMatrix=new I$(new Float32Array(n.array),16),void 0!==i&&(r.instanceColor=new I$(new Float32Array(i.array),i.itemSize));break;case\\\\\\\"LOD\\\\\\\":r=new Cs;break;case\\\\\\\"Line\\\\\\\":r=new CU.a(l(t.geometry),c(t.material));break;case\\\\\\\"LineLoop\\\\\\\":r=new eJ.a(l(t.geometry),c(t.material));break;case\\\\\\\"LineSegments\\\\\\\":r=new Ms.a(l(t.geometry),c(t.material));break;case\\\\\\\"PointCloud\\\\\\\":case\\\\\\\"Points\\\\\\\":r=new ys.a(l(t.geometry),c(t.material));break;case\\\\\\\"Sprite\\\\\\\":r=new Q$(c(t.material));break;case\\\\\\\"Group\\\\\\\":r=new Fn.a;break;case\\\\\\\"Bone\\\\\\\":r=new xs.a;break;default:r=new Q.a}if(r.uuid=t.uuid,void 0!==t.name&&(r.name=t.name),void 0!==t.matrix?(r.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(r.matrixAutoUpdate=t.matrixAutoUpdate),r.matrixAutoUpdate&&r.matrix.decompose(r.position,r.quaternion,r.scale)):(void 0!==t.position&&r.position.fromArray(t.position),void 0!==t.rotation&&r.rotation.fromArray(t.rotation),void 0!==t.quaternion&&r.quaternion.fromArray(t.quaternion),void 0!==t.scale&&r.scale.fromArray(t.scale)),void 0!==t.castShadow&&(r.castShadow=t.castShadow),void 0!==t.receiveShadow&&(r.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.bias&&(r.shadow.bias=t.shadow.bias),void 0!==t.shadow.normalBias&&(r.shadow.normalBias=t.shadow.normalBias),void 0!==t.shadow.radius&&(r.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&r.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(r.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(r.visible=t.visible),void 0!==t.frustumCulled&&(r.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(r.renderOrder=t.renderOrder),void 0!==t.userData&&(r.userData=t.userData),void 0!==t.layers&&(r.layers.mask=t.layers),void 0!==t.children){const o=t.children;for(let t=0;t<o.length;t++)r.add(this.parseObject(o[t],e,n,i,s))}if(void 0!==t.animations){const e=t.animations;for(let t=0;t<e.length;t++){const n=e[t];r.animations.push(s[n])}}if(\\\\\\\"LOD\\\\\\\"===t.type){void 0!==t.autoUpdate&&(r.autoUpdate=t.autoUpdate);const e=t.levels;for(let t=0;t<e.length;t++){const n=e[t],i=r.getObjectByProperty(\\\\\\\"uuid\\\\\\\",n.object);void 0!==i&&r.addLevel(i,n.distance)}}return r}bindSkeletons(t,e){0!==Object.keys(e).length&&t.traverse((function(t){if(!0===t.isSkinnedMesh&&void 0!==t.skeleton){const n=e[t.skeleton];void 0===n?console.warn(\\\\\\\"THREE.ObjectLoader: No skeleton found with UUID:\\\\\\\",t.skeleton):t.bind(n,t.bindMatrix)}}))}setTexturePath(t){return console.warn(\\\\\\\"THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().\\\\\\\"),this.setResourcePath(t)}}const RJ={UVMapping:w.Yc,CubeReflectionMapping:w.o,CubeRefractionMapping:w.p,EquirectangularReflectionMapping:w.D,EquirectangularRefractionMapping:w.E,CubeUVReflectionMapping:w.q,CubeUVRefractionMapping:w.r},IJ={RepeatWrapping:w.wc,ClampToEdgeWrapping:w.n,MirroredRepeatWrapping:w.kb},FJ={NearestFilter:w.ob,NearestMipmapNearestFilter:w.sb,NearestMipmapLinearFilter:w.rb,LinearFilter:w.V,LinearMipmapNearestFilter:w.Z,LinearMipmapLinearFilter:w.Y};const DJ=new class extends ua{constructor(){super(...arguments),this.cache=ha.STRING(\\\\\\\"\\\\\\\",{hidden:!0}),this.reset=ha.BUTTON(null,{callback:(t,e)=>{BJ.PARAM_CALLBACK_reset(t,e)}})}};class BJ extends uV{constructor(){super(...arguments),this.paramsConfig=DJ}static type(){return\\\\\\\"cache\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to cache\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1)}cook(t){const e=\\\\\\\"\\\\\\\"==this.pv.cache||null==this.pv.cache,n=t[0];if(e&&n){const t=[];for(let e of n.objects())t.push(e.toJSON());this.setCoreGroup(n),this.p.cache.set(JSON.stringify(t))}else if(this.pv.cache){const t=new PJ,e=JSON.parse(this.pv.cache),n=[];for(let i of e){const e=t.parse(i);n.push(e)}this.setObjects(n)}else this.setObjects([])}static PARAM_CALLBACK_reset(t,e){t.param_callback_PARAM_CALLBACK_reset()}async param_callback_PARAM_CALLBACK_reset(){this.p.cache.set(\\\\\\\"\\\\\\\"),this.compute()}}const zJ={direction:new p.a(0,1,0)},kJ=[new d.a(-1,-1),new d.a(-1,1),new d.a(1,1),new d.a(1,-1)],UJ=new p.a(0,0,1);const GJ=new class extends ua{constructor(){super(...arguments),this.camera=ha.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.OBJ,types:ds}}),this.direction=ha.VECTOR3(zJ.direction),this.offset=ha.FLOAT(0,{range:[-10,10],rangeLocked:[!1,!1]}),this.useSegmentsCount=ha.BOOLEAN(!0),this.stepSize=ha.FLOAT(1,{range:[.001,1],rangeLocked:[!1,!1],visibleIf:{useSegmentsCount:0}}),this.segments=ha.VECTOR2([10,10],{visibleIf:{useSegmentsCount:1}}),this.sizeMult=ha.FLOAT(1,{range:[0,2],rangeLocked:[!0,!1]}),this.updateOnWindowResize=ha.BOOLEAN(1),this.update=ha.BUTTON(null,{callback:t=>{VJ.PARAM_CALLBACK_update(t)}})}};class VJ extends uV{constructor(){super(...arguments),this.paramsConfig=GJ,this._plane=new Y.a,this._raycaster=new eO,this._planeCorners=[new p.a,new p.a,new p.a,new p.a],this._planeCenter=new p.a,this._core_transform=new bU,this.segments_count=new d.a(1,1),this.planeSize=new d.a}static type(){return\\\\\\\"cameraPlane\\\\\\\"}cook(){this._updateWindowControllerDependency();const t=this.pv.camera.nodeWithContext(ts.OBJ);if(!t)return this.states.error.set(\\\\\\\"no camera found\\\\\\\"),void this.cookController.endCook();if(!ds.includes(t.type()))return this.states.error.set(\\\\\\\"node found is not a camera\\\\\\\"),void this.cookController.endCook();const e=t.object;this._computePlaneParams(e)}_updateWindowControllerDependency(){this.pv.updateOnWindowResize?this.addGraphInput(this.scene().windowController.graphNode()):this.removeGraphInput(this.scene().windowController.graphNode())}_computePlaneParams(t){this._plane.normal.copy(this.pv.direction),this._plane.constant=this.pv.offset;let e=0;this._planeCenter.set(0,0,0);for(let n of kJ){this._raycaster.setFromCamera(n,t);const i=this._planeCorners[e];this._raycaster.ray.intersectPlane(this._plane,i),this._planeCenter.add(i),e++}this._planeCenter.multiplyScalar(.25);const n=this._planeCorners[1].distanceTo(this._planeCorners[2]),i=this._planeCorners[0].distanceTo(this._planeCorners[3]),s=this._planeCorners[0].distanceTo(this._planeCorners[1]),r=this._planeCorners[2].distanceTo(this._planeCorners[3]),o=Math.max(n,i)*this.pv.sizeMult,a=Math.max(s,r)*this.pv.sizeMult;this.planeSize.set(o,a);const l=this._createPlane(this.planeSize);this._core_transform.rotateGeometry(l,UJ,this.pv.direction);const c=this._core_transform.translationMatrix(this._planeCenter);l.applyMatrix4(c),this.setGeometry(l)}_createPlane(t){return t=t.clone(),this.pv.useSegmentsCount?(this.segments_count.x=Math.floor(this.pv.segments.x),this.segments_count.y=Math.floor(this.pv.segments.y)):this.pv.stepSize>0&&(this.segments_count.x=Math.floor(t.x/this.pv.stepSize),this.segments_count.y=Math.floor(t.y/this.pv.stepSize),t.x=this.segments_count.x*this.pv.stepSize,t.y=this.segments_count.y*this.pv.stepSize),new L(t.x,t.y,this.segments_count.x,this.segments_count.y)}static PARAM_CALLBACK_update(t){t._paramCallbackUpdate()}_paramCallbackUpdate(){this.setDirty()}}class HJ extends aV{constructor(){super(...arguments),this._pointPosition=new p.a}static type(){return\\\\\\\"cameraProject\\\\\\\"}cook(t,e){var n,i;const s=t[0],r=e.camera.nodeWithContext(ts.OBJ,null===(n=this.states)||void 0===n?void 0:n.error);if(r){const t=r.object;for(let n of s.points())n.getPosition(this._pointPosition),e.unproject?this._pointPosition.unproject(t):this._pointPosition.project(t),n.setPosition(this._pointPosition)}else null===(i=this.states)||void 0===i||i.error.set(\\\\\\\"cameraNode invalid.\\\\\\\");return s}}HJ.DEFAULT_PARAMS={camera:new yi(\\\\\\\"\\\\\\\"),unproject:!1},HJ.INPUT_CLONED_STATE=Qi.FROM_NODE;const jJ=HJ.DEFAULT_PARAMS;const WJ=new class extends ua{constructor(){super(...arguments),this.camera=ha.NODE_PATH(jJ.camera.path(),{nodeSelection:{context:ts.OBJ,types:ds}}),this.unproject=ha.BOOLEAN(jJ.unproject)}};class qJ extends uV{constructor(){super(...arguments),this.paramsConfig=WJ}static type(){return\\\\\\\"cameraProject\\\\\\\"}static displayedInputNames(){return[\\\\\\\"points to project/unproject\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(HJ.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new HJ(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class XJ extends aV{constructor(){super(...arguments),this._geo_center=new p.a}static type(){return\\\\\\\"center\\\\\\\"}cook(t,e){var n;const i=t[0].objectsWithGeo(),s=new Array(3*i.length);s.fill(0);for(let t=0;t<i.length;t++){const e=i[t],r=e.geometry;r.computeBoundingBox(),r.boundingBox&&(null===(n=r.boundingBox)||void 0===n||n.getCenter(this._geo_center),e.updateMatrixWorld(),this._geo_center.applyMatrix4(e.matrixWorld),this._geo_center.toArray(s,3*t))}const r=new S.a;r.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(s),3));const o=this.createObject(r,Ns.POINTS);return this.createCoreGroupFromObjects([o])}}XJ.DEFAULT_PARAMS={},XJ.INPUT_CLONED_STATE=Qi.FROM_NODE;const YJ=new class extends ua{};class $J extends uV{constructor(){super(...arguments),this.paramsConfig=YJ}static type(){return\\\\\\\"center\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(XJ.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new XJ(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class JJ{static positions(t,e,n=360){const i=or.degrees_to_radians(n)/e,s=[];for(let n=0;n<e;n++){const e=i*n,r=t*Math.cos(e),o=t*Math.sin(e);s.push(new d.a(r,o))}return s}static create(t,e,n=360){const i=this.positions(t,e,n),s=[],r=[];let o;for(let t=0;t<i.length;t++)o=i[t],s.push(o.x),s.push(o.y),s.push(0),t>0&&(r.push(t-1),r.push(t));r.push(e-1),r.push(0);const a=new S.a;return a.setAttribute(\\\\\\\"position\\\\\\\",new C.c(s,3)),a.setIndex(r),a}}const ZJ=new p.a(0,0,1);class KJ extends aV{constructor(){super(...arguments),this._core_transform=new bU}static type(){return\\\\\\\"circle\\\\\\\"}cook(t,e){return e.open?this._create_circle(e):this._create_disk(e)}_create_circle(t){const e=JJ.create(t.radius,t.segments,t.arcAngle);return this._core_transform.rotateGeometry(e,ZJ,t.direction),this.createCoreGroupFromGeometry(e,Ns.LINE_SEGMENTS)}_create_disk(t){const e=new hJ(t.radius,t.segments);return this._core_transform.rotateGeometry(e,ZJ,t.direction),this.createCoreGroupFromGeometry(e)}}KJ.DEFAULT_PARAMS={radius:1,segments:12,open:!0,arcAngle:360,direction:new p.a(0,1,0)};const QJ=KJ.DEFAULT_PARAMS;const tZ=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(QJ.radius),this.segments=ha.INTEGER(QJ.segments,{range:[1,50],rangeLocked:[!0,!1]}),this.open=ha.BOOLEAN(QJ.open),this.arcAngle=ha.FLOAT(QJ.arcAngle,{range:[0,360],rangeLocked:[!1,!1],visibleIf:{open:1}}),this.direction=ha.VECTOR3(QJ.direction)}};class eZ extends uV{constructor(){super(...arguments),this.paramsConfig=tZ}static type(){return\\\\\\\"circle\\\\\\\"}initializeNode(){}cook(){this._operation=this._operation||new KJ(this._scene,this.states);const t=this._operation.cook([],this.pv);this.setCoreGroup(t)}}var nZ;!function(t){t.SEGMENTS_COUNT=\\\\\\\"segments count\\\\\\\",t.SEGMENTS_LENGTH=\\\\\\\"segments length\\\\\\\"}(nZ||(nZ={}));const iZ=[nZ.SEGMENTS_COUNT,nZ.SEGMENTS_LENGTH];var sZ;!function(t){t.ABC=\\\\\\\"abc\\\\\\\",t.ACB=\\\\\\\"acb\\\\\\\",t.AB=\\\\\\\"ab\\\\\\\",t.BC=\\\\\\\"bc\\\\\\\",t.AC=\\\\\\\"ac\\\\\\\"}(sZ||(sZ={}));const rZ=[sZ.ABC,sZ.ACB,sZ.AB,sZ.AC,sZ.BC];class oZ{constructor(t){this.params=t,this.a=new p.a,this.b=new p.a,this.c=new p.a,this.an=new p.a,this.bn=new p.a,this.cn=new p.a,this.ac=new p.a,this.ab=new p.a,this.ab_x_ac=new p.a,this.part0=new p.a,this.part1=new p.a,this.divider=1,this.a_center=new p.a,this.center=new p.a,this.normal=new p.a,this.radius=1,this.x=new p.a,this.y=new p.a,this.z=new p.a,this.angle_ab=1,this.angle_ac=1,this.angle_bc=1,this.angle=2*Math.PI,this.x_rotated=new p.a,this._created_geometries={}}created_geometries(){return this._created_geometries}create(t,e,n){this.a.copy(t),this.b.copy(e),this.c.copy(n),this._compute_axis(),this._create_arc(),this._create_center()}_create_arc(){this._compute_angle();const t=this._points_count(),e=new Array(3*t),n=new Array(t),i=this.angle/(t-1);this.x_rotated.copy(this.x).multiplyScalar(this.radius);let s=0;for(s=0;s<t;s++)this.x_rotated.copy(this.x).applyAxisAngle(this.normal,i*s).multiplyScalar(this.radius).add(this.center),this.x_rotated.toArray(e,3*s),s>0&&(n[2*(s-1)]=s-1,n[2*(s-1)+1]=s);this.params.full&&(n.push(s-1),n.push(0));const r=new S.a;if(r.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(e),3)),r.setIndex(n),this.params.addIdAttribute||this.params.addIdnAttribute){const e=new Array(t);for(let t=0;t<e.length;t++)e[t]=t;this.params.addIdAttribute&&r.setAttribute(\\\\\\\"id\\\\\\\",new C.a(new Float32Array(e),1));const n=e.map((e=>e/(t-1)));this.params.addIdnAttribute&&r.setAttribute(\\\\\\\"idn\\\\\\\",new C.a(new Float32Array(n),1))}this._created_geometries.arc=r}_create_center(){if(!this.params.center)return;const t=new S.a,e=[this.center.x,this.center.y,this.center.z];t.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(e),3)),this._created_geometries.center=t}_compute_axis(){this.ac.copy(this.c).sub(this.a),this.ab.copy(this.b).sub(this.a),this.ab_x_ac.copy(this.ab).cross(this.ac),this.divider=2*this.ab_x_ac.lengthSq(),this.part0.copy(this.ab_x_ac).cross(this.ab).multiplyScalar(this.ac.lengthSq()),this.part1.copy(this.ac).cross(this.ab_x_ac).multiplyScalar(this.ab.lengthSq()),this.a_center.copy(this.part0).add(this.part1).divideScalar(this.divider),this.radius=this.a_center.length(),this.normal.copy(this.ab_x_ac).normalize(),this.center.copy(this.a).add(this.a_center)}_compute_angle(){this.params.arc&&(this.params.full?(this.x.copy(this.a).sub(this.center).normalize(),this.angle=2*Math.PI):(this.an.copy(this.a).sub(this.center).normalize(),this.bn.copy(this.b).sub(this.center).normalize(),this.cn.copy(this.c).sub(this.center).normalize(),this._set_x_from_joinMode(),this.y.copy(this.normal),this.z.copy(this.x).cross(this.y).normalize(),this.angle_ab=this.an.angleTo(this.bn),this.angle_ac=this.an.angleTo(this.cn),this.angle_bc=this.bn.angleTo(this.cn),this._set_angle_from_joinMode()))}_points_count(){const t=this.params.pointsCountMode;switch(t){case nZ.SEGMENTS_COUNT:return this.params.segmentsCount+1;case nZ.SEGMENTS_LENGTH:{let t=Math.PI*this.radius*this.radius;return this.params.full||(t*=Math.abs(this.angle)/(2*Math.PI)),Math.ceil(t/this.params.segmentsLength)}}os.unreachable(t)}_set_x_from_joinMode(){const t=this.params.joinMode;switch(this.x.copy(this.a).sub(this.center).normalize(),t){case sZ.ABC:case sZ.ACB:case sZ.AB:case sZ.AC:return this.x.copy(this.an);case sZ.BC:return this.x.copy(this.bn)}os.unreachable(t)}_set_angle_from_joinMode(){const t=this.params.joinMode;switch(t){case sZ.ABC:return void(this.angle=this.angle_ab+this.angle_bc);case sZ.ACB:return this.angle=this.angle_ac+this.angle_bc,void(this.angle*=-1);case sZ.AB:return void(this.angle=this.angle_ab);case sZ.AC:return this.angle=this.angle_ac,void(this.angle*=-1);case sZ.BC:return void(this.angle=this.angle_bc)}os.unreachable(t)}}const aZ=new class extends ua{constructor(){super(...arguments),this.arc=ha.BOOLEAN(1),this.pointsCountMode=ha.INTEGER(iZ.indexOf(nZ.SEGMENTS_COUNT),{visibleIf:{arc:1},menu:{entries:iZ.map(((t,e)=>({value:e,name:t})))}}),this.segmentsLength=ha.FLOAT(.1,{visibleIf:{arc:1,pointsCountMode:iZ.indexOf(nZ.SEGMENTS_LENGTH)},range:[0,1],rangeLocked:[!0,!1]}),this.segmentsCount=ha.INTEGER(100,{visibleIf:{arc:1,pointsCountMode:iZ.indexOf(nZ.SEGMENTS_COUNT)},range:[1,100],rangeLocked:[!0,!1]}),this.full=ha.BOOLEAN(1,{visibleIf:{arc:1}}),this.joinMode=ha.INTEGER(rZ.indexOf(sZ.ABC),{visibleIf:{arc:1,full:0},menu:{entries:rZ.map(((t,e)=>({value:e,name:t})))}}),this.addIdAttribute=ha.BOOLEAN(1),this.addIdnAttribute=ha.BOOLEAN(1),this.center=ha.BOOLEAN(0)}};class lZ extends uV{constructor(){super(...arguments),this.paramsConfig=aZ,this.a=new p.a,this.b=new p.a,this.c=new p.a}static type(){return\\\\\\\"circle3Points\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.NEVER])}cook(t){const e=t[0].points();e.length<3?this.states.error.set(`only ${e.length} points found, when 3 are required`):this._create_circle(e)}_create_circle(t){const e=new oZ({arc:this.pv.arc,center:this.pv.center,pointsCountMode:iZ[this.pv.pointsCountMode],segmentsLength:this.pv.segmentsLength,segmentsCount:this.pv.segmentsCount,full:this.pv.full,joinMode:rZ[this.pv.joinMode],addIdAttribute:this.pv.addIdAttribute,addIdnAttribute:this.pv.addIdnAttribute});t[0].getPosition(this.a),t[1].getPosition(this.b),t[2].getPosition(this.c),e.create(this.a,this.b,this.c);const n=[],i=e.created_geometries();i.arc&&n.push(this.createObject(i.arc,Ns.LINE_SEGMENTS)),i.center&&n.push(this.createObject(i.center,Ns.POINTS)),this.setObjects(n)}}const cZ=new p.a,hZ=new Dy;class uZ extends aV{constructor(){super(...arguments),this._plane=new Y.a}static type(){return\\\\\\\"clip\\\\\\\"}cook(t,e){const n=t[0].objectsWithGeo()[0];this._plane.set(e.direction,-e.distance),this._plane.translate(e.origin);const i=this._createClipGeo(n);return i?this.createCoreGroupFromObjects([i]):this.createCoreGroupFromObjects([])}_createClipGeo(t){var e;const n=t;if(!n.geometry.boundsTree)return void(null===(e=this.states)||void 0===e||e.error.set(\\\\\\\"no BVH found on input geo, make sure to use a BVH SOP node\\\\\\\"));const i=n.geometry.boundsTree,s=t=>{let e=0;return i.shapecast({intersectsBounds:t=>this._plane.intersectsBox(t),intersectsTriangle:n=>{let i=0;hZ.start.copy(n.a),hZ.end.copy(n.b),this._plane.intersectLine(hZ,cZ)&&(null==t||t.setXYZ(e,cZ.x,cZ.y,cZ.z),e++,i++),hZ.start.copy(n.b),hZ.end.copy(n.c),this._plane.intersectLine(hZ,cZ)&&(null==t||t.setXYZ(e,cZ.x,cZ.y,cZ.z),i++,e++),hZ.start.copy(n.c),hZ.end.copy(n.a),this._plane.intersectLine(hZ,cZ)&&(null==t||t.setXYZ(e,cZ.x,cZ.y,cZ.z),i++,e++),2!==i&&(e-=i)}}),{index:e}},{index:r}=s(),o=new S.a,a=new C.a(new Float32Array(3*r),3,!1);o.setAttribute(\\\\\\\"position\\\\\\\",a);const l=new Ms.a(o,js.MATERIALS[Ns.LINE_SEGMENTS]);l.frustumCulled=!1;return s(l.geometry.attributes.position),l}}uZ.DEFAULT_PARAMS={origin:new p.a(0,0,0),distance:0,direction:new p.a(0,1,0)},uZ.INPUT_CLONED_STATE=Qi.NEVER;const dZ=uZ.DEFAULT_PARAMS;const pZ=new class extends ua{constructor(){super(...arguments),this.origin=ha.VECTOR3(dZ.origin),this.distance=ha.FLOAT(dZ.distance,{range:[-10,10],rangeLocked:[!1,!1]}),this.direction=ha.VECTOR3(dZ.direction)}};class _Z extends uV{constructor(){super(...arguments),this.paramsConfig=pZ}static type(){return\\\\\\\"clip\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(uZ.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new uZ(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class mZ extends aV{static type(){return\\\\\\\"color\\\\\\\"}cook(t,e){}}mZ.DEFAULT_PARAMS={fromAttribute:!1,attribName:\\\\\\\"\\\\\\\",color:new D.a(1,1,1),asHsv:!1};const fZ=new D.a(1,1,1),gZ=\\\\\\\"color\\\\\\\",vZ=mZ.DEFAULT_PARAMS;const yZ=new class extends ua{constructor(){super(...arguments),this.fromAttribute=ha.BOOLEAN(vZ.fromAttribute),this.attribName=ha.STRING(vZ.attribName,{visibleIf:{fromAttribute:1}}),this.color=ha.COLOR(vZ.color,{visibleIf:{fromAttribute:0},expression:{forEntities:!0}}),this.asHsv=ha.BOOLEAN(vZ.asHsv,{visibleIf:{fromAttribute:0}})}};class xZ extends uV{constructor(){super(...arguments),this.paramsConfig=yZ,this._r_arrays_by_geometry_uuid={},this._g_arrays_by_geometry_uuid={},this._b_arrays_by_geometry_uuid={}}static type(){return\\\\\\\"color\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to update color of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0],n=e.coreObjects();for(let t of n)if(this.pv.fromAttribute)this._set_fromAttribute(t);else{this.p.color.hasExpression()?await this._eval_expressions(t):this._eval_simple_values(t)}if(!this.io.inputs.cloneRequired(0)){const t=e.geometries();for(let e of t)e.getAttribute(gZ).needsUpdate=!0}this.setCoreGroup(e)}_set_fromAttribute(t){const e=t.coreGeometry();if(!e)return;this._create_init_color(e,fZ);const n=e.points(),i=e.attribSize(this.pv.attribName),s=e.geometry(),r=s.getAttribute(this.pv.attribName).array,o=s.getAttribute(gZ).array;switch(i){case 1:for(let t=0;t<n.length;t++){const e=3*t;o[e+0]=r[t],o[e+1]=1-r[t],o[e+2]=0}break;case 2:for(let t=0;t<n.length;t++){const e=3*t,n=2*t;o[e+0]=r[n+0],o[e+1]=r[n+1],o[e+2]=0}break;case 3:for(let t=0;t<r.length;t++)o[t]=r[t];break;case 4:for(let t=0;t<n.length;t++){const e=3*t,n=4*t;o[e+0]=r[n+0],o[e+1]=r[n+1],o[e+2]=r[n+2]}}}_create_init_color(t,e){t.hasAttrib(gZ)||t.addNumericAttrib(gZ,3,fZ)}_eval_simple_values(t){const e=t.coreGeometry();if(!e)return;let n;this._create_init_color(e,fZ),this.pv.asHsv?(n=new D.a,co.set_hsv(this.pv.color.r,this.pv.color.g,this.pv.color.b,n)):n=this.pv.color,e.addNumericAttrib(gZ,3,n)}async _eval_expressions(t){const e=t.points(),n=t.object(),i=t.coreGeometry();i&&this._create_init_color(i,fZ);const s=n.geometry;if(s){const t=s.getAttribute(gZ).array,n=await this._update_from_param(s,t,e,0),i=await this._update_from_param(s,t,e,1),r=await this._update_from_param(s,t,e,2);if(n&&this._commit_tmp_values(n,t,0),i&&this._commit_tmp_values(i,t,1),r&&this._commit_tmp_values(r,t,2),this.pv.asHsv){let n,i=new D.a,s=new D.a;for(let r of e)n=3*r.index(),i.fromArray(t,n),co.set_hsv(i.r,i.g,i.b,s),s.toArray(t,n)}}}async _update_from_param(t,e,n,i){const s=this.p.color.components[i],r=[this.pv.color.r,this.pv.color.g,this.pv.color.b][i],o=[this._r_arrays_by_geometry_uuid,this._g_arrays_by_geometry_uuid,this._b_arrays_by_geometry_uuid][i];let a;if(s.hasExpression()&&s.expressionController)a=this._init_array_if_required(t,o,n.length),await s.expressionController.computeExpressionForPoints(n,((t,e)=>{a[t.index()]=e}));else for(let t of n)e[3*t.index()+i]=r;return a}_init_array_if_required(t,e,n){const i=t.uuid,s=e[i];return s?s.length<n&&(e[i]=new Array(n)):e[i]=new Array(n),e[i]}_commit_tmp_values(t,e,n){for(let i=0;i<t.length;i++)e[3*i+n]=t[i]}}const bZ=new p.a(0,1,0);const wZ=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(1,{range:[0,1]}),this.height=ha.FLOAT(1,{range:[0,1]}),this.segmentsRadial=ha.INTEGER(12,{range:[3,20],rangeLocked:[!0,!1]}),this.segmentsHeight=ha.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1]}),this.cap=ha.BOOLEAN(1),this.thetaStart=ha.FLOAT(1,{range:[0,2*Math.PI]}),this.thetaLength=ha.FLOAT(\\\\\\\"2*$PI\\\\\\\",{range:[0,2*Math.PI]}),this.center=ha.VECTOR3([0,0,0]),this.direction=ha.VECTOR3([0,0,1])}};class TZ extends uV{constructor(){super(...arguments),this.paramsConfig=wZ,this._core_transform=new bU}static type(){return\\\\\\\"cone\\\\\\\"}cook(){const t=new lG(this.pv.radius,this.pv.height,this.pv.segmentsRadial,this.pv.segmentsHeight,!this.pv.cap,this.pv.thetaStart,this.pv.thetaLength);this._core_transform.rotateGeometry(t,bZ,this.pv.direction),t.translate(this.pv.center.x,this.pv.center.y,this.pv.center.z),this.setGeometry(t)}}const AZ={SCALE:new p.a(1,1,1),PSCALE:1,EYE:new p.a(0,0,0),UP:new p.a(0,1,0)},MZ=new p.a(1,1,1),EZ=new d.a(0,0),SZ=\\\\\\\"color\\\\\\\";var CZ;!function(t){t.POSITION=\\\\\\\"instancePosition\\\\\\\",t.SCALE=\\\\\\\"instanceScale\\\\\\\",t.ORIENTATION=\\\\\\\"instanceOrientation\\\\\\\",t.COLOR=\\\\\\\"instanceColor\\\\\\\",t.UV=\\\\\\\"instanceUv\\\\\\\"}(CZ||(CZ={}));const NZ={P:CZ.POSITION,N:CZ.ORIENTATION,up:CZ.ORIENTATION,Cd:CZ.COLOR,[Ws.COLOR]:CZ.COLOR,[Ws.NORMAL]:CZ.ORIENTATION,[Ws.POSITION]:CZ.POSITION,[Ws.PSCALE]:CZ.SCALE,[Ws.SCALE]:CZ.SCALE};class LZ{constructor(t){this._coreGroup=t,this._is_pscale_present=!1,this._is_scale_present=!1,this._is_normal_present=!1,this._is_up_present=!1,this._do_rotate_matrices=!1,this._matrixT=new A.a,this._matrixR=new A.a,this._matrixS=new A.a,this._pointScale=new p.a,this._pointNormal=new p.a,this._pointUp=new p.a,t&&this.setCoreGroup(t)}static remapName(t){return NZ[t]||t}setCoreGroup(t){this._coreGroup=t,this._is_pscale_present=this._coreGroup.hasAttrib(Ws.PSCALE),this._is_scale_present=this._coreGroup.hasAttrib(Ws.SCALE),this._is_normal_present=this._coreGroup.hasAttrib(Ws.NORMAL),this._is_up_present=this._coreGroup.hasAttrib(Ws.UP),this._do_rotate_matrices=this._is_normal_present}matrixFromPoint(t,e){e.identity();const n=t.position();this._is_scale_present?t.attribValue(\\\\\\\"scale\\\\\\\",this._pointScale):this._pointScale.copy(AZ.SCALE);const i=this._is_pscale_present?t.attribValue(\\\\\\\"pscale\\\\\\\"):AZ.PSCALE;this._pointScale.multiplyScalar(i);const s=this._matrixS;s.makeScale(this._pointScale.x,this._pointScale.y,this._pointScale.z);const r=this._matrixT;if(r.makeTranslation(n.x,n.y,n.z),e.multiply(r),this._do_rotate_matrices){const n=this._matrixR,i=AZ.EYE;t.attribValue(\\\\\\\"normal\\\\\\\",this._pointNormal),this._pointNormal.multiplyScalar(-1),this._is_up_present?t.attribValue(\\\\\\\"up\\\\\\\",this._pointUp):this._pointUp.copy(AZ.UP),this._pointUp.normalize(),n.lookAt(i,this._pointNormal,this._pointUp),e.multiply(n)}e.multiply(s)}static updateTransformInstanceAttributes(t,e,n){const i=t.length,s=new Float32Array(3*i),r=new Float32Array(3*i),o=new Float32Array(4*i),a=new LZ(e);let l=0;for(let e of t){a.matrixFromPoint(e,this._tmpMatrix);const t=3*l,n=4*l;this._tmpMatrix.decompose(this._position,this._quaternion,this._scale),this._position.toArray(s,t),this._quaternion.toArray(o,n),this._scale.toArray(r,t),l++}n.setAttribute(CZ.POSITION,new I$(s,3)),n.setAttribute(CZ.SCALE,new I$(r,3)),n.setAttribute(CZ.ORIENTATION,new I$(o,4))}static updateColorInstanceAttribute(t,e,n){const i=t.length,s=new Float32Array(3*i),r=e.hasAttrib(SZ);let o=0;for(let e of t){(r?e.attribValue(SZ,this._point_color):MZ).toArray(s,3*o),o++}n.setAttribute(CZ.COLOR,new I$(s,3))}static createInstanceBufferGeometry(t,e,n){const i=e.points(),s=new lJ;s.copy(t),s.instanceCount=1/0;const r=i.length,o=e.hasAttrib(\\\\\\\"uv\\\\\\\");if(o){const t=new Float32Array(2*r);let e=0;for(let n of i){const i=2*e;(o?n.attribValue(\\\\\\\"uv\\\\\\\",this._point_uv):EZ).toArray(t,i),e++}s.setAttribute(CZ.UV,new I$(t,2))}this.updateTransformInstanceAttributes(i,e,s),this.updateColorInstanceAttribute(i,e,s);e.attribNamesMatchingMask(n).forEach((t=>{const n=e.attribSize(t),o=new Float32Array(r*n);i.forEach(((e,i)=>{const s=e.attribValue(t);m.isNumber(s)?o[i]=s:s.toArray(o,i*n)})),s.setAttribute(t,new I$(o,n))}));return new fr(s).markAsInstance(),s}}LZ.transformAttributeNames=[CZ.POSITION,CZ.ORIENTATION,CZ.SCALE],LZ._point_color=new p.a,LZ._point_uv=new d.a,LZ._position=new p.a(0,0,0),LZ._quaternion=new hh.a,LZ._scale=new p.a(1,1,1),LZ._tmpMatrix=new A.a;class OZ extends ah{set_point(t){this._point=t,this.setDirty(),this.removeDirtyState()}value(t){return this._point?t?this._point.attribValue(t):this._point.index():this._global_index}}var PZ;!function(t){t[t.OBJECT=0]=\\\\\\\"OBJECT\\\\\\\",t[t.GEOMETRY=1]=\\\\\\\"GEOMETRY\\\\\\\"}(PZ||(PZ={}));const RZ=[PZ.OBJECT,PZ.GEOMETRY],IZ=[{name:\\\\\\\"object\\\\\\\",value:PZ.OBJECT},{name:\\\\\\\"geometry\\\\\\\",value:PZ.GEOMETRY}];const FZ=new class extends ua{constructor(){super(...arguments),this.count=ha.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1]}),this.transformOnly=ha.BOOLEAN(0),this.transformMode=ha.INTEGER(0,{menu:{entries:IZ}}),this.copyAttributes=ha.BOOLEAN(0),this.attributesToCopy=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{copyAttributes:!0}}),this.useCopyExpr=ha.BOOLEAN(0)}};class DZ extends uV{constructor(){super(...arguments),this.paramsConfig=FZ,this._attribute_names_to_copy=[],this._objects=[],this._instancer=new LZ,this._instanceMatrix=new A.a,this._object_position=new p.a}static type(){return\\\\\\\"copy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to be copied\\\\\\\",\\\\\\\"points to copy to\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState([Qi.ALWAYS,Qi.NEVER])}async cook(t){const e=t[0];if(!this.io.inputs.has_input(1))return void await this.cook_without_template(e);const n=t[1];n?await this.cook_with_template(e,n):this.states.error.set(\\\\\\\"second input invalid\\\\\\\")}async cook_with_template(t,e){this._objects=[];const n=e.points();this._instancer.setCoreGroup(e),this._attribute_names_to_copy=ss.attribNames(this.pv.attributesToCopy).filter((t=>e.hasAttrib(t))),await this._copy_moved_objects_on_template_points(t,n),this.setObjects(this._objects)}async _copy_moved_objects_on_template_points(t,e){for(let n=0;n<e.length;n++)await this._copy_moved_object_on_template_point(t,e,n)}async _copy_moved_object_on_template_point(t,e,n){this._instancer.matrixFromPoint(e[n],this._instanceMatrix);const i=e[n];this.stamp_node.set_point(i);const s=await this._get_moved_objects_for_template_point(t,n);for(let t of s)this.pv.copyAttributes&&this._copyAttributes_from_template(t,i),this.pv.transformOnly?t.applyMatrix4(this._instanceMatrix):this._apply_matrix_to_object_or_geometry(t,this._instanceMatrix),this._objects.push(t)}_apply_matrix_to_object_or_geometry(t,e){const n=RZ[this.pv.transformMode];switch(n){case PZ.OBJECT:return void this._apply_matrix_to_object(t,e);case PZ.GEOMETRY:{const n=t.geometry;return void(n&&n.applyMatrix4(e))}}os.unreachable(n)}_apply_matrix_to_object(t,e){this._object_position.copy(t.position),t.position.multiplyScalar(0),t.updateMatrix(),t.applyMatrix4(e),t.position.add(this._object_position),t.updateMatrix()}async _get_moved_objects_for_template_point(t,e){const n=await this._stamp_instance_group_if_required(t);if(n){return this.pv.transformOnly?f.compact([n.objects()[e]]):n.clone().objects()}return[]}async _stamp_instance_group_if_required(t){if(!this.pv.useCopyExpr)return t;{const t=await this.containerController.requestInputContainer(0);if(t){const e=t.coreContent();return e||void 0}this.states.error.set(`input failed for index ${this.stamp_value()}`)}}async _copy_moved_objects_for_each_instance(t){for(let e=0;e<this.pv.count;e++)await this._copy_moved_objects_for_instance(t,e)}async _copy_moved_objects_for_instance(t,e){this.stamp_node.set_global_index(e);const n=await this._stamp_instance_group_if_required(t);n&&n.objects().forEach((t=>{const e=br.clone(t);this._objects.push(e)}))}async cook_without_template(t){this._objects=[],await this._copy_moved_objects_for_each_instance(t),this.setObjects(this._objects)}_copyAttributes_from_template(t,e){this._attribute_names_to_copy.forEach(((n,i)=>{const s=e.attribValue(n);new br(t,i).addAttribute(n,s)}))}stamp_value(t){return this.stamp_node.value(t)}get stamp_node(){return this._stamp_node=this._stamp_node||this.create_stamp_node()}create_stamp_node(){const t=new OZ(this.scene());return this.dirtyController.setForbiddenTriggerNodes([t]),t}dispose(){super.dispose(),this._stamp_node&&this._stamp_node.dispose()}}const BZ=\\\\\\\"id\\\\\\\",zZ=\\\\\\\"class\\\\\\\",kZ=\\\\\\\"html\\\\\\\";class UZ extends aV{static type(){return\\\\\\\"CSS2DObject\\\\\\\"}cook(t,e){const n=t[0];if(n){const t=this._create_objects_from_input_points(n,e);return this.createCoreGroupFromObjects(t)}{const t=this._create_object_from_scratch(e);return this.createCoreGroupFromObjects([t])}}_create_objects_from_input_points(t,e){const n=t.points(),i=[];for(let t of n){const n=e.useIdAttrib?t.attribValue(BZ):e.id,s=e.useClassAttrib?t.attribValue(zZ):e.className,r=e.useHTMLAttrib?t.attribValue(kZ):e.html,o=UZ.create_css_object({id:n,className:s,html:r}),a=o.element;if(e.copyAttributes){const n=ss.attribNames(e.attributesToCopy);for(let e of n){const n=t.attribValue(e);m.isString(n)?a.setAttribute(e,n):m.isNumber(n)&&a.setAttribute(e,`${n}`)}}o.position.copy(t.position()),o.updateMatrix(),i.push(o)}return i}_create_object_from_scratch(t){return UZ.create_css_object({id:t.id,className:t.className,html:t.html})}static create_css_object(t){const e=document.createElement(\\\\\\\"div\\\\\\\");e.id=t.id,e.className=t.className,e.innerHTML=t.html;const n=new dq(e);return n.matrixAutoUpdate=!1,n}}UZ.DEFAULT_PARAMS={useIdAttrib:!1,id:\\\\\\\"myCSSObject\\\\\\\",useClassAttrib:!1,className:\\\\\\\"CSS2DObject\\\\\\\",useHTMLAttrib:!1,html:\\\\\\\"<div>default html</div>\\\\\\\",copyAttributes:!1,attributesToCopy:\\\\\\\"\\\\\\\"},UZ.INPUT_CLONED_STATE=Qi.NEVER;const GZ=UZ.DEFAULT_PARAMS;const VZ=new class extends ua{constructor(){super(...arguments),this.useIdAttrib=ha.BOOLEAN(GZ.useIdAttrib),this.id=ha.STRING(GZ.id,{visibleIf:{useIdAttrib:0}}),this.useClassAttrib=ha.BOOLEAN(GZ.useClassAttrib),this.className=ha.STRING(GZ.className,{visibleIf:{useClassAttrib:0}}),this.useHTMLAttrib=ha.BOOLEAN(GZ.useHTMLAttrib),this.html=ha.STRING(GZ.html,{visibleIf:{useHTMLAttrib:0},multiline:!0}),this.copyAttributes=ha.BOOLEAN(GZ.copyAttributes),this.attributesToCopy=ha.STRING(GZ.attributesToCopy,{visibleIf:{copyAttributes:!0}})}};class HZ extends uV{constructor(){super(...arguments),this.paramsConfig=VZ}static type(){return\\\\\\\"CSS2DObject\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(UZ.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new UZ(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class jZ{constructor(t,e){this._size=t,this._type=e}size(){return this._size}type(){return this._type}static from_value(t){const e=m.isString(t)?zs.STRING:zs.NUMERIC;return new this(m.isArray(t)?t.length:1,e)}}class WZ{constructor(t={}){this._attribute_datas_by_name={},this._options={},this._options.dataKeysPrefix=t.dataKeysPrefix,this._options.skipEntries=t.skipEntries,this._options.doConvert=t.doConvert||!1,this._options.convertToNumeric=t.convertToNumeric}dataKeysPrefix(){return this._options.dataKeysPrefix}get_prefixed_json(t,e){if(0==e.length)return t;{const n=e.shift();if(n)return this.get_prefixed_json(t[n],e)}return[]}setJSON(t){return this._json=t}createObject(){const t=new S.a,e=new fr(t);if(null!=this._json){const n=this._json.length;e.initPositionAttribute(n),this._find_attributes();const i=ss.attribNames(this._options.convertToNumeric||\\\\\\\"\\\\\\\");for(let n of Object.keys(this._attribute_datas_by_name)){const s=Xs.remapName(n);let r=this._attribute_values_for_name(n).flat();const o=this._attribute_datas_by_name[n],a=o.size();if(o.type()===zs.STRING)if(this._options.doConvert&&ss.matchesOneMask(n,i)){const e=r.map((t=>m.isString(t)?parseFloat(t)||0:t));t.setAttribute(s,new C.c(e,a))}else{const t=Xs.arrayToIndexedArrays(r);e.setIndexedAttribute(s,t.values,t.indices)}else{const e=r;t.setAttribute(s,new C.c(e,a))}}}return t}_find_attributes(){let t;const e=ss.attribNames(this._options.skipEntries||\\\\\\\"\\\\\\\");if(this._json&&null!=(t=this._json[0]))for(let n of Object.keys(t)){const i=t[n];if(this._value_has_subentries(i))for(let t of Object.keys(i)){const s=[n,t].join(\\\\\\\":\\\\\\\"),r=i[n];ss.matchesOneMask(s,e)||(this._attribute_datas_by_name[s]=jZ.from_value(r))}else ss.matchesOneMask(n,e)||(this._attribute_datas_by_name[n]=jZ.from_value(i))}}_attribute_values_for_name(t){return this._json?this._json.map((e=>{const n=t.split(\\\\\\\":\\\\\\\")[0],i=e[n];if(this._value_has_subentries(i)){return i[t.substring(n.length+1)]||0}return i||0})):[]}_value_has_subentries(t){return m.isObject(t)&&!m.isArray(t)}}const qZ=JSON.stringify([{value:-40},{value:-30},{value:-20},{value:-10},{value:0},{value:10},{value:20},{value:30},{value:40},{value:50},{value:60},{value:70},{value:80}]);const XZ=new class extends ua{constructor(){super(...arguments),this.data=ha.STRING(qZ)}};class YZ extends uV{constructor(){super(...arguments),this.paramsConfig=XZ}static type(){return\\\\\\\"data\\\\\\\"}cook(){let t=null;try{t=JSON.parse(this.pv.data)}catch(t){this.states.error.set(\\\\\\\"could not parse json\\\\\\\")}if(t)try{const e=new WZ;e.setJSON(t);const n=e.createObject();this.setGeometry(n,Ns.POINTS)}catch(t){this.states.error.set(\\\\\\\"could not build geometry from json\\\\\\\")}else this.cookController.endCook()}}class $Z extends $g{constructor(t,e,n={},i){super(t,e,i),this._node=i,this._parser=new WZ(n)}async load(t,e,n){const i=await this._urlToLoad();fetch(i).then((async e=>{let n=await e.json();const i=this._parser.dataKeysPrefix();null!=i&&\\\\\\\"\\\\\\\"!=i&&(n=this._parser.get_prefixed_json(n,i.split(\\\\\\\".\\\\\\\"))),this._parser.setJSON(n);const s=this._parser.createObject();t(s)})).catch((t=>{li.error(\\\\\\\"error\\\\\\\",t),n(t)}))}}const JZ=\\\\\\\"position\\\\\\\";class ZZ extends $g{constructor(t,e,n,i){super(t,e,i),this.attribute_names=n,this._node=i,this.attribute_names_from_first_line=!1,this.lines=[],this.points_count=0,this.attribute_values_by_name={},this.attribute_data_by_name={},this._loading=!1,this.attribute_names||(this.attribute_names_from_first_line=!0)}async load(){if(this._loading)return void console.warn(\\\\\\\"is already loading\\\\\\\");this._loading=!0,this.points_count=0,await this.loadData(),this.infer_types(),this.read_values();return this.create_points()}async loadData(){const t=await this._urlToLoad(),e=await fetch(t),n=await e.text();this.lines=n.split(\\\\\\\"\\\\n\\\\\\\"),this.attribute_names||(this.attribute_names=this.lines[0].split(ZZ.SEPARATOR)),this.attribute_names=this.attribute_names.map((t=>Xs.remapName(t)));for(let t of this.attribute_names)this.attribute_values_by_name[t]=[]}infer_types(){const t=this.attribute_names_from_first_line?1:0;let e=this.lines[t].split(ZZ.SEPARATOR);for(let t=0;t<e.length;t++){const n=this.attribute_names[t],i=e[t],s=this._value_from_line_element(i);this.attribute_data_by_name[n]=jZ.from_value(s)}}_value_from_line_element(t){if(m.isString(t)){if(`${parseFloat(t)}`===t)return parseFloat(t);if(\\\\\\\"[\\\\\\\"===t[0]&&\\\\\\\"]\\\\\\\"===t[t.length-1]){return t.substring(1,t.length-1).split(ZZ.VECTOR_SEPARATOR).map((t=>parseFloat(t)))}return t}return t}read_values(){if(!this.attribute_names)return;let t;for(let e=this.attribute_names_from_first_line?1:0;e<this.lines.length;e++){t=this.lines[e];const n=t.split(ZZ.SEPARATOR);if(n.length>=this.attribute_names.length){for(let t=0;t<n.length;t++){const e=this.attribute_names[t];if(e){const i=n[t],s=this._value_from_line_element(i);this.attribute_values_by_name[e].push(s)}}this.points_count+=1}}if(!this.attribute_values_by_name.position){const t=new Array(3*this.points_count);t.fill(0),this.attribute_values_by_name.position=t,this.attribute_data_by_name.position=new jZ(3,zs.NUMERIC),this.attribute_names.push(JZ)}}create_points(){if(!this.attribute_names)return;const t=new S.a,e=new fr(t);for(let n of this.attribute_names){const i=this.attribute_values_by_name[n].flat(),s=this.attribute_data_by_name[n].size();if(this.attribute_data_by_name[n].type()==zs.STRING){const t=Xs.arrayToIndexedArrays(i);e.setIndexedAttribute(n,t.values,t.indices)}else t.setAttribute(n,new C.c(i,s))}const n=new Array(this.points_count);for(let t=0;t<this.points_count;t++)n.push(t);return t.setIndex(n),t}}var KZ;ZZ.SEPARATOR=\\\\\\\",\\\\\\\",ZZ.VECTOR_SEPARATOR=\\\\\\\",\\\\\\\",function(t){t.JSON=\\\\\\\"json\\\\\\\",t.CSV=\\\\\\\"csv\\\\\\\"}(KZ||(KZ={}));const QZ=[KZ.JSON,KZ.CSV],tK=`${qg}/nodes/sop/DataUrl/basic.json`;const eK=new class extends ua{constructor(){super(...arguments),this.dataType=ha.INTEGER(QZ.indexOf(KZ.JSON),{menu:{entries:QZ.map(((t,e)=>({name:t,value:e})))}}),this.url=ha.STRING(tK,{fileBrowse:{type:[Rr.JSON]}}),this.jsonDataKeysPrefix=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{dataType:QZ.indexOf(KZ.JSON)}}),this.skipEntries=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{dataType:QZ.indexOf(KZ.JSON)}}),this.convert=ha.BOOLEAN(0,{visibleIf:{dataType:QZ.indexOf(KZ.JSON)}}),this.convertToNumeric=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{dataType:QZ.indexOf(KZ.JSON),convert:1}}),this.readAttribNamesFromFile=ha.BOOLEAN(1,{visibleIf:{dataType:QZ.indexOf(KZ.CSV)}}),this.attribNames=ha.STRING(\\\\\\\"height scale\\\\\\\",{visibleIf:{dataType:QZ.indexOf(KZ.CSV),readAttribNamesFromFile:0}}),this.reload=ha.BUTTON(null,{callback:(t,e)=>{nK.PARAM_CALLBACK_reload(t,e)}})}};class nK extends uV{constructor(){super(...arguments),this.paramsConfig=eK}static type(){return\\\\\\\"dataUrl\\\\\\\"}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}async cook(){this._load()}_load(){switch(QZ[this.pv.dataType]){case KZ.JSON:return this._loadJSON();case KZ.CSV:return this._loadCSV()}}_clearLoadedBlob(){switch(QZ[this.pv.dataType]){case KZ.JSON:return this._resetJSON();case KZ.CSV:return this._resetCSV()}}_url(){const t=this.scene().assets.root();return t?`${t}${this.pv.url}`:this.pv.url}_loadJSON(){new $Z(this._url(),this.scene(),{dataKeysPrefix:this.pv.jsonDataKeysPrefix,skipEntries:this.pv.skipEntries,doConvert:this.pv.convert,convertToNumeric:this.pv.convertToNumeric},this).load(this._onLoad.bind(this),void 0,this._onError.bind(this))}_resetJSON(){new $Z(this._url(),this.scene()).deregisterUrl()}_onLoad(t){this.setGeometry(t,Ns.POINTS)}_onError(t){this.states.error.set(`could not load geometry from ${this._url()} (${t})`),this.cookController.endCook()}async _loadCSV(){const t=this.pv.readAttribNamesFromFile?void 0:this.pv.attribNames.split(\\\\\\\" \\\\\\\"),e=new ZZ(this._url(),this.scene(),t,this),n=await e.load();n?this.setGeometry(n,Ns.POINTS):this.states.error.set(\\\\\\\"could not generate points\\\\\\\")}_resetCSV(){new ZZ(this._url(),this.scene(),[],this).deregisterUrl()}static PARAM_CALLBACK_reload(t,e){t.param_callback_reload()}param_callback_reload(){this._clearLoadedBlob(),this.p.url.setDirty()}}class iK extends S.a{constructor(t,e,n,i){super();const s=[],r=[],o=[],a=new p.a,l=new A.a;l.makeRotationFromEuler(n),l.setPosition(e);const c=new A.a;function h(e,n,i){n.applyMatrix4(t.matrixWorld),n.applyMatrix4(c),i.transformDirection(t.matrixWorld),e.push(new sK(n.clone(),i.clone()))}function u(t,e){const n=[],s=.5*Math.abs(i.dot(e));for(let i=0;i<t.length;i+=3){let r,o,a,l,c=0;const h=t[i+0].position.dot(e)-s>0,u=t[i+1].position.dot(e)-s>0,p=t[i+2].position.dot(e)-s>0;switch(c=(h?1:0)+(u?1:0)+(p?1:0),c){case 0:n.push(t[i]),n.push(t[i+1]),n.push(t[i+2]);break;case 1:if(h&&(r=t[i+1],o=t[i+2],a=d(t[i],r,e,s),l=d(t[i],o,e,s)),u){r=t[i],o=t[i+2],a=d(t[i+1],r,e,s),l=d(t[i+1],o,e,s),n.push(a),n.push(o.clone()),n.push(r.clone()),n.push(o.clone()),n.push(a.clone()),n.push(l);break}p&&(r=t[i],o=t[i+1],a=d(t[i+2],r,e,s),l=d(t[i+2],o,e,s)),n.push(r.clone()),n.push(o.clone()),n.push(a),n.push(l),n.push(a.clone()),n.push(o.clone());break;case 2:h||(r=t[i].clone(),o=d(r,t[i+1],e,s),a=d(r,t[i+2],e,s),n.push(r),n.push(o),n.push(a)),u||(r=t[i+1].clone(),o=d(r,t[i+2],e,s),a=d(r,t[i],e,s),n.push(r),n.push(o),n.push(a)),p||(r=t[i+2].clone(),o=d(r,t[i],e,s),a=d(r,t[i+1],e,s),n.push(r),n.push(o),n.push(a))}}return n}function d(t,e,n,i){const s=t.position.dot(n)-i,r=s/(s-(e.position.dot(n)-i));return new sK(new p.a(t.position.x+r*(e.position.x-t.position.x),t.position.y+r*(e.position.y-t.position.y),t.position.z+r*(e.position.z-t.position.z)),new p.a(t.normal.x+r*(e.normal.x-t.normal.x),t.normal.y+r*(e.normal.y-t.normal.y),t.normal.z+r*(e.normal.z-t.normal.z)))}c.copy(l).invert(),function(){let e=[];const n=new p.a,c=new p.a;if(!0===t.geometry.isGeometry)return void console.error(\\\\\\\"THREE.DecalGeometry no longer supports THREE.Geometry. Use BufferGeometry instead.\\\\\\\");const d=t.geometry,_=d.attributes.position,m=d.attributes.normal;if(null!==d.index){const t=d.index;for(let i=0;i<t.count;i++)n.fromBufferAttribute(_,t.getX(i)),c.fromBufferAttribute(m,t.getX(i)),h(e,n,c)}else for(let t=0;t<_.count;t++)n.fromBufferAttribute(_,t),c.fromBufferAttribute(m,t),h(e,n,c);e=u(e,a.set(1,0,0)),e=u(e,a.set(-1,0,0)),e=u(e,a.set(0,1,0)),e=u(e,a.set(0,-1,0)),e=u(e,a.set(0,0,1)),e=u(e,a.set(0,0,-1));for(let t=0;t<e.length;t++){const n=e[t];o.push(.5+n.position.x/i.x,.5+n.position.y/i.y),n.position.applyMatrix4(l),s.push(n.position.x,n.position.y,n.position.z),r.push(n.normal.x,n.normal.y,n.normal.z)}}(),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(s,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(r,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(o,2))}}class sK{constructor(t,e){this.position=t,this.normal=e}clone(){return new this.constructor(this.position.clone(),this.normal.clone())}}class rK extends aV{constructor(){super(...arguments),this._r=new p.a,this._rotation=new ny.a(0,0,0),this._scale=new p.a(1,1,1)}static type(){return\\\\\\\"decal\\\\\\\"}cook(t,e){const n=t[0];this._r.copy(e.r).multiplyScalar(On.a),this._rotation.set(this._r.x,this._r.y,this._r.z),this._scale.copy(e.s).multiplyScalar(e.scale);const i=n.objectsWithGeo(),s=[];for(let t of i)if(t.isMesh){const n=new iK(t,e.t,this._rotation,this._scale),i=new B.a(n,t.material);s.push(i)}return this.createCoreGroupFromObjects(s)}}rK.DEFAULT_PARAMS={t:new p.a(0,0,0),r:new p.a(0,0,0),s:new p.a(1,1,1),scale:1},rK.INPUT_CLONED_STATE=Qi.NEVER;const oK=rK.DEFAULT_PARAMS;const aK=new class extends ua{constructor(){super(...arguments),this.t=ha.VECTOR3(oK.t),this.r=ha.VECTOR3(oK.r),this.s=ha.VECTOR3(oK.s),this.scale=ha.FLOAT(oK.scale)}};class lK extends uV{constructor(){super(...arguments),this.paramsConfig=aK}static type(){return\\\\\\\"decal\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create decal from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(rK.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new rK(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const cK=new class extends ua{constructor(){super(...arguments),this.duration=ha.INTEGER(1e3,{range:[0,1e3],rangeLocked:[!0,!1]})}};class hK extends uV{constructor(){super(...arguments),this.paramsConfig=cK}static type(){return\\\\\\\"delay\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.ALWAYS)}cook(t){const e=t[0];setTimeout((()=>{this.setCoreGroup(e)}),Math.max(this.pv.duration,0))}}class uK{constructor(t){this.node=t,this.selected_state=new Map,this._entities_count=0,this._selected_entities_count=0}init(t){this.selected_state.clear();for(let e of t)this.selected_state.set(e,!1);this._entities_count=t.length,this._selected_entities_count=0}select(t){const e=this.selected_state.get(t);null!=e&&0==e&&(this.selected_state.set(t,!0),this._selected_entities_count++)}entities_to_keep(){return this._entities_for_state(this.node.pv.invert)}entities_to_delete(){return this._entities_for_state(!this.node.pv.invert)}_entities_for_state(t){const e=!!t,n=t?this._selected_entities_count:this._entities_count-this._selected_entities_count;if(0==n)return[];{const t=new Array(n);let i=0;return this.selected_state.forEach(((n,s)=>{n==e&&(t[i]=s,i++)})),t}}}var dK;!function(t){t.EQUAL=\\\\\\\"==\\\\\\\",t.LESS_THAN=\\\\\\\"<\\\\\\\",t.EQUAL_OR_LESS_THAN=\\\\\\\"<=\\\\\\\",t.EQUAL_OR_GREATER_THAN=\\\\\\\">=\\\\\\\",t.GREATER_THAN=\\\\\\\">\\\\\\\",t.DIFFERENT=\\\\\\\"!=\\\\\\\"}(dK||(dK={}));const pK=[dK.EQUAL,dK.LESS_THAN,dK.EQUAL_OR_LESS_THAN,dK.EQUAL_OR_GREATER_THAN,dK.GREATER_THAN,dK.DIFFERENT],_K={[dK.EQUAL]:(t,e)=>t==e,[dK.LESS_THAN]:(t,e)=>t<e,[dK.EQUAL_OR_LESS_THAN]:(t,e)=>t<=e,[dK.EQUAL_OR_GREATER_THAN]:(t,e)=>t>=e,[dK.GREATER_THAN]:(t,e)=>t>e,[dK.DIFFERENT]:(t,e)=>t!=e},mK=pK.map(((t,e)=>({name:t,value:e})));class fK{constructor(t){this.node=t}evalForEntities(t){const e=ks[this.node.pv.attribType];switch(e){case zs.NUMERIC:return void this._eval_for_numeric(t);case zs.STRING:return void this._eval_for_string(t)}os.unreachable(e)}_eval_for_string(t){let e;for(let n of t)e=n.stringAttribValue(this.node.pv.attribName),e==this.node.pv.attribString&&this.node.entitySelectionHelper.select(n)}_eval_for_numeric(t){const e=Vs[this.node.pv.attribSize-1];switch(e){case Gs.FLOAT:return this._eval_for_points_numeric_float(t);case Gs.VECTOR2:return this._eval_for_points_numeric_vector2(t);case Gs.VECTOR3:return this._eval_for_points_numeric_vector3(t);case Gs.VECTOR4:return this._eval_for_points_numeric_vector4(t)}os.unreachable(e)}_eval_for_points_numeric_float(t){let e=this.node.pv.attribName;const n=this.node.pv.attribValue1;let i;const s=pK[this.node.pv.attribComparisonOperator],r=_K[s];for(let s of t)i=s.attribValue(e),r(i,n)&&this.node.entitySelectionHelper.select(s)}_eval_for_points_numeric_vector2(t){let e=this.node.pv.attribName;const n=this.node.pv.attribValue2;let i=new d.a;for(let s of t){const t=s.attribValue(e,i);n.equals(t)&&this.node.entitySelectionHelper.select(s)}}_eval_for_points_numeric_vector3(t){let e=this.node.pv.attribName;const n=this.node.pv.attribValue3;let i=new p.a;for(let s of t){const t=s.attribValue(e,i);n.equals(t)&&this.node.entitySelectionHelper.select(s)}}_eval_for_points_numeric_vector4(t){let e=this.node.pv.attribName;const n=this.node.pv.attribValue4;let i=new _.a;for(let s of t){const t=s.attribValue(e,i);n.equals(t)&&this.node.entitySelectionHelper.select(s)}}}class gK{constructor(t){this.node=t}async evalForEntities(t){const e=this.node.p.expression;this.node.p.expression.hasExpression()&&e.expressionController?await this.eval_expressions_for_points_with_expression(t):this.eval_expressions_without_expression(t)}async eval_expressions_for_points_with_expression(t){const e=this.node.p.expression;e.expressionController&&await e.expressionController.computeExpressionForEntities(t,((t,e)=>{e&&this.node.entitySelectionHelper.select(t)}))}eval_expressions_without_expression(t){if(this.node.pv.expression)for(let e of t)this.node.entitySelectionHelper.select(e)}}class vK{constructor(t){this.node=t,this._point_position=new p.a}evalForPoints(t){const e=this._createBbox();for(let n of t){e.containsPoint(n.getPosition(this._point_position))&&this.node.entitySelectionHelper.select(n)}}_createBbox(){return new Ry.a(this.node.pv.bboxCenter.clone().sub(this.node.pv.bboxSize.clone().multiplyScalar(.5)),this.node.pv.bboxCenter.clone().add(this.node.pv.bboxSize.clone().multiplyScalar(.5)))}}class yK{constructor(t){this.node=t}eval_for_objects(t){const e=Ps[this.node.pv.objectType];for(let n of t){Os(n.object().constructor)==e&&this.node.entitySelectionHelper.select(n)}}}class xK{constructor(){this._sidePropertyByMaterial=new WeakMap,this._bound_setMat=this._setObjectMaterialDoubleSided.bind(this),this._bound_restoreMat=this._restoreObjectMaterialSide.bind(this)}setCoreGroupMaterialDoubleSided(t){const e=t.objects();for(let t of e)t.traverse(this._bound_setMat)}restoreMaterialSideProperty(t){const e=t.objects();for(let t of e)t.traverse(this._bound_restoreMat)}_setObjectMaterialDoubleSided(t){const e=t.material;if(e)if(m.isArray(e))for(let t of e)this._setMaterialDoubleSided(t);else this._setMaterialDoubleSided(e)}_restoreObjectMaterialSide(t){const e=t.material;if(e)if(m.isArray(e))for(let t of e)this._restoreMaterialDoubleSided(t);else this._restoreMaterialDoubleSided(e)}_setMaterialDoubleSided(t){this._sidePropertyByMaterial.set(t,t.side),t.side=w.z}_restoreMaterialDoubleSided(t){t.side=this._sidePropertyByMaterial.get(t)||w.z}}const bK=new p.a(0,1,0),wK=new p.a(0,-1,0);class TK{constructor(t){this.node=t,this._matDoubleSideTmpSetter=new xK,this._point_position=new p.a,this._raycaster=new eO,this._intersections=[]}evalForPoints(t,e){if(!e)return;const n=null==e?void 0:e.objectsWithGeo()[0];if(!n)return;const i=n;if(!i.isMesh)return;this._matDoubleSideTmpSetter.setCoreGroupMaterialDoubleSided(e);const s=n.geometry;s.computeBoundingBox();const r=s.boundingBox;for(let e of t)e.getPosition(this._point_position),r.containsPoint(this._point_position)?this._isPositionInObject(this._point_position,i,bK)&&this._isPositionInObject(this._point_position,i,wK)&&this.node.entitySelectionHelper.select(e):this.node.entitySelectionHelper.select(e);this._matDoubleSideTmpSetter.restoreMaterialSideProperty(e)}_isPositionInObject(t,e,n){var i;this._raycaster.ray.direction.copy(n),this._raycaster.ray.origin.copy(t),this._intersections.length=0;const s=this._raycaster.intersectObject(e,!1,this._intersections);if(!s)return!1;if(0==s.length)return!1;const r=null===(i=s[0].face)||void 0===i?void 0:i.normal;if(!r)return!1;return this._raycaster.ray.direction.dot(r)>=0}}const AK=new class extends ua{constructor(){super(...arguments),this.class=ha.INTEGER(Ds.indexOf(Fs.VERTEX),{menu:{entries:Bs}}),this.invert=ha.BOOLEAN(0),this.byObjectType=ha.BOOLEAN(0,{visibleIf:{class:Ds.indexOf(Fs.OBJECT)}}),this.objectType=ha.INTEGER(Ps.indexOf(Ns.MESH),{menu:{entries:Rs},visibleIf:{class:Ds.indexOf(Fs.OBJECT),byObjectType:!0},separatorAfter:!0}),this.byExpression=ha.BOOLEAN(0),this.expression=ha.BOOLEAN(\\\\\\\"@ptnum==0\\\\\\\",{visibleIf:{byExpression:!0},expression:{forEntities:!0},separatorAfter:!0}),this.byAttrib=ha.BOOLEAN(0),this.attribType=ha.INTEGER(ks.indexOf(zs.NUMERIC),{menu:{entries:Us},visibleIf:{byAttrib:1}}),this.attribName=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{byAttrib:1}}),this.attribSize=ha.INTEGER(1,{range:Hs,rangeLocked:[!0,!0],visibleIf:{byAttrib:1,attribType:ks.indexOf(zs.NUMERIC)}}),this.attribComparisonOperator=ha.INTEGER(pK.indexOf(dK.EQUAL),{menu:{entries:mK},visibleIf:{byAttrib:!0,attribType:ks.indexOf(zs.NUMERIC),attribSize:Gs.FLOAT}}),this.attribValue1=ha.FLOAT(0,{visibleIf:{byAttrib:1,attribType:ks.indexOf(zs.NUMERIC),attribSize:1}}),this.attribValue2=ha.VECTOR2([0,0],{visibleIf:{byAttrib:1,attribType:ks.indexOf(zs.NUMERIC),attribSize:2}}),this.attribValue3=ha.VECTOR3([0,0,0],{visibleIf:{byAttrib:1,attribType:ks.indexOf(zs.NUMERIC),attribSize:3}}),this.attribValue4=ha.VECTOR4([0,0,0,0],{visibleIf:{byAttrib:1,attribType:ks.indexOf(zs.NUMERIC),attribSize:4}}),this.attribString=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{byAttrib:1,attribType:ks.indexOf(zs.STRING)},separatorAfter:!0}),this.byBbox=ha.BOOLEAN(0,{visibleIf:{class:Ds.indexOf(Fs.VERTEX)}}),this.bboxSize=ha.VECTOR3([1,1,1],{visibleIf:{class:Ds.indexOf(Fs.VERTEX),byBbox:!0}}),this.bboxCenter=ha.VECTOR3([0,0,0],{visibleIf:{class:Ds.indexOf(Fs.VERTEX),byBbox:!0},separatorAfter:!0}),this.byBoundingObject=ha.BOOLEAN(0,{visibleIf:{class:Ds.indexOf(Fs.VERTEX)}}),this.keepPoints=ha.BOOLEAN(0,{visibleIf:{class:Ds.indexOf(Fs.OBJECT)}})}};class MK extends uV{constructor(){super(...arguments),this.paramsConfig=AK,this._marked_for_deletion_per_object_index=new Map,this.entitySelectionHelper=new uK(this),this.byExpressionHelper=new gK(this),this.byAttributeHelper=new fK(this),this.byObjectTypeHelper=new yK(this),this.byBboxHelper=new vK(this),this.byBoundingObjectHelper=new TK(this)}static type(){return\\\\\\\"delete\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to delete from\\\\\\\",\\\\\\\"points inside this geometry will be deleted (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0],n=t[1];switch(this.pv.class){case Fs.VERTEX:await this._eval_for_points(e,n);break;case Fs.OBJECT:await this._eval_for_objects(e)}}set_class(t){this.p.class.set(t)}async _eval_for_objects(t){const e=t.coreObjects();this.entitySelectionHelper.init(e),this._marked_for_deletion_per_object_index=new Map;for(let t of e)this._marked_for_deletion_per_object_index.set(t.index(),!1);this.pv.byExpression&&await this.byExpressionHelper.evalForEntities(e),this.pv.byObjectType&&this.byObjectTypeHelper.eval_for_objects(e),this.pv.byAttrib&&\\\\\\\"\\\\\\\"!=this.pv.attribName&&this.byAttributeHelper.evalForEntities(e);const n=this.entitySelectionHelper.entities_to_keep().map((t=>t.object()));if(this.pv.keepPoints){const t=this.entitySelectionHelper.entities_to_delete();for(let e of t){const t=this._point_object(e);t&&n.push(t)}}this.setObjects(n)}async _eval_for_points(t,e){const n=t.coreObjects();let i,s=[];for(let t=0;t<n.length;t++){i=n[t];let r=i.coreGeometry();if(r){const t=i.object(),n=r.pointsFromGeometry();this.entitySelectionHelper.init(n);const o=n.length;this.pv.byExpression&&await this.byExpressionHelper.evalForEntities(n),this.pv.byAttrib&&\\\\\\\"\\\\\\\"!=this.pv.attribName&&this.byAttributeHelper.evalForEntities(n),this.pv.byBbox&&this.byBboxHelper.evalForPoints(n),this.pv.byBoundingObject&&this.byBoundingObjectHelper.evalForPoints(n,e);const a=this.entitySelectionHelper.entities_to_keep();if(a.length==o)s.push(t);else if(r.geometry().dispose(),a.length>0){const e=fr.geometryFromPoints(a,Os(t.constructor));e&&(t.geometry=e,s.push(t))}}}this.setObjects(s)}_point_object(t){const e=t.points(),n=fr.geometryFromPoints(e,Ns.POINTS);if(n)return this.createObject(n,Ns.POINTS)}}const EK=new class extends ua{constructor(){super(...arguments),this.start=ha.INTEGER(0,{range:[0,100],rangeLocked:[!0,!1]}),this.useCount=ha.BOOLEAN(0),this.count=ha.INTEGER(0,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useCount:1}})}};class SK extends uV{constructor(){super(...arguments),this.paramsConfig=EK}static type(){return\\\\\\\"drawRange\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){const e=t[0],n=e.objects();for(let t of n){const e=t.geometry;if(e){const t=e.drawRange;t.start=this.pv.start,this.pv.useCount?t.count=this.pv.count:t.count=1/0}}this.setCoreGroup(e)}}class CK{constructor(){this.pluginCallbacks=[],this.register((function(t){return new nQ(t)})),this.register((function(t){return new iQ(t)})),this.register((function(t){return new sQ(t)})),this.register((function(t){return new rQ(t)})),this.register((function(t){return new oQ(t)}))}register(t){return-1===this.pluginCallbacks.indexOf(t)&&this.pluginCallbacks.push(t),this}unregister(t){return-1!==this.pluginCallbacks.indexOf(t)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(t),1),this}parse(t,e,n){const i=new eQ,s=[];for(let t=0,e=this.pluginCallbacks.length;t<e;t++)s.push(this.pluginCallbacks[t](i));i.setPlugins(s),i.write(t,e,n)}}const NK=0,LK=1,OK=2,PK=3,RK=4,IK=5121,FK=5123,DK=5126,BK=5125,zK=34962,kK=34963,UK=9728,GK=9729,VK=9984,HK=9985,jK=9986,WK=9987,qK=33071,XK=33648,YK=10497,$K={};$K[1003]=UK,$K[1004]=VK,$K[1005]=jK,$K[1006]=GK,$K[1007]=HK,$K[1008]=WK,$K[1001]=qK,$K[1e3]=YK,$K[1002]=XK;const JK={scale:\\\\\\\"scale\\\\\\\",position:\\\\\\\"translation\\\\\\\",quaternion:\\\\\\\"rotation\\\\\\\",morphTargetInfluences:\\\\\\\"weights\\\\\\\"};function ZK(t,e){return t.length===e.length&&t.every((function(t,n){return t===e[n]}))}function KK(t){return 4*Math.ceil(t/4)}function QK(t,e=0){const n=KK(t.byteLength);if(n!==t.byteLength){const i=new Uint8Array(n);if(i.set(new Uint8Array(t)),0!==e)for(let s=t.byteLength;s<n;s++)i[s]=e;return i.buffer}return t}let tQ=null;class eQ{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.uids=new Map,this.uid=0,this.json={asset:{version:\\\\\\\"2.0\\\\\\\",generator:\\\\\\\"THREE.GLTFExporter\\\\\\\"}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(t){this.plugins=t}write(t,e,n){this.options=Object.assign({},{binary:!1,trs:!1,onlyVisible:!0,truncateDrawRange:!0,embedImages:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},n),this.options.animations.length>0&&(this.options.trs=!0),this.processInput(t);const i=this;Promise.all(this.pending).then((function(){const t=i.buffers,n=i.json,s=i.options,r=i.extensionsUsed,o=new Blob(t,{type:\\\\\\\"application/octet-stream\\\\\\\"}),a=Object.keys(r);if(a.length>0&&(n.extensionsUsed=a),n.buffers&&n.buffers.length>0&&(n.buffers[0].byteLength=o.size),!0===s.binary){const t=new window.FileReader;t.readAsArrayBuffer(o),t.onloadend=function(){const i=QK(t.result),s=new DataView(new ArrayBuffer(8));s.setUint32(0,i.byteLength,!0),s.setUint32(4,5130562,!0);const r=QK(function(t){if(void 0!==window.TextEncoder)return(new TextEncoder).encode(t).buffer;const e=new Uint8Array(new ArrayBuffer(t.length));for(let n=0,i=t.length;n<i;n++){const i=t.charCodeAt(n);e[n]=i>255?32:i}return e.buffer}(JSON.stringify(n)),32),o=new DataView(new ArrayBuffer(8));o.setUint32(0,r.byteLength,!0),o.setUint32(4,1313821514,!0);const a=new ArrayBuffer(12),l=new DataView(a);l.setUint32(0,1179937895,!0),l.setUint32(4,2,!0);const c=12+o.byteLength+r.byteLength+s.byteLength+i.byteLength;l.setUint32(8,c,!0);const h=new Blob([a,o,r,s,i],{type:\\\\\\\"application/octet-stream\\\\\\\"}),u=new window.FileReader;u.readAsArrayBuffer(h),u.onloadend=function(){e(u.result)}}}else if(n.buffers&&n.buffers.length>0){const t=new window.FileReader;t.readAsDataURL(o),t.onloadend=function(){const i=t.result;n.buffers[0].uri=i,e(n)}}else e(n)}))}serializeUserData(t,e){if(0===Object.keys(t.userData).length)return;const n=this.options,i=this.extensionsUsed;try{const s=JSON.parse(JSON.stringify(t.userData));if(n.includeCustomExtensions&&s.gltfExtensions){void 0===e.extensions&&(e.extensions={});for(const t in s.gltfExtensions)e.extensions[t]=s.gltfExtensions[t],i[t]=!0;delete s.gltfExtensions}Object.keys(s).length>0&&(e.extras=s)}catch(e){console.warn(\\\\\\\"THREE.GLTFExporter: userData of '\\\\\\\"+t.name+\\\\\\\"' won't be serialized because of JSON.stringify error - \\\\\\\"+e.message)}}getUID(t){return this.uids.has(t)||this.uids.set(t,this.uid++),this.uids.get(t)}isNormalizedNormalAttribute(t){if(this.cache.attributesNormalized.has(t))return!1;const e=new Sb;for(let n=0,i=t.count;n<i;n++)if(Math.abs(e.fromBufferAttribute(t,n).length()-1)>5e-4)return!1;return!0}createNormalizedNormalAttribute(t){const e=this.cache;if(e.attributesNormalized.has(t))return e.attributesNormalized.get(t);const n=t.clone(),i=new Sb;for(let t=0,e=n.count;t<e;t++)i.fromBufferAttribute(n,t),0===i.x&&0===i.y&&0===i.z?i.setX(1):i.normalize(),n.setXYZ(t,i.x,i.y,i.z);return e.attributesNormalized.set(t,n),n}applyTextureTransform(t,e){let n=!1;const i={};0===e.offset.x&&0===e.offset.y||(i.offset=e.offset.toArray(),n=!0),0!==e.rotation&&(i.rotation=e.rotation,n=!0),1===e.repeat.x&&1===e.repeat.y||(i.scale=e.repeat.toArray(),n=!0),n&&(t.extensions=t.extensions||{},t.extensions.KHR_texture_transform=i,this.extensionsUsed.KHR_texture_transform=!0)}processBuffer(t){const e=this.json,n=this.buffers;return e.buffers||(e.buffers=[{byteLength:0}]),n.push(t),0}processBufferView(t,e,n,i,s){const r=this.json;let o;r.bufferViews||(r.bufferViews=[]),o=e===IK?1:e===FK?2:4;const a=KK(i*t.itemSize*o),l=new DataView(new ArrayBuffer(a));let c=0;for(let s=n;s<n+i;s++)for(let n=0;n<t.itemSize;n++){let i;t.itemSize>4?i=t.array[s*t.itemSize+n]:0===n?i=t.getX(s):1===n?i=t.getY(s):2===n?i=t.getZ(s):3===n&&(i=t.getW(s)),e===DK?l.setFloat32(c,i,!0):e===BK?l.setUint32(c,i,!0):e===FK?l.setUint16(c,i,!0):e===IK&&l.setUint8(c,i),c+=o}const h={buffer:this.processBuffer(l.buffer),byteOffset:this.byteOffset,byteLength:a};void 0!==s&&(h.target=s),s===zK&&(h.byteStride=t.itemSize*o),this.byteOffset+=a,r.bufferViews.push(h);return{id:r.bufferViews.length-1,byteLength:0}}processBufferViewImage(t){const e=this,n=e.json;return n.bufferViews||(n.bufferViews=[]),new Promise((function(i){const s=new window.FileReader;s.readAsArrayBuffer(t),s.onloadend=function(){const t=QK(s.result),r={buffer:e.processBuffer(t),byteOffset:e.byteOffset,byteLength:t.byteLength};e.byteOffset+=t.byteLength,i(n.bufferViews.push(r)-1)}}))}processAccessor(t,e,n,i){const s=this.options,r=this.json;let o;if(t.array.constructor===Float32Array)o=DK;else if(t.array.constructor===Uint32Array)o=BK;else if(t.array.constructor===Uint16Array)o=FK;else{if(t.array.constructor!==Uint8Array)throw new Error(\\\\\\\"THREE.GLTFExporter: Unsupported bufferAttribute component type.\\\\\\\");o=IK}if(void 0===n&&(n=0),void 0===i&&(i=t.count),s.truncateDrawRange&&void 0!==e&&null===e.index){const s=n+i,r=e.drawRange.count===1/0?t.count:e.drawRange.start+e.drawRange.count;n=Math.max(n,e.drawRange.start),(i=Math.min(s,r)-n)<0&&(i=0)}if(0===i)return null;const a=function(t,e,n){const i={min:new Array(t.itemSize).fill(Number.POSITIVE_INFINITY),max:new Array(t.itemSize).fill(Number.NEGATIVE_INFINITY)};for(let s=e;s<e+n;s++)for(let e=0;e<t.itemSize;e++){let n;t.itemSize>4?n=t.array[s*t.itemSize+e]:0===e?n=t.getX(s):1===e?n=t.getY(s):2===e?n=t.getZ(s):3===e&&(n=t.getW(s)),i.min[e]=Math.min(i.min[e],n),i.max[e]=Math.max(i.max[e],n)}return i}(t,n,i);let l;void 0!==e&&(l=t===e.index?kK:zK);const c=this.processBufferView(t,o,n,i,l),h={bufferView:c.id,byteOffset:c.byteOffset,componentType:o,count:i,max:a.max,min:a.min,type:{1:\\\\\\\"SCALAR\\\\\\\",2:\\\\\\\"VEC2\\\\\\\",3:\\\\\\\"VEC3\\\\\\\",4:\\\\\\\"VEC4\\\\\\\",16:\\\\\\\"MAT4\\\\\\\"}[t.itemSize]};return!0===t.normalized&&(h.normalized=!0),r.accessors||(r.accessors=[]),r.accessors.push(h)-1}processImage(t,e,n){const i=this,s=i.cache,r=i.json,o=i.options,a=i.pending;s.images.has(t)||s.images.set(t,{});const l=s.images.get(t),c=e===Dx?\\\\\\\"image/png\\\\\\\":\\\\\\\"image/jpeg\\\\\\\",h=c+\\\\\\\":flipY/\\\\\\\"+n.toString();if(void 0!==l[h])return l[h];r.images||(r.images=[]);const u={mimeType:c};if(o.embedImages){const s=tQ=tQ||document.createElement(\\\\\\\"canvas\\\\\\\");s.width=Math.min(t.width,o.maxTextureSize),s.height=Math.min(t.height,o.maxTextureSize);const r=s.getContext(\\\\\\\"2d\\\\\\\");if(!0===n&&(r.translate(0,s.height),r.scale(1,-1)),\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap)r.drawImage(t,0,0,s.width,s.height);else{e!==Dx&&e!==Fx&&console.error(\\\\\\\"GLTFExporter: Only RGB and RGBA formats are supported.\\\\\\\"),(t.width>o.maxTextureSize||t.height>o.maxTextureSize)&&console.warn(\\\\\\\"GLTFExporter: Image size is bigger than maxTextureSize\\\\\\\",t);const n=new Uint8ClampedArray(t.height*t.width*4);if(e===Dx)for(let e=0;e<n.length;e+=4)n[e+0]=t.data[e+0],n[e+1]=t.data[e+1],n[e+2]=t.data[e+2],n[e+3]=t.data[e+3];else for(let e=0,i=0;e<n.length;e+=4,i+=3)n[e+0]=t.data[i+0],n[e+1]=t.data[i+1],n[e+2]=t.data[i+2],n[e+3]=255;r.putImageData(new ImageData(n,t.width,t.height),0,0)}!0===o.binary?a.push(new Promise((function(t){s.toBlob((function(e){i.processBufferViewImage(e).then((function(e){u.bufferView=e,t()}))}),c)}))):u.uri=s.toDataURL(c)}else u.uri=t.src;const d=r.images.push(u)-1;return l[h]=d,d}processSampler(t){const e=this.json;e.samplers||(e.samplers=[]);const n={magFilter:$K[t.magFilter],minFilter:$K[t.minFilter],wrapS:$K[t.wrapS],wrapT:$K[t.wrapT]};return e.samplers.push(n)-1}processTexture(t){const e=this.cache,n=this.json;if(e.textures.has(t))return e.textures.get(t);n.textures||(n.textures=[]);const i={sampler:this.processSampler(t),source:this.processImage(t.image,t.format,t.flipY)};t.name&&(i.name=t.name),this._invokeAll((function(e){e.writeTexture&&e.writeTexture(t,i)}));const s=n.textures.push(i)-1;return e.textures.set(t,s),s}processMaterial(t){const e=this.cache,n=this.json;if(e.materials.has(t))return e.materials.get(t);if(t.isShaderMaterial)return console.warn(\\\\\\\"GLTFExporter: THREE.ShaderMaterial not supported.\\\\\\\"),null;n.materials||(n.materials=[]);const i={pbrMetallicRoughness:{}};!0!==t.isMeshStandardMaterial&&!0!==t.isMeshBasicMaterial&&console.warn(\\\\\\\"GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.\\\\\\\");const s=t.color.toArray().concat([t.opacity]);if(ZK(s,[1,1,1,1])||(i.pbrMetallicRoughness.baseColorFactor=s),t.isMeshStandardMaterial?(i.pbrMetallicRoughness.metallicFactor=t.metalness,i.pbrMetallicRoughness.roughnessFactor=t.roughness):(i.pbrMetallicRoughness.metallicFactor=.5,i.pbrMetallicRoughness.roughnessFactor=.5),t.metalnessMap||t.roughnessMap)if(t.metalnessMap===t.roughnessMap){const e={index:this.processTexture(t.metalnessMap)};this.applyTextureTransform(e,t.metalnessMap),i.pbrMetallicRoughness.metallicRoughnessTexture=e}else console.warn(\\\\\\\"THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.\\\\\\\");if(t.map){const e={index:this.processTexture(t.map)};this.applyTextureTransform(e,t.map),i.pbrMetallicRoughness.baseColorTexture=e}if(t.emissive){const e=t.emissive.clone().multiplyScalar(t.emissiveIntensity),n=Math.max(e.r,e.g,e.b);if(n>1&&(e.multiplyScalar(1/n),console.warn(\\\\\\\"THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited\\\\\\\")),n>0&&(i.emissiveFactor=e.toArray()),t.emissiveMap){const e={index:this.processTexture(t.emissiveMap)};this.applyTextureTransform(e,t.emissiveMap),i.emissiveTexture=e}}if(t.normalMap){const e={index:this.processTexture(t.normalMap)};t.normalScale&&1!==t.normalScale.x&&(e.scale=t.normalScale.x),this.applyTextureTransform(e,t.normalMap),i.normalTexture=e}if(t.aoMap){const e={index:this.processTexture(t.aoMap),texCoord:1};1!==t.aoMapIntensity&&(e.strength=t.aoMapIntensity),this.applyTextureTransform(e,t.aoMap),i.occlusionTexture=e}t.transparent?i.alphaMode=\\\\\\\"BLEND\\\\\\\":t.alphaTest>0&&(i.alphaMode=\\\\\\\"MASK\\\\\\\",i.alphaCutoff=t.alphaTest),2===t.side&&(i.doubleSided=!0),\\\\\\\"\\\\\\\"!==t.name&&(i.name=t.name),this.serializeUserData(t,i),this._invokeAll((function(e){e.writeMaterial&&e.writeMaterial(t,i)}));const r=n.materials.push(i)-1;return e.materials.set(t,r),r}processMesh(t){const e=this.cache,n=this.json,i=[t.geometry.uuid];if(Array.isArray(t.material))for(let e=0,n=t.material.length;e<n;e++)i.push(t.material[e].uuid);else i.push(t.material.uuid);const s=i.join(\\\\\\\":\\\\\\\");if(e.meshes.has(s))return e.meshes.get(s);const r=t.geometry;let o;if(o=t.isLineSegments?LK:t.isLineLoop?OK:t.isLine?PK:t.isPoints?NK:t.material.wireframe?LK:RK,!0!==r.isBufferGeometry)throw new Error(\\\\\\\"THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.\\\\\\\");const a={},l={},c=[],h=[],u={uv:\\\\\\\"TEXCOORD_0\\\\\\\",uv2:\\\\\\\"TEXCOORD_1\\\\\\\",color:\\\\\\\"COLOR_0\\\\\\\",skinWeight:\\\\\\\"WEIGHTS_0\\\\\\\",skinIndex:\\\\\\\"JOINTS_0\\\\\\\"},d=r.getAttribute(\\\\\\\"normal\\\\\\\");void 0===d||this.isNormalizedNormalAttribute(d)||(console.warn(\\\\\\\"THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.\\\\\\\"),r.setAttribute(\\\\\\\"normal\\\\\\\",this.createNormalizedNormalAttribute(d)));let p=null;for(let t in r.attributes){if(\\\\\\\"morph\\\\\\\"===t.substr(0,5))continue;const n=r.attributes[t];t=u[t]||t.toUpperCase();if(/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\\\d+|COLOR_\\\\d+|JOINTS_\\\\d+|WEIGHTS_\\\\d+)$/.test(t)||(t=\\\\\\\"_\\\\\\\"+t),e.attributes.has(this.getUID(n))){l[t]=e.attributes.get(this.getUID(n));continue}p=null;const i=n.array;\\\\\\\"JOINTS_0\\\\\\\"!==t||i instanceof Uint16Array||i instanceof Uint8Array||(console.warn('GLTFExporter: Attribute \\\\\\\"skinIndex\\\\\\\" converted to type UNSIGNED_SHORT.'),p=new Qw(new Uint16Array(i),n.itemSize,n.normalized));const s=this.processAccessor(p||n,r);null!==s&&(l[t]=s,e.attributes.set(this.getUID(n),s))}if(void 0!==d&&r.setAttribute(\\\\\\\"normal\\\\\\\",d),0===Object.keys(l).length)return null;if(void 0!==t.morphTargetInfluences&&t.morphTargetInfluences.length>0){const n=[],i=[],s={};if(void 0!==t.morphTargetDictionary)for(const e in t.morphTargetDictionary)s[t.morphTargetDictionary[e]]=e;for(let o=0;o<t.morphTargetInfluences.length;++o){const a={};let l=!1;for(const t in r.morphAttributes){if(\\\\\\\"position\\\\\\\"!==t&&\\\\\\\"normal\\\\\\\"!==t){l||(console.warn(\\\\\\\"GLTFExporter: Only POSITION and NORMAL morph are supported.\\\\\\\"),l=!0);continue}const n=r.morphAttributes[t][o],i=t.toUpperCase(),s=r.attributes[t];if(e.attributes.has(this.getUID(n))){a[i]=e.attributes.get(this.getUID(n));continue}const c=n.clone();if(!r.morphTargetsRelative)for(let t=0,e=n.count;t<e;t++)c.setXYZ(t,n.getX(t)-s.getX(t),n.getY(t)-s.getY(t),n.getZ(t)-s.getZ(t));a[i]=this.processAccessor(c,r),e.attributes.set(this.getUID(s),a[i])}h.push(a),n.push(t.morphTargetInfluences[o]),void 0!==t.morphTargetDictionary&&i.push(s[o])}a.weights=n,i.length>0&&(a.extras={},a.extras.targetNames=i)}const _=Array.isArray(t.material);if(_&&0===r.groups.length)return null;const m=_?t.material:[t.material],f=_?r.groups:[{materialIndex:0,start:void 0,count:void 0}];for(let t=0,n=f.length;t<n;t++){const n={mode:o,attributes:l};if(this.serializeUserData(r,n),h.length>0&&(n.targets=h),null!==r.index){let i=this.getUID(r.index);void 0===f[t].start&&void 0===f[t].count||(i+=\\\\\\\":\\\\\\\"+f[t].start+\\\\\\\":\\\\\\\"+f[t].count),e.attributes.has(i)?n.indices=e.attributes.get(i):(n.indices=this.processAccessor(r.index,r,f[t].start,f[t].count),e.attributes.set(i,n.indices)),null===n.indices&&delete n.indices}const i=this.processMaterial(m[f[t].materialIndex]);null!==i&&(n.material=i),c.push(n)}a.primitives=c,n.meshes||(n.meshes=[]),this._invokeAll((function(e){e.writeMesh&&e.writeMesh(t,a)}));const g=n.meshes.push(a)-1;return e.meshes.set(s,g),g}processCamera(t){const e=this.json;e.cameras||(e.cameras=[]);const n=t.isOrthographicCamera,i={type:n?\\\\\\\"orthographic\\\\\\\":\\\\\\\"perspective\\\\\\\"};return n?i.orthographic={xmag:2*t.right,ymag:2*t.top,zfar:t.far<=0?.001:t.far,znear:t.near<0?0:t.near}:i.perspective={aspectRatio:t.aspect,yfov:pb.degToRad(t.fov),zfar:t.far<=0?.001:t.far,znear:t.near<0?0:t.near},\\\\\\\"\\\\\\\"!==t.name&&(i.name=t.type),e.cameras.push(i)-1}processAnimation(t,e){const n=this.json,i=this.nodeMap;n.animations||(n.animations=[]);const s=(t=CK.Utils.mergeMorphTargetTracks(t.clone(),e)).tracks,r=[],o=[];for(let t=0;t<s.length;++t){const n=s[t],a=ZN.parseTrackName(n.name);let l=ZN.findNode(e,a.nodeName);const c=JK[a.propertyName];if(\\\\\\\"bones\\\\\\\"===a.objectName&&(l=!0===l.isSkinnedMesh?l.skeleton.getBoneByName(a.objectIndex):void 0),!l||!c)return console.warn('THREE.GLTFExporter: Could not export animation track \\\\\\\"%s\\\\\\\".',n.name),null;const h=1;let u,d=n.values.length/n.times.length;c===JK.morphTargetInfluences&&(d/=l.morphTargetInfluences.length),!0===n.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline?(u=\\\\\\\"CUBICSPLINE\\\\\\\",d/=3):u=n.getInterpolation()===kx?\\\\\\\"STEP\\\\\\\":\\\\\\\"LINEAR\\\\\\\",o.push({input:this.processAccessor(new Qw(n.times,h)),output:this.processAccessor(new Qw(n.values,d)),interpolation:u}),r.push({sampler:o.length-1,target:{node:i.get(l),path:c}})}return n.animations.push({name:t.name||\\\\\\\"clip_\\\\\\\"+n.animations.length,samplers:o,channels:r}),n.animations.length-1}processSkin(t){const e=this.json,n=this.nodeMap,i=e.nodes[n.get(t)],s=t.skeleton;if(void 0===s)return null;const r=t.skeleton.bones[0];if(void 0===r)return null;const o=[],a=new Float32Array(16*s.bones.length),l=new sw;for(let e=0;e<s.bones.length;++e)o.push(n.get(s.bones[e])),l.copy(s.boneInverses[e]),l.multiply(t.bindMatrix).toArray(a,16*e);void 0===e.skins&&(e.skins=[]),e.skins.push({inverseBindMatrices:this.processAccessor(new Qw(a,16)),joints:o,skeleton:n.get(r)});return i.skin=e.skins.length-1}processNode(t){const e=this.json,n=this.options,i=this.nodeMap;e.nodes||(e.nodes=[]);const s={};if(n.trs){const e=t.quaternion.toArray(),n=t.position.toArray(),i=t.scale.toArray();ZK(e,[0,0,0,1])||(s.rotation=e),ZK(n,[0,0,0])||(s.translation=n),ZK(i,[1,1,1])||(s.scale=i)}else t.matrixAutoUpdate&&t.updateMatrix(),!1===ZK(t.matrix.elements,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])&&(s.matrix=t.matrix.elements);if(\\\\\\\"\\\\\\\"!==t.name&&(s.name=String(t.name)),this.serializeUserData(t,s),t.isMesh||t.isLine||t.isPoints){const e=this.processMesh(t);null!==e&&(s.mesh=e)}else t.isCamera&&(s.camera=this.processCamera(t));if(t.isSkinnedMesh&&this.skins.push(t),t.children.length>0){const e=[];for(let i=0,s=t.children.length;i<s;i++){const s=t.children[i];if(s.visible||!1===n.onlyVisible){const t=this.processNode(s);null!==t&&e.push(t)}}e.length>0&&(s.children=e)}this._invokeAll((function(e){e.writeNode&&e.writeNode(t,s)}));const r=e.nodes.push(s)-1;return i.set(t,r),r}processScene(t){const e=this.json,n=this.options;e.scenes||(e.scenes=[],e.scene=0);const i={};\\\\\\\"\\\\\\\"!==t.name&&(i.name=t.name),e.scenes.push(i);const s=[];for(let e=0,i=t.children.length;e<i;e++){const i=t.children[e];if(i.visible||!1===n.onlyVisible){const t=this.processNode(i);null!==t&&s.push(t)}}s.length>0&&(i.nodes=s),this.serializeUserData(t,i)}processObjects(t){const e=new zE;e.name=\\\\\\\"AuxScene\\\\\\\";for(let n=0;n<t.length;n++)e.children.push(t[n]);this.processScene(e)}processInput(t){const e=this.options;t=t instanceof Array?t:[t],this._invokeAll((function(e){e.beforeParse&&e.beforeParse(t)}));const n=[];for(let e=0;e<t.length;e++)t[e]instanceof zE?this.processScene(t[e]):n.push(t[e]);n.length>0&&this.processObjects(n);for(let t=0;t<this.skins.length;++t)this.processSkin(this.skins[t]);for(let n=0;n<e.animations.length;++n)this.processAnimation(e.animations[n],t[0]);this._invokeAll((function(e){e.afterParse&&e.afterParse(t)}))}_invokeAll(t){for(let e=0,n=this.plugins.length;e<n;e++)t(this.plugins[e])}}class nQ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_lights_punctual\\\\\\\"}writeNode(t,e){if(!t.isLight)return;if(!t.isDirectionalLight&&!t.isPointLight&&!t.isSpotLight)return void console.warn(\\\\\\\"THREE.GLTFExporter: Only directional, point, and spot lights are supported.\\\\\\\",t);const n=this.writer,i=n.json,s=n.extensionsUsed,r={};t.name&&(r.name=t.name),r.color=t.color.toArray(),r.intensity=t.intensity,t.isDirectionalLight?r.type=\\\\\\\"directional\\\\\\\":t.isPointLight?(r.type=\\\\\\\"point\\\\\\\",t.distance>0&&(r.range=t.distance)):t.isSpotLight&&(r.type=\\\\\\\"spot\\\\\\\",t.distance>0&&(r.range=t.distance),r.spot={},r.spot.innerConeAngle=(t.penumbra-1)*t.angle*-1,r.spot.outerConeAngle=t.angle),void 0!==t.decay&&2!==t.decay&&console.warn(\\\\\\\"THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2.\\\\\\\"),!t.target||t.target.parent===t&&0===t.target.position.x&&0===t.target.position.y&&-1===t.target.position.z||console.warn(\\\\\\\"THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1.\\\\\\\"),s[this.name]||(i.extensions=i.extensions||{},i.extensions[this.name]={lights:[]},s[this.name]=!0);const o=i.extensions[this.name].lights;o.push(r),e.extensions=e.extensions||{},e.extensions[this.name]={light:o.length-1}}}class iQ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_materials_unlit\\\\\\\"}writeMaterial(t,e){if(!t.isMeshBasicMaterial)return;const n=this.writer.extensionsUsed;e.extensions=e.extensions||{},e.extensions[this.name]={},n[this.name]=!0,e.pbrMetallicRoughness.metallicFactor=0,e.pbrMetallicRoughness.roughnessFactor=.9}}class sQ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_materials_pbrSpecularGlossiness\\\\\\\"}writeMaterial(t,e){if(!t.isGLTFSpecularGlossinessMaterial)return;const n=this.writer,i=n.extensionsUsed,s={};e.pbrMetallicRoughness.baseColorFactor&&(s.diffuseFactor=e.pbrMetallicRoughness.baseColorFactor);const r=[1,1,1];if(t.specular.toArray(r,0),s.specularFactor=r,s.glossinessFactor=t.glossiness,e.pbrMetallicRoughness.baseColorTexture&&(s.diffuseTexture=e.pbrMetallicRoughness.baseColorTexture),t.specularMap){const e={index:n.processTexture(t.specularMap)};n.applyTextureTransform(e,t.specularMap),s.specularGlossinessTexture=e}e.extensions=e.extensions||{},e.extensions[this.name]=s,i[this.name]=!0}}class rQ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_materials_transmission\\\\\\\"}writeMaterial(t,e){if(!t.isMeshPhysicalMaterial||0===t.transmission)return;const n=this.writer,i=n.extensionsUsed,s={};if(s.transmissionFactor=t.transmission,t.transmissionMap){const e={index:n.processTexture(t.transmissionMap)};n.applyTextureTransform(e,t.transmissionMap),s.transmissionTexture=e}e.extensions=e.extensions||{},e.extensions[this.name]=s,i[this.name]=!0}}class oQ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_materials_volume\\\\\\\"}writeMaterial(t,e){if(!t.isMeshPhysicalMaterial||0===t.thickness)return;const n=this.writer,i=n.extensionsUsed,s={};if(s.thicknessFactor=t.thickness,t.thicknessMap){const e={index:n.processTexture(t.thicknessMap)};n.applyTextureTransform(e,t.thicknessMap),s.thicknessTexture=e}s.attenuationDistance=t.attenuationDistance,s.attenuationColor=t.attenuationTint.toArray(),e.extensions=e.extensions||{},e.extensions[this.name]=s,i[this.name]=!0}}function aQ(t,e){const n=document.createElement(\\\\\\\"a\\\\\\\");n.style.display=\\\\\\\"none\\\\\\\",document.body.appendChild(n),n.href=URL.createObjectURL(t),n.download=e,n.click(),setTimeout((()=>{document.body.removeChild(n)}),10)}CK.Utils={insertKeyframe:function(t,e){const n=.001,i=t.getValueSize(),s=new t.TimeBufferType(t.times.length+1),r=new t.ValueBufferType(t.values.length+i),o=t.createInterpolant(new t.ValueBufferType(i));let a;if(0===t.times.length){s[0]=e;for(let t=0;t<i;t++)r[t]=0;a=0}else if(e<t.times[0]){if(Math.abs(t.times[0]-e)<n)return 0;s[0]=e,s.set(t.times,1),r.set(o.evaluate(e),0),r.set(t.values,i),a=0}else if(e>t.times[t.times.length-1]){if(Math.abs(t.times[t.times.length-1]-e)<n)return t.times.length-1;s[s.length-1]=e,s.set(t.times,0),r.set(t.values,0),r.set(o.evaluate(e),t.values.length),a=s.length-1}else for(let l=0;l<t.times.length;l++){if(Math.abs(t.times[l]-e)<n)return l;if(t.times[l]<e&&t.times[l+1]>e){s.set(t.times.slice(0,l+1),0),s[l+1]=e,s.set(t.times.slice(l+1),l+2),r.set(t.values.slice(0,(l+1)*i),0),r.set(o.evaluate(e),(l+1)*i),r.set(t.values.slice((l+1)*i),(l+2)*i),a=l+1;break}}return t.times=s,t.values=r,a},mergeMorphTargetTracks:function(t,e){const n=[],i={},s=t.tracks;for(let t=0;t<s.length;++t){let r=s[t];const o=ZN.parseTrackName(r.name),a=ZN.findNode(e,o.nodeName);if(\\\\\\\"morphTargetInfluences\\\\\\\"!==o.propertyName||void 0===o.propertyIndex){n.push(r);continue}if(r.createInterpolant!==r.InterpolantFactoryMethodDiscrete&&r.createInterpolant!==r.InterpolantFactoryMethodLinear){if(r.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline)throw new Error(\\\\\\\"THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.\\\\\\\");console.warn(\\\\\\\"THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.\\\\\\\"),r=r.clone(),r.setInterpolation(Ux)}const l=a.morphTargetInfluences.length,c=a.morphTargetDictionary[o.propertyIndex];if(void 0===c)throw new Error(\\\\\\\"THREE.GLTFExporter: Morph target name not found: \\\\\\\"+o.propertyIndex);let h;if(void 0===i[a.uuid]){h=r.clone();const t=new h.ValueBufferType(l*h.times.length);for(let e=0;e<h.times.length;e++)t[e*l+c]=h.values[e];h.name=(o.nodeName||\\\\\\\"\\\\\\\")+\\\\\\\".morphTargetInfluences\\\\\\\",h.values=t,i[a.uuid]=h,n.push(h);continue}const u=r.createInterpolant(new r.ValueBufferType(1));h=i[a.uuid];for(let t=0;t<h.times.length;t++)h.values[t*l+c]=u.evaluate(h.times[t]);for(let t=0;t<r.times.length;t++){const e=this.insertKeyframe(h,r.times[t]);h.values[e*l+c]=r.values[t]}}return t.tracks=n,t}};const lQ=new class extends ua{constructor(){super(...arguments),this.export=ha.BUTTON(null,{callback:t=>{cQ.PARAM_CALLBACK_export(t)}})}};class cQ extends uV{constructor(){super(...arguments),this.paramsConfig=lQ}static type(){return\\\\\\\"exporter\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){this.setCoreGroup(t[0])}static PARAM_CALLBACK_export(t){t._paramCallbackExport()}async _paramCallbackExport(){const t=(await this.compute()).coreContent();if(!t)return void console.error(\\\\\\\"input invalid\\\\\\\");const e=new WeakMap,n=t.objects();for(let t of n)e.set(t,t.parent);const i=new vs;for(let t of n)i.add(t);(new CK).parse(i,(t=>{if(t instanceof ArrayBuffer)i=\\\\\\\"scene.glb\\\\\\\",aQ(new Blob([t],{type:\\\\\\\"application/octet-stream\\\\\\\"}),i);else{!function(t,e){aQ(new Blob([t],{type:\\\\\\\"text/plain\\\\\\\"}),e)}(JSON.stringify(t,null,2),\\\\\\\"scene.gltf\\\\\\\")}var i;for(let t of n){const n=e.get(t);n&&n.add(t)}}),{embedImages:!0})}}const hQ=new class extends ua{constructor(){super(...arguments),this.makeFacesUnique=ha.BOOLEAN(0),this.addFaceCenterAttribute=ha.BOOLEAN(0,{visibleIf:{makeFacesUnique:1}}),this.addFaceId=ha.BOOLEAN(0,{visibleIf:{makeFacesUnique:1}}),this.transform=ha.BOOLEAN(0,{visibleIf:{makeFacesUnique:1}}),this.scale=ha.FLOAT(1,{visibleIf:{makeFacesUnique:1,transform:1}})}};class uQ extends uV{constructor(){super(...arguments),this.paramsConfig=hQ}static type(){return\\\\\\\"face\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){const e=t[0];this.pv.makeFacesUnique&&(this._makeFacesUnique(e),this.pv.addFaceCenterAttribute&&this._addFaceCenterAttribute(e),this.pv.addFaceId&&this._addFaceId(e),this.pv.transform&&this._transform_faces(e)),this.setCoreGroup(e)}_makeFacesUnique(t){var e;for(let n of t.objects())if(n.isMesh){const t=n.geometry,i=f.chunk((null===(e=t.index)||void 0===e?void 0:e.array)||[],3),s=3*i.length;for(let e of Object.keys(t.attributes)){const n=t.attributes[e],r=n.itemSize,o=new Float32Array(s*r);let a=0;i.forEach((t=>{t.forEach((t=>{for(let e=0;e<r;e++){const i=n.array[t*r+e];o[a]=i,a+=1}}))})),t.setAttribute(e,new C.a(o,r))}const r=f.range(s);t.setIndex(r)}}_addFaceCenterAttribute(t){const e=\\\\\\\"face_center\\\\\\\",n=new p.a;let i,s,r,o;t.coreObjects().forEach((t=>{const a=t.object(),l=t.coreGeometry();if(a.isMesh&&l){i=l.faces(),l.hasAttrib(e)||l.addNumericAttrib(e,3,-1);for(let t=0;t<i.length;t++){s=i[t],s.center(n),r=s.points();for(let t=0;t<r.length;t++)o=r[t],o.setAttribValue(e,n)}}}))}_addFaceId(t){const e=\\\\\\\"face_id\\\\\\\";t.coreObjects().forEach((t=>{const n=t.object(),i=t.coreGeometry();if(n.isMesh&&i){const t=i.faces();i.hasAttrib(e)||i.addNumericAttrib(e,1,-1);for(let n=0;n<t.length;n++){const i=t[n].points();for(let t=0;t<i.length;t++){i[t].setAttribValue(e,n)}}}}))}_transform_faces(t){const e=\\\\\\\"position\\\\\\\",n=new p.a,i=new p.a,s=this.pv.scale;let r,o,a,l;t.coreObjects().forEach((t=>{const c=t.object(),h=t.coreGeometry();if(c.isMesh&&h){r=h.faces(),h.hasAttrib(e)||h.addNumericAttrib(e,3,-1);for(let t=0;t<r.length;t++){o=r[t],o.center(n),a=o.points();for(let t=0;t<a.length;t++){l=a[t];const r=l.position();i.x=r.x*s+n.x*(1-s),i.y=r.y*s+n.y*(1-s),i.z=r.z*s+n.z*(1-s),l.setAttribValue(e,i)}}}}))}}var dQ;!function(t){t.AUTO=\\\\\\\"auto\\\\\\\",t.DRC=\\\\\\\"drc\\\\\\\",t.FBX=\\\\\\\"fbx\\\\\\\",t.JSON=\\\\\\\"json\\\\\\\",t.GLTF=\\\\\\\"gltf\\\\\\\",t.GLTF_WITH_DRACO=\\\\\\\"gltf_with_draco\\\\\\\",t.OBJ=\\\\\\\"obj\\\\\\\",t.PDB=\\\\\\\"pdb\\\\\\\",t.PLY=\\\\\\\"ply\\\\\\\",t.STL=\\\\\\\"stl\\\\\\\"}(dQ||(dQ={}));const pQ=[dQ.AUTO,dQ.DRC,dQ.FBX,dQ.JSON,dQ.GLTF,dQ.GLTF_WITH_DRACO,dQ.OBJ,dQ.PDB,dQ.PLY,dQ.STL];var _Q;!function(t){t.DRC=\\\\\\\"drc\\\\\\\",t.FBX=\\\\\\\"fbx\\\\\\\",t.GLTF=\\\\\\\"gltf\\\\\\\",t.GLB=\\\\\\\"glb\\\\\\\",t.OBJ=\\\\\\\"obj\\\\\\\",t.PDB=\\\\\\\"pdb\\\\\\\",t.PLY=\\\\\\\"ply\\\\\\\",t.STL=\\\\\\\"stl\\\\\\\"}(_Q||(_Q={}));_Q.DRC,_Q.FBX,_Q.GLTF,_Q.GLB,_Q.OBJ,_Q.PDB,_Q.PLY,_Q.STL;class mQ extends $g{constructor(t,e,n){super(t.url,e,n),this._options=t,this._scene=e,this._node=n}load(t,e){this._load().then((e=>{t(e)})).catch((t=>{e(t)}))}_load(){return new Promise((async(t,e)=>{const n=await this._urlToLoad(),i=this.extension();if(i==dQ.JSON&&this._options.format==dQ.AUTO)mQ.increment_in_progress_loads_count(),await mQ.wait_for_max_concurrent_loads_queue_freed(),fetch(n).then((async e=>{const n=await e.json();new PJ(this.loadingManager).parse(n,(e=>{mQ.decrement_in_progress_loads_count(),t(this.on_load_success(e.children[0]))}))})).catch((t=>{mQ.decrement_in_progress_loads_count(),e(t)}));else{const s=await this._loaderForFormat();if(s)mQ.increment_in_progress_loads_count(),await mQ.wait_for_max_concurrent_loads_queue_freed(),s.load(n,(e=>{this.on_load_success(e).then((e=>{mQ.decrement_in_progress_loads_count(),t(e)}))}),void 0,(t=>{li.warn(\\\\\\\"error loading\\\\\\\",n,t),mQ.decrement_in_progress_loads_count(),e(t)}));else{e(`format not supported (${i})`)}}}))}async on_load_success(t){const e=this.extension();if(e==dQ.JSON)return[t];const n=t;if(n.isObject3D)switch(e){case _Q.PDB:return this.on_load_succes_pdb(t);case _Q.OBJ:default:return[n]}const i=t;if(i.isBufferGeometry)switch(e){case _Q.DRC:return this.on_load_succes_drc(i);default:return[new B.a(i)]}const s=t;if(null!=s.scene)switch(e){case _Q.GLTF:case _Q.GLB:return this.on_load_succes_gltf(s);default:return[n]}const r=t;if(r.geometryAtoms||r.geometryBonds)switch(e){case _Q.PDB:return this.on_load_succes_pdb(r);default:return[]}return[]}on_load_succes_drc(t){return[new B.a(t,mQ._default_mat_mesh)]}on_load_succes_gltf(t){const e=t.scene;return e.animations=t.animations,[e]}on_load_succes_pdb(t){return[new ys.a(t.geometryAtoms,mQ._default_mat_point),new Ms.a(t.geometryBonds,mQ._default_mat_line)]}static moduleNamesFromFormat(t,e){switch(t){case dQ.AUTO:return this.moduleNamesFromExt(e);case dQ.DRC:return[Hn.DRACOLoader];case dQ.FBX:return[Hn.FBXLoader];case dQ.JSON:return[];case dQ.GLTF:return[Hn.GLTFLoader];case dQ.GLTF_WITH_DRACO:return[Hn.GLTFLoader,Hn.DRACOLoader];case dQ.OBJ:return[Hn.OBJLoader];case dQ.PDB:return[Hn.PDBLoader];case dQ.PLY:return[Hn.PLYLoader];case dQ.STL:return[Hn.STLLoader]}os.unreachable(t)}static moduleNamesFromExt(t){switch(t){case _Q.DRC:return[Hn.DRACOLoader];case _Q.FBX:return[Hn.FBXLoader];case _Q.GLTF:return[Hn.GLTFLoader];case _Q.GLB:return[Hn.GLTFLoader,Hn.DRACOLoader];case _Q.OBJ:return[Hn.OBJLoader];case _Q.PDB:return[Hn.PDBLoader];case _Q.PLY:return[Hn.PLYLoader];case _Q.STL:return[Hn.STLLoader]}}async _loaderForFormat(){const t=this._options.format;switch(t){case dQ.AUTO:return this._loaderForExt();case dQ.DRC:return this.loader_for_drc(this._node);case dQ.FBX:return this.loader_for_fbx();case dQ.JSON:return;case dQ.GLTF:return this.loader_for_gltf();case dQ.GLTF_WITH_DRACO:return this.loader_for_glb(this._node);case dQ.OBJ:return this.loader_for_obj();case dQ.PDB:return this.loader_for_pdb();case dQ.PLY:return this.loader_for_ply();case dQ.STL:return this.loader_for_stl()}os.unreachable(t)}async _loaderForExt(){switch(this.extension().toLowerCase()){case _Q.DRC:return this.loader_for_drc(this._node);case _Q.FBX:return this.loader_for_fbx();case _Q.GLTF:return this.loader_for_gltf();case _Q.GLB:return this.loader_for_glb(this._node);case _Q.OBJ:return this.loader_for_obj();case _Q.PDB:return this.loader_for_pdb();case _Q.PLY:return this.loader_for_ply();case _Q.STL:return this.loader_for_stl()}}loader_for_fbx(){const t=li.modulesRegister.module(Hn.FBXLoader);if(t)return new t(this.loadingManager)}loader_for_gltf(){const t=li.modulesRegister.module(Hn.GLTFLoader);if(t)return new t(this.loadingManager)}static async loader_for_drc(t){const e=li.modulesRegister.module(Hn.DRACOLoader);if(e){const n=new e(this.loadingManager),i=li.libs.root(),s=li.libs.DRACOPath();if(i||s){const e=`${i||\\\\\\\"\\\\\\\"}${s||\\\\\\\"\\\\\\\"}/`;if(t){const n=[\\\\\\\"draco_decoder.js\\\\\\\",\\\\\\\"draco_decoder.wasm\\\\\\\",\\\\\\\"draco_wasm_wrapper.js\\\\\\\"];await this._loadMultipleBlobGlobal({files:n.map((t=>({storedUrl:`${s}/${t}`,fullUrl:`${e}${t}`}))),node:t,error:\\\\\\\"failed to load draco libraries. Make sure to install them to load .glb files\\\\\\\"})}n.setDecoderPath(e)}else n.setDecoderPath(void 0);return n.setDecoderConfig({type:\\\\\\\"js\\\\\\\"}),n}}loader_for_drc(t){return mQ.loader_for_drc(t)}static async loader_for_glb(t){const e=li.modulesRegister.module(Hn.GLTFLoader),n=li.modulesRegister.module(Hn.DRACOLoader);if(e&&n){this.gltf_loader=this.gltf_loader||new e(this.loadingManager),this.draco_loader=this.draco_loader||new n(this.loadingManager);const i=li.libs.root(),s=li.libs.DRACOGLTFPath();if(i||s){const e=`${i||\\\\\\\"\\\\\\\"}${s||\\\\\\\"\\\\\\\"}/`;if(t){const n=[\\\\\\\"draco_decoder.js\\\\\\\",\\\\\\\"draco_decoder.wasm\\\\\\\",\\\\\\\"draco_wasm_wrapper.js\\\\\\\"];await this._loadMultipleBlobGlobal({files:n.map((t=>({storedUrl:`${s}/${t}`,fullUrl:`${e}${t}`}))),node:t,error:\\\\\\\"failed to load draco libraries. Make sure to install them to load .glb files\\\\\\\"})}this.draco_loader.setDecoderPath(e)}else this.draco_loader.setDecoderPath(void 0);return this.gltf_loader.setDRACOLoader(this.draco_loader),this.gltf_loader}}loader_for_glb(t){return mQ.loader_for_glb(t)}loader_for_obj(){const t=li.modulesRegister.module(Hn.OBJLoader);if(t)return new t(this.loadingManager)}loader_for_pdb(){const t=li.modulesRegister.module(Hn.PDBLoader);if(t)return new t(this.loadingManager)}loader_for_ply(){const t=li.modulesRegister.module(Hn.PLYLoader);if(t)return new t(this.loadingManager)}loader_for_stl(){const t=li.modulesRegister.module(Hn.STLLoader);if(t)return new t(this.loadingManager)}static setMaxConcurrentLoadsCount(t){this._maxConcurrentLoadsCountMethod=t}static _init_max_concurrent_loads_count(){return this._maxConcurrentLoadsCountMethod?this._maxConcurrentLoadsCountMethod():ng.isChrome()?4:1}static _init_concurrent_loads_delay(){return ng.isChrome()?1:10}static increment_in_progress_loads_count(){this.in_progress_loads_count++}static decrement_in_progress_loads_count(){this.in_progress_loads_count--;const t=this._queue.pop();if(t){const e=this.CONCURRENT_LOADS_DELAY;setTimeout((()=>{t()}),e)}}static async wait_for_max_concurrent_loads_queue_freed(){return this.in_progress_loads_count<=this.MAX_CONCURRENT_LOADS_COUNT?void 0:new Promise((t=>{this._queue.push(t)}))}}mQ._default_mat_mesh=new Ts.a,mQ._default_mat_point=new bs.a,mQ._default_mat_line=new As.a,mQ.MAX_CONCURRENT_LOADS_COUNT=mQ._init_max_concurrent_loads_count(),mQ.CONCURRENT_LOADS_DELAY=mQ._init_concurrent_loads_delay(),mQ.in_progress_loads_count=0,mQ._queue=[];class fQ extends aV{static type(){return\\\\\\\"file\\\\\\\"}static loader(t,e,n){return new mQ({url:t.url,format:t.format},e,n)}cook(t,e){const n=fQ.loader(e,this.scene(),this._node);return new Promise((t=>{n.load((e=>{const n=this._onLoad(e);t(this.createCoreGroupFromObjects(n))}),(t=>{this._onError(t,e)}))}))}clearLoadedBlob(t){fQ.loader(t,this.scene(),this._node).deregisterUrl()}_onLoad(t){t=t.flat();for(let e of t)e.traverse((t=>{this._ensureGeometryHasIndex(t),t.matrixAutoUpdate=!1}));return t}_onError(t,e){var n;null===(n=this.states)||void 0===n||n.error.set(`could not load geometry from ${e.url} (${t})`)}_ensureGeometryHasIndex(t){const e=t.geometry;e&&this.createIndexIfNone(e)}}fQ.DEFAULT_PARAMS={url:`${qg}/models/wolf.obj`,format:dQ.AUTO};const gQ=fQ.DEFAULT_PARAMS;const vQ=new class extends ua{constructor(){super(...arguments),this.url=ha.STRING(gQ.url,{fileBrowse:{type:[Rr.GEOMETRY]}}),this.format=ha.STRING(gQ.format,{menuString:{entries:pQ.map((t=>({name:t,value:t})))}}),this.reload=ha.BUTTON(null,{callback:t=>{yQ.PARAM_CALLBACK_reload(t)}})}};class yQ extends uV{constructor(){super(...arguments),this.paramsConfig=vQ}static type(){return\\\\\\\"file\\\\\\\"}async requiredModules(){for(let t of[this.p.url,this.p.format])t.isDirty()&&await t.compute();const t=$g.extension(this.pv.url||\\\\\\\"\\\\\\\"),e=this.pv.format;return mQ.moduleNamesFromFormat(e,t)}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}operation(){return this._operation=this._operation||new fQ(this.scene(),this.states,this)}async cook(t){const e=await this.operation().cook(t,this.pv);this.setCoreGroup(e)}static PARAM_CALLBACK_reload(t){t._paramCallbackReload()}_paramCallbackReload(){this.operation().clearLoadedBlob(this.pv),this.p.url.setDirty()}}const xQ=new class extends ua{constructor(){super(...arguments),this.url=ha.STRING(`${qg}/models/\\\\`@name\\\\`.obj`,{fileBrowse:{type:[Rr.GEOMETRY]},expression:{forEntities:!0}}),this.format=ha.STRING(dQ.AUTO,{menuString:{entries:pQ.map((t=>({name:t,value:t})))}}),this.reload=ha.BUTTON(null,{callback:t=>{bQ.PARAM_CALLBACK_reload(t)}})}};class bQ extends uV{constructor(){super(...arguments),this.paramsConfig=xQ,this._instancer=new LZ,this._instanceMatrix=new A.a}static type(){return\\\\\\\"fileMulti\\\\\\\"}async requiredModules(){const t=$g.extension(this.p.url.rawInput()||\\\\\\\"\\\\\\\"),e=this.pv.format;return mQ.moduleNamesFromFormat(e,t)}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>this.p.url.rawInput()))}))}))}async cook(t){const e=t[0],n=e.points(),i=[],s=new Map,r=new Map,o=new Map,a=this.p.url;if(a.hasExpression()&&a.expressionController){const t=new Set;await a.expressionController.computeExpressionForPoints(n,((e,n)=>{const i=e.index();s.has(i)?this.states.error.set(\\\\\\\"input points have duplicate indices. Make sure to merge inputs together.\\\\\\\"):(s.set(i,n),t.add(n),bQ._incrementUrlUsageCount(n,o))})),t.forEach((t=>{i.push(t)}))}else{const t=this.pv.url;i.push(t),bQ._incrementUrlUsageCount(t,o)}const l=[],c=i.map((t=>this._loadFromUrlPromises(t,r)));await Promise.all(c),this._instancer.setCoreGroup(e);for(let t of n){const e=t.index(),n=s.get(e)||this.pv.url;this._instancer.matrixFromPoint(t,this._instanceMatrix);const i=o.get(n)||1;let a=r.get(n);a&&(i>1&&(a=a.clone()),a.applyMatrix4(this._instanceMatrix),l.push(a))}this.setObjects(l)}static _incrementUrlUsageCount(t,e){const n=e.get(t);null!=n?e.set(t,n+1):e.set(t,1)}async _loadFromUrlPromises(t,e){const n=await this._loadObject(t),i=new Fn.a;i.matrixAutoUpdate=!1,i.name=t;for(let t of n)i.add(t);e.set(t,i)}_loadObject(t){const e=new mQ({url:t,format:this.pv.format},this.scene(),this);return new Promise((n=>{e.load((t=>{const e=this._onLoad(t);n(e)}),(e=>{this._onError(e,t)}))}))}_onLoad(t){t=t.flat();for(let e of t)e.traverse((t=>{this._ensureGeometryHasIndex(t),t.matrixAutoUpdate=!1}));return t}_onError(t,e){var n;null===(n=this.states)||void 0===n||n.error.set(`could not load geometry from ${e} (${t})`)}_ensureGeometryHasIndex(t){const e=t.geometry;e&&pr.createIndexIfNone(e)}static PARAM_CALLBACK_reload(t){t._paramCallbackReload()}_paramCallbackReload(){this.p.url.setDirty()}}const wQ=new class extends ua{constructor(){super(...arguments),this.dist=ha.FLOAT(.1,{range:[0,1],rangeLocked:[!0,!1]})}};class TQ extends uV{constructor(){super(...arguments),this.paramsConfig=wQ}static type(){return\\\\\\\"fuse\\\\\\\"}static displayedInputNames(){return[\\\\\\\"points to fuse together\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){const e=t[0],n=[];let i;for(let t of e.coreObjects())i=this._fuse_core_object(t),i&&n.push(i);this.setObjects(n)}_fuse_core_object(t){const e=t.object();if(!e)return;const n=t.points(),i=this.pv.dist,s={};for(let t of n){const e=t.position(),n=new p.a(Math.round(e.x/i),Math.round(e.y/i),Math.round(e.z/i)).toArray().join(\\\\\\\"-\\\\\\\");s[n]=s[n]||[],s[n].push(t)}const r=[];if(Object.keys(s).forEach((t=>{r.push(s[t][0])})),e.geometry.dispose(),r.length>0){const t=fr.geometryFromPoints(r,Os(e.constructor));return t&&(e.geometry=t),e}}}class AQ{constructor(t,e,n){this._param_size=t,this._param_hexagon_radius=e,this._param_points_only=n}process(){const t=this._param_hexagon_radius,e=.5*t,n=t,i=Math.cos(Math.PI/6)*this._param_hexagon_radius,s=Math.floor(this._param_size.x/n),r=Math.floor(this._param_size.y/i);let o=[],a=[];for(let t=0;t<r;t++)for(let r=0;r<s;r++)o.push([-.5*this._param_size.x+r*n+(t%2==0?e:0),0,-.5*this._param_size.y+t*i]),this._param_points_only||t>=1&&(0==r||r==s-1?0==r?a.push([r+1+(t-1)*s,r+(t-1)*s,r+t*s]):a.push([r+t*s,r+(t-1)*s,r-1+t*s]):(a.push([r+t*s,r+(t-1)*s,r-1+t*s]),a.push([r+t*s,r+1+(t-1)*s,r+(t-1)*s])));const l=new S.a;return l.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(o.flat()),3)),this._param_points_only||(l.setIndex(a.flat()),l.computeVertexNormals()),l}}const MQ=new p.a(0,1,0);const EQ=new class extends ua{constructor(){super(...arguments),this.size=ha.VECTOR2([1,1]),this.hexagonRadius=ha.FLOAT(.1,{range:[.001,1],rangeLocked:[!1,!1]}),this.direction=ha.VECTOR3([0,1,0]),this.pointsOnly=ha.BOOLEAN(0)}};class SQ extends uV{constructor(){super(...arguments),this.paramsConfig=EQ,this._coreTransform=new bU}static type(){return\\\\\\\"hexagons\\\\\\\"}cook(){if(this.pv.hexagonRadius>0){const t=new AQ(this.pv.size,this.pv.hexagonRadius,this.pv.pointsOnly).process();this._coreTransform.rotateGeometry(t,MQ,this.pv.direction),this.pv.pointsOnly?this.setGeometry(t,Ns.POINTS):this.setGeometry(t)}else this.setObjects([])}}var CQ;!function(t){t.ADD_PARENT=\\\\\\\"add_parent\\\\\\\",t.REMOVE_PARENT=\\\\\\\"remove_parent\\\\\\\",t.ADD_CHILD=\\\\\\\"add_child\\\\\\\"}(CQ||(CQ={}));const NQ=[CQ.ADD_PARENT,CQ.REMOVE_PARENT,CQ.ADD_CHILD];class LQ extends aV{static type(){return\\\\\\\"hierarchy\\\\\\\"}cook(t,e){const n=t[0],i=NQ[e.mode];switch(i){case CQ.ADD_PARENT:{const t=this._add_parent_to_core_group(n,e);return this.createCoreGroupFromObjects(t)}case CQ.REMOVE_PARENT:{const t=this._remove_parent_from_core_group(n,e);return this.createCoreGroupFromObjects(t)}case CQ.ADD_CHILD:{const i=this._add_child_to_core_group(n,t[1],e);return this.createCoreGroupFromObjects(i)}}os.unreachable(i)}_add_parent_to_core_group(t,e){if(0==e.levels)return t.objects();return[this._add_parent_to_object(t.objects(),e)]}_add_parent_to_object(t,e){let n=new Fn.a;if(n.matrixAutoUpdate=!1,n.add(...t),e.levels>0)for(let t=0;t<e.levels-1;t++)n=this._add_new_parent(n,e);return n}_add_new_parent(t,e){const n=new Fn.a;return n.matrixAutoUpdate=!1,n.add(t),n}_remove_parent_from_core_group(t,e){if(0==e.levels)return t.objects();{const n=[];for(let i of t.objects()){const t=this._remove_parent_from_object(i,e);for(let e of t)n.push(e)}return n}}_remove_parent_from_object(t,e){let n=t.children;for(let t=0;t<e.levels-1;t++)n=this._get_children_from_objects(n,e);return n}_get_children_from_objects(t,e){let n;const i=[];for(;n=t.pop();)if(n.children)for(let t of n.children)i.push(t);return i}_add_child_to_core_group(t,e,n){var i,s;const r=t.objects();if(!e)return null===(i=this.states)||void 0===i||i.error.set(\\\\\\\"input 1 is invalid\\\\\\\"),[];const o=e.objects(),a=n.objectMask.trim(),l=\\\\\\\"\\\\\\\"!=a?this._findObjectsByMaskFromObjects(a,r):r;n.debugObjectMask&&console.log(l);for(let t=0;t<l.length;t++){const e=l[t],n=o[t]||o[0];if(!n)return null===(s=this.states)||void 0===s||s.error.set(\\\\\\\"no objects found in input 1\\\\\\\"),[];e.add(n)}return r}_findObjectsByMaskFromObjects(t,e){const n=[];for(let i of e)this.scene().objectsController.objectsByMaskInObject(t,i,n);return n}}LQ.DEFAULT_PARAMS={mode:0,levels:1,objectMask:\\\\\\\"\\\\\\\",debugObjectMask:!1},LQ.INPUT_CLONED_STATE=Qi.FROM_NODE;const OQ=[CQ.ADD_PARENT,CQ.REMOVE_PARENT],PQ=LQ.DEFAULT_PARAMS;const RQ=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(PQ.mode,{menu:{entries:NQ.map(((t,e)=>({name:t,value:e})))}}),this.levels=ha.INTEGER(PQ.levels,{range:[0,5],visibleIf:[{mode:NQ.indexOf(CQ.ADD_PARENT)},{mode:NQ.indexOf(CQ.REMOVE_PARENT)}]}),this.objectMask=ha.STRING(\\\\\\\"\\\\\\\",{visibleIf:{mode:NQ.indexOf(CQ.ADD_CHILD)}}),this.debugObjectMask=ha.BOOLEAN(0,{visibleIf:{mode:NQ.indexOf(CQ.ADD_CHILD)}})}};class IQ extends uV{constructor(){super(...arguments),this.paramsConfig=RQ}static type(){return\\\\\\\"hierarchy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to add or remove parents to/from\\\\\\\",\\\\\\\"objects to use as parent or children (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState(LQ.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.mode,this.p.levels,this.p.objectMask],(()=>{const t=NQ[this.pv.mode];return OQ.includes(t)?`${t} ${this.pv.levels}`:`${t} (with mask: ${this.pv.objectMask})`}))}))}))}cook(t){this._operation=this._operation||new LQ(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const FQ=new class extends ua{constructor(){super(...arguments),this.texture=ha.OPERATOR_PATH(vi.UV,{nodeSelection:{context:ts.COP}}),this.mult=ha.FLOAT(1)}};class DQ extends uV{constructor(){super(...arguments),this.paramsConfig=FQ}static type(){return\\\\\\\"heightMap\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0],n=this.p.texture.found_node();if(n){if(n.context()==ts.COP){const t=n,i=(await t.compute()).texture();for(let t of e.coreObjects())this._set_position_from_data_texture(t,i)}else this.states.error.set(\\\\\\\"found node is not a texture\\\\\\\")}e.computeVertexNormals(),this.setCoreGroup(e)}_set_position_from_data_texture(t,e){var n;const i=this._data_from_texture(e);if(!i)return;const{data:s,resx:r,resy:o}=i,a=s.length/(r*o),l=null===(n=t.coreGeometry())||void 0===n?void 0:n.geometry();if(!l)return;const c=l.getAttribute(\\\\\\\"position\\\\\\\").array,h=l.getAttribute(\\\\\\\"uv\\\\\\\"),u=l.getAttribute(\\\\\\\"normal\\\\\\\");if(null==h)return void this.states.error.set(\\\\\\\"uvs are required\\\\\\\");if(null==u)return void this.states.error.set(\\\\\\\"normals are required\\\\\\\");const d=h.array,p=u.array,_=c.length/3;let m,f,g,v,y,x,b,w=0;for(let t=0;t<_;t++)m=2*t,f=d[m],g=d[m+1],v=Math.floor((r-1)*f),y=Math.floor((o-1)*(1-g)),x=y*r+v,b=s[a*x],w=3*t,c[w+0]+=p[w+0]*b*this.pv.mult,c[w+1]+=p[w+1]*b*this.pv.mult,c[w+2]+=p[w+2]*b*this.pv.mult}_data_from_texture(t){if(t.image)return t.image.data?this._data_from_data_texture(t):this._data_from_default_texture(t)}_data_from_default_texture(t){const e=t.image.width,n=t.image.height;return{data:Bf.data_from_image(t.image).data,resx:e,resy:n}}_data_from_data_texture(t){return{data:t.image.data,resx:t.image.width,resy:t.image.height}}}function BQ(t){return Math.atan2(-t.y,Math.sqrt(t.x*t.x+t.z*t.z))}class zQ extends S.a{constructor(t,e,n,i,s){super(),this.type=\\\\\\\"PolyhedronBufferGeometry\\\\\\\",this.parameters={vertices:t,indices:e,radius:n,detail:i},n=n||1,i=i||0;const r=[],o=[],a=new Map;function l(t,e,n,i){const s=i+1,r=[];for(let i=0;i<=s;i++){r[i]=[];const o=t.clone().lerp(n,i/s),a=e.clone().lerp(n,i/s),l=s-i;for(let t=0;t<=l;t++)r[i][t]=0===t&&i===s?o:o.clone().lerp(a,t/l)}for(let t=0;t<s;t++)for(let e=0;e<2*(s-t)-1;e++){const n=Math.floor(e/2);e%2==0?(c(r[t][n+1]),c(r[t+1][n]),c(r[t][n])):(c(r[t][n+1]),c(r[t+1][n+1]),c(r[t+1][n]))}}function c(t){if(s){let e=a.get(t.x);if(e){const n=e.get(t.y);if(n&&n.has(t.z))return}e||(e=new Map,a.set(t.x,e));let n=e.get(t.y);n||(n=new Set,e.set(t.y,n)),n.add(t.z)}r.push(t.x,t.y,t.z)}function h(e,n){const i=3*e;n.x=t[i+0],n.y=t[i+1],n.z=t[i+2]}!function(t){const n=new p.a,i=new p.a,s=new p.a;for(let r=0;r<e.length;r+=3)h(e[r+0],n),h(e[r+1],i),h(e[r+2],s),l(n,i,s,t)}(i),function(t){const e=new p.a;for(let n=0;n<r.length;n+=3)e.x=r[n+0],e.y=r[n+1],e.z=r[n+2],e.normalize().multiplyScalar(t),r[n+0]=e.x,r[n+1]=e.y,r[n+2]=e.z}(n),function(){const t=new p.a;for(let n=0;n<r.length;n+=3){t.x=r[n+0],t.y=r[n+1],t.z=r[n+2];const i=(e=t,Math.atan2(e.z,-e.x)/2/Math.PI+.5),s=BQ(t)/Math.PI+.5;o.push(i,1-s)}var e}(),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(r,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(o,2)),s||(this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(r.slice(),3)),0===i?this.computeVertexNormals():this.normalizeNormals())}}class kQ extends zQ{constructor(t,e,n){const i=(1+Math.sqrt(5))/2;super([-1,i,0,1,i,0,-1,-i,0,1,-i,0,0,-1,i,0,1,i,0,-1,-i,0,1,-i,i,0,-1,i,0,1,-i,0,-1,-i,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],t,e,n),this.type=\\\\\\\"IcosahedronBufferGeometry\\\\\\\",this.parameters={radius:t,detail:e}}}class UQ extends aV{static type(){return\\\\\\\"icosahedron\\\\\\\"}cook(t,e){const n=e.pointsOnly,i=new kQ(e.radius,e.detail,n);if(i.translate(e.center.x,e.center.y,e.center.z),n){const t=this.createObject(i,Ns.POINTS);return this.createCoreGroupFromObjects([t])}return i.computeVertexNormals(),this.createCoreGroupFromGeometry(i)}}UQ.DEFAULT_PARAMS={radius:1,detail:0,pointsOnly:!1,center:new p.a(0,0,0)};const GQ=UQ.DEFAULT_PARAMS;const VQ=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(GQ.radius),this.detail=ha.INTEGER(GQ.detail,{range:[0,10],rangeLocked:[!0,!1]}),this.pointsOnly=ha.BOOLEAN(GQ.pointsOnly),this.center=ha.VECTOR3(GQ.center)}};class HQ extends uV{constructor(){super(...arguments),this.paramsConfig=VQ}static type(){return\\\\\\\"icosahedron\\\\\\\"}cook(){this._operation=this._operation||new UQ(this._scene,this.states);const t=this._operation.cook([],this.pv);this.setCoreGroup(t)}}class jQ extends aV{static type(){return\\\\\\\"instance\\\\\\\"}async cook(t,e){const n=t[0];this._geometry=void 0;const i=n.objectsWithGeo()[0];if(i){const n=i.geometry;if(n){const i=t[1];this._create_instance(n,i,e)}}if(this._geometry){const t=(s=i)instanceof B.a?Ns.MESH:s instanceof Fn.a?Ns.GROUP:s instanceof Ms.a?Ns.LINE_SEGMENTS:s instanceof ys.a?Ns.POINTS:s instanceof Q.a?Ns.OBJECT3D:void li.warn(\\\\\\\"ObjectTypeByObject received an unknown object type\\\\\\\",s);if(t){const n=this.createObject(this._geometry,t);if(e.applyMaterial){const t=await this._get_material(e);t&&await this._applyMaterial(n,t)}return this.createCoreGroupFromObjects([n])}}var s;return this.createCoreGroupFromObjects([])}async _get_material(t){var e;if(t.applyMaterial){const n=t.material.nodeWithContext(ts.MAT,null===(e=this.states)||void 0===e?void 0:e.error);if(n){this._globals_handler=this._globals_handler||new Pf;const t=n.assemblerController;t&&t.set_assembler_globals_handler(this._globals_handler);return(await n.compute()).material()}}}async _applyMaterial(t,e){t.material=e,yr.applyCustomMaterials(t,e)}_create_instance(t,e,n){this._geometry=LZ.createInstanceBufferGeometry(t,e,n.attributesToCopy)}}jQ.DEFAULT_PARAMS={attributesToCopy:\\\\\\\"instance*\\\\\\\",applyMaterial:!0,material:new yi(\\\\\\\"\\\\\\\")},jQ.INPUT_CLONED_STATE=[Qi.ALWAYS,Qi.NEVER];const WQ=jQ.DEFAULT_PARAMS;const qQ=new class extends ua{constructor(){super(...arguments),this.attributesToCopy=ha.STRING(WQ.attributesToCopy),this.applyMaterial=ha.BOOLEAN(WQ.applyMaterial),this.material=ha.NODE_PATH(WQ.material.path(),{visibleIf:{applyMaterial:1},nodeSelection:{context:ts.MAT},dependentOnFoundNode:!1})}};class XQ extends uV{constructor(){super(...arguments),this.paramsConfig=qQ}static type(){return\\\\\\\"instance\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to be instanciated\\\\\\\",\\\\\\\"points to instance to\\\\\\\"]}initializeNode(){super.initializeNode(),this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState(jQ.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new jQ(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var YQ;!function(t){t.GEO=\\\\\\\"geo\\\\\\\",t.POINTS=\\\\\\\"points\\\\\\\"}(YQ||(YQ={}));const $Q=[YQ.GEO,YQ.POINTS];class JQ extends aV{static type(){return\\\\\\\"instanceUpdate\\\\\\\"}async cook(t,e){return this._cookFromUpdateMode(t,e),t[0]}_cookFromUpdateMode(t,e){const n=$Q[e.mode];switch(n){case YQ.GEO:return this._cookForUpdateGeo(t,e);case YQ.POINTS:return this._cookForUpdatePoints(t,e)}os.unreachable(n)}_cookForUpdateGeo(t,e){const n=t[0],i=n.objects()[0].geometry,s=t[1].objectsWithGeo()[0],r=n.attribNamesMatchingMask(e.geoAttributes);for(let t of r){const e=i.getAttribute(t),n=s.geometry.getAttribute(t).array;e.array=n.slice(0,n.length-1),e.needsUpdate=!0}}_cookForUpdatePoints(t,e){const n=t[0],i=n.objects()[0].geometry,s=t[1],r=n.attribNamesMatchingMask(e.pointAttributes).map((t=>LZ.remapName(t)));let o=!1;for(let t of r)LZ.transformAttributeNames.includes(t)&&(o=!0);const a=s.points();if(o){LZ.updateTransformInstanceAttributes(a,s,i);for(let t of LZ.transformAttributeNames){const e=i.getAttribute(t);e&&(e.needsUpdate=!0)}}}}JQ.DEFAULT_PARAMS={mode:$Q.indexOf(YQ.GEO),geoAttributes:\\\\\\\"P N\\\\\\\",pointAttributes:\\\\\\\"P\\\\\\\"},JQ.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.NEVER];const ZQ=JQ.DEFAULT_PARAMS;const KQ=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(ZQ.mode,{menu:{entries:$Q.map(((t,e)=>({value:e,name:t})))}}),this.geoAttributes=ha.STRING(ZQ.geoAttributes,{visibleIf:{mode:$Q.indexOf(YQ.GEO)}}),this.pointAttributes=ha.STRING(ZQ.pointAttributes,{visibleIf:{mode:$Q.indexOf(YQ.POINTS)}})}};class QQ extends uV{constructor(){super(...arguments),this.paramsConfig=KQ}static type(){return\\\\\\\"instanceUpdate\\\\\\\"}static displayedInputNames(){return[\\\\\\\"instance to update\\\\\\\",\\\\\\\"geometry to copy attributes from\\\\\\\"]}initializeNode(){super.initializeNode(),this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState(JQ.INPUT_CLONED_STATE)}setMode(t){this.p.mode.set($Q.indexOf(t))}async cook(t){this._operation=this._operation||new JQ(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const t0=new class extends ua{constructor(){super(...arguments),this.useMax=ha.BOOLEAN(0),this.max=ha.INTEGER(1,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useMax:1}})}};class e0 extends uV{constructor(){super(...arguments),this.paramsConfig=t0}static type(){return\\\\\\\"instancesCount\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0],n=e.objectsWithGeo();for(let t of n){const e=t.geometry;e&&e instanceof lJ&&(this.pv.useMax?e.instanceCount=this.pv.max:e.instanceCount=1/0)}this.setCoreGroup(e)}}class n0 extends aV{static type(){return\\\\\\\"jitter\\\\\\\"}cook(t,e){const n=t[0],i=n.points();let s;for(let t=0;t<i.length;t++){s=i[t];const n=new p.a(2*(or.randFloat(75*t+764+e.seed)-.5),2*(or.randFloat(5678*t+3653+e.seed)-.5),2*(or.randFloat(657*t+48464+e.seed)-.5));n.normalize(),n.multiply(e.mult),n.multiplyScalar(e.amount*or.randFloat(78*t+54+e.seed));const r=s.position().clone().add(n);s.setPosition(r)}return n}}n0.DEFAULT_PARAMS={amount:1,mult:new p.a(1,1,1),seed:1},n0.INPUT_CLONED_STATE=Qi.FROM_NODE;const i0=n0.DEFAULT_PARAMS;const s0=new class extends ua{constructor(){super(...arguments),this.amount=ha.FLOAT(i0.amount),this.mult=ha.VECTOR3(i0.mult),this.seed=ha.INTEGER(i0.seed,{range:[0,100]})}};class r0 extends uV{constructor(){super(...arguments),this.paramsConfig=s0}static type(){return\\\\\\\"jitter\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to jitter points of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(n0.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new n0(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}new class extends ua{};const o0=new class extends ua{constructor(){super(...arguments),this.layer=ha.INTEGER(0,{range:[0,31],rangeLocked:[!0,!0]})}};class a0 extends uV{constructor(){super(...arguments),this.paramsConfig=o0}static type(){return\\\\\\\"layer\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to change layers of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.layer])}))}))}cook(t){const e=t[0];for(let t of e.objects())t.layers.set(this.pv.layer);this.setCoreGroup(e)}}const l0=new class extends ua{constructor(){super(...arguments),this.length=ha.FLOAT(1,{range:[0,10]}),this.pointsCount=ha.INTEGER(1,{range:[2,100],rangeLocked:[!0,!1]}),this.origin=ha.VECTOR3([0,0,0]),this.direction=ha.VECTOR3([0,1,0])}};class c0 extends uV{constructor(){super(...arguments),this.paramsConfig=l0}static type(){return\\\\\\\"line\\\\\\\"}initializeNode(){}cook(){const t=Math.max(2,this.pv.pointsCount),e=new Array(3*t),n=new Array(t),i=this.pv.direction.clone().normalize().multiplyScalar(this.pv.length);for(let s=0;s<t;s++){const r=s/(t-1),o=i.clone().multiplyScalar(r);o.add(this.pv.origin),o.toArray(e,3*s),s>0&&(n[2*(s-1)]=s-1,n[2*(s-1)+1]=s)}const s=new S.a;s.setAttribute(\\\\\\\"position\\\\\\\",new C.c(e,3)),s.setIndex(n),this.setGeometry(s,Ns.LINE_SEGMENTS)}}const h0=new class extends ua{constructor(){super(...arguments),this.distance0=ha.FLOAT(1),this.distance1=ha.FLOAT(2),this.autoUpdate=ha.BOOLEAN(1),this.update=ha.BUTTON(null,{callback:t=>{u0.PARAM_CALLBACK_update(t)}}),this.camera=ha.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{visibleIf:{autoUpdate:0},dependentOnFoundNode:!1})}};class u0 extends uV{constructor(){super(...arguments),this.paramsConfig=h0,this._lod=this._create_LOD()}static type(){return\\\\\\\"lod\\\\\\\"}static displayedInputNames(){return[\\\\\\\"high res\\\\\\\",\\\\\\\"mid res\\\\\\\",\\\\\\\"low res\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,3),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}_create_LOD(){const t=new Cs;return t.matrixAutoUpdate=!1,t}cook(t){this._clear_lod(),this._add_level(t[0],0),this._add_level(t[1],this.pv.distance0),this._add_level(t[2],this.pv.distance1),this._lod.autoUpdate=this.pv.autoUpdate,this.setObject(this._lod)}_add_level(t,e){if(t){const n=t.objects();let i;for(let t=0;t<n.length;t++)i=n[t],i.visible=!0,this._lod.addLevel(i,e),0==e&&0==t&&(this._lod.matrix.copy(i.matrix),bU.decomposeMatrix(this._lod)),i.matrix.identity(),bU.decomposeMatrix(i)}}_clear_lod(){let t;for(;t=this._lod.children[0];)this._lod.remove(t),t.matrix.multiply(this._lod.matrix),bU.decomposeMatrix(t);for(;this._lod.levels.pop(););}static PARAM_CALLBACK_update(t){t._update_lod()}async _update_lod(){if(this.p.autoUpdate)return;const t=this.p.camera;t.isDirty()&&await t.compute();let e=t.found_node_with_context_and_type(ts.OBJ,is.PERSPECTIVE)||t.found_node_with_context_and_type(ts.OBJ,is.ORTHOGRAPHIC);if(e){const t=e.object;this._lod.update(t)}else this.states.error.set(\\\\\\\"no camera node found\\\\\\\")}}class d0 extends aV{constructor(){super(...arguments),this._globals_handler=new Pf,this._old_mat_by_old_new_id=new Map,this._materials_by_uuid=new Map}static type(){return\\\\\\\"material\\\\\\\"}async cook(t,e){const n=t[0];return this._old_mat_by_old_new_id.clear(),await this._apply_materials(n,e),this._swap_textures(n,e),n}async _apply_materials(t,e){var n,i,s;if(!e.assignMat)return;const r=e.material.nodeWithContext(ts.MAT,null===(n=this.states)||void 0===n?void 0:n.error);if(r){const n=r.material,s=r.assemblerController;if(s&&s.set_assembler_globals_handler(this._globals_handler),await r.compute(),n){if(e.applyToChildren)for(let i of t.objects())i.traverse((t=>{this._apply_material(t,n,e)}));else for(let i of t.objectsFromGroup(e.group))this._apply_material(i,n,e);return t}null===(i=this.states)||void 0===i||i.error.set(`material invalid. (error: '${r.states.error.message()}')`)}else null===(s=this.states)||void 0===s||s.error.set(\\\\\\\"no material node found\\\\\\\")}_swap_textures(t,e){if(e.swapCurrentTex){this._materials_by_uuid.clear();for(let n of t.objectsFromGroup(e.group))if(e.applyToChildren)n.traverse((t=>{const e=n.material;this._materials_by_uuid.set(e.uuid,e)}));else{const t=n.material;this._materials_by_uuid.set(t.uuid,t)}this._materials_by_uuid.forEach(((t,n)=>{this._swap_texture(t,e)}))}}_apply_material(t,e,n){if(n.group&&!br.isInGroup(n.group,t))return;const i=n.cloneMat?yr.clone(e):e;if(e instanceof F&&i instanceof F)for(let t in e.uniforms)i.uniforms[t]=e.uniforms[t];const s=t;this._old_mat_by_old_new_id.set(i.uuid,s.material),s.material=i,yr.apply_render_hook(t,i),yr.applyCustomMaterials(t,i)}_swap_texture(t,e){if(\\\\\\\"\\\\\\\"==e.texSrc0||\\\\\\\"\\\\\\\"==e.texDest0)return;let n=this._old_mat_by_old_new_id.get(t.uuid);n=n||t;const i=n[e.texSrc0];if(i){t[e.texDest0]=i;const n=t.uniforms;if(n){n[e.texDest0]&&(n[e.texDest0]={value:i})}}}}d0.DEFAULT_PARAMS={group:\\\\\\\"\\\\\\\",assignMat:!0,material:new yi(\\\\\\\"\\\\\\\"),applyToChildren:!0,cloneMat:!1,shareUniforms:!0,swapCurrentTex:!1,texSrc0:\\\\\\\"emissiveMap\\\\\\\",texDest0:\\\\\\\"map\\\\\\\"},d0.INPUT_CLONED_STATE=Qi.FROM_NODE;const p0=d0.DEFAULT_PARAMS;const _0=new class extends ua{constructor(){super(...arguments),this.group=ha.STRING(p0.group),this.assignMat=ha.BOOLEAN(p0.assignMat),this.material=ha.NODE_PATH(p0.material.path(),{nodeSelection:{context:ts.MAT},dependentOnFoundNode:!1,visibleIf:{assignMat:1}}),this.applyToChildren=ha.BOOLEAN(p0.applyToChildren,{visibleIf:{assignMat:1}}),this.cloneMat=ha.BOOLEAN(p0.cloneMat,{visibleIf:{assignMat:1}}),this.shareUniforms=ha.BOOLEAN(p0.shareUniforms,{visibleIf:{assignMat:1,cloneMat:1}}),this.swapCurrentTex=ha.BOOLEAN(p0.swapCurrentTex),this.texSrc0=ha.STRING(p0.texSrc0,{visibleIf:{swapCurrentTex:1}}),this.texDest0=ha.STRING(p0.texDest0,{visibleIf:{swapCurrentTex:1}})}};class m0 extends uV{constructor(){super(...arguments),this.paramsConfig=_0}static type(){return\\\\\\\"material\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to assign material to\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(d0.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.material],(()=>this.p.material.rawInput()))}))}))}async cook(t){this._operation=this._operation||new d0(this._scene,this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class f0 extends aV{static type(){return\\\\\\\"merge\\\\\\\"}cook(t,e){let n=[];for(let i of t)if(i){const t=i.objects();if(e.compact)for(let e of t)e.traverse((t=>{n.push(t)}));else for(let t of i.objects())n.push(t)}e.compact&&(n=this._makeCompact(n));for(let t of n)t.traverse((t=>{t.matrixAutoUpdate=!1}));return this.createCoreGroupFromObjects(n)}_makeCompact(t){const e=new Map,n=new Map,i=[];for(let s of t)s.traverse((t=>{if(t instanceof Fn.a)return;const s=t;if(s.geometry){const t=Os(s.constructor);if(i.includes(t)||i.push(t),t){e.get(t)||e.set(t,s.material),h.pushOnArrayAtEntry(n,t,s)}}}));const s=[];return i.forEach((t=>{var i,r;const o=n.get(t);if(o){const n=[];for(let t of o){const e=t.geometry;e.applyMatrix4(t.matrix),n.push(e)}try{const r=fr.mergeGeometries(n);if(r){const n=e.get(t),i=this.createObject(r,t,n);s.push(i)}else null===(i=this.states)||void 0===i||i.error.set(\\\\\\\"merge failed, check that input geometries have the same attributes\\\\\\\")}catch(t){null===(r=this.states)||void 0===r||r.error.set(t.message)}}})),s}}f0.DEFAULT_PARAMS={compact:!1},f0.INPUT_CLONED_STATE=Qi.FROM_NODE;const g0=\\\\\\\"geometry to merge\\\\\\\",v0=f0.DEFAULT_PARAMS;const y0=new class extends ua{constructor(){super(...arguments),this.compact=ha.BOOLEAN(v0.compact),this.inputsCount=ha.INTEGER(4,{range:[1,32],rangeLocked:[!0,!1],callback:t=>{x0.PARAM_CALLBACK_setInputsCount(t)}})}};class x0 extends uV{constructor(){super(...arguments),this.paramsConfig=y0}static type(){return\\\\\\\"merge\\\\\\\"}static displayedInputNames(){return[g0,g0,g0,g0]}setCompactMode(t){this.p.compact.set(t)}initializeNode(){this.io.inputs.setCount(1,4),this.io.inputs.initInputsClonedState(f0.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.compact],(()=>this.pv.compact?\\\\\\\"compact\\\\\\\":\\\\\\\"separate objects\\\\\\\"))})),this.params.addOnSceneLoadHook(\\\\\\\"update inputs\\\\\\\",(()=>{this._callbackUpdateInputsCount()}))}))}cook(t){this._operation=this._operation||new f0(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}_callbackUpdateInputsCount(){this.io.inputs.setCount(1,this.pv.inputsCount),this.emit(Ei.INPUTS_UPDATED)}static PARAM_CALLBACK_setInputsCount(t){t._callbackUpdateInputsCount()}}const b0=new Float32Array(36),w0=new Float32Array(36),T0=new Float32Array(36);function A0(t,e,n){return t+(e-t)*n}class M0 extends S.a{constructor(t,e,n){super(),this.resolution=t,this.isMarchingCubes=!0,this.isolation=80,this.size=-1,this.size2=-1,this.size3=-1,this.halfsize=-1,this.delta=-1,this.yd=-1,this.zd=-1,this.count=-1,this.maxCount=-1,this.enableUvs=void 0!==e&&e,this.enableColors=void 0!==n&&n,this.size=this.resolution,this.size2=this.size*this.size,this.size3=this.size2*this.size,this.halfsize=this.size/2,this.delta=2/this.size,this.yd=this.size,this.zd=this.size2,this.field=new Float32Array(this.size3),this.normal_cache=new Float32Array(3*this.size3),this.palette=new Float32Array(3*this.size3),this.maxCount=this.size3,this.count=0,this.positionArray=new Float32Array(3*this.maxCount),this.setAttribute(\\\\\\\"position\\\\\\\",new C.a(this.positionArray,3)),this.normalArray=new Float32Array(3*this.maxCount),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.a(this.normalArray,3)),this.enableUvs&&(this.uvArray=new Float32Array(2*this.maxCount),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.a(this.uvArray,2))),this.enableColors&&(this.colorArray=new Float32Array(3*this.maxCount),this.setAttribute(\\\\\\\"color\\\\\\\",new C.a(this.colorArray,3)));const i=(t,e,n,i,c)=>{const h=i+1,u=i+this.yd,d=i+this.zd,p=h+this.yd,_=h+this.zd,m=i+this.yd+this.zd,f=h+this.yd+this.zd;let g=0;const v=this.field[i],y=this.field[h],x=this.field[u],b=this.field[p],w=this.field[d],T=this.field[_],A=this.field[m],M=this.field[f];v<c&&(g|=1),y<c&&(g|=2),x<c&&(g|=8),b<c&&(g|=4),w<c&&(g|=16),T<c&&(g|=32),A<c&&(g|=128),M<c&&(g|=64);const E=E0[g];if(0===E)return 0;const S=this.delta,C=t+S,N=e+S,L=n+S;1&E&&(a(i),a(h),s(3*i,0,c,t,e,n,v,y,i,h)),2&E&&(a(h),a(p),r(3*h,3,c,C,e,n,y,b,h,p)),4&E&&(a(u),a(p),s(3*u,6,c,t,N,n,x,b,u,p)),8&E&&(a(i),a(u),r(3*i,9,c,t,e,n,v,x,i,u)),16&E&&(a(d),a(_),s(3*d,12,c,t,e,L,w,T,d,_)),32&E&&(a(_),a(f),r(3*_,15,c,C,e,L,T,M,_,f)),64&E&&(a(m),a(f),s(3*m,18,c,t,N,L,A,M,m,f)),128&E&&(a(d),a(m),r(3*d,21,c,t,e,L,w,A,d,m)),256&E&&(a(i),a(d),o(3*i,24,c,t,e,n,v,w,i,d)),512&E&&(a(h),a(_),o(3*h,27,c,C,e,n,y,T,h,_)),1024&E&&(a(p),a(f),o(3*p,30,c,C,N,n,b,M,p,f)),2048&E&&(a(u),a(m),o(3*u,33,c,t,N,n,x,A,u,m)),g<<=4;let O,P,R,I=0,F=0;for(;-1!=S0[g+F];)O=g+F,P=O+1,R=O+2,l(b0,w0,T0,3*S0[O],3*S0[P],3*S0[R]),F+=3,I++;return I};this._createPolygons=()=>{const t=this.size-2;for(let e=1;e<t;e++){const n=this.size2*e,s=(e-this.halfsize)/this.halfsize;for(let e=1;e<t;e++){const r=n+this.size*e,o=(e-this.halfsize)/this.halfsize;for(let e=1;e<t;e++){const t=(e-this.halfsize)/this.halfsize;i(t,o,s,r+e,this.isolation)}}}};const s=(t,e,n,i,s,r,o,a,l,c)=>{const h=(n-o)/(a-o),u=this.normal_cache;b0[e+0]=i+h*this.delta,b0[e+1]=s,b0[e+2]=r,w0[e+0]=A0(u[t+0],u[t+3],h),w0[e+1]=A0(u[t+1],u[t+4],h),w0[e+2]=A0(u[t+2],u[t+5],h),T0[e+0]=A0(this.palette[3*l+0],this.palette[3*c+0],h),T0[e+1]=A0(this.palette[3*l+1],this.palette[3*c+1],h),T0[e+2]=A0(this.palette[3*l+2],this.palette[3*c+2],h)},r=(t,e,n,i,s,r,o,a,l,c)=>{const h=(n-o)/(a-o),u=this.normal_cache;b0[e+0]=i,b0[e+1]=s+h*this.delta,b0[e+2]=r;const d=t+3*this.yd;w0[e+0]=A0(u[t+0],u[d+0],h),w0[e+1]=A0(u[t+1],u[d+1],h),w0[e+2]=A0(u[t+2],u[d+2],h),T0[e+0]=A0(this.palette[3*l+0],this.palette[3*c+0],h),T0[e+1]=A0(this.palette[3*l+1],this.palette[3*c+1],h),T0[e+2]=A0(this.palette[3*l+2],this.palette[3*c+2],h)},o=(t,e,n,i,s,r,o,a,l,c)=>{const h=(n-o)/(a-o),u=this.normal_cache;b0[e+0]=i,b0[e+1]=s,b0[e+2]=r+h*this.delta;const d=t+3*this.zd;w0[e+0]=A0(u[t+0],u[d+0],h),w0[e+1]=A0(u[t+1],u[d+1],h),w0[e+2]=A0(u[t+2],u[d+2],h),T0[e+0]=A0(this.palette[3*l+0],this.palette[3*c+0],h),T0[e+1]=A0(this.palette[3*l+1],this.palette[3*c+1],h),T0[e+2]=A0(this.palette[3*l+2],this.palette[3*c+2],h)},a=t=>{const e=3*t;0===this.normal_cache[e]&&(this.normal_cache[e+0]=this.field[t-1]-this.field[t+1],this.normal_cache[e+1]=this.field[t-this.yd]-this.field[t+this.yd],this.normal_cache[e+2]=this.field[t-this.zd]-this.field[t+this.zd])},l=(t,e,n,i,s,r)=>{const o=3*this.count;if(this.positionArray&&this.normalArray){if(this.positionArray[o+0]=t[i],this.positionArray[o+1]=t[i+1],this.positionArray[o+2]=t[i+2],this.positionArray[o+3]=t[s],this.positionArray[o+4]=t[s+1],this.positionArray[o+5]=t[s+2],this.positionArray[o+6]=t[r],this.positionArray[o+7]=t[r+1],this.positionArray[o+8]=t[r+2],this.normalArray[o+0]=e[i+0],this.normalArray[o+1]=e[i+1],this.normalArray[o+2]=e[i+2],this.normalArray[o+3]=e[s+0],this.normalArray[o+4]=e[s+1],this.normalArray[o+5]=e[s+2],this.normalArray[o+6]=e[r+0],this.normalArray[o+7]=e[r+1],this.normalArray[o+8]=e[r+2],this.enableUvs&&this.uvArray){const e=2*this.count;this.uvArray[e+0]=t[i+0],this.uvArray[e+1]=t[i+2],this.uvArray[e+2]=t[s+0],this.uvArray[e+3]=t[s+2],this.uvArray[e+4]=t[r+0],this.uvArray[e+5]=t[r+2]}this.enableColors&&this.colorArray&&(this.colorArray[o+0]=n[i+0],this.colorArray[o+1]=n[i+1],this.colorArray[o+2]=n[i+2],this.colorArray[o+3]=n[s+0],this.colorArray[o+4]=n[s+1],this.colorArray[o+5]=n[s+2],this.colorArray[o+6]=n[r+0],this.colorArray[o+7]=n[r+1],this.colorArray[o+8]=n[r+2]),this.count+=3}}}createPolygons(){this._createPolygons()}addBall(t,e,n,i,s,r){const o=Math.sign(i);i=Math.abs(i);const a=!(null==r);let l=new D.a(t,e,n);if(a)try{r&&(l=r)}catch(i){l=new D.a(t,e,n)}const c=this.size*Math.sqrt(i/s),h=n*this.size,u=e*this.size,d=t*this.size;let p=Math.floor(h-c);p<1&&(p=1);let _=Math.floor(h+c);_>this.size-1&&(_=this.size-1);let m=Math.floor(u-c);m<1&&(m=1);let f=Math.floor(u+c);f>this.size-1&&(f=this.size-1);let g=Math.floor(d-c);g<1&&(g=1);let v,y,x,b,w,T,A,M,E,S,C,N=Math.floor(d+c);for(N>this.size-1&&(N=this.size-1),x=p;x<_;x++)for(w=this.size2*x,M=x/this.size-n,E=M*M,y=m;y<f;y++)for(b=w+this.size*y,A=y/this.size-e,S=A*A,v=g;v<N;v++)if(T=v/this.size-t,C=i/(1e-6+T*T+S+E)-s,C>0){this.field[b+v]+=C*o;const t=Math.sqrt((v-d)*(v-d)+(y-u)*(y-u)+(x-h)*(x-h))/c,e=1-t*t*t*(t*(6*t-15)+10);this.palette[3*(b+v)+0]+=l.r*e,this.palette[3*(b+v)+1]+=l.g*e,this.palette[3*(b+v)+2]+=l.b*e}}}const E0=new Int32Array([0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0]),S0=new Int32Array([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,9,8,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,2,10,0,2,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,8,3,2,10,8,10,9,8,-1,-1,-1,-1,-1,-1,-1,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,8,11,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,11,2,1,9,11,9,8,11,-1,-1,-1,-1,-1,-1,-1,3,10,1,11,10,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,10,1,0,8,10,8,11,10,-1,-1,-1,-1,-1,-1,-1,3,9,0,3,11,9,11,10,9,-1,-1,-1,-1,-1,-1,-1,9,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,7,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,1,9,4,7,1,7,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,4,7,3,0,4,1,2,10,-1,-1,-1,-1,-1,-1,-1,9,2,10,9,0,2,8,4,7,-1,-1,-1,-1,-1,-1,-1,2,10,9,2,9,7,2,7,3,7,9,4,-1,-1,-1,-1,8,4,7,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,4,7,11,2,4,2,0,4,-1,-1,-1,-1,-1,-1,-1,9,0,1,8,4,7,2,3,11,-1,-1,-1,-1,-1,-1,-1,4,7,11,9,4,11,9,11,2,9,2,1,-1,-1,-1,-1,3,10,1,3,11,10,7,8,4,-1,-1,-1,-1,-1,-1,-1,1,11,10,1,4,11,1,0,4,7,11,4,-1,-1,-1,-1,4,7,8,9,0,11,9,11,10,11,0,3,-1,-1,-1,-1,4,7,11,4,11,9,9,11,10,-1,-1,-1,-1,-1,-1,-1,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,5,4,1,5,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,5,4,8,3,5,3,1,5,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,10,4,9,5,-1,-1,-1,-1,-1,-1,-1,5,2,10,5,4,2,4,0,2,-1,-1,-1,-1,-1,-1,-1,2,10,5,3,2,5,3,5,4,3,4,8,-1,-1,-1,-1,9,5,4,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,0,8,11,4,9,5,-1,-1,-1,-1,-1,-1,-1,0,5,4,0,1,5,2,3,11,-1,-1,-1,-1,-1,-1,-1,2,1,5,2,5,8,2,8,11,4,8,5,-1,-1,-1,-1,10,3,11,10,1,3,9,5,4,-1,-1,-1,-1,-1,-1,-1,4,9,5,0,8,1,8,10,1,8,11,10,-1,-1,-1,-1,5,4,0,5,0,11,5,11,10,11,0,3,-1,-1,-1,-1,5,4,8,5,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,9,7,8,5,7,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,3,0,9,5,3,5,7,3,-1,-1,-1,-1,-1,-1,-1,0,7,8,0,1,7,1,5,7,-1,-1,-1,-1,-1,-1,-1,1,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,7,8,9,5,7,10,1,2,-1,-1,-1,-1,-1,-1,-1,10,1,2,9,5,0,5,3,0,5,7,3,-1,-1,-1,-1,8,0,2,8,2,5,8,5,7,10,5,2,-1,-1,-1,-1,2,10,5,2,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,7,9,5,7,8,9,3,11,2,-1,-1,-1,-1,-1,-1,-1,9,5,7,9,7,2,9,2,0,2,7,11,-1,-1,-1,-1,2,3,11,0,1,8,1,7,8,1,5,7,-1,-1,-1,-1,11,2,1,11,1,7,7,1,5,-1,-1,-1,-1,-1,-1,-1,9,5,8,8,5,7,10,1,3,10,3,11,-1,-1,-1,-1,5,7,0,5,0,9,7,11,0,1,0,10,11,10,0,-1,11,10,0,11,0,3,10,5,0,8,0,7,5,7,0,-1,11,10,5,7,11,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,0,1,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,1,9,8,5,10,6,-1,-1,-1,-1,-1,-1,-1,1,6,5,2,6,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,6,5,1,2,6,3,0,8,-1,-1,-1,-1,-1,-1,-1,9,6,5,9,0,6,0,2,6,-1,-1,-1,-1,-1,-1,-1,5,9,8,5,8,2,5,2,6,3,2,8,-1,-1,-1,-1,2,3,11,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,0,8,11,2,0,10,6,5,-1,-1,-1,-1,-1,-1,-1,0,1,9,2,3,11,5,10,6,-1,-1,-1,-1,-1,-1,-1,5,10,6,1,9,2,9,11,2,9,8,11,-1,-1,-1,-1,6,3,11,6,5,3,5,1,3,-1,-1,-1,-1,-1,-1,-1,0,8,11,0,11,5,0,5,1,5,11,6,-1,-1,-1,-1,3,11,6,0,3,6,0,6,5,0,5,9,-1,-1,-1,-1,6,5,9,6,9,11,11,9,8,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,4,7,3,6,5,10,-1,-1,-1,-1,-1,-1,-1,1,9,0,5,10,6,8,4,7,-1,-1,-1,-1,-1,-1,-1,10,6,5,1,9,7,1,7,3,7,9,4,-1,-1,-1,-1,6,1,2,6,5,1,4,7,8,-1,-1,-1,-1,-1,-1,-1,1,2,5,5,2,6,3,0,4,3,4,7,-1,-1,-1,-1,8,4,7,9,0,5,0,6,5,0,2,6,-1,-1,-1,-1,7,3,9,7,9,4,3,2,9,5,9,6,2,6,9,-1,3,11,2,7,8,4,10,6,5,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,2,4,2,0,2,7,11,-1,-1,-1,-1,0,1,9,4,7,8,2,3,11,5,10,6,-1,-1,-1,-1,9,2,1,9,11,2,9,4,11,7,11,4,5,10,6,-1,8,4,7,3,11,5,3,5,1,5,11,6,-1,-1,-1,-1,5,1,11,5,11,6,1,0,11,7,11,4,0,4,11,-1,0,5,9,0,6,5,0,3,6,11,6,3,8,4,7,-1,6,5,9,6,9,11,4,7,9,7,11,9,-1,-1,-1,-1,10,4,9,6,4,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,10,6,4,9,10,0,8,3,-1,-1,-1,-1,-1,-1,-1,10,0,1,10,6,0,6,4,0,-1,-1,-1,-1,-1,-1,-1,8,3,1,8,1,6,8,6,4,6,1,10,-1,-1,-1,-1,1,4,9,1,2,4,2,6,4,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,9,2,4,9,2,6,4,-1,-1,-1,-1,0,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,8,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,10,4,9,10,6,4,11,2,3,-1,-1,-1,-1,-1,-1,-1,0,8,2,2,8,11,4,9,10,4,10,6,-1,-1,-1,-1,3,11,2,0,1,6,0,6,4,6,1,10,-1,-1,-1,-1,6,4,1,6,1,10,4,8,1,2,1,11,8,11,1,-1,9,6,4,9,3,6,9,1,3,11,6,3,-1,-1,-1,-1,8,11,1,8,1,0,11,6,1,9,1,4,6,4,1,-1,3,11,6,3,6,0,0,6,4,-1,-1,-1,-1,-1,-1,-1,6,4,8,11,6,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,10,6,7,8,10,8,9,10,-1,-1,-1,-1,-1,-1,-1,0,7,3,0,10,7,0,9,10,6,7,10,-1,-1,-1,-1,10,6,7,1,10,7,1,7,8,1,8,0,-1,-1,-1,-1,10,6,7,10,7,1,1,7,3,-1,-1,-1,-1,-1,-1,-1,1,2,6,1,6,8,1,8,9,8,6,7,-1,-1,-1,-1,2,6,9,2,9,1,6,7,9,0,9,3,7,3,9,-1,7,8,0,7,0,6,6,0,2,-1,-1,-1,-1,-1,-1,-1,7,3,2,6,7,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,11,10,6,8,10,8,9,8,6,7,-1,-1,-1,-1,2,0,7,2,7,11,0,9,7,6,7,10,9,10,7,-1,1,8,0,1,7,8,1,10,7,6,7,10,2,3,11,-1,11,2,1,11,1,7,10,6,1,6,7,1,-1,-1,-1,-1,8,9,6,8,6,7,9,1,6,11,6,3,1,3,6,-1,0,9,1,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,0,7,0,6,3,11,0,11,6,0,-1,-1,-1,-1,7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,1,9,8,3,1,11,7,6,-1,-1,-1,-1,-1,-1,-1,10,1,2,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,8,6,11,7,-1,-1,-1,-1,-1,-1,-1,2,9,0,2,10,9,6,11,7,-1,-1,-1,-1,-1,-1,-1,6,11,7,2,10,3,10,8,3,10,9,8,-1,-1,-1,-1,7,2,3,6,2,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,0,8,7,6,0,6,2,0,-1,-1,-1,-1,-1,-1,-1,2,7,6,2,3,7,0,1,9,-1,-1,-1,-1,-1,-1,-1,1,6,2,1,8,6,1,9,8,8,7,6,-1,-1,-1,-1,10,7,6,10,1,7,1,3,7,-1,-1,-1,-1,-1,-1,-1,10,7,6,1,7,10,1,8,7,1,0,8,-1,-1,-1,-1,0,3,7,0,7,10,0,10,9,6,10,7,-1,-1,-1,-1,7,6,10,7,10,8,8,10,9,-1,-1,-1,-1,-1,-1,-1,6,8,4,11,8,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,6,11,3,0,6,0,4,6,-1,-1,-1,-1,-1,-1,-1,8,6,11,8,4,6,9,0,1,-1,-1,-1,-1,-1,-1,-1,9,4,6,9,6,3,9,3,1,11,3,6,-1,-1,-1,-1,6,8,4,6,11,8,2,10,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,11,0,6,11,0,4,6,-1,-1,-1,-1,4,11,8,4,6,11,0,2,9,2,10,9,-1,-1,-1,-1,10,9,3,10,3,2,9,4,3,11,3,6,4,6,3,-1,8,2,3,8,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,0,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,4,2,4,6,4,3,8,-1,-1,-1,-1,1,9,4,1,4,2,2,4,6,-1,-1,-1,-1,-1,-1,-1,8,1,3,8,6,1,8,4,6,6,10,1,-1,-1,-1,-1,10,1,0,10,0,6,6,0,4,-1,-1,-1,-1,-1,-1,-1,4,6,3,4,3,8,6,10,3,0,3,9,10,9,3,-1,10,9,4,6,10,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,5,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,5,11,7,6,-1,-1,-1,-1,-1,-1,-1,5,0,1,5,4,0,7,6,11,-1,-1,-1,-1,-1,-1,-1,11,7,6,8,3,4,3,5,4,3,1,5,-1,-1,-1,-1,9,5,4,10,1,2,7,6,11,-1,-1,-1,-1,-1,-1,-1,6,11,7,1,2,10,0,8,3,4,9,5,-1,-1,-1,-1,7,6,11,5,4,10,4,2,10,4,0,2,-1,-1,-1,-1,3,4,8,3,5,4,3,2,5,10,5,2,11,7,6,-1,7,2,3,7,6,2,5,4,9,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,6,0,6,2,6,8,7,-1,-1,-1,-1,3,6,2,3,7,6,1,5,0,5,4,0,-1,-1,-1,-1,6,2,8,6,8,7,2,1,8,4,8,5,1,5,8,-1,9,5,4,10,1,6,1,7,6,1,3,7,-1,-1,-1,-1,1,6,10,1,7,6,1,0,7,8,7,0,9,5,4,-1,4,0,10,4,10,5,0,3,10,6,10,7,3,7,10,-1,7,6,10,7,10,8,5,4,10,4,8,10,-1,-1,-1,-1,6,9,5,6,11,9,11,8,9,-1,-1,-1,-1,-1,-1,-1,3,6,11,0,6,3,0,5,6,0,9,5,-1,-1,-1,-1,0,11,8,0,5,11,0,1,5,5,6,11,-1,-1,-1,-1,6,11,3,6,3,5,5,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,11,9,11,8,11,5,6,-1,-1,-1,-1,0,11,3,0,6,11,0,9,6,5,6,9,1,2,10,-1,11,8,5,11,5,6,8,0,5,10,5,2,0,2,5,-1,6,11,3,6,3,5,2,10,3,10,5,3,-1,-1,-1,-1,5,8,9,5,2,8,5,6,2,3,8,2,-1,-1,-1,-1,9,5,6,9,6,0,0,6,2,-1,-1,-1,-1,-1,-1,-1,1,5,8,1,8,0,5,6,8,3,8,2,6,2,8,-1,1,5,6,2,1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,6,1,6,10,3,8,6,5,6,9,8,9,6,-1,10,1,0,10,0,6,9,5,0,5,6,0,-1,-1,-1,-1,0,3,8,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,7,5,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,11,7,5,8,3,0,-1,-1,-1,-1,-1,-1,-1,5,11,7,5,10,11,1,9,0,-1,-1,-1,-1,-1,-1,-1,10,7,5,10,11,7,9,8,1,8,3,1,-1,-1,-1,-1,11,1,2,11,7,1,7,5,1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,7,1,7,5,7,2,11,-1,-1,-1,-1,9,7,5,9,2,7,9,0,2,2,11,7,-1,-1,-1,-1,7,5,2,7,2,11,5,9,2,3,2,8,9,8,2,-1,2,5,10,2,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,8,2,0,8,5,2,8,7,5,10,2,5,-1,-1,-1,-1,9,0,1,5,10,3,5,3,7,3,10,2,-1,-1,-1,-1,9,8,2,9,2,1,8,7,2,10,2,5,7,5,2,-1,1,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,7,0,7,1,1,7,5,-1,-1,-1,-1,-1,-1,-1,9,0,3,9,3,5,5,3,7,-1,-1,-1,-1,-1,-1,-1,9,8,7,5,9,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,8,4,5,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,5,0,4,5,11,0,5,10,11,11,3,0,-1,-1,-1,-1,0,1,9,8,4,10,8,10,11,10,4,5,-1,-1,-1,-1,10,11,4,10,4,5,11,3,4,9,4,1,3,1,4,-1,2,5,1,2,8,5,2,11,8,4,5,8,-1,-1,-1,-1,0,4,11,0,11,3,4,5,11,2,11,1,5,1,11,-1,0,2,5,0,5,9,2,11,5,4,5,8,11,8,5,-1,9,4,5,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,5,10,3,5,2,3,4,5,3,8,4,-1,-1,-1,-1,5,10,2,5,2,4,4,2,0,-1,-1,-1,-1,-1,-1,-1,3,10,2,3,5,10,3,8,5,4,5,8,0,1,9,-1,5,10,2,5,2,4,1,9,2,9,4,2,-1,-1,-1,-1,8,4,5,8,5,3,3,5,1,-1,-1,-1,-1,-1,-1,-1,0,4,5,1,0,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,4,5,8,5,3,9,0,5,0,3,5,-1,-1,-1,-1,9,4,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,11,7,4,9,11,9,10,11,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,7,9,11,7,9,10,11,-1,-1,-1,-1,1,10,11,1,11,4,1,4,0,7,4,11,-1,-1,-1,-1,3,1,4,3,4,8,1,10,4,7,4,11,10,11,4,-1,4,11,7,9,11,4,9,2,11,9,1,2,-1,-1,-1,-1,9,7,4,9,11,7,9,1,11,2,11,1,0,8,3,-1,11,7,4,11,4,2,2,4,0,-1,-1,-1,-1,-1,-1,-1,11,7,4,11,4,2,8,3,4,3,2,4,-1,-1,-1,-1,2,9,10,2,7,9,2,3,7,7,4,9,-1,-1,-1,-1,9,10,7,9,7,4,10,2,7,8,7,0,2,0,7,-1,3,7,10,3,10,2,7,4,10,1,10,0,4,0,10,-1,1,10,2,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,7,1,3,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,0,8,1,8,7,1,-1,-1,-1,-1,4,0,3,7,4,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,8,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,11,9,10,-1,-1,-1,-1,-1,-1,-1,0,1,10,0,10,8,8,10,11,-1,-1,-1,-1,-1,-1,-1,3,1,10,11,3,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,11,1,11,9,9,11,8,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,1,2,9,2,11,9,-1,-1,-1,-1,0,2,11,8,0,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,2,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,10,8,9,-1,-1,-1,-1,-1,-1,-1,9,10,2,0,9,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,0,1,8,1,10,8,-1,-1,-1,-1,1,10,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,8,9,1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]),C0=new p.a;class N0 extends aV{static type(){return\\\\\\\"metaball\\\\\\\"}cook(t,e){const n=t[0],i=new M0(e.resolution,e.enableUVs,e.enableColors);i.isolation=e.isolation;const s=n.points();for(let t of s){t.getPosition(C0),C0.multiplyScalar(.5).addScalar(.5);let n=e.metaStrength;if(e.useMetaStrengthAttrib){let e=t.attribValue(\\\\\\\"metaStrength\\\\\\\");m.isNumber(e)&&(n*=e)}let s=e.metaSubstract;if(e.useMetaSubstractAttrib){let e=t.attribValue(\\\\\\\"metaSubstract\\\\\\\");m.isNumber(e)&&(s*=e)}i.addBall(C0.x,C0.y,C0.z,n,s,void 0)}return i.createPolygons(),this.createCoreGroupFromGeometry(i)}}N0.DEFAULT_PARAMS={resolution:40,isolation:30,useMetaStrengthAttrib:!1,metaStrength:1,useMetaSubstractAttrib:!1,metaSubstract:1,enableUVs:!1,enableColors:!1},N0.INPUT_CLONED_STATE=Qi.NEVER;const L0=N0.DEFAULT_PARAMS;const O0=new class extends ua{constructor(){super(...arguments),this.resolution=ha.FLOAT(L0.resolution,{range:[0,100],rangeLocked:[!0,!1]}),this.isolation=ha.FLOAT(L0.isolation,{range:[0,100],rangeLocked:[!0,!1]}),this.useMetaStrengthAttrib=ha.BOOLEAN(L0.useMetaStrengthAttrib),this.metaStrength=ha.FLOAT(L0.metaStrength,{range:[0,10],rangeLocked:[!0,!1]}),this.useMetaSubstractAttrib=ha.BOOLEAN(L0.useMetaSubstractAttrib),this.metaSubstract=ha.FLOAT(L0.metaSubstract,{range:[0,10],rangeLocked:[!0,!1]}),this.enableUVs=ha.BOOLEAN(L0.enableUVs),this.enableColors=ha.BOOLEAN(L0.enableColors)}};class P0 extends uV{constructor(){super(...arguments),this.paramsConfig=O0}static type(){return\\\\\\\"metaball\\\\\\\"}static displayedInputNames(){return[\\\\\\\"points to create metaballs from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(N0.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new N0(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class R0{constructor(t=Math){this.grad3=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],this.grad4=[[0,1,1,1],[0,1,1,-1],[0,1,-1,1],[0,1,-1,-1],[0,-1,1,1],[0,-1,1,-1],[0,-1,-1,1],[0,-1,-1,-1],[1,0,1,1],[1,0,1,-1],[1,0,-1,1],[1,0,-1,-1],[-1,0,1,1],[-1,0,1,-1],[-1,0,-1,1],[-1,0,-1,-1],[1,1,0,1],[1,1,0,-1],[1,-1,0,1],[1,-1,0,-1],[-1,1,0,1],[-1,1,0,-1],[-1,-1,0,1],[-1,-1,0,-1],[1,1,1,0],[1,1,-1,0],[1,-1,1,0],[1,-1,-1,0],[-1,1,1,0],[-1,1,-1,0],[-1,-1,1,0],[-1,-1,-1,0]],this.p=[];for(let e=0;e<256;e++)this.p[e]=Math.floor(256*t.random());this.perm=[];for(let t=0;t<512;t++)this.perm[t]=this.p[255&t];this.simplex=[[0,1,2,3],[0,1,3,2],[0,0,0,0],[0,2,3,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,3,0],[0,2,1,3],[0,0,0,0],[0,3,1,2],[0,3,2,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,3,2,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,0,3],[0,0,0,0],[1,3,0,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,3,0,1],[2,3,1,0],[1,0,2,3],[1,0,3,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,3,1],[0,0,0,0],[2,1,3,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,1,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,0,1,2],[3,0,2,1],[0,0,0,0],[3,1,2,0],[2,1,0,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,1,0,2],[0,0,0,0],[3,2,0,1],[3,2,1,0]]}dot(t,e,n){return t[0]*e+t[1]*n}dot3(t,e,n,i){return t[0]*e+t[1]*n+t[2]*i}dot4(t,e,n,i,s){return t[0]*e+t[1]*n+t[2]*i+t[3]*s}noise(t,e){let n,i,s;const r=(t+e)*(.5*(Math.sqrt(3)-1)),o=Math.floor(t+r),a=Math.floor(e+r),l=(3-Math.sqrt(3))/6,c=(o+a)*l,h=t-(o-c),u=e-(a-c);let d,p;h>u?(d=1,p=0):(d=0,p=1);const _=h-d+l,m=u-p+l,f=h-1+2*l,g=u-1+2*l,v=255&o,y=255&a,x=this.perm[v+this.perm[y]]%12,b=this.perm[v+d+this.perm[y+p]]%12,w=this.perm[v+1+this.perm[y+1]]%12;let T=.5-h*h-u*u;T<0?n=0:(T*=T,n=T*T*this.dot(this.grad3[x],h,u));let A=.5-_*_-m*m;A<0?i=0:(A*=A,i=A*A*this.dot(this.grad3[b],_,m));let M=.5-f*f-g*g;return M<0?s=0:(M*=M,s=M*M*this.dot(this.grad3[w],f,g)),70*(n+i+s)}noise3d(t,e,n){let i,s,r,o;const a=(t+e+n)*(1/3),l=Math.floor(t+a),c=Math.floor(e+a),h=Math.floor(n+a),u=1/6,d=(l+c+h)*u,p=t-(l-d),_=e-(c-d),m=n-(h-d);let f,g,v,y,x,b;p>=_?_>=m?(f=1,g=0,v=0,y=1,x=1,b=0):p>=m?(f=1,g=0,v=0,y=1,x=0,b=1):(f=0,g=0,v=1,y=1,x=0,b=1):_<m?(f=0,g=0,v=1,y=0,x=1,b=1):p<m?(f=0,g=1,v=0,y=0,x=1,b=1):(f=0,g=1,v=0,y=1,x=1,b=0);const w=p-f+u,T=_-g+u,A=m-v+u,M=p-y+2*u,E=_-x+2*u,S=m-b+2*u,C=p-1+.5,N=_-1+.5,L=m-1+.5,O=255&l,P=255&c,R=255&h,I=this.perm[O+this.perm[P+this.perm[R]]]%12,F=this.perm[O+f+this.perm[P+g+this.perm[R+v]]]%12,D=this.perm[O+y+this.perm[P+x+this.perm[R+b]]]%12,B=this.perm[O+1+this.perm[P+1+this.perm[R+1]]]%12;let z=.6-p*p-_*_-m*m;z<0?i=0:(z*=z,i=z*z*this.dot3(this.grad3[I],p,_,m));let k=.6-w*w-T*T-A*A;k<0?s=0:(k*=k,s=k*k*this.dot3(this.grad3[F],w,T,A));let U=.6-M*M-E*E-S*S;U<0?r=0:(U*=U,r=U*U*this.dot3(this.grad3[D],M,E,S));let G=.6-C*C-N*N-L*L;return G<0?o=0:(G*=G,o=G*G*this.dot3(this.grad3[B],C,N,L)),32*(i+s+r+o)}noise4d(t,e,n,i){const s=this.grad4,r=this.simplex,o=this.perm,a=(Math.sqrt(5)-1)/4,l=(5-Math.sqrt(5))/20;let c,h,u,d,p;const _=(t+e+n+i)*a,m=Math.floor(t+_),f=Math.floor(e+_),g=Math.floor(n+_),v=Math.floor(i+_),y=(m+f+g+v)*l,x=t-(m-y),b=e-(f-y),w=n-(g-y),T=i-(v-y),A=(x>b?32:0)+(x>w?16:0)+(b>w?8:0)+(x>T?4:0)+(b>T?2:0)+(w>T?1:0),M=r[A][0]>=3?1:0,E=r[A][1]>=3?1:0,S=r[A][2]>=3?1:0,C=r[A][3]>=3?1:0,N=r[A][0]>=2?1:0,L=r[A][1]>=2?1:0,O=r[A][2]>=2?1:0,P=r[A][3]>=2?1:0,R=r[A][0]>=1?1:0,I=r[A][1]>=1?1:0,F=r[A][2]>=1?1:0,D=r[A][3]>=1?1:0,B=x-M+l,z=b-E+l,k=w-S+l,U=T-C+l,G=x-N+2*l,V=b-L+2*l,H=w-O+2*l,j=T-P+2*l,W=x-R+3*l,q=b-I+3*l,X=w-F+3*l,Y=T-D+3*l,$=x-1+4*l,J=b-1+4*l,Z=w-1+4*l,K=T-1+4*l,Q=255&m,tt=255&f,et=255&g,nt=255&v,it=o[Q+o[tt+o[et+o[nt]]]]%32,st=o[Q+M+o[tt+E+o[et+S+o[nt+C]]]]%32,rt=o[Q+N+o[tt+L+o[et+O+o[nt+P]]]]%32,ot=o[Q+R+o[tt+I+o[et+F+o[nt+D]]]]%32,at=o[Q+1+o[tt+1+o[et+1+o[nt+1]]]]%32;let lt=.6-x*x-b*b-w*w-T*T;lt<0?c=0:(lt*=lt,c=lt*lt*this.dot4(s[it],x,b,w,T));let ct=.6-B*B-z*z-k*k-U*U;ct<0?h=0:(ct*=ct,h=ct*ct*this.dot4(s[st],B,z,k,U));let ht=.6-G*G-V*V-H*H-j*j;ht<0?u=0:(ht*=ht,u=ht*ht*this.dot4(s[rt],G,V,H,j));let ut=.6-W*W-q*q-X*X-Y*Y;ut<0?d=0:(ut*=ut,d=ut*ut*this.dot4(s[ot],W,q,X,Y));let dt=.6-$*$-J*J-Z*Z-K*K;return dt<0?p=0:(dt*=dt,p=dt*dt*this.dot4(s[at],$,J,Z,K)),27*(c+h+u+d+p)}}var I0;!function(t){t.ADD=\\\\\\\"add\\\\\\\",t.SET=\\\\\\\"set\\\\\\\",t.MULT=\\\\\\\"mult\\\\\\\",t.SUBSTRACT=\\\\\\\"substract\\\\\\\",t.DIVIDE=\\\\\\\"divide\\\\\\\"}(I0||(I0={}));const F0=[I0.ADD,I0.SET,I0.MULT,I0.SUBSTRACT,I0.DIVIDE];const D0=new class extends ua{constructor(){super(...arguments),this.amplitude=ha.FLOAT(1),this.tamplitudeAttrib=ha.BOOLEAN(0),this.amplitudeAttrib=ha.STRING(\\\\\\\"amp\\\\\\\",{visibleIf:{tamplitudeAttrib:!0}}),this.freq=ha.VECTOR3([1,1,1]),this.offset=ha.VECTOR3([0,0,0]),this.octaves=ha.INTEGER(3,{range:[1,8],rangeLocked:[!0,!1]}),this.ampAttenuation=ha.FLOAT(.5,{range:[0,1]}),this.freqIncrease=ha.FLOAT(2,{range:[0,10]}),this.seed=ha.INTEGER(0,{range:[0,100],separatorAfter:!0}),this.useNormals=ha.BOOLEAN(0),this.attribName=ha.STRING(\\\\\\\"position\\\\\\\"),this.useRestAttributes=ha.BOOLEAN(0),this.restP=ha.STRING(\\\\\\\"restP\\\\\\\",{visibleIf:{useRestAttributes:!0}}),this.restN=ha.STRING(\\\\\\\"restN\\\\\\\",{visibleIf:{useRestAttributes:!0}}),this.operation=ha.INTEGER(F0.indexOf(I0.ADD),{menu:{entries:F0.map((t=>({name:t,value:F0.indexOf(t)})))}}),this.computeNormals=ha.BOOLEAN(1)}},B0=new p.a,z0=new p.a;class k0 extends uV{constructor(){super(...arguments),this.paramsConfig=D0,this._simplexBySeed=new Map,this._restPos=new p.a,this._restValue2=new d.a,this._restValue4=new _.a,this._noiseValueV=new p.a,this._currentAttribValueF=0,this._currentAttribValueV2=new d.a,this._currentAttribValueV3=new p.a,this._currentAttribValueV4=new _.a}static type(){return\\\\\\\"noise\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to add noise to\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.FROM_NODE])}setOperation(t){this.p.operation.set(F0.indexOf(t))}async cook(t){const e=t[0],n=e.points(),i=this.pv.attribName;if(!e.hasAttrib(i))return this.states.error.set(`attribute ${i} not found`),void this.cookController.endCook();if(e.attribType(i)!=zs.NUMERIC)return this.states.error.set(`attribute ${i} is not a numeric attribute`),void this.cookController.endCook();const s=e.attribSize(this.pv.attribName),r=n[0];if(!r)return void this.setCoreGroup(e);const o=r.attribValue(i);if(m.isString(o))return void this.states.error.set(\\\\\\\"cannot add noise to a string attribute\\\\\\\");const a={octaves:this.pv.octaves,ampAttenuation:this.pv.ampAttenuation,freqIncrease:this.pv.freqIncrease};try{switch(s){case 1:this._cookForFloat(n,a);break;case 2:this._cookForV2(n,a);break;case 3:this._cookForV3(n,a);break;case 4:this._cookForV4(n,a)}}catch(t){console.error(\\\\\\\"sop/noise error\\\\\\\",t),this.states.error.set(`cook failed for (${this.path()}). make sure the required attributes are present`)}if(!this.io.inputs.cloneRequired(0))for(let t of e.geometries())t.getAttribute(i).needsUpdate=!0;this.pv.computeNormals&&e.computeVertexNormals(),this.setCoreGroup(e)}_cookForFloat(t,e){const n=this._getSimplex(),i=this.pv.useRestAttributes,s=this.pv.useNormals,r=this.pv.tamplitudeAttrib,o=this.pv.amplitude,a=F0[this.pv.operation],l=this.pv.attribName;for(let c of t){i?(c.attribValueVector3(this.pv.restP,B0),s&&c.attribValueVector3(this.pv.restN,z0),this._currentAttribValueF=B0.x):(c.getPosition(B0),s&&c.attribValueVector3(Ws.NORMAL,z0),this._currentAttribValueF=c.attribValueNumber(l));const t=r?this._amplitudeFromAttrib(c,o):o,h=this._noiseValue(s,n,t,e,B0,z0).x,u=k0._newAttribValueFromFloat(a,this._currentAttribValueF,h);c.setAttribValueFromNumber(l,u)}}_cookForV2(t,e){const n=this._getSimplex(),i=this.pv.useRestAttributes,s=this.pv.useNormals,r=this.pv.tamplitudeAttrib,o=this.pv.amplitude,a=F0[this.pv.operation],l=this.pv.attribName;for(let c of t){i?(c.attribValueVector3(this.pv.restP,B0),s&&c.attribValueVector3(this.pv.restN,z0),this._currentAttribValueV2.set(B0.x,B0.y)):(c.getPosition(B0),s&&c.attribValueVector3(Ws.NORMAL,z0),c.attribValueVector2(l,this._currentAttribValueV2));const t=r?this._amplitudeFromAttrib(c,o):o,h=this._noiseValue(s,n,t,e,B0,z0);this._restValue2.set(h.x,h.y);const u=this._restValue2,d=k0._newAttribValueFromVector2(a,this._currentAttribValueV2,u);c.setAttribValueFromVector2(l,d)}}_cookForV3(t,e){const n=this._getSimplex(),i=this.pv.useRestAttributes,s=this.pv.useNormals,r=this.pv.tamplitudeAttrib,o=this.pv.amplitude,a=F0[this.pv.operation],l=this.pv.attribName;for(let c of t){i?(c.attribValueVector3(this.pv.restP,B0),s&&c.attribValueVector3(this.pv.restN,z0),this._currentAttribValueV3.copy(B0)):(c.getPosition(B0),s&&c.attribValueVector3(Ws.NORMAL,z0),c.attribValueVector3(l,this._currentAttribValueV3));const t=r?this._amplitudeFromAttrib(c,o):o,h=this._noiseValue(s,n,t,e,B0,z0),u=k0._newAttribValueFromVector3(a,this._currentAttribValueV3,h);c.setAttribValueFromVector3(l,u)}}_cookForV4(t,e){const n=this._getSimplex(),i=this.pv.useRestAttributes,s=this.pv.useNormals,r=this.pv.tamplitudeAttrib,o=this.pv.amplitude,a=F0[this.pv.operation],l=this.pv.attribName;for(let c of t){i?(c.attribValueVector3(this.pv.restP,B0),s&&c.attribValueVector3(this.pv.restN,z0),this._currentAttribValueV4.set(B0.x,B0.y,B0.z,0)):(c.getPosition(B0),s&&c.attribValueVector3(Ws.NORMAL,z0),c.attribValueVector4(l,this._currentAttribValueV4));const t=r?this._amplitudeFromAttrib(c,o):o,h=this._noiseValue(s,n,t,e,B0,z0);this._restValue4.set(h.x,h.y,h.z,0);const u=this._restValue4,d=k0._newAttribValueFromVector4(a,this._currentAttribValueV4,u);c.setAttribValueFromVector4(l,d)}}_noiseValue(t,e,n,i,s,r){if(this._restPos.copy(s).add(this.pv.offset).multiply(this.pv.freq),t&&r){const t=n*this._fbm(e,i,this._restPos.x,this._restPos.y,this._restPos.z);return this._noiseValueV.copy(r),this._noiseValueV.multiplyScalar(t)}return this._noiseValueV.set(n*this._fbm(e,i,this._restPos.x+545,this._restPos.y+125454,this._restPos.z+2142),n*this._fbm(e,i,this._restPos.x-425,this._restPos.y-25746,this._restPos.z+95242),n*this._fbm(e,i,this._restPos.x+765132,this._restPos.y+21,this._restPos.z-9245)),this._noiseValueV}static _newAttribValueFromFloat(t,e,n){switch(t){case I0.ADD:return e+n;case I0.SET:return n;case I0.MULT:return e*n;case I0.DIVIDE:return e/n;case I0.SUBSTRACT:return e-n}os.unreachable(t)}static _newAttribValueFromVector2(t,e,n){switch(t){case I0.ADD:return e.add(n);case I0.SET:return n;case I0.MULT:return e.multiply(n);case I0.DIVIDE:return e.divide(n);case I0.SUBSTRACT:return e.sub(n)}os.unreachable(t)}static _newAttribValueFromVector3(t,e,n){switch(t){case I0.ADD:return e.add(n);case I0.SET:return n;case I0.MULT:return e.multiply(n);case I0.DIVIDE:return e.divide(n);case I0.SUBSTRACT:return e.sub(n)}os.unreachable(t)}static _newAttribValueFromVector4(t,e,n){switch(t){case I0.ADD:return e.add(n);case I0.SET:return n;case I0.MULT:return e.multiplyScalar(n.x);case I0.DIVIDE:return e.divideScalar(n.x);case I0.SUBSTRACT:return e.sub(n)}os.unreachable(t)}_amplitudeFromAttrib(t,e){const n=t.attribValue(this.pv.amplitudeAttrib);return m.isNumber(n)?n*e:n instanceof d.a||n instanceof p.a||n instanceof _.a?n.x*e:1}_fbm(t,e,n,i,s){let r=0,o=1;for(let a=0;a<e.octaves;a++)r+=o*t.noise3d(n,i,s),n*=e.freqIncrease,i*=e.freqIncrease,s*=e.freqIncrease,o*=e.ampAttenuation;return r}_getSimplex(){const t=this._simplexBySeed.get(this.pv.seed);if(t)return t;{const t=this._createSimplex();return this._simplexBySeed.set(this.pv.seed,t),t}}_createSimplex(){const t=this.pv.seed,e=new R0({random:function(){return or.randFloat(t)}});return this._simplexBySeed.delete(t),e}}const U0=new class extends ua{constructor(){super(...arguments),this.edit=ha.BOOLEAN(0),this.updateX=ha.BOOLEAN(0,{visibleIf:{edit:1}}),this.x=ha.FLOAT(\\\\\\\"@N.x\\\\\\\",{visibleIf:{updateX:1,edit:1},expression:{forEntities:!0}}),this.updateY=ha.BOOLEAN(0,{visibleIf:{edit:1}}),this.y=ha.FLOAT(\\\\\\\"@N.y\\\\\\\",{visibleIf:{updateY:1,edit:1},expression:{forEntities:!0}}),this.updateZ=ha.BOOLEAN(0,{visibleIf:{edit:1}}),this.z=ha.FLOAT(\\\\\\\"@N.z\\\\\\\",{visibleIf:{updateZ:1,edit:1},expression:{forEntities:!0}}),this.recompute=ha.BOOLEAN(1,{visibleIf:{edit:0}}),this.invert=ha.BOOLEAN(0)}};class G0 extends uV{constructor(){super(...arguments),this.paramsConfig=U0}static type(){return\\\\\\\"normals\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to update normals of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0];this.pv.edit?await this._eval_expressions_for_core_group(e):this.pv.recompute&&e.computeVertexNormals(),this.pv.invert&&this._invert_normals(e),this.setCoreGroup(e)}async _eval_expressions_for_core_group(t){const e=t.coreObjects();for(let t=0;t<e.length;t++)await this._eval_expressions_for_core_object(e[t])}async _eval_expressions_for_core_object(t){const e=t.object().geometry,n=t.points();let i=e.getAttribute(Ws.NORMAL);if(!i){new fr(e).addNumericAttrib(Ws.NORMAL,3,0),i=e.getAttribute(Ws.NORMAL)}const s=i.array;if(this.pv.updateX)if(this.p.x.hasExpression()&&this.p.x.expressionController)await this.p.x.expressionController.computeExpressionForPoints(n,((t,e)=>{s[3*t.index()+0]=e}));else{let t;for(let e=0;e<n.length;e++)t=n[e],s[3*t.index()+0]=this.pv.x}if(this.pv.updateY)if(this.p.y.hasExpression()&&this.p.y.expressionController)await this.p.y.expressionController.computeExpressionForPoints(n,((t,e)=>{s[3*t.index()+1]=e}));else{let t;for(let e=0;e<n.length;e++)t=n[e],s[3*t.index()+1]=this.pv.y}if(this.pv.updateZ)if(this.p.z.hasExpression()&&this.p.z.expressionController)await this.p.z.expressionController.computeExpressionForPoints(n,((t,e)=>{s[3*t.index()+2]=e}));else{let t;for(let e=0;e<n.length;e++)t=n[e],s[3*t.index()+2]=this.pv.z}}_invert_normals(t){var e;for(let n of t.coreObjects()){const t=null===(e=n.coreGeometry())||void 0===e?void 0:e.geometry();if(t){const e=t.attributes[Ws.NORMAL];if(e){const t=e.array;for(let e=0;e<t.length;e++)t[e]*=-1}}}}}class V0 extends aV{static type(){return\\\\\\\"null\\\\\\\"}cook(t,e){const n=t[0];return n||this.createCoreGroupFromObjects([])}}V0.DEFAULT_PARAMS={},V0.INPUT_CLONED_STATE=Qi.FROM_NODE;const H0=new class extends ua{};class j0 extends uV{constructor(){super(...arguments),this.paramsConfig=H0}static type(){return\\\\\\\"null\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(V0.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new V0(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const W0=new class extends ua{constructor(){super(...arguments),this.geometry=ha.OPERATOR_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.SOP}})}};class q0 extends uV{constructor(){super(...arguments),this.paramsConfig=W0}static type(){return\\\\\\\"objectMerge\\\\\\\"}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.geometry],(()=>this.p.geometry.rawInput()))}))}))}async cook(t){const e=this.p.geometry.found_node();if(e)if(e.context()==ts.SOP){const t=await e.compute();this.import_input(e,t)}else this.states.error.set(\\\\\\\"found node is not a geometry\\\\\\\");else this.states.error.set(`node not found at path '${this.pv.geometry}'`)}import_input(t,e){let n;null!=(n=e.coreContentCloned())?this.setCoreGroup(n):this.states.error.set(\\\\\\\"invalid target\\\\\\\")}}class X0 extends aV{static type(){return\\\\\\\"objectProperties\\\\\\\"}cook(t,e){const n=t[0];for(let t of n.objects())e.applyToChildren?t.traverse((t=>{this._update_object(t,e)})):this._update_object(t,e);return n}_update_object(t,e){e.tname&&(t.name=e.name),e.trenderOrder&&(t.renderOrder=e.renderOrder),e.tfrustumCulled&&(t.frustumCulled=e.frustumCulled),e.tmatrixAutoUpdate&&(t.matrixAutoUpdate=e.matrixAutoUpdate),e.tvisible&&(t.visible=e.visible),e.tcastShadow&&(t.castShadow=e.castShadow),e.treceiveShadow&&(t.receiveShadow=e.receiveShadow)}}X0.DEFAULT_PARAMS={applyToChildren:!0,tname:!1,name:\\\\\\\"\\\\\\\",trenderOrder:!1,renderOrder:0,tfrustumCulled:!1,frustumCulled:!0,tmatrixAutoUpdate:!1,matrixAutoUpdate:!1,tvisible:!1,visible:!0,tcastShadow:!1,castShadow:!0,treceiveShadow:!1,receiveShadow:!0},X0.INPUT_CLONED_STATE=Qi.FROM_NODE;const Y0=X0.DEFAULT_PARAMS;const $0=new class extends ua{constructor(){super(...arguments),this.applyToChildren=ha.BOOLEAN(Y0.applyToChildren,{separatorAfter:!0}),this.tname=ha.BOOLEAN(Y0.tname),this.name=ha.STRING(Y0.name,{visibleIf:{tname:!0},separatorAfter:!0}),this.trenderOrder=ha.BOOLEAN(Y0.trenderOrder),this.renderOrder=ha.INTEGER(Y0.renderOrder,{visibleIf:{trenderOrder:!0},range:[0,10],rangeLocked:[!1,!1],separatorAfter:!0}),this.tfrustumCulled=ha.BOOLEAN(Y0.tfrustumCulled),this.frustumCulled=ha.BOOLEAN(Y0.frustumCulled,{visibleIf:{tfrustumCulled:!0},separatorAfter:!0}),this.tmatrixAutoUpdate=ha.BOOLEAN(Y0.tmatrixAutoUpdate),this.matrixAutoUpdate=ha.BOOLEAN(Y0.matrixAutoUpdate,{visibleIf:{tmatrixAutoUpdate:!0},separatorAfter:!0}),this.tvisible=ha.BOOLEAN(Y0.tvisible),this.visible=ha.BOOLEAN(Y0.visible,{visibleIf:{tvisible:!0},separatorAfter:!0}),this.tcastShadow=ha.BOOLEAN(Y0.tcastShadow),this.castShadow=ha.BOOLEAN(Y0.castShadow,{visibleIf:{tcastShadow:!0},separatorAfter:!0}),this.treceiveShadow=ha.BOOLEAN(Y0.treceiveShadow),this.receiveShadow=ha.BOOLEAN(Y0.receiveShadow,{visibleIf:{treceiveShadow:!0}})}};class J0 extends uV{constructor(){super(...arguments),this.paramsConfig=$0}static type(){return\\\\\\\"objectProperties\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to change properties of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(X0.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new X0(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const Z0=new class extends ua{};class K0 extends uV{constructor(){super(...arguments),this.paramsConfig=Z0,this._input_configs_by_operation_container=new WeakMap}static type(){return Bl}initializeNode(){this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}set_output_operation_container(t){this._output_operation_container=t}output_operation_container(){return this._output_operation_container}add_input_config(t,e){let n=this._input_configs_by_operation_container.get(t);n||(n=new Map,this._input_configs_by_operation_container.set(t,n)),n.set(e.operation_input_index,e.node_input_index)}add_operation_container_with_path_param_resolve_required(t){this._operation_containers_requiring_resolve||(this._operation_containers_requiring_resolve=[]),this._operation_containers_requiring_resolve.push(t)}resolve_operation_containers_path_params(){if(this._operation_containers_requiring_resolve)for(let t of this._operation_containers_requiring_resolve)t.resolve_path_params(this)}async cook(t){if(this._output_operation_container){this._output_operation_container.setDirty();const e=await this._output_operation_container.compute(t,this._input_configs_by_operation_container);e&&this.setCoreGroup(e)}}}class Q0 extends _f{constructor(t){super(),this._uv_name=t}set_texture_allocations_controller(t){this._texture_allocations_controller=t}handle_globals_node(t,e,n){if(!this._texture_allocations_controller)return;const i=t.io.outputs.namedOutputConnectionPointsByName(e),s=t.glVarName(e);if(this._texture_allocations_controller.variable(e)&&i){const r=i.type(),o=`${r} ${s} = ${this.read_attribute(t,r,e,n)}`;n.addBodyLines(t,[o])}else this.globals_geometry_handler=this.globals_geometry_handler||new Pf,this.globals_geometry_handler.handle_globals_node(t,e,n)}read_attribute(t,e,n,i){if(!this._texture_allocations_controller)return;const s=this._texture_allocations_controller.variable(n);if(!s)return Pf.read_attribute(t,e,n,i);{this.add_particles_sim_uv_attribute(t,i);const e=s.component(),n=s.allocation();if(n){const s=n.textureName(),r=new Nf(t,Uo.SAMPLER_2D,s);i.addDefinitions(t,[r]);return`texture2D( ${s}, ${this._uv_name} ).${e}`}}}add_particles_sim_uv_attribute(t,e){const n=new Sf(t,Uo.VEC2,Q0.UV_ATTRIB),i=new Lf(t,Uo.VEC2,Q0.UV_VARYING);e.addDefinitions(t,[n,i],Mf.VERTEX),e.addDefinitions(t,[i],Mf.FRAGMENT),e.addBodyLines(t,[`${Q0.UV_VARYING} = ${Q0.UV_ATTRIB}`],Mf.VERTEX)}}Q0.UV_ATTRIB=\\\\\\\"particles_sim_uv_attrib\\\\\\\",Q0.UV_VARYING=\\\\\\\"particles_sim_uv_varying\\\\\\\",Q0.PARTICLE_SIM_UV=\\\\\\\"particleUV\\\\\\\";class t1{constructor(t){this.node=t,this._particles_group_objects=[],this._all_shader_names=[],this._all_uniform_names=[],this.globals_handler=new Q0(Q0.UV_VARYING)}setShadersByName(t){this._shaders_by_name=t,this._all_shader_names=[],this._all_uniform_names=[],this._shaders_by_name.forEach(((t,e)=>{this._all_shader_names.push(e),this._all_uniform_names.push(`texture_${e}`)})),this.reset_render_material()}assign_render_material(){if(this._render_material){for(let t of this._particles_group_objects){const e=t;e.geometry&&(e.material=this._render_material,yr.applyCustomMaterials(e,this._render_material),e.matrixAutoUpdate=!1,e.updateMatrix())}this._render_material.needsUpdate=!0,this.update_render_material_uniforms()}}update_render_material_uniforms(){var t;if(!this._render_material)return;let e,n;for(let i=0;i<this._all_shader_names.length;i++){n=this._all_shader_names[i],e=this._all_uniform_names[i];const s=null===(t=this.node.gpuController.getCurrentRenderTarget(n))||void 0===t?void 0:t.texture;s&&(this._render_material.uniforms[e].value=s,yr.assign_custom_uniforms(this._render_material,e,s))}}reset_render_material(){this._render_material=void 0,this._particles_group_objects=[]}material(){return this._render_material}initialized(){return null!=this._render_material}init_core_group(t){for(let e of t.objectsWithGeo())this._particles_group_objects.push(e)}async init_render_material(){var t;const e=null===(t=this.node.assemblerController)||void 0===t?void 0:t.assembler;if(this._render_material)return;this.node.p.material.isDirty()&&await this.node.p.material.compute();const n=this.node.p.material.found_node();if(n){if(e){const t=e.textureAllocationsController().toJSON(this.node.scene()),i=n.assemblerController;i&&(this.globals_handler.set_texture_allocations_controller(e.textureAllocationsController()),i.set_assembler_globals_handler(this.globals_handler)),this._texture_allocations_json&&JSON.stringify(this._texture_allocations_json)==JSON.stringify(t)||(this._texture_allocations_json=b.cloneDeep(t),i&&i.set_compilation_required_and_dirty())}const t=await n.compute();this._render_material=t.material()}else this.node.states.error.set(\\\\\\\"render material not valid\\\\\\\");if(this._render_material){const t=this._render_material.uniforms;for(let e of this._all_uniform_names){const n={value:null};t[e]=n,this._render_material&&yr.init_custom_material_uniforms(this._render_material,e,n)}}this.assign_render_material()}}var e1,n1=function(t,e,n){this.variables=[],this.currentTextureIndex=0;var i=w.G,s=new vs;s.matrixAutoUpdate=!1;var r=new of.a;r.position.z=1,r.matrixAutoUpdate=!1,r.updateMatrix();var o={passThruTexture:{value:null}},a=h(\\\\\\\"uniform sampler2D passThruTexture;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec2 uv = gl_FragCoord.xy / resolution.xy;\\\\n\\\\n\\\\tgl_FragColor = texture2D( passThruTexture, uv );\\\\n\\\\n}\\\\n\\\\\\\",o),l=new B.a(new L(2,2),a);function c(n){n.defines.resolution=\\\\\\\"vec2( \\\\\\\"+t.toFixed(1)+\\\\\\\", \\\\\\\"+e.toFixed(1)+\\\\\\\" )\\\\\\\"}function h(t,e){var n=new F({uniforms:e=e||{},vertexShader:\\\\\\\"void main()\\\\t{\\\\n\\\\n\\\\tgl_Position = vec4( position, 1.0 );\\\\n\\\\n}\\\\n\\\\\\\",fragmentShader:t});return c(n),n}l.matrixAutoUpdate=!1,l.updateMatrix(),s.add(l),this.setDataType=function(t){return i=t,this},this.addVariable=function(t,e,n){var i={name:t,initialValueTexture:n,material:this.createShaderMaterial(e),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:w.ob,magFilter:w.ob};return this.variables.push(i),i},this.setVariableDependencies=function(t,e){t.dependencies=e},this.init=function(){if(!1===n.capabilities.isWebGL2&&!1===n.extensions.has(\\\\\\\"OES_texture_float\\\\\\\"))return\\\\\\\"No OES_texture_float support for float textures.\\\\\\\";if(0===n.capabilities.maxVertexTextures)return\\\\\\\"No support for vertex shader textures.\\\\\\\";for(var i=0;i<this.variables.length;i++){var s=this.variables[i];s.renderTargets[0]=this.createRenderTarget(t,e,s.wrapS,s.wrapT,s.minFilter,s.magFilter),s.renderTargets[1]=this.createRenderTarget(t,e,s.wrapS,s.wrapT,s.minFilter,s.magFilter),this.renderTexture(s.initialValueTexture,s.renderTargets[0]),this.renderTexture(s.initialValueTexture,s.renderTargets[1]);var r=s.material.uniforms;if(null!==s.dependencies)for(var o=0;o<s.dependencies.length;o++){var a=s.dependencies[o];if(a.name!==s.name){for(var l=!1,c=0;c<this.variables.length;c++)if(a.name===this.variables[c].name){l=!0;break}if(!l)return\\\\\\\"Variable dependency not found. Variable=\\\\\\\"+s.name+\\\\\\\", dependency=\\\\\\\"+a.name}r[a.name]={value:null}}}return this.currentTextureIndex=0,null},this.compute=function(){for(var t=this.currentTextureIndex,e=0===this.currentTextureIndex?1:0,n=0,i=this.variables.length;n<i;n++){var s=this.variables[n];if(null!==s.dependencies)for(var r=s.material.uniforms,o=0,a=s.dependencies.length;o<a;o++){var l=s.dependencies[o];r[l.name].value=l.renderTargets[t].texture}this.doRenderTarget(s.material,s.renderTargets[e])}this.currentTextureIndex=e},this.getCurrentRenderTarget=function(t){return t.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(t){return t.renderTargets[0===this.currentTextureIndex?1:0]},this.addResolutionDefine=c,this.createShaderMaterial=h,this.createRenderTarget=function(n,s,r,o,a,l){return n=n||t,s=s||e,r=r||w.n,o=o||w.n,a=a||w.ob,l=l||w.ob,new K(n,s,{wrapS:r,wrapT:o,minFilter:a,magFilter:l,format:w.Ib,type:i,depthBuffer:!1})},this.createTexture=function(){var n=new Float32Array(t*e*4);return new vo.a(n,t,e,w.Ib,w.G)},this.renderTexture=function(t,e){o.passThruTexture.value=t,this.doRenderTarget(a,e),o.passThruTexture.value=null},this.doRenderTarget=function(t,e){var i=n.getRenderTarget();l.material=t,n.setRenderTarget(e),n.render(s,r),l.material=a,n.setRenderTarget(i)}};!function(t){t.FLOAT=\\\\\\\"float\\\\\\\",t.HALF_FLOAT=\\\\\\\"half\\\\\\\"}(e1||(e1={}));const i1=[e1.FLOAT,e1.HALF_FLOAT],s1={[e1.FLOAT]:w.G,[e1.HALF_FLOAT]:w.M};class r1{constructor(t){this.node=t,this._simulationRestartRequired=!1,this._points=[],this._variablesByName=new Map,this._allVariables=[],this._createdTexturesByName=new Map,this._deltaTime=0,this._usedTexturesSize=new d.a}dispose(){this._graph_node&&this._graph_node.dispose()}setPersistedTextureAllocationController(t){this._persistedTextureAllocationsController=t}setShadersByName(t){this._shadersByName=t,this.resetGpuCompute()}allVariables(){return this._allVariables}async init(t){this.initParticleGroupPoints(t),await this.create_gpu_compute()}getCurrentRenderTarget(t){var e;const n=this._variablesByName.get(t);if(n)return null===(e=this._gpuCompute)||void 0===e?void 0:e.getCurrentRenderTarget(n)}initParticleGroupPoints(t){this.resetGpuCompute(),t&&(this._particlesCoreGroup=t,this._points=this._getPoints()||[])}computeSimilationIfRequired(){const t=this.node.scene().frame(),e=this.node.pv.startFrame;t>=e&&(null==this._lastSimulatedFrame&&(this._lastSimulatedFrame=e-1),null==this._lastSimulatedTime&&(this._lastSimulatedTime=this.node.scene().time()),t>this._lastSimulatedFrame&&this._computeSimulation(t-this._lastSimulatedFrame))}_computeSimulation(t=1){if(!this._gpuCompute||null==this._lastSimulatedTime)return;this._updateSimulationMaterialUniforms();for(let e=0;e<t;e++)this._gpuCompute.compute();this.node.renderController.update_render_material_uniforms(),this._lastSimulatedFrame=this.node.scene().frame();const e=this.node.scene().time();this._deltaTime=e-this._lastSimulatedTime,this._deltaTime=Math.min(this._deltaTime,.1),this._lastSimulatedTime=e}_dataType(){const t=i1[this.node.pv.dataType];return s1[t]}_textureNameForShaderName(t){return`texture_${t}`}async create_gpu_compute(){var t,e;if(this.node.pv.autoTexturesSize){const t=or.nearestPower2(Math.sqrt(this._points.length));this._usedTexturesSize.x=Math.min(t,this.node.pv.maxTexturesSize.x),this._usedTexturesSize.y=Math.min(t,this.node.pv.maxTexturesSize.y)}else{if(!Object(On.i)(this.node.pv.texturesSize.x)||!Object(On.i)(this.node.pv.texturesSize.y))return void this.node.states.error.set(\\\\\\\"texture size must be a power of 2\\\\\\\");const t=this.node.pv.texturesSize.x*this.node.pv.texturesSize.y;if(this._points.length>t)return void this.node.states.error.set(`max particles is set to (${this.node.pv.texturesSize.x}x${this.node.pv.texturesSize.y}=) ${t}`);this._usedTexturesSize.copy(this.node.pv.texturesSize)}this._forceTimeDependent(),this._initParticlesUVs(),this.node.renderController.reset_render_material();const n=await li.renderersController.waitForRenderer();if(n?this._renderer=n:this.node.states.error.set(\\\\\\\"no renderer found\\\\\\\"),!this._renderer)return;const i=new n1(this._usedTexturesSize.x,this._usedTexturesSize.y,this._renderer);if(i.setDataType(this._dataType()),this._gpuCompute=i,this._gpuCompute){this._lastSimulatedFrame=void 0,this._variablesByName.forEach(((t,e)=>{t.renderTargets[0].dispose(),t.renderTargets[1].dispose(),this._variablesByName.delete(e)})),this._allVariables=[],null===(t=this._shadersByName)||void 0===t||t.forEach(((t,e)=>{if(this._gpuCompute){const n=this._gpuCompute.addVariable(this._textureNameForShaderName(e),t,this._createdTexturesByName.get(e));this._variablesByName.set(e,n),this._allVariables.push(n)}})),null===(e=this._variablesByName)||void 0===e||e.forEach(((t,e)=>{this._gpuCompute&&this._gpuCompute.setVariableDependencies(t,this._allVariables)})),this._createTextureRenderTargets(),this._fillTextures(),this._createSimulationMaterialUniforms();var s=this._gpuCompute.init();null!==s&&(console.error(s),this.node.states.error.set(s))}else this.node.states.error.set(\\\\\\\"failed to create the GPUComputationRenderer\\\\\\\")}_forceTimeDependent(){this._graph_node||(this._graph_node=new Mi(this.node.scene(),\\\\\\\"gpu_compute\\\\\\\"),this._graph_node.addGraphInput(this.node.scene().timeController.graphNode),this._graph_node.addPostDirtyHook(\\\\\\\"on_time_change\\\\\\\",this._onGraphNodeDirty.bind(this)))}_onGraphNodeDirty(){this.node.isOnStartFrame()?this.node.setDirty():this.computeSimilationIfRequired()}materials(){const t=[];return this._variablesByName.forEach(((e,n)=>{t.push(e.material)})),t}_createSimulationMaterialUniforms(){const t=this.node.assemblerController,e=null==t?void 0:t.assembler;if(!e&&!this._persistedTextureAllocationsController)return;const n=[];this._variablesByName.forEach(((t,e)=>{n.push(t.material)}));const i=this._readonlyAllocations();for(let t of n)t.uniforms[TR.TIME]={value:this.node.scene().time()},t.uniforms[TR.DELTA_TIME]={value:this.node.scene().time()},i&&this._assignReadonlyTextures(t,i);if(e)for(let t of n)for(let n of e.param_configs())t.uniforms[n.uniform_name]=n.uniform;else{const t=this.node.persisted_config.loaded_data();if(t){const e=this.node.persisted_config.uniforms();if(e){const s=t.param_uniform_pairs;for(let t of s){const s=t[0],r=t[1],o=this.node.params.get(s),a=e[r];for(let t of n)t.uniforms[r]=a,i&&this._assignReadonlyTextures(t,i);o&&a&&o.options.setOption(\\\\\\\"callback\\\\\\\",(()=>{for(let t of n)tg.callback(o,t.uniforms[r])}))}}}}}_assignReadonlyTextures(t,e){for(let n of e){const e=n.shaderName(),i=this._createdTexturesByName.get(e);if(i){const n=this._textureNameForShaderName(e);t.uniforms[n]={value:i}}}}_updateSimulationMaterialUniforms(){for(let t of this._allVariables)t.material.uniforms[TR.TIME].value=this.node.scene().time(),t.material.uniforms[TR.DELTA_TIME].value=this._deltaTime}_initParticlesUVs(){var t=new Float32Array(2*this._points.length);let e=0;for(var n=0,i=0;i<this._usedTexturesSize.x;i++)for(var s=0;s<this._usedTexturesSize.y&&(t[e++]=s/(this._usedTexturesSize.x-1),t[e++]=i/(this._usedTexturesSize.y-1),!((n+=2)>=t.length));s++);const r=Q0.UV_ATTRIB;if(this._particlesCoreGroup)for(let e of this._particlesCoreGroup.coreGeometries()){const n=e.geometry(),i=e.markedAsInstance()?I$:C.a;n.setAttribute(r,new i(t,2))}}createdTexturesByName(){return this._createdTexturesByName}_fillTextures(){const t=this._textureAllocationsController();t&&this._createdTexturesByName.forEach(((e,n)=>{const i=t.allocationForShaderName(n);if(!i)return void console.warn(`no allocation found for shader ${n}`);const s=i.variables();if(!s)return void console.warn(\\\\\\\"allocation has no variables\\\\\\\");const r=e.image.data;for(let t of s){const e=t.position();let n=t.name();const i=this._points[0];if(i){if(i.hasAttrib(n)){const t=i.attribSize(n);let s=e;for(let e of this._points){if(1==t){const t=e.attribValue(n);r[s]=t}else e.attribValue(n).toArray(r,s);s+=4}}}}}))}resetGpuCompute(){this._gpuCompute=void 0,this._simulationRestartRequired=!0}setRestartNotRequired(){this._simulationRestartRequired=!1}resetGpuComputeAndSetDirty(){this.resetGpuCompute(),this.node.setDirty()}resetParticleGroups(){this._particlesCoreGroup=void 0}initialized(){return null!=this._particlesCoreGroup&&null!=this._gpuCompute}_createTextureRenderTargets(){this._createdTexturesByName.forEach(((t,e)=>{t.dispose()})),this._createdTexturesByName.clear(),this._variablesByName.forEach(((t,e)=>{this._gpuCompute&&this._createdTexturesByName.set(e,this._gpuCompute.createTexture())}));const t=this._readonlyAllocations();if(t&&this._gpuCompute)for(let e of t)this._createdTexturesByName.set(e.shaderName(),this._gpuCompute.createTexture())}_textureAllocationsController(){var t;return(null===(t=this.node.assemblerController)||void 0===t?void 0:t.assembler.textureAllocationsController())||this._persistedTextureAllocationsController}_readonlyAllocations(){var t;return null===(t=this._textureAllocationsController())||void 0===t?void 0:t.readonlyAllocations()}restartSimulationIfRequired(){this._simulationRestartRequired&&this._restartSimulation()}_restartSimulation(){this._lastSimulatedTime=void 0,this._createTextureRenderTargets();this._getPoints()&&(this._fillTextures(),this._variablesByName.forEach(((t,e)=>{const n=this._createdTexturesByName.get(e);this._gpuCompute&&n&&(this._gpuCompute.renderTexture(n,t.renderTargets[0]),this._gpuCompute.renderTexture(n,t.renderTargets[1]))})))}_getPoints(){if(!this._particlesCoreGroup)return;let t=this._particlesCoreGroup.coreGeometries();const e=t[0];if(e){const n=e.markedAsInstance(),i=[];for(let e of t)e.markedAsInstance()==n&&i.push(e);const s=[];for(let t of i)for(let e of t.points())s.push(e);return s}return[]}}class o1{constructor(t,e){if(this._name=t,this._size=e,this._position=-1,this._readonly=!1,!t)throw\\\\\\\"TextureVariable requires a name\\\\\\\"}merge(t){var e;t.readonly()||this.setReadonly(!1),null===(e=t.graphNodeIds())||void 0===e||e.forEach(((t,e)=>{this.addGraphNodeId(e)}))}setReadonly(t){this._readonly=t}readonly(){return this._readonly}setAllocation(t){this._allocation=t}allocation(){return this._allocation}graphNodeIds(){return this._graph_node_ids}addGraphNodeId(t){this._graph_node_ids=this._graph_node_ids||new Map,this._graph_node_ids.set(t,!0)}name(){return this._name}size(){return this._size}setPosition(t){this._position=t}position(){return this._position}component(){return\\\\\\\"xyzw\\\\\\\".split(\\\\\\\"\\\\\\\").splice(this._position,this._size).join(\\\\\\\"\\\\\\\")}static fromJSON(t){return new o1(t.name,t.size)}toJSON(t){const e=[];return this._graph_node_ids&&this._graph_node_ids.forEach(((n,i)=>{const s=t.graph.nodeFromId(i);if(s){const t=s.path();t&&e.push(t)}})),{name:this.name(),size:this.size(),nodes:e}}}class a1{constructor(){this._size=0}addVariable(t){this._variables=this._variables||[],this._variables.push(t),t.setPosition(this._size),t.setAllocation(this),this._size+=t.size()}hasSpaceForVariable(t){return this._size+t.size()<=4}shaderName(){var t;return((null===(t=this.variables())||void 0===t?void 0:t.map((t=>t.name())))||[\\\\\\\"no_variables_allocated\\\\\\\"]).join(\\\\\\\"_SEPARATOR_\\\\\\\")}textureName(){return`texture_${this.shaderName()}`}variables(){return this._variables}variablesForInputNode(t){var e;return null===(e=this._variables)||void 0===e?void 0:e.filter((e=>{var n;return(null===(n=e.graphNodeIds())||void 0===n?void 0:n.has(t.graphNodeId()))||!1}))}inputNamesForNode(t){const e=this.variablesForInputNode(t);if(e)return t.type()==ps.ATTRIBUTE?[wf.INPUT_NAME]:e.map((t=>t.name()))}variable(t){if(this._variables)for(let e of this._variables)if(e.name()==t)return e}static fromJSON(t){const e=new a1;for(let n of t){const t=o1.fromJSON(n);e.addVariable(t)}return e}toJSON(t){return this._variables?this._variables.map((e=>e.toJSON(t))):[]}}const l1=[\\\\\\\"position\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"color\\\\\\\",\\\\\\\"uv\\\\\\\"];class c1{constructor(){this._writableAllocations=[],this._readonlyAllocations=[]}static _sortNodes(t){const e=t.filter((t=>t.type()==OF.type())),n=t.filter((t=>t.type()!=OF.type())),i=n.map((t=>t.name())).sort(),s=new Map;for(let t of n)s.set(t.name(),t);for(let t of i){const n=s.get(t);n&&e.push(n)}return e}allocateConnectionsFromRootNodes(t,e){const n=[];t=c1._sortNodes(t),e=c1._sortNodes(e);for(let e of t){const t=e.graphNodeId();switch(e.type()){case OF.type():for(let i of e.io.inputs.namedInputConnectionPoints()){if(e.io.inputs.named_input(i.name())){const e=new o1(i.name(),Wo[i.type()]);e.addGraphNodeId(t),n.push(e)}}break;case wf.type():{const i=e,s=i.connected_input_node(),r=i.connected_input_connection_point();if(s&&r){const e=new o1(i.attribute_name,Wo[r.type()]);e.addGraphNodeId(t),n.push(e)}break}}}for(let t of e){const e=t.graphNodeId();switch(t.type()){case II.type():{const i=t;for(let t of i.io.outputs.used_output_names()){if(l1.includes(t)){const s=i.io.outputs.namedOutputConnectionPointsByName(t);if(s){const i=s.type(),r=new o1(t,Wo[i]);r.addGraphNodeId(e),n.push(r)}}}break}case wf.type():{const i=t,s=i.output_connection_point();if(s){const t=new o1(i.attribute_name,Wo[s.type()]);i.isExporting()||t.setReadonly(!0),t.addGraphNodeId(e),n.push(t)}break}}}this._allocateVariables(n)}_allocateVariables(t){const e=f.sortBy(t,(t=>-t.size())),n=this._ensureVariablesAreUnique(e);for(let t of n)t.readonly()?this._allocateVariable(t,this._readonlyAllocations):this._allocateVariable(t,this._writableAllocations)}_ensureVariablesAreUnique(t){const e=new Map;for(let n of t)h.pushOnArrayAtEntry(e,n.name(),n);const n=[];return e.forEach(((t,e)=>{const i=t[0];n.push(i);for(let e=1;e<t.length;e++){const n=t[e];i.merge(n)}})),n}_allocateVariable(t,e){let n=this.hasVariable(t.name());if(n)throw\\\\\\\"no variable should be allocated since they have been made unique before\\\\\\\";if(!n)for(let i of e)!n&&i.hasSpaceForVariable(t)&&(i.addVariable(t),n=!0);if(!n){const n=new a1;e.push(n),n.addVariable(t)}}_addWritableAllocation(t){this._writableAllocations.push(t)}_addReadonlyAllocation(t){this._readonlyAllocations.push(t)}readonlyAllocations(){return this._readonlyAllocations}shaderNames(){const t=this._writableAllocations.map((t=>t.shaderName()));return f.uniq(t)}createShaderConfigs(){return[]}allocationForShaderName(t){const e=this._writableAllocations.filter((e=>e.shaderName()==t))[0];return e||this._readonlyAllocations.filter((e=>e.shaderName()==t))[0]}inputNamesForShaderName(t,e){const n=this.allocationForShaderName(e);if(n)return n.inputNamesForNode(t)}variable(t){for(let e of this._writableAllocations){const n=e.variable(t);if(n)return n}for(let e of this._readonlyAllocations){const n=e.variable(t);if(n)return n}}variables(){const t=this._writableAllocations.map((t=>t.variables()||[])).flat(),e=this._writableAllocations.map((t=>t.variables()||[])).flat();return t.concat(e)}hasVariable(t){return this.variables().map((t=>t.name())).includes(t)}static fromJSON(t){const e=new c1;for(let n of t.writable){const t=n[Object.keys(n)[0]],i=a1.fromJSON(t);e._addWritableAllocation(i)}for(let n of t.readonly){const t=n[Object.keys(n)[0]],i=a1.fromJSON(t);e._addReadonlyAllocation(i)}return e}toJSON(t){return{writable:this._writableAllocations.map((e=>({[e.shaderName()]:e.toJSON(t)}))),readonly:this._readonlyAllocations.map((e=>({[e.shaderName()]:e.toJSON(t)})))}}print(t){console.warn(JSON.stringify(this.toJSON(t),[\\\\\\\"\\\\\\\"],2))}}class h1 extends Kf{constructor(t){super(t),this.node=t}toJSON(){const t=this.node.assemblerController;if(!t)return;const e={};this.node.shaders_by_name().forEach(((t,n)=>{e[n]=t}));const n=t.assembler.textureAllocationsController().toJSON(this.node.scene()),i=[],s=new F,r=t.assembler.param_configs();for(let t of r)i.push([t.name(),t.uniform_name]),s.uniforms[t.uniform_name]=t.uniform;const o=this._materialToJson(s,{node:this.node,suffix:\\\\\\\"main\\\\\\\"});return{shaders_by_name:e,texture_allocations:n,param_uniform_pairs:i,uniforms_owner:o||{}}}load(t){li.playerMode()&&(this._loaded_data=t,this.node.init_with_persisted_config())}loaded_data(){return this._loaded_data}shaders_by_name(){if(this._loaded_data){const t=new Map,e=Object.keys(this._loaded_data.shaders_by_name);for(let n of e)t.set(n,this._loaded_data.shaders_by_name[n]);return t}}texture_allocations_controller(){if(this._loaded_data)return c1.fromJSON(this._loaded_data.texture_allocations)}uniforms(){if(this._loaded_data){const t=this._loadMaterial(this._loaded_data.uniforms_owner);return(null==t?void 0:t.uniforms)||{}}}}const u1=new class extends ua{constructor(){super(...arguments),this.startFrame=ha.FLOAT(Nl.START_FRAME,{range:[0,1e3],rangeLocked:[!0,!1]}),this.autoTexturesSize=ha.BOOLEAN(1),this.maxTexturesSize=ha.VECTOR2([1024,1024],{visibleIf:{autoTexturesSize:1}}),this.texturesSize=ha.VECTOR2([64,64],{visibleIf:{autoTexturesSize:0}}),this.dataType=ha.INTEGER(0,{menu:{entries:i1.map(((t,e)=>({value:e,name:t})))}}),this.reset=ha.BUTTON(null,{callback:(t,e)=>{d1.PARAM_CALLBACK_reset(t)}}),this.material=ha.OPERATOR_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.MAT},dependentOnFoundNode:!1})}};class d1 extends uV{constructor(){super(...arguments),this.paramsConfig=u1,this._assembler_controller=this._create_assembler_controller(),this.persisted_config=new h1(this),this.globals_handler=new Q0(Q0.PARTICLE_SIM_UV),this._shaders_by_name=new Map,this.gpuController=new r1(this),this.renderController=new t1(this),this._reset_material_if_dirty_bound=this._reset_material_if_dirty.bind(this),this._children_controller_context=ts.GL}static type(){return\\\\\\\"particlesSystemGpu\\\\\\\"}dispose(){super.dispose(),this.gpuController.dispose()}get assemblerController(){return this._assembler_controller}usedAssembler(){return jn.GL_PARTICLES}_create_assembler_controller(){return li.assemblersRegister.assembler(this,this.usedAssembler())}shaders_by_name(){return this._shaders_by_name}static require_webgl2(){return!0}static PARAM_CALLBACK_reset(t){t.PARAM_CALLBACK_reset()}PARAM_CALLBACK_reset(){this.gpuController.resetGpuComputeAndSetDirty()}static displayedInputNames(){return[\\\\\\\"points to emit particles from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.addPostDirtyHook(\\\\\\\"_reset_material_if_dirty\\\\\\\",this._reset_material_if_dirty_bound)}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}childrenAllowed(){return this.assemblerController?super.childrenAllowed():(this.scene().markAsReadOnly(this),!1)}async _reset_material_if_dirty(){this.p.material.isDirty()&&(this.renderController.reset_render_material(),this.isOnStartFrame()||await this.renderController.init_render_material())}isOnStartFrame(){return this.scene().frame()==this.pv.startFrame}async cook(t){this.gpuController.setRestartNotRequired();const e=t[0];this.compileIfRequired();const n=this.isOnStartFrame();n&&this.gpuController.resetParticleGroups(),this.gpuController.initialized()||await this.gpuController.init(e),this.renderController.initialized()||(this.renderController.init_core_group(e),await this.renderController.init_render_material()),this.gpuController.restartSimulationIfRequired(),this.gpuController.computeSimilationIfRequired(),n?this.setCoreGroup(e):this.cookController.endCook()}async compileIfRequired(){var t;(null===(t=this.assemblerController)||void 0===t?void 0:t.compileRequired())&&await this.run_assembler()}async run_assembler(){const t=this.assemblerController;if(!t)return;const e=this._find_export_nodes();if(e.length>0){const n=e;t.set_assembler_globals_handler(this.globals_handler),t.assembler.set_root_nodes(n),t.assembler.compile(),t.post_compile()}const n=t.assembler.shaders_by_name();this._setShaderNames(n)}_setShaderNames(t){this._shaders_by_name=t,this.gpuController.setShadersByName(this._shaders_by_name),this.renderController.setShadersByName(this._shaders_by_name),this.gpuController.resetGpuCompute(),this.gpuController.resetParticleGroups()}init_with_persisted_config(){const t=this.persisted_config.shaders_by_name(),e=this.persisted_config.texture_allocations_controller();t&&e&&(this._setShaderNames(t),this.gpuController.setPersistedTextureAllocationController(e))}_find_export_nodes(){const t=Df.findAttributeExportNodes(this),e=Df.findOutputNodes(this);if(e.length>1)return this.states.error.set(\\\\\\\"only one output node is allowed\\\\\\\"),[];const n=e[0];return n&&t.push(n),t}}class p1 extends aV{static type(){return\\\\\\\"peak\\\\\\\"}cook(t,e){const n=t[0];let i,s;for(let t of n.objects())t.traverse((t=>{let n;if(null!=(n=t.geometry)){for(s of(i=new fr(n),i.points())){const t=s.normal(),n=s.position().clone().add(t.multiplyScalar(e.amount));s.setPosition(n)}i.geometry().getAttribute(\\\\\\\"position\\\\\\\").needsUpdate=!0}}));return t[0]}}p1.DEFAULT_PARAMS={amount:0};const _1=p1.DEFAULT_PARAMS;const m1=new class extends ua{constructor(){super(...arguments),this.amount=ha.FLOAT(_1.amount,{range:[-1,1]})}};class f1 extends uV{constructor(){super(...arguments),this.paramsConfig=m1}static type(){return\\\\\\\"peak\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){this._operation=this._operation||new p1(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const g1=new p.a(0,0,1),v1=new p.a(0,0,1),y1=new p.a(0,1,0);class x1 extends aV{constructor(){super(...arguments),this._core_transform=new bU,this._size=new p.a,this._center=new p.a,this._segmentsCount=new d.a(1,1)}static type(){return\\\\\\\"plane\\\\\\\"}cook(t,e){const n=t[0];return n?this._cook_with_input(n,e):this._cook_without_input(e)}_cook_without_input(t){const e=this._create_plane(t.size,t);this._core_transform.rotateGeometry(e,g1,t.direction);const n=this._core_transform.translationMatrix(t.center);return e.applyMatrix4(n),this.createCoreGroupFromGeometry(e)}_cook_with_input(t,e){const n=t.boundingBox();n.getSize(this._size),n.getCenter(this._center);const i=new d.a(this._size.x,this._size.z),s=this._create_plane(i,e);this._core_transform.rotateGeometry(s,v1,y1);const r=this._core_transform.translationMatrix(this._center);return s.applyMatrix4(r),this.createCoreGroupFromGeometry(s)}_create_plane(t,e){return t=t.clone(),e.useSegmentsCount?(this._segmentsCount.x=Math.floor(e.segments.x),this._segmentsCount.y=Math.floor(e.segments.y)):e.stepSize>0&&(this._segmentsCount.x=Math.floor(t.x/e.stepSize),this._segmentsCount.y=Math.floor(t.y/e.stepSize),t.x=this._segmentsCount.x*e.stepSize,t.y=this._segmentsCount.y*e.stepSize),new L(t.x,t.y,this._segmentsCount.x,this._segmentsCount.y)}}x1.DEFAULT_PARAMS={size:new d.a(1,1),useSegmentsCount:!1,stepSize:1,segments:new d.a(1,1),direction:new p.a(0,1,0),center:new p.a(0,0,0)},x1.INPUT_CLONED_STATE=Qi.NEVER;const b1=x1.DEFAULT_PARAMS;const w1=new class extends ua{constructor(){super(...arguments),this.size=ha.VECTOR2(b1.size),this.useSegmentsCount=ha.BOOLEAN(b1.useSegmentsCount),this.stepSize=ha.FLOAT(b1.stepSize,{range:[.001,1],rangeLocked:[!1,!1],visibleIf:{useSegmentsCount:0}}),this.segments=ha.VECTOR2(b1.segments,{visibleIf:{useSegmentsCount:1}}),this.direction=ha.VECTOR3(b1.direction),this.center=ha.VECTOR3(b1.center)}};class T1 extends uV{constructor(){super(...arguments),this.paramsConfig=w1}static type(){return\\\\\\\"plane\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create plane from (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(x1.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new x1(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class A1 extends aV{static type(){return\\\\\\\"playerCapsule\\\\\\\"}cook(t,e){return this.createCoreGroupFromGeometry(Uy(e))}}A1.DEFAULT_PARAMS={radius:.5,height:1};const M1=A1.DEFAULT_PARAMS;const E1=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(M1.radius,{range:[0,1],rangeLocked:[!0,!1]}),this.height=ha.FLOAT(M1.height,{range:[0,1],rangeLocked:[!0,!1]})}};class S1 extends uV{constructor(){super(...arguments),this.paramsConfig=E1}static type(){return\\\\\\\"playerCapsule\\\\\\\"}initializeNode(){this.io.inputs.setCount(0)}cook(t){this._operation=this._operation||new A1(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const C1=\\\\\\\"position\\\\\\\";const N1=new class extends ua{constructor(){super(...arguments),this.updateX=ha.BOOLEAN(0),this.x=ha.FLOAT(\\\\\\\"@P.x\\\\\\\",{visibleIf:{updateX:1},expression:{forEntities:!0}}),this.updateY=ha.BOOLEAN(0),this.y=ha.FLOAT(\\\\\\\"@P.y\\\\\\\",{visibleIf:{updateY:1},expression:{forEntities:!0}}),this.updateZ=ha.BOOLEAN(0),this.z=ha.FLOAT(\\\\\\\"@P.z\\\\\\\",{visibleIf:{updateZ:1},expression:{forEntities:!0}}),this.updateNormals=ha.BOOLEAN(1)}};class L1 extends uV{constructor(){super(...arguments),this.paramsConfig=N1,this._x_arrays_by_geometry_uuid=new Map,this._y_arrays_by_geometry_uuid=new Map,this._z_arrays_by_geometry_uuid=new Map}static type(){return\\\\\\\"point\\\\\\\"}static displayedInputNames(){return[\\\\\\\"points to move\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0];await this._eval_expressions_for_core_group(e)}async _eval_expressions_for_core_group(t){const e=t.coreObjects();for(let t=0;t<e.length;t++)await this._eval_expressions_for_core_object(e[t]);this.pv.updateNormals&&t.computeVertexNormals();const n=t.geometries();for(let t of n)t.computeBoundingBox();if(!this.io.inputs.cloneRequired(0)){const e=t.geometries();for(let t of e){t.getAttribute(C1).needsUpdate=!0}}this.setCoreGroup(t)}async _eval_expressions_for_core_object(t){const e=t.object().geometry,n=t.points(),i=e.getAttribute(C1).array,s=await this._update_from_param(e,i,n,this.p.updateX,this.p.x,this.pv.x,this._x_arrays_by_geometry_uuid,0),r=await this._update_from_param(e,i,n,this.p.updateY,this.p.y,this.pv.y,this._y_arrays_by_geometry_uuid,1),o=await this._update_from_param(e,i,n,this.p.updateZ,this.p.z,this.pv.z,this._z_arrays_by_geometry_uuid,2);s&&this._commit_tmp_values(s,i,0),r&&this._commit_tmp_values(r,i,1),o&&this._commit_tmp_values(o,i,2)}async _update_from_param(t,e,n,i,s,r,o,a){const l=i,c=s;let h=this._init_array_if_required(t,o,n.length,a);if(l.value)if(c.hasExpression()&&c.expressionController)await c.expressionController.computeExpressionForPoints(n,((t,e)=>{h[t.index()]=e}));else{let t;for(let e=0;e<n.length;e++)t=n[e],h[t.index()]=r}return h}_init_array_if_required(t,e,n,i){const s=t.uuid,r=e.get(s);if(r){if(r.length<n){const r=this._array_for_component(t,n,i);return e.set(s,r),r}return r}{const r=this._array_for_component(t,n,i);return e.set(s,r),r}}_array_for_component(t,e,n){const i=new Array(e),s=t.getAttribute(C1).array;for(let t=0;t<i.length;t++)i[t]=s[3*t+n];return i}_commit_tmp_values(t,e,n){for(let i=0;i<t.length;i++)e[3*i+n]=t[i]}}class O1 extends aV{static type(){return\\\\\\\"pointLight\\\\\\\"}cook(t,e){const n=new QU.a;return n.matrixAutoUpdate=!1,n.castShadow=!0,n.shadow.bias=-.001,n.shadow.mapSize.x=1024,n.shadow.mapSize.y=1024,n.shadow.camera.near=.1,n.color=e.color,n.intensity=e.intensity,n.decay=e.decay,n.distance=e.distance,n.castShadow=e.castShadows,n.shadow.mapSize.copy(e.shadowRes),n.shadow.camera.near=e.shadowNear,n.shadow.camera.far=e.shadowFar,n.shadow.bias=e.shadowBias,this.createCoreGroupFromObjects([n])}}O1.DEFAULT_PARAMS={color:new D.a(1,1,1),intensity:1,decay:.1,distance:100,castShadows:!1,shadowRes:new d.a(1024,1024),shadowBias:.001,shadowNear:1,shadowFar:100},O1.INPUT_CLONED_STATE=Qi.NEVER;const P1=O1.DEFAULT_PARAMS;const R1=new class extends ua{constructor(){super(...arguments),this.light=ha.FOLDER(),this.color=ha.COLOR(P1.color.toArray(),{conversion:lo.SRGB_TO_LINEAR}),this.intensity=ha.FLOAT(P1.intensity),this.decay=ha.FLOAT(P1.decay),this.distance=ha.FLOAT(P1.distance),this.castShadows=ha.BOOLEAN(P1.castShadows),this.shadowRes=ha.VECTOR2(P1.shadowRes.toArray(),{visibleIf:{castShadows:1}}),this.shadowBias=ha.FLOAT(P1.shadowBias,{visibleIf:{castShadows:1}}),this.shadowNear=ha.FLOAT(P1.shadowNear,{visibleIf:{castShadows:1}}),this.shadowFar=ha.FLOAT(P1.shadowFar,{visibleIf:{castShadows:1}})}};class I1 extends uV{constructor(){super(...arguments),this.paramsConfig=R1}static type(){return\\\\\\\"pointLight\\\\\\\"}initializeNode(){this.io.inputs.setCount(0)}cook(t){this._operation=this._operation||new O1(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const F1=new p.a(0,1,0),D1=new p.a(-1,0,0);class B1 extends aV{constructor(){super(...arguments),this._centerMatrix=new A.a,this._longitudeMatrix=new A.a,this._latitudeMatrix=new A.a,this._depthMatrix=new A.a,this._fullMatrix=new A.a,this._decomposed={t:new p.a,q:new hh.a,s:new p.a}}static type(){return\\\\\\\"polarTransform\\\\\\\"}cook(t,e){const n=t[0].objects(),i=this.matrix(e);return this._apply_transform(n,e,i),t[0]}_apply_transform(t,e,n){const i=gU[e.applyOn];switch(i){case _U.GEOMETRIES:return this._apply_matrix_to_geometries(t,n);case _U.OBJECTS:return this._apply_matrix_to_objects(t,n)}os.unreachable(i)}_apply_matrix_to_geometries(t,e){for(let n of t){const t=n.geometry;t&&t.applyMatrix4(e)}}_apply_matrix_to_objects(t,e){for(let n of t)e.decompose(this._decomposed.t,this._decomposed.q,this._decomposed.s),n.position.copy(this._decomposed.t),n.quaternion.copy(this._decomposed.q),n.scale.copy(this._decomposed.s),n.updateMatrix()}matrix(t){return this._centerMatrix.identity(),this._longitudeMatrix.identity(),this._latitudeMatrix.identity(),this._depthMatrix.identity(),this._centerMatrix.makeTranslation(t.center.x,t.center.y,t.center.z),this._longitudeMatrix.makeRotationAxis(F1,Object(On.e)(t.longitude)),this._latitudeMatrix.makeRotationAxis(D1,Object(On.e)(t.latitude)),this._depthMatrix.makeTranslation(0,0,t.depth),this._fullMatrix.copy(this._centerMatrix).multiply(this._longitudeMatrix).multiply(this._latitudeMatrix).multiply(this._depthMatrix),this._fullMatrix}}B1.DEFAULT_PARAMS={applyOn:gU.indexOf(_U.GEOMETRIES),center:new p.a(0,0,0),longitude:0,latitude:0,depth:1},B1.INPUT_CLONED_STATE=Qi.FROM_NODE;const z1=B1.DEFAULT_PARAMS;const k1=new class extends ua{constructor(){super(...arguments),this.applyOn=ha.INTEGER(z1.applyOn,{menu:{entries:gU.map(((t,e)=>({name:t,value:e})))}}),this.center=ha.VECTOR3(z1.center.toArray()),this.longitude=ha.FLOAT(z1.longitude,{range:[0,360]}),this.latitude=ha.FLOAT(z1.latitude,{range:[-180,180]}),this.depth=ha.FLOAT(z1.depth,{range:[0,10]})}};class U1 extends uV{constructor(){super(...arguments),this.paramsConfig=k1}static type(){return\\\\\\\"polarTransform\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometries or objects to transform\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(B1.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new B1(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class G1{static accumulated_curve_point_indices(t){let e=[];const n=[];let i,s=null;for(let r=0;r<t.length;r++)if(r%2==1){i=t[r];const o=t[r-1];null==s||o===s?(0===e.length&&e.push(o),e.push(i),s=i):(n.push(e),e=[o,i],s=i)}return n.push(e),n}static create_line_segment_geometry(t,e,n,i){const s=[],r={};n.forEach((t=>{r[t]=[]})),e.forEach(((e,o)=>{const a=t[e];n.forEach((t=>{const e=a.attribValue(t);let n;n=i[t]>1?e.toArray():[e],n.forEach((e=>{r[t].push(e)}))})),o>0&&(s.push(o-1),s.push(o))}));const o=new S.a;return n.forEach((t=>{const e=i[t],n=r[t];o.setAttribute(t,new C.c(n,e))})),o.setIndex(s),o}static line_segment_to_geometries(t){var e;const n=[],i=new fr(t),s=i.attribNames(),r=i.points(),o=(null===(e=t.getIndex())||void 0===e?void 0:e.array)||[],a=this.accumulated_curve_point_indices(o);if(a.length>0){const e=i.attribSizes();a.forEach(((i,o)=>{t=this.create_line_segment_geometry(r,i,s,e),n.push(t)}))}return n}}class V1{constructor(t,e,n){this.geometry=t,this.geometry1=e,this.geometry0=n}process(){const t=new fr(this.geometry0),e=new fr(this.geometry1),n=t.segments(),i=e.segments();if(0===n.length||0===i.length)return;const s=n.length<i.length?[t,e]:[e,t],r=s[0],o=s[1],a=r.segments(),l=o.segments(),c=r.points(),h=o.points(),u=c.length,d=c.concat(h),p=[];a.forEach(((t,e)=>{const n=l[e];p.push(t[0]),p.push(t[1]),p.push(n[0]+u),p.push(t[1]),p.push(n[1]+u),p.push(n[0]+u)}));f.intersection(r.attribNames(),o.attribNames()).forEach((t=>{const e=r.attribSize(t);let n,i=d.map((e=>e.attribValue(t)));n=1==e?i:i.map((t=>t.toArray())).flat(),this.geometry.setAttribute(t,new C.c(n,e))})),this.geometry.setIndex(p),this.geometry.computeVertexNormals()}}const H1=new p.a(0,0,0),j1=new p.a(1,1,1);const W1=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(1),this.segmentsRadial=ha.INTEGER(8,{range:[3,20],rangeLocked:[!0,!1]}),this.closed=ha.BOOLEAN(0)}};class q1 extends uV{constructor(){super(...arguments),this.paramsConfig=W1,this._core_transform=new bU,this._geometries=[]}static type(){return\\\\\\\"polywire\\\\\\\"}static displayedInputNames(){return[\\\\\\\"lines to create tubes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}cook(t){const e=t[0];this._geometries=[];for(let t of e.objects())t instanceof Ms.a&&this._create_tube(t);const n=fr.mergeGeometries(this._geometries);for(let t of this._geometries)t.dispose();if(n){const t=this.createObject(n,Ns.MESH);this.setObject(t)}else this.setObjects([])}_create_tube(t){var e;const n=t.geometry,i=new fr(n).points(),s=null===(e=n.getIndex())||void 0===e?void 0:e.array,r=G1.accumulated_curve_point_indices(s);for(let t of r){const e=t.map((t=>i[t]));this._create_tube_from_points(e)}}_create_tube_from_points(t){if(t.length<=1)return;const e=t.map((t=>t.attribValue(\\\\\\\"position\\\\\\\"))),n=JJ.create(this.pv.radius,this.pv.segmentsRadial),i=[];for(let t of e){const e=t,s=this._core_transform.matrix(e,H1,j1,1,xU),r=n.clone();r.applyMatrix4(s),i.push(r)}for(let t=0;t<i.length;t++)if(t>0){const e=i[t],n=i[t-1],s=this._skin(n,e);this._geometries.push(s)}}_skin(t,e){const n=new S.a;return new V1(n,t,e).process(),n}}const X1=\\\\\\\"dist\\\\\\\";class Y1 extends aV{constructor(){super(...arguments),this._matDoubleSideTmpSetter=new xK,this._raycaster=function(){const t=new eO;return t.firstHitOnly=!0,t}(),this._pointPos=new p.a,this._pointNormal=new p.a}static type(){return\\\\\\\"ray\\\\\\\"}cook(t,e){const n=t[0],i=t[1];return this._ray(n,i,e)}_ray(t,e,n){let i,s;this._matDoubleSideTmpSetter.setCoreGroupMaterialDoubleSided(e),n.addDistAttribute&&(t.hasAttrib(X1)||t.addNumericVertexAttrib(X1,1,-1));const r=t.points();for(let t of r)if(t.getPosition(this._pointPos),i=n.direction,n.useNormals&&(t.getNormal(this._pointNormal),i=this._pointNormal),this._raycaster.set(this._pointPos,i),s=this._raycaster.intersectObjects(e.objects(),!0)[0],s){if(n.transformPoints&&t.setPosition(s.point),n.addDistAttribute){const e=this._pointPos.distanceTo(s.point);console.log(e),t.setAttribValue(X1,e)}n.transferFaceNormals&&s.face&&t.setNormal(s.face.normal)}return this._matDoubleSideTmpSetter.restoreMaterialSideProperty(e),t}}Y1.DEFAULT_PARAMS={useNormals:!0,direction:new p.a(0,-1,0),transformPoints:!0,transferFaceNormals:!0,addDistAttribute:!1},Y1.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.NEVER];const $1=Y1.DEFAULT_PARAMS;const J1=new class extends ua{constructor(){super(...arguments),this.useNormals=ha.BOOLEAN($1.useNormals),this.direction=ha.VECTOR3($1.direction.toArray(),{visibleIf:{useNormals:0}}),this.transformPoints=ha.BOOLEAN($1.transformPoints),this.transferFaceNormals=ha.BOOLEAN($1.transferFaceNormals),this.addDistAttribute=ha.BOOLEAN($1.addDistAttribute)}};class Z1 extends uV{constructor(){super(...arguments),this.paramsConfig=J1}static type(){return\\\\\\\"ray\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to move\\\\\\\",\\\\\\\"geometry to ray onto\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState(Y1.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new Y1(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const K1={color:{value:null},tDiffuse:{value:null},textureMatrix:{value:null},opacity:{value:.5}},Q1=\\\\\\\"uniform mat4 textureMatrix;\\\\nvarying vec4 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvUv = textureMatrix * vec4( position, 1.0 );\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n}\\\\\\\",t2=\\\\\\\"uniform vec3 color;\\\\nuniform sampler2D tDiffuse;\\\\nvarying vec4 vUv;\\\\nuniform float opacity;\\\\n\\\\nfloat blendOverlay( float base, float blend ) {\\\\n\\\\n\\\\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\\\\n\\\\n}\\\\n\\\\nvec3 blendOverlay( vec3 base, vec3 blend ) {\\\\n\\\\n\\\\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\\\\n\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 base = texture2DProj( tDiffuse, vUv );\\\\n\\\\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), opacity );\\\\n\\\\n}\\\\\\\",e2={minFilter:w.V,magFilter:w.V,format:w.ic};class n2 extends B.a{constructor(t,e){super(),this.geometry=t,this._options=e,this.type=\\\\\\\"Reflector\\\\\\\",this.reflectorPlane=new Y.a,this.normal=new p.a,this.reflectorWorldPosition=new p.a,this.cameraWorldPosition=new p.a,this.rotationMatrix=new A.a,this.lookAtPosition=new p.a(0,0,-1),this.clipPlane=new _.a,this.view=new p.a,this.target=new p.a,this.q=new _.a,this.textureMatrix=new A.a,this.virtualCamera=new tt.a,this.onBeforeRender=this._onBeforeRender.bind(this),this._onWindowResizeBound=this._onWindowResize.bind(this);const{width:n,height:i}=this._getRendererSize(this._options.renderer);this.renderTarget=new K(n,i,e2),Object(On.i)(n)&&Object(On.i)(i)||(this.renderTarget.texture.generateMipmaps=!1),this._coreRenderBlur=new OG(new d.a(n,i)),this.material=new F({uniforms:I.clone(K1),fragmentShader:t2,vertexShader:Q1}),this.material.uniforms.tDiffuse.value=this.renderTarget.texture,this.material.uniforms.color.value=this._options.color,this.material.uniforms.textureMatrix.value=this.textureMatrix,this.material.uniforms.opacity.value=this._options.opacity,this.material.transparent=this._options.opacity<1,this._addWindowResizeEvent()}_addWindowResizeEvent(){window.addEventListener(\\\\\\\"resize\\\\\\\",this._onWindowResizeBound.bind(this),!1)}_removeWindowResizeEvent(){window.removeEventListener(\\\\\\\"resize\\\\\\\",this._onWindowResizeBound.bind(this),!1)}_onWindowResize(){this.traverseAncestors((t=>{t.parent||t.uuid!=this._options.scene.uuid&&this._removeWindowResizeEvent()}));const{width:t,height:e}=this._getRendererSize(this._options.renderer);this.renderTarget.setSize(t,e),this._coreRenderBlur.setSize(t,e)}_getRendererSize(t){const e=t.domElement;return{width:e.width*this._options.pixelRatio,height:e.height*this._options.pixelRatio}}_onBeforeRender(t,e,n,i,s,r){if(!this._options.active)return;const o=n;if(this.reflectorWorldPosition.setFromMatrixPosition(this.matrixWorld),this.cameraWorldPosition.setFromMatrixPosition(o.matrixWorld),this.rotationMatrix.extractRotation(this.matrixWorld),this.normal.set(0,0,1),this.normal.applyMatrix4(this.rotationMatrix),this.view.subVectors(this.reflectorWorldPosition,this.cameraWorldPosition),!(this.view.dot(this.normal)>0)){this.view.reflect(this.normal).negate(),this.view.add(this.reflectorWorldPosition),this.rotationMatrix.extractRotation(o.matrixWorld),this.lookAtPosition.set(0,0,-1),this.lookAtPosition.applyMatrix4(this.rotationMatrix),this.lookAtPosition.add(this.cameraWorldPosition),this.target.subVectors(this.reflectorWorldPosition,this.lookAtPosition),this.target.reflect(this.normal).negate(),this.target.add(this.reflectorWorldPosition),this.virtualCamera.position.copy(this.view),this.virtualCamera.up.set(0,1,0),this.virtualCamera.up.applyMatrix4(this.rotationMatrix),this.virtualCamera.up.reflect(this.normal),this.virtualCamera.lookAt(this.target),this.virtualCamera.far=o.far,this.virtualCamera.updateMatrixWorld(),this.virtualCamera.projectionMatrix.copy(o.projectionMatrix),this.textureMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),this.textureMatrix.multiply(this.virtualCamera.projectionMatrix),this.textureMatrix.multiply(this.virtualCamera.matrixWorldInverse),this.textureMatrix.multiply(this.matrixWorld),this.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal,this.reflectorWorldPosition),this.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse),this.clipPlane.set(this.reflectorPlane.normal.x,this.reflectorPlane.normal.y,this.reflectorPlane.normal.z,this.reflectorPlane.constant);var a=this.virtualCamera.projectionMatrix;this.q.x=(Math.sign(this.clipPlane.x)+a.elements[8])/a.elements[0],this.q.y=(Math.sign(this.clipPlane.y)+a.elements[9])/a.elements[5],this.q.z=-1,this.q.w=(1+a.elements[10])/a.elements[14],this.clipPlane.multiplyScalar(2/this.clipPlane.dot(this.q)),a.elements[2]=this.clipPlane.x,a.elements[6]=this.clipPlane.y,a.elements[10]=this.clipPlane.z+1-this._options.clipBias,a.elements[14]=this.clipPlane.w,this.renderTarget.texture.encoding=t.outputEncoding,this.visible=!1;var l=t.getRenderTarget(),c=t.xr.enabled,h=t.shadowMap.autoUpdate;if(t.xr.enabled=!1,t.shadowMap.autoUpdate=!1,t.setRenderTarget(this.renderTarget),t.state.buffers.depth.setMask(!0),!1===t.autoClear&&t.clear(),t.render(e,this.virtualCamera),this._options.tblur){const e=this._options.blur*this._options.pixelRatio,n=e*this._options.verticalBlurMult;if(this._coreRenderBlur.applyBlur(this.renderTarget,t,e,n),this._options.tblur2){const e=this._options.blur2*this._options.pixelRatio,n=e*this._options.verticalBlur2Mult;this._coreRenderBlur.applyBlur(this.renderTarget,t,e,n)}}t.xr.enabled=c,t.shadowMap.autoUpdate=h,t.setRenderTarget(l);var u=o.viewport;void 0!==u&&t.state.viewport(u),this.visible=!0}}}class i2 extends aV{static type(){return\\\\\\\"reflector\\\\\\\"}async cook(t,e){const n=t[0],i=[],s=await li.renderersController.firstRenderer();if(!s)return this.createCoreGroupFromObjects(i);const r=n.objectsWithGeo();for(let t of r){const n=new n2(t.geometry,{clipBias:e.clipBias,renderer:s,scene:this.scene().threejsScene(),pixelRatio:e.pixelRatio,color:e.color,opacity:e.opacity,active:e.active,tblur:e.tblur,blur:e.blur,verticalBlurMult:e.verticalBlurMult,tblur2:e.tblur2,blur2:e.blur2,verticalBlur2Mult:e.verticalBlur2Mult});n.position.copy(t.position),n.rotation.copy(t.rotation),n.scale.copy(t.scale),n.updateMatrix(),i.push(n)}return this.createCoreGroupFromObjects(i)}}i2.DEFAULT_PARAMS={active:!0,clipBias:.003,color:new D.a(1,1,1),opacity:1,pixelRatio:1,tblur:!1,blur:1,verticalBlurMult:1,tblur2:!1,blur2:1,verticalBlur2Mult:1},i2.INPUT_CLONED_STATE=Qi.NEVER;const s2=i2.DEFAULT_PARAMS;const r2=new class extends ua{constructor(){super(...arguments),this.active=ha.BOOLEAN(s2.active),this.clipBias=ha.FLOAT(s2.clipBias),this.color=ha.COLOR(s2.color.toArray()),this.opacity=ha.FLOAT(s2.opacity),this.pixelRatio=ha.INTEGER(s2.pixelRatio,{range:[1,4],rangeLocked:[!0,!1]}),this.tblur=ha.BOOLEAN(s2.tblur),this.blur=ha.FLOAT(s2.blur,{visibleIf:{tblur:1}}),this.verticalBlurMult=ha.FLOAT(s2.verticalBlurMult,{visibleIf:{tblur:1}}),this.tblur2=ha.BOOLEAN(s2.tblur2,{visibleIf:{tblur:1}}),this.blur2=ha.FLOAT(s2.blur2,{visibleIf:{tblur:1,tblur2:1}}),this.verticalBlur2Mult=ha.FLOAT(s2.verticalBlur2Mult,{visibleIf:{tblur:1,tblur2:1}})}};class o2 extends uV{constructor(){super(...arguments),this.paramsConfig=r2}static type(){return\\\\\\\"reflector\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create a reflector from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(i2.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new i2(this._scene,this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var a2=n(85);var l2;!function(t){t.POINTS_COUNT=\\\\\\\"pointsCount\\\\\\\",t.SEGMENT_LENGTH=\\\\\\\"segmentLength\\\\\\\"}(l2||(l2={}));const c2=[l2.POINTS_COUNT,l2.SEGMENT_LENGTH];var h2;!function(t){t.CENTRIPETAL=\\\\\\\"centripetal\\\\\\\",t.CHORDAL=\\\\\\\"chordal\\\\\\\",t.CATMULLROM=\\\\\\\"catmullrom\\\\\\\"}(h2||(h2={}));const u2=[h2.CENTRIPETAL,h2.CHORDAL,h2.CATMULLROM];const d2=new class extends ua{constructor(){super(...arguments),this.method=ha.INTEGER(c2.indexOf(l2.POINTS_COUNT),{menu:{entries:c2.map(((t,e)=>({name:t,value:e})))}}),this.curveType=ha.INTEGER(u2.indexOf(h2.CATMULLROM),{range:[0,2],rangeLocked:[!0,!0],menu:{entries:u2.map(((t,e)=>({name:t,value:e})))}}),this.tension=ha.FLOAT(.01,{range:[0,1],rangeLocked:[!0,!0]}),this.pointsCount=ha.INTEGER(100,{visibleIf:{method:c2.indexOf(l2.POINTS_COUNT)},range:[1,1e3],rangeLocked:[!0,!1]}),this.segmentLength=ha.FLOAT(1,{visibleIf:{method:c2.indexOf(l2.SEGMENT_LENGTH)}})}};class p2 extends uV{constructor(){super(...arguments),this.paramsConfig=d2}static type(){return\\\\\\\"resample\\\\\\\"}initializeNode(){this.io.inputs.setCount(1)}cook(t){const e=t[0],n=[];if(this.pv.pointsCount>=2){const t=e.coreObjects();for(let e=0;e<t.length;e++){const i=t[e].object();if(i instanceof Ms.a){const t=this._resample(i);n.push(t)}}}this.setObjects(n)}_resample(t){var e;const n=t.geometry,i=new fr(n).points(),s=null===(e=n.getIndex())||void 0===e?void 0:e.array,r=G1.accumulated_curve_point_indices(s),o=[];for(let t=0;t<r.length;t++){const e=r[t].map((t=>i[t])),n=this._create_curve_from_points(e);n&&o.push(n)}const a=ur(o);return this.createObject(a,Ns.LINE_SEGMENTS)}_create_curve_from_points(t){if(t.length<=1)return;const e=t.map((t=>t.attribValue(\\\\\\\"position\\\\\\\"))),n=u2[this.pv.curveType],i=this.pv.tension,s=new a2.a(e,!1,n,i),r=this._get_points_from_curve(s);let o=[];const a=[];for(let t=0;t<r.length;t++){const e=r[t].toArray();o.push(e),t>0&&(a.push(t-1),a.push(t))}const l=new S.a;return l.setAttribute(\\\\\\\"position\\\\\\\",new C.c(o.flat(),3)),l.setIndex(a),l}_get_points_from_curve(t){const e=c2[this.pv.method];switch(e){case l2.POINTS_COUNT:return t.getSpacedPoints(Math.max(2,this.pv.pointsCount));case l2.SEGMENT_LENGTH:var n=t.getLength(),i=0!==this.pv.segmentLength?1+n/this.pv.segmentLength:2;return i=Math.max(2,i),t.getSpacedPoints(i)}os.unreachable(e)}}class _2 extends aV{static type(){return\\\\\\\"restAttributes\\\\\\\"}cook(t,e){const n=t[0].objectsWithGeo();return e.tposition&&this._create_rest_attribute(n,e.position,e.restP),e.tnormal&&this._create_rest_attribute(n,e.normal,e.restN),this.createCoreGroupFromObjects(n)}_create_rest_attribute(t,e,n){for(let i of t){const t=i.geometry;if(t){const i=t.getAttribute(e);i&&t.setAttribute(n,i.clone())}}}}_2.DEFAULT_PARAMS={tposition:!0,position:\\\\\\\"position\\\\\\\",restP:\\\\\\\"restP\\\\\\\",tnormal:!0,normal:\\\\\\\"normal\\\\\\\",restN:\\\\\\\"restN\\\\\\\"};const m2=_2.DEFAULT_PARAMS;const f2=new class extends ua{constructor(){super(...arguments),this.tposition=ha.BOOLEAN(m2.tposition),this.position=ha.STRING(m2.position,{visibleIf:{tposition:!0}}),this.restP=ha.STRING(m2.restP,{visibleIf:{tposition:!0}}),this.tnormal=ha.BOOLEAN(m2.tnormal),this.normal=ha.STRING(m2.normal,{visibleIf:{tnormal:!0}}),this.restN=ha.STRING(m2.restN,{visibleIf:{tnormal:!0}})}};class g2 extends uV{constructor(){super(...arguments),this.paramsConfig=f2}static type(){return\\\\\\\"restAttributes\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.FROM_NODE])}cook(t){this._operation=this._operation||new _2(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class v2 extends aV{constructor(){super(...arguments),this._core_transform=new bU}static type(){return\\\\\\\"roundedBox\\\\\\\"}cook(t,e){const n=t[0],i=n?this._cook_with_input(n,e):this._cook_without_input(e);return this.createCoreGroupFromGeometry(i)}_cook_without_input(t){const e=t.size,n=new ky(e.x,e.y,e.z,t.divisions,t.bevel);return n.translate(t.center.x,t.center.y,t.center.z),n.computeVertexNormals(),n}_cook_with_input(t,e){const n=e.divisions,i=t.boundingBox(),s=i.max.clone().sub(i.min),r=i.max.clone().add(i.min).multiplyScalar(.5),o=new ky(s.x,s.y,s.z,n,e.bevel),a=this._core_transform.translationMatrix(r);return o.applyMatrix4(a),o}}v2.DEFAULT_PARAMS={size:new p.a(1,1,1),divisions:2,bevel:.1,center:new p.a(0,0,0)},v2.INPUT_CLONED_STATE=Qi.NEVER;const y2=v2.DEFAULT_PARAMS;const x2=new class extends ua{constructor(){super(...arguments),this.size=ha.VECTOR3(y2.size),this.divisions=ha.INTEGER(y2.divisions,{range:[1,10],rangeLocked:[!0,!1]}),this.bevel=ha.FLOAT(y2.bevel,{range:[0,1],rangeLocked:[!0,!1]}),this.center=ha.VECTOR3(y2.center)}};class b2 extends uV{constructor(){super(...arguments),this.paramsConfig=x2}static type(){return\\\\\\\"roundedBox\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create bounding box from (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(v2.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new v2(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class w2 extends aV{static type(){return\\\\\\\"scatter\\\\\\\"}async cook(t,e){const n=t[0];let i=n.faces();const s=[];let r=0;const o=new Map;for(let t of i){const e=t.area();o.set(t.index(),e)}const a=f.sortBy(i,(t=>o.get(t.index())||-1));let l=0;for(let t of a)r+=o.get(t.index()),s[l]=r,l++;const c=[];let h=[];e.transferAttributes&&(h=n.attribNamesMatchingMask(e.attributesToTransfer));const u=new Map,d=new Map;for(let t of h)u.set(t,[]),d.set(t,n.attribSize(t));const p=new CX,_=2454*e.seed%Number.MAX_SAFE_INTEGER;await p.startWithCount(e.pointsCount,(t=>{const e=or.randFloat(_+t)*r;for(let t=0;t<s.length;t++){if(e<=s[t]){const n=a[t],i=n.randomPosition(e);i.toArray(c,c.length);for(let t of h){const e=n.attribValueAtPosition(t,i);null!=e&&(m.isNumber(e)?u.get(t).push(e):m.isVector(e)&&e.toArray(u.get(t),u.get(t).length))}break}}}));const g=new S.a;g.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(c),3));for(let t of h)g.setAttribute(t,new C.a(new Float32Array(u.get(t)),d.get(t)));if(e.addIdAttribute||e.addIdnAttribute){const t=e.pointsCount,n=f.range(t);e.addIdAttribute&&g.setAttribute(\\\\\\\"id\\\\\\\",new C.a(new Float32Array(n),1));const i=n.map((e=>e/(t-1)));e.addIdnAttribute&&g.setAttribute(\\\\\\\"idn\\\\\\\",new C.a(new Float32Array(i),1))}const v=this.createObject(g,Ns.POINTS);return this.createCoreGroupFromObjects([v])}}w2.DEFAULT_PARAMS={pointsCount:100,seed:0,transferAttributes:!0,attributesToTransfer:\\\\\\\"normal\\\\\\\",addIdAttribute:!0,addIdnAttribute:!0},w2.INPUT_CLONED_STATE=Qi.FROM_NODE;const T2=w2.DEFAULT_PARAMS;const A2=new class extends ua{constructor(){super(...arguments),this.pointsCount=ha.INTEGER(T2.pointsCount,{range:[0,100],rangeLocked:[!0,!1]}),this.seed=ha.INTEGER(T2.seed,{range:[0,100],rangeLocked:[!1,!1]}),this.transferAttributes=ha.BOOLEAN(T2.transferAttributes),this.attributesToTransfer=ha.STRING(T2.attributesToTransfer,{visibleIf:{transferAttributes:1}}),this.addIdAttribute=ha.BOOLEAN(T2.addIdAttribute),this.addIdnAttribute=ha.BOOLEAN(T2.addIdnAttribute)}};class M2 extends uV{constructor(){super(...arguments),this.paramsConfig=A2}static type(){return\\\\\\\"scatter\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to scatter points onto\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){this._operation=this._operation||new w2(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var E2;!function(t){t.MATRIX=\\\\\\\"matrix\\\\\\\",t.AXIS=\\\\\\\"axis\\\\\\\"}(E2||(E2={}));const S2=[E2.MATRIX,E2.AXIS];var C2;!function(t){t.BBOX_CENTER=\\\\\\\"bbox center\\\\\\\",t.BBOX_CENTER_OFFSET=\\\\\\\"bbox center offset\\\\\\\",t.CUSTOM=\\\\\\\"custom\\\\\\\"}(C2||(C2={}));const N2=[C2.BBOX_CENTER,C2.BBOX_CENTER_OFFSET,C2.CUSTOM];class L2 extends aV{constructor(){super(...arguments),this._m4=new A.a,this._axisNormalized=new p.a,this._center=new p.a,this._pointPos=new p.a,this._axisPlane=new Y.a,this._pointOnPlane=new p.a,this._delta=new p.a,this._deltaNormalized=new p.a,this._offset=new p.a}static type(){return\\\\\\\"shear\\\\\\\"}cook(t,e){const n=t[0].objects();return this._applyShear(n,e),t[0]}_applyShear(t,e){const n=S2[e.mode];switch(n){case E2.MATRIX:return this._applyMatrixShear(t,e);case E2.AXIS:return this._applyAxisShear(t,e)}os.unreachable(n)}_applyMatrixShear(t,e){this._m4.makeShear(e.xy,e.xz,e.yx,e.yz,e.zx,e.zy);for(let e of t){const t=e.geometry;t&&t.applyMatrix4(this._m4)}}_applyAxisShear(t,e){this._axisNormalized.copy(e.axis),this._axisNormalized.normalize();for(let n of t){const t=n.geometry;if(t){this._getAxisModeCenter(t,e),this._axisPlane.setFromNormalAndCoplanarPoint(e.planeAxis,this._center);const n=new fr(t).points();for(let t of n){t.getPosition(this._pointPos),this._axisPlane.projectPoint(this._pointPos,this._pointOnPlane),this._delta.copy(this._pointOnPlane).sub(this._pointPos);const n=this._delta.length();this._deltaNormalized.copy(this._delta).normalize(),this._offset.copy(this._axisNormalized).multiplyScalar(e.axisAmount*n),this._delta.dot(e.planeAxis)>0&&this._offset.multiplyScalar(-1),this._pointPos.add(this._offset),t.setPosition(this._pointPos)}}}}_getAxisModeCenter(t,e){const n=N2[e.centerMode];switch(n){case C2.BBOX_CENTER:return this._getAxisModeCenterBbox(t,e);case C2.BBOX_CENTER_OFFSET:return this._getAxisModeCenterBboxOffset(t,e);case C2.CUSTOM:return this._getAxisModeCenterCustom(e)}os.unreachable(n)}_getAxisModeCenterBbox(t,e){t.computeBoundingBox();const n=t.boundingBox;n?n.getCenter(this._center):this._center.set(0,0,0)}_getAxisModeCenterBboxOffset(t,e){this._getAxisModeCenterBbox(t,e),this._center.add(e.centerOffset)}_getAxisModeCenterCustom(t){return this._center.copy(t.center)}}var O2;L2.DEFAULT_PARAMS={mode:S2.indexOf(E2.AXIS),xy:0,xz:0,yx:0,yz:0,zx:0,zy:0,centerMode:N2.indexOf(C2.BBOX_CENTER),centerOffset:new p.a(0,0,0),center:new p.a(0,0,0),planeAxis:new p.a(0,0,1),axis:new p.a(0,1,0),axisAmount:0},L2.INPUT_CLONED_STATE=Qi.FROM_NODE,function(t){t.SHEAR=\\\\\\\"shear\\\\\\\",t.TRANSFORM=\\\\\\\"transform\\\\\\\",t.UV_LAYOUT=\\\\\\\"uvLayout\\\\\\\",t.UV_TRANSFORM=\\\\\\\"uvTransform\\\\\\\",t.UV_UNWRAP=\\\\\\\"uvUnwrap\\\\\\\"}(O2||(O2={}));const P2=L2.DEFAULT_PARAMS;const R2=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(P2.mode,{menu:{entries:S2.map(((t,e)=>({name:t,value:e})))}}),this.xy=ha.FLOAT(P2.xy,{visibleIf:{mode:S2.indexOf(E2.MATRIX)}}),this.xz=ha.FLOAT(P2.xz,{visibleIf:{mode:S2.indexOf(E2.MATRIX)}}),this.yx=ha.FLOAT(P2.yx,{visibleIf:{mode:S2.indexOf(E2.MATRIX)}}),this.yz=ha.FLOAT(P2.yz,{visibleIf:{mode:S2.indexOf(E2.MATRIX)}}),this.zx=ha.FLOAT(P2.zx,{visibleIf:{mode:S2.indexOf(E2.MATRIX)}}),this.zy=ha.FLOAT(P2.zy,{visibleIf:{mode:S2.indexOf(E2.MATRIX)}}),this.centerMode=ha.INTEGER(P2.centerMode,{visibleIf:{mode:S2.indexOf(E2.AXIS)},menu:{entries:N2.map(((t,e)=>({name:t,value:e})))}}),this.centerOffset=ha.VECTOR3(P2.centerOffset.toArray(),{visibleIf:{mode:S2.indexOf(E2.AXIS),centerMode:N2.indexOf(C2.BBOX_CENTER_OFFSET)}}),this.center=ha.VECTOR3(P2.center.toArray(),{visibleIf:{mode:S2.indexOf(E2.AXIS),centerMode:N2.indexOf(C2.CUSTOM)}}),this.planeAxis=ha.VECTOR3(P2.planeAxis.toArray(),{visibleIf:{mode:S2.indexOf(E2.AXIS)}}),this.axis=ha.VECTOR3(P2.axis.toArray(),{visibleIf:{mode:S2.indexOf(E2.AXIS)}}),this.axisAmount=ha.FLOAT(P2.axisAmount,{range:[-1,1],visibleIf:{mode:S2.indexOf(E2.AXIS)}})}};class I2 extends uV{constructor(){super(...arguments),this.paramsConfig=R2}static type(){return O2.SHEAR}static displayedInputNames(){return[\\\\\\\"geometries or objects to transform\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(L2.INPUT_CLONED_STATE)}setMode(t){this.p.mode.set(S2.indexOf(t))}cook(t){this._operation=this._operation||new L2(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const F2=new class extends ua{};class D2 extends uV{constructor(){super(...arguments),this.paramsConfig=F2}static type(){return\\\\\\\"skin\\\\\\\"}static displayedInputNames(){return[\\\\\\\"lines to create polygons from\\\\\\\",\\\\\\\"if used, lines from both inputs will be used\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2)}cook(t){switch(f.compact(this.io.inputs.inputs()).length){case 1:return this.process_one_input(t);case 2:return this.process_two_inputs(t);default:return this.states.error.set(\\\\\\\"inputs count not valid\\\\\\\")}}process_one_input(t){const e=t[0],n=this._get_line_segments(e),i=[];if(n){const t=n[0];if(t){const e=G1.line_segment_to_geometries(t.geometry);e.forEach(((t,n)=>{if(n>0){const s=e[n-1],r=this._skin(s,t);i.push(r)}}))}}this.setGeometries(i)}process_two_inputs(t){const e=t[0],n=t[1],i=this._get_line_segments(e),s=this._get_line_segments(n),r=f.sortBy([i,s],(t=>-t.length)),o=r[0],a=r[1],l=[];o.forEach(((t,e)=>{const n=a[e];if(null!=t&&null!=n){const e=t.geometry,i=n.geometry,s=this._skin(e,i);l.push(s)}})),this.setGeometries(l)}_get_line_segments(t){return t.objects().filter((t=>t.isLineSegments))}_skin(t,e){const n=new S.a;return new V1(n,t,e).process(),n}}var B2;!function(t){t.X=\\\\\\\"x\\\\\\\",t.Y=\\\\\\\"y\\\\\\\",t.Z=\\\\\\\"z\\\\\\\"}(B2||(B2={}));const z2=[B2.X,B2.Y,B2.Z];class k2 extends aV{constructor(){super(...arguments),this._pointPos=new p.a,this._positions=[],this._indicesByPos=new Map,this._indexDest=new Map,this._debugActive=!1}static type(){return\\\\\\\"sort\\\\\\\"}cook(t,e){const n=t[0],i=n.objectsWithGeo();for(let t of i)this._sortObject(t,e);return n}_debug(t){this._debugActive}_sortObject(t,e){const n=new br(t,0).points(),i=t.geometry.getIndex();if(!i)return void console.warn(\\\\\\\"geometry cannot be sorted since it has no index\\\\\\\");const s=i.array;this._positions=new Array(n.length),this._indicesByPos.clear(),this._indexDest.clear();const r=z2[e.axis];let o=0,a=0;for(let t of n){switch(t.getPosition(this._pointPos),r){case B2.X:o=this._pointPos.x;break;case B2.Y:o=this._pointPos.y;break;case B2.Z:o=this._pointPos.z}this._positions[a]=o,h.pushOnArrayAtEntry(this._indicesByPos,o,t.index()),a++}let l=this._positions.sort(((t,e)=>t-e));e.invert&&l.reverse();const c=new Array(n.length);a=0;const u=f.uniq(l);for(let t of u){const e=this._indicesByPos.get(t);if(e)for(let t of e)c[a]=t,this._indexDest.set(t,a),a++}const d=new Array(s.length);for(let t=0;t<s.length;t++){const e=s[t],n=this._indexDest.get(e);d[t]=n}t.geometry.setIndex(d);const p=fr.attribNames(t.geometry);for(let e of p){\\\\\\\"id\\\\\\\"==e&&(this._debugActive=!0);const n=t.geometry.getAttribute(e);this._updateAttribute(n,c),this._debugActive=!1}}_updateAttribute(t,e){const n=t.clone(),i=t.array,s=n.array,r=n.itemSize;this._debug(e);for(let t of e){const e=this._indexDest.get(t);if(this._debug(`${t} -> ${e}`),null!=e)for(let n=0;n<r;n++)s[e*r+n]=i[t*r+n];else console.warn(\\\\\\\"no old index found\\\\\\\")}t.array=s,t.needsUpdate=!0}}k2.DEFAULT_PARAMS={axis:z2.indexOf(B2.X),invert:!1},k2.INPUT_CLONED_STATE=Qi.FROM_NODE;const U2=k2.DEFAULT_PARAMS;const G2=new class extends ua{constructor(){super(...arguments),this.axis=ha.INTEGER(U2.axis,{menu:{entries:z2.map(((t,e)=>({name:t,value:e})))}}),this.invert=ha.BOOLEAN(U2.invert)}};class V2 extends uV{constructor(){super(...arguments),this.paramsConfig=G2}static type(){return\\\\\\\"sort\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to sort\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.FROM_NODE])}cook(t){this._operation=this._operation||new k2(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const H2=new class extends ua{constructor(){super(...arguments),this.startFrame=ha.INTEGER(Nl.START_FRAME)}};class j2 extends _V{constructor(){super(...arguments),this.paramsConfig=H2,this._last_simulated_frame=null,this.childrenDisplayController=new fV(this,{dependsOnDisplayNode:!1}),this.displayNodeController=new Fm(this,{onDisplayNodeRemove:()=>{},onDisplayNodeSet:()=>{},onDisplayNodeUpdate:()=>{}},{dependsOnDisplayNode:!1})}static type(){return\\\\\\\"solver\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4),this.io.inputs.initInputsClonedState(Qi.NEVER),this.addGraphInput(this.scene().timeController.graphNode)}previousFrameCoreGroup(){return this._previousFrameCoreGroup}async cook(t){this.pv.startFrame==this.scene().frame()&&this._reset(),this.computeSolverIfRequired()}_reset(){this._previousFrameCoreGroup=void 0,this._last_simulated_frame=null}computeSolverIfRequired(){const t=this.scene().frame(),e=this.pv.startFrame;t>=e&&(null==this._last_simulated_frame&&(this._last_simulated_frame=e-1),t>this._last_simulated_frame&&this._computeSolverMultipleTimes(t-this._last_simulated_frame))}_computeSolverMultipleTimes(t=1){for(let e=0;e<t;e++)this.computeSolver();this._last_simulated_frame=this.scene().frame()}async computeSolver(){const t=this.childrenDisplayController.output_node();if(t){const e=(await t.compute()).coreContent();e?(this._previousFrameCoreGroup=e,this.setCoreGroup(e)):t.states.error.active()?this.states.error.set(t.states.error.message()):(this._previousFrameCoreGroup=void 0,this.setObjects([]))}else this.states.error.set(\\\\\\\"no output node found inside subnet\\\\\\\")}isOnFrameStart(){return this.scene().frame()==this.pv.startFrame}}const W2=new class extends ua{};class q2 extends uV{constructor(){super(...arguments),this.paramsConfig=W2}static type(){return\\\\\\\"solverPreviousFrame\\\\\\\"}initializeNode(){this.addGraphInput(this.scene().timeController.graphNode)}async cook(){const t=this.parent();(null==t?void 0:t.type())!=j2.type()&&(this.states.error.set(`the parent is not a '${j2.type()}'`),this.cookController.endCook());const e=t.previousFrameCoreGroup();e?this.setCoreGroup(e):this.setObjects([])}}var X2;!function(t){t.DEFAULT=\\\\\\\"default\\\\\\\",t.ISOCAHEDRON=\\\\\\\"isocahedron\\\\\\\"}(X2||(X2={}));const Y2={default:0,isocahedron:1},$2=[X2.DEFAULT,X2.ISOCAHEDRON];class J2 extends aV{static type(){return\\\\\\\"sphere\\\\\\\"}cook(t,e){const n=t[0];return n?this._cook_with_input(n,e):this._cook_without_input(e)}_cook_without_input(t){const e=this._create_required_geometry(t);return e.translate(t.center.x,t.center.y,t.center.z),this.createCoreGroupFromGeometry(e)}_cook_with_input(t,e){const n=t.boundingBox(),i=n.max.clone().sub(n.min),s=n.max.clone().add(n.min).multiplyScalar(.5),r=this._create_required_geometry(e);return r.translate(e.center.x,e.center.y,e.center.z),r.translate(s.x,s.y,s.z),r.scale(i.x,i.y,i.z),this.createCoreGroupFromGeometry(r)}_create_required_geometry(t){return t.type==Y2.default?this._create_default_sphere(t):this._create_default_isocahedron(t)}_create_default_sphere(t){return t.open?new tG(t.radius,t.resolution.x,t.resolution.y,t.phiStart,t.phiLength,t.thetaStart,t.thetaLength):new tG(t.radius,t.resolution.x,t.resolution.y)}_create_default_isocahedron(t){return new bJ(t.radius,t.detail)}}J2.DEFAULT_PARAMS={type:Y2.default,radius:1,resolution:new d.a(30,30),open:!1,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:Math.PI,detail:1,center:new p.a(0,0,0)},J2.INPUT_CLONED_STATE=Qi.FROM_NODE;const Z2=J2.DEFAULT_PARAMS;const K2=new class extends ua{constructor(){super(...arguments),this.type=ha.INTEGER(Z2.type,{menu:{entries:$2.map((t=>({name:t,value:Y2[t]})))}}),this.radius=ha.FLOAT(Z2.radius,{visibleIf:{type:Y2.default}}),this.resolution=ha.VECTOR2(Z2.resolution,{visibleIf:{type:Y2.default}}),this.open=ha.BOOLEAN(Z2.open,{visibleIf:{type:Y2.default}}),this.phiStart=ha.FLOAT(Z2.phiStart,{range:[0,2*Math.PI],visibleIf:{type:Y2.default,open:!0}}),this.phiLength=ha.FLOAT(\\\\\\\"$PI*2\\\\\\\",{range:[0,2*Math.PI],visibleIf:{type:Y2.default,open:!0}}),this.thetaStart=ha.FLOAT(Z2.thetaStart,{range:[0,Math.PI],visibleIf:{type:Y2.default,open:!0}}),this.thetaLength=ha.FLOAT(\\\\\\\"$PI\\\\\\\",{range:[0,Math.PI],visibleIf:{type:Y2.default,open:!0}}),this.detail=ha.INTEGER(Z2.detail,{range:[0,5],rangeLocked:[!0,!1],visibleIf:{type:Y2.isocahedron}}),this.center=ha.VECTOR3(Z2.center)}};class Q2 extends uV{constructor(){super(...arguments),this.paramsConfig=K2}static type(){return\\\\\\\"sphere\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(J2.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new J2(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const t9=new class extends ua{constructor(){super(...arguments),this.attribType=ha.INTEGER(ks.indexOf(zs.NUMERIC),{menu:{entries:Us}}),this.attribName=ha.STRING(\\\\\\\"\\\\\\\")}};class e9 extends uV{constructor(){super(...arguments),this.paramsConfig=t9,this._new_objects=[]}static type(){return\\\\\\\"split\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to split in multiple objects\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1)}async cook(t){const e=t[0];this._new_objects=[],\\\\\\\"\\\\\\\"!=this.pv.attribName&&this._split_core_group(e),this.setObjects(this._new_objects)}async _split_core_group(t){const e=t.coreObjects();for(let t of e)this._split_core_object(t)}_split_core_object(t){let e=t.coreGeometry(),n=this.pv.attribName,i=new Map;if(e){const s=t.object(),r=e.pointsFromGeometry(),o=r[0];if(o){if(o.attribSize(n)!=Gs.FLOAT&&!o.isAttribIndexed(n))return void this.states.error.set(`attrib '${n}' must be a float or a string`);let t;if(o.isAttribIndexed(n))for(let e of r)t=e.indexedAttribValue(n),h.pushOnArrayAtEntry(i,t,e);else for(let e of r)t=e.attribValue(n),h.pushOnArrayAtEntry(i,t,e)}const a=Os(s.constructor);i.forEach(((t,e)=>{const i=fr.geometryFromPoints(t,a);if(i){const t=this.createObject(i,a);br.addAttribute(t,n,e),this._new_objects.push(t)}}))}}}const n9=new A.a,i9=new Q.a,s9=new p.a;class r9 extends J.a{constructor(){super(),this.uuid=On.h(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Geometry\\\\\\\",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}applyMatrix4(t){const e=(new G.a).getNormalMatrix(t);for(let e=0,n=this.vertices.length;e<n;e++){this.vertices[e].applyMatrix4(t)}for(let t=0,n=this.faces.length;t<n;t++){const n=this.faces[t];n.normal.applyMatrix3(e).normalize();for(let t=0,i=n.vertexNormals.length;t<i;t++)n.vertexNormals[t].applyMatrix3(e).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this}rotateX(t){return n9.makeRotationX(t),this.applyMatrix4(n9),this}rotateY(t){return n9.makeRotationY(t),this.applyMatrix4(n9),this}rotateZ(t){return n9.makeRotationZ(t),this.applyMatrix4(n9),this}translate(t,e,n){return n9.makeTranslation(t,e,n),this.applyMatrix4(n9),this}scale(t,e,n){return n9.makeScale(t,e,n),this.applyMatrix4(n9),this}lookAt(t){return i9.lookAt(t),i9.updateMatrix(),this.applyMatrix4(i9.matrix),this}fromBufferGeometry(t){const e=this,n=null!==t.index?t.index:void 0,i=t.attributes;if(void 0===i.position)return console.error(\\\\\\\"THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.\\\\\\\"),this;const s=i.position,r=i.normal,o=i.color,a=i.uv,l=i.uv2;void 0!==l&&(this.faceVertexUvs[1]=[]);for(let t=0;t<s.count;t++)e.vertices.push((new p.a).fromBufferAttribute(s,t)),void 0!==o&&e.colors.push((new D.a).fromBufferAttribute(o,t));function c(t,n,i,s){const c=void 0===o?[]:[e.colors[t].clone(),e.colors[n].clone(),e.colors[i].clone()],h=void 0===r?[]:[(new p.a).fromBufferAttribute(r,t),(new p.a).fromBufferAttribute(r,n),(new p.a).fromBufferAttribute(r,i)],u=new a9(t,n,i,h,c,s);e.faces.push(u),void 0!==a&&e.faceVertexUvs[0].push([(new d.a).fromBufferAttribute(a,t),(new d.a).fromBufferAttribute(a,n),(new d.a).fromBufferAttribute(a,i)]),void 0!==l&&e.faceVertexUvs[1].push([(new d.a).fromBufferAttribute(l,t),(new d.a).fromBufferAttribute(l,n),(new d.a).fromBufferAttribute(l,i)])}const h=t.groups;if(h.length>0)for(let t=0;t<h.length;t++){const e=h[t],i=e.start;for(let t=i,s=i+e.count;t<s;t+=3)void 0!==n?c(n.getX(t),n.getX(t+1),n.getX(t+2),e.materialIndex):c(t,t+1,t+2,e.materialIndex)}else if(void 0!==n)for(let t=0;t<n.count;t+=3)c(n.getX(t),n.getX(t+1),n.getX(t+2));else for(let t=0;t<s.count;t+=3)c(t,t+1,t+2);return this.computeFaceNormals(),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(s9).negate(),this.translate(s9.x,s9.y,s9.z),this}normalize(){this.computeBoundingSphere();const t=this.boundingSphere.center,e=this.boundingSphere.radius,n=0===e?1:1/e,i=new A.a;return i.set(n,0,0,-n*t.x,0,n,0,-n*t.y,0,0,n,-n*t.z,0,0,0,1),this.applyMatrix4(i),this}computeFaceNormals(){const t=new p.a,e=new p.a;for(let n=0,i=this.faces.length;n<i;n++){const i=this.faces[n],s=this.vertices[i.a],r=this.vertices[i.b],o=this.vertices[i.c];t.subVectors(o,r),e.subVectors(s,r),t.cross(e),t.normalize(),i.normal.copy(t)}}computeVertexNormals(t=!0){const e=new Array(this.vertices.length);for(let t=0,n=this.vertices.length;t<n;t++)e[t]=new p.a;if(t){const t=new p.a,n=new p.a;for(let i=0,s=this.faces.length;i<s;i++){const s=this.faces[i],r=this.vertices[s.a],o=this.vertices[s.b],a=this.vertices[s.c];t.subVectors(a,o),n.subVectors(r,o),t.cross(n),e[s.a].add(t),e[s.b].add(t),e[s.c].add(t)}}else{this.computeFaceNormals();for(let t=0,n=this.faces.length;t<n;t++){const n=this.faces[t];e[n.a].add(n.normal),e[n.b].add(n.normal),e[n.c].add(n.normal)}}for(let t=0,n=this.vertices.length;t<n;t++)e[t].normalize();for(let t=0,n=this.faces.length;t<n;t++){const n=this.faces[t],i=n.vertexNormals;3===i.length?(i[0].copy(e[n.a]),i[1].copy(e[n.b]),i[2].copy(e[n.c])):(i[0]=e[n.a].clone(),i[1]=e[n.b].clone(),i[2]=e[n.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeFlatVertexNormals(){this.computeFaceNormals();for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t],n=e.vertexNormals;3===n.length?(n[0].copy(e.normal),n[1].copy(e.normal),n[2].copy(e.normal)):(n[0]=e.normal.clone(),n[1]=e.normal.clone(),n[2]=e.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeMorphNormals(){for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t];e.__originalFaceNormal?e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone(),e.__originalVertexNormals||(e.__originalVertexNormals=[]);for(let t=0,n=e.vertexNormals.length;t<n;t++)e.__originalVertexNormals[t]?e.__originalVertexNormals[t].copy(e.vertexNormals[t]):e.__originalVertexNormals[t]=e.vertexNormals[t].clone()}const t=new r9;t.faces=this.faces;for(let e=0,n=this.morphTargets.length;e<n;e++){if(!this.morphNormals[e]){this.morphNormals[e]={},this.morphNormals[e].faceNormals=[],this.morphNormals[e].vertexNormals=[];const t=this.morphNormals[e].faceNormals,n=this.morphNormals[e].vertexNormals;for(let e=0,i=this.faces.length;e<i;e++){const e=new p.a,i={a:new p.a,b:new p.a,c:new p.a};t.push(e),n.push(i)}}const n=this.morphNormals[e];t.vertices=this.morphTargets[e].vertices,t.computeFaceNormals(),t.computeVertexNormals();for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t],i=n.faceNormals[t],s=n.vertexNormals[t];i.copy(e.normal),s.a.copy(e.vertexNormals[0]),s.b.copy(e.vertexNormals[1]),s.c.copy(e.vertexNormals[2])}}for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t];e.normal=e.__originalFaceNormal,e.vertexNormals=e.__originalVertexNormals}}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Ry.a),this.boundingBox.setFromPoints(this.vertices)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new MX.a),this.boundingSphere.setFromPoints(this.vertices)}merge(t,e,n=0){if(!t||!t.isGeometry)return void console.error(\\\\\\\"THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.\\\\\\\",t);let i;const s=this.vertices.length,r=this.vertices,o=t.vertices,a=this.faces,l=t.faces,c=this.colors,h=t.colors;void 0!==e&&(i=(new G.a).getNormalMatrix(e));for(let t=0,n=o.length;t<n;t++){const n=o[t].clone();void 0!==e&&n.applyMatrix4(e),r.push(n)}for(let t=0,e=h.length;t<e;t++)c.push(h[t].clone());for(let t=0,e=l.length;t<e;t++){const e=l[t];let r,o;const c=e.vertexNormals,h=e.vertexColors,u=new a9(e.a+s,e.b+s,e.c+s);u.normal.copy(e.normal),void 0!==i&&u.normal.applyMatrix3(i).normalize();for(let t=0,e=c.length;t<e;t++)r=c[t].clone(),void 0!==i&&r.applyMatrix3(i).normalize(),u.vertexNormals.push(r);u.color.copy(e.color);for(let t=0,e=h.length;t<e;t++)o=h[t],u.vertexColors.push(o.clone());u.materialIndex=e.materialIndex+n,a.push(u)}for(let e=0,n=t.faceVertexUvs.length;e<n;e++){const n=t.faceVertexUvs[e];void 0===this.faceVertexUvs[e]&&(this.faceVertexUvs[e]=[]);for(let t=0,i=n.length;t<i;t++){const i=n[t],s=[];for(let t=0,e=i.length;t<e;t++)s.push(i[t].clone());this.faceVertexUvs[e].push(s)}}}mergeMesh(t){t&&t.isMesh?(t.matrixAutoUpdate&&t.updateMatrix(),this.merge(t.geometry,t.matrix)):console.error(\\\\\\\"THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.\\\\\\\",t)}mergeVertices(t=4){const e={},n=[],i=[],s=Math.pow(10,t);for(let t=0,r=this.vertices.length;t<r;t++){const r=this.vertices[t],o=Math.round(r.x*s)+\\\\\\\"_\\\\\\\"+Math.round(r.y*s)+\\\\\\\"_\\\\\\\"+Math.round(r.z*s);void 0===e[o]?(e[o]=t,n.push(this.vertices[t]),i[t]=n.length-1):i[t]=i[e[o]]}const r=[];for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t];e.a=i[e.a],e.b=i[e.b],e.c=i[e.c];const n=[e.a,e.b,e.c];for(let e=0;e<3;e++)if(n[e]===n[(e+1)%3]){r.push(t);break}}for(let t=r.length-1;t>=0;t--){const e=r[t];this.faces.splice(e,1);for(let t=0,n=this.faceVertexUvs.length;t<n;t++)this.faceVertexUvs[t].splice(e,1)}const o=this.vertices.length-n.length;return this.vertices=n,o}setFromPoints(t){this.vertices=[];for(let e=0,n=t.length;e<n;e++){const n=t[e];this.vertices.push(new p.a(n.x,n.y,n.z||0))}return this}sortFacesByMaterialIndex(){const t=this.faces,e=t.length;for(let n=0;n<e;n++)t[n]._id=n;t.sort((function(t,e){return t.materialIndex-e.materialIndex}));const n=this.faceVertexUvs[0],i=this.faceVertexUvs[1];let s,r;n&&n.length===e&&(s=[]),i&&i.length===e&&(r=[]);for(let o=0;o<e;o++){const e=t[o]._id;s&&s.push(n[e]),r&&r.push(i[e])}s&&(this.faceVertexUvs[0]=s),r&&(this.faceVertexUvs[1]=r)}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"Geometry\\\\\\\",generator:\\\\\\\"Geometry.toJSON\\\\\\\"}};if(t.uuid=this.uuid,t.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}const e=[];for(let t=0;t<this.vertices.length;t++){const n=this.vertices[t];e.push(n.x,n.y,n.z)}const n=[],i=[],s={},r=[],o={},a=[],l={};for(let t=0;t<this.faces.length;t++){const e=this.faces[t],i=!0,s=!1,r=void 0!==this.faceVertexUvs[0][t],o=e.normal.length()>0,a=e.vertexNormals.length>0,l=1!==e.color.r||1!==e.color.g||1!==e.color.b,p=e.vertexColors.length>0;let _=0;if(_=c(_,0,0),_=c(_,1,i),_=c(_,2,s),_=c(_,3,r),_=c(_,4,o),_=c(_,5,a),_=c(_,6,l),_=c(_,7,p),n.push(_),n.push(e.a,e.b,e.c),n.push(e.materialIndex),r){const e=this.faceVertexUvs[0][t];n.push(d(e[0]),d(e[1]),d(e[2]))}if(o&&n.push(h(e.normal)),a){const t=e.vertexNormals;n.push(h(t[0]),h(t[1]),h(t[2]))}if(l&&n.push(u(e.color)),p){const t=e.vertexColors;n.push(u(t[0]),u(t[1]),u(t[2]))}}function c(t,e,n){return n?t|1<<e:t&~(1<<e)}function h(t){const e=t.x.toString()+t.y.toString()+t.z.toString();return void 0!==s[e]||(s[e]=i.length/3,i.push(t.x,t.y,t.z)),s[e]}function u(t){const e=t.r.toString()+t.g.toString()+t.b.toString();return void 0!==o[e]||(o[e]=r.length,r.push(t.getHex())),o[e]}function d(t){const e=t.x.toString()+t.y.toString();return void 0!==l[e]||(l[e]=a.length/2,a.push(t.x,t.y)),l[e]}return t.data={},t.data.vertices=e,t.data.normals=i,r.length>0&&(t.data.colors=r),a.length>0&&(t.data.uvs=[a]),t.data.faces=n,t}clone(){return(new r9).copy(this)}copy(t){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;const e=t.vertices;for(let t=0,n=e.length;t<n;t++)this.vertices.push(e[t].clone());const n=t.colors;for(let t=0,e=n.length;t<e;t++)this.colors.push(n[t].clone());const i=t.faces;for(let t=0,e=i.length;t<e;t++)this.faces.push(i[t].clone());for(let e=0,n=t.faceVertexUvs.length;e<n;e++){const n=t.faceVertexUvs[e];void 0===this.faceVertexUvs[e]&&(this.faceVertexUvs[e]=[]);for(let t=0,i=n.length;t<i;t++){const i=n[t],s=[];for(let t=0,e=i.length;t<e;t++){const e=i[t];s.push(e.clone())}this.faceVertexUvs[e].push(s)}}const s=t.morphTargets;for(let t=0,e=s.length;t<e;t++){const e={};if(e.name=s[t].name,void 0!==s[t].vertices){e.vertices=[];for(let n=0,i=s[t].vertices.length;n<i;n++)e.vertices.push(s[t].vertices[n].clone())}if(void 0!==s[t].normals){e.normals=[];for(let n=0,i=s[t].normals.length;n<i;n++)e.normals.push(s[t].normals[n].clone())}this.morphTargets.push(e)}const r=t.morphNormals;for(let t=0,e=r.length;t<e;t++){const e={};if(void 0!==r[t].vertexNormals){e.vertexNormals=[];for(let n=0,i=r[t].vertexNormals.length;n<i;n++){const i=r[t].vertexNormals[n],s={};s.a=i.a.clone(),s.b=i.b.clone(),s.c=i.c.clone(),e.vertexNormals.push(s)}}if(void 0!==r[t].faceNormals){e.faceNormals=[];for(let n=0,i=r[t].faceNormals.length;n<i;n++)e.faceNormals.push(r[t].faceNormals[n].clone())}this.morphNormals.push(e)}const o=t.skinWeights;for(let t=0,e=o.length;t<e;t++)this.skinWeights.push(o[t].clone());const a=t.skinIndices;for(let t=0,e=a.length;t<e;t++)this.skinIndices.push(a[t].clone());const l=t.lineDistances;for(let t=0,e=l.length;t<e;t++)this.lineDistances.push(l[t]);const c=t.boundingBox;null!==c&&(this.boundingBox=c.clone());const h=t.boundingSphere;return null!==h&&(this.boundingSphere=h.clone()),this.elementsNeedUpdate=t.elementsNeedUpdate,this.verticesNeedUpdate=t.verticesNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.lineDistancesNeedUpdate=t.lineDistancesNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,this}toBufferGeometry(){const t=(new o9).fromGeometry(this),e=new S.a,n=new Float32Array(3*t.vertices.length);if(e.setAttribute(\\\\\\\"position\\\\\\\",new C.a(n,3).copyVector3sArray(t.vertices)),t.normals.length>0){const n=new Float32Array(3*t.normals.length);e.setAttribute(\\\\\\\"normal\\\\\\\",new C.a(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){const n=new Float32Array(3*t.colors.length);e.setAttribute(\\\\\\\"color\\\\\\\",new C.a(n,3).copyColorsArray(t.colors))}if(t.uvs.length>0){const n=new Float32Array(2*t.uvs.length);e.setAttribute(\\\\\\\"uv\\\\\\\",new C.a(n,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){const n=new Float32Array(2*t.uvs2.length);e.setAttribute(\\\\\\\"uv2\\\\\\\",new C.a(n,2).copyVector2sArray(t.uvs2))}e.groups=t.groups;for(const n in t.morphTargets){const i=[],s=t.morphTargets[n];for(let t=0,e=s.length;t<e;t++){const e=s[t],n=new C.c(3*e.data.length,3);n.name=e.name,i.push(n.copyVector3sArray(e.data))}e.morphAttributes[n]=i}if(t.skinIndices.length>0){const n=new C.c(4*t.skinIndices.length,4);e.setAttribute(\\\\\\\"skinIndex\\\\\\\",n.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){const n=new C.c(4*t.skinWeights.length,4);e.setAttribute(\\\\\\\"skinWeight\\\\\\\",n.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(e.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(e.boundingBox=t.boundingBox.clone()),e}computeTangents(){console.error(\\\\\\\"THREE.Geometry: .computeTangents() has been removed.\\\\\\\")}computeLineDistances(){console.error(\\\\\\\"THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.\\\\\\\")}applyMatrix(t){return console.warn(\\\\\\\"THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().\\\\\\\"),this.applyMatrix4(t)}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}static createBufferGeometryFromObject(t){let e=new S.a;const n=t.geometry;if(t.isPoints||t.isLine){const t=new C.c(3*n.vertices.length,3),i=new C.c(3*n.colors.length,3);if(e.setAttribute(\\\\\\\"position\\\\\\\",t.copyVector3sArray(n.vertices)),e.setAttribute(\\\\\\\"color\\\\\\\",i.copyColorsArray(n.colors)),n.lineDistances&&n.lineDistances.length===n.vertices.length){const t=new C.c(n.lineDistances.length,1);e.setAttribute(\\\\\\\"lineDistance\\\\\\\",t.copyArray(n.lineDistances))}null!==n.boundingSphere&&(e.boundingSphere=n.boundingSphere.clone()),null!==n.boundingBox&&(e.boundingBox=n.boundingBox.clone())}else t.isMesh&&(e=n.toBufferGeometry());return e}}r9.prototype.isGeometry=!0;class o9{constructor(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}computeGroups(t){const e=[];let n,i,s;const r=t.faces;for(i=0;i<r.length;i++){const t=r[i];t.materialIndex!==s&&(s=t.materialIndex,void 0!==n&&(n.count=3*i-n.start,e.push(n)),n={start:3*i,materialIndex:s})}void 0!==n&&(n.count=3*i-n.start,e.push(n)),this.groups=e}fromGeometry(t){const e=t.faces,n=t.vertices,i=t.faceVertexUvs,s=i[0]&&i[0].length>0,r=i[1]&&i[1].length>0,o=t.morphTargets,a=o.length;let l;if(a>0){l=[];for(let t=0;t<a;t++)l[t]={name:o[t].name,data:[]};this.morphTargets.position=l}const c=t.morphNormals,h=c.length;let u;if(h>0){u=[];for(let t=0;t<h;t++)u[t]={name:c[t].name,data:[]};this.morphTargets.normal=u}const p=t.skinIndices,_=t.skinWeights,m=p.length===n.length,f=_.length===n.length;n.length>0&&0===e.length&&console.error(\\\\\\\"THREE.DirectGeometry: Faceless geometries are not supported.\\\\\\\");for(let t=0;t<e.length;t++){const g=e[t];this.vertices.push(n[g.a],n[g.b],n[g.c]);const v=g.vertexNormals;if(3===v.length)this.normals.push(v[0],v[1],v[2]);else{const t=g.normal;this.normals.push(t,t,t)}const y=g.vertexColors;if(3===y.length)this.colors.push(y[0],y[1],y[2]);else{const t=g.color;this.colors.push(t,t,t)}if(!0===s){const e=i[0][t];void 0!==e?this.uvs.push(e[0],e[1],e[2]):(console.warn(\\\\\\\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv \\\\\\\",t),this.uvs.push(new d.a,new d.a,new d.a))}if(!0===r){const e=i[1][t];void 0!==e?this.uvs2.push(e[0],e[1],e[2]):(console.warn(\\\\\\\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 \\\\\\\",t),this.uvs2.push(new d.a,new d.a,new d.a))}for(let t=0;t<a;t++){const e=o[t].vertices;l[t].data.push(e[g.a],e[g.b],e[g.c])}for(let e=0;e<h;e++){const n=c[e].vertexNormals[t];u[e].data.push(n.a,n.b,n.c)}m&&this.skinIndices.push(p[g.a],p[g.b],p[g.c]),f&&this.skinWeights.push(_[g.a],_[g.b],_[g.c])}return this.computeGroups(t),this.verticesNeedUpdate=t.verticesNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this}}class a9{constructor(t,e,n,i,s,r=0){this.a=t,this.b=e,this.c=n,this.normal=i&&i.isVector3?i:new p.a,this.vertexNormals=Array.isArray(i)?i:[],this.color=s&&s.isColor?s:new D.a,this.vertexColors=Array.isArray(s)?s:[],this.materialIndex=r}clone(){return(new this.constructor).copy(this)}copy(t){this.a=t.a,this.b=t.b,this.c=t.c,this.normal.copy(t.normal),this.color.copy(t.color),this.materialIndex=t.materialIndex;for(let e=0,n=t.vertexNormals.length;e<n;e++)this.vertexNormals[e]=t.vertexNormals[e].clone();for(let e=0,n=t.vertexColors.length;e<n;e++)this.vertexColors[e]=t.vertexColors[e].clone();return this}}var l9=function(t){this.subdivisions=void 0===t?1:t};l9.prototype.modify=function(t){var e=t.isBufferGeometry;(t=e?(new r9).fromBufferGeometry(t):t.clone()).mergeVertices(6);for(var n=this.subdivisions;n-- >0;)this.smooth(t);return t.computeFaceNormals(),t.computeVertexNormals(),e?t.toBufferGeometry():t},function(){var t=[\\\\\\\"a\\\\\\\",\\\\\\\"b\\\\\\\",\\\\\\\"c\\\\\\\"];function e(t,e,n){return n[Math.min(t,e)+\\\\\\\"_\\\\\\\"+Math.max(t,e)]}function n(t,e,n,i,s,r){var o,a=Math.min(t,e),l=Math.max(t,e),c=a+\\\\\\\"_\\\\\\\"+l;c in i?o=i[c]:(o={a:n[a],b:n[l],newEdge:null,faces:[]},i[c]=o);o.faces.push(s),r[t].edges.push(o),r[e].edges.push(o)}function i(t,e,n,i,s){t.push(new a9(e,n,i,void 0,void 0,s))}function s(t,e){return Math.abs(e-t)/2+Math.min(t,e)}function r(t,e,n,i){t.push([e.clone(),n.clone(),i.clone()])}l9.prototype.smooth=function(o){var a,l,c,h,u,_,m,f,g,v,y,x,b,w=new p.a,T=[];a=o.vertices,l=o.faces;var A,M,E,S,C,N,L,O,P,R,I,F,D,B,z=void 0!==(c=o.faceVertexUvs)[0]&&c[0].length>0;if(z)for(var k=0;k<c.length;k++)T.push([]);for(m in function(t,e,i,s){var r,o,a;for(r=0,o=t.length;r<o;r++)i[r]={edges:[]};for(r=0,o=e.length;r<o;r++)n((a=e[r]).a,a.b,t,s,a,i),n(a.b,a.c,t,s,a,i),n(a.c,a.a,t,s,a,i)}(a,l,v=new Array(a.length),y={}),x=[],y){for(M=y[m],E=new p.a,C=3/8,N=1/8,2!=(L=M.faces.length)&&(C=.5,N=0),E.addVectors(M.a,M.b).multiplyScalar(C),w.set(0,0,0),k=0;k<L;k++){for(S=M.faces[k],g=0;g<3&&((A=a[S[t[g]]])===M.a||A===M.b);g++);w.add(A)}w.multiplyScalar(N),E.add(w),M.newEdge=x.length,x.push(E)}for(b=[],m=0,f=a.length;m<f;m++){for(D=a[m],3==(_=(F=v[m].edges).length)?O=3/16:_>3&&(O=3/(8*_)),P=1-_*O,R=O,_<=2&&2==_&&(P=3/4,R=1/8),B=D.clone().multiplyScalar(P),w.set(0,0,0),k=0;k<_;k++)A=(I=F[k]).a!==D?I.a:I.b,w.add(A);w.multiplyScalar(R),B.add(w),b.push(B)}h=b.concat(x);var U,G,V,H,j,W,q,X=b.length;u=[];var Y=new d.a,$=new d.a,J=new d.a;for(m=0,f=l.length;m<f;m++)if(i(u,U=e((S=l[m]).a,S.b,y).newEdge+X,G=e(S.b,S.c,y).newEdge+X,V=e(S.c,S.a,y).newEdge+X,S.materialIndex),i(u,S.a,U,V,S.materialIndex),i(u,S.b,G,U,S.materialIndex),i(u,S.c,V,G,S.materialIndex),z)for(k=0;k<c.length;k++)j=(H=c[k][m])[0],W=H[1],q=H[2],Y.set(s(j.x,W.x),s(j.y,W.y)),$.set(s(W.x,q.x),s(W.y,q.y)),J.set(s(j.x,q.x),s(j.y,q.y)),r(T[k],Y,$,J),r(T[k],j,Y,J),r(T[k],W,$,Y),r(T[k],q,J,$);o.vertices=h,o.faces=u,z&&(o.faceVertexUvs=T)}}();class c9 extends aV{static type(){return\\\\\\\"subdivide\\\\\\\"}cook(t,e){const n=t[0],i=new l9(e.subdivisions);for(let t of n.objects()){const e=t.geometry;if(e){const n=i.modify(e);t.geometry=n}}return n}}c9.DEFAULT_PARAMS={subdivisions:1};const h9=c9.DEFAULT_PARAMS;const u9=new class extends ua{constructor(){super(...arguments),this.subdivisions=ha.INTEGER(h9.subdivisions,{range:[0,5],rangeLocked:[!0,!1]})}};class d9 extends uV{constructor(){super(...arguments),this.paramsConfig=u9}static type(){return\\\\\\\"subdivide\\\\\\\"}initializeNode(){this.io.inputs.setCount(1)}cook(t){this._operation=this._operation||new c9(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const p9=new class extends ua{};class _9 extends _V{constructor(){super(...arguments),this.paramsConfig=p9}static type(){return\\\\\\\"subnet\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4),this.io.inputs.initInputsClonedState(Qi.NEVER)}}const m9=new class extends ua{constructor(){super(...arguments),this.input=ha.INTEGER(0,{range:[0,3],rangeLocked:[!0,!0],callback:t=>{f9.PARAM_CALLBACK_reset(t)}})}};class f9 extends uV{constructor(){super(...arguments),this.paramsConfig=m9}static type(){return ns.INPUT}initializeNode(){this.io.inputs.setCount(0),this.lifecycle.add_on_add_hook((()=>{this.set_parent_input_dependency()}))}async cook(){const t=this.pv.input,e=this.parent();if(e){if(e.io.inputs.has_input(t)){const n=await e.containerController.requestInputContainer(t);if(n){const t=n.coreContent();if(t)return void this.setCoreGroup(t)}}else this.states.error.set(`parent has no input ${t}`);this.cookController.endCook()}else this.states.error.set(\\\\\\\"subnet input has no parent\\\\\\\")}static PARAM_CALLBACK_reset(t){t.set_parent_input_dependency()}set_parent_input_dependency(){this._current_parent_input_graph_node&&this.removeGraphInput(this._current_parent_input_graph_node);const t=this.parent();t&&(this._current_parent_input_graph_node=t.io.inputs.inputGraphNode(this.pv.input),this.addGraphInput(this._current_parent_input_graph_node))}}var g9=n(82);class v9 extends $g{constructor(t,e,n){super(t,e,n)}load(t){return new Promise((async(e,n)=>{const i=new g9.a(this.loadingManager),s=await this._urlToLoad();i.load(s,(i=>{try{const n=this._onLoaded(i,t);e(n)}catch(t){n([])}}))}))}parse(t,e){const n=new g9.a(this.loadingManager).parse(t);return this._onLoaded(n,e)}_onLoaded(t,e){const n=t.paths,i=new Fn.a;for(let t=0;t<n.length;t++){const s=n[t],r=s.userData,o=r.style.fill;e.drawFillShapes&&void 0!==o&&\\\\\\\"none\\\\\\\"!==o&&this._drawShapes(i,s,e);const a=r.style.stroke;e.drawStrokes&&void 0!==a&&\\\\\\\"none\\\\\\\"!==a&&this._drawStrokes(i,s,e)}return i}_drawShapes(t,e,n){const i=e.userData,s=new lt.a({color:(new D.a).setStyle(i.style.fill),opacity:i.style.fillOpacity,transparent:i.style.fillOpacity<1,side:w.z,depthWrite:!1,wireframe:n.fillShapesWireframe}),r=e.toShapes(!0);for(let e=0;e<r.length;e++){const n=r[e],i=new AJ(n),o=new B.a(i,s);t.add(o)}}_drawStrokes(t,e,n){const i=e.userData;if(n.strokesWireframe){const n=new As.a({color:(new D.a).setStyle(i.style.stroke),opacity:i.style.strokeOpacity,transparent:i.style.strokeOpacity<1,side:w.z,depthWrite:!1});for(let s=0,r=e.subPaths.length;s<r;s++){const r=e.subPaths[s],o=g9.a.pointsToStroke(r.getPoints(),i.style);if(o){const e=new Ms.a(o,n);t.add(e)}}}else{const n=new lt.a({color:(new D.a).setStyle(i.style.stroke),opacity:i.style.strokeOpacity,transparent:i.style.strokeOpacity<1,side:w.z,depthWrite:!1});for(let s=0,r=e.subPaths.length;s<r;s++){const r=e.subPaths[s],o=g9.a.pointsToStroke(r.getPoints(),i.style);if(o){const e=new B.a(o,n);t.add(e)}}}}}const y9=`${qg}/models/svg/tiger.svg`;class x9 extends aV{static type(){return\\\\\\\"svg\\\\\\\"}cook(t,e){const n=new v9(e.url,this.scene(),this._node);return new Promise((async t=>{const i=await n.load(e);for(let t of i.children)this._ensure_geometry_has_index(t);t(this.createCoreGroupFromObjects(i.children))}))}_ensure_geometry_has_index(t){const e=t.geometry;e&&this.createIndexIfNone(e)}}x9.DEFAULT_PARAMS={url:y9,drawFillShapes:!0,fillShapesWireframe:!1,drawStrokes:!0,strokesWireframe:!1};const b9=x9.DEFAULT_PARAMS;const w9=new class extends ua{constructor(){super(...arguments),this.url=ha.STRING(b9.url,{fileBrowse:{type:[Rr.SVG]}}),this.reload=ha.BUTTON(null,{callback:(t,e)=>{T9.PARAM_CALLBACK_reload(t)}}),this.drawFillShapes=ha.BOOLEAN(b9.drawFillShapes),this.fillShapesWireframe=ha.BOOLEAN(b9.fillShapesWireframe),this.drawStrokes=ha.BOOLEAN(b9.drawStrokes),this.strokesWireframe=ha.BOOLEAN(b9.strokesWireframe)}};class T9 extends uV{constructor(){super(...arguments),this.paramsConfig=w9}static type(){return\\\\\\\"svg\\\\\\\"}async requiredModules(){return[Hn.SVGLoader]}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.pv.url;if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){this._operation=this._operation||new x9(this.scene(),this.states,this);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}static PARAM_CALLBACK_reload(t){t.param_callback_reload()}param_callback_reload(){this.p.url.setDirty()}}const A9=\\\\\\\"geometry to switch to\\\\\\\";const M9=new class extends ua{constructor(){super(...arguments),this.input=ha.INTEGER(0,{range:[0,3],rangeLocked:[!0,!0]})}};class E9 extends uV{constructor(){super(...arguments),this.paramsConfig=M9}static type(){return\\\\\\\"switch\\\\\\\"}static displayedInputNames(){return[A9,A9,A9,A9]}initializeNode(){this.io.inputs.setCount(0,4),this.io.inputs.initInputsClonedState(Qi.NEVER),this.cookController.disallowInputsEvaluation()}async cook(){const t=this.pv.input;if(this.io.inputs.has_input(t)){const e=await this.containerController.requestInputContainer(t);if(e){const t=e.coreContent();if(t)return void this.setCoreGroup(t)}}else this.states.error.set(`no input ${t}`);this.cookController.endCook()}}class S9 extends zQ{constructor(t,e,n){super([1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e,n),this.type=\\\\\\\"TetrahedronBufferGeometry\\\\\\\",this.parameters={radius:t,detail:e}}}const C9=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(1),this.detail=ha.INTEGER(0,{range:[0,10],rangeLocked:[!0,!1]}),this.pointsOnly=ha.BOOLEAN(0),this.center=ha.VECTOR3([0,0,0])}};class N9 extends uV{constructor(){super(...arguments),this.paramsConfig=C9}static type(){return\\\\\\\"tetrahedron\\\\\\\"}cook(){const t=this.pv.pointsOnly,e=new S9(this.pv.radius,this.pv.detail,t);if(e.translate(this.pv.center.x,this.pv.center.y,this.pv.center.z),t){const t=this.createObject(e,Ns.POINTS);this.setObject(t)}else e.computeVertexNormals(),this.setGeometry(e)}}class L9 extends yJ{constructor(t,e={}){const n=e.font;if(!n||!n.isFont)return new S.a;const i=n.generateShapes(t,e.size);e.depth=void 0!==e.height?e.height:50,void 0===e.bevelThickness&&(e.bevelThickness=10),void 0===e.bevelSize&&(e.bevelSize=8),void 0===e.bevelEnabled&&(e.bevelEnabled=!1),super(i,e),this.type=\\\\\\\"TextGeometry\\\\\\\"}}var O9=n(48);class P9 extends Vf.a{constructor(t){super(t)}load(t,e,n,i){const s=this,r=new Gf.a(this.manager);r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(s.withCredentials),r.load(t,(function(t){let n;try{n=JSON.parse(t)}catch(e){console.warn(\\\\\\\"THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.\\\\\\\"),n=JSON.parse(t.substring(65,t.length-2))}const i=s.parse(n);e&&e(i)}),n,i)}parse(t){return new R9(t)}}class R9{constructor(t){this.type=\\\\\\\"Font\\\\\\\",this.data=t}generateShapes(t,e=100){const n=[],i=function(t,e,n){const i=Array.from(t),s=e/n.resolution,r=(n.boundingBox.yMax-n.boundingBox.yMin+n.underlineThickness)*s,o=[];let a=0,l=0;for(let t=0;t<i.length;t++){const e=i[t];if(\\\\\\\"\\\\n\\\\\\\"===e)a=0,l-=r;else{const t=I9(e,s,a,l,n);a+=t.offsetX,o.push(t.path)}}return o}(t,e,this.data);for(let t=0,e=i.length;t<e;t++)Array.prototype.push.apply(n,i[t].toShapes());return n}}function I9(t,e,n,i,s){const r=s.glyphs[t]||s.glyphs[\\\\\\\"?\\\\\\\"];if(!r)return void console.error('THREE.Font: character \\\\\\\"'+t+'\\\\\\\" does not exists in font family '+s.familyName+\\\\\\\".\\\\\\\");const o=new O9.a;let a,l,c,h,u,d,p,_;if(r.o){const t=r._cachedOutline||(r._cachedOutline=r.o.split(\\\\\\\" \\\\\\\"));for(let s=0,r=t.length;s<r;){switch(t[s++]){case\\\\\\\"m\\\\\\\":a=t[s++]*e+n,l=t[s++]*e+i,o.moveTo(a,l);break;case\\\\\\\"l\\\\\\\":a=t[s++]*e+n,l=t[s++]*e+i,o.lineTo(a,l);break;case\\\\\\\"q\\\\\\\":c=t[s++]*e+n,h=t[s++]*e+i,u=t[s++]*e+n,d=t[s++]*e+i,o.quadraticCurveTo(u,d,c,h);break;case\\\\\\\"b\\\\\\\":c=t[s++]*e+n,h=t[s++]*e+i,u=t[s++]*e+n,d=t[s++]*e+i,p=t[s++]*e+n,_=t[s++]*e+i,o.bezierCurveTo(u,d,p,_,c,h)}}}return{offsetX:r.ha*e,path:o}}R9.prototype.isFont=!0;class F9 extends $g{constructor(t,e,n){super(t,e,n),this._font_loader=new P9(this.loadingManager)}async load(){const t=this.extension(),e=await this._urlToLoad();switch(t){case\\\\\\\"ttf\\\\\\\":return this._loadTTF(e);case\\\\\\\"json\\\\\\\":return this._loadJSON(e);default:return null}}static requiredModules(t){switch(this.extension(t)){case\\\\\\\"ttf\\\\\\\":return[Hn.TTFLoader];case\\\\\\\"json\\\\\\\":return[Hn.SVGLoader]}}_loadTTF(t){return new Promise((async(e,n)=>{const i=await this._loadTTFLoader();i&&i.load(t,(t=>{const n=this._font_loader.parse(t);e(n)}),void 0,(()=>{n()}))}))}_loadJSON(t){return new Promise(((e,n)=>{this._font_loader.load(t,(t=>{e(t)}),void 0,(()=>{n()}))}))}async _loadTTFLoader(){const t=await li.modulesRegister.module(Hn.TTFLoader);if(t)return new t(this.loadingManager)}static async loadSVGLoader(){const t=await li.modulesRegister.module(Hn.SVGLoader);if(t)return t}}var D9;!function(t){t.MESH=\\\\\\\"mesh\\\\\\\",t.FLAT=\\\\\\\"flat\\\\\\\",t.LINE=\\\\\\\"line\\\\\\\",t.STROKE=\\\\\\\"stroke\\\\\\\"}(D9||(D9={}));const B9=[D9.MESH,D9.FLAT,D9.LINE,D9.STROKE],z9=\\\\\\\"failed to generate geometry. Try to remove some characters\\\\\\\";const k9=new class extends ua{constructor(){super(...arguments),this.font=ha.STRING(\\\\\\\"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/fonts/droid_sans_regular.typeface.json\\\\\\\",{fileBrowse:{type:[Rr.FONT]}}),this.text=ha.STRING(\\\\\\\"polygonjs\\\\\\\",{multiline:!0}),this.type=ha.INTEGER(0,{menu:{entries:B9.map(((t,e)=>({name:t,value:e})))}}),this.size=ha.FLOAT(1,{range:[0,1],rangeLocked:[!0,!1]}),this.extrude=ha.FLOAT(.1,{visibleIf:{type:B9.indexOf(D9.MESH)}}),this.segments=ha.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1],visibleIf:{type:B9.indexOf(D9.MESH)}}),this.strokeWidth=ha.FLOAT(.02,{visibleIf:{type:B9.indexOf(D9.STROKE)}})}};class U9 extends uV{constructor(){super(...arguments),this.paramsConfig=k9,this._loaded_fonts={}}static type(){return\\\\\\\"text\\\\\\\"}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.text],(()=>this.p.text.rawInput()))}))}))}async cook(){try{this._loaded_fonts[this.pv.font]=this._loaded_fonts[this.pv.font]||await this._loadFont()}catch(t){return void this.states.error.set(`count not load font (${this.pv.font})`)}const t=this._loaded_fonts[this.pv.font];if(t)switch(B9[this.pv.type]){case D9.MESH:return this._create_geometry_from_type_mesh(t);case D9.FLAT:return this._create_geometry_from_type_flat(t);case D9.LINE:return this._create_geometry_from_type_line(t);case D9.STROKE:return this._create_geometry_from_type_stroke(t);default:console.warn(\\\\\\\"type is not valid\\\\\\\")}}_create_geometry_from_type_mesh(t){const e=this.displayed_text(),n={font:t,size:this.pv.size,height:this.pv.extrude,curveSegments:this.pv.segments};try{const t=new L9(e,n);if(!t.index){const e=t.getAttribute(\\\\\\\"position\\\\\\\").array;t.setIndex(f.range(e.length/3))}this.setGeometry(t)}catch(t){this.states.error.set(z9)}}_create_geometry_from_type_flat(t){const e=this._get_shapes(t);if(e){var n=new AJ(e);this.setGeometry(n)}}_create_geometry_from_type_line(t){const e=this.shapes_from_font(t);if(e){const t=[],n=[];let i=0;for(let s=0;s<e.length;s++){const r=e[s].getPoints();for(let e=0;e<r.length;e++){const s=r[e];t.push(s.x),t.push(s.y),t.push(0),n.push(i),e>0&&e<r.length-1&&n.push(i),i+=1}}const s=new S.a;s.setAttribute(\\\\\\\"position\\\\\\\",new C.c(t,3)),s.setIndex(n),this.setGeometry(s,Ns.LINE_SEGMENTS)}}async _create_geometry_from_type_stroke(t){const e=this.shapes_from_font(t);if(e){const t=await F9.loadSVGLoader();if(!t)return;var n=t.getStrokeStyle(this.pv.strokeWidth,\\\\\\\"white\\\\\\\",\\\\\\\"miter\\\\\\\",\\\\\\\"butt\\\\\\\",4);const i=[];for(let s=0;s<e.length;s++){const r=e[s].getPoints(),o=12,a=.001,l=t.pointsToStroke(r,n,o,a);i.push(l)}const s=ur(i);this.setGeometry(s)}}shapes_from_font(t){const e=this._get_shapes(t);if(e){const t=[];for(let n=0;n<e.length;n++){const i=e[n];if(i.holes&&i.holes.length>0)for(let e=0;e<i.holes.length;e++){const n=i.holes[e];t.push(n)}}return e.push.apply(e,t),e}}_get_shapes(t){const e=this.displayed_text();try{return t.generateShapes(e,this.pv.size)}catch(t){this.states.error.set(z9)}}displayed_text(){return this.pv.text||\\\\\\\"\\\\\\\"}_loadFont(){return new F9(this.pv.font,this.scene(),this).load()}async requiredModules(){return this.p.font.isDirty()&&await this.p.font.compute(),F9.requiredModules(this.pv.font)}}class G9 extends aV{static type(){return\\\\\\\"TextureCopy\\\\\\\"}async cook(t,e){const n=t[0],i=t[1];let s;for(let t of i.objects())t.traverse((t=>{const n=t.material;n&&(m.isArray(n)||s||(s=n[e.textureName]))}));if(s)for(let t of n.objects())t.traverse((t=>{const n=t.material;if(n&&!m.isArray(n)){n[e.textureName]=s;const t=n.uniforms;if(t){const n=t[e.textureName];n&&(n.value=s)}n.needsUpdate=!0}}));return n}}G9.DEFAULT_PARAMS={textureName:\\\\\\\"map\\\\\\\"},G9.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.NEVER];const V9=G9.DEFAULT_PARAMS;const H9=new class extends ua{constructor(){super(...arguments),this.textureName=ha.STRING(V9.textureName)}};class j9 extends uV{constructor(){super(...arguments),this.paramsConfig=H9}static type(){return\\\\\\\"TextureCopy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to copy textures to\\\\\\\",\\\\\\\"objects to copy textures from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState(G9.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new G9(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class W9 extends aV{static type(){return\\\\\\\"textureProperties\\\\\\\"}async cook(t,e){const n=t[0],i=[];for(let t of n.objects())e.applyToChildren?t.traverse((t=>{i.push(t)})):i.push(t);const s=i.map((t=>this._update_object(t,e)));return await Promise.all(s),n}async _update_object(t,e){const n=t.material;n&&await this._update_material(n,e)}async _update_material(t,e){let n=t.map;n&&await this._update_texture(n,e)}async _update_texture(t,e){this._updateEncoding(t,e),this._updateMapping(t,e),this._updateWrap(t,e),await this._updateAnisotropy(t,e),this._updateFilter(t,e)}_updateEncoding(t,e){e.tencoding&&(t.encoding=e.encoding,t.needsUpdate=!0)}_updateMapping(t,e){e.tmapping&&(t.mapping=e.mapping)}_updateWrap(t,e){e.twrap&&(t.wrapS=e.wrapS,t.wrapT=e.wrapT)}async _updateAnisotropy(t,e){if(e.tanisotropy)if(e.useRendererMaxAnisotropy){const e=await li.renderersController.firstRenderer();e&&(t.anisotropy=e.capabilities.getMaxAnisotropy())}else t.anisotropy=e.anisotropy}_updateFilter(t,e){e.tminFilter&&(t.minFilter=e.minFilter),e.tmagFilter&&(t.magFilter=e.magFilter)}}W9.DEFAULT_PARAMS={applyToChildren:!1,tencoding:!1,encoding:w.U,tmapping:!1,mapping:w.Yc,twrap:!1,wrapS:w.wc,wrapT:w.wc,tanisotropy:!1,useRendererMaxAnisotropy:!1,anisotropy:2,tminFilter:!1,minFilter:Km,tmagFilter:!1,magFilter:Zm},W9.INPUT_CLONED_STATE=Qi.FROM_NODE;const q9=W9.DEFAULT_PARAMS;const X9=new class extends ua{constructor(){super(...arguments),this.applyToChildren=ha.BOOLEAN(q9.applyToChildren,{separatorAfter:!0}),this.tencoding=ha.BOOLEAN(q9.tencoding),this.encoding=ha.INTEGER(q9.encoding,{visibleIf:{tencoding:1},menu:{entries:og.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))}}),this.tmapping=ha.BOOLEAN(q9.tmapping),this.mapping=ha.INTEGER(q9.mapping,{visibleIf:{tmapping:1},menu:{entries:lg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))}}),this.twrap=ha.BOOLEAN(q9.twrap),this.wrapS=ha.INTEGER(q9.wrapS,{visibleIf:{twrap:1},menu:{entries:ag.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))}}),this.wrapT=ha.INTEGER(q9.wrapT,{visibleIf:{twrap:1},menu:{entries:ag.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},separatorAfter:!0}),this.tanisotropy=ha.BOOLEAN(q9.tanisotropy),this.useRendererMaxAnisotropy=ha.BOOLEAN(q9.useRendererMaxAnisotropy,{visibleIf:{tanisotropy:1}}),this.anisotropy=ha.INTEGER(q9.anisotropy,{visibleIf:{tanisotropy:1,useRendererMaxAnisotropy:0},range:[0,32],rangeLocked:[!0,!1]}),this.tminFilter=ha.BOOLEAN(0),this.minFilter=ha.INTEGER(q9.minFilter,{visibleIf:{tminFilter:1},menu:{entries:tf}}),this.tmagFilter=ha.BOOLEAN(0),this.magFilter=ha.INTEGER(q9.magFilter,{visibleIf:{tmagFilter:1},menu:{entries:Qm}})}};class Y9 extends uV{constructor(){super(...arguments),this.paramsConfig=X9}static type(){return\\\\\\\"textureProperties\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects with textures to change properties of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(W9.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new W9(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const $9=new p.a(0,0,1);class J9 extends aV{constructor(){super(...arguments),this._core_transform=new bU}static type(){return\\\\\\\"torus\\\\\\\"}cook(t,e){const n=e.radius,i=e.radiusTube,s=e.segmentsRadial,r=e.segmentsTube,o=new EJ(n,i,s,r);return o.translate(e.center.x,e.center.y,e.center.z),this._core_transform.rotateGeometry(o,$9,e.direction),this.createCoreGroupFromGeometry(o)}}J9.DEFAULT_PARAMS={radius:1,radiusTube:1,segmentsRadial:20,segmentsTube:12,direction:new p.a(0,1,0),center:new p.a(0,0,0)},J9.INPUT_CLONED_STATE=Qi.FROM_NODE;const Z9=J9.DEFAULT_PARAMS;const K9=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(Z9.radius,{range:[0,1]}),this.radiusTube=ha.FLOAT(Z9.radiusTube,{range:[0,1]}),this.segmentsRadial=ha.INTEGER(Z9.segmentsRadial,{range:[1,50],rangeLocked:[!0,!1]}),this.segmentsTube=ha.INTEGER(Z9.segmentsTube,{range:[1,50],rangeLocked:[!0,!1]}),this.direction=ha.VECTOR3(Z9.direction),this.center=ha.VECTOR3(Z9.center)}};class Q9 extends uV{constructor(){super(...arguments),this.paramsConfig=K9}static type(){return\\\\\\\"torus\\\\\\\"}cook(t){this._operation=this._operation||new J9(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class t3 extends aV{static type(){return\\\\\\\"torusKnot\\\\\\\"}cook(t,e){const n=e.radius,i=e.radiusTube,s=e.segmentsRadial,r=e.segmentsTube,o=e.p,a=e.q,l=new SJ(n,i,s,r,o,a);return l.translate(e.center.x,e.center.y,e.center.z),this.createCoreGroupFromGeometry(l)}}t3.DEFAULT_PARAMS={radius:1,radiusTube:1,segmentsRadial:64,segmentsTube:8,p:2,q:3,center:new p.a(0,0,0)},t3.INPUT_CLONED_STATE=Qi.FROM_NODE;const e3=t3.DEFAULT_PARAMS;const n3=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(e3.radius),this.radiusTube=ha.FLOAT(e3.radiusTube),this.segmentsRadial=ha.INTEGER(e3.segmentsRadial,{range:[1,128]}),this.segmentsTube=ha.INTEGER(e3.segmentsTube,{range:[1,32]}),this.p=ha.INTEGER(e3.p,{range:[1,10]}),this.q=ha.INTEGER(e3.q,{range:[1,10]}),this.center=ha.VECTOR3(e3.center)}};class i3 extends uV{constructor(){super(...arguments),this.paramsConfig=n3}static type(){return\\\\\\\"torusKnot\\\\\\\"}initializeNode(){}cook(t){this._operation=this._operation||new t3(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var s3;!function(t){t.SET_PARAMS=\\\\\\\"set params\\\\\\\",t.UPDATE_MATRIX=\\\\\\\"update matrix\\\\\\\"}(s3||(s3={}));const r3=[s3.SET_PARAMS,s3.UPDATE_MATRIX];class o3 extends aV{constructor(){super(...arguments),this._core_transform=new bU,this._point_pos=new p.a,this._object_scale=new p.a,this._r=new p.a,this._object_position=new p.a}static type(){return\\\\\\\"transform\\\\\\\"}cook(t,e){const n=t[0].objects();return this._apply_transform(n,e),t[0]}_apply_transform(t,e){const n=gU[e.applyOn];switch(n){case _U.GEOMETRIES:return this._update_geometries(t,e);case _U.OBJECTS:return this._update_objects(t,e)}os.unreachable(n)}_update_geometries(t,e){const n=this._matrix(e);if(\\\\\\\"\\\\\\\"===e.group.trim())for(let i of t){const t=i.geometry;t&&(t.translate(-e.pivot.x,-e.pivot.y,-e.pivot.z),t.applyMatrix4(n),t.translate(e.pivot.x,e.pivot.y,e.pivot.z))}else{const i=oV._fromObjects(t).pointsFromGroup(e.group);for(let t of i){const i=t.getPosition(this._point_pos).sub(e.pivot);i.applyMatrix4(n),t.setPosition(i.add(e.pivot))}}}_update_objects(t,e){const n=r3[e.objectMode];switch(n){case s3.SET_PARAMS:return this._update_objects_params(t,e);case s3.UPDATE_MATRIX:return this._update_objects_matrix(t,e)}os.unreachable(n)}_update_objects_params(t,e){for(let n of t){n.position.copy(e.t);const t=yU[e.rotationOrder];this._r.copy(e.r).multiplyScalar(On.a),n.rotation.set(this._r.x,this._r.y,this._r.z,t),this._object_scale.copy(e.s).multiplyScalar(e.scale),n.scale.copy(this._object_scale),n.updateMatrix()}}_update_objects_matrix(t,e){const n=this._matrix(e);for(let e of t)this._object_position.copy(e.position),e.position.multiplyScalar(0),e.updateMatrix(),e.applyMatrix4(n),e.position.add(this._object_position),e.updateMatrix()}_matrix(t){return this._core_transform.matrix(t.t,t.r,t.s,t.scale,yU[t.rotationOrder])}}o3.DEFAULT_PARAMS={applyOn:gU.indexOf(_U.GEOMETRIES),objectMode:r3.indexOf(s3.SET_PARAMS),group:\\\\\\\"\\\\\\\",rotationOrder:yU.indexOf(vU.XYZ),t:new p.a(0,0,0),r:new p.a(0,0,0),s:new p.a(1,1,1),scale:1,pivot:new p.a(0,0,0)},o3.INPUT_CLONED_STATE=Qi.FROM_NODE;const a3=o3.DEFAULT_PARAMS;const l3=new class extends ua{constructor(){super(...arguments),this.applyOn=ha.INTEGER(a3.applyOn,{menu:{entries:gU.map(((t,e)=>({name:t,value:e})))}}),this.objectMode=ha.INTEGER(a3.objectMode,{visibleIf:{applyOn:gU.indexOf(_U.OBJECTS)},menu:{entries:r3.map(((t,e)=>({name:t,value:e})))}}),this.group=ha.STRING(a3.group,{visibleIf:{applyOn:gU.indexOf(_U.GEOMETRIES)}}),this.rotationOrder=ha.INTEGER(a3.rotationOrder,{menu:{entries:yU.map(((t,e)=>({name:t,value:e})))}}),this.t=ha.VECTOR3(a3.t),this.r=ha.VECTOR3(a3.r),this.s=ha.VECTOR3(a3.s),this.scale=ha.FLOAT(a3.scale,{range:[0,10]}),this.pivot=ha.VECTOR3(a3.pivot,{visibleIf:{applyOn:gU.indexOf(_U.GEOMETRIES)}})}};class c3 extends uV{constructor(){super(...arguments),this.paramsConfig=l3}static type(){return O2.TRANSFORM}static displayedInputNames(){return[\\\\\\\"geometries or objects to transform\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(o3.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.applyOn],(()=>gU[this.pv.applyOn]))}))}))}setApplyOn(t){this.p.applyOn.set(gU.indexOf(t))}setObjectMode(t){this.p.objectMode.set(r3.indexOf(t))}cook(t){this._operation=this._operation||new o3(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const h3=new class extends ua{constructor(){super(...arguments),this.useSecondInput=ha.BOOLEAN(1),this.reference=ha.OPERATOR_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:ts.SOP},visibleIf:{useSecondInput:0}})}};class u3 extends uV{constructor(){super(...arguments),this.paramsConfig=h3}static type(){return\\\\\\\"transformCopy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to transform\\\\\\\",\\\\\\\"objects to copy transform from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER])}cook(t){this.pv.useSecondInput&&t[1]?this._copy_from_src_objects(t[0].objects(),t[1].objects()):this._copy_from_found_node(t[0].objects())}_copy_from_src_objects(t,e){let n,i;for(let s=0;s<t.length;s++)n=t[s],i=e[s],i.updateMatrix(),n.matrix.copy(i.matrix),n.matrix.decompose(n.position,n.quaternion,n.scale);this.setObjects(t)}async _copy_from_found_node(t){const e=this.p.reference.found_node_with_context(ts.SOP);if(e){const n=(await e.compute()).coreContent();if(n){const e=n.objects();return void this._copy_from_src_objects(t,e)}}this.setObjects(t)}}const d3=yU.indexOf(vU.XYZ),p3={menu:{entries:yU.map(((t,e)=>({name:t,value:e})))}};function _3(t){const e=[];for(let n=t+1;n<=6;n++)e.push({count:n});return{visibleIf:e}}const m3=new class extends ua{constructor(){super(...arguments),this.applyOn=ha.INTEGER(gU.indexOf(_U.GEOMETRIES),{menu:{entries:gU.map(((t,e)=>({name:t,value:e})))}}),this.count=ha.INTEGER(2,{range:[0,6],rangeLocked:[!0,!0]}),this.rotationOrder0=ha.INTEGER(d3,{separatorBefore:!0,...p3,..._3(0)}),this.r0=ha.VECTOR3([0,0,0],{..._3(0)}),this.rotationOrder1=ha.INTEGER(d3,{separatorBefore:!0,...p3,..._3(1)}),this.r1=ha.VECTOR3([0,0,0],{..._3(1)}),this.rotationOrder2=ha.INTEGER(d3,{separatorBefore:!0,...p3,..._3(2)}),this.r2=ha.VECTOR3([0,0,0],{..._3(2)}),this.rotationOrder3=ha.INTEGER(d3,{separatorBefore:!0,...p3,..._3(3)}),this.r3=ha.VECTOR3([0,0,0],{..._3(3)}),this.rotationOrder4=ha.INTEGER(d3,{separatorBefore:!0,...p3,..._3(4)}),this.r4=ha.VECTOR3([0,0,0],{..._3(4)}),this.rotationOrder5=ha.INTEGER(d3,{separatorBefore:!0,...p3,..._3(5)}),this.r5=ha.VECTOR3([0,0,0],{..._3(5)})}};class f3 extends uV{constructor(){super(...arguments),this.paramsConfig=m3,this._core_transform=new bU,this._t=new p.a(0,0,0),this._s=new p.a(1,1,1),this._scale=1}static type(){return\\\\\\\"transformMulti\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to transform\\\\\\\",\\\\\\\"objects to copy initial transform from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.applyOn],(()=>gU[this.pv.applyOn]))}))})),this.params.onParamsCreated(\\\\\\\"cache param pairs\\\\\\\",(()=>{this._rot_and_index_pairs=[[this.p.r0,this.p.rotationOrder0],[this.p.r1,this.p.rotationOrder1],[this.p.r2,this.p.rotationOrder2],[this.p.r3,this.p.rotationOrder3],[this.p.r4,this.p.rotationOrder4],[this.p.r5,this.p.rotationOrder5]]}))}cook(t){const e=t[0].objectsWithGeo(),n=t[1]?t[1].objectsWithGeo()[0]:void 0;this._apply_transforms(e,n),this.setObjects(e)}_apply_transforms(t,e){const n=gU[this.pv.applyOn];switch(n){case _U.GEOMETRIES:return this._apply_matrix_to_geometries(t,e);case _U.OBJECTS:return this._apply_matrix_to_objects(t,e)}os.unreachable(n)}_apply_matrix_to_geometries(t,e){if(!this._rot_and_index_pairs)return;if(e){const n=e.geometry;if(n){const e=[Ws.POSITION,Ws.NORMAL,Ws.TANGENT];for(let i of e){const e=n.attributes[i];for(let n of t){const t=n.geometry.attributes[i];e&&t&&Xs.copy(e,t)}}}}let n;for(let e=0;e<this.pv.count;e++){n=this._rot_and_index_pairs[e];const i=this._matrix(n[0].value,n[1].value);for(let e of t)e.geometry.applyMatrix4(i)}}_apply_matrix_to_objects(t,e){if(!this._rot_and_index_pairs)return;if(e)for(let n of t)n.matrix.copy(e.matrix),n.matrix.decompose(n.position,n.quaternion,n.scale);let n;for(let e=0;e<this.pv.count;e++){n=this._rot_and_index_pairs[e];const i=this._matrix(n[0].value,n[1].value);for(let e of t)e.applyMatrix4(i)}}_matrix(t,e){return this._core_transform.matrix(this._t,t,this._s,this._scale,yU[e])}}var g3;!function(t){t.RESET_OBJECT=\\\\\\\"reset objects transform\\\\\\\",t.CENTER_GEO=\\\\\\\"center geometries\\\\\\\",t.PROMOTE_GEO_TO_OBJECT=\\\\\\\"center geometry and transform object\\\\\\\"}(g3||(g3={}));const v3=[g3.RESET_OBJECT,g3.CENTER_GEO,g3.PROMOTE_GEO_TO_OBJECT];const y3=new class extends ua{constructor(){super(...arguments),this.mode=ha.INTEGER(v3.indexOf(g3.RESET_OBJECT),{menu:{entries:v3.map(((t,e)=>({name:t,value:e})))}})}};class x3 extends uV{constructor(){super(...arguments),this.paramsConfig=y3,this._bbox_center=new p.a,this._translate_matrix=new A.a}static type(){return\\\\\\\"transformReset\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to reset transform\\\\\\\",\\\\\\\"optional reference for center\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}setMode(t){this.p.mode.set(v3.indexOf(t))}cook(t){const e=v3[this.pv.mode];this._select_mode(e,t)}_select_mode(t,e){switch(t){case g3.RESET_OBJECT:return this._reset_objects(e);case g3.CENTER_GEO:return this._center_geos(e,!1);case g3.PROMOTE_GEO_TO_OBJECT:return this._center_geos(e,!0)}os.unreachable(t)}_reset_objects(t){const e=t[0],n=e.objects();for(let t of n)t.matrix.identity(),bU.decomposeMatrix(t);this.setCoreGroup(e)}_center_geos(t,e){const n=t[0],i=n.objectsWithGeo();let s=i;const r=t[1];r&&(s=r.objectsWithGeo());for(let t=0;t<i.length;t++){const n=i[t],r=s[t]||s[s.length-1],o=n.geometry,a=r.geometry;if(o&&a){a.computeBoundingBox();const t=a.boundingBox;t&&(t.getCenter(this._bbox_center),r.updateMatrixWorld(),this._bbox_center.applyMatrix4(r.matrixWorld),e&&(this._translate_matrix.identity(),this._translate_matrix.makeTranslation(this._bbox_center.x,this._bbox_center.y,this._bbox_center.z),n.matrix.multiply(this._translate_matrix),bU.decomposeMatrix(n),n.updateWorldMatrix(!1,!1)),this._translate_matrix.identity(),this._translate_matrix.makeTranslation(-this._bbox_center.x,-this._bbox_center.y,-this._bbox_center.z),o.applyMatrix4(this._translate_matrix))}}this.setCoreGroup(n)}}const b3=new p.a(0,1,0);const w3=new class extends ua{constructor(){super(...arguments),this.radius=ha.FLOAT(1,{range:[0,1]}),this.height=ha.FLOAT(1,{range:[0,1]}),this.segmentsRadial=ha.INTEGER(12,{range:[3,20],rangeLocked:[!0,!1]}),this.segmentsHeight=ha.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1]}),this.cap=ha.BOOLEAN(1),this.center=ha.VECTOR3([0,0,0]),this.direction=ha.VECTOR3([0,0,1])}};class T3 extends uV{constructor(){super(...arguments),this.paramsConfig=w3,this._core_transform=new bU}static type(){return\\\\\\\"tube\\\\\\\"}cook(){const t=new aG(this.pv.radius,this.pv.radius,this.pv.height,this.pv.segmentsRadial,this.pv.segmentsHeight,!this.pv.cap);this._core_transform.rotateGeometry(t,b3,this.pv.direction),t.translate(this.pv.center.x,this.pv.center.y,this.pv.center.z),this.setGeometry(t)}}function A3(t){return function(t){let e=0,n=0;for(const i of t)e+=i.w*i.h,n=Math.max(n,i.w);t.sort(((t,e)=>e.h-t.h));const i=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),n),h:1/0}];let s=0,r=0;for(const e of t)for(let t=i.length-1;t>=0;t--){const n=i[t];if(!(e.w>n.w||e.h>n.h)){if(e.x=n.x,e.y=n.y,r=Math.max(r,e.y+e.h),s=Math.max(s,e.x+e.w),e.w===n.w&&e.h===n.h){const e=i.pop();t<i.length&&(i[t]=e)}else e.h===n.h?(n.x+=e.w,n.w-=e.w):e.w===n.w?(n.y+=e.h,n.h-=e.h):(i.push({x:n.x+e.w,y:n.y,w:n.w-e.w,h:e.h}),n.y+=e.h,n.h-=e.h);break}}return{w:s,h:r,fill:e/(s*r)||0}}(t)}class M3 extends aV{static type(){return O2.UV_LAYOUT}cook(t,e){const n=t[0].objectsWithGeo(),i=[];for(let t of n){const e=t;e.isMesh&&i.push(e)}return this._layoutUVs(i,e),t[0]}_layoutUVs(t,e){var n;const i=[],s=new WeakMap,r=e.padding/e.res;let o=0;for(let a of t){a.geometry.hasAttribute(e.uv)||null===(n=this.states)||void 0===n||n.error.set(`attribute ${e.uv} not found`);const t={w:1+2*r,h:1+2*r};i.push(t),s.set(t,o),o++}const a=A3(i);for(let n of i){const i=n,o=s.get(n);if(null!=o){const n=t[o],s=n.geometry.getAttribute(e.uv).clone(),l=s.array;for(let t=0;t<s.array.length;t+=s.itemSize)l[t]=(s.array[t]+i.x+r)/a.w,l[t+1]=(s.array[t+1]+i.y+r)/a.h;n.geometry.setAttribute(e.uv2,s),n.geometry.getAttribute(e.uv2).needsUpdate=!0}}}}M3.DEFAULT_PARAMS={res:1024,padding:3,uv:\\\\\\\"uv\\\\\\\",uv2:\\\\\\\"uv2\\\\\\\"},M3.INPUT_CLONED_STATE=Qi.FROM_NODE;const E3=new class extends ua{constructor(){super(...arguments),this.res=ha.INTEGER(1024),this.padding=ha.INTEGER(3),this.uv=ha.STRING(\\\\\\\"uv\\\\\\\"),this.uv2=ha.STRING(\\\\\\\"uv2\\\\\\\")}};class S3 extends uV{constructor(){super(...arguments),this.paramsConfig=E3}static type(){return O2.UV_LAYOUT}static displayedInputNames(){return[\\\\\\\"geometries to unwrap UVs\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(M3.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new M3(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var C3;!function(t){t.CHANGE=\\\\\\\"change\\\\\\\",t.MOVEEND=\\\\\\\"moveend\\\\\\\"}(C3||(C3={}));class N3{constructor(t){this._callback=t,this._updateAlways=!0,this._listenerAdded=!1,this._listener=this._executeCallback.bind(this)}removeTarget(){this.setTarget(void 0)}setTarget(t){t||this._removeCameraEvent();const e=this._target;this._target=t,null!=this._target&&this._executeCallback(),(null!=this._target?this._target.uuid:void 0)!==(null!=e?e.uuid:void 0)&&this._addCameraEvent()}setUpdateAlways(t){this._removeCameraEvent(),this._updateAlways=t,this._addCameraEvent()}_currentEventName(){return this._updateAlways?C3.CHANGE:C3.MOVEEND}_addCameraEvent(){this._listenerAdded||null!=this._target&&(this._target.addEventListener(this._currentEventName(),this._listener),this._listenerAdded=!0)}_removeCameraEvent(){!0===this._listenerAdded&&null!=this._target&&(this._target.removeEventListener(this._currentEventName(),this._listener),this._listenerAdded=!1)}_executeCallback(){null!=this._target&&this._callback(this._target)}}const L3=new class extends ua{constructor(){super(...arguments),this.camera=ha.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{nodeSelection:{context:ts.OBJ}})}};class O3 extends uV{constructor(){super(...arguments),this.paramsConfig=L3,this._cameraController=new N3(this._updateUVsFromCamera.bind(this))}static type(){return\\\\\\\"uvProject\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){this._processed_core_group=t[0];const e=this.p.camera.found_node();null!=e?(this._camera_object=e.object,this._cameraController.setTarget(this._camera_object)):(this._camera_object=void 0,this._cameraController.removeTarget()),this.setCoreGroup(this._processed_core_group)}_updateUVsFromCamera(t){const e=this.parent();if(this._processed_core_group&&e){const t=this._processed_core_group.points(),n=e.object.matrixWorld;for(let e of t){const t=e.position(),i=this._vectorInCameraSpace(t,n);if(i){const t={x:1-(.5*i[0]+.5),y:.5*i[1]+.5};e.setAttribValue(\\\\\\\"uv\\\\\\\",t)}}}}_vectorInCameraSpace(t,e){if(this._camera_object)return t.applyMatrix4(e),t.project(this._camera_object).toArray()}}class P3 extends aV{static type(){return O2.UV_TRANSFORM}cook(t,e){const n=t[0].objectsWithGeo();for(let t of n){const n=t.geometry.getAttribute(e.attribName),i=n.array,s=i.length/2;for(let t=0;t<s;t++)i[2*t+0]=e.t.x+e.pivot.x+e.s.x*(i[2*t+0]-e.pivot.x),i[2*t+1]=e.t.y+e.pivot.y+e.s.y*(i[2*t+1]-e.pivot.y);n.needsUpdate=!0}return t[0]}}P3.DEFAULT_PARAMS={attribName:\\\\\\\"uv\\\\\\\",t:new d.a(0,0),s:new d.a(1,1),pivot:new d.a(0,0)},P3.INPUT_CLONED_STATE=Qi.FROM_NODE;const R3=P3.DEFAULT_PARAMS;const I3=new class extends ua{constructor(){super(...arguments),this.attribName=ha.STRING(R3.attribName),this.t=ha.VECTOR2(R3.t.toArray()),this.s=ha.VECTOR2(R3.s.toArray()),this.pivot=ha.VECTOR2(R3.pivot.toArray())}};class F3 extends uV{constructor(){super(...arguments),this.paramsConfig=I3}static type(){return O2.UV_TRANSFORM}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(P3.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new P3(this.scene(),this.states,this);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class D3 extends aV{static type(){return O2.UV_UNWRAP}cook(t,e){const n=t[0].objectsWithGeo();for(let t of n){const n=t;n.isMesh&&this._unwrapUVs(n,e)}return t[0]}_unwrapUVs(t,e){var n,i,s;const r=[],o=t.geometry,a=null===(n=o.getIndex())||void 0===n?void 0:n.array;if(!a)return;if(!(null===(i=o.attributes.position)||void 0===i?void 0:i.array))return;const l=null===(s=o.attributes[e.uv])||void 0===s?void 0:s.array;if(!l)return;const c=a.length/3;for(let t=0;t<c;t++)r.push({w:1,h:1});const h=A3(r),u=new Array(l.length);for(let t=0;t<c;t++){const e=r[t],n=e.x/h.w,i=e.y/h.h,s=e.w/h.w,o=e.h/h.h,l=2*a[3*t+0],c=2*a[3*t+1],d=2*a[3*t+2];u[l]=n,u[l+1]=i,u[c]=n+s,u[c+1]=i,u[d]=n,u[d+1]=i+o}o.setAttribute(e.uv,new C.c(u,2))}}D3.DEFAULT_PARAMS={uv:\\\\\\\"uv\\\\\\\"},D3.INPUT_CLONED_STATE=Qi.FROM_NODE;const B3=new class extends ua{constructor(){super(...arguments),this.uv=ha.STRING(\\\\\\\"uv\\\\\\\")}};class z3 extends uV{constructor(){super(...arguments),this.paramsConfig=B3}static type(){return O2.UV_UNWRAP}static displayedInputNames(){return[\\\\\\\"geometries to unwrap UVs\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(D3.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new D3(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class k3 extends aa{static context(){return ts.SOP}cook(){this.cookController.endCook()}}class U3 extends k3{}class G3 extends U3{constructor(){super(...arguments),this._children_controller_context=ts.ANIM}static type(){return es.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class V3 extends U3{constructor(){super(...arguments),this._children_controller_context=ts.COP}static type(){return es.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class H3 extends U3{constructor(){super(...arguments),this._children_controller_context=ts.EVENT}static type(){return es.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class j3 extends U3{constructor(){super(...arguments),this._children_controller_context=ts.MAT}static type(){return es.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class W3 extends k3{constructor(){super(...arguments),this.paramsConfig=new ef,this.effectsComposerController=new nf(this),this.displayNodeController=new Fm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=ts.POST}static type(){return es.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class q3 extends U3{constructor(){super(...arguments),this._children_controller_context=ts.ROP}static type(){return es.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class X3{constructor(t){this.param=t,this._require_dependency=!1}require_dependency(){return this._require_dependency}node(){return this._node=this._node||this.param.node}static requiredArguments(){return console.warn(\\\\\\\"Expression.Method._Base.required_arguments virtual method call. Please override\\\\\\\"),[]}static optionalArguments(){return[]}static minAllowedArgumentsCount(){return this.requiredArguments().length}static maxAllowedArgumentsCount(){return this.minAllowedArgumentsCount()+this.optionalArguments().length}static allowedArgumentsCount(t){return t>=this.minAllowedArgumentsCount()&&t<=this.maxAllowedArgumentsCount()}processArguments(t){throw\\\\\\\"Expression.Method._Base.process_arguments virtual method call. Please override\\\\\\\"}async getReferencedNodeContainer(t){const e=this.getReferencedNode(t);if(e){let t;if(t=e.isDirty()?await e.compute():e.containerController.container(),t){if(t.coreContent())return t}throw`referenced node invalid: ${e.path()}`}throw`invalid input (${t})`}getReferencedParam(t,e){const n=this.node();return n?bi.findParam(n,t,e):null}findReferencedGraphNode(t,e){if(!m.isNumber(t)){const n=t;return this.getReferencedNode(n,e)}{const e=t,n=this.node();if(n){return n.io.inputs.inputGraphNode(e)}}return null}getReferencedNode(t,e){let n=null;const i=this.node();if(m.isString(t)){if(i){const s=t;n=bi.findNode(i,s,e)}}else if(i){const e=t;n=i.io.inputs.input(e)}return n||null}findDependency(t){return null}createDependencyFromIndexOrPath(t){const e=new po,n=this.findReferencedGraphNode(t,e);return n?this.createDependency(n,t,e):(li.warn(\\\\\\\"node not found for path\\\\\\\",t),null)}createDependency(t,e,n){return Ur.create(this.param,e,t,n)}}class Y3 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"arguments list\\\\\\\"],[\\\\\\\"number\\\\\\\",\\\\\\\"index\\\\\\\"]]}processArguments(t){return new Promise(((e,n)=>{if(2==t.length){const n=t[0],i=t[1];e(n.split(\\\\\\\" \\\\\\\")[i])}else e(0)}))}}class $3 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"arguments list\\\\\\\"]]}processArguments(t){return new Promise(((e,n)=>{if(1==t.length){e(t[0].split(\\\\\\\" \\\\\\\").length)}else e(0)}))}}const J3=[\\\\\\\"min\\\\\\\",\\\\\\\"max\\\\\\\",\\\\\\\"size\\\\\\\",\\\\\\\"center\\\\\\\"],Z3=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"];class K3 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"vector name, min, max, size or center\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"component_name, x,y or z\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){let e=0;return new Promise((async(n,i)=>{if(t.length>=1){const s=t[0],r=t[1],o=t[2];let a=null;try{a=await this.getReferencedNodeContainer(s)}catch(t){i(t)}a&&(e=this._get_value_from_container(a,r,o),n(e))}else n(0)}))}_get_value_from_container(t,e,n){const i=t.boundingBox();if(!e)return i;if(J3.indexOf(e)>=0){let t=new p.a;switch(e){case\\\\\\\"size\\\\\\\":i.getSize(t);break;case\\\\\\\"center\\\\\\\":i.getCenter(t);break;default:t=i[e]}return n?Z3.indexOf(n)>=0?t[n]:-1:t}return-1}}class Q3 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"component_name, x,y or z\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(t.length>=1){const i=t[0],s=t[1];let r=null;try{r=await this.getReferencedNodeContainer(i)}catch(t){n(t)}if(r){const t=r.boundingBox(),n=t.min.clone().add(t.max).multiplyScalar(.5);if(s){const t=n[s];e(null!=t?t:0)}else e(n)}}else e(0)}))}}class t4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to param\\\\\\\"]]}findDependency(t){const e=new po,n=this.getReferencedParam(t,e);return n?this.createDependency(n,t,e):null}async processArguments(t){return new Promise((async(e,n)=>{let i=0;if(1==t.length){const s=t[0],r=this.getReferencedParam(s);if(r){r.isDirty()&&await r.compute();const t=r.value;null!=t&&(i=t,e(i))}else n(0)}}))}}class e4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to copy\\\\\\\"],[\\\\\\\"integer\\\\\\\",\\\\\\\"default value\\\\\\\"]]}static optionalArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"attribute name (optional)\\\\\\\"]]}findDependency(t){const e=this.findReferencedGraphNode(t);if(e&&\\\\\\\"copy\\\\\\\"==e.type()){const n=e.stamp_node;return this.createDependency(n,t)}return null}processArguments(t){return new Promise(((e,n)=>{if(2==t.length||3==t.length){const n=t[0],i=t[1],s=t[2],r=this.node(),o=r?bi.findNode(r,n):null;let a;o&&o.type()==DZ.type()&&(a=o.stamp_value(s)),null==a&&(a=i),e(a)}else e(0)}))}}class n4 extends X3{constructor(){super(...arguments),this._require_dependency=!0,this._resolution=new d.a}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"component_name: x or y\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}async processArguments(t){if(1==t.length||2==t.length){const e=t[0],n=t[1],i=await this.getReferencedNodeContainer(e);if(i){const t=i.resolution();if(!n)return this._resolution.set(t[0],t[1]),this._resolution;if([0,\\\\\\\"0\\\\\\\",\\\\\\\"x\\\\\\\"].includes(n))return t[0];if([1,\\\\\\\"1\\\\\\\",\\\\\\\"y\\\\\\\"].includes(n))return t[1]}}return-1}}class i4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[]}async processArguments(t){return new Promise((async(t,e)=>{t(ng.isMobile())}))}}class s4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[]}async processArguments(t){return new Promise((async(t,e)=>{t(ng.isTouchDevice())}))}}class r4 extends X3{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"javascript expression\\\\\\\"]]}async processArguments(t){let e=0;if(1==t.length){const n=t[0];if(this._function=this._function||this._create_function(n),this._function)try{e=this._function(this.param.scene(),this.param.node,this.param)}catch(t){console.warn(\\\\\\\"expression error\\\\\\\"),console.warn(t)}}return e}_create_function(t){return new Function(\\\\\\\"scene\\\\\\\",\\\\\\\"node\\\\\\\",\\\\\\\"param\\\\\\\",`return ${t}`)}}class o4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"attribute name\\\\\\\"],[\\\\\\\"index\\\\\\\",\\\\\\\"object index\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(3==t.length){const i=t[0],s=t[1],r=t[2];let o=null;try{o=await this.getReferencedNodeContainer(i)}catch(t){n(t)}if(o){e(this._get_value_from_container(o,s,r))}}else console.warn(`${t.length} given when expected 3`),e(0)}))}_get_value_from_container(t,e,n){const i=t.coreContent();if(i){const t=i.coreObjects()[n];return t?t.attribValue(e):0}return null}}class a4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(1==t.length){const i=t[0];let s;try{s=await this.getReferencedNodeContainer(i)}catch(t){return void n(t)}if(s){e(s.objectsCount())}}else e(0)}))}}class l4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"]]}findDependency(t){const e=this.findReferencedGraphNode(t);if(e){const n=e;if(n.nameController){const e=n.nameController.graph_node;return this.createDependency(e,t)}}return null}processArguments(t){return new Promise(((e,n)=>{if(1==t.length){const n=t[0],i=this.getReferencedNode(n);if(i){const t=i.name();e(ss.tailDigits(t))}else e(0)}else e(0)}))}}class c4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"]]}findDependency(t){const e=this.findReferencedGraphNode(t);if(e){const n=e;if(n.nameController){const e=n.nameController.graph_node;return this.createDependency(e,t)}}return null}processArguments(t){return new Promise(((e,n)=>{if(1==t.length){const n=t[0],i=this.getReferencedNode(n);if(i){e(i.name())}else e(0)}else e(0)}))}}class h4 extends X3{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"number\\\\\\\"]]}processArguments(t){return new Promise((e=>{const n=t[0]||2;e(`${t[1]||0}`.padStart(n,\\\\\\\"0\\\\\\\"))}))}}class u4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"attribute name\\\\\\\"],[\\\\\\\"index\\\\\\\",\\\\\\\"point index\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(3==t.length){const i=t[0],s=t[1],r=t[2];let o=null;try{o=await this.getReferencedNodeContainer(i)}catch(t){n(t)}if(o){e(this._get_value_from_container(o,s,r))}}else console.warn(`${t.length} given when expected 3`),e(0)}))}_get_value_from_container(t,e,n){const i=t.coreContent();if(i){const t=i.points()[n];return t?t.attribValue(e):0}return null}}class d4 extends X3{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(1==t.length){const i=t[0];let s;try{s=await this.getReferencedNodeContainer(i)}catch(t){return void n(t)}if(s){e(s.pointsCount())}}else e(0)}))}}class p4 extends X3{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"string to count characters of\\\\\\\"]]}async processArguments(t){let e=0;if(1==t.length){e=t[0].length}return e}}class _4 extends X3{static requiredArguments(){return[]}async processArguments(t){let e=\\\\\\\"\\\\\\\";for(let n of t)null==n&&(n=\\\\\\\"\\\\\\\"),e+=`${n}`;return e}}class m4 extends X3{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"string to get index from\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"char to find index of\\\\\\\"]]}async processArguments(t){let e=-1;if(2==t.length){const n=t[0],i=t[1];e=n.indexOf(i)}return e}}class f4 extends X3{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"string to get range from\\\\\\\"],[\\\\\\\"integer\\\\\\\",\\\\\\\"range start\\\\\\\"],[\\\\\\\"integer\\\\\\\",\\\\\\\"range size\\\\\\\"]]}async processArguments(t){let e=\\\\\\\"\\\\\\\";const n=t[0],i=t[1]||0;let s=t[2]||1;return n&&(e=n.substr(i,s)),e}}class g4 extends X3{constructor(){super(...arguments),this._require_dependency=!0,this._windowSize=new d.a}static requiredArguments(){return[[]]}findDependency(t){return this.param.addGraphInput(this.param.scene().windowController.graphNode()),null}processArguments(t){return new Promise((t=>{this._windowSize.set(window.innerWidth,window.innerHeight),t(this._windowSize)}))}}class v4{constructor(t,e){this._controller=t,this._node=e,this._deleted_params_data=new Map,this._created_spare_param_names=[],this._raw_input_serialized_by_param_name=new Map,this._init_value_serialized_by_param_name=new Map}get assembler(){return this._controller.assembler}createSpareParameters(){var t;const e={},n=this.assembler.param_configs(),i=n.map((t=>t.name())),s=b.clone(i);if(0==this._validateNames(s))return;b.clone(this._created_spare_param_names).concat(s).forEach((t=>{const n=this._node.params.get(t);if(n){this._raw_input_serialized_by_param_name.set(n.name(),n.rawInputSerialized()),this._init_value_serialized_by_param_name.set(n.name(),n.defaultValueSerialized());const t=rV.dispatch_param(n);if(t.required()){const e=t.data();this._deleted_params_data.set(n.name(),e)}}e.namesToDelete=e.namesToDelete||[],e.namesToDelete.push(t)}));for(let t of n)if(s.indexOf(t.name())>=0){const n=b.clone(t.param_options),i={spare:!0,computeOnDirty:!0,cook:!1},s=b.merge(n,i);let r=this._init_value_serialized_by_param_name.get(t.name());null==r&&(r=t.default_value);let o=this._raw_input_serialized_by_param_name.get(t.name());null==o&&(o=t.default_value),e.toAdd=e.toAdd||[],e.toAdd.push({name:t.name(),type:t.type(),init_value:r,raw_input:o,options:s})}this._node.params.updateParams(e),this._created_spare_param_names=(null===(t=e.toAdd)||void 0===t?void 0:t.map((t=>t.name)))||[];for(let t of n){const e=this._node.params.get(t.name());e&&(t.execute_callback(this._node,e),e.type()==Cr.OPERATOR_PATH&&setTimeout((async()=>{e.isDirty()&&await e.compute(),e.options.executeCallback()}),200))}}_validateNames(t){const e=b.clone(this._node.params.non_spare_names),n=f.intersection(t,e);if(n.length>0){const t=`${this._node.path()} attempts to create spare params called '${n.join(\\\\\\\", \\\\\\\")}' with same name as params`;return this._node.states.error.set(t),!1}return!0}}class y4{constructor(t,e){this.node=t,this._globals_handler=new Pf,this._compile_required=!0,this._assembler=new e(this.node),this._spare_params_controller=new v4(this,this.node)}set_assembler_globals_handler(t){(this._globals_handler?this._globals_handler.id():null)!=(t?t.id():null)&&(this._globals_handler=t,this.set_compilation_required_and_dirty(),this._assembler.reset_configs())}get assembler(){return this._assembler}get globals_handler(){return this._globals_handler}add_output_inputs(t){this._assembler.add_output_inputs(t)}add_globals_outputs(t){this._assembler.add_globals_outputs(t)}allow_attribute_exports(){return this._assembler.allow_attribute_exports()}setCompilationRequired(t=!0){this._compile_required=t}set_compilation_required_and_dirty(t){this.setCompilationRequired(),this.node.setDirty(t)}compileRequired(){return this._compile_required}post_compile(){this.createSpareParameters(),this.setCompilationRequired(!1)}createSpareParameters(){this._spare_params_controller.createSpareParameters()}addFilterFragmentShaderCallback(t,e){this.assembler._addFilterFragmentShaderCallback(t,e),this.setCompilationRequired()}removeFilterFragmentShaderCallback(t){this.assembler._removeFilterFragmentShaderCallback(t),this.setCompilationRequired()}}var x4;!function(t){t.FUNCTION_DECLARATION=\\\\\\\"function_declaration\\\\\\\",t.DEFINE=\\\\\\\"define\\\\\\\",t.BODY=\\\\\\\"body\\\\\\\"}(x4||(x4={}));class b4{constructor(t,e,n){this._name=t,this._input_names=e,this._dependencies=n}name(){return this._name}input_names(){return this._input_names}dependencies(){return this._dependencies}}class w4{constructor(t,e={}){this._name=t,this._options=e}name(){return this._name}default_from_attribute(){return this._options.default_from_attribute||!1}default(){return this._options.default}if_condition(){return this._options.if}prefix(){return this._options.prefix||\\\\\\\"\\\\\\\"}suffix(){return this._options.suffix||\\\\\\\"\\\\\\\"}postLines(){return this._options.postLines}}class T4{constructor(t){this._shader_name=t,this._definitions_by_node_id=new Map,this._body_lines_by_node_id=new Map}get shader_name(){return this._shader_name}addDefinitions(t,e){for(let n of e)h.pushOnArrayAtEntry(this._definitions_by_node_id,t.graphNodeId(),n)}definitions(t){return this._definitions_by_node_id.get(t.graphNodeId())}addBodyLines(t,e){for(let n of e)h.pushOnArrayAtEntry(this._body_lines_by_node_id,t.graphNodeId(),n)}body_lines(t){return this._body_lines_by_node_id.get(t.graphNodeId())}}class A4{constructor(t,e,n){this._shader_names=t,this._current_shader_name=e,this._assembler=n,this._lines_controller_by_shader_name=new Map;for(let t of this._shader_names)this._lines_controller_by_shader_name.set(t,new T4(t))}assembler(){return this._assembler}shaderNames(){return this._shader_names}set_current_shader_name(t){this._current_shader_name=t}get current_shader_name(){return this._current_shader_name}addDefinitions(t,e,n){if(0==e.length)return;n=n||this._current_shader_name;const i=this._lines_controller_by_shader_name.get(n);i&&i.addDefinitions(t,e)}definitions(t,e){const n=this._lines_controller_by_shader_name.get(t);if(n)return n.definitions(e)}addBodyLines(t,e,n){if(0==e.length)return;n=n||this._current_shader_name;const i=this._lines_controller_by_shader_name.get(n);i&&i.addBodyLines(t,e)}body_lines(t,e){const n=this._lines_controller_by_shader_name.get(t);if(n)return n.body_lines(e)}}const M4={[x4.FUNCTION_DECLARATION]:\\\\\\\"\\\\\\\",[x4.DEFINE]:\\\\\\\";\\\\\\\",[x4.BODY]:\\\\\\\";\\\\\\\"},E4={[x4.FUNCTION_DECLARATION]:\\\\\\\"\\\\\\\",[x4.DEFINE]:\\\\\\\"\\\\\\\",[x4.BODY]:\\\\\\\"\\\\t\\\\\\\"};class S4{static node_comment(t,e){let n=`// ${t.path()}`,i=E4[e];if(e==x4.BODY){let e=this.node_distance_to_material(t);t.type()==ns.OUTPUT&&(e+=1),i=i.repeat(e)}return e==x4.BODY&&(n=`${i}${n}`),n}static line_wrap(t,e,n){let i=!0;0!=e.indexOf(\\\\\\\"#if\\\\\\\")&&0!=e.indexOf(\\\\\\\"#endif\\\\\\\")||(i=!1);let s=E4[n];if(n==x4.BODY&&(s=s.repeat(this.node_distance_to_material(t))),e=`${s}${e}`,i){const t=e[e.length-1],i=M4[n];t!=i&&\\\\\\\"{\\\\\\\"!=t&&\\\\\\\"}\\\\\\\"!=t&&(e+=i)}return e}static post_line_separator(t){return t==x4.BODY?\\\\\\\"\\\\t\\\\\\\":\\\\\\\"\\\\\\\"}static node_distance_to_material(t){const e=t.parent();if(!e)return 0;if(e.context()!=t.context())return 1;{let n=1;return t.type()!=ns.INPUT&&t.type()!=ns.OUTPUT||(n=0),n+this.node_distance_to_material(e)}}}class C4{constructor(t,e,n){this._node_traverser=t,this._root_nodes_for_shader_method=e,this._assembler=n,this._param_configs_controller=new PF,this._param_configs_set_allowed=!0,this._lines=new Map}shaderNames(){return this._node_traverser.shaderNames()}buildFromNodes(t,e){this._node_traverser.traverse(t);const n=new Map;for(let t of this.shaderNames()){const e=this._node_traverser.nodes_for_shader_name(t);n.set(t,e)}const i=this._node_traverser.sorted_nodes();for(let t of this.shaderNames()){const e=this._root_nodes_for_shader_method(t);for(let i of e)h.pushOnArrayAtEntry(n,t,i)}const s=new Map;for(let t of i)s.set(t.graphNodeId(),!0);for(let e of t)s.get(e.graphNodeId())||(i.push(e),s.set(e.graphNodeId(),!0));for(let t of i)t.reset_code();for(let t of e)t.reset_code();this._shaders_collection_controller=new A4(this.shaderNames(),this.shaderNames()[0],this._assembler),this.reset();for(let t of this.shaderNames()){let e=n.get(t)||[];if(e=f.uniq(e),this._shaders_collection_controller.set_current_shader_name(t),e)for(let t of e)t.setLines(this._shaders_collection_controller)}if(this._param_configs_set_allowed){for(let t of e)t.setParamConfigs();this.setParamConfigs(e)}this.set_code_lines(i)}shaders_collection_controller(){return this._shaders_collection_controller}disallow_new_param_configs(){this._param_configs_set_allowed=!1}allow_new_param_configs(){this._param_configs_set_allowed=!0}reset(){for(let t of this.shaderNames()){const e=new Map;this._lines.set(t,e)}}param_configs(){return this._param_configs_controller.list()||[]}lines(t,e){var n;return(null===(n=this._lines.get(t))||void 0===n?void 0:n.get(e))||[]}all_lines(){return this._lines}setParamConfigs(t){this._param_configs_controller.reset();for(let e of t){const t=e.param_configs();if(t)for(let e of t)this._param_configs_controller.push(e)}}set_code_lines(t){for(let e of this.shaderNames())this.add_code_lines(t,e)}add_code_lines(t,e){this.addDefinitions(t,e,Af.FUNCTION,x4.FUNCTION_DECLARATION),this.addDefinitions(t,e,Af.UNIFORM,x4.DEFINE),this.addDefinitions(t,e,Af.VARYING,x4.DEFINE),this.addDefinitions(t,e,Af.ATTRIBUTE,x4.DEFINE),this.add_code_line_for_nodes_and_line_type(t,e,x4.BODY)}addDefinitions(t,e,n,i){if(!this._shaders_collection_controller)return;const s=[];for(let i of t){let t=this._shaders_collection_controller.definitions(e,i);if(t){t=t.filter((t=>t.definition_type==n));for(let e of t)s.push(e)}}if(s.length>0){const t=new Tf(s),n=t.uniq();if(t.errored)throw`code builder error: ${t.error_message}`;const r=new Map,o=new Map;for(let t of n){const e=t.node.graphNodeId();o.has(e)||o.set(e,!0),h.pushOnArrayAtEntry(r,e,t)}const a=this._lines.get(e);o.forEach(((t,e)=>{const n=r.get(e);if(n){const t=n[0];if(t){const e=S4.node_comment(t.node,i);h.pushOnArrayAtEntry(a,i,e);for(let e of n){const n=S4.line_wrap(t.node,e.line,i);h.pushOnArrayAtEntry(a,i,n)}const s=S4.post_line_separator(i);h.pushOnArrayAtEntry(a,i,s)}}}))}}add_code_line_for_nodes_and_line_type(t,e,n){var i=(t=t.filter((t=>{if(this._shaders_collection_controller){const n=this._shaders_collection_controller.body_lines(e,t);return n&&n.length>0}}))).length;for(let s=0;s<i;s++){const i=s==t.length-1;this.add_code_line_for_node_and_line_type(t[s],e,n,i)}}add_code_line_for_node_and_line_type(t,e,n,i){if(!this._shaders_collection_controller)return;const s=this._shaders_collection_controller.body_lines(e,t);if(s&&s.length>0){const r=this._lines.get(e),o=S4.node_comment(t,n);if(h.pushOnArrayAtEntry(r,n,o),f.uniq(s).forEach((e=>{e=S4.line_wrap(t,e,n),h.pushOnArrayAtEntry(r,n,e)})),n!=x4.BODY||!i){const t=S4.post_line_separator(n);h.pushOnArrayAtEntry(r,n,t)}}}}class N4{constructor(t,e,n){this._parent_node=t,this._shader_names=e,this._input_names_for_shader_name_method=n,this._leaves_graph_id=new Map,this._graph_ids_by_shader_name=new Map,this._outputs_by_graph_id=new Map,this._depth_by_graph_id=new Map,this._graph_id_by_depth=new Map,this._graph=this._parent_node.scene().graph}reset(){this._leaves_graph_id.clear(),this._graph_ids_by_shader_name.clear(),this._outputs_by_graph_id.clear(),this._depth_by_graph_id.clear(),this._graph_id_by_depth.clear(),this._shader_names.forEach((t=>{this._graph_ids_by_shader_name.set(t,new Map)}))}shaderNames(){return this._shader_names}input_names_for_shader_name(t,e){return this._input_names_for_shader_name_method(t,e)}traverse(t){this.reset();for(let t of this.shaderNames())this._leaves_graph_id.set(t,new Map);for(let e of this.shaderNames()){this._shader_name=e;for(let e of t)this.find_leaves_from_root_node(e),this.set_nodes_depth()}this._depth_by_graph_id.forEach(((t,e)=>{null!=t&&h.pushOnArrayAtEntry(this._graph_id_by_depth,t,e)}))}leaves_from_nodes(t){var e;this._shader_name=Mf.LEAVES_FROM_NODES_SHADER,this._graph_ids_by_shader_name.set(this._shader_name,new Map),this._leaves_graph_id.set(this._shader_name,new Map);for(let e of t)this.find_leaves(e);const n=[];return null===(e=this._leaves_graph_id.get(this._shader_name))||void 0===e||e.forEach(((t,e)=>{n.push(e)})),this._graph.nodesFromIds(n)}nodes_for_shader_name(t){const e=[];this._graph_id_by_depth.forEach(((t,n)=>{e.push(n)})),e.sort(((t,e)=>t-e));const n=[],i=new Map;return e.forEach((e=>{const s=this._graph_id_by_depth.get(e);s&&s.forEach((e=>{var s;if(null===(s=this._graph_ids_by_shader_name.get(t))||void 0===s?void 0:s.get(e)){const s=this._graph.nodeFromId(e);this.add_nodes_with_children(s,i,n,t)}}))})),n}sorted_nodes(){const t=[];this._graph_id_by_depth.forEach(((e,n)=>{t.push(n)})),t.sort(((t,e)=>t-e));const e=[],n=new Map;return t.forEach((t=>{const i=this._graph_id_by_depth.get(t);if(i)for(let t of i){const i=this._graph.nodeFromId(t);i&&this.add_nodes_with_children(i,n,e)}})),e}add_nodes_with_children(t,e,n,i){if(e.get(t.graphNodeId())||(n.push(t),e.set(t.graphNodeId(),!0)),t.type()==ns.INPUT){const s=t.parent();if(s){const r=this.sorted_nodes_for_shader_name_for_parent(s,i);for(let s of r)s.graphNodeId()!=t.graphNodeId()&&this.add_nodes_with_children(s,e,n,i)}}}sorted_nodes_for_shader_name_for_parent(t,e){const n=[];this._graph_id_by_depth.forEach(((t,e)=>{n.push(e)})),n.sort(((t,e)=>t-e));const i=[];n.forEach((n=>{const s=this._graph_id_by_depth.get(n);s&&s.forEach((n=>{var s;if(!e||(null===(s=this._graph_ids_by_shader_name.get(e))||void 0===s?void 0:s.get(n))){const e=this._graph.nodeFromId(n);e.parent()==t&&i.push(e)}}))}));const s=i[0];return t.context()==s.context()&&i.push(t),i}find_leaves_from_root_node(t){var e;null===(e=this._graph_ids_by_shader_name.get(this._shader_name))||void 0===e||e.set(t.graphNodeId(),!0);const n=this.input_names_for_shader_name(t,this._shader_name);if(n)for(let e of n){const n=t.io.inputs.named_input(e);n&&(h.pushOnArrayAtEntry(this._outputs_by_graph_id,n.graphNodeId(),t.graphNodeId()),this.find_leaves(n))}this._outputs_by_graph_id.forEach(((t,e)=>{this._outputs_by_graph_id.set(e,f.uniq(t))}))}find_leaves(t){var e;null===(e=this._graph_ids_by_shader_name.get(this._shader_name))||void 0===e||e.set(t.graphNodeId(),!0);const n=this._find_inputs_or_children(t),i=f.compact(n),s=f.uniq(i.map((t=>t.graphNodeId()))).map((t=>this._graph.nodeFromId(t)));if(s.length>0)for(let e of s)h.pushOnArrayAtEntry(this._outputs_by_graph_id,e.graphNodeId(),t.graphNodeId()),this.find_leaves(e);else this._leaves_graph_id.get(this._shader_name).set(t.graphNodeId(),!0)}_find_inputs_or_children(t){var e,n;if(t.type()==ns.INPUT)return(null===(e=t.parent())||void 0===e?void 0:e.io.inputs.inputs())||[];if(t.childrenAllowed()){return[null===(n=t.childrenController)||void 0===n?void 0:n.output_node()]}return t.io.inputs.inputs()}set_nodes_depth(){this._leaves_graph_id.forEach(((t,e)=>{t.forEach(((t,e)=>{this.set_node_depth(e)}))}))}set_node_depth(t,e=0){const n=this._depth_by_graph_id.get(t);null!=n?this._depth_by_graph_id.set(t,Math.max(n,e)):this._depth_by_graph_id.set(t,e);const i=this._outputs_by_graph_id.get(t);i&&i.forEach((t=>{this.set_node_depth(t,e+1)}))}}const L4=new Map([[Mf.VERTEX,\\\\\\\"#include <common>\\\\\\\"],[Mf.FRAGMENT,\\\\\\\"#include <common>\\\\\\\"]]),O4=new Map([[Mf.VERTEX,\\\\\\\"#include <color_vertex>\\\\\\\"],[Mf.FRAGMENT,\\\\\\\"vec4 diffuseColor = vec4( diffuse, opacity );\\\\\\\"]]),P4=new Map([[Mf.VERTEX,[\\\\\\\"#include <begin_vertex>\\\\\\\",\\\\\\\"#include <beginnormal_vertex>\\\\\\\"]],[Mf.FRAGMENT,[]]]);class R4 extends class{}{constructor(t){super(),this._gl_parent_node=t,this._shaders_by_name=new Map,this._lines=new Map,this._root_nodes=[],this._leaf_nodes=[],this._uniforms_time_dependent=!1,this._uniforms_resolution_dependent=!1}setGlParentNode(t){this._overriden_gl_parent_node=t}currentGlParentNode(){return this._overriden_gl_parent_node||this._gl_parent_node}compile(){}_template_shader_for_shader_name(t){var e,n;switch(t){case Mf.VERTEX:return null===(e=this.templateShader())||void 0===e?void 0:e.vertexShader;case Mf.FRAGMENT:return null===(n=this.templateShader())||void 0===n?void 0:n.fragmentShader}}get globals_handler(){var t;return null===(t=this.currentGlParentNode().assemblerController)||void 0===t?void 0:t.globals_handler}compileAllowed(){var t;return null!=(null===(t=this.currentGlParentNode().assemblerController)||void 0===t?void 0:t.globals_handler)}shaders_by_name(){return this._shaders_by_name}_build_lines(){for(let t of this.shaderNames()){const e=this._template_shader_for_shader_name(t);e&&this._replace_template(e,t)}}set_root_nodes(t){this._root_nodes=t}templateShader(){}addUniforms(t){for(let e of this.param_configs())t[e.uniform_name]=e.uniform;this.uniformsTimeDependent()&&(t.time={value:this.currentGlParentNode().scene().time()}),this.uniforms_resolution_dependent()&&(t.resolution={value:new d.a(1e3,1e3)})}root_nodes_by_shader_name(t){const e=[];for(let t of this._root_nodes)switch(t.type()){case OF.type():case IF.type():e.push(t);break;case wf.type():case Ff.type():e.push(t)}return e}leaf_nodes_by_shader_name(t){const e=[];for(let t of this._leaf_nodes)switch(t.type()){case II.type():e.push(t);break;case wf.type():}return e}set_node_lines_globals(t,e){}set_node_lines_output(t,e){}set_node_lines_attribute(t,e){}codeBuilder(){return this._code_builder=this._code_builder||this._create_code_builder()}_resetCodeBuilder(){this._code_builder=void 0}_create_code_builder(){const t=new N4(this.currentGlParentNode(),this.shaderNames(),((t,e)=>this.input_names_for_shader_name(t,e)));return new C4(t,(t=>this.root_nodes_by_shader_name(t)),this)}build_code_from_nodes(t){const e=Df.findParamGeneratingNodes(this.currentGlParentNode());this.codeBuilder().buildFromNodes(t,e)}allow_new_param_configs(){this.codeBuilder().allow_new_param_configs()}disallow_new_param_configs(){this.codeBuilder().disallow_new_param_configs()}builder_param_configs(){return this.codeBuilder().param_configs()}builder_lines(t,e){return this.codeBuilder().lines(t,e)}all_builder_lines(){return this.codeBuilder().all_lines()}param_configs(){return(this._param_config_owner||this.codeBuilder()).param_configs()}set_param_configs_owner(t){this._param_config_owner=t,this._param_config_owner?this.codeBuilder().disallow_new_param_configs():this.codeBuilder().allow_new_param_configs()}static output_input_connection_points(){return[new qo(\\\\\\\"position\\\\\\\",Uo.VEC3),new qo(\\\\\\\"normal\\\\\\\",Uo.VEC3),new qo(\\\\\\\"color\\\\\\\",Uo.VEC3),new qo(\\\\\\\"alpha\\\\\\\",Uo.FLOAT),new qo(\\\\\\\"uv\\\\\\\",Uo.VEC2)]}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints(R4.output_input_connection_points())}static create_globals_node_output_connections(){return[new qo(\\\\\\\"position\\\\\\\",Uo.VEC3),new qo(\\\\\\\"normal\\\\\\\",Uo.VEC3),new qo(\\\\\\\"color\\\\\\\",Uo.VEC3),new qo(\\\\\\\"uv\\\\\\\",Uo.VEC2),new qo(\\\\\\\"mvPosition\\\\\\\",Uo.VEC4),new qo(\\\\\\\"worldPosition\\\\\\\",Uo.VEC4),new qo(\\\\\\\"worldNormal\\\\\\\",Uo.VEC3),new qo(\\\\\\\"gl_Position\\\\\\\",Uo.VEC4),new qo(\\\\\\\"gl_FragCoord\\\\\\\",Uo.VEC4),new qo(\\\\\\\"cameraPosition\\\\\\\",Uo.VEC3),new qo(\\\\\\\"resolution\\\\\\\",Uo.VEC2),new qo(\\\\\\\"time\\\\\\\",Uo.FLOAT)]}create_globals_node_output_connections(){return R4.create_globals_node_output_connections()}add_globals_outputs(t){t.io.outputs.setNamedOutputConnectionPoints(this.create_globals_node_output_connections())}allow_attribute_exports(){return!1}reset_configs(){this._reset_shader_configs(),this._reset_variable_configs(),this._resetUniformsTimeDependency(),this._reset_uniforms_resolution_dependency()}shaderConfigs(){return this._shader_configs=this._shader_configs||this.create_shader_configs()}set_shader_configs(t){this._shader_configs=t}shaderNames(){var t;return(null===(t=this.shaderConfigs())||void 0===t?void 0:t.map((t=>t.name())))||[]}_reset_shader_configs(){this._shader_configs=void 0}create_shader_configs(){return[new b4(Mf.VERTEX,[\\\\\\\"position\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"uv\\\\\\\",Ff.INPUT_NAME],[]),new b4(Mf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\"],[Mf.VERTEX])]}shader_config(t){var e;return null===(e=this.shaderConfigs())||void 0===e?void 0:e.filter((e=>e.name()==t))[0]}variable_configs(){return this._variable_configs=this._variable_configs||this.create_variable_configs()}set_variable_configs(t){this._variable_configs=t}variable_config(t){return this.variable_configs().filter((e=>e.name()==t))[0]}static create_variable_configs(){return[new w4(\\\\\\\"position\\\\\\\",{default_from_attribute:!0,prefix:\\\\\\\"vec3 transformed = \\\\\\\"}),new w4(\\\\\\\"normal\\\\\\\",{default_from_attribute:!0,prefix:\\\\\\\"vec3 objectNormal = \\\\\\\",postLines:[\\\\\\\"#ifdef USE_TANGENT\\\\\\\",\\\\\\\"\\\\tvec3 objectTangent = vec3( tangent.xyz );\\\\\\\",\\\\\\\"#endif\\\\\\\"]}),new w4(\\\\\\\"color\\\\\\\",{prefix:\\\\\\\"diffuseColor.xyz = \\\\\\\"}),new w4(\\\\\\\"alpha\\\\\\\",{prefix:\\\\\\\"diffuseColor.a = \\\\\\\"}),new w4(\\\\\\\"uv\\\\\\\",{prefix:\\\\\\\"vUv = \\\\\\\",if:Pf.IF_RULE.uv})]}create_variable_configs(){return R4.create_variable_configs()}_reset_variable_configs(){this._variable_configs=void 0,this.variable_configs()}input_names_for_shader_name(t,e){var n;return(null===(n=this.shader_config(e))||void 0===n?void 0:n.input_names())||[]}_resetUniformsTimeDependency(){this._uniforms_time_dependent=!1}setUniformsTimeDependent(){this._uniforms_time_dependent=!0}uniformsTimeDependent(){return this._uniforms_time_dependent}_reset_uniforms_resolution_dependency(){this._uniforms_resolution_dependent=!1}set_uniforms_resolution_dependent(){this._uniforms_resolution_dependent=!0}uniforms_resolution_dependent(){return this._uniforms_resolution_dependent}insert_define_after(t){return L4.get(t)}insert_body_after(t){return O4.get(t)}lines_to_remove(t){return P4.get(t)}_replace_template(t,e){const n=this.builder_lines(e,x4.FUNCTION_DECLARATION),i=this.builder_lines(e,x4.DEFINE),s=this.builder_lines(e,x4.BODY);let r=t.split(\\\\\\\"\\\\n\\\\\\\");const o=[],a=this.insert_define_after(e),l=this.insert_body_after(e),c=this.lines_to_remove(e);let h=!1,u=!1;for(let t of r){1==h&&(n&&this._insert_lines(o,n),i&&this._insert_lines(o,i),h=!1),1==u&&(s&&this._insert_lines(o,s),u=!1);let e=!1;if(c)for(let n of c)t.indexOf(n)>=0&&(e=!0);e?(o.push(\\\\\\\"// removed:\\\\\\\"),o.push(`//${t}`)):o.push(t),a&&t.indexOf(a)>=0&&(h=!0),l&&t.indexOf(l)>=0&&(u=!0)}this._lines.set(e,o)}_insert_lines(t,e){if(e.length>0){for(let e=0;e<3;e++)t.push(\\\\\\\"\\\\\\\");for(let n of e)t.push(n);for(let e=0;e<3;e++)t.push(\\\\\\\"\\\\\\\")}}_addFilterFragmentShaderCallback(t,e){}_removeFilterFragmentShaderCallback(t){}getCustomMaterials(){return new Map}static expandShader(t){return function t(e){return e.replace(/^[ \\\\t]*#include +<([\\\\w\\\\d./]+)>/gm,(function(e,n){var i=U[n];if(void 0===i)throw new Error(\\\\\\\"Can not resolve #include <\\\\\\\"+n+\\\\\\\">\\\\\\\");return t(i)}))}(t)}}var I4,F4;!function(t){t.DISTANCE=\\\\\\\"customDistanceMaterial\\\\\\\",t.DEPTH=\\\\\\\"customDepthMaterial\\\\\\\",t.DEPTH_DOF=\\\\\\\"customDepthDOFMaterial\\\\\\\"}(I4||(I4={})),function(t){t.TIME=\\\\\\\"time\\\\\\\",t.RESOLUTION=\\\\\\\"resolution\\\\\\\",t.MV_POSITION=\\\\\\\"mvPosition\\\\\\\",t.GL_POSITION=\\\\\\\"gl_Position\\\\\\\",t.GL_FRAGCOORD=\\\\\\\"gl_FragCoord\\\\\\\",t.GL_POINTCOORD=\\\\\\\"gl_PointCoord\\\\\\\"}(F4||(F4={}));const D4=[F4.GL_FRAGCOORD,F4.GL_POINTCOORD];class B4 extends R4{constructor(){super(...arguments),this._assemblers_by_custom_name=new Map,this._filterFragmentShaderCallbacks=new Map}createMaterial(){return new F}custom_assembler_class_by_custom_name(){}_addCustomMaterials(t){const e=this.custom_assembler_class_by_custom_name();e&&e.forEach(((e,n)=>{this._add_custom_material(t,n,e)}))}_add_custom_material(t,e,n){let i=this._assemblers_by_custom_name.get(e);i||(i=new n(this.currentGlParentNode()),this._assemblers_by_custom_name.set(e,i)),t.customMaterials=t.customMaterials||{};const s=i.createMaterial();s.name=e,t.customMaterials[e]=s}compileCustomMaterials(t){const e=this.custom_assembler_class_by_custom_name();e&&e.forEach(((e,n)=>{if(this._code_builder){let i=this._assemblers_by_custom_name.get(n);i||(i=new e(this.currentGlParentNode()),this._assemblers_by_custom_name.set(n,i)),i.set_root_nodes(this._root_nodes),i.set_param_configs_owner(this._code_builder),i.set_shader_configs(this.shaderConfigs()),i.set_variable_configs(this.variable_configs());const s=t.customMaterials[n];s&&(i.setFilterFragmentShaderMethodOwner(this),i.compileMaterial(s),i.setFilterFragmentShaderMethodOwner(void 0))}}))}_resetFilterFragmentShaderCallbacks(){this._filterFragmentShaderCallbacks.clear()}_addFilterFragmentShaderCallback(t,e){this._filterFragmentShaderCallbacks.set(t,e)}_removeFilterFragmentShaderCallback(t){this._filterFragmentShaderCallbacks.delete(t)}setFilterFragmentShaderMethodOwner(t){this._filterFragmentShaderMethodOwner=t}filterFragmentShader(t){return this._filterFragmentShaderCallbacks.forEach(((e,n)=>{t=e(t)})),t}processFilterFragmentShader(t){return this._filterFragmentShaderMethodOwner?this._filterFragmentShaderMethodOwner.filterFragmentShader(t):this.filterFragmentShader(t)}compileMaterial(t){if(!this.compileAllowed())return;const e=Df.findOutputNodes(this.currentGlParentNode());e.length>1&&this.currentGlParentNode().states.error.set(\\\\\\\"only one output node allowed\\\\\\\");const n=Df.findVaryingNodes(this.currentGlParentNode()),i=e.concat(n);this.set_root_nodes(i),this._update_shaders();const s=this._shaders_by_name.get(Mf.VERTEX),r=this._shaders_by_name.get(Mf.FRAGMENT);s&&r&&(t.vertexShader=s,t.fragmentShader=this.processFilterFragmentShader(r),this.addUniforms(t.uniforms),t.needsUpdate=!0);const o=this.currentGlParentNode().scene();this.uniformsTimeDependent()?o.uniformsController.addTimeDependentUniformOwner(t.uuid,t.uniforms):o.uniformsController.removeTimeDependentUniformOwner(t.uuid),this.uniforms_resolution_dependent()?o.uniformsController.addResolutionDependentUniformOwner(t.uuid,t.uniforms):o.uniformsController.removeResolutionDependentUniformOwner(t.uuid),t.customMaterials&&this.compileCustomMaterials(t)}_update_shaders(){this._shaders_by_name=new Map,this._lines=new Map;for(let t of this.shaderNames()){const e=this._template_shader_for_shader_name(t);e&&this._lines.set(t,e.split(\\\\\\\"\\\\n\\\\\\\"))}this._root_nodes.length>0&&(this.build_code_from_nodes(this._root_nodes),this._build_lines());for(let t of this.shaderNames()){const e=this._lines.get(t);e&&this._shaders_by_name.set(t,e.join(\\\\\\\"\\\\n\\\\\\\"))}}shadow_assembler_class_by_custom_name(){return{}}add_output_body_line(t,e,n){var i;const s=t.io.inputs.named_input(n),r=t.variableForInput(n),o=this.variable_config(n);let a=null;if(s)a=mf.vector3(r);else if(o.default_from_attribute()){const s=t.io.inputs.namedInputConnectionPointsByName(n);if(s){const r=s.type(),o=null===(i=this.globals_handler)||void 0===i?void 0:i.read_attribute(t,r,n,e);o&&(a=o)}}else{const t=o.default();t&&(a=t)}if(a){const n=o.prefix(),i=o.suffix(),s=o.if_condition();s&&e.addBodyLines(t,[`#if ${s}`]),e.addBodyLines(t,[`${n}${a}${i}`]);const r=o.postLines();r&&e.addBodyLines(t,r),s&&e.addBodyLines(t,[\\\\\\\"#endif\\\\\\\"])}}set_node_lines_output(t,e){var n;const i=e.current_shader_name,s=null===(n=this.shader_config(i))||void 0===n?void 0:n.input_names();if(s)for(let n of s)t.io.inputs.has_named_input(n)&&this.add_output_body_line(t,e,n)}set_node_lines_attribute(t,e){var n;const i=t.gl_type(),s=null===(n=this.globals_handler)||void 0===n?void 0:n.read_attribute(t,i,t.attribute_name,e),r=t.glVarName(t.output_name);e.addBodyLines(t,[`${i} ${r} = ${s}`])}handle_globals_output_name(t){var e;switch(t.output_name){case F4.TIME:return void this.handleTime(t);case F4.RESOLUTION:return void this.handle_resolution(t);case F4.MV_POSITION:return void this.handle_mvPosition(t);case F4.GL_POSITION:return void this.handle_gl_Position(t);case F4.GL_FRAGCOORD:return void this.handle_gl_FragCoord(t);case F4.GL_POINTCOORD:return void this.handle_gl_PointCoord(t);default:null===(e=this.globals_handler)||void 0===e||e.handle_globals_node(t.globals_node,t.output_name,t.shaders_collection_controller)}}handleTime(t){const e=new Nf(t.globals_node,Uo.FLOAT,t.output_name);t.globals_shader_name&&h.pushOnArrayAtEntry(t.definitions_by_shader_name,t.globals_shader_name,e);const n=`float ${t.var_name} = ${t.output_name}`;for(let i of t.dependencies)h.pushOnArrayAtEntry(t.definitions_by_shader_name,i,e),h.pushOnArrayAtEntry(t.body_lines_by_shader_name,i,n);t.body_lines.push(n),this.setUniformsTimeDependent()}handle_resolution(t){t.body_lines.push(`vec2 ${t.var_name} = resolution`);const e=new Nf(t.globals_node,Uo.VEC2,t.output_name);t.globals_shader_name&&h.pushOnArrayAtEntry(t.definitions_by_shader_name,t.globals_shader_name,e);for(let n of t.dependencies)h.pushOnArrayAtEntry(t.definitions_by_shader_name,n,e);this.set_uniforms_resolution_dependent()}handle_mvPosition(t){if(t.shader_name==Mf.FRAGMENT){const e=t.globals_node,n=t.shaders_collection_controller,i=new Lf(e,Uo.VEC4,t.var_name),s=`${t.var_name} = modelViewMatrix * vec4(position, 1.0)`;n.addDefinitions(e,[i],Mf.VERTEX),n.addBodyLines(e,[s],Mf.VERTEX),n.addDefinitions(e,[i])}}handle_gl_Position(t){if(t.shader_name==Mf.FRAGMENT){const e=t.globals_node,n=t.shaders_collection_controller,i=new Lf(e,Uo.VEC4,t.var_name),s=`${t.var_name} = projectionMatrix * modelViewMatrix * vec4(position, 1.0)`;n.addDefinitions(e,[i],Mf.VERTEX),n.addBodyLines(e,[s],Mf.VERTEX),n.addDefinitions(e,[i])}}handle_gl_FragCoord(t){t.shader_name==Mf.FRAGMENT&&t.body_lines.push(`vec4 ${t.var_name} = gl_FragCoord`)}handle_gl_PointCoord(t){t.shader_name==Mf.FRAGMENT?t.body_lines.push(`vec2 ${t.var_name} = gl_PointCoord`):t.body_lines.push(`vec2 ${t.var_name} = vec2(0.0, 0.0)`)}set_node_lines_globals(t,e){const n=[],i=e.current_shader_name,s=this.shader_config(i);if(!s)return;const r=s.dependencies(),o=new Map,a=new Map,l=this.used_output_names_for_shader(t,i);for(let s of l){const l=t.glVarName(s),c=e.current_shader_name,h={globals_node:t,shaders_collection_controller:e,output_name:s,globals_shader_name:c,definitions_by_shader_name:o,body_lines:n,var_name:l,shader_name:i,dependencies:r,body_lines_by_shader_name:a};this.handle_globals_output_name(h)}o.forEach(((n,i)=>{e.addDefinitions(t,n,i)})),a.forEach(((n,i)=>{e.addBodyLines(t,n,i)})),e.addBodyLines(t,n)}used_output_names_for_shader(t,e){const n=t.io.outputs.used_output_names(),i=[];for(let t of n)e==Mf.VERTEX&&D4.includes(t)||i.push(t);return i}}const z4=new Map([[Mf.VERTEX,\\\\\\\"#include <begin_vertex>\\\\\\\"],[Mf.FRAGMENT,\\\\\\\"vec4 diffuseColor = vec4( 1.0 );\\\\\\\"]]);const k4=new Map([[Mf.VERTEX,\\\\\\\"#include <begin_vertex>\\\\\\\"],[Mf.FRAGMENT,\\\\\\\"vec4 diffuseColor = vec4( 1.0 );\\\\\\\"]]);var U4=\\\\\\\"uniform float mNear;\\\\nuniform float mFar;\\\\n\\\\nvarying float vViewZDepth;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tfloat color = 1.0 - smoothstep( mNear, mFar, vViewZDepth );\\\\n\\\\tgl_FragColor = vec4( vec3( color ), 1.0 );\\\\n\\\\n}\\\\n\\\\\\\";const G4=new Map([[Mf.VERTEX,\\\\\\\"// INSERT DEFINES\\\\\\\"]]),V4=new Map([[Mf.VERTEX,\\\\\\\"// INSERT BODY\\\\\\\"]]);const H4=new Map([]);H4.set(I4.DISTANCE,class extends B4{templateShader(){const t=H.distanceRGBA;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}insert_body_after(t){return z4.get(t)}createMaterial(){const t=this.templateShader();return new F({defines:{DEPTH_PACKING:[w.Hb,w.j][0]},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}}),H4.set(I4.DEPTH,class extends B4{templateShader(){const t=H.depth;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}insert_body_after(t){return k4.get(t)}createMaterial(){const t=this.templateShader();return new F({defines:{DEPTH_PACKING:[w.Hb,w.j][0]},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}}),H4.set(I4.DEPTH_DOF,class extends B4{templateShader(){return{vertexShader:\\\\\\\"#include <common>\\\\n\\\\nvarying float vViewZDepth;\\\\n\\\\n// INSERT DEFINES\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tvViewZDepth = - mvPosition.z;\\\\n}\\\\\\\",fragmentShader:U4,uniforms:{mNear:{value:0},mFar:{value:10}}}}insert_define_after(t){return G4.get(t)}insert_body_after(t){return V4.get(t)}createMaterial(){const t=this.templateShader();return new F({uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}});class j4 extends B4{custom_assembler_class_by_custom_name(){return H4}}class W4 extends j4{templateShader(){const t=H.basic;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({lights:!1,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}}class q4 extends j4{templateShader(){const t=H.lambert;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({lights:!0,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}}class X4 extends j4{templateShader(){const t=H.phong;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({lights:!0,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}}var Y4=\\\\\\\"SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 )\\\\\\\";class $4 extends j4{constructor(t){super(t),this._gl_parent_node=t,this._addFilterFragmentShaderCallback(\\\\\\\"MeshStandardBuilderMatNode\\\\\\\",$4.filterFragmentShader)}isPhysical(){return!1}templateShader(){const t=this.isPhysical()?H.physical:H.standard;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}static filterFragmentShader(t){return t=(t=(t=t.replace(\\\\\\\"#include <metalnessmap_fragment>\\\\\\\",\\\\\\\"float metalnessFactor = metalness * POLY_metalness;\\\\n\\\\n#ifdef USE_METALNESSMAP\\\\n\\\\n\\\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\\\n\\\\n\\\\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\tmetalnessFactor *= texelMetalness.b;\\\\n\\\\n#endif\\\\n\\\\\\\")).replace(\\\\\\\"#include <roughnessmap_fragment>\\\\\\\",\\\\\\\"float roughnessFactor = roughness * POLY_roughness;\\\\n\\\\n#ifdef USE_ROUGHNESSMAP\\\\n\\\\n\\\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\\\n\\\\n\\\\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\troughnessFactor *= texelRoughness.g;\\\\n\\\\n#endif\\\\n\\\\\\\")).replace(\\\\\\\"vec3 totalEmissiveRadiance = emissive;\\\\\\\",\\\\\\\"vec3 totalEmissiveRadiance = emissive * POLY_emissive;\\\\\\\"),$4.USE_SSS&&(t=(t=t.replace(/void main\\\\s?\\\\(\\\\) {/,\\\\\\\"struct SSSModel {\\\\n\\\\tbool isActive;\\\\n\\\\tvec3 color;\\\\n\\\\tfloat thickness;\\\\n\\\\tfloat power;\\\\n\\\\tfloat scale;\\\\n\\\\tfloat distortion;\\\\n\\\\tfloat ambient;\\\\n\\\\tfloat attenuation;\\\\n};\\\\n\\\\nvoid RE_Direct_Scattering(\\\\n\\\\tconst in IncidentLight directLight,\\\\n\\\\tconst in GeometricContext geometry,\\\\n\\\\tconst in SSSModel sssModel,\\\\n\\\\tinout ReflectedLight reflectedLight\\\\n\\\\t){\\\\n\\\\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\\\\n\\\\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\\\\n\\\\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\\\\n\\\\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\\\\n}\\\\n\\\\nvoid main() {\\\\\\\")).replace(\\\\\\\"#include <lights_fragment_begin>\\\\\\\",\\\\\\\"#include <lights_fragment_begin>\\\\nif(POLY_SSSModel.isActive){\\\\n\\\\tRE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight);\\\\n}\\\\n\\\\n\\\\\\\")),t}createMaterial(){const t=this.templateShader(),e={lights:!0,extensions:{derivatives:!0},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader},n=new F(e);return this.isPhysical()&&(n.defines.PHYSICAL=!0),this._addCustomMaterials(n),n}add_output_inputs(t){const e=R4.output_input_connection_points();e.push(new qo(\\\\\\\"metalness\\\\\\\",Uo.FLOAT,1)),e.push(new qo(\\\\\\\"roughness\\\\\\\",Uo.FLOAT,1)),e.push(new qo(\\\\\\\"emissive\\\\\\\",Uo.VEC3,[1,1,1])),$4.USE_SSS&&e.push(new qo(\\\\\\\"SSSModel\\\\\\\",Uo.SSS_MODEL,Y4)),this.isPhysical()&&(e.push(new qo(\\\\\\\"transmission\\\\\\\",Uo.FLOAT,1)),e.push(new qo(\\\\\\\"thickness\\\\\\\",Uo.FLOAT,1))),t.io.inputs.setNamedInputConnectionPoints(e)}create_shader_configs(){const t=[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\",\\\\\\\"metalness\\\\\\\",\\\\\\\"roughness\\\\\\\",\\\\\\\"emissive\\\\\\\",\\\\\\\"SSSModel\\\\\\\"];return this.isPhysical()&&(t.push(\\\\\\\"transmission\\\\\\\"),t.push(\\\\\\\"thickness\\\\\\\")),[new b4(Mf.VERTEX,[\\\\\\\"position\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"uv\\\\\\\"],[]),new b4(Mf.FRAGMENT,t,[Mf.VERTEX])]}create_variable_configs(){const t=R4.create_variable_configs();return t.push(new w4(\\\\\\\"metalness\\\\\\\",{default:\\\\\\\"1.0\\\\\\\",prefix:\\\\\\\"float POLY_metalness = \\\\\\\"})),t.push(new w4(\\\\\\\"roughness\\\\\\\",{default:\\\\\\\"1.0\\\\\\\",prefix:\\\\\\\"float POLY_roughness = \\\\\\\"})),t.push(new w4(\\\\\\\"emissive\\\\\\\",{default:\\\\\\\"vec3(1.0, 1.0, 1.0)\\\\\\\",prefix:\\\\\\\"vec3 POLY_emissive = \\\\\\\"})),$4.USE_SSS&&t.push(new w4(\\\\\\\"SSSModel\\\\\\\",{default:Y4,prefix:\\\\\\\"SSSModel POLY_SSSModel = \\\\\\\"})),this.isPhysical()&&(t.push(new w4(\\\\\\\"transmission\\\\\\\",{default:\\\\\\\"1.0\\\\\\\",prefix:\\\\\\\"float POLY_transmission = \\\\\\\"})),t.push(new w4(\\\\\\\"thickness\\\\\\\",{default:\\\\\\\"1.0\\\\\\\",prefix:\\\\\\\"float POLY_thickness = \\\\\\\"}))),t}}$4.USE_SSS=!0;class J4 extends $4{constructor(t){super(t),this._gl_parent_node=t,this._addFilterFragmentShaderCallback(\\\\\\\"MeshPhysicalBuilderMatNode\\\\\\\",J4.filterFragmentShader)}isPhysical(){return!0}static filterFragmentShader(t){return t=t.replace(\\\\\\\"#include <transmission_fragment>\\\\\\\",function(t){const e=t.split(\\\\\\\"\\\\n\\\\\\\");let n=0;for(let t of e)t.includes(\\\\\\\"float transmissionFactor = transmission;\\\\\\\")&&(t=\\\\\\\"float transmissionFactor = transmission * POLY_transmission;\\\\\\\",e[n]=t),t.includes(\\\\\\\"float thicknessFactor = thickness;\\\\\\\")&&(t=\\\\\\\"float thicknessFactor = thickness * POLY_thickness;\\\\\\\",e[n]=t),n++;return e.join(\\\\\\\"\\\\n\\\\\\\")}(k))}}const Z4=new Map([[Mf.VERTEX,\\\\\\\"// INSERT DEFINES\\\\\\\"]]),K4=new Map([[Mf.VERTEX,\\\\\\\"// INSERT BODY\\\\\\\"]]);const Q4=new Map([[Mf.VERTEX,\\\\\\\"// INSERT DEFINES\\\\\\\"]]),t5=new Map([[Mf.VERTEX,\\\\\\\"// INSERT BODY\\\\\\\"]]);const e5=new Map([[Mf.VERTEX,[\\\\\\\"#include <begin_vertex>\\\\\\\",\\\\\\\"gl_PointSize = size;\\\\\\\"]],[Mf.FRAGMENT,[]]]),n5=new Map;n5.set(I4.DISTANCE,class extends B4{templateShader(){const t=H.distanceRGBA,e=I.clone(t.uniforms);return e.size={value:1},e.scale={value:1},{vertexShader:\\\\\\\"uniform float size;\\\\nuniform float scale;\\\\n#define DISTANCE\\\\nvarying vec3 vWorldPosition;\\\\n#include <common>\\\\n#include <clipping_planes_pars_vertex>\\\\nvarying float vViewZDepth;\\\\n\\\\n// INSERT DEFINES\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\t#ifdef USE_SIZEATTENUATION\\\\n\\\\t\\\\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\\\\n\\\\t\\\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\\\n\\\\t#endif\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n}\\\\n\\\\n// #define DISTANCE\\\\n// varying vec3 vWorldPosition;\\\\n// #include <common>\\\\n// #include <uv_pars_vertex>\\\\n// #include <displacementmap_pars_vertex>\\\\n// #include <morphtarget_pars_vertex>\\\\n// #include <skinning_pars_vertex>\\\\n// #include <clipping_planes_pars_vertex>\\\\n// void main() {\\\\n// \\\\t#include <uv_vertex>\\\\n// \\\\t#include <skinbase_vertex>\\\\n// \\\\t#ifdef USE_DISPLACEMENTMAP\\\\n// \\\\t\\\\t#include <beginnormal_vertex>\\\\n// \\\\t\\\\t#include <morphnormal_vertex>\\\\n// \\\\t\\\\t#include <skinnormal_vertex>\\\\n// \\\\t#endif\\\\n// \\\\t#include <begin_vertex>\\\\n// \\\\t#include <morphtarget_vertex>\\\\n// \\\\t#include <skinning_vertex>\\\\n// \\\\t#include <displacementmap_vertex>\\\\n// \\\\t#include <project_vertex>\\\\n// \\\\t#include <worldpos_vertex>\\\\n// \\\\t#include <clipping_planes_vertex>\\\\n// \\\\tvWorldPosition = worldPosition.xyz;\\\\n// }\\\\n\\\\n\\\\n\\\\\\\",fragmentShader:t.fragmentShader,uniforms:e}}insert_define_after(t){return Z4.get(t)}insert_body_after(t){return K4.get(t)}createMaterial(){const t=this.templateShader();return new F({defines:{USE_SIZEATTENUATION:1,DEPTH_PACKING:[w.Hb,w.j][0]},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}}),n5.set(I4.DEPTH_DOF,class extends B4{templateShader(){return{vertexShader:\\\\\\\"uniform float size;\\\\nuniform float scale;\\\\n#include <common>\\\\n\\\\nvarying float vViewZDepth;\\\\n\\\\n// INSERT DEFINES\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tvViewZDepth = - mvPosition.z;\\\\n\\\\t#ifdef USE_SIZEATTENUATION\\\\n\\\\t\\\\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\\\\n\\\\t\\\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\\\n\\\\t#endif\\\\n\\\\n}\\\\n\\\\n\\\\\\\",fragmentShader:U4,uniforms:{size:{value:1},scale:{value:1},mNear:{value:0},mFar:{value:10}}}}insert_define_after(t){return Q4.get(t)}insert_body_after(t){return t5.get(t)}createMaterial(){const t=this.templateShader();return new F({depthTest:!0,defines:{USE_SIZEATTENUATION:1},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}});class i5 extends B4{custom_assembler_class_by_custom_name(){return n5}templateShader(){const t=H.points;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({transparent:!0,fog:!0,defines:{USE_SIZEATTENUATION:1},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}add_output_inputs(t){const e=R4.output_input_connection_points();e.push(new qo(\\\\\\\"gl_PointSize\\\\\\\",Uo.FLOAT)),t.io.inputs.setNamedInputConnectionPoints(e)}create_globals_node_output_connections(){return R4.create_globals_node_output_connections().concat([new qo(F4.GL_POINTCOORD,Uo.VEC2)])}create_shader_configs(){return[new b4(Mf.VERTEX,[\\\\\\\"position\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"uv\\\\\\\",\\\\\\\"gl_PointSize\\\\\\\"],[]),new b4(Mf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\"],[Mf.VERTEX])]}create_variable_configs(){return R4.create_variable_configs().concat([new w4(\\\\\\\"gl_PointSize\\\\\\\",{default:\\\\\\\"1.0\\\\\\\",prefix:\\\\\\\"gl_PointSize = \\\\\\\",suffix:\\\\\\\" * size * 10.0\\\\\\\"})])}lines_to_remove(t){return e5.get(t)}}const s5=new Map([[Mf.VERTEX,\\\\\\\"// INSERT DEFINES\\\\\\\"]]),r5=new Map([[Mf.VERTEX,\\\\\\\"// INSERT BODY\\\\\\\"]]);const o5=new Map([]);o5.set(I4.DEPTH_DOF,class extends B4{templateShader(){return{vertexShader:\\\\\\\"uniform float scale;\\\\nattribute float lineDistance;\\\\nvarying float vLineDistance;\\\\n#include <common>\\\\n\\\\nvarying float vViewZDepth;\\\\n\\\\n// INSERT DEFINES\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\n\\\\tvLineDistance = scale * lineDistance;\\\\n\\\\tgl_Position = projectionMatrix * mvPosition;\\\\n\\\\n\\\\tvViewZDepth = - mvPosition.z;\\\\n\\\\n\\\\n}\\\\n\\\\n\\\\n\\\\n\\\\\\\",fragmentShader:U4,uniforms:{scale:{value:1},mNear:{value:0},mFar:{value:10}}}}insert_define_after(t){return s5.get(t)}insert_body_after(t){return r5.get(t)}createMaterial(){const t=this.templateShader();return new F({depthTest:!0,linewidth:100,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}});const a5=new Map([[Mf.VERTEX,[\\\\\\\"#include <begin_vertex>\\\\\\\",\\\\\\\"#include <project_vertex>\\\\\\\"]],[Mf.FRAGMENT,[]]]);class l5 extends B4{templateShader(){const t=H.dashed;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({depthTest:!0,alphaTest:.5,linewidth:1,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}custom_assembler_class_by_custom_name(){return o5}create_shader_configs(){return[new b4(Mf.VERTEX,[\\\\\\\"position\\\\\\\",\\\\\\\"uv\\\\\\\"],[]),new b4(Mf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\"],[Mf.VERTEX])]}static output_input_connection_points(){return[new qo(\\\\\\\"position\\\\\\\",Uo.VEC3),new qo(\\\\\\\"color\\\\\\\",Uo.VEC3),new qo(\\\\\\\"alpha\\\\\\\",Uo.FLOAT),new qo(\\\\\\\"uv\\\\\\\",Uo.VEC2)]}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints(l5.output_input_connection_points())}static create_globals_node_output_connections(){return[new qo(\\\\\\\"position\\\\\\\",Uo.VEC3),new qo(\\\\\\\"color\\\\\\\",Uo.VEC3),new qo(\\\\\\\"uv\\\\\\\",Uo.VEC2),new qo(\\\\\\\"gl_FragCoord\\\\\\\",Uo.VEC4),new qo(\\\\\\\"resolution\\\\\\\",Uo.VEC2),new qo(\\\\\\\"time\\\\\\\",Uo.FLOAT)]}create_globals_node_output_connections(){return l5.create_globals_node_output_connections()}create_variable_configs(){return[new w4(\\\\\\\"position\\\\\\\",{default:\\\\\\\"vec3( position )\\\\\\\",prefix:\\\\\\\"vec3 transformed = \\\\\\\",suffix:\\\\\\\";vec4 mvPosition = vec4( transformed, 1.0 ); gl_Position = projectionMatrix * modelViewMatrix * mvPosition;\\\\\\\"}),new w4(\\\\\\\"color\\\\\\\",{prefix:\\\\\\\"diffuseColor.xyz = \\\\\\\"}),new w4(\\\\\\\"alpha\\\\\\\",{prefix:\\\\\\\"diffuseColor.w = \\\\\\\"}),new w4(\\\\\\\"uv\\\\\\\",{prefix:\\\\\\\"vUv = \\\\\\\",if:Pf.IF_RULE.uv})]}lines_to_remove(t){return a5.get(t)}}class c5 extends R4{templateShader(){}_template_shader_for_shader_name(t){return\\\\\\\"#include <common>\\\\n\\\\n// INSERT DEFINE\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec2 particleUV = (gl_FragCoord.xy / resolution.xy);\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n}\\\\\\\"}compile(){this.setup_shader_names_and_variables(),this.update_shaders()}root_nodes_by_shader_name(t){var e,n;const i=[];for(let s of this._root_nodes)switch(s.type()){case OF.type():i.push(s);break;case wf.type():{const r=s.attribute_name,o=null===(e=this._texture_allocations_controller)||void 0===e?void 0:e.variable(r);if(o&&o.allocation()){(null===(n=o.allocation())||void 0===n?void 0:n.shaderName())==t&&i.push(s)}break}}return i}leaf_nodes_by_shader_name(t){var e,n;const i=[];for(let s of this._leaf_nodes)switch(s.type()){case II.type():i.push(s);break;case wf.type():{const r=s.attribute_name,o=null===(e=this._texture_allocations_controller)||void 0===e?void 0:e.variable(r);if(o&&o.allocation()){(null===(n=o.allocation())||void 0===n?void 0:n.shaderName())==t&&i.push(s)}break}}return i}setup_shader_names_and_variables(){var t;const e=new N4(this.currentGlParentNode(),this.shaderNames(),((t,e)=>this.input_names_for_shader_name(t,e)));this._leaf_nodes=e.leaves_from_nodes(this._root_nodes),this._texture_allocations_controller=new c1,this._texture_allocations_controller.allocateConnectionsFromRootNodes(this._root_nodes,this._leaf_nodes),this.globals_handler&&(null===(t=this.globals_handler)||void 0===t||t.set_texture_allocations_controller(this._texture_allocations_controller)),this._reset_shader_configs()}update_shaders(){this._shaders_by_name.clear(),this._lines.clear();for(let t of this.shaderNames()){const e=this._template_shader_for_shader_name(t);this._lines.set(t,e.split(\\\\\\\"\\\\n\\\\\\\"))}this._root_nodes.length>0&&(this._resetCodeBuilder(),this.build_code_from_nodes(this._root_nodes),this._build_lines());for(let t of this.shaderNames()){const e=this._lines.get(t);e&&this._shaders_by_name.set(t,e.join(\\\\\\\"\\\\n\\\\\\\"))}}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints([new qo(\\\\\\\"position\\\\\\\",Uo.VEC3),new qo(\\\\\\\"velocity\\\\\\\",Uo.VEC3)])}add_globals_outputs(t){t.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"position\\\\\\\",Uo.VEC3),new qo(\\\\\\\"velocity\\\\\\\",Uo.VEC3),new qo(\\\\\\\"time\\\\\\\",Uo.FLOAT)])}allow_attribute_exports(){return!0}textureAllocationsController(){return this._texture_allocations_controller=this._texture_allocations_controller||new c1}create_shader_configs(){var t;return(null===(t=this._texture_allocations_controller)||void 0===t?void 0:t.createShaderConfigs())||[]}create_variable_configs(){return[]}shaderNames(){return this.textureAllocationsController().shaderNames()||[]}input_names_for_shader_name(t,e){return this.textureAllocationsController().inputNamesForShaderName(t,e)||[]}insert_define_after(t){return\\\\\\\"// INSERT DEFINE\\\\\\\"}insert_body_after(t){return\\\\\\\"// INSERT BODY\\\\\\\"}lines_to_remove(t){return[\\\\\\\"// INSERT DEFINE\\\\\\\",\\\\\\\"// INSERT BODY\\\\\\\"]}add_export_body_line(t,e,n,i,s){var r;if(n){const n=t.variableForInput(e),o=mf.vector3(n);if(o){const e=this.textureAllocationsController().variable(i),n=s.current_shader_name;if(e&&(null===(r=e.allocation())||void 0===r?void 0:r.shaderName())==n){const i=`gl_FragColor.${e.component()} = ${o}`;s.addBodyLines(t,[i],n)}}}}set_node_lines_output(t,e){const n=e.current_shader_name,i=this.textureAllocationsController().inputNamesForShaderName(t,n);if(i)for(let n of i){const i=t.io.inputs.named_input(n);if(i){const s=n;this.add_export_body_line(t,n,i,s,e)}}}set_node_lines_attribute(t,e){var n,i;if(t.isImporting()){const s=t.gl_type(),r=t.attribute_name,o=null===(n=this.globals_handler)||void 0===n?void 0:n.read_attribute(t,s,r,e),a=t.glVarName(t.output_name),l=`${s} ${a} = ${o}`;e.addBodyLines(t,[l]);const c=this.textureAllocationsController().variable(r),h=e.current_shader_name;if(c&&(null===(i=c.allocation())||void 0===i?void 0:i.shaderName())==h){const n=this.textureAllocationsController().variable(r);if(n){const i=`gl_FragColor.${n.component()} = ${a}`;e.addBodyLines(t,[i])}}}if(t.isExporting()){const n=t.connected_input_node();if(n){const i=t.attribute_name;this.add_export_body_line(t,t.input_name,n,i,e)}}}set_node_lines_globals(t,e){for(let n of t.io.outputs.used_output_names())switch(n){case\\\\\\\"time\\\\\\\":this._handle_globals_time(t,n,e);break;default:this._handle_globals_default(t,n,e)}}_handle_globals_time(t,e,n){const i=new Nf(t,Uo.FLOAT,e);n.addDefinitions(t,[i]);const s=`float ${t.glVarName(e)} = ${e}`;n.addBodyLines(t,[s]),this.setUniformsTimeDependent()}_handle_globals_default(t,e,n){var i;const s=t.io.outputs.namedOutputConnectionPointsByName(e);if(s){const r=s.type(),o=null===(i=this.globals_handler)||void 0===i?void 0:i.read_attribute(t,r,e,n);if(o){const i=`${r} ${t.glVarName(e)} = ${o}`;n.addBodyLines(t,[i])}}}}class h5 extends R4{templateShader(){return{fragmentShader:\\\\\\\"#include <common>\\\\n\\\\nuniform vec2 resolution;\\\\n\\\\n// INSERT DEFINE\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 diffuseColor = vec4(0.0,0.0,0.0,1.0);\\\\n\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\tgl_FragColor = vec4( diffuseColor );\\\\n}\\\\\\\",vertexShader:void 0,uniforms:void 0}}fragment_shader(){return this._shaders_by_name.get(Mf.FRAGMENT)}uniforms(){return this._uniforms}update_fragment_shader(){this._lines=new Map,this._shaders_by_name=new Map;for(let t of this.shaderNames())if(t==Mf.FRAGMENT){const e=this.templateShader().fragmentShader;this._lines.set(t,e.split(\\\\\\\"\\\\n\\\\\\\"))}this._root_nodes.length>0&&(this.build_code_from_nodes(this._root_nodes),this._build_lines()),this._uniforms=this._uniforms||{},this.addUniforms(this._uniforms);for(let t of this.shaderNames()){const e=this._lines.get(t);e&&this._shaders_by_name.set(t,e.join(\\\\\\\"\\\\n\\\\\\\"))}rg.handleDependencies(this.currentGlParentNode(),this.uniformsTimeDependent(),this._uniforms)}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints([new qo(\\\\\\\"color\\\\\\\",Uo.VEC3),new qo(\\\\\\\"alpha\\\\\\\",Uo.FLOAT)])}add_globals_outputs(t){t.io.outputs.setNamedOutputConnectionPoints([new qo(\\\\\\\"gl_FragCoord\\\\\\\",Uo.VEC2),new qo(\\\\\\\"time\\\\\\\",Uo.FLOAT)])}create_shader_configs(){return[new b4(Mf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\"],[])]}create_variable_configs(){return[new w4(\\\\\\\"color\\\\\\\",{prefix:\\\\\\\"diffuseColor.xyz = \\\\\\\"}),new w4(\\\\\\\"alpha\\\\\\\",{prefix:\\\\\\\"diffuseColor.a = \\\\\\\",default:\\\\\\\"1.0\\\\\\\"})]}insert_define_after(t){return\\\\\\\"// INSERT DEFINE\\\\\\\"}insert_body_after(t){return\\\\\\\"// INSERT BODY\\\\\\\"}lines_to_remove(t){return[\\\\\\\"// INSERT DEFINE\\\\\\\",\\\\\\\"// INSERT BODY\\\\\\\"]}handle_gl_FragCoord(t,e,n){\\\\\\\"fragment\\\\\\\"==e&&t.push(`vec2 ${n} = vec2(gl_FragCoord.x / resolution.x, gl_FragCoord.y / resolution.y)`)}set_node_lines_output(t,e){const n=this.input_names_for_shader_name(t,e.current_shader_name);if(n)for(let i of n){if(t.io.inputs.named_input(i)){const n=t.variableForInput(i);let s;\\\\\\\"color\\\\\\\"==i&&(s=`diffuseColor.xyz = ${mf.any(n)}`),\\\\\\\"alpha\\\\\\\"==i&&(s=`diffuseColor.a = ${mf.any(n)}`),s&&e.addBodyLines(t,[s])}}}set_node_lines_globals(t,e){const n=e.current_shader_name;if(!this.shader_config(n))return;const i=[],s=[];for(let e of t.io.outputs.used_output_names()){const r=t.glVarName(e);switch(e){case\\\\\\\"time\\\\\\\":s.push(new Nf(t,Uo.FLOAT,e)),i.push(`float ${r} = ${e}`),this.setUniformsTimeDependent();break;case\\\\\\\"gl_FragCoord\\\\\\\":this.handle_gl_FragCoord(i,n,r)}}e.addDefinitions(t,s,n),e.addBodyLines(t,i)}}const u5=new Map([]);class d5 extends B4{custom_assembler_class_by_custom_name(){return u5}}const p5=new Map([[Mf.VERTEX,\\\\\\\"// start builder body code\\\\\\\"],[Mf.FRAGMENT,\\\\\\\"// start builder body code\\\\\\\"]]),_5=new Map([[Mf.FRAGMENT,[]]]);class m5 extends d5{templateShader(){return{vertexShader:Uk,fragmentShader:Gk,uniforms:I.clone(Vk)}}createMaterial(){const t=this.templateShader(),e=new F({vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,side:w.H,transparent:!0,depthTest:!0,uniforms:I.clone(t.uniforms)});return yr.add_user_data_render_hook(e,jk.render_hook.bind(jk)),this._addCustomMaterials(e),e}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints([new qo(\\\\\\\"density\\\\\\\",Uo.FLOAT,1)])}static create_globals_node_output_connections(){return[new qo(\\\\\\\"position\\\\\\\",Uo.VEC3),new qo(\\\\\\\"pos_normalized\\\\\\\",Uo.VEC3),new qo(\\\\\\\"time\\\\\\\",Uo.FLOAT)]}create_globals_node_output_connections(){return m5.create_globals_node_output_connections()}insert_body_after(t){return p5.get(t)}lines_to_remove(t){return _5.get(t)}create_shader_configs(){return[new b4(Mf.VERTEX,[],[]),new b4(Mf.FRAGMENT,[\\\\\\\"density\\\\\\\"],[Mf.VERTEX])]}static create_variable_configs(){return[new w4(\\\\\\\"position\\\\\\\",{}),new w4(\\\\\\\"density\\\\\\\",{prefix:\\\\\\\"density *= \\\\\\\"})]}create_variable_configs(){return m5.create_variable_configs()}set_node_lines_globals(t,e){const n=[],i=e.current_shader_name,s=this.shader_config(i);if(!s)return;const r=s.dependencies(),o=new Map,a=new Map;let l,c;for(let s of t.io.outputs.used_output_names()){const u=t.glVarName(s),d=e.current_shader_name;switch(s){case\\\\\\\"time\\\\\\\":l=new Nf(t,Uo.FLOAT,s),d&&h.pushOnArrayAtEntry(o,d,l),c=`float ${u} = ${s}`;for(let t of r)h.pushOnArrayAtEntry(o,t,l),h.pushOnArrayAtEntry(a,t,c);n.push(c),this.setUniformsTimeDependent();break;case\\\\\\\"position\\\\\\\":i==Mf.FRAGMENT&&n.push(`vec3 ${u} = position_for_step`);break;case\\\\\\\"pos_normalized\\\\\\\":i==Mf.FRAGMENT&&n.push(`vec3 ${u} = (position_for_step - u_BoundingBoxMax) / (u_BoundingBoxMax - u_BoundingBoxMin)`)}}o.forEach(((n,i)=>{e.addDefinitions(t,n,i)})),a.forEach(((n,i)=>{e.addBodyLines(t,n,i)})),e.addBodyLines(t,n)}}class f5{static async run(){this._started||(this._started=!0,class{static async run(t){(class{static run(t){t.registerNode(k_,ec),t.registerNode(G_,sc),t.registerNode(H_,ec),t.registerNode(W_,ec),t.registerNode(tm,ec),t.registerNode(nm,tc),t.registerNode(sm,ec),t.registerNode(om,sc),t.registerNode(lm,ic),t.registerNode(mm,ic),t.registerNode(gm,ec),t.registerNode(ym,tc),t.registerNode(Sm,ic),t.registerNode(Lm,nc),t.registerNode(Om,nc),t.registerNode(Pm,nc),t.registerNode(Rm,nc),t.registerNode(sf,nc),t.registerNode(rf,nc)}}).run(t),class{static run(t){t.registerNode(rg,rc),t.registerNode(Og,oc),t.registerNode(Rg,oc),t.registerNode(kg,oc),t.registerNode(Hg,oc),t.registerNode(sv,oc),t.registerNode(lv,oc),t.registerNode(pv,ac),t.registerNode(mv,ac),t.registerNode(vv,ac),t.registerNode(Tv,ac),t.registerNode(Mv,ac),t.registerNode(Cv,rc),t.registerNode(Ov,oc),t.registerNode(Iv,rc),t.registerNode(Bv,lc),t.registerNode(kv,lc),t.registerNode(zv,lc),t.registerNode(Uv,lc),t.registerNode(Gv,lc),t.registerNode(Vv,lc)}}.run(t),class{static run(t){t.registerNode(qv,dc),t.registerNode($v,uc),t.registerNode(Zv,uc),t.registerNode(ty,uc),t.registerNode(hy,cc),t.registerNode(Ty,cc),t.registerNode(wy,cc),t.registerNode(My,uc),t.registerNode(Tl,hc),t.registerNode(ox,cc),t.registerNode(hl,hc),t.registerNode(hx,uc),t.registerNode(dx,uc),t.registerNode(IL,cc),t.registerNode(Ja,hc),t.registerNode(zL,dc),t.registerNode(VL,uc),t.registerNode(ZL,hc),t.registerNode(el,hc),t.registerNode(xO,uc),t.registerNode(rl,dc),t.registerNode(AO,dc),t.registerNode(FO,dc),t.registerNode(BO,uc),t.registerNode(UO,uc),t.registerNode(Ml,hc),t.registerNode(VO,uc),t.registerNode(ml,hc),t.registerNode(WO,pc),t.registerNode(qO,pc),t.registerNode(XO,pc),t.registerNode(YO,pc),t.registerNode($O,pc),t.registerNode(JO,pc)}}.run(t),class{static run(t){t.registerNode(FP,xc),t.registerNode(LR,bc),t.registerNode(DP,Tc),t.registerNode(mR,xc),t.registerNode(FR,Tc),t.registerNode(bR,yc),t.registerNode(BP,Tc),t.registerNode(zP,Tc),t.registerNode(wf,gc,{except:[`${ts.COP}/builder`]}),t.registerNode(aP,mc),t.registerNode(kP,xc),t.registerNode(uR,xc),t.registerNode(kR,_c),t.registerNode(qR,yc),t.registerNode(XR,xc),t.registerNode(JR,gc),t.registerNode(UP,Tc),t.registerNode(QR,fc),t.registerNode(tI,xc),t.registerNode(GP,mc),t.registerNode(iI,fc),t.registerNode(nR,fc),t.registerNode(fR,xc),t.registerNode(iR,fc),t.registerNode(uI,xc),t.registerNode(VP,xc),t.registerNode(HP,xc),t.registerNode(dR,fc),t.registerNode(_I,xc),t.registerNode(fI,xc),t.registerNode(vI,xc),t.registerNode(xI,xc),t.registerNode(QO,mc),t.registerNode(cP,mc),t.registerNode(uP,mc),t.registerNode(pP,mc),t.registerNode(jP,xc),t.registerNode(TI,_c),t.registerNode(PI,yc),t.registerNode(WP,xc),t.registerNode(II,gc),t.registerNode(DI,_c),t.registerNode(zI,_c),t.registerNode(GI,yc),t.registerNode(HI,Ac),t.registerNode(rP,mc),t.registerNode(nP,mc),t.registerNode(qP,xc),t.registerNode(JI,fc),t.registerNode(ZI,fc),t.registerNode(QI,_c),t.registerNode(XP,xc),t.registerNode(YP,xc),t.registerNode(sR,xc),t.registerNode(eF,xc),t.registerNode(rR,xc),t.registerNode(oR,xc),t.registerNode(oF,xc),t.registerNode(iF,xc),t.registerNode(vR,xc),t.registerNode(cF,xc),t.registerNode(hF,xc),t.registerNode(NF,Ac),t.registerNode(CF,fc),t.registerNode($P,xc),t.registerNode(wR,yc),t.registerNode(OF,gc),t.registerNode(IF,gc),t.registerNode(aR,xc),t.registerNode(kF,wc),t.registerNode(HF,wc),t.registerNode(jF,wc),t.registerNode(WF,wc),t.registerNode(YF,gc),t.registerNode(ZF,gc),t.registerNode(JP,mc),t.registerNode(lR,fc),t.registerNode(FF,fc),t.registerNode(QF,_c),t.registerNode(lD,fc),t.registerNode(hD,xc),t.registerNode(ZP,xc),t.registerNode(KP,Tc),t.registerNode(pR,xc),t.registerNode(dD,fc),t.registerNode(QP,xc),t.registerNode(zF,vc),t.registerNode(cR,fc),t.registerNode(CI,yc),t.registerNode(_D,yc,RD),t.registerNode(MI,yc,RD),t.registerNode(gR,xc),t.registerNode(fD,yc),t.registerNode(tR,Tc),t.registerNode(vD,_c),t.registerNode(wD,gc),t.registerNode(MD,yc),t.registerNode(Ff,gc),t.registerNode(CD,gc),t.registerNode(xP,mc),t.registerNode(MP,mc),t.registerNode(bP,mc),t.registerNode(AP,mc),t.registerNode(EP,mc),t.registerNode(wP,mc),t.registerNode(TP,mc),t.registerNode(LD,fc),t.registerNode(PD,fc)}}.run(t),class{static run(t){t.registerNode(BD,Mc),t.registerNode(kD,Mc),t.registerNode(GD,Mc),t.registerNode(YD,Mc)}}.run(t),class{static run(t){t.registerNode(iB,Sc),t.registerNode(mB,Sc),t.registerNode(qB,Cc),t.registerNode(KB,Ec),t.registerNode(sz,Cc),t.registerNode(hz,Ec),t.registerNode(Mz,Cc),t.registerNode(Nz,Cc),t.registerNode(Fz,Cc),t.registerNode(kz,Ec),t.registerNode(Jz,Cc),t.registerNode(tk,Ec),t.registerNode(sk,Cc),t.registerNode(lk,Ec),t.registerNode(xk,Cc),t.registerNode(Ek,Cc),t.registerNode(Lk,Lc),t.registerNode(Rk,Ec),t.registerNode(Dk,Ec),t.registerNode(kk,Cc),t.registerNode(Xk,Oc),t.registerNode(Jk,Oc),t.registerNode(Qk,Nc),t.registerNode(tU,Nc),t.registerNode(eU,Nc),t.registerNode(nU,Nc),t.registerNode(iU,Nc),t.registerNode(sU,Nc)}}.run(t),class{static run(t){t.registerNode(dU,Dc),t.registerNode(IU,Dc),t.registerNode(WU,Dc),t.registerNode(KU,Dc),t.registerNode(sG,Dc),t.registerNode(dG,Dc),t.registerNode(wG,Rc),t.registerNode(SG,zc),t.registerNode(BG,Pc),t.registerNode(VG,Fc),t.registerNode(WG,zc),t.registerNode(JG,zc),t.registerNode(TV,Pc),t.registerNode(zV,Rc),t.registerNode(VV,zc),t.registerNode(WV,Pc),t.registerNode(nj,Ic),t.registerNode(oj,Ic),t.registerNode(cj,Ic),t.registerNode(pj,Bc),t.registerNode(_j,Bc),t.registerNode(mj,Bc),t.registerNode(fj,Bc),t.registerNode(gj,Bc),t.registerNode(vj,Bc)}}.run(t),class{static run(t){t.registerNode(Ej,eh),t.registerNode(Lj,eh),t.registerNode(Rj,th),t.registerNode(Dj,th),t.registerNode(kj,nh),t.registerNode(Gj,nh),t.registerNode(jj,nh),t.registerNode(qj,nh),t.registerNode(eW,eh),t.registerNode(Kj,eh),t.registerNode(rW,eh),t.registerNode(lW,nh),t.registerNode(uW,th),t.registerNode(pW,Qc),t.registerNode(mW,nh),t.registerNode(bW,nh),t.registerNode(TW,nh),t.registerNode(MW,nh),t.registerNode(CW,eh),t.registerNode(OW,eh),t.registerNode(RW,nh),t.registerNode(DW,eh),t.registerNode(kW,th),t.registerNode(GW,nh),t.registerNode(WW,Qc),t.registerNode($W,eh),t.registerNode(ZW,Qc),t.registerNode(tq,eh),t.registerNode(iq,ih),t.registerNode(sq,ih),t.registerNode(rq,ih),t.registerNode(oq,ih),t.registerNode(aq,ih),t.registerNode(lq,ih)}}.run(t),class{static run(t){t.registerNode(mq,kc),t.registerNode(SH,Gc),t.registerNode(fq,Uc),t.registerNode(uq,Uc),t.registerNode(gq,Uc),t.registerNode(vq,Uc),t.registerNode(yq,Uc),t.registerNode(xq,Uc)}}.run(t),class{static run(t){t.registerOperation(bq),t.registerOperation(Fq),t.registerOperation(Hq),t.registerOperation(Xq),t.registerOperation(Zq),t.registerOperation(uX),t.registerOperation(rX),t.registerOperation(fX),t.registerOperation($X),t.registerOperation(QX),t.registerOperation(E$),t.registerOperation(L$),t.registerOperation(HJ),t.registerOperation(XJ),t.registerOperation(KJ),t.registerOperation(uZ),t.registerOperation(UZ),t.registerOperation(rK),t.registerOperation(fQ),t.registerOperation(LQ),t.registerOperation(UQ),t.registerOperation(jQ),t.registerOperation(JQ),t.registerOperation(n0),t.registerOperation(f0),t.registerOperation(N0),t.registerOperation(d0),t.registerOperation(V0),t.registerOperation(X0),t.registerOperation(p1),t.registerOperation(x1),t.registerOperation(A1),t.registerOperation(O1),t.registerOperation(B1),t.registerOperation(Y1),t.registerOperation(i2),t.registerOperation(_2),t.registerOperation(v2),t.registerOperation(w2),t.registerOperation(L2),t.registerOperation(k2),t.registerOperation(J2),t.registerOperation(c9),t.registerOperation(x9),t.registerOperation(G9),t.registerOperation(W9),t.registerOperation(J9),t.registerOperation(t3),t.registerOperation(o3),t.registerOperation(M3),t.registerOperation(P3),t.registerOperation(D3),t.registerNode(Aq,qc),t.registerNode(Eq,Hc),t.registerNode(Iq,Hc),t.registerNode(zq,jc),t.registerNode(qq,jc),t.registerNode(Jq,jc),t.registerNode(eX,jc),t.registerNode(iX,jc),t.registerNode(lX,jc),t.registerNode(_X,jc),t.registerNode(xX,jc),t.registerNode(wX,jc),t.registerNode(AX,jc),t.registerNode(LX,jc),t.registerNode(PX,$c),t.registerNode(IX,$c),t.registerNode(KX,$c),t.registerNode(nY,Zc),t.registerNode(N$,Vc),t.registerNode(R$,Vc),t.registerNode(BJ,Yc),t.registerNode(VJ,Zc),t.registerNode(qJ,$c),t.registerNode($J,Zc),t.registerNode(eZ,Zc),t.registerNode(lZ,Zc),t.registerNode(_Z,$c),t.registerNode(xZ,$c),t.registerNode(TZ,Zc),t.registerNode(DZ,$c),t.registerNode(HZ,Zc),t.registerNode(YZ,qc),t.registerNode(nK,qc),t.registerNode(lK,Yc),t.registerNode(hK,Yc),t.registerNode(MK,$c),t.registerNode(SK,$c),t.registerNode(cQ,Vc),t.registerNode(uQ,$c),t.registerNode(yQ,qc),t.registerNode(bQ,qc),t.registerNode(TQ,$c),t.registerNode(SQ,Zc),t.registerNode(DQ,$c),t.registerNode(IQ,Yc),t.registerNode(HQ,Zc),t.registerNode(XQ,Kc),t.registerNode(QQ,$c),t.registerNode(e0,Kc),t.registerNode(r0,$c),t.registerNode(a0,$c),t.registerNode(c0,Zc),t.registerNode(u0,Vc),t.registerNode(m0,Kc),t.registerNode(x0,Yc),t.registerNode(P0,Zc),t.registerNode(k0,Yc),t.registerNode(G0,$c),t.registerNode(j0,Yc),t.registerNode(q0,qc),t.registerNode(J0,$c),t.registerNode(K0,Vc,{userAllowed:!1}),t.registerNode(d1,Wc),t.registerNode(f1,$c),t.registerNode(T1,Zc),t.registerNode(S1,$c),t.registerNode(U1,$c),t.registerNode(L1,$c),t.registerNode(I1,Xc),t.registerNode(yV,Vc),t.registerNode(q1,$c),t.registerNode(Z1,$c),t.registerNode(o2,Kc),t.registerNode(p2,$c),t.registerNode(g2,jc),t.registerNode(b2,qc),t.registerNode(M2,$c),t.registerNode(D2,$c),t.registerNode(I2,$c),t.registerNode(j2,Vc),t.registerNode(q2,Vc),t.registerNode(V2,$c),t.registerNode(Q2,Zc),t.registerNode(e9,$c),t.registerNode(d9,$c),t.registerNode(_9,Yc),t.registerNode(f9,Yc),t.registerNode(pV,Yc),t.registerNode(T9,qc),t.registerNode(E9,Yc),t.registerNode(N9,Zc),t.registerNode(U9,Zc),t.registerNode(j9,$c),t.registerNode(Y9,$c),t.registerNode(Q9,Zc),t.registerNode(i3,Zc),t.registerNode(c3,$c),t.registerNode(u3,$c),t.registerNode(f3,$c),t.registerNode(x3,$c),t.registerNode(T3,Zc),t.registerNode(S3,$c),t.registerNode(O3,$c),t.registerNode(F3,$c),t.registerNode(z3,$c),t.registerNode(G3,Jc),t.registerNode(V3,Jc),t.registerNode(H3,Jc),t.registerNode(j3,Jc),t.registerNode(W3,Jc),t.registerNode(q3,Jc)}}.run(t)}}.run(li),class{static run(t){t.registerCamera(nj),t.registerCamera(oj)}}.run(li),class{static run(t){t.expressionsRegister.register(Y3,\\\\\\\"arg\\\\\\\"),t.expressionsRegister.register($3,\\\\\\\"argc\\\\\\\"),t.expressionsRegister.register(K3,\\\\\\\"bbox\\\\\\\"),t.expressionsRegister.register(Q3,\\\\\\\"centroid\\\\\\\"),t.expressionsRegister.register(t4,\\\\\\\"ch\\\\\\\"),t.expressionsRegister.register(e4,\\\\\\\"copy\\\\\\\"),t.expressionsRegister.register(n4,\\\\\\\"copRes\\\\\\\"),t.expressionsRegister.register(i4,\\\\\\\"isDeviceMobile\\\\\\\"),t.expressionsRegister.register(s4,\\\\\\\"isDeviceTouch\\\\\\\"),t.expressionsRegister.register(r4,\\\\\\\"js\\\\\\\"),t.expressionsRegister.register(o4,\\\\\\\"object\\\\\\\"),t.expressionsRegister.register(a4,\\\\\\\"objectsCount\\\\\\\"),t.expressionsRegister.register(l4,\\\\\\\"opdigits\\\\\\\"),t.expressionsRegister.register(c4,\\\\\\\"opname\\\\\\\"),t.expressionsRegister.register(h4,\\\\\\\"padzero\\\\\\\"),t.expressionsRegister.register(u4,\\\\\\\"point\\\\\\\"),t.expressionsRegister.register(d4,\\\\\\\"pointsCount\\\\\\\"),t.expressionsRegister.register(p4,\\\\\\\"strCharsCount\\\\\\\"),t.expressionsRegister.register(_4,\\\\\\\"strConcat\\\\\\\"),t.expressionsRegister.register(m4,\\\\\\\"strIndex\\\\\\\"),t.expressionsRegister.register(f4,\\\\\\\"strSub\\\\\\\"),t.expressionsRegister.register(g4,\\\\\\\"windowSize\\\\\\\")}}.run(li),class{static run(t){t.assemblersRegister.register(jn.GL_MESH_BASIC,y4,W4),t.assemblersRegister.register(jn.GL_MESH_LAMBERT,y4,q4),t.assemblersRegister.register(jn.GL_MESH_PHONG,y4,X4),t.assemblersRegister.register(jn.GL_MESH_STANDARD,y4,$4),t.assemblersRegister.register(jn.GL_MESH_PHYSICAL,y4,J4),t.assemblersRegister.register(jn.GL_PARTICLES,y4,c5),t.assemblersRegister.register(jn.GL_POINTS,y4,i5),t.assemblersRegister.register(jn.GL_LINE,y4,l5),t.assemblersRegister.register(jn.GL_TEXTURE,y4,h5),t.assemblersRegister.register(jn.GL_VOLUME,y4,m5)}}.run(li))}}f5._started=!1,f5.run()}]);void 0===POLY&&console.error(\\\\\\\"esm-webpack-plugin: nothing exported!\\\\\\\");const _POLY$PolyScene=POLY.PolyScene,_POLY$Poly=POLY.Poly,_POLY$SceneJsonImporter=POLY.SceneJsonImporter,_POLY$SceneDataManifestImporter=POLY.SceneDataManifestImporter,_POLY$mountScene=POLY.mountScene;export{_POLY$PolyScene as PolyScene,_POLY$Poly as Poly,_POLY$SceneJsonImporter as SceneJsonImporter,_POLY$SceneDataManifestImporter as SceneDataManifestImporter,_POLY$mountScene as mountScene};\\n//# sourceMappingURL=all.js.map\"","status":200,"headers":{"content-type":"application/javascript","content-length":"2831720"}},"type":2,"external":true,"timestamp":1723920092217},{"data":{"url":"blob:https://ipfs.arkivo.art/f0ecfea4-2428-4963-a146-465645568e4c","host":"","path":"https://ipfs.arkivo.art/f0ecfea4-2428-4963-a146-465645568e4c","type":"http","query":"","method":"GET","headers":{"origin":"https://ipfs.arkivo.art","referer":"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36"},"fragment":"","postData":null,"protocol":"blob:"},"type":1,"external":false,"timestamp":1723920092224},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/underoceanwaves.mp3","host":"ipfs.arkivo.art","path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/underoceanwaves.mp3","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=584528","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723920093574},{"data":{"url":"blob:https://ipfs.arkivo.art/f0ecfea4-2428-4963-a146-465645568e4c","body":"\"var __create = Object.create;\\nvar __defProp = Object.defineProperty;\\nvar __getProtoOf = Object.getPrototypeOf;\\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\\nvar __getOwnPropNames = Object.getOwnPropertyNames;\\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\\nvar __markAsModule = (target) => __defProp(target, \\\\\\\"__esModule\\\\\\\", {value: true});\\nvar __commonJS = (callback, module) => () => {\\n  if (!module) {\\n    module = {exports: {}};\\n    callback(module.exports, module);\\n  }\\n  return module.exports;\\n};\\nvar __exportStar = (target, module, desc) => {\\n  __markAsModule(target);\\n  if (module && typeof module === \\\\\\\"object\\\\\\\" || typeof module === \\\\\\\"function\\\\\\\") {\\n    for (let key of __getOwnPropNames(module))\\n      if (!__hasOwnProp.call(target, key) && key !== \\\\\\\"default\\\\\\\")\\n        __defProp(target, key, {get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable});\\n  }\\n  return target;\\n};\\nvar __toModule = (module) => {\\n  if (module && module.__esModule)\\n    return module;\\n  return __exportStar(__defProp(module != null ? __create(__getProtoOf(module)) : {}, \\\\\\\"default\\\\\\\", {value: module, enumerable: true}), module);\\n};\\n\\n// ../../../node_modules/lodash/_listCacheClear.js\\nvar require_listCacheClear = __commonJS((exports, module) => {\\n  function listCacheClear() {\\n    this.__data__ = [];\\n    this.size = 0;\\n  }\\n  module.exports = listCacheClear;\\n});\\n\\n// ../../../node_modules/lodash/eq.js\\nvar require_eq = __commonJS((exports, module) => {\\n  function eq(value, other) {\\n    return value === other || value !== value && other !== other;\\n  }\\n  module.exports = eq;\\n});\\n\\n// ../../../node_modules/lodash/_assocIndexOf.js\\nvar require_assocIndexOf = __commonJS((exports, module) => {\\n  var eq = require_eq();\\n  function assocIndexOf(array, key) {\\n    var length = array.length;\\n    while (length--) {\\n      if (eq(array[length][0], key)) {\\n        return length;\\n      }\\n    }\\n    return -1;\\n  }\\n  module.exports = assocIndexOf;\\n});\\n\\n// ../../../node_modules/lodash/_listCacheDelete.js\\nvar require_listCacheDelete = __commonJS((exports, module) => {\\n  var assocIndexOf = require_assocIndexOf();\\n  var arrayProto = Array.prototype;\\n  var splice = arrayProto.splice;\\n  function listCacheDelete(key) {\\n    var data = this.__data__, index = assocIndexOf(data, key);\\n    if (index < 0) {\\n      return false;\\n    }\\n    var lastIndex = data.length - 1;\\n    if (index == lastIndex) {\\n      data.pop();\\n    } else {\\n      splice.call(data, index, 1);\\n    }\\n    --this.size;\\n    return true;\\n  }\\n  module.exports = listCacheDelete;\\n});\\n\\n// ../../../node_modules/lodash/_listCacheGet.js\\nvar require_listCacheGet = __commonJS((exports, module) => {\\n  var assocIndexOf = require_assocIndexOf();\\n  function listCacheGet(key) {\\n    var data = this.__data__, index = assocIndexOf(data, key);\\n    return index < 0 ? void 0 : data[index][1];\\n  }\\n  module.exports = listCacheGet;\\n});\\n\\n// ../../../node_modules/lodash/_listCacheHas.js\\nvar require_listCacheHas = __commonJS((exports, module) => {\\n  var assocIndexOf = require_assocIndexOf();\\n  function listCacheHas(key) {\\n    return assocIndexOf(this.__data__, key) > -1;\\n  }\\n  module.exports = listCacheHas;\\n});\\n\\n// ../../../node_modules/lodash/_listCacheSet.js\\nvar require_listCacheSet = __commonJS((exports, module) => {\\n  var assocIndexOf = require_assocIndexOf();\\n  function listCacheSet(key, value) {\\n    var data = this.__data__, index = assocIndexOf(data, key);\\n    if (index < 0) {\\n      ++this.size;\\n      data.push([key, value]);\\n    } else {\\n      data[index][1] = value;\\n    }\\n    return this;\\n  }\\n  module.exports = listCacheSet;\\n});\\n\\n// ../../../node_modules/lodash/_ListCache.js\\nvar require_ListCache = __commonJS((exports, module) => {\\n  var listCacheClear = require_listCacheClear();\\n  var listCacheDelete = require_listCacheDelete();\\n  var listCacheGet = require_listCacheGet();\\n  var listCacheHas = require_listCacheHas();\\n  var listCacheSet = require_listCacheSet();\\n  function ListCache(entries) {\\n    var index = -1, length = entries == null ? 0 : entries.length;\\n    this.clear();\\n    while (++index < length) {\\n      var entry = entries[index];\\n      this.set(entry[0], entry[1]);\\n    }\\n  }\\n  ListCache.prototype.clear = listCacheClear;\\n  ListCache.prototype[\\\\\\\"delete\\\\\\\"] = listCacheDelete;\\n  ListCache.prototype.get = listCacheGet;\\n  ListCache.prototype.has = listCacheHas;\\n  ListCache.prototype.set = listCacheSet;\\n  module.exports = ListCache;\\n});\\n\\n// ../../../node_modules/lodash/_stackClear.js\\nvar require_stackClear = __commonJS((exports, module) => {\\n  var ListCache = require_ListCache();\\n  function stackClear() {\\n    this.__data__ = new ListCache();\\n    this.size = 0;\\n  }\\n  module.exports = stackClear;\\n});\\n\\n// ../../../node_modules/lodash/_stackDelete.js\\nvar require_stackDelete = __commonJS((exports, module) => {\\n  function stackDelete(key) {\\n    var data = this.__data__, result = data[\\\\\\\"delete\\\\\\\"](key);\\n    this.size = data.size;\\n    return result;\\n  }\\n  module.exports = stackDelete;\\n});\\n\\n// ../../../node_modules/lodash/_stackGet.js\\nvar require_stackGet = __commonJS((exports, module) => {\\n  function stackGet(key) {\\n    return this.__data__.get(key);\\n  }\\n  module.exports = stackGet;\\n});\\n\\n// ../../../node_modules/lodash/_stackHas.js\\nvar require_stackHas = __commonJS((exports, module) => {\\n  function stackHas(key) {\\n    return this.__data__.has(key);\\n  }\\n  module.exports = stackHas;\\n});\\n\\n// ../../../node_modules/lodash/_freeGlobal.js\\nvar require_freeGlobal = __commonJS((exports, module) => {\\n  var freeGlobal = typeof global == \\\\\\\"object\\\\\\\" && global && global.Object === Object && global;\\n  module.exports = freeGlobal;\\n});\\n\\n// ../../../node_modules/lodash/_root.js\\nvar require_root = __commonJS((exports, module) => {\\n  var freeGlobal = require_freeGlobal();\\n  var freeSelf = typeof self == \\\\\\\"object\\\\\\\" && self && self.Object === Object && self;\\n  var root = freeGlobal || freeSelf || Function(\\\\\\\"return this\\\\\\\")();\\n  module.exports = root;\\n});\\n\\n// ../../../node_modules/lodash/_Symbol.js\\nvar require_Symbol = __commonJS((exports, module) => {\\n  var root = require_root();\\n  var Symbol2 = root.Symbol;\\n  module.exports = Symbol2;\\n});\\n\\n// ../../../node_modules/lodash/_getRawTag.js\\nvar require_getRawTag = __commonJS((exports, module) => {\\n  var Symbol2 = require_Symbol();\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  var nativeObjectToString = objectProto.toString;\\n  var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;\\n  function getRawTag(value) {\\n    var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];\\n    try {\\n      value[symToStringTag] = void 0;\\n      var unmasked = true;\\n    } catch (e) {\\n    }\\n    var result = nativeObjectToString.call(value);\\n    if (unmasked) {\\n      if (isOwn) {\\n        value[symToStringTag] = tag;\\n      } else {\\n        delete value[symToStringTag];\\n      }\\n    }\\n    return result;\\n  }\\n  module.exports = getRawTag;\\n});\\n\\n// ../../../node_modules/lodash/_objectToString.js\\nvar require_objectToString = __commonJS((exports, module) => {\\n  var objectProto = Object.prototype;\\n  var nativeObjectToString = objectProto.toString;\\n  function objectToString(value) {\\n    return nativeObjectToString.call(value);\\n  }\\n  module.exports = objectToString;\\n});\\n\\n// ../../../node_modules/lodash/_baseGetTag.js\\nvar require_baseGetTag = __commonJS((exports, module) => {\\n  var Symbol2 = require_Symbol();\\n  var getRawTag = require_getRawTag();\\n  var objectToString = require_objectToString();\\n  var nullTag = \\\\\\\"[object Null]\\\\\\\";\\n  var undefinedTag = \\\\\\\"[object Undefined]\\\\\\\";\\n  var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;\\n  function baseGetTag(value) {\\n    if (value == null) {\\n      return value === void 0 ? undefinedTag : nullTag;\\n    }\\n    return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\\n  }\\n  module.exports = baseGetTag;\\n});\\n\\n// ../../../node_modules/lodash/isObject.js\\nvar require_isObject = __commonJS((exports, module) => {\\n  function isObject(value) {\\n    var type = typeof value;\\n    return value != null && (type == \\\\\\\"object\\\\\\\" || type == \\\\\\\"function\\\\\\\");\\n  }\\n  module.exports = isObject;\\n});\\n\\n// ../../../node_modules/lodash/isFunction.js\\nvar require_isFunction = __commonJS((exports, module) => {\\n  var baseGetTag = require_baseGetTag();\\n  var isObject = require_isObject();\\n  var asyncTag = \\\\\\\"[object AsyncFunction]\\\\\\\";\\n  var funcTag = \\\\\\\"[object Function]\\\\\\\";\\n  var genTag = \\\\\\\"[object GeneratorFunction]\\\\\\\";\\n  var proxyTag = \\\\\\\"[object Proxy]\\\\\\\";\\n  function isFunction(value) {\\n    if (!isObject(value)) {\\n      return false;\\n    }\\n    var tag = baseGetTag(value);\\n    return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\\n  }\\n  module.exports = isFunction;\\n});\\n\\n// ../../../node_modules/lodash/_coreJsData.js\\nvar require_coreJsData = __commonJS((exports, module) => {\\n  var root = require_root();\\n  var coreJsData = root[\\\\\\\"__core-js_shared__\\\\\\\"];\\n  module.exports = coreJsData;\\n});\\n\\n// ../../../node_modules/lodash/_isMasked.js\\nvar require_isMasked = __commonJS((exports, module) => {\\n  var coreJsData = require_coreJsData();\\n  var maskSrcKey = function() {\\n    var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || \\\\\\\"\\\\\\\");\\n    return uid ? \\\\\\\"Symbol(src)_1.\\\\\\\" + uid : \\\\\\\"\\\\\\\";\\n  }();\\n  function isMasked(func) {\\n    return !!maskSrcKey && maskSrcKey in func;\\n  }\\n  module.exports = isMasked;\\n});\\n\\n// ../../../node_modules/lodash/_toSource.js\\nvar require_toSource = __commonJS((exports, module) => {\\n  var funcProto = Function.prototype;\\n  var funcToString = funcProto.toString;\\n  function toSource(func) {\\n    if (func != null) {\\n      try {\\n        return funcToString.call(func);\\n      } catch (e) {\\n      }\\n      try {\\n        return func + \\\\\\\"\\\\\\\";\\n      } catch (e) {\\n      }\\n    }\\n    return \\\\\\\"\\\\\\\";\\n  }\\n  module.exports = toSource;\\n});\\n\\n// ../../../node_modules/lodash/_baseIsNative.js\\nvar require_baseIsNative = __commonJS((exports, module) => {\\n  var isFunction = require_isFunction();\\n  var isMasked = require_isMasked();\\n  var isObject = require_isObject();\\n  var toSource = require_toSource();\\n  var reRegExpChar = /[\\\\\\\\^$.*+?()[\\\\]{}|]/g;\\n  var reIsHostCtor = /^\\\\[object .+?Constructor\\\\]$/;\\n  var funcProto = Function.prototype;\\n  var objectProto = Object.prototype;\\n  var funcToString = funcProto.toString;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  var reIsNative = RegExp(\\\\\\\"^\\\\\\\" + funcToString.call(hasOwnProperty).replace(reRegExpChar, \\\\\\\"\\\\\\\\$&\\\\\\\").replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g, \\\\\\\"$1.*?\\\\\\\") + \\\\\\\"$\\\\\\\");\\n  function baseIsNative(value) {\\n    if (!isObject(value) || isMasked(value)) {\\n      return false;\\n    }\\n    var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\\n    return pattern.test(toSource(value));\\n  }\\n  module.exports = baseIsNative;\\n});\\n\\n// ../../../node_modules/lodash/_getValue.js\\nvar require_getValue = __commonJS((exports, module) => {\\n  function getValue(object, key) {\\n    return object == null ? void 0 : object[key];\\n  }\\n  module.exports = getValue;\\n});\\n\\n// ../../../node_modules/lodash/_getNative.js\\nvar require_getNative = __commonJS((exports, module) => {\\n  var baseIsNative = require_baseIsNative();\\n  var getValue = require_getValue();\\n  function getNative(object, key) {\\n    var value = getValue(object, key);\\n    return baseIsNative(value) ? value : void 0;\\n  }\\n  module.exports = getNative;\\n});\\n\\n// ../../../node_modules/lodash/_Map.js\\nvar require_Map = __commonJS((exports, module) => {\\n  var getNative = require_getNative();\\n  var root = require_root();\\n  var Map2 = getNative(root, \\\\\\\"Map\\\\\\\");\\n  module.exports = Map2;\\n});\\n\\n// ../../../node_modules/lodash/_nativeCreate.js\\nvar require_nativeCreate = __commonJS((exports, module) => {\\n  var getNative = require_getNative();\\n  var nativeCreate = getNative(Object, \\\\\\\"create\\\\\\\");\\n  module.exports = nativeCreate;\\n});\\n\\n// ../../../node_modules/lodash/_hashClear.js\\nvar require_hashClear = __commonJS((exports, module) => {\\n  var nativeCreate = require_nativeCreate();\\n  function hashClear() {\\n    this.__data__ = nativeCreate ? nativeCreate(null) : {};\\n    this.size = 0;\\n  }\\n  module.exports = hashClear;\\n});\\n\\n// ../../../node_modules/lodash/_hashDelete.js\\nvar require_hashDelete = __commonJS((exports, module) => {\\n  function hashDelete(key) {\\n    var result = this.has(key) && delete this.__data__[key];\\n    this.size -= result ? 1 : 0;\\n    return result;\\n  }\\n  module.exports = hashDelete;\\n});\\n\\n// ../../../node_modules/lodash/_hashGet.js\\nvar require_hashGet = __commonJS((exports, module) => {\\n  var nativeCreate = require_nativeCreate();\\n  var HASH_UNDEFINED = \\\\\\\"__lodash_hash_undefined__\\\\\\\";\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  function hashGet(key) {\\n    var data = this.__data__;\\n    if (nativeCreate) {\\n      var result = data[key];\\n      return result === HASH_UNDEFINED ? void 0 : result;\\n    }\\n    return hasOwnProperty.call(data, key) ? data[key] : void 0;\\n  }\\n  module.exports = hashGet;\\n});\\n\\n// ../../../node_modules/lodash/_hashHas.js\\nvar require_hashHas = __commonJS((exports, module) => {\\n  var nativeCreate = require_nativeCreate();\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  function hashHas(key) {\\n    var data = this.__data__;\\n    return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key);\\n  }\\n  module.exports = hashHas;\\n});\\n\\n// ../../../node_modules/lodash/_hashSet.js\\nvar require_hashSet = __commonJS((exports, module) => {\\n  var nativeCreate = require_nativeCreate();\\n  var HASH_UNDEFINED = \\\\\\\"__lodash_hash_undefined__\\\\\\\";\\n  function hashSet(key, value) {\\n    var data = this.__data__;\\n    this.size += this.has(key) ? 0 : 1;\\n    data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;\\n    return this;\\n  }\\n  module.exports = hashSet;\\n});\\n\\n// ../../../node_modules/lodash/_Hash.js\\nvar require_Hash = __commonJS((exports, module) => {\\n  var hashClear = require_hashClear();\\n  var hashDelete = require_hashDelete();\\n  var hashGet = require_hashGet();\\n  var hashHas = require_hashHas();\\n  var hashSet = require_hashSet();\\n  function Hash(entries) {\\n    var index = -1, length = entries == null ? 0 : entries.length;\\n    this.clear();\\n    while (++index < length) {\\n      var entry = entries[index];\\n      this.set(entry[0], entry[1]);\\n    }\\n  }\\n  Hash.prototype.clear = hashClear;\\n  Hash.prototype[\\\\\\\"delete\\\\\\\"] = hashDelete;\\n  Hash.prototype.get = hashGet;\\n  Hash.prototype.has = hashHas;\\n  Hash.prototype.set = hashSet;\\n  module.exports = Hash;\\n});\\n\\n// ../../../node_modules/lodash/_mapCacheClear.js\\nvar require_mapCacheClear = __commonJS((exports, module) => {\\n  var Hash = require_Hash();\\n  var ListCache = require_ListCache();\\n  var Map2 = require_Map();\\n  function mapCacheClear() {\\n    this.size = 0;\\n    this.__data__ = {\\n      hash: new Hash(),\\n      map: new (Map2 || ListCache)(),\\n      string: new Hash()\\n    };\\n  }\\n  module.exports = mapCacheClear;\\n});\\n\\n// ../../../node_modules/lodash/_isKeyable.js\\nvar require_isKeyable = __commonJS((exports, module) => {\\n  function isKeyable(value) {\\n    var type = typeof value;\\n    return type == \\\\\\\"string\\\\\\\" || type == \\\\\\\"number\\\\\\\" || type == \\\\\\\"symbol\\\\\\\" || type == \\\\\\\"boolean\\\\\\\" ? value !== \\\\\\\"__proto__\\\\\\\" : value === null;\\n  }\\n  module.exports = isKeyable;\\n});\\n\\n// ../../../node_modules/lodash/_getMapData.js\\nvar require_getMapData = __commonJS((exports, module) => {\\n  var isKeyable = require_isKeyable();\\n  function getMapData(map, key) {\\n    var data = map.__data__;\\n    return isKeyable(key) ? data[typeof key == \\\\\\\"string\\\\\\\" ? \\\\\\\"string\\\\\\\" : \\\\\\\"hash\\\\\\\"] : data.map;\\n  }\\n  module.exports = getMapData;\\n});\\n\\n// ../../../node_modules/lodash/_mapCacheDelete.js\\nvar require_mapCacheDelete = __commonJS((exports, module) => {\\n  var getMapData = require_getMapData();\\n  function mapCacheDelete(key) {\\n    var result = getMapData(this, key)[\\\\\\\"delete\\\\\\\"](key);\\n    this.size -= result ? 1 : 0;\\n    return result;\\n  }\\n  module.exports = mapCacheDelete;\\n});\\n\\n// ../../../node_modules/lodash/_mapCacheGet.js\\nvar require_mapCacheGet = __commonJS((exports, module) => {\\n  var getMapData = require_getMapData();\\n  function mapCacheGet(key) {\\n    return getMapData(this, key).get(key);\\n  }\\n  module.exports = mapCacheGet;\\n});\\n\\n// ../../../node_modules/lodash/_mapCacheHas.js\\nvar require_mapCacheHas = __commonJS((exports, module) => {\\n  var getMapData = require_getMapData();\\n  function mapCacheHas(key) {\\n    return getMapData(this, key).has(key);\\n  }\\n  module.exports = mapCacheHas;\\n});\\n\\n// ../../../node_modules/lodash/_mapCacheSet.js\\nvar require_mapCacheSet = __commonJS((exports, module) => {\\n  var getMapData = require_getMapData();\\n  function mapCacheSet(key, value) {\\n    var data = getMapData(this, key), size = data.size;\\n    data.set(key, value);\\n    this.size += data.size == size ? 0 : 1;\\n    return this;\\n  }\\n  module.exports = mapCacheSet;\\n});\\n\\n// ../../../node_modules/lodash/_MapCache.js\\nvar require_MapCache = __commonJS((exports, module) => {\\n  var mapCacheClear = require_mapCacheClear();\\n  var mapCacheDelete = require_mapCacheDelete();\\n  var mapCacheGet = require_mapCacheGet();\\n  var mapCacheHas = require_mapCacheHas();\\n  var mapCacheSet = require_mapCacheSet();\\n  function MapCache(entries) {\\n    var index = -1, length = entries == null ? 0 : entries.length;\\n    this.clear();\\n    while (++index < length) {\\n      var entry = entries[index];\\n      this.set(entry[0], entry[1]);\\n    }\\n  }\\n  MapCache.prototype.clear = mapCacheClear;\\n  MapCache.prototype[\\\\\\\"delete\\\\\\\"] = mapCacheDelete;\\n  MapCache.prototype.get = mapCacheGet;\\n  MapCache.prototype.has = mapCacheHas;\\n  MapCache.prototype.set = mapCacheSet;\\n  module.exports = MapCache;\\n});\\n\\n// ../../../node_modules/lodash/_stackSet.js\\nvar require_stackSet = __commonJS((exports, module) => {\\n  var ListCache = require_ListCache();\\n  var Map2 = require_Map();\\n  var MapCache = require_MapCache();\\n  var LARGE_ARRAY_SIZE = 200;\\n  function stackSet(key, value) {\\n    var data = this.__data__;\\n    if (data instanceof ListCache) {\\n      var pairs = data.__data__;\\n      if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) {\\n        pairs.push([key, value]);\\n        this.size = ++data.size;\\n        return this;\\n      }\\n      data = this.__data__ = new MapCache(pairs);\\n    }\\n    data.set(key, value);\\n    this.size = data.size;\\n    return this;\\n  }\\n  module.exports = stackSet;\\n});\\n\\n// ../../../node_modules/lodash/_Stack.js\\nvar require_Stack = __commonJS((exports, module) => {\\n  var ListCache = require_ListCache();\\n  var stackClear = require_stackClear();\\n  var stackDelete = require_stackDelete();\\n  var stackGet = require_stackGet();\\n  var stackHas = require_stackHas();\\n  var stackSet = require_stackSet();\\n  function Stack(entries) {\\n    var data = this.__data__ = new ListCache(entries);\\n    this.size = data.size;\\n  }\\n  Stack.prototype.clear = stackClear;\\n  Stack.prototype[\\\\\\\"delete\\\\\\\"] = stackDelete;\\n  Stack.prototype.get = stackGet;\\n  Stack.prototype.has = stackHas;\\n  Stack.prototype.set = stackSet;\\n  module.exports = Stack;\\n});\\n\\n// ../../../node_modules/lodash/_arrayEach.js\\nvar require_arrayEach = __commonJS((exports, module) => {\\n  function arrayEach(array, iteratee) {\\n    var index = -1, length = array == null ? 0 : array.length;\\n    while (++index < length) {\\n      if (iteratee(array[index], index, array) === false) {\\n        break;\\n      }\\n    }\\n    return array;\\n  }\\n  module.exports = arrayEach;\\n});\\n\\n// ../../../node_modules/lodash/_defineProperty.js\\nvar require_defineProperty = __commonJS((exports, module) => {\\n  var getNative = require_getNative();\\n  var defineProperty = function() {\\n    try {\\n      var func = getNative(Object, \\\\\\\"defineProperty\\\\\\\");\\n      func({}, \\\\\\\"\\\\\\\", {});\\n      return func;\\n    } catch (e) {\\n    }\\n  }();\\n  module.exports = defineProperty;\\n});\\n\\n// ../../../node_modules/lodash/_baseAssignValue.js\\nvar require_baseAssignValue = __commonJS((exports, module) => {\\n  var defineProperty = require_defineProperty();\\n  function baseAssignValue(object, key, value) {\\n    if (key == \\\\\\\"__proto__\\\\\\\" && defineProperty) {\\n      defineProperty(object, key, {\\n        configurable: true,\\n        enumerable: true,\\n        value,\\n        writable: true\\n      });\\n    } else {\\n      object[key] = value;\\n    }\\n  }\\n  module.exports = baseAssignValue;\\n});\\n\\n// ../../../node_modules/lodash/_assignValue.js\\nvar require_assignValue = __commonJS((exports, module) => {\\n  var baseAssignValue = require_baseAssignValue();\\n  var eq = require_eq();\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  function assignValue(object, key, value) {\\n    var objValue = object[key];\\n    if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) {\\n      baseAssignValue(object, key, value);\\n    }\\n  }\\n  module.exports = assignValue;\\n});\\n\\n// ../../../node_modules/lodash/_copyObject.js\\nvar require_copyObject = __commonJS((exports, module) => {\\n  var assignValue = require_assignValue();\\n  var baseAssignValue = require_baseAssignValue();\\n  function copyObject(source, props, object, customizer) {\\n    var isNew = !object;\\n    object || (object = {});\\n    var index = -1, length = props.length;\\n    while (++index < length) {\\n      var key = props[index];\\n      var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;\\n      if (newValue === void 0) {\\n        newValue = source[key];\\n      }\\n      if (isNew) {\\n        baseAssignValue(object, key, newValue);\\n      } else {\\n        assignValue(object, key, newValue);\\n      }\\n    }\\n    return object;\\n  }\\n  module.exports = copyObject;\\n});\\n\\n// ../../../node_modules/lodash/_baseTimes.js\\nvar require_baseTimes = __commonJS((exports, module) => {\\n  function baseTimes(n, iteratee) {\\n    var index = -1, result = Array(n);\\n    while (++index < n) {\\n      result[index] = iteratee(index);\\n    }\\n    return result;\\n  }\\n  module.exports = baseTimes;\\n});\\n\\n// ../../../node_modules/lodash/isObjectLike.js\\nvar require_isObjectLike = __commonJS((exports, module) => {\\n  function isObjectLike(value) {\\n    return value != null && typeof value == \\\\\\\"object\\\\\\\";\\n  }\\n  module.exports = isObjectLike;\\n});\\n\\n// ../../../node_modules/lodash/_baseIsArguments.js\\nvar require_baseIsArguments = __commonJS((exports, module) => {\\n  var baseGetTag = require_baseGetTag();\\n  var isObjectLike = require_isObjectLike();\\n  var argsTag = \\\\\\\"[object Arguments]\\\\\\\";\\n  function baseIsArguments(value) {\\n    return isObjectLike(value) && baseGetTag(value) == argsTag;\\n  }\\n  module.exports = baseIsArguments;\\n});\\n\\n// ../../../node_modules/lodash/isArguments.js\\nvar require_isArguments = __commonJS((exports, module) => {\\n  var baseIsArguments = require_baseIsArguments();\\n  var isObjectLike = require_isObjectLike();\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  var propertyIsEnumerable = objectProto.propertyIsEnumerable;\\n  var isArguments = baseIsArguments(function() {\\n    return arguments;\\n  }()) ? baseIsArguments : function(value) {\\n    return isObjectLike(value) && hasOwnProperty.call(value, \\\\\\\"callee\\\\\\\") && !propertyIsEnumerable.call(value, \\\\\\\"callee\\\\\\\");\\n  };\\n  module.exports = isArguments;\\n});\\n\\n// ../../../node_modules/lodash/isArray.js\\nvar require_isArray = __commonJS((exports, module) => {\\n  var isArray = Array.isArray;\\n  module.exports = isArray;\\n});\\n\\n// ../../../node_modules/lodash/stubFalse.js\\nvar require_stubFalse = __commonJS((exports, module) => {\\n  function stubFalse() {\\n    return false;\\n  }\\n  module.exports = stubFalse;\\n});\\n\\n// ../../../node_modules/lodash/isBuffer.js\\nvar require_isBuffer = __commonJS((exports, module) => {\\n  var root = require_root();\\n  var stubFalse = require_stubFalse();\\n  var freeExports = typeof exports == \\\\\\\"object\\\\\\\" && exports && !exports.nodeType && exports;\\n  var freeModule = freeExports && typeof module == \\\\\\\"object\\\\\\\" && module && !module.nodeType && module;\\n  var moduleExports = freeModule && freeModule.exports === freeExports;\\n  var Buffer2 = moduleExports ? root.Buffer : void 0;\\n  var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;\\n  var isBuffer = nativeIsBuffer || stubFalse;\\n  module.exports = isBuffer;\\n});\\n\\n// ../../../node_modules/lodash/_isIndex.js\\nvar require_isIndex = __commonJS((exports, module) => {\\n  var MAX_SAFE_INTEGER = 9007199254740991;\\n  var reIsUint = /^(?:0|[1-9]\\\\d*)$/;\\n  function isIndex(value, length) {\\n    var type = typeof value;\\n    length = length == null ? MAX_SAFE_INTEGER : length;\\n    return !!length && (type == \\\\\\\"number\\\\\\\" || type != \\\\\\\"symbol\\\\\\\" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);\\n  }\\n  module.exports = isIndex;\\n});\\n\\n// ../../../node_modules/lodash/isLength.js\\nvar require_isLength = __commonJS((exports, module) => {\\n  var MAX_SAFE_INTEGER = 9007199254740991;\\n  function isLength(value) {\\n    return typeof value == \\\\\\\"number\\\\\\\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\\n  }\\n  module.exports = isLength;\\n});\\n\\n// ../../../node_modules/lodash/_baseIsTypedArray.js\\nvar require_baseIsTypedArray = __commonJS((exports, module) => {\\n  var baseGetTag = require_baseGetTag();\\n  var isLength = require_isLength();\\n  var isObjectLike = require_isObjectLike();\\n  var argsTag = \\\\\\\"[object Arguments]\\\\\\\";\\n  var arrayTag = \\\\\\\"[object Array]\\\\\\\";\\n  var boolTag = \\\\\\\"[object Boolean]\\\\\\\";\\n  var dateTag = \\\\\\\"[object Date]\\\\\\\";\\n  var errorTag = \\\\\\\"[object Error]\\\\\\\";\\n  var funcTag = \\\\\\\"[object Function]\\\\\\\";\\n  var mapTag = \\\\\\\"[object Map]\\\\\\\";\\n  var numberTag = \\\\\\\"[object Number]\\\\\\\";\\n  var objectTag = \\\\\\\"[object Object]\\\\\\\";\\n  var regexpTag = \\\\\\\"[object RegExp]\\\\\\\";\\n  var setTag = \\\\\\\"[object Set]\\\\\\\";\\n  var stringTag = \\\\\\\"[object String]\\\\\\\";\\n  var weakMapTag = \\\\\\\"[object WeakMap]\\\\\\\";\\n  var arrayBufferTag = \\\\\\\"[object ArrayBuffer]\\\\\\\";\\n  var dataViewTag = \\\\\\\"[object DataView]\\\\\\\";\\n  var float32Tag = \\\\\\\"[object Float32Array]\\\\\\\";\\n  var float64Tag = \\\\\\\"[object Float64Array]\\\\\\\";\\n  var int8Tag = \\\\\\\"[object Int8Array]\\\\\\\";\\n  var int16Tag = \\\\\\\"[object Int16Array]\\\\\\\";\\n  var int32Tag = \\\\\\\"[object Int32Array]\\\\\\\";\\n  var uint8Tag = \\\\\\\"[object Uint8Array]\\\\\\\";\\n  var uint8ClampedTag = \\\\\\\"[object Uint8ClampedArray]\\\\\\\";\\n  var uint16Tag = \\\\\\\"[object Uint16Array]\\\\\\\";\\n  var uint32Tag = \\\\\\\"[object Uint32Array]\\\\\\\";\\n  var typedArrayTags = {};\\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\\n  function baseIsTypedArray(value) {\\n    return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\\n  }\\n  module.exports = baseIsTypedArray;\\n});\\n\\n// ../../../node_modules/lodash/_baseUnary.js\\nvar require_baseUnary = __commonJS((exports, module) => {\\n  function baseUnary(func) {\\n    return function(value) {\\n      return func(value);\\n    };\\n  }\\n  module.exports = baseUnary;\\n});\\n\\n// ../../../node_modules/lodash/_nodeUtil.js\\nvar require_nodeUtil = __commonJS((exports, module) => {\\n  var freeGlobal = require_freeGlobal();\\n  var freeExports = typeof exports == \\\\\\\"object\\\\\\\" && exports && !exports.nodeType && exports;\\n  var freeModule = freeExports && typeof module == \\\\\\\"object\\\\\\\" && module && !module.nodeType && module;\\n  var moduleExports = freeModule && freeModule.exports === freeExports;\\n  var freeProcess = moduleExports && freeGlobal.process;\\n  var nodeUtil = function() {\\n    try {\\n      var types = freeModule && freeModule.require && freeModule.require(\\\\\\\"util\\\\\\\").types;\\n      if (types) {\\n        return types;\\n      }\\n      return freeProcess && freeProcess.binding && freeProcess.binding(\\\\\\\"util\\\\\\\");\\n    } catch (e) {\\n    }\\n  }();\\n  module.exports = nodeUtil;\\n});\\n\\n// ../../../node_modules/lodash/isTypedArray.js\\nvar require_isTypedArray = __commonJS((exports, module) => {\\n  var baseIsTypedArray = require_baseIsTypedArray();\\n  var baseUnary = require_baseUnary();\\n  var nodeUtil = require_nodeUtil();\\n  var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\\n  var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\\n  module.exports = isTypedArray;\\n});\\n\\n// ../../../node_modules/lodash/_arrayLikeKeys.js\\nvar require_arrayLikeKeys = __commonJS((exports, module) => {\\n  var baseTimes = require_baseTimes();\\n  var isArguments = require_isArguments();\\n  var isArray = require_isArray();\\n  var isBuffer = require_isBuffer();\\n  var isIndex = require_isIndex();\\n  var isTypedArray = require_isTypedArray();\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  function arrayLikeKeys(value, inherited) {\\n    var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;\\n    for (var key in value) {\\n      if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == \\\\\\\"length\\\\\\\" || isBuff && (key == \\\\\\\"offset\\\\\\\" || key == \\\\\\\"parent\\\\\\\") || isType && (key == \\\\\\\"buffer\\\\\\\" || key == \\\\\\\"byteLength\\\\\\\" || key == \\\\\\\"byteOffset\\\\\\\") || isIndex(key, length)))) {\\n        result.push(key);\\n      }\\n    }\\n    return result;\\n  }\\n  module.exports = arrayLikeKeys;\\n});\\n\\n// ../../../node_modules/lodash/_isPrototype.js\\nvar require_isPrototype = __commonJS((exports, module) => {\\n  var objectProto = Object.prototype;\\n  function isPrototype(value) {\\n    var Ctor = value && value.constructor, proto = typeof Ctor == \\\\\\\"function\\\\\\\" && Ctor.prototype || objectProto;\\n    return value === proto;\\n  }\\n  module.exports = isPrototype;\\n});\\n\\n// ../../../node_modules/lodash/_overArg.js\\nvar require_overArg = __commonJS((exports, module) => {\\n  function overArg(func, transform) {\\n    return function(arg) {\\n      return func(transform(arg));\\n    };\\n  }\\n  module.exports = overArg;\\n});\\n\\n// ../../../node_modules/lodash/_nativeKeys.js\\nvar require_nativeKeys = __commonJS((exports, module) => {\\n  var overArg = require_overArg();\\n  var nativeKeys = overArg(Object.keys, Object);\\n  module.exports = nativeKeys;\\n});\\n\\n// ../../../node_modules/lodash/_baseKeys.js\\nvar require_baseKeys = __commonJS((exports, module) => {\\n  var isPrototype = require_isPrototype();\\n  var nativeKeys = require_nativeKeys();\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  function baseKeys(object) {\\n    if (!isPrototype(object)) {\\n      return nativeKeys(object);\\n    }\\n    var result = [];\\n    for (var key in Object(object)) {\\n      if (hasOwnProperty.call(object, key) && key != \\\\\\\"constructor\\\\\\\") {\\n        result.push(key);\\n      }\\n    }\\n    return result;\\n  }\\n  module.exports = baseKeys;\\n});\\n\\n// ../../../node_modules/lodash/isArrayLike.js\\nvar require_isArrayLike = __commonJS((exports, module) => {\\n  var isFunction = require_isFunction();\\n  var isLength = require_isLength();\\n  function isArrayLike(value) {\\n    return value != null && isLength(value.length) && !isFunction(value);\\n  }\\n  module.exports = isArrayLike;\\n});\\n\\n// ../../../node_modules/lodash/keys.js\\nvar require_keys = __commonJS((exports, module) => {\\n  var arrayLikeKeys = require_arrayLikeKeys();\\n  var baseKeys = require_baseKeys();\\n  var isArrayLike = require_isArrayLike();\\n  function keys(object) {\\n    return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\\n  }\\n  module.exports = keys;\\n});\\n\\n// ../../../node_modules/lodash/_baseAssign.js\\nvar require_baseAssign = __commonJS((exports, module) => {\\n  var copyObject = require_copyObject();\\n  var keys = require_keys();\\n  function baseAssign(object, source) {\\n    return object && copyObject(source, keys(source), object);\\n  }\\n  module.exports = baseAssign;\\n});\\n\\n// ../../../node_modules/lodash/_nativeKeysIn.js\\nvar require_nativeKeysIn = __commonJS((exports, module) => {\\n  function nativeKeysIn(object) {\\n    var result = [];\\n    if (object != null) {\\n      for (var key in Object(object)) {\\n        result.push(key);\\n      }\\n    }\\n    return result;\\n  }\\n  module.exports = nativeKeysIn;\\n});\\n\\n// ../../../node_modules/lodash/_baseKeysIn.js\\nvar require_baseKeysIn = __commonJS((exports, module) => {\\n  var isObject = require_isObject();\\n  var isPrototype = require_isPrototype();\\n  var nativeKeysIn = require_nativeKeysIn();\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  function baseKeysIn(object) {\\n    if (!isObject(object)) {\\n      return nativeKeysIn(object);\\n    }\\n    var isProto = isPrototype(object), result = [];\\n    for (var key in object) {\\n      if (!(key == \\\\\\\"constructor\\\\\\\" && (isProto || !hasOwnProperty.call(object, key)))) {\\n        result.push(key);\\n      }\\n    }\\n    return result;\\n  }\\n  module.exports = baseKeysIn;\\n});\\n\\n// ../../../node_modules/lodash/keysIn.js\\nvar require_keysIn = __commonJS((exports, module) => {\\n  var arrayLikeKeys = require_arrayLikeKeys();\\n  var baseKeysIn = require_baseKeysIn();\\n  var isArrayLike = require_isArrayLike();\\n  function keysIn(object) {\\n    return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\\n  }\\n  module.exports = keysIn;\\n});\\n\\n// ../../../node_modules/lodash/_baseAssignIn.js\\nvar require_baseAssignIn = __commonJS((exports, module) => {\\n  var copyObject = require_copyObject();\\n  var keysIn = require_keysIn();\\n  function baseAssignIn(object, source) {\\n    return object && copyObject(source, keysIn(source), object);\\n  }\\n  module.exports = baseAssignIn;\\n});\\n\\n// ../../../node_modules/lodash/_cloneBuffer.js\\nvar require_cloneBuffer = __commonJS((exports, module) => {\\n  var root = require_root();\\n  var freeExports = typeof exports == \\\\\\\"object\\\\\\\" && exports && !exports.nodeType && exports;\\n  var freeModule = freeExports && typeof module == \\\\\\\"object\\\\\\\" && module && !module.nodeType && module;\\n  var moduleExports = freeModule && freeModule.exports === freeExports;\\n  var Buffer2 = moduleExports ? root.Buffer : void 0;\\n  var allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0;\\n  function cloneBuffer(buffer, isDeep) {\\n    if (isDeep) {\\n      return buffer.slice();\\n    }\\n    var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\\n    buffer.copy(result);\\n    return result;\\n  }\\n  module.exports = cloneBuffer;\\n});\\n\\n// ../../../node_modules/lodash/_copyArray.js\\nvar require_copyArray = __commonJS((exports, module) => {\\n  function copyArray2(source, array) {\\n    var index = -1, length = source.length;\\n    array || (array = Array(length));\\n    while (++index < length) {\\n      array[index] = source[index];\\n    }\\n    return array;\\n  }\\n  module.exports = copyArray2;\\n});\\n\\n// ../../../node_modules/lodash/_arrayFilter.js\\nvar require_arrayFilter = __commonJS((exports, module) => {\\n  function arrayFilter(array, predicate) {\\n    var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];\\n    while (++index < length) {\\n      var value = array[index];\\n      if (predicate(value, index, array)) {\\n        result[resIndex++] = value;\\n      }\\n    }\\n    return result;\\n  }\\n  module.exports = arrayFilter;\\n});\\n\\n// ../../../node_modules/lodash/stubArray.js\\nvar require_stubArray = __commonJS((exports, module) => {\\n  function stubArray() {\\n    return [];\\n  }\\n  module.exports = stubArray;\\n});\\n\\n// ../../../node_modules/lodash/_getSymbols.js\\nvar require_getSymbols = __commonJS((exports, module) => {\\n  var arrayFilter = require_arrayFilter();\\n  var stubArray = require_stubArray();\\n  var objectProto = Object.prototype;\\n  var propertyIsEnumerable = objectProto.propertyIsEnumerable;\\n  var nativeGetSymbols = Object.getOwnPropertySymbols;\\n  var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\\n    if (object == null) {\\n      return [];\\n    }\\n    object = Object(object);\\n    return arrayFilter(nativeGetSymbols(object), function(symbol) {\\n      return propertyIsEnumerable.call(object, symbol);\\n    });\\n  };\\n  module.exports = getSymbols;\\n});\\n\\n// ../../../node_modules/lodash/_copySymbols.js\\nvar require_copySymbols = __commonJS((exports, module) => {\\n  var copyObject = require_copyObject();\\n  var getSymbols = require_getSymbols();\\n  function copySymbols(source, object) {\\n    return copyObject(source, getSymbols(source), object);\\n  }\\n  module.exports = copySymbols;\\n});\\n\\n// ../../../node_modules/lodash/_arrayPush.js\\nvar require_arrayPush = __commonJS((exports, module) => {\\n  function arrayPush(array, values) {\\n    var index = -1, length = values.length, offset = array.length;\\n    while (++index < length) {\\n      array[offset + index] = values[index];\\n    }\\n    return array;\\n  }\\n  module.exports = arrayPush;\\n});\\n\\n// ../../../node_modules/lodash/_getPrototype.js\\nvar require_getPrototype = __commonJS((exports, module) => {\\n  var overArg = require_overArg();\\n  var getPrototype = overArg(Object.getPrototypeOf, Object);\\n  module.exports = getPrototype;\\n});\\n\\n// ../../../node_modules/lodash/_getSymbolsIn.js\\nvar require_getSymbolsIn = __commonJS((exports, module) => {\\n  var arrayPush = require_arrayPush();\\n  var getPrototype = require_getPrototype();\\n  var getSymbols = require_getSymbols();\\n  var stubArray = require_stubArray();\\n  var nativeGetSymbols = Object.getOwnPropertySymbols;\\n  var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\\n    var result = [];\\n    while (object) {\\n      arrayPush(result, getSymbols(object));\\n      object = getPrototype(object);\\n    }\\n    return result;\\n  };\\n  module.exports = getSymbolsIn;\\n});\\n\\n// ../../../node_modules/lodash/_copySymbolsIn.js\\nvar require_copySymbolsIn = __commonJS((exports, module) => {\\n  var copyObject = require_copyObject();\\n  var getSymbolsIn = require_getSymbolsIn();\\n  function copySymbolsIn(source, object) {\\n    return copyObject(source, getSymbolsIn(source), object);\\n  }\\n  module.exports = copySymbolsIn;\\n});\\n\\n// ../../../node_modules/lodash/_baseGetAllKeys.js\\nvar require_baseGetAllKeys = __commonJS((exports, module) => {\\n  var arrayPush = require_arrayPush();\\n  var isArray = require_isArray();\\n  function baseGetAllKeys(object, keysFunc, symbolsFunc) {\\n    var result = keysFunc(object);\\n    return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\\n  }\\n  module.exports = baseGetAllKeys;\\n});\\n\\n// ../../../node_modules/lodash/_getAllKeys.js\\nvar require_getAllKeys = __commonJS((exports, module) => {\\n  var baseGetAllKeys = require_baseGetAllKeys();\\n  var getSymbols = require_getSymbols();\\n  var keys = require_keys();\\n  function getAllKeys(object) {\\n    return baseGetAllKeys(object, keys, getSymbols);\\n  }\\n  module.exports = getAllKeys;\\n});\\n\\n// ../../../node_modules/lodash/_getAllKeysIn.js\\nvar require_getAllKeysIn = __commonJS((exports, module) => {\\n  var baseGetAllKeys = require_baseGetAllKeys();\\n  var getSymbolsIn = require_getSymbolsIn();\\n  var keysIn = require_keysIn();\\n  function getAllKeysIn(object) {\\n    return baseGetAllKeys(object, keysIn, getSymbolsIn);\\n  }\\n  module.exports = getAllKeysIn;\\n});\\n\\n// ../../../node_modules/lodash/_DataView.js\\nvar require_DataView = __commonJS((exports, module) => {\\n  var getNative = require_getNative();\\n  var root = require_root();\\n  var DataView = getNative(root, \\\\\\\"DataView\\\\\\\");\\n  module.exports = DataView;\\n});\\n\\n// ../../../node_modules/lodash/_Promise.js\\nvar require_Promise = __commonJS((exports, module) => {\\n  var getNative = require_getNative();\\n  var root = require_root();\\n  var Promise2 = getNative(root, \\\\\\\"Promise\\\\\\\");\\n  module.exports = Promise2;\\n});\\n\\n// ../../../node_modules/lodash/_Set.js\\nvar require_Set = __commonJS((exports, module) => {\\n  var getNative = require_getNative();\\n  var root = require_root();\\n  var Set2 = getNative(root, \\\\\\\"Set\\\\\\\");\\n  module.exports = Set2;\\n});\\n\\n// ../../../node_modules/lodash/_WeakMap.js\\nvar require_WeakMap = __commonJS((exports, module) => {\\n  var getNative = require_getNative();\\n  var root = require_root();\\n  var WeakMap2 = getNative(root, \\\\\\\"WeakMap\\\\\\\");\\n  module.exports = WeakMap2;\\n});\\n\\n// ../../../node_modules/lodash/_getTag.js\\nvar require_getTag = __commonJS((exports, module) => {\\n  var DataView = require_DataView();\\n  var Map2 = require_Map();\\n  var Promise2 = require_Promise();\\n  var Set2 = require_Set();\\n  var WeakMap2 = require_WeakMap();\\n  var baseGetTag = require_baseGetTag();\\n  var toSource = require_toSource();\\n  var mapTag = \\\\\\\"[object Map]\\\\\\\";\\n  var objectTag = \\\\\\\"[object Object]\\\\\\\";\\n  var promiseTag = \\\\\\\"[object Promise]\\\\\\\";\\n  var setTag = \\\\\\\"[object Set]\\\\\\\";\\n  var weakMapTag = \\\\\\\"[object WeakMap]\\\\\\\";\\n  var dataViewTag = \\\\\\\"[object DataView]\\\\\\\";\\n  var dataViewCtorString = toSource(DataView);\\n  var mapCtorString = toSource(Map2);\\n  var promiseCtorString = toSource(Promise2);\\n  var setCtorString = toSource(Set2);\\n  var weakMapCtorString = toSource(WeakMap2);\\n  var getTag = baseGetTag;\\n  if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) {\\n    getTag = function(value) {\\n      var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : \\\\\\\"\\\\\\\";\\n      if (ctorString) {\\n        switch (ctorString) {\\n          case dataViewCtorString:\\n            return dataViewTag;\\n          case mapCtorString:\\n            return mapTag;\\n          case promiseCtorString:\\n            return promiseTag;\\n          case setCtorString:\\n            return setTag;\\n          case weakMapCtorString:\\n            return weakMapTag;\\n        }\\n      }\\n      return result;\\n    };\\n  }\\n  module.exports = getTag;\\n});\\n\\n// ../../../node_modules/lodash/_initCloneArray.js\\nvar require_initCloneArray = __commonJS((exports, module) => {\\n  var objectProto = Object.prototype;\\n  var hasOwnProperty = objectProto.hasOwnProperty;\\n  function initCloneArray(array) {\\n    var length = array.length, result = new array.constructor(length);\\n    if (length && typeof array[0] == \\\\\\\"string\\\\\\\" && hasOwnProperty.call(array, \\\\\\\"index\\\\\\\")) {\\n      result.index = array.index;\\n      result.input = array.input;\\n    }\\n    return result;\\n  }\\n  module.exports = initCloneArray;\\n});\\n\\n// ../../../node_modules/lodash/_Uint8Array.js\\nvar require_Uint8Array = __commonJS((exports, module) => {\\n  var root = require_root();\\n  var Uint8Array2 = root.Uint8Array;\\n  module.exports = Uint8Array2;\\n});\\n\\n// ../../../node_modules/lodash/_cloneArrayBuffer.js\\nvar require_cloneArrayBuffer = __commonJS((exports, module) => {\\n  var Uint8Array2 = require_Uint8Array();\\n  function cloneArrayBuffer(arrayBuffer) {\\n    var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\\n    new Uint8Array2(result).set(new Uint8Array2(arrayBuffer));\\n    return result;\\n  }\\n  module.exports = cloneArrayBuffer;\\n});\\n\\n// ../../../node_modules/lodash/_cloneDataView.js\\nvar require_cloneDataView = __commonJS((exports, module) => {\\n  var cloneArrayBuffer = require_cloneArrayBuffer();\\n  function cloneDataView(dataView, isDeep) {\\n    var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\\n    return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\\n  }\\n  module.exports = cloneDataView;\\n});\\n\\n// ../../../node_modules/lodash/_cloneRegExp.js\\nvar require_cloneRegExp = __commonJS((exports, module) => {\\n  var reFlags = /\\\\w*$/;\\n  function cloneRegExp(regexp) {\\n    var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\\n    result.lastIndex = regexp.lastIndex;\\n    return result;\\n  }\\n  module.exports = cloneRegExp;\\n});\\n\\n// ../../../node_modules/lodash/_cloneSymbol.js\\nvar require_cloneSymbol = __commonJS((exports, module) => {\\n  var Symbol2 = require_Symbol();\\n  var symbolProto = Symbol2 ? Symbol2.prototype : void 0;\\n  var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;\\n  function cloneSymbol(symbol) {\\n    return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\\n  }\\n  module.exports = cloneSymbol;\\n});\\n\\n// ../../../node_modules/lodash/_cloneTypedArray.js\\nvar require_cloneTypedArray = __commonJS((exports, module) => {\\n  var cloneArrayBuffer = require_cloneArrayBuffer();\\n  function cloneTypedArray(typedArray, isDeep) {\\n    var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\\n    return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\\n  }\\n  module.exports = cloneTypedArray;\\n});\\n\\n// ../../../node_modules/lodash/_initCloneByTag.js\\nvar require_initCloneByTag = __commonJS((exports, module) => {\\n  var cloneArrayBuffer = require_cloneArrayBuffer();\\n  var cloneDataView = require_cloneDataView();\\n  var cloneRegExp = require_cloneRegExp();\\n  var cloneSymbol = require_cloneSymbol();\\n  var cloneTypedArray = require_cloneTypedArray();\\n  var boolTag = \\\\\\\"[object Boolean]\\\\\\\";\\n  var dateTag = \\\\\\\"[object Date]\\\\\\\";\\n  var mapTag = \\\\\\\"[object Map]\\\\\\\";\\n  var numberTag = \\\\\\\"[object Number]\\\\\\\";\\n  var regexpTag = \\\\\\\"[object RegExp]\\\\\\\";\\n  var setTag = \\\\\\\"[object Set]\\\\\\\";\\n  var stringTag = \\\\\\\"[object String]\\\\\\\";\\n  var symbolTag = \\\\\\\"[object Symbol]\\\\\\\";\\n  var arrayBufferTag = \\\\\\\"[object ArrayBuffer]\\\\\\\";\\n  var dataViewTag = \\\\\\\"[object DataView]\\\\\\\";\\n  var float32Tag = \\\\\\\"[object Float32Array]\\\\\\\";\\n  var float64Tag = \\\\\\\"[object Float64Array]\\\\\\\";\\n  var int8Tag = \\\\\\\"[object Int8Array]\\\\\\\";\\n  var int16Tag = \\\\\\\"[object Int16Array]\\\\\\\";\\n  var int32Tag = \\\\\\\"[object Int32Array]\\\\\\\";\\n  var uint8Tag = \\\\\\\"[object Uint8Array]\\\\\\\";\\n  var uint8ClampedTag = \\\\\\\"[object Uint8ClampedArray]\\\\\\\";\\n  var uint16Tag = \\\\\\\"[object Uint16Array]\\\\\\\";\\n  var uint32Tag = \\\\\\\"[object Uint32Array]\\\\\\\";\\n  function initCloneByTag(object, tag, isDeep) {\\n    var Ctor = object.constructor;\\n    switch (tag) {\\n      case arrayBufferTag:\\n        return cloneArrayBuffer(object);\\n      case boolTag:\\n      case dateTag:\\n        return new Ctor(+object);\\n      case dataViewTag:\\n        return cloneDataView(object, isDeep);\\n      case float32Tag:\\n      case float64Tag:\\n      case int8Tag:\\n      case int16Tag:\\n      case int32Tag:\\n      case uint8Tag:\\n      case uint8ClampedTag:\\n      case uint16Tag:\\n      case uint32Tag:\\n        return cloneTypedArray(object, isDeep);\\n      case mapTag:\\n        return new Ctor();\\n      case numberTag:\\n      case stringTag:\\n        return new Ctor(object);\\n      case regexpTag:\\n        return cloneRegExp(object);\\n      case setTag:\\n        return new Ctor();\\n      case symbolTag:\\n        return cloneSymbol(object);\\n    }\\n  }\\n  module.exports = initCloneByTag;\\n});\\n\\n// ../../../node_modules/lodash/_baseCreate.js\\nvar require_baseCreate = __commonJS((exports, module) => {\\n  var isObject = require_isObject();\\n  var objectCreate = Object.create;\\n  var baseCreate = function() {\\n    function object() {\\n    }\\n    return function(proto) {\\n      if (!isObject(proto)) {\\n        return {};\\n      }\\n      if (objectCreate) {\\n        return objectCreate(proto);\\n      }\\n      object.prototype = proto;\\n      var result = new object();\\n      object.prototype = void 0;\\n      return result;\\n    };\\n  }();\\n  module.exports = baseCreate;\\n});\\n\\n// ../../../node_modules/lodash/_initCloneObject.js\\nvar require_initCloneObject = __commonJS((exports, module) => {\\n  var baseCreate = require_baseCreate();\\n  var getPrototype = require_getPrototype();\\n  var isPrototype = require_isPrototype();\\n  function initCloneObject(object) {\\n    return typeof object.constructor == \\\\\\\"function\\\\\\\" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};\\n  }\\n  module.exports = initCloneObject;\\n});\\n\\n// ../../../node_modules/lodash/_baseIsMap.js\\nvar require_baseIsMap = __commonJS((exports, module) => {\\n  var getTag = require_getTag();\\n  var isObjectLike = require_isObjectLike();\\n  var mapTag = \\\\\\\"[object Map]\\\\\\\";\\n  function baseIsMap(value) {\\n    return isObjectLike(value) && getTag(value) == mapTag;\\n  }\\n  module.exports = baseIsMap;\\n});\\n\\n// ../../../node_modules/lodash/isMap.js\\nvar require_isMap = __commonJS((exports, module) => {\\n  var baseIsMap = require_baseIsMap();\\n  var baseUnary = require_baseUnary();\\n  var nodeUtil = require_nodeUtil();\\n  var nodeIsMap = nodeUtil && nodeUtil.isMap;\\n  var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\\n  module.exports = isMap;\\n});\\n\\n// ../../../node_modules/lodash/_baseIsSet.js\\nvar require_baseIsSet = __commonJS((exports, module) => {\\n  var getTag = require_getTag();\\n  var isObjectLike = require_isObjectLike();\\n  var setTag = \\\\\\\"[object Set]\\\\\\\";\\n  function baseIsSet(value) {\\n    return isObjectLike(value) && getTag(value) == setTag;\\n  }\\n  module.exports = baseIsSet;\\n});\\n\\n// ../../../node_modules/lodash/isSet.js\\nvar require_isSet = __commonJS((exports, module) => {\\n  var baseIsSet = require_baseIsSet();\\n  var baseUnary = require_baseUnary();\\n  var nodeUtil = require_nodeUtil();\\n  var nodeIsSet = nodeUtil && nodeUtil.isSet;\\n  var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\\n  module.exports = isSet;\\n});\\n\\n// ../../../node_modules/lodash/_baseClone.js\\nvar require_baseClone = __commonJS((exports, module) => {\\n  var Stack = require_Stack();\\n  var arrayEach = require_arrayEach();\\n  var assignValue = require_assignValue();\\n  var baseAssign = require_baseAssign();\\n  var baseAssignIn = require_baseAssignIn();\\n  var cloneBuffer = require_cloneBuffer();\\n  var copyArray2 = require_copyArray();\\n  var copySymbols = require_copySymbols();\\n  var copySymbolsIn = require_copySymbolsIn();\\n  var getAllKeys = require_getAllKeys();\\n  var getAllKeysIn = require_getAllKeysIn();\\n  var getTag = require_getTag();\\n  var initCloneArray = require_initCloneArray();\\n  var initCloneByTag = require_initCloneByTag();\\n  var initCloneObject = require_initCloneObject();\\n  var isArray = require_isArray();\\n  var isBuffer = require_isBuffer();\\n  var isMap = require_isMap();\\n  var isObject = require_isObject();\\n  var isSet = require_isSet();\\n  var keys = require_keys();\\n  var keysIn = require_keysIn();\\n  var CLONE_DEEP_FLAG = 1;\\n  var CLONE_FLAT_FLAG = 2;\\n  var CLONE_SYMBOLS_FLAG = 4;\\n  var argsTag = \\\\\\\"[object Arguments]\\\\\\\";\\n  var arrayTag = \\\\\\\"[object Array]\\\\\\\";\\n  var boolTag = \\\\\\\"[object Boolean]\\\\\\\";\\n  var dateTag = \\\\\\\"[object Date]\\\\\\\";\\n  var errorTag = \\\\\\\"[object Error]\\\\\\\";\\n  var funcTag = \\\\\\\"[object Function]\\\\\\\";\\n  var genTag = \\\\\\\"[object GeneratorFunction]\\\\\\\";\\n  var mapTag = \\\\\\\"[object Map]\\\\\\\";\\n  var numberTag = \\\\\\\"[object Number]\\\\\\\";\\n  var objectTag = \\\\\\\"[object Object]\\\\\\\";\\n  var regexpTag = \\\\\\\"[object RegExp]\\\\\\\";\\n  var setTag = \\\\\\\"[object Set]\\\\\\\";\\n  var stringTag = \\\\\\\"[object String]\\\\\\\";\\n  var symbolTag = \\\\\\\"[object Symbol]\\\\\\\";\\n  var weakMapTag = \\\\\\\"[object WeakMap]\\\\\\\";\\n  var arrayBufferTag = \\\\\\\"[object ArrayBuffer]\\\\\\\";\\n  var dataViewTag = \\\\\\\"[object DataView]\\\\\\\";\\n  var float32Tag = \\\\\\\"[object Float32Array]\\\\\\\";\\n  var float64Tag = \\\\\\\"[object Float64Array]\\\\\\\";\\n  var int8Tag = \\\\\\\"[object Int8Array]\\\\\\\";\\n  var int16Tag = \\\\\\\"[object Int16Array]\\\\\\\";\\n  var int32Tag = \\\\\\\"[object Int32Array]\\\\\\\";\\n  var uint8Tag = \\\\\\\"[object Uint8Array]\\\\\\\";\\n  var uint8ClampedTag = \\\\\\\"[object Uint8ClampedArray]\\\\\\\";\\n  var uint16Tag = \\\\\\\"[object Uint16Array]\\\\\\\";\\n  var uint32Tag = \\\\\\\"[object Uint32Array]\\\\\\\";\\n  var cloneableTags = {};\\n  cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\\n  cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\\n  function baseClone(value, bitmask, customizer, key, object, stack) {\\n    var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;\\n    if (customizer) {\\n      result = object ? customizer(value, key, object, stack) : customizer(value);\\n    }\\n    if (result !== void 0) {\\n      return result;\\n    }\\n    if (!isObject(value)) {\\n      return value;\\n    }\\n    var isArr = isArray(value);\\n    if (isArr) {\\n      result = initCloneArray(value);\\n      if (!isDeep) {\\n        return copyArray2(value, result);\\n      }\\n    } else {\\n      var tag = getTag(value), isFunc = tag == funcTag || tag == genTag;\\n      if (isBuffer(value)) {\\n        return cloneBuffer(value, isDeep);\\n      }\\n      if (tag == objectTag || tag == argsTag || isFunc && !object) {\\n        result = isFlat || isFunc ? {} : initCloneObject(value);\\n        if (!isDeep) {\\n          return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));\\n        }\\n      } else {\\n        if (!cloneableTags[tag]) {\\n          return object ? value : {};\\n        }\\n        result = initCloneByTag(value, tag, isDeep);\\n      }\\n    }\\n    stack || (stack = new Stack());\\n    var stacked = stack.get(value);\\n    if (stacked) {\\n      return stacked;\\n    }\\n    stack.set(value, result);\\n    if (isSet(value)) {\\n      value.forEach(function(subValue) {\\n        result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\\n      });\\n    } else if (isMap(value)) {\\n      value.forEach(function(subValue, key2) {\\n        result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\\n      });\\n    }\\n    var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;\\n    var props = isArr ? void 0 : keysFunc(value);\\n    arrayEach(props || value, function(subValue, key2) {\\n      if (props) {\\n        key2 = subValue;\\n        subValue = value[key2];\\n      }\\n      assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\\n    });\\n    return result;\\n  }\\n  module.exports = baseClone;\\n});\\n\\n// ../../../node_modules/lodash/cloneDeep.js\\nvar require_cloneDeep = __commonJS((exports, module) => {\\n  var baseClone = require_baseClone();\\n  var CLONE_DEEP_FLAG = 1;\\n  var CLONE_SYMBOLS_FLAG = 4;\\n  function cloneDeep(value) {\\n    return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\\n  }\\n  module.exports = cloneDeep;\\n});\\n\\n// ../../../node_modules/lodash/clone.js\\nvar require_clone = __commonJS((exports, module) => {\\n  var baseClone = require_baseClone();\\n  var CLONE_SYMBOLS_FLAG = 4;\\n  function clone(value) {\\n    return baseClone(value, CLONE_SYMBOLS_FLAG);\\n  }\\n  module.exports = clone;\\n});\\n\\n// ../../../node_modules/jsep/build/jsep.js\\nvar require_jsep = __commonJS((exports, module) => {\\n  (function(root) {\\n    \\\\\\\"use strict\\\\\\\";\\n    var COMPOUND = \\\\\\\"Compound\\\\\\\", IDENTIFIER = \\\\\\\"Identifier\\\\\\\", MEMBER_EXP = \\\\\\\"MemberExpression\\\\\\\", LITERAL = \\\\\\\"Literal\\\\\\\", THIS_EXP = \\\\\\\"ThisExpression\\\\\\\", CALL_EXP = \\\\\\\"CallExpression\\\\\\\", UNARY_EXP = \\\\\\\"UnaryExpression\\\\\\\", BINARY_EXP = \\\\\\\"BinaryExpression\\\\\\\", LOGICAL_EXP = \\\\\\\"LogicalExpression\\\\\\\", CONDITIONAL_EXP = \\\\\\\"ConditionalExpression\\\\\\\", ARRAY_EXP = \\\\\\\"ArrayExpression\\\\\\\", PERIOD_CODE = 46, COMMA_CODE = 44, SQUOTE_CODE = 39, DQUOTE_CODE = 34, OPAREN_CODE = 40, CPAREN_CODE = 41, OBRACK_CODE = 91, CBRACK_CODE = 93, QUMARK_CODE = 63, SEMCOL_CODE = 59, COLON_CODE = 58, throwError = function(message, index) {\\n      var error = new Error(message + \\\\\\\" at character \\\\\\\" + index);\\n      error.index = index;\\n      error.description = message;\\n      throw error;\\n    }, t = true, unary_ops = {\\\\\\\"-\\\\\\\": t, \\\\\\\"!\\\\\\\": t, \\\\\\\"~\\\\\\\": t, \\\\\\\"+\\\\\\\": t}, binary_ops = {\\n      \\\\\\\"||\\\\\\\": 1,\\n      \\\\\\\"&&\\\\\\\": 2,\\n      \\\\\\\"|\\\\\\\": 3,\\n      \\\\\\\"^\\\\\\\": 4,\\n      \\\\\\\"&\\\\\\\": 5,\\n      \\\\\\\"==\\\\\\\": 6,\\n      \\\\\\\"!=\\\\\\\": 6,\\n      \\\\\\\"===\\\\\\\": 6,\\n      \\\\\\\"!==\\\\\\\": 6,\\n      \\\\\\\"<\\\\\\\": 7,\\n      \\\\\\\">\\\\\\\": 7,\\n      \\\\\\\"<=\\\\\\\": 7,\\n      \\\\\\\">=\\\\\\\": 7,\\n      \\\\\\\"<<\\\\\\\": 8,\\n      \\\\\\\">>\\\\\\\": 8,\\n      \\\\\\\">>>\\\\\\\": 8,\\n      \\\\\\\"+\\\\\\\": 9,\\n      \\\\\\\"-\\\\\\\": 9,\\n      \\\\\\\"*\\\\\\\": 10,\\n      \\\\\\\"/\\\\\\\": 10,\\n      \\\\\\\"%\\\\\\\": 10\\n    }, getMaxKeyLen = function(obj) {\\n      var max_len = 0, len;\\n      for (var key in obj) {\\n        if ((len = key.length) > max_len && obj.hasOwnProperty(key)) {\\n          max_len = len;\\n        }\\n      }\\n      return max_len;\\n    }, max_unop_len = getMaxKeyLen(unary_ops), max_binop_len = getMaxKeyLen(binary_ops), literals = {\\n      true: true,\\n      false: false,\\n      null: null\\n    }, this_str = \\\\\\\"this\\\\\\\", binaryPrecedence = function(op_val) {\\n      return binary_ops[op_val] || 0;\\n    }, createBinaryExpression = function(operator, left, right) {\\n      var type = operator === \\\\\\\"||\\\\\\\" || operator === \\\\\\\"&&\\\\\\\" ? LOGICAL_EXP : BINARY_EXP;\\n      return {\\n        type,\\n        operator,\\n        left,\\n        right\\n      };\\n    }, isDecimalDigit = function(ch) {\\n      return ch >= 48 && ch <= 57;\\n    }, isIdentifierStart = function(ch) {\\n      return ch === 36 || ch === 95 || ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 128 && !binary_ops[String.fromCharCode(ch)];\\n    }, isIdentifierPart = function(ch) {\\n      return ch === 36 || ch === 95 || ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 48 && ch <= 57 || ch >= 128 && !binary_ops[String.fromCharCode(ch)];\\n    }, jsep2 = function(expr) {\\n      var index = 0, charAtFunc = expr.charAt, charCodeAtFunc = expr.charCodeAt, exprI = function(i) {\\n        return charAtFunc.call(expr, i);\\n      }, exprICode = function(i) {\\n        return charCodeAtFunc.call(expr, i);\\n      }, length = expr.length, gobbleSpaces = function() {\\n        var ch = exprICode(index);\\n        while (ch === 32 || ch === 9 || ch === 10 || ch === 13) {\\n          ch = exprICode(++index);\\n        }\\n      }, gobbleExpression = function() {\\n        var test = gobbleBinaryExpression(), consequent, alternate;\\n        gobbleSpaces();\\n        if (exprICode(index) === QUMARK_CODE) {\\n          index++;\\n          consequent = gobbleExpression();\\n          if (!consequent) {\\n            throwError(\\\\\\\"Expected expression\\\\\\\", index);\\n          }\\n          gobbleSpaces();\\n          if (exprICode(index) === COLON_CODE) {\\n            index++;\\n            alternate = gobbleExpression();\\n            if (!alternate) {\\n              throwError(\\\\\\\"Expected expression\\\\\\\", index);\\n            }\\n            return {\\n              type: CONDITIONAL_EXP,\\n              test,\\n              consequent,\\n              alternate\\n            };\\n          } else {\\n            throwError(\\\\\\\"Expected :\\\\\\\", index);\\n          }\\n        } else {\\n          return test;\\n        }\\n      }, gobbleBinaryOp = function() {\\n        gobbleSpaces();\\n        var biop, to_check = expr.substr(index, max_binop_len), tc_len = to_check.length;\\n        while (tc_len > 0) {\\n          if (binary_ops.hasOwnProperty(to_check) && (!isIdentifierStart(exprICode(index)) || index + to_check.length < expr.length && !isIdentifierPart(exprICode(index + to_check.length)))) {\\n            index += tc_len;\\n            return to_check;\\n          }\\n          to_check = to_check.substr(0, --tc_len);\\n        }\\n        return false;\\n      }, gobbleBinaryExpression = function() {\\n        var ch_i2, node2, biop, prec, stack, biop_info, left, right, i, cur_biop;\\n        left = gobbleToken();\\n        biop = gobbleBinaryOp();\\n        if (!biop) {\\n          return left;\\n        }\\n        biop_info = {value: biop, prec: binaryPrecedence(biop)};\\n        right = gobbleToken();\\n        if (!right) {\\n          throwError(\\\\\\\"Expected expression after \\\\\\\" + biop, index);\\n        }\\n        stack = [left, biop_info, right];\\n        while (biop = gobbleBinaryOp()) {\\n          prec = binaryPrecedence(biop);\\n          if (prec === 0) {\\n            break;\\n          }\\n          biop_info = {value: biop, prec};\\n          cur_biop = biop;\\n          while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\\n            right = stack.pop();\\n            biop = stack.pop().value;\\n            left = stack.pop();\\n            node2 = createBinaryExpression(biop, left, right);\\n            stack.push(node2);\\n          }\\n          node2 = gobbleToken();\\n          if (!node2) {\\n            throwError(\\\\\\\"Expected expression after \\\\\\\" + cur_biop, index);\\n          }\\n          stack.push(biop_info, node2);\\n        }\\n        i = stack.length - 1;\\n        node2 = stack[i];\\n        while (i > 1) {\\n          node2 = createBinaryExpression(stack[i - 1].value, stack[i - 2], node2);\\n          i -= 2;\\n        }\\n        return node2;\\n      }, gobbleToken = function() {\\n        var ch, to_check, tc_len;\\n        gobbleSpaces();\\n        ch = exprICode(index);\\n        if (isDecimalDigit(ch) || ch === PERIOD_CODE) {\\n          return gobbleNumericLiteral();\\n        } else if (ch === SQUOTE_CODE || ch === DQUOTE_CODE) {\\n          return gobbleStringLiteral();\\n        } else if (ch === OBRACK_CODE) {\\n          return gobbleArray();\\n        } else {\\n          to_check = expr.substr(index, max_unop_len);\\n          tc_len = to_check.length;\\n          while (tc_len > 0) {\\n            if (unary_ops.hasOwnProperty(to_check) && (!isIdentifierStart(exprICode(index)) || index + to_check.length < expr.length && !isIdentifierPart(exprICode(index + to_check.length)))) {\\n              index += tc_len;\\n              return {\\n                type: UNARY_EXP,\\n                operator: to_check,\\n                argument: gobbleToken(),\\n                prefix: true\\n              };\\n            }\\n            to_check = to_check.substr(0, --tc_len);\\n          }\\n          if (isIdentifierStart(ch) || ch === OPAREN_CODE) {\\n            return gobbleVariable();\\n          }\\n        }\\n        return false;\\n      }, gobbleNumericLiteral = function() {\\n        var number = \\\\\\\"\\\\\\\", ch, chCode;\\n        while (isDecimalDigit(exprICode(index))) {\\n          number += exprI(index++);\\n        }\\n        if (exprICode(index) === PERIOD_CODE) {\\n          number += exprI(index++);\\n          while (isDecimalDigit(exprICode(index))) {\\n            number += exprI(index++);\\n          }\\n        }\\n        ch = exprI(index);\\n        if (ch === \\\\\\\"e\\\\\\\" || ch === \\\\\\\"E\\\\\\\") {\\n          number += exprI(index++);\\n          ch = exprI(index);\\n          if (ch === \\\\\\\"+\\\\\\\" || ch === \\\\\\\"-\\\\\\\") {\\n            number += exprI(index++);\\n          }\\n          while (isDecimalDigit(exprICode(index))) {\\n            number += exprI(index++);\\n          }\\n          if (!isDecimalDigit(exprICode(index - 1))) {\\n            throwError(\\\\\\\"Expected exponent (\\\\\\\" + number + exprI(index) + \\\\\\\")\\\\\\\", index);\\n          }\\n        }\\n        chCode = exprICode(index);\\n        if (isIdentifierStart(chCode)) {\\n          throwError(\\\\\\\"Variable names cannot start with a number (\\\\\\\" + number + exprI(index) + \\\\\\\")\\\\\\\", index);\\n        } else if (chCode === PERIOD_CODE) {\\n          throwError(\\\\\\\"Unexpected period\\\\\\\", index);\\n        }\\n        return {\\n          type: LITERAL,\\n          value: parseFloat(number),\\n          raw: number\\n        };\\n      }, gobbleStringLiteral = function() {\\n        var str = \\\\\\\"\\\\\\\", quote = exprI(index++), closed = false, ch;\\n        while (index < length) {\\n          ch = exprI(index++);\\n          if (ch === quote) {\\n            closed = true;\\n            break;\\n          } else if (ch === \\\\\\\"\\\\\\\\\\\\\\\") {\\n            ch = exprI(index++);\\n            switch (ch) {\\n              case \\\\\\\"n\\\\\\\":\\n                str += \\\\\\\"\\\\n\\\\\\\";\\n                break;\\n              case \\\\\\\"r\\\\\\\":\\n                str += \\\\\\\"\\\\r\\\\\\\";\\n                break;\\n              case \\\\\\\"t\\\\\\\":\\n                str += \\\\\\\"\\t\\\\\\\";\\n                break;\\n              case \\\\\\\"b\\\\\\\":\\n                str += \\\\\\\"\\\\b\\\\\\\";\\n                break;\\n              case \\\\\\\"f\\\\\\\":\\n                str += \\\\\\\"\\\\f\\\\\\\";\\n                break;\\n              case \\\\\\\"v\\\\\\\":\\n                str += \\\\\\\"\\\\v\\\\\\\";\\n                break;\\n              default:\\n                str += ch;\\n            }\\n          } else {\\n            str += ch;\\n          }\\n        }\\n        if (!closed) {\\n          throwError('Unclosed quote after \\\\\\\"' + str + '\\\\\\\"', index);\\n        }\\n        return {\\n          type: LITERAL,\\n          value: str,\\n          raw: quote + str + quote\\n        };\\n      }, gobbleIdentifier = function() {\\n        var ch = exprICode(index), start = index, identifier;\\n        if (isIdentifierStart(ch)) {\\n          index++;\\n        } else {\\n          throwError(\\\\\\\"Unexpected \\\\\\\" + exprI(index), index);\\n        }\\n        while (index < length) {\\n          ch = exprICode(index);\\n          if (isIdentifierPart(ch)) {\\n            index++;\\n          } else {\\n            break;\\n          }\\n        }\\n        identifier = expr.slice(start, index);\\n        if (literals.hasOwnProperty(identifier)) {\\n          return {\\n            type: LITERAL,\\n            value: literals[identifier],\\n            raw: identifier\\n          };\\n        } else if (identifier === this_str) {\\n          return {type: THIS_EXP};\\n        } else {\\n          return {\\n            type: IDENTIFIER,\\n            name: identifier\\n          };\\n        }\\n      }, gobbleArguments = function(termination) {\\n        var ch_i2, args = [], node2, closed = false;\\n        var separator_count = 0;\\n        while (index < length) {\\n          gobbleSpaces();\\n          ch_i2 = exprICode(index);\\n          if (ch_i2 === termination) {\\n            closed = true;\\n            index++;\\n            if (termination === CPAREN_CODE && separator_count && separator_count >= args.length) {\\n              throwError(\\\\\\\"Unexpected token \\\\\\\" + String.fromCharCode(termination), index);\\n            }\\n            break;\\n          } else if (ch_i2 === COMMA_CODE) {\\n            index++;\\n            separator_count++;\\n            if (separator_count !== args.length) {\\n              if (termination === CPAREN_CODE) {\\n                throwError(\\\\\\\"Unexpected token ,\\\\\\\", index);\\n              } else if (termination === CBRACK_CODE) {\\n                for (var arg = args.length; arg < separator_count; arg++) {\\n                  args.push(null);\\n                }\\n              }\\n            }\\n          } else {\\n            node2 = gobbleExpression();\\n            if (!node2 || node2.type === COMPOUND) {\\n              throwError(\\\\\\\"Expected comma\\\\\\\", index);\\n            }\\n            args.push(node2);\\n          }\\n        }\\n        if (!closed) {\\n          throwError(\\\\\\\"Expected \\\\\\\" + String.fromCharCode(termination), index);\\n        }\\n        return args;\\n      }, gobbleVariable = function() {\\n        var ch_i2, node2;\\n        ch_i2 = exprICode(index);\\n        if (ch_i2 === OPAREN_CODE) {\\n          node2 = gobbleGroup();\\n        } else {\\n          node2 = gobbleIdentifier();\\n        }\\n        gobbleSpaces();\\n        ch_i2 = exprICode(index);\\n        while (ch_i2 === PERIOD_CODE || ch_i2 === OBRACK_CODE || ch_i2 === OPAREN_CODE) {\\n          index++;\\n          if (ch_i2 === PERIOD_CODE) {\\n            gobbleSpaces();\\n            node2 = {\\n              type: MEMBER_EXP,\\n              computed: false,\\n              object: node2,\\n              property: gobbleIdentifier()\\n            };\\n          } else if (ch_i2 === OBRACK_CODE) {\\n            node2 = {\\n              type: MEMBER_EXP,\\n              computed: true,\\n              object: node2,\\n              property: gobbleExpression()\\n            };\\n            gobbleSpaces();\\n            ch_i2 = exprICode(index);\\n            if (ch_i2 !== CBRACK_CODE) {\\n              throwError(\\\\\\\"Unclosed [\\\\\\\", index);\\n            }\\n            index++;\\n          } else if (ch_i2 === OPAREN_CODE) {\\n            node2 = {\\n              type: CALL_EXP,\\n              arguments: gobbleArguments(CPAREN_CODE),\\n              callee: node2\\n            };\\n          }\\n          gobbleSpaces();\\n          ch_i2 = exprICode(index);\\n        }\\n        return node2;\\n      }, gobbleGroup = function() {\\n        index++;\\n        var node2 = gobbleExpression();\\n        gobbleSpaces();\\n        if (exprICode(index) === CPAREN_CODE) {\\n          index++;\\n          return node2;\\n        } else {\\n          throwError(\\\\\\\"Unclosed (\\\\\\\", index);\\n        }\\n      }, gobbleArray = function() {\\n        index++;\\n        return {\\n          type: ARRAY_EXP,\\n          elements: gobbleArguments(CBRACK_CODE)\\n        };\\n      }, nodes = [], ch_i, node;\\n      while (index < length) {\\n        ch_i = exprICode(index);\\n        if (ch_i === SEMCOL_CODE || ch_i === COMMA_CODE) {\\n          index++;\\n        } else {\\n          if (node = gobbleExpression()) {\\n            nodes.push(node);\\n          } else if (index < length) {\\n            throwError('Unexpected \\\\\\\"' + exprI(index) + '\\\\\\\"', index);\\n          }\\n        }\\n      }\\n      if (nodes.length === 1) {\\n        return nodes[0];\\n      } else {\\n        return {\\n          type: COMPOUND,\\n          body: nodes\\n        };\\n      }\\n    };\\n    jsep2.version = \\\\\\\"0.3.5\\\\\\\";\\n    jsep2.toString = function() {\\n      return \\\\\\\"JavaScript Expression Parser (JSEP) v\\\\\\\" + jsep2.version;\\n    };\\n    jsep2.addUnaryOp = function(op_name) {\\n      max_unop_len = Math.max(op_name.length, max_unop_len);\\n      unary_ops[op_name] = t;\\n      return this;\\n    };\\n    jsep2.addBinaryOp = function(op_name, precedence2) {\\n      max_binop_len = Math.max(op_name.length, max_binop_len);\\n      binary_ops[op_name] = precedence2;\\n      return this;\\n    };\\n    jsep2.addLiteral = function(literal_name, literal_value) {\\n      literals[literal_name] = literal_value;\\n      return this;\\n    };\\n    jsep2.removeUnaryOp = function(op_name) {\\n      delete unary_ops[op_name];\\n      if (op_name.length === max_unop_len) {\\n        max_unop_len = getMaxKeyLen(unary_ops);\\n      }\\n      return this;\\n    };\\n    jsep2.removeAllUnaryOps = function() {\\n      unary_ops = {};\\n      max_unop_len = 0;\\n      return this;\\n    };\\n    jsep2.removeBinaryOp = function(op_name) {\\n      delete binary_ops[op_name];\\n      if (op_name.length === max_binop_len) {\\n        max_binop_len = getMaxKeyLen(binary_ops);\\n      }\\n      return this;\\n    };\\n    jsep2.removeAllBinaryOps = function() {\\n      binary_ops = {};\\n      max_binop_len = 0;\\n      return this;\\n    };\\n    jsep2.removeLiteral = function(literal_name) {\\n      delete literals[literal_name];\\n      return this;\\n    };\\n    jsep2.removeAllLiterals = function() {\\n      literals = {};\\n      return this;\\n    };\\n    if (typeof exports === \\\\\\\"undefined\\\\\\\") {\\n      var old_jsep = root.jsep;\\n      root.jsep = jsep2;\\n      jsep2.noConflict = function() {\\n        if (root.jsep === jsep2) {\\n          root.jsep = old_jsep;\\n        }\\n        return jsep2;\\n      };\\n    } else {\\n      if (typeof module !== \\\\\\\"undefined\\\\\\\" && module.exports) {\\n        exports = module.exports = jsep2;\\n      } else {\\n        exports.parse = jsep2;\\n      }\\n    }\\n  })(exports);\\n});\\n\\n// ../../../node_modules/three/src/math/MathUtils.js\\nvar DEG2RAD = Math.PI / 180;\\nvar RAD2DEG = 180 / Math.PI;\\nvar _lut = [];\\nfor (let i = 0; i < 256; i++) {\\n  _lut[i] = (i < 16 ? \\\\\\\"0\\\\\\\" : \\\\\\\"\\\\\\\") + i.toString(16);\\n}\\nvar hasRandomUUID = typeof crypto !== \\\\\\\"undefined\\\\\\\" && \\\\\\\"randomUUID\\\\\\\" in crypto;\\nfunction generateUUID() {\\n  if (hasRandomUUID) {\\n    return crypto.randomUUID().toUpperCase();\\n  }\\n  const d0 = Math.random() * 4294967295 | 0;\\n  const d1 = Math.random() * 4294967295 | 0;\\n  const d2 = Math.random() * 4294967295 | 0;\\n  const d3 = Math.random() * 4294967295 | 0;\\n  const uuid = _lut[d0 & 255] + _lut[d0 >> 8 & 255] + _lut[d0 >> 16 & 255] + _lut[d0 >> 24 & 255] + \\\\\\\"-\\\\\\\" + _lut[d1 & 255] + _lut[d1 >> 8 & 255] + \\\\\\\"-\\\\\\\" + _lut[d1 >> 16 & 15 | 64] + _lut[d1 >> 24 & 255] + \\\\\\\"-\\\\\\\" + _lut[d2 & 63 | 128] + _lut[d2 >> 8 & 255] + \\\\\\\"-\\\\\\\" + _lut[d2 >> 16 & 255] + _lut[d2 >> 24 & 255] + _lut[d3 & 255] + _lut[d3 >> 8 & 255] + _lut[d3 >> 16 & 255] + _lut[d3 >> 24 & 255];\\n  return uuid.toUpperCase();\\n}\\nfunction clamp(value, min, max) {\\n  return Math.max(min, Math.min(max, value));\\n}\\nfunction euclideanModulo(n, m) {\\n  return (n % m + m) % m;\\n}\\nfunction lerp(x, y, t) {\\n  return (1 - t) * x + t * y;\\n}\\nfunction degToRad(degrees) {\\n  return degrees * DEG2RAD;\\n}\\nfunction isPowerOfTwo(value) {\\n  return (value & value - 1) === 0 && value !== 0;\\n}\\nfunction floorPowerOfTwo(value) {\\n  return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));\\n}\\n\\n// ../../../node_modules/three/src/math/Quaternion.js\\nvar Quaternion = class {\\n  constructor(x = 0, y = 0, z = 0, w = 1) {\\n    this._x = x;\\n    this._y = y;\\n    this._z = z;\\n    this._w = w;\\n  }\\n  static slerp(qa, qb, qm, t) {\\n    console.warn(\\\\\\\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\\\\\\\");\\n    return qm.slerpQuaternions(qa, qb, t);\\n  }\\n  static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\\n    let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3];\\n    const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3];\\n    if (t === 0) {\\n      dst[dstOffset + 0] = x0;\\n      dst[dstOffset + 1] = y0;\\n      dst[dstOffset + 2] = z0;\\n      dst[dstOffset + 3] = w0;\\n      return;\\n    }\\n    if (t === 1) {\\n      dst[dstOffset + 0] = x1;\\n      dst[dstOffset + 1] = y1;\\n      dst[dstOffset + 2] = z1;\\n      dst[dstOffset + 3] = w1;\\n      return;\\n    }\\n    if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\\n      let s = 1 - t;\\n      const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = cos >= 0 ? 1 : -1, sqrSin = 1 - cos * cos;\\n      if (sqrSin > Number.EPSILON) {\\n        const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir);\\n        s = Math.sin(s * len) / sin;\\n        t = Math.sin(t * len) / sin;\\n      }\\n      const tDir = t * dir;\\n      x0 = x0 * s + x1 * tDir;\\n      y0 = y0 * s + y1 * tDir;\\n      z0 = z0 * s + z1 * tDir;\\n      w0 = w0 * s + w1 * tDir;\\n      if (s === 1 - t) {\\n        const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\\n        x0 *= f;\\n        y0 *= f;\\n        z0 *= f;\\n        w0 *= f;\\n      }\\n    }\\n    dst[dstOffset] = x0;\\n    dst[dstOffset + 1] = y0;\\n    dst[dstOffset + 2] = z0;\\n    dst[dstOffset + 3] = w0;\\n  }\\n  static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) {\\n    const x0 = src0[srcOffset0];\\n    const y0 = src0[srcOffset0 + 1];\\n    const z0 = src0[srcOffset0 + 2];\\n    const w0 = src0[srcOffset0 + 3];\\n    const x1 = src1[srcOffset1];\\n    const y1 = src1[srcOffset1 + 1];\\n    const z1 = src1[srcOffset1 + 2];\\n    const w1 = src1[srcOffset1 + 3];\\n    dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\\n    dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\\n    dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\\n    dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\\n    return dst;\\n  }\\n  get x() {\\n    return this._x;\\n  }\\n  set x(value) {\\n    this._x = value;\\n    this._onChangeCallback();\\n  }\\n  get y() {\\n    return this._y;\\n  }\\n  set y(value) {\\n    this._y = value;\\n    this._onChangeCallback();\\n  }\\n  get z() {\\n    return this._z;\\n  }\\n  set z(value) {\\n    this._z = value;\\n    this._onChangeCallback();\\n  }\\n  get w() {\\n    return this._w;\\n  }\\n  set w(value) {\\n    this._w = value;\\n    this._onChangeCallback();\\n  }\\n  set(x, y, z, w) {\\n    this._x = x;\\n    this._y = y;\\n    this._z = z;\\n    this._w = w;\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  clone() {\\n    return new this.constructor(this._x, this._y, this._z, this._w);\\n  }\\n  copy(quaternion) {\\n    this._x = quaternion.x;\\n    this._y = quaternion.y;\\n    this._z = quaternion.z;\\n    this._w = quaternion.w;\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  setFromEuler(euler, update) {\\n    if (!(euler && euler.isEuler)) {\\n      throw new Error(\\\\\\\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\");\\n    }\\n    const x = euler._x, y = euler._y, z = euler._z, order = euler._order;\\n    const cos = Math.cos;\\n    const sin = Math.sin;\\n    const c1 = cos(x / 2);\\n    const c2 = cos(y / 2);\\n    const c3 = cos(z / 2);\\n    const s1 = sin(x / 2);\\n    const s2 = sin(y / 2);\\n    const s3 = sin(z / 2);\\n    switch (order) {\\n      case \\\\\\\"XYZ\\\\\\\":\\n        this._x = s1 * c2 * c3 + c1 * s2 * s3;\\n        this._y = c1 * s2 * c3 - s1 * c2 * s3;\\n        this._z = c1 * c2 * s3 + s1 * s2 * c3;\\n        this._w = c1 * c2 * c3 - s1 * s2 * s3;\\n        break;\\n      case \\\\\\\"YXZ\\\\\\\":\\n        this._x = s1 * c2 * c3 + c1 * s2 * s3;\\n        this._y = c1 * s2 * c3 - s1 * c2 * s3;\\n        this._z = c1 * c2 * s3 - s1 * s2 * c3;\\n        this._w = c1 * c2 * c3 + s1 * s2 * s3;\\n        break;\\n      case \\\\\\\"ZXY\\\\\\\":\\n        this._x = s1 * c2 * c3 - c1 * s2 * s3;\\n        this._y = c1 * s2 * c3 + s1 * c2 * s3;\\n        this._z = c1 * c2 * s3 + s1 * s2 * c3;\\n        this._w = c1 * c2 * c3 - s1 * s2 * s3;\\n        break;\\n      case \\\\\\\"ZYX\\\\\\\":\\n        this._x = s1 * c2 * c3 - c1 * s2 * s3;\\n        this._y = c1 * s2 * c3 + s1 * c2 * s3;\\n        this._z = c1 * c2 * s3 - s1 * s2 * c3;\\n        this._w = c1 * c2 * c3 + s1 * s2 * s3;\\n        break;\\n      case \\\\\\\"YZX\\\\\\\":\\n        this._x = s1 * c2 * c3 + c1 * s2 * s3;\\n        this._y = c1 * s2 * c3 + s1 * c2 * s3;\\n        this._z = c1 * c2 * s3 - s1 * s2 * c3;\\n        this._w = c1 * c2 * c3 - s1 * s2 * s3;\\n        break;\\n      case \\\\\\\"XZY\\\\\\\":\\n        this._x = s1 * c2 * c3 - c1 * s2 * s3;\\n        this._y = c1 * s2 * c3 - s1 * c2 * s3;\\n        this._z = c1 * c2 * s3 + s1 * s2 * c3;\\n        this._w = c1 * c2 * c3 + s1 * s2 * s3;\\n        break;\\n      default:\\n        console.warn(\\\\\\\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \\\\\\\" + order);\\n    }\\n    if (update !== false)\\n      this._onChangeCallback();\\n    return this;\\n  }\\n  setFromAxisAngle(axis, angle) {\\n    const halfAngle = angle / 2, s = Math.sin(halfAngle);\\n    this._x = axis.x * s;\\n    this._y = axis.y * s;\\n    this._z = axis.z * s;\\n    this._w = Math.cos(halfAngle);\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  setFromRotationMatrix(m) {\\n    const te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10], trace = m11 + m22 + m33;\\n    if (trace > 0) {\\n      const s = 0.5 / Math.sqrt(trace + 1);\\n      this._w = 0.25 / s;\\n      this._x = (m32 - m23) * s;\\n      this._y = (m13 - m31) * s;\\n      this._z = (m21 - m12) * s;\\n    } else if (m11 > m22 && m11 > m33) {\\n      const s = 2 * Math.sqrt(1 + m11 - m22 - m33);\\n      this._w = (m32 - m23) / s;\\n      this._x = 0.25 * s;\\n      this._y = (m12 + m21) / s;\\n      this._z = (m13 + m31) / s;\\n    } else if (m22 > m33) {\\n      const s = 2 * Math.sqrt(1 + m22 - m11 - m33);\\n      this._w = (m13 - m31) / s;\\n      this._x = (m12 + m21) / s;\\n      this._y = 0.25 * s;\\n      this._z = (m23 + m32) / s;\\n    } else {\\n      const s = 2 * Math.sqrt(1 + m33 - m11 - m22);\\n      this._w = (m21 - m12) / s;\\n      this._x = (m13 + m31) / s;\\n      this._y = (m23 + m32) / s;\\n      this._z = 0.25 * s;\\n    }\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  setFromUnitVectors(vFrom, vTo) {\\n    let r = vFrom.dot(vTo) + 1;\\n    if (r < Number.EPSILON) {\\n      r = 0;\\n      if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\\n        this._x = -vFrom.y;\\n        this._y = vFrom.x;\\n        this._z = 0;\\n        this._w = r;\\n      } else {\\n        this._x = 0;\\n        this._y = -vFrom.z;\\n        this._z = vFrom.y;\\n        this._w = r;\\n      }\\n    } else {\\n      this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\\n      this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\\n      this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\\n      this._w = r;\\n    }\\n    return this.normalize();\\n  }\\n  angleTo(q) {\\n    return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));\\n  }\\n  rotateTowards(q, step) {\\n    const angle = this.angleTo(q);\\n    if (angle === 0)\\n      return this;\\n    const t = Math.min(1, step / angle);\\n    this.slerp(q, t);\\n    return this;\\n  }\\n  identity() {\\n    return this.set(0, 0, 0, 1);\\n  }\\n  invert() {\\n    return this.conjugate();\\n  }\\n  conjugate() {\\n    this._x *= -1;\\n    this._y *= -1;\\n    this._z *= -1;\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  dot(v) {\\n    return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\\n  }\\n  lengthSq() {\\n    return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\\n  }\\n  length() {\\n    return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);\\n  }\\n  normalize() {\\n    let l = this.length();\\n    if (l === 0) {\\n      this._x = 0;\\n      this._y = 0;\\n      this._z = 0;\\n      this._w = 1;\\n    } else {\\n      l = 1 / l;\\n      this._x = this._x * l;\\n      this._y = this._y * l;\\n      this._z = this._z * l;\\n      this._w = this._w * l;\\n    }\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  multiply(q, p) {\\n    if (p !== void 0) {\\n      console.warn(\\\\\\\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\\\\\\\");\\n      return this.multiplyQuaternions(q, p);\\n    }\\n    return this.multiplyQuaternions(this, q);\\n  }\\n  premultiply(q) {\\n    return this.multiplyQuaternions(q, this);\\n  }\\n  multiplyQuaternions(a, b) {\\n    const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\\n    const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\\n    this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\\n    this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\\n    this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\\n    this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  slerp(qb, t) {\\n    if (t === 0)\\n      return this;\\n    if (t === 1)\\n      return this.copy(qb);\\n    const x = this._x, y = this._y, z = this._z, w = this._w;\\n    let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\\n    if (cosHalfTheta < 0) {\\n      this._w = -qb._w;\\n      this._x = -qb._x;\\n      this._y = -qb._y;\\n      this._z = -qb._z;\\n      cosHalfTheta = -cosHalfTheta;\\n    } else {\\n      this.copy(qb);\\n    }\\n    if (cosHalfTheta >= 1) {\\n      this._w = w;\\n      this._x = x;\\n      this._y = y;\\n      this._z = z;\\n      return this;\\n    }\\n    const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta;\\n    if (sqrSinHalfTheta <= Number.EPSILON) {\\n      const s = 1 - t;\\n      this._w = s * w + t * this._w;\\n      this._x = s * x + t * this._x;\\n      this._y = s * y + t * this._y;\\n      this._z = s * z + t * this._z;\\n      this.normalize();\\n      this._onChangeCallback();\\n      return this;\\n    }\\n    const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\\n    const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\\n    const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\\n    this._w = w * ratioA + this._w * ratioB;\\n    this._x = x * ratioA + this._x * ratioB;\\n    this._y = y * ratioA + this._y * ratioB;\\n    this._z = z * ratioA + this._z * ratioB;\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  slerpQuaternions(qa, qb, t) {\\n    this.copy(qa).slerp(qb, t);\\n  }\\n  random() {\\n    const u1 = Math.random();\\n    const sqrt1u1 = Math.sqrt(1 - u1);\\n    const sqrtu1 = Math.sqrt(u1);\\n    const u2 = 2 * Math.PI * Math.random();\\n    const u3 = 2 * Math.PI * Math.random();\\n    return this.set(sqrt1u1 * Math.cos(u2), sqrtu1 * Math.sin(u3), sqrtu1 * Math.cos(u3), sqrt1u1 * Math.sin(u2));\\n  }\\n  equals(quaternion) {\\n    return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w;\\n  }\\n  fromArray(array, offset = 0) {\\n    this._x = array[offset];\\n    this._y = array[offset + 1];\\n    this._z = array[offset + 2];\\n    this._w = array[offset + 3];\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  toArray(array = [], offset = 0) {\\n    array[offset] = this._x;\\n    array[offset + 1] = this._y;\\n    array[offset + 2] = this._z;\\n    array[offset + 3] = this._w;\\n    return array;\\n  }\\n  fromBufferAttribute(attribute, index) {\\n    this._x = attribute.getX(index);\\n    this._y = attribute.getY(index);\\n    this._z = attribute.getZ(index);\\n    this._w = attribute.getW(index);\\n    return this;\\n  }\\n  _onChange(callback) {\\n    this._onChangeCallback = callback;\\n    return this;\\n  }\\n  _onChangeCallback() {\\n  }\\n};\\nQuaternion.prototype.isQuaternion = true;\\n\\n// ../../../node_modules/three/src/math/Vector3.js\\nvar Vector3 = class {\\n  constructor(x = 0, y = 0, z = 0) {\\n    this.x = x;\\n    this.y = y;\\n    this.z = z;\\n  }\\n  set(x, y, z) {\\n    if (z === void 0)\\n      z = this.z;\\n    this.x = x;\\n    this.y = y;\\n    this.z = z;\\n    return this;\\n  }\\n  setScalar(scalar) {\\n    this.x = scalar;\\n    this.y = scalar;\\n    this.z = scalar;\\n    return this;\\n  }\\n  setX(x) {\\n    this.x = x;\\n    return this;\\n  }\\n  setY(y) {\\n    this.y = y;\\n    return this;\\n  }\\n  setZ(z) {\\n    this.z = z;\\n    return this;\\n  }\\n  setComponent(index, value) {\\n    switch (index) {\\n      case 0:\\n        this.x = value;\\n        break;\\n      case 1:\\n        this.y = value;\\n        break;\\n      case 2:\\n        this.z = value;\\n        break;\\n      default:\\n        throw new Error(\\\\\\\"index is out of range: \\\\\\\" + index);\\n    }\\n    return this;\\n  }\\n  getComponent(index) {\\n    switch (index) {\\n      case 0:\\n        return this.x;\\n      case 1:\\n        return this.y;\\n      case 2:\\n        return this.z;\\n      default:\\n        throw new Error(\\\\\\\"index is out of range: \\\\\\\" + index);\\n    }\\n  }\\n  clone() {\\n    return new this.constructor(this.x, this.y, this.z);\\n  }\\n  copy(v) {\\n    this.x = v.x;\\n    this.y = v.y;\\n    this.z = v.z;\\n    return this;\\n  }\\n  add(v, w) {\\n    if (w !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\");\\n      return this.addVectors(v, w);\\n    }\\n    this.x += v.x;\\n    this.y += v.y;\\n    this.z += v.z;\\n    return this;\\n  }\\n  addScalar(s) {\\n    this.x += s;\\n    this.y += s;\\n    this.z += s;\\n    return this;\\n  }\\n  addVectors(a, b) {\\n    this.x = a.x + b.x;\\n    this.y = a.y + b.y;\\n    this.z = a.z + b.z;\\n    return this;\\n  }\\n  addScaledVector(v, s) {\\n    this.x += v.x * s;\\n    this.y += v.y * s;\\n    this.z += v.z * s;\\n    return this;\\n  }\\n  sub(v, w) {\\n    if (w !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\");\\n      return this.subVectors(v, w);\\n    }\\n    this.x -= v.x;\\n    this.y -= v.y;\\n    this.z -= v.z;\\n    return this;\\n  }\\n  subScalar(s) {\\n    this.x -= s;\\n    this.y -= s;\\n    this.z -= s;\\n    return this;\\n  }\\n  subVectors(a, b) {\\n    this.x = a.x - b.x;\\n    this.y = a.y - b.y;\\n    this.z = a.z - b.z;\\n    return this;\\n  }\\n  multiply(v, w) {\\n    if (w !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\\\\\\\");\\n      return this.multiplyVectors(v, w);\\n    }\\n    this.x *= v.x;\\n    this.y *= v.y;\\n    this.z *= v.z;\\n    return this;\\n  }\\n  multiplyScalar(scalar) {\\n    this.x *= scalar;\\n    this.y *= scalar;\\n    this.z *= scalar;\\n    return this;\\n  }\\n  multiplyVectors(a, b) {\\n    this.x = a.x * b.x;\\n    this.y = a.y * b.y;\\n    this.z = a.z * b.z;\\n    return this;\\n  }\\n  applyEuler(euler) {\\n    if (!(euler && euler.isEuler)) {\\n      console.error(\\\\\\\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\");\\n    }\\n    return this.applyQuaternion(_quaternion.setFromEuler(euler));\\n  }\\n  applyAxisAngle(axis, angle) {\\n    return this.applyQuaternion(_quaternion.setFromAxisAngle(axis, angle));\\n  }\\n  applyMatrix3(m) {\\n    const x = this.x, y = this.y, z = this.z;\\n    const e = m.elements;\\n    this.x = e[0] * x + e[3] * y + e[6] * z;\\n    this.y = e[1] * x + e[4] * y + e[7] * z;\\n    this.z = e[2] * x + e[5] * y + e[8] * z;\\n    return this;\\n  }\\n  applyNormalMatrix(m) {\\n    return this.applyMatrix3(m).normalize();\\n  }\\n  applyMatrix4(m) {\\n    const x = this.x, y = this.y, z = this.z;\\n    const e = m.elements;\\n    const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\\n    this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\\n    this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\\n    this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\\n    return this;\\n  }\\n  applyQuaternion(q) {\\n    const x = this.x, y = this.y, z = this.z;\\n    const qx = q.x, qy = q.y, qz = q.z, qw = q.w;\\n    const ix = qw * x + qy * z - qz * y;\\n    const iy = qw * y + qz * x - qx * z;\\n    const iz = qw * z + qx * y - qy * x;\\n    const iw = -qx * x - qy * y - qz * z;\\n    this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\\n    this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\\n    this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\\n    return this;\\n  }\\n  project(camera) {\\n    return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);\\n  }\\n  unproject(camera) {\\n    return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);\\n  }\\n  transformDirection(m) {\\n    const x = this.x, y = this.y, z = this.z;\\n    const e = m.elements;\\n    this.x = e[0] * x + e[4] * y + e[8] * z;\\n    this.y = e[1] * x + e[5] * y + e[9] * z;\\n    this.z = e[2] * x + e[6] * y + e[10] * z;\\n    return this.normalize();\\n  }\\n  divide(v) {\\n    this.x /= v.x;\\n    this.y /= v.y;\\n    this.z /= v.z;\\n    return this;\\n  }\\n  divideScalar(scalar) {\\n    return this.multiplyScalar(1 / scalar);\\n  }\\n  min(v) {\\n    this.x = Math.min(this.x, v.x);\\n    this.y = Math.min(this.y, v.y);\\n    this.z = Math.min(this.z, v.z);\\n    return this;\\n  }\\n  max(v) {\\n    this.x = Math.max(this.x, v.x);\\n    this.y = Math.max(this.y, v.y);\\n    this.z = Math.max(this.z, v.z);\\n    return this;\\n  }\\n  clamp(min, max) {\\n    this.x = Math.max(min.x, Math.min(max.x, this.x));\\n    this.y = Math.max(min.y, Math.min(max.y, this.y));\\n    this.z = Math.max(min.z, Math.min(max.z, this.z));\\n    return this;\\n  }\\n  clampScalar(minVal, maxVal) {\\n    this.x = Math.max(minVal, Math.min(maxVal, this.x));\\n    this.y = Math.max(minVal, Math.min(maxVal, this.y));\\n    this.z = Math.max(minVal, Math.min(maxVal, this.z));\\n    return this;\\n  }\\n  clampLength(min, max) {\\n    const length = this.length();\\n    return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\\n  }\\n  floor() {\\n    this.x = Math.floor(this.x);\\n    this.y = Math.floor(this.y);\\n    this.z = Math.floor(this.z);\\n    return this;\\n  }\\n  ceil() {\\n    this.x = Math.ceil(this.x);\\n    this.y = Math.ceil(this.y);\\n    this.z = Math.ceil(this.z);\\n    return this;\\n  }\\n  round() {\\n    this.x = Math.round(this.x);\\n    this.y = Math.round(this.y);\\n    this.z = Math.round(this.z);\\n    return this;\\n  }\\n  roundToZero() {\\n    this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\\n    this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\\n    this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);\\n    return this;\\n  }\\n  negate() {\\n    this.x = -this.x;\\n    this.y = -this.y;\\n    this.z = -this.z;\\n    return this;\\n  }\\n  dot(v) {\\n    return this.x * v.x + this.y * v.y + this.z * v.z;\\n  }\\n  lengthSq() {\\n    return this.x * this.x + this.y * this.y + this.z * this.z;\\n  }\\n  length() {\\n    return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\\n  }\\n  manhattanLength() {\\n    return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\\n  }\\n  normalize() {\\n    return this.divideScalar(this.length() || 1);\\n  }\\n  setLength(length) {\\n    return this.normalize().multiplyScalar(length);\\n  }\\n  lerp(v, alpha) {\\n    this.x += (v.x - this.x) * alpha;\\n    this.y += (v.y - this.y) * alpha;\\n    this.z += (v.z - this.z) * alpha;\\n    return this;\\n  }\\n  lerpVectors(v1, v2, alpha) {\\n    this.x = v1.x + (v2.x - v1.x) * alpha;\\n    this.y = v1.y + (v2.y - v1.y) * alpha;\\n    this.z = v1.z + (v2.z - v1.z) * alpha;\\n    return this;\\n  }\\n  cross(v, w) {\\n    if (w !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\\\\\\\");\\n      return this.crossVectors(v, w);\\n    }\\n    return this.crossVectors(this, v);\\n  }\\n  crossVectors(a, b) {\\n    const ax = a.x, ay = a.y, az = a.z;\\n    const bx = b.x, by = b.y, bz = b.z;\\n    this.x = ay * bz - az * by;\\n    this.y = az * bx - ax * bz;\\n    this.z = ax * by - ay * bx;\\n    return this;\\n  }\\n  projectOnVector(v) {\\n    const denominator = v.lengthSq();\\n    if (denominator === 0)\\n      return this.set(0, 0, 0);\\n    const scalar = v.dot(this) / denominator;\\n    return this.copy(v).multiplyScalar(scalar);\\n  }\\n  projectOnPlane(planeNormal) {\\n    _vector.copy(this).projectOnVector(planeNormal);\\n    return this.sub(_vector);\\n  }\\n  reflect(normal) {\\n    return this.sub(_vector.copy(normal).multiplyScalar(2 * this.dot(normal)));\\n  }\\n  angleTo(v) {\\n    const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\\n    if (denominator === 0)\\n      return Math.PI / 2;\\n    const theta = this.dot(v) / denominator;\\n    return Math.acos(clamp(theta, -1, 1));\\n  }\\n  distanceTo(v) {\\n    return Math.sqrt(this.distanceToSquared(v));\\n  }\\n  distanceToSquared(v) {\\n    const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\\n    return dx * dx + dy * dy + dz * dz;\\n  }\\n  manhattanDistanceTo(v) {\\n    return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\\n  }\\n  setFromSpherical(s) {\\n    return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\\n  }\\n  setFromSphericalCoords(radius, phi, theta) {\\n    const sinPhiRadius = Math.sin(phi) * radius;\\n    this.x = sinPhiRadius * Math.sin(theta);\\n    this.y = Math.cos(phi) * radius;\\n    this.z = sinPhiRadius * Math.cos(theta);\\n    return this;\\n  }\\n  setFromCylindrical(c) {\\n    return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\\n  }\\n  setFromCylindricalCoords(radius, theta, y) {\\n    this.x = radius * Math.sin(theta);\\n    this.y = y;\\n    this.z = radius * Math.cos(theta);\\n    return this;\\n  }\\n  setFromMatrixPosition(m) {\\n    const e = m.elements;\\n    this.x = e[12];\\n    this.y = e[13];\\n    this.z = e[14];\\n    return this;\\n  }\\n  setFromMatrixScale(m) {\\n    const sx = this.setFromMatrixColumn(m, 0).length();\\n    const sy = this.setFromMatrixColumn(m, 1).length();\\n    const sz = this.setFromMatrixColumn(m, 2).length();\\n    this.x = sx;\\n    this.y = sy;\\n    this.z = sz;\\n    return this;\\n  }\\n  setFromMatrixColumn(m, index) {\\n    return this.fromArray(m.elements, index * 4);\\n  }\\n  setFromMatrix3Column(m, index) {\\n    return this.fromArray(m.elements, index * 3);\\n  }\\n  equals(v) {\\n    return v.x === this.x && v.y === this.y && v.z === this.z;\\n  }\\n  fromArray(array, offset = 0) {\\n    this.x = array[offset];\\n    this.y = array[offset + 1];\\n    this.z = array[offset + 2];\\n    return this;\\n  }\\n  toArray(array = [], offset = 0) {\\n    array[offset] = this.x;\\n    array[offset + 1] = this.y;\\n    array[offset + 2] = this.z;\\n    return array;\\n  }\\n  fromBufferAttribute(attribute, index, offset) {\\n    if (offset !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\\\\\\\");\\n    }\\n    this.x = attribute.getX(index);\\n    this.y = attribute.getY(index);\\n    this.z = attribute.getZ(index);\\n    return this;\\n  }\\n  random() {\\n    this.x = Math.random();\\n    this.y = Math.random();\\n    this.z = Math.random();\\n    return this;\\n  }\\n  randomDirection() {\\n    const u = (Math.random() - 0.5) * 2;\\n    const t = Math.random() * Math.PI * 2;\\n    const f = Math.sqrt(1 - u ** 2);\\n    this.x = f * Math.cos(t);\\n    this.y = f * Math.sin(t);\\n    this.z = u;\\n    return this;\\n  }\\n  *[Symbol.iterator]() {\\n    yield this.x;\\n    yield this.y;\\n    yield this.z;\\n  }\\n};\\nVector3.prototype.isVector3 = true;\\nvar _vector = /* @__PURE__ */ new Vector3();\\nvar _quaternion = /* @__PURE__ */ new Quaternion();\\n\\n// ../../../node_modules/three/src/math/Matrix4.js\\nvar Matrix4 = class {\\n  constructor() {\\n    this.elements = [\\n      1,\\n      0,\\n      0,\\n      0,\\n      0,\\n      1,\\n      0,\\n      0,\\n      0,\\n      0,\\n      1,\\n      0,\\n      0,\\n      0,\\n      0,\\n      1\\n    ];\\n    if (arguments.length > 0) {\\n      console.error(\\\\\\\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\\\\\\\");\\n    }\\n  }\\n  set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\\n    const te = this.elements;\\n    te[0] = n11;\\n    te[4] = n12;\\n    te[8] = n13;\\n    te[12] = n14;\\n    te[1] = n21;\\n    te[5] = n22;\\n    te[9] = n23;\\n    te[13] = n24;\\n    te[2] = n31;\\n    te[6] = n32;\\n    te[10] = n33;\\n    te[14] = n34;\\n    te[3] = n41;\\n    te[7] = n42;\\n    te[11] = n43;\\n    te[15] = n44;\\n    return this;\\n  }\\n  identity() {\\n    this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  clone() {\\n    return new Matrix4().fromArray(this.elements);\\n  }\\n  copy(m) {\\n    const te = this.elements;\\n    const me = m.elements;\\n    te[0] = me[0];\\n    te[1] = me[1];\\n    te[2] = me[2];\\n    te[3] = me[3];\\n    te[4] = me[4];\\n    te[5] = me[5];\\n    te[6] = me[6];\\n    te[7] = me[7];\\n    te[8] = me[8];\\n    te[9] = me[9];\\n    te[10] = me[10];\\n    te[11] = me[11];\\n    te[12] = me[12];\\n    te[13] = me[13];\\n    te[14] = me[14];\\n    te[15] = me[15];\\n    return this;\\n  }\\n  copyPosition(m) {\\n    const te = this.elements, me = m.elements;\\n    te[12] = me[12];\\n    te[13] = me[13];\\n    te[14] = me[14];\\n    return this;\\n  }\\n  setFromMatrix3(m) {\\n    const me = m.elements;\\n    this.set(me[0], me[3], me[6], 0, me[1], me[4], me[7], 0, me[2], me[5], me[8], 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  extractBasis(xAxis, yAxis, zAxis) {\\n    xAxis.setFromMatrixColumn(this, 0);\\n    yAxis.setFromMatrixColumn(this, 1);\\n    zAxis.setFromMatrixColumn(this, 2);\\n    return this;\\n  }\\n  makeBasis(xAxis, yAxis, zAxis) {\\n    this.set(xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  extractRotation(m) {\\n    const te = this.elements;\\n    const me = m.elements;\\n    const scaleX = 1 / _v1.setFromMatrixColumn(m, 0).length();\\n    const scaleY = 1 / _v1.setFromMatrixColumn(m, 1).length();\\n    const scaleZ = 1 / _v1.setFromMatrixColumn(m, 2).length();\\n    te[0] = me[0] * scaleX;\\n    te[1] = me[1] * scaleX;\\n    te[2] = me[2] * scaleX;\\n    te[3] = 0;\\n    te[4] = me[4] * scaleY;\\n    te[5] = me[5] * scaleY;\\n    te[6] = me[6] * scaleY;\\n    te[7] = 0;\\n    te[8] = me[8] * scaleZ;\\n    te[9] = me[9] * scaleZ;\\n    te[10] = me[10] * scaleZ;\\n    te[11] = 0;\\n    te[12] = 0;\\n    te[13] = 0;\\n    te[14] = 0;\\n    te[15] = 1;\\n    return this;\\n  }\\n  makeRotationFromEuler(euler) {\\n    if (!(euler && euler.isEuler)) {\\n      console.error(\\\\\\\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\\\\\\\");\\n    }\\n    const te = this.elements;\\n    const x = euler.x, y = euler.y, z = euler.z;\\n    const a = Math.cos(x), b = Math.sin(x);\\n    const c = Math.cos(y), d = Math.sin(y);\\n    const e = Math.cos(z), f = Math.sin(z);\\n    if (euler.order === \\\\\\\"XYZ\\\\\\\") {\\n      const ae = a * e, af = a * f, be = b * e, bf = b * f;\\n      te[0] = c * e;\\n      te[4] = -c * f;\\n      te[8] = d;\\n      te[1] = af + be * d;\\n      te[5] = ae - bf * d;\\n      te[9] = -b * c;\\n      te[2] = bf - ae * d;\\n      te[6] = be + af * d;\\n      te[10] = a * c;\\n    } else if (euler.order === \\\\\\\"YXZ\\\\\\\") {\\n      const ce = c * e, cf = c * f, de = d * e, df = d * f;\\n      te[0] = ce + df * b;\\n      te[4] = de * b - cf;\\n      te[8] = a * d;\\n      te[1] = a * f;\\n      te[5] = a * e;\\n      te[9] = -b;\\n      te[2] = cf * b - de;\\n      te[6] = df + ce * b;\\n      te[10] = a * c;\\n    } else if (euler.order === \\\\\\\"ZXY\\\\\\\") {\\n      const ce = c * e, cf = c * f, de = d * e, df = d * f;\\n      te[0] = ce - df * b;\\n      te[4] = -a * f;\\n      te[8] = de + cf * b;\\n      te[1] = cf + de * b;\\n      te[5] = a * e;\\n      te[9] = df - ce * b;\\n      te[2] = -a * d;\\n      te[6] = b;\\n      te[10] = a * c;\\n    } else if (euler.order === \\\\\\\"ZYX\\\\\\\") {\\n      const ae = a * e, af = a * f, be = b * e, bf = b * f;\\n      te[0] = c * e;\\n      te[4] = be * d - af;\\n      te[8] = ae * d + bf;\\n      te[1] = c * f;\\n      te[5] = bf * d + ae;\\n      te[9] = af * d - be;\\n      te[2] = -d;\\n      te[6] = b * c;\\n      te[10] = a * c;\\n    } else if (euler.order === \\\\\\\"YZX\\\\\\\") {\\n      const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\\n      te[0] = c * e;\\n      te[4] = bd - ac * f;\\n      te[8] = bc * f + ad;\\n      te[1] = f;\\n      te[5] = a * e;\\n      te[9] = -b * e;\\n      te[2] = -d * e;\\n      te[6] = ad * f + bc;\\n      te[10] = ac - bd * f;\\n    } else if (euler.order === \\\\\\\"XZY\\\\\\\") {\\n      const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\\n      te[0] = c * e;\\n      te[4] = -f;\\n      te[8] = d * e;\\n      te[1] = ac * f + bd;\\n      te[5] = a * e;\\n      te[9] = ad * f - bc;\\n      te[2] = bc * f - ad;\\n      te[6] = b * e;\\n      te[10] = bd * f + ac;\\n    }\\n    te[3] = 0;\\n    te[7] = 0;\\n    te[11] = 0;\\n    te[12] = 0;\\n    te[13] = 0;\\n    te[14] = 0;\\n    te[15] = 1;\\n    return this;\\n  }\\n  makeRotationFromQuaternion(q) {\\n    return this.compose(_zero, q, _one);\\n  }\\n  lookAt(eye, target, up) {\\n    const te = this.elements;\\n    _z.subVectors(eye, target);\\n    if (_z.lengthSq() === 0) {\\n      _z.z = 1;\\n    }\\n    _z.normalize();\\n    _x.crossVectors(up, _z);\\n    if (_x.lengthSq() === 0) {\\n      if (Math.abs(up.z) === 1) {\\n        _z.x += 1e-4;\\n      } else {\\n        _z.z += 1e-4;\\n      }\\n      _z.normalize();\\n      _x.crossVectors(up, _z);\\n    }\\n    _x.normalize();\\n    _y.crossVectors(_z, _x);\\n    te[0] = _x.x;\\n    te[4] = _y.x;\\n    te[8] = _z.x;\\n    te[1] = _x.y;\\n    te[5] = _y.y;\\n    te[9] = _z.y;\\n    te[2] = _x.z;\\n    te[6] = _y.z;\\n    te[10] = _z.z;\\n    return this;\\n  }\\n  multiply(m, n) {\\n    if (n !== void 0) {\\n      console.warn(\\\\\\\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\\\\\\\");\\n      return this.multiplyMatrices(m, n);\\n    }\\n    return this.multiplyMatrices(this, m);\\n  }\\n  premultiply(m) {\\n    return this.multiplyMatrices(m, this);\\n  }\\n  multiplyMatrices(a, b) {\\n    const ae = a.elements;\\n    const be = b.elements;\\n    const te = this.elements;\\n    const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12];\\n    const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13];\\n    const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14];\\n    const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15];\\n    const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12];\\n    const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13];\\n    const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14];\\n    const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15];\\n    te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\\n    te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\\n    te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\\n    te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\\n    te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\\n    te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\\n    te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\\n    te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\\n    te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\\n    te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\\n    te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\\n    te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\\n    te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\\n    te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\\n    te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\\n    te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\\n    return this;\\n  }\\n  multiplyScalar(s) {\\n    const te = this.elements;\\n    te[0] *= s;\\n    te[4] *= s;\\n    te[8] *= s;\\n    te[12] *= s;\\n    te[1] *= s;\\n    te[5] *= s;\\n    te[9] *= s;\\n    te[13] *= s;\\n    te[2] *= s;\\n    te[6] *= s;\\n    te[10] *= s;\\n    te[14] *= s;\\n    te[3] *= s;\\n    te[7] *= s;\\n    te[11] *= s;\\n    te[15] *= s;\\n    return this;\\n  }\\n  determinant() {\\n    const te = this.elements;\\n    const n11 = te[0], n12 = te[4], n13 = te[8], n14 = te[12];\\n    const n21 = te[1], n22 = te[5], n23 = te[9], n24 = te[13];\\n    const n31 = te[2], n32 = te[6], n33 = te[10], n34 = te[14];\\n    const n41 = te[3], n42 = te[7], n43 = te[11], n44 = te[15];\\n    return n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31);\\n  }\\n  transpose() {\\n    const te = this.elements;\\n    let tmp;\\n    tmp = te[1];\\n    te[1] = te[4];\\n    te[4] = tmp;\\n    tmp = te[2];\\n    te[2] = te[8];\\n    te[8] = tmp;\\n    tmp = te[6];\\n    te[6] = te[9];\\n    te[9] = tmp;\\n    tmp = te[3];\\n    te[3] = te[12];\\n    te[12] = tmp;\\n    tmp = te[7];\\n    te[7] = te[13];\\n    te[13] = tmp;\\n    tmp = te[11];\\n    te[11] = te[14];\\n    te[14] = tmp;\\n    return this;\\n  }\\n  setPosition(x, y, z) {\\n    const te = this.elements;\\n    if (x.isVector3) {\\n      te[12] = x.x;\\n      te[13] = x.y;\\n      te[14] = x.z;\\n    } else {\\n      te[12] = x;\\n      te[13] = y;\\n      te[14] = z;\\n    }\\n    return this;\\n  }\\n  invert() {\\n    const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n41 = te[3], n12 = te[4], n22 = te[5], n32 = te[6], n42 = te[7], n13 = te[8], n23 = te[9], n33 = te[10], n43 = te[11], n14 = te[12], n24 = te[13], n34 = te[14], n44 = te[15], t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\\n    const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\\n    if (det === 0)\\n      return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\\n    const detInv = 1 / det;\\n    te[0] = t11 * detInv;\\n    te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;\\n    te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;\\n    te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;\\n    te[4] = t12 * detInv;\\n    te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;\\n    te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;\\n    te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;\\n    te[8] = t13 * detInv;\\n    te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;\\n    te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;\\n    te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;\\n    te[12] = t14 * detInv;\\n    te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;\\n    te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;\\n    te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;\\n    return this;\\n  }\\n  scale(v) {\\n    const te = this.elements;\\n    const x = v.x, y = v.y, z = v.z;\\n    te[0] *= x;\\n    te[4] *= y;\\n    te[8] *= z;\\n    te[1] *= x;\\n    te[5] *= y;\\n    te[9] *= z;\\n    te[2] *= x;\\n    te[6] *= y;\\n    te[10] *= z;\\n    te[3] *= x;\\n    te[7] *= y;\\n    te[11] *= z;\\n    return this;\\n  }\\n  getMaxScaleOnAxis() {\\n    const te = this.elements;\\n    const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\\n    const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\\n    const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\\n    return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\\n  }\\n  makeTranslation(x, y, z) {\\n    this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);\\n    return this;\\n  }\\n  makeRotationX(theta) {\\n    const c = Math.cos(theta), s = Math.sin(theta);\\n    this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  makeRotationY(theta) {\\n    const c = Math.cos(theta), s = Math.sin(theta);\\n    this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  makeRotationZ(theta) {\\n    const c = Math.cos(theta), s = Math.sin(theta);\\n    this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  makeRotationAxis(axis, angle) {\\n    const c = Math.cos(angle);\\n    const s = Math.sin(angle);\\n    const t = 1 - c;\\n    const x = axis.x, y = axis.y, z = axis.z;\\n    const tx = t * x, ty = t * y;\\n    this.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  makeScale(x, y, z) {\\n    this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  makeShear(xy, xz, yx, yz, zx, zy) {\\n    this.set(1, yx, zx, 0, xy, 1, zy, 0, xz, yz, 1, 0, 0, 0, 0, 1);\\n    return this;\\n  }\\n  compose(position, quaternion, scale) {\\n    const te = this.elements;\\n    const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\\n    const x2 = x + x, y2 = y + y, z2 = z + z;\\n    const xx = x * x2, xy = x * y2, xz = x * z2;\\n    const yy = y * y2, yz = y * z2, zz = z * z2;\\n    const wx = w * x2, wy = w * y2, wz = w * z2;\\n    const sx = scale.x, sy = scale.y, sz = scale.z;\\n    te[0] = (1 - (yy + zz)) * sx;\\n    te[1] = (xy + wz) * sx;\\n    te[2] = (xz - wy) * sx;\\n    te[3] = 0;\\n    te[4] = (xy - wz) * sy;\\n    te[5] = (1 - (xx + zz)) * sy;\\n    te[6] = (yz + wx) * sy;\\n    te[7] = 0;\\n    te[8] = (xz + wy) * sz;\\n    te[9] = (yz - wx) * sz;\\n    te[10] = (1 - (xx + yy)) * sz;\\n    te[11] = 0;\\n    te[12] = position.x;\\n    te[13] = position.y;\\n    te[14] = position.z;\\n    te[15] = 1;\\n    return this;\\n  }\\n  decompose(position, quaternion, scale) {\\n    const te = this.elements;\\n    let sx = _v1.set(te[0], te[1], te[2]).length();\\n    const sy = _v1.set(te[4], te[5], te[6]).length();\\n    const sz = _v1.set(te[8], te[9], te[10]).length();\\n    const det = this.determinant();\\n    if (det < 0)\\n      sx = -sx;\\n    position.x = te[12];\\n    position.y = te[13];\\n    position.z = te[14];\\n    _m1.copy(this);\\n    const invSX = 1 / sx;\\n    const invSY = 1 / sy;\\n    const invSZ = 1 / sz;\\n    _m1.elements[0] *= invSX;\\n    _m1.elements[1] *= invSX;\\n    _m1.elements[2] *= invSX;\\n    _m1.elements[4] *= invSY;\\n    _m1.elements[5] *= invSY;\\n    _m1.elements[6] *= invSY;\\n    _m1.elements[8] *= invSZ;\\n    _m1.elements[9] *= invSZ;\\n    _m1.elements[10] *= invSZ;\\n    quaternion.setFromRotationMatrix(_m1);\\n    scale.x = sx;\\n    scale.y = sy;\\n    scale.z = sz;\\n    return this;\\n  }\\n  makePerspective(left, right, top, bottom, near, far) {\\n    if (far === void 0) {\\n      console.warn(\\\\\\\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\\\\\\\");\\n    }\\n    const te = this.elements;\\n    const x = 2 * near / (right - left);\\n    const y = 2 * near / (top - bottom);\\n    const a = (right + left) / (right - left);\\n    const b = (top + bottom) / (top - bottom);\\n    const c = -(far + near) / (far - near);\\n    const d = -2 * far * near / (far - near);\\n    te[0] = x;\\n    te[4] = 0;\\n    te[8] = a;\\n    te[12] = 0;\\n    te[1] = 0;\\n    te[5] = y;\\n    te[9] = b;\\n    te[13] = 0;\\n    te[2] = 0;\\n    te[6] = 0;\\n    te[10] = c;\\n    te[14] = d;\\n    te[3] = 0;\\n    te[7] = 0;\\n    te[11] = -1;\\n    te[15] = 0;\\n    return this;\\n  }\\n  makeOrthographic(left, right, top, bottom, near, far) {\\n    const te = this.elements;\\n    const w = 1 / (right - left);\\n    const h = 1 / (top - bottom);\\n    const p = 1 / (far - near);\\n    const x = (right + left) * w;\\n    const y = (top + bottom) * h;\\n    const z = (far + near) * p;\\n    te[0] = 2 * w;\\n    te[4] = 0;\\n    te[8] = 0;\\n    te[12] = -x;\\n    te[1] = 0;\\n    te[5] = 2 * h;\\n    te[9] = 0;\\n    te[13] = -y;\\n    te[2] = 0;\\n    te[6] = 0;\\n    te[10] = -2 * p;\\n    te[14] = -z;\\n    te[3] = 0;\\n    te[7] = 0;\\n    te[11] = 0;\\n    te[15] = 1;\\n    return this;\\n  }\\n  equals(matrix) {\\n    const te = this.elements;\\n    const me = matrix.elements;\\n    for (let i = 0; i < 16; i++) {\\n      if (te[i] !== me[i])\\n        return false;\\n    }\\n    return true;\\n  }\\n  fromArray(array, offset = 0) {\\n    for (let i = 0; i < 16; i++) {\\n      this.elements[i] = array[i + offset];\\n    }\\n    return this;\\n  }\\n  toArray(array = [], offset = 0) {\\n    const te = this.elements;\\n    array[offset] = te[0];\\n    array[offset + 1] = te[1];\\n    array[offset + 2] = te[2];\\n    array[offset + 3] = te[3];\\n    array[offset + 4] = te[4];\\n    array[offset + 5] = te[5];\\n    array[offset + 6] = te[6];\\n    array[offset + 7] = te[7];\\n    array[offset + 8] = te[8];\\n    array[offset + 9] = te[9];\\n    array[offset + 10] = te[10];\\n    array[offset + 11] = te[11];\\n    array[offset + 12] = te[12];\\n    array[offset + 13] = te[13];\\n    array[offset + 14] = te[14];\\n    array[offset + 15] = te[15];\\n    return array;\\n  }\\n};\\nMatrix4.prototype.isMatrix4 = true;\\nvar _v1 = /* @__PURE__ */ new Vector3();\\nvar _m1 = /* @__PURE__ */ new Matrix4();\\nvar _zero = /* @__PURE__ */ new Vector3(0, 0, 0);\\nvar _one = /* @__PURE__ */ new Vector3(1, 1, 1);\\nvar _x = /* @__PURE__ */ new Vector3();\\nvar _y = /* @__PURE__ */ new Vector3();\\nvar _z = /* @__PURE__ */ new Vector3();\\n\\n// ../../../node_modules/three/src/core/EventDispatcher.js\\nvar EventDispatcher = class {\\n  addEventListener(type, listener) {\\n    if (this._listeners === void 0)\\n      this._listeners = {};\\n    const listeners = this._listeners;\\n    if (listeners[type] === void 0) {\\n      listeners[type] = [];\\n    }\\n    if (listeners[type].indexOf(listener) === -1) {\\n      listeners[type].push(listener);\\n    }\\n  }\\n  hasEventListener(type, listener) {\\n    if (this._listeners === void 0)\\n      return false;\\n    const listeners = this._listeners;\\n    return listeners[type] !== void 0 && listeners[type].indexOf(listener) !== -1;\\n  }\\n  removeEventListener(type, listener) {\\n    if (this._listeners === void 0)\\n      return;\\n    const listeners = this._listeners;\\n    const listenerArray = listeners[type];\\n    if (listenerArray !== void 0) {\\n      const index = listenerArray.indexOf(listener);\\n      if (index !== -1) {\\n        listenerArray.splice(index, 1);\\n      }\\n    }\\n  }\\n  dispatchEvent(event) {\\n    if (this._listeners === void 0)\\n      return;\\n    const listeners = this._listeners;\\n    const listenerArray = listeners[event.type];\\n    if (listenerArray !== void 0) {\\n      event.target = this;\\n      const array = listenerArray.slice(0);\\n      for (let i = 0, l = array.length; i < l; i++) {\\n        array[i].call(this, event);\\n      }\\n      event.target = null;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/three/src/math/Euler.js\\nvar _matrix = /* @__PURE__ */ new Matrix4();\\nvar _quaternion2 = /* @__PURE__ */ new Quaternion();\\nvar Euler = class {\\n  constructor(x = 0, y = 0, z = 0, order = Euler.DefaultOrder) {\\n    this._x = x;\\n    this._y = y;\\n    this._z = z;\\n    this._order = order;\\n  }\\n  get x() {\\n    return this._x;\\n  }\\n  set x(value) {\\n    this._x = value;\\n    this._onChangeCallback();\\n  }\\n  get y() {\\n    return this._y;\\n  }\\n  set y(value) {\\n    this._y = value;\\n    this._onChangeCallback();\\n  }\\n  get z() {\\n    return this._z;\\n  }\\n  set z(value) {\\n    this._z = value;\\n    this._onChangeCallback();\\n  }\\n  get order() {\\n    return this._order;\\n  }\\n  set order(value) {\\n    this._order = value;\\n    this._onChangeCallback();\\n  }\\n  set(x, y, z, order = this._order) {\\n    this._x = x;\\n    this._y = y;\\n    this._z = z;\\n    this._order = order;\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  clone() {\\n    return new this.constructor(this._x, this._y, this._z, this._order);\\n  }\\n  copy(euler) {\\n    this._x = euler._x;\\n    this._y = euler._y;\\n    this._z = euler._z;\\n    this._order = euler._order;\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  setFromRotationMatrix(m, order = this._order, update = true) {\\n    const te = m.elements;\\n    const m11 = te[0], m12 = te[4], m13 = te[8];\\n    const m21 = te[1], m22 = te[5], m23 = te[9];\\n    const m31 = te[2], m32 = te[6], m33 = te[10];\\n    switch (order) {\\n      case \\\\\\\"XYZ\\\\\\\":\\n        this._y = Math.asin(clamp(m13, -1, 1));\\n        if (Math.abs(m13) < 0.9999999) {\\n          this._x = Math.atan2(-m23, m33);\\n          this._z = Math.atan2(-m12, m11);\\n        } else {\\n          this._x = Math.atan2(m32, m22);\\n          this._z = 0;\\n        }\\n        break;\\n      case \\\\\\\"YXZ\\\\\\\":\\n        this._x = Math.asin(-clamp(m23, -1, 1));\\n        if (Math.abs(m23) < 0.9999999) {\\n          this._y = Math.atan2(m13, m33);\\n          this._z = Math.atan2(m21, m22);\\n        } else {\\n          this._y = Math.atan2(-m31, m11);\\n          this._z = 0;\\n        }\\n        break;\\n      case \\\\\\\"ZXY\\\\\\\":\\n        this._x = Math.asin(clamp(m32, -1, 1));\\n        if (Math.abs(m32) < 0.9999999) {\\n          this._y = Math.atan2(-m31, m33);\\n          this._z = Math.atan2(-m12, m22);\\n        } else {\\n          this._y = 0;\\n          this._z = Math.atan2(m21, m11);\\n        }\\n        break;\\n      case \\\\\\\"ZYX\\\\\\\":\\n        this._y = Math.asin(-clamp(m31, -1, 1));\\n        if (Math.abs(m31) < 0.9999999) {\\n          this._x = Math.atan2(m32, m33);\\n          this._z = Math.atan2(m21, m11);\\n        } else {\\n          this._x = 0;\\n          this._z = Math.atan2(-m12, m22);\\n        }\\n        break;\\n      case \\\\\\\"YZX\\\\\\\":\\n        this._z = Math.asin(clamp(m21, -1, 1));\\n        if (Math.abs(m21) < 0.9999999) {\\n          this._x = Math.atan2(-m23, m22);\\n          this._y = Math.atan2(-m31, m11);\\n        } else {\\n          this._x = 0;\\n          this._y = Math.atan2(m13, m33);\\n        }\\n        break;\\n      case \\\\\\\"XZY\\\\\\\":\\n        this._z = Math.asin(-clamp(m12, -1, 1));\\n        if (Math.abs(m12) < 0.9999999) {\\n          this._x = Math.atan2(m32, m22);\\n          this._y = Math.atan2(m13, m11);\\n        } else {\\n          this._x = Math.atan2(-m23, m33);\\n          this._y = 0;\\n        }\\n        break;\\n      default:\\n        console.warn(\\\\\\\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \\\\\\\" + order);\\n    }\\n    this._order = order;\\n    if (update === true)\\n      this._onChangeCallback();\\n    return this;\\n  }\\n  setFromQuaternion(q, order, update) {\\n    _matrix.makeRotationFromQuaternion(q);\\n    return this.setFromRotationMatrix(_matrix, order, update);\\n  }\\n  setFromVector3(v, order = this._order) {\\n    return this.set(v.x, v.y, v.z, order);\\n  }\\n  reorder(newOrder) {\\n    _quaternion2.setFromEuler(this);\\n    return this.setFromQuaternion(_quaternion2, newOrder);\\n  }\\n  equals(euler) {\\n    return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order;\\n  }\\n  fromArray(array) {\\n    this._x = array[0];\\n    this._y = array[1];\\n    this._z = array[2];\\n    if (array[3] !== void 0)\\n      this._order = array[3];\\n    this._onChangeCallback();\\n    return this;\\n  }\\n  toArray(array = [], offset = 0) {\\n    array[offset] = this._x;\\n    array[offset + 1] = this._y;\\n    array[offset + 2] = this._z;\\n    array[offset + 3] = this._order;\\n    return array;\\n  }\\n  toVector3(optionalResult) {\\n    if (optionalResult) {\\n      return optionalResult.set(this._x, this._y, this._z);\\n    } else {\\n      return new Vector3(this._x, this._y, this._z);\\n    }\\n  }\\n  _onChange(callback) {\\n    this._onChangeCallback = callback;\\n    return this;\\n  }\\n  _onChangeCallback() {\\n  }\\n};\\nEuler.prototype.isEuler = true;\\nEuler.DefaultOrder = \\\\\\\"XYZ\\\\\\\";\\nEuler.RotationOrders = [\\\\\\\"XYZ\\\\\\\", \\\\\\\"YZX\\\\\\\", \\\\\\\"ZXY\\\\\\\", \\\\\\\"XZY\\\\\\\", \\\\\\\"YXZ\\\\\\\", \\\\\\\"ZYX\\\\\\\"];\\n\\n// ../../../node_modules/three/src/core/Layers.js\\nvar Layers = class {\\n  constructor() {\\n    this.mask = 1 | 0;\\n  }\\n  set(channel) {\\n    this.mask = 1 << channel | 0;\\n  }\\n  enable(channel) {\\n    this.mask |= 1 << channel | 0;\\n  }\\n  enableAll() {\\n    this.mask = 4294967295 | 0;\\n  }\\n  toggle(channel) {\\n    this.mask ^= 1 << channel | 0;\\n  }\\n  disable(channel) {\\n    this.mask &= ~(1 << channel | 0);\\n  }\\n  disableAll() {\\n    this.mask = 0;\\n  }\\n  test(layers) {\\n    return (this.mask & layers.mask) !== 0;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/math/Matrix3.js\\nvar Matrix3 = class {\\n  constructor() {\\n    this.elements = [\\n      1,\\n      0,\\n      0,\\n      0,\\n      1,\\n      0,\\n      0,\\n      0,\\n      1\\n    ];\\n    if (arguments.length > 0) {\\n      console.error(\\\\\\\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\\\\\\\");\\n    }\\n  }\\n  set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\\n    const te = this.elements;\\n    te[0] = n11;\\n    te[1] = n21;\\n    te[2] = n31;\\n    te[3] = n12;\\n    te[4] = n22;\\n    te[5] = n32;\\n    te[6] = n13;\\n    te[7] = n23;\\n    te[8] = n33;\\n    return this;\\n  }\\n  identity() {\\n    this.set(1, 0, 0, 0, 1, 0, 0, 0, 1);\\n    return this;\\n  }\\n  copy(m) {\\n    const te = this.elements;\\n    const me = m.elements;\\n    te[0] = me[0];\\n    te[1] = me[1];\\n    te[2] = me[2];\\n    te[3] = me[3];\\n    te[4] = me[4];\\n    te[5] = me[5];\\n    te[6] = me[6];\\n    te[7] = me[7];\\n    te[8] = me[8];\\n    return this;\\n  }\\n  extractBasis(xAxis, yAxis, zAxis) {\\n    xAxis.setFromMatrix3Column(this, 0);\\n    yAxis.setFromMatrix3Column(this, 1);\\n    zAxis.setFromMatrix3Column(this, 2);\\n    return this;\\n  }\\n  setFromMatrix4(m) {\\n    const me = m.elements;\\n    this.set(me[0], me[4], me[8], me[1], me[5], me[9], me[2], me[6], me[10]);\\n    return this;\\n  }\\n  multiply(m) {\\n    return this.multiplyMatrices(this, m);\\n  }\\n  premultiply(m) {\\n    return this.multiplyMatrices(m, this);\\n  }\\n  multiplyMatrices(a, b) {\\n    const ae = a.elements;\\n    const be = b.elements;\\n    const te = this.elements;\\n    const a11 = ae[0], a12 = ae[3], a13 = ae[6];\\n    const a21 = ae[1], a22 = ae[4], a23 = ae[7];\\n    const a31 = ae[2], a32 = ae[5], a33 = ae[8];\\n    const b11 = be[0], b12 = be[3], b13 = be[6];\\n    const b21 = be[1], b22 = be[4], b23 = be[7];\\n    const b31 = be[2], b32 = be[5], b33 = be[8];\\n    te[0] = a11 * b11 + a12 * b21 + a13 * b31;\\n    te[3] = a11 * b12 + a12 * b22 + a13 * b32;\\n    te[6] = a11 * b13 + a12 * b23 + a13 * b33;\\n    te[1] = a21 * b11 + a22 * b21 + a23 * b31;\\n    te[4] = a21 * b12 + a22 * b22 + a23 * b32;\\n    te[7] = a21 * b13 + a22 * b23 + a23 * b33;\\n    te[2] = a31 * b11 + a32 * b21 + a33 * b31;\\n    te[5] = a31 * b12 + a32 * b22 + a33 * b32;\\n    te[8] = a31 * b13 + a32 * b23 + a33 * b33;\\n    return this;\\n  }\\n  multiplyScalar(s) {\\n    const te = this.elements;\\n    te[0] *= s;\\n    te[3] *= s;\\n    te[6] *= s;\\n    te[1] *= s;\\n    te[4] *= s;\\n    te[7] *= s;\\n    te[2] *= s;\\n    te[5] *= s;\\n    te[8] *= s;\\n    return this;\\n  }\\n  determinant() {\\n    const te = this.elements;\\n    const a = te[0], b = te[1], c = te[2], d = te[3], e = te[4], f = te[5], g = te[6], h = te[7], i = te[8];\\n    return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\\n  }\\n  invert() {\\n    const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n12 = te[3], n22 = te[4], n32 = te[5], n13 = te[6], n23 = te[7], n33 = te[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13;\\n    if (det === 0)\\n      return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\\n    const detInv = 1 / det;\\n    te[0] = t11 * detInv;\\n    te[1] = (n31 * n23 - n33 * n21) * detInv;\\n    te[2] = (n32 * n21 - n31 * n22) * detInv;\\n    te[3] = t12 * detInv;\\n    te[4] = (n33 * n11 - n31 * n13) * detInv;\\n    te[5] = (n31 * n12 - n32 * n11) * detInv;\\n    te[6] = t13 * detInv;\\n    te[7] = (n21 * n13 - n23 * n11) * detInv;\\n    te[8] = (n22 * n11 - n21 * n12) * detInv;\\n    return this;\\n  }\\n  transpose() {\\n    let tmp;\\n    const m = this.elements;\\n    tmp = m[1];\\n    m[1] = m[3];\\n    m[3] = tmp;\\n    tmp = m[2];\\n    m[2] = m[6];\\n    m[6] = tmp;\\n    tmp = m[5];\\n    m[5] = m[7];\\n    m[7] = tmp;\\n    return this;\\n  }\\n  getNormalMatrix(matrix4) {\\n    return this.setFromMatrix4(matrix4).invert().transpose();\\n  }\\n  transposeIntoArray(r) {\\n    const m = this.elements;\\n    r[0] = m[0];\\n    r[1] = m[3];\\n    r[2] = m[6];\\n    r[3] = m[1];\\n    r[4] = m[4];\\n    r[5] = m[7];\\n    r[6] = m[2];\\n    r[7] = m[5];\\n    r[8] = m[8];\\n    return this;\\n  }\\n  setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {\\n    const c = Math.cos(rotation);\\n    const s = Math.sin(rotation);\\n    this.set(sx * c, sx * s, -sx * (c * cx + s * cy) + cx + tx, -sy * s, sy * c, -sy * (-s * cx + c * cy) + cy + ty, 0, 0, 1);\\n    return this;\\n  }\\n  scale(sx, sy) {\\n    const te = this.elements;\\n    te[0] *= sx;\\n    te[3] *= sx;\\n    te[6] *= sx;\\n    te[1] *= sy;\\n    te[4] *= sy;\\n    te[7] *= sy;\\n    return this;\\n  }\\n  rotate(theta) {\\n    const c = Math.cos(theta);\\n    const s = Math.sin(theta);\\n    const te = this.elements;\\n    const a11 = te[0], a12 = te[3], a13 = te[6];\\n    const a21 = te[1], a22 = te[4], a23 = te[7];\\n    te[0] = c * a11 + s * a21;\\n    te[3] = c * a12 + s * a22;\\n    te[6] = c * a13 + s * a23;\\n    te[1] = -s * a11 + c * a21;\\n    te[4] = -s * a12 + c * a22;\\n    te[7] = -s * a13 + c * a23;\\n    return this;\\n  }\\n  translate(tx, ty) {\\n    const te = this.elements;\\n    te[0] += tx * te[2];\\n    te[3] += tx * te[5];\\n    te[6] += tx * te[8];\\n    te[1] += ty * te[2];\\n    te[4] += ty * te[5];\\n    te[7] += ty * te[8];\\n    return this;\\n  }\\n  equals(matrix) {\\n    const te = this.elements;\\n    const me = matrix.elements;\\n    for (let i = 0; i < 9; i++) {\\n      if (te[i] !== me[i])\\n        return false;\\n    }\\n    return true;\\n  }\\n  fromArray(array, offset = 0) {\\n    for (let i = 0; i < 9; i++) {\\n      this.elements[i] = array[i + offset];\\n    }\\n    return this;\\n  }\\n  toArray(array = [], offset = 0) {\\n    const te = this.elements;\\n    array[offset] = te[0];\\n    array[offset + 1] = te[1];\\n    array[offset + 2] = te[2];\\n    array[offset + 3] = te[3];\\n    array[offset + 4] = te[4];\\n    array[offset + 5] = te[5];\\n    array[offset + 6] = te[6];\\n    array[offset + 7] = te[7];\\n    array[offset + 8] = te[8];\\n    return array;\\n  }\\n  clone() {\\n    return new this.constructor().fromArray(this.elements);\\n  }\\n};\\nMatrix3.prototype.isMatrix3 = true;\\n\\n// ../../../node_modules/three/src/core/Object3D.js\\nvar _object3DId = 0;\\nvar _v12 = /* @__PURE__ */ new Vector3();\\nvar _q1 = /* @__PURE__ */ new Quaternion();\\nvar _m12 = /* @__PURE__ */ new Matrix4();\\nvar _target = /* @__PURE__ */ new Vector3();\\nvar _position = /* @__PURE__ */ new Vector3();\\nvar _scale = /* @__PURE__ */ new Vector3();\\nvar _quaternion3 = /* @__PURE__ */ new Quaternion();\\nvar _xAxis = /* @__PURE__ */ new Vector3(1, 0, 0);\\nvar _yAxis = /* @__PURE__ */ new Vector3(0, 1, 0);\\nvar _zAxis = /* @__PURE__ */ new Vector3(0, 0, 1);\\nvar _addedEvent = {type: \\\\\\\"added\\\\\\\"};\\nvar _removedEvent = {type: \\\\\\\"removed\\\\\\\"};\\nvar Object3D = class extends EventDispatcher {\\n  constructor() {\\n    super();\\n    Object.defineProperty(this, \\\\\\\"id\\\\\\\", {value: _object3DId++});\\n    this.uuid = generateUUID();\\n    this.name = \\\\\\\"\\\\\\\";\\n    this.type = \\\\\\\"Object3D\\\\\\\";\\n    this.parent = null;\\n    this.children = [];\\n    this.up = Object3D.DefaultUp.clone();\\n    const position = new Vector3();\\n    const rotation = new Euler();\\n    const quaternion = new Quaternion();\\n    const scale = new Vector3(1, 1, 1);\\n    function onRotationChange() {\\n      quaternion.setFromEuler(rotation, false);\\n    }\\n    function onQuaternionChange() {\\n      rotation.setFromQuaternion(quaternion, void 0, false);\\n    }\\n    rotation._onChange(onRotationChange);\\n    quaternion._onChange(onQuaternionChange);\\n    Object.defineProperties(this, {\\n      position: {\\n        configurable: true,\\n        enumerable: true,\\n        value: position\\n      },\\n      rotation: {\\n        configurable: true,\\n        enumerable: true,\\n        value: rotation\\n      },\\n      quaternion: {\\n        configurable: true,\\n        enumerable: true,\\n        value: quaternion\\n      },\\n      scale: {\\n        configurable: true,\\n        enumerable: true,\\n        value: scale\\n      },\\n      modelViewMatrix: {\\n        value: new Matrix4()\\n      },\\n      normalMatrix: {\\n        value: new Matrix3()\\n      }\\n    });\\n    this.matrix = new Matrix4();\\n    this.matrixWorld = new Matrix4();\\n    this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\\n    this.matrixWorldNeedsUpdate = false;\\n    this.layers = new Layers();\\n    this.visible = true;\\n    this.castShadow = false;\\n    this.receiveShadow = false;\\n    this.frustumCulled = true;\\n    this.renderOrder = 0;\\n    this.animations = [];\\n    this.userData = {};\\n  }\\n  onBeforeRender() {\\n  }\\n  onAfterRender() {\\n  }\\n  applyMatrix4(matrix) {\\n    if (this.matrixAutoUpdate)\\n      this.updateMatrix();\\n    this.matrix.premultiply(matrix);\\n    this.matrix.decompose(this.position, this.quaternion, this.scale);\\n  }\\n  applyQuaternion(q) {\\n    this.quaternion.premultiply(q);\\n    return this;\\n  }\\n  setRotationFromAxisAngle(axis, angle) {\\n    this.quaternion.setFromAxisAngle(axis, angle);\\n  }\\n  setRotationFromEuler(euler) {\\n    this.quaternion.setFromEuler(euler, true);\\n  }\\n  setRotationFromMatrix(m) {\\n    this.quaternion.setFromRotationMatrix(m);\\n  }\\n  setRotationFromQuaternion(q) {\\n    this.quaternion.copy(q);\\n  }\\n  rotateOnAxis(axis, angle) {\\n    _q1.setFromAxisAngle(axis, angle);\\n    this.quaternion.multiply(_q1);\\n    return this;\\n  }\\n  rotateOnWorldAxis(axis, angle) {\\n    _q1.setFromAxisAngle(axis, angle);\\n    this.quaternion.premultiply(_q1);\\n    return this;\\n  }\\n  rotateX(angle) {\\n    return this.rotateOnAxis(_xAxis, angle);\\n  }\\n  rotateY(angle) {\\n    return this.rotateOnAxis(_yAxis, angle);\\n  }\\n  rotateZ(angle) {\\n    return this.rotateOnAxis(_zAxis, angle);\\n  }\\n  translateOnAxis(axis, distance) {\\n    _v12.copy(axis).applyQuaternion(this.quaternion);\\n    this.position.add(_v12.multiplyScalar(distance));\\n    return this;\\n  }\\n  translateX(distance) {\\n    return this.translateOnAxis(_xAxis, distance);\\n  }\\n  translateY(distance) {\\n    return this.translateOnAxis(_yAxis, distance);\\n  }\\n  translateZ(distance) {\\n    return this.translateOnAxis(_zAxis, distance);\\n  }\\n  localToWorld(vector) {\\n    return vector.applyMatrix4(this.matrixWorld);\\n  }\\n  worldToLocal(vector) {\\n    return vector.applyMatrix4(_m12.copy(this.matrixWorld).invert());\\n  }\\n  lookAt(x, y, z) {\\n    if (x.isVector3) {\\n      _target.copy(x);\\n    } else {\\n      _target.set(x, y, z);\\n    }\\n    const parent = this.parent;\\n    this.updateWorldMatrix(true, false);\\n    _position.setFromMatrixPosition(this.matrixWorld);\\n    if (this.isCamera || this.isLight) {\\n      _m12.lookAt(_position, _target, this.up);\\n    } else {\\n      _m12.lookAt(_target, _position, this.up);\\n    }\\n    this.quaternion.setFromRotationMatrix(_m12);\\n    if (parent) {\\n      _m12.extractRotation(parent.matrixWorld);\\n      _q1.setFromRotationMatrix(_m12);\\n      this.quaternion.premultiply(_q1.invert());\\n    }\\n  }\\n  add(object) {\\n    if (arguments.length > 1) {\\n      for (let i = 0; i < arguments.length; i++) {\\n        this.add(arguments[i]);\\n      }\\n      return this;\\n    }\\n    if (object === this) {\\n      console.error(\\\\\\\"THREE.Object3D.add: object can't be added as a child of itself.\\\\\\\", object);\\n      return this;\\n    }\\n    if (object && object.isObject3D) {\\n      if (object.parent !== null) {\\n        object.parent.remove(object);\\n      }\\n      object.parent = this;\\n      this.children.push(object);\\n      object.dispatchEvent(_addedEvent);\\n    } else {\\n      console.error(\\\\\\\"THREE.Object3D.add: object not an instance of THREE.Object3D.\\\\\\\", object);\\n    }\\n    return this;\\n  }\\n  remove(object) {\\n    if (arguments.length > 1) {\\n      for (let i = 0; i < arguments.length; i++) {\\n        this.remove(arguments[i]);\\n      }\\n      return this;\\n    }\\n    const index = this.children.indexOf(object);\\n    if (index !== -1) {\\n      object.parent = null;\\n      this.children.splice(index, 1);\\n      object.dispatchEvent(_removedEvent);\\n    }\\n    return this;\\n  }\\n  removeFromParent() {\\n    const parent = this.parent;\\n    if (parent !== null) {\\n      parent.remove(this);\\n    }\\n    return this;\\n  }\\n  clear() {\\n    for (let i = 0; i < this.children.length; i++) {\\n      const object = this.children[i];\\n      object.parent = null;\\n      object.dispatchEvent(_removedEvent);\\n    }\\n    this.children.length = 0;\\n    return this;\\n  }\\n  attach(object) {\\n    this.updateWorldMatrix(true, false);\\n    _m12.copy(this.matrixWorld).invert();\\n    if (object.parent !== null) {\\n      object.parent.updateWorldMatrix(true, false);\\n      _m12.multiply(object.parent.matrixWorld);\\n    }\\n    object.applyMatrix4(_m12);\\n    this.add(object);\\n    object.updateWorldMatrix(false, true);\\n    return this;\\n  }\\n  getObjectById(id) {\\n    return this.getObjectByProperty(\\\\\\\"id\\\\\\\", id);\\n  }\\n  getObjectByName(name) {\\n    return this.getObjectByProperty(\\\\\\\"name\\\\\\\", name);\\n  }\\n  getObjectByProperty(name, value) {\\n    if (this[name] === value)\\n      return this;\\n    for (let i = 0, l = this.children.length; i < l; i++) {\\n      const child = this.children[i];\\n      const object = child.getObjectByProperty(name, value);\\n      if (object !== void 0) {\\n        return object;\\n      }\\n    }\\n    return void 0;\\n  }\\n  getWorldPosition(target) {\\n    this.updateWorldMatrix(true, false);\\n    return target.setFromMatrixPosition(this.matrixWorld);\\n  }\\n  getWorldQuaternion(target) {\\n    this.updateWorldMatrix(true, false);\\n    this.matrixWorld.decompose(_position, target, _scale);\\n    return target;\\n  }\\n  getWorldScale(target) {\\n    this.updateWorldMatrix(true, false);\\n    this.matrixWorld.decompose(_position, _quaternion3, target);\\n    return target;\\n  }\\n  getWorldDirection(target) {\\n    this.updateWorldMatrix(true, false);\\n    const e = this.matrixWorld.elements;\\n    return target.set(e[8], e[9], e[10]).normalize();\\n  }\\n  raycast() {\\n  }\\n  traverse(callback) {\\n    callback(this);\\n    const children = this.children;\\n    for (let i = 0, l = children.length; i < l; i++) {\\n      children[i].traverse(callback);\\n    }\\n  }\\n  traverseVisible(callback) {\\n    if (this.visible === false)\\n      return;\\n    callback(this);\\n    const children = this.children;\\n    for (let i = 0, l = children.length; i < l; i++) {\\n      children[i].traverseVisible(callback);\\n    }\\n  }\\n  traverseAncestors(callback) {\\n    const parent = this.parent;\\n    if (parent !== null) {\\n      callback(parent);\\n      parent.traverseAncestors(callback);\\n    }\\n  }\\n  updateMatrix() {\\n    this.matrix.compose(this.position, this.quaternion, this.scale);\\n    this.matrixWorldNeedsUpdate = true;\\n  }\\n  updateMatrixWorld(force) {\\n    if (this.matrixAutoUpdate)\\n      this.updateMatrix();\\n    if (this.matrixWorldNeedsUpdate || force) {\\n      if (this.parent === null) {\\n        this.matrixWorld.copy(this.matrix);\\n      } else {\\n        this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);\\n      }\\n      this.matrixWorldNeedsUpdate = false;\\n      force = true;\\n    }\\n    const children = this.children;\\n    for (let i = 0, l = children.length; i < l; i++) {\\n      children[i].updateMatrixWorld(force);\\n    }\\n  }\\n  updateWorldMatrix(updateParents, updateChildren) {\\n    const parent = this.parent;\\n    if (updateParents === true && parent !== null) {\\n      parent.updateWorldMatrix(true, false);\\n    }\\n    if (this.matrixAutoUpdate)\\n      this.updateMatrix();\\n    if (this.parent === null) {\\n      this.matrixWorld.copy(this.matrix);\\n    } else {\\n      this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);\\n    }\\n    if (updateChildren === true) {\\n      const children = this.children;\\n      for (let i = 0, l = children.length; i < l; i++) {\\n        children[i].updateWorldMatrix(false, true);\\n      }\\n    }\\n  }\\n  toJSON(meta) {\\n    const isRootObject = meta === void 0 || typeof meta === \\\\\\\"string\\\\\\\";\\n    const output = {};\\n    if (isRootObject) {\\n      meta = {\\n        geometries: {},\\n        materials: {},\\n        textures: {},\\n        images: {},\\n        shapes: {},\\n        skeletons: {},\\n        animations: {}\\n      };\\n      output.metadata = {\\n        version: 4.5,\\n        type: \\\\\\\"Object\\\\\\\",\\n        generator: \\\\\\\"Object3D.toJSON\\\\\\\"\\n      };\\n    }\\n    const object = {};\\n    object.uuid = this.uuid;\\n    object.type = this.type;\\n    if (this.name !== \\\\\\\"\\\\\\\")\\n      object.name = this.name;\\n    if (this.castShadow === true)\\n      object.castShadow = true;\\n    if (this.receiveShadow === true)\\n      object.receiveShadow = true;\\n    if (this.visible === false)\\n      object.visible = false;\\n    if (this.frustumCulled === false)\\n      object.frustumCulled = false;\\n    if (this.renderOrder !== 0)\\n      object.renderOrder = this.renderOrder;\\n    if (JSON.stringify(this.userData) !== \\\\\\\"{}\\\\\\\")\\n      object.userData = this.userData;\\n    object.layers = this.layers.mask;\\n    object.matrix = this.matrix.toArray();\\n    if (this.matrixAutoUpdate === false)\\n      object.matrixAutoUpdate = false;\\n    if (this.isInstancedMesh) {\\n      object.type = \\\\\\\"InstancedMesh\\\\\\\";\\n      object.count = this.count;\\n      object.instanceMatrix = this.instanceMatrix.toJSON();\\n      if (this.instanceColor !== null)\\n        object.instanceColor = this.instanceColor.toJSON();\\n    }\\n    function serialize(library, element) {\\n      if (library[element.uuid] === void 0) {\\n        library[element.uuid] = element.toJSON(meta);\\n      }\\n      return element.uuid;\\n    }\\n    if (this.isScene) {\\n      if (this.background) {\\n        if (this.background.isColor) {\\n          object.background = this.background.toJSON();\\n        } else if (this.background.isTexture) {\\n          object.background = this.background.toJSON(meta).uuid;\\n        }\\n      }\\n      if (this.environment && this.environment.isTexture) {\\n        object.environment = this.environment.toJSON(meta).uuid;\\n      }\\n    } else if (this.isMesh || this.isLine || this.isPoints) {\\n      object.geometry = serialize(meta.geometries, this.geometry);\\n      const parameters = this.geometry.parameters;\\n      if (parameters !== void 0 && parameters.shapes !== void 0) {\\n        const shapes = parameters.shapes;\\n        if (Array.isArray(shapes)) {\\n          for (let i = 0, l = shapes.length; i < l; i++) {\\n            const shape = shapes[i];\\n            serialize(meta.shapes, shape);\\n          }\\n        } else {\\n          serialize(meta.shapes, shapes);\\n        }\\n      }\\n    }\\n    if (this.isSkinnedMesh) {\\n      object.bindMode = this.bindMode;\\n      object.bindMatrix = this.bindMatrix.toArray();\\n      if (this.skeleton !== void 0) {\\n        serialize(meta.skeletons, this.skeleton);\\n        object.skeleton = this.skeleton.uuid;\\n      }\\n    }\\n    if (this.material !== void 0) {\\n      if (Array.isArray(this.material)) {\\n        const uuids = [];\\n        for (let i = 0, l = this.material.length; i < l; i++) {\\n          uuids.push(serialize(meta.materials, this.material[i]));\\n        }\\n        object.material = uuids;\\n      } else {\\n        object.material = serialize(meta.materials, this.material);\\n      }\\n    }\\n    if (this.children.length > 0) {\\n      object.children = [];\\n      for (let i = 0; i < this.children.length; i++) {\\n        object.children.push(this.children[i].toJSON(meta).object);\\n      }\\n    }\\n    if (this.animations.length > 0) {\\n      object.animations = [];\\n      for (let i = 0; i < this.animations.length; i++) {\\n        const animation = this.animations[i];\\n        object.animations.push(serialize(meta.animations, animation));\\n      }\\n    }\\n    if (isRootObject) {\\n      const geometries = extractFromCache(meta.geometries);\\n      const materials2 = extractFromCache(meta.materials);\\n      const textures = extractFromCache(meta.textures);\\n      const images = extractFromCache(meta.images);\\n      const shapes = extractFromCache(meta.shapes);\\n      const skeletons = extractFromCache(meta.skeletons);\\n      const animations = extractFromCache(meta.animations);\\n      if (geometries.length > 0)\\n        output.geometries = geometries;\\n      if (materials2.length > 0)\\n        output.materials = materials2;\\n      if (textures.length > 0)\\n        output.textures = textures;\\n      if (images.length > 0)\\n        output.images = images;\\n      if (shapes.length > 0)\\n        output.shapes = shapes;\\n      if (skeletons.length > 0)\\n        output.skeletons = skeletons;\\n      if (animations.length > 0)\\n        output.animations = animations;\\n    }\\n    output.object = object;\\n    return output;\\n    function extractFromCache(cache) {\\n      const values = [];\\n      for (const key in cache) {\\n        const data = cache[key];\\n        delete data.metadata;\\n        values.push(data);\\n      }\\n      return values;\\n    }\\n  }\\n  clone(recursive) {\\n    return new this.constructor().copy(this, recursive);\\n  }\\n  copy(source, recursive = true) {\\n    this.name = source.name;\\n    this.up.copy(source.up);\\n    this.position.copy(source.position);\\n    this.rotation.order = source.rotation.order;\\n    this.quaternion.copy(source.quaternion);\\n    this.scale.copy(source.scale);\\n    this.matrix.copy(source.matrix);\\n    this.matrixWorld.copy(source.matrixWorld);\\n    this.matrixAutoUpdate = source.matrixAutoUpdate;\\n    this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\\n    this.layers.mask = source.layers.mask;\\n    this.visible = source.visible;\\n    this.castShadow = source.castShadow;\\n    this.receiveShadow = source.receiveShadow;\\n    this.frustumCulled = source.frustumCulled;\\n    this.renderOrder = source.renderOrder;\\n    this.userData = JSON.parse(JSON.stringify(source.userData));\\n    if (recursive === true) {\\n      for (let i = 0; i < source.children.length; i++) {\\n        const child = source.children[i];\\n        this.add(child.clone());\\n      }\\n    }\\n    return this;\\n  }\\n};\\nObject3D.DefaultUp = new Vector3(0, 1, 0);\\nObject3D.DefaultMatrixAutoUpdate = true;\\nObject3D.prototype.isObject3D = true;\\n\\n// ../../../node_modules/three/src/constants.js\\nvar CullFaceNone = 0;\\nvar CullFaceBack = 1;\\nvar CullFaceFront = 2;\\nvar PCFShadowMap = 1;\\nvar PCFSoftShadowMap = 2;\\nvar VSMShadowMap = 3;\\nvar FrontSide = 0;\\nvar BackSide = 1;\\nvar DoubleSide = 2;\\nvar FlatShading = 1;\\nvar NoBlending = 0;\\nvar NormalBlending = 1;\\nvar AdditiveBlending = 2;\\nvar SubtractiveBlending = 3;\\nvar MultiplyBlending = 4;\\nvar CustomBlending = 5;\\nvar AddEquation = 100;\\nvar SubtractEquation = 101;\\nvar ReverseSubtractEquation = 102;\\nvar MinEquation = 103;\\nvar MaxEquation = 104;\\nvar ZeroFactor = 200;\\nvar OneFactor = 201;\\nvar SrcColorFactor = 202;\\nvar OneMinusSrcColorFactor = 203;\\nvar SrcAlphaFactor = 204;\\nvar OneMinusSrcAlphaFactor = 205;\\nvar DstAlphaFactor = 206;\\nvar OneMinusDstAlphaFactor = 207;\\nvar DstColorFactor = 208;\\nvar OneMinusDstColorFactor = 209;\\nvar SrcAlphaSaturateFactor = 210;\\nvar NeverDepth = 0;\\nvar AlwaysDepth = 1;\\nvar LessDepth = 2;\\nvar LessEqualDepth = 3;\\nvar EqualDepth = 4;\\nvar GreaterEqualDepth = 5;\\nvar GreaterDepth = 6;\\nvar NotEqualDepth = 7;\\nvar MultiplyOperation = 0;\\nvar MixOperation = 1;\\nvar AddOperation = 2;\\nvar NoToneMapping = 0;\\nvar LinearToneMapping = 1;\\nvar ReinhardToneMapping = 2;\\nvar CineonToneMapping = 3;\\nvar ACESFilmicToneMapping = 4;\\nvar CustomToneMapping = 5;\\nvar UVMapping = 300;\\nvar CubeReflectionMapping = 301;\\nvar CubeRefractionMapping = 302;\\nvar EquirectangularReflectionMapping = 303;\\nvar EquirectangularRefractionMapping = 304;\\nvar CubeUVReflectionMapping = 306;\\nvar CubeUVRefractionMapping = 307;\\nvar RepeatWrapping = 1e3;\\nvar ClampToEdgeWrapping = 1001;\\nvar MirroredRepeatWrapping = 1002;\\nvar NearestFilter = 1003;\\nvar NearestMipmapNearestFilter = 1004;\\nvar NearestMipmapLinearFilter = 1005;\\nvar LinearFilter = 1006;\\nvar LinearMipmapNearestFilter = 1007;\\nvar LinearMipmapLinearFilter = 1008;\\nvar UnsignedByteType = 1009;\\nvar ByteType = 1010;\\nvar ShortType = 1011;\\nvar UnsignedShortType = 1012;\\nvar IntType = 1013;\\nvar UnsignedIntType = 1014;\\nvar FloatType = 1015;\\nvar HalfFloatType = 1016;\\nvar UnsignedShort4444Type = 1017;\\nvar UnsignedShort5551Type = 1018;\\nvar UnsignedShort565Type = 1019;\\nvar UnsignedInt248Type = 1020;\\nvar AlphaFormat = 1021;\\nvar RGBFormat = 1022;\\nvar RGBAFormat = 1023;\\nvar LuminanceFormat = 1024;\\nvar LuminanceAlphaFormat = 1025;\\nvar RGBEFormat = RGBAFormat;\\nvar DepthFormat = 1026;\\nvar DepthStencilFormat = 1027;\\nvar RedFormat = 1028;\\nvar RedIntegerFormat = 1029;\\nvar RGFormat = 1030;\\nvar RGIntegerFormat = 1031;\\nvar RGBIntegerFormat = 1032;\\nvar RGBAIntegerFormat = 1033;\\nvar RGB_S3TC_DXT1_Format = 33776;\\nvar RGBA_S3TC_DXT1_Format = 33777;\\nvar RGBA_S3TC_DXT3_Format = 33778;\\nvar RGBA_S3TC_DXT5_Format = 33779;\\nvar RGB_PVRTC_4BPPV1_Format = 35840;\\nvar RGB_PVRTC_2BPPV1_Format = 35841;\\nvar RGBA_PVRTC_4BPPV1_Format = 35842;\\nvar RGBA_PVRTC_2BPPV1_Format = 35843;\\nvar RGB_ETC1_Format = 36196;\\nvar RGB_ETC2_Format = 37492;\\nvar RGBA_ETC2_EAC_Format = 37496;\\nvar RGBA_ASTC_4x4_Format = 37808;\\nvar RGBA_ASTC_5x4_Format = 37809;\\nvar RGBA_ASTC_5x5_Format = 37810;\\nvar RGBA_ASTC_6x5_Format = 37811;\\nvar RGBA_ASTC_6x6_Format = 37812;\\nvar RGBA_ASTC_8x5_Format = 37813;\\nvar RGBA_ASTC_8x6_Format = 37814;\\nvar RGBA_ASTC_8x8_Format = 37815;\\nvar RGBA_ASTC_10x5_Format = 37816;\\nvar RGBA_ASTC_10x6_Format = 37817;\\nvar RGBA_ASTC_10x8_Format = 37818;\\nvar RGBA_ASTC_10x10_Format = 37819;\\nvar RGBA_ASTC_12x10_Format = 37820;\\nvar RGBA_ASTC_12x12_Format = 37821;\\nvar RGBA_BPTC_Format = 36492;\\nvar SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\\nvar SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\\nvar SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\\nvar SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\\nvar SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\\nvar SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\\nvar SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\\nvar SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\\nvar SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\\nvar SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\\nvar SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\\nvar SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\\nvar SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\\nvar SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\\nvar ZeroCurvatureEnding = 2400;\\nvar ZeroSlopeEnding = 2401;\\nvar WrapAroundEnding = 2402;\\nvar LinearEncoding = 3e3;\\nvar sRGBEncoding = 3001;\\nvar GammaEncoding = 3007;\\nvar RGBEEncoding = 3002;\\nvar LogLuvEncoding = 3003;\\nvar RGBM7Encoding = 3004;\\nvar RGBM16Encoding = 3005;\\nvar RGBDEncoding = 3006;\\nvar BasicDepthPacking = 3200;\\nvar RGBADepthPacking = 3201;\\nvar TangentSpaceNormalMap = 0;\\nvar ObjectSpaceNormalMap = 1;\\nvar KeepStencilOp = 7680;\\nvar AlwaysStencilFunc = 519;\\nvar StaticDrawUsage = 35044;\\nvar GLSL3 = \\\\\\\"300 es\\\\\\\";\\n\\n// ../../../node_modules/three/src/math/Box3.js\\nvar Box3 = class {\\n  constructor(min = new Vector3(Infinity, Infinity, Infinity), max = new Vector3(-Infinity, -Infinity, -Infinity)) {\\n    this.min = min;\\n    this.max = max;\\n  }\\n  set(min, max) {\\n    this.min.copy(min);\\n    this.max.copy(max);\\n    return this;\\n  }\\n  setFromArray(array) {\\n    let minX = Infinity;\\n    let minY = Infinity;\\n    let minZ = Infinity;\\n    let maxX = -Infinity;\\n    let maxY = -Infinity;\\n    let maxZ = -Infinity;\\n    for (let i = 0, l = array.length; i < l; i += 3) {\\n      const x = array[i];\\n      const y = array[i + 1];\\n      const z = array[i + 2];\\n      if (x < minX)\\n        minX = x;\\n      if (y < minY)\\n        minY = y;\\n      if (z < minZ)\\n        minZ = z;\\n      if (x > maxX)\\n        maxX = x;\\n      if (y > maxY)\\n        maxY = y;\\n      if (z > maxZ)\\n        maxZ = z;\\n    }\\n    this.min.set(minX, minY, minZ);\\n    this.max.set(maxX, maxY, maxZ);\\n    return this;\\n  }\\n  setFromBufferAttribute(attribute) {\\n    let minX = Infinity;\\n    let minY = Infinity;\\n    let minZ = Infinity;\\n    let maxX = -Infinity;\\n    let maxY = -Infinity;\\n    let maxZ = -Infinity;\\n    for (let i = 0, l = attribute.count; i < l; i++) {\\n      const x = attribute.getX(i);\\n      const y = attribute.getY(i);\\n      const z = attribute.getZ(i);\\n      if (x < minX)\\n        minX = x;\\n      if (y < minY)\\n        minY = y;\\n      if (z < minZ)\\n        minZ = z;\\n      if (x > maxX)\\n        maxX = x;\\n      if (y > maxY)\\n        maxY = y;\\n      if (z > maxZ)\\n        maxZ = z;\\n    }\\n    this.min.set(minX, minY, minZ);\\n    this.max.set(maxX, maxY, maxZ);\\n    return this;\\n  }\\n  setFromPoints(points2) {\\n    this.makeEmpty();\\n    for (let i = 0, il = points2.length; i < il; i++) {\\n      this.expandByPoint(points2[i]);\\n    }\\n    return this;\\n  }\\n  setFromCenterAndSize(center, size) {\\n    const halfSize = _vector2.copy(size).multiplyScalar(0.5);\\n    this.min.copy(center).sub(halfSize);\\n    this.max.copy(center).add(halfSize);\\n    return this;\\n  }\\n  setFromObject(object) {\\n    this.makeEmpty();\\n    return this.expandByObject(object);\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n  copy(box) {\\n    this.min.copy(box.min);\\n    this.max.copy(box.max);\\n    return this;\\n  }\\n  makeEmpty() {\\n    this.min.x = this.min.y = this.min.z = Infinity;\\n    this.max.x = this.max.y = this.max.z = -Infinity;\\n    return this;\\n  }\\n  isEmpty() {\\n    return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z;\\n  }\\n  getCenter(target) {\\n    return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5);\\n  }\\n  getSize(target) {\\n    return this.isEmpty() ? target.set(0, 0, 0) : target.subVectors(this.max, this.min);\\n  }\\n  expandByPoint(point) {\\n    this.min.min(point);\\n    this.max.max(point);\\n    return this;\\n  }\\n  expandByVector(vector) {\\n    this.min.sub(vector);\\n    this.max.add(vector);\\n    return this;\\n  }\\n  expandByScalar(scalar) {\\n    this.min.addScalar(-scalar);\\n    this.max.addScalar(scalar);\\n    return this;\\n  }\\n  expandByObject(object) {\\n    object.updateWorldMatrix(false, false);\\n    const geometry = object.geometry;\\n    if (geometry !== void 0) {\\n      if (geometry.boundingBox === null) {\\n        geometry.computeBoundingBox();\\n      }\\n      _box.copy(geometry.boundingBox);\\n      _box.applyMatrix4(object.matrixWorld);\\n      this.union(_box);\\n    }\\n    const children = object.children;\\n    for (let i = 0, l = children.length; i < l; i++) {\\n      this.expandByObject(children[i]);\\n    }\\n    return this;\\n  }\\n  containsPoint(point) {\\n    return point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y || point.z < this.min.z || point.z > this.max.z ? false : true;\\n  }\\n  containsBox(box) {\\n    return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z;\\n  }\\n  getParameter(point, target) {\\n    return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y), (point.z - this.min.z) / (this.max.z - this.min.z));\\n  }\\n  intersectsBox(box) {\\n    return box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y || box.max.z < this.min.z || box.min.z > this.max.z ? false : true;\\n  }\\n  intersectsSphere(sphere) {\\n    this.clampPoint(sphere.center, _vector2);\\n    return _vector2.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius;\\n  }\\n  intersectsPlane(plane) {\\n    let min, max;\\n    if (plane.normal.x > 0) {\\n      min = plane.normal.x * this.min.x;\\n      max = plane.normal.x * this.max.x;\\n    } else {\\n      min = plane.normal.x * this.max.x;\\n      max = plane.normal.x * this.min.x;\\n    }\\n    if (plane.normal.y > 0) {\\n      min += plane.normal.y * this.min.y;\\n      max += plane.normal.y * this.max.y;\\n    } else {\\n      min += plane.normal.y * this.max.y;\\n      max += plane.normal.y * this.min.y;\\n    }\\n    if (plane.normal.z > 0) {\\n      min += plane.normal.z * this.min.z;\\n      max += plane.normal.z * this.max.z;\\n    } else {\\n      min += plane.normal.z * this.max.z;\\n      max += plane.normal.z * this.min.z;\\n    }\\n    return min <= -plane.constant && max >= -plane.constant;\\n  }\\n  intersectsTriangle(triangle) {\\n    if (this.isEmpty()) {\\n      return false;\\n    }\\n    this.getCenter(_center);\\n    _extents.subVectors(this.max, _center);\\n    _v0.subVectors(triangle.a, _center);\\n    _v13.subVectors(triangle.b, _center);\\n    _v2.subVectors(triangle.c, _center);\\n    _f0.subVectors(_v13, _v0);\\n    _f1.subVectors(_v2, _v13);\\n    _f2.subVectors(_v0, _v2);\\n    let axes = [\\n      0,\\n      -_f0.z,\\n      _f0.y,\\n      0,\\n      -_f1.z,\\n      _f1.y,\\n      0,\\n      -_f2.z,\\n      _f2.y,\\n      _f0.z,\\n      0,\\n      -_f0.x,\\n      _f1.z,\\n      0,\\n      -_f1.x,\\n      _f2.z,\\n      0,\\n      -_f2.x,\\n      -_f0.y,\\n      _f0.x,\\n      0,\\n      -_f1.y,\\n      _f1.x,\\n      0,\\n      -_f2.y,\\n      _f2.x,\\n      0\\n    ];\\n    if (!satForAxes(axes, _v0, _v13, _v2, _extents)) {\\n      return false;\\n    }\\n    axes = [1, 0, 0, 0, 1, 0, 0, 0, 1];\\n    if (!satForAxes(axes, _v0, _v13, _v2, _extents)) {\\n      return false;\\n    }\\n    _triangleNormal.crossVectors(_f0, _f1);\\n    axes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z];\\n    return satForAxes(axes, _v0, _v13, _v2, _extents);\\n  }\\n  clampPoint(point, target) {\\n    return target.copy(point).clamp(this.min, this.max);\\n  }\\n  distanceToPoint(point) {\\n    const clampedPoint = _vector2.copy(point).clamp(this.min, this.max);\\n    return clampedPoint.sub(point).length();\\n  }\\n  getBoundingSphere(target) {\\n    this.getCenter(target.center);\\n    target.radius = this.getSize(_vector2).length() * 0.5;\\n    return target;\\n  }\\n  intersect(box) {\\n    this.min.max(box.min);\\n    this.max.min(box.max);\\n    if (this.isEmpty())\\n      this.makeEmpty();\\n    return this;\\n  }\\n  union(box) {\\n    this.min.min(box.min);\\n    this.max.max(box.max);\\n    return this;\\n  }\\n  applyMatrix4(matrix) {\\n    if (this.isEmpty())\\n      return this;\\n    _points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix);\\n    _points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix);\\n    _points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix);\\n    _points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix);\\n    _points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix);\\n    _points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix);\\n    _points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix);\\n    _points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix);\\n    this.setFromPoints(_points);\\n    return this;\\n  }\\n  translate(offset) {\\n    this.min.add(offset);\\n    this.max.add(offset);\\n    return this;\\n  }\\n  equals(box) {\\n    return box.min.equals(this.min) && box.max.equals(this.max);\\n  }\\n};\\nBox3.prototype.isBox3 = true;\\nvar _points = [\\n  /* @__PURE__ */ new Vector3(),\\n  /* @__PURE__ */ new Vector3(),\\n  /* @__PURE__ */ new Vector3(),\\n  /* @__PURE__ */ new Vector3(),\\n  /* @__PURE__ */ new Vector3(),\\n  /* @__PURE__ */ new Vector3(),\\n  /* @__PURE__ */ new Vector3(),\\n  /* @__PURE__ */ new Vector3()\\n];\\nvar _vector2 = /* @__PURE__ */ new Vector3();\\nvar _box = /* @__PURE__ */ new Box3();\\nvar _v0 = /* @__PURE__ */ new Vector3();\\nvar _v13 = /* @__PURE__ */ new Vector3();\\nvar _v2 = /* @__PURE__ */ new Vector3();\\nvar _f0 = /* @__PURE__ */ new Vector3();\\nvar _f1 = /* @__PURE__ */ new Vector3();\\nvar _f2 = /* @__PURE__ */ new Vector3();\\nvar _center = /* @__PURE__ */ new Vector3();\\nvar _extents = /* @__PURE__ */ new Vector3();\\nvar _triangleNormal = /* @__PURE__ */ new Vector3();\\nvar _testAxis = /* @__PURE__ */ new Vector3();\\nfunction satForAxes(axes, v0, v1, v2, extents) {\\n  for (let i = 0, j = axes.length - 3; i <= j; i += 3) {\\n    _testAxis.fromArray(axes, i);\\n    const r = extents.x * Math.abs(_testAxis.x) + extents.y * Math.abs(_testAxis.y) + extents.z * Math.abs(_testAxis.z);\\n    const p0 = v0.dot(_testAxis);\\n    const p1 = v1.dot(_testAxis);\\n    const p2 = v2.dot(_testAxis);\\n    if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\\n      return false;\\n    }\\n  }\\n  return true;\\n}\\n\\n// ../../../node_modules/three/src/math/Sphere.js\\nvar _box2 = /* @__PURE__ */ new Box3();\\nvar _v14 = /* @__PURE__ */ new Vector3();\\nvar _toFarthestPoint = /* @__PURE__ */ new Vector3();\\nvar _toPoint = /* @__PURE__ */ new Vector3();\\nvar Sphere = class {\\n  constructor(center = new Vector3(), radius = -1) {\\n    this.center = center;\\n    this.radius = radius;\\n  }\\n  set(center, radius) {\\n    this.center.copy(center);\\n    this.radius = radius;\\n    return this;\\n  }\\n  setFromPoints(points2, optionalCenter) {\\n    const center = this.center;\\n    if (optionalCenter !== void 0) {\\n      center.copy(optionalCenter);\\n    } else {\\n      _box2.setFromPoints(points2).getCenter(center);\\n    }\\n    let maxRadiusSq = 0;\\n    for (let i = 0, il = points2.length; i < il; i++) {\\n      maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(points2[i]));\\n    }\\n    this.radius = Math.sqrt(maxRadiusSq);\\n    return this;\\n  }\\n  copy(sphere) {\\n    this.center.copy(sphere.center);\\n    this.radius = sphere.radius;\\n    return this;\\n  }\\n  isEmpty() {\\n    return this.radius < 0;\\n  }\\n  makeEmpty() {\\n    this.center.set(0, 0, 0);\\n    this.radius = -1;\\n    return this;\\n  }\\n  containsPoint(point) {\\n    return point.distanceToSquared(this.center) <= this.radius * this.radius;\\n  }\\n  distanceToPoint(point) {\\n    return point.distanceTo(this.center) - this.radius;\\n  }\\n  intersectsSphere(sphere) {\\n    const radiusSum = this.radius + sphere.radius;\\n    return sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum;\\n  }\\n  intersectsBox(box) {\\n    return box.intersectsSphere(this);\\n  }\\n  intersectsPlane(plane) {\\n    return Math.abs(plane.distanceToPoint(this.center)) <= this.radius;\\n  }\\n  clampPoint(point, target) {\\n    const deltaLengthSq = this.center.distanceToSquared(point);\\n    target.copy(point);\\n    if (deltaLengthSq > this.radius * this.radius) {\\n      target.sub(this.center).normalize();\\n      target.multiplyScalar(this.radius).add(this.center);\\n    }\\n    return target;\\n  }\\n  getBoundingBox(target) {\\n    if (this.isEmpty()) {\\n      target.makeEmpty();\\n      return target;\\n    }\\n    target.set(this.center, this.center);\\n    target.expandByScalar(this.radius);\\n    return target;\\n  }\\n  applyMatrix4(matrix) {\\n    this.center.applyMatrix4(matrix);\\n    this.radius = this.radius * matrix.getMaxScaleOnAxis();\\n    return this;\\n  }\\n  translate(offset) {\\n    this.center.add(offset);\\n    return this;\\n  }\\n  expandByPoint(point) {\\n    _toPoint.subVectors(point, this.center);\\n    const lengthSq = _toPoint.lengthSq();\\n    if (lengthSq > this.radius * this.radius) {\\n      const length = Math.sqrt(lengthSq);\\n      const missingRadiusHalf = (length - this.radius) * 0.5;\\n      this.center.add(_toPoint.multiplyScalar(missingRadiusHalf / length));\\n      this.radius += missingRadiusHalf;\\n    }\\n    return this;\\n  }\\n  union(sphere) {\\n    _toFarthestPoint.subVectors(sphere.center, this.center).normalize().multiplyScalar(sphere.radius);\\n    this.expandByPoint(_v14.copy(sphere.center).add(_toFarthestPoint));\\n    this.expandByPoint(_v14.copy(sphere.center).sub(_toFarthestPoint));\\n    return this;\\n  }\\n  equals(sphere) {\\n    return sphere.center.equals(this.center) && sphere.radius === this.radius;\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n};\\n\\n// ../../../node_modules/three/src/math/Plane.js\\nvar _vector1 = /* @__PURE__ */ new Vector3();\\nvar _vector22 = /* @__PURE__ */ new Vector3();\\nvar _normalMatrix = /* @__PURE__ */ new Matrix3();\\nvar Plane = class {\\n  constructor(normal = new Vector3(1, 0, 0), constant = 0) {\\n    this.normal = normal;\\n    this.constant = constant;\\n  }\\n  set(normal, constant) {\\n    this.normal.copy(normal);\\n    this.constant = constant;\\n    return this;\\n  }\\n  setComponents(x, y, z, w) {\\n    this.normal.set(x, y, z);\\n    this.constant = w;\\n    return this;\\n  }\\n  setFromNormalAndCoplanarPoint(normal, point) {\\n    this.normal.copy(normal);\\n    this.constant = -point.dot(this.normal);\\n    return this;\\n  }\\n  setFromCoplanarPoints(a, b, c) {\\n    const normal = _vector1.subVectors(c, b).cross(_vector22.subVectors(a, b)).normalize();\\n    this.setFromNormalAndCoplanarPoint(normal, a);\\n    return this;\\n  }\\n  copy(plane) {\\n    this.normal.copy(plane.normal);\\n    this.constant = plane.constant;\\n    return this;\\n  }\\n  normalize() {\\n    const inverseNormalLength = 1 / this.normal.length();\\n    this.normal.multiplyScalar(inverseNormalLength);\\n    this.constant *= inverseNormalLength;\\n    return this;\\n  }\\n  negate() {\\n    this.constant *= -1;\\n    this.normal.negate();\\n    return this;\\n  }\\n  distanceToPoint(point) {\\n    return this.normal.dot(point) + this.constant;\\n  }\\n  distanceToSphere(sphere) {\\n    return this.distanceToPoint(sphere.center) - sphere.radius;\\n  }\\n  projectPoint(point, target) {\\n    return target.copy(this.normal).multiplyScalar(-this.distanceToPoint(point)).add(point);\\n  }\\n  intersectLine(line, target) {\\n    const direction = line.delta(_vector1);\\n    const denominator = this.normal.dot(direction);\\n    if (denominator === 0) {\\n      if (this.distanceToPoint(line.start) === 0) {\\n        return target.copy(line.start);\\n      }\\n      return null;\\n    }\\n    const t = -(line.start.dot(this.normal) + this.constant) / denominator;\\n    if (t < 0 || t > 1) {\\n      return null;\\n    }\\n    return target.copy(direction).multiplyScalar(t).add(line.start);\\n  }\\n  intersectsLine(line) {\\n    const startSign = this.distanceToPoint(line.start);\\n    const endSign = this.distanceToPoint(line.end);\\n    return startSign < 0 && endSign > 0 || endSign < 0 && startSign > 0;\\n  }\\n  intersectsBox(box) {\\n    return box.intersectsPlane(this);\\n  }\\n  intersectsSphere(sphere) {\\n    return sphere.intersectsPlane(this);\\n  }\\n  coplanarPoint(target) {\\n    return target.copy(this.normal).multiplyScalar(-this.constant);\\n  }\\n  applyMatrix4(matrix, optionalNormalMatrix) {\\n    const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix);\\n    const referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix);\\n    const normal = this.normal.applyMatrix3(normalMatrix).normalize();\\n    this.constant = -referencePoint.dot(normal);\\n    return this;\\n  }\\n  translate(offset) {\\n    this.constant -= offset.dot(this.normal);\\n    return this;\\n  }\\n  equals(plane) {\\n    return plane.normal.equals(this.normal) && plane.constant === this.constant;\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n};\\nPlane.prototype.isPlane = true;\\n\\n// ../../../node_modules/three/src/math/Frustum.js\\nvar _sphere = /* @__PURE__ */ new Sphere();\\nvar _vector3 = /* @__PURE__ */ new Vector3();\\nvar Frustum = class {\\n  constructor(p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane()) {\\n    this.planes = [p0, p1, p2, p3, p4, p5];\\n  }\\n  set(p0, p1, p2, p3, p4, p5) {\\n    const planes = this.planes;\\n    planes[0].copy(p0);\\n    planes[1].copy(p1);\\n    planes[2].copy(p2);\\n    planes[3].copy(p3);\\n    planes[4].copy(p4);\\n    planes[5].copy(p5);\\n    return this;\\n  }\\n  copy(frustum) {\\n    const planes = this.planes;\\n    for (let i = 0; i < 6; i++) {\\n      planes[i].copy(frustum.planes[i]);\\n    }\\n    return this;\\n  }\\n  setFromProjectionMatrix(m) {\\n    const planes = this.planes;\\n    const me = m.elements;\\n    const me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];\\n    const me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];\\n    const me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];\\n    const me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];\\n    planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize();\\n    planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize();\\n    planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize();\\n    planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize();\\n    planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize();\\n    planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize();\\n    return this;\\n  }\\n  intersectsObject(object) {\\n    const geometry = object.geometry;\\n    if (geometry.boundingSphere === null)\\n      geometry.computeBoundingSphere();\\n    _sphere.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld);\\n    return this.intersectsSphere(_sphere);\\n  }\\n  intersectsSprite(sprite2) {\\n    _sphere.center.set(0, 0, 0);\\n    _sphere.radius = 0.7071067811865476;\\n    _sphere.applyMatrix4(sprite2.matrixWorld);\\n    return this.intersectsSphere(_sphere);\\n  }\\n  intersectsSphere(sphere) {\\n    const planes = this.planes;\\n    const center = sphere.center;\\n    const negRadius = -sphere.radius;\\n    for (let i = 0; i < 6; i++) {\\n      const distance = planes[i].distanceToPoint(center);\\n      if (distance < negRadius) {\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n  intersectsBox(box) {\\n    const planes = this.planes;\\n    for (let i = 0; i < 6; i++) {\\n      const plane = planes[i];\\n      _vector3.x = plane.normal.x > 0 ? box.max.x : box.min.x;\\n      _vector3.y = plane.normal.y > 0 ? box.max.y : box.min.y;\\n      _vector3.z = plane.normal.z > 0 ? box.max.z : box.min.z;\\n      if (plane.distanceToPoint(_vector3) < 0) {\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n  containsPoint(point) {\\n    const planes = this.planes;\\n    for (let i = 0; i < 6; i++) {\\n      if (planes[i].distanceToPoint(point) < 0) {\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n};\\n\\n// ../../../node_modules/three/src/math/Vector4.js\\nvar Vector4 = class {\\n  constructor(x = 0, y = 0, z = 0, w = 1) {\\n    this.x = x;\\n    this.y = y;\\n    this.z = z;\\n    this.w = w;\\n  }\\n  get width() {\\n    return this.z;\\n  }\\n  set width(value) {\\n    this.z = value;\\n  }\\n  get height() {\\n    return this.w;\\n  }\\n  set height(value) {\\n    this.w = value;\\n  }\\n  set(x, y, z, w) {\\n    this.x = x;\\n    this.y = y;\\n    this.z = z;\\n    this.w = w;\\n    return this;\\n  }\\n  setScalar(scalar) {\\n    this.x = scalar;\\n    this.y = scalar;\\n    this.z = scalar;\\n    this.w = scalar;\\n    return this;\\n  }\\n  setX(x) {\\n    this.x = x;\\n    return this;\\n  }\\n  setY(y) {\\n    this.y = y;\\n    return this;\\n  }\\n  setZ(z) {\\n    this.z = z;\\n    return this;\\n  }\\n  setW(w) {\\n    this.w = w;\\n    return this;\\n  }\\n  setComponent(index, value) {\\n    switch (index) {\\n      case 0:\\n        this.x = value;\\n        break;\\n      case 1:\\n        this.y = value;\\n        break;\\n      case 2:\\n        this.z = value;\\n        break;\\n      case 3:\\n        this.w = value;\\n        break;\\n      default:\\n        throw new Error(\\\\\\\"index is out of range: \\\\\\\" + index);\\n    }\\n    return this;\\n  }\\n  getComponent(index) {\\n    switch (index) {\\n      case 0:\\n        return this.x;\\n      case 1:\\n        return this.y;\\n      case 2:\\n        return this.z;\\n      case 3:\\n        return this.w;\\n      default:\\n        throw new Error(\\\\\\\"index is out of range: \\\\\\\" + index);\\n    }\\n  }\\n  clone() {\\n    return new this.constructor(this.x, this.y, this.z, this.w);\\n  }\\n  copy(v) {\\n    this.x = v.x;\\n    this.y = v.y;\\n    this.z = v.z;\\n    this.w = v.w !== void 0 ? v.w : 1;\\n    return this;\\n  }\\n  add(v, w) {\\n    if (w !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\");\\n      return this.addVectors(v, w);\\n    }\\n    this.x += v.x;\\n    this.y += v.y;\\n    this.z += v.z;\\n    this.w += v.w;\\n    return this;\\n  }\\n  addScalar(s) {\\n    this.x += s;\\n    this.y += s;\\n    this.z += s;\\n    this.w += s;\\n    return this;\\n  }\\n  addVectors(a, b) {\\n    this.x = a.x + b.x;\\n    this.y = a.y + b.y;\\n    this.z = a.z + b.z;\\n    this.w = a.w + b.w;\\n    return this;\\n  }\\n  addScaledVector(v, s) {\\n    this.x += v.x * s;\\n    this.y += v.y * s;\\n    this.z += v.z * s;\\n    this.w += v.w * s;\\n    return this;\\n  }\\n  sub(v, w) {\\n    if (w !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\");\\n      return this.subVectors(v, w);\\n    }\\n    this.x -= v.x;\\n    this.y -= v.y;\\n    this.z -= v.z;\\n    this.w -= v.w;\\n    return this;\\n  }\\n  subScalar(s) {\\n    this.x -= s;\\n    this.y -= s;\\n    this.z -= s;\\n    this.w -= s;\\n    return this;\\n  }\\n  subVectors(a, b) {\\n    this.x = a.x - b.x;\\n    this.y = a.y - b.y;\\n    this.z = a.z - b.z;\\n    this.w = a.w - b.w;\\n    return this;\\n  }\\n  multiply(v) {\\n    this.x *= v.x;\\n    this.y *= v.y;\\n    this.z *= v.z;\\n    this.w *= v.w;\\n    return this;\\n  }\\n  multiplyScalar(scalar) {\\n    this.x *= scalar;\\n    this.y *= scalar;\\n    this.z *= scalar;\\n    this.w *= scalar;\\n    return this;\\n  }\\n  applyMatrix4(m) {\\n    const x = this.x, y = this.y, z = this.z, w = this.w;\\n    const e = m.elements;\\n    this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;\\n    this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;\\n    this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;\\n    this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;\\n    return this;\\n  }\\n  divideScalar(scalar) {\\n    return this.multiplyScalar(1 / scalar);\\n  }\\n  setAxisAngleFromQuaternion(q) {\\n    this.w = 2 * Math.acos(q.w);\\n    const s = Math.sqrt(1 - q.w * q.w);\\n    if (s < 1e-4) {\\n      this.x = 1;\\n      this.y = 0;\\n      this.z = 0;\\n    } else {\\n      this.x = q.x / s;\\n      this.y = q.y / s;\\n      this.z = q.z / s;\\n    }\\n    return this;\\n  }\\n  setAxisAngleFromRotationMatrix(m) {\\n    let angle, x, y, z;\\n    const epsilon = 0.01, epsilon2 = 0.1, te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10];\\n    if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) {\\n      if (Math.abs(m12 + m21) < epsilon2 && Math.abs(m13 + m31) < epsilon2 && Math.abs(m23 + m32) < epsilon2 && Math.abs(m11 + m22 + m33 - 3) < epsilon2) {\\n        this.set(1, 0, 0, 0);\\n        return this;\\n      }\\n      angle = Math.PI;\\n      const xx = (m11 + 1) / 2;\\n      const yy = (m22 + 1) / 2;\\n      const zz = (m33 + 1) / 2;\\n      const xy = (m12 + m21) / 4;\\n      const xz = (m13 + m31) / 4;\\n      const yz = (m23 + m32) / 4;\\n      if (xx > yy && xx > zz) {\\n        if (xx < epsilon) {\\n          x = 0;\\n          y = 0.707106781;\\n          z = 0.707106781;\\n        } else {\\n          x = Math.sqrt(xx);\\n          y = xy / x;\\n          z = xz / x;\\n        }\\n      } else if (yy > zz) {\\n        if (yy < epsilon) {\\n          x = 0.707106781;\\n          y = 0;\\n          z = 0.707106781;\\n        } else {\\n          y = Math.sqrt(yy);\\n          x = xy / y;\\n          z = yz / y;\\n        }\\n      } else {\\n        if (zz < epsilon) {\\n          x = 0.707106781;\\n          y = 0.707106781;\\n          z = 0;\\n        } else {\\n          z = Math.sqrt(zz);\\n          x = xz / z;\\n          y = yz / z;\\n        }\\n      }\\n      this.set(x, y, z, angle);\\n      return this;\\n    }\\n    let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12));\\n    if (Math.abs(s) < 1e-3)\\n      s = 1;\\n    this.x = (m32 - m23) / s;\\n    this.y = (m13 - m31) / s;\\n    this.z = (m21 - m12) / s;\\n    this.w = Math.acos((m11 + m22 + m33 - 1) / 2);\\n    return this;\\n  }\\n  min(v) {\\n    this.x = Math.min(this.x, v.x);\\n    this.y = Math.min(this.y, v.y);\\n    this.z = Math.min(this.z, v.z);\\n    this.w = Math.min(this.w, v.w);\\n    return this;\\n  }\\n  max(v) {\\n    this.x = Math.max(this.x, v.x);\\n    this.y = Math.max(this.y, v.y);\\n    this.z = Math.max(this.z, v.z);\\n    this.w = Math.max(this.w, v.w);\\n    return this;\\n  }\\n  clamp(min, max) {\\n    this.x = Math.max(min.x, Math.min(max.x, this.x));\\n    this.y = Math.max(min.y, Math.min(max.y, this.y));\\n    this.z = Math.max(min.z, Math.min(max.z, this.z));\\n    this.w = Math.max(min.w, Math.min(max.w, this.w));\\n    return this;\\n  }\\n  clampScalar(minVal, maxVal) {\\n    this.x = Math.max(minVal, Math.min(maxVal, this.x));\\n    this.y = Math.max(minVal, Math.min(maxVal, this.y));\\n    this.z = Math.max(minVal, Math.min(maxVal, this.z));\\n    this.w = Math.max(minVal, Math.min(maxVal, this.w));\\n    return this;\\n  }\\n  clampLength(min, max) {\\n    const length = this.length();\\n    return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\\n  }\\n  floor() {\\n    this.x = Math.floor(this.x);\\n    this.y = Math.floor(this.y);\\n    this.z = Math.floor(this.z);\\n    this.w = Math.floor(this.w);\\n    return this;\\n  }\\n  ceil() {\\n    this.x = Math.ceil(this.x);\\n    this.y = Math.ceil(this.y);\\n    this.z = Math.ceil(this.z);\\n    this.w = Math.ceil(this.w);\\n    return this;\\n  }\\n  round() {\\n    this.x = Math.round(this.x);\\n    this.y = Math.round(this.y);\\n    this.z = Math.round(this.z);\\n    this.w = Math.round(this.w);\\n    return this;\\n  }\\n  roundToZero() {\\n    this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\\n    this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\\n    this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);\\n    this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w);\\n    return this;\\n  }\\n  negate() {\\n    this.x = -this.x;\\n    this.y = -this.y;\\n    this.z = -this.z;\\n    this.w = -this.w;\\n    return this;\\n  }\\n  dot(v) {\\n    return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\\n  }\\n  lengthSq() {\\n    return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\\n  }\\n  length() {\\n    return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\\n  }\\n  manhattanLength() {\\n    return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w);\\n  }\\n  normalize() {\\n    return this.divideScalar(this.length() || 1);\\n  }\\n  setLength(length) {\\n    return this.normalize().multiplyScalar(length);\\n  }\\n  lerp(v, alpha) {\\n    this.x += (v.x - this.x) * alpha;\\n    this.y += (v.y - this.y) * alpha;\\n    this.z += (v.z - this.z) * alpha;\\n    this.w += (v.w - this.w) * alpha;\\n    return this;\\n  }\\n  lerpVectors(v1, v2, alpha) {\\n    this.x = v1.x + (v2.x - v1.x) * alpha;\\n    this.y = v1.y + (v2.y - v1.y) * alpha;\\n    this.z = v1.z + (v2.z - v1.z) * alpha;\\n    this.w = v1.w + (v2.w - v1.w) * alpha;\\n    return this;\\n  }\\n  equals(v) {\\n    return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w;\\n  }\\n  fromArray(array, offset = 0) {\\n    this.x = array[offset];\\n    this.y = array[offset + 1];\\n    this.z = array[offset + 2];\\n    this.w = array[offset + 3];\\n    return this;\\n  }\\n  toArray(array = [], offset = 0) {\\n    array[offset] = this.x;\\n    array[offset + 1] = this.y;\\n    array[offset + 2] = this.z;\\n    array[offset + 3] = this.w;\\n    return array;\\n  }\\n  fromBufferAttribute(attribute, index, offset) {\\n    if (offset !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\\\\\\\");\\n    }\\n    this.x = attribute.getX(index);\\n    this.y = attribute.getY(index);\\n    this.z = attribute.getZ(index);\\n    this.w = attribute.getW(index);\\n    return this;\\n  }\\n  random() {\\n    this.x = Math.random();\\n    this.y = Math.random();\\n    this.z = Math.random();\\n    this.w = Math.random();\\n    return this;\\n  }\\n  *[Symbol.iterator]() {\\n    yield this.x;\\n    yield this.y;\\n    yield this.z;\\n    yield this.w;\\n  }\\n};\\nVector4.prototype.isVector4 = true;\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLAnimation.js\\nfunction WebGLAnimation() {\\n  let context = null;\\n  let isAnimating = false;\\n  let animationLoop = null;\\n  let requestId = null;\\n  function onAnimationFrame(time, frame) {\\n    animationLoop(time, frame);\\n    requestId = context.requestAnimationFrame(onAnimationFrame);\\n  }\\n  return {\\n    start: function() {\\n      if (isAnimating === true)\\n        return;\\n      if (animationLoop === null)\\n        return;\\n      requestId = context.requestAnimationFrame(onAnimationFrame);\\n      isAnimating = true;\\n    },\\n    stop: function() {\\n      context.cancelAnimationFrame(requestId);\\n      isAnimating = false;\\n    },\\n    setAnimationLoop: function(callback) {\\n      animationLoop = callback;\\n    },\\n    setContext: function(value) {\\n      context = value;\\n    }\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLAttributes.js\\nfunction WebGLAttributes(gl, capabilities) {\\n  const isWebGL2 = capabilities.isWebGL2;\\n  const buffers = new WeakMap();\\n  function createBuffer(attribute, bufferType) {\\n    const array = attribute.array;\\n    const usage = attribute.usage;\\n    const buffer = gl.createBuffer();\\n    gl.bindBuffer(bufferType, buffer);\\n    gl.bufferData(bufferType, array, usage);\\n    attribute.onUploadCallback();\\n    let type = gl.FLOAT;\\n    if (array instanceof Float32Array) {\\n      type = gl.FLOAT;\\n    } else if (array instanceof Float64Array) {\\n      console.warn(\\\\\\\"THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.\\\\\\\");\\n    } else if (array instanceof Uint16Array) {\\n      if (attribute.isFloat16BufferAttribute) {\\n        if (isWebGL2) {\\n          type = gl.HALF_FLOAT;\\n        } else {\\n          console.warn(\\\\\\\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\\\\\\\");\\n        }\\n      } else {\\n        type = gl.UNSIGNED_SHORT;\\n      }\\n    } else if (array instanceof Int16Array) {\\n      type = gl.SHORT;\\n    } else if (array instanceof Uint32Array) {\\n      type = gl.UNSIGNED_INT;\\n    } else if (array instanceof Int32Array) {\\n      type = gl.INT;\\n    } else if (array instanceof Int8Array) {\\n      type = gl.BYTE;\\n    } else if (array instanceof Uint8Array) {\\n      type = gl.UNSIGNED_BYTE;\\n    } else if (array instanceof Uint8ClampedArray) {\\n      type = gl.UNSIGNED_BYTE;\\n    }\\n    return {\\n      buffer,\\n      type,\\n      bytesPerElement: array.BYTES_PER_ELEMENT,\\n      version: attribute.version\\n    };\\n  }\\n  function updateBuffer(buffer, attribute, bufferType) {\\n    const array = attribute.array;\\n    const updateRange = attribute.updateRange;\\n    gl.bindBuffer(bufferType, buffer);\\n    if (updateRange.count === -1) {\\n      gl.bufferSubData(bufferType, 0, array);\\n    } else {\\n      if (isWebGL2) {\\n        gl.bufferSubData(bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array, updateRange.offset, updateRange.count);\\n      } else {\\n        gl.bufferSubData(bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array.subarray(updateRange.offset, updateRange.offset + updateRange.count));\\n      }\\n      updateRange.count = -1;\\n    }\\n  }\\n  function get(attribute) {\\n    if (attribute.isInterleavedBufferAttribute)\\n      attribute = attribute.data;\\n    return buffers.get(attribute);\\n  }\\n  function remove(attribute) {\\n    if (attribute.isInterleavedBufferAttribute)\\n      attribute = attribute.data;\\n    const data = buffers.get(attribute);\\n    if (data) {\\n      gl.deleteBuffer(data.buffer);\\n      buffers.delete(attribute);\\n    }\\n  }\\n  function update(attribute, bufferType) {\\n    if (attribute.isGLBufferAttribute) {\\n      const cached = buffers.get(attribute);\\n      if (!cached || cached.version < attribute.version) {\\n        buffers.set(attribute, {\\n          buffer: attribute.buffer,\\n          type: attribute.type,\\n          bytesPerElement: attribute.elementSize,\\n          version: attribute.version\\n        });\\n      }\\n      return;\\n    }\\n    if (attribute.isInterleavedBufferAttribute)\\n      attribute = attribute.data;\\n    const data = buffers.get(attribute);\\n    if (data === void 0) {\\n      buffers.set(attribute, createBuffer(attribute, bufferType));\\n    } else if (data.version < attribute.version) {\\n      updateBuffer(data.buffer, attribute, bufferType);\\n      data.version = attribute.version;\\n    }\\n  }\\n  return {\\n    get,\\n    remove,\\n    update\\n  };\\n}\\n\\n// ../../../node_modules/three/src/math/Vector2.js\\nvar Vector2 = class {\\n  constructor(x = 0, y = 0) {\\n    this.x = x;\\n    this.y = y;\\n  }\\n  get width() {\\n    return this.x;\\n  }\\n  set width(value) {\\n    this.x = value;\\n  }\\n  get height() {\\n    return this.y;\\n  }\\n  set height(value) {\\n    this.y = value;\\n  }\\n  set(x, y) {\\n    this.x = x;\\n    this.y = y;\\n    return this;\\n  }\\n  setScalar(scalar) {\\n    this.x = scalar;\\n    this.y = scalar;\\n    return this;\\n  }\\n  setX(x) {\\n    this.x = x;\\n    return this;\\n  }\\n  setY(y) {\\n    this.y = y;\\n    return this;\\n  }\\n  setComponent(index, value) {\\n    switch (index) {\\n      case 0:\\n        this.x = value;\\n        break;\\n      case 1:\\n        this.y = value;\\n        break;\\n      default:\\n        throw new Error(\\\\\\\"index is out of range: \\\\\\\" + index);\\n    }\\n    return this;\\n  }\\n  getComponent(index) {\\n    switch (index) {\\n      case 0:\\n        return this.x;\\n      case 1:\\n        return this.y;\\n      default:\\n        throw new Error(\\\\\\\"index is out of range: \\\\\\\" + index);\\n    }\\n  }\\n  clone() {\\n    return new this.constructor(this.x, this.y);\\n  }\\n  copy(v) {\\n    this.x = v.x;\\n    this.y = v.y;\\n    return this;\\n  }\\n  add(v, w) {\\n    if (w !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\");\\n      return this.addVectors(v, w);\\n    }\\n    this.x += v.x;\\n    this.y += v.y;\\n    return this;\\n  }\\n  addScalar(s) {\\n    this.x += s;\\n    this.y += s;\\n    return this;\\n  }\\n  addVectors(a, b) {\\n    this.x = a.x + b.x;\\n    this.y = a.y + b.y;\\n    return this;\\n  }\\n  addScaledVector(v, s) {\\n    this.x += v.x * s;\\n    this.y += v.y * s;\\n    return this;\\n  }\\n  sub(v, w) {\\n    if (w !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\");\\n      return this.subVectors(v, w);\\n    }\\n    this.x -= v.x;\\n    this.y -= v.y;\\n    return this;\\n  }\\n  subScalar(s) {\\n    this.x -= s;\\n    this.y -= s;\\n    return this;\\n  }\\n  subVectors(a, b) {\\n    this.x = a.x - b.x;\\n    this.y = a.y - b.y;\\n    return this;\\n  }\\n  multiply(v) {\\n    this.x *= v.x;\\n    this.y *= v.y;\\n    return this;\\n  }\\n  multiplyScalar(scalar) {\\n    this.x *= scalar;\\n    this.y *= scalar;\\n    return this;\\n  }\\n  divide(v) {\\n    this.x /= v.x;\\n    this.y /= v.y;\\n    return this;\\n  }\\n  divideScalar(scalar) {\\n    return this.multiplyScalar(1 / scalar);\\n  }\\n  applyMatrix3(m) {\\n    const x = this.x, y = this.y;\\n    const e = m.elements;\\n    this.x = e[0] * x + e[3] * y + e[6];\\n    this.y = e[1] * x + e[4] * y + e[7];\\n    return this;\\n  }\\n  min(v) {\\n    this.x = Math.min(this.x, v.x);\\n    this.y = Math.min(this.y, v.y);\\n    return this;\\n  }\\n  max(v) {\\n    this.x = Math.max(this.x, v.x);\\n    this.y = Math.max(this.y, v.y);\\n    return this;\\n  }\\n  clamp(min, max) {\\n    this.x = Math.max(min.x, Math.min(max.x, this.x));\\n    this.y = Math.max(min.y, Math.min(max.y, this.y));\\n    return this;\\n  }\\n  clampScalar(minVal, maxVal) {\\n    this.x = Math.max(minVal, Math.min(maxVal, this.x));\\n    this.y = Math.max(minVal, Math.min(maxVal, this.y));\\n    return this;\\n  }\\n  clampLength(min, max) {\\n    const length = this.length();\\n    return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\\n  }\\n  floor() {\\n    this.x = Math.floor(this.x);\\n    this.y = Math.floor(this.y);\\n    return this;\\n  }\\n  ceil() {\\n    this.x = Math.ceil(this.x);\\n    this.y = Math.ceil(this.y);\\n    return this;\\n  }\\n  round() {\\n    this.x = Math.round(this.x);\\n    this.y = Math.round(this.y);\\n    return this;\\n  }\\n  roundToZero() {\\n    this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\\n    this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\\n    return this;\\n  }\\n  negate() {\\n    this.x = -this.x;\\n    this.y = -this.y;\\n    return this;\\n  }\\n  dot(v) {\\n    return this.x * v.x + this.y * v.y;\\n  }\\n  cross(v) {\\n    return this.x * v.y - this.y * v.x;\\n  }\\n  lengthSq() {\\n    return this.x * this.x + this.y * this.y;\\n  }\\n  length() {\\n    return Math.sqrt(this.x * this.x + this.y * this.y);\\n  }\\n  manhattanLength() {\\n    return Math.abs(this.x) + Math.abs(this.y);\\n  }\\n  normalize() {\\n    return this.divideScalar(this.length() || 1);\\n  }\\n  angle() {\\n    const angle = Math.atan2(-this.y, -this.x) + Math.PI;\\n    return angle;\\n  }\\n  distanceTo(v) {\\n    return Math.sqrt(this.distanceToSquared(v));\\n  }\\n  distanceToSquared(v) {\\n    const dx = this.x - v.x, dy = this.y - v.y;\\n    return dx * dx + dy * dy;\\n  }\\n  manhattanDistanceTo(v) {\\n    return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\\n  }\\n  setLength(length) {\\n    return this.normalize().multiplyScalar(length);\\n  }\\n  lerp(v, alpha) {\\n    this.x += (v.x - this.x) * alpha;\\n    this.y += (v.y - this.y) * alpha;\\n    return this;\\n  }\\n  lerpVectors(v1, v2, alpha) {\\n    this.x = v1.x + (v2.x - v1.x) * alpha;\\n    this.y = v1.y + (v2.y - v1.y) * alpha;\\n    return this;\\n  }\\n  equals(v) {\\n    return v.x === this.x && v.y === this.y;\\n  }\\n  fromArray(array, offset = 0) {\\n    this.x = array[offset];\\n    this.y = array[offset + 1];\\n    return this;\\n  }\\n  toArray(array = [], offset = 0) {\\n    array[offset] = this.x;\\n    array[offset + 1] = this.y;\\n    return array;\\n  }\\n  fromBufferAttribute(attribute, index, offset) {\\n    if (offset !== void 0) {\\n      console.warn(\\\\\\\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\\\\\\\");\\n    }\\n    this.x = attribute.getX(index);\\n    this.y = attribute.getY(index);\\n    return this;\\n  }\\n  rotateAround(center, angle) {\\n    const c = Math.cos(angle), s = Math.sin(angle);\\n    const x = this.x - center.x;\\n    const y = this.y - center.y;\\n    this.x = x * c - y * s + center.x;\\n    this.y = x * s + y * c + center.y;\\n    return this;\\n  }\\n  random() {\\n    this.x = Math.random();\\n    this.y = Math.random();\\n    return this;\\n  }\\n  *[Symbol.iterator]() {\\n    yield this.x;\\n    yield this.y;\\n  }\\n};\\nVector2.prototype.isVector2 = true;\\n\\n// ../../../node_modules/three/src/math/Color.js\\nvar _colorKeywords = {\\n  aliceblue: 15792383,\\n  antiquewhite: 16444375,\\n  aqua: 65535,\\n  aquamarine: 8388564,\\n  azure: 15794175,\\n  beige: 16119260,\\n  bisque: 16770244,\\n  black: 0,\\n  blanchedalmond: 16772045,\\n  blue: 255,\\n  blueviolet: 9055202,\\n  brown: 10824234,\\n  burlywood: 14596231,\\n  cadetblue: 6266528,\\n  chartreuse: 8388352,\\n  chocolate: 13789470,\\n  coral: 16744272,\\n  cornflowerblue: 6591981,\\n  cornsilk: 16775388,\\n  crimson: 14423100,\\n  cyan: 65535,\\n  darkblue: 139,\\n  darkcyan: 35723,\\n  darkgoldenrod: 12092939,\\n  darkgray: 11119017,\\n  darkgreen: 25600,\\n  darkgrey: 11119017,\\n  darkkhaki: 12433259,\\n  darkmagenta: 9109643,\\n  darkolivegreen: 5597999,\\n  darkorange: 16747520,\\n  darkorchid: 10040012,\\n  darkred: 9109504,\\n  darksalmon: 15308410,\\n  darkseagreen: 9419919,\\n  darkslateblue: 4734347,\\n  darkslategray: 3100495,\\n  darkslategrey: 3100495,\\n  darkturquoise: 52945,\\n  darkviolet: 9699539,\\n  deeppink: 16716947,\\n  deepskyblue: 49151,\\n  dimgray: 6908265,\\n  dimgrey: 6908265,\\n  dodgerblue: 2003199,\\n  firebrick: 11674146,\\n  floralwhite: 16775920,\\n  forestgreen: 2263842,\\n  fuchsia: 16711935,\\n  gainsboro: 14474460,\\n  ghostwhite: 16316671,\\n  gold: 16766720,\\n  goldenrod: 14329120,\\n  gray: 8421504,\\n  green: 32768,\\n  greenyellow: 11403055,\\n  grey: 8421504,\\n  honeydew: 15794160,\\n  hotpink: 16738740,\\n  indianred: 13458524,\\n  indigo: 4915330,\\n  ivory: 16777200,\\n  khaki: 15787660,\\n  lavender: 15132410,\\n  lavenderblush: 16773365,\\n  lawngreen: 8190976,\\n  lemonchiffon: 16775885,\\n  lightblue: 11393254,\\n  lightcoral: 15761536,\\n  lightcyan: 14745599,\\n  lightgoldenrodyellow: 16448210,\\n  lightgray: 13882323,\\n  lightgreen: 9498256,\\n  lightgrey: 13882323,\\n  lightpink: 16758465,\\n  lightsalmon: 16752762,\\n  lightseagreen: 2142890,\\n  lightskyblue: 8900346,\\n  lightslategray: 7833753,\\n  lightslategrey: 7833753,\\n  lightsteelblue: 11584734,\\n  lightyellow: 16777184,\\n  lime: 65280,\\n  limegreen: 3329330,\\n  linen: 16445670,\\n  magenta: 16711935,\\n  maroon: 8388608,\\n  mediumaquamarine: 6737322,\\n  mediumblue: 205,\\n  mediumorchid: 12211667,\\n  mediumpurple: 9662683,\\n  mediumseagreen: 3978097,\\n  mediumslateblue: 8087790,\\n  mediumspringgreen: 64154,\\n  mediumturquoise: 4772300,\\n  mediumvioletred: 13047173,\\n  midnightblue: 1644912,\\n  mintcream: 16121850,\\n  mistyrose: 16770273,\\n  moccasin: 16770229,\\n  navajowhite: 16768685,\\n  navy: 128,\\n  oldlace: 16643558,\\n  olive: 8421376,\\n  olivedrab: 7048739,\\n  orange: 16753920,\\n  orangered: 16729344,\\n  orchid: 14315734,\\n  palegoldenrod: 15657130,\\n  palegreen: 10025880,\\n  paleturquoise: 11529966,\\n  palevioletred: 14381203,\\n  papayawhip: 16773077,\\n  peachpuff: 16767673,\\n  peru: 13468991,\\n  pink: 16761035,\\n  plum: 14524637,\\n  powderblue: 11591910,\\n  purple: 8388736,\\n  rebeccapurple: 6697881,\\n  red: 16711680,\\n  rosybrown: 12357519,\\n  royalblue: 4286945,\\n  saddlebrown: 9127187,\\n  salmon: 16416882,\\n  sandybrown: 16032864,\\n  seagreen: 3050327,\\n  seashell: 16774638,\\n  sienna: 10506797,\\n  silver: 12632256,\\n  skyblue: 8900331,\\n  slateblue: 6970061,\\n  slategray: 7372944,\\n  slategrey: 7372944,\\n  snow: 16775930,\\n  springgreen: 65407,\\n  steelblue: 4620980,\\n  tan: 13808780,\\n  teal: 32896,\\n  thistle: 14204888,\\n  tomato: 16737095,\\n  turquoise: 4251856,\\n  violet: 15631086,\\n  wheat: 16113331,\\n  white: 16777215,\\n  whitesmoke: 16119285,\\n  yellow: 16776960,\\n  yellowgreen: 10145074\\n};\\nvar _hslA = {h: 0, s: 0, l: 0};\\nvar _hslB = {h: 0, s: 0, l: 0};\\nfunction hue2rgb(p, q, t) {\\n  if (t < 0)\\n    t += 1;\\n  if (t > 1)\\n    t -= 1;\\n  if (t < 1 / 6)\\n    return p + (q - p) * 6 * t;\\n  if (t < 1 / 2)\\n    return q;\\n  if (t < 2 / 3)\\n    return p + (q - p) * 6 * (2 / 3 - t);\\n  return p;\\n}\\nfunction SRGBToLinear(c) {\\n  return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\\n}\\nfunction LinearToSRGB(c) {\\n  return c < 31308e-7 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\\n}\\nvar Color = class {\\n  constructor(r, g, b) {\\n    if (g === void 0 && b === void 0) {\\n      return this.set(r);\\n    }\\n    return this.setRGB(r, g, b);\\n  }\\n  set(value) {\\n    if (value && value.isColor) {\\n      this.copy(value);\\n    } else if (typeof value === \\\\\\\"number\\\\\\\") {\\n      this.setHex(value);\\n    } else if (typeof value === \\\\\\\"string\\\\\\\") {\\n      this.setStyle(value);\\n    }\\n    return this;\\n  }\\n  setScalar(scalar) {\\n    this.r = scalar;\\n    this.g = scalar;\\n    this.b = scalar;\\n    return this;\\n  }\\n  setHex(hex) {\\n    hex = Math.floor(hex);\\n    this.r = (hex >> 16 & 255) / 255;\\n    this.g = (hex >> 8 & 255) / 255;\\n    this.b = (hex & 255) / 255;\\n    return this;\\n  }\\n  setRGB(r, g, b) {\\n    this.r = r;\\n    this.g = g;\\n    this.b = b;\\n    return this;\\n  }\\n  setHSL(h, s, l) {\\n    h = euclideanModulo(h, 1);\\n    s = clamp(s, 0, 1);\\n    l = clamp(l, 0, 1);\\n    if (s === 0) {\\n      this.r = this.g = this.b = l;\\n    } else {\\n      const p = l <= 0.5 ? l * (1 + s) : l + s - l * s;\\n      const q = 2 * l - p;\\n      this.r = hue2rgb(q, p, h + 1 / 3);\\n      this.g = hue2rgb(q, p, h);\\n      this.b = hue2rgb(q, p, h - 1 / 3);\\n    }\\n    return this;\\n  }\\n  setStyle(style) {\\n    function handleAlpha(string) {\\n      if (string === void 0)\\n        return;\\n      if (parseFloat(string) < 1) {\\n        console.warn(\\\\\\\"THREE.Color: Alpha component of \\\\\\\" + style + \\\\\\\" will be ignored.\\\\\\\");\\n      }\\n    }\\n    let m;\\n    if (m = /^((?:rgb|hsl)a?)\\\\(([^\\\\)]*)\\\\)/.exec(style)) {\\n      let color;\\n      const name = m[1];\\n      const components = m[2];\\n      switch (name) {\\n        case \\\\\\\"rgb\\\\\\\":\\n        case \\\\\\\"rgba\\\\\\\":\\n          if (color = /^\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(components)) {\\n            this.r = Math.min(255, parseInt(color[1], 10)) / 255;\\n            this.g = Math.min(255, parseInt(color[2], 10)) / 255;\\n            this.b = Math.min(255, parseInt(color[3], 10)) / 255;\\n            handleAlpha(color[4]);\\n            return this;\\n          }\\n          if (color = /^\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(components)) {\\n            this.r = Math.min(100, parseInt(color[1], 10)) / 100;\\n            this.g = Math.min(100, parseInt(color[2], 10)) / 100;\\n            this.b = Math.min(100, parseInt(color[3], 10)) / 100;\\n            handleAlpha(color[4]);\\n            return this;\\n          }\\n          break;\\n        case \\\\\\\"hsl\\\\\\\":\\n        case \\\\\\\"hsla\\\\\\\":\\n          if (color = /^\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(components)) {\\n            const h = parseFloat(color[1]) / 360;\\n            const s = parseInt(color[2], 10) / 100;\\n            const l = parseInt(color[3], 10) / 100;\\n            handleAlpha(color[4]);\\n            return this.setHSL(h, s, l);\\n          }\\n          break;\\n      }\\n    } else if (m = /^\\\\#([A-Fa-f\\\\d]+)$/.exec(style)) {\\n      const hex = m[1];\\n      const size = hex.length;\\n      if (size === 3) {\\n        this.r = parseInt(hex.charAt(0) + hex.charAt(0), 16) / 255;\\n        this.g = parseInt(hex.charAt(1) + hex.charAt(1), 16) / 255;\\n        this.b = parseInt(hex.charAt(2) + hex.charAt(2), 16) / 255;\\n        return this;\\n      } else if (size === 6) {\\n        this.r = parseInt(hex.charAt(0) + hex.charAt(1), 16) / 255;\\n        this.g = parseInt(hex.charAt(2) + hex.charAt(3), 16) / 255;\\n        this.b = parseInt(hex.charAt(4) + hex.charAt(5), 16) / 255;\\n        return this;\\n      }\\n    }\\n    if (style && style.length > 0) {\\n      return this.setColorName(style);\\n    }\\n    return this;\\n  }\\n  setColorName(style) {\\n    const hex = _colorKeywords[style.toLowerCase()];\\n    if (hex !== void 0) {\\n      this.setHex(hex);\\n    } else {\\n      console.warn(\\\\\\\"THREE.Color: Unknown color \\\\\\\" + style);\\n    }\\n    return this;\\n  }\\n  clone() {\\n    return new this.constructor(this.r, this.g, this.b);\\n  }\\n  copy(color) {\\n    this.r = color.r;\\n    this.g = color.g;\\n    this.b = color.b;\\n    return this;\\n  }\\n  copyGammaToLinear(color, gammaFactor = 2) {\\n    this.r = Math.pow(color.r, gammaFactor);\\n    this.g = Math.pow(color.g, gammaFactor);\\n    this.b = Math.pow(color.b, gammaFactor);\\n    return this;\\n  }\\n  copyLinearToGamma(color, gammaFactor = 2) {\\n    const safeInverse = gammaFactor > 0 ? 1 / gammaFactor : 1;\\n    this.r = Math.pow(color.r, safeInverse);\\n    this.g = Math.pow(color.g, safeInverse);\\n    this.b = Math.pow(color.b, safeInverse);\\n    return this;\\n  }\\n  convertGammaToLinear(gammaFactor) {\\n    this.copyGammaToLinear(this, gammaFactor);\\n    return this;\\n  }\\n  convertLinearToGamma(gammaFactor) {\\n    this.copyLinearToGamma(this, gammaFactor);\\n    return this;\\n  }\\n  copySRGBToLinear(color) {\\n    this.r = SRGBToLinear(color.r);\\n    this.g = SRGBToLinear(color.g);\\n    this.b = SRGBToLinear(color.b);\\n    return this;\\n  }\\n  copyLinearToSRGB(color) {\\n    this.r = LinearToSRGB(color.r);\\n    this.g = LinearToSRGB(color.g);\\n    this.b = LinearToSRGB(color.b);\\n    return this;\\n  }\\n  convertSRGBToLinear() {\\n    this.copySRGBToLinear(this);\\n    return this;\\n  }\\n  convertLinearToSRGB() {\\n    this.copyLinearToSRGB(this);\\n    return this;\\n  }\\n  getHex() {\\n    return this.r * 255 << 16 ^ this.g * 255 << 8 ^ this.b * 255 << 0;\\n  }\\n  getHexString() {\\n    return (\\\\\\\"000000\\\\\\\" + this.getHex().toString(16)).slice(-6);\\n  }\\n  getHSL(target) {\\n    const r = this.r, g = this.g, b = this.b;\\n    const max = Math.max(r, g, b);\\n    const min = Math.min(r, g, b);\\n    let hue, saturation;\\n    const lightness = (min + max) / 2;\\n    if (min === max) {\\n      hue = 0;\\n      saturation = 0;\\n    } else {\\n      const delta = max - min;\\n      saturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min);\\n      switch (max) {\\n        case r:\\n          hue = (g - b) / delta + (g < b ? 6 : 0);\\n          break;\\n        case g:\\n          hue = (b - r) / delta + 2;\\n          break;\\n        case b:\\n          hue = (r - g) / delta + 4;\\n          break;\\n      }\\n      hue /= 6;\\n    }\\n    target.h = hue;\\n    target.s = saturation;\\n    target.l = lightness;\\n    return target;\\n  }\\n  getStyle() {\\n    return \\\\\\\"rgb(\\\\\\\" + (this.r * 255 | 0) + \\\\\\\",\\\\\\\" + (this.g * 255 | 0) + \\\\\\\",\\\\\\\" + (this.b * 255 | 0) + \\\\\\\")\\\\\\\";\\n  }\\n  offsetHSL(h, s, l) {\\n    this.getHSL(_hslA);\\n    _hslA.h += h;\\n    _hslA.s += s;\\n    _hslA.l += l;\\n    this.setHSL(_hslA.h, _hslA.s, _hslA.l);\\n    return this;\\n  }\\n  add(color) {\\n    this.r += color.r;\\n    this.g += color.g;\\n    this.b += color.b;\\n    return this;\\n  }\\n  addColors(color1, color2) {\\n    this.r = color1.r + color2.r;\\n    this.g = color1.g + color2.g;\\n    this.b = color1.b + color2.b;\\n    return this;\\n  }\\n  addScalar(s) {\\n    this.r += s;\\n    this.g += s;\\n    this.b += s;\\n    return this;\\n  }\\n  sub(color) {\\n    this.r = Math.max(0, this.r - color.r);\\n    this.g = Math.max(0, this.g - color.g);\\n    this.b = Math.max(0, this.b - color.b);\\n    return this;\\n  }\\n  multiply(color) {\\n    this.r *= color.r;\\n    this.g *= color.g;\\n    this.b *= color.b;\\n    return this;\\n  }\\n  multiplyScalar(s) {\\n    this.r *= s;\\n    this.g *= s;\\n    this.b *= s;\\n    return this;\\n  }\\n  lerp(color, alpha) {\\n    this.r += (color.r - this.r) * alpha;\\n    this.g += (color.g - this.g) * alpha;\\n    this.b += (color.b - this.b) * alpha;\\n    return this;\\n  }\\n  lerpColors(color1, color2, alpha) {\\n    this.r = color1.r + (color2.r - color1.r) * alpha;\\n    this.g = color1.g + (color2.g - color1.g) * alpha;\\n    this.b = color1.b + (color2.b - color1.b) * alpha;\\n    return this;\\n  }\\n  lerpHSL(color, alpha) {\\n    this.getHSL(_hslA);\\n    color.getHSL(_hslB);\\n    const h = lerp(_hslA.h, _hslB.h, alpha);\\n    const s = lerp(_hslA.s, _hslB.s, alpha);\\n    const l = lerp(_hslA.l, _hslB.l, alpha);\\n    this.setHSL(h, s, l);\\n    return this;\\n  }\\n  equals(c) {\\n    return c.r === this.r && c.g === this.g && c.b === this.b;\\n  }\\n  fromArray(array, offset = 0) {\\n    this.r = array[offset];\\n    this.g = array[offset + 1];\\n    this.b = array[offset + 2];\\n    return this;\\n  }\\n  toArray(array = [], offset = 0) {\\n    array[offset] = this.r;\\n    array[offset + 1] = this.g;\\n    array[offset + 2] = this.b;\\n    return array;\\n  }\\n  fromBufferAttribute(attribute, index) {\\n    this.r = attribute.getX(index);\\n    this.g = attribute.getY(index);\\n    this.b = attribute.getZ(index);\\n    if (attribute.normalized === true) {\\n      this.r /= 255;\\n      this.g /= 255;\\n      this.b /= 255;\\n    }\\n    return this;\\n  }\\n  toJSON() {\\n    return this.getHex();\\n  }\\n};\\nColor.NAMES = _colorKeywords;\\nColor.prototype.isColor = true;\\nColor.prototype.r = 1;\\nColor.prototype.g = 1;\\nColor.prototype.b = 1;\\n\\n// ../../../node_modules/three/src/core/BufferAttribute.js\\nvar _vector4 = /* @__PURE__ */ new Vector3();\\nvar _vector23 = /* @__PURE__ */ new Vector2();\\nvar BufferAttribute = class {\\n  constructor(array, itemSize, normalized) {\\n    if (Array.isArray(array)) {\\n      throw new TypeError(\\\\\\\"THREE.BufferAttribute: array should be a Typed Array.\\\\\\\");\\n    }\\n    this.name = \\\\\\\"\\\\\\\";\\n    this.array = array;\\n    this.itemSize = itemSize;\\n    this.count = array !== void 0 ? array.length / itemSize : 0;\\n    this.normalized = normalized === true;\\n    this.usage = StaticDrawUsage;\\n    this.updateRange = {offset: 0, count: -1};\\n    this.version = 0;\\n  }\\n  onUploadCallback() {\\n  }\\n  set needsUpdate(value) {\\n    if (value === true)\\n      this.version++;\\n  }\\n  setUsage(value) {\\n    this.usage = value;\\n    return this;\\n  }\\n  copy(source) {\\n    this.name = source.name;\\n    this.array = new source.array.constructor(source.array);\\n    this.itemSize = source.itemSize;\\n    this.count = source.count;\\n    this.normalized = source.normalized;\\n    this.usage = source.usage;\\n    return this;\\n  }\\n  copyAt(index1, attribute, index2) {\\n    index1 *= this.itemSize;\\n    index2 *= attribute.itemSize;\\n    for (let i = 0, l = this.itemSize; i < l; i++) {\\n      this.array[index1 + i] = attribute.array[index2 + i];\\n    }\\n    return this;\\n  }\\n  copyArray(array) {\\n    this.array.set(array);\\n    return this;\\n  }\\n  copyColorsArray(colors) {\\n    const array = this.array;\\n    let offset = 0;\\n    for (let i = 0, l = colors.length; i < l; i++) {\\n      let color = colors[i];\\n      if (color === void 0) {\\n        console.warn(\\\\\\\"THREE.BufferAttribute.copyColorsArray(): color is undefined\\\\\\\", i);\\n        color = new Color();\\n      }\\n      array[offset++] = color.r;\\n      array[offset++] = color.g;\\n      array[offset++] = color.b;\\n    }\\n    return this;\\n  }\\n  copyVector2sArray(vectors) {\\n    const array = this.array;\\n    let offset = 0;\\n    for (let i = 0, l = vectors.length; i < l; i++) {\\n      let vector = vectors[i];\\n      if (vector === void 0) {\\n        console.warn(\\\\\\\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\\\\\\\", i);\\n        vector = new Vector2();\\n      }\\n      array[offset++] = vector.x;\\n      array[offset++] = vector.y;\\n    }\\n    return this;\\n  }\\n  copyVector3sArray(vectors) {\\n    const array = this.array;\\n    let offset = 0;\\n    for (let i = 0, l = vectors.length; i < l; i++) {\\n      let vector = vectors[i];\\n      if (vector === void 0) {\\n        console.warn(\\\\\\\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\\\\\\\", i);\\n        vector = new Vector3();\\n      }\\n      array[offset++] = vector.x;\\n      array[offset++] = vector.y;\\n      array[offset++] = vector.z;\\n    }\\n    return this;\\n  }\\n  copyVector4sArray(vectors) {\\n    const array = this.array;\\n    let offset = 0;\\n    for (let i = 0, l = vectors.length; i < l; i++) {\\n      let vector = vectors[i];\\n      if (vector === void 0) {\\n        console.warn(\\\\\\\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\\\\\\\", i);\\n        vector = new Vector4();\\n      }\\n      array[offset++] = vector.x;\\n      array[offset++] = vector.y;\\n      array[offset++] = vector.z;\\n      array[offset++] = vector.w;\\n    }\\n    return this;\\n  }\\n  applyMatrix3(m) {\\n    if (this.itemSize === 2) {\\n      for (let i = 0, l = this.count; i < l; i++) {\\n        _vector23.fromBufferAttribute(this, i);\\n        _vector23.applyMatrix3(m);\\n        this.setXY(i, _vector23.x, _vector23.y);\\n      }\\n    } else if (this.itemSize === 3) {\\n      for (let i = 0, l = this.count; i < l; i++) {\\n        _vector4.fromBufferAttribute(this, i);\\n        _vector4.applyMatrix3(m);\\n        this.setXYZ(i, _vector4.x, _vector4.y, _vector4.z);\\n      }\\n    }\\n    return this;\\n  }\\n  applyMatrix4(m) {\\n    for (let i = 0, l = this.count; i < l; i++) {\\n      _vector4.x = this.getX(i);\\n      _vector4.y = this.getY(i);\\n      _vector4.z = this.getZ(i);\\n      _vector4.applyMatrix4(m);\\n      this.setXYZ(i, _vector4.x, _vector4.y, _vector4.z);\\n    }\\n    return this;\\n  }\\n  applyNormalMatrix(m) {\\n    for (let i = 0, l = this.count; i < l; i++) {\\n      _vector4.x = this.getX(i);\\n      _vector4.y = this.getY(i);\\n      _vector4.z = this.getZ(i);\\n      _vector4.applyNormalMatrix(m);\\n      this.setXYZ(i, _vector4.x, _vector4.y, _vector4.z);\\n    }\\n    return this;\\n  }\\n  transformDirection(m) {\\n    for (let i = 0, l = this.count; i < l; i++) {\\n      _vector4.x = this.getX(i);\\n      _vector4.y = this.getY(i);\\n      _vector4.z = this.getZ(i);\\n      _vector4.transformDirection(m);\\n      this.setXYZ(i, _vector4.x, _vector4.y, _vector4.z);\\n    }\\n    return this;\\n  }\\n  set(value, offset = 0) {\\n    this.array.set(value, offset);\\n    return this;\\n  }\\n  getX(index) {\\n    return this.array[index * this.itemSize];\\n  }\\n  setX(index, x) {\\n    this.array[index * this.itemSize] = x;\\n    return this;\\n  }\\n  getY(index) {\\n    return this.array[index * this.itemSize + 1];\\n  }\\n  setY(index, y) {\\n    this.array[index * this.itemSize + 1] = y;\\n    return this;\\n  }\\n  getZ(index) {\\n    return this.array[index * this.itemSize + 2];\\n  }\\n  setZ(index, z) {\\n    this.array[index * this.itemSize + 2] = z;\\n    return this;\\n  }\\n  getW(index) {\\n    return this.array[index * this.itemSize + 3];\\n  }\\n  setW(index, w) {\\n    this.array[index * this.itemSize + 3] = w;\\n    return this;\\n  }\\n  setXY(index, x, y) {\\n    index *= this.itemSize;\\n    this.array[index + 0] = x;\\n    this.array[index + 1] = y;\\n    return this;\\n  }\\n  setXYZ(index, x, y, z) {\\n    index *= this.itemSize;\\n    this.array[index + 0] = x;\\n    this.array[index + 1] = y;\\n    this.array[index + 2] = z;\\n    return this;\\n  }\\n  setXYZW(index, x, y, z, w) {\\n    index *= this.itemSize;\\n    this.array[index + 0] = x;\\n    this.array[index + 1] = y;\\n    this.array[index + 2] = z;\\n    this.array[index + 3] = w;\\n    return this;\\n  }\\n  onUpload(callback) {\\n    this.onUploadCallback = callback;\\n    return this;\\n  }\\n  clone() {\\n    return new this.constructor(this.array, this.itemSize).copy(this);\\n  }\\n  toJSON() {\\n    const data = {\\n      itemSize: this.itemSize,\\n      type: this.array.constructor.name,\\n      array: Array.prototype.slice.call(this.array),\\n      normalized: this.normalized\\n    };\\n    if (this.name !== \\\\\\\"\\\\\\\")\\n      data.name = this.name;\\n    if (this.usage !== StaticDrawUsage)\\n      data.usage = this.usage;\\n    if (this.updateRange.offset !== 0 || this.updateRange.count !== -1)\\n      data.updateRange = this.updateRange;\\n    return data;\\n  }\\n};\\nBufferAttribute.prototype.isBufferAttribute = true;\\nvar Uint16BufferAttribute = class extends BufferAttribute {\\n  constructor(array, itemSize, normalized) {\\n    super(new Uint16Array(array), itemSize, normalized);\\n  }\\n};\\nvar Int32BufferAttribute = class extends BufferAttribute {\\n  constructor(array, itemSize, normalized) {\\n    super(new Int32Array(array), itemSize, normalized);\\n  }\\n};\\nvar Uint32BufferAttribute = class extends BufferAttribute {\\n  constructor(array, itemSize, normalized) {\\n    super(new Uint32Array(array), itemSize, normalized);\\n  }\\n};\\nvar Float16BufferAttribute = class extends BufferAttribute {\\n  constructor(array, itemSize, normalized) {\\n    super(new Uint16Array(array), itemSize, normalized);\\n  }\\n};\\nFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\\nvar Float32BufferAttribute = class extends BufferAttribute {\\n  constructor(array, itemSize, normalized) {\\n    super(new Float32Array(array), itemSize, normalized);\\n  }\\n};\\n\\n// ../../../node_modules/three/src/utils.js\\nfunction arrayMax(array) {\\n  if (array.length === 0)\\n    return -Infinity;\\n  let max = array[0];\\n  for (let i = 1, l = array.length; i < l; ++i) {\\n    if (array[i] > max)\\n      max = array[i];\\n  }\\n  return max;\\n}\\nvar TYPED_ARRAYS = {\\n  Int8Array,\\n  Uint8Array,\\n  Uint8ClampedArray,\\n  Int16Array,\\n  Uint16Array,\\n  Int32Array,\\n  Uint32Array,\\n  Float32Array,\\n  Float64Array\\n};\\nfunction createElementNS(name) {\\n  return document.createElementNS(\\\\\\\"http://www.w3.org/1999/xhtml\\\\\\\", name);\\n}\\n\\n// ../../../node_modules/three/src/core/BufferGeometry.js\\nvar _id = 0;\\nvar _m13 = /* @__PURE__ */ new Matrix4();\\nvar _obj = /* @__PURE__ */ new Object3D();\\nvar _offset = /* @__PURE__ */ new Vector3();\\nvar _box3 = /* @__PURE__ */ new Box3();\\nvar _boxMorphTargets = /* @__PURE__ */ new Box3();\\nvar _vector5 = /* @__PURE__ */ new Vector3();\\nvar BufferGeometry = class extends EventDispatcher {\\n  constructor() {\\n    super();\\n    Object.defineProperty(this, \\\\\\\"id\\\\\\\", {value: _id++});\\n    this.uuid = generateUUID();\\n    this.name = \\\\\\\"\\\\\\\";\\n    this.type = \\\\\\\"BufferGeometry\\\\\\\";\\n    this.index = null;\\n    this.attributes = {};\\n    this.morphAttributes = {};\\n    this.morphTargetsRelative = false;\\n    this.groups = [];\\n    this.boundingBox = null;\\n    this.boundingSphere = null;\\n    this.drawRange = {start: 0, count: Infinity};\\n    this.userData = {};\\n  }\\n  getIndex() {\\n    return this.index;\\n  }\\n  setIndex(index) {\\n    if (Array.isArray(index)) {\\n      this.index = new (arrayMax(index) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute)(index, 1);\\n    } else {\\n      this.index = index;\\n    }\\n    return this;\\n  }\\n  getAttribute(name) {\\n    return this.attributes[name];\\n  }\\n  setAttribute(name, attribute) {\\n    this.attributes[name] = attribute;\\n    return this;\\n  }\\n  deleteAttribute(name) {\\n    delete this.attributes[name];\\n    return this;\\n  }\\n  hasAttribute(name) {\\n    return this.attributes[name] !== void 0;\\n  }\\n  addGroup(start, count, materialIndex = 0) {\\n    this.groups.push({\\n      start,\\n      count,\\n      materialIndex\\n    });\\n  }\\n  clearGroups() {\\n    this.groups = [];\\n  }\\n  setDrawRange(start, count) {\\n    this.drawRange.start = start;\\n    this.drawRange.count = count;\\n  }\\n  applyMatrix4(matrix) {\\n    const position = this.attributes.position;\\n    if (position !== void 0) {\\n      position.applyMatrix4(matrix);\\n      position.needsUpdate = true;\\n    }\\n    const normal = this.attributes.normal;\\n    if (normal !== void 0) {\\n      const normalMatrix = new Matrix3().getNormalMatrix(matrix);\\n      normal.applyNormalMatrix(normalMatrix);\\n      normal.needsUpdate = true;\\n    }\\n    const tangent = this.attributes.tangent;\\n    if (tangent !== void 0) {\\n      tangent.transformDirection(matrix);\\n      tangent.needsUpdate = true;\\n    }\\n    if (this.boundingBox !== null) {\\n      this.computeBoundingBox();\\n    }\\n    if (this.boundingSphere !== null) {\\n      this.computeBoundingSphere();\\n    }\\n    return this;\\n  }\\n  applyQuaternion(q) {\\n    _m13.makeRotationFromQuaternion(q);\\n    this.applyMatrix4(_m13);\\n    return this;\\n  }\\n  rotateX(angle) {\\n    _m13.makeRotationX(angle);\\n    this.applyMatrix4(_m13);\\n    return this;\\n  }\\n  rotateY(angle) {\\n    _m13.makeRotationY(angle);\\n    this.applyMatrix4(_m13);\\n    return this;\\n  }\\n  rotateZ(angle) {\\n    _m13.makeRotationZ(angle);\\n    this.applyMatrix4(_m13);\\n    return this;\\n  }\\n  translate(x, y, z) {\\n    _m13.makeTranslation(x, y, z);\\n    this.applyMatrix4(_m13);\\n    return this;\\n  }\\n  scale(x, y, z) {\\n    _m13.makeScale(x, y, z);\\n    this.applyMatrix4(_m13);\\n    return this;\\n  }\\n  lookAt(vector) {\\n    _obj.lookAt(vector);\\n    _obj.updateMatrix();\\n    this.applyMatrix4(_obj.matrix);\\n    return this;\\n  }\\n  center() {\\n    this.computeBoundingBox();\\n    this.boundingBox.getCenter(_offset).negate();\\n    this.translate(_offset.x, _offset.y, _offset.z);\\n    return this;\\n  }\\n  setFromPoints(points2) {\\n    const position = [];\\n    for (let i = 0, l = points2.length; i < l; i++) {\\n      const point = points2[i];\\n      position.push(point.x, point.y, point.z || 0);\\n    }\\n    this.setAttribute(\\\\\\\"position\\\\\\\", new Float32BufferAttribute(position, 3));\\n    return this;\\n  }\\n  computeBoundingBox() {\\n    if (this.boundingBox === null) {\\n      this.boundingBox = new Box3();\\n    }\\n    const position = this.attributes.position;\\n    const morphAttributesPosition = this.morphAttributes.position;\\n    if (position && position.isGLBufferAttribute) {\\n      console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".', this);\\n      this.boundingBox.set(new Vector3(-Infinity, -Infinity, -Infinity), new Vector3(Infinity, Infinity, Infinity));\\n      return;\\n    }\\n    if (position !== void 0) {\\n      this.boundingBox.setFromBufferAttribute(position);\\n      if (morphAttributesPosition) {\\n        for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {\\n          const morphAttribute = morphAttributesPosition[i];\\n          _box3.setFromBufferAttribute(morphAttribute);\\n          if (this.morphTargetsRelative) {\\n            _vector5.addVectors(this.boundingBox.min, _box3.min);\\n            this.boundingBox.expandByPoint(_vector5);\\n            _vector5.addVectors(this.boundingBox.max, _box3.max);\\n            this.boundingBox.expandByPoint(_vector5);\\n          } else {\\n            this.boundingBox.expandByPoint(_box3.min);\\n            this.boundingBox.expandByPoint(_box3.max);\\n          }\\n        }\\n      }\\n    } else {\\n      this.boundingBox.makeEmpty();\\n    }\\n    if (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) {\\n      console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \\\\\\\"position\\\\\\\" attribute is likely to have NaN values.', this);\\n    }\\n  }\\n  computeBoundingSphere() {\\n    if (this.boundingSphere === null) {\\n      this.boundingSphere = new Sphere();\\n    }\\n    const position = this.attributes.position;\\n    const morphAttributesPosition = this.morphAttributes.position;\\n    if (position && position.isGLBufferAttribute) {\\n      console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".', this);\\n      this.boundingSphere.set(new Vector3(), Infinity);\\n      return;\\n    }\\n    if (position) {\\n      const center = this.boundingSphere.center;\\n      _box3.setFromBufferAttribute(position);\\n      if (morphAttributesPosition) {\\n        for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {\\n          const morphAttribute = morphAttributesPosition[i];\\n          _boxMorphTargets.setFromBufferAttribute(morphAttribute);\\n          if (this.morphTargetsRelative) {\\n            _vector5.addVectors(_box3.min, _boxMorphTargets.min);\\n            _box3.expandByPoint(_vector5);\\n            _vector5.addVectors(_box3.max, _boxMorphTargets.max);\\n            _box3.expandByPoint(_vector5);\\n          } else {\\n            _box3.expandByPoint(_boxMorphTargets.min);\\n            _box3.expandByPoint(_boxMorphTargets.max);\\n          }\\n        }\\n      }\\n      _box3.getCenter(center);\\n      let maxRadiusSq = 0;\\n      for (let i = 0, il = position.count; i < il; i++) {\\n        _vector5.fromBufferAttribute(position, i);\\n        maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector5));\\n      }\\n      if (morphAttributesPosition) {\\n        for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {\\n          const morphAttribute = morphAttributesPosition[i];\\n          const morphTargetsRelative = this.morphTargetsRelative;\\n          for (let j = 0, jl = morphAttribute.count; j < jl; j++) {\\n            _vector5.fromBufferAttribute(morphAttribute, j);\\n            if (morphTargetsRelative) {\\n              _offset.fromBufferAttribute(position, j);\\n              _vector5.add(_offset);\\n            }\\n            maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector5));\\n          }\\n        }\\n      }\\n      this.boundingSphere.radius = Math.sqrt(maxRadiusSq);\\n      if (isNaN(this.boundingSphere.radius)) {\\n        console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \\\\\\\"position\\\\\\\" attribute is likely to have NaN values.', this);\\n      }\\n    }\\n  }\\n  computeTangents() {\\n    const index = this.index;\\n    const attributes = this.attributes;\\n    if (index === null || attributes.position === void 0 || attributes.normal === void 0 || attributes.uv === void 0) {\\n      console.error(\\\\\\\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\\\\\\\");\\n      return;\\n    }\\n    const indices = index.array;\\n    const positions = attributes.position.array;\\n    const normals = attributes.normal.array;\\n    const uvs = attributes.uv.array;\\n    const nVertices = positions.length / 3;\\n    if (attributes.tangent === void 0) {\\n      this.setAttribute(\\\\\\\"tangent\\\\\\\", new BufferAttribute(new Float32Array(4 * nVertices), 4));\\n    }\\n    const tangents = attributes.tangent.array;\\n    const tan1 = [], tan2 = [];\\n    for (let i = 0; i < nVertices; i++) {\\n      tan1[i] = new Vector3();\\n      tan2[i] = new Vector3();\\n    }\\n    const vA = new Vector3(), vB = new Vector3(), vC = new Vector3(), uvA = new Vector2(), uvB = new Vector2(), uvC = new Vector2(), sdir = new Vector3(), tdir = new Vector3();\\n    function handleTriangle(a, b, c) {\\n      vA.fromArray(positions, a * 3);\\n      vB.fromArray(positions, b * 3);\\n      vC.fromArray(positions, c * 3);\\n      uvA.fromArray(uvs, a * 2);\\n      uvB.fromArray(uvs, b * 2);\\n      uvC.fromArray(uvs, c * 2);\\n      vB.sub(vA);\\n      vC.sub(vA);\\n      uvB.sub(uvA);\\n      uvC.sub(uvA);\\n      const r = 1 / (uvB.x * uvC.y - uvC.x * uvB.y);\\n      if (!isFinite(r))\\n        return;\\n      sdir.copy(vB).multiplyScalar(uvC.y).addScaledVector(vC, -uvB.y).multiplyScalar(r);\\n      tdir.copy(vC).multiplyScalar(uvB.x).addScaledVector(vB, -uvC.x).multiplyScalar(r);\\n      tan1[a].add(sdir);\\n      tan1[b].add(sdir);\\n      tan1[c].add(sdir);\\n      tan2[a].add(tdir);\\n      tan2[b].add(tdir);\\n      tan2[c].add(tdir);\\n    }\\n    let groups = this.groups;\\n    if (groups.length === 0) {\\n      groups = [{\\n        start: 0,\\n        count: indices.length\\n      }];\\n    }\\n    for (let i = 0, il = groups.length; i < il; ++i) {\\n      const group = groups[i];\\n      const start = group.start;\\n      const count = group.count;\\n      for (let j = start, jl = start + count; j < jl; j += 3) {\\n        handleTriangle(indices[j + 0], indices[j + 1], indices[j + 2]);\\n      }\\n    }\\n    const tmp = new Vector3(), tmp2 = new Vector3();\\n    const n = new Vector3(), n2 = new Vector3();\\n    function handleVertex(v) {\\n      n.fromArray(normals, v * 3);\\n      n2.copy(n);\\n      const t = tan1[v];\\n      tmp.copy(t);\\n      tmp.sub(n.multiplyScalar(n.dot(t))).normalize();\\n      tmp2.crossVectors(n2, t);\\n      const test = tmp2.dot(tan2[v]);\\n      const w = test < 0 ? -1 : 1;\\n      tangents[v * 4] = tmp.x;\\n      tangents[v * 4 + 1] = tmp.y;\\n      tangents[v * 4 + 2] = tmp.z;\\n      tangents[v * 4 + 3] = w;\\n    }\\n    for (let i = 0, il = groups.length; i < il; ++i) {\\n      const group = groups[i];\\n      const start = group.start;\\n      const count = group.count;\\n      for (let j = start, jl = start + count; j < jl; j += 3) {\\n        handleVertex(indices[j + 0]);\\n        handleVertex(indices[j + 1]);\\n        handleVertex(indices[j + 2]);\\n      }\\n    }\\n  }\\n  computeVertexNormals() {\\n    const index = this.index;\\n    const positionAttribute = this.getAttribute(\\\\\\\"position\\\\\\\");\\n    if (positionAttribute !== void 0) {\\n      let normalAttribute = this.getAttribute(\\\\\\\"normal\\\\\\\");\\n      if (normalAttribute === void 0) {\\n        normalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3);\\n        this.setAttribute(\\\\\\\"normal\\\\\\\", normalAttribute);\\n      } else {\\n        for (let i = 0, il = normalAttribute.count; i < il; i++) {\\n          normalAttribute.setXYZ(i, 0, 0, 0);\\n        }\\n      }\\n      const pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\\n      const nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\\n      const cb = new Vector3(), ab = new Vector3();\\n      if (index) {\\n        for (let i = 0, il = index.count; i < il; i += 3) {\\n          const vA = index.getX(i + 0);\\n          const vB = index.getX(i + 1);\\n          const vC = index.getX(i + 2);\\n          pA.fromBufferAttribute(positionAttribute, vA);\\n          pB.fromBufferAttribute(positionAttribute, vB);\\n          pC.fromBufferAttribute(positionAttribute, vC);\\n          cb.subVectors(pC, pB);\\n          ab.subVectors(pA, pB);\\n          cb.cross(ab);\\n          nA.fromBufferAttribute(normalAttribute, vA);\\n          nB.fromBufferAttribute(normalAttribute, vB);\\n          nC.fromBufferAttribute(normalAttribute, vC);\\n          nA.add(cb);\\n          nB.add(cb);\\n          nC.add(cb);\\n          normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z);\\n          normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z);\\n          normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z);\\n        }\\n      } else {\\n        for (let i = 0, il = positionAttribute.count; i < il; i += 3) {\\n          pA.fromBufferAttribute(positionAttribute, i + 0);\\n          pB.fromBufferAttribute(positionAttribute, i + 1);\\n          pC.fromBufferAttribute(positionAttribute, i + 2);\\n          cb.subVectors(pC, pB);\\n          ab.subVectors(pA, pB);\\n          cb.cross(ab);\\n          normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z);\\n          normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z);\\n          normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z);\\n        }\\n      }\\n      this.normalizeNormals();\\n      normalAttribute.needsUpdate = true;\\n    }\\n  }\\n  merge(geometry, offset) {\\n    if (!(geometry && geometry.isBufferGeometry)) {\\n      console.error(\\\\\\\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\\\\\\\", geometry);\\n      return;\\n    }\\n    if (offset === void 0) {\\n      offset = 0;\\n      console.warn(\\\\\\\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\\\\\\\");\\n    }\\n    const attributes = this.attributes;\\n    for (const key in attributes) {\\n      if (geometry.attributes[key] === void 0)\\n        continue;\\n      const attribute1 = attributes[key];\\n      const attributeArray1 = attribute1.array;\\n      const attribute2 = geometry.attributes[key];\\n      const attributeArray2 = attribute2.array;\\n      const attributeOffset = attribute2.itemSize * offset;\\n      const length = Math.min(attributeArray2.length, attributeArray1.length - attributeOffset);\\n      for (let i = 0, j = attributeOffset; i < length; i++, j++) {\\n        attributeArray1[j] = attributeArray2[i];\\n      }\\n    }\\n    return this;\\n  }\\n  normalizeNormals() {\\n    const normals = this.attributes.normal;\\n    for (let i = 0, il = normals.count; i < il; i++) {\\n      _vector5.fromBufferAttribute(normals, i);\\n      _vector5.normalize();\\n      normals.setXYZ(i, _vector5.x, _vector5.y, _vector5.z);\\n    }\\n  }\\n  toNonIndexed() {\\n    function convertBufferAttribute(attribute, indices2) {\\n      const array = attribute.array;\\n      const itemSize = attribute.itemSize;\\n      const normalized = attribute.normalized;\\n      const array2 = new array.constructor(indices2.length * itemSize);\\n      let index = 0, index2 = 0;\\n      for (let i = 0, l = indices2.length; i < l; i++) {\\n        if (attribute.isInterleavedBufferAttribute) {\\n          index = indices2[i] * attribute.data.stride + attribute.offset;\\n        } else {\\n          index = indices2[i] * itemSize;\\n        }\\n        for (let j = 0; j < itemSize; j++) {\\n          array2[index2++] = array[index++];\\n        }\\n      }\\n      return new BufferAttribute(array2, itemSize, normalized);\\n    }\\n    if (this.index === null) {\\n      console.warn(\\\\\\\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\\\\\\\");\\n      return this;\\n    }\\n    const geometry2 = new BufferGeometry();\\n    const indices = this.index.array;\\n    const attributes = this.attributes;\\n    for (const name in attributes) {\\n      const attribute = attributes[name];\\n      const newAttribute = convertBufferAttribute(attribute, indices);\\n      geometry2.setAttribute(name, newAttribute);\\n    }\\n    const morphAttributes = this.morphAttributes;\\n    for (const name in morphAttributes) {\\n      const morphArray = [];\\n      const morphAttribute = morphAttributes[name];\\n      for (let i = 0, il = morphAttribute.length; i < il; i++) {\\n        const attribute = morphAttribute[i];\\n        const newAttribute = convertBufferAttribute(attribute, indices);\\n        morphArray.push(newAttribute);\\n      }\\n      geometry2.morphAttributes[name] = morphArray;\\n    }\\n    geometry2.morphTargetsRelative = this.morphTargetsRelative;\\n    const groups = this.groups;\\n    for (let i = 0, l = groups.length; i < l; i++) {\\n      const group = groups[i];\\n      geometry2.addGroup(group.start, group.count, group.materialIndex);\\n    }\\n    return geometry2;\\n  }\\n  toJSON() {\\n    const data = {\\n      metadata: {\\n        version: 4.5,\\n        type: \\\\\\\"BufferGeometry\\\\\\\",\\n        generator: \\\\\\\"BufferGeometry.toJSON\\\\\\\"\\n      }\\n    };\\n    data.uuid = this.uuid;\\n    data.type = this.type;\\n    if (this.name !== \\\\\\\"\\\\\\\")\\n      data.name = this.name;\\n    if (Object.keys(this.userData).length > 0)\\n      data.userData = this.userData;\\n    if (this.parameters !== void 0) {\\n      const parameters = this.parameters;\\n      for (const key in parameters) {\\n        if (parameters[key] !== void 0)\\n          data[key] = parameters[key];\\n      }\\n      return data;\\n    }\\n    data.data = {attributes: {}};\\n    const index = this.index;\\n    if (index !== null) {\\n      data.data.index = {\\n        type: index.array.constructor.name,\\n        array: Array.prototype.slice.call(index.array)\\n      };\\n    }\\n    const attributes = this.attributes;\\n    for (const key in attributes) {\\n      const attribute = attributes[key];\\n      data.data.attributes[key] = attribute.toJSON(data.data);\\n    }\\n    const morphAttributes = {};\\n    let hasMorphAttributes = false;\\n    for (const key in this.morphAttributes) {\\n      const attributeArray = this.morphAttributes[key];\\n      const array = [];\\n      for (let i = 0, il = attributeArray.length; i < il; i++) {\\n        const attribute = attributeArray[i];\\n        array.push(attribute.toJSON(data.data));\\n      }\\n      if (array.length > 0) {\\n        morphAttributes[key] = array;\\n        hasMorphAttributes = true;\\n      }\\n    }\\n    if (hasMorphAttributes) {\\n      data.data.morphAttributes = morphAttributes;\\n      data.data.morphTargetsRelative = this.morphTargetsRelative;\\n    }\\n    const groups = this.groups;\\n    if (groups.length > 0) {\\n      data.data.groups = JSON.parse(JSON.stringify(groups));\\n    }\\n    const boundingSphere = this.boundingSphere;\\n    if (boundingSphere !== null) {\\n      data.data.boundingSphere = {\\n        center: boundingSphere.center.toArray(),\\n        radius: boundingSphere.radius\\n      };\\n    }\\n    return data;\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n  copy(source) {\\n    this.index = null;\\n    this.attributes = {};\\n    this.morphAttributes = {};\\n    this.groups = [];\\n    this.boundingBox = null;\\n    this.boundingSphere = null;\\n    const data = {};\\n    this.name = source.name;\\n    const index = source.index;\\n    if (index !== null) {\\n      this.setIndex(index.clone(data));\\n    }\\n    const attributes = source.attributes;\\n    for (const name in attributes) {\\n      const attribute = attributes[name];\\n      this.setAttribute(name, attribute.clone(data));\\n    }\\n    const morphAttributes = source.morphAttributes;\\n    for (const name in morphAttributes) {\\n      const array = [];\\n      const morphAttribute = morphAttributes[name];\\n      for (let i = 0, l = morphAttribute.length; i < l; i++) {\\n        array.push(morphAttribute[i].clone(data));\\n      }\\n      this.morphAttributes[name] = array;\\n    }\\n    this.morphTargetsRelative = source.morphTargetsRelative;\\n    const groups = source.groups;\\n    for (let i = 0, l = groups.length; i < l; i++) {\\n      const group = groups[i];\\n      this.addGroup(group.start, group.count, group.materialIndex);\\n    }\\n    const boundingBox = source.boundingBox;\\n    if (boundingBox !== null) {\\n      this.boundingBox = boundingBox.clone();\\n    }\\n    const boundingSphere = source.boundingSphere;\\n    if (boundingSphere !== null) {\\n      this.boundingSphere = boundingSphere.clone();\\n    }\\n    this.drawRange.start = source.drawRange.start;\\n    this.drawRange.count = source.drawRange.count;\\n    this.userData = source.userData;\\n    if (source.parameters !== void 0)\\n      this.parameters = Object.assign({}, source.parameters);\\n    return this;\\n  }\\n  dispose() {\\n    this.dispatchEvent({type: \\\\\\\"dispose\\\\\\\"});\\n  }\\n};\\nBufferGeometry.prototype.isBufferGeometry = true;\\n\\n// ../../../node_modules/three/src/geometries/BoxGeometry.js\\nvar BoxGeometry = class extends BufferGeometry {\\n  constructor(width = 1, height = 1, depth2 = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) {\\n    super();\\n    this.type = \\\\\\\"BoxGeometry\\\\\\\";\\n    this.parameters = {\\n      width,\\n      height,\\n      depth: depth2,\\n      widthSegments,\\n      heightSegments,\\n      depthSegments\\n    };\\n    const scope = this;\\n    widthSegments = Math.floor(widthSegments);\\n    heightSegments = Math.floor(heightSegments);\\n    depthSegments = Math.floor(depthSegments);\\n    const indices = [];\\n    const vertices = [];\\n    const normals = [];\\n    const uvs = [];\\n    let numberOfVertices = 0;\\n    let groupStart = 0;\\n    buildPlane(\\\\\\\"z\\\\\\\", \\\\\\\"y\\\\\\\", \\\\\\\"x\\\\\\\", -1, -1, depth2, height, width, depthSegments, heightSegments, 0);\\n    buildPlane(\\\\\\\"z\\\\\\\", \\\\\\\"y\\\\\\\", \\\\\\\"x\\\\\\\", 1, -1, depth2, height, -width, depthSegments, heightSegments, 1);\\n    buildPlane(\\\\\\\"x\\\\\\\", \\\\\\\"z\\\\\\\", \\\\\\\"y\\\\\\\", 1, 1, width, depth2, height, widthSegments, depthSegments, 2);\\n    buildPlane(\\\\\\\"x\\\\\\\", \\\\\\\"z\\\\\\\", \\\\\\\"y\\\\\\\", 1, -1, width, depth2, -height, widthSegments, depthSegments, 3);\\n    buildPlane(\\\\\\\"x\\\\\\\", \\\\\\\"y\\\\\\\", \\\\\\\"z\\\\\\\", 1, -1, width, height, depth2, widthSegments, heightSegments, 4);\\n    buildPlane(\\\\\\\"x\\\\\\\", \\\\\\\"y\\\\\\\", \\\\\\\"z\\\\\\\", -1, -1, width, height, -depth2, widthSegments, heightSegments, 5);\\n    this.setIndex(indices);\\n    this.setAttribute(\\\\\\\"position\\\\\\\", new Float32BufferAttribute(vertices, 3));\\n    this.setAttribute(\\\\\\\"normal\\\\\\\", new Float32BufferAttribute(normals, 3));\\n    this.setAttribute(\\\\\\\"uv\\\\\\\", new Float32BufferAttribute(uvs, 2));\\n    function buildPlane(u, v, w, udir, vdir, width2, height2, depth3, gridX, gridY, materialIndex) {\\n      const segmentWidth = width2 / gridX;\\n      const segmentHeight = height2 / gridY;\\n      const widthHalf = width2 / 2;\\n      const heightHalf = height2 / 2;\\n      const depthHalf = depth3 / 2;\\n      const gridX1 = gridX + 1;\\n      const gridY1 = gridY + 1;\\n      let vertexCounter = 0;\\n      let groupCount = 0;\\n      const vector = new Vector3();\\n      for (let iy = 0; iy < gridY1; iy++) {\\n        const y = iy * segmentHeight - heightHalf;\\n        for (let ix = 0; ix < gridX1; ix++) {\\n          const x = ix * segmentWidth - widthHalf;\\n          vector[u] = x * udir;\\n          vector[v] = y * vdir;\\n          vector[w] = depthHalf;\\n          vertices.push(vector.x, vector.y, vector.z);\\n          vector[u] = 0;\\n          vector[v] = 0;\\n          vector[w] = depth3 > 0 ? 1 : -1;\\n          normals.push(vector.x, vector.y, vector.z);\\n          uvs.push(ix / gridX);\\n          uvs.push(1 - iy / gridY);\\n          vertexCounter += 1;\\n        }\\n      }\\n      for (let iy = 0; iy < gridY; iy++) {\\n        for (let ix = 0; ix < gridX; ix++) {\\n          const a = numberOfVertices + ix + gridX1 * iy;\\n          const b = numberOfVertices + ix + gridX1 * (iy + 1);\\n          const c = numberOfVertices + (ix + 1) + gridX1 * (iy + 1);\\n          const d = numberOfVertices + (ix + 1) + gridX1 * iy;\\n          indices.push(a, b, d);\\n          indices.push(b, c, d);\\n          groupCount += 6;\\n        }\\n      }\\n      scope.addGroup(groupStart, groupCount, materialIndex);\\n      groupStart += groupCount;\\n      numberOfVertices += vertexCounter;\\n    }\\n  }\\n  static fromJSON(data) {\\n    return new BoxGeometry(data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments);\\n  }\\n};\\n\\n// ../../../node_modules/three/src/geometries/PlaneGeometry.js\\nvar PlaneGeometry = class extends BufferGeometry {\\n  constructor(width = 1, height = 1, widthSegments = 1, heightSegments = 1) {\\n    super();\\n    this.type = \\\\\\\"PlaneGeometry\\\\\\\";\\n    this.parameters = {\\n      width,\\n      height,\\n      widthSegments,\\n      heightSegments\\n    };\\n    const width_half = width / 2;\\n    const height_half = height / 2;\\n    const gridX = Math.floor(widthSegments);\\n    const gridY = Math.floor(heightSegments);\\n    const gridX1 = gridX + 1;\\n    const gridY1 = gridY + 1;\\n    const segment_width = width / gridX;\\n    const segment_height = height / gridY;\\n    const indices = [];\\n    const vertices = [];\\n    const normals = [];\\n    const uvs = [];\\n    for (let iy = 0; iy < gridY1; iy++) {\\n      const y = iy * segment_height - height_half;\\n      for (let ix = 0; ix < gridX1; ix++) {\\n        const x = ix * segment_width - width_half;\\n        vertices.push(x, -y, 0);\\n        normals.push(0, 0, 1);\\n        uvs.push(ix / gridX);\\n        uvs.push(1 - iy / gridY);\\n      }\\n    }\\n    for (let iy = 0; iy < gridY; iy++) {\\n      for (let ix = 0; ix < gridX; ix++) {\\n        const a = ix + gridX1 * iy;\\n        const b = ix + gridX1 * (iy + 1);\\n        const c = ix + 1 + gridX1 * (iy + 1);\\n        const d = ix + 1 + gridX1 * iy;\\n        indices.push(a, b, d);\\n        indices.push(b, c, d);\\n      }\\n    }\\n    this.setIndex(indices);\\n    this.setAttribute(\\\\\\\"position\\\\\\\", new Float32BufferAttribute(vertices, 3));\\n    this.setAttribute(\\\\\\\"normal\\\\\\\", new Float32BufferAttribute(normals, 3));\\n    this.setAttribute(\\\\\\\"uv\\\\\\\", new Float32BufferAttribute(uvs, 2));\\n  }\\n  static fromJSON(data) {\\n    return new PlaneGeometry(data.width, data.height, data.widthSegments, data.heightSegments);\\n  }\\n};\\n\\n// ../../../node_modules/three/src/materials/Material.js\\nvar materialId = 0;\\nvar Material = class extends EventDispatcher {\\n  constructor() {\\n    super();\\n    Object.defineProperty(this, \\\\\\\"id\\\\\\\", {value: materialId++});\\n    this.uuid = generateUUID();\\n    this.name = \\\\\\\"\\\\\\\";\\n    this.type = \\\\\\\"Material\\\\\\\";\\n    this.fog = true;\\n    this.blending = NormalBlending;\\n    this.side = FrontSide;\\n    this.vertexColors = false;\\n    this.opacity = 1;\\n    this.format = RGBAFormat;\\n    this.transparent = false;\\n    this.blendSrc = SrcAlphaFactor;\\n    this.blendDst = OneMinusSrcAlphaFactor;\\n    this.blendEquation = AddEquation;\\n    this.blendSrcAlpha = null;\\n    this.blendDstAlpha = null;\\n    this.blendEquationAlpha = null;\\n    this.depthFunc = LessEqualDepth;\\n    this.depthTest = true;\\n    this.depthWrite = true;\\n    this.stencilWriteMask = 255;\\n    this.stencilFunc = AlwaysStencilFunc;\\n    this.stencilRef = 0;\\n    this.stencilFuncMask = 255;\\n    this.stencilFail = KeepStencilOp;\\n    this.stencilZFail = KeepStencilOp;\\n    this.stencilZPass = KeepStencilOp;\\n    this.stencilWrite = false;\\n    this.clippingPlanes = null;\\n    this.clipIntersection = false;\\n    this.clipShadows = false;\\n    this.shadowSide = null;\\n    this.colorWrite = true;\\n    this.precision = null;\\n    this.polygonOffset = false;\\n    this.polygonOffsetFactor = 0;\\n    this.polygonOffsetUnits = 0;\\n    this.dithering = false;\\n    this.alphaToCoverage = false;\\n    this.premultipliedAlpha = false;\\n    this.visible = true;\\n    this.toneMapped = true;\\n    this.userData = {};\\n    this.version = 0;\\n    this._alphaTest = 0;\\n  }\\n  get alphaTest() {\\n    return this._alphaTest;\\n  }\\n  set alphaTest(value) {\\n    if (this._alphaTest > 0 !== value > 0) {\\n      this.version++;\\n    }\\n    this._alphaTest = value;\\n  }\\n  onBuild() {\\n  }\\n  onBeforeRender() {\\n  }\\n  onBeforeCompile() {\\n  }\\n  customProgramCacheKey() {\\n    return this.onBeforeCompile.toString();\\n  }\\n  setValues(values) {\\n    if (values === void 0)\\n      return;\\n    for (const key in values) {\\n      const newValue = values[key];\\n      if (newValue === void 0) {\\n        console.warn(\\\\\\\"THREE.Material: '\\\\\\\" + key + \\\\\\\"' parameter is undefined.\\\\\\\");\\n        continue;\\n      }\\n      if (key === \\\\\\\"shading\\\\\\\") {\\n        console.warn(\\\\\\\"THREE.\\\\\\\" + this.type + \\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\");\\n        this.flatShading = newValue === FlatShading ? true : false;\\n        continue;\\n      }\\n      const currentValue = this[key];\\n      if (currentValue === void 0) {\\n        console.warn(\\\\\\\"THREE.\\\\\\\" + this.type + \\\\\\\": '\\\\\\\" + key + \\\\\\\"' is not a property of this material.\\\\\\\");\\n        continue;\\n      }\\n      if (currentValue && currentValue.isColor) {\\n        currentValue.set(newValue);\\n      } else if (currentValue && currentValue.isVector3 && (newValue && newValue.isVector3)) {\\n        currentValue.copy(newValue);\\n      } else {\\n        this[key] = newValue;\\n      }\\n    }\\n  }\\n  toJSON(meta) {\\n    const isRoot = meta === void 0 || typeof meta === \\\\\\\"string\\\\\\\";\\n    if (isRoot) {\\n      meta = {\\n        textures: {},\\n        images: {}\\n      };\\n    }\\n    const data = {\\n      metadata: {\\n        version: 4.5,\\n        type: \\\\\\\"Material\\\\\\\",\\n        generator: \\\\\\\"Material.toJSON\\\\\\\"\\n      }\\n    };\\n    data.uuid = this.uuid;\\n    data.type = this.type;\\n    if (this.name !== \\\\\\\"\\\\\\\")\\n      data.name = this.name;\\n    if (this.color && this.color.isColor)\\n      data.color = this.color.getHex();\\n    if (this.roughness !== void 0)\\n      data.roughness = this.roughness;\\n    if (this.metalness !== void 0)\\n      data.metalness = this.metalness;\\n    if (this.sheen !== void 0)\\n      data.sheen = this.sheen;\\n    if (this.sheenTint && this.sheenTint.isColor)\\n      data.sheenTint = this.sheenTint.getHex();\\n    if (this.sheenRoughness !== void 0)\\n      data.sheenRoughness = this.sheenRoughness;\\n    if (this.emissive && this.emissive.isColor)\\n      data.emissive = this.emissive.getHex();\\n    if (this.emissiveIntensity && this.emissiveIntensity !== 1)\\n      data.emissiveIntensity = this.emissiveIntensity;\\n    if (this.specular && this.specular.isColor)\\n      data.specular = this.specular.getHex();\\n    if (this.specularIntensity !== void 0)\\n      data.specularIntensity = this.specularIntensity;\\n    if (this.specularTint && this.specularTint.isColor)\\n      data.specularTint = this.specularTint.getHex();\\n    if (this.shininess !== void 0)\\n      data.shininess = this.shininess;\\n    if (this.clearcoat !== void 0)\\n      data.clearcoat = this.clearcoat;\\n    if (this.clearcoatRoughness !== void 0)\\n      data.clearcoatRoughness = this.clearcoatRoughness;\\n    if (this.clearcoatMap && this.clearcoatMap.isTexture) {\\n      data.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid;\\n    }\\n    if (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) {\\n      data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(meta).uuid;\\n    }\\n    if (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) {\\n      data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid;\\n      data.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\\n    }\\n    if (this.map && this.map.isTexture)\\n      data.map = this.map.toJSON(meta).uuid;\\n    if (this.matcap && this.matcap.isTexture)\\n      data.matcap = this.matcap.toJSON(meta).uuid;\\n    if (this.alphaMap && this.alphaMap.isTexture)\\n      data.alphaMap = this.alphaMap.toJSON(meta).uuid;\\n    if (this.lightMap && this.lightMap.isTexture) {\\n      data.lightMap = this.lightMap.toJSON(meta).uuid;\\n      data.lightMapIntensity = this.lightMapIntensity;\\n    }\\n    if (this.aoMap && this.aoMap.isTexture) {\\n      data.aoMap = this.aoMap.toJSON(meta).uuid;\\n      data.aoMapIntensity = this.aoMapIntensity;\\n    }\\n    if (this.bumpMap && this.bumpMap.isTexture) {\\n      data.bumpMap = this.bumpMap.toJSON(meta).uuid;\\n      data.bumpScale = this.bumpScale;\\n    }\\n    if (this.normalMap && this.normalMap.isTexture) {\\n      data.normalMap = this.normalMap.toJSON(meta).uuid;\\n      data.normalMapType = this.normalMapType;\\n      data.normalScale = this.normalScale.toArray();\\n    }\\n    if (this.displacementMap && this.displacementMap.isTexture) {\\n      data.displacementMap = this.displacementMap.toJSON(meta).uuid;\\n      data.displacementScale = this.displacementScale;\\n      data.displacementBias = this.displacementBias;\\n    }\\n    if (this.roughnessMap && this.roughnessMap.isTexture)\\n      data.roughnessMap = this.roughnessMap.toJSON(meta).uuid;\\n    if (this.metalnessMap && this.metalnessMap.isTexture)\\n      data.metalnessMap = this.metalnessMap.toJSON(meta).uuid;\\n    if (this.emissiveMap && this.emissiveMap.isTexture)\\n      data.emissiveMap = this.emissiveMap.toJSON(meta).uuid;\\n    if (this.specularMap && this.specularMap.isTexture)\\n      data.specularMap = this.specularMap.toJSON(meta).uuid;\\n    if (this.specularIntensityMap && this.specularIntensityMap.isTexture)\\n      data.specularIntensityMap = this.specularIntensityMap.toJSON(meta).uuid;\\n    if (this.specularTintMap && this.specularTintMap.isTexture)\\n      data.specularTintMap = this.specularTintMap.toJSON(meta).uuid;\\n    if (this.envMap && this.envMap.isTexture) {\\n      data.envMap = this.envMap.toJSON(meta).uuid;\\n      if (this.combine !== void 0)\\n        data.combine = this.combine;\\n    }\\n    if (this.envMapIntensity !== void 0)\\n      data.envMapIntensity = this.envMapIntensity;\\n    if (this.reflectivity !== void 0)\\n      data.reflectivity = this.reflectivity;\\n    if (this.refractionRatio !== void 0)\\n      data.refractionRatio = this.refractionRatio;\\n    if (this.gradientMap && this.gradientMap.isTexture) {\\n      data.gradientMap = this.gradientMap.toJSON(meta).uuid;\\n    }\\n    if (this.transmission !== void 0)\\n      data.transmission = this.transmission;\\n    if (this.transmissionMap && this.transmissionMap.isTexture)\\n      data.transmissionMap = this.transmissionMap.toJSON(meta).uuid;\\n    if (this.thickness !== void 0)\\n      data.thickness = this.thickness;\\n    if (this.thicknessMap && this.thicknessMap.isTexture)\\n      data.thicknessMap = this.thicknessMap.toJSON(meta).uuid;\\n    if (this.attenuationDistance !== void 0)\\n      data.attenuationDistance = this.attenuationDistance;\\n    if (this.attenuationTint !== void 0)\\n      data.attenuationTint = this.attenuationTint.getHex();\\n    if (this.size !== void 0)\\n      data.size = this.size;\\n    if (this.shadowSide !== null)\\n      data.shadowSide = this.shadowSide;\\n    if (this.sizeAttenuation !== void 0)\\n      data.sizeAttenuation = this.sizeAttenuation;\\n    if (this.blending !== NormalBlending)\\n      data.blending = this.blending;\\n    if (this.side !== FrontSide)\\n      data.side = this.side;\\n    if (this.vertexColors)\\n      data.vertexColors = true;\\n    if (this.opacity < 1)\\n      data.opacity = this.opacity;\\n    if (this.format !== RGBAFormat)\\n      data.format = this.format;\\n    if (this.transparent === true)\\n      data.transparent = this.transparent;\\n    data.depthFunc = this.depthFunc;\\n    data.depthTest = this.depthTest;\\n    data.depthWrite = this.depthWrite;\\n    data.colorWrite = this.colorWrite;\\n    data.stencilWrite = this.stencilWrite;\\n    data.stencilWriteMask = this.stencilWriteMask;\\n    data.stencilFunc = this.stencilFunc;\\n    data.stencilRef = this.stencilRef;\\n    data.stencilFuncMask = this.stencilFuncMask;\\n    data.stencilFail = this.stencilFail;\\n    data.stencilZFail = this.stencilZFail;\\n    data.stencilZPass = this.stencilZPass;\\n    if (this.rotation && this.rotation !== 0)\\n      data.rotation = this.rotation;\\n    if (this.polygonOffset === true)\\n      data.polygonOffset = true;\\n    if (this.polygonOffsetFactor !== 0)\\n      data.polygonOffsetFactor = this.polygonOffsetFactor;\\n    if (this.polygonOffsetUnits !== 0)\\n      data.polygonOffsetUnits = this.polygonOffsetUnits;\\n    if (this.linewidth && this.linewidth !== 1)\\n      data.linewidth = this.linewidth;\\n    if (this.dashSize !== void 0)\\n      data.dashSize = this.dashSize;\\n    if (this.gapSize !== void 0)\\n      data.gapSize = this.gapSize;\\n    if (this.scale !== void 0)\\n      data.scale = this.scale;\\n    if (this.dithering === true)\\n      data.dithering = true;\\n    if (this.alphaTest > 0)\\n      data.alphaTest = this.alphaTest;\\n    if (this.alphaToCoverage === true)\\n      data.alphaToCoverage = this.alphaToCoverage;\\n    if (this.premultipliedAlpha === true)\\n      data.premultipliedAlpha = this.premultipliedAlpha;\\n    if (this.wireframe === true)\\n      data.wireframe = this.wireframe;\\n    if (this.wireframeLinewidth > 1)\\n      data.wireframeLinewidth = this.wireframeLinewidth;\\n    if (this.wireframeLinecap !== \\\\\\\"round\\\\\\\")\\n      data.wireframeLinecap = this.wireframeLinecap;\\n    if (this.wireframeLinejoin !== \\\\\\\"round\\\\\\\")\\n      data.wireframeLinejoin = this.wireframeLinejoin;\\n    if (this.flatShading === true)\\n      data.flatShading = this.flatShading;\\n    if (this.visible === false)\\n      data.visible = false;\\n    if (this.toneMapped === false)\\n      data.toneMapped = false;\\n    if (JSON.stringify(this.userData) !== \\\\\\\"{}\\\\\\\")\\n      data.userData = this.userData;\\n    function extractFromCache(cache) {\\n      const values = [];\\n      for (const key in cache) {\\n        const data2 = cache[key];\\n        delete data2.metadata;\\n        values.push(data2);\\n      }\\n      return values;\\n    }\\n    if (isRoot) {\\n      const textures = extractFromCache(meta.textures);\\n      const images = extractFromCache(meta.images);\\n      if (textures.length > 0)\\n        data.textures = textures;\\n      if (images.length > 0)\\n        data.images = images;\\n    }\\n    return data;\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n  copy(source) {\\n    this.name = source.name;\\n    this.fog = source.fog;\\n    this.blending = source.blending;\\n    this.side = source.side;\\n    this.vertexColors = source.vertexColors;\\n    this.opacity = source.opacity;\\n    this.format = source.format;\\n    this.transparent = source.transparent;\\n    this.blendSrc = source.blendSrc;\\n    this.blendDst = source.blendDst;\\n    this.blendEquation = source.blendEquation;\\n    this.blendSrcAlpha = source.blendSrcAlpha;\\n    this.blendDstAlpha = source.blendDstAlpha;\\n    this.blendEquationAlpha = source.blendEquationAlpha;\\n    this.depthFunc = source.depthFunc;\\n    this.depthTest = source.depthTest;\\n    this.depthWrite = source.depthWrite;\\n    this.stencilWriteMask = source.stencilWriteMask;\\n    this.stencilFunc = source.stencilFunc;\\n    this.stencilRef = source.stencilRef;\\n    this.stencilFuncMask = source.stencilFuncMask;\\n    this.stencilFail = source.stencilFail;\\n    this.stencilZFail = source.stencilZFail;\\n    this.stencilZPass = source.stencilZPass;\\n    this.stencilWrite = source.stencilWrite;\\n    const srcPlanes = source.clippingPlanes;\\n    let dstPlanes = null;\\n    if (srcPlanes !== null) {\\n      const n = srcPlanes.length;\\n      dstPlanes = new Array(n);\\n      for (let i = 0; i !== n; ++i) {\\n        dstPlanes[i] = srcPlanes[i].clone();\\n      }\\n    }\\n    this.clippingPlanes = dstPlanes;\\n    this.clipIntersection = source.clipIntersection;\\n    this.clipShadows = source.clipShadows;\\n    this.shadowSide = source.shadowSide;\\n    this.colorWrite = source.colorWrite;\\n    this.precision = source.precision;\\n    this.polygonOffset = source.polygonOffset;\\n    this.polygonOffsetFactor = source.polygonOffsetFactor;\\n    this.polygonOffsetUnits = source.polygonOffsetUnits;\\n    this.dithering = source.dithering;\\n    this.alphaTest = source.alphaTest;\\n    this.alphaToCoverage = source.alphaToCoverage;\\n    this.premultipliedAlpha = source.premultipliedAlpha;\\n    this.visible = source.visible;\\n    this.toneMapped = source.toneMapped;\\n    this.userData = JSON.parse(JSON.stringify(source.userData));\\n    return this;\\n  }\\n  dispose() {\\n    this.dispatchEvent({type: \\\\\\\"dispose\\\\\\\"});\\n  }\\n  set needsUpdate(value) {\\n    if (value === true)\\n      this.version++;\\n  }\\n};\\nMaterial.prototype.isMaterial = true;\\n\\n// ../../../node_modules/three/src/renderers/shaders/UniformsUtils.js\\nfunction cloneUniforms(src) {\\n  const dst = {};\\n  for (const u in src) {\\n    dst[u] = {};\\n    for (const p in src[u]) {\\n      const property = src[u][p];\\n      if (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture || property.isQuaternion)) {\\n        dst[u][p] = property.clone();\\n      } else if (Array.isArray(property)) {\\n        dst[u][p] = property.slice();\\n      } else {\\n        dst[u][p] = property;\\n      }\\n    }\\n  }\\n  return dst;\\n}\\nfunction mergeUniforms(uniforms) {\\n  const merged = {};\\n  for (let u = 0; u < uniforms.length; u++) {\\n    const tmp = cloneUniforms(uniforms[u]);\\n    for (const p in tmp) {\\n      merged[p] = tmp[p];\\n    }\\n  }\\n  return merged;\\n}\\nvar UniformsUtils = {clone: cloneUniforms, merge: mergeUniforms};\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js\\nvar default_vertex_glsl_default = `\\nvoid main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js\\nvar default_fragment_glsl_default = `\\nvoid main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\\n`;\\n\\n// ../../../node_modules/three/src/materials/ShaderMaterial.js\\nvar ShaderMaterial = class extends Material {\\n  constructor(parameters) {\\n    super();\\n    this.type = \\\\\\\"ShaderMaterial\\\\\\\";\\n    this.defines = {};\\n    this.uniforms = {};\\n    this.vertexShader = default_vertex_glsl_default;\\n    this.fragmentShader = default_fragment_glsl_default;\\n    this.linewidth = 1;\\n    this.wireframe = false;\\n    this.wireframeLinewidth = 1;\\n    this.fog = false;\\n    this.lights = false;\\n    this.clipping = false;\\n    this.extensions = {\\n      derivatives: false,\\n      fragDepth: false,\\n      drawBuffers: false,\\n      shaderTextureLOD: false\\n    };\\n    this.defaultAttributeValues = {\\n      color: [1, 1, 1],\\n      uv: [0, 0],\\n      uv2: [0, 0]\\n    };\\n    this.index0AttributeName = void 0;\\n    this.uniformsNeedUpdate = false;\\n    this.glslVersion = null;\\n    if (parameters !== void 0) {\\n      if (parameters.attributes !== void 0) {\\n        console.error(\\\\\\\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\\\\\\\");\\n      }\\n      this.setValues(parameters);\\n    }\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.fragmentShader = source.fragmentShader;\\n    this.vertexShader = source.vertexShader;\\n    this.uniforms = cloneUniforms(source.uniforms);\\n    this.defines = Object.assign({}, source.defines);\\n    this.wireframe = source.wireframe;\\n    this.wireframeLinewidth = source.wireframeLinewidth;\\n    this.lights = source.lights;\\n    this.clipping = source.clipping;\\n    this.extensions = Object.assign({}, source.extensions);\\n    this.glslVersion = source.glslVersion;\\n    return this;\\n  }\\n  toJSON(meta) {\\n    const data = super.toJSON(meta);\\n    data.glslVersion = this.glslVersion;\\n    data.uniforms = {};\\n    for (const name in this.uniforms) {\\n      const uniform = this.uniforms[name];\\n      const value = uniform.value;\\n      if (value && value.isTexture) {\\n        data.uniforms[name] = {\\n          type: \\\\\\\"t\\\\\\\",\\n          value: value.toJSON(meta).uuid\\n        };\\n      } else if (value && value.isColor) {\\n        data.uniforms[name] = {\\n          type: \\\\\\\"c\\\\\\\",\\n          value: value.getHex()\\n        };\\n      } else if (value && value.isVector2) {\\n        data.uniforms[name] = {\\n          type: \\\\\\\"v2\\\\\\\",\\n          value: value.toArray()\\n        };\\n      } else if (value && value.isVector3) {\\n        data.uniforms[name] = {\\n          type: \\\\\\\"v3\\\\\\\",\\n          value: value.toArray()\\n        };\\n      } else if (value && value.isVector4) {\\n        data.uniforms[name] = {\\n          type: \\\\\\\"v4\\\\\\\",\\n          value: value.toArray()\\n        };\\n      } else if (value && value.isMatrix3) {\\n        data.uniforms[name] = {\\n          type: \\\\\\\"m3\\\\\\\",\\n          value: value.toArray()\\n        };\\n      } else if (value && value.isMatrix4) {\\n        data.uniforms[name] = {\\n          type: \\\\\\\"m4\\\\\\\",\\n          value: value.toArray()\\n        };\\n      } else {\\n        data.uniforms[name] = {\\n          value\\n        };\\n      }\\n    }\\n    if (Object.keys(this.defines).length > 0)\\n      data.defines = this.defines;\\n    data.vertexShader = this.vertexShader;\\n    data.fragmentShader = this.fragmentShader;\\n    const extensions = {};\\n    for (const key in this.extensions) {\\n      if (this.extensions[key] === true)\\n        extensions[key] = true;\\n    }\\n    if (Object.keys(extensions).length > 0)\\n      data.extensions = extensions;\\n    return data;\\n  }\\n};\\nShaderMaterial.prototype.isShaderMaterial = true;\\n\\n// ../../../node_modules/three/src/math/Ray.js\\nvar _vector6 = /* @__PURE__ */ new Vector3();\\nvar _segCenter = /* @__PURE__ */ new Vector3();\\nvar _segDir = /* @__PURE__ */ new Vector3();\\nvar _diff = /* @__PURE__ */ new Vector3();\\nvar _edge1 = /* @__PURE__ */ new Vector3();\\nvar _edge2 = /* @__PURE__ */ new Vector3();\\nvar _normal = /* @__PURE__ */ new Vector3();\\nvar Ray = class {\\n  constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) {\\n    this.origin = origin;\\n    this.direction = direction;\\n  }\\n  set(origin, direction) {\\n    this.origin.copy(origin);\\n    this.direction.copy(direction);\\n    return this;\\n  }\\n  copy(ray) {\\n    this.origin.copy(ray.origin);\\n    this.direction.copy(ray.direction);\\n    return this;\\n  }\\n  at(t, target) {\\n    return target.copy(this.direction).multiplyScalar(t).add(this.origin);\\n  }\\n  lookAt(v) {\\n    this.direction.copy(v).sub(this.origin).normalize();\\n    return this;\\n  }\\n  recast(t) {\\n    this.origin.copy(this.at(t, _vector6));\\n    return this;\\n  }\\n  closestPointToPoint(point, target) {\\n    target.subVectors(point, this.origin);\\n    const directionDistance = target.dot(this.direction);\\n    if (directionDistance < 0) {\\n      return target.copy(this.origin);\\n    }\\n    return target.copy(this.direction).multiplyScalar(directionDistance).add(this.origin);\\n  }\\n  distanceToPoint(point) {\\n    return Math.sqrt(this.distanceSqToPoint(point));\\n  }\\n  distanceSqToPoint(point) {\\n    const directionDistance = _vector6.subVectors(point, this.origin).dot(this.direction);\\n    if (directionDistance < 0) {\\n      return this.origin.distanceToSquared(point);\\n    }\\n    _vector6.copy(this.direction).multiplyScalar(directionDistance).add(this.origin);\\n    return _vector6.distanceToSquared(point);\\n  }\\n  distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) {\\n    _segCenter.copy(v0).add(v1).multiplyScalar(0.5);\\n    _segDir.copy(v1).sub(v0).normalize();\\n    _diff.copy(this.origin).sub(_segCenter);\\n    const segExtent = v0.distanceTo(v1) * 0.5;\\n    const a01 = -this.direction.dot(_segDir);\\n    const b0 = _diff.dot(this.direction);\\n    const b1 = -_diff.dot(_segDir);\\n    const c = _diff.lengthSq();\\n    const det = Math.abs(1 - a01 * a01);\\n    let s0, s1, sqrDist, extDet;\\n    if (det > 0) {\\n      s0 = a01 * b1 - b0;\\n      s1 = a01 * b0 - b1;\\n      extDet = segExtent * det;\\n      if (s0 >= 0) {\\n        if (s1 >= -extDet) {\\n          if (s1 <= extDet) {\\n            const invDet = 1 / det;\\n            s0 *= invDet;\\n            s1 *= invDet;\\n            sqrDist = s0 * (s0 + a01 * s1 + 2 * b0) + s1 * (a01 * s0 + s1 + 2 * b1) + c;\\n          } else {\\n            s1 = segExtent;\\n            s0 = Math.max(0, -(a01 * s1 + b0));\\n            sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\\n          }\\n        } else {\\n          s1 = -segExtent;\\n          s0 = Math.max(0, -(a01 * s1 + b0));\\n          sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\\n        }\\n      } else {\\n        if (s1 <= -extDet) {\\n          s0 = Math.max(0, -(-a01 * segExtent + b0));\\n          s1 = s0 > 0 ? -segExtent : Math.min(Math.max(-segExtent, -b1), segExtent);\\n          sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\\n        } else if (s1 <= extDet) {\\n          s0 = 0;\\n          s1 = Math.min(Math.max(-segExtent, -b1), segExtent);\\n          sqrDist = s1 * (s1 + 2 * b1) + c;\\n        } else {\\n          s0 = Math.max(0, -(a01 * segExtent + b0));\\n          s1 = s0 > 0 ? segExtent : Math.min(Math.max(-segExtent, -b1), segExtent);\\n          sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\\n        }\\n      }\\n    } else {\\n      s1 = a01 > 0 ? -segExtent : segExtent;\\n      s0 = Math.max(0, -(a01 * s1 + b0));\\n      sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\\n    }\\n    if (optionalPointOnRay) {\\n      optionalPointOnRay.copy(this.direction).multiplyScalar(s0).add(this.origin);\\n    }\\n    if (optionalPointOnSegment) {\\n      optionalPointOnSegment.copy(_segDir).multiplyScalar(s1).add(_segCenter);\\n    }\\n    return sqrDist;\\n  }\\n  intersectSphere(sphere, target) {\\n    _vector6.subVectors(sphere.center, this.origin);\\n    const tca = _vector6.dot(this.direction);\\n    const d2 = _vector6.dot(_vector6) - tca * tca;\\n    const radius2 = sphere.radius * sphere.radius;\\n    if (d2 > radius2)\\n      return null;\\n    const thc = Math.sqrt(radius2 - d2);\\n    const t0 = tca - thc;\\n    const t1 = tca + thc;\\n    if (t0 < 0 && t1 < 0)\\n      return null;\\n    if (t0 < 0)\\n      return this.at(t1, target);\\n    return this.at(t0, target);\\n  }\\n  intersectsSphere(sphere) {\\n    return this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius;\\n  }\\n  distanceToPlane(plane) {\\n    const denominator = plane.normal.dot(this.direction);\\n    if (denominator === 0) {\\n      if (plane.distanceToPoint(this.origin) === 0) {\\n        return 0;\\n      }\\n      return null;\\n    }\\n    const t = -(this.origin.dot(plane.normal) + plane.constant) / denominator;\\n    return t >= 0 ? t : null;\\n  }\\n  intersectPlane(plane, target) {\\n    const t = this.distanceToPlane(plane);\\n    if (t === null) {\\n      return null;\\n    }\\n    return this.at(t, target);\\n  }\\n  intersectsPlane(plane) {\\n    const distToPoint = plane.distanceToPoint(this.origin);\\n    if (distToPoint === 0) {\\n      return true;\\n    }\\n    const denominator = plane.normal.dot(this.direction);\\n    if (denominator * distToPoint < 0) {\\n      return true;\\n    }\\n    return false;\\n  }\\n  intersectBox(box, target) {\\n    let tmin, tmax, tymin, tymax, tzmin, tzmax;\\n    const invdirx = 1 / this.direction.x, invdiry = 1 / this.direction.y, invdirz = 1 / this.direction.z;\\n    const origin = this.origin;\\n    if (invdirx >= 0) {\\n      tmin = (box.min.x - origin.x) * invdirx;\\n      tmax = (box.max.x - origin.x) * invdirx;\\n    } else {\\n      tmin = (box.max.x - origin.x) * invdirx;\\n      tmax = (box.min.x - origin.x) * invdirx;\\n    }\\n    if (invdiry >= 0) {\\n      tymin = (box.min.y - origin.y) * invdiry;\\n      tymax = (box.max.y - origin.y) * invdiry;\\n    } else {\\n      tymin = (box.max.y - origin.y) * invdiry;\\n      tymax = (box.min.y - origin.y) * invdiry;\\n    }\\n    if (tmin > tymax || tymin > tmax)\\n      return null;\\n    if (tymin > tmin || tmin !== tmin)\\n      tmin = tymin;\\n    if (tymax < tmax || tmax !== tmax)\\n      tmax = tymax;\\n    if (invdirz >= 0) {\\n      tzmin = (box.min.z - origin.z) * invdirz;\\n      tzmax = (box.max.z - origin.z) * invdirz;\\n    } else {\\n      tzmin = (box.max.z - origin.z) * invdirz;\\n      tzmax = (box.min.z - origin.z) * invdirz;\\n    }\\n    if (tmin > tzmax || tzmin > tmax)\\n      return null;\\n    if (tzmin > tmin || tmin !== tmin)\\n      tmin = tzmin;\\n    if (tzmax < tmax || tmax !== tmax)\\n      tmax = tzmax;\\n    if (tmax < 0)\\n      return null;\\n    return this.at(tmin >= 0 ? tmin : tmax, target);\\n  }\\n  intersectsBox(box) {\\n    return this.intersectBox(box, _vector6) !== null;\\n  }\\n  intersectTriangle(a, b, c, backfaceCulling, target) {\\n    _edge1.subVectors(b, a);\\n    _edge2.subVectors(c, a);\\n    _normal.crossVectors(_edge1, _edge2);\\n    let DdN = this.direction.dot(_normal);\\n    let sign;\\n    if (DdN > 0) {\\n      if (backfaceCulling)\\n        return null;\\n      sign = 1;\\n    } else if (DdN < 0) {\\n      sign = -1;\\n      DdN = -DdN;\\n    } else {\\n      return null;\\n    }\\n    _diff.subVectors(this.origin, a);\\n    const DdQxE2 = sign * this.direction.dot(_edge2.crossVectors(_diff, _edge2));\\n    if (DdQxE2 < 0) {\\n      return null;\\n    }\\n    const DdE1xQ = sign * this.direction.dot(_edge1.cross(_diff));\\n    if (DdE1xQ < 0) {\\n      return null;\\n    }\\n    if (DdQxE2 + DdE1xQ > DdN) {\\n      return null;\\n    }\\n    const QdN = -sign * _diff.dot(_normal);\\n    if (QdN < 0) {\\n      return null;\\n    }\\n    return this.at(QdN / DdN, target);\\n  }\\n  applyMatrix4(matrix4) {\\n    this.origin.applyMatrix4(matrix4);\\n    this.direction.transformDirection(matrix4);\\n    return this;\\n  }\\n  equals(ray) {\\n    return ray.origin.equals(this.origin) && ray.direction.equals(this.direction);\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n};\\n\\n// ../../../node_modules/three/src/math/Triangle.js\\nvar _v02 = /* @__PURE__ */ new Vector3();\\nvar _v15 = /* @__PURE__ */ new Vector3();\\nvar _v22 = /* @__PURE__ */ new Vector3();\\nvar _v3 = /* @__PURE__ */ new Vector3();\\nvar _vab = /* @__PURE__ */ new Vector3();\\nvar _vac = /* @__PURE__ */ new Vector3();\\nvar _vbc = /* @__PURE__ */ new Vector3();\\nvar _vap = /* @__PURE__ */ new Vector3();\\nvar _vbp = /* @__PURE__ */ new Vector3();\\nvar _vcp = /* @__PURE__ */ new Vector3();\\nvar Triangle = class {\\n  constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) {\\n    this.a = a;\\n    this.b = b;\\n    this.c = c;\\n  }\\n  static getNormal(a, b, c, target) {\\n    target.subVectors(c, b);\\n    _v02.subVectors(a, b);\\n    target.cross(_v02);\\n    const targetLengthSq = target.lengthSq();\\n    if (targetLengthSq > 0) {\\n      return target.multiplyScalar(1 / Math.sqrt(targetLengthSq));\\n    }\\n    return target.set(0, 0, 0);\\n  }\\n  static getBarycoord(point, a, b, c, target) {\\n    _v02.subVectors(c, a);\\n    _v15.subVectors(b, a);\\n    _v22.subVectors(point, a);\\n    const dot00 = _v02.dot(_v02);\\n    const dot01 = _v02.dot(_v15);\\n    const dot02 = _v02.dot(_v22);\\n    const dot11 = _v15.dot(_v15);\\n    const dot12 = _v15.dot(_v22);\\n    const denom = dot00 * dot11 - dot01 * dot01;\\n    if (denom === 0) {\\n      return target.set(-2, -1, -1);\\n    }\\n    const invDenom = 1 / denom;\\n    const u = (dot11 * dot02 - dot01 * dot12) * invDenom;\\n    const v = (dot00 * dot12 - dot01 * dot02) * invDenom;\\n    return target.set(1 - u - v, v, u);\\n  }\\n  static containsPoint(point, a, b, c) {\\n    this.getBarycoord(point, a, b, c, _v3);\\n    return _v3.x >= 0 && _v3.y >= 0 && _v3.x + _v3.y <= 1;\\n  }\\n  static getUV(point, p1, p2, p3, uv1, uv2, uv3, target) {\\n    this.getBarycoord(point, p1, p2, p3, _v3);\\n    target.set(0, 0);\\n    target.addScaledVector(uv1, _v3.x);\\n    target.addScaledVector(uv2, _v3.y);\\n    target.addScaledVector(uv3, _v3.z);\\n    return target;\\n  }\\n  static isFrontFacing(a, b, c, direction) {\\n    _v02.subVectors(c, b);\\n    _v15.subVectors(a, b);\\n    return _v02.cross(_v15).dot(direction) < 0 ? true : false;\\n  }\\n  set(a, b, c) {\\n    this.a.copy(a);\\n    this.b.copy(b);\\n    this.c.copy(c);\\n    return this;\\n  }\\n  setFromPointsAndIndices(points2, i0, i1, i2) {\\n    this.a.copy(points2[i0]);\\n    this.b.copy(points2[i1]);\\n    this.c.copy(points2[i2]);\\n    return this;\\n  }\\n  setFromAttributeAndIndices(attribute, i0, i1, i2) {\\n    this.a.fromBufferAttribute(attribute, i0);\\n    this.b.fromBufferAttribute(attribute, i1);\\n    this.c.fromBufferAttribute(attribute, i2);\\n    return this;\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n  copy(triangle) {\\n    this.a.copy(triangle.a);\\n    this.b.copy(triangle.b);\\n    this.c.copy(triangle.c);\\n    return this;\\n  }\\n  getArea() {\\n    _v02.subVectors(this.c, this.b);\\n    _v15.subVectors(this.a, this.b);\\n    return _v02.cross(_v15).length() * 0.5;\\n  }\\n  getMidpoint(target) {\\n    return target.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3);\\n  }\\n  getNormal(target) {\\n    return Triangle.getNormal(this.a, this.b, this.c, target);\\n  }\\n  getPlane(target) {\\n    return target.setFromCoplanarPoints(this.a, this.b, this.c);\\n  }\\n  getBarycoord(point, target) {\\n    return Triangle.getBarycoord(point, this.a, this.b, this.c, target);\\n  }\\n  getUV(point, uv1, uv2, uv3, target) {\\n    return Triangle.getUV(point, this.a, this.b, this.c, uv1, uv2, uv3, target);\\n  }\\n  containsPoint(point) {\\n    return Triangle.containsPoint(point, this.a, this.b, this.c);\\n  }\\n  isFrontFacing(direction) {\\n    return Triangle.isFrontFacing(this.a, this.b, this.c, direction);\\n  }\\n  intersectsBox(box) {\\n    return box.intersectsTriangle(this);\\n  }\\n  closestPointToPoint(p, target) {\\n    const a = this.a, b = this.b, c = this.c;\\n    let v, w;\\n    _vab.subVectors(b, a);\\n    _vac.subVectors(c, a);\\n    _vap.subVectors(p, a);\\n    const d1 = _vab.dot(_vap);\\n    const d2 = _vac.dot(_vap);\\n    if (d1 <= 0 && d2 <= 0) {\\n      return target.copy(a);\\n    }\\n    _vbp.subVectors(p, b);\\n    const d3 = _vab.dot(_vbp);\\n    const d4 = _vac.dot(_vbp);\\n    if (d3 >= 0 && d4 <= d3) {\\n      return target.copy(b);\\n    }\\n    const vc = d1 * d4 - d3 * d2;\\n    if (vc <= 0 && d1 >= 0 && d3 <= 0) {\\n      v = d1 / (d1 - d3);\\n      return target.copy(a).addScaledVector(_vab, v);\\n    }\\n    _vcp.subVectors(p, c);\\n    const d5 = _vab.dot(_vcp);\\n    const d6 = _vac.dot(_vcp);\\n    if (d6 >= 0 && d5 <= d6) {\\n      return target.copy(c);\\n    }\\n    const vb = d5 * d2 - d1 * d6;\\n    if (vb <= 0 && d2 >= 0 && d6 <= 0) {\\n      w = d2 / (d2 - d6);\\n      return target.copy(a).addScaledVector(_vac, w);\\n    }\\n    const va = d3 * d6 - d5 * d4;\\n    if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) {\\n      _vbc.subVectors(c, b);\\n      w = (d4 - d3) / (d4 - d3 + (d5 - d6));\\n      return target.copy(b).addScaledVector(_vbc, w);\\n    }\\n    const denom = 1 / (va + vb + vc);\\n    v = vb * denom;\\n    w = vc * denom;\\n    return target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w);\\n  }\\n  equals(triangle) {\\n    return triangle.a.equals(this.a) && triangle.b.equals(this.b) && triangle.c.equals(this.c);\\n  }\\n};\\n\\n// ../../../node_modules/three/src/materials/MeshBasicMaterial.js\\nvar MeshBasicMaterial = class extends Material {\\n  constructor(parameters) {\\n    super();\\n    this.type = \\\\\\\"MeshBasicMaterial\\\\\\\";\\n    this.color = new Color(16777215);\\n    this.map = null;\\n    this.lightMap = null;\\n    this.lightMapIntensity = 1;\\n    this.aoMap = null;\\n    this.aoMapIntensity = 1;\\n    this.specularMap = null;\\n    this.alphaMap = null;\\n    this.envMap = null;\\n    this.combine = MultiplyOperation;\\n    this.reflectivity = 1;\\n    this.refractionRatio = 0.98;\\n    this.wireframe = false;\\n    this.wireframeLinewidth = 1;\\n    this.wireframeLinecap = \\\\\\\"round\\\\\\\";\\n    this.wireframeLinejoin = \\\\\\\"round\\\\\\\";\\n    this.setValues(parameters);\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.color.copy(source.color);\\n    this.map = source.map;\\n    this.lightMap = source.lightMap;\\n    this.lightMapIntensity = source.lightMapIntensity;\\n    this.aoMap = source.aoMap;\\n    this.aoMapIntensity = source.aoMapIntensity;\\n    this.specularMap = source.specularMap;\\n    this.alphaMap = source.alphaMap;\\n    this.envMap = source.envMap;\\n    this.combine = source.combine;\\n    this.reflectivity = source.reflectivity;\\n    this.refractionRatio = source.refractionRatio;\\n    this.wireframe = source.wireframe;\\n    this.wireframeLinewidth = source.wireframeLinewidth;\\n    this.wireframeLinecap = source.wireframeLinecap;\\n    this.wireframeLinejoin = source.wireframeLinejoin;\\n    return this;\\n  }\\n};\\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\\n\\n// ../../../node_modules/three/src/objects/Mesh.js\\nvar _inverseMatrix = /* @__PURE__ */ new Matrix4();\\nvar _ray = /* @__PURE__ */ new Ray();\\nvar _sphere2 = /* @__PURE__ */ new Sphere();\\nvar _vA = /* @__PURE__ */ new Vector3();\\nvar _vB = /* @__PURE__ */ new Vector3();\\nvar _vC = /* @__PURE__ */ new Vector3();\\nvar _tempA = /* @__PURE__ */ new Vector3();\\nvar _tempB = /* @__PURE__ */ new Vector3();\\nvar _tempC = /* @__PURE__ */ new Vector3();\\nvar _morphA = /* @__PURE__ */ new Vector3();\\nvar _morphB = /* @__PURE__ */ new Vector3();\\nvar _morphC = /* @__PURE__ */ new Vector3();\\nvar _uvA = /* @__PURE__ */ new Vector2();\\nvar _uvB = /* @__PURE__ */ new Vector2();\\nvar _uvC = /* @__PURE__ */ new Vector2();\\nvar _intersectionPoint = /* @__PURE__ */ new Vector3();\\nvar _intersectionPointWorld = /* @__PURE__ */ new Vector3();\\nvar Mesh = class extends Object3D {\\n  constructor(geometry = new BufferGeometry(), material = new MeshBasicMaterial()) {\\n    super();\\n    this.type = \\\\\\\"Mesh\\\\\\\";\\n    this.geometry = geometry;\\n    this.material = material;\\n    this.updateMorphTargets();\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    if (source.morphTargetInfluences !== void 0) {\\n      this.morphTargetInfluences = source.morphTargetInfluences.slice();\\n    }\\n    if (source.morphTargetDictionary !== void 0) {\\n      this.morphTargetDictionary = Object.assign({}, source.morphTargetDictionary);\\n    }\\n    this.material = source.material;\\n    this.geometry = source.geometry;\\n    return this;\\n  }\\n  updateMorphTargets() {\\n    const geometry = this.geometry;\\n    if (geometry.isBufferGeometry) {\\n      const morphAttributes = geometry.morphAttributes;\\n      const keys = Object.keys(morphAttributes);\\n      if (keys.length > 0) {\\n        const morphAttribute = morphAttributes[keys[0]];\\n        if (morphAttribute !== void 0) {\\n          this.morphTargetInfluences = [];\\n          this.morphTargetDictionary = {};\\n          for (let m = 0, ml = morphAttribute.length; m < ml; m++) {\\n            const name = morphAttribute[m].name || String(m);\\n            this.morphTargetInfluences.push(0);\\n            this.morphTargetDictionary[name] = m;\\n          }\\n        }\\n      }\\n    } else {\\n      const morphTargets = geometry.morphTargets;\\n      if (morphTargets !== void 0 && morphTargets.length > 0) {\\n        console.error(\\\\\\\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");\\n      }\\n    }\\n  }\\n  raycast(raycaster, intersects) {\\n    const geometry = this.geometry;\\n    const material = this.material;\\n    const matrixWorld = this.matrixWorld;\\n    if (material === void 0)\\n      return;\\n    if (geometry.boundingSphere === null)\\n      geometry.computeBoundingSphere();\\n    _sphere2.copy(geometry.boundingSphere);\\n    _sphere2.applyMatrix4(matrixWorld);\\n    if (raycaster.ray.intersectsSphere(_sphere2) === false)\\n      return;\\n    _inverseMatrix.copy(matrixWorld).invert();\\n    _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);\\n    if (geometry.boundingBox !== null) {\\n      if (_ray.intersectsBox(geometry.boundingBox) === false)\\n        return;\\n    }\\n    let intersection;\\n    if (geometry.isBufferGeometry) {\\n      const index = geometry.index;\\n      const position = geometry.attributes.position;\\n      const morphPosition = geometry.morphAttributes.position;\\n      const morphTargetsRelative = geometry.morphTargetsRelative;\\n      const uv = geometry.attributes.uv;\\n      const uv2 = geometry.attributes.uv2;\\n      const groups = geometry.groups;\\n      const drawRange = geometry.drawRange;\\n      if (index !== null) {\\n        if (Array.isArray(material)) {\\n          for (let i = 0, il = groups.length; i < il; i++) {\\n            const group = groups[i];\\n            const groupMaterial = material[group.materialIndex];\\n            const start = Math.max(group.start, drawRange.start);\\n            const end = Math.min(index.count, Math.min(group.start + group.count, drawRange.start + drawRange.count));\\n            for (let j = start, jl = end; j < jl; j += 3) {\\n              const a = index.getX(j);\\n              const b = index.getX(j + 1);\\n              const c = index.getX(j + 2);\\n              intersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);\\n              if (intersection) {\\n                intersection.faceIndex = Math.floor(j / 3);\\n                intersection.face.materialIndex = group.materialIndex;\\n                intersects.push(intersection);\\n              }\\n            }\\n          }\\n        } else {\\n          const start = Math.max(0, drawRange.start);\\n          const end = Math.min(index.count, drawRange.start + drawRange.count);\\n          for (let i = start, il = end; i < il; i += 3) {\\n            const a = index.getX(i);\\n            const b = index.getX(i + 1);\\n            const c = index.getX(i + 2);\\n            intersection = checkBufferGeometryIntersection(this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);\\n            if (intersection) {\\n              intersection.faceIndex = Math.floor(i / 3);\\n              intersects.push(intersection);\\n            }\\n          }\\n        }\\n      } else if (position !== void 0) {\\n        if (Array.isArray(material)) {\\n          for (let i = 0, il = groups.length; i < il; i++) {\\n            const group = groups[i];\\n            const groupMaterial = material[group.materialIndex];\\n            const start = Math.max(group.start, drawRange.start);\\n            const end = Math.min(position.count, Math.min(group.start + group.count, drawRange.start + drawRange.count));\\n            for (let j = start, jl = end; j < jl; j += 3) {\\n              const a = j;\\n              const b = j + 1;\\n              const c = j + 2;\\n              intersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);\\n              if (intersection) {\\n                intersection.faceIndex = Math.floor(j / 3);\\n                intersection.face.materialIndex = group.materialIndex;\\n                intersects.push(intersection);\\n              }\\n            }\\n          }\\n        } else {\\n          const start = Math.max(0, drawRange.start);\\n          const end = Math.min(position.count, drawRange.start + drawRange.count);\\n          for (let i = start, il = end; i < il; i += 3) {\\n            const a = i;\\n            const b = i + 1;\\n            const c = i + 2;\\n            intersection = checkBufferGeometryIntersection(this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);\\n            if (intersection) {\\n              intersection.faceIndex = Math.floor(i / 3);\\n              intersects.push(intersection);\\n            }\\n          }\\n        }\\n      }\\n    } else if (geometry.isGeometry) {\\n      console.error(\\\\\\\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");\\n    }\\n  }\\n};\\nMesh.prototype.isMesh = true;\\nfunction checkIntersection(object, material, raycaster, ray, pA, pB, pC, point) {\\n  let intersect;\\n  if (material.side === BackSide) {\\n    intersect = ray.intersectTriangle(pC, pB, pA, true, point);\\n  } else {\\n    intersect = ray.intersectTriangle(pA, pB, pC, material.side !== DoubleSide, point);\\n  }\\n  if (intersect === null)\\n    return null;\\n  _intersectionPointWorld.copy(point);\\n  _intersectionPointWorld.applyMatrix4(object.matrixWorld);\\n  const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld);\\n  if (distance < raycaster.near || distance > raycaster.far)\\n    return null;\\n  return {\\n    distance,\\n    point: _intersectionPointWorld.clone(),\\n    object\\n  };\\n}\\nfunction checkBufferGeometryIntersection(object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c) {\\n  _vA.fromBufferAttribute(position, a);\\n  _vB.fromBufferAttribute(position, b);\\n  _vC.fromBufferAttribute(position, c);\\n  const morphInfluences = object.morphTargetInfluences;\\n  if (morphPosition && morphInfluences) {\\n    _morphA.set(0, 0, 0);\\n    _morphB.set(0, 0, 0);\\n    _morphC.set(0, 0, 0);\\n    for (let i = 0, il = morphPosition.length; i < il; i++) {\\n      const influence = morphInfluences[i];\\n      const morphAttribute = morphPosition[i];\\n      if (influence === 0)\\n        continue;\\n      _tempA.fromBufferAttribute(morphAttribute, a);\\n      _tempB.fromBufferAttribute(morphAttribute, b);\\n      _tempC.fromBufferAttribute(morphAttribute, c);\\n      if (morphTargetsRelative) {\\n        _morphA.addScaledVector(_tempA, influence);\\n        _morphB.addScaledVector(_tempB, influence);\\n        _morphC.addScaledVector(_tempC, influence);\\n      } else {\\n        _morphA.addScaledVector(_tempA.sub(_vA), influence);\\n        _morphB.addScaledVector(_tempB.sub(_vB), influence);\\n        _morphC.addScaledVector(_tempC.sub(_vC), influence);\\n      }\\n    }\\n    _vA.add(_morphA);\\n    _vB.add(_morphB);\\n    _vC.add(_morphC);\\n  }\\n  if (object.isSkinnedMesh) {\\n    object.boneTransform(a, _vA);\\n    object.boneTransform(b, _vB);\\n    object.boneTransform(c, _vC);\\n  }\\n  const intersection = checkIntersection(object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint);\\n  if (intersection) {\\n    if (uv) {\\n      _uvA.fromBufferAttribute(uv, a);\\n      _uvB.fromBufferAttribute(uv, b);\\n      _uvC.fromBufferAttribute(uv, c);\\n      intersection.uv = Triangle.getUV(_intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2());\\n    }\\n    if (uv2) {\\n      _uvA.fromBufferAttribute(uv2, a);\\n      _uvB.fromBufferAttribute(uv2, b);\\n      _uvC.fromBufferAttribute(uv2, c);\\n      intersection.uv2 = Triangle.getUV(_intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2());\\n    }\\n    const face = {\\n      a,\\n      b,\\n      c,\\n      normal: new Vector3(),\\n      materialIndex: 0\\n    };\\n    Triangle.getNormal(_vA, _vB, _vC, face.normal);\\n    intersection.face = face;\\n  }\\n  return intersection;\\n}\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js\\nvar alphamap_fragment_glsl_default = `\\n#ifdef USE_ALPHAMAP\\n\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js\\nvar alphamap_pars_fragment_glsl_default = `\\n#ifdef USE_ALPHAMAP\\n\\n\\tuniform sampler2D alphaMap;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js\\nvar alphatest_fragment_glsl_default = `\\n#ifdef USE_ALPHATEST\\n\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js\\nvar alphatest_pars_fragment_glsl_default = `\\n#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js\\nvar aomap_fragment_glsl_default = `\\n#ifdef USE_AOMAP\\n\\n\\t// reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js\\nvar aomap_pars_fragment_glsl_default = `\\n#ifdef USE_AOMAP\\n\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js\\nvar begin_vertex_glsl_default = `\\nvec3 transformed = vec3( position );\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js\\nvar beginnormal_vertex_glsl_default = `\\nvec3 objectNormal = vec3( normal );\\n\\n#ifdef USE_TANGENT\\n\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js\\nvar bsdfs_glsl_default = `\\n\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n\\n} // validated\\n\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\n\\t// Original approximation by Christophe Schlick '94\\n\\t// float fresnel = pow( 1.0 - dotVH, 5.0 );\\n\\n\\t// Optimized variant (presented by Epic at SIGGRAPH '13)\\n\\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n\\n} // validated\\n\\n// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2\\n// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\n\\tfloat a2 = pow2( alpha );\\n\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n\\n}\\n\\n// Microfacet Models for Refraction through Rough Surfaces - equation (33)\\n// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html\\n// alpha is \\\\\\\"roughness squared\\\\\\\" in Disney\\\\u2019s reparameterization\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\n\\tfloat a2 = pow2( alpha );\\n\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; // avoid alpha = 0 with dotNH = 1\\n\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n\\n}\\n\\n// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\\n\\n\\tfloat alpha = pow2( roughness ); // UE4's roughness\\n\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\n\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\n\\treturn F * ( V * D );\\n\\n}\\n\\n// Rect Area Light\\n\\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\\n// code: https://github.com/selfshadow/ltc_code/\\n\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\n\\t// texture parameterized by sqrt( GGX alpha ) and sqrt( 1 - cos( theta ) )\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\n\\treturn uv;\\n\\n}\\n\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\n\\t// Real-Time Area Lighting: a Journey from Research to Production (p.102)\\n\\t// An approximation of the form factor of a horizon-clipped rectangle.\\n\\n\\tfloat l = length( f );\\n\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n\\n}\\n\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\n\\tfloat x = dot( v1, v2 );\\n\\n\\tfloat y = abs( x );\\n\\n\\t// rational polynomial approximation to theta / sin( theta ) / 2PI\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n\\n}\\n\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\n\\t// bail if point is on back side of plane of light\\n\\t// assumes ccw winding order of light vertices\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\n\\t// construct orthonormal basis around N\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 ); // negated from paper; possibly due to a different handedness of world coordinate system\\n\\n\\t// compute transform\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\n\\t// transform rect\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\n\\t// project rect onto sphere\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\n\\t// calculate vector form factor\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\n\\t// adjust for horizon clipping\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\n/*\\n\\t// alternate method of adjusting for horizon clipping (see referece)\\n\\t// refactoring required\\n\\tfloat len = length( vectorFormFactor );\\n\\tfloat z = vectorFormFactor.z / len;\\n\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\n\\t// tabulated horizon-clipped sphere, apparently...\\n\\tvec2 uv = vec2( z * 0.5 + 0.5, len );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\n\\tfloat scale = texture2D( ltc_2, uv ).w;\\n\\n\\tfloat result = len * scale;\\n*/\\n\\n\\treturn vec3( result );\\n\\n}\\n\\n// End Rect Area Light\\n\\n\\nfloat G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\\n\\n\\t// geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\\n\\treturn 0.25;\\n\\n}\\n\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n\\n}\\n\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\n\\tfloat G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\\n\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\n\\treturn F * ( G * D );\\n\\n} // validated\\n\\n#if defined( USE_SHEEN )\\n\\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\n\\tfloat alpha = pow2( roughness );\\n\\n\\t// Estevez and Kulla 2017, \\\\\\\"Production Friendly Microfacet Sheen BRDF\\\\\\\"\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 ); // 2^(-14/2), so sin2h^2 > 0 in fp16\\n\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n\\n}\\n\\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\n\\t// Neubelt and Pettineo 2013, \\\\\\\"Crafting a Next-gen Material Pipeline for The Order: 1886\\\\\\\"\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n\\n}\\n\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenTint, const in float sheenRoughness ) {\\n\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\n\\treturn sheenTint * ( D * V );\\n\\n}\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js\\nvar bumpmap_pars_fragment_glsl_default = `\\n#ifdef USE_BUMPMAP\\n\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\n\\t// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen\\n\\t// http://api.unrealengine.com/attachments/Engine/Rendering/LightingAndShadows/BumpMappingWithoutTangentSpace/mm_sfgrad_bump.pdf\\n\\n\\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\\n\\n\\tvec2 dHdxy_fwd() {\\n\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\n\\t\\treturn vec2( dBx, dBy );\\n\\n\\t}\\n\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\n\\t\\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\\n\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\t\\t// normalized\\n\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\n\\t}\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js\\nvar clipping_planes_fragment_glsl_default = `\\n#if NUM_CLIPPING_PLANES > 0\\n\\n\\tvec4 plane;\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\n\\t\\tbool clipped = true;\\n\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\n\\t\\tif ( clipped ) discard;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js\\nvar clipping_planes_pars_fragment_glsl_default = `\\n#if NUM_CLIPPING_PLANES > 0\\n\\n\\tvarying vec3 vClipPosition;\\n\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js\\nvar clipping_planes_pars_vertex_glsl_default = `\\n#if NUM_CLIPPING_PLANES > 0\\n\\n\\tvarying vec3 vClipPosition;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js\\nvar clipping_planes_vertex_glsl_default = `\\n#if NUM_CLIPPING_PLANES > 0\\n\\n\\tvClipPosition = - mvPosition.xyz;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js\\nvar color_fragment_glsl_default = `\\n#if defined( USE_COLOR_ALPHA )\\n\\n\\tdiffuseColor *= vColor;\\n\\n#elif defined( USE_COLOR )\\n\\n\\tdiffuseColor.rgb *= vColor;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js\\nvar color_pars_fragment_glsl_default = `\\n#if defined( USE_COLOR_ALPHA )\\n\\n\\tvarying vec4 vColor;\\n\\n#elif defined( USE_COLOR )\\n\\n\\tvarying vec3 vColor;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js\\nvar color_pars_vertex_glsl_default = `\\n#if defined( USE_COLOR_ALPHA )\\n\\n\\tvarying vec4 vColor;\\n\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\n\\tvarying vec3 vColor;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js\\nvar color_vertex_glsl_default = `\\n#if defined( USE_COLOR_ALPHA )\\n\\n\\tvColor = vec4( 1.0 );\\n\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\n\\tvColor = vec3( 1.0 );\\n\\n#endif\\n\\n#ifdef USE_COLOR\\n\\n\\tvColor *= color;\\n\\n#endif\\n\\n#ifdef USE_INSTANCING_COLOR\\n\\n\\tvColor.xyz *= instanceColor.xyz;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js\\nvar common_glsl_default = `\\n#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n\\n#ifndef saturate\\n// <tonemapping_pars_fragment> may have defined saturate() already\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\n\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\n\\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\\nhighp float rand( const in vec2 uv ) {\\n\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\n\\treturn fract( sin( sn ) * c );\\n\\n}\\n\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\n\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\n\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\n\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\n\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n\\n}\\n\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\n\\t// dir can be either a direction vector or a normal vector\\n\\t// upper-left 3x3 of matrix is assumed to be orthogonal\\n\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n\\n}\\n\\nmat3 transposeMat3( const in mat3 m ) {\\n\\n\\tmat3 tmp;\\n\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\n\\treturn tmp;\\n\\n}\\n\\n// https://en.wikipedia.org/wiki/Relative_luminance\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\n\\treturn dot( weights, color.rgb );\\n\\n}\\n\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n\\n}\\n\\nvec2 equirectUv( in vec3 dir ) {\\n\\n\\t// dir is assumed to be unit length\\n\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\n\\treturn vec2( u, v );\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js\\nvar cube_uv_reflection_fragment_glsl_default = `\\n#ifdef ENVMAP_TYPE_CUBE_UV\\n\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\n\\t// These shader functions convert between the UV coordinates of a single face of\\n\\t// a cubemap, the 0-5 integer index of a cube face, and the direction vector for\\n\\t// sampling a textureCube (not generally normalized ).\\n\\n\\tfloat getFace( vec3 direction ) {\\n\\n\\t\\tvec3 absDirection = abs( direction );\\n\\n\\t\\tfloat face = - 1.0;\\n\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\n\\t\\t\\telse\\n\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\n\\t\\t} else {\\n\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\n\\t\\t\\telse\\n\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\n\\t\\t}\\n\\n\\t\\treturn face;\\n\\n\\t}\\n\\n\\t// RH coordinate system; PMREM face-indexing convention\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\n\\t\\tvec2 uv;\\n\\n\\t\\tif ( face == 0.0 ) {\\n\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x ); // pos x\\n\\n\\t\\t} else if ( face == 1.0 ) {\\n\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y ); // pos y\\n\\n\\t\\t} else if ( face == 2.0 ) {\\n\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z ); // pos z\\n\\n\\t\\t} else if ( face == 3.0 ) {\\n\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x ); // neg x\\n\\n\\t\\t} else if ( face == 4.0 ) {\\n\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y ); // neg y\\n\\n\\t\\t} else {\\n\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z ); // neg z\\n\\n\\t\\t}\\n\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\n\\t}\\n\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\n\\t\\tfloat face = getFace( direction );\\n\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\n\\t\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\n\\t\\tvec2 f = fract( uv );\\n\\n\\t\\tuv += 0.5 - f;\\n\\n\\t\\tif ( face > 2.0 ) {\\n\\n\\t\\t\\tuv.y += faceSize;\\n\\n\\t\\t\\tface -= 3.0;\\n\\n\\t\\t}\\n\\n\\t\\tuv.x += face * faceSize;\\n\\n\\t\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\n\\t\\t}\\n\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\n\\t\\tuv *= texelSize;\\n\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\n\\t\\tuv.x += texelSize;\\n\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\n\\t\\tuv.y += texelSize;\\n\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\n\\t\\tuv.x -= texelSize;\\n\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\n\\t\\treturn mix( tm, bm, f.y );\\n\\n\\t}\\n\\n\\t// These defines must match with PMREMGenerator\\n\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\n\\tfloat roughnessToMip( float roughness ) {\\n\\n\\t\\tfloat mip = 0.0;\\n\\n\\t\\tif ( roughness >= r1 ) {\\n\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\n\\n\\t\\t} else {\\n\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness ); // 1.16 = 1.79^0.25\\n\\t\\t}\\n\\n\\t\\treturn mip;\\n\\n\\t}\\n\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\n\\n\\t\\tfloat mipF = fract( mip );\\n\\n\\t\\tfloat mipInt = floor( mip );\\n\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\n\\t\\tif ( mipF == 0.0 ) {\\n\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\n\\t\\t} else {\\n\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\n\\t\\t}\\n\\n\\t}\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js\\nvar defaultnormal_vertex_glsl_default = `\\nvec3 transformedNormal = objectNormal;\\n\\n#ifdef USE_INSTANCING\\n\\n\\t// this is in lieu of a per-instance normal-matrix\\n\\t// shear transforms in the instance matrix are not supported\\n\\n\\tmat3 m = mat3( instanceMatrix );\\n\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\n\\ttransformedNormal = m * transformedNormal;\\n\\n#endif\\n\\ntransformedNormal = normalMatrix * transformedNormal;\\n\\n#ifdef FLIP_SIDED\\n\\n\\ttransformedNormal = - transformedNormal;\\n\\n#endif\\n\\n#ifdef USE_TANGENT\\n\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\n\\t#ifdef FLIP_SIDED\\n\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js\\nvar displacementmap_pars_vertex_glsl_default = `\\n#ifdef USE_DISPLACEMENTMAP\\n\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js\\nvar displacementmap_vertex_glsl_default = `\\n#ifdef USE_DISPLACEMENTMAP\\n\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js\\nvar emissivemap_fragment_glsl_default = `\\n#ifdef USE_EMISSIVEMAP\\n\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js\\nvar emissivemap_pars_fragment_glsl_default = `\\n#ifdef USE_EMISSIVEMAP\\n\\n\\tuniform sampler2D emissiveMap;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/encodings_fragment.glsl.js\\nvar encodings_fragment_glsl_default = `\\ngl_FragColor = linearToOutputTexel( gl_FragColor );\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js\\nvar encodings_pars_fragment_glsl_default = `\\n// For a discussion of what this is, please read this: http://lousodrome.net/blog/light/2013/05/26/gamma-correct-and-hdr-rendering-in-a-32-bits-buffer/\\n\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\n\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\n\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\n\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\n\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\\n\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\n\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n\\t// return vec4( value.brg, ( 3.0 + 128.0 ) / 256.0 );\\n}\\n\\n// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\n\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\n\\n// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\n\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\t// NOTE: The implementation with min causes the shader to not compile on\\n\\t// a common Alcatel A502DL in Chrome 78/Android 8.1. Some research suggests \\n\\t// that the chipset is Mediatek MT6739 w/ IMG PowerVR GE8100 GPU.\\n\\t// D = min( floor( D ) / 255.0, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\n\\n// LogLuv reference: http://graphicrants.blogspot.ca/2009/04/rgbm-color-encoding.html\\n\\n// M matrix, for encoding\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\n\\n// Inverse M matrix, for decoding\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js\\nvar envmap_fragment_glsl_default = `\\n#ifdef USE_ENVMAP\\n\\n\\t#ifdef ENV_WORLDPOS\\n\\n\\t\\tvec3 cameraToFrag;\\n\\n\\t\\tif ( isOrthographic ) {\\n\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\n\\t\\t} else {\\n\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\n\\t\\t}\\n\\n\\t\\t// Transforming Normal Vectors with the Inverse Transformation\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\n\\t\\t#else\\n\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\n\\t\\t#endif\\n\\n\\t#else\\n\\n\\t\\tvec3 reflectVec = vReflect;\\n\\n\\t#endif\\n\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\n\\t#else\\n\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\n\\t#endif\\n\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js\\nvar envmap_common_pars_fragment_glsl_default = `\\n#ifdef USE_ENVMAP\\n\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js\\nvar envmap_pars_fragment_glsl_default = `\\n#ifdef USE_ENVMAP\\n\\n\\tuniform float reflectivity;\\n\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\n\\t\\t#define ENV_WORLDPOS\\n\\n\\t#endif\\n\\n\\t#ifdef ENV_WORLDPOS\\n\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js\\nvar envmap_pars_vertex_glsl_default = `\\n#ifdef USE_ENVMAP\\n\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\n\\n\\t\\t#define ENV_WORLDPOS\\n\\n\\t#endif\\n\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\n\\t#else\\n\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js\\nvar envmap_vertex_glsl_default = `\\n#ifdef USE_ENVMAP\\n\\n\\t#ifdef ENV_WORLDPOS\\n\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\n\\t#else\\n\\n\\t\\tvec3 cameraToVertex;\\n\\n\\t\\tif ( isOrthographic ) {\\n\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\n\\t\\t} else {\\n\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\n\\t\\t}\\n\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\n\\t\\t#else\\n\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\n\\t\\t#endif\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js\\nvar fog_vertex_glsl_default = `\\n#ifdef USE_FOG\\n\\n\\tvFogDepth = - mvPosition.z;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js\\nvar fog_pars_vertex_glsl_default = `\\n#ifdef USE_FOG\\n\\n\\tvarying float vFogDepth;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js\\nvar fog_fragment_glsl_default = `\\n#ifdef USE_FOG\\n\\n\\t#ifdef FOG_EXP2\\n\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\n\\t#else\\n\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\n\\t#endif\\n\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js\\nvar fog_pars_fragment_glsl_default = `\\n#ifdef USE_FOG\\n\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\n\\t#ifdef FOG_EXP2\\n\\n\\t\\tuniform float fogDensity;\\n\\n\\t#else\\n\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js\\nvar gradientmap_pars_fragment_glsl_default = `\\n\\n#ifdef USE_GRADIENTMAP\\n\\n\\tuniform sampler2D gradientMap;\\n\\n#endif\\n\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\n\\t// dotNL will be from -1.0 to 1.0\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\n\\t#ifdef USE_GRADIENTMAP\\n\\n\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\n\\t#else\\n\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\n\\t#endif\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js\\nvar lightmap_fragment_glsl_default = `\\n#ifdef USE_LIGHTMAP\\n\\n\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\n\\t\\tlightMapIrradiance *= PI;\\n\\n\\t#endif\\n\\n\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js\\nvar lightmap_pars_fragment_glsl_default = `\\n#ifdef USE_LIGHTMAP\\n\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js\\nvar lights_lambert_vertex_glsl_default = `\\nvec3 diffuse = vec3( 1.0 );\\n\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\n\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\n\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\n\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\n\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\\n\\n#ifdef DOUBLE_SIDED\\n\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\\n\\n#endif\\n\\n#if NUM_POINT_LIGHTS > 0\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\n\\t\\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\\n\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\n\\t\\t#endif\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n#endif\\n\\n#if NUM_SPOT_LIGHTS > 0\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\n\\t\\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\\n\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n#endif\\n\\n#if NUM_DIR_LIGHTS > 0\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\n\\t\\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\\n\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\n\\t\\t#endif\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n#endif\\n\\n#if NUM_HEMI_LIGHTS > 0\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\n\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\\n\\n\\t\\t#endif\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js\\nvar lights_pars_begin_glsl_default = `\\nuniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\n\\n// get the irradiance (radiance convolved with cosine lobe) at the point 'normal' on the unit sphere\\n// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\n\\t// normal is assumed to have unit length\\n\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\n\\t// band 0\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\n\\t// band 1\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\n\\t// band 2\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\n\\treturn result;\\n\\n}\\n\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\n\\treturn irradiance;\\n\\n}\\n\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\n\\tvec3 irradiance = ambientLightColor;\\n\\n\\treturn irradiance;\\n\\n}\\n\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\n\\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\n\\t\\t// based upon Frostbite 3 Moving to Physically-based Rendering\\n\\t\\t// page 32, equation 26: E[window1]\\n\\t\\t// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\n\\t\\tif ( cutoffDistance > 0.0 ) {\\n\\n\\t\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\n\\t\\t}\\n\\n\\t\\treturn distanceFalloff;\\n\\n\\t#else\\n\\n\\t\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\n\\t\\t\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\n\\t\\t}\\n\\n\\t\\treturn 1.0;\\n\\n\\t#endif\\n\\n}\\n\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n\\n}\\n\\n#if NUM_DIR_LIGHTS > 0\\n\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\n\\t}\\n\\n#endif\\n\\n\\n#if NUM_POINT_LIGHTS > 0\\n\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\n\\t// light is an out parameter as having it as a return value caused compiler errors on some devices\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\n\\t\\tlight.direction = normalize( lVector );\\n\\n\\t\\tfloat lightDistance = length( lVector );\\n\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\n\\t}\\n\\n#endif\\n\\n\\n#if NUM_SPOT_LIGHTS > 0\\n\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\n\\t// light is an out parameter as having it as a return value caused compiler errors on some devices\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\n\\t\\tlight.direction = normalize( lVector );\\n\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\n\\t\\t} else {\\n\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\n\\t\\t}\\n\\n\\t}\\n\\n#endif\\n\\n\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\n\\t// Pre-computed values of LinearTransformedCosine approximation of BRDF\\n\\t// BRDF approximation Texture is 64x64\\n\\tuniform sampler2D ltc_1; // RGBA Float\\n\\tuniform sampler2D ltc_2; // RGBA Float\\n\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n\\n#endif\\n\\n\\n#if NUM_HEMI_LIGHTS > 0\\n\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\n\\t\\treturn irradiance;\\n\\n\\t}\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js\\nvar envmap_physical_pars_fragment_glsl_default = `\\n#if defined( USE_ENVMAP )\\n\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\n\\t\\tuniform float refractionRatio;\\n\\n\\t#endif\\n\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\n\\t\\t#else\\n\\n\\t\\t\\treturn vec3( 0.0 );\\n\\n\\t\\t#endif\\n\\n\\t}\\n\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\n\\t\\t\\tvec3 reflectVec;\\n\\n\\t\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\n\\t\\t\\t\\treflectVec = reflect( - viewDir, normal );\\n\\n\\t\\t\\t\\t// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.\\n\\t\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\n\\t\\t\\t#else\\n\\n\\t\\t\\t\\treflectVec = refract( - viewDir, normal, refractionRatio );\\n\\n\\t\\t\\t#endif\\n\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\n\\t\\t#else\\n\\n\\t\\t\\treturn vec3( 0.0 );\\n\\n\\t\\t#endif\\n\\n\\t}\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js\\nvar lights_toon_fragment_glsl_default = `\\nToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js\\nvar lights_toon_pars_fragment_glsl_default = `\\nvarying vec3 vViewPosition;\\n\\nstruct ToonMaterial {\\n\\n\\tvec3 diffuseColor;\\n\\n};\\n\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\n}\\n\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\n}\\n\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n\\n#define Material_LightProbeLOD( material )\\t(0)\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js\\nvar lights_phong_fragment_glsl_default = `\\nBlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js\\nvar lights_phong_pars_fragment_glsl_default = `\\nvarying vec3 vViewPosition;\\n\\nstruct BlinnPhongMaterial {\\n\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n\\n};\\n\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n\\n}\\n\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\n}\\n\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n\\n#define Material_LightProbeLOD( material )\\t(0)\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js\\nvar lights_physical_fragment_glsl_default = `\\nPhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\n\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\n\\nmaterial.roughness = max( roughnessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.\\nmaterial.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n\\n#ifdef IOR\\n\\n\\t#ifdef SPECULAR\\n\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularTintFactor = specularTint;\\n\\n\\t\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\n\\n\\t\\t#endif\\n\\n\\t\\t#ifdef USE_SPECULARTINTMAP\\n\\n\\t\\t\\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\\n\\n\\t\\t#endif\\n\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\n\\t#else\\n\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularTintFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\n\\t#endif\\n\\n\\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n\\n#else\\n\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n\\n#endif\\n\\n#ifdef USE_CLEARCOAT\\n\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\n\\t#ifdef USE_CLEARCOATMAP\\n\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\n\\t#endif\\n\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\n\\t#endif\\n\\n\\tmaterial.clearcoat = saturate( material.clearcoat ); // Burley clearcoat model\\n\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n\\n#endif\\n\\n#ifdef USE_SHEEN\\n\\n\\tmaterial.sheenTint = sheenTint;\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js\\nvar lights_physical_pars_fragment_glsl_default = `\\nstruct PhysicalMaterial {\\n\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenTint;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\n};\\n\\n// temporary\\nvec3 clearcoatSpecular = vec3( 0.0 );\\n\\n// Analytical approximation of the DFG LUT, one half of the\\n// split-sum approximation used in indirect specular lighting.\\n// via 'environmentBRDF' from \\\\\\\"Physically Based Shading on Mobile\\\\\\\"\\n// https://www.unrealengine.com/blog/physically-based-shading-on-mobile\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\n\\tvec4 r = roughness * c0 + c1;\\n\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\n\\treturn fab;\\n\\n}\\n\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n\\n}\\n\\n// Fdez-Ag\\\\xFCera's \\\\\\\"Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting\\\\\\\"\\n// Approximates multiscattering in order to preserve energy.\\n// http://www.jcgt.org/published/0008/01/03/\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\n\\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\\n\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619; // 1/21\\n\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n\\n}\\n\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight; // counterclockwise; light shines in local neg z direction\\n\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3(    0, 1,    0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\n\\t\\t// LTC Fresnel Approximation by Stephen Hill\\n\\t\\t// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\n\\t}\\n\\n#endif\\n\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\n\\t#ifdef USE_CLEARCOAT\\n\\n\\t\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\n\\t\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\n\\t#endif\\n\\n\\t#ifdef USE_SHEEN\\n\\n\\t\\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenTint, material.sheenRoughness );\\n\\n\\t#endif\\n\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\n\\n\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\n}\\n\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\n\\t#ifdef USE_CLEARCOAT\\n\\n\\t\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\n\\t#endif\\n\\n\\t// Both indirect specular and indirect diffuse light accumulate here\\n\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\n\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n\\n}\\n\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\n\\n// ref: https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js\\nvar lights_fragment_begin_glsl_default = `\\n/**\\n * This is a template that can be used to light a material, it uses pluggable\\n * RenderEquations (RE)for specific lighting scenarios.\\n *\\n * Instructions for use:\\n * - Ensure that both RE_Direct, RE_IndirectDiffuse and RE_IndirectSpecular are defined\\n * - If you have defined an RE_IndirectSpecular, you need to also provide a Material_LightProbeLOD. <---- ???\\n * - Create a material parameter that is to be passed as the third parameter to your lighting functions.\\n *\\n * TODO:\\n * - Add area light support.\\n * - Add sphere light support.\\n * - Add diffuse light probe (irradiance cubemap) support.\\n */\\n\\nGeometricContext geometry;\\n\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n\\n#ifdef USE_CLEARCOAT\\n\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n\\n#endif\\n\\nIncidentLight directLight;\\n\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\n\\t\\tpointLight = pointLights[ i ];\\n\\n\\t\\tgetPointLightInfo( pointLight, geometry, directLight );\\n\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n#endif\\n\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\n\\t\\tspotLight = spotLights[ i ];\\n\\n\\t\\tgetSpotLightInfo( spotLight, geometry, directLight );\\n\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n#endif\\n\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\n\\t\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\n\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n#endif\\n\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\n\\tRectAreaLight rectAreaLight;\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n#endif\\n\\n#if defined( RE_IndirectDiffuse )\\n\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\n\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\n\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\n\\t#endif\\n\\n#endif\\n\\n#if defined( RE_IndirectSpecular )\\n\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js\\nvar lights_fragment_maps_glsl_default = `\\n#if defined( RE_IndirectDiffuse )\\n\\n\\t#ifdef USE_LIGHTMAP\\n\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\n\\t\\t#endif\\n\\n\\t\\tirradiance += lightMapIrradiance;\\n\\n\\t#endif\\n\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\n\\t\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\n\\n\\t#endif\\n\\n#endif\\n\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\n\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\n\\n\\t#ifdef USE_CLEARCOAT\\n\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js\\nvar lights_fragment_end_glsl_default = `\\n#if defined( RE_IndirectDiffuse )\\n\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n\\n#endif\\n\\n#if defined( RE_IndirectSpecular )\\n\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js\\nvar logdepthbuf_fragment_glsl_default = `\\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\n\\t// Doing a strict comparison with == 1.0 can cause noise artifacts\\n\\t// on some platforms. See issue #17623.\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js\\nvar logdepthbuf_pars_fragment_glsl_default = `\\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js\\nvar logdepthbuf_pars_vertex_glsl_default = `\\n#ifdef USE_LOGDEPTHBUF\\n\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\n\\t#else\\n\\n\\t\\tuniform float logDepthBufFC;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js\\nvar logdepthbuf_vertex_glsl_default = `\\n#ifdef USE_LOGDEPTHBUF\\n\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\n\\t#else\\n\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\n\\t\\t}\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js\\nvar map_fragment_glsl_default = `\\n#ifdef USE_MAP\\n\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js\\nvar map_pars_fragment_glsl_default = `\\n#ifdef USE_MAP\\n\\n\\tuniform sampler2D map;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js\\nvar map_particle_fragment_glsl_default = `\\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\n#endif\\n\\n#ifdef USE_MAP\\n\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n\\n#endif\\n\\n#ifdef USE_ALPHAMAP\\n\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js\\nvar map_particle_pars_fragment_glsl_default = `\\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\n\\tuniform mat3 uvTransform;\\n\\n#endif\\n\\n#ifdef USE_MAP\\n\\n\\tuniform sampler2D map;\\n\\n#endif\\n\\n#ifdef USE_ALPHAMAP\\n\\n\\tuniform sampler2D alphaMap;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js\\nvar metalnessmap_fragment_glsl_default = `\\nfloat metalnessFactor = metalness;\\n\\n#ifdef USE_METALNESSMAP\\n\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\n\\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\n\\tmetalnessFactor *= texelMetalness.b;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js\\nvar metalnessmap_pars_fragment_glsl_default = `\\n#ifdef USE_METALNESSMAP\\n\\n\\tuniform sampler2D metalnessMap;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js\\nvar morphnormal_vertex_glsl_default = `\\n#ifdef USE_MORPHNORMALS\\n\\n\\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\\n\\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)\\n\\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\n\\t\\t\\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\\n\\n\\t\\t}\\n\\n\\t#else\\n\\n\\t\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\t\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\t\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\t\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js\\nvar morphtarget_pars_vertex_glsl_default = `\\n#ifdef USE_MORPHTARGETS\\n\\n\\tuniform float morphTargetBaseInfluence;\\n\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t\\tuniform sampler2DArray morphTargetsTexture;\\n\\t\\tuniform vec2 morphTargetsTextureSize;\\n\\n\\t\\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\\n\\n\\t\\t\\tfloat texelIndex = float( vertexIndex * stride + offset );\\n\\t\\t\\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\\n\\t\\t\\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\\n\\n\\t\\t\\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\\n\\t\\t\\treturn texture( morphTargetsTexture, morphUV ).xyz;\\n\\n\\t\\t}\\n\\n\\t#else\\n\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\n\\t\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\n\\t\\t#else\\n\\n\\t\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\n\\t\\t#endif\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js\\nvar morphtarget_vertex_glsl_default = `\\n#ifdef USE_MORPHTARGETS\\n\\n\\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\\n\\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in position = sum((target - base) * influence)\\n\\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\n\\t\\t\\t#ifndef USE_MORPHNORMALS\\n\\n\\t\\t\\t\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\\n\\n\\t\\t\\t#else\\n\\n\\t\\t\\t\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\\n\\n\\t\\t\\t#endif\\n\\n\\t\\t}\\n\\n\\t#else\\n\\n\\t\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\t\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\t\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\t\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\n\\t\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\n\\t\\t#endif\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js\\nvar normal_fragment_begin_glsl_default = `\\nfloat faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n\\n#ifdef FLAT_SHADED\\n\\n\\t// Workaround for Adreno GPUs not able to do dFdx( vViewPosition )\\n\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n\\n#else\\n\\n\\tvec3 normal = normalize( vNormal );\\n\\n\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\tnormal = normal * faceDirection;\\n\\n\\t#endif\\n\\n\\t#ifdef USE_TANGENT\\n\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\n\\t\\t#endif\\n\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\n\\t\\t#endif\\n\\n\\t#endif\\n\\n#endif\\n\\n// non perturbed normal for clearcoat among others\\n\\nvec3 geometryNormal = normal;\\n\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js\\nvar normal_fragment_maps_glsl_default = `\\n\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals\\n\\n\\t#ifdef FLIP_SIDED\\n\\n\\t\\tnormal = - normal;\\n\\n\\t#endif\\n\\n\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\tnormal = normal * faceDirection;\\n\\n\\t#endif\\n\\n\\tnormal = normalize( normalMatrix * normal );\\n\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\n\\t#ifdef USE_TANGENT\\n\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\n\\t#else\\n\\n\\t\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\n\\n\\t#endif\\n\\n#elif defined( USE_BUMPMAP )\\n\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js\\nvar normal_pars_fragment_glsl_default = `\\n#ifndef FLAT_SHADED\\n\\n\\tvarying vec3 vNormal;\\n\\n\\t#ifdef USE_TANGENT\\n\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js\\nvar normal_pars_vertex_glsl_default = `\\n#ifndef FLAT_SHADED\\n\\n\\tvarying vec3 vNormal;\\n\\n\\t#ifdef USE_TANGENT\\n\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js\\nvar normal_vertex_glsl_default = `\\n#ifndef FLAT_SHADED // normal is computed with derivatives when FLAT_SHADED\\n\\n\\tvNormal = normalize( transformedNormal );\\n\\n\\t#ifdef USE_TANGENT\\n\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js\\nvar normalmap_pars_fragment_glsl_default = `\\n#ifdef USE_NORMALMAP\\n\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\n#endif\\n\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\n\\tuniform mat3 normalMatrix;\\n\\n#endif\\n\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\n\\t// Normal Mapping Without Precomputed Tangents\\n\\t// http://www.thetenthplanet.de/archives/1180\\n\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\n\\t\\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\\n\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\n\\t\\tvec3 N = surf_norm; // normalized\\n\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\n\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\n\\t}\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js\\nvar clearcoat_normal_fragment_begin_glsl_default = `\\n#ifdef USE_CLEARCOAT\\n\\n\\tvec3 clearcoatNormal = geometryNormal;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js\\nvar clearcoat_normal_fragment_maps_glsl_default = `\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\n\\t#ifdef USE_TANGENT\\n\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\n\\t#else\\n\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js\\nvar clearcoat_pars_fragment_glsl_default = `\\n\\n#ifdef USE_CLEARCOATMAP\\n\\n\\tuniform sampler2D clearcoatMap;\\n\\n#endif\\n\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n\\n#endif\\n\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js\\nvar output_fragment_glsl_default = `\\n#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n\\n// https://github.com/mrdoob/three.js/pull/22425\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= transmissionAlpha + 0.1;\\n#endif\\n\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js\\nvar packing_glsl_default = `\\nvec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\n\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\n\\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\\n\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\n\\nconst float ShiftRight8 = 1. / 256.;\\n\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8; // tidy overflow\\n\\treturn r * PackUpscale;\\n}\\n\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\n\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\n\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\n\\n// NOTE: viewZ/eyeZ is < 0 when in front of the camera per OpenGL conventions\\n\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\n\\n// NOTE: https://twitter.com/gonnavis/status/1377183786949959682\\n\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js\\nvar premultiplied_alpha_fragment_glsl_default = `\\n#ifdef PREMULTIPLIED_ALPHA\\n\\n\\t// Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js\\nvar project_vertex_glsl_default = `\\nvec4 mvPosition = vec4( transformed, 1.0 );\\n\\n#ifdef USE_INSTANCING\\n\\n\\tmvPosition = instanceMatrix * mvPosition;\\n\\n#endif\\n\\nmvPosition = modelViewMatrix * mvPosition;\\n\\ngl_Position = projectionMatrix * mvPosition;\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js\\nvar dithering_fragment_glsl_default = `\\n#ifdef DITHERING\\n\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js\\nvar dithering_pars_fragment_glsl_default = `\\n#ifdef DITHERING\\n\\n\\t// based on https://www.shadertoy.com/view/MslGR8\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\t//Calculate grid position\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\n\\t\\t//Shift the individual colors differently, thus making it even harder to see the dithering pattern\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\n\\t\\t//modify shift acording to grid position.\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\n\\t\\t//shift the color by dither_shift\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js\\nvar roughnessmap_fragment_glsl_default = `\\nfloat roughnessFactor = roughness;\\n\\n#ifdef USE_ROUGHNESSMAP\\n\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\n\\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\n\\troughnessFactor *= texelRoughness.g;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js\\nvar roughnessmap_pars_fragment_glsl_default = `\\n#ifdef USE_ROUGHNESSMAP\\n\\n\\tuniform sampler2D roughnessMap;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js\\nvar shadowmap_pars_fragment_glsl_default = `\\n#ifdef USE_SHADOWMAP\\n\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\n\\t#endif\\n\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\n\\t#endif\\n\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\n\\t#endif\\n\\n\\t/*\\n\\t#if NUM_RECT_AREA_LIGHTS > 0\\n\\n\\t\\t// TODO (abelnation): create uniforms for area light shadows\\n\\n\\t#endif\\n\\t*/\\n\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\n\\t}\\n\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\n\\t}\\n\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\n\\t\\tfloat occlusion = 1.0;\\n\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\n\\t\\tfloat hard_shadow = step( compare , distribution.x ); // Hard Shadow\\n\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality\\n\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed\\n\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\n\\t}\\n\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\n\\t\\tfloat shadow = 1.0;\\n\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\n\\t\\t// if ( something && something ) breaks ATI OpenGL shader compiler\\n\\t\\t// if ( all( something, something ) ) using this instead\\n\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\n\\t\\tif ( frustumTest ) {\\n\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t  f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t  f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\n\\t\\t#else // no percentage-closer filtering:\\n\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\n\\t\\t#endif\\n\\n\\t\\t}\\n\\n\\t\\treturn shadow;\\n\\n\\t}\\n\\n\\t// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D\\n\\t// vector suitable for 2D texture mapping. This code uses the following layout for the\\n\\t// 2D texture:\\n\\t//\\n\\t// xzXZ\\n\\t//  y Y\\n\\t//\\n\\t// Y - Positive y direction\\n\\t// y - Negative y direction\\n\\t// X - Positive x direction\\n\\t// x - Negative x direction\\n\\t// Z - Positive z direction\\n\\t// z - Negative z direction\\n\\t//\\n\\t// Source and test bed:\\n\\t// https://gist.github.com/tschw/da10c43c467ce8afd0c4\\n\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\n\\t\\t// Number of texels to avoid at the edge of each square\\n\\n\\t\\tvec3 absV = abs( v );\\n\\n\\t\\t// Intersect unit cube\\n\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\n\\t\\t// Apply scale to avoid seams\\n\\n\\t\\t// two texels less per square (one texel will do for NEAREST)\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\n\\t\\t// Unwrap\\n\\n\\t\\t// space: -1 ... 1 range for each square\\n\\t\\t//\\n\\t\\t// #X##\\t\\tdim    := ( 4 , 2 )\\n\\t\\t//  # #\\t\\tcenter := ( 1 , 1 )\\n\\n\\t\\tvec2 planar = v.xy;\\n\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\n\\t\\t}\\n\\n\\t\\t// Transform to UV space\\n\\n\\t\\t// scale := 0.5 / dim\\n\\t\\t// translate := ( center + 0.5 ) / dim\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\n\\t}\\n\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\n\\t\\t// for point lights, the uniform @vShadowCoord is re-purposed to hold\\n\\t\\t// the vector from the light to the world-space position of the fragment.\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\n\\t\\t// dp = normalized distance from light to fragment position\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp?\\n\\t\\tdp += shadowBias;\\n\\n\\t\\t// bd3D = base direction 3D\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\n\\t\\t#else // no percentage-closer filtering\\n\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\n\\t\\t#endif\\n\\n\\t}\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js\\nvar shadowmap_pars_vertex_glsl_default = `\\n#ifdef USE_SHADOWMAP\\n\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\n\\t#endif\\n\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\n\\t#endif\\n\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\n\\t#endif\\n\\n\\t/*\\n\\t#if NUM_RECT_AREA_LIGHTS > 0\\n\\n\\t\\t// TODO (abelnation): uniforms for area light shadows\\n\\n\\t#endif\\n\\t*/\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js\\nvar shadowmap_vertex_glsl_default = `\\n#ifdef USE_SHADOWMAP\\n\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\n\\t\\t// Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne.\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\n\\t#endif\\n\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n\\t#endif\\n\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n\\t#endif\\n\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n\\t#endif\\n\\n\\t/*\\n\\t#if NUM_RECT_AREA_LIGHTS > 0\\n\\n\\t\\t// TODO (abelnation): update vAreaShadowCoord with area light info\\n\\n\\t#endif\\n\\t*/\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js\\nvar shadowmask_pars_fragment_glsl_default = `\\nfloat getShadowMask() {\\n\\n\\tfloat shadow = 1.0;\\n\\n\\t#ifdef USE_SHADOWMAP\\n\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\n\\tDirectionalLightShadow directionalLight;\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n\\t#endif\\n\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\n\\tSpotLightShadow spotLight;\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n\\t#endif\\n\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\n\\tPointLightShadow pointLight;\\n\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\n\\t#endif\\n\\n\\t/*\\n\\t#if NUM_RECT_AREA_LIGHTS > 0\\n\\n\\t\\t// TODO (abelnation): update shadow for Area light\\n\\n\\t#endif\\n\\t*/\\n\\n\\t#endif\\n\\n\\treturn shadow;\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js\\nvar skinbase_vertex_glsl_default = `\\n#ifdef USE_SKINNING\\n\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js\\nvar skinning_pars_vertex_glsl_default = `\\n#ifdef USE_SKINNING\\n\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\n\\t#ifdef BONE_TEXTURE\\n\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\n\\t\\t\\treturn bone;\\n\\n\\t\\t}\\n\\n\\t#else\\n\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\n\\t\\t}\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js\\nvar skinning_vertex_glsl_default = `\\n#ifdef USE_SKINNING\\n\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js\\nvar skinnormal_vertex_glsl_default = `\\n#ifdef USE_SKINNING\\n\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\n\\t#ifdef USE_TANGENT\\n\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\n\\t#endif\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js\\nvar specularmap_fragment_glsl_default = `\\nfloat specularStrength;\\n\\n#ifdef USE_SPECULARMAP\\n\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n\\n#else\\n\\n\\tspecularStrength = 1.0;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js\\nvar specularmap_pars_fragment_glsl_default = `\\n#ifdef USE_SPECULARMAP\\n\\n\\tuniform sampler2D specularMap;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js\\nvar tonemapping_fragment_glsl_default = `\\n#if defined( TONE_MAPPING )\\n\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js\\nvar tonemapping_pars_fragment_glsl_default = `\\n#ifndef saturate\\n// <common> may have defined saturate() already\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n\\nuniform float toneMappingExposure;\\n\\n// exposure only\\nvec3 LinearToneMapping( vec3 color ) {\\n\\n\\treturn toneMappingExposure * color;\\n\\n}\\n\\n// source: https://www.cs.utah.edu/~reinhard/cdrom/\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n\\n}\\n\\n// source: http://filmicworlds.com/blog/filmic-tonemapping-operators/\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\n\\t// optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n\\n}\\n\\n// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n\\n}\\n\\n// this implementation of ACES is modified to accommodate a brighter viewing environment.\\n// the scale factor of 1/0.6 is subjective. see discussion in #19621.\\n\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\n\\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\\n\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\n\\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3(  1.60475, -0.10208, -0.00327 ), // transposed from source\\n\\t\\tvec3( -0.53108,  1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605,  1.07602 )\\n\\t);\\n\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\n\\tcolor = ACESInputMat * color;\\n\\n\\t// Apply RRT and ODT\\n\\tcolor = RRTAndODTFit( color );\\n\\n\\tcolor = ACESOutputMat * color;\\n\\n\\t// Clamp to [0, 1]\\n\\treturn saturate( color );\\n\\n}\\n\\nvec3 CustomToneMapping( vec3 color ) { return color; }\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js\\nvar transmission_fragment_glsl_default = `\\n#ifdef USE_TRANSMISSION\\n\\n\\tfloat transmissionAlpha = 1.0;\\n\\tfloat transmissionFactor = transmission;\\n\\tfloat thicknessFactor = thickness;\\n\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\n\\t\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\n\\n\\t#endif\\n\\n\\t#ifdef USE_THICKNESSMAP\\n\\n\\t\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\n\\n\\t#endif\\n\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\n\\tvec4 transmission = getIBLVolumeRefraction(\\n\\t\\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\n\\t\\tattenuationTint, attenuationDistance );\\n\\n\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\\n\\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js\\nvar transmission_pars_fragment_glsl_default = `\\n#ifdef USE_TRANSMISSION\\n\\n\\t// Transmission code is based on glTF-Sampler-Viewer\\n\\t// https://github.com/KhronosGroup/glTF-Sample-Viewer\\n\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationTint;\\n\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\n\\t\\tuniform sampler2D transmissionMap;\\n\\n\\t#endif\\n\\n\\t#ifdef USE_THICKNESSMAP\\n\\n\\t\\tuniform sampler2D thicknessMap;\\n\\n\\t#endif\\n\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\n\\tvarying vec3 vWorldPosition;\\n\\n\\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\\n\\n\\t\\t// Direction of refracted light.\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\n\\t\\t// Compute rotation-independant scaling of the model matrix.\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\n\\t\\t// The thickness is specified in local space.\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\n\\t}\\n\\n\\tfloat applyIorToRoughness( float roughness, float ior ) {\\n\\n\\t\\t// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and\\n\\t\\t// an IOR of 1.5 results in the default amount of microfacet refraction.\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\n\\t}\\n\\n\\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\\n\\n\\t\\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\n\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\n\\t\\t\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\n\\t\\t#else\\n\\n\\t\\t\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\n\\t\\t#endif\\n\\n\\t}\\n\\n\\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\\n\\n\\t\\tif ( attenuationDistance == 0.0 ) {\\n\\n\\t\\t\\t// Attenuation distance is +\\\\u221E (which we indicate by zero), i.e. the transmitted color is not attenuated at all.\\n\\t\\t\\treturn radiance;\\n\\n\\t\\t} else {\\n\\n\\t\\t\\t// Compute light attenuation using Beer's law.\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law\\n\\t\\t\\treturn transmittance * radiance;\\n\\n\\t\\t}\\n\\n\\t}\\n\\n\\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\\n\\t\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\\n\\t\\tvec3 attenuationColor, float attenuationDistance ) {\\n\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\n\\t\\t// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\n\\t\\t// Sample framebuffer to get pixel the refracted ray hits.\\n\\t\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\n\\t\\t// Get the specular component.\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\n\\n\\t}\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js\\nvar uv_pars_fragment_glsl_default = `\\n#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\n\\tvarying vec2 vUv;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js\\nvar uv_pars_vertex_glsl_default = `\\n#ifdef USE_UV\\n\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\n\\t\\tvec2 vUv;\\n\\n\\t#else\\n\\n\\t\\tvarying vec2 vUv;\\n\\n\\t#endif\\n\\n\\tuniform mat3 uvTransform;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js\\nvar uv_vertex_glsl_default = `\\n#ifdef USE_UV\\n\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js\\nvar uv2_pars_fragment_glsl_default = `\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\n\\tvarying vec2 vUv2;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js\\nvar uv2_pars_vertex_glsl_default = `\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\n\\tuniform mat3 uv2Transform;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js\\nvar uv2_vertex_glsl_default = `\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js\\nvar worldpos_vertex_glsl_default = `\\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\n\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\n\\t#ifdef USE_INSTANCING\\n\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\n\\t#endif\\n\\n\\tworldPosition = modelMatrix * worldPosition;\\n\\n#endif\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js\\nvar vertex = `\\nvarying vec2 vUv;\\nuniform mat3 uvTransform;\\n\\nvoid main() {\\n\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n\\n}\\n`;\\nvar fragment = `\\nuniform sampler2D t2D;\\n\\nvarying vec2 vUv;\\n\\nvoid main() {\\n\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/cube.glsl.js\\nvar vertex2 = `\\nvarying vec3 vWorldDirection;\\n\\n#include <common>\\n\\nvoid main() {\\n\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\n\\tgl_Position.z = gl_Position.w; // set z to camera.far\\n\\n}\\n`;\\nvar fragment2 = `\\n#include <envmap_common_pars_fragment>\\nuniform float opacity;\\n\\nvarying vec3 vWorldDirection;\\n\\n#include <cube_uv_reflection_fragment>\\n\\nvoid main() {\\n\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include <envmap_fragment>\\n\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js\\nvar vertex3 = `\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\\nvarying vec2 vHighPrecisionZW;\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\n\\t#include <skinbase_vertex>\\n\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\n\\t#endif\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\n\\tvHighPrecisionZW = gl_Position.zw;\\n\\n}\\n`;\\nvar fragment3 = `\\n#if DEPTH_PACKING == 3200\\n\\n\\tuniform float opacity;\\n\\n#endif\\n\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvarying vec2 vHighPrecisionZW;\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\n\\t#if DEPTH_PACKING == 3200\\n\\n\\t\\tdiffuseColor.a = opacity;\\n\\n\\t#endif\\n\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\n\\t#include <logdepthbuf_fragment>\\n\\n\\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\n\\t#if DEPTH_PACKING == 3200\\n\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\n\\t#elif DEPTH_PACKING == 3201\\n\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\n\\t#endif\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js\\nvar vertex4 = `\\n#define DISTANCE\\n\\nvarying vec3 vWorldPosition;\\n\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\n\\t#include <skinbase_vertex>\\n\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\n\\t#endif\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\n\\tvWorldPosition = worldPosition.xyz;\\n\\n}\\n`;\\nvar fragment4 = `\\n#define DISTANCE\\n\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main () {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist ); // clamp to [ 0, 1 ]\\n\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/equirect.glsl.js\\nvar vertex5 = `\\nvarying vec3 vWorldDirection;\\n\\n#include <common>\\n\\nvoid main() {\\n\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\n}\\n`;\\nvar fragment5 = `\\nuniform sampler2D tEquirect;\\n\\nvarying vec3 vWorldDirection;\\n\\n#include <common>\\n\\nvoid main() {\\n\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js\\nvar vertex6 = `\\nuniform float scale;\\nattribute float lineDistance;\\n\\nvarying float vLineDistance;\\n\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\tvLineDistance = scale * lineDistance;\\n\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\n}\\n`;\\nvar fragment6 = `\\nuniform vec3 diffuse;\\nuniform float opacity;\\n\\nuniform float dashSize;\\nuniform float totalSize;\\n\\nvarying float vLineDistance;\\n\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\n\\t\\tdiscard;\\n\\n\\t}\\n\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\n\\toutgoingLight = diffuseColor.rgb; // simple shader\\n\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js\\nvar vertex7 = `\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinbase_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t\\t#include <defaultnormal_vertex>\\n\\n\\t#endif\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n\\n}\\n`;\\nvar fragment7 = `\\nuniform vec3 diffuse;\\nuniform float opacity;\\n\\n#ifndef FLAT_SHADED\\n\\n\\tvarying vec3 vNormal;\\n\\n#endif\\n\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\n\\t// accumulation (baked indirect lighting only)\\n\\t#ifdef USE_LIGHTMAP\\n\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\n\\t#else\\n\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\n\\t#endif\\n\\n\\t// modulation\\n\\t#include <aomap_fragment>\\n\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\n\\t#include <envmap_fragment>\\n\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js\\nvar vertex8 = `\\n#define LAMBERT\\n\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n`;\\nvar fragment8 = `\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n\\n\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\n\\t// accumulation\\n\\n\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\n\\t#else\\n\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\n\\t#endif\\n\\n\\t#include <lightmap_fragment>\\n\\n\\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\\n\\n\\t#ifdef DOUBLE_SIDED\\n\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\n\\t#else\\n\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\n\\t#endif\\n\\n\\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\n\\t// modulation\\n\\n\\t#include <aomap_fragment>\\n\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\n\\t#include <envmap_fragment>\\n\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js\\nvar vertex9 = `\\n#define MATCAP\\n\\nvarying vec3 vViewPosition;\\n\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\n\\tvViewPosition = - mvPosition.xyz;\\n\\n}\\n`;\\nvar fragment9 = `\\n#define MATCAP\\n\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\n\\nvarying vec3 vViewPosition;\\n\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <normal_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks\\n\\n\\t#ifdef USE_MATCAP\\n\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\n\\t#else\\n\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\n\\t#endif\\n\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js\\nvar vertex10 = `\\n#define NORMAL\\n\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\n\\tvarying vec3 vViewPosition;\\n\\n#endif\\n\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\n\\tvViewPosition = - mvPosition.xyz;\\n\\n#endif\\n\\n}\\n`;\\nvar fragment10 = `\\n#define NORMAL\\n\\nuniform float opacity;\\n\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\n\\tvarying vec3 vViewPosition;\\n\\n#endif\\n\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <normal_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js\\nvar vertex11 = `\\n#define PHONG\\n\\nvarying vec3 vViewPosition;\\n\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\n\\tvViewPosition = - mvPosition.xyz;\\n\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n\\n}\\n`;\\nvar fragment11 = `\\n#define PHONG\\n\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\n\\t// accumulation\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\n\\t// modulation\\n\\t#include <aomap_fragment>\\n\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\n\\t#include <envmap_fragment>\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js\\nvar vertex12 = `\\n#define STANDARD\\n\\nvarying vec3 vViewPosition;\\n\\n#ifdef USE_TRANSMISSION\\n\\n\\tvarying vec3 vWorldPosition;\\n\\n#endif\\n\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\n\\tvViewPosition = - mvPosition.xyz;\\n\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n\\n#ifdef USE_TRANSMISSION\\n\\n\\tvWorldPosition = worldPosition.xyz;\\n\\n#endif\\n}\\n`;\\nvar fragment12 = `\\n#define STANDARD\\n\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define SPECULAR\\n#endif\\n\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n\\n#ifdef SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularTint;\\n\\n\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n\\n\\t#ifdef USE_SPECULARTINTMAP\\n\\t\\tuniform sampler2D specularTintMap;\\n\\t#endif\\n#endif\\n\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenTint;\\n\\tuniform float sheenRoughness;\\n#endif\\n\\nvarying vec3 vViewPosition;\\n\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_physical_pars_fragment>\\n#include <transmission_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <clearcoat_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <clearcoat_normal_fragment_begin>\\n\\t#include <clearcoat_normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\n\\t// accumulation\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\n\\t// modulation\\n\\t#include <aomap_fragment>\\n\\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\n\\t#include <transmission_fragment>\\n\\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\n\\t#ifdef USE_CLEARCOAT\\n\\n\\t\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\\n\\n\\t#endif\\n\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js\\nvar vertex13 = `\\n#define TOON\\n\\nvarying vec3 vViewPosition;\\n\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\n\\tvViewPosition = - mvPosition.xyz;\\n\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n\\n}\\n`;\\nvar fragment13 = `\\n#define TOON\\n\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_toon_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\n\\t// accumulation\\n\\t#include <lights_toon_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\n\\t// modulation\\n\\t#include <aomap_fragment>\\n\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js\\nvar vertex14 = `\\nuniform float size;\\nuniform float scale;\\n\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\n\\tgl_PointSize = size;\\n\\n\\t#ifdef USE_SIZEATTENUATION\\n\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\n\\t#endif\\n\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n\\n}\\n`;\\nvar fragment14 = `\\nuniform vec3 diffuse;\\nuniform float opacity;\\n\\n#include <common>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\n\\toutgoingLight = diffuseColor.rgb;\\n\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js\\nvar vertex15 = `\\n#include <common>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n\\n}\\n`;\\nvar fragment15 = `\\nuniform vec3 color;\\nuniform float opacity;\\n\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n\\nvoid main() {\\n\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js\\nvar vertex16 = `\\nuniform float rotation;\\nuniform vec2 center;\\n\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n\\nvoid main() {\\n\\n\\t#include <uv_vertex>\\n\\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\n\\t#ifndef USE_SIZEATTENUATION\\n\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\n\\t#endif\\n\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\n\\tmvPosition.xy += rotatedPosition;\\n\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\n}\\n`;\\nvar fragment16 = `\\nuniform vec3 diffuse;\\nuniform float opacity;\\n\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\n\\nvoid main() {\\n\\n\\t#include <clipping_planes_fragment>\\n\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\n\\toutgoingLight = diffuseColor.rgb;\\n\\n\\t#include <output_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderChunk.js\\nvar ShaderChunk = {\\n  alphamap_fragment: alphamap_fragment_glsl_default,\\n  alphamap_pars_fragment: alphamap_pars_fragment_glsl_default,\\n  alphatest_fragment: alphatest_fragment_glsl_default,\\n  alphatest_pars_fragment: alphatest_pars_fragment_glsl_default,\\n  aomap_fragment: aomap_fragment_glsl_default,\\n  aomap_pars_fragment: aomap_pars_fragment_glsl_default,\\n  begin_vertex: begin_vertex_glsl_default,\\n  beginnormal_vertex: beginnormal_vertex_glsl_default,\\n  bsdfs: bsdfs_glsl_default,\\n  bumpmap_pars_fragment: bumpmap_pars_fragment_glsl_default,\\n  clipping_planes_fragment: clipping_planes_fragment_glsl_default,\\n  clipping_planes_pars_fragment: clipping_planes_pars_fragment_glsl_default,\\n  clipping_planes_pars_vertex: clipping_planes_pars_vertex_glsl_default,\\n  clipping_planes_vertex: clipping_planes_vertex_glsl_default,\\n  color_fragment: color_fragment_glsl_default,\\n  color_pars_fragment: color_pars_fragment_glsl_default,\\n  color_pars_vertex: color_pars_vertex_glsl_default,\\n  color_vertex: color_vertex_glsl_default,\\n  common: common_glsl_default,\\n  cube_uv_reflection_fragment: cube_uv_reflection_fragment_glsl_default,\\n  defaultnormal_vertex: defaultnormal_vertex_glsl_default,\\n  displacementmap_pars_vertex: displacementmap_pars_vertex_glsl_default,\\n  displacementmap_vertex: displacementmap_vertex_glsl_default,\\n  emissivemap_fragment: emissivemap_fragment_glsl_default,\\n  emissivemap_pars_fragment: emissivemap_pars_fragment_glsl_default,\\n  encodings_fragment: encodings_fragment_glsl_default,\\n  encodings_pars_fragment: encodings_pars_fragment_glsl_default,\\n  envmap_fragment: envmap_fragment_glsl_default,\\n  envmap_common_pars_fragment: envmap_common_pars_fragment_glsl_default,\\n  envmap_pars_fragment: envmap_pars_fragment_glsl_default,\\n  envmap_pars_vertex: envmap_pars_vertex_glsl_default,\\n  envmap_physical_pars_fragment: envmap_physical_pars_fragment_glsl_default,\\n  envmap_vertex: envmap_vertex_glsl_default,\\n  fog_vertex: fog_vertex_glsl_default,\\n  fog_pars_vertex: fog_pars_vertex_glsl_default,\\n  fog_fragment: fog_fragment_glsl_default,\\n  fog_pars_fragment: fog_pars_fragment_glsl_default,\\n  gradientmap_pars_fragment: gradientmap_pars_fragment_glsl_default,\\n  lightmap_fragment: lightmap_fragment_glsl_default,\\n  lightmap_pars_fragment: lightmap_pars_fragment_glsl_default,\\n  lights_lambert_vertex: lights_lambert_vertex_glsl_default,\\n  lights_pars_begin: lights_pars_begin_glsl_default,\\n  lights_toon_fragment: lights_toon_fragment_glsl_default,\\n  lights_toon_pars_fragment: lights_toon_pars_fragment_glsl_default,\\n  lights_phong_fragment: lights_phong_fragment_glsl_default,\\n  lights_phong_pars_fragment: lights_phong_pars_fragment_glsl_default,\\n  lights_physical_fragment: lights_physical_fragment_glsl_default,\\n  lights_physical_pars_fragment: lights_physical_pars_fragment_glsl_default,\\n  lights_fragment_begin: lights_fragment_begin_glsl_default,\\n  lights_fragment_maps: lights_fragment_maps_glsl_default,\\n  lights_fragment_end: lights_fragment_end_glsl_default,\\n  logdepthbuf_fragment: logdepthbuf_fragment_glsl_default,\\n  logdepthbuf_pars_fragment: logdepthbuf_pars_fragment_glsl_default,\\n  logdepthbuf_pars_vertex: logdepthbuf_pars_vertex_glsl_default,\\n  logdepthbuf_vertex: logdepthbuf_vertex_glsl_default,\\n  map_fragment: map_fragment_glsl_default,\\n  map_pars_fragment: map_pars_fragment_glsl_default,\\n  map_particle_fragment: map_particle_fragment_glsl_default,\\n  map_particle_pars_fragment: map_particle_pars_fragment_glsl_default,\\n  metalnessmap_fragment: metalnessmap_fragment_glsl_default,\\n  metalnessmap_pars_fragment: metalnessmap_pars_fragment_glsl_default,\\n  morphnormal_vertex: morphnormal_vertex_glsl_default,\\n  morphtarget_pars_vertex: morphtarget_pars_vertex_glsl_default,\\n  morphtarget_vertex: morphtarget_vertex_glsl_default,\\n  normal_fragment_begin: normal_fragment_begin_glsl_default,\\n  normal_fragment_maps: normal_fragment_maps_glsl_default,\\n  normal_pars_fragment: normal_pars_fragment_glsl_default,\\n  normal_pars_vertex: normal_pars_vertex_glsl_default,\\n  normal_vertex: normal_vertex_glsl_default,\\n  normalmap_pars_fragment: normalmap_pars_fragment_glsl_default,\\n  clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin_glsl_default,\\n  clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps_glsl_default,\\n  clearcoat_pars_fragment: clearcoat_pars_fragment_glsl_default,\\n  output_fragment: output_fragment_glsl_default,\\n  packing: packing_glsl_default,\\n  premultiplied_alpha_fragment: premultiplied_alpha_fragment_glsl_default,\\n  project_vertex: project_vertex_glsl_default,\\n  dithering_fragment: dithering_fragment_glsl_default,\\n  dithering_pars_fragment: dithering_pars_fragment_glsl_default,\\n  roughnessmap_fragment: roughnessmap_fragment_glsl_default,\\n  roughnessmap_pars_fragment: roughnessmap_pars_fragment_glsl_default,\\n  shadowmap_pars_fragment: shadowmap_pars_fragment_glsl_default,\\n  shadowmap_pars_vertex: shadowmap_pars_vertex_glsl_default,\\n  shadowmap_vertex: shadowmap_vertex_glsl_default,\\n  shadowmask_pars_fragment: shadowmask_pars_fragment_glsl_default,\\n  skinbase_vertex: skinbase_vertex_glsl_default,\\n  skinning_pars_vertex: skinning_pars_vertex_glsl_default,\\n  skinning_vertex: skinning_vertex_glsl_default,\\n  skinnormal_vertex: skinnormal_vertex_glsl_default,\\n  specularmap_fragment: specularmap_fragment_glsl_default,\\n  specularmap_pars_fragment: specularmap_pars_fragment_glsl_default,\\n  tonemapping_fragment: tonemapping_fragment_glsl_default,\\n  tonemapping_pars_fragment: tonemapping_pars_fragment_glsl_default,\\n  transmission_fragment: transmission_fragment_glsl_default,\\n  transmission_pars_fragment: transmission_pars_fragment_glsl_default,\\n  uv_pars_fragment: uv_pars_fragment_glsl_default,\\n  uv_pars_vertex: uv_pars_vertex_glsl_default,\\n  uv_vertex: uv_vertex_glsl_default,\\n  uv2_pars_fragment: uv2_pars_fragment_glsl_default,\\n  uv2_pars_vertex: uv2_pars_vertex_glsl_default,\\n  uv2_vertex: uv2_vertex_glsl_default,\\n  worldpos_vertex: worldpos_vertex_glsl_default,\\n  background_vert: vertex,\\n  background_frag: fragment,\\n  cube_vert: vertex2,\\n  cube_frag: fragment2,\\n  depth_vert: vertex3,\\n  depth_frag: fragment3,\\n  distanceRGBA_vert: vertex4,\\n  distanceRGBA_frag: fragment4,\\n  equirect_vert: vertex5,\\n  equirect_frag: fragment5,\\n  linedashed_vert: vertex6,\\n  linedashed_frag: fragment6,\\n  meshbasic_vert: vertex7,\\n  meshbasic_frag: fragment7,\\n  meshlambert_vert: vertex8,\\n  meshlambert_frag: fragment8,\\n  meshmatcap_vert: vertex9,\\n  meshmatcap_frag: fragment9,\\n  meshnormal_vert: vertex10,\\n  meshnormal_frag: fragment10,\\n  meshphong_vert: vertex11,\\n  meshphong_frag: fragment11,\\n  meshphysical_vert: vertex12,\\n  meshphysical_frag: fragment12,\\n  meshtoon_vert: vertex13,\\n  meshtoon_frag: fragment13,\\n  points_vert: vertex14,\\n  points_frag: fragment14,\\n  shadow_vert: vertex15,\\n  shadow_frag: fragment15,\\n  sprite_vert: vertex16,\\n  sprite_frag: fragment16\\n};\\n\\n// ../../../node_modules/three/src/renderers/shaders/UniformsLib.js\\nvar UniformsLib = {\\n  common: {\\n    diffuse: {value: new Color(16777215)},\\n    opacity: {value: 1},\\n    map: {value: null},\\n    uvTransform: {value: new Matrix3()},\\n    uv2Transform: {value: new Matrix3()},\\n    alphaMap: {value: null},\\n    alphaTest: {value: 0}\\n  },\\n  specularmap: {\\n    specularMap: {value: null}\\n  },\\n  envmap: {\\n    envMap: {value: null},\\n    flipEnvMap: {value: -1},\\n    reflectivity: {value: 1},\\n    ior: {value: 1.5},\\n    refractionRatio: {value: 0.98},\\n    maxMipLevel: {value: 0}\\n  },\\n  aomap: {\\n    aoMap: {value: null},\\n    aoMapIntensity: {value: 1}\\n  },\\n  lightmap: {\\n    lightMap: {value: null},\\n    lightMapIntensity: {value: 1}\\n  },\\n  emissivemap: {\\n    emissiveMap: {value: null}\\n  },\\n  bumpmap: {\\n    bumpMap: {value: null},\\n    bumpScale: {value: 1}\\n  },\\n  normalmap: {\\n    normalMap: {value: null},\\n    normalScale: {value: new Vector2(1, 1)}\\n  },\\n  displacementmap: {\\n    displacementMap: {value: null},\\n    displacementScale: {value: 1},\\n    displacementBias: {value: 0}\\n  },\\n  roughnessmap: {\\n    roughnessMap: {value: null}\\n  },\\n  metalnessmap: {\\n    metalnessMap: {value: null}\\n  },\\n  gradientmap: {\\n    gradientMap: {value: null}\\n  },\\n  fog: {\\n    fogDensity: {value: 25e-5},\\n    fogNear: {value: 1},\\n    fogFar: {value: 2e3},\\n    fogColor: {value: new Color(16777215)}\\n  },\\n  lights: {\\n    ambientLightColor: {value: []},\\n    lightProbe: {value: []},\\n    directionalLights: {value: [], properties: {\\n      direction: {},\\n      color: {}\\n    }},\\n    directionalLightShadows: {value: [], properties: {\\n      shadowBias: {},\\n      shadowNormalBias: {},\\n      shadowRadius: {},\\n      shadowMapSize: {}\\n    }},\\n    directionalShadowMap: {value: []},\\n    directionalShadowMatrix: {value: []},\\n    spotLights: {value: [], properties: {\\n      color: {},\\n      position: {},\\n      direction: {},\\n      distance: {},\\n      coneCos: {},\\n      penumbraCos: {},\\n      decay: {}\\n    }},\\n    spotLightShadows: {value: [], properties: {\\n      shadowBias: {},\\n      shadowNormalBias: {},\\n      shadowRadius: {},\\n      shadowMapSize: {}\\n    }},\\n    spotShadowMap: {value: []},\\n    spotShadowMatrix: {value: []},\\n    pointLights: {value: [], properties: {\\n      color: {},\\n      position: {},\\n      decay: {},\\n      distance: {}\\n    }},\\n    pointLightShadows: {value: [], properties: {\\n      shadowBias: {},\\n      shadowNormalBias: {},\\n      shadowRadius: {},\\n      shadowMapSize: {},\\n      shadowCameraNear: {},\\n      shadowCameraFar: {}\\n    }},\\n    pointShadowMap: {value: []},\\n    pointShadowMatrix: {value: []},\\n    hemisphereLights: {value: [], properties: {\\n      direction: {},\\n      skyColor: {},\\n      groundColor: {}\\n    }},\\n    rectAreaLights: {value: [], properties: {\\n      color: {},\\n      position: {},\\n      width: {},\\n      height: {}\\n    }},\\n    ltc_1: {value: null},\\n    ltc_2: {value: null}\\n  },\\n  points: {\\n    diffuse: {value: new Color(16777215)},\\n    opacity: {value: 1},\\n    size: {value: 1},\\n    scale: {value: 1},\\n    map: {value: null},\\n    alphaMap: {value: null},\\n    alphaTest: {value: 0},\\n    uvTransform: {value: new Matrix3()}\\n  },\\n  sprite: {\\n    diffuse: {value: new Color(16777215)},\\n    opacity: {value: 1},\\n    center: {value: new Vector2(0.5, 0.5)},\\n    rotation: {value: 0},\\n    map: {value: null},\\n    alphaMap: {value: null},\\n    alphaTest: {value: 0},\\n    uvTransform: {value: new Matrix3()}\\n  }\\n};\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib.js\\nvar ShaderLib = {\\n  basic: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.specularmap,\\n      UniformsLib.envmap,\\n      UniformsLib.aomap,\\n      UniformsLib.lightmap,\\n      UniformsLib.fog\\n    ]),\\n    vertexShader: ShaderChunk.meshbasic_vert,\\n    fragmentShader: ShaderChunk.meshbasic_frag\\n  },\\n  lambert: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.specularmap,\\n      UniformsLib.envmap,\\n      UniformsLib.aomap,\\n      UniformsLib.lightmap,\\n      UniformsLib.emissivemap,\\n      UniformsLib.fog,\\n      UniformsLib.lights,\\n      {\\n        emissive: {value: new Color(0)}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.meshlambert_vert,\\n    fragmentShader: ShaderChunk.meshlambert_frag\\n  },\\n  phong: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.specularmap,\\n      UniformsLib.envmap,\\n      UniformsLib.aomap,\\n      UniformsLib.lightmap,\\n      UniformsLib.emissivemap,\\n      UniformsLib.bumpmap,\\n      UniformsLib.normalmap,\\n      UniformsLib.displacementmap,\\n      UniformsLib.fog,\\n      UniformsLib.lights,\\n      {\\n        emissive: {value: new Color(0)},\\n        specular: {value: new Color(1118481)},\\n        shininess: {value: 30}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.meshphong_vert,\\n    fragmentShader: ShaderChunk.meshphong_frag\\n  },\\n  standard: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.envmap,\\n      UniformsLib.aomap,\\n      UniformsLib.lightmap,\\n      UniformsLib.emissivemap,\\n      UniformsLib.bumpmap,\\n      UniformsLib.normalmap,\\n      UniformsLib.displacementmap,\\n      UniformsLib.roughnessmap,\\n      UniformsLib.metalnessmap,\\n      UniformsLib.fog,\\n      UniformsLib.lights,\\n      {\\n        emissive: {value: new Color(0)},\\n        roughness: {value: 1},\\n        metalness: {value: 0},\\n        envMapIntensity: {value: 1}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.meshphysical_vert,\\n    fragmentShader: ShaderChunk.meshphysical_frag\\n  },\\n  toon: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.aomap,\\n      UniformsLib.lightmap,\\n      UniformsLib.emissivemap,\\n      UniformsLib.bumpmap,\\n      UniformsLib.normalmap,\\n      UniformsLib.displacementmap,\\n      UniformsLib.gradientmap,\\n      UniformsLib.fog,\\n      UniformsLib.lights,\\n      {\\n        emissive: {value: new Color(0)}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.meshtoon_vert,\\n    fragmentShader: ShaderChunk.meshtoon_frag\\n  },\\n  matcap: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.bumpmap,\\n      UniformsLib.normalmap,\\n      UniformsLib.displacementmap,\\n      UniformsLib.fog,\\n      {\\n        matcap: {value: null}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.meshmatcap_vert,\\n    fragmentShader: ShaderChunk.meshmatcap_frag\\n  },\\n  points: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.points,\\n      UniformsLib.fog\\n    ]),\\n    vertexShader: ShaderChunk.points_vert,\\n    fragmentShader: ShaderChunk.points_frag\\n  },\\n  dashed: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.fog,\\n      {\\n        scale: {value: 1},\\n        dashSize: {value: 1},\\n        totalSize: {value: 2}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.linedashed_vert,\\n    fragmentShader: ShaderChunk.linedashed_frag\\n  },\\n  depth: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.displacementmap\\n    ]),\\n    vertexShader: ShaderChunk.depth_vert,\\n    fragmentShader: ShaderChunk.depth_frag\\n  },\\n  normal: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.bumpmap,\\n      UniformsLib.normalmap,\\n      UniformsLib.displacementmap,\\n      {\\n        opacity: {value: 1}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.meshnormal_vert,\\n    fragmentShader: ShaderChunk.meshnormal_frag\\n  },\\n  sprite: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.sprite,\\n      UniformsLib.fog\\n    ]),\\n    vertexShader: ShaderChunk.sprite_vert,\\n    fragmentShader: ShaderChunk.sprite_frag\\n  },\\n  background: {\\n    uniforms: {\\n      uvTransform: {value: new Matrix3()},\\n      t2D: {value: null}\\n    },\\n    vertexShader: ShaderChunk.background_vert,\\n    fragmentShader: ShaderChunk.background_frag\\n  },\\n  cube: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.envmap,\\n      {\\n        opacity: {value: 1}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.cube_vert,\\n    fragmentShader: ShaderChunk.cube_frag\\n  },\\n  equirect: {\\n    uniforms: {\\n      tEquirect: {value: null}\\n    },\\n    vertexShader: ShaderChunk.equirect_vert,\\n    fragmentShader: ShaderChunk.equirect_frag\\n  },\\n  distanceRGBA: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.common,\\n      UniformsLib.displacementmap,\\n      {\\n        referencePosition: {value: new Vector3()},\\n        nearDistance: {value: 1},\\n        farDistance: {value: 1e3}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.distanceRGBA_vert,\\n    fragmentShader: ShaderChunk.distanceRGBA_frag\\n  },\\n  shadow: {\\n    uniforms: mergeUniforms([\\n      UniformsLib.lights,\\n      UniformsLib.fog,\\n      {\\n        color: {value: new Color(0)},\\n        opacity: {value: 1}\\n      }\\n    ]),\\n    vertexShader: ShaderChunk.shadow_vert,\\n    fragmentShader: ShaderChunk.shadow_frag\\n  }\\n};\\nShaderLib.physical = {\\n  uniforms: mergeUniforms([\\n    ShaderLib.standard.uniforms,\\n    {\\n      clearcoat: {value: 0},\\n      clearcoatMap: {value: null},\\n      clearcoatRoughness: {value: 0},\\n      clearcoatRoughnessMap: {value: null},\\n      clearcoatNormalScale: {value: new Vector2(1, 1)},\\n      clearcoatNormalMap: {value: null},\\n      sheen: {value: 0},\\n      sheenTint: {value: new Color(0)},\\n      sheenRoughness: {value: 0},\\n      transmission: {value: 0},\\n      transmissionMap: {value: null},\\n      transmissionSamplerSize: {value: new Vector2()},\\n      transmissionSamplerMap: {value: null},\\n      thickness: {value: 0},\\n      thicknessMap: {value: null},\\n      attenuationDistance: {value: 0},\\n      attenuationTint: {value: new Color(0)},\\n      specularIntensity: {value: 0},\\n      specularIntensityMap: {value: null},\\n      specularTint: {value: new Color(1, 1, 1)},\\n      specularTintMap: {value: null}\\n    }\\n  ]),\\n  vertexShader: ShaderChunk.meshphysical_vert,\\n  fragmentShader: ShaderChunk.meshphysical_frag\\n};\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLBackground.js\\nfunction WebGLBackground(renderer, cubemaps, state, objects, premultipliedAlpha) {\\n  const clearColor = new Color(0);\\n  let clearAlpha = 0;\\n  let planeMesh;\\n  let boxMesh;\\n  let currentBackground = null;\\n  let currentBackgroundVersion = 0;\\n  let currentTonemapping = null;\\n  function render(renderList, scene) {\\n    let forceClear = false;\\n    let background2 = scene.isScene === true ? scene.background : null;\\n    if (background2 && background2.isTexture) {\\n      background2 = cubemaps.get(background2);\\n    }\\n    const xr = renderer.xr;\\n    const session = xr.getSession && xr.getSession();\\n    if (session && session.environmentBlendMode === \\\\\\\"additive\\\\\\\") {\\n      background2 = null;\\n    }\\n    if (background2 === null) {\\n      setClear(clearColor, clearAlpha);\\n    } else if (background2 && background2.isColor) {\\n      setClear(background2, 1);\\n      forceClear = true;\\n    }\\n    if (renderer.autoClear || forceClear) {\\n      renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil);\\n    }\\n    if (background2 && (background2.isCubeTexture || background2.mapping === CubeUVReflectionMapping)) {\\n      if (boxMesh === void 0) {\\n        boxMesh = new Mesh(new BoxGeometry(1, 1, 1), new ShaderMaterial({\\n          name: \\\\\\\"BackgroundCubeMaterial\\\\\\\",\\n          uniforms: cloneUniforms(ShaderLib.cube.uniforms),\\n          vertexShader: ShaderLib.cube.vertexShader,\\n          fragmentShader: ShaderLib.cube.fragmentShader,\\n          side: BackSide,\\n          depthTest: false,\\n          depthWrite: false,\\n          fog: false\\n        }));\\n        boxMesh.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\");\\n        boxMesh.geometry.deleteAttribute(\\\\\\\"uv\\\\\\\");\\n        boxMesh.onBeforeRender = function(renderer2, scene2, camera) {\\n          this.matrixWorld.copyPosition(camera.matrixWorld);\\n        };\\n        Object.defineProperty(boxMesh.material, \\\\\\\"envMap\\\\\\\", {\\n          get: function() {\\n            return this.uniforms.envMap.value;\\n          }\\n        });\\n        objects.update(boxMesh);\\n      }\\n      boxMesh.material.uniforms.envMap.value = background2;\\n      boxMesh.material.uniforms.flipEnvMap.value = background2.isCubeTexture && background2.isRenderTargetTexture === false ? -1 : 1;\\n      if (currentBackground !== background2 || currentBackgroundVersion !== background2.version || currentTonemapping !== renderer.toneMapping) {\\n        boxMesh.material.needsUpdate = true;\\n        currentBackground = background2;\\n        currentBackgroundVersion = background2.version;\\n        currentTonemapping = renderer.toneMapping;\\n      }\\n      renderList.unshift(boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null);\\n    } else if (background2 && background2.isTexture) {\\n      if (planeMesh === void 0) {\\n        planeMesh = new Mesh(new PlaneGeometry(2, 2), new ShaderMaterial({\\n          name: \\\\\\\"BackgroundMaterial\\\\\\\",\\n          uniforms: cloneUniforms(ShaderLib.background.uniforms),\\n          vertexShader: ShaderLib.background.vertexShader,\\n          fragmentShader: ShaderLib.background.fragmentShader,\\n          side: FrontSide,\\n          depthTest: false,\\n          depthWrite: false,\\n          fog: false\\n        }));\\n        planeMesh.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\");\\n        Object.defineProperty(planeMesh.material, \\\\\\\"map\\\\\\\", {\\n          get: function() {\\n            return this.uniforms.t2D.value;\\n          }\\n        });\\n        objects.update(planeMesh);\\n      }\\n      planeMesh.material.uniforms.t2D.value = background2;\\n      if (background2.matrixAutoUpdate === true) {\\n        background2.updateMatrix();\\n      }\\n      planeMesh.material.uniforms.uvTransform.value.copy(background2.matrix);\\n      if (currentBackground !== background2 || currentBackgroundVersion !== background2.version || currentTonemapping !== renderer.toneMapping) {\\n        planeMesh.material.needsUpdate = true;\\n        currentBackground = background2;\\n        currentBackgroundVersion = background2.version;\\n        currentTonemapping = renderer.toneMapping;\\n      }\\n      renderList.unshift(planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null);\\n    }\\n  }\\n  function setClear(color, alpha) {\\n    state.buffers.color.setClear(color.r, color.g, color.b, alpha, premultipliedAlpha);\\n  }\\n  return {\\n    getClearColor: function() {\\n      return clearColor;\\n    },\\n    setClearColor: function(color, alpha = 1) {\\n      clearColor.set(color);\\n      clearAlpha = alpha;\\n      setClear(clearColor, clearAlpha);\\n    },\\n    getClearAlpha: function() {\\n      return clearAlpha;\\n    },\\n    setClearAlpha: function(alpha) {\\n      clearAlpha = alpha;\\n      setClear(clearColor, clearAlpha);\\n    },\\n    render\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLBindingStates.js\\nfunction WebGLBindingStates(gl, extensions, attributes, capabilities) {\\n  const maxVertexAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\\n  const extension = capabilities.isWebGL2 ? null : extensions.get(\\\\\\\"OES_vertex_array_object\\\\\\\");\\n  const vaoAvailable = capabilities.isWebGL2 || extension !== null;\\n  const bindingStates = {};\\n  const defaultState = createBindingState(null);\\n  let currentState = defaultState;\\n  function setup(object, material, program, geometry, index) {\\n    let updateBuffers = false;\\n    if (vaoAvailable) {\\n      const state = getBindingState(geometry, program, material);\\n      if (currentState !== state) {\\n        currentState = state;\\n        bindVertexArrayObject(currentState.object);\\n      }\\n      updateBuffers = needsUpdate(geometry, index);\\n      if (updateBuffers)\\n        saveCache(geometry, index);\\n    } else {\\n      const wireframe = material.wireframe === true;\\n      if (currentState.geometry !== geometry.id || currentState.program !== program.id || currentState.wireframe !== wireframe) {\\n        currentState.geometry = geometry.id;\\n        currentState.program = program.id;\\n        currentState.wireframe = wireframe;\\n        updateBuffers = true;\\n      }\\n    }\\n    if (object.isInstancedMesh === true) {\\n      updateBuffers = true;\\n    }\\n    if (index !== null) {\\n      attributes.update(index, gl.ELEMENT_ARRAY_BUFFER);\\n    }\\n    if (updateBuffers) {\\n      setupVertexAttributes(object, material, program, geometry);\\n      if (index !== null) {\\n        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, attributes.get(index).buffer);\\n      }\\n    }\\n  }\\n  function createVertexArrayObject() {\\n    if (capabilities.isWebGL2)\\n      return gl.createVertexArray();\\n    return extension.createVertexArrayOES();\\n  }\\n  function bindVertexArrayObject(vao) {\\n    if (capabilities.isWebGL2)\\n      return gl.bindVertexArray(vao);\\n    return extension.bindVertexArrayOES(vao);\\n  }\\n  function deleteVertexArrayObject(vao) {\\n    if (capabilities.isWebGL2)\\n      return gl.deleteVertexArray(vao);\\n    return extension.deleteVertexArrayOES(vao);\\n  }\\n  function getBindingState(geometry, program, material) {\\n    const wireframe = material.wireframe === true;\\n    let programMap = bindingStates[geometry.id];\\n    if (programMap === void 0) {\\n      programMap = {};\\n      bindingStates[geometry.id] = programMap;\\n    }\\n    let stateMap = programMap[program.id];\\n    if (stateMap === void 0) {\\n      stateMap = {};\\n      programMap[program.id] = stateMap;\\n    }\\n    let state = stateMap[wireframe];\\n    if (state === void 0) {\\n      state = createBindingState(createVertexArrayObject());\\n      stateMap[wireframe] = state;\\n    }\\n    return state;\\n  }\\n  function createBindingState(vao) {\\n    const newAttributes = [];\\n    const enabledAttributes = [];\\n    const attributeDivisors = [];\\n    for (let i = 0; i < maxVertexAttributes; i++) {\\n      newAttributes[i] = 0;\\n      enabledAttributes[i] = 0;\\n      attributeDivisors[i] = 0;\\n    }\\n    return {\\n      geometry: null,\\n      program: null,\\n      wireframe: false,\\n      newAttributes,\\n      enabledAttributes,\\n      attributeDivisors,\\n      object: vao,\\n      attributes: {},\\n      index: null\\n    };\\n  }\\n  function needsUpdate(geometry, index) {\\n    const cachedAttributes = currentState.attributes;\\n    const geometryAttributes = geometry.attributes;\\n    let attributesNum = 0;\\n    for (const key in geometryAttributes) {\\n      const cachedAttribute = cachedAttributes[key];\\n      const geometryAttribute = geometryAttributes[key];\\n      if (cachedAttribute === void 0)\\n        return true;\\n      if (cachedAttribute.attribute !== geometryAttribute)\\n        return true;\\n      if (cachedAttribute.data !== geometryAttribute.data)\\n        return true;\\n      attributesNum++;\\n    }\\n    if (currentState.attributesNum !== attributesNum)\\n      return true;\\n    if (currentState.index !== index)\\n      return true;\\n    return false;\\n  }\\n  function saveCache(geometry, index) {\\n    const cache = {};\\n    const attributes2 = geometry.attributes;\\n    let attributesNum = 0;\\n    for (const key in attributes2) {\\n      const attribute = attributes2[key];\\n      const data = {};\\n      data.attribute = attribute;\\n      if (attribute.data) {\\n        data.data = attribute.data;\\n      }\\n      cache[key] = data;\\n      attributesNum++;\\n    }\\n    currentState.attributes = cache;\\n    currentState.attributesNum = attributesNum;\\n    currentState.index = index;\\n  }\\n  function initAttributes() {\\n    const newAttributes = currentState.newAttributes;\\n    for (let i = 0, il = newAttributes.length; i < il; i++) {\\n      newAttributes[i] = 0;\\n    }\\n  }\\n  function enableAttribute(attribute) {\\n    enableAttributeAndDivisor(attribute, 0);\\n  }\\n  function enableAttributeAndDivisor(attribute, meshPerAttribute) {\\n    const newAttributes = currentState.newAttributes;\\n    const enabledAttributes = currentState.enabledAttributes;\\n    const attributeDivisors = currentState.attributeDivisors;\\n    newAttributes[attribute] = 1;\\n    if (enabledAttributes[attribute] === 0) {\\n      gl.enableVertexAttribArray(attribute);\\n      enabledAttributes[attribute] = 1;\\n    }\\n    if (attributeDivisors[attribute] !== meshPerAttribute) {\\n      const extension2 = capabilities.isWebGL2 ? gl : extensions.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\");\\n      extension2[capabilities.isWebGL2 ? \\\\\\\"vertexAttribDivisor\\\\\\\" : \\\\\\\"vertexAttribDivisorANGLE\\\\\\\"](attribute, meshPerAttribute);\\n      attributeDivisors[attribute] = meshPerAttribute;\\n    }\\n  }\\n  function disableUnusedAttributes() {\\n    const newAttributes = currentState.newAttributes;\\n    const enabledAttributes = currentState.enabledAttributes;\\n    for (let i = 0, il = enabledAttributes.length; i < il; i++) {\\n      if (enabledAttributes[i] !== newAttributes[i]) {\\n        gl.disableVertexAttribArray(i);\\n        enabledAttributes[i] = 0;\\n      }\\n    }\\n  }\\n  function vertexAttribPointer(index, size, type, normalized, stride, offset) {\\n    if (capabilities.isWebGL2 === true && (type === gl.INT || type === gl.UNSIGNED_INT)) {\\n      gl.vertexAttribIPointer(index, size, type, stride, offset);\\n    } else {\\n      gl.vertexAttribPointer(index, size, type, normalized, stride, offset);\\n    }\\n  }\\n  function setupVertexAttributes(object, material, program, geometry) {\\n    if (capabilities.isWebGL2 === false && (object.isInstancedMesh || geometry.isInstancedBufferGeometry)) {\\n      if (extensions.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\") === null)\\n        return;\\n    }\\n    initAttributes();\\n    const geometryAttributes = geometry.attributes;\\n    const programAttributes = program.getAttributes();\\n    const materialDefaultAttributeValues = material.defaultAttributeValues;\\n    for (const name in programAttributes) {\\n      const programAttribute = programAttributes[name];\\n      if (programAttribute.location >= 0) {\\n        let geometryAttribute = geometryAttributes[name];\\n        if (geometryAttribute === void 0) {\\n          if (name === \\\\\\\"instanceMatrix\\\\\\\" && object.instanceMatrix)\\n            geometryAttribute = object.instanceMatrix;\\n          if (name === \\\\\\\"instanceColor\\\\\\\" && object.instanceColor)\\n            geometryAttribute = object.instanceColor;\\n        }\\n        if (geometryAttribute !== void 0) {\\n          const normalized = geometryAttribute.normalized;\\n          const size = geometryAttribute.itemSize;\\n          const attribute = attributes.get(geometryAttribute);\\n          if (attribute === void 0)\\n            continue;\\n          const buffer = attribute.buffer;\\n          const type = attribute.type;\\n          const bytesPerElement = attribute.bytesPerElement;\\n          if (geometryAttribute.isInterleavedBufferAttribute) {\\n            const data = geometryAttribute.data;\\n            const stride = data.stride;\\n            const offset = geometryAttribute.offset;\\n            if (data && data.isInstancedInterleavedBuffer) {\\n              for (let i = 0; i < programAttribute.locationSize; i++) {\\n                enableAttributeAndDivisor(programAttribute.location + i, data.meshPerAttribute);\\n              }\\n              if (object.isInstancedMesh !== true && geometry._maxInstanceCount === void 0) {\\n                geometry._maxInstanceCount = data.meshPerAttribute * data.count;\\n              }\\n            } else {\\n              for (let i = 0; i < programAttribute.locationSize; i++) {\\n                enableAttribute(programAttribute.location + i);\\n              }\\n            }\\n            gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\\n            for (let i = 0; i < programAttribute.locationSize; i++) {\\n              vertexAttribPointer(programAttribute.location + i, size / programAttribute.locationSize, type, normalized, stride * bytesPerElement, (offset + size / programAttribute.locationSize * i) * bytesPerElement);\\n            }\\n          } else {\\n            if (geometryAttribute.isInstancedBufferAttribute) {\\n              for (let i = 0; i < programAttribute.locationSize; i++) {\\n                enableAttributeAndDivisor(programAttribute.location + i, geometryAttribute.meshPerAttribute);\\n              }\\n              if (object.isInstancedMesh !== true && geometry._maxInstanceCount === void 0) {\\n                geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\\n              }\\n            } else {\\n              for (let i = 0; i < programAttribute.locationSize; i++) {\\n                enableAttribute(programAttribute.location + i);\\n              }\\n            }\\n            gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\\n            for (let i = 0; i < programAttribute.locationSize; i++) {\\n              vertexAttribPointer(programAttribute.location + i, size / programAttribute.locationSize, type, normalized, size * bytesPerElement, size / programAttribute.locationSize * i * bytesPerElement);\\n            }\\n          }\\n        } else if (materialDefaultAttributeValues !== void 0) {\\n          const value = materialDefaultAttributeValues[name];\\n          if (value !== void 0) {\\n            switch (value.length) {\\n              case 2:\\n                gl.vertexAttrib2fv(programAttribute.location, value);\\n                break;\\n              case 3:\\n                gl.vertexAttrib3fv(programAttribute.location, value);\\n                break;\\n              case 4:\\n                gl.vertexAttrib4fv(programAttribute.location, value);\\n                break;\\n              default:\\n                gl.vertexAttrib1fv(programAttribute.location, value);\\n            }\\n          }\\n        }\\n      }\\n    }\\n    disableUnusedAttributes();\\n  }\\n  function dispose() {\\n    reset();\\n    for (const geometryId in bindingStates) {\\n      const programMap = bindingStates[geometryId];\\n      for (const programId in programMap) {\\n        const stateMap = programMap[programId];\\n        for (const wireframe in stateMap) {\\n          deleteVertexArrayObject(stateMap[wireframe].object);\\n          delete stateMap[wireframe];\\n        }\\n        delete programMap[programId];\\n      }\\n      delete bindingStates[geometryId];\\n    }\\n  }\\n  function releaseStatesOfGeometry(geometry) {\\n    if (bindingStates[geometry.id] === void 0)\\n      return;\\n    const programMap = bindingStates[geometry.id];\\n    for (const programId in programMap) {\\n      const stateMap = programMap[programId];\\n      for (const wireframe in stateMap) {\\n        deleteVertexArrayObject(stateMap[wireframe].object);\\n        delete stateMap[wireframe];\\n      }\\n      delete programMap[programId];\\n    }\\n    delete bindingStates[geometry.id];\\n  }\\n  function releaseStatesOfProgram(program) {\\n    for (const geometryId in bindingStates) {\\n      const programMap = bindingStates[geometryId];\\n      if (programMap[program.id] === void 0)\\n        continue;\\n      const stateMap = programMap[program.id];\\n      for (const wireframe in stateMap) {\\n        deleteVertexArrayObject(stateMap[wireframe].object);\\n        delete stateMap[wireframe];\\n      }\\n      delete programMap[program.id];\\n    }\\n  }\\n  function reset() {\\n    resetDefaultState();\\n    if (currentState === defaultState)\\n      return;\\n    currentState = defaultState;\\n    bindVertexArrayObject(currentState.object);\\n  }\\n  function resetDefaultState() {\\n    defaultState.geometry = null;\\n    defaultState.program = null;\\n    defaultState.wireframe = false;\\n  }\\n  return {\\n    setup,\\n    reset,\\n    resetDefaultState,\\n    dispose,\\n    releaseStatesOfGeometry,\\n    releaseStatesOfProgram,\\n    initAttributes,\\n    enableAttribute,\\n    disableUnusedAttributes\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js\\nfunction WebGLBufferRenderer(gl, extensions, info, capabilities) {\\n  const isWebGL2 = capabilities.isWebGL2;\\n  let mode;\\n  function setMode(value) {\\n    mode = value;\\n  }\\n  function render(start, count) {\\n    gl.drawArrays(mode, start, count);\\n    info.update(count, mode, 1);\\n  }\\n  function renderInstances(start, count, primcount) {\\n    if (primcount === 0)\\n      return;\\n    let extension, methodName;\\n    if (isWebGL2) {\\n      extension = gl;\\n      methodName = \\\\\\\"drawArraysInstanced\\\\\\\";\\n    } else {\\n      extension = extensions.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\");\\n      methodName = \\\\\\\"drawArraysInstancedANGLE\\\\\\\";\\n      if (extension === null) {\\n        console.error(\\\\\\\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");\\n        return;\\n      }\\n    }\\n    extension[methodName](mode, start, count, primcount);\\n    info.update(count, mode, primcount);\\n  }\\n  this.setMode = setMode;\\n  this.render = render;\\n  this.renderInstances = renderInstances;\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLCapabilities.js\\nfunction WebGLCapabilities(gl, extensions, parameters) {\\n  let maxAnisotropy;\\n  function getMaxAnisotropy() {\\n    if (maxAnisotropy !== void 0)\\n      return maxAnisotropy;\\n    if (extensions.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\") === true) {\\n      const extension = extensions.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");\\n      maxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\\n    } else {\\n      maxAnisotropy = 0;\\n    }\\n    return maxAnisotropy;\\n  }\\n  function getMaxPrecision(precision2) {\\n    if (precision2 === \\\\\\\"highp\\\\\\\") {\\n      if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision > 0) {\\n        return \\\\\\\"highp\\\\\\\";\\n      }\\n      precision2 = \\\\\\\"mediump\\\\\\\";\\n    }\\n    if (precision2 === \\\\\\\"mediump\\\\\\\") {\\n      if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision > 0) {\\n        return \\\\\\\"mediump\\\\\\\";\\n      }\\n    }\\n    return \\\\\\\"lowp\\\\\\\";\\n  }\\n  const isWebGL2 = typeof WebGL2RenderingContext !== \\\\\\\"undefined\\\\\\\" && gl instanceof WebGL2RenderingContext || typeof WebGL2ComputeRenderingContext !== \\\\\\\"undefined\\\\\\\" && gl instanceof WebGL2ComputeRenderingContext;\\n  let precision = parameters.precision !== void 0 ? parameters.precision : \\\\\\\"highp\\\\\\\";\\n  const maxPrecision = getMaxPrecision(precision);\\n  if (maxPrecision !== precision) {\\n    console.warn(\\\\\\\"THREE.WebGLRenderer:\\\\\\\", precision, \\\\\\\"not supported, using\\\\\\\", maxPrecision, \\\\\\\"instead.\\\\\\\");\\n    precision = maxPrecision;\\n  }\\n  const drawBuffers = isWebGL2 || extensions.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\");\\n  const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\\n  const maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\\n  const maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);\\n  const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\\n  const maxCubemapSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);\\n  const maxAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\\n  const maxVertexUniforms = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);\\n  const maxVaryings = gl.getParameter(gl.MAX_VARYING_VECTORS);\\n  const maxFragmentUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);\\n  const vertexTextures = maxVertexTextures > 0;\\n  const floatFragmentTextures = isWebGL2 || extensions.has(\\\\\\\"OES_texture_float\\\\\\\");\\n  const floatVertexTextures = vertexTextures && floatFragmentTextures;\\n  const maxSamples = isWebGL2 ? gl.getParameter(gl.MAX_SAMPLES) : 0;\\n  return {\\n    isWebGL2,\\n    drawBuffers,\\n    getMaxAnisotropy,\\n    getMaxPrecision,\\n    precision,\\n    logarithmicDepthBuffer,\\n    maxTextures,\\n    maxVertexTextures,\\n    maxTextureSize,\\n    maxCubemapSize,\\n    maxAttributes,\\n    maxVertexUniforms,\\n    maxVaryings,\\n    maxFragmentUniforms,\\n    vertexTextures,\\n    floatFragmentTextures,\\n    floatVertexTextures,\\n    maxSamples\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLClipping.js\\nfunction WebGLClipping(properties) {\\n  const scope = this;\\n  let globalState = null, numGlobalPlanes = 0, localClippingEnabled = false, renderingShadows = false;\\n  const plane = new Plane(), viewNormalMatrix = new Matrix3(), uniform = {value: null, needsUpdate: false};\\n  this.uniform = uniform;\\n  this.numPlanes = 0;\\n  this.numIntersection = 0;\\n  this.init = function(planes, enableLocalClipping, camera) {\\n    const enabled = planes.length !== 0 || enableLocalClipping || numGlobalPlanes !== 0 || localClippingEnabled;\\n    localClippingEnabled = enableLocalClipping;\\n    globalState = projectPlanes(planes, camera, 0);\\n    numGlobalPlanes = planes.length;\\n    return enabled;\\n  };\\n  this.beginShadows = function() {\\n    renderingShadows = true;\\n    projectPlanes(null);\\n  };\\n  this.endShadows = function() {\\n    renderingShadows = false;\\n    resetGlobalState();\\n  };\\n  this.setState = function(material, camera, useCache) {\\n    const planes = material.clippingPlanes, clipIntersection = material.clipIntersection, clipShadows = material.clipShadows;\\n    const materialProperties = properties.get(material);\\n    if (!localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && !clipShadows) {\\n      if (renderingShadows) {\\n        projectPlanes(null);\\n      } else {\\n        resetGlobalState();\\n      }\\n    } else {\\n      const nGlobal = renderingShadows ? 0 : numGlobalPlanes, lGlobal = nGlobal * 4;\\n      let dstArray = materialProperties.clippingState || null;\\n      uniform.value = dstArray;\\n      dstArray = projectPlanes(planes, camera, lGlobal, useCache);\\n      for (let i = 0; i !== lGlobal; ++i) {\\n        dstArray[i] = globalState[i];\\n      }\\n      materialProperties.clippingState = dstArray;\\n      this.numIntersection = clipIntersection ? this.numPlanes : 0;\\n      this.numPlanes += nGlobal;\\n    }\\n  };\\n  function resetGlobalState() {\\n    if (uniform.value !== globalState) {\\n      uniform.value = globalState;\\n      uniform.needsUpdate = numGlobalPlanes > 0;\\n    }\\n    scope.numPlanes = numGlobalPlanes;\\n    scope.numIntersection = 0;\\n  }\\n  function projectPlanes(planes, camera, dstOffset, skipTransform) {\\n    const nPlanes = planes !== null ? planes.length : 0;\\n    let dstArray = null;\\n    if (nPlanes !== 0) {\\n      dstArray = uniform.value;\\n      if (skipTransform !== true || dstArray === null) {\\n        const flatSize = dstOffset + nPlanes * 4, viewMatrix = camera.matrixWorldInverse;\\n        viewNormalMatrix.getNormalMatrix(viewMatrix);\\n        if (dstArray === null || dstArray.length < flatSize) {\\n          dstArray = new Float32Array(flatSize);\\n        }\\n        for (let i = 0, i4 = dstOffset; i !== nPlanes; ++i, i4 += 4) {\\n          plane.copy(planes[i]).applyMatrix4(viewMatrix, viewNormalMatrix);\\n          plane.normal.toArray(dstArray, i4);\\n          dstArray[i4 + 3] = plane.constant;\\n        }\\n      }\\n      uniform.value = dstArray;\\n      uniform.needsUpdate = true;\\n    }\\n    scope.numPlanes = nPlanes;\\n    scope.numIntersection = 0;\\n    return dstArray;\\n  }\\n}\\n\\n// ../../../node_modules/three/src/extras/ImageUtils.js\\nvar _canvas;\\nvar ImageUtils = class {\\n  static getDataURL(image) {\\n    if (/^data:/i.test(image.src)) {\\n      return image.src;\\n    }\\n    if (typeof HTMLCanvasElement == \\\\\\\"undefined\\\\\\\") {\\n      return image.src;\\n    }\\n    let canvas;\\n    if (image instanceof HTMLCanvasElement) {\\n      canvas = image;\\n    } else {\\n      if (_canvas === void 0)\\n        _canvas = createElementNS(\\\\\\\"canvas\\\\\\\");\\n      _canvas.width = image.width;\\n      _canvas.height = image.height;\\n      const context = _canvas.getContext(\\\\\\\"2d\\\\\\\");\\n      if (image instanceof ImageData) {\\n        context.putImageData(image, 0, 0);\\n      } else {\\n        context.drawImage(image, 0, 0, image.width, image.height);\\n      }\\n      canvas = _canvas;\\n    }\\n    if (canvas.width > 2048 || canvas.height > 2048) {\\n      console.warn(\\\\\\\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\\\\\\\", image);\\n      return canvas.toDataURL(\\\\\\\"image/jpeg\\\\\\\", 0.6);\\n    } else {\\n      return canvas.toDataURL(\\\\\\\"image/png\\\\\\\");\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/three/src/textures/Texture.js\\nvar textureId = 0;\\nvar Texture = class extends EventDispatcher {\\n  constructor(image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding) {\\n    super();\\n    Object.defineProperty(this, \\\\\\\"id\\\\\\\", {value: textureId++});\\n    this.uuid = generateUUID();\\n    this.name = \\\\\\\"\\\\\\\";\\n    this.image = image;\\n    this.mipmaps = [];\\n    this.mapping = mapping;\\n    this.wrapS = wrapS;\\n    this.wrapT = wrapT;\\n    this.magFilter = magFilter;\\n    this.minFilter = minFilter;\\n    this.anisotropy = anisotropy;\\n    this.format = format;\\n    this.internalFormat = null;\\n    this.type = type;\\n    this.offset = new Vector2(0, 0);\\n    this.repeat = new Vector2(1, 1);\\n    this.center = new Vector2(0, 0);\\n    this.rotation = 0;\\n    this.matrixAutoUpdate = true;\\n    this.matrix = new Matrix3();\\n    this.generateMipmaps = true;\\n    this.premultiplyAlpha = false;\\n    this.flipY = true;\\n    this.unpackAlignment = 4;\\n    this.encoding = encoding;\\n    this.version = 0;\\n    this.onUpdate = null;\\n    this.isRenderTargetTexture = false;\\n  }\\n  updateMatrix() {\\n    this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y);\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n  copy(source) {\\n    this.name = source.name;\\n    this.image = source.image;\\n    this.mipmaps = source.mipmaps.slice(0);\\n    this.mapping = source.mapping;\\n    this.wrapS = source.wrapS;\\n    this.wrapT = source.wrapT;\\n    this.magFilter = source.magFilter;\\n    this.minFilter = source.minFilter;\\n    this.anisotropy = source.anisotropy;\\n    this.format = source.format;\\n    this.internalFormat = source.internalFormat;\\n    this.type = source.type;\\n    this.offset.copy(source.offset);\\n    this.repeat.copy(source.repeat);\\n    this.center.copy(source.center);\\n    this.rotation = source.rotation;\\n    this.matrixAutoUpdate = source.matrixAutoUpdate;\\n    this.matrix.copy(source.matrix);\\n    this.generateMipmaps = source.generateMipmaps;\\n    this.premultiplyAlpha = source.premultiplyAlpha;\\n    this.flipY = source.flipY;\\n    this.unpackAlignment = source.unpackAlignment;\\n    this.encoding = source.encoding;\\n    return this;\\n  }\\n  toJSON(meta) {\\n    const isRootObject = meta === void 0 || typeof meta === \\\\\\\"string\\\\\\\";\\n    if (!isRootObject && meta.textures[this.uuid] !== void 0) {\\n      return meta.textures[this.uuid];\\n    }\\n    const output = {\\n      metadata: {\\n        version: 4.5,\\n        type: \\\\\\\"Texture\\\\\\\",\\n        generator: \\\\\\\"Texture.toJSON\\\\\\\"\\n      },\\n      uuid: this.uuid,\\n      name: this.name,\\n      mapping: this.mapping,\\n      repeat: [this.repeat.x, this.repeat.y],\\n      offset: [this.offset.x, this.offset.y],\\n      center: [this.center.x, this.center.y],\\n      rotation: this.rotation,\\n      wrap: [this.wrapS, this.wrapT],\\n      format: this.format,\\n      type: this.type,\\n      encoding: this.encoding,\\n      minFilter: this.minFilter,\\n      magFilter: this.magFilter,\\n      anisotropy: this.anisotropy,\\n      flipY: this.flipY,\\n      premultiplyAlpha: this.premultiplyAlpha,\\n      unpackAlignment: this.unpackAlignment\\n    };\\n    if (this.image !== void 0) {\\n      const image = this.image;\\n      if (image.uuid === void 0) {\\n        image.uuid = generateUUID();\\n      }\\n      if (!isRootObject && meta.images[image.uuid] === void 0) {\\n        let url;\\n        if (Array.isArray(image)) {\\n          url = [];\\n          for (let i = 0, l = image.length; i < l; i++) {\\n            if (image[i].isDataTexture) {\\n              url.push(serializeImage(image[i].image));\\n            } else {\\n              url.push(serializeImage(image[i]));\\n            }\\n          }\\n        } else {\\n          url = serializeImage(image);\\n        }\\n        meta.images[image.uuid] = {\\n          uuid: image.uuid,\\n          url\\n        };\\n      }\\n      output.image = image.uuid;\\n    }\\n    if (!isRootObject) {\\n      meta.textures[this.uuid] = output;\\n    }\\n    return output;\\n  }\\n  dispose() {\\n    this.dispatchEvent({type: \\\\\\\"dispose\\\\\\\"});\\n  }\\n  transformUv(uv) {\\n    if (this.mapping !== UVMapping)\\n      return uv;\\n    uv.applyMatrix3(this.matrix);\\n    if (uv.x < 0 || uv.x > 1) {\\n      switch (this.wrapS) {\\n        case RepeatWrapping:\\n          uv.x = uv.x - Math.floor(uv.x);\\n          break;\\n        case ClampToEdgeWrapping:\\n          uv.x = uv.x < 0 ? 0 : 1;\\n          break;\\n        case MirroredRepeatWrapping:\\n          if (Math.abs(Math.floor(uv.x) % 2) === 1) {\\n            uv.x = Math.ceil(uv.x) - uv.x;\\n          } else {\\n            uv.x = uv.x - Math.floor(uv.x);\\n          }\\n          break;\\n      }\\n    }\\n    if (uv.y < 0 || uv.y > 1) {\\n      switch (this.wrapT) {\\n        case RepeatWrapping:\\n          uv.y = uv.y - Math.floor(uv.y);\\n          break;\\n        case ClampToEdgeWrapping:\\n          uv.y = uv.y < 0 ? 0 : 1;\\n          break;\\n        case MirroredRepeatWrapping:\\n          if (Math.abs(Math.floor(uv.y) % 2) === 1) {\\n            uv.y = Math.ceil(uv.y) - uv.y;\\n          } else {\\n            uv.y = uv.y - Math.floor(uv.y);\\n          }\\n          break;\\n      }\\n    }\\n    if (this.flipY) {\\n      uv.y = 1 - uv.y;\\n    }\\n    return uv;\\n  }\\n  set needsUpdate(value) {\\n    if (value === true)\\n      this.version++;\\n  }\\n};\\nTexture.DEFAULT_IMAGE = void 0;\\nTexture.DEFAULT_MAPPING = UVMapping;\\nTexture.prototype.isTexture = true;\\nfunction serializeImage(image) {\\n  if (typeof HTMLImageElement !== \\\\\\\"undefined\\\\\\\" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== \\\\\\\"undefined\\\\\\\" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== \\\\\\\"undefined\\\\\\\" && image instanceof ImageBitmap) {\\n    return ImageUtils.getDataURL(image);\\n  } else {\\n    if (image.data) {\\n      return {\\n        data: Array.prototype.slice.call(image.data),\\n        width: image.width,\\n        height: image.height,\\n        type: image.data.constructor.name\\n      };\\n    } else {\\n      console.warn(\\\\\\\"THREE.Texture: Unable to serialize Texture.\\\\\\\");\\n      return {};\\n    }\\n  }\\n}\\n\\n// ../../../node_modules/three/src/renderers/WebGLRenderTarget.js\\nvar WebGLRenderTarget = class extends EventDispatcher {\\n  constructor(width, height, options = {}) {\\n    super();\\n    this.width = width;\\n    this.height = height;\\n    this.depth = 1;\\n    this.scissor = new Vector4(0, 0, width, height);\\n    this.scissorTest = false;\\n    this.viewport = new Vector4(0, 0, width, height);\\n    this.texture = new Texture(void 0, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding);\\n    this.texture.isRenderTargetTexture = true;\\n    this.texture.image = {width, height, depth: 1};\\n    this.texture.generateMipmaps = options.generateMipmaps !== void 0 ? options.generateMipmaps : false;\\n    this.texture.internalFormat = options.internalFormat !== void 0 ? options.internalFormat : null;\\n    this.texture.minFilter = options.minFilter !== void 0 ? options.minFilter : LinearFilter;\\n    this.depthBuffer = options.depthBuffer !== void 0 ? options.depthBuffer : true;\\n    this.stencilBuffer = options.stencilBuffer !== void 0 ? options.stencilBuffer : false;\\n    this.depthTexture = options.depthTexture !== void 0 ? options.depthTexture : null;\\n  }\\n  setTexture(texture) {\\n    texture.image = {\\n      width: this.width,\\n      height: this.height,\\n      depth: this.depth\\n    };\\n    this.texture = texture;\\n  }\\n  setSize(width, height, depth2 = 1) {\\n    if (this.width !== width || this.height !== height || this.depth !== depth2) {\\n      this.width = width;\\n      this.height = height;\\n      this.depth = depth2;\\n      this.texture.image.width = width;\\n      this.texture.image.height = height;\\n      this.texture.image.depth = depth2;\\n      this.dispose();\\n    }\\n    this.viewport.set(0, 0, width, height);\\n    this.scissor.set(0, 0, width, height);\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n  copy(source) {\\n    this.width = source.width;\\n    this.height = source.height;\\n    this.depth = source.depth;\\n    this.viewport.copy(source.viewport);\\n    this.texture = source.texture.clone();\\n    this.texture.image = {...this.texture.image};\\n    this.depthBuffer = source.depthBuffer;\\n    this.stencilBuffer = source.stencilBuffer;\\n    this.depthTexture = source.depthTexture;\\n    return this;\\n  }\\n  dispose() {\\n    this.dispatchEvent({type: \\\\\\\"dispose\\\\\\\"});\\n  }\\n};\\nWebGLRenderTarget.prototype.isWebGLRenderTarget = true;\\n\\n// ../../../node_modules/three/src/cameras/Camera.js\\nvar Camera = class extends Object3D {\\n  constructor() {\\n    super();\\n    this.type = \\\\\\\"Camera\\\\\\\";\\n    this.matrixWorldInverse = new Matrix4();\\n    this.projectionMatrix = new Matrix4();\\n    this.projectionMatrixInverse = new Matrix4();\\n  }\\n  copy(source, recursive) {\\n    super.copy(source, recursive);\\n    this.matrixWorldInverse.copy(source.matrixWorldInverse);\\n    this.projectionMatrix.copy(source.projectionMatrix);\\n    this.projectionMatrixInverse.copy(source.projectionMatrixInverse);\\n    return this;\\n  }\\n  getWorldDirection(target) {\\n    this.updateWorldMatrix(true, false);\\n    const e = this.matrixWorld.elements;\\n    return target.set(-e[8], -e[9], -e[10]).normalize();\\n  }\\n  updateMatrixWorld(force) {\\n    super.updateMatrixWorld(force);\\n    this.matrixWorldInverse.copy(this.matrixWorld).invert();\\n  }\\n  updateWorldMatrix(updateParents, updateChildren) {\\n    super.updateWorldMatrix(updateParents, updateChildren);\\n    this.matrixWorldInverse.copy(this.matrixWorld).invert();\\n  }\\n  clone() {\\n    return new this.constructor().copy(this);\\n  }\\n};\\nCamera.prototype.isCamera = true;\\n\\n// ../../../node_modules/three/src/cameras/PerspectiveCamera.js\\nvar PerspectiveCamera = class extends Camera {\\n  constructor(fov2 = 50, aspect2 = 1, near = 0.1, far = 2e3) {\\n    super();\\n    this.type = \\\\\\\"PerspectiveCamera\\\\\\\";\\n    this.fov = fov2;\\n    this.zoom = 1;\\n    this.near = near;\\n    this.far = far;\\n    this.focus = 10;\\n    this.aspect = aspect2;\\n    this.view = null;\\n    this.filmGauge = 35;\\n    this.filmOffset = 0;\\n    this.updateProjectionMatrix();\\n  }\\n  copy(source, recursive) {\\n    super.copy(source, recursive);\\n    this.fov = source.fov;\\n    this.zoom = source.zoom;\\n    this.near = source.near;\\n    this.far = source.far;\\n    this.focus = source.focus;\\n    this.aspect = source.aspect;\\n    this.view = source.view === null ? null : Object.assign({}, source.view);\\n    this.filmGauge = source.filmGauge;\\n    this.filmOffset = source.filmOffset;\\n    return this;\\n  }\\n  setFocalLength(focalLength) {\\n    const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\\n    this.fov = RAD2DEG * 2 * Math.atan(vExtentSlope);\\n    this.updateProjectionMatrix();\\n  }\\n  getFocalLength() {\\n    const vExtentSlope = Math.tan(DEG2RAD * 0.5 * this.fov);\\n    return 0.5 * this.getFilmHeight() / vExtentSlope;\\n  }\\n  getEffectiveFOV() {\\n    return RAD2DEG * 2 * Math.atan(Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom);\\n  }\\n  getFilmWidth() {\\n    return this.filmGauge * Math.min(this.aspect, 1);\\n  }\\n  getFilmHeight() {\\n    return this.filmGauge / Math.max(this.aspect, 1);\\n  }\\n  setViewOffset(fullWidth, fullHeight, x, y, width, height) {\\n    this.aspect = fullWidth / fullHeight;\\n    if (this.view === null) {\\n      this.view = {\\n        enabled: true,\\n        fullWidth: 1,\\n        fullHeight: 1,\\n        offsetX: 0,\\n        offsetY: 0,\\n        width: 1,\\n        height: 1\\n      };\\n    }\\n    this.view.enabled = true;\\n    this.view.fullWidth = fullWidth;\\n    this.view.fullHeight = fullHeight;\\n    this.view.offsetX = x;\\n    this.view.offsetY = y;\\n    this.view.width = width;\\n    this.view.height = height;\\n    this.updateProjectionMatrix();\\n  }\\n  clearViewOffset() {\\n    if (this.view !== null) {\\n      this.view.enabled = false;\\n    }\\n    this.updateProjectionMatrix();\\n  }\\n  updateProjectionMatrix() {\\n    const near = this.near;\\n    let top = near * Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom;\\n    let height = 2 * top;\\n    let width = this.aspect * height;\\n    let left = -0.5 * width;\\n    const view = this.view;\\n    if (this.view !== null && this.view.enabled) {\\n      const fullWidth = view.fullWidth, fullHeight = view.fullHeight;\\n      left += view.offsetX * width / fullWidth;\\n      top -= view.offsetY * height / fullHeight;\\n      width *= view.width / fullWidth;\\n      height *= view.height / fullHeight;\\n    }\\n    const skew = this.filmOffset;\\n    if (skew !== 0)\\n      left += near * skew / this.getFilmWidth();\\n    this.projectionMatrix.makePerspective(left, left + width, top, top - height, near, this.far);\\n    this.projectionMatrixInverse.copy(this.projectionMatrix).invert();\\n  }\\n  toJSON(meta) {\\n    const data = super.toJSON(meta);\\n    data.object.fov = this.fov;\\n    data.object.zoom = this.zoom;\\n    data.object.near = this.near;\\n    data.object.far = this.far;\\n    data.object.focus = this.focus;\\n    data.object.aspect = this.aspect;\\n    if (this.view !== null)\\n      data.object.view = Object.assign({}, this.view);\\n    data.object.filmGauge = this.filmGauge;\\n    data.object.filmOffset = this.filmOffset;\\n    return data;\\n  }\\n};\\nPerspectiveCamera.prototype.isPerspectiveCamera = true;\\n\\n// ../../../node_modules/three/src/cameras/CubeCamera.js\\nvar fov = 90;\\nvar aspect = 1;\\nvar CubeCamera = class extends Object3D {\\n  constructor(near, far, renderTarget) {\\n    super();\\n    this.type = \\\\\\\"CubeCamera\\\\\\\";\\n    if (renderTarget.isWebGLCubeRenderTarget !== true) {\\n      console.error(\\\\\\\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\\\\\\\");\\n      return;\\n    }\\n    this.renderTarget = renderTarget;\\n    const cameraPX = new PerspectiveCamera(fov, aspect, near, far);\\n    cameraPX.layers = this.layers;\\n    cameraPX.up.set(0, -1, 0);\\n    cameraPX.lookAt(new Vector3(1, 0, 0));\\n    this.add(cameraPX);\\n    const cameraNX = new PerspectiveCamera(fov, aspect, near, far);\\n    cameraNX.layers = this.layers;\\n    cameraNX.up.set(0, -1, 0);\\n    cameraNX.lookAt(new Vector3(-1, 0, 0));\\n    this.add(cameraNX);\\n    const cameraPY = new PerspectiveCamera(fov, aspect, near, far);\\n    cameraPY.layers = this.layers;\\n    cameraPY.up.set(0, 0, 1);\\n    cameraPY.lookAt(new Vector3(0, 1, 0));\\n    this.add(cameraPY);\\n    const cameraNY = new PerspectiveCamera(fov, aspect, near, far);\\n    cameraNY.layers = this.layers;\\n    cameraNY.up.set(0, 0, -1);\\n    cameraNY.lookAt(new Vector3(0, -1, 0));\\n    this.add(cameraNY);\\n    const cameraPZ = new PerspectiveCamera(fov, aspect, near, far);\\n    cameraPZ.layers = this.layers;\\n    cameraPZ.up.set(0, -1, 0);\\n    cameraPZ.lookAt(new Vector3(0, 0, 1));\\n    this.add(cameraPZ);\\n    const cameraNZ = new PerspectiveCamera(fov, aspect, near, far);\\n    cameraNZ.layers = this.layers;\\n    cameraNZ.up.set(0, -1, 0);\\n    cameraNZ.lookAt(new Vector3(0, 0, -1));\\n    this.add(cameraNZ);\\n  }\\n  update(renderer, scene) {\\n    if (this.parent === null)\\n      this.updateMatrixWorld();\\n    const renderTarget = this.renderTarget;\\n    const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = this.children;\\n    const currentXrEnabled = renderer.xr.enabled;\\n    const currentRenderTarget = renderer.getRenderTarget();\\n    renderer.xr.enabled = false;\\n    const generateMipmaps = renderTarget.texture.generateMipmaps;\\n    renderTarget.texture.generateMipmaps = false;\\n    renderer.setRenderTarget(renderTarget, 0);\\n    renderer.render(scene, cameraPX);\\n    renderer.setRenderTarget(renderTarget, 1);\\n    renderer.render(scene, cameraNX);\\n    renderer.setRenderTarget(renderTarget, 2);\\n    renderer.render(scene, cameraPY);\\n    renderer.setRenderTarget(renderTarget, 3);\\n    renderer.render(scene, cameraNY);\\n    renderer.setRenderTarget(renderTarget, 4);\\n    renderer.render(scene, cameraPZ);\\n    renderTarget.texture.generateMipmaps = generateMipmaps;\\n    renderer.setRenderTarget(renderTarget, 5);\\n    renderer.render(scene, cameraNZ);\\n    renderer.setRenderTarget(currentRenderTarget);\\n    renderer.xr.enabled = currentXrEnabled;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/textures/CubeTexture.js\\nvar CubeTexture = class extends Texture {\\n  constructor(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding) {\\n    images = images !== void 0 ? images : [];\\n    mapping = mapping !== void 0 ? mapping : CubeReflectionMapping;\\n    super(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding);\\n    this.flipY = false;\\n  }\\n  get images() {\\n    return this.image;\\n  }\\n  set images(value) {\\n    this.image = value;\\n  }\\n};\\nCubeTexture.prototype.isCubeTexture = true;\\n\\n// ../../../node_modules/three/src/renderers/WebGLCubeRenderTarget.js\\nvar WebGLCubeRenderTarget = class extends WebGLRenderTarget {\\n  constructor(size, options, dummy) {\\n    if (Number.isInteger(options)) {\\n      console.warn(\\\\\\\"THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )\\\\\\\");\\n      options = dummy;\\n    }\\n    super(size, size, options);\\n    options = options || {};\\n    this.texture = new CubeTexture(void 0, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding);\\n    this.texture.isRenderTargetTexture = true;\\n    this.texture.generateMipmaps = options.generateMipmaps !== void 0 ? options.generateMipmaps : false;\\n    this.texture.minFilter = options.minFilter !== void 0 ? options.minFilter : LinearFilter;\\n    this.texture._needsFlipEnvMap = false;\\n  }\\n  fromEquirectangularTexture(renderer, texture) {\\n    this.texture.type = texture.type;\\n    this.texture.format = RGBAFormat;\\n    this.texture.encoding = texture.encoding;\\n    this.texture.generateMipmaps = texture.generateMipmaps;\\n    this.texture.minFilter = texture.minFilter;\\n    this.texture.magFilter = texture.magFilter;\\n    const shader = {\\n      uniforms: {\\n        tEquirect: {value: null}\\n      },\\n      vertexShader: `\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\n\\t\\t\\t\\t\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\t\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\n\\t\\t\\t\\t\\t#include <begin_vertex>\\n\\t\\t\\t\\t\\t#include <project_vertex>\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t`,\\n      fragmentShader: `\\n\\n\\t\\t\\t\\tuniform sampler2D tEquirect;\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\t#include <common>\\n\\n\\t\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\t\\tvec3 direction = normalize( vWorldDirection );\\n\\n\\t\\t\\t\\t\\tvec2 sampleUV = equirectUv( direction );\\n\\n\\t\\t\\t\\t\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t`\\n    };\\n    const geometry = new BoxGeometry(5, 5, 5);\\n    const material = new ShaderMaterial({\\n      name: \\\\\\\"CubemapFromEquirect\\\\\\\",\\n      uniforms: cloneUniforms(shader.uniforms),\\n      vertexShader: shader.vertexShader,\\n      fragmentShader: shader.fragmentShader,\\n      side: BackSide,\\n      blending: NoBlending\\n    });\\n    material.uniforms.tEquirect.value = texture;\\n    const mesh = new Mesh(geometry, material);\\n    const currentMinFilter = texture.minFilter;\\n    if (texture.minFilter === LinearMipmapLinearFilter)\\n      texture.minFilter = LinearFilter;\\n    const camera = new CubeCamera(1, 10, this);\\n    camera.update(renderer, mesh);\\n    texture.minFilter = currentMinFilter;\\n    mesh.geometry.dispose();\\n    mesh.material.dispose();\\n    return this;\\n  }\\n  clear(renderer, color, depth2, stencil) {\\n    const currentRenderTarget = renderer.getRenderTarget();\\n    for (let i = 0; i < 6; i++) {\\n      renderer.setRenderTarget(this, i);\\n      renderer.clear(color, depth2, stencil);\\n    }\\n    renderer.setRenderTarget(currentRenderTarget);\\n  }\\n};\\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLCubeMaps.js\\nfunction WebGLCubeMaps(renderer) {\\n  let cubemaps = new WeakMap();\\n  function mapTextureMapping(texture, mapping) {\\n    if (mapping === EquirectangularReflectionMapping) {\\n      texture.mapping = CubeReflectionMapping;\\n    } else if (mapping === EquirectangularRefractionMapping) {\\n      texture.mapping = CubeRefractionMapping;\\n    }\\n    return texture;\\n  }\\n  function get(texture) {\\n    if (texture && texture.isTexture && texture.isRenderTargetTexture === false) {\\n      const mapping = texture.mapping;\\n      if (mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping) {\\n        if (cubemaps.has(texture)) {\\n          const cubemap = cubemaps.get(texture).texture;\\n          return mapTextureMapping(cubemap, texture.mapping);\\n        } else {\\n          const image = texture.image;\\n          if (image && image.height > 0) {\\n            const currentRenderTarget = renderer.getRenderTarget();\\n            const renderTarget = new WebGLCubeRenderTarget(image.height / 2);\\n            renderTarget.fromEquirectangularTexture(renderer, texture);\\n            cubemaps.set(texture, renderTarget);\\n            renderer.setRenderTarget(currentRenderTarget);\\n            texture.addEventListener(\\\\\\\"dispose\\\\\\\", onTextureDispose);\\n            return mapTextureMapping(renderTarget.texture, texture.mapping);\\n          } else {\\n            return null;\\n          }\\n        }\\n      }\\n    }\\n    return texture;\\n  }\\n  function onTextureDispose(event) {\\n    const texture = event.target;\\n    texture.removeEventListener(\\\\\\\"dispose\\\\\\\", onTextureDispose);\\n    const cubemap = cubemaps.get(texture);\\n    if (cubemap !== void 0) {\\n      cubemaps.delete(texture);\\n      cubemap.dispose();\\n    }\\n  }\\n  function dispose() {\\n    cubemaps = new WeakMap();\\n  }\\n  return {\\n    get,\\n    dispose\\n  };\\n}\\n\\n// ../../../node_modules/three/src/cameras/OrthographicCamera.js\\nvar OrthographicCamera = class extends Camera {\\n  constructor(left = -1, right = 1, top = 1, bottom = -1, near = 0.1, far = 2e3) {\\n    super();\\n    this.type = \\\\\\\"OrthographicCamera\\\\\\\";\\n    this.zoom = 1;\\n    this.view = null;\\n    this.left = left;\\n    this.right = right;\\n    this.top = top;\\n    this.bottom = bottom;\\n    this.near = near;\\n    this.far = far;\\n    this.updateProjectionMatrix();\\n  }\\n  copy(source, recursive) {\\n    super.copy(source, recursive);\\n    this.left = source.left;\\n    this.right = source.right;\\n    this.top = source.top;\\n    this.bottom = source.bottom;\\n    this.near = source.near;\\n    this.far = source.far;\\n    this.zoom = source.zoom;\\n    this.view = source.view === null ? null : Object.assign({}, source.view);\\n    return this;\\n  }\\n  setViewOffset(fullWidth, fullHeight, x, y, width, height) {\\n    if (this.view === null) {\\n      this.view = {\\n        enabled: true,\\n        fullWidth: 1,\\n        fullHeight: 1,\\n        offsetX: 0,\\n        offsetY: 0,\\n        width: 1,\\n        height: 1\\n      };\\n    }\\n    this.view.enabled = true;\\n    this.view.fullWidth = fullWidth;\\n    this.view.fullHeight = fullHeight;\\n    this.view.offsetX = x;\\n    this.view.offsetY = y;\\n    this.view.width = width;\\n    this.view.height = height;\\n    this.updateProjectionMatrix();\\n  }\\n  clearViewOffset() {\\n    if (this.view !== null) {\\n      this.view.enabled = false;\\n    }\\n    this.updateProjectionMatrix();\\n  }\\n  updateProjectionMatrix() {\\n    const dx = (this.right - this.left) / (2 * this.zoom);\\n    const dy = (this.top - this.bottom) / (2 * this.zoom);\\n    const cx = (this.right + this.left) / 2;\\n    const cy = (this.top + this.bottom) / 2;\\n    let left = cx - dx;\\n    let right = cx + dx;\\n    let top = cy + dy;\\n    let bottom = cy - dy;\\n    if (this.view !== null && this.view.enabled) {\\n      const scaleW = (this.right - this.left) / this.view.fullWidth / this.zoom;\\n      const scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom;\\n      left += scaleW * this.view.offsetX;\\n      right = left + scaleW * this.view.width;\\n      top -= scaleH * this.view.offsetY;\\n      bottom = top - scaleH * this.view.height;\\n    }\\n    this.projectionMatrix.makeOrthographic(left, right, top, bottom, this.near, this.far);\\n    this.projectionMatrixInverse.copy(this.projectionMatrix).invert();\\n  }\\n  toJSON(meta) {\\n    const data = super.toJSON(meta);\\n    data.object.zoom = this.zoom;\\n    data.object.left = this.left;\\n    data.object.right = this.right;\\n    data.object.top = this.top;\\n    data.object.bottom = this.bottom;\\n    data.object.near = this.near;\\n    data.object.far = this.far;\\n    if (this.view !== null)\\n      data.object.view = Object.assign({}, this.view);\\n    return data;\\n  }\\n};\\nOrthographicCamera.prototype.isOrthographicCamera = true;\\n\\n// ../../../node_modules/three/src/materials/RawShaderMaterial.js\\nvar RawShaderMaterial = class extends ShaderMaterial {\\n  constructor(parameters) {\\n    super(parameters);\\n    this.type = \\\\\\\"RawShaderMaterial\\\\\\\";\\n  }\\n};\\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\\n\\n// ../../../node_modules/three/src/extras/PMREMGenerator.js\\nvar LOD_MIN = 4;\\nvar LOD_MAX = 8;\\nvar SIZE_MAX = Math.pow(2, LOD_MAX);\\nvar EXTRA_LOD_SIGMA = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582];\\nvar TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\\nvar MAX_SAMPLES = 20;\\nvar ENCODINGS = {\\n  [LinearEncoding]: 0,\\n  [sRGBEncoding]: 1,\\n  [RGBEEncoding]: 2,\\n  [RGBM7Encoding]: 3,\\n  [RGBM16Encoding]: 4,\\n  [RGBDEncoding]: 5,\\n  [GammaEncoding]: 6\\n};\\nvar _flatCamera = /* @__PURE__ */ new OrthographicCamera();\\nvar {_lodPlanes, _sizeLods, _sigmas} = /* @__PURE__ */ _createPlanes();\\nvar _clearColor = /* @__PURE__ */ new Color();\\nvar _oldTarget = null;\\nvar PHI = (1 + Math.sqrt(5)) / 2;\\nvar INV_PHI = 1 / PHI;\\nvar _axisDirections = [\\n  /* @__PURE__ */ new Vector3(1, 1, 1),\\n  /* @__PURE__ */ new Vector3(-1, 1, 1),\\n  /* @__PURE__ */ new Vector3(1, 1, -1),\\n  /* @__PURE__ */ new Vector3(-1, 1, -1),\\n  /* @__PURE__ */ new Vector3(0, PHI, INV_PHI),\\n  /* @__PURE__ */ new Vector3(0, PHI, -INV_PHI),\\n  /* @__PURE__ */ new Vector3(INV_PHI, 0, PHI),\\n  /* @__PURE__ */ new Vector3(-INV_PHI, 0, PHI),\\n  /* @__PURE__ */ new Vector3(PHI, INV_PHI, 0),\\n  /* @__PURE__ */ new Vector3(-PHI, INV_PHI, 0)\\n];\\nvar PMREMGenerator = class {\\n  constructor(renderer) {\\n    this._renderer = renderer;\\n    this._pingPongRenderTarget = null;\\n    this._blurMaterial = _getBlurShader(MAX_SAMPLES);\\n    this._equirectShader = null;\\n    this._cubemapShader = null;\\n    this._compileMaterial(this._blurMaterial);\\n  }\\n  fromScene(scene, sigma = 0, near = 0.1, far = 100) {\\n    _oldTarget = this._renderer.getRenderTarget();\\n    const cubeUVRenderTarget = this._allocateTargets();\\n    this._sceneToCubeUV(scene, near, far, cubeUVRenderTarget);\\n    if (sigma > 0) {\\n      this._blur(cubeUVRenderTarget, 0, 0, sigma);\\n    }\\n    this._applyPMREM(cubeUVRenderTarget);\\n    this._cleanup(cubeUVRenderTarget);\\n    return cubeUVRenderTarget;\\n  }\\n  fromEquirectangular(equirectangular) {\\n    return this._fromTexture(equirectangular);\\n  }\\n  fromCubemap(cubemap) {\\n    return this._fromTexture(cubemap);\\n  }\\n  compileCubemapShader() {\\n    if (this._cubemapShader === null) {\\n      this._cubemapShader = _getCubemapShader();\\n      this._compileMaterial(this._cubemapShader);\\n    }\\n  }\\n  compileEquirectangularShader() {\\n    if (this._equirectShader === null) {\\n      this._equirectShader = _getEquirectShader();\\n      this._compileMaterial(this._equirectShader);\\n    }\\n  }\\n  dispose() {\\n    this._blurMaterial.dispose();\\n    if (this._cubemapShader !== null)\\n      this._cubemapShader.dispose();\\n    if (this._equirectShader !== null)\\n      this._equirectShader.dispose();\\n    for (let i = 0; i < _lodPlanes.length; i++) {\\n      _lodPlanes[i].dispose();\\n    }\\n  }\\n  _cleanup(outputTarget) {\\n    this._pingPongRenderTarget.dispose();\\n    this._renderer.setRenderTarget(_oldTarget);\\n    outputTarget.scissorTest = false;\\n    _setViewport(outputTarget, 0, 0, outputTarget.width, outputTarget.height);\\n  }\\n  _fromTexture(texture) {\\n    _oldTarget = this._renderer.getRenderTarget();\\n    const cubeUVRenderTarget = this._allocateTargets(texture);\\n    this._textureToCubeUV(texture, cubeUVRenderTarget);\\n    this._applyPMREM(cubeUVRenderTarget);\\n    this._cleanup(cubeUVRenderTarget);\\n    return cubeUVRenderTarget;\\n  }\\n  _allocateTargets(texture) {\\n    const params = {\\n      magFilter: NearestFilter,\\n      minFilter: NearestFilter,\\n      generateMipmaps: false,\\n      type: UnsignedByteType,\\n      format: RGBEFormat,\\n      encoding: _isLDR(texture) ? texture.encoding : RGBEEncoding,\\n      depthBuffer: false\\n    };\\n    const cubeUVRenderTarget = _createRenderTarget(params);\\n    cubeUVRenderTarget.depthBuffer = texture ? false : true;\\n    this._pingPongRenderTarget = _createRenderTarget(params);\\n    return cubeUVRenderTarget;\\n  }\\n  _compileMaterial(material) {\\n    const tmpMesh = new Mesh(_lodPlanes[0], material);\\n    this._renderer.compile(tmpMesh, _flatCamera);\\n  }\\n  _sceneToCubeUV(scene, near, far, cubeUVRenderTarget) {\\n    const fov2 = 90;\\n    const aspect2 = 1;\\n    const cubeCamera = new PerspectiveCamera(fov2, aspect2, near, far);\\n    const upSign = [1, -1, 1, 1, 1, 1];\\n    const forwardSign = [1, 1, 1, -1, -1, -1];\\n    const renderer = this._renderer;\\n    const originalAutoClear = renderer.autoClear;\\n    const outputEncoding = renderer.outputEncoding;\\n    const toneMapping = renderer.toneMapping;\\n    renderer.getClearColor(_clearColor);\\n    renderer.toneMapping = NoToneMapping;\\n    renderer.outputEncoding = LinearEncoding;\\n    renderer.autoClear = false;\\n    const backgroundMaterial = new MeshBasicMaterial({\\n      name: \\\\\\\"PMREM.Background\\\\\\\",\\n      side: BackSide,\\n      depthWrite: false,\\n      depthTest: false\\n    });\\n    const backgroundBox = new Mesh(new BoxGeometry(), backgroundMaterial);\\n    let useSolidColor = false;\\n    const background2 = scene.background;\\n    if (background2) {\\n      if (background2.isColor) {\\n        backgroundMaterial.color.copy(background2);\\n        scene.background = null;\\n        useSolidColor = true;\\n      }\\n    } else {\\n      backgroundMaterial.color.copy(_clearColor);\\n      useSolidColor = true;\\n    }\\n    for (let i = 0; i < 6; i++) {\\n      const col = i % 3;\\n      if (col == 0) {\\n        cubeCamera.up.set(0, upSign[i], 0);\\n        cubeCamera.lookAt(forwardSign[i], 0, 0);\\n      } else if (col == 1) {\\n        cubeCamera.up.set(0, 0, upSign[i]);\\n        cubeCamera.lookAt(0, forwardSign[i], 0);\\n      } else {\\n        cubeCamera.up.set(0, upSign[i], 0);\\n        cubeCamera.lookAt(0, 0, forwardSign[i]);\\n      }\\n      _setViewport(cubeUVRenderTarget, col * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX);\\n      renderer.setRenderTarget(cubeUVRenderTarget);\\n      if (useSolidColor) {\\n        renderer.render(backgroundBox, cubeCamera);\\n      }\\n      renderer.render(scene, cubeCamera);\\n    }\\n    backgroundBox.geometry.dispose();\\n    backgroundBox.material.dispose();\\n    renderer.toneMapping = toneMapping;\\n    renderer.outputEncoding = outputEncoding;\\n    renderer.autoClear = originalAutoClear;\\n    scene.background = background2;\\n  }\\n  _setEncoding(uniform, texture) {\\n    if (this._renderer.capabilities.isWebGL2 === true && texture.format === RGBAFormat && texture.type === UnsignedByteType && texture.encoding === sRGBEncoding) {\\n      uniform.value = ENCODINGS[LinearEncoding];\\n    } else {\\n      uniform.value = ENCODINGS[texture.encoding];\\n    }\\n  }\\n  _textureToCubeUV(texture, cubeUVRenderTarget) {\\n    const renderer = this._renderer;\\n    if (texture.isCubeTexture) {\\n      if (this._cubemapShader == null) {\\n        this._cubemapShader = _getCubemapShader();\\n      }\\n    } else {\\n      if (this._equirectShader == null) {\\n        this._equirectShader = _getEquirectShader();\\n      }\\n    }\\n    const material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\\n    const mesh = new Mesh(_lodPlanes[0], material);\\n    const uniforms = material.uniforms;\\n    uniforms[\\\\\\\"envMap\\\\\\\"].value = texture;\\n    if (!texture.isCubeTexture) {\\n      uniforms[\\\\\\\"texelSize\\\\\\\"].value.set(1 / texture.image.width, 1 / texture.image.height);\\n    }\\n    this._setEncoding(uniforms[\\\\\\\"inputEncoding\\\\\\\"], texture);\\n    this._setEncoding(uniforms[\\\\\\\"outputEncoding\\\\\\\"], cubeUVRenderTarget.texture);\\n    _setViewport(cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX);\\n    renderer.setRenderTarget(cubeUVRenderTarget);\\n    renderer.render(mesh, _flatCamera);\\n  }\\n  _applyPMREM(cubeUVRenderTarget) {\\n    const renderer = this._renderer;\\n    const autoClear = renderer.autoClear;\\n    renderer.autoClear = false;\\n    for (let i = 1; i < TOTAL_LODS; i++) {\\n      const sigma = Math.sqrt(_sigmas[i] * _sigmas[i] - _sigmas[i - 1] * _sigmas[i - 1]);\\n      const poleAxis = _axisDirections[(i - 1) % _axisDirections.length];\\n      this._blur(cubeUVRenderTarget, i - 1, i, sigma, poleAxis);\\n    }\\n    renderer.autoClear = autoClear;\\n  }\\n  _blur(cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis) {\\n    const pingPongRenderTarget = this._pingPongRenderTarget;\\n    this._halfBlur(cubeUVRenderTarget, pingPongRenderTarget, lodIn, lodOut, sigma, \\\\\\\"latitudinal\\\\\\\", poleAxis);\\n    this._halfBlur(pingPongRenderTarget, cubeUVRenderTarget, lodOut, lodOut, sigma, \\\\\\\"longitudinal\\\\\\\", poleAxis);\\n  }\\n  _halfBlur(targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis) {\\n    const renderer = this._renderer;\\n    const blurMaterial = this._blurMaterial;\\n    if (direction !== \\\\\\\"latitudinal\\\\\\\" && direction !== \\\\\\\"longitudinal\\\\\\\") {\\n      console.error(\\\\\\\"blur direction must be either latitudinal or longitudinal!\\\\\\\");\\n    }\\n    const STANDARD_DEVIATIONS = 3;\\n    const blurMesh = new Mesh(_lodPlanes[lodOut], blurMaterial);\\n    const blurUniforms = blurMaterial.uniforms;\\n    const pixels = _sizeLods[lodIn] - 1;\\n    const radiansPerPixel = isFinite(sigmaRadians) ? Math.PI / (2 * pixels) : 2 * Math.PI / (2 * MAX_SAMPLES - 1);\\n    const sigmaPixels = sigmaRadians / radiansPerPixel;\\n    const samples = isFinite(sigmaRadians) ? 1 + Math.floor(STANDARD_DEVIATIONS * sigmaPixels) : MAX_SAMPLES;\\n    if (samples > MAX_SAMPLES) {\\n      console.warn(`sigmaRadians, ${sigmaRadians}, is too large and will clip, as it requested ${samples} samples when the maximum is set to ${MAX_SAMPLES}`);\\n    }\\n    const weights = [];\\n    let sum = 0;\\n    for (let i = 0; i < MAX_SAMPLES; ++i) {\\n      const x2 = i / sigmaPixels;\\n      const weight = Math.exp(-x2 * x2 / 2);\\n      weights.push(weight);\\n      if (i == 0) {\\n        sum += weight;\\n      } else if (i < samples) {\\n        sum += 2 * weight;\\n      }\\n    }\\n    for (let i = 0; i < weights.length; i++) {\\n      weights[i] = weights[i] / sum;\\n    }\\n    blurUniforms[\\\\\\\"envMap\\\\\\\"].value = targetIn.texture;\\n    blurUniforms[\\\\\\\"samples\\\\\\\"].value = samples;\\n    blurUniforms[\\\\\\\"weights\\\\\\\"].value = weights;\\n    blurUniforms[\\\\\\\"latitudinal\\\\\\\"].value = direction === \\\\\\\"latitudinal\\\\\\\";\\n    if (poleAxis) {\\n      blurUniforms[\\\\\\\"poleAxis\\\\\\\"].value = poleAxis;\\n    }\\n    blurUniforms[\\\\\\\"dTheta\\\\\\\"].value = radiansPerPixel;\\n    blurUniforms[\\\\\\\"mipInt\\\\\\\"].value = LOD_MAX - lodIn;\\n    this._setEncoding(blurUniforms[\\\\\\\"inputEncoding\\\\\\\"], targetIn.texture);\\n    this._setEncoding(blurUniforms[\\\\\\\"outputEncoding\\\\\\\"], targetIn.texture);\\n    const outputSize = _sizeLods[lodOut];\\n    const x = 3 * Math.max(0, SIZE_MAX - 2 * outputSize);\\n    const y = (lodOut === 0 ? 0 : 2 * SIZE_MAX) + 2 * outputSize * (lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0);\\n    _setViewport(targetOut, x, y, 3 * outputSize, 2 * outputSize);\\n    renderer.setRenderTarget(targetOut);\\n    renderer.render(blurMesh, _flatCamera);\\n  }\\n};\\nfunction _isLDR(texture) {\\n  if (texture === void 0 || texture.type !== UnsignedByteType)\\n    return false;\\n  return texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\\n}\\nfunction _createPlanes() {\\n  const _lodPlanes2 = [];\\n  const _sizeLods2 = [];\\n  const _sigmas2 = [];\\n  let lod = LOD_MAX;\\n  for (let i = 0; i < TOTAL_LODS; i++) {\\n    const sizeLod = Math.pow(2, lod);\\n    _sizeLods2.push(sizeLod);\\n    let sigma = 1 / sizeLod;\\n    if (i > LOD_MAX - LOD_MIN) {\\n      sigma = EXTRA_LOD_SIGMA[i - LOD_MAX + LOD_MIN - 1];\\n    } else if (i == 0) {\\n      sigma = 0;\\n    }\\n    _sigmas2.push(sigma);\\n    const texelSize = 1 / (sizeLod - 1);\\n    const min = -texelSize / 2;\\n    const max = 1 + texelSize / 2;\\n    const uv1 = [min, min, max, min, max, max, min, min, max, max, min, max];\\n    const cubeFaces = 6;\\n    const vertices = 6;\\n    const positionSize = 3;\\n    const uvSize = 2;\\n    const faceIndexSize = 1;\\n    const position = new Float32Array(positionSize * vertices * cubeFaces);\\n    const uv = new Float32Array(uvSize * vertices * cubeFaces);\\n    const faceIndex = new Float32Array(faceIndexSize * vertices * cubeFaces);\\n    for (let face = 0; face < cubeFaces; face++) {\\n      const x = face % 3 * 2 / 3 - 1;\\n      const y = face > 2 ? 0 : -1;\\n      const coordinates = [\\n        x,\\n        y,\\n        0,\\n        x + 2 / 3,\\n        y,\\n        0,\\n        x + 2 / 3,\\n        y + 1,\\n        0,\\n        x,\\n        y,\\n        0,\\n        x + 2 / 3,\\n        y + 1,\\n        0,\\n        x,\\n        y + 1,\\n        0\\n      ];\\n      position.set(coordinates, positionSize * vertices * face);\\n      uv.set(uv1, uvSize * vertices * face);\\n      const fill = [face, face, face, face, face, face];\\n      faceIndex.set(fill, faceIndexSize * vertices * face);\\n    }\\n    const planes = new BufferGeometry();\\n    planes.setAttribute(\\\\\\\"position\\\\\\\", new BufferAttribute(position, positionSize));\\n    planes.setAttribute(\\\\\\\"uv\\\\\\\", new BufferAttribute(uv, uvSize));\\n    planes.setAttribute(\\\\\\\"faceIndex\\\\\\\", new BufferAttribute(faceIndex, faceIndexSize));\\n    _lodPlanes2.push(planes);\\n    if (lod > LOD_MIN) {\\n      lod--;\\n    }\\n  }\\n  return {_lodPlanes: _lodPlanes2, _sizeLods: _sizeLods2, _sigmas: _sigmas2};\\n}\\nfunction _createRenderTarget(params) {\\n  const cubeUVRenderTarget = new WebGLRenderTarget(3 * SIZE_MAX, 3 * SIZE_MAX, params);\\n  cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\\n  cubeUVRenderTarget.texture.name = \\\\\\\"PMREM.cubeUv\\\\\\\";\\n  cubeUVRenderTarget.scissorTest = true;\\n  return cubeUVRenderTarget;\\n}\\nfunction _setViewport(target, x, y, width, height) {\\n  target.viewport.set(x, y, width, height);\\n  target.scissor.set(x, y, width, height);\\n}\\nfunction _getBlurShader(maxSamples) {\\n  const weights = new Float32Array(maxSamples);\\n  const poleAxis = new Vector3(0, 1, 0);\\n  const shaderMaterial = new RawShaderMaterial({\\n    name: \\\\\\\"SphericalGaussianBlur\\\\\\\",\\n    defines: {n: maxSamples},\\n    uniforms: {\\n      envMap: {value: null},\\n      samples: {value: 1},\\n      weights: {value: weights},\\n      latitudinal: {value: false},\\n      dTheta: {value: 0},\\n      mipInt: {value: 0},\\n      poleAxis: {value: poleAxis},\\n      inputEncoding: {value: ENCODINGS[LinearEncoding]},\\n      outputEncoding: {value: ENCODINGS[LinearEncoding]}\\n    },\\n    vertexShader: _getCommonVertexShader(),\\n    fragmentShader: `\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform sampler2D envMap;\\n\\t\\t\\tuniform int samples;\\n\\t\\t\\tuniform float weights[ n ];\\n\\t\\t\\tuniform bool latitudinal;\\n\\t\\t\\tuniform float dTheta;\\n\\t\\t\\tuniform float mipInt;\\n\\t\\t\\tuniform vec3 poleAxis;\\n\\n\\t\\t\\t${_getEncodings()}\\n\\n\\t\\t\\t#define ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t#include <cube_uv_reflection_fragment>\\n\\n\\t\\t\\tvec3 getSample( float theta, vec3 axis ) {\\n\\n\\t\\t\\t\\tfloat cosTheta = cos( theta );\\n\\t\\t\\t\\t// Rodrigues' axis-angle rotation\\n\\t\\t\\t\\tvec3 sampleDirection = vOutputDirection * cosTheta\\n\\t\\t\\t\\t\\t+ cross( axis, vOutputDirection ) * sin( theta )\\n\\t\\t\\t\\t\\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\\n\\n\\t\\t\\t\\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\\n\\n\\t\\t\\t}\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\\n\\n\\t\\t\\t\\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\\n\\n\\t\\t\\t\\t\\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\taxis = normalize( axis );\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t\\t\\t\\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\\n\\n\\t\\t\\t\\tfor ( int i = 1; i < n; i++ ) {\\n\\n\\t\\t\\t\\t\\tif ( i >= samples ) {\\n\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tfloat theta = dTheta * float( i );\\n\\t\\t\\t\\t\\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\\n\\t\\t\\t\\t\\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,\\n    blending: NoBlending,\\n    depthTest: false,\\n    depthWrite: false\\n  });\\n  return shaderMaterial;\\n}\\nfunction _getEquirectShader() {\\n  const texelSize = new Vector2(1, 1);\\n  const shaderMaterial = new RawShaderMaterial({\\n    name: \\\\\\\"EquirectangularToCubeUV\\\\\\\",\\n    uniforms: {\\n      envMap: {value: null},\\n      texelSize: {value: texelSize},\\n      inputEncoding: {value: ENCODINGS[LinearEncoding]},\\n      outputEncoding: {value: ENCODINGS[LinearEncoding]}\\n    },\\n    vertexShader: _getCommonVertexShader(),\\n    fragmentShader: `\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform sampler2D envMap;\\n\\t\\t\\tuniform vec2 texelSize;\\n\\n\\t\\t\\t${_getEncodings()}\\n\\n\\t\\t\\t#include <common>\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\n\\t\\t\\t\\tvec3 outputDirection = normalize( vOutputDirection );\\n\\t\\t\\t\\tvec2 uv = equirectUv( outputDirection );\\n\\n\\t\\t\\t\\tvec2 f = fract( uv / texelSize - 0.5 );\\n\\t\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\t\\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.x += texelSize.x;\\n\\t\\t\\t\\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.y += texelSize.y;\\n\\t\\t\\t\\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.x -= texelSize.x;\\n\\t\\t\\t\\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\n\\t\\t\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\t\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\t\\t\\tgl_FragColor.rgb = mix( tm, bm, f.y );\\n\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,\\n    blending: NoBlending,\\n    depthTest: false,\\n    depthWrite: false\\n  });\\n  return shaderMaterial;\\n}\\nfunction _getCubemapShader() {\\n  const shaderMaterial = new RawShaderMaterial({\\n    name: \\\\\\\"CubemapToCubeUV\\\\\\\",\\n    uniforms: {\\n      envMap: {value: null},\\n      inputEncoding: {value: ENCODINGS[LinearEncoding]},\\n      outputEncoding: {value: ENCODINGS[LinearEncoding]}\\n    },\\n    vertexShader: _getCommonVertexShader(),\\n    fragmentShader: `\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform samplerCube envMap;\\n\\n\\t\\t\\t${_getEncodings()}\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t\\t\\t\\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,\\n    blending: NoBlending,\\n    depthTest: false,\\n    depthWrite: false\\n  });\\n  return shaderMaterial;\\n}\\nfunction _getCommonVertexShader() {\\n  return `\\n\\n\\t\\tprecision mediump float;\\n\\t\\tprecision mediump int;\\n\\n\\t\\tattribute vec3 position;\\n\\t\\tattribute vec2 uv;\\n\\t\\tattribute float faceIndex;\\n\\n\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t// RH coordinate system; PMREM face-indexing convention\\n\\t\\tvec3 getDirection( vec2 uv, float face ) {\\n\\n\\t\\t\\tuv = 2.0 * uv - 1.0;\\n\\n\\t\\t\\tvec3 direction = vec3( uv, 1.0 );\\n\\n\\t\\t\\tif ( face == 0.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.zyx; // ( 1, v, u ) pos x\\n\\n\\t\\t\\t} else if ( face == 1.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.xzy;\\n\\t\\t\\t\\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\\n\\n\\t\\t\\t} else if ( face == 2.0 ) {\\n\\n\\t\\t\\t\\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\\n\\n\\t\\t\\t} else if ( face == 3.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.zyx;\\n\\t\\t\\t\\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\\n\\n\\t\\t\\t} else if ( face == 4.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.xzy;\\n\\t\\t\\t\\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\\n\\n\\t\\t\\t} else if ( face == 5.0 ) {\\n\\n\\t\\t\\t\\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\\n\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn direction;\\n\\n\\t\\t}\\n\\n\\t\\tvoid main() {\\n\\n\\t\\t\\tvOutputDirection = getDirection( uv, faceIndex );\\n\\t\\t\\tgl_Position = vec4( position, 1.0 );\\n\\n\\t\\t}\\n\\t`;\\n}\\nfunction _getEncodings() {\\n  return `\\n\\n\\t\\tuniform int inputEncoding;\\n\\t\\tuniform int outputEncoding;\\n\\n\\t\\t#include <encodings_pars_fragment>\\n\\n\\t\\tvec4 inputTexelToLinear( vec4 value ) {\\n\\n\\t\\t\\tif ( inputEncoding == 0 ) {\\n\\n\\t\\t\\t\\treturn value;\\n\\n\\t\\t\\t} else if ( inputEncoding == 1 ) {\\n\\n\\t\\t\\t\\treturn sRGBToLinear( value );\\n\\n\\t\\t\\t} else if ( inputEncoding == 2 ) {\\n\\n\\t\\t\\t\\treturn RGBEToLinear( value );\\n\\n\\t\\t\\t} else if ( inputEncoding == 3 ) {\\n\\n\\t\\t\\t\\treturn RGBMToLinear( value, 7.0 );\\n\\n\\t\\t\\t} else if ( inputEncoding == 4 ) {\\n\\n\\t\\t\\t\\treturn RGBMToLinear( value, 16.0 );\\n\\n\\t\\t\\t} else if ( inputEncoding == 5 ) {\\n\\n\\t\\t\\t\\treturn RGBDToLinear( value, 256.0 );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\treturn GammaToLinear( value, 2.2 );\\n\\n\\t\\t\\t}\\n\\n\\t\\t}\\n\\n\\t\\tvec4 linearToOutputTexel( vec4 value ) {\\n\\n\\t\\t\\tif ( outputEncoding == 0 ) {\\n\\n\\t\\t\\t\\treturn value;\\n\\n\\t\\t\\t} else if ( outputEncoding == 1 ) {\\n\\n\\t\\t\\t\\treturn LinearTosRGB( value );\\n\\n\\t\\t\\t} else if ( outputEncoding == 2 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBE( value );\\n\\n\\t\\t\\t} else if ( outputEncoding == 3 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBM( value, 7.0 );\\n\\n\\t\\t\\t} else if ( outputEncoding == 4 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBM( value, 16.0 );\\n\\n\\t\\t\\t} else if ( outputEncoding == 5 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBD( value, 256.0 );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\treturn LinearToGamma( value, 2.2 );\\n\\n\\t\\t\\t}\\n\\n\\t\\t}\\n\\n\\t\\tvec4 envMapTexelToLinear( vec4 color ) {\\n\\n\\t\\t\\treturn inputTexelToLinear( color );\\n\\n\\t\\t}\\n\\t`;\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js\\nfunction WebGLCubeUVMaps(renderer) {\\n  let cubeUVmaps = new WeakMap();\\n  let pmremGenerator = null;\\n  function get(texture) {\\n    if (texture && texture.isTexture && texture.isRenderTargetTexture === false) {\\n      const mapping = texture.mapping;\\n      const isEquirectMap = mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping;\\n      const isCubeMap = mapping === CubeReflectionMapping || mapping === CubeRefractionMapping;\\n      if (isEquirectMap || isCubeMap) {\\n        if (cubeUVmaps.has(texture)) {\\n          return cubeUVmaps.get(texture).texture;\\n        } else {\\n          const image = texture.image;\\n          if (isEquirectMap && image && image.height > 0 || isCubeMap && image && isCubeTextureComplete(image)) {\\n            const currentRenderTarget = renderer.getRenderTarget();\\n            if (pmremGenerator === null)\\n              pmremGenerator = new PMREMGenerator(renderer);\\n            const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture) : pmremGenerator.fromCubemap(texture);\\n            cubeUVmaps.set(texture, renderTarget);\\n            renderer.setRenderTarget(currentRenderTarget);\\n            texture.addEventListener(\\\\\\\"dispose\\\\\\\", onTextureDispose);\\n            return renderTarget.texture;\\n          } else {\\n            return null;\\n          }\\n        }\\n      }\\n    }\\n    return texture;\\n  }\\n  function isCubeTextureComplete(image) {\\n    let count = 0;\\n    const length = 6;\\n    for (let i = 0; i < length; i++) {\\n      if (image[i] !== void 0)\\n        count++;\\n    }\\n    return count === length;\\n  }\\n  function onTextureDispose(event) {\\n    const texture = event.target;\\n    texture.removeEventListener(\\\\\\\"dispose\\\\\\\", onTextureDispose);\\n    const cubemapUV = cubeUVmaps.get(texture);\\n    if (cubemapUV !== void 0) {\\n      cubeUVmaps.delete(texture);\\n      cubemapUV.dispose();\\n    }\\n  }\\n  function dispose() {\\n    cubeUVmaps = new WeakMap();\\n    if (pmremGenerator !== null) {\\n      pmremGenerator.dispose();\\n      pmremGenerator = null;\\n    }\\n  }\\n  return {\\n    get,\\n    dispose\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLExtensions.js\\nfunction WebGLExtensions(gl) {\\n  const extensions = {};\\n  function getExtension(name) {\\n    if (extensions[name] !== void 0) {\\n      return extensions[name];\\n    }\\n    let extension;\\n    switch (name) {\\n      case \\\\\\\"WEBGL_depth_texture\\\\\\\":\\n        extension = gl.getExtension(\\\\\\\"WEBGL_depth_texture\\\\\\\") || gl.getExtension(\\\\\\\"MOZ_WEBGL_depth_texture\\\\\\\") || gl.getExtension(\\\\\\\"WEBKIT_WEBGL_depth_texture\\\\\\\");\\n        break;\\n      case \\\\\\\"EXT_texture_filter_anisotropic\\\\\\\":\\n        extension = gl.getExtension(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\") || gl.getExtension(\\\\\\\"MOZ_EXT_texture_filter_anisotropic\\\\\\\") || gl.getExtension(\\\\\\\"WEBKIT_EXT_texture_filter_anisotropic\\\\\\\");\\n        break;\\n      case \\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\":\\n        extension = gl.getExtension(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\") || gl.getExtension(\\\\\\\"MOZ_WEBGL_compressed_texture_s3tc\\\\\\\") || gl.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_s3tc\\\\\\\");\\n        break;\\n      case \\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\":\\n        extension = gl.getExtension(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\") || gl.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_pvrtc\\\\\\\");\\n        break;\\n      default:\\n        extension = gl.getExtension(name);\\n    }\\n    extensions[name] = extension;\\n    return extension;\\n  }\\n  return {\\n    has: function(name) {\\n      return getExtension(name) !== null;\\n    },\\n    init: function(capabilities) {\\n      if (capabilities.isWebGL2) {\\n        getExtension(\\\\\\\"EXT_color_buffer_float\\\\\\\");\\n      } else {\\n        getExtension(\\\\\\\"WEBGL_depth_texture\\\\\\\");\\n        getExtension(\\\\\\\"OES_texture_float\\\\\\\");\\n        getExtension(\\\\\\\"OES_texture_half_float\\\\\\\");\\n        getExtension(\\\\\\\"OES_texture_half_float_linear\\\\\\\");\\n        getExtension(\\\\\\\"OES_standard_derivatives\\\\\\\");\\n        getExtension(\\\\\\\"OES_element_index_uint\\\\\\\");\\n        getExtension(\\\\\\\"OES_vertex_array_object\\\\\\\");\\n        getExtension(\\\\\\\"ANGLE_instanced_arrays\\\\\\\");\\n      }\\n      getExtension(\\\\\\\"OES_texture_float_linear\\\\\\\");\\n      getExtension(\\\\\\\"EXT_color_buffer_half_float\\\\\\\");\\n    },\\n    get: function(name) {\\n      const extension = getExtension(name);\\n      if (extension === null) {\\n        console.warn(\\\\\\\"THREE.WebGLRenderer: \\\\\\\" + name + \\\\\\\" extension not supported.\\\\\\\");\\n      }\\n      return extension;\\n    }\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLGeometries.js\\nfunction WebGLGeometries(gl, attributes, info, bindingStates) {\\n  const geometries = {};\\n  const wireframeAttributes = new WeakMap();\\n  function onGeometryDispose(event) {\\n    const geometry = event.target;\\n    if (geometry.index !== null) {\\n      attributes.remove(geometry.index);\\n    }\\n    for (const name in geometry.attributes) {\\n      attributes.remove(geometry.attributes[name]);\\n    }\\n    geometry.removeEventListener(\\\\\\\"dispose\\\\\\\", onGeometryDispose);\\n    delete geometries[geometry.id];\\n    const attribute = wireframeAttributes.get(geometry);\\n    if (attribute) {\\n      attributes.remove(attribute);\\n      wireframeAttributes.delete(geometry);\\n    }\\n    bindingStates.releaseStatesOfGeometry(geometry);\\n    if (geometry.isInstancedBufferGeometry === true) {\\n      delete geometry._maxInstanceCount;\\n    }\\n    info.memory.geometries--;\\n  }\\n  function get(object, geometry) {\\n    if (geometries[geometry.id] === true)\\n      return geometry;\\n    geometry.addEventListener(\\\\\\\"dispose\\\\\\\", onGeometryDispose);\\n    geometries[geometry.id] = true;\\n    info.memory.geometries++;\\n    return geometry;\\n  }\\n  function update(geometry) {\\n    const geometryAttributes = geometry.attributes;\\n    for (const name in geometryAttributes) {\\n      attributes.update(geometryAttributes[name], gl.ARRAY_BUFFER);\\n    }\\n    const morphAttributes = geometry.morphAttributes;\\n    for (const name in morphAttributes) {\\n      const array = morphAttributes[name];\\n      for (let i = 0, l = array.length; i < l; i++) {\\n        attributes.update(array[i], gl.ARRAY_BUFFER);\\n      }\\n    }\\n  }\\n  function updateWireframeAttribute(geometry) {\\n    const indices = [];\\n    const geometryIndex = geometry.index;\\n    const geometryPosition = geometry.attributes.position;\\n    let version = 0;\\n    if (geometryIndex !== null) {\\n      const array = geometryIndex.array;\\n      version = geometryIndex.version;\\n      for (let i = 0, l = array.length; i < l; i += 3) {\\n        const a = array[i + 0];\\n        const b = array[i + 1];\\n        const c = array[i + 2];\\n        indices.push(a, b, b, c, c, a);\\n      }\\n    } else {\\n      const array = geometryPosition.array;\\n      version = geometryPosition.version;\\n      for (let i = 0, l = array.length / 3 - 1; i < l; i += 3) {\\n        const a = i + 0;\\n        const b = i + 1;\\n        const c = i + 2;\\n        indices.push(a, b, b, c, c, a);\\n      }\\n    }\\n    const attribute = new (arrayMax(indices) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute)(indices, 1);\\n    attribute.version = version;\\n    const previousAttribute = wireframeAttributes.get(geometry);\\n    if (previousAttribute)\\n      attributes.remove(previousAttribute);\\n    wireframeAttributes.set(geometry, attribute);\\n  }\\n  function getWireframeAttribute(geometry) {\\n    const currentAttribute = wireframeAttributes.get(geometry);\\n    if (currentAttribute) {\\n      const geometryIndex = geometry.index;\\n      if (geometryIndex !== null) {\\n        if (currentAttribute.version < geometryIndex.version) {\\n          updateWireframeAttribute(geometry);\\n        }\\n      }\\n    } else {\\n      updateWireframeAttribute(geometry);\\n    }\\n    return wireframeAttributes.get(geometry);\\n  }\\n  return {\\n    get,\\n    update,\\n    getWireframeAttribute\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js\\nfunction WebGLIndexedBufferRenderer(gl, extensions, info, capabilities) {\\n  const isWebGL2 = capabilities.isWebGL2;\\n  let mode;\\n  function setMode(value) {\\n    mode = value;\\n  }\\n  let type, bytesPerElement;\\n  function setIndex(value) {\\n    type = value.type;\\n    bytesPerElement = value.bytesPerElement;\\n  }\\n  function render(start, count) {\\n    gl.drawElements(mode, count, type, start * bytesPerElement);\\n    info.update(count, mode, 1);\\n  }\\n  function renderInstances(start, count, primcount) {\\n    if (primcount === 0)\\n      return;\\n    let extension, methodName;\\n    if (isWebGL2) {\\n      extension = gl;\\n      methodName = \\\\\\\"drawElementsInstanced\\\\\\\";\\n    } else {\\n      extension = extensions.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\");\\n      methodName = \\\\\\\"drawElementsInstancedANGLE\\\\\\\";\\n      if (extension === null) {\\n        console.error(\\\\\\\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");\\n        return;\\n      }\\n    }\\n    extension[methodName](mode, count, type, start * bytesPerElement, primcount);\\n    info.update(count, mode, primcount);\\n  }\\n  this.setMode = setMode;\\n  this.setIndex = setIndex;\\n  this.render = render;\\n  this.renderInstances = renderInstances;\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLInfo.js\\nfunction WebGLInfo(gl) {\\n  const memory = {\\n    geometries: 0,\\n    textures: 0\\n  };\\n  const render = {\\n    frame: 0,\\n    calls: 0,\\n    triangles: 0,\\n    points: 0,\\n    lines: 0\\n  };\\n  function update(count, mode, instanceCount) {\\n    render.calls++;\\n    switch (mode) {\\n      case gl.TRIANGLES:\\n        render.triangles += instanceCount * (count / 3);\\n        break;\\n      case gl.LINES:\\n        render.lines += instanceCount * (count / 2);\\n        break;\\n      case gl.LINE_STRIP:\\n        render.lines += instanceCount * (count - 1);\\n        break;\\n      case gl.LINE_LOOP:\\n        render.lines += instanceCount * count;\\n        break;\\n      case gl.POINTS:\\n        render.points += instanceCount * count;\\n        break;\\n      default:\\n        console.error(\\\\\\\"THREE.WebGLInfo: Unknown draw mode:\\\\\\\", mode);\\n        break;\\n    }\\n  }\\n  function reset() {\\n    render.frame++;\\n    render.calls = 0;\\n    render.triangles = 0;\\n    render.points = 0;\\n    render.lines = 0;\\n  }\\n  return {\\n    memory,\\n    render,\\n    programs: null,\\n    autoReset: true,\\n    reset,\\n    update\\n  };\\n}\\n\\n// ../../../node_modules/three/src/textures/DataTexture2DArray.js\\nvar DataTexture2DArray = class extends Texture {\\n  constructor(data = null, width = 1, height = 1, depth2 = 1) {\\n    super(null);\\n    this.image = {data, width, height, depth: depth2};\\n    this.magFilter = NearestFilter;\\n    this.minFilter = NearestFilter;\\n    this.wrapR = ClampToEdgeWrapping;\\n    this.generateMipmaps = false;\\n    this.flipY = false;\\n    this.unpackAlignment = 1;\\n    this.needsUpdate = true;\\n  }\\n};\\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLMorphtargets.js\\nfunction numericalSort(a, b) {\\n  return a[0] - b[0];\\n}\\nfunction absNumericalSort(a, b) {\\n  return Math.abs(b[1]) - Math.abs(a[1]);\\n}\\nfunction denormalize(morph, attribute) {\\n  let denominator = 1;\\n  const array = attribute.isInterleavedBufferAttribute ? attribute.data.array : attribute.array;\\n  if (array instanceof Int8Array)\\n    denominator = 127;\\n  else if (array instanceof Int16Array)\\n    denominator = 32767;\\n  else if (array instanceof Int32Array)\\n    denominator = 2147483647;\\n  else\\n    console.error(\\\\\\\"THREE.WebGLMorphtargets: Unsupported morph attribute data type: \\\\\\\", array);\\n  morph.divideScalar(denominator);\\n}\\nfunction WebGLMorphtargets(gl, capabilities, textures) {\\n  const influencesList = {};\\n  const morphInfluences = new Float32Array(8);\\n  const morphTextures = new WeakMap();\\n  const morph = new Vector3();\\n  const workInfluences = [];\\n  for (let i = 0; i < 8; i++) {\\n    workInfluences[i] = [i, 0];\\n  }\\n  function update(object, geometry, material, program) {\\n    const objectInfluences = object.morphTargetInfluences;\\n    if (capabilities.isWebGL2 === true) {\\n      const numberOfMorphTargets = geometry.morphAttributes.position.length;\\n      let entry = morphTextures.get(geometry);\\n      if (entry === void 0 || entry.count !== numberOfMorphTargets) {\\n        if (entry !== void 0)\\n          entry.texture.dispose();\\n        const hasMorphNormals = geometry.morphAttributes.normal !== void 0;\\n        const morphTargets = geometry.morphAttributes.position;\\n        const morphNormals = geometry.morphAttributes.normal || [];\\n        const numberOfVertices = geometry.attributes.position.count;\\n        const numberOfVertexData = hasMorphNormals === true ? 2 : 1;\\n        let width = numberOfVertices * numberOfVertexData;\\n        let height = 1;\\n        if (width > capabilities.maxTextureSize) {\\n          height = Math.ceil(width / capabilities.maxTextureSize);\\n          width = capabilities.maxTextureSize;\\n        }\\n        const buffer = new Float32Array(width * height * 4 * numberOfMorphTargets);\\n        const texture = new DataTexture2DArray(buffer, width, height, numberOfMorphTargets);\\n        texture.format = RGBAFormat;\\n        texture.type = FloatType;\\n        const vertexDataStride = numberOfVertexData * 4;\\n        for (let i = 0; i < numberOfMorphTargets; i++) {\\n          const morphTarget = morphTargets[i];\\n          const morphNormal = morphNormals[i];\\n          const offset = width * height * 4 * i;\\n          for (let j = 0; j < morphTarget.count; j++) {\\n            morph.fromBufferAttribute(morphTarget, j);\\n            if (morphTarget.normalized === true)\\n              denormalize(morph, morphTarget);\\n            const stride = j * vertexDataStride;\\n            buffer[offset + stride + 0] = morph.x;\\n            buffer[offset + stride + 1] = morph.y;\\n            buffer[offset + stride + 2] = morph.z;\\n            buffer[offset + stride + 3] = 0;\\n            if (hasMorphNormals === true) {\\n              morph.fromBufferAttribute(morphNormal, j);\\n              if (morphNormal.normalized === true)\\n                denormalize(morph, morphNormal);\\n              buffer[offset + stride + 4] = morph.x;\\n              buffer[offset + stride + 5] = morph.y;\\n              buffer[offset + stride + 6] = morph.z;\\n              buffer[offset + stride + 7] = 0;\\n            }\\n          }\\n        }\\n        entry = {\\n          count: numberOfMorphTargets,\\n          texture,\\n          size: new Vector2(width, height)\\n        };\\n        morphTextures.set(geometry, entry);\\n      }\\n      let morphInfluencesSum = 0;\\n      for (let i = 0; i < objectInfluences.length; i++) {\\n        morphInfluencesSum += objectInfluences[i];\\n      }\\n      const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\\n      program.getUniforms().setValue(gl, \\\\\\\"morphTargetBaseInfluence\\\\\\\", morphBaseInfluence);\\n      program.getUniforms().setValue(gl, \\\\\\\"morphTargetInfluences\\\\\\\", objectInfluences);\\n      program.getUniforms().setValue(gl, \\\\\\\"morphTargetsTexture\\\\\\\", entry.texture, textures);\\n      program.getUniforms().setValue(gl, \\\\\\\"morphTargetsTextureSize\\\\\\\", entry.size);\\n    } else {\\n      const length = objectInfluences === void 0 ? 0 : objectInfluences.length;\\n      let influences = influencesList[geometry.id];\\n      if (influences === void 0 || influences.length !== length) {\\n        influences = [];\\n        for (let i = 0; i < length; i++) {\\n          influences[i] = [i, 0];\\n        }\\n        influencesList[geometry.id] = influences;\\n      }\\n      for (let i = 0; i < length; i++) {\\n        const influence = influences[i];\\n        influence[0] = i;\\n        influence[1] = objectInfluences[i];\\n      }\\n      influences.sort(absNumericalSort);\\n      for (let i = 0; i < 8; i++) {\\n        if (i < length && influences[i][1]) {\\n          workInfluences[i][0] = influences[i][0];\\n          workInfluences[i][1] = influences[i][1];\\n        } else {\\n          workInfluences[i][0] = Number.MAX_SAFE_INTEGER;\\n          workInfluences[i][1] = 0;\\n        }\\n      }\\n      workInfluences.sort(numericalSort);\\n      const morphTargets = geometry.morphAttributes.position;\\n      const morphNormals = geometry.morphAttributes.normal;\\n      let morphInfluencesSum = 0;\\n      for (let i = 0; i < 8; i++) {\\n        const influence = workInfluences[i];\\n        const index = influence[0];\\n        const value = influence[1];\\n        if (index !== Number.MAX_SAFE_INTEGER && value) {\\n          if (morphTargets && geometry.getAttribute(\\\\\\\"morphTarget\\\\\\\" + i) !== morphTargets[index]) {\\n            geometry.setAttribute(\\\\\\\"morphTarget\\\\\\\" + i, morphTargets[index]);\\n          }\\n          if (morphNormals && geometry.getAttribute(\\\\\\\"morphNormal\\\\\\\" + i) !== morphNormals[index]) {\\n            geometry.setAttribute(\\\\\\\"morphNormal\\\\\\\" + i, morphNormals[index]);\\n          }\\n          morphInfluences[i] = value;\\n          morphInfluencesSum += value;\\n        } else {\\n          if (morphTargets && geometry.hasAttribute(\\\\\\\"morphTarget\\\\\\\" + i) === true) {\\n            geometry.deleteAttribute(\\\\\\\"morphTarget\\\\\\\" + i);\\n          }\\n          if (morphNormals && geometry.hasAttribute(\\\\\\\"morphNormal\\\\\\\" + i) === true) {\\n            geometry.deleteAttribute(\\\\\\\"morphNormal\\\\\\\" + i);\\n          }\\n          morphInfluences[i] = 0;\\n        }\\n      }\\n      const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\\n      program.getUniforms().setValue(gl, \\\\\\\"morphTargetBaseInfluence\\\\\\\", morphBaseInfluence);\\n      program.getUniforms().setValue(gl, \\\\\\\"morphTargetInfluences\\\\\\\", morphInfluences);\\n    }\\n  }\\n  return {\\n    update\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.js\\nvar WebGLMultisampleRenderTarget = class extends WebGLRenderTarget {\\n  constructor(width, height, options) {\\n    super(width, height, options);\\n    this.samples = 4;\\n  }\\n  copy(source) {\\n    super.copy.call(this, source);\\n    this.samples = source.samples;\\n    return this;\\n  }\\n};\\nWebGLMultisampleRenderTarget.prototype.isWebGLMultisampleRenderTarget = true;\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLObjects.js\\nfunction WebGLObjects(gl, geometries, attributes, info) {\\n  let updateMap = new WeakMap();\\n  function update(object) {\\n    const frame = info.render.frame;\\n    const geometry = object.geometry;\\n    const buffergeometry = geometries.get(object, geometry);\\n    if (updateMap.get(buffergeometry) !== frame) {\\n      geometries.update(buffergeometry);\\n      updateMap.set(buffergeometry, frame);\\n    }\\n    if (object.isInstancedMesh) {\\n      if (object.hasEventListener(\\\\\\\"dispose\\\\\\\", onInstancedMeshDispose) === false) {\\n        object.addEventListener(\\\\\\\"dispose\\\\\\\", onInstancedMeshDispose);\\n      }\\n      attributes.update(object.instanceMatrix, gl.ARRAY_BUFFER);\\n      if (object.instanceColor !== null) {\\n        attributes.update(object.instanceColor, gl.ARRAY_BUFFER);\\n      }\\n    }\\n    return buffergeometry;\\n  }\\n  function dispose() {\\n    updateMap = new WeakMap();\\n  }\\n  function onInstancedMeshDispose(event) {\\n    const instancedMesh = event.target;\\n    instancedMesh.removeEventListener(\\\\\\\"dispose\\\\\\\", onInstancedMeshDispose);\\n    attributes.remove(instancedMesh.instanceMatrix);\\n    if (instancedMesh.instanceColor !== null)\\n      attributes.remove(instancedMesh.instanceColor);\\n  }\\n  return {\\n    update,\\n    dispose\\n  };\\n}\\n\\n// ../../../node_modules/three/src/textures/DataTexture3D.js\\nvar DataTexture3D = class extends Texture {\\n  constructor(data = null, width = 1, height = 1, depth2 = 1) {\\n    super(null);\\n    this.image = {data, width, height, depth: depth2};\\n    this.magFilter = NearestFilter;\\n    this.minFilter = NearestFilter;\\n    this.wrapR = ClampToEdgeWrapping;\\n    this.generateMipmaps = false;\\n    this.flipY = false;\\n    this.unpackAlignment = 1;\\n    this.needsUpdate = true;\\n  }\\n};\\nDataTexture3D.prototype.isDataTexture3D = true;\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLUniforms.js\\nvar emptyTexture = new Texture();\\nvar emptyTexture2dArray = new DataTexture2DArray();\\nvar emptyTexture3d = new DataTexture3D();\\nvar emptyCubeTexture = new CubeTexture();\\nvar arrayCacheF32 = [];\\nvar arrayCacheI32 = [];\\nvar mat4array = new Float32Array(16);\\nvar mat3array = new Float32Array(9);\\nvar mat2array = new Float32Array(4);\\nfunction flatten(array, nBlocks, blockSize) {\\n  const firstElem = array[0];\\n  if (firstElem <= 0 || firstElem > 0)\\n    return array;\\n  const n = nBlocks * blockSize;\\n  let r = arrayCacheF32[n];\\n  if (r === void 0) {\\n    r = new Float32Array(n);\\n    arrayCacheF32[n] = r;\\n  }\\n  if (nBlocks !== 0) {\\n    firstElem.toArray(r, 0);\\n    for (let i = 1, offset = 0; i !== nBlocks; ++i) {\\n      offset += blockSize;\\n      array[i].toArray(r, offset);\\n    }\\n  }\\n  return r;\\n}\\nfunction arraysEqual(a, b) {\\n  if (a.length !== b.length)\\n    return false;\\n  for (let i = 0, l = a.length; i < l; i++) {\\n    if (a[i] !== b[i])\\n      return false;\\n  }\\n  return true;\\n}\\nfunction copyArray(a, b) {\\n  for (let i = 0, l = b.length; i < l; i++) {\\n    a[i] = b[i];\\n  }\\n}\\nfunction allocTexUnits(textures, n) {\\n  let r = arrayCacheI32[n];\\n  if (r === void 0) {\\n    r = new Int32Array(n);\\n    arrayCacheI32[n] = r;\\n  }\\n  for (let i = 0; i !== n; ++i) {\\n    r[i] = textures.allocateTextureUnit();\\n  }\\n  return r;\\n}\\nfunction setValueV1f(gl, v) {\\n  const cache = this.cache;\\n  if (cache[0] === v)\\n    return;\\n  gl.uniform1f(this.addr, v);\\n  cache[0] = v;\\n}\\nfunction setValueV2f(gl, v) {\\n  const cache = this.cache;\\n  if (v.x !== void 0) {\\n    if (cache[0] !== v.x || cache[1] !== v.y) {\\n      gl.uniform2f(this.addr, v.x, v.y);\\n      cache[0] = v.x;\\n      cache[1] = v.y;\\n    }\\n  } else {\\n    if (arraysEqual(cache, v))\\n      return;\\n    gl.uniform2fv(this.addr, v);\\n    copyArray(cache, v);\\n  }\\n}\\nfunction setValueV3f(gl, v) {\\n  const cache = this.cache;\\n  if (v.x !== void 0) {\\n    if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) {\\n      gl.uniform3f(this.addr, v.x, v.y, v.z);\\n      cache[0] = v.x;\\n      cache[1] = v.y;\\n      cache[2] = v.z;\\n    }\\n  } else if (v.r !== void 0) {\\n    if (cache[0] !== v.r || cache[1] !== v.g || cache[2] !== v.b) {\\n      gl.uniform3f(this.addr, v.r, v.g, v.b);\\n      cache[0] = v.r;\\n      cache[1] = v.g;\\n      cache[2] = v.b;\\n    }\\n  } else {\\n    if (arraysEqual(cache, v))\\n      return;\\n    gl.uniform3fv(this.addr, v);\\n    copyArray(cache, v);\\n  }\\n}\\nfunction setValueV4f(gl, v) {\\n  const cache = this.cache;\\n  if (v.x !== void 0) {\\n    if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) {\\n      gl.uniform4f(this.addr, v.x, v.y, v.z, v.w);\\n      cache[0] = v.x;\\n      cache[1] = v.y;\\n      cache[2] = v.z;\\n      cache[3] = v.w;\\n    }\\n  } else {\\n    if (arraysEqual(cache, v))\\n      return;\\n    gl.uniform4fv(this.addr, v);\\n    copyArray(cache, v);\\n  }\\n}\\nfunction setValueM2(gl, v) {\\n  const cache = this.cache;\\n  const elements = v.elements;\\n  if (elements === void 0) {\\n    if (arraysEqual(cache, v))\\n      return;\\n    gl.uniformMatrix2fv(this.addr, false, v);\\n    copyArray(cache, v);\\n  } else {\\n    if (arraysEqual(cache, elements))\\n      return;\\n    mat2array.set(elements);\\n    gl.uniformMatrix2fv(this.addr, false, mat2array);\\n    copyArray(cache, elements);\\n  }\\n}\\nfunction setValueM3(gl, v) {\\n  const cache = this.cache;\\n  const elements = v.elements;\\n  if (elements === void 0) {\\n    if (arraysEqual(cache, v))\\n      return;\\n    gl.uniformMatrix3fv(this.addr, false, v);\\n    copyArray(cache, v);\\n  } else {\\n    if (arraysEqual(cache, elements))\\n      return;\\n    mat3array.set(elements);\\n    gl.uniformMatrix3fv(this.addr, false, mat3array);\\n    copyArray(cache, elements);\\n  }\\n}\\nfunction setValueM4(gl, v) {\\n  const cache = this.cache;\\n  const elements = v.elements;\\n  if (elements === void 0) {\\n    if (arraysEqual(cache, v))\\n      return;\\n    gl.uniformMatrix4fv(this.addr, false, v);\\n    copyArray(cache, v);\\n  } else {\\n    if (arraysEqual(cache, elements))\\n      return;\\n    mat4array.set(elements);\\n    gl.uniformMatrix4fv(this.addr, false, mat4array);\\n    copyArray(cache, elements);\\n  }\\n}\\nfunction setValueV1i(gl, v) {\\n  const cache = this.cache;\\n  if (cache[0] === v)\\n    return;\\n  gl.uniform1i(this.addr, v);\\n  cache[0] = v;\\n}\\nfunction setValueV2i(gl, v) {\\n  const cache = this.cache;\\n  if (arraysEqual(cache, v))\\n    return;\\n  gl.uniform2iv(this.addr, v);\\n  copyArray(cache, v);\\n}\\nfunction setValueV3i(gl, v) {\\n  const cache = this.cache;\\n  if (arraysEqual(cache, v))\\n    return;\\n  gl.uniform3iv(this.addr, v);\\n  copyArray(cache, v);\\n}\\nfunction setValueV4i(gl, v) {\\n  const cache = this.cache;\\n  if (arraysEqual(cache, v))\\n    return;\\n  gl.uniform4iv(this.addr, v);\\n  copyArray(cache, v);\\n}\\nfunction setValueV1ui(gl, v) {\\n  const cache = this.cache;\\n  if (cache[0] === v)\\n    return;\\n  gl.uniform1ui(this.addr, v);\\n  cache[0] = v;\\n}\\nfunction setValueV2ui(gl, v) {\\n  const cache = this.cache;\\n  if (arraysEqual(cache, v))\\n    return;\\n  gl.uniform2uiv(this.addr, v);\\n  copyArray(cache, v);\\n}\\nfunction setValueV3ui(gl, v) {\\n  const cache = this.cache;\\n  if (arraysEqual(cache, v))\\n    return;\\n  gl.uniform3uiv(this.addr, v);\\n  copyArray(cache, v);\\n}\\nfunction setValueV4ui(gl, v) {\\n  const cache = this.cache;\\n  if (arraysEqual(cache, v))\\n    return;\\n  gl.uniform4uiv(this.addr, v);\\n  copyArray(cache, v);\\n}\\nfunction setValueT1(gl, v, textures) {\\n  const cache = this.cache;\\n  const unit = textures.allocateTextureUnit();\\n  if (cache[0] !== unit) {\\n    gl.uniform1i(this.addr, unit);\\n    cache[0] = unit;\\n  }\\n  textures.safeSetTexture2D(v || emptyTexture, unit);\\n}\\nfunction setValueT3D1(gl, v, textures) {\\n  const cache = this.cache;\\n  const unit = textures.allocateTextureUnit();\\n  if (cache[0] !== unit) {\\n    gl.uniform1i(this.addr, unit);\\n    cache[0] = unit;\\n  }\\n  textures.setTexture3D(v || emptyTexture3d, unit);\\n}\\nfunction setValueT6(gl, v, textures) {\\n  const cache = this.cache;\\n  const unit = textures.allocateTextureUnit();\\n  if (cache[0] !== unit) {\\n    gl.uniform1i(this.addr, unit);\\n    cache[0] = unit;\\n  }\\n  textures.safeSetTextureCube(v || emptyCubeTexture, unit);\\n}\\nfunction setValueT2DArray1(gl, v, textures) {\\n  const cache = this.cache;\\n  const unit = textures.allocateTextureUnit();\\n  if (cache[0] !== unit) {\\n    gl.uniform1i(this.addr, unit);\\n    cache[0] = unit;\\n  }\\n  textures.setTexture2DArray(v || emptyTexture2dArray, unit);\\n}\\nfunction getSingularSetter(type) {\\n  switch (type) {\\n    case 5126:\\n      return setValueV1f;\\n    case 35664:\\n      return setValueV2f;\\n    case 35665:\\n      return setValueV3f;\\n    case 35666:\\n      return setValueV4f;\\n    case 35674:\\n      return setValueM2;\\n    case 35675:\\n      return setValueM3;\\n    case 35676:\\n      return setValueM4;\\n    case 5124:\\n    case 35670:\\n      return setValueV1i;\\n    case 35667:\\n    case 35671:\\n      return setValueV2i;\\n    case 35668:\\n    case 35672:\\n      return setValueV3i;\\n    case 35669:\\n    case 35673:\\n      return setValueV4i;\\n    case 5125:\\n      return setValueV1ui;\\n    case 36294:\\n      return setValueV2ui;\\n    case 36295:\\n      return setValueV3ui;\\n    case 36296:\\n      return setValueV4ui;\\n    case 35678:\\n    case 36198:\\n    case 36298:\\n    case 36306:\\n    case 35682:\\n      return setValueT1;\\n    case 35679:\\n    case 36299:\\n    case 36307:\\n      return setValueT3D1;\\n    case 35680:\\n    case 36300:\\n    case 36308:\\n    case 36293:\\n      return setValueT6;\\n    case 36289:\\n    case 36303:\\n    case 36311:\\n    case 36292:\\n      return setValueT2DArray1;\\n  }\\n}\\nfunction setValueV1fArray(gl, v) {\\n  gl.uniform1fv(this.addr, v);\\n}\\nfunction setValueV2fArray(gl, v) {\\n  const data = flatten(v, this.size, 2);\\n  gl.uniform2fv(this.addr, data);\\n}\\nfunction setValueV3fArray(gl, v) {\\n  const data = flatten(v, this.size, 3);\\n  gl.uniform3fv(this.addr, data);\\n}\\nfunction setValueV4fArray(gl, v) {\\n  const data = flatten(v, this.size, 4);\\n  gl.uniform4fv(this.addr, data);\\n}\\nfunction setValueM2Array(gl, v) {\\n  const data = flatten(v, this.size, 4);\\n  gl.uniformMatrix2fv(this.addr, false, data);\\n}\\nfunction setValueM3Array(gl, v) {\\n  const data = flatten(v, this.size, 9);\\n  gl.uniformMatrix3fv(this.addr, false, data);\\n}\\nfunction setValueM4Array(gl, v) {\\n  const data = flatten(v, this.size, 16);\\n  gl.uniformMatrix4fv(this.addr, false, data);\\n}\\nfunction setValueV1iArray(gl, v) {\\n  gl.uniform1iv(this.addr, v);\\n}\\nfunction setValueV2iArray(gl, v) {\\n  gl.uniform2iv(this.addr, v);\\n}\\nfunction setValueV3iArray(gl, v) {\\n  gl.uniform3iv(this.addr, v);\\n}\\nfunction setValueV4iArray(gl, v) {\\n  gl.uniform4iv(this.addr, v);\\n}\\nfunction setValueV1uiArray(gl, v) {\\n  gl.uniform1uiv(this.addr, v);\\n}\\nfunction setValueV2uiArray(gl, v) {\\n  gl.uniform2uiv(this.addr, v);\\n}\\nfunction setValueV3uiArray(gl, v) {\\n  gl.uniform3uiv(this.addr, v);\\n}\\nfunction setValueV4uiArray(gl, v) {\\n  gl.uniform4uiv(this.addr, v);\\n}\\nfunction setValueT1Array(gl, v, textures) {\\n  const n = v.length;\\n  const units = allocTexUnits(textures, n);\\n  gl.uniform1iv(this.addr, units);\\n  for (let i = 0; i !== n; ++i) {\\n    textures.safeSetTexture2D(v[i] || emptyTexture, units[i]);\\n  }\\n}\\nfunction setValueT6Array(gl, v, textures) {\\n  const n = v.length;\\n  const units = allocTexUnits(textures, n);\\n  gl.uniform1iv(this.addr, units);\\n  for (let i = 0; i !== n; ++i) {\\n    textures.safeSetTextureCube(v[i] || emptyCubeTexture, units[i]);\\n  }\\n}\\nfunction getPureArraySetter(type) {\\n  switch (type) {\\n    case 5126:\\n      return setValueV1fArray;\\n    case 35664:\\n      return setValueV2fArray;\\n    case 35665:\\n      return setValueV3fArray;\\n    case 35666:\\n      return setValueV4fArray;\\n    case 35674:\\n      return setValueM2Array;\\n    case 35675:\\n      return setValueM3Array;\\n    case 35676:\\n      return setValueM4Array;\\n    case 5124:\\n    case 35670:\\n      return setValueV1iArray;\\n    case 35667:\\n    case 35671:\\n      return setValueV2iArray;\\n    case 35668:\\n    case 35672:\\n      return setValueV3iArray;\\n    case 35669:\\n    case 35673:\\n      return setValueV4iArray;\\n    case 5125:\\n      return setValueV1uiArray;\\n    case 36294:\\n      return setValueV2uiArray;\\n    case 36295:\\n      return setValueV3uiArray;\\n    case 36296:\\n      return setValueV4uiArray;\\n    case 35678:\\n    case 36198:\\n    case 36298:\\n    case 36306:\\n    case 35682:\\n      return setValueT1Array;\\n    case 35680:\\n    case 36300:\\n    case 36308:\\n    case 36293:\\n      return setValueT6Array;\\n  }\\n}\\nfunction SingleUniform(id, activeInfo, addr) {\\n  this.id = id;\\n  this.addr = addr;\\n  this.cache = [];\\n  this.setValue = getSingularSetter(activeInfo.type);\\n}\\nfunction PureArrayUniform(id, activeInfo, addr) {\\n  this.id = id;\\n  this.addr = addr;\\n  this.cache = [];\\n  this.size = activeInfo.size;\\n  this.setValue = getPureArraySetter(activeInfo.type);\\n}\\nPureArrayUniform.prototype.updateCache = function(data) {\\n  const cache = this.cache;\\n  if (data instanceof Float32Array && cache.length !== data.length) {\\n    this.cache = new Float32Array(data.length);\\n  }\\n  copyArray(cache, data);\\n};\\nfunction StructuredUniform(id) {\\n  this.id = id;\\n  this.seq = [];\\n  this.map = {};\\n}\\nStructuredUniform.prototype.setValue = function(gl, value, textures) {\\n  const seq = this.seq;\\n  for (let i = 0, n = seq.length; i !== n; ++i) {\\n    const u = seq[i];\\n    u.setValue(gl, value[u.id], textures);\\n  }\\n};\\nvar RePathPart = /(\\\\w+)(\\\\])?(\\\\[|\\\\.)?/g;\\nfunction addUniform(container, uniformObject) {\\n  container.seq.push(uniformObject);\\n  container.map[uniformObject.id] = uniformObject;\\n}\\nfunction parseUniform(activeInfo, addr, container) {\\n  const path = activeInfo.name, pathLength = path.length;\\n  RePathPart.lastIndex = 0;\\n  while (true) {\\n    const match = RePathPart.exec(path), matchEnd = RePathPart.lastIndex;\\n    let id = match[1];\\n    const idIsIndex = match[2] === \\\\\\\"]\\\\\\\", subscript = match[3];\\n    if (idIsIndex)\\n      id = id | 0;\\n    if (subscript === void 0 || subscript === \\\\\\\"[\\\\\\\" && matchEnd + 2 === pathLength) {\\n      addUniform(container, subscript === void 0 ? new SingleUniform(id, activeInfo, addr) : new PureArrayUniform(id, activeInfo, addr));\\n      break;\\n    } else {\\n      const map = container.map;\\n      let next = map[id];\\n      if (next === void 0) {\\n        next = new StructuredUniform(id);\\n        addUniform(container, next);\\n      }\\n      container = next;\\n    }\\n  }\\n}\\nfunction WebGLUniforms(gl, program) {\\n  this.seq = [];\\n  this.map = {};\\n  const n = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\\n  for (let i = 0; i < n; ++i) {\\n    const info = gl.getActiveUniform(program, i), addr = gl.getUniformLocation(program, info.name);\\n    parseUniform(info, addr, this);\\n  }\\n}\\nWebGLUniforms.prototype.setValue = function(gl, name, value, textures) {\\n  const u = this.map[name];\\n  if (u !== void 0)\\n    u.setValue(gl, value, textures);\\n};\\nWebGLUniforms.prototype.setOptional = function(gl, object, name) {\\n  const v = object[name];\\n  if (v !== void 0)\\n    this.setValue(gl, name, v);\\n};\\nWebGLUniforms.upload = function(gl, seq, values, textures) {\\n  for (let i = 0, n = seq.length; i !== n; ++i) {\\n    const u = seq[i], v = values[u.id];\\n    if (v.needsUpdate !== false) {\\n      u.setValue(gl, v.value, textures);\\n    }\\n  }\\n};\\nWebGLUniforms.seqWithValue = function(seq, values) {\\n  const r = [];\\n  for (let i = 0, n = seq.length; i !== n; ++i) {\\n    const u = seq[i];\\n    if (u.id in values)\\n      r.push(u);\\n  }\\n  return r;\\n};\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLShader.js\\nfunction WebGLShader(gl, type, string) {\\n  const shader = gl.createShader(type);\\n  gl.shaderSource(shader, string);\\n  gl.compileShader(shader);\\n  return shader;\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLProgram.js\\nvar programIdCount = 0;\\nfunction addLineNumbers(string) {\\n  const lines = string.split(\\\\\\\"\\\\n\\\\\\\");\\n  for (let i = 0; i < lines.length; i++) {\\n    lines[i] = i + 1 + \\\\\\\": \\\\\\\" + lines[i];\\n  }\\n  return lines.join(\\\\\\\"\\\\n\\\\\\\");\\n}\\nfunction getEncodingComponents(encoding) {\\n  switch (encoding) {\\n    case LinearEncoding:\\n      return [\\\\\\\"Linear\\\\\\\", \\\\\\\"( value )\\\\\\\"];\\n    case sRGBEncoding:\\n      return [\\\\\\\"sRGB\\\\\\\", \\\\\\\"( value )\\\\\\\"];\\n    case RGBEEncoding:\\n      return [\\\\\\\"RGBE\\\\\\\", \\\\\\\"( value )\\\\\\\"];\\n    case RGBM7Encoding:\\n      return [\\\\\\\"RGBM\\\\\\\", \\\\\\\"( value, 7.0 )\\\\\\\"];\\n    case RGBM16Encoding:\\n      return [\\\\\\\"RGBM\\\\\\\", \\\\\\\"( value, 16.0 )\\\\\\\"];\\n    case RGBDEncoding:\\n      return [\\\\\\\"RGBD\\\\\\\", \\\\\\\"( value, 256.0 )\\\\\\\"];\\n    case GammaEncoding:\\n      return [\\\\\\\"Gamma\\\\\\\", \\\\\\\"( value, float( GAMMA_FACTOR ) )\\\\\\\"];\\n    case LogLuvEncoding:\\n      return [\\\\\\\"LogLuv\\\\\\\", \\\\\\\"( value )\\\\\\\"];\\n    default:\\n      console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported encoding:\\\\\\\", encoding);\\n      return [\\\\\\\"Linear\\\\\\\", \\\\\\\"( value )\\\\\\\"];\\n  }\\n}\\nfunction getShaderErrors(gl, shader, type) {\\n  const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\\n  const errors = gl.getShaderInfoLog(shader).trim();\\n  if (status && errors === \\\\\\\"\\\\\\\")\\n    return \\\\\\\"\\\\\\\";\\n  return type.toUpperCase() + \\\\\\\"\\\\n\\\\n\\\\\\\" + errors + \\\\\\\"\\\\n\\\\n\\\\\\\" + addLineNumbers(gl.getShaderSource(shader));\\n}\\nfunction getTexelDecodingFunction(functionName, encoding) {\\n  const components = getEncodingComponents(encoding);\\n  return \\\\\\\"vec4 \\\\\\\" + functionName + \\\\\\\"( vec4 value ) { return \\\\\\\" + components[0] + \\\\\\\"ToLinear\\\\\\\" + components[1] + \\\\\\\"; }\\\\\\\";\\n}\\nfunction getTexelEncodingFunction(functionName, encoding) {\\n  const components = getEncodingComponents(encoding);\\n  return \\\\\\\"vec4 \\\\\\\" + functionName + \\\\\\\"( vec4 value ) { return LinearTo\\\\\\\" + components[0] + components[1] + \\\\\\\"; }\\\\\\\";\\n}\\nfunction getToneMappingFunction(functionName, toneMapping) {\\n  let toneMappingName;\\n  switch (toneMapping) {\\n    case LinearToneMapping:\\n      toneMappingName = \\\\\\\"Linear\\\\\\\";\\n      break;\\n    case ReinhardToneMapping:\\n      toneMappingName = \\\\\\\"Reinhard\\\\\\\";\\n      break;\\n    case CineonToneMapping:\\n      toneMappingName = \\\\\\\"OptimizedCineon\\\\\\\";\\n      break;\\n    case ACESFilmicToneMapping:\\n      toneMappingName = \\\\\\\"ACESFilmic\\\\\\\";\\n      break;\\n    case CustomToneMapping:\\n      toneMappingName = \\\\\\\"Custom\\\\\\\";\\n      break;\\n    default:\\n      console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported toneMapping:\\\\\\\", toneMapping);\\n      toneMappingName = \\\\\\\"Linear\\\\\\\";\\n  }\\n  return \\\\\\\"vec3 \\\\\\\" + functionName + \\\\\\\"( vec3 color ) { return \\\\\\\" + toneMappingName + \\\\\\\"ToneMapping( color ); }\\\\\\\";\\n}\\nfunction generateExtensions(parameters) {\\n  const chunks = [\\n    parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === \\\\\\\"physical\\\\\\\" ? \\\\\\\"#extension GL_OES_standard_derivatives : enable\\\\\\\" : \\\\\\\"\\\\\\\",\\n    (parameters.extensionFragDepth || parameters.logarithmicDepthBuffer) && parameters.rendererExtensionFragDepth ? \\\\\\\"#extension GL_EXT_frag_depth : enable\\\\\\\" : \\\\\\\"\\\\\\\",\\n    parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ? \\\\\\\"#extension GL_EXT_draw_buffers : require\\\\\\\" : \\\\\\\"\\\\\\\",\\n    (parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission) && parameters.rendererExtensionShaderTextureLod ? \\\\\\\"#extension GL_EXT_shader_texture_lod : enable\\\\\\\" : \\\\\\\"\\\\\\\"\\n  ];\\n  return chunks.filter(filterEmptyLine).join(\\\\\\\"\\\\n\\\\\\\");\\n}\\nfunction generateDefines(defines) {\\n  const chunks = [];\\n  for (const name in defines) {\\n    const value = defines[name];\\n    if (value === false)\\n      continue;\\n    chunks.push(\\\\\\\"#define \\\\\\\" + name + \\\\\\\" \\\\\\\" + value);\\n  }\\n  return chunks.join(\\\\\\\"\\\\n\\\\\\\");\\n}\\nfunction fetchAttributeLocations(gl, program) {\\n  const attributes = {};\\n  const n = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\\n  for (let i = 0; i < n; i++) {\\n    const info = gl.getActiveAttrib(program, i);\\n    const name = info.name;\\n    let locationSize = 1;\\n    if (info.type === gl.FLOAT_MAT2)\\n      locationSize = 2;\\n    if (info.type === gl.FLOAT_MAT3)\\n      locationSize = 3;\\n    if (info.type === gl.FLOAT_MAT4)\\n      locationSize = 4;\\n    attributes[name] = {\\n      type: info.type,\\n      location: gl.getAttribLocation(program, name),\\n      locationSize\\n    };\\n  }\\n  return attributes;\\n}\\nfunction filterEmptyLine(string) {\\n  return string !== \\\\\\\"\\\\\\\";\\n}\\nfunction replaceLightNums(string, parameters) {\\n  return string.replace(/NUM_DIR_LIGHTS/g, parameters.numDirLights).replace(/NUM_SPOT_LIGHTS/g, parameters.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, parameters.numPointLights).replace(/NUM_HEMI_LIGHTS/g, parameters.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows);\\n}\\nfunction replaceClippingPlaneNums(string, parameters) {\\n  return string.replace(/NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, parameters.numClippingPlanes - parameters.numClipIntersection);\\n}\\nvar includePattern = /^[ \\\\t]*#include +<([\\\\w\\\\d./]+)>/gm;\\nfunction resolveIncludes(string) {\\n  return string.replace(includePattern, includeReplacer);\\n}\\nfunction includeReplacer(match, include) {\\n  const string = ShaderChunk[include];\\n  if (string === void 0) {\\n    throw new Error(\\\\\\\"Can not resolve #include <\\\\\\\" + include + \\\\\\\">\\\\\\\");\\n  }\\n  return resolveIncludes(string);\\n}\\nvar deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\\\s]+?for \\\\( int i \\\\= (\\\\d+)\\\\; i < (\\\\d+)\\\\; i \\\\+\\\\+ \\\\) \\\\{([\\\\s\\\\S]+?)(?=\\\\})\\\\}/g;\\nvar unrollLoopPattern = /#pragma unroll_loop_start\\\\s+for\\\\s*\\\\(\\\\s*int\\\\s+i\\\\s*=\\\\s*(\\\\d+)\\\\s*;\\\\s*i\\\\s*<\\\\s*(\\\\d+)\\\\s*;\\\\s*i\\\\s*\\\\+\\\\+\\\\s*\\\\)\\\\s*{([\\\\s\\\\S]+?)}\\\\s+#pragma unroll_loop_end/g;\\nfunction unrollLoops(string) {\\n  return string.replace(unrollLoopPattern, loopReplacer).replace(deprecatedUnrollLoopPattern, deprecatedLoopReplacer);\\n}\\nfunction deprecatedLoopReplacer(match, start, end, snippet) {\\n  console.warn(\\\\\\\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\\\\\\\");\\n  return loopReplacer(match, start, end, snippet);\\n}\\nfunction loopReplacer(match, start, end, snippet) {\\n  let string = \\\\\\\"\\\\\\\";\\n  for (let i = parseInt(start); i < parseInt(end); i++) {\\n    string += snippet.replace(/\\\\[\\\\s*i\\\\s*\\\\]/g, \\\\\\\"[ \\\\\\\" + i + \\\\\\\" ]\\\\\\\").replace(/UNROLLED_LOOP_INDEX/g, i);\\n  }\\n  return string;\\n}\\nfunction generatePrecision(parameters) {\\n  let precisionstring = \\\\\\\"precision \\\\\\\" + parameters.precision + \\\\\\\" float;\\\\nprecision \\\\\\\" + parameters.precision + \\\\\\\" int;\\\\\\\";\\n  if (parameters.precision === \\\\\\\"highp\\\\\\\") {\\n    precisionstring += \\\\\\\"\\\\n#define HIGH_PRECISION\\\\\\\";\\n  } else if (parameters.precision === \\\\\\\"mediump\\\\\\\") {\\n    precisionstring += \\\\\\\"\\\\n#define MEDIUM_PRECISION\\\\\\\";\\n  } else if (parameters.precision === \\\\\\\"lowp\\\\\\\") {\\n    precisionstring += \\\\\\\"\\\\n#define LOW_PRECISION\\\\\\\";\\n  }\\n  return precisionstring;\\n}\\nfunction generateShadowMapTypeDefine(parameters) {\\n  let shadowMapTypeDefine = \\\\\\\"SHADOWMAP_TYPE_BASIC\\\\\\\";\\n  if (parameters.shadowMapType === PCFShadowMap) {\\n    shadowMapTypeDefine = \\\\\\\"SHADOWMAP_TYPE_PCF\\\\\\\";\\n  } else if (parameters.shadowMapType === PCFSoftShadowMap) {\\n    shadowMapTypeDefine = \\\\\\\"SHADOWMAP_TYPE_PCF_SOFT\\\\\\\";\\n  } else if (parameters.shadowMapType === VSMShadowMap) {\\n    shadowMapTypeDefine = \\\\\\\"SHADOWMAP_TYPE_VSM\\\\\\\";\\n  }\\n  return shadowMapTypeDefine;\\n}\\nfunction generateEnvMapTypeDefine(parameters) {\\n  let envMapTypeDefine = \\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";\\n  if (parameters.envMap) {\\n    switch (parameters.envMapMode) {\\n      case CubeReflectionMapping:\\n      case CubeRefractionMapping:\\n        envMapTypeDefine = \\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";\\n        break;\\n      case CubeUVReflectionMapping:\\n      case CubeUVRefractionMapping:\\n        envMapTypeDefine = \\\\\\\"ENVMAP_TYPE_CUBE_UV\\\\\\\";\\n        break;\\n    }\\n  }\\n  return envMapTypeDefine;\\n}\\nfunction generateEnvMapModeDefine(parameters) {\\n  let envMapModeDefine = \\\\\\\"ENVMAP_MODE_REFLECTION\\\\\\\";\\n  if (parameters.envMap) {\\n    switch (parameters.envMapMode) {\\n      case CubeRefractionMapping:\\n      case CubeUVRefractionMapping:\\n        envMapModeDefine = \\\\\\\"ENVMAP_MODE_REFRACTION\\\\\\\";\\n        break;\\n    }\\n  }\\n  return envMapModeDefine;\\n}\\nfunction generateEnvMapBlendingDefine(parameters) {\\n  let envMapBlendingDefine = \\\\\\\"ENVMAP_BLENDING_NONE\\\\\\\";\\n  if (parameters.envMap) {\\n    switch (parameters.combine) {\\n      case MultiplyOperation:\\n        envMapBlendingDefine = \\\\\\\"ENVMAP_BLENDING_MULTIPLY\\\\\\\";\\n        break;\\n      case MixOperation:\\n        envMapBlendingDefine = \\\\\\\"ENVMAP_BLENDING_MIX\\\\\\\";\\n        break;\\n      case AddOperation:\\n        envMapBlendingDefine = \\\\\\\"ENVMAP_BLENDING_ADD\\\\\\\";\\n        break;\\n    }\\n  }\\n  return envMapBlendingDefine;\\n}\\nfunction WebGLProgram(renderer, cacheKey, parameters, bindingStates) {\\n  const gl = renderer.getContext();\\n  const defines = parameters.defines;\\n  let vertexShader = parameters.vertexShader;\\n  let fragmentShader = parameters.fragmentShader;\\n  const shadowMapTypeDefine = generateShadowMapTypeDefine(parameters);\\n  const envMapTypeDefine = generateEnvMapTypeDefine(parameters);\\n  const envMapModeDefine = generateEnvMapModeDefine(parameters);\\n  const envMapBlendingDefine = generateEnvMapBlendingDefine(parameters);\\n  const gammaFactorDefine = renderer.gammaFactor > 0 ? renderer.gammaFactor : 1;\\n  const customExtensions = parameters.isWebGL2 ? \\\\\\\"\\\\\\\" : generateExtensions(parameters);\\n  const customDefines = generateDefines(defines);\\n  const program = gl.createProgram();\\n  let prefixVertex, prefixFragment;\\n  let versionString = parameters.glslVersion ? \\\\\\\"#version \\\\\\\" + parameters.glslVersion + \\\\\\\"\\\\n\\\\\\\" : \\\\\\\"\\\\\\\";\\n  if (parameters.isRawShaderMaterial) {\\n    prefixVertex = [\\n      customDefines\\n    ].filter(filterEmptyLine).join(\\\\\\\"\\\\n\\\\\\\");\\n    if (prefixVertex.length > 0) {\\n      prefixVertex += \\\\\\\"\\\\n\\\\\\\";\\n    }\\n    prefixFragment = [\\n      customExtensions,\\n      customDefines\\n    ].filter(filterEmptyLine).join(\\\\\\\"\\\\n\\\\\\\");\\n    if (prefixFragment.length > 0) {\\n      prefixFragment += \\\\\\\"\\\\n\\\\\\\";\\n    }\\n  } else {\\n    prefixVertex = [\\n      generatePrecision(parameters),\\n      \\\\\\\"#define SHADER_NAME \\\\\\\" + parameters.shaderName,\\n      customDefines,\\n      parameters.instancing ? \\\\\\\"#define USE_INSTANCING\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.instancingColor ? \\\\\\\"#define USE_INSTANCING_COLOR\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.supportsVertexTextures ? \\\\\\\"#define VERTEX_TEXTURES\\\\\\\" : \\\\\\\"\\\\\\\",\\n      \\\\\\\"#define GAMMA_FACTOR \\\\\\\" + gammaFactorDefine,\\n      \\\\\\\"#define MAX_BONES \\\\\\\" + parameters.maxBones,\\n      parameters.useFog && parameters.fog ? \\\\\\\"#define USE_FOG\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.useFog && parameters.fogExp2 ? \\\\\\\"#define FOG_EXP2\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.map ? \\\\\\\"#define USE_MAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.envMap ? \\\\\\\"#define USE_ENVMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.envMap ? \\\\\\\"#define \\\\\\\" + envMapModeDefine : \\\\\\\"\\\\\\\",\\n      parameters.lightMap ? \\\\\\\"#define USE_LIGHTMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.aoMap ? \\\\\\\"#define USE_AOMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.emissiveMap ? \\\\\\\"#define USE_EMISSIVEMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.bumpMap ? \\\\\\\"#define USE_BUMPMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.normalMap ? \\\\\\\"#define USE_NORMALMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.normalMap && parameters.objectSpaceNormalMap ? \\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.normalMap && parameters.tangentSpaceNormalMap ? \\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.clearcoatMap ? \\\\\\\"#define USE_CLEARCOATMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.clearcoatRoughnessMap ? \\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.clearcoatNormalMap ? \\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.displacementMap && parameters.supportsVertexTextures ? \\\\\\\"#define USE_DISPLACEMENTMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.specularMap ? \\\\\\\"#define USE_SPECULARMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.specularIntensityMap ? \\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.specularTintMap ? \\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.roughnessMap ? \\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.metalnessMap ? \\\\\\\"#define USE_METALNESSMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.alphaMap ? \\\\\\\"#define USE_ALPHAMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.transmission ? \\\\\\\"#define USE_TRANSMISSION\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.transmissionMap ? \\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.thicknessMap ? \\\\\\\"#define USE_THICKNESSMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.vertexTangents ? \\\\\\\"#define USE_TANGENT\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.vertexColors ? \\\\\\\"#define USE_COLOR\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.vertexAlphas ? \\\\\\\"#define USE_COLOR_ALPHA\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.vertexUvs ? \\\\\\\"#define USE_UV\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.uvsVertexOnly ? \\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.flatShading ? \\\\\\\"#define FLAT_SHADED\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.skinning ? \\\\\\\"#define USE_SKINNING\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.useVertexTexture ? \\\\\\\"#define BONE_TEXTURE\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.morphTargets ? \\\\\\\"#define USE_MORPHTARGETS\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.morphNormals && parameters.flatShading === false ? \\\\\\\"#define USE_MORPHNORMALS\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.morphTargets && parameters.isWebGL2 ? \\\\\\\"#define MORPHTARGETS_TEXTURE\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.morphTargets && parameters.isWebGL2 ? \\\\\\\"#define MORPHTARGETS_COUNT \\\\\\\" + parameters.morphTargetsCount : \\\\\\\"\\\\\\\",\\n      parameters.doubleSided ? \\\\\\\"#define DOUBLE_SIDED\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.flipSided ? \\\\\\\"#define FLIP_SIDED\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.shadowMapEnabled ? \\\\\\\"#define USE_SHADOWMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.shadowMapEnabled ? \\\\\\\"#define \\\\\\\" + shadowMapTypeDefine : \\\\\\\"\\\\\\\",\\n      parameters.sizeAttenuation ? \\\\\\\"#define USE_SIZEATTENUATION\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.logarithmicDepthBuffer ? \\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ? \\\\\\\"#define USE_LOGDEPTHBUF_EXT\\\\\\\" : \\\\\\\"\\\\\\\",\\n      \\\\\\\"uniform mat4 modelMatrix;\\\\\\\",\\n      \\\\\\\"uniform mat4 modelViewMatrix;\\\\\\\",\\n      \\\\\\\"uniform mat4 projectionMatrix;\\\\\\\",\\n      \\\\\\\"uniform mat4 viewMatrix;\\\\\\\",\\n      \\\\\\\"uniform mat3 normalMatrix;\\\\\\\",\\n      \\\\\\\"uniform vec3 cameraPosition;\\\\\\\",\\n      \\\\\\\"uniform bool isOrthographic;\\\\\\\",\\n      \\\\\\\"#ifdef USE_INSTANCING\\\\\\\",\\n      \\\\\\\"\\tattribute mat4 instanceMatrix;\\\\\\\",\\n      \\\\\\\"#endif\\\\\\\",\\n      \\\\\\\"#ifdef USE_INSTANCING_COLOR\\\\\\\",\\n      \\\\\\\"\\tattribute vec3 instanceColor;\\\\\\\",\\n      \\\\\\\"#endif\\\\\\\",\\n      \\\\\\\"attribute vec3 position;\\\\\\\",\\n      \\\\\\\"attribute vec3 normal;\\\\\\\",\\n      \\\\\\\"attribute vec2 uv;\\\\\\\",\\n      \\\\\\\"#ifdef USE_TANGENT\\\\\\\",\\n      \\\\\\\"\\tattribute vec4 tangent;\\\\\\\",\\n      \\\\\\\"#endif\\\\\\\",\\n      \\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\\\\",\\n      \\\\\\\"\\tattribute vec4 color;\\\\\\\",\\n      \\\\\\\"#elif defined( USE_COLOR )\\\\\\\",\\n      \\\\\\\"\\tattribute vec3 color;\\\\\\\",\\n      \\\\\\\"#endif\\\\\\\",\\n      \\\\\\\"#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )\\\\\\\",\\n      \\\\\\\"\\tattribute vec3 morphTarget0;\\\\\\\",\\n      \\\\\\\"\\tattribute vec3 morphTarget1;\\\\\\\",\\n      \\\\\\\"\\tattribute vec3 morphTarget2;\\\\\\\",\\n      \\\\\\\"\\tattribute vec3 morphTarget3;\\\\\\\",\\n      \\\\\\\"\\t#ifdef USE_MORPHNORMALS\\\\\\\",\\n      \\\\\\\"\\t\\tattribute vec3 morphNormal0;\\\\\\\",\\n      \\\\\\\"\\t\\tattribute vec3 morphNormal1;\\\\\\\",\\n      \\\\\\\"\\t\\tattribute vec3 morphNormal2;\\\\\\\",\\n      \\\\\\\"\\t\\tattribute vec3 morphNormal3;\\\\\\\",\\n      \\\\\\\"\\t#else\\\\\\\",\\n      \\\\\\\"\\t\\tattribute vec3 morphTarget4;\\\\\\\",\\n      \\\\\\\"\\t\\tattribute vec3 morphTarget5;\\\\\\\",\\n      \\\\\\\"\\t\\tattribute vec3 morphTarget6;\\\\\\\",\\n      \\\\\\\"\\t\\tattribute vec3 morphTarget7;\\\\\\\",\\n      \\\\\\\"\\t#endif\\\\\\\",\\n      \\\\\\\"#endif\\\\\\\",\\n      \\\\\\\"#ifdef USE_SKINNING\\\\\\\",\\n      \\\\\\\"\\tattribute vec4 skinIndex;\\\\\\\",\\n      \\\\\\\"\\tattribute vec4 skinWeight;\\\\\\\",\\n      \\\\\\\"#endif\\\\\\\",\\n      \\\\\\\"\\\\n\\\\\\\"\\n    ].filter(filterEmptyLine).join(\\\\\\\"\\\\n\\\\\\\");\\n    prefixFragment = [\\n      customExtensions,\\n      generatePrecision(parameters),\\n      \\\\\\\"#define SHADER_NAME \\\\\\\" + parameters.shaderName,\\n      customDefines,\\n      \\\\\\\"#define GAMMA_FACTOR \\\\\\\" + gammaFactorDefine,\\n      parameters.useFog && parameters.fog ? \\\\\\\"#define USE_FOG\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.useFog && parameters.fogExp2 ? \\\\\\\"#define FOG_EXP2\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.map ? \\\\\\\"#define USE_MAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.matcap ? \\\\\\\"#define USE_MATCAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.envMap ? \\\\\\\"#define USE_ENVMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.envMap ? \\\\\\\"#define \\\\\\\" + envMapTypeDefine : \\\\\\\"\\\\\\\",\\n      parameters.envMap ? \\\\\\\"#define \\\\\\\" + envMapModeDefine : \\\\\\\"\\\\\\\",\\n      parameters.envMap ? \\\\\\\"#define \\\\\\\" + envMapBlendingDefine : \\\\\\\"\\\\\\\",\\n      parameters.lightMap ? \\\\\\\"#define USE_LIGHTMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.aoMap ? \\\\\\\"#define USE_AOMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.emissiveMap ? \\\\\\\"#define USE_EMISSIVEMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.bumpMap ? \\\\\\\"#define USE_BUMPMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.normalMap ? \\\\\\\"#define USE_NORMALMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.normalMap && parameters.objectSpaceNormalMap ? \\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.normalMap && parameters.tangentSpaceNormalMap ? \\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.clearcoat ? \\\\\\\"#define USE_CLEARCOAT\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.clearcoatMap ? \\\\\\\"#define USE_CLEARCOATMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.clearcoatRoughnessMap ? \\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.clearcoatNormalMap ? \\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.specularMap ? \\\\\\\"#define USE_SPECULARMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.specularIntensityMap ? \\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.specularTintMap ? \\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.roughnessMap ? \\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.metalnessMap ? \\\\\\\"#define USE_METALNESSMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.alphaMap ? \\\\\\\"#define USE_ALPHAMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.alphaTest ? \\\\\\\"#define USE_ALPHATEST\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.sheen ? \\\\\\\"#define USE_SHEEN\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.transmission ? \\\\\\\"#define USE_TRANSMISSION\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.transmissionMap ? \\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.thicknessMap ? \\\\\\\"#define USE_THICKNESSMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.vertexTangents ? \\\\\\\"#define USE_TANGENT\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.vertexColors || parameters.instancingColor ? \\\\\\\"#define USE_COLOR\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.vertexAlphas ? \\\\\\\"#define USE_COLOR_ALPHA\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.vertexUvs ? \\\\\\\"#define USE_UV\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.uvsVertexOnly ? \\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.gradientMap ? \\\\\\\"#define USE_GRADIENTMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.flatShading ? \\\\\\\"#define FLAT_SHADED\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.doubleSided ? \\\\\\\"#define DOUBLE_SIDED\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.flipSided ? \\\\\\\"#define FLIP_SIDED\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.shadowMapEnabled ? \\\\\\\"#define USE_SHADOWMAP\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.shadowMapEnabled ? \\\\\\\"#define \\\\\\\" + shadowMapTypeDefine : \\\\\\\"\\\\\\\",\\n      parameters.premultipliedAlpha ? \\\\\\\"#define PREMULTIPLIED_ALPHA\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.physicallyCorrectLights ? \\\\\\\"#define PHYSICALLY_CORRECT_LIGHTS\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.logarithmicDepthBuffer ? \\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ? \\\\\\\"#define USE_LOGDEPTHBUF_EXT\\\\\\\" : \\\\\\\"\\\\\\\",\\n      (parameters.extensionShaderTextureLOD || parameters.envMap) && parameters.rendererExtensionShaderTextureLod ? \\\\\\\"#define TEXTURE_LOD_EXT\\\\\\\" : \\\\\\\"\\\\\\\",\\n      \\\\\\\"uniform mat4 viewMatrix;\\\\\\\",\\n      \\\\\\\"uniform vec3 cameraPosition;\\\\\\\",\\n      \\\\\\\"uniform bool isOrthographic;\\\\\\\",\\n      parameters.toneMapping !== NoToneMapping ? \\\\\\\"#define TONE_MAPPING\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.toneMapping !== NoToneMapping ? ShaderChunk[\\\\\\\"tonemapping_pars_fragment\\\\\\\"] : \\\\\\\"\\\\\\\",\\n      parameters.toneMapping !== NoToneMapping ? getToneMappingFunction(\\\\\\\"toneMapping\\\\\\\", parameters.toneMapping) : \\\\\\\"\\\\\\\",\\n      parameters.dithering ? \\\\\\\"#define DITHERING\\\\\\\" : \\\\\\\"\\\\\\\",\\n      parameters.format === RGBFormat ? \\\\\\\"#define OPAQUE\\\\\\\" : \\\\\\\"\\\\\\\",\\n      ShaderChunk[\\\\\\\"encodings_pars_fragment\\\\\\\"],\\n      parameters.map ? getTexelDecodingFunction(\\\\\\\"mapTexelToLinear\\\\\\\", parameters.mapEncoding) : \\\\\\\"\\\\\\\",\\n      parameters.matcap ? getTexelDecodingFunction(\\\\\\\"matcapTexelToLinear\\\\\\\", parameters.matcapEncoding) : \\\\\\\"\\\\\\\",\\n      parameters.envMap ? getTexelDecodingFunction(\\\\\\\"envMapTexelToLinear\\\\\\\", parameters.envMapEncoding) : \\\\\\\"\\\\\\\",\\n      parameters.emissiveMap ? getTexelDecodingFunction(\\\\\\\"emissiveMapTexelToLinear\\\\\\\", parameters.emissiveMapEncoding) : \\\\\\\"\\\\\\\",\\n      parameters.specularTintMap ? getTexelDecodingFunction(\\\\\\\"specularTintMapTexelToLinear\\\\\\\", parameters.specularTintMapEncoding) : \\\\\\\"\\\\\\\",\\n      parameters.lightMap ? getTexelDecodingFunction(\\\\\\\"lightMapTexelToLinear\\\\\\\", parameters.lightMapEncoding) : \\\\\\\"\\\\\\\",\\n      getTexelEncodingFunction(\\\\\\\"linearToOutputTexel\\\\\\\", parameters.outputEncoding),\\n      parameters.depthPacking ? \\\\\\\"#define DEPTH_PACKING \\\\\\\" + parameters.depthPacking : \\\\\\\"\\\\\\\",\\n      \\\\\\\"\\\\n\\\\\\\"\\n    ].filter(filterEmptyLine).join(\\\\\\\"\\\\n\\\\\\\");\\n  }\\n  vertexShader = resolveIncludes(vertexShader);\\n  vertexShader = replaceLightNums(vertexShader, parameters);\\n  vertexShader = replaceClippingPlaneNums(vertexShader, parameters);\\n  fragmentShader = resolveIncludes(fragmentShader);\\n  fragmentShader = replaceLightNums(fragmentShader, parameters);\\n  fragmentShader = replaceClippingPlaneNums(fragmentShader, parameters);\\n  vertexShader = unrollLoops(vertexShader);\\n  fragmentShader = unrollLoops(fragmentShader);\\n  if (parameters.isWebGL2 && parameters.isRawShaderMaterial !== true) {\\n    versionString = \\\\\\\"#version 300 es\\\\n\\\\\\\";\\n    prefixVertex = [\\n      \\\\\\\"precision mediump sampler2DArray;\\\\\\\",\\n      \\\\\\\"#define attribute in\\\\\\\",\\n      \\\\\\\"#define varying out\\\\\\\",\\n      \\\\\\\"#define texture2D texture\\\\\\\"\\n    ].join(\\\\\\\"\\\\n\\\\\\\") + \\\\\\\"\\\\n\\\\\\\" + prefixVertex;\\n    prefixFragment = [\\n      \\\\\\\"#define varying in\\\\\\\",\\n      parameters.glslVersion === GLSL3 ? \\\\\\\"\\\\\\\" : \\\\\\\"out highp vec4 pc_fragColor;\\\\\\\",\\n      parameters.glslVersion === GLSL3 ? \\\\\\\"\\\\\\\" : \\\\\\\"#define gl_FragColor pc_fragColor\\\\\\\",\\n      \\\\\\\"#define gl_FragDepthEXT gl_FragDepth\\\\\\\",\\n      \\\\\\\"#define texture2D texture\\\\\\\",\\n      \\\\\\\"#define textureCube texture\\\\\\\",\\n      \\\\\\\"#define texture2DProj textureProj\\\\\\\",\\n      \\\\\\\"#define texture2DLodEXT textureLod\\\\\\\",\\n      \\\\\\\"#define texture2DProjLodEXT textureProjLod\\\\\\\",\\n      \\\\\\\"#define textureCubeLodEXT textureLod\\\\\\\",\\n      \\\\\\\"#define texture2DGradEXT textureGrad\\\\\\\",\\n      \\\\\\\"#define texture2DProjGradEXT textureProjGrad\\\\\\\",\\n      \\\\\\\"#define textureCubeGradEXT textureGrad\\\\\\\"\\n    ].join(\\\\\\\"\\\\n\\\\\\\") + \\\\\\\"\\\\n\\\\\\\" + prefixFragment;\\n  }\\n  const vertexGlsl = versionString + prefixVertex + vertexShader;\\n  const fragmentGlsl = versionString + prefixFragment + fragmentShader;\\n  const glVertexShader = WebGLShader(gl, gl.VERTEX_SHADER, vertexGlsl);\\n  const glFragmentShader = WebGLShader(gl, gl.FRAGMENT_SHADER, fragmentGlsl);\\n  gl.attachShader(program, glVertexShader);\\n  gl.attachShader(program, glFragmentShader);\\n  if (parameters.index0AttributeName !== void 0) {\\n    gl.bindAttribLocation(program, 0, parameters.index0AttributeName);\\n  } else if (parameters.morphTargets === true) {\\n    gl.bindAttribLocation(program, 0, \\\\\\\"position\\\\\\\");\\n  }\\n  gl.linkProgram(program);\\n  if (renderer.debug.checkShaderErrors) {\\n    const programLog = gl.getProgramInfoLog(program).trim();\\n    const vertexLog = gl.getShaderInfoLog(glVertexShader).trim();\\n    const fragmentLog = gl.getShaderInfoLog(glFragmentShader).trim();\\n    let runnable = true;\\n    let haveDiagnostics = true;\\n    if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) {\\n      runnable = false;\\n      const vertexErrors = getShaderErrors(gl, glVertexShader, \\\\\\\"vertex\\\\\\\");\\n      const fragmentErrors = getShaderErrors(gl, glFragmentShader, \\\\\\\"fragment\\\\\\\");\\n      console.error(\\\\\\\"THREE.WebGLProgram: Shader Error \\\\\\\" + gl.getError() + \\\\\\\" - VALIDATE_STATUS \\\\\\\" + gl.getProgramParameter(program, gl.VALIDATE_STATUS) + \\\\\\\"\\\\n\\\\nProgram Info Log: \\\\\\\" + programLog + \\\\\\\"\\\\n\\\\\\\" + vertexErrors + \\\\\\\"\\\\n\\\\\\\" + fragmentErrors);\\n    } else if (programLog !== \\\\\\\"\\\\\\\") {\\n      console.warn(\\\\\\\"THREE.WebGLProgram: Program Info Log:\\\\\\\", programLog);\\n    } else if (vertexLog === \\\\\\\"\\\\\\\" || fragmentLog === \\\\\\\"\\\\\\\") {\\n      haveDiagnostics = false;\\n    }\\n    if (haveDiagnostics) {\\n      this.diagnostics = {\\n        runnable,\\n        programLog,\\n        vertexShader: {\\n          log: vertexLog,\\n          prefix: prefixVertex\\n        },\\n        fragmentShader: {\\n          log: fragmentLog,\\n          prefix: prefixFragment\\n        }\\n      };\\n    }\\n  }\\n  gl.deleteShader(glVertexShader);\\n  gl.deleteShader(glFragmentShader);\\n  let cachedUniforms;\\n  this.getUniforms = function() {\\n    if (cachedUniforms === void 0) {\\n      cachedUniforms = new WebGLUniforms(gl, program);\\n    }\\n    return cachedUniforms;\\n  };\\n  let cachedAttributes;\\n  this.getAttributes = function() {\\n    if (cachedAttributes === void 0) {\\n      cachedAttributes = fetchAttributeLocations(gl, program);\\n    }\\n    return cachedAttributes;\\n  };\\n  this.destroy = function() {\\n    bindingStates.releaseStatesOfProgram(this);\\n    gl.deleteProgram(program);\\n    this.program = void 0;\\n  };\\n  this.name = parameters.shaderName;\\n  this.id = programIdCount++;\\n  this.cacheKey = cacheKey;\\n  this.usedTimes = 1;\\n  this.program = program;\\n  this.vertexShader = glVertexShader;\\n  this.fragmentShader = glFragmentShader;\\n  return this;\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLPrograms.js\\nfunction WebGLPrograms(renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping) {\\n  const programs = [];\\n  const isWebGL2 = capabilities.isWebGL2;\\n  const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\\n  const floatVertexTextures = capabilities.floatVertexTextures;\\n  const maxVertexUniforms = capabilities.maxVertexUniforms;\\n  const vertexTextures = capabilities.vertexTextures;\\n  let precision = capabilities.precision;\\n  const shaderIDs = {\\n    MeshDepthMaterial: \\\\\\\"depth\\\\\\\",\\n    MeshDistanceMaterial: \\\\\\\"distanceRGBA\\\\\\\",\\n    MeshNormalMaterial: \\\\\\\"normal\\\\\\\",\\n    MeshBasicMaterial: \\\\\\\"basic\\\\\\\",\\n    MeshLambertMaterial: \\\\\\\"lambert\\\\\\\",\\n    MeshPhongMaterial: \\\\\\\"phong\\\\\\\",\\n    MeshToonMaterial: \\\\\\\"toon\\\\\\\",\\n    MeshStandardMaterial: \\\\\\\"physical\\\\\\\",\\n    MeshPhysicalMaterial: \\\\\\\"physical\\\\\\\",\\n    MeshMatcapMaterial: \\\\\\\"matcap\\\\\\\",\\n    LineBasicMaterial: \\\\\\\"basic\\\\\\\",\\n    LineDashedMaterial: \\\\\\\"dashed\\\\\\\",\\n    PointsMaterial: \\\\\\\"points\\\\\\\",\\n    ShadowMaterial: \\\\\\\"shadow\\\\\\\",\\n    SpriteMaterial: \\\\\\\"sprite\\\\\\\"\\n  };\\n  const parameterNames = [\\n    \\\\\\\"precision\\\\\\\",\\n    \\\\\\\"isWebGL2\\\\\\\",\\n    \\\\\\\"supportsVertexTextures\\\\\\\",\\n    \\\\\\\"outputEncoding\\\\\\\",\\n    \\\\\\\"instancing\\\\\\\",\\n    \\\\\\\"instancingColor\\\\\\\",\\n    \\\\\\\"map\\\\\\\",\\n    \\\\\\\"mapEncoding\\\\\\\",\\n    \\\\\\\"matcap\\\\\\\",\\n    \\\\\\\"matcapEncoding\\\\\\\",\\n    \\\\\\\"envMap\\\\\\\",\\n    \\\\\\\"envMapMode\\\\\\\",\\n    \\\\\\\"envMapEncoding\\\\\\\",\\n    \\\\\\\"envMapCubeUV\\\\\\\",\\n    \\\\\\\"lightMap\\\\\\\",\\n    \\\\\\\"lightMapEncoding\\\\\\\",\\n    \\\\\\\"aoMap\\\\\\\",\\n    \\\\\\\"emissiveMap\\\\\\\",\\n    \\\\\\\"emissiveMapEncoding\\\\\\\",\\n    \\\\\\\"bumpMap\\\\\\\",\\n    \\\\\\\"normalMap\\\\\\\",\\n    \\\\\\\"objectSpaceNormalMap\\\\\\\",\\n    \\\\\\\"tangentSpaceNormalMap\\\\\\\",\\n    \\\\\\\"clearcoat\\\\\\\",\\n    \\\\\\\"clearcoatMap\\\\\\\",\\n    \\\\\\\"clearcoatRoughnessMap\\\\\\\",\\n    \\\\\\\"clearcoatNormalMap\\\\\\\",\\n    \\\\\\\"displacementMap\\\\\\\",\\n    \\\\\\\"specularMap\\\\\\\",\\n    \\\\\\\"specularIntensityMap\\\\\\\",\\n    \\\\\\\"specularTintMap\\\\\\\",\\n    \\\\\\\"specularTintMapEncoding\\\\\\\",\\n    \\\\\\\"roughnessMap\\\\\\\",\\n    \\\\\\\"metalnessMap\\\\\\\",\\n    \\\\\\\"gradientMap\\\\\\\",\\n    \\\\\\\"alphaMap\\\\\\\",\\n    \\\\\\\"alphaTest\\\\\\\",\\n    \\\\\\\"combine\\\\\\\",\\n    \\\\\\\"vertexColors\\\\\\\",\\n    \\\\\\\"vertexAlphas\\\\\\\",\\n    \\\\\\\"vertexTangents\\\\\\\",\\n    \\\\\\\"vertexUvs\\\\\\\",\\n    \\\\\\\"uvsVertexOnly\\\\\\\",\\n    \\\\\\\"fog\\\\\\\",\\n    \\\\\\\"useFog\\\\\\\",\\n    \\\\\\\"fogExp2\\\\\\\",\\n    \\\\\\\"flatShading\\\\\\\",\\n    \\\\\\\"sizeAttenuation\\\\\\\",\\n    \\\\\\\"logarithmicDepthBuffer\\\\\\\",\\n    \\\\\\\"skinning\\\\\\\",\\n    \\\\\\\"maxBones\\\\\\\",\\n    \\\\\\\"useVertexTexture\\\\\\\",\\n    \\\\\\\"morphTargets\\\\\\\",\\n    \\\\\\\"morphNormals\\\\\\\",\\n    \\\\\\\"morphTargetsCount\\\\\\\",\\n    \\\\\\\"premultipliedAlpha\\\\\\\",\\n    \\\\\\\"numDirLights\\\\\\\",\\n    \\\\\\\"numPointLights\\\\\\\",\\n    \\\\\\\"numSpotLights\\\\\\\",\\n    \\\\\\\"numHemiLights\\\\\\\",\\n    \\\\\\\"numRectAreaLights\\\\\\\",\\n    \\\\\\\"numDirLightShadows\\\\\\\",\\n    \\\\\\\"numPointLightShadows\\\\\\\",\\n    \\\\\\\"numSpotLightShadows\\\\\\\",\\n    \\\\\\\"shadowMapEnabled\\\\\\\",\\n    \\\\\\\"shadowMapType\\\\\\\",\\n    \\\\\\\"toneMapping\\\\\\\",\\n    \\\\\\\"physicallyCorrectLights\\\\\\\",\\n    \\\\\\\"doubleSided\\\\\\\",\\n    \\\\\\\"flipSided\\\\\\\",\\n    \\\\\\\"numClippingPlanes\\\\\\\",\\n    \\\\\\\"numClipIntersection\\\\\\\",\\n    \\\\\\\"depthPacking\\\\\\\",\\n    \\\\\\\"dithering\\\\\\\",\\n    \\\\\\\"format\\\\\\\",\\n    \\\\\\\"sheen\\\\\\\",\\n    \\\\\\\"transmission\\\\\\\",\\n    \\\\\\\"transmissionMap\\\\\\\",\\n    \\\\\\\"thicknessMap\\\\\\\"\\n  ];\\n  function getMaxBones(object) {\\n    const skeleton = object.skeleton;\\n    const bones = skeleton.bones;\\n    if (floatVertexTextures) {\\n      return 1024;\\n    } else {\\n      const nVertexUniforms = maxVertexUniforms;\\n      const nVertexMatrices = Math.floor((nVertexUniforms - 20) / 4);\\n      const maxBones = Math.min(nVertexMatrices, bones.length);\\n      if (maxBones < bones.length) {\\n        console.warn(\\\\\\\"THREE.WebGLRenderer: Skeleton has \\\\\\\" + bones.length + \\\\\\\" bones. This GPU supports \\\\\\\" + maxBones + \\\\\\\".\\\\\\\");\\n        return 0;\\n      }\\n      return maxBones;\\n    }\\n  }\\n  function getTextureEncodingFromMap(map) {\\n    let encoding;\\n    if (map && map.isTexture) {\\n      encoding = map.encoding;\\n    } else if (map && map.isWebGLRenderTarget) {\\n      console.warn(\\\\\\\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\\\\\\\");\\n      encoding = map.texture.encoding;\\n    } else {\\n      encoding = LinearEncoding;\\n    }\\n    if (isWebGL2 && map && map.isTexture && map.format === RGBAFormat && map.type === UnsignedByteType && map.encoding === sRGBEncoding) {\\n      encoding = LinearEncoding;\\n    }\\n    return encoding;\\n  }\\n  function getParameters(material, lights, shadows, scene, object) {\\n    const fog = scene.fog;\\n    const environment = material.isMeshStandardMaterial ? scene.environment : null;\\n    const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment);\\n    const shaderID = shaderIDs[material.type];\\n    const maxBones = object.isSkinnedMesh ? getMaxBones(object) : 0;\\n    if (material.precision !== null) {\\n      precision = capabilities.getMaxPrecision(material.precision);\\n      if (precision !== material.precision) {\\n        console.warn(\\\\\\\"THREE.WebGLProgram.getParameters:\\\\\\\", material.precision, \\\\\\\"not supported, using\\\\\\\", precision, \\\\\\\"instead.\\\\\\\");\\n      }\\n    }\\n    let vertexShader, fragmentShader;\\n    if (shaderID) {\\n      const shader = ShaderLib[shaderID];\\n      vertexShader = shader.vertexShader;\\n      fragmentShader = shader.fragmentShader;\\n    } else {\\n      vertexShader = material.vertexShader;\\n      fragmentShader = material.fragmentShader;\\n    }\\n    const currentRenderTarget = renderer.getRenderTarget();\\n    const useAlphaTest = material.alphaTest > 0;\\n    const useClearcoat = material.clearcoat > 0;\\n    const parameters = {\\n      isWebGL2,\\n      shaderID,\\n      shaderName: material.type,\\n      vertexShader,\\n      fragmentShader,\\n      defines: material.defines,\\n      isRawShaderMaterial: material.isRawShaderMaterial === true,\\n      glslVersion: material.glslVersion,\\n      precision,\\n      instancing: object.isInstancedMesh === true,\\n      instancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\\n      supportsVertexTextures: vertexTextures,\\n      outputEncoding: currentRenderTarget !== null ? getTextureEncodingFromMap(currentRenderTarget.texture) : renderer.outputEncoding,\\n      map: !!material.map,\\n      mapEncoding: getTextureEncodingFromMap(material.map),\\n      matcap: !!material.matcap,\\n      matcapEncoding: getTextureEncodingFromMap(material.matcap),\\n      envMap: !!envMap,\\n      envMapMode: envMap && envMap.mapping,\\n      envMapEncoding: getTextureEncodingFromMap(envMap),\\n      envMapCubeUV: !!envMap && (envMap.mapping === CubeUVReflectionMapping || envMap.mapping === CubeUVRefractionMapping),\\n      lightMap: !!material.lightMap,\\n      lightMapEncoding: getTextureEncodingFromMap(material.lightMap),\\n      aoMap: !!material.aoMap,\\n      emissiveMap: !!material.emissiveMap,\\n      emissiveMapEncoding: getTextureEncodingFromMap(material.emissiveMap),\\n      bumpMap: !!material.bumpMap,\\n      normalMap: !!material.normalMap,\\n      objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\\n      tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\\n      clearcoat: useClearcoat,\\n      clearcoatMap: useClearcoat && !!material.clearcoatMap,\\n      clearcoatRoughnessMap: useClearcoat && !!material.clearcoatRoughnessMap,\\n      clearcoatNormalMap: useClearcoat && !!material.clearcoatNormalMap,\\n      displacementMap: !!material.displacementMap,\\n      roughnessMap: !!material.roughnessMap,\\n      metalnessMap: !!material.metalnessMap,\\n      specularMap: !!material.specularMap,\\n      specularIntensityMap: !!material.specularIntensityMap,\\n      specularTintMap: !!material.specularTintMap,\\n      specularTintMapEncoding: getTextureEncodingFromMap(material.specularTintMap),\\n      alphaMap: !!material.alphaMap,\\n      alphaTest: useAlphaTest,\\n      gradientMap: !!material.gradientMap,\\n      sheen: material.sheen > 0,\\n      transmission: material.transmission > 0,\\n      transmissionMap: !!material.transmissionMap,\\n      thicknessMap: !!material.thicknessMap,\\n      combine: material.combine,\\n      vertexTangents: !!material.normalMap && !!object.geometry && !!object.geometry.attributes.tangent,\\n      vertexColors: material.vertexColors,\\n      vertexAlphas: material.vertexColors === true && !!object.geometry && !!object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,\\n      vertexUvs: !!material.map || !!material.bumpMap || !!material.normalMap || !!material.specularMap || !!material.alphaMap || !!material.emissiveMap || !!material.roughnessMap || !!material.metalnessMap || !!material.clearcoatMap || !!material.clearcoatRoughnessMap || !!material.clearcoatNormalMap || !!material.displacementMap || !!material.transmissionMap || !!material.thicknessMap || !!material.specularIntensityMap || !!material.specularTintMap,\\n      uvsVertexOnly: !(!!material.map || !!material.bumpMap || !!material.normalMap || !!material.specularMap || !!material.alphaMap || !!material.emissiveMap || !!material.roughnessMap || !!material.metalnessMap || !!material.clearcoatNormalMap || material.transmission > 0 || !!material.transmissionMap || !!material.thicknessMap || !!material.specularIntensityMap || !!material.specularTintMap) && !!material.displacementMap,\\n      fog: !!fog,\\n      useFog: material.fog,\\n      fogExp2: fog && fog.isFogExp2,\\n      flatShading: !!material.flatShading,\\n      sizeAttenuation: material.sizeAttenuation,\\n      logarithmicDepthBuffer,\\n      skinning: object.isSkinnedMesh === true && maxBones > 0,\\n      maxBones,\\n      useVertexTexture: floatVertexTextures,\\n      morphTargets: !!object.geometry && !!object.geometry.morphAttributes.position,\\n      morphNormals: !!object.geometry && !!object.geometry.morphAttributes.normal,\\n      morphTargetsCount: !!object.geometry && !!object.geometry.morphAttributes.position ? object.geometry.morphAttributes.position.length : 0,\\n      numDirLights: lights.directional.length,\\n      numPointLights: lights.point.length,\\n      numSpotLights: lights.spot.length,\\n      numRectAreaLights: lights.rectArea.length,\\n      numHemiLights: lights.hemi.length,\\n      numDirLightShadows: lights.directionalShadowMap.length,\\n      numPointLightShadows: lights.pointShadowMap.length,\\n      numSpotLightShadows: lights.spotShadowMap.length,\\n      numClippingPlanes: clipping.numPlanes,\\n      numClipIntersection: clipping.numIntersection,\\n      format: material.format,\\n      dithering: material.dithering,\\n      shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\\n      shadowMapType: renderer.shadowMap.type,\\n      toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\\n      physicallyCorrectLights: renderer.physicallyCorrectLights,\\n      premultipliedAlpha: material.premultipliedAlpha,\\n      doubleSided: material.side === DoubleSide,\\n      flipSided: material.side === BackSide,\\n      depthPacking: material.depthPacking !== void 0 ? material.depthPacking : false,\\n      index0AttributeName: material.index0AttributeName,\\n      extensionDerivatives: material.extensions && material.extensions.derivatives,\\n      extensionFragDepth: material.extensions && material.extensions.fragDepth,\\n      extensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\\n      extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\\n      rendererExtensionFragDepth: isWebGL2 || extensions.has(\\\\\\\"EXT_frag_depth\\\\\\\"),\\n      rendererExtensionDrawBuffers: isWebGL2 || extensions.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),\\n      rendererExtensionShaderTextureLod: isWebGL2 || extensions.has(\\\\\\\"EXT_shader_texture_lod\\\\\\\"),\\n      customProgramCacheKey: material.customProgramCacheKey()\\n    };\\n    return parameters;\\n  }\\n  function getProgramCacheKey(parameters) {\\n    const array = [];\\n    if (parameters.shaderID) {\\n      array.push(parameters.shaderID);\\n    } else {\\n      array.push(parameters.fragmentShader);\\n      array.push(parameters.vertexShader);\\n    }\\n    if (parameters.defines !== void 0) {\\n      for (const name in parameters.defines) {\\n        array.push(name);\\n        array.push(parameters.defines[name]);\\n      }\\n    }\\n    if (parameters.isRawShaderMaterial === false) {\\n      for (let i = 0; i < parameterNames.length; i++) {\\n        array.push(parameters[parameterNames[i]]);\\n      }\\n      array.push(renderer.outputEncoding);\\n      array.push(renderer.gammaFactor);\\n    }\\n    array.push(parameters.customProgramCacheKey);\\n    return array.join();\\n  }\\n  function getUniforms(material) {\\n    const shaderID = shaderIDs[material.type];\\n    let uniforms;\\n    if (shaderID) {\\n      const shader = ShaderLib[shaderID];\\n      uniforms = UniformsUtils.clone(shader.uniforms);\\n    } else {\\n      uniforms = material.uniforms;\\n    }\\n    return uniforms;\\n  }\\n  function acquireProgram(parameters, cacheKey) {\\n    let program;\\n    for (let p = 0, pl = programs.length; p < pl; p++) {\\n      const preexistingProgram = programs[p];\\n      if (preexistingProgram.cacheKey === cacheKey) {\\n        program = preexistingProgram;\\n        ++program.usedTimes;\\n        break;\\n      }\\n    }\\n    if (program === void 0) {\\n      program = new WebGLProgram(renderer, cacheKey, parameters, bindingStates);\\n      programs.push(program);\\n    }\\n    return program;\\n  }\\n  function releaseProgram(program) {\\n    if (--program.usedTimes === 0) {\\n      const i = programs.indexOf(program);\\n      programs[i] = programs[programs.length - 1];\\n      programs.pop();\\n      program.destroy();\\n    }\\n  }\\n  return {\\n    getParameters,\\n    getProgramCacheKey,\\n    getUniforms,\\n    acquireProgram,\\n    releaseProgram,\\n    programs\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLProperties.js\\nfunction WebGLProperties() {\\n  let properties = new WeakMap();\\n  function get(object) {\\n    let map = properties.get(object);\\n    if (map === void 0) {\\n      map = {};\\n      properties.set(object, map);\\n    }\\n    return map;\\n  }\\n  function remove(object) {\\n    properties.delete(object);\\n  }\\n  function update(object, key, value) {\\n    properties.get(object)[key] = value;\\n  }\\n  function dispose() {\\n    properties = new WeakMap();\\n  }\\n  return {\\n    get,\\n    remove,\\n    update,\\n    dispose\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLRenderLists.js\\nfunction painterSortStable(a, b) {\\n  if (a.groupOrder !== b.groupOrder) {\\n    return a.groupOrder - b.groupOrder;\\n  } else if (a.renderOrder !== b.renderOrder) {\\n    return a.renderOrder - b.renderOrder;\\n  } else if (a.program !== b.program) {\\n    return a.program.id - b.program.id;\\n  } else if (a.material.id !== b.material.id) {\\n    return a.material.id - b.material.id;\\n  } else if (a.z !== b.z) {\\n    return a.z - b.z;\\n  } else {\\n    return a.id - b.id;\\n  }\\n}\\nfunction reversePainterSortStable(a, b) {\\n  if (a.groupOrder !== b.groupOrder) {\\n    return a.groupOrder - b.groupOrder;\\n  } else if (a.renderOrder !== b.renderOrder) {\\n    return a.renderOrder - b.renderOrder;\\n  } else if (a.z !== b.z) {\\n    return b.z - a.z;\\n  } else {\\n    return a.id - b.id;\\n  }\\n}\\nfunction WebGLRenderList(properties) {\\n  const renderItems = [];\\n  let renderItemsIndex = 0;\\n  const opaque = [];\\n  const transmissive = [];\\n  const transparent = [];\\n  const defaultProgram = {id: -1};\\n  function init() {\\n    renderItemsIndex = 0;\\n    opaque.length = 0;\\n    transmissive.length = 0;\\n    transparent.length = 0;\\n  }\\n  function getNextRenderItem(object, geometry, material, groupOrder, z, group) {\\n    let renderItem = renderItems[renderItemsIndex];\\n    const materialProperties = properties.get(material);\\n    if (renderItem === void 0) {\\n      renderItem = {\\n        id: object.id,\\n        object,\\n        geometry,\\n        material,\\n        program: materialProperties.program || defaultProgram,\\n        groupOrder,\\n        renderOrder: object.renderOrder,\\n        z,\\n        group\\n      };\\n      renderItems[renderItemsIndex] = renderItem;\\n    } else {\\n      renderItem.id = object.id;\\n      renderItem.object = object;\\n      renderItem.geometry = geometry;\\n      renderItem.material = material;\\n      renderItem.program = materialProperties.program || defaultProgram;\\n      renderItem.groupOrder = groupOrder;\\n      renderItem.renderOrder = object.renderOrder;\\n      renderItem.z = z;\\n      renderItem.group = group;\\n    }\\n    renderItemsIndex++;\\n    return renderItem;\\n  }\\n  function push(object, geometry, material, groupOrder, z, group) {\\n    const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group);\\n    if (material.transmission > 0) {\\n      transmissive.push(renderItem);\\n    } else if (material.transparent === true) {\\n      transparent.push(renderItem);\\n    } else {\\n      opaque.push(renderItem);\\n    }\\n  }\\n  function unshift(object, geometry, material, groupOrder, z, group) {\\n    const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group);\\n    if (material.transmission > 0) {\\n      transmissive.unshift(renderItem);\\n    } else if (material.transparent === true) {\\n      transparent.unshift(renderItem);\\n    } else {\\n      opaque.unshift(renderItem);\\n    }\\n  }\\n  function sort(customOpaqueSort, customTransparentSort) {\\n    if (opaque.length > 1)\\n      opaque.sort(customOpaqueSort || painterSortStable);\\n    if (transmissive.length > 1)\\n      transmissive.sort(customTransparentSort || reversePainterSortStable);\\n    if (transparent.length > 1)\\n      transparent.sort(customTransparentSort || reversePainterSortStable);\\n  }\\n  function finish() {\\n    for (let i = renderItemsIndex, il = renderItems.length; i < il; i++) {\\n      const renderItem = renderItems[i];\\n      if (renderItem.id === null)\\n        break;\\n      renderItem.id = null;\\n      renderItem.object = null;\\n      renderItem.geometry = null;\\n      renderItem.material = null;\\n      renderItem.program = null;\\n      renderItem.group = null;\\n    }\\n  }\\n  return {\\n    opaque,\\n    transmissive,\\n    transparent,\\n    init,\\n    push,\\n    unshift,\\n    finish,\\n    sort\\n  };\\n}\\nfunction WebGLRenderLists(properties) {\\n  let lists = new WeakMap();\\n  function get(scene, renderCallDepth) {\\n    let list;\\n    if (lists.has(scene) === false) {\\n      list = new WebGLRenderList(properties);\\n      lists.set(scene, [list]);\\n    } else {\\n      if (renderCallDepth >= lists.get(scene).length) {\\n        list = new WebGLRenderList(properties);\\n        lists.get(scene).push(list);\\n      } else {\\n        list = lists.get(scene)[renderCallDepth];\\n      }\\n    }\\n    return list;\\n  }\\n  function dispose() {\\n    lists = new WeakMap();\\n  }\\n  return {\\n    get,\\n    dispose\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLLights.js\\nfunction UniformsCache() {\\n  const lights = {};\\n  return {\\n    get: function(light) {\\n      if (lights[light.id] !== void 0) {\\n        return lights[light.id];\\n      }\\n      let uniforms;\\n      switch (light.type) {\\n        case \\\\\\\"DirectionalLight\\\\\\\":\\n          uniforms = {\\n            direction: new Vector3(),\\n            color: new Color()\\n          };\\n          break;\\n        case \\\\\\\"SpotLight\\\\\\\":\\n          uniforms = {\\n            position: new Vector3(),\\n            direction: new Vector3(),\\n            color: new Color(),\\n            distance: 0,\\n            coneCos: 0,\\n            penumbraCos: 0,\\n            decay: 0\\n          };\\n          break;\\n        case \\\\\\\"PointLight\\\\\\\":\\n          uniforms = {\\n            position: new Vector3(),\\n            color: new Color(),\\n            distance: 0,\\n            decay: 0\\n          };\\n          break;\\n        case \\\\\\\"HemisphereLight\\\\\\\":\\n          uniforms = {\\n            direction: new Vector3(),\\n            skyColor: new Color(),\\n            groundColor: new Color()\\n          };\\n          break;\\n        case \\\\\\\"RectAreaLight\\\\\\\":\\n          uniforms = {\\n            color: new Color(),\\n            position: new Vector3(),\\n            halfWidth: new Vector3(),\\n            halfHeight: new Vector3()\\n          };\\n          break;\\n      }\\n      lights[light.id] = uniforms;\\n      return uniforms;\\n    }\\n  };\\n}\\nfunction ShadowUniformsCache() {\\n  const lights = {};\\n  return {\\n    get: function(light) {\\n      if (lights[light.id] !== void 0) {\\n        return lights[light.id];\\n      }\\n      let uniforms;\\n      switch (light.type) {\\n        case \\\\\\\"DirectionalLight\\\\\\\":\\n          uniforms = {\\n            shadowBias: 0,\\n            shadowNormalBias: 0,\\n            shadowRadius: 1,\\n            shadowMapSize: new Vector2()\\n          };\\n          break;\\n        case \\\\\\\"SpotLight\\\\\\\":\\n          uniforms = {\\n            shadowBias: 0,\\n            shadowNormalBias: 0,\\n            shadowRadius: 1,\\n            shadowMapSize: new Vector2()\\n          };\\n          break;\\n        case \\\\\\\"PointLight\\\\\\\":\\n          uniforms = {\\n            shadowBias: 0,\\n            shadowNormalBias: 0,\\n            shadowRadius: 1,\\n            shadowMapSize: new Vector2(),\\n            shadowCameraNear: 1,\\n            shadowCameraFar: 1e3\\n          };\\n          break;\\n      }\\n      lights[light.id] = uniforms;\\n      return uniforms;\\n    }\\n  };\\n}\\nvar nextVersion = 0;\\nfunction shadowCastingLightsFirst(lightA, lightB) {\\n  return (lightB.castShadow ? 1 : 0) - (lightA.castShadow ? 1 : 0);\\n}\\nfunction WebGLLights(extensions, capabilities) {\\n  const cache = new UniformsCache();\\n  const shadowCache = ShadowUniformsCache();\\n  const state = {\\n    version: 0,\\n    hash: {\\n      directionalLength: -1,\\n      pointLength: -1,\\n      spotLength: -1,\\n      rectAreaLength: -1,\\n      hemiLength: -1,\\n      numDirectionalShadows: -1,\\n      numPointShadows: -1,\\n      numSpotShadows: -1\\n    },\\n    ambient: [0, 0, 0],\\n    probe: [],\\n    directional: [],\\n    directionalShadow: [],\\n    directionalShadowMap: [],\\n    directionalShadowMatrix: [],\\n    spot: [],\\n    spotShadow: [],\\n    spotShadowMap: [],\\n    spotShadowMatrix: [],\\n    rectArea: [],\\n    rectAreaLTC1: null,\\n    rectAreaLTC2: null,\\n    point: [],\\n    pointShadow: [],\\n    pointShadowMap: [],\\n    pointShadowMatrix: [],\\n    hemi: []\\n  };\\n  for (let i = 0; i < 9; i++)\\n    state.probe.push(new Vector3());\\n  const vector3 = new Vector3();\\n  const matrix4 = new Matrix4();\\n  const matrix42 = new Matrix4();\\n  function setup(lights, physicallyCorrectLights) {\\n    let r = 0, g = 0, b = 0;\\n    for (let i = 0; i < 9; i++)\\n      state.probe[i].set(0, 0, 0);\\n    let directionalLength = 0;\\n    let pointLength = 0;\\n    let spotLength = 0;\\n    let rectAreaLength = 0;\\n    let hemiLength = 0;\\n    let numDirectionalShadows = 0;\\n    let numPointShadows = 0;\\n    let numSpotShadows = 0;\\n    lights.sort(shadowCastingLightsFirst);\\n    const scaleFactor = physicallyCorrectLights !== true ? Math.PI : 1;\\n    for (let i = 0, l = lights.length; i < l; i++) {\\n      const light = lights[i];\\n      const color = light.color;\\n      const intensity = light.intensity;\\n      const distance = light.distance;\\n      const shadowMap = light.shadow && light.shadow.map ? light.shadow.map.texture : null;\\n      if (light.isAmbientLight) {\\n        r += color.r * intensity * scaleFactor;\\n        g += color.g * intensity * scaleFactor;\\n        b += color.b * intensity * scaleFactor;\\n      } else if (light.isLightProbe) {\\n        for (let j = 0; j < 9; j++) {\\n          state.probe[j].addScaledVector(light.sh.coefficients[j], intensity);\\n        }\\n      } else if (light.isDirectionalLight) {\\n        const uniforms = cache.get(light);\\n        uniforms.color.copy(light.color).multiplyScalar(light.intensity * scaleFactor);\\n        if (light.castShadow) {\\n          const shadow2 = light.shadow;\\n          const shadowUniforms = shadowCache.get(light);\\n          shadowUniforms.shadowBias = shadow2.bias;\\n          shadowUniforms.shadowNormalBias = shadow2.normalBias;\\n          shadowUniforms.shadowRadius = shadow2.radius;\\n          shadowUniforms.shadowMapSize = shadow2.mapSize;\\n          state.directionalShadow[directionalLength] = shadowUniforms;\\n          state.directionalShadowMap[directionalLength] = shadowMap;\\n          state.directionalShadowMatrix[directionalLength] = light.shadow.matrix;\\n          numDirectionalShadows++;\\n        }\\n        state.directional[directionalLength] = uniforms;\\n        directionalLength++;\\n      } else if (light.isSpotLight) {\\n        const uniforms = cache.get(light);\\n        uniforms.position.setFromMatrixPosition(light.matrixWorld);\\n        uniforms.color.copy(color).multiplyScalar(intensity * scaleFactor);\\n        uniforms.distance = distance;\\n        uniforms.coneCos = Math.cos(light.angle);\\n        uniforms.penumbraCos = Math.cos(light.angle * (1 - light.penumbra));\\n        uniforms.decay = light.decay;\\n        if (light.castShadow) {\\n          const shadow2 = light.shadow;\\n          const shadowUniforms = shadowCache.get(light);\\n          shadowUniforms.shadowBias = shadow2.bias;\\n          shadowUniforms.shadowNormalBias = shadow2.normalBias;\\n          shadowUniforms.shadowRadius = shadow2.radius;\\n          shadowUniforms.shadowMapSize = shadow2.mapSize;\\n          state.spotShadow[spotLength] = shadowUniforms;\\n          state.spotShadowMap[spotLength] = shadowMap;\\n          state.spotShadowMatrix[spotLength] = light.shadow.matrix;\\n          numSpotShadows++;\\n        }\\n        state.spot[spotLength] = uniforms;\\n        spotLength++;\\n      } else if (light.isRectAreaLight) {\\n        const uniforms = cache.get(light);\\n        uniforms.color.copy(color).multiplyScalar(intensity);\\n        uniforms.halfWidth.set(light.width * 0.5, 0, 0);\\n        uniforms.halfHeight.set(0, light.height * 0.5, 0);\\n        state.rectArea[rectAreaLength] = uniforms;\\n        rectAreaLength++;\\n      } else if (light.isPointLight) {\\n        const uniforms = cache.get(light);\\n        uniforms.color.copy(light.color).multiplyScalar(light.intensity * scaleFactor);\\n        uniforms.distance = light.distance;\\n        uniforms.decay = light.decay;\\n        if (light.castShadow) {\\n          const shadow2 = light.shadow;\\n          const shadowUniforms = shadowCache.get(light);\\n          shadowUniforms.shadowBias = shadow2.bias;\\n          shadowUniforms.shadowNormalBias = shadow2.normalBias;\\n          shadowUniforms.shadowRadius = shadow2.radius;\\n          shadowUniforms.shadowMapSize = shadow2.mapSize;\\n          shadowUniforms.shadowCameraNear = shadow2.camera.near;\\n          shadowUniforms.shadowCameraFar = shadow2.camera.far;\\n          state.pointShadow[pointLength] = shadowUniforms;\\n          state.pointShadowMap[pointLength] = shadowMap;\\n          state.pointShadowMatrix[pointLength] = light.shadow.matrix;\\n          numPointShadows++;\\n        }\\n        state.point[pointLength] = uniforms;\\n        pointLength++;\\n      } else if (light.isHemisphereLight) {\\n        const uniforms = cache.get(light);\\n        uniforms.skyColor.copy(light.color).multiplyScalar(intensity * scaleFactor);\\n        uniforms.groundColor.copy(light.groundColor).multiplyScalar(intensity * scaleFactor);\\n        state.hemi[hemiLength] = uniforms;\\n        hemiLength++;\\n      }\\n    }\\n    if (rectAreaLength > 0) {\\n      if (capabilities.isWebGL2) {\\n        state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\\n        state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\\n      } else {\\n        if (extensions.has(\\\\\\\"OES_texture_float_linear\\\\\\\") === true) {\\n          state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\\n          state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\\n        } else if (extensions.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\") === true) {\\n          state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\\n          state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\\n        } else {\\n          console.error(\\\\\\\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\\\\\\\");\\n        }\\n      }\\n    }\\n    state.ambient[0] = r;\\n    state.ambient[1] = g;\\n    state.ambient[2] = b;\\n    const hash = state.hash;\\n    if (hash.directionalLength !== directionalLength || hash.pointLength !== pointLength || hash.spotLength !== spotLength || hash.rectAreaLength !== rectAreaLength || hash.hemiLength !== hemiLength || hash.numDirectionalShadows !== numDirectionalShadows || hash.numPointShadows !== numPointShadows || hash.numSpotShadows !== numSpotShadows) {\\n      state.directional.length = directionalLength;\\n      state.spot.length = spotLength;\\n      state.rectArea.length = rectAreaLength;\\n      state.point.length = pointLength;\\n      state.hemi.length = hemiLength;\\n      state.directionalShadow.length = numDirectionalShadows;\\n      state.directionalShadowMap.length = numDirectionalShadows;\\n      state.pointShadow.length = numPointShadows;\\n      state.pointShadowMap.length = numPointShadows;\\n      state.spotShadow.length = numSpotShadows;\\n      state.spotShadowMap.length = numSpotShadows;\\n      state.directionalShadowMatrix.length = numDirectionalShadows;\\n      state.pointShadowMatrix.length = numPointShadows;\\n      state.spotShadowMatrix.length = numSpotShadows;\\n      hash.directionalLength = directionalLength;\\n      hash.pointLength = pointLength;\\n      hash.spotLength = spotLength;\\n      hash.rectAreaLength = rectAreaLength;\\n      hash.hemiLength = hemiLength;\\n      hash.numDirectionalShadows = numDirectionalShadows;\\n      hash.numPointShadows = numPointShadows;\\n      hash.numSpotShadows = numSpotShadows;\\n      state.version = nextVersion++;\\n    }\\n  }\\n  function setupView(lights, camera) {\\n    let directionalLength = 0;\\n    let pointLength = 0;\\n    let spotLength = 0;\\n    let rectAreaLength = 0;\\n    let hemiLength = 0;\\n    const viewMatrix = camera.matrixWorldInverse;\\n    for (let i = 0, l = lights.length; i < l; i++) {\\n      const light = lights[i];\\n      if (light.isDirectionalLight) {\\n        const uniforms = state.directional[directionalLength];\\n        uniforms.direction.setFromMatrixPosition(light.matrixWorld);\\n        vector3.setFromMatrixPosition(light.target.matrixWorld);\\n        uniforms.direction.sub(vector3);\\n        uniforms.direction.transformDirection(viewMatrix);\\n        directionalLength++;\\n      } else if (light.isSpotLight) {\\n        const uniforms = state.spot[spotLength];\\n        uniforms.position.setFromMatrixPosition(light.matrixWorld);\\n        uniforms.position.applyMatrix4(viewMatrix);\\n        uniforms.direction.setFromMatrixPosition(light.matrixWorld);\\n        vector3.setFromMatrixPosition(light.target.matrixWorld);\\n        uniforms.direction.sub(vector3);\\n        uniforms.direction.transformDirection(viewMatrix);\\n        spotLength++;\\n      } else if (light.isRectAreaLight) {\\n        const uniforms = state.rectArea[rectAreaLength];\\n        uniforms.position.setFromMatrixPosition(light.matrixWorld);\\n        uniforms.position.applyMatrix4(viewMatrix);\\n        matrix42.identity();\\n        matrix4.copy(light.matrixWorld);\\n        matrix4.premultiply(viewMatrix);\\n        matrix42.extractRotation(matrix4);\\n        uniforms.halfWidth.set(light.width * 0.5, 0, 0);\\n        uniforms.halfHeight.set(0, light.height * 0.5, 0);\\n        uniforms.halfWidth.applyMatrix4(matrix42);\\n        uniforms.halfHeight.applyMatrix4(matrix42);\\n        rectAreaLength++;\\n      } else if (light.isPointLight) {\\n        const uniforms = state.point[pointLength];\\n        uniforms.position.setFromMatrixPosition(light.matrixWorld);\\n        uniforms.position.applyMatrix4(viewMatrix);\\n        pointLength++;\\n      } else if (light.isHemisphereLight) {\\n        const uniforms = state.hemi[hemiLength];\\n        uniforms.direction.setFromMatrixPosition(light.matrixWorld);\\n        uniforms.direction.transformDirection(viewMatrix);\\n        uniforms.direction.normalize();\\n        hemiLength++;\\n      }\\n    }\\n  }\\n  return {\\n    setup,\\n    setupView,\\n    state\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLRenderStates.js\\nfunction WebGLRenderState(extensions, capabilities) {\\n  const lights = new WebGLLights(extensions, capabilities);\\n  const lightsArray = [];\\n  const shadowsArray = [];\\n  function init() {\\n    lightsArray.length = 0;\\n    shadowsArray.length = 0;\\n  }\\n  function pushLight(light) {\\n    lightsArray.push(light);\\n  }\\n  function pushShadow(shadowLight) {\\n    shadowsArray.push(shadowLight);\\n  }\\n  function setupLights(physicallyCorrectLights) {\\n    lights.setup(lightsArray, physicallyCorrectLights);\\n  }\\n  function setupLightsView(camera) {\\n    lights.setupView(lightsArray, camera);\\n  }\\n  const state = {\\n    lightsArray,\\n    shadowsArray,\\n    lights\\n  };\\n  return {\\n    init,\\n    state,\\n    setupLights,\\n    setupLightsView,\\n    pushLight,\\n    pushShadow\\n  };\\n}\\nfunction WebGLRenderStates(extensions, capabilities) {\\n  let renderStates = new WeakMap();\\n  function get(scene, renderCallDepth = 0) {\\n    let renderState;\\n    if (renderStates.has(scene) === false) {\\n      renderState = new WebGLRenderState(extensions, capabilities);\\n      renderStates.set(scene, [renderState]);\\n    } else {\\n      if (renderCallDepth >= renderStates.get(scene).length) {\\n        renderState = new WebGLRenderState(extensions, capabilities);\\n        renderStates.get(scene).push(renderState);\\n      } else {\\n        renderState = renderStates.get(scene)[renderCallDepth];\\n      }\\n    }\\n    return renderState;\\n  }\\n  function dispose() {\\n    renderStates = new WeakMap();\\n  }\\n  return {\\n    get,\\n    dispose\\n  };\\n}\\n\\n// ../../../node_modules/three/src/materials/MeshDepthMaterial.js\\nvar MeshDepthMaterial = class extends Material {\\n  constructor(parameters) {\\n    super();\\n    this.type = \\\\\\\"MeshDepthMaterial\\\\\\\";\\n    this.depthPacking = BasicDepthPacking;\\n    this.map = null;\\n    this.alphaMap = null;\\n    this.displacementMap = null;\\n    this.displacementScale = 1;\\n    this.displacementBias = 0;\\n    this.wireframe = false;\\n    this.wireframeLinewidth = 1;\\n    this.fog = false;\\n    this.setValues(parameters);\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.depthPacking = source.depthPacking;\\n    this.map = source.map;\\n    this.alphaMap = source.alphaMap;\\n    this.displacementMap = source.displacementMap;\\n    this.displacementScale = source.displacementScale;\\n    this.displacementBias = source.displacementBias;\\n    this.wireframe = source.wireframe;\\n    this.wireframeLinewidth = source.wireframeLinewidth;\\n    return this;\\n  }\\n};\\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\\n\\n// ../../../node_modules/three/src/materials/MeshDistanceMaterial.js\\nvar MeshDistanceMaterial = class extends Material {\\n  constructor(parameters) {\\n    super();\\n    this.type = \\\\\\\"MeshDistanceMaterial\\\\\\\";\\n    this.referencePosition = new Vector3();\\n    this.nearDistance = 1;\\n    this.farDistance = 1e3;\\n    this.map = null;\\n    this.alphaMap = null;\\n    this.displacementMap = null;\\n    this.displacementScale = 1;\\n    this.displacementBias = 0;\\n    this.fog = false;\\n    this.setValues(parameters);\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.referencePosition.copy(source.referencePosition);\\n    this.nearDistance = source.nearDistance;\\n    this.farDistance = source.farDistance;\\n    this.map = source.map;\\n    this.alphaMap = source.alphaMap;\\n    this.displacementMap = source.displacementMap;\\n    this.displacementScale = source.displacementScale;\\n    this.displacementBias = source.displacementBias;\\n    return this;\\n  }\\n};\\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\\n\\n// ../../../node_modules/three/src/renderers/shaders/ShaderLib/vsm.glsl.js\\nvar vertex17 = `\\nvoid main() {\\n\\n\\tgl_Position = vec4( position, 1.0 );\\n\\n}\\n`;\\nvar fragment17 = `\\nuniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\nuniform float samples;\\n\\n#include <packing>\\n\\nvoid main() {\\n\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\n\\t// This seems totally useless but it's a crazy work around for a Adreno compiler bug\\n\\t// float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\n\\t\\t#else\\n\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\n\\t\\t#endif\\n\\n\\t}\\n\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n\\n}\\n`;\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLShadowMap.js\\nfunction WebGLShadowMap(_renderer, _objects, _capabilities) {\\n  let _frustum = new Frustum();\\n  const _shadowMapSize = new Vector2(), _viewportSize = new Vector2(), _viewport = new Vector4(), _depthMaterial = new MeshDepthMaterial({depthPacking: RGBADepthPacking}), _distanceMaterial = new MeshDistanceMaterial(), _materialCache = {}, _maxTextureSize = _capabilities.maxTextureSize;\\n  const shadowSide = {0: BackSide, 1: FrontSide, 2: DoubleSide};\\n  const shadowMaterialVertical = new ShaderMaterial({\\n    uniforms: {\\n      shadow_pass: {value: null},\\n      resolution: {value: new Vector2()},\\n      radius: {value: 4},\\n      samples: {value: 8}\\n    },\\n    vertexShader: vertex17,\\n    fragmentShader: fragment17\\n  });\\n  const shadowMaterialHorizontal = shadowMaterialVertical.clone();\\n  shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\\n  const fullScreenTri = new BufferGeometry();\\n  fullScreenTri.setAttribute(\\\\\\\"position\\\\\\\", new BufferAttribute(new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), 3));\\n  const fullScreenMesh = new Mesh(fullScreenTri, shadowMaterialVertical);\\n  const scope = this;\\n  this.enabled = false;\\n  this.autoUpdate = true;\\n  this.needsUpdate = false;\\n  this.type = PCFShadowMap;\\n  this.render = function(lights, scene, camera) {\\n    if (scope.enabled === false)\\n      return;\\n    if (scope.autoUpdate === false && scope.needsUpdate === false)\\n      return;\\n    if (lights.length === 0)\\n      return;\\n    const currentRenderTarget = _renderer.getRenderTarget();\\n    const activeCubeFace = _renderer.getActiveCubeFace();\\n    const activeMipmapLevel = _renderer.getActiveMipmapLevel();\\n    const _state = _renderer.state;\\n    _state.setBlending(NoBlending);\\n    _state.buffers.color.setClear(1, 1, 1, 1);\\n    _state.buffers.depth.setTest(true);\\n    _state.setScissorTest(false);\\n    for (let i = 0, il = lights.length; i < il; i++) {\\n      const light = lights[i];\\n      const shadow2 = light.shadow;\\n      if (shadow2 === void 0) {\\n        console.warn(\\\\\\\"THREE.WebGLShadowMap:\\\\\\\", light, \\\\\\\"has no shadow.\\\\\\\");\\n        continue;\\n      }\\n      if (shadow2.autoUpdate === false && shadow2.needsUpdate === false)\\n        continue;\\n      _shadowMapSize.copy(shadow2.mapSize);\\n      const shadowFrameExtents = shadow2.getFrameExtents();\\n      _shadowMapSize.multiply(shadowFrameExtents);\\n      _viewportSize.copy(shadow2.mapSize);\\n      if (_shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize) {\\n        if (_shadowMapSize.x > _maxTextureSize) {\\n          _viewportSize.x = Math.floor(_maxTextureSize / shadowFrameExtents.x);\\n          _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\\n          shadow2.mapSize.x = _viewportSize.x;\\n        }\\n        if (_shadowMapSize.y > _maxTextureSize) {\\n          _viewportSize.y = Math.floor(_maxTextureSize / shadowFrameExtents.y);\\n          _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\\n          shadow2.mapSize.y = _viewportSize.y;\\n        }\\n      }\\n      if (shadow2.map === null && !shadow2.isPointLightShadow && this.type === VSMShadowMap) {\\n        const pars = {minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat};\\n        shadow2.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars);\\n        shadow2.map.texture.name = light.name + \\\\\\\".shadowMap\\\\\\\";\\n        shadow2.mapPass = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars);\\n        shadow2.camera.updateProjectionMatrix();\\n      }\\n      if (shadow2.map === null) {\\n        const pars = {minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat};\\n        shadow2.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars);\\n        shadow2.map.texture.name = light.name + \\\\\\\".shadowMap\\\\\\\";\\n        shadow2.camera.updateProjectionMatrix();\\n      }\\n      _renderer.setRenderTarget(shadow2.map);\\n      _renderer.clear();\\n      const viewportCount = shadow2.getViewportCount();\\n      for (let vp = 0; vp < viewportCount; vp++) {\\n        const viewport = shadow2.getViewport(vp);\\n        _viewport.set(_viewportSize.x * viewport.x, _viewportSize.y * viewport.y, _viewportSize.x * viewport.z, _viewportSize.y * viewport.w);\\n        _state.viewport(_viewport);\\n        shadow2.updateMatrices(light, vp);\\n        _frustum = shadow2.getFrustum();\\n        renderObject(scene, camera, shadow2.camera, light, this.type);\\n      }\\n      if (!shadow2.isPointLightShadow && this.type === VSMShadowMap) {\\n        VSMPass(shadow2, camera);\\n      }\\n      shadow2.needsUpdate = false;\\n    }\\n    scope.needsUpdate = false;\\n    _renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel);\\n  };\\n  function VSMPass(shadow2, camera) {\\n    const geometry = _objects.update(fullScreenMesh);\\n    shadowMaterialVertical.uniforms.shadow_pass.value = shadow2.map.texture;\\n    shadowMaterialVertical.uniforms.resolution.value = shadow2.mapSize;\\n    shadowMaterialVertical.uniforms.radius.value = shadow2.radius;\\n    shadowMaterialVertical.uniforms.samples.value = shadow2.blurSamples;\\n    _renderer.setRenderTarget(shadow2.mapPass);\\n    _renderer.clear();\\n    _renderer.renderBufferDirect(camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null);\\n    shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow2.mapPass.texture;\\n    shadowMaterialHorizontal.uniforms.resolution.value = shadow2.mapSize;\\n    shadowMaterialHorizontal.uniforms.radius.value = shadow2.radius;\\n    shadowMaterialHorizontal.uniforms.samples.value = shadow2.blurSamples;\\n    _renderer.setRenderTarget(shadow2.map);\\n    _renderer.clear();\\n    _renderer.renderBufferDirect(camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null);\\n  }\\n  function getDepthMaterial(object, geometry, material, light, shadowCameraNear, shadowCameraFar, type) {\\n    let result = null;\\n    const customMaterial = light.isPointLight === true ? object.customDistanceMaterial : object.customDepthMaterial;\\n    if (customMaterial !== void 0) {\\n      result = customMaterial;\\n    } else {\\n      result = light.isPointLight === true ? _distanceMaterial : _depthMaterial;\\n    }\\n    if (_renderer.localClippingEnabled && material.clipShadows === true && material.clippingPlanes.length !== 0 || material.displacementMap && material.displacementScale !== 0 || material.alphaMap && material.alphaTest > 0) {\\n      const keyA = result.uuid, keyB = material.uuid;\\n      let materialsForVariant = _materialCache[keyA];\\n      if (materialsForVariant === void 0) {\\n        materialsForVariant = {};\\n        _materialCache[keyA] = materialsForVariant;\\n      }\\n      let cachedMaterial = materialsForVariant[keyB];\\n      if (cachedMaterial === void 0) {\\n        cachedMaterial = result.clone();\\n        materialsForVariant[keyB] = cachedMaterial;\\n      }\\n      result = cachedMaterial;\\n    }\\n    result.visible = material.visible;\\n    result.wireframe = material.wireframe;\\n    if (type === VSMShadowMap) {\\n      result.side = material.shadowSide !== null ? material.shadowSide : material.side;\\n    } else {\\n      result.side = material.shadowSide !== null ? material.shadowSide : shadowSide[material.side];\\n    }\\n    result.alphaMap = material.alphaMap;\\n    result.alphaTest = material.alphaTest;\\n    result.clipShadows = material.clipShadows;\\n    result.clippingPlanes = material.clippingPlanes;\\n    result.clipIntersection = material.clipIntersection;\\n    result.displacementMap = material.displacementMap;\\n    result.displacementScale = material.displacementScale;\\n    result.displacementBias = material.displacementBias;\\n    result.wireframeLinewidth = material.wireframeLinewidth;\\n    result.linewidth = material.linewidth;\\n    if (light.isPointLight === true && result.isMeshDistanceMaterial === true) {\\n      result.referencePosition.setFromMatrixPosition(light.matrixWorld);\\n      result.nearDistance = shadowCameraNear;\\n      result.farDistance = shadowCameraFar;\\n    }\\n    return result;\\n  }\\n  function renderObject(object, camera, shadowCamera, light, type) {\\n    if (object.visible === false)\\n      return;\\n    const visible = object.layers.test(camera.layers);\\n    if (visible && (object.isMesh || object.isLine || object.isPoints)) {\\n      if ((object.castShadow || object.receiveShadow && type === VSMShadowMap) && (!object.frustumCulled || _frustum.intersectsObject(object))) {\\n        object.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse, object.matrixWorld);\\n        const geometry = _objects.update(object);\\n        const material = object.material;\\n        if (Array.isArray(material)) {\\n          const groups = geometry.groups;\\n          for (let k = 0, kl = groups.length; k < kl; k++) {\\n            const group = groups[k];\\n            const groupMaterial = material[group.materialIndex];\\n            if (groupMaterial && groupMaterial.visible) {\\n              const depthMaterial = getDepthMaterial(object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type);\\n              _renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, group);\\n            }\\n          }\\n        } else if (material.visible) {\\n          const depthMaterial = getDepthMaterial(object, geometry, material, light, shadowCamera.near, shadowCamera.far, type);\\n          _renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, null);\\n        }\\n      }\\n    }\\n    const children = object.children;\\n    for (let i = 0, l = children.length; i < l; i++) {\\n      renderObject(children[i], camera, shadowCamera, light, type);\\n    }\\n  }\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLState.js\\nfunction WebGLState(gl, extensions, capabilities) {\\n  const isWebGL2 = capabilities.isWebGL2;\\n  function ColorBuffer() {\\n    let locked = false;\\n    const color = new Vector4();\\n    let currentColorMask = null;\\n    const currentColorClear = new Vector4(0, 0, 0, 0);\\n    return {\\n      setMask: function(colorMask) {\\n        if (currentColorMask !== colorMask && !locked) {\\n          gl.colorMask(colorMask, colorMask, colorMask, colorMask);\\n          currentColorMask = colorMask;\\n        }\\n      },\\n      setLocked: function(lock) {\\n        locked = lock;\\n      },\\n      setClear: function(r, g, b, a, premultipliedAlpha) {\\n        if (premultipliedAlpha === true) {\\n          r *= a;\\n          g *= a;\\n          b *= a;\\n        }\\n        color.set(r, g, b, a);\\n        if (currentColorClear.equals(color) === false) {\\n          gl.clearColor(r, g, b, a);\\n          currentColorClear.copy(color);\\n        }\\n      },\\n      reset: function() {\\n        locked = false;\\n        currentColorMask = null;\\n        currentColorClear.set(-1, 0, 0, 0);\\n      }\\n    };\\n  }\\n  function DepthBuffer() {\\n    let locked = false;\\n    let currentDepthMask = null;\\n    let currentDepthFunc = null;\\n    let currentDepthClear = null;\\n    return {\\n      setTest: function(depthTest) {\\n        if (depthTest) {\\n          enable(gl.DEPTH_TEST);\\n        } else {\\n          disable(gl.DEPTH_TEST);\\n        }\\n      },\\n      setMask: function(depthMask) {\\n        if (currentDepthMask !== depthMask && !locked) {\\n          gl.depthMask(depthMask);\\n          currentDepthMask = depthMask;\\n        }\\n      },\\n      setFunc: function(depthFunc) {\\n        if (currentDepthFunc !== depthFunc) {\\n          if (depthFunc) {\\n            switch (depthFunc) {\\n              case NeverDepth:\\n                gl.depthFunc(gl.NEVER);\\n                break;\\n              case AlwaysDepth:\\n                gl.depthFunc(gl.ALWAYS);\\n                break;\\n              case LessDepth:\\n                gl.depthFunc(gl.LESS);\\n                break;\\n              case LessEqualDepth:\\n                gl.depthFunc(gl.LEQUAL);\\n                break;\\n              case EqualDepth:\\n                gl.depthFunc(gl.EQUAL);\\n                break;\\n              case GreaterEqualDepth:\\n                gl.depthFunc(gl.GEQUAL);\\n                break;\\n              case GreaterDepth:\\n                gl.depthFunc(gl.GREATER);\\n                break;\\n              case NotEqualDepth:\\n                gl.depthFunc(gl.NOTEQUAL);\\n                break;\\n              default:\\n                gl.depthFunc(gl.LEQUAL);\\n            }\\n          } else {\\n            gl.depthFunc(gl.LEQUAL);\\n          }\\n          currentDepthFunc = depthFunc;\\n        }\\n      },\\n      setLocked: function(lock) {\\n        locked = lock;\\n      },\\n      setClear: function(depth2) {\\n        if (currentDepthClear !== depth2) {\\n          gl.clearDepth(depth2);\\n          currentDepthClear = depth2;\\n        }\\n      },\\n      reset: function() {\\n        locked = false;\\n        currentDepthMask = null;\\n        currentDepthFunc = null;\\n        currentDepthClear = null;\\n      }\\n    };\\n  }\\n  function StencilBuffer() {\\n    let locked = false;\\n    let currentStencilMask = null;\\n    let currentStencilFunc = null;\\n    let currentStencilRef = null;\\n    let currentStencilFuncMask = null;\\n    let currentStencilFail = null;\\n    let currentStencilZFail = null;\\n    let currentStencilZPass = null;\\n    let currentStencilClear = null;\\n    return {\\n      setTest: function(stencilTest) {\\n        if (!locked) {\\n          if (stencilTest) {\\n            enable(gl.STENCIL_TEST);\\n          } else {\\n            disable(gl.STENCIL_TEST);\\n          }\\n        }\\n      },\\n      setMask: function(stencilMask) {\\n        if (currentStencilMask !== stencilMask && !locked) {\\n          gl.stencilMask(stencilMask);\\n          currentStencilMask = stencilMask;\\n        }\\n      },\\n      setFunc: function(stencilFunc, stencilRef, stencilMask) {\\n        if (currentStencilFunc !== stencilFunc || currentStencilRef !== stencilRef || currentStencilFuncMask !== stencilMask) {\\n          gl.stencilFunc(stencilFunc, stencilRef, stencilMask);\\n          currentStencilFunc = stencilFunc;\\n          currentStencilRef = stencilRef;\\n          currentStencilFuncMask = stencilMask;\\n        }\\n      },\\n      setOp: function(stencilFail, stencilZFail, stencilZPass) {\\n        if (currentStencilFail !== stencilFail || currentStencilZFail !== stencilZFail || currentStencilZPass !== stencilZPass) {\\n          gl.stencilOp(stencilFail, stencilZFail, stencilZPass);\\n          currentStencilFail = stencilFail;\\n          currentStencilZFail = stencilZFail;\\n          currentStencilZPass = stencilZPass;\\n        }\\n      },\\n      setLocked: function(lock) {\\n        locked = lock;\\n      },\\n      setClear: function(stencil) {\\n        if (currentStencilClear !== stencil) {\\n          gl.clearStencil(stencil);\\n          currentStencilClear = stencil;\\n        }\\n      },\\n      reset: function() {\\n        locked = false;\\n        currentStencilMask = null;\\n        currentStencilFunc = null;\\n        currentStencilRef = null;\\n        currentStencilFuncMask = null;\\n        currentStencilFail = null;\\n        currentStencilZFail = null;\\n        currentStencilZPass = null;\\n        currentStencilClear = null;\\n      }\\n    };\\n  }\\n  const colorBuffer = new ColorBuffer();\\n  const depthBuffer = new DepthBuffer();\\n  const stencilBuffer = new StencilBuffer();\\n  let enabledCapabilities = {};\\n  let xrFramebuffer = null;\\n  let currentBoundFramebuffers = {};\\n  let currentProgram = null;\\n  let currentBlendingEnabled = false;\\n  let currentBlending = null;\\n  let currentBlendEquation = null;\\n  let currentBlendSrc = null;\\n  let currentBlendDst = null;\\n  let currentBlendEquationAlpha = null;\\n  let currentBlendSrcAlpha = null;\\n  let currentBlendDstAlpha = null;\\n  let currentPremultipledAlpha = false;\\n  let currentFlipSided = null;\\n  let currentCullFace = null;\\n  let currentLineWidth = null;\\n  let currentPolygonOffsetFactor = null;\\n  let currentPolygonOffsetUnits = null;\\n  const maxTextures = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);\\n  let lineWidthAvailable = false;\\n  let version = 0;\\n  const glVersion = gl.getParameter(gl.VERSION);\\n  if (glVersion.indexOf(\\\\\\\"WebGL\\\\\\\") !== -1) {\\n    version = parseFloat(/^WebGL (\\\\d)/.exec(glVersion)[1]);\\n    lineWidthAvailable = version >= 1;\\n  } else if (glVersion.indexOf(\\\\\\\"OpenGL ES\\\\\\\") !== -1) {\\n    version = parseFloat(/^OpenGL ES (\\\\d)/.exec(glVersion)[1]);\\n    lineWidthAvailable = version >= 2;\\n  }\\n  let currentTextureSlot = null;\\n  let currentBoundTextures = {};\\n  const scissorParam = gl.getParameter(gl.SCISSOR_BOX);\\n  const viewportParam = gl.getParameter(gl.VIEWPORT);\\n  const currentScissor = new Vector4().fromArray(scissorParam);\\n  const currentViewport = new Vector4().fromArray(viewportParam);\\n  function createTexture(type, target, count) {\\n    const data = new Uint8Array(4);\\n    const texture = gl.createTexture();\\n    gl.bindTexture(type, texture);\\n    gl.texParameteri(type, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\\n    gl.texParameteri(type, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\\n    for (let i = 0; i < count; i++) {\\n      gl.texImage2D(target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);\\n    }\\n    return texture;\\n  }\\n  const emptyTextures = {};\\n  emptyTextures[gl.TEXTURE_2D] = createTexture(gl.TEXTURE_2D, gl.TEXTURE_2D, 1);\\n  emptyTextures[gl.TEXTURE_CUBE_MAP] = createTexture(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6);\\n  colorBuffer.setClear(0, 0, 0, 1);\\n  depthBuffer.setClear(1);\\n  stencilBuffer.setClear(0);\\n  enable(gl.DEPTH_TEST);\\n  depthBuffer.setFunc(LessEqualDepth);\\n  setFlipSided(false);\\n  setCullFace(CullFaceBack);\\n  enable(gl.CULL_FACE);\\n  setBlending(NoBlending);\\n  function enable(id) {\\n    if (enabledCapabilities[id] !== true) {\\n      gl.enable(id);\\n      enabledCapabilities[id] = true;\\n    }\\n  }\\n  function disable(id) {\\n    if (enabledCapabilities[id] !== false) {\\n      gl.disable(id);\\n      enabledCapabilities[id] = false;\\n    }\\n  }\\n  function bindXRFramebuffer(framebuffer) {\\n    if (framebuffer !== xrFramebuffer) {\\n      gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\\n      xrFramebuffer = framebuffer;\\n    }\\n  }\\n  function bindFramebuffer(target, framebuffer) {\\n    if (framebuffer === null && xrFramebuffer !== null)\\n      framebuffer = xrFramebuffer;\\n    if (currentBoundFramebuffers[target] !== framebuffer) {\\n      gl.bindFramebuffer(target, framebuffer);\\n      currentBoundFramebuffers[target] = framebuffer;\\n      if (isWebGL2) {\\n        if (target === gl.DRAW_FRAMEBUFFER) {\\n          currentBoundFramebuffers[gl.FRAMEBUFFER] = framebuffer;\\n        }\\n        if (target === gl.FRAMEBUFFER) {\\n          currentBoundFramebuffers[gl.DRAW_FRAMEBUFFER] = framebuffer;\\n        }\\n      }\\n      return true;\\n    }\\n    return false;\\n  }\\n  function useProgram(program) {\\n    if (currentProgram !== program) {\\n      gl.useProgram(program);\\n      currentProgram = program;\\n      return true;\\n    }\\n    return false;\\n  }\\n  const equationToGL = {\\n    [AddEquation]: gl.FUNC_ADD,\\n    [SubtractEquation]: gl.FUNC_SUBTRACT,\\n    [ReverseSubtractEquation]: gl.FUNC_REVERSE_SUBTRACT\\n  };\\n  if (isWebGL2) {\\n    equationToGL[MinEquation] = gl.MIN;\\n    equationToGL[MaxEquation] = gl.MAX;\\n  } else {\\n    const extension = extensions.get(\\\\\\\"EXT_blend_minmax\\\\\\\");\\n    if (extension !== null) {\\n      equationToGL[MinEquation] = extension.MIN_EXT;\\n      equationToGL[MaxEquation] = extension.MAX_EXT;\\n    }\\n  }\\n  const factorToGL = {\\n    [ZeroFactor]: gl.ZERO,\\n    [OneFactor]: gl.ONE,\\n    [SrcColorFactor]: gl.SRC_COLOR,\\n    [SrcAlphaFactor]: gl.SRC_ALPHA,\\n    [SrcAlphaSaturateFactor]: gl.SRC_ALPHA_SATURATE,\\n    [DstColorFactor]: gl.DST_COLOR,\\n    [DstAlphaFactor]: gl.DST_ALPHA,\\n    [OneMinusSrcColorFactor]: gl.ONE_MINUS_SRC_COLOR,\\n    [OneMinusSrcAlphaFactor]: gl.ONE_MINUS_SRC_ALPHA,\\n    [OneMinusDstColorFactor]: gl.ONE_MINUS_DST_COLOR,\\n    [OneMinusDstAlphaFactor]: gl.ONE_MINUS_DST_ALPHA\\n  };\\n  function setBlending(blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha) {\\n    if (blending === NoBlending) {\\n      if (currentBlendingEnabled === true) {\\n        disable(gl.BLEND);\\n        currentBlendingEnabled = false;\\n      }\\n      return;\\n    }\\n    if (currentBlendingEnabled === false) {\\n      enable(gl.BLEND);\\n      currentBlendingEnabled = true;\\n    }\\n    if (blending !== CustomBlending) {\\n      if (blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha) {\\n        if (currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation) {\\n          gl.blendEquation(gl.FUNC_ADD);\\n          currentBlendEquation = AddEquation;\\n          currentBlendEquationAlpha = AddEquation;\\n        }\\n        if (premultipliedAlpha) {\\n          switch (blending) {\\n            case NormalBlending:\\n              gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\\n              break;\\n            case AdditiveBlending:\\n              gl.blendFunc(gl.ONE, gl.ONE);\\n              break;\\n            case SubtractiveBlending:\\n              gl.blendFuncSeparate(gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA);\\n              break;\\n            case MultiplyBlending:\\n              gl.blendFuncSeparate(gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA);\\n              break;\\n            default:\\n              console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\", blending);\\n              break;\\n          }\\n        } else {\\n          switch (blending) {\\n            case NormalBlending:\\n              gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\\n              break;\\n            case AdditiveBlending:\\n              gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\\n              break;\\n            case SubtractiveBlending:\\n              gl.blendFunc(gl.ZERO, gl.ONE_MINUS_SRC_COLOR);\\n              break;\\n            case MultiplyBlending:\\n              gl.blendFunc(gl.ZERO, gl.SRC_COLOR);\\n              break;\\n            default:\\n              console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\", blending);\\n              break;\\n          }\\n        }\\n        currentBlendSrc = null;\\n        currentBlendDst = null;\\n        currentBlendSrcAlpha = null;\\n        currentBlendDstAlpha = null;\\n        currentBlending = blending;\\n        currentPremultipledAlpha = premultipliedAlpha;\\n      }\\n      return;\\n    }\\n    blendEquationAlpha = blendEquationAlpha || blendEquation;\\n    blendSrcAlpha = blendSrcAlpha || blendSrc;\\n    blendDstAlpha = blendDstAlpha || blendDst;\\n    if (blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha) {\\n      gl.blendEquationSeparate(equationToGL[blendEquation], equationToGL[blendEquationAlpha]);\\n      currentBlendEquation = blendEquation;\\n      currentBlendEquationAlpha = blendEquationAlpha;\\n    }\\n    if (blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha) {\\n      gl.blendFuncSeparate(factorToGL[blendSrc], factorToGL[blendDst], factorToGL[blendSrcAlpha], factorToGL[blendDstAlpha]);\\n      currentBlendSrc = blendSrc;\\n      currentBlendDst = blendDst;\\n      currentBlendSrcAlpha = blendSrcAlpha;\\n      currentBlendDstAlpha = blendDstAlpha;\\n    }\\n    currentBlending = blending;\\n    currentPremultipledAlpha = null;\\n  }\\n  function setMaterial(material, frontFaceCW) {\\n    material.side === DoubleSide ? disable(gl.CULL_FACE) : enable(gl.CULL_FACE);\\n    let flipSided = material.side === BackSide;\\n    if (frontFaceCW)\\n      flipSided = !flipSided;\\n    setFlipSided(flipSided);\\n    material.blending === NormalBlending && material.transparent === false ? setBlending(NoBlending) : setBlending(material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha);\\n    depthBuffer.setFunc(material.depthFunc);\\n    depthBuffer.setTest(material.depthTest);\\n    depthBuffer.setMask(material.depthWrite);\\n    colorBuffer.setMask(material.colorWrite);\\n    const stencilWrite = material.stencilWrite;\\n    stencilBuffer.setTest(stencilWrite);\\n    if (stencilWrite) {\\n      stencilBuffer.setMask(material.stencilWriteMask);\\n      stencilBuffer.setFunc(material.stencilFunc, material.stencilRef, material.stencilFuncMask);\\n      stencilBuffer.setOp(material.stencilFail, material.stencilZFail, material.stencilZPass);\\n    }\\n    setPolygonOffset(material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits);\\n    material.alphaToCoverage === true ? enable(gl.SAMPLE_ALPHA_TO_COVERAGE) : disable(gl.SAMPLE_ALPHA_TO_COVERAGE);\\n  }\\n  function setFlipSided(flipSided) {\\n    if (currentFlipSided !== flipSided) {\\n      if (flipSided) {\\n        gl.frontFace(gl.CW);\\n      } else {\\n        gl.frontFace(gl.CCW);\\n      }\\n      currentFlipSided = flipSided;\\n    }\\n  }\\n  function setCullFace(cullFace) {\\n    if (cullFace !== CullFaceNone) {\\n      enable(gl.CULL_FACE);\\n      if (cullFace !== currentCullFace) {\\n        if (cullFace === CullFaceBack) {\\n          gl.cullFace(gl.BACK);\\n        } else if (cullFace === CullFaceFront) {\\n          gl.cullFace(gl.FRONT);\\n        } else {\\n          gl.cullFace(gl.FRONT_AND_BACK);\\n        }\\n      }\\n    } else {\\n      disable(gl.CULL_FACE);\\n    }\\n    currentCullFace = cullFace;\\n  }\\n  function setLineWidth(width) {\\n    if (width !== currentLineWidth) {\\n      if (lineWidthAvailable)\\n        gl.lineWidth(width);\\n      currentLineWidth = width;\\n    }\\n  }\\n  function setPolygonOffset(polygonOffset, factor, units) {\\n    if (polygonOffset) {\\n      enable(gl.POLYGON_OFFSET_FILL);\\n      if (currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units) {\\n        gl.polygonOffset(factor, units);\\n        currentPolygonOffsetFactor = factor;\\n        currentPolygonOffsetUnits = units;\\n      }\\n    } else {\\n      disable(gl.POLYGON_OFFSET_FILL);\\n    }\\n  }\\n  function setScissorTest(scissorTest) {\\n    if (scissorTest) {\\n      enable(gl.SCISSOR_TEST);\\n    } else {\\n      disable(gl.SCISSOR_TEST);\\n    }\\n  }\\n  function activeTexture(webglSlot) {\\n    if (webglSlot === void 0)\\n      webglSlot = gl.TEXTURE0 + maxTextures - 1;\\n    if (currentTextureSlot !== webglSlot) {\\n      gl.activeTexture(webglSlot);\\n      currentTextureSlot = webglSlot;\\n    }\\n  }\\n  function bindTexture(webglType, webglTexture) {\\n    if (currentTextureSlot === null) {\\n      activeTexture();\\n    }\\n    let boundTexture = currentBoundTextures[currentTextureSlot];\\n    if (boundTexture === void 0) {\\n      boundTexture = {type: void 0, texture: void 0};\\n      currentBoundTextures[currentTextureSlot] = boundTexture;\\n    }\\n    if (boundTexture.type !== webglType || boundTexture.texture !== webglTexture) {\\n      gl.bindTexture(webglType, webglTexture || emptyTextures[webglType]);\\n      boundTexture.type = webglType;\\n      boundTexture.texture = webglTexture;\\n    }\\n  }\\n  function unbindTexture() {\\n    const boundTexture = currentBoundTextures[currentTextureSlot];\\n    if (boundTexture !== void 0 && boundTexture.type !== void 0) {\\n      gl.bindTexture(boundTexture.type, null);\\n      boundTexture.type = void 0;\\n      boundTexture.texture = void 0;\\n    }\\n  }\\n  function compressedTexImage2D() {\\n    try {\\n      gl.compressedTexImage2D.apply(gl, arguments);\\n    } catch (error) {\\n      console.error(\\\\\\\"THREE.WebGLState:\\\\\\\", error);\\n    }\\n  }\\n  function texImage2D() {\\n    try {\\n      gl.texImage2D.apply(gl, arguments);\\n    } catch (error) {\\n      console.error(\\\\\\\"THREE.WebGLState:\\\\\\\", error);\\n    }\\n  }\\n  function texImage3D() {\\n    try {\\n      gl.texImage3D.apply(gl, arguments);\\n    } catch (error) {\\n      console.error(\\\\\\\"THREE.WebGLState:\\\\\\\", error);\\n    }\\n  }\\n  function scissor(scissor2) {\\n    if (currentScissor.equals(scissor2) === false) {\\n      gl.scissor(scissor2.x, scissor2.y, scissor2.z, scissor2.w);\\n      currentScissor.copy(scissor2);\\n    }\\n  }\\n  function viewport(viewport2) {\\n    if (currentViewport.equals(viewport2) === false) {\\n      gl.viewport(viewport2.x, viewport2.y, viewport2.z, viewport2.w);\\n      currentViewport.copy(viewport2);\\n    }\\n  }\\n  function reset() {\\n    gl.disable(gl.BLEND);\\n    gl.disable(gl.CULL_FACE);\\n    gl.disable(gl.DEPTH_TEST);\\n    gl.disable(gl.POLYGON_OFFSET_FILL);\\n    gl.disable(gl.SCISSOR_TEST);\\n    gl.disable(gl.STENCIL_TEST);\\n    gl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE);\\n    gl.blendEquation(gl.FUNC_ADD);\\n    gl.blendFunc(gl.ONE, gl.ZERO);\\n    gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO);\\n    gl.colorMask(true, true, true, true);\\n    gl.clearColor(0, 0, 0, 0);\\n    gl.depthMask(true);\\n    gl.depthFunc(gl.LESS);\\n    gl.clearDepth(1);\\n    gl.stencilMask(4294967295);\\n    gl.stencilFunc(gl.ALWAYS, 0, 4294967295);\\n    gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\\n    gl.clearStencil(0);\\n    gl.cullFace(gl.BACK);\\n    gl.frontFace(gl.CCW);\\n    gl.polygonOffset(0, 0);\\n    gl.activeTexture(gl.TEXTURE0);\\n    gl.bindFramebuffer(gl.FRAMEBUFFER, null);\\n    if (isWebGL2 === true) {\\n      gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);\\n      gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\\n    }\\n    gl.useProgram(null);\\n    gl.lineWidth(1);\\n    gl.scissor(0, 0, gl.canvas.width, gl.canvas.height);\\n    gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\\n    enabledCapabilities = {};\\n    currentTextureSlot = null;\\n    currentBoundTextures = {};\\n    xrFramebuffer = null;\\n    currentBoundFramebuffers = {};\\n    currentProgram = null;\\n    currentBlendingEnabled = false;\\n    currentBlending = null;\\n    currentBlendEquation = null;\\n    currentBlendSrc = null;\\n    currentBlendDst = null;\\n    currentBlendEquationAlpha = null;\\n    currentBlendSrcAlpha = null;\\n    currentBlendDstAlpha = null;\\n    currentPremultipledAlpha = false;\\n    currentFlipSided = null;\\n    currentCullFace = null;\\n    currentLineWidth = null;\\n    currentPolygonOffsetFactor = null;\\n    currentPolygonOffsetUnits = null;\\n    currentScissor.set(0, 0, gl.canvas.width, gl.canvas.height);\\n    currentViewport.set(0, 0, gl.canvas.width, gl.canvas.height);\\n    colorBuffer.reset();\\n    depthBuffer.reset();\\n    stencilBuffer.reset();\\n  }\\n  return {\\n    buffers: {\\n      color: colorBuffer,\\n      depth: depthBuffer,\\n      stencil: stencilBuffer\\n    },\\n    enable,\\n    disable,\\n    bindFramebuffer,\\n    bindXRFramebuffer,\\n    useProgram,\\n    setBlending,\\n    setMaterial,\\n    setFlipSided,\\n    setCullFace,\\n    setLineWidth,\\n    setPolygonOffset,\\n    setScissorTest,\\n    activeTexture,\\n    bindTexture,\\n    unbindTexture,\\n    compressedTexImage2D,\\n    texImage2D,\\n    texImage3D,\\n    scissor,\\n    viewport,\\n    reset\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLTextures.js\\nfunction WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info) {\\n  const isWebGL2 = capabilities.isWebGL2;\\n  const maxTextures = capabilities.maxTextures;\\n  const maxCubemapSize = capabilities.maxCubemapSize;\\n  const maxTextureSize = capabilities.maxTextureSize;\\n  const maxSamples = capabilities.maxSamples;\\n  const _videoTextures = new WeakMap();\\n  let _canvas2;\\n  let useOffscreenCanvas = false;\\n  try {\\n    useOffscreenCanvas = typeof OffscreenCanvas !== \\\\\\\"undefined\\\\\\\" && new OffscreenCanvas(1, 1).getContext(\\\\\\\"2d\\\\\\\") !== null;\\n  } catch (err) {\\n  }\\n  function createCanvas(width, height) {\\n    return useOffscreenCanvas ? new OffscreenCanvas(width, height) : createElementNS(\\\\\\\"canvas\\\\\\\");\\n  }\\n  function resizeImage(image, needsPowerOfTwo, needsNewCanvas, maxSize) {\\n    let scale = 1;\\n    if (image.width > maxSize || image.height > maxSize) {\\n      scale = maxSize / Math.max(image.width, image.height);\\n    }\\n    if (scale < 1 || needsPowerOfTwo === true) {\\n      if (typeof HTMLImageElement !== \\\\\\\"undefined\\\\\\\" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== \\\\\\\"undefined\\\\\\\" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== \\\\\\\"undefined\\\\\\\" && image instanceof ImageBitmap) {\\n        const floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor;\\n        const width = floor(scale * image.width);\\n        const height = floor(scale * image.height);\\n        if (_canvas2 === void 0)\\n          _canvas2 = createCanvas(width, height);\\n        const canvas = needsNewCanvas ? createCanvas(width, height) : _canvas2;\\n        canvas.width = width;\\n        canvas.height = height;\\n        const context = canvas.getContext(\\\\\\\"2d\\\\\\\");\\n        context.drawImage(image, 0, 0, width, height);\\n        console.warn(\\\\\\\"THREE.WebGLRenderer: Texture has been resized from (\\\\\\\" + image.width + \\\\\\\"x\\\\\\\" + image.height + \\\\\\\") to (\\\\\\\" + width + \\\\\\\"x\\\\\\\" + height + \\\\\\\").\\\\\\\");\\n        return canvas;\\n      } else {\\n        if (\\\\\\\"data\\\\\\\" in image) {\\n          console.warn(\\\\\\\"THREE.WebGLRenderer: Image in DataTexture is too big (\\\\\\\" + image.width + \\\\\\\"x\\\\\\\" + image.height + \\\\\\\").\\\\\\\");\\n        }\\n        return image;\\n      }\\n    }\\n    return image;\\n  }\\n  function isPowerOfTwo2(image) {\\n    return isPowerOfTwo(image.width) && isPowerOfTwo(image.height);\\n  }\\n  function textureNeedsPowerOfTwo(texture) {\\n    if (isWebGL2)\\n      return false;\\n    return texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping || texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\\n  }\\n  function textureNeedsGenerateMipmaps(texture, supportsMips) {\\n    return texture.generateMipmaps && supportsMips && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\\n  }\\n  function generateMipmap(target, texture, width, height, depth2 = 1) {\\n    _gl.generateMipmap(target);\\n    const textureProperties = properties.get(texture);\\n    textureProperties.__maxMipLevel = Math.log2(Math.max(width, height, depth2));\\n  }\\n  function getInternalFormat(internalFormatName, glFormat, glType, encoding) {\\n    if (isWebGL2 === false)\\n      return glFormat;\\n    if (internalFormatName !== null) {\\n      if (_gl[internalFormatName] !== void 0)\\n        return _gl[internalFormatName];\\n      console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\\\\\\\" + internalFormatName + \\\\\\\"'\\\\\\\");\\n    }\\n    let internalFormat = glFormat;\\n    if (glFormat === _gl.RED) {\\n      if (glType === _gl.FLOAT)\\n        internalFormat = _gl.R32F;\\n      if (glType === _gl.HALF_FLOAT)\\n        internalFormat = _gl.R16F;\\n      if (glType === _gl.UNSIGNED_BYTE)\\n        internalFormat = _gl.R8;\\n    }\\n    if (glFormat === _gl.RGB) {\\n      if (glType === _gl.FLOAT)\\n        internalFormat = _gl.RGB32F;\\n      if (glType === _gl.HALF_FLOAT)\\n        internalFormat = _gl.RGB16F;\\n      if (glType === _gl.UNSIGNED_BYTE)\\n        internalFormat = _gl.RGB8;\\n    }\\n    if (glFormat === _gl.RGBA) {\\n      if (glType === _gl.FLOAT)\\n        internalFormat = _gl.RGBA32F;\\n      if (glType === _gl.HALF_FLOAT)\\n        internalFormat = _gl.RGBA16F;\\n      if (glType === _gl.UNSIGNED_BYTE)\\n        internalFormat = encoding === sRGBEncoding ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;\\n    }\\n    if (internalFormat === _gl.R16F || internalFormat === _gl.R32F || internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F) {\\n      extensions.get(\\\\\\\"EXT_color_buffer_float\\\\\\\");\\n    }\\n    return internalFormat;\\n  }\\n  function filterFallback(f) {\\n    if (f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter) {\\n      return _gl.NEAREST;\\n    }\\n    return _gl.LINEAR;\\n  }\\n  function onTextureDispose(event) {\\n    const texture = event.target;\\n    texture.removeEventListener(\\\\\\\"dispose\\\\\\\", onTextureDispose);\\n    deallocateTexture(texture);\\n    if (texture.isVideoTexture) {\\n      _videoTextures.delete(texture);\\n    }\\n    info.memory.textures--;\\n  }\\n  function onRenderTargetDispose(event) {\\n    const renderTarget = event.target;\\n    renderTarget.removeEventListener(\\\\\\\"dispose\\\\\\\", onRenderTargetDispose);\\n    deallocateRenderTarget(renderTarget);\\n  }\\n  function deallocateTexture(texture) {\\n    const textureProperties = properties.get(texture);\\n    if (textureProperties.__webglInit === void 0)\\n      return;\\n    _gl.deleteTexture(textureProperties.__webglTexture);\\n    properties.remove(texture);\\n  }\\n  function deallocateRenderTarget(renderTarget) {\\n    const texture = renderTarget.texture;\\n    const renderTargetProperties = properties.get(renderTarget);\\n    const textureProperties = properties.get(texture);\\n    if (!renderTarget)\\n      return;\\n    if (textureProperties.__webglTexture !== void 0) {\\n      _gl.deleteTexture(textureProperties.__webglTexture);\\n      info.memory.textures--;\\n    }\\n    if (renderTarget.depthTexture) {\\n      renderTarget.depthTexture.dispose();\\n    }\\n    if (renderTarget.isWebGLCubeRenderTarget) {\\n      for (let i = 0; i < 6; i++) {\\n        _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]);\\n        if (renderTargetProperties.__webglDepthbuffer)\\n          _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i]);\\n      }\\n    } else {\\n      _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer);\\n      if (renderTargetProperties.__webglDepthbuffer)\\n        _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer);\\n      if (renderTargetProperties.__webglMultisampledFramebuffer)\\n        _gl.deleteFramebuffer(renderTargetProperties.__webglMultisampledFramebuffer);\\n      if (renderTargetProperties.__webglColorRenderbuffer)\\n        _gl.deleteRenderbuffer(renderTargetProperties.__webglColorRenderbuffer);\\n      if (renderTargetProperties.__webglDepthRenderbuffer)\\n        _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthRenderbuffer);\\n    }\\n    if (renderTarget.isWebGLMultipleRenderTargets) {\\n      for (let i = 0, il = texture.length; i < il; i++) {\\n        const attachmentProperties = properties.get(texture[i]);\\n        if (attachmentProperties.__webglTexture) {\\n          _gl.deleteTexture(attachmentProperties.__webglTexture);\\n          info.memory.textures--;\\n        }\\n        properties.remove(texture[i]);\\n      }\\n    }\\n    properties.remove(texture);\\n    properties.remove(renderTarget);\\n  }\\n  let textureUnits = 0;\\n  function resetTextureUnits() {\\n    textureUnits = 0;\\n  }\\n  function allocateTextureUnit() {\\n    const textureUnit = textureUnits;\\n    if (textureUnit >= maxTextures) {\\n      console.warn(\\\\\\\"THREE.WebGLTextures: Trying to use \\\\\\\" + textureUnit + \\\\\\\" texture units while this GPU supports only \\\\\\\" + maxTextures);\\n    }\\n    textureUnits += 1;\\n    return textureUnit;\\n  }\\n  function setTexture2D(texture, slot) {\\n    const textureProperties = properties.get(texture);\\n    if (texture.isVideoTexture)\\n      updateVideoTexture(texture);\\n    if (texture.version > 0 && textureProperties.__version !== texture.version) {\\n      const image = texture.image;\\n      if (image === void 0) {\\n        console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is undefined\\\\\\\");\\n      } else if (image.complete === false) {\\n        console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\\\\\\\");\\n      } else {\\n        uploadTexture(textureProperties, texture, slot);\\n        return;\\n      }\\n    }\\n    state.activeTexture(_gl.TEXTURE0 + slot);\\n    state.bindTexture(_gl.TEXTURE_2D, textureProperties.__webglTexture);\\n  }\\n  function setTexture2DArray(texture, slot) {\\n    const textureProperties = properties.get(texture);\\n    if (texture.version > 0 && textureProperties.__version !== texture.version) {\\n      uploadTexture(textureProperties, texture, slot);\\n      return;\\n    }\\n    state.activeTexture(_gl.TEXTURE0 + slot);\\n    state.bindTexture(_gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture);\\n  }\\n  function setTexture3D(texture, slot) {\\n    const textureProperties = properties.get(texture);\\n    if (texture.version > 0 && textureProperties.__version !== texture.version) {\\n      uploadTexture(textureProperties, texture, slot);\\n      return;\\n    }\\n    state.activeTexture(_gl.TEXTURE0 + slot);\\n    state.bindTexture(_gl.TEXTURE_3D, textureProperties.__webglTexture);\\n  }\\n  function setTextureCube(texture, slot) {\\n    const textureProperties = properties.get(texture);\\n    if (texture.version > 0 && textureProperties.__version !== texture.version) {\\n      uploadCubeTexture(textureProperties, texture, slot);\\n      return;\\n    }\\n    state.activeTexture(_gl.TEXTURE0 + slot);\\n    state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture);\\n  }\\n  const wrappingToGL = {\\n    [RepeatWrapping]: _gl.REPEAT,\\n    [ClampToEdgeWrapping]: _gl.CLAMP_TO_EDGE,\\n    [MirroredRepeatWrapping]: _gl.MIRRORED_REPEAT\\n  };\\n  const filterToGL = {\\n    [NearestFilter]: _gl.NEAREST,\\n    [NearestMipmapNearestFilter]: _gl.NEAREST_MIPMAP_NEAREST,\\n    [NearestMipmapLinearFilter]: _gl.NEAREST_MIPMAP_LINEAR,\\n    [LinearFilter]: _gl.LINEAR,\\n    [LinearMipmapNearestFilter]: _gl.LINEAR_MIPMAP_NEAREST,\\n    [LinearMipmapLinearFilter]: _gl.LINEAR_MIPMAP_LINEAR\\n  };\\n  function setTextureParameters(textureType, texture, supportsMips) {\\n    if (supportsMips) {\\n      _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[texture.wrapS]);\\n      _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[texture.wrapT]);\\n      if (textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY) {\\n        _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[texture.wrapR]);\\n      }\\n      _gl.texParameteri(textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[texture.magFilter]);\\n      _gl.texParameteri(textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[texture.minFilter]);\\n    } else {\\n      _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE);\\n      _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE);\\n      if (textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY) {\\n        _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_R, _gl.CLAMP_TO_EDGE);\\n      }\\n      if (texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping) {\\n        console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\\\\\\\");\\n      }\\n      _gl.texParameteri(textureType, _gl.TEXTURE_MAG_FILTER, filterFallback(texture.magFilter));\\n      _gl.texParameteri(textureType, _gl.TEXTURE_MIN_FILTER, filterFallback(texture.minFilter));\\n      if (texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter) {\\n        console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\\\\\\\");\\n      }\\n    }\\n    if (extensions.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\") === true) {\\n      const extension = extensions.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");\\n      if (texture.type === FloatType && extensions.has(\\\\\\\"OES_texture_float_linear\\\\\\\") === false)\\n        return;\\n      if (isWebGL2 === false && (texture.type === HalfFloatType && extensions.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\") === false))\\n        return;\\n      if (texture.anisotropy > 1 || properties.get(texture).__currentAnisotropy) {\\n        _gl.texParameterf(textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(texture.anisotropy, capabilities.getMaxAnisotropy()));\\n        properties.get(texture).__currentAnisotropy = texture.anisotropy;\\n      }\\n    }\\n  }\\n  function initTexture(textureProperties, texture) {\\n    if (textureProperties.__webglInit === void 0) {\\n      textureProperties.__webglInit = true;\\n      texture.addEventListener(\\\\\\\"dispose\\\\\\\", onTextureDispose);\\n      textureProperties.__webglTexture = _gl.createTexture();\\n      info.memory.textures++;\\n    }\\n  }\\n  function uploadTexture(textureProperties, texture, slot) {\\n    let textureType = _gl.TEXTURE_2D;\\n    if (texture.isDataTexture2DArray)\\n      textureType = _gl.TEXTURE_2D_ARRAY;\\n    if (texture.isDataTexture3D)\\n      textureType = _gl.TEXTURE_3D;\\n    initTexture(textureProperties, texture);\\n    state.activeTexture(_gl.TEXTURE0 + slot);\\n    state.bindTexture(textureType, textureProperties.__webglTexture);\\n    _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY);\\n    _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha);\\n    _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment);\\n    _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE);\\n    const needsPowerOfTwo = textureNeedsPowerOfTwo(texture) && isPowerOfTwo2(texture.image) === false;\\n    const image = resizeImage(texture.image, needsPowerOfTwo, false, maxTextureSize);\\n    const supportsMips = isPowerOfTwo2(image) || isWebGL2, glFormat = utils.convert(texture.format);\\n    let glType = utils.convert(texture.type), glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding);\\n    setTextureParameters(textureType, texture, supportsMips);\\n    let mipmap;\\n    const mipmaps = texture.mipmaps;\\n    if (texture.isDepthTexture) {\\n      glInternalFormat = _gl.DEPTH_COMPONENT;\\n      if (isWebGL2) {\\n        if (texture.type === FloatType) {\\n          glInternalFormat = _gl.DEPTH_COMPONENT32F;\\n        } else if (texture.type === UnsignedIntType) {\\n          glInternalFormat = _gl.DEPTH_COMPONENT24;\\n        } else if (texture.type === UnsignedInt248Type) {\\n          glInternalFormat = _gl.DEPTH24_STENCIL8;\\n        } else {\\n          glInternalFormat = _gl.DEPTH_COMPONENT16;\\n        }\\n      } else {\\n        if (texture.type === FloatType) {\\n          console.error(\\\\\\\"WebGLRenderer: Floating point depth texture requires WebGL2.\\\\\\\");\\n        }\\n      }\\n      if (texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT) {\\n        if (texture.type !== UnsignedShortType && texture.type !== UnsignedIntType) {\\n          console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\\\\\\\");\\n          texture.type = UnsignedShortType;\\n          glType = utils.convert(texture.type);\\n        }\\n      }\\n      if (texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT) {\\n        glInternalFormat = _gl.DEPTH_STENCIL;\\n        if (texture.type !== UnsignedInt248Type) {\\n          console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\\\\\\\");\\n          texture.type = UnsignedInt248Type;\\n          glType = utils.convert(texture.type);\\n        }\\n      }\\n      state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null);\\n    } else if (texture.isDataTexture) {\\n      if (mipmaps.length > 0 && supportsMips) {\\n        for (let i = 0, il = mipmaps.length; i < il; i++) {\\n          mipmap = mipmaps[i];\\n          state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data);\\n        }\\n        texture.generateMipmaps = false;\\n        textureProperties.__maxMipLevel = mipmaps.length - 1;\\n      } else {\\n        state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data);\\n        textureProperties.__maxMipLevel = 0;\\n      }\\n    } else if (texture.isCompressedTexture) {\\n      for (let i = 0, il = mipmaps.length; i < il; i++) {\\n        mipmap = mipmaps[i];\\n        if (texture.format !== RGBAFormat && texture.format !== RGBFormat) {\\n          if (glFormat !== null) {\\n            state.compressedTexImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data);\\n          } else {\\n            console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\\\\\\\");\\n          }\\n        } else {\\n          state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data);\\n        }\\n      }\\n      textureProperties.__maxMipLevel = mipmaps.length - 1;\\n    } else if (texture.isDataTexture2DArray) {\\n      state.texImage3D(_gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data);\\n      textureProperties.__maxMipLevel = 0;\\n    } else if (texture.isDataTexture3D) {\\n      state.texImage3D(_gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data);\\n      textureProperties.__maxMipLevel = 0;\\n    } else {\\n      if (mipmaps.length > 0 && supportsMips) {\\n        for (let i = 0, il = mipmaps.length; i < il; i++) {\\n          mipmap = mipmaps[i];\\n          state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap);\\n        }\\n        texture.generateMipmaps = false;\\n        textureProperties.__maxMipLevel = mipmaps.length - 1;\\n      } else {\\n        state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image);\\n        textureProperties.__maxMipLevel = 0;\\n      }\\n    }\\n    if (textureNeedsGenerateMipmaps(texture, supportsMips)) {\\n      generateMipmap(textureType, texture, image.width, image.height);\\n    }\\n    textureProperties.__version = texture.version;\\n    if (texture.onUpdate)\\n      texture.onUpdate(texture);\\n  }\\n  function uploadCubeTexture(textureProperties, texture, slot) {\\n    if (texture.image.length !== 6)\\n      return;\\n    initTexture(textureProperties, texture);\\n    state.activeTexture(_gl.TEXTURE0 + slot);\\n    state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture);\\n    _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY);\\n    _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha);\\n    _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment);\\n    _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE);\\n    const isCompressed = texture && (texture.isCompressedTexture || texture.image[0].isCompressedTexture);\\n    const isDataTexture = texture.image[0] && texture.image[0].isDataTexture;\\n    const cubeImage = [];\\n    for (let i = 0; i < 6; i++) {\\n      if (!isCompressed && !isDataTexture) {\\n        cubeImage[i] = resizeImage(texture.image[i], false, true, maxCubemapSize);\\n      } else {\\n        cubeImage[i] = isDataTexture ? texture.image[i].image : texture.image[i];\\n      }\\n    }\\n    const image = cubeImage[0], supportsMips = isPowerOfTwo2(image) || isWebGL2, glFormat = utils.convert(texture.format), glType = utils.convert(texture.type), glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding);\\n    setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture, supportsMips);\\n    let mipmaps;\\n    if (isCompressed) {\\n      for (let i = 0; i < 6; i++) {\\n        mipmaps = cubeImage[i].mipmaps;\\n        for (let j = 0; j < mipmaps.length; j++) {\\n          const mipmap = mipmaps[j];\\n          if (texture.format !== RGBAFormat && texture.format !== RGBFormat) {\\n            if (glFormat !== null) {\\n              state.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data);\\n            } else {\\n              console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\\\\\\\");\\n            }\\n          } else {\\n            state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data);\\n          }\\n        }\\n      }\\n      textureProperties.__maxMipLevel = mipmaps.length - 1;\\n    } else {\\n      mipmaps = texture.mipmaps;\\n      for (let i = 0; i < 6; i++) {\\n        if (isDataTexture) {\\n          state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[i].width, cubeImage[i].height, 0, glFormat, glType, cubeImage[i].data);\\n          for (let j = 0; j < mipmaps.length; j++) {\\n            const mipmap = mipmaps[j];\\n            const mipmapImage = mipmap.image[i].image;\\n            state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data);\\n          }\\n        } else {\\n          state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[i]);\\n          for (let j = 0; j < mipmaps.length; j++) {\\n            const mipmap = mipmaps[j];\\n            state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[i]);\\n          }\\n        }\\n      }\\n      textureProperties.__maxMipLevel = mipmaps.length;\\n    }\\n    if (textureNeedsGenerateMipmaps(texture, supportsMips)) {\\n      generateMipmap(_gl.TEXTURE_CUBE_MAP, texture, image.width, image.height);\\n    }\\n    textureProperties.__version = texture.version;\\n    if (texture.onUpdate)\\n      texture.onUpdate(texture);\\n  }\\n  function setupFrameBufferTexture(framebuffer, renderTarget, texture, attachment, textureTarget) {\\n    const glFormat = utils.convert(texture.format);\\n    const glType = utils.convert(texture.type);\\n    const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding);\\n    if (textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY) {\\n      state.texImage3D(textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null);\\n    } else {\\n      state.texImage2D(textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null);\\n    }\\n    state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer);\\n    _gl.framebufferTexture2D(_gl.FRAMEBUFFER, attachment, textureTarget, properties.get(texture).__webglTexture, 0);\\n    state.bindFramebuffer(_gl.FRAMEBUFFER, null);\\n  }\\n  function setupRenderBufferStorage(renderbuffer, renderTarget, isMultisample) {\\n    _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderbuffer);\\n    if (renderTarget.depthBuffer && !renderTarget.stencilBuffer) {\\n      let glInternalFormat = _gl.DEPTH_COMPONENT16;\\n      if (isMultisample) {\\n        const depthTexture = renderTarget.depthTexture;\\n        if (depthTexture && depthTexture.isDepthTexture) {\\n          if (depthTexture.type === FloatType) {\\n            glInternalFormat = _gl.DEPTH_COMPONENT32F;\\n          } else if (depthTexture.type === UnsignedIntType) {\\n            glInternalFormat = _gl.DEPTH_COMPONENT24;\\n          }\\n        }\\n        const samples = getRenderTargetSamples(renderTarget);\\n        _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height);\\n      } else {\\n        _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height);\\n      }\\n      _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer);\\n    } else if (renderTarget.depthBuffer && renderTarget.stencilBuffer) {\\n      if (isMultisample) {\\n        const samples = getRenderTargetSamples(renderTarget);\\n        _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height);\\n      } else {\\n        _gl.renderbufferStorage(_gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height);\\n      }\\n      _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer);\\n    } else {\\n      const texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[0] : renderTarget.texture;\\n      const glFormat = utils.convert(texture.format);\\n      const glType = utils.convert(texture.type);\\n      const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding);\\n      if (isMultisample) {\\n        const samples = getRenderTargetSamples(renderTarget);\\n        _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height);\\n      } else {\\n        _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height);\\n      }\\n    }\\n    _gl.bindRenderbuffer(_gl.RENDERBUFFER, null);\\n  }\\n  function setupDepthTexture(framebuffer, renderTarget) {\\n    const isCube = renderTarget && renderTarget.isWebGLCubeRenderTarget;\\n    if (isCube)\\n      throw new Error(\\\\\\\"Depth Texture with cube render targets is not supported\\\\\\\");\\n    state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer);\\n    if (!(renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture)) {\\n      throw new Error(\\\\\\\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\\\\\\\");\\n    }\\n    if (!properties.get(renderTarget.depthTexture).__webglTexture || renderTarget.depthTexture.image.width !== renderTarget.width || renderTarget.depthTexture.image.height !== renderTarget.height) {\\n      renderTarget.depthTexture.image.width = renderTarget.width;\\n      renderTarget.depthTexture.image.height = renderTarget.height;\\n      renderTarget.depthTexture.needsUpdate = true;\\n    }\\n    setTexture2D(renderTarget.depthTexture, 0);\\n    const webglDepthTexture = properties.get(renderTarget.depthTexture).__webglTexture;\\n    if (renderTarget.depthTexture.format === DepthFormat) {\\n      _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0);\\n    } else if (renderTarget.depthTexture.format === DepthStencilFormat) {\\n      _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0);\\n    } else {\\n      throw new Error(\\\\\\\"Unknown depthTexture format\\\\\\\");\\n    }\\n  }\\n  function setupDepthRenderbuffer(renderTarget) {\\n    const renderTargetProperties = properties.get(renderTarget);\\n    const isCube = renderTarget.isWebGLCubeRenderTarget === true;\\n    if (renderTarget.depthTexture) {\\n      if (isCube)\\n        throw new Error(\\\\\\\"target.depthTexture not supported in Cube render targets\\\\\\\");\\n      setupDepthTexture(renderTargetProperties.__webglFramebuffer, renderTarget);\\n    } else {\\n      if (isCube) {\\n        renderTargetProperties.__webglDepthbuffer = [];\\n        for (let i = 0; i < 6; i++) {\\n          state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[i]);\\n          renderTargetProperties.__webglDepthbuffer[i] = _gl.createRenderbuffer();\\n          setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer[i], renderTarget, false);\\n        }\\n      } else {\\n        state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer);\\n        renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\\n        setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer, renderTarget, false);\\n      }\\n    }\\n    state.bindFramebuffer(_gl.FRAMEBUFFER, null);\\n  }\\n  function setupRenderTarget(renderTarget) {\\n    const texture = renderTarget.texture;\\n    const renderTargetProperties = properties.get(renderTarget);\\n    const textureProperties = properties.get(texture);\\n    renderTarget.addEventListener(\\\\\\\"dispose\\\\\\\", onRenderTargetDispose);\\n    if (renderTarget.isWebGLMultipleRenderTargets !== true) {\\n      textureProperties.__webglTexture = _gl.createTexture();\\n      textureProperties.__version = texture.version;\\n      info.memory.textures++;\\n    }\\n    const isCube = renderTarget.isWebGLCubeRenderTarget === true;\\n    const isMultipleRenderTargets = renderTarget.isWebGLMultipleRenderTargets === true;\\n    const isMultisample = renderTarget.isWebGLMultisampleRenderTarget === true;\\n    const isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;\\n    const supportsMips = isPowerOfTwo2(renderTarget) || isWebGL2;\\n    if (isWebGL2 && texture.format === RGBFormat && (texture.type === FloatType || texture.type === HalfFloatType)) {\\n      texture.format = RGBAFormat;\\n      console.warn(\\\\\\\"THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.\\\\\\\");\\n    }\\n    if (isCube) {\\n      renderTargetProperties.__webglFramebuffer = [];\\n      for (let i = 0; i < 6; i++) {\\n        renderTargetProperties.__webglFramebuffer[i] = _gl.createFramebuffer();\\n      }\\n    } else {\\n      renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\\n      if (isMultipleRenderTargets) {\\n        if (capabilities.drawBuffers) {\\n          const textures = renderTarget.texture;\\n          for (let i = 0, il = textures.length; i < il; i++) {\\n            const attachmentProperties = properties.get(textures[i]);\\n            if (attachmentProperties.__webglTexture === void 0) {\\n              attachmentProperties.__webglTexture = _gl.createTexture();\\n              info.memory.textures++;\\n            }\\n          }\\n        } else {\\n          console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\\\\\\\");\\n        }\\n      } else if (isMultisample) {\\n        if (isWebGL2) {\\n          renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\\n          renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\\n          _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer);\\n          const glFormat = utils.convert(texture.format);\\n          const glType = utils.convert(texture.type);\\n          const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding);\\n          const samples = getRenderTargetSamples(renderTarget);\\n          _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height);\\n          state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer);\\n          _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer);\\n          _gl.bindRenderbuffer(_gl.RENDERBUFFER, null);\\n          if (renderTarget.depthBuffer) {\\n            renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\\n            setupRenderBufferStorage(renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true);\\n          }\\n          state.bindFramebuffer(_gl.FRAMEBUFFER, null);\\n        } else {\\n          console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\");\\n        }\\n      }\\n    }\\n    if (isCube) {\\n      state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture);\\n      setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture, supportsMips);\\n      for (let i = 0; i < 6; i++) {\\n        setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i);\\n      }\\n      if (textureNeedsGenerateMipmaps(texture, supportsMips)) {\\n        generateMipmap(_gl.TEXTURE_CUBE_MAP, texture, renderTarget.width, renderTarget.height);\\n      }\\n      state.unbindTexture();\\n    } else if (isMultipleRenderTargets) {\\n      const textures = renderTarget.texture;\\n      for (let i = 0, il = textures.length; i < il; i++) {\\n        const attachment = textures[i];\\n        const attachmentProperties = properties.get(attachment);\\n        state.bindTexture(_gl.TEXTURE_2D, attachmentProperties.__webglTexture);\\n        setTextureParameters(_gl.TEXTURE_2D, attachment, supportsMips);\\n        setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D);\\n        if (textureNeedsGenerateMipmaps(attachment, supportsMips)) {\\n          generateMipmap(_gl.TEXTURE_2D, attachment, renderTarget.width, renderTarget.height);\\n        }\\n      }\\n      state.unbindTexture();\\n    } else {\\n      let glTextureType = _gl.TEXTURE_2D;\\n      if (isRenderTarget3D) {\\n        if (isWebGL2) {\\n          const isTexture3D = texture.isDataTexture3D;\\n          glTextureType = isTexture3D ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\\n        } else {\\n          console.warn(\\\\\\\"THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.\\\\\\\");\\n        }\\n      }\\n      state.bindTexture(glTextureType, textureProperties.__webglTexture);\\n      setTextureParameters(glTextureType, texture, supportsMips);\\n      setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType);\\n      if (textureNeedsGenerateMipmaps(texture, supportsMips)) {\\n        generateMipmap(glTextureType, texture, renderTarget.width, renderTarget.height, renderTarget.depth);\\n      }\\n      state.unbindTexture();\\n    }\\n    if (renderTarget.depthBuffer) {\\n      setupDepthRenderbuffer(renderTarget);\\n    }\\n  }\\n  function updateRenderTargetMipmap(renderTarget) {\\n    const supportsMips = isPowerOfTwo2(renderTarget) || isWebGL2;\\n    const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [renderTarget.texture];\\n    for (let i = 0, il = textures.length; i < il; i++) {\\n      const texture = textures[i];\\n      if (textureNeedsGenerateMipmaps(texture, supportsMips)) {\\n        const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\\n        const webglTexture = properties.get(texture).__webglTexture;\\n        state.bindTexture(target, webglTexture);\\n        generateMipmap(target, texture, renderTarget.width, renderTarget.height);\\n        state.unbindTexture();\\n      }\\n    }\\n  }\\n  function updateMultisampleRenderTarget(renderTarget) {\\n    if (renderTarget.isWebGLMultisampleRenderTarget) {\\n      if (isWebGL2) {\\n        const width = renderTarget.width;\\n        const height = renderTarget.height;\\n        let mask = _gl.COLOR_BUFFER_BIT;\\n        if (renderTarget.depthBuffer)\\n          mask |= _gl.DEPTH_BUFFER_BIT;\\n        if (renderTarget.stencilBuffer)\\n          mask |= _gl.STENCIL_BUFFER_BIT;\\n        const renderTargetProperties = properties.get(renderTarget);\\n        state.bindFramebuffer(_gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer);\\n        state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer);\\n        _gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST);\\n        state.bindFramebuffer(_gl.READ_FRAMEBUFFER, null);\\n        state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer);\\n      } else {\\n        console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\");\\n      }\\n    }\\n  }\\n  function getRenderTargetSamples(renderTarget) {\\n    return isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ? Math.min(maxSamples, renderTarget.samples) : 0;\\n  }\\n  function updateVideoTexture(texture) {\\n    const frame = info.render.frame;\\n    if (_videoTextures.get(texture) !== frame) {\\n      _videoTextures.set(texture, frame);\\n      texture.update();\\n    }\\n  }\\n  let warnedTexture2D = false;\\n  let warnedTextureCube = false;\\n  function safeSetTexture2D(texture, slot) {\\n    if (texture && texture.isWebGLRenderTarget) {\\n      if (warnedTexture2D === false) {\\n        console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\\\\\\\");\\n        warnedTexture2D = true;\\n      }\\n      texture = texture.texture;\\n    }\\n    setTexture2D(texture, slot);\\n  }\\n  function safeSetTextureCube(texture, slot) {\\n    if (texture && texture.isWebGLCubeRenderTarget) {\\n      if (warnedTextureCube === false) {\\n        console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\\\\\\\");\\n        warnedTextureCube = true;\\n      }\\n      texture = texture.texture;\\n    }\\n    setTextureCube(texture, slot);\\n  }\\n  this.allocateTextureUnit = allocateTextureUnit;\\n  this.resetTextureUnits = resetTextureUnits;\\n  this.setTexture2D = setTexture2D;\\n  this.setTexture2DArray = setTexture2DArray;\\n  this.setTexture3D = setTexture3D;\\n  this.setTextureCube = setTextureCube;\\n  this.setupRenderTarget = setupRenderTarget;\\n  this.updateRenderTargetMipmap = updateRenderTargetMipmap;\\n  this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\\n  this.safeSetTexture2D = safeSetTexture2D;\\n  this.safeSetTextureCube = safeSetTextureCube;\\n}\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLUtils.js\\nfunction WebGLUtils(gl, extensions, capabilities) {\\n  const isWebGL2 = capabilities.isWebGL2;\\n  function convert(p) {\\n    let extension;\\n    if (p === UnsignedByteType)\\n      return gl.UNSIGNED_BYTE;\\n    if (p === UnsignedShort4444Type)\\n      return gl.UNSIGNED_SHORT_4_4_4_4;\\n    if (p === UnsignedShort5551Type)\\n      return gl.UNSIGNED_SHORT_5_5_5_1;\\n    if (p === UnsignedShort565Type)\\n      return gl.UNSIGNED_SHORT_5_6_5;\\n    if (p === ByteType)\\n      return gl.BYTE;\\n    if (p === ShortType)\\n      return gl.SHORT;\\n    if (p === UnsignedShortType)\\n      return gl.UNSIGNED_SHORT;\\n    if (p === IntType)\\n      return gl.INT;\\n    if (p === UnsignedIntType)\\n      return gl.UNSIGNED_INT;\\n    if (p === FloatType)\\n      return gl.FLOAT;\\n    if (p === HalfFloatType) {\\n      if (isWebGL2)\\n        return gl.HALF_FLOAT;\\n      extension = extensions.get(\\\\\\\"OES_texture_half_float\\\\\\\");\\n      if (extension !== null) {\\n        return extension.HALF_FLOAT_OES;\\n      } else {\\n        return null;\\n      }\\n    }\\n    if (p === AlphaFormat)\\n      return gl.ALPHA;\\n    if (p === RGBFormat)\\n      return gl.RGB;\\n    if (p === RGBAFormat)\\n      return gl.RGBA;\\n    if (p === LuminanceFormat)\\n      return gl.LUMINANCE;\\n    if (p === LuminanceAlphaFormat)\\n      return gl.LUMINANCE_ALPHA;\\n    if (p === DepthFormat)\\n      return gl.DEPTH_COMPONENT;\\n    if (p === DepthStencilFormat)\\n      return gl.DEPTH_STENCIL;\\n    if (p === RedFormat)\\n      return gl.RED;\\n    if (p === RedIntegerFormat)\\n      return gl.RED_INTEGER;\\n    if (p === RGFormat)\\n      return gl.RG;\\n    if (p === RGIntegerFormat)\\n      return gl.RG_INTEGER;\\n    if (p === RGBIntegerFormat)\\n      return gl.RGB_INTEGER;\\n    if (p === RGBAIntegerFormat)\\n      return gl.RGBA_INTEGER;\\n    if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) {\\n      extension = extensions.get(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\");\\n      if (extension !== null) {\\n        if (p === RGB_S3TC_DXT1_Format)\\n          return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\\n        if (p === RGBA_S3TC_DXT1_Format)\\n          return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\\n        if (p === RGBA_S3TC_DXT3_Format)\\n          return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\\n        if (p === RGBA_S3TC_DXT5_Format)\\n          return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\\n      } else {\\n        return null;\\n      }\\n    }\\n    if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) {\\n      extension = extensions.get(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\");\\n      if (extension !== null) {\\n        if (p === RGB_PVRTC_4BPPV1_Format)\\n          return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\\n        if (p === RGB_PVRTC_2BPPV1_Format)\\n          return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\\n        if (p === RGBA_PVRTC_4BPPV1_Format)\\n          return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\\n        if (p === RGBA_PVRTC_2BPPV1_Format)\\n          return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\\n      } else {\\n        return null;\\n      }\\n    }\\n    if (p === RGB_ETC1_Format) {\\n      extension = extensions.get(\\\\\\\"WEBGL_compressed_texture_etc1\\\\\\\");\\n      if (extension !== null) {\\n        return extension.COMPRESSED_RGB_ETC1_WEBGL;\\n      } else {\\n        return null;\\n      }\\n    }\\n    if (p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) {\\n      extension = extensions.get(\\\\\\\"WEBGL_compressed_texture_etc\\\\\\\");\\n      if (extension !== null) {\\n        if (p === RGB_ETC2_Format)\\n          return extension.COMPRESSED_RGB8_ETC2;\\n        if (p === RGBA_ETC2_EAC_Format)\\n          return extension.COMPRESSED_RGBA8_ETC2_EAC;\\n      }\\n    }\\n    if (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format || p === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format || p === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format || p === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format || p === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format || p === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format) {\\n      extension = extensions.get(\\\\\\\"WEBGL_compressed_texture_astc\\\\\\\");\\n      if (extension !== null) {\\n        return p;\\n      } else {\\n        return null;\\n      }\\n    }\\n    if (p === RGBA_BPTC_Format) {\\n      extension = extensions.get(\\\\\\\"EXT_texture_compression_bptc\\\\\\\");\\n      if (extension !== null) {\\n        return p;\\n      } else {\\n        return null;\\n      }\\n    }\\n    if (p === UnsignedInt248Type) {\\n      if (isWebGL2)\\n        return gl.UNSIGNED_INT_24_8;\\n      extension = extensions.get(\\\\\\\"WEBGL_depth_texture\\\\\\\");\\n      if (extension !== null) {\\n        return extension.UNSIGNED_INT_24_8_WEBGL;\\n      } else {\\n        return null;\\n      }\\n    }\\n  }\\n  return {convert};\\n}\\n\\n// ../../../node_modules/three/src/cameras/ArrayCamera.js\\nvar ArrayCamera = class extends PerspectiveCamera {\\n  constructor(array = []) {\\n    super();\\n    this.cameras = array;\\n  }\\n};\\nArrayCamera.prototype.isArrayCamera = true;\\n\\n// ../../../node_modules/three/src/objects/Group.js\\nvar Group = class extends Object3D {\\n  constructor() {\\n    super();\\n    this.type = \\\\\\\"Group\\\\\\\";\\n  }\\n};\\nGroup.prototype.isGroup = true;\\n\\n// ../../../node_modules/three/src/renderers/webxr/WebXRController.js\\nvar _moveEvent = {type: \\\\\\\"move\\\\\\\"};\\nvar WebXRController = class {\\n  constructor() {\\n    this._targetRay = null;\\n    this._grip = null;\\n    this._hand = null;\\n  }\\n  getHandSpace() {\\n    if (this._hand === null) {\\n      this._hand = new Group();\\n      this._hand.matrixAutoUpdate = false;\\n      this._hand.visible = false;\\n      this._hand.joints = {};\\n      this._hand.inputState = {pinching: false};\\n    }\\n    return this._hand;\\n  }\\n  getTargetRaySpace() {\\n    if (this._targetRay === null) {\\n      this._targetRay = new Group();\\n      this._targetRay.matrixAutoUpdate = false;\\n      this._targetRay.visible = false;\\n      this._targetRay.hasLinearVelocity = false;\\n      this._targetRay.linearVelocity = new Vector3();\\n      this._targetRay.hasAngularVelocity = false;\\n      this._targetRay.angularVelocity = new Vector3();\\n    }\\n    return this._targetRay;\\n  }\\n  getGripSpace() {\\n    if (this._grip === null) {\\n      this._grip = new Group();\\n      this._grip.matrixAutoUpdate = false;\\n      this._grip.visible = false;\\n      this._grip.hasLinearVelocity = false;\\n      this._grip.linearVelocity = new Vector3();\\n      this._grip.hasAngularVelocity = false;\\n      this._grip.angularVelocity = new Vector3();\\n    }\\n    return this._grip;\\n  }\\n  dispatchEvent(event) {\\n    if (this._targetRay !== null) {\\n      this._targetRay.dispatchEvent(event);\\n    }\\n    if (this._grip !== null) {\\n      this._grip.dispatchEvent(event);\\n    }\\n    if (this._hand !== null) {\\n      this._hand.dispatchEvent(event);\\n    }\\n    return this;\\n  }\\n  disconnect(inputSource) {\\n    this.dispatchEvent({type: \\\\\\\"disconnected\\\\\\\", data: inputSource});\\n    if (this._targetRay !== null) {\\n      this._targetRay.visible = false;\\n    }\\n    if (this._grip !== null) {\\n      this._grip.visible = false;\\n    }\\n    if (this._hand !== null) {\\n      this._hand.visible = false;\\n    }\\n    return this;\\n  }\\n  update(inputSource, frame, referenceSpace) {\\n    let inputPose = null;\\n    let gripPose = null;\\n    let handPose = null;\\n    const targetRay = this._targetRay;\\n    const grip = this._grip;\\n    const hand = this._hand;\\n    if (inputSource && frame.session.visibilityState !== \\\\\\\"visible-blurred\\\\\\\") {\\n      if (targetRay !== null) {\\n        inputPose = frame.getPose(inputSource.targetRaySpace, referenceSpace);\\n        if (inputPose !== null) {\\n          targetRay.matrix.fromArray(inputPose.transform.matrix);\\n          targetRay.matrix.decompose(targetRay.position, targetRay.rotation, targetRay.scale);\\n          if (inputPose.linearVelocity) {\\n            targetRay.hasLinearVelocity = true;\\n            targetRay.linearVelocity.copy(inputPose.linearVelocity);\\n          } else {\\n            targetRay.hasLinearVelocity = false;\\n          }\\n          if (inputPose.angularVelocity) {\\n            targetRay.hasAngularVelocity = true;\\n            targetRay.angularVelocity.copy(inputPose.angularVelocity);\\n          } else {\\n            targetRay.hasAngularVelocity = false;\\n          }\\n          this.dispatchEvent(_moveEvent);\\n        }\\n      }\\n      if (hand && inputSource.hand) {\\n        handPose = true;\\n        for (const inputjoint of inputSource.hand.values()) {\\n          const jointPose = frame.getJointPose(inputjoint, referenceSpace);\\n          if (hand.joints[inputjoint.jointName] === void 0) {\\n            const joint2 = new Group();\\n            joint2.matrixAutoUpdate = false;\\n            joint2.visible = false;\\n            hand.joints[inputjoint.jointName] = joint2;\\n            hand.add(joint2);\\n          }\\n          const joint = hand.joints[inputjoint.jointName];\\n          if (jointPose !== null) {\\n            joint.matrix.fromArray(jointPose.transform.matrix);\\n            joint.matrix.decompose(joint.position, joint.rotation, joint.scale);\\n            joint.jointRadius = jointPose.radius;\\n          }\\n          joint.visible = jointPose !== null;\\n        }\\n        const indexTip = hand.joints[\\\\\\\"index-finger-tip\\\\\\\"];\\n        const thumbTip = hand.joints[\\\\\\\"thumb-tip\\\\\\\"];\\n        const distance = indexTip.position.distanceTo(thumbTip.position);\\n        const distanceToPinch = 0.02;\\n        const threshold = 5e-3;\\n        if (hand.inputState.pinching && distance > distanceToPinch + threshold) {\\n          hand.inputState.pinching = false;\\n          this.dispatchEvent({\\n            type: \\\\\\\"pinchend\\\\\\\",\\n            handedness: inputSource.handedness,\\n            target: this\\n          });\\n        } else if (!hand.inputState.pinching && distance <= distanceToPinch - threshold) {\\n          hand.inputState.pinching = true;\\n          this.dispatchEvent({\\n            type: \\\\\\\"pinchstart\\\\\\\",\\n            handedness: inputSource.handedness,\\n            target: this\\n          });\\n        }\\n      } else {\\n        if (grip !== null && inputSource.gripSpace) {\\n          gripPose = frame.getPose(inputSource.gripSpace, referenceSpace);\\n          if (gripPose !== null) {\\n            grip.matrix.fromArray(gripPose.transform.matrix);\\n            grip.matrix.decompose(grip.position, grip.rotation, grip.scale);\\n            if (gripPose.linearVelocity) {\\n              grip.hasLinearVelocity = true;\\n              grip.linearVelocity.copy(gripPose.linearVelocity);\\n            } else {\\n              grip.hasLinearVelocity = false;\\n            }\\n            if (gripPose.angularVelocity) {\\n              grip.hasAngularVelocity = true;\\n              grip.angularVelocity.copy(gripPose.angularVelocity);\\n            } else {\\n              grip.hasAngularVelocity = false;\\n            }\\n          }\\n        }\\n      }\\n    }\\n    if (targetRay !== null) {\\n      targetRay.visible = inputPose !== null;\\n    }\\n    if (grip !== null) {\\n      grip.visible = gripPose !== null;\\n    }\\n    if (hand !== null) {\\n      hand.visible = handPose !== null;\\n    }\\n    return this;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/renderers/webxr/WebXRManager.js\\nvar WebXRManager = class extends EventDispatcher {\\n  constructor(renderer, gl) {\\n    super();\\n    const scope = this;\\n    const state = renderer.state;\\n    let session = null;\\n    let framebufferScaleFactor = 1;\\n    let referenceSpace = null;\\n    let referenceSpaceType = \\\\\\\"local-floor\\\\\\\";\\n    let pose = null;\\n    let glBinding = null;\\n    let glFramebuffer = null;\\n    let glProjLayer = null;\\n    let glBaseLayer = null;\\n    let isMultisample = false;\\n    let glMultisampledFramebuffer = null;\\n    let glColorRenderbuffer = null;\\n    let glDepthRenderbuffer = null;\\n    let xrFrame = null;\\n    let depthStyle = null;\\n    let clearStyle = null;\\n    const controllers = [];\\n    const inputSourcesMap = new Map();\\n    const cameraL = new PerspectiveCamera();\\n    cameraL.layers.enable(1);\\n    cameraL.viewport = new Vector4();\\n    const cameraR = new PerspectiveCamera();\\n    cameraR.layers.enable(2);\\n    cameraR.viewport = new Vector4();\\n    const cameras = [cameraL, cameraR];\\n    const cameraVR = new ArrayCamera();\\n    cameraVR.layers.enable(1);\\n    cameraVR.layers.enable(2);\\n    let _currentDepthNear = null;\\n    let _currentDepthFar = null;\\n    this.cameraAutoUpdate = true;\\n    this.enabled = false;\\n    this.isPresenting = false;\\n    this.getController = function(index) {\\n      let controller = controllers[index];\\n      if (controller === void 0) {\\n        controller = new WebXRController();\\n        controllers[index] = controller;\\n      }\\n      return controller.getTargetRaySpace();\\n    };\\n    this.getControllerGrip = function(index) {\\n      let controller = controllers[index];\\n      if (controller === void 0) {\\n        controller = new WebXRController();\\n        controllers[index] = controller;\\n      }\\n      return controller.getGripSpace();\\n    };\\n    this.getHand = function(index) {\\n      let controller = controllers[index];\\n      if (controller === void 0) {\\n        controller = new WebXRController();\\n        controllers[index] = controller;\\n      }\\n      return controller.getHandSpace();\\n    };\\n    function onSessionEvent(event) {\\n      const controller = inputSourcesMap.get(event.inputSource);\\n      if (controller) {\\n        controller.dispatchEvent({type: event.type, data: event.inputSource});\\n      }\\n    }\\n    function onSessionEnd() {\\n      inputSourcesMap.forEach(function(controller, inputSource) {\\n        controller.disconnect(inputSource);\\n      });\\n      inputSourcesMap.clear();\\n      _currentDepthNear = null;\\n      _currentDepthFar = null;\\n      state.bindXRFramebuffer(null);\\n      renderer.setRenderTarget(renderer.getRenderTarget());\\n      if (glFramebuffer)\\n        gl.deleteFramebuffer(glFramebuffer);\\n      if (glMultisampledFramebuffer)\\n        gl.deleteFramebuffer(glMultisampledFramebuffer);\\n      if (glColorRenderbuffer)\\n        gl.deleteRenderbuffer(glColorRenderbuffer);\\n      if (glDepthRenderbuffer)\\n        gl.deleteRenderbuffer(glDepthRenderbuffer);\\n      glFramebuffer = null;\\n      glMultisampledFramebuffer = null;\\n      glColorRenderbuffer = null;\\n      glDepthRenderbuffer = null;\\n      glBaseLayer = null;\\n      glProjLayer = null;\\n      glBinding = null;\\n      session = null;\\n      animation.stop();\\n      scope.isPresenting = false;\\n      scope.dispatchEvent({type: \\\\\\\"sessionend\\\\\\\"});\\n    }\\n    this.setFramebufferScaleFactor = function(value) {\\n      framebufferScaleFactor = value;\\n      if (scope.isPresenting === true) {\\n        console.warn(\\\\\\\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\\\\\\\");\\n      }\\n    };\\n    this.setReferenceSpaceType = function(value) {\\n      referenceSpaceType = value;\\n      if (scope.isPresenting === true) {\\n        console.warn(\\\\\\\"THREE.WebXRManager: Cannot change reference space type while presenting.\\\\\\\");\\n      }\\n    };\\n    this.getReferenceSpace = function() {\\n      return referenceSpace;\\n    };\\n    this.getBaseLayer = function() {\\n      return glProjLayer !== null ? glProjLayer : glBaseLayer;\\n    };\\n    this.getBinding = function() {\\n      return glBinding;\\n    };\\n    this.getFrame = function() {\\n      return xrFrame;\\n    };\\n    this.getSession = function() {\\n      return session;\\n    };\\n    this.setSession = async function(value) {\\n      session = value;\\n      if (session !== null) {\\n        session.addEventListener(\\\\\\\"select\\\\\\\", onSessionEvent);\\n        session.addEventListener(\\\\\\\"selectstart\\\\\\\", onSessionEvent);\\n        session.addEventListener(\\\\\\\"selectend\\\\\\\", onSessionEvent);\\n        session.addEventListener(\\\\\\\"squeeze\\\\\\\", onSessionEvent);\\n        session.addEventListener(\\\\\\\"squeezestart\\\\\\\", onSessionEvent);\\n        session.addEventListener(\\\\\\\"squeezeend\\\\\\\", onSessionEvent);\\n        session.addEventListener(\\\\\\\"end\\\\\\\", onSessionEnd);\\n        session.addEventListener(\\\\\\\"inputsourceschange\\\\\\\", onInputSourcesChange);\\n        const attributes = gl.getContextAttributes();\\n        if (attributes.xrCompatible !== true) {\\n          await gl.makeXRCompatible();\\n        }\\n        if (session.renderState.layers === void 0) {\\n          const layerInit = {\\n            antialias: attributes.antialias,\\n            alpha: attributes.alpha,\\n            depth: attributes.depth,\\n            stencil: attributes.stencil,\\n            framebufferScaleFactor\\n          };\\n          glBaseLayer = new XRWebGLLayer(session, gl, layerInit);\\n          session.updateRenderState({baseLayer: glBaseLayer});\\n        } else if (gl instanceof WebGLRenderingContext) {\\n          const layerInit = {\\n            antialias: true,\\n            alpha: attributes.alpha,\\n            depth: attributes.depth,\\n            stencil: attributes.stencil,\\n            framebufferScaleFactor\\n          };\\n          glBaseLayer = new XRWebGLLayer(session, gl, layerInit);\\n          session.updateRenderState({layers: [glBaseLayer]});\\n        } else {\\n          isMultisample = attributes.antialias;\\n          let depthFormat = null;\\n          if (attributes.depth) {\\n            clearStyle = gl.DEPTH_BUFFER_BIT;\\n            if (attributes.stencil)\\n              clearStyle |= gl.STENCIL_BUFFER_BIT;\\n            depthStyle = attributes.stencil ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;\\n            depthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\\n          }\\n          const projectionlayerInit = {\\n            colorFormat: attributes.alpha ? gl.RGBA8 : gl.RGB8,\\n            depthFormat,\\n            scaleFactor: framebufferScaleFactor\\n          };\\n          glBinding = new XRWebGLBinding(session, gl);\\n          glProjLayer = glBinding.createProjectionLayer(projectionlayerInit);\\n          glFramebuffer = gl.createFramebuffer();\\n          session.updateRenderState({layers: [glProjLayer]});\\n          if (isMultisample) {\\n            glMultisampledFramebuffer = gl.createFramebuffer();\\n            glColorRenderbuffer = gl.createRenderbuffer();\\n            gl.bindRenderbuffer(gl.RENDERBUFFER, glColorRenderbuffer);\\n            gl.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.RGBA8, glProjLayer.textureWidth, glProjLayer.textureHeight);\\n            state.bindFramebuffer(gl.FRAMEBUFFER, glMultisampledFramebuffer);\\n            gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, glColorRenderbuffer);\\n            gl.bindRenderbuffer(gl.RENDERBUFFER, null);\\n            if (depthFormat !== null) {\\n              glDepthRenderbuffer = gl.createRenderbuffer();\\n              gl.bindRenderbuffer(gl.RENDERBUFFER, glDepthRenderbuffer);\\n              gl.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, depthFormat, glProjLayer.textureWidth, glProjLayer.textureHeight);\\n              gl.framebufferRenderbuffer(gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, glDepthRenderbuffer);\\n              gl.bindRenderbuffer(gl.RENDERBUFFER, null);\\n            }\\n            state.bindFramebuffer(gl.FRAMEBUFFER, null);\\n          }\\n        }\\n        referenceSpace = await session.requestReferenceSpace(referenceSpaceType);\\n        animation.setContext(session);\\n        animation.start();\\n        scope.isPresenting = true;\\n        scope.dispatchEvent({type: \\\\\\\"sessionstart\\\\\\\"});\\n      }\\n    };\\n    function onInputSourcesChange(event) {\\n      const inputSources = session.inputSources;\\n      for (let i = 0; i < controllers.length; i++) {\\n        inputSourcesMap.set(inputSources[i], controllers[i]);\\n      }\\n      for (let i = 0; i < event.removed.length; i++) {\\n        const inputSource = event.removed[i];\\n        const controller = inputSourcesMap.get(inputSource);\\n        if (controller) {\\n          controller.dispatchEvent({type: \\\\\\\"disconnected\\\\\\\", data: inputSource});\\n          inputSourcesMap.delete(inputSource);\\n        }\\n      }\\n      for (let i = 0; i < event.added.length; i++) {\\n        const inputSource = event.added[i];\\n        const controller = inputSourcesMap.get(inputSource);\\n        if (controller) {\\n          controller.dispatchEvent({type: \\\\\\\"connected\\\\\\\", data: inputSource});\\n        }\\n      }\\n    }\\n    const cameraLPos = new Vector3();\\n    const cameraRPos = new Vector3();\\n    function setProjectionFromUnion(camera, cameraL2, cameraR2) {\\n      cameraLPos.setFromMatrixPosition(cameraL2.matrixWorld);\\n      cameraRPos.setFromMatrixPosition(cameraR2.matrixWorld);\\n      const ipd = cameraLPos.distanceTo(cameraRPos);\\n      const projL = cameraL2.projectionMatrix.elements;\\n      const projR = cameraR2.projectionMatrix.elements;\\n      const near = projL[14] / (projL[10] - 1);\\n      const far = projL[14] / (projL[10] + 1);\\n      const topFov = (projL[9] + 1) / projL[5];\\n      const bottomFov = (projL[9] - 1) / projL[5];\\n      const leftFov = (projL[8] - 1) / projL[0];\\n      const rightFov = (projR[8] + 1) / projR[0];\\n      const left = near * leftFov;\\n      const right = near * rightFov;\\n      const zOffset = ipd / (-leftFov + rightFov);\\n      const xOffset = zOffset * -leftFov;\\n      cameraL2.matrixWorld.decompose(camera.position, camera.quaternion, camera.scale);\\n      camera.translateX(xOffset);\\n      camera.translateZ(zOffset);\\n      camera.matrixWorld.compose(camera.position, camera.quaternion, camera.scale);\\n      camera.matrixWorldInverse.copy(camera.matrixWorld).invert();\\n      const near2 = near + zOffset;\\n      const far2 = far + zOffset;\\n      const left2 = left - xOffset;\\n      const right2 = right + (ipd - xOffset);\\n      const top2 = topFov * far / far2 * near2;\\n      const bottom2 = bottomFov * far / far2 * near2;\\n      camera.projectionMatrix.makePerspective(left2, right2, top2, bottom2, near2, far2);\\n    }\\n    function updateCamera(camera, parent) {\\n      if (parent === null) {\\n        camera.matrixWorld.copy(camera.matrix);\\n      } else {\\n        camera.matrixWorld.multiplyMatrices(parent.matrixWorld, camera.matrix);\\n      }\\n      camera.matrixWorldInverse.copy(camera.matrixWorld).invert();\\n    }\\n    this.updateCamera = function(camera) {\\n      if (session === null)\\n        return;\\n      cameraVR.near = cameraR.near = cameraL.near = camera.near;\\n      cameraVR.far = cameraR.far = cameraL.far = camera.far;\\n      if (_currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far) {\\n        session.updateRenderState({\\n          depthNear: cameraVR.near,\\n          depthFar: cameraVR.far\\n        });\\n        _currentDepthNear = cameraVR.near;\\n        _currentDepthFar = cameraVR.far;\\n      }\\n      const parent = camera.parent;\\n      const cameras2 = cameraVR.cameras;\\n      updateCamera(cameraVR, parent);\\n      for (let i = 0; i < cameras2.length; i++) {\\n        updateCamera(cameras2[i], parent);\\n      }\\n      cameraVR.matrixWorld.decompose(cameraVR.position, cameraVR.quaternion, cameraVR.scale);\\n      camera.position.copy(cameraVR.position);\\n      camera.quaternion.copy(cameraVR.quaternion);\\n      camera.scale.copy(cameraVR.scale);\\n      camera.matrix.copy(cameraVR.matrix);\\n      camera.matrixWorld.copy(cameraVR.matrixWorld);\\n      const children = camera.children;\\n      for (let i = 0, l = children.length; i < l; i++) {\\n        children[i].updateMatrixWorld(true);\\n      }\\n      if (cameras2.length === 2) {\\n        setProjectionFromUnion(cameraVR, cameraL, cameraR);\\n      } else {\\n        cameraVR.projectionMatrix.copy(cameraL.projectionMatrix);\\n      }\\n    };\\n    this.getCamera = function() {\\n      return cameraVR;\\n    };\\n    this.getFoveation = function() {\\n      if (glProjLayer !== null) {\\n        return glProjLayer.fixedFoveation;\\n      }\\n      if (glBaseLayer !== null) {\\n        return glBaseLayer.fixedFoveation;\\n      }\\n      return void 0;\\n    };\\n    this.setFoveation = function(foveation) {\\n      if (glProjLayer !== null) {\\n        glProjLayer.fixedFoveation = foveation;\\n      }\\n      if (glBaseLayer !== null && glBaseLayer.fixedFoveation !== void 0) {\\n        glBaseLayer.fixedFoveation = foveation;\\n      }\\n    };\\n    let onAnimationFrameCallback = null;\\n    function onAnimationFrame(time, frame) {\\n      pose = frame.getViewerPose(referenceSpace);\\n      xrFrame = frame;\\n      if (pose !== null) {\\n        const views = pose.views;\\n        if (glBaseLayer !== null) {\\n          state.bindXRFramebuffer(glBaseLayer.framebuffer);\\n        }\\n        let cameraVRNeedsUpdate = false;\\n        if (views.length !== cameraVR.cameras.length) {\\n          cameraVR.cameras.length = 0;\\n          cameraVRNeedsUpdate = true;\\n        }\\n        for (let i = 0; i < views.length; i++) {\\n          const view = views[i];\\n          let viewport = null;\\n          if (glBaseLayer !== null) {\\n            viewport = glBaseLayer.getViewport(view);\\n          } else {\\n            const glSubImage = glBinding.getViewSubImage(glProjLayer, view);\\n            state.bindXRFramebuffer(glFramebuffer);\\n            if (glSubImage.depthStencilTexture !== void 0) {\\n              gl.framebufferTexture2D(gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, glSubImage.depthStencilTexture, 0);\\n            }\\n            gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, glSubImage.colorTexture, 0);\\n            viewport = glSubImage.viewport;\\n          }\\n          const camera = cameras[i];\\n          camera.matrix.fromArray(view.transform.matrix);\\n          camera.projectionMatrix.fromArray(view.projectionMatrix);\\n          camera.viewport.set(viewport.x, viewport.y, viewport.width, viewport.height);\\n          if (i === 0) {\\n            cameraVR.matrix.copy(camera.matrix);\\n          }\\n          if (cameraVRNeedsUpdate === true) {\\n            cameraVR.cameras.push(camera);\\n          }\\n        }\\n        if (isMultisample) {\\n          state.bindXRFramebuffer(glMultisampledFramebuffer);\\n          if (clearStyle !== null)\\n            gl.clear(clearStyle);\\n        }\\n      }\\n      const inputSources = session.inputSources;\\n      for (let i = 0; i < controllers.length; i++) {\\n        const controller = controllers[i];\\n        const inputSource = inputSources[i];\\n        controller.update(inputSource, frame, referenceSpace);\\n      }\\n      if (onAnimationFrameCallback)\\n        onAnimationFrameCallback(time, frame);\\n      if (isMultisample) {\\n        const width = glProjLayer.textureWidth;\\n        const height = glProjLayer.textureHeight;\\n        state.bindFramebuffer(gl.READ_FRAMEBUFFER, glMultisampledFramebuffer);\\n        state.bindFramebuffer(gl.DRAW_FRAMEBUFFER, glFramebuffer);\\n        gl.invalidateFramebuffer(gl.READ_FRAMEBUFFER, [depthStyle]);\\n        gl.invalidateFramebuffer(gl.DRAW_FRAMEBUFFER, [depthStyle]);\\n        gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, gl.COLOR_BUFFER_BIT, gl.NEAREST);\\n        gl.invalidateFramebuffer(gl.READ_FRAMEBUFFER, [gl.COLOR_ATTACHMENT0]);\\n        state.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\\n        state.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);\\n        state.bindFramebuffer(gl.FRAMEBUFFER, glMultisampledFramebuffer);\\n      }\\n      xrFrame = null;\\n    }\\n    const animation = new WebGLAnimation();\\n    animation.setAnimationLoop(onAnimationFrame);\\n    this.setAnimationLoop = function(callback) {\\n      onAnimationFrameCallback = callback;\\n    };\\n    this.dispose = function() {\\n    };\\n  }\\n};\\n\\n// ../../../node_modules/three/src/renderers/webgl/WebGLMaterials.js\\nfunction WebGLMaterials(properties) {\\n  function refreshFogUniforms(uniforms, fog) {\\n    uniforms.fogColor.value.copy(fog.color);\\n    if (fog.isFog) {\\n      uniforms.fogNear.value = fog.near;\\n      uniforms.fogFar.value = fog.far;\\n    } else if (fog.isFogExp2) {\\n      uniforms.fogDensity.value = fog.density;\\n    }\\n  }\\n  function refreshMaterialUniforms(uniforms, material, pixelRatio, height, transmissionRenderTarget) {\\n    if (material.isMeshBasicMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n    } else if (material.isMeshLambertMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n      refreshUniformsLambert(uniforms, material);\\n    } else if (material.isMeshToonMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n      refreshUniformsToon(uniforms, material);\\n    } else if (material.isMeshPhongMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n      refreshUniformsPhong(uniforms, material);\\n    } else if (material.isMeshStandardMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n      if (material.isMeshPhysicalMaterial) {\\n        refreshUniformsPhysical(uniforms, material, transmissionRenderTarget);\\n      } else {\\n        refreshUniformsStandard(uniforms, material);\\n      }\\n    } else if (material.isMeshMatcapMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n      refreshUniformsMatcap(uniforms, material);\\n    } else if (material.isMeshDepthMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n      refreshUniformsDepth(uniforms, material);\\n    } else if (material.isMeshDistanceMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n      refreshUniformsDistance(uniforms, material);\\n    } else if (material.isMeshNormalMaterial) {\\n      refreshUniformsCommon(uniforms, material);\\n      refreshUniformsNormal(uniforms, material);\\n    } else if (material.isLineBasicMaterial) {\\n      refreshUniformsLine(uniforms, material);\\n      if (material.isLineDashedMaterial) {\\n        refreshUniformsDash(uniforms, material);\\n      }\\n    } else if (material.isPointsMaterial) {\\n      refreshUniformsPoints(uniforms, material, pixelRatio, height);\\n    } else if (material.isSpriteMaterial) {\\n      refreshUniformsSprites(uniforms, material);\\n    } else if (material.isShadowMaterial) {\\n      uniforms.color.value.copy(material.color);\\n      uniforms.opacity.value = material.opacity;\\n    } else if (material.isShaderMaterial) {\\n      material.uniformsNeedUpdate = false;\\n    }\\n  }\\n  function refreshUniformsCommon(uniforms, material) {\\n    uniforms.opacity.value = material.opacity;\\n    if (material.color) {\\n      uniforms.diffuse.value.copy(material.color);\\n    }\\n    if (material.emissive) {\\n      uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity);\\n    }\\n    if (material.map) {\\n      uniforms.map.value = material.map;\\n    }\\n    if (material.alphaMap) {\\n      uniforms.alphaMap.value = material.alphaMap;\\n    }\\n    if (material.specularMap) {\\n      uniforms.specularMap.value = material.specularMap;\\n    }\\n    if (material.alphaTest > 0) {\\n      uniforms.alphaTest.value = material.alphaTest;\\n    }\\n    const envMap = properties.get(material).envMap;\\n    if (envMap) {\\n      uniforms.envMap.value = envMap;\\n      uniforms.flipEnvMap.value = envMap.isCubeTexture && envMap.isRenderTargetTexture === false ? -1 : 1;\\n      uniforms.reflectivity.value = material.reflectivity;\\n      uniforms.ior.value = material.ior;\\n      uniforms.refractionRatio.value = material.refractionRatio;\\n      const maxMipLevel = properties.get(envMap).__maxMipLevel;\\n      if (maxMipLevel !== void 0) {\\n        uniforms.maxMipLevel.value = maxMipLevel;\\n      }\\n    }\\n    if (material.lightMap) {\\n      uniforms.lightMap.value = material.lightMap;\\n      uniforms.lightMapIntensity.value = material.lightMapIntensity;\\n    }\\n    if (material.aoMap) {\\n      uniforms.aoMap.value = material.aoMap;\\n      uniforms.aoMapIntensity.value = material.aoMapIntensity;\\n    }\\n    let uvScaleMap;\\n    if (material.map) {\\n      uvScaleMap = material.map;\\n    } else if (material.specularMap) {\\n      uvScaleMap = material.specularMap;\\n    } else if (material.displacementMap) {\\n      uvScaleMap = material.displacementMap;\\n    } else if (material.normalMap) {\\n      uvScaleMap = material.normalMap;\\n    } else if (material.bumpMap) {\\n      uvScaleMap = material.bumpMap;\\n    } else if (material.roughnessMap) {\\n      uvScaleMap = material.roughnessMap;\\n    } else if (material.metalnessMap) {\\n      uvScaleMap = material.metalnessMap;\\n    } else if (material.alphaMap) {\\n      uvScaleMap = material.alphaMap;\\n    } else if (material.emissiveMap) {\\n      uvScaleMap = material.emissiveMap;\\n    } else if (material.clearcoatMap) {\\n      uvScaleMap = material.clearcoatMap;\\n    } else if (material.clearcoatNormalMap) {\\n      uvScaleMap = material.clearcoatNormalMap;\\n    } else if (material.clearcoatRoughnessMap) {\\n      uvScaleMap = material.clearcoatRoughnessMap;\\n    } else if (material.specularIntensityMap) {\\n      uvScaleMap = material.specularIntensityMap;\\n    } else if (material.specularTintMap) {\\n      uvScaleMap = material.specularTintMap;\\n    } else if (material.transmissionMap) {\\n      uvScaleMap = material.transmissionMap;\\n    } else if (material.thicknessMap) {\\n      uvScaleMap = material.thicknessMap;\\n    }\\n    if (uvScaleMap !== void 0) {\\n      if (uvScaleMap.isWebGLRenderTarget) {\\n        uvScaleMap = uvScaleMap.texture;\\n      }\\n      if (uvScaleMap.matrixAutoUpdate === true) {\\n        uvScaleMap.updateMatrix();\\n      }\\n      uniforms.uvTransform.value.copy(uvScaleMap.matrix);\\n    }\\n    let uv2ScaleMap;\\n    if (material.aoMap) {\\n      uv2ScaleMap = material.aoMap;\\n    } else if (material.lightMap) {\\n      uv2ScaleMap = material.lightMap;\\n    }\\n    if (uv2ScaleMap !== void 0) {\\n      if (uv2ScaleMap.isWebGLRenderTarget) {\\n        uv2ScaleMap = uv2ScaleMap.texture;\\n      }\\n      if (uv2ScaleMap.matrixAutoUpdate === true) {\\n        uv2ScaleMap.updateMatrix();\\n      }\\n      uniforms.uv2Transform.value.copy(uv2ScaleMap.matrix);\\n    }\\n  }\\n  function refreshUniformsLine(uniforms, material) {\\n    uniforms.diffuse.value.copy(material.color);\\n    uniforms.opacity.value = material.opacity;\\n  }\\n  function refreshUniformsDash(uniforms, material) {\\n    uniforms.dashSize.value = material.dashSize;\\n    uniforms.totalSize.value = material.dashSize + material.gapSize;\\n    uniforms.scale.value = material.scale;\\n  }\\n  function refreshUniformsPoints(uniforms, material, pixelRatio, height) {\\n    uniforms.diffuse.value.copy(material.color);\\n    uniforms.opacity.value = material.opacity;\\n    uniforms.size.value = material.size * pixelRatio;\\n    uniforms.scale.value = height * 0.5;\\n    if (material.map) {\\n      uniforms.map.value = material.map;\\n    }\\n    if (material.alphaMap) {\\n      uniforms.alphaMap.value = material.alphaMap;\\n    }\\n    if (material.alphaTest > 0) {\\n      uniforms.alphaTest.value = material.alphaTest;\\n    }\\n    let uvScaleMap;\\n    if (material.map) {\\n      uvScaleMap = material.map;\\n    } else if (material.alphaMap) {\\n      uvScaleMap = material.alphaMap;\\n    }\\n    if (uvScaleMap !== void 0) {\\n      if (uvScaleMap.matrixAutoUpdate === true) {\\n        uvScaleMap.updateMatrix();\\n      }\\n      uniforms.uvTransform.value.copy(uvScaleMap.matrix);\\n    }\\n  }\\n  function refreshUniformsSprites(uniforms, material) {\\n    uniforms.diffuse.value.copy(material.color);\\n    uniforms.opacity.value = material.opacity;\\n    uniforms.rotation.value = material.rotation;\\n    if (material.map) {\\n      uniforms.map.value = material.map;\\n    }\\n    if (material.alphaMap) {\\n      uniforms.alphaMap.value = material.alphaMap;\\n    }\\n    if (material.alphaTest > 0) {\\n      uniforms.alphaTest.value = material.alphaTest;\\n    }\\n    let uvScaleMap;\\n    if (material.map) {\\n      uvScaleMap = material.map;\\n    } else if (material.alphaMap) {\\n      uvScaleMap = material.alphaMap;\\n    }\\n    if (uvScaleMap !== void 0) {\\n      if (uvScaleMap.matrixAutoUpdate === true) {\\n        uvScaleMap.updateMatrix();\\n      }\\n      uniforms.uvTransform.value.copy(uvScaleMap.matrix);\\n    }\\n  }\\n  function refreshUniformsLambert(uniforms, material) {\\n    if (material.emissiveMap) {\\n      uniforms.emissiveMap.value = material.emissiveMap;\\n    }\\n  }\\n  function refreshUniformsPhong(uniforms, material) {\\n    uniforms.specular.value.copy(material.specular);\\n    uniforms.shininess.value = Math.max(material.shininess, 1e-4);\\n    if (material.emissiveMap) {\\n      uniforms.emissiveMap.value = material.emissiveMap;\\n    }\\n    if (material.bumpMap) {\\n      uniforms.bumpMap.value = material.bumpMap;\\n      uniforms.bumpScale.value = material.bumpScale;\\n      if (material.side === BackSide)\\n        uniforms.bumpScale.value *= -1;\\n    }\\n    if (material.normalMap) {\\n      uniforms.normalMap.value = material.normalMap;\\n      uniforms.normalScale.value.copy(material.normalScale);\\n      if (material.side === BackSide)\\n        uniforms.normalScale.value.negate();\\n    }\\n    if (material.displacementMap) {\\n      uniforms.displacementMap.value = material.displacementMap;\\n      uniforms.displacementScale.value = material.displacementScale;\\n      uniforms.displacementBias.value = material.displacementBias;\\n    }\\n  }\\n  function refreshUniformsToon(uniforms, material) {\\n    if (material.gradientMap) {\\n      uniforms.gradientMap.value = material.gradientMap;\\n    }\\n    if (material.emissiveMap) {\\n      uniforms.emissiveMap.value = material.emissiveMap;\\n    }\\n    if (material.bumpMap) {\\n      uniforms.bumpMap.value = material.bumpMap;\\n      uniforms.bumpScale.value = material.bumpScale;\\n      if (material.side === BackSide)\\n        uniforms.bumpScale.value *= -1;\\n    }\\n    if (material.normalMap) {\\n      uniforms.normalMap.value = material.normalMap;\\n      uniforms.normalScale.value.copy(material.normalScale);\\n      if (material.side === BackSide)\\n        uniforms.normalScale.value.negate();\\n    }\\n    if (material.displacementMap) {\\n      uniforms.displacementMap.value = material.displacementMap;\\n      uniforms.displacementScale.value = material.displacementScale;\\n      uniforms.displacementBias.value = material.displacementBias;\\n    }\\n  }\\n  function refreshUniformsStandard(uniforms, material) {\\n    uniforms.roughness.value = material.roughness;\\n    uniforms.metalness.value = material.metalness;\\n    if (material.roughnessMap) {\\n      uniforms.roughnessMap.value = material.roughnessMap;\\n    }\\n    if (material.metalnessMap) {\\n      uniforms.metalnessMap.value = material.metalnessMap;\\n    }\\n    if (material.emissiveMap) {\\n      uniforms.emissiveMap.value = material.emissiveMap;\\n    }\\n    if (material.bumpMap) {\\n      uniforms.bumpMap.value = material.bumpMap;\\n      uniforms.bumpScale.value = material.bumpScale;\\n      if (material.side === BackSide)\\n        uniforms.bumpScale.value *= -1;\\n    }\\n    if (material.normalMap) {\\n      uniforms.normalMap.value = material.normalMap;\\n      uniforms.normalScale.value.copy(material.normalScale);\\n      if (material.side === BackSide)\\n        uniforms.normalScale.value.negate();\\n    }\\n    if (material.displacementMap) {\\n      uniforms.displacementMap.value = material.displacementMap;\\n      uniforms.displacementScale.value = material.displacementScale;\\n      uniforms.displacementBias.value = material.displacementBias;\\n    }\\n    const envMap = properties.get(material).envMap;\\n    if (envMap) {\\n      uniforms.envMapIntensity.value = material.envMapIntensity;\\n    }\\n  }\\n  function refreshUniformsPhysical(uniforms, material, transmissionRenderTarget) {\\n    refreshUniformsStandard(uniforms, material);\\n    uniforms.ior.value = material.ior;\\n    if (material.sheen > 0) {\\n      uniforms.sheenTint.value.copy(material.sheenTint).multiplyScalar(material.sheen);\\n      uniforms.sheenRoughness.value = material.sheenRoughness;\\n    }\\n    if (material.clearcoat > 0) {\\n      uniforms.clearcoat.value = material.clearcoat;\\n      uniforms.clearcoatRoughness.value = material.clearcoatRoughness;\\n      if (material.clearcoatMap) {\\n        uniforms.clearcoatMap.value = material.clearcoatMap;\\n      }\\n      if (material.clearcoatRoughnessMap) {\\n        uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\\n      }\\n      if (material.clearcoatNormalMap) {\\n        uniforms.clearcoatNormalScale.value.copy(material.clearcoatNormalScale);\\n        uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\\n        if (material.side === BackSide) {\\n          uniforms.clearcoatNormalScale.value.negate();\\n        }\\n      }\\n    }\\n    if (material.transmission > 0) {\\n      uniforms.transmission.value = material.transmission;\\n      uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\\n      uniforms.transmissionSamplerSize.value.set(transmissionRenderTarget.width, transmissionRenderTarget.height);\\n      if (material.transmissionMap) {\\n        uniforms.transmissionMap.value = material.transmissionMap;\\n      }\\n      uniforms.thickness.value = material.thickness;\\n      if (material.thicknessMap) {\\n        uniforms.thicknessMap.value = material.thicknessMap;\\n      }\\n      uniforms.attenuationDistance.value = material.attenuationDistance;\\n      uniforms.attenuationTint.value.copy(material.attenuationTint);\\n    }\\n    uniforms.specularIntensity.value = material.specularIntensity;\\n    uniforms.specularTint.value.copy(material.specularTint);\\n    if (material.specularIntensityMap) {\\n      uniforms.specularIntensityMap.value = material.specularIntensityMap;\\n    }\\n    if (material.specularTintMap) {\\n      uniforms.specularTintMap.value = material.specularTintMap;\\n    }\\n  }\\n  function refreshUniformsMatcap(uniforms, material) {\\n    if (material.matcap) {\\n      uniforms.matcap.value = material.matcap;\\n    }\\n    if (material.bumpMap) {\\n      uniforms.bumpMap.value = material.bumpMap;\\n      uniforms.bumpScale.value = material.bumpScale;\\n      if (material.side === BackSide)\\n        uniforms.bumpScale.value *= -1;\\n    }\\n    if (material.normalMap) {\\n      uniforms.normalMap.value = material.normalMap;\\n      uniforms.normalScale.value.copy(material.normalScale);\\n      if (material.side === BackSide)\\n        uniforms.normalScale.value.negate();\\n    }\\n    if (material.displacementMap) {\\n      uniforms.displacementMap.value = material.displacementMap;\\n      uniforms.displacementScale.value = material.displacementScale;\\n      uniforms.displacementBias.value = material.displacementBias;\\n    }\\n  }\\n  function refreshUniformsDepth(uniforms, material) {\\n    if (material.displacementMap) {\\n      uniforms.displacementMap.value = material.displacementMap;\\n      uniforms.displacementScale.value = material.displacementScale;\\n      uniforms.displacementBias.value = material.displacementBias;\\n    }\\n  }\\n  function refreshUniformsDistance(uniforms, material) {\\n    if (material.displacementMap) {\\n      uniforms.displacementMap.value = material.displacementMap;\\n      uniforms.displacementScale.value = material.displacementScale;\\n      uniforms.displacementBias.value = material.displacementBias;\\n    }\\n    uniforms.referencePosition.value.copy(material.referencePosition);\\n    uniforms.nearDistance.value = material.nearDistance;\\n    uniforms.farDistance.value = material.farDistance;\\n  }\\n  function refreshUniformsNormal(uniforms, material) {\\n    if (material.bumpMap) {\\n      uniforms.bumpMap.value = material.bumpMap;\\n      uniforms.bumpScale.value = material.bumpScale;\\n      if (material.side === BackSide)\\n        uniforms.bumpScale.value *= -1;\\n    }\\n    if (material.normalMap) {\\n      uniforms.normalMap.value = material.normalMap;\\n      uniforms.normalScale.value.copy(material.normalScale);\\n      if (material.side === BackSide)\\n        uniforms.normalScale.value.negate();\\n    }\\n    if (material.displacementMap) {\\n      uniforms.displacementMap.value = material.displacementMap;\\n      uniforms.displacementScale.value = material.displacementScale;\\n      uniforms.displacementBias.value = material.displacementBias;\\n    }\\n  }\\n  return {\\n    refreshFogUniforms,\\n    refreshMaterialUniforms\\n  };\\n}\\n\\n// ../../../node_modules/three/src/renderers/WebGLRenderer.js\\nfunction createCanvasElement() {\\n  const canvas = createElementNS(\\\\\\\"canvas\\\\\\\");\\n  canvas.style.display = \\\\\\\"block\\\\\\\";\\n  return canvas;\\n}\\nfunction WebGLRenderer(parameters = {}) {\\n  const _canvas2 = parameters.canvas !== void 0 ? parameters.canvas : createCanvasElement(), _context2 = parameters.context !== void 0 ? parameters.context : null, _alpha = parameters.alpha !== void 0 ? parameters.alpha : false, _depth = parameters.depth !== void 0 ? parameters.depth : true, _stencil = parameters.stencil !== void 0 ? parameters.stencil : true, _antialias = parameters.antialias !== void 0 ? parameters.antialias : false, _premultipliedAlpha = parameters.premultipliedAlpha !== void 0 ? parameters.premultipliedAlpha : true, _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== void 0 ? parameters.preserveDrawingBuffer : false, _powerPreference = parameters.powerPreference !== void 0 ? parameters.powerPreference : \\\\\\\"default\\\\\\\", _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== void 0 ? parameters.failIfMajorPerformanceCaveat : false;\\n  let currentRenderList = null;\\n  let currentRenderState = null;\\n  const renderListStack = [];\\n  const renderStateStack = [];\\n  this.domElement = _canvas2;\\n  this.debug = {\\n    checkShaderErrors: true\\n  };\\n  this.autoClear = true;\\n  this.autoClearColor = true;\\n  this.autoClearDepth = true;\\n  this.autoClearStencil = true;\\n  this.sortObjects = true;\\n  this.clippingPlanes = [];\\n  this.localClippingEnabled = false;\\n  this.gammaFactor = 2;\\n  this.outputEncoding = LinearEncoding;\\n  this.physicallyCorrectLights = false;\\n  this.toneMapping = NoToneMapping;\\n  this.toneMappingExposure = 1;\\n  const _this = this;\\n  let _isContextLost = false;\\n  let _currentActiveCubeFace = 0;\\n  let _currentActiveMipmapLevel = 0;\\n  let _currentRenderTarget = null;\\n  let _currentMaterialId = -1;\\n  let _currentCamera = null;\\n  const _currentViewport = new Vector4();\\n  const _currentScissor = new Vector4();\\n  let _currentScissorTest = null;\\n  let _width = _canvas2.width;\\n  let _height = _canvas2.height;\\n  let _pixelRatio = 1;\\n  let _opaqueSort = null;\\n  let _transparentSort = null;\\n  const _viewport = new Vector4(0, 0, _width, _height);\\n  const _scissor = new Vector4(0, 0, _width, _height);\\n  let _scissorTest = false;\\n  const _currentDrawBuffers = [];\\n  const _frustum = new Frustum();\\n  let _clippingEnabled = false;\\n  let _localClippingEnabled = false;\\n  let _transmissionRenderTarget = null;\\n  const _projScreenMatrix = new Matrix4();\\n  const _vector32 = new Vector3();\\n  const _emptyScene = {background: null, fog: null, environment: null, overrideMaterial: null, isScene: true};\\n  function getTargetPixelRatio() {\\n    return _currentRenderTarget === null ? _pixelRatio : 1;\\n  }\\n  let _gl = _context2;\\n  function getContext(contextNames, contextAttributes) {\\n    for (let i = 0; i < contextNames.length; i++) {\\n      const contextName = contextNames[i];\\n      const context = _canvas2.getContext(contextName, contextAttributes);\\n      if (context !== null)\\n        return context;\\n    }\\n    return null;\\n  }\\n  try {\\n    const contextAttributes = {\\n      alpha: _alpha,\\n      depth: _depth,\\n      stencil: _stencil,\\n      antialias: _antialias,\\n      premultipliedAlpha: _premultipliedAlpha,\\n      preserveDrawingBuffer: _preserveDrawingBuffer,\\n      powerPreference: _powerPreference,\\n      failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\\n    };\\n    _canvas2.addEventListener(\\\\\\\"webglcontextlost\\\\\\\", onContextLost, false);\\n    _canvas2.addEventListener(\\\\\\\"webglcontextrestored\\\\\\\", onContextRestore, false);\\n    if (_gl === null) {\\n      const contextNames = [\\\\\\\"webgl2\\\\\\\", \\\\\\\"webgl\\\\\\\", \\\\\\\"experimental-webgl\\\\\\\"];\\n      if (_this.isWebGL1Renderer === true) {\\n        contextNames.shift();\\n      }\\n      _gl = getContext(contextNames, contextAttributes);\\n      if (_gl === null) {\\n        if (getContext(contextNames)) {\\n          throw new Error(\\\\\\\"Error creating WebGL context with your selected attributes.\\\\\\\");\\n        } else {\\n          throw new Error(\\\\\\\"Error creating WebGL context.\\\\\\\");\\n        }\\n      }\\n    }\\n    if (_gl.getShaderPrecisionFormat === void 0) {\\n      _gl.getShaderPrecisionFormat = function() {\\n        return {rangeMin: 1, rangeMax: 1, precision: 1};\\n      };\\n    }\\n  } catch (error) {\\n    console.error(\\\\\\\"THREE.WebGLRenderer: \\\\\\\" + error.message);\\n    throw error;\\n  }\\n  let extensions, capabilities, state, info;\\n  let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\\n  let programCache, materials2, renderLists, renderStates, clipping, shadowMap;\\n  let background2, morphtargets, bufferRenderer, indexedBufferRenderer;\\n  let utils, bindingStates;\\n  function initGLContext() {\\n    extensions = new WebGLExtensions(_gl);\\n    capabilities = new WebGLCapabilities(_gl, extensions, parameters);\\n    extensions.init(capabilities);\\n    utils = new WebGLUtils(_gl, extensions, capabilities);\\n    state = new WebGLState(_gl, extensions, capabilities);\\n    _currentDrawBuffers[0] = _gl.BACK;\\n    info = new WebGLInfo(_gl);\\n    properties = new WebGLProperties();\\n    textures = new WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info);\\n    cubemaps = new WebGLCubeMaps(_this);\\n    cubeuvmaps = new WebGLCubeUVMaps(_this);\\n    attributes = new WebGLAttributes(_gl, capabilities);\\n    bindingStates = new WebGLBindingStates(_gl, extensions, attributes, capabilities);\\n    geometries = new WebGLGeometries(_gl, attributes, info, bindingStates);\\n    objects = new WebGLObjects(_gl, geometries, attributes, info);\\n    morphtargets = new WebGLMorphtargets(_gl, capabilities, textures);\\n    clipping = new WebGLClipping(properties);\\n    programCache = new WebGLPrograms(_this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping);\\n    materials2 = new WebGLMaterials(properties);\\n    renderLists = new WebGLRenderLists(properties);\\n    renderStates = new WebGLRenderStates(extensions, capabilities);\\n    background2 = new WebGLBackground(_this, cubemaps, state, objects, _premultipliedAlpha);\\n    shadowMap = new WebGLShadowMap(_this, objects, capabilities);\\n    bufferRenderer = new WebGLBufferRenderer(_gl, extensions, info, capabilities);\\n    indexedBufferRenderer = new WebGLIndexedBufferRenderer(_gl, extensions, info, capabilities);\\n    info.programs = programCache.programs;\\n    _this.capabilities = capabilities;\\n    _this.extensions = extensions;\\n    _this.properties = properties;\\n    _this.renderLists = renderLists;\\n    _this.shadowMap = shadowMap;\\n    _this.state = state;\\n    _this.info = info;\\n  }\\n  initGLContext();\\n  const xr = new WebXRManager(_this, _gl);\\n  this.xr = xr;\\n  this.getContext = function() {\\n    return _gl;\\n  };\\n  this.getContextAttributes = function() {\\n    return _gl.getContextAttributes();\\n  };\\n  this.forceContextLoss = function() {\\n    const extension = extensions.get(\\\\\\\"WEBGL_lose_context\\\\\\\");\\n    if (extension)\\n      extension.loseContext();\\n  };\\n  this.forceContextRestore = function() {\\n    const extension = extensions.get(\\\\\\\"WEBGL_lose_context\\\\\\\");\\n    if (extension)\\n      extension.restoreContext();\\n  };\\n  this.getPixelRatio = function() {\\n    return _pixelRatio;\\n  };\\n  this.setPixelRatio = function(value) {\\n    if (value === void 0)\\n      return;\\n    _pixelRatio = value;\\n    this.setSize(_width, _height, false);\\n  };\\n  this.getSize = function(target) {\\n    return target.set(_width, _height);\\n  };\\n  this.setSize = function(width, height, updateStyle) {\\n    if (xr.isPresenting) {\\n      console.warn(\\\\\\\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\\\\\\\");\\n      return;\\n    }\\n    _width = width;\\n    _height = height;\\n    _canvas2.width = Math.floor(width * _pixelRatio);\\n    _canvas2.height = Math.floor(height * _pixelRatio);\\n    if (updateStyle !== false) {\\n      _canvas2.style.width = width + \\\\\\\"px\\\\\\\";\\n      _canvas2.style.height = height + \\\\\\\"px\\\\\\\";\\n    }\\n    this.setViewport(0, 0, width, height);\\n  };\\n  this.getDrawingBufferSize = function(target) {\\n    return target.set(_width * _pixelRatio, _height * _pixelRatio).floor();\\n  };\\n  this.setDrawingBufferSize = function(width, height, pixelRatio) {\\n    _width = width;\\n    _height = height;\\n    _pixelRatio = pixelRatio;\\n    _canvas2.width = Math.floor(width * pixelRatio);\\n    _canvas2.height = Math.floor(height * pixelRatio);\\n    this.setViewport(0, 0, width, height);\\n  };\\n  this.getCurrentViewport = function(target) {\\n    return target.copy(_currentViewport);\\n  };\\n  this.getViewport = function(target) {\\n    return target.copy(_viewport);\\n  };\\n  this.setViewport = function(x, y, width, height) {\\n    if (x.isVector4) {\\n      _viewport.set(x.x, x.y, x.z, x.w);\\n    } else {\\n      _viewport.set(x, y, width, height);\\n    }\\n    state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor());\\n  };\\n  this.getScissor = function(target) {\\n    return target.copy(_scissor);\\n  };\\n  this.setScissor = function(x, y, width, height) {\\n    if (x.isVector4) {\\n      _scissor.set(x.x, x.y, x.z, x.w);\\n    } else {\\n      _scissor.set(x, y, width, height);\\n    }\\n    state.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor());\\n  };\\n  this.getScissorTest = function() {\\n    return _scissorTest;\\n  };\\n  this.setScissorTest = function(boolean) {\\n    state.setScissorTest(_scissorTest = boolean);\\n  };\\n  this.setOpaqueSort = function(method) {\\n    _opaqueSort = method;\\n  };\\n  this.setTransparentSort = function(method) {\\n    _transparentSort = method;\\n  };\\n  this.getClearColor = function(target) {\\n    return target.copy(background2.getClearColor());\\n  };\\n  this.setClearColor = function() {\\n    background2.setClearColor.apply(background2, arguments);\\n  };\\n  this.getClearAlpha = function() {\\n    return background2.getClearAlpha();\\n  };\\n  this.setClearAlpha = function() {\\n    background2.setClearAlpha.apply(background2, arguments);\\n  };\\n  this.clear = function(color, depth2, stencil) {\\n    let bits = 0;\\n    if (color === void 0 || color)\\n      bits |= _gl.COLOR_BUFFER_BIT;\\n    if (depth2 === void 0 || depth2)\\n      bits |= _gl.DEPTH_BUFFER_BIT;\\n    if (stencil === void 0 || stencil)\\n      bits |= _gl.STENCIL_BUFFER_BIT;\\n    _gl.clear(bits);\\n  };\\n  this.clearColor = function() {\\n    this.clear(true, false, false);\\n  };\\n  this.clearDepth = function() {\\n    this.clear(false, true, false);\\n  };\\n  this.clearStencil = function() {\\n    this.clear(false, false, true);\\n  };\\n  this.dispose = function() {\\n    _canvas2.removeEventListener(\\\\\\\"webglcontextlost\\\\\\\", onContextLost, false);\\n    _canvas2.removeEventListener(\\\\\\\"webglcontextrestored\\\\\\\", onContextRestore, false);\\n    renderLists.dispose();\\n    renderStates.dispose();\\n    properties.dispose();\\n    cubemaps.dispose();\\n    cubeuvmaps.dispose();\\n    objects.dispose();\\n    bindingStates.dispose();\\n    xr.dispose();\\n    xr.removeEventListener(\\\\\\\"sessionstart\\\\\\\", onXRSessionStart);\\n    xr.removeEventListener(\\\\\\\"sessionend\\\\\\\", onXRSessionEnd);\\n    if (_transmissionRenderTarget) {\\n      _transmissionRenderTarget.dispose();\\n      _transmissionRenderTarget = null;\\n    }\\n    animation.stop();\\n  };\\n  function onContextLost(event) {\\n    event.preventDefault();\\n    console.log(\\\\\\\"THREE.WebGLRenderer: Context Lost.\\\\\\\");\\n    _isContextLost = true;\\n  }\\n  function onContextRestore() {\\n    console.log(\\\\\\\"THREE.WebGLRenderer: Context Restored.\\\\\\\");\\n    _isContextLost = false;\\n    const infoAutoReset = info.autoReset;\\n    const shadowMapEnabled = shadowMap.enabled;\\n    const shadowMapAutoUpdate = shadowMap.autoUpdate;\\n    const shadowMapNeedsUpdate = shadowMap.needsUpdate;\\n    const shadowMapType = shadowMap.type;\\n    initGLContext();\\n    info.autoReset = infoAutoReset;\\n    shadowMap.enabled = shadowMapEnabled;\\n    shadowMap.autoUpdate = shadowMapAutoUpdate;\\n    shadowMap.needsUpdate = shadowMapNeedsUpdate;\\n    shadowMap.type = shadowMapType;\\n  }\\n  function onMaterialDispose(event) {\\n    const material = event.target;\\n    material.removeEventListener(\\\\\\\"dispose\\\\\\\", onMaterialDispose);\\n    deallocateMaterial(material);\\n  }\\n  function deallocateMaterial(material) {\\n    releaseMaterialProgramReferences(material);\\n    properties.remove(material);\\n  }\\n  function releaseMaterialProgramReferences(material) {\\n    const programs = properties.get(material).programs;\\n    if (programs !== void 0) {\\n      programs.forEach(function(program) {\\n        programCache.releaseProgram(program);\\n      });\\n    }\\n  }\\n  function renderObjectImmediate(object, program) {\\n    object.render(function(object2) {\\n      _this.renderBufferImmediate(object2, program);\\n    });\\n  }\\n  this.renderBufferImmediate = function(object, program) {\\n    bindingStates.initAttributes();\\n    const buffers = properties.get(object);\\n    if (object.hasPositions && !buffers.position)\\n      buffers.position = _gl.createBuffer();\\n    if (object.hasNormals && !buffers.normal)\\n      buffers.normal = _gl.createBuffer();\\n    if (object.hasUvs && !buffers.uv)\\n      buffers.uv = _gl.createBuffer();\\n    if (object.hasColors && !buffers.color)\\n      buffers.color = _gl.createBuffer();\\n    const programAttributes = program.getAttributes();\\n    if (object.hasPositions) {\\n      _gl.bindBuffer(_gl.ARRAY_BUFFER, buffers.position);\\n      _gl.bufferData(_gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW);\\n      bindingStates.enableAttribute(programAttributes.position.location);\\n      _gl.vertexAttribPointer(programAttributes.position.location, 3, _gl.FLOAT, false, 0, 0);\\n    }\\n    if (object.hasNormals) {\\n      _gl.bindBuffer(_gl.ARRAY_BUFFER, buffers.normal);\\n      _gl.bufferData(_gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW);\\n      bindingStates.enableAttribute(programAttributes.normal.location);\\n      _gl.vertexAttribPointer(programAttributes.normal.location, 3, _gl.FLOAT, false, 0, 0);\\n    }\\n    if (object.hasUvs) {\\n      _gl.bindBuffer(_gl.ARRAY_BUFFER, buffers.uv);\\n      _gl.bufferData(_gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW);\\n      bindingStates.enableAttribute(programAttributes.uv.location);\\n      _gl.vertexAttribPointer(programAttributes.uv.location, 2, _gl.FLOAT, false, 0, 0);\\n    }\\n    if (object.hasColors) {\\n      _gl.bindBuffer(_gl.ARRAY_BUFFER, buffers.color);\\n      _gl.bufferData(_gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW);\\n      bindingStates.enableAttribute(programAttributes.color.location);\\n      _gl.vertexAttribPointer(programAttributes.color.location, 3, _gl.FLOAT, false, 0, 0);\\n    }\\n    bindingStates.disableUnusedAttributes();\\n    _gl.drawArrays(_gl.TRIANGLES, 0, object.count);\\n    object.count = 0;\\n  };\\n  this.renderBufferDirect = function(camera, scene, geometry, material, object, group) {\\n    if (scene === null)\\n      scene = _emptyScene;\\n    const frontFaceCW = object.isMesh && object.matrixWorld.determinant() < 0;\\n    const program = setProgram(camera, scene, geometry, material, object);\\n    state.setMaterial(material, frontFaceCW);\\n    let index = geometry.index;\\n    const position = geometry.attributes.position;\\n    if (index === null) {\\n      if (position === void 0 || position.count === 0)\\n        return;\\n    } else if (index.count === 0) {\\n      return;\\n    }\\n    let rangeFactor = 1;\\n    if (material.wireframe === true) {\\n      index = geometries.getWireframeAttribute(geometry);\\n      rangeFactor = 2;\\n    }\\n    bindingStates.setup(object, material, program, geometry, index);\\n    let attribute;\\n    let renderer = bufferRenderer;\\n    if (index !== null) {\\n      attribute = attributes.get(index);\\n      renderer = indexedBufferRenderer;\\n      renderer.setIndex(attribute);\\n    }\\n    const dataCount = index !== null ? index.count : position.count;\\n    const rangeStart = geometry.drawRange.start * rangeFactor;\\n    const rangeCount = geometry.drawRange.count * rangeFactor;\\n    const groupStart = group !== null ? group.start * rangeFactor : 0;\\n    const groupCount = group !== null ? group.count * rangeFactor : Infinity;\\n    const drawStart = Math.max(rangeStart, groupStart);\\n    const drawEnd = Math.min(dataCount, rangeStart + rangeCount, groupStart + groupCount) - 1;\\n    const drawCount = Math.max(0, drawEnd - drawStart + 1);\\n    if (drawCount === 0)\\n      return;\\n    if (object.isMesh) {\\n      if (material.wireframe === true) {\\n        state.setLineWidth(material.wireframeLinewidth * getTargetPixelRatio());\\n        renderer.setMode(_gl.LINES);\\n      } else {\\n        renderer.setMode(_gl.TRIANGLES);\\n      }\\n    } else if (object.isLine) {\\n      let lineWidth = material.linewidth;\\n      if (lineWidth === void 0)\\n        lineWidth = 1;\\n      state.setLineWidth(lineWidth * getTargetPixelRatio());\\n      if (object.isLineSegments) {\\n        renderer.setMode(_gl.LINES);\\n      } else if (object.isLineLoop) {\\n        renderer.setMode(_gl.LINE_LOOP);\\n      } else {\\n        renderer.setMode(_gl.LINE_STRIP);\\n      }\\n    } else if (object.isPoints) {\\n      renderer.setMode(_gl.POINTS);\\n    } else if (object.isSprite) {\\n      renderer.setMode(_gl.TRIANGLES);\\n    }\\n    if (object.isInstancedMesh) {\\n      renderer.renderInstances(drawStart, drawCount, object.count);\\n    } else if (geometry.isInstancedBufferGeometry) {\\n      const instanceCount = Math.min(geometry.instanceCount, geometry._maxInstanceCount);\\n      renderer.renderInstances(drawStart, drawCount, instanceCount);\\n    } else {\\n      renderer.render(drawStart, drawCount);\\n    }\\n  };\\n  this.compile = function(scene, camera) {\\n    currentRenderState = renderStates.get(scene);\\n    currentRenderState.init();\\n    renderStateStack.push(currentRenderState);\\n    scene.traverseVisible(function(object) {\\n      if (object.isLight && object.layers.test(camera.layers)) {\\n        currentRenderState.pushLight(object);\\n        if (object.castShadow) {\\n          currentRenderState.pushShadow(object);\\n        }\\n      }\\n    });\\n    currentRenderState.setupLights(_this.physicallyCorrectLights);\\n    scene.traverse(function(object) {\\n      const material = object.material;\\n      if (material) {\\n        if (Array.isArray(material)) {\\n          for (let i = 0; i < material.length; i++) {\\n            const material2 = material[i];\\n            getProgram(material2, scene, object);\\n          }\\n        } else {\\n          getProgram(material, scene, object);\\n        }\\n      }\\n    });\\n    renderStateStack.pop();\\n    currentRenderState = null;\\n  };\\n  let onAnimationFrameCallback = null;\\n  function onAnimationFrame(time) {\\n    if (onAnimationFrameCallback)\\n      onAnimationFrameCallback(time);\\n  }\\n  function onXRSessionStart() {\\n    animation.stop();\\n  }\\n  function onXRSessionEnd() {\\n    animation.start();\\n  }\\n  const animation = new WebGLAnimation();\\n  animation.setAnimationLoop(onAnimationFrame);\\n  if (typeof window !== \\\\\\\"undefined\\\\\\\")\\n    animation.setContext(window);\\n  this.setAnimationLoop = function(callback) {\\n    onAnimationFrameCallback = callback;\\n    xr.setAnimationLoop(callback);\\n    callback === null ? animation.stop() : animation.start();\\n  };\\n  xr.addEventListener(\\\\\\\"sessionstart\\\\\\\", onXRSessionStart);\\n  xr.addEventListener(\\\\\\\"sessionend\\\\\\\", onXRSessionEnd);\\n  this.render = function(scene, camera) {\\n    if (camera !== void 0 && camera.isCamera !== true) {\\n      console.error(\\\\\\\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\\\\\\\");\\n      return;\\n    }\\n    if (_isContextLost === true)\\n      return;\\n    if (scene.autoUpdate === true)\\n      scene.updateMatrixWorld();\\n    if (camera.parent === null)\\n      camera.updateMatrixWorld();\\n    if (xr.enabled === true && xr.isPresenting === true) {\\n      if (xr.cameraAutoUpdate === true)\\n        xr.updateCamera(camera);\\n      camera = xr.getCamera();\\n    }\\n    if (scene.isScene === true)\\n      scene.onBeforeRender(_this, scene, camera, _currentRenderTarget);\\n    currentRenderState = renderStates.get(scene, renderStateStack.length);\\n    currentRenderState.init();\\n    renderStateStack.push(currentRenderState);\\n    _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\\n    _frustum.setFromProjectionMatrix(_projScreenMatrix);\\n    _localClippingEnabled = this.localClippingEnabled;\\n    _clippingEnabled = clipping.init(this.clippingPlanes, _localClippingEnabled, camera);\\n    currentRenderList = renderLists.get(scene, renderListStack.length);\\n    currentRenderList.init();\\n    renderListStack.push(currentRenderList);\\n    projectObject(scene, camera, 0, _this.sortObjects);\\n    currentRenderList.finish();\\n    if (_this.sortObjects === true) {\\n      currentRenderList.sort(_opaqueSort, _transparentSort);\\n    }\\n    if (_clippingEnabled === true)\\n      clipping.beginShadows();\\n    const shadowsArray = currentRenderState.state.shadowsArray;\\n    shadowMap.render(shadowsArray, scene, camera);\\n    if (_clippingEnabled === true)\\n      clipping.endShadows();\\n    if (this.info.autoReset === true)\\n      this.info.reset();\\n    background2.render(currentRenderList, scene);\\n    currentRenderState.setupLights(_this.physicallyCorrectLights);\\n    if (camera.isArrayCamera) {\\n      const cameras = camera.cameras;\\n      for (let i = 0, l = cameras.length; i < l; i++) {\\n        const camera2 = cameras[i];\\n        renderScene(currentRenderList, scene, camera2, camera2.viewport);\\n      }\\n    } else {\\n      renderScene(currentRenderList, scene, camera);\\n    }\\n    if (_currentRenderTarget !== null) {\\n      textures.updateMultisampleRenderTarget(_currentRenderTarget);\\n      textures.updateRenderTargetMipmap(_currentRenderTarget);\\n    }\\n    if (scene.isScene === true)\\n      scene.onAfterRender(_this, scene, camera);\\n    state.buffers.depth.setTest(true);\\n    state.buffers.depth.setMask(true);\\n    state.buffers.color.setMask(true);\\n    state.setPolygonOffset(false);\\n    bindingStates.resetDefaultState();\\n    _currentMaterialId = -1;\\n    _currentCamera = null;\\n    renderStateStack.pop();\\n    if (renderStateStack.length > 0) {\\n      currentRenderState = renderStateStack[renderStateStack.length - 1];\\n    } else {\\n      currentRenderState = null;\\n    }\\n    renderListStack.pop();\\n    if (renderListStack.length > 0) {\\n      currentRenderList = renderListStack[renderListStack.length - 1];\\n    } else {\\n      currentRenderList = null;\\n    }\\n  };\\n  function projectObject(object, camera, groupOrder, sortObjects) {\\n    if (object.visible === false)\\n      return;\\n    const visible = object.layers.test(camera.layers);\\n    if (visible) {\\n      if (object.isGroup) {\\n        groupOrder = object.renderOrder;\\n      } else if (object.isLOD) {\\n        if (object.autoUpdate === true)\\n          object.update(camera);\\n      } else if (object.isLight) {\\n        currentRenderState.pushLight(object);\\n        if (object.castShadow) {\\n          currentRenderState.pushShadow(object);\\n        }\\n      } else if (object.isSprite) {\\n        if (!object.frustumCulled || _frustum.intersectsSprite(object)) {\\n          if (sortObjects) {\\n            _vector32.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix);\\n          }\\n          const geometry = objects.update(object);\\n          const material = object.material;\\n          if (material.visible) {\\n            currentRenderList.push(object, geometry, material, groupOrder, _vector32.z, null);\\n          }\\n        }\\n      } else if (object.isImmediateRenderObject) {\\n        if (sortObjects) {\\n          _vector32.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix);\\n        }\\n        currentRenderList.push(object, null, object.material, groupOrder, _vector32.z, null);\\n      } else if (object.isMesh || object.isLine || object.isPoints) {\\n        if (object.isSkinnedMesh) {\\n          if (object.skeleton.frame !== info.render.frame) {\\n            object.skeleton.update();\\n            object.skeleton.frame = info.render.frame;\\n          }\\n        }\\n        if (!object.frustumCulled || _frustum.intersectsObject(object)) {\\n          if (sortObjects) {\\n            _vector32.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix);\\n          }\\n          const geometry = objects.update(object);\\n          const material = object.material;\\n          if (Array.isArray(material)) {\\n            const groups = geometry.groups;\\n            for (let i = 0, l = groups.length; i < l; i++) {\\n              const group = groups[i];\\n              const groupMaterial = material[group.materialIndex];\\n              if (groupMaterial && groupMaterial.visible) {\\n                currentRenderList.push(object, geometry, groupMaterial, groupOrder, _vector32.z, group);\\n              }\\n            }\\n          } else if (material.visible) {\\n            currentRenderList.push(object, geometry, material, groupOrder, _vector32.z, null);\\n          }\\n        }\\n      }\\n    }\\n    const children = object.children;\\n    for (let i = 0, l = children.length; i < l; i++) {\\n      projectObject(children[i], camera, groupOrder, sortObjects);\\n    }\\n  }\\n  function renderScene(currentRenderList2, scene, camera, viewport) {\\n    const opaqueObjects = currentRenderList2.opaque;\\n    const transmissiveObjects = currentRenderList2.transmissive;\\n    const transparentObjects = currentRenderList2.transparent;\\n    currentRenderState.setupLightsView(camera);\\n    if (transmissiveObjects.length > 0)\\n      renderTransmissionPass(opaqueObjects, scene, camera);\\n    if (viewport)\\n      state.viewport(_currentViewport.copy(viewport));\\n    if (opaqueObjects.length > 0)\\n      renderObjects(opaqueObjects, scene, camera);\\n    if (transmissiveObjects.length > 0)\\n      renderObjects(transmissiveObjects, scene, camera);\\n    if (transparentObjects.length > 0)\\n      renderObjects(transparentObjects, scene, camera);\\n  }\\n  function renderTransmissionPass(opaqueObjects, scene, camera) {\\n    if (_transmissionRenderTarget === null) {\\n      const needsAntialias = _antialias === true && capabilities.isWebGL2 === true;\\n      const renderTargetType = needsAntialias ? WebGLMultisampleRenderTarget : WebGLRenderTarget;\\n      _transmissionRenderTarget = new renderTargetType(1024, 1024, {\\n        generateMipmaps: true,\\n        type: utils.convert(HalfFloatType) !== null ? HalfFloatType : UnsignedByteType,\\n        minFilter: LinearMipmapLinearFilter,\\n        magFilter: NearestFilter,\\n        wrapS: ClampToEdgeWrapping,\\n        wrapT: ClampToEdgeWrapping\\n      });\\n    }\\n    const currentRenderTarget = _this.getRenderTarget();\\n    _this.setRenderTarget(_transmissionRenderTarget);\\n    _this.clear();\\n    const currentToneMapping = _this.toneMapping;\\n    _this.toneMapping = NoToneMapping;\\n    renderObjects(opaqueObjects, scene, camera);\\n    _this.toneMapping = currentToneMapping;\\n    textures.updateMultisampleRenderTarget(_transmissionRenderTarget);\\n    textures.updateRenderTargetMipmap(_transmissionRenderTarget);\\n    _this.setRenderTarget(currentRenderTarget);\\n  }\\n  function renderObjects(renderList, scene, camera) {\\n    const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\\n    for (let i = 0, l = renderList.length; i < l; i++) {\\n      const renderItem = renderList[i];\\n      const object = renderItem.object;\\n      const geometry = renderItem.geometry;\\n      const material = overrideMaterial === null ? renderItem.material : overrideMaterial;\\n      const group = renderItem.group;\\n      if (object.layers.test(camera.layers)) {\\n        renderObject(object, scene, camera, geometry, material, group);\\n      }\\n    }\\n  }\\n  function renderObject(object, scene, camera, geometry, material, group) {\\n    object.onBeforeRender(_this, scene, camera, geometry, material, group);\\n    object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld);\\n    object.normalMatrix.getNormalMatrix(object.modelViewMatrix);\\n    material.onBeforeRender(_this, scene, camera, geometry, object, group);\\n    if (object.isImmediateRenderObject) {\\n      const program = setProgram(camera, scene, geometry, material, object);\\n      state.setMaterial(material);\\n      bindingStates.reset();\\n      renderObjectImmediate(object, program);\\n    } else {\\n      if (material.transparent === true && material.side === DoubleSide) {\\n        material.side = BackSide;\\n        material.needsUpdate = true;\\n        _this.renderBufferDirect(camera, scene, geometry, material, object, group);\\n        material.side = FrontSide;\\n        material.needsUpdate = true;\\n        _this.renderBufferDirect(camera, scene, geometry, material, object, group);\\n        material.side = DoubleSide;\\n      } else {\\n        _this.renderBufferDirect(camera, scene, geometry, material, object, group);\\n      }\\n    }\\n    object.onAfterRender(_this, scene, camera, geometry, material, group);\\n  }\\n  function getProgram(material, scene, object) {\\n    if (scene.isScene !== true)\\n      scene = _emptyScene;\\n    const materialProperties = properties.get(material);\\n    const lights = currentRenderState.state.lights;\\n    const shadowsArray = currentRenderState.state.shadowsArray;\\n    const lightsStateVersion = lights.state.version;\\n    const parameters2 = programCache.getParameters(material, lights.state, shadowsArray, scene, object);\\n    const programCacheKey = programCache.getProgramCacheKey(parameters2);\\n    let programs = materialProperties.programs;\\n    materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\\n    materialProperties.fog = scene.fog;\\n    materialProperties.envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || materialProperties.environment);\\n    if (programs === void 0) {\\n      material.addEventListener(\\\\\\\"dispose\\\\\\\", onMaterialDispose);\\n      programs = new Map();\\n      materialProperties.programs = programs;\\n    }\\n    let program = programs.get(programCacheKey);\\n    if (program !== void 0) {\\n      if (materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion) {\\n        updateCommonMaterialProperties(material, parameters2);\\n        return program;\\n      }\\n    } else {\\n      parameters2.uniforms = programCache.getUniforms(material);\\n      material.onBuild(parameters2, _this);\\n      material.onBeforeCompile(parameters2, _this);\\n      program = programCache.acquireProgram(parameters2, programCacheKey);\\n      programs.set(programCacheKey, program);\\n      materialProperties.uniforms = parameters2.uniforms;\\n    }\\n    const uniforms = materialProperties.uniforms;\\n    if (!material.isShaderMaterial && !material.isRawShaderMaterial || material.clipping === true) {\\n      uniforms.clippingPlanes = clipping.uniform;\\n    }\\n    updateCommonMaterialProperties(material, parameters2);\\n    materialProperties.needsLights = materialNeedsLights(material);\\n    materialProperties.lightsStateVersion = lightsStateVersion;\\n    if (materialProperties.needsLights) {\\n      uniforms.ambientLightColor.value = lights.state.ambient;\\n      uniforms.lightProbe.value = lights.state.probe;\\n      uniforms.directionalLights.value = lights.state.directional;\\n      uniforms.directionalLightShadows.value = lights.state.directionalShadow;\\n      uniforms.spotLights.value = lights.state.spot;\\n      uniforms.spotLightShadows.value = lights.state.spotShadow;\\n      uniforms.rectAreaLights.value = lights.state.rectArea;\\n      uniforms.ltc_1.value = lights.state.rectAreaLTC1;\\n      uniforms.ltc_2.value = lights.state.rectAreaLTC2;\\n      uniforms.pointLights.value = lights.state.point;\\n      uniforms.pointLightShadows.value = lights.state.pointShadow;\\n      uniforms.hemisphereLights.value = lights.state.hemi;\\n      uniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\\n      uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\\n      uniforms.spotShadowMap.value = lights.state.spotShadowMap;\\n      uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\\n      uniforms.pointShadowMap.value = lights.state.pointShadowMap;\\n      uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\\n    }\\n    const progUniforms = program.getUniforms();\\n    const uniformsList = WebGLUniforms.seqWithValue(progUniforms.seq, uniforms);\\n    materialProperties.currentProgram = program;\\n    materialProperties.uniformsList = uniformsList;\\n    return program;\\n  }\\n  function updateCommonMaterialProperties(material, parameters2) {\\n    const materialProperties = properties.get(material);\\n    materialProperties.outputEncoding = parameters2.outputEncoding;\\n    materialProperties.instancing = parameters2.instancing;\\n    materialProperties.skinning = parameters2.skinning;\\n    materialProperties.morphTargets = parameters2.morphTargets;\\n    materialProperties.morphNormals = parameters2.morphNormals;\\n    materialProperties.morphTargetsCount = parameters2.morphTargetsCount;\\n    materialProperties.numClippingPlanes = parameters2.numClippingPlanes;\\n    materialProperties.numIntersection = parameters2.numClipIntersection;\\n    materialProperties.vertexAlphas = parameters2.vertexAlphas;\\n    materialProperties.vertexTangents = parameters2.vertexTangents;\\n  }\\n  function setProgram(camera, scene, geometry, material, object) {\\n    if (scene.isScene !== true)\\n      scene = _emptyScene;\\n    textures.resetTextureUnits();\\n    const fog = scene.fog;\\n    const environment = material.isMeshStandardMaterial ? scene.environment : null;\\n    const encoding = _currentRenderTarget === null ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\\n    const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment);\\n    const vertexAlphas = material.vertexColors === true && !!geometry && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4;\\n    const vertexTangents = !!material.normalMap && !!geometry && !!geometry.attributes.tangent;\\n    const morphTargets = !!geometry && !!geometry.morphAttributes.position;\\n    const morphNormals = !!geometry && !!geometry.morphAttributes.normal;\\n    const morphTargetsCount = !!geometry && !!geometry.morphAttributes.position ? geometry.morphAttributes.position.length : 0;\\n    const materialProperties = properties.get(material);\\n    const lights = currentRenderState.state.lights;\\n    if (_clippingEnabled === true) {\\n      if (_localClippingEnabled === true || camera !== _currentCamera) {\\n        const useCache = camera === _currentCamera && material.id === _currentMaterialId;\\n        clipping.setState(material, camera, useCache);\\n      }\\n    }\\n    let needsProgramChange = false;\\n    if (material.version === materialProperties.__version) {\\n      if (materialProperties.needsLights && materialProperties.lightsStateVersion !== lights.state.version) {\\n        needsProgramChange = true;\\n      } else if (materialProperties.outputEncoding !== encoding) {\\n        needsProgramChange = true;\\n      } else if (object.isInstancedMesh && materialProperties.instancing === false) {\\n        needsProgramChange = true;\\n      } else if (!object.isInstancedMesh && materialProperties.instancing === true) {\\n        needsProgramChange = true;\\n      } else if (object.isSkinnedMesh && materialProperties.skinning === false) {\\n        needsProgramChange = true;\\n      } else if (!object.isSkinnedMesh && materialProperties.skinning === true) {\\n        needsProgramChange = true;\\n      } else if (materialProperties.envMap !== envMap) {\\n        needsProgramChange = true;\\n      } else if (material.fog && materialProperties.fog !== fog) {\\n        needsProgramChange = true;\\n      } else if (materialProperties.numClippingPlanes !== void 0 && (materialProperties.numClippingPlanes !== clipping.numPlanes || materialProperties.numIntersection !== clipping.numIntersection)) {\\n        needsProgramChange = true;\\n      } else if (materialProperties.vertexAlphas !== vertexAlphas) {\\n        needsProgramChange = true;\\n      } else if (materialProperties.vertexTangents !== vertexTangents) {\\n        needsProgramChange = true;\\n      } else if (materialProperties.morphTargets !== morphTargets) {\\n        needsProgramChange = true;\\n      } else if (materialProperties.morphNormals !== morphNormals) {\\n        needsProgramChange = true;\\n      } else if (capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount) {\\n        needsProgramChange = true;\\n      }\\n    } else {\\n      needsProgramChange = true;\\n      materialProperties.__version = material.version;\\n    }\\n    let program = materialProperties.currentProgram;\\n    if (needsProgramChange === true) {\\n      program = getProgram(material, scene, object);\\n    }\\n    let refreshProgram = false;\\n    let refreshMaterial = false;\\n    let refreshLights = false;\\n    const p_uniforms = program.getUniforms(), m_uniforms = materialProperties.uniforms;\\n    if (state.useProgram(program.program)) {\\n      refreshProgram = true;\\n      refreshMaterial = true;\\n      refreshLights = true;\\n    }\\n    if (material.id !== _currentMaterialId) {\\n      _currentMaterialId = material.id;\\n      refreshMaterial = true;\\n    }\\n    if (refreshProgram || _currentCamera !== camera) {\\n      p_uniforms.setValue(_gl, \\\\\\\"projectionMatrix\\\\\\\", camera.projectionMatrix);\\n      if (capabilities.logarithmicDepthBuffer) {\\n        p_uniforms.setValue(_gl, \\\\\\\"logDepthBufFC\\\\\\\", 2 / (Math.log(camera.far + 1) / Math.LN2));\\n      }\\n      if (_currentCamera !== camera) {\\n        _currentCamera = camera;\\n        refreshMaterial = true;\\n        refreshLights = true;\\n      }\\n      if (material.isShaderMaterial || material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshStandardMaterial || material.envMap) {\\n        const uCamPos = p_uniforms.map.cameraPosition;\\n        if (uCamPos !== void 0) {\\n          uCamPos.setValue(_gl, _vector32.setFromMatrixPosition(camera.matrixWorld));\\n        }\\n      }\\n      if (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial) {\\n        p_uniforms.setValue(_gl, \\\\\\\"isOrthographic\\\\\\\", camera.isOrthographicCamera === true);\\n      }\\n      if (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial || material.isShadowMaterial || object.isSkinnedMesh) {\\n        p_uniforms.setValue(_gl, \\\\\\\"viewMatrix\\\\\\\", camera.matrixWorldInverse);\\n      }\\n    }\\n    if (object.isSkinnedMesh) {\\n      p_uniforms.setOptional(_gl, object, \\\\\\\"bindMatrix\\\\\\\");\\n      p_uniforms.setOptional(_gl, object, \\\\\\\"bindMatrixInverse\\\\\\\");\\n      const skeleton = object.skeleton;\\n      if (skeleton) {\\n        if (capabilities.floatVertexTextures) {\\n          if (skeleton.boneTexture === null)\\n            skeleton.computeBoneTexture();\\n          p_uniforms.setValue(_gl, \\\\\\\"boneTexture\\\\\\\", skeleton.boneTexture, textures);\\n          p_uniforms.setValue(_gl, \\\\\\\"boneTextureSize\\\\\\\", skeleton.boneTextureSize);\\n        } else {\\n          p_uniforms.setOptional(_gl, skeleton, \\\\\\\"boneMatrices\\\\\\\");\\n        }\\n      }\\n    }\\n    if (!!geometry && (geometry.morphAttributes.position !== void 0 || geometry.morphAttributes.normal !== void 0)) {\\n      morphtargets.update(object, geometry, material, program);\\n    }\\n    if (refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow) {\\n      materialProperties.receiveShadow = object.receiveShadow;\\n      p_uniforms.setValue(_gl, \\\\\\\"receiveShadow\\\\\\\", object.receiveShadow);\\n    }\\n    if (refreshMaterial) {\\n      p_uniforms.setValue(_gl, \\\\\\\"toneMappingExposure\\\\\\\", _this.toneMappingExposure);\\n      if (materialProperties.needsLights) {\\n        markUniformsLightsNeedsUpdate(m_uniforms, refreshLights);\\n      }\\n      if (fog && material.fog) {\\n        materials2.refreshFogUniforms(m_uniforms, fog);\\n      }\\n      materials2.refreshMaterialUniforms(m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget);\\n      WebGLUniforms.upload(_gl, materialProperties.uniformsList, m_uniforms, textures);\\n    }\\n    if (material.isShaderMaterial && material.uniformsNeedUpdate === true) {\\n      WebGLUniforms.upload(_gl, materialProperties.uniformsList, m_uniforms, textures);\\n      material.uniformsNeedUpdate = false;\\n    }\\n    if (material.isSpriteMaterial) {\\n      p_uniforms.setValue(_gl, \\\\\\\"center\\\\\\\", object.center);\\n    }\\n    p_uniforms.setValue(_gl, \\\\\\\"modelViewMatrix\\\\\\\", object.modelViewMatrix);\\n    p_uniforms.setValue(_gl, \\\\\\\"normalMatrix\\\\\\\", object.normalMatrix);\\n    p_uniforms.setValue(_gl, \\\\\\\"modelMatrix\\\\\\\", object.matrixWorld);\\n    return program;\\n  }\\n  function markUniformsLightsNeedsUpdate(uniforms, value) {\\n    uniforms.ambientLightColor.needsUpdate = value;\\n    uniforms.lightProbe.needsUpdate = value;\\n    uniforms.directionalLights.needsUpdate = value;\\n    uniforms.directionalLightShadows.needsUpdate = value;\\n    uniforms.pointLights.needsUpdate = value;\\n    uniforms.pointLightShadows.needsUpdate = value;\\n    uniforms.spotLights.needsUpdate = value;\\n    uniforms.spotLightShadows.needsUpdate = value;\\n    uniforms.rectAreaLights.needsUpdate = value;\\n    uniforms.hemisphereLights.needsUpdate = value;\\n  }\\n  function materialNeedsLights(material) {\\n    return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isShadowMaterial || material.isShaderMaterial && material.lights === true;\\n  }\\n  this.getActiveCubeFace = function() {\\n    return _currentActiveCubeFace;\\n  };\\n  this.getActiveMipmapLevel = function() {\\n    return _currentActiveMipmapLevel;\\n  };\\n  this.getRenderTarget = function() {\\n    return _currentRenderTarget;\\n  };\\n  this.setRenderTarget = function(renderTarget, activeCubeFace = 0, activeMipmapLevel = 0) {\\n    _currentRenderTarget = renderTarget;\\n    _currentActiveCubeFace = activeCubeFace;\\n    _currentActiveMipmapLevel = activeMipmapLevel;\\n    if (renderTarget && properties.get(renderTarget).__webglFramebuffer === void 0) {\\n      textures.setupRenderTarget(renderTarget);\\n    }\\n    let framebuffer = null;\\n    let isCube = false;\\n    let isRenderTarget3D = false;\\n    if (renderTarget) {\\n      const texture = renderTarget.texture;\\n      if (texture.isDataTexture3D || texture.isDataTexture2DArray) {\\n        isRenderTarget3D = true;\\n      }\\n      const __webglFramebuffer = properties.get(renderTarget).__webglFramebuffer;\\n      if (renderTarget.isWebGLCubeRenderTarget) {\\n        framebuffer = __webglFramebuffer[activeCubeFace];\\n        isCube = true;\\n      } else if (renderTarget.isWebGLMultisampleRenderTarget) {\\n        framebuffer = properties.get(renderTarget).__webglMultisampledFramebuffer;\\n      } else {\\n        framebuffer = __webglFramebuffer;\\n      }\\n      _currentViewport.copy(renderTarget.viewport);\\n      _currentScissor.copy(renderTarget.scissor);\\n      _currentScissorTest = renderTarget.scissorTest;\\n    } else {\\n      _currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor();\\n      _currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor();\\n      _currentScissorTest = _scissorTest;\\n    }\\n    const framebufferBound = state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer);\\n    if (framebufferBound && capabilities.drawBuffers) {\\n      let needsUpdate = false;\\n      if (renderTarget) {\\n        if (renderTarget.isWebGLMultipleRenderTargets) {\\n          const textures2 = renderTarget.texture;\\n          if (_currentDrawBuffers.length !== textures2.length || _currentDrawBuffers[0] !== _gl.COLOR_ATTACHMENT0) {\\n            for (let i = 0, il = textures2.length; i < il; i++) {\\n              _currentDrawBuffers[i] = _gl.COLOR_ATTACHMENT0 + i;\\n            }\\n            _currentDrawBuffers.length = textures2.length;\\n            needsUpdate = true;\\n          }\\n        } else {\\n          if (_currentDrawBuffers.length !== 1 || _currentDrawBuffers[0] !== _gl.COLOR_ATTACHMENT0) {\\n            _currentDrawBuffers[0] = _gl.COLOR_ATTACHMENT0;\\n            _currentDrawBuffers.length = 1;\\n            needsUpdate = true;\\n          }\\n        }\\n      } else {\\n        if (_currentDrawBuffers.length !== 1 || _currentDrawBuffers[0] !== _gl.BACK) {\\n          _currentDrawBuffers[0] = _gl.BACK;\\n          _currentDrawBuffers.length = 1;\\n          needsUpdate = true;\\n        }\\n      }\\n      if (needsUpdate) {\\n        if (capabilities.isWebGL2) {\\n          _gl.drawBuffers(_currentDrawBuffers);\\n        } else {\\n          extensions.get(\\\\\\\"WEBGL_draw_buffers\\\\\\\").drawBuffersWEBGL(_currentDrawBuffers);\\n        }\\n      }\\n    }\\n    state.viewport(_currentViewport);\\n    state.scissor(_currentScissor);\\n    state.setScissorTest(_currentScissorTest);\\n    if (isCube) {\\n      const textureProperties = properties.get(renderTarget.texture);\\n      _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel);\\n    } else if (isRenderTarget3D) {\\n      const textureProperties = properties.get(renderTarget.texture);\\n      const layer = activeCubeFace || 0;\\n      _gl.framebufferTextureLayer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer);\\n    }\\n    _currentMaterialId = -1;\\n  };\\n  this.readRenderTargetPixels = function(renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) {\\n    if (!(renderTarget && renderTarget.isWebGLRenderTarget)) {\\n      console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\\\\\\\");\\n      return;\\n    }\\n    let framebuffer = properties.get(renderTarget).__webglFramebuffer;\\n    if (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== void 0) {\\n      framebuffer = framebuffer[activeCubeFaceIndex];\\n    }\\n    if (framebuffer) {\\n      state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer);\\n      try {\\n        const texture = renderTarget.texture;\\n        const textureFormat = texture.format;\\n        const textureType = texture.type;\\n        if (textureFormat !== RGBAFormat && utils.convert(textureFormat) !== _gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_FORMAT)) {\\n          console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\\\\\\\");\\n          return;\\n        }\\n        const halfFloatSupportedByExt = textureType === HalfFloatType && (extensions.has(\\\\\\\"EXT_color_buffer_half_float\\\\\\\") || capabilities.isWebGL2 && extensions.has(\\\\\\\"EXT_color_buffer_float\\\\\\\"));\\n        if (textureType !== UnsignedByteType && utils.convert(textureType) !== _gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_TYPE) && !(textureType === FloatType && (capabilities.isWebGL2 || extensions.has(\\\\\\\"OES_texture_float\\\\\\\") || extensions.has(\\\\\\\"WEBGL_color_buffer_float\\\\\\\"))) && !halfFloatSupportedByExt) {\\n          console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\\\\\\\");\\n          return;\\n        }\\n        if (_gl.checkFramebufferStatus(_gl.FRAMEBUFFER) === _gl.FRAMEBUFFER_COMPLETE) {\\n          if (x >= 0 && x <= renderTarget.width - width && (y >= 0 && y <= renderTarget.height - height)) {\\n            _gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), buffer);\\n          }\\n        } else {\\n          console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\\\\\\\");\\n        }\\n      } finally {\\n        const framebuffer2 = _currentRenderTarget !== null ? properties.get(_currentRenderTarget).__webglFramebuffer : null;\\n        state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer2);\\n      }\\n    }\\n  };\\n  this.copyFramebufferToTexture = function(position, texture, level = 0) {\\n    const levelScale = Math.pow(2, -level);\\n    const width = Math.floor(texture.image.width * levelScale);\\n    const height = Math.floor(texture.image.height * levelScale);\\n    let glFormat = utils.convert(texture.format);\\n    if (capabilities.isWebGL2) {\\n      if (glFormat === _gl.RGB)\\n        glFormat = _gl.RGB8;\\n      if (glFormat === _gl.RGBA)\\n        glFormat = _gl.RGBA8;\\n    }\\n    textures.setTexture2D(texture, 0);\\n    _gl.copyTexImage2D(_gl.TEXTURE_2D, level, glFormat, position.x, position.y, width, height, 0);\\n    state.unbindTexture();\\n  };\\n  this.copyTextureToTexture = function(position, srcTexture, dstTexture, level = 0) {\\n    const width = srcTexture.image.width;\\n    const height = srcTexture.image.height;\\n    const glFormat = utils.convert(dstTexture.format);\\n    const glType = utils.convert(dstTexture.type);\\n    textures.setTexture2D(dstTexture, 0);\\n    _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY);\\n    _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha);\\n    _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment);\\n    if (srcTexture.isDataTexture) {\\n      _gl.texSubImage2D(_gl.TEXTURE_2D, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data);\\n    } else {\\n      if (srcTexture.isCompressedTexture) {\\n        _gl.compressedTexSubImage2D(_gl.TEXTURE_2D, level, position.x, position.y, srcTexture.mipmaps[0].width, srcTexture.mipmaps[0].height, glFormat, srcTexture.mipmaps[0].data);\\n      } else {\\n        _gl.texSubImage2D(_gl.TEXTURE_2D, level, position.x, position.y, glFormat, glType, srcTexture.image);\\n      }\\n    }\\n    if (level === 0 && dstTexture.generateMipmaps)\\n      _gl.generateMipmap(_gl.TEXTURE_2D);\\n    state.unbindTexture();\\n  };\\n  this.copyTextureToTexture3D = function(sourceBox, position, srcTexture, dstTexture, level = 0) {\\n    if (_this.isWebGL1Renderer) {\\n      console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\\\\\\\");\\n      return;\\n    }\\n    const width = sourceBox.max.x - sourceBox.min.x + 1;\\n    const height = sourceBox.max.y - sourceBox.min.y + 1;\\n    const depth2 = sourceBox.max.z - sourceBox.min.z + 1;\\n    const glFormat = utils.convert(dstTexture.format);\\n    const glType = utils.convert(dstTexture.type);\\n    let glTarget;\\n    if (dstTexture.isDataTexture3D) {\\n      textures.setTexture3D(dstTexture, 0);\\n      glTarget = _gl.TEXTURE_3D;\\n    } else if (dstTexture.isDataTexture2DArray) {\\n      textures.setTexture2DArray(dstTexture, 0);\\n      glTarget = _gl.TEXTURE_2D_ARRAY;\\n    } else {\\n      console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\\\\\\\");\\n      return;\\n    }\\n    _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY);\\n    _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha);\\n    _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment);\\n    const unpackRowLen = _gl.getParameter(_gl.UNPACK_ROW_LENGTH);\\n    const unpackImageHeight = _gl.getParameter(_gl.UNPACK_IMAGE_HEIGHT);\\n    const unpackSkipPixels = _gl.getParameter(_gl.UNPACK_SKIP_PIXELS);\\n    const unpackSkipRows = _gl.getParameter(_gl.UNPACK_SKIP_ROWS);\\n    const unpackSkipImages = _gl.getParameter(_gl.UNPACK_SKIP_IMAGES);\\n    const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[0] : srcTexture.image;\\n    _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, image.width);\\n    _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, image.height);\\n    _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, sourceBox.min.x);\\n    _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, sourceBox.min.y);\\n    _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, sourceBox.min.z);\\n    if (srcTexture.isDataTexture || srcTexture.isDataTexture3D) {\\n      _gl.texSubImage3D(glTarget, level, position.x, position.y, position.z, width, height, depth2, glFormat, glType, image.data);\\n    } else {\\n      if (srcTexture.isCompressedTexture) {\\n        console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\\\\\\\");\\n        _gl.compressedTexSubImage3D(glTarget, level, position.x, position.y, position.z, width, height, depth2, glFormat, image.data);\\n      } else {\\n        _gl.texSubImage3D(glTarget, level, position.x, position.y, position.z, width, height, depth2, glFormat, glType, image);\\n      }\\n    }\\n    _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, unpackRowLen);\\n    _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight);\\n    _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, unpackSkipPixels);\\n    _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, unpackSkipRows);\\n    _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, unpackSkipImages);\\n    if (level === 0 && dstTexture.generateMipmaps)\\n      _gl.generateMipmap(glTarget);\\n    state.unbindTexture();\\n  };\\n  this.initTexture = function(texture) {\\n    textures.setTexture2D(texture, 0);\\n    state.unbindTexture();\\n  };\\n  this.resetState = function() {\\n    _currentActiveCubeFace = 0;\\n    _currentActiveMipmapLevel = 0;\\n    _currentRenderTarget = null;\\n    state.reset();\\n    bindingStates.reset();\\n  };\\n  if (typeof __THREE_DEVTOOLS__ !== \\\\\\\"undefined\\\\\\\") {\\n    __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\", {detail: this}));\\n  }\\n}\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/RenderersController.ts\\nvar CONTEXT_OPTIONS = {};\\nvar WebGLContext;\\n(function(WebGLContext2) {\\n  WebGLContext2[\\\\\\\"WEBGL\\\\\\\"] = \\\\\\\"webgl\\\\\\\";\\n  WebGLContext2[\\\\\\\"WEBGL2\\\\\\\"] = \\\\\\\"webgl2\\\\\\\";\\n  WebGLContext2[\\\\\\\"EXPERIMENTAL_WEBGL\\\\\\\"] = \\\\\\\"experimental-webgl\\\\\\\";\\n  WebGLContext2[\\\\\\\"EXPERIMENTAL_WEBGL2\\\\\\\"] = \\\\\\\"experimental-webgl2\\\\\\\";\\n})(WebGLContext || (WebGLContext = {}));\\nvar RenderersController = class {\\n  constructor() {\\n    this._next_renderer_id = 0;\\n    this._renderers = {};\\n    this._printDebug = false;\\n    this._require_webgl2 = false;\\n    this._resolves = [];\\n  }\\n  setPrintDebug(state = true) {\\n    this._printDebug = state;\\n  }\\n  printDebug() {\\n    return this._printDebug;\\n  }\\n  printDebugMessage(message) {\\n    if (!this._printDebug) {\\n      return;\\n    }\\n    console.warn(\\\\\\\"[Poly debug]\\\\\\\", message);\\n  }\\n  setRequireWebGL2() {\\n    if (!this._require_webgl2) {\\n      this._require_webgl2 = true;\\n    }\\n  }\\n  webgl2Available() {\\n    if (this._webgl2_available === void 0) {\\n      this._webgl2_available = this._set_webgl2_available();\\n    }\\n    return this._webgl2_available;\\n  }\\n  _set_webgl2_available() {\\n    const canvas = document.createElement(\\\\\\\"canvas\\\\\\\");\\n    return (window.WebGL2RenderingContext && canvas.getContext(WebGLContext.WEBGL2)) != null;\\n  }\\n  createWebGLRenderer(params) {\\n    const renderer = new WebGLRenderer(params);\\n    this.printDebugMessage([`create renderer:`, params]);\\n    return renderer;\\n  }\\n  createRenderingContext(canvas) {\\n    let gl = null;\\n    if (this._require_webgl2) {\\n      gl = this._getRenderingContextWebgl(canvas, true);\\n      if (!gl) {\\n        console.warn(\\\\\\\"failed to create webgl2 context\\\\\\\");\\n      }\\n    }\\n    if (!gl) {\\n      gl = this._getRenderingContextWebgl(canvas, false);\\n    }\\n    return gl;\\n  }\\n  _getRenderingContextWebgl(canvas, webgl2) {\\n    let context_name;\\n    if (this.webgl2Available()) {\\n      context_name = WebGLContext.WEBGL2;\\n    } else {\\n      context_name = webgl2 ? WebGLContext.WEBGL2 : WebGLContext.WEBGL;\\n    }\\n    let gl = canvas.getContext(context_name, CONTEXT_OPTIONS);\\n    if (gl) {\\n      this.printDebugMessage(`create gl context: ${context_name}.`);\\n    } else {\\n      context_name = webgl2 ? WebGLContext.EXPERIMENTAL_WEBGL2 : WebGLContext.EXPERIMENTAL_WEBGL;\\n      this.printDebugMessage(`create gl context: ${context_name}.`);\\n      gl = canvas.getContext(context_name, CONTEXT_OPTIONS);\\n    }\\n    return gl;\\n  }\\n  registerRenderer(renderer) {\\n    if (renderer._polygon_id) {\\n      throw new Error(\\\\\\\"render already registered\\\\\\\");\\n    }\\n    renderer._polygon_id = this._next_renderer_id += 1;\\n    this._renderers[renderer._polygon_id] = renderer;\\n    if (Object.keys(this._renderers).length == 1) {\\n      this.flush_callbacks_with_renderer(renderer);\\n    }\\n  }\\n  deregisterRenderer(renderer) {\\n    delete this._renderers[renderer._polygon_id];\\n    renderer.dispose();\\n  }\\n  firstRenderer() {\\n    const first_id = Object.keys(this._renderers)[0];\\n    if (first_id) {\\n      return this._renderers[first_id];\\n    }\\n    return null;\\n  }\\n  renderers() {\\n    return Object.values(this._renderers);\\n  }\\n  flush_callbacks_with_renderer(renderer) {\\n    let callback;\\n    while (callback = this._resolves.pop()) {\\n      callback(renderer);\\n    }\\n  }\\n  async waitForRenderer() {\\n    const renderer = this.firstRenderer();\\n    if (renderer) {\\n      return renderer;\\n    } else {\\n      return new Promise((resolve, reject) => {\\n        this._resolves.push(resolve);\\n      });\\n    }\\n  }\\n  renderTarget(width, height, parameters) {\\n    if (this.webgl2Available()) {\\n      return new WebGLMultisampleRenderTarget(width, height, parameters);\\n    } else {\\n      return new WebGLRenderTarget(width, height, parameters);\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/PolyLibsController.ts\\nvar PolyLibsController = class {\\n  constructor() {\\n    this._root = \\\\\\\"/three/js/libs\\\\\\\";\\n    this._BASISPath = \\\\\\\"/basis\\\\\\\";\\n    this._DRACOPath = \\\\\\\"/draco\\\\\\\";\\n    this._DRACOGLTFPath = \\\\\\\"/draco/gltf\\\\\\\";\\n  }\\n  root() {\\n    return this._root;\\n  }\\n  setRoot(url) {\\n    this._root = url;\\n  }\\n  BASISPath() {\\n    return this._BASISPath;\\n  }\\n  DRACOPath() {\\n    return this._DRACOPath;\\n  }\\n  DRACOGLTFPath() {\\n    return this._DRACOGLTFPath;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/nodes/NodesRegister.ts\\nvar NodesRegister = class {\\n  constructor(poly) {\\n    this.poly = poly;\\n    this._node_register = new Map();\\n    this._node_register_categories = new Map();\\n    this._node_register_options = new Map();\\n  }\\n  static type(node) {\\n    return this.filterType(node.type());\\n  }\\n  static filterType(nodeType) {\\n    return nodeType.toLowerCase();\\n  }\\n  register(node, tab_menu_category, options) {\\n    const context = node.context();\\n    const nodeType = NodesRegister.type(node);\\n    let current_nodes_for_context = this._node_register.get(context);\\n    if (!current_nodes_for_context) {\\n      current_nodes_for_context = new Map();\\n      this._node_register.set(context, current_nodes_for_context);\\n    }\\n    const already_registered_node = current_nodes_for_context.get(nodeType);\\n    if (already_registered_node) {\\n      console.error(`node ${context}/${nodeType} already registered`);\\n      return;\\n    }\\n    current_nodes_for_context.set(nodeType, node);\\n    if (tab_menu_category) {\\n      let current_categories = this._node_register_categories.get(context);\\n      if (!current_categories) {\\n        current_categories = new Map();\\n        this._node_register_categories.set(context, current_categories);\\n      }\\n      current_categories.set(nodeType, tab_menu_category);\\n    }\\n    if (options) {\\n      let current_options = this._node_register_options.get(context);\\n      if (!current_options) {\\n        current_options = new Map();\\n        this._node_register_options.set(context, current_options);\\n      }\\n      current_options.set(nodeType, options);\\n    }\\n    this.poly.pluginsRegister.registerNode(node);\\n  }\\n  deregister(context, nodeType) {\\n    nodeType = NodesRegister.filterType(nodeType);\\n    this._node_register.get(context)?.delete(nodeType);\\n    this._node_register_categories.get(context)?.delete(nodeType);\\n    this._node_register_options.get(context)?.delete(nodeType);\\n  }\\n  isRegistered(context, nodeType) {\\n    const nodes_for_context = this._node_register.get(context);\\n    if (!nodes_for_context) {\\n      return false;\\n    }\\n    nodeType = NodesRegister.filterType(nodeType);\\n    return nodes_for_context.get(nodeType) != null;\\n  }\\n  nodeOptions(context, nodeType) {\\n    nodeType = NodesRegister.filterType(nodeType);\\n    return this._node_register_options.get(context)?.get(nodeType);\\n  }\\n  registeredNodesForContextAndParentType(context, parent_node_type) {\\n    const map = this._node_register.get(context);\\n    if (map) {\\n      const nodes_for_context = [];\\n      this._node_register.get(context)?.forEach((node, type) => {\\n        nodes_for_context.push(node);\\n      });\\n      return nodes_for_context.filter((node) => {\\n        const nodeType = NodesRegister.type(node);\\n        const options = this._node_register_options.get(context)?.get(nodeType);\\n        if (!options) {\\n          return true;\\n        } else {\\n          const option_only = options[\\\\\\\"only\\\\\\\"];\\n          const option_except = options[\\\\\\\"except\\\\\\\"];\\n          const context_and_type = `${context}/${parent_node_type}`;\\n          if (option_only) {\\n            return option_only.includes(context_and_type);\\n          }\\n          if (option_except) {\\n            return !option_except.includes(context_and_type);\\n          }\\n          return true;\\n        }\\n      });\\n    } else {\\n      return [];\\n    }\\n  }\\n  registeredNodes(context, parentNodeType) {\\n    const nodesByType = {};\\n    const nodes = this.registeredNodesForContextAndParentType(context, parentNodeType);\\n    for (let node of nodes) {\\n      const nodeType = NodesRegister.type(node);\\n      nodesByType[nodeType] = node;\\n    }\\n    return nodesByType;\\n  }\\n  registeredCategory(context, nodeType) {\\n    nodeType = NodesRegister.filterType(nodeType);\\n    return this._node_register_categories.get(context)?.get(nodeType);\\n  }\\n  map() {\\n    return this._node_register;\\n  }\\n};\\nvar OperationsRegister = class {\\n  constructor(poly) {\\n    this.poly = poly;\\n    this._operation_register = new Map();\\n  }\\n  static type(node) {\\n    return this.filterType(node.type());\\n  }\\n  static filterType(nodeType) {\\n    return nodeType.toLowerCase();\\n  }\\n  register(operation) {\\n    const context = operation.context();\\n    let current_operations_for_context = this._operation_register.get(context);\\n    if (!current_operations_for_context) {\\n      current_operations_for_context = new Map();\\n      this._operation_register.set(context, current_operations_for_context);\\n    }\\n    const operationType = OperationsRegister.type(operation);\\n    const already_registered_operation = current_operations_for_context.get(operationType);\\n    if (already_registered_operation) {\\n      const message = `operation ${context}/${operationType} already registered`;\\n      console.error(message);\\n      return;\\n    }\\n    current_operations_for_context.set(operationType, operation);\\n    this.poly.pluginsRegister.registerOperation(operation);\\n  }\\n  registeredOperationsForContextAndParentType(context, parentNodeType) {\\n    const map = this._operation_register.get(context);\\n    if (map) {\\n      const nodes_for_context = [];\\n      this._operation_register.get(context)?.forEach((operation, type) => {\\n        nodes_for_context.push(operation);\\n      });\\n      return nodes_for_context;\\n    } else {\\n      return [];\\n    }\\n  }\\n  registeredOperation(context, operationType) {\\n    const current_operations_for_context = this._operation_register.get(context);\\n    if (current_operations_for_context) {\\n      operationType = OperationsRegister.filterType(operationType);\\n      return current_operations_for_context.get(operationType);\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/expressions/_BaseRegister.ts\\nvar BaseExpressionRegister = class {\\n  constructor() {\\n    this._methods_names = [];\\n    this._methods_by_name = new Map();\\n  }\\n  register(expression, name) {\\n    this._methods_names.push(name);\\n    this._methods_by_name.set(name, expression);\\n  }\\n  getMethod(name) {\\n    return this._methods_by_name.get(name);\\n  }\\n  availableMethods() {\\n    return this._methods_names;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/expressions/ExpressionRegister.ts\\nvar ExpressionRegister = class extends BaseExpressionRegister {\\n  getMethod(name) {\\n    return super.getMethod(name);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/modules/_BaseRegister.ts\\nvar BaseModulesRegister = class {\\n  constructor() {\\n    this._module_by_name = new Map();\\n  }\\n  register(name, module) {\\n    this._module_by_name.set(name, module);\\n  }\\n  moduleNames() {\\n    const list = [];\\n    this._module_by_name.forEach((module, moduleName) => {\\n      list.push(moduleName);\\n    });\\n    return list;\\n  }\\n  module(moduleName) {\\n    return this._module_by_name.get(moduleName);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/modules/DynamicModulesRegister.ts\\nvar DynamicModulesRegister = class extends BaseModulesRegister {\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/assemblers/_BaseRegister.ts\\nvar AssemblerName;\\n(function(AssemblerName3) {\\n  AssemblerName3[\\\\\\\"GL_MESH_BASIC\\\\\\\"] = \\\\\\\"GL_MESH_BASIC\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_MESH_LAMBERT\\\\\\\"] = \\\\\\\"GL_MESH_LAMBERT\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_MESH_STANDARD\\\\\\\"] = \\\\\\\"GL_MESH_STANDARD\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_MESH_PHONG\\\\\\\"] = \\\\\\\"GL_MESH_PHONG\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_MESH_PHYSICAL\\\\\\\"] = \\\\\\\"GL_MESH_PHYSICAL\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_PARTICLES\\\\\\\"] = \\\\\\\"GL_PARTICLES\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_POINTS\\\\\\\"] = \\\\\\\"GL_POINTS\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_LINE\\\\\\\"] = \\\\\\\"GL_LINE\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_TEXTURE\\\\\\\"] = \\\\\\\"GL_TEXTURE\\\\\\\";\\n  AssemblerName3[\\\\\\\"GL_VOLUME\\\\\\\"] = \\\\\\\"GL_VOLUME\\\\\\\";\\n})(AssemblerName || (AssemblerName = {}));\\nvar BaseAssemblersRegister = class {\\n  constructor() {\\n    this._controller_assembler_by_name = new Map();\\n  }\\n  register(name, controller, assembler) {\\n    this._controller_assembler_by_name.set(name, {\\n      controller,\\n      assembler\\n    });\\n  }\\n  unregister(name) {\\n    this._controller_assembler_by_name.delete(name);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/assemblers/AssemblersRegistry.ts\\nvar AssemblersRegister = class extends BaseAssemblersRegister {\\n  assembler(node, name) {\\n    const pair = this._controller_assembler_by_name.get(name);\\n    if (pair) {\\n      const controller = pair.controller;\\n      const assembler = pair.assembler;\\n      return new controller(node, assembler);\\n    }\\n    return pair;\\n  }\\n  unregister(name) {\\n    const pair = this._controller_assembler_by_name.get(name);\\n    super.unregister(name);\\n    return pair;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/plugins/PluginsRegister.ts\\nvar PluginsRegister = class {\\n  constructor(poly) {\\n    this.poly = poly;\\n    this._plugins_by_name = new Map();\\n    this._plugin_name_by_node_context_by_type = new Map();\\n    this._plugin_name_by_operation_context_by_type = new Map();\\n  }\\n  register(plugin) {\\n    this._current_plugin = plugin;\\n    this._plugins_by_name.set(plugin.name(), plugin);\\n    plugin.init(this.poly);\\n    this._current_plugin = void 0;\\n  }\\n  pluginByName(pluginName) {\\n    return this._plugins_by_name.get(pluginName);\\n  }\\n  registerNode(node) {\\n    if (!this._current_plugin) {\\n      return;\\n    }\\n    const context = node.context();\\n    const type = node.type();\\n    let map_for_context = this._plugin_name_by_node_context_by_type.get(context);\\n    if (!map_for_context) {\\n      map_for_context = new Map();\\n      this._plugin_name_by_node_context_by_type.set(context, map_for_context);\\n    }\\n    map_for_context.set(type, this._current_plugin.name());\\n  }\\n  registerOperation(operation) {\\n    if (!this._current_plugin) {\\n      return;\\n    }\\n    const context = operation.context();\\n    const type = operation.type();\\n    let map_for_context = this._plugin_name_by_operation_context_by_type.get(context);\\n    if (!map_for_context) {\\n      map_for_context = new Map();\\n      this._plugin_name_by_operation_context_by_type.set(context, map_for_context);\\n    }\\n    map_for_context.set(type, this._current_plugin.name());\\n  }\\n  toJson() {\\n    const data = {\\n      plugins: {},\\n      nodes: {},\\n      operations: {}\\n    };\\n    this._plugins_by_name.forEach((plugin, name) => {\\n      data.plugins[name] = plugin.toJSON();\\n    });\\n    this._plugin_name_by_node_context_by_type.forEach((map_for_context, context) => {\\n      data.nodes[context] = {};\\n      map_for_context.forEach((plugin_name, type) => {\\n        data.nodes[context][type] = plugin_name;\\n      });\\n    });\\n    this._plugin_name_by_operation_context_by_type.forEach((map_for_context, context) => {\\n      data.operations[context] = {};\\n      map_for_context.forEach((plugin_name, type) => {\\n        data.operations[context][type] = plugin_name;\\n      });\\n    });\\n    return data;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/cameras/CamerasRegister.ts\\nvar CamerasRegister = class {\\n  constructor(poly) {\\n    this._camera_types = [];\\n  }\\n  register(node) {\\n    const node_type = node.type();\\n    if (!this._camera_types.includes(node_type)) {\\n      this._camera_types.push(node_type);\\n    }\\n  }\\n  registeredTypes() {\\n    return this._camera_types;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/BlobUtils.ts\\nfunction createObjectURL(fileOrBlob) {\\n  const urlCreator = window.URL || window.webkitURL;\\n  return urlCreator.createObjectURL(fileOrBlob);\\n}\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/BlobsController.ts\\nvar BlobsController = class {\\n  constructor() {\\n    this._blobUrlsByStoredUrl = new Map();\\n    this._blobsByStoredUrl = new Map();\\n    this._blobDataByNodeId = new Map();\\n    this._globalBlobsByStoredUrl = new Map();\\n  }\\n  registerBlobUrl(data) {\\n    if (!Poly.playerMode()) {\\n      return;\\n    }\\n    this._blobUrlsByStoredUrl.set(data.storedUrl, data.blobUrl);\\n  }\\n  deregisterUrl(url) {\\n    this._blobUrlsByStoredUrl.delete(url);\\n  }\\n  blobUrl(storedUrl) {\\n    return this._blobUrlsByStoredUrl.get(storedUrl);\\n  }\\n  clear() {\\n    this._blobUrlsByStoredUrl.clear();\\n    this._blobsByStoredUrl.clear();\\n    this._blobDataByNodeId.clear();\\n  }\\n  _clearBlobForNode(node) {\\n    const blobData = this._blobDataByNodeId.get(node.graphNodeId());\\n    if (blobData) {\\n      this._blobsByStoredUrl.delete(blobData.storedUrl);\\n      this._blobUrlsByStoredUrl.delete(blobData.storedUrl);\\n    }\\n    this._blobDataByNodeId.delete(node.graphNodeId());\\n  }\\n  _assignBlobToNode(node, blobData) {\\n    this._clearBlobForNode(node);\\n    this._blobDataByNodeId.set(node.graphNodeId(), {\\n      storedUrl: blobData.storedUrl,\\n      fullUrl: blobData.fullUrl\\n    });\\n  }\\n  async fetchBlobGlobal(options) {\\n    if (Poly.playerMode()) {\\n      return {};\\n    }\\n    try {\\n      const existingBlob = this._blobUrlsByStoredUrl.get(options.storedUrl);\\n      if (existingBlob) {\\n        return {};\\n      }\\n      const remapedUrl = Poly.assetUrls.remapedUrl(options.fullUrl);\\n      const response = await fetch(remapedUrl || options.fullUrl);\\n      if (response.ok) {\\n        const blob = await response.blob();\\n        this._blobsByStoredUrl.set(options.storedUrl, blob);\\n        this._blobUrlsByStoredUrl.set(options.storedUrl, this.createBlobUrl(blob));\\n        this._globalBlobsByStoredUrl.set(options.storedUrl, blob);\\n        return {\\n          blobData: {\\n            storedUrl: options.storedUrl,\\n            fullUrl: options.fullUrl\\n          }\\n        };\\n      } else {\\n        return {error: `failed to fetch ${options.fullUrl}`};\\n      }\\n    } catch (err) {\\n      return {error: `failed to fetch ${options.fullUrl}`};\\n    }\\n  }\\n  async fetchBlobForNode(options) {\\n    if (Poly.playerMode()) {\\n      return {};\\n    }\\n    try {\\n      const existingBlob = this._blobUrlsByStoredUrl.get(options.storedUrl);\\n      if (existingBlob) {\\n        return {};\\n      }\\n      const remapedUrl = Poly.assetUrls.remapedUrl(options.fullUrl);\\n      const response = await fetch(remapedUrl || options.fullUrl);\\n      if (response.ok) {\\n        const blob = await response.blob();\\n        this._blobsByStoredUrl.set(options.storedUrl, blob);\\n        this._blobUrlsByStoredUrl.set(options.storedUrl, this.createBlobUrl(blob));\\n        this._scene = options.node.scene();\\n        this._assignBlobToNode(options.node, {\\n          storedUrl: options.storedUrl,\\n          fullUrl: options.fullUrl\\n        });\\n        return {\\n          blobData: {\\n            storedUrl: options.storedUrl,\\n            fullUrl: options.fullUrl\\n          }\\n        };\\n      } else {\\n        return {error: `failed to fetch ${options.fullUrl}`};\\n      }\\n    } catch (err) {\\n      return {error: `failed to fetch ${options.fullUrl}`};\\n    }\\n  }\\n  forEachBlob(callback) {\\n    this._blobDataByNodeId.forEach((blobData, nodeGraphNodeId) => {\\n      if (this._scene) {\\n        const node = this._scene.graph.nodeFromId(nodeGraphNodeId);\\n        if (node) {\\n          const {storedUrl} = blobData;\\n          const blob = this._blobsByStoredUrl.get(storedUrl);\\n          if (blob) {\\n            callback(blob, storedUrl);\\n          }\\n        }\\n      }\\n    });\\n    let storedUrls = [];\\n    const blobsByStoreUrl = new Map();\\n    this._globalBlobsByStoredUrl.forEach((blob, storedUrl) => {\\n      storedUrls.push(storedUrl);\\n      blobsByStoreUrl.set(storedUrl, blob);\\n    });\\n    storedUrls = storedUrls.sort();\\n    storedUrls.forEach((storedUrl) => {\\n      const blob = this._globalBlobsByStoredUrl.get(storedUrl);\\n      if (blob) {\\n        callback(blob, storedUrl);\\n      }\\n    });\\n  }\\n  createBlobUrl(blob) {\\n    return createObjectURL(blob);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/AssetUrlsController.ts\\nvar AssetUrlsController = class {\\n  setMap(map) {\\n    this._map = map;\\n  }\\n  remapedUrl(url) {\\n    if (!this._map) {\\n      return;\\n    }\\n    const elements = url.split(\\\\\\\"?\\\\\\\");\\n    const preQuery = elements[0];\\n    const query = elements[1];\\n    const remapedUrl = this._map[preQuery];\\n    if (remapedUrl) {\\n      if (query) {\\n        return `${remapedUrl}?${query}`;\\n      } else {\\n        return remapedUrl;\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/DomEffects.ts\\nvar DomEffects = class {\\n  static fadeOut(element) {\\n    return new Promise((resolve) => {\\n      const fadeEffect = setInterval(() => {\\n        if (!element.style.opacity) {\\n          element.style.opacity = \\\\\\\"1\\\\\\\";\\n        }\\n        const opacity = parseFloat(element.style.opacity);\\n        if (opacity > 0) {\\n          element.style.opacity = `${opacity - 0.05}`;\\n        } else {\\n          resolve();\\n          clearInterval(fadeEffect);\\n        }\\n      }, 20);\\n    });\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/io/self_contained/Common.ts\\nvar SelfContainedFileName;\\n(function(SelfContainedFileName2) {\\n  SelfContainedFileName2[\\\\\\\"CODE\\\\\\\"] = \\\\\\\"code.json\\\\\\\";\\n  SelfContainedFileName2[\\\\\\\"EDITOR\\\\\\\"] = \\\\\\\"editor.json\\\\\\\";\\n  SelfContainedFileName2[\\\\\\\"ASSETS\\\\\\\"] = \\\\\\\"assets.json\\\\\\\";\\n  SelfContainedFileName2[\\\\\\\"POLYGONJS\\\\\\\"] = \\\\\\\"js/all.js\\\\\\\";\\n  SelfContainedFileName2[\\\\\\\"POLY_CONFIG\\\\\\\"] = \\\\\\\"js/polyConfig.js\\\\\\\";\\n  SelfContainedFileName2[\\\\\\\"JS_FILES\\\\\\\"] = \\\\\\\"js_files.json\\\\\\\";\\n  SelfContainedFileName2[\\\\\\\"POSTER\\\\\\\"] = \\\\\\\"poster.png\\\\\\\";\\n})(SelfContainedFileName || (SelfContainedFileName = {}));\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/SelfContainedSceneLoader.ts\\nvar SelfContainedScenesLoader = class {\\n  markAsLoaded(callback, sceneJsonImporterContructor) {\\n    this._sceneJsonImporterContructor = sceneJsonImporterContructor;\\n    callback();\\n  }\\n  load(map) {\\n    if (!this._sceneJsonImporterContructor) {\\n      return;\\n    }\\n    const elements = [];\\n    map.forEach((data, element) => {\\n      elements.push(element);\\n    });\\n    for (let element of elements) {\\n      const data = map.get(element);\\n      if (data) {\\n        this._loadElement(element, data, this._sceneJsonImporterContructor);\\n        map.delete(element);\\n      }\\n    }\\n  }\\n  async _loadElement(element, viewerData, sceneJsonImporterContructor) {\\n    const {sceneData, assetsManifest, unzippedData} = viewerData;\\n    const storedUrls = Object.keys(assetsManifest);\\n    for (let storedUrl of storedUrls) {\\n      const assetUrl = assetsManifest[storedUrl];\\n      const assetUintArray = unzippedData[`assets/${assetUrl}`];\\n      if (!assetUintArray) {\\n        console.error(storedUrl, assetUintArray);\\n        return;\\n      }\\n      const assetBlob = new Blob([assetUintArray]);\\n      const blobUrl = Poly.blobs.createBlobUrl(assetBlob);\\n      const blobUrlData = {\\n        storedUrl,\\n        blobUrl\\n      };\\n      Poly.blobs.registerBlobUrl(blobUrlData);\\n    }\\n    Poly.setPlayerMode(true);\\n    Poly.libs.setRoot(null);\\n    const polyConfigId = `${Math.random()}`.replace(\\\\\\\".\\\\\\\", \\\\\\\"_\\\\\\\");\\n    const ids = {\\n      Poly: `___POLY_polyConfig_configurePolygonjs_${polyConfigId}`,\\n      scriptElementId: `___POLY_polyConfig_scriptElement_${polyConfigId}`,\\n      loadSceneArgs: `___POLY_polyConfig_loadSceneArgs_${polyConfigId}`\\n    };\\n    window[ids.Poly] = Poly;\\n    const method = this._loadScene.bind(this);\\n    const loadSceneArgs = {\\n      method,\\n      element,\\n      sceneData,\\n      sceneJsonImporterContructor\\n    };\\n    window[ids.loadSceneArgs] = loadSceneArgs;\\n    const polyConfigLoaded = this._loadPolyConfig(ids, unzippedData);\\n    if (polyConfigLoaded) {\\n      return;\\n    }\\n    this._loadScene(element, sceneData, sceneJsonImporterContructor);\\n  }\\n  _loadPolyConfig(ids, unzippedData) {\\n    const polyConfigArray = unzippedData[SelfContainedFileName.POLY_CONFIG];\\n    if (!polyConfigArray) {\\n      return false;\\n    }\\n    const polyConfigUrl = this._createJsBlob(polyConfigArray, \\\\\\\"polyConfig\\\\\\\");\\n    let script = document.getElementById(ids.scriptElementId);\\n    const lines = [];\\n    lines.push(`import {configurePolygonjs, configureScene} from '${polyConfigUrl}';`);\\n    lines.push(`configurePolygonjs(window.${ids.Poly});`);\\n    lines.push(`window.${ids.loadSceneArgs}.method(window.${ids.loadSceneArgs}.element, window.${ids.loadSceneArgs}.sceneData, window.${ids.loadSceneArgs}.sceneJsonImporterContructor, configureScene);`);\\n    lines.push(`delete window.${ids.loadSceneArgs};`);\\n    if (!script) {\\n      script = document.createElement(\\\\\\\"script\\\\\\\");\\n      script.setAttribute(\\\\\\\"type\\\\\\\", \\\\\\\"module\\\\\\\");\\n      script.text = lines.join(\\\\\\\"\\\\n\\\\\\\");\\n      document.body.append(script);\\n    }\\n    return true;\\n  }\\n  async _loadScene(element, sceneData, sceneJsonImporterContructor, configureScene2) {\\n    this._fadeOutPoster(element);\\n    const importer = new sceneJsonImporterContructor(sceneData);\\n    const scene = await importer.scene();\\n    if (configureScene2) {\\n      configureScene2(scene);\\n    }\\n    const cameraNode = scene.mainCameraNode();\\n    if (!cameraNode) {\\n      console.warn(\\\\\\\"no master camera found\\\\\\\");\\n      return;\\n    }\\n    const viewer = cameraNode.createViewer(element);\\n    scene.play();\\n    element.scene = scene;\\n    element.viewer = viewer;\\n  }\\n  _fadeOutPoster(element) {\\n    const posterElement = element.firstElementChild;\\n    if (posterElement) {\\n      posterElement.style.pointerEvents = \\\\\\\"none\\\\\\\";\\n      DomEffects.fadeOut(posterElement).then(() => {\\n        posterElement.parentElement?.removeChild(posterElement);\\n      });\\n    }\\n  }\\n  _createJsBlob(array, filename) {\\n    const blob = new Blob([array]);\\n    const file = new File([blob], `${filename}.js`, {type: \\\\\\\"application/javascript\\\\\\\"});\\n    return createObjectURL(file);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/PerformanceController.ts\\nvar PolyPerformanceformanceController = class {\\n  setPerformanceManager(p) {\\n    this._performanceManager = p;\\n  }\\n  performanceManager() {\\n    return this._performanceManager || window.performance;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/Poly.ts\\nvar PolyEngine = class {\\n  constructor() {\\n    this.renderersController = new RenderersController();\\n    this.nodesRegister = new NodesRegister(this);\\n    this.operationsRegister = new OperationsRegister(this);\\n    this.expressionsRegister = new ExpressionRegister();\\n    this.modulesRegister = new DynamicModulesRegister();\\n    this.assemblersRegister = new AssemblersRegister();\\n    this.pluginsRegister = new PluginsRegister(this);\\n    this.camerasRegister = new CamerasRegister(this);\\n    this.blobs = new BlobsController();\\n    this.assetUrls = new AssetUrlsController();\\n    this.selfContainedScenesLoader = new SelfContainedScenesLoader();\\n    this.performance = new PolyPerformanceformanceController();\\n    this.scenesByUuid = {};\\n    this._player_mode = true;\\n    this._logger = null;\\n  }\\n  static _instance_() {\\n    if (window.__POLYGONJS_POLY_INSTANCE__) {\\n      return window.__POLYGONJS_POLY_INSTANCE__;\\n    } else {\\n      const instance = new PolyEngine();\\n      window.__POLYGONJS_POLY_INSTANCE__ = instance;\\n      return window.__POLYGONJS_POLY_INSTANCE__;\\n    }\\n  }\\n  setPlayerMode(mode) {\\n    this._player_mode = mode;\\n  }\\n  playerMode() {\\n    return this._player_mode;\\n  }\\n  registerNode(node, tab_menu_category, options) {\\n    this.nodesRegister.register(node, tab_menu_category, options);\\n  }\\n  registerOperation(operation) {\\n    this.operationsRegister.register(operation);\\n  }\\n  registerCamera(node) {\\n    this.camerasRegister.register(node);\\n  }\\n  registerPlugin(plugin) {\\n    this.pluginsRegister.register(plugin);\\n  }\\n  registeredNodes(parent_context, type) {\\n    return this.nodesRegister.registeredNodes(parent_context, type);\\n  }\\n  registeredOperation(parent_context, operation_type) {\\n    return this.operationsRegister.registeredOperation(parent_context, operation_type);\\n  }\\n  registeredCameraTypes() {\\n    return this.camerasRegister.registeredTypes();\\n  }\\n  inWorkerThread() {\\n    return false;\\n  }\\n  desktopController() {\\n  }\\n  get libs() {\\n    return this._libs_controller = this._libs_controller || new PolyLibsController();\\n  }\\n  setEnv(env) {\\n    this._env = env;\\n  }\\n  env() {\\n    return this._env;\\n  }\\n  setLogger(logger) {\\n    this._logger = logger;\\n  }\\n  log(message, ...optionalParams) {\\n    this._logger?.log(...[message, ...optionalParams]);\\n  }\\n  warn(message, ...optionalParams) {\\n    this._logger?.warn(...[message, ...optionalParams]);\\n  }\\n  error(message, ...optionalParams) {\\n    this._logger?.error(...[message, ...optionalParams]);\\n  }\\n};\\nvar Poly = PolyEngine._instance_();\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/graph/DirtyController.ts\\nvar DirtyController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._dirty_count = 0;\\n    this._dirty = true;\\n  }\\n  dispose() {\\n    this._cached_successors = void 0;\\n    this._post_dirty_hooks = void 0;\\n    this._post_dirty_hook_names = void 0;\\n  }\\n  isDirty() {\\n    return this._dirty === true;\\n  }\\n  dirtyTimestamp() {\\n    return this._dirty_timestamp;\\n  }\\n  dirtyCount() {\\n    return this._dirty_count;\\n  }\\n  addPostDirtyHook(name, method) {\\n    this._post_dirty_hook_names = this._post_dirty_hook_names || [];\\n    this._post_dirty_hooks = this._post_dirty_hooks || [];\\n    if (!this._post_dirty_hook_names.includes(name)) {\\n      this._post_dirty_hook_names.push(name);\\n      this._post_dirty_hooks.push(method);\\n    } else {\\n      console.warn(`hook with name ${name} already exists`, this.node);\\n    }\\n  }\\n  removePostDirtyHook(name) {\\n    if (this._post_dirty_hook_names && this._post_dirty_hooks) {\\n      const index = this._post_dirty_hook_names.indexOf(name);\\n      if (index >= 0) {\\n        this._post_dirty_hook_names.splice(index, 1);\\n        this._post_dirty_hooks.splice(index, 1);\\n      }\\n    }\\n  }\\n  hasHook(name) {\\n    if (this._post_dirty_hook_names) {\\n      return this._post_dirty_hook_names.includes(name);\\n    }\\n    return false;\\n  }\\n  removeDirtyState() {\\n    this._dirty = false;\\n  }\\n  setForbiddenTriggerNodes(nodes) {\\n    this._forbidden_trigger_nodes = nodes.map((n) => n.graphNodeId());\\n  }\\n  setDirty(original_trigger_graph_node, propagate) {\\n    if (propagate == null) {\\n      propagate = true;\\n    }\\n    if (original_trigger_graph_node && this._forbidden_trigger_nodes && this._forbidden_trigger_nodes.includes(original_trigger_graph_node.graphNodeId())) {\\n      return;\\n    }\\n    if (original_trigger_graph_node == null) {\\n      original_trigger_graph_node = this.node;\\n    }\\n    this._dirty = true;\\n    const performance2 = Poly.performance.performanceManager();\\n    this._dirty_timestamp = performance2.now();\\n    this._dirty_count += 1;\\n    this.runPostDirtyHooks(original_trigger_graph_node);\\n    if (propagate === true) {\\n      this.setSuccessorsDirty(original_trigger_graph_node);\\n    }\\n  }\\n  runPostDirtyHooks(original_trigger_graph_node) {\\n    if (this._post_dirty_hooks) {\\n      const cooker = this.node.scene().cooker;\\n      if (cooker.blocked) {\\n        cooker.enqueue(this.node, original_trigger_graph_node);\\n      } else {\\n        for (let hook of this._post_dirty_hooks) {\\n          hook(original_trigger_graph_node);\\n        }\\n      }\\n    }\\n  }\\n  setSuccessorsDirty(original_trigger_graph_node) {\\n    const propagate = false;\\n    this._cached_successors = this._cached_successors || this.node.graphAllSuccessors();\\n    for (let successor of this._cached_successors) {\\n      successor.dirtyController.setDirty(original_trigger_graph_node, propagate);\\n    }\\n  }\\n  clearSuccessorsCache() {\\n    this._cached_successors = void 0;\\n  }\\n  clearSuccessorsCacheWithPredecessors() {\\n    this.clearSuccessorsCache();\\n    for (let predecessor of this.node.graphAllPredecessors()) {\\n      predecessor.dirtyController.clearSuccessorsCache();\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/graph/CoreGraphNode.ts\\nvar CoreGraphNode = class {\\n  constructor(_scene, _name) {\\n    this._scene = _scene;\\n    this._name = _name;\\n    this._dirty_controller = new DirtyController(this);\\n    this._graph_node_id = _scene.graph.nextId();\\n    _scene.graph.addNode(this);\\n    this._graph = _scene.graph;\\n  }\\n  dispose() {\\n    this._dirty_controller.dispose();\\n    this.graphRemove();\\n  }\\n  name() {\\n    return this._name;\\n  }\\n  setName(name) {\\n    this._name = name;\\n  }\\n  scene() {\\n    return this._scene;\\n  }\\n  graphNodeId() {\\n    return this._graph_node_id;\\n  }\\n  get dirtyController() {\\n    return this._dirty_controller;\\n  }\\n  setDirty(trigger) {\\n    trigger = trigger || this;\\n    this._dirty_controller.setDirty(trigger);\\n  }\\n  setSuccessorsDirty(trigger) {\\n    this._dirty_controller.setSuccessorsDirty(trigger);\\n  }\\n  removeDirtyState() {\\n    this._dirty_controller.removeDirtyState();\\n  }\\n  isDirty() {\\n    return this._dirty_controller.isDirty();\\n  }\\n  addPostDirtyHook(name, callback) {\\n    this._dirty_controller.addPostDirtyHook(name, callback);\\n  }\\n  graphRemove() {\\n    this._graph.removeNode(this);\\n  }\\n  addGraphInput(src, check_if_graph_has_cycle = true) {\\n    return this._graph.connect(src, this, check_if_graph_has_cycle);\\n  }\\n  removeGraphInput(src) {\\n    this._graph.disconnect(src, this);\\n  }\\n  graphDisconnectPredecessors() {\\n    this._graph.disconnectPredecessors(this);\\n  }\\n  graphDisconnectSuccessors() {\\n    this._graph.disconnectSuccessors(this);\\n  }\\n  graphPredecessorIds() {\\n    return this._graph.predecessorIds(this._graph_node_id) || [];\\n  }\\n  graphPredecessors() {\\n    return this._graph.predecessors(this);\\n  }\\n  graphSuccessors() {\\n    return this._graph.successors(this);\\n  }\\n  graphAllPredecessors() {\\n    return this._graph.allPredecessors(this);\\n  }\\n  graphAllSuccessors() {\\n    return this._graph.allSuccessors(this);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/NodeEvent.ts\\nvar NodeEvent;\\n(function(NodeEvent2) {\\n  NodeEvent2[\\\\\\\"CREATED\\\\\\\"] = \\\\\\\"node_created\\\\\\\";\\n  NodeEvent2[\\\\\\\"DELETED\\\\\\\"] = \\\\\\\"node_deleted\\\\\\\";\\n  NodeEvent2[\\\\\\\"NAME_UPDATED\\\\\\\"] = \\\\\\\"node_name_update\\\\\\\";\\n  NodeEvent2[\\\\\\\"OVERRIDE_CLONABLE_STATE_UPDATE\\\\\\\"] = \\\\\\\"node_override_clonable_state_update\\\\\\\";\\n  NodeEvent2[\\\\\\\"NAMED_OUTPUTS_UPDATED\\\\\\\"] = \\\\\\\"node_named_outputs_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"NAMED_INPUTS_UPDATED\\\\\\\"] = \\\\\\\"node_named_inputs_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"INPUTS_UPDATED\\\\\\\"] = \\\\\\\"node_inputs_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"PARAMS_UPDATED\\\\\\\"] = \\\\\\\"node_params_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"UI_DATA_POSITION_UPDATED\\\\\\\"] = \\\\\\\"node_ui_data_position_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"UI_DATA_COMMENT_UPDATED\\\\\\\"] = \\\\\\\"node_ui_data_comment_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"ERROR_UPDATED\\\\\\\"] = \\\\\\\"node_error_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"FLAG_BYPASS_UPDATED\\\\\\\"] = \\\\\\\"bypass_flag_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"FLAG_DISPLAY_UPDATED\\\\\\\"] = \\\\\\\"display_flag_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"FLAG_OPTIMIZE_UPDATED\\\\\\\"] = \\\\\\\"optimize_flag_updated\\\\\\\";\\n  NodeEvent2[\\\\\\\"SELECTION_UPDATED\\\\\\\"] = \\\\\\\"selection_updated\\\\\\\";\\n})(NodeEvent || (NodeEvent = {}));\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/Type.ts\\nvar CoreType = class {\\n  static isNumber(value) {\\n    return typeof value == \\\\\\\"number\\\\\\\";\\n  }\\n  static isVector(value) {\\n    return value instanceof Vector2 || value instanceof Vector3 || value instanceof Vector4;\\n  }\\n  static isString(value) {\\n    return typeof value == \\\\\\\"string\\\\\\\";\\n  }\\n  static isBoolean(value) {\\n    return value === true || value === false;\\n  }\\n  static isNaN(value) {\\n    return isNaN(value);\\n  }\\n  static isArray(value) {\\n    return Array.isArray(value);\\n  }\\n  static isObject(value) {\\n    var type = typeof value;\\n    return value != null && (type == \\\\\\\"object\\\\\\\" || type == \\\\\\\"function\\\\\\\");\\n  }\\n};\\nfunction isBooleanTrue(value) {\\n  return value;\\n}\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/UIData.ts\\nvar UIData = class {\\n  constructor(node, x = 0, y = 0) {\\n    this.node = node;\\n    this._position = new Vector2();\\n    this._width = 50;\\n    this._color = new Color(0.75, 0.75, 0.75);\\n    this._layout_vertical = true;\\n    this._json = {\\n      x: 0,\\n      y: 0\\n    };\\n    this._position.x = x;\\n    this._position.y = y;\\n  }\\n  setComment(comment) {\\n    this._comment = comment;\\n    this.node.emit(NodeEvent.UI_DATA_COMMENT_UPDATED);\\n  }\\n  comment() {\\n    return this._comment;\\n  }\\n  setColor(color) {\\n    this._color = color;\\n  }\\n  color() {\\n    return this._color;\\n  }\\n  setLayoutHorizontal() {\\n    this._layout_vertical = false;\\n  }\\n  isLayoutVertical() {\\n    return this._layout_vertical;\\n  }\\n  copy(ui_data) {\\n    this._position.copy(ui_data.position());\\n    this._color.copy(ui_data.color());\\n  }\\n  position() {\\n    return this._position;\\n  }\\n  setPosition(new_position, y = 0) {\\n    if (CoreType.isNumber(new_position)) {\\n      const x = new_position;\\n      this._position.set(x, y);\\n    } else {\\n      this._position.copy(new_position);\\n    }\\n    this.node.emit(NodeEvent.UI_DATA_POSITION_UPDATED);\\n  }\\n  translate(offset, snap = false) {\\n    this._position.add(offset);\\n    if (snap) {\\n      this._position.x = Math.round(this._position.x);\\n      this._position.y = Math.round(this._position.y);\\n    }\\n    this.node.emit(NodeEvent.UI_DATA_POSITION_UPDATED);\\n  }\\n  toJSON() {\\n    this._json.x = this._position.x;\\n    this._json.y = this._position.y;\\n    this._json.comment = this._comment;\\n    return this._json;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/flags/Base.ts\\nvar BaseFlag = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._state = true;\\n    this._hooks = null;\\n  }\\n  onUpdate(hook) {\\n    this._hooks = this._hooks || [];\\n    this._hooks.push(hook);\\n  }\\n  _on_update() {\\n  }\\n  set(new_state) {\\n    if (this._state != new_state) {\\n      this._state = new_state;\\n      this._on_update();\\n      this.runHooks();\\n    }\\n  }\\n  active() {\\n    return this._state;\\n  }\\n  toggle() {\\n    this.set(!this._state);\\n  }\\n  runHooks() {\\n    if (this._hooks) {\\n      for (let hook of this._hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/flags/Bypass.ts\\nvar BypassFlag = class extends BaseFlag {\\n  constructor() {\\n    super(...arguments);\\n    this._state = false;\\n  }\\n  _on_update() {\\n    this.node.emit(NodeEvent.FLAG_BYPASS_UPDATED);\\n    this.node.setDirty();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/flags/Display.ts\\nvar DisplayFlag = class extends BaseFlag {\\n  _on_update() {\\n    this.node.emit(NodeEvent.FLAG_DISPLAY_UPDATED);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/flags/Optimize.ts\\nvar OptimizeFlag = class extends BaseFlag {\\n  constructor() {\\n    super(...arguments);\\n    this._state = false;\\n  }\\n  _on_update() {\\n    this.node.emit(NodeEvent.FLAG_OPTIMIZE_UPDATED);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/FlagsController.ts\\nvar FlagsController = class {\\n  constructor(node) {\\n    this.node = node;\\n  }\\n  hasDisplay() {\\n    return false;\\n  }\\n  hasBypass() {\\n    return false;\\n  }\\n  hasOptimize() {\\n    return false;\\n  }\\n};\\nfunction Display(Base) {\\n  return class Mixin extends Base {\\n    constructor() {\\n      super(...arguments);\\n      this.display = new DisplayFlag(this.node);\\n    }\\n    hasDisplay() {\\n      return true;\\n    }\\n  };\\n}\\nfunction Bypass(Base) {\\n  return class Mixin extends Base {\\n    constructor() {\\n      super(...arguments);\\n      this.bypass = new BypassFlag(this.node);\\n    }\\n    hasBypass() {\\n      return true;\\n    }\\n  };\\n}\\nfunction Optimize(Base) {\\n  return class Mixin extends Base {\\n    constructor() {\\n      super(...arguments);\\n      this.optimize = new OptimizeFlag(this.node);\\n    }\\n    hasOptimize() {\\n      return true;\\n    }\\n  };\\n}\\nvar FlagsControllerD = class extends Display(FlagsController) {\\n};\\nvar FlagsControllerB = class extends Bypass(FlagsController) {\\n};\\nvar FlagsControllerDB = class extends Bypass(Display(FlagsController)) {\\n};\\nvar FlagsControllerBO = class extends Optimize(Bypass(FlagsController)) {\\n};\\nvar FlagsControllerDBO = class extends Optimize(Bypass(Display(FlagsController))) {\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/states/Base.ts\\nvar BaseState = class {\\n  constructor(node) {\\n    this.node = node;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/states/TimeDependent.ts\\nvar TimeDependentState = class extends BaseState {\\n  active() {\\n    return this.paramsTimeDependent() || this.inputsTimeDependent();\\n  }\\n  paramsTimeDependent() {\\n    const param_names = this.node.params.names;\\n    for (let param_name of param_names) {\\n      const param = this.node.params.get(param_name);\\n      if (param && param.states.timeDependent.active()) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  }\\n  inputsTimeDependent() {\\n    const inputs = this.node.io.inputs.inputs();\\n    for (let input of inputs) {\\n      if (input && input.states.timeDependent.active()) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  }\\n  forceTimeDependent() {\\n    const predecessor_ids = this.node.graphPredecessors().map((n) => n.graphNodeId());\\n    const frame_node = this.node.scene().timeController.graphNode;\\n    if (!predecessor_ids.includes(frame_node.graphNodeId())) {\\n      this.node.addGraphInput(frame_node, false);\\n    }\\n  }\\n  unforceTimeDependent() {\\n    const frame_node = this.node.scene().timeController.graphNode;\\n    this.node.removeGraphInput(frame_node);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/states/Error.ts\\nvar NodeErrorState = class extends BaseState {\\n  set(message) {\\n    if (this._message != message) {\\n      if (message) {\\n        Poly.error(`[${this.node.path()}] error: '${message}'`);\\n      }\\n      this._message = message;\\n      this.onUpdate();\\n    }\\n  }\\n  message() {\\n    return this._message;\\n  }\\n  clear() {\\n    this.set(void 0);\\n  }\\n  active() {\\n    return this._message != null;\\n  }\\n  onUpdate() {\\n    if (this._message != null) {\\n      this.node._setContainer(null, `from error '${this._message}'`);\\n    }\\n    this.node.emit(NodeEvent.ERROR_UPDATED);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/StatesController.ts\\nvar StatesController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this.timeDependent = new TimeDependentState(this.node);\\n    this.error = new NodeErrorState(this.node);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/NameController.ts\\nvar NameController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._graph_node = new CoreGraphNode(node.scene(), \\\\\\\"node_name_controller\\\\\\\");\\n  }\\n  dispose() {\\n    this._graph_node.dispose();\\n    this._on_set_name_hooks = void 0;\\n    this._on_set_fullPath_hooks = void 0;\\n  }\\n  get graph_node() {\\n    return this._graph_node;\\n  }\\n  static base_name(node) {\\n    let base = node.type();\\n    const last_char = base[base.length - 1];\\n    if (!CoreType.isNaN(parseInt(last_char))) {\\n      base += \\\\\\\"_\\\\\\\";\\n    }\\n    return `${base}1`;\\n  }\\n  requestNameToParent(new_name) {\\n    const parent = this.node.parent();\\n    if (parent && parent.childrenAllowed() && parent.childrenController) {\\n      parent.childrenController.setChildName(this.node, new_name);\\n    } else {\\n      console.warn(\\\\\\\"requestNameToParent failed, no parent found\\\\\\\");\\n    }\\n  }\\n  setName(new_name) {\\n    if (new_name != this.node.name()) {\\n      this.requestNameToParent(new_name);\\n    }\\n  }\\n  updateNameFromParent(new_name) {\\n    this.node._set_core_name(new_name);\\n    this._postSetName();\\n    this.runPostSetFullPathHooks();\\n    if (this.node.childrenAllowed()) {\\n      const children = this.node.childrenController?.children();\\n      if (children) {\\n        for (let child_node of children) {\\n          child_node.nameController.runPostSetFullPathHooks();\\n        }\\n      }\\n    }\\n    if (this.node.lifecycle.creationCompleted()) {\\n      this.node.scene().missingExpressionReferencesController.checkForMissingReferences(this.node);\\n      this.node.scene().expressionsController.regenerateReferringExpressions(this.node);\\n    }\\n    this.node.scene().referencesController.notifyNameUpdated(this.node);\\n    this.node.emit(NodeEvent.NAME_UPDATED);\\n  }\\n  add_post_set_name_hook(hook) {\\n    this._on_set_name_hooks = this._on_set_name_hooks || [];\\n    this._on_set_name_hooks.push(hook);\\n  }\\n  add_post_set_fullPath_hook(hook) {\\n    this._on_set_fullPath_hooks = this._on_set_fullPath_hooks || [];\\n    this._on_set_fullPath_hooks.push(hook);\\n  }\\n  _postSetName() {\\n    if (this._on_set_name_hooks) {\\n      for (let hook of this._on_set_name_hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n  runPostSetFullPathHooks() {\\n    if (this._on_set_fullPath_hooks) {\\n      for (let hook of this._on_set_fullPath_hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/Walker.ts\\nvar TypedNodePathParamValue = class {\\n  constructor(_path = \\\\\\\"\\\\\\\") {\\n    this._path = _path;\\n    this._node = null;\\n  }\\n  set_path(path) {\\n    this._path = path;\\n  }\\n  set_node(node) {\\n    this._node = node;\\n  }\\n  path() {\\n    return this._path;\\n  }\\n  node() {\\n    return this._node;\\n  }\\n  resolve(node_start) {\\n    this._node = CoreWalker.findNode(node_start, this._path);\\n  }\\n  clone() {\\n    const cloned = new TypedNodePathParamValue(this._path);\\n    cloned.set_node(this._node);\\n    return cloned;\\n  }\\n  nodeWithContext(context, error_state) {\\n    const found_node = this.node();\\n    if (!found_node) {\\n      error_state?.set(`no node found at ${this.path()}`);\\n      return;\\n    }\\n    const node_context = found_node.context();\\n    if (node_context == context) {\\n      return found_node;\\n    } else {\\n      error_state?.set(`expected ${context} node, but got a ${node_context}`);\\n      return;\\n    }\\n  }\\n};\\nvar TypedParamPathParamValue = class {\\n  constructor(_path = \\\\\\\"\\\\\\\") {\\n    this._path = _path;\\n    this._param = null;\\n  }\\n  set_path(path) {\\n    this._path = path;\\n  }\\n  set_param(param) {\\n    this._param = param;\\n  }\\n  path() {\\n    return this._path;\\n  }\\n  param() {\\n    return this._param;\\n  }\\n  resolve(node_start) {\\n    this._param = CoreWalker.findParam(node_start, this._path);\\n  }\\n  clone() {\\n    const cloned = new TypedParamPathParamValue(this._path);\\n    cloned.set_param(this._param);\\n    return cloned;\\n  }\\n  paramWithType(paramType, error_state) {\\n    const foundParam = this.param();\\n    if (!foundParam) {\\n      error_state?.set(`no param found at ${this.path()}`);\\n      return;\\n    }\\n    if (foundParam.type() == paramType) {\\n      return foundParam;\\n    } else {\\n      error_state?.set(`expected ${paramType} node, but got a ${foundParam.type()}`);\\n      return;\\n    }\\n  }\\n};\\nvar CoreWalker2 = class {\\n  static split_parent_child(path) {\\n    const elements = path.split(CoreWalker2.SEPARATOR).filter((e) => e.length > 0);\\n    const child_path = elements.pop();\\n    const parent_path = elements.join(CoreWalker2.SEPARATOR);\\n    return {parent: parent_path, child: child_path};\\n  }\\n  static findNode(node_src, path, decomposed_path) {\\n    if (!node_src) {\\n      return null;\\n    }\\n    const elements = path.split(CoreWalker2.SEPARATOR).filter((e) => e.length > 0);\\n    const first_element = elements[0];\\n    let next_node = null;\\n    if (path[0] === CoreWalker2.SEPARATOR) {\\n      const path_from_root = path.substr(1);\\n      next_node = this.findNode(node_src.root(), path_from_root, decomposed_path);\\n    } else {\\n      switch (first_element) {\\n        case CoreWalker2.PARENT:\\n          decomposed_path?.add_path_element(first_element);\\n          next_node = node_src.parent();\\n          break;\\n        case CoreWalker2.CURRENT:\\n          decomposed_path?.add_path_element(first_element);\\n          next_node = node_src;\\n          break;\\n        default:\\n          next_node = node_src.node(first_element);\\n          if (next_node) {\\n            decomposed_path?.add_node(first_element, next_node);\\n          }\\n      }\\n      if (next_node != null && elements.length > 1) {\\n        const remainder = elements.slice(1).join(CoreWalker2.SEPARATOR);\\n        next_node = this.findNode(next_node, remainder, decomposed_path);\\n      }\\n      return next_node;\\n    }\\n    return next_node;\\n  }\\n  static findParam(node_src, path, decomposed_path) {\\n    if (!node_src) {\\n      return null;\\n    }\\n    const elements = path.split(CoreWalker2.SEPARATOR);\\n    if (elements.length === 1) {\\n      return node_src.params.get(elements[0]);\\n    } else {\\n      const node_path = elements.slice(0, +(elements.length - 2) + 1 || void 0).join(CoreWalker2.SEPARATOR);\\n      const node = this.findNode(node_src, node_path, decomposed_path);\\n      if (node != null) {\\n        const param_name = elements[elements.length - 1];\\n        const param = node.params.get(param_name);\\n        if (decomposed_path && param) {\\n          decomposed_path.add_node(param_name, param);\\n        }\\n        return param;\\n      } else {\\n        return null;\\n      }\\n    }\\n  }\\n  static relativePath(src_graph_node, dest_graph_node) {\\n    const parent = this.closestCommonParent(src_graph_node, dest_graph_node);\\n    if (!parent) {\\n      return dest_graph_node.path();\\n    } else {\\n      const distance = this.distanceToParent(src_graph_node, parent);\\n      let up = \\\\\\\"\\\\\\\";\\n      if (distance > 0) {\\n        let i = 0;\\n        const ups = [];\\n        while (i++ < distance) {\\n          ups.push(CoreWalker2.PARENT);\\n        }\\n        up = ups.join(CoreWalker2.SEPARATOR) + CoreWalker2.SEPARATOR;\\n      }\\n      const parent_path_elements = parent.path().split(CoreWalker2.SEPARATOR).filter((e) => e.length > 0);\\n      const dest_path_elements = dest_graph_node.path().split(CoreWalker2.SEPARATOR).filter((e) => e.length > 0);\\n      const remaining_elements = [];\\n      let cmptr = 0;\\n      for (let dest_path_element of dest_path_elements) {\\n        if (!parent_path_elements[cmptr]) {\\n          remaining_elements.push(dest_path_element);\\n        }\\n        cmptr++;\\n      }\\n      const down = remaining_elements.join(CoreWalker2.SEPARATOR);\\n      return `${up}${down}`;\\n    }\\n  }\\n  static closestCommonParent(graph_node1, graph_node2) {\\n    const parents1 = this.parents(graph_node1).reverse().concat([graph_node1]);\\n    const parents2 = this.parents(graph_node2).reverse().concat([graph_node2]);\\n    const min_depth = Math.min(parents1.length, parents2.length);\\n    let found_parent = null;\\n    for (let i = 0; i < min_depth; i++) {\\n      if (parents1[i].graphNodeId() == parents2[i].graphNodeId()) {\\n        found_parent = parents1[i];\\n      }\\n    }\\n    return found_parent;\\n  }\\n  static parents(graph_node) {\\n    const parents = [];\\n    let parent = graph_node.parent();\\n    while (parent) {\\n      parents.push(parent);\\n      parent = parent.parent();\\n    }\\n    return parents;\\n  }\\n  static distanceToParent(graph_node, dest) {\\n    let distance = 0;\\n    let current = graph_node;\\n    const dest_id = dest.graphNodeId();\\n    while (current && current.graphNodeId() != dest_id) {\\n      distance += 1;\\n      current = current.parent();\\n    }\\n    if (current && current.graphNodeId() == dest_id) {\\n      return distance;\\n    } else {\\n      return -1;\\n    }\\n  }\\n  static makeAbsolutePath(nodeSrc, path) {\\n    if (path[0] == CoreWalker2.SEPARATOR) {\\n      return path;\\n    }\\n    const pathElements = path.split(CoreWalker2.SEPARATOR);\\n    const firstElement = pathElements.shift();\\n    if (firstElement) {\\n      switch (firstElement) {\\n        case \\\\\\\"..\\\\\\\": {\\n          const parent = nodeSrc.parent();\\n          if (parent) {\\n            if (parent == nodeSrc.scene().root()) {\\n              return CoreWalker2.SEPARATOR + pathElements.join(CoreWalker2.SEPARATOR);\\n            } else {\\n              return this.makeAbsolutePath(parent, pathElements.join(CoreWalker2.SEPARATOR));\\n            }\\n          } else {\\n            return null;\\n          }\\n        }\\n        case \\\\\\\".\\\\\\\": {\\n          return this.makeAbsolutePath(nodeSrc, pathElements.join(CoreWalker2.SEPARATOR));\\n        }\\n        default: {\\n          return [nodeSrc.path(), path].join(CoreWalker2.SEPARATOR);\\n        }\\n      }\\n    } else {\\n      return nodeSrc.path();\\n    }\\n  }\\n};\\nvar CoreWalker = CoreWalker2;\\nCoreWalker.SEPARATOR = \\\\\\\"/\\\\\\\";\\nCoreWalker.DOT = \\\\\\\".\\\\\\\";\\nCoreWalker.CURRENT = CoreWalker2.DOT;\\nCoreWalker.PARENT = \\\\\\\"..\\\\\\\";\\nCoreWalker.CURRENT_WITH_SLASH = `${CoreWalker2.CURRENT}/`;\\nCoreWalker.PARENT_WITH_SLASH = `${CoreWalker2.PARENT}/`;\\nCoreWalker.NON_LETTER_PREFIXES = [CoreWalker2.SEPARATOR, CoreWalker2.DOT];\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/hierarchy/ParentController.ts\\nvar HierarchyParentController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._parent = null;\\n  }\\n  parent() {\\n    return this._parent;\\n  }\\n  setParent(parent) {\\n    if (parent != this.node.parentController.parent()) {\\n      this._parent = parent;\\n      if (this._parent) {\\n        this.node.nameController.requestNameToParent(NameController.base_name(this.node));\\n      }\\n    }\\n  }\\n  firstAncestorWithContext(context) {\\n    if (this._parent) {\\n      if (this._parent.context() == context) {\\n        return this._parent;\\n      } else {\\n        return this._parent.parentController.firstAncestorWithContext(context);\\n      }\\n    }\\n    return null;\\n  }\\n  path(relative_to_parent) {\\n    const separator = CoreWalker.SEPARATOR;\\n    if (this._parent != null) {\\n      if (this._parent == relative_to_parent) {\\n        return this.node.name();\\n      } else {\\n        const parent_fullPath = this._parent.path(relative_to_parent);\\n        if (parent_fullPath === separator) {\\n          return parent_fullPath + this.node.name();\\n        } else {\\n          return parent_fullPath + separator + this.node.name();\\n        }\\n      }\\n    } else {\\n      return separator;\\n    }\\n  }\\n  onSetParent() {\\n    if (this._on_set_parent_hooks) {\\n      for (let hook of this._on_set_parent_hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n  findNode(path) {\\n    if (path == null) {\\n      return null;\\n    }\\n    if (path == CoreWalker.CURRENT || path == CoreWalker.CURRENT_WITH_SLASH) {\\n      return this.node;\\n    }\\n    if (path == CoreWalker.PARENT || path == CoreWalker.PARENT_WITH_SLASH) {\\n      return this.node.parent();\\n    }\\n    const separator = CoreWalker.SEPARATOR;\\n    if (path === separator) {\\n      return this.node.scene().root();\\n    }\\n    if (path[0] === separator) {\\n      path = path.substring(1, path.length);\\n      return this.node.scene().root().node(path);\\n    }\\n    if (path.split) {\\n      const elements = path.split(separator);\\n      if (elements.length === 1) {\\n        const name = elements[0];\\n        if (this.node.childrenController) {\\n          return this.node.childrenController.childByName(name);\\n        } else {\\n          return null;\\n        }\\n      } else {\\n        return CoreWalker.findNode(this.node, path);\\n      }\\n    } else {\\n      console.error(\\\\\\\"unexpected path given:\\\\\\\", path);\\n      return null;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/MapUtils.ts\\nvar MapUtils = class {\\n  static arrayFromValues(map) {\\n    const array = [];\\n    map.forEach((v) => {\\n      array.push(v);\\n    });\\n    return array;\\n  }\\n  static pushOnArrayAtEntry(map, key, newElement) {\\n    let has_entry = map.has(key);\\n    if (has_entry) {\\n      map.get(key).push(newElement);\\n    } else {\\n      map.set(key, [newElement]);\\n    }\\n  }\\n  static addToSetAtEntry(map, key, newElement) {\\n    let has_entry = map.has(key);\\n    if (has_entry) {\\n      map.get(key).add(newElement);\\n    } else {\\n      const set = new Set();\\n      set.add(newElement);\\n      map.set(key, set);\\n    }\\n  }\\n  static popFromArrayAtEntry(map, key, elementToRemove) {\\n    let has_entry = map.has(key);\\n    if (has_entry) {\\n      const array = map.get(key);\\n      const index = array.indexOf(elementToRemove);\\n      if (index >= 0) {\\n        array.splice(index, 1);\\n      }\\n    }\\n  }\\n  static removeFromSetAtEntry(map, key, elementToRemove) {\\n    let has_entry = map.has(key);\\n    if (has_entry) {\\n      const set = map.get(key);\\n      set.delete(elementToRemove);\\n      if (set.size == 0) {\\n        map.delete(key);\\n      }\\n    }\\n  }\\n  static unshiftOnArrayAtEntry(map, key, newElement) {\\n    let has_entry = map.has(key);\\n    if (has_entry) {\\n      map.get(key).unshift(newElement);\\n    } else {\\n      map.set(key, [newElement]);\\n    }\\n  }\\n  static concatOnArrayAtEntry(map, key, newElements) {\\n    let has_entry = map.has(key);\\n    if (has_entry) {\\n      let array = map.get(key);\\n      for (let element of newElements) {\\n        array.push(element);\\n      }\\n    } else {\\n      map.set(key, newElements);\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/SetUtils.ts\\nvar SetUtils = class {\\n  static toArray(set) {\\n    const array = [];\\n    set.forEach((elem) => {\\n      array.push(elem);\\n    });\\n    return array;\\n  }\\n  static union(set0, set1) {\\n    const newSet = new Set();\\n    set0.forEach((val) => newSet.add(val));\\n    set1.forEach((val) => newSet.add(val));\\n    return newSet;\\n  }\\n  static intersection(set0, set1) {\\n    const newSet = new Set();\\n    set0.forEach((val) => {\\n      if (set1.has(val)) {\\n        newSet.add(val);\\n      }\\n    });\\n    set1.forEach((val) => {\\n      if (set0.has(val)) {\\n        newSet.add(val);\\n      }\\n    });\\n    return newSet;\\n  }\\n  static difference(set0, set1) {\\n    const newSet = new Set();\\n    set0.forEach((val) => {\\n      if (!set1.has(val)) {\\n        newSet.add(val);\\n      }\\n    });\\n    set1.forEach((val) => {\\n      if (!set0.has(val)) {\\n        newSet.add(val);\\n      }\\n    });\\n    return newSet;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/ArrayUtils.ts\\nvar ArrayUtils = class {\\n  static shallowClone(array) {\\n    return [...array];\\n  }\\n  static min(array) {\\n    let min = array[0];\\n    for (let element of array) {\\n      if (element < min) {\\n        min = element;\\n      }\\n    }\\n    return min;\\n  }\\n  static max(array) {\\n    let min = array[0];\\n    for (let element of array) {\\n      if (element > min) {\\n        min = element;\\n      }\\n    }\\n    return min;\\n  }\\n  static sum(array) {\\n    let sum = 0;\\n    for (let element of array) {\\n      sum += element;\\n    }\\n    return sum;\\n  }\\n  static compact(array) {\\n    const newArray = [];\\n    for (let elem of array) {\\n      if (elem != null) {\\n        newArray.push(elem);\\n      }\\n    }\\n    return newArray;\\n  }\\n  static uniq(array) {\\n    const tmpSet = new Set();\\n    for (let elem of array) {\\n      tmpSet.add(elem);\\n    }\\n    const newArray = new Array(tmpSet.size);\\n    let i = 0;\\n    tmpSet.forEach((elem) => {\\n      newArray[i] = elem;\\n      i++;\\n    });\\n    return newArray;\\n  }\\n  static chunk(array, chunkSize) {\\n    const newArray = [];\\n    let newSubArray = [];\\n    newArray.push(newSubArray);\\n    for (let i = 0; i < array.length; i++) {\\n      if (newSubArray.length == chunkSize) {\\n        newSubArray = [];\\n        newArray.push(newSubArray);\\n      }\\n      newSubArray.push(array[i]);\\n    }\\n    return newArray;\\n  }\\n  static union(array0, array1) {\\n    const newArray = [];\\n    const unionSet = SetUtils.union(this.toSet(array0), this.toSet(array1));\\n    unionSet.forEach((val) => newArray.push(val));\\n    return newArray;\\n  }\\n  static intersection(array0, array1) {\\n    const newArray = [];\\n    const intersectionSet = SetUtils.intersection(this.toSet(array0), this.toSet(array1));\\n    intersectionSet.forEach((val) => newArray.push(val));\\n    return newArray;\\n  }\\n  static difference(array0, array1) {\\n    const newArray = [];\\n    const differenceSet = SetUtils.difference(this.toSet(array0), this.toSet(array1));\\n    differenceSet.forEach((val) => newArray.push(val));\\n    return newArray;\\n  }\\n  static toSet(array) {\\n    const set = new Set();\\n    for (let elem of array) {\\n      set.add(elem);\\n    }\\n    return set;\\n  }\\n  static isEqual(array0, array1) {\\n    if (array0.length != array1.length) {\\n      return false;\\n    }\\n    const count = array0.length;\\n    for (let i = 0; i < count; i++) {\\n      if (array0[i] != array1[i]) {\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n  static sortBy(array, callback) {\\n    if (array.length == 0) {\\n      return [];\\n    }\\n    const elementsByValue = new Map();\\n    const valuesSet = new Set();\\n    for (let elem of array) {\\n      const value = callback(elem);\\n      valuesSet.add(value);\\n      MapUtils.pushOnArrayAtEntry(elementsByValue, value, elem);\\n    }\\n    const values = new Array(valuesSet.size);\\n    let i = 0;\\n    valuesSet.forEach((value) => {\\n      values[i] = value;\\n      i++;\\n    });\\n    if (CoreType.isString(values[0])) {\\n      values.sort();\\n    } else {\\n      values.sort((a, b) => a - b);\\n    }\\n    const sorted_elements = new Array(array.length);\\n    i = 0;\\n    for (let value of values) {\\n      const elements_for_value = elementsByValue.get(value);\\n      if (elements_for_value) {\\n        for (let element of elements_for_value) {\\n          sorted_elements[i] = element;\\n          i++;\\n        }\\n      }\\n    }\\n    return sorted_elements;\\n  }\\n  static range(start, end, step = 1) {\\n    if (end == null) {\\n      end = start;\\n      start = 0;\\n    }\\n    const length = Math.floor((end - start) / step);\\n    const array = new Array(length);\\n    for (let i = 0; i < array.length; i++) {\\n      array[i] = start + i * step;\\n    }\\n    return array;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/String.ts\\nvar ATTRIB_NAMES_SEPARATOR = /[, ]/;\\nvar TAIL_DIGIT_MATCH_REGEXP = /\\\\d+$/;\\nvar LEADING_ZEROS_MATCH_REGEXP = /^0+/;\\nvar INDICES_LIST_SEPARATOR = /,| /;\\nvar ZERO = \\\\\\\"0\\\\\\\";\\nvar SPACE = \\\\\\\" \\\\\\\";\\nvar NUM_REGEXP = /^-?\\\\d+\\\\.?\\\\d*$/;\\nvar BooleanString;\\n(function(BooleanString2) {\\n  BooleanString2[\\\\\\\"TRUE\\\\\\\"] = \\\\\\\"true\\\\\\\";\\n  BooleanString2[\\\\\\\"FALSE\\\\\\\"] = \\\\\\\"false\\\\\\\";\\n})(BooleanString || (BooleanString = {}));\\nvar CoreString = class {\\n  static isBoolean(word) {\\n    return word == BooleanString.TRUE || word == BooleanString.FALSE;\\n  }\\n  static toBoolean(word) {\\n    return word == BooleanString.TRUE;\\n  }\\n  static isNumber(word) {\\n    return NUM_REGEXP.test(word);\\n  }\\n  static tailDigits(word) {\\n    const match = word.match(TAIL_DIGIT_MATCH_REGEXP);\\n    if (match) {\\n      return parseInt(match[0]);\\n    } else {\\n      return 0;\\n    }\\n  }\\n  static increment(word) {\\n    const match = word.match(TAIL_DIGIT_MATCH_REGEXP);\\n    if (match) {\\n      let numbers_as_str = match[0];\\n      let zeros_prefix = \\\\\\\"\\\\\\\";\\n      const leading_zeros_match = numbers_as_str.match(LEADING_ZEROS_MATCH_REGEXP);\\n      if (leading_zeros_match) {\\n        zeros_prefix = leading_zeros_match[0];\\n      }\\n      const digits = parseInt(numbers_as_str);\\n      if (digits == 0) {\\n        if (zeros_prefix.length > 0) {\\n          if (zeros_prefix[zeros_prefix.length - 1] == ZERO) {\\n            zeros_prefix = zeros_prefix.slice(0, -1);\\n          }\\n        }\\n      }\\n      const prefix = word.substring(0, word.length - match[0].length);\\n      return `${prefix}${zeros_prefix}${digits + 1}`;\\n    } else {\\n      return `${word}1`;\\n    }\\n  }\\n  static pluralize(word) {\\n    const last_char = word[word.length - 1];\\n    if (last_char !== \\\\\\\"s\\\\\\\") {\\n      return `${word}s`;\\n    } else {\\n      return word;\\n    }\\n  }\\n  static camelCase(str) {\\n    const elements = str.replace(/_/g, \\\\\\\" \\\\\\\").split(\\\\\\\" \\\\\\\");\\n    let newWord = \\\\\\\"\\\\\\\";\\n    for (let i = 0; i < elements.length; i++) {\\n      let element = elements[i].toLowerCase();\\n      if (i > 0) {\\n        element = this.upperFirst(element);\\n      }\\n      newWord += element;\\n    }\\n    return newWord;\\n  }\\n  static upperFirst(word) {\\n    const newString = word[0].toUpperCase() + word.substr(1);\\n    return newString;\\n  }\\n  static titleize(word) {\\n    const elements = word.split(/\\\\s|_/g);\\n    const newElements = elements.map((elem) => this.upperFirst(elem));\\n    return newElements.join(\\\\\\\" \\\\\\\");\\n  }\\n  static precision(val, decimals = 2) {\\n    decimals = Math.max(decimals, 0);\\n    const elements = `${val}`.split(\\\\\\\".\\\\\\\");\\n    if (decimals <= 0) {\\n      return elements[0];\\n    }\\n    let frac = elements[1];\\n    if (frac !== void 0) {\\n      if (frac.length > decimals) {\\n        frac = frac.substring(0, decimals);\\n      }\\n      frac = frac.padEnd(decimals, \\\\\\\"0\\\\\\\");\\n      return `${elements[0]}.${frac}`;\\n    } else {\\n      const string_to_pad = `${val}.`;\\n      const pad = string_to_pad.length + decimals;\\n      return string_to_pad.padEnd(pad, \\\\\\\"0\\\\\\\");\\n    }\\n  }\\n  static ensureFloat(num) {\\n    const num_as_string = `${num}`;\\n    const dot_pos = num_as_string.indexOf(\\\\\\\".\\\\\\\");\\n    if (dot_pos >= 0) {\\n      return num_as_string;\\n    } else {\\n      return `${num_as_string}.0`;\\n    }\\n  }\\n  static ensureInteger(num) {\\n    const num_as_string = `${num}`;\\n    const dot_pos = num_as_string.indexOf(\\\\\\\".\\\\\\\");\\n    if (dot_pos >= 0) {\\n      return num_as_string.split(\\\\\\\".\\\\\\\")[0];\\n    } else {\\n      return num_as_string;\\n    }\\n  }\\n  static matchMask(word, mask) {\\n    if (mask === \\\\\\\"*\\\\\\\") {\\n      return true;\\n    }\\n    if (word == mask) {\\n      return true;\\n    }\\n    const elements = mask.split(SPACE);\\n    if (elements.length > 1) {\\n      for (let element of elements) {\\n        const match = this.matchMask(word, element);\\n        if (match) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    }\\n    mask = mask.split(\\\\\\\"*\\\\\\\").join(\\\\\\\".*\\\\\\\");\\n    mask = `^${mask}$`;\\n    const regex = new RegExp(mask);\\n    return regex.test(word);\\n  }\\n  static matchesOneMask(word, masks) {\\n    let matches_one_mask = false;\\n    for (let mask of masks) {\\n      if (CoreString.matchMask(word, mask)) {\\n        matches_one_mask = true;\\n      }\\n    }\\n    return matches_one_mask;\\n  }\\n  static attribNames(word) {\\n    const elements = word.split(ATTRIB_NAMES_SEPARATOR);\\n    const names_set = new Set();\\n    for (let element of elements) {\\n      element = element.trim();\\n      if (element.length > 0) {\\n        names_set.add(element);\\n      }\\n    }\\n    const names = new Array(names_set.size);\\n    let i = 0;\\n    names_set.forEach((name) => {\\n      names[i] = name;\\n      i++;\\n    });\\n    return names;\\n  }\\n  static indices(indices_string) {\\n    const elements = indices_string.split(INDICES_LIST_SEPARATOR);\\n    if (elements.length > 1) {\\n      const indices = elements.flatMap((element) => this.indices(element));\\n      return ArrayUtils.uniq(indices).sort((a, b) => a - b);\\n    } else {\\n      const element = elements[0];\\n      if (element) {\\n        const range_separator = \\\\\\\"-\\\\\\\";\\n        if (element.indexOf(range_separator) > 0) {\\n          const range_elements = element.split(range_separator);\\n          return ArrayUtils.range(parseInt(range_elements[0]), parseInt(range_elements[1]) + 1);\\n        } else {\\n          const parsed = parseInt(element);\\n          if (CoreType.isNumber(parsed)) {\\n            return [parsed];\\n          } else {\\n            return [];\\n          }\\n        }\\n      } else {\\n        return [];\\n      }\\n    }\\n  }\\n  static escapeLineBreaks(word) {\\n    return word.replace(/(\\\\r\\\\n|\\\\n|\\\\r)/gm, \\\\\\\"\\\\\\\\n\\\\\\\");\\n  }\\n  static sanitizeName(name) {\\n    name = name.replace(/[^A-Za-z0-9]/g, \\\\\\\"_\\\\\\\");\\n    name = name.replace(/^[0-9]/, \\\\\\\"_\\\\\\\");\\n    return name;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/NodeSelection.ts\\nvar CoreNodeSelection = class {\\n  constructor(_node) {\\n    this._node = _node;\\n    this._node_ids = [];\\n    this._json = [];\\n  }\\n  node() {\\n    return this._node;\\n  }\\n  nodes() {\\n    return this._node.scene().graph.nodesFromIds(this._node_ids);\\n  }\\n  contains(node) {\\n    return this._node_ids.includes(node.graphNodeId());\\n  }\\n  equals(nodes) {\\n    const node_ids = nodes.map((node) => node.graphNodeId()).sort();\\n    return ArrayUtils.isEqual(node_ids, this._node_ids);\\n  }\\n  clear() {\\n    this._node_ids = [];\\n    this.send_update_event();\\n  }\\n  set(nodes) {\\n    this._node_ids = [];\\n    this.add(nodes);\\n  }\\n  add(nodes_to_add) {\\n    const node_ids_to_add = nodes_to_add.map((node) => node.graphNodeId());\\n    this._node_ids = ArrayUtils.union(this._node_ids, node_ids_to_add);\\n    this.send_update_event();\\n  }\\n  remove(nodes_to_remove) {\\n    const node_ids_to_remove = nodes_to_remove.map((node) => node.graphNodeId());\\n    this._node_ids = ArrayUtils.difference(this._node_ids, node_ids_to_remove);\\n    this.send_update_event();\\n  }\\n  send_update_event() {\\n    this._node.emit(NodeEvent.SELECTION_UPDATED);\\n  }\\n  toJSON() {\\n    this._json = this._json || [];\\n    this._json = this._node_ids.map((id) => id);\\n    return this._json;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/InputCloneMode.ts\\nvar InputCloneMode;\\n(function(InputCloneMode2) {\\n  InputCloneMode2[\\\\\\\"ALWAYS\\\\\\\"] = \\\\\\\"always\\\\\\\";\\n  InputCloneMode2[\\\\\\\"NEVER\\\\\\\"] = \\\\\\\"never\\\\\\\";\\n  InputCloneMode2[\\\\\\\"FROM_NODE\\\\\\\"] = \\\\\\\"from_node\\\\\\\";\\n})(InputCloneMode || (InputCloneMode = {}));\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/Assert.ts\\nvar TypeAssert = class {\\n  static unreachable(x) {\\n    throw new Error(\\\\\\\"Didn't expect to get here\\\\\\\");\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/operations/container/utils/inputs/ClonedStatesController.ts\\nvar ClonedStatesController = class {\\n  constructor(inputs_controller) {\\n    this.inputs_controller = inputs_controller;\\n    this._clone_required_states = [];\\n    this._overridden = false;\\n  }\\n  init_inputs_cloned_state(states) {\\n    if (CoreType.isArray(states)) {\\n      this._cloned_states = states;\\n    } else {\\n      this._cloned_state = states;\\n    }\\n    this._update_clone_required_state();\\n  }\\n  override_cloned_state_allowed() {\\n    if (this._cloned_states) {\\n      for (let state of this._cloned_states) {\\n        if (state == InputCloneMode.FROM_NODE) {\\n          return true;\\n        }\\n      }\\n    }\\n    if (this._cloned_state) {\\n      return this._cloned_state == InputCloneMode.FROM_NODE;\\n    }\\n    return false;\\n  }\\n  clone_required_state(index) {\\n    return this._clone_required_states[index];\\n  }\\n  clone_required_states() {\\n    return this._clone_required_states;\\n  }\\n  _get_clone_required_state(index) {\\n    const states = this._cloned_states;\\n    if (states) {\\n      const state = states[index];\\n      if (state != null) {\\n        return this.clone_required_from_state(state);\\n      }\\n    }\\n    if (this._cloned_state) {\\n      return this.clone_required_from_state(this._cloned_state);\\n    }\\n    return true;\\n  }\\n  clone_required_from_state(state) {\\n    switch (state) {\\n      case InputCloneMode.ALWAYS:\\n        return true;\\n      case InputCloneMode.NEVER:\\n        return false;\\n      case InputCloneMode.FROM_NODE:\\n        return !this._overridden;\\n    }\\n    return TypeAssert.unreachable(state);\\n  }\\n  override_cloned_state(state) {\\n    this._overridden = state;\\n    this._update_clone_required_state();\\n  }\\n  overriden() {\\n    return this._overridden;\\n  }\\n  _update_clone_required_state() {\\n    if (this._cloned_states) {\\n      const states = [];\\n      for (let i = 0; i < this._cloned_states.length; i++) {\\n        states[i] = this._get_clone_required_state(i);\\n      }\\n      this._clone_required_states = states;\\n      return;\\n    }\\n    if (this._cloned_state) {\\n      const max_inputs = this.inputs_controller.inputs_count();\\n      const states = [];\\n      for (let i = 0; i < max_inputs; i++) {\\n        states[i] = this._get_clone_required_state(i);\\n      }\\n      this._clone_required_states = states;\\n      return;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/operations/container/utils/InputsController.ts\\nvar InputsController = class {\\n  constructor(operation_container) {\\n    this.operation_container = operation_container;\\n  }\\n  inputs_count() {\\n    return this.operation_container.inputs_count();\\n  }\\n  init_inputs_cloned_state(states) {\\n    if (!this._cloned_states_controller) {\\n      this._cloned_states_controller = new ClonedStatesController(this);\\n      this._cloned_states_controller.init_inputs_cloned_state(states);\\n    }\\n  }\\n  clone_required(index) {\\n    const state = this._cloned_states_controller?.clone_required_state(index);\\n    if (state != null) {\\n      return state;\\n    }\\n    return true;\\n  }\\n  override_cloned_state(state) {\\n    this._cloned_states_controller?.override_cloned_state(state);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/operations/container/_Base.ts\\nvar BaseOperationContainer = class {\\n  constructor(operation, name, init_params) {\\n    this.operation = operation;\\n    this.name = name;\\n    this.params = {};\\n    this._apply_default_params();\\n    this._apply_init_params(init_params);\\n    this._init_cloned_states();\\n  }\\n  path_param_resolve_required() {\\n    return this._path_params != null;\\n  }\\n  resolve_path_params(node_start) {\\n    if (!this._path_params) {\\n      return;\\n    }\\n    for (let path_param of this._path_params) {\\n      path_param.resolve(node_start);\\n    }\\n  }\\n  _apply_default_params() {\\n    const default_params = this.operation.constructor.DEFAULT_PARAMS;\\n    const param_names = Object.keys(default_params);\\n    for (let param_name of param_names) {\\n      const param_data = default_params[param_name];\\n      const clone_param_data = this._convert_param_data(param_name, param_data);\\n      if (clone_param_data != void 0) {\\n        this.params[param_name] = clone_param_data;\\n      }\\n    }\\n  }\\n  _apply_init_params(init_params) {\\n    const param_names = Object.keys(init_params);\\n    for (let param_name of param_names) {\\n      const param_data = init_params[param_name];\\n      if (param_data.simple_data != null) {\\n        const simple_data = param_data.simple_data;\\n        const clone_param_data = this._convert_export_param_data(param_name, simple_data);\\n        if (clone_param_data != void 0) {\\n          this.params[param_name] = clone_param_data;\\n        }\\n      }\\n    }\\n  }\\n  _convert_param_data(param_name, param_data) {\\n    if (CoreType.isNumber(param_data) || CoreType.isBoolean(param_data) || CoreType.isString(param_data)) {\\n      return param_data;\\n    }\\n    if (param_data instanceof TypedNodePathParamValue) {\\n      const cloned = param_data.clone();\\n      if (!this._path_params) {\\n        this._path_params = [];\\n      }\\n      this._path_params.push(cloned);\\n      return cloned;\\n    }\\n    if (param_data instanceof Color || param_data instanceof Vector2 || param_data instanceof Vector3 || param_data instanceof Vector4) {\\n      return param_data.clone();\\n    }\\n  }\\n  _convert_export_param_data(param_name, param_data) {\\n    const default_param = this.params[param_name];\\n    if (CoreType.isBoolean(param_data)) {\\n      return param_data;\\n    }\\n    if (CoreType.isNumber(param_data)) {\\n      if (CoreType.isBoolean(default_param)) {\\n        return param_data >= 1 ? true : false;\\n      } else {\\n        return param_data;\\n      }\\n    }\\n    if (CoreType.isString(param_data)) {\\n      if (default_param) {\\n        if (default_param instanceof TypedNodePathParamValue) {\\n          return default_param.set_path(param_data);\\n        }\\n        if (default_param instanceof TypedParamPathParamValue) {\\n          return default_param.set_path(param_data);\\n        }\\n      }\\n      return param_data;\\n    }\\n    if (CoreType.isArray(param_data)) {\\n      this.params[param_name].fromArray(param_data);\\n    }\\n  }\\n  setInput(index, input) {\\n    this._inputs = this._inputs || [];\\n    this._inputs[index] = input;\\n  }\\n  inputs_count() {\\n    if (this._inputs) {\\n      return this._inputs.length;\\n    } else {\\n      return 0;\\n    }\\n  }\\n  inputsController() {\\n    return this._inputs_controller = this._inputs_controller || new InputsController(this);\\n  }\\n  _init_cloned_states() {\\n    const default_cloned_states = this.operation.constructor.INPUT_CLONED_STATE;\\n    this.inputsController().init_inputs_cloned_state(default_cloned_states);\\n  }\\n  input_clone_required(index) {\\n    if (!this._inputs_controller) {\\n      return true;\\n    }\\n    return this._inputs_controller.clone_required(index);\\n  }\\n  override_input_clone_state(state) {\\n    this.inputsController().override_cloned_state(state);\\n  }\\n  cook(input_contents) {\\n    return this.operation.cook(input_contents, this.params);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/operations/container/sop.ts\\nvar SopOperationContainer = class extends BaseOperationContainer {\\n  constructor(operation, name, init_params) {\\n    super(operation, name, init_params);\\n    this.operation = operation;\\n    this.name = name;\\n    this.init_params = init_params;\\n    this._inputs = [];\\n    this._current_input_index = 0;\\n    this._dirty = true;\\n  }\\n  add_input(input) {\\n    super.setInput(this._current_input_index, input);\\n    this.increment_input_index();\\n  }\\n  increment_input_index() {\\n    this._current_input_index++;\\n  }\\n  current_input_index() {\\n    return this._current_input_index;\\n  }\\n  setDirty() {\\n    if (this._dirty) {\\n      return;\\n    }\\n    this._compute_result = void 0;\\n    for (let i = 0; i < this._inputs.length; i++) {\\n      const input_operation = this._inputs[i];\\n      input_operation.setDirty();\\n    }\\n  }\\n  async compute(input_contents, operation_inputs_map) {\\n    if (this._compute_result) {\\n      return this._compute_result;\\n    }\\n    const operation_input_contents = [];\\n    const node_inputs_map = operation_inputs_map.get(this);\\n    if (node_inputs_map) {\\n      node_inputs_map.forEach((node_input_index, operation_input_index) => {\\n        operation_input_contents[operation_input_index] = input_contents[node_input_index];\\n      });\\n    }\\n    for (let i = 0; i < this._inputs.length; i++) {\\n      const input_operation = this._inputs[i];\\n      let result2 = await input_operation.compute(input_contents, operation_inputs_map);\\n      if (result2) {\\n        if (this.input_clone_required(i)) {\\n          result2 = result2.clone();\\n        }\\n        operation_input_contents[i] = result2;\\n      }\\n    }\\n    const result = this.operation.cook(operation_input_contents, this.params);\\n    if (result) {\\n      if (result instanceof Promise) {\\n        this._compute_result = await result;\\n      } else {\\n        this._compute_result = result;\\n      }\\n    } else {\\n      this._compute_result = void 0;\\n    }\\n    this._dirty = false;\\n    return this._compute_result;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/hierarchy/ChildrenController.ts\\nvar HierarchyChildrenController = class {\\n  constructor(node, _context2) {\\n    this.node = node;\\n    this._context = _context2;\\n    this._childrenByName = new Map();\\n    this._childrenByType = new Map();\\n    this._childrenAndGrandchildrenByContext = new Map();\\n  }\\n  get selection() {\\n    return this._selection = this._selection || new CoreNodeSelection(this.node);\\n  }\\n  dispose() {\\n    const children = this.children();\\n    for (let child of children) {\\n      this.node.removeNode(child);\\n    }\\n    this._selection = void 0;\\n  }\\n  get context() {\\n    return this._context;\\n  }\\n  set_output_node_find_method(method) {\\n    this._output_node_find_method = method;\\n  }\\n  output_node() {\\n    if (this._output_node_find_method) {\\n      return this._output_node_find_method();\\n    }\\n  }\\n  setChildName(node, new_name) {\\n    let current_child_with_name;\\n    new_name = CoreString.sanitizeName(new_name);\\n    if ((current_child_with_name = this._childrenByName.get(new_name)) != null) {\\n      if (node.name() === new_name && current_child_with_name.graphNodeId() === node.graphNodeId()) {\\n        return;\\n      }\\n      new_name = CoreString.increment(new_name);\\n      return this.setChildName(node, new_name);\\n    } else {\\n      const current_name = node.name();\\n      const current_child = this._childrenByName.get(current_name);\\n      if (current_child) {\\n        this._childrenByName.delete(current_name);\\n      }\\n      this._childrenByName.set(new_name, node);\\n      node.nameController.updateNameFromParent(new_name);\\n      this._addToNodesByType(node);\\n      this.node.scene().nodesController.addToInstanciatedNode(node);\\n    }\\n  }\\n  node_context_signature() {\\n    return `${this.node.context()}/${this.node.type()}`;\\n  }\\n  available_children_classes() {\\n    return Poly.registeredNodes(this._context, this.node.type());\\n  }\\n  isValidChildType(node_type) {\\n    const node_class = this.available_children_classes()[node_type];\\n    return node_class != null;\\n  }\\n  createNode(node_class_or_string, params_init_value_overrides, node_type = \\\\\\\"\\\\\\\") {\\n    if (typeof node_class_or_string == \\\\\\\"string\\\\\\\") {\\n      const node_class = this._find_node_class(node_class_or_string);\\n      return this._create_and_init_node(node_class, params_init_value_overrides, node_type);\\n    } else {\\n      return this._create_and_init_node(node_class_or_string, params_init_value_overrides, node_type);\\n    }\\n  }\\n  _create_and_init_node(node_class, params_init_value_overrides, node_type = \\\\\\\"\\\\\\\") {\\n    const child_node = new node_class(this.node.scene(), `child_node_${node_type}`, params_init_value_overrides);\\n    child_node.initialize_base_and_node();\\n    this._addNode(child_node);\\n    child_node.lifecycle.setCreationCompleted();\\n    return child_node;\\n  }\\n  _find_node_class(node_type) {\\n    const node_class = this.available_children_classes()[node_type.toLowerCase()];\\n    if (node_class == null) {\\n      const message = `child node type '${node_type}' not found for node '${this.node.path()}'. Available types are: ${Object.keys(this.available_children_classes()).join(\\\\\\\", \\\\\\\")}, ${this._context}, ${this.node.type()}`;\\n      console.error(message);\\n      throw message;\\n    }\\n    return node_class;\\n  }\\n  create_operation_container(operation_type, operation_container_name, params_init_value_overrides) {\\n    const operation_class = Poly.registeredOperation(this._context, operation_type);\\n    if (operation_class == null) {\\n      const message = `no operation found with context ${this._context}/${operation_type}`;\\n      console.error(message);\\n      throw message;\\n    } else {\\n      const operation = new operation_class(this.node.scene());\\n      const operation_container = new SopOperationContainer(operation, operation_container_name, params_init_value_overrides || {});\\n      return operation_container;\\n    }\\n  }\\n  _addNode(child_node) {\\n    child_node.setParent(this.node);\\n    child_node.params.init();\\n    child_node.parentController.onSetParent();\\n    child_node.nameController.runPostSetFullPathHooks();\\n    if (child_node.childrenAllowed() && child_node.childrenController) {\\n      for (let child of child_node.childrenController.children()) {\\n        child.nameController.runPostSetFullPathHooks();\\n      }\\n    }\\n    this.node.emit(NodeEvent.CREATED, {child_node_json: child_node.toJSON()});\\n    if (this.node.scene().lifecycleController.onCreateHookAllowed()) {\\n      child_node.lifecycle.run_on_create_hooks();\\n    }\\n    child_node.lifecycle.run_on_add_hooks();\\n    this.setChildName(child_node, NameController.base_name(child_node));\\n    this.node.lifecycle.run_on_child_add_hooks(child_node);\\n    if (child_node.require_webgl2()) {\\n      this.node.scene().webgl_controller.set_require_webgl2();\\n    }\\n    this.node.scene().missingExpressionReferencesController.checkForMissingReferences(child_node);\\n    return child_node;\\n  }\\n  removeNode(child_node) {\\n    if (child_node.parent() != this.node) {\\n      return console.warn(`node ${child_node.name()} not under parent ${this.node.path()}`);\\n    } else {\\n      if (this.selection.contains(child_node)) {\\n        this.selection.remove([child_node]);\\n      }\\n      const first_connection = child_node.io.connections.firstInputConnection();\\n      const input_connections = child_node.io.connections.inputConnections();\\n      const output_connections = child_node.io.connections.outputConnections();\\n      if (input_connections) {\\n        for (let input_connection of input_connections) {\\n          if (input_connection) {\\n            input_connection.disconnect({setInput: true});\\n          }\\n        }\\n      }\\n      if (output_connections) {\\n        for (let output_connection of output_connections) {\\n          if (output_connection) {\\n            output_connection.disconnect({setInput: true});\\n            if (first_connection) {\\n              const old_src = first_connection.node_src;\\n              const old_output_index = output_connection.output_index;\\n              const old_dest = output_connection.node_dest;\\n              const old_input_index = output_connection.input_index;\\n              old_dest.io.inputs.setInput(old_input_index, old_src, old_output_index);\\n            }\\n          }\\n        }\\n      }\\n      child_node.setParent(null);\\n      this._childrenByName.delete(child_node.name());\\n      this._removeFromNodesByType(child_node);\\n      this.node.scene().nodesController.removeFromInstanciatedNode(child_node);\\n      child_node.setSuccessorsDirty(this.node);\\n      child_node.graphDisconnectSuccessors();\\n      this.node.lifecycle.run_on_child_remove_hooks(child_node);\\n      child_node.lifecycle.run_on_delete_hooks();\\n      child_node.dispose();\\n      child_node.emit(NodeEvent.DELETED, {parent_id: this.node.graphNodeId()});\\n    }\\n  }\\n  _addToNodesByType(node) {\\n    const nodeId = node.graphNodeId();\\n    const type = node.type();\\n    MapUtils.addToSetAtEntry(this._childrenByType, type, nodeId);\\n    this._addToChildrenAndGrandchildrenByContext(node);\\n  }\\n  _removeFromNodesByType(node) {\\n    const nodeId = node.graphNodeId();\\n    const type = node.type();\\n    MapUtils.removeFromSetAtEntry(this._childrenByType, type, nodeId);\\n    this._removeFromChildrenAndGrandchildrenByContext(node);\\n  }\\n  _addToChildrenAndGrandchildrenByContext(node) {\\n    const nodeId = node.graphNodeId();\\n    const nodeContext = node.context();\\n    MapUtils.addToSetAtEntry(this._childrenAndGrandchildrenByContext, nodeContext, nodeId);\\n    const parent = this.node.parent();\\n    if (parent && parent.childrenAllowed()) {\\n      parent.childrenController?._addToChildrenAndGrandchildrenByContext(node);\\n    }\\n  }\\n  _removeFromChildrenAndGrandchildrenByContext(node) {\\n    const nodeId = node.graphNodeId();\\n    const type = node.context();\\n    MapUtils.removeFromSetAtEntry(this._childrenAndGrandchildrenByContext, type, nodeId);\\n    const parent = this.node.parent();\\n    if (parent && parent.childrenAllowed()) {\\n      parent.childrenController?._removeFromChildrenAndGrandchildrenByContext(node);\\n    }\\n  }\\n  nodesByType(type) {\\n    const nodeIds = this._childrenByType.get(type);\\n    if (!nodeIds) {\\n      return [];\\n    }\\n    const graph = this.node.scene().graph;\\n    const nodes = [];\\n    for (let node_id of nodeIds) {\\n      const node = graph.nodeFromId(node_id);\\n      if (node) {\\n        nodes.push(node);\\n      }\\n    }\\n    return nodes;\\n  }\\n  childByName(name) {\\n    return this._childrenByName.get(name) || null;\\n  }\\n  hasChildrenAndGrandchildrenWithContext(context) {\\n    return this._childrenAndGrandchildrenByContext.get(context) != null;\\n  }\\n  children() {\\n    const nodes = [];\\n    this._childrenByName.forEach((node) => {\\n      nodes.push(node);\\n    });\\n    return nodes;\\n  }\\n  childrenNames() {\\n    const names = [];\\n    this._childrenByName.forEach((node, nodeName) => {\\n      names.push(nodeName);\\n    });\\n    return names;\\n  }\\n  traverseChildren(callback) {\\n    this._childrenByName.forEach((childNode) => {\\n      callback(childNode);\\n      childNode.childrenController?.traverseChildren(callback);\\n    });\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/LifeCycleController.ts\\nvar LifeCycleController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._creation_completed = false;\\n  }\\n  dispose() {\\n    this._on_child_add_hooks = void 0;\\n    this._on_child_remove_hooks = void 0;\\n    this._on_create_hooks = void 0;\\n    this._on_add_hooks = void 0;\\n    this._on_delete_hooks = void 0;\\n  }\\n  setCreationCompleted() {\\n    if (!this._creation_completed) {\\n      this._creation_completed = true;\\n    }\\n  }\\n  creationCompleted() {\\n    return this.node.scene().loadingController.loaded() && this._creation_completed;\\n  }\\n  add_on_child_add_hook(callback) {\\n    this._on_child_add_hooks = this._on_child_add_hooks || [];\\n    this._on_child_add_hooks.push(callback);\\n  }\\n  run_on_child_add_hooks(node) {\\n    this.execute_hooks_with_child_node(this._on_child_add_hooks, node);\\n  }\\n  add_on_child_remove_hook(callback) {\\n    this._on_child_remove_hooks = this._on_child_remove_hooks || [];\\n    this._on_child_remove_hooks.push(callback);\\n  }\\n  run_on_child_remove_hooks(node) {\\n    this.execute_hooks_with_child_node(this._on_child_remove_hooks, node);\\n  }\\n  add_on_create_hook(callback) {\\n    this._on_create_hooks = this._on_create_hooks || [];\\n    this._on_create_hooks.push(callback);\\n  }\\n  run_on_create_hooks() {\\n    this.execute_hooks(this._on_create_hooks);\\n  }\\n  add_on_add_hook(callback) {\\n    this._on_add_hooks = this._on_add_hooks || [];\\n    this._on_add_hooks.push(callback);\\n  }\\n  run_on_add_hooks() {\\n    this.execute_hooks(this._on_add_hooks);\\n  }\\n  add_delete_hook(callback) {\\n    this._on_delete_hooks = this._on_delete_hooks || [];\\n    this._on_delete_hooks.push(callback);\\n  }\\n  run_on_delete_hooks() {\\n    this.execute_hooks(this._on_delete_hooks);\\n  }\\n  execute_hooks(hooks) {\\n    if (hooks) {\\n      let hook;\\n      for (hook of hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n  execute_hooks_with_child_node(hooks, child_node) {\\n    if (hooks) {\\n      let hook;\\n      for (hook of hooks) {\\n        hook(child_node);\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/NodeContext.ts\\nvar NodeContext;\\n(function(NodeContext3) {\\n  NodeContext3[\\\\\\\"ANIM\\\\\\\"] = \\\\\\\"anim\\\\\\\";\\n  NodeContext3[\\\\\\\"COP\\\\\\\"] = \\\\\\\"cop\\\\\\\";\\n  NodeContext3[\\\\\\\"EVENT\\\\\\\"] = \\\\\\\"event\\\\\\\";\\n  NodeContext3[\\\\\\\"GL\\\\\\\"] = \\\\\\\"gl\\\\\\\";\\n  NodeContext3[\\\\\\\"JS\\\\\\\"] = \\\\\\\"js\\\\\\\";\\n  NodeContext3[\\\\\\\"MANAGER\\\\\\\"] = \\\\\\\"manager\\\\\\\";\\n  NodeContext3[\\\\\\\"MAT\\\\\\\"] = \\\\\\\"mat\\\\\\\";\\n  NodeContext3[\\\\\\\"OBJ\\\\\\\"] = \\\\\\\"obj\\\\\\\";\\n  NodeContext3[\\\\\\\"POST\\\\\\\"] = \\\\\\\"post\\\\\\\";\\n  NodeContext3[\\\\\\\"ROP\\\\\\\"] = \\\\\\\"rop\\\\\\\";\\n  NodeContext3[\\\\\\\"SOP\\\\\\\"] = \\\\\\\"sop\\\\\\\";\\n})(NodeContext || (NodeContext = {}));\\nvar NetworkNodeType;\\n(function(NetworkNodeType2) {\\n  NetworkNodeType2[\\\\\\\"ANIM\\\\\\\"] = \\\\\\\"animationsNetwork\\\\\\\";\\n  NetworkNodeType2[\\\\\\\"COP\\\\\\\"] = \\\\\\\"copNetwork\\\\\\\";\\n  NetworkNodeType2[\\\\\\\"EVENT\\\\\\\"] = \\\\\\\"eventsNetwork\\\\\\\";\\n  NetworkNodeType2[\\\\\\\"MAT\\\\\\\"] = \\\\\\\"materialsNetwork\\\\\\\";\\n  NetworkNodeType2[\\\\\\\"POST\\\\\\\"] = \\\\\\\"postProcessNetwork\\\\\\\";\\n  NetworkNodeType2[\\\\\\\"ROP\\\\\\\"] = \\\\\\\"renderersNetwork\\\\\\\";\\n})(NetworkNodeType || (NetworkNodeType = {}));\\nvar NetworkChildNodeType;\\n(function(NetworkChildNodeType2) {\\n  NetworkChildNodeType2[\\\\\\\"INPUT\\\\\\\"] = \\\\\\\"subnetInput\\\\\\\";\\n  NetworkChildNodeType2[\\\\\\\"OUTPUT\\\\\\\"] = \\\\\\\"subnetOutput\\\\\\\";\\n})(NetworkChildNodeType || (NetworkChildNodeType = {}));\\nvar CameraNodeType;\\n(function(CameraNodeType2) {\\n  CameraNodeType2[\\\\\\\"PERSPECTIVE\\\\\\\"] = \\\\\\\"perspectiveCamera\\\\\\\";\\n  CameraNodeType2[\\\\\\\"ORTHOGRAPHIC\\\\\\\"] = \\\\\\\"orthographicCamera\\\\\\\";\\n})(CameraNodeType || (CameraNodeType = {}));\\nvar CAMERA_TYPES = [CameraNodeType.ORTHOGRAPHIC, CameraNodeType.PERSPECTIVE];\\nvar GlNodeType;\\n(function(GlNodeType2) {\\n  GlNodeType2[\\\\\\\"ATTRIBUTE\\\\\\\"] = \\\\\\\"attribute\\\\\\\";\\n})(GlNodeType || (GlNodeType = {}));\\nvar CameraControlsNodeType;\\n(function(CameraControlsNodeType2) {\\n  CameraControlsNodeType2[\\\\\\\"DEVICE_ORIENTATION\\\\\\\"] = \\\\\\\"cameraDeviceOrientationControls\\\\\\\";\\n  CameraControlsNodeType2[\\\\\\\"MAP\\\\\\\"] = \\\\\\\"cameraMapControls\\\\\\\";\\n  CameraControlsNodeType2[\\\\\\\"ORBIT\\\\\\\"] = \\\\\\\"cameraOrbitControls\\\\\\\";\\n  CameraControlsNodeType2[\\\\\\\"FIRST_PERSON\\\\\\\"] = \\\\\\\"firstPersonControls\\\\\\\";\\n  CameraControlsNodeType2[\\\\\\\"PLAYER\\\\\\\"] = \\\\\\\"playerControls\\\\\\\";\\n  CameraControlsNodeType2[\\\\\\\"MOBILE_JOYSTICK\\\\\\\"] = \\\\\\\"mobileJoystickControls\\\\\\\";\\n})(CameraControlsNodeType || (CameraControlsNodeType = {}));\\nvar CAMERA_CONTROLS_NODE_TYPES = [\\n  CameraControlsNodeType.DEVICE_ORIENTATION,\\n  CameraControlsNodeType.MAP,\\n  CameraControlsNodeType.ORBIT,\\n  CameraControlsNodeType.FIRST_PERSON,\\n  CameraControlsNodeType.MOBILE_JOYSTICK\\n];\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/_Base.ts\\nvar TypedContainer = class {\\n  constructor(_node) {\\n    this._node = _node;\\n  }\\n  set_node(node) {\\n    this._node = node;\\n  }\\n  node() {\\n    return this._node;\\n  }\\n  set_content(content) {\\n    this._content = content;\\n    this._post_set_content();\\n  }\\n  has_content() {\\n    return this._content != null;\\n  }\\n  content() {\\n    return this._content;\\n  }\\n  _post_set_content() {\\n  }\\n  coreContent() {\\n    return this._content;\\n  }\\n  coreContentCloned() {\\n    return this._content;\\n  }\\n  infos() {\\n    return [];\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Animation.ts\\nvar AnimationContainer = class extends TypedContainer {\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n  setTimelineBuilder(timeline_builder) {\\n    return this.set_content(timeline_builder);\\n  }\\n  timeline_builder() {\\n    return this.content();\\n  }\\n  coreContentCloned() {\\n    if (this._content) {\\n      return this._content.clone();\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Event.ts\\nvar EventContainer = class extends TypedContainer {\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n};\\n\\n// ../../../node_modules/three/src/objects/SkinnedMesh.js\\nvar _basePosition = /* @__PURE__ */ new Vector3();\\nvar _skinIndex = /* @__PURE__ */ new Vector4();\\nvar _skinWeight = /* @__PURE__ */ new Vector4();\\nvar _vector7 = /* @__PURE__ */ new Vector3();\\nvar _matrix2 = /* @__PURE__ */ new Matrix4();\\nvar SkinnedMesh = class extends Mesh {\\n  constructor(geometry, material) {\\n    super(geometry, material);\\n    this.type = \\\\\\\"SkinnedMesh\\\\\\\";\\n    this.bindMode = \\\\\\\"attached\\\\\\\";\\n    this.bindMatrix = new Matrix4();\\n    this.bindMatrixInverse = new Matrix4();\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.bindMode = source.bindMode;\\n    this.bindMatrix.copy(source.bindMatrix);\\n    this.bindMatrixInverse.copy(source.bindMatrixInverse);\\n    this.skeleton = source.skeleton;\\n    return this;\\n  }\\n  bind(skeleton, bindMatrix) {\\n    this.skeleton = skeleton;\\n    if (bindMatrix === void 0) {\\n      this.updateMatrixWorld(true);\\n      this.skeleton.calculateInverses();\\n      bindMatrix = this.matrixWorld;\\n    }\\n    this.bindMatrix.copy(bindMatrix);\\n    this.bindMatrixInverse.copy(bindMatrix).invert();\\n  }\\n  pose() {\\n    this.skeleton.pose();\\n  }\\n  normalizeSkinWeights() {\\n    const vector = new Vector4();\\n    const skinWeight = this.geometry.attributes.skinWeight;\\n    for (let i = 0, l = skinWeight.count; i < l; i++) {\\n      vector.x = skinWeight.getX(i);\\n      vector.y = skinWeight.getY(i);\\n      vector.z = skinWeight.getZ(i);\\n      vector.w = skinWeight.getW(i);\\n      const scale = 1 / vector.manhattanLength();\\n      if (scale !== Infinity) {\\n        vector.multiplyScalar(scale);\\n      } else {\\n        vector.set(1, 0, 0, 0);\\n      }\\n      skinWeight.setXYZW(i, vector.x, vector.y, vector.z, vector.w);\\n    }\\n  }\\n  updateMatrixWorld(force) {\\n    super.updateMatrixWorld(force);\\n    if (this.bindMode === \\\\\\\"attached\\\\\\\") {\\n      this.bindMatrixInverse.copy(this.matrixWorld).invert();\\n    } else if (this.bindMode === \\\\\\\"detached\\\\\\\") {\\n      this.bindMatrixInverse.copy(this.bindMatrix).invert();\\n    } else {\\n      console.warn(\\\\\\\"THREE.SkinnedMesh: Unrecognized bindMode: \\\\\\\" + this.bindMode);\\n    }\\n  }\\n  boneTransform(index, target) {\\n    const skeleton = this.skeleton;\\n    const geometry = this.geometry;\\n    _skinIndex.fromBufferAttribute(geometry.attributes.skinIndex, index);\\n    _skinWeight.fromBufferAttribute(geometry.attributes.skinWeight, index);\\n    _basePosition.copy(target).applyMatrix4(this.bindMatrix);\\n    target.set(0, 0, 0);\\n    for (let i = 0; i < 4; i++) {\\n      const weight = _skinWeight.getComponent(i);\\n      if (weight !== 0) {\\n        const boneIndex = _skinIndex.getComponent(i);\\n        _matrix2.multiplyMatrices(skeleton.bones[boneIndex].matrixWorld, skeleton.boneInverses[boneIndex]);\\n        target.addScaledVector(_vector7.copy(_basePosition).applyMatrix4(_matrix2), weight);\\n      }\\n    }\\n    return target.applyMatrix4(this.bindMatrixInverse);\\n  }\\n};\\nSkinnedMesh.prototype.isSkinnedMesh = true;\\n\\n// ../../../node_modules/three/src/scenes/Scene.js\\nvar Scene = class extends Object3D {\\n  constructor() {\\n    super();\\n    this.type = \\\\\\\"Scene\\\\\\\";\\n    this.background = null;\\n    this.environment = null;\\n    this.fog = null;\\n    this.overrideMaterial = null;\\n    this.autoUpdate = true;\\n    if (typeof __THREE_DEVTOOLS__ !== \\\\\\\"undefined\\\\\\\") {\\n      __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\", {detail: this}));\\n    }\\n  }\\n  copy(source, recursive) {\\n    super.copy(source, recursive);\\n    if (source.background !== null)\\n      this.background = source.background.clone();\\n    if (source.environment !== null)\\n      this.environment = source.environment.clone();\\n    if (source.fog !== null)\\n      this.fog = source.fog.clone();\\n    if (source.overrideMaterial !== null)\\n      this.overrideMaterial = source.overrideMaterial.clone();\\n    this.autoUpdate = source.autoUpdate;\\n    this.matrixAutoUpdate = source.matrixAutoUpdate;\\n    return this;\\n  }\\n  toJSON(meta) {\\n    const data = super.toJSON(meta);\\n    if (this.fog !== null)\\n      data.object.fog = this.fog.toJSON();\\n    return data;\\n  }\\n};\\nScene.prototype.isScene = true;\\n\\n// ../../../node_modules/three/src/materials/PointsMaterial.js\\nvar PointsMaterial = class extends Material {\\n  constructor(parameters) {\\n    super();\\n    this.type = \\\\\\\"PointsMaterial\\\\\\\";\\n    this.color = new Color(16777215);\\n    this.map = null;\\n    this.alphaMap = null;\\n    this.size = 1;\\n    this.sizeAttenuation = true;\\n    this.setValues(parameters);\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.color.copy(source.color);\\n    this.map = source.map;\\n    this.alphaMap = source.alphaMap;\\n    this.size = source.size;\\n    this.sizeAttenuation = source.sizeAttenuation;\\n    return this;\\n  }\\n};\\nPointsMaterial.prototype.isPointsMaterial = true;\\n\\n// ../../../node_modules/three/src/objects/Points.js\\nvar _inverseMatrix2 = /* @__PURE__ */ new Matrix4();\\nvar _ray2 = /* @__PURE__ */ new Ray();\\nvar _sphere3 = /* @__PURE__ */ new Sphere();\\nvar _position2 = /* @__PURE__ */ new Vector3();\\nvar Points = class extends Object3D {\\n  constructor(geometry = new BufferGeometry(), material = new PointsMaterial()) {\\n    super();\\n    this.type = \\\\\\\"Points\\\\\\\";\\n    this.geometry = geometry;\\n    this.material = material;\\n    this.updateMorphTargets();\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.material = source.material;\\n    this.geometry = source.geometry;\\n    return this;\\n  }\\n  raycast(raycaster, intersects) {\\n    const geometry = this.geometry;\\n    const matrixWorld = this.matrixWorld;\\n    const threshold = raycaster.params.Points.threshold;\\n    const drawRange = geometry.drawRange;\\n    if (geometry.boundingSphere === null)\\n      geometry.computeBoundingSphere();\\n    _sphere3.copy(geometry.boundingSphere);\\n    _sphere3.applyMatrix4(matrixWorld);\\n    _sphere3.radius += threshold;\\n    if (raycaster.ray.intersectsSphere(_sphere3) === false)\\n      return;\\n    _inverseMatrix2.copy(matrixWorld).invert();\\n    _ray2.copy(raycaster.ray).applyMatrix4(_inverseMatrix2);\\n    const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\\n    const localThresholdSq = localThreshold * localThreshold;\\n    if (geometry.isBufferGeometry) {\\n      const index = geometry.index;\\n      const attributes = geometry.attributes;\\n      const positionAttribute = attributes.position;\\n      if (index !== null) {\\n        const start = Math.max(0, drawRange.start);\\n        const end = Math.min(index.count, drawRange.start + drawRange.count);\\n        for (let i = start, il = end; i < il; i++) {\\n          const a = index.getX(i);\\n          _position2.fromBufferAttribute(positionAttribute, a);\\n          testPoint(_position2, a, localThresholdSq, matrixWorld, raycaster, intersects, this);\\n        }\\n      } else {\\n        const start = Math.max(0, drawRange.start);\\n        const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count);\\n        for (let i = start, l = end; i < l; i++) {\\n          _position2.fromBufferAttribute(positionAttribute, i);\\n          testPoint(_position2, i, localThresholdSq, matrixWorld, raycaster, intersects, this);\\n        }\\n      }\\n    } else {\\n      console.error(\\\\\\\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");\\n    }\\n  }\\n  updateMorphTargets() {\\n    const geometry = this.geometry;\\n    if (geometry.isBufferGeometry) {\\n      const morphAttributes = geometry.morphAttributes;\\n      const keys = Object.keys(morphAttributes);\\n      if (keys.length > 0) {\\n        const morphAttribute = morphAttributes[keys[0]];\\n        if (morphAttribute !== void 0) {\\n          this.morphTargetInfluences = [];\\n          this.morphTargetDictionary = {};\\n          for (let m = 0, ml = morphAttribute.length; m < ml; m++) {\\n            const name = morphAttribute[m].name || String(m);\\n            this.morphTargetInfluences.push(0);\\n            this.morphTargetDictionary[name] = m;\\n          }\\n        }\\n      }\\n    } else {\\n      const morphTargets = geometry.morphTargets;\\n      if (morphTargets !== void 0 && morphTargets.length > 0) {\\n        console.error(\\\\\\\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");\\n      }\\n    }\\n  }\\n};\\nPoints.prototype.isPoints = true;\\nfunction testPoint(point, index, localThresholdSq, matrixWorld, raycaster, intersects, object) {\\n  const rayPointDistanceSq = _ray2.distanceSqToPoint(point);\\n  if (rayPointDistanceSq < localThresholdSq) {\\n    const intersectPoint = new Vector3();\\n    _ray2.closestPointToPoint(point, intersectPoint);\\n    intersectPoint.applyMatrix4(matrixWorld);\\n    const distance = raycaster.ray.origin.distanceTo(intersectPoint);\\n    if (distance < raycaster.near || distance > raycaster.far)\\n      return;\\n    intersects.push({\\n      distance,\\n      distanceToRay: Math.sqrt(rayPointDistanceSq),\\n      point: intersectPoint,\\n      index,\\n      face: null,\\n      object\\n    });\\n  }\\n}\\n\\n// ../../../node_modules/three/src/objects/Bone.js\\nvar Bone = class extends Object3D {\\n  constructor() {\\n    super();\\n    this.type = \\\\\\\"Bone\\\\\\\";\\n  }\\n};\\nBone.prototype.isBone = true;\\n\\n// ../../../node_modules/three/src/materials/MeshStandardMaterial.js\\nvar MeshStandardMaterial = class extends Material {\\n  constructor(parameters) {\\n    super();\\n    this.defines = {STANDARD: \\\\\\\"\\\\\\\"};\\n    this.type = \\\\\\\"MeshStandardMaterial\\\\\\\";\\n    this.color = new Color(16777215);\\n    this.roughness = 1;\\n    this.metalness = 0;\\n    this.map = null;\\n    this.lightMap = null;\\n    this.lightMapIntensity = 1;\\n    this.aoMap = null;\\n    this.aoMapIntensity = 1;\\n    this.emissive = new Color(0);\\n    this.emissiveIntensity = 1;\\n    this.emissiveMap = null;\\n    this.bumpMap = null;\\n    this.bumpScale = 1;\\n    this.normalMap = null;\\n    this.normalMapType = TangentSpaceNormalMap;\\n    this.normalScale = new Vector2(1, 1);\\n    this.displacementMap = null;\\n    this.displacementScale = 1;\\n    this.displacementBias = 0;\\n    this.roughnessMap = null;\\n    this.metalnessMap = null;\\n    this.alphaMap = null;\\n    this.envMap = null;\\n    this.envMapIntensity = 1;\\n    this.refractionRatio = 0.98;\\n    this.wireframe = false;\\n    this.wireframeLinewidth = 1;\\n    this.wireframeLinecap = \\\\\\\"round\\\\\\\";\\n    this.wireframeLinejoin = \\\\\\\"round\\\\\\\";\\n    this.flatShading = false;\\n    this.setValues(parameters);\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.defines = {STANDARD: \\\\\\\"\\\\\\\"};\\n    this.color.copy(source.color);\\n    this.roughness = source.roughness;\\n    this.metalness = source.metalness;\\n    this.map = source.map;\\n    this.lightMap = source.lightMap;\\n    this.lightMapIntensity = source.lightMapIntensity;\\n    this.aoMap = source.aoMap;\\n    this.aoMapIntensity = source.aoMapIntensity;\\n    this.emissive.copy(source.emissive);\\n    this.emissiveMap = source.emissiveMap;\\n    this.emissiveIntensity = source.emissiveIntensity;\\n    this.bumpMap = source.bumpMap;\\n    this.bumpScale = source.bumpScale;\\n    this.normalMap = source.normalMap;\\n    this.normalMapType = source.normalMapType;\\n    this.normalScale.copy(source.normalScale);\\n    this.displacementMap = source.displacementMap;\\n    this.displacementScale = source.displacementScale;\\n    this.displacementBias = source.displacementBias;\\n    this.roughnessMap = source.roughnessMap;\\n    this.metalnessMap = source.metalnessMap;\\n    this.alphaMap = source.alphaMap;\\n    this.envMap = source.envMap;\\n    this.envMapIntensity = source.envMapIntensity;\\n    this.refractionRatio = source.refractionRatio;\\n    this.wireframe = source.wireframe;\\n    this.wireframeLinewidth = source.wireframeLinewidth;\\n    this.wireframeLinecap = source.wireframeLinecap;\\n    this.wireframeLinejoin = source.wireframeLinejoin;\\n    this.flatShading = source.flatShading;\\n    return this;\\n  }\\n};\\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\\n\\n// ../../../node_modules/three/src/materials/MeshLambertMaterial.js\\nvar MeshLambertMaterial = class extends Material {\\n  constructor(parameters) {\\n    super();\\n    this.type = \\\\\\\"MeshLambertMaterial\\\\\\\";\\n    this.color = new Color(16777215);\\n    this.map = null;\\n    this.lightMap = null;\\n    this.lightMapIntensity = 1;\\n    this.aoMap = null;\\n    this.aoMapIntensity = 1;\\n    this.emissive = new Color(0);\\n    this.emissiveIntensity = 1;\\n    this.emissiveMap = null;\\n    this.specularMap = null;\\n    this.alphaMap = null;\\n    this.envMap = null;\\n    this.combine = MultiplyOperation;\\n    this.reflectivity = 1;\\n    this.refractionRatio = 0.98;\\n    this.wireframe = false;\\n    this.wireframeLinewidth = 1;\\n    this.wireframeLinecap = \\\\\\\"round\\\\\\\";\\n    this.wireframeLinejoin = \\\\\\\"round\\\\\\\";\\n    this.setValues(parameters);\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.color.copy(source.color);\\n    this.map = source.map;\\n    this.lightMap = source.lightMap;\\n    this.lightMapIntensity = source.lightMapIntensity;\\n    this.aoMap = source.aoMap;\\n    this.aoMapIntensity = source.aoMapIntensity;\\n    this.emissive.copy(source.emissive);\\n    this.emissiveMap = source.emissiveMap;\\n    this.emissiveIntensity = source.emissiveIntensity;\\n    this.specularMap = source.specularMap;\\n    this.alphaMap = source.alphaMap;\\n    this.envMap = source.envMap;\\n    this.combine = source.combine;\\n    this.reflectivity = source.reflectivity;\\n    this.refractionRatio = source.refractionRatio;\\n    this.wireframe = source.wireframe;\\n    this.wireframeLinewidth = source.wireframeLinewidth;\\n    this.wireframeLinecap = source.wireframeLinecap;\\n    this.wireframeLinejoin = source.wireframeLinejoin;\\n    return this;\\n  }\\n};\\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\\n\\n// ../../../node_modules/three/src/materials/LineBasicMaterial.js\\nvar LineBasicMaterial = class extends Material {\\n  constructor(parameters) {\\n    super();\\n    this.type = \\\\\\\"LineBasicMaterial\\\\\\\";\\n    this.color = new Color(16777215);\\n    this.linewidth = 1;\\n    this.linecap = \\\\\\\"round\\\\\\\";\\n    this.linejoin = \\\\\\\"round\\\\\\\";\\n    this.setValues(parameters);\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.color.copy(source.color);\\n    this.linewidth = source.linewidth;\\n    this.linecap = source.linecap;\\n    this.linejoin = source.linejoin;\\n    return this;\\n  }\\n};\\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\\n\\n// ../../../node_modules/three/src/objects/Line.js\\nvar _start = /* @__PURE__ */ new Vector3();\\nvar _end = /* @__PURE__ */ new Vector3();\\nvar _inverseMatrix3 = /* @__PURE__ */ new Matrix4();\\nvar _ray3 = /* @__PURE__ */ new Ray();\\nvar _sphere4 = /* @__PURE__ */ new Sphere();\\nvar Line = class extends Object3D {\\n  constructor(geometry = new BufferGeometry(), material = new LineBasicMaterial()) {\\n    super();\\n    this.type = \\\\\\\"Line\\\\\\\";\\n    this.geometry = geometry;\\n    this.material = material;\\n    this.updateMorphTargets();\\n  }\\n  copy(source) {\\n    super.copy(source);\\n    this.material = source.material;\\n    this.geometry = source.geometry;\\n    return this;\\n  }\\n  computeLineDistances() {\\n    const geometry = this.geometry;\\n    if (geometry.isBufferGeometry) {\\n      if (geometry.index === null) {\\n        const positionAttribute = geometry.attributes.position;\\n        const lineDistances = [0];\\n        for (let i = 1, l = positionAttribute.count; i < l; i++) {\\n          _start.fromBufferAttribute(positionAttribute, i - 1);\\n          _end.fromBufferAttribute(positionAttribute, i);\\n          lineDistances[i] = lineDistances[i - 1];\\n          lineDistances[i] += _start.distanceTo(_end);\\n        }\\n        geometry.setAttribute(\\\\\\\"lineDistance\\\\\\\", new Float32BufferAttribute(lineDistances, 1));\\n      } else {\\n        console.warn(\\\\\\\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");\\n      }\\n    } else if (geometry.isGeometry) {\\n      console.error(\\\\\\\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");\\n    }\\n    return this;\\n  }\\n  raycast(raycaster, intersects) {\\n    const geometry = this.geometry;\\n    const matrixWorld = this.matrixWorld;\\n    const threshold = raycaster.params.Line.threshold;\\n    const drawRange = geometry.drawRange;\\n    if (geometry.boundingSphere === null)\\n      geometry.computeBoundingSphere();\\n    _sphere4.copy(geometry.boundingSphere);\\n    _sphere4.applyMatrix4(matrixWorld);\\n    _sphere4.radius += threshold;\\n    if (raycaster.ray.intersectsSphere(_sphere4) === false)\\n      return;\\n    _inverseMatrix3.copy(matrixWorld).invert();\\n    _ray3.copy(raycaster.ray).applyMatrix4(_inverseMatrix3);\\n    const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\\n    const localThresholdSq = localThreshold * localThreshold;\\n    const vStart = new Vector3();\\n    const vEnd = new Vector3();\\n    const interSegment = new Vector3();\\n    const interRay = new Vector3();\\n    const step = this.isLineSegments ? 2 : 1;\\n    if (geometry.isBufferGeometry) {\\n      const index = geometry.index;\\n      const attributes = geometry.attributes;\\n      const positionAttribute = attributes.position;\\n      if (index !== null) {\\n        const start = Math.max(0, drawRange.start);\\n        const end = Math.min(index.count, drawRange.start + drawRange.count);\\n        for (let i = start, l = end - 1; i < l; i += step) {\\n          const a = index.getX(i);\\n          const b = index.getX(i + 1);\\n          vStart.fromBufferAttribute(positionAttribute, a);\\n          vEnd.fromBufferAttribute(positionAttribute, b);\\n          const distSq = _ray3.distanceSqToSegment(vStart, vEnd, interRay, interSegment);\\n          if (distSq > localThresholdSq)\\n            continue;\\n          interRay.applyMatrix4(this.matrixWorld);\\n          const distance = raycaster.ray.origin.distanceTo(interRay);\\n          if (distance < raycaster.near || distance > raycaster.far)\\n            continue;\\n          intersects.push({\\n            distance,\\n            point: interSegment.clone().applyMatrix4(this.matrixWorld),\\n            index: i,\\n            face: null,\\n            faceIndex: null,\\n            object: this\\n          });\\n        }\\n      } else {\\n        const start = Math.max(0, drawRange.start);\\n        const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count);\\n        for (let i = start, l = end - 1; i < l; i += step) {\\n          vStart.fromBufferAttribute(positionAttribute, i);\\n          vEnd.fromBufferAttribute(positionAttribute, i + 1);\\n          const distSq = _ray3.distanceSqToSegment(vStart, vEnd, interRay, interSegment);\\n          if (distSq > localThresholdSq)\\n            continue;\\n          interRay.applyMatrix4(this.matrixWorld);\\n          const distance = raycaster.ray.origin.distanceTo(interRay);\\n          if (distance < raycaster.near || distance > raycaster.far)\\n            continue;\\n          intersects.push({\\n            distance,\\n            point: interSegment.clone().applyMatrix4(this.matrixWorld),\\n            index: i,\\n            face: null,\\n            faceIndex: null,\\n            object: this\\n          });\\n        }\\n      }\\n    } else if (geometry.isGeometry) {\\n      console.error(\\\\\\\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");\\n    }\\n  }\\n  updateMorphTargets() {\\n    const geometry = this.geometry;\\n    if (geometry.isBufferGeometry) {\\n      const morphAttributes = geometry.morphAttributes;\\n      const keys = Object.keys(morphAttributes);\\n      if (keys.length > 0) {\\n        const morphAttribute = morphAttributes[keys[0]];\\n        if (morphAttribute !== void 0) {\\n          this.morphTargetInfluences = [];\\n          this.morphTargetDictionary = {};\\n          for (let m = 0, ml = morphAttribute.length; m < ml; m++) {\\n            const name = morphAttribute[m].name || String(m);\\n            this.morphTargetInfluences.push(0);\\n            this.morphTargetDictionary[name] = m;\\n          }\\n        }\\n      }\\n    } else {\\n      const morphTargets = geometry.morphTargets;\\n      if (morphTargets !== void 0 && morphTargets.length > 0) {\\n        console.error(\\\\\\\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");\\n      }\\n    }\\n  }\\n};\\nLine.prototype.isLine = true;\\n\\n// ../../../node_modules/three/src/objects/LineSegments.js\\nvar _start2 = /* @__PURE__ */ new Vector3();\\nvar _end2 = /* @__PURE__ */ new Vector3();\\nvar LineSegments = class extends Line {\\n  constructor(geometry, material) {\\n    super(geometry, material);\\n    this.type = \\\\\\\"LineSegments\\\\\\\";\\n  }\\n  computeLineDistances() {\\n    const geometry = this.geometry;\\n    if (geometry.isBufferGeometry) {\\n      if (geometry.index === null) {\\n        const positionAttribute = geometry.attributes.position;\\n        const lineDistances = [];\\n        for (let i = 0, l = positionAttribute.count; i < l; i += 2) {\\n          _start2.fromBufferAttribute(positionAttribute, i);\\n          _end2.fromBufferAttribute(positionAttribute, i + 1);\\n          lineDistances[i] = i === 0 ? 0 : lineDistances[i - 1];\\n          lineDistances[i + 1] = lineDistances[i] + _start2.distanceTo(_end2);\\n        }\\n        geometry.setAttribute(\\\\\\\"lineDistance\\\\\\\", new Float32BufferAttribute(lineDistances, 1));\\n      } else {\\n        console.warn(\\\\\\\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");\\n      }\\n    } else if (geometry.isGeometry) {\\n      console.error(\\\\\\\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");\\n    }\\n    return this;\\n  }\\n};\\nLineSegments.prototype.isLineSegments = true;\\n\\n// ../../../node_modules/three/src/objects/LOD.js\\nvar _v16 = /* @__PURE__ */ new Vector3();\\nvar _v23 = /* @__PURE__ */ new Vector3();\\nvar LOD = class extends Object3D {\\n  constructor() {\\n    super();\\n    this._currentLevel = 0;\\n    this.type = \\\\\\\"LOD\\\\\\\";\\n    Object.defineProperties(this, {\\n      levels: {\\n        enumerable: true,\\n        value: []\\n      },\\n      isLOD: {\\n        value: true\\n      }\\n    });\\n    this.autoUpdate = true;\\n  }\\n  copy(source) {\\n    super.copy(source, false);\\n    const levels = source.levels;\\n    for (let i = 0, l = levels.length; i < l; i++) {\\n      const level = levels[i];\\n      this.addLevel(level.object.clone(), level.distance);\\n    }\\n    this.autoUpdate = source.autoUpdate;\\n    return this;\\n  }\\n  addLevel(object, distance = 0) {\\n    distance = Math.abs(distance);\\n    const levels = this.levels;\\n    let l;\\n    for (l = 0; l < levels.length; l++) {\\n      if (distance < levels[l].distance) {\\n        break;\\n      }\\n    }\\n    levels.splice(l, 0, {distance, object});\\n    this.add(object);\\n    return this;\\n  }\\n  getCurrentLevel() {\\n    return this._currentLevel;\\n  }\\n  getObjectForDistance(distance) {\\n    const levels = this.levels;\\n    if (levels.length > 0) {\\n      let i, l;\\n      for (i = 1, l = levels.length; i < l; i++) {\\n        if (distance < levels[i].distance) {\\n          break;\\n        }\\n      }\\n      return levels[i - 1].object;\\n    }\\n    return null;\\n  }\\n  raycast(raycaster, intersects) {\\n    const levels = this.levels;\\n    if (levels.length > 0) {\\n      _v16.setFromMatrixPosition(this.matrixWorld);\\n      const distance = raycaster.ray.origin.distanceTo(_v16);\\n      this.getObjectForDistance(distance).raycast(raycaster, intersects);\\n    }\\n  }\\n  update(camera) {\\n    const levels = this.levels;\\n    if (levels.length > 1) {\\n      _v16.setFromMatrixPosition(camera.matrixWorld);\\n      _v23.setFromMatrixPosition(this.matrixWorld);\\n      const distance = _v16.distanceTo(_v23) / camera.zoom;\\n      levels[0].object.visible = true;\\n      let i, l;\\n      for (i = 1, l = levels.length; i < l; i++) {\\n        if (distance >= levels[i].distance) {\\n          levels[i - 1].object.visible = false;\\n          levels[i].object.visible = true;\\n        } else {\\n          break;\\n        }\\n      }\\n      this._currentLevel = i - 1;\\n      for (; i < l; i++) {\\n        levels[i].object.visible = false;\\n      }\\n    }\\n  }\\n  toJSON(meta) {\\n    const data = super.toJSON(meta);\\n    if (this.autoUpdate === false)\\n      data.object.autoUpdate = false;\\n    data.object.levels = [];\\n    const levels = this.levels;\\n    for (let i = 0, l = levels.length; i < l; i++) {\\n      const level = levels[i];\\n      data.object.levels.push({\\n        object: level.object.uuid,\\n        distance: level.distance\\n      });\\n    }\\n    return data;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Constant.ts\\nvar ObjectType;\\n(function(ObjectType2) {\\n  ObjectType2[\\\\\\\"OBJECT3D\\\\\\\"] = \\\\\\\"Object3D\\\\\\\";\\n  ObjectType2[\\\\\\\"GROUP\\\\\\\"] = \\\\\\\"Group\\\\\\\";\\n  ObjectType2[\\\\\\\"MESH\\\\\\\"] = \\\\\\\"Mesh\\\\\\\";\\n  ObjectType2[\\\\\\\"POINTS\\\\\\\"] = \\\\\\\"Points\\\\\\\";\\n  ObjectType2[\\\\\\\"LINE_SEGMENTS\\\\\\\"] = \\\\\\\"LineSegments\\\\\\\";\\n  ObjectType2[\\\\\\\"LOD\\\\\\\"] = \\\\\\\"LOD\\\\\\\";\\n})(ObjectType || (ObjectType = {}));\\nvar OBJECT_CONSTRUCTOR_BY_OBJECT_TYPE = {\\n  [ObjectType.MESH]: Mesh,\\n  [ObjectType.GROUP]: Group,\\n  [ObjectType.POINTS]: Points,\\n  [ObjectType.LINE_SEGMENTS]: LineSegments,\\n  [ObjectType.OBJECT3D]: Object3D,\\n  [ObjectType.LOD]: LOD\\n};\\nfunction objectTypeFromConstructor(constructor) {\\n  switch (constructor) {\\n    case Object3D:\\n      return ObjectType.OBJECT3D;\\n    case Group:\\n      return ObjectType.GROUP;\\n    case Mesh:\\n      return ObjectType.MESH;\\n    case Points:\\n      return ObjectType.POINTS;\\n    case LineSegments:\\n      return ObjectType.LINE_SEGMENTS;\\n    case LOD:\\n      return ObjectType.LOD;\\n    default:\\n      Poly.warn(\\\\\\\"object type not supported\\\\\\\", constructor);\\n      return ObjectType.MESH;\\n  }\\n}\\nvar ObjectTypes = [ObjectType.MESH, ObjectType.POINTS, ObjectType.LINE_SEGMENTS];\\nvar ObjectTypeMenuEntries = [\\n  {name: \\\\\\\"Mesh\\\\\\\", value: ObjectTypes.indexOf(ObjectType.MESH)},\\n  {name: \\\\\\\"Points\\\\\\\", value: ObjectTypes.indexOf(ObjectType.POINTS)},\\n  {name: \\\\\\\"LineSegments\\\\\\\", value: ObjectTypes.indexOf(ObjectType.LINE_SEGMENTS)}\\n];\\nvar materials = {\\n  MeshStandard: new MeshStandardMaterial({\\n    color: 16777215,\\n    side: FrontSide,\\n    metalness: 0.5,\\n    roughness: 0.9\\n  }),\\n  [ObjectType.MESH]: new MeshLambertMaterial({\\n    color: new Color(1, 1, 1),\\n    side: FrontSide,\\n    vertexColors: false,\\n    transparent: true,\\n    depthTest: true\\n  }),\\n  [ObjectType.POINTS]: new PointsMaterial({\\n    color: 16777215,\\n    size: 0.1,\\n    depthTest: true\\n  }),\\n  [ObjectType.LINE_SEGMENTS]: new LineBasicMaterial({\\n    color: 16777215,\\n    linewidth: 1\\n  })\\n};\\nvar AttribClass;\\n(function(AttribClass3) {\\n  AttribClass3[AttribClass3[\\\\\\\"VERTEX\\\\\\\"] = 0] = \\\\\\\"VERTEX\\\\\\\";\\n  AttribClass3[AttribClass3[\\\\\\\"OBJECT\\\\\\\"] = 1] = \\\\\\\"OBJECT\\\\\\\";\\n})(AttribClass || (AttribClass = {}));\\nvar AttribType;\\n(function(AttribType2) {\\n  AttribType2[AttribType2[\\\\\\\"NUMERIC\\\\\\\"] = 0] = \\\\\\\"NUMERIC\\\\\\\";\\n  AttribType2[AttribType2[\\\\\\\"STRING\\\\\\\"] = 1] = \\\\\\\"STRING\\\\\\\";\\n})(AttribType || (AttribType = {}));\\nvar AttribSize;\\n(function(AttribSize5) {\\n  AttribSize5[AttribSize5[\\\\\\\"FLOAT\\\\\\\"] = 1] = \\\\\\\"FLOAT\\\\\\\";\\n  AttribSize5[AttribSize5[\\\\\\\"VECTOR2\\\\\\\"] = 2] = \\\\\\\"VECTOR2\\\\\\\";\\n  AttribSize5[AttribSize5[\\\\\\\"VECTOR3\\\\\\\"] = 3] = \\\\\\\"VECTOR3\\\\\\\";\\n  AttribSize5[AttribSize5[\\\\\\\"VECTOR4\\\\\\\"] = 4] = \\\\\\\"VECTOR4\\\\\\\";\\n})(AttribSize || (AttribSize = {}));\\nvar CoreConstant = {\\n  ATTRIB_CLASS: {\\n    VERTEX: 0,\\n    OBJECT: 1\\n  },\\n  OBJECT_TYPES: ObjectTypes,\\n  CONSTRUCTOR_NAMES_BY_CONSTRUCTOR_NAME: {\\n    [Scene.name]: \\\\\\\"Scene\\\\\\\",\\n    [Group.name]: \\\\\\\"Group\\\\\\\",\\n    [Object3D.name]: \\\\\\\"Object3D\\\\\\\",\\n    [Mesh.name]: \\\\\\\"Mesh\\\\\\\",\\n    [Points.name]: \\\\\\\"Points\\\\\\\",\\n    [LineSegments.name]: \\\\\\\"LineSegments\\\\\\\",\\n    [Bone.name]: \\\\\\\"Bone\\\\\\\",\\n    [SkinnedMesh.name]: \\\\\\\"SkinnedMesh\\\\\\\"\\n  },\\n  CONSTRUCTORS_BY_NAME: {\\n    [ObjectType.MESH]: Mesh,\\n    [ObjectType.POINTS]: Points,\\n    [ObjectType.LINE_SEGMENTS]: LineSegments\\n  },\\n  MATERIALS: materials\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Attribute.ts\\nvar Attribute;\\n(function(Attribute2) {\\n  Attribute2[\\\\\\\"COLOR\\\\\\\"] = \\\\\\\"color\\\\\\\";\\n  Attribute2[\\\\\\\"NORMAL\\\\\\\"] = \\\\\\\"normal\\\\\\\";\\n  Attribute2[\\\\\\\"POSITION\\\\\\\"] = \\\\\\\"position\\\\\\\";\\n  Attribute2[\\\\\\\"PSCALE\\\\\\\"] = \\\\\\\"pscale\\\\\\\";\\n  Attribute2[\\\\\\\"UP\\\\\\\"] = \\\\\\\"up\\\\\\\";\\n  Attribute2[\\\\\\\"UV\\\\\\\"] = \\\\\\\"uv\\\\\\\";\\n  Attribute2[\\\\\\\"SCALE\\\\\\\"] = \\\\\\\"scale\\\\\\\";\\n  Attribute2[\\\\\\\"TANGENT\\\\\\\"] = \\\\\\\"tangent\\\\\\\";\\n})(Attribute || (Attribute = {}));\\nvar ATTRIB_NAME_MAP = {\\n  P: Attribute.POSITION,\\n  N: Attribute.NORMAL,\\n  Cd: Attribute.COLOR\\n};\\nvar CoreAttribute = class {\\n  static remapName(name) {\\n    return ATTRIB_NAME_MAP[name] || name;\\n  }\\n  static arrayToIndexedArrays(array) {\\n    const index_by_value = {};\\n    let current_index = 0;\\n    const indices = [];\\n    const values = [];\\n    let i = 0;\\n    while (i < array.length) {\\n      const value = array[i];\\n      const index = index_by_value[value];\\n      if (index != null) {\\n        indices.push(index);\\n      } else {\\n        values.push(value);\\n        indices.push(current_index);\\n        index_by_value[value] = current_index;\\n        current_index += 1;\\n      }\\n      i++;\\n    }\\n    return {\\n      indices,\\n      values\\n    };\\n  }\\n  static default_value(size) {\\n    switch (size) {\\n      case 1:\\n        return 0;\\n      case 2:\\n        return new Vector2(0, 0);\\n      case 3:\\n        return new Vector3(0, 0, 0);\\n      default:\\n        throw `size ${size} not yet implemented`;\\n    }\\n  }\\n  static copy(src, dest, mark_as_needs_update = true) {\\n    const src_array = src?.array;\\n    const dest_array = dest?.array;\\n    if (src_array && dest_array) {\\n      const min_length = Math.min(src_array.length, dest_array.length);\\n      for (let i = 0; i < min_length; i++) {\\n        dest_array[i] = src_array[i];\\n      }\\n      if (mark_as_needs_update) {\\n        dest.needsUpdate = true;\\n      }\\n    }\\n  }\\n  static attribSizeFromValue(val) {\\n    if (CoreType.isString(val) || CoreType.isNumber(val)) {\\n      return AttribSize.FLOAT;\\n    }\\n    if (CoreType.isArray(val)) {\\n      return val.length;\\n    }\\n    switch (val.constructor) {\\n      case Vector2:\\n        return AttribSize.VECTOR2;\\n      case Vector3:\\n        return AttribSize.VECTOR3;\\n      case Vector4:\\n        return AttribSize.VECTOR4;\\n    }\\n    return 0;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Entity.ts\\nvar CoreEntity = class {\\n  constructor(_index) {\\n    this._index = _index;\\n  }\\n  index() {\\n    return this._index;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Point.ts\\nvar ATTRIB_NAMES = {\\n  POSITION: \\\\\\\"position\\\\\\\",\\n  NORMAL: \\\\\\\"normal\\\\\\\"\\n};\\nvar ComponentName;\\n(function(ComponentName2) {\\n  ComponentName2[\\\\\\\"x\\\\\\\"] = \\\\\\\"x\\\\\\\";\\n  ComponentName2[\\\\\\\"y\\\\\\\"] = \\\\\\\"y\\\\\\\";\\n  ComponentName2[\\\\\\\"z\\\\\\\"] = \\\\\\\"z\\\\\\\";\\n  ComponentName2[\\\\\\\"w\\\\\\\"] = \\\\\\\"w\\\\\\\";\\n  ComponentName2[\\\\\\\"r\\\\\\\"] = \\\\\\\"r\\\\\\\";\\n  ComponentName2[\\\\\\\"g\\\\\\\"] = \\\\\\\"g\\\\\\\";\\n  ComponentName2[\\\\\\\"b\\\\\\\"] = \\\\\\\"b\\\\\\\";\\n})(ComponentName || (ComponentName = {}));\\nvar COMPONENT_INDICES = {\\n  x: 0,\\n  y: 1,\\n  z: 2,\\n  w: 3,\\n  r: 0,\\n  g: 1,\\n  b: 2\\n};\\nvar PTNUM = \\\\\\\"ptnum\\\\\\\";\\nvar DOT = \\\\\\\".\\\\\\\";\\nvar CorePoint = class extends CoreEntity {\\n  constructor(_coreGeometry, _index) {\\n    super(_index);\\n    this._coreGeometry = _coreGeometry;\\n    this._geometry = this._coreGeometry.geometry();\\n  }\\n  applyMatrix4(matrix) {\\n    this.position().applyMatrix4(matrix);\\n  }\\n  coreGeometry() {\\n    return this._coreGeometry;\\n  }\\n  geometry() {\\n    return this._geometry = this._geometry || this._coreGeometry.geometry();\\n  }\\n  attribSize(name) {\\n    name = CoreAttribute.remapName(name);\\n    return this._geometry.getAttribute(name).itemSize;\\n  }\\n  hasAttrib(name) {\\n    const remapped_name = CoreAttribute.remapName(name);\\n    return this._coreGeometry.hasAttrib(remapped_name);\\n  }\\n  attribValue(name, target) {\\n    if (name === PTNUM) {\\n      return this.index();\\n    } else {\\n      let component_name = null;\\n      let component_index = null;\\n      if (name[name.length - 2] === DOT) {\\n        component_name = name[name.length - 1];\\n        component_index = COMPONENT_INDICES[component_name];\\n        name = name.substring(0, name.length - 2);\\n      }\\n      const remaped_name = CoreAttribute.remapName(name);\\n      const attrib = this._geometry.getAttribute(remaped_name);\\n      if (attrib) {\\n        const {array} = attrib;\\n        if (this._coreGeometry.isAttribIndexed(remaped_name)) {\\n          return this.indexedAttribValue(remaped_name);\\n        } else {\\n          const size = attrib.itemSize;\\n          const start_index = this._index * size;\\n          if (component_index == null) {\\n            switch (size) {\\n              case 1:\\n                return array[start_index];\\n                break;\\n              case 2:\\n                target = target || new Vector2();\\n                target.fromArray(array, start_index);\\n                return target;\\n                break;\\n              case 3:\\n                target = target || new Vector3();\\n                target.fromArray(array, start_index);\\n                return target;\\n                break;\\n              case 4:\\n                target = target || new Vector4();\\n                target.fromArray(array, start_index);\\n                return target;\\n                break;\\n              default:\\n                throw `size not valid (${size})`;\\n            }\\n          } else {\\n            switch (size) {\\n              case 1:\\n                return array[start_index];\\n                break;\\n              default:\\n                return array[start_index + component_index];\\n            }\\n          }\\n        }\\n      } else {\\n        const message = `attrib ${name} not found. availables are: ${Object.keys(this._geometry.attributes || {}).join(\\\\\\\",\\\\\\\")}`;\\n        console.warn(message);\\n        throw message;\\n      }\\n    }\\n  }\\n  attribValueNumber(name) {\\n    const remapedName = CoreAttribute.remapName(name);\\n    const attrib = this._geometry.getAttribute(remapedName);\\n    return attrib.array[this._index];\\n  }\\n  attribValueVector2(name, target) {\\n    const remapedName = CoreAttribute.remapName(name);\\n    const attrib = this._geometry.getAttribute(remapedName);\\n    target.fromArray(attrib.array, this._index * 2);\\n    return target;\\n  }\\n  attribValueVector3(name, target) {\\n    const remapedName = CoreAttribute.remapName(name);\\n    const attrib = this._geometry.getAttribute(remapedName);\\n    target.fromArray(attrib.array, this._index * 3);\\n    return target;\\n  }\\n  attribValueVector4(name, target) {\\n    const remapedName = CoreAttribute.remapName(name);\\n    const attrib = this._geometry.getAttribute(remapedName);\\n    target.fromArray(attrib.array, this._index * 4);\\n    return target;\\n  }\\n  indexedAttribValue(name) {\\n    const value_index = this.attribValueIndex(name);\\n    return this._coreGeometry.userDataAttrib(name)[value_index];\\n  }\\n  stringAttribValue(name) {\\n    return this.indexedAttribValue(name);\\n  }\\n  attribValueIndex(name) {\\n    if (this._coreGeometry.isAttribIndexed(name)) {\\n      return this._geometry.getAttribute(name).array[this._index];\\n    } else {\\n      return -1;\\n    }\\n  }\\n  isAttribIndexed(name) {\\n    return this._coreGeometry.isAttribIndexed(name);\\n  }\\n  position() {\\n    return this._position || (this._position = this.getPosition(new Vector3()));\\n  }\\n  getPosition(target) {\\n    const {array} = this._geometry.getAttribute(ATTRIB_NAMES.POSITION);\\n    return target.fromArray(array, this._index * 3);\\n  }\\n  setPosition(new_position) {\\n    this.setAttribValueVector3(ATTRIB_NAMES.POSITION, new_position);\\n  }\\n  normal() {\\n    return this._normal = this._normal || this.getNormal(new Vector3());\\n  }\\n  getNormal(target) {\\n    const {array} = this._geometry.getAttribute(ATTRIB_NAMES.NORMAL);\\n    return target.fromArray(array, this._index * 3);\\n  }\\n  setNormal(new_normal) {\\n    return this.setAttribValueVector3(ATTRIB_NAMES.NORMAL, new_normal);\\n  }\\n  setAttribValue(attribName, value) {\\n    const attrib = this._geometry.getAttribute(attribName);\\n    const array = attrib.array;\\n    const attribSize = attrib.itemSize;\\n    if (CoreType.isArray(value)) {\\n      for (let i = 0; i < attribSize; i++) {\\n        array[this._index * attribSize + i] = value[i];\\n      }\\n      return;\\n    }\\n    switch (attribSize) {\\n      case 1:\\n        array[this._index] = value;\\n        break;\\n      case 2:\\n        const v2 = value;\\n        const i2 = this._index * 2;\\n        array[i2 + 0] = v2.x;\\n        array[i2 + 1] = v2.y;\\n        break;\\n      case 3:\\n        const isColor = value.r != null;\\n        const i3 = this._index * 3;\\n        if (isColor) {\\n          const col = value;\\n          array[i3 + 0] = col.r;\\n          array[i3 + 1] = col.g;\\n          array[i3 + 2] = col.b;\\n        } else {\\n          const v3 = value;\\n          array[i3 + 0] = v3.x;\\n          array[i3 + 1] = v3.y;\\n          array[i3 + 2] = v3.z;\\n        }\\n        break;\\n      case 4:\\n        const v4 = value;\\n        const i4 = this._index * 4;\\n        array[i4 + 0] = v4.x;\\n        array[i4 + 1] = v4.y;\\n        array[i4 + 2] = v4.z;\\n        array[i4 + 3] = v4.w;\\n        break;\\n      default:\\n        console.warn(`Point.set_attrib_value does not yet allow attrib size ${attribSize}`);\\n        throw `attrib size ${attribSize} not implemented`;\\n    }\\n  }\\n  setAttribValueFromNumber(attribName, value) {\\n    const attrib = this._geometry.getAttribute(attribName);\\n    const array = attrib.array;\\n    array[this._index] = value;\\n  }\\n  setAttribValueFromVector2(attribName, value) {\\n    const attrib = this._geometry.getAttribute(attribName);\\n    value.toArray(attrib.array, this._index * 2);\\n  }\\n  setAttribValueFromVector3(attribName, value) {\\n    const attrib = this._geometry.getAttribute(attribName);\\n    value.toArray(attrib.array, this._index * 3);\\n  }\\n  setAttribValueFromVector4(attribName, value) {\\n    const attrib = this._geometry.getAttribute(attribName);\\n    value.toArray(attrib.array, this._index * 4);\\n  }\\n  setAttribValueVector3(name, value) {\\n    if (value == null) {\\n      return;\\n    }\\n    if (name == null) {\\n      throw \\\\\\\"Point.set_attrib_value requires a name\\\\\\\";\\n    }\\n    const attrib = this._geometry.getAttribute(name);\\n    const array = attrib.array;\\n    const i = this._index * 3;\\n    array[i] = value.x;\\n    array[i + 1] = value.y;\\n    array[i + 2] = value.z;\\n  }\\n  setAttribIndex(name, new_value_index) {\\n    const array = this._geometry.getAttribute(name).array;\\n    return array[this._index] = new_value_index;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/math/Easing.ts\\nvar ease_i = function(power) {\\n  return function(t) {\\n    return Math.pow(t, power);\\n  };\\n};\\nvar ease_o = function(power) {\\n  return function(t) {\\n    return 1 - Math.abs(Math.pow(t - 1, power));\\n  };\\n};\\nvar ease_io = function(power) {\\n  return function(t) {\\n    return t < 0.5 ? ease_i(power)(t * 2) / 2 : ease_o(power)(t * 2 - 1) / 2 + 0.5;\\n  };\\n};\\nvar Easing = {\\n  linear: ease_io(1),\\n  ease_i: function(t, power) {\\n    return ease_i(power)(t);\\n  },\\n  ease_o: function(t, power) {\\n    return ease_o(power)(t);\\n  },\\n  ease_io: function(t, power) {\\n    return ease_io(power)(t);\\n  },\\n  ease_i2: ease_i(2),\\n  ease_o2: ease_o(2),\\n  ease_io2: ease_io(2),\\n  ease_i3: ease_io(3),\\n  ease_o3: ease_io(3),\\n  ease_io3: ease_io(3),\\n  ease_i4: ease_io(4),\\n  ease_o4: ease_io(4),\\n  ease_io4: ease_io(4),\\n  ease_i_sin: function(t) {\\n    return 1 + Math.sin(Math.PI / 2 * t - Math.PI / 2);\\n  },\\n  ease_o_sin: function(t) {\\n    return Math.sin(Math.PI / 2 * t);\\n  },\\n  ease_io_sin: function(t) {\\n    return (1 + Math.sin(Math.PI * t - Math.PI / 2)) / 2;\\n  },\\n  ease_i_elastic: function(t) {\\n    return (0.04 - 0.04 / t) * Math.sin(25 * t) + 1;\\n  },\\n  ease_o_elastic: function(t) {\\n    return 0.04 * t / --t * Math.sin(25 * t);\\n  },\\n  ease_io_elastic: function(t) {\\n    return (t -= 0.5) < 0 ? (0.02 + 0.01 / t) * Math.sin(50 * t) : (0.02 - 0.01 / t) * Math.sin(50 * t) + 1;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/math/_Module.ts\\nvar RAD_DEG_RATIO = Math.PI / 180;\\nvar RAND_A = 12.9898;\\nvar RAND_B = 78.233;\\nvar RAND_C = 43758.5453;\\nvar CoreMath = class {\\n  static clamp(val, min, max) {\\n    if (val < min) {\\n      return min;\\n    } else if (val > max) {\\n      return max;\\n    } else {\\n      return val;\\n    }\\n  }\\n  static fit01(val, dest_min, dest_max) {\\n    return this.fit(val, 0, 1, dest_min, dest_max);\\n  }\\n  static fit(val, src_min, src_max, dest_min, dest_max) {\\n    const src_range = src_max - src_min;\\n    const dest_range = dest_max - dest_min;\\n    const r = (val - src_min) / src_range;\\n    return r * dest_range + dest_min;\\n  }\\n  static blend(num0, num1, blend) {\\n    return (1 - blend) * num0 + blend * num1;\\n  }\\n  static degrees_to_radians(degrees) {\\n    return degrees * RAD_DEG_RATIO;\\n  }\\n  static radians_to_degrees(radians) {\\n    return radians / RAD_DEG_RATIO;\\n  }\\n  static deg2rad(deg) {\\n    return this.degrees_to_radians(deg);\\n  }\\n  static rad2deg(rad) {\\n    return this.radians_to_degrees(rad);\\n  }\\n  static rand(number) {\\n    if (CoreType.isNumber(number)) {\\n      return this.randFloat(number);\\n    } else {\\n      return this.randVec2(number);\\n    }\\n  }\\n  static round(number, step_size) {\\n    const steps_count = number / step_size;\\n    const rounded_steps_count = number < 0 ? Math.ceil(steps_count) : Math.floor(steps_count);\\n    return rounded_steps_count * step_size;\\n  }\\n  static highest_even(number) {\\n    return 2 * Math.ceil(number * 0.5);\\n  }\\n  static randFloat(x, y = 136574) {\\n    this._vec.x = x;\\n    this._vec.y = y;\\n    return this.randVec2(this._vec);\\n  }\\n  static randVec2(uv) {\\n    const dt = uv.x * RAND_A + uv.y * RAND_B;\\n    const sn = dt % Math.PI;\\n    return this.fract(Math.sin(sn) * RAND_C);\\n  }\\n  static geodesic_distance(lnglat1, lnglat2) {\\n    var R = 6371e3;\\n    var d1 = this.deg2rad(lnglat1.lat);\\n    var d2 = this.deg2rad(lnglat2.lat);\\n    var ad1 = this.deg2rad(lnglat2.lat - lnglat1.lat);\\n    var ad2 = this.deg2rad(lnglat2.lng - lnglat1.lng);\\n    var a = Math.sin(ad1 / 2) * Math.sin(ad1 / 2) + Math.cos(d1) * Math.cos(d2) * Math.sin(ad2 / 2) * Math.sin(ad2 / 2);\\n    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\\n    var d = R * c;\\n    return d;\\n  }\\n  static expand_triangle(triangle, margin) {\\n    triangle.getMidpoint(this._triangle_mid);\\n    this._triangle_mid_to_corner.copy(triangle.a).sub(this._triangle_mid);\\n    this._triangle_mid_to_corner.normalize().multiplyScalar(margin);\\n    triangle.a.add(this._triangle_mid_to_corner);\\n    this._triangle_mid_to_corner.copy(triangle.b).sub(this._triangle_mid);\\n    this._triangle_mid_to_corner.normalize().multiplyScalar(margin);\\n    triangle.b.add(this._triangle_mid_to_corner);\\n    this._triangle_mid_to_corner.copy(triangle.c).sub(this._triangle_mid);\\n    this._triangle_mid_to_corner.normalize().multiplyScalar(margin);\\n    triangle.c.add(this._triangle_mid_to_corner);\\n  }\\n  static nearestPower2(num) {\\n    return Math.pow(2, Math.ceil(Math.log(num) / Math.log(2)));\\n  }\\n};\\nCoreMath.Easing = Easing;\\nCoreMath.fract = (number) => number - Math.floor(number);\\nCoreMath._vec = {x: 0, y: 136574};\\nCoreMath._triangle_mid = new Vector3();\\nCoreMath._triangle_mid_to_corner = new Vector3();\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Face.ts\\nvar CoreFace = class {\\n  constructor(_coreGeometry, _index) {\\n    this._coreGeometry = _coreGeometry;\\n    this._index = _index;\\n    this._geometry = this._coreGeometry.geometry();\\n  }\\n  index() {\\n    return this._index;\\n  }\\n  points() {\\n    return this._points = this._points || this._get_points();\\n  }\\n  applyMatrix4(matrix) {\\n    for (let point of this.points()) {\\n      point.applyMatrix4(matrix);\\n    }\\n  }\\n  _get_points() {\\n    const indexArray = this._geometry.index?.array || [];\\n    const start = this._index * 3;\\n    return [\\n      new CorePoint(this._coreGeometry, indexArray[start + 0]),\\n      new CorePoint(this._coreGeometry, indexArray[start + 1]),\\n      new CorePoint(this._coreGeometry, indexArray[start + 2])\\n    ];\\n  }\\n  positions() {\\n    return this._positions = this._positions || this._getPositions();\\n  }\\n  _getPositions() {\\n    const points2 = this.points();\\n    return [points2[0].position(), points2[1].position(), points2[2].position()];\\n  }\\n  triangle() {\\n    return this._triangle = this._triangle || this._get_triangle();\\n  }\\n  _get_triangle() {\\n    const positions = this.positions();\\n    return new Triangle(positions[0], positions[1], positions[2]);\\n  }\\n  deltas() {\\n    return this._deltas = this._deltas || this._getDeltas();\\n  }\\n  _getDeltas() {\\n    const positions = this.positions();\\n    return [positions[1].clone().sub(positions[0]), positions[2].clone().sub(positions[0])];\\n  }\\n  area() {\\n    return this.triangle().getArea();\\n  }\\n  center(target) {\\n    const positions = this.positions();\\n    target.x = (positions[0].x + positions[1].x + positions[2].x) / 3;\\n    target.y = (positions[0].y + positions[1].y + positions[2].y) / 3;\\n    target.z = (positions[0].z + positions[1].z + positions[2].z) / 3;\\n    return target;\\n  }\\n  randomPosition(seed) {\\n    let weights = [CoreMath.randFloat(seed), CoreMath.randFloat(seed * 6541)];\\n    if (weights[0] + weights[1] > 1) {\\n      weights[0] = 1 - weights[0];\\n      weights[1] = 1 - weights[1];\\n    }\\n    return this.positions()[0].clone().add(this.deltas()[0].clone().multiplyScalar(weights[0])).add(this.deltas()[1].clone().multiplyScalar(weights[1]));\\n  }\\n  attribValueAtPosition(attrib_name, position) {\\n    const barycentricCoordinates = new Vector3();\\n    this.triangle().getBarycoord(position, barycentricCoordinates);\\n    const weights = barycentricCoordinates.toArray();\\n    const attrib = this._geometry.attributes[attrib_name];\\n    const attribSize = attrib.itemSize;\\n    const pointValues = this.points().map((point) => point.attribValue(attrib_name));\\n    let newAttribValue;\\n    let sum;\\n    let index = 0;\\n    switch (attribSize) {\\n      case 1: {\\n        sum = 0;\\n        for (let pointValue of pointValues) {\\n          sum += pointValue * weights[index];\\n          index++;\\n        }\\n        newAttribValue = sum;\\n        break;\\n      }\\n      default: {\\n        for (let pointValue of pointValues) {\\n          const weightedValue = pointValue.multiplyScalar(weights[index]);\\n          if (sum) {\\n            sum.add(weightedValue);\\n          } else {\\n            sum = weightedValue;\\n          }\\n          index++;\\n        }\\n        newAttribValue = sum;\\n      }\\n    }\\n    return newAttribValue;\\n  }\\n  static interpolatedValue(geometry, face, intersectPoint, attrib) {\\n    const pointIndices = [face.a, face.b, face.c];\\n    const positionAttrib = geometry.getAttribute(\\\\\\\"position\\\\\\\");\\n    const positionAttribArray = positionAttrib.array;\\n    const pointPositions = pointIndices.map((point_index) => new Vector3(positionAttribArray[point_index * 3 + 0], positionAttribArray[point_index * 3 + 1], positionAttribArray[point_index * 3 + 2]));\\n    const attribSize = attrib.itemSize;\\n    const attribArray = attrib.array;\\n    let attribValues = [];\\n    switch (attribSize) {\\n      case 1:\\n        attribValues = pointIndices.map((point_index) => attribArray[point_index]);\\n        break;\\n      case 2:\\n        attribValues = pointIndices.map((point_index) => new Vector2(attribArray[point_index * 2 + 0], attribArray[point_index * 2 + 1]));\\n        break;\\n      case 3:\\n        attribValues = pointIndices.map((point_index) => new Vector3(attribArray[point_index * 3 + 0], attribArray[point_index * 3 + 1], attribArray[point_index * 3 + 2]));\\n        break;\\n    }\\n    const distToPoints = pointIndices.map((point_index, i) => intersectPoint.distanceTo(pointPositions[i]));\\n    const distanceTotal = ArrayUtils.sum([\\n      distToPoints[0] * distToPoints[1],\\n      distToPoints[0] * distToPoints[2],\\n      distToPoints[1] * distToPoints[2]\\n    ]);\\n    const weights = [\\n      distToPoints[1] * distToPoints[2] / distanceTotal,\\n      distToPoints[0] * distToPoints[2] / distanceTotal,\\n      distToPoints[0] * distToPoints[1] / distanceTotal\\n    ];\\n    let newAttribValue;\\n    switch (attribSize) {\\n      case 1:\\n        newAttribValue = ArrayUtils.sum(pointIndices.map((point_indx, i) => weights[i] * attribValues[i]));\\n        break;\\n      default:\\n        var values = pointIndices.map((point_index, i) => attribValues[i].multiplyScalar(weights[i]));\\n        newAttribValue = null;\\n        for (let value of values) {\\n          if (newAttribValue) {\\n            newAttribValue.add(value);\\n          } else {\\n            newAttribValue = value;\\n          }\\n        }\\n    }\\n    return newAttribValue;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/builders/_Base.ts\\nvar CoreGeometryBuilderBase = class {\\n  from_points(points2) {\\n    points2 = this._filter_points(points2);\\n    const geometry = new BufferGeometry();\\n    const core_geometry = new CoreGeometry(geometry);\\n    const first_point = points2[0];\\n    if (first_point != null) {\\n      const old_geometry = first_point.geometry();\\n      const old_core_geometry = first_point.coreGeometry();\\n      const new_index_by_old_index = {};\\n      for (let i = 0; i < points2.length; i++) {\\n        new_index_by_old_index[points2[i].index()] = i;\\n      }\\n      const indices = this._indices_from_points(new_index_by_old_index, old_geometry);\\n      if (indices) {\\n        geometry.setIndex(indices);\\n      }\\n      const {attributes} = old_geometry;\\n      for (let attribute_name of Object.keys(attributes)) {\\n        const attrib_values = old_core_geometry.userDataAttribs()[attribute_name];\\n        const is_attrib_indexed = attrib_values != null;\\n        if (is_attrib_indexed) {\\n          const new_values = ArrayUtils.uniq(points2.map((point) => point.indexedAttribValue(attribute_name)));\\n          const new_index_by_value = {};\\n          new_values.forEach((new_value, i) => new_index_by_value[new_value] = i);\\n          core_geometry.userDataAttribs()[attribute_name] = new_values;\\n          const new_attrib_indices = [];\\n          for (let point of points2) {\\n            const new_index = new_index_by_value[point.indexedAttribValue(attribute_name)];\\n            new_attrib_indices.push(new_index);\\n          }\\n          geometry.setAttribute(attribute_name, new Float32BufferAttribute(new_attrib_indices, 1));\\n        } else {\\n          const attrib_size = attributes[attribute_name].itemSize;\\n          const values = new Array(points2.length * attrib_size);\\n          switch (attrib_size) {\\n            case 1:\\n              for (let i = 0; i < points2.length; i++) {\\n                values[i] = points2[i].attribValue(attribute_name);\\n              }\\n              break;\\n            default:\\n              let value;\\n              for (let i = 0; i < points2.length; i++) {\\n                value = points2[i].attribValue(attribute_name);\\n                value.toArray(values, i * attrib_size);\\n              }\\n              break;\\n          }\\n          geometry.setAttribute(attribute_name, new Float32BufferAttribute(values, attrib_size));\\n        }\\n      }\\n    }\\n    return geometry;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/builders/Points.ts\\nvar CoreGeometryBuilderPoints = class extends CoreGeometryBuilderBase {\\n  _filter_points(points2) {\\n    return points2;\\n  }\\n  _indices_from_points(new_index_by_old_index, old_geometry) {\\n    const index_attrib = old_geometry.index;\\n    if (index_attrib != null) {\\n      const old_indices = index_attrib.array;\\n      const new_indices = [];\\n      let old_index;\\n      let new_index;\\n      for (let i = 0; i < old_indices.length; i++) {\\n        old_index = old_indices[i];\\n        new_index = new_index_by_old_index[old_index];\\n        if (new_index != null) {\\n          new_indices.push(new_index);\\n        }\\n      }\\n      return new_indices;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/modules/three/examples/jsm/utils/BufferGeometryUtils.js\\nfunction mergeBufferGeometries(geometries, useGroups = false) {\\n  const isIndexed = geometries[0].index !== null;\\n  const attributesUsed = new Set(Object.keys(geometries[0].attributes));\\n  const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));\\n  const attributes = {};\\n  const morphAttributes = {};\\n  const morphTargetsRelative = geometries[0].morphTargetsRelative;\\n  const mergedGeometry = new BufferGeometry();\\n  let offset = 0;\\n  for (let i = 0; i < geometries.length; ++i) {\\n    const geometry = geometries[i];\\n    let attributesCount = 0;\\n    if (isIndexed !== (geometry.index !== null)) {\\n      console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\" + i + \\\\\\\". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.\\\\\\\");\\n      return null;\\n    }\\n    for (const name in geometry.attributes) {\\n      if (!attributesUsed.has(name)) {\\n        console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\" + i + '. All geometries must have compatible attributes; make sure \\\\\\\"' + name + '\\\\\\\" attribute exists among all geometries, or in none of them.');\\n        return null;\\n      }\\n      if (attributes[name] === void 0)\\n        attributes[name] = [];\\n      attributes[name].push(geometry.attributes[name]);\\n      attributesCount++;\\n    }\\n    if (attributesCount !== attributesUsed.size) {\\n      console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\" + i + \\\\\\\". Make sure all geometries have the same number of attributes.\\\\\\\");\\n      return null;\\n    }\\n    if (morphTargetsRelative !== geometry.morphTargetsRelative) {\\n      console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\" + i + \\\\\\\". .morphTargetsRelative must be consistent throughout all geometries.\\\\\\\");\\n      return null;\\n    }\\n    for (const name in geometry.morphAttributes) {\\n      if (!morphAttributesUsed.has(name)) {\\n        console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\" + i + \\\\\\\".  .morphAttributes must be consistent throughout all geometries.\\\\\\\");\\n        return null;\\n      }\\n      if (morphAttributes[name] === void 0)\\n        morphAttributes[name] = [];\\n      morphAttributes[name].push(geometry.morphAttributes[name]);\\n    }\\n    mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];\\n    mergedGeometry.userData.mergedUserData.push(geometry.userData);\\n    if (useGroups) {\\n      let count;\\n      if (isIndexed) {\\n        count = geometry.index.count;\\n      } else if (geometry.attributes.position !== void 0) {\\n        count = geometry.attributes.position.count;\\n      } else {\\n        console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\" + i + \\\\\\\". The geometry must have either an index or a position attribute\\\\\\\");\\n        return null;\\n      }\\n      mergedGeometry.addGroup(offset, count, i);\\n      offset += count;\\n    }\\n  }\\n  if (isIndexed) {\\n    let indexOffset = 0;\\n    const mergedIndex = [];\\n    for (let i = 0; i < geometries.length; ++i) {\\n      const index = geometries[i].index;\\n      for (let j = 0; j < index.count; ++j) {\\n        mergedIndex.push(index.getX(j) + indexOffset);\\n      }\\n      indexOffset += geometries[i].attributes.position.count;\\n    }\\n    mergedGeometry.setIndex(mergedIndex);\\n  }\\n  for (const name in attributes) {\\n    const mergedAttribute = mergeBufferAttributes(attributes[name]);\\n    if (!mergedAttribute) {\\n      console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \\\\\\\" + name + \\\\\\\" attribute.\\\\\\\");\\n      return null;\\n    }\\n    mergedGeometry.setAttribute(name, mergedAttribute);\\n  }\\n  for (const name in morphAttributes) {\\n    const numMorphTargets = morphAttributes[name][0].length;\\n    if (numMorphTargets === 0)\\n      break;\\n    mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\\n    mergedGeometry.morphAttributes[name] = [];\\n    for (let i = 0; i < numMorphTargets; ++i) {\\n      const morphAttributesToMerge = [];\\n      for (let j = 0; j < morphAttributes[name].length; ++j) {\\n        morphAttributesToMerge.push(morphAttributes[name][j][i]);\\n      }\\n      const mergedMorphAttribute = mergeBufferAttributes(morphAttributesToMerge);\\n      if (!mergedMorphAttribute) {\\n        console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \\\\\\\" + name + \\\\\\\" morphAttribute.\\\\\\\");\\n        return null;\\n      }\\n      mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\\n    }\\n  }\\n  return mergedGeometry;\\n}\\nfunction mergeBufferAttributes(attributes) {\\n  let TypedArray;\\n  let itemSize;\\n  let normalized;\\n  let arrayLength = 0;\\n  for (let i = 0; i < attributes.length; ++i) {\\n    const attribute = attributes[i];\\n    if (attribute.isInterleavedBufferAttribute) {\\n      console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.\\\\\\\");\\n      return null;\\n    }\\n    if (TypedArray === void 0)\\n      TypedArray = attribute.array.constructor;\\n    if (TypedArray !== attribute.array.constructor) {\\n      console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.\\\\\\\");\\n      return null;\\n    }\\n    if (itemSize === void 0)\\n      itemSize = attribute.itemSize;\\n    if (itemSize !== attribute.itemSize) {\\n      console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.\\\\\\\");\\n      return null;\\n    }\\n    if (normalized === void 0)\\n      normalized = attribute.normalized;\\n    if (normalized !== attribute.normalized) {\\n      console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.\\\\\\\");\\n      return null;\\n    }\\n    arrayLength += attribute.array.length;\\n  }\\n  const array = new TypedArray(arrayLength);\\n  let offset = 0;\\n  for (let i = 0; i < attributes.length; ++i) {\\n    array.set(attributes[i].array, offset);\\n    offset += attributes[i].array.length;\\n  }\\n  return new BufferAttribute(array, itemSize, normalized);\\n}\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/util/IndexBuilder.ts\\nvar POSITION = \\\\\\\"position\\\\\\\";\\nvar CoreGeometryIndexBuilder = class {\\n  static createIndexIfNone(geometry) {\\n    if (!geometry.index) {\\n      const position = geometry.getAttribute(POSITION);\\n      if (position) {\\n        const position_array = position.array;\\n        geometry.setIndex(ArrayUtils.range(position_array.length / 3));\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/builders/Merge.ts\\nvar CoreGeometryBuilderMerge = class {\\n  static merge(geometries) {\\n    if (geometries.length === 0) {\\n      return;\\n    }\\n    for (let geometry of geometries) {\\n      CoreGeometryIndexBuilder.createIndexIfNone(geometry);\\n    }\\n    const core_geometries = geometries.map((geometry) => new CoreGeometry(geometry));\\n    const indexed_attribute_names = core_geometries[0].indexedAttributeNames();\\n    const new_values_by_attribute_name = {};\\n    for (let indexed_attribute_name of indexed_attribute_names) {\\n      const index_by_values = {};\\n      const all_geometries_points = [];\\n      for (let core_geometry of core_geometries) {\\n        const geometry_points = core_geometry.points();\\n        for (let point of geometry_points) {\\n          all_geometries_points.push(point);\\n          const value = point.indexedAttribValue(indexed_attribute_name);\\n          index_by_values[value] != null ? index_by_values[value] : index_by_values[value] = Object.keys(index_by_values).length;\\n        }\\n      }\\n      const values = Object.keys(index_by_values);\\n      for (let point of all_geometries_points) {\\n        const value = point.indexedAttribValue(indexed_attribute_name);\\n        const new_index = index_by_values[value];\\n        point.setAttribIndex(indexed_attribute_name, new_index);\\n      }\\n      new_values_by_attribute_name[indexed_attribute_name] = values;\\n    }\\n    const merged_geometry = mergeBufferGeometries(geometries);\\n    const merged_core_geometry = new CoreGeometry(merged_geometry);\\n    Object.keys(new_values_by_attribute_name).forEach((indexed_attribute_name) => {\\n      const values = new_values_by_attribute_name[indexed_attribute_name];\\n      merged_core_geometry.setIndexedAttributeValues(indexed_attribute_name, values);\\n    });\\n    if (merged_geometry) {\\n      delete merged_geometry.userData.mergedUserData;\\n    }\\n    return merged_geometry;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/builders/Mesh.ts\\nvar CoreGeometryBuilderMesh = class extends CoreGeometryBuilderBase {\\n  _filter_points(points2) {\\n    const first_point = points2[0];\\n    if (first_point) {\\n      const geometry = first_point.geometry();\\n      const indices = geometry.getIndex()?.array;\\n      if (indices) {\\n        const points_by_index = {};\\n        for (let point of points2) {\\n          points_by_index[point.index()] = point;\\n        }\\n        const filtered_points = [];\\n        const index_length = indices.length;\\n        let pt0;\\n        let pt1;\\n        let pt2;\\n        for (let i = 0; i < index_length; i += 3) {\\n          pt0 = points_by_index[indices[i + 0]];\\n          pt1 = points_by_index[indices[i + 1]];\\n          pt2 = points_by_index[indices[i + 2]];\\n          if (pt0 && pt1 && pt2) {\\n            filtered_points.push(pt0);\\n            filtered_points.push(pt1);\\n            filtered_points.push(pt2);\\n          }\\n        }\\n        return filtered_points;\\n      }\\n    }\\n    return [];\\n  }\\n  _indices_from_points(new_index_by_old_index, old_geometry) {\\n    const index_attrib = old_geometry.index;\\n    if (index_attrib != null) {\\n      const old_indices = index_attrib.array;\\n      const new_indices = [];\\n      let old_index0;\\n      let old_index1;\\n      let old_index2;\\n      let new_index0;\\n      let new_index1;\\n      let new_index2;\\n      for (let i = 0; i < old_indices.length; i += 3) {\\n        old_index0 = old_indices[i + 0];\\n        old_index1 = old_indices[i + 1];\\n        old_index2 = old_indices[i + 2];\\n        new_index0 = new_index_by_old_index[old_index0];\\n        new_index1 = new_index_by_old_index[old_index1];\\n        new_index2 = new_index_by_old_index[old_index2];\\n        if (new_index0 != null && new_index1 != null && new_index2 != null) {\\n          new_indices.push(new_index0);\\n          new_indices.push(new_index1);\\n          new_indices.push(new_index2);\\n        }\\n      }\\n      return new_indices;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/builders/LineSegments.ts\\nvar CoreGeometryBuilderLineSegments = class extends CoreGeometryBuilderBase {\\n  _filter_points(points2) {\\n    const first_point = points2[0];\\n    if (first_point) {\\n      const geometry = first_point.geometry();\\n      const indices = geometry.getIndex()?.array;\\n      if (indices) {\\n        const points_by_index = {};\\n        for (let point of points2) {\\n          points_by_index[point.index()] = point;\\n        }\\n        const filtered_points = [];\\n        const index_length = indices.length;\\n        let pt0;\\n        let pt1;\\n        for (let i = 0; i < index_length; i += 2) {\\n          pt0 = points_by_index[indices[i + 0]];\\n          pt1 = points_by_index[indices[i + 1]];\\n          if (pt0 && pt1) {\\n            filtered_points.push(pt0);\\n            filtered_points.push(pt1);\\n          }\\n        }\\n        return filtered_points;\\n      }\\n    }\\n    return [];\\n  }\\n  _indices_from_points(new_index_by_old_index, old_geometry) {\\n    const index_attrib = old_geometry.index;\\n    if (index_attrib != null) {\\n      const old_indices = index_attrib.array;\\n      const new_indices = [];\\n      let old_index0;\\n      let old_index1;\\n      let new_index0;\\n      let new_index1;\\n      for (let i = 0; i < old_indices.length; i += 2) {\\n        old_index0 = old_indices[i];\\n        old_index1 = old_indices[i + 1];\\n        new_index0 = new_index_by_old_index[old_index0];\\n        new_index1 = new_index_by_old_index[old_index1];\\n        if (new_index0 != null && new_index1 != null) {\\n          new_indices.push(new_index0);\\n          new_indices.push(new_index1);\\n        }\\n      }\\n      return new_indices;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/ObjectUtils.ts\\nvar import_cloneDeep = __toModule(require_cloneDeep());\\nvar import_clone = __toModule(require_clone());\\nvar ObjectUtils = class {\\n  static isEqual(object0, object1) {\\n    if (CoreType.isObject(object0) && CoreType.isObject(object1)) {\\n      const keys0 = Object.keys(object0);\\n      const keys1 = Object.keys(object1);\\n      if (!ArrayUtils.isEqual(keys0, keys1)) {\\n        return false;\\n      }\\n      return JSON.stringify(object0) == JSON.stringify(object1);\\n    }\\n    return false;\\n  }\\n  static merge(object0, object1) {\\n    return Object.assign(object0, object1);\\n  }\\n  static clone(value) {\\n    return import_clone.default(value);\\n  }\\n  static cloneDeep(value) {\\n    return import_cloneDeep.default(value);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Geometry.ts\\nvar IS_INSTANCE_KEY = \\\\\\\"isInstance\\\\\\\";\\nvar INDEX_ATTRIB_VALUES = \\\\\\\"indexed_attrib_values\\\\\\\";\\nvar CoreGeometry2 = class {\\n  constructor(_geometry) {\\n    this._geometry = _geometry;\\n  }\\n  geometry() {\\n    return this._geometry;\\n  }\\n  uuid() {\\n    return this._geometry.uuid;\\n  }\\n  boundingBox() {\\n    return this._bounding_box = this._bounding_box || this._create_bounding_box();\\n  }\\n  _create_bounding_box() {\\n    this._geometry.computeBoundingBox();\\n    if (this._geometry.boundingBox) {\\n      return this._geometry.boundingBox;\\n    }\\n  }\\n  markAsInstance() {\\n    this._geometry.userData[IS_INSTANCE_KEY] = true;\\n  }\\n  static markedAsInstance(geometry) {\\n    return geometry.userData[IS_INSTANCE_KEY] === true;\\n  }\\n  markedAsInstance() {\\n    return CoreGeometry2.markedAsInstance(this._geometry);\\n  }\\n  positionAttribName() {\\n    let name = \\\\\\\"position\\\\\\\";\\n    if (this.markedAsInstance()) {\\n      name = \\\\\\\"instancePosition\\\\\\\";\\n    }\\n    return name;\\n  }\\n  computeVertexNormals() {\\n    this._geometry.computeVertexNormals();\\n  }\\n  userDataAttribs() {\\n    return this._geometry.userData[INDEX_ATTRIB_VALUES] = this._geometry.userData[INDEX_ATTRIB_VALUES] || {};\\n  }\\n  indexedAttributeNames() {\\n    return Object.keys(this.userDataAttribs() || {});\\n  }\\n  userDataAttrib(name) {\\n    name = CoreAttribute.remapName(name);\\n    return this.userDataAttribs()[name];\\n  }\\n  isAttribIndexed(name) {\\n    name = CoreAttribute.remapName(name);\\n    return this.userDataAttrib(name) != null;\\n  }\\n  hasAttrib(name) {\\n    if (name === \\\\\\\"ptnum\\\\\\\") {\\n      return true;\\n    }\\n    name = CoreAttribute.remapName(name);\\n    return this._geometry.attributes[name] != null;\\n  }\\n  attribType(name) {\\n    if (this.isAttribIndexed(name)) {\\n      return AttribType.STRING;\\n    } else {\\n      return AttribType.NUMERIC;\\n    }\\n  }\\n  static attribNames(geometry) {\\n    return Object.keys(geometry.attributes);\\n  }\\n  attribNames() {\\n    return CoreGeometry2.attribNames(this._geometry);\\n  }\\n  static attribNamesMatchingMask(geometry, masks_string) {\\n    const masks = CoreString.attribNames(masks_string);\\n    const matching_attrib_names = [];\\n    for (let attrib_name of this.attribNames(geometry)) {\\n      for (let mask of masks) {\\n        if (CoreString.matchMask(attrib_name, mask)) {\\n          matching_attrib_names.push(attrib_name);\\n        }\\n      }\\n    }\\n    return ArrayUtils.uniq(matching_attrib_names);\\n  }\\n  attribSizes() {\\n    const h = {};\\n    for (let attrib_name of this.attribNames()) {\\n      h[attrib_name] = this._geometry.attributes[attrib_name].itemSize;\\n    }\\n    return h;\\n  }\\n  attribSize(name) {\\n    let attrib;\\n    name = CoreAttribute.remapName(name);\\n    if ((attrib = this._geometry.attributes[name]) != null) {\\n      return attrib.itemSize;\\n    } else {\\n      if (name === \\\\\\\"ptnum\\\\\\\") {\\n        return 1;\\n      } else {\\n        return 0;\\n      }\\n    }\\n  }\\n  setIndexedAttributeValues(name, values) {\\n    this.userDataAttribs()[name] = values;\\n  }\\n  setIndexedAttribute(name, values, indices) {\\n    this.setIndexedAttributeValues(name, values);\\n    this._geometry.setAttribute(name, new Int32BufferAttribute(indices, 1));\\n  }\\n  addNumericAttrib(name, size = 1, default_value = 0) {\\n    const values = [];\\n    let attribute_added = false;\\n    if (CoreType.isNumber(default_value)) {\\n      for (let i = 0; i < this.pointsCount(); i++) {\\n        for (let j = 0; j < size; j++) {\\n          values.push(default_value);\\n        }\\n      }\\n      attribute_added = true;\\n    } else {\\n      if (size > 1) {\\n        if (CoreType.isArray(default_value)) {\\n          for (let i = 0; i < this.pointsCount(); i++) {\\n            for (let j = 0; j < size; j++) {\\n              values.push(default_value[j]);\\n            }\\n          }\\n          attribute_added = true;\\n        } else {\\n          const vec2 = default_value;\\n          if (size == 2 && vec2.x != null && vec2.y != null) {\\n            for (let i = 0; i < this.pointsCount(); i++) {\\n              values.push(vec2.x);\\n              values.push(vec2.y);\\n            }\\n            attribute_added = true;\\n          }\\n          const vec3 = default_value;\\n          if (size == 3 && vec3.x != null && vec3.y != null && vec3.z != null) {\\n            for (let i = 0; i < this.pointsCount(); i++) {\\n              values.push(vec3.x);\\n              values.push(vec3.y);\\n              values.push(vec3.z);\\n            }\\n            attribute_added = true;\\n          }\\n          const col = default_value;\\n          if (size == 3 && col.r != null && col.g != null && col.b != null) {\\n            for (let i = 0; i < this.pointsCount(); i++) {\\n              values.push(col.r);\\n              values.push(col.g);\\n              values.push(col.b);\\n            }\\n            attribute_added = true;\\n          }\\n          const vec4 = default_value;\\n          if (size == 4 && vec4.x != null && vec4.y != null && vec4.z != null && vec4.w != null) {\\n            for (let i = 0; i < this.pointsCount(); i++) {\\n              values.push(vec4.x);\\n              values.push(vec4.y);\\n              values.push(vec4.z);\\n              values.push(vec4.w);\\n            }\\n            attribute_added = true;\\n          }\\n        }\\n      }\\n    }\\n    if (attribute_added) {\\n      this._geometry.setAttribute(name.trim(), new Float32BufferAttribute(values, size));\\n    } else {\\n      console.warn(default_value);\\n      throw `CoreGeometry.add_numeric_attrib error: no other default value allowed for now in add_numeric_attrib (default given: ${default_value})`;\\n    }\\n  }\\n  initPositionAttribute(points_count, default_value) {\\n    const values = [];\\n    if (default_value == null) {\\n      default_value = new Vector3();\\n    }\\n    for (let i = 0; i < points_count; i++) {\\n      values.push(default_value.x);\\n      values.push(default_value.y);\\n      values.push(default_value.z);\\n    }\\n    return this._geometry.setAttribute(\\\\\\\"position\\\\\\\", new Float32BufferAttribute(values, 3));\\n  }\\n  addAttribute(name, attrib_data) {\\n    switch (attrib_data.type()) {\\n      case AttribType.STRING:\\n        return console.log(\\\\\\\"TODO: to implement\\\\\\\");\\n      case AttribType.NUMERIC:\\n        return this.addNumericAttrib(name, attrib_data.size());\\n    }\\n  }\\n  renameAttrib(old_name, new_name) {\\n    if (this.isAttribIndexed(old_name)) {\\n      this.userDataAttribs()[new_name] = ObjectUtils.clone(this.userDataAttribs()[old_name]);\\n      delete this.userDataAttribs()[old_name];\\n    }\\n    const old_attrib = this._geometry.getAttribute(old_name);\\n    this._geometry.setAttribute(new_name.trim(), new Float32BufferAttribute(old_attrib.array, old_attrib.itemSize));\\n    return this._geometry.deleteAttribute(old_name);\\n  }\\n  deleteAttribute(name) {\\n    if (this.isAttribIndexed(name)) {\\n      delete this.userDataAttribs()[name];\\n    }\\n    return this._geometry.deleteAttribute(name);\\n  }\\n  clone() {\\n    return CoreGeometry2.clone(this._geometry);\\n  }\\n  static clone(src_geometry) {\\n    let src_userData;\\n    const new_geometry = src_geometry.clone();\\n    if ((src_userData = src_geometry.userData) != null) {\\n      new_geometry.userData = ObjectUtils.cloneDeep(src_userData);\\n    }\\n    return new_geometry;\\n  }\\n  pointsCount() {\\n    return CoreGeometry2.pointsCount(this._geometry);\\n  }\\n  static pointsCount(geometry) {\\n    let position;\\n    let count = 0;\\n    const core_geometry = new this(geometry);\\n    let position_attrib_name = \\\\\\\"position\\\\\\\";\\n    if (core_geometry.markedAsInstance()) {\\n      position_attrib_name = \\\\\\\"instancePosition\\\\\\\";\\n    }\\n    if ((position = geometry.getAttribute(position_attrib_name)) != null) {\\n      let array;\\n      if ((array = position.array) != null) {\\n        count = array.length / 3;\\n      }\\n    }\\n    return count;\\n  }\\n  points() {\\n    return this.pointsFromGeometry();\\n  }\\n  pointsFromGeometry() {\\n    const points2 = [];\\n    const positionAttrib = this._geometry.getAttribute(this.positionAttribName());\\n    if (positionAttrib != null) {\\n      const count = positionAttrib.array.length / 3;\\n      for (let i = 0; i < count; i++) {\\n        const point = new CorePoint(this, i);\\n        points2.push(point);\\n      }\\n    }\\n    return points2;\\n  }\\n  static geometryFromPoints(points2, object_type) {\\n    switch (object_type) {\\n      case ObjectType.MESH:\\n        return this._mesh_builder.from_points(points2);\\n      case ObjectType.POINTS:\\n        return this._points_builder.from_points(points2);\\n      case ObjectType.LINE_SEGMENTS:\\n        return this._lines_segment_builder.from_points(points2);\\n      case ObjectType.OBJECT3D:\\n        return null;\\n      case ObjectType.GROUP:\\n        return null;\\n      case ObjectType.LOD:\\n        return null;\\n    }\\n    TypeAssert.unreachable(object_type);\\n  }\\n  static mergeGeometries(geometries) {\\n    return CoreGeometryBuilderMerge.merge(geometries);\\n  }\\n  static merge_geometries(geometries) {\\n    return CoreGeometryBuilderMerge.merge(geometries);\\n  }\\n  segments() {\\n    const index = this.geometry().index?.array || [];\\n    return ArrayUtils.chunk(index, 2);\\n  }\\n  faces() {\\n    return this.facesFromGeometry();\\n  }\\n  facesFromGeometry() {\\n    const index_array = this.geometry().index?.array || [];\\n    const faces_count = index_array.length / 3;\\n    return ArrayUtils.range(faces_count).map((i) => new CoreFace(this, i));\\n  }\\n};\\nvar CoreGeometry = CoreGeometry2;\\nCoreGeometry._mesh_builder = new CoreGeometryBuilderMesh();\\nCoreGeometry._points_builder = new CoreGeometryBuilderPoints();\\nCoreGeometry._lines_segment_builder = new CoreGeometryBuilderLineSegments();\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Material.ts\\nvar CustomMaterialName;\\n(function(CustomMaterialName2) {\\n  CustomMaterialName2[\\\\\\\"customDistanceMaterial\\\\\\\"] = \\\\\\\"customDistanceMaterial\\\\\\\";\\n  CustomMaterialName2[\\\\\\\"customDepthMaterial\\\\\\\"] = \\\\\\\"customDepthMaterial\\\\\\\";\\n  CustomMaterialName2[\\\\\\\"customDepthDOFMaterial\\\\\\\"] = \\\\\\\"customDepthDOFMaterial\\\\\\\";\\n})(CustomMaterialName || (CustomMaterialName = {}));\\nvar RENDER_HOOK_USER_DATA_KEY = \\\\\\\"POLY_render_hook\\\\\\\";\\nvar EMPTY_RENDER_HOOK = (renderer, scene, camera, geometry, material, group) => {\\n};\\nvar CoreMaterial = class {\\n  static node(scene, material) {\\n    return scene.node(material.name);\\n  }\\n  static clone(src_material) {\\n    const cloned_material = src_material.clone();\\n    const src_uniforms = src_material.uniforms;\\n    if (src_uniforms) {\\n      cloned_material.uniforms = UniformsUtils.clone(src_uniforms);\\n    }\\n    return cloned_material;\\n  }\\n  static add_user_data_render_hook(material, render_hook) {\\n    material.userData[RENDER_HOOK_USER_DATA_KEY] = render_hook;\\n  }\\n  static apply_render_hook(object, material) {\\n    if (material.userData) {\\n      const render_hook = material.userData[RENDER_HOOK_USER_DATA_KEY];\\n      if (render_hook) {\\n        object.onBeforeRender = (renderer, scene, camera, geometry, material2, group) => {\\n          render_hook(renderer, scene, camera, geometry, material2, group, object);\\n        };\\n        return;\\n      }\\n    }\\n    object.onBeforeRender = EMPTY_RENDER_HOOK;\\n  }\\n  static applyCustomMaterials(object, material) {\\n    const material_with_custom = material;\\n    if (material_with_custom.customMaterials) {\\n      for (let name of Object.keys(material_with_custom.customMaterials)) {\\n        const mat_name = name;\\n        const custom_material = material_with_custom.customMaterials[mat_name];\\n        if (custom_material) {\\n          object[mat_name] = custom_material;\\n          custom_material.needsUpdate = true;\\n        }\\n      }\\n    }\\n  }\\n  static assign_custom_uniforms(mat, uniform_name, uniform_value) {\\n    const material = mat;\\n    if (material.customMaterials) {\\n      for (let name of Object.keys(material.customMaterials)) {\\n        const mat_name = name;\\n        const custom_material = material.customMaterials[mat_name];\\n        if (custom_material) {\\n          custom_material.uniforms[uniform_name].value = uniform_value;\\n        }\\n      }\\n    }\\n  }\\n  static init_custom_material_uniforms(mat, uniform_name, uniform_value) {\\n    const material = mat;\\n    if (material.customMaterials) {\\n      for (let name of Object.keys(material.customMaterials)) {\\n        const mat_name = name;\\n        const custom_material = material.customMaterials[mat_name];\\n        if (custom_material) {\\n          custom_material.uniforms[uniform_name] = custom_material.uniforms[uniform_name] || uniform_value;\\n        }\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Object.ts\\nvar PTNUM2 = \\\\\\\"ptnum\\\\\\\";\\nvar NAME_ATTR = \\\\\\\"name\\\\\\\";\\nvar ATTRIBUTES = \\\\\\\"attributes\\\\\\\";\\nvar CoreObject = class extends CoreEntity {\\n  constructor(_object, index) {\\n    super(index);\\n    this._object = _object;\\n    if (this._object.userData[ATTRIBUTES] == null) {\\n      this._object.userData[ATTRIBUTES] = {};\\n    }\\n  }\\n  object() {\\n    return this._object;\\n  }\\n  geometry() {\\n    return this._object.geometry;\\n  }\\n  coreGeometry() {\\n    const geo = this.geometry();\\n    if (geo) {\\n      return new CoreGeometry(geo);\\n    } else {\\n      return null;\\n    }\\n  }\\n  points() {\\n    return this.coreGeometry()?.points() || [];\\n  }\\n  pointsFromGroup(group) {\\n    if (group) {\\n      const indices = CoreString.indices(group);\\n      if (indices) {\\n        const points2 = this.points();\\n        return indices.map((i) => points2[i]);\\n      } else {\\n        return [];\\n      }\\n    } else {\\n      return this.points();\\n    }\\n  }\\n  static isInGroup(groupString, object) {\\n    const group = groupString.trim();\\n    if (group.length == 0) {\\n      return true;\\n    }\\n    const elements = group.split(\\\\\\\"=\\\\\\\");\\n    const attribNameWithPrefix = elements[0];\\n    if (attribNameWithPrefix[0] == \\\\\\\"@\\\\\\\") {\\n      const attribName = attribNameWithPrefix.substr(1);\\n      const expectedAttribValue = elements[1];\\n      const currentAttribValue = this.attribValue(object, attribName);\\n      return expectedAttribValue == currentAttribValue;\\n    }\\n    return false;\\n  }\\n  computeVertexNormals() {\\n    this.coreGeometry()?.computeVertexNormals();\\n  }\\n  static _convert_array_to_vector(value) {\\n    switch (value.length) {\\n      case 1:\\n        return value[0];\\n      case 2:\\n        return new Vector2(value[0], value[1]);\\n      case 3:\\n        return new Vector3(value[0], value[1], value[2]);\\n      case 4:\\n        return new Vector4(value[0], value[1], value[2], value[3]);\\n    }\\n  }\\n  static addAttribute(object, attrib_name, value) {\\n    if (CoreType.isArray(value)) {\\n      const converted_value = this._convert_array_to_vector(value);\\n      if (!converted_value) {\\n        const message = `attribute_value invalid`;\\n        console.error(message, value);\\n        throw new Error(message);\\n      }\\n    }\\n    const data = value;\\n    const user_data = object.userData;\\n    user_data[ATTRIBUTES] = user_data[ATTRIBUTES] || {};\\n    user_data[ATTRIBUTES][attrib_name] = data;\\n  }\\n  addAttribute(name, value) {\\n    CoreObject.addAttribute(this._object, name, value);\\n  }\\n  addNumericAttrib(name, value) {\\n    this.addAttribute(name, value);\\n  }\\n  setAttribValue(name, value) {\\n    this.addAttribute(name, value);\\n  }\\n  addNumericVertexAttrib(name, size, default_value) {\\n    if (default_value == null) {\\n      default_value = CoreAttribute.default_value(size);\\n    }\\n    this.coreGeometry()?.addNumericAttrib(name, size, default_value);\\n  }\\n  attributeNames() {\\n    return Object.keys(this._object.userData[ATTRIBUTES]);\\n  }\\n  attribNames() {\\n    return this.attributeNames();\\n  }\\n  hasAttrib(name) {\\n    return this.attributeNames().includes(name);\\n  }\\n  renameAttrib(old_name, new_name) {\\n    const current_value = this.attribValue(old_name);\\n    if (current_value != null) {\\n      this.addAttribute(new_name, current_value);\\n      this.deleteAttribute(old_name);\\n    } else {\\n      console.warn(`attribute ${old_name} not found`);\\n    }\\n  }\\n  deleteAttribute(name) {\\n    delete this._object.userData[ATTRIBUTES][name];\\n  }\\n  static attribValue(object, name, index = 0, target) {\\n    if (name === PTNUM2) {\\n      return index;\\n    }\\n    if (object.userData && object.userData[ATTRIBUTES]) {\\n      const val = object.userData[ATTRIBUTES][name];\\n      if (val == null) {\\n        if (name == NAME_ATTR) {\\n          return object.name;\\n        }\\n      } else {\\n        if (CoreType.isArray(val) && target) {\\n          target.fromArray(val);\\n          return target;\\n        }\\n      }\\n      return val;\\n    }\\n    if (name == NAME_ATTR) {\\n      return object.name;\\n    }\\n  }\\n  static stringAttribValue(object, name, index = 0) {\\n    const str = this.attribValue(object, name, index);\\n    if (str != null) {\\n      if (CoreType.isString(str)) {\\n        return str;\\n      } else {\\n        return `${str}`;\\n      }\\n    }\\n  }\\n  attribValue(name, target) {\\n    return CoreObject.attribValue(this._object, name, this._index, target);\\n  }\\n  stringAttribValue(name) {\\n    return CoreObject.stringAttribValue(this._object, name, this._index);\\n  }\\n  name() {\\n    return this.attribValue(NAME_ATTR);\\n  }\\n  humanType() {\\n    return CoreConstant.CONSTRUCTOR_NAMES_BY_CONSTRUCTOR_NAME[this._object.constructor.name];\\n  }\\n  attribTypes() {\\n    const h = {};\\n    for (let attrib_name of this.attribNames()) {\\n      const type = this.attribType(attrib_name);\\n      if (type != null) {\\n        h[attrib_name] = type;\\n      }\\n    }\\n    return h;\\n  }\\n  attribType(name) {\\n    const val = this.attribValue(name);\\n    if (CoreType.isString(val)) {\\n      return AttribType.STRING;\\n    } else {\\n      return AttribType.NUMERIC;\\n    }\\n  }\\n  attribSizes() {\\n    const h = {};\\n    for (let attrib_name of this.attribNames()) {\\n      const size = this.attribSize(attrib_name);\\n      if (size != null) {\\n        h[attrib_name] = size;\\n      }\\n    }\\n    return h;\\n  }\\n  attribSize(name) {\\n    const val = this.attribValue(name);\\n    if (val == null) {\\n      return null;\\n    }\\n    return CoreAttribute.attribSizeFromValue(val);\\n  }\\n  clone() {\\n    return CoreObject.clone(this._object);\\n  }\\n  static clone(src_object) {\\n    const new_object = src_object.clone();\\n    var sourceLookup = new Map();\\n    var cloneLookup = new Map();\\n    CoreObject.parallelTraverse(src_object, new_object, function(sourceNode, clonedNode) {\\n      sourceLookup.set(clonedNode, sourceNode);\\n      cloneLookup.set(sourceNode, clonedNode);\\n    });\\n    new_object.traverse(function(node) {\\n      const src_node = sourceLookup.get(node);\\n      const mesh_node = node;\\n      if (mesh_node.geometry) {\\n        const src_node_geometry = src_node.geometry;\\n        mesh_node.geometry = CoreGeometry.clone(src_node_geometry);\\n        const mesh_node_geometry = mesh_node.geometry;\\n        if (mesh_node_geometry.userData) {\\n          mesh_node_geometry.userData = ObjectUtils.cloneDeep(src_node_geometry.userData);\\n        }\\n      }\\n      if (mesh_node.material) {\\n        mesh_node.material = src_node.material;\\n        CoreMaterial.applyCustomMaterials(node, mesh_node.material);\\n        const material_with_color = mesh_node.material;\\n        if (material_with_color.color == null) {\\n          material_with_color.color = new Color(1, 1, 1);\\n        }\\n      }\\n      if (src_object.userData) {\\n        node.userData = ObjectUtils.cloneDeep(src_node.userData);\\n      }\\n      const src_node_with_animations = src_node;\\n      if (src_node_with_animations.animations) {\\n        node.animations = src_node_with_animations.animations.map((animation) => animation.clone());\\n      }\\n      const skinned_node = node;\\n      if (skinned_node.isSkinnedMesh) {\\n        var clonedMesh = skinned_node;\\n        var sourceMesh = src_node;\\n        var sourceBones = sourceMesh.skeleton.bones;\\n        clonedMesh.skeleton = sourceMesh.skeleton.clone();\\n        clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix);\\n        const new_bones = sourceBones.map(function(bone) {\\n          return cloneLookup.get(bone);\\n        });\\n        clonedMesh.skeleton.bones = new_bones;\\n        clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix);\\n      }\\n    });\\n    return new_object;\\n  }\\n  static parallelTraverse(a, b, callback) {\\n    callback(a, b);\\n    for (var i = 0; i < a.children.length; i++) {\\n      this.parallelTraverse(a.children[i], b.children[i], callback);\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Geometry.ts\\nvar GeometryContainer = class extends TypedContainer {\\n  coreContentCloned() {\\n    if (this._content) {\\n      return this._content.clone();\\n    }\\n  }\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n  firstObject() {\\n    if (this._content) {\\n      return this._content.objects()[0];\\n    }\\n  }\\n  firstCoreObject() {\\n    const object = this.firstObject();\\n    if (object) {\\n      return new CoreObject(object, 0);\\n    }\\n  }\\n  firstGeometry() {\\n    const object = this.firstObject();\\n    if (object) {\\n      return object.geometry;\\n    } else {\\n      return null;\\n    }\\n  }\\n  objectsCount() {\\n    if (this._content) {\\n      return this._content.objects().length;\\n    } else {\\n      return 0;\\n    }\\n  }\\n  objectsVisibleCount() {\\n    let count = 0;\\n    if (this._content) {\\n      const objects = this._content.objects();\\n      for (let object of objects) {\\n        if (object.visible) {\\n          count++;\\n        }\\n      }\\n    }\\n    return count;\\n  }\\n  objectsCountByType() {\\n    const count_by_type = {};\\n    const core_group = this._content;\\n    if (this._content && core_group) {\\n      for (let core_object of core_group.coreObjects()) {\\n        const human_type = core_object.humanType();\\n        if (count_by_type[human_type] == null) {\\n          count_by_type[human_type] = 0;\\n        }\\n        count_by_type[human_type] += 1;\\n      }\\n    }\\n    return count_by_type;\\n  }\\n  objectsNamesByType() {\\n    const names_by_type = {};\\n    const core_group = this._content;\\n    if (this._content && core_group) {\\n      for (let core_object of core_group.coreObjects()) {\\n        const human_type = core_object.humanType();\\n        names_by_type[human_type] = names_by_type[human_type] || [];\\n        names_by_type[human_type].push(core_object.name());\\n      }\\n    }\\n    return names_by_type;\\n  }\\n  pointAttributeNames() {\\n    let names = [];\\n    const geometry = this.firstGeometry();\\n    if (geometry) {\\n      names = Object.keys(geometry.attributes);\\n    }\\n    return names;\\n  }\\n  pointAttributeSizesByName() {\\n    let sizes_by_name = {};\\n    const geometry = this.firstGeometry();\\n    if (geometry) {\\n      Object.keys(geometry.attributes).forEach((attrib_name) => {\\n        const attrib = geometry.attributes[attrib_name];\\n        sizes_by_name[attrib_name] = attrib.itemSize;\\n      });\\n    }\\n    return sizes_by_name;\\n  }\\n  objectAttributeSizesByName() {\\n    let sizes_by_name = {};\\n    const core_object = this.firstCoreObject();\\n    if (core_object) {\\n      const attribNames = core_object.attribNames();\\n      for (let name of attribNames) {\\n        const size = core_object.attribSize(name);\\n        if (size != null) {\\n          sizes_by_name[name] = size;\\n        }\\n      }\\n    }\\n    return sizes_by_name;\\n  }\\n  pointAttributeTypesByName() {\\n    let types_by_name = {};\\n    const geometry = this.firstGeometry();\\n    if (geometry) {\\n      const core_geo = new CoreGeometry(geometry);\\n      Object.keys(geometry.attributes).forEach((attrib_name) => {\\n        types_by_name[attrib_name] = core_geo.attribType(attrib_name);\\n      });\\n    }\\n    return types_by_name;\\n  }\\n  objectAttributeTypesByName() {\\n    let types_by_name = {};\\n    const core_object = this.firstCoreObject();\\n    if (core_object) {\\n      for (let name of core_object.attribNames()) {\\n        types_by_name[name] = core_object.attribType(name);\\n      }\\n    }\\n    return types_by_name;\\n  }\\n  objectAttributeNames() {\\n    let names = [];\\n    const object = this.firstObject();\\n    if (object) {\\n      names = Object.keys(object.userData[\\\\\\\"attributes\\\\\\\"] || {});\\n    }\\n    return names;\\n  }\\n  pointsCount() {\\n    if (this._content) {\\n      return this._content.pointsCount();\\n    } else {\\n      return 0;\\n    }\\n  }\\n  totalPointsCount() {\\n    if (this._content) {\\n      return this._content.totalPointsCount();\\n    } else {\\n      return 0;\\n    }\\n  }\\n  objectsData() {\\n    if (this._content) {\\n      return this._content.objectsData();\\n    } else {\\n      return [];\\n    }\\n  }\\n  boundingBox(forceUpdate = false) {\\n    return this._content.boundingBox(forceUpdate);\\n  }\\n  center() {\\n    return this._content.center();\\n  }\\n  size() {\\n    return this._content.size();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Gl.ts\\nvar GlContainer = class extends TypedContainer {\\n  object() {\\n    return this._content;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Js.ts\\nvar JsContainer = class extends TypedContainer {\\n  object() {\\n    return this._content;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Manager.ts\\nvar ManagerContainer = class extends TypedContainer {\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Material.ts\\nvar MaterialContainer = class extends TypedContainer {\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n  set_material(material) {\\n    if (this._content != null) {\\n      this._content.dispose();\\n    }\\n    this.set_content(material);\\n  }\\n  has_material() {\\n    return this.has_content();\\n  }\\n  material() {\\n    return this.content();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Object.ts\\nvar ObjectContainer = class extends TypedContainer {\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n  set_object(object) {\\n    return this.set_content(object);\\n  }\\n  has_object() {\\n    return this.has_content();\\n  }\\n  object() {\\n    return this.content();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Texture.ts\\nvar TextureContainer = class extends TypedContainer {\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n  texture() {\\n    return this._content;\\n  }\\n  coreContent() {\\n    return this._content;\\n  }\\n  coreContentCloned() {\\n    const texture = this._content?.clone();\\n    if (texture) {\\n      texture.needsUpdate = true;\\n    }\\n    return texture;\\n  }\\n  object() {\\n    return this.texture();\\n  }\\n  infos() {\\n    if (this._content != null) {\\n      return [this._content];\\n    }\\n  }\\n  resolution() {\\n    if (this._content) {\\n      const image = this._content.image;\\n      if (image) {\\n        if (image instanceof HTMLImageElement || image instanceof Image || image instanceof ImageData || image instanceof HTMLCanvasElement) {\\n          return [image.width, image.height];\\n        }\\n        if (image.data && image.width != null && image.height != null) {\\n          return [image.width, image.height];\\n        }\\n        const video = image;\\n        return [video.videoWidth, video.videoHeight];\\n      }\\n    }\\n    return [-1, -1];\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/PostProcess.ts\\nvar PostProcessContainer = class extends TypedContainer {\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n  render_pass() {\\n    return this._content;\\n  }\\n  object(options = {}) {\\n    return this.render_pass();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/Rop.ts\\nvar RopContainer = class extends TypedContainer {\\n  set_content(content) {\\n    super.set_content(content);\\n  }\\n  renderer() {\\n    return this._content;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/containers/utils/ContainerMap.ts\\nvar ContainerClassMap = {\\n  [NodeContext.ANIM]: AnimationContainer,\\n  [NodeContext.COP]: TextureContainer,\\n  [NodeContext.EVENT]: EventContainer,\\n  [NodeContext.GL]: GlContainer,\\n  [NodeContext.JS]: JsContainer,\\n  [NodeContext.MANAGER]: ManagerContainer,\\n  [NodeContext.MAT]: MaterialContainer,\\n  [NodeContext.OBJ]: ObjectContainer,\\n  [NodeContext.POST]: PostProcessContainer,\\n  [NodeContext.ROP]: RopContainer,\\n  [NodeContext.SOP]: GeometryContainer\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/ContainerController.ts\\nvar TypedContainerController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._callbacks = [];\\n    this._callbacks_tmp = [];\\n    const container_class = ContainerClassMap[node.context()];\\n    this._container = new container_class(this.node);\\n  }\\n  container() {\\n    return this._container;\\n  }\\n  async compute() {\\n    if (this.node.flags?.bypass?.active()) {\\n      const container = await this.requestInputContainer(0) || this._container;\\n      this.node.cookController.endCook();\\n      return container;\\n    }\\n    if (this.node.isDirty()) {\\n      return new Promise((resolve, reject) => {\\n        this._callbacks.push(resolve);\\n        this.node.cookController.cookMain();\\n      });\\n    }\\n    return this._container;\\n  }\\n  async requestInputContainer(input_index) {\\n    const inputNode = this.node.io.inputs.input(input_index);\\n    if (inputNode) {\\n      return await inputNode.compute();\\n    } else {\\n      this.node.states.error.set(`input ${input_index} required`);\\n      this.notifyRequesters();\\n      return null;\\n    }\\n  }\\n  notifyRequesters(container) {\\n    this._callbacks_tmp = this._callbacks.slice();\\n    this._callbacks.splice(0, this._callbacks.length);\\n    if (!container) {\\n      container = this.node.containerController.container();\\n    }\\n    let callback;\\n    while (callback = this._callbacks_tmp.pop()) {\\n      callback(container);\\n    }\\n    this.node.scene().cookController.removeNode(this.node);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/cook/PerformanceController.ts\\nvar performance = Poly.performance.performanceManager();\\nvar NodeCookPerformanceformanceController = class {\\n  constructor(cookController) {\\n    this.cookController = cookController;\\n    this._inputs_start = 0;\\n    this._params_start = 0;\\n    this._cook_start = 0;\\n    this._cooksCount = 0;\\n    this._data = {\\n      inputsTime: 0,\\n      paramsTime: 0,\\n      cookTime: 0\\n    };\\n  }\\n  cooksCount() {\\n    return this._cooksCount;\\n  }\\n  data2() {\\n    return this._data;\\n  }\\n  active() {\\n    return this.cookController.performanceRecordStarted();\\n  }\\n  recordInputsStart() {\\n    if (this.active()) {\\n      this._inputs_start = performance.now();\\n    }\\n  }\\n  recordInputsEnd() {\\n    if (this.active()) {\\n      this._data.inputsTime = performance.now() - this._inputs_start;\\n    }\\n  }\\n  recordParamsStart() {\\n    if (this.active()) {\\n      this._params_start = performance.now();\\n    }\\n  }\\n  recordParamsEnd() {\\n    if (this.active()) {\\n      this._data.paramsTime = performance.now() - this._params_start;\\n    }\\n  }\\n  recordCookStart() {\\n    if (this.active()) {\\n      this._cook_start = performance.now();\\n    }\\n  }\\n  recordCookEnd() {\\n    if (this.active()) {\\n      this._data.cookTime = performance.now() - this._cook_start;\\n      this._cooksCount += 1;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/CookController.ts\\nvar NodeCookController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._cooking = false;\\n    this._performanceController = new NodeCookPerformanceformanceController(this);\\n    this._inputs_evaluation_required = true;\\n    this._core_performance = this.node.scene().performance;\\n  }\\n  performanceRecordStarted() {\\n    return this._core_performance.started();\\n  }\\n  disallowInputsEvaluation() {\\n    this._inputs_evaluation_required = false;\\n  }\\n  isCooking() {\\n    return this._cooking === true;\\n  }\\n  _start_cook_if_no_errors(input_contents) {\\n    if (this.node.states.error.active()) {\\n      this.endCook();\\n    } else {\\n      try {\\n        this._performanceController.recordCookStart();\\n        this.node.cook(input_contents);\\n      } catch (e) {\\n        this.node.states.error.set(`node internal error: '${e}'.`);\\n        Poly.warn(e);\\n        this.endCook();\\n      }\\n    }\\n  }\\n  async cookMain() {\\n    if (this.isCooking()) {\\n      return;\\n    }\\n    this._initCookingState();\\n    this.node.states.error.clear();\\n    this.node.scene().cookController.addNode(this.node);\\n    let input_contents;\\n    if (this._inputs_evaluation_required) {\\n      input_contents = await this._evaluateInputs();\\n    } else {\\n      input_contents = [];\\n    }\\n    if (this.node.params.paramsEvalRequired()) {\\n      await this._evaluateParams();\\n    }\\n    this._start_cook_if_no_errors(input_contents);\\n  }\\n  async cookMainWithoutInputs() {\\n    this.node.scene().cookController.addNode(this.node);\\n    if (this.isCooking()) {\\n      Poly.warn(\\\\\\\"cook_main_without_inputs already cooking\\\\\\\", this.node.path());\\n      return;\\n    }\\n    this._initCookingState();\\n    this.node.states.error.clear();\\n    if (this.node.params.paramsEvalRequired()) {\\n      await this._evaluateParams();\\n    }\\n    this._start_cook_if_no_errors([]);\\n  }\\n  endCook(message) {\\n    this._finalizeCookPerformance();\\n    const dirty_timestamp = this.node.dirtyController.dirtyTimestamp();\\n    if (dirty_timestamp == null || dirty_timestamp === this._cooking_dirty_timestamp) {\\n      this.node.removeDirtyState();\\n      this._terminateCookProcess();\\n    } else {\\n      Poly.log(\\\\\\\"COOK AGAIN\\\\\\\", dirty_timestamp, this._cooking_dirty_timestamp, this.node.path());\\n      this._cooking = false;\\n      this.cookMain();\\n    }\\n  }\\n  _initCookingState() {\\n    this._cooking = true;\\n    this._cooking_dirty_timestamp = this.node.dirtyController.dirtyTimestamp();\\n  }\\n  _terminateCookProcess() {\\n    if (this.isCooking()) {\\n      this._cooking = false;\\n      this.node.containerController.notifyRequesters();\\n      this._run_on_cook_complete_hooks();\\n    }\\n  }\\n  async _evaluateInputs() {\\n    this._performanceController.recordInputsStart();\\n    let input_containers = [];\\n    const io_inputs = this.node.io.inputs;\\n    if (this._inputs_evaluation_required) {\\n      if (io_inputs.is_any_input_dirty()) {\\n        input_containers = await io_inputs.eval_required_inputs();\\n      } else {\\n        input_containers = await io_inputs.containers_without_evaluation();\\n      }\\n    }\\n    const inputs = io_inputs.inputs();\\n    const input_contents = [];\\n    let input_container;\\n    for (let i = 0; i < inputs.length; i++) {\\n      input_container = input_containers[i];\\n      if (input_container) {\\n        if (io_inputs.cloneRequired(i)) {\\n          input_contents[i] = input_container.coreContentCloned();\\n        } else {\\n          input_contents[i] = input_container.coreContent();\\n        }\\n      }\\n    }\\n    this._performanceController.recordInputsEnd();\\n    return input_contents;\\n  }\\n  async _evaluateParams() {\\n    this._performanceController.recordParamsStart();\\n    await this.node.params.evalAll();\\n    this._performanceController.recordParamsEnd();\\n  }\\n  cooksCount() {\\n    return this._performanceController.cooksCount();\\n  }\\n  cookTime() {\\n    return this._performanceController.data2().cookTime;\\n  }\\n  _finalizeCookPerformance() {\\n    if (!this._core_performance.started()) {\\n      return;\\n    }\\n    this._performanceController.recordCookEnd();\\n    this._core_performance.record_node_cook_data(this.node, this._performanceController.data2());\\n  }\\n  registerOnCookEnd(callbackName, callback) {\\n    this._on_cook_complete_hook_names = this._on_cook_complete_hook_names || [];\\n    this._on_cook_complete_hooks = this._on_cook_complete_hooks || [];\\n    this._on_cook_complete_hook_names.push(callbackName);\\n    this._on_cook_complete_hooks.push(callback);\\n  }\\n  deregisterOnCookEnd(callbackName) {\\n    if (!this._on_cook_complete_hook_names || !this._on_cook_complete_hooks) {\\n      return;\\n    }\\n    const index = this._on_cook_complete_hook_names?.indexOf(callbackName);\\n    this._on_cook_complete_hook_names.splice(index, 1);\\n    this._on_cook_complete_hooks.splice(index, 1);\\n  }\\n  _run_on_cook_complete_hooks() {\\n    if (this._on_cook_complete_hooks) {\\n      for (let hook of this._on_cook_complete_hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n  onCookEndCallbackNames() {\\n    return this._on_cook_complete_hook_names;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/Serializer.ts\\nvar NodeSerializer = class {\\n  constructor(node) {\\n    this.node = node;\\n  }\\n  toJSON(include_param_components = false) {\\n    const data = {\\n      name: this.node.name(),\\n      type: this.node.type(),\\n      graph_node_id: this.node.graphNodeId(),\\n      is_dirty: this.node.isDirty(),\\n      ui_data_json: this.node.uiData.toJSON(),\\n      error_message: this.node.states.error.message(),\\n      children: this.childrenIds(),\\n      maxInputsCount: this.maxInputsCount(),\\n      inputs: this.inputIds(),\\n      input_connection_output_indices: this.inputConnectionOutputIndices(),\\n      named_input_connection_points: this.namedInputConnectionPoints(),\\n      named_output_connection_points: this.namedOutputConnectionPoints(),\\n      param_ids: this.to_json_params(include_param_components),\\n      override_cloned_state_allowed: this.node.io.inputs.overrideClonedStateAllowed(),\\n      inputs_clone_required_states: this.node.io.inputs.cloneRequiredStates(),\\n      flags: {\\n        display: this.node.flags?.display?.active(),\\n        bypass: this.node.flags?.bypass?.active(),\\n        optimize: this.node.flags?.optimize?.active()\\n      },\\n      selection: void 0\\n    };\\n    if (this.node.childrenAllowed() && this.node.childrenController) {\\n      data[\\\\\\\"selection\\\\\\\"] = this.node.childrenController.selection.toJSON();\\n    }\\n    return data;\\n  }\\n  childrenIds() {\\n    return this.node.children().map((node) => node.graphNodeId());\\n  }\\n  maxInputsCount() {\\n    return this.node.io.inputs.maxInputsCount();\\n  }\\n  inputIds() {\\n    return this.node.io.inputs.inputs().map((node) => node != null ? node.graphNodeId() : void 0);\\n  }\\n  inputConnectionOutputIndices() {\\n    return this.node.io.connections.inputConnections()?.map((connection) => connection != null ? connection.output_index : void 0);\\n  }\\n  namedInputConnectionPoints() {\\n    return this.node.io.inputs.namedInputConnectionPoints().map((i) => i.toJSON());\\n  }\\n  namedOutputConnectionPoints() {\\n    return this.node.io.outputs.namedOutputConnectionPoints().map((o) => o.toJSON());\\n  }\\n  to_json_params_from_names(param_names, include_components = false) {\\n    return param_names.map((param_name) => {\\n      return this.node.params.get(param_name).graphNodeId();\\n    });\\n  }\\n  to_json_params(include_components = false) {\\n    return this.to_json_params_from_names(this.node.params.names, include_components);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/ParamType.ts\\nvar ParamType;\\n(function(ParamType2) {\\n  ParamType2[\\\\\\\"BOOLEAN\\\\\\\"] = \\\\\\\"boolean\\\\\\\";\\n  ParamType2[\\\\\\\"BUTTON\\\\\\\"] = \\\\\\\"button\\\\\\\";\\n  ParamType2[\\\\\\\"COLOR\\\\\\\"] = \\\\\\\"color\\\\\\\";\\n  ParamType2[\\\\\\\"FLOAT\\\\\\\"] = \\\\\\\"float\\\\\\\";\\n  ParamType2[\\\\\\\"FOLDER\\\\\\\"] = \\\\\\\"folder\\\\\\\";\\n  ParamType2[\\\\\\\"INTEGER\\\\\\\"] = \\\\\\\"integer\\\\\\\";\\n  ParamType2[\\\\\\\"OPERATOR_PATH\\\\\\\"] = \\\\\\\"operator_path\\\\\\\";\\n  ParamType2[\\\\\\\"PARAM_PATH\\\\\\\"] = \\\\\\\"param_path\\\\\\\";\\n  ParamType2[\\\\\\\"NODE_PATH\\\\\\\"] = \\\\\\\"node_path\\\\\\\";\\n  ParamType2[\\\\\\\"RAMP\\\\\\\"] = \\\\\\\"ramp\\\\\\\";\\n  ParamType2[\\\\\\\"STRING\\\\\\\"] = \\\\\\\"string\\\\\\\";\\n  ParamType2[\\\\\\\"VECTOR2\\\\\\\"] = \\\\\\\"vector2\\\\\\\";\\n  ParamType2[\\\\\\\"VECTOR3\\\\\\\"] = \\\\\\\"vector3\\\\\\\";\\n  ParamType2[\\\\\\\"VECTOR4\\\\\\\"] = \\\\\\\"vector4\\\\\\\";\\n})(ParamType || (ParamType = {}));\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/ParamEvent.ts\\nvar ParamEvent;\\n(function(ParamEvent2) {\\n  ParamEvent2[\\\\\\\"VISIBLE_UPDATED\\\\\\\"] = \\\\\\\"param_visible_updated\\\\\\\";\\n  ParamEvent2[\\\\\\\"RAW_INPUT_UPDATED\\\\\\\"] = \\\\\\\"raw_input_updated\\\\\\\";\\n  ParamEvent2[\\\\\\\"VALUE_UPDATED\\\\\\\"] = \\\\\\\"param_value_updated\\\\\\\";\\n  ParamEvent2[\\\\\\\"EXPRESSION_UPDATED\\\\\\\"] = \\\\\\\"param_expression_update\\\\\\\";\\n  ParamEvent2[\\\\\\\"ERROR_UPDATED\\\\\\\"] = \\\\\\\"param_error_updated\\\\\\\";\\n  ParamEvent2[\\\\\\\"DELETED\\\\\\\"] = \\\\\\\"param_deleted\\\\\\\";\\n})(ParamEvent || (ParamEvent = {}));\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/utils/OptionsController.ts\\nvar CALLBACK_OPTION = \\\\\\\"callback\\\\\\\";\\nvar CALLBACK_STRING_OPTION = \\\\\\\"callbackString\\\\\\\";\\nvar COMPUTE_ON_DIRTY = \\\\\\\"computeOnDirty\\\\\\\";\\nvar COOK_OPTION = \\\\\\\"cook\\\\\\\";\\nvar FILE_BROWSE_OPTION = \\\\\\\"fileBrowse\\\\\\\";\\nvar FILE_TYPE_OPTION = \\\\\\\"type\\\\\\\";\\nvar EXPRESSION = \\\\\\\"expression\\\\\\\";\\nvar FOR_ENTITIES = \\\\\\\"forEntities\\\\\\\";\\nvar LABEL = \\\\\\\"label\\\\\\\";\\nvar LEVEL = \\\\\\\"level\\\\\\\";\\nvar MENU = \\\\\\\"menu\\\\\\\";\\nvar MENU_STRING = \\\\\\\"menuString\\\\\\\";\\nvar ENTRIES = \\\\\\\"entries\\\\\\\";\\nvar MULTILINE_OPTION = \\\\\\\"multiline\\\\\\\";\\nvar LANGUAGE_OPTION = \\\\\\\"language\\\\\\\";\\nvar NODE_SELECTION = \\\\\\\"nodeSelection\\\\\\\";\\nvar NODE_SELECTION_CONTEXT = \\\\\\\"context\\\\\\\";\\nvar NODE_SELECTION_TYPES = \\\\\\\"types\\\\\\\";\\nvar PARAM_SELECTION = \\\\\\\"paramSelection\\\\\\\";\\nvar DEPENDENT_ON_FOUND_NODE = \\\\\\\"dependentOnFoundNode\\\\\\\";\\nvar RANGE_OPTION = \\\\\\\"range\\\\\\\";\\nvar RANGE_LOCKED_OPTION = \\\\\\\"rangeLocked\\\\\\\";\\nvar STEP_OPTION = \\\\\\\"step\\\\\\\";\\nvar SPARE_OPTION = \\\\\\\"spare\\\\\\\";\\nvar TEXTURE_OPTION = \\\\\\\"texture\\\\\\\";\\nvar ENV_OPTION = \\\\\\\"env\\\\\\\";\\nvar HIDDEN_OPTION = \\\\\\\"hidden\\\\\\\";\\nvar FIELD_OPTION = \\\\\\\"field\\\\\\\";\\nvar VISIBLE_IF_OPTION = \\\\\\\"visibleIf\\\\\\\";\\nvar COLOR_CONVERSION = \\\\\\\"conversion\\\\\\\";\\nvar SEPARATOR_BEFORE_OPTION = \\\\\\\"separatorBefore\\\\\\\";\\nvar SEPARATOR_AFTER_OPTION = \\\\\\\"separatorAfter\\\\\\\";\\nvar StringParamLanguage;\\n(function(StringParamLanguage2) {\\n  StringParamLanguage2[\\\\\\\"TYPESCRIPT\\\\\\\"] = \\\\\\\"typescript\\\\\\\";\\n})(StringParamLanguage || (StringParamLanguage = {}));\\nvar FileType;\\n(function(FileType2) {\\n  FileType2[\\\\\\\"AUDIO\\\\\\\"] = \\\\\\\"audio\\\\\\\";\\n  FileType2[\\\\\\\"TEXTURE_IMAGE\\\\\\\"] = \\\\\\\"texture_image\\\\\\\";\\n  FileType2[\\\\\\\"TEXTURE_VIDEO\\\\\\\"] = \\\\\\\"texture_video\\\\\\\";\\n  FileType2[\\\\\\\"GEOMETRY\\\\\\\"] = \\\\\\\"geometry\\\\\\\";\\n  FileType2[\\\\\\\"FONT\\\\\\\"] = \\\\\\\"font\\\\\\\";\\n  FileType2[\\\\\\\"SVG\\\\\\\"] = \\\\\\\"svg\\\\\\\";\\n  FileType2[\\\\\\\"JSON\\\\\\\"] = \\\\\\\"json\\\\\\\";\\n})(FileType || (FileType = {}));\\nvar OptionsController = class {\\n  constructor(_param) {\\n    this._param = _param;\\n    this._programatic_visible_state = true;\\n    this._callbackAllowed = false;\\n    this._updateVisibilityAndRemoveDirtyBound = this.updateVisibilityAndRemoveDirty.bind(this);\\n    this._ui_data_dependency_set = false;\\n  }\\n  dispose() {\\n    try {\\n      this._options[CALLBACK_OPTION] = void 0;\\n      this._options[CALLBACK_STRING_OPTION] = void 0;\\n    } catch (err) {\\n    }\\n    this._visibility_graph_node?.dispose();\\n  }\\n  set(options) {\\n    this._default_options = options;\\n    this._options = ObjectUtils.cloneDeep(this._default_options);\\n    this.post_set_options();\\n  }\\n  copy(options_controller) {\\n    this._default_options = ObjectUtils.cloneDeep(options_controller.default());\\n    this._options = ObjectUtils.cloneDeep(options_controller.current());\\n    this.post_set_options();\\n  }\\n  setOption(name, value) {\\n    this._options[name] = value;\\n    if (this._param.components) {\\n      for (let component of this._param.components) {\\n        component.options.setOption(name, value);\\n      }\\n    }\\n  }\\n  post_set_options() {\\n    this._handleComputeOnDirty();\\n  }\\n  param() {\\n    return this._param;\\n  }\\n  node() {\\n    return this._param.node;\\n  }\\n  default() {\\n    return this._default_options;\\n  }\\n  current() {\\n    return this._options;\\n  }\\n  hasOptionsOverridden() {\\n    return !ObjectUtils.isEqual(this._options, this._default_options);\\n  }\\n  overriddenOptions() {\\n    const overriden = {};\\n    const option_names = Object.keys(this._options);\\n    for (let option_name of option_names) {\\n      if (!ObjectUtils.isEqual(this._options[option_name], this._default_options[option_name])) {\\n        const cloned_option = ObjectUtils.cloneDeep(this._options[option_name]);\\n        Object.assign(overriden, {[option_name]: cloned_option});\\n      }\\n    }\\n    return overriden;\\n  }\\n  overriddenOptionNames() {\\n    return Object.keys(this.overriddenOptions());\\n  }\\n  computeOnDirty() {\\n    return this._options[COMPUTE_ON_DIRTY] || false;\\n  }\\n  _handleComputeOnDirty() {\\n    if (this.computeOnDirty()) {\\n      if (!this._computeOnDirty_callback_added) {\\n        this.param().addPostDirtyHook(\\\\\\\"computeOnDirty\\\\\\\", this._computeParam.bind(this));\\n        this._computeOnDirty_callback_added = true;\\n      }\\n    }\\n  }\\n  async _computeParam() {\\n    await this.param().compute();\\n  }\\n  hasCallback() {\\n    return this._options[CALLBACK_OPTION] != null || this._options[CALLBACK_STRING_OPTION] != null;\\n  }\\n  allowCallback() {\\n    this._callbackAllowed = true;\\n  }\\n  executeCallback() {\\n    if (!this._callbackAllowed) {\\n      return;\\n    }\\n    if (!this.node()) {\\n      return;\\n    }\\n    const callback = this.getCallback();\\n    if (!callback) {\\n      return;\\n    }\\n    if (!this.node().scene().loadingController.loaded()) {\\n      return;\\n    }\\n    const parent_param = this.param().parent_param;\\n    if (parent_param) {\\n      parent_param.options.executeCallback();\\n    } else {\\n      callback(this.node(), this.param());\\n    }\\n  }\\n  getCallback() {\\n    if (this.hasCallback()) {\\n      return this._options[CALLBACK_OPTION] = this._options[CALLBACK_OPTION] || this.createCallbackFromString();\\n    }\\n  }\\n  createCallbackFromString() {\\n    const callbackString = this._options[CALLBACK_STRING_OPTION];\\n    if (callbackString) {\\n      const callback_function = new Function(\\\\\\\"node\\\\\\\", \\\\\\\"scene\\\\\\\", \\\\\\\"window\\\\\\\", \\\\\\\"location\\\\\\\", callbackString);\\n      return () => {\\n        callback_function(this.node(), this.node().scene(), null, null);\\n      };\\n    }\\n  }\\n  colorConversion() {\\n    return this._options[COLOR_CONVERSION];\\n  }\\n  makesNodeDirtyWhenDirty() {\\n    let cook_options;\\n    if (this.param().parent_param != null) {\\n      return false;\\n    }\\n    let value = true;\\n    if ((cook_options = this._options[COOK_OPTION]) != null) {\\n      value = cook_options;\\n    }\\n    return value;\\n  }\\n  fileBrowseOption() {\\n    return this._options[FILE_BROWSE_OPTION];\\n  }\\n  fileBrowseAllowed() {\\n    return this.fileBrowseOption() != null;\\n  }\\n  fileBrowseType() {\\n    const option = this.fileBrowseOption();\\n    if (option) {\\n      return option[FILE_TYPE_OPTION];\\n    } else {\\n      return null;\\n    }\\n  }\\n  separatorBefore() {\\n    return this._options[SEPARATOR_BEFORE_OPTION];\\n  }\\n  separatorAfter() {\\n    return this._options[SEPARATOR_AFTER_OPTION];\\n  }\\n  isExpressionForEntities() {\\n    const expr_option = this._options[EXPRESSION];\\n    if (expr_option) {\\n      return expr_option[FOR_ENTITIES] || false;\\n    }\\n    return false;\\n  }\\n  level() {\\n    return this._options[LEVEL] || 0;\\n  }\\n  hasMenu() {\\n    return this.menuOptions() != null || this.menuStringOptions() != null;\\n  }\\n  menuOptions() {\\n    return this._options[MENU];\\n  }\\n  menuStringOptions() {\\n    return this._options[MENU_STRING];\\n  }\\n  menuEntries() {\\n    const options = this.menuOptions() || this.menuStringOptions();\\n    if (options) {\\n      return options[ENTRIES];\\n    } else {\\n      return [];\\n    }\\n  }\\n  isMultiline() {\\n    return this._options[MULTILINE_OPTION] === true;\\n  }\\n  language() {\\n    return this._options[LANGUAGE_OPTION];\\n  }\\n  isCode() {\\n    return this.language() != null;\\n  }\\n  nodeSelectionOptions() {\\n    return this._options[NODE_SELECTION];\\n  }\\n  nodeSelectionContext() {\\n    const options = this.nodeSelectionOptions();\\n    if (options) {\\n      return options[NODE_SELECTION_CONTEXT];\\n    }\\n  }\\n  nodeSelectionTypes() {\\n    const options = this.nodeSelectionOptions();\\n    if (options) {\\n      return options[NODE_SELECTION_TYPES];\\n    }\\n  }\\n  dependentOnFoundNode() {\\n    if (DEPENDENT_ON_FOUND_NODE in this._options) {\\n      return this._options[DEPENDENT_ON_FOUND_NODE];\\n    } else {\\n      return true;\\n    }\\n  }\\n  isSelectingParam() {\\n    return this.paramSelectionOptions() != null;\\n  }\\n  paramSelectionOptions() {\\n    return this._options[PARAM_SELECTION];\\n  }\\n  paramSelectionType() {\\n    const options = this.paramSelectionOptions();\\n    if (options) {\\n      const type_or_boolean = options;\\n      if (!CoreType.isBoolean(type_or_boolean)) {\\n        return type_or_boolean;\\n      }\\n    }\\n  }\\n  range() {\\n    return this._options[RANGE_OPTION] || [0, 1];\\n  }\\n  step() {\\n    return this._options[STEP_OPTION];\\n  }\\n  rangeLocked() {\\n    return this._options[RANGE_LOCKED_OPTION] || [false, false];\\n  }\\n  ensureInRange(value) {\\n    const range = this.range();\\n    if (value >= range[0] && value <= range[1]) {\\n      return value;\\n    } else {\\n      if (value < range[0]) {\\n        return this.rangeLocked()[0] === true ? range[0] : value;\\n      } else {\\n        return this.rangeLocked()[1] === true ? range[1] : value;\\n      }\\n    }\\n  }\\n  isSpare() {\\n    return this._options[SPARE_OPTION] || false;\\n  }\\n  textureOptions() {\\n    return this._options[TEXTURE_OPTION];\\n  }\\n  textureAsEnv() {\\n    const texture_options = this.textureOptions();\\n    if (texture_options != null) {\\n      return texture_options[ENV_OPTION] === true;\\n    }\\n    return false;\\n  }\\n  isHidden() {\\n    return this._options[HIDDEN_OPTION] === true || this._programatic_visible_state === false;\\n  }\\n  isVisible() {\\n    return !this.isHidden();\\n  }\\n  setVisibleState(state) {\\n    this._options[HIDDEN_OPTION] = !state;\\n    this.param().emit(ParamEvent.VISIBLE_UPDATED);\\n  }\\n  label() {\\n    return this._options[LABEL];\\n  }\\n  isLabelHidden() {\\n    const type = this.param().type();\\n    return type === ParamType.BUTTON || type === ParamType.BOOLEAN && this.isFieldHidden();\\n  }\\n  isFieldHidden() {\\n    return this._options[FIELD_OPTION] === false;\\n  }\\n  uiDataDependsOnOtherParams() {\\n    return VISIBLE_IF_OPTION in this._options;\\n  }\\n  visibilityPredecessors() {\\n    const visibility_options = this._options[VISIBLE_IF_OPTION];\\n    if (!visibility_options) {\\n      return [];\\n    }\\n    let predecessor_names = [];\\n    if (CoreType.isArray(visibility_options)) {\\n      predecessor_names = ArrayUtils.uniq(visibility_options.map((options) => Object.keys(options)).flat());\\n    } else {\\n      predecessor_names = Object.keys(visibility_options);\\n    }\\n    const node = this.param().node;\\n    return ArrayUtils.compact(predecessor_names.map((name) => {\\n      const param = node.params.get(name);\\n      if (param) {\\n        return param;\\n      } else {\\n        console.error(`param ${name} not found as visibility condition for ${this.param().name()} in node ${this.param().node.type()}`);\\n      }\\n    }));\\n  }\\n  setUiDataDependency() {\\n    if (this._ui_data_dependency_set) {\\n      return;\\n    }\\n    this._ui_data_dependency_set = true;\\n    const predecessors = this.visibilityPredecessors();\\n    if (predecessors.length > 0) {\\n      this._visibility_graph_node = new CoreGraphNode(this.param().scene(), \\\\\\\"param_visibility\\\\\\\");\\n      for (let predecessor of predecessors) {\\n        this._visibility_graph_node.addGraphInput(predecessor);\\n      }\\n      this._visibility_graph_node.addPostDirtyHook(\\\\\\\"_update_visibility_and_remove_dirty\\\\\\\", this._updateVisibilityAndRemoveDirtyBound);\\n    }\\n  }\\n  updateVisibilityAndRemoveDirty() {\\n    this.updateVisibility();\\n    this.param().removeDirtyState();\\n  }\\n  async updateVisibility() {\\n    const options = this._options[VISIBLE_IF_OPTION];\\n    if (options) {\\n      const params = this.visibilityPredecessors();\\n      const promises = params.map((p) => {\\n        if (p.isDirty()) {\\n          return p.compute();\\n        }\\n      });\\n      this._programatic_visible_state = false;\\n      await Promise.all(promises);\\n      if (CoreType.isArray(options)) {\\n        for (let options_set of options) {\\n          const satisfied_values = params.filter((param) => param.value == options_set[param.name()]);\\n          if (satisfied_values.length == params.length) {\\n            this._programatic_visible_state = true;\\n          }\\n        }\\n      } else {\\n        const satisfied_values = params.filter((param) => param.value == options[param.name()]);\\n        this._programatic_visible_state = satisfied_values.length == params.length;\\n      }\\n      this.param().emit(ParamEvent.VISIBLE_UPDATED);\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/utils/EmitController.ts\\nvar EmitController = class {\\n  constructor(param) {\\n    this.param = param;\\n    this._blocked_emit = false;\\n    this._blocked_parent_emit = false;\\n    this._count_by_event_name = {};\\n  }\\n  emitAllowed() {\\n    if (this._blocked_emit === true) {\\n      return false;\\n    }\\n    if (this.param.scene().loadingController.isLoading()) {\\n      return false;\\n    }\\n    return this.param.scene().dispatchController.emitAllowed();\\n  }\\n  blockEmit() {\\n    this._blocked_emit = true;\\n    if (this.param.isMultiple() && this.param.components) {\\n      for (let component of this.param.components) {\\n        component.emitController.blockEmit();\\n      }\\n    }\\n    return true;\\n  }\\n  unblockEmit() {\\n    this._blocked_emit = false;\\n    if (this.param.isMultiple() && this.param.components) {\\n      for (let component of this.param.components) {\\n        component.emitController.unblockEmit();\\n      }\\n    }\\n    return true;\\n  }\\n  blockParentEmit() {\\n    this._blocked_parent_emit = true;\\n    return true;\\n  }\\n  unblockParentEmit() {\\n    this._blocked_parent_emit = false;\\n    return true;\\n  }\\n  incrementCount(event_name) {\\n    this._count_by_event_name[event_name] = this._count_by_event_name[event_name] || 0;\\n    this._count_by_event_name[event_name] += 1;\\n  }\\n  eventsCount(event_name) {\\n    return this._count_by_event_name[event_name] || 0;\\n  }\\n  emit(event) {\\n    if (this.emitAllowed()) {\\n      this.param.emit(event);\\n      if (this.param.parent_param != null && this._blocked_parent_emit !== true) {\\n        this.param.parent_param.emit(event);\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/utils/Serializer.ts\\nvar ParamSerializer = class {\\n  constructor(param) {\\n    this.param = param;\\n  }\\n  toJSON() {\\n    const data = {\\n      name: this.param.name(),\\n      type: this.param.type(),\\n      raw_input: this.rawInput(),\\n      value: this.value(),\\n      value_pre_conversion: this.value_pre_conversion(),\\n      expression: this.expression(),\\n      graph_node_id: this.param.graphNodeId(),\\n      error_message: this.error_message(),\\n      is_visible: this.is_visible(),\\n      components: void 0\\n    };\\n    if (this.param.isMultiple() && this.param.components) {\\n      data[\\\\\\\"components\\\\\\\"] = this.param.components.map((component) => component.graphNodeId());\\n    }\\n    return data;\\n  }\\n  rawInput() {\\n    return this.param.rawInputSerialized();\\n  }\\n  value() {\\n    return this.param.valueSerialized();\\n  }\\n  value_pre_conversion() {\\n    return this.param.valuePreConversionSerialized();\\n  }\\n  expression() {\\n    return this.param.hasExpression() ? this.param.expressionController?.expression() : void 0;\\n  }\\n  error_message() {\\n    return this.param.states.error.message();\\n  }\\n  is_visible() {\\n    return this.param.options.isVisible();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/utils/states/TimeDependent.ts\\nvar TimeDependentState2 = class {\\n  constructor(param) {\\n    this.param = param;\\n  }\\n  active() {\\n    const frame_graph_node_id = this.param.scene().timeController.graphNode.graphNodeId();\\n    return this.param.graphPredecessorIds().includes(frame_graph_node_id);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/utils/states/Error.ts\\nvar ParamErrorState = class {\\n  constructor(param) {\\n    this.param = param;\\n  }\\n  set(message) {\\n    if (this._message != message) {\\n      this._message = message;\\n      if (this._message) {\\n        Poly.warn(this.param.path(), this._message);\\n      }\\n      this.param.emitController.emit(ParamEvent.ERROR_UPDATED);\\n    }\\n  }\\n  message() {\\n    return this._message;\\n  }\\n  clear() {\\n    this.set(void 0);\\n  }\\n  active() {\\n    return this._message != null;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/utils/StatesController.ts\\nvar StatesController2 = class {\\n  constructor(param) {\\n    this.param = param;\\n    this.timeDependent = new TimeDependentState2(this.param);\\n    this.error = new ParamErrorState(this.param);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/MethodDependency.ts\\nvar MethodDependency = class extends CoreGraphNode {\\n  constructor(param, path_argument, decomposed_path) {\\n    super(param.scene(), \\\\\\\"MethodDependency\\\\\\\");\\n    this.param = param;\\n    this.path_argument = path_argument;\\n    this.decomposed_path = decomposed_path;\\n    this._update_from_name_change_bound = this._update_from_name_change.bind(this);\\n    param.expressionController?.registerMethodDependency(this);\\n    this.addPostDirtyHook(\\\\\\\"_update_from_name_change\\\\\\\", this._update_from_name_change_bound);\\n  }\\n  _update_from_name_change(trigger) {\\n    if (trigger && this.decomposed_path) {\\n      const node = trigger;\\n      this.decomposed_path.update_from_name_change(node);\\n      const new_path = this.decomposed_path.to_path();\\n      const literal = this.jsep_node;\\n      if (literal) {\\n        literal.value = `${literal.value}`.replace(`${this.path_argument}`, new_path);\\n        literal.raw = literal.raw.replace(`${this.path_argument}`, new_path);\\n      }\\n      if (this.param.expressionController) {\\n        this.param.expressionController.updateFromMethodDependencyNameChange();\\n      }\\n    }\\n  }\\n  reset() {\\n    this.graphDisconnectPredecessors();\\n  }\\n  listen_for_name_changes() {\\n    if (this.jsep_node && this.decomposed_path) {\\n      for (let node_in_path of this.decomposed_path.named_nodes()) {\\n        if (node_in_path) {\\n          const node = node_in_path;\\n          if (node.nameController) {\\n            this.addGraphInput(node.nameController.graph_node);\\n          }\\n        }\\n      }\\n    }\\n  }\\n  set_jsep_node(jsep_node) {\\n    this.jsep_node = jsep_node;\\n  }\\n  set_resolved_graph_node(node) {\\n    this.resolved_graph_node = node;\\n  }\\n  set_unresolved_path(path) {\\n    this.unresolved_path = path;\\n  }\\n  static create(param, index_or_path, node, decomposed_path) {\\n    const is_index = CoreType.isNumber(index_or_path);\\n    const instance = new MethodDependency(param, index_or_path, decomposed_path);\\n    if (node) {\\n      instance.set_resolved_graph_node(node);\\n    } else {\\n      if (!is_index) {\\n        const path = index_or_path;\\n        instance.set_unresolved_path(path);\\n      }\\n    }\\n    return instance;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/_Base.ts\\nvar TYPED_PARAM_DEFAULT_COMPONENT_NAMES = [];\\nvar TypedParam = class extends CoreGraphNode {\\n  constructor(scene, node) {\\n    super(scene, \\\\\\\"BaseParam\\\\\\\");\\n    this._options = new OptionsController(this);\\n    this._emit_controller = new EmitController(this);\\n    this._is_computing = false;\\n    this._node = node;\\n    this.initialize_param();\\n  }\\n  get options() {\\n    return this._options = this._options || new OptionsController(this);\\n  }\\n  get emitController() {\\n    return this._emit_controller = this._emit_controller || new EmitController(this);\\n  }\\n  get expressionController() {\\n    return this._expression_controller;\\n  }\\n  get serializer() {\\n    return this._serializer = this._serializer || new ParamSerializer(this);\\n  }\\n  get states() {\\n    return this._states = this._states || new StatesController2(this);\\n  }\\n  dispose() {\\n    const predecessors = this.graphPredecessors();\\n    for (let predecessor of predecessors) {\\n      if (predecessor instanceof MethodDependency) {\\n        predecessor.dispose();\\n      }\\n    }\\n    this.scene().missingExpressionReferencesController.deregisterParam(this);\\n    this._expression_controller?.dispose();\\n    super.dispose();\\n    this._options?.dispose();\\n  }\\n  initialize_param() {\\n  }\\n  static type() {\\n    return ParamType.FLOAT;\\n  }\\n  type() {\\n    return this.constructor.type();\\n  }\\n  isNumeric() {\\n    return false;\\n  }\\n  setName(name) {\\n    super.setName(name);\\n  }\\n  get value() {\\n    return this._value;\\n  }\\n  copy_value(param) {\\n    if (param.type() == this.type()) {\\n      this._copy_value(param);\\n    } else {\\n      console.warn(`cannot copy value from ${param.type()} to ${this.type()}`);\\n    }\\n  }\\n  _copy_value(param) {\\n    throw \\\\\\\"abstract method param._copy_value\\\\\\\";\\n  }\\n  valuePreConversionSerialized() {\\n    return void 0;\\n  }\\n  convert(raw_val) {\\n    return null;\\n  }\\n  static are_raw_input_equal(val1, val2) {\\n    return false;\\n  }\\n  is_raw_input_equal(other_raw_input) {\\n    return this.constructor.are_raw_input_equal(this._raw_input, other_raw_input);\\n  }\\n  static are_values_equal(val1, val2) {\\n    return false;\\n  }\\n  is_value_equal(other_val) {\\n    return this.constructor.are_values_equal(this.value, other_val);\\n  }\\n  _clone_raw_input(raw_input) {\\n    return raw_input;\\n  }\\n  set(raw_input) {\\n    this._raw_input = this._clone_raw_input(this._prefilter_invalid_raw_input(raw_input));\\n    this.emitController.emit(ParamEvent.RAW_INPUT_UPDATED);\\n    this.processRawInput();\\n  }\\n  _prefilter_invalid_raw_input(raw_input) {\\n    return raw_input;\\n  }\\n  defaultValue() {\\n    return this._default_value;\\n  }\\n  isDefault() {\\n    return this._raw_input == this._default_value;\\n  }\\n  rawInput() {\\n    return this._raw_input;\\n  }\\n  processRawInput() {\\n  }\\n  async compute() {\\n    if (this.scene().loadingController.isLoading()) {\\n      console.warn(`param attempt to compute ${this.path()}`);\\n    }\\n    if (this.isDirty()) {\\n      if (!this._is_computing) {\\n        this._is_computing = true;\\n        await this.processComputation();\\n        this._is_computing = false;\\n        if (this._compute_resolves) {\\n          let callback;\\n          while (callback = this._compute_resolves.pop()) {\\n            callback();\\n          }\\n        }\\n      } else {\\n        return new Promise((resolve, reject) => {\\n          this._compute_resolves = this._compute_resolves || [];\\n          this._compute_resolves.push(resolve);\\n        });\\n      }\\n    }\\n  }\\n  async processComputation() {\\n  }\\n  setInitValue(init_value) {\\n    this._default_value = this._clone_raw_input(this._prefilter_invalid_raw_input(init_value));\\n  }\\n  _setupNodeDependencies(node) {\\n    if (!node) {\\n      if (this._node) {\\n        this._node.params.params_node?.removeGraphInput(this);\\n      }\\n    } else {\\n      this.options.allowCallback();\\n      if (!this.parent_param) {\\n        if (this.options.makesNodeDirtyWhenDirty()) {\\n          node.params.params_node?.addGraphInput(this, false);\\n        } else {\\n          this.dirtyController.addPostDirtyHook(\\\\\\\"run callback\\\\\\\", async () => {\\n            await this.compute();\\n            this.options.executeCallback();\\n          });\\n        }\\n      }\\n    }\\n    if (this.components) {\\n      for (let c of this.components) {\\n        c._setupNodeDependencies(node);\\n      }\\n    }\\n  }\\n  get node() {\\n    return this._node;\\n  }\\n  parent() {\\n    return this.node;\\n  }\\n  set_parent_param(param) {\\n    param.addGraphInput(this, false);\\n    this._parent_param = param;\\n  }\\n  get parent_param() {\\n    return this._parent_param;\\n  }\\n  has_parent_param() {\\n    return this._parent_param != null;\\n  }\\n  path() {\\n    return this.node?.path() + \\\\\\\"/\\\\\\\" + this.name();\\n  }\\n  pathRelativeTo(node) {\\n    const nodeRelativePath = CoreWalker.relativePath(node, this.node);\\n    if (nodeRelativePath.length > 0) {\\n      return `${nodeRelativePath}${CoreWalker.SEPARATOR}${this.name()}`;\\n    } else {\\n      return this.name();\\n    }\\n  }\\n  emit(event_name) {\\n    if (this.emitController.emitAllowed()) {\\n      this.emitController.incrementCount(event_name);\\n      this.scene().dispatchController.dispatch(this, event_name);\\n    }\\n  }\\n  get components() {\\n    return this._components;\\n  }\\n  componentNames() {\\n    return TYPED_PARAM_DEFAULT_COMPONENT_NAMES;\\n  }\\n  isMultiple() {\\n    return this.componentNames().length > 0;\\n  }\\n  initComponents() {\\n  }\\n  hasExpression() {\\n    return this.expressionController != null && this.expressionController.active();\\n  }\\n  toJSON() {\\n    return this.serializer.toJSON();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/traversers/ParsedTree.ts\\nvar import_jsep = __toModule(require_jsep());\\nimport_jsep.default.addUnaryOp(\\\\\\\"@\\\\\\\");\\nvar precedence = 10;\\nimport_jsep.default.addBinaryOp(\\\\\\\"**\\\\\\\", precedence);\\nvar JSEP_IDENTIFIER = \\\\\\\"Identifier\\\\\\\";\\nvar JSEP_LITERAL = \\\\\\\"Literal\\\\\\\";\\nvar JSEP_CALL_EXPRESSION = \\\\\\\"CallExpression\\\\\\\";\\nvar STRING_EXPRESSION_SEPARATOR = \\\\\\\"`\\\\\\\";\\nvar ParsedTree = class {\\n  constructor() {\\n  }\\n  parse_expression(string) {\\n    try {\\n      this.reset();\\n      this.node = import_jsep.default(string);\\n    } catch (e) {\\n      const message = `could not parse the expression '${string}' (error: ${e})`;\\n      this.error_message = message;\\n    }\\n  }\\n  parse_expression_for_string_param(string) {\\n    try {\\n      this.reset();\\n      const elements = ParsedTree.string_value_elements(string);\\n      const nodes = [];\\n      for (let i = 0; i < elements.length; i++) {\\n        const element = elements[i];\\n        let node;\\n        if (i % 2 == 1) {\\n          node = import_jsep.default(element);\\n        } else {\\n          const sanitizedElement = element.replace(/\\\\'/g, \\\\\\\"\\\\\\\\'\\\\\\\");\\n          node = {\\n            type: JSEP_LITERAL,\\n            value: `'${sanitizedElement}'`,\\n            raw: `'${sanitizedElement}'`\\n          };\\n        }\\n        nodes.push(node);\\n      }\\n      this.node = {\\n        type: JSEP_CALL_EXPRESSION,\\n        arguments: nodes,\\n        callee: {\\n          type: JSEP_IDENTIFIER,\\n          name: \\\\\\\"strConcat\\\\\\\"\\n        }\\n      };\\n    } catch (e) {\\n      const message = `could not parse the expression '${string}' (error: ${e})`;\\n      this.error_message = message;\\n    }\\n  }\\n  static string_value_elements(v) {\\n    if (v != null) {\\n      if (CoreType.isString(v)) {\\n        return v.split(STRING_EXPRESSION_SEPARATOR);\\n      } else {\\n        return [];\\n      }\\n    } else {\\n      return [];\\n    }\\n  }\\n  reset() {\\n    this.node = void 0;\\n    this.error_message = void 0;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/LiteralConstructsController.ts\\nvar LiteralConstructsController = class {\\n  static if(args) {\\n    const condition = args[0];\\n    const val_true = args[1];\\n    const val_false = args[2];\\n    return `(${condition}) ? (${val_true}) : (${val_false})`;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/traversers/_Base.ts\\nvar VARIABLE_PREFIX = \\\\\\\"$\\\\\\\";\\nvar BaseTraverser = class {\\n  constructor(param) {\\n    this.param = param;\\n    this._set_error_from_error_bound = this._set_error_from_error.bind(this);\\n  }\\n  clear_error() {\\n    this._error_message = void 0;\\n  }\\n  set_error(message) {\\n    this._error_message = this._error_message || message;\\n  }\\n  _set_error_from_error(error) {\\n    if (CoreType.isString(error)) {\\n      this._error_message = error;\\n    } else {\\n      this._error_message = error.message;\\n    }\\n  }\\n  is_errored() {\\n    return this._error_message != null;\\n  }\\n  error_message() {\\n    return this._error_message;\\n  }\\n  reset() {\\n    this._error_message = void 0;\\n  }\\n  traverse_node(node) {\\n    const method_name = `traverse_${node.type}`;\\n    const method = this[method_name];\\n    if (method) {\\n      return this[method_name](node);\\n    } else {\\n      this.set_error(`expression unknown node type: ${node.type}`);\\n    }\\n  }\\n  traverse_BinaryExpression(node) {\\n    return `${this.traverse_node(node.left)} ${node.operator} ${this.traverse_node(node.right)}`;\\n  }\\n  traverse_LogicalExpression(node) {\\n    return `${this.traverse_node(node.left)} ${node.operator} ${this.traverse_node(node.right)}`;\\n  }\\n  traverse_MemberExpression(node) {\\n    return `${this.traverse_node(node.object)}.${this.traverse_node(node.property)}`;\\n  }\\n  traverse_ConditionalExpression(node) {\\n    return `(${this.traverse_node(node.test)}) ? (${this.traverse_node(node.consequent)}) : (${this.traverse_node(node.alternate)})`;\\n  }\\n  traverse_Compound(node) {\\n    const args = node.body;\\n    let traversed_args = [];\\n    for (let i = 0; i < args.length; i++) {\\n      const arg_node = args[i];\\n      if (arg_node.type == \\\\\\\"Identifier\\\\\\\") {\\n        if (arg_node.name[0] == VARIABLE_PREFIX) {\\n          traversed_args.push(\\\\\\\"`${\\\\\\\" + this.traverse_node(arg_node) + \\\\\\\"}`\\\\\\\");\\n        } else {\\n          traversed_args.push(`'${arg_node.name}'`);\\n        }\\n      } else {\\n        traversed_args.push(\\\\\\\"`${\\\\\\\" + this.traverse_node(arg_node) + \\\\\\\"}`\\\\\\\");\\n      }\\n    }\\n    return traversed_args.join(\\\\\\\" + \\\\\\\");\\n  }\\n  traverse_Literal(node) {\\n    return `${node.raw}`;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/AttributeRequirementsController.ts\\nvar VAR_CORE_GEOMETRY = `coreGeometry`;\\nvar AttributeRequirementsController = class {\\n  constructor() {\\n  }\\n  reset() {\\n    if (this._attributeNames) {\\n      this._attributeNames.clear();\\n    }\\n  }\\n  assignAttributesLines() {\\n    if (this._attributeNames) {\\n      const lines = [];\\n      for (let attribName of this._attributeNames) {\\n        lines.push(AttributeRequirementsController.assignAttributeLine(attribName));\\n      }\\n      return lines.join(\\\\\\\";\\\\n\\\\\\\");\\n    } else {\\n      return \\\\\\\"\\\\\\\";\\n    }\\n  }\\n  assignArraysLines() {\\n    if (this._attributeNames) {\\n      const lines = [];\\n      if (this._attributeNames.size > 0) {\\n        const coreGeoLine = `const ${VAR_CORE_GEOMETRY} = entities[0].coreGeometry();`;\\n        lines.push(coreGeoLine);\\n      }\\n      for (let attribName of this._attributeNames) {\\n        lines.push(AttributeRequirementsController.assignItemSizeLine(attribName));\\n        lines.push(AttributeRequirementsController.assignArrayLine(attribName));\\n      }\\n      return lines.join(\\\\\\\";\\\\n\\\\\\\");\\n    } else {\\n      return \\\\\\\"\\\\\\\";\\n    }\\n  }\\n  attributePresenceCheckLine() {\\n    if (this._attributeNames) {\\n      const varNames = [];\\n      for (let attribName of this._attributeNames) {\\n        const varName = AttributeRequirementsController._varAttribute(attribName);\\n        varNames.push(varName);\\n      }\\n      if (varNames.length > 0) {\\n        return varNames.join(\\\\\\\" && \\\\\\\");\\n      }\\n    }\\n    return \\\\\\\"true\\\\\\\";\\n  }\\n  add(attribName) {\\n    this._attributeNames = this._attributeNames || new Set();\\n    this._attributeNames.add(attribName);\\n  }\\n  static assignAttributeLine(attribName) {\\n    const varAttribute = this._varAttribute(attribName);\\n    return `const ${varAttribute} = entities[0].geometry().attributes['${attribName}']`;\\n  }\\n  static assignItemSizeLine(attribName) {\\n    const varAttribute = this._varAttribute(attribName);\\n    const varAttributeSize = this._varAttribSize(attribName);\\n    return `const ${varAttributeSize} = ${varAttribute}.itemSize`;\\n  }\\n  static assignArrayLine(attribName) {\\n    const varAttribute = this._varAttribute(attribName);\\n    const varArray = this._varArray(attribName);\\n    const isIndexedCondition = `${VAR_CORE_GEOMETRY}.isAttribIndexed('${attribName}')`;\\n    const indexedArray = `entities.map(e=>e.indexedAttribValue('${attribName}'))`;\\n    const nonIndexedArray = `${varAttribute}.array`;\\n    return `const ${varArray} = ${isIndexedCondition} ? ${indexedArray} : ${nonIndexedArray}`;\\n  }\\n  static _varAttribute(attribName) {\\n    return `attrib_${attribName}`;\\n  }\\n  static _varAttribSize(attribName) {\\n    return `attrib_size_${attribName}`;\\n  }\\n  static _varArray(attribName) {\\n    return `array_${attribName}`;\\n  }\\n  varAttributeSize(attribName) {\\n    return AttributeRequirementsController._varAttribSize(attribName);\\n  }\\n  varArray(attribName) {\\n    return AttributeRequirementsController._varArray(attribName);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/traversers/FunctionGenerator.ts\\nvar NATIVE_MATH_METHODS = [\\n  \\\\\\\"abs\\\\\\\",\\n  \\\\\\\"acos\\\\\\\",\\n  \\\\\\\"acosh\\\\\\\",\\n  \\\\\\\"asin\\\\\\\",\\n  \\\\\\\"asinh\\\\\\\",\\n  \\\\\\\"atan\\\\\\\",\\n  \\\\\\\"atan2\\\\\\\",\\n  \\\\\\\"atanh\\\\\\\",\\n  \\\\\\\"ceil\\\\\\\",\\n  \\\\\\\"cos\\\\\\\",\\n  \\\\\\\"cosh\\\\\\\",\\n  \\\\\\\"exp\\\\\\\",\\n  \\\\\\\"expm1\\\\\\\",\\n  \\\\\\\"floor\\\\\\\",\\n  \\\\\\\"log\\\\\\\",\\n  \\\\\\\"log1p\\\\\\\",\\n  \\\\\\\"log2\\\\\\\",\\n  \\\\\\\"log10\\\\\\\",\\n  \\\\\\\"max\\\\\\\",\\n  \\\\\\\"min\\\\\\\",\\n  \\\\\\\"pow\\\\\\\",\\n  \\\\\\\"round\\\\\\\",\\n  \\\\\\\"sign\\\\\\\",\\n  \\\\\\\"sin\\\\\\\",\\n  \\\\\\\"sinh\\\\\\\",\\n  \\\\\\\"sqrt\\\\\\\",\\n  \\\\\\\"tan\\\\\\\",\\n  \\\\\\\"tanh\\\\\\\"\\n];\\nvar NATIVE_ES6_MATH_METHODS = [\\\\\\\"cbrt\\\\\\\", \\\\\\\"hypot\\\\\\\", \\\\\\\"log10\\\\\\\", \\\\\\\"trunc\\\\\\\"];\\nvar NATIVE_MATH_METHODS_RENAMED = {\\n  math_random: \\\\\\\"random\\\\\\\"\\n};\\nvar CORE_MATH_METHODS = [\\\\\\\"fit\\\\\\\", \\\\\\\"fit01\\\\\\\", \\\\\\\"fract\\\\\\\", \\\\\\\"deg2rad\\\\\\\", \\\\\\\"rad2deg\\\\\\\", \\\\\\\"rand\\\\\\\", \\\\\\\"clamp\\\\\\\"];\\nvar EASING_METHODS = Object.keys(Easing);\\nvar CORE_STRING_METHODS = [\\\\\\\"precision\\\\\\\"];\\nvar NATIVE_MATH_CONSTANTS = [\\\\\\\"E\\\\\\\", \\\\\\\"LN2\\\\\\\", \\\\\\\"LN10\\\\\\\", \\\\\\\"LOG10E\\\\\\\", \\\\\\\"LOG2E\\\\\\\", \\\\\\\"PI\\\\\\\", \\\\\\\"SQRT1_2\\\\\\\", \\\\\\\"SQRT2\\\\\\\"];\\nvar DIRECT_EXPRESSION_FUNCTIONS = {};\\nNATIVE_MATH_METHODS.forEach((name) => {\\n  DIRECT_EXPRESSION_FUNCTIONS[name] = `Math.${name}`;\\n});\\nNATIVE_ES6_MATH_METHODS.forEach((name) => {\\n  DIRECT_EXPRESSION_FUNCTIONS[name] = `Math.${name}`;\\n});\\nObject.keys(NATIVE_MATH_METHODS_RENAMED).forEach((name) => {\\n  const remaped = NATIVE_MATH_METHODS_RENAMED[name];\\n  DIRECT_EXPRESSION_FUNCTIONS[name] = `Math.${remaped}`;\\n});\\nCORE_MATH_METHODS.forEach((name) => {\\n  DIRECT_EXPRESSION_FUNCTIONS[name] = `Core.Math.${name}`;\\n});\\nEASING_METHODS.forEach((name) => {\\n  DIRECT_EXPRESSION_FUNCTIONS[name] = `Core.Math.Easing.${name}`;\\n});\\nCORE_STRING_METHODS.forEach((name) => {\\n  DIRECT_EXPRESSION_FUNCTIONS[name] = `Core.String.${name}`;\\n});\\nvar LITERAL_CONSTRUCT = {\\n  if: LiteralConstructsController.if\\n};\\nvar GLOBAL_CONSTANTS = {};\\nNATIVE_MATH_CONSTANTS.forEach((name) => {\\n  GLOBAL_CONSTANTS[name] = `Math.${name}`;\\n});\\nvar QUOTE = \\\\\\\"'\\\\\\\";\\nvar ARGUMENTS_SEPARATOR = \\\\\\\", \\\\\\\";\\nvar ATTRIBUTE_PREFIX = \\\\\\\"@\\\\\\\";\\nvar PROPERTY_OFFSETS = {\\n  x: 0,\\n  y: 1,\\n  z: 2,\\n  w: 3,\\n  r: 0,\\n  g: 1,\\n  b: 2\\n};\\nvar FunctionGenerator = class extends BaseTraverser {\\n  constructor(param) {\\n    super(param);\\n    this.param = param;\\n    this._attribute_requirements_controller = new AttributeRequirementsController();\\n    this.methods = [];\\n    this.method_index = -1;\\n    this.method_dependencies = [];\\n    this.immutable_dependencies = [];\\n  }\\n  parse_tree(parsed_tree) {\\n    this.reset();\\n    if (parsed_tree.error_message == null) {\\n      try {\\n        this._attribute_requirements_controller = new AttributeRequirementsController();\\n        if (parsed_tree.node) {\\n          const function_main_string = this.traverse_node(parsed_tree.node);\\n          if (function_main_string && !this.is_errored()) {\\n            this.function_main_string = function_main_string;\\n          }\\n        } else {\\n          console.warn(\\\\\\\"no parsed_tree.node\\\\\\\");\\n        }\\n      } catch (e) {\\n        console.warn(`error in expression for param ${this.param.path()}`);\\n        console.warn(e);\\n      }\\n      if (this.function_main_string) {\\n        try {\\n          const body = this._functionBody();\\n          this.function = new Function(\\\\\\\"Core\\\\\\\", \\\\\\\"param\\\\\\\", \\\\\\\"methods\\\\\\\", \\\\\\\"_set_error_from_error\\\\\\\", `\\n\\t\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\t\\t${body}\\n\\t\\t\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\t\\t\\t_set_error_from_error(e)\\n\\t\\t\\t\\t\\t\\treturn null;\\n\\t\\t\\t\\t\\t}`);\\n        } catch (e) {\\n          console.warn(e);\\n          this.set_error(\\\\\\\"cannot generate function\\\\\\\");\\n        }\\n      } else {\\n        this.set_error(\\\\\\\"cannot generate function body\\\\\\\");\\n      }\\n    } else {\\n      this.set_error(\\\\\\\"cannot parse expression\\\\\\\");\\n    }\\n  }\\n  reset() {\\n    super.reset();\\n    this.function_main_string = void 0;\\n    this.methods = [];\\n    this.method_index = -1;\\n    this.function = void 0;\\n    this.method_dependencies = [];\\n    this.immutable_dependencies = [];\\n  }\\n  _functionBody() {\\n    if (this.param.options.isExpressionForEntities()) {\\n      return `\\n\\t\\t\\tconst entities = param.expressionController.entities();\\n\\t\\t\\tif(entities){\\n\\t\\t\\t\\treturn new Promise( async (resolve, reject)=>{\\n\\t\\t\\t\\t\\tlet entity;\\n\\t\\t\\t\\t\\tconst entity_callback = param.expressionController.entity_callback();\\n\\t\\t\\t\\t\\t// assign_attributes_lines\\n\\t\\t\\t\\t\\t${this._attribute_requirements_controller.assignAttributesLines()}\\n\\t\\t\\t\\t\\t// check if attributes are present\\n\\t\\t\\t\\t\\tif( ${this._attribute_requirements_controller.attributePresenceCheckLine()} ){\\n\\t\\t\\t\\t\\t\\t// assign_arrays_lines\\n\\t\\t\\t\\t\\t\\t${this._attribute_requirements_controller.assignArraysLines()}\\n\\t\\t\\t\\t\\t\\tfor(let index=0; index < entities.length; index++){\\n\\t\\t\\t\\t\\t\\t\\tentity = entities[index];\\n\\t\\t\\t\\t\\t\\t\\tresult = ${this.function_main_string};\\n\\t\\t\\t\\t\\t\\t\\tentity_callback(entity, result);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tresolve()\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tconst error = new Error('attribute not found')\\n\\t\\t\\t\\t\\t\\t_set_error_from_error(error)\\n\\t\\t\\t\\t\\t\\treject(error)\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t\\t}\\n\\t\\t\\treturn []`;\\n    } else {\\n      return `\\n\\t\\t\\treturn new Promise( async (resolve, reject)=>{\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\tconst value = ${this.function_main_string}\\n\\t\\t\\t\\t\\tresolve(value)\\n\\t\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\t\\t_set_error_from_error(e)\\n\\t\\t\\t\\t\\treject()\\n\\t\\t\\t\\t}\\n\\t\\t\\t})\\n\\t\\t\\t`;\\n    }\\n  }\\n  evalAllowed() {\\n    return this.function != null;\\n  }\\n  evalFunction() {\\n    if (this.function) {\\n      this.clear_error();\\n      const Core = {\\n        Math: CoreMath,\\n        String: CoreString\\n      };\\n      const result = this.function(Core, this.param, this.methods, this._set_error_from_error_bound);\\n      return result;\\n    }\\n  }\\n  traverse_CallExpression(node) {\\n    const method_arguments = node.arguments.map((arg) => {\\n      return this.traverse_node(arg);\\n    });\\n    const callee = node.callee;\\n    const method_name = callee.name;\\n    if (method_name) {\\n      const literal_contruct = LITERAL_CONSTRUCT[method_name];\\n      if (literal_contruct) {\\n        return literal_contruct(method_arguments);\\n      }\\n      const arguments_joined = `${method_arguments.join(ARGUMENTS_SEPARATOR)}`;\\n      const direct_function_name = DIRECT_EXPRESSION_FUNCTIONS[method_name];\\n      if (direct_function_name) {\\n        return `${direct_function_name}(${arguments_joined})`;\\n      }\\n      const expressionRegister = Poly.expressionsRegister;\\n      const indirect_method = expressionRegister.getMethod(method_name);\\n      if (indirect_method) {\\n        const path_node = node.arguments[0];\\n        const function_string = `return ${method_arguments[0]}`;\\n        let path_argument_function;\\n        let path_argument = [];\\n        try {\\n          path_argument_function = new Function(function_string);\\n          path_argument = path_argument_function();\\n        } catch {\\n        }\\n        this._create_method_and_dependencies(method_name, path_argument, path_node);\\n        return `(await methods[${this.method_index}].processArguments([${arguments_joined}]))`;\\n      } else {\\n        const available_methods = expressionRegister.availableMethods().join(\\\\\\\", \\\\\\\");\\n        const message = `method not found (${method_name}), available methods are: ${available_methods}`;\\n        Poly.warn(message);\\n      }\\n    }\\n    this.set_error(`unknown method: ${method_name}`);\\n  }\\n  traverse_BinaryExpression(node) {\\n    return `(${this.traverse_node(node.left)} ${node.operator} ${this.traverse_node(node.right)})`;\\n  }\\n  traverse_LogicalExpression(node) {\\n    return `(${this.traverse_node(node.left)} ${node.operator} ${this.traverse_node(node.right)})`;\\n  }\\n  traverse_MemberExpression(node) {\\n    return `${this.traverse_node(node.object)}.${this.traverse_node(node.property)}`;\\n  }\\n  traverse_UnaryExpression(node) {\\n    if (node.operator === ATTRIBUTE_PREFIX) {\\n      let argument = node.argument;\\n      let attribute_name;\\n      let property;\\n      switch (argument.type) {\\n        case \\\\\\\"Identifier\\\\\\\": {\\n          const argument_identifier = argument;\\n          attribute_name = argument_identifier.name;\\n          break;\\n        }\\n        case \\\\\\\"MemberExpression\\\\\\\": {\\n          const argument_member_expression = argument;\\n          const attrib_node = argument_member_expression.object;\\n          const property_node = argument_member_expression.property;\\n          attribute_name = attrib_node.name;\\n          property = property_node.name;\\n          break;\\n        }\\n      }\\n      if (attribute_name) {\\n        attribute_name = CoreAttribute.remapName(attribute_name);\\n        if (attribute_name == \\\\\\\"ptnum\\\\\\\") {\\n          return \\\\\\\"((entity != null) ? entity.index() : 0)\\\\\\\";\\n        } else {\\n          const var_attribute_size = this._attribute_requirements_controller.varAttributeSize(attribute_name);\\n          const var_array = this._attribute_requirements_controller.varArray(attribute_name);\\n          this._attribute_requirements_controller.add(attribute_name);\\n          if (property) {\\n            const property_offset = PROPERTY_OFFSETS[property];\\n            return `${var_array}[entity.index()*${var_attribute_size}+${property_offset}]`;\\n          } else {\\n            return `${var_array}[entity.index()*${var_attribute_size}]`;\\n          }\\n        }\\n      } else {\\n        console.warn(\\\\\\\"attribute not found\\\\\\\");\\n        return \\\\\\\"\\\\\\\";\\n      }\\n    } else {\\n      return `${node.operator}${this.traverse_node(node.argument)}`;\\n    }\\n  }\\n  traverse_Literal(node) {\\n    return `${node.raw}`;\\n  }\\n  traverse_Identifier(node) {\\n    const identifier_first_char = node.name[0];\\n    if (identifier_first_char == VARIABLE_PREFIX) {\\n      const identifier_name_without_dollar_sign = node.name.substr(1);\\n      const direct_constant_name = GLOBAL_CONSTANTS[identifier_name_without_dollar_sign];\\n      if (direct_constant_name) {\\n        return direct_constant_name;\\n      }\\n      const method_name = `traverse_Identifier_${identifier_name_without_dollar_sign}`;\\n      const method = this[method_name];\\n      if (method) {\\n        return this[method_name]();\\n      } else {\\n        this.set_error(`identifier unknown: ${node.name}`);\\n      }\\n    } else {\\n      return node.name;\\n    }\\n  }\\n  traverse_Identifier_F() {\\n    this.immutable_dependencies.push(this.param.scene().timeController.graphNode);\\n    return `param.scene().timeController.frame()`;\\n  }\\n  traverse_Identifier_T() {\\n    this.immutable_dependencies.push(this.param.scene().timeController.graphNode);\\n    return `param.scene().timeController.time()`;\\n  }\\n  traverse_Identifier_OS() {\\n    return `${QUOTE}${this.param.node.name()}${QUOTE}`;\\n  }\\n  traverse_Identifier_CH() {\\n    return `${QUOTE}${this.param.name()}${QUOTE}`;\\n  }\\n  traverse_Identifier_CEX() {\\n    return this._method_centroid(\\\\\\\"x\\\\\\\");\\n  }\\n  traverse_Identifier_CEY() {\\n    return this._method_centroid(\\\\\\\"y\\\\\\\");\\n  }\\n  traverse_Identifier_CEZ() {\\n    return this._method_centroid(\\\\\\\"z\\\\\\\");\\n  }\\n  _method_centroid(component) {\\n    const method_arguments = [0, `${QUOTE}${component}${QUOTE}`];\\n    const arguments_joined = method_arguments.join(ARGUMENTS_SEPARATOR);\\n    this._create_method_and_dependencies(\\\\\\\"centroid\\\\\\\", 0);\\n    return `(await methods[${this.method_index}].processArguments([${arguments_joined}]))`;\\n  }\\n  _create_method_and_dependencies(method_name, path_argument, path_node) {\\n    const expressionRegister = Poly.expressionsRegister;\\n    const method_constructor = expressionRegister.getMethod(method_name);\\n    if (!method_constructor) {\\n      const available_methods = expressionRegister.availableMethods();\\n      const message = `method not found (${method_name}), available methods are: ${available_methods.join(\\\\\\\", \\\\\\\")}`;\\n      this.set_error(message);\\n      Poly.warn(message);\\n      return;\\n    }\\n    const method = new method_constructor(this.param);\\n    this.method_index += 1;\\n    this.methods[this.method_index] = method;\\n    if (method.require_dependency()) {\\n      const method_dependency = method.findDependency(path_argument);\\n      if (method_dependency) {\\n        if (path_node) {\\n          method_dependency.set_jsep_node(path_node);\\n        }\\n        this.method_dependencies.push(method_dependency);\\n      } else {\\n        if (path_node && CoreType.isString(path_argument)) {\\n          this.param.scene().missingExpressionReferencesController.register(this.param, path_argument);\\n        }\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/traversers/ExpressionStringGenerator.ts\\nvar ARGUMENTS_SEPARATOR2 = \\\\\\\", \\\\\\\";\\nvar ExpressionStringGenerator = class extends BaseTraverser {\\n  constructor(param) {\\n    super(param);\\n    this.param = param;\\n  }\\n  parse_tree(parsed_tree) {\\n    if (parsed_tree.error_message == null && parsed_tree.node) {\\n      try {\\n        return this.traverse_node(parsed_tree.node);\\n      } catch (e) {\\n        this.set_error(\\\\\\\"could not traverse tree\\\\\\\");\\n      }\\n    } else {\\n      this.set_error(\\\\\\\"cannot parse tree\\\\\\\");\\n    }\\n  }\\n  traverse_CallExpression(node) {\\n    const method_arguments = node.arguments.map((arg) => {\\n      return this.traverse_node(arg);\\n    });\\n    const arguments_joined = `${method_arguments.join(ARGUMENTS_SEPARATOR2)}`;\\n    const method_name = node.callee.name;\\n    return `${method_name}(${arguments_joined})`;\\n  }\\n  traverse_UnaryExpression(node) {\\n    return `${node.operator}${this.traverse_node(node.argument)}`;\\n  }\\n  traverse_Identifier(node) {\\n    return `${node.name}`;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/DependenciesController.ts\\nvar DependenciesController = class {\\n  constructor(param) {\\n    this.param = param;\\n    this.cyclic_graph_detected = false;\\n    this.method_dependencies = [];\\n  }\\n  set_error(message) {\\n    this.error_message = this.error_message || message;\\n  }\\n  reset() {\\n    this.param.graphDisconnectPredecessors();\\n    this.method_dependencies.forEach((method_dependency) => {\\n      method_dependency.reset();\\n    });\\n    this.method_dependencies = [];\\n  }\\n  update(function_generator) {\\n    this.cyclic_graph_detected = false;\\n    this.connect_immutable_dependencies(function_generator);\\n    this.method_dependencies = function_generator.method_dependencies;\\n    this.handle_method_dependencies();\\n    this.listen_for_name_changes();\\n  }\\n  connect_immutable_dependencies(function_generator) {\\n    function_generator.immutable_dependencies.forEach((dependency) => {\\n      if (this.cyclic_graph_detected == false) {\\n        if (this.param.addGraphInput(dependency) == false) {\\n          this.cyclic_graph_detected = true;\\n          this.set_error(\\\\\\\"cannot create expression, infinite graph detected\\\\\\\");\\n          this.reset();\\n          return;\\n        }\\n      }\\n    });\\n  }\\n  handle_method_dependencies() {\\n    this.method_dependencies.forEach((method_dependency) => {\\n      if (this.cyclic_graph_detected == false) {\\n        this.handle_method_dependency(method_dependency);\\n      }\\n    });\\n  }\\n  handle_method_dependency(method_dependency) {\\n    const node_simple = method_dependency.resolved_graph_node;\\n    if (node_simple) {\\n      if (!this.param.addGraphInput(node_simple)) {\\n        this.cyclic_graph_detected = true;\\n        this.set_error(\\\\\\\"cannot create expression, infinite graph detected\\\\\\\");\\n        this.reset();\\n        return;\\n      }\\n    }\\n  }\\n  listen_for_name_changes() {\\n    this.method_dependencies.forEach((method_dependency) => {\\n      method_dependency.listen_for_name_changes();\\n    });\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/expressions/ExpressionManager.ts\\nvar ExpressionManager = class {\\n  constructor(param) {\\n    this.param = param;\\n    this.parse_completed = false;\\n    this.parse_started = false;\\n    this.parsed_tree = new ParsedTree();\\n    this._functionGenerator = new FunctionGenerator(this.param);\\n    this.dependencies_controller = new DependenciesController(this.param);\\n  }\\n  parseExpression(expression) {\\n    if (this.parse_started) {\\n      throw new Error(`parse in progress for param ${this.param.path()}`);\\n    }\\n    this.parse_started = true;\\n    this.parse_completed = false;\\n    this.parsed_tree = this.parsed_tree || new ParsedTree();\\n    this.reset();\\n    if (this.param.type() == ParamType.STRING) {\\n      this.parsed_tree.parse_expression_for_string_param(expression);\\n    } else {\\n      this.parsed_tree.parse_expression(expression);\\n    }\\n    this._functionGenerator.parse_tree(this.parsed_tree);\\n    if (this._functionGenerator.error_message() == null) {\\n      this.dependencies_controller.update(this._functionGenerator);\\n      if (this.dependencies_controller.error_message) {\\n        this.param.states.error.set(this.dependencies_controller.error_message);\\n      } else {\\n        this.parse_completed = true;\\n        this.parse_started = false;\\n      }\\n    }\\n  }\\n  async computeFunction() {\\n    if (this._computeAllowed()) {\\n      try {\\n        const new_value = await this._functionGenerator.evalFunction();\\n        return new_value;\\n      } catch (e) {\\n        return;\\n      }\\n    } else {\\n      return new Promise((resolve, reject) => {\\n        resolve(null);\\n      });\\n    }\\n  }\\n  reset() {\\n    this.parse_completed = false;\\n    this.parse_started = false;\\n    this.dependencies_controller.reset();\\n    this._functionGenerator.reset();\\n  }\\n  is_errored() {\\n    return this._functionGenerator.is_errored();\\n  }\\n  error_message() {\\n    return this._functionGenerator.error_message();\\n  }\\n  _computeAllowed() {\\n    return this._functionGenerator.evalAllowed();\\n  }\\n  updateFromMethodDependencyNameChange() {\\n    this.expression_string_generator = this.expression_string_generator || new ExpressionStringGenerator(this.param);\\n    const new_expression_string = this.expression_string_generator.parse_tree(this.parsed_tree);\\n    if (new_expression_string) {\\n      this.param.set(new_expression_string);\\n    } else {\\n      console.warn(\\\\\\\"failed to regenerate expression\\\\\\\");\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/utils/ExpressionController.ts\\nvar ExpressionController = class {\\n  constructor(param) {\\n    this.param = param;\\n  }\\n  dispose() {\\n    this.param.scene().expressionsController.deregisterParam(this.param);\\n    this._resetMethodDependencies();\\n  }\\n  _resetMethodDependencies() {\\n    this._method_dependencies_by_graph_node_id?.forEach((method_dependency) => {\\n      method_dependency.dispose();\\n    });\\n    this._method_dependencies_by_graph_node_id?.clear();\\n  }\\n  registerMethodDependency(method_dependency) {\\n    this._method_dependencies_by_graph_node_id = this._method_dependencies_by_graph_node_id || new Map();\\n    this._method_dependencies_by_graph_node_id.set(method_dependency.graphNodeId(), method_dependency);\\n  }\\n  active() {\\n    return this._expression != null;\\n  }\\n  expression() {\\n    return this._expression;\\n  }\\n  is_errored() {\\n    if (this._manager) {\\n      return this._manager.is_errored();\\n    }\\n    return false;\\n  }\\n  error_message() {\\n    if (this._manager) {\\n      return this._manager.error_message();\\n    }\\n    return null;\\n  }\\n  requires_entities() {\\n    return this.param.options.isExpressionForEntities();\\n  }\\n  set_expression(expression, set_dirty = true) {\\n    this.param.scene().missingExpressionReferencesController.deregisterParam(this.param);\\n    this.param.scene().expressionsController.deregisterParam(this.param);\\n    if (this._expression != expression) {\\n      this._resetMethodDependencies();\\n      this._expression = expression;\\n      if (this._expression) {\\n        this._manager = this._manager || new ExpressionManager(this.param);\\n        this._manager.parseExpression(this._expression);\\n      } else {\\n        this._manager?.reset();\\n      }\\n      if (set_dirty) {\\n        this.param.setDirty();\\n      }\\n    }\\n  }\\n  updateFromMethodDependencyNameChange() {\\n    if (this._manager && this.active()) {\\n      this._manager.updateFromMethodDependencyNameChange();\\n    }\\n  }\\n  async computeExpression() {\\n    if (this._manager && this.active()) {\\n      const result = await this._manager.computeFunction();\\n      return result;\\n    }\\n  }\\n  async computeExpressionForEntities(entities, callback) {\\n    this.set_entities(entities, callback);\\n    await this.computeExpression();\\n    if (this._manager?.error_message()) {\\n      this.param.node.states.error.set(`expression evalution error: ${this._manager?.error_message()}`);\\n    }\\n    this.reset_entities();\\n  }\\n  computeExpressionForPoints(entities, callback) {\\n    return this.computeExpressionForEntities(entities, callback);\\n  }\\n  computeExpressionForObjects(entities, callback) {\\n    return this.computeExpressionForEntities(entities, callback);\\n  }\\n  entities() {\\n    return this._entities;\\n  }\\n  entity_callback() {\\n    return this._entity_callback;\\n  }\\n  set_entities(entities, callback) {\\n    this._entities = entities;\\n    this._entity_callback = callback;\\n  }\\n  reset_entities() {\\n    this._entities = void 0;\\n    this._entity_callback = void 0;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/_Numeric.ts\\nvar TypedNumericParam = class extends TypedParam {\\n  isNumeric() {\\n    return true;\\n  }\\n  isDefault() {\\n    return this._raw_input == this._default_value;\\n  }\\n  _prefilter_invalid_raw_input(raw_input) {\\n    if (CoreType.isArray(raw_input)) {\\n      return raw_input[0];\\n    } else {\\n      return raw_input;\\n    }\\n  }\\n  processRawInput() {\\n    this.states.error.clear();\\n    const converted = this.convert(this._raw_input);\\n    if (converted != null) {\\n      if (this._expression_controller) {\\n        this._expression_controller.set_expression(void 0, false);\\n        this.emitController.emit(ParamEvent.EXPRESSION_UPDATED);\\n      }\\n      if (converted != this._value) {\\n        this._update_value(converted);\\n        this.setSuccessorsDirty(this);\\n      }\\n    } else {\\n      if (CoreType.isString(this._raw_input)) {\\n        this._expression_controller = this._expression_controller || new ExpressionController(this);\\n        if (this._raw_input != this._expression_controller.expression()) {\\n          this._expression_controller.set_expression(this._raw_input);\\n          this.emitController.emit(ParamEvent.EXPRESSION_UPDATED);\\n        }\\n      } else {\\n        this.states.error.set(`param input is invalid (${this.path()})`);\\n      }\\n    }\\n  }\\n  async processComputation() {\\n    if (this.expressionController?.active() && !this.expressionController.requires_entities()) {\\n      const expression_result = await this.expressionController.computeExpression();\\n      if (this.expressionController.is_errored()) {\\n        this.states.error.set(`expression error: \\\\\\\"${this.expressionController.expression()}\\\\\\\" (${this.expressionController.error_message()})`);\\n      } else {\\n        const converted = this.convert(expression_result);\\n        if (converted != null) {\\n          if (this.states.error.active()) {\\n            this.states.error.clear();\\n          }\\n          this._update_value(converted);\\n        } else {\\n          this.states.error.set(`expression returns an invalid type (${expression_result}) (${this.expressionController.expression()})`);\\n        }\\n      }\\n    }\\n  }\\n  _update_value(new_value) {\\n    this._value = new_value;\\n    if (this.parent_param) {\\n      this.parent_param.set_value_from_components();\\n    }\\n    this.options.executeCallback();\\n    this.emitController.emit(ParamEvent.VALUE_UPDATED);\\n    this.removeDirtyState();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Boolean.ts\\nvar BooleanParam = class extends TypedNumericParam {\\n  static type() {\\n    return ParamType.BOOLEAN;\\n  }\\n  defaultValueSerialized() {\\n    if (CoreType.isString(this._default_value)) {\\n      return this._default_value;\\n    } else {\\n      return this.convert(this._default_value) || false;\\n    }\\n  }\\n  rawInputSerialized() {\\n    return this._raw_input;\\n  }\\n  valueSerialized() {\\n    return this.value;\\n  }\\n  _copy_value(param) {\\n    this.set(param.value);\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return raw_input1 == raw_input2;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1 == val2;\\n  }\\n  convert(raw_val) {\\n    if (CoreType.isBoolean(raw_val)) {\\n      return raw_val;\\n    } else {\\n      if (CoreType.isNumber(raw_val)) {\\n        return raw_val >= 1;\\n      } else {\\n        if (CoreType.isString(raw_val)) {\\n          if (CoreString.isBoolean(raw_val)) {\\n            return CoreString.toBoolean(raw_val);\\n          } else {\\n            if (CoreString.isNumber(raw_val)) {\\n              const parsed = parseFloat(raw_val);\\n              return parsed >= 1;\\n            }\\n          }\\n        }\\n      }\\n    }\\n    return null;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Button.ts\\nvar ButtonParam = class extends TypedParam {\\n  static type() {\\n    return ParamType.BUTTON;\\n  }\\n  defaultValueSerialized() {\\n    return this._default_value;\\n  }\\n  rawInputSerialized() {\\n    return this._raw_input;\\n  }\\n  valueSerialized() {\\n    return this.value;\\n  }\\n  _copy_value(param) {\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return true;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return true;\\n  }\\n  async pressButton() {\\n    if (this.node.isDirty() || this.node.cookController.isCooking()) {\\n      await this.node.compute();\\n    }\\n    this.options.executeCallback();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Float.ts\\nvar FloatParam = class extends TypedNumericParam {\\n  static type() {\\n    return ParamType.FLOAT;\\n  }\\n  defaultValueSerialized() {\\n    return this._default_value;\\n  }\\n  rawInputSerialized() {\\n    return this._raw_input;\\n  }\\n  valueSerialized() {\\n    return this.value;\\n  }\\n  _copy_value(param) {\\n    this.set(param.valueSerialized());\\n  }\\n  _prefilter_invalid_raw_input(raw_input) {\\n    if (CoreType.isArray(raw_input)) {\\n      return raw_input[0];\\n    }\\n    if (CoreType.isString(raw_input) && CoreString.isNumber(raw_input)) {\\n      return parseFloat(raw_input);\\n    }\\n    return raw_input;\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return raw_input1 == raw_input2;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1 == val2;\\n  }\\n  static convert(raw_val) {\\n    if (CoreType.isNumber(raw_val)) {\\n      return raw_val;\\n    } else {\\n      if (CoreType.isBoolean(raw_val)) {\\n        return raw_val ? 1 : 0;\\n      } else {\\n        if (CoreString.isNumber(raw_val)) {\\n          const parsed = parseFloat(raw_val);\\n          if (CoreType.isNumber(parsed)) {\\n            return parsed;\\n          }\\n        }\\n      }\\n      return null;\\n    }\\n  }\\n  convert(raw_val) {\\n    const result = FloatParam.convert(raw_val);\\n    if (result) {\\n      return this.options.ensureInRange(result);\\n    } else {\\n      return result;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/_Multiple.ts\\nvar TypedMultipleParam = class extends TypedParam {\\n  constructor() {\\n    super(...arguments);\\n    this._components_contructor = FloatParam;\\n  }\\n  get components() {\\n    return this._components;\\n  }\\n  isNumeric() {\\n    return true;\\n  }\\n  isDefault() {\\n    for (let c of this.components) {\\n      if (!c.isDefault()) {\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n  rawInput() {\\n    return this._components.map((c) => c.rawInput());\\n  }\\n  rawInputSerialized() {\\n    return this._components.map((c) => c.rawInputSerialized());\\n  }\\n  _copy_value(param) {\\n    for (let i = 0; i < this.components.length; i++) {\\n      const component = this.components[i];\\n      const src_component = param.components[i];\\n      component.copy_value(src_component);\\n    }\\n  }\\n  initComponents() {\\n    if (this._components != null) {\\n      return;\\n    }\\n    let index = 0;\\n    this._components = new Array(this.componentNames().length);\\n    for (let component_name of this.componentNames()) {\\n      const component = new this._components_contructor(this.scene(), this._node);\\n      let default_val;\\n      if (CoreType.isArray(this._default_value)) {\\n        default_val = this._default_value[index];\\n      } else {\\n        default_val = this._default_value[component_name];\\n      }\\n      component.options.copy(this.options);\\n      component.setInitValue(default_val);\\n      component.setName(`${this.name()}${component_name}`);\\n      component.set_parent_param(this);\\n      this._components[index] = component;\\n      index++;\\n    }\\n  }\\n  async processComputation() {\\n    await this.compute_components();\\n    this.set_value_from_components();\\n  }\\n  set_value_from_components() {\\n  }\\n  hasExpression() {\\n    for (let c of this.components) {\\n      if (c.expressionController?.active()) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  }\\n  async compute_components() {\\n    const components = this.components;\\n    const promises = [];\\n    for (let c of components) {\\n      if (c.isDirty()) {\\n        promises.push(c.compute());\\n      }\\n    }\\n    await Promise.all(promises);\\n    this.removeDirtyState();\\n  }\\n  _prefilter_invalid_raw_input(raw_input) {\\n    if (!CoreType.isArray(raw_input)) {\\n      const number_or_string = raw_input;\\n      const raw_input_wrapped_in_array = this.componentNames().map(() => number_or_string);\\n      return raw_input_wrapped_in_array;\\n    } else {\\n      return raw_input;\\n    }\\n  }\\n  processRawInput() {\\n    const cooker = this.scene().cooker;\\n    cooker.block();\\n    const components = this.components;\\n    for (let c of components) {\\n      c.emitController.blockParentEmit();\\n    }\\n    const value = this._raw_input;\\n    let prev_value = 0;\\n    if (CoreType.isArray(value)) {\\n      for (let i = 0; i < components.length; i++) {\\n        let component_value = value[i];\\n        if (component_value == null) {\\n          component_value = prev_value;\\n        }\\n        components[i].set(component_value);\\n        prev_value = component_value;\\n      }\\n    } else {\\n      for (let i = 0; i < components.length; i++) {\\n        const component_name = this.componentNames()[i];\\n        let component_value = value[component_name];\\n        if (component_value == null) {\\n          component_value = prev_value;\\n        }\\n        components[i].set(component_value);\\n        prev_value = component_value;\\n      }\\n    }\\n    cooker.unblock();\\n    for (let i = 0; i < components.length; i++) {\\n      components[i].emitController.unblockParentEmit();\\n    }\\n    this.emitController.emit(ParamEvent.VALUE_UPDATED);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/Color.ts\\nvar ColorConversion;\\n(function(ColorConversion2) {\\n  ColorConversion2[\\\\\\\"NONE\\\\\\\"] = \\\\\\\"no conversion\\\\\\\";\\n  ColorConversion2[\\\\\\\"GAMMA_TO_LINEAR\\\\\\\"] = \\\\\\\"gamma -> linear\\\\\\\";\\n  ColorConversion2[\\\\\\\"LINEAR_TO_GAMMA\\\\\\\"] = \\\\\\\"linear -> gamma\\\\\\\";\\n  ColorConversion2[\\\\\\\"SRGB_TO_LINEAR\\\\\\\"] = \\\\\\\"sRGB -> linear\\\\\\\";\\n  ColorConversion2[\\\\\\\"LINEAR_TO_SRGB\\\\\\\"] = \\\\\\\"linear -> sRGB\\\\\\\";\\n})(ColorConversion || (ColorConversion = {}));\\nvar COLOR_CONVERSIONS = [\\n  ColorConversion.NONE,\\n  ColorConversion.GAMMA_TO_LINEAR,\\n  ColorConversion.LINEAR_TO_GAMMA,\\n  ColorConversion.SRGB_TO_LINEAR,\\n  ColorConversion.LINEAR_TO_SRGB\\n];\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Color.ts\\nvar COMPONENT_NAMES_COLOR = [\\\\\\\"r\\\\\\\", \\\\\\\"g\\\\\\\", \\\\\\\"b\\\\\\\"];\\nvar ColorParam = class extends TypedMultipleParam {\\n  constructor() {\\n    super(...arguments);\\n    this._value = new Color();\\n    this._value_pre_conversion = new Color();\\n    this._value_serialized_dirty = false;\\n    this._value_serialized = [0, 0, 0];\\n    this._value_pre_conversion_serialized = [0, 0, 0];\\n    this._copied_value = [0, 0, 0];\\n  }\\n  static type() {\\n    return ParamType.COLOR;\\n  }\\n  componentNames() {\\n    return COMPONENT_NAMES_COLOR;\\n  }\\n  defaultValueSerialized() {\\n    if (CoreType.isArray(this._default_value)) {\\n      return this._default_value;\\n    } else {\\n      return this._default_value.toArray();\\n    }\\n  }\\n  valueSerialized() {\\n    this._update_value_serialized_if_required();\\n    return this._value_serialized;\\n  }\\n  valuePreConversionSerialized() {\\n    this._update_value_serialized_if_required();\\n    return this._value_pre_conversion_serialized;\\n  }\\n  _copy_value(param) {\\n    param.value.toArray(this._copied_value);\\n    this.set(this._copied_value);\\n  }\\n  _clone_raw_input(raw_input) {\\n    if (raw_input instanceof Color) {\\n      return raw_input.clone();\\n    } else {\\n      const new_array = [raw_input[0], raw_input[1], raw_input[2]];\\n      if (new_array[0] == null) {\\n        new_array[0] = new_array[0] || 0;\\n      }\\n      if (new_array[1] == null) {\\n        new_array[1] = new_array[1] || new_array[0];\\n      }\\n      if (new_array[2] == null) {\\n        new_array[2] = new_array[2] || new_array[1];\\n      }\\n      return new_array;\\n    }\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    if (raw_input1 instanceof Color) {\\n      if (raw_input2 instanceof Color) {\\n        return raw_input1.equals(raw_input2);\\n      } else {\\n        return raw_input1.r == raw_input2[0] && raw_input1.g == raw_input2[1] && raw_input1.b == raw_input2[2];\\n      }\\n    } else {\\n      if (raw_input2 instanceof Color) {\\n        return raw_input1[0] == raw_input2.r && raw_input1[1] == raw_input2.g && raw_input1[2] == raw_input2.b;\\n      } else {\\n        return raw_input1[0] == raw_input2[0] && raw_input1[1] == raw_input2[1] && raw_input1[2] == raw_input2[2];\\n      }\\n    }\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1.equals(val2);\\n  }\\n  initComponents() {\\n    super.initComponents();\\n    this.r = this.components[0];\\n    this.g = this.components[1];\\n    this.b = this.components[2];\\n    this._value_serialized_dirty = true;\\n  }\\n  _update_value_serialized_if_required() {\\n    if (!this._value_serialized_dirty) {\\n      return;\\n    }\\n    this._value_serialized[0] = this._value.r;\\n    this._value_serialized[1] = this._value.g;\\n    this._value_serialized[2] = this._value.b;\\n    this._value_pre_conversion_serialized[0] = this._value_pre_conversion.r;\\n    this._value_pre_conversion_serialized[1] = this._value_pre_conversion.g;\\n    this._value_pre_conversion_serialized[2] = this._value_pre_conversion.b;\\n  }\\n  valuePreConversion() {\\n    return this._value_pre_conversion;\\n  }\\n  set_value_from_components() {\\n    this._value_pre_conversion.r = this.r.value;\\n    this._value_pre_conversion.g = this.g.value;\\n    this._value_pre_conversion.b = this.b.value;\\n    this._value.copy(this._value_pre_conversion);\\n    const conversion = this.options.colorConversion();\\n    if (conversion != null && conversion != ColorConversion.NONE) {\\n      switch (conversion) {\\n        case ColorConversion.GAMMA_TO_LINEAR: {\\n          this._value.convertGammaToLinear();\\n          return;\\n        }\\n        case ColorConversion.LINEAR_TO_GAMMA: {\\n          this._value.convertLinearToGamma();\\n          return;\\n        }\\n        case ColorConversion.SRGB_TO_LINEAR: {\\n          this._value.convertSRGBToLinear();\\n          return;\\n        }\\n        case ColorConversion.LINEAR_TO_SRGB: {\\n          this._value.convertLinearToSRGB();\\n          return;\\n        }\\n      }\\n      TypeAssert.unreachable(conversion);\\n    }\\n    this._value_serialized_dirty = true;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Folder.ts\\nvar FolderParam = class extends TypedParam {\\n  static type() {\\n    return ParamType.FOLDER;\\n  }\\n  defaultValueSerialized() {\\n    return this._default_value;\\n  }\\n  rawInputSerialized() {\\n    return this._raw_input;\\n  }\\n  valueSerialized() {\\n    return this.value;\\n  }\\n  _copy_value(param) {\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return true;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return true;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Integer.ts\\nvar IntegerParam = class extends TypedNumericParam {\\n  static type() {\\n    return ParamType.INTEGER;\\n  }\\n  defaultValueSerialized() {\\n    return this._default_value;\\n  }\\n  rawInputSerialized() {\\n    return this._raw_input;\\n  }\\n  valueSerialized() {\\n    return this.value;\\n  }\\n  _copy_value(param) {\\n    this.set(param.valueSerialized());\\n  }\\n  _prefilter_invalid_raw_input(raw_input) {\\n    if (CoreType.isArray(raw_input)) {\\n      return raw_input[0];\\n    }\\n    if (CoreType.isString(raw_input) && CoreString.isNumber(raw_input)) {\\n      return parseInt(raw_input);\\n    }\\n    return raw_input;\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return raw_input1 == raw_input2;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1 == val2;\\n  }\\n  static convert(raw_val) {\\n    if (CoreType.isNumber(raw_val)) {\\n      return Math.round(raw_val);\\n    } else {\\n      if (CoreType.isBoolean(raw_val)) {\\n        return raw_val ? 1 : 0;\\n      } else {\\n        if (CoreString.isNumber(raw_val)) {\\n          const parsed = parseInt(raw_val);\\n          if (CoreType.isNumber(parsed)) {\\n            return parsed;\\n          }\\n        }\\n      }\\n      return null;\\n    }\\n  }\\n  convert(raw_val) {\\n    const result = IntegerParam.convert(raw_val);\\n    if (result) {\\n      return this.options.ensureInRange(result);\\n    } else {\\n      return result;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/DecomposedPath.ts\\nvar DecomposedPath = class {\\n  constructor() {\\n    this._index = -1;\\n    this._path_elements = [];\\n    this._named_nodes = [];\\n    this._graph_node_ids = [];\\n    this._node_element_by_graph_node_id = new Map();\\n  }\\n  reset() {\\n    this._index = -1;\\n    this._path_elements = [];\\n    this._named_nodes = [];\\n    this._graph_node_ids = [];\\n    this._node_element_by_graph_node_id.clear();\\n  }\\n  add_node(name, node) {\\n    this._index += 1;\\n    if (name == node.name()) {\\n      this._named_nodes[this._index] = node;\\n    }\\n    this._graph_node_ids[this._index] = node.graphNodeId();\\n    this._node_element_by_graph_node_id.set(node.graphNodeId(), name);\\n  }\\n  add_path_element(path_element) {\\n    this._index += 1;\\n    this._path_elements[this._index] = path_element;\\n  }\\n  named_graph_nodes() {\\n    return this._named_nodes;\\n  }\\n  named_nodes() {\\n    const nodes = [];\\n    for (let graph_node of this._named_nodes) {\\n      if (graph_node) {\\n        const node = graph_node;\\n        if (node.nameController) {\\n          nodes.push(node);\\n        }\\n      }\\n    }\\n    return nodes;\\n  }\\n  update_from_name_change(node) {\\n    const named_graph_node_ids = this._named_nodes.map((n) => n?.graphNodeId());\\n    if (named_graph_node_ids.includes(node.graphNodeId())) {\\n      this._node_element_by_graph_node_id.set(node.graphNodeId(), node.name());\\n    }\\n  }\\n  to_path() {\\n    const elements = new Array(this._index);\\n    for (let i = 0; i <= this._index; i++) {\\n      const node = this._named_nodes[i];\\n      if (node) {\\n        const node_name = this._node_element_by_graph_node_id.get(node.graphNodeId());\\n        if (node_name) {\\n          elements[i] = node_name;\\n        }\\n      } else {\\n        const path_element = this._path_elements[i];\\n        if (path_element) {\\n          elements[i] = path_element;\\n        }\\n      }\\n    }\\n    let joined_path = elements.join(CoreWalker.SEPARATOR);\\n    const first_char = joined_path[0];\\n    if (first_char) {\\n      if (!CoreWalker.NON_LETTER_PREFIXES.includes(first_char)) {\\n        joined_path = `${CoreWalker.SEPARATOR}${joined_path}`;\\n      }\\n    }\\n    return joined_path;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/_BasePath.ts\\nvar TypedPathParam = class extends TypedParam {\\n  constructor() {\\n    super(...arguments);\\n    this.decomposed_path = new DecomposedPath();\\n  }\\n  _handleReferences(node, path) {\\n    this.scene().referencesController.setNamedNodesFromParam(this);\\n    if (node) {\\n      this.scene().referencesController.setReferenceFromParam(this, node);\\n    } else {\\n      this.scene().missingExpressionReferencesController.register(this, path);\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/OperatorPath.ts\\nvar OperatorPathMode;\\n(function(OperatorPathMode2) {\\n  OperatorPathMode2[\\\\\\\"NODE\\\\\\\"] = \\\\\\\"NODE\\\\\\\";\\n  OperatorPathMode2[\\\\\\\"PARAM\\\\\\\"] = \\\\\\\"PARAM\\\\\\\";\\n})(OperatorPathMode || (OperatorPathMode = {}));\\nvar OperatorPathParam = class extends TypedPathParam {\\n  constructor() {\\n    super(...arguments);\\n    this._found_node = null;\\n    this._found_node_with_expected_type = null;\\n    this._found_param = null;\\n    this._found_param_with_expected_type = null;\\n  }\\n  static type() {\\n    return ParamType.OPERATOR_PATH;\\n  }\\n  defaultValueSerialized() {\\n    return this._default_value;\\n  }\\n  rawInputSerialized() {\\n    return `${this._raw_input}`;\\n  }\\n  valueSerialized() {\\n    return `${this.value}`;\\n  }\\n  _copy_value(param) {\\n    this.set(param.valueSerialized());\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return raw_input1 == raw_input2;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1 == val2;\\n  }\\n  isDefault() {\\n    return this._value == this._default_value;\\n  }\\n  setNode(node) {\\n    this.set(node.path());\\n  }\\n  processRawInput() {\\n    if (this._value != this._raw_input) {\\n      this._value = this._raw_input;\\n      this.setDirty();\\n      this.emitController.emit(ParamEvent.VALUE_UPDATED);\\n    }\\n  }\\n  async processComputation() {\\n    this.find_target();\\n  }\\n  find_target() {\\n    if (!this.node) {\\n      return;\\n    }\\n    const path = this._value;\\n    let node = null;\\n    let param = null;\\n    const path_non_empty = path != null && path !== \\\\\\\"\\\\\\\";\\n    const mode = this.options.paramSelectionOptions() ? OperatorPathMode.PARAM : OperatorPathMode.NODE;\\n    this.scene().referencesController.resetReferenceFromParam(this);\\n    this.decomposed_path.reset();\\n    if (path_non_empty) {\\n      if (mode == OperatorPathMode.PARAM) {\\n        param = CoreWalker.findParam(this.node, path, this.decomposed_path);\\n      } else {\\n        node = CoreWalker.findNode(this.node, path, this.decomposed_path);\\n      }\\n    }\\n    const current_found_entity = mode == OperatorPathMode.PARAM ? this._found_param : this._found_node;\\n    const newly_found_entity = mode == OperatorPathMode.PARAM ? param : node;\\n    this._handleReferences(node, path);\\n    if (current_found_entity?.graphNodeId() !== newly_found_entity?.graphNodeId()) {\\n      const dependent_on_found_node = this.options.dependentOnFoundNode();\\n      if (this._found_node) {\\n        if (dependent_on_found_node) {\\n          this.removeGraphInput(this._found_node);\\n        } else {\\n        }\\n      }\\n      if (mode == OperatorPathMode.PARAM) {\\n        this._found_param = param;\\n        this._found_node = null;\\n      } else {\\n        this._found_node = node;\\n        this._found_param = null;\\n      }\\n      if (node) {\\n        this._assign_found_node(node);\\n      }\\n      if (param) {\\n        this._assign_found_param(param);\\n      }\\n      this.options.executeCallback();\\n    }\\n    this.removeDirtyState();\\n  }\\n  _assign_found_node(node) {\\n    const dependent_on_found_node = this.options.dependentOnFoundNode();\\n    if (this._is_node_expected_context(node)) {\\n      if (this._is_node_expected_type(node)) {\\n        this._found_node_with_expected_type = node;\\n        if (dependent_on_found_node) {\\n          this.addGraphInput(node);\\n        }\\n      } else {\\n        this.states.error.set(`node type is ${node.type()} but the params expects one of ${(this._expected_node_types() || []).join(\\\\\\\", \\\\\\\")}`);\\n      }\\n    } else {\\n      this.states.error.set(`node context is ${node.context()} but the params expects a ${this._expected_context()}`);\\n    }\\n  }\\n  _assign_found_param(param) {\\n    if (this._is_param_expected_type(param)) {\\n      this._found_param_with_expected_type = param;\\n    } else {\\n      this.states.error.set(`param type is ${param.type()} but the params expects a ${this._expected_param_type()}`);\\n    }\\n  }\\n  found_node() {\\n    return this._found_node;\\n  }\\n  found_param() {\\n    return this._found_param;\\n  }\\n  found_node_with_context(context) {\\n    return this._found_node_with_expected_type;\\n  }\\n  found_node_with_context_and_type(context, type_or_types) {\\n    const node = this.found_node_with_context(context);\\n    if (node) {\\n      if (CoreType.isArray(type_or_types)) {\\n        for (let type of type_or_types) {\\n          if (node.type() == type) {\\n            return node;\\n          }\\n        }\\n        this.states.error.set(`expected node type to be ${type_or_types.join(\\\\\\\", \\\\\\\")}, but was instead ${node.type()}`);\\n      } else {\\n        const type = type_or_types;\\n        if (node.type() == type) {\\n          return node;\\n        } else {\\n          this.states.error.set(`expected node type to be ${type}, but was instead ${node.type()}`);\\n        }\\n      }\\n    }\\n  }\\n  found_param_with_type(type) {\\n    if (this._found_param_with_expected_type) {\\n      return this._found_param_with_expected_type;\\n    }\\n  }\\n  found_node_with_expected_type() {\\n    return this._found_node_with_expected_type;\\n  }\\n  _expected_context() {\\n    return this.options.nodeSelectionContext();\\n  }\\n  _is_node_expected_context(node) {\\n    const expected_context = this._expected_context();\\n    if (expected_context == null) {\\n      return true;\\n    }\\n    const node_context = node.parent()?.childrenController?.context;\\n    return expected_context == node_context;\\n  }\\n  _expected_node_types() {\\n    return this.options.nodeSelectionTypes();\\n  }\\n  _expected_param_type() {\\n    return this.options.paramSelectionType();\\n  }\\n  _is_node_expected_type(node) {\\n    const expected_types = this._expected_node_types();\\n    if (expected_types == null) {\\n      return true;\\n    }\\n    return expected_types?.includes(node.type());\\n  }\\n  _is_param_expected_type(param) {\\n    const expected_types = this._expected_node_types();\\n    if (expected_types == null) {\\n      return true;\\n    }\\n    return expected_types.includes(param.type());\\n  }\\n  notifyPathRebuildRequired(node) {\\n    this.decomposed_path.update_from_name_change(node);\\n    const new_path = this.decomposed_path.to_path();\\n    this.set(new_path);\\n  }\\n  notifyTargetParamOwnerParamsUpdated(node) {\\n    this.setDirty();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/ParamPath.ts\\nvar ParamPathParam = class extends TypedPathParam {\\n  static type() {\\n    return ParamType.PARAM_PATH;\\n  }\\n  initialize_param() {\\n    this._value = new TypedParamPathParamValue();\\n  }\\n  defaultValueSerialized() {\\n    return this._default_value;\\n  }\\n  rawInputSerialized() {\\n    return `${this._raw_input}`;\\n  }\\n  valueSerialized() {\\n    return `${this.value}`;\\n  }\\n  _copy_value(param) {\\n    this.set(param.valueSerialized());\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return raw_input1 == raw_input2;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1 == val2;\\n  }\\n  isDefault() {\\n    return this._raw_input == this._default_value;\\n  }\\n  setParam(param) {\\n    this.set(param.path());\\n  }\\n  processRawInput() {\\n    if (this._value.path() != this._raw_input) {\\n      this._value.set_path(this._raw_input);\\n      this.find_target();\\n      this.setDirty();\\n      this.emitController.emit(ParamEvent.VALUE_UPDATED);\\n    }\\n  }\\n  async processComputation() {\\n    this.find_target();\\n  }\\n  find_target() {\\n    if (!this.node) {\\n      return;\\n    }\\n    const path = this._raw_input;\\n    let param = null;\\n    const path_non_empty = path != null && path !== \\\\\\\"\\\\\\\";\\n    this.scene().referencesController.resetReferenceFromParam(this);\\n    this.decomposed_path.reset();\\n    if (path_non_empty) {\\n      param = CoreWalker.findParam(this.node, path, this.decomposed_path);\\n    }\\n    const current_found_entity = this._value.param();\\n    const newly_found_entity = param;\\n    this._handleReferences(param, path);\\n    if (current_found_entity?.graphNodeId() !== newly_found_entity?.graphNodeId()) {\\n      const dependent_on_found_node = this.options.dependentOnFoundNode();\\n      const previously_found_node = this._value.param();\\n      if (previously_found_node) {\\n        if (dependent_on_found_node) {\\n          this.removeGraphInput(previously_found_node);\\n        } else {\\n        }\\n      }\\n      if (param) {\\n        this._assign_found_node(param);\\n      } else {\\n        this._value.set_param(null);\\n      }\\n      this.options.executeCallback();\\n    }\\n    this.removeDirtyState();\\n  }\\n  _assign_found_node(param) {\\n    const dependent_on_found_node = this.options.dependentOnFoundNode();\\n    this._value.set_param(param);\\n    if (dependent_on_found_node) {\\n      this.addGraphInput(param);\\n    }\\n  }\\n  notifyPathRebuildRequired(param) {\\n    this.decomposed_path.update_from_name_change(param);\\n    const new_path = this.decomposed_path.to_path();\\n    this.set(new_path);\\n  }\\n  notifyTargetParamOwnerParamsUpdated(node) {\\n    this.setDirty();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/NodePath.ts\\nvar NodePathParam = class extends TypedPathParam {\\n  static type() {\\n    return ParamType.NODE_PATH;\\n  }\\n  initialize_param() {\\n    this._value = new TypedNodePathParamValue();\\n  }\\n  defaultValueSerialized() {\\n    return this._default_value;\\n  }\\n  rawInputSerialized() {\\n    return `${this._raw_input}`;\\n  }\\n  valueSerialized() {\\n    return `${this.value}`;\\n  }\\n  _copy_value(param) {\\n    this.set(param.valueSerialized());\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return raw_input1 == raw_input2;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1 == val2;\\n  }\\n  isDefault() {\\n    return this._raw_input == this._default_value;\\n  }\\n  setNode(node) {\\n    this.set(node.path());\\n  }\\n  processRawInput() {\\n    if (this._value.path() != this._raw_input) {\\n      this._value.set_path(this._raw_input);\\n      this._findTarget();\\n      this.setDirty();\\n      this.emitController.emit(ParamEvent.VALUE_UPDATED);\\n    }\\n  }\\n  async processComputation() {\\n    this._findTarget();\\n  }\\n  _findTarget() {\\n    if (!this.node) {\\n      return;\\n    }\\n    const path = this._raw_input;\\n    let node = null;\\n    const path_non_empty = path != null && path !== \\\\\\\"\\\\\\\";\\n    this.scene().referencesController.resetReferenceFromParam(this);\\n    this.decomposed_path.reset();\\n    if (path_non_empty) {\\n      node = CoreWalker.findNode(this.node, path, this.decomposed_path);\\n    }\\n    const current_found_entity = this._value.node();\\n    const newly_found_entity = node;\\n    this._handleReferences(node, path);\\n    if (current_found_entity?.graphNodeId() !== newly_found_entity?.graphNodeId()) {\\n      const dependent_on_found_node = this.options.dependentOnFoundNode();\\n      const previously_found_node = this._value.node();\\n      if (previously_found_node) {\\n        if (dependent_on_found_node) {\\n          this.removeGraphInput(previously_found_node);\\n        } else {\\n        }\\n      }\\n      if (node) {\\n        this._assign_found_node(node);\\n      } else {\\n        this._value.set_node(null);\\n      }\\n      this.options.executeCallback();\\n    }\\n    if (path_non_empty && !node && this.scene().loadingController.loaded()) {\\n      if (path_non_empty) {\\n        this.states.error.set(`no node found at path '${path}'`);\\n      }\\n    }\\n    this.removeDirtyState();\\n  }\\n  _assign_found_node(node) {\\n    const dependent_on_found_node = this.options.dependentOnFoundNode();\\n    if (this._isNodeExpectedContext(node)) {\\n      if (this._is_node_expected_type(node)) {\\n        this.states.error.clear();\\n        this._value.set_node(node);\\n        if (dependent_on_found_node) {\\n          this.addGraphInput(node);\\n        }\\n      } else {\\n        this.states.error.set(`node type is ${node.type()} but the params expects one of ${(this._expected_node_types() || []).join(\\\\\\\", \\\\\\\")}`);\\n      }\\n    } else {\\n      this.states.error.set(`node context is ${node.context()} but the params expects a ${this._expectedContext()}`);\\n    }\\n  }\\n  _expectedContext() {\\n    return this.options.nodeSelectionContext();\\n  }\\n  _isNodeExpectedContext(node) {\\n    const expected_context = this._expectedContext();\\n    if (expected_context == null) {\\n      return true;\\n    }\\n    const node_context = node.parent()?.childrenController?.context;\\n    return expected_context == node_context;\\n  }\\n  _expected_node_types() {\\n    return this.options.nodeSelectionTypes();\\n  }\\n  _is_node_expected_type(node) {\\n    const expected_types = this._expected_node_types();\\n    if (expected_types == null) {\\n      return true;\\n    }\\n    return expected_types?.includes(node.type());\\n  }\\n  notifyPathRebuildRequired(node) {\\n    this.decomposed_path.update_from_name_change(node);\\n    const newPath = this.decomposed_path.to_path();\\n    this.set(newPath);\\n  }\\n  notifyTargetParamOwnerParamsUpdated(node) {\\n    this.setDirty();\\n  }\\n};\\n\\n// ../../../node_modules/three/src/textures/DataTexture.js\\nvar DataTexture = class extends Texture {\\n  constructor(data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, encoding) {\\n    super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding);\\n    this.image = {data, width, height};\\n    this.magFilter = magFilter;\\n    this.minFilter = minFilter;\\n    this.generateMipmaps = false;\\n    this.flipY = false;\\n    this.unpackAlignment = 1;\\n    this.needsUpdate = true;\\n  }\\n};\\nDataTexture.prototype.isDataTexture = true;\\n\\n// ../../../node_modules/three/src/math/Interpolant.js\\nvar Interpolant = class {\\n  constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\\n    this.parameterPositions = parameterPositions;\\n    this._cachedIndex = 0;\\n    this.resultBuffer = resultBuffer !== void 0 ? resultBuffer : new sampleValues.constructor(sampleSize);\\n    this.sampleValues = sampleValues;\\n    this.valueSize = sampleSize;\\n    this.settings = null;\\n    this.DefaultSettings_ = {};\\n  }\\n  evaluate(t) {\\n    const pp = this.parameterPositions;\\n    let i1 = this._cachedIndex, t1 = pp[i1], t0 = pp[i1 - 1];\\n    validate_interval: {\\n      seek: {\\n        let right;\\n        linear_scan: {\\n          forward_scan:\\n            if (!(t < t1)) {\\n              for (let giveUpAt = i1 + 2; ; ) {\\n                if (t1 === void 0) {\\n                  if (t < t0)\\n                    break forward_scan;\\n                  i1 = pp.length;\\n                  this._cachedIndex = i1;\\n                  return this.afterEnd_(i1 - 1, t, t0);\\n                }\\n                if (i1 === giveUpAt)\\n                  break;\\n                t0 = t1;\\n                t1 = pp[++i1];\\n                if (t < t1) {\\n                  break seek;\\n                }\\n              }\\n              right = pp.length;\\n              break linear_scan;\\n            }\\n          if (!(t >= t0)) {\\n            const t1global = pp[1];\\n            if (t < t1global) {\\n              i1 = 2;\\n              t0 = t1global;\\n            }\\n            for (let giveUpAt = i1 - 2; ; ) {\\n              if (t0 === void 0) {\\n                this._cachedIndex = 0;\\n                return this.beforeStart_(0, t, t1);\\n              }\\n              if (i1 === giveUpAt)\\n                break;\\n              t1 = t0;\\n              t0 = pp[--i1 - 1];\\n              if (t >= t0) {\\n                break seek;\\n              }\\n            }\\n            right = i1;\\n            i1 = 0;\\n            break linear_scan;\\n          }\\n          break validate_interval;\\n        }\\n        while (i1 < right) {\\n          const mid = i1 + right >>> 1;\\n          if (t < pp[mid]) {\\n            right = mid;\\n          } else {\\n            i1 = mid + 1;\\n          }\\n        }\\n        t1 = pp[i1];\\n        t0 = pp[i1 - 1];\\n        if (t0 === void 0) {\\n          this._cachedIndex = 0;\\n          return this.beforeStart_(0, t, t1);\\n        }\\n        if (t1 === void 0) {\\n          i1 = pp.length;\\n          this._cachedIndex = i1;\\n          return this.afterEnd_(i1 - 1, t0, t);\\n        }\\n      }\\n      this._cachedIndex = i1;\\n      this.intervalChanged_(i1, t0, t1);\\n    }\\n    return this.interpolate_(i1, t0, t, t1);\\n  }\\n  getSettings_() {\\n    return this.settings || this.DefaultSettings_;\\n  }\\n  copySampleValue_(index) {\\n    const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset = index * stride;\\n    for (let i = 0; i !== stride; ++i) {\\n      result[i] = values[offset + i];\\n    }\\n    return result;\\n  }\\n  interpolate_() {\\n    throw new Error(\\\\\\\"call to abstract method\\\\\\\");\\n  }\\n  intervalChanged_() {\\n  }\\n};\\nInterpolant.prototype.beforeStart_ = Interpolant.prototype.copySampleValue_;\\nInterpolant.prototype.afterEnd_ = Interpolant.prototype.copySampleValue_;\\n\\n// ../../../node_modules/three/src/math/interpolants/CubicInterpolant.js\\nvar CubicInterpolant = class extends Interpolant {\\n  constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\\n    super(parameterPositions, sampleValues, sampleSize, resultBuffer);\\n    this._weightPrev = -0;\\n    this._offsetPrev = -0;\\n    this._weightNext = -0;\\n    this._offsetNext = -0;\\n    this.DefaultSettings_ = {\\n      endingStart: ZeroCurvatureEnding,\\n      endingEnd: ZeroCurvatureEnding\\n    };\\n  }\\n  intervalChanged_(i1, t0, t1) {\\n    const pp = this.parameterPositions;\\n    let iPrev = i1 - 2, iNext = i1 + 1, tPrev = pp[iPrev], tNext = pp[iNext];\\n    if (tPrev === void 0) {\\n      switch (this.getSettings_().endingStart) {\\n        case ZeroSlopeEnding:\\n          iPrev = i1;\\n          tPrev = 2 * t0 - t1;\\n          break;\\n        case WrapAroundEnding:\\n          iPrev = pp.length - 2;\\n          tPrev = t0 + pp[iPrev] - pp[iPrev + 1];\\n          break;\\n        default:\\n          iPrev = i1;\\n          tPrev = t1;\\n      }\\n    }\\n    if (tNext === void 0) {\\n      switch (this.getSettings_().endingEnd) {\\n        case ZeroSlopeEnding:\\n          iNext = i1;\\n          tNext = 2 * t1 - t0;\\n          break;\\n        case WrapAroundEnding:\\n          iNext = 1;\\n          tNext = t1 + pp[1] - pp[0];\\n          break;\\n        default:\\n          iNext = i1 - 1;\\n          tNext = t0;\\n      }\\n    }\\n    const halfDt = (t1 - t0) * 0.5, stride = this.valueSize;\\n    this._weightPrev = halfDt / (t0 - tPrev);\\n    this._weightNext = halfDt / (tNext - t1);\\n    this._offsetPrev = iPrev * stride;\\n    this._offsetNext = iNext * stride;\\n  }\\n  interpolate_(i1, t0, t, t1) {\\n    const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, o1 = i1 * stride, o0 = o1 - stride, oP = this._offsetPrev, oN = this._offsetNext, wP = this._weightPrev, wN = this._weightNext, p = (t - t0) / (t1 - t0), pp = p * p, ppp = pp * p;\\n    const sP = -wP * ppp + 2 * wP * pp - wP * p;\\n    const s0 = (1 + wP) * ppp + (-1.5 - 2 * wP) * pp + (-0.5 + wP) * p + 1;\\n    const s1 = (-1 - wN) * ppp + (1.5 + wN) * pp + 0.5 * p;\\n    const sN = wN * ppp - wN * pp;\\n    for (let i = 0; i !== stride; ++i) {\\n      result[i] = sP * values[oP + i] + s0 * values[o0 + i] + s1 * values[o1 + i] + sN * values[oN + i];\\n    }\\n    return result;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/ramp/RampValue.ts\\nvar RampPoint = class {\\n  constructor(_position3 = 0, _value = 0) {\\n    this._position = _position3;\\n    this._value = _value;\\n  }\\n  toJSON() {\\n    return {\\n      position: this._position,\\n      value: this._value\\n    };\\n  }\\n  position() {\\n    return this._position;\\n  }\\n  value() {\\n    return this._value;\\n  }\\n  copy(point) {\\n    this._position = point.position();\\n    this._value = point.value();\\n  }\\n  clone() {\\n    const point = new RampPoint();\\n    point.copy(this);\\n    return point;\\n  }\\n  isEqual(other_point) {\\n    return this._position == other_point.position() && this._value == other_point.value();\\n  }\\n  isEqualJSON(json) {\\n    return this._position == json.position && this._value == json.value;\\n  }\\n  fromJSON(json) {\\n    this._position = json.position;\\n    this._value = json.value;\\n  }\\n  static areEqualJSON(json1, json2) {\\n    return json1.position == json2.position && json1.value == json2.value;\\n  }\\n  static fromJSON(json) {\\n    return new RampPoint(json.position, json.value);\\n  }\\n};\\nvar RampInterpolation;\\n(function(RampInterpolation2) {\\n  RampInterpolation2[\\\\\\\"LINEAR\\\\\\\"] = \\\\\\\"linear\\\\\\\";\\n})(RampInterpolation || (RampInterpolation = {}));\\nvar RampValue = class {\\n  constructor(_interpolation = RampInterpolation.LINEAR, _points2 = []) {\\n    this._interpolation = _interpolation;\\n    this._points = _points2;\\n    this._uuid = generateUUID();\\n  }\\n  uuid() {\\n    return this._uuid;\\n  }\\n  interpolation() {\\n    return this._interpolation;\\n  }\\n  points() {\\n    return this._points;\\n  }\\n  static fromJSON(json) {\\n    const points2 = [];\\n    for (let jsonPoint of json.points) {\\n      points2.push(RampPoint.fromJSON(jsonPoint));\\n    }\\n    return new RampValue(json.interpolation, points2);\\n  }\\n  toJSON() {\\n    return {\\n      interpolation: this._interpolation,\\n      points: this._points.map((p) => p.toJSON())\\n    };\\n  }\\n  clone() {\\n    const ramp = new RampValue();\\n    ramp.copy(this);\\n    return ramp;\\n  }\\n  copy(ramp) {\\n    this._interpolation = ramp.interpolation();\\n    let index = 0;\\n    for (let point of ramp.points()) {\\n      const current_point = this._points[index];\\n      if (current_point) {\\n        current_point.copy(point);\\n      } else {\\n        this._points.push(point.clone());\\n      }\\n      index += 1;\\n    }\\n  }\\n  is_equal(other_ramp_value) {\\n    if (this._interpolation != other_ramp_value.interpolation()) {\\n      return false;\\n    }\\n    const other_points = other_ramp_value.points();\\n    if (this._points.length != other_points.length) {\\n      return false;\\n    }\\n    let index = 0;\\n    for (let point of this._points) {\\n      const other_point = other_points[index];\\n      if (!point.isEqual(other_point)) {\\n        return false;\\n      }\\n      index += 1;\\n    }\\n    return true;\\n  }\\n  is_equal_json(json) {\\n    if (this._interpolation != json.interpolation) {\\n      return false;\\n    }\\n    if (this._points.length != json.points.length) {\\n      return false;\\n    }\\n    let index = 0;\\n    for (let point of this._points) {\\n      const other_point = json.points[index];\\n      if (!point.isEqualJSON(other_point)) {\\n        return false;\\n      }\\n      index += 1;\\n    }\\n    return true;\\n  }\\n  static are_json_equal(json1, json2) {\\n    if (json1.interpolation != json2.interpolation) {\\n      return false;\\n    }\\n    if (json1.points.length != json2.points.length) {\\n      return false;\\n    }\\n    let index = 0;\\n    for (let point1 of json1.points) {\\n      const point2 = json2.points[index];\\n      if (!RampPoint.areEqualJSON(point1, point2)) {\\n        return false;\\n      }\\n      index += 1;\\n    }\\n    return true;\\n  }\\n  from_json(json) {\\n    this._interpolation = json.interpolation;\\n    let index = 0;\\n    for (let json_point of json.points) {\\n      const current_point = this._points[index];\\n      if (current_point) {\\n        current_point.fromJSON(json_point);\\n      } else {\\n        this._points.push(RampPoint.fromJSON(json_point));\\n      }\\n      index += 1;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Ramp.ts\\nvar TEXTURE_WIDTH = 1024;\\nvar TEXTURE_HEIGHT = 1;\\nvar TEXTURE_SIZE = TEXTURE_WIDTH * TEXTURE_HEIGHT;\\nvar TEXTURE_BYTES_MULT = 255;\\nvar RampParam2 = class extends TypedParam {\\n  constructor() {\\n    super(...arguments);\\n    this._texture_data = new Uint8Array(3 * TEXTURE_SIZE);\\n    this._ramp_texture = new DataTexture(this._texture_data, TEXTURE_WIDTH, TEXTURE_HEIGHT, RGBFormat);\\n  }\\n  static type() {\\n    return ParamType.RAMP;\\n  }\\n  defaultValueSerialized() {\\n    if (this._default_value instanceof RampValue) {\\n      return this._default_value.toJSON();\\n    } else {\\n      return this._default_value;\\n    }\\n  }\\n  _clone_raw_input(raw_input) {\\n    if (raw_input instanceof RampValue) {\\n      return raw_input.clone();\\n    } else {\\n      return RampValue.fromJSON(raw_input).toJSON();\\n    }\\n  }\\n  rawInputSerialized() {\\n    if (this._raw_input instanceof RampValue) {\\n      return this._raw_input.toJSON();\\n    } else {\\n      return RampValue.fromJSON(this._raw_input).toJSON();\\n    }\\n  }\\n  valueSerialized() {\\n    return this.value.toJSON();\\n  }\\n  _copy_value(param) {\\n    this.set(param.valueSerialized());\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    if (raw_input1 instanceof RampValue) {\\n      if (raw_input2 instanceof RampValue) {\\n        return raw_input1.is_equal(raw_input2);\\n      } else {\\n        return raw_input1.is_equal_json(raw_input2);\\n      }\\n    } else {\\n      if (raw_input2 instanceof RampValue) {\\n        return raw_input2.is_equal_json(raw_input1);\\n      } else {\\n        return RampValue.are_json_equal(raw_input1, raw_input2);\\n      }\\n    }\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1.is_equal(val2);\\n  }\\n  isDefault() {\\n    if (this._default_value instanceof RampValue) {\\n      return this.value.is_equal(this._default_value);\\n    } else {\\n      return this.value.is_equal_json(this._default_value);\\n    }\\n  }\\n  processRawInput() {\\n    if (this._raw_input instanceof RampValue) {\\n      if (!this._value) {\\n        this._value = this._raw_input;\\n      } else {\\n        this._value.copy(this._raw_input);\\n      }\\n    } else {\\n      if (!this._value) {\\n        this._value = RampValue.fromJSON(this._raw_input);\\n      } else {\\n        this._value.from_json(this._raw_input);\\n      }\\n    }\\n    this._resetRampInterpolant();\\n    this._updateRampTexture();\\n    this.options.executeCallback();\\n    this.emitController.emit(ParamEvent.VALUE_UPDATED);\\n    this.setSuccessorsDirty(this);\\n  }\\n  hasExpression() {\\n    return false;\\n  }\\n  _resetRampInterpolant() {\\n    this._ramp_interpolant = void 0;\\n  }\\n  rampTexture() {\\n    return this._ramp_texture;\\n  }\\n  _updateRampTexture() {\\n    this._updateRampTextureData();\\n    this.rampTexture().needsUpdate = true;\\n  }\\n  _updateRampTextureData() {\\n    let stride = 0;\\n    let position = 0;\\n    let value = 0;\\n    for (var i = 0; i < TEXTURE_SIZE; i++) {\\n      stride = i * 3;\\n      position = i / TEXTURE_WIDTH;\\n      value = this.valueAtPosition(position);\\n      if (value <= 0) {\\n        this._texture_data[stride + 0] = (clamp(value, -1, 0) + 1) * TEXTURE_BYTES_MULT;\\n        this._texture_data[stride + 1] = 0;\\n        this._texture_data[stride + 2] = 0;\\n      } else {\\n        if (value <= 1) {\\n          this._texture_data[stride + 0] = TEXTURE_BYTES_MULT;\\n          this._texture_data[stride + 1] = clamp(value, 0, 1) * TEXTURE_BYTES_MULT;\\n          this._texture_data[stride + 2] = 0;\\n        } else {\\n          this._texture_data[stride + 0] = TEXTURE_BYTES_MULT;\\n          this._texture_data[stride + 1] = TEXTURE_BYTES_MULT;\\n          this._texture_data[stride + 2] = (clamp(value, 1, 2) - 1) * TEXTURE_BYTES_MULT;\\n        }\\n      }\\n    }\\n  }\\n  static createInterpolant(positions, values) {\\n    const valuesCount = 1;\\n    const interpolatedValues = new Float32Array(valuesCount);\\n    return new CubicInterpolant(positions, values, valuesCount, interpolatedValues);\\n  }\\n  interpolant() {\\n    return this._ramp_interpolant = this._ramp_interpolant || this._createInterpolant();\\n  }\\n  _createInterpolant() {\\n    const points2 = this.value.points();\\n    const sortedPoints = ArrayUtils.sortBy(points2, (point) => point.position());\\n    const positions = new Float32Array(sortedPoints.length);\\n    const values = new Float32Array(sortedPoints.length);\\n    let i = 0;\\n    for (let sortedPoint of sortedPoints) {\\n      positions[i] = sortedPoint.position();\\n      values[i] = sortedPoint.value();\\n      i++;\\n    }\\n    return RampParam2.createInterpolant(positions, values);\\n  }\\n  valueAtPosition(position) {\\n    return this.interpolant().evaluate(position)[0];\\n  }\\n};\\nvar RampParam = RampParam2;\\nRampParam.DEFAULT_VALUE = new RampValue(RampInterpolation.LINEAR, [new RampPoint(0, 0), new RampPoint(1, 1)]);\\nRampParam.DEFAULT_VALUE_JSON = RampParam2.DEFAULT_VALUE.toJSON();\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/String.ts\\nvar StringParam = class extends TypedParam {\\n  static type() {\\n    return ParamType.STRING;\\n  }\\n  defaultValueSerialized() {\\n    return this._default_value;\\n  }\\n  _clone_raw_input(raw_input) {\\n    return `${raw_input}`;\\n  }\\n  rawInputSerialized() {\\n    return `${this._raw_input}`;\\n  }\\n  valueSerialized() {\\n    return `${this.value}`;\\n  }\\n  _copy_value(param) {\\n    this.set(param.value);\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    return raw_input1 == raw_input2;\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1 == val2;\\n  }\\n  isDefault() {\\n    return this._raw_input == this._default_value;\\n  }\\n  convert(raw_val) {\\n    if (CoreType.isString(raw_val)) {\\n      return raw_val;\\n    }\\n    return `${raw_val}`;\\n  }\\n  rawInput() {\\n    return this._raw_input;\\n  }\\n  processRawInput() {\\n    this.states.error.clear();\\n    if (this._value_elements(this._raw_input).length >= 3) {\\n      this._expression_controller = this._expression_controller || new ExpressionController(this);\\n      if (this._raw_input != this._expression_controller.expression()) {\\n        this._expression_controller.set_expression(this._raw_input);\\n        this.setDirty();\\n        this.emitController.emit(ParamEvent.EXPRESSION_UPDATED);\\n      }\\n    } else {\\n      if (this._raw_input != this._value) {\\n        this._value = this._raw_input;\\n        this.removeDirtyState();\\n        this.setSuccessorsDirty(this);\\n        this.emitController.emit(ParamEvent.VALUE_UPDATED);\\n        this.options.executeCallback();\\n        if (this._expression_controller) {\\n          this._expression_controller.set_expression(void 0, false);\\n          this.emitController.emit(ParamEvent.EXPRESSION_UPDATED);\\n        }\\n      }\\n    }\\n  }\\n  async processComputation() {\\n    if (this.expressionController?.active() && !this.expressionController.requires_entities()) {\\n      const expression_result = await this.expressionController.computeExpression();\\n      if (this.expressionController.is_errored()) {\\n        this.states.error.set(`expression error: ${this.expressionController.error_message()}`);\\n      } else {\\n        const converted = this.convert(expression_result);\\n        if (converted != null) {\\n          this._value = converted;\\n          this.emitController.emit(ParamEvent.VALUE_UPDATED);\\n          this.options.executeCallback();\\n        } else {\\n          this.states.error.set(`expression returns an invalid type (${expression_result})`);\\n        }\\n        this.removeDirtyState();\\n      }\\n    }\\n  }\\n  _value_elements(v) {\\n    return ParsedTree.string_value_elements(v);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Vector2.ts\\nvar COMPONENT_NAMES_VECTOR2 = [\\\\\\\"x\\\\\\\", \\\\\\\"y\\\\\\\"];\\nvar Vector2Param = class extends TypedMultipleParam {\\n  constructor() {\\n    super(...arguments);\\n    this._value = new Vector2();\\n    this._copied_value = [0, 0];\\n  }\\n  static type() {\\n    return ParamType.VECTOR2;\\n  }\\n  componentNames() {\\n    return COMPONENT_NAMES_VECTOR2;\\n  }\\n  defaultValueSerialized() {\\n    if (CoreType.isArray(this._default_value)) {\\n      return this._default_value;\\n    } else {\\n      return this._default_value.toArray();\\n    }\\n  }\\n  valueSerialized() {\\n    return this.value.toArray();\\n  }\\n  _copy_value(param) {\\n    param.value.toArray(this._copied_value);\\n    this.set(this._copied_value);\\n  }\\n  _clone_raw_input(raw_input) {\\n    if (raw_input instanceof Vector2) {\\n      return raw_input.clone();\\n    } else {\\n      const new_array = [raw_input[0], raw_input[1]];\\n      if (new_array[0] == null) {\\n        new_array[0] = new_array[0] || 0;\\n      }\\n      if (new_array[1] == null) {\\n        new_array[1] = new_array[1] || new_array[0];\\n      }\\n      return new_array;\\n    }\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    if (raw_input1 instanceof Vector2) {\\n      if (raw_input2 instanceof Vector2) {\\n        return raw_input1.equals(raw_input2);\\n      } else {\\n        return raw_input1.x == raw_input2[0] && raw_input1.y == raw_input2[1];\\n      }\\n    } else {\\n      if (raw_input2 instanceof Vector2) {\\n        return raw_input1[0] == raw_input2.x && raw_input1[1] == raw_input2.y;\\n      } else {\\n        return raw_input1[0] == raw_input2[0] && raw_input1[1] == raw_input2[1];\\n      }\\n    }\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1.equals(val2);\\n  }\\n  initComponents() {\\n    super.initComponents();\\n    this.x = this.components[0];\\n    this.y = this.components[1];\\n  }\\n  set_value_from_components() {\\n    this._value.x = this.x.value;\\n    this._value.y = this.y.value;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Vector3.ts\\nvar COMPONENT_NAMES_VECTOR3 = [\\\\\\\"x\\\\\\\", \\\\\\\"y\\\\\\\", \\\\\\\"z\\\\\\\"];\\nvar Vector3Param = class extends TypedMultipleParam {\\n  constructor() {\\n    super(...arguments);\\n    this._value = new Vector3();\\n    this._copied_value = [0, 0, 0];\\n  }\\n  static type() {\\n    return ParamType.VECTOR3;\\n  }\\n  componentNames() {\\n    return COMPONENT_NAMES_VECTOR3;\\n  }\\n  defaultValueSerialized() {\\n    if (CoreType.isArray(this._default_value)) {\\n      return this._default_value;\\n    } else {\\n      return this._default_value.toArray();\\n    }\\n  }\\n  valueSerialized() {\\n    return this.value.toArray();\\n  }\\n  _copy_value(param) {\\n    param.value.toArray(this._copied_value);\\n    this.set(this._copied_value);\\n  }\\n  _clone_raw_input(raw_input) {\\n    if (raw_input instanceof Vector3) {\\n      return raw_input.clone();\\n    } else {\\n      const new_array = [raw_input[0], raw_input[1], raw_input[2]];\\n      if (new_array[0] == null) {\\n        new_array[0] = new_array[0] || 0;\\n      }\\n      if (new_array[1] == null) {\\n        new_array[1] = new_array[1] || new_array[0];\\n      }\\n      if (new_array[2] == null) {\\n        new_array[2] = new_array[2] || new_array[1];\\n      }\\n      return new_array;\\n    }\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    if (raw_input1 instanceof Vector3) {\\n      if (raw_input2 instanceof Vector3) {\\n        return raw_input1.equals(raw_input2);\\n      } else {\\n        return raw_input1.x == raw_input2[0] && raw_input1.y == raw_input2[1] && raw_input1.z == raw_input2[2];\\n      }\\n    } else {\\n      if (raw_input2 instanceof Vector3) {\\n        return raw_input1[0] == raw_input2.x && raw_input1[1] == raw_input2.y && raw_input1[2] == raw_input2.z;\\n      } else {\\n        return raw_input1[0] == raw_input2[0] && raw_input1[1] == raw_input2[1] && raw_input1[2] == raw_input2[2];\\n      }\\n    }\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1.equals(val2);\\n  }\\n  initComponents() {\\n    super.initComponents();\\n    this.x = this.components[0];\\n    this.y = this.components[1];\\n    this.z = this.components[2];\\n  }\\n  set_value_from_components() {\\n    this._value.x = this.x.value;\\n    this._value.y = this.y.value;\\n    this._value.z = this.z.value;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/Vector4.ts\\nvar COMPONENT_NAMES_VECTOR4 = [\\\\\\\"x\\\\\\\", \\\\\\\"y\\\\\\\", \\\\\\\"z\\\\\\\", \\\\\\\"w\\\\\\\"];\\nvar Vector4Param = class extends TypedMultipleParam {\\n  constructor() {\\n    super(...arguments);\\n    this._value = new Vector4();\\n    this._copied_value = [0, 0, 0, 0];\\n  }\\n  static type() {\\n    return ParamType.VECTOR4;\\n  }\\n  componentNames() {\\n    return COMPONENT_NAMES_VECTOR4;\\n  }\\n  defaultValueSerialized() {\\n    if (CoreType.isArray(this._default_value)) {\\n      return this._default_value;\\n    } else {\\n      return this._default_value.toArray();\\n    }\\n  }\\n  valueSerialized() {\\n    return this.value.toArray();\\n  }\\n  _copy_value(param) {\\n    param.value.toArray(this._copied_value);\\n    this.set(this._copied_value);\\n  }\\n  _clone_raw_input(raw_input) {\\n    if (raw_input instanceof Vector4) {\\n      return raw_input.clone();\\n    } else {\\n      const new_array = [raw_input[0], raw_input[1], raw_input[2], raw_input[3]];\\n      if (new_array[0] == null) {\\n        new_array[0] = new_array[0] || 0;\\n      }\\n      if (new_array[1] == null) {\\n        new_array[1] = new_array[1] || new_array[0];\\n      }\\n      if (new_array[2] == null) {\\n        new_array[2] = new_array[2] || new_array[1];\\n      }\\n      if (new_array[3] == null) {\\n        new_array[3] = new_array[3] || new_array[2];\\n      }\\n      return new_array;\\n    }\\n  }\\n  static are_raw_input_equal(raw_input1, raw_input2) {\\n    if (raw_input1 instanceof Vector4) {\\n      if (raw_input2 instanceof Vector4) {\\n        return raw_input1.equals(raw_input2);\\n      } else {\\n        return raw_input1.x == raw_input2[0] && raw_input1.y == raw_input2[1] && raw_input1.z == raw_input2[2] && raw_input1.w == raw_input2[3];\\n      }\\n    } else {\\n      if (raw_input2 instanceof Vector4) {\\n        return raw_input1[0] == raw_input2.x && raw_input1[1] == raw_input2.y && raw_input1[2] == raw_input2.z && raw_input1[3] == raw_input2.w;\\n      } else {\\n        return raw_input1[0] == raw_input2[0] && raw_input1[1] == raw_input2[1] && raw_input1[2] == raw_input2[2] && raw_input1[3] == raw_input2[3];\\n      }\\n    }\\n  }\\n  static are_values_equal(val1, val2) {\\n    return val1.equals(val2);\\n  }\\n  initComponents() {\\n    super.initComponents();\\n    this.x = this.components[0];\\n    this.y = this.components[1];\\n    this.z = this.components[2];\\n    this.w = this.components[3];\\n  }\\n  set_value_from_components() {\\n    this._value.x = this.x.value;\\n    this._value.y = this.y.value;\\n    this._value.z = this.z.value;\\n    this._value.w = this.w.value;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/params/types/ParamConstructorByType.ts\\nvar ParamConstructorByType = {\\n  [ParamType.BOOLEAN]: BooleanParam,\\n  [ParamType.BUTTON]: ButtonParam,\\n  [ParamType.COLOR]: ColorParam,\\n  [ParamType.FLOAT]: FloatParam,\\n  [ParamType.FOLDER]: FolderParam,\\n  [ParamType.INTEGER]: IntegerParam,\\n  [ParamType.OPERATOR_PATH]: OperatorPathParam,\\n  [ParamType.PARAM_PATH]: ParamPathParam,\\n  [ParamType.NODE_PATH]: NodePathParam,\\n  [ParamType.RAMP]: RampParam,\\n  [ParamType.STRING]: StringParam,\\n  [ParamType.VECTOR2]: Vector2Param,\\n  [ParamType.VECTOR3]: Vector3Param,\\n  [ParamType.VECTOR4]: Vector4Param\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/params/ParamsLabelController.ts\\nvar ParamsLabelController = class {\\n  dispose() {\\n    this._callback = void 0;\\n  }\\n  params() {\\n    return this._params;\\n  }\\n  callback() {\\n    return this._callback;\\n  }\\n  init(params, callback) {\\n    this._params = params;\\n    if (callback) {\\n      this._callback = callback;\\n    } else {\\n      const param = this._params[0];\\n      switch (param.type()) {\\n        case ParamType.STRING:\\n          return this._handle_string_param(param);\\n        case ParamType.OPERATOR_PATH:\\n          return this._handle_operator_path_param(param);\\n        case ParamType.NODE_PATH:\\n          return this._handle_node_path_param(param);\\n        case ParamType.PARAM_PATH:\\n          return this._handle_param_path_param(param);\\n        case ParamType.FLOAT:\\n          return this._handle_number_param(param);\\n        case ParamType.INTEGER:\\n          return this._handle_number_param(param);\\n      }\\n    }\\n  }\\n  _handle_string_param(param) {\\n    this._callback = () => {\\n      return param.value;\\n    };\\n  }\\n  _handle_operator_path_param(param) {\\n    this._callback = () => {\\n      return param.value;\\n    };\\n  }\\n  _handle_node_path_param(param) {\\n    this._callback = () => {\\n      return param.value.path();\\n    };\\n  }\\n  _handle_param_path_param(param) {\\n    this._callback = () => {\\n      return param.value.path();\\n    };\\n  }\\n  _handle_number_param(param) {\\n    this._callback = () => {\\n      return `${param.value}`;\\n    };\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/params/ParamsController.ts\\nvar NODE_SIMPLE_NAME = \\\\\\\"params\\\\\\\";\\nvar ParamsController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._param_create_mode = false;\\n    this._params_created = false;\\n    this._params_by_name = {};\\n    this._params_list = [];\\n    this._param_names = [];\\n    this._non_spare_params = [];\\n    this._spare_params = [];\\n    this._non_spare_param_names = [];\\n    this._spare_param_names = [];\\n    this._params_added_since_last_params_eval = false;\\n  }\\n  get label() {\\n    return this._label_controller = this._label_controller || new ParamsLabelController();\\n  }\\n  hasLabelController() {\\n    return this._label_controller != null;\\n  }\\n  dispose() {\\n    if (this._params_node) {\\n      this._params_node.dispose();\\n    }\\n    for (let param of this.all) {\\n      param.dispose();\\n    }\\n    this._post_create_params_hook_names = void 0;\\n    this._post_create_params_hooks = void 0;\\n    this._on_scene_load_hooks = void 0;\\n    this._on_scene_load_hook_names = void 0;\\n    this._label_controller?.dispose();\\n  }\\n  initDependencyNode() {\\n    if (!this._params_node) {\\n      this._params_node = new CoreGraphNode(this.node.scene(), NODE_SIMPLE_NAME);\\n      this.node.addGraphInput(this._params_node, false);\\n    }\\n  }\\n  init() {\\n    this.initDependencyNode();\\n    this._param_create_mode = true;\\n    this._initFromParamsConfig();\\n    this.node.createParams();\\n    this._postCreateParams();\\n  }\\n  _postCreateParams() {\\n    this._updateCaches();\\n    this._initParamAccessors();\\n    this._param_create_mode = false;\\n    this._params_created = true;\\n    this._runPostCreateParamsHooks();\\n  }\\n  postCreateSpareParams() {\\n    this._updateCaches();\\n    this._initParamAccessors();\\n    this.node.scene().referencesController.notifyParamsUpdated(this.node);\\n    this.node.emit(NodeEvent.PARAMS_UPDATED);\\n  }\\n  updateParams(options) {\\n    let has_created_a_param = false;\\n    let has_deleted_a_param = false;\\n    if (options.namesToDelete) {\\n      for (let param_name of options.namesToDelete) {\\n        if (this.has(param_name)) {\\n          this._deleteParam(param_name);\\n          has_deleted_a_param = true;\\n        }\\n      }\\n    }\\n    if (options.toAdd) {\\n      for (let param_data of options.toAdd) {\\n        const param = this.addParam(param_data.type, param_data.name, param_data.init_value, param_data.options);\\n        if (param) {\\n          if (param_data.raw_input != null) {\\n            param.set(param_data.raw_input);\\n          }\\n          has_created_a_param = true;\\n        }\\n      }\\n    }\\n    if (has_deleted_a_param || has_created_a_param) {\\n      this.postCreateSpareParams();\\n    }\\n  }\\n  _initFromParamsConfig() {\\n    const paramsConfig = this.node.paramsConfig;\\n    let init_values_used = false;\\n    if (paramsConfig) {\\n      for (let name of Object.keys(paramsConfig)) {\\n        const config = paramsConfig[name];\\n        let init_value;\\n        if (this.node.params_init_value_overrides) {\\n          init_value = this.node.params_init_value_overrides[name];\\n          init_values_used = true;\\n        }\\n        this.addParam(config.type, name, config.init_value, config.options, init_value);\\n      }\\n    }\\n    if (init_values_used) {\\n      this.node.setDirty();\\n    }\\n    this.node.params_init_value_overrides = void 0;\\n  }\\n  _initParamAccessors() {\\n    let current_names_in_accessor = Object.getOwnPropertyNames(this.node.pv);\\n    this._removeUnneededAccessors(current_names_in_accessor);\\n    current_names_in_accessor = Object.getOwnPropertyNames(this.node.pv);\\n    for (let param of this.all) {\\n      const is_spare = param.options.isSpare();\\n      const param_not_yet_in_accessors = !current_names_in_accessor.includes(param.name());\\n      if (param_not_yet_in_accessors || is_spare) {\\n        Object.defineProperty(this.node.pv, param.name(), {\\n          get: () => {\\n            return param.value;\\n          },\\n          configurable: is_spare\\n        });\\n        Object.defineProperty(this.node.p, param.name(), {\\n          get: () => {\\n            return param;\\n          },\\n          configurable: is_spare\\n        });\\n      }\\n    }\\n  }\\n  _removeUnneededAccessors(current_names_in_accessor) {\\n    const current_param_names = this._param_names;\\n    const names_to_remove = [];\\n    for (let current_name_in_accessor of current_names_in_accessor) {\\n      if (!current_param_names.includes(current_name_in_accessor)) {\\n        names_to_remove.push(current_name_in_accessor);\\n      }\\n    }\\n    for (let name_to_remove of names_to_remove) {\\n      Object.defineProperty(this.node.pv, name_to_remove, {\\n        get: () => {\\n          return void 0;\\n        },\\n        configurable: true\\n      });\\n      Object.defineProperty(this.node.p, name_to_remove, {\\n        get: () => {\\n          return void 0;\\n        },\\n        configurable: true\\n      });\\n    }\\n  }\\n  get params_node() {\\n    return this._params_node;\\n  }\\n  get all() {\\n    return this._params_list;\\n  }\\n  get non_spare() {\\n    return this._non_spare_params;\\n  }\\n  get spare() {\\n    return this._spare_params;\\n  }\\n  get names() {\\n    return this._param_names;\\n  }\\n  get non_spare_names() {\\n    return this._non_spare_param_names;\\n  }\\n  get spare_names() {\\n    return this._spare_param_names;\\n  }\\n  set_with_type(param_name, value, type) {\\n    const param = this.param_with_type(param_name, type);\\n    if (param) {\\n      param.set(value);\\n    } else {\\n      Poly.warn(`param ${param_name} not found with type ${type}`);\\n    }\\n  }\\n  set_float(param_name, value) {\\n    this.set_with_type(param_name, value, ParamType.FLOAT);\\n  }\\n  set_vector3(param_name, value) {\\n    this.set_with_type(param_name, value, ParamType.VECTOR3);\\n  }\\n  has_param(param_name) {\\n    return this._params_by_name[param_name] != null;\\n  }\\n  has(param_name) {\\n    return this.has_param(param_name);\\n  }\\n  get(param_name) {\\n    return this.param(param_name);\\n  }\\n  param_with_type(param_name, type) {\\n    const param = this.param(param_name);\\n    if (param && param.type() == type) {\\n      return param;\\n    }\\n  }\\n  get_float(param_name) {\\n    return this.param_with_type(param_name, ParamType.FLOAT);\\n  }\\n  get_operator_path(param_name) {\\n    return this.param_with_type(param_name, ParamType.OPERATOR_PATH);\\n  }\\n  value(param_name) {\\n    return this.param(param_name)?.value;\\n  }\\n  value_with_type(param_name, type) {\\n    return this.param_with_type(param_name, type)?.value;\\n  }\\n  boolean(param_name) {\\n    return this.value_with_type(param_name, ParamType.BOOLEAN);\\n  }\\n  float(param_name) {\\n    return this.value_with_type(param_name, ParamType.FLOAT);\\n  }\\n  integer(param_name) {\\n    return this.value_with_type(param_name, ParamType.INTEGER);\\n  }\\n  string(param_name) {\\n    return this.value_with_type(param_name, ParamType.STRING);\\n  }\\n  vector2(param_name) {\\n    return this.value_with_type(param_name, ParamType.VECTOR2);\\n  }\\n  vector3(param_name) {\\n    return this.value_with_type(param_name, ParamType.VECTOR3);\\n  }\\n  color(param_name) {\\n    return this.value_with_type(param_name, ParamType.COLOR);\\n  }\\n  param(param_name) {\\n    const p = this._params_by_name[param_name];\\n    if (p != null) {\\n      return p;\\n    } else {\\n      Poly.warn(`tried to access param '${param_name}' in node ${this.node.path()}, but existing params are: ${this.names} on node ${this.node.path()}`);\\n      return null;\\n    }\\n  }\\n  _deleteParam(param_name) {\\n    const param = this._params_by_name[param_name];\\n    if (param) {\\n      if (this._params_node) {\\n        this._params_node.removeGraphInput(this._params_by_name[param_name]);\\n      }\\n      param._setupNodeDependencies(null);\\n      delete this._params_by_name[param_name];\\n      if (param.isMultiple() && param.components) {\\n        for (let component of param.components) {\\n          const child_name = component.name();\\n          delete this._params_by_name[child_name];\\n        }\\n      }\\n    } else {\\n      throw new Error(`param '${param_name}' does not exist on node ${this.node.path()}`);\\n    }\\n  }\\n  addParam(type, param_name, default_value, options = {}, init_data) {\\n    const is_spare = options[\\\\\\\"spare\\\\\\\"] || false;\\n    if (this._param_create_mode === false && !is_spare) {\\n      Poly.warn(`node ${this.node.path()} (${this.node.type()}) param '${param_name}' cannot be created outside of create_params`);\\n    }\\n    if (this.node.scene() == null) {\\n      Poly.warn(`node ${this.node.path()} (${this.node.type()}) has no scene assigned`);\\n    }\\n    const constructor = ParamConstructorByType[type];\\n    if (constructor != null) {\\n      const existing_param = this._params_by_name[param_name];\\n      if (existing_param) {\\n        if (is_spare) {\\n          if (existing_param.type() != type) {\\n            this._deleteParam(existing_param.name());\\n          }\\n        } else {\\n          Poly.warn(`a param named ${param_name} already exists`, this.node);\\n        }\\n      }\\n      const param = new constructor(this.node.scene(), this.node);\\n      param.options.set(options);\\n      param.setName(param_name);\\n      param.setInitValue(default_value);\\n      param.initComponents();\\n      if (init_data == null) {\\n        param.set(default_value);\\n      } else {\\n        if (param.options.isExpressionForEntities()) {\\n          param.set(default_value);\\n        }\\n        if (init_data.raw_input != null) {\\n          param.set(init_data.raw_input);\\n        } else {\\n          if (init_data.simple_data != null) {\\n            param.set(init_data.simple_data);\\n          } else {\\n            if (init_data.complex_data != null) {\\n              const raw_input = init_data.complex_data.raw_input;\\n              if (raw_input) {\\n                param.set(raw_input);\\n              } else {\\n                param.set(default_value);\\n              }\\n              const overriden_options = init_data.complex_data.overriden_options;\\n              if (overriden_options != null) {\\n                const keys = Object.keys(overriden_options);\\n                for (let key of keys) {\\n                  param.options.setOption(key, overriden_options[key]);\\n                }\\n              }\\n            }\\n          }\\n        }\\n      }\\n      param._setupNodeDependencies(this.node);\\n      this._params_by_name[param.name()] = param;\\n      if (param.isMultiple() && param.components) {\\n        for (let component of param.components) {\\n          this._params_by_name[component.name()] = component;\\n        }\\n      }\\n      this._params_added_since_last_params_eval = true;\\n      return param;\\n    }\\n  }\\n  _updateCaches() {\\n    this._params_list = Object.values(this._params_by_name);\\n    this._param_names = Object.keys(this._params_by_name);\\n    this._non_spare_params = Object.values(this._params_by_name).filter((p) => !p.options.isSpare());\\n    this._spare_params = Object.values(this._params_by_name).filter((p) => p.options.isSpare());\\n    this._non_spare_param_names = Object.values(this._params_by_name).filter((p) => !p.options.isSpare()).map((p) => p.name());\\n    this._spare_param_names = Object.values(this._params_by_name).filter((p) => p.options.isSpare()).map((p) => p.name());\\n  }\\n  async _evalParam(param) {\\n    if (param.isDirty()) {\\n      await param.compute();\\n      if (param.states.error.active()) {\\n        this.node.states.error.set(`param '${param.name()}' error: ${param.states.error.message()}`);\\n      }\\n    } else {\\n    }\\n  }\\n  async evalParams(params) {\\n    const promises = [];\\n    for (let param of params) {\\n      if (param.isDirty()) {\\n        promises.push(this._evalParam(param));\\n      }\\n    }\\n    await Promise.all(promises);\\n    if (this.node.states.error.active()) {\\n      this.node._setContainer(null);\\n    }\\n  }\\n  paramsEvalRequired() {\\n    return this._params_node != null && (this._params_node.isDirty() || this._params_added_since_last_params_eval);\\n  }\\n  async evalAll() {\\n    if (this.paramsEvalRequired()) {\\n      await this.evalParams(this._params_list);\\n      this._params_node?.removeDirtyState();\\n      this._params_added_since_last_params_eval = false;\\n    }\\n  }\\n  onParamsCreated(hook_name, hook) {\\n    if (this._params_created) {\\n      hook();\\n    } else {\\n      if (this._post_create_params_hook_names && this._post_create_params_hook_names.includes(hook_name)) {\\n        Poly.error(`hook name ${hook_name} already exists`);\\n        return;\\n      }\\n      this._post_create_params_hook_names = this._post_create_params_hook_names || [];\\n      this._post_create_params_hook_names.push(hook_name);\\n      this._post_create_params_hooks = this._post_create_params_hooks || [];\\n      this._post_create_params_hooks.push(hook);\\n    }\\n  }\\n  addOnSceneLoadHook(param_name, method) {\\n    this._on_scene_load_hook_names = this._on_scene_load_hook_names || [];\\n    this._on_scene_load_hooks = this._on_scene_load_hooks || [];\\n    if (!this._on_scene_load_hook_names.includes(param_name)) {\\n      this._on_scene_load_hook_names.push(param_name);\\n      this._on_scene_load_hooks.push(method);\\n    } else {\\n      Poly.warn(`hook with name ${param_name} already exists`, this.node);\\n    }\\n  }\\n  _runPostCreateParamsHooks() {\\n    if (this._post_create_params_hooks) {\\n      for (let hook of this._post_create_params_hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n  runOnSceneLoadHooks() {\\n    if (this._on_scene_load_hooks) {\\n      for (let hook of this._on_scene_load_hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/params/ParamsValueAccessor.ts\\nvar ParamsValueAccessor = class {\\n  constructor() {\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/NodeConnection.ts\\nvar TypedNodeConnection2 = class {\\n  constructor(_node_src, _node_dest, _output_index = 0, _input_index = 0) {\\n    this._node_src = _node_src;\\n    this._node_dest = _node_dest;\\n    this._output_index = _output_index;\\n    this._input_index = _input_index;\\n    if (this._output_index == null) {\\n      throw \\\\\\\"bad output index\\\\\\\";\\n    }\\n    if (this._input_index == null) {\\n      throw \\\\\\\"bad input index\\\\\\\";\\n    }\\n    this._id = TypedNodeConnection2._next_id++;\\n    if (this._node_src.io.connections && this._node_dest.io.connections) {\\n      this._node_src.io.connections.addOutputConnection(this);\\n      this._node_dest.io.connections.addInputConnection(this);\\n    }\\n  }\\n  get id() {\\n    return this._id;\\n  }\\n  get node_src() {\\n    return this._node_src;\\n  }\\n  get node_dest() {\\n    return this._node_dest;\\n  }\\n  get output_index() {\\n    return this._output_index;\\n  }\\n  get input_index() {\\n    return this._input_index;\\n  }\\n  src_connection_point() {\\n    const node_src = this._node_src;\\n    const output_index = this._output_index;\\n    return node_src.io.outputs.namedOutputConnectionPoints()[output_index];\\n  }\\n  dest_connection_point() {\\n    const node_dest = this._node_dest;\\n    const input_index = this._input_index;\\n    return node_dest.io.inputs.namedInputConnectionPoints()[input_index];\\n  }\\n  disconnect(options = {}) {\\n    if (this._node_src.io.connections && this._node_dest.io.connections) {\\n      this._node_src.io.connections.removeOutputConnection(this);\\n      this._node_dest.io.connections.removeInputConnection(this);\\n    }\\n    if (options.setInput === true) {\\n      this._node_dest.io.inputs.setInput(this._input_index, null);\\n    }\\n  }\\n};\\nvar TypedNodeConnection = TypedNodeConnection2;\\nTypedNodeConnection._next_id = 0;\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/utils/ClonedStatesController.ts\\nvar ClonedStatesController2 = class {\\n  constructor(inputs_controller) {\\n    this.inputs_controller = inputs_controller;\\n    this._clone_required_states = [];\\n    this._overridden = false;\\n    this.node = inputs_controller.node;\\n  }\\n  initInputsClonedState(states) {\\n    if (CoreType.isArray(states)) {\\n      this._cloned_states = states;\\n    } else {\\n      this._cloned_state = states;\\n    }\\n    this._update_clone_required_state();\\n  }\\n  overrideClonedStateAllowed() {\\n    if (this._cloned_states) {\\n      for (let state of this._cloned_states) {\\n        if (state == InputCloneMode.FROM_NODE) {\\n          return true;\\n        }\\n      }\\n    }\\n    if (this._cloned_state) {\\n      return this._cloned_state == InputCloneMode.FROM_NODE;\\n    }\\n    return false;\\n  }\\n  cloneRequiredState(index) {\\n    return this._clone_required_states[index];\\n  }\\n  cloneRequiredStates() {\\n    return this._clone_required_states;\\n  }\\n  _get_clone_required_state(index) {\\n    const states = this._cloned_states;\\n    if (states) {\\n      const state = states[index];\\n      if (state != null) {\\n        return this.clone_required_from_state(state);\\n      }\\n    }\\n    if (this._cloned_state) {\\n      return this.clone_required_from_state(this._cloned_state);\\n    }\\n    return true;\\n  }\\n  clone_required_from_state(state) {\\n    switch (state) {\\n      case InputCloneMode.ALWAYS:\\n        return true;\\n      case InputCloneMode.NEVER:\\n        return false;\\n      case InputCloneMode.FROM_NODE:\\n        return !this._overridden;\\n    }\\n    return TypeAssert.unreachable(state);\\n  }\\n  overrideClonedState(state) {\\n    this._overridden = state;\\n    this._update_clone_required_state();\\n    this.node.emit(NodeEvent.OVERRIDE_CLONABLE_STATE_UPDATE);\\n    this.node.setDirty();\\n  }\\n  overriden() {\\n    return this._overridden;\\n  }\\n  _update_clone_required_state() {\\n    if (this._cloned_states) {\\n      const states = [];\\n      for (let i = 0; i < this._cloned_states.length; i++) {\\n        states[i] = this._get_clone_required_state(i);\\n      }\\n      this._clone_required_states = states;\\n      return;\\n    }\\n    if (this._cloned_state) {\\n      const max_inputs = this.inputs_controller.maxInputsCount();\\n      const states = [];\\n      for (let i = 0; i < max_inputs; i++) {\\n        states[i] = this._get_clone_required_state(i);\\n      }\\n      this._clone_required_states = states;\\n      return;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/InputsController.ts\\nvar MAX_INPUTS_COUNT_UNSET = 0;\\nvar InputsController2 = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._graph_node_inputs = [];\\n    this._inputs = [];\\n    this._has_named_inputs = false;\\n    this._minInputsCount = 0;\\n    this._maxInputsCount = MAX_INPUTS_COUNT_UNSET;\\n    this._maxInputsCountOnInput = MAX_INPUTS_COUNT_UNSET;\\n    this._depends_on_inputs = true;\\n  }\\n  dispose() {\\n    if (this._graph_node) {\\n      this._graph_node.dispose();\\n    }\\n    for (let graph_node of this._graph_node_inputs) {\\n      if (graph_node) {\\n        graph_node.dispose();\\n      }\\n    }\\n    this._on_update_hooks = void 0;\\n    this._on_update_hook_names = void 0;\\n  }\\n  set_depends_on_inputs(depends_on_inputs) {\\n    this._depends_on_inputs = depends_on_inputs;\\n  }\\n  setMinCount(minInputsCount) {\\n    this._minInputsCount = minInputsCount;\\n  }\\n  minCount() {\\n    return this._minInputsCount;\\n  }\\n  setMaxCount(maxInputsCount) {\\n    if (this._maxInputsCount == MAX_INPUTS_COUNT_UNSET) {\\n      this._maxInputsCountOnInput = maxInputsCount;\\n    }\\n    this._maxInputsCount = maxInputsCount;\\n    this._initGraphNodeInputs();\\n  }\\n  namedInputConnectionPointsByName(name) {\\n    if (this._named_input_connection_points) {\\n      for (let connection_point of this._named_input_connection_points) {\\n        if (connection_point && connection_point.name() == name) {\\n          return connection_point;\\n        }\\n      }\\n    }\\n  }\\n  setNamedInputConnectionPoints(connection_points) {\\n    this._has_named_inputs = true;\\n    const connections = this.node.io.connections.inputConnections();\\n    if (connections) {\\n      for (let connection of connections) {\\n        if (connection) {\\n          if (connection.input_index >= connection_points.length) {\\n            connection.disconnect({setInput: true});\\n          }\\n        }\\n      }\\n    }\\n    this._named_input_connection_points = connection_points;\\n    this.setMinCount(0);\\n    this.setMaxCount(connection_points.length);\\n    this._initGraphNodeInputs();\\n    this.node.emit(NodeEvent.NAMED_INPUTS_UPDATED);\\n  }\\n  hasNamedInputs() {\\n    return this._has_named_inputs;\\n  }\\n  namedInputConnectionPoints() {\\n    return this._named_input_connection_points || [];\\n  }\\n  _initGraphNodeInputs() {\\n    for (let i = 0; i < this._maxInputsCount; i++) {\\n      this._graph_node_inputs[i] = this._graph_node_inputs[i] || this._createGraphNodeInput(i);\\n    }\\n  }\\n  _createGraphNodeInput(index) {\\n    const graph_input_node = new CoreGraphNode(this.node.scene(), `input_${index}`);\\n    if (!this._graph_node) {\\n      this._graph_node = new CoreGraphNode(this.node.scene(), \\\\\\\"inputs\\\\\\\");\\n      this.node.addGraphInput(this._graph_node, false);\\n    }\\n    this._graph_node.addGraphInput(graph_input_node, false);\\n    return graph_input_node;\\n  }\\n  maxInputsCount() {\\n    return this._maxInputsCount || 0;\\n  }\\n  maxInputsCountOverriden() {\\n    return this._maxInputsCount != this._maxInputsCountOnInput;\\n  }\\n  inputGraphNode(input_index) {\\n    return this._graph_node_inputs[input_index];\\n  }\\n  setCount(min, max) {\\n    if (max == null) {\\n      max = min;\\n    }\\n    this.setMinCount(min);\\n    this.setMaxCount(max);\\n    this._initConnectionControllerInputs();\\n  }\\n  _initConnectionControllerInputs() {\\n    this.node.io.connections.initInputs();\\n  }\\n  is_any_input_dirty() {\\n    return this._graph_node?.isDirty() || false;\\n  }\\n  async containers_without_evaluation() {\\n    const containers = [];\\n    for (let i = 0; i < this._inputs.length; i++) {\\n      const input_node = this._inputs[i];\\n      let container = void 0;\\n      if (input_node) {\\n        container = await input_node.compute();\\n      }\\n      containers.push(container);\\n    }\\n    return containers;\\n  }\\n  existing_input_indices() {\\n    const existing_input_indices = [];\\n    if (this._maxInputsCount > 0) {\\n      for (let i = 0; i < this._inputs.length; i++) {\\n        if (this._inputs[i]) {\\n          existing_input_indices.push(i);\\n        }\\n      }\\n    }\\n    return existing_input_indices;\\n  }\\n  async eval_required_inputs() {\\n    let containers = [];\\n    if (this._maxInputsCount > 0) {\\n      const existing_input_indices = this.existing_input_indices();\\n      if (existing_input_indices.length < this._minInputsCount) {\\n        this.node.states.error.set(\\\\\\\"inputs are missing\\\\\\\");\\n      } else {\\n        if (existing_input_indices.length > 0) {\\n          const promises = [];\\n          let input;\\n          for (let i = 0; i < this._inputs.length; i++) {\\n            input = this._inputs[i];\\n            if (input) {\\n              promises.push(this.eval_required_input(i));\\n            }\\n          }\\n          containers = await Promise.all(promises);\\n          this._graph_node?.removeDirtyState();\\n        }\\n      }\\n    }\\n    return containers;\\n  }\\n  async eval_required_input(input_index) {\\n    let container = void 0;\\n    const input_node = this.input(input_index);\\n    if (input_node) {\\n      container = await input_node.compute();\\n      this._graph_node_inputs[input_index].removeDirtyState();\\n    }\\n    if (container && container.coreContent()) {\\n    } else {\\n      const input_node2 = this.input(input_index);\\n      if (input_node2) {\\n        const input_error_message = input_node2.states.error.message();\\n        if (input_error_message) {\\n          this.node.states.error.set(`input ${input_index} is invalid (error: ${input_error_message})`);\\n        }\\n      }\\n    }\\n    return container;\\n  }\\n  get_named_input_index(name) {\\n    if (this._named_input_connection_points) {\\n      for (let i = 0; i < this._named_input_connection_points.length; i++) {\\n        if (this._named_input_connection_points[i]?.name() == name) {\\n          return i;\\n        }\\n      }\\n    }\\n    return -1;\\n  }\\n  get_input_index(input_index_or_name) {\\n    if (CoreType.isString(input_index_or_name)) {\\n      if (this.hasNamedInputs()) {\\n        return this.get_named_input_index(input_index_or_name);\\n      } else {\\n        throw new Error(`node ${this.node.path()} has no named inputs`);\\n      }\\n    } else {\\n      return input_index_or_name;\\n    }\\n  }\\n  setInput(input_index_or_name, node, output_index_or_name = 0) {\\n    const input_index = this.get_input_index(input_index_or_name) || 0;\\n    if (input_index < 0) {\\n      const message = `invalid input (${input_index_or_name}) for node ${this.node.path()}`;\\n      console.warn(message);\\n      throw new Error(message);\\n    }\\n    let output_index = 0;\\n    if (node) {\\n      if (node.io.outputs.hasNamedOutputs()) {\\n        output_index = node.io.outputs.getOutputIndex(output_index_or_name);\\n        if (output_index == null || output_index < 0) {\\n          const connection_points = node.io.outputs.namedOutputConnectionPoints();\\n          const names = connection_points.map((cp) => cp.name());\\n          console.warn(`node ${node.path()} does not have an output named ${output_index_or_name}. inputs are: ${names.join(\\\\\\\", \\\\\\\")}`);\\n          return;\\n        }\\n      }\\n    }\\n    const graph_input_node = this._graph_node_inputs[input_index];\\n    if (graph_input_node == null) {\\n      const message = `graph_input_node not found at index ${input_index}`;\\n      console.warn(message);\\n      throw new Error(message);\\n    }\\n    if (node && this.node.parent() != node.parent()) {\\n      return;\\n    }\\n    const old_input_node = this._inputs[input_index];\\n    let old_output_index = null;\\n    let old_connection = void 0;\\n    if (this.node.io.connections) {\\n      old_connection = this.node.io.connections.inputConnection(input_index);\\n    }\\n    if (old_connection) {\\n      old_output_index = old_connection.output_index;\\n    }\\n    if (node !== old_input_node || output_index != old_output_index) {\\n      if (old_input_node != null) {\\n        if (this._depends_on_inputs) {\\n          graph_input_node.removeGraphInput(old_input_node);\\n        }\\n      }\\n      if (node != null) {\\n        if (graph_input_node.addGraphInput(node)) {\\n          if (!this._depends_on_inputs) {\\n            graph_input_node.removeGraphInput(node);\\n          }\\n          if (old_connection) {\\n            old_connection.disconnect({setInput: false});\\n          }\\n          this._inputs[input_index] = node;\\n          new TypedNodeConnection(node, this.node, output_index, input_index);\\n        } else {\\n          console.warn(`cannot connect ${node.path()} to ${this.node.path()}`);\\n        }\\n      } else {\\n        this._inputs[input_index] = null;\\n        if (old_connection) {\\n          old_connection.disconnect({setInput: false});\\n        }\\n      }\\n      this._run_on_set_input_hooks();\\n      graph_input_node.setSuccessorsDirty();\\n      this.node.emit(NodeEvent.INPUTS_UPDATED);\\n    }\\n  }\\n  remove_input(node) {\\n    const inputs = this.inputs();\\n    let input;\\n    for (let i = 0; i < inputs.length; i++) {\\n      input = inputs[i];\\n      if (input != null && node != null) {\\n        if (input.graphNodeId() === node.graphNodeId()) {\\n          this.setInput(i, null);\\n        }\\n      }\\n    }\\n  }\\n  input(input_index) {\\n    return this._inputs[input_index];\\n  }\\n  named_input(input_name) {\\n    if (this.hasNamedInputs()) {\\n      const input_index = this.get_input_index(input_name);\\n      return this._inputs[input_index];\\n    } else {\\n      return null;\\n    }\\n  }\\n  named_input_connection_point(input_name) {\\n    if (this.hasNamedInputs() && this._named_input_connection_points) {\\n      const input_index = this.get_input_index(input_name);\\n      return this._named_input_connection_points[input_index];\\n    }\\n  }\\n  has_named_input(name) {\\n    return this.get_named_input_index(name) >= 0;\\n  }\\n  has_input(input_index) {\\n    return this._inputs[input_index] != null;\\n  }\\n  inputs() {\\n    return this._inputs;\\n  }\\n  initInputsClonedState(states) {\\n    if (!this._cloned_states_controller) {\\n      this._cloned_states_controller = new ClonedStatesController2(this);\\n      this._cloned_states_controller.initInputsClonedState(states);\\n    }\\n  }\\n  overrideClonedStateAllowed() {\\n    return this._cloned_states_controller?.overrideClonedStateAllowed() || false;\\n  }\\n  overrideClonedState(state) {\\n    this._cloned_states_controller?.overrideClonedState(state);\\n  }\\n  clonedStateOverriden() {\\n    return this._cloned_states_controller?.overriden() || false;\\n  }\\n  cloneRequired(index) {\\n    const state = this._cloned_states_controller?.cloneRequiredState(index);\\n    if (state != null) {\\n      return state;\\n    }\\n    return true;\\n  }\\n  cloneRequiredStates() {\\n    const states = this._cloned_states_controller?.cloneRequiredStates();\\n    if (states != null) {\\n      return states;\\n    }\\n    return true;\\n  }\\n  add_on_set_input_hook(name, hook) {\\n    this._on_update_hooks = this._on_update_hooks || [];\\n    this._on_update_hook_names = this._on_update_hook_names || [];\\n    if (!this._on_update_hook_names.includes(name)) {\\n      this._on_update_hooks.push(hook);\\n      this._on_update_hook_names.push(name);\\n    } else {\\n      console.warn(`hook with name ${name} already exists`, this.node);\\n    }\\n  }\\n  _run_on_set_input_hooks() {\\n    if (this._on_update_hooks) {\\n      for (let hook of this._on_update_hooks) {\\n        hook();\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/OutputsController.ts\\nvar OutputsController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._has_outputs = false;\\n    this._has_named_outputs = false;\\n  }\\n  setHasOneOutput() {\\n    this._has_outputs = true;\\n  }\\n  setHasNoOutput() {\\n    this._has_outputs = false;\\n  }\\n  hasOutputs() {\\n    return this._has_outputs;\\n  }\\n  hasNamedOutputs() {\\n    return this._has_named_outputs;\\n  }\\n  hasNamedOutput(name) {\\n    return this.getNamedOutputIndex(name) >= 0;\\n  }\\n  namedOutputConnectionPoints() {\\n    return this._named_output_connection_points || [];\\n  }\\n  namedOutputConnection(index) {\\n    if (this._named_output_connection_points) {\\n      return this._named_output_connection_points[index];\\n    }\\n  }\\n  getNamedOutputIndex(name) {\\n    if (this._named_output_connection_points) {\\n      for (let i = 0; i < this._named_output_connection_points.length; i++) {\\n        if (this._named_output_connection_points[i]?.name() == name) {\\n          return i;\\n        }\\n      }\\n    }\\n    return -1;\\n  }\\n  getOutputIndex(output_index_or_name) {\\n    if (output_index_or_name != null) {\\n      if (CoreType.isString(output_index_or_name)) {\\n        if (this.hasNamedOutputs()) {\\n          return this.getNamedOutputIndex(output_index_or_name);\\n        } else {\\n          console.warn(`node ${this.node.path()} has no named outputs`);\\n          return -1;\\n        }\\n      } else {\\n        return output_index_or_name;\\n      }\\n    }\\n    return -1;\\n  }\\n  namedOutputConnectionPointsByName(name) {\\n    if (this._named_output_connection_points) {\\n      for (let connection_point of this._named_output_connection_points) {\\n        if (connection_point?.name() == name) {\\n          return connection_point;\\n        }\\n      }\\n    }\\n  }\\n  setNamedOutputConnectionPoints(connection_points, set_dirty = true) {\\n    this._has_named_outputs = true;\\n    const connections = this.node.io.connections.outputConnections();\\n    if (connections) {\\n      for (let connection of connections) {\\n        if (connection) {\\n          if (connection.output_index >= connection_points.length) {\\n            connection.disconnect({setInput: true});\\n          }\\n        }\\n      }\\n    }\\n    this._named_output_connection_points = connection_points;\\n    if (set_dirty && this.node.scene()) {\\n      this.node.setDirty(this.node);\\n    }\\n    this.node.emit(NodeEvent.NAMED_OUTPUTS_UPDATED);\\n  }\\n  used_output_names() {\\n    const connections_controller = this.node.io.connections;\\n    if (connections_controller) {\\n      const output_connections = connections_controller.outputConnections();\\n      let output_indices = output_connections.map((connection) => connection ? connection.output_index : null);\\n      output_indices = ArrayUtils.uniq(output_indices);\\n      const used_output_indices = [];\\n      output_indices.forEach((index) => {\\n        if (CoreType.isNumber(index)) {\\n          used_output_indices.push(index);\\n        }\\n      });\\n      const used_output_names = [];\\n      for (let index of used_output_indices) {\\n        const name = this.namedOutputConnectionPoints()[index]?.name();\\n        if (name) {\\n          used_output_names.push(name);\\n        }\\n      }\\n      return used_output_names;\\n    } else {\\n      return [];\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/ConnectionsController.ts\\nvar ConnectionsController = class {\\n  constructor(_node) {\\n    this._node = _node;\\n    this._output_connections = new Map();\\n  }\\n  initInputs() {\\n    const count = this._node.io.inputs.maxInputsCount();\\n    this._input_connections = this._input_connections || new Array(count);\\n    while (this._input_connections.length < count) {\\n      this._input_connections.push(void 0);\\n    }\\n  }\\n  addInputConnection(connection) {\\n    if (this._input_connections) {\\n      this._input_connections[connection.input_index] = connection;\\n    } else {\\n      console.warn(`input connections array not initialized`);\\n    }\\n  }\\n  removeInputConnection(connection) {\\n    if (this._input_connections) {\\n      if (connection.input_index < this._input_connections.length) {\\n        this._input_connections[connection.input_index] = void 0;\\n        let all_connections_after_are_undefined = true;\\n        for (let i = connection.input_index; i < this._input_connections.length; i++) {\\n          if (this._input_connections[i]) {\\n            all_connections_after_are_undefined = false;\\n          }\\n        }\\n        if (all_connections_after_are_undefined) {\\n          this._input_connections = this._input_connections.slice(0, connection.input_index);\\n        }\\n      } else {\\n        console.warn(`attempt to remove an input connection at index ${connection.input_index}`);\\n      }\\n    } else {\\n      console.warn(`input connections array not initialized`);\\n    }\\n  }\\n  inputConnection(index) {\\n    if (this._input_connections) {\\n      return this._input_connections[index];\\n    }\\n  }\\n  firstInputConnection() {\\n    if (this._input_connections) {\\n      return ArrayUtils.compact(this._input_connections)[0];\\n    } else {\\n      return null;\\n    }\\n  }\\n  inputConnections() {\\n    return this._input_connections;\\n  }\\n  existingInputConnections() {\\n    const current_connections = this._input_connections;\\n    if (current_connections) {\\n      while (current_connections.length > 1 && current_connections[current_connections.length - 1] === void 0) {\\n        current_connections.pop();\\n      }\\n    }\\n    return current_connections;\\n  }\\n  addOutputConnection(connection) {\\n    const output_index = connection.output_index;\\n    const id = connection.id;\\n    let connections_by_id = this._output_connections.get(output_index);\\n    if (!connections_by_id) {\\n      connections_by_id = new Map();\\n      this._output_connections.set(output_index, connections_by_id);\\n    }\\n    connections_by_id.set(id, connection);\\n  }\\n  removeOutputConnection(connection) {\\n    const output_index = connection.output_index;\\n    const id = connection.id;\\n    let connections_by_id = this._output_connections.get(output_index);\\n    if (connections_by_id) {\\n      connections_by_id.delete(id);\\n    }\\n  }\\n  outputConnections() {\\n    let list = [];\\n    this._output_connections.forEach((connections_by_id, output_index) => {\\n      connections_by_id.forEach((connection, id) => {\\n        if (connection) {\\n          list.push(connection);\\n        }\\n      });\\n    });\\n    return list;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/SavedConnectionPointsDataController.ts\\nvar SavedConnectionPointsDataController = class {\\n  constructor(_node) {\\n    this._node = _node;\\n  }\\n  set_in(data) {\\n    this._in = data;\\n  }\\n  set_out(data) {\\n    this._out = data;\\n  }\\n  clear() {\\n    this._in = void 0;\\n    this._out = void 0;\\n  }\\n  in() {\\n    return this._in;\\n  }\\n  out() {\\n    return this._out;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/connections/_Base.ts\\nvar BaseConnectionPoint = class {\\n  constructor(_name, _type, _init_value) {\\n    this._name = _name;\\n    this._type = _type;\\n    this._init_value = _init_value;\\n  }\\n  get init_value() {\\n    return this._init_value;\\n  }\\n  name() {\\n    return this._name;\\n  }\\n  type() {\\n    return this._type;\\n  }\\n  are_types_matched(src_type, dest_type) {\\n    return true;\\n  }\\n  toJSON() {\\n    return this._json = this._json || this._create_json();\\n  }\\n  _create_json() {\\n    return {\\n      name: this._name,\\n      type: this._type\\n    };\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/connections/Gl.ts\\nvar GlConnectionPointType;\\n(function(GlConnectionPointType2) {\\n  GlConnectionPointType2[\\\\\\\"BOOL\\\\\\\"] = \\\\\\\"bool\\\\\\\";\\n  GlConnectionPointType2[\\\\\\\"INT\\\\\\\"] = \\\\\\\"int\\\\\\\";\\n  GlConnectionPointType2[\\\\\\\"FLOAT\\\\\\\"] = \\\\\\\"float\\\\\\\";\\n  GlConnectionPointType2[\\\\\\\"VEC2\\\\\\\"] = \\\\\\\"vec2\\\\\\\";\\n  GlConnectionPointType2[\\\\\\\"VEC3\\\\\\\"] = \\\\\\\"vec3\\\\\\\";\\n  GlConnectionPointType2[\\\\\\\"VEC4\\\\\\\"] = \\\\\\\"vec4\\\\\\\";\\n  GlConnectionPointType2[\\\\\\\"SAMPLER_2D\\\\\\\"] = \\\\\\\"sampler2D\\\\\\\";\\n  GlConnectionPointType2[\\\\\\\"SSS_MODEL\\\\\\\"] = \\\\\\\"SSSModel\\\\\\\";\\n})(GlConnectionPointType || (GlConnectionPointType = {}));\\nvar GL_CONNECTION_POINT_TYPES = [\\n  GlConnectionPointType.BOOL,\\n  GlConnectionPointType.INT,\\n  GlConnectionPointType.FLOAT,\\n  GlConnectionPointType.VEC2,\\n  GlConnectionPointType.VEC3,\\n  GlConnectionPointType.VEC4\\n];\\nvar GlConnectionPointTypeToParamTypeMap = {\\n  [GlConnectionPointType.BOOL]: ParamType.BOOLEAN,\\n  [GlConnectionPointType.INT]: ParamType.INTEGER,\\n  [GlConnectionPointType.FLOAT]: ParamType.FLOAT,\\n  [GlConnectionPointType.VEC2]: ParamType.VECTOR2,\\n  [GlConnectionPointType.VEC3]: ParamType.VECTOR3,\\n  [GlConnectionPointType.VEC4]: ParamType.VECTOR4,\\n  [GlConnectionPointType.SAMPLER_2D]: ParamType.RAMP,\\n  [GlConnectionPointType.SSS_MODEL]: ParamType.STRING\\n};\\nvar GLParamTypeToConnectionPointTypeMap = {\\n  [ParamType.BOOLEAN]: GlConnectionPointType.BOOL,\\n  [ParamType.COLOR]: GlConnectionPointType.VEC3,\\n  [ParamType.INTEGER]: GlConnectionPointType.INT,\\n  [ParamType.FLOAT]: GlConnectionPointType.FLOAT,\\n  [ParamType.FOLDER]: void 0,\\n  [ParamType.VECTOR2]: GlConnectionPointType.VEC2,\\n  [ParamType.VECTOR3]: GlConnectionPointType.VEC3,\\n  [ParamType.VECTOR4]: GlConnectionPointType.VEC4,\\n  [ParamType.BUTTON]: void 0,\\n  [ParamType.OPERATOR_PATH]: void 0,\\n  [ParamType.PARAM_PATH]: void 0,\\n  [ParamType.NODE_PATH]: void 0,\\n  [ParamType.RAMP]: void 0,\\n  [ParamType.STRING]: void 0\\n};\\nvar GlConnectionPointInitValueMap = {\\n  [GlConnectionPointType.BOOL]: false,\\n  [GlConnectionPointType.INT]: 0,\\n  [GlConnectionPointType.FLOAT]: 0,\\n  [GlConnectionPointType.VEC2]: [0, 0],\\n  [GlConnectionPointType.VEC3]: [0, 0, 0],\\n  [GlConnectionPointType.VEC4]: [0, 0, 0, 0],\\n  [GlConnectionPointType.SAMPLER_2D]: RampParam.DEFAULT_VALUE_JSON,\\n  [GlConnectionPointType.SSS_MODEL]: \\\\\\\"SSSModel()\\\\\\\"\\n};\\nvar GlConnectionPointComponentsCountMap = {\\n  [GlConnectionPointType.BOOL]: 1,\\n  [GlConnectionPointType.INT]: 1,\\n  [GlConnectionPointType.FLOAT]: 1,\\n  [GlConnectionPointType.VEC2]: 2,\\n  [GlConnectionPointType.VEC3]: 3,\\n  [GlConnectionPointType.VEC4]: 4,\\n  [GlConnectionPointType.SAMPLER_2D]: 1,\\n  [GlConnectionPointType.SSS_MODEL]: 1\\n};\\nvar GlConnectionPoint = class extends BaseConnectionPoint {\\n  constructor(_name, _type, _init_value) {\\n    super(_name, _type);\\n    this._name = _name;\\n    this._type = _type;\\n    this._init_value = _init_value;\\n    this._init_value = this._init_value || GlConnectionPointInitValueMap[this._type];\\n  }\\n  type() {\\n    return this._type;\\n  }\\n  are_types_matched(src_type, dest_type) {\\n    return src_type == dest_type;\\n  }\\n  get param_type() {\\n    return GlConnectionPointTypeToParamTypeMap[this._type];\\n  }\\n  get init_value() {\\n    return this._init_value;\\n  }\\n  toJSON() {\\n    return this._json = this._json || this._create_json();\\n  }\\n  _create_json() {\\n    return {\\n      name: this._name,\\n      type: this._type\\n    };\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/connections/Js.ts\\nvar JsConnectionPointType;\\n(function(JsConnectionPointType2) {\\n  JsConnectionPointType2[\\\\\\\"BOOL\\\\\\\"] = \\\\\\\"bool\\\\\\\";\\n  JsConnectionPointType2[\\\\\\\"INT\\\\\\\"] = \\\\\\\"int\\\\\\\";\\n  JsConnectionPointType2[\\\\\\\"FLOAT\\\\\\\"] = \\\\\\\"float\\\\\\\";\\n  JsConnectionPointType2[\\\\\\\"VEC2\\\\\\\"] = \\\\\\\"vec2\\\\\\\";\\n  JsConnectionPointType2[\\\\\\\"VEC3\\\\\\\"] = \\\\\\\"vec3\\\\\\\";\\n  JsConnectionPointType2[\\\\\\\"VEC4\\\\\\\"] = \\\\\\\"vec4\\\\\\\";\\n})(JsConnectionPointType || (JsConnectionPointType = {}));\\nvar JS_CONNECTION_POINT_TYPES = [\\n  JsConnectionPointType.BOOL,\\n  JsConnectionPointType.INT,\\n  JsConnectionPointType.FLOAT,\\n  JsConnectionPointType.VEC2,\\n  JsConnectionPointType.VEC3,\\n  JsConnectionPointType.VEC4\\n];\\nvar JsConnectionPointTypeToParamTypeMap = {\\n  [JsConnectionPointType.BOOL]: ParamType.BOOLEAN,\\n  [JsConnectionPointType.INT]: ParamType.INTEGER,\\n  [JsConnectionPointType.FLOAT]: ParamType.FLOAT,\\n  [JsConnectionPointType.VEC2]: ParamType.VECTOR2,\\n  [JsConnectionPointType.VEC3]: ParamType.VECTOR3,\\n  [JsConnectionPointType.VEC4]: ParamType.VECTOR4\\n};\\nvar JsParamTypeToConnectionPointTypeMap = {\\n  [ParamType.BOOLEAN]: JsConnectionPointType.BOOL,\\n  [ParamType.COLOR]: JsConnectionPointType.VEC3,\\n  [ParamType.INTEGER]: JsConnectionPointType.INT,\\n  [ParamType.FLOAT]: JsConnectionPointType.FLOAT,\\n  [ParamType.FOLDER]: void 0,\\n  [ParamType.VECTOR2]: JsConnectionPointType.VEC2,\\n  [ParamType.VECTOR3]: JsConnectionPointType.VEC3,\\n  [ParamType.VECTOR4]: JsConnectionPointType.VEC4,\\n  [ParamType.BUTTON]: void 0,\\n  [ParamType.OPERATOR_PATH]: void 0,\\n  [ParamType.PARAM_PATH]: void 0,\\n  [ParamType.NODE_PATH]: void 0,\\n  [ParamType.RAMP]: void 0,\\n  [ParamType.STRING]: void 0\\n};\\nvar JsConnectionPointInitValueMap = {\\n  [JsConnectionPointType.BOOL]: false,\\n  [JsConnectionPointType.INT]: 0,\\n  [JsConnectionPointType.FLOAT]: 0,\\n  [JsConnectionPointType.VEC2]: [0, 0],\\n  [JsConnectionPointType.VEC3]: [0, 0, 0],\\n  [JsConnectionPointType.VEC4]: [0, 0, 0, 0]\\n};\\nvar GlConnectionPointComponentsCountMap2 = {\\n  [JsConnectionPointType.BOOL]: 1,\\n  [JsConnectionPointType.INT]: 1,\\n  [JsConnectionPointType.FLOAT]: 1,\\n  [JsConnectionPointType.VEC2]: 2,\\n  [JsConnectionPointType.VEC3]: 3,\\n  [JsConnectionPointType.VEC4]: 4\\n};\\nvar JsConnectionPoint = class extends BaseConnectionPoint {\\n  constructor(_name, _type) {\\n    super(_name, _type);\\n    this._name = _name;\\n    this._type = _type;\\n    this._init_value = JsConnectionPointInitValueMap[this._type];\\n  }\\n  type() {\\n    return this._type;\\n  }\\n  are_types_matched(src_type, dest_type) {\\n    return src_type == dest_type;\\n  }\\n  get param_type() {\\n    return JsConnectionPointTypeToParamTypeMap[this._type];\\n  }\\n  get init_value() {\\n    return this._init_value;\\n  }\\n  toJSON() {\\n    return this._json = this._json || this._create_json();\\n  }\\n  _create_json() {\\n    return {\\n      name: this._name,\\n      type: this._type\\n    };\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/connections/Event.ts\\nvar EventConnectionPointType;\\n(function(EventConnectionPointType2) {\\n  EventConnectionPointType2[\\\\\\\"BASE\\\\\\\"] = \\\\\\\"base\\\\\\\";\\n  EventConnectionPointType2[\\\\\\\"DRAG\\\\\\\"] = \\\\\\\"drag\\\\\\\";\\n  EventConnectionPointType2[\\\\\\\"KEYBOARD\\\\\\\"] = \\\\\\\"keyboard\\\\\\\";\\n  EventConnectionPointType2[\\\\\\\"MOUSE\\\\\\\"] = \\\\\\\"mouse\\\\\\\";\\n  EventConnectionPointType2[\\\\\\\"POINTER\\\\\\\"] = \\\\\\\"pointer\\\\\\\";\\n})(EventConnectionPointType || (EventConnectionPointType = {}));\\nvar EventConnectionPoint = class extends BaseConnectionPoint {\\n  constructor(_name, _type, _event_listener) {\\n    super(_name, _type);\\n    this._name = _name;\\n    this._type = _type;\\n    this._event_listener = _event_listener;\\n  }\\n  type() {\\n    return this._type;\\n  }\\n  get param_type() {\\n    return ParamType.FLOAT;\\n  }\\n  are_types_matched(src_type, dest_type) {\\n    if (dest_type == EventConnectionPointType.BASE) {\\n      return true;\\n    } else {\\n      return src_type == dest_type;\\n    }\\n  }\\n  get event_listener() {\\n    return this._event_listener;\\n  }\\n  toJSON() {\\n    return this._json = this._json || this._create_json();\\n  }\\n  _create_json() {\\n    return {\\n      name: this._name,\\n      type: this._type\\n    };\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/connections/ConnectionMap.ts\\nvar DEFAULT_CONNECTION_POINT_ENUM_MAP = {\\n  [NodeContext.ANIM]: void 0,\\n  [NodeContext.COP]: void 0,\\n  [NodeContext.EVENT]: EventConnectionPointType.BASE,\\n  [NodeContext.GL]: GlConnectionPointType.FLOAT,\\n  [NodeContext.JS]: JsConnectionPointType.FLOAT,\\n  [NodeContext.MANAGER]: void 0,\\n  [NodeContext.MAT]: void 0,\\n  [NodeContext.OBJ]: void 0,\\n  [NodeContext.POST]: void 0,\\n  [NodeContext.ROP]: void 0,\\n  [NodeContext.SOP]: void 0\\n};\\nfunction create_connection_point(context, name, type) {\\n  switch (context) {\\n    case NodeContext.EVENT: {\\n      return new EventConnectionPoint(name, type);\\n    }\\n    case NodeContext.GL: {\\n      return new GlConnectionPoint(name, type);\\n    }\\n    case NodeContext.JS: {\\n      return new JsConnectionPoint(name, type);\\n    }\\n    default: {\\n      return void 0;\\n    }\\n  }\\n}\\nfunction param_type_to_connection_point_type_map(context) {\\n  switch (context) {\\n    case NodeContext.EVENT: {\\n      return void 0;\\n    }\\n    case NodeContext.GL: {\\n      return GLParamTypeToConnectionPointTypeMap;\\n    }\\n    case NodeContext.JS: {\\n      return JsParamTypeToConnectionPointTypeMap;\\n    }\\n    default: {\\n      return void 0;\\n    }\\n  }\\n}\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/ConnectionPointsSpareParamsController.ts\\nvar ConnectionPointsSpareParamsController = class {\\n  constructor(node, _context2) {\\n    this.node = node;\\n    this._context = _context2;\\n    this._raw_input_serialized_by_param_name = new Map();\\n    this._default_value_serialized_by_param_name = new Map();\\n    this._initialized = false;\\n  }\\n  initializeNode() {\\n    if (this._initialized) {\\n      console.warn(\\\\\\\"already initialized\\\\\\\", this.node);\\n      return;\\n    }\\n    this._initialized = true;\\n    this.node.params.onParamsCreated(\\\\\\\"create_inputs_from_params\\\\\\\", this.create_inputs_from_params.bind(this));\\n  }\\n  initialized() {\\n    return this._initialized;\\n  }\\n  create_inputs_from_params() {\\n    const connection_type_map = param_type_to_connection_point_type_map(this._context);\\n    if (!connection_type_map) {\\n      return;\\n    }\\n    const connection_points = [];\\n    for (let param_name of this.node.params.names) {\\n      let add_input = true;\\n      if (this._inputless_param_names && this._inputless_param_names.length > 0 && this._inputless_param_names.includes(param_name)) {\\n        add_input = false;\\n      }\\n      if (add_input) {\\n        if (this.node.params.has(param_name)) {\\n          const param = this.node.params.get(param_name);\\n          if (param && !param.parent_param) {\\n            const connection_type = connection_type_map[param.type()];\\n            if (connection_type) {\\n              const connection_point = create_connection_point(this._context, param.name(), connection_type);\\n              if (connection_point) {\\n                connection_points.push(connection_point);\\n              }\\n            }\\n          }\\n        }\\n      }\\n    }\\n    this.node.io.inputs.setNamedInputConnectionPoints(connection_points);\\n  }\\n  set_inputless_param_names(names) {\\n    return this._inputless_param_names = names;\\n  }\\n  createSpareParameters() {\\n    if (this.node.scene().loadingController.isLoading()) {\\n      return;\\n    }\\n    const current_param_names = this.node.params.spare_names;\\n    const params_update_options = {};\\n    for (let param_name of current_param_names) {\\n      if (this.node.params.has(param_name)) {\\n        const param = this.node.params.get(param_name);\\n        if (param) {\\n          this._raw_input_serialized_by_param_name.set(param_name, param.rawInputSerialized());\\n          this._default_value_serialized_by_param_name.set(param_name, param.defaultValueSerialized());\\n          params_update_options.namesToDelete = params_update_options.namesToDelete || [];\\n          params_update_options.namesToDelete.push(param_name);\\n        }\\n      }\\n    }\\n    for (let connection_point of this.node.io.inputs.namedInputConnectionPoints()) {\\n      if (connection_point) {\\n        const param_name = connection_point.name();\\n        const param_type = connection_point.param_type;\\n        let init_value = connection_point.init_value;\\n        const last_param_init_value = this._default_value_serialized_by_param_name.get(param_name);\\n        let default_value_from_name = this.node.paramDefaultValue(param_name);\\n        if (default_value_from_name != null) {\\n          init_value = default_value_from_name;\\n        } else {\\n          if (last_param_init_value != null) {\\n            init_value = last_param_init_value;\\n          } else {\\n            init_value = connection_point.init_value;\\n          }\\n        }\\n        if (CoreType.isArray(connection_point.init_value)) {\\n          if (CoreType.isNumber(init_value)) {\\n            const array = new Array(connection_point.init_value.length);\\n            array.fill(init_value);\\n            init_value = array;\\n          } else if (CoreType.isArray(init_value)) {\\n            if (init_value.length == connection_point.init_value.length) {\\n              if (last_param_init_value != null) {\\n                init_value = connection_point.init_value;\\n              }\\n            }\\n          }\\n        }\\n        if (init_value != null) {\\n          params_update_options.toAdd = params_update_options.toAdd || [];\\n          params_update_options.toAdd.push({\\n            name: param_name,\\n            type: param_type,\\n            init_value: ObjectUtils.clone(init_value),\\n            raw_input: ObjectUtils.clone(init_value),\\n            options: {\\n              spare: true\\n            }\\n          });\\n        }\\n      }\\n    }\\n    this.node.params.updateParams(params_update_options);\\n    for (let spare_param of this.node.params.spare) {\\n      if (!spare_param.parent_param) {\\n        const raw_input = this._raw_input_serialized_by_param_name.get(spare_param.name());\\n        if (raw_input) {\\n          spare_param.set(raw_input);\\n        }\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/ConnectionPointsController.ts\\nvar ConnectionPointsController = class {\\n  constructor(node, _context2) {\\n    this.node = node;\\n    this._context = _context2;\\n    this._create_spare_params_from_inputs = true;\\n    this._functions_overridden = false;\\n    this._input_name_function = (index) => {\\n      return `in${index}`;\\n    };\\n    this._output_name_function = (index) => {\\n      return index == 0 ? \\\\\\\"val\\\\\\\" : `val${index}`;\\n    };\\n    this._expected_input_types_function = () => {\\n      const type = this.first_input_connection_type() || this.default_connection_type();\\n      return [type, type];\\n    };\\n    this._expected_output_types_function = () => {\\n      return [this._expected_input_types_function()[0]];\\n    };\\n    this._update_signature_if_required_bound = this.update_signature_if_required.bind(this);\\n    this._initialized = false;\\n    this._spare_params_controller = new ConnectionPointsSpareParamsController(this.node, this._context);\\n  }\\n  default_connection_type() {\\n    return DEFAULT_CONNECTION_POINT_ENUM_MAP[this._context];\\n  }\\n  create_connection_point(name, type) {\\n    return create_connection_point(this._context, name, type);\\n  }\\n  functions_overridden() {\\n    return this._functions_overridden;\\n  }\\n  initialized() {\\n    return this._initialized;\\n  }\\n  set_create_spare_params_from_inputs(state) {\\n    this._create_spare_params_from_inputs = state;\\n  }\\n  set_input_name_function(func) {\\n    this._initialize_if_required();\\n    this._input_name_function = func;\\n  }\\n  set_output_name_function(func) {\\n    this._initialize_if_required();\\n    this._output_name_function = func;\\n  }\\n  set_expected_input_types_function(func) {\\n    this._initialize_if_required();\\n    this._functions_overridden = true;\\n    this._expected_input_types_function = func;\\n  }\\n  set_expected_output_types_function(func) {\\n    this._initialize_if_required();\\n    this._functions_overridden = true;\\n    this._expected_output_types_function = func;\\n  }\\n  input_name(index) {\\n    return this._wrapped_input_name_function(index);\\n  }\\n  output_name(index) {\\n    return this._wrapped_output_name_function(index);\\n  }\\n  initializeNode() {\\n    if (this._initialized) {\\n      console.warn(\\\\\\\"already initialized\\\\\\\", this.node);\\n      return;\\n    }\\n    this._initialized = true;\\n    this.node.io.inputs.add_on_set_input_hook(\\\\\\\"_update_signature_if_required\\\\\\\", this._update_signature_if_required_bound);\\n    this.node.params.addOnSceneLoadHook(\\\\\\\"_update_signature_if_required\\\\\\\", this._update_signature_if_required_bound);\\n    this.node.params.onParamsCreated(\\\\\\\"_update_signature_if_required_bound\\\\\\\", this._update_signature_if_required_bound);\\n    this.node.addPostDirtyHook(\\\\\\\"_update_signature_if_required\\\\\\\", this._update_signature_if_required_bound);\\n    if (!this._spare_params_controller.initialized()) {\\n      this._spare_params_controller.initializeNode();\\n    }\\n  }\\n  _initialize_if_required() {\\n    if (!this._initialized) {\\n      this.initializeNode();\\n    }\\n  }\\n  get spare_params() {\\n    return this._spare_params_controller;\\n  }\\n  update_signature_if_required(dirty_trigger) {\\n    if (!this.node.lifecycle.creationCompleted() || !this._connections_match_inputs()) {\\n      this.update_connection_types();\\n      this.node.removeDirtyState();\\n      if (!this.node.scene().loadingController.isLoading()) {\\n        this.make_successors_update_signatures();\\n      }\\n    }\\n  }\\n  make_successors_update_signatures() {\\n    const successors = this.node.graphAllSuccessors();\\n    if (this.node.childrenAllowed()) {\\n      const subnet_inputs = this.node.nodesByType(NetworkChildNodeType.INPUT);\\n      const subnet_outputs = this.node.nodesByType(NetworkChildNodeType.OUTPUT);\\n      for (let subnet_input of subnet_inputs) {\\n        successors.push(subnet_input);\\n      }\\n      for (let subnet_output of subnet_outputs) {\\n        successors.push(subnet_output);\\n      }\\n    }\\n    for (let graph_node of successors) {\\n      const node = graph_node;\\n      if (node.io && node.io.has_connection_points_controller && node.io.connection_points.initialized()) {\\n        node.io.connection_points.update_signature_if_required(this.node);\\n      }\\n    }\\n  }\\n  update_connection_types() {\\n    const set_dirty = false;\\n    const expected_input_types = this._wrapped_expected_input_types_function();\\n    const expected_output_types = this._wrapped_expected_output_types_function();\\n    const named_input_connection_points = [];\\n    for (let i = 0; i < expected_input_types.length; i++) {\\n      const type = expected_input_types[i];\\n      const point = this.create_connection_point(this._wrapped_input_name_function(i), type);\\n      named_input_connection_points.push(point);\\n    }\\n    const named_output_connect_points = [];\\n    for (let i = 0; i < expected_output_types.length; i++) {\\n      const type = expected_output_types[i];\\n      const point = this.create_connection_point(this._wrapped_output_name_function(i), type);\\n      named_output_connect_points.push(point);\\n    }\\n    this.node.io.inputs.setNamedInputConnectionPoints(named_input_connection_points);\\n    this.node.io.outputs.setNamedOutputConnectionPoints(named_output_connect_points, set_dirty);\\n    if (this._create_spare_params_from_inputs) {\\n      this._spare_params_controller.createSpareParameters();\\n    }\\n  }\\n  _connections_match_inputs() {\\n    const current_input_types = this.node.io.inputs.namedInputConnectionPoints().map((c) => c?.type());\\n    const current_output_types = this.node.io.outputs.namedOutputConnectionPoints().map((c) => c?.type());\\n    const expected_input_types = this._wrapped_expected_input_types_function();\\n    const expected_output_types = this._wrapped_expected_output_types_function();\\n    if (expected_input_types.length != current_input_types.length) {\\n      return false;\\n    }\\n    if (expected_output_types.length != current_output_types.length) {\\n      return false;\\n    }\\n    for (let i = 0; i < current_input_types.length; i++) {\\n      if (current_input_types[i] != expected_input_types[i]) {\\n        return false;\\n      }\\n    }\\n    for (let i = 0; i < current_output_types.length; i++) {\\n      if (current_output_types[i] != expected_output_types[i]) {\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n  _wrapped_expected_input_types_function() {\\n    if (this.node.scene().loadingController.isLoading()) {\\n      const in_data = this.node.io.saved_connection_points_data.in();\\n      if (in_data) {\\n        return in_data.map((d) => d.type);\\n      }\\n    }\\n    return this._expected_input_types_function();\\n  }\\n  _wrapped_expected_output_types_function() {\\n    if (this.node.scene().loadingController.isLoading()) {\\n      const out_data = this.node.io.saved_connection_points_data.out();\\n      if (out_data) {\\n        return out_data.map((d) => d.type);\\n      }\\n    }\\n    return this._expected_output_types_function();\\n  }\\n  _wrapped_input_name_function(index) {\\n    if (this.node.scene().loadingController.isLoading()) {\\n      const in_data = this.node.io.saved_connection_points_data.in();\\n      if (in_data) {\\n        return in_data[index].name;\\n      }\\n    }\\n    return this._input_name_function(index);\\n  }\\n  _wrapped_output_name_function(index) {\\n    if (this.node.scene().loadingController.isLoading()) {\\n      const out_data = this.node.io.saved_connection_points_data.out();\\n      if (out_data) {\\n        return out_data[index].name;\\n      }\\n    }\\n    return this._output_name_function(index);\\n  }\\n  first_input_connection_type() {\\n    return this.input_connection_type(0);\\n  }\\n  input_connection_type(index) {\\n    const connections = this.node.io.connections.inputConnections();\\n    if (connections) {\\n      const connection = connections[index];\\n      if (connection) {\\n        return connection.src_connection_point().type();\\n      }\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/io/IOController.ts\\nvar IOController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._connections = new ConnectionsController(this.node);\\n  }\\n  get connections() {\\n    return this._connections;\\n  }\\n  get inputs() {\\n    return this._inputs = this._inputs || new InputsController2(this.node);\\n  }\\n  has_inputs() {\\n    return this._inputs != null;\\n  }\\n  get outputs() {\\n    return this._outputs = this._outputs || new OutputsController(this.node);\\n  }\\n  has_outputs() {\\n    return this._outputs != null;\\n  }\\n  get connection_points() {\\n    return this._connection_points = this._connection_points || new ConnectionPointsController(this.node, this.node.context());\\n  }\\n  get has_connection_points_controller() {\\n    return this._connection_points != null;\\n  }\\n  get saved_connection_points_data() {\\n    return this._saved_connection_points_data = this._saved_connection_points_data || new SavedConnectionPointsDataController(this.node);\\n  }\\n  clear_saved_connection_points_data() {\\n    if (this._saved_connection_points_data) {\\n      this._saved_connection_points_data.clear();\\n      this._saved_connection_points_data = void 0;\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/params/ParamsAccessor.ts\\nvar ParamsAccessor = class {\\n  constructor() {\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/_Base.ts\\nvar TypedNode = class extends CoreGraphNode {\\n  constructor(scene, name = \\\\\\\"BaseNode\\\\\\\", params_init_value_overrides) {\\n    super(scene, name);\\n    this.params_init_value_overrides = params_init_value_overrides;\\n    this.containerController = new TypedContainerController(this);\\n    this.pv = new ParamsValueAccessor();\\n    this.p = new ParamsAccessor();\\n    this._initialized = false;\\n  }\\n  copy_param_values(node) {\\n    const non_spare = this.params.non_spare;\\n    for (let param of non_spare) {\\n      const other_param = node.params.get(param.name());\\n      if (other_param) {\\n        param.copy_value(other_param);\\n      }\\n    }\\n  }\\n  get parentController() {\\n    return this._parent_controller = this._parent_controller || new HierarchyParentController(this);\\n  }\\n  static displayedInputNames() {\\n    return [];\\n  }\\n  get childrenControllerContext() {\\n    return this._children_controller_context;\\n  }\\n  _create_children_controller() {\\n    if (this._children_controller_context) {\\n      return new HierarchyChildrenController(this, this._children_controller_context);\\n    }\\n  }\\n  get childrenController() {\\n    return this._children_controller = this._children_controller || this._create_children_controller();\\n  }\\n  childrenAllowed() {\\n    return this._children_controller_context != null;\\n  }\\n  get uiData() {\\n    return this._ui_data = this._ui_data || new UIData(this);\\n  }\\n  get states() {\\n    return this._states = this._states || new StatesController(this);\\n  }\\n  get lifecycle() {\\n    return this._lifecycle = this._lifecycle || new LifeCycleController(this);\\n  }\\n  get serializer() {\\n    return this._serializer = this._serializer || new NodeSerializer(this);\\n  }\\n  get cookController() {\\n    return this._cook_controller = this._cook_controller || new NodeCookController(this);\\n  }\\n  get io() {\\n    return this._io = this._io || new IOController(this);\\n  }\\n  get nameController() {\\n    return this._name_controller = this._name_controller || new NameController(this);\\n  }\\n  setName(name) {\\n    this.nameController.setName(name);\\n  }\\n  _set_core_name(name) {\\n    this._name = name;\\n  }\\n  get params() {\\n    return this._params_controller = this._params_controller || new ParamsController(this);\\n  }\\n  initialize_base_and_node() {\\n    if (!this._initialized) {\\n      this._initialized = true;\\n      this.displayNodeController?.initializeNode();\\n      this.initializeBaseNode();\\n      this.initializeNode();\\n      if (this.polyNodeController) {\\n        this.polyNodeController.initializeNode();\\n      }\\n    } else {\\n      console.warn(\\\\\\\"node already initialized\\\\\\\");\\n    }\\n  }\\n  initializeBaseNode() {\\n  }\\n  initializeNode() {\\n  }\\n  static type() {\\n    throw \\\\\\\"type to be overriden\\\\\\\";\\n  }\\n  type() {\\n    const c = this.constructor;\\n    return c.type();\\n  }\\n  static context() {\\n    console.error(\\\\\\\"node has no node_context\\\\\\\", this);\\n    throw \\\\\\\"context requires override\\\\\\\";\\n  }\\n  context() {\\n    const c = this.constructor;\\n    return c.context();\\n  }\\n  static require_webgl2() {\\n    return false;\\n  }\\n  require_webgl2() {\\n    const c = this.constructor;\\n    return c.require_webgl2();\\n  }\\n  setParent(parent) {\\n    this.parentController.setParent(parent);\\n  }\\n  parent() {\\n    return this.parentController.parent();\\n  }\\n  firstAncestorWithContext(context) {\\n    return this.parentController.firstAncestorWithContext(context);\\n  }\\n  root() {\\n    return this._scene.root();\\n  }\\n  path(relative_to_parent) {\\n    return this.parentController.path(relative_to_parent);\\n  }\\n  createParams() {\\n  }\\n  addParam(type, name, default_value, options) {\\n    return this._params_controller?.addParam(type, name, default_value, options);\\n  }\\n  paramDefaultValue(name) {\\n    return null;\\n  }\\n  cook(input_contents) {\\n    return null;\\n  }\\n  onCookEnd(callbackName, callback) {\\n    this.cookController.registerOnCookEnd(callbackName, callback);\\n  }\\n  async compute() {\\n    if (this.isDirty() || this.flags?.bypass?.active()) {\\n      return await this.containerController.compute();\\n    } else {\\n      return this.containerController.container();\\n    }\\n  }\\n  _setContainer(content, message = null) {\\n    this.containerController.container().set_content(content);\\n    if (content != null) {\\n      if (!content.name) {\\n        content.name = this.path();\\n      }\\n      if (!content.node) {\\n        content.node = this;\\n      }\\n    }\\n    this.cookController.endCook(message);\\n  }\\n  createNode(nodeClass, params_init_value_overrides) {\\n    return this.childrenController?.createNode(nodeClass, params_init_value_overrides);\\n  }\\n  create_operation_container(type, operation_container_name, params_init_value_overrides) {\\n    return this.childrenController?.create_operation_container(type, operation_container_name, params_init_value_overrides);\\n  }\\n  removeNode(node) {\\n    this.childrenController?.removeNode(node);\\n  }\\n  dispose() {\\n    super.dispose();\\n    this.setParent(null);\\n    this.io.inputs.dispose();\\n    this.lifecycle.dispose();\\n    this.displayNodeController?.dispose();\\n    this.nameController.dispose();\\n    this.childrenController?.dispose();\\n    this.params.dispose();\\n  }\\n  children() {\\n    return this.childrenController?.children() || [];\\n  }\\n  node(path) {\\n    return this.parentController?.findNode(path) || null;\\n  }\\n  nodeSibbling(name) {\\n    const parent = this.parent();\\n    if (parent) {\\n      const node = parent.childrenController?.childByName(name);\\n      if (node) {\\n        return node;\\n      }\\n    }\\n    return null;\\n  }\\n  nodesByType(type) {\\n    return this.childrenController?.nodesByType(type) || [];\\n  }\\n  setInput(input_index_or_name, node, output_index_or_name = 0) {\\n    this.io.inputs.setInput(input_index_or_name, node, output_index_or_name);\\n  }\\n  emit(event_name, data = null) {\\n    this.scene().dispatchController.dispatch(this, event_name, data);\\n  }\\n  toJSON(include_param_components = false) {\\n    return this.serializer.toJSON(include_param_components);\\n  }\\n  async requiredModules() {\\n  }\\n  usedAssembler() {\\n  }\\n  integrationData() {\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/obj/_Base.ts\\nvar INPUT_OBJECT_NAME = \\\\\\\"parent object\\\\\\\";\\nvar DEFAULT_INPUT_NAMES = [INPUT_OBJECT_NAME, INPUT_OBJECT_NAME, INPUT_OBJECT_NAME, INPUT_OBJECT_NAME];\\nvar ObjNodeRenderOrder;\\n(function(ObjNodeRenderOrder2) {\\n  ObjNodeRenderOrder2[ObjNodeRenderOrder2[\\\\\\\"MANAGER\\\\\\\"] = 0] = \\\\\\\"MANAGER\\\\\\\";\\n  ObjNodeRenderOrder2[ObjNodeRenderOrder2[\\\\\\\"CAMERA\\\\\\\"] = 2] = \\\\\\\"CAMERA\\\\\\\";\\n  ObjNodeRenderOrder2[ObjNodeRenderOrder2[\\\\\\\"LIGHT\\\\\\\"] = 3] = \\\\\\\"LIGHT\\\\\\\";\\n})(ObjNodeRenderOrder || (ObjNodeRenderOrder = {}));\\nvar TypedObjNode = class extends TypedNode {\\n  constructor() {\\n    super(...arguments);\\n    this.renderOrder = 0;\\n    this._children_group = this._create_children_group();\\n    this._attachableToHierarchy = true;\\n    this._used_in_scene = true;\\n  }\\n  static context() {\\n    return NodeContext.OBJ;\\n  }\\n  static displayedInputNames() {\\n    return DEFAULT_INPUT_NAMES;\\n  }\\n  _create_children_group() {\\n    const group = new Group();\\n    group.matrixAutoUpdate = false;\\n    return group;\\n  }\\n  attachableToHierarchy() {\\n    return this._attachableToHierarchy;\\n  }\\n  usedInScene() {\\n    return this._used_in_scene;\\n  }\\n  addObjectToParent(parent) {\\n    if (this.attachableToHierarchy()) {\\n      parent.add(this.object);\\n    }\\n  }\\n  removeObjectFromParent() {\\n    if (this.attachableToHierarchy()) {\\n      const parent = this.object.parent;\\n      if (parent) {\\n        parent.remove(this.object);\\n      }\\n    }\\n  }\\n  initializeBaseNode() {\\n    this._object = this._create_object_with_attributes();\\n    this.nameController.add_post_set_fullPath_hook(this.set_object_name.bind(this));\\n    this.set_object_name();\\n  }\\n  get children_group() {\\n    return this._children_group;\\n  }\\n  get object() {\\n    return this._object;\\n  }\\n  _create_object_with_attributes() {\\n    const object = this.createObject();\\n    object.node = this;\\n    object.add(this._children_group);\\n    return object;\\n  }\\n  set_object_name() {\\n    if (this._object) {\\n      this._object.name = this.path();\\n      this._children_group.name = `${this.path()}:parented_outputs`;\\n    }\\n  }\\n  createObject() {\\n    const object = new Object3D();\\n    object.matrixAutoUpdate = false;\\n    return object;\\n  }\\n  isDisplayNodeCooking() {\\n    if (this.displayNodeController) {\\n      const displayNode = this.displayNodeController.displayNode();\\n      if (displayNode) {\\n        return displayNode.cookController.isCooking();\\n      }\\n    }\\n    return false;\\n  }\\n  isDisplayed() {\\n    return this.flags?.display?.active() || false;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/audio/AudioAnalyser.js\\nvar AudioAnalyser = class {\\n  constructor(audio, fftSize = 2048) {\\n    this.analyser = audio.context.createAnalyser();\\n    this.analyser.fftSize = fftSize;\\n    this.data = new Uint8Array(this.analyser.frequencyBinCount);\\n    audio.getOutput().connect(this.analyser);\\n  }\\n  getFrequencyData() {\\n    this.analyser.getByteFrequencyData(this.data);\\n    return this.data;\\n  }\\n  getAverageFrequency() {\\n    let value = 0;\\n    const data = this.getFrequencyData();\\n    for (let i = 0; i < data.length; i++) {\\n      value += data[i];\\n    }\\n    return value / data.length;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/audio/Audio.js\\nvar Audio2 = class extends Object3D {\\n  constructor(listener) {\\n    super();\\n    this.type = \\\\\\\"Audio\\\\\\\";\\n    this.listener = listener;\\n    this.context = listener.context;\\n    this.gain = this.context.createGain();\\n    this.gain.connect(listener.getInput());\\n    this.autoplay = false;\\n    this.buffer = null;\\n    this.detune = 0;\\n    this.loop = false;\\n    this.loopStart = 0;\\n    this.loopEnd = 0;\\n    this.offset = 0;\\n    this.duration = void 0;\\n    this.playbackRate = 1;\\n    this.isPlaying = false;\\n    this.hasPlaybackControl = true;\\n    this.source = null;\\n    this.sourceType = \\\\\\\"empty\\\\\\\";\\n    this._startedAt = 0;\\n    this._progress = 0;\\n    this._connected = false;\\n    this.filters = [];\\n  }\\n  getOutput() {\\n    return this.gain;\\n  }\\n  setNodeSource(audioNode) {\\n    this.hasPlaybackControl = false;\\n    this.sourceType = \\\\\\\"audioNode\\\\\\\";\\n    this.source = audioNode;\\n    this.connect();\\n    return this;\\n  }\\n  setMediaElementSource(mediaElement) {\\n    this.hasPlaybackControl = false;\\n    this.sourceType = \\\\\\\"mediaNode\\\\\\\";\\n    this.source = this.context.createMediaElementSource(mediaElement);\\n    this.connect();\\n    return this;\\n  }\\n  setMediaStreamSource(mediaStream) {\\n    this.hasPlaybackControl = false;\\n    this.sourceType = \\\\\\\"mediaStreamNode\\\\\\\";\\n    this.source = this.context.createMediaStreamSource(mediaStream);\\n    this.connect();\\n    return this;\\n  }\\n  setBuffer(audioBuffer) {\\n    this.buffer = audioBuffer;\\n    this.sourceType = \\\\\\\"buffer\\\\\\\";\\n    if (this.autoplay)\\n      this.play();\\n    return this;\\n  }\\n  play(delay = 0) {\\n    if (this.isPlaying === true) {\\n      console.warn(\\\\\\\"THREE.Audio: Audio is already playing.\\\\\\\");\\n      return;\\n    }\\n    if (this.hasPlaybackControl === false) {\\n      console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");\\n      return;\\n    }\\n    this._startedAt = this.context.currentTime + delay;\\n    const source = this.context.createBufferSource();\\n    source.buffer = this.buffer;\\n    source.loop = this.loop;\\n    source.loopStart = this.loopStart;\\n    source.loopEnd = this.loopEnd;\\n    source.onended = this.onEnded.bind(this);\\n    source.start(this._startedAt, this._progress + this.offset, this.duration);\\n    this.isPlaying = true;\\n    this.source = source;\\n    this.setDetune(this.detune);\\n    this.setPlaybackRate(this.playbackRate);\\n    return this.connect();\\n  }\\n  pause() {\\n    if (this.hasPlaybackControl === false) {\\n      console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");\\n      return;\\n    }\\n    if (this.isPlaying === true) {\\n      this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate;\\n      if (this.loop === true) {\\n        this._progress = this._progress % (this.duration || this.buffer.duration);\\n      }\\n      this.source.stop();\\n      this.source.onended = null;\\n      this.isPlaying = false;\\n    }\\n    return this;\\n  }\\n  stop() {\\n    if (this.hasPlaybackControl === false) {\\n      console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");\\n      return;\\n    }\\n    this._progress = 0;\\n    this.source.stop();\\n    this.source.onended = null;\\n    this.isPlaying = false;\\n    return this;\\n  }\\n  connect() {\\n    if (this.filters.length > 0) {\\n      this.source.connect(this.filters[0]);\\n      for (let i = 1, l = this.filters.length; i < l; i++) {\\n        this.filters[i - 1].connect(this.filters[i]);\\n      }\\n      this.filters[this.filters.length - 1].connect(this.getOutput());\\n    } else {\\n      this.source.connect(this.getOutput());\\n    }\\n    this._connected = true;\\n    return this;\\n  }\\n  disconnect() {\\n    if (this.filters.length > 0) {\\n      this.source.disconnect(this.filters[0]);\\n      for (let i = 1, l = this.filters.length; i < l; i++) {\\n        this.filters[i - 1].disconnect(this.filters[i]);\\n      }\\n      this.filters[this.filters.length - 1].disconnect(this.getOutput());\\n    } else {\\n      this.source.disconnect(this.getOutput());\\n    }\\n    this._connected = false;\\n    return this;\\n  }\\n  getFilters() {\\n    return this.filters;\\n  }\\n  setFilters(value) {\\n    if (!value)\\n      value = [];\\n    if (this._connected === true) {\\n      this.disconnect();\\n      this.filters = value.slice();\\n      this.connect();\\n    } else {\\n      this.filters = value.slice();\\n    }\\n    return this;\\n  }\\n  setDetune(value) {\\n    this.detune = value;\\n    if (this.source.detune === void 0)\\n      return;\\n    if (this.isPlaying === true) {\\n      this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, 0.01);\\n    }\\n    return this;\\n  }\\n  getDetune() {\\n    return this.detune;\\n  }\\n  getFilter() {\\n    return this.getFilters()[0];\\n  }\\n  setFilter(filter) {\\n    return this.setFilters(filter ? [filter] : []);\\n  }\\n  setPlaybackRate(value) {\\n    if (this.hasPlaybackControl === false) {\\n      console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");\\n      return;\\n    }\\n    this.playbackRate = value;\\n    if (this.isPlaying === true) {\\n      this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, 0.01);\\n    }\\n    return this;\\n  }\\n  getPlaybackRate() {\\n    return this.playbackRate;\\n  }\\n  onEnded() {\\n    this.isPlaying = false;\\n  }\\n  getLoop() {\\n    if (this.hasPlaybackControl === false) {\\n      console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");\\n      return false;\\n    }\\n    return this.loop;\\n  }\\n  setLoop(value) {\\n    if (this.hasPlaybackControl === false) {\\n      console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");\\n      return;\\n    }\\n    this.loop = value;\\n    if (this.isPlaying === true) {\\n      this.source.loop = this.loop;\\n    }\\n    return this;\\n  }\\n  setLoopStart(value) {\\n    this.loopStart = value;\\n    return this;\\n  }\\n  setLoopEnd(value) {\\n    this.loopEnd = value;\\n    return this;\\n  }\\n  getVolume() {\\n    return this.gain.gain.value;\\n  }\\n  setVolume(value) {\\n    this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01);\\n    return this;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/audio/AudioContext.js\\nvar _context;\\nvar AudioContext = {\\n  getContext: function() {\\n    if (_context === void 0) {\\n      _context = new (window.AudioContext || window.webkitAudioContext)();\\n    }\\n    return _context;\\n  },\\n  setContext: function(value) {\\n    _context = value;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/loaders/Cache.js\\nvar Cache = {\\n  enabled: false,\\n  files: {},\\n  add: function(key, file) {\\n    if (this.enabled === false)\\n      return;\\n    this.files[key] = file;\\n  },\\n  get: function(key) {\\n    if (this.enabled === false)\\n      return;\\n    return this.files[key];\\n  },\\n  remove: function(key) {\\n    delete this.files[key];\\n  },\\n  clear: function() {\\n    this.files = {};\\n  }\\n};\\n\\n// ../../../node_modules/three/src/loaders/LoadingManager.js\\nvar LoadingManager = class {\\n  constructor(onLoad, onProgress, onError) {\\n    const scope = this;\\n    let isLoading = false;\\n    let itemsLoaded = 0;\\n    let itemsTotal = 0;\\n    let urlModifier = void 0;\\n    const handlers = [];\\n    this.onStart = void 0;\\n    this.onLoad = onLoad;\\n    this.onProgress = onProgress;\\n    this.onError = onError;\\n    this.itemStart = function(url) {\\n      itemsTotal++;\\n      if (isLoading === false) {\\n        if (scope.onStart !== void 0) {\\n          scope.onStart(url, itemsLoaded, itemsTotal);\\n        }\\n      }\\n      isLoading = true;\\n    };\\n    this.itemEnd = function(url) {\\n      itemsLoaded++;\\n      if (scope.onProgress !== void 0) {\\n        scope.onProgress(url, itemsLoaded, itemsTotal);\\n      }\\n      if (itemsLoaded === itemsTotal) {\\n        isLoading = false;\\n        if (scope.onLoad !== void 0) {\\n          scope.onLoad();\\n        }\\n      }\\n    };\\n    this.itemError = function(url) {\\n      if (scope.onError !== void 0) {\\n        scope.onError(url);\\n      }\\n    };\\n    this.resolveURL = function(url) {\\n      if (urlModifier) {\\n        return urlModifier(url);\\n      }\\n      return url;\\n    };\\n    this.setURLModifier = function(transform) {\\n      urlModifier = transform;\\n      return this;\\n    };\\n    this.addHandler = function(regex, loader) {\\n      handlers.push(regex, loader);\\n      return this;\\n    };\\n    this.removeHandler = function(regex) {\\n      const index = handlers.indexOf(regex);\\n      if (index !== -1) {\\n        handlers.splice(index, 2);\\n      }\\n      return this;\\n    };\\n    this.getHandler = function(file) {\\n      for (let i = 0, l = handlers.length; i < l; i += 2) {\\n        const regex = handlers[i];\\n        const loader = handlers[i + 1];\\n        if (regex.global)\\n          regex.lastIndex = 0;\\n        if (regex.test(file)) {\\n          return loader;\\n        }\\n      }\\n      return null;\\n    };\\n  }\\n};\\nvar DefaultLoadingManager = new LoadingManager();\\n\\n// ../../../node_modules/three/src/loaders/Loader.js\\nvar Loader = class {\\n  constructor(manager) {\\n    this.manager = manager !== void 0 ? manager : DefaultLoadingManager;\\n    this.crossOrigin = \\\\\\\"anonymous\\\\\\\";\\n    this.withCredentials = false;\\n    this.path = \\\\\\\"\\\\\\\";\\n    this.resourcePath = \\\\\\\"\\\\\\\";\\n    this.requestHeader = {};\\n  }\\n  load() {\\n  }\\n  loadAsync(url, onProgress) {\\n    const scope = this;\\n    return new Promise(function(resolve, reject) {\\n      scope.load(url, resolve, onProgress, reject);\\n    });\\n  }\\n  parse() {\\n  }\\n  setCrossOrigin(crossOrigin) {\\n    this.crossOrigin = crossOrigin;\\n    return this;\\n  }\\n  setWithCredentials(value) {\\n    this.withCredentials = value;\\n    return this;\\n  }\\n  setPath(path) {\\n    this.path = path;\\n    return this;\\n  }\\n  setResourcePath(resourcePath) {\\n    this.resourcePath = resourcePath;\\n    return this;\\n  }\\n  setRequestHeader(requestHeader) {\\n    this.requestHeader = requestHeader;\\n    return this;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/loaders/FileLoader.js\\nvar loading = {};\\nvar FileLoader = class extends Loader {\\n  constructor(manager) {\\n    super(manager);\\n  }\\n  load(url, onLoad, onProgress, onError) {\\n    if (url === void 0)\\n      url = \\\\\\\"\\\\\\\";\\n    if (this.path !== void 0)\\n      url = this.path + url;\\n    url = this.manager.resolveURL(url);\\n    const scope = this;\\n    const cached = Cache.get(url);\\n    if (cached !== void 0) {\\n      scope.manager.itemStart(url);\\n      setTimeout(function() {\\n        if (onLoad)\\n          onLoad(cached);\\n        scope.manager.itemEnd(url);\\n      }, 0);\\n      return cached;\\n    }\\n    if (loading[url] !== void 0) {\\n      loading[url].push({\\n        onLoad,\\n        onProgress,\\n        onError\\n      });\\n      return;\\n    }\\n    const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\\n    const dataUriRegexResult = url.match(dataUriRegex);\\n    let request;\\n    if (dataUriRegexResult) {\\n      const mimeType = dataUriRegexResult[1];\\n      const isBase64 = !!dataUriRegexResult[2];\\n      let data = dataUriRegexResult[3];\\n      data = decodeURIComponent(data);\\n      if (isBase64)\\n        data = atob(data);\\n      try {\\n        let response;\\n        const responseType = (this.responseType || \\\\\\\"\\\\\\\").toLowerCase();\\n        switch (responseType) {\\n          case \\\\\\\"arraybuffer\\\\\\\":\\n          case \\\\\\\"blob\\\\\\\":\\n            const view = new Uint8Array(data.length);\\n            for (let i = 0; i < data.length; i++) {\\n              view[i] = data.charCodeAt(i);\\n            }\\n            if (responseType === \\\\\\\"blob\\\\\\\") {\\n              response = new Blob([view.buffer], {type: mimeType});\\n            } else {\\n              response = view.buffer;\\n            }\\n            break;\\n          case \\\\\\\"document\\\\\\\":\\n            const parser = new DOMParser();\\n            response = parser.parseFromString(data, mimeType);\\n            break;\\n          case \\\\\\\"json\\\\\\\":\\n            response = JSON.parse(data);\\n            break;\\n          default:\\n            response = data;\\n            break;\\n        }\\n        setTimeout(function() {\\n          if (onLoad)\\n            onLoad(response);\\n          scope.manager.itemEnd(url);\\n        }, 0);\\n      } catch (error) {\\n        setTimeout(function() {\\n          if (onError)\\n            onError(error);\\n          scope.manager.itemError(url);\\n          scope.manager.itemEnd(url);\\n        }, 0);\\n      }\\n    } else {\\n      loading[url] = [];\\n      loading[url].push({\\n        onLoad,\\n        onProgress,\\n        onError\\n      });\\n      request = new XMLHttpRequest();\\n      request.open(\\\\\\\"GET\\\\\\\", url, true);\\n      request.addEventListener(\\\\\\\"load\\\\\\\", function(event) {\\n        const response = this.response;\\n        const callbacks = loading[url];\\n        delete loading[url];\\n        if (this.status === 200 || this.status === 0) {\\n          if (this.status === 0)\\n            console.warn(\\\\\\\"THREE.FileLoader: HTTP Status 0 received.\\\\\\\");\\n          Cache.add(url, response);\\n          for (let i = 0, il = callbacks.length; i < il; i++) {\\n            const callback = callbacks[i];\\n            if (callback.onLoad)\\n              callback.onLoad(response);\\n          }\\n          scope.manager.itemEnd(url);\\n        } else {\\n          for (let i = 0, il = callbacks.length; i < il; i++) {\\n            const callback = callbacks[i];\\n            if (callback.onError)\\n              callback.onError(event);\\n          }\\n          scope.manager.itemError(url);\\n          scope.manager.itemEnd(url);\\n        }\\n      }, false);\\n      request.addEventListener(\\\\\\\"progress\\\\\\\", function(event) {\\n        const callbacks = loading[url];\\n        for (let i = 0, il = callbacks.length; i < il; i++) {\\n          const callback = callbacks[i];\\n          if (callback.onProgress)\\n            callback.onProgress(event);\\n        }\\n      }, false);\\n      request.addEventListener(\\\\\\\"error\\\\\\\", function(event) {\\n        const callbacks = loading[url];\\n        delete loading[url];\\n        for (let i = 0, il = callbacks.length; i < il; i++) {\\n          const callback = callbacks[i];\\n          if (callback.onError)\\n            callback.onError(event);\\n        }\\n        scope.manager.itemError(url);\\n        scope.manager.itemEnd(url);\\n      }, false);\\n      request.addEventListener(\\\\\\\"abort\\\\\\\", function(event) {\\n        const callbacks = loading[url];\\n        delete loading[url];\\n        for (let i = 0, il = callbacks.length; i < il; i++) {\\n          const callback = callbacks[i];\\n          if (callback.onError)\\n            callback.onError(event);\\n        }\\n        scope.manager.itemError(url);\\n        scope.manager.itemEnd(url);\\n      }, false);\\n      if (this.responseType !== void 0)\\n        request.responseType = this.responseType;\\n      if (this.withCredentials !== void 0)\\n        request.withCredentials = this.withCredentials;\\n      if (request.overrideMimeType)\\n        request.overrideMimeType(this.mimeType !== void 0 ? this.mimeType : \\\\\\\"text/plain\\\\\\\");\\n      for (const header in this.requestHeader) {\\n        request.setRequestHeader(header, this.requestHeader[header]);\\n      }\\n      request.send(null);\\n    }\\n    scope.manager.itemStart(url);\\n    return request;\\n  }\\n  setResponseType(value) {\\n    this.responseType = value;\\n    return this;\\n  }\\n  setMimeType(value) {\\n    this.mimeType = value;\\n    return this;\\n  }\\n};\\n\\n// ../../../node_modules/three/src/loaders/AudioLoader.js\\nvar AudioLoader = class extends Loader {\\n  constructor(manager) {\\n    super(manager);\\n  }\\n  load(url, onLoad, onProgress, onError) {\\n    const scope = this;\\n    const loader = new FileLoader(this.manager);\\n    loader.setResponseType(\\\\\\\"arraybuffer\\\\\\\");\\n    loader.setPath(this.path);\\n    loader.setRequestHeader(this.requestHeader);\\n    loader.setWithCredentials(this.withCredentials);\\n    loader.load(url, function(buffer) {\\n      try {\\n        const bufferCopy = buffer.slice(0);\\n        const context = AudioContext.getContext();\\n        context.decodeAudioData(bufferCopy, function(audioBuffer) {\\n          onLoad(audioBuffer);\\n        });\\n      } catch (e) {\\n        if (onError) {\\n          onError(e);\\n        } else {\\n          console.error(e);\\n        }\\n        scope.manager.itemError(url);\\n      }\\n    }, onProgress, onError);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/utils/params/ParamsConfig.ts\\nvar ParamTemplate = class {\\n  constructor(type, init_value, options) {\\n    this.type = type;\\n    this.init_value = init_value;\\n    this.options = options;\\n  }\\n};\\nvar ParamConfig = class {\\n  static BUTTON(init_value, options) {\\n    return new ParamTemplate(ParamType.BUTTON, init_value, options);\\n  }\\n  static BOOLEAN(init_value, options) {\\n    return new ParamTemplate(ParamType.BOOLEAN, init_value, options);\\n  }\\n  static COLOR(init_value, options) {\\n    if (init_value instanceof Color) {\\n      init_value = init_value.toArray();\\n    }\\n    return new ParamTemplate(ParamType.COLOR, init_value, options);\\n  }\\n  static FLOAT(init_value, options) {\\n    return new ParamTemplate(ParamType.FLOAT, init_value, options);\\n  }\\n  static FOLDER(init_value = null, options) {\\n    return new ParamTemplate(ParamType.FOLDER, init_value, options);\\n  }\\n  static INTEGER(init_value, options) {\\n    return new ParamTemplate(ParamType.INTEGER, init_value, options);\\n  }\\n  static RAMP(init_value = RampParam.DEFAULT_VALUE, options) {\\n    return new ParamTemplate(ParamType.RAMP, init_value, options);\\n  }\\n  static STRING(init_value = \\\\\\\"\\\\\\\", options) {\\n    return new ParamTemplate(ParamType.STRING, init_value, options);\\n  }\\n  static VECTOR2(init_value, options) {\\n    if (init_value instanceof Vector2) {\\n      init_value = init_value.toArray();\\n    }\\n    return new ParamTemplate(ParamType.VECTOR2, init_value, options);\\n  }\\n  static VECTOR3(init_value, options) {\\n    if (init_value instanceof Vector3) {\\n      init_value = init_value.toArray();\\n    }\\n    return new ParamTemplate(ParamType.VECTOR3, init_value, options);\\n  }\\n  static VECTOR4(init_value, options) {\\n    if (init_value instanceof Vector4) {\\n      init_value = init_value.toArray();\\n    }\\n    return new ParamTemplate(ParamType.VECTOR4, init_value, options);\\n  }\\n  static OPERATOR_PATH(init_value, options) {\\n    return new ParamTemplate(ParamType.OPERATOR_PATH, init_value, options);\\n  }\\n  static NODE_PATH(init_value, options) {\\n    return new ParamTemplate(ParamType.NODE_PATH, init_value, options);\\n  }\\n  static PARAM_PATH(init_value, options) {\\n    return new ParamTemplate(ParamType.PARAM_PATH, init_value, options);\\n  }\\n};\\nvar NodeParamsConfig = class {\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/Transform.ts\\nvar TransformTargetType;\\n(function(TransformTargetType2) {\\n  TransformTargetType2[\\\\\\\"OBJECTS\\\\\\\"] = \\\\\\\"objects\\\\\\\";\\n  TransformTargetType2[\\\\\\\"GEOMETRIES\\\\\\\"] = \\\\\\\"geometries\\\\\\\";\\n})(TransformTargetType || (TransformTargetType = {}));\\nvar TRANSFORM_TARGET_TYPES = [\\n  TransformTargetType.GEOMETRIES,\\n  TransformTargetType.OBJECTS\\n];\\nvar RotationOrder;\\n(function(RotationOrder2) {\\n  RotationOrder2[\\\\\\\"XYZ\\\\\\\"] = \\\\\\\"XYZ\\\\\\\";\\n  RotationOrder2[\\\\\\\"XZY\\\\\\\"] = \\\\\\\"XZY\\\\\\\";\\n  RotationOrder2[\\\\\\\"YXZ\\\\\\\"] = \\\\\\\"YXZ\\\\\\\";\\n  RotationOrder2[\\\\\\\"YZX\\\\\\\"] = \\\\\\\"YZX\\\\\\\";\\n  RotationOrder2[\\\\\\\"ZYX\\\\\\\"] = \\\\\\\"ZYX\\\\\\\";\\n  RotationOrder2[\\\\\\\"ZXY\\\\\\\"] = \\\\\\\"ZXY\\\\\\\";\\n})(RotationOrder || (RotationOrder = {}));\\nvar ROTATION_ORDERS = [\\n  RotationOrder.XYZ,\\n  RotationOrder.XZY,\\n  RotationOrder.YXZ,\\n  RotationOrder.YZX,\\n  RotationOrder.ZXY,\\n  RotationOrder.ZYX\\n];\\nvar DEFAULT_ROTATION_ORDER = RotationOrder.XYZ;\\nvar CoreTransform = class {\\n  constructor() {\\n    this._translation_matrix = new Matrix4();\\n    this._translation_matrix_q = new Quaternion();\\n    this._translation_matrix_s = new Vector3(1, 1, 1);\\n    this._matrix = new Matrix4().identity();\\n    this._matrix_q = new Quaternion();\\n    this._matrix_euler = new Euler();\\n    this._matrix_s = new Vector3();\\n    this._rotate_geometry_m = new Matrix4();\\n    this._rotate_geometry_q = new Quaternion();\\n    this._rotate_geometry_vec_dest = new Vector3();\\n  }\\n  static setParamsFromMatrix(matrix, node, options = {}) {\\n    let update_scale = options[\\\\\\\"scale\\\\\\\"];\\n    if (update_scale == null) {\\n      update_scale = true;\\n    }\\n    matrix.decompose(this.set_params_from_matrix_position, this.set_params_from_matrix_quaternion, this.set_params_from_matrix_scale);\\n    this.set_params_from_matrix_euler.setFromQuaternion(this.set_params_from_matrix_quaternion);\\n    this.set_params_from_matrix_euler.toVector3(this.set_params_from_matrix_rotation);\\n    this.set_params_from_matrix_rotation.divideScalar(Math.PI / 180);\\n    this.set_params_from_matrix_position.toArray(this.set_params_from_matrix_t);\\n    this.set_params_from_matrix_rotation.toArray(this.set_params_from_matrix_r);\\n    this.set_params_from_matrix_scale.toArray(this.set_params_from_matrix_s);\\n    node.scene().batchUpdates(() => {\\n      node.params.set_vector3(\\\\\\\"t\\\\\\\", this.set_params_from_matrix_t);\\n      node.params.set_vector3(\\\\\\\"r\\\\\\\", this.set_params_from_matrix_r);\\n      node.params.set_vector3(\\\\\\\"s\\\\\\\", this.set_params_from_matrix_s);\\n      if (update_scale) {\\n        node.params.set_float(\\\\\\\"scale\\\\\\\", 1);\\n      }\\n    });\\n  }\\n  static setParamsFromObject(object, node) {\\n    object.position.toArray(this.set_params_from_object_position_array);\\n    object.rotation.toArray(this.set_params_from_object_rotation_array);\\n    this.set_params_from_object_rotation_deg.fromArray(this.set_params_from_object_rotation_array);\\n    this.set_params_from_object_rotation_deg.multiplyScalar(180 / Math.PI);\\n    this.set_params_from_object_rotation_deg.toArray(this.set_params_from_object_rotation_array);\\n    node.scene().batchUpdates(() => {\\n      node.params.set_vector3(\\\\\\\"t\\\\\\\", this.set_params_from_object_position_array);\\n      node.params.set_vector3(\\\\\\\"r\\\\\\\", this.set_params_from_object_rotation_array);\\n    });\\n  }\\n  translationMatrix(t) {\\n    this._translation_matrix.compose(t, this._translation_matrix_q, this._translation_matrix_s);\\n    return this._translation_matrix;\\n  }\\n  matrix(t, r, s, scale, rotation_order) {\\n    this._matrix_euler.set(degToRad(r.x), degToRad(r.y), degToRad(r.z), rotation_order);\\n    this._matrix_q.setFromEuler(this._matrix_euler);\\n    this._matrix_s.copy(s).multiplyScalar(scale);\\n    this._matrix.compose(t, this._matrix_q, this._matrix_s);\\n    return this._matrix;\\n  }\\n  rotateGeometry(geometry, vec_origin, vec_dest) {\\n    this._rotate_geometry_vec_dest.copy(vec_dest);\\n    this._rotate_geometry_vec_dest.normalize();\\n    this._rotate_geometry_q.setFromUnitVectors(vec_origin, this._rotate_geometry_vec_dest);\\n    this._rotate_geometry_m.makeRotationFromQuaternion(this._rotate_geometry_q);\\n    geometry.applyMatrix4(this._rotate_geometry_m);\\n  }\\n  static decomposeMatrix(object) {\\n    object.matrix.decompose(object.position, object.quaternion, object.scale);\\n  }\\n};\\nCoreTransform.set_params_from_matrix_position = new Vector3();\\nCoreTransform.set_params_from_matrix_quaternion = new Quaternion();\\nCoreTransform.set_params_from_matrix_scale = new Vector3();\\nCoreTransform.set_params_from_matrix_euler = new Euler();\\nCoreTransform.set_params_from_matrix_rotation = new Vector3();\\nCoreTransform.set_params_from_matrix_t = [0, 0, 0];\\nCoreTransform.set_params_from_matrix_r = [0, 0, 0];\\nCoreTransform.set_params_from_matrix_s = [0, 0, 0];\\nCoreTransform.set_params_from_object_position_array = [0, 0, 0];\\nCoreTransform.set_params_from_object_rotation_deg = new Vector3();\\nCoreTransform.set_params_from_object_rotation_array = [0, 0, 0];\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/obj/utils/TransformController.ts\\nfunction TransformedParamConfig(Base, default_params) {\\n  const matrixAutoUpdate = default_params?.matrixAutoUpdate || false;\\n  return class Mixin extends Base {\\n    constructor() {\\n      super(...arguments);\\n      this.transform = ParamConfig.FOLDER();\\n      this.keepPosWhenParenting = ParamConfig.BOOLEAN(0);\\n      this.rotationOrder = ParamConfig.INTEGER(ROTATION_ORDERS.indexOf(RotationOrder.XYZ), {\\n        menu: {\\n          entries: ROTATION_ORDERS.map((order, v) => {\\n            return {name: order, value: v};\\n          })\\n        }\\n      });\\n      this.t = ParamConfig.VECTOR3([0, 0, 0]);\\n      this.r = ParamConfig.VECTOR3([0, 0, 0]);\\n      this.s = ParamConfig.VECTOR3([1, 1, 1]);\\n      this.scale = ParamConfig.FLOAT(1);\\n      this.matrixAutoUpdate = ParamConfig.BOOLEAN(matrixAutoUpdate ? 1 : 0);\\n      this.updateTransformFromObject = ParamConfig.BUTTON(null, {\\n        callback: (node) => {\\n          TransformController.PARAM_CALLBACK_update_transform_from_object(node);\\n        }\\n      });\\n    }\\n  };\\n}\\nvar TransformedParamsConfig = class extends TransformedParamConfig(NodeParamsConfig) {\\n};\\nvar HOOK_NAME = \\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\";\\nvar TransformController = class {\\n  constructor(node) {\\n    this.node = node;\\n    this._cook_main_without_inputs_when_dirty_bound = this._cook_main_without_inputs_when_dirty.bind(this);\\n    this._core_transform = new CoreTransform();\\n    this._keep_pos_when_parenting_m_object = new Matrix4();\\n    this._keep_pos_when_parenting_m_new_parent_inv = new Matrix4();\\n  }\\n  initializeNode() {\\n    if (!this.node.dirtyController.hasHook(HOOK_NAME)) {\\n      this.node.dirtyController.addPostDirtyHook(HOOK_NAME, this._cook_main_without_inputs_when_dirty_bound);\\n    }\\n  }\\n  async _cook_main_without_inputs_when_dirty() {\\n    await this.node.cookController.cookMainWithoutInputs();\\n  }\\n  update() {\\n    this.update_transform_with_matrix();\\n    const object = this.node.object;\\n    object.matrixAutoUpdate = isBooleanTrue(this.node.pv.matrixAutoUpdate);\\n  }\\n  update_transform_with_matrix(matrix) {\\n    const object = this.node.object;\\n    if (matrix != null && !matrix.equals(object.matrix)) {\\n      object.matrix.copy(matrix);\\n      object.dispatchEvent({type: \\\\\\\"change\\\\\\\"});\\n    } else {\\n      this._update_matrix_from_params_with_core_transform();\\n    }\\n  }\\n  _update_matrix_from_params_with_core_transform() {\\n    const object = this.node.object;\\n    let prev_auto_update = object.matrixAutoUpdate;\\n    if (prev_auto_update) {\\n      object.matrixAutoUpdate = false;\\n    }\\n    const matrix = this._core_transform.matrix(this.node.pv.t, this.node.pv.r, this.node.pv.s, this.node.pv.scale, ROTATION_ORDERS[this.node.pv.rotationOrder]);\\n    object.matrix.identity();\\n    object.applyMatrix4(matrix);\\n    this._apply_look_at();\\n    object.updateMatrix();\\n    if (prev_auto_update) {\\n      object.matrixAutoUpdate = true;\\n    }\\n    object.dispatchEvent({type: \\\\\\\"change\\\\\\\"});\\n  }\\n  _apply_look_at() {\\n  }\\n  set_params_from_matrix(matrix, options = {}) {\\n    CoreTransform.setParamsFromMatrix(matrix, this.node, options);\\n  }\\n  static update_node_transform_params_if_required(node, new_parent_object) {\\n    node.transformController.update_node_transform_params_if_required(new_parent_object);\\n  }\\n  update_node_transform_params_if_required(new_parent_object) {\\n    if (!isBooleanTrue(this.node.pv.keepPosWhenParenting)) {\\n      return;\\n    }\\n    if (!this.node.scene().loadingController.loaded()) {\\n      return;\\n    }\\n    if (new_parent_object == this.node.object.parent) {\\n      return;\\n    }\\n    const object = this.node.object;\\n    object.updateMatrixWorld(true);\\n    new_parent_object.updateMatrixWorld(true);\\n    this._keep_pos_when_parenting_m_object.copy(object.matrixWorld);\\n    this._keep_pos_when_parenting_m_new_parent_inv.copy(new_parent_object.matrixWorld);\\n    this._keep_pos_when_parenting_m_new_parent_inv.invert();\\n    this._keep_pos_when_parenting_m_object.premultiply(this._keep_pos_when_parenting_m_new_parent_inv);\\n    CoreTransform.setParamsFromMatrix(this._keep_pos_when_parenting_m_object, this.node, {scale: true});\\n  }\\n  update_node_transform_params_from_object(update_matrix = false) {\\n    const object = this.node.object;\\n    if (update_matrix) {\\n      object.updateMatrix();\\n    }\\n    CoreTransform.setParamsFromMatrix(object.matrix, this.node, {scale: true});\\n  }\\n  static PARAM_CALLBACK_update_transform_from_object(node) {\\n    node.transformController.update_node_transform_params_from_object();\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/obj/utils/HierarchyController.ts\\nvar HierarchyController = class {\\n  constructor(node) {\\n    this.node = node;\\n  }\\n  initializeNode() {\\n    this.node.io.inputs.setCount(0, 1);\\n    this.node.io.inputs.set_depends_on_inputs(false);\\n    this.node.io.outputs.setHasOneOutput();\\n    this.node.io.inputs.add_on_set_input_hook(\\\\\\\"on_input_updated:update_parent\\\\\\\", () => {\\n      this.on_input_updated();\\n    });\\n  }\\n  static on_input_updated(node) {\\n    const parent_object = node.root().getParentForNode(node);\\n    if (node.transformController && parent_object) {\\n      TransformController.update_node_transform_params_if_required(node, parent_object);\\n    }\\n    if (node.io.inputs.input(0) != null) {\\n      node.root().addToParentTransform(node);\\n    } else {\\n      node.root().removeFromParentTransform(node);\\n    }\\n  }\\n  on_input_updated() {\\n    HierarchyController.on_input_updated(this.node);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/loader/_Base.ts\\nvar LOADING_MANAGER = new LoadingManager();\\nLOADING_MANAGER.setURLModifier((url) => {\\n  const remapedUrl = Poly.assetUrls.remapedUrl(url);\\n  if (remapedUrl) {\\n    return remapedUrl;\\n  }\\n  const blobUrl = Poly.blobs.blobUrl(url);\\n  if (blobUrl) {\\n    return blobUrl;\\n  }\\n  return url;\\n});\\nvar CoreBaseLoader2 = class {\\n  constructor(_url, _scene, _node) {\\n    this._url = _url;\\n    this._scene = _scene;\\n    this._node = _node;\\n    this.loadingManager = LOADING_MANAGER;\\n  }\\n  static extension(url) {\\n    let ext = null;\\n    try {\\n      const _url = new URL(url);\\n      ext = _url.searchParams.get(\\\\\\\"ext\\\\\\\");\\n    } catch (e) {\\n    }\\n    if (!ext) {\\n      const url_without_params = url.split(\\\\\\\"?\\\\\\\")[0];\\n      const elements = url_without_params.split(\\\\\\\".\\\\\\\");\\n      ext = elements[elements.length - 1].toLowerCase();\\n    }\\n    return ext;\\n  }\\n  extension() {\\n    return CoreBaseLoader2.extension(this._url);\\n  }\\n  async _urlToLoad() {\\n    const {storedUrl, fullUrl} = this._urlData();\\n    if (this._node) {\\n      await Poly.blobs.fetchBlobForNode({storedUrl, fullUrl, node: this._node});\\n    }\\n    const blobUrl = Poly.blobs.blobUrl(storedUrl);\\n    return blobUrl || fullUrl;\\n  }\\n  deregisterUrl() {\\n    const {storedUrl} = this._urlData();\\n    Poly.blobs.deregisterUrl(storedUrl);\\n  }\\n  _urlData() {\\n    let fullUrl = this._url;\\n    const storedUrl = this._url.split(\\\\\\\"?\\\\\\\")[0];\\n    if (fullUrl[0] != \\\\\\\"h\\\\\\\") {\\n      const assets_root = this._scene.assets.root();\\n      if (assets_root) {\\n        fullUrl = `${assets_root}${fullUrl}`;\\n      }\\n    }\\n    return {fullUrl, storedUrl};\\n  }\\n  static async _loadMultipleBlobGlobal(options) {\\n    const promises = [];\\n    for (let file of options.files) {\\n      const storedUrl = file.storedUrl;\\n      const fullUrl = file.fullUrl;\\n      const node = options.node;\\n      promises.push(Poly.blobs.fetchBlobGlobal({storedUrl, fullUrl, node}));\\n    }\\n    const responses = await Promise.all(promises);\\n    for (let response of responses) {\\n      if (response.error) {\\n        options.node.states.error.set(options.error);\\n      }\\n    }\\n  }\\n};\\nvar CoreBaseLoader = CoreBaseLoader2;\\nCoreBaseLoader.loadingManager = LOADING_MANAGER;\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/loader/Audio.ts\\nvar Extension;\\n(function(Extension2) {\\n  Extension2[\\\\\\\"MP3\\\\\\\"] = \\\\\\\"mp3\\\\\\\";\\n  Extension2[\\\\\\\"WAV\\\\\\\"] = \\\\\\\"wav\\\\\\\";\\n})(Extension || (Extension = {}));\\nvar AUDIO_EXTENSIONS = [Extension.MP3, Extension.WAV];\\nvar CoreLoaderAudio = class extends CoreBaseLoader {\\n  async load() {\\n    const audioLoader = new AudioLoader(this.loadingManager);\\n    const url = await this._urlToLoad();\\n    return new Promise((resolve) => {\\n      audioLoader.load(url, function(buffer) {\\n        resolve(buffer);\\n      });\\n    });\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/poly/registers/nodes/types/Obj.ts\\nvar ObjType;\\n(function(ObjType2) {\\n  ObjType2[\\\\\\\"GEO\\\\\\\"] = \\\\\\\"geo\\\\\\\";\\n  ObjType2[\\\\\\\"CUBE_CAMERA\\\\\\\"] = \\\\\\\"cubeCamera\\\\\\\";\\n  ObjType2[\\\\\\\"AUDIO_LISTENER\\\\\\\"] = \\\\\\\"audioListener\\\\\\\";\\n  ObjType2[\\\\\\\"POSITIONAL_AUDIO\\\\\\\"] = \\\\\\\"positionalAudio\\\\\\\";\\n})(ObjType || (ObjType = {}));\\n\\n// src/engine/nodes/obj/AudioAnalyzer.ts\\nvar AudioAnalyzerParamConfig = class extends NodeParamsConfig {\\n  constructor() {\\n    super(...arguments);\\n    this.url = ParamConfig.STRING(\\\\\\\"\\\\\\\", {\\n      fileBrowse: {type: [FileType.AUDIO]}\\n    });\\n    this.listener = ParamConfig.NODE_PATH(\\\\\\\"\\\\\\\", {\\n      nodeSelection: {\\n        context: NodeContext.OBJ,\\n        types: [ObjType.AUDIO_LISTENER]\\n      }\\n    });\\n    this.fftSize = ParamConfig.INTEGER(128, {\\n      range: [1, 1024]\\n    });\\n    this.output0 = ParamConfig.FLOAT(1);\\n    this.output1 = ParamConfig.FLOAT(1);\\n    this.play = ParamConfig.BUTTON(null, {\\n      callback: (node) => {\\n        AudioAnalyzerObjNode.PARAM_CALLBACK_play(node);\\n      }\\n    });\\n    this.pause = ParamConfig.BUTTON(null, {\\n      callback: (node) => {\\n        AudioAnalyzerObjNode.PARAM_CALLBACK_pause(node);\\n      }\\n    });\\n  }\\n};\\nvar ParamsConfig = new AudioAnalyzerParamConfig();\\nvar AudioAnalyzerObjNode = class extends TypedObjNode {\\n  constructor() {\\n    super(...arguments);\\n    this.paramsConfig = ParamsConfig;\\n    this.hierarchyController = new HierarchyController(this);\\n    this.flags = new FlagsControllerD(this);\\n  }\\n  static type() {\\n    return \\\\\\\"audioAnalyzer\\\\\\\";\\n  }\\n  createObject() {\\n    const group = new Group();\\n    group.matrixAutoUpdate = false;\\n    return group;\\n  }\\n  initializeNode() {\\n    this.hierarchyController.initializeNode();\\n  }\\n  cook() {\\n    this.cookController.endCook();\\n  }\\n  async audioAnalyzer() {\\n    return this._audioAnalyzer = this._audioAnalyzer || await this._createAudioAnalyzer();\\n  }\\n  async _createAudioAnalyzer() {\\n    console.log(\\\\\\\"_createAudioAnalyzer\\\\\\\");\\n    if (this.p.listener.isDirty()) {\\n      await this.p.listener.compute();\\n    }\\n    const node = this.pv.listener.nodeWithContext(NodeContext.OBJ);\\n    if (!node) {\\n      return;\\n    }\\n    console.log(\\\\\\\"_createAudioAnalyzer B\\\\\\\");\\n    const listener = node.object;\\n    this._audio = new Audio2(listener);\\n    if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent)) {\\n      const loader2 = new AudioLoader();\\n      loader2.load(this.pv.url, (buffer) => {\\n        if (this._audio) {\\n          this._audio.setBuffer(buffer);\\n          this._audio.hasPlaybackControl = true;\\n          console.log(\\\\\\\"play A\\\\\\\");\\n        }\\n      });\\n    } else {\\n      this._mediaElement = new Audio(this.pv.url);\\n      console.log(\\\\\\\"play B\\\\\\\");\\n      this._audio.setMediaElementSource(this._mediaElement);\\n      this._audio.hasPlaybackControl = true;\\n    }\\n    const audioAnalyzer = new AudioAnalyser(this._audio, this.pv.fftSize);\\n    const loader = new CoreLoaderAudio(this.pv.url, this.scene(), this);\\n    this.scene().registerOnBeforeTick(`audioAnalyzer-${this.path()}`, () => {\\n      if (this._audioAnalyzer) {\\n        this._audioAnalyzer.getFrequencyData();\\n        const value = this._audioAnalyzer.data[0];\\n        this.p.output0.set(value);\\n        const average = this._audioAnalyzer.getAverageFrequency();\\n        this.p.output1.set(average);\\n      }\\n    });\\n    return audioAnalyzer;\\n  }\\n  isPlaying() {\\n    if (this._audio) {\\n      return isBooleanTrue(this._audio.isPlaying);\\n    }\\n    if (this._mediaElement) {\\n      return isBooleanTrue(this._mediaElement.isPlaying);\\n    }\\n    return false;\\n  }\\n  static PARAM_CALLBACK_play(node) {\\n    node.PARAM_CALLBACK_play();\\n  }\\n  static PARAM_CALLBACK_pause(node) {\\n    node.PARAM_CALLBACK_pause();\\n  }\\n  PARAM_CALLBACK_play() {\\n    this.audioAnalyzer();\\n    if (!this.isPlaying()) {\\n      console.log(\\\\\\\"play !\\\\\\\");\\n      this._audio?.play();\\n      this._mediaElement?.play();\\n    }\\n  }\\n  PARAM_CALLBACK_pause() {\\n    this.audioAnalyzer();\\n    if (this.isPlaying()) {\\n      console.log(\\\\\\\"-pause-\\\\\\\");\\n      this._audio?.pause();\\n      this._mediaElement?.pause();\\n    }\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/core/geometry/Group.ts\\nvar CoreGroup = class {\\n  constructor() {\\n    this._objects = [];\\n    this._objects_with_geo = [];\\n    this.touch();\\n  }\\n  timestamp() {\\n    return this._timestamp;\\n  }\\n  touch() {\\n    const performance2 = Poly.performance.performanceManager();\\n    this._timestamp = performance2.now();\\n    this.reset();\\n  }\\n  reset() {\\n    this._bounding_box = void 0;\\n    this._core_geometries = void 0;\\n    this._core_objects = void 0;\\n  }\\n  clone() {\\n    const core_group = new CoreGroup();\\n    if (this._objects) {\\n      const objects = [];\\n      for (let object of this._objects) {\\n        objects.push(CoreObject.clone(object));\\n      }\\n      core_group.setObjects(objects);\\n    }\\n    return core_group;\\n  }\\n  setObjects(objects) {\\n    this._objects = objects;\\n    this._objects_with_geo = objects.filter((obj) => obj.geometry != null);\\n    this.touch();\\n  }\\n  objects() {\\n    return this._objects;\\n  }\\n  objectsWithGeo() {\\n    return this._objects_with_geo;\\n  }\\n  coreObjects() {\\n    return this._core_objects = this._core_objects || this._create_core_objects();\\n  }\\n  _create_core_objects() {\\n    if (this._objects) {\\n      return this._objects.map((object, i) => new CoreObject(object, i));\\n    }\\n    return [];\\n  }\\n  objectsData() {\\n    if (this._objects) {\\n      return this._objects.map((object) => this._objectData(object));\\n    }\\n    return [];\\n  }\\n  _objectData(object) {\\n    let points_count = 0;\\n    if (object.geometry) {\\n      points_count = CoreGeometry.pointsCount(object.geometry);\\n    }\\n    return {\\n      type: objectTypeFromConstructor(object.constructor),\\n      name: object.name,\\n      children_count: object.children.length,\\n      points_count\\n    };\\n  }\\n  geometries() {\\n    const list = [];\\n    for (let core_object of this.coreObjects()) {\\n      const geometry = core_object.object().geometry;\\n      if (geometry) {\\n        list.push(geometry);\\n      }\\n    }\\n    return list;\\n  }\\n  coreGeometries() {\\n    return this._core_geometries = this._core_geometries || this._createCoreGeometries();\\n  }\\n  _createCoreGeometries() {\\n    const list = [];\\n    for (let geometry of this.geometries()) {\\n      list.push(new CoreGeometry(geometry));\\n    }\\n    return list;\\n  }\\n  static geometryFromObject(object) {\\n    if (object.isMesh || object.isLine || object.isPoints) {\\n      return object.geometry;\\n    }\\n    return null;\\n  }\\n  faces() {\\n    const faces = [];\\n    for (let object of this.objectsWithGeo()) {\\n      if (object.geometry) {\\n        const coreGeo = new CoreGeometry(object.geometry);\\n        const geoFaces = coreGeo.faces();\\n        for (let geoFace of geoFaces) {\\n          geoFace.applyMatrix4(object.matrix);\\n          faces.push(geoFace);\\n        }\\n      }\\n    }\\n    return faces;\\n  }\\n  points() {\\n    return this.coreGeometries().map((g) => g.points()).flat();\\n  }\\n  pointsCount() {\\n    return ArrayUtils.sum(this.coreGeometries().map((g) => g.pointsCount()));\\n  }\\n  totalPointsCount() {\\n    if (this._objects) {\\n      let sum = 0;\\n      for (let object of this._objects) {\\n        object.traverse((object2) => {\\n          const geometry = object2.geometry;\\n          if (geometry) {\\n            sum += CoreGeometry.pointsCount(geometry);\\n          }\\n        });\\n      }\\n      return sum;\\n    } else {\\n      return 0;\\n    }\\n  }\\n  pointsFromGroup(group) {\\n    if (group) {\\n      const indices = CoreString.indices(group);\\n      const points2 = this.points();\\n      return ArrayUtils.compact(indices.map((i) => points2[i]));\\n    } else {\\n      return this.points();\\n    }\\n  }\\n  static _fromObjects(objects) {\\n    const core_group = new CoreGroup();\\n    core_group.setObjects(objects);\\n    return core_group;\\n  }\\n  objectsFromGroup(group_name) {\\n    return this.coreObjectsFromGroup(group_name).map((co) => co.object());\\n  }\\n  coreObjectsFromGroup(group_name) {\\n    group_name = group_name.trim();\\n    if (group_name !== \\\\\\\"\\\\\\\") {\\n      const index = parseInt(group_name);\\n      if (!CoreType.isNaN(index)) {\\n        return ArrayUtils.compact([this.coreObjects()[index]]);\\n      } else {\\n        return this.coreObjects().filter((core_object) => {\\n          return CoreString.matchMask(group_name, core_object.name());\\n        });\\n      }\\n    } else {\\n      return this.coreObjects();\\n    }\\n  }\\n  boundingBox(forceUpdate = false) {\\n    if (forceUpdate) {\\n      return this._bounding_box = this._computeBoundingBox();\\n    }\\n    return this._bounding_box = this._bounding_box || this._computeBoundingBox();\\n  }\\n  center() {\\n    const center = new Vector3();\\n    this.boundingBox().getCenter(center);\\n    return center;\\n  }\\n  size() {\\n    const size = new Vector3();\\n    this.boundingBox().getSize(size);\\n    return size;\\n  }\\n  _computeBoundingBox() {\\n    let bbox;\\n    if (this._objects) {\\n      for (let object of this._objects) {\\n        const geometry = object.geometry;\\n        if (geometry) {\\n          geometry.computeBoundingBox();\\n          if (bbox) {\\n            bbox.expandByObject(object);\\n          } else {\\n            if (geometry.boundingBox) {\\n              bbox = geometry.boundingBox.clone();\\n            }\\n          }\\n        }\\n      }\\n    }\\n    bbox = bbox || new Box3(new Vector3(-1, -1, -1), new Vector3(1, 1, 1));\\n    return bbox;\\n  }\\n  computeVertexNormals() {\\n    for (let object of this.coreObjects()) {\\n      object.computeVertexNormals();\\n    }\\n  }\\n  hasAttrib(name) {\\n    let first_geometry;\\n    if ((first_geometry = this.coreGeometries()[0]) != null) {\\n      return first_geometry.hasAttrib(name);\\n    } else {\\n      return false;\\n    }\\n  }\\n  attribType(name) {\\n    const first_core_geometry = this.coreGeometries()[0];\\n    if (first_core_geometry != null) {\\n      return first_core_geometry.attribType(name);\\n    } else {\\n      return null;\\n    }\\n  }\\n  objectAttribType(name) {\\n    const first_core_object = this.coreObjects()[0];\\n    if (first_core_object != null) {\\n      return first_core_object.attribType(name);\\n    } else {\\n      return null;\\n    }\\n  }\\n  renameAttrib(old_name, new_name, attrib_class) {\\n    switch (attrib_class) {\\n      case CoreConstant.ATTRIB_CLASS.VERTEX:\\n        if (this.hasAttrib(old_name)) {\\n          if (this._objects) {\\n            for (let object of this._objects) {\\n              object.traverse((child) => {\\n                const geometry = CoreGroup.geometryFromObject(child);\\n                if (geometry) {\\n                  const core_geometry = new CoreGeometry(geometry);\\n                  core_geometry.renameAttrib(old_name, new_name);\\n                }\\n              });\\n            }\\n          }\\n        }\\n        break;\\n      case CoreConstant.ATTRIB_CLASS.OBJECT:\\n        if (this.hasAttrib(old_name)) {\\n          if (this._objects) {\\n            for (let object of this._objects) {\\n              object.traverse((child) => {\\n                const core_object = new CoreObject(child, 0);\\n                core_object.renameAttrib(old_name, new_name);\\n              });\\n            }\\n          }\\n        }\\n        break;\\n    }\\n  }\\n  attribNames() {\\n    let first_geometry;\\n    if ((first_geometry = this.coreGeometries()[0]) != null) {\\n      return first_geometry.attribNames();\\n    } else {\\n      return [];\\n    }\\n  }\\n  objectAttribNames() {\\n    let first_object;\\n    if ((first_object = this.coreObjects()[0]) != null) {\\n      return first_object.attribNames();\\n    } else {\\n      return [];\\n    }\\n  }\\n  attribNamesMatchingMask(masks_string) {\\n    const masks = CoreString.attribNames(masks_string);\\n    const matching_attrib_names = [];\\n    for (let attrib_name of this.attribNames()) {\\n      for (let mask of masks) {\\n        if (CoreString.matchMask(attrib_name, mask)) {\\n          matching_attrib_names.push(attrib_name);\\n        } else {\\n          const remapped = CoreAttribute.remapName(mask);\\n          if (attrib_name == remapped) {\\n            matching_attrib_names.push(attrib_name);\\n          }\\n        }\\n      }\\n    }\\n    return ArrayUtils.uniq(matching_attrib_names);\\n  }\\n  attribSizes() {\\n    let first_geometry;\\n    if ((first_geometry = this.coreGeometries()[0]) != null) {\\n      return first_geometry.attribSizes();\\n    } else {\\n      return {};\\n    }\\n  }\\n  objectAttribSizes() {\\n    let first_object;\\n    if ((first_object = this.coreObjects()[0]) != null) {\\n      return first_object.attribSizes();\\n    } else {\\n      return {};\\n    }\\n  }\\n  attribSize(attrib_name) {\\n    let first_geometry;\\n    if ((first_geometry = this.coreGeometries()[0]) != null) {\\n      return first_geometry.attribSize(attrib_name);\\n    } else {\\n      return 0;\\n    }\\n  }\\n  addNumericVertexAttrib(name, size, default_value) {\\n    if (default_value == null) {\\n      default_value = CoreAttribute.default_value(size);\\n    }\\n    for (let core_geometry of this.coreGeometries()) {\\n      core_geometry.addNumericAttrib(name, size, default_value);\\n    }\\n  }\\n  static clone(src_group) {\\n    const new_group = new Group();\\n    src_group.children.forEach((src_object) => {\\n      const new_object = CoreObject.clone(src_object);\\n      new_group.add(new_object);\\n    });\\n    return new_group;\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/operations/_Base.ts\\nvar BaseOperation = class {\\n  constructor(_scene, states, _node) {\\n    this._scene = _scene;\\n    this.states = states;\\n    this._node = _node;\\n  }\\n  static type() {\\n    throw \\\\\\\"type to be overriden\\\\\\\";\\n  }\\n  type() {\\n    const c = this.constructor;\\n    return c.type();\\n  }\\n  static context() {\\n    console.error(\\\\\\\"operation has no node_context\\\\\\\", this);\\n    throw \\\\\\\"context requires override\\\\\\\";\\n  }\\n  context() {\\n    const c = this.constructor;\\n    return c.context();\\n  }\\n  scene() {\\n    return this._scene;\\n  }\\n  cook(input_contents, params) {\\n  }\\n};\\nBaseOperation.DEFAULT_PARAMS = {};\\nBaseOperation.INPUT_CLONED_STATE = [];\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/operations/sop/_Base.ts\\nvar BaseSopOperation = class extends BaseOperation {\\n  static context() {\\n    return NodeContext.SOP;\\n  }\\n  cook(input_contents, params) {\\n  }\\n  createCoreGroupFromObjects(objects) {\\n    const core_group = new CoreGroup();\\n    core_group.setObjects(objects);\\n    return core_group;\\n  }\\n  createCoreGroupFromGeometry(geometry, type = ObjectType.MESH) {\\n    const object = BaseSopOperation.createObject(geometry, type);\\n    return this.createCoreGroupFromObjects([object]);\\n  }\\n  createObject(geometry, type, material) {\\n    return BaseSopOperation.createObject(geometry, type, material);\\n  }\\n  static createObject(geometry, type, material) {\\n    this.createIndexIfNone(geometry);\\n    const object_constructor = OBJECT_CONSTRUCTOR_BY_OBJECT_TYPE[type];\\n    material = material || CoreConstant.MATERIALS[type].clone();\\n    const object = new object_constructor(geometry, material);\\n    object.castShadow = true;\\n    object.receiveShadow = true;\\n    object.frustumCulled = false;\\n    object.matrixAutoUpdate = false;\\n    return object;\\n  }\\n  createIndexIfNone(geometry) {\\n    BaseSopOperation.createIndexIfNone(geometry);\\n  }\\n  static createIndexIfNone(geometry) {\\n    CoreGeometryIndexBuilder.createIndexIfNone(geometry);\\n  }\\n};\\n\\n// ../../../node_modules/@polygonjs/polygonjs/src/engine/nodes/sop/_Base.ts\\nvar MESSAGE;\\n(function(MESSAGE2) {\\n  MESSAGE2[\\\\\\\"FROM_SET_CORE_GROUP\\\\\\\"] = \\\\\\\"from set_core_group\\\\\\\";\\n  MESSAGE2[\\\\\\\"FROM_SET_GROUP\\\\\\\"] = \\\\\\\"from set_group\\\\\\\";\\n  MESSAGE2[\\\\\\\"FROM_SET_OBJECTS\\\\\\\"] = \\\\\\\"from set_objects\\\\\\\";\\n  MESSAGE2[\\\\\\\"FROM_SET_OBJECT\\\\\\\"] = \\\\\\\"from set_object\\\\\\\";\\n  MESSAGE2[\\\\\\\"FROM_SET_GEOMETRIES\\\\\\\"] = \\\\\\\"from set_geometries\\\\\\\";\\n  MESSAGE2[\\\\\\\"FROM_SET_GEOMETRY\\\\\\\"] = \\\\\\\"from set_geometry\\\\\\\";\\n})(MESSAGE || (MESSAGE = {}));\\nvar INPUT_GEOMETRY_NAME = \\\\\\\"input geometry\\\\\\\";\\nvar DEFAULT_INPUT_NAMES2 = [INPUT_GEOMETRY_NAME, INPUT_GEOMETRY_NAME, INPUT_GEOMETRY_NAME, INPUT_GEOMETRY_NAME];\\nvar TypedSopNode = class extends TypedNode {\\n  constructor() {\\n    super(...arguments);\\n    this.flags = new FlagsControllerDBO(this);\\n  }\\n  static context() {\\n    return NodeContext.SOP;\\n  }\\n  static displayedInputNames() {\\n    return DEFAULT_INPUT_NAMES2;\\n  }\\n  initializeBaseNode() {\\n    this.flags.display.set(false);\\n    this.flags.display.onUpdate(() => {\\n      if (this.flags.display.active()) {\\n        const parent = this.parent();\\n        if (parent && parent.displayNodeController) {\\n          parent.displayNodeController.setDisplayNode(this);\\n        }\\n      }\\n    });\\n    this.io.outputs.setHasOneOutput();\\n  }\\n  setCoreGroup(core_group) {\\n    this._setContainer(core_group, MESSAGE.FROM_SET_CORE_GROUP);\\n  }\\n  setObject(object) {\\n    this._setContainerObjects([object], MESSAGE.FROM_SET_OBJECT);\\n  }\\n  setObjects(objects) {\\n    this._setContainerObjects(objects, MESSAGE.FROM_SET_OBJECTS);\\n  }\\n  setGeometry(geometry, type = ObjectType.MESH) {\\n    const object = this.createObject(geometry, type);\\n    this._setContainerObjects([object], MESSAGE.FROM_SET_GEOMETRY);\\n  }\\n  setGeometries(geometries, type = ObjectType.MESH) {\\n    const objects = [];\\n    let object;\\n    for (let geometry of geometries) {\\n      object = this.createObject(geometry, type);\\n      objects.push(object);\\n    }\\n    this._setContainerObjects(objects, MESSAGE.FROM_SET_GEOMETRIES);\\n  }\\n  _setContainerObjects(objects, message) {\\n    const core_group = this.containerController.container().coreContent() || new CoreGroup();\\n    core_group.setObjects(objects);\\n    core_group.touch();\\n    this._setContainer(core_group);\\n  }\\n  static createObject(geometry, type, material) {\\n    return BaseSopOperation.createObject(geometry, type, material);\\n  }\\n  createObject(geometry, type, material) {\\n    return TypedSopNode.createObject(geometry, type, material);\\n  }\\n  static createIndexIfNone(geometry) {\\n    BaseSopOperation.createIndexIfNone(geometry);\\n  }\\n  _createIndexIfNone(geometry) {\\n    TypedSopNode.createIndexIfNone(geometry);\\n  }\\n};\\n\\n// src/engine/nodes/sop/AudioAnalyzer.ts\\nvar AudioAnalyzerParamConfig2 = class extends NodeParamsConfig {\\n  constructor() {\\n    super(...arguments);\\n    this.url = ParamConfig.STRING(\\\\\\\"\\\\\\\", {\\n      fileBrowse: {type: [FileType.AUDIO]}\\n    });\\n    this.listener = ParamConfig.NODE_PATH(\\\\\\\"\\\\\\\", {\\n      nodeSelection: {\\n        context: NodeContext.OBJ,\\n        types: [ObjType.AUDIO_LISTENER]\\n      }\\n    });\\n    this.fftSize = ParamConfig.INTEGER(128, {\\n      range: [1, 1024]\\n    });\\n    this.outputMult = ParamConfig.FLOAT(0.1);\\n    this.average = ParamConfig.FLOAT(1, {\\n      cook: false\\n    });\\n    this.play = ParamConfig.BUTTON(null, {\\n      callback: (node) => {\\n        AudioAnalyzerSopNode.PARAM_CALLBACK_play(node);\\n      }\\n    });\\n    this.pause = ParamConfig.BUTTON(null, {\\n      callback: (node) => {\\n        AudioAnalyzerSopNode.PARAM_CALLBACK_pause(node);\\n      }\\n    });\\n  }\\n};\\nvar ParamsConfig2 = new AudioAnalyzerParamConfig2();\\nvar AudioAnalyzerSopNode = class extends TypedSopNode {\\n  constructor() {\\n    super(...arguments);\\n    this.paramsConfig = ParamsConfig2;\\n  }\\n  static type() {\\n    return \\\\\\\"audioAnalyzer\\\\\\\";\\n  }\\n  initializeNode() {\\n    this.io.inputs.setCount(1);\\n    this.addGraphInput(this.scene().timeController.graphNode);\\n    this.io.inputs.initInputsClonedState(InputCloneMode.FROM_NODE);\\n  }\\n  cook(input_contents) {\\n    console.log(\\\\\\\"cook\\\\\\\");\\n    const core_group = input_contents[0];\\n    const objects = core_group.objects();\\n    if (this._audioAnalyzer) {\\n      const outputMult = this.pv.outputMult;\\n      this._audioAnalyzer.getFrequencyData();\\n      const data = this._audioAnalyzer.data;\\n      const maxCount = Math.min(objects.length, data.length);\\n      for (let i = 0; i < maxCount; i++) {\\n        const object = objects[i];\\n        const dataEntry = data[i] * outputMult;\\n        object.position.y = dataEntry;\\n      }\\n      const average = this._audioAnalyzer.getAverageFrequency();\\n      this.p.average.set(average);\\n    }\\n    this.setCoreGroup(core_group);\\n  }\\n  async audioAnalyzer() {\\n    return this._audioAnalyzer = this._audioAnalyzer || await this._createAudioAnalyzer();\\n  }\\n  async _createAudioAnalyzer() {\\n    console.log(\\\\\\\"_createAudioAnalyzer\\\\\\\");\\n    if (this.p.listener.isDirty()) {\\n      await this.p.listener.compute();\\n    }\\n    const node = this.pv.listener.nodeWithContext(NodeContext.OBJ);\\n    if (!node) {\\n      return;\\n    }\\n    console.log(\\\\\\\"_createAudioAnalyzer B\\\\\\\");\\n    const listener = node.object;\\n    this._audio = new Audio2(listener);\\n    if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent)) {\\n      const loader = new AudioLoader();\\n      loader.load(this.pv.url, (buffer) => {\\n        if (this._audio) {\\n          this._audio.setBuffer(buffer);\\n          console.log(\\\\\\\"play A\\\\\\\");\\n        }\\n      });\\n    } else {\\n      this._mediaElement = new Audio(this.pv.url);\\n      console.log(\\\\\\\"play B\\\\\\\");\\n      this._audio.setMediaElementSource(this._mediaElement);\\n    }\\n    const audioAnalyzer = new AudioAnalyser(this._audio, this.pv.fftSize);\\n    return audioAnalyzer;\\n  }\\n  isPlaying() {\\n    if (this._audio) {\\n      return isBooleanTrue(this._audio.isPlaying);\\n    }\\n    if (this._mediaElement) {\\n      return isBooleanTrue(this._mediaElement.isPlaying);\\n    }\\n    return false;\\n  }\\n  static PARAM_CALLBACK_play(node) {\\n    node.PARAM_CALLBACK_play();\\n  }\\n  static PARAM_CALLBACK_pause(node) {\\n    node.PARAM_CALLBACK_pause();\\n  }\\n  PARAM_CALLBACK_play() {\\n    this.audioAnalyzer();\\n    if (!this.isPlaying()) {\\n      console.log(\\\\\\\"play !\\\\\\\");\\n      this._audio?.play();\\n      this._mediaElement?.play();\\n    }\\n  }\\n  PARAM_CALLBACK_pause() {\\n    if (this.isPlaying()) {\\n      this._audio?.pause();\\n      this._mediaElement?.pause();\\n    }\\n  }\\n};\\n\\n// src/polygonjs/PolyConfig.ts\\nfunction configurePolygonjs(poly) {\\n  poly.nodesRegister.register(AudioAnalyzerObjNode, \\\\\\\"myNodes\\\\\\\");\\n  poly.nodesRegister.register(AudioAnalyzerSopNode, \\\\\\\"myNodes\\\\\\\");\\n}\\nfunction configureScene(scene) {\\n}\\nexport {\\n  configurePolygonjs,\\n  configureScene\\n};\\n\"","status":200,"headers":{"content-type":"application/javascript","content-length":"1180177"}},"type":2,"external":true,"timestamp":1723920101090},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/underoceanwaves.mp3","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 18:41:33 GMT","etag":"\"QmcmrNabbTqQkFnJ168eC5L8zp8m6H63hFtt6iXVd1N237\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R/underoceanwaves.mp3","content-type":"audio/mpeg","x-ipfs-roots":"QmXDPTAwFanmyntHfS71tE87fgFddfX7bpbEGQcqu1Jm7R,QmcmrNabbTqQkFnJ168eC5L8zp8m6H63hFtt6iXVd1N237","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"1376416","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723920106914}],"browser":{"name":"chromium","version":"119.0.6045.9"},"viewport":{"width":2000,"height":2000},"screenshot":"iVBORw0KGgoAAAANSUhEUgAAB9AAAAfQCAYAAACaOMR5AAAAAXNSR0IArs4c6QAAIABJREFUeJzsvd2C46qybvkFzrn26fP+N/2i3X1WpYm+gEABQrYzs2rW3xh757QtIUAIybU8CDDp/3YBAAAAAAAAAAAAAAAAAAD85ZSfXQEAAAAAAAAAAAAAAAAAAIBfAQQ6AAAAAAAAAAAAAAAAAACAEOgAAAAAAAAAAAAAAAAAAACSJJPEGugAAAAAAAAAAAAAAAAAAPDXQwQ6AAAAAAAAAAAAAAAAAACAEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAAAAAAAAAACSEOgAAAAAAAAAAL8tZiYz+9nVAAAAAAAA+GNAoAMAAAAAAAAAAAAAAAAAAEgySf6zKwEAAAAAAAAAAAAAAAAAAPCzIQIdAAAAAAAAAAAAAAAAAABA0tvPrgAAAAAAAAAAwG/LZ5cfZz5AAAAAAACAXxIi0AEAAAAAAAAAAAAAAAAAAIRABwAAAAAAAAAAAAAAAAAAkIRABwAAAAAAAAAAAAAAAAAAkNRW6mLVLQAAAAAAAACpr2f92UWtfyb+tf91/zue8p8Cv8oAAAAAAAD8Urz97AoAAAAAAADAHwYy9udAuwMAAAAAAAB8GSLQAQAAAAAA4Pti+o1l7m9b8S/AzwJf45N9xvdHu3M9AAAAAAAAfiasgQ4AAAAAAAAAAAAAAAAAACAi0AEAAAAAAOB781sP1TbJfsMo9K9GLRs/DXwKl740a4FfH00kOgAAAAAAwM+BNdABAAAAAADg+/Ib+ue/Gq7X5yEsAQAAAAAA4I8DgQ4AAAAAAADfD1tefyd+ZxH6paj5i8W44Tku2Wfb/kmEeeRLJDoAAAAAAMC/y289sR4AAAAAAAAAwG8LgxYAAAAAAAB+OYhABwAAAAAA+EF8OjL1ixCxCvA7EM8H7lcAAAAAAIBfCSLQAQAAAAAAfgA/S57/7LIBAAAAAAAAAH5nTAx1BgAAAACAv4EnTvlwzkdU6JcCue15mS9zVQ+7SPOs3v6sYr6t+kvNYSYVOxp0NOJ69Lrudn9j3+N/on42stf0fS/cVRk7/GPVtUeLzfeMrjrwxXZ7ctU9/mtzer+qxnL8/vMDPtKnv3LJv4Tpcv15X05g0xRXt/BL+MVBr5zT9/oliCB6AAAAAAD4A2EKdwAAAAAA+DtZJVNIwdX7Psvmyp19xMN+Vj6t+fvF9u3J2nKShwkzSWWp1DMNGlHv7eibzmZttX1LDqMh61mi25Im6r1z82aSlTndh3ggRJ/x2CSP7PfHPhDr23xs/B1tr3bO8fdszHxqx6KbShbi+V00+3INc7kedTrVfXPNN8kmkdzrZQ+qP3WBj4z22F5bf36vPhrEcpXn1cF+sefimXR8XjZUl+pFnV7hq9I7j5P5XnkCAAAAAAD8AiDQAQAAAAAAEiHvXnGhI913SbSQ/fNOJNomTS5vSn8t8OaNkalv9d+j05iO8Ii2TRXxpVKnSPMUgf40gv7JTq+vJLzgCxHoW5FqDz9O26dG9/37XJZ5C/gvKVM/mrq9njuPR2FhqF2qHjMu5GuU69vvCzve27iGJj/Z7k2vsc22KEd2dJXUr08TQ2w+biX0y5d+GYzxGbYDNeIinIu6LOtpv19GyKz3/UdhTkIAAAAAAIAtCHQAAAAAAPil+ex63v69zNBPW07cjhffRMiaHVNor2Lyamrnl5ljkD+Ulbls2NsjPNYXyTh5WVM7JspbZekpcHlO4OnYlt+XbKg+33jlJNGfdd8pqD57cE9vTGdJay4zUymt7cyiN9hw5j6k+NJevbCxv0vxNcK8SfpxVN+W0p9mkc/2+kHk+a55zVIfWcOaz1msOz693MJHjttdTN8VfnG+F2VdNsuLdXvlEXnVPp99vmLeAQAAAADgTwaBDgAAAAAAoEMwTT7pi/I8PO4a2Ht9wPG2xAb3FjG8MWCWM3U/BX1fszWYY/tLWTycbrr2dvSL/bNzjTY3O89IbT06OV6PbTmXXG+/FOj7Nb41+dovacE0qOGiiMsda+C9pat7WkY+Zm+XZKVJ0PbZRvS/p2Y4uXelMRluy+AGm98OYW7zbsufd1H7uz573bpN5M8h0e1U5gjx9dJe5vhDoqs3GcZU+tISIe778tdrYeeWe1jtvDaE5VkAAAAAAAAA4HuBQAcAAAAAgD+br0aQXy5y/lxcDZka08JfRoEu6SWVFN7ra3iytETnLtNQv+TU9tL0YeT+hSdds7M+tfgu2SnLxcuWJNEjOnZ91fp5qnu9Lu3iWh5reft2SenXscvu8izSd73C7n2idbd9AHpI82I9gv+IQB+zh7tkfha57q0pjjJtTpLrmq/5sPab8zvmQxgJfIlIn88hzapQrYnhXRj+GpR+1cd3FnoaDHOMksin4KcBBB+j5XWc+ShkM3X+9vhNkP+UuWw55/MFuH5E+SlNdvy57h8lzfkw5z9vBgAAAAAA+C1BoAMAAAAAwC/Nl6Zi/4QbWmeRvk5wtX/31vYJlv0562ohUNsxj8TUad8mqnVKv50rehOmHK/Dbj/INFEfifb81oYjHNtr9r2zL29VsTjOpnRNV7a1uN1C3R6F5gj24zAbvlnKwvez2DaPJquf5+12cYmjD+QL1yOfa7xXiPYjAj388+qtz1LW28iFnYmdBPryeUq0e9/rkkP8c7L4XDTL8qu8p3Xhc5KugadBJUf6Ed0f//Fp92OepZkKjrzT4ABfmiuPKejjBsYOS+ntuEYtMH+5WY6T/Pz09dKXh4zgygEAAAAA4E8EgQ4AAAAAAL8uF9GuH87jEVcGaESwfl4RnWT8RuLuSghxPq3t/RGGZJ7rcRapFxSdZWnY62Gxl8yyxb89rtvkOXeRwzl6ONKPVxvR10u2kqRaLOXbNXoIbDvrxzUC92sS/TI8e799SeNm58uSL2Iypa2ZjqntXVJJYtjzJVkv/PC9YbHtLNBHnXPItjUbffLlNmU7MaR1bhs//jZjN47j1pEguzBnU+lT59vY3utTo828SXSXvEqqR/ZyndcN+AjRHt7f16lqrbrL5/mUbA6WH+2eeqZrP7ihX/cPPR+++jxduR4PdL0fAAAAAADgFweBDgAAAAAAfy6vyKKdwH312Ef5XYaMr1LwXL5nafnh+tjsuNfwVL94TdU7CXTrglU2BPYUGJzfFG9/a8VjMMJ6HuvnISDzcTa9ehLiQ5JHFUo9yUZPx9qU77kCX/F9NhpuxkeR1xdxRJ/bRT1HyPQ8GiIPFIhBF+4+Zi4YJv0kNZdBD3nEwjTgYxNCbWuGGlPNzy1o8m1HywX4cb2XazKN3UjtcZRsY59NeXmX5d6nNHDVWtv7ckj0y3vLLrZfks4y7tnNLdCTTt07Es39Ltq3ZWZmp7Xfo9RP99f8bAEAAAAAAIAJBDoAAAAAAPx4viKjvxox+b0jLl/N7zIy00+icHvQKvFs3baJFjYNlThkZl9b2tcw9LV+nvIpniS6SVaaQC8R/W0ac6kv1XHzLrGfnM/u9KUmNteI4FxAXgc9y+N4ayF41zx6umUd9RNfkIpeih7Nc39EjF8UO9qoTUV/jBEwTVOcj2vpR3o1P3xca5/T7QrOfSL+tvI4X8eeaM0vRgCktvdRxhInna/PmJpcyv24jL7V+1waMJHHVJhaWhtFHYMH/O6q9yqvVVatCfV7KutR9Lmlv/T5dOv1UxvTxK8C/ZUI9zxI4miY0U7r0vAjxStztz96Xn3l2bgODnj1MwAAAAAAwG8AAh0AAAAAAH4sX5Hg30Ogf5avllv0OHr8mdjaTaMuSUNea7yG1LYsq4azjChknyVWWLmx7YjwlfUo8og8TwJdVkZ5nqOl+6ubdL95n7F7I9BHBXf4A4G+ZDLaZR1I8MDUZfO6nvN06Fc67EagP8vODu8qaUT7hzw+drrGDAXyqX+lGGxZSPS1KdZ6ZCHffW30oREXPbWpL9HTKVtf4utNsnTc1XXxUXA6dLOmuaco7HUMyD06zOj3vb/ffNS5Wnf8piP6vGq+T7Mh790+brcYm3EM3Bgqf8j7sf58ddXaPrco+FTmZjzB3JCb/dZjzb+zhP6u2U0dePMZAAAAAADgNwKBDgAAAAAAP5afJdCvIq1fkJkvp32W76O8JkO4hP0WLVHg0oj4nuS5dclnLQo3bF911RrRq3lK71RkFuhZRK8C3dQFepLoKudo9OEeTfZWxvmtjjvbwSOANq32XqcdD7EYQJAKqK8I9OnzcbyP/3yS04LuR0FXkeejImFhR/qSxkr09vU+MCGuZ48Gb+nOAyimCOVpoENPFpHavauVfHDKKt65/Po8sgOPrrpLFPunz1U+zRqQTLnnLruRyO5y1S7i7RgI4LGvffCqPiBEfVp3HQM1Yn32dG+VuK/K2DQL9X5dok3HGJV7u/fMpVqr6r1L9PtGpM8NPJ/+mmbcp2mbbbb/W+wGY1zVDwAAAAAA4DcDgQ4AAAAAAH8un5U39sD8LK77eH9saB7vhcJPeXWVWyR/M+mmFPG6sZIjIjaiwXsatyYMuxz1sHtaT8s2+ZpUal/H3KYyIiLds0nsh1ifRrzJxzKdW856TC+u4717+OMuLnPkcUrzqAlzC162vM+yfZV+tu7/IF7Xekb7vNoRs/Cu6drnAQeec25na3ZcDo/TSrLZJOtyv0WZH6bdY3s4/BRVPcpeB3uM80nbxtt075wGTiz5xh4zqbzPEefrIIDoB1munyy0R/efBfQQ5/2vZOPdB4SMvh517GLc2qABj4kFrDViZF1upQ12UMvb3zSmi7dqsrv6muvWxH0MEMmSfBXl8xiGQ/ZP56SPy/OfIbOR6AAAAAAA8BuCQAcAAAAAgB9H8rO/DFlASYcEPtHNz67+y7G25GFdIrqlqaWvyu/vraR1novJ/5F0s9SGa0UiZvuwfrGctMu68LMkXbssXAXvEtlukvxWdEyrHRI4JHrPdwjGPnV4suRlV9++WLRZNpymCAP240xODvaInl9MnKc3UX9fyv0AzY1+PqTXc1Rzq8yx71G5eW5yT8eZbbpOiGg7/hsOuPTrO+xzNIv1MizPQK4x3GDY4FzWkbZ1mzRYYgxSWCS4Iu/o/5a60HGNToa4eOo/PgYBjIEfNY4P6d3byFPec3UU0ehjivba+29JeXo/uXEPRP09Rhr0yPgu0aPrTsLeVG61DUQIL198yHq7mawmiR7Xxz1FpC9CPTdR9CnTOY2OteLzbAOn2SZGm2y2fS/ypX3lMwAAAAAAwC8MAh0AAAAAAOCK1cVeiPMs0EcEc6wDvgqxXf4lRH2X6G8m+0fy2yGtj2nGs2yLqNxDq7b63KTb2yHPve8LYTjKL4o1zcdpWdu8W8M9Dp1PwxdnXKV7KNZF+HcB2qrlGv83puZuOZexv4nBOOc4bof1E/ARUbwhlbHfbSNS+zN43eX9PL9RZJ6iPEvrfP7KUtzGeuFebIyPCJk6jQWI6fbTYImRtblqifSr6fR0/ft13YxRmGZcCNc+lgnwYySExRCPdGyfhj0E/8grEt2ikSzle1F2VGE0hlrkt3mb2aFKuvc8Q6KnOyjupijCUp/ZjbWp9S67D+1+vEY/77M2WCnnZ0HUpaaBAfn+jqnmS5+CPo7ptJUeymjDeDWLNs0VAgAAAAAAgFdBoAMAAAAAwI9nJ45329f9X+FRGba8vpSfDXFosiQx4zVFsJp0jzXDUzTwLL51iMge3R1C1E3SrcjezqayechNxKqkWBO7rU9eRhDuUIxLdLaFhO1SdUTA30KaZjUZEvexzHb3C5F87FdIc4UcP+xwc/w+5H+s4Z7rsLuoxwCC27ler0a/+qp2P8huje7Hi5/3NBpy9BzbvXyw41ytLdQt75HStUvqQ5xGZPccZb07Rb9F91h2xkwEY8aBJ+eRXsc1iahtOz7P5+d9yYBd/nlwxzHB/gjat6NNpn3dmQ95PtZBr6PIo/w00mXpX2nFgXP3cY28p3Nfm9Cs35oxsqC/Fkmq/TmRFg/o9fbaBgu4u6z6fN+rDRKwupx8v0ejDbwXsQ6GeUmq/wjx/pHyAQAAAAAAfhIIdAAAAACAv5FnTs+W90sg8fT6jFXcPEoXfklNOtVNVOtHKGYjFjlHZHrPb0R154DcZNZM5ZDKPbDZ+nrTKtY/94jt2N7/6tubdMtRp35Eld5DGh/y2GWqo0Ym1Zv8/XxO43J4BLeGvI/psq3V295GuZ4OHoI4ooOrHQI3qlprm34+yX5P9fVU71VWm7vK/fpytYjzkJh+DAjodc99wD2ijdcY46sRGXbUK2RtHtUwjrXT28iyXEWvv4LPNX14i1h6E/Wr18lPRZl0Vx3XfT9z/dHj3fKcAJsBCKnvThehpEytTQU/Zlzo95DLVOe54c91sFR2+PxOLS6VTbvbXHae+SHdKWMJ86M/+tEvkwFvh9/aAJFcv35ce6mq0b+1vs6nJFeLIM/9aHP+rvvo86dpHGJq/dLOb9zPalMCtMEo/XXUq597Ndndxr4YvBIpxqnH+u/xOa5zFuujMVO69XyVBtl4a6vIzyxfItuM7/F9WZfNNnfo6DtTfsh4AAAAAAD4QSDQAQAAAAD+FlZh8UBgWHY8q9cKUbWR6muWI5hzFfIrOarSQtM0NXdyIx8Q6ZFXi8i0IcmOaFbr8ufQMyZTde/ldzMXYqikP9OxRvntEGCyNoWy3m7S2z/j/CxEefUu0esxRXOdg1hHG9cwVZtzU4jE0tZPD/HmQ3MdbTve2pHdcIKr8G0V8m4GfUhztQO60FNNgn2tX+zbRl9fRJXbuDBqU7EncZ9Peks0nh3rTMdC6mvUb4w+WEOd/XjzStD4tha+VvGYCvx8D0R9/Khr3VrwdFyS1EvzzWXs7GdvzwhN3uaf3mSZnsYnKFXxEOnpprBN3qtbN83pis+i/lSnNitDe9v7h2y+tP26er/Pp1OPaeNzQ43u0N63a+f9HmmDPMbsCBHFrkMYD1YxHawG+WLASRuk0MtVn7Ui2iLJ7wiSjwEwZq2vxz3v917vMl8uj3XWc7+J9uqnNNUl17umYzyeKn3ARup40yQFm8EEre595yrRr+T3dl8qe037CN8lwroDAAAAAMA1j/7nCgAAAAAA/El8VqBnp3fl3S4cZ/cuOhs0zZIriyZL5V+J9yHTlsJ09jM5zXE+TXi3SG0bEeS5HHfpXi3ZoeNErajLc5N1eW5Dorfj77c31RSBbrIxrXKTbt5mk3bJukg//Kfr7u/NVYfEm+TbcZYxDbt0CE3zq7W8bRLnfgpb7nK7uNzuSZBn6660ZvNk58ebef3zY5r7SBbTt69VizQnTXY205fHyosO25r2WUmfI99d504d8IOsh43xCQ/vvdSZ/Rj6cHaHyz10mecqKde2fiTQNz8RrAMPdpHmxzQMS/67tJGPjnQhp7d1Gv9JeVn//6O8o+ZxL/m5+qGfcwT9CJ32fqiPfNr1qzrWM1d/n+TxKqiDqrGUgef7d/O8C3feItDbtBbWB5GMwSa+tI+Zbl70j9/k1VX7wJaanquuNPBluqx9rfkpAj0GLWnc4+0293mQQLrPR/T9UaUTc28aowCmj/sDnn1h1U33Wu+d/EUWn6PQ+7myAAAAAAAAHSLQAQAAAAD+Bh6Jt7zrat/qbVO6iDy8Ku7hmsmnChzFnA5LGyNo1/JB1oSRJa/r4fSyTO2yz0OclfbZRoZ2rB0eUZNjUeWUb5FUTF6KdFOT6OWYxt3tiF6PSlhMs16SM8xTucfnquZ3apc8a5okodw2ksqlUs8N72NEQ0RGnwV6y6LqiBb14+As1NOuUznScZGiyFUar+9diob3U5pFuu0KnEZdHGtOe381L+lzyivLtV1nHrufd2RPgxkOeb6R/ycZHp3m+Lw219Qmu/u5S+NWri/7NwLdl+1d3F4K9ggtzqI+vx3lrGWtlnQdsKA+IOOV+etz+Wm1+IgWT/mOktMtGDWxtMHjGbAWMQR93KyeZl9P9Qj5valqm4V9ubdj2vOo5CSmvS1bMc3O4PtLYk3kV2tR56M94h5NXcXHGu/HwIPpclnElpdj7XR3Ffc2mURVn3lC5/qk92tw/a5J/NQfPsLSd6YviuMhY6Muq14/0ny2BgAAAAAA8HeAQAcAAAAAgMfsXNrF++2xIREfYemvC+wmO6ZV0A//beEcbVIqw/la96i30v6GxJ7LafI5xGmbtj1EoReT3t562jSXcUj5mGo5RHqUmetrh8Ev2rjUoh4I2dcurk1c+f3epni/11lY9WjYSWbtroBLdSPQRwNM84qndLG5TFYvyTI/pV37goeUjLxt0zDrgePzlcR+1n9sem9+RL0fstTS53SMHSLWt2L7wedTPcZ/0udX06VrYec8om1Pxw5cWvqXr5bzZDjT9S2R+SLApxsw9Qvf1D9L5Qm72H6uymN256C+ZMAq7o9ngU6vNvS7TLoXO6o/LkHuK/His8OXVM16f09J+1Tqx33bD6q93ca66rEtpc3PyjVyPN+2LlVVvXeLHFHxm0UvpnMfg4PG5+nhe1St9jwjwj7EfBxc1fpMyPWo/8NxEH6axf1c1/V5Ma12P7Z5L2gaK2J6KPF3wzkAAAAAAAB2INABAAAAAP50LqXWC4eeoh7n7SPod0k3xYIOMbSp01S/Q3DGet4e0jjSTBHlNpU1isqS6T+3LtBD5u4qcGwaIswk3W7Sf+J/MoWZ9B6xrkOej/rU44T7OVsX3ZPUTFO3N1FV5e8ur3fV2tdFr1X69i6764hgHdGoPk+pvNNBU0Ocz/NItwj0dHyI50lQLVnmtdZb8rY29T2L8DHa4YKTfC1T8qeyaydIQ8DFAAszucrxWWngRDpUZvLbToCfEj6uyyvbTm2S2ulK3D8Q1Zb6m9REqqXW83m+bqUdbXufhcFPN3MaSBGGdHc/x31xNVhmOqWcp45ZFab0Vw+XVaLnG36XvkvlpU+Z9Vhoa1HWh1hvZYdAn0T6cWOkenobbNP3T6ssnGRxur4RJW7pgHxP75rRl1f1IUZ5mYk1bWyPARJ27DbTET3vabjF8sgZz5usn2uRfSvSva0Xr+rSe89vubzpzNt7T47cllRby50HKMRzf6PCH5v5RzsBAAAAAAAmEOgAAAAAAL8DP/u3/1WYXSSZPm9kj7TkM8moPv11CekqjfnJu6iO6Oa8pnYU4KtwKSb9U6Tb21HWss55KlmSdcfUtLDfTPe32+S8JPVp2g957t0WVTfJ7102VamWHhmbnJg3c2RdcLeo8yp/r2269og4r1V2bwdarIEcp5qC4U+N/0I/2SZZpgw3K3tXvG03jWnLpXZ9/Naicm0V6b2yhyf0UfZw3qUkSSalibpPZ5KPG/nktOl6h0Af23dS30x6K5tG2snu8+HbQQuvCvTtYINZ5uf2PJXkLpW6ObL1H9NN6zTn+X1aAXva78rR3f1mXM8zzqekYzf36Fxm2lZKm2I/ZxlT4aeyPNdj3BMuVZfVmnpK3t/bYCk/BKxP8r5vtzZde8yEkbrYiVpMngcN5FMe0ebnU46EJfptX1v9OMV0U2eBvyOL8FzWkOdFJQ1QivXSvUhe2ugBn8R93Ce9vFs+sf60rEXFivy9zXbh9x6qftd8rv68+mfyAy1WpY/7e/+Qy3HqV8W8kgYAAAAAAEBCoAMAAAAA/Ht8VYL/SImeohLX7bslnINLN7TmbZv3Q9JEQV2ORyRrFkd9mnSVvo51tlST3EsFlNKmYH+7acj5dW3pXK0UrWxqU7j7Ut8m1MokjJs8v7do8aomwWubft1DJknTNMcjqLdL9CbPXbr3TLy95ODUVNx5W1Sz+ejTzM9zovRhisw/drao21sv50raLfI8W8YRwWvT51bFLEGj+H79+/ERCf2wy/c6z9Ns2xCJPp2THdPKj76VRXmvW0zLf/LlZ4G+Dar3QzaPAOqruq/zg8uOwSN5++rTo91PlYyRJuc6WRezx7Tl66CT496xtbP1uciHYI1w5JzMJN2iTbK9Xeu3fB638Vx3O/03FGqvx/TgafJcqm2wSdo+h1Hn9eGX58euj/eBK02pd3W7ueZete0fJ1nu5/dD0I/nQS93Ov8j/RF1fdw78190ulSATMVMpZSpS8W5zTMMRD5DNiByAAAgAElEQVSuY/H4I9+4T02S3U1W20Abv/eBB9N59ENXgR4TdUzP1txU/cBqy3WJQQ919Im50vOna4mOPAcAAAAAgOcg0AEAAAAA/laeCfnkmFZ2Pneb7yrPpVk2rftKn3i6e0RP0lylHH8hkKapzaO8XujtJv3zJnu7qXSBPknHLqrGdPTSIX3jvO6H7rWw0+Uuq4eMclWVvm55W7u8R5J/a1OzHzLpPNpgiLOYtj2vJbwctjb2aNrwXH40bV39XWrjB8ump7RFVko6YMMSOR718C6nPYvzkzAe5vzQhEmktx1PNJfZ0gCdMZV42xdSXn3AgMfO6Vg78rzNZi9r3LX4E26S1ymI96LyU/lzpP5VIUudl/vIToNJ4m2S6p47nk79aV/Tmo4N0X0evWEl5LtfZLZ25COdu4+JFWz03V3LJ3EfN0ePQFeu5+5v3FTerbfGZ/NoEj8Gn8Tc5T7U+1hNYqpTlc73yPr5iH223vfHljL7/lb2fG8cucQAgi6Xy7E71jJvr4dAN2sCXeUQ0mVUO7Xn6VmsqT8eA4zSad2stX10iTEd/HHWxSWL+laX33qz7r4bctOZL0tVHDtP6nzT356utQ4AAAAAAPAABDoAAAAAwL/BVbTdv12HV7Y9SLN1uaswX99PImYVljl9t+Ylvb/dZnFeTCq3RZwnmZ6nwS5F5e1N5e02N3/yjFYjnybJYlliqa8FPa0pfVTTezSn9YhIuXdxfh/R5/p2l77VfaOlcvJ07sfAAD1k5562l/LhNV/MmR2fq1zFV1k1aysbEaFnalyTsuy3OL1VDPfo5SSFp6j006lYXuZ87HVTk3qnqfoPgX70w0hnp3TTxw12FDyzWVN+5wbHTAjrfWFpQEI/4hzhv2SaKztV3Jf3eeREVrP7Fj5qfGv1mM31KV2+cpcCPcvR3LPSKJapbyx21CeBfghxv7nMS99f52dCfk5IfX8eVCAVn/NrSzC0dOMu6GvIh7efmqgunxfynBkWpx/XW1HVJPpdmz6snHi+bH0N99OqAJ7KSlH7npeFiDxSneZZI0xWzgMEoq2n54OlPGTH/w3h71Kfat+Kmkxf71H1tHefu642r8pNNdfRNx88isn9CAAAAAAAYAMCHQAAAADg3+BXEOifZam3523rOWUBM7ZZ2raK9JS+T18da4ybmepbW087T99eLERZl1k1Ik+jrB7NXIput5uKpUhq72sed0FWq8vvtcurOompcHyHQMvnnCKmI0Vfu7yJN5f+W6X3eU3qOai6R6OmEO6YnvoFh74GZU5iz7/U11pb1CcV8Ok6LvK2R9C6V7mVtK59vu4pojX1mYhYf1i89fXqQ6SPY9VmLTj1z1WU60KgH35N+XU9d+kQktOOKvPUH6dM27m5ktRcqlk3B7mHRPepnU433xq9vq30hq3hT3nKj3aStFl9XUNSx/ttPdI627tK2P6zX6UbnfyQsodFztJ8le5LmLRLNiKd47gilSofs0L0NujPiCyfR8tEMatcn1tAwwoPn++ho5c+1SePTw+NaZ3y3EeLjinZ06CV1l1yZ+sR9nlAgemIZC9S8b5EhZV+vPXjXNVdrv68fPe23nmVau0NGHmNsg+J7m5HtHqtspvJ3qxf0i7qo3e5q979aP9TJLqObRrDGtbGPtrKNPrLZRcEAAAAAABIINABAAAAAH4wTZpdSaV/gY3Iu2S3Pzle36XLAnSs4ZxFl8/yNNJGujimWA8cL0Oi61bktzKOtS7IzL05WvcWDR5VSRLWzKS75Lof6yZ7EzJeXdVrk+f32N5lzRDimiXV9CammU8N4S6LgPMeQWkpMvVQkFcNHFItydKr5PPHI2mW6ZvlsB+yhmzmaa6DnWyN65rXTHbrElLNTtZ+nYdd61IurmvIrkmwXxS5TAlv6RiPfndqu95Ko85JrNp67nHIeaM/2NeyvQ+5Ot12XfaPBaGjvTzVP7tdzQf76Bc5On4o417eRYfJaxScz2SIxtZv7bRvnkX+2sLvustanieReVGbKc+x99yY0+6p33gv45iXPTaez09apvpuYtm8yqu1ZQw8RG6fd9xrPyjEehpfEN3Mj/e5uF1385qGTawNYX7uar78xfTp9/5+jHyxI7J/FfS5fqne5kURMW6ndvU2ICaWmbi76v3eyh0R/7nu8Rfx996br39+M9k/rf+X8Vwoslhj4u6q1VLbp/zjfNc+t/uuG8dsHpwAAAAAAAAXINABAAAAAP50XhX3F+k8CZZT+kmex1rlXTyFSIoIcdMRZW5Nkst6BHE/xqyo9Cm4rZhudutr93YFlLxuK7rs611b+vv7u7ze+7Z2sMeaxV7bNMEhwqof0abZ1EzCL6RrK93zlONd0ptM8j5tcRKOMR3yiJzfiLs4sxBOp3PbXQf/AS4o1mTXprx12vEspT0fUNVCY9Mmy+c0q0Qf07hvypzK995veltHhK21liupKQ+VbZpsm/XPQ8bafKpZuu242O5eZSerF13miJaPz6Ps5PbnwSnRD/rN5HYesOBHunmgzmSUj88xeMBsKuqI4j32n+oz8o/2PprDizRFhV811e7aRr/x8eHcqXf2eUvvE2M6/XTgGvrfq1yH/Y/pxk2jI9XankHVDpGbnxPRHu5Tk49BO/F5qk1/fshPj5vX2mp5jczvqQm2B6W3uS2r2qAlVx/soj745UjgSvK89r+7H+8XeR3NWOVH94313vtSHV5ctz5jxBj0FDW/u6xW1Vrao2gscdH7SayRntsgn9tVm0X9EegAAAAAAPAABDoAAAAAwA9iik7+FfhKdR7J8yHOi3RrU6xb3+byMTN6SHGVPqlvfz+mXS+x7cjP3FRqadHiVW2643o/KtSj1aXDMcq9Tc3ud9X3b1K9d3Hi85+Upgb2/f4s9DKuNjVyOJ3YJqUIZE9tZ9P7w88mszPJ6E2b767DIwn0iiAaFZ8ztmw9Vy8+wlV1vHYxfJyCjcEUkvoU/DbSzccdyVvuvgjwlaMUP0Jnm/jU3HQxNfZIN05hLdgnX3x12ecdu35xl+/kevTNJM1Xqd4cf2qXqEnIQktiOPIar96j1xeL2Tqk5mt81P8UtT6tTe6jnsfnKDLaP47rtnQIVzv2D5m91G35bHmgiue90XjSehmPvB6Z5v2DL+t1L7bs6zJZLqs3eZ+hwvufyl0R0ezy7naPek7nnZp0PidTvv23vHAPRzD8esp53fJJ0uu4BY/EaoOOTJJVedF4rkafmNef1xEBvpte3Vqi6n50236g5z7mbSYQmdrSHFb7oJiWdhpQ0wdSqV+bEnX2/hx1LVd8GUIQz/m+XvxmnAsAAAAAAMAAgQ4AAAAA8G/wi7n070ZMxd7luZWb7NbW0A0B06bs7cTU7BF1a+lz0TSdu4qkb5LuUr27aq3y+101BLqZSnGVXp6rTffbpmZvAl31LtX3VnbNpkmKaNkjgHkVLsvKur2uzecM2zv85pCr/XWdtj8tdT4TkatZDl5Olb2Q84rje13Ki1nsbPGqJCdRepLgpoggjema75amai/HGui2O0bx2q57rbUJy+25Jmk86hOit9XyTXNzhjc7FF5k1wd59PpYjBIYAwHmQQSTPVyu9ZHOW5+b6n2ua1xzdzsGDphJt8057kZNmEaHijw8OqLPSVt7d5k7GiY+r53kkeQ+0px7S7+Gmwh0KcpZ8ktS3WR6G62e5Pu4l9KxnkuN7t6fG9H5fb6Gx2keUjgL9HtuazvSNUnrkpdDoPtdfi9tOnN3jUETEXLtRx3GjAtT+TbOscnnq3Z+QvbbNbeXzk3tyz6LsS1tbfJoJ1c9xpaUI+32YeDLn5Y03k6wjS0o6472EjOF+F1VtS3fYWkt9D4oxMahocZNxW5tkoBYQ36sTd8HaKVBQS71AVhVtXhbv/2TzQ4AAAAAAH8HCHQAAAAAgO/M8bv98uv8lUS/+hH/FNH3agU+kHZNf3J2dkQOn6JV075SJCttzfK+dnkIUys2ZXdIqkZE7Fpt8smtytzkd5O+ue7fvK9bfm/Rnx4hhJKXIr+X0eje1yv2CHuv733a5VV22vR+76tnwzIkzuIIj1R5g8/i6RUhPjLyuZxXWa3xKzxId6VWd1o3Dz4wJS8o7+YqprTXIXLTEeGuZX3NY09zUWt9m4W0JtEcQdnhoMc5+O585n7dnHUZUfMnbR3ObRqEseZaN9uWuqd7YAweUXh1O9ZBt0365XOcs2Sy0jzvqeJDgvqybe1k6/Oq78/1yY070vWBEdPhuQ2zAE83T17+oG9yi2eAxpHjXbqYtlZBx1wD8TnTpvvPd+mx3/s5rNdlTI4Rp94eQ7K7+owY3p4tb+pLQaQM89+YZtxTp8z3uJ+eKad8djy6x9f+fsrHeppZMk9v+goMTwX6Vd2Ox/Tc9za3jKw/u9MSD02Ia8hx+ZGN9zzdJL+pN+Fx88d9Vcoh42tts6HUsaSHzs/ZdaCBlv052v4L8n0drHUU/3qm5zyucm37osKV0HsAAAAAgJdgzC0AAAAAwPfAppfTD9k11pTdsUqT5dXUjvXrX8fPEjxXpGoEQoa/HGsxj+N8kUjp72bHtOo5zbYeEW3cIglvJr2FNw0Zoi4he1ikr8IiSUH/73v760ZomkY4qrrUZUiIZk2OdYtfbL7UIjoVdnXmGz/kj6T5TsKsn1dxdVHe1XbzR0Ilpz+331bkxJrZEYkfAyTs2NYclsmLnU7tyF2TZD6VFNeslzWVP7pfSOe4JocErzdNa9N/CCsq9vlx5nVaXHmpQ45E11H3ae74mOp+PnBEBcf8B3GLTvmUIruV2XH3e3x6dgyhbnMVs/gfz4+euCR5v073H4NXRn8/D1U430vz5xH9P54Hz26O+NzrUn1eduAkyJfjI+1ow2PegvEIu7luN6mUts1V5XrXvb6r1nfdY0BPDeNrSZqbxnThIddjvfCQy/Ga//Kp5f2PmuPRrzpj+yGXlS77OkvG9QNnyTAivXv/yAMdjsFKT7LMfXrq36lurmPAynqO/0i6qUnyeU76NgDiVnQrN5Vb++L1u+vb/Zvev73L373NbqKjO49uF9chun5Jp3Q//myZaOKKtdot29sypKR9ui+Ls4+yY1OJrlxksv5Pipbj/CScS8x3w13vSHQAAAAAgBcgAh0AAAAA4FUeuIXJ861RbU+OHYTT2cmQ3a/wV+/zn9Tke9TJTN7/Qnr66Rib1iZv64yHQE/CI6RCWgv4qG9tUwNb8w02ogiPaMI4dpZrSVKb5O93+f2BqVjLnfZ5F2vXhz/igS6/Sjy99dOH78Cr+XTB9lryFzN1HxHCA5PadNl+iC6zpmfSrADj+F2Ra8S2xywDRx6jsLR2eN6/84Sfoxz3w6eJm22WtKtAHz1s+FfTuFl3Dr7fqxbt0N+36GqTap9K3JYy+m3sOWLfej3tSHMYxGRYTbKiNggn6rM+b5LwPt+LfvFA27VYFvDZZOZtC+bH8vCzFl7qEEfv6mfych/5SW3A0+3WBmPo5io3SaXKzMfSCFZLH+fRpkEfNYhTvusQ5/f2LPK798j13u2rZPfSPt/bPRSu36smYTs1Q5bwrQpzU53IonyNz/8A4zLEoIlUYBbdjwrI97S3PmOxHMGkehdxnl9N8cXS1lnvU71Hf4zBPVV19Ivqtbd7T/ePVMxU0iwQHvtTVcvN5LWtc19L7YNJ2ni4ye2vnv/qa0lxBZLwH1uOwQhtb9HUoEOmt201aXhLRx9Pn/Poiu/1VQQAAAAA8KeDQAcAAAAAeIVHUXSvpt2xyoGLvMYattnBmeaf4YcE73KtG6+QHEOc53XGrRxrj3fTZrFe9Vin+nZEGY/Co95dDHUxXr0Lom4Wqs/i/Ig812IfLtruvkaWfoRnJufPpk2c/XET/LDFvAvHfi1zJPqRJIuddNyaz1VpuynS+/rWz7rCeTaDj1Llun/h+GXExBDUYfb6vvHZjibo00RMgxQ2I3NG1HAMgonSSnogbIV53Pd+bIt1urMBTE8Vk8uq+vPAFWt8jwj/LM99jp49zv/qovmczo637Tr4Pm1q1miKeKSNvX7W+aEXk//tbVL7nzSmBe8zhtxuUn2T9CbZzVVKSNdbF61FtbXSGCdgPeTfYs73LM/vVTU+u7dI5vebdE8CPVYwqJK/u+q9Su+apfmz7418H/huR2qEdf/V7A1rZHlsW99/4pG7HQS1E+d5XwwwsFl6j/z6wA/vIx7ce1v2cRnl7aZbHxw2viuX7ygrRaWYaq2y2vKspS0xYt7kdk7/6leVT2fdll9og2ByqlRGXPhk5/2q3TacIvsBAAAAAOApCHQAAAAA+KNZdNb3yezJvq+UNcTQWlz2aEkW7adm9rEGrMnabMI5otzU5oYt5RDqkzRvn2N93FspukXYXT5BX37EdzXJUGv3ak2mj3XLQ/zEaICQbyens0Qoflqg69PR578Mz+r/aL9/QZbkfrVen3X69YgsH1N565jW+qqivry5knyjz/n02X3ZHh9N+trsxLa8fpCiZYBJCOqUbwxokc0d1J5c7hzBPgbKpLKq5KUeZUwCPb2vy/aRZ78vrcvfkPvWRPpIE/sT7Ww2vc394iZchHiEY+dtVwI9jQeIF7NyksU2jlvKWrxxW3f7vUv0GJxwdOEWvd9f3/pAgj4hx+GgQ4Wm6nYZriTEWzR5F+veP/+3yt9Nfq8t6ryqFX5X+8XmXdItbY80MfBh10zn5ty35ebjpQXepfuIwH/0SHjWRa7KiXNcJymxI1q8WJ/CvQ/wirXdo4nKuBeliIjPF7L2njiGh/R7x26lDYTolThFzD94hLhXHevPx7Im6/O6D0zyEOCm87CQFzDN53S+JQAAAAAAYAMCHQAAAADgVZ44wQ8dm7f7g/2RLMsiHVIn/yieZfpYRtkku5n8lqzTiDyP6POiWPi3ifa5YkU3vVlJotSPqPPaooJrVZsuvX9u61h7E+f3/j7bnZ08353wozQv80kZ+rN5oV88PPZHsJFok07PHfTlPDeVvTp8Fem7+n1hwIWSqPoUIcxHdnZ+nRxZ1sTW7pdHz4pNnp4/l57Q0qtpXpJhPAPa9liSYYps7/nZ+Gyp/HPb2MX2S1t3Sht2OR+3eW92LJHhrjH3QZz3aR30Q+BPj0vL76uqfVNb1DrL09nPFjPdJOlWVG5tpo5SWqx806E2jVuINdHHlO09Cl3Vj1UK7l30vqtP7949fjXp3iX6N0k3janedW/nOUn59Xk62mjTnLl9arRM3nz5UN5m8ZBVpK+v2ry+mncX4dsuZm1/VVUtaWeS/u6uu1fVWtqgiNjtx8gDM1PxNn27ex3HmxXpVtrFqqUPEvvIc+w4QVebXn43UMy6sS99tfOWvrY+c2RxXZZtXkd/AQAAAACARyDQAQAAAAAyj7zfKjRt3vVSHg9+5J52+Vycl/ZhiJ+0jvE0i671iLtSxlTs5Vbkb+WIsjP1SPMeRtlFekzHHT5i/MbvtYmfMQ17m4bYvTY5pNq8QprKfUScV+8i/UV5nqPkvsqfIAleFVQ/otzPeOToOOWVUSH5zQcL+pIkf5q5vjRyYZoWIoR/vKZ9Y6BK+uybcm15c4pE1/H5vqQfSzXEcdbv9TK2xXry8YxpMt0O15/WU5/WUj/V0zebD4H9CNe73Jcw4v58mz6mwT3jOSiNyPtDSbbXWL7iCKa3HpVsqR3bs89Te7r5cSmG6Pa+Zvm9PTO9r31eJLv10nueZtan+e7R+u5Sbem9lv7clPxd8pvk37povzd5btWkd5O/e5PEIdDvku7WnsdWW/qITPZ41fHsTZdheg1OM0VMF2VzPY63H7oDX5XnF+MmdnVo56jjmZNv2/xal4zM+jXtAxusHkXlJUbU+vo9T1kQZeZpCeIe3P3bYNe8rkP8j037wSc19ehjoYxy1NG1v78eifs/4XsRAAAAAOBfAIEOAAAAAH83H/Vkz9zaum/3g37e/UTYD69w0xBeQ4RLmtYwNvUo8iK3IrsVlVJUb0Xl7TYiVUM8jejSmO49ZJT6VLdddPv7vQWU9+nYvd5V796i5mpEwm1kTWzf7bv8Ef+z4vIv4d+UH18p68MOOtu5DxT83dujV/wL/nxbKVeXbqvMWxrq0bkPCX71uhGFfR3oIdOHUG+yd3Lzfd3vIaVD2EWUvFmf9WIv+ffPsitjdzK5zSbn+uzS56k4+qtLPdh7047hPqN+ZrIezRvjh9rAgNKn9W71dXPVMTCo5/Pe3amadLWbSbVI/ygtmdHluUyltBEJ45L22RqsP1tjDfT7m8v/6yMi3aqk9yK7m/yby4rJv6lFovdnfCuonUfpJ9gimG1EMsfz3t377Pw+2ms0zodNeHbF1qa//+w9uK6Z/vS7Ya1HG6BQa52PzX1nzLs+DlIprR97DDYZU+HXTXqfZ2/o3dl7XtH3jgFtRzmnATI542j3fHvYnKxNDl/TTuve3fpol5y+Z5SfH6/cdgAAAAAAcAkCHQAAAAD+bF4VYa+ku5KCu8izXZokfdYg0lzEeI0f601tDdx1GublB/ch2IvJy62tcV6aHCpuy4/nPVrSfMi0sT1kS48mv39rEehtyvba/7xHUT77Rb7lY0kKPIpsVK6Kzr7xo/iV0PwAtjeDP5ZXq3yV7lcQJSdZfDG6ZHtPPRFBUzm7458cc0lI5c9l4J7viTWPjZxf++ejc7WeYKxXvr6u6e1Y71x+iNexzY6o7CzQozDTPD18PqVnz8GJ5xLdW2j1dl989hCSmzrUvCB5Fok5bTw/Y0rvLlLt7ip+3Oe1NDFsRapWm2y9dWf53l79TbLi8lJl/7G2hLppRK3Xvpb6sXZ1PhOTxX+r2nPWQt4rPZfV12dXus6a9rVLWo6BAu4tmr53k/ic78Xo4SGBTw/c3UCPcSbp7jDfP5933T5eTWdxvqZ5lWjs9TGjuBB+PP/zLVaXN3G+rmN9+TgPk3Tz/j09DR3oAyy8T+1e52Om9zaf89JVM2299n59PKb8j4TeouG9DQI53W792eOSjung0+tn2hgAAAAA4C8GgQ4AAAAA8BGu3NjKzhVuJHqxckrrCnndyytq/3KP6NBiRwZTWZFp6SK9T+VepXKX5vWqe0kjmx65GCGXfTp2yXX/dte9T+Gu2mVByIY8qGCc4yJk6lTkk2a7GqXwCRAFP48PXMZXkl1eyu98jbMk/AyTUNyKxAcNcyHVxr4hwHyW6euok1xgfkYMYzpXbkxdXvxYSzxe8v38ZCBJRG/vz+1ZOOy6BvqSZtShP8NSXTwqa8txk3RWH1gkmZUjYrz0FSyq9YBuUymuatK9FJUuqqt5E+jpz0vbZ//LVf4p7X0aeOCqY1kM6zN+jNnAxxsfg5NqD3UvCvnrGpHq00CLEOx+XLs0AGC3lvY1yzUd8jx3OOvjK2w5MiKin5fnpzebnR+8l23057WuZbyP5UVOkr16W/I+FdzEs+bvqyKV2r9S0+CSOmYoiLXPUwH5vlmnfw/il7jYbpIV063cWkHuqvequ97jNOS9pduK6P/kYRBHwT7fhWNGBeU+xBcjAAAAAMArINABAAAA4M/ho1L7I2mufnNeAwxXUR7b0m/67Xd1G2uUzwXnUDm1H+eLSW9herpAj0i1sVDxqsal6rWLApf9V/t0ESEnjfXLxzrm6qL8Xvs6siHYH5y7dI4w9HOSU2XzWAA/NuyWhH6Z7FV+R16p+y92flOTr3WLfrFGZaY+GJ9NNonAj9yWX5swoJ/BJzvew/N/IMhX99telmdBtNOukCsvfxrw49Pmtq/vLDrWrs9lmZ2v0WVBV4Z0d9K+SbNuy+nn1+MS9QfRNI19MpOSeoi52jT0TTyPiPEivceS8JMc14hSb9N0e5rm/nj1d6m+1VF+PN/HFPljuQyN9py8aq2qtbYg5pjZo0p673/f1NZC/6axPrrXIzq53g856km8x+N73GdDDC/9Kl/Xycfa2uTTpRhd64WBFZaq8V3wI9/8ndSqEjH+6d7IUeXF07T2R5ZDxedtNbq/T2upe6k9yN2vnfTaLusyC/n706Tb2023tzeVvmTC/f0uL/WYoj5O5y7pvV6umhKfW/b9v1Pau3waJQAAAAAAADsQ6AAAAADwe7H7Jf8j6b+S7pEAyIIkB8AFXbwMuaIQ4YdEj3V8h8AOkVxM+ucm3W6HRO9RlN0XNHFSvUeIHzJcVdK3Kvs/9enS0oc4D1H+4ICQatkEtUxmye5nz94Of+3CmOzzEv27GpufwxoN/bHo0h/L+Va0sb0+ulmWgRwxzfLUJ1685lfd6NPT7n+H5r2KYH8a2b6zYKfNy2iTLNKHNcv3pB/PiGd957apw9Wa66PYCyE41ffRcySSVY3nzlH5x3kP+ehLglxmrl8asDHWc29x71VSiSjxW3/m3tSi1uOYiNBfn/X/R/K3oyw/lXXxl4nZPKrac9ylMav9Nw2hPuR4r7TfXTWt2+2b5+/4W53pRX8bU/pfPLtzc37qdpkk/WcyiHzSYIGUucVAhl6WL93B1eT5mMghVWXXfa090OYBH+vBayZ91oGWtGeyu/+KpGIqpai8Fb39p6iUW9tVJf/vXaqums/zv+m7XRoTwqwNe8Tix7tWn7scgQ4AAAAA8AIIdAAAAACAj7AKkFWm7PZJ0q1HnEuHNO9yJgcBeuzPv86bpJjaVfHTuGQj+q3bgNrWKFftEePxg/27H+u+5lNJ0wjnopQjT13zj+12nNi0bHrYlHXtapsOXPLJb/Yqxq53/RX8SsJ8JWp2XMEl8vOj+S0hlZ8+ddOn6zBV4HvyEVH47MQnab0K7fGfCwGvaeN09+2cWqzBvRx3fb9+zoj6kMDTqIA18xc/byp8MqWz+PdS2tLw1nfFYIJ4rheTeemmvf+Ztwjl8UTu/S49vsca5n37iGzPVZEd4jza4d5evUegjxnuk2iPNOoR6EOiZmme/1Y2fUVr0gvJHm8/9EcGL9YAACAASURBVHy6rMMHuKpn2lbTl92o3uY2sfTavu72fffIwtK2i4rn8nrhFkunrCHj6d8Jfe4A3bvebjMfuPQ/pptuullM8+/ym+S6H9/p0Sd8/lzd5B49zFPRyHMAAAAAgFdAoAMAAADA78OjcLhI8qq/eZbuKrpsV59Vnpcyi6c+Xbu9lSMbU18nV1M6KXmkNL27lSIrSaAPMdIiz827PL/f2w/195rEuiS3iMmbREHWVTb918bGe/51Pq3pO+gRk76GJI4s7FJOHFF6292S+9NLdcUv7J5/Cx4PbdjzdXHd8/mp124a+fExHhz2dCaFi6DWR+mPENl1+y7tuaxJCYaYlTRFsWfhPDrFkqG1NbI/e6822Rf5Hs+eqfLrOdj6drbkpzXZr4S7qUWbR1R6PL6LjX3WQtTbNo/mOKZrL+PZne4A68/EfoD3IOQhujs33fpU7PWQ4/2vfvM2ffsq0LNkXyPOldLlJnzwjJ3bJY/mWtKlS3EK/k7N+ZBH9/arHWjzPTN2rbfvRZ5Hshg5cf6eygMExvfkiCbfDM6INOl7y5fvsDxuIWZycXPd7d4i463KSpFbO85upnLr07rXqlqq7nc/X+s8+CKWA7hHmflu54sRAAAAAOAVEOgAAAAAAK+Shcv6/ghjO79K0q2MCPQQ5J7en/IdP+r3j+7y93s/PtZvjalcvb+X5Ev0eTPbx3sLsdRered39kwRYd4rFdPQ6og8zIJAOfIxn5OkGuvN7tpyXS99/XGf3/p/eb7XJbpysy8dtPLVSn161MZndoYwvjCSO4E87k0dDXY1euhCnm9qsPPij7NbP2wv3tXIgON82/PM0qkmSbmuHa10zMgqpZn8ux3P1ZH30p5F6nN0j2dYe5Sm9i29KtWO9z374j3tJG29i9H23uVjLfX8zLcQ4DEl+5ChvRLvfkzlXtMxSaRbzEXv+VmeGsfT38oL/W3Kbsn2FMwc53zFKvWXY0/fH89kez7mkc3fdSE7ZoBp19KPSO1+0lN37t/nzZ/7ceAq7COLiweZpTYqpUgmVVXV6rq/31VlklfZm6Q3l70V2VsrKMblWS+nda8ic2t9s5p0b/3D36vqu8vv/d8IMcMBAAAAAAC8BAIdAAAAAP4unomxq/22CcyLbVmely5YrE3r6/GjezHpdliBk8+YJLqlv57wvUr3On64H+K81rO0WgLjxrTCkdkQUpbkiKfDuzyfolDD+BxSyfvrSHMSfEd9zpHJi/xb6r5J+ffxEwcPfI82v76VHuf+5Sj2VWh99GBLN/unCv8gSRZeLa388LhPFHc+tM1qkZdlkHIz9MEzQ3DGYJqL+38Qlne3PZXuY2GKXk5cxBESf1WAuoE85WvjOtroE+1RNlfW41kW27pLnwx9n7rdSxenVWMNddW2XvWopvW0SZh73qfj1fs65nbvEfghznsZsfZ5luDW6zPGF6icJLLHM30UvHk4ryHk67XPTbqK83iThezVqIzTgZttJxF9YdB39X10H9jyfhL0x87RfOsa8rsqm83tvdQ95PbDOplkpehWSusr7nLvkeVBkW5FsjeT/eeYvcaK6VYiK5PppiJTuRdZLfJ3ye/S/b936dtd9VttsxjElP8/8XsFAAAAAOB34tH/CgUAAAAA+DG8Gl2WPy6Re4MrabvLv/R8XvgX8NafxY/upibKV2lejimAT5aqtAh0Tz/cW8+rq/Yl4i+ZkJiSvdbjB37piDbMP4rnczsZ+vwL/5JuKyaa0hoR5rlhpvVcH4itXA+fNx/bdnbm+Pwllfld7PtnTaWf/xdXbou13dfriOz4HB+5XCfpZ5KVzxf9het1Hsxycb9Ky/Zn5nJX0EU2p0M3eaVNuc521VlfaRT3NNAnZf7k2OlxlJrNUoLpWb45HS9+yHAtr+v2PqhpzM5havb8tpSdJHp89jg2V3DI8vYsb5Hl6f36F8eMCHTTzUvf3L8X+neEr8+WXaM9ktqPtsf7RwL9WR7x+fK79kl91v765GvovD93HkvP6qt+bOn1IpTbXmgGk/wmWcxKY5Kbt+n+TW3JgCLZP6by1pZ+Kf/0aQ/kqjepFpcVUymtfxe1gRheXf6tCXTd1d6/m+q75O+Svrn07d5mNtDI8qJ91lug/ffOlxIAAAAA/CUQgQ4AAAAA/y5bSfMgrZLMfuW49cfyRaqEAznNHL4cPv0uHx9KNyfpz27q4jwkei8gr4Hec/Tl52hJKiptBmHXIctrRKR5ijJ/b2ud66j7ONUHP4BPJ/ZIxG33+ZDQp6jhbKUeROuepsBdd9hpxyaTL1jwj/S3U7mfL3aUHa/P8trt39Ubd/GcB220rnG8l2qfb2R7Uv6zY+vI5EFGp/ttNzLlSUGbo9uuFwYPpAPsase0+Xm9PIzwTrBeEc/xzTFj8MxmhotTH6j9ml99z/T0tryOw99Muh3HjxL7gK34rihDvh/5uFzV78eU4P1vyPOQ5es61/m8a3yZra86YRdtsv347FpEWz75/rmayvwy3wd5bct/Id2+TsuIgNyvd/mmr6zLsU0XYxIyVtSmW1cT3vEdZX0gXnzX2jcbU7LX/3rvTyb9j+T/l8luJr2VNqOCVdVaVd/v8pukd8nuJvvnJr2bbu833d9d/s2l/8ebYc+DIDbXML46j/GA1ofJVFW+iAAAAADgLwCBDgAAAAC/D1fRaq8e66efzM/JLL0ukYdmJclzjajzEZI46rYJeZvmej92u1dV17EWrru8T8vuIUZqffCLPfwwvuZSP5bX9ywLfh5fuIZc/h+D+8MxPprk+YMM3L1J7/46iGnXVwHv6lO4twe8xXdEn9kjltKo8cW0/q3SPEWdZ+EZgjqL6itnfVrj/rFLf2EHfBSPwXJ3zZa69wPv19h60LndbcxyE4P/qkt+k/zNVM1lN7WBGL2PWG2DYYoVWXmTbkWlz0pw/6e2SPVe5FgfXZoGa0SXPrpaW9vgy0tsAAAAAAD8JiDQAQAAAODf54MBkw+PXYOXH/y2+/BnX1vej7CrFAZfyrGtv3pEok9uPK0tPkl1myvRfwlvwYd9+lWv/QdsT7+Uv2jPvxCo/eN4Vu/n5/Xln+u/HIH+hRpsxlJ87PgY0YG0+HcIc/S5TvOVMT6jk1xd6pf6gn3pOfA0Wvj6yOX1i7xyDq8+WmyW6HGO06wau0kw1m0pn6OdbF6mPb8u66KPKbrN5VlNzpbygUw3WZfn4/vFXfWjU7E/S7Ju/M6X9nfH/ZiZ5XMZSN1FH59jW8zUfvcWSV57v8nLwsT07DfpflP7Va8c+Y1uJlPRTaWY5DeVW+8rt5vq2yHyvXhbHqamC9zrE1WztINuAAAAAAB/Cwh0AAAAAPh7WaX5SZynyHIr8luKIrd5et4I5RtZnsK35p+dWwTYEW3eZEuW5umYK6m1+QH/wcyzP5nvIKF/yrE/qfWISP85fM2A/1ieh1L/Oax9/yNCfU2bBfBVPrt960CK5XE8du3WAZ9mL0l/I91ViHh63f31fUOkj++OD/Ksra4+r7vdz8t7wGNWK537R0h0S2nyv0skqYt1valN8V4lKz51nWrqE67fmzS/u+pd8nubhL3cWiS5u8mqyU0yc3kLXZ///VJn3w8AAAAA8LeAQAcAAACAf5cHEuPKDZ388SoXd8c9inJ/Js7NlvXOe8KSpnCX2o/Ou0q5t3VJ3Y8gsym4y/u07CnCPF5dmxO+YDnHI1h+PumfH7z8gQps+8BX5Pvn9U6bevnzRX+Kr0asw0NG9PEzEf2Fm+br99vVgBl7nPmXZyv46qiNbHm/A7uo8N3+ZxHSlnZ7PqwdMJZoX9dq3zaHp3c9wXraq0SP97vtO1aJrh4t30W55f21T6n9qH2WvJ7yTKK/+vX0L3zx/KgyXn5OfLoAnf+NEn0k/o1U07bcf/psBHKT7iYrEaE+OovcpKoqk7XBevXeBHqV3kyym/V12CXdXGZFrnr8e6dHo4/JDSpfSQAAAADw94FABwAAAICfzod/o14l/E7K7z6f/iy9JmleUqWmNEVrwUtceYpA91lk1bpsytL8kTj/Q0ORH0WCrum+4gMflfUM/0PbHh7zky65Pyv8WQS6f3HAh0tfuFmuo6pfL/z7HL77fgjswolvI9Cfhl8fB+2SPqrHM8KFTjJ9joY37/L8M+HBV3W5Og/4rliP2x9f+6bj3wE7ab4K9LtJ30y6SV4kFT8d5+a6Wwsfdzf5vf2b4y5TsXQjxGPDevmlF2ipb8XU8r3fSf/OAAkAAAAAgJ8JAh0AAAAAfg1s/EfyT6yz+SgCL/K+qf84LE1TtJckzYdIjzQ57VreERHaogBzmPmxgGj7bbytcT7CIOOX8wc/Qls6gddbxH6BiPMvcJJYm20fItYb/lxdvuIEf8hlIEL9u3AVYfpLSqHpubOpn6VO8aXo84v8Xz08nm3fg2djV3b7/cG+V/L005sXTqclKOkiTcHe/fllbqcA95FgbfP+3TLJ8/56GhfmF83+6FzXfNftX+SXvIc+ibtfR6F/4TRtKPQjr/YdX4+8879fQmDHhnv/90j8m8aWVzWx7tb/HVKPPy8+Dpe6EI/BGOZtoEbRmE4+shh9qn7t3AEAAAAAfhcQ6AAAAADw77JGBZvOYmGVhLvPO9Gqzf4cYX6zI6JcWZprjkDPaXJeJ+HQVYmrC/M6No1fmvsxXjWmRR2ZPfgROn5cjx/vn0uJL1nmX5fvclo/59f+D8evnw74Q68p/IJ4smSfOfyrEejn6kw8et6vnz8qz6/2vXg6u6+jbbplMND4OsszXYwvwxwh7KOcfLA/GFZ1GUx/9Qr/HqnNz93aDnnuOu6pPMuAd6ltav+mMN/L9FhPPf5Nck/vlbtA23jcvj6nyf/+sRivQxQ6AAAAAPz5INABAAAA4N9nleiD/mNsjqi8Ov6RschTmRaTrAyBbmN60v46pLnkaX3zIw87fsx2X6SGp2nY67F/iPV6uPQpLPExIzItR769MM/9b+vYf9V6SV+r2zqoI97kC/UZsZfzw198id9CAL3cB756Lh8e8jHzvZtyirzf7P5I0PyzyPM1jPsD59K+Kh7fkD4ZyXSgmkAf02Iv5R/qPL5TrG+LBPv5NaI+nuT7SaJfV/dDfGK+mN+K9Rlhefrzz+d65KdNdm7Ljjygont19zYwLwR6iPeiJtMj8ygu/xskd5r1Ptr1k6l7z4P72rHnNjKzsf23eM4CAAAAACwg0AEAAADg3+PVUL1Hx6+v+YfjnK50Oa4iFZPF50mQt88jomqp3yy/Q5b3jTH9eg2xoWObS1P0+Qd/O/bNu9+aZ4MdfmW+6yXIAyOSIXvFW5p9vCPBn8363PsuGf4uPLHrH+EDg5sui7Rj82lGdn89+91Z+fSNsK/sr/4YhZkqlz38po9Os/yjxGwM2IitVUXTEjIxxframeKvpO27jvNIpL/QkUOeI9EBAAAA4HcHgQ4AAAAAL3O5FuiLDBHwLJv4oXUNMUzi3MzksVb5GlUVcrx0eW5FVqxHmKdy0lSkMTVpjgC0FJXo7tI9RZkPia5DnIc0v/yh2B5+3DZFSnyVfEQkvljsv8pvLs/dvlBNP1+1Oe5w3rIl3wNI9H+Nz17zf/3q+EuTUzzPZo3A/hms53GS1Mu9lKNzvxo5/wWB3h75PmZfX0Xhfu3zYP+AmSPWp5jz16qX6nB6ZDB7xZf4XiL45Vy82/DezVvA+eabxPv3w26gYi6sbsp4NB5lEenuLpM9bIeQ58cp0NkAAAAA4PcDgQ4AAAAA/y5flT1jjc8U4WSSZxExpl8vPRK9TeF+1hA2Zka1SaIkMR4vXqUaglxJmo8EevqT+Bc9z8PGe5Tvd49U/Q48FOvfObr0s3z5ev2mZQP8bXzFv3uLKD6NYVpF9faZ5+eIdfPszR+zPCfwlH8ayV679X/HeOtvOvqJn6aVnztGdup1N6DiiTQ/VSVHz190uizQcyR6fI797o5gBwAAAIBfEgQ6AAAAADzlq5Hn5wyXz5cRckskeqz12aPJSyltTXOzJMiVItBb9LlK/MDcTfLpx2I/HHOflt2nSPO+/Z6keZ4ydT0Jm17GB4+NQ7xftcsmKtHtiRx5dI1+gR+nr6p32t42fJeo2u+UwVd+2//waYy+/7kGyFIC/i7+3kv+HU78xSx2z6XLoVPrwKWLgUyniPVdnWx5XdJcfRXBn4ZP0/gnja1Jk4/vDx/LosfeU399pb9M/+z5WAdb//1o8W+39F1Va+U7CwAAAAB+ORDoAAAAAPD70eW4iqRSjina1X43jt+OLdY472ufe70nieHpl+T+Y3RVF+hpqvaQ59U3Uee5TprkxvAd8Xt27HjlR+JJlqwZfIK85vYvz3mGgO+a5b95LADAC3w3d7iLHM78ajOR/K18dBr9cd28DSTMYwv7n08J7fi3TRrQFzK9Hrk9K/Bg+ffSZ8jyPAQ666QDAAAAwK8KAh0AAAAAnjL9qPngB/hnv80PjXsZeb1mMkx4e3uz9uPxrQl0LyaLdc67bI2ZTF3Hj8vjR+Z2MufXIcl75Wr6i8rWlHY9AVs/LsJ6RL+/+uOwz1H3/qIAvwzb7mXvsng11HsbNH/O8MjOxn9HMNxF9OQ0TmBttlzKSzO7r9Fuj9vtaauudX5SB5u2t9EclkZXmEyueqwZ0C+tr8eNQQ+pkXYzF5ymcPZzneHD/E4a54+RTo9OI/f/q/2v5vVqHjs+mu8uCn0tb83zKs36NbAe/0ye5308I34NXvlqfzR7y27fg9kI1n9K7LvgowKf3wAxJfvuuRQCfbc9Hw8AAAAA8CuAQAcAAAD4K/nCdN8v/Gi786URNHWvmhNOf3bI8ngfCU3SP/1Pbb+b6Z4kec6qDO/Yosa9SuW9ymtNs7C3fWP98x5pbhFpHttcbSLU/CPvo9+Y08/S3t9vJfAjJlmaTfNn+crB0aqbOmXZHzFwI7JMx7T1punHeh8hcKY2D78ff36kH0UVzf/rpaYqjDqWfmHSufp7l9VHqlz7Ux55QIG5rHekfB4jk1wHb1W8qYx+pPtNfr/JVNo5Rt+wKukuL3fJ3uU6JjiQF6n287Be91sv576U+UgavjjmAuC34Flf/mJf/8oyJU+PvKrbK3V+IEPbJj/CiT8Cz4afy1faPw+4mp75eaDc8QUQYwNr2vq5YWWvV3qdkv2RFF/XRn+W/iFXg1LG7kPe+wstAQAAAAB/Nwh0AAAAgL+Sza+MT354HGnsIu3iV09SYRc9NxnvLi9L22DFugu1QzxmgR6Z9JBfV/Kk43fRtJZ5rGFefU6TZbm8uc2Q6NM5doub3Wycx7ah1np+1fBsfOmHstxelQ8UbktbpFf3eQSDltc0JkJDFOcqWRffJyveIrbNt006i+TTaIw2cKLHfK81H+8jn2m0R+TR6jOOuUm6mcrtplJK61tVqvc2MKOZ8MivnVMTAmUuwHqu5vKS6hTHFuu2w5p3Ly2RW5W/+9F2u7ZY2shiAAdRfQCP+Q1vkfZ0+w0rDi9jy5ff5dX261S+3fpjufrO2Yn1NW2e1n0i/PfOfa+DO1862Y/8m4j7DAAAAOBvA4EOAAAA8Ffy4IfAjYzLDns98ipA7uQkpXkq71Welx6JXKz7SxtrmEcFLqO+uwjPsrxmMV79ELd58c84LiKnXSlmfG0D+3t/Pu0N4jl+bZ1rPQ12uPyxPi5PhMP1TuIlAr+XSHdJZkUlJHi/PnKpRsj2Ok//pv/mvri9hrGzHFm1622trnFQKSr/uemf//mP/vnP/7Rpaqvr/b/f9O2//5Xfq97vTaSbpPImmVy1vrf6jnOucru3Dpc72603Tm2NYnbTrUi3202qrqqq+/2uqjoPQNiOVgGAPx0GxsDvRI5Mv5TknbxG+thWUj7S43+ATpnp+PcDAAAAAMCLINABAAAA/ko20cgpGtgsNjSyQN8Fu179JJmF+UizSvRiUilH9HmPRDeVIyo9BxXn0roAt4gkry732qWnL3+9QlGp/MPtiILaBIr/Ci5yDYb/FJsTeTRt8bQvhb+for41yfMxI0D8SB7iO5o9JHLqEOMHcuvxlCGWewR1idET9z7pque48mON8bG+q4VcPyq8zuw+nVoeHGEuKyYzl5mp+q1HmlfZf24q//OP3v73/+h//e//LXdXrVX2/5ne/9931W8uffOjLnKZqmr1FDnuUvHWXLfjXvMq1Zii/d4aqMhUyk1vt5tUpPf6Li91nrHZR7D75ibbr0MLADPcJ/Cj+ez05FfpP7PswK/Qz6+izqULaT69jzc5wxcLNvV/6/0K/6gDAAD4/9l72y7HVVgLcwunzrl31vz/vzr3VII0HyRAYDtJvXR3VfV+eqWT2BgDdipEWxKEkO8ABXRCCCGEEHKXo+DW02jeNeR8Pbhns06R5WjCOYaQLk08R4iqEkJnStVu6BHn1kRyVViLTG7PPT17a/EioC9RS1mDzGL6x83OHzXa/jnD97Bfx8B3oToL6Ksen5wS4q2mKvqBUiAi/ViDr4fe7eTtdP04v6Yuch+sZ1pslAP8fb7v2nbxZQK2UlyANsCgUFNA1NOml4Jte4GqQmuF/FNQ/t3w8v/8i3/+3/8BYKim0EtFkQvsP4WV1miBovq5qnl0ebC9bNguBdvmt7xVRb0pbq+GegUgClSgyAWlFEgpEAW2UqClAFLn69PStMvDWHtCCCHkS2Jmd8XztmSBxHf5zmdsquzOPkIIIYQQQp6AAjohhBBCyF/JsUVRQnjMdkcLIdmyoHxmkFyjy6f3STQvPbz4eJ94BG9L4W5hOIUZ5Ga9nT1tu+bXOsTzKHZvbdDDzdHx05Tx7+HDeuYHG/MoWu3h/vbChnierq/k6z1F9x9lHwgniRCxRUqIzjYd4/ecwhcKj7T8IYZLAWRz0dgAP7aL1xip+jcvjw2jfhFsW8G2bXh5uUCKRDr2iqoeIi8ikLIBlxfcaoW+KuxisBdFvdxw267wjAgV9R+FVfVzvMCXISgFVqu344bxy0sE278FLy8XvGziAvq14vW1QrV6tHoFEJHrAoWJhC/I6hCyuziz8wBFdEII+SOcRYifbf+syPTvzt0U70eJdMo8pv4VeTA2tntBCCGEEELIXSigE0IIIYT8xTySZLtOnUX0fNwacZ5fF4wU7E1hXVOyjzzdk5De0323JN3t3KqQWkfkOSwik+3gged0xL8hOimL3XfLHW8ekc2WyqXXU/02HA8Oxl1KAVDC4F2GkwQAk7Y+qvX6qhgK1LPvAyFsC8omwIbIyh/roZb0aE0WuLDdHgKUItguG/755wX//s8/vsY4FLUq6u0KU4vbtsDKBXg13DbAtOKKCtwM9b8bZPNOvuKKerkCmwH/FpStYNsK9NVgrwrdAFQA5s4Cl39e8M8/F7xsBZsAN9ygN+BWDLAQ3StQ9eZjr56yXqsL7McXaR1vigSEEEK+H2b75UdaBLr7UtrYJoIiBTlFvpo7oPFrkBBCCCGEfAQK6IQQQgghfyFHuncTqw/tjV28xC4qO69zPompeV3zNcq8ibFTJFaLPl5a0G2gBlQFqnYB3aPOWyGbD3ireJ70YVv3pXo+pLd/1Jj78ORyv9wza6aelkkDcJCJYJHY9+1oDhMiXTRva48bPOrbYCOCPB4twUBbBh2bQUI8xya9vIRwXl4iqr2lbC8C2wArhvZPBMCLAS9A+R9BuQhUBbgZ9NWgtUWhA4IKXPy+80XKgRv+A2oFVIDixnps1Q35paBs/rxhA6zgBkXVuFcroFdFRUWJ9PL1VT3C/dUgV8Bu8Kh1MygqanXhwFRhqtMgd1+Gw6h0qgeEEPI7eM+a5OR5RhaWsa0J6NLnlm3qIH3Jn918hV+LhBBCCCHkSSigE0IIIYQQAHdsirI81rJL9HiPMi854nwIpsOGOaKFRiOyEI6dmGu1wq5t/ecluuioAyOQ2d8+sm+vIvqyTz5ieP1lKdyf2P5sw59J426pvu48ceB80cvmcu3ewIg6N4OZwsOudSegA3FLRCp2ewHsAtgmkItE9JlALoBcBJd/NmwvnqK9XAS3UqACKAyqFfV2g5nCNl+7/PbvDSiGWite9Yr/cPW1yw0oVnCRG6oYsNWxjrlEqvcQ+EWArQDlIti2lpYeuNR/sFXgv+sNr1ZRrwq7VVxfAS0VtfhQ6HUI6HgFcC0Rsa6AGarchkiuY3ibXLBPWUvxnBBCyA9DcewBeo+urQvERgT7T02BTwghhBBCPg8K6IQQQgghfyHW5evziPNeoMTrFkneooBy6vWcqr3IJJ6LlC6YCkJrbdHj8PXMe9ruKZL8oIE11jdfxfOn+ozR5vMCj/e/F5GP1SH9v8fb1209TPlOPb3s0b50bXok+VF+9rN2jzaYtMwDNt5DAQnxfGv3j0eVGyLi+gLICyCXDbIVXxa9RaWXENBfCsq/gsu/G15eCsqLl61wgdxeFSiAVgNEcZOKYldU9fXHr1pxww3Wb7Hau3t5KRHVJpH5wIX/WsMnYAPkFvH01Y/dXgvweoFcFXitwH8ukFdUWKSlL/A1z+0G2BXATSB1gykQH44hnicBPQ/uXjxnqB0hhPxO9inHGZH+qzGDp2ov6uI4IpdNSvHuzwLp35fJ+ewdc0lCCCGEEPL3QAGdEEIIIeQv5TDj89GjCLAJSqxXrRYidl/3ekQVS4s8b6m685rnrUqDHx8qpZ2tX36Ug73aIiDiYQD22k85FB2/OLI8n+4/KSCLoPpmu36ot9NxKcp5bd+wWmOXXl9qpGovQ9g3BYp5hHcI36UIZAOqJ0BH+Uew/bMBpUDKhqqKajrO+SKQfwD8K5D/KSj/XvDyz+biuir0tQJqsJvBFKhmUPVocxHA1KDV9+UsBGaKl3LBthVcZEMpBVYVer3heqt4vUVGhCtgoqhFoeoZ3rdrgdwE9f8U+p/BQkCHAWoGbR+N8B/wtO0C0fisSfVx0TF8GbkD/gAAIABJREFU81UZUsC4AMU/dz2ynxBCCPkBrHOXcMDU5cuxTTlEgFLKmPdJmo9IOHBGPYQQQgghhKxQQCeEEEII+ZvJwmdZ34e6V8oshGvZpdjO61r3dSh7xLVbKC0id6WeCOaRrrobN4/SayZxM4vyjX7EmY4cDzN7nOT6LBD7I3xKRNoaWb5sO3g7tq077kWix/Ma3Hwaxd9Sr8vINhBlVeLCtXzn7d7qQnvpa5pv/2wROd7WMTegAC//vuDyzwv8Ri3Q6ytwvcW5tQvg1yuAYn0NdHsp3WnDmkAeurLViGAXAVTQ9OrW2eJVQVTind/nehXYK/zxX/cFAQSwAmh09/ZaYdVwuyr0qsAVkZp9GTr129/b6WlmbfqA7Yf6+IKdeI0QQgj5rZxFpDN1+CeR5oLWUrsfJDAys/3Yt7JHzolnl4eXjRBCCCHkr4MCOiGEEELI38oaZd5F9CSWh4A+1qwWWFkU7K5kR4xPEomtR5OPVNwWArqnwI4oWk3i+UHg+XOdwYnemK2s/l7Sad4ejf1e7gii76rrLdubpfgdFuAsvHeBPNeJUJCHKC4QjyBvmQk2gcJgGsp1T/NfvJ4C4CLYLgXbS8HlpXSHDrlcIBfBv//zv/j33/9FrYZagasBuJlnM1DxdOpqHpleJQR14GIvXtE1yt9sOGIIILdIzW5lCNlN/jdAqi94oPEeZqj/Kep/huv/GW7/oS/f3p1QYpivtxtutxieCkAlFHsdw7lPkRCfg7hfRDCtOX9HPJd8j9HYTwgh5CdiT7xum2LpmZzaPVOK7Mu+ax5KCCGEEEJ+GhTQCSGEEEL+Rro4Dhc8yxAsm4BuqYy19c0FvmESVbNsNwTVlpp9rDFpMPX1nlvq9il9+5ptetXpV7p+m9ohB/bOdYMdRCHlcTl+83EkiZu/guS4IMt5rP//RMT52b6UXcBvBVnS4NsknpcQyMsmKP8WqBi0eqJVa/dcv78A2QC5CMpFgIvAoFDzNdJblLiUzQ8xA2zzBwRAhJKbAlWhEOgGaDGPfhdAXxV2BaR6pLkvSlA8XbqJi+cRHW5x85sqcKvQiA6/qaCYwK4KuxrwKiiv4pHsLR97GyMDYHWkhM8fKLTPRuxLmRUE0d8Wsa92cFOvl2cI6CPpAy3/hBDyVXhv5Pm6lvpfHcF+No25M3/xr1Htr4E0lckZk+LZI9Z9nJnenRBCCCHk74YCOiGEEELI30gXzwskUrRLCOgmgBWX5EysWxq7DbFHDo+qJttly8jeLI9tvfOWRltHBPou4nyNJEqB8CJzBve5Pzn6eRw+086Z9q/G2Aca84f5SN33jLiPUsN/tE85IwFyILpEsPQYOGnp/EvBJoLtsuHlf15gBbhVdWO2ACIFEuK5Fotoc4MUA7aIJLebC9AVqBZntiZQF0A3tJTuwAbYDV3trhvsJlBEdoOrAldDuQmKFRRsENtgFgJ4VVg16A3DuUOrp4mvNtYpV2CzDcUKcBNstfjqAxWRdr24L0gbEqn+Qor32QDV8NyIpk33vhikRZy3+/Ug8rxXnyLPx0dp/TARQgj5CayC+lv59gL8UdaWdR6XXxt8jfT2tRiOlllEz06HIsM58NuPFSGEEEII+RAU0AkhhBBC/hCn2Zh/5QkBF8p7eu2IKi4jQNZ69HlKIQ10EVUQa0rbVG1Xzeeocs1quovpVcf76djj9loqY3ftxmvcNbqYP1W6y5l9wlEq0La5nSifsBtxV2uuLPvfS2rQFHm/b6y1ZAFnJ8ztn5p6cCHSftlc9G5OF6Nk8XO27AXwe6sKgE3c3yIcMwyeMlVKgWylR1ubJ3n3SLEboCbQWrrTw/X/Kv4/+z9fX1wBrVdArt5esaFuFwOKQVGhKpDbxVO8XzfP+37ztdBVNe5HAapvQw29W+PzGaJ6S9HexG5t6RJq257Hoo4lApoA3lVy9ej2vh0j80K60X25g/QXwtYyA+uVSPoYUUAnhJCfwFtF3I8K7N+OVTA/QvdlfOUZm+dByQNTAJSY95pZZGJqB945FyGEEEII+TFQQCeEEEII+QNscO26aXNPkY18ut/V2Nn0kmHQA4MF5WWbBOomwbk4nMKwpQyRPTZtCpSaNPCWqr1H7fp7FxEXBbtHoC+NPurI0qe7AdjteYrW3anns/C8O8kT1tBpbBYBW5aBjoZIj+DPaulbDdxNJG6Ht04eKfnjbFN7rQyBvKfrz/2Ci9CSbq5sTBagbEB5KcClACGmW4n1wdN9okB3pHCNuaKlFZet4LIVlMuGshVvpxqqCeqtwqx46nZDhKe7I8ZrveL6fzcfU6iL2E00b4p3C0i/eMTZVQHUC0QvsJsAV4G+3lBfK3CtwE1dNL+57i5VUGoI3HGf1oPbCHARfRI2DnwmECnho5Nxi7X6075dxNzt4Ixp//TSwHTthBBCgCcE94/q61/x6+atbUoiumFkfZlSu4sL6G0O53MZm7+/73E2zl9x/AghhBBCyCEU0AkhhBBC/gAtxfOb7Gh3C0sy1tlezEs6q/Vo8yViO0dQ50jqNVhc4SI40AXzJp5bT0ttKUonR+ukTq8i+tnrJ5ki4dOzHG8+qOCJk2aRvD/vvQGaAbutoyld8F4a+Wyk2LR++kEPDiPi96L6EMrjUaJcibKluCE59kvcBz31/VaAbfPni4vfljIZ9KQF/TJ7BgLV1jZX7g0bFAUIsbyaolaDqo2s/j0lgnnWApXhFCCIJQcEgg0ixRXw1rXImo4KjzS/3VCrQq8V+qqRzt0j3VEBqy3zu0HUXJe3ZlzfX6PsO/KQtUxetiAaLEfl2pCt9xat74QQQj7Ce0X0H/r1Y9bma2nehhF9LjFf9rlcgRX3fMtJe3ZDc+Qo+kPHjxBCCCHkp0IBnRBCCCHkD2DwaJYzeqbI/l868KjwKpxmRS6L5wBQpGuTucoWcTOlSW/GwZT2XHWI5i4yLmnbp7TV6QxrpO0fwI4Mmu9mFdH7WebzHR1yVuMdQb1fs5YCfGXJFDA1p0WV5yYX+Fr2IpDNRXDpDy8k4WihWmPsxI/ZSk/139sV6nmxcWKz4gL6uMlQsMFkcxHd4AJ6hQvcdblnm4Bu2o9vfSzwdotIpFk1T2Ke7kEzeFT7VaG1Qm8Ku9ZI5Q73ZIlng5+mieei6X5pn5VH9+9OLH9QHie3xHpLEUIIIeSXcSSiT/tjfiYRlS5iPeNSW6Xl9Gub3+eEEEIIId8SCuiEEEIIIV+ZQ8EcOc+kF7sXgSxIAriEgJ6E1hRVPQn37dUkhiPWj3ZrYRf4+5rnLfJ8Ccn5hcbD84jyWfD8cBPWQRY3pFrfdHwGWa7VYUPv7Y4oKGlr06/naRHgpXhYdlnbDWAzbJvGdU/3Rau7hIAeKftHOva4J3SDqkIk1iwvXq63RFowu4xA9xC+hz9F1GkSAeVe0LS6eN6s1pLaBoNL7pdI6z6cN7QFvsf9nLvWb0ED7FqhFdCqsJsCtySetxTrOp4NGOudr8P9SEE/+7weXbb7NRFCCCHkN7L/is+z4Zb/ZeSGEZHzlPnF5yfSUvNUm8q+d237tx5HCCGEEELeDwV0QgghhJAvyqGNrImLJamFR/u7EJmE81QoR6APsXIpaSGRZ4EcCAEzNXCNPo9jf2nEzaJl24kaab8wklcgfahbmu+z9NpjHfSTutI1mMs0Q22I2QCs5wxtgrP44uQXAaSgFBe53bnBy5ULsP1jIXrHoLRLJXDhva31GfVJusdMK1A1os6bcr22MtoJQGAQk1gq1OKcLp43HwupvsdF8VCuo5g0cd6Ai1xwQUHVCjWPJLcwRFcAKIJSlhsCTb836NVQq/pi5hXjkYXzLJYbsEvDcHbhaMcmhBDyN/EXZEg5EtL79FbGXMqnbrI/QADZfD5WtrZ0jcJUR9amd3JXtCeEEEIIIZ8KBXRCCCGEkC/IYervFiksAgvBM0qPcgU9WtmPS0JnM/6VKOcJr4+Xz1akNNg2N2gVz3cNtfPw2o/a/OTgtXg7zkT0XQTwozbcW5c8jvWoojbO2UlBppetjIhAlxOPyPXcJJmeelmJK9WjxpuDhABbgZQCuWwRPb5BpGnDIaC/AC//60K/X76I4k6pzq2J9Ls08OLrlZcyO2iknmQtOi4HJOK1DEiCu/fU7Nbb1sPFN2BrYngJ8dsUxYDNCqAKuwFyNeBWXQRXoIYDgzRxH3DxPk5nN49ah2KKNJ+dPBaPkn5Zl3t/hTZsQggh34lP+N5al5v56oJum6u9tZk5rftEy4SDMYXJRUSATQrKZcO2XSCAOwHCl0GytizN7mLINLZzxPpReUIIIYQQ8iuhgE4IIYQQ8h0QRDpIF0tVshktibgtErcFD6dI4W6I6wJoinhOu2AGMfh60O11Cizf0YXI1o5jEbgXfo/970g4/xOYHaxTLi4WJ30bwFhTPAyi0g2md4bgyJuhvRcbwnVK2y5lg1wEZdsg21ifvGCkHC3/Atv/NvEcMPWU6VYN1gzB/Romj4O+bUvieW5jMu5247TfEHE2F7W3GBwNFdtajvQWSQ+UUnC5lHA4ACoU0BuKbtiswCpQqkFvBrwacEWPJNeoQwUo8Q8QTxvfcshrau50AfqHZYxv9wTQw8vxxbUCQggh5LexnxfN/AmB/XCuJmnO8mSTLE29fAOS4+HBeQGUIpBNsJUN27Z5rPoW82qpvhxOmhPObSxTunZ/5AkMIYQQQgj5XVBAJ4QQQgj56iypsiULmWfWO8Gcpj22zwbDpIr3CBqb3iPse83mKEBKD76c97Nse/fssB8Sz+V+G7tuLMfbUxVzULuNqhcBPK+YOQU87+qWcU2BJJQvBZtw3qLOt4JSNmATSFuXfCupLS5GWzHUJmh7ItEekO0a9NHNJNPN5lHdYTUWSzeBzTcI4IbiNpYCSKkxtEM4l1C0mxvHJpEYITIe2K1C6xW3V4FdC2qtUDXotfoa5jkVe2r6uG2HWt60/v19G320nNFhvUBH22nIJoQQQr4L3T/Ojt8/Om71L5yeE+6o6M6JVatnzoFA3SvVEwiVka1nDl2PGZqNE3G2QQghhBDy56CATgghhBDylViNc3l7rE/dInQthNvpwCSer6m4zXCuB8INfhIhygZA1FNh75qVo27OFeHjrTLqfzcPIp2eqOBN26VLvGO8rYck2dS3EcS9jP2qT68CeU7Jvu6XVFA86rxcCsp2gVyKr39eZGQfKKM+KVHBRaFSl2Bs8/TnLQ19dhxYPDVKE+JbYvZ2g+RONRG9ZDHd6ywhoKuO3OnFvLZ21iIKsVgfVCtwq9DrDfr/Abf/Ihjc0FO3T+L55AQymiUwyBJYPg18iOfmnTu5L/f3xfPpa2n6JoQQ8neTI6r/cEumKPSnjzpySgVOv+LNfL5jN8CKumKucYD4vFJKzDuWMenL24wmPxUu/3XGmBBCCCHk50ABnRBCCCHkNyMixwauiEoBTiK8Y5Mervc9qbO+xcwNdqv6DRkRxFO0eQjbOV+7LYHuPfo8h/zeCcVZ9zwM9Xly228iC6UiMo9DE2WHzjw/etlFUM4CexOpBZFuX/r69M1hYq7LBXRcNsi2AdsGKehrf5uEOL62QQ23W0Sgm0EVMBOYtmudQ6za8xJuZQCg0Z90c0hEoKdDSqSvL23x0NsVZopNLLotKCaxVIBBtcLMUFWhFYAq6k09TfsrYK/Y36/zlfJWmhumm69Ia/KaGaCPZfqg7T5zseG+rd2mp3tF7m2++3EmhBBCvgL9K2/+knqUwv1PkOfZPu/+BP/LBekTjbYhnV/VHQ5V4HOnGKcifY30SLgDM3UHwzZvz/W1Oo8yvhNCCCGEkF8KBXRCCCGEkN9EMzAeCughnktEmHuUcLOsYY58bjnUjwyBqwq4K9fCdEu8tP3zUVUiKQ32QQi6rc+PRuNJdrquHFtAmxXyqcrWzbK8Xd/HKZA011xlfvQ16JvwnSy2TSxvUeHtmK0MYbytWd/F89xfizXPBbJdPI37NsKrDQY1T88+d9dQFb7GeR+mJep8MgALgOL3SK8jYtZFR5Q9zKPNS+tnRFZtgm0rKEVwKRugN1xvFbAKQLCJYIuIdgGgah5tflPU6ulOtQJ2hadqb4913A3pPm59aE4Oi3F/uTVs+mDYyX1rSJ095elbfXUASH4nuzSuqeIvqEsQQgghnXVOeyaonzqQ/mLM7F3fpbtj1ql7ms7lIn06ffNlcxDTKhRAtg1bKZBtQ4nx0NrmQvvfBs8K6Iw8J4QQQgj5fCigE0IIIYT8Bpow3l7PYd3YC8RmHkk7ibCRvh2LoSwJpf1pqtvm1ybwfNipXBPQF4ZOfid0ZxXT75bJ7Tov/q5yDznzOrhzaplfW7aUtucwikLKSKW+W8Mc4YSw7hdYHCPFRXTLUegl1WOtfIEVgW2jHne4wD5V/HRPbPPOXeaAGJ+I4s5lTRQmNkXbyxb3dAFGUnhDgQGmKFp8e62wm0JrhRhQpQBiPQJdbwq9Ano16NVvTWvrm99aM5aOWXS2O35gQY42LSzOIusRJ+L5QxM1bdiEEELIlyJPY9+lNX/0u735JkqFtnlUz0YESI053FEEevWsPe5wFzMWCuaEEEIIIb8cCuiEEEIIIb+YJp5nAV1iLWnf0AsCaLqdDAvfKlz3UHDLG1J09BINPm3Dfl8WIA/OZesxzaC3CpdHtrxPi0T/BBV9bcuTkeeSr0uLEO+FMNYcv5QeRS7Fc/H3zOhmENki+FxStPoQ0D2tZ7yfItCHVtyOMxGolCk7f494WkOhoqEWsrhfOktbMe6pdJy0e0w8qt02jUh58W4WuOjf7wWDmULMINUt1WICuynsdoPePAy+hNxvVlBMoFWhV3UB/RXz+ubVx6uU0jMfWGvXkXAubQDiuQXa5+vVn55x+DDYNKBt871jP3jTHzoEEEIIId+bPy36Hq4+dEKehvuGs0rvfGVnh8sUTa5SY4rSsk4ZsMHngpODrPTfDFstMLP+8D5wskAIIYQQ8iuhgE4IIYQQ8hvpYnoYyeZgYZsiiOe9LiKWEFl1sZkNu14S1g/SxPftaypIk3PjoGBqq6BkbXKcKtefNMxPFQOzeL9r4xPHPtmWY71+CNq9oiZyby6al8sFZSuelj0OCbkYmycuR0vRbk14j21dSAdGFPphJLtHwvchn4y3yUK73D9iZZSQRUCHYaxtPo6VtvcisIvff6UIZCvYikRzfe1OvcGF8noDqsEMqOIR5fVqsJsBN0VVhZlArbgjyc2g1Tzq/ObeAqLi96jCx0ElNcvWrvUxHFh6rGVT+S7I4w4P9n+mAZu2cEIIIeSX8Jav613ipTy9wjxlWn1Se/n2XNIDABRQq90Jsf02KKXE6+W8AOTm8yIRgapSPCeEEEII+Q1QQCeEEEII+ZUkw1iOQi9FoDaL6K4N2nRsf9mF9xBBk6Y3Bd02TlKy9xOtAnqvZNf4YUW0JqpiCMFoETAyHebqrr1NRD8wGPY3tmwPUX/fsXzYkQq+WEBxHnm+s2AWjJTqbX+I5yji4vllQ9k2lMvmUePSxHOg2IaSBHSVFKEurb54LiGi5z4fdHfeNA0OpoG3MgT0dq0lj4ZiCM4RaZ5EdLkI5EVQwlHgsrmhd4tG1JuXV71BX6+wm6LWqFsBsw24mj/aWp+m45QVMVgu9PdUpe34YoDJInbbLJ535wYdg7MEpK9Cu7Vt90Rys3ShdjvfJnqvur6dbJtOTyM5IYSQT+QXf638lO+tXTdaJik0B0Y7++rGKBjzjrKo7AaYms/3NsO2beGkWKbfCz4PMuACWDWoKqREhp8n5iCf7cdKCCGEEPI3QQGdEEIIIeRXIXAjVw5cjtfq2ayxE60NO+G2C9YGWG1rl7cYZD/InrWgtaoLkig9qbjzMQAgZTrWoj2eRlJgtlae9HYx9HD5FpleLNWdB+us4Qk1QJL6/0xq93YBABdo13Pl4Ob2nC6atItWCuyS6op05p7PHKjbBt0KZCso4mnWLaKL/LIWj96PsxiiLzHsFuPSUqOX4kK6j6WgXgu0Pu5uSN5T3wSGYlcgnDAMMknmXsiAopACiFRIqRCYr33+PwL8E1HvYjDxG0jVYLcKvd6grxV4FeC1ADcDbh6FDoW/V0RIOoaDxyQeW4xVhaZ70szGvZOzG7SLZdaPPWR1vpjGpZXxSg99Ms7E82cs0m2Qj45dRXRCCCGEfE0UbWILYMyFs69jnpX3Y8RGRh1gTDwEfS4uBqhW2GaoRfs8Em1Jn4sC/9aYc7nwbk2QjzlEQfgl1lF9e9Q8vTdA4E6VbbOlitq/toUKPCGEEEL+ZiigE0IIIYT8CsIqJdlolaxZTS/07atANxTdHh1tkoLKLYTdeHdm2DqqtlnDWlTMUaOnTTI/W2qL5SijJJ7nQ00AMY+yaXbHZjS81/fGrm8p2mbV7XcLViKJ5yEqN8eBw3Xl8zHoArm1C7kV4HKJtreIoiagexnbCqwUF4B7xHoT0bc0nsmSKmH5jHGxAshmwGae0jO6pbeD8blHE/8BCBSCmvrtIvq4n+KxAbYBZfNuAeqi+j8FeBE3ukIhakAF7Ga+xvlrPK4GXOGp2LtoHg+NRnXR/ODGlSaip31tqHLxI4PueunXzflDdyiKR6VHgvap8bh9Lk4K2MHrR8+EEEIIOeEN86B0xENH00ckZz+fRg6HSinLXKD7jY45a/b97OnckxOhz6nV10I3g14KRH3JHBSDvVRYjelLxfidgZhGGqDX8DPU0e82nbXsOBuzObE2R2yTaYNBob2PT4ro+ZIclXvk4EgIIYQQ8kWhgE4IIYQQ8gtpArPBXMI1Ce3QDsTj8+Nn45NBIhL312bJPG6fLdHmj6oQ+JrvZtajrN9h/4z6ksUwR5L3COYYlO65kE4mEsFD87adM0ETxvv+eJQN2C7jvF1Ab/vLJFDPHW3ibIqUFgGktCc3iop5FWrhq2CeCl4j7fnRwB1sylFQzSQ6Un2q15sPLC6eb5t4N7cNWykQuUCKokKh1zSi1Xyd82uFvSr0vyvweoO9VthrdfG8iebm/emi9RdN7XqaCvVrNpcQQgghT/AnvsbXNPZ7d9NWLnbqvNHMnStFFRBD8ZxAPpXaBLK5CA6Iz7HS0jgtMZTG7sln0ACzCjWDoEQdo4350Ru8Tj9Xh0ZCCCGEkB8KBXRCCCGEkI9wz3DUglnNQte1tN62YCeg98iVvalvMsS1cJM50OUTGnyn/HKSHsnzICqlp7cUc+cBEWhLW57rPY2iXyPFD8TzXsEinidhfEQKNWE71VWWa9EF87EGpUegb0C5jLJtnfJI028p2n0W8HMbUxi+INa1l0ib3op77I+pjqGxJb34ehl3Y7G8M4v2we8dJEcGEchmkOI+AJu0h2CLMZPrDTXygooarBpwVdi1Ql8r7PUGvVbYtfZ1znvKUjtu1457u7M19wmRe729djt2h1t+s5z3yU8YhXZCCCHkr6HN69+15vsI+o5U7xhzHTWgKKwIrBSI2IhyF/P07uJp3osUaFV3sjR0Eb0L6SWd8zbOo1AUAArPLoR+eumul7MPaJpZnf2UeOswnE7WCCGEEEK+BhTQCSGEEEJ+A0MbDzF9JwA/OHDZZkkHvksXZR8VvqvILtvvq5XHUTYhRotBpCypNJ+znIlIRGkvUd355RpJ3sTsFubtC4z3bRKp1kWawRBdWJcmoIsnQreyAZcUWV68bBOmJb22JsyvAnqkKG/nFGni/ihiKD0a2qB+D5jccTI4G7FxgJQC2XyQLNphAjfKQuMZwK2l7rSefV1gMKswVU/Fry7u282g1+rH3BR20x55Lkk89/SfLTvAWVsPm+2crSN+VP4oSL/fkPfOL6OxOwH9bmuP20EIIYSQH8vsFDtvv0s+JAvnsmwrba7mkei6AW2iYS1b0Qa0JYZkM5QC6MXL+fyy+FxTDaKKWgx6jfNUF9FjgaPeAGuveztPsvOk3YQQQgghPxUK6IQQQgghn8kToranEbdustrZnlbj27Km4mnU9+m55UGBdX8qZ0u5LChmYT76tA/kdatgF6LFBdmcT9K7d69D0jXwEUWOKerHekRMalwr3wVzeAR5KT3deosA72L6dFyLDA/Tovj65mMd81bchX0TGW2U0QbrZTWJ+a2OMo2jwWAmvg6mRV73dZ35O5dr6PA230elQEpJsjhQxCBFUYpG6k8DtEJvFaiKWq3r/bgpYOrjrerrn1eDVRfVrVqPOM/iOZpuvh1d4slroL88FLEhOHYmWZ5Tdc19oRuDT4LMp/asn7X7BzwHjcuEEELIJ/F1vlTPxPJTEV3ExW9g+H8e6dOSHjAXyjWVKwbZFCqbr49e4NmQNkEx3zYyHBVsN4XcCvBaYdAxBdfmVqkQKXECG/Ou0aPjOdgzzJMxQgghhJBvBQV0QgghhJCPcBDx+mhp87wM9rlYvm5fXq+GqKMA8rvteCSm39kuB2LmiXFsPzwt1iWEb0NfF35/etm9FpR5gJtYvVaQRPAWCS6lwLaLp2IXcWNhTtVeIoI86pUugg9RvWcPSOewJJZPbcqR5YCL2FOXvN82RZdLiN8t52bcLNPa6es4pSj8k+GzYqj9uhlEFCiKspkL6aIumusN9nqFXRV21SGIV0NfW9PQBfe2dmfLCj9Fi+db+a7hVEbBVUBffAcmjsTz93DPKPyrDL6fKdATQggh5I+wRqKfi+ezw2Q6AGPClMunpzTf0ZhY66aQi0FRIFuBFACboBTxNdKLQLaCUgTbzYCbQjZAisFeY05ZW92eaSjPv8Qk1l2Pc74DX95o7s/o9/vqJIQQQgj5nVBAJ4QQQgj5LHpw8bly3VK4x5tjQ9s98fxoewrk3QuNd8KV7ymuu+35JNh7CZw5AkgIwlOCSElnasncD849CdItalt25x5p3eM863FFRur2ywaUlyFwlwJrqdb7+pIYwnheAz212/qQ+Pma8D6jkzaUAAAgAElEQVSizdv5U8+khNKc2t7/OxoDGc4KAley8/rla02SbwmbzuWvQg03hYlHnov4kODm5U0rtN5grwr7r0WaRw2aKjuNJgd6OFXT65+NPLLlse47ev9mEf1OFPvZ9mfrpjGYEEII+TU8cE79k9/BT62B3uawsGXKbDGp3M/9+3S2Jt9VBVCaT6MBUiFiKM3xcvNIdFxiAroJICGyh8OkiMKK+Zromh5piikwFBu+kW8hT513weypf4QQQgghXx0K6IQQQggh72XRpB9FnmfMPpAOEZjF8iykd8FysV7J0tgdR9t3oc5vaFx7aS4u575Kiz63Yy12OrVMzbBYq1z6+9xEScck8VyKGxvLBpQttslIxy4SAd+SImVkOn9P454U8RGtntqc2zC1CXABezS6rXM+1TF3fm7Ler7upDCPa+xEs4K2iP8x2hZG1MhmL/Cs+OpLbhb1LO2oAKocW077vbb01yKtfon7O0eV5yudPyxt35lwnq/vvfInvh2H6VE/QxSn8ZcQQgj5GjzrrPflkIjzHh04npHLmFO1ddIrwolTUSWEeDEIFIKCshV33C0byibAywZBLCdUFLiYZxi6eV19OqnttR225W5vJAvo0ma7Rx36pteLEEIIIX8TFNAJIYQQQt6LzGLdvchzYESo9GyN7zUc3Yvk6GLmkWD+pHie27VTI9eyJ51YDGPNfDYykSfx/CDwekRwJxOeRIp1SeJ1SX3tx6TtRVIEelOMtx4J5OtGloNhmgX0OcJcTtq8uyGGgB37Wz/yGvD7utYxR+pro0XbHyjOMp69CzYO6cJ6M9LaMMqqr3kOBaQCVgVQAbS4oVXGaUdUvExjZc1BwHQYePVAwbbp5jiO9s7bVieMtjb8Uq/k487Od1bmLTw6fvoMnRxDwzEhhBAycTaX9vnXnS/OWYP+ekwOgWsjveGnvyIMMJVIQpSObZHjt1bIH2YFpgar6qncXwRWNmgBcNnGtEQVcoOvmX6bmyN5SZ5nyD878utn6vjK140QQgghfzUU0AkhhBBC3oGI+HqDODb25XSOk3AOfEw8P20Q9oLmGrF8euC9Co/KnYnmYQFrqShzZDJiHKSZCA/OOwnnsSGlbx/itaR+hkDeq0wCehPMBZ6mvWyAbENMF/R10HdC/lpfF6sPjJ69bIoIb2MhKfbGENFB7bokIX4ajkVFPsse0AzJY02AfX29Xelc1oy0BqsGVQVuBrtV6FVhV7hwDqCgQFCgTfNv4nmOhILFNc3Waxlli3iE01H3+rgcbDvjo9HjNNISQggh34qusR5NW5fpx9f8nj+f6FiforV59FzKAEjVmLcKTNJ8rzkrXuER6ZsB1wpc3EnUNsHNCsqGnvlISoG8wOd6RSEt/VCBO5be3A+yafJTc9c52yKcm+TLcBJ9fsSXvW6EEEII+ZuhgE4IIYQQ8oAjgfzeWudDMD8Qzj+9ccvzbsfhzuPtlrcfqsmYIp9zZHB+7iL6vXavYnB7LAJ5aadu1sVYyzxHmk/p2pOgLWVEoPdo9BDQIT0yXGQcN5n6sgNAe20jenuI6ouILmn7keA+LKVjSUxgEugtWy17/9tgLMJ5b0Mzvw7DqiWLp+vZfg6zEM+hqGawawWuinpVaIVHoZuEgL6FvVSH4XRdgsCWNh1lJjiLLj8qsxpnjwy4B8dNAV73zn+0/cEt+2kwEp0QQgh5ijbX7hHo63f1+sV/9P5LkIXxRYWOeV53R8w6eprf9Ckm2pJDNtYub/PJG3zufDV/3gxab9AXQykyptAC2BbHFPi66ZsBG2DV69GIcBcLQb01JC/tM81jp96evFmOzfuPri0hhBBCyB+EAjohhBBCyB2OxXMZol7XC1Mkya8Wzg1JWM7PYcU6SjG+4xlRfRXS1/OlDauILotVrFsBD9qXyzfBu4npUwQ44BHkqZ+9/Cqkp3pjfXMUicwBpdcpu7GKiPEpOrxdb9tbBFOk+S4S/Wx8DzIDyG79ch3G0XzBk6ifL/cQ7Ecd7d8wsIYFNARwg0JNYaqw1wq7VthNoVUhWqI7BaWIG1Fb20wx1iFYuntk/DQMh4o1dfv6+mjoPiI4f6S+3yWoE0IIIeQuvvrNkWNiLhTPX1F4nRwwD3aHc0CeLh/NjSzm2RKFW1Q5gHl+XuJxA6DVMw1tBXKBi+QFMKkwMcjmYrtcBFIFUMBu5kvwVKBcN5iKzxc1+nF0zqlD7xkkQgghhJCvBQV0QgghhJADsnD+KNI8v/6l0eZv5cGa7J3e1iPB/KSOs0hjkWW8InLIFmPbJCJn8Rt7QTwL6JCxhrkAUgQ90lzEU7W3brTzlLShYO6m2GSftN4+m9rYU2bmoKEucMtcvnMQKdX7kXdZRB1FdLhoCN/rApTJa6L3HxFJn8OB2mWJxobYXeJMuelWAVODVnNjaUSfmxokRO8RGN/qSwOG5fXDfXIsoh8ddzR2udDuwqWSPWJt2fGsUP/ARn94zEfKEEIIIV+U/p16lF3mF5/zYAeiMfE+tj8b5fwVOBKfZXm/c/ZLGw0ubh91qjlXttTuAKwasFXgHwNUYBcAm8GKupAeyZ1KEYgVn/+pwW4KXIGCDXZDLOej87I8U7vTHG+dL3+l8SeEEEIIeRIK6IQQQgghdzg14JlBj8TEIwPRXk/+fEPSlAv8XRV8wvmbZj2L6JOjQT5VFs9LE7fLeL8Tz9HXL5cS0TelAFuI54Jx3GhMEuxDBG+pyEXGct65L93g1xRqmzPS74aqied31d/FuWBYFnu6dtF4l3Jm5nM0J4SuoQtKiPe+lrtO451FdB9SiZAjA7T0es2K5+msGA/1TQV+nyfZvfdPZIjz07ilzTKKn9/yJzbgdsa7H5WHn6Pc5vd96O59MmgPJoQQQn4XTyqx30mwPYvgXraJSMyvfJK1819Fmhe2+Z/FrFLdYVJMw0kS0IhEx4ZI9Q5gK/5AgagBVYD/AKmbv0dM2cxCwO8nbo3059/oaEEIIYQQ8iuhgE4IIYQQsnAqmidyQO5TheXg9UeYztvCTdJrAHmt7WMdMW3MCrEc7M/beuQ1hkDd+xVC9dreLKBmQ1szvDXhOz+3c7UU7BKCuRSYFL9O23yclOXc05roKSpZpkan/uQ+IpU5C5FOgv1Bn3O9IgUiG2BNkjaYhVherD+LeBT6qANu7azjhltvJ3+WFMteYuvm9S5RTR5VXvz8Vbpo3h892DwJ+tiff2ektqlYb6DZMo5rmQPfAzG/9Br9Guc4qGNpAianDUk73s5nfWQ7+dZbby9CCCFP88x87VfwOyOxvwK/pb/9q9qWaeXRBNZ207f5oBM+2A0RefNYTNH766Hr/AkY/VjmUXn+Zkfzn7XfqYy0OV7b1aZ1l1HG4L6Vm8HnpFu0XQF7CQdNtZ7Wvc8bjzxQRYYTaO7X2uejtq/zwb/ro0YIIYSQLwYFdEIIIYT8PI6MSCfl5L3S2LPi+VEbPsMYZEmRntKdpx6ltcXnU94LB479cXxeI7wZMnUSm1N9grFM+Crwt/Fqa5a3AOil7VPkedn3y7YCbD6FVbS6SqRyH2J5G4Upcnw639rnsS76HGg93njkTgUgHvGN4s/mUfFjxfFmmYQbEMUgxVDsAkGJzAUGww3ADSjVy2zwgPfI1K4Wq5irt0+gYY8c11WBWVBGROJHSFH3GygVt6IQVYgCIuZG2CrALR5X+LOW3vwhnxvcWppOFdFNZwI4LI2/Le20ufj0OTQ32rZ/phqOBs8z23M//oH7dPvtkaGfRmJCCPkefIZu/7f+zb8npE67VgX55CA5eH0kpIef4rvHvWVaelJEl1QeuOOEcDSPwvK+ACg698/2xX3OtszRzVOwF7jTpF3NHTLVfH30C4AXABWwm6JeDHKBZ3oSAJvh9j8Ge4mTVhfk7RXAqx+Hm/V2SmRv6hnnq0LWTFStfY/E9KOxIIQQQgj5jVBAJ4QQQsjP4sjwchrB8NgC+rWjjObIWkmbRriKpH1JTH/UrSSeSxLivZ6wTE7Dl86XVfR+siyMx5rlrU1N5W3bQhTvwnnslyKwvv75geheUvnc795dm1O8L/2dng92NYNlq9kDbApMmgNBK9jGwobWLamCXpE/SwFkA8ombrRsTgAmPdu61TBmahOlrQv2qYOYL+wYAzUBVGFqvr55NcjN3OhZLaKK4AbVZLN2Tf7IUntwA51FQ63G4dX/YjmupSldSn0un1Xte+o5+eytkZRf+28PIYT85bz3e2SNyH3v8d+RND16pv9tCil5SZuT8Zvme/ec0979/f9koz9S/bNnz+P4TNU2pqEGuGPmDe5rmU5gpjAV9/0sEs6pBmwxV5XiOn51x0q1/RJHLQ9S3pbne5Nj5bPcG/Yv9nl46DBBCCGEkG8FBXRCCCGE/B18ss3rSxlGjgThZi2zk/1njgatvinNehOmZZSTvQVTEKHTaGsz5ghlSxHoLqA3ndsknacIpJSImi5DvI81z60ITMrcJvF6h9AvOA2yX8civ3+UCratiW7NUUCmRAA7mXmpzqAQKCCeqt3XL98gF0HZDLKJi+gh8luscdn8FUwFFmn5LYyUhyyRPgYXz2HVo44MsGukhK8K3Ko/6z7Ke5yj9bnVKuNc96KmDsfxfhkzSyK6HYv1hBBCyN/IG4TTL8s9gfuAaRrwkfn8J4zds/P/Npf5Gr8XwunSYl4naX6uyAmG4BmSALQES8XnpmXz7EvNv1XNoKjQTaFbiPLw+nrWIPN6xmTZhpC/OFWu083Oo2v26H74CsNPCCGEkG8LBXRCCCGEfG+ODCf3DG1ZJDX7UdrcritN5zTzfluyTk3jIiMKvG1JwrlFVLf144ob31Kkt9PzssdpD8RVYKxbHseLuDDuQnm0oxRIWOlyBLpIRHy3pN9NOM9rpmehf+WegH6+aRmriC5JjgQmLd4mRZeLj6NFGRGD4gaIr3MOCcNkKT3t5Tj3HF5krWElUsUftnGxQsa64waDVQVqTWk7DXYzF8+7gI5IbzpHWe0+IzsvgTMhfz90u+a1Gu5EtP+gj+gxP76DhBDytfiwqPlREfcjfPPvjGUafj4eR/38DGfYdZJ3L7X6btPbBr87BP4qnozmtlDK20JDvfzR6jghqluJef5mwIvP06W0eaX4OukXX0Jp28wdPM373LId4RZ11bn+NlXPIvquC58xbN/8s0IIIYSQPw8FdEIIIYT8PTy7HuG34MSy1KyRTTjfiZg9LH3elqLAJUV229Ea6ltEYqdmSP9/WPMEcmyXbHU3MbpgCOB9jfTSBeMukiPWHk9p2ofQP9rfA6VbkHTuwEcNmSGUS3cmsFPxfDx8zLVoOAO4gO6PNp6t7hF5bhqXsEfqNEeBXax7FMjbR3iPGVwgf20COoBrCOrXJqLrnL59lyP1yc/KOz5SPbXotC1X9J0/p4QQQsgn8hMi0IOdmP4D+Rq/NaZFf8bPgFVAb46UfTpvsA2warDNYEWgLTsUANsEcvHsU0UiU1RVmCrqrUJvCvznx/ffC8l5MvuM9lnsNH9GF9yn3nyFISWEEELIXwEFdEIIIYR8b6YQhvvlJAvoZpFI8BtbYZaI8cOe5OjzPFbtfU6BXjySROAp1FuU806ubZna82kgERM+Isu7cC0yy7DZaraugV5cnLeS3qOMKPiIQvdq9sJ5Fs/34yH9lPc4v51SVLZEDwWwZm0Umx8l91eAUj2iZx3HGB81+HrkwBDRmw7eDYhH8U+2GNTTge3i3RR4tYg0txDQW/p2G49eh2C6xkdjkgfqvXr3vSjz5gDwC4O3viJfw9hOCCFfnz/29/Kjp/3o95oA8o5KvuL3S0tzfhiZfq+5i5/frujpscuON/oJ/kmemJ7uC5/1L4voEXWOgiGgNzbfb5tBiwHFfKmhWI6pFEAuBUUKirjzZ73piLy/YSSoimmmpGlz8zs1ATQ57p7f3uNemRxk1363On7ndZU0S//mPzEJIYQQ4lBAJ4QQQsjPJYm0k3ge236KZWP0bQkg7l1cRHRgiJ/t2EiZLhHtLaW0g8PganO9ZbVstfW5V8OXTK9FFgE4C+Bt7e8iS1S6P2kqP13HSZAfzVya9zkkC+8QdnWJOIentuzvozXFAKlJ5G/jFc4G2sRzN0DmYHI/34P7NRtJmzE0KhQ1lBtgN4Opwm5JPNcaZe8M0r2Py87D4mD/Mx+3Zb9ly+hPE9F/xp8eQsh35rP+rvLv2dtp34vvPfaH0/09P3uq/l2n/m2e9dlzoTzGbd6YHVwB9DRBGtPEzdwZ9GKAFEAKtgJg898SqG2dc/P6NsQ66Llu9Oj38LmNhFS+bJT1ZZ4Q3qWrKn7UkQf9+9UcNeu73m+EEEII6VBAJ4QQQsj3JgvBtohtq2gO9PUIJ1H4m7K31RyFmWQDmCzjlCK3l2qsH5tE9x4GfWLBy4axSUiXUV8+X7eaYU7hLgCkeIaAJqrHcYLZGSJfxeZA8FCn/chl341VE8ptiOawRUCPbaJAaRZDr8iQrcQH4vlxD47b1FMGmIvmBsAUpgap8VDzVJxqUIUbJlvKzl1fc335tKnNZ1Ho6/tnxfMjEf27i+dP3m9fMTKQEPJzWNdizn/S38U653rz8e887qfwl/Z//1X3hHPgZ4voR6dez/Psff07r+MaVY7z7uyQg9e7PnYPz7mycvBZrz6v1U184qoAxGB2g7b11gUuoP/TJujm0ec1TtEdPX0Ku0vf3ju1NtTSWDy4AJ/trPKorqOfYoQQQgj5tlBAJ4QQQsjPYTEOr8bihqfHtp9v3MiRF5OoLfN7hGNBfw03grX3XTSXEYlydrLV8NXO16sYongqkI5L+2UWz3sdd7r78JJ+VDxfnQmKhYjeotAtIuaTk8KubLooli6TwaP4+2Asdex6uFhSxXr2eIR43lK2iyqk2iSYi8b5UuR5uCaMFJqZ6dRzH6YC94T0vO1RuZ/++cz8TX0lhBDyd3LwXZedIE/5VY50b633TFD9Hd/hWQj+iCh8MJ+WafIuWNdLFzMXu1uREMChBlSF3gDbNOaxCtPqNRQALwWlbICqT3SrO5la9XqaP7P2k7XzNGfZR4OCefx3jq54//X5XdeWEEIIIV8WCuiEEEII+VGcieaNHuX57Q0iFkL3o1Uwm7A9orYBeJr0LooDsEjt3beJr+EdKcYn8R2xjvaRSO5v5u2LeC9SdsdaKzOtiV6SGC/juQc/zxaz3SX9FQbXJpIDrkAXAxDPBbHOYxqbHBkjdmwItB40fnJf2vI4qsBHoLSKwqhpqm6svKkfqtKfJRwizGQ/ej3df/q83BO415CyM9H8bN9PheNACPnDPJoXfaDiD1bwFzgyHvFZff5VovKvZhU7+5xuvqXWFYd2x6+RvmeRv+v7XzU3PDrfZ9/fua9vEdGPROW0+Wxu2gtpei0Ya6VX+FwYBlNBjTlwT860AaUUlJcCVIE1wb0a7KbQVs+UeanNoaODZUylrf8nvqxRc+bMQvd6f/3Kz8kjpw87//vLrEOEEELI94ACOiGEEEK+L28wigzh/KcI6G8gWchEQjjFoomqwbSGYUwAK/7YooKeWl08qnk1WLbXU7S4jNTsbVuRvs66YZTP77uYXtCP7Wnbs4FsMpamDWdG1c+gp2ZPYdzFgKJugGzR58k3wQfa13+XItPAt/3WFnhfo7mnq6THfYnTeTNcPLeqsKounGv1SB8VmLoBc0S67+2LNr164oNCI+DH4PARQv4U31WEJT+DNnU7EdF/O59x7qOo5Y9+z4ev5pSg6F5bD87Xm7UTz9OGmGSvc0Kr8WJL7dBUoFqsjY5YCz1+NhTgsgkucoGGeH6rgFWFXgW4mYvwTYzXfNZ4ljK3qDvQLgMhQM+SdfRb4bN5ol6Z5vWEEEII+Y5QQCeEEELItyMbe56xS+zE8x9IF6D3e1qBLp5n+5shApaRNmpY6gSAFmBr4dEtHAjzc45Sz+L50faUIrLLty0IrVtNx/NobTrCpuSSaPHTS9LJN1thHxaXCHZpedLjIZsL6VIASetENkNljyxvxr1ImW4RLW4tKrzvSw4K7SqJhTMCcghOvI+8ASGee9r2EM9rDSHdUGs7HyLy3KbRTRX2po4Trh4BuZOjHci7P/pxOzJCE0IIeYpHkedDUPtDiuX6XUbexI+LYH3Gv/Wjgujq9PkrWLXd/PyZ9ae3u/3LjuaXelxdc/oM74WzNcUlZuUm7qgZk3ercOfR9rwBtrkPrmw+M9fLFRCDbvDI8easu8HnrTfMInpaG93PvXrGvoGP3DOPjn1Ur42/wz/u80oIIYT8JVBAJ4QQQsiXYTX23jM2yCTKHpedtv0FhotT+1yI2SIy2camlIhNxZaoqaUBh3lo8zSWqeoWLdTE8iaYh9hrKS37pMfurE5ZNI/6bIjwI1H9QTuiT7N4fjQQ+2E53H5ysOX1zou6eF4UIgpsnp5deoS6X42uD+QHPALcuoHQRmr1ydmj5oOAckG/ygY0oV26+A4Xzmt18fzWxPMKqyGc62iDi+ipv+3cU/dtaTsw1kxPFwB50yd+1v6QrkMIIT8e/n0lX5F1CvHZ9+kTzpKHHEx5Dsv8KvE8n3/2In2a3Uy6O4a2hx3XV5oDrvicUwWiPg82hBNuW8boApi6iK4KABWy3WAQmAhsQwjnAryIT3WreTT61eK9P860/F0bn7k2n82zvzN+/s9PQggh5EdDAZ0QQgghX4rsqS8iO2FcQgiOd4ci6N8QcX7IHWPOblcWUtfA76OyoknQtin1oyxrl0vx9xbrs1u6SK71GszUj7Ohxw77V7vu0o1PBr8fuvif22fmTbPsVHEckb/eL0di+erI0d6r6IicaYbGcDDw9OxZQHejolh3T+gCtlk4KFiJzpUxlq3lPR+8dgOsQeKBNihoEeUC62tLejp+jfc1HgiRfhzXBkhbO5PaP8aulc+p/1dL5TLS7/3YnRlEyV8DI7UI+Z1QQX/v+vDGL6j3czTkzw7nI/H6o0T9h/dFm2veO/2vjDzPJ3rHbSttLhnTVJMHTZPljcGXAILFXNx6sqlNRv+tRjMVsM3PcAN8/lwMtklEpxeIlIg4F+A1lkS6NufR1N/eConsSZFzSlKHctn8/iPX4JlxfnhDRDHObwghhJBvCQV0QgghhHxJmnh+JKKPMv7fbv+9dc7/VntxS9/ejE1Vmy7quzFHi89RxREhHYJx049HVHtzaihwFVkiWiXZrpIxy6yJtE05j7pj3XPrB9hYD9NGXfkSWn7RDZupxF2ngih9Ipiv73vWgyacr6nci8Ua6GncZqU/DIsR8tNyu0cUeEEbyzbOJY5TLx5p+rPvA3I6do3U7XU8rEWkKzwdfxux6TNiycZoe8eTfrK/9cPzC6D9lBBCyN9GnsQ9+z34u6KLT8TzLnzKcIo8O/xURAc+93v/0ZicneuoPUd1HFwnM/gcU9P0VmKt820cpyGia/S/TUmxwS3QmwGboGyCsl3c+bVKzKFrJFi6hWAfzqNZRJcTEf2LwehzQggh5GdAAZ0QQgghf47FaNOik/flhiw6RaAnMXaXOvqe8ehH4Nat8Q/x3tODT6gLo1oUQHE700vpY225yrYhVyHpAYGFSC4iblAsSTjP1wbjkd+P69kE6XGcl03ibkT8tDJmtjNg9gh2WeoLQX6kl0cLoonyFpts39/RzHRcBfCKtj78iHF3Qdw0VSPRDxsdL7cCUYGpeVpLQ6TJv8FQ0ri27ivme/sKQSxJ37arWzLFDFLNo8+rC/Wm4fiAgu4tYckboY/zMA6PqPh+tXr758/mgdPKVOe8+02G76/0Gf1oW46O/0r9+2IwMouQd7B6lgWnUdIySszv33vy3YmfK1rsj/89/COR5H/SF82W59/dlnWu9UjEXd+/R4Avy/uzPve5l00TwObuaTmf+L1xOxLPWzvWNr/19nvmep18JPXgN9f0orV3/XsiMV8viHmqzxH7tLJN/8OB1CxlStKo49Ya4c9SDbIBclEUKb7q0wbYP4IqAtsEejXYFR6ZXtvFsVkrX+cMbdzTFHa6/nfG+2hon5qSnFwTM8BEMbI3PWgEpz+EEELIl4QCOiGEEEJ+K1ljBaTbVgCcWyp6amuZBHQzT1W9468wQoRsbi062i1EBQKFDaNwE19VYVZQVYGteCRIU5Mn4TNFc3Qhvl20FmpSZhG9FE/bnjCzFhzd30dDIdu4htLWS29NyUJszzcJ9Mhv85CUbO+z1pUumvsxUiIUpoz297Uek2g+HAhmMaGPYR+GG4D/G+3ymHGIFX+rIaJ3BXw4dwiATV9Q6gaNqHDV6us+hlVRi6BI6anv27j1qHBTSBhyS7vuIdKbGVAjjbtqvG6di9AgTb3NxsXe/3ZSQQ8xOiz7pHieizXHhrbjm31G360xtJvzEyunyEwI6YSP1IeE0Pce2527PnDePykm/yk+6Lcw5izvPHj9br7Dmsn8w98+95zrjgTzo+3r/mcdNo7E4VNs/+7o2LWN6/xnFad/19f3kYj+SPTPz0jXvuVoF8Scvynh7RBLc+t40SfmGGUNfWUiuQLyUoEbIBegXDYv/iKoBdBNoBfz6Wu1mCuftPmoz+0+F3hGrDV9+sE86mhJJ8vz1bPzrYetU+SHF/1obvw7bxZCCCGE3IMCOiGEEEK+DidrUcpi1uiR03+1kOQxMVloBWQ21JwaSe2BJQ2ndpth0mlnktC1bYnYGbrqUcsB9Aj26ZQ55+FJFM10jrOmJvvdrpqjru8WVz+qVeB5KmM99vbPBKLpRBod1yage4/1egNuBlUNEV3hoeKt+gIVHY22Zrxz8Rxoq6B7W6QP8niYGqylbleNtliEHr3B2t4cJh5FnZ/uO6jz3tIKX5mP6v0f/DvFdTMJIYRMvFd9/9O63Nn5nxF3H5X73RwJqK1/+bmR37/nGsjB4W+p58lxP/4pliO/F0X5sA7p00jN65SHlmO/ZbgAACAASURBVK4A7Kp9HqtW3ek1FlMvIsBWoC8K/AtfIUpC5I4psakBFRjrGqXGxLn778eYT0ubVyPqisxVrZyFQ2oXztvU+SMOEGfX/G59nO8RQgghXwUK6IQQQgj5eqSU7f48vyeNI+tcfr5z2HroifMC1iJLOUOLdg9LUBf7llZIMmqlFkqvJe+/15YkBDer2Lp7fZ3bPEXJjF7sjj09fenLxOcE+pICcszMhesmXkckur4CVl1Ah2mPFJ/aIViyMgAjlFz39rfuRZDOpzoi0bu4LuiR6HMNx+P4Fs48JdZ+PPsBPovw+lN8xI5JGygh5G/jT//N/lt4zzg/+C5+Yir4/nM/Ov9HnAI+eu73nnN9PhPPD4rNLx6crjRRenaoG88H9R0Jtkd1y/p+mecL0jz/oPLpPP47YGQM822aBek+VwbM3KFUDChbQTGPRBcRlM07rqrABk/1HksSmRr0ptCbeXr4Gg1t54WM6W370WOItdPHWPoSVMn512L+fCZ2H81Pp6xTd1jrOHNo4LyREEII+VJQQCeEEELI12JZ7xxANyasEZiMyASyNcasCdpvOPTu/ia+omctH7adptyWdMZ5L+TgBLKUadtktUxlUTv2x7HtzDsh/Mg4mA1jp0bbdcdiidTRlsmHIAnP1kTsFr1SFVYV2qLHzWB183Ucc9S46uppkJoxC/DjQoxyI+V9Lo9ZvD+6zm/+6MT1WT9z+f0zInp7vmfk/Uqsbf0TTeDfOUIIIZmPiM0f+EoRIKXr/oZ89Ov0TCi3vOP4uOyr2IKyH16PPMVNAvoe2+u3a5Ns2X50urP6WwT5VNF0+qnuJp5L8cWOrM3jsczFI+mSXQE19T4UjLIAygsg/0gI6AKYwG4ArgUoFdoU+Wp99SEfWr9Rtz7tjrXsD35utN9O1n5clDx4Nl/vacBS56f7AfvxB/b3TxtbQgghhHxZKKATQggh5M8huxf+rq15vqyZ7MYNGhoylv97k0FzH0pxbv6zboiao5U9lMTflalOOxLP2yFdMLdYt7xE/U0kX5uWxHOBH3Na93Kew/5EkSXTQXMEsDaea8pxsYiqmVoGWKShDNHaao1I8+pp2lsqd1WYliSK447AbXME+W5MDsrb8pzbrifH5fHAyVh14+uJeL4edCbYf1eDOyGEEPJFeDpK/LSC95/DPnj+U0fGZ6f2H51LfOQnxJGvpUhMUWUutCvrJx7ByjaL6GennATpewK6N2j8Jlja/US/+5z4wKnUporvzEnTT5Gecr0UbKUdZ1Azn5K26m7o/pkW0eZ9Pl+A8o+gbAVbERTZIFpgFbj9VwFBOKoaeqWhwhsiY1Sa63c/gO4T6hsU6fdlj04XmCoMdS+KH7Fzqjgfo6dFdkIIIYT8cSigE0IIIeT3EQYRCxHSsmXhwChkWaCLyN5pO+5ES/xF+Fp9B2LxG4ZGuiUvV2z9oWaQZqCawrBbURe5757y0bWaxHM5br/YasKb653qyCWTpbIfOK0iD4kYFGn3mgEjnCUMf5Lu2mZQVIOklOlWDaY1omEiXXsznsYhY23zvgHT1TsSwuVEBV8F7gOjW+/nqtcfGe1O6pja9h52F+4xT9p9Cfla/CmB5zN4b9v/dLs/yne+ZuSv4pHo+riC9x/+0e/kU23wXsXrPMXS62dYy3/W57UrsrJz7j37bfJWJ+C87rjqY0/Itu743Eh4WvKH5zJI6sucBSwdvzsHRrkmSrelg5IDQJvXFxhgmqaENtdxS/UXoBaDwbM1aYkAdRSUTWD/CC64QItCLwpc43dKjfk4JPxHzR17JTmBlNS9aFMfwObcWzB+E0ibu58M4CPx/J2ODYQQQgj5s1BAJ4QQQsjHedaIJRKGC39+NowlJe0mO9xKMxl1spHwdIyH0NzW8e4a65SWO8bekuForTMMiJORbT3tGp1z1qpWzVp8sq8166/0Y/ILEYwUoz0SPovnYbVq7e5bQjxv/VTFLKAjDHKBhsGtWqyZaBFxHlHn7XUTw4tCxNL5Un0nkeO53NOfgcnOOfqXRiEVsbTRIKmr42N3Lsz/Ur6Cb8yZofhZPmPMzs7/g/4k7tZc/e6d+4gI/afv+z99/j/Jd+z7V2zzvTTQpPOh0fjgUO406HVa9+T+t+L+l3uHzWned9eBb9+WqfJ7x3+C48HjHTKE9XtVrbvvibJo09B9oaP1y4/Ee8VBivelLSJDRPftywHPjF+fLhrMfLbZZ6HpZippOq6mY16/TnUrgBK5rjZFMQFEUUSAi6Bgg4lCNgGuAt0UuGmsi+5z8+6rGuc0WR0NbO5rOOqKFCCE++xYcHdOdiiet5m4jf+PxPR1+2c7fBBCCCHkXVBAJ4QQQsjv4SQ1oKR9PcLc34xCZ2muyTGr8SaJzRNJPM8y8hBt4WOvBkARixku9WcxGgdGoWT9kwPLknl0R67vPCijqbvWGp9OI2NTRMKbrQbDdG7J2zD6bR6JDlOYacvrmBwJbB6Xlmq92tjWhPX2uvWzC/8G5C7ndczz0KVmeqvyevP587HfdDR043StL/nYB9bct3z+flpUzVcUqAghhJD3ME/B7hY7Srn+rb/eP9L4dW6zeiT2+Z0czxt6Fq03tOfB/n7qB/OUtia5HbUhNW8V0U9qm18eZK8y84j5AheeTa15T7hjaxlifykXoLQpqcVa6DqWHroCqIAWg20VWgxFLJb7KpAtIsVfBHYT1AroTV18vwL1P4zsWa2J0Yb2+0hUFsdSg+oNBZbGze5Pb/NPnEUIt6PteShteU0IIYSQLwMFdEIIIYS8n0fC0iqWj8X8TssAwBSVOz0v9fzVPAiN3Ync67FNPF+E2iMdta8vmEXytc7FyWHRyXvEkUS0fG/DfJzM/83rLnbxfKjPuz7sFijPt5H3Q2SUGy2JfaYp/WSKPu+POKinbA/xXNMY9efRJ4EfY2Jt+fepzz3qPaXOlIjSaSik2xNHlPj82ZhCidI4LJdjJjmuTH4FOfL+GX6q8e9P/bl5NI4/YLzv/i3/G//Mf+c+f+e2f5S/ue93+QF/pH4FH71fDhzu3n3uZ6eRadv84m00bXmNcv4Uv7tffZsdiZ9HYrhYmorNIzhl+PnI+ZePli2Fds7KyYm5icEfEdEn52dJ8/jmn6kKFIlpsqWsUIi06IJyKS6gb/6sglguyue6KiGihxCOAlgX0RXbZUMpgGwbSok6/hGgAlKBelPgvzi+LuNVAEjqY/vd0VPd+7k9Wj397jgYs+lS7Mqk+tcPlM1FzvZ/1nIAhBBCCHkfFNAJIYQQ8gHuiR+yez/MZHeO3onmO+sQwRNm6R7pkV97tEeLKBoGMrfanBpjsphqMovpXYxuYusSmSKxLT/33I3D4CQltkMAk5GGHVgsjvFQ631qx/R2NLF+tVRG+71em+1UU4R5iOeatgEhmqfxaKnas4NBF9mbg0B7CKyJ89M5W/NmwX1kxZ+tadKu23R8um5HaVEtX5XWJ2Aeo0G2hX4aq4FwNQT/1M/3R4SSR+OyGl/P9n9HHvgHEUIIeQd3veneUMef4it9LxwJ2sv23XIkz3ynr/W9oS3NHXKdzzeBeT3o7RrsEw1rbVHrkeX5vmvp6EU0UrCbR5HDfwaoFGzmbbYSv0/EoG1JpRsAMdRaYZtBL4qyNUEe2C6+Pnp5Md8PhV49FTsqemS7z4YjNF0AbOJR6Spjjty6037mHM3L1h9k0xBFxw3jt8kbRHQ5SgFBCCGEkN8KBXRCCCGEPM1+ndq+pxVYD7j73pI8uF93Oz/P1eSyjEZ/hvMxsiWv4P21h5Nw3aI0JAnZ4kauXBzSXmCI+Ia5nAjMpGvsbkVzS5VMrWoCegsLWc7frXNIQnYSjKehGHHwI/o71PFJDNf5PtTmQNDGQ1P5qdMpOt6ffch0FENq5zzK/Yr4ZyRdP1tE9OwcMFWyF9Klfd7CeLn/fMWYdEH/A1ZyOYnKWZ9T+S/JZ7TrvXV8hkjxRUX0p/5uf9V7ghAycygc3fkAf4e//T+ZN4jov+Ir5MhZ803nees989Dj9B2sdR2N6VucA4/qa3Xg4PWdenbD23+i7R1l8ypLzzZtTKOtv5/KtKl6iWn1UYXqvwNMFKbFfxOIHyPtRfE5q1wEpoCoQrV6dHvMU3Wrnt79BbjggvJSsG0FUoqfpigqBLjNad17ZDvQJr2RXV6AIrBq3naZf4HMA3Dyfr0XhkfscyL6rvr4JcSIc0IIIeSPQAGdEEIIIe/mMwJHd1G0NBB8LiltfltvEIhx71kB9o4Kzdbjb1J9TTxuawc2Q1kTs6dzj8q6iNoFb8xGphDRTSJKphmaxonR1d1maOuGQts7ZyRReN5gY1uPvkli+5S6HeO5l8FS1lIZjDZ67dHF2Q1g6tM6vtOpPN27hvA9jGjrIB8p0sdYrE15JJ5P78+MuUcciOGLf4T34Mi5gh93Qgj5vuzUtaP0Efxj/6l8dDi/s9PCR9r+q2/Ds7r/9HjbmPudOyA/MTDT0kDWA6vvndePO9gugKoB1WBQfx2/K6ylm4910svmEeXVPCW83oCqOlKzx7S9agUUkA0oW/zmMcH/z967LrmOI1uay0EpdmZVndNj3W3W7/90YzZmMzZ2proqd4QInx+40AECJCVSISm0vszYkkgQAO+AL7gDHwJ3GiDewV889OyDiJ6E9CTyJyFdBeJMc/jaa6Z5nS1kYtNXgz3k4RcPIYQQQiigE0IIIeRqJhG2m2D5dyIJkTSsHkClYJqPmQlGy/TpNGRncZHJKyW5hNeGs+iZkf8antRTdSYRP8RXNMVbAVcFcAp1DhglGNNsLRXBM91ubLXruo5abp7dXtJ6u7wWzU34djFZNgVzW7+0H7bo7FpvVWWUAwiaRjKtdO6WK5LNe9kYOvNemR0fW6a201mmi2RedOWBXoaj13K7Z77999btSKFjJlR1tnnm47kV2owJeXnKea5laiuQwJ7oJHufkQ98xnavgFsF6O8Urq8Zs9hrnm0t50DUxxDotgjTZq7npM/b5c6BmGWdQhpN1O5his1xLzGiVBqUGwfZighkcHBDWC4OOEHgvcNFEDzK1UPH8B0uzJ+OcQx9jCEI7xgAnAERF7IeBeNFoM6Hsi5xe0ynSdJIWTOXfbOr2unqXvWI6zXfTRs6i+mdc0QIIYSQ+0IBnRBCCCEPZBIpmyK7DXVHe4Eh+SOHA9M8NIXnObJBKpBEYGO10SR0LlntrHUoCsUiKLzKY16lO4URTJ0A3pnF2TIUwqOnFfl3RfJSqTzDW8cg69YxzzC3t7nmsgiu5R+sgG7y0vm8ktPxMPtSpDGCutm9vM9TbefHL9k61VaiPCaCOKd7cY/EdK0wqWuGt3p1y2h4JRI9iiSVL4Ic++Cn39dHCB2EEEIIeSxiPl9hAKAhNCunyrbE8yJ9Ma0W2gNaLS3xfMvABw/ExrnZPsxdrlCoOii+MA4C5wDngJMT6DDAD8Gj3I8e3iOI6qMCMsKLwImHfgB+AOTsMLgT3GnA6UPghwv84OE/xyDiR0/21A8ougS3kK6NZucE88EVurCeEEIIIQ+FAjohhBBCVpnNfd5WbPvLFifXa4iOV8xr/uMFuFUaFhapPjOVmjebH1xKb+E8t3mdlxWvJYjihSt4lTYK+ACiKDzO6y0xHy+AhrkPC1G+3o2Zh3nHSqWApJDqeTvfyCN5oNu/qkxonPO8Ph6NCmr1CYT9s+HrUx3FfE8fimhUnCxwzWJzdnEgQz4+rWpV6+vLpjMQYU7nvjbXkb1kCrvgVq+tRnFvT30cesex9mR6Fuyjp6qYoHGvv+p5P+KYP2rfX7nue3jl/X6mezwT3lZaDyZ7zsq+HnuvNXsqbsnrXtf6NwiGV3QvmuRIOqnBdFSd7/38KJv6U7HVAUnzpNfzpc/GaNpPwfL1tNSma82R7uI2XqGnMUdqP8MBw4DBCZy42LZPXtk+zFnuoye6ap7iHJcQ0l0HYBgcBhmgIvCDx2UQwI3QiwcuCoxlF6FVfbsPkhK0Gry9Y9MSz2WKFKa5/S/ldpgGNmjqW3UrSAghhJCj4Jg2QgghhHSRPJdlaDJMthTThJAUd2/6mAs4TWUVWZDcV8ud2+/hO5pRM/U6Uk9CbuqTxOgkXAsgzkWxNQYnrAXinNb85TwaxasRvJoWyfqaML/FWJMkflpx2cVCpcoDcdssFFciXEMQnl2L6ovfyRglxuukiNWY1iNp7yO2Ux1jh8pymf+pNjMivqkD4PrWX3ufteY4V8Cl68VWa/5l9ltTSPtcj8pqV2uf1WUz0+t1Op5NTcX83i7qr3DrY2Jv4Y9+PO19vO5hjyDee+4Qcg9eQQBbQvvFr+7annq3Mn+l+3bPeX+l/ayp237XbvfK+/7OFMJ5WFB6ojcSxr5fOehNzb9V/vndvTCSz77fW/1Gu94B+AXgJBDn4JyDcwInktvrqgodx+CJnto9PhYbQ7jjLJCzw+njhNPHGcP5hGEYAO+ho2L8/MLlry/4v0Zc/j1CLwhzpCfPew9MirzAuQFOBN4r1PvZoMC0z2Jc9/NRy23f1E5P4nmKLGY3SG32sNGs3dzrXhNCCCHkMOiBTgghhJAm85B+tXXDfLehwS3a/dFddB2PVFlqdfaW7Xv0LEl1soZ7RC1QJ08w+CieGzNPLebaPxfzaZ3b5BWRDTc6zyunreqsRgBPRjYBJIVmh0C9UViDO7zJO1nGGkfFCq+t8lPRRWhKK6CbDaKBqp4q/bprtqphS9Cvd6IrnqP9u8Z6zxcGun7N2pMAWKOqQDHOxPb60qgfGXNza/93E73vXbaJIx4vr/qI2suexzMFGvKdvPj11hxXZV6zd9NW9t7fjxZ9Xvy8fyuPPldkP1p+DbNkzUdTlM+TOA1UbwqjJtL9mQdPFhUxdasfWB5BBAegDhhFoQ5Qp6X4PwSPdPEauigOk4j+G8Co0MuIMU495U4D3OAg5wFOgPEkgAMuUIgfATd1dcIXnQYkCiBOIHAQeChkanMXoe6B4FleD16tRqLkDzGFIkTiwnSO1FeH1h67WV8ChBBCCDkICuiEEEIIaZJC+Fkk/xv+2D9/MmTBkqJBPJdakIZJvtWYXBu41ryqC0/y0mBkahgjFsb6Z/G8EttrY5vZfvqiOb8ZxvNeG0K6WuHa6Nimlqa0LXfADRb6dLxmxsoVRbQQzrcVVYvnXQPpNTd7Vc3mprXNlg8TQgi5CT4+yVXseedy0MHPQDH1CdKiVuj29Du1L7ec/2sH762lH2MiGQEn8AMA74KILRICoUEg4uCch0r01HZRdP4CcAlZeAlfvgBAPdzgMAwO6j2cEwznAfonoGcPf1GMXwp8aSHkQxQePni+p2HJs/qXo4TmXvzzQwBo6YFOCCGEkKeAAjohhBBCZgaU6XtanxKGf+zPZoTgno2AE5bfh6b3d9sIE85vI30K15/Cty+VoY00S78L4bxxDUSxXKPQ376AJLmPTwJ4nUf6LLzGK5ebacV8+2TgsgL0zFWm+r50TZsBDSISBgdcLRxvcCup9mtabusoXePdTDTfeJ8u7soGA2q+LOrzaS+dDYd5FdojCSE/mb1Nq6WoMVvKu/YZy6bg47n2nPE9+vNYEXWteJ5ChzdTz7yik9g+v2i0/mJ15l6b2Hh+Q4OY7YcRoi4I6CqQOPWTuDCBehrirRdAx1h/D+ACeIy4IIReH84D/MlNdRgc3IfCnwTOK/CXh4ePYvzUPwhh22O/xKW+S2M0sio0eamXR6BzbFJK3nCEEELIs0ABnRBCCCEbicaJ9Ks3F/M1UFA/Dut9PgUJCFjDlKBKZ8TwPP85pnUw+cCkaxp3qvStOcxTuS2SAJzrq5Vwj0lEB0pLnN224Vne/mnE9qZoXqm3My27X072np/Vvyy+z4aEtZ5vw7XPQsDPFe2WB/7se1FWPShCy9VXQNMgIYQ8IYwIQsj7UAnZqV1YeKLrvFk8w/YxNgygXKxLa5lHCI8+xk8F1HmoEziVIGC74IWeuzVm3K6qh8cYorpfAC8eOl7gv0ZcTsmT3YUNhwEyhNDrTkbIMMa5zoHxMsJfPHBRYNTglR77DwLJYeM1D9TVKUG9j42IYBpHjW6K8cZnNSGEEPItUEAnhBBCSO6E62xhOaI+eYxmGT2JhF0hfMFblhyEEbyb1pRoybLziQvmp9e56nRbobv6jrnRJ6/Kn1L9NsmqEJGhmmqqb+qZl9v6m4t15nlurHxWFAfadZ5t18jX7mDtRGKF+5raoHgtajOwhVa/Z0J6TKO28Fo871R28Xi1BkQA7Vj5PUweqwNoZGM6Qgght1KM82q9cgghr0/VnO2uA0rP9JZ43hrj2WrzCtCMLNV7xswGZ2sQpeu8FVG8Tv7dLg/slpSPCNwgOInAq8foBeI9vHr4C6CjxzgC+Ax5uWGAnBzcIFAXBPXzh2A4O6gHvAKXzy9cPkeMn2MIDe8xzbVu29CK+kt7/+t9BaBqDs6WAQsLxRBCCCFkPxTQCSGEkHcneR3kzngcyZ/XR8FUqt9m88V+exYn2bs/Fo0eFygNMdKyalUiOpB1cAGC14abls3OlgBwZuBEz6YjZj7FlsZe17MOj56MZDBiORD2MwupCoifC+j2u11XFNFyi1kRzrVOK2a5EalroX22w2jfLC0jWvdWcZ2N6xOiU/26hfQq1KJ13K7ZvqyDLG52i9sSafJI7ySeRkKen+SpaRfVrzNCyOvTGVt7VfrW7974zqNplT/anz7ukkAGBxk1PMucAKcBTh1EB3i9wHsP70dcVKc8RsC7Ebgo/EmjFzpwPg8YTh9wsT31dRLI6QsQDf7sl7jPo4YQ77mudXu9phqQOhvAUK7OP+pxsXxWE0IIIXeHAjohhBDy7iighaJlLapt8bzbX18bcX94T3/NAvRmLOmldThxM+f5FO5wLvgqEMV1yeK4+s5Rt2MrFk5Lvgqspb4WxPOpFeNxLgD8JKQX26XvOs+rXbpZVHvatLxIujvREebLEQTZm6c+xB2jWZFP87vdInmPb7eqpVNdeLrULi150EJDZUnbtLyFclXX7s0F1xlz/Ivw+tfy7o+Hd99/QshE53mQ3+05fDPKACbkfaBH6/twrejdGgBae0Fv8YyuupyLZUAg0GlMbWr625DueVsPhYOqh7i4nQKjaBDAnUB0wBC3O/kpNLv6mJd6qPfAoFCnGAXQAYAbMDgH/3HCWRTj6DGmztClVfdO/3TLoNnUMdAyl+KQ5mmieseNEEIIIUdBAZ0QQgh5e5JVouyiy2ye67aFZRaK+6pePHv8c+pjvtGyJVdYUdK5dVEYTZ9msITVPyUq7MkDvQjtKHW+O89qMQgjCcO2nEpRLQT0G0quxfOZmF7XbU8Z6+dS7ICVVvGbFmLmRtj1Qc9CSTLGmZTF7/pa7A1O6Ne/yLasxTyb/Fza+YzgGBtCyDuy9bnXFdUpohNCYAaoNpYvCuatQZYmTXNg5hxBnPY8ljObYcnbenrAhYHhKggiOADnHMQ5OCcY5IRBPJwXeO+hfsQ4Aj6J6COAywjA40tH6Ojw69cH5OMD4gSn8xnnXx4KxShjnrc8h3K3/Zj1EefVnhJCCCHk2aCATgghhJBI5Z08E9CTsWLBW3T7ih/AXkPH0rFpeDNvIHsV9/JM85pPzudVkrmxy0Z8t1lpVkGlSFcI3cU1ZRYDrR9zZmHRo3iu3qRp5HfzGI4N2zfXLRgIV1O27qdqIAMAbQrTpr55IEHtCrRcftDOdRLRyxXNfWjn1KjXEtYAqvVyMbtG9WYXtMcS8vO59j7f6Il+WHnkdeDrllxD3dScDbqpBpCujcNsRDUSiHHKNhslL/QkXDuzXEIfRd0IhcAPCqchkbgYecsJHFx43jkNn0nzHgGoYtQRehlDCHgIxA1h+5PDoA4igB8UGIJYr18aBHWPMGl663i12NvUTSOeeP8SQgghh0MBnRBCCHl3ZsJnUFZVkr+xmEH0De/cTZ31nvsC+TYqb/Kgs24wkosAYkxWgkr1DNay8vqo1fLWgIArr4dcXPJAr5avbWeL7m3XuEwLW99smxVv65s9qLUUsHMxpcCdT8PMLaeu+RoyiejTorI+5qOTCJ1EXdbEc0IIIQexIpoTQn4wjxqLaMbaNovvdRPyeslNc43t1CKfJKIDQfT2KAYKB2E9JPLqoerhncBFRV5UAXEQB5wEwOihXuFVg0f6J+C/gE//hXH0OJ0HuPMAQHE6DcAwQL1ALoA/e1z+GjF+evhPv30w7pXnRlKfqwgTQgghhJB7QQGdEEIIeXsEYZJrFB7FQPT+tMJlWAiToOIqVZ0cTCnwmh9ZCA/G8iR2Z0eRLPS6UiwvYjMGE9ZUhhV5lyxBMqXdwjQ5d7EbudZrl1h9DDals8v628QZFdfzqbayia+JMh9ux7bVUe3x2XDbzZyCGqX1dRQxEQd6OS+XXw96WBXPW9EHCCGEXMdskGTJJvllzWuUEPL87NBZlyKx5x91ACQrjqvRe1t1WmikqlbR0cX8qJ9vgnI/BwRvdOcBFwYPj4PAO4VA4RDa9qENLFBxYbmEEnUE1AMjPLz38B8ew2WEnATuJHDuhGEQyOAApxBxAL6gOnm0z/ap9wyVaoXWB12mYwkJvbjl0GM3D5BajUJCCCGEvBEU0AkhhBCybBmZTTa3Jpax0/14akV1Es9ziNYoFKsENTOECPeADx7qkj3UG+Lpd5xia2m7tbwt4zm2CO5dz+ydLBmoGmEsZ9VLKnQ9qmBmoJR4jtPP63eitY02J8i1bj8rin6xjVl2pOGOjjmEkHeiFfCltXxP/mzmEfJ27L7119rSncw1t1+rBKlCyescjU8AcDKlcwqoD97sEro8EMCJg5MQkh0uhGsfVOG9wkOho0J/Axc/Yhw9hl8h/Pv5QwB3gnNhMPrgAT8q/MVjdKF+op1m7c7naBbRCSGEEHJXKKATQgghM16LBQAAIABJREFUb0oWUvN85xUKbA+XzQ78c7B8HkQkGFySNae2hqVQiArjaV2lK1xAbJmV57h01qdlLZHX/myKs3nt3PimmNLW1+ySIDvzDNHZ6qpmjTwa+df3VB4QUHuY1AbB2sN9Op5aL8v3Z7Xfvd3VpgnSFF3vaRpsMcuoSK8p7945rwfh1F419rD0njc3hxl+42fTIwcPvPFhJ+Qh9IRz+33VjbTKovM66odb7udFnoy1c7k3Pfk5CNKU4hnbNm7e9iaBbR7mVn3dxF9t4+l8m7o8m43N7ktD32aIg4drT28BfGyICiTr7RAJwroTjDrCj2MMlKQYRZHieOkgUKdwGvpX4gAZBDgBcpla0otjQ5v71b7pQts7DG42uS9kTgghhJA9UEAnhBBC3pwcJhrJozTSCz1HnpNuiO2SIKI3hOZkmVKXLopyVZH+MRbUyVgn1bKG6ajnzbxogNtwsdch5rfQMwx28sj2v2h1lJzUCufxtx3kYgc52Ixmx6C2NG5hyVQqlUEyHmAtf5oKoLyG0rXXyZsPIUIIuQ0KnqRmzyt1PqqQvAM5dHhD+0bnklq7VvZeS7OBuNMySXmPAC4KDKFNrScEwVuiqC5TZsGR3fQnBPhwZwwY8Kmf8F4B74FLGAc6qsJ/feFyGjG4ILS7cQi7NQDD4KA+1CFF9bJNeUIIIYS8BhTQCSGEkLcheB/PjRWTcCXNEfIzNW6hjK5va2f9K4tje+vdCr53RUxDAGle89mmLU+0+KdIXhMdgTNfAD5YiKzbSMo4RS1YNHwZy1g0HC0K8JUIHByro1ReXZRixdoiXfiu9TYtEX0LlS4NAeC3bBzdVyT5hkwnqTmvYHEeok9LOj1Jr29VuuWtXQjttux5FctBF/W9WP4uy184BlnYr+qhQPY8L3asVv07Vbg2rPutRlkKA8fA40jI97D27rdfdEcwD3Qc2OvXRl5xezmEkOciNdtazfjFW70lktdt11ZXsNim0dZdetakJrjpzgAIgnkSswczPZUg9mkUqmLaxgovY/T49pMqrxqE+djU1S8PPXkM4uBFIRrycmdAzg7qFX4M86ljjPWxf2kf0l+xf5KP/TQmVqe+TkrrqjxSVXtt61gmm2qEEELIOq9stSaEEELIKi5/k9jDnhlAqw524elafW0vTNaHbuIVrMXgFh7V/d9Xb4HARcNIncumXJ0RsaVhSUqKclrvxMyB7mPov5wwXgcSQ/qnSkarjDNCuAAYBuBUnXdF8Mywxp9YXjL2QON6GaaqZm9q+30SXiWlsfunHgWNsOu9dUV5Bb1RB3XGZgetOCHIA1Qm2bwcZKDq4a21zIrNrTrVwkg+DeX5ztWqp1woNm5YGM25FjtAoio+ZG0scq3sauG8Ps5LF/miSC4Q9XlAweq90RtQsvSYaKUVc3ccOSc7IYR8F7WAvpYs0hzodSWzLLZkuZSGSs+xtITII9MTkhAUUwRptx0+pZ997w4O6pSXykqLJAnniOHcY9/GxY6Gw9T/yf1iBS4Cudh+ckutRg4RPwyAc/FvEAx/nqACfH5eMP5W+N8AvjAJ6aOL32O72ae6mv6hnWpNNaS1g3lTmzUd1yTMrx271MfC9Dt/ZbOXEEIIydADnRBCCHkXVoxeXYPpNOR9fyHzUm/c7mdwgIkaxbHrGUny8lJsVUlKqJi1Viw3RptCsK/zjfnk/JDF8/C19rxWIHl5pN8e07ZGNM+Gtljx9pADTGnX2HzQW6qrNfpVx0qrz0Z5pbBvPq8QFlIYyLqmy1k01uZ8pAwyUGzVVLlNdsagl5K0vue0Jn1TK6/ya9S9c2iPZXbq5U2fUISQd0TktieefQfbLLR+L+YVNxVDjuDaU/yKL8FGE448hnk/YAHbNbz22RG3mTVT0z95/K1O4rHE9dOY86BHi0CcBtE9ZyJGO5+3ZTWtjm3s9F2cwJ0QvdNd+LwAOkrwTv8agyget8/Pz9nYV0GekN72I+xOC+bt2N7922p2E0IIIaSAAjohhBDyo+lZHsij6dkqttswbjy3NuyfWtHbuGxY8VwQXSmMNUZ0srbUhvasxobtxSxXNd7LWWjV0vhjl9v1SVCH7gpBu5vk5dFAVbORMHiP6MxbPCYsP5vlrPz+RjZdk61z953lA3c5RkWUe0IIIYQQcn+O6MKaPKYBxED25AaAQUqPbQBpcKkTQIbQms+BtFK0J49ZAzUF2lIB/IgQ3t0J1AvEObizgzsNcN4BHvBfwPh5wZf6ySsdCHO0JzW+RiQ6wWsZAh6N7wvYMc9xlznIhBBCCGlAAZ0QQgh5F7T4KJw9m3OkkW/nmLMgKNwqTHy+Wf7JCzl7NFjxO4U3HCYxPArqmuL+FUp2Esfr5cHY1Ny3ShwvQpDnsO+m5gqEOQqvOBz3YEHBtyJ6SGvXATMRPaWpjVjNcjbse69urQEP9XlqnKVyivKOpa21X3bDNPd57wo/4oTOoiLcmAfVckIIIYSQw0ht4ln49pmHdb2h+Vxrn7UE4FZ+0RM9N00RvczH0PWBi0NfvUxjiTXEv/KxnahS5ZmE73HS4j0A/A4COiDBC10cBufghgHwChEPD4GohjxHs9ve9ssUZZEyjfAsPOvNfreOV+78J093bTftKaYTQgghGQrohBBCyFtBj/QfizWWtETUFEM1i+ZL+US3izyRn+TlQRz2jXKqa0s6Ya+LkOyYvmTBvBbO6/S4/RL+JuU9iejpu1mzvvHSOdxDL1JAh/n8tbMFxUdO0xwkYAZ01Ns8Gj4OCSGEEELuyiyE+9a24DUieoXkf0xxSeGu83IxblTcSGIMKScI4dwRms5eFKMdNJwyj/mqAt6F33pRqCjc4DAMgJwFzglOToK3ugicKjCagzHrNsxHBUgS8bX6i/srHef1mmYaiueEEEJIAQV0Qggh5E2Z+vxzT9lmwrvxqj31Fa/aDdsfv9elx3nf0BSPebIspXCA4qLnuQshDcVBnEwCeszQORcjmU8eJcV86lEEzzYvVcDHWIe1YcgaxqyAjvTbrF/dr5Su5+m8sN0RmHulW5TMvsx/2vNS59ibPxzoDJzold/e5Cq9Px1rnS1ceW4s7EOrMg2tvmDpeqBATgghD2XxPVMkTAnuWRuyiyMGM5L3Qk1fc0u7crWNf+22UvYNrPBcb68x0pND7BspvITEaViwi+K5z57oZqDvJeTvHSaRXgR+BGTwGPUCOSkw+FikhzoPOcUjlF3XETzioVDbfYr/FEOUG+16J8AojZX1NvUx47OXEEIImUEBnRBCCCFPwDta4Xbsc89AlI0lWzydZconG3pkEs+dgziHHL8woiIYXAhFGAxNCu999nCfjGTxWxbENc43KFNdF9XajjdG63ex7kmsP616LBmz6jQzMdxa1RoCdPKYqUT3fA7KhCs0BjrMQrbX+Zrf33kOliIpHJEPIYQQQubc4BFM3phrPM5vjjQVP43XucT2a27F2jRpHvMkmsfvoUujGL3PY4hVUqI4rlgEPnmSqy8HuI4xf+fCJl4xjgr1HupH6MlBhtBKV1HgnNKbOtljMJp6ohr8Xu1zDjuP7Ye8G/7+SbpUhBBCyCOhgE4IIYS8CRt8Y6sN1ob5J/ZYz17Z8lZZLG7iim1rD2XR5fWLGMNLclWA5HDtIm4ScCUZaqIlRcM2ITygVF7XWl439TVkYgrW0+41q3iNl/I1624Nj742v/i2TIqPtXImLxM1/15TltnC5tuYp376UX2GBOWCnoh+J2tbM9feNb/lXnjlRw8hhDwBs5DMGzHT8LYf7nw+Py+1qHZEU5j8fK59VKylX7vebNNXF7oU6XpOonUS0X2UqF3w5E6itIPmvoxAst4NG1UsFSYCiIsJfPBmvyhEFBcoRMNqCDA4QE4C7wDVmP8FEB/6VWrGz87qn4R3nbp1q32N9PCto36k42E/CSHkJ8IBQuQKKKATQgghb8O9rFzsYd+NmRNyZRARs2wrxekyXuuDm4T0NNe52L7F5EkucBDrbQ5jCK+9kGvhVSbtP8ynjtJr4107M0fPeX4rVdj04sdMK+94oD+KWw/hkxx6QgghhBASaUZbaiyv19vtVae+TmsgaFqchHSZEqgD4ABNgaGcwonmNrsgdJ28BAU7d3kUYaPBTR2kMfR1RgBeFYMCcgJkAGRwcINAVOA19cUUcvHBu93FDXv7nET+KOxnYb1Lo13fEs/ftU9GCCGEGCigE0IIIW9PJXiupSOGO1oXarHcFlkvv0YAnBmRJsFcsgUmrrKCuMF7BSSEIvTeT3Ocdw+F3Rejytfi+srmr0/r5KHyOC8pdezeWsnrZzavZMSzHiloOY4bi9lMRK8slo8Uznv3Q+/31qysRyQhhJDd1JFO5mj1jrtjZQghr09PUF9Yvxopox5fXkdkSk1jF2aiUvjQZ5LoLZ7Tybyd7s3oYNEs0OsY5lB3uZLIfbEhDmbWAaXFXhDmWE/lmaZ5Fs9zPyC26Ze6DS3xvObH9L8IIaREOg+4W6MrkZ8NBXRCCCGEkJvoiKG7sjR5tbwHxFhLsvf4rXUoFXhJfuXipikBOx0I9R4eOonnqsZI1Ktz+C5Z4bVe51d0VF7emBPMZdZ7ZROFh770N1S0BQkbUrKLlOdllslRVPVfDbVv5q5sVX/V02a5KmWRQg2HEEJ2sC6cl+lorHwxXr4dRp6Coh14v2KSA3qhERfzSJg6zKaewiRWe6ORi8YsTCQujfHY7QTkY+pR+dD8d8ie5D5uLh7AKcyiJUPoh4kI/ODhT8ab3E31yB21WEdJFYsCvtaDk+z+1Pu9lI73OiHkJ+LZBiXXQQGdEEIIeTtajUQ2HB/DmmWiEtSL3+Gc5cZ/XmEF0KiaroimVn9UH7bJDslW7BQAIvCqEK/G87x23wjpijDuuZMCSBTd1dY1i/DaEXHNLm1Z1lv/UGNQ8sRfF89LEXzj/bklXUqzK2R8ujg652nmAVQp3D1PlwUOfULt8FonhBByJ254NxBCyCLNcaGNfkv+XSn7HtG9G0V/SG3fKOfppzzULps+sogeu1DiYhnOw50AdRqnuFKoizOtSwonrykGfCGke8SmdiqjcxyK3ewt5zOYEPLT4bOOXAkFdEIIIeStsDHf7LJH84oK1t7jtuBFLJVVRurldbIVlwIjYDdqgcmJIoQYzF7lZeFTndWk8cZaIzIvp54TPZWlVZoUzr0rnifRuVy5rBlvdbXYyVYxWqa006krt52Ngs6/tZm+u90esmfOTAkv6rJ2WGf2uV6+vWumldFSIVcwc66ZDUQhhBByJL33XeEFRKPmz6SnVxIC3K+5nqNeba1AK6SRAurnIvrsmlbzU2I/KU5v5ZAd0a1HexbiT4rRhb6VEwcMAnUCOECcgyiCgD4o/EXDfOqjNx7pEsLJNxzri+NQVnV+CPjsJYS8ATZ8Oz3RyRYooBNCCCE/nr3ut2xMfis9MbZYLrPQgTcVlf50EtEVClVvNEwFXBLG019DFF/yPs/uH5o18pR1Fs/z98ZuHbCvh7AaanyNdc/z3Wyt41We6C3L5jSY4qnpjQEghBByF2phnLwhT940IC9E71raIvimNItjx5PwbNvoU9Ss7GouUUR3Ju9ZXil4uk5pauHaCu8prPsFwBC29s6HIGODg55DOHeBwMV9EYRptEK3yiOHjE9Z5/qYA9Q7VkvHkI9vQgghBAAFdEIIIYSQ5yEZm2dzoSdzTmmtmYdvX8t/nn0uQgEVNR4SRmCNxqdUlTBvX8NL2Hqgi0TvdJ3mR0+GIzWhDa33eY+W8SsVu2XU8BMY8cUYuPLvvfnhDqOl7eCHymN8s4NQulbQuz7LY1FfS6te+SYbGvgIIeRVkfjKodpKCMF1nui6rXlfisq9RJLbnqntKuIw5v6Ji3n4dv/HFmYLTAK5XZcEedsfcmFl6BopZAREPCAuzos+QFTi7F0jAA+f+m31MbCiuG3H12L5kqje+k4IIT8F7dtS6JFOWjBICyGEEPJjeFQvd6+KtWf7I5oxR5a9lldtGaqU6Sw+15vUyne0woiW6Wae2o06ZmNLLM8BzrnYWQjLpijq8d9Ut1S8uFiXmFCsXDrVUdO85rUXepo3feZ9Xnm2zwYUCEzl7khPra9W1aH26xNnO17FPODSLWLat3onFdCx8iyx61qbVfW6+bhp8HKZLUuZNura2kGp69Gq9JWVvPH2nV9ay4NRaEN8HZq3Anl6jmgJPOqcv+tYnjXj4raBYqEtoUZ00j0n9Jpt3vGkfRf3fJlea8WsBc5X5JHdnSO4tf5L2x2+P8Uo105FtHzg15+1QF2/HOr9setclf4EyFlCCPfUT5MQC14BqNfwl8K5jxpGOKdPDZ7rIhLHNIcIY7kODmW9678t9JrvvZfid95/j7jej9q/W+r+yLKPLP9RvOt+vyu981a3P3l+SYQe6IQQQsiPYMl8y5bf91CL3/GcNAVNIHgQVKsqMa+7vrYedk9/lU6jcB2F8+Rt7uGjgSUaWwpf9yBsl4bykxHREQ005f6pApI8KyA5H6hC/OTBoVpZbLLXRCg9C/VZsP8Oi8jCPVNEB6itRVj4bfO9ZRCAPU5b3Uaq6+/mR4EgTL5Y768ZAFLUceUcFasPqeA6tWCel0srGXlx4mOHvBDJQe7m7YHHnfM3bWYdEaI9BT0p2xBRUP8Jwue70hIUj8z3WhGdPI4956k1PvVuZdv+UhrI20lmmuIiZVvbei/qWgXs6qpbiAuAL4UOI9R5YBiAQSFD9EofBDIA6kb4IaTFBXludfEKpzEdBMA4jWmW6q8Wzn3820p1uHhrEkKemt6zXapPQiIU0AkhhBBC7sWhDe8V69EG3bJI4P3kFe2jLi0KjUJ6S1icdid6JKtEjXYSyqfKxGT5exSNVadUdnRvz4m5/nx7rjgIh46eZi+SEEIIIQ9kT1uQzRhyLY/ue6SxxV4B8QCc+TTjC1RCtDCnwcofA1Z5r5CohBdyft3vqgV0K6xvQaoxxYQQQsgPggI6IYQQ8uPhePDvobKyqLVC9IjWj54XV2cu9MpNG1gJozqziGRP9OSNLkAyvgjinHoy9y7LHmJajc5d8LGI6/Nn9kRvXZm1x7xZ9JQjgdc8revzc4vneVXebPQB2oMPWmU93fEjhJCJV35E7a37u44P64WBn70+yWtyjy7ItXnxGiKP5NbrL0bnQNTLEUV0HR0UfpoZSkMksBRdTJOSrUk01yLPWd1a4nkrbWtf7P1tuoc3QXMFIYSQJ4UCOiGEEELIQ1gbrm/F85YVo6EoNycOXYiLm4RWj9Jw4ULeOsVVrcq0FpIq89kuGfHcOKPHElbnUH0NkhXL/j6aDddKbQSrN997rN9V4SGEfAuv+jbYU28+Vg/mKQfbEUJelhu90CVNX7WnXMCEUo8DkAdMg56dhLHQEEj0Sg99S4X3HprEd6AM1Z5+p/zVlGO7NK1x261dSmL/3pD7hBBCyBNCAZ0QQgj5EbCn+jS0BGQAzXPUnOs8Wi6sx3kxD+gGQbxXGWsIqTzI829B9HKI3gzN8nRZqG3Wza7YalSqLTEvdJ13RewdeUr3R8PbvOVmQsg78ULPC/Lap2tH3dVMa0IWWGz3LKTlq+85uOdFfs21QcgtLIjoaSDwLGoXgDTV1W1lmgt4xOSJDh+/O6gG6VwkznMu0RvdKTT+waEUz6NQLnH6LbWDosuu2jzyWX0c6vRrcIATIYSQF4QCOiGEEELII4jh0vtewRKThc9CcC68vzWKpS33gIbImg0ibj08X3InkGpl9nBobdPKs2VhkWh0arkt1BaaJ5cXNhuDjtiPOuqAyXtJoKfBihBCyE+Dggwh5Duou1YrnumHPJbqAc82pLvzgDioA9QhTL2VN5TgqS6AOMA5F7zRvcJ7DXOk5z5eCP2OEVmAV6Ds59kB1a0uHZ/BhBBCfjAU0AkhhJAtvIB3Qz3yfR4amx6p9+eaOH8S7BHNNelLK3w6SkFaW6HgKwtHra0n7/I6gfVASPOjN/epodRqlccCmryjk/CvPYuM+d7yjng0yeukt7pOq9LwDN+IzHKMp2Gh9Gc6VoR8N7z+X4+bPfUOrcVt3Dw+igpwjYgYr85yXXPM4a2HMLWHboLnjJC3p9FFyv3vI8TlIloYpnyzkO6hKsETXRzgZOoWuOCJPjgHcQ7wgHqFfo1Vtyt6rjvJ/Yqw2pt9iH3Cxv6mYd6zbmfvufzkY6IJIYSQGgrohBBCyMvDnujzcMW5SNHZk6F4ddOW57EVrY2lRuq6mJDrvWjoLc8Ka7lphiZsV2256joX23te+M+mK9hxA2vnS82XI8T/4hwv1Mv+vja0IiE/BgEvevIaPNNL7rVIzRI1TZV5os5yQgg5ghxMS8vB7Ec8d+q+W71MEbzKo0e6+ND2EQfooBAHyGnAIA7qFP4rKu8+9QuT2B+90DWMn85djrrcXuSyI5tbfGYTQgh5MiigE0IIIUvUHcLCWodKbPxemnOtNdbPPdFziqNqcmBet5T9ZORr4orj0prrvIVWKmkl5ubgfXm5NjZLIftQpu0ZoGdifLXNrI7tZaUun7zOzQZNJ/rOAXnkabfifxVefzb2wKaPzIIFXFN0b2EtnvfSiew4drRmkVeCAjp5Jfh8rem1YVtN3xRd+Crh5WbP85zBjm15vg+Fh5M8GiOiH56v/bTYIGGq8GMQzMMDMXifi4T50d0wwI8ekHHKrx4QbD3bU8dtw2Dh4vlb15sQQgj5AVBAJ4QQQnr0xPNe2m/sLK6J5+QRNGLa3XBNyKSGZ1azKQwXPRXcxtZTwC8UkEXzMpR6qpvCz73IG0jD8BPtPCs79azXtw1RGC1GrQEGrfDpeb73G4tOB27LoJ3Z8d04QIMQQgh5EazIfpOIThGcEHIUR0d92hLdK85bnuZFD89Azf0FFYWKwsPHdRL+Bg3bmP6jqq+KNTsh5sGq88V22g1CCCHkp0EBnRBCCGmRR2P3PGBrj9z7dxpr0dz+Xip+3ROd7KZxnSRdVa3g2rHsSvnP5Nm8dM5a3gNFjsnL2ySykRNaeeeYfWW+EuueBfSmAC7zquhcSJ627exbjvLQXv1Y73MYD/7KkFTUS8rjm/Z3zz3Y8+5Y8k6xFZP2tUcIIYQ8K1ujLSXylDgzMauXz62Nijd/n3bbn4SQwx4PRR9yinaVwqznbpv1Rndl+T64lIcVCogT6BA81ItoaaPpIwLzvq0pI6/RcrndvPBKf/PHJSGEkNeGAjohhBBSsyaeN7eRfeLYlcwNirRgPYyrowH0hMxSHZ1dTkvFbPF6qD2ne1WzaY1GLBq8GABMXguFFSXK6znraJgxZanNuDC+XuNuj8de7i3PewHKcPMND/S8/LbK57EQa57nRaWmiAaz8IqEEELIC5Pawsn7UWJ7ggNG7wwPLyHfiOQ+l0Cn+GD1ON1E9EbHGL6P8PAecC5q7TGke8pDNXifa9q2Vsft87QeyCtm0BKqdYQQQsgPgQI6IYQQYqnF863iqCogcrM+tWTs63meT57l367fEwCleIxsuM3EUf3T6Qu/1cQYDQZfmc5xNad26TG+Up3scL6UsOXC3Mio+BoursKZ3cfCknDczFZQ6uW1R7xV0NXca0/s1qSzL/FnPJ95QaPu8bzsMuy3DslS9Iki7P5OD/he+YQQ8mgYYIPQ1fExXNtk29uO4Okl383aNXvPa1LL76lVLwJI7Hfkcb11Xyx1N78UqiO8KMS5GMVd4GK/y6uHGid1iIQgWyOgforoMTsMqc/ZOj58JxNCyCKMEvpaUEAnhBBCEjuNOt+hLbVCWVI8f1KONB60vIfjgI2i0d2KrV5H4LvGQ0vVjNCo6lN/9rT55IVeeGw3yk7lPDVGhJZ6hxd+W6/13SJ25xg1vM8XEhBCCHkGKDQQsh3eL+RdqLp0WTxHii7lIdApKNiUMCrsRtweARUfBm47gTiXo7crAAyADA5OBO7kgBEY//JQH5R1zgJFCCHknaGATggh5Gex1sGT8kvhryLNhKg9jacN7Jc7uFTItCY5Nysm/UyNSFdvbX1h2eHtsfXALJzb4tKQckH2zJ5OpDaG8Gv6p3ntmoX5Uqu8rK4xanSv8boyVZIt8eR1fjfMqlXrzLUYXIjoCzu165pu1H1z6MFkukL50GhNqbAqaF9Juvmv3Hc97AGwN5/W9o0BH/emukib4yHuUNweHjGshK8NQq5g50366Pvt2Yeu9Zi3fa9IXLfZrmah8aXdH/MsfgI/ZT++g0ff7GQ/330OJXSeFApVE9ksDaA3XZNcv9z/1LKpralX4OHFxRQeEMANDm5wOJ/PUK/wl8+w3htH87qLGPslxbjpWKkwwH/Dweo9P+59nDfZix4EnxPfD485SaTm3Z0DG9Hz/LWggE4IIeR9MWJ66P+5vhdtk1INvEmo2riJmm9aV1KBKfZaC6k+6+97eXQvcw/WqtA6TgsIABmKnFbTz36bARAtL/NWvVLiJMj3Si7ymtKFzWtrS2fDReNCf2XbTm33Y+l6XaF7nLZjJ1tYs9uUHv4CiJsfv+YOd3Lfo9Q2z1vrGtC5hr+XzdXueb/vOOe7aRy3XtjJO7DnPDz66fqaXftHHzVCriUF431Eya+LL4yPdkBbEo7SAETbfrJp9ux9713X+jyYW4UfawxOcx3bgZ5pZa/6VzaTm+xtw73mSynwynV/Zx513orHVJK9Nd+6zWqlLkGcIswheJorADgN5gJVqNPgXe4AOEBODu7k8PFxxvnXB7z3uOgX9C9APzV4sKeBvBJ94X3ZD1LVYI+IFRT7iLUVtqJ//ZfWX1aODe8lQsg9abV3tPrO59BbQQGdEELIe5IbRRI/kpAp8zQA2mGXm8O9l1kaabhBz+xkumF9KxOK6POW8DX7EXr7i87Ka9vPtNCt7rDJEqHTz9m6jXW4mnrAwZYibrhX7kF1spac3QVJY63D3dcWoRbSSLu9NDZcAAAgAElEQVSQfAvZ472udBINeldizwJ+deE7rqfH9zClVbdCRL/PMPNw2m488Q8emZ4vuYfxqu8V8hBe+XKZvSevYcdz4vGP5pvpjlvTakEWbapBb7Nn/91qtsA3nvOeEbg5kEDbRRzVfHvh6+7hvPJz7l25wznbMsZfYh8m3eLqAbi45SzuO3I6EWA4OXz8ccaXAF48xi8PHdOgJAF8fKRqLi4WMi0USX1knZ4da+K5qcdTe4j32FuvV342PsPAqAc0ow5jj0mGHMMW8xswmeCe1+xB7gAFdEIIIW+LVOL5y8JJ0B9DHOH//PN2J9asEcTyGrdUw/OcEEIIIaQHm4OEvA9L456jEKReoaNiHEd8fV1wOg34+PiFkzvj4r7w9fmFy+cIf/GA90En9zHT6JWeyxmngqQoWKGuXX6Tpe71T31+8dlMCCFPCQV0QgghP48r9EwxYaUVWFfNFtd3PDa21QSTl2dnB64Vam93jX4jDuipbprf7R7H3A597dShCFdaL3xV9t5nJqfV231PhIJ7UbvRb0y3upwQQgghT88RnmpbAx3tKZMQ8jCCNt2a7GvmOg54hb+MUfsOMZt+ffyCGxz0rPDqMaapmGx4dY25+ySkA3Axqp9OnuhpHndb5KwOFT0HhxAdaaUvqKs95D581hFC9nCfoHbkwVBAJ4QQ8n70xMzVSOgLCXSPqHdP6n1lr3DOjmNSXxPf5o2+52Jrhet8MW7e/WjA2bD7c/HcbP9wnvJhQwghhJCXo2rbpMhW9IYk5AewNloYwBhCtYfgagpR4OzOUUo34vgQt0kh4H36HsO7i4MMDvC+Mz2WGG1pesBoa46tRQ/0JMpv3N3WMj7fCCG3wufH20EBnRBCyM9i09zRZlSz2m3WRjMvCegb67dUrbrua/uS96EqvJ7/sftJlo/FhsEH9tj3QunfIqqvzYWuqT51XL7O76Yn+vtyfXj2J5wmIZ9K7XweyZPtO/lGHvTM2H3JbRsoQ8jD0fr9fS1SfFxZ+I1lkreBz1FCXpSZLB0ct2vhxwNwAC6AqsfFK8QLvvAFiGDUERc/wkODgD5Modn1osBXzOcSCnAiUAjUt0NYSGG/SDlVEcKWxnqnwT0LD6diTU6ffncS8nVICCGkAwV0QgghPwhB6AGupao6XEk3X5qHa1fY6C0cPYyRnuffzkPmQ+fw1+u45vzUA2ue4R565bDsj7xWn+HckevZc954zsk78QrvAPJ0cFAlIT8WNf+GgcBpRSO6hMfUbPKKix/x1+U3IMEz3bsR6hQ4AcNJ4AYHiIN+elz+NSJFd5c0eFEEcAKxodR7M1BJ8ktPId4VEG3I/7chIlVUMUIIIeQ6KKATQgj5UczE8a3p6hDsqx2t3vqrJmA3328QX4s6tjxk1zzPOUFPm50h3Tecx9yZX/U0X1rfEiQ3eqK/MkdEe/jO8o5i5nFe/+4t72b0jTD6xWsiD7z+f8BUE4Rcxa3X+573OwfhvTR7mvGy8l627U6KT4S8NGLldNtFrGerUgAOUO9xwRiagW4MnucnwDmBOw84nQa4YQjC+gh476FjEL1VNArWsU9cm1iqBaKVVC4Iz5zkE9Fa3yL3mVuJ4s4q+NojhBxDbZ/rjhJK6+9aG3JnKKATQgghr072nO+JrOQ4jmwJH9WKfsPW+c27GC0nW2+LpzUaP2u9yM+D7xBCnp899ynfJ+/HlddLb4oiQsjrUYcwrwX16E2uPniCY5jWCRxOpwHnjxNOpzNGNwJe8KUXXPwFGBVeL0av1ilke8o/xpBPOvkUBXASwHVYDAu4vou98eRrx+LR8DFLCCFPCQV0QgghP4eu56+sDhD8tuHIC3Xsxjir6a7veZivhXN/16HYaz3ltePZOGYbowjMQsnNRqyuXrBxeT33acfz/CmsAs9AmndvvmhGGpRSzHN/n1ptY2v49s7oZ+2s/zbe9Tnz6vDZQcj92fN83Cue89n8VuTT3WvLvuGgTEJ+KOkJ31yRPl2V2IZ6T8t8+lPoRaEDIIPAyYDTWaEfYfl4GcOc6DaABeb9qOKto7NUQGOb7j700tU7b/ev/iSEkL0k+13Pbsfgny8NBXRCCCE/jBsNiQ9qyKRR2So7KtDclKLHsSwMfEgn4FvnkpTa8lCuay7/Kew5zhIGHRQGFWkcMhsSt7ACPamI/grwmUSuZee9zmuOvAx2AtpbeOV3A/k2+Egk5O3JPddiBiiBuLIzpDbsuQcwAv7L48uNEHVwGOHE4XQ6AR8AvEA+BRdcwjZjrwIau14yRdHzD3yHPZOI/kx1IYQQkqGATggh5AchsymjpRI1a8/f3lQ1h/ddTD3qOmURXX172673sfUutnlu9Twn21g4nlIpqt8mottyjZe01FfwTxXT9x7n3r3xSsdto+d5HuAxW/EA+AwiWzniHuf1Rl6BZ37PkKdmy6VTPQZFJAhjmy87o+g8fBAhIWQzjSBkotL1CJc8oFhL04MR0PUT8Opx8SPgvzAMDsPgoF4hg0AGCSpD8ljv1Uknn3MRyV1qbdT5NhYecNb7/IbNCSFkkTVPdPKSUEAnhBDytpRtmu9p4PTE811o6gXSqnU8K4MQHnXIHzUFAXlRGMqfEEIIeWdSn2NXi5EiOiGvg06BtiTeuIX3efouEgR0RM9zayRJAnrK76L4unxh/BoxxPnQsxliCOVontwck5d5nV8R9UvS/3nZ8c4MeP7uELvyhLwGcs1ARPIToIBOCCHkqdgjKF/Thsn9wp4L+iobPVQbnudzEb0zQHFtnuxZfZbCjC8tZ+svsPX42eMm9+mEzzzKe1R1ydstpSNdXmLE8Nozp073zPtCCCGEkHsz9T22NVqn6FhsQxDyktTCdSeNqMSAalFtB9CKbJdCrisU+FL40QMDQqj2EyBDyEMGwfDLBW90KLxXqA+fGDHNWGK7rqK5lFxqLwBfWa1+onp9b/BPY670QxwcboDPW0IIeU4ooBNCCCEA7i0yrXXE7jDOmnwHTzeCvTW8/uddW7cfdvmBR2OJ99pbQgghhEQ601kRQt6EJKKvPQKSmJ0Ta9wmDNB3Ev40pvGjB748/ODhRw/5EMivEMLdnQRnGXD64wQ/hvWX0UMuI0Y7HYStH6KnfE8179X5HjwyqBsDyhFCyFNCAZ0QQshzUTvS5s5baQBqem1rmkd8EsnaA3lt562MKbaYfhUzatvONywxHFqqd5U6fHdQO1lYawe61VjqFXOCr2XWQt/3hqqjON128ffRDFsQP3uVkkbaa3l0717y/XREXgBW7q3Wyus8ub6VwjWjUf9bqrz7dB8xxcSOSvSirMlkJFSbePGc31iBG7fT5iSS96BVR9dZ/l084f1FCIDneUYAy+rI+nPzVVuCZb3NQ1zjb7MqhSguN7rX86UVtejoo7wlz2l/Z22mDf2JQzwhe1ncekhu6dL8tNfIntPy047Fq/DIc1YE1tIp0tbskaDZEzyFfc+e2PFZoBq+azC4TKHYxxDWXUQgAyCDQP9Q+I8RUIGDw+ki8KMD/rpg/O3DtiPysXES0kFDPbykOmi214Sp0iXugrYd7FvPFl1Y1z9kG2n3s28es2SO/dVFl1V4T161QUNeEC3vtWu7BbxWXw4K6IQQQh5KK7qWbVBMQnoQYERk6vsZET0Yeszf7kbJXsuOqWQjV6nSOQGCWJH6irEjOxP563LS770C1aNF0T3cLk7ByYt3NLecs2dsve886Ls2v3bj+r5+1gumV6+jRngI0jPq+2maya7cPiLVF2nlL9WyPfu955oJwtj9I5S06njUe4WQF+GI8WWHFH7Utj0VYT3la9ARhVMI4iykixHR8U07u2WQ3d732hXXzKyY+n23cWPbnGh24JbKXClus/HZLMydwE6eaV2Rj2vku/dcEHInjmi6x2yyiJ6WF2OIFbNB++Z5qeoBP7bvFA/IBZAREBf61uPZ4+vXBSd3wsmdMIwDzt4BTuHhoR7AZ9jcATjJCQMcvPch5LuTKCT7qTJR0JdYfxWPUavnUxL+vRkwJUluN/sGbHjlL7wzu6u0cP64GkEMp7/y2L4yzyZ85BFyHLfc8rwHXwoK6IQQQo5nt4HKWroAiEAliOdwwZNiKiKNQJbHzBtlxRhpiA0zTaLorZpt4+I0+rvwHp1GX5eijy3kCKHiQWLH7tO2V4w9aL+vzmZHuZs3Xes172jt33zenkFUW6tD20Nj+/b3ZE/ZewYXPfPggSXM9WpfLcW4CPu8Ndu0BkVdzZ77/J7H24oQS+f2SZ6vhHwnV2iK+8u61z3SGnx5tMvaEQfixrJz0VufXZ33+qFdh2v2paVCfwctpXtDPVav0yrfxb7gho5ir/+0iy0DGwBatQ/m1ZsBj3w87mGx3mv9nDna6kIksdcD6kJod6cO/qLwfynGQYFhxEkcxAlOH2dAgYsfMXoPjIC/ACG4e7B5qFOoVBGQoud7sPegFMU7SniKXKhaWo5a44rnh+ExJy8PDmg5t26xrx3RbXkEe+v6wKbIQ+/zR5/jRz/jHsURx31PE/Bdj/uDoYBOCCHkWKxt4uqXuxgDiRSLw0jj8MPIykFcT12o3cL9Wt3ai8Ona4vjPYNPGiGdOndxYQrbFfZVw/Yay1ZdNiAdPTL5O3mEGCudc0o2cNeb7Y7whN/GDzluubNq3y8tz/Mfsr+EkO3w1idvy50u/ma/aRocjdp7tDe2kwOxCHlespd6UH299/CfHvoXMA4j9AS4swfcgNP5BOccVH9jhAd+A/DAqB6j+mBOQXCMaBXie84SHRG9ma4aB/5ST5d7jIMjhHw/r2pKe2MooBNCCLkD6y0CMd/yaFtIimU+pZLpM3mhZx/B6JWdRiLvFkS1FlLsV5P3TIBJ66VM184t/57sQUlETyOjpRLLzfK8iR2Vjay130JzBPd3cUDvVW7cmG3WvbCn/nq86Tmz2sDsMZ+M+fZhlEYx/fCnxOLuvem1Qt6UKyKriMwbXD/8UfGzeVTj99neMbeqMo0+yiLmZTzbpnAfXahH3V9qZ9ELQkAI2cY1UwipJm9vhX4B+DegJ4UfPEbvcRGPkxswnE84/+GhDhhPF3in01zqMR94H9rhLi3IFZo+V0Tz+aJWR2DyU6ifHTpPOs9qofxdVPtW1HzpOXbNM659OAgh3wU90F8KCuiEEEIOZRIz+/O2Jq9rqY0j0hDQ00c0WGr28taob0y/YeZHv4VmbfPuSPu3TSjteXKtg+PW/paICUlflTU/bgDGF25JPZsNkRDy87CDktKoq2K8U3gQqfn+Hg+npovgwjpCCCEkcet7ovF+7XbiFspY8mQnhHwfcUC/AsAXgig+AHry8PDwg0L/AIazwzCc8HEGPk8K7y4h/SXm4QF8abBtRBuQIC6Hud17zXSp9PU6TWOb3jjbzSLzkc3lusye8YhNdEJelz1tFbZzHgIFdEIIIYeiqn2BPFF4dEvhiV2E7DLCec6v8LzWWeehW+aGepce3uZLS0uQ+otEAV+m/NIutAss2j2twQZL+1J7XYfBBDtaYfKgVlgaBHFzJ1BubkCy7UnIG9AwrJkP8y2Yz6QpopdbXF/+niHme56PnSdcMec5xXJCyK3wubGPBx6/tT5DNaWW7ZNoY9ten6Vebrdt5dOvju1fVQrTSt+QIeAJ2UErqoP9bAm8FwFGBwwKeMUoHnCfgCi8eMgAuD8GfJx/Yfh1wvg5wn95+C8P/dSyzGRTSeYKjzwf++wJMpmX1p8vMW1OJtVKU/bWQBy7sQN9W2V2lf60/Q314eORkIdwS9PkZnMv2Q0FdEIIId9LEsXR+LRp0nIrmrdCmFsv7T0titrDvK6LTWf3wSQUyNyAlEdH3163Xohya0yS1Fu8CQ0DFx7RgcodwdsKF20c8yuKJoS8AYWIbZ91VkaXKWn1bd/DsTuMagN7n1K9cus60XpGDO94ObBBQL6dZ7/R+oOsFgf4bhzYHMYtX38MighdLeWOYjkhx7BljE1vHLt3gA4xFLuHSgjhroNiOA04DyecP844uSBJfP3+wtfvL1z+umB0Y/BGH+vyBA4AnEJDtvCzIBahUmmav2kF5s363uwTRbrartM5KAc/dnoDj+oZ/PoZrCUghBByDRTQCSGEHE53xO80JLgQrNUmcPEzpRX7PeUPFOOOTSfh1r5C1ldaHSAr8Nbied3BmdVgWqIxrlkt0wCd/tjG0c6Lc3Rt4JX7V3umKX7l/Sbk+/khRun4/lFFDrwxOWzUMR3ts/5balexZJ3cwmwHO2Vcs5wQQiL5mbJjkNBDHzWPKvyB6sbWYuvIXE/CNV7rhJA7kP0bkm2mEUdPBSIu2j4cMHrg08MPY8xCACc4nU8YTgOGUylN+C8N97rXMDe6B3yM3pfNMg7ZGz2UiWwU2fSYuNVb+46PoF7WWj+Kixj1JYI4yIgiOiHPSbJp37o97+uHQAGdEELI92IMMq2wW02P81n6xoji1BDZ6yg4W9bxOO+Eqe932AoZ/aoKTX4WtVhffr4ke21zuvOckxvgAX9NeN6K+RJF2tqN7A4acjAHPCRn+c09CvtpCCGZJxQUH8/e58WjH7aPCr/03tSBxG5JW0+b1fRIJ4QcjqRp6/Itp+bfsH7QAR6A1zF4k/tgBRnHS9huAIZhCGlPA9wgUNHQr//y8KOHXkakedE19vklaO9hTvRKJF58nmTBXIqfU7t/Q7j2BeG6OAA7KIJmZbY+22LfRiiiE/L0sEvxUlBAJ4QQ8j1ke7315I5fKg/zUuSAafjr5G5dfN6hntbjvJvGyuHGS7DuvaXfutDDWwoX9uN5t/0lhDyM/MiOHira86CxL5+9I7MeKS71PNjrOvE5TPDGYyc6O92zxt8UNoiQiocIG9dcp9Ngq61Tpq8L4rXo3d+unedU/2n51n2ikkTIJlpjL+1q1SDStu4pAUQUSTUXDR7kEITQ7AD8Xx4XjMDlN8bPERgE4oLX+vl8gvulGPWCy2+FBuV9irynQTsHohZum+trAne1i4UTeiWwvyLB50Om80MRnZDnhfflS0EBnRBCyPdhPcrTxFnWu9v2Vwrx3PSYajH6io7S1XVsrq8+C6ygX4n7B7gz3rWN9ei+4is7LxFCnpzGAya9QkTL90ydNg3w2i2i38IB4vmm5Qv793YDusjjGwQP4A13mTyaR110GztOVz77+2NNqqFpMnWk1sKxZ4dQqTuIW6kV+Nix5P1OyG7S/asy3ZMi8XYTheZJzDV7kQOInuge45fH+HvE568LTh8Ow68Tzr9OOJ0+IH+OgAi8eIxJQPfxz0afqwV0oNucnypZpatXLAnOW+dEv5ktLvSNeuTNo3c9RXRCfia8jx8GBXRCCCGH0u2T5E6J8TQXxBhcaXXHU86K5trwOj9CRN/tdXVlJZoHSjAX8NfyjOVK47gQclde0QL57jfJK56zA2ga13rXglkuMB7qhPwg/tZZ7uLnv76rIs+EmKZZVu7uYCAnz8MjQy6853VViDpXbnNA6QfkQcib0vBCBzqmGxnNANVkphDAR1vPZ3Qjvyj0a8T4S6EXhXhAP6J14ywY9AwRgXcKPY3QT83h4HPhKaZ7iipl3dW37M+PeizM7VEU0Qn5QdAm8TAooBNCCDmc2Xs9iuZq5xPPfyjFYqtd2I5ZIZ7H763tdjUqjIC9Siu2mamTVqtmmyShXKfOX7Jc1+J5t4MXO0lb5uzawsMaZDtHQLAh+QAeaXTey7tbD171vN2KFK8ZVe3r5y3j0rsdrkPepeTu9ATwrXQ9s2I76O835vvCwnt4q5VtOE3tutVQ7hxo85pQQM90PRpbIZpbUV027s+V4vmU/ZMdL0LemOJ2bHTj1QFBDY+rRoFTl2Ouq1foqIDzwKfCjyO8H8Pc6hDo2QGnAYMTuJODP43wg2DEJYjowCSiQwBxpZf71udrfJYVMS6K2O4r+Wyfu2ITKzE5yjIbq23V06CjVU/0d+/3EPIobrnX2BR6GBTQCSGEHIo1RWleEj4liehJqI6qhtSi86xhr3Mv9NxLONBouScfbfQeryk3xSLriec5XW/724omhJC35u0MR/UOLoSB/PHH4gVJwvm9z82t+Sfhvb6vXkBYF7PTOfwpZF1EJ+Rd0BUBp5fe8t3TgtRTf/G9RsgxJEdvQaXcVp+Y7EOiAlEXPMY9MOICL5cwN/pvYJRLdJL4wPAhOJ1OGM4OOHuMw4gv+cJFvjD+vkxiuZjnUqqLB4kwnDshhOyHAjohhJA7UPeYkiE+jCouPM+ToJ7SWrE8MQvh3lDaDzHIWA/0KiR6nX0zXtnSMqk6LJWbn9hCGuK5rcesnCP2/VE9qYbH/obkN9EzfnOO3xvZe83wuJNvoBvBo0Ib7xP7mJ49P2Tx50ph1yQ+kJZ43tgP/eH35qpH0ezLPSqxsj6WXXuaf8ep2VzGQsJ6Vc+jfVFY/877pHafw7y9lX/3Rnu+Ii9sST+s6iuZLK7+pmflMzyS7XNzy6DhpagNs3mEO3n0itgaKaUWz9PG3XP6DSL7I1//L3qrH8Kt+37EcXuWJl9Bujcqm8OWuvY8mGsRvc5TFaLBE91piLqn3sOLA76C4u3h4dVjODu4s4MbBpxPZzgvGIcLoAL1gB89dPR5TvSmA4JWL/Da9CIhysziKS5c01s73z7Im80atwziXc18/oBcFNG3XuP3vo6f4T1HyHfyyPcSuRoK6IQQQg7FR5Fciw6UQMQFvdwJIC4vz+F0AUAVqn7BkCKTF1BLZBe5rj1hjeSCEEG9XrYW5iovr41BW6w+tWW2GniwtDnsMXjlFpQCGKpF1f4UhrZwnMLlEzzDtLUN2cCu0QgPKvcIHl3+Hl657nu5fd/zc6LIprbsmfytQVEBjNWz2j6updr2ypotL9NOmq003ICa67ctfivcepJD+LP63RjTsImjzpmgtOjm22NnAb3NV4X1bqOrUcaOOqrCq841BJnWh9/3FNiOztQhu+Flw3+rDIebnzOHVHnPeauzCf0EsQMgkl7a7CCMnfpsqdPene8d9+9qz24UsVffI538ltJv3cXVgW+N4opt6ro3+o95o+q5d/Tt+OhuyqPLf1Ve+bgt3JIClNd5Pa7EPE/D7yueVYrwaFVUz2DFKCO8BGsRBBjFAxLfUxeEV9YIqBvhxy+MfwguvwA5OeAM6N8H4HQCTiPw1wX4K4SAF3/B4B0GdVAovkQ706EHIV3SARCEudrtsfJoe7DXx7O1+7JwyWiRrJmpqEDldvf5Mrd2TYoZEK8V0Wuu2eaefQsKiuSdEATz6dJgJnI4FNAJIYQcjubOVloisQ/mwtxWLo46RrLphbe8+iWvAIMV0lurUz0W8zB52Ty780pVuTYaLNJYLtLuyujMOiPrHYtaPK8F9Js7Jp19+lZi5VteLdXIcoHEUyV5fXO8AkX1BR4lnqftH6XQvbIy+Mp138sB1+tMON+Qd8vbROoHTnp2N/IRLDyHaqHcfN/0EtuK2y9+vitHHDbrQW7zWzq3t4rorXKuRsvrRTrL0zLM2zmHXLf/qH4Xgvq8gEnwvnHnfWhTzQfazEq4E3tPeg8XB5im3739eNF38sxongZYAmkaCkXSfrQUDLqka6x6zh9KQ9jt1uVobtyXazf77ktq7Zm6luaa/Ah5EWRlMKAVcosmigJwztwGHfW4927xALyxsUChTqFiBi3Z117afIzb/hXSjRoe4sOfZ+A8AH8MkJPCiYcf4jvbe8iXQnTEyYdiL64sJtgKBFlVV7Oifv22XseLqnir/V8tr3+qdfoQc/R9O78trDyzpuaRNJYh2pbm78gtAwK2UB+Sndk1CtibwYuV+ww80py0tw6v/I6vm5BAKZ5zQMldoIBOCCHkPliBWqaOQSGY23/3ip2PFAjuOdpvlmdnuPOuwh/ZyrqX0ZgQQl4N9nZfgr1h1dfSNwXsg/Lesn1PbOrlXaffPBhwpR75i5bH/AXmU78OtoOOJnk7vt4j9eUqTAj5oaidbuGosc91Pq18FfBfQWz3CozeY1CP4Y8z5DTg5AYMf3zAw2HUT4y4QP81YgTwe4wx3Z3JXyXMvQ4B1EWbU4g6k8vvtX22DsyReqc2HopXErp21vVVdpMQQlpQQCeEEHI/knhe9SmSj0/ovmwIwX3l3NWbPM/XKGJaLeSaxXMtUuQBA9r20JoGFJittg7xzaFEj3RTfL1hu6o6HYrW8cyd/vp4EfKGHBGRgffQTupz0PE8J/dl7ToWBMG2NcL/qnI21CG/xu27q7H+Vq7Zfk0wXxPQtzrT9vKxUUulSpjCxyqAvwnwryc0xe5+Pt7qdbbR7ewnRuWZGfQrwceka+9+lai5TtC+eI8+nkuqzbNFDvih8HASUjJ1tHdkESw+V70iPaBfilEvGNXDxx7++U/B6XyCnB28OHxFl+kv9VCn8F8KeCNMF+MRJfz2Enar9kYXlML7VuoBf8XO119S2y45kCRP9Cd6P1dtueJn73V4VJmEEPKkUEAnhBByLCJhbmpJ3624Gf/NdtBy/vPvrmfx2UWRw/XWnuZLmj+0Coa2oUqzLK24/kQdqyfADoonhJDXYqs4wuf+vcmD2/4T2YCnrXmuU6+5p3G12gVbjIyFB5NZtuQJ3uKaS2VNi1sTypeWL3mptbyXlvTL1sYpzd8rRfQIr/RX8gQjE7dEaShEjT2Nyb3Rn47IhxBCHsA9++Ep/LtXwHuMeon6drCunM4nDOcBIh+QAfAnxfg5Ar898AnoJ/I87BqnvXMicCIhrL0KJAnpQPkq2PU4ti8YnX4utC9UNBR9lJf/HlptUphlaCyv19/CM+w7IYQsQAGdEELIoUgU0JPxN8xXbbyDo35+ZMj2nL9uHL9r5zpfU2F7onlTRFfTuZBCRK890fPvqrdQjEKeTUJV/f4RCvL110E6rq1LaNETfZYRDZaEXMW9ptrYku9LP+9qVXWL5zmfTzeR5kNKaXoAACAASURBVM5Ox9QK39GzSJwA8g8A/wztFPmPafvhhDy8r6VvOdc1iJ5cKEBESjtsI216RwVHa4nNB83r1Fzv6fZotXAEAifpM4QondpdIf1FfbkPhi8/zhf6C/LO195TX/+fLTz8s/VSXUsnmDzC6jKsdTUdVHt+/m6S3CKmp7LziVtpb92l/XBjnocY/V+Yav83OccVKzvqRho8W0zcetRB7onnK4OrZtV415NOCLk7xXtOio/8I//ueV5X2S0NuLMPby/xGewrET20eTAI3HmA++MEPSsuHwr9/Qn/W0OEmhTRZrTZe6RJ4Z0EQ9U41o2zjSPppPqytMmSiG490bOK/iBstJqlF+jSIEy+kgghPxQK6IRcxaOMt2yJkFdBim+zKzeJ53uv6VuFlGs3W7Fjraa/gZl4/hYiL4cdE0J+KrVgXq+7Zvkb8jeEHmtqVCQh3HpLu2obATAYl3I3hDT5VZMMwf8dabRf0XoRBXLA0DrryYisQEwbGjeXLEabEXbWIDx7zYkRjac6lFO+TKJ6uYPJ6Ooxqs1nEtWduMljKw1sTLnGtsWvOGAAmOzNOpyK8oqj8/GHHScIBfDhThjV4/Nf/1fcz38A+k/g43+EhL//b5QFVLtil/V+52Xp/MTvdV6CSUxP3Cqo17TqfRh77vl3bT+1jpmUazfr3nc9uSvlkW9DlIeekJfA5bYRvAdGD/30uLivcB8PwFnOcH+cMJxOOH8o9FcM4X7ycCOgvxX6pUFE9+HW99AsnjsnUB2g6qFxoKFpSt3AwsPFDtLrJHuZR1Nv/BchhPxgKKATspmm5eubYMuEvAY5XHu8Xaz3eaI0As+G4fYzXmCTN/tkmUbhgV6XMfP6nhVWrVupW/YyW39+dMXz2f6lDljHM+UNWBqEkTzwVrcReZMBCoQ8AS/tQX4U1fuveUje6Jn09/g5abjAgKmHagVXrZb5arlDKaz7/5qE9aRru9Q+EWRXdQEgzviDa/wvbqT/nOqrxrC6NvahPrdFG6SxPG/6D2jh1WUSzO6htD9lZVLtR1UMyRu+oRul96SYfwQuHEaZRiV0X5OxOqN6CAS//va/oMHHC6p/hu8K6K//DkAxRKH9j+EMgeDfn/8OmVz+32TZjgMkkjCuUzkalyUXtq7A3lj+d5SkdLWwLt0fDY+s3gl+AOmYrHnJ2/U/se2T783OTTi7d81Al5ZbpPU8n7lOFhndWNm1waPm+q/Lk2IF2cqalygh5EbiM+0IcTUPKnRQ8YA6YFRAFPqXx4gLLicBTsDHLwc9OYgb4D5OkK8RAsH508E7j4u7BBH9AsBrEMplCCYAL3AO8F6QYgZmfXvL86Bopyw0Dpvtler5L49/J+caNNoSzWPSeXX2MyaEkNeFAjohhJC7oqphTnQtZjyfDFzfYbDIBnPMOwVbGvp1J2dLR+DqSbqTZV6nDlnxWdW3Z6R/Oa7cAU5+Tgh5edbU1x/C3xEe8UP8nR7dQ5XOiqcjgqGzHmtXi86C0vO8Zdgbq3XF4f1nKWo3K9RhSTtN33t1k8aygn+ijEPfaDfV5FDT8wLHxUuqIeIl4VzmlT5JMmrPy7G76+CCoRsaQq1qWDs4h5MO+OvyGbb9vADyv+H+/B/wqsDv/yfuD6ZPewjSeU/7nLxJ6/ZQddi6YzX/Fj+PmD/9kaRQALdngJd99sxuXXsxVIKzvU9mIvqV5exGMQ+dQe5OHnhwxcDrI3nkbbZ3f170EbGbRx+3PeW/bHdZo8e4xil3AFXJDRr/5TH+HiGnL3ydHTAM8B+AOoF8nDAo8Of4gfHjC7//Jbj8dYH/twdGQL2HTwMLTXPHmSafCNqR3Fttidb5bYnKhS2ndsZ4HprV6dnKtorlR449I4SQB0EBnZCX4IUNG+RHUnuV95jmqq6u39qLe0N2M0/2Ne+ZwvZrPHNsPkWWWnzMqB15qhXNzRpir613OaBAsO55ju2jfa/iiXrYW66tlblJe97ptVf67qkECHk39g5e6UX66C3/MVRqXvMwKvovoCd6RtdYkdx+qvnz5u9/L+T1N7QFZusWZMVwq5X5ajs7cA5mm5SN8eBUnXTjmWDbqkvNkoCe8/jPXJ/ZXOVxeeERbmVqO37vqltk2plJk54OglYpNG0jUl6x8cclHfSlQX6tOsT6f40hb3EOTgTuH38D9G/xfCjw5/+EQqFqaq1AOrkndwrzuX/9BgYHjBfA/zMMuKi7Silkf33NwHxPy/8OZA/3eqcT/6qvpcZO73o+7nj2dR8bC8/VH/HMbY6MaSxL7f/ZA+A6tggDV+dX74O5kJ/4sf+y5Pt+7eDe6b545XP6ynV/JO923BZundlYr/rYFI/DaYBcXpzaeV+A/33BZQD07CCDh8JBPwBxDqePAR9/P+PLAReM8OrhLz6XoeqhKVcnoYlhy5YFEb3e15ymaygq3zktB5KjHjdHmYxn12yj/bPlun7BLg0hhPSggE7IZpL17hG8snGDvB22fyClSHnrlbxJsL/WM3nrqNl6k66d7rq9m4u36YDxfieE/ECKwUvv+qzbOEKrJf58F39D6ZH7DwQxMgnjCa3+xvj5WW2f5qP+FyaP31TO0q7VIvaaIa4luC/kX2Rnxe5kNG2VUX/vZVyL/UC8/sPc5ANcEJJlmm5ECu9uM9wri+txeRJ/ZFpWV0Cnr83l5eC9KoW4WP76waun5JkEeETbt8bLI4niilEVqopRfXQm0/m5TtZrY8l24nBRj5M4XFSAi8evP/4Bkf/AX//+P8Nm9RT09eGpjcv29+x8Vfv8D5SDNmZe6zvv012ba+OifVNSQ13NgtZ5T6wqJJ3t7glP5f04SmAihFQceGOJ5AFPqojOB0a0HQH/CaiM8PIb4gfgcoKMDu4jDNDTc0iHL4R26Ues4gVQrxgxmkFMOnVRknie1rTavfVuV+J7HsCZhGYx2+b+j+0TNfL8Cay13wkh5IWggE7IVbBHS0iLmcB9jRbcua2WRPNFj/aZwTp+dj3Pu4VUia9s/Xfq3wxjD6DwQF/Jo5Hp+zyeWseod6F1PNO3zEdPCDmedO8Foc7ch9kjo/LQ+AlY75Tmo6e2yH3Dvv8dwRM8iYIDyjDrf6KcY9wjGCEVyx7kLWz6raGy9z6iC68gmLZAnS6dE5kf9d57dcvpsdumsv1/hQ8n8Fb0FwHkP7MhNy8q/sP0b6yvaPReh6L0XDffijErkyj+AVOWSRj+dWjk1N716j6VuL+t9luKRuTjm9jD4y8jpnt4eFX4NN2Ppr+ginv9AgBcIMFjDILfn3+FWrn/FoztZxOPVdx0CfhoKB+GsOzrd/Bc/zQ7OIumXbdrK6+xf0jjgMiN4eAbHmlXb76w8U98rlrsM7ZeDhT3eUG+T3vHbmlExZ1pzofLtutu1u4VyxPMSUzIQ1m1Q+him2jeFkiCsm2cdNrGLubtffHuktQs+Az2INURGD0wKobxBDcKcPb4HL4wui+M5xH6S8soRR7QNL+Nn8pPrSQ1DcjCCmTF8O5OI7aDUj6dRLOBg6kgyeO+rmb3O35te2NXuyVfPlIJIS8MBXRCCCGHo2iI3Im641SvvkY472dSftblX4MZJTyLWLWnIzDbl0er4C9qmOOc6IR8D3vuMyk9WgXSiMLxU2m5rNh1S793YMVxIAiEKaw1APwfpmopvPotAvkSyeN8y6Wz9fLa+upszXfcSlvnJ1W6azS01natfOrl8l9FtUuN5z9iummD0IyS/CsL7JXabT3AgfC6PDmHv3IucXuxeQyQqCaX3vHIeUzVUXwUAj8g5p0s0Ug8adSCIf8a8Mek4McqK1QQhHQoPDx+6//P3pu2OY4b2cInQErKvap683jmzmv//191bb8zdru6uyr3lEgi7gcsDIAASS2ZygWnnixJJJYACAKBOAiAobmDRgftPde1INjF+6W7QLfiuM9afzfNooF5Fy6+mPCb7/07AITtRSJeTZBqD+eJay6dZztr/QPrQGPcd0CqT734B85/Ljj7o+A5sM3zeo7X6pjzldQik23wUedax6y3ffM+JKLxevdk4gWLGUaaAJBVTOWCTgZIizmEMToBrMFdB7QKzarDZtWANYOJwQsGsTJpVgC3DGy437UGzsZjB/Yxtd3JFohPwfXYDBU4nMff3xOy7WNk1cF7q4OCgoJ3i0KgFxQUFBTsjCHZTdFkL+UNQolrfdAUgc7WSym6mBMq/ZnIOinjzrPD9HLhwOMymb2bAJIoUzgRyxr+fPBDzT5esXFkbPHE1HnKM89ILyh41ziE8XPPNOSrGZDouXf2vXhMzhp7dizrBQxJniJv3TVHnGuY86KBwxLlKcjt2uc4U+61IC2RLgPDAzcTYZ3xNV4dN0bMzQGJvzg/wHpRR2GTuB3cY2B6x+6MvbJJbXMehFPoD4R39zlaiODq50LkJwSyHuJ5PQ2oqwWWagFFFU5JQcF4bCkm1LbREiqcOiO66xLcP4L3aO/AeOIOHXfoWKPRnfVak0T7XV+PC1s/7TfzuwJQXcB5rkOZLfYrqsxSAiKTJticu97eAC33Z69rjMPl68j1uFoOQayP2Kc/DkaIGCRukWRJUi+UIFNSKyb2IZTGssXUvTmRC5Lg9FwtifdGoO+7UPujEuhHrbc98z6EDp2Vn2eLFyzCo8jWQ+lE2PXPQT/b78ujGUBnlwmSkYe1BjcNuGW0qjHqTEVQS4WqVqCagAWB1xqaNHijoTUbHVm74vDoMCKvcGB/CctEcVihZxJTL/cgr9fcv6ftKsHt5D33jDm8BLzfxQQFBQXvDoVALygoKCg4KMxURijJkhCJ50iJ72S3/3SEedLr/IVJlcDG9lxgHq5gjuVIiJGz6xUUFBQcFHsYAQmUjP6xPNEltiyzI95qhCR5bIByn5IkbfGMnq8jeI48JSkvz1SXbSuzfi+JOGxOP5HX5qQvDb7x1uCDrcKj8GN5SrkydluPMb1A5ueJ8Lv8YgMWf4Dw1L4bhgUsES1/nyNQbAhouwYtNQABdyQK6dNhQ2JXCywUQakKCgorMtS6sotwKlKoGFiRAsiYNrjuyXUN4Ik1NF9a7/UOre6Mt7q+EfndmXIRmfeHGB2ADhd2QYAC2msT1B1ncAYTtkW/QCWHsed1Hl13YY/x3r5VPKcRPtW/HCpNzlyg+MUvOAjmVut7nFONHXk1J+5HxT719pbzdvn77y+ct1zYqOw8ghUUFIjsPjlkF9R1DL1hoO3QVtrYjk4BLA2BXi1qrGhpzkffENqqRUstWnRg3YDtwtKpYbwH2f+98QrDCuoVS3f0DjMHuwdxvDjRJf1eu/5jt+eCgoKCPVAI9IKCrbDvgP+BJx8F7wAxAUID+6whQhSC7bkIgkQ3ocSPwJA7IFmmlGwS6aR+Z7/LVdOUzstNYMSqZ7bxQjOXLE9iBfXgS/Q7Z1QdlMXy6yyukyvHvrOtd943pdrRRzYGHQTveYb/XhETVAj6t2w3wLlOagSDYNxvpyz6Vden+huDVUMizhRmH/ExL1ifbtTWZ9UTxCuypbXekWnyTHK5O4nbypLQW/oEjzkUcs++7lhdZep5Oq95J9NDJFxcbEdWy+cgSfcxD5jRxzZhVHZxFQVbhJo8KZ13Lr0ckT8XqXJI8pwA4C68Fr+LlUiI0e94gMRnMtOogcrbgbXaerQreL2m6xp0us/kzse/7duIex/oHFAVlKqwUgsoIhAUViDjVY4K4AVQAWswNC6gWaPVGq1uQ1LdH1R/L85OtdeWvqKA+gJYkEmbKhAp1ERQZIz8T10D3P1mgq8+Ad018Ighgvfc4iwOQ0a2mFiP9dVcvxP0p3Jxa66xv4ExflBuhPURDF9ReUaLl1qBkoqwax1Z4YIs5nRAiXFmW7yBx/qsyNbZrvrNG0KZ++yGY9bbrnmP6MRxV5nO11o+sjYGHvapUfxA1xde2cbVYmTeEQvqBertS75azLkv3iTCpI2O8kBQrFCtFBaLGsvlEmpJwArgmtHVXb87kxhDWDuCO84o/u4iuLhhXTCi6nHFjY+5iaxJTp7B4uJkVadk5Z056tnRshlEz9TpGnKMHnvmxxybniPvl+g2DiX3rrJ+dH3iNSB+BjkduGBvlCotKAAwtLjNmTDvkseuI1N3IBkKChCdZTnVroRFlZyiH8Kr/c4WpyqfB3v1390Uky0ibyQ1u4WaLbmUVmYbLe7P7hzKKaZ+XkT7jsVbj2712qWMVwTvGe4mAoHBWJDYVIXXAWHg5eg15jC+osQkeauZ5QEU9VdsWNlmNlgMRM+MY8/WCnZD1CcB6D1Fzc4f8t0x5LbphfOPvDcECWtWhlTc43k70ngMkkwb3vTlDGXLySQSkWcsuyiyzP53FM4nn7gucY7Qs9wF1QA6Bu5d/JweOTZuENIuz3OReZYvgbE+n8QXXy00DBPX6XSmichxviS+i09Hdvpz5hPyyC8qdS/zO7429Uwm70dlCJDRK+LPOXlz5jMVVl7zf5fw5grXP8nxnd027bcigcs+HX3bv37yNXSvhbqyxDpB2Z2PvL7p0tYM8N3wNY4M4/6ar6cLuxW8Au7MVvF0+ZMJ9vibCeuIee36WaEfp5DdNtXqqfepvjo2wqf6SVFBwfV5vnhvArH+Drb15n7v0tHNIIDmpOGxrW61Y/5yjlKQQa5+jjgmFhRsA+aesI1vAUM9yl8jcSmy48h4c/SUsXclY1fqc8spDGT/d0JycIsB0IJApwqL8xrLiwWWVwssrmpwzdCqw/rpCY+Pa+i7Dt0Nm0VtjwBaBbQVSANK22kLEdjrmkYfYaHbE7pwnsBGdZBznsE6g4ROFDymwI4kr5G4YMd98fg4jrsL5thbckHk/CgbLhM51tPm5HdIPEceLzFWHNsk8xpUibcs+64YUVFmxX3LZT8iigd6QcFAu8tpe2+7l4nPlZ4mTl8PPuKY+FKQW6VHd/pPMZliP2mR9csIzpQjl64Ll5gleONoH8/MSYwB0YsUExexfD5PSWbs22IiA6YziKY+nRDx+V0EDLwWs9kFFbelzB/IilNI8VeE8izeD0zfFXN7iSCJi+K7I5BzhjXGsJ98SQT9R0xsRr85JWeKLZNhx4zqIu5nDIcFdy558kxyN77kIMapQLZtWc8U3oAW5VV2qUgAWRI4xqjn7ciYLKcKLswjhHd7Zi4Rc2Up4jX1OxU+Ti+TFacuOpnjtRVjhtccCZ4LF+erIHS/SB4Xz/153lYQ4zJsBUBdAn7b9i8w/RihsuE67gBcAvqurzspAwDwrXn3NKCl4AqCYCcAn71+2hOxd72sDEOCB3yzPHPdasNr54n+GSCzLX1NChURtLG4o+UO3f3vJt75j8Yr/vG73V5eyH7yBbj/3tcNsXHgH9Q/9X2L83wL2pc00sd664ge+1rUgKR4iZcn0N9lY87N++dmvm9FvIF+9kMiO2i8qBQFBftCOjWYzzhA+jOw88SvQ06lnmNSnYUci9qPSSz7X2e6cfOZFsATwIqhK0a37EBLgE80dK2hK4ZaEaBrKA1oMke+8BPMwlVFYEU+6cDkQyTUTmMDY3eA+kS5/a70yUlXZCebQ5DZeZX07Y8y2A7b7OQ1J2hSjC371oHdreDd4Vj65GvRY7fFDLPAXmm8AcTc1lzsy4EVAr2goKCgII3Yq3DgZYiePJDcsTBgBx6MJGYWRNbjGiB7vXfUtpMBZvQe7K8QgXV6zIpN4xOSMikoKCgoGEfGxjQa9tj96if0My23kVCDDFE+htz4MmbRLHhxEEISPXV/6nvqt0SKaI/jxcbblHE8Wv8SprWlUjKxBtOT1jK83FEil1WuPAxjHMftoBwMoCMYgr2+QlWtQNXKkuPsS6a9d/ltn0dcJx0AvkmXQxrK3SIERYJgF2nAllcWor0GCNCKsXFEPQHgziwKsPGWqkZVLfGo234hgKu79TegouHuHKnH546FcAT/QyJMQUFBQcG7xtbdfkDGsriWCvd6wMzgtkW71tBVh0YpVKxAGwArBilCrRagJYEuKrTozOI13UE3DZgqAAqsWTDo5OvDk+iICHaIsPKSWMAlj3afhZe0E80hpXikHeydv8wnuibr4Tnqo6yFKygomEAh0AsKPgjeksd5wfMibgt+ZbI8Y3WKPPcTgYy26eyIPiuhbFsv8d5Z3J1nZVfxMgCeQZ17hTpB7O8MkSfHmnuUn7ydnQ2NzHpEOs4hqKCgoODZwP6/wTW/EcbsjoiCjxdFKs8UsTggJkdcQvaFI8s79CRVB+NAe5DOfW5FvzIr5rGx87OlRPuJvg/OwrS/HzBOoo+R5/La3F1w3HdvWORhsl5NotC2myvjwCKcCCMJ5dQRCy4NLX7HGFsAIA2l8n1OvdtVJEsHoL0xPHQcXgGogar+gkX9i/NXQwcNDY1Gd4bIdtu/ew/zhPySQO8YpI0yx66vddv5y3NWZblap/zdmgyU1SUXJuzm6VdDrtcrLNQZFFVQRNDM6Fibc9ZBWF//y+Rx+gXotCfo8RTVsyP5z+21e0RCQbTrVEVD3JP1cKR+JzWmFRQUvC8cyoZ1jH7qFcg+LUHG3gEgdU45ey9nEW1L8XJbt8v7s+1A4ndIZDN010GvGYo6aCZQQ8AJUK9q1KsKlVqgOqlBbQvoFqwZ2ioODDbjaWfsU/1COILzdGcOF+cN5SIvi7w+MDGxsMe51YDJuQ6HbSEYA3d4EMMMjjeeO4eTiexj9fc1qACvQISCgg+FY3FbhUAvKCgoKAiRI6YjhTqlX7OdYwAAk7MistDpLXmu7OpdMgOg3fxqMNHMDo3PQp5vicDGOGfS8pJLiAsKCgq2xMBg84r6qxxp7u9z9DsT7hD4hLD/Bwxh12Ho2Vn47CNi3wcfE+RI6B6JsADwEFlyHWGZXNgxnf2gvcWE8lT8HMaqKI6vACyjuA2G5XLbnxOMwVmLMHHeKbUoR96P8bmdCBOXIY6jAWyAbvPNRwMAJuplrwG1/IIFLVCpCpo1Wt2i7f4IFwbEsioWZUisjNQx8YyeXPfx4rLcABWhcWEJQPUJqGrg8Wtfhx1wtjgFFsCmW6JljeqE0DUN8Hjdpy0tzxe+8Ai85x9sgLFjN6bOa38J7K1Wlw66oKDg/WPnbjJBBveL/p97jpDo4OfqTw4dgEYbVaSD2b1mA9C5OTqFlhXqxQp8YrZB71gD3NgxnoFW/MGIwxpgmMVrEAS6XFTIXSx+oizxXMGPzW7sxXDMjuPG5X+JaZsd81OLIPqdJ/dL22YQloe5Py0sqzfvMaYfYkHeK5o2FxQUHB6FQC8oeBP42MTbxy35PpijUZO4Q2LlK5A7S3xSLyW3Ztdq/M6Y6AhmRVCKQBQevOlX23K/+DS1Ojc0Vo8T/AfH4JxcIYr7kjVku3eY9ptYFBQUFOwD2f8EfRdnVI1MfzUwYk2xeQfAWBfPwuAUXHfx9hgfrtATdARDGi4IuONwHMhlwcmK3Q6DtJ2VLhvg7cN7YO9Sd7u0R2m4o3Qbp+h3fN8h5h0fRrL156ZH11PlTj3mlEFZqByhmDxehrHrDGCdDu7VsfNPfdO8u56WM0bs5Z0i11PX3UWnhsWLD2p4kjnbJJgB60GODtDr72FxCcDJJc6XF7igynQFrPG9e0S3+WYXDFBYxVbV9dvASj0xkMM9rCg/B7+rhavcm/45u4UN1QUe2kdUqkatKiyoBhjQywrtojZEOgioKuDhd5NlfWk+n27C/C9E3g+5fjUydB+jDxq8IzNlGHjwFRQUFLw/jK07A6ZuwurWmXCDMT0zVgDzDEipyHN1lJTNys5t2OnvboeoBuhYo+EOdNKhPu8ARahOaixIA0ug3WygNx3QsCHdG/vXOX5bA5rERkG2npTQW7UoFgH9Vl/yWl9UHsyj7LzGhcstOkzV3WFWTEzfTdnGDqUK+LS41zlE+iQDynx3PRt5H+Gfc1v7goLnwMeml3ZGIdALCt4MnnNEHus9iybwNjHnuVH06X4mDMdbgzE88xxQRCCl/KpVt82lc1R3TTGwiQXfqZ+ESK/vo203hf2VD2HoLigoKHg+JLwfYnJttrHrFUDamhyBE3sQSGJnbl99AeAOxmv4AcboViPcjp3iPOYKuwtyria5tHMs3DvB7CJtU/YJdncueS4vH8owMWngjsNyPm9pgHRhd5UlZSu/t1uHVwDOP4U376+HEWJIb2yXX2rr9BQY+cUWLULZxRrO+uIHE+ThjzAtCaenPd7g/vHG7HzuritgefojLrHCEhU6aNx0G6ybr70HPok/l35u2/u5cDqzqx+6A8hw7J1i601/BVSGUF8tT7C++dXIcPYD0DU4W56j1Rqb5ibQwYPjAy7iPNnssPAaLG8E+G1fCwoKCgoGyPaOW+uuGV00nkcMbuxCnsdpbQd5RrliQGtra1oD6IAOHbRugM44kKhlBbVQWC6WWGCBh3tg8/BgdP+NEFEB1AKknQpl7VluLCJHpgs7mFs854uZWLAcc+fx4linP+TI86lpwjZ4jcOpLbtbjzwk8v1/RwERleNSC14W+6jh77WfeAEUAr2g4M1g155uanX+HObuHRpg3zsC7wr5jNMaNsWeJBnyJOYm0tDw2z4SAcpt2W6Ic7nAlsFG4ZRbYaaMeFK2V9Ye+zPk7YWBV5G9mSkTcW/TLigoKDgaGH3fnTqHLjUuvFR3PNr3CyOVW2Alo7kQOY/mMzZnATvCXBFwycC9DX8fBt++zPuS54n4sXEt+/kOsFe727IeAl0o0otSsgTEufy+xYguidX4+tS1ZPEIA0+wmMB115ZhMGxG5ATmFYthCOs2IsxrmLO9AeBxZlpAT3ZL3TCFbXbB8KQz0N4K4ty9b3KTpMp+nnzGUlXY3P0eBu+AzcPv+N2R5TZdVAAtP+FErcDQaHWHtmuB7qYn1QO9l8J0g7JF170xPbrh0vXk/A0Ac9R6a7emBzGgW6h6Bc3WyH/xA9BuAFUDapHMUQAAIABJREFUqgK5gjCbfW+fTDrc2XHhwuZ977yujtTf+N09ZhIwuZ2kCgoKCt4bUia/1L2UruN+eJsQB+E8dzOqcib0o4Qo5m58n/t8g+RiWXO/jX2JrIGFHNHNbLZj3wCMDi1tAAUssMCiXqJaKqhFjYYbdKjBG4ZWHeQxUf0UwgzExP2J7SwDUGJ8YiDQG2VFyDmMrI7AhhTW2iBNJOJvgwlD3+BOkjTed86TzS26E/uMM3hQqVvgEFO1olMUvCT2pYf2iX+o1/yNoRDoBQUFE3hHRtiPglFD1vTzJNBgl6kQY6OecKshBSgFqhQUKbsamDxpzmCw1mYy44yHUwZSPxl7C+1yMNMqKCgoeANwJDpelwqQMwbGRotEODP2ZNJc2e9um+1r7u+9asxiUwt2QY7UzoXd5nou3JzHOZVmTJBLpF6AFGE+573PGV/c7yq67s4ebUU4GXeOl7mMk1ywmPgdyxUjVw6d+N58x8aFc2edKvRl3URyEcDddzzabV+9frsETla/oCJztnqjW7Ttb+E57kKVHvRtE32df34yrCX6vRzra2gCngjGGqSusFido/n+K6gmnH36Tytbg07bMhJAp5fg7tZsa6sBXETEwNhRBc8BR+7sqmfH9VRQUFDwXrGN/mB/s/fkjm6SUBQIyA6mM/WgQRec08Fmqr2eB9YAKQVlSeWOGcwa2DDQaXRgdKRBFVCtFBbqBMvVAg0v0NESXd2BlPFYR8diVxky3utQZr2xJhC0SZsB46puBfR6S0rYqB7jxcspPnkimUG8bfCGxsOcGngcvA4pCgreBN5QPxOjEOgFBW8C+/Qyc7Tl8TAklb+CN4HAKSXplUPBR3718Q5wTUqR37ZdVcKdxxoFmYX3eSzeWwG79a+IPIhS5DkPy/gmFgIUFBS8Swy6HxZjRmSNIUr0VznPg2fozGNVRYqXI/yi4hAIfMnAioDfGXDnEv+RiHtw7LlUO2ldHPv8gJg9nkb6T+p2SjdK5UWZMNs8hkfkz0HPEeJzXrPI2Oo8dsL3KGd9njCC5wy4Dm3i/lhaVeZ+Kp0cgcwwe7VO1cvYs5HeV2Ph/JnkMOei+udBvff6Ev3ZqTLv6goaGk+bf/flU0B98gMuqxXWYGy6Ddruj36BgytTilSXcisMEXuUxXW2AYAbNI83QEXgCnhoHnGyWKFWFTp0qC5+Rtt1xht98QWLkxoEwub+156cZ/TbvbvsnptQd4/K7wS1K5H+gfvNgoKCdwqnp3A/PmX1nnjM73X+tJog09rDnXGq7931DHSr/DvfDCOdAjHbs8a1Gc8aBtYdumWD5lFBKWV3TSSszk7QqgYtFNA16DYN0ALcApoZSjl9iiyxrsy8AuJ6IA/655Bb/Ef9coVeZ7Ph3ZwlStonEOS545jmCPzJoXRkteLO4+mE/hZPTTm6PieNKeyjC4xNkQf2v92zKSg4Og7Qfo/1Cuzr11YI9IKCN4Pn6mZmkOcFbxeU/THQ673STv7KblBkvVXERESZDFm76YA9iyo4AzJF9L81CNmL53lBQcFbBLMgCKPPAEdcQpzKOh5CzgEogBVAN8YARbcEvuU0CfWswu6jSyUWNAzuf1Bk22fO6JqJP0hvX8G2bFySaPRkOqUNcNb2O5p3vIW7w+C8mNwimOjniK00F21MPI9KXIvjdxgSwhp5VVEhLUPqXU/KysHH6CuXzIN6Mhnot6l3abiyPN5gEy8CqIDLeoVHbvH09LVPcwFU9RcoUmh0C3TXhnSPvdUHzyhhaB997mR0dwbQANx8wyMA1AxUjLb+hKpaorv/A6gY6vwXdFr3z8PVvWubNcJn5bJ8BkL9A/d+BQUFBeOYw6dOkdG5NJMXOT9GvySoJ/g17PDL9rxz6/rADKDTwJrRVi00GLrTaJsWy89LnJyfokEFxQ10w+gWHbDRPV9OGjVVIKVACiCtgU4ZT/WBPBiSv36FL4Z6iuDDPZGuyBL0UdjgeeyxmMFHSyh9r8WkldNHj97mKFi/UM5DL3j1OKLyfJCsj/SKFQK9oOBN4Pl7uCmi/Bh97IBX3SGBj2hYmV1vY+ecj8ZDZFiMLKiVUfKVXcELslvn2q3ae89z3WcWGwDdpMLnQwg00zjf7ETigIiV4cRkZ7iimMP7iTRNET9iSy0oKDguaPv+crCjydiSe0T95p4kcnDGnx3gz9CfVe6IR8XALXoCi/vcA+nc1r+nHBI7ubPS9xB9d2+QIJFEOlPXPxjmeo/kzjr3v49o/HrA3o8v5n75DGniPWcIVzMFGCPW5yQh5YnTOol+r5H2sPbxuc93qttx92v0XuDuPO2pRQFbPRuxYKETGa9sOn5Le8K39b+sNzgBJxcAEX6sjUv37083QHdnotcAVpfWgn9r0nCLUV3ZU+S177qjih4rj9t2f3ONzp2hri6wbtao6yUWlz+j6RqcLE5AAB43jwApnNrfD3f/7MvewSxqup+stBfAoRbKFBQUFLxyzNKLovkAzR3EIcIlxpYk2TlpoBI6BAeXh313RvclkQ/DeJ2TXRzsyuY+NYMbhn7q0OoNdNOBlgRaKjAAVSnUiwX0CuiaFuhaM8/oCNrutGiSViBYD3fpLR5MlyihoCWKYS9wENctbhYJc1wfqTrZBgMjHwbbyjuZcxd29eJmmf9YOpn5JycFexlsS+Dvuc6hoGAvHLPdTb3eU9EP8e7s0U0UAr2goKDgPWIwCXqO9COl3a72JaVANfyZ54Ad7Cx5rlmeEQWxhbtV2J0CLVfmjnmXbeMl9BwYkCwHJl8KCgoKjonXtL3tBYC76No5AQ+WBI8NVhZD2xT1ffRLn9u7NbJWyJcW5P0h63l1RBL90I+VYBaTzMpnJPOzxLUHca/C8P0bI7KnmrQkWk8QWi3ird2dvuiN5NH9eOGAEtdtuc5O/gww8PD7/yYEi/NK3aBEX5nRD/3W7NzL4by4KwDNLVanP+OOG6zvvgYy/3DyZzyyxuPDfe+JXgFYXgKb2/TuBG6L9SRyRIlYfcToSXDcARXQbmw9qws8Nf8C6s/A+hogoK1/gZKLBxhmS/v6Aji5M9vaO5leff9bUFBQ8I5x0J14YiZxy1VokU1pWpkfSaeyY5B1VmCwHe2cfYrArEwerXHuaBsNPDZQpxXoRIFYQVGFagEsThTQGKd1NBogk6IGQZFJV4GhrYe79xZ32IL46WNaXZQTuo0njKNVf/uqr4PFytHv54RcZJArRLyQe7BAodjfCgoKngdHtA4UFLwWxIaDlCEh5Vq6bz7HRc7j9TXZyQFkj2ecF/k11fjLgQGwQvAwaYsHy3Pbu1vd67d+N0p7tVSgSqz6ZQZrgDWDtbbe5xye5Si97AKDK4WriJMrpDF8hXdCJIzcViswBHIY3P+gdFeR8kIPJiN2MCbM9/oqKCgo2BbMAFt2hSjRV8YeBGT6pNnnn7vrnDFg7KgHOe/ZJxv3HCZ9R7zEhJEzvAgRFKpALHY/OCcrojLr8Ho8DvmipYx9hHHX2RH4s06SAmJYn4ccQ+yzPOKwRETprRClkTX1mU9w+rtPX8cX0vkn8wzOp9ke2XTngEGuzgjWZBynL/JJ3KRd2+u2SJHyEnOqYGk+GAyQHhqtU2npxDVmQ9Iz/NbyJye/AAAUKTx8+9d4mqwSk5aJNiC95lPhSYQDsLr4GQCwfvja280ZWJ79CAajuf3Nx6nPf0D7+IdZbCDfIYIpfweEF2Oj9EBB72/L4ARj2Fcwf/UnoFpgpSoQEZ7aBmjXQFX7NFeLU5yrCn+sb4H21hDqN+NVlYR95L3ImRVUQTkjdMNLbwepcXwGxsiJggnoj2lcKHibUKHNL/nWp/QBEjcGO08h7P/ja37cGNH5p94hN67kjqMZ6GQJHa1KC2qKxn7coooBxaCKwWRkr35covq0QLWooeoaiitAV2juNmgeG3RPLfSmA1hBaXO2OrHZAl53OrRxSaI31hEyQxbJYdh98X/ymq8skQ7tbkDtVcfh1Ig5/RkUYB/dFZHtLSLIET/10L6WXLTwgnDLMvxOm6nqGUbaH4cq8u5TjuPl/VHxxtW31Drnl4Lec3pePNALCgpeL8jbhnaLvk/kN4zBEZfx/YH6uWUlRYZjkn8AlFJQFZkVuJqBjsx6XO5MXhoT53e+NciJxIg68AHbYkFBwSvDa1sll8K5/WRE21nbTvQeedLbI31fOp4XvFEcogm/9vdgL/kcqba1dvfyOIT3sfNUPwOwQH+uOpDeIj67noVAzrO9M+HWzVcf9vTLnwAAn9UKAPC17V3ku9s/AFCibxkh1AnmOZ99ApprDPqsRlyyn+ubr/3EqDLlO7n4GQDj6eGrWUzQAji5RKub/hx5BhbnP6G5+a3nNSr0ZDoP8xolWVOGYZdXew0oYK0A1J9BVQ1+vDN5Xf5oynH3K9aLK6C7NfFPr4AzMme8d7bst+msCwoKCgrmYfKIuPQaummIBVzp8K9Ax/IcvpDFkZsWFQHK7JcCAkNrs2i1u2/QcIPF+QkW5wr1YoXF6gSKa5BqsaE1NDZAB3DL5jNKG0BkyMwsZuQ4XP/bz1nk5MWHfZ46Tq2nCGSIP59NiKj1ZnZ89Gs92K4bOMokTyzQsBXH0ULugoICg7fM0bxh0QsKdkFO0Yivb+lBMEuBeQWKZMogl1sY+gqMi8dd0Hbk5Xxy5WJqle9YVEAs7RKrhylQNUUeGaJBpucNsUJ5V2RnHmS2bbefbhdKtuc/aW1W4w48z73AUkN3iceroN33aDV0SssfLOPd8hn4gocrW/1ncuUtetlzTSeeGMXX40lewfPjxSZZmXxSZ8yl2l0OH7XNHOK5fcR6i70Jc17lwZhDop25Pw6fQdz/ciafMYMPUX8+7pkNfB8FH+nmw2IMb5LwDmUpP3O+Tw8T7WXwHugUfZ8SLIGpdpjzAoV8HuhlCO5noqYzSjwaV+Y93rdsnY6Vm8aDJPu9qTixTkFRdUUR3bOk4MIguzz2qDMCSKU9wOelOvLQkzrTMNCk0X0k573V56msR0WPyv4ZfVlTXufJtLkPL3/LclXik4D/Pv0LoM37+I+7v5mwjUw46lujy8EP596g7TVprekSsrjf4pzS1aX1VN98NXJUNoLdOt57st987eVyZdpIo+/cDiShD7vuSdm06ytQvcRSVehYQ5HCptuYAA+/G0/A059RK0LTrE0i3Y0h1NdIL7YYEP9x/aT0dIkRnf3NYJd39c0X+ohIjZXzox4Ex3zkxy77R8XOU5axihf6q/sY6EozZDnkdEp6uysk9M9EeVI7LpJV+W2ZyJcztGeRMmecK2fXsnE61UDXHdTpEtX5Cc4/XeHk4gqaKnQMPD2tsVmvwesGerMBP23AmxZoW6BhYENAZwdvt0PLYNcrO0B2EAvZFAae9+6rxtBGoMWY52+N7CA09R5O2rB4fKzdW/+bsIsM74pgPO6Bvs+8f4bdQZHzQAcAttM3nmey2KfeDtG3Jqr9xfN/a3gP4/kRcbTmJnmIHRIrHugFHwxzX9Vt3qaxEeeVjAZSxIHSm5bxHfTLAA5QjryWtkfkGQgICElgJJId7rHUK97+TEj0dqIB8Rv+ViBLgvdkAwPQ/lQnSSQooFbgCuCqgqoAXmugYTtHsNu2azZ7piQHLEe5IzQUiuIEpHYQhrauZr8yNLvFcPQ9IFoS8g0zyFzPhZ9Ir+B5MfYuz5hsEfoNcvPNY4REoqidSblSdgL/XqK0nYIdkOgz/fgiSeC4s2aAqsA40McXCTLCtizHrtRrcEHAPUAXZAgSBeAJww09Uu9Dtq+NjS/ufRF9OYnPKGx+S3dXBivcgFylqC6k1WtX5HqVSIbg7O4oWFJPjdNNDb42ix2NTukxNkp87HrcBubEnZMlR585KMq3samyzdg+M1uv7J4YxZft50zNNpX8rGd5CIJojwSmok6Q/8H96z48/WSvubO3PUHucwaUMAIrUc+E0DDrDDDWU/0fm/8L99ROLn4GGPhZnaGzFfK/3/4+Xq64zwQM6exkdbfdMT/Wqxxt9A7brmZ9/Vt/jYGT81/wtP4KLBlogfWd80QngBjV+Rd0d3/0+RJMf6lhSIDRJseRni4+XT13ANobMFnPdMCch97e2U8bpXpEQwCqBaBbgC/trgK3wCnMAgDpme66Np9/qv8TnwNCndPxtsDz9Y+zUzpQOh8LuzsK7N5WDrUnyC6yHzPvQ+b/UbHTM3e2pIFXdDjw9T9DO5OJFR1ftLUsW8rN0Xdvs5H3I53a6qnx6UraRpLTEBD5ocmp+50GWNmt2BUBSgGbDnjqoFsG2g56VYEuT7C4OEW9qsGbDbB5QvP0CL6/h77TwGNnFqwpAI1dtKt0f7wJGNDyzBAyN9w4qQFiMuqjG4dlpSiYNJ2ZjwD2XuCDCVK6filtW5iEHN/lmBm3HZ1ob9tgRtzX3pO4xRr9o+Go/Wawo+o96xSy8Wz3Q7FFvV3sPdfbHXsd07sPAp2fg49k0AiFQC8oKCh4lcgYs4Fpo68k2iWB7uLKTxE+0NO5n+xqcrS5TUeRnQwo44Fu8yFmoLPbtrMg0EfL9PKj56TRalul4LVr8gWvE8GM3n6Pt0YD9puIFhQcA8G2foJ8uYIhUpyXOaHfot16F/JznF8Xj3+p+1NcsuSnYyvdLAFy4/mIYXMqTWEQnM46skoOouTr/XBEjxRqgjw/dHZvCVl5X4iCsAbm3eL6/3ZPYO6OB8lsUu+TvfabiHCG/rxzwG6HLgy/sRE/h8Bubd6rp9t/Awz8Q2T331/+AkWElnvD//98/3tYFpdOI8qmovsujI7uS0agw6DPe/r+Nfi9+PQTms1vnrj25LlNsz7/Ee3Nb2EeLs9cfUzVU8wbdHe91/vVD1ioGi1rVERor78Cqwvg9ztz/zOA+hJY3fZb3jfoFzLco6CgoKBgV0ysS5Pf51OcB1S+An3XrSAzN+I1vP6b243R6yWJgd0vFtCWUCeQnYcQAaw1dNPi6eER+voaK9KocYpaAfXJCbhW6BYVmrpCs7hHc3ePrmtQ1WTIcDjCno0dDQpg51BCvXwKABnSnQB7Frsoc0IPd0lkJzkfzXwQ21Vy2JdxnoFd5007xcqI/dEef0HBS6AQ6AUFBQW74AXIrf4MnQQkiZ5S+Nw2VMBQsYqJAoTmbIIslvA5V9T/VfBbt0MJEaxxsCfPWSyMjetszIheUHBEHHp779HjM8TENyDREb4eZSZU8NxIGh/GWGf5U1qwxAKQS4TEjiPMH0Uyc9r2nN0gcjvqbDNOG8tVPBD297bBc+gJQRlJLJgLhfM7VQwW3IVGw+nK31P2KW/h0et75J3ckv2A2OPZTnlv7bp9+kiG29/bdQyMvZN2SWBu3rP6Khb1Ke7L7cB/gRWXjYdzasOIgCiXMsRJx++XwT9u/q/54r2vgb98+SsA4G/r75YE/t5HjInypUhMno3udAXnaUcmbS+OI62D8IzGe6gDi6ufADCa5jefX3v7uwnrtp09vQIeb8Lz0vfpGtx40AFo7gBlHPbAQKtsuR/vwjJ/vwU+wZDnZz8AVQPo234nASdTaqv3goKCgo+OqV0nKfjo4xzLVCPMROE43t8Y3STIktCCakdyjPbhNMAE1mSnQwpaM7jpsLm/x4YYXCuc1RVWZyssV0vQagleLbGuFB4UQzdP6J4aqIqgNIFZeXK+YwYzAazMroyAsaGBeu9yL/BwTkXyd7K+ZJzouUnbW2p+g/52gMFi4ihAcp60h/64FzJt9ZDHvo2lJee+/lJmHplbpF1QUPCqUQj0goKCgmfBnppQaoUvx0p/zvAJObcYKn0ZwsLo2nKVK4Ot97k5w1AZ4rxSUJUy22Upmxiz3a6dwR3DebC7rYvC89a5nxwcU2FMKcFS8Q/OmeLASNlffybZCt4Mgl0Wxojyqfd2kEa8gt9O8EubKzgW/NDAYfOM2+SVHUc0zLnATzTsP+e2Yz9u7T5YEFG/laWXecSokcpKvsdunJhzVuS+yBmj5DmBGfLc3Ep5LXP6e+z5+xr7mjnGualnMeiTnwEjaU/aI62fUuYp7Z3/dNw9IrsFKHvlvat30IhOLDAYQ/9tP8+ETuosJK69BbvC+JSGefh+JFWGc0tQ3wMb4G+br8DyHv958v8BDCyWn30Cf3OEuyOs1wi90eNqsqTzIFfn4e0IeLeASaC5/R2eOWdg8fkn4BRo1pZQ3wC4v+nTO/lkvt9fm7TcFu27QpLpsPLVtkznF0C9QKVqVF8UGIyONVZqAV0tsO4W5rnUDaAUFtUS/IXQfv/VpHWXyrCgoKDgo0PojwMdRAQZDKvbju+HUCQp8LaWJxYFJ5rLsZnQH3kSly+2sTmblU+JUIGgVGWmLpqBpwbQD9goBXQd2vUp2rMVFguFqgLqhcLp+Qm4PTNceKvNEYZ26kEMVFBgUta2Zm1lui8DFPfTE7mQzy58ixc6hPMVZ49zP7kPk/yN8HcOIyqZlG1+hD3y2jWNjAe/R3CEzu76q1nLF+bDTp6pZF/jfKugoGCAQqAXFBQU7IORMyz3S9f/N58xC1bTOnI7Wv0oFTnJZZAlGWwYslMJBtvt2skYzmoFqiuoqjIEOgBobfLQHXSnjREvIFq4v5A51/nVIKXkFvL842Bbz7epdzNexBJ/D4iGKO+sKKXhFbwkZEN0fWF4CQTQZwAtwB0saRGRy45o8de2N1L0RPjc8FZEZ1mLya2UAWlMrCmZc6/zHJGzaacNgPGZ54Pb9goTR/fiByiuRwR6b5A85ko3A6mfZAJEvyfCpfrm1O9pwbYLPysNHvC1W/X6foHHVD75e7uf64z9m0sm78lkc+UeIFObznP5jMzW5meig2AyXtCj6XCYtyOtNyIDBoCLvqLWF/jfzR++T/rL1S/286/+/Nbf9RMebn61/acztGNYTrmrbSze2n5W6OvXe5OLSQHBeKeLuMtPP2OzFlvAO+LckfPnX0wa99+MZSnnxS8RG/HlNUZPfJ/fAQR0FdApAJUh1B/bFqpeAOs/TBrLL0D7Dbr6GV3XmHPTFcxnB+B6Qp6CgoKCd4nUmBiR59vuFDRUWTI4hEIg8vR/PYnOTjeUtiZgUC6jR4kdaZJl6G1VVCmQqsykxhHoTxs0rNG0G7TtGl17gpPTFU5PF6gXFap6BcYZiBlPt/doN9osImYAmkAgqEoZ0pwYmjXYnYleAVBszAKaQvuAPN5Nls+J7L+nnnXm4cTEegDq5xDM44+QEbWfPZ65m0/uFjutV8CVYYJEd5j0sM9JJxZySBnmVkcx7RQUvAkUAr2goKDgOeAJ6l01opTJNLVsVEyCRN6EfiIxXIzJ4ac9J92ft0QAuXOjFPWe53UF1Mqefa56STqYyYVmUMt9seWfFG4gSmYy81wYEOGJBQby3uARvvJFAAXbYe6kaqs0RdpxXrOTkO+F9El8BnkLPi4mjWcCciHRpb3mSJ3vcaJivBoYaihB1gpSe9Anm3bPwdg3LEjsa+1NZc7oFhPlcTIDA5X9PSDmwvF2cuyi7I/E5RnGykTGHFyPh12dCJnSL2JDEdC7vR4SmUobeC737WQ2jz/HDvxSusaO4NQzHEOKKKeosY+WObq/R/3sPZzOsuOPvEOi3CnVbTwPe+MR5oz0R3F9BaAGaGk7vsdb85wGBns2faKShDsDp5fw9Xx/Y+U8h+8fyRjM/+bPHbcMcgX89fSvwJe/4t/dIx5ay4Q/fOvzdaR4JxcJIfyeqwfXD8aEt+gfN+78dIvF55/RrMU13fYe6mzr7smmOUWkS5lSW6/HZ5tbQh0VoBWA5WcsFkujqi9/Rg0FVS9M1TOAkx8AUlheVeg00N38y8hUPNMLCgo+JCZsLq9GP5IDlSVA7ZjF8bwl0O24v5dSM4MvsT2o/9qRhnZe32QHHWKg1cDjBm3XQT8+oD1dYHO+xOpsiXpRQRODTivgcgkoAncAtwzeaKAFSANkj0CkzpaNtcicjZ0tcJN3c5HYDiDrgPtxW+rSKeKdEYzxIXryfDcM53fbRN3XxCazHpDZ2cInbKnbYlubb2K6sxeKWaig4EWQ7ToLCt4nXtAQ6O+9AkgRU4a2ggQSJPOLZh9bnRJddXz2qZgwDLcEFWnkti63RDqYoTptzztX0DUZwtwS6KQUFCkoBhQY2LRAq6GbBrrVZhdGp/gHW7dD2Ohlg0xZbqMCDIKIMscTqQEJEFfGSD2kCP5BOE6vb3Dxyzv1djB7d4fMM+VMQwjaZDSRDzzQ0U90E7YAHwaWYEy1x4/Y3A55ntmHgiCp3RfbBYcevpl2fQ5Qa5us25bdJyVIuICgsRfjPQlH36nM7328g6V9SqYdL5iam7cbh2QZs2dFzii3Tza8PzQAyRuRkWwooNUlujSBTvL3MFdmgt2CZlTm3ZDQnWcMycP7Ucc5d5eAOYub1G5tb3KnhJ3P+E6FQbqOcqrVjLzmVGMO2+wQkYw/MqXKeo6Fgfqmv+2uQeJlI4IhggFfGd4we+4WitoLaxdd9JvewjLVx5yZwBy141im5S1+WP0ZAHCpVgCAv62vgcdvw7Aynxx5zvFFBpYsFg2MpCmw/PwzAMZm828f9mT1C56u/228vwFAXZjzzFOySEvU3LPL/XMRnzWAkx9QVzUqIqy//QoQsPr0p152JqzXljnXt8ZT3num764P7L5bQzHBHRO7Prd9cKhnvovsx8z7kPl/VOz+zMfsR7nfMizmd488+LIfavQKiftUTs+mUDapz7rvhMRYKH+PyUkiPzIKADFQE1Cx0Q9rBk5qVOdLnF6dYnW+RFUTOmY8fFujfWiNA/taQz+2RlfoAAWFChVYa7RtA8Oya7uzjNUHdCXGazH/Dz5h7W3R8uLkuB/Vg0w7Krech2RrKPc+7/Po9202sl7GMhjtiyYae7bcoxmPZGfz0wzo3TSR0rMeCYeq+GM+9F3VoEPkfywznEY/58rNlSzP+IjFAAAgAElEQVRy0+vyzhV8IBQCvRDocxFpmC9eT5EiJpVf8v+lDfe2Z495ujA9aRh2n3aSAIbfvqpWQFUBFYErBVZGsSYiKGaojoG2A5oO3HTgtkMH4Sk4ICikGKl3J9NQB4bgqNyHINBTTEWOPE9k4+OWd+rt4JAEetBGRTuOrwdNldK2jaSIot1yJvBHQSHQd0TcVnsDVJZAvwRwC+MsedtHM0YekRYn+uKgircwLnBurNrymQ0Wq0TiuPQnSCKbWJ6Q9O81Zd5H7oesiRc2NpIasVMyRX0HZYRLEuiRkTElL1xVVDi87jyiN2/Tt+1KnqfipnQO2q3tvQiBnmuL7vfY/Yl8vCq4A/xxCTtibwJdNFWeMIykBYBvDwRYJ3Hqs7XGa1NMNp7psO9oC2NU5zhBAZ0w5rPNqO+ARb8qI9/5i/999Rd/1cn19+u/ifgin1zfF4ipDSkAAMsr83l/A5x/Nt9vv4/0jezvGUId2LRfAQ2slub3+vqr2dL+aRg1wFwSHeiJdAmC6bLOvmBVLdFwB82MJRkyYvP9V7u1+zlACsvVKTZtZ+Rfb4Bv27umF0LxbaIQ6C+X9yHz/6jY75lHukxKF8rqtyP3fEap34m58baoRHyi/ugSp6S4sjjiOZpzuOMI/Tjr5ErageL4KrCxqUpBVQqaNDRpgFpAaWClQKcV6rMFFmdLVKsaVFdouYbWBNUp6HWH9n6D7r4BP3aGROcK0AzWrdnGXbd9fbEyBLqrRrc9vdvxy18jX65AZRhbDBw0iahevAAzdP6x93mfV32vuDyx681E4nPyHi33xJY7yXfB2UsBmrtjTyrr0r++PA5V5bv0kcfM+1D5H8sMVwj0goJtUAj0QqDPRcbYv7UBf9fsZ5ANMXmeZt2Gz94rykJZjo3/CkCtoBa1IdKrCkwETWxFY1SaoVo221m1HdB24FYbAt2RK7EsQbFS72OmoQ4mb3HZg8L39yRyEwoW9SCiD9JLzEOH2MPyXPDy2JdAj/uJmMSi6HrcVpOTpZxSl5rwFxRsA4661n7syBLoyl3kyItb9MHy0mj/N2Nc80FndbihLLnL8dbgcdKjHio2oVTZBkZGWRfDMYkG1xNJJW4nu4n4OQzydf1IZ/5kxGB7xRFSDAC4Qn/Y8SExrTeTkK0vbqa8cV+bnQ3n6isVP35fhuFzRu2teuld9crUu+xyHxi9x/MIFnbMtJ8mYd+l9KKPGRiZUk0SCNGz58F7PJFvZEt3gtAZheeLszXKawz7qVPqr7UuXUkkCAMvI+x7AjnPY2HCfAB4Ql0Bf7n4qw/3wA2+d4apbh5+N2E0h1Hj7yzaOyOUTUJ2RrLsqbAMrL78jHVrt3vvgNXqZ0OmA8AJ+q3eXRm3IdCDvGz+1qHfl68GsPpkyIl6BVzb+rBnpC9P/4ROa3Rda7bN1baA//qGuSiE4ttEIdBfLu9D5v9RsVu9p3Qo5HXZVBYqFW7KviK+7POaOcLc5e1k94Q59b+tp7ivJ2IA2ozXLMYo9z25G6MUVgFU+UVv9aJGVVfQ6NChg+YGoM6MJUsAJwp0UqM+XaA+OwVdXoIWKyy4Bm80NrdPaK6f0N0+gdcaaI2dTDGDuxasW/jBVwsCHbDjN4txnMU4TUE1M9CPY/2V4U/pzR7cdwrgmN1jBPu851tMEbN570FCZxKdJ1O8y1oOWYcM2F34d+vbR/vX0vU+Dw5Vr/t17S+f96HyP5a5fE8CvZyBXlBQUPBc2GtgSGmRsaE4/d3Y66yynVLUBpeicDXZM88VqLbnNFWq3wrMKvG6s8q81ubPKnCc84TzwqXK+8KjaHL1MQ+JFnGroGAIyjTdxPVUuOz7UFDwHNiywXnDmTTWQBiuojQHi7rkBGWuEcL+58gm9heHZckOG1H4XLHd9SCdlFFtIr85wxf1KQtuLpmrvD9W/FkZkzOG+YeXCJSor1GL6p7IjbPJTnOk0cQixoTxlCHvWJP3vZCooxTJv5X3fKyn7TEoEYH3sWBmCfSx9z2KD+N3ZtpZbFmOw1qcoe/v7uy9c6MbM9m0HBnu68fqwP7dUmaLViZ7Zrrtv7o+uCmHfDbiPqHf9ry5TzT98+j3hUnLnZ1O96hOvgAA/qu2XuSXF/j7zd/69GUnlHrM7tqJ/d4I+WDryFmP1rIQ6X5z/f2rv7X68ktfDJvm8tPP2Fx/7dfonGF3Eh0i7qn9bAA01/a53QGnF8BihUVVodUaCgSQQqesAK0lzn8EsPgMrL+brd7js9gLCgoK3hpy89Ax5NTGII2IjPDhDzHJFQSHlIVgj9lJKA2q/+0dOjxZLOYpkkiPbFekzPFFjA7QGqw1uLO6hROECOjYLJZbM5g7aCa0qgXONJYnCovlCsuzGji7QHP6hPvlHTa3D2jv1+CNhgZb3aPq50rZBQ7Ul4HSD4ZAYEXD8r4VY8Neermtl8GEamaGuTlDnMbYfHIP7Hr2vFs0UhYpFRQ8PwqBXlBQUHBAeCVm31W3WYN59CmJc5JB2UmRSCD900xGLHm+INBCARWB7HlTpGEmCloDLYM1o+sYpDs/CeHAOjeSL8cXDmTJnkMqxOR54IG+wwrO5OSr4E1j9ha75r9kk5bpSDIxm9cYWZgIXyZKHxc79zXGmBKYU87gz72lCgAp+FX0HE3IXTse7PEctXMVhWEGWPfbF0/KCNGvZjveMN8AMXkajUuyAoK4KSJZfj/Au0fjbzil7o8+7ugmD74kEpC/OQxL8e9JAfbAOJHOYGMMTAaJnmVyG9IRuSc90fNR80kKo+0htnBPKXfx/cG2pUDSACvTG5WJR7dRn8beFsTI+D6WckLIgeFe9AVx8HP07duR58TA55xMHC0kYqsYWyM82YCOeGZh7F4JEqCysq3heXdfuBZhdxW8xvf2Qkyk28D6At3DdwDA37HBn64Mmf6nq/+Dyhbwf+/+DrRRfaQe2Rr9YlonuyOnnYyKoK5+Apihv39NJCLKAUumywsXV9i0G+DiCuhusVz9jI1ugcU3k36L+WR6rBe5s9z9Wgd7/+4OwB2aSwA18EQXwGJp5jVKgZY/gbvGlvM7UF0Ap3fAxSXwdCvOTC8oKCh47Yj1pPTtrcf72O4xukvbPvMVhOOhy1sDnkCW60N9OLJDsR1EifrxOPZSluOsP66lP66ws+M7d2I7eBdWKZOWs411HTpN0KoBnbfAKaNeLHB6cobTaoXmbI2qqnFHwEPTmJ1POng9jqzGy06vczv6SK/6gETvK8bXNBFIJ/TmnH3hNdkU9p1qJE2QWyY6OQHL2HfjeLvM0/d8VbI7Q4zpegUFBVuhEOgFBQUFrxGBQm//k5+WqMjZtp0h1xP6Tj8OwoqJj9wSqyJgQcZ4phTY5qPZrMBFq4HOkiHa8CLkF/EK66ewX5rMU4V8TRDCzlQyg6LtM08seLPI2PoTAbYAR5/JdOl1THgL3jYe0G9/6IigXLNSdls/O/4Mt8smS56rkEy0HgGEkbRhSUfXrqWRKOU6GhnusuRlbOjb+ZURLzKlZHql8PY+aUgdewiyw8oQjy+INHkef9JhZHxV4/eEMH6Xh8y9ndvnAdr2S70fg7KL9uoI7qALETJ9ivoDgjhfVWQQLxSS2/25sLluSm6RurafCsajGWy8vBuINCPdGTCe1DEZjPuETffcxj+3Mmv8evPNku6mbH8+/2/8+eK/AWb88+4fvWe5QuhlDhgLkSvXBobM9nn1X/X1b0Z+50EepzOGu5sgzU3dAtwCp5dAdwtcfAFq6xF+k05iZ9zaz9M7s418DaC+gFqdgmpzsH2rfjSCNQB+vTWLzX65MnXycNOnUVBQUPBakdUTZsZ1ertb3TkWb2pr9y0RaKM+bzGPkJ9ivRxpDVawhHMvG9kA7IxWDPidaiKw7qDtFvAACWd1ApGCAoFhd2ds7dhujWJMDXj1iE7V6LAAqSVOry5xdrmAajrQZoPN/R26lrwcRARiKyMYIOuSEtQhwS8qji6bS2TX8UWKCUfxWYYJg+6NY06PfNmPhf0Kr7EHh57g+cMXCMd9NgUF7wSFQC8oKCg4AOKzqcx5splVinMgjXopoiA28okPRz70t0MSPdCegvOjlCDQlfld2UmDZjA74tz9wZ8BGXiekyFQjBzDLENZX5XFGmaiMVMmMakxOmlh0N88ZnueR+FyBoo4fGxMkOkMDAK5WU52RUpBwXy4ZuQ8LzVn2rEYX9zY48YKIFzIYT0wSdmdS9DzWNAKoA65LeqY2YybWRJdimTGGZLnHUJGo+GZcI5EJgh55T1k3//BWCotdXMRlCcDounXfiz9yQiU7jaSz1yM6Xt53G87JmaeAUUeNTF5PtdwO+l5LonVeeUe6H/uv4l2NSPh/G+fSSr9vC4yfY64/W+fbdyTMs2F1E+n8shd477+3fseh71hQ6JL72+CsIyQ78+kbk0gsDv73PWXznjPLIZ6cV8DJHZn9Rk+ITKGi+fm8lzDyHgCQ6THeoIPew+fob/nSHUAmvHP63+Y8i0/ASef8afFpS/Xr9//Eabd2jwJQy/wqHsAo/foI/Tb0G+wHa7FueOXn01i55+A9hr4z8/A/XdTF/OPJ5/GA0R93aG7uDOLAZZXQFWZe4ufgIvfzNb+1Y0p6xLAnz6Z7eEPKU9BQUHBoUFhty2vz4bXYfPxYv2C3QC4I+QQC/CQRE/9Qah/VT9QmWmDsuO0nR9obT/D2iEA2h1RCGUXBgOaGYqcf7oZ51kzWGmwO59cAyAN3K3RqRoNaujlKZafCMuTJejyDJuHe1yfLLB52oC7zsax8yomIx9psfbP1r3zupf6QkrXCvSf6Fpw302aonspvOCC/Uk9NYNJu2tchESZBm14cm4V66x72AE53jl0CwT2JA5lkc84JV4xJxUUzEYh0AsKCgqeC3voUIFxWHwawgADJU1yvkTUH10r0htOnKziLchzUsqcnVSZM5RYkfUoMZMET553OU07IucDosJNvPj1KmuvVa6C1wv/PmbuFRS8Fsi26oxNGuNteJAG9X8uUYruVQSY02VNVmQz2uNo5Dh/8n+xwSMcm5I8aGxJTFoWowiH8GqYOu7jxY4DOXLHRMgsVIuvZR7Mc4h/8DQPQEKPJB28d6l7eygzzkb+rkFkPIiJgB9tH6JgyHGpb7sjjBgA24WxGr3R3em5boFOwoWIbBi/sDb1fNw7Iftnqcg/Rely4nuSVI/QwhDSAH7FNc4u/wMA4+zyP/DQWqb8/rrPM5BvmFwSjYizgCGkHxPh4vQkUW+3ogcA/ACg+w6cfQK6a+A/LoG1df8+NHl9577cmJ3ya/t3+QNwpVCRQtdujHzttWlDP8Gcl775DvxxYHkKCgoKXjPG9NX9VBEzNYnGtQHFaBev9fMZNoS3m+OIOQspgNiQ1Ib4hiHRiTHwRCcASkGpChVVZtNF5mA9nl8QzGZsADG07qBbABuGvl9jrYEntUBzfonF2TkWRFjVNZaLGs2yQtdavQPkZYM5GX2H+ooneAgXHAT2t1hxkET6yCqJVwwSevGLnwfuFed3rz0XFHxoFAK9oOBZMbVqrWAcb1AJcYrbzHADBBMFR56LOJI8l6R5Kk/vLReHsXHdtr2KgEr1xsKawFUFOI8vu0oX7P5YGAyjMgVEjJhlBIbByPArFU6vs0eFC76LRQVzXqk4/Vnh5yEMWt7vNw+WbwtG3tOe6DLN2W26lpjYkwuf6RymOCMpk5sIz8EgWCbeUbc72xGHmBi/xXI7TJVfFk2JTllH/bbf3tASO96AxOl+lyDIcxJ9sHhfbH7OAz1oztYzPK750IxjY3hPl2iwcMS5sp+QXuhs/+8LSa5sMqMc+QhOvyZyXONQWv+SB+8mhdfjNGPvgIEYor84ajN9xswp+8MbAeWuLhwHnVqE4H8ns4iuSWNhio2M8hx4WeW4zYn6m6xe2bZkHPEu5tLK1M+AY00GIxF/277WGH93198pI3uCcE5dTyaZMIw7HRgAOa72TwDOP/ktUGl9a/oYt325ts+DGeh6zhya+h08gET/HOU9EFuUVy4y6hAavJX4XIhwjpwe0w8yht2Hm3/aMhj24fzyz8CnUwDA/fU/+63Zqyi6JNfThTLYoK/vE3vtt7SIWXhS+hr4AuC0Bk6/AO03LP7rJzR3v80/mzy5G1CmzuT6g4vfgRrolldAtQBd/gTmDrj9Bv6NgfNvJvzPF4CqgIfrmVu8v8F57puHHVOOdgTSPvkeQvb98j9e3m8d++lTO/um5jyUs+F3yML/l9CGKL6WwEAxQU+Mj2bqwsGMYcre0GznIiK4XHDrROoUWHGfj/9gP25RZecznfU2N4n1IjDM1us2fdZkjjpcM7Rusdl0eFQLPFzdorJzF1UrLE9XaJoODTbQawZvhPZpyX239thcdAS3k43MnC1XRbGOLXUJb5uIPl3YI+8OuYf2KKaQfRm26bOmw061yajuMrrXTumHGSWvjsaeUuvfavf8hs05R8cxn/m+ee/x3CffFYucSeitvioFe+Gj9jT7ljsXf266R6h3En/J+6+5LRyie9ojjV3qLLiVMCJK42cKjpx2xEQwqeiNpm6VpQsy5MpY6NnmvCZnmGRioxtXBFop0IKABYGVOReKlEJFNXSnobsOaDTQdmZC0LI3HvrJTazA88D/HYOGKJV4s0d8z9tIcsZGZVlnsTHU16utG7dwQE6IAtI/MpwFP7d4H+JK98/2Nb9TBQFyC0Hmklc2bEj4+MRloHDCbb+EWcsJud2qDsOJfThBG+nfUqRdnI6bhL8mzNmK+aMS6G4P4GSbRV8mBYBMP0yuj3bhVB85bK+iTfmxxqZhSXNW1KetyPa3if7evRdyvOs0uGnMUSC+LMgYFyhom8ZzU3vDkXtT/Bbu1Kfjtm5nl4c85zB4PbczUvTOBXLwimWP2tQYwQlkxpvEtdH31I2pmUbhFr5lwRP93JgCmQqeMh5l0pWdYXDZ9qczqyfId7Btv4gXE+CUCDjZ54884xExB9UwSIaCcCTfc/secXLxikgwqM8RCQjo3boSY90g7aSWGUg7DB9mJ++xDDNot8r3OyYyR1k4RTGUi119SVEJdqFon7Q/51xF9wiGJK4B2CMo6IuQs+X+2KLO/NYdG724s3+t6hutNEgzeg/2oL9zz3jsneH8vdqVh/oz1lMY6AKJAMwgdxyTAlDbDk927/IsdCm3dv9N9KnyudyNBZyJLzBEevet3y6eGPg9k28KfpveLXABYAWg/gxUNWpSaNsNoDvgq2XNLwGcXZln8nB7mPK+O+yjgxXz5cfDvjr7EdsMpcbkuRiTe0aaldMbMulQ5ru8Fs9HAdPXEgGkksXrx3kxGEbEs/nodZ3h9FZoC7Gccn7hvM7l3KECsKB+oRwRFKme6LbzKdYamu1W7t4WJQQiBSJlp19iPsVOCFMPyjqeuOJWxMYhpQbqixXOf/yE0x8vsbw8AyqFttNo1g02Dxts7tbY3K3RPTbo1i24aYG2BTpre3PV2NnxiiooUmab+U4nlGUhm1c3OCxbyibmbXqJhiDjjiIxR90G+8zNM9OZASnOgy8GOmrjW7+zot6HmcVSJfK31yfrT7xHczDx3NgfyRkk778nXkkRGX5KcgykVOiXzfwAeOvyHwu71puG3e0jHH/monigf0jso8R9ZLyResspv2+RLHDYec6RM/ptk3dSFZtRnwxAD2kuBsZX4wqZSR7OGKRi9RUKFQdp2Cf7k5zBjkBUhYbDBUEtK9BKAUtAKwajA2kCdQB1bMnzVpDn6LWVQBl3GpZT2GPrsJXYk9v2uo4UdwCE6Hxd+8nBKzhpnu4vexJFTBpyYZNpZ/CGX6mCEfh3FJh8yLlXOfZuclu4ukmPmF/JM92C85yBsN8IvmdmiROQW+G9Kr15dFGSuHc0j6FXBOHBzWfoz3BVznAEgMgS5+gJZiKAGHpsW+mgj1TCQGWMTr5b91siKpBSURIcJNe3dQJnib14vCD/Jz3MmXR/v0/WXhP2oBwkyTpHJxJeuH6xAWFkLInTFb9zxQ6SyMlEIwUbM864JJ/pvZlTh1lblK2AcxhDpyM26cIcKaM10N0D91N9cOZZDIo81CnMZ8oa1McZnunpbpEMlpArmXtwJVSThJXKTegzRiz3GrG84eVx75h8LyNdmBCWW77XQRpx3FR7j+Oa62HRnLbKYng1jT/eNdVcr4V89lxx4uhZhd9tasYoYvs8tqokVWSqo0Lf1pS537c7NtcqNtu8XppzSAHbpy3hyXPnoW52f7Ul7SjsG1y5KhPPSYilvb5JlFtF5Upx0rIRdLBHLMEQuvKRO6/0+P2T7SqYM7CvR2gjn7+9tJ81ASf23PS7274DJqFf5xA/ugv7fR9i+RuAb3YP988AziyZ/gW95/xvE7rSLnr8nf07/w4sgHb5CagqUFWDP92aZ3IL4PYGOIN5Nu689LLFe4+95vYFHw8z9bZk1FfQZnZu73um6YfzgUVqmE78icRw4XQCP5b0242nF5O7m6EuLIfLAGL6Hd4WulswleA+sB3j7Ey7NwNa72uWZ1bZMQ9+W3eAmcQY7nLvwP3AD2veg1cyrAxGFzBzJcU2Tc3QHbBRDVp1g0fqsCKNs6sLnFyd41TVQKexvl3j8foeTzcPeLy+R/f0hO7RspoM9AYw7WtCKbMbRKBHDuxYseIoA8U685RdIVJKkwaKOM9dkUtg4j2mUEqW+tisfFLzgW0KIxaOD/LIyO6mpW4Xo1yWiTnFbMmm+k1i8a6EMlD0PRDjFXSrBQU7ITetnYFCoBcUFBS8JOZqO9LIm1kNyeHPYRgC3HbpxuMc3msQFUC1AtWVNS4qKKXBjnjpAE86a5gtKoF+C+DkgBPNvGLjcIzYeCjmJtlqmqnLMu8xMhYUzMFgkjQCS9gxDInu+Lvey3zE6OCyKU25AACJMYEeYLzCHRyDbNsmyXFkYIwKUk1c69NibcYGM34MCfN414+QRHf3Z3r5bWkgdelnt91zDP4x3p8ceb4t5hL+ybh75r0PpvI+gz1j2G57TMb7+IoUblgDlQLuD+C6OfCodtf9fwlh93to5tXJpDF4lpSoKktm+sUjzugrRXO/xUX3272n/r2QFvHx9hQudJT1E8Uhe33uAihX34HlPH42KcNvT/CKKxGM8ZFqAkGBiaHsEUVUm7NPUcHquwSqjWwsHN6ZGJq0SedJlFsDfKV7Iv+MjE7cMNSNBrcVNDTYbtvay889wc0wW5h3tognNoyr4yeEXeSJiAdEW6YnsM68bDFxHf92GLMjb8T37hY4+QRcfgJu5u6bPiLXmcg7cWT7bHwH8N2Q6Yv/+gkA0DS/mQU6Jxh6pUsM5lkz4eW9Bi4AXsF4xKsKuLP71FcwZ8J/s3X1I8x56evvhz+/vaCgoODAIPFf2EtKxi2KQ3bBbMqRxanj8fjDqdRiNm+anHU7UxnPQmvDsnYwt8jOb+cuvNMN3MJhNmS7XEzviWzuKyUwNTEI/UJ5MIxnrwK41ejWG2zuK/CiwqJe4vLiCp+vPuHz1Rd06w5Pt4/49u/f8ds/v+Lu23c8NtdmDR0RFBQqVtBo0bE9K107HVM4nQD5udA2yNkcii3i/SL22bKY+7hLsyj4KCgEekHBm8DUsDStUBZEoKGKLpGt8W2M2NJmHxsIs7ba3iBKzntcxg08hAbCIWkRIxLeNsps51URaEGgujLf7RZfxgFGm7OeOu49YOT2PvF8KDDexgbWQPhx3j0g4B2hKJBYGZlIJNxhN0v2j1wv+IDIvZA5I38YNtuU/OpnSpLogwaa2jbNx43EnLmYRMrpiItX1/RlPY3df448d8VL7uriSIY7GFIxtj5J1+tBHxyllWo3kkiMPXp9eIZ365PEVsRNpxYv+a0Pd0RgEArIN5h3ip0cnMlnz2fFgy8+7yzcVpXk+oc4rr0Up/HqXs4RxHWdqo+xqn+A2epY38G4pBp28YYI0LeGeNq1PpJ6xUg4qawN4srwc9uS0IuiyzyqJ0XXJHEufntuO7jf649h/BmK0ECkfsBhp7Mm+42RMgzKkhxZE2HDq5yS0Rnm4x0EFABlF+0oo9sO/hQBtfUUEl7oGmw80CgsDpMG3apeD9YA/aQApY0+bY3yvCGAdNSWrB69tGN4Zevygfs8TgA+FXEAs1Wre6ZrACdROacIdZncnHdINpFhF96jBfBoyeAa5ix2RtrjHSPXpHzAfuR5hOZ/+kPWF//5M5qnr4a4fgJw8Qn4VRL/jhDZc4y4t39n343HuUtvBU/gALAe6Nfmwp8uAVLA/XXZ4n0bvKTuVfA+8JbbzDayZ8MOFJ0t0hTRkjuCRcoB9WMo68jeJRfXZrILphxybjLpRZvQpQMR2djCCMkxzh8JZS9qUmDZebtjoLRMM5EHazHHt/N3zeCmQ/uwhlaEk9UpeKOxqlb48ctPqFCh+bTBql5BtwA6Rvu4RrteG62YCWAF0pXZHdLa48jOIcjqmzpVqyllK+tkwmGdx3MvGT/ZpA4xgZmrtIzlt8/7fuS+ghJ1/yL5jtx7jmo+JJ5h2l9QkEMh0AsK3gW2ZlI+Nl6sqhIZJfjt4Ic3iLqzZ+ENekm4eykvI58ejOeggjHe1cpsxVhXQF2Zsx4JYGgQK3MeVKfNdkKah8Q5i7ylcTow8EoZEpMaGdZNMtw+Qf78Je6z2RaJOUFBQRoRuSAm0OFvaSCIok9mwe5lhiPR/STRT0QT+UjjbopE3xKedCl4GziHMco/wPfhphlwSJoDIYEGGnTPQE+HJYnbFLiPNWrESm1lHlx3xPb2jdctOImTjvMOSOrAYLd1lllJZkOQ5+Phtkv2XeIWtmkJBmlqe/TZiNqs1Dum7MwY+o/v9ajmlEPm7Xd6IP9a86A8FH4P0thjXmD1UG9M9uNWTl73W45h7GXP5zF2Y8y87jzDImKdzFFE/dmsph7dxkvkHLUqgDeMp08AACAASURBVOyZqaT6+M7bK5CNTQ/ExL44RAT+lYBOAa0GtwR0BFq4ZyT6IRLydPZ6A6OLO0P8k7W7uzxP0G/H/hR9uvsn4ndMpst63fJ471G4R9Kif0ROziVCT/VtcSa+O/kPQKo3//PVf1/9nz9h3T6YcdXJfoPD9sMP9g8wi4PUJbCo4d3Nf4RZJ/QdwL9v+3h/+mTayO33gy4mKCgoeAV4CQJ/kjyXv+d1eGYodAMf2+lDNLEA4MZ7N7UgZ8tSbEj0LTHQXgY6XHQvdzRVvDjbzmnYzSw0RWqULbG1ibGMRwgXQw3sANx/gmC2tzH1RwC4BbDuoLHBZvmA+7NbPJx/RrvusDxdYnFxjk8//ID1uoXuOmzuH/DIjHazQdcxtFMlVAXSGs7DxlS18jtxMeu+3HG1BDv5sJA5KIgIH1+OdK4skf4S+OiTp4KCgmOgEOgFBQXvF9vo7MmJR0yibZGnZC9I3hDpBrwERZ99HKKUx6jQ4Ac3WcwVyBIvZMlzAhYE1DV4ocBVBShHxjBYA9wB3LFR9qXnuT+PkfwZln6SIwzT7uz1pKyeKBdVQaLsdkKTLNYcSMInOKNd3M+R6295hXrBHpDvuf095kk50VVsle9YPG/joF4mSaIP+guXbDzBjeUu7fxV4xI9qfhI4bm2BNtPZ4wc0aMdPHrZ4HLbggfb2SYWdMgO3xFEMVLnUueInLF+N1hw0p9znHxtOIqXu/dciEhfZ3QkL3WinLkdJwbheFim2ZBGvV2Q6GN2xcQYO7ngYK88IwNsNhy26ytTQWTfK94XpjhMlGcgQ24MCqy9kWF5ooxJuV0c0Vso5Ql8Sx8jZWiN27Tf+t0Zp2XZZcAzpPHQG7CdPHrQ9jnsc5yq7fRIhcCrnCtAK0DVbHdfgjHqW0/1UJUmaKfj+pL4XE3Wtqqsdg4ms128WfOpQMxgJWRmW5aN0Efd+dwVjL4L+YqyJcQpLLc05KfIdKfbrqPKXorvUwQ3Zz5zYTlK8+Kq/357M53GlBxuAdmBsP7/f/XfPZnOt8DNAfs4iTsAd3emHN4j/QdAa+Dye+h1/m9bX58I+I/PwKZs8V5QEOAt7Rp1jLxT00F7PRm4DzGaZv9px3R2ZHmcBvfjMBGUUui02AY9JmEnRGJfqEivSc53MvUrF0smbGWS7ybnOS/zVRyS5wrwnugKwbyGmL06AhENMFuuk2az2I5bNLdr3K9ucXPyHd+vvoG/MM7PL7A6OcPnn39C13bY3D6AtcbT4xNYt2DdAaSgqsrIoDthsiCY1YAa3rEmLnCOKPc2hUjHG1RpUKiQPM/m81zYty/IJBfMf4+Ml/RE923A/o5U7jeJoQGkoOAgKAR6QcF7Rxk4JpEy2hpdwmkUO6c8NJIGkNqK/KRegbfh8pKk8ogINE+eK0ueV+azMl6KrAFAgzuG1h3QaKDVxvu8Q0iei4UB/puY3HCQsZCNXNyoIAmDcW9IjLa+3eZRDLanykR+q4phweGQe7kCQiJhmfC7JzyDPJFs3pyfNBwUvHlcwLSlRwLu2PTZMbRjLObAji2OgBbnlG8FT2blLHMxqSZuxsyTI48OhTHCPMa+Q/lYuu5L8N5S+BmTYdMJJrBjAXb0/A/zfYsdDmG+0Vo0EPFM9y65NSRnbybbjPmIuHcRx23f7gzVqUxzWYo8g7ydBdnlIQ4G9+Q5R0OeI9bD5KRRfdDq5HnXg6KR6QdlfT3IgJHB133KevC7LAHO3ZwU/LnnqGCJc/NnVFpRImawu+GzZKMkawb0/2PvPdckx3Ft0QVSkbayunvcnjl7zHfu+7/UTPecsW0rbYRE3B8ESJCiFDZdlVZ9WREh0YAeBAiQsud4cOKHtaR0T6CegGt7zKcx9+m96KYGRueW9P2UkFqhynRGVJbXCvPNTNxTQem9+6XBJ1VhplCH09962EIt7n84iMIRVJn+xz//BfgV47unH4F//nKaxGvcI5fn6Qdg9TEeDCAAv0HsD3pdxS8Afvkphr0BcPNr4On7k5V7wYJ3i/d8yP1Y0ndhRp6peuqp26lrczWYaJFivDCxKqGLBGc1tRgvBAdgikcqjCo468ONNp0IYI+Sh9dyeEkzACTPSBTp6ayAFXcxAYHgvAPDgRkY1gEPP93jR/89vD/D3d09vv7Nb3BxcYGrmw8Y1htsbu+w7jf4+e4OzI/AsBaDmA7EfXblrh5uRnWHXP7EW1i+0+4T88/SfZnhiwvf958xDu5y73h+QtXiX0hTL1hwCBYF+oIF7x1zG4r3vZa/DEZuL0cBtsTfIe1ROJWU1ZLMKBwtLdcacvcpgWktzNc/74zrdp+V6CqI5QDuGTwMwBCiAj0gCnXUAt1kYFnrZHHUsoIydZDuga2V52zqKf22DLupr13q2ro1rvUGVig5Uvy0pMoLvhjQxPfRu3pM036bjFHaVb8rFJXjfk+Vxeo4ay7Hgs3zLW2Gpu5OHrnbq8K9lZPhp8IHiJUa4jxdWTSM3LRvhRE61dcG1P1hFM0KXWx/lBlfXSJL2NmjSellpUSy2FUYWtCt0qnqXatfNL2gHIhd1p66PHZN5LxWKqZuXRk9OLrPv+KYodGX6XbfcyqdznNuAt8nXokRbdu6F0ULLeXnxvFpNo0xexLHIY/6GzXq2TKA+lXu/jbuTpOgDJzzIADkwCSuQe11OszG+FuUxMnqKo/FwjK9Uprb7/YueLucJq9LHzjPgfcmkLFyi/7ZcxlxRkAn481FF+6krtqTZTon5XliE9N8aTlcJco0oERg+z4P8kjeXZx3mRm4RH5X6QzSFFDwqjbvar6rv6N6/lQlcZbpBZCV6Su0rdEJ4/Tn9Bz1ImDDqpX9gNPgBwAfkT20nAjf/fWv+ccNAdc3wObT8ymsfwKAT3n8ug+xD/OnsZLsDsDdD/Hh77+OffTfP9cpLliw4K3jGBa0nhd24UePwYgX4cTDkpVTqf61ILQimQBCPmTWCNrACXlWcigt4I3SOCmM5ZFjIBh+Knm/GcuH4tWHHBXnapmuh5wtb0+Rb4rnDQg0CE09o3/Y4O6nT2A4bDYbrIeAr775Bh+//ohu1eHDxxtcf7rB5ccbPBGhJwYHF5P3DvDlIcbI0yB7LeMGL5GqwAoG7H4RZftbpXnx3MgmWnuZg/ctyp82+vGuaTLG/W2HbOPnEePn6G5L7Tq0bfVM27m8T+HsiKDFDy5YsGBRoC9Y8K6wbV0/Ad/8RaAWZDfkkLU+4TT5msSNYiO9092GGwvatqZpmb/kypLEXaUDVl7+HLDq4JyLUQIjDAzeDNHqvJdPVZ4zASwX79Ya6SLPmiaz0aiV6FoHGlc+SwWDYdj3aYdEIpUbn0LAt89udMEXg/EeudBBbP2sx2zRzagaF1SOnxEttRcKBRfJj1BsdgmfncL5c8E1gAcAj07NHrJAh7Gl3XZp00ooMq/uxnhOhFlL4t165MRl45yCZfSQ85zbErLsAxHYpM39nPI8hX/muX1Keb5zfLyAgOLYTI6sw/ogw+e03G4tCyVF9CTLMXqpELfg9p3lE6l4UGUrd6hT9DJE5g8U55xkiKTzwyjdRAbSuiNzFMt8QUaBnsbhJYMQZK6oBK+tOqjJJ473mNfzxo183gvNejWR3mEucxSdOdBKBPwuP49hYjnZaKy54AmN73etE45zYDYxk4pkU1d6ubqmqxZhQei1CvhLU7F1fVgW27ZH4HE9zUHTsO7cV4hSH2d+M/azUN9nGtGDYIS4D2HEu9OPyeuZDMQTbgHcGu38VwCeW199fxut6zWfj8gKmQHZhf2/slV69/F36DdPizJ9wZeFY3mH97odem4+0a7FVR2z7kfUK5byEcju3JOPRN12xJhIDs2JkN0Ymn1JoZzejUZ7TczeBUz1aOKqBTcA1jVdtxZohBdZVbz9hXK9cFz3OeQ46cwcc7wWkRkOBJ9YjYD1wxP68BP6MOBps8Hj0wPWmzVWIPhVh6uba3z122/waeXxaQXgsUfYRBkdeTGGD7E+gtaKc1nBnfaThHz60e4NtXyEQiluqy5t5/S9qQ/bhMWVM+2W2A5NsNG+LVnLqfEie7I3mLfmXw+Al9qvfalz+4J3iUWBvmDBe0HhYtGi0tp8TsLJ58CktVj1/lkUT5q3YWKTkMxsNBIN+p+67IR5nt+p8FC/E1G0MPcuctfJfXtUnpNzIO/ifUwcgIGj0lxdt6vyHGQUcuWf3HAJJpc2XVn2l3dhqZYb1jelADI/L+5QtwLYnXRKNp7Z1Flhrt1MlV+aPxd8xrAbhtHGkapwaAoYijB1H68l5LXHi1FadfjyyWgI1RvZIg0rpJih+y1il/n3UKXlKeb2Q/K+QraifHBJuZM3qzw/xxX57xLICiLG/Wo+/bwWEcW7DIkoOiQpaJxRXqfXWwpV1+WUYrwW5MyF1XRHBwhOOAhavIT5zqMvVfT51xWsZm1PjOahZ8C28TBlnf/seVPJTs1hZO0xEa+euyfzzzzZaGqes5JvvrJ8Hsz3Vt+jKEBN4zeTonebs+NokZ34zVz2guVLKOcoVZyng5UqpL0C0h2cKnS3HZ0aY1o+meo6qMMKYR9J0qXI2z6I4pwoumpfAbSKBSaNZxTo6ly9KKLSpsry4rnDeH4hZE20/pYUiU1fCuX4Y8SDU8zAB0rhc9WYNtWJVtu6mFOr+tsFqihnRIWtWoh3QtMUtvHeU7BxVJnuGs8OhR6oYJR3ie+LuTr8Zcv7U+AepYv3M5RW+3X+t0B/++94CO///CoGuPv++Q8XnBqn2GK/J552wWlwDN//2v3lOWjfxq+MI7RDTbBoxbUi1AigLwvX4IjXoYjcUhXuTIjrmtP1rFGolv40sdrV/nkGzEJTjdZaaj5ZZAEEKjc7xio6sk3mkLtnIDA4UDycWMuftDwB4CHIocro/j6EgM1mg8AB/bDB0G/Qb9a4vrjCh7MznF9d4Ff/81vQ+QrDucP6lzv0d48AejCHzLoEBmvdOkLarE3WFe03Jup2aW0tMfHslNiW/rYBsG0Mzh683rJHP5RXmkpkNAgrfvqUKPh00zeeuz1PhfdA44LPBosCfcGCd4VDV+4vfGV5biu0Zp5oMO+V5FWFSYXy3IaT+xiLZFrSs7S7ELeVUVGOzoE8gTzEfbuLynMnjH9gcC9K8w0DPRtrFL0H0jJyXPxxYdmjITkHqYqfhch2E0Rl+7SY9PLLaRRgCxYoRtODHYtVuNZU0tp4tALaNAvPC1aQP9O32QgQON26ijxGy7BvGl+Sdfw1ohXZk4tct7r5CzBKqH2wxy796KVPFFPaT0f3adcb/GeAkeClAyPbrM/13b5WLrNoCDZ24C1GS9mhWR+K1xxnqvx7lYy3oOgWe9bRXPJWkd0K21KeN9eVam63fc4qz1vPnROFdHym7svZuSxg1TRN2qy/62GeFOZk3olE+CqU4VkZW3nuNCzF+Ocx4NnqVwAxNhyVzLwWDeBGwlu3q1rc5IIeUXnuHdwZgR5lbfQE9uqFVa3vM48akyOlfNzsalmulZCU4WISnK4XcjnBJFRVl/3iOSCNu2DCaj4AbqOAkj8A0WX9RKeaUmC06N8Vj8hW4WeIVvF6cHbKtfsxedYK9M7kM2qD6vdUfp8Qr0D53PA9ouU7IbbNN4htUyvIk3t3AB+Bsz/+D9abNfCvH1+O1gULXhLH8BJf0p5jhGN5sCTdAZm0GJi9FpuZhSXJsdjB8BEmYsFXwKy1u5KYefOYr1xbJUrtEg2iW3IrBhCC4bc4Kc5TuZJOlaAW6HFbx0AYQHBwzoMkqTAM4BAAH8BBmBUH9Ah4GNYY1k+4v7/FN199DfrNr3B2dYVff3MDf30OXJ3h57PvcQvd2wBMA5gHpOt0nMgAOUCJK1iaVLSKv7K/aygvmhrbJDa1fr/XoTbX31r949mIeCMV+IZIWbDgrWBRoC9Y8B5AvJ2JfA0Z5XvASClt340fbXULtXM9qzCzEbFFk1WuCSPPTI0DtC1hqwhJVYHuHULngTMP5yNzTj4KTaPBOOfTqX0A1kNWoqvluTM0qhBRXFNlRXh2W8lUMd9U/kycZ0G7rSN1787TDHnrAZsvaTenYSa18QsWGNTCbWp/3yUZVaJPZSHvkiLcxZ2t6f1JEJCEAGMKszComEfqDbBucnUwPsMu6FRW4BPWn5Ph3wJ2LfsjAZ2d6wbsZW0+yjf9J5hIaA8lbzNehdQ3k0CpJmMLHZqKbetdaSvMYGbymk4AR8//rTXbfjazNXSqkrKgvcWE1GXbU5DYpOOIuBZbLc0nHjyHEn3Oihtmjq1ReOSgw9mDuXWisA5v8D32O6Gdt70HUsdK6oNkntVh5L3Lv5lIrvORZ8IX1uOYTR5kp6hkaW7ctTOAC+PuHCxVG0B6AJMR7xWN4uP4KYrbQCGm5UTQ7YUItb61inMY2p3yspGfdd6Bzkm8ehBww1FBnMqldcyiPDfKahJpd+JfSe58p2rImLZMc3e0TCcVlqfllxL5uT0cshZZBNGa562dW0ms+CeQlAwVWUB7jM/16UHIWiPXeYeotH2ainQEGLkK1ogu5PX7oVDL8w84zgr9rcF6Zv/NB2BFQPg0XcZfgPUv/4rf//DrWNf//P6ZiTwSy3ZswYKXw+Q+0MpItsPyr0xs1j6jgZZDqyz7T72VkNLaqApgyTvFtxnNEdF4Vs0nyQpcZVe1aKglGyrWV1nb7QE8Es7A7MvjecG4nnMgqROKnh0hFuLkQeQAMIYhunMH91J2Fw/+IaDnAcPQY/30iA6M6+sLXHy8xs2vPoKvOmwuPQbP6B1j+PkBwd8Bd2uEXveUQYxaRDZQH4hU+pOcQmUN5W/7rZQuGJmatl1RjaYen2u/UhA0FbDmxxvPpuJRI91R+Sb2ZEfusxKZ0j/3vsf9CFQ77Gp/U8kr9uU1XxL7VNmWrfiCBVNYFOgLFnwOWCb+NohKl4EvmzmKzBPzThVjYl9mFKdDNSDltzm+CkldUqAznFice7Aqz4lF1x0ZIQoM7gfwZgD3HK3PA8EHAjsSOZfSKtx34Y5SNhGF8NcwlVsZLCPo3ZXh0XRb6TfTGO2YthGF4/1KLniXGI1JTP+eTQdtptwozsl8Zx1DtTlcUqKPCSFE4QDnRxKnQeucecCCw7BNGagCFVViBVHShKiAwpW0x91MGtOZp/9LgcYoSJtW2rM/cBSQMUfbymhCEcp1zFr2jNyuGzfKYPBIeNfAlKXQyPr9FXHo4YQab6Q48ziijCrEe3aUeUwqz4s5Vv47lrzZvlC7+W7Ea723h2br9K3VeDrEaHgdfa8KZ1AU0Dp55uL1EeSiEJitm/XEz2XGLglclVdLynPhCcWjRlyTokDYiRKdRRjJ4KwgBwGO0fMvSIJYRr5L9CI+xiCf4o49sdReed1YBmIHeiKQHFIKjzBzcFWtph7jjOTi4c8kjCXoIUw9vAYTOi+6Kkg1f6EKWzcrkawB9RxspNuAUZLKPDhnZb1t/rBTZqt7qhJdSdqYsHMs877KjdY7m9e1fJ9TguvBgvvGu1uTxkHr6hvGf02lfMR2V+3/EMX510B3/Vv0j/+JVu0LFixYAKCYxLfwP9HQOa93UUGsb3k830+4wC72vTzeCxT7meQ9qk3TWLHI5Z7BKnIr99e1rUcj8fxFeSEVgYk3negqHWZ/I9fCOLkDHYjvhwCCegAiOMTN/hCk3kLIvBqceIXsMYDRPz1hs34EU0B32eF8dYnrM8aaewRPeOp+xhMzhp6xuX8CeW3KuN+k1gHlVBUs5zMNjyN1nmNQESfzQy0e5sRIye/C4DQiW/JeYvvxTCDkQygvYUTQEDflH2QC1VcxvTrsQY+KtrdG6oLPAosCfcGC94JtTMA7ZhKeFaeqlx3T0U1CKXgrAuSF3ijTFCKKnONkJtI0Ak9Hcv85ZeFosiIPIJYTsJsA9AMwRCGoY4KDQyjcNKnwUjYTFPI7GpOyVbg2stoyEYoNUPXFMP7NDVv6rNJMNE03IFVZLPjCUPfjoquYvp5+NxJI/bpWIOr7yOJnBbpRLKrMfnSvc06PRQFpg7ULInGeeX/7rvHcCj3nc/0HmS8vEAUqjKMt5bISqKE8R+NRbQFu15da8WYhHg6YGSGEJPhK72rU70x6jmjS6J4qgosNsHVxP6dA32ZtLDkdB6rmiVozh0xeo35GhwcaMsDnAR1f9KkEdk1325jbRzg0oXieVpofg6r/tHgeQ5OlgScZJPO4ecClCk7mS2LJjOLcWp1rfE9yD7qkKQpziAt3demerdpRfao7cimHjL3k0fxSgrKhKWi4kJ5HI7MoBAwEROmyCsmrcrN+VpLP4qdRnIPgxJqeVgR6oNI9/QRqsT2xCobLNlRSGOagqPCfynEnN/nI5eI0+ds24Ub5DDVmrU97CA2nyuGpIdIaO63yc/WpUOu8epkgxHULGN+Rfgr+wrbrHaJEqqZhH3xuivMWrPJ8mzL9J6D/6T9yV/qvgc0T8J83ZqZ/6Jz9Fj0SLXh+vPd2fw76t3nvqlHLVg6dyAv364Y3b83hVHP5yPuJAKi3nRGPbEkksybuPG3YRUZdr+f1OCuETSbyTJfrQldYyaGY4uLJiHv4AOR9nnwX7ic6u9FXhWGP5B8GYIj8AnPA5ukRDw93uHu4w8XDHZ48EDywuj7HNX8E1hsMD48Id/cABZBjOBA4MAIzAB/Lqsp0LXPiJ7lqsmpRH7WjDWz2ZSnqRNxDsFOXnGSI0N7zVHwl0B4z3ODBjhwqe8NYuhdK9JFs+IRoeqbAuI5Owfs9C2xfj2D10vhie+0FXwoWBfqCBQsWvAbIKtMiZq3zJhnS/CLKUUVglwSJlE4MEwe4MAADg4aA0AfwRty3D4BjBxd9vEfvU4WCWwW1EzTty2DWivTaRW+rmCxfWkeI3/vGesHrYmp86WZxNl6tDLDfzSbEKDmoVsakIdDo2wD0dPhsL3+zG5vPHF4U5kEqP4gJQmDgBjiF0tyCxfpy1GmTS380Nr15Q960EJkTeIi3A9a4ExYmKf0qWWt58tl4RHi2QxhWiGfzOyLJo6v8ucp6ChxJW0OmNh94OuDOCvxdgpH5K5TnZP5c4iOTQl3oYCKwz16J4AjkYXhDmUeMEl3Zq1RUVMsayyJl7hRlpixgFlftRNEqPL5gwMc4FFS5rCnr2qjxP8onYj7uU9k+TpTniHnma4mkTF4PFUx7EdIldiQTT+QI/aKoZxF+x+uUyPDtkQ6WKS0KpQPQvEJIJeqtQWies4r4baWTHFbgMkp6P1dQ831bOG6EJURX7ueINDyHEt2iR5ZKqfcBzcfSuCDiF8S70h2iNf8Uj3EH4E5M0H//NbzvMDz8F/jhJYhcsGDBu8eIt9E1a4vcppkUlYdxaU72ZfKdZ79MOE23JaDKB9jVZQzbMnDUMKtnuMhiZMtr1iXeyKDYXA1T7ukJHh4IQAh95CGiGyCQj5/Zg2MQoZugI/RPj7i9vYX/6Ufwh3P0Fx02KwJWhMuvr7G5vcP65w6bVbwexjkHTw4D+pgWmQVUjUsSW2KYILs3rKoc4MzSFG1tFZMm3kkPLC94s6j7zBtAZN/LQzhEjUM5CxacAIsCfcGCnfDKjMCcYG4racfS/tqLz8yJu20Cy0LJcEA5rAxsLlDF4+fIlpu2X63FeGNjwgDE2ZNNtJDNqTLbRUtzkIsCU0fglY937noVZlJ03T4A6AHuA3gT4ueQGetAlHnigmYShlssmmqpW/HMFGukEDTlZa2DKKRMckQV0gKj9h3VRxGvoqGq0iao9foIqeAcDafCNsVVnf2+w/+5rXOfA9sY5LkiTQ3DOrLVLtiwVoJO9cuagEZm2oXr8TEpbLfJUeN1NQ71SzGP2Tn1mP5K47p/0f6zTeiybT6olRV7ZGOFBWplDnl2hXzlbdNCbIc631KPXHZCE6duj1aehZRHXhvhSiO38TzeSrKY+AGQsdDMwQq9SG1Vbq3Nrcn6Nvftk69qLUyLkilQ2VfSXc4T2RRJtsI1xkpL3tSaw19zWp7Le1S9jTG1C+00VfgpAuxcrHwECnasvRybRqqGwH6VXI8ha7HdopwMC9TIh0x5Es9lwqmi2xnL83THuZd7LynFJ+fBnUvjLymZnQivI8uIfJiLCxUvtzz9qED2g4Rk2+k5Vzg5gPW6H0acCAPIORnGouBmFkusj+iIQOSjRTkRAgEbPgMwABRA+ATSa4qcHhqgdBCAyUk5xBpspAnOh8+yet2ulZyawZlDb6pMDxSAIPena9JinqakJMG6uqJPvKkVNhuymJAXinoCMXHuDZ1X42Blp2+Mnzrv4rf8kM1F4aiJ5f2a4731Z/LQ3lnuDA+Q2r/Kf9s0a9/3Nm351AbbZcpu4dB47wF6V/oNojJ9wPxhvX/+FK+7/+0N/P+eY1g/vq5V+iLcXrDgcIxYianxNMO7tuZsoDwnO8saNfJMzFe0puaAzGuAE69CQBQrsSi6kjGF4Y1DI4ti/1rxSvZ9QFy7TALpoHq9x6gLz3JATg8Laj0ISxMV5yzfKa9X6YAjEi8QJJwyBewYIHX9ItfgJPc+8QDisN7g8f4W7scV+o6A63Pw5RlWZ2foulVM47IDfTgHfXMJGgDuAV4DvNmA+pAOdbPSxXKIUQ8yh1DyAgXTbHhcGm1wkPbAI5lds0Ibz+aC1G3a4kcn3tf7qp3zNHnrS5uHPaCO6nkz2Ym+ZR6m7UuxbyzpL7p6ld4pV0+muh13QGH8tEe8UebHl6TlZDTx6sDnywN+6TimXXXsHbBHWBTo7xYHTlKvLol7Tbzncr9n2rdhZtZS4RNQCEpRfZ1+Vgs5D8C2aJPvCePxpirj8bv6cKeDhwdlnonFFiYJQhEV594DnQN3DvAewVP8fh4FeZ4cXEC0/gmM8NRjeBLLc72PkQjwhAASfjtzagSkezPjK7GmscJBOUarMsWgOx7LuJCJA86y090GLQAAIABJREFUVXCSy6rBUnJ9WvDquvXiXF9s6UAOX/eVvXFo3AaH+5LQe7UUhDZX2cI7XxqsbXa7BWYKZ8vONux4/KZ+qeHMPlgVKOWmK+9V4/ecNoEQoPfG6nMn0bUtA7gcCCVZVrjQUGaTy7REd3mcGcYdNniTMAISzWtv1JvTXcMmAkY76nYzF0IBE3ZfONtJJD1rla0C7EnF+Vz2DdqL7kf5Y6cxbXeOlmZCNEVtBG/KPaqHyT0yNf5g6qhKmuMYdTCq/xDM2mbXwKp+W3Tsi+YBoz36gL3Xvp4S9Esa2q10J6xid+JjJp7tg6OXw5Z0Ath6F96R6wqlC5rHWY+EecW76jm1HrZ/zlGT5n1q9H2uh6bhYUjlqzHuaLgJ82QF1qoQjubWeh0PgX3m2ci7aHmtCnThD5kcQNEndjzfRXCqeAYlRfSo/LIkBAQEywPqHHolfJ3ly4njn9d1WNcZLWX0esTciy6dECXqAXA3OCeCJw+PqCB3/gzcdRgQEDBgwICezuAcg+guzTEcZPkL0gbXDvRg+4a2jRM38lVn1IIZBpQCF1eCMyLv65zDwBz5Zhdi0Vw8U0Ne6iNwlKoMWpEcBdRaF8lqR/nlEGnTA65pnTJzRVJwy+9703Gu67W3PR7iK/NutBRauky72nocOEuMrkzcB5vuCXjfgocXrMz3DaJL8tpd+2geymNylF5zLntFvv0U+GS+f0TsQnN68f98woBPwG8+YPW/vwMI2Nz/G3hE+475BQsWPB+28iCtzQGQhCYWrcOmtWJzx/1aoYCqkhjTZnlss54lrzDCv6iyOS7NiC6qdTcMWdRNWgNF9+fFJmGcPQm/lUIEVNeCxLvLx/enm4SKV4wwBITA2ZOP/LHqnQfOZVS+zDnARV6GvYsisxByuViFBkpnQDpUSIDKAPhxg83tA24D4/72Dv7mCt3HK3RXl3AXZ9gMawxXHei31+guPfCwBt8/gR8YuO9BDwH0NERnLoRYGeQB+PigD0VbRRaSAQ6I19aQqRPDF+jhyNTPAkqldcWz7IHUk0b9s9p3jfb0VHbD5nq+70akyrBW2OvHSJE/7QGpiQap40c6+MaD8KScyysa0ByTc+yJFe9ai0BQPX/nLN+C04Cnh9YsFgX6u8VrStPeM44s95xQYmvco6SIr7qwJRpOhZ3rrRL6NIWhjWfGguRgwhuyxYqi6fxTwGxlnYWjYgGEkgdkm4hYjdtkOVkXZeEpvAM6B3RePh04WaRLcJFTIjC4lz9V8gTJgYyQOpVDNwMQHloTBAprxXQCNTdO5KXVyshWkJaaMvPNALNVqG8B6x5kjkGfaPOtXWHhqN4rto7TXaeBPOAaL6r5RK22bBgqM0teEoBCeT5Kq5D0cvGpQy6+5tFcF/ey7b7L1Z1Qib65u+R2HgZ2nt0TSWjP5e9jUE1ho6mnRp13+intylwK60MY032DqEVhROH+ofewTna31ou5R7awjR0kVV8OUhxMrKuG1qINbBb1AysoYyPc4kaYIuUJTJXn2Kl9VIaKnjRcjSCpaDvaSvpWvCoLOBpVo7luNvbOtFcBZ+VgU317t6TH73fg9pT/2jETOwKZMu83iiJ/ej1DzEKtzSFsGmWX5T4KadGJEt25aGklivEAD4bLbaQKZEmc7Nxim5aASKGLwlR9wQBdEQplMxhJvpqswSW+CmI5KomjEl00zmlNvMHKO3QuKs+dc3BwWLkOG9/BIYCdQ3AenQvoaYBzXyPgUxzmgcVyCyKAJ/AHAt3HowqcLy4HSV0WnjtSWaSMWtfSQmzbBTCW5/qX70nNexPDG0v9oLbmJ1GYSyQq1nuzvo8E1yYPQBSd8v1a2xklSAhvCX9N9OLBaNIWDIhNaV2tn5k0H9rRDkLaIBmcIa6xQHknvCp8W8O3qMuptfQz4/vbZ47a+O8tNrgFvgG6q9/CXRHWl6JIfw93yr+ixduCBXtja3fdtT+bXacZA4VTmNmk6zVhV8yNm4k1hiFKaLPWBfUkU+6fCRwPCupDNdIueD6znlYsNmCW24KvmZMXVSRPWhS3WF7dRxGgrI7qTx3StTOsdIfGwlYkGuuGCQibAL5fIwwMWvdwfY9+vYa7foK/uoA78zg/W+Hce/DlJfq7R2wuHsC3DsEDwDqyOIMq71HmnRhNltOdNZ9iy4eSl0g8hbworLOlPqjsA1OY7IVTL9K6PhGgOEDSClPLWhrh6n3+FK8wekxlX5saiynatk5ZMeeWqXnV/aDBCXUTx6Q0HvM2VS6fz82T++KttMOhOLrS3y92Jb9VRYsCfcGCl8J7n2RfC/Ui16rHt163Tu9UtHeem3tlFbVwtprdSyW6KMqdCk/1uwhIkWSYQB/A/QAeQvQ2XLjEshJBw/WlE8IqeNV8JZhubFIaKsRsYIpR4Vz+7fIMzorzKo0Fgkn3WQueB0njYP4qYcZELNihzqO35SZQh13aNFqRwxx5cZNbKNGLTe8o891Boy+vi22buNrVWGFaUYfV8IgWdk4aV9skhHz3aEB2o3ow7QeEH0l06kXyGeaB2uo25U2jmb+5TKeuXdI2GifPJtw+oq++kW7+pePlVzczlvbqA2YdoPyrEJ8amWni/ayHB3J5uIkXoKg8J7nT3MshSgAk92rKXOVACOpTlNRNO9I8udWJRbWWRRqULojptZYmCg3Z3rnpAYTorYiDWM+D8qHNcAMQY+U8vFvBk8M5ueg+3TuQ8LIbR/DeY+UJwQ3Y0ADwRwz8CyAuS7V8aiFGHxzonsRBEaHQhENd6Zu1O7WFrJcqTNZ6IgZzvAsdejhAI2myuqDv0EGbU/axUGXndfXcNFETXIWr39UdV93UbiCW9igtxFto8jl7wBp0XcjnYyP9BRE/HRDnR6D/8T8AgLM//g7dlcf66x794wPwePs+lOkLFnxRmFES2v0OtYPsndde83eVIauq0Cx8anyRgnJ+Wx3uK5RjBU+Ww23Tq85iytNVfXi3OASvlCmRymsgunUH4OTaJyIIfyR/RbKRt4uvYtk4IHq7GQbQwKCBMQwD1o9P8Os1aP2ED19/xNXVFbpuhc573F/e4f58hdAReod4YDE8AZsB2HD0/KPecZR2W5yi6KbTHLt+74nTZDPH9DwjkqCGy2fAi9XfggULnh+LAn3BgpdAzXN9KThaEF4xcLVQz75D490paFCB497xJJIR7pXulAmFtZ3ZCBBREk6prppJVO6qOFeFeedAKyfCVHnmRMYX4h3n6c7zTVSiF6Y0lIWsub5Z7o0SN07pz5TLVooRHEadXLzDiccBc/nT/7RTG6nFOduNTq0AfG0vDc+JrWWThvmc62AGPPH9WTOy85O6diMzROrNVCHHp/KkvdlUax/P0x6lmxZ45KrUkkNmXJQEj2LNbepGp69n8ttxUWsdreG6vx46Vx/r3UXhCLh04EfbXj672GMGvkaelA8RVNd5jtazibJUVvLF6YtCalTNtfXdIOndHnVdKNIqIVKSf7WPT1ExR3MUpI1kVNpHt9BUz/f7QBVkRzNhcwcVZPw1s3jv0pPXpf/o3HdZPief6zyvPJPt/9XYSJEmBMB1kMT36eFHZ/S9lO4sT+89gdT7kHf5u17tQ1mJTqzaTkumuYt9sg5cvN+TNLSMcOUrhT5O656sV0TxXk7maP1NAGtaiPefd8PXIITIYhLBOw9PHufk4IVPDuSip1FHOPMevZTZdwRHDk8MhIFyPbEMOwdQEP75BqA7WV/ZgeHGa3ezDhgqjE/KczJzkx6akpuMchtmHplS+Ionq6zgso7DziPb5ua5hmPgTuJf50cjJXq9FOyTVW/e6djoMTPvnRBPhqYL8/xhIvwcj/Ml4Qali/ctWH/3b6wB0P/5Da6vP2K4+oDHj2vg9oe90lmwYMGu2HXyHCvmlHvWpYin1pC5fRI1v1Y51mlu2aukaJzWBybO1zzpwajER8QfkXqz3pLwFlN3UDdoTV7ElDlo0TWKPLFQ6EF0WUTzceGGN6GURoD4bgeB4IgRXJT7JSt03dQTATCHJfWu9IGSpb4jIIQBvOkRCPBgdNdXOCfg4vwcZ5eXgHcIncOTCwAP4HX0OAk3AOhBGwYxwUm9D8rDQcmJbeDUxbsyWKn+jJCPkNd8w+okjH5rZx3XcXqy6xB4lnW9ZIimPPpNwtJk9ww2+YL/m0r/FHvUBQsWPDcWBfqCBS+CZUE8Ckno+M7qMcnVKLnfBJCZyCYPRUk4yWw8rauixCHWgwhOyTs434E6l115AuAwgAcY5XkPDHrvOZAZ9gYD7xCZPWfe26rX33qHurFGj3yibi/ypqOQ4lmhnvE51mIdRwrz2br7grFN7vqZY2oobQVN/tgtEplP3W/a3VSrXUR5rpv8uBdVTcAoaJpDYoo2QNzY63a+uemb3Y8dP5+mvHfsfKUnWSrj1VbizwmqvqsVwKNUmCMgDPHvCtF9bEBUFtwit/epaNjleSvAyOvEiScC7aN1Py9fC2rNePWMxZKztkB/qYnrmPZqxpXxOnIlsWhu3gzm2nyXcVZbYdsBUFhJzUwIrUOf9iCKzj36CTlc5URwrLyjU6U5RIHuRamO7H1I4ken5cIL1vSkAyvTtMb71qMiXGd4EIO9OSaTXEXHsLG6GPCc+ExGvLO9w9fwAXCe4TjfRu6IsCIX1xHSOogv2SNd2QnPUR7tRY4r9QOHeAc6x3mEHIFCvAIpfJCrkO5ibupAJM+QdnHUpyEeAkA02NII+iyVeaqpq9TSN30ga5wVwdcGS7tjpgNbi2FGXMPY/Eb1vfVuKpupbJ357BvvT7k0qSt3B+ArSfSXE6X9uUGV3h8Q639Ha3L+f/+NQX8N/OHmz+Cza/z41QZPt/88/PDgggULjgdNfO4afi5ME0dM3Glt4XwAjYTHkMNo6aBexXKV20Myj/eQAwXOa1Paz8zsmadoLwgrVvAcVhWlBIACWF3VIyrB2RMCyLhyj8yEo+jpMR0SCAywg0cH11Mkvw8Ivk+HJf26xxkDF2cdLm8uMXTApiN03APDGvwYleiEDSgAjhkuMDyRHHBkDA7pyu545lH+MWEQvqpQfiu/Zw8zkESGefbaW59k1FPvyV4o77p/ah3tcpXAokRfsODNY1GgL1iwE+rFsBKg7YJlPdwfSTA5ejh+9iz1S2N9TsFDNzIdSRcpnfK08qNJHiopczI/DnC61zy67KRkgQTvwZ6yQFHCF1bnfQ/0ARiUeaNct+o2FFQKwLyp08LqEDkNFZTqs4JZzOLD2fLat0kfUdXrLsrz2kLzS8QxAsrPbX6qXMBNvm9uxBvSicINrDwrxgfyOLFp1xOIXrmgVoJobOLTTzL/w7hwn6LbRKufF14uzIb4lWGtlpNF+r501QpZmn5XZY7kJhnIbcch3ht3w+KKGMAaUXGuEU89Xur+OmmJrh+mH9ip+ZRNqhaV0DlZ/ka0tfviuF9HS/6RwrxWtMfIx1A+hinLIZh0eU3AiPZm2GPL8/pj9TAcN1Ca0/K2LHZhGXcJUPM9xSkSVGO1XjP0q0lD1wnn8nP9S9bj+RoeOGTluYbxDqyKdBeV0+lwpqwprK7WrdV1cqHK0dJoshZ0wHOilxnANSEfqjQRtGguLjos0yl7glphdXSDjgneU/T8DoITalbEcOTkulAXDwwQI1DAQIyND0JSQKDoRn3jgpHXkhw2FaU3DyDyIHZyhREBHwi4zc1RemUthZVM2UKfEctLDnBM4MBymJVKZYBta2nmdIiuuCs09xcGl7LUYs1qNs+opba/55RfvJ9c52lTCbXL9xYNKkS33dzK/zVL+17duteK9BZvcgxSY21L9NQL9juFPyDO98A/vv8b8AH4/a//hO7rv+D+ZoMfbn8BfrzdHn/BggUnwMQcp5bBhi0Z3VBl+dTnMkRpHRQ02Y6/C08SJK6Tq8ZY9xsmHV1O9ViatUhPaeZCc7Ev4ryGSdzy3vipeq15uSyPS7xSS6KXZFXCy4DgnIcTns95h0CUnJoBJGI00z7OAeyB4IFBjEscwzPgngK83yB8usfjjz/DeQ931mHgAFp5uMsV3OYK/pGBgSK/yAANGxCFLE/TOnJZvlaI2hJvZOiq7wRniDceRmHO3oJpA6n4dridMTMe6v6fCTBRW4GaEafzmkJLhjnH++zqJaElu6nr8b0Zmi1Y8A6xKNAXLFjwhmElMkCbsZl7fmpa7M8tv4X2WplTsNtz/KZamWsAsb7Jd557oHNgr0JHTSaAAkfF+abPyvM+RLfwiYlV4S3SJ7mYPjvIHZdUCAZzOSgL0FTproJEbluSl/EbisWt/OmMwnCB4NTSyXeKk0wHLclwK2EzhtSKsDixXfV1DQMJH4ZGmm16ZEZp6MZL4fzWzVpN/yv1mVpXnjxWHGuJvi2uHhhKynNps8DARYjW5mpFt0a22NIuIFfhnl6JfkCwkfXzqWiRNYGypcXkEFAKRnebN5TirJU3g1Moz6n6olYhR2GKrpYQ5pRY5vRXRa04L97NRqx4rIk/J1par+uHKtJlLozaZcAR2HkETyByyYsJm0NAid8UzyTWsUmW0TYZTuFJzTiv7/pWq3RVroMACrkeRMnPRrvKYDjXwcPBcbSKPwMj2lvF9EjjAghECBTwRIyAgIF79OjRhz4q58MnseiKVxnFaIzs3YLgvVREkMoYKFpg308UHVonsUxBPDAli3bxHEU+0hmAuAYMtv1jRcfrmqQ+jXelYl3WHE3b2FReFLq2MaIyvdYH2OXF8vv1+lfHm7JC1zRPNaWlZiPggyTa0ukurPG4Xq6x393mt8A/b78FAPzPX/6EP3/9G/Q33+D/3f4E/LD4dl+w4Pmwz+TFTV3ndFrbVp1KkXoMbBIBkcdR3kM0t1GJbmjayrvbPbZdmCi/M/I5anyP+Vf76PRpiWZYD3OjeBaBoydIihbmIB+3nKxX1USnkCVPZmUD0QUPhwEcBlAXFei+D3BPPfpP97jXaxtXHpvzFdB5uNUK/uoc/joA6yhi4HUAngYwegSESLIzWYa4N2MGegbSPZB1vWt1MEoGpuAFJvpKi1+YxJRye1ucis4pzG6bT7i5b9ExR9tzyBUWLFhwciwK9AULDsGup8UURqi1YAaT9VMJMFtM3Wz8A8El4zyy4GxaoFtaDXMOuRfS/E5wVArWmEEUhappL6EK9K4DVg7ofLRCohiee7WNEevz9QBs+mhJqfeeE5DcZNaWVaI8d87Fu5qcMs+18JizAt0qkpIgE1X4UaVOvBvv9qYtcy1o/PNgBcwbkrDtehJVwXV7fUFolXtUDVNzx9Rk0njM9r1Jr1KIJP25Dl57b7lVTKq12wic96WpbCxqhyrk6M5zNIX1Erhdtim0TjvXZM7cyd66E3vfLCah/nj3QWo6UVglxXkALoZsNRcoKkc+SRx7SKiY7w4FTcffejArxs9CoNFqcjwmxwQ1FHBcPOK0BrQo4sParSbj4DjHSCeE7nZzVN8/ozmYR18itvJaJxRA7fJuG+u4S4KtsVfzSjadJn/U4Kssv2gPWTmZXJwqz1VxblyZq/Jcw4ubdpZnem+lpTFO/fnwZjYMmhp3pizp0GT5unDXnp5bnhiA47xEUlQnO/oI7zo4dHAEnFG05o6KZp0LopW5egx9ImAgRmBGzwEbHjDwLzE7JrHkEnKdeHHROVut78mUxUklXMes0j3h0DWqUmw7cavuCM4TSPjsWM0E4iGee/McLbygySlRSNuF5DVG60qF+RqJYpliuHItj8E1vRfgTe9g8hdatTC1svUSpQTpk1TgR/mtrvfXE3nlJjgeNq2dDaI/ozn6UHjsfT+64l9/jYr0yz/9AX/+6tcIN9/gu9ufge9/PimJCxZ8NqDJH42wo81bO616L2KXZyt/2mO6G0/LOsFOJDLFC07Ja6yox/KXIfIMstCndPWsnh4KjMFl32OV47USXQ+wN0mmHL9VjpEcT++VoXqZnl7HCGJdHw8DOg8geDmUTNHIHBytz4ONF/MkAEHN1HmAGxgOjGE9gHnA+tMDAg8IncfgHejmGnR9iTMQbs4vES6BYQP0m4D+aQN+dAgugFw8HMjOZW9EDsDgpB0YBT9j+aNRN6DqOed2tYcgRnVkE+JmmC0jYD7ALv29uU/dmqsEq/vctnwt71fxgNPEmQQpyXrLYG9IZrlgwReERYG+YMGCNw4jlGq9elEYpm9K0WGtto2ugI3AbBSvUY6kNFcroy5a3GDlQSsfrWI8SRYs95sP4IGjwnw9ABuOyiF74IPcSGEPERaSc0lYyLXSz1aBbY/E59W7ih2YZ26/Z8tYHnTn+RfMVG4bE19C1WyrgwmBw3REnYOSRLx6RY35QPaR6T+bxRyBZQOVh+dbA2ZCsFGM2W2btEMxznub0nxKXvGscHbONoKRwMDVEC3Oda4eEBUFpPE4v6v3tIditAYcmd4pYRRio6s0RhO1/CefpVCp0bc4jJ+9KI5Q3m+LW4zrbUKZ94YZ4elrYye+cF9htXk+eUiyllwjP7NCyRSM8h3lSXFOxvrcy3ePpCz3nOchfUbmTvS09ozLON1TG280HaOYLsqtbr7TIUxCbZ2eFMUuXnDKEs47D+c6kPM4IwfHEAU4RwU6MRgOj7wBOCquexowEKMPA56GAaDbmCbHugiIFl0EKr00IYggOt7xqYcLmAB2yM8+AHQb5/Z096py0iS0d1LvnYPrHLxzIg/v0YfIY4f1eJwn4ysVkCZTQM2vqnO2zzVyDpSj07aGPT0s7XdVxvcTcX5BVMoq1JsLADyeiK5aUK4H284AfKMPAfw4lcAbncteGie4M/7h23/gbwDwDfCnr/4C+vA1frz7hE///eH4xBcsWDCNajvTfH9ousck1txvNuLX8zgjWm0nLydijQ6XvMDk8LI2MYNDMOvjfgtkea/6+B0rMZYXVAOSerm2ZdEEQ+SZgmjInScQPJwjWfUj3xGsVt4hvu8BDrIp5YAhMJgDHDN4YAw8YL15Qk+EHsB5YJw7h4uLM5yfn+HpElj3AD9uMDx0GFaE0LF4vWPj8Uj2wvEEQ2OfS7leCwaG8/oLwyu05Jx1BZOpvDq/yfuydsRc9Notw9SW7ZSo69EaODTz3WG/RbR3X1+wYMHpsCjQFyx4BoyMQ1+HjLePXayYrGCv8Xr29/TD7WieLJwXtCZrUYJYjtjwNbNoBJ/NvQXn4GIFg5WDW3Wgzqd7LzkEhDAgBBY37QOwCfEvcKk8t3dlUs4pC2wBeN2XNaxjR4I8SWeCkcunJXcZAVs42Ulm8zPDvpbnu8YbbYA+M9T7a+2/U3ME1f2tJYmIm3ejVWjUnwrBZdSkecKIxItT8NkldnmTwYzKQ+9TAzA6Uc8oxnit9GS7YZtArfQeOYmfU8ZPeGMZrYEmWrSlf4GOmJQU5pkTYcGHoRSC9BQV546Mm1o2m3lzksEKrg6ia9RZdw/D0j618Gmv/BuRGuMkz96i4GGzKnB+B2j7ZmX6tGBgQrhSBJtTVG+bH1t55njjCxCORNEXuE0fGToOwhtc+Ca9ML3QuN6aZSUgm+TdZt6lMK0MqXpnn1WPEu+lluXefFer885Yn8u7DsaiGvlApeTLat3eWrp2q6SSfrK/GdNrJDIvSFYpLDMFMeAJnm6i61Lv4MiL0juuNyThAw1gYgyBMYQePQIGDug5iCeme0TGNM7LlkSm6MrdOf0dA7C6bpdlL846kvNKaP8qJkQ/U7mmyr3ycARaEdzKo1t5eBfvae8ZCAMDmxA9xEuZ1ZJLm4P1h66/YlGnd5+3oMtRto5rhytR8yuthaEeq0ZAa/lCHkfZC4SsPFf37Wfm3QViH344IO05PEjaayH+HrF9v0Isxy8o9y6KU06rh54GfAtCcKV9X2t0S/uPwLc//hUA8Ps//xG//r9f4cfbX/Dzf74/GZknxbGnN99Cux2DFzu9WuEt1NurjtV9eY2CgPYehKowrXgtOmjuvUl4iqS9qmMqEV2HkNegkF+xWqNL2Ucsjm7yR/INsxeZwdT959lDnO4BG/TbvXdBk+WhHMABGKJHHfAgh/5Irodx8MyAD/Keka7F8YTkwS7EMkZ9euQhXE+AJwwPG6x/vgecBzOw+nCJ7uoCKzjQ+QXouocbAtbM2HhgeNyIZp3y4TOtf73eLN8J2eYLalaCTDpFAFsvlQx0biw02m7MmjTqvkXjVPoNdmh67zqBXeVuKbzmp31WHuw4JzU9J7yKVcKCBV82FgX6ggUnxNgoOT94A9uG18eWxX1s8UZoWQFN8l/172MrvZBNGYGppUeEo0r7ZJvXtKgkkOqMrNoiGGFqVJ671Qpu5RMJAQCGARzEjXs/AJsBGAwjqPl4Sop3OHUbGVKZ2FOUVTKVBuXjL5FmKwm0r9gwePXnMajlg/rM4jUHWmHh+hxp7xBsShl64Antd4F6Yz0RJn6OXqD9ghAl9vFznH6eD4q9nhycIZNuizbreT25YZ9tm93bzW6y4in6/do8u/5rxDvSEi4fDIqCicluPdVfaaq9NAPOh4S0Tr0HLh1wH4xHDvHo8TPynO6dNEzIghkt7KRi9ADo3L9r2Fmo0OUAGka/pxNh8z8l94nyTgU/W/uZCsO24YDOteUABzAtB9sJk/2w8bvZtge00bvCROFOIdCZ4vNoIkDRFjvQsC+Ndb523a8F3JX1OLwqzH12206iPPfZ+pwcgZRfI4hiGsUfkZFzNuuk5ivHvHRRP3oAiwDGMC6w5pvKycXUGOWCJPeaMhwRnPNweijAkVGeA6ABBIc1GAGEDUcFtZaH6B6EFYAASvywGUfp4CrByzrHlKdwDcMa1pl12UeC6WsGfs5rZnAhvlsRXOfRnXVYnXdJgQ5mhL5H6GI52dadc3F9SXUNIydVfjmvxy2u/yDUivF91vtD+cLUJWzeyArYG8TNyWMOi8vqs6VIP6AiGMgW8VcAPiAfGIb/AAAgAElEQVR6kmGal3IVHXf/fE+CtyTw3teV+wTt//z27wCAsz/+Hn/5//4vPt3d4od///dI4t4Y3lK7vSe853p7Ttp3SZuQ+WfDZxxG1S6TXqmJHCnvqql/GgRrQM5AaWRciZVqxS27kL2BqZyt4CNk+Qo27phPSNnNKM0bpBf8UUp7ChU/JAWIDEkICM5Fbkc82jjxIolAoCAKcjAYQ6yjFYny3EXmqI/cEAXADQ5ucAgPAWt+QAiMsN6A1jdYDQGr82t0F5fwIPiug1t14MsVcHeP4f4JeBqAtXir1Mp2FPm1gGiUY3S8qUKLw7NSz0WfoKwkzpVuEuKq+9X1Pq/E3trtptJNeVJByu79+EgQRD4EZNeC2sm3RyXhghcsWPD6WBToCxa8FN7xvuElMM+8Zg5nln1ovjyw4hN3rr+NEFG/jOhr8NaWiS+eUxWGyjzV1afcdc7m3ssMTtdF+WRwTlnYmphiRGWRA9hzFBBqVvrnGEwsVjUAgjN7Gc4MMRecb4m67LUF+k5COruDajx/KWb3XWLqTu0vA0XZaeL7zsjjkern0PnKKM/lxAkHM5yN0FyDsSg8YzwuvUQ0SlRabsv/rfJMCAh4VrE5NdYOh1qX7yqPry3TZzGnpLRzseN4jcWVh1yAC/AQM/sKcRP7i4TXOZUhivNKOAQJX9NGOLBf1YkfAOZxX9+1GZt9ZxtN3P6pnV8FEdwI28p7MgjPv9+x2sZdQ8ffvGBmOxqR52haeL7Tg6rPupJbfNZkO9Q83VRmrczlrxCu2t/yl6zE1U27z+7anc9/5IVH87JuEMjwaSp7SwLjbfMPRetsBevhlQkeOflFYR0runaNayCzlhqPJYYhyDk4L1bnRGmKBTi5d48yb8aAgIF7rAeZox3AuI/0pyTlMCkiWZQs883dpAj5HI+GCVr/BCKHdGgrdQsWt/O6hIii3xPcysGdefgzVaAzQu+iG1ay61Uso3OilU+CZ6lD5ZvTJ3K9UT1tbpvMj2Zs5pM+cH7k+psqY6/lkQfwJM/OMW2Ffgx/fyWR9R70D4iW8NfY4270BafC+rt/4q8A8DXwh7/8CeuHR3z/7/+8NlkLFrw/KB8z4n/MvnCELZPotkOhNhmaVjyfDPX+QZkeRnRlTrqsErIXM0p7baZqP52U6CXfw0A6XL4dkxsmk+CW9Trdx8gAx71xGBjAECUIDgBxPEvJLHyFyg1crhPlZTheUROY4r3lGwajR6BHDH2PsO7R3z/i7FfA6joe7OuuzjF0wPmFg7tcob99AN89Idw9Rct347Ey2I5m+ezaWw2UHqHV8pfKZNWeqrRYJPXGVXoadpJXPQKJt+Dqgfl5ijxnPaihLHPdB0dxJ2hdsGDBq2JRoC9Y8AyYZMwOXQPfq1ZsV6tZPVU6Cl9IusD7VuCc7HQL6rzS6dv8QLJo7GjM+yaTNqKT8h90M4BooeQd0Mmfd9mjtBBDgeGE9/XCVAeWk4q66ZL70tVFe3QFyoUcOP4FBCKARYjLRnALGCGgFsTUkvD8Y2va6neLuTTtrirgzONaiZqtvDKdpCRhbgp+d0Iq13tEteHh6vm7nUT2RBp2W8bd7Bydx27Wh5TjWTfvcc+vFsscFSMDZIzFcFl5EPtnttjVuHNtUyrR57pn0337K3gcmHPRPvV8UnleWxab+MnFnirCATAHgEVZ9cRACKDAUXH+gaLFuffgzmzwk+s8zNRvoz8dMVWUVgrHgKupcZtQbGZcbNvMc/1p5vR9+tpUvR1SGXX/GI3Xdrj9YYRH9nc9v6ZDM0XgLw+nstZqjTOqvmw7nDg51+9DoyWkyleUxKyK8hSFswt2B8A5kI8HIomiIp2TEl0U6kQxnPBumlySuak7U+jzqfVdrL0T38rFZx3Sfup3BoDrckkkKZY6Z2lWIRGcv4F3Dl6tvinekuGQlc9MjA0zBg7YcIjWVwxR4rssRBUvTISQeHpKc77L8nGOwmZVoGMQ+jyBQrSCJ8qWa9GYXflkuZHURT6buujC3a8c/HmHzhEcM8I63olOXioi8ewOjhyYooVZzSenT6LkwQM0PmiWjJKmUPAnU2F0cZmYo5qS4m184oHj+U4+P5pnapU+ldXKfN80wk2Raq3Q6/SvDS0LXhY/Af/46VsAwNkff4ff4gx//+67VyZqwYJ3BCunqZ9P4WRbv6j4ncxrtLwcyvu19hscFcfKRykHY2Rl8cC2eFvzLF7GKHuD4UbaVHpmm1amT5d7csVM+yNhkJx5wYjW3SJcc8LTZLkeAxziPjYxKRTTkit8MMSOEIIHDQ4BAWEYgH6DzQOjv3/A+vYMN90F/Nkl6NzDXVxgdd0BH1agyxXo3GPwBAwB/NRHvpJDtHZ3wq9UxjplRXDV3uX7Qj5iK8x6CUgVyKOkaZZB2BHTrHHuE5afYvvuVJk1XkdGvtp7y2fAq8hsFixYsB8WBfqCBQteFbucAn0NdiLyVS0Ox3wlQ1uT6aEi7JgTNwoItdSB1MnZCliJcLWj7O4T6lqJQSEAQw8MA2gI4CHADVEQOCT5HSXlUqaF8z3o6WSzMpMMYpfOvU5vDsx+zvLSSY/SaFdu/aDG+4WBPAiH7ls/A0x1uf0xJamwGeQwBC5P5ocQlSFp8NixJ4NDT8mzHWFb+ny9uZudV1Aq6UfFU4VJ4/2uSPnWwnr5OSl0OE0nJXFzHH8QeBii4sl1sX6DCFI+Ilqh/YyovFpFYQQnV+3vdK4p7j2rfttGnVtfyXzZtg7b5JNiy3ymE1Qz+aS+t2Odt9y5zBVnp651aHsztk4LnzMay/XrYmqCqfm0HcJtzWcHHrWVl875ZLTNYglN1pV7fT96CmvXFk6OMNIngHRYw64PFOdZZw8mirI2GQzVZNqZmWGsvMo5O7OME3OMCIOjQjnztJpuoCjcZgQMYPQ8IIQBg3oIYQYHD/IU3bATR+szBJCLeXrnQJBDBqAojAbAISAMcoDKyTyv+XsCcT4qkJw5caSfhMBk/a8W9N7Ddz42EXM8iGoFv1LmFE/bTqyyFpebgl/k8wPK9aBVPRuUSvRDhNq1vL97MxPXF431d//G3wGc//F3+J2/wLd//dtrk7RgwTsAYWfDgKm9wFY+Zo7JU8ZjD+j2jJGZlkoUxXWEkQcwLgMyskLaKtFVIc6Qa1XY8CVGzpaS5cxnAU1lOifF7ny5qWKqsov7yIMgqIxNk4pW5iFwWqbUgp4Szyjkifd37hE9UHphsIZohT4MUdHunEf0PRlA/YDwuMb9j79gDQKuz4EPZwgrh8Ex+IyAixW6y3N0GwY2hDB49Nwj9AEDqGIyta4b/c++V+OVxJtqgW06dbxGWi+Omll4AezF0yy8y4IFbw2LAn3BgpfAsv41MWV5nq1mxgLJgt+aYkBOVN+lBU+StaXfs3lZJlqYcKoZ9oYg0zkX70darYCLs6gcUi+VopcDc7z3fBiAIYCGAdRH5TlUL+QIg55YdZRPuAr/HT/JnI41paJsQdoUAKouges9nbWWnaiYSaZxm4Re6rHlEupNgQ7vf1us89u5le9H1T/SQWm9vbmKOw5JKLul8rdantOWYMVOOKJWHqsSPSAJ/RN5SW8uCl49uKLP5pqluc+j0fy5i6s92kGROTsHbMOu7gF3ROrnMm+Rl3IHEYR0q6SASYrzXyi6bqWoOE8zOYvLjpx4m9ZamPMWhkyr2YoT/PsSmQtv+5FV3KW+mYJrnzWfukK2mrkSZI3uUjwEO1qe1xa4R4Fa3bhcj7gYpKPJ93gaXgNvod8rrEBzyvKczFxBjXB7Z7htTcl52P6X+py8jwLRqJwl5+K8JBbn8Y7weFVPS6rI8l+Ua5K5VcLkoQyqKMBjVeW5LMo4aX4JzClCHbQntbNURf2pL8lxWs88Eby6XCexZ+d4lqmLNlPYhAHMAQEDBr2zHABwC+IOjEGcu8S5hQdOFvkxTQciB+YBzFEgjSFx6lk4rf+k7zg4kC69XoTVUupB28NLO3UOvnNRb84s/HnVRBTpcc4hBNMHX0Eu+y4wNZ+sEJXnkM+zA9O3luhAlnR9JZ8/tyId01CnmCBfo6OcamLfn/an7/6DbwF0//s7/N5f4Lu/fbtnCm9hUXqPg/tLrrfXHKcTee+8X60Xk2r/0rpmKkmtJNCupNfhUjKV7GVLvCTf47gGKyeja3Koy5ESaZRD9yCqlDZ5WTliCCHLDa28KCXFJh35NHK5Q6B81mg/wyzW8/kaGziAiSPPEsRdO4lDyFQO2eY6wHVA6IFAHL3beA9mYYICg4cQ0w4EB4IHIfQbhH6Du59+FhnhFRxdANfnoIsObkXoLlfoNoyuJ7g1IWwI62GNDYQnM9eip7KkKqrbiKo6lYiFZfqMbMP2cdutt+wTj5JPjLBN/jiFPcPXw3ln0qv9BR25f16wYMFRWBToXyQsU6Wg6nPBTqhOKGaRc81IwTC5L41jF1kGEKpnTSl5+SvJ7bJAqxZ+MhnhoL6zUjna0i93OJGr7p1qjBSNjXLEPUO9AbHCWSqjFDwlGbdTNmMuPwniYt2BVx7oPMh34LMzwHfxpGqUiJoDndHFE4cB2AygvofjAOIAIACOEVYkd2q6LLTtVFAb8xR1Bhhc9Fkmh+BdUvQlV5fMoCAWQSGAB0YIIVt8Wova4j4ko4wZVVQD5CWKocu2dX2SWFNkxLKFA8fZswzPelc5F/RAZhwzNVpsIlsbbPOpQl99ppvWIpodm3ZMHDHPaL+Z2sOMrAobP3atutamI93hpek4sJ4yIXERZ+Z4Fj9kqdTe57QkfDQ6jGkW956DARLLZz28wiGlXOhr0kW3VTvZJVxdwu8C219Su4ZGvbfsxBtrWvF7fwERF/7cJohN64Js0L144dB43kGV5jwMwA2AW4p/Xd7Ex7vljOLcziejPmXm5hZ9ae5vTfxTKAcr10vqiA7zuKhDTvNyESe1YVVv+mEtQCbGU7ojfKQ8159qDaqv7Fo2VU+l3CUmv2t/rSuEUazHRbolD1bESR+2zVr5zfyWqG0W7o3zzbPu9Su+plUW275swuvaksZJTsNaKE+3edU5ijFv3k8pym3U4rvtI4TiHslmpJnnzlWvDM1qWW55WhvWO5mDPEAO7Fdg50HOg6gTK/Qu9l2Kd+swy1pDwnOpNxM0+l7dnevDmt6NwjsC0qEty0uKApo5CNel659WYRBhb4irIQHssoo9tn4sB9ENnCNhNcv6iQEpnntS7pYJxC7NzU7+BebomlROjpInOHJw5OFdlzyQRLurTWZfBh/j+OhSfSCS+9AJjgkIDAdC5z3cLRC62Fa08ri4BC4/DqAulvHsrEPnPFxg0DDADx5u8PBDB+IeeldL3CUJJ03yqbyolwYMyg9EGtL+IK0Fdq8S24jtsJLHY/DEu6k+bhItxqXhN9LY1kpt8CAwPI3GmVwTq98r83yD6BkGlJ9rMmcSdcqVe7EcVJV1z1GJrgrzr+wnAT8VixsOxzFxhZaj0zgUB+RbuMM/jvb+7//CdwBWf/wdbsjjh2//sUfs16ozxRtf9yfxJdfbKcbqKeM3NgL7ZDF76NrM58DuRZ/i1WbQ3CoZ2Uwo5lnx3Gbj1MuQZaTUW2Jas8SbDAHEBA5sU8xwBHA8ZJf3yfUex+bb2EOw+avSb64cXNf1EHmsgUQeh8ySipccYoAHuc4leVVjsTyPBwWdXuHIhOAChj4AQwD6AA4OYROV6EMnBwvh4PwGge7QdQzvA7wH/CpeI0RX0bsOnXUYPGHNAZuwRggBvo83PUYWgNFzyB6W5ACDC4g8USQVTIRAjOCkHYLd5Lb203bvCPNeHju71aOyklueyeqG2GVZanZplnbh4lE7wmjjYfI+dJ6p9moiv2im5rReDL2FXOIAHDO9HTO1UuxrW5PYVq888R16gJbHydQ89r547eUUeL0l9T3XW2vRsvNGawowWBToCwTbZpBTjM5TjZY3uGnZhaRjJ+ljcXDeVshgn+UE1Zqx5Y6dKZjwKpwh5PsDK8ZDmbT0wP6usaVQKtep+a+p8IScV6vY9qSqCisneChABJjKrFtFV6HAkA1C58Cdj67bz1ZRsOo8Br0PyUULF3tHOA8DEHrwMIBDgAPHbQRxvOO3i64sybno4sl7sXxyOQ0tqmFeGBR10BS3Oi4AFNSKKCRXmTxwZOKVYdaKI8R7Hg0jqSdtZ1tB2l/vzMyrWXUPtI2b5HWSfjCunV8YPJJ2CkZ89zR9u1xpMJF5/SB/thiFQqluNjhM+VH2x1+lK2FIBegnmN1bG5bKcnVScUKNd/vkmxRE1k0DyThxkrumL4dUALBezlYoUQw9SaHBaXzp//mOBE7pZT1DWZbR+YfRJn0Gc9VSK9akTceLFZdxbMLHbBSbwiPT5tcAHqQO9ZACM5K1pv4e+qg4/wTgwQErZ+aeODexHhTQsTB5+GqmPFR+qQ3V52CblHMXKtPmcdtTvXgBchhgilIqm86OEfuuNV5Sf5QfXD2TJisV5/oCo75mh0JKfrZ+t43h6VKP02o9agsXyn32xByj398g+7kdU/VmGiatt1UBWwf+2H5SMa707sKmJXYTLf7PvnZZqLhDEqPfMocrJdsjmN9kohb0aXiHgletx1p1r3ksiweTum1Xd+0enNYaU2/kduhzlh813khUQJuqIdLnCNFSPN2tHpXZPERX6no4MqKLSmAHgBhMA4ABxJzSI1i6o4KbyOkULdMwmyWcMHA+vEmgeOtJuAPwAeBbOHg4OLGw0oNPTqy8PRxWcOjkMADAIYAuCfhEiQcEd3KAwAGOkxenYYildiB4IjjvYzOedXAXZ1h98Dj72gEUwKFH5widc3ChBweARIFOwcGpmFn5abBYipmZLnUVGTBB2woybmJeSCmYTjRiJ0tOpF54xqOMyvBFuNZYILOm6cbJhrN8h8wpk2uACW9xK5/fmGeek6UegOimQJPozB+Qrcstrmbe3Us61xzTDSjdwyfaWyfaXgpHc88vuy5pnQI4Ce0ANn//J34AgD98jT+cfcA//vbMd6SfguxdXWqfGieh/QRpHII0d7wiDi37kbRT6e6vwRcZGUmx99Xneb9dkNTI6dQol6H96qBYB+XJ9HlOwuikII/fEct3WWbY/CNQSoIo1jrr1TF6L3pdlqm9h6Wl3n9bmvV5vYcC0toWD84hek9TPtLIWziYMhHALirRvSO4zkuZY4IsXnwQREHfE4bg4Yfo2cgRgZ4CHD3CnRG6FWF13qG7PIv741UHOusQVh5DGNA/rtHfE/gJ6JjQMcM5oGc2h84J4Hgk0pGD4wDPsX4HijwlO6n7nsUbkNaR4R1qgxpbna2966ivUONZhcJivoHWO30WqrxtWK4CN0+18gztO9BRyLu4fop0XYENU8vMj8ChMsjjPQGccF1oDNGCG6aZOWjBy2Bii3BQOoegNe8Usg3M0rco0BcsWPDMoPLTCh+LYMcv/CdFMXnWQt1d6GRz1zFMYirglE+vgtYo3QwuCrGSIE78PjnZCESLehhX0DFt5mipTspMSZrOeRFoZkWfZV+D2cw01wrJJ11zixZLV9XNEZwJJwrfUF/4EjDVp7dsBArLwqOarOJWaOLzOZCUlLtmYjksRUsg3RCQWOXjlOXuLJ1GsH0KBnSfzdIJju0mAcdcoA+IgvYHEsU5I2ovfFQ66aTUD1kwfufzPadaL2KZ3s7sjcwvW8hoW+7ObVWrdmk10y5tbtYWIcS8qEEjYfKh51meE7M9dhu9b7A8J8HWcjcC2EOEW7Df9ETH1/Mo/g5z7FbeToVlMHMulfNva9PN1Xf5jFyYEaKKcj2qdSk7HqFhnm5Ls1Gejx03REEsXOT3XGT8osCTIUJczVSluQCuOE21sQoi8dFKnXJROYBdFKwyhbg8hYCAeIFnsg5jJ7QFBB7AGDBwwIBbUS7cJx41BESrLSMQZI4W+iEEDMOAwHHeGc4A7gm4dMAjwZGHe4rW5wwSt+qxARyiu1QHJ/ecx4Opvlvh7OwCl+dn+HBxBtdJvWEA84ANP+BpEy3zB5ZjdKSuWcUaDqL+Vk8E+3jaeMvSPNvnARTepcaBdsOP8qnW4KJcACBepOT7Rv4uZmiDZH2FaQW7jkWStI+lf8Hz4J8/4R/4CfgV8MebP+O757ojfWnuLxOvxsd9rgzkAZhSQLdQbKdVMUmFFy6i0oviaHdEiJbqKhtLDA0n3mmGWMO7VQKwSVbR8IuNSSazU/LO3pHOJhRHtiwwg8Q1PXGk1/vIKwY4OZDNYAIGMJx49QlDVKyH9YD+cQO+X2NYPcCFAXS+Qtd1cERYnZ2Br88Rri/QbxiBemw4SJ4c716Xg56RXpEdhqjI9cjsI6nMU8tkCw1gpDzX6rKPWzKnF52vpxq4tYN8JlnlW9xAPzfeOh+8YIHBokBfsGDB4TAuj2r+hor/qBkvC2SoHe50hAp9M4vzKOtKQDoqww7ZhgmrBj0Op/eTe1EUeSdMMER5HoNH5TklppsCZxWUUcRF95EQwygHeA+CF2uhqH5Xnl5lqKV4eVwoRuZ5rQssq7wvlY/HMkCqYptBi9FKQv1X5MEOUUZUOPpeI2speCQtWaExsaEY5XXE+LUbzzq5kVUojcMci61TUKteyWySWxursi+yeqGwlt92H0k2Lo2ex32/dPCTKNGnC7xbkjObx7rNzInpSfvpmw/A7R1wT/GUvOZBXu4GRvRsMQxglbA/VIrzNLlV95yXxO1SuK2YdPrQyGpk6DDRt7nxbSrNdubVBFhYCKN8XkS3ShGztrQ+m2NhnHS2PH/Dm2Kyfcc+f3FKnhdT5SlcI8zFn5iDJ9ItecGGe81Wf5ya7+dALdqmqFGa69+aLRXZc84g/y54nVZ+8/UZU6Ps2pxUYR4VsUzCq6b1cL+xk5slr02shKsSXdyHE1Naipq53BNwo3O18n6y5pC49VSPIBRE0BrgxKKaOV5VwqwmPUFk1oyBBwQM6DmA1PIKSHNMtDzPNZYF5xSNrmiI8QhgH3lGjoWCJw86dwCLZXzgtGQ6lvqX+nbOwzmPs67D1eoMH86u8c35NVZnDuQY62GDdf+IT5uAJ6wROFrQD4htBREuJ97c9PTZ1rNL757TY82NjbcoRQdur9KWf6jCjgkFCgsyG4kOLITiZ0PZR5OlVaIDwENJzig7fX5lnt2Z59oYhLjBcgBuZIzc1ovznjjFhuNggflr5v2M+BH47sdvgQ+EP/3mz/j21Ir0o/Uer8jTtPZKe+EN82O74Nj++hrdPc2bx82Xk/PzM7cpP4uiUNJkHrWp3SeNSsZCT8lkGjpLxKmfQNHXeFy3U3kaG//RAju5OFYZ1W1R7cXS9kmv4aJ8lYuyWJZpUJYLQAgBTrzhERHId1CrliDXKWrYASEmExgYCMN6AB43CPdPGDyi5XgIcOdA5zp0Zyvg8gL99SOGdY+Bh2g9PgQkzbiLXpNIrgILwktGfooTi0aizE9VqiKKyf0Hxu1Yiwds3Dnm6kXGdWscHDA25viYkZCgym3Eb7zB9ftQTMmNpt7XWBTwC/bBEcvnokBfsGDBYajXuV3X8PrEZ0uQ+lpoCmKp/Kx47Z1g+StHIB8Fb+zFz2XnRIEelegqlGPKnjiJxboludmE3D1kaFIhtPegTu/apKhMN9bnelZ3UnBq6FbLc+Z4j7AKI+clgxMvP3vehl6Xlx254z6gwq0Qttb6TSX3HHvrbemdKr/RXNRg4Edzkunjc929eN5QngMA8dQ2afoZKV3Tee+EbYK42n3rrieE5+bw4tCFjJebD8CnW+D+Dui8uYNMXSBLvKHPXY18PHhUFIGz4vzZ55ojOuBzzhGt/lrsx2m+fXbrzO04Ok2Y6aKUfbyTBeAzkkdEHDlRNK3QJ/JpPSdgrEQ3jFQxB0/03dbDyXaqhKFkJZNUhmiQkT6NsjBTnvmoMTNIUM9K8dyKXOEjXoQo/aszi9fOsPBv8Q70HeYwPXhqrM9tsZNSVBg9JoaTPJQ1iOy4aCuDR3Ayflnck4v79sRfOlU6axllynUAXEDwV/HwJ7sk6Isf+RZUtewOCAjhdiQwTbwpI9YnU4zP4m4+MKgXgbhDvGYUBLCLh0WdgwtOhL1RyBvKRkRw0YKcxXp8RR4XboWvugv8z+oGZ+cr0MrjbvOATw+/4IEfMWwchgHomRBkH8Opf7CUK/eMmDaDxVK+OCTSEgzaRtNEqkdHr/kpr6n1vMpgKr9YwC3E7EmsDifGdo/qc3RB3lllOleBBkQJ2Cf5fci+bisxe8Q/NO+tbbAt6ze+2N0B3959C9wQ/vyrv+Bvf/3radI9ttjH1vtROHKf+Zq0H93dXnGPfUy1bds61WzESfGafRVbyiM8WVOJbtdWm44IvpJ+l8fzd5GUGmTEdZiT6506cP2JHI6r31MHk9M7Nvvrqu51nbd8T/qu/ZvT7+hdEmAMcIjXMJKTQ4COQEPAQCIXHELOYgCwYfCaEXyA6zYYHGEIjGEzAJcBfHaGjjzcucfq5gJMQH/uMVys4R4CeBPAgcFDLDsPnIml6PVSajTJCr0cUsgHFZA3hXV9sWm7VpO0nunzZ+/WVv6xS9gGQXvT+MbX42dFq/62TZwLFrwOFgX6ggULdsC0YHTqdyFwrBlbKr6YcJUE80Tgie8lTa28Z2jalcRacOOi0pw6D+pctKzsXFSmyx/7LExVmVvcJ3C8wykMUNEdayB1CS/3qZP38X7HRKwzSvPaBnSiMCZQcpmVXDRlBr+MI8LaKaZnR2boKEvsV+ZBx3dYvwAD2HIvNrXBA6bHWBGHxnuIIp+p3c2RSPvYesxt+X1Ung0JatoT2c29VKxuDhsnh3JzVzNPrTy3FmCz0E17FS+1DdUZ745d6rB2eVdbOO+SrrVi1leOogLk/h44E3Y0SJ36FZISqd8U6bL3KCtA56QggvdtZTpuPP76D/8DgPD9P/6lRO4AHs4AACAASURBVM2ku2P91NiVxFbW2l9HAiXzrFbY1IukFRgVFug1YaY9W/Kn4j8jfHppEJL6crZqJy2r3/EmPvFbzReTP3dLe8c5eRsNRX+tvo/onGqjFqyzcTK/TdI1i5deS38ppt/IecXhU9PsRBkdeYAhjc2cMMHwBzoEhf9kt0cvU2v5mXLrAcl4n7Uc4Api/e4zLQTkg0oBCCzW3HCAU+txkvNMDr4jeB+Ft4EDaIji3eA43jUqlwmp4juIFXrgkJIa8AlZiEzpu9IcZB5XvTOL+9Bo1M7JcotUEZoO5sZ2AOmVR7EIDIAdIWwAXsn3e4C9g3MOK+dx2a3wsbvE77qvcH5+AXfe4Sf3CWHd40f+BO4J/UDoQdHGSw88EMd6EIt7uzKhMeNwarlK6DrHs3Fu81RX29b90dows04Vr0y/njuoN/W8GWhujYS4cq9oOSgv81XjaDwnA+4BwI08/yjhPlE7353w/7P35g2u27be8A+UbM9yctI0bW97lz7N9/9M702btrdb0uQsc2bGFon3DwIkSFG2vMx45sRI5siSuIAgBYIAAW4TtGfCUR7o56r7GeEj8N3H74Bfv8Xvb395OkP6wXACuh8Lh/RbYdh7pXCu8cqHV73TeF73SV3Pznq38K/RWv1AOIrseY4fQ/ktxal8tHhpZ4PZlqnF2LmCKG2kizowjpvaRmURRgKg0s0sM3P61mAwc9zIiN7AXde36Y9QnhWONHA4BLDrAAogNaJ3MY6RLo+993Gznq7ZAoANgbsA7jzC/QAQEAYP2gzRy/wa6K6WYkC/BhYOvHLA1QJ054GHAX49AGsPrH12AoDIlJSdcRxnQzqD4NMGCEMC3cnY/JCsXqFB11pfUolPTwKT5bNJUD+zz3cg10pmabOvw8IrXqYCukLKwJNjpYJRiL8pXmPrQkt9d4ELzIKLAf0CF7jA00ISaGuBmMrfLQPWCRd5k3OpKC/j76q+GqdKvp4FKU80jlMnxvNFB+r76EW56BCciyEw5S+fqyj4Dx48BPCwAXsfBWpAwj+5rEDsKHmfl+fMR0E3O2caAbApy1ISwtPO1mDuk3YWM4S2Vy7V7QG18fxZoTaCHYwKlWNd+9gqVYs6j9AsaB374HNqKD60qUSGAGq8IBhDgaaJ6fKmCV0Qc/s3sLVNzfWT3dmdrDCK0BN8a6lcqbe4n8JvV5nyp5t8mAF00QOdEOvZbMqFUdebthv6cojKgGdgM1//7j/EcH7G75xMPzTfm3SqwLHXbQvuRNopYlbP6++yidKsSeL5YKrrtrWh+OZ+hnBy/m7lPuTxWcsjUyLhtj7cgur4Va5/1LsE5MNzhK8X2XIbiOwVADk4p+dkxzPOCXrWeVmHSGZitDb8rRpy2SNLsxr6CXDFnplDVnqmkEWSm9SLCXBiNA8c4DkgoIMXlpxqdA7d0mGxICwWPVwXw8EPw4C134AR4BAACnAsvJqjd7vngE34kFmQlqnypEQ24jSvTAwCu4GPpfikfI5zcSACAuBIAuW76JVFXcSHHcE9dnCrBfp+iYXrsVpd43Z1g6+uvsBvb77G9c0VsOrhmPDR3WPBS3Gz70G0AJwHaCOVBzACmIOE5jd9RUUHxvaL8jyZ2pMhPDUSR0MlIswrtvHh1Gyvnvt1rh5ZLmyFFoEpZCS/JtG9v76Bni32Gu1zz0f4Vx/4eynsLQBPwK283FbWBc4P33/Ad99/wG9+/1/YhIAf//K3c2N0gQvMBMNfk9zTYMrb5KWDQSfKM0JLwCp+j+WbQlelltqmboJG5ImbAy3dpERZf09GRGo+axlM6zRZTizXx1wVpbozeaAhzzUuOiGOi1DVFRiBgI6irEjSoq6XzYUk02Xw8UfcywgaAFoziAIYHth4hI3HMES9XkfA4nqF7noBrBzCdYfujQc9MIaPa4QPDwgf7oH1kMtWmkfEwQA8c4xQRF30QLfksuRryhMVSVu/la6tz4Anb/aHEY6mWFv3U3xOo3Wm3E/VVdPqs1uifpaNusBLhYnPrwUXA/oFLnCB3VAoLVtKll2CPVV5dfGgAhgVj0fpjoCkup/EXa9UXvVlS15u4ta0dOUy1Tjed4AYz2khYdt7B+cIwcWw7azhmbSEIIrQsEHwA3gQrZJqS3sxlHcknufqCaVKIzkfnStZtbkmy8o8UkOKZMyGcyPQ1dcRsOmEHeTaWs7rgaQ8FWLX988DB9Zlx/cu2dUa2po7sveseCr76Bs9oprJ8idWZdZiMtJ/1PtltY8nPo5Er3rB2FYqT9qolaFJ/xTja18j+ha2VXi2N43orTbUhRjlgW2PkxDsrL/NZp/NAHDI5aT3bFQqwod8aJJ0O2gb9skTIXudG9j5jWCsSGiF8N12bwvU8UpV+roue00emtt0AFz+HE0YFbTqaeH7kph6xUMmdXoj+r+gNpwUJrVV5vE4RLjCnGmdtIypNC0UrDfQ6NvYgu6WOYhad/Jt8DiBvmzKrqx1kcvG85TFyR+QjtCBpLP5TTVqRB9h2eCrzSnByBo5YISdd+KVJaS4cgLSvnWRtxLHE9qHQNFz3PKNjuA6QrfosVj2cJ1DCF5s1x7kPYg9iLtID0ZUpAbGwHfRE0w8kNR4zEHwsp7lhBiKPSlpK1FEM0FIFkS2HiJ9AyRygBjU9ZgUprh5Fb0DUY9uucRiscTKLXB9dYWb1TW+uLrF16svcb26gl863D08YslLEPdgT4ibVXuAdIOqTwp5CL2aI5BQOJdF2vNIxJitL7TpJjdSNXiYzWNltnruMFmK56lPbGNaH3CLM2yR8d5J439RPZ8ypDOi8RwAbjifka4JrGyqdA1lEiCPxwL1feGcm2ZrOexnAv/87q8AgP/+f7/HX059PvosOGOfH1P9SxgvZybd2aCQI3RdNMEvqf6xVcje/k5ja5+T8M2Q6fZRPYdsiRRV8HazRtV7XROnpZLIEFyXkeuMQXDKtUE0t1Oeb6jVDkLZHirXyaO2mfpTdBczX9Ub7+2c5eKzwPE4RUcc5U8AbtGJBMngIcjaWModGHAMpmj55oEB78XgDQzLBbqrJfplh67r0K8c/HUA1g5u+RDLWm+Au0cAnI82ck7W4dLWFBlfns9ZHVhSjWSMKpt+P9aI3pJbTsHfii6TNlJ1P6uySubZFS1odFONpV1558qPLw7Kby/BNkeNmEDyVXxgItkFLtCEKX6yZdxcDOgXuMAFdoDR/DRe7c5eCf7FvRU+n0a43zpvpqpr3ORlLRvPBlOeLpKcA7p47jm5GKY9hmyndO45uWweijZ3EpdxD/YD/GYA/CbuAiXJQ3LuIyGe/djFc8919yk4Gs8DM0JNDFWOksFVBdQc/zO5racw7iq/Whl5pAW8wGcDLeFiShH71Dg8dSV7KpiIgOJItbS4Z/N9VB/JCdtCJ1eItZCTDh8pK7aUMVrIUVQAOPU4B0CLaPjQcoIHhsFkceKhbgYeIRpQBl/yn73hmJWmnbN2KIaa+fard3QkhMzHtUdqZspF5uIv8+0JZcZc1Opp3D5LaJhx8gIWsDvDtV2mrTbsmtK39a3KFvUzUKWUOgQpe7u7c7MqpjpvfAuEhKs2U8931Dpdog+rx5OEENfPic0GhDGaMbQ6IyAaZ7e1oPreUwnmd3G8Bsy3zlCv52zvNcZ0oxDUJqe5TRAnxyMcSn1yNL4nr30COITon6QhRQtko3zLQGET1wramzZKmkcjqp0DY9+ELnqix/Ct8Y87BwQCbXr0qyWWV9e4Xl3htlvizc0tbm9ucXN1g+vlFRZuCUY8+3N49PCPA/yawQP0APWIh9304Ax/TdioIf9IBminDqqu+5ajCu+5eNl1QY0QYaIMpbt+BTvmSn39k9y3DOm1Ef0euf/TGlXKvZLb+1bVLZnpwvxfI/zlT38GQPjDN9/gj99+e250LnCBNuzk1ZaHPXvl54OJTfHMPLlpMyfSf8x6U6bjGKqdkhrLRkuf5PVJQKwXN2aunKvvUCHLbU+WDedSX8jH3ESDOWWcpAtDiOtf7hhxr6JEq1w4OAoIIuvCA8RROeHXA4gdOLho+WGOOsmFB689wjAgLHswEULHCI6ARQ/mJehhDXe/AF/1cAPDhUhkIocAYIiCHpBUhdFZp1A4FnJCQ4K1QzStN8zDYnpvjOda13DMeK+7tlkU53TlAvxoKMSyetxd4AIXeBFwMaBf4AIXmAETis65RjOqpMiR53lLA38imCoyVUnta0ozFycalwkSAxEBPUVjUIdoPNfnnfw5KspyFO3qIQTxPg9AGOJfOksyegG5rgNL2Hf0ThSTHvDieS5K2mKXblKkNdpgFKxqhE+x381f2tgMbJdnm1AJxgaHrOg+QAx+AWvF2tP8eT3Pj4Sa8FO7p1O6GYvJg3FpKFlb709O3/3a00RDvxs1Hhh2l+qo2GAsxK7HJr6RXR/HXnSZ0dYRH6zKL5T7NR9UxZDwuBDkfHOKygXFdfOY8zCAfoFsgBVeCRY+yOPwdntBpWw/CHJ4wMaJes3U4/q3pK/GvjWWl90h5zEnvlcxwMqAXhi22V7NwEsbqCo8a+VFa/ymtGZy4Ik0Z4BJI/po7v7coCHDtYgxZbScostUSMU55c6Rr6g1wOp5oSG76auRXJJls5HOzZZLAMPFcOBGiclKC8q4sak/G8vJkNd4MlXASbtLFbIlx7B3ZNrK5T91g+rGx888iNFeZLwU7AOcnaGMkGfJq7JkCAGQs78Di2EeBEIHVfZFsZGx4Q/RezudH2T5EJWKVmUtIg+P+B7y5oeR0lUTUYzmpKHc0Ulfu1heBwe3WGC1WuHq6hq3yyvcXt3i5voK16sVFoslnOvAYYDfBGzWA4bHAL8JCIPKxCJnq4GeXAwVb2Xioif2EEynNqpp+3TjSfPba/c7S7lUPGhkGz2fwMWUPZ9nCg1ahqLiDFoA75DPRSdEmusy0vb5I4CrCrcV8ji7RvZOr9d2DOAOwI35Nm/w8wvj/oqWJ1Pwx//9IwDCN998g2/nGNI/12n+ArvhiPF+1KeybczRjDSTedvyUGbpaeI4oPATQCHW1LhOPAdSRLUilHvL81fXlzFTmiNZJBKd7riYL6nSY1RI2XRTxvPZ+s+J56n+YtGf3wdpW/SmSTIThwDPDEb0Ou+6LjrOAHC9A7OLx8l0DsQEz0GOyAlxE9pCNrE7Dyw8wnqD8DjALwdw5xCIwb0Dd31UNd4v0d0swZ+WoA2j8x4UIq5xmnUJNyBuyoSvZJNEe0voSr9RyzmA9H0lHyYZaMt4PrlKSHGdWMecqj7KlywiV+Mvpf38JrERGes2jnRak4JrMf62+nx8fmS8wBw48ru9GNAvcIEL7IaTTDBTK4QXNHtZ48++eCWFanV1JEbyGDoSctZ5PO886wFHwIDjAGYfw2RiQDp8iBCVSXLeOboOTg3yFAVO9gwOXnbgqgHd4OqoqphSven883SFKD91JWL+gMMnodn5PgMNz7PDMy2YT7Uzdo5y4cnBKhq2rXrHj6K9UBeQ1gBpPxSrwI11jPTRu7qthZYuDsievf6EkEi0Y0FH8k/nRBnQi9QZMq8dHk1aAM6ecy5lEscFeTjW6/x0MBGod3buUgFUXUfGtnJeYjOeiHQeiXRKi+6UnMo/cMHLU2mJl+8afGYlOkmCuowCoS3lX+Bp4IzKU7R1TgdD/a1MKTOT4ZWSfpU1o47dyhAeDXRUlM16FI7+kS1Dnzlzj2ykFxlP62FTd4Gu6nyb1uBDQfOrsBjSYyZGCCzRxz2cmXR0w6Un8RwPAHUywTEj+IDNhsFhSLLm4Bk+BLD7Ag4dCH30guKAIQSwiK267zOhl8hM8ZgieZvCyreahEjutAGVBOuAfJao5M17PuW8UyZ0waFjRg/Cletxu1jhZrHCVb/EgqISeugYwIB7/4j7zQMe12usNxv4jUcYNASqytN5DFAHkD/zBNX61Kd0jHuXLYVPsfMUAncyQeO+kUzhvVzfmvfaPluFJ2DJwKaqtp4HiyrNd64G9tsGDi8dXoAs9JLg22+/Bb4CvvnFDkP6sez1Aq8TXsz3kueuY4qYd0/nbXdrfQMY2a1KP7aiCTtvMX+9lQ+akA3PKuvUc9bWuqRGtVdagW10lFndQPtIcQ3jd7Pw4DyfdhRlNFK1QgzXEyRyETnAsQMRgxyBOgKYQH2MBEQ+6gPTcWcG7eAIw8IBvUNPDIQe3BN40YO7ANcT+psl8PYG2ADsCSE8wq89eOBiOk1H2qhA26Zs6ptJqOb6dCyR9nMif0PYeYpxPnv51NDzHAhJJC++Gauf+gxBlyszVRDt9/qd7kg3s7gL/AxhtHZAc5BcDOgXuMAFZgAdIRNY5eNEIaqIqgXsU8KcIpNQticeSRlrFgb6rHfRgNRLOGIN265KVfmrayUOIB+ixyb7qH10LOcGx3Kpj0Ky67pUP8u5wCF48BCSWrRUHIlwrrphh8rZVTWPpbElh4VHdjDknCfPMUeIJLI4GZU1WhxahVhV37kUI4zjDJinCvN5SF3E5fhvKV1b3+eThm+vFiQ2goK9P0U1ycqyTbNmF28ZSLztZAAYmpmPJK0GkYwDBCQHtrI5O8azpTfn8jTs3c4xuO19WrxWlXLjJhkrTNp0S2I452gU7zQfAdxJNI1geGYXQ8olRQgBJPzPc7mjvTU29wLpi0PzV4vaTP8xUi1P8qbHek330TdFUcF/VxkdpA9iuTTdt4ZdUo0mT9GiodlSxRA1XqcaeMv9uZizQv1t1eO8mm9e1C7/Q3GZUGiN5J3paudEWZjKezIoFK7UwH8sQ5KeR24fm+8m5XFkNhUaebXwQHcNOU//nMlbzVOE+N45MPKZ6fGVmXcCRRlP5qI83ZWbZgCM58IpeqX52RjRIZGNQCBmBHMOtNYTyKcQovlTZ4TgETaMICdtMIDAFEvuOlC3AKEHQjSeD+FjZLV61nnBvjLu6SgSYhA5Qb0QSmMO0isl6iWZFSTzDQAmCVLCeQPHGnAdwzFhBYfbfom3ixXeLq9xu1hh6aIc/egGbELA+/U9Pq4f8GnzgM2wQRgCePDARuakQPGPY1so0bj8Vp5dQbdlSDRDg6aXJm+NdHqu30I9HlGWVeBgvonmvT6bQHwBYJhIqmekMwELlnvTiPsqXyG/UfQ41zn1rl39TjhFBx/DJ4+t/yVNcaeAH4Fvf/wW+PVb/OHN19Oh3beJ+nPg2T9sgdE43gO4uj43tD79Q8o4BM7VZgtUMVh7P+KZmq4l68A8r8su32WSn+tDb+gItsot4wdkDGPlEsfICIUnevyHU3gdlbfI5GpJtZREQ/V9Hx3z01qb6fPaU5i2DHhbzGjtmOdXF4COoqwTyERh66IXeiCH4FySX0nDV7KTqVJkSY9oRAfFG4rT5pCC6TAcL4GVrNu7Ho4clldL4A0AT9j4uGEy0BoBQ45elHQy0l4l4khONbqQFjOoxAqY4lrdXtB3m/xyKkjG/3pMVOmm6t/pUV2Iu3VmNBn/pFf2K4Vt6E/NezYyhR13E7SxKsRTTEkXeKVwBL+4GNAvcIELPC00Bf/i5fmgNnjvnd+Uk8qgLDyq0bx34inu4jmMqqytItu7VCzBsWgdvY8CMyEamJLRuwd1vRjko6Acs3h478E+gIsdp7oQY8iW1agEdIxxOCQrfBjjSmVbsGSYNf/MNngeq9k4F0wZogSe2xizbfGWoDZwHVLHZwBpATujPSxB8UjD1Ma8peHaKkSejkbHe0LXP3etXmyaxrghWbx7BhCPrEgKdxJt9/AQr06YWdejoL1D5BVeiCvh4k6/yjmwwBRuVv9q40AL2sqt/GjOuKt/kOyDsv1oVoa22qSv4D34cA06f+xEcOL+M+EVrxm2KXpO1T1NRfAx5VUG8JZCuTbgId4TRQZUKKVquc2RyFaUPZu13gljORmZL3qW14ddGsLavA7C9xQPBhDi2dzk5NNUeSwqg9gYOqlu9zTRct3pkW5QinIKh5BDyCvOipOLm5ccHFwyaAMhxMhGwWkO+dE5OPQgWoDgwAgYwvsYLj6QOb/aKCBT+8u2xavIvEHf10pD00RoP8SHzgPUx/PL2QG6Q5SI0LkeV9zjlpb4srvCV4sbvF1c47pbYoUezIz34REPfoP364/4sPmEtd9gUDncM8gHkEcyniMAHBieAxyX6vasot/FG9uPCrD600OVxTp+2BY0N2OLnxsF+UjzWzMXTd/q00YfA8Av5drLa+tlzoiG9T5/H/CUjeprZIO6GuDr7+fnFq795wT/eo8//us9fvP7/wKI8M8//eXcGJ0Gjl0en9Na8FqX9k8NtWG9nWjifup5Wfwxm/t3nke+BUbH1+yLR5J9aMIJ3BhQG/Ms65xTzFFlGltP4800zvWG5110Iklj9W12Kk7HvYkcQRT3McpjBwIz5Sh3ITrLeB/DtetRkM5RjKzeAcROJDIAXo4eCwBvPIAQvfQd4HvE0O/DAhgYFADXL+HcAm61gH8D8GaDMGzgXQBTiJsJVQ5Suc6G0WsNTZXVaxlkSqbZ0W1F2a3nTwJPsXDaApZuCYUDZMjPGIRLNLfFXOACp4aLAf0CF7jAdpjQa+xVQFOobDwbGQg06YEIbMvW8hY/qI5KCaQKGkdiPO/gFup53sXzGO3Zv1a/SXquLkAhAMMgu01Fmdh1KSQouR7kXH4mSrzgA8Lg405T3wgfJcJ5/M0p7OX4OHTOQnHtVauCsu0nrvJOwalDTLcUyueWnyYF++mF2slg1kIc436YRKmxUJgrzO8NtYH2mcB6Yu1BF2ZE73M1SDTXVKY/RsP0kD6y392uxfpEm1ppto5JU5/Sqp4X1AgVGEAvSm2IMVyMLMODGDskc7eINEjGaGM00c0/J43/XLXnVsre2/Ms4lt6nm8noVVAEdGYRezgCQwWZT8bRUP8Ee35VV+T/m4YPpqKJpP3DYAPBXI5o50r6w0jmLivvRxfEuzqvNn84IVDIaZo/9G4PfvOTVPJJ8uZ4F1TIqL1+B6VPVGHfU8OJMbtwr6nPEwN5p1LRnRK4cEd7Jnn0ZHbiYd0DtvOps7CXKrRe6q6SHmHKgZljDFCiWTNZxPfYBQbp1oykCqd5Z/xGeyqtExCXr4nhsREB8FFnSwhjpfA4MD53HKhE8iB2IG4l2JM2E09L9PosXcBJz7X/v6YqwemfZ3MIdwRwkBAD1DXoVsQVt0C11jii+U1vlrd4uurN/hieYVl10flNBj/fvyAu/U9Ptx9xE8PH3C3fsB62MSNqYMHb6JsTQHJs14FgFIXrjJ0LSdz/pme1/wTbT6bZC/bdi6zTomAlu4TU8Oo7gK/cZ487zRwGo3RbVALFMjGcwvqjW6KZ4+ozdJnulnD4tYhGtcbbTieqZ9iUjsUh3PW/Trgn9/9HwDg9998g+++/eNpCn2Oo5J2wiH99hLwPhbOOF5PVfVkObvkopHANuLVU2uJY9UORxnRW1mLeXFCDjdyDAsO2XhuZUmVX1r15EhnPJKVxjqscRFWVjJ4VWvnotSdtNoy+apxnCj5y1gxKOVkACE6yng3wMGBZEMjUVx2EyNGqpRzyhkhbbgOQY6jedjEDZEL2TAaJPrlJoBXDFw5wHXA1QK4XcGvN9GzP0hUTJGHYvAdK4/ZSdr0Veo7qq4lfYhVpra6E5uWyyGAxu9DoZahpmSqyfwN2a2ZTNo4ka54PzFstz77XGDXfLtv/1zgAkfCxYB+gQtcYB7smryPhkrhchao65+JU+WBropW9A606EB9B+o6UO/gicDJgI0kaEW7uJMrAQPAwUdhFgznHIITQThds4dU1NOFmMf7fEZjrXxTj6GglWpm2x6zYEhKQOwWYhLJtmnmPnN4dc2Wzk39NhMmd3Mfg8dLgV24ZOV+bX9owtZNDdz4va2waa34QWegJ741p7oGfh0BkMgY3AOd5W2Iq/h0zrlU5PpsuLIhYQvDeV33ieEWh4dsxXHKpGhE2wNuEGl0Z1hwFX53klQpXUMJhImF++SxfalT60owHse1MQgTWrTXAi+JP+0Jr5nsc0GHZrVRJRp3u5SE9Uc6m5yS8Zw6B3LRu5wcgeVPCjPvJCx8tQkyc0eRyYJGJSEtIvdFNSWwGmCtws515qZS3rZIMHqeK6k918ebt6QOW8YtyZ6CiDg7QgDl75gcgA6gHiAHQg/izjQx189JfpSNZzJXtZrCYBDXTMgoU7mkRzznM9fomOEYWV6mHt3CYdn1eNMv8eVwi6+ub/Hr27f41e2X+GJ5hZ4IgRnv+R5//+knvL//iI93d/jxx3d49/E9Pn36hPX9AzbrDfxmE6M7+VDKx8CIv5pGGa13/e4EvGVkGDiwjK2o6BiZlfh4+Ldca0O6eqOvzTM1qus7hhjNTRpX3V/gZwVqPP/DN99Mh3W/wAUuMIJj1jtElB2OodN3w3g+zhgvegtVU5AswQulFdpzq/lzJmmRr0rfauoMHAsa8cT2eLJ/2wzIUR50+iqw6P3EC92qXziAQzxGhyBiGQhMAewo6RQdx1jtuoEzeqUH+MDAwAiPHug2QPDAZgB3BFwN6JhAyyVC18GveuDNSmhKwP2AjjywkTyQ43zMhsa2g4I1sHOVviRDm4g8efv80LLiX+ACF/ic4WJAv8Ce8BKUiMfg8FonuAnB0MLWph1BM6v0a5bZeFkoc1qZ9+yHkRfYMf2YDd3lrsbJyqfL0YsViPXaOWDRA30XQxT3BLjORPpUQxMVmtVCD8cEJhcN7l0H15F4QFFS0kLPsPQBWIsgO8gZSYGz0i7JqZzCPEUvIi77WNOrwjOY301DCfIO0cK4w2WydEu5/FNAUym5S6Ke6O8pBedOqDTozXJNtfVO5pPCtvHaWnA2NdgT5XA7W1zVHqAInlqUTqVrrbAmMx2JCptrtdCtz1fawSLy7/IbB/QzsWeo1/iwqZrG3xlgPJqrby5VMtE3RJkXIKpKRgAAIABJREFUNMHSnctyiGSTEMUd6LQwzyXPZmMUBXHBzF0vpBDvTif01HPdxMvxaYGM8XzmGKw+nWx4LmlUf2F5g5P01Z7jlJkrQ7/QS5VQXB8d0CwEeeBkZjyZT8PaJlRNnyeLn21/6zuwCpJTQ11mQ0gZiSdGgVMr0MhmeMlwItm3nsItjaZY666qk7g31d8trRih0VFZjkr8NpgklVyZ5C7KdSdvIzGeu67ixVJ+OkrHGSN6J4ZyRCN6l8u3mxfJGtCBYm9I8pwJ9gxOTW5kJm2hGGG5ODKnlpOUB2ceUhrkK7o3yJRqH3VRSTc95ocoqmTFLA0wg+CqYyA7RBVthw7RC53hswjRkv2kzTqdjIZMkieQPG+KPWg6TFeZnjkBJTHFIYZs7/sFVt0KN6sF3i5W+KW/xdfXb/DLmy/wy5s3eLO6AgfG+vERP9xv8I8P3+PHu/f4dHePDx/u8PHuIx4e7jFsBoQh/lHgaIzV40UKWrLgQKaXI65c9kSJ+6Hy59Q31xKXiv5ozGGpi1qyRIUbt7CdwH+WB9FEmn+jNKJru5bIRnT9AAdEmUTLChh3zw3iHDeKDHAgHDt16Fx+aN3HTgsH538Nc+YY/vi//wvcAN/89ht8e4wh/VzNb60j94Vz4n70eD1Tuwv549D84wflXvQaQTuRV/P0qLi8vhxPqYczir3WLLVsbe+kncRkjiw260pqtS+3P8ocbJYzLbwabbRHbs2RY7nuj+ZEl96PorBwptno/PSic2KbZRQ0Vo+53HTKIsfnRA666RLMwBDAPYER4Nil09JAHDe5hxjSHb1IdEyCCkV5bmDQYwBoAHwHdB7kPMIwYIghfcBXK4QrAtGVOAQt4JZrOHoEsAEPLBKOQ0CIXvi1gKfPJr/hLPuX/Vyv2xo0tUuJgs9MfVONcpRm9Vq2gWYhJ6VNndtw3SIttfgijSPVTRRzUjjmqIejkTt0k/3MalPbjhH9XqLYcyhOR0xnLwaeoj+qz7mgk9R3MaBf4ALHQM18npAZTa87tnCPpPCedCkzpaO9y5RE+LYTW7NKMu23mj2H0WHfzwaFhjErTVEvWnZkN3qmQl+pXkpwUUgVr0omAIsOWCzAXSfP1d3bFGBuPYAQYjzIqEsiMC2Tlzj1FD2kRNHEPoAHj7AJwMbDDQE0MDof0Hkg+GhYT0K5CnsanlMMYJTOXMroUYhpQuC4G9WG7ARXu1+tIlBwZW4OOR7NStsIfwS0hlutRJyqrwhXPwOVfVBtrWwPKovaaZuCb2sxWiMl1xSWtVVn1c9FOhkQGqq7qQgeC65bUW1Co4wUIveYMUPVzxbPpLJdRcjViQVWRnIyHTPLeeGYoA2V77asBRNGI4V89YGnvIRp3iz5dDGpG2I6/ci1jj6GVSXkfggBGHw8XiItKJ3wHSdTiZTrEZ9bQ0TRlxOL7cKYO3o5vif73C5wTT9b71XNxjldJCdLpA+br1WHolWu1E4i69u5QzcfNL+BBl8LMwzugPR7Ix2HLcqPqt6dMsO+YMdq63vfwQMK47mh4aTC5aWsLk+1QqzaY3nKtqZu0XXtBstL6wzJZ8aUWY1jZjj4/Ex4FstGHSb1BldByeUyiMCuB2vQSt0wpNEvrAHdRRmOOzluR96zA6iK/EOQ9ynEZEmQpHBmDwrG5dVYgUn4mvIU5SslkygJT5TVspEFG0U09KxPxYTgyCplufEH5DBEmisLd4QBCA5hINmk5aKHOYuBPGh/xU2dHRw6YgSO53IGDesZEspGBpwABmIkJocQAoL3IOfkTE+de5D7lwgBDEYQGz9hgw6BCT07rLjDl4sbfHXzBr+4usGXy2u82Szxqzdv8YubG7y9vsbt1Q3WD2vcf/iEj+/v8I/vf8SPd+9w/+kBD/f3eLx/xGY9pB525MDsU4QoS0drMo/K5BDXB9nanmidCU3m0RzevIWE9SdWiNuVENwKGw9grEC2Ms+WuicVxzNhW94f5fp19VwNBYOMDUY8J70jkS14POSBaES/E5wZKBc1zwznqlfrPqbPzon7MXAHfPv/fQt8/QbfvP31cYb054aJz/ZVwLF4n7vdW9fvVN22mHG7oFqSqLNwnHhmoThR0sGQJYsdc3dKM+epmcd3wEiVVKyzBCfegp+NNlRD7QmvcqGNjNZUq3DCg4lFPioj6sTXXbkOVN2Yiqtpzat1qbwcnWQ2gcSDP8pzcUx1sQBGXI95Fa44Pu4Y5AnU6TKZwcTgngHivIQLshkhENzQoXtwcN6hf+hA/QBa3iPgEQNtEPgWobsBXd+iv73C4u0NFg8Mev8I7j/C//QJYRB5zwMbeAzwYGsE1u5RHcHUBjZqXItz1as5vdaNbLu2xJ3q91h1yWUCfWR/F5W4dkW7gEY/xpCqmSh/zie6s/BjoC6j1RYrR9q1Nm1t+u6aJzq3EluPItEUHKsqeM2y50tRk5waptolzy8G9AucAQ792s4tORvYJfSd2KvUqhgzFXbQg+o02yY23UXJDaEfWYacrNLmMQq55Hl4ID0O3pVfKcCN8lXbVwqumq1FLxVOqbR52x8Ocua5nqMJoO/lzHOX6aDpk6d62b5cI0dFsJN0nV1ssBioA9jHsEl49AhqQAdlhSUXorsUHqRsSFgou0dWFb8MBAaFkM+7TJ6nJmmhgCs1MWm8VrLnzh6tumWnwrWV32bZKTW1v64EuxRM9Xuq3u0FewiQ9Tdld3LPrKr8QRjFt6w9juvvwyp+Q7VyrHeSpn5orZQY5ce1L5xagmspgmslsmnHtv1Bc3jfUVMbV6RWhULNrFp4aJqJdzq4SRULnXllfic+D2C9yUoIMuW4LvJGNfgCJV8Bpr/P5hrMjL/R6rv6IAnxXO+7gnnJb7vYLcdwHpJCB+Y6erBFKJfb+jbrpC24lesdYhn23kLBY6rCis0TVZp6c1ANWq4aF2om3iDTxIPtcJQIWGW2nqdbC7faFiqTj+Y0k+fEstxRcAwqc+axxuCo5UGub8YC0UwkWt+c7ReR05jhUJqGQcibEl2HZECnLhrWk7LUZb4jZRJRNJSn/CTyVfRCp05CtMvxONxJXcih2yMuullMPGXMIGJQ3t8z0qgaWiSPc45yGZN5hnF3MPL8yaowivSo1wUMZ+ZaBhDkngHiXIzl34p7bG38xRRR03qCyPfqReQIzCRTROY9IYQkh2p3ZvQ1XSVTplvK9BWMnIZuYoB1blMjui2HJISoJzhpw1XX421/ha+vbvHl1TVuHhd4u7rGbb/AarHAsl/Auw2C93h8XOPjx0/48PETHu4fsF6vMTyuEfwQNzgwknwsO1RN91KmTQIHMgrxqpsMmDYda0RvpSvStwZXjVQ9Z3Hz8WHQnNDnZf0B2Yg+mOcOpQyqxnOtq4P0WaPOubT8HOEFTW9ngR8+4tsfPgL/8Qv84earS2j3C0zDtm9F5ZXaiC5X3lnAnPfzkozhVMxtTjmG55rGt6e0YiGzPzpprqSRDNGsYhvU69Bdc4KdS9moO9I4KO+LAtNShFCuL6JsFpOFMrls8HLIW/Siyd5l+dGgxrrH01nZiMFdlBs5wMiHLs6LG47OM45BiwDHAwIYgRhDT+BVh+56Bbd06FdLLFYdiDqETTwz3a+HuKT3UUfpZINoSPK7FZZUxuPcj3aJVtCu6pTkjl91kiYPkE0QFb010Uhmq4fJId9LLTtV38DeUMnIB+PynDCXP6DRrkizaXJtJ+S08ZxG63qu04wengGO0om8YjhWp3FqqPHZoje5GNAvcIHPEU6+KKYGs6oU1scay58EhPs140TKYifJKbKLdNvOvuJHVIhluYxSKFDqOqDrwOmsTJMmKcqAbLxpSP0k50apxzhDzjWP3o88iPF8iGeesxfPwkBJT4qiZM5lq7A61VU2L5sHk8A53SzX/s8UauVnvQir6X3Kb6Xw0DsAVIFfL/ymdm3vqm/U9opflAWiGLSjsra0qdiccghYA8ce5Whfn5nfjSlmeExKYGm0h4ZB+aPTc4QJGAagW8XQ61osE7BZt4vrNK9oUUiebXzMNzcM3ySK5ZwzCpln264enBRD3W0zCuR5YLyoI6IUbOH5oVYaUP5rwWjDxwzaOkTjPSOHc7/ABU4KM/k2VfxMjKtkjefp2qdvgVWGch003DpVnucsRnKNHkRyDrqmTV7uSa7VzaHlXMZJ5onv9JbFoF9Mlakd5lxw9T4vDOos8l7mUUnxCcT5UsXHolytLAjeUiYxQCYUfiHX+URXWJmWVR5WxWXki6z42e4j4ZQMdLTAsH6/u2+n5iRG3MAJoFPvc/HwiiRTZStrRNPU7wQnp4AwPAKC4L/oOqz6Ba7XS1x1PZauQ09dmsaiDjrADx6b9Qab9RrDZgO/HjAMWc4OIcToTxN8dDyit/Db1yAn6xh9SfCDXL+Uq7ED7DzjvJmGqm/omeFY8p5TCXk2OQinpdu/fsIf8RN+9Yf/AjPjhz//35GFf8bwmsfrGZdrL4yLXuCUILoAu24sN68ZOQyARjwpVCmwY6QaqBzj2bBGLbKZ6jV/CHHLntlDqV7sxEDQvYi69mYgcIhpvehC4UEI8GB458FLDzwOwHoArgZw34GXHei6R/f2CrzxCIOPqgD24I0DDboaj1GJyqB9go+sr/W4I/YhE4XK9JlYjJERvfVx1XksTZ/sYzyvPujCZC5wgeeBiwH9Ahd4DbDNCDcJUwaTOgmlVLXtU8WOaf0JFZemUe0p5Im9FDotSzFlAS09oka5laHZaEBzxD9VyLqogO17uK4H9w5evTBTXZTDSWnehKPBDZzO4YQKnj6I8tLH38MQzzq3Z557RmDxuymaUhmKVPAUiZaLXXpiMKrtmcnD2RSpSli27zklLzB4LiVcoRhGpvtsV3gVzFuv5ir8FRduj3+Txu5Yn1LKzqm7GTliD+DC0Cj/UJGgXBDW37rhJTlDjeRU7btwpx1JjmUyDb41mbRKQ41nU+W3ypp2aZ4FcbiXPE7HQuJP9dVGFSj4YNV/vSv7l3tguZA2y4aL9TqXVbRNzxUG4L3wSKRNQKntxSJZsW7x4gqITIvKugsj+i0Bnwh0T8L21cDl4oKdbX0Fw0ufb8mdqW3zr2HMAAvcm2A9za1nxRvp04+Cl2J10s0bgt8NAx8aOKc0Z1yh77XB5enQeLXQ/KbmEWqU81T0nVGOeklHg7AYuKkDqIubFV38DRfPL1cvagaBul5CsEdeRyKrsRrJTUh3Ek90TQMVd5RHktSveCX+ZeQ7rVfYG0sIzyJZapfKX5znAZWlAoMwgEJWynKSbUTzykje8YlXCJ7kAHY+RbRXmSZLnGKOTgZ6OWJDUnEymEudcmZmNqDbhgDgL9DTQlg4FzUVHVnLYamDx/wyNiX3T1Qis+BX1S9pCcgbI+4B9ISOHBauw1W/wFVY4tp1WLouenMx4EPAwAEDMTwHDJsNNpsBw2aDYdggDENU7PoADt5EZcr1qyI4y9qMnXNYhX9JmNZK7JRghbltZe9R73Py3N+J9fzTu/J5hyLywTYo5STg1U4aZ0N7l1z+wqGB+/diOP+fb/6AP//xT8+M0M8Azj1eTia3TBVU8m2u3x1af2M6PSj/i4J99XgN0H6wa9pm9h3zsdVnpHlhosxWFLpKf9icUyaWU7VcOO7siHtyNHciEyaZs1z/A4gRKsXvJh/9I6HgQQhOw7crEtGIzkD0IJddZkxA6AA8eOB+AF8NCFcbeOrgXQ8sCe52AV4vEdZL+GGNYQ10THDs4gE2cUdj9EQ3usIUlh5xw2M26HN5spA+I0vzQviq0lF+nfrF6DEM/dNq+mDx6inW4nOqbehInkJM3Avm0KCi13Nvzqz6f+pV4/WsMi7w84GLAf0CF3gFMEfNsTfUswWNy59VX7JiUHltVvKyYdRehigezZmY0hPJ4KgGcUdwXTSed30P33fwSelqFbAY04jrM3NiHkeE4EUQZgb8EI1R3iePGGyiQT2eNam4SRm2Va3OTbKlhPRMQg3ygsMqS2vhtLCm5/dKnVcJzyiEjo3eE5XPFM63BUCagUzutVSMKY/sSq9e8bUUaXPSCNQKecGnLm4SdYi14kA4OOusfjlVmgkoQtg1xhPln8n+qd8wUTIUFXgsXD7f1jHAPYAA6soxwOtNeS5fEP7QyeFrQTb2aBr1qFQjlKsmHevt2NzQtB0o0YCAXyIaOn6y70m8GUVvIC6caiyKOMg/YnBqqCaisWRi40tzo1DLmD53wc2Qs39jvaxNzA0+AVgjF6PNAF/gSvG5lRYXiNCato4qbMvcQIge3iBEOSx7nEfjeQ/0HYj6FCmDNcw6yZnlTr3KIfnVSI4kuyXjuH1O8XxLldk4mUntt9/gDiTGZs2PPDfnPZiRs7B6UScZUHgRBdEheiOGyTsOpXhHWjaZ89oZofeZbFR+LlpMYA3nGSIOyv+uI15B9jpFRa+ktUfai/Gf1x+A5ReG1dULCraZ2h1tm5T6r3yejl1PDZJ5IkQZ1i0I3PUgdnAbRt859J3Dsutw3S9wExZYuWhQJzBC8FjzgA08fAd4CvDDBn6zgR882Mez3NmHPJ8VGw9keNR6XdPNlWS/Y1pT+lTy+9EWlLrs1vUVws2XwJ0xoo8PMC2fT71/zVPJOXH/TOn25z/9CSDg93/4A7774x+fD6fPHc49Xp61fi5/TW3Mnw3nIh69zhliHyPdsWuJ2oBfrMuR5ap4mguSYGCWWyMHinoNzByX2JXMBxgdRsJDy41lMJlNpAy4QGAXzAbJaMBmZgQKcJ7hqAMPANYEPAJ4DMDDBnz/CE+ETecQnEN37TA8dhgeFvCPDuEOcB4xGqYU7yRMvKeQ9D3MADsGwSVSpYhCKpdoSPskOFWCViHCcFukIXMzsTw/rPeN3uW5DMG7PsRX8aE2kHyqtfw2EbcYIxUOjDLDFE1fBb0v8BRwMaBf4AKvBGbz6KmJaPL5jvuR+qcuzwgRWTu4vc65MLXzc+9ykNAStaVcKT3bmln1dHUbiST8p4uhQiV8u1vE8O3JwZQyjZKRp9YvVoQvjKHMYij3MYSyGs89J8/z7MVT06y6alVWeKe2yq5pTLHlMZIwXHug5yJekHShtFcCPDVqW8b/6Kw0yqNynBjt54ema0HlRTf+9lApAOh0eBFEMU3lsx35yfw6dPOArkXHQ6ExPo6h7758eQ4Ui2sUPK5YvNs+tWyCJBSypuvVgOKiJ9cwAG4JdGJcAUCO4znnADidSyt4LHqkRe+gXucOCN7wGidrYkP0ggTKkCw/oep9rDO1njDqf94w8D6/zySL5RbGdhj2aRfaI7zaoKfRmUrmz1XM8cxxDZVe8wVHwEcZ4bWypDV2KoVL81pmyFc9+1zvqc7zknj5BJ+a+pyeaH3+qsGO9zkeVZafjPjzhJw4G9p5kvGcXL6KET3KXB3gFkDXg1wHJgnZruAcmBzScT3OJYM566ZIldHUkC5yXlJ6p99k7dWZfGkCUbmOzJxiZUwybIWlfWw0eFkQI0dwzMJbApjjJsmgZQpeamTWs9udbA5gF8AS0d45xOPga7wDSyARmetCyHgQACZzLLvgqZ7XNp32VYtVhC8A/mCeNXh585l9wmVq0jPRSaZpRmBGF4AODqtuic4tsBwC3nZLvF1d4YvVFd6srnHLV1gAcJ3D47DB+uEOwT/gw8M9fnj8iPebB2w2A8LGI/gYlhTWeJ68zzOPT+YFwYWSTFw1S+m4C2olfFHIdlqVn+FIokcSAPKuiKrcY3h8xRf2gj3mzN9+mdMmD/TGPNAqzmHsoX6MXPcS4Jyov2KyzcH9uz/9Efjtl/j99S/w3cUj/TTwisfr4ZvUVc46ovJ9Nt626j6mcm6w1FZxW6eSLfz9YN3exDogPhzXOfLapf3L2AajzdJUPq/XmPJXbuK3epAaJ/XU5rg5lLJMyTqvW8cXI59a3SO5eJ56YAbrCT6q72ORM0MXnXI2AB4Z7tMAWq7BfYdoH2f0/RLBLRGWBL7twQ8L4GaJENagwed2kgN5ILnXCB04EJhCHjfFhlaU4ymToOwWuy4pPPMN3UdC+7hIbfusz+QU4tI+YGXCekgWht8jETpKZ88z5CpNY+XQJ4ARvciM8QotjmuK2inC8vqk32mR9zXLQBc4GC4G9Atc4HOArQz81Ny9VlRkhWO7vjPOLupVlATkeEnyF8dzzwtjzCi/+Z3KIOO91AGLDtzHc8/RGXcfxyVdkkDRouH4cVZCclTgDYOEbPegwCAN08S2jlh+tn3TWKgax4zKsiPpzbbFzsSDkYf6S4aJhdG5cT/wc2FVph9YLefdHmPleKtf60XnlGfPXJhauzZfVuO3NZ73rTwNBy4e78wDHL9oORgavGSUhMbpUv/qGcBiMGcHUBAlcw8sXaQtdwBxFa5dzMbKTLs+pvE+8qu+l809AWZbefo3rmnqBVdeWCdFwDb9BRvDiiySwlthfO/lhUROYI4GM+eceMprlfEH2wgLZhzU8TyaaGhaG7VjH9h2zjhHaimepIaPXQvPWcbzGo80aeTKL3CB0VBr8Uhqvx9rVPaunHMc8iRbkXibw/UxTHvXA91C0rpcreRlAOw0H+IzAvLRJflPP/84p9ZaOhuW1byz3yPlMgqlt/C30uNFv+eKb5CDcz0ceQQmhEBwXZDzLcVb3anx3MHpn4vGZd8L27biqMuybwiIRnWfeReroikxVMi8bvBKP7OsaYGbESzSRFndt8CWKZxV5HPls84Ruk5C7DMjbBguMDpiLOFw0y9x1V9h5Rlf9Et8tbrFL65u8eXNLd6Ea4ADNmHAx809Pq097hHw/vEeP378iO/vP2DjB3AIgOeit1MTGhFzdJMBqSCtc5OSg3M7mhF3nhOKjWm1NvpMsE/1Ss8abTWOW9A09p2eg243rp0TzrhEftXK3+fC/R/v8N3tO/zq9/+JK+rxlz9990wVv1D42Y7XIyufsVx7MphrGHz1sEVXsG0N9FSGvMJwLj/ss/RX6TBq/Yp1VKnWfyRtTLJFMqLn+ySXpGyCg5O0oZbxCMx9MnrTGugeA/BpA3SEAEZADOmOFUAdo1t28Dcr4K1HGAB+vEc6TjIAFP3QBa2oG2AwfEC5vpVjj1L7rRHcrOkx0h+kf1A4RxVytdD6GHlna/Yzf2R0TNtOoEcr1oaNwooxSNhbV3IstMiTlpYyZtQuIKD36diEi1rkArgY0C9wgc8HtnpiqZJu9MKk3TVzGuk/GWD0apSb48rPB7qbERihlM6VjDc5TZogRUATZatV3sYdkuLS07tkOGcXjTSBjFdTwkXqVSNnTfPqPmY3u+ACotLHR68hEu+hJOwWDZgkSNmeGmq9nhXCq5BUiUx2EUCZli/K8xxAbi+Nn9WuU5P634k2jby1d7RdhTGUQtus73DHQu8oqlvPPaLiUxgJvgaXtCbZBXPHRF1PwXcm7g9seIG70n/k+VVnqnntPH7XOqf+qO9kRKf6N8b9ZngiEYGWvRz9EA0uGLqY3slOdwJos07ZC+MRA+gX8o7jBh/1aA+MuLun5DVlc82CrdgZTKUiYAYwM/ArAD8YJK2RQC4hhBjmGAQiNmtzMkb0sXZ+YotVqicbRmqFSW7qXkAUvcEnputkirL8w+BTXJsFyLsbRMP5DQN3iXBVA14QL5/61ia/wao/Xoho8qzQ8rrZASWv4tKBIyVqZdxZ8s66G8igkL8ACY8uETSci6HcXfQ+ZzGgE2KaxIIolxHPJ7eMv/qtmyfJtppK9AsajWW9pBhlSWv1nmbu1CrYfNkOEOVmPJucKIbAjOw1JPyoE6/zzokXevxzTs6uVAO6OvAn8YZj5CKt3Cpsg+lsyxISX7R0anaYFCW0FiGCClpqunxfh2vXf6IXPJswpQQnuHGInufEhBV1uO2W+Lq/xZvVLZYEvOmX+PrmDd5c3+BqtYQbOmw849Mw4N+fPuCHh494t1nj/foe7x/u8e7jOwybjfE6B8h4nZfHfZh5guPZ8Nb7nEcErGAnW7UDacv96PuWf9g+mDMhVcrPwsg+Dw5lr3vNMH9/F73Qi/PPZZPZAjH6TBJcTelpsye3je0XuMAU3AHf38Xz0Vf//Wu8CQ4//N8/zozUBZ4btkuZu9b9WwrYBQU/2xciDz+F6FvMBi9Kpi6RoImpcZTIyJRlGY15e5+1euEVXBZTGDmZs4yYUDDykzPVpnDmkkcW9ySybX7MuQ6RS6IoylmnSBR9gALgO9FXamQdObaSGYAnIISIUTcAPYlwGsA8iIjUY8E9Fqslll84eLfE2jusNzFKZtyMGOJVhFHyAQwX5aWQCWT30I9oWejIbL/YtOYZyRrA5m2JNLVY1Xy57Z7H/f0c0NI7mvFzsnLnQitCRv0hFnTaT8ezG7bIqqM+rp7Leop1rSaJVQR+aftNL3B+uBjQL3CBnwMcpOisE1J1axSN+xX4fKCeSgJjY5UxeLQUoCKYJjceDUnsKHptOjWexz920Yjuc+kTeEm5cCLvxArZCBcEgFjCNLHLG085PneBkjzN0KiEU31AeeKvFaCKqBUwGIcJNUm4eIHSxRyh51DPoJbgeMr0zwZ5bFC66on2dpDktPls10y4+UbhbQuVEp/2c3t/DD2rFe42of7k/XZseeM+mVwkUg5dThpuncXgPWwAWhqpUJjNet3Q3UjBajzXEO1dB4BBHnnFQUWOTNdCuX8C+CUM3zL91zCisz2XHZzHa3pU4tT2qiwSNNo1E7Z4wRFNHE2wbZf5NuN5XZcaz8FyBcbanqJwRWDi/TPDi+ShPwPYi+wn0jaQ/eHAIARClI/QZUWoeKbHWscK0iB8kJuFx3mEkrUZKI3GDZyqjQbpmgQzSp9rfc3l2K9c59XIf3MIewDkFMMkepOLHujkEA3oonSFGs+d5XXSHsPP7FxtRXuGy0aB1CzDR13m7cU+USK8v/srylMKHSCuAAAgAElEQVRT7Xxaa7KsbFqCsnMGR+Wv/scMLADyARQYjgk9HG66Jd4uVviPqzf45fVbLJYdbhYLvL25wZvlCv2mR+gJ98Hj3fCAv338EX999298/+kj3q/v8Wmzxub+AbzZROM5ixe6GNBVt8wFv4/I67McXcDSrTH+J+eUCX5flNGa3HeVZejOSl37nDCKbZ4G6hZ5aAvaTwp/fwd8ae7N3k/0iGFnLaSzZyfynHsqOZRFHov3sWu1c8/BZ6Db41//hcfffYWr3/8GD3efgH9/PLyw1wjHDJlTDJdX+K0cLQWdSIz6uUGcOqns+6b+pXVvCH6Q8Vxkt3q+TWtULRttGYgARw5MHCMGwZYDI2totUauZQDQ88ZFjjTe64QoLwZH6ORs8nyUD9I1yzXR+B1FYwaxHCMZAKIey2WPm+UKfX+D7hp4PxB+Wq8R1h5+M0SZaoiNJER51XmWY4OolKksjFRERoi2dG3oOnSzwaQRvc63N1DG6UXoPKm4vHjQMXlSI/qcejHq9ySNW30Vw+5TGV9t5gv87OBiQL/ABV4rzFm4Fhq7A8uxs4oKC+lqlHsw6SZunwWsEdqV55oAlTGkZQ9oehUZ5axzEvI4e56ji+efo3OFTFwXobRiS7/k6VsaS4gYHdTLirJxnAGyu0/rRmy1g9g+k2v6s0TC+N4KD0U9XKZP9b4UqYKMsG2fNQTvY+AURvHJcdhKW/eZMQQeVb+MUaji33z7jfHEioo5Yyh5xQpe8+qeam/re4SUT/KURkP42YCaJs5JaPfRMcibtlumM+JtJBt/OlBPiGeax2e8CUC/ygplAvhxPV6h60Kxk9jA4HjWeSc0CCHZV2x/cs0PCh7SUlJwdb+t+QR8Lb//XZdTECCXzdTsB+XEnHbv2zxVGcVt/X4m3Ah+I8XJeDzUYcUovyjxsOjdIu7u/2QypWf6vMG89VsvysvKl7OBKkaKZxP4jL6JlzIfvSBICinziMb3TOJ5W2asbtlmyr+3uwBVt1Y2KVPFUsz4RA7rXYonOvfIGefU5fJqUaeWzVS5J4wwDXuq2tCUESveJYZ3BwCc51Jrkyy+4dG4tkodCUFPDNYgmHoGeicoOHmvR4NL3My6DSyGYPbimSQ61iTnZ3f9KF0yAxyQ+7iN56jH0saDbbSqwMxZ6pTVcq6mwMl43gHo0WPV93i7uMJXy1v8ZnmLr6/eYOE7LBYLrBZLuL7DGgFD8Hg/POCH9R3+ef8e//jwI3748A53m0esOQDrAcv1GmHw4CGAgweHEDddQbyptM/Eeyx6pQsR2dLTzAu72I/tgxG5Whq7bfc1UJXOXOtimuXKWLMKaFt64VG3BY1TwztEI7prvFsAWFfPLIvSH7eIkV520vAJ4WxT0ykqPiPdzgl/+xEPvwB+9fa/4L74Bf75p7+cG6MLnBF2fQFllLMDILHqQwo4njePnIBh2jRaaz4TNGT/5nIgTXk0TkSN+RYwc6FO6LMQGv3KWes5GOV0nO7zu0Jyoqr7pGAW2YDqxCp7cEhFs0PUHVKW8x0BwTm4AATPSc5JG84CgBDAnoGB4pzqEDfND0M0stMCuF2h64HVYoHV1RLDVxts2GN9/4j1wyP8pweEh0eABjB89GwHZANsSGtyZvX6VdnRrm+NXMmtyRzjsViEa9f+r+asqbK2wWjsU3l/LOyzYbFu3qFV2rIOgb3sDGzG+wlkCKp+1B7vIw94HrW1bvokKVp876Je+NnBxYB+gQt8jmAVzdu81fYqs1JuvkTP8wq3SIa2sWREkhHN5KrP1RNdDee9NZ7Lb1HaRo8Zk1/Lr69kHlivJxAcMRwHOCLxbI9eV6AYbsmlXXu14KYCZtW41D7jTa9tago3SaNX0kxl2K30fMnShO2Al4bnC/iWDHlKfWqlJK3SZTm4XtxU93shMQ+O7cWXNgr2gqlFS70mIQALF1fRcv4tBo+AFdApLyDQZh0NAsqb7KqqE2sNcVxAe2TvRh9kimh5TathYYtBYcp4PtU5RKBffxGT/OtDbuMUTWpPURNdvpzKoodjZqcW5x2Gn32h9jy3BvIJI7qiOaqyxs2yb/U8J4jxvBW7tub3rfsXDi+Afb5maBnP4486ZUPh1PTEBkbnFI4y7nrMogQUWQWM5CITAoJ4ClMQ4zEjG1+hHtnZwpYcU2oRSY3GsmGRRI7zdXSKKstor4Dhl46iOb71Laci9R8qq2A0vsAkW0piJw1x+pvh5VEAIzBHD2rSjZbKhyNJoxGdInlDzbdFHh0x7LotYaSLiujVXKqldUI7DUE2CygqQkdNERjwHj0Tluhw7Ra4Wazw1dUtfnX1Br+5eoOv8QbddQ9adPA9MBDjcXjEPQb8uL7DPx4+4B+f3uOHu3d4d/ce680G7AhuzdisN+CNh/cDgleFsniic6zbzgms7QiqtK7azhr6Xd/bdyjnmOeEnbKaCvvyvGFEp2LyPLwRB7PudwC+msi9QOmJXg85bcMtwBPHpTw58JHVCr87Bo7JPtrb8YzQXIfOhRPQDT8B3//0V+BrYPHfX6OnBe7//PcjC33hcOR4PXa8nLPPj2n3S9Q2zAUCMq/EC2nH3I28IipxIfg1FqF1cQc0dEJEBI/eNgrWD0MN13aOlUZwqZAxxcQogWN5VmQSkdECxbUtQWRC5+KRkmmDZIBPgqjIJHqMJQPsA7DmmH4g4AEIG8APHQIvEfpr0GKFxVWP21/9Anhzg08fP6L7eIeHH99j/U5koMHHk4kYcI4AdHJcjgOzR6G8sP0VOxJNA3hBXnOzj/ppZ5/XCpW5+Z4Rzr0Gnsvfi3Q6wJ4KqRlwbrpd4NXBxYB+gQt8ltCQBg+dIKyCpDAwjywPY5jSuT0FGNxUAWor1t2NOyfqZCxXJaA8Uw/zZDzvjAd6aZTWM4bY8bhsW4eUzw16Rrk1Kw3FzyWhHiBHZLaakx5YIY+KP7L32EKSugnmylpuIaEeKwWdcLA0vLoANOhTLaT2WeTvNNZpFTx6rspH2tUHzwblN9N+j7yAqdZyeU+HoWu6t0SVlnI1Pm09k2i0XxzlfN9c+e43DptnURvYHh3gRGO+Xsjp5phFL50jFiZHAHfgvgf8Buj7uIBde+kSsyDVTu37bBwahlgZ6QJdzwB3xuhG2nCYFOkZgPGAn/RAb9DuV29AIPD3H0x21ZBx4uElx0opYeeBOERPoEFpwR58pGk0NzgQSJSAYrKpx9St9JvaC/WMY032EVtojpzWKGZeLIx4e4OXXyDCDF6WP9vxHDVJ0danVVdVGxOnyph4ThCFHRxYtYuqfROZLoQAUACFAMBHZSIBVttesoL2nF1EAFL2YIdVes0iOpXnerP5T7/TuPHRtqdqtylT5SmlWBFQm+I7hnz/wt/YCZtPRUUFKXMwNl621UR9akAMbeoRzzxnB91RxCAULnO11aFmpbESMLNs7CzTjOfGUo6oP93YRpV4U9Pl+CKI17nD0nW4dUvcdit8sbzGl4trfLFY4YoWWDoH6jqE3mHjAu7DBvcbjw/hET893OGHxzt82NzjYfOIYb0Bb4a4eWITwJsA9j56XXHI558z0rirjbDZOJ4fpvQmXW7VBBwy7ezL+4zMTmaeLsvS/iKMjejTovXhcHgJ/COAr/QG+TtOZ53rl2HaGGA+bS6+42cFJe+Z4Oh+OxfdcIoxdyL4ARjwPYbffomb//k17v/8z3Nj9HTw2sfrUwJNRyMbeWvvC5av7Q1PIxunIH6z0RoJh+bVRCE7F/YzKk8yleH/xTpnW9E0Gu87ZvBxuSOhr5GwDjMPbbqNLMiNNPIsmI2VtmK7Dg8hGtEpOoA7zjJs3GMaw8Wzj846JGWwIRcFgAfByQGMAZ4esF4+4NPyE9B34FUHXi3RXb/BckEISxc3dCLAA9EQv/FA8HGKViM9QVzip2hk73lMjyR3ctkHs2UqS7+pDA3B55Sf1c4xaeqf2ty7p+6qKO8YBmvl/m3lRIVLrhPI3+RzQmPssMVplL7G2eS9wM8OLgb0C1zgc4BCgTkWxI4H46W8y2h+DmgYz1Xxm8ICNfOZH7WB2RYt52rG8MddNKJ3Hbh3gOtEielS/Q4OQTyC8uza0qBqaHYqX6GWFbl4wACC9dDhHXN4tQlClb9qxM95d0gCL6jL94a9hOgq4UyBdJvXqC2jNpy/DMjjMN8r1AOslU4NAGW28hvDeGGT3h1Bi6MEWD5u4dAKv7sX1HQ/ETgAvRw5oXU4Bq8D0K1AYQC6HnAdsJFYpzWPJyAeVrYQQ8IQjbLq0el91p4QEi1st092zaTXHef3W9u3QEG3rWHbt9A32TeyymA3TKQ7WL9VZrR4cMGdszFmNKMpPfUbs0dUHPN9vIbF4Utio68KdB6Su4kNXhPZxr+n0u60GGIHD2WksBnMosXziNE0PDgM8SiKoLwuRB7FAXb7zqzvmyHKSLnRTZeEpOQkWFGx0Tj5PpkAb8JL5yayabnKG1yxXwm1nipEjq4OIJ6Prs+50v3lNkvSzBKElAwhaXDR+5ylAibghiRCh3QemU60jJ05eUy9ffO7aBzmpi7Y5LMDYoYGStusRl+Onv09OVz3S7xZXOFtd423y2u8Xa3wxi2xJAmd7wi+c3jEgHe8xk/rB7wfPuGn+0/48eEOd+tHrIcBYQigTUAXGORZoqtI38v55wkKQ7kBoQczpalwlKCh80Uz7QQdWor5I/jz+GsoC8zRu8w4YC6Gw4uBXfg4lIp5O6TP5X2uqBxDzyPxPmfdx8KLw/3v7/DwG+Dmf36LW9fh+z/99QkqOT8cQ/dj7SRn7fOpaDqk/3B1XyZxmMnrm1W8AiG3WO+/EDA4WXmWZyJLyBv8cgQwMmXMqbySeewgtmu2ekkHSEj1nLX6EWUOjShXh3cgWzcDPiBKxF00WqOHI5KjLiN9Ojh4YpB36BDFNe+jZ3gApY1nMShUADAggPCw+IRh0WPTOzwuHVZfLrD44gpdByyXHYLoYR8HxrDxAD/G49+IEVTEdBQt+2pQT3onS5hamDXEsqlq0TKti+2NPqPDP8waTiIbvcQPaQbMbfs55MeddUYN0EHj4CXKwxd4crgY0C9wgc8VrFfC0QuHqQImntdhAZ8DKuO5zmlBzyxESxA190kjap7pekiETLguGszFeM7O5TCaaninaLRyxGLkpqrSBj1EXrIhmljCPkZPoWoXalILm1KJMtmbyjb1OkeiUdoYwaUxvr1IjMJ4PaxevtxA41X7lMDcWqCkLDMWW3sa2kcGC7skaxjeC9j1/qRQLTjso23VN3FrZEoLvUPRm1BszMuMbCjBGOd616nCTPrPOZf+0JaPSk4FOWDRIbkiE6LXOF0BWEfjSNeD14/y3uUFq2QgUPQ6B8AIcbHLDPQEDHJwLpffVVzrslG8y/PJ0OdTtNlBs/+I7mb8j3/Hsu25tFB3TMNvp/pwVCvnvTOtqBqpnCpjZsLxqiHTtQw9Z7W2G5k8cc6aHgkjGiY+bJ7fHfoR1Ey/dd+q/Jmh6Fd9RvkdkFE9lULkcwYr7kxt6poU/Xakm/nNzYNS9jEu1HIVL2EK8R2JhZg7eZ8VnqRzf2p7/U3H+YmBaJhm8y2YoUYg8ZzJA4+kjqAymhr7ixS5HdlAHe/TWdJ6dal3ssKQYP44X4Hsda+8PHneIh5LoVVBDeYANDg6E9QLnfVdISeZCV/rSVM5j6JqxuT6IB00PVZg2rIbYgaqVA5ATx0WrsP1Yok3q2u86a7wZnGFG7fAkjos+h6uXyAsevge+DR4vBse8P3DB/z48BHv7j/iw8cPuLv/BP+4htsMcOuAhWcgAIPIw2Savm0YE3SYSD9ou633+T5TXc3LRg9GCWYCSZeacVt50yTjQDIW1KhQHqIFlOn3hWPYBAHgdwB+YR7WxvKiskYZZ54vjqHbMbNxwQMPqfzMcC66TcI/gAf8DQ+//QL0uy+AT++Bn56iovPCOel+rrqz5qWxdp8QS+sSjms7HUm842qfmhOmZqPds5TFZyLVsfoNkjmtUYxGCoo3pn6zplBZb5SX84brfIhLmwJFK41IN3J2SgKayl+cN++ltJTvuc5rBJWkk3SyPhYhxLPIqB2oB5g6OHLZqaYjdLIRlYLg4CKdWERKPU7HcQcODuwBv/HgzRq8ecAwLLAeHrD0S5BjuGWP/vYK8AF43ADrDbwP4I1HkuWlZexUDo0UTW1u6uvyc0saTv80uqPVRSrrWlrmG5OwzNZ68JxTYs2DOMmfxyFxqGMPNxjsFI4mgb44qM5JGJVLRlCfqHcuDjV9XoAcdIHnh4sB/QIX+DlAaz6cy/OfZJX5NGCN5xEa2ri6Pcb4nY0Z+TWDooDpuujVJGHbWTzOa+M5OSdnCzFItDjbSW0FZvuUwT6GJw1elLGqpDNCgc1W7LCt5RTksO1EDiTGc9YGb/Xg/JxgW9to1hp18kzTgv7thbZ91jaYnUkY27fLdeDt64HdSmtXPzvrnbsy+pmAZQAMMXpLqHZCNMIMABYrgD2wWMZzz9aPDZJx5mddH/OHATQw2HVx9e8HjDJW/cfMaYxzvUBpLk5nwtdy/fgjIAYhhJDLZSCu+t2WcTlhzbBTBZuHcxZHdT2fIEZ0w1dvkGxI4+zbxz7XdGt+L4eO/5oeu6w9n/PccIGdcEj3H+t2BqOstN96Mp4HgHzc4Jje618QL2kCmGK0IDtdUK4j/k9QtWk68icZ0CMeBEqnJDhDD1XIxmDzATa6UKpDykm8Nt1Lfv22VaFZ7Fi0f0WAd5TGdDZox8YyUzKex+QOWf6Ih6hzcmkXOqhiMSkzrYbSNI1NnTaNbf6o/yfm7NhNJRi24xyhcw7LrsfVYonb/gq3iyvc9kusXI8FE7q+h1st4Jc9hiuPhzuP95t7fP/pPb6/e493d+/x+PEO/tMn0OMa3SZgsfZYrOMhAaG3cnVuwEFLJtkI+xpgzqetev/Z/fkcIJvP+CeURnQLofGMJp5fYDb8jCXv7fD3eLQQ/ecvcfN2hbvv/nZmhC5wPBxpmDpr7U8PVpR6UcsElaUaUBjRW1kLfVCWQetN4vOQkE2Waf02tQ5lo5PTQ9ElY3NJy7KBFFkgZQZ1BKIuTnHBiyFdj0NieGI4xwD36MjFk93I6b5LOBfg602gFM9Nd+TgKGo4vRi4wzBgPayxGe7xuF7C3Ttcux5Xix799QpLcsDDI/C4wXoYsHkUHYTnRGhHAAeKnveFnKn0kqs5qi3F0FTxGluOnbrABS5wgRPAxYB+AYFd0s7nMh3tasdcFcKWLDSnnmcGq9hKAuMEjk3PIiMRF1Iyymcjxdph6CZoKWmKHZZ6jX+sRhtMiKe14aHIb6ogIIYujiGOQx9Dt1Mfjeihc3GnpKOifjjIOURRM6O+SPHURgdCB8CcMckxrRONVNxw6sEhAH6DsIm7NXmzjh6k3uf2m4OJbDuTJ7pLDYy0cQQ4BxIBmK3HYwr9REY5bfs30111pWTf6RgxCtq9O3/Ku7NZTtWHdZI6lNVkMaOMyN640xBLHycqSttiFIvpxouh4zYylurefYHNv2kcjGhrnuUBUCeqUZoPuwzxU0ZR4nZd+9Jz340Ac7ysnwMcxXHbuawQJoo8o78CeA2gj5t/BvFAB+X2upB5WL8CUTxHF8MAcAA7AnEAcyjpXIwD5Q/RyFRGzEDZF4URTF5+AeADqn7knJ4AfM/44re/Bt4AH/7+L5PGGKYISERgB1AAMeXxnXibGpwAsNl4xVGpwuB09u1eCqEbk/YGxgAl+DV4VfYIrMa3Rgbhig5vkXmX6lgMuZqG+jTn1zjYOTX9U+GiuBWFHQZTdKzn5maCKdlkDkqWcdl2WXqb66GMdAomN/5M35YvTsBfaPw7lZq8mLlIyphJ2vTbyhT2JWFEb8rySXEdYWCfkPkmovoOQeZSD0SjupfNjg7gGDVIvXGIKR23o7hmGpj71njUFzo9sugkxWidg3KUR/M0Csl0Gh+wmftC/02kk40CqVfs96yCq/72Bd0UI5innK5CP5UdKSpYy96vZK7itxzEntr1RpSwH4vEWYmtNdseNfILc9aPMqN3DgvqsewdVtTjuutxu1zg7eoab5ZXuF1e4apfYdHHyCsfVh53Nw8YeoePfo1/P7zDj+9+wrsf/o2PH9/j8f4TNvcPwP0a7tGDh4AQGJ7FgB5Q8n/tBhay6hyS2DKnA+vj3obMr5k5ev9LP6mnuno87z4b17wgjPnINj7Fox+ojfl5uqFx2bnSvOmT63xa8JH86Sh+KxL5TfzNxihup4hk+Jdw7mXUhPMESa6kpAPhcMz3ObimnX/WDDEBUzzy6eHYWue2mP/vHe7+8ytc/c/vwEx4/Ms/jqx5n9qfCs67JWiq7qcfSWTEAjuvVfd1enl43FaqWi6aDyfrq2ojpCydyiTCU22dDmIYtTjV8qcpqFg7Vjx6TPeqXE2X1jsk67+az6mZVXqlEULALvHZcOokSSUjeks+L+dcqrtP5K1igkpymH1nn9WyWKNn7VpOjpORGVz6T7y7PcAUEEAg9ggd4Fw0ijvqwV1ACANAIQV2SvKNRnQSeRee45nmjxvg7gHsCB49Ajls+gW6xRLUEfqbJRZfXIM3A/zmMcpgDGBgOHRwiDEYA0W5nkdtsms1S1+NPMppaV+uV0dEmnqR6btDHisl2DKreuw3EWiVe+AHOsp2omXiSfhFvbYava9eqv68cLgwJcxBqvlZjCoq7yf1zjPrbNaxBaZE7EPzvgQ4Fq/ziIDzYEvXXgzoP0t4yaP1pcNM2m3Rmx0Ke/Hy0YOs7NlaUKEYMzeuoURLC+cti+ADQ8EU0JQS5Eok55Pn5+VynsssIIxCyqiAquk0JLtzwPIaWCwRiICOoh2813RaN0XloQPYGF8DMzh4ed/BUQfnFmDuwOwQAgOeo0dNF4VYhwA/ePiwAR7v4dcPCN7HUEfDkEMnh2kBjwkRryANci7hyU4M/6qoVq+k5EE0XopUK8D0rrSvU06iC4qjFGpzB6ncF8OSkXbtTgqx1SqwXhXOGLenkGXGZRxXqtudZBqYk/EkP6sTUXEpE51PGZa+2wTK73iapFT/OAD3U/A3AIf2O+m/nWzMYY58ab0BFlcxjPvwGL3PCcD6seLxkl53rS+WMSxx8DHcmigWKHhRG0hoW/3kRCvCzJY1REN7jWcdXkz5zhvhPe9rUpSc/O1//Aog4P3fjALSKhVU0E1jOJTKc+F32as0hnkmF3fe63YiDcHMevatnTcL3tBSXpg/PY4ZAN1lUxEobq0a8UeeqVwz7M3WR0A0nL+pE+ffLPWMymsuMuWlq7+PBu5zYYpFmPl7jMP2R4chYBGhmkz5OqrvCP68Y+FM1Yu66v+fvTfvb1zH1QYfULJTqaqzdvfp7c595/t/q5npe2732WvJZovE/AGCBClKXuTEScWoX8pauIsEHwIEGOp56hBqNS2V9zVmKnOayHef78EA4sbBIuM0lvS+KpCJbluD4lgFxZEaBsGn3kMU5x3IdaIkD514zuj6KGDrQB0B6EGdE2uaqPzN54vHjZjkAGKZVri0aNHur8pzOe+cS16kDKCQMNedatyu9jPLfBw1fSS/RB6yUyAG5Dj5BQewk7ZmB2AAI8R9AlTsEVVBvvxZPI1Y78gPdMNOa4q0G1gBgLpUf8GYkXe6zzEjguy/4rrrjXp7F+duVUZfuw5vaYV36yu8Xa3xxvW4ftPj66trfHX1Bu/evMXb1VoweE/4ZbXB/dUWQwi4u7/DLx9/x6+//oIP//4Vtx8/YdhsgcGDPIO2ATwEDGD4DuDACF69msjHVqV3+kseUe38IBfkORps6SmrcuoohTinxPlH4Un54cu0muNudsyZl/rtNB2boZnvRr2xhv3pbof74aW8eQaq7UMOLJ5fCMJuYLpuYworzkR/T8DnReh5ES1TRy7F3UvilhjtuLzPVfaldEC9f/yIewD4x7fAP74Dfvy4K8YeeZ9iBfpSaQeYmo15fLs1rZhpPH81AyHPu0fmbv4/Nv7SsTouwFR5rCihI4bdkqcyNnsCmF0XUoBZp9mcMojJMqfofUTTKKoocZjdRO1Jk5gkZjWDsZOHSYlGF1W4kN+Tyc/ZVGLpWpNVxKFF9k08X9WQAQSWze8QPMsRN6dwA4O9x+Cjw7negXqHjjoEFzCsNmAOcJ5AnuR88iDphoCIbGLeD4NU0bNsSmQHuA7DeoWHqy26q2vQmxXW376N+/jvsLm5RfAMbAGHHh07+MBwJOetM4aMsajuf/YbOOkPCmAUi9dtpc/sZ8lgu9Gollrr5kaPspC/fq3lGbHvqQhH0NJh/pTUanL7HWoji100+oaNjA5sn3Kt0ubB0p2qsdcs354ZXeh50cS3uSjQXy0tHa3nGO0nWKE/Vt6P3Rx7zAvT4Xi/CagQhtkJR4HrRCGaQqBTN0gFMKzVdxEs3k9ZUlBWoLN5bC3Ik1W5WjDpOeeqEKHqmiACXE3Xgja1eorAOGM3MumoU9B8ohL5APYB8B48RNdL1hqyaJOKEogcu5iXJpDrtCPXgjq9r79pvX6oXjfvj1UuNhdo+6fF5QdoJ7qzDOdCM5T77r5lKHbi7rOYn856cZhH54NTGTQWN3uWpbYeODzvXdEeoVGU71z3wMZoah2ALYvyfNiIO/fVFeC35fgelYmAfgWwOeuckM4WT6IPZtR7LMa0z0KHgbcsBor7yK2/AT7e/Syu6NNxuoYX1jwq8ao6gC2fPMvrca2l8tkFeOFWyklEI2twtXTnfebkd6aozlwDRrkfBQe38flnzUd+7Y7u6bWjYe6tObyeV4/t0pPseN8E6YCgpxp3JxJu1I1fFU+8M+aHlpcnsevRdZr4bq3kRs924cY9J46kLG9O8I373OdKbzmI06SO0RAPZqToyl3YmI5hGeFe8JBjAJ0oof1EfqTIiJvFS6wQ+f3JthIAACAASURBVLukjWc1D2o2HeduXMw9LWkbF3GK5tOxb4NWLK7EApop7yEsnCBrNU+QTaWaZvJ4JPSXt98C9C1+/vwHwMqUqnJPlcLJVxO/TQ5vXId33QpfdWu869ZYv+lw5RzedCtc9SusVh2w7hDI42Hw+OP2Dp82AwY/4P7DAz58/ICbjx+xubmFv3+IG1K96MIHBrwouJ3y0kJp3m7bguw8YwX/Rikwnk7MgzkrmOnmapTDxqEy07qb6adUHjMqoPnW8ZtZ6GDnzSLrJWz3SBZb9HOGOGnocnrNvTlmrJ7TeZDQudYbwEFgeYoWTkvHE0/LzB+bjin7j3IYuvvn9wghAP+75HD0A7DQSemMg+UETGape+d9jm+by30xHYMBR96Ajs36RPjTyKPkLRfzFTvKm9TUpF2Vz42km0e+1I+O+ehpiVlNnnObqOfKMeVB74Dy2GGfN30qlaAzoeYo9+ToESetcVMcRIwim/yYBM9R32evcyTpYDB1STtJIc830WrcA3izQVjfga88gg/w7OCdAziAnEO3XqG/vsKwZYSHAGbA+4iNqQN1AeTlMKRRmykQYVvLXPfRV6nn/OZwsA8tnpgfO7OzJzUC1snxVIRjqAZnT0z79O1JPULFIwpef8jg3VWGiTE4wSDsOrx4WMU9tJQnp7NhsBdOC8bKRYF+oQu9VDpSBrYzweYEd84FviXKQI4qoHMEsaZVpBsVz1GZTkZ5zlaJoX9Gf8Ww7ovF4km3m4o8jvPOWs0vWYQjCe/AHN24B7Fa8Wk1IdmbSa+c/7KwK7l1drGAZIGmdS1mwbQRGB7WkodGuNAj0JKv8GV+wbPD2tOTKiq6DtiYBdN2APo1sGJg+wD0V0DfybUKK1pnqPUreRYG4TdwoCg01+Vo4lmceQ8DWcGgNLIAaHBoPQv8FuKK/MOO+n6DvGi/aSU4RbsFw1YgNGkbUnehOSHIW3O9V1kP7J8peMWnD2qXBUTpvwX0hY3HY2gCu021zNmUBM+IdNip8I8TbomDIrAcRREIcNEeIADp/EZiiFSQAO/AXRCLGicCQnLZQkddimeRLWfdM4yycVIYF18Uw9swz1H4UW13tMaIKeX7GUkxKzYsNa3mb0eWNnjrHYCb7a0oz63QnADgHcCtsyWm8yMirAh443q871f4ql/hXbfGygEr1+FN12HVd+jWHfCmw3DvcY8Bf3z8iN/9DYZhwMOnDT5//oybj5+wubtHeNgKnh6COCGJnqCktF36zrYd9xSXxzBx1lRLc/00nJ+9ZB64e1Y9no5V0KRYjLR5bXS2eT1W60+QNuY9PS1HqUu/yrG5L+3HL3ccLKHwP7+i++f3oH9+h2Fg4D+/n7tIr4LOti/+QnnWozzq82yoeMkoQbOAKs4LbZCcjkaZy5v56LnlVDRfhkbpCw8yOIDFm9mEyjlVleghrenzc1vOoL7Z+x4EBrvsYYkAUZCHgOKsFA9gKx+XPcA3D0DfIQwBwTM8CNvOofMMOMCtVli9vQLfe4R+gN8GODAcOZG7gkDi1jNvli2wbZRpEhVG9WPPBaZZQLP4+ELPjJInrPMWox56zSXfhV4dXRToF7oQgL1Z4S6ldTOZWlh1AprK92irX6NA3jfTJ53U4hRmleepzCbUTnCk51TWaSG7OleXxq5LrpZAADrRR4uHTI3DGaRaQSlUBy+uSwMoLxQU39q0EU/NDD5bnXsvu0F9BBDJbaTkkoR6dZVtXzDKc/tXWLYlYKpAJQp6D/y+ZdvvcPf4mFR8i52BkRduJv45aUn+j1r2XbxhSd4nKHchINXF9nRHOPeC+mi67rPiHJB6bwPwdg263cizfi3jcbMx46Hil0TAqgfA8axzpAWLjuWCP0SlQjGb6VloE0WtW5iZRUitEXYpzwH8+d3fAAC//Pi/VWIm52TNQMV7LS0RgG+jOuyPsTpkct5Qq4i6Im9j+LvqxS120qSlXzOwea1u20fKcy7kAsnDihEk7J4XD6Njx057k0Irrb2A1cujQ6v1eJqq3WHSp4phd7uemMirTu9wUm4Ey29KzaQowpmS1wxEKxr4AeAO7CoBHHeAY3E1SZIedQCCA7mQlOeFO8a0e4jzT1E/01aR79JIaW4Fl+2aAkaAPBL8WWGyFICZJELawBTxl82AbTS1RqrzP5K69/i0vY0ly3n+fGMZPOWfvfJlOCJ0jrB2Dleuw7Xr8bbr4EhU3R0Ek/se8C7g3gXcbB/wx81H/HbzAcMwYPtpg/u7ezzc3CPcb8TDyhA9OpmzPbN83sx3gJn3LE4u58SyX8FslM28l23l2VzP0R445jCikfFcwZObsucdA/hEOGoxHrNjsbVUZU54pcVXGVikRF9UeloY/2zz496DeTr6S6WFZfc//gYA6P75HfzfABx8NPpSnvACG38XFIlz5VTN1GL32Joru7f5ZVlKuzzF+8Xj/Dg691pX664GK/odmNSNO2f8okozPTQ9rkvzLDSuy7jtG2HOpTid8CjYLI2dw+zDWq5RJ1KsfTWRKZyZrdJtm3A02kmHAxEhMMnRUQTBxkleFsvkETeqMRAYNHg4Blwg+NsH+aTbAWEYMICxBYC+R+86rK6vQF+/B7ZA2Hrw7Qbh3oM5QCWUzonjf2aAQxCjIi2zSyp2rUDZprbOrSW3NhGVbVWCemQZQE2j73SChc6F2mT791OO4x2fdNTfivHYCDzXJ/ctz6V7PRu6KNAvdKFj6Rhh6CmY31S+j6Y8n0v3CYG5lnFCeb4vZXEW5b+oMBfJHIlUruuAzligpz8RQrF1467lM5bcBAfnOlkTsAJ/uwKsVoPqpj0EwA+iOPccn3ES9BEb1+sx1YwpcmGIHIgEXiZLezLm8nWrxPSOUZ4/a9o5LnYhn5dDjyuE24cPHFuCE7X7lwowHWTskgMeIPV0kHPH3l6Lu/bbB8BFSOcHGfvF3BB5piNwH8NFXiNhkHRUSeQzpyiAVQoAhdIBY/bMxdV+PObP/1Dl+b93B54h/jaW9I9xP2tZBugzTmavsbBvkfvYHZ6OXVhljirTbqv3E2U5vfJ8QVxQpURvJXYMDrnQ4VSP0Llv8UyYaqF7VKwS+Ykqzh2iNXoHBJ/HKwfAdVCLJXQMcCfx1bU7BP9RAMhNuQeuhW1KVjpO5qfVdmzGUYUD9akKnEuAibJQKmQ2wuZ6fFn5K4zCtKksPZBM/I4cVq6Ds2dyUCwbvS/lujvnaSmcI8AxYUUOb9wKb6jDNeSsdZIjNoGeERxjcAF35PGZN/jw+QN+/+03DNsBw82A4WED/zCAH8Srk57jKcdgmHWAldGxfj6jPLdtxkVRy5KnqZLtksA2SuP6BPSo+IfM/5jIaEkBzDENRxAXnrRQsi7th2V2qahpj+HxRT8jnXteXPbNXzv5//kdeA85H52x0K37K6FJiLijPxm34cdTaw2Uy1QnPxLNnIlOoUQ/di2h+/vS/Bqv0/OkmCWMMFX6qcrP9qdWeuIR58GFxHIk0eSaTRW49fyl1y2c2SRqtoEMgTiXU16PMYAQAhyAgRkgh8EIOclFz0wk2Fg9q6uckpjhfIALDr0PohAfBvB2izBs4RnYAOjeXYPWPVbXa6ycWKgPmwHDNiBsBjm6koHOEVzEBOJ23iFEF/MACTaEHrbU2Jq9rziLY6PUKRTdsO6X46CXmewx6TkPaCVC6Z5x/Hok+njuVbrQLF0U6Be60D5Uz45T+qJ6a2wtfzx2lp2K31oQjKwWVEpQh2sdPquA1YLRNnAdC2BbmZyIKgvqLKObya82tbBKayswS8pzJy6PoyU6dQ7kqDz/PP1GxbpxJU8RiLExHaIYQT6TE8t1LUNQRVLcYTkMCMMW2A7gQa3QVdgnYJi4mqC5Ps8rfz9RoNO47SwZBRkhTLhKMs04gzGfFVX1LK0yzXteOjBPTK1F7gGL1uVAft9Vx9S7M7VjsUPdjJHGwvuZfOn9SAvb9fnBGpDKecBfATd38mq1iopzHeuxHb6ibFW1XmcFuR9kR3eRWSXCZvvX0BTYVYCVXasrc1XyWuWDVchP0Vfy88vtnOI88qk0Zqgx9THwp3j9mwgLyIRP4pddY8wuoA9gepouoazu3i65jZK84GFW2l8JAriY90/NoWkRj+HJ2C1A1bqmAxpvjsz8PyrSVPpL893FO6dDpnM7l+gpiiaeaFtgon1nnrUUUzvj1o/r8tT38pFG1VclumqJOVqhw0XledxERAywE8zVORkjwQFdgCjRu4itGARRtEdXReAOBY8pS202hHD5Rv6CmdJb0syqVibsOHT1ESMPzdbnRcNIi8VvI9i0SpMpt1vx3AyIqXVOgxJ2dMCGPRiM66sV7rYbOYKDAPB7gD61gYotR4gCWSJ0JDicOoB7sTbnXtyQbnmLu80dvNtguyV8ur3HH3ef8fnmFg939xg2A8LtFmEIoG1A5wEEAnvB3GLQpHMIIyBIP4g8NomW1aKcEZXu+s0beJkZIdTzZM2Lq7XJiBbymjlcO8tDzHzaKq5J21oCmt5+cFFzGo31yZ40wvXVMKFU5moot5YB77CXJ5kRHVn20+DRc6HaU6yfFn7zF0wJi94AuPkA98/vwP/1HfjzH7PemU5R9+P1qc93BbVLSZwQ/7GVV+VnlWYRZOJ9Wi6dqf1kyj1yrKHir4fGJ4qbFClCeIrPTJp22aJWzSk7YdZ5CWYCMzKWSWGPL+tjUt6QjUY3aDycWC5FODeGEUX/YhExhgAiSmOjaJbYKXWDYCAgsJd+ErEcOjn2iKLM0zkIlvYcZQlxzWlPSgpAtw2goGeiq2U7Y3AOruuwXvXoVyu8GQLggVsmCXO/BTYDQuqxeU5X2QaBk/Jca1zC71ajVetlh3zMSwEMeNzu+v4LmHOeLZ3c29IpiZPIqslVUhdVo4si6ijcCDYdwqp2LR0u9GR0UaBf6JXSDo61S4Y6lnA+LjXllxRx5b6ZTwkyq0pR9TuZVksIuyOvY6jOxtUPW3GMIGXyW0aBjbps7zpx2951oM4JcOxcqTw3fxTjkl0AhCwEIhCIHVg3Khhlu9xHwVwIQAgI3sN5Dx4GOc948GKBrrK3uFAgzQtGiGUXGglEE6DnCanypTX7ckS8c8rzOaosT89Nc4voSUX6c6ZDgGVjgX+y/JvvTpvVsSS9PStIE4gtFtYvjBxEkUMErG1DDwCu5Hd7L2OcGRi2Be/Be0j9byLf6VdZmOx1OUuYY+Mlt6gURUkx0OgEt9VTXX0UioeZun8Cvv37D/jj7j/AsQY535vrX2MhKiFCLk5ZmCxsiPziuirvDWANLXfRaOFlm+0tjhPYT2b0BINyURYTEiH7PM2TLVxxivqZOXvUXnXHtKPgcdu2FnAWR62cJoP4OzXoW+07pSShifabynTH81HyjXjN4jGKnf8hGIyoPIfjWed6Bg+rJDDxMWa5J3TxuPT4vZ3iN6TxZb8TgarjlnPfVfuYcbXM87lmqJs+zWdUVG3MkzUjI2RMEqAGV+f6r1226e7/GR7f5BFCBCJGUoq6qDTnyhK9TluzZYACAx3gIs7mjuAdsHWM0DE8Apg3GLYDNgw8hIBPD/f4eHeDu/t7bO83GDZb8L0HecDdAA4OLnB09MSgwAhMgNNq65nlRj082vy1aw7jxmVbikajDl22e56Xdq13GtkUr3cE0Lx2WWIB43E5SvI4Hrmcw1WbKG1Vig3hyN+uA9RnbR6XOLYKi2i5hejh8V+yEvrcbqkfg8L/xLPQ//E18ObjpFv3oq++Qpr89o/cJ5qjZR+r97n4B9KSfn98/gvbVRXm6TomaY06LL+2yk19GXd+swUQxfz6zMfDXmszU48MpsrqxY2dzbm6kV4IbOxnTHuPjHGyHTfb8vZISnTXqbwgbkTXIkQDH4tDuy2j8x6eGcEPYAcMBGyvVujerIDVGqurq+hZk7DZBmy2cVP/MIAD4CGbKF2U7iRMm4pR1QXl+ODiyvQZDeK0/CZwStyknWC3+X4TEPnlzqgvhc47zndxmqL/2b5TBDpBQZ45u3sNdFGgX+hCJ6FaQg5zHyf+k1hOIU/uuxZRc/iqFqTuozQ/VfkPoVRHEaIVCujZOBqNMkiqhVjpfRfdtXegvgc5B4ru24MrcSxgilAI+UmEs0T5nD04BO6MDNTBESVBHUIABg8OHn7wcMNWXB4NPrkxGlXIuilU6yKn53RqOUxbGZfttvbSHAHMoXqq+YZGBHOr7fnCBDAvWWC0Fy2WwR2aAFXXzx/VTfWBZyWQIxircwBvIMLemy1Ab4DP9/ndNZcK2K/jb4A8X/dI3kaGoVLGGSFEZC+afXxbXVRltFbpU4L2WkNTaH3Gbf7t338AAPzxvwcfCinZMUR5zgB+a5e9NBis+Jix4iYiUXDbKtzsIwjZo5AMsXZjyPedUqKPZAQTCo6dspkq3lF14GZSB9Oog708PnIw7VGlWt9zutnKDO76efO6Feacc6fBa02qmVgNXhgUEM9JR7JwyqG6eP55hFWOQb4Dg8RlpCMALlryIHVRjsK2BLUbQ3Okb1QeWzdr9c0L4Z/xZCH/x01TSYlbry84Wt3mRUASYBtrXONDdTFxEsDmbQMODqvOYaCvwP4TED7nyk0Jllg+oWOJD+cwEOEuPhw6xuA8AntsBo+He497HvCw2eJm84C7h3s83N0hDB7sfTwaCYAnMILcDl7cgUZZNEIhOjb3ub3alufmOoUHxgxShbc8fnZqOhlz1lseF7M5BS3n28cXfc98yaAOe9IA2Trsn5zS0g1O7kzz3ZdgVPecYPu+tLPNf/wov38D4N8DP39uBjum7qdZA5+x0VUB23o1ujh13ntw7Im8zznMTiX3OHaNzMjYICc2Sh2FWXWS28k73TuYvP7MVqncivrCWVxFKs9jAzBba3BCdF8JtpNdE5ooiC1xDPmofEdIBkNwHMXZJHJSNcBxQBgAsGCrFYAVAwgsZ5zfbxA6xuZmBawcHHXo+h606nD11TXebQMcOTysemz7W/DdBtgOUbetmwDEEl7FkxSxCccqCJ7bhatiwLmlD9U3EzIO8+gFTkMXsrQPw1AY34pq54apTvFlMaJXTxcF+oVeEe0xxS3RH829X2oZZhnylNK7BZJbWSZ97EQ6zXJOCUdmkcfpSOtdl11ppByIv0npXjRgDudE6Q3XwXVddN3eg3qx3GZ1PKTJRNklVFGddnQ6EFwOxADQCXBVRTfpeT7iKj3o+cPDgDDIrxsGsUD3ahGey1uUvFA8mD/dMOC6bL1KQLZUzwJA1m2XSRgY83yBivGakhXyl0T78o+jh+DM+N8rb9q/jCP6wr7VsUSQzTxqdb5hcdneMYA1QNtSef4O2T37OwkCH58RgL6XC5bNOsVuf2CsZ2rIN7h+Yue0xncb8Sgdh+8Y+Kz8JdShUx3++PiTbBb4GsDHUfLzRAC+iXn/Zp41u5e65TUv38aC23ay8W8h7uU/V411KDGkPay2bKciq/pYX8yKvZZkzGGNL6bSJdV8s8FHF9VcV/gKFdPDBKhA5BpzZotRPDVRUnaR4quEaWz5tH6GL4mWGBQPbKQQhY8O4sLdkAh4+xzPMRBcZFUU90e61JTWUoXLhIqij29q6UqrbZXp1DxWsSWNeVfKPwo0LSZUXle3V0pzQe8qGL78Kd4kcli7FTp43PNXxhLdVKvR5QhAxwRHgscHR7hzgCfGg/MIncc2DLjfPOD29g43D3e4v73Hw2aDYdgCQ8hHIJljkJjFfXvwXty3A/HIpliQ4kgT257Vb6oD5/ujG2+PyPsOwz20O6I0nZMQ1nmSZR2Ta4Pp4zmejixWSUtlNm/SUpnyu7hxJr1nHORdpsp4AZ2h7RaKJc79vaUIz6AMB1LjMJI2/QfA35wo0j8jY/2c0BF5n4qevt1Zs5345mlmnXp/is1FtehpFILm37/A/npSSthp3JbSvuN5RJ6YZ7VlZw2fTfils9LzkiPVNakxcEVpjZ6V6KTzuZEbF476zIZBRwwaAoji8Uc+es3pBJOTTp5ECHHjqh8CwAErdujJIfh4LM4Dg8lje9WD1w79eo3V8AZXqyus11cAHFzfi+ESEYZoYGSLBIK4ko/lYy0/EPeCmgUOA+NNw40+BBKsX8tCbLvm3Rv7wfcLvTwq+HLVH6yOpQpmfkwaB3aSSx96kXRRoF/oQntS4qEFhqk53x6CiaMyj/8dlYyZ9fdSmp8A4M/gloPJEdJZllNUFL+ukwIfI5xXy3PngGh1DueiJboDXBfPK4/CSNWDJ2U5GQFuVJ7r2ZvxOcOBNU8CKMQ3Qdy289aDt1sg/gUvCnX2HlmZXdWJZYHB6l401UUXJHrmpyjzs4yyFCin3asqXOJQCgQn+zFn6/MXRs9rITRBzU0wBwweu546ihqR98l/sVBgT0HyEnoJ379fAeDosp2BawAYgPs3QLjNTRTdfvONBMN38pj+gOhDHAH9WhaQwzbWnbKedqYpCIC6c+M5fqDmS5UrOOVMSXChSmk1opn6Dmrp3cXfvZXnWQrM38R++EEFMWPlBrO6+S+TwFtbeI481YS5hSj1Of4Scp1GRRrXsXj0jseLMUt2Y0RLufXiZXBU/OSbloCovj5V5fdMr7LsPTl/bT5v3TeUe3vTHCCz7T5TPi5vk9XKzgYxeKx5Xvo+DWrKV2wCshog5UWxrQpvRc6ElfecEgkpOtjHZBgIHZii8IydbHwEpX+a1nik27ay77NQpVRithkyT74ig92AsQJXXcfH35QPp+Ap5OxcsGO+bHw2KUounAOBqAcR4coxHqzLTM2iIWMiODgQAhy2DCAE+M0WHTw6dAg0wIcBD7d3uLu/w8P9PTY39/BhkPPOhwD2DAwcBb8CccEM5oAQIo6NfScZWbewrW3fluW5jZOq3hCkFcmOBlPZqJPLyolvwja/AxhU+l6Sd21JnYYnVyWsWGIOpvPu4bQUntW1Lvp5eghdshXTb/HJTnWcyoUen16qMvIQ0/9/RyD8V4inol8BLBhny90OLF5kLsp5EZs498b6ehp4ynyX8telZWfkiXYW92nfNhOPkWUVzFox4Dm8Yx5K+xohjC539Pq5daROdqR40JnnEfsQwUGO/mODdQgAhbj5dMsJXqtMU63BqesgjoIYgQKCC8AQ4EPAlgMGMIIXV/LwAG+28HcP2F7d4359C3IO3WqF7nqNKzh4Fmz+sNliO8QNkIOXsvlogR5llmyV55YnMqLHoLrtS1mFvDM3Brfn96b95z7D9KsLHUOp2av+/wSiwvTNT53PHAu4dKAXRxcF+oUuBOy/HpiSM+59vwDoTQEwNohnshA1IJj5nbJC2id9br1fMDNYpXCRTy0dIfNtKnCtiN0BSYkeleToewGAfQ90PShabnM8OzwJXp2WhfKZ5ikvFVh2UtZ0Lo+T8xVBoKi0EVeSDPIetN2CN1GBvtkAHESJHiJoTOAhgtWYHQe7wEC0oHHlWZ3k4m5MiusL+w0iEk5tE5X1IeRnk31qihpg4xmtadKieYcb42exO7z28Try+aq35b3pLgupwSv2jnNs5k+IHk/iyvrE9HUPeNuGHM/gjdrkcC/K2rcolavvIdbpWwJu4jjvV+l8X94O2KttbV+LCgGOfCDrX3I/zC1mBFLVOlTF8XRjajUjxfn2G3Xd/tMe5W08+yaW/QN2flNuedqwgnMC8D6GIwA3wDf/+Cs+fDJu5T9NlKOZYf2r+cf7z+Ylkdwfu5v5KWjRkGlETopNiyNazOxUY9WmPZMm48T8oUprl+V5MQcsKQeNcuf4hCyeKULNTOhFu+wql2nrluB05yfO8fXU6FSI0bdJtTKCxWxeKm89hK8yRpsSokKRQgd2DOYeeXOhKNEnzVNTm5RYOLMYxW36wPooJdPcnOtGRrmPWoicgxbyJVUKgwDWc94lULGRkqqpsEhnhsfUsL8YplxUyVrs9y7Au6/h+YO8VyP5RlZE4i4/sMPAwDAMuNOv7xGV4AM293fY3N5guL8Xl58M+byBBUPfB7FU+gyEOLexdcWu7R4/Td4r1ihU04W7vdcmiGuWauNCOa5aY6YOB2QruvG7aWp/O0qVjH2kKh6nPlcnx+V3muWHC/jUsQpBm0TVXloatUzLUyqX/X8hi1+0blhc7QUJnGRqW5rIseWvvukT03Jj5gnmN0U/QZToPwB4gGwwPabuaZ5aXIGF8U9Hu8efzonLDluY4qzzWe/AO/vmfeodRofmb/4/OgHtdozIgytZA9cB7XykGHICl9ZKdLOcegYrJgC5n7b1/XMfSCcr22Yt4FziL1GeSztm5CxGPuMxw8XGTmIGRatzcIQ/YlwOcIdu1cFRB3JyRnlwAeQ8MEAU6QNjOzB8CBgQAN8BWwAPW4T+AZurO2C1Qr9eY41rdG/WWK/X4hiKCOHmAWEzwD9sYsZ28wvJvVfLd62v7U+cnxUdwD63cetPYddepn1rai9BLnQkpTFS73Cc1E+cNPfyMvErw0xsGVpYuZnsLubLxc+FXgZdFOgXutAiqidVc98UBB6bzZK4GAs/mpbnp6QTptsSuk6GbQiAABRgPFqfU+/gOgfq4xnorgNHt+ecdrySEYrm6ySmZQdYS3PWM9DFQp1la2ScVz06ZjkoaBhAmy2gCnRVdNVuORnZEjKVg0FM2SLeOZAqzF3+ruVcbFYuVuhaW9FwRMlfEE0qz18wtQQGycDv6KFXR94nITI/5xQi7kp/pg/UC/mnJEfAdY94UkQc6wwEDzE3uUda6L2r4n4LUUL8YeKuVnEoe9mUozwrsY7dAm71MJG9VCStQiu0MWjh6k19w9VfLsc3f/8BDODDnPJc+xjZ66jM+iYukj9Ey9O44Ja6qwLA1tvyvQm6gbT5ZykfAHzz/q8As5TzUDevSnruuTbBlBX7IfR8ZJkXmqOp79QU4FT3X870tYjG7HpGYQi1hw7x3pk4w6arVgAAIABJREFUlq8xlOcROAkd6/PUKRaAOUCU0+npRGErPFrISWpnr0XhM//VsiTebQTGOz0GSTjxJlJ1osSCC4krsoBxB03JcWM7OiO0deTA6NC7AArfwFNUouM9QJ9LmTmAAMIAJ0UJDN56hOCBrXhf4sGDOcDfPcBvPHjg1B4U4yBIPdgB+ApgVTi5CJRYC6/tKBZa6WgjbYsaK0OvMb4GkCT2heR+Yo3YbNDT0pJUi1naCjNnczuWUZ2w/jckmw1TknWZDG7VMcYYu8h+CjoJb1+SwEsFD69wQtT9mz+wHDD822zoNi393K+w2ZX2Usa+1OH0mGQ3Wdt5ZGY5ajd8lQpnxT96yeWzUd7TeZyF4gb0SaP5SRnmIaBsDg9yhpMYy5IK1+7wBvqQiAaDAwZGiMtrB4A6gnMkBkjEINeBXcCWAkKguE81fvDomj08bLC9v8PD7RquX6FfXaFzK/DKwV1fYf3+GnjY4gGA98FsYIzGARxxXIgTqLUaTsrzqWZKE79pCNt0NBHetuNM+hc6LT3V+rfIx9w8Zv7FxqELvSS6KNAvdKE9aEq/Mnpe47iR9OF4JJd2ZumDXQrBYndn6zmNwxVUC9Za4cyzotJ7SVv2oOwuU+YYK/A0+dcA2wpOrMTVEeBEce5cB+o7kHNgdd/uCIGcilGRLeCpaieRzCU37px8vMd7ldwhCd84BHBgUDzvHJtBFOjDEM8nBgqn6xbIOWfaImHgmJ2UnxxFSwu7YjCgMpEqj8xfkuzy+LMfTC8ICFQ7C9Pu2+dg1rDD8nzMe+gEnswaDG0mzRFPWpLvqTc4KCgdKc8nhKlPTat+nHcX8jms4b58pwrdHuKy3UOsrQHxpvG2lzPTvY8KeP12ulBEeyGI/IjrBzD8YYLVlspxjL5jKb8waWmw98CHTz+l65FCOTE6Q28Nf11DFtcfbf52bjOZBTu+ME/MUpYfvi4ezyr5Z9NrPDtAeT45o1Lrw7QSOEU/3zOvKRoNPZp/X4d7QVPLmGoMYV+1BDaGHqHeZMvz3NtVMVytPS/myDh3mz9BVMJzGE7OYoybaog4euZRfsHICnPld/kZARI/Kluh7iNTrpEKzD+S/iLz4nxWeP068VSLY4vFBWWWm/BaLeATHFqcfT6F7VRKOjvZN64JoyiFjR8BK8TNpOjQE4Mcw/NXAH2aFEwFAJ6iwHYIyaIpwCO8CeDbANkkthUc7Vm89jPBBbGcYq/fyk5JcU5U43/O7aL9hUBR3lth4pHynFHgZVttiu0+UqLbxrIVb32Q0xGZD2atzPYhVu9XtmyNohdtfFQZl1Pq3iUT2JknRwH/sVaeNFofHhD37Bt7+QTrnVMBggNixnY7a/Mdm3lawx3XbvwTizX6X1g8Jx2yCXNq/XgQ7TG4HoGsZwkthb2vqVXCJX3dThlTefGO9M+02jw7EQzEqH9Nq1CaieVl0d72gyfs0GjRtCbN92djExP9oQl9WkF3wLJx5BJ/1flL00TUmnBKKzlGQHSTrtYZ7ETuQAz2SJ45yZEcg0kBoA7oIoYDBJv5iLs4etfceviHDXzfwa3WwGqFNQirNQGdg7teY/32GnQ3YDsM8NtB5CLWQiRQNBiya33EcON6S+VjOajqgLUSfQKXFkr6C52cprv51Ac5ce7W65/yFj3GKzEwmHWz5THFAqBKeg8gasf5pX+9CLoo0C90oaOo5nA7pfFYBJ0PBf37BN87yUPKfuLlgQJAMiBnqq01XFGEQsKY0qPOyZ/rQJ0q0eO55klZj/L89YTV7ERLRv8cd5YmwSUgh+0F8ZLugRAGuGEAbQdg64FtVJhFaxnBqZzzUiEBVHmeXWICiifVhbtFf/rStgPK50kIGPMR30wJL1zoXHQ8r6B6wXlg7Kaw/4unhbz5EFKg/G4l93re9z2A7zxwswKcbKZJLm5vNCKAr74Gbj7KolSFZqsreb9hc955pBGon6pri6dWC8WoENAzxCej7UMa73313AoCqeJfzMLj3mkCDKyjEv1jrJfTeYKEJ1pByoJP/GG4wzf9NT78+J+c1rGCuBvk896PoDzGz7TKWio7bRa7xXdeA+/Zk04uP2i179T9M1nNj5TnGBe58YztVbJMkbSS1xaU8cR5RQvjU3En0EnF+iX2TMLJgqyAxoZv4DNQ5l+W3yYYbPlz+a1q2/ZiM+Yk7WjbuSRSVUoXuT3SifFwcGDqAAT0FDCMmD9SPw/Ip9SneZAAYoYbAkLw4OCBTZC5M7ptZx8QOKALcgJKaDURKCvQvQTSjbDqtWDvLj/TRUZKdKrTfQqh4IUS7YA9eRyfLvl96AnR54VOSUs096fwevWfmP8PAK4Qz0Z/oryfCe0aO085ti7jeBnR1LXKo/aeLhWJ5Cn3Ociz5jduNCo3tdl9X+FuGucqQxSjnNyecR0fBYqtIwHZxfwdAdQJponGPAiMMPgYMsD1BHJAR7Kff7jqwT0hbLdyxBxHOacfgIGABwJ6h+3dHXjVwxNhAKF3PVxHWF1dAdcb9PcrbDs9ojLktqllso5m+kfdthNN22reQvZ8oS+W7DqQUfaRx4TqFwv0F0sXBfqFXhAtZTAzwIMnghi5FRUB981PJV4HCIRb7pkPyHU60kQqjwIOePZ2VgneepQsXWsh1D6SvhgmpkNOFOeIinOKFtywynObjj2q0s6yhSU/JR1P0m1YoWVgIHiErQe2Hi5andPgwUHEhQQayYdzPgRQVpITjIt5Z8MUkTF278lZ8Fr8xQtGmUAVtZzoDwClT0xLzwvbGXsm/RnHrPulnUK10ynfUNUlbb+cLOBklk2LuJk4B7fynLeLQxMz38AukIsuz8gLoLQQOn1H3bu//fAt8OtNLvsAwDFoyyIQ+3qT3bnbM7m/BbAm4PNHKfoNZJXqIoRjL14sWLUNwHgMm7rb7xBaAjX9HjUfl7DMEz1loh146t2nUai8IM4RM2N9axYbVyQf/mPI8Ufz+MTEPvW9av75w9fp+sMf/xHF920Vp06rxR7rtryp49HkGJucxus6pqrWAfR9g18fTUdGJlsO/ZY1NmpgpXPOKyMXf3p/TBtMCMS46vv1ffwb8ZkENuaJGleAZjM915Rx9vwIB/PxiWyaY5jjk91t36qVPGNkV+5WEBfxn4FTBS8CsiECLM8fgTY0gFymAprWONUGsgJBxWxU3uuvYet29Iw/BY3izNLo23A1PE0CBMHn0HPi1XJZAq+IwCRHHiXDoYQ96yoRPDhZ5zpA9j4wA7cMCgF4GCAu2xmsJyBFPC3nv9s5xNZ/BJKTEp0KF/+jyJi0PjdBqX7QolTl1Ahl3AOH3DxR8RlH3nRTP5jP9ElY8JI5qS7gLUbH3jRZjQ6t2+PrWExrR8Q9Ny0XARybAGN8pvFT0fJ8l/QXiX98GVLMnwD8GaJI39M50pL+2ijBk9MYEbRp/H7paJuv8y4k9VqJWzemsQhjNlBAW5pq2fG6iQymVbS4nHasR6ZgXN0DlxhCjaBLBHw1bNT3E4pfNhYyyfrcHEdWizUBAJ0o2B11YFA8D53hOQgPIwDk0IFAHeCcA/cdGE48DoFF1uGHaIG+FbllR/BdD7/qEDr54zWw7nq4Nyus3r6Bu1mJt75hAHkHggN5yZOt0ZRuFtAmbzEHQsaFI49NjbaeWpvAvj8lHzxVWhP9bF+mf6YNVqfhn1N1PDZl0xFqC/WWJfpBSRsGWGcJ7NcdGsvQCz0NXRToL5IuI+UcxLr7TW4q4Rrl+0LAVCOr475dk49O4Mk2LekzRYV20BETSS2QTqBIBZpyFs9YWpUnL4rxkhgqFddJ+t1KlE39CuhXCP0a1Pdy5nnnEI9bBFPInzD9V+EmcnBOrNJDEKG2CO4YQCc7MF106T54sPegMIh16HYDDA/g4QEctgC2cBQtv8mKGykqx/pYBieu5Z2L+nLR6hOLpU42zjclDQFWm0hx0uck/PMmjLZbY0k/Age1cJGLYXDGdfU8PQUoHAlR92wO21/tw2Ixk8cH6+IBuceMcz4g/3bU/cnKgY/GqfVKGEXXyt2wLdRuu8M1PKVQohcJRlbTshhcSjH/dwRsOuDmFrimLHznQfQN7+K3HmIUexbnX0jC3May3SDys8jbghe37bsobZKpB6m2zRHVU5fGKan2oj29s4t+hvCgWIRUjiTV5vz9+h64Nmmt41z8R4xXWMRr26pwls27apG9i376KEr0zx/H9fbjfrQ/2XN2LdmC2cFUFzhgkoryHFq2qZWcTZJwtEnH3kCmFfEE/HvkpcZO9hjziKII2p9mMzjiFVeXFtsApeXqHh13JImk1PWzXKkpCZopaIVvp4JV+RY0WeyJb5t4khF42TSN9Uz6IznGhl2+zxk7iDchB6ATZS51MVy8pg5ELv2BOrDrASdpMumxPVW+tvzxGwrO8pHHUY7C5W2rkTjWn7zeK+824z513YgbKcZkAOp6M1nsKJ+u+xpyPENFj6AyQioLQcy8iQU/k4+bujg1vaJnQbCAcwT2IoxlcJyK3gL8OeN4Bpg92OSIIPiV4mZTF4IkODBogDpPAoceQEhHbsrz2CaDqQeb56bCjBDLmrEAM+ejP3S+S4Ub913mAFDNn9n8jdsbU0/Tt2mNpSne3Eo7HzdQzDBU3k9B5Ha5qhcRQ9VbkPclpgXekxhy7v1E1lzwgVxvbRC+ITAcjlVoBt61bXaaZOPGUtz5BGubSVpSdj66zQFdLZ2n7oGOr7lMWwvajQCyg+WX+PtnAP1XwL8/tWJlYpoc63tlfiZiKPSkdL8r/KmX/eccaS+XGrhVJ6TofXHkarxeZqTN4WatWkxeJt06j/Scx2Fs3OKdXBC5zKFHU0yL73PCbwmzWl5hy2kjF/WvKqjtY7GYYhhqxYfBAZo55XCkJY/lZwYhxCONJH0C4Ggdo8vHCIlf51YIgcDeIZAcu0MguEDgPsB1DFoBHXWAJ5B38MzwzODNVr6p60CrHm69Bq1X4A7Y9AF3bzyGAGz8GrR6h/5uje5ugLsfgPsthhBAwcM5UeinY9YVGKf2ba0vKK/zmPM56vqR1fK+lhVpumyepXxbZF6QTafCaYUitlpPvBoya5+atP9r+4y8OU1FPCT7eWw+LxqhCAh454SjQyzL4WNa6kHWMpoG21xcz1GBFsY/dXleEL1wBfprZTRL6TW3WxMp7UElaNC0suDBSMQo31dY7MQ0IYWb+rQHryT2TXjm9c4VThVAJ0pHyb0QF5NlDV/LvIoNmaRiOxLBXteL4qlfg/sV0K0QHMWJi82ClpPn9rxY0zKQHvsj1wyEwKI893HG6xxcBK3sRbmOIOees98CfoswbCFmMz5hubwwkDPXiXowVkhCf6fCYWcAV8hKcP3TtIxyPDqnT/XjECRuAoI8mqyLs/lUmFh8s4mZvTXpn5EOOfPsFMUm8395tQNnJ7ZclbfYYWvuVYhQB087bKdynWgPzX/KonY2CfPRW+uVXdRYQBf56NhmRqEAtuZURZyyDcgUKgcdRXocJfrf/wT88iGXlyHC/G5I7AlAVJKbeF9BlO0blvAMUZ6v1jlMiOed72xvbaeJwVnvZK/DNL6PlVsUqU5K4U3HUB5VePdozbGR3phXb94A/FlcVjpVgLWjjQt7xLf96WN2ua7fh4FZJfbBZFZLRfvl5xlTzLTTMUSjix1YgcZM50lIF8+NvA/ZWe9o/MxezyrRMdPXDH9OydnAh/SXlnCGqt8qHJD7N9XP7Oxvr1p9bYKI2r+TeKBV3sbrEXEVgM0caF4pVsqgO/OpaOlccCZ9Tp35LZ9Reqe4MXr9SZgrKtBTkpI3VWM26apZFL4pf859os1NRUCpI93FVwLlGElTTBCM7KKL9Jo3p7wlX4LyjRxdKe1LsLyRSp6ePBUo31a8TEgKc9AnsPta2s7JeZWkX4HkXPEVM4KjpF/mtKkr4ktVghIjbTJiILC2hag5wQwKOaoEV2F2JwJalaqqUtnnNjaVKr6BPkk9R4uhZWVNk4t4qdmIUGy0Bk/8TtDsmKAyAE9FGAv12WzYqtmJnZYZgNN5ZnYjHNA6O9W18Ou+VFXv4LhzLBOA3UiUupzGIwbzkgIsoWWu45eX+XyLtUVIJlbbzYeaznthtRnHwyDph8cXQNZ4jZr/AuC7G+DvDvjfnakcnf+5SPrLYRttKq73+LSjY51vtB1PpyszZRhvrusgkqexIC/WiBqOc1qEPBjtZmq7trbz/ijPBqYuNtgLhpAkS48uepXRqplcmLP7nKLsJqtGX7avLa5VOaHAJpseVfG0DopVta0jXoUeCRmT5mDKoVjBwUU8XCrOq7pErOU9EODgOoAdwTHDUYjQ2kUFegdst+AhIAwe7APQP4DWK+DNFfjqAaED2DHuV8DwzoH4Cn3vsH7r0X3egj7dwweG22zlOHZQPLktntXuKC+1ksJ13MappfXbFEp0CK618qWEBav+s/fgsGszxb32HhmPTGK7cfFbWYyz3lHIcYd+PlSMlQTY0KzsXt9iqpINNDLXb+qouvacC202ZMj6wjS8yiVS1Xhc1ec4eUx8itdAL1yBfqELnYl2yDJGbPQVM5lZGlkUKRo2z5M5SQo4TkOtF+yfTkqEqEDvkiCUionYpFlnr9a+iLg7hOxakgEOJAZGnoHQQVEWc4iTpAezRwiDWJyHQRReWhlHGexGwS2RkzPZo0VU2VZkJlcW0MhcWZLHwhrpX36jz+vOGNtD22VK0bZrl96FDieqbkaW2HkBNYpUBz1ZgQ75vmdE3YXC69C4eMRuTMC3DrihrDwnAFsAm0Gu38Vn6vHWKs+/A9CTPGMCblg2AK1UaBbE6jycUon7hKR9OXD+foDwaEDqdR35cwck88GreG7uh07Qq1oGBnNQLgCARemuH7h2u27LUFMtYPnOXN+lyNM8cl9qbhhRQQhVj6m4ri3qLvQI1FKiP0cBwxy9iPJOFPKYslP6r3oesWDCgwbo6dE4EUdS2rwZ3yVMekThqvK0lefHk90vqQkL9DPnstuiVDxjVA7t7zcAvzPPkq7GYEeRvJYCwSxlHOWiSTjE9mUCEYPxeQTDBYvymMVx3GCg80bjj8UtUy7uLmqFUVydbjX9fRN9mbS0X07oAw5L4JR5J8FmvG9Nm7cz7/YkgefH15zP2q/OiCUWdBZhrUsSOGLNUEU/npaNFFkSTsT/I/7+FUD/J+DHfQ9Hfym0mMtc6Fy0h4WmJRmiJPI23dxulngoLqVfpNRTOELaRNraHNuSt1ThrMTMsgzbE6clYy15W1XGx+jOVgk3ypeqoNbApp4POCnbVT5YKNMZ0YtAEC9NIS6NA+CiqJP0D2KNLnsaxUsSNgPC7T2GvkMA0G8HuOs36N9co1+t0L3vsVp7rDaAW91jCwf2HmGzAQcPCpK2I0Lg6NUInGUCx+yUSuLh1hpwZl1YKzxfGl1Y66NSocJ4qX3kQokuCvQLvUI6VqpiaV7o97x44zlnxJmWaCoKqSxuEiyYmb0IYgWhRWJRUOrkr4vWRp0opzVIAWBJhCBZh1/uuQSiIM1zVJDHBXig5L6FEN8HOZ8RwYNZLc8HUaAnK6IooNWKUlTwd72cz44ejA5Je5+Ky/mZWqAH4xJYFTscrcw1hwT82ABANpM55XKhscu1Vp6nxqm+8fPq/I9DI+u7NjXf7pLF76VAN/GsUL6xuqPca+bzqSMW96PI7ahTSdZ5TVo36fMZnlUvblQQlvJQAX/+Rul1a8Ubb0bdeKKMewlKvyLgsxvxFzwMojhXy2vNwrps/3Osz20s7A2A/sq0zSMoz5t1Ne14CgFvvWiw/be2an0XAzjTgKo8/+1G+KRNg0k2SWk9rLv3W8x017IzWC4LwCjPtS1M5CXNMdOHUplqZdtU/z6YGgXfldYyafHLIsvbR8KSBs5oxF2iTDktPZdyoF2UZvGo7G/7tGXCco2wROo/HEQuWZVTxIesynPnwA6l8nwEEsfFJsS5gtrv6/InVlcVc84OldL7SmocMSoVvrgzXpbb8nATopxiel5bVL+1/DDzvuLelkXxMosbd4o4snW8DCEq0V01rQTkRrGQP4PvGE7wK6sSXSNwFO2qlxqFqczAlEfjiSbnfQK14rWs285A4/Ir3+JxgGozFhfPkdp4Ej8WawQscsN+PDXmZ0A2vL1DY8DW9zTJPvalY1k+x40k5+s4Z5aaL2nzJUrohXkvI0I8l+I4Si7YZxL4GcDXvwH/+Aa4/Qh8ODKvUxPPzXR7RD9ZQV4aveSaj2VE6exslB5yRpuHgYTDiYxVevphI7/SdBqpJB7b4Hd2LFncX+WX90zb+TLbpI+W0TrnHjjOp750mb7WqXpZr1EjTrQvmNmsUUzZ41yoeIHjQ4HCDkRyyI20sTHaCTEPH8DUgYNsciQv30YU6NG9O+TUzMBA4AAMHrh/gO+c7IcfAlYBcP0Vut5htV5hvSastgBTB7/Zgu/uwasOYUPiE4qRvH56dAC8qTuVDVpUm/NDGjXwmGrsABgchLJ7tTpD/byV3j60qz/ta3H+quiZVPrYb7407oVOThcF+oUuNEVTk9QzEJBM0nMu2xRZxXllfT4S3VA+IzyL46xLL8p/KgTtu2SBTkmYSmB1rZTyrvJIzyMiSi4cQxTiIQrqHAjy5xDdogcGBw8OW/B2I+ef+208q5gFQRLiOeexfk4U567v4foe7OW8yGRl7iXf7J6JpRxe3bFHsKrLkZH7UBOvbGD7MfLDfZTnli4T+xisVzQSLtaCPbV4sw+n4lD5fpfsNq2NHotaO3MPonbc5lOrPJ+PviOd/K5Ydx5cD6MV+fufgZ//KFgRtl7Ka5XnBOCzif4OwPv3wN1NNLgmAFfAivNCmZ/K8nzP+reCfRV/a6XFKCwbRbjpxKr8dkDiX9ffyu8vHwGQ1N8uRgnSNuSi5XqkOxJXbI3mKmeahljl+7Lc/HsVoGUhuZSmtGv7d/Pj8zz2/UuhpdWgSmA1EsLtyuAVrX7rDTFJwGnaqNVcp+hqSRga58bkgt3lDZV63cX5Vp+7Lh6R49KROVHT3iwgxUl37hRjqm7GVbRgSnkKgyi7ckdUdo/wcCkNHF2O85mjEuMJ0gy521phsLptL7im1iOkawZHd+hyfqaWmchh5QgDqPSsPoEpkwdUtQIvXHQK9s0G4jkfZhYPJiP8OgfS8vtsyf+CaOcYmgaKTQy5C9aZtdeS1qrn45OSFW5bMtbnS/JeFDfxq3PROeelVzQnjqg4v+ggon1Hy0cAHz+KNboD8PtR2Z2UXuvXPg0tab3jecyjyg7YqLwreJhm8sgjZX6KrroZAAXTJEYZCoNMahlLPRe01lqj+YLzetOuOyfTzzjuOBqtRs3ziXVnM4qGpXK9Gq35qZZXcXqdooqr/bxhJ5v8kKkiJyU6e0F6YcsIA2dZKmI5QHCuk02UwQtG23rgbgPxNiB427sb8BDg1isMXQ8mh9AHPKyAzRrwK0JYEbBluAhTiQgdAQwHDgy2/WOq/+7ziWqYba0x6vi7prQUlVAArgLWHznYXsN02vAQ8SzomLY/1ff6QkQ0L40uCvQLvTKa4FZUhaH6eRWvBk0781vI4eZcDo3osSSTj0BJeU5lvRq4JCukomVLBIZJvEgmTbUq6uTsc+o6sT7qxAoppPPNARBHvT2NBCkiErI7TFkU1lGZLeeVMxw5OZsRDIQgIDJsEfxDtj73HmAvZeui8LYzZ/j2PciJ8rxb9QgbD97KeeXB+2hUE1I5yBvrc1Xqw+IxY+k+AhozAtdCnttA1633XIfF8SDwnDRpGT1Rl5FltYq6zaPWAq2VhvbtRl5MGOdl+3vOvFXIKnz1LkW3q6fGfTPpA8IeRBN8c2QdWodvlKG1QKnDMQ5XmpuypG/2rgd+/Zh4CQjisv0aiCu7XKbPpmzfkwj6P93ksm7WSL7PAEB3a59y0TC3yLf9grhQTJjIJX0V32vdpspaKL7N8+uYbtSLAADeReX5T39ki3QVFqRxERN5V/E1FRpUskqN2qouCODvq5e/Vt2ltdv/WKr6K1eWrHxyPkoTlZ/L5xnx8hav2beNCKgkFZjs/4hha345SpOqW2peH74pp5UVxVI9I8FBonqeMRPOVBvONj81LzNWLOfNZjmscpxcUo6T9UrkXPGXFOgJD6oKWIsq6Werb+kjoyNtq+ZokwFTyTsQSn6rz0vgVWTCc0JVLfVUQZKS2OYJMDwSE7abvgxuLo/hjfMEBeRzQE3apjgOhI5c3JPyNQb6FM+cHJc9uf9US3rrRUkt0UNU9ke3oLrXFR3HzWim3WwzAqN2Y9MO6Yz2dsM1np2ZT06Opz35RaP4yTJtZyTGzqBzxI0xtDfN8MUbyObEmW9ep/O0tKjVTkTnyp+PXzNMeUY4gMj8vyCBI2hiffNYBfgPgG+AP/33P/Hrb/8CPi9rt6X0HNHLl0+MYz0jJQ517FCdesKYka1Uv1C4JfI4TgWyaTXGlYoK6ldzuF6TVXxXyxmK4NWsYzDheP3Qzm5ECpRS9fSiBiuUXlFc6062ddUmWk5O8cmkk73n6fJf8yJiOKYoXSRksKVlDGLbA8aAAEcE5xz02EzqZHOqI0JHBB882HuRk0TlOUFweAiMgd+A1gFD1yG4gIc1MLzpEK47YOjAIIRtgFNreUJxJFNxHnwNMFQ4p3KCkTW56TyKfVMSBuDbKTw1d/WRbQe0aduPshQKfMmM1bbvoynRj238Fl/ID5prfxHumHpVYewullG8I4t5oZPSRYF+oQtZasjh8n1CGjkA2d+JeMA+UohHpCZiPC9ZpbkTZGIBejk/UBaGkp7/SjmcRfeannHL6bo+PRPBKbL7yEZ+UdyYsBZlNJWEdaLIktAEwHUCFAFCCAEhBLDf5nPP2YuAECSC276D6zq4rpdzgxyBnCj6RenvQAMA8kYBGxXiUVnOIYCsAj0KGbWRYMc1AAAgAElEQVTJMgCvAPRowubqLz6rrXZQBSmeXWb0FhXK86mFWx1m6v0ew3fEZSJAy19nLpETIbNdi/RTAl+yF3ukd4Iqlm0sV3/+r7/jl//8DGyApFiwVueabwcR6NtEfngHbO6A+1iwWwD9Oion4rMQLc8fY5y1APpUmLlP+038/TBTRmc9LDCwGsb5MqJnDgBffZPfd11WoHsv4a8dkivMZKYYw6jrdsLIAn1ndX5DtkBvUVLineh7TBTErq/Ss1PkdQwUOBl8OCcOqRepM0GfEVzaixKAekZzcWGBXr+rfnemhYm+a3CNblxKzwhJGW4U4xwFepwU5yYcZctzIhctYshUh5LAMbnsnnT/wiXPToynxFYCJQ0GY5Xbyr24JQ9lWjbfilEoOh6fbVlfae5ZUMOMqHSMHow0fVflna4Vc0ZGyx4gD6DDFg7rGMEqpgkOPfUIzgt+Dl9jQx8LbyGEmD2zaS5JI7UH1NOSHqvExmpc06rxq61og9gKvDjHeUbDan8ar2zmw3yh1FKi30yEPZJeQSuenBZZtZ5oCXEsPao3r33yPrTuH4BfPvwP8DcA778B//tMPt1fGq660Nko75En6HE1ALISraCxFpNTVMp4bYSRDS4iKsVlSxlMa41YF7sU2Jh4yFVqyY/n1umWnAHNBhuzaUwiJAdu2tZgAqv8KEQ5aLGL3AqW4nXyDBTAlH0Ria0Ri2MnRCORrofrGMET2MedmCEAQwC2Hv3WA6sBvN1gSwxGh0AMf+XA79ag4W0s6wbMW/jBx42USI5F4SjLLAPGjDPdTjDUwtKcyzi2q9noZRecplaWZn1xoT3puVmiH0OHzol132mwhws9Pl0U6Bd63UTVdbrn8XvAAAjz2xTqPSJDn7L2nL1/ptw1AgZrUDQGFdrGUagZGzxhITLCy6Q8d0BHoN7BdZ2ccwlk9+0w8QrBMxVzUfo1ss2gSnQfADiQIxAFEDkwIojzHhwGEA9ghKw8Jwda9aBelOeuF9dErGWOCiYxJs9WNbKrk0U4ySGCQZ8tz5NbedNvnfnmpA1rwZkVJBohatpRykWw4nrO8vxLpAMsrCctzrWfTfIUeV9boBYW6rNEI6ES2Tyn8s8l35XBTNbUvG4tccfgb4LXFunbBBD5gE2CzWp7oh71wkcvjqi2ZBOX9t/2+OWnn3OSBNlNDZTKc4esPL+DKJxXBNzeACGWfXsF9MrPYsGCj8c0PNE4mwPjrfb9JlaQsd85i3bntf7eVmE6AH/5Nt//9HvVh0ms1clYSFpKyvNYtmZHBGYteX8D+HsWZXqrPYww4iQ0wVv4eLO8ucwOKsOzpGO9XrQEVuMXE3Gnw0xZnj8pPWa2p1ykN9OxE+XEgGthXA1ulef2GYB8NErEWeREtRyvxZMQoQSigHgfUreStpiU2Iqe5VkcR1nMcUaYq1eKW9MLLnlRsq60SuGKD9g5Lx4zVHrJqLt6Y55VZXOyuI5lSRgwGGE1t+dKuyEq1oOhVuiCkbXsQ1SiE1SQGr0AkMeK3mNLH1M6uhmUtH0V30blOadf5PtQ1qdo+KQENzi3Rfa7HTznPgMsbCCefs9yDpz5lmg8tt93j+od2wJLWYtgyyoVa6VsleiKD3QoAs3NanvnfQrvImdZoz+D/no01QuJw2lp7c/VernmR5Tg3wC++4Dv//sf+O23H/MxUk9Gx/dzrn5fHx1fc1o6XuiR2l15NEkZy/O5YxBThlwYzphN53auAJCGTWt/FZCMcSSZ3zRtFlhpHG1cyB2yjMnndcuasqdHpvc31hc8CmcytetmfcZlPckB2UpbcHAh5lMlujPr5tYuoiAegAKJlTm7uAmVJT1B2+KB00VL9OCGZATEg0fYbtH5Ac73CNstggO8CwjkwGsHeruGC7KxUuyHAjjoUZZSPjJ4mFNTcvIclXDiyDDONmpCByj6kR0JtVyp8ekyhrbfR9Or1rEprYnO8hrkrfuQbc991tv7tNvRTXvknLZPtLpfTdG5gPcrposC/UKvl6j6BTCaGFvh7T3NvH8KeonMz1qfawWs4BMGtQHZmlyFmTDnTarkI6UbBaJdPtMSrkOU2IGdQ8RyRsjKCSipwDSAkttIp8I2Bly0/OZ0DrGiUAd2ALMT9+3eg9ijcwA6AqMT63fqkpU59R3IdancgRlh8FFwyKDtAPIBwQ8IQxBFWgjpzPMsUIzPo+vKRFwB5qJRY52skDAJJ4EkOLW06/5CWaCd7jHNI1qgrwp/UBPXQJ6AdLRB3Q9qcJ+1AWX55kDn5IYdK4mkquuZBYktb3Nn+AFk3WxZaqwl86LPLHb3ztZ8oL9+Bfx2J4LZyF+S1flbE1TT9/H3DsB3DvAM3EOU57cA+ivUlonpvPOWN4jnQF9x3nX+sfG+XjTq2eWIPFkV52mneAz3l+9yGv/+JV8nt+4o2zeRi2lqX+A9mmwmwG8z0Vzd2Q6g2qLx4KQWjpXXSEur/SzbTfn5M+ELaQqgsr2SQGhHG7aEBZNCxwaAtxtzRjiTqjDOFtj8luW0d9ZqB4Bsbql582heK0BZnqdqvFarBzhuoIRVnVtsbOe8sfotc4iqb3B+TpY/2o2T1xyFkSHPrQxzFAah2ICaYAbH8kbrdabsalXTJgYFgEi8h7hk9e/AeI/BfQSFdMJmLlvaJKoel/KfWrcnoWiSkNq6mcrPCtNqXDwTdCr6c2EVpy5Ha3yeiBY3GzWKZbE0Y2x1rvAEz4eFvipqudU9iI7vMYs/99IEFngwmnR4si/9Dvz2x4/o/vk93HeE7b9+PbAASzJfRq93mNZY4kAq5ABH5L6kw00V2zJ9FjxlkUyeynMCVP5Xkg6pxkTAisdquUZsk3lE0JItVDEIzXQnYW8LsDVynhrpI+5RBaW4oZRSATIWyzYzEQmaI84oUITGUdaqUMghOv0RDMeAKMhT9matzyxy184pypRNoBHCERidI7jOgahHFyAW5BzgOQB+wDoEdBwwhAAOg+TdA926h6NOlPBwGDwAH+B9AB44euqL+NKIlZii8rwl42fK2JYRcSZKuRLXccxHaL2vv0t63+h/o/vnAiBfEC0QieQEHoPJwfQT7U/VNz8nPaf1ygujiwL9Qq+LpkCLCtsRfxuyueLBLqHeUzLHXZbo5+SOTSUhwWC60kpW31trGfHFU6ZVC1iJovW5UZx3ei/v0jnSRf6c75PcMn9jii4giTmde05RiS6KbMQdmSTu3eEQQlR2UxB9vpbdKPSp62Kd1HURgOAL5Tx5Lwr7wUflOSflubhwB8gKExX0AaXbprq90gPOgsXCPah5Pop2pFDxpdGUdePE83Q27RQYaVloTyrQDxivdVBnHtYK7ZFCAwY86ZirfF3P5j3BdwolRpUVUxZyp1VcHGiTjYfpxUnxvvWy0VGpupjMdmIMAMA//gT8LObWrHPHQ7Q6V+W5ZuHjdQCwAvAtARv1IgHgHqD+DQrlOQN2Y8yT0z5Zfm2uPx2YNgGjDT56+bc/57D//mXcz1L72k4Rr2tL9ql6EI/WxQfRSaTt1SR2SJqU/jue5vjM1Lvnsujbh5r8dUoIWfcEmmzefazLT2GROE/KY1tSHX1E4/CPUpR6HhgF2CeRxm01XxXVKeeYQmE/ml/rdtCwigUdygyoCFu4cEdtCc5JB8TgqBMxeLKwHGdkJa+Jr+9G/dJgtFHbxLgxSNLFVPNtUc5REpz6KaswlUOObRT94wKUbSBPdWurzF8cpO5bDkkQm0Iru+PUyuocKm8gzYA8eVdSN+2pETm/L3AFS5pl83EZtyz+9P0ktVv6OVDR56o3iabmm8nqmPo+EjtZ0pJtCKi4fI8yz8C9fWhZk9CZetEjzgt7UXnIxME0PU3vlff5hm5cby1RaGJB3eOc6X/8Hf6vX+Ev//f/hZ//n38dlPGxeT8+NvqCaclwrTHUU+ff/OxmDBrsxBwV6SqWICjISkrgJDdMuCKBLrPGjO8MPmoOHIOpmoXdOXeoXKiqm8LMRqpa3RaWyo+o+MlYy0DkWKeEI9WCPLIX5whg9awpxkEJN2kctuvhuIUhWRpFPOEBPZ5ONjpARJgRRysGzgbWBEafn+lRO53gThG9ypGajnrxWTQwAovsMwxbuK2TtToFMAWA1qBVB7dycNdrgIFu68HDAPYBgRl4EIyoiL343rFtRngg9YuqvZOyU+Ni1DXye0wQl+9tPjYP2Pe2ECac5mfvW7QrzPOFrrupLvvIcr+iXbLcxyybfaFrqZYSfbTGq9ewjfXKS/6GXwhdFOgXej00CZqAxIVmgVK1ati1w/BCmWoFIumzccMVC6yE0ioLmxq0uGh13lE8Q1x/u2h1HvOM3jpH8tIEaigCSZnciLPynIMHtoNYhg/xHgHMHTwz4IJY0TAACiASV1Qunb3pwFFYm6roQ5RbMtgPgB+AYQCGLRhqcMP5/OMkTEQlUFRtnMoHa5/GNYIzwsRCqMjpZ5K+9An7VMCqxRMmled7SiQmw9h0acyb0nOTV11PDkCI23ALcFoJmmpwb9M09SCiONRtoTl1vbSqTf3NH9S3iqA08YLqgA2qyp3Hgo0cX76FnM8dlefJ6jxExcO7+CyYX03mDYCB5Jx0VfR2V4LC9HzZNMbjBp1JQfh5iYCoNN/RwPWmDbqWaw8U2m7ti3/9HkmJ8+uHHE+zeFcVIqXfZctz7WDXEGv/meKdrVVH4/iAkrQW1xfaTbNNNtX+NWM5Z7sfkPe5reWbyuvJwPPBpt7ZjZApT/OMZA7KIkebFrX/kvJ7Apvqf5TuBIcRQDDK8NSd1ILchG0JTOvfOeGImZoozuMqZCau69lIICqoU10SFoylZ87urm0yDPGWovkYVgtwtMbP9WaOwlC4stlz8QGWDQriPbRDhwDQ19jiQ1ku5nyeOeeMOZtS5SOMEq6Ned6Ytk1C0B389otQ8uxbhxG4Ow+92intEF75GHS+vr7Y0G5R/H0WB8+UFrebSeA/n/AzPuHdf/8dNw+3wH92nMO0uJsua/cX/NWW0bkx3VLaVX4G1LJZXbmLBz0zxxdrHwsmogJX19stl+gq86hlHw1RTBEu4cGJ+kwqKRXX1tiOUjXaSVvwEoWVKqerYGkTJsZ2lPcKFLVNUemBDXYCgTu1Oqf4lhK+y7grFwuhWuJHmMYMcEfgYEsY/wb5SOwCQidyUjgCsQN3IvvwPODh4RYDbxGGNXhYgcMKerQQUS8bmXsCvV2hG66lDxCJnn/jAR/ramxCmFBt4MntU8IgfUD5+5pH6cbi7TmmdAjTmupvT0EvmcVMtfHe1t5PUPnnOHm95G9+Zroo0C/0gqgWDh2fRHlvJshdgryWtc2zYUB12cz9OZn2yJ0nZRBCyLsw6zKmMJRwjMw/eoY55W/SdVGB3gF9tELvOsA5sHMpLxCD4nnk6Vx0BSwqFNT5NiBafHuxCvderMEHDwoe8PG8R2IwdxKp6wByQO9k92enQlxxZRQUCKcMCMxidc5RcZ6U6CR1TYJBe8Y57LN89k9uOwW7haQ1RjVA2ALb1jdQqtYA5eeNYPuLEDpWNLV7Efq4wQ/KAONrarzT+yleUiwcG3kVivNyfLXfAaPvzQSQN+Cd8/NmecxFsaY1+RmemdejVvgdKThZWE3t8m0zh/FtUoDMLJBHaVft3lzAEP70X3/Dr3/8Km7ClO9vB8nrbXxmXKGlYbWCDPWHeK/nb3ZXyBp2XZBBxrL3ODeddlqrv6tRnus4+Ov3+dmvH/K8YXmXLdQNA1/ZAhv++NY+b5Vn30XVDjq2kdJCfEnezwZ4PC+a8g5iFWg7ST/Q+DzGQ4nNnP00n6xmZiemvS3n9sy7ng+t8pqqMKO4NP61+DK9MwmRCAnThskiEzJjk6LHlCiGjNJHVj5N+Zkq0ZMwTslYdKd+YDGcxskR0lSQ7ucoJamTjdRhlKzNl7O1NkPPGmeTTgybPIRoQqYdGQkvU0yPUxiFuF7cdSa3rBT3iVHOwxwVJBZJBMeEHu/B/Dt0E6tsEOCEuTOGjhjcYtkEZ3OJbAmLhmnAhNFZ8yOqMUaFl85JxQaBUQeIYYCiD9bhqNp8O5onpwDVcl6zzE3wzJezljxTgRYx58WT+QnSWEJn7LsLq72kzyyxfj83+lo0VIBRf//8//0bq//6Aev/8x43/++PO/M+vscs9Drwamlf3DVBtHCUL2KPOyIn3BFn61Fwi6s4/T86uMZuXi8SyZgtCRLtO1vGkfJc6zDOb7Y99xCb5N+pedusaYty58RTEe1mwoRRADt/j5CKnbpDhHRp47+pgI2gJ1c6SlCBFH+RqYo3cWzZ9ZifLiBQgOspeuokUOcivgvYbjcYeIBjDwoDwAMoHuMTegZ3ncS9XsGxGCp55yKG3YAexDunyF+1TbQcFI3R5bluQB1ZBtv2Ltbs5qbetGrTgm1HLtNIbV91FLP+kPtG/0z3FZ6pGfMuq+vnxIZ3wu66/o34rfowynaYlekuEehMJHMM0x2VkWK3rNeHeF7f8JXRRYF+oddLTeHcAdzukDXvshXH/vQozPREidaCTaWpiS+9zwFSE1rlSnTbTqo87zpQF62+rfI8+Yik7BE+loeZ8k5FlcMFIAwBzg9gP4jF+RCV6dGVO6D4yce0AfQOruvFczyrJY4IUD3r7k6J60Ditn0YwH4rCvTgowItFtAC40LpqG0TC277c7XYsMBQz71MMseWEO1Cp6Up5fjoGU3cKkg36TQV8GQEoNrXY5yRe6oKgAdKFmYFtbpGYyFXlIsoen0Yj3nmSpmgfdhRtjI7ll/uE4/KgHYpyha4KvBmBt73+PX3X4Etopt8AJvosv1dip7z7uJ1B2AA4Ckrzgly3rnmYxdbfkBWumCPyjwTqvm61ue9Wcz/wRj5WNc+8pev84r7t8+Qg82qtKxF5B3J7qTb2FbW9TAgluc7y2wWymehXfPqC/n2r4aez0r1qeDkiHZhNTvPAMdtrtvVzGT+JsMIz+GCLwkW1H82wbFA3/L/3NZp2kr/y/zFxkqqkJ0wUJrApMk2J0Q5xXZla4FvSizHU4uhIq3GAkfnXmvFXeddCHHJeFERXp2s3KOlNytmYAb3WqogG0Mh504SHIgIgbOjd1JrIkSXnuAk33TE8NpGIf7HCsrtMUYVJlY8q5th43STPBGEJxg1Z2cTLTzfun9e88vi0rQEys1wjcwSJl6W9ZGx8Qw6zVlIYfaxdF4LdizstMdnXklDjkqgFXvzr5+w+Rr44f/8F3765V/iiWS2DIfT0nH+eo8HpkWMhmmkbt4/bsx+Ee2j9LEKzKYis0xQ4JPBPgazCVvl00x1BY4kM4dU2Mzi4+JbGblCLZsrIu8o6E5Zaflezx23xWeuB79prxBb1Zl3qMJqPnHvIxOXYinINwk+HnVpvGPmdBm8ZRAGMZ5YERwJTuRONtgERFmI98AQN1+yuBDlK1F6h65Dt+7QwaGjTizgt1uxPt9u0gZX9SgqMinevY965zBLnW1HQjaKSXRnf2zI1TRe677+nq+VWl4h6vZ5arlPC1seWiZdBhIdtpa+0KPSRYF+oddDrXWqIoupszGn5qJROs9o0posy5nKWFgSlsXj+qKW+alAMAWk8n10j05dB0pnnzuQk3smsfxORk0R7Iks1QhSVZvuozCVIYDLDwjbqECPVugUAqgCu7rAIOfQ9T3ceoUOAPkBPARwCAhBFOkIMS9WA3IfLc+3YnnOPln1jLukaSgVKKrAswDuGtw2bJlYjcMOpfFQekZj4Ny0awxaXlRYqU/ELSzspsIAedOICetiZkSlwMpeFIJ8K5SfEt7HDFv8tBjvOYwKsYXVml3Bqf9GPmzzneyYNcOAWXjX9Zspf7oqy5r27Pz9z8Cnj8Bd9AdGEJftqoSwLts9RGEOyBESgaPyHFmhq4rzlL22ARrK86enbG07brzaErdQvFwjCz1UR27PSJ/yCln3418/t8NZ5fkt5b7S6pvXyGU4hiXt7DdzQp09aS+LjDPy0x2eN5bTsenuP1O1Lcd3SkaaacjCdUfJnmBhW1jTvziyWKt+VeG6Irzti3kuK4I1uxOVcSB4z6F8pmG58ayYGiNx/L9wH97Cg3pV9AvFsoaHtKay4r7dZyVHLqfKJHiu51dkxXmlQB9TvRayYDyOhwh4Uz+MVl8cokcmZPftEsFn3EsuGu1L2QpjaNtGTEU5OW5G1fJr+3MRR/7oJuNRDWFne2mwA8dQ3QlGwrq9gcfj0WjRUAsS+fDi7WSZtt4NTPgkZOo1l/9UGI79ZcG0tHyqfIXrp0VVPtEseNZvfjwtWW+rvKJJn4CfPv1LlOjrfwF/tCKfh7IY6BWOlTS5LUjinP3VfLMWUsqPGgOrhQtTcG680rkZ5Vxf/0rBxs+KcDUw0+tqzknCjel5pFW8dtiZyUyz+P/Ze8/1NpJdXfhFNSWP0+QVZtY6+9z/ZX377D1rcnCQbbG78P0AUIUK3WwGSZRN+JFJdleOL4ACqjlMUeO27K2HEUBsVkO+ToQanxYKdspVK/d5qbu4zM9Y1izJQQBFjzkBDPouBlCk5Mo9tfEmIAwExqD3nQuPTxwRxkni0AgOci1nDCSy3mHA8IQw0AY0RsR3t5g+TKCwBSK5q4XS0c0KqlVzqh6S5MpY4EbHs9Rw2ePDlC67tICma1OyVP72hfWMQW/cp/E+k/jHsG725itQtYGrZ+1xwt7fhyJ6l0J/ri5VGpSGDpdD90IPShcF+oUutIoc6PgI9qB7J2u6BPwc+7tzJ7BwBnxYvgdVe4UACiQW6CEApJ9mbZ6UjroLhfw4CVjVZRH7zQ1igY7tVk5BTmMS3plOMtUtECgEhM2AzfUGm8+eyInJWwJ4FGsZZmBi1ZprGzCL8nzcqnJ+FEN5jphAzmCmBgtOWujbyTbkYO/cdssGIBfw4k5h2W46QRKfALkJ0XueflL7SWgwtiinKY97S4rE8kuU55Q9nBeZKIMRWa3LMqhbcrVHVfnZg3SdVzbHkiIKNiplPCYGslC42/y4x1FEAXZKGQDwgsEvvwRe/wl80HZFBD44q3OCKMwnlvXDXLVfkdxzHskpcgkYrl1+QJq/0azqZgTfS/QcfSuRZ2iMve+MvLv0t67cr4B2jVIyBiYE4EsCptfA79xnJJ5Xv40pJ853x6/eS4qEDtjL+X6G5Ryjezl9fDBlV377x5PPS/MfTEvzjFaEWZW4w3qF0FP3P4jHH92ZILuQc1etm2NWpLvUq35n+7/netNglw6YBFnTSy4TqtgK2ykpBZAyLY3d7NFFhSzplGgK0K5bzWDurNUeMPSCm3HRIOFGfg3gJYYwpBpERFDMNQIiBgywQ6gMCD52meTm5E7eri5c/dmzOfjw0U/iO6rbfUntjuGtjypbXiMOz//QAhg+/gQFC0cJ9DkfND+8AEfFPpwq3Lon3Uepf/7//gf4/ht88/ln+O2///cecrzQMs3wUo+Cjh2xcxu6l3F1gtt+z8jrc71O1wr7Jtxcm1fvTVFLSwCkKmYlx+lmsaLperkJhlKARhAPBMwOh9WxNDM91OjlO35nLHCseSFKQVW+CojnITNIAiNEwhCCyJgigRHBmFRhL7JJMXwicAigYQNQxBAJIbJ45qQt4jAAmwG82YCvVDQTBgCE8GRCuL4CNpvkhKj0BNBpqTXYZhZP5mYr3l+EoOdD94L5z6DDHww7f7p0UaB/cjQ3yx7RDEpFNcnT2rJT92v3QbeZOg8TSOuFrXfUlSvcQYu9A0U1HizeH0q9Oq4opxNoeuV5StOnMStIpfa5CSj1FKKcRAxg/TMLcwFRtQ0KKdbNd2GaqFFkgnZycwQwArwVBRfE8lQs2lUUGyCW7zQghAEBQe7jiQBxxDRNmCZx+84x6p3qEMGkKc2Scn5SF5MqmE1Czxnk1jtFa9TtGgP6SAC5lKt2gEane3aTE4LuQae6S33OkmQ23Vrg3hYsByT/Wc1wqsI08Xe9J6ARpFV56rgXubafFzoXgkvDlNIhOGPwklto1gbXRumuV/ek+GjSa9vQP6Xqefpmg9Dms3ct704PoynPTJ/tXIvLV5K1NBARwF8AiBvg9Vs5ABMgZfygbsWfQxS3BGCrn1ea/kDAe71MLLlsD8Bg2nVCPvxCel1DdmmfarRjDrCV4zXSmACQldld5fl8G9Tscf1e3rRrA4NLpfkSeUbGPr+kXPa5Ldhbxb9FvnLM19vWyeeztcCuN+vI+q9T4L3owHIUwoBTY7YV9TnJCfZj0ujhqv7Pw1unXKNbg5gy5TxVd+d4TI8RcTsHvVA1LbR+1a3Dr2n7ObyB3C7FFPB9Mpd+f/Uv5z7tLrbfHpu4Dt/VuWkYprovffJ2YKycX2zlYsOSjNkDjNV+KQLLjOOa/tN0yyVwXsTZUP3SGfVQUu77stl+2xtHVcHMw4ets65vRDjL+b5RO+lJwEivcIWvU00GBERyFuOREYxnYojVOszCPOp1RxOIJ3WwJK5AObIeNnOYIdqnlu0tmm4h9Kubp22nhVc0T2rP3tCexZrWOZ00e/nsH6AfZvWS25uDHqu6hkvhTrUPnSKduqIL69+phapH7I0Gfw+nU2OB+6FjSn2Ke7T7XmrWxj029z7PtF/8Y+KuiP/DL/jtOfDZ//kH3r/6STxJech9SLF2bmq7oh6RwMdAh1Z9xVC761Zl9//uQigwSuxypwIV3nJMYxnG8JpNuWZ/b0B+ztu+p+ecohT7Yco28w+GKxPCLLIQLNBvDQcIyVXU/3bLB/NM3VLbSVmZGKAI5mAgLgf0uCThOrMEzwWvq5yLq9dlpit+XLkB5ENipJiMwZNiPwKGgcCTeC0iIlWmDwjgZIBk2JDjCI4BmET2iyBeR3EdEJ5dgd9fIV5vBFOOERzyQU0Kcm2mYVYtjbvuSRusxnXpgMTMOCxwE1e/4bDfDAZpwle/ewFqC+ZUB6rwTXY9GegAACAASURBVG/yn9sauoO3b4L3NiJqo9V9U3g0q+LOWe7P/CxkU727RZq+8+Orl3bd+WjXCFsauEr+YEDSm9CfEB1R9zNQoB8DIMPuIHdGx464Y+p9POPwUVJqFm6bKIEOcptMHY/aKG7l5VmrsJ0FOg11kytBSdosIhUhjrs3ShTMDcvFzZd2EVdrGArlc0mrAg+9MqbnbnMlEsvPQODNAGwIGAbEpEBXJisoiOCodzsTwAE8hXQ/MxHpFdFyAlIEdxFTlDvJCe8Beg/eQFwxEwAOmIiAMICGAYEGtbgZ5MTlhwnT9gNi3GIc3yPGKd8HlASA0jaiUDczHgG4ExgTIM9tU/UgICmibCf16n92XcKtgEDzLdq/tzuDU5/vSytZ8zul7nhdQw2Go5KBKCzcqjHN7rFXhDeYzD9w97KSt8nqMHOE7I49lHeMJ/CvVxpkrwt6AthZgXvsZvq45AiVBqTxVh/gYF+fihVuGtoxmQpajZ0kO7Ws95jK4RStcxhc3uwSmAF5nq/0PIN3YVtzlh7LantykD745vvv8Osfv8mhlq0yO9utlPO5tbGWZctidQ6WdEYWxjMS8F7T3zzJeRPlOU2kyvMpKwQapmcHmfLcjnwDqjhfSmNN+vUkWHo9y+2VlBT7bgw9h9wjf03A73bnOeV2BlqI9wLSXu84j+nE1Dp3vim/zrg5enE6B/zl7pXbl2rrVE/dvaAT/ySK9EPpSEaxiE7l50y9ymm5sBDNEh03bJLwa22f98Id22c2ZmzT8BjarUEub97pjhNub3XvqXqf9jMX0P9Oh8UsuYyHOchvNXTRIWD7ikoKU9tOuV5MYIq5miaEdftf/1P3Aei93qlarLO2ABhp2Se4q4aKVJesLKvAXL/y65/Vdykd3/AxHxQriN3yo++JBYbqWvx++BOgQXE3tH1fiMCBAfXvqYJfVZqDEUCqRP8LgSfFCSo4nfL95zShxNHMwBvDDL6o8oPYDsUCBa7p7Q3dAwad9upNpx3boITZc58vCrf0Gzu37jJgrwIBKI4TV5+8poJH0FHJztWpStS7YE34lvTqgYfa1+rJu29c/7kP9eb9p0HHKM9PkHu1j+xHDFJvYfuMmxyOMHXjcQ6QP98B7//3Bzz59z/w4ek74OdXyznuKg6n3fkw+lS9NeDIdpuNuyNN8uPs8AV60VdEV06lXxJzT234Bg87fObxqF2NlrYvSq/my6LjjKDYxtXAK5tT8IyPvTFFUqOz4097GKPGtrZGOBfpuUaMqetVqPrUC4uyrjyK3KhoD5enqxdP1vYBXn4kaWVMTiHIgUhNK+rByqj5STEIUVxrint2cPqXcMU0IRCDIoMQcBWv5BrOgTENESMY00DAMIGxBUbGQIzAEbSJQLgCXzHo5RUwXSG+v0J8vcV0M0oeIYAiEOxQJk8gBAxEJTet8CzJ+5lRyliR+96PAy4GQ79jVF5B/jekPBlZUduvBdHM905ei9R5f0ew7kGpmVc7qOYNjsLTMxn0eCqdF2V+3HxL1SGd3XTsykxZprlQ5F1JfIr0yBXop4h/CJ1qlbkLMHRg9I9p4VziCXfwizVTld2N77EA3wUZiJx96X5xWcmGKdqXGpDGCy/rorWZdq1w7EsTPAO1YgdRYSlIXKfTQMAwiGI9KRCdgMSdfpRCyHdOMiEDcgq2WSzOCZPc7WjYKDog7zYuZgCT3HXOo+jamSdMcSsnJr3FjFmeR3bKs1qop5X1dyIzcp167dR5kkDZnMWRFyY1xLPx/W+vmC2S3JNOe4esFEZklSvSzegVScDphfZp/lHLYCXiMuziSVWfRnDPXOf6dAjllQSB2vemGCt+uziU28SYBMtHhPcMCs5KridoThbEdZ0SF9FUlpVBKsSTNv6Lse+oe7q0+6BLbBVr1ppOnxIBLwjYXOPXn38DrgAeFVS+30q8F0hdhZGEL/yM5AAMBWCrinFzpx4CMGxyGUjnPbTv4iR/Vlo/52v6BsBvdQVd570A6B0Oo+6esKON0xDorOP+UXFqH9kiH5D2tPnyp4v0zMY/56sICiZC2xI6RX1+z2xQu4LU4/ZsqDM2941+bPY1pXm8K+DM2vZoaKaOaX2cq9tcf+3uxwRFjmm21crzpTSq36uTrPc6tz6vGjP96DuztC/FHuzL4/c32ccA2jE8s+DOBFmsiwlbpQoMHVO88jOn5w96Fa7IXR6SGpcppGXchUqHDpY7Z6cwvVmnm0125rnSOwJetkF9DYiQHR543bxudT5pxmuMiq+vwleIDDlMpz6fRo4YQJg4gqJYqpsFuinODTdwZLHAMCX6G1Twwx1D7GGWNb8XiTvjfimdHW09Ezol2du/ZtfwpYR3Tbx6nruEz20LramnWFM8kFu/bqD8u3fWZ33eB8Y7GfFhZeBdA+bMiY50u38EPeR0yJziWqySx0f2dsVtSONDO8l++J+fgL+/xJN//x0f/ufnhcLtapnj+uxoHPVYSSt+0DRP3+aw2Y5UKY+405LnERf2096QaopE/bGXcKPjmZs8qmdOXkje2qBRevfiVc+J8kHSntK7Ka/nr6rK760U7dWVq/e9jc9jphqz1vHzvsug1iMXZZ7KDko2FtMs61KcGISIMAJ8JThcDr2Sil41bozANMKOqDII0wYAEeIVgZ5e4+rlU8GbYEzbSQwcFMcEEi+iQcudWtvKY+ulLTZ+jFnVCkhn/ZufZ/8Dnp+AjifX3lwZOrk2L/JuF+oZOkK24Ot833QO2Ks+GLN3My4Uph5DBcVm/LhCVWmUY/ZoWYzhgbnl9+C2+PjpDBToF7rQhQ6n+9no+hh2x4qaDh+gAF3d/blQ+hUvcthCUUt67ziBKIBoAA0Cilitc6OB5sgduRAnoBL19F9ggHkCYhTm0tyzD4QQCWx3NnNwslQ5yRhJBXocVZYaIac9nfA1uZ50340i8vPF9uwzt0V7pV34U+QyhY7a65MQwY3JxARkRqFpXz8+m6afYdCq8c7+PaFUmpviPLj4XpFu+VCZ/lpLi2y554C/j5oE0SqG1N9cCKg7TKamZepzc+XqckbyR+TmVVk496WbfvnZykht3uhhhWBhCPjuG9C7G+CdPOeJ1RX7JIp1688AsTq/pjxfQXoHOpUu28O1WKePLGvBFNU7APLvZHVuBa8YWVOc/wZRZLxuqp3vQH9IZzwAZgXszzrPmqgMPG/7lSvGslAiPAOywqtOjqUvzk5pfiKaO5yzPoH5x2ua7NPdVo6jo7rsITlYKj4eE5llRzq6ZScmrTlZnyXhaI2v6r0q48Zm17F9LfnWi2kN6nqAIkvP963bewGI55YzIdn0Uaz1CevoHq5fOSL9JgAcJB6z4OSbD7/DTkCRE6huFSeHicVI3RTpxQFUJIFr6r/CW4309ynOm1zosdAes+QiDLzQgxNnYf0hsdnfZXwoOWydfu6QL/z8Bh/wBk//zz/x7vWPwJ9HFuFCFzqGyB+WFPzW5QqT7KZ+V8kUK7HEKcAXeznJ3GE+X05v7U1LgVfmP/eiVvbP1XUHH50t68u1g6j8nepv7uFTd5hcSNpfLN8Z48QYgniA4iA9i4lFUDuJXDViwoQRhAGgCVAPiuFqg6vPX2IMV7jdbEBv32O8+SCyXQKIAsKGE76UorCmifUYwR8s8crXJlx+zu53t8mPxSfHyD0uuOgwusd2M+n+hR6eLgr0Cz1C6mz4tOMz/VhYeijrWrIg657oEIH4fVmBGa5c2xidU5iNoXP9u8owBav7mEgUVENQF+oBYaO/KYir+FRedkpIqEAvGhpzBRMlOlR5LpahEQHAcLVBGBjMpG7YgWlk1Y+LS0nmALlXCKKAZwV4pIo4L2A1AOmte02Zbvefp0bzbViP+RmJbMUINJbj+4zoTtCeJUw60X4uVon7MD67ThBbWhTgE66FF6lV3NrRpJ2uj+AqnAPV/pCEKsxJFeUckF2411bollCVbl4Hq7yKcufJWB6c7pTfW8fpb0onrF2iJthG/kyjW+fBqpHoF4K6TyuGxTMm5d5Ari3c9y8IuLoGfn8DPAmqhNY6vh+z8nyQ/GnLwIsBPKoEf9LGnCCuwgFgc53LkMJNwEahVpzctQ1I7VmfSuavWRT6zyDlemVVoeITN512ORd6htwW9Z3sb+SD9DAI+8MDnOfHovcIhp5Id/kkhcqK8j3oenUMG6Rxjy7+3Prk35/r4DoV7Vu//RBhs4YePObuU7LRKWNjFTMfdGeSzRhzz6gJcBBxpQynYr7pQsFy77a8cocim7lVtX2jKOf8LAVXF+WKuBpDz7RPub20wH65DNxogvvt02yPvbKn8q9IUuFyfsd5jdUDW2zvC6yheZinEMM7Zj3uMXDId6Ob23swVGmOZG2e1vSEnR1ufoNO+x8xXx5yX+DZXqvC3X0ZVlNvXTiIjtzTlqFCk1XJX+1M4rzp0Harlp1Pi05R8SMG7AmiHlQDAkywUvKt3R8dYrz7fz8C338NbH4Hft2zdCfa4z9VOul0pWocdMOcMsP5MuykZLVsMhiXhP7fkU5l/t9CJmxS8TfVfpCwO3fkXjvKXIZf0WPOWCPz+HXsSniTsG2FoetydOGjxenh7yZwKc8p5E1u/BiuS1WissjV+1pWaXkwA3GMoHEEExACaTeKh0SMDrfzhMgBE43ion0QQ42rYcDm6TUIASaqxe0I3sp1QQMRhjAgckQ0t/ZQzOkL5JeyPsAu6+NlEcdQAArh91K6xVD7ZDfz+6G7xkteBrZA9pZ82HORv39CdFGgX+jxkwmhaOb3bLxeOn052mVb2pP2sZJLAjgHaB2IZBPYJeX5ANoMoKsBYbOR3wMBITjMwfmkoyka04MIsruBIAI8jiOmaQKpAjwwIxBw/eQam7ABT8A0RUzbCMKEcTvlO82ZkG4MT8/YASoTkiL/pd9OEOgFgBamALsr2twrCD3o3Zu6N3F/XNRlGlz7QZkT585rvi+oRDVdV17+C5UMGyleTopxCUNEyRMCOSv0FLZmsuo5tOC1wGT2XESd73Ey6z22OnAJ5Gz9rA+KWH5+zKdSr2QuLXi3eC4NzxMX7UvCNFubfP818OENsAXoKQFbPaAwjqL4fqltFih7sHgZgA9RXcfqvQ43+v5qcGVlwDxPbCfgaoO0NiTL81x2aXbXdoDcoQ5kl/DdZqE8bh6ainFDwFPHKXvleWGRTvlcigkpijmp/TU7RNzgrT8/ZrKxfHgCJyvK46Z7bofKImPPyKcsyWmot38uFbO3Z86lcxR5aZPlUW4ezFF/Cm6jdDCsk87cVEt7WY3f7FmsBIgLa3XCayjxW3033VL8UxND9p/n1bO0Jrv12pZ7+x2Qrygi5PVK13gauEiT7Ysq0QWTc8YS6c5z9wc45Tly+q4gRxh5XuhRUYff3LVF0oowj4GOHeAfSzs8Jjqyz+rzVvvmR9X2uBfZPPvP78BXwLP/+idu/t+PWrCVhTmw/oV+6xOkY6u+V7Ofy8ZJKDfySm7ixSr+vnEfIPHKhQV4v4JUee2bO8TdMxjZ7xpCV3gT01TK81KgUcXt/G4QbDNhvDzEZ7EDWNbVMrmStmMh+jK5FQEU5E707C0IggWj4u1B02BK9k0qlcW0neSc5mYjaYIRYtQDmEEPWALMhEk9jxJY7k3fDKDNNQYKuAIj3t5i+0r6J04TBmzSnei5cgHJwxI5OY0fd7ll22bybMdcU3pR1VxY6rS7P6TorhC9KMzvgep+ujO85BJOX7uDr3hyb/DtghMbuijQD6ZjRtNDIhMuPrqKnsdEtfCtK4yj7tf2N5cblQc4d7lwVALInmsu9gvrjMRySc53FBX6ngVNhSmnij9XxsW231EACuICebNBGERxTpsNMOj952rFKHq7bL1CJG7e883OYjJDbCCZAZ7A0yR36kRRoDMADMAwEDbDRu6HBql7IW0HHtVFMzKgNJRoJyR9RQ3Mcv29mpNekOrbtkvN4Mlha+XlAcQz37thzxjMCRbptGGPeaDa7XnibopnfbesVR9YvIqhSxZmFtYpx83NOJkFul5TkA6CBHL4iipe0K91bt5Rp/8Mi7vhVzsG9MnqDNChq7e72lwgKqrszqpo4lXufm6kMlTchVdqWJstjbGmDXx8/XxO+Orrf+CPm9+BUcs8ItfjM9bDCRDm7gMDTweZ56OmZ/zVWwjDdXUtluVU1WEcgY24FOsrz30bOA6MWV2Qt8FsqckHO86RVq4DaZ5UChBfrTlr8pq53ZlXb+4/dPsdvl7SEUJIQIQOF1K6g3HQ98ZyqMTa4p4LdfB0bYVa49Q+ZM0PGtx+yj5RAZ65Q0/LuMdf8r4VlNR9VoG0pCxH+bvms3z0Hs9Re3axiKaATsH1XZFGzTGQ/l+jPl/WXj3R9iMjW6GHqj5sz1yaBndMMGmu3KMrWbR20PbyhxAmi6cK9Kb4rIp0OIt13xeWdm7qtbi0gM2HrAl3iX/vY/onDDZT95o37g+kw/PvYfFDKVWj4oVq3qgu8mPeFg8pu5u3nxydYk4d225HwIFipq5Jx01fWeLyvtvb4XK8hfXgT+Dm9mdc/fvv2P75S/Is1S0UfywT7YHo6LHWygZmp0CN685NtsMMJlG6esd+WbxSbObiYChBLXIYBO0aWM2JBMcKONvhv7pQsWq3dMDeMJ/Pc59JnL8XcKWHuz2GLfbEOss6nn7xBxaLeiBXL2GufO2aHUQg7uA46STFdCKPzd6OWGFwRCRCoAli3SBePYk5e0AaAGAEE2EKJoPaYAiMaWDgikBPNqDrK9CTDfh2BLaTVomTzItTcUgL4U3l63bq1QVJNmS/U52bOVTzStXCbCDa+q5xw+ra3R6d2fT8aMj3KXCHeKm7yKCdOGVZ7qPbq6X0MtYcXRToR9EFBD4o1aCBqgVmLvwi+RWyt1KcuM+p/lwqfE9g0VLLAB1SsF7CHi3NkFecp37phduzbARA3bUPmw1ocwUMQ3LdzkA66RgLweiQ9HiFIE0tRAly33k0JXoUN+6sZSdsEAKJHDNZsrO6Yp6SBbrcb0yi/wSDSYW2EzIoWlHFUsa5diBTfmbtfwKGp4cbPioi5LFaPHftaQGreWnjo00PuQ98vJ5CGAAo6J+L5/5kzOnVBP4+9KIcGee19WiLmeL2H3eeUzEO8ipQjpBC+d7gQRuT3HuZU59h6KgKBvT5CnnhGBPfBt8E4MmX+OOX34EnBIxwfc3ga71+YWC9Az2CPv8S/O5PYeCiZjoy8E7LOjwBOAJX+txoHIEwSFntWghjqJekFnav9xJz34zPM6B6vbH74HeQTCNKdW2UHb22OnRte3CF+Wno+O6fiXxhju6BDm3gM+sYPwZ7e2gddldaS+FoJuDKOZBchKdTXRChnY13B2tlm672qZSP64MaCtdeVdgFrMu/RgjDQKPQr8pQuO60bHak2R1FWtVmN24OM7lP8xxSuHh3kN+v5RbOwiTFuSY52YYOPZDK7mDqQn3qa0HqMl7ofikNwEP35xOWxae5qzgfByy40IX2ouPOULrIb4Ht21+BvxPo82/AP/y2EGfXon6hB6XFrjkzBkF1i71RlUpKWSZRlD6JLRTjLE0GUkBTx23ClWWbb0tXkipMLR1ZEhX4z9QOVBlAEPJh6TXTLgE4VyCg5LnJ/a6NQ4BkbFQVwoV175iAqPnZAU0yb54MnqLIVkU4INgxErCJMADPiECYgHGSgxNEmHjCB0wiHt4QcB2AJ1dyNd8w6W2dGhclG7DYVnW71J21q/Pcc0Ybjlw/NnGK9OrE69+XNfZkdF/LXmcu9ZnFsjBntCJ/cnRRoB9EH9Hi1FgerKBzqn4BJGzjrzbp1QK69lkBuE6xUnXzqh/2Au3BeDxE/9TKqqRAXCiTF8AmknoWyjlNj0JQ63NRnPOgJwc5gqGugqoySSlIlFzRCVCH9C3r9SInpTiTBL99P2EaCYiMOEFct4+TALtYCk2DyRtZ7+ixU66zVW8bZTd4Xtu55ATB90xr15JdirADFV47a9wbkw0jQ82rBHgLAb5nBpDHfj3+AffMr01ega5h9DAGg8TanCDuqZxi3fN7jfJ8hilLdfDh2BLot1oG8ho4MS36LDFGVfpEpQW6l9JXh3tnybJ0Saa7+9jxtE39q7q8BPDiS+D2Bvj1jSjPt6zxAmjD4DBK2CcAbiFu3F+8yMrzicWq7jVnV7LDlVTmCmKpbjRN2oeQdWea8rsdTJXUU70K1AqMs7SiVjI3vwsu53tUjM1kQchVgD3rmPaf6lmNCR6U8zhckFh6ozkm695CUS+KZzK+7oH6VuPHpVOkSYf6gblnWsJq+8TfBWtn99JOAulQ5gKgZJ0blRARkcUVOgC263sEOIIpAlAvIRxlLwaQvJ2YS0fLIH2aEtg/cx5GGuxFMAv4hC2q1736dNcp3QdlurrNz+2PZSLzPyUeVwJOnx7UjTvn8pigsy6fjm+Kit+1jU3JLq49OTUps9j+sIXz7QqIwdHgiuzL7veZAgBVfeW3klNb0Z2bVd5905yXjWPW0WOW4N58qve6St7RYI8LfTp0LAY8A2iUedI9SNfi7gt0+Mkij16j6ST7GeC//Y5n//Udbv77x5nSnkGjPWY6FqPusjwv8Fj7+OD+K3DFjjSa953SOpxl6lpRHuf1vUWKiklMqFCUKY9NfzFdOmTZsEq7ZFfNlxnKMhX3pJplFd9a91FhKEGVzACt56DFIol8KV8pB5SnJFkwZjrFXe+ryM/do5QeIbd1gnwMnuQ3hSyzjcyiLE+ehjRuAGhSrwIBmCJnI4UYgCkihglj2IJBGIgRrjd48vwpxm1E3EbQrXxKATlDeV8v305Fp3DRHFmO5tphqZHrJTSllfsxBZkZf2XeHcx+of2pt0bVfMWdtq8bc43HpH7wByE/9j9xuijQL7QfnYNMtd6jGqSkq1xTTlpX9vus32pAfAY741wReorzOt7c7zkhjEcOqjQMIYBCEKvzIYBJLMOnQppnFERg5wEeq5ATQdwAaVbEEJfMUZXio5iNT8R4x5MI/fRfHBk8xuxGUutACraJWdKZYipHrpNU/vDhVSNj/93qad9rAe6FZtcDqgOVAbnbY51nhfW4f1alW/wmteai0sLcK8opK8/Ze3fYYyDNjoR6zWyetWGNh2iYiCZtcsJ2ysJ0L4CvOYmesqBOvuZt6vzZNc5L4Nsv/olfP/wGfIBannPugyGCA8kC8FkA3kTgWRDr9HdvhIGzcpse/NkT4P0EXGtet/piu0U6AGF3p9s60AhoF+bmCwCvtf1qge+5KMw9Pd8dJNENynvQVemSrB19s/SaaAPpG+vzHpP7rhogjTLdDdzHuEQePQQ+YUEm1YPsXjM/Iu+HLnf7Nf1u5lqnnN3h1lvcT0BueLNhPm/lYsruciPS8E5YSADSb7dm1K7HC4W6L4RhTI9lNSXGOgvAYqq2jS96735CzY4zpyQ0eSZzm5ZF8TJU/z0A9RrMfl21yupXmvRL5GRgT2mLdG3q8k2G+DNjyITmEsZhCK6ar67ThQ6ns9s+aHmJfMjl80LnS2c3jvekg8q/kp+tX9X7UG8/+QW4+fJHPPn33/Dhwy3wy1+d9E7Q6Je5fHra2S1HLKILh/QPJrvOhbiw2E3iyJo3TAH0QapOT5upOAYt373rsNUaHr2RWezcvJpMys8mrL1XPFV4M3L5JGClMicQCKGCdK0MUwBjp1weTnNuq3yvvHgIlWbnbEwRWDA61ItnoIyn/VU9ahxBQXAeKbTnyFneQqpAH7YADyAiDFcDrl48xXZk3G4jIm4Rxy1AgnnTHe2FLLtTNwflyzbUL1Q/m6GZ7k6PfH/N5emf1276L+vj3dGdtK+TWTWysDrDSwefC10U6BdapDl5yoNYvhWn3CqawxHA8qY4n9mKTPakHiPSEY6lfbNjmd3QjMLptOQyoU4m3jqIFsIUv7HwvhLYBtK7zkNSMkYwIkPdtXvwoJbqCAgUwMSIMSrAcsFYletRZaT2N7G6ZQeACJ62YJhlUsiKtOjRjVjcRAYoRvAU5S51EJJFU6qW70cvuC3buMC6zX5Zg+dmYDkQe5zAvtnD5/buus/rsTsXZw+e4VBq3CH57535tz5vQjtu3Ti0+W3W5PV8JyRr8+IvCaVJ40KVvM7yvGjvLKDmVetypz8IyCbjbr3U78Lw6OEPYmF4WL+ne5qMe6L829aEqO+CMb0+4wVOocf0+bhe6E86j4iAZ9KOX37+d/z6529SLwZwq+0NAq4YoC2wIXHZ/nrC8PIrTG/+kHpFLU+EfL9h4Om1lP+aUFggRuUEC+X5uB7nEsCqiOY3QPfou46F1GJUvL0/MoU5Q5Th5kp3jfW5V5674bKKDK0OECU6kOefpXNTPcfM7/R8Zd4np2OZIDf2Dsp7/eOPj5YrWgvADhGY1c/Eq4RqAw+h++CXe4cfYY/cYrNrnMxhva4HjU6CDZbYkV+HCg9G7uCkKK5F6ibbrcwjsw3P0ex7q2SnyrrcPP2IzMvmZZ6fXi4n7SiZpEdeVka59DmDqi0aWYqk53fRujX8R0NFmlUgG683kHXfr9nVlt8V6qkwSJIxDM5JKErMhYCUNQxFF98Oq3bm4fLQ0Pbfc+40PG8dv7lm5D4m5z3Q6i3JsN0d5H+oXKGcQK2sIM3r8n3mb47djx8pfTJ7fo8esvJHjjdyC/CqavQ2jk6Qude9PNJaX738C/gw/gp88TU++6/v8P71f4A/ynCf4Ew7C9rZ7rP93uFH98qYd6/ts+/nGF0vb8jzoPAeSNkTo/1zwrGZ9Eo4ZNtGYVw8t+e79qLygUvXZBa5PWuL9uLXXJ8UludlvdNjyuVIdU+ymvkK2LQmrXy+U77iEbiMlyMLLubITnkOiGET5/oy52suVVRKQe62j3pHOqtoJaoC3eC5ClxBILDKpChE8R6IUQyrKIA4YCDC5noAnmzAno0oMAAAIABJREFUn13hdjsiDhCsGaScVvDkAdBjB/9lbir48VHwMJwb1OqM6n3VhGl8GG9Q4+rUhW3cI+/mQFuxT5h6e5xv95NnhravUeVfSgHvjXYN30+RLgr0C+1F/oD/2VLavHoA6UDqAYV9aR8Bwap2ngOW90T+FKTVrVZWknsP7K5UT/ERVHk+BCAEOXEIxmQuM6PlEUBqqR4oYEMDxjhinKacr7ofIgPGkpgI7NIpRqjwzu4u1vuMoUp0pnwfssPizKaoj3qvI8t9yjv63AvouyLCLt9C1WeRIDwzcDDVfTY7r+o41bisy1/z8XVydz2mF5qucOG0FDmN69C+JgXA5Myzgm8TnScBAA153tgzuDGj5eFQMkuzZeu973VXt+5AviMWaOeipaVfaqDHUzVW3EnmwDLO9cR46R53vkMSs1RVxjM4BCQ5PyGAn0WZps9f4s+ffweuGdhSzm9DwLAFaAI+I7FIf88YXnyF6a8/ZM5OmgsDmALwDsBwnd232/zaqov2adTDEEF/T7m8nfL3nvDb+jXlirm24fLn/dALAG9m3j0D8MthyQovogx1TygxNxU3yB4BmjjU/94L97EoPy50D3QY09oehHyENLtfrIi3Yys9irrz2wsYPNcfxcUjyB3kknAEFoEd+XVIf+e7eTrYhbNyOOWjaTjBW5IfE8R6xmErdj936TjmsRO76rrE1wxZvwUX2w33w/mwdt7O3tmaPADk8jcrc4DdHqrx7WAJaThGPqCXysYpOgDgGUDVftQL9lin2/mRG0hL8/bcFdGLxTvzss/SWuZ6Lu5DChE+ZTpyvNVr/cq0F33g0cz3NeE93QC4+R3v/w58/fn3+H34C/jtbb+o+9BjnJ6noruYpo996hfYS7FULbsgILICCz8tCIoDXcAeAEtLpF43Y+l4POhkOwxWrGfYs0q2FJzM5D1DS7Ir5OwsfVkiqPtuF+9bwL0Qspe4hDVb2USKa4cWnAW6lcekQtG3n3lTt1BECDGCA8BR0oscgcAIap1OUe5Hp8gIUT5pFCV65Igp3gIUQAi4oiuEzTU2nw3gZ1eYbrfYvvsg5RsBBPEqSiAEosI4vqFiye214bGTysv+NI8OS5PLUD07Zlt5FAqee6Z7hYW+77kaYzPrE4BLpz0MXRToF+pSq8eUBw86TWetyFypio2E2mf70po7TdZQAlQ70lkSti6d0OxRA5BOhJaLdiVXtyLzrOlJd95w8bpIq5e+5TEMoBAyKKVsbSNKR5VOkijY8/09DJ5YldmamFqng0WQmvR+E4vwb0K+u5yh4Ta5LhzcdxPyOaGpFzJR6Nava9HGnR/FSdEKPRXMs/ue0j5ypjbFdunvPElc/67K1hXWrinDempq35Sp86JQWi8UyCu8i3j2R/lHGrN1PP0MlMeJhQsuP2u6or9nKlO/nvXYsdCwRRo7wnlwR6TKiaivSYsv8yTP1zmhvmsvK7tOKXKMWNZdc0ouldTeffEtePsX8OY18GQD3LrMNgSEURimpy+Am9fi1v35S7E8H9BRnrNYnnuBfmS5R32KwDhKHw6bSnneq2efivUsVTTVzDVT/Xtd+kfRC/f5mX5/B7HyP1IalgQShQJKKVSVS32jdEPAyx3tsbRePbTy/NC+u/BKp6MVBxo9ntg/eSo+H5zqE+2ddb5XVvZx1g7AHhZv3nX232Y/c1YhexNXOEo3FZY9hfR+dC4Wd8obCnP2LpJTgCiHXVoZMKZnNcBJ5U9XrevYgLm0RLsmLI2b2ooWst+W1kzs3lm0mq/oXFLDzRfxMPKC8r7fW/4b+Gn7Nuu2ySqotNdyCJaDtbVGVCU7m/V59O1rHxKmRMmO7ziS9rI8v+u9pMNe7RV+De1Mc+X8P4e1bq0lutGp+PwHoVOU/THW+7FTb8FfS8ZjzvV9nXb+zTBWk4q3Ja/p8uluDivKzgB+Bn7/9kd8/eJ7vHr6AuNfvwCv+SAsVZTqwDXm2HwflipcdJLkZtLc9fsQmmv6U+0XhgsIcpWizo+Ct+7JRHo4hlDILaqZUobr/0jha4v4nEqeQ5R44U45ZpunLh2XH9q/qXpzMp1K5pybKHtRJBY3+QnVFkuAXwvI5a/4LQAxRpXhOhzvIbIreiRGmMTbIk9anpAxcrp8iQFMomSnKSKQHIQNcQImxjSMiCBMCNgOEwZiUBzlDvUrQngyiKh3HGF3qwdSB4Ie33peZckLbqpXJXOwNHpjDJ3ntZw3xXcBi+edAh3ryecinFAy/l1/dniuE2bT9mVx9UL1LtFpStM1dkcr/6jfp/XgE6SLAv1Ce9F5zpMFQf7J+MJjmB2jj41JVeZql5Bv0WUQCkFprZQkCqBACGFAVjRCXAr5zT6EbAEKyS5ylPvIR05pizuh7I6dJ1aX6yq883cdE0G0NopizeI8fcK5cq82OnXNTQ601m6aijbaReqms23rmbb34PQgcjv6ju57VDQ3VPdRngfjavKYykryTnok45iLcCGnZYc/CJWlellgzxD1iBMzcyBRnfdi4PZRIFDUNkEuaWaYbB52xtQCM5Hup7I0LCCX/AyB8O2//4lfPvwKvrkF6Ar4oPP6egCGD5L3FYCr58CbV8DzFwC/A25eGfeW16wI4IZAT690zsdchC3k/e1Wua6NKNJjRLMW9Cu2TC/18/V+0U5GzyCN+vKlHEQAsvIcEGXKmxMsCqZoqhnEmq7107tvt3KYS/kb9KmnRH9wQdpD53+hu1L0nJ3SPNGBGLZ7yHFXnDXv7qF9PA6yNSb9RXAkAFH2zgDIgUlfNk7rfiJCUt5K2u7EZXGA0WHfar9LxjzeSskC+Gd7NlGpIOBZmenOdOYApF3T8bzz2keZJA2y8rClKBibiUGIGT+PXApkJ4fHzRyIkdvcHVIwayc5FOEKc7Qry5X04HvJmdCDL3d7FOBj4mnmwfPKuA/ecZ8onWIQzvT9Tk8Qrt9nu3+JF54TMHSe/Qr8/uUPePLib7j++jvc0A9A52r0C90jPaYpv3dZMw7IrJ/hMP1MWIMU92FmSLvDjd2CeXBZxTSZHXP3fR0/u5s/ETFXhheW1cJvRlLaSalNiW7Kc9YbddiFL2sEDcfqZZCdxpvTIQZu21uhNgOIg8RjUixoHguDoFqBgzF5At0gIoSIYdR2pAmYbgEwJhC2NILCiGEKCAOSAp2nKHlowQMYgy+WdZHnWbg7UMpG6L1eu9wnOd7MwPdl8p/28hgr8o8KFz12Mnl/T554Yrr0+UF0UaAfRYeikMczWpu7HGHCo4cpjxRiYWNZ+lzcHe66QqZwu+NsgPvpG29VC3T6hKuvNWhbTjsnKwrvUklJpRITUAVkAIHUW6coz+MYRakVBlXsEQINdq4MYCBGZ6lugjoigAeQoLiySRk5nB9k6ash8ly+FpdXyHGOmvsvO8ogX4xT9X2dXgJrewqpijRMMHwPA/TYedY7qJCYEZW2k41PG5uUhesFV9GZK4TS+jzApdHhSIA0pHhGiU7gUmbsLYa4CNhJvP3ZUG/Zd3kQCBTEs0MtlisYwx38R+vZwWXuOWPHwzEA+udX+PXVz8CWQdiAbxnYjsCzAIQPEuopiWD+7Wtcff41trd/ivA+ws1piJL2XQCeivcJAkt/TZyvcN3e5oM70yjc31zFnmPdHeGAKs9JlOc7+qR0kXZisqq8UG3+j6+Bb+8ikwU84S1lre8HAL8jMfqzruU/VuoJRe6CHg9MPYruYu6crxJ9Pc17naLiYz6BJsG5jJbj+edEByhGq/2YbWtRIMfqOSX7/0Qb2Arg1yru/zGq7yUQcjJKTbJq58LK5bjx42uTvX20gUwgWoxXf/C1TETW3Oe+/FW6RVNUa7y32lcLc7L9XK9Z4aQ0tzA5rOzfPktG0QV3TXeJX23daLKs8jyjZSWvEw+4YdSYtjanmfN+laKdUYPuTX59OpQec/0fI52qz+bS6ckJ8qD3HBrnhwv5+J/s0nCp14pC/1rvRR++/AbPv/web/l/gVdz+V3o7mkGw81itnNgBjplSDI36m2agCmlG7kIo707p5Ja9MRsjTcq6r73ZTZLeJFNlvsQufZlpmbKzkLd3ZMWSAo4ck/cnKcioU7akOuGsrRUPpNlvmsDJwvLmE/DkEHtmNyilwdQkZcyYj3UylmxTXrQcnBFTJ6hcr+FoBboBAzECCGq4yLGhC1uEXGNDYgG0BAwXG/A2xHRrg8yYxePedl9Nm1byi1mxZsNBtnxO9eyztSVSRuV6pfQpf+wfeVyFlSpONhcv0M5l0+ToSWs+dYDa0FGdk90jCe+j5UuCvQLXei+6KPjURMKXA5WyyR76TjlIZmglAAEkjtv7L3/ToApzgGSu3UiAI6Y4gTeRnGxPLErqtxxk4SWDHUTGbOATjczAoPMEhUVuCiEdQTRgNo9S1q+XQK92iXPLppTnnfDrgu2F3WB5COiuabb2aZuvKW+hoy7YGO2ZFS4it4cNPHK8oB8IMTGd5d2NP6S1UEvybXrUeO6tJ8I6dzt8WWtC14u003Cfcd4FcpzE5JzVQYCvgT4sy+Av/4C30RgI9cs0O0W/JyBMMndWc++RHz/F7CN+Oyrv+H9219UIK/rAUMV6QTgGngqqwCBgMAguwri3S3CFBFpkMrGEXgSxdV7TS9YlA1rlecvtG4PpRQ2a24G8PnL/PxHtUL/9UT52FBtmEDkpbSJQ+1YXEtz8R614PxCFzozqmSQJ0nv1Gmo9bn4flSTF/NcJAGc4Czjv+K+kGSFwsj3pldCjhQOWehlokcTcrE/9Ead+Et4YBedAqwtYIq3mO8fq/dTt6czxGsJM/DM2ov1Q9sxS1irTw0bNV/f/obbPT64rOt3SzstXB8hPdohk5Uwh8V9tBV/eHqwKUDVZ8Nwtc9SjBk+9a7pLTC9/Q1vv2V8+9W/8OuLD8APp2IoLnT39IBrfo9PBFAoncoISJrbruyDimAprZXVW6ugzIcW9W50f8CrUn7OJbmzSLU8pqhP9duU4amqvs416NJY7iAt2e8FPjzDXi/Poaw0n6uY4jsm9QxlhybV8ryx5LdrfZgBiiBmhMgiPgiiSAdHhfsTttMWNDzBMAyggbB5MiC+D5J+MtqSNNPyuWvI39GUWJVkd+m/7OWPl3od6vuT3bOPDHs/UnpgBfplsj8MzU3Q/ChvpSeeqL3k6iIsDYuedgZwwq3OIlRY8c6hlDVjcY/x2q3Ticf7vl2zVvnQU2gUR+3cny3mvap5YVajLDZFud0facpEdXUdSKzGrwZMTzagzUZ+DwN42IBh94sTiPU8NUe9g3gEjSM4TnKHcQwgJgQMCCAEMGKcEOOION2Cpy0Qb5H9MkeEKHVmRMgpVt8uDmh6QZ5X+nnBH+weIs7PTNjnT7L6MUIo00nP7CFVQl+U8cilW5S5/7Mh71rZh2+E0T5vxxws5mF1XJgPtVup2QRnMvFjrxirrn2LU3/UxrfnPr63iFX+pOBBhMNQd+2Wv/ZVGtf6O1By9V9Yns9a6uV2ZV93P9aKuPa+BlwzC+7ecjjP9BFYbo5KTFZitMyFlzFFlKKUZBZnfn6Y9VkzpiQMff938O3voDe/g3ENbAg8TWJ5/gLSZgMjPP0S8c3vwARcf/EN3v/xs5Rp1DAI0k5xAJITL5bvgYEpIiICN1vxbkEkz8cRiJNTnrtKvUDfzXlvryHku8bfYGGf6gjKenz/PgrjXtgbkvvhd1K9rrsvxLNB83u/3rkAya0ei/v2Lm54zPix12kHpHHy+HfdprYu9x/vJI85ingrgGW97lCxijqZWr8w3Euzkz6nA1V1/LASZ56CmslWfjavqXxV72lrxkXjOcXvlW7vLcJT+bgIkvdD9uX3aaU1I1pGKMETIbtl19qRPksWMOZKPOQ1KQ0xlyZrfPv0YzCtdR4b2ldb59x6Z8I/Crk6VTsLBOudJLKm2NUnMUPUVLY5DFXOhaIeTdgFcpZHBAbdkJahwsU3ADiI5fnTCH7rLTpYFO9p7wdSu7xzGCe5x3frAfk4c3OgV+563q/Apj3+xnVx2R4zz3rvidplojFNmynbMdYhaQzOYYd+mY7exk5Gc+O7QzU2efR0aH0+tna4Zzp4O1+7ju7InOox75i4QhZGxc9itZ+BSfaNm3D9sq22UPsF+PXbH/Dis+/x5rtvgf/8Nh+2m1YHS+QIy3kfzTP4/fiQubOU/66y8XHwPOEwTWspy0aOeuw6QZ01d0dllniEGQvR2RQ5ZnxFgN3tbbCMzVLd+E6fsN3DXeRA+v9yHSR5dryGa0+HsVcrz+e6wdWtxNRz3AyVMMq+eA9/BEysOI5cvUNAgCjEuZA5UdlOdi+S4eNA4IkLUVcqocdPQV9Oxh8IficCaNLfCRZavIAYxbl7JAIisMGVGFJNEdM0AtOEGAjjFWGDAVdXV6BnYmAV30+Y3o+IHDCCEEGSV9327PpccW3uWcdzdJvcBpv73Vgau7zqvBfldm4+0Hyvr6Je8R8FTLiDQtZspp48odpTGaFv9LE39fiFXYu+53cPJMciZ1675AlTKXoeEwqeZ498F9ez86cTKNCXwMy500OV+4zbi6rP2XAH1GHXxEp5z0oHkO7PXcqkKZtbArijdNyDasHobJXmBCBHAfglRLlMVutijZ91C0jl72ZMcJ72c/U0RVkCo1QF0xOCpPfZkOvbMIgV6RDA1xuwKdApgLEBSP8QEJLyfBKB2xRFqTWNCNMWka+AOCBwwECmQAemuEUct+Dpg9yVwyNAI4CIAFbX7QwOm6QkzQJUz1T4O4/d884wDUngZPcqRZeWCtd9H9QbpwHR9DuC9O7sDIKrjD2j0eWzF+aaj1CPjeLFnmN6Z3ACUfbXlMFg7SJ7BqyawtUpu0m9FLAdOpitD/K9nPUYLzwflKWQ95wPfhSW5nDu2kOrRB9cmaIrU+8wkM+V0XnfKVh9crcXtvt75rlbHrJLMMcako51UvttisAEFJwToRzfxAg6t1gZE8SYheh1iZgRvv87+N0voC0D8Qr4MIE/3ALPAH7K0pZXAK4/R3z1hyyCzz/H7V+/Sf63WhDSNooDgI0oxlmZRoqqw4hyr3rUFTSQuG1/NmUlOUlLpMWiUZ7TzHelNVbn9f4xZ/I/G3/h3XP3fc1WQ9VLLdu8MIALoF4kYnGK99xOecvAz8lHSafEAY+MukvRWixDaXoV8bqKqM6D0HteMopLWS/ud24scr+Su3I4IS1O2GVqcN9OZkCbpYrYYN5OOtQJ12AT3SubAgIJpySQ5q/PyekQyK3pWdiVddus1i5VGSAHL2ti2/Fq3FWXPcnUTLJlGZLq/CPscF2qoq2jLNcLdedGGoudJvFt0wg5ZrBE+uqx7fyMaKGJtSe7MOLFyVBCRgiKHAgAIvDOJjRlRftrLUsB96yBff8S+ocXIuo1YVYH7YXGKbCLkIpNxescXcfNnBK9yNSFmaNiLi2E6ZEdQjyUbAodknnBAx1TgEOozneOt7XXFZ90bLEfNX3SlX/EtAbzuOfN3rYu/X1n5C7rXGYAvwBvvvgPPvv8Hxj+63u8/eM/suavSR8L1rprDygeBb8XMGdZmM7DLgBdV6Z9+LxufFqxthudeE2o8cphCWRiFDjJh2hzsaP9QkGvhLRxmt6Z3KHut6nCIS6HjGh64EJx8SAe8OR5v12bp7NzaKZfHE8sU13rlgxufPyypUxfzdD6G35C0LbhlGb6s/OnXGK+kgLStXaG5YLNX1JdJOtrY/RZDC2CGD6BAQwitQ0EhFHKLcUb1Huj1GSaxEV8CCIXHuIAmgjjNIK2AI8j4gBsI7B58hmurgMCPwFxwHt8wDhFTJEwRTXKiuQgpTyz7xnrGB/gXScxusZNbszKb25/96gaexkFW/zcgUmJf+hU87z1Es2FWYNd74rmyrTacHCJt3d56FpWdh2vb7tZ2sEUEM0EYRylvV9ca7j4JV+4WGPqQvHsjxXP96Vjh9qR5bi4cL9Qpgda9x4TtXfRzQgFz4zMPmc1NYG9sM5v2q3AsZ+Y2110k5Vf/qychrN7hYeN3KlM5v5Hwstp0qixVTg3ibt21j+Mk1ig40oAWFBLHzDY7kfX04nivj0Xz7ISuWoNcvyXZWFkLUy034JRl6RsCxt5kxvj/qza7pOW2mf/pDLY9AJMPybdOE4yeAUtyK7aU9j0jjJYJiBZmhfhqjhz9537IhXPK2RGcH2+gADuCsj6LGeKkU8Vi2CZG0auipSYVxe38O5QRuPvvkZ89bOcUr69kjl8eytK4AEyn59p4d7+BVxpu9/oxXuTFt6a9mYAnl1V1zjoO2KxPE9KkiBW53GSAM81zo1vjLquVH4t2vBM5m9yMz+zp7Vcfu9hl5gZeLYi4AbiFcCo1V3J/ecXesR0DNdSC7PW0pnMsQejc6h/Fjf2X59CCLG2KH5/goG9XLwC13oswjOfLt36uVfEzkt57558/WbfHVawVkbl8TqcoFUCpusjtR/Sobmut5nT0OXuvgtd6EKfHt3Xpron/QW8jz8hvPwGz776Djf0n4PvRb8s7Z8gKV4UWGVH9dhBmT6WqXFAOk45h4FCcANsGR/VivT7czhVlp3tsCi4nBzOClrETLX8SRs0zB/0KJPL+bUBUaXhsLY+TzJZ9ve2+bwpuXWPk3jmoQmNOJmjFn2aMMUIpoBNECXnEAZgs4Edep3GCVvaInAAj/KMCKBhAMcIxFGu9SzaxTKiVHxiKqTXJUtwQvllRbNLXWrXQ3lkl86c+Oqyzl7oQokuCvQLlXQOcraPgRrw9vANu/feN1uHnhRwpn7k35XK9mRQUucZAjAMCJsBNAxQb+ryH9tRALXcMQgTIzhO4r55HNWV+yQGpcMmnXg0BR1HVbRHvSed2SnRVdHdrZAJ+WYDdJ9nQNttoKYN0v2YM1m0Ge4aX6YsrIGhdcaanO5vDNfnFu6F0jA1pbcC+RAygDaFelKSOxfsFrdIw8dzynM7Ueitaa0QyZK3Rq0LzEqRRIcp8nQCacNi1zAcY8HmSXY2bCqTffdu2+uyfg3g+kvg1R/gNwMwkFzZME3iAt0O/j4PwMjAbQSutbS3modZwxvFAXh+pUp1lAwEMRC3rhxB1hWeUt0AiEvauVrWFpi9e213DPZZYUAdf60ixIdfsy51gvGqdccpz9fO51qJPuqzczlocKHj6C5kC4tjo8QdnwYt4bEzpruTO/XzSsIm24cZpSegXpHW7p+yaJYG5J21v6KzkVV18Ply0WthYrZOYi7f24FY6h046Pzc692MAH1v3HShx0u7+Jq9+J4LXeieaV++fGHpOutl7TUQX/+Gm3+8xNdffY/fn7wBfnFa9HMu/KnWmHOu47mTgjMGp0N5a5pzLRYgIjDFHvMLgBqFeRVdgtLMizumvlJ7WbBGZtjkld+VHJJS26QnRX5lviZMybIPBiFYHABAAFFUJbqF1T8rzATwwOCJQMRiHa7YmiFiGp5YjcMjMDAiBQQiDAOBMWAAYxpHxDjhdrsFT8DAAwICKBCGIWAywytG4c2ibDHf615YlBp5tn2XaPYwQkcM6MVTGjkHaq5sPKgwMy+46M6HZ1JW0AXr3SnV47Zo7rlx8pjGzwJdFOgXekDqzJ7uus0L7+6JdikevQXrudOSu9OO0Eyee8GfY9jm6r1Dnp3wmWm1idSdNQFDQBgGDMMGtBmADRBBGdCogFOgmIIo5qwQZ1O0A4MCoxDEdXuMEZFZFO3TVLmJ5mpIWn6u3dL7WoM+k4Y7uZrvQF9oGN9whGyp47OtE1Fle96U9F1wboQSjqUDgUSfgVgMc+TuWADJpsxr1w73suQC+mFqy28y5Xlw45VyWEK2Tk9Kcsph05933e5+N5bm8pkhei2+92shdaT7nfSaqupg6I2lPWmWEbXkGcKApXnZY+qQ3hVWaN4SjQH84wsgvgLe/iku2weWwy/TBH6p4QOAJwH8fhLl9jXJ51a1+BF5DjAAupa+GDWTQPnOdgLwbsxu24G8vgCiFH4L9JmoBToBf1Mkdcye0xUMzGVUP5KHzcys+7hYN1eUARBkunV5jhB3/Be60F6Tx9bAj4RjO4Z2YDL5rNtrJvIpce6R1s+7yIvq5CsloWvxyqxvklQOKD29MFCn1fyeC1PlR+TK5Z9Xgofe6bOOQK0rOa4hKlzd0u86Thmh6ZKmWlZ2bn4n95xWELcPkN/bF8vsMcA81ug3EmtRznDOnxADXOgEdOmPCz02oo9o0P70Gr9/+xovnn2PN/8IwE9/zgbt1Xi3zmhuE31MdGR/P8Yq70GNKMSee8ij+KfwCAk0Su6sJBZZDddu+2f54UoCc99tzqzwtpJPV2FKERBVzhApPU/YqoGNtCxGNBCbMHSJv1ktuQOJXDQSwbsB5SSrqfElwBMBqvRmzpBW7iOPYDAoKu4cCBQCNsMgLRIjxnFEnEaMkCs6r4YnGIYB9ISAKWLcjsjeDx33QOrGvRK7Eeq2MPmgFdg95s5nFex46gH/Pag4/bEjnUZA/ZEvMhc6LT1yCHNRoF/ocRAB6+/JfCBKCrb6Ie5mX1mLznZugjvS88rBqo4mc2wWwlkBrAOg9gfSu2zEdbsozwdsNhtgE8BBwJBck5OBid5qnesYWe4rckrxgICrTfYDTMyIccwK9HFySvdO3RvZKFdh3e9Wk1RGntV0OaF1o8CdETQ2hXRgt0iaiiDpBKovfxGul1Gv3FQ9d7/JZ3gAzbVjPdDWJG/jq6dY9j/9WARSX8iwD8pE6fs0Byj3mf8LHTfugdJ1BOmwSBgq7KkMGLeMGPwBDB9ryXo4FaEM01gO12PhAOJ6ArATnkdGO78KDi5/7SrPGfjnV8DNH/L73RWACNxO8vk5ZN4/IfAQgZtR2uUzEqvzieVerbr56DPHpGl7RJa+YQbeq/Lcz3ufyE1mREsuaYGI0LVAT6+X4+/Ud6+1ikh0+EBBAAAgAElEQVS/F7PLwXiuyO3DpLAofL3tyIABXFfPrqi0RN+itES/8GoX6lI9xi/jZZFq/DenRL8LaeARMGE1kV304zO09VyEcfmVSccMr1VrviurwBwV+Hn8W/MpRf3cvlZYjVhAt6ckvNZUKJfRZ7DmIMJe7d2zryrrVurNS2kgpy9u76z34NXK7TkcXGEFK/k+gpm7lHLPHbSe+32h+6VL+1/onGl2bfJ79OMau+T5bE+/AW/GHzA8/xpP/u93uPnv/8ym0dsGFve1h2wiL4PpPV8b3yr5qeLYo9bqjD0MqxW8tjVtkvuoUhmE6MRHXlRC5AwdKpFUSptYrdgPKHJR/P3qvNZ3pSfv8dAU5OwrXIlwfPvNu3Kv5Uwq/2B/SIHlQCUBrIZPqPIVUu+jBDnQEF3bEiPCruOM4AGIQ8QQAoJewRiIwNOEkQEeJ7kb/RrAcI1wFbAZNojbEeMHiBwoFUQGgBXf5HOc+Aqe6Z48Boqk0idljH9KOja5eqwudGnvIMCFPk3qWaI7+0Gh3jh5xPvZRYF+oXsknl9se0Km7rszIS8AmS2ff3dkJbyA6liBz4LOratMJ2TFn3vNQHVycynDquPtkVnrqtt2XInVOV0NoA2pMtKBKFVADRoVEenuc0yj3Euc7jcetEyiIOcIxGmLOI7g7ajKc3Zgqa5IJfSz774v7HcSENbCPL+D+O+rGu50VM+7VaCnUy7uPV8aUEcQz3y39P1p4G7etSKgbvc6rIUP+ZlXjCflOdxzrxTXuHZ/lIajQCB7rlbnrOlJN+R1QqLUY8ML8SUt9kdvd7T1/P1Ue1LRH+U4F36AtEyc50ijPPdrgYbvuWx3Anb6/lvwX78ArwFcXUmYKcrd4wNEyfqUhKF6JyewcUXAe1V+T8hlIAB0BYRB4gXObtgBSY8ZdPMhl4PkSzFlakXATnLr5zkzHHuXjRQoS6RGed6zNJzbv36HuOjvkcUfZ95f6BER7x5jB2OcKp63JMH5Trs7pxrfFe+o/X7P8GSZCkmeUqec61JCugYocfj6O3ovMyk0/P7LbWrtd67CeOFsHT9Jc0146MYrc7G26ouqLWpcTeXaW8Tt4YAEYHP8FeTLlO4297g4YWe/r+e9gFHCejBaYxaUSZ2U6jY9Fzq2KMdiizNqigtd6EJHkM7lc8Q8s0vuK8IU/8DNyy/x/P9+j7d//lDei/7glaG+LGINpk1hj8v+k6WeHGOhPbKF+ZycaD4ftggk2IyCgzcJXonHvGx5rvewk+Q55979XsnkVl38LLLUtlXNlTpQDmpuhvmuA/+iLHfYkgV+M4k8llT2RRqWoZ4BuCqGL0/Ufpk4LSQccvnEwl28jE6BEAKBEBBoQAgDaNiApy3AIv9lMDZBFOjjkw2m6QrT+xHMU+5vhsqJDai6dk3yQXs+Q3My2OZ5r7/mm7dVcPfWqH2o5gddp9esUSfKhR6KDu2Ee9xUz1n2eQBdFOifJK2YaI2p2wlH/Vz2c5YbqsA4a2r0crXy7oR0tMvLGeFjau+67AIQSr2eKv+KNOaEiE555MGsubQeVLm4EeV52AygMIBCAIcAccuT00oesgEBu6IZL+8zNwWljh1mFvft04Q4TdkCfVJrdVe8QlXGKMd+JQicU/q1bWBIqWxDeUTtu1OQP9yRhoxx1ZVAuAuwe/1Zl7VX9hPXpcuw9l66ynqlN9z3omiU26ixtgv5pLxXKhRzIiC5djd37GZlHmzO6CnlQcKSV65Dxpo/oN53stG2ZxKszzVF73dNa5dU7o0D++5npn/lheeSRvl+BZL6CkAg8JtfgfdX2YV3IOB6kgwnAM8I+DCKHmQTRCn+Lsr70SH/AUC4FkXJFhIuMWF6z9kUQe/GXLZqDosfgN67GepZcZoF+kt99trn4IKm//rvy3SrALv2hnoeVD9Tciu9l3iXeGBW9/b6uSu+z6NWor9CbqdzUnRc6Aypj7nIr9+fCqffq2baz+rnnTWqSOOO2qwDie6OynUse2j0+1C1+ia+w+HPYulfs+E6KVnCpS5oXmgTlk5Lon4xESfvozzvkUuzTMMnx+Vj7oTzSRZYl1GUp9j/27JYceqUuQ7Uvsj5+a5by6PetbXxIWP6lHvbo94nT9w3FwvzC50j1eNx3zm7k+X2+/yZjf1FDykMvAHw5k+8/dufeP7Vv/B2+AFIHt35sOqcdE2cA1crC7aTN1t638FvHzvNzRU7HJsDavA6/Ip+SdsEVziKMkixA40pq4wCE8ojKmBtK1Vb13mHWJDnyF4+TADCTBtQJwpV76p4CpzZZBj+mkgXX5qH1DihmhuKB/PZUcoh2Bo4pnOtdTzxEqhlMdltZQTFDMQ4gSZCDAHDQAg0gEhky0x2z7lgVBrkqs+r6w2mcQMeJ0wmBoqaoG+S3OEZ18/eI1G1ZZNONac9n5Da3CK6POYU5YTD17seVqeZenW9Yz0g7cJ6HzUW3GP/OWncTmrOEr2rRlySWT8yuijQL3QGtDCLzmmBrmknE3MmtOZEW8JN1Pk0JZ+T8C1u0D3AG6Cm4RkHEIlicRiAzQAaRHmOYQCC4ha7s9wYJ3MPAgbxJHcrjyN4uwW2W3XfHsVlTxjE+HyaEOOEGCN4GsHjNivPWe/dqUEMOiczF4WThgr7TeAauPPc5+3D7bm7WB/VAOxkdI8Dvrh7dIk6ZeiO9zVlddbkleKdbbw2fygsy2VMD6n9WZXpyX27pmnYlzQfY5jSMKwk9l1RfWMp1wm46zmAVYimJ7zuBFI+Mxmi14LtzPKyU6J35sY/vwC2fwpjdHOlCQZgeyuW528grtuvCfig8+5KGaL3xlS5om0APP0ceH0rv5PleQSg/cXi/t34omWixFTPvc7zmtp3n+v3V+jTDG/kky4fnCE9w7plrA5TK9FfIyvRHzngvtBdUYVbLtSnZguv16YaB+2bPq0X4Ng2exKqOXP/vH5SLziGFyLMnTu5/wtB0dy6nCSQMxKtap/IbkTlB7u9pNjxKTo9iBdY1Wl26rRUzl6QGra7LzVCKKrJ7lCZD9QTxuk7v+N3t4i5uB8TnVZudaELXehCZ0+rt/xfgLff/oBnL/+Jm6sb4JdXOYEHWzcvi/Y5ETW/akWqAokG5pL7rNBLZVxCLk4yWiiuVnTxGUmJ3qR7CtrDOlnwohp4dC2jrQ4qq4Ja1HvsXp4YyNFI3ZabPLZzaJl9o6Q0pPwxsrpWt/AiMEq94ZXUqRwuD0ayZCdAjCOU9yCSAwOsBlOj1oE2InfbDBtMw4RJr1AcpxEDBfAwgQJjcz1g2g6YtpNT4pPIkvWfdH+FYlM7V+NtDqZ78dcpB8pRPHAHxwO5Pn4sENqxUQS+0IV20CPfTi8K9AutozsTTLbgprnbr6MnenBqrHTOiHrHfpbKmRHiwic16fJSolT+ENxH5ftAQAjZZfuwAQ0bgMTFdQSrh3Uu+p4UYBEzeBoRpxE8jcB2ginEiQKCSjvF6nwEcxT37XbveVTluaXLTm5XgE5eN/a4+pxtFMp/BZCXP3ENdcTQWpirOy1KZy2QUuLus5m4c5FORHX6HQG37cheyV2sI9UYTMJ+H75WpFvg0jV7OoEbXNhgVuk5HAcCKIiy3JVLStoRIaf6cPqpo76tu1cc1M1T9/WiRta1XS9erQCofhPlZbvA1enAS52lsUqZi9CZgM2//obtXz8L8/LuWt7TAPAkiudXBHzBYpH+joV5ug7AbQS22nbR5iyJO/fPXgCvPuT7zeMWojgP8vtDlCsddD/i6KYRA3qcp2wzRmZonwO4mWvXiv7xjcT76bf5MAuTv2j5+hDFrinYpNvPqO7fOT5pcY2i6rOb0cz7Won+hoAXuk6+BPDmTsQTF3po6u5dc9KI6n2xl3boVMPlHDGf0ex6QvO/i+9LiaxMu+qPveLv27b1dpie23pIGqwvtZJt1iuwxfVmEYuLKFXZgUKb7D0UAQBC/mWWHK4o2dJcF9Mmviu733NqgWaRrq9jh4o9osqvghVUhLMgnPaHsiQrcHKVld8iyh7iMnwvXUZT/PnA90yNtcsMdj2Hsp6KzmFdnMU9dX9c6EJnRHNeBdceRGviLIzzcztkyA7J12X7lXHz+Y8IL79B+NffMf7PzxapDNfs/6cv5k66rDF3RwteN6nBeBalwhBJTFLxCSaLaeQehnNCNaU4Y7VmqmVPbEujYI5HmZXP+bG19/x1wpluwaydWqycDgPUAgAGTEldl6foj1QfVoyrzyKBEVUu5pvWHW9NWNe+Wzr6W63PLRgNcr0hBQJzBMcRUY22CJCrFEHYDBvwMGEaRkQCpjhi4oBJXcMPVwTaBPFmOHEW/Vj7sJdXVe3sPgqMx/69G5dzUP3QJeQka3sn8zQkuCpvPWdOkP2x1DV73uP9hfainToFR3tbpPf47TOiiwL9QsjKnvvKcNcsmXm+gy+4UyoQVKU5SFY7Zza7jXqnCIG2Dr1Preu6u859ACdwI+eix8CcWZ9vAnA1gDYbUBiAENSLDwMxpruiTchIIAQiBANQHFtrcgi8IQrgGDGOt5LWNMld6Rw7955XZZ91x6PEQHJPubMtOgLmpKA1wHmKsePG5S5LMj8euPq0V7Ng7D7H+dLuakGqwVkcbiHMz09yf6HzzBgB1z+E3Hd2r7lamTcK9VqJrwdDqBgThNq5eVv3pWe9vlgAwLuoZjq7kVtmjJnl6njHLxGXJ7PznOE0d4owAK7+9TfcvvpZrI4310iW55tbYMNyB/aXGvg9RDkeIMrzEbnbzPr8ioBpA7zaZrdfUOU5VHkOBsYRWYmhBU5zoGWsE5mL8hsgz79en1TPfvqtE+ZxEXvm2NMay/O3kEMHFr3XZL+XP+ktAS/2L+eFHjP11uzOeriX4ODQ/euRM9rdZanaK+vwa6t8FtDXBHYl9imXl/5emsRhzCAzO0l7m9sXinp29sVFzOUlZhUpvi0KrELKLHCzes3wIUU+6PTp/uP3cNnSuohSRU6uNLPQ+g5pHyuuC13oQhc6O6LiYzloj498ONolM2/oFRD5N8QXX+Cz//MPvP/rp3nPXWsyf6x0rzLaM6M99+ySN9W/xsvk6tREduMP9dV9kV5lv+PVMcwHIirki8mC3rBoLRf28JTqBxUZPk2ikl7jOjeApdsiwdUMkYmxhbW+cnkEbUstT3E9YFRZMksaYqYiMrUJDI4st/Rph4UwSFFoQBiuYNbw47jFB83bxNNhE8BgsLesmpDOAfTaurgfvXrVVQauGRqe9+iFP+XyXh8CStWgPGaIT5PXhU5Ix2wMD9eZ5MZXXpserDh700WB/qnTISdej6WF04RlWe4g74PrV8H+Oaud2dNNezA8h9LcScBk0drZ1Ov4leJ8XhG7pCQq20rghFMkBmRF4zCIBfpmAMKgQNWssBnMppAU699gUIgFzXAUhTibUlzLLBboAVOcMNq96JFV2c5ifZ4wwgKwNuA0+5yxDOx7YCq3s4FbolAKDqths0yU+6kQiC9Rkg73P+3QRde6rPds6fexVHMq9dzD/DpmxU2HSHz7EFqrcnmemR/yieQ/U5YnpblantvYLizYJV0mO9Gb741iNy9kXEc3jXxdl5Czp064XcOzCdsDyFx89BTtcjha5xlzGSYJx23uWhh9/7XM3e2HX0Q4srkCKAIcgCe3AtpHANcAJoAmiMt2ImAb8+0QJO8ZJDry7Ub7xQp6C7Aoz2WIMPjNtmTYSAuVGM1+k/FTDf+SgM8J+Ildn/cb+8vv/g6A8pV+RxMv/pwNTvWDTpiS3+2f0A+dNOo52YkHhrjhfw43Nzv0FYA/O/taivKI0PaF5mnOirl+1xxZzu93W3W4tftgeqjx1pO+LPys6sj5hQ9UhqX62hrG4vZT00EH7nIZeC5o1/3kErkx0m5Tml+5t2opYN6NPG5PLiUlokazjcs3kPs9t74mTNUpGLXlLvBl3Rc9/F7k1eM96r29Kq+PwhDhYUPuXnZU8eZ+p2dc/CTbVxLed+WrsYg7eLdI+47VXVZfpyDX5XdOp4bfj4h2GhddrI8u9IipuGM4P+3P+ebZeS0Mex2Ueg3g9V94/+1fePbVd7ih/+xQot/VvO60YbWvtWvMjvKs3md0Ezmvbrw/WmW17a+TqeRplEMU9sM7+seu+07FMGWPGQyke75dgh6mdFiWXCXq1GGB5sbKLIYpy5bc0KeCoSyo4VPDK+SweQJsPt/8jF19JFfXF0km4PIBwDwh3aeeMLSO8aio3MQqDhszo7j/nIkQgijRSTuGmBEhnkZHjRMGYBg2CGHAcHWFOI6Yxi3GKSKyuHIfAgGBMWwGRIqIo8Ol7sbPErtTnze1d759a7DdXaf92C37o/CMau1SsyLHUDFmOvxLKmLNHy4M9IekOTlU8/5+inN6oupzX6q8a947ORnArnVwjvd9ILoo0C90v7Qvw3omE6Wg+zhkcEpaU9xC4We/TbdBaEzQyX3vZtgT3mmC6rodwyBW6EHdXKteMbLdrwNFTwGm8CIFC8xRrM6nCZgmsWLxZWJLh8Vds+0RUZXpKgQUPMcZFBntGqcJOFAGE42UzLVnESlvGEQBR5G2KxEVBx9XbUZGvXBdV1FnNu5Tc1blag4RUBsujUf97qzFyYUnPdCRxy3JeExu2oOgcntuYVImkkfypFCPiaaJqeiPktXpzKtVjPke46A7Ziohdlsw+RpjZqYq5Tk3SvXMlFx9/y22r39CePYt4k8/A5uNpBMDcB3zYZcnAD5oZurZHR/8CWeIIp0AIADjNTBo2TdbsVLHoH+6wLzduiZ3ZS76hdFtwxsA/9Ax9LO5MptbD6HKc+DP//x8vntIp1+7CvDi+661kmbGFcQS3azKn+tvT3+gbNI3yPehX+jjp97a7sfSDuV5SWfK4N8H9fYZ/3nf7ZL2XNd3d1aEuX63XZVKAVDfvESjsEuut/bVe0hU/FoH0b28hoxGSTDmhGxF3hqx/l2kUdW5zmepvRkqaJ7BAw1W5uJ1GZzLMK7YjeW59UODM3YJVqrw5y4Nm+v3Cz0QXTrkQhc6e/oVuPnqP3j2pSrR/5oJN8dznGSaf6IY8qFoFtv3bLuXOpeTvM7LxpgWYhElfEreCt0iErIivYGD97ifzI33fVgek/l5S+MmDyzj46ZcLv8kjvJYkMAc5ECriZU1DzZcbu0cXXpeThEBBJExiZwtwgS+5t2I44RpK4UgGhCIcLW5wkQA1N37NE56xR+AsAFtAgINACJiZDCpfIsg8mdUuL5QlM80ek9EDNzrUFkm4zeczM83di2CZPe8Dn6hC33kdFGgX+gBaeVKexabTCXk23USsHl/f8LbvjCZ1mdP1OqCukI+F6hJew5AeGVkyJbogRR/csaB7NIiyriN9e6dSZVrclF6mXNkAWFxAuKkQIsTyCUwghO6eflpIQRdJAGZpALRrqumJNzstYm0n+8vu19nZQE0PqyJDlfMrT7YQjPf0QLDY4a7Z0ZSOssJFqfzKT/jol3q8UpOmK99wSpU1yMWkkZq4NJNexrDQcIFymnmgqUMvbv2xJjlJ3Ci5a4usyz8XJ916rg0lmaFzm4e1N4RuoJt537VfxbKczvUIml89e/v8Md//4Dwr28R/+cXYLPRmUTAZ7diXR4ginBTnl8BPAEYc1slRooA0DUwBUE34whcsyjaaQBok5vl7XZXgywSEQE/Q6z0QtHhbeB/fos/EYEff23n6D7z5D62kF7fFpaBXAWu2ytNvhzeK8nq6zO8O/c19CYndeHVHjmttDwvvemUcbyAK4Vxn58y9S3W3HsJBPvg9m2WqaBKa9+1aMeyR2jsmk9HXVzuLc/zMxHq2a9U+fLTb87Ujkn4eBw7eevLNJ4dCCVC6SeSD2ySHZh/kSWR/bqeQwZlWm8kbfQuSvF7iNbXK9H9Ibvu+m7p2rbjy9g0156NNsu7HUGN9UvZKntboF3otNRYh13oQudHjUznfkRJd0SMncvdUoA/gHfxR9Dzr4AnEfilNUXv4cSd6R5FCx2SZEAVr7Ryn2nu+D6mDud6cHsN1V5jarkF+d9eAFVjFZ6/obE6WGrXT5pBiinRk5yIzc7a7e/eMrcoz2HUu227JgZ3sIb9XDFevLzGlOjuMxnkFExCJQdwXUImSwvS0MXoJ86YOCmayYlKXVrm5t3CmbV/yOFMpsAUEUncuIOi5GmZxigfNIAoImwGbIYBRIwYJ0zbETGOKT+xUA+YmBFCAIfoDJQMXXpPBr31ueqPJUv0JWFGybL0h/UukeBe5HkXB6oL8aSF2cEHXOiToPtw4nWOdKT544UudArimb8zo0e6GKwBYFkLixJ7noBUzpUVvAFqeQ6QKhybXu+ANMFBjDhNiFNEHCdM44RpmlRRzkAEODIiR0xTRIyTKtljKZzjKnkrZG0pW9Byo1Dnr/t0MZlDGp5U/yvW0/ZvljxYPlvB3Vz5d7dPgrRJQV0P6rovPNMkivDCI4P/nSzPybluJxnHqkQ3r/Cw8V7QrvY+duL1xhtBlMf2Jx4dqoIu5D1T5p4QvbIyL4Xi+hkBPGU8+f7v+OO//xf4mhF//As0DHItOQBc3wJ/sRaTsyXyBmJlPlbS8gTsr8VyfQNg3AKbSZXnGpkBIAJvb5frti91+1rpn9/K54+/niav+6C5deEU6wVhP4X5hT4yWotH1gR7pKDsEye7huHuye09RybTZ0sqofYua+wiPb9P+nc+M3cvJGae+72V63AHUr2XF0Vbm26lgE9btgpI2SvPXX4PjUvPFhNf6EIXutAnTkTivv31n0BgbP717X5x/3/23nNdjhxHE37ByKOqklRSmXbT0/vt/d/V7E7vtC0vU6WTQXw/SJAgCIbJzOOkhJ6jjGDQgP4lQJBPmj7RuYk8mRb3mKHb8KfkGp24IitCbZFm5W/I8hy9QXftT8LXuCSxqnRdo4tslGgiPD2eRkcrebTGKCPKEL8czhjM4YwlhYpVRYyipVHMyJvuLcZtgzMzYsxy35mLIX1RescIjhGRI4gI0+GA6XCDm8MBU0jHCESOOMZ0jWIIE6YplAMni7isKx1R/hvGnyo1IkHTpp963q706Eh0F+n5vuQCl6GrBfqD0CMBQacMisOtJlvSkzhgJtCNgZZ2aRXvK4xY/vcC6k3+PT/3Nyo0oGctaQ2GNHqRb115eak5gNHhquzgm7LFrgBUiAyNAaZWZigzueCmOSLOM3A8gudbcD7CPSm+87E6DDDHZBnaKPRyfI5Ala2wj9D5GTU+2V8p6tpaBkYxqd0VOGks7gtrCUYvnpbU9F+tEE5xLB/jvtKRGqDcMD+OozdhO4N4nKwMBJJvUkWgvZTftPhi9d54KHVR3QgB5ej28t05ur389sfoLyukVVmZsbAUoVt/ehB0B9QSdswFAWStAHi97pp2ysbRPDuW50VQ/g0D0yv89te/pfef0sXmHGJaYR0Y+IWBVznKH5GO7Q5I96DrLMupEgQgPkueDgTcvk/o5lbKIp/5/lseL1IAw3dbUqXsB9W4VMKFXgN4/+/xUYO7aEf/Gvmjle+6bq3yo2uLuU6bQUrap5k75Jg726/lVx/l7vHrFPEjQVFXOoWWLM9XgskpLTaK9bnuPldmXpoLY+ylBLtGeNckR8YP1S5ZoJ5hVwde7m+2o446rtTbUv17g9QiEDL+cmbcMm0zmYyFtFizYqhqVyRjmoyLZJJUBSiYU7CQWJePFi/F0jxj35Idmde8MBJdh/RNHuwc7ZXh4Fthl22RobkT3sajcEF7Go161thBWaKXaMqjibMIoVeoK5vsXOoV5kGH67O0RKfPQQaDeUL3pRSvk59LXbGs4Z0rXekhyJWtUPtr3YHtEMactDKcfx4reeVj6Q2A+AuOn73BZ3/5A3778Z/gNyq8JjNVnoq2WM9VKj43nY4a4cyyv2a+NfEvMn+fGPc+ifL/Cq05y1Et3ykhiLIFc49b9HXSIgPSJijdse2FFwY1ODCnFhbWIRqT5ud2g+HgeamtiEEQ9OlNzqQn4L6JagWbGmpOytRx2rRU7EkuVuEwkKy2uTviXEtT+g5aoDCpurf9TmB0PmEg2WaF6oHTyaVxnrM1fcA0BeBwwDwH4DYAHAvupwDQRKA5gCYGBUoyZcuXzcdScW4ZgqUNb5LdDtaZZ5Geb8x66pKbSy8VV9c9RgI71feGxO5j54sXUzqTltZre6LZGL5kYl96l0YTrr5iy9Dkfb+nafDw8BPuOek/NO+PnQYtq1GSnhqtjCA7IyCuk6CnoLPCNSbn+wNQQlN+fkf3nXQRnJP+SvjB99ICCGYw0u2Auvx1ymS5G0ZilTbQWK5T3WKoBGM85SKa8vebKd0vE0KKlgmYkY5DYgI4AJFSoBBwEwLAjHk+gm+PiLe3ybr0eEzHuDc7UPVFOQRQbPOd8xW1IidJUfsqKvHZAvVWY6Q+aVCjI1btR8oZ8qsTqALD5mimJkpSf9IEE9gpVaoAvi/01Nnw2rZXKCt0kf6Zx4jgCRjaMcMTxpedxQJvS9aCau+hfKvAKh3ZHmhCoICY442lLVFWlk91E8gUQBRACOnabpI7053CNl0q/XHDfSz91CIH1c9shHqDiC0irqWRSwyp1cm2Dzb+uk4gDJV3ar7Jb26rzWYVxXp2/+w//4Dffvob8O6H9O1wA+AIcABPAPi35Pd1csbPlBTpAcAHrqxMAB1ztAHAMW9umG6B45yuOb9F2vbMNzlQTGMGEaryXPPolO2I7NS1C02qPt5FtpT+qHPtOEjIi9Yqyl+qseKN438tAVno2nWeLfbXSEftv8/v77CYlbZfX+nJ0glzhByfqFzM76ZY9ifc0I6OfnG5xqDQPBxPJimNGQbk7ofayo+HIzvv/dxdfwRzKgbsWDxiXU6yIALemnmQUedRkuMW82lHesgTIZHmrcEV0Z934bhpjNzM19y6Szpy76Sr+ZIAACAASURBVAhD4RDtrQACN7nip2DY/Fzc1CYxgslXfeImUvnoNQqLI60fhUk4tmGMtTnZ+lZrPUY0lWTLfMf8PCS1BmjC2Q40CF02TajfpXQ7aDXAiZtpEdCfFuVZG3k0RpV2spY/jYVOWG808ehfMzCuDt10PY/xSrtp0+l+Dg27hhvdYH2wO+mLLM4vQCvjZPE2WkOrFcC79PMr/oXp9e8wv/mupuGl2629dtIa34vfV9JeU6qXO8pGafabSvUMz+fm/YGpci7zzCAvegoQiwYKuigqRuqmnDwJKGMQJkLU61l5JlWelK+YHG0QFGzDDCY5/LuXASR2CFpOyBpX5DSaqwCbvCsM2XlgVR5NhCnfRXZT8S+hvWLSV6Lr+BnMieeJAkKYSpkwGDF/byZbebfQUnQFjYxTrxtqHGKIBc5GLMzpmj8SeMYAZmCOYBxxnH7Dh8AIgUAHQuAbHOiLJGOeZ8wEfIjHJKP+bMrXrBNmOdFU5KUxx80RYCCEZKoeyeDXJRrOA9Q08UbN0MhYvH69lvZorDEdosghze9ImU7+6afbryjaOz7d5ZxmyrVZl7XpV3i5g5/Oq8XMFssOA2J/uemg3I5lW4JobsiOZXuTX5sXnUQfyTT2wAr0cxZMOo4r9TRqYXnwC+eUW52+WQQ3jUBtD086HLW/Izp5jb0/YHuHJPW8lQF1aUK6I9pTTpQBJ+mPCkCKQlF/Zu79yiDfxI3aprzd0gHJGjQE4JCUjuEwIRyS8rFMuhwQOYBjegYTiCdQTJM13UbE2xm4PQLzMSnDtFCuJCkgDWg0Nu7kZJ9twanBnc13qXcLVrkrnPa5aVOSjAbehrRwTspaA2ybvGJN7mjy5iAJ376a9i4htwCgSzV1YiTBrwMgVF/zLdnGzJG0cyKwbe+NvwToy93nkoycQzUFgKZ8ZLso0NUip2y5ZRt1JVbVqbJZgJgObsbF/t7M3HbqoGwSre/t0svbvtH6L82/JNXCxBRf8sC6DetwnGL93f/3n/j3f/0V+BbAjwwcngGIwIcj8OIG+Ok34EVMyu9jDvtVSo0+KNAekI5xlyL5JQAvDkC4TdblE0BHSnWFm1TAv2nleUtsm9nr/Gutxsk8dAuaLuoUx1f570fnewm8he4ANSqFhpvMSyQl+im7he0wCKS6i8rtGSoWeafSu9JHTAtj9qKSl4d7GLdEtXtpbiIYbty4lPX4Hur6Fhk3w9NJmz9HOMZ+X8PtNqwJZ/3aTVhe0kBSnutx5QXSSRbI1kElEj1PSpzqe6fIZJOXpZZDC15kXlZ+SHmWOVsElj04Q5oMF9IXQVrxb4RbbJX/aJpKn+wAs1hBqf11FdwaD6SyJ7NTg5TXAnwI1WLMo9FuD9vk/dA1fOdhqS6d5s2oZa0/DgSL3bc9+HXPBoJzx6Ozw8uDBUWDNjL6vJtsG92Rj11riStdaTwtbY/gvtrbU23XDt/kzDXvALwjzMfvgT9/Dfx2BL57O47zjHI/pyRXFdirfCULWc9/e10dOveiQDyRLrLyPLXwvMS98dpO6wI9NPZl89HljwomY0baYEk2mHLTU7uSeTT4ruNTyygBEkVxjjBlr55oWJKVfLcOY3hG1Ga1iC6U5IckAr+CZPNyc8xykxVnXmcGI5Q8tWIGi+0IHAkcqOjLk/8ZRUDWyOHqQz1nAOVJYmc+oEpHY+5/EZiPiLfJ5uJwc8BhmhCmCROegYkwQ06Mj6ApYAqEA0+YEYCsP8dcTVDqSYtNEY9pY2fqlnBSRfnXPQ1jMy2tKcxaUifarC/89VvTPkReSEunoZ5D3ppuhYb+VFxpsaL6kn7Wcei1FzZU/oCXblwalZWHOi5QrnvgcidYscYNO5I1baKTxTpjV+f+gHTdc/vJ0YXB9FPF5p80eZXmgHsilCOrdVi5FEaOsHbnUarhD1OyND0cEA4HHG5u0v0zk/xNoJBADIUp3YU8BWCaClZkbUlbkRjaSW+BHsmAC6AHnGvAwrXoMmHzr0xIgq0+KmvN3UKu00QccnQ7i6Q532+Oaar3nod877ksEJouIuluSXvF39mgcDt1gNyCOtXG5F95bxaPKlwO8x//+3/h3//nr8AfXwP/AnCTlefHCLz8DHg/J8vnCel+OwZwk6O5RYvhRYYQkJStL28A/pCU5wck5TtBRZCV5yUvK31CFOevF31to6/y71B5/sTJX0PtC3yTH58j1a13lPuVrvTY6fkDpGmEeMt+qf1bDHcBYD8YZpuNX5egXazuSXPDXLE3qHVfK4qzisidlB03z49JfAhpBpnUAqcrXelKV7qSITs+7/i7yt16+gXAux+BZxPwh0ss3j42+oQbzRKUKzCoLR/vMD2frKZTY2wN0O1fDc/FTU5GHNTVXkzVbGAUecyGSIohjZbxtDLG9aTzken53vEW9+c/8cPpfvJipY6slCt/bgqKP8lavRYnBKrGLSpPYEaMjDgn3pJOOGAKASHXGWfZKRFhCklm/ezZDZ59doPDswOmm4BwoKrgz3mJcU5W6l4ZLelE3dydCKE/4W5+WbL9uvfR1M9DbKS/0oPS9Q70J0nesGo775JS5kJsnKTQMltdbBxLAsFPeXxqLBeodds8cJvCtTt6ul1nOu7sodkJqOut54FAQEg7CyFW5xOBpgnTNGWsSABnhTzSvejgkE9iz6CSK9AqALBqiBvimnjNg1UM9r7N6x1K/vSRj9Zd/wJtHgrutsAcqu64i0J72cenE3IJONs8nQUmnEFA8qzKpG4VGKSlymvMeR+WkY9tDyiKcp6mdAXBVBXoJV67Ruri9pTStk6ouuhhktGVJdsg9ncn1XK0bVAJwovTYBHVLNBaRv/0v/+C//mv/wa+AfD3H4GbG4Bjun7hixvgl9+AF3Py/zPSfecT0ob5IwDivPFeeOFseQ7gawAffkuLmImBW2kjh3TkO4vyXGveN9DineWmn5XqMW3pm/z7/fZkT6NRH9jaGLj9lbIHjDX4IL5uq7TnRz2PjCpPbL9XegASZfG7E8IF9PUsbciL7/kJ6eyl5+ghjx2PNcm4rPnSzxfa+NTNIJ13R3i3FFMD58idX7owLi4aTT6DcagJKtYIpmA9q3kAq8dcN5KmFG83NDc5sPk4h2pcw6MLXfaVULBYKvXfCIx0tUybVvo4krzpdYGpk1IwuZz0yTVtJObXpuvlS+HyUdgrXYY8i/b68V5ZudKVrnQiXbvqZelHAPwT8PmXeP6//oR3P/99ZS33CGiPrGSnXKVXdj5Ug3tEWECfQONA2HKZHZGaXjVAI1OMVK+jyXKw9szHMM5+kWeRdVRpDuSU3prEfe4T76/EGjCXDZc2WxBr8Q/FZMmd02uOYLeBcplx7I+MZ+tXp8OSF6Ac3450QH4gpOPyRUhXzPmTsn4+zghTOro+gEBhwpHy8Ydlw0DCx1Mg0LMAzJxOgs+m6BwADpys0AmoltmdMBCLFTaSfVBdHrixdHJXrKzpJJJL9Ue7Qq2bGqBcGq/i3TvS6Ry2Rou+PWSzU+rFrJ+vdBGyp6l2yxpHhL7ofs90VaB/anSJXTJ0RrvVQh1X0H4dqO6GVIE2ZbwiPK2oss4h+qh2F1il75SVj3FKx16HfGd0CMmyPGb9FkOBlcJiUHo8Bs95B2MJdOZkK7Qo67vw6KyV596Rj245bhH2Msru2Qwg0//5OKNLlNUa4LJ5OpfKOAEUMLo5ejK/+nkk5K/eIpAPWcjtfJrSxo5igU7gECCW6nW3ruJVHj3lg6qulksqYLO7eqj33KbRFBet15cm3fWGbVG7WT+MRnkuzi8Yv/vmz/j7f/13+vYdp5Mo+JgUtJ/fAG9Eec5JIS4W27cSD6cK0XwRqvL8N9R3IN+JewN8COmahyhXAdwh0lppUndPo7xtybOpUzHcmIy3sjhcIVGs2nZrj26n/D7lgmtODsD1KPeHpHIU9gJJPeljtIG2zqxFtjcc2/eRFfdz428LuUp3Bp4vYEwt99C/UXtQAgG5g3vL4t3rPu8X/F+a3PI/EcyTKgOvzMqzM+8WrHDhgbPU0UbMVObphxjAMwhwBQGVn+40RY9V7WYFPzJuN7iTu4Aj+d2YEjaVZsDtfxcU0F1pF12tYK50pSt9tCRgY2F++QkA3uAd3uCLV3/Ce34CSvQr3R0tLY+96ZKr0q8oc7USzQsoWLcoBgUHWYA84KGEoxquJO3JYgZ5GsW/hzp82SrRNx/XzIzI0fdvZVQKO0pafTiu3gSzZ9lmFUUlmScRkvFL9k/I1zFGSmUbI+KRwYcJcU7W6mEK6d52BMR4C54jYjhgpiOIJhAFhAngmyxWCpyMNiLKwQFJ1CS8LRaOUya+s/btlrxnvHQO/N7aXgb8bjr1dGlZdjI9nCDuutp5INq/cL0oXRXoHztdekHdCMW8bwvv4rimJF9K4yqYqWWw1RJdC0sLnvMknvpd+Y1VGkfyv1Yakn4AEAhhIgSaQFMAJgJPBDokRSQTwEyI+Sgd1vAg80YZTBJHcGQwx4RaYlR3znABUMuNSQM1JfHrlIYShNr3U8kqT7UQc6kdlzOIKoDPcF4YHPz2PI9T8WYeC7zOBCQnB1VjRBPRwkKkC7/AiEajZPxQVpBLO5xCUqRn5TnnI9zT/egpXLN3obGUN+npjQxStLbISVubaQG/l5dGSl7T3TFG9pbk+T+7uGmU5TYvXN3l9/fA55//MR3bLv10OgA8Ax9ugcPnQHwPvOCkTJ+QFOIz2qvarEIAAN4A/IpBojx/g6rIKsrzW7nICtjbkb9EVcifSq+QFMI/b/C7drLDSbQnz+wOJc370FJxB1nL4wntXHSDVon+JZaV6FcssJ2kf6wpxsXPC/Mu9IWZKy29RBUGjfw0Q5jxN4IwZaeybIjZQM+tV4VpJC0bVRzzoJhZx7peHF5ffpF52GJh3/RR6t3X0gI6oVSLK+D3qUWcruYf0r86BVLPOSDbcGu8rwgRpY0Op3o7z+m51UlPWyltorr5rWPAba6m8dk8q/m2uc5d5leyjVdjAXlUfrWVe5MUD/iz/gybOkzZ/Opg69ZjzkJrn1VPufmIx/MtG1A1rZ0KodcUu8Jf6UpXugRdTDzwKdI5yxoPt1n6CcAMvOe/4/PXf8Cv/M9mLfbgZW8x3BZ/C3MId09t3N60fe/04IXuUCNf0DIU9bHjuy/bJBOt+KbKgUTet1ADTNVPU9+Ofy+4dRu9dxDT4k8HjyrcmKDkyBLd6ZRSfFnpTpCs5rVckYOyCUSKXbnTnNvi6ORTBC4bOoWXLHDIZUpMYMo7+SMDiODjjDhHEJKBV0DAFCaAj+no+fmImQIQGFOYEBGT/DpE8BSTRTpx0qTNqOvHOOjbizjQyg37NUgTXMuRG4Ms874p7Z2kFwKlzNE3gz3jPBOae8cfC9k8NN2EWjfPMO5Kq3SyJbr+9gB0VaB/zGQG0UvpBc+iTcDRlQji8Y2sT4xEeEwEUYW3wFtJaMmEQ1Dtp05yZe4M+SGI0jGApgkhEHgCeCLIfepyGvMcGXFWE+aUAE/IR7sTAzQDyEr0ojjXCvTC/kAQ6pEW1jHa34vTDr7coF1FOL/i3xHsi3sRUi7x8kiEboTUVjrh7kA6bj/lNj6IuI8HVBc8yMezy99k7z5PbZgbJQo18Qe0R65y46dtaP5ah5bz7UYg46MC1JsBnO4E3PaNJStzbRUuzy8AvPoKAOPXf/8t+Ztu0vfjEfjiCPDnwOF9Ass/A3jFaTdv5LQIIWSrc4fFt6jKacmyKKHwLCnP41wWSKfRmeKGV/l3i/L8sdFPOP/ud90dZPiTTRKWvngF/PpLG+6MIfNKK7TFulxI6uCVcjuab6NnPczq4WU0LMP4vRQ16XHLlwcpPb5tXEvhT2GQ0FuyA8B7p2DsceZbofSl+1OJ95SIpSGsdHRXW6tocdOBTsMK6QZezyqklfg16awvFQUDIGdHx4hNBpoNAQUPegJKT9K1Uk7FZ7tqSA8WF5h4jJK87Meyp9r0MV/pSle60kdF19HtHugNgAn4lf+Jz1//Eb/SPx7eEr3b+Ga/L4VFP2UbGsV8bW+aTEF6MKjAoQxUJr9iEpLSclMdGKm+s9yzJLYEFZmaPcU8kul1AZ28uH4UX00uVMBuMycgis0kkrR4dEXWlOEmyamkxSgonTzKctxi8cetBTqnSFhnUvJCUPLNmg8GgdSmf8p8spapZnus+TjnqJKS/UATOAREEOY5gvkD5jBhogDMSDxjBmNOcm+58i7kdCKKcc1ZStTR+nQ13kGD2Xsy5YiHUXLnDjJSl49xtNoim+qMAc6s/yv19Miax1WB/jGSFgZ1ws07kkwvAj9nwj0psqtU/TSyIKwglTovFIscar3lsFQEtxn8aItEUT5OlK3PJ4QpgIJYoMc05wckBSQjWZ83wEfSCiBKFr4gpNPaI6f7kl3Lc0XuwKqEedbSxSrRS5A7HqF3WQirl0bQavuCIykfprMkvL4UGsKJwnWdtmm3nkK1CIt1erSQti0nqu0XlI9iCgBla3NKbZrUUe2uBWJ2kB6ljzalAnh7xXrBjF32F8quaxTqUS+ShuEXX6sjGx+d1bl2Y+AFcPjq9zi++xfwGydF3XQDIN9D/sWchBrPf01hAoCvOOm5f8vJjO7HBqryPCvZOercB+B9BHhOH85pv29g+tggru4kkMzflsXsWlxr7n0EG90csqC0UaKvxGHZeodkOe59l262tK/hBun4fuHpepT7ZUhblYsS/TlSf/NOWxhNDfrI9ncDv1LPGjLYeWtleCa9GL3glOTPIZKmz4v+3gSRMUzHJfPQsLtS67/Dxur5Bdqx5V0uxI7PAb7uMB+cE0ecRb4d90vwAa/F2QgPy0eN8cT/kiQCJk+DVbPenu62EYYIrLud7KPG5QkPXf6GnA94VOF44dfz6ybObRsaWpiTUx3cNT97hZL26/NjsLjktcEfyx3WawFs03uqtNfifDeN2u0S9r3Sla50Ubp2tYehpXLXWCMrzH/99h+YvvwGM33/gEr0PIGeLP8cffIc7dr0jmVaq3ROR9m+jrX7S90oRsXlYLICZ5rwIuupUh8dCVPGu8TJCCNqpXF29+Cs5aW4jYCgcd9Zxdbq8xTcUCzSZXHU5a0t0KQYT95jXitx5K5+9BLKl4+x+siljlj4iADHmE/xzJEKv2UhR+AZmG9nECdjcgCY6AYxzOCJwYiIMRlwRUrGMSlZTtozRpZLZ15qo+jXv8sl6btpDN7h+jqWdMsfv9BUcGfdt4XseOKcVDBsq1ual7fOtHRXY5knsxiteaX52XXkoxlvnyaNLNGFOjvJBy7mqwL9Y6KyhvY7/b20ta3CvSvdLXXFbKSdYoVOZp5g5b8RBgsAtMKxHDAQMBFoSkpzmg75znMCJoBDBpNFEcn5uBtxmwA6JOV7viM9rTUIEfmOdDm+XZLf2qBlUmcoYZ/N7zDgmXRme9dApQGqThpkfjvB5hOhtSLTbbSjoJxp4MdLUNpl/s13nSdLeGriZH3Ul1lCuTx2YKqu9Dwh8ukk8ao0h+Cd68JpT18CfIH5C+Dbr/+E7777W/omynNm4PYWeM7AG65Htj/LgvcZaeXCeUGi78nWQ8wbJMWs3DellbBvQx2n4rwzM0Jn1IJayBSr8xfYbu17dt90WtHWo7DKMb/GXfKhhQpueMdN6kp/13FMqGP/u5+BF6+B98pc/wb1JALGVYl+aSIk5Tkh1cPSiQl2CNXP+r7y9+q7Jziw7WjLIqjDkuadN7ovzRebhBsbyJbRmhDFKwdguSxk84IeUzx87fbVUSc+dwbyVrSjyrWrYfWg8c3ZPOhPPJicl3jemKSlLVHoPHs8rLWHpTS0rBJAL0326mWhA1QzcWTppGrXNUw9kUr85efrWu9KV7rSla50Z+QAVG9K+x6Yv/oBh5e/w/HZB+BfT/F4sHPB6kPOx3cvgCriGKsrdFN3XA1UbQ7HkYOAKFkpV6hGTfA2xtQ2KYR+0zhhqGRbL6mHqkcu8E5boXfHuuu1XsGFPc81nMaNcP16fKRHhTOzPIpz2caYZNw0iRcCUUjKbwIQ8xWiH9KJhTEwDjcHHKYJdPMMhzDh9niL4/EWzOk+d1C+0vEABArJPSLZbIh0vL3TUZXBiFby6zXgEvepCxHUNdcmvw4PS347OoPPh6ItMoorPSxdSn5zIl0V6E+dNlmfOP7OTnfBbVFpPhLwLSTUCG0euMc8RhrV7Vqdk/HDyAqVvCjR9UkCD6jWg4Sf8tHW05QU6IdseR4COKQdmUyMSEAQBXBIQIQLI+nIdwoJ7RBRSY8YIM634Firl4ZGEnW0TUYADXsfB+FPIeoeNoZTgFCCr8p4pd9bIbUGm8a/AxA8Xe9JZNe1p8YBrGBPO7ZQTbuzeiNTjvq7Lj9Sv8mfFhe3uzvrmCS3Ndndn6lM87fmhAfOMZj4vHJrFncO8JVNKW5Z9WNmXX9w69ivAvv0U8Daj14Af/j6z/jnd/+vKndkZ/DtbVKav0n+EAF8xklBekTd9htQ7z5vlABIFrJfol2USXstd05FUHfu+0ba2k6bMvcW39x/3sSODufVq3IfjvVOlFvyteZvSzweT0VJrvij0XcCvngN/PpTTVOORbvSaSTKbW1hbobKjvRR7flIus30MgcmAt7+3Pbf5ig+p0PsmCea4wNH4Trsq5KXJ3X6zgjLel2qIzsu23au4DjrU0xGkYaWWTtlA0h1G6h+fAenD65goCW3Ed2JvENhynOU6KtWNJIOch2tZNwI5cb+dBJO2qR5M3715iV7/x+ZMinhycmr6myC4Rtn5c9gojr/e7hDzfHyvThZwOiAhw5M2kat7gxlz/9HSBfP44lrP48+hfK/0pUuSNce81C0gne84e9H4EjfAV98BfzxNfDPhz7P/RTaO67fkWzrJDq1tyzz3LWETgTGrQSkPJDBgd1Cob5nmadAsHLSIOqpgjUVs3gggAKqkW45sryXy6y/b6g/J0uut+7kqTUMbThR1qJJXqvSNhv4U1oxZ9se24VaOPmZwe2NlFJ2LmsaR2eXCHCICBzAHMrSLFCouJcYzBE8zzhyOkB1ogkUCAe6AQ4TOAKRImY+Jr4mIIS0KYJCMu6iGNNR71rWode/banV/KZC7L95crxhnGSbWiOz6eW5TvpruK+sTxy+vbXI1m7uyqz0qbgPMLtaocCgPXeyaW/NZTd3XKmjvXW82yJ941h4Kl0V6E+RTlWYPgS51vCn8knmdy8ZAc/HSEWI60lxRYCbgU8XFgAHt3hZ15vEbe6JpimADhMQJuAQwJSteDEX2V4yPEygBhMKP4SAME0JXFFVWFalOZw/DQJ2ltNTagYFSTrtn7VQ3vzq5v6U8jvs3yYTdTVTw7jjy8K76g+lLZIt75R0Y3neDCVqFi8IVv02oGznjN4JySU5A9DcfOGOgRsDL4E/ffsX/P2//q/KNgE3E/DhmNzeIFmgg4HPkBTnt1xPk0B+lqqQss1DB17md1Gy6yz9Sulkinsd21fSkaOyt941/ZSJqCprF+8kRn8Pehi0fyWHAPLz1Qp9P0n5yWkAe7rHAfk6C6T+6lXVaPiSOmYAUY9JwOY7zpYWReeQlsi433dgy6VpZhSNzZczvLvhWXm0072cJvAePV1qSTA41Wp7Op6HXADnKs9HVPChnhu8hmWEPx0P3twyyo91crAEgPYylwHvRcBKrTvgfxvxaI93Z/VNC5CzULGJznxPTjqdjM+l7EYZYvtd3p8kQH289BhlAFe60pWu9BhoBvD+B+CLb4A/fAX888eH5uhKd04enht9c7w4sZEJO/TeWGqbJHZBHiWnalIcLSgczkQu7OJbw5hriOeXVbupOVuVs4o3GzzxFMAxZhYCCiAsOJCL97QsyFd5qrgWV486TQIQY76hKp+2mrc7hJw2I1ugzxHMwBGMw5SObpeTUKcwI4QJzJz2lIdk6HWgQ4qNGHOMQJxxjLPCuZ4sDqibZp2yLMuQQS49Z2/9uHGJ3fMna0uvHW2Ne2/ifehHS6eU61VxfqckJ0sAWT5/XvPbTVcF+oOQNzmdFsVm95Fl212SPVK6PJ+R9jlsf+yDWaNINYJrOT5df+MEI5pwnTIWVYgm4CtkoWAIwBTSEUX5l6f0F8XCnAosKv9IpxUCCCEDKnVXEOcjppmzBXrmxbM+X0JU2n8n4BtK+zZh7Lsnp/+4uxuUcxGSrgg0PdoiI75PauS0eiHgtNdurCHDv2n71k0mYrvJRMqwlCU3cZfYVBtzd8mSeiBbYV6GgW7cHI3hTVQrCEIvMvoP24kBfAX88dV/4u//57+VO7XKczDoBfI1DgD+DVBk4IWsE1gdj6bYIFbHeHM+tl0tyN7kvPLShdr3SLLofLHutQ9b/qt0X4LwUTp7dqOLn5eomwYI7ZH84manlwjg3Y/A89fAZ6+qFbr4kfCMVLZXJfo20uUrinBd/scdcR2QjtUHgF+RNsF06ZmKlU1IWllnFXJN8IV25n0arfFXBF/NgzcEgxd4WRl/nU+NnMtiiqaMlH9bbkCLwSw7YtDxAsBbg/sa9r051CG1KG2cBZuN4t9bh8KTpzw/1xJ9sXGQ4zaMcLBu8BbrXkMYnEyTncq0Tk6DbhTaZNjXDcU0tlE2Szmr+Bt/tiGyUzzslJhXRkv18JHTJdaZdv69KsavdKWPj07t1k9dlHUu/y5220Bycjt/D3z2JfDnb4H/+e5MZs6ljY3gOgWcRWQL0KxFlsSIrXK2x9h1yndkMu6ah83vgAZYvPVST+sssqmG30E4Ukev65OWROayQVY/PMqdCBxnNMpxTotRltNEARAE4yq8yVwwMSvMLLDXla918JlzPAyODCYqyjZt+E9y/HpkgCLm24hjmNMx/VMSWgWaMFMEEMEUsvV5wERJsY45Ih6TOJxD5j0q+aOUiT41bLFQVZ6sQyMj5/gPGQAAIABJREFUq0XWrDfdJYuJdA1PeutXAENL9EI7BmQXJ7ftKXl7wMlOCw2apZbqW82yeifPi+vVK+2h7ioJS3dQ1FcF+lOkx9jXilDSLPitsPJRMv8EaaQ49HYYEqplN8sAr75ry1oR7DbS9gQeQJTOuQkB4TAlxfkhK78D5ePaCTzldyU3r2lpERwh3TFdleeJv5hBFpK1S8FXSkC4Oj8ZRLVlPnP9XGqld0rQTkI9iFJQpZLI8qZC2sfL0uTkLCouRqtHDLV9gHIfKEejbwIzAnhN25d2J6A4oM2fKma5z4nzMVGUefJk4E26nSD7RGrAnk2pIj1vrQH9pSyg4Deh5wA+A7598Wf84//+tU1DK8+Zk1L1kMqPjq1Xytbk2riysCqKP70rlpEWOm/b/DwqOsnq/BHm49Tds3Lv+y2AZ6j31ec6Pjz/Bsd331f/+j57QjrK/X1Von/99Z/xww//s5+PKy3TAbXZ2ZMBOsym6DMAH/Lzs4Gfhuy8QMtjy1YapbvIj8I4S2FGcdgF2BYe9HNQibtxkM8LNw/tN3GWcNL/Tp1LvA2Uq2FOTGtEl7ZEbyOHz7B13yDg9KbYvWyorA7hJzUPrWeP5eJuw0hiGhuudUTnW4MXPGndI5zPrnSlK13pMdHaNSKLYaFwwadEF5pbIoAPvwDPvgT+42vgbz9cJt47pbsCzU+BLokp/HIQNbSfvMJSu/ApK7kPF0hWJTGagRqnfuLG60gLtLQY2Vl2GjZuOMmwLQqqiixKFtolziaBqoAloJ5wStWt+s5yNYgBFtV7zF3+azmDke4uB+UDT6mIl/KJ8igVwkCcI44fboEITBMjMrJMWmSK2Y6D8t32E0ATgSZGmJCU9ZGz5XujWbVMnt6knSrVVXZyT9l7+tquhEaerbsVsD4iWsyznHJwpU+Jrgr0p0oP2VeHczUNftcCrpCrDPqEaUl5Dq+4KSvQ0xtrMGYXYST+qxuL0E3AzWFCuDmApgnhEMBIyvPkF+CglGI5DCiboDZ6XS3NDgKNcvpQyjNg32ztCRsVYNlswX4h2gBCO7/yClMPw6YvmkgFWM/Kl+m7WxYN551RNY5nRxgy706jHyhCUlsknV8dVso2H6nQNEtRFsfsjWJePKQwzS7d/H/ViSikP1obaUn7apkOFC3onReDa6vAdgUHvPoKgQK++79/q5GHKWHf37KW/HkupGdICrrfkBQ7L5H24shCMjdpLgpzw6cMEeJeFNRxW342Zjk95DHs1HZ7Fztl1yzBF8fHjfx4cY/0TJYvUKsEB5ISTycd6vvxzfc4vPwGx/dGif7up2SF3vAF/PDz/5RnMK5Hua+RHOetaW04nVDra8+95x905D+n+ms28Klxr1gva6FCdV9rqosW6sNA6tmT4+wJn5jY7tcNj/G1BToNt+85wjZbZ/L+Ur2/X8EeZe7TUVPnpgfmKvCCKZNR6e6ouxHO2L2hZ2kAs9+cd1afmrl5nBf3ixom16ZhvdFuyd8ovU5G2USaQzSYWvl1BZ2WjJ/maHyZp0z6e+fE5tj9j4jOxRRXC/QrXenjo1O79Uc2PN4byTpCLNF/9wsQXwL/8RXwt/s+zn1j5ZN5aWQUd5Tmo6ILNHYrUygPDj5q/ADVGKVaersimsXE2VSXxWEEUqcQdRbFxRsNgJ4KVDYoU8JRDnbevp6iPskmHhufBrwpT7GUq5WD5fhDNeyq8mKocodjdW7SG0J9zsYYel2R+KlynrrojTPjyEdwJMQJYIpq43PaGBBjROSIWVvtlzxL0TtrBr22WVyeDLC0ldNbLL8ms7FxbCGnWtM7mbRrQXiHpA3brJekkcPdmyW6lnNa3Ype85w07K6swz/xCX0ontjQXFctz++Qrgr0K90tuYLApwjingYVIEOtm1jlVjBnNVUmUAqYH7LfLAAOU8B0OCAcDgiHgEhiox617xIlTRNIjuOJ+c8CD/lT83KS44YSZz/HbGhHbH+tw2MmAdO1Tl2uz53c74LO6eabdvj2Qv70tkcD1C4+GmUOo909q3gi5HVJdkbMR0WVtqU1UmSw5poYvfLT+reLvbujIYcvALz6HfDhX4j/UECTOS1Qbufk9gXSzlxRns85ztdISjdpG4x2sNAgnVAVrzmOT+JO8ZPoDkC5N2+7QgjkO+5PT6ojY4WOCeo4/wum87GRVp5fQjBrLdPX6N1PNeFJ4RA9zAL+FW976tbL29p8Q4PnrfHvKc9RWlvqxn4b5WvkZvvocwDvFtKzGENcySbSWudUodolhJtKyNdIX7bggJMSzL+DuG2ZX3jMcVPNaT7Y8OYWiZmYrRBsj+X53oxdl4lXutKVrnSlU2k0h2ucFAGEN8AHgP78Dfj9EfjhZ1zp46cR1B5DldNAGrtYyfBC1dCiU0CeCgoLhlc42t0c61BWzpJaH1iFpv21/gKFvLk+IoZQ5WfCAyXlPMWYrv+UNJUFOlsl8f4CyFDVCpeQZXYAUE+M5JkxzzN4JsSJQQeq/ILAc0RkxpECeCLQnITfHKu+n7F4loGqF6y2i9XseTKZh5STbFmbP1oZzomMOeX9kErdp0aXKCYpb6Lc9+6p6D8CBfo5JXXpFfqKQvJSyRJ6wdKpO/1PSXtXOjoMD6SnWyMSBu6hd8gkl3+T4Hcp8x5PF+S10Sq3vOmJk8ULCUChZSGkrp+8W7FiLK54g6jceY5pAk9Teg5T0oER55PDYxrA5OJyAoAJARMiy7Hacmz7BNAERoAoyqko+WMq9TwgEnNbmh76bR/Kc9KD6nuCBAibunG7L7Xvm2WGOQ1Snkh9suRaXWW+Kw40+bZjgIqrKQ8jlN5CFmePtqGOmlbnTgP3AT9L+bR1osqHwNlSnwdtwomHAbDaW5yPwKeIdG83AMTcHjkmhbl0EhYdsGiCQ5dEs1+5qURVN8XdSLK9crAbJZrntfrlnFfhV+JjxYpwrBZ+BExf/wHz9/9ICtM0IKZ+GwiYj6mNvOBUBJ8T+Feux7QHVCWo4pltPmR4kHHgSL3yXE4EsHkdtMXFEnmBhIJ+ssw4dTGK9dwhfmlNq+dO0jwt8LObdowJXbAcVlmZF7+3qHdnKyv145vvcHj5LY7v1d2DAfUudAD44lVSontZ/iis0O14SuM24JJTZ++Q2rN8lvjkdIBmaNqYmPRZqculU1D02BbTczOFlnAyPpuIyD7vsPTYkJ1hKzfz/BBjLJEzRbF21JjKChTKWJq/a36aYShgUaks8eq5ugzzpt4UjiSNJXPAhsWVqX9xml1sKzoSNhFyzYfMT10iWxN03LqhXs2F8t1rfBx7Nz2Fl/gz9lxcMwxBrKJ8rE0Z+6Vd6IaxMH43Fswe7hX3EQ7zJuoF8qpnVHWdBc+OuDV2KQITHntvaNdAW+PzIuxwG3ysXLwsZXi0QNgxuEn/P4WWTM22VJTGKs37xvDnAqlGtuCUwRJ8ukT6J7arKz1hWllaLgc8o72Z+frTow35tiAGZr4hAN/n39cAv/8e+PyrtNH7Jwzo3PJewy+aOcfbyEjio24Gy+18UVkp4YkaXC/3hsuZlxLTKuU5PCl20xqmLnv8ipGu2kHYpm0ic0OOTKRfByU2pIGrNYFOxMWwwv9CHhUM8ZRRmSXU1FvZLGc35gjS8mAAIs/VkRJlK/RcSCKJY445a0H5NctGbTCm8YckoRYn5SR2pEgIIYslYoGRxAniMyJmEAKF1EICgZBl1cyIzMAcEZgQQAj5SjSmWA1vZF0hfHjwjkKzLKyYWONJU/j6g8pzCUaqvG1gtm4rtHhymeKnGa7M2NWs9b01iPLeQLimIaI/FXPA2MljoUq8NO4NYwu4ZGmE4Bs6hb9uzebFdy5+PjXYGThkocD2LmPcQ+o81obj4n66gAL9umjYTKR+H7LY8khLzQA8aMusBuY8kexu2Tx8OYEuseiAPzCW+lFCKj1B7066DeCdUOzyZh5df00dKAEoIR2nTgGEpNwiSvJs5qSI9ozP1Sa7NOGFPDBSZnwKwIGAKSCGgECEIwICSG5IT2lQRDrCmssvzTcgfpbaGyjfEU0ATYDczW7qJWBCyM+RZ0TMGdnoC3MttQi1djP5X4AqN78KvdiC7pNZagd2cbO5m9gBoT6z5+xtoqghCkiSf21+RxmgEQsb3DxhFZv4BuU57hGDdL20dGwSn+5t7cAr7TApYUnhuXzHEseqABLAFihdfiQLMZJ2jDJOUPbHQZQS2qrdjiPq2CqvPBQw7YzR83PZ4ajbbtf+NKqQ8og5DVX2Nm4or18yvn71B/zw339vizPkMp6zlu1lLvZnnI5s191B+oZtfgJSpQtMSMe+fwDwGynFuQ1o8jtqh2skd0G7/dZ2CN2edCDTfrfME7ZvhC2Bzp0774r0glE52+pojnpnHL74plWiA60SXUcmVuiPhU5tb0Kymm8j3EG5D+8NImlNYR+miQB+zc9fAPhA1Z3MGDKcJxYaxxqmlGPcIAKWHdREHeCo5U+IZ/BR5gN5GYXxFnr2txkvs7UGUx36ZGi3fu14VqzQSc1VToYa+FLLmZZBz7J7t7gfjJVaKFLu98hzb2eFskWoUR/TmzrJqONB4lc4UJV7J8jpMqDruc0nI3QlxN2Th+M0b2ruFNxCfZjEsle+Tv1xz7ddD3JzRPuWPqMDm/nZq7IBDF2uXtvA8zi4ZyxrkhvhyTzeWIH0Qkz1cVSPwLJAUrezB5rrhxZqZlBxj9hf4NnF/V4UZ+Q7EuqO1618KH4eK7y60hOjrX1jSZahPw2+f2zXXGylaPNtAc8CEdBaJKCucwOAd9+nzbsUgR+9Xbo70ro4EbpNp0+GRvPKVtpe7p0vdTS68MLl14lzhU2ODEZMNj+lfxqZQANB87xE5uRPc7c2mIocqmQkK5c1NAAqLG5FIgobebirOeXJ5DuEfu5ljUOozWaOS+S2nPMWJQwzECPqop2K7iBmJXoAZSt1QsCULNUjAI7gOFfsyhI0gEndq67z1ay7cvq33PAcmTEFZPnchIkCIuZUJ5Hz1YKEwFO+bXTGfIzATAjThGmayt3m8ZiOcT8cJkwT4/AFgM+AD7/NwIcZoAmYCZizabpc/RhJYdW8Fs1ywhhV+xiO7YP1U1OXDISoFoiqPvUaorST8QplnMjo+4T+TjHVN4qGXKevaDTENe1O3nPlNnGcOzaz+7hMdWy7nNX5fY/z56XHbvhtY/b5h8w1g2AVJdilKw+CLNEKbxeyQH+qk/pDETU/l4lyY2Rq1q0CsvR/26YMtDhZOfhIyZYXWfc0KHLndW2yGdNYFEXdozuvFT/Uem5Zrg9lfsmzj5lPm0DKWr1Y18o8OBFwOKS/MIGm5IeIEGVO1EJA4SPU+Jm1opyQFOeiSK+ZTgpMgDkiRgbmvINx98KlgubmHnHIrlNvohzN3MajNyBrTLqnb1D34NSnvNt6X+B3aQ3vfStRUutlS146PriCWsefrg3t3oGPblftElNc/bs857QND31RZPBdLK+yzyj9R0CoKOhTxROZu6KWrAQNi+04i3E7WqpTwFkAGb8Guza/mm9GXWi9BL7+KivPi38xJ49pkUSUlDQHBj5DUrTlDQjNTlhCFn5IPXFNn1Cx928AjkhKH10eQ5CmeLdf1wDtT/DLVVHbDBuGBnxtGadMCzgfRY6jvyvSacj99rb9HpEtl9swx7fJCr2JY0JWyOb3L14DvxpTEOl2X2K7FfpjtFj3Jvit8wcteKLBs/VkZbe27L3w8v4r1bu8A/djCBaaM6n52OlKJ911PqLlIfisOMqnwZjf3BEuz1bwOypfO/+r4VLavywQm/1Zen63ZfsC5ij3dj4s85pbOM6k1TgvVHYT5ULJa2V5watUhT52Bz5hwC/X7yM+dLn1jCy+dkQmTY8ftflD89P7lPXYUh9QpSlRr8Ijv4+2Aiyn/rUQb4SprKLcZ1W5Lfj3sM/Y7Lv+WjxTwjtM23JYnfvlKMZh5xCPKk5W/C/4W054m7/in5u0ThlHpfUtJNL4XMcYg0Jw+mbyxhviHJDMp6PweyHZSelf6UqnNIQ1/H8H64OnShanbC0Wq9MRkvA/q+f5Z+DFl8DvXwH/+piOc18YH9doa7O+i2Z6sbHVLlKciDtM7sxhTh4JMIo/p4Eu5iMD2gZm1AD2jvGE/RTwWcTvElRjarvY0KCYHZym5TY2S8l/L79DWwyEruxYeCl/GcfIn8bXJa/Cr/gjtPck5g9qUZTUHpyt2oOBtrKBwaQdVQEQoE8CYL3gCgHTBGAi3GACiJoj3evGdVMmZQOCGd8Fu3brLb1GGpBuJhbnNosejZ3ZBLwUmQbJ1n3UYG3fWR5UhmLi3eQukpYT1UGfLOn6uCR5uMWur0UOceGkAWc92ydf3E+kj+AI9yvtptG4tiXcx4jjyzhtJ7E0qFxqU1E9GtlLfCsN/OtdeBbg5AmZuNoi1wlUjmyvIIaoHhuerM8n4GbKd5mnv2R9OmBPgFC+W4YzT4UXzWczcuZj4GOyNufIyOfpnFQHdzElXJSoe2i/dUpo3T7Xc8b6/wKIn/RMfy/EyM23s/waCDIUMBV8y2Doe1k2t8ZFb7XfcnP8qQUljhtyHkqeqE3LyxsD09e/ww9//afyT0hbdQMoW+TjJcATJyXcr0g7b8uCjtq0RAEqCvYD0t+c+fqAquzsFgAmL+XbtU0/WrILurWj3IF0l/YXr9HRAeko8b2D+htcXon+4E1uUAhyYsML/3MNa8LLIt+upe96Ar3kun0Tr06mtgzPa3HbIl1a+1s3Hdb7Zt67otLyBnZ+hTol+sdKbWVyM7ftbWhndoKNkgHem0zOU8UXW3NmhVPVrYvrrvv/SKCx/nHsfQlTb4129H1NePnQ1K2nHhPZ/rezfq90padCbhc07b301Wsf2E2nDHF2XvCGI/ljAG9/SXjp918C//7lVE4vTyc3l8c6L2ylB+wrpa+KPC79FqV2lpf6HFYl6Za70CU+aMXyXl4XdZMaC9sFy/byLfeh6+AuPzRIT+HNLC9zw6KY+Vclt+eXUQ+ukrT0dUzM4BgRETBRHEajmKsCa+JiQANKN5xTTiM1jWShTgRQIFCYEX87YialOc/thgIBM4rFvhigMOXd68Xo7FxS4xwbN8/rmp+LU05UY+pmPtzAh9tkn8B8espQ9tjXHp8oXRXonySpyaXQoHOuzpDy+YkDND3J32lWnMipuo+HSN4gxBWwQgXUpaBZmad3+CkgiCDHBNX7fDi7gwg0TQjPnoGyxXg5UoiEM32sKqFalnNmiYxgdykjCVjwHMHzDDrOCDEmt+EE4qBGlrjke1OSfbkNeFmltclQ1W2KktuyH/n3hGFL74Oy6YCpx69q+rum6Cfc53vc1WqOOJtjlraL3CeaduZImBllbJUFQhHgrwEgW5wDBXlzL1U3jK+sDEp7VAsp1SdJ+HxJwIuvEP/n3+l+KibQ4QB8+JD6d4wpmpcE3DDoQOC3XE+W1l1yzgvOtww8zx8OeRkip3wds/+3phyKJN9mQgujThyz+4HAc1ynB1zbPyoSRXVzVDtS3cpR+eR81yTf3mcl+uev07MmiWePUpyQrNYvIQt7odO98Bi4NTqS5fuAtKL05UJCQ8GH86xkCk17t3GM5pGF9btYtA+GPD/43qJf8r+lHMz7njwO47KnpninqGjBkJ1uloRllh5sjNooNJTf1Xrlwdg9SNKJzxq0VyHOGp9LbJk5aewx/0/Ne1kDDHkx/qVddMexmzDFXWfaf24wtsauW4U3u4Q8AzBKQLr7fQW7jqy+mwCWP+XM7DYTth6bzRd3hHk7Mxqb9x0Nk+xpcvdFtj1vcb8Up3TFYVd6BLR1fFgZs680oBXcuhpcrXl1PHrZ/D67vwPwzRvgd18C/1YLjYeqnmJleyoD585fa4PrXc2NWqa3lO6SfFB56+bWkTBFu9W8UamDbGyU34oS3eCWk0rdzPftdX0aLuhJz8nnYsKWM2cCXcEdS+u1rFE278K3lo2ltNni58aqPKXRnEouYSkmg65I5crSXD0VYxd5cMQ814u8PLjKSHIsUmN0eo7q1HAGhTpsRABTIITpgANNmJ4R4nxMcR25nj5GVGUcpAuO2nZ4Fo5R5WZwsb3NQJ/Q36a5FfN63wf8a4wrHUbLIZt0JW4TvsHvyOsf+X4m+LsL7Njh+tFYNeh3jSyVSjt2o7jSOq1NFTvpqkC/0j56wkozl7QQc7iguVRC5wRXPNpoG2tugieE7McL7ZdK2HI1a8jxhYAwTbi5uUn3z6AV/HH+nwWsUQDliYzKPdiCOqidDBpecnx5pyDmCD7OwHEGsgK959+Uzwbh3RJUPpkcDNt+1K9OO9DC49G30fdTyIvmI+vW24iTENVapzXtaCTglW8WQLIChjmuZpclsF7YHsLV6Q1YW43TCm3Uu8Kx9CUBL74C/vZDXpgwcJiA29uk6BIA/CUBN5wU5O9VvsXKHEhu7zkpHYnyvWH5HqtISbn6RufFEZoLg6zzId+39ftt5XNm8FPZ+Jj6nijRgbZr3CId5W4oWaF/g+P776ujVaJruslx7ZVK/IKkQL+EEv0tqoX32yWPd0xb86+t0qU/7Wmr3lpPw5ElSyqyL72/rWI5M/rto6Wy2lKOIz+jtf/IbYgTFsLIWpra4RD2Wb/b37U0H5JG2PZeiDsh0x2mdEIIW9G6MfDKOLggjHLdVjD2Hrpv4U6DA2QR4/mD3182pzNwv2h+90emj2x/WnK1Sw1QDzy4qY22V/qUaG2M9fzaAWgU35UuTyvla7HtEUB4C3z7JfDdY7sH6hQ6Z5BytWIL3/f0jbV0Lz24rmEfh4qsNSnOs/1x1vXK1ZB+fH7sIndd53RVYmROI2rTdFIfnaa4iZkk66k3oA8YJOrEvFaaRfmh2cpY5Ne1fCvu1RLcjH9nAIjgMIF0tigJEnQQjhGcN2sHSRwODGQG5uwnr2+Zo1xlDmTlOSIQOVu2h4DpcECYgJtnAM/AkWM+Nl4xEQjlGtGo80MOIxcii0+8dLzp6S7Jk0U07YjVN6o/zZJIrd2evIX2Qk9v6muv8OtKd0VXBfqnRqNBcjT4eAo8Wvn+VKhMjmTeUcujN1XJj9T+nsMD0N6f062pPKmPec356KrXKuDK5JMmawokKKEqzyW+KSQF+mFCOBwSeIhA5GTZHUV1LpYcBQ9StTwnAmgCKCS41VjJh5KgFnkxAOYZiOkvCgBxj3qxGW7zKsfmr96F7NKo3Ll/1SDPjQcYKlH1e9OfQnukTxOO649356JGthqp3svEe1cocCfZ3eZI7YCUMJrroyKGfEgLoxKhRFKz2BzpJH5yhKW7me9mG2gpraLwaPvs4kJoC5W24bRnat/pFYBnAP7xYxobmMCHG9CH38q4wKBkef4Zg29RFZqA6psEvBUBfx5rvsyfmJJg4i38e5e7VRY7H7zFxmiBv7Hc7LBqNla0R+WqOix5V/mVD93wMej3X3CXfkefA9Cnnb/IaT+2Y5mlaKyV+QdUJbr6fvzle31SWwovYd/+BDw3Vuh6zdlYg2/gC0hK9AOA7xf8rlIeV5/nSHcr0ml1ulgLvht7dODgFB7Y+Mn9y25CGqbtYJcVXvvRcoHvpbiA0/DaEjbb6qaHIZnTyfi16YyKlFUxsuPP63uCu15mz3nMsEI3jxYNnO+DLqHg7uI4A59sbUN53jsLCZWk9BzogZYBTnXbrtOg3GcYzO1QAS5OtCO3c8nlxcO2jr8Gu6HFhusJD9wlzoUYOkuU88j22X3H+C/QRdhbmgvIrIPkoVu4nJj0oJxttB1rFxjdzoniESyXrnQCdadTrOCf/mUl3ivdKdlhh9FWoWy2/foN8DsA/9aePyEaNe3Foth7vcwwmpyWSWzNqMaNxONmC3eU/6//0EiSqDGYZg41mP7giDFWaUFsJ/LWJNey35RCX5eVNuqwMokaaWEwQRsDlEjkq/BFMURIJ5BSG4zauLQFemkrJr9tzlRKig/ElF5a94R0CGoAIgcwIoqcFEgGWUSIoKxwp7resvkU55kB4nLdujA4zzP4NoDpCCbg2RQQQsDN558VedstGOAjMHPJL4WUNk+yQFBYvZy4MADUDbxaabvUXrVairaB9ZWHO9NBN0ZEK41+bUodrX2XNvJvpXOCu8sSLaxy/Hbf+/VdyVVX7ya/p2KGJ7/xYIFGS5E9RbVQPFcF+pW20ccE6MtERe37Q/Cw1R2Au4tMWZ/rO3k6shsCCEAIoJA0FxyUUFbiDQQ6BGDK958nKFIswtNB13YFQiV4TgRAUqCTKN+0Ej1JkxUczaCKgaStl7vQl2ZRXT4XnAxKHjbG6Xol53FQT9YSK9S6NTGhO/6zkz8N0rXlcxeT5yMfKhbWI70vTmCbOLT1VRYhEld+sGckeQkuMdB8y6v5cyb/jnS74GYMpD98BXr/k1LSctpK++G3OvYQJwXkZwD/iqQ8F5qQFjCRkvJcAC1RtUpnAG+p3DHPgVplj0X4hWcDLC+AlX0aIfYtbthWz9rtOVK5OaeGfPH1n/D+h7+34b7Nz98pt+dICrFXAH520rtvske5m2ENQF90ETIVJNLHvL/7ue17YoXuxbNEvyCVEZA2cHyDdSX6yNLcpvsYLNJPoVH9bCHZ9DA6jv8k2sLEiQOgDea1x7ueu/RGEUJf9u3auf1mBQYeSfiw4Gc3PfEFdieTWMjPGjjYozxf/L7y3nzYWP7bgM1KBPpV4YM1HlwceQIzJ8/rhCp41B3LeqMqOF7rQ0+AOkV6/n3c7I/w1CdMT6jNXUloCdyvVSatz0VXuj9amztvkaTl3wD44V44enx0afnavZPlfU35aH4FsHOSXybxoFigA2KTTWKxLGmUeKjFol2DOxvADfKQ4/SU6G4AK9tCsXAvfOp8MLnZOSUnlBXvzdHrOg8dRhU+uOSJGCBOpx2mGlO8M5BMv0TYIFJndfRZSQ8qAAAgAElEQVS7iJuNctM77jweGZGS9TtPAMUJN9OEw+cHEBFmnjHPR8SZgJgNcrKgnaY8B8TcVqwytcMEe9qvg4FtEXbxPxB6XGsoUjFr2ZWHk8eoM0BYsyFFRSMbPDB4d0mNA9IdXc7YuH7iGPoB6KpA/1RpbTCVSav5lW9OR30qCnYNZrTDXv637qayiRv/1iCrK2vtLj8yvmrl+VI+uPxXw6l7z5NVqfoOABMBU7r/HCGUq40jIiK4/PY8ZjBVLovJvNFUssYFqVCTJC1Z0eu7nXUW7RzikIElit0tdWeEiA1SNPw04NjEzzY99axPQdB9Ln9ry0fiM7ebD/ukLSwFRAqI1uByAz2Vvr5ArB9EkNFZaKMAIyYGWLR8Uje58SngzmAQcQu2bR04OyWbFrVYD6OPC3Vohromb+L2+1fgtz9VBSARMB2A4wc1znBSnn/xCvz2x6SElHhTx07hGVWhyADeMfA2t7umzeWDrDwrDhkYZXFUBOTyXfGvqsEvl0F79ZzVBgjNgsTUPth48sOWueEF1XKTDQaGJwLhi6//A+9//Hs/T3+LJNSZTbyXuud7K43uIX+TebGkj3IntApcq0TXtCRbkA0Ep9A3+Vcr0nV8cly7VZC/5eqmaasi/awhlOpUtIe6AI4wQj+P6gJQYwfXax2EN/XTRW77yij6pXhG/WopytKJB/hqS9it3/R4q78HUthNfQsmkpHy2ylmAA628Pih6hcoAqVWMNa/3ylZPGTL65LUYbMT4vA2qHplJRsetQWQG9/gt/GghDJNJpzMNP50+G4Gc949IE2+1yXSDXRPM+oshx0sVpxH+bHlYAq0s0oepOFGS131sI3TqxpLWzZWeDjUhE9dvt6/qrv3Wb33nMD9Aiv/2E63c72xlfQG866cTZqXHmeadeFJge9u7LvSHZGesEZ9llfq9Vrpu+jc4hoMReV5MGyUNc7XpCzR75k2KV+Wwp+TOPvl04xdXgK2gE+g4XS/Msbb8NYvrfhp0uX6qBThrb2EHDeeHAsbRU6hPNs8lYnbwyj7SFv9l1GppKfiH14raOZtBtgqd5cZ6PwWeKfSlrIkxTOAcm2gpKlPwOIGZCli5OPQGRw4s55PQkW+MlAwKbcBGwt0SvnmnGcyRaHT45gfZsZ8BCgA8zRjogMOgRBupvIX5xngGckYnstJmOXqU0ZT3qNsum17hLsGVJaLo3S0UqJpf874Y9vn0vi6Vd5uTyiSftHklfquNMR+W8kd4LYH1VSYMms4i+1HY1t2IFBZk0s3rcPEPa3TnyC5y0ng4kV2VaB/6qQbVjOHOsIi7/0pklae31d2OmVm52FrRHmSr79k3CpIgRpoZVIKWXkeQPnZO9k5KXVCskAPwMz5qHbmfOeLmQRK+vlF5sHsVo5zbwLYKNL/AdTqhbrJYklC5dOSTGpII1C9Fs8SGB96yO5SjkABl+mR0B21apXoTVSOf4U4UpHmzBhAqX8+bsr9wih1a39RxzIUBB0BY41esG/ZXaoBE5oFVnVcYMkS6Y+qvuxCZaj4EJ7sWJ79//Er4B8/ttj3cAMcf0PT4F8R8PkL4P0vVXFLSAqf8p7b8JSD/ZL5a8pALWYIoMDgcrlUs1oa1I1pt+S14xOIzG+mfn1yZnpyF7UZDn//9V8AAP/68a91uAbwxVd/AgC8f/93dDQhlf1zFdd9KtGXjk/PXahYKEue7X3ouuHNSHmCCQv1jZGQq97A4SnypUw+R6sg9+pZLPvfIynP5Xh8608U5G9W5utVRfoD4Ch9d/sW2mqdvmluPWUC3kGbipN85bQNu5XNwfQ6dJehS/8FQro3owyWPXmCjq0YZJPA5aHpnL6whqsVaSHVqax466G9Gw5o8Oz6cyR3w0r0GvLesl3rHFuj8QbPjXR2G93RJkZzOVk/K+npTX7n8r4lDqU8117P7toXKXtNS5jU83fmvLiW/Klj/ZWu1JE3zuh27Ky5NLB3h+cHwIWfGq3OuQvuMwDwttOrLk40wARb6ZzBziiwOpmGiZ8Wvl2a1sb4DdP32A+j30lv+nWRc6ooSVS9as2htcjyR1jGj6feVV45URDVSWeoRAd6UyYlGzyHpe4UzJyezqcWB+XEuGlzpj2KX2aAs4wu+xTZKRvPqWip+NMydfmur7giUwwgTqejHiNAjDkAdDwiHA54dgMEBNBhAt0E0HFKfomBmXN+bB703OAVsMmwtnre070kmNoI0rSDYVxbKv3cfs5YHDaW+Dt36ryLIUr6le1nJ29SvwLWx0RXBfqnSnaLxgZFOZHck/1EQX7DO5n3S6c1iFftDuy/lf+cb3ViaRXm6a8cf77MFKrQNiQr86KsVX+HCThMoEOyPmeifO+53Hee0Z/wG1TYwke1RE/HX4e27Ecc5ngCiU5OkKZD5aj3DUJRC/qWghgg16waRAirgF0DfIYMrJFpj4N2IrvRSql0W61Q2gTDgFKhIWjOheSBskULt49AKtUBSbIfap1L/QvCV2FS76A2ns6CegMv7gur9ljT6Hb3rpFm4Y9fAf/8salvvrkBjrfFL4GA1wBuGPz+LXjOiQZOHfXIycIcSMrbiGyJ3rYjWUOWhVHXL+2iVLdHVY4imMr1UBaqJS3TFzSNFpJuOdkFpHl1NrQ07t64JHcQE/DNN3/G9z/9DXbR8Puv/pKU6DVnKUlRPOtyYySl8hEt3bclukf2KHfNs+RFK8mluLQSXZNs1PAsoxlja3ggCbwISUEuyvsjegT8Rf77FX5XJQB4ka3rldn7qEm9zL+iSC8bHWiD1fzaWHECdhE+9ijSbVJ6biDVHwFs7lsrNF7D0zjbS8VBG75viQdAqdRm3BK+yKQlD2/qY8FgXyIQIRCBicB4jShjRvillVs1uGOBVzvFWCtv610LiGSnu2APfezhJWGyx5Mus/teX9jkbPnJxNU4mzKyUWRM3m1x1Hnckt+yeewEKtHa8Gvv+lNUfHjfVfjhNUvZz6ZsSHtwALvGX138Hm8OPtd12czXtq07A4Y33xchpsZ5Ou6WhW00GOO8Ori3rtIM+gqHel4Mdi7BRvWm3U/MUBelXZONsJrDxknpn1MRdF7aV3pAMm1dOzXenLa/2GTueQ781IjM76j/BfP9Ta7nFwC+BvDj3bDn08Z5bzX8BZNeZIXPHBd1VM6cuDbGN3wsxG3bwiCKAhGofbdTozwIjCgn7BV5EbK1NPoq6SDU/vJrMGnBMiqu0TWO2W970uWG+7msvFDLLvN6QkS17XzbWqEXloueofpvObZzOWr6Ucna9JBM+j54Jw6JV6411H9QJ7yqpIiBWZiMAEcGz4x4nHE7zWnIDwyaAqabgJkn8DGmMo2c/tx2PWDP0mDKkePvy9CmBW6kw6nCVZsEeLiBc6UfSapd+1P8oqblhNTSLsWnyqgum0EXelzETVHbMYuh2mnTL1fWfZfCrR8Z2XV5N+SNlh4n0lWB/qnTxgm67tSiMuk9PSLF/6rXlrZ2tIGgbXO4LUBP/OeddXL0ubtpzYbPynOaKB2Vo+MlAFMoCvR093lAJCDGuY1HhwkoPEgrYQQFVLICXedzKHhM/wVQ0bl0eWgcvXjWVkUD6jaRGPcCFAWI2FH51NGY6jGuWpit01dKcY3dh7zrcJ57EY47QkC9M3GR7cc6BlCbx1VyMisIWaKDmpgTMs7tIOZkCMkyHbUMVazNokYAq1d8XdvWYFaDr57n0VgzPKfgP74G/v6DihPgww3oeNs0aX4N0ATwr1T7dEDK/6yAOVCVgkVpWtNuToGwAL6Ac92XFNrXluh6I44UyRxRlOijhss2jVpC5depl05ZInG4R8KqPNv60FbiIY3b3371nwAB3/38/xr/v//6f+FfP/8Vz1/+R+WPKCl9GUqRnr9pJCfF9iWSwvnU480vQaJEF9LVai3RtR9RblsrdKAe9a6t0IVEia7L+jckK3QgKcdtGI/sPeularTm+YWat98uD/9SBo2fndjgkqQt459j+bj2jihvvgMciU/zU2lltbsHJ3leafCsxxtyvi/FY4mBpjF3fvO42GwUFH5fteNCAAIFTEQICEj3/gGR0ng986s0z/AvPbzw8qd5UgIRV1gCDK896I5wvyslemFWxztIwK1z6zBoAJsggBO/nYYWg6/MwxZHilvnbzQvnVrwe8J5WHZL4SkceULa440I1I5JDQYy8+wwchuW2jmzqQ/BGOK/FZquZKJ911ZjWzHoavsepHUXtNoOB/jGXazpj12FKH8Xztdoc+Pw+yVYODGCgkuv9KRoCcuVOVfG0VF/3pjWWnu+0jbSWOOUPidhZE1y73ei80lsFxnFqTKqnXJi58vpY9yore/tE2Rf2HEfBGqUyqjLf+IE2hvxpr66h4pbxR6c5H1Ry2bYrZpLTAutQn0bLhHrZLHC7iMVj1IYY2b1ptyBDyd9pAj1iVFG1FTLWcoueaDISTyX10HpCHdZ22AF2lKtagq5t9n70lkNA5RPT2RgBnhmzMeID9MtiAiRGOEQAE4WATMoW6LPionQXuMVMbC1YfPGmat2uZceqkMpS1WGNvKas6U+QavtppXPdSzvIw+G6iHssc2Jem0xdG+xnlQFWwzIugHIGiu92/04j1cO/3A0UqRb4uGLjmz8/apA/xRpS38zQq2qzDshvbXF631RmWkMP6NBz76fMT6rqW6Q1lqZcCuYyYBAK1aHgmNkf4GAMIGCTNgJWJRTBaYAHALocEhHz0wh17sDkESoSQBRKAr0FCCggA5u7wJqNmAUNGOzWa3d0y499gFaCb4kaFw45rzwtfBun9n5XSLNn+lTXRqqebQDewtK1qyfNEje3GS18lw4+BjX6ApoF4e945EsnMCod9xQKW+mWAbMKqttB1CWPlWd6ktX7uw8y+LC8+/Fa9z/+DXw9+9bfzcH4PbYsvV1fhDlOQEUMv+zyqCwhKyAocyf6SM2y3psqEARanxweGfzDqRd3mvH8w477HKHZu1tMRML9BzA66+AX35U/bxW0Lev/9MN9u6Xv+H5l3/qP9zqOBQDYr195nx1URIluubnHVKZfADwDK2SXHj3LMTlm2elLlVoleinkI771vOQO0Khl4Ppx5zh7vlZHH5o4fupOGpJILIzGq8NuiS4RcZM474afGNn08Os7dLOmnS4SO/I1G8znBcg1ApCOPT+gYK9JiJMFEAIeRhPgpmYgc3MEaAvATZHSbDzNyJdDlB+H3JTzdm0o5Hq+t/SVi1EF1xr0vSwlxUS7kBfC8ykmNa91nWB8LIwk43dmjxoDDjgoYMmHlbZQeQMEfqDjtpW5bkCNI2xnd3IQ7x9F7SliS9Av4ejBdDpWX3fVfK2YLxxfun7yQmfGPahhb9XOo+6tb2zSDHC840RLny/tpmzaFBFQz9AXae8z2G+Qloj36MS/aRav6vmYpppl4SVbZycxsKaZRS9xn0edvcKZeNaqyi8WABLiqcYbIuMTp7LMq42tPZayfxSYJzCcwvFlkSoXNMCm7lEy7dajFgjOIEcGYYb58Yqr4quuoGXQsjlGWuc7C3RaslKU2FOx6sT0ppMlyeL3DkXVQQjsDnDlQgIaUUmN5lRlkOTWGjHvA+CQuGZY0Scj7i95ZQuJzu16eaAAALxjJnTNah5sZfXfyEp1rO74E82gxSRX1a6JJrlbtfEbYVQgR+p/Lx1wyiFETn1v6GZ1Vbsdezcjpu17Ib1zJMmrksqrm2h2dhLQKtsP4GIcNodtx8ZnVAEVwX6lRKVOdZ0xI9qdwtVy8nNQTYKeLtgXhoLaGiRJQlXJ840mYrQtrLYyLCs0JZCuvt8Ss+NEHgKwBQQbm6S8vyQzmUvVxPreEMGjSEdP5qs4JNFLkN25OWATG0b0kr05nggVgLhfEw8qz9bHHpm0XF0fpyysDRs80bgoy3PybwPE9kzuVHPy6J3R/Cy1/Ji9K0Thn6MlOvmFPxhqrwTrnbVIMhfVlKDBFnduy7tu3i1Am0FLFWMq7X2+5fJ8lwCBADTATjOCowx8FVaRNCvOf5ynB0Bt7kPh5yfYPJUlOiEti863JV2nMeVkj2TI85pGPyYHrYKp5b66KivmMoeHUVqLdvk/bny+uqb9Pv2h9YvgH/9/P8AAL9/9Zcm/ne//KPmXa+OSh81fGglOmFobXqv9Aad8Xaxgn6HZC3vVY0o0b3jSGb4VuhAUqLr6eVXVCt0HcZT0lu6yWlJHUB+aTDPa/JNuxlcjZnfrcQxtPQ7B5ttGNulXOZFX5kVUu3R/wwgYYPkYn5Xoi/ijQ18a5hlvTdj8AILnZsZdCjfFUBynDvlsZBAIVmWp81ESUATmSsmIuAQCIGC2nyYhCaRGKEM6QEzGMl6/ef1fAsfS+8PPQ6cS1YY2PRJ7S23l5V52UnA8Uer3UWObBdq2ulanYws1ndSLRovD9az71DLTdy5+RnSmd/LOCowAHaZpubowXS9mUx5D4tpb/xL1l2bwRn68elJkZdRnRke+PH8npg0gH4zpY13VBHnFPypYfn0tnylh6Omva2s/ffBnQ1ygDOF5k+dLp31zfGZ+mQkiP8awEaIdjqdMUjcVXNZbaeqvE4eHkcBd47xZB9soQxkCDxgvii1Rn1fPpFpNsrgiVDliUqOU1m1WM6fK6pS2JGX6ngkspEhGYno5nKNJcmHcxKeB+Wor40KROAAxCi4j9sgg2IXcVKMDCJGwJSLl8qp6VJO7QFbeo2Xa4EJEUkRTsz5LwcIjBBSYjGvETgy5uMRzEdQCDgcJmA6IEzJqIzyqYwxRgARYUobqAmEGCPiUeRmOS9m3dm01mzZ3yx3cxhWOL6t6pW1B+BuHq3FuzaQuOfGtkkPhzH2/TWZM4v7Ll/nAqnz2v1W47aaJfbD6TxDXwVW+eur7jTe73Vj8D3TnnGsPwXARtaHuSrQP1lSHdIKXuzzyUk8zo45Mm6841R3OW+OVQOTJZkAhbQVLrRgkHMkRIQwTQiHQ1Keh2R9HsHVUFwm9nznOWVhsRwjz3LfeaQCSDhbYVWAYtpYBqGcfbEAmxir9fka3eVa8smvUc3EayfoEe44R0D5VEm3I1KQWkB2pzjVktxtwGm1PXu7CZsdvVz74in0h5fAP39BydRE6bqGD7dpZREo9buvkDbD/oB07LXOckwLMGKA31MZfATM+2XQLvwa3Nt4JzRKdAw9Fi9pVHHum91Md9jYG8trtRh++TW+e/P/8O2Xf+mC/Ounv+L3r/9Sw8lvRD8eiXLTWmPrI9C3KEDvg95ifPf2L8j3ikMJFvL7EW2+9belvNn7C0ckFubecfKaCNCZaLvgYCAlL8NvW6/ixfI5UnZS+e8ypKdlHa1sUDgY3ppFRlnpPw4a6WT69eeYGj8vx9/oZV3Q581CN2HCFCaEEBAK9sn/ypGNMlZSht957qBsMZEBaiAGI6Z9IPQSjSW6HRv0VKTpsc/htj7utR1lPFuuavETb+YWZ0PiLmGj188WScD3IB7rKIDFG45W0qz54MbS5UGoaxeyaHMa+Zl8+kNDKsvTyuBTBM+WrmWwi67F9QTJyDPc79dKfVTkKZJ0Na1Vl96oTahK86+RrNHv9U70vTTAEvdGp4K7M3nuTqcbyCdG7KnNkU3IAhwyLilyUuUnMhBECWY+y/Ah2IZq8yJQ2ZPsclscLRbynKvMj9SpaRVOOXIV5nb0OsGqfEhaAM+clL0dD8k4CyAQcd54zZVpJUrRbMm6ilnuGg/JklyU+E0zEKkz8iGnSUHOjConjwCiWAJn2bSqq7L8lXCzJBHBxFn+TQghgA4MzBMOMwMHBgIwZeU5MzDfHhF3rCVcC3RblNK0CKgGX7rEVHFo50sPE3YNPoq/y/7W8riADOIRTNf9FWp2DeIs6B4B358qXRXonyLZnRZAFR7JDpm1nTRPkGSCTTu3zpa77E57f3LjGSEBLFJvIpz1EqIECCYqSm9o/4FAU0A4THnH3ARMhCMzmJ27z7OwOEzJiip9IxACGHIPtICfHEjAhgI/XQVkcMKRs/J8YTebDW+Ba5POOIp1OnN2cquwY/ZuqOx80MmZdO0O1y2d4oK7Ux8lkSoWtTZKxAYIckGtDDgI1sYtkY38LJU/b2o6brN/CeDll8AvP1dPU0gK9A+3SCdSBGA+JsvzI/Ix2GmlQAAwE/AWaTETURTpwlTaX0MusK9ZMG2ylCWp77I60d+kIgbxkoyCJjldCqNyu6t5QBSjQaVtePjuTbI6//bL/2z4+NdPf+35IrRKdP3dO9L8iGqJ/his0IFWia6t0IGqRB/IN8YCDhXG87dVzmkV6RPaDQplKnyL1KHaOXg7vQTjTT+12DH6BZbr7NRxWLdLIOVrlA3tfkI/0Uo5l7SBvr3rvgmvGPKybSUp1s3zt4c6Sc3LWv7Z8vwQDpjChIkmBAr4jEIz3n/I4jAGFyuIsnWQ0rjKyBgol3eU4VJbBXhCMjVEFgdbZ+Y2gcdC/dHnrqdBYPlZqNhVoQwN24zEuzinYWHeI+p5J/Vtkc+t7k6aG8mWfZ2GH37dp3ljhbPuIeGcJran2ZTjDh4vOUY9OlqbNC6yQDst7q0bWu+NBvPalR4xbaiwNfxzctL3NBZ+lGQWBHvEMeX0QRUVkLDrhHp91KMktfY+l1bb9V2O7YaHNaOFroItXjK/DSXcQSo/XWpantNNedQll059J+VVy09qNLLBdrNhQLFCt7zVfAAWVwnPfRopOj59nCEU63ObW599owwO6WTTtB5iZdwsMqKcCHS5Uf0UOSuxa1MQXpqUspKSc9lR8UgqvXqlaCozThsjolpnlQ3SEcAMUAAfbgBCMk4DA1NMV6RyMkA54JBCxBz/8QjZ7NGtfR1rZdcCXVlpi7K/sUT3YJnpHt2ajAc8GVoUbdruuNasVocQKXvu3R6YyIxN9n0t7PL6y45njyDDT5Q0jDpF53lwpVYpupV3cfuUK2+toEvNqKK6RHlxJztZGmP6dzPIGOV5E9+jVJZtWbiYBwKYKJ8abkfmhfj2FWx5doM1s8uOgZ6QrMezkisilBPYKQO02umtwojyDkgR1GYwQABnwS8OId1/fDggTlMup3TMDEdpw2J2XuNmhLxjLseTpeFMSnGu8CPLXTayE04U8RmLACFjlQza0ik3BZw0k24E0opFLQr0PR6SzrBMtxS+IA8nbOM+QAPN+ffKr+6DoZaTO5zmMmJKwnUCknW+lBMsf6o8XKGeLiuJw4QvSkxdnjYNyfc4+2pm0rkvAcooxu3XwkMpYwcs2DHLlpsou0q2df5VI5b5T6VFCNCKn7bbqoQESEtxNesXM/YzKiC3Y5MuR68wFYhPn5UfqkCa2wCVXgP4/EvgzS/puOiQ+zwT8OstEG5SRPEWeEVJkShGskF21nJ2U3wEIB05n8qPoX6bFYvJd85POQoLUm5RfXfKu2SPm+cMUUGhlgtLmTVjgomHhi/Gv4PkvbGFdT3Kr253MY99+s6NtLL57uf/6ceL0fQUtbvK34ze4vwXjK2+H4qWLNEjWqWqLY/mRHQ716GvY+31Q35+BnWMey4/He435a+pA9NPicCDI9rXSY7+drSapNqBvcf9nfDkzS0bKSJFImUtfzIPSftxht36Yj6yaaxqGm4jcMa2oog2PJKDo7qjeXU85tlCIjPcavb755f+d7meRijU3TEBhAkBAQGfcch33tX5/vNQmWEAvyEiImZriTTTiCAnRk7HtzMjma7/grb9wa9/Zzp3y8D1YgILRstjKQ+Xiipy1U+0hf3SUerdsXXd+sTLABe+ALEQH1WwzFnGvVmXoX1WIfVcW+Oo81szbOs8yHjllHlHIz8U0JyGI93LacOsPRR3ryzqoz22jmVsKT8erl3iXwrDFKaFNRb6Ne7JMyGq8tdtRDAqUEy29MY8wa4lTa5zrUtU2G6EV6TDoqajy0hIMHNhQcWh++BqWxA8uaXRjKI4dWIAXPw58ud6Wwu7Mm+Nxve7IrfdnhrXClbdxIdDlq+OTz6zzq90EpHu0Go8asjiHfV+KnSULnpGUz0ZO54b9lJ0Kg9l+nYiaOb3hXSYa90JJvop/36JFSX6OZUWBgxZWpjnzhknnOZey7PHXo2idomtk5nJv12R7gTBi+spKhjPDSvh7ZpDFQfl9ZZX8xTUZtoCadWBzd7x8Q0E1hgr76AXea/wRADyVVEhJP/MimGRsaq6LMqkEJQxk8eEADmFW0jqnhELhyofBJR744VVZ23BYQZRBAXON6+Sar5ckk0rF8FwjIDsL9a1Cw61exMBMaSj2RErwpyRjo0v65W8LkttjLMxAiNyXnGoNsFy+6Fc4xWnclz7/OyIWwLCIYAPQPwMON4yMDPmeAs6EmimfHx7YpKnUMW7nNB/2xIYzHntSFyaMAJAfEgnwSq/6XPbH0szsu3eg4ADBXDfZZz26pLXb3MG9g4UzVrRS5vbKBeMcFyemrDmocFiPFQ5lGDduq0uhEr9ZHkuGOrUU1mO1NN6U+8n1LI8dW5R48WKt5Sa8evNm/Khi7NvXNWMYD+lMlHng2xZX+m3xbVI572jBQt0D6GNuDsHFHyE5BXbsJGdFn03PKqWYPp037lEcepGTua1fd9lmXAnyveFAXo0OA3DUvOzSJ5lyWpaaOuBuXV38RwN2k+owloN6Eq88gLV3pBnX4LWVjFxVZ5PBBwOoJsb4HAAhwAGY45JiNvxrB6qRXnIQzkV/hqlKak2quPLx7+HSPVkLEZVnOfjcwrA03ktwFJG9QrGuoI/uRmaCtKIo1NOO4lofhpFby6fgFpW5U+Fp1S2GrywWOVr63xd3gL8ACBk81N3F2kFtmVSBNKGCckfifnq/8/euzbZcfNogg+Yp2RbJb/umY2Z2NjY///L9kNH9/TE2JbkS50k9gMJEgDBzDyXuslChFQnM3kBSRB8QPCi60LzN/kdqQizilcicOdP1/QSsWsAACAASURBVBEIkJMPHLAf/kZ6leFkQX/woyKhrc4QoJqSDS9ARhQr2aT6hQUa8Oj2QO8ELS6p6xQ6iALqa6A6UyZFkIealp0IV+BOnOdffitG/Sn1Y9qfzsDyQwn79Dfwbwvw21qcm48q/c9SdsWNW7hADGCtd/2asUfk2oIuUU06cAjk9YM0VamcISyl1Menpg9MQ+0AIj8+qLTGAdUFC/rJI4A/RPfWvgxg8BJLktoxLl1CvDNiV2j+G8BW8vMZ1ulKKE7Xj9jf0fyS9BWFn0+wO2Ol7LPJRfm2oDuCNem+qZ/1d9lpnqi3XYRrxOG+SETA7jj38nKA9PiUgN1Z1A29qocjQ+L7ZcS7jqV+tMhm6qwsLqw410Omtt5FJA0yGVtbMJokGbzfy9o30+7vwHlelHv9kVSaRb+diNrkyweUW+2SBNJwQR2hSET4k4EVjMwZzFzvS89Y22xaBvLvo94S/KDHOlO1atzx8faI/A/G5mJEHVxjERVF7tUzxZgp/IZZN7CHea//+vICatBQeVDPp/Euo7jPwcVr8SPZDeppr863PhMgx26SyltET7jbGtbsKRA9s7bogBmjQ2HSL6MFpT6g7ist2SM4PKr7bD+xEvjpkMy9mzXVvlFLrW/WhRh6LDZlcu/C56j9t7MtcbukGax1qQ29JwxHEtjNc/I9WsR9iPb6+QUpXVhdkjc3XXlxAiolL787dTksHIp5q4m5gGS7xE10e72/b7qyzRlOb46/KfymxxVhYVC0lsNhHL+AT5/ytd3U0Q0svBoVJ1eAE4BtuwNoTo3+QiWjVZjsRHfYe1xMejltnrTTWIgaVjDctbIutnBjpD+TrQgtqpfsvNzMfnhzYECm2TfX/mz16pgImf45rcFIFRCQVtVqpD9zS75DlDKvJ/MYzAkpK4OMTAI9DUlEMLiz8YhQjhEXx3ibRwTMvGxrS6pVnADKE/wvzNt6T1Tv9CYGlAvdSq/CcRFmocojUZuKZKbKqlwrqiMW/hlUFx6jnJiI4twmQptYI6oOSrH/1XxuhnKgZ+tAL2m46gf6prxc0iQqm8IoA5kZGSvOD1T2wD0A+QHIJwavDD4zKBGWv6nopdp+siAAuTYhFztgIaqb2rguL5UTy/q1YNTaptcLzDv1K4LlNOqQnpoLHdhw800FGu9E8uSUy2zRtddB3vaYLYI6ooP8tX9SfXvYf0ZR5W4FFn0q3VEayG0a6mz039e72ziwoRCUsWIa3gnWOTrwfg8Db1MxR7ciB9wF2ZvPWvyitlf0/Qj356bpROB3+ufRFYKgJneGJFTnblCi4R/qv1Mqk3DeWZuofFvq7k2ZQBKdlggs4G1DjlkBkB5WtBABaheWV16y+ogg955nu/P9XVOpXzs46TZAB6yHJrYrgqPcB9n2vidvwG4EMjw/8s6gqedVWtM7RVv2IzB/Di5qZvatEWfhM5D/NoFCMpKH6W3nfTT8wSQ1uvkXgB8+Af/+W+nrD1UH5AycV+D0ofC9PgGfEvDrKidT9/TMJEBVOKTKO+BneUmAWXRAvWL1xOFeNQSG1UUTPy0/4f3C+EPmEVOKMV+GjwD+cO8YANbxTvNqMIV3ne/cZmG+icMcO+9em75g5El2p/ud6I0elXPDb/Oo29pb3X2poqi2u/OX/l3qdJaP0IoiR8sX51ihQCS2ZARju/Ij4l3oQRJU2do8IlJFkvBAd4r/pj4KPoh402NKaEhd0Ym84UIYecDkXXv/TOOSKbuSEQKaUiSUSRKgjd9pISyUcKKEUzrhRzqVXej6NAqjEntGTAkfwPgDa5lo4YxVJs/av9/H6tbGvZ9DYhfmXnRUbw6L4dSnzfS1PB5s49bVJuHNeMzB+8nzEE21eeN1jodtGkGgvXjPJeOvSnsCdEGZD0zKD3Mfl07kDziFYHec7vC7ARE8j0OQW5r/JnxzD7pybACe2+R4w3Sk0ULjo366sdFvErg70C3Z3yrrdyv6ZYaK98W+K3p1HfOMFE8JbIcTuw3o9vInjFdUvTbduEBoTMv/nqe9fyzxS1M0+t4SbisFHnXs1Ew8Ck7r11m9esjbHOcbHqMg7Tbfc8F8nJyIaFfqlLvMgXKAukkqUp1Ac5LPjw2vGHzY0FRJdqJQyUTudR/y0sqY2zmfxn7o02rHZbidKMYMnFfwCqSlLC5YTsX1RszAuTjDjd2HyhMTmN3WowoSSRztNU64102X04BiZae9pW4Z0VsYbzwPL8zTs2d1sH8/w6z1u6bvDvT3SBz+DJ8bXSntR++++ObpHuUngQ9b5A3j/micrYSekpkoVD8T1dMGlAM9Udl9jvptWUBpKbtu62DaDkUmAi392BzLN/Vx2GVbqGyP6nO8bsKxgiOzlZ4zOOe6Gyujn+vzmqOnGikvZaOBFmdsyDE/Mlms7RoVdoR7HoQHRkwDSQpU6sle1V5MHRhKlMGhcseqH1ZG7w3YN/U5tmUuCR6P3XgjM4feE6yVoxwl1lByjoTIDtNtJYnUZ22fm1oiXaCZFcZl5/kC4D9+L8FOqeRzrt7ZUz2fOp+Bjwvw+azkkJ2Tjvp7ORLdOdHZl7V5jFQhdH+oSVGNPEqC1GvwsYF++0EfbtTDKV4Hw2inGnU6OsDE4BusFyn7xxqpTcDXAI+/lJMBjAHns7qyA2450d/KLnQg5kmqSZzo0yrY8ybXGSzd9+gRxokOtOPCS94b9b1+QujsDmlPqBSxctYfSf9RyXkU3I+zQFkEsKAsqpFJA90vh7gzS1wM/Cvk0rSDHvdVmCQ6I+hkM5yzR7MwtPG3ddOfe32phYAEYEll13lKCQst+CEtWJBw4r4Lpx3vTTphlQ0lMBMyM87Gcc4Af+4J+JM99Mkm7d2knIzSv64eTkvE3kWuaPsIS8zG9+E1xeOAkdG9wnnstJPnsGCV7PvG1062sE10jBc19h2gfoBdEF6l/Soo2qjBGaAM+rPBbCqOcWyT7RewQcPybmFKj8OgGo6AcBFlxPuW2eKK01Si5+vqvhqk9VJksOm1aVzLu8N+r0D7WM19J/8QAmHzeUxPDVrXVt0rictd6DV517beZDyZmgpDWl42yH1m9/kOBb82DX79vnY1tSI7G3p4H0Xq15S1oNIvJZosfl4R9FmL/66h4zU/0zX3kBufTq9Dir7XerhWZke8ufO82ZY+HunmfTZq8+iu/uMxIwJtjkmteowTfdRJm9Wu50jqs59W3Ib77mNNy14pSu4vbB/Sz2oupDi8xwUCw2KA2Y5jNe/ZdqwrFojIHGTaAnKuYqE/VMf/VlU4kt3yyMC6rsATQAshLQkPy0PDS/lpxRlndVISEO2uKOsYtP1YrghjVciOJ2HhgWDXCEMETvRr7oPWceN4l3Y0r0OOxDtokOm63sLpnuUX0BUmnyCvZ1uMNCiKDTyKdzr+35m+O9DfKWnh5fcMaP9B1MDTERypnZ565ajHVt7uJtQ7Tansfk4JVI+VKcfA178LAcsJtCxISz0engqgy3XVHBHVf/WqmHbOekfKHRYqQ179lmPdWZdjpvwr4JCd6HsK/OXIj2aRtTwZhUnVTQVsJCs66zvbzkGWIUs7yHaYAB7z0BsX5HgkK0izcl1BGqQ38OwmRu9GM+TjUdDYrt1AFkNCl392ixDGtojAiEpnfE/Dl/79aBvUcP9Cub/5P1GvaEjlDvM1A8tS+j8Y4BX4KQFfziXex1qOqQ+Pqtgp2dIT2NpwlneZm27B2i/b4lT7tsgxA+FOmLbzCz08uOi4TLYJLKs2fNM7l8i0WP4ug6Fp1QtxUP6GUo/qNGjk38tu9Md/Wablnz86O8rrEooc5dqx/lYc6Z4PzaPc697IX6C+t82jhjXdT+IngL64b95yAvp4p5+/VsZ+3sgbCIRl+/PeNy8Xn2Bl59chRjxcyTt11HHrgxTEaXE94JjktfXd6w0dUe/6nNKNYwUFvz18oU/oO40JJ+p3micq4wQzI1EqTnRayneJ7lhkjAsnNWo/M/e7BvmzPXFC9EM0bGj94b/J7zv387LzYW+8U+r21Unp/KE7KiYVDmuLG9FF0mI2rxM2so4CRmOl+Sb59XpuwxmN3Ysj2fCC6CO9StvcCVOacV0l7WmGkXfGQKo6v12N4+HbESgx04Uu3t27yav2uTvaDO8i3ztT1I/lQSZ+h/b9Bsr9HokmPXewG3uwb6Kl3sSY/sx0iclN6p/gNhlXfgHwO9TJVTdq+7aQcI/BPYB+ab7R/IlLboZjbsi2R45sjgsaKcQGztA5vKDzAqpzmm2ejbhji2m6el5MpTMLo+1TM3/nYuijn5lHXBtQv4vZ2WfyO8T91bJp8zYlXNuZfogKfznHccoR7Nhcy02y0ayxzm1R/iHJURidhvnLbjC2neDSqB6fZwBngOux7bQQTsupnPrKjKcFIDoXb9xS5sqIU53fIqSMcnJZWHf+yHYlCFom/BWUpk8pbPGqdGTyAFdAveMyN0SLcP/s+QXJO9FvWVBHIHPXOoxeCPTuNwK1D9NGeb870K+ig9LzTCvBi86bDKdbIGaLdnh9W8fvvEc6OOEG9Mk572SV2TOXlGl7CSfO86XskCL0HehYqOw6PyXQaQHSUo5rRwEscuwMESEl2YHODZDIAKxBQwnSn8uvhH4/utSBclLKnKYpTC6OtiwTym9A7gwLM4OZRl5J7qTp7UiqXVnXp25rnaYBRmoSONwN0/Nt4cKdLbo91KrqttsN/ff+ElQHLDfIO85nK0hn6V9AhW3vSXB1FtVPC4viKKb+bFcPM/QOhGbTanDagvf6acZTfZY28Gz2h+56mep4/VUctv8B4EQFkP9d+9PDCcV6yMCHermSOM/Fp/gZjm8e13UIeNPyQbUcIpuMuntYyW9KfWGM1IN3YERGcuhEh92d7G173Xb6+NXNRSc7L5ssbMijfPpl8p4AfP0NePzUnyXJ7J6fm97abvQZyeTTcNS6VJIIvXeuH6Shrgn9knYXiH6GddgrHfZaQ5XIzgLg3zDng9Q/oOMKH0b/neY5m7Wof6PPOu3ZyQLTfHUHp30j7kj/8WUloDnOEwAqzvITLVgoIWFBIsJP9Zh2YmAlRka9UqVEagka+5OKkcpKYWUw/mJ5V/9p57nXbXpTwqzsfsjz10dcQ34cmyko46wdJ2VmG0XCzKJxeW8BZpSOB5nTsdPpefLCIT/JwggZ2rf4INJBhzz2bDct+RaK+vixcLCpSz8DpD/dU4EFk1HttS5JoIM8efZbx3I4S/RZ6zdsHeVE5fnLRjndmNgmqnzVDuN0b2PWC54ndTqsJcV+Nbx9ugN4uTrqjbL7EpW/yWLQL311Dg6LXeVzmF7rhMF7aJxrOb/LnJaMCX7gHXT53sB9Gd18MuQtzf1tKKtCB8phh8+g/aQ+oqbN6AdlfWTgy4HxbkqCZQ7Os/i4GvtfRfPIMzm8i7Q3PejB7VbqCjwftWmmmd+gKwK5aPuEWz/aTpsljA+mxwX9rJI0zuMpj8GYUuMQiXPNJd5kXsYkK9fcPNtiB/ixSyfH8W9TNI27ywLetkva1E0HaESp7BUBtzAZaHbUXov2+b6qa9UXPUaze9dri+pcGAO5OM9xZtCJsNAJiRKwlPvQz8vf9ZpFAs6ExLLphEAJIDnGXeHFxgBRcbg3Tsbxpy+W4F4ywc9Sh8peu1W9e31g5W+WutTcZKwkF2wq0z593xmiBIP8tmpha2HyjbRZU3o+nvzR/te1mu0/cPUsthZgjJbZePcN0bBeJijvdwf6vUkb8y9E37gcv1+6xtbVznI9ideerdIfgJEGi/UId65xKYnjfCnOrNMCWhKwJDXOM2RZH0PrarVKaQqWCZB9WLSAkdSdn30XPOfc8iiDOWFB36GVATDLLvQc5PR+iFrbXRc7BhT1HvQ2mRwk3mRIv6h/Q8CsDZL7TcwMFO0+D+mOI7SfiCoM9BfyxxgbYuTo+uJa7+LJy0Xm2dWnaS62baCP2mqGkSprC7tRdm94SdBHAD8A+N8APlRnzlMuXejhoSf+IQNYgS+5xxOfoKxUpaD+W7lk1S2UYcRF34ihy1SdegnIa1lNm4DmwG9+dIJZHeuP9pKH2U50adxdLK3BJqk2vpSieiHbhppko/JP6h0D+Px7/w337blJ7/B+q050zZPw+BFVhr6gHXtu+vRB57lRc1s72PWFhkcSvQfmkzJMeDqShRbF6FQDIL73fcuu9b/De+NVGgvmQ7e3k4dMNmhYzbPBwyXfCOjO86Kbi/M81V3mCQsSfqCEE6e22zwxYU0Ja1Vo5f8+ZsjQIGuKVmQwM/5Gcbxnzli54iG1qHCYH9T6RYch9/xsNMMM8uoG2af633PZToOszYkNG7UNDU7QAeB/BHlPsN8lmFDBMb0Ycze+sSG22ewB2D5OeDEUyV3DJyrCcOqEjhyUZ1OlUrnKItp6L8XQ/UIPDZ+o97VoyHhEwRpE4Kz63OB4D4FlyKpmb5fuLP4vS3fE7d/JEmFu732nN0KRjpuE+07vj2YbCjSmJXTsKzdMfQTwlcrY8hbtrWenW+X9Qnv9sIp8Zn3KGE/j1vkOzm+Pgya86WFW4ws3f+RL10V3uy71bvGUEnLOsFG35qe8QSJzRBdSBkDcFhCQXH0JjYNrFTNb/oLsWOamDIsxXz39irqFB/YniTnjooppO469GX4ZfGbkJWN9yljTGZyWurMcoNMJ9FAipkRIfCqnRiYup/Ct9RTYmnsXF0LZqMZ9fswZ50MRmaudU+qT9ZzbPxq+TeY8eTtIX3hwW8XJFGh/UHkqXfEczRMe2d/Mm5051n8wfXeg34PCXZ4Ilfi9qcm0z2tzopBGnr/TdTS0/fw51LEeLJH6J2DKt5nosgGoqDyVI14c6EhUdp0vqRzlXI9ub5O8DaSO6Wl8N4eysiu97ngHgZHQb2bRAztXXMWgejxquy+0TSa7SeW3Tht9auin5N5P0QsFv7kbcqG8aVCuMpRnI0sKUGrw/Rx1fth5Dse7eXk0s3EFWQPyuq5LoL56TxAw9fCcmtwT63SislQg6yd2dXszQxaaWEjExqbyRR8WUOqAj7Uo/5VAD1TyP8vO8w+d+Q91UcqXugNd+Q/bSkSZqFO2nL17ibtTQVew6CotSxnFIQVUJ3rudSN9e+s0hZ4JNp3o/o7c1pzqTi8J3uQwQscuT6+ftxasgLrj0Of5B4oTvQ0CR2X7mZTfe3CiC+l70psTfYMmTRSGk5NZ9hhofU88LqT+fy2ajBVbokXB9yjcjLbC+LSn+TzjgB7ludm1PgHpM0CfgCT3mSckJJCarKHqPC/vkxHBxABTQgYjE7BSW0YIoCyzyqlM8vzFuexE5/J+ZcZTa8cvCNtQTfwYp6D+e4hulNbByHa8HrUp1I5s1u8GudVj8rVEVi5nC0434pf5kc5fL2Z/YTh1aXJUL4QD9TXiuz7xVeKb0vgTffR43PLdylMrTo0hPeMuz0O6di+c413nJXhE08f6Qe2OmkKy5DNWeCWKQFzbjOtVMdzzZC6OkBrOi6bB+cE4RC6wb45LJX3Y6XNh/CH3W1Uztf+uy//V6VoeJhhWG/2b45DWqYoHXZ8am0Ndo3EHEHLZ7a5vi67m/C7gje1vjfuH71vvXoOu5KOK6Oti3+tomIeZYGjyitoEOVDyCHOL8/yRt2+d2ky3W959HsDxGA1396JhwJL5oyNzOlcy4ss3TT969gDI86Nt+qOG44U0ZV11IqP+Y9CgX/tN4f0n2ykK9vBmeAE7QaI/M1JKDu9HHd/ZJi0feTm2QRnGdtpUb3IgAjLX60gVz/VzoupEdzzwbG5JO421Uhg2qWneqQ3ztk5GEGeu/smV3xXIZ8aaVpzTuU6/JzARaEmghwRwOQ12WYs9KafBIpd+n6X6Capssvu8f/RNEemENv2l7YWajLHLdH1puYq+z8js2J6F1Uw6cBzpgDBvOqbvTLO6ThjF3zNF76Y2rG3BbQ6iYr6tkxyuzrLXo2yMovrc1WOtMFfV/ygKZGDDgR4hgK0w3wnAi1XJYShyk0H7ne5OW00RAsAD8eS7AItUH9pYUo6wSQIQUtmNzlSMcPFjZVGUyjnLKoOy0VIDKAr+Af0o09TeCewnYUqBFqr/i0OxARRmgN/zDvTx3lOhAj6itxsN3epNA57JaE/+mZp8UJSHtx/eqso4zFdsGNtCMsI6F7DW+kEHDiV09ZA2sK3zyr2N2spESUeyIgyg76L6VkAmoUzsPjDwO4FOVI59kisQHj5UPtZyosOXtSfzEc6Qr5NytUpmV/wNRR4AXQ3QNuqn4jgHl99AdaSjT06LXjBJaUCrBNQ70TePJ7NJaSMIUFHbOOnbJZIj946dHES7bxll8sTkp6IdHtCDdIUudYK/Nye6/osvwOPjdLJhnG1wAUwfrfeY02fEpPP4Wp8fEXeOgNJnIKsj+w/RbDe9dFhn0AKlLzXP7kTHRzQT8S1evRzLuz05vnZcuTWe/mtgymc8nP4bntYzPiwnnOhU7jOnhA9Vf3NYWJucqI+/eMVfxPghVbyF6kDnjL+R2w50BiMz1+cVTaf7umeVeJYXN9bFrRSOCTuJzz5L2Y7g28uMnv2xSzecYOf6rzm96/c2PAx50PAqYuVi0uORzrzJcdS/A12oh6atyS4p//DpWnnzvFxRETI2beqhEc2WYvjJNv/gx4SNmaH2WMN8dJhFx/2KiheVnTRXH+Oc4PjqZelWHfFqdsMA9F6YJvn6+pj1vSPJHRmXr6F7HGX+Xumek9GvJvsX0nvh89noFnk/GFfjTKBfpfOR++1QlzrRfZptnmISfu/7S9E9dNbOEL39PrLjsT0uR+GupgAnBEFaXgM/Gs3QwBLpH5u8ctf1erFldAS8ekFUTw9F3TixV5bDfYTmYw+j4yh5nGBeQpkvpvrc7mBngKg3coe3av6obdAik+a42cfii3K1j4rTnNm1EVjF5fo9E/iJsfKKv1bGcso4nZYSZ0mghxMWAuip3l6aGJkYTGXRNXG5UqxRWTXQeTM2Sy+mwQ3cp0aoOfkDvLvRXTZpbz5uP4HJe98xtvC7j3oUVWt7C7b+Zs8vCdhFvp4Lr+nTCOqzOa5db1j6J2NGRTs70AfT9NkY+aYosuifO4/ofTTxcinNOsr3HexX0szQ75N3Zvc50J+30hTHtjjQE7ko5c7NRChH4SgHuhx/wy0vKF4U26RAiOGtBWj/mNshp1Cpl8Gsb3lHBxtoYxc1oJdfbnCKaJb3BbLfAJuewLyWF/mn+7VO37zWgBBdNvR77k1gy+pQQTTxqnexe7oRVJD6X1NL8uAK8GHlrU5Eg93ZzJQ+nhw9vPd9j0wK6BCwAZtOq06dJ9ksoatQpaMb65P6/DtKn18BWmuY0wcABOIVWDPwMQNfVP1+sUKTKTgGS7+IJui9nLWKr+A+1cUG7Qh3bsZEV4VKfju6V3Wn66D+9U70Vt8Dg+qnlgFqKtbaTx6kOz59mc0iBBVWjs72jvTW3IpXc02Azj6QyVnHuofz+6070T19+VJ4pp2j241MafL68Of+O+3NbgXtNZw8oSgp57w+fv4aPbkHy2Xy4RLs58Ve/x3SUPJ68ZDGqk/fkaL09t6pInxYTjilExY64UeUI9up6pmiTWUkL5MaxKTW/ff7zTMYZ37Cn2vBVWixLPKT3QVlpoQB/oIGrvyQA7itBxhlp4VXg0dQ1lsqflhIsCWHgeyIU5r0f56vsM3IVt6mIzgYo3Q3H2SPhjzDeZEQV5H7O+nSR6t8r+x7zvrovemnA0gc45k23Oiofrf78N3/2NEXrMJ+RCA/8ThoNHg7IWGSh5Ybw/eBcTbqk9OMeLOKTZZaLidZmzQu3f34omTx7bXRb6K3PC9x6LSGiiGMIonG8jsNonqX3z+V7iIzUR1qe9m929NR08/PxeuFFOrkd0C7E/8bY+TG602KcNIfKPb7NTvRvSxN6Q30a6PDbuRnhm18ZoNsHhmXtvVpuOnkAM0OCQ0H/nHip9kffTwYcYnZQD9JGm1OFbYPbPQHRnGodQe65MUHm7K2ucbslvXtZFyTMAB9tLxJyzv/uNorbcilarbWcgx6WOZ6+l3jDeLGhkBQpmbo9DmtJoupvFsZmVfkc8b6kMH8AWlJSMtSbkBcCEAGn9cyTZbq3enCMVHZHyfzDKmka7JqvOk5MjRoMUwnerMiaBT/ahTnGbZGf+/DzqgJvH5x8DmUtUnfHl65dKJAGvvvCvCNJG0GNLmkWVnu4NCWfEyaRG2hhdmJ/h7H/itpmG5QRf9+hPs9yVjzr0xam2qe3rKB+S3RRdVMXXb8RNZ0gsoZZ5SKg2pJ9TdhcIKjw1gZktcGJajl1e6+gdyv0uMCeiWf7DDX/5INqwpjVuyp0Yc5gzkDnMF5BXEGydE1kdZ6NzQbyAXBTMAG6R/RKO0Qj0NC4idnLVCyS1bvMmLFhyTRvt2CDiZx1ckG1wz44Qapq0mDpbKylkIHWw3LQD2PHKMR49rQgGdUg0P6ikblukAa0AegzaN5MWJOAP4EQEu5M0l2dD+cSmLrCvAK/JjrfWzCQ2BURgaYMca8vJK1LkjJF6Mef0r1RIzUHeoMtPsaTFG1AVT51H0hAq3XiqnWr6acLnFTPsWXpk81jWgyZIb1j5Th5tW8B0h2Q0g2782J/hVoFf8INOd0NBHWHOnYlhsigGXH+JX1b9r8E8zudvqiwkyc/9NspbHcbvld3LAxfl46tEaLpw6nIVah16EX8jCL526JmaY9sE9Y84qfTz/UZKjcTwdxjstO8rIjAJQansmp7CT/s+4wP+cVZ6CPAwDMpJN2WjAD/NkDszltfdvE9nfGTzPx2stG1G1zppN5fx9mjkahY1EN/pWowvdOGrNve/FUGIN7tuyCYSy1pw2x/D9ENYN8f7enI1vCEdZD30Hu047wko+71w8kUIPTnVkS7BvV72ycHQIpG/mzNgAAIABJREFUfKYgu0mDjEQUekRRzXoclbpg2LE1CiO3OFw77Nzcj54Zb3yn4/S9Ob5d2lps+Z3eMF3QKcUG1vSnSuaKnehmDV1zak742Vpo+N5py7xxQ39f+BkZBJGBPsvkWtJYCRZPtOwJI8C4MisOfjc8t5F2sLBQyxYRFX9tTuUkUolzK03nOUY7kYG+21ziKv7ayaks/KPeMz5MNh0jro55A5s9fg2wJgGgMueXiJCozBtmzsi5WpPEyGktx9InwnI6gcBY+YzzX+did8rd5qnwX9ZRp26DcIZMk2eZ8TVzWxzLW1AdsqHndUelSE4JxxdtHMsiTutKwPWcOC1Ke6au7kihFgxsrefk4T3Qdwf6c9BzO6n3OhWpF9GEi1lRNpH+bxF03YOmu263EJ0mB+JkxGt/FZCKJukKgqi/ue82Twk41d9LvddVdqErGdCbPzPKrqmev51yMysPfdm0jIEaWAAncLsBVO5E78Yi90IDYHAuPKzrCpyfkNe13vdSUMGblMK93TdmJWnkKZvF05/UQzS5Po5qLiGVRhv0qOBIY09U9GUWK9iUh3LNaM9gu1IvxjK4TeHu85JaeWbAO8dKHM8jd4AspyKQc6IbI0jH0+mI893FIRc2UzdOAKUDVLif0Xcu/klAXiqCrgbP6VS+r2tZiNLuXGMzwdpxkPRKV8OtzPoLB3JaSe4a1U705jjv5QOq3soqCeaqmFRdaEa3nOdah3pSyZH9ryfTxHY0ILuuk0fX13RX+wTgTMCDeue7ZdRdt3agD44K/dz++2eSL/pnAB+/YH9Hev3r20Jkw49tQupIuSlFx8VvhlezZ7zD9ywvrSMC+QbIilH7D6OMDrjS4UjJlyYX0R9S8XoQguvXaqaCXRSfQaQPsgqiWXz4GQDhx1O50oIA/PH0vwAAf+cVPyy109byZgCnimLOKsu/kHFe/wIALFTuSedMWHktu8+RsQpG0+MJE8DZFZ0BfB71XfR7cDrC1hP1cdKQhiJXE/c/egX6IGaKoS05IFlHr/oajc055B+kox62ChDHocn7OKLhZuhmuuxbeZrkJryod9ocMGm1BQidmri1cYKarNtAnuqd38O3yZi6Rx93vhumeXQyhAH92ypBGscRteKPc7IBptok6aiuXnwzkwovDfCo/n51ek6EXA4h0az8UaFA1N8nNN6B/tp44LXyvzXfW+PTqKKNnse8L/kBeTh96U4sRrShtr558rr13mkPpAZ62gzYk3nWucRbGp3egK65lpxCD4e5AQgr2/nCNvFjhLY7vuC4E32G8Xaoq6FXaK97iO8sDefIaXWj7okXsvPc3q73jYIx7JUkLBqOWnYCVNDziOy38JSQHTtI5dMg4VDmgMwRiIycGSn1uiUiIDE4J5S5sDlqH+xsU8yiP+TvFvoXXksRCJzLHBylDvIq8nNmYkm3OYbrOMvDpogo0+44t2p7MHoQy0fB3onKaWZJb7zJGRkEZCBnrmupCHRasJxSMRO/PoEXRjuxVaoo1wskudY/J+TqRAeXOf1FsIjBkYHuaaLNai8VV7usy4DUu322yWqKq9MBmT1VFM57HdRffn4+sJ3j6ba3NJ6pCm46BNaeU+137T6PI9ROjht2oitG3lLVXUgzd473kUYy892B/l5pc0wnG8Y5z7/TWyLqf4eJcEUadGlARQSiBFrKrnNaFvBSj2dPsOnVMCW5ep8NlTT0TJ2FjAqB1XGcFcs2A/1B7U6XCQI/UcAAMuOcV6TzGfj7CXxegbwCzA1yvOdb0DdJLVzoDsBL+qeMrApctMYj+7sBSChAWmUpO5nyk4b3oCmYmaCZZyMt3ZHV4cIasCnowe1E97aXq8pO1bvTAAj3iBQlJDzU9yIrnwH8C8BfCVgrH7KYhuqVCeczwBn4icrx7mblBEDEgw0VLaQtH2wbWSPFkTao+lLY6kSvBWjHuaPKnvQDB5T1woUZfr4AV18eh3AImfr0nlCc6Fz/PtX3oUyg9/8BwLuERQ58sFt3jMskjtC72oXuKvNr+6/ckT4LFyWzYXCVv9SfD1kslwqmmkVriwBUnjq9VL1U/KXwEi38gFMzQPN7m4MUBrHTePHCIkQiPJDCCrHC2Y4b7dyK+lSYZ/fW/fzD/9N+r3wGgfCfT59raMLKwP/78EvlJyGB8ff6R73yhvEX+oEfLQ99tURYrKDStdr36n+IH9PexGroH72GJuN1MzYb9ghym7F4VMa8iN9COi2zUNXJ/l697fHu04zib8huGxpnuily3E/7LwV1OInnPoXUHOUXtHfE/9bE1bTNFSZy43SY5HCijf/u+VP6qRkg1LFISzPgVTfJx/6bUZ7pK/qduNLn9cEpGa87/t4Mx2/pnC9pC9yTjpb5YD9xUPhZ6bWr/LXE5Z7l3kprDwO9Cll78B9DYk8C1lbdCq86YnH4XUh6HsbbDQllLHjErs6f79egTeeP2YDwEk6iKaM3pLmDVWT6MoQcrc0mZd/BlUfEZE7F5qAmR5jwQuET39hPBTsWTFTmWgxs2ZWHuotbbaYCJL3LKqZrPH0yaR/oGD499SyvM4Or45wyoDdOEMrx5syMjC7vIjq9j3j7UmzKXjHt9FM/R2Yg5Iact/n0krbEIyQstS7lpPfMjHPOOCEhnQjLwwmnHz8gpxX56VxOPEMG1mpLcL1/nRNYrRj300NebtlWt8Wp6JE8zPabwfeeQ9qbF3iLQ9GGOG6+ey5esJHXnh21k/QlPpZxCv+lKuHt0XcH+jPS7i7v21I3f2afp5PC7fNz8vidDpF2YG/ZVeLkLOfStLhUV+OlZSlO8iUhEyNTBWBEZYd6WtTd51XlSd5NDlR2QAd+A09arvTMUQGMDZTISjkft61oK/e9rE9Pxel3fgLJMe5H6++t0CFHcDDppidZzco7Fc7vaDNholE9BuRtHNa7znPuaZFKr9p7e5phb2zv4RRA3ayqCq+vFoCJE6MJN9ly7kkaQxm+AhbUjvLmVKiVpQvHrKIxxu1WEap1qE3y/sTFx8YAvsoCFQlWF8esufzLGXgE+KsUtfR4b674gkaOlm546/zkr35HhYdmp9T7qojqKkbust4sClVv7b2EHauiceTft7R63u2bXsGMKodOpem7tXrSrj0iMRFH+eqYPavvUTwKHgaBV3WeVX1IsK8YG+ta0k70d6N4twZLAF++9sUAj49xWDO+KaHQSs0IivTHCytJ7y6nI9tNdJhPiik9iaT/Wp6oWkUEGm+dkLJuFUMv5huSv8JgUnF7lwzKciTZRTEtajAB+NvnpZ+LrPy1/o0f6jHtNmDFRG4V0f/39Fv5sXp+BYuh6rRaQQ00iS6TsUg1llkoFDSAn9xoFaZ3FgRhgdGRTj3Yc9Ho3GUcH7xlrA8mprUOJ6Cd1GFnsa5gWP8OdG8wBh5P1+1R0eWajQN7C1Zq+ftx9xGv1CTKxnWnx1hlplBAVGKKJ2WiHea+DKFDnUyQluts8kdjDCNSusRAtJiJajx/L+aUJPEEgMs5XKzlT6ds5M/xrhtBF1Lr4Mf6aTZ+b8j2s+9I3RlS96Ljpgn/VwYeN2Y/9r0gxLRqyMoLub8mvYlSv4b/gybQs9EVUMrQPfi+Sd7hdPikgQcdAqvTd2g4aeLV5+teO/8bSI0jR/TpGORCgWnjGHd59339iBN9ppsv6kN37uhR/YV1egkmjCgopDZRNGwPN2moCAMpfRrxyLeOu73h5Pjx/d5D7m8EKoL6cAkT9TNF20ILRsF9fMBtxhUj1nkZqrZNtAHjCGl9JxhNnNykysfRwCTOcDkE0o+D1DcJ9aqofc47w43OrmUCqf1p8kPyJthJyw2gxOofAJYNSrKTnwgpFef3mTNyzqD1jMwJSyLQw4KHH3/Ams5YE2HFCuZzS5vRne/lSFkFvWRoYVsRrO2mEHOSSt/jc1U03n6e97FhAsImYswHaq9DMGQmKUebpuVx8xC1CcRtds9Gvo8zxq5R2vZaHXXkChAyz77Jr9MFb4GOsL3lI/3uQP9O3+lFaKLcPE5q7/0LNTr6uAlIKYFS2YnOKdXNnoy1Dk5pWcoudUp9sZ2ACFnFJwMWF4VYdrAvCNVMi5vQE0zQDkIezENBvNzBCDOwFsc5zmdgzWA5wl2y2Jp3eE/U2prsM/x7NzhfWXhZ/GCy0YswolWWL1TR7eimG1bOXU+XztpI3xMA6gDb0FdlVagHdt0QMciT0N/PACER8IWKE/1P5zwX6zHXvvQDiiH+GeW498/Cp2prP+lb5cQubPDt4mf0HBn5VmFTNU7WiR7ZbH4lp3ekofWH5bqTWCQ8ucRO6E5zTU9BWscsaDR50eQnWO7Vf7xT5MK7+d4sSX19kXvStSNdW4JBfzI0MQDN64PtcLEz3Vss6PJKrqFkskdP+uh5ElE/qT8D6NcvmDx0XtGH64nUIgRrpCt9GtVt1JeEql88pV8GDtf8K0D/2u12DQLZN2qGov7VdarxVBjPvWv0xY7xHATxUd8KEJLxi3z7OTIzMfp1x53P6xTcII+3KOj3l0KFaTY27aHOJn2NWt+n8fseX1G/JS3ZOwOR/+THiK38/bi018aXjGPj4F3/uvyqDmQ9gb7l2NdVzGrXlvRt2dakF/ox4npuuE09+mAfYetYQ0Opa120Q7vSD4OLb49u6ae3qqCJngvDHWoeNUsq9sEdxt05U69Er5j1zbTJe2Q73TFrvzjoO70cXSuzTHV6LGi3BeV+9C0nepAvR7aBfLvkFKCbKLKXojA3yqtRgX18La/tLnMzg3KrjXzTkGoNA+m3x08ymBkF8n4wPGzWkJmdMX5bPLlVN20RsAWrRK+kgyruKtOWzrFXfxNE1JQNJkeFJRW+LgigekR6W0/AY51fPPrm4tXO9XQ4AiOl4jgnSkhEyJSAvILXM87nDMoJCz9gOZ3w8NMJ55TwhATwE84rlZNZU7E9zclnRN3GAEDrCtO+jXHBrapQuv60OL3K0BLJsuCfqj/8buddPl8AYOhNQK9FL9hmfqr0n0w7DnQF4s2zpltr82o0ckOed6SZMwwTAFO+3JjnwW8bqwPfN/jemASZPYfJbNTBLP5sAtccC3WQZLyQo43lWU/oVfzSJ9zq4C7hkv3HMjGZKqykCiDTAlAqE+ekwm0AsJJTBSw9ZxVnQd9trh3pHZixnmCqQELATc4ZWNfi9Fufyt+81ruce17tqHHDmec0er/9ek68+RiqQ60GZxN8BoVR/0tkn2eZ6Dy87GowpOb2WqZqB3K7K1vuZA0Lo95KXkdlXMrTyjuG5yG8C0eTVrY43oI/DZh3RGJsuw50RxPMpS3tIJOoSf02QIpsm9GMqa3xFaBHgP9AmcD9wzvPUU6X4LUsQPkRxWEuXc7XC7ifjN5ko/ayql9ibnTB9bMrgl5lD+7V4nUdu7is04xlcbMj6y7kk3EG9Kybmj354V3WPL76HeU4fQB4qJkOjvT5ODwyr7gU3Wl25UdAw/F2Cenm9FbiRzy/E/2X+vfXZ85HSBzpRMDjz0EArU+C90Gv6A8z+dkgflTxPsdZDqwIj9I4n9Ac8dTvl56pXwY5B7DGsEGfDphpq8QnLG6TkuNBFZKdZCSU3d+NRw4iBelH7/hXAIQ//6yv8qderFP58fH0I77WO85NMpFqMu+cnhqsTLaP9Nl82i2G2qnRc6OgbVUU/3Emk7uNqMrinc4+mP0RfAuy16vnB1yjnqd87uARiRsFG5znrk6jDkT1GMy2I0e98zzXb6Tzilge8vbyg3JPouPHHHYTICY7plme5pVSg6RUhnPtOGc0ORpOkRgSoGkWfgxuXUhwlakLNniQdKyJ/DfIOjJl386wrMbRUs6k8mXaLLrBgC1bh0EilVHzDn0fjwB/nWU62csavgxrfyP8jCKErvWzS38o9D1J8NEt8XF83L4qvvSHKMxMZ6o+5OvvHlX5WouXhK6tbqHXZH/a4QL9NYwhAMJj2Cga1l0QUUrjGHGEtJU7CbBNd+nHtzT87Y0+jMdRmPD7RpzdvsRjn/ZYY2Mn+oDnd6qwnOozs6U3eLyI9oRVpzsfu45lNbF/q61jhlpVUdtz3VqfTvjYhknz9GYhmuPZ9V9WP7xTU4Rluls04BnBrlSP2Y7IEnPbOT9m6kCMTtRhnpIUK5EZZWfXL0GSRr87nXwD+TK1jS8Vt2WAUnGcy9H0HX+yncZuRWJVdQeEQXCsYGWUo9pJ3i3U5w1XAFROYs1nxnIC0o8nLAnIiZDBoDWXcudz70raZmgnp0kZXduIPMAuNNFV5m8CDWkCn/dtAeiA8TfhfZoUIXSimyC+38RBp5yyfyD7u2Ut9jBsW9zsVzsQPxC/3frfSmpaT7yjsnXjz3TnHk9Spwd531DRz03RTvQNBzoHvz33XoH+gygdBQ4xHcRANnB7pniw/yc0xUzkGM9nDFIb7jd1yja5UYe4y5Bs3FZAibjPIxOXq44Z6JM44jxfCDnJ+MkAVjTHdSo7zikROKW6ErPGF0eWgPkG6Kl/S9TmiXKvAQALwPWfPkNVjmznqmSaw3UB0oIERmKA8lqOaj//DT7/BV7/BuczwGuLwyh3kG47zvU7NaD5zzl4H1E4rxH01E08HgHW9hGQNqheRWrGlJo0c+lTPVZSvjUFbnbmUvtLCv0xVWc5uIdvtsysbrklf+3IlCj18VX4HhJTQFv9ttcRBYhO5NSTiABTeGpBhA/6D3VegkEVEkQhaj3B264pUAm2scELnqCt3HWA6HKV51CyLwT6mMF/nSowloJWnlauzvMM/F7Sop8BLFQA+yeAP5cy8mNt28/s6pGUBPVnYy/o87HCf7oPVuFJXI6wSvVbWzpLoMxl9W+tC16z6u7U00tU70pXJ1O41sw1r6bH/IXuTpYH1SJt0PqWj6z4mpF8+gp7p/jX/jE6aHe/i6mWWdwn3/91vzbyvUEfVV0tqMdVH6VbMCADv3Jxov+CK5zoMnhujQtwukKNn3/oXekzjHstRfJj2173uKIbP6nvX3ocSmhOuKbX19LJ+QvKrFtdDMBf2pAOegTzl8aLON94ADGMYUELoPoQ2ZsncrthLiYd1osHF017EYnMk/u7unf+u6ZZlm3M/R0A8PWJu/wPpxKIvMmrqlRE3xiZ0+lvGJiEvpghGo5NNY9j6rQ8QdSO+VyEQ2N8IB9A71tuPDbXtYzc9HcNymww4XGIX/Chx7EDEHEY39UYTCp97i96fNLhqUK5ekVJa3OFz3RaVYaoOdSjwtpvGSu0w03fBBCW0bxTFSfiOV1Uba+WoY+MBEJCKhhS5WOwPbDhM0xVF1Xs4bG80QvyLH2KlLxG+pPV83jgZzk201VWE/+o4lUdg5DUby3JDeqZMdYJ6AqrO5wO0P3Bl6jRoniumL3tTA+d6HqxhP7rO08nCh7cVaD71JjnIggNo/n+P+Pgksz2DrymIYTPe87LISW4Qxt6Xmg6DinOfZiooUzcirGvJa0/r6Fbd3e+JkWsH+VJL6DaTXSWz5UVIIupgnGAtp4rd+vN95be2nC3yEyc96Hj2BWKvobGzRwt4X0i6ljP3+Smw3xFv3rKZXFUY4YLJEgJA8fhIlzZtxRE2MGj+bhdmXK5y3nAcpIy9b8Gw9bRsi2cden7hapb2H9gLQ7s67j4XKPjzsmlOcP4udlSgi8JZW5G7g/2mIpRnd+JIG6a4vystpec4a2Y7XNujFzT09Mg5W7wrPJSzBszms0foDh/eV0h96kD5Rh3IFWZsZVbnNKrqRKujngFhSGVIps30NLyiM4k3tnjjOYWVv3f3h0v7URITEggUFaYt/LCS3FYAwCfU93tzR1/1TyM+LL6a5qQQCmVvCQOA5wJeQXwdwYnbnYHFgI9AemvFWtKWB+XsiHjwwmUMghrmSP/W59umUqbQ+bpCwOJGImSsbFY9VPisddraMxLMnPR1JMxhxHYbszVt821r/a0TWCBtRx8g8jIFCSZNMLBzYwBwjR2MEptg3BaIyiLN3j0ibpus86QxCYdCxiGSu4YdVc10zFj0MVxJrr5mgi0Ii/1SoUaVq1eNku4QixS7ZaBwchumYwtRwpgwqgYN8KYC49wjw2310HBtwLAe7BwfbkPcT/rAYT4yM170muvTJ7R7P7RTXZvKEtznncU1tpuL1ljIHntRmhOdPFBm62aaAqoQX4jAxVcEQHVOd4VVYbM9CT5DoDrhFa/F0cDDpUuUVmhV5GFhcippi3/lmr8p457piAZFXQxiDNSXpHzCuTcnbw6kh65j/T1qD00EJjI9LHTGA419pDnsJtGiW8DNKotuEdENyyk3kaM63loaTXgUAPLbnMBhJ71CDwfEvIZ1HUTj5spKPDRXmnwG4y8Oj+Nw2SVKSLcpArarYqateRjEF4whquG1Ctb9aR+Y10BOAM9ImBgoInlOWfwn6eeF0MZPFxWpa65+ty4GN+t8FUWPs06Z8+7TRYP9zyrOMPOSnQjwNSbyotUXXXsX8vWj+EqQErar9aplLH9jiVSfVY86yLq/hkk1PgP9LVvrkGPKFmRb/pOcTUZMprnAM+M8yM0JKfaXMuA53WW3xkFFYoTcfco97E8V9MvNd/PewF13vpvYA2Qf/bKl4Cvaqbq8RM2KZKPLdbGh06sQ/g7dx9RL02DOM9J8T4cvxyOfV9U35QdsiIbOq7Xv6TwCFp8ndeg0aO+JL91M7ELlCdxhvZrhervTrBhzpJkWYmx/PBLj+bbgxmgzwD79lbvvDj5ga4f5dE/yCTldKCmUR95mplZJm9fpgmZeg015346wY7q6Hm4sEf1lYsXTZj8S+pQf4zMzmSvxR1pyo1eUEYojnGtT6VfSL5EYMHhGkM0zKL5VP82eND9fFbXw3gWDMsDNpmW1dHHXn6kUpY26UZ9F8tWtRe5ogYBxrFZ65OgkVrd+bD9XYgqt9TyrLwNJ40VSIo/Zivh/fhch6kSoa089nLQKqM8s8GIKr7IXFSwwLmiedaJjZLW0yFX721d70FqxVDyR4NDBUGb+BDHM91zks379QY7F/IQ00Y/OxT16G3YQXSmQ1nP7dxby/6Oaavoe7JGs3p/ufqM+sN0XJEfvHeE9BFh2g+ymfyewO44PGZ6YC/Z7kC/ro2I48Wjh6pD45hNk5/mTvTtQVd9mgGhbmN4M6CxZIYLN1cwLJQ8ShyP81CQBtSnHbijxuYMDeGrxwdiG9msg4g9c4XfyTzHsMqWaU+OJVzJy3BL9SwI1zQtquCSRcttAve7ZDqfBgd3LEO1TDzbWS2FFDtA5pcsI449Un9Z/d+K1b+HFSjp0aRNYdokJN1MCnNv4YMiX2qOVO9vEXEQR+BC4BV9nk0WqIUYWxWr2WnUx/VqJ7a9S1nwJPcbUnP5x08Z/CFjpYzlRFjSgnResDwtwF8L8tJ3oJumNDJEQKoObZbWIR0A0UYOUtHtW6C3c08mDEa9n4s4+cDSZQt07t+O76Ke6ALPe9MlG+FbwAPpAfNxSQrFsDphZpu15JUdcC35+cxgTImGGaeMbHoTnqfDVu041EL1v9GhgbaZorLPxq9Z0KiBI/081sSlsF3rmFe+A/0fDNy/0x1JhpIXyurqiOxYpT7oBumWwUwc2W4QECOk3n0uE3rD+N6AW5+MHxMSJVKcWOJgFwOxD9Iagfmywb33yDw3IFxYKrt2CIRxwZkCVjevlH4B2psMbyCftsNu0KEaIC9KVbgaclO/n50KJ3uu86topw7FFTxinReSI70rWFuEEbpj9b1ODvfoVHZ7nhaVrnTI+jefgbPaMvwzgAeAl0eAPxenUt1VzAnAbzXcv1COH/d8y2Jp6kdkzfSTL8qIkgLwIguHRAwjY4l03cTZqdAx3ao2tPN+L9HfK6//qp//hVLPr3mH+NHyz+61vXgn+p1oQdmIDVzgSL8jfVGZPn7aEbJrSKxFoC9UkcmSvXh+3GaUO9D160cYx3n6pMIDwJcAA9TvginaK7JRhZLqmzLhoCcjtL4YsnEgRZ+oMIEPF1PNf/3rV5eOLrfooc82PwK64H3qPB/JUz9E+pAB0OeprTek499REGZG3sH23dQ6VAd+KGoPUdyt9LRD/QJZFuPcjL+SQOQ8l2ftuNcM+oXWkSwHY4DM6ZHsZEJBc2BXRwE20Nc7cFtQQnGfGNKaKY4JuWDNXEgUX1NhAs/KoBYT+vCXMBWZSVE/N3pT2VjkOr6+y2sPj13G8H3oHZhq3yR9r/fvdCl9l5nXowgnZ/c9oRws5eLd2mRR/Fma/v0wt7gR1w9RvLuIz46Zbd6IUecI2XyP8pu/3wFvQUH2pjwuoz7vd/nCjYq56JK4ev6JUI+wrIs/EoB84F74ydyLmxOJkthas9n4ajbSLMgdhN3z1f7TP6i3v7DVRFKd1japL++b9cFyne/u6atTckj1CwZyZqzrirwS1pVA6YSFEtJpwcMPD8APK/jvcz+NQUC62XzG7XACzRQbRtUSWHPqAaZ94dB4QcAlC6WjebzthV1X0q6s/3NJt8G9aygycb41emUHOm6s2Rsif+9Q3+kqkgmu8hRK0a5Y+gmQipDUc5vAIdmZqXNL5Xj2RKC0gOrRPfGVWmV3eN1O0vFkWz1NfeAjQO6EMf/ECesnoNF3qdvjEu1KQH+rdHPMz3h2VXWbZu91vQX2L84jQoj7y5/7X5koI82fYqICnuFG7sgg0LqMBKtxXTWpjs1qOGs2tKnZ0SP10Va+kYnS7UNuwa5uwomeblyLndUWB9TS6/dhxGciM+ftZ2jVZLIEbuBOhZOj3TkDp9P4TSivwNPa0wKKQ4oArL/3t2I3EeqOYhqd5zVwk0FxiMk9EoZHzbsv4pGWdnUhk+xNzamFF65vtpOSYI2XFoRUQB3I8BkLgV84OoYPyqbB+W/o96FPKDIabqNafy1hUSYcP481NtKKIkcv5UT/Ff0udKDX+yccc6I7/Wd/qxe2EFePAAAgAElEQVShE2WjHo7I8s0NSaOOmlBbGNQmZJJqd51G6mOMdpZXS7ivelZlkBXzyUlGtAiGCW2pvuQreqcXC+HBCsLHkXG/8VxpRTnaWPTZVnpRlfrziRloTnIt50NcUu+crIl+IKBczaGZ92mZmRWoc6LHsJNxmAbs6OLoNvXJHan3iK7dWfkWyMvRHhYM03AV52GwTlFhastD6Yu00XwtuB4LtTwN2M/hCN/AQ0ZkX380nKONyfW3Pq52+/qdWUEQy7R8JhXAj8uknycYzrHg1w7o9MjUXV2kOFw5o1kdJWR6q4uvBF3uYTdKBDJ0MtL4Sufo3S0qSEgCEwf+NyR+RyB99x836luMEare7SzmrBzVPZG+uyL/90hFbMZ68le1RLvzWot9yxW0RQfl68jx4K9BkVY2Q51TsT1ctHFhlslMOK6skyi9aFHYBXRp89x1Yf9u5m4cm+Iwst/9+Inb+T62UFfls1E2U4zItNLR3Xhss/NgiseyT3Dt8L3lrD74juATY/tTonAbz27o+zR9OEaMPq7qyhbMUstmdpobE4Xa3zaPrLHiYJ/obxy368ymUbkaaOPTULLQW0XAHMPMj11IU/muBhAjkFsmc+hh51F/Ux+9bTaBxiVLVYfqPP2+yLTWMxcHel4zeM3I5xX5IQELsDwkID+AqwM9IyPnc5nfpVzMznayP6uO5/RNE+5+tgNJ/qooEsxUlCqj+e4LDRcuUnYGsNOQjF6A28Nt5bU3PtW2OzDP0u+5nqRtZOCNgqbaNrvm/tFqnBCrOcXdHrsxBAbD3LuhV3ag7zbx26TXBtOvnf93mtMWaADQZ9BmFr8oexemxa+T4wsBywJKhLSkfkV2c0ZR/6fz1X81uKzv5Ci54uSWu1cZYL9EVv7pt7KuTb/3k0a9rOL0ZAGJ0cSMvnv6HhR1Ha+Gdm2Mo/0vBqC9vmf8aGS2k1fIC9fq5D7QNyCu6tkMavedRGmYbQZEwkgiK4rvvUwQgGZnRNgjbl5KdyojxKNRI84K3Bmgy2XnOau0iKtjmwCuO8+lbI+ox0HVBFaRPQYeAPxZZe7T/wX8+F/A/67Z16uTi0Odu7HG3HdxpVbRhZXm+FG6ygNuTRp06nvf5VkiD+90mlovdjmZns6k+Yn+RuEdy6yd8CaQ1DmVnZ56ov83XEG36rcqG5ck0XYd0na8BX1H/WvQUSf6Hh3xXA10Az7ds+l0OB124jRiMIjJTqIMQit67hP6FuTaWflrDd7v0TZHwut+HOEOzXBS2823jh6L7gu+dYzJtdwejkR/VdbtvcETahDeMtI9Fhse2b5r3Vn3awbwBcOsNbu/s3fyfEQcp8c7v3O6xe6Z4XH5PcNiLYwbv1vYYIKF3PMQZicfcsfHa8C2FVedaNHDuzh+t3mP3LFDe8PueVIEtRCkqw+qw3SZ1NUObOtHLnlKuJJeLbfsnj+4CNI6uWh+zyxUrQreCLDBpqrSaprc81T3Vz3TmlVjXZhmbuF1Ho0xnh/jbvDKAf5fgA6r/D2ebuT5juZNQLdiuDtkH748YnfdmZdvjN6i83wDrbx85v8k8l1qx3yakuh0s1Ad46LT2By4kl6i4bYMbFJjX+XHL/KV0IzmDDw0Dk9Jxlvq2DvC80Em9zBXCpXyzcwSE2z4sDFZQSXV6VUSsqHkGuXgF+DPeBqwmbatVPwNTNJ2HQ/2W2SXjZwUyLN9fLsEZpT74YkIKaHLl74svhWlv7vBp1/nuanDd4bC5TXhzODMyJnBOZfNMVyubVweFiQ6AU8r+LzijL+RVyqnSp47nmxmjLM/W/kAtAUK/mRMc2omTBOaPnhHfaRN5BcZv4bFq2Ggjecjo+4k3ZeGhxe1U9VPVGW12SnOPnkGqpdYPF8Gz0x3cKC/PXB5iG4FxbdEvwX9vkEw/7aJJr9xWV0GQYduLwOimRxScb0Tu03ejoO3SZ/qMEiod6bXnefLgrSkVg5uaVO/H50WlN1iPQPyddL4Quevvi8TW+pduyiv3u1S0zLOcxmfoY9CFGXMYOQCEriCBc7ox9Ao2DpsKdlRtBtY075zoG72PIs3C7MF9tzuGlKLG1j9vxu/TkZurYpt6Zn7ztVvh4aoIplw9eaRLhLsRKf6+lDZAu5joiFI41nvQI8sH+3INgDhGUhXgEGjiilCjMol6Klu6ZQ0iIvziKgc637Otm3kd2oWQTHGHwCkf8P/+PkjQMB/5q/l/WPN64EVa6z4hjqWmccdnwDMhL389n1I13XTg/qZ+2cCuOkbSUflmSpP0O2nF0s4sCt1LGWaNEWLOegBCe/bqT5/RXWi6zrAPoX94lpZdOWSZKcrkNHuuB2y1jvOZRf6S9Gv9e8v6O28pzYO61ste+r9nqPhyxfg086d6DdQF1vVOI29ZAOR31MYxDFllnu8a9lTj8cVR/QJhzoBU/VRG+o9tyJXGShL3lXmky5iC1rfZ44d4Noa0fLs2CjYxr0/AA+axd4sdx0x6rsUP/qoYb5qrAGj3OcQFMin6YcMuPczEh6mzvN7GalRPVmmuxjeKU9q/103Zs/adW9RjYx9unx6UWojr2D16VEqsVqO6WRc7XfU8LfrTLoewvK4dP3E6uy6jqgIjjc9xBKzOb3CHEnZkhWc1f6Mw2kLWyZR9Pq4boeMHYFnxW2JEij3th2lULAudby4gQ3mpMcV9ZepXnPhw+906oZXqL+PJrTkm9zeoft8uAuclej0L9MdqK5+w+9Gh9o0p2uqAkdJHGbr+8Y3Hqv88C7bWkFXaJea9W267qbYMzXmO1sY5l7jwjumI2PKJMhbqb2muqh3czUM9ECA6t9joY6ehvRSNDs1oWnBqY5XaZSEdsMdIXZ9yqhBm2PEhGVAj7URnvV5zz/tUpTtVnYXHReug07Gjr4gUF5wH+uGcUEGETcnFeGlo3xqrMdeaFzNBuPI3Sjoi+w/DIOY+kGCmEqdkeBF6mHaaYw1apmWkbmAK0pm+qBLx2x3dzil8sZ+ro36t4YASaXRsnHxJtR0354TXVgugZHFBpV7yBVYaCerVjk1p7WptCIyMNp1j9bVa37EBDlZn5jKHF9WoRMAJCzLgvz0gOW8IucMrCvwVObS6VxCJ51eq8ZSBmYuaYupy52foR/peazWDrp0tgLM/qQDNFSdgbUEM7e9N0/rT3EK7WT/QmHqGQVRBqw+8AHLqzm14DnH1Xn9bE1J6pasXaL1n9Ls2waR6JSwqlxGrR9cC7DfKL3+Ee7vke4gBFd1p+/O8wvpBevLD7AaSYZsePCoE+hKzIwHVAfUlJCWBSmVo9yZygBfdDzV45oXUEpglLvG944hIvU/JB3hoa3eFEf87J+rAjUyUhuwGMwZ4BU5r2DO9bk40cnNSNtxJ1LmevR9IePvaD/0Fmxtbw/yQkCxy0P9jydgQFdj+1vryIABsvNqrCaDbug+1+k3nQDv5m+d55sBFVca5D8jaaTMExmVRz3LR1yPbU+9ncShSFT6ybr2PIRS/bfUM8T5/9Ru+W8to//87d+Bx38DTj8D9Hv5mxbgj/8N/HcA/wWHdFT9Cig3s+GMcIbSv2ryL9XQ64JBIOK+MbTJtX5W+UWyrvuCr1ytjyNrRoJuLprxUxfqmVAcE1fcd/7sRjoI+ElZSuEEhHovTvPo2PaX2oUux7m/kCoP6fGxOM+fg4wuVuTlb1hkh973JCFvAQ1pkRqelSVFBHypO9E/1ZeJhpOCB7HX8TW/GXJhcl90YVSd1iVSjqCB/x5fASiLgDRFRvLN8jLRZZ5mMKPpEP1Rfn+x4YTOQVD/2zzTWO6Ij0veX0xex0bv783APcdqsv1BLx6N8jmctRNKwXkEM3FsxD/KjgpeF76KRB3gy8vIR3hYHsfVfZz9X4+rygMnn6wNZ6ZVwvrzA0/w2WDmGnR3wZTWMQj6M/f//SJKMxEcsKbrclfUa/tlH1jxM2DQAHNHZg25d/JXdqQPOmjCslcll3axsI5IYd1XoEnWrwklLqFr+Zyq/Mkwe33Ab4wO2oCzSei3UGORujgUz6mi/v74lULPTX6exPvWtri8BJlcQhfP1fjvkY4SBx6h42dxoqWNeBfS4U2XF1HAWIg5SA217OwbDD50lmvcSC12u5rPia0lGGewTzB2prDuyP2ega0txqVcHoi5PAcYoXeeD+BLPRbnafvL4mCflcmzN1EUF+gIcvgXnmeTl8JBN8g7T+qOGXUBaM2AUdaCJxQHs91r1hg5rhctSCSRcalvPdRmgUsFNyVOSEhgLMhKbmghpLQg/XDCsp6wrmekdQFjBeeSIAFlXULdZNPEusk4w3jN/WLMEO+jyZqpSCWqgXlwHdV8xiT2BGHj+/TTM2HUAau/DVx1CS4Qorb42wvtlTSxnY6qobdKtzvQTQd7R/TWWR7GZjWh8I8mVX6DqLeCXlBnk/ptq9vEsewnXAzAI/PH/G5tSX2iBeTa10bsq98KoEynBKpHuKPOWbRJoURAWsr3VNBAO4oYbkdMwGCFC01v9jtSOp9UGWrjKNc8ApKVfGWAr+Ct3vHC61qPq4nUqOwsDUd0Ey5GvBtR2nsHDrdWiwVyQZEs7FGTFdoQXyUsPoysQK3OwHaHjh6s1QrUYeKRbZvbVq87gUIgc4AuHWTNqlT9vJMOq/0eDfTxmP9rgJdw9/Keta8QaarOc/RXzXnNuew+l5cS7RMU8K/5JaCcz85AZvwn/sL/+Pn/xn+K14b+DaCEf1HCbxll8jVXkM0uLXPnMCug6IGVshIkuu5TROUwjEz1qgnRI9z7g64LhuVHJd3vrLLpd1a0PmCLUyaLM8bV0tqojZ5bROAju51gY/r99T3lMhhrACWHNNYNAZt9Q5zoL70LXUh2o39Sf48c4250SH1B0fsD9Cg7uLEDH27BY1peYYdkj6s9/60DfO7f+VGFU3ikOeQUxkj12pevAjnIxhEHHFxfYRRcEQ3DoitYPQNF1h5cIl4eXXENiaNZ3xnuNsB3HjCHA1ORlwg60ka7ev1Aqo7M9ssvPZjfkXrkt38+IsfTz3cygPeyavfrRYHv1FcO1cNO+5H6G/UzE51tvA6OHYlcq++6T+vUJuwxoR0YxY0R13aVZyOF+gqPjyqc72ZO5fRXZNf5AfW6BC+Aoxy1/IeXNY4pq03D1IXqRqyZbXpI8EZJo/zStRCPhS1HA80Ex8RYYOx3+jloUF0scSQnRrwoxyun6Lm+Mk74iaL4WPN8BPDFl2ej3+91x0kfKtXGyuTobdCaTWU7LBjWsqGYmB5FG7Lm01R11riZRd5M+BgDnm6xNeJudXkyQZ3MitPhYbBD8J9EEQ7ZCyf02pPjtC3joja1WiqvLH7x0x7HnEXPKy8iy1OxvFJ33XxcbAx6jsWZmI/hFJeHoW2MueDuepPHZJyreVx/z7cdu6ja9RFKaKdUkpZJjZOcIhQnukxwXtt0pHGCxQLWmU49gMYfjAsEcV6Ppqa8TDTsUkPpjQzD/EepMKr1Fc9D1neZkSnXKUFG2wwxLcscR9VMJlHJ/gX1JlVFJfk1wxYb8xQMX8Yxjr6X2VSyFisGZKazzHmh29NtMl11wQY7KRyrm+muxMWUwfBTsWEGONW2SGVOnZCw0IIVqdvRmcsczALQQ0L68YR0fkBaVzARMpeJGs61PInq4pPOCGv8XDls5dFsStmya+bhSsUJXm0pGfAXBJNxJ+o7Hmz7vDy5774PTGVY2nIS3iiJgIVBDF2f2Rs/pW28sF1Du7yNLRQF83qkjsCQ+VlZqDFnwo6uxTSoqfCoRnnG7Dui192B/pqY/V3ZC++K2W+Wwq7uga5X2jPAXSe0iVJb7TOqJzWY1BGaFgItCbQUJ3kGzMIxonK0O8nOdG8ycN2NrifaQfZIFxV2oxAtgsXmLmwFr21nOWfkvCKva7nnJa/oR7jbdMv7edZ3pa3VYveYXNAA02OEaZyjYQRwB2XYLZM6bpTVSsv3oHK08/xNkaAF9HYRYNn49UicgIXq0cr9FWcFfNvksesvX1B2CBOBnn4DwODlU88/lWscnpDx35CQQHhIHwAw/n39q/DxWdKL8kM3YAnWmR4Y/yFAM44FqveqVwNG1wXpW3GoJ2jqExh2Om31X8VbiCSVPtyfPHKJiNP8J88PLhTLazucy+Sjey11dXSyT5zmeiexpPfSd6GL0/yqU9QP6NkjMgNMZOaZqMm5dCQ9VntSBWQVR+4OJgJIPOTJxlFhuC5waztfAeBPSRS9jj7WvkcZ5WqYHsTo4qqi+owsdyd42/3AXZdI8WThhu7vvri+uaLm49k3su8J6LvDH8dwU9JGLwOkdphrnbkona/152Bl7pTjACvPRlPRO94RjDP0rkxcmozF0r1/qb8hdvcNRmiTSG2sJiUP5XvpkjqMSybkEXVxmeN5Ru1Y9iCc8LNFZH+yBh+CM8yATtZXzn0axOZUL28iZdVs3ElesuztQ6rS9AROw7q+DL7tHEO6KRlcJ3S419FYAJj21Vgn0kv+vVw10/q7woRaCQyzSk4h6Db030ze9d2j+jy9ziEow957H6zZC0rNt/LWcWSmf1+DdrN+Rd6MnLxC7v9U5znenuV4mDaaLIJOFyd/yIn+PPRNyOMlRZAG0zpgcid6a5Gr9AVhWOjmPm9SKFiWEabJ9guNj9jOcTSbRQ0ZbThm9+8KauOSPLPiUDuqNR3Ky4PFqAJV3tM0Vbvo+6mj/je0gQU9fj8DA2UOaYpxAl5MsrvMq6gREDpOHfJ6HrCpi2QB2JirA4Ss4xRkWeY95QUBueNW72AO+95WtVS5asfBo869M6rDu1IGKAGEBQudABDWzKB6xzkvXG5vfEhIOCHljIQMTmeAy54aXs/gtWaZAFkIIKcNsMy5tcUovT50KYvN4grVd6v0shMU8JOO65WXriOd5pZ8EEb53qtkz+9G8Iso4nOS+BF9/IoYD7geF3SsP9FJKv0jPLR0r+DlrdGddqC/Yvyb8n77TViO9MO74PXZ6eik0iV1dW297q1cNthKBiD5XQZUcZ7LfTaA6CeFqBvATEDKoESgeg86UgJy7n7ueqQ7paWEIZT7UBpD/l9ntANKB/iazqT2ve1QH/juz0mVvy98U0cI5az+CbhjtONmoN5JuqHyNiN68D2K4huMbRKRTATvdg1MAebU/8kpBtbMCCYEG5CIgX2b6DQrVSeGyzBqUfvUUmcVtjk7J+U7algfrMfeL+DK7GYszU56AYB+cvE6MgAhqvcLqEli71Tq5cQgSanVAVUwz2tGcyczgX4A+M/c+8kjlR2k0lSa5fy5GN8ffinf/vxf+D8LgPQzfnn4CQ9IWMHA+S/gSfGpGdf1ofuHM9J6wbm3A6HJ+DAh0vpBPUrLqbvyWA0MMSiNTtKh5D13foV3eW+tZ4Rt63TeVJWEfbIGru2hPhxUSVofX0OTfq+/6dX9WsdF1RE90yTsSxgEh3afmwFXDXNXYIWvX/sOdC8LvvteXf4Jv/pZj9GzYvDP6LvQYfWoGndaBl9RDqZIKkMdzuSjCssA/mTV/1XBZbd6sb7Lu6TC+vrTO97UfW0my+jdvWTNtLkk+gXdia7GHYPzRA+pneXDLISqf+lncr0GQ+lazGVow8q8qQo2J09jAWtVH32edi2fj5Kzq2kSd9BV41jTw5GVLz3hN2AQl3Zre6UIfTiTtnpO5aURY2q/LMzxcTcobM1AXrSq78E0P2wj6LR8P3TjI5t4KnJdFEyIZYcH4Sen5vqg0zCQHsNaYIuiQ/U1BFAF0bhRN5DWj769hZcpRqDe31t2pHRk139WtQlPjmkpZ6hvfN4qQTnW3X8LadR5XXbGipQdTHqxLQPldLJou0nIxCjoe/rN3NFoP4ThD+vLoI9cTrfoN9yoH/frZDw1b/r4j6DNtnZyH45ob3BObjBfCPHmCKi+JDvOpA9w/z6cTmCebym/s9McT+MwbnndpA3VfB/aKfeseraitbFBPQ943I3ThOMFVTbzdpgJ+U0Vxr7UHxj6ypphPG4OYlZYx+2qb+0nMsJA1ogF+usxGsoWYACDDVQm4Rio09l6thTpEUE5Fm7oenWxFNs0VHBPURzCDXNETATslmkUL3sbZGxMqx66bpklVgqjxb79rf8dXcgzSncEANFkUKaaibnOk7PCbb5DqiKyCgLMBbEVQs/xVye1nARAqHeTS5iExEBaGXxmZGSsJ8bCDF4ITAsoFyc6I5W46xPWM5e1NmeY/tfqtlVOLFd2435Qb/p+eKVfx/4dy6oJyWPL2Do79NJnMGEKTW+EcmRXgKKdpDtk6Rp9qCKXdps7lfR3hGXC+1W0kVXU9TvrgXaqbUpDeYI8OfgtKftqYwT99f3RbQ50pTSvi39T7t/pO1V6RUHaw08CgkntAFPO1LIftAxyucHG2q80HqpHsyOl5ngHymBZjJwEUAKlVJ3nVIFpVoo/KVDuBp3GW/nbBpIMNXbqsyUJ7uLiXWBWgEMG5xXgtYC7zGg7XYzz3IIXi1gupK2JY83vaAvUb7foOOrxlQPdZzGNc9hAisLOwICsABZgIT+5SeCz3GU4W3QyGIo7JLJyrxXy4rAeLZKrydSeIFhtxGrWpb82Y47KPeeqXugDA39VXnNdFSM+n2T/sez2fADw9GvJ6wnAjwC+/o5f6Xf8+vjfSvp//l6O/TT1oX6YyRP1N6qmamRr+88eydX7AaoDvf1NVO6iEoyGAv3b7kVJxhgBYhCpRy+2A+Aj+BklMymr8e6AJyd9ggD8Ub958PoM3SgkfWyvJtNW1NrIfGPUO8Dq+wx7dLvI0wkvvwv9Grq2Cz+KA/VCfaRp05jWzw47D7pR6W793DJxFhcBoK8AHhXmUPnIirYE4I8ELHUslzCqn/WdhHVE8Eaw6DNh4Q95ru8+SgTpE6oPRn1rz3jUVeVgweXkMjG8uXvv6ZPTHV+OycVemKjs+nmQlSBdH29rt2mLy+7ZJ9ifhwnsIcuXUGo3kF9I4t9BvdP1O63rSaNK/OokHyouSZgovh4sa1Z6MpLUt590PNeXfFuSClehnMk9HLsVv0Dvy8GcSkmTO+9NH3AP45K1a1ZEmlR4X+8+bxl7a38lHVj1UVedczITQi4StQZFPPnlxnrfOfRYGuESje310fvS5pmHrFq6R/SfUr34VP8e0g9wm4doWE/d+ZZuofFVsRtJlzFijGDHA5/+e6SXwnkBzeBqFC6ia6HON0vfSIXMzLRLaNiJrnHrtfI+W6x3je19cZRn7KgzlecpGlOF5ESmKIzWzRn1yo5bGbyRyI8Obmw0ectSODd2ut/tyGmNKZDiZjvQlL4f9M0n3j7ROFFhE3Ws93NRwzOEcepN4yU58YfscoJhOkyXYeY8j/jQVXKI8Y5XO8ymmtWxSmvH9Icy04+oN/N0Pg2/caLF98kFdijL++LR5lQeU8VbA3bW+GrMxb6kIvWk5LfA5ZpAFjxUnOGUCVgZ9FR4Oucz0sMJawZwInBagA8ZCR8AWpGw4OkM4O8MZsYK7uw1Hmpj+sXqILSFBBWHEsMu/hReWx2VZ5O+33S0sVDP0CGcfiQA2+dL54W1LeDJJT39PoBkny4fK+8LUIwL7oEWhAibp2i4XN8z3ecI91vq/eY2+0bQ7kGS476/kyIaflyexNZq7R4oAIwqb5/98EyoZ7VYQ6Qm144W0oM0UZn8XgA6oRzN3oBU7pMY4oRL/Yh2FtRNqPkKiJUsJwwzVHwpqgyizniSd6zLQ2YujZlBzUkug7tGzS0ht9D1aHvKIBqEp8nAqGmY2NLISHFzySpoSU/9Iw96Tebo7S2Tsu0oxACQRCxEzs4QlJa2747KHqWD2TtrmchBRJPnBjbIFKEAT7b/XB4kcss40O4HZOMqKnwNba1Bu3ysp0Z0cM9gubpADJIM4I9a1ryWd1Uu+kb8AryL85MB+lRl5/dyLDKjHMv8ozI0nv6rfGsUgFFbpM6n1O/QBrZ8kfiJk4DdpDgTgYY7zwWERvUXfPM56jY2y2xRduJu7W72fa3l4Yw1n/dgzO2D5+gAsiPUxwtX4eFOfPdMOgHYO6Y1nVCc6GeM5EXmJWnTCX1jvz5cphvyGbyUUVqzMknFM4ogq/ZtDnQC8AlIXxWWkL+17qjIHjUMYWWxOdD1ZJbMMHh9LXcmf63vfqp8DkPzhtBsVUHTmXHUzTTaB6fT9KuBpa8uPa/U2D3X3w8ofcW/B0pfkl3oPr8tGza5b+z+HhHDIYzNcEsco9Z6uW5Pu7yMMdQorBeImEAOkzRZcO08tCN1vC39auh3ZONTx9tG3NpEQw/rm7ScQqZKrQNoWVTl0ZOYe2pla3hiV0X9N40TvTI2tne1bKICZOjRY7zDv4JLPbOyn33Yid4S7ukIrg6SUQWrx4+big+wT0vbI2WXsP/kF2bUPIcjedXEcT/F1bX1kHbAgudbDC39ahbUP88UwQFM0SV8JnRq8jWaNA+q1nx2ePPq456P1slR2tLdR+LeSK8FwYTe47Hbt9yH/dr1vUWDmnDDWetDMwg2dO+gbW+Rd53JsdfjnMumct/K91iwKUV1FuE8891X6CRtCvSh0eHUBwlCgacXlcelvynEDhREDeN5CxJtIwLVUxfVzmq5qqaZcQaDqbS3ZG02JI+l2UhYYTBtR1/SyffCzr47fNWnKCoDugM3m73YYvGNxH2nfr8+SPDLjAGLSwnKqbpFznneT4/QKQnrgsp8QTsbkb6ZXiUR7fgd2CMrOwqX9lNUoTZMCD5jICXkDGhb2M/eDuZbZItpETOpCA+1XjKX++rXXDbAPHFrtrxm5JyRMyEnLr72U0L6ISHlE9KPjPQ3I+cVOK/gTDZTKeBmX1LlHDZZdERtetDE9gzlUtexk3kdxMY50AGN7pH0pb/Iq73OV+MYI8Xr6gGIuiQOKqLnJK+zdnS9Esk69Vy1pO5/5UXbXEasLCYVjmu40vpGOR0AACAASURBVMQibyPOMOqtvbxU2b4d+ufegf6OaHoU7nd6+6QVMKU6EZpAKP8a+TkaQtEyciz7AqQTVZzHYGSAE9p95pRAdVeZ8XG3ybykQHj5O6otP4joNExhVAaK9yFMzSuvYKxtgqXtskmkdmuwTYj6mPZ6upXaoHBddOr/5G7rzT4s4dHbTdrjMJiAkqMYYMu3Nn/FDZMrwI37DWwz5zkF37fIO8/DVafoMiZxXpS2jBVH5P4VtFz6daq6IXPR/gzlPEcHioTShz78q4R5+rWe7PC5fPsbvZ4TgOVf+NfyI35b/ygO9a+AFZxLiunQ+KQZBYQBFVyRwptNxLTcwwFusul7IO77yCViK/drHzkmXDrKEXF9i5gwAthNycLKid+Frlclf0Lf+fAWyjjol+D3oXSCd4xyHLlQJvvtaKLeqBiCBZlHE2omWdcvWMZUpVQS1WPb9VjUF9NpnEFBfmUCoxZW+lfOtuwyTsix7fUkCfyBYoz/VMNU7BLvNvBlC56vHohbYWwi0h+m6UZ8qoLrBTI+iFhWAvH+Qq+XIEoLG/EjbTSM77hiB1Isf962GMTxkrp/ZZ0wXhnS/sPQpq2rOEyyRbKYocYjtXh1ZGbnWWYv3Ht+ZDUeqmPMD5CewCSlbyjSk5G8scPinv8qRoU16naCtwOMriO7xtb3A9U88SRLK5F92cb9mp9hWffVsSioU32sv+dJhLDqJ/Uz+0zUx5KGb2DrQGOZrebewhf+PWM8zn0a4UYlewnueYsY6Tt9p2+MNiHOtXRL372BmdvVxQX2eUTaXhq+qd9p8n4z7SC+Hy8VtG/0E/ZPGIkyIZ2wo6NCE+GZloB77U0nj7uSzA3qwVGltYWdJ+N7+TPBZaywA1e7RI//Uj8vMEY1+CN8QbNNvcIYoQ1pp7lKhSYiZGK0I/NNXIURzV9V9y18ZPPI7+483/NPsP4x6A8BeP2+ZRrCXELUWWy2J3xFBQyycqJXe7XWp26OhtE8houSVdNSaCmViLLxndeMfM5YSU6eLIkyEfjMWDMj54wz1U1zCUgPCxYk5L8y+AcGzn8jnxk4ixxrA5e7DHXwjrZZSvV3rRb0gpdh66bG+u3FjtLw83Qqnd7ct+rnIcHnp9fGsuT+AnNYHzXjDu/6/nO/qMVrlMvotSvuNnpdBzpwPZi6tc7v4Vh5Loe2KLI6KDH1yY/piqzvNKFg0uhILO3w2Us3et0mvxRV53k5zr1+45KH2VDbHEbU/lEipETIzGXfOde7w9Op8JoAkolxLlNDfQVi+UsUoPpI8V5CwyAqw2iHY2W1JCPVwIkInBKyuvfZpKXq/DnUq14DWF5IW7hnSDMeXAXZIjmZE3DpJ/BnRob0ezi+tvIadqkrQySayFN/C67iGAg+h6qh4YfliyOwxlY+dHn9TnKqq53l/UX6UkDlBVGCJBo2VN2sgfGPXI/8lisVaqCcgZXBVHd4rgB4Lf1Yjm0nfboDd6dL5qpbuO8ql53nQHGGfgCQTvht/RP48ns3uod6d4WfiFH/rgxc0xZaj/V0lKCj3S1b/5mFnN3OsGTeSdpOBpoBqAF13J8YAH3C6ES/Vva1Y02jy+catj+KUXQwvB6bWP3Ww4PIi+yWPcHKkzN+Xo0EF8l/flWsJ6Mna9/7n/X5P74Cnx4xVCRTd3z4XfqHy7/ROIPDTz8Huoio3DWb6ggmk3riPG/OcQLoS3Wiq3fqipeGL2ofpZRM1qWM3DBFqwPWTnTRmSKHsuinGlxfAXysp8vIKTtb9aH7vgRl9f4m5ezxoJ858ME3xmufpt4dpD+pcXXYFSFhaAzbKGF0Psq/SG9t0ljIvXtHJcvdat/bYXUlyQTd1h2+YaQWjmzhhrrXfSxI2ITX/QbNRhPsHU0sDBhb6awQowQsmLWMR+3Oyl8fe6zSlldmONzZnShpiGPejteuH/EQzT5P+wHZxSaAKbMM9+WBu79ZyR+5OEMJ6n/Meoc+gVNnytowKgHBObqgw8SgrnfFcOv/DKPnsqpC+8Nl7OQ4xOuBXcEAPSJwtPDQBrOJ8PHOZPssCdCOji7zziIrSseENpYqQ5iWjTO9I/0ovdO5lQC1928vUKZ3PSc1FdUd4fvGaXOY4b0AW3SBrbJLxxIyx0rfkrcyM+dD5AaejMId/q4Mca37v6I40f/YS87ZvSGoc7byLgVjjf3hueh/Wj3KgK3bRoNcNRy6JIADKnuzKGTnDsx8ZK3oaJz1CU/DONLblKUpXV23HeCan9ZW3KqlnOQTjZ9y2mU9ZZJ0XI8rZsBsh6qNKdg8cqCz4sl+U/Miw7xNjytXiTWcfAGR+r/JUP2f2/8OLnm8xhKeQ0wUbUEby1Ft4VaiYjsQ6tXnEp+BvK5Y61x/s+XrVCBnxpoz1mp3MwinlJAeHpA+ZKQPjPw3A08Malejlrq117ChyUDhpcqEFouKT0U/aDjXam3Q/yodqR+P/6MNT0MXU7Ix00HTeXdYvny4I74cDt6FaUTfXxkD+YHpqGr386G+z6r2kL4Y2eOb1fuO4eEWvb4D/Tt9p2+B3CREOClOhL77vFLDiXIcswY2VHegE5LcbZ7XftwGc/XBERLpu9TJAjDqgEqSNvrsOe1DloPmGcxcN8dRceYTwZw2U8sk80vhRNxLU8PVVy5cIbdC02GOOIoArSvnc6aTb4AqkAoPDELwHBMikZxt2VmaBQ1sj2ZHzol+RM63ZqKO5jtJlwjAI8pVuw0glx5bOq5CsCujniGlbB1bDv5IxcH5E4A/f+2Zn2GPd3tEGemXX4D1Cfj6e9m52JwAinOmIyLaP5J7oTrvANQIMJ6ALcNUAXlTbm/sbIGzC4DbHZr9dejjfpBGWtcK6ftaI7v6Ad2JLu+/UTCM/wngj7qllz/Zb3I/Nj3a8u92Fm/ESbyZgabTDQwiiZbKfwQ0w5XFcS6dmlDwwycqDnR5R2hOdD3xQRVrtDvQAehTY+T4Ls5qFYFM7BDXo99EoZSxnGQHw1cCfazTBdecbKJ1lFkIeAPpCTKg6l8EBr6tj5gvAA9Ujt4zeUx++zR02+qw5P7J+4t2ns9pz1n2nqlUl8fh/i+NdW/CO8ymJscJZZdPWXQiYyn1ubcAc7R6/SjJCK5UYM+ZAJeq26bGpZ/rNOUhdJSz+ut40el6SigLeqC6R8MzjKmuU+yM7+KCS7ksFLp+UPK4vp+4YRq9PmrcUhmY4Zfgp6H/n7033ZIjx9FEP9A8QkotmVW9zEzfnvv+L3b79Myp052VKUVIinA33B8EQAAkzc3DQ1IqK5AZcltoJLgBHwEuGbt4Ue/PZiUX3m//fukqG7VmKl7QYzZCmOv7PG3y8+PLlBd6oRd6oSltYYlLKDtBRmM3n+YnnNllRAN6XeeS+6ZjumQDCJiMB3/6/CvrjxHWW/cWjIKSvYm1sUeXKxJLLrtlJDZL0H3uY0sYxnBmzpMl3ZDTNeN57zwPE273NCjDoGkcNklnM86JI96+l8jDud3AvFn5sh45z+nMMNb135aEW0hldSx/pxWMgiMdsRwXLEupW7GvBD6hbu9+XHEqR8hqOWAh0HJAuV2x3DLWmxWnZQXKEeYYDzhex+VoZaHF5sqhm2Nh5eRf5AY4eOax64w8VH4OGfT0oQA2GyDOxMvnAvz41IbMbZeI3Cez2vqz034Hei/lx8L5UvqR29yaDCQXzJjpdpUZ3I+K5oee6Wu0R8oNDD9mIN4If+Erpc0xvymTHCoDrnxB6Vk6yNLjIa1vDVIIWKrTnJYClAW8SJhTW42qW7yzrYABmFcv7QAUsN+Dl/X8Yc9P7svuOSuQXaviZlnhuzJsJRoz2nnr1dZj3YFrWkSyco5WgBbULewX+VutQIwN5tZRCMN+FGlf3xicXuM+zUaxhgIqCx705WAUr0U+6nbiDHa7TA425LRi5tbuGoKOYaU6Y7FIQx0C0kFDpZjtxjeLsW69fJTV9YH0ktLvgL/ahBz6Yit9F86DwwZK9eu2Rbgi2Et0FWO6lWfIjh/NtGseGTeJwG9RHR9y1nB4fwpR2HbtFpHPtr84QDqbPNazdzPbuur0/iNwF2VQxMTFns+aXuDL4uHwiO1fBe0DWUmoPOlW4dp8iaNTNyfJ+TnHsgS88HFMcXx3B+CtK3RZzVmjmrV1SuWFdDOQLRtNVx/M/HKZD0pX1v992TL6B8WVQQ67uMFkcd8eUR3ot3L/2eVD2/KonKYzhCcy4akg0A/YR9HOvgm7VyDJPv30Dox3wh7BnLb2y3WSyw7eYmKOv1GYkUjMfZ7YjVf1GfV/RQbaRY6O0a3di75zURCBZVKPtiw9b7hxrWXHUcE7eACuZ7RhRdz2nwB8JrCei75RNJpHrwLiJ9vtZY+YZ03DP6BUPynOrluN7m8APDrGkxzr5IrXBUi/Pt9apmrYuXTledeW9L4l4lRVx6dBwBxJiG/a6RAzmd7uqLBu3OPb1QYZlgh6qb4J2KeLy9+UBld00hlEJlCMJyAC6gu9QhGvC9UQ0efFdKi1BQpvQkhjECYfRocPMQCdpBp1dlCe8qwkfaHfxaYQklasyy5+L2Rl0m8odCfftJV4KBL4d0UQyl3rRhmctdEgszjKYS0XAiog8+XNLfG6lUYfdzgw3oXN91JgtkGUL2MWFWMDQtcXs+4K+RsVTMw3+3dvGk8E1OM2oLojR6/ygSWqdM8tbh5tl6uUJ4hko+sewb1FA7mV3//4NM6fq8k+TM73RJQ+mTr5cQFttZevTEN9/i3pTL1cS5yuA4zcmVYVLb1iuopVGkyuxkDHbzK1Ny2JO+u3S2iolydRzXAWcB7oBDmeSPX/Fo5TJ/qnYZWN68xjHw4X++kcJkbTLQ2LUcUpil38tu3kf1uGqZDpDMUXDbMa0msYRZ2TNYBjjtql7xkBYwkVqvY4b6PIbcnDnFHBhzLRvPnPRwJZykZ1so9bg68IW2zX/JMMnWT1eVolGssisQbUMqX8cPRd7MOdI83qRrFCzl+XcnvHNV8sY9EKhWSiKq+wHQt0LOQWySi+rqvG19ZeJGL9r2Fq4YMlobCduTi8WcbKykyXDZ6rQLd9fHWYt4Exwa9fKDXQCVjLCjqitrkDgY8rTp+PwA1wOIi9HwWFC4gKbm5vcXh3qDhsBdaVwce12ts1Xq52SV4ZoDUssKvloQWP5uTvMspiv4f7xnUjmVRK8ZPWDgfyL3QnJxf6tDHoyzkyjt+mEZA/c75/q0ltyWjeeC9lk8cMru+yf97AfeB3jN17Lqfs7aCLdXfA+9LPyP0C0q7r69oedOGFV2uyCyHFWgnKyTcciafxEZm3cclWmT0zpsq07UCfCNyojP5ByfeDmcLZoqGC6u87/fvDE7m/Sev2s+fyp9+jJCxJbspaJcVUnnrJIX8rBRDcZAY17KrvF5lhdigoZQEfCOtSsKIp9GrAO4DLAVU9E+rZ6CuCcUhAANvW8aXGAcefvUuSx5RSdZ4TGEXxBwN8AlY9E5UYKIutrG1YY0HhBYQVoBOqyj4BOIBwBLM60AHg5ARq2si7MyCl9qOavGtWSWCHehqinsn7ZHjUqLv2SrHs9UsegGX/nRQzBJzYSpgAaOq1JcsAsLpdCRz7xtcgix0Pjm8P2n1+OyWXv09lkMPN+vVA8BWRDyzAzyZoGDAZxJvby5S3M2SozoXXttXJIKs0u/fbMtm37wB8pJaFQi0JXW0OqgPgu5PjGfHaX9xLvB8gA2fq6/w9t9Xnn36rPChzXVciqbaN/qJMj2SfiJb6TtqvzIQll14tQpJJP1q3LGMLbrIzO3tHKmM0QAwYmvq8erqrMoXCgmMeJhUSCs2DJ6G58bzV5EdFfBFJo+IJH+RyQylndkaa8NRNdHD9+BWqkSaU83ZJbdMz6PLcPnZ9IwH/BW4lb+07xel2ouIGeD+37wuDVgC0uqbltlMHqrHHMRTkvq04dUF8mRpkUA+pb5y5jrnpB+VdJtXh/hOwLPV6UcwgMkhxhhgqbOzn/1IjrSJQ+JZ2omIRMjGOV8jRMrU9stdJBOAzAa9LlI1+dwmLkDA+09i116yPNuo/5ySeKO3SB1r88pVu+keEwcRXp7tzR8+rVLPMzOdcdnJebrycGcmSvTRduM8bd2j1OypnRhsQ208v7FZ8bdI+q3XWWCLXlpsprTW9HE33QI4nIBTpYhQmPtg8T8V3lrjTk28Q69+HsVuKRt8Ql8/QrAj6evR1sc4mf/q8k79xk4V0QuVA13XqVr7mxaWVJy1BVu8PPSloxxaENCRt03OuDweDX/pwVF6TZCut/XuLhwYrZURCkLap0veh/IWT990qeP2HkkrXKhmp+SC/ZjrZyRKPxRnA26YPgo7fIscXcdUhvPoXmY3EE3Frn4H3J9IzwInvR4OO7eW+J84XNG6vW0ldEPw8XSHdr6nvH5kIbVKrEmMum32YJ1L4lDp1cVlyV1bbU7PxLPMtckG4n57Si4JxwSVMtCeq/v1GAG+e8+I9Y8vPqJObR9u5n2tb1F3kCMZ6xwefNSoiEBapPz02hUGFq7OUGHVhjTRMPY5Ovy0EYnUGEpjXphvlWEzdhRMQJ+KJAZaVCQYE/fGZ3Ge1AYqm0Mtat8XGfIjdjrCSb7uxhCuvJK85RKw8ye9aXPiRvKgoiAT7Fp2kgLpYqeAoO4D69McUHMv2MKC7/hv3Xq/tmR5Z6pm1eBJP7lFdaFTPbw9jCyIQLyB2DmBtk54PSFXQyfIQ0KJzapK0B91BqW4GyaClNkdtB7XZUZQ/Hqh11AZbzG0iAMAgPsHGz1Sn51oWGOAT43g8gg4HLMcCfDlhJWD56QbLclNXpi8FCxfQCty+fo3l9QIqBSsBDw+PWD8/ohRCoaW2hxXgI4NpBdOKVc9SV93NjLpXLIGWJbUBdG2ChOEsMujEYF6lOnPbmcsfLd8Q2fnPAk814Gp9zubhyNjVj7RG60hy0h2D5OPJ5AA94MZd7QNyNn3WcYzZBwjNJzNKfOte+Zt8fgX5aI3NLlBtQ758Z2pV5X5MgWMiYQycgjbptp/xr0iXbeE+dGiGix+HrgHu164CvwRI/YBFu5+i0Nkd/lsMurq2vcEj5RtygE2BGAnQQwMFjAASAZaVYkVAY51hRguBqcDmrBnQlDh1RbnHJ8OGM5AqAQRQu/QBWL/lgOEVFFAh8FodYuHc9Uk/UaO6nv0+LswEsLKBZb5kM/IfsWqy51zWj6eser583c+wVYgjgoa9LbtVST4vSQrg3Gy9XeTi8/GOotQ63wSViZ/MmwPFakjuZqVv5Wcyy3EP5VU1+8Prv2fS/ejC+So/JbBwz63t1ITib0YmdxLWBszu2zcAFgJe/xV4/G/g95kso/46tV8FT+3PlzWPq/xaY6h6rPw27l241NatuU7CYvLuI4KfctwKtvNjpTGTTflBcP67ZzSIY5bWOR6TM3AKvhW7F8ZP7/8XPv3+f+v9I+qqWg0n1QFG3VHhovOXZ/TUdkKDNnfuE697IXVOwBcArwn8E4E+a9z3IF2F7oeEtvdZm0keB2CtM4QVmed4nOLrjwA7Pti9NF0jf3a++X17FjAIEPo2jeLJPJLlmZTPEl+DuU4Q1NWlq5MjOkjUgvpEspWwyA1b2Qk3UOUWty9Xb8GalWNu8mjJe1xnc8Jtl5v4YRO5cnFo14fXfwUAHBnAp18lLxPFqI8Ly8QCvU/85vCe+WMKu7lV54xanjeJ823SPZNrGr4b3af4nwGq7P/0gkRCg1HjWX/ESZsyRwhFFfpa61e1ibt+Z3Gxv0FX7KE97sEpCV/PVi/7fAZHtGNEV0V37yJvvpvnd9meptGVTu5xc6Bv2Y5yefjuy1JTg+oOhlRgPg7wYsHz4nZ/0s91xVeDeOMtR/2EgSbSYjir+i3VvfWsvxkTWQWE4sMbBu6d7pqhIdNt3MrHt6Ud46t6RigNGs0T6QoZchVdw3vOO/mG5wM4PWppsivzvj/6y+3qeGrBndHFuz7/XpX2DHQt61kGzZRgxkPXkN/V7yn0tarrEgDwZB5mH25FmDT+iE/FwOeiAnbkc4/s9jdOGRGqLeAtIkb0MvrCpHwyPbQjBCfxBjZhOF3hLCfGRxiXsE0wsZ1RGDbfnuTsxzQN1sN7MR8kQJZ1ZNDtPMgfUhjhczR294xkprytZESz14S2w0vAo5MIHK/esZ6pc3an6xhvfD4XUWO8Y0cUjaLUagmvXT11eZa4NE5Kr2eTMkPCsQ/nSXy6ij/UCUU43NoS9+0j4yAZgzdWSfKc8mlp1Dj5yFjLCpRHgFaUmwKsN3KUK2FdTzjSI5ZDQVkI5WbBzetbnG5vsB4ewExYsQIryWQAWX9PAFiPFi1QhCc+9LhKmHU3K5c3yezQiUltejqB6sQYq7JJvYxkiquPuCvAgBihPsMxlOQ/be2T5AVBMWiNo2vB3F3U+CbjkuA4D5lz7TWMVbSzUvoe8bsN2g09t8rPB0v9Z49NvLWPLCvO8D6LWmVsED/juKYpnC+6q+nlDPRvSZR+X+hPRLlyHTKQGZKmNMMnCU2oEdz/yVaRQSFrvEozcDviKQfs2uNIO7BsDSROdGe0J+g28oSVSFbJ93HVmYU1LuYVcRYWN5afw5DyLBQV6hk53so7g/Zp9LF+emWTkKUxwu1navx7BiGjdeF/gWTsmVxfwUNtDuzy2Wn4FnD08ZYR4ltMvvH0C4Df0ba89smvDLxeq0PprfD3ycuHUXtycXgAbvfy4A2qdn/1S03nS5IzALqO1qUnYf0K5eBgc+F1WwoL03i+uMQF4E9Gky6M4/vKSW0M2ILfP4z4+dpkW2xLYUpFffr4f/Dm/b8BBNx/+L8tPAF4jTZZ45nOYf4upGfBWh8i4IsWxzsQ3Vd5rGf7WuNmGQz2hn+dvzFs8JoGuz5YPkYVsb53YXeQ76/397U+3wvWQHHOdP/XMeWeTRl3XV5WBXSrXV3cdlyA5jeGp1KATwz85JxMVOOOA8sZO1lujYMiBVUHaJ/fLBcTDyN56/l78081nx9/jdFlTPYKNY+PiUe/1f0G/wDVchuwep7o6frPGvVM2U8B0eVpPQM9y/ntuZ+4Ju3tIH1YuX8rDxeqf0G3km0i5aPpcBWh7RYxJM/AuAF1u+F4fr3sM97cczsqSj5eqRmrvLUtpzmCGgM2vd3LD2+4W+YzmqSEvm8EA9mEJtAnUJngiZwvve/KlmLfn0Q1rDbVIewfka1eGoUfPvO0B9Dk7o2Gu5+lP30L+p5szrvgzu9p3EefO50Xej66pr1NnbBXxPlC356+lczZoU8D3QP4Ce3YreegMLE1Y+M+qKfqExRl6cdL3q+kuKOgORdtbNTSI1Geumtwi5J7SBAmCEtgi0h+zVGTCtThpN45TIgMDgri2oV2Lr6wS82GvaPBjpbPoqfyKRRMdrVvdyws9ZeEfliawzqy/JGu4qWA1wJWydhsI94tGkbj4iM/bmW3E53wonsCWPqubYd2r/gXBPAKnBjrg5x5Dsb6+qYd18gA84pHfrBdB8oBuPnpFsdXB5xuFqzHFeuR6+6Wa+WjNvfK7IJ2dj1jxcqnuktVgplbWHVYML5fpbG/FeiltEc3ZkZdVw/i89rmPvz+CZGak5iu5+nPRKFc/tgF8+JAfyplILMZNoENoBcqOWy6ntlq/hw0Kp/vlNMu3fNGqmEcahHKBuxUg201hPwj269SKaBSt2XBUmLcZXG8qtZVZSUINOzI7tPOyMVrcscKYG20LfoyBCZKuc5sM0ML19UkY8DBwMpYTwycGLyucob6hnVptkLzCbR3ZXFIq4+kf+/L1/Vzw+Nb8YUkFSj7h+5iZGV1oG0I/O3dU2hSNzl+oM+fAZnpnrGSxCR+BuJWpjHZaY72LGWbrEwOjpynkI1O0nN1lujZ55rGKnV279K8R2xHwltgzLcpa3twYeT7GxkUlgU4/ior1RV56yf13g862G89TaiOcZDJE7KtVRX0C0DWuCcyPKxWGpLEcxa5T+SwB1v+tU/vucFYkAeerzMt1R5foFPcp/WrZ8rLsC+3Nvjm/b8BINx/+s/t734U+refgf/8PapCT6Ym39cL12d1Jj0zV/3M9Yy1VhPx8IMgtn0/1UrMemT5CHNWdv0oyQT/vd0X4F7PPCd3BrqcH+h1/Wzb9gwTtEtJX6wz8yVuDeDkbm2bxbZwNzDgjVO6mvULg37SPFRjCMvqU1JDQSta95MqbjI+b+LD6YXSzu4L6mJkHFApKeXRdtcBhjqmFN9BB31Ldg7yaR0knVF3PkoEpkZHke4lniZzlhTMdHqejKsW8AwPG+E2NEMfJnc091ubqFyrWqINQxili9QvTVdSv77AHdji9KG79pNYXNybJUWO6eH7lBOPXXwT6XSpv048kfYL+VUDpe+HBeLcVj1dEvbsDVdBR9rqM2pl0+EXgKierUfUMmQrWrx1L+fT98/BrtJBZw6KtuEgFt44dbloCtUxUTub1T23PuMZdEVgbU0lWjLSq4yilBdXJiFsHpvkuPZ0fIasGGpl7A335xzpfTKErUlRw9iuhTVPFY/X0jWi2b7XNiHPqGvgrQFdm96zEj0/tv5R6NnsVCOhPUjnH7WcvxZt1d+ldbunjjbjvDC9jWSYUCc6qxMdSbY8hfIETK+3VdVliOj5CXpMHY1s19V06fGTiyBHvgikOAGK7BgKV1xezZ6RdStHnQ0XLGMlwzg0LD/i+DxUyzlQO33vAgRdrvpUsRZLqFZYth+S2RRLHbMaFmnM1uM3ExOGvTSuSaWm9EZZIcdHfMquKSm/MVStT82Z5oUCR4oH89FNm+08DSK0OHsu3dg+BBrlJ0QMOK7J3bWykLQFa4emxQCvblb1kYGyAo+QXekrfj6dTjitKwotAEpthwuj/HSLw9vXOH5+xAmPwMnlaEUdp64saWq5yX+k51trHeVV2R6LwPUPeaoYPDhAW33nzQg2GCYviQAAIABJREFUKQiPXL6jcO0B278xYINZDt87IRPalQuWaWbHbCJyzHNjkWIZmZFh9NWM+vw9mfaOES6kbzc55/vQiwP9GrpUEHQPe8X1QvgDl0NCiUFfMmTqZAujzmxvSFMK38pzt+qcSt26nZZSz/8xwIkmbJHibFYPAY8O03eINGZrBg6DRFcQsVYHOK0A1gVkZsRqfCsATjkuhjjMV/B6Ap/WqsS9/S3wUy+In81VdD11uInarzPeNeC6a8PUMwkOUGWnlL6G5puxRDH9qZG3nUdlUQ5n8Y4Ta4bGb0DPujJd8vIL6ra7Hi+vXFejMQM/cXPO3aOt5g2Dtwi2g2GN0PPsZdOJgFsGHn4Fjkh10fpq/J5imy0Sn07GyeeweT6IY3Odled71FGu3/pbjMLKYzuLa4LqzAk1QraDNL+JALm0/biByIXfPpvtVFSWkWtu9x//E2/e/Vt794C2lfuPTP/5e3WiA8Dd73VF/YzM+WVDQLTjR1Ant9kOKiRiMRkTRip6KjMRYSG/cy98BHo2sfQ7XaWq2IEIbdcbxSSlDW4dPqh9LT03B53qNG5jzWAEaMHAbI5xUkOZ6Io2GUr67Sp8gwA9J1nC1lnyXJ8bzkod+OwWpBNcTTKRoAtHLQ9aDr5fLKLPl/bV8eOvOLz7a0hj08HEEAf8KMz2d94A8o2EWU87kv5mnFG68fg1OfWbTjnDn8ftowTPCVx/xnmBtDOqE9Ic9j8rt4ODdGjVG7K3+X70gdPTOrlG5UPz4+kWqa7/qHNVsAGv9VxFlYGtD2GA6x1z/ihSjdvxR9S2zN92SOx6dBHlXcLMIO2qxRLy157y+G40QdPiE+3inNU21vNp+okVa7K0PYNosB3BiGWHFgLf87ZcC5SYIPdsB287D5iYJ/0soOiK9K9ivr/sH3qDq3vHz4gJn0Tfs+C/J12R73/UIvtHpuewMWR9o3Jvdfceu6oT/dMzpK8YGTkuTlE7YdgMkKHN+/FR9yeTeynJdD/5jBhyZDBXfCxjDEbdI1N3yIz+5oHdzInWpkNSOXEKZ/ki5zynsfzfXeQbCsSpfUMHhokUB+hG1LpHaKVS6rhPsUUdauWjMwNYuZj/S9WeOhg93rNxpnNcytHVPQROTnRtlxbFHsZtZ7lZt4jtuzUfB5A7MOfzQ204jXhuc3Ciuzbu80Qnars2qG3tkastTyHVuuJ0OuERj2AAh3JAKYTDqxvg7RusuMdpXQGc1GBRZcNxneLmirtLe5LxqL1pdnnDbTrRUuPhhmltW/czcP45FaNNnrZopc7DM7m4dvDqmu44qsHAITjPJ3G+0LOMbb4WvTjQn0LTBj8w3AUp7y7DIRsbcY/u/4yzOrbk5tdyqHsH6Nm0O2tQvA2zEJvR2gza9okY2skbpeGc5wW0LKCloCwLIE50ZjucBCRbtI7PpoS1Owq7HMi2rsafnLMuQNBs0mo8d4CmhpAZbozq/D4x+MT1mpb63bKIcY1QimzlTqhGt7X+8UlWnq8roHkaADgSHvha5cboJpqGctJsTmkGmFwcFTFI9TZDJG826gm7eXxiPEpjyeU1kjmzdxcz4/l3/YDS8w0wVtkQYJXu+7gtYffviC/33SxQlpOTlefjuB3QmYr6jUEHUFeeF8i27WT9AkBc1eW3dScZNSiA7VREboe9/NLeg4WBwy/Al9+BD6H2DIHX6Fse/WxYHyET4sxwFSW5eeiqrc5R5EYJB1RZ8IbapAEr7o0BZDYc/iFBVdYVs/6fKnaArc/R1QbT/DER/vWX/w2A8LcPvwJugGvsfEHdtddv4/4j07tfqhMdkHJ/Cyz3YNyD6BfnjG4zmtlGkjJpbJVzxWyQ7SrQDdKNbGzKwPqubuMOxH6no3q6gznRsw7S/nhfzzonXW0OajvYENmONuZgb6N6i45tYoz226yTGw6oWS9NTjJXfa4rzjWPav3QvKoT3TvnNT7LO7fwdithbbvGFeHoGlckm+WurIcHSR8l2ddWYcTwWg6nu79HkdVsPy6eFiGrRXAo0/fQFb3e1/lTaLQC3eKeKslJuAxyJqR6CSqN2L1KzraNqMLiYH+t343KxmN2anIgxIu+jVW4KKs5SsHqvpudRUnKl2EW1XXU60TDf+657zsdP3MMYxNsbacpNXh5SOI/VqNPy3/tigUgnSgjPBbIRJn0vTZhcqu5JUp22R2tfOpWkOdi8FjZh4MLNygLcnmKskTqzeNNpImH/rgKlygTQCu3FfvuI0tKBAUVBq/iPB/p/6wXmGu6qzA3wg6jskB690zUr1bzuHvAm3vVicJrWftatoJzdA0gy9+mePw4nn3nzP3jHG4cta3noqeW+x8Bwz+13lRmf0sK9oDrCu8p9onAypPT/QPQ16y3s3HvTLuz/U5KzsuP/AvUFehvEFeiX0zbmC2oTweAbShDBeACnRxPWGW3KYmvoN5rPOQhJ4uzHGC0hRmFAZyo7u5+4rarnxkpMoZ3gFJv83UZFGCwPSQAGeAVuS45a+VJCGd8spemspyT2StOgMuOze3IyN6dmxxswf19ElEeQlPAUT4CMr5ZsO7q3nR8TJyQMTfbis+OYwvhxzHJB7CxdviiboXuW1CGNAFXmyh3u6KhdXPiAmbUXVtpBX9Zcbo/otwW0Hpok/kXBmPFWlaUsmB5+wql3OBEjCMY/OUIPNTd8rAK7j4ywKcGx0EAlW7obuYMGYvrrlD1yDaH57Wjr1R3qWR1lrffOsmDY4F0NBkvdO8wHl96P8xsgEhaztTyR1IGrLmLkTgEFuPLDbzr/wG8I7ZF3279ZBw4eTOiZ9agRMOkzu8aaiGv4om8rV4vfb/2bUDbfO7h3wn3vzjQvwmp1qBwO+0gg8bww5xDdg19yzw6oxbvSjsrbncdjIuurks7Y0SFJ0uQtpWJCy9/JAZwLGIYL8W2Oyc1lgtIDP5UFTwanXvc7twZqSrQSTgLWWDT5MTAIkZrZlTH+ZGxnta6zSgxqNQz0sthkWxRk31czz5ndaSfVtkCnk0g9kYjxz3veJ7fn3XS7nt1dhtyi0DqzurbuHR0oZLp+JKC+mYTaIZqdeezJ0Tv2zGPAuTwF9Tx7PtnkTlOw7+V2wXA7w6EaGd4q0Fb3ztPrmPWUUT/3K4I9J6AGwIePtTz1x2XQyDp9JK3A5vY8ivPg+gg6R5uJGmCp8lXAMA7qmWiqylvWVbjA/jN5cKwWANUdZvsBKbs91v1ha9MQ9C/TRfl3LezBW4SB1nd/u33/8C//vy/8a/v/wow4Z5PlsibX/4N97/+Zw37CWOZ/UNSavD8DqACVud5qbO2bQY1191XqgODzHHMq3h4bz7UcjmK41vlmNUvoY2QCWA593yFw4fOqT4afhNgxyYQIsZwE+NIt3IntG3dR33d4ImXM8JjmvxE0g/JBjK1DHhdI/awlfos42yJk7lO7tF+qyOQhStDR7Qz7UjLyw2Y8my4sDpkhzB16twMdgvVHRZcEats9HnHCeOJQ0CFS4W6PkFOZtEXqg61n9z7EzV9ofQFg3F6sCQ8kfbqm0SGK59DV15Dg4G+lo9/lDCYD6c0FV2jBLwTXJ6ubxxE8d1Gjkuo/S863jNPZsiEO+NbDFT26xPNRhV2z0c5cvJhnGdun1PuX4ln8v3ebZHIZN3a+ow5dZ28YkTjFloyfvg043GKFTU9n86oqZ5rutRaV9iVg0OQcEU+z/pMP2E0OTasHi84VI9gQ6+m8CODvqc8EzflZUq+7BSv3qcgG5g5OHibAG0PBmO5GPx7y5jvQJMsq/PIB6SBE203DHsOFTKjH7na/ki2ta2JL380evKkiT9B3p6U9YxJdkYSwnH4AdB2oLLnGTdAVqD3LOymqT3Gjf3RcLpnWW0M1W7JqFu2lzqi0mONbAc7Np3a/FFssESxAgH1XGcilFPd6rtOSgbUwdLbQJVcHxviigF27MYWgvE0QMY2syZ+Fodc0f+5ldc2IxUM+JXpQ8YsS3P86p/3jjan770THw2f5y4wc+rzqN0rHg321q2CP1emKX8SG4/eSwO1Nqbj+oyfu1gjjtRhfK4CYnGocgH4hPVIWB9WHD89YlkPWBTbu7U2TAxegOX1DWgpeFhPWNYTTiAwP4JP9ZvCpY63T4y6iK3GUajUySjk+oVlXsFuZThPcLXpzB0m1baxXoDvXBsYipyEbf3zgUyt3Zxi19JxlxdfNq6hcXvr+Bvkh7bDxe49kjOatShMvoXKvNjH6GxCfmT+tG3bW4Nr/YEwyvjXhLGX0osD/TmJ0o0XJt6xMJtJuEF/9rME/jhdYg9RkPHtj9yfzJQ0w7Y/GzxZZQjtzNJDdZzz0uKK2E1nYOoq9BwXNaN5UP9JlTtWAcjqKM8bW5tTfM4QjABZdXYiWwVRz4WFIYG2voRQly1y+1Pn+eqeJfojtfYpL12dt3q23139lh0mUMDhcPvIsDbHxV+3K2UZ1z2r5MdxZyJxj7UQ5BDccyvIt2j0bZ4t+LVIHZQj0q77AfvmZjyBuEj6v2mCInUCrnWAh9x3Dv/HM5JJZon7Zz4eRhYxkSe2vDNDVqnK3zsOjv7GY+T/ybQzCgvypH50zXENExB+UYTpo34ME6+1rgPGj1uGv6GlOtGNOBXSD0Tipw4TPkbkX3m57kkMPiwCmsMoWOjwETi9hTnCdEDgaeHqhO94GG3d7h6Z85zQtmgf6CHBHuTDKC51f/o4jOm8M107Krd7kxmKQJzzmNNn9a8ZF8J7TeaEOhq5YZlkk3RLx5eWlWvE1gV42Hc251vdDp49yncP7lmukrG9Z9iHq+wsIY4gT2dp+ASe2u2u6a4qhy8VcGec2NvpXRDGnIROp6VXQ9a7dFI85oBuIbp4vB60emx9kMhj6z6OcKS4b+NqUfNtI/O7cnzh36u8OYNzGDEONYwxcfThh7y541akX/tj2VlWpIfxr/VJDn3GymLUObdYH4nNvPLc+Lmw4apB36fDtR4pzDBs74b9PzRCLwjq++Eik+xM93JS9E0zFDoe89hgZHzycbnfcelo2yfgLUD3JOxdIEgGMjBn+FnHedfIuO+ZNncXoW+0It8ore82YP6ehf6D03ctuh+43r436zMHzl7Kn12Li7rhTFYIQj8B+PQVBMUAu3ayixBWmANyH/Bvwzu6wJfkua1c9WELoaxcHYeQs5vBgotWyMxnEKhN4gXQr5x1vzkDPl/pWUBO8o/aR4Nd5OoGm5W7A1tDo2DDcsylnnOeyObg2TjxMi72PK8v29i4K/9JTA0q+nzW+mOKZ6KP8KN3wje8Fgb27tcDbLjn7FLxXKRvhEXSd+SOcvMTTW385gcTjAgnW0iNj4hQmKqp/OGEEx7r1u1YwQvANwV0SyjLgpvbW9zc3uAWr4BDwe3xEafjEXxccXo8AWt1YnMhFE3hRFBjJRXN7+qaErnxu7RtRsPHhq7Jgms22ZWcTi63stmi2WtyF8OdleYPgsPa+rK0p8HEe3OiS9vdt2PDKO1RuMG7IIMadUluRfvM9D19jsGJPh+kfHd6caA/K1H4afcKDNz9Cxn57UwA11f+kOWUlbB/rqivGazJ1CEFhRJ1OFXn+aK/BbyUcKZpXcGqjmldBiqGqiCIi5urIcqxFaj7c/dEITfR4KRAokaqwMZWk+s2jaW0cYUoJ7OpcxXGvOpKPYbTpuPi9TwTxmG36AltJ69vmqZoxUexSP3zZyKSsjMwOXEOKMPerna1zhllw+dtls8u4RhuXjwqH2V5rGJUPpOhYbl/J40rjmb6gHH56fnflL4ZxpWu9zSrdzUcf0kRjNqnyA727324sG07BREXVqW7umpZosbPgrrCkwB+zcDhL+D7X6v8+PtoICjxzs5AH6TD3qjMIcB52aF5yAb4vdQNtjMKPvMeGPDYl6mPqxeTcfAcLznWFeC2Egf++f2/479+/xUA8LcPf8e/vv+rFdvdh48Af8Sb9/+GN7/8L9z/9/8ZMPUDEQP48KFelwLgHVDu2jvrIwx4A099KN+JYpOtylhnn/uwbWQvPx7gUEXeMwfXyGHv6f4eWGSLdh20qw6XZ0y6+lV2nCm9AAlnoiuLlg+KA2WOGWP7deXiL31zNPuNMyDk5qoyReFMJ/O1P0ggYTPOhOcYby5am5WWmPWGvfDNgNc8yNVnHKtYV57HBQlyo6vNGfHsyhEPuvrTO1SfROdl6dnvr4U1V/De7epDuSpJfijV/ZhvazEBz7R44gQSkjOh08fuddOR7UxxrfPO6Shtu01CcXF6HU2pznP12QS8geUlsE/WX2roc+2g9e12WgK5Hzc5lhjgtdk6Wd+Su5bYdBwggUeLlS3aUZ58vros9PjBkMU59a/yz+41IW4P/G0Dpu771CA757WrbFc3Oj7SeNpxEpGFLq7VydIR5dU4Pl7/20fukqHN3zm5SvL1NZnN0srdbet/IWWR/sORxwteBgByn5XQ4NvpeCzVfUcjZfmN6EetLwB7Jiidp4lwsr6yIbyuTPupfe1aumY3za/ez7d4U518Nu2tOAZp7C2Ps/IeFXtk3UnSjPQ89M94PvOIeczSfeI5LtB25Wh/+oxssh7pyh0CdGm5Lso1O+gK4LSCwOAj4I+FZNTjJSsbDRAY3uL0658Dru85HNDVra6/JBefYjcgRuzi6spR/hmt4s73xqPXr+MxDPMKykdeaTBq27nPifostwj6tFP69t7j98G4so9qVE51QMXT90hOPwrXtdjIlfUoBj0idU1PlVWCnn3UFQvBtuFWONyaV9wYvE0siKyScapL5WTXspXADyv49IiV5fjTVwtKIRAXHJYDbm5v8er1KxzwCrgh3Jxe43g84fhwxOnzYz37HCy2AHOhm4uAqNQhjO74GDLPsEnwOj539djGvq2TtRbfOtimOW66sjyXM7tSmgcbRt/ETLJdVMZ8O7Rjw4LzPPMSE4+3oz4f23tgftjPePz+O+Kmfjxr/3TvL3XC+13AmipJ7fEPRC8O9OcmShfZef5CZ2kwRPw+NNKQs4C+nsndC3HUKO5TaturlgWkTnQCuOjqczblzURNOJuyI9fc1GCnRioP4Nqfd+xH4azgUyHACkYBq7WOdOufBWzbji6ifJ3R3hMjOoI7J/BY4FJ615V5p5hmrWZv3xuEM9A8tGS5X6mHJw9LBWaF/O8YrKUiOA+Ir6C9E4CkuK6ZwXZxDpxx70nKdrj9j4JEmgJeozeojpEC4O8b6dxvvPMRB17IgISBfwx+RWbgSC0dQnUSZDGgN/7eOw39u4LoTM9/I8r2Ps3CCvDp1/jdZKy0RwvsbmOap3MGKdtL64I2dC74nuhCG5voCo0LLQgB7fzc/EFuJvmZ8PVfH/8D//zz/4P/+vCbxaOx/Osvf8Hf/v4R97/9p1vxiB3t+A9GH9BWoZt6ZAAfgePbTl9DJnyB1noWWZ44RADff5Rt0Bh4ywC/AR7fA4cPqczJ6RGhFfHeh40PPFP19u1b4PMnEQlN57BLg0wfiR5XC5ZhFDEmIA/23PVAxTaTkmtAuqKAW3hWJw/DnYnObpAsYW/l96jJUo3Pb38M9INrfdUY6ovMO+4PwsPq0j+iPj9R3EI906gfbfXnDG80/HvJ0yf3/JX83m3E9xwUZMQPRjQu7tmzrWqy+6D3cnrUh8nfkQ/Lrss0HJLjPmuE6fgRY7J3YlujZxef63iBUrhZ9WfZZ+eADpBUCMpW4GagVtxHAK0lfgi3PZ/kI2RBi8yJK8+3rtCJ+YML/ES8GUT7QI8alonpD5Ns4qn/fvDIYMlW+BEWyJZIL6v3yqkRzdrIG5jcmrVj9vhlFG/mLwV7+mjBfX1dJH9QGik5R2T/jD/bEvt/yvL6hnTNKq0Mub5xXew58eaFNugpK9GfA4ONogjjNieDPaZglnPQJ3Fskdof9vIzoDXIMcef/hVq64IWyDokGauIndOOxbFxTv23MAFLwbpy28GFULeId+O3CjvGmK33vRI6u9COPkrCr5X5VXRde7Fh7iz2K5xdPo6x7vfl1so/mtOi3j7PAbd4IhKdcRfghtXNIFwH+M0OQwhj+DC5tqVeg5L7No5GGl50ZeV1t1uRbjZ8riukD1TEd01YTwQ8MoB6hvnp5hHH2xvcvmIQCuiwoCwLbn96BT6tOD2ccPpywnoCcDrWU9oLUFBAvGLluhX+UfA856PIPI5gbrYLr7My1pA2YSWjjnbfAIY0wY75lWeRcVkvCXjJ74xAbi59D57sGD9Xr9OxlY3TqH8cGHFt5zvSNZPpqojemGSwj4FxJ/Zjv+EuE1GGfWt6caA/hbrZXrkCW4cMhqs8OJ/V+66G+L273Fekr9khzsTdnxfIOUD+ArbfkFO0Cuyikbp9YnHpKvOlgJZ63jkVApeC1dqPWanAANZmpuvjG+SvF9o1bHemTbOAyVdutbj7nkAope3ATkQotKDoajfHB4NRGHG79hylZ9QNSgyzq9IFUt8bAbaR9Wlc57tamYH1SWhlUsJFdTgxfJwzpPqvLlFKOmh49q1XyAHJK6LZy9Yl7Jv81TNuZpoY5+WKd1x2zweAV+kN6tbDhHaW7lMLKkxAmeiV7lcu38hs1TuKQVQHKTr0M7uDA8APbCU8pfB+BboPJ4PN7nSSk4DoOwBvAD6hOq4e0MRLStrIQOgllNqoOcQlrjAYziDZDwJDJH0ag2SnNGtXuyLhJH5TGKtfV2/dYEZ+3/1c47v73T1nyTbhX37+C8D9KnTPyp/K4NqPb6KOEl3InDIu/YapVGONbpFX7mq40881eNjG3bc7jWfWKAZ63R5wfG59W/GHS8JfI55TlXWaTcIbpcXu/DDIyo6hbHK8Mcs58fV7m/YNFiEgAXXV+S3J1u3szkB3snzk2AKas29lNMOYfF9ccP08POPmuPcnFeRsjepp0lU7Z2T+pBTgDTcnupbrO1QZuQ7yiAkPF9GZMceOTwc2hTFdy+qZOKciyOm6bovHc/G+dX3Odw3C8Oju2H3qRXOat3tGP6HPJtN6OeDSC710cfWmwwBJ/JwD3VaqGIsJLwzyazIiGMBGeVZ+mu7X/k5F+mJxEocBFAKva9MrcvxTB49LYtfDLj0EtYhhXGWzTtAZkSu76fCAff3pOydAucWh6rzu8uE+yDul+jJeRwlP2qfyyYi7cgwboUbCobyCvNzqBB47nOks/BNvTpzzOicNGVOgwfOtZ3voh8YlGR/GQoybpIav4ITCNMQ+gf01hPYLnSUvYwi9DMt6/7nG9hNb0Z+ezpXv7N0VRdXZFGdpnq0P3sSXlohOQPV6xK/4ZrQJURc3p5GM8TwNFnCEiWeMbncv+SNznoujvFDbyr1DUcLLUsuXABQ+gRcydWhyVXfa09WzANLe2SFnMR2K2MH3183y2ZK9/jzmGWY5k47gwObAmzQKtkO2LGyun5EDauSsmn2ni3baLoAt7VH+z/nadZQZ1NKgHHRl8zjn1F03x/3M2Sfn2o8mSqKuTG8Yh8Z1Q9QgrdkNWv8gxarSlz38tQ0XzYi2AivJxlaLjCUIWBnrAwNrnYC63hxxfHXEeqxLyUspOCw3wk7B8XHF8eGI43HF6VTjXFfB5wyszMC6ynnyFdfW3fkkD4Z/hcHCrfI4tlNeSTCytgVte2s7YiHTXphiWDbLl3TT+edSLAy03XubbJ4mryvv4dtCZn7Aq8+YyiN7dEa35LHXNyC/+vui72jcB/1ivnM+ifx9PjzhjwrvXxzoz0l+ENM5z78TT39w+p6zRy4jaoMO73jx9asOZP8cMyOJxldApYDKgrIUYFnqFu52jrkLD5ggZ3OU6Kpv394aYGppjwbJbdtXH7KJLEadN6qAgywaUuMR1dXoowGZud/VsbblPM8lNVwR/G3JVvF1aC8E6oqVt9XxnIYAdJDuCIew+yUX7iqaRbQn4nNheN4ORiBpK8rgoNqZ6edqW28kyQXAfz1DfF6H2DNqz7NOeQtAzqdEoWrgJPTh/W8ZvAfQeb/9ILdQBc7k4g+D+Ul9upWVfMeA+HDBDNz5Riv9Zo+BaNYvJEtDI/m5aMkHTB+EreSTXMaeuM8w4AcQOkgPA+M0wngDM2RPJ1Pna0J1nL99D7z9udbnp99qdlhWob/7dwDAv7z/C/7229/xP375S+PPs/+1V8t+LfLHKjDake+4k1npb1uBrnX7PxYdiE/3bRX6u7cwA4b1DQBrEccOajyn902WuZFyHBqcobuPPYZ89xZZ8XC4V6ygl/WCZfBOor/VsFVZTGk4A47HaKTGDe0H/hDnn81yILtwsDsbndo736D8IlW/y8eq8bq8hAFollWOf4ZzPEkcvmg0eT+paCQz9MIX7ajSfPfMXd3dszp2z8mDPyRdwu9IKH3F/Hr9OOBkd8oeR4foZPtFqd/u3Hp3natevx0R5xvfdjcD7yPL+0wfAJZnbZfmECYAaxEjSAua2a03srWqGdcGzGh/FKNhLUfuI/PYRR5YuqU95bUAtDpj6GoM+lUhHZzIVSH1SaENTTA32qshwvcPZhhkCzswx2ddOxy8y3BFy292NER/HGp87+WVN4xbkTqdkwo33HndkJ+PPhh3kX9Q4mHdT0eVVtb5+agDvNCfgl7q9mm0V858BXlUu+kVEXu82sfc3wdd4XAsoa5Ed+PI82nDAZ/0HOj1zCwO/R1gKNPDegSO2/WOyoKiSMrUZMP2RKj4oKCO5dYkLSmV0kYxDp27Ol5I34ZUQr5JXk7w0JVkG5InZ3AHbwbtbV1Xex7GdtmxzNydW7/JU4e/tsDOZkwytmbnrJ2M01zaeRU8oR5zFmAm6TCTzojP2LA9Pmx43nUw6R8VR1dXd1XjEwf/oF4csgIXrgvlGCAqdbV47QggMI7Mdd7+kXF6WIFPD/hy84CyfAHRDcpPBxxubnCgA8oJODDhHgu+0ILj50fw41pNHETV14ACVnBYRgOQAbOz9k25fBViPHRCAAAgAElEQVTwS/140Jo7kNkIzqSbqMeeKWybsYJahy3oWdLq1fGLRs39ZCE/2YTZz37doFQMNmabAb6vovavV3idLJpOVNlg4aK8TRHxN6MXB/pzUNagnfOcUrgJ/YMB4qbE7QGAQR86N8vuqxL1l41hNMexuw5sJlHt2wTpLMuCshDoUJ3nWBb3Cad0RYGL7FClWuNqyXBWUoYy4QzIKX+B3/zMgwUBrShu+2A9C0i+4PYVg+vstk6XDAD5d61rTdq1w67O7U2ikWUrB+H5fVDwPqpsgHLxD9lI2vjJ5bg1CkptueNBQyZw0SxzMEA1+T7iKNqZj0mYS8pgL7JiyMpzuX7YDr6LtD9mfmeTsd5RdWbq83svj1J4dfJ5GVWQwq4gZ2G19l8g57rKc/vWfb81Mn3rBlVHro7MHJ4n7bmj84HCANgPqHIf8+VMSWaGBpAH4xf2qclMbJ9240mTc7yG9Aj4hOb8zavbQ98/w9dPv4B4AT79N1ynlZ+P+NvfP9YFjJz+/iREH/Wi/vGbu3ZTCEzvq25dUQ0y0l/o7q4ZbqAr0fXsPVlGoRF3cKBtrD7gKF4SAe/eAXd3UVXe3QNlQVfBnT4fCTM91iW1KWU0RBllEdm/bgW6pEm6ApW5b+6+DBiADSxRV37fiHywleeohhMbUGtwgq2o1efhfHVYvdR0HCNHDeZK38qLu6L0OZ4+mumKbHTSowNOrjx/kl9tg2vmKcX9XccGSTZnowQm9wEL7eB/JleJ5oPxpBv71U+RZSOd+LYFc+Q32GI8/IGfeJp0L/p0OcnY8Bv6Syu3cxAxRjTSIQkzmLrXHZ6qiU8n1FBxjLhuGqEHy/9Sr9ZN22onO36o00eOV92hIp8rq3WpEkfqtw27xLDLzsHPJJuHpFUPfseJjK19pgJvZHkctg99PVC9MT4hPcpiRLmMzq1IU9WyZpmVGrpOZNC4SSppNsHB8+LatPW5O20z7eNxf3S8ggfyNkTf049sA5nJknOUs5zlQwo69EtQ6y/2eGsSesabV9NzZf6FNmk6LnihQNOioTPv98Sxk4UZPtpbb3sxKbIjx7WNjH98sM+oE/D9kUJnGUrp56ExBveVw17f2s6a3D5UzFLaZD4ioCyqe7jpXq9HCPJNDc8Ud7/R41+qOcBhE8elstDm8bJ9b/pzJHvtp/LPqkP1mw0Zt3eFpitFY5kwFgPkr0jP0WZLR//OOdGNdWtDmktq7+tHXfpj6KRPtmbxedbdLqTAGBs4TBFXwcufA+/1h5wT3Ze7tB35r5W0O+7UxZvri9z3AOQYor5cIsvUFVLlkcG0grk6yxcGSqnHpBLqpH6WVePrCcDjitPnE74cHsDLgsOrWxxe3eL25gY3twfc4IAb3ABHAh8BXu9xXB/qWL0AMvsf00l4WqH5L5DDEzKO97i8q7tRI7F7p+MyLyHJDSBrnWPwzrEb8JSHqp3DnYP40vY2ozb51CXmE7BHLQ5WngOrCTR/BbhkkP3CuFsZtb6Uj4TQPnlezqkswplwmWaDtG9DLw7056bs7Hihi2nal/8QgwaPDqnVN9p1ECKjb+07cZ6Xugq9UN263c4s9gjQp6vokWGOLI3Sp8fB8MlOW3hwMTB4W5r1jzlv2lpX1axQY3w1nBGvAtb0WV9y2chERNfNyv3eNGLdgbarNN65yQRet+ZO87X1yteoszD79fmjfz6SwlVj5m8bQWfFtFV8Uwd6en+X5I32pTBQlXvvPFdneJFAllypjjBLRmYBe33mxhHsAR4B09nWsn07wM1h9K3pEoAYPPDPHPeM/GqAC+JrRu0EtD1vPyEaSbwqAVBe/1MUzAz888//jv/67T9aIH3/o519fobaOItlAgqqk+E9Aas41Bdp7GmAR4XaBIM7qk5RYnGUukTECuC75Wb1Ztkwuh/pa2/x0JXXpsa9LrmuseYYSONVZ5Vf/ShFEj70q8o/ockUnwUlW7mqA0jtmxQHyP5cQz8qToNosrBwzwcGkXP6zRuWhstcN8r4e4z5fmCI9RT6qvAh6ENp4NeW76RNsNvSvzZr60TpY/n1rz1fxm5LxJ8lqlnJNPW/wfc9oO5U5c9bJzvLvI/UsRxYIOPLnVpVjZIlhqMC2SWEWn8XmTd17J6jrEJT2Q3fZRpBoNH34X36aCQ+ZrzpM0q/s29GY4XAv2/LsVH25TrMzCTiF9pNuT43A77QCz2BfmSby5+ZNu0Ce+NwAl71KABe0IsMXYl+1ok+GnQMFIzaATLD9jmlew5Rm5OWq21RneEgGYetqzsOhbv4qRBIJug2+OO3dU/ZmKkwbzf1PA/0Z9tjSPEL6hMeKdtLx1+ceEnvUpXEubvczNN+jOMd5PrdORtjTNWqOpclp2fXnI2sEyejfdqVhzrldGztHXZ7M7PRqYJDkDxe3siTFgr3bnj7dZM7DLomNupwdhVTP+HIJywLgVhsDkX4IQK4AAycjic8fnnE5y9fsNze4NXhBsvNT7h9e4PbcgA/noDHFevjEceHE7CcpBip7np7kiOfrInmsnYyxXcGf4zThC6bKPJUSn0rO0SmdZ3l2I6UJtn1DuOvm9cfh569LDiPf78f7XCgj0aRo/sfja6ogLODm/yCw88LVZrBi10fjmjPxymxPSaBPp0BmKTwg04oGwpw/UkAgq5Cp1Lqyrci8yW1cNwsucCopelma8LmaW5lQJzcfbSjsC3JBrxY71fZAoZKBZKieLNT3p/jZrzZDEi4Len1Ax4o7T00UIbnjF7GzgxE5rqcJGkvc17yNXfBN9t0MGpppZNrAyOr3SDxYZgdwNmarI5SZkm1gqYOvGzQcGU+t+eTenET4OR3VuhbwPlCocwA3qE6JU84vyUmHDjuynHPoEXlBNqKc3mWz1y1OEWu2G+RCIq7D2FgOLgOPh0fMgplTae0Z+TzJuGnpSnHQ2/ToCafqjND9XomGeNyd8/b9GSJa4diSUmEiyEcSBn7pP2Ko0wYpc2o5ak7eYOAAwOPLjHf5ggygQHApw/Am/foiID/Pn4Gf/xv/NMvdSt3Vieskh4PoPx7GTTKUyd4dwriS2ivbWLa3WVFuD/nm1GPGyCWBeVk5/o2A4X0wQKAqZ79pSsqyx3qodYxjfqVMNkVgas3orp1u92fyZNLZwhOu90d0pEsFoa6TzVW+1LbmzMJWKjf5GO/QN0nY/KwCW4GwnFkTc1RaFNWgqQz5fMHbhC/1XcgcpOdjPGydBQ+6egsUkLTukHl4UCdUXI4d2HUJRj9RJWzMuicoJTEhwPZZ+yPw/iSkhjKQ6SyoD7IpUZ/cuLrTXt27puuz2VZ6l8R4qQ194GuhtlvO2j9IrRrF0F37jnFsK3/OAZLC2rPJFBchTQw7CXBGVSbS5dT06ripekPz1cQR76u9dqAhZeJynp9z3aGo5qvyfp1c6KrrKVxu8/1avfcdZXmE/BydQBdNSlCzOhQVvvLFFHXRzYakRf5fqwQdrVISWR5k59b/cqF9p/7Aa+dmvcF1wcf8m/fPbcs+oHIcBV8B9zUx/F5fNN0NbcmNprs9SRnqpNVV9FAHxhdHfk2XT3IAK5ur6OVecCOPvMM/eSpUVxcboOErmZ/EsFZmORBnLvIipNCoOtohCUiUwM9OI+rf92ErE2o7ibhiy4uEtbbLXavQB8w59Px+lseBNuHt1MoA4NJfoCKPXfKtW7ProFWxSNcx2A6mBAno0ZCQD0Oyg0PLC1uiIccz6M+qaq102fh3glrSi+TjvT20HM0Pv2dx5MTu3CRj36L9tkZ4l0k8X6gmjj3GcV+MvCJq3FnSbUY26rfhKFDf0qdS53euXBCVbB7TACKi9Knr9VIbnzY8hSbSdWjtrV+yKmB13ZnXZQadHNJsJYXA7IFHnA61Y3ZSm3jVOq27swEnID1sTrQHz5/weH2BuubtzgsBa9ub8GHV3j8/IiHTw/4dPcJ5fClnn3OjFLPPcCqcdmqAMlFxr6h0iWcH8BnEZtlkcc5IWAib5DZeh8iTv03G4mnlJkZYSkXcmtYsekwTul42UFAejiJYpDw1idn4p1NNzlHtl29xuyyxsqn3ijPZ+o0Pz2vgb/veME50JMgsj5fL1JzGnzzD0jBCRmFY2hQX3sg8M1pVO9Py6PpVEEooTNnUPsU6hRsF2BnGqKUvRORANs+nYpsc9y2b41bAgM4cVU0hYCFASpYC4EXAi0AHcicW7rI3Lb/Y9StYiXhZvhiNIu1Os8dWrPkD/atOs7Yb+FsvC4g6DmudQsZAqGUqhTWdQWvDD6ynFNahJ8VJEtyrU7XBpxIeSlSjvoOMutNZ775bVzzyow86Nm0TG7Vq6tDX07DkLH9BMWQ408gj1QISIGwWdfg0dmcT2IXcPTe8c5AcIJAG9CMdvQpXaE8os2yX+sZlZ025PEv0Hi23wj0WzHNUFcaGe0m2r7uQDJqV2IGHqmuqB4UUZD/oZ25v5AU2es4uiXwe6n/OxcZlWa4Jxe3TMKpTUb7HOJ9m5Zs36pYO9ESc0H6p6JPZI0+1zAC7Fu5SR2GPuEAlcepzMDK4JWb0dcs8pqGK9R8vjFzy2SWEY6BuFI7Vhv7sN3EhIEQyt3/Itl0hmYi4Wf5/U1SUVXDqG3xVgrpMTH3iYCf5NlrAu4/1nPQmQGcsKY6/6+//3+u7qTMfBuwouV+4pMmGwxVo74663dXkD/runuH2OcgKohiIFJ+WPTqKo2taCeq+p4hW7ebrCXgUESXiW7Uds2yMpPV1SPl5ivay7cgIwZ5Is2QrMDUbZd3FaPKgBw+yruhfdYeLjBdaKR9dW3HRaBN52vdgxCcY8zAF4DfiHx702KNGwYLrbKlvhMNlj77P302zEhUNz4LfdDYWrf6tYohoBaRzqHQrD667x/ju4wdNiDJPPmOtYF+zbQzEcNBBNhRPan9dNLVvWc/MescdfLEr+Vo0be23N5x965jNEaiciFgNTc5RAzSUbyLPJT3hvsVVyNBnL0VKWFbPdZxBeCNj/kPrW49jkBq+i7erkisDQoDMqFlpdgDm1Yh0NLSATNoZaxYxfZWMQGb/tawZFiBWOLutviWMSC1aqndWeLSFfmr1sq7yJ05CBjF8y5lpHLYyo8/AvwWzQkPAB8jfrNxnysEawNO1Dio0tpJLPy+NEf1kJ5v3dPoPY/fzeIfxaHhOkWgnYrjo/DsDPbx+OC5dP+1UYUKf3IEV3zu2yTQDI4pnOlu3x4ZdrSJl4lZP45IMHyrvSC0U8KD62esvm9OFAroctrjwfozUhNwO8KNKAOvJzHwjMTp2intTrbtYUtlfVb+DHDZLpcz8avTLcWa0nfXxoLXs0nnjvTBHrJvR2D1XCRF8lOqDVPlmjrDoX7vKgfpJLihVOxBi4zLdGy1EsAEOgE4EfjI4NOK07Gusi202LiBVB+LjCR51tRmy4+tbibZUceLDLeTVdDrfocthtg0tuvWJjt55xuz2HIcdvY4YjAWiSJJUWzFSrwAVErDZQyAGKsgenKfUan3a+4bluWKfwI80LqQsHna+G5fpnCuKo2geNFpqhRJbYYOpwFWX634I2apPKktve16BABMdWHYKhGZ6Qz1/PgCrmM8w3yujplB5HdAaBGvSHVN5JuRVMkBZS11TyeqBysy1TnZlQ/GAcDKK+hYcCJgJe0LJ+D2BDocsb56xMPNI/imrlp/KIzjgbDeFuB2gdo4zORGjf9WYcVaRu1nrmD1XsfbBKyLHq8EqydrE2HcPtABI3v1QITOxbEWJMX3Z/WV8DI73ij1s5qF+CyiXxaZoIjKjaN49IWLOYtNg8lOZk0x2oj29DaubQlPWykedyd2N9au2gvbFdmFGWqKVDxhWajpM//7fegw0rrd2Rhk62auH2f8keip+bBCcBqBVDHrdQu8v0n+QAU7nFW068P+W/2ewkX7fWqxZEfIdD9Bf5nCDFaWtLtSDVzUwKBXmU4l1l89R3WlqnwLgKU60Hkhc3xpyyJ1np/QzhonPbMQthpDB4J5tUjjWQCCmZRME9tYXcV8NXAXAZY1dKGmBHhdwas4CcT4RSgotCIblIIAJAElAeRwH9CzrGWnCtfTUNCfayjU8g7LOKbby0gZhW0v96ZlwErjhgAceE3b5MYoCsr1qB8pTwr6CWEbHWvH3EBJJ7gzMklkAOqSzufT8miUx7/2WQIuQxDjLixar305/k5Blr6cyQIn03P6BPzr//vv+NuH/6jbNH9QQDOJLjxvfa79lT4MAOLV4uW/yvPfXDjtQ4WgDr36V6phu5A7p1w+kpW0He5wAI2B6ijUNkOu/aCey6QGfX1v0Wh78U7dis8xnrrtwmj/Xrlu0QaM28rQqyd1wATSEY21P33veYjJ56tAvrx9uJlh0w0eJwmFeEOsqQ10Az4G8DuqE/0XCfaIQbFSXQULyLnPAxn3moCPv9cP3/7cDxx0YCTpErOtPqdhqVHjQ/n2qm9I1vBmAXbSqCI2kswTV1J/8GLG5Ke1Udd5yZ91jjohblnbd6cCrKca3CaG+MGlY+LuY+Xr/TvHV2nyN7eN1rGarPeTabQvpqzqv+c2uKtRpPPnfLEAMe/dwMZVfE6KGeDBt1+47qLw0CqC3yKVlcRXFjexUAKsLm2zdJETA629sf1mfT9TGPoNj0WQ13M66az0r9vEn8E7Lbb7mKIPOJZ+rhe6APu2W8ZZGGBpU2sTLZ0z+CHcbznQp4q6ReYz984xoZ8u2t6oHRNCAN5OeCzpuWI9aTNhJYxvF9aetH+J3hV97LTlIFs0LrJRHTAaP2LwblUqjYj8vSYRt53MySvrpjbB1Tip3/nuK3KEk/7W/lPgdu1YuI5rSPU34JUIe3nkQYOdD+70gWBZlT9MyfG9Mur2K/4z10aIQGW1uqyP1jqBlWBzo+qLd8ZrlYt3GGwZlMqQoE51lm02oeyh6stOlCQM0aACtz+fRpYRW13E1/O5rpTbYFDDjG6MrJUQdsTwitM9JULdlkk+7XhJeewYnvSPS2gsoPfRSOFd9vE+XoZj16wYzlZk0/HanrUOSbe0RXT6jNoVqBr7U3phbDWSYzseXU07iuBZ6Gvwfi2d4+lblc0s8bEImIcPt3xlN/ua7a9p8Cj+dUzTXI17usVFFTWUiSleotZX1X4l/zYJ4nqzwS7FrqJv/VCZ4PThBDvYs8xblNlqjwqf27jACSBSlU0CxdjUKlMdJ/mqZmbQCtmpE3ZGepVtZOMzYgDHAlpO4AduR+Cw6CexR9j509z+AtesOIRjmRg+oiZ3c7GYXNW0XLgh+fPauWGubL9Wvly4c1SHnauVIxHMGe0nucdxRNvRdEzs6i89B8AsK6ahY+TWlwKunnSNhkM5lFvsd413eFYdQ+zbdTC8KvNapfKvz4uwbm3QtdGiOtYYkxG1K09/4tBQs6st3OVOOWEAhQsYq5kc6pqz6phfqC5VI3Fm80pYj9IYiYAvK/B5xfHzEY+vHwFawFSwHgrw6oDl9Q2Wzzd10uuKNhm1oMK3UJbU2rofc60CLrC6WQEErGsdC9j4WzDlusbxryyga7hkgA31HSjeb+oPGohc7Su+jadKodrW2jCVjCcLZtUbplQHMeLllWsgvtU3uTsC4qN8+QGbBrVyGOU3xbmDrt1iPX+dj5a08sg4dEPEzOLe8sl9a3o5A/2FXmgvUfrrSAWuglkOz00ZFFXgeoB5W1luMSl2S1G0eC7hm+Bk2fmIVLcRgiGIoIIxf1qZNb1rCkY0ha4wD8ai/PuV6SmGlZ0gdSMC5wfkqZKaKq9hnZ0hm6lWrwP2btodob2N0lB0/JSqyeBki6bhzkWyN4G9Bbgj3D8Df7v/D+ABF54F7Qdgs3QoYr83EIM8Nef5GwI+i7zQmcmlTeCpDuzFrUB3f7YqNGdXZZMfEWnHD9AQFba7EU1Y8esaq3deefTpd0dQHrJci16g1p674srlqHEL78FLwO55H5W9o/zM8WoMYvBcs0+IMoNDsWy39dnzjXZ+g+okl8EcPzJw6z5R9QLUbfp+UhYdmL3/vfL89q/1m7d/BX7/7/peZwwP2nqTWd8XwH4PCtVpN67/MAC6A8oKrG8QDN36Zeg30kju7hpGCIasuDqAQdLvEfutxxV+8pMPY072r1Vvo8Z+iUJwn9x5eSK0ykoQvyW39TEndyi/J5sQ2ETenhnXFK6aEcd9Vxfk13evpW+c0FM2xBklOYG+tCqm2rHd4iV0pg3029pPVj51xL3IJvtnkNAmG0+j54rT+qPe06D+niONAU3x31uYo7puSwNzKNv9BmXDEHLN5izWTqSrf8JqpWwQCcxPGYgOcZ+0Os+ppmP9jADgXZMF2t817TAhonIfzrCErHRTthbt+6vT3ZIGAbEck1yx38T7mTEarxzfez2caUtkjt7R5OUIYz0Fc7/BhZj3R6RrOvUTdFz4PKVt8sbhLJL77LkgqjrI+qVzgCi0Feytc9fI/WvJC6CpW+e2d5zC/sOuvP4j0ZXN7Tr9dW3i/6i0t9An5UvX4j+/s4471oHQVtP+hH5Ld8OtI57OJjmPixB3x1MLlck3vxsN1831St2VpxTJg5t8RkyglcAHuT4UnFaqWPyU9HdikuFl4PNQk5vk0o3KuLLUF+LM7HE5ExxsEmdHO0kPBQyWCi/y5zF/rVgic013cdaLMTf+DPOsixyjlxWQtwPtoGC7V9gocXTNKI0rsTuVZyJdgCR/p+MRj48PeHx8xOPxiAMDh5sD3rx5g8KE5cS4wYIvdIcH/oTT4wnricHLUscVJ82TjBNWh399BrXTuDU1tkBw2O9d+Zt9gls8NbU+jVGa6bEWwzZtd/BBLwTgzjOXz3WHCn22ZQp7bpnyQn8sOmx19Zd6f6FvQt9jPPYkA3I0K7UzX6JijvOTvEIgcWQRsIjza9EVpH6bnvZnPubE7r6+mQbI42x0cerYe5xIfqgMwoE1oG0pp8+TA93lcRr1c5Flflzn2Yhu9yTG+qsY4z5fue1taX51Up515jsAooORYGRRMJzDYzAwa6v05k7HLR4uJE6/z0FiDNpHkw7h6NX//p/4cnoAjr9W22oO3oGoBNZD/8vP1Tgmg5y3AF6hDvqO7rvPaE6yQs55Tu1Pt3AH4uDUO9U9P8EgTY038i1lrcDa+NaNvYoD2qnyhoMVjuUURiLS1kZ9Iw+WOke1z5AOwxX0t/4wr2MO5R+JYrjhc82H42kiP+etbPSG66SJe3evq9Dzl+SLMtUhub9QnHJRAHz8tX787i8xq5+aCGrVxyHIn4JC/2XEySE5kKNgECLYrLNCMpC8A+hNKH9Lw+JAqj95b02J7L0andqKTsEOenyCTarR/l6FAItBo/Hs8+euKeZ0XMdTcOD60GhUKZkPOuVMn2Qas3ofg+pkD36t9RC/AaNute3kiLqk22rhAS+iN0NinJ6lMvNzFwAAX+TlQm3H6s+OdytsdkUby7iW3ByJdM9ttjrH+xRmS+v5tzSKs0v7jFyYJrate88wOX6WV56fSWIrbK2J1AhTuB7GuvBe9ZwTmj7skOd3iJvmuS3MCQDeNw6IwN4R3GZzxiRTG28LT6jpkK6/JvmYJ8YGVenaTRYdo3tt7YZBdJU4m/xrsmSEAZr8NmhhrEjm2IVjGbGRYn0C8F7K5MOgyLh977If2kPG9ApHkMozr/R9qlIdlfeMpuJ7gpHOyOq2u81smd0lmboGVWzopT3fXiIjhrTVsDfCZ7lit6P68HonXteWTS1Z+Z5k8hgzZWiR4k2KTC7NGT/g47qx8Rma6Js/DF3dXq6greHMXvqe/D8Xfac8hBbZdY1LmJrh6P6+iQnte4PwWxiL0XalExsBia62uD6jOtE/x0+nOGvwbMhCiEN2NCrtjGsUBhXR+bZ8lwIWqesECgoVGd6QrVYnoDrNxY5KCwF8EtGx2spam1uvmXY81eE7bepSAsKpM11mc3WSxKFp9UA9fhbSf0a5d4EMHTnRKzetwHRyInc4iN1XVM/XHrKzPR1YodBwV1Ab0O3QsaGuHCCUlzpiIfjnjgH/WHcH8N8o5NX3ELX7DJPM9Ox4a0M25k9NlNHs1Mw4HU94eHjEw8Mjbh8e8eonxrIsWF4tONAByxE4nAh3jyv4eASvK1au9oF6TOwROOkxrorryf6q/Yg9o9Zfq82DW/7JhQFZGZp9RHMzw5g7oGwehtiL7NkmbXM8bTbkMQdJLU/6TnCsb8Uz4Rt41h4+p5mseqGrqVuBPpztg29U0S/0Ql+TZmPRvYKF3F8GPkA1xMwGw6DmOF8IKAW0LMBS6nk+qpjNsFL/WFcBUkgcYN0CJmaCJ2m3cyv9N6okcgwOEEGU5cpY+QReT9V+t3LbnnllQJxsxCfQWsJq17bl+wm9I527NEOZXU2XVXIABlqf1wi/bEy86Fs0MLKH/WTo6NaseTDjgeTEEbmZqJXL99IMvkyyNWHLujATAhv0L6jO8w+/dgC8o46VXHeuzAnQmbpWim9FThyp9q9PCpzl+fsC3JM4yt3kG3OSL/X6L6h98He470esN4MuKWDMmXAzwtvH/kAjuGsHKAPIdmVhgLwfHJGMStpuCejDpW80XKgaA746CMmQNbnFdk0VpXHeMi/6fmectUhy+5X0gHou9J3ep/gOiJMsPC2Ivhbd2vgdxDHf6t7ow6/1N602MxXkxkZ/WMPmc5E2adIBP/o27avtnoC3pcltdWrrFG1m4O4DwuQy6VvWxUgGwsE4ztUwRJDzlnUXGGoT8nTyTHCmU7uX3SzMYJUn8ZDW605dE8gLFS2fvF+58uRli7a/KG90XQabLFF9VY02hmPEKQA1unHN7mjyjorbiGwGsi73vSy7R6olZEcCLGir0DXKI8lBdhz1pxnYyAbu4btAF7osRrpnz0cp6EyjZl6ulgh7jM93g7rxTVCvb937R4yJ7J/w0O/iHbcfz9fx26iDdsYLvGwAACAASURBVJIv3NQUp9Cv2x5Kpkda16fz2NWvTAqynKxY1OBUZYfHstx0rn7vu5MpDIloovJDn2FuO38avYt61C6LVXVLxcmQsuqujCYvmKjuPIkqKhmMdWWwrkJnNPlu46T3kt7HkL4hFOrrPPSVJE66ALHY+29G16P7GW3W/47vL0nru9P3ZPKZJaHJJdceCRhOMqWW3lg7aH+uDa8Zd+s/cVIJoILDnCMBmyaZd/UA+Uem75jva4v9Yoz3Qh2NynDYNzc+6PT+aFwpb2jb6Xi2Tr2yZIB0G3cW0SAbzPED6oY2uhL97AR0l0TGU4a7k9woMCxvW3YXvWYLUzfOYOOTwViZbT6/7nRZ2W+lU7eGL+JgB0BrGrsOygZt6ECjMBZ0gK02+6MWgmJ9H/Ar7Cy1lxLPDdpNVn0n4pSPUfz7dvnysTSbhK9bANs8bb7z7D2xpK3uArPtXfh9htoU7N3M/uM24k9brBsqVQf68eERD18+48unV7h59RmH21vcHm7x6vYW9PYNynHF6csjHh8ecDyeUPAIoAALg+gAphNOp9Udqag8tPF3XIsvz0uBHhnAXI+HsjGU9ANiPdIp5khHGoHSbZ6Lu1nSrq9pfyafkrwfjR8SUxtJXHhueNf/dyb0ZJoJvBd6DgoO9LhCRR9ifP1noJc29XTKK1sumnUp1H3yDRrYDODmpLtwewAFADWIZsuJnHeOhYDDgnIooMMCKkvddpkqyKz+aLH8eB+VM0jJfEsPF93zYaYtD0NxmpSSAheNdWWgrCv4JOef65muTPV89lLq7HY7D75uYm9nvPCpngerjvZVtnRvqLjnys6b9WWKifKZZVsBj+bfpzNTfByr7loZERB5XsvGKf6RNa3xOyJvDMmGvC4an0TnNB/0Cz9zNpPHTqN3wPm66l5zfH62z42sk9PI0edzC4LJ83/7p8rH6Uv9vUvvNSnvoO3YIoS0nLeM1IEG1G2JD1RnZq6oA1hzfhdxnkN2rSjmMKewdbM609HSMieb48f1hZaT0Rm/XAeftFhbNgdfmPyif2qy1mtfpL6RpgZEcL61GcgMkaXb4fCipRNkswfS+5M4n56QHyiPHCwuej2XLWyZ6foc33N1dvtG9TuAn7mFgeaUgCM3R/k/oWUdAN0AeAD4Yyx3q7p7d+1VS+qW9X1++INS7qsjkaIVIm1S9Xz0D8nNPQAuwFsGTiz9UAaVhYFSpNtIQVOtezMiURKrKocLrG+3/q7vvDzwf35iTf0Lhiz79X+6Wbjkq5t4op+M9VPgm92TIAu7QP09x5DB8U5kg3AzHGh+Pium4BAHAXUbYs+yp5Kek/2T4AABr+WBF2+yKpY/UUsn9yHT1ZoP164ITm64bz0kelJni/Jnj2GsC5O7+qBNdBAuJzNVs70cz0FNZWi53rv48lj1LcY0zXfsAwo7bVWtdsiur7jOisSDN5LQRtIjynhrRVuJTRIgOM9jXbRPRcPRO3mjgv0upkPuI/JtTBptcJYBwSBlz2t/Y8Xyoa27uEPUrp0H3cwCIRhMaXU9SQVRnZ9SCGKrI3GnO3ZXoO67IcZ16d+rk9UMRilrDaX8r7VAala13Am2Cp4/WB9ly3vKr8Y1I4KMhXz+XRnvoT3hRmF4453RoMG6CXXnZcgTQcEl/eS5qetPF9LVkwmp6zLWQaIinHytu0J5YU0Wb5uII1pM253D3Ob84uQ897owZzO336fQ1Kj8A9D3arNZTzyFvhbvP2pdKm2Vi9f3uzGNu85wN78/c9355kqLNiCBEW86p5W4HQFVmjrWITsB9ai4NzAneo1zUq8Zs03uK5YS/JDxVEllqmdQmzhjOc+bqy3SwrKTQSuci0/iIVApgicCS/AirkbXAugxnJ2duxXGuF6H4NUnOlbKwYmuwb6WXMzxhqz1gqVljVyYHKIvABvTagUF1TRooDq+TvcdDrV0Mq8bHdf32zSeCSqsy8YApzpdSA0Itnj5ukkRpoeJUUgma5C269hPCLD52MRcV5OfGMcH4MunB9DNPcqrVzi8eoXb5QaH21scmHBYCccvjzh++YLHh5MMZRlYdVc2AuNYn8us0+BxKGgY3ud1hTjRZRLGymh2sNZngq3vXHnohaukmYuyE4TBSd5asLfPWflpZA72mGz0cXOGZH1b9PifLAwsTX0fZHa4mNwHOge+UuzB7vBCz0HbZ6DTmfp7oRe6mL7XiGODqLs4E9ZJ19En2XEiClCN2SSrz4tu4S4rxsxoo3hklY+ZBsj5MgqTY4ZRKXhp5qX2asXKJ6w6I21dq3NAHX1csBYCToRCBNAiOoXse3OarzIzwBm5eylD/W1GO2eLYzufXZo8uLl6dn3SvL7tWDIJzW3RwCHnk4q7rY94H307K0jXXp4TxM+iCtUyG6ghsdvBjwnlD2cdNz37BbhdbvDw6f/WVb4fJp9N0/ThFUBq2sUNMAC8q1uU8Up1JavJDFT58FfZueKzOslLO+8c5LZzlz8A+EAyEHXpdHIrDipiW/UWNh1ZLy4Mo62mZeDnE+ohi1zPbUeBzvxuyHN1dUwunnpNUOMztXChei+Ug15eeJF2LqbnUFO5eW51NT+ezbNa79GfQfq7/P4M4ADwKafDgCwmxy/CBqMaRDJaJzinX2q33eARrT4vOt7hD05hcEat2fmVlQB06zlr0tavkr6/J7dLy6e6JdpPcgi9rUh32wP4EVwYbBawTIAhdYo7Z3rt26X9Joe5xefwR8AAfhZAaEBbum+gn0fmCM3POzfi/JCjcGnZzJHatqwJ+hklKhZELzUJJXrKD+wz+58AvGYzSHjj2RxXtLKq6pfTClmhgroavnDb/vLg4hQRav3W4mbjpetnAStcgBO+J1H6nb3XGxpdp3BZfua2O+qDl/AaHlD3hLvXvn/S6LPr9Eduh+H+DsAb94xjuRDiZKwu8reox0oMkmUOuodAzdFru0V1H9kl+XNV/W+uVw2ks19GOpreoW8ThEKMwlUWFtT+RtwSKSQYgkr9dbKICCBbXUVYsYK51FXoJEZ5neDkmGFmrKbv3gMQJ/rKkWf9LJdtzpvmec0FNaCZGN4SzyPiyfXVEbsviZ51qPBCe8m3I39dG6NNuO8cW3D6BcgNV7eQ7ev0LHp+oRf6sYm6C6Nt8ZkwSX6eYyD3bNSlkv6bvpNYA5wf8jf4Th3r4rTGSQJ8gjsTPQiKMU+DyZBb6dozSurJw3cbq6zVMbkWrAuDZKto0dAg1N1l6i6Y5MZvjhdXNWEbd0Q+w3fu27MLRz02tDgShveOtD30dHU8iY/aLwOjMTyLzKdQL63+21GQGfj43/pWHbOj8KN5um09lQvbZrXmzPT5s07gxqDD8pv3a7J/Kb70uFqhH9fJ3K3On0c3Kg9tHzc/5ojh7G+VvrwCvDIeHx5Anw5Ybu/rCvTlFjfLAbc3N1jeEI7vHqoD/fEIxoqH4xHACYUJfACAUndaX7mJJ61UxdPyjGXSHTkeK56uF6S+DFlL0EbtDRzX5hgPKvNVmetyq5S1KxpPcJMGzakeDzXV+DkvDukSiu9HR6vpOMq24e/EZrTx6aSF62hLUEzk9wtdRYfpbGJTBpg3oB8aRF/B+z98G8wKAwPltkFd0O/UjoKOdMAihJkBRBpedgmQfFdIVqBXRxiJ87yuPivVFqPITVefjxlNaToVMNLdAdBTi2rIc1XV6kQP2FJXzOnq83UVPgtAJ+iW8nyiug3MCbbsg1eWbdxP8h1XLWqr0DXtXJgJCIU87mgz1KCQ5ZBnN5PyuLavuzZjKw1jCuO0zmSv73Y5r2yA9Cm8TuU/p4uIsjEssC0mdhv2tkjaCeVn/jrdTyekyPNfgNc//098Pj3UrXh/m8U9SgvVsfkhdTbrg/44Bch5rQT6iOosU2fXW9Qt3P8i8uM3atu266pyuGfqYPtZPDz+DHS7d2Xl61j7oFVrk4cN6DkDHcv+4AYQde9VFVzkEL2+10GAb+vKSBsKxwHUoPHt6Lb2aR4IuzBdNFvVOoo/h51F6PObBmEWKmeT0u8nF8an87vI9Hfu2VuufhYNr07Ln30f8QMHkvi5Gyg2Phhx1aBcDPP94xIBYz3KfdaD89V+XSUVAlDE0VKAu0+1r9qRJ8XkQNviTP8Ac4CXUt8X5yi3aw3TdqIIcelKE0lHDhKMItEbVbxc13yETKZvuoIbhL1DPZp58KpZIsiaU/++6TZOz3XFRNv6T+SLzCyPIkNWiHt99Ma3de71QuoLwT4yEPtDGaKM3w8a1XCM5XPq6mPti30vqQwfrYztMMkojOdmygMNL1Ni4/sc/r00ht+Bbsb8G/fdJ/n9i4tPt85/wEa9JF7zX/5m9L0aVn0Qr1dH8npEMxk6XfF15969RTUO6foQFvZUb6d25PkPVJfuM9/JL9ezRos0epvAwX25rJJOTm6m0/y3+Z2FcXFKeepK86XI9u3SxwtamyXBG1o9+nyVRmEr1IhwQN3i9YR6BuQKhm5Tf6zW+LobGCuyEdnCIsyKKNYEe0J5e5xjZeXKcbYSPUWz+/lTyTp22r51ItK/Hj01oWcoEGt3V1KXhSQIzsqFLR5cx/IAUpumhUkdcLNYx7LKc+HPtu3eBtzzROq8Kbzv3bV0bbv+kWeMXMP6U4HIteT1xLdIzHA40PVfC7YT02gnnSTVfRNwhPRsF/cIk/E0bQDEdTgu8en2ykAbptNKzZG+omIoW7k+Zr3DO8C8TCSoDTMJ5h9tm05SgxLkA3pHVcSzDK4sc93evdO7lHb40CWwpndJhiCU8urbgNPpVviTOs3jBD3vOW7D465zd5wBggspy+apA58dOzXtsLNXjNBxN28Yij/9eCI4FdN3Hj62Jz4+Xy2pT3perXG5sVMGngM9F2Mc5GlQZH7y5nM6z7WUWXGsjeldCHlWmJr/YK3tn0+M9fGEh88PWG4+4+bVZzy8+oLT7Sssr17h1U83wPsT1sdHPD484riecPp0wukRgp0LsAArEZbasQCwnMDKjkfhmcTRLn2og/vUJl6QOaijzJBWB5vm56vPyne7Vyh2JWhb0+SpxWU2hSgD82KJGXzq0g9DIu3LuhBD8+0iFR7iROentJ1cyvn7Ucv+Tnr7T0r9CvRkFHihF3pW+p79twO+58J7Ae+UlzdwhzCD+M3ZVcyBTqWuIiNdVSbgsAJYtHPPM/DRP1BKe0vq+3D/P3tvuh3JjqMJfqC5FIsi8mZlVnZO17z/c82ZOj3dPVOVlZk3FkkuN2J+EABBkDQ3lyu2ewNxFO5uxgUksRJciuJojNBoGzklZbE2KrgyUdlprmUxytHsREA6lYlLNWAWwCJ4+SR/EkTnFc2EnP8cduIzpNG3cvBGYOMW0RoZzt3rmqnJPBlv7zhc0HfmPGwisllCSDtxKrzBq7+7pIP6Oidli5l7U3yz7AH8+Zd/wz/XJ+Dh78A/JsZ0Y6wHXJlKUJNQ+P6DjmH5zw4VekvAZw1qyZglAO+o3PX6jvDqD3/BX1/9Af/+4d/rsPoAt5MFRFR3yvsyyT0z45tN15dXzgyslqe8LV50MZ4z9Nax2tdOFjGjXmaaDc/yXD11aj0iszm+kuWhrGHyc8IrI5t0i006z2FSjjyzOLR3MlUOW56B5+a/E8nR4SxxEIKdS+Xr9nShlRO5YRTEGU4uu/RAHVLF8TdpKOrkgQ6Q01HM5ag07afmHmK7NwHGFwkAL8AifJABJD2FIZdjyAGwv36h4dXFbAcmuSYlyekTeqQ7QY4ppLLzkvwdzq5MUD2NItKGfu34Xj/CBISHc8F216/te8csnsaEKbjLN/i1oW5AlaRJHySXlgEiv8OOxqgTqqfEVHeYxy5h1KMoI8KfXZoOeU2kY8PoFhSwGoffhuE4fLYQaMoe+/GcvEPMR+0zovbo/UHSoSnQjE2k19H38FBRb3Stvpu096VhqGuovgMD9EnMy7uKWhMA5SZbacs70fWfYIFzTeP0TmbdzeU1M9tkVIOVikl2ZUW0fXtMRFKldyjd39WENiFGxY2CyDtpwULuuEiGBPxlYTIgB1s7xKi9LzURgRbgtBalRrIrfuGSO4kcIiYQudIYKKuCPsIEjIm3oDtHcmL0+yXoyame52Wf2EE74KK7IL9L+B7xV7olR088kGkik0zhlcQklF7UfrExGnXN3owr09eVfEaXhmwZwD8YdIGVS+F7pJevBb8RGnhpmNokXm/vyGO2xiAdQlHRFml0vUsf9ZIwv8X9dLGc+oQ+bd3hE3AXW90FpEcqbmov+eeScMhVlJBSub6qLS+3lZmhKoWWLbTVLs9w8tP5HcNx0TRig+iixDjvYzbMpH31jPgWxybRFlwjZ9o29IuR0OM+2ikv80hxCtJbhh3WDLCdUOif15OO9lwpFdF9FoyC9q7Z57AgBFLleZ6rXQNHYlvYebZJXPo1MdkGPD5l5KcTnh6PON7f4/jmDdZXb7C8Jry5fYWbPxBSZpyeTjitK47rE9bTKjxcxibZgZMEVhmQMjSyr3Z4XiVoYaQ+sE/U3y4rApxPIOMSTsA6Z4pGS6QXudTMq9U0nhbYZ+hxgLJCDYITVA6Emkd+kQbqfZ4XNxui0I1UPaPy37P98jJwGAeaqO9reQzgZ7//hH0wVY7fyvge0fUEFx8kj8n1eRPUHtVFdadYonpc+5LqrlHAObLsgucwxUUyMd4Ez+HqNYtygkOTzgl+bw0AdfJMPtWOokRIOYFTecA2Qa8WyCp3Na5lB3rSd8Vh57zW4LkeAc/uGHf14iPel9JJ7AeSNW+j1Za74NrJgpA/0Ak5fKcYUZP4LNjdncPJrFl7Sl97n8Dq7IoJyrjbmeDTxEccXrOfjZzg5fCOuEXj5yzQwMjp8y3/51+QQTh9/M++Xg/WYd454Sof9Di07N97XkTZQedljX5+LrLi1Z/+FX+9fe9k0ewPNXgKKkGerr9Ck+MzdWiiEaxOsiZDggXR7XgtBm7uCl9noGwd9EF0/XQ0SDBDvKGreFf6HqNzyzYZjZ+iQRsJo5w8Kw/28EaP22iSkkOazUl3j6ce8+6PmSZCN/mh/aunEvj+83/23Dk1Pv814vFbQyDFaYLYJybLBgX4iQrmMvGUcjmpJREA+e54ubCQP0VC+tWOZa87zjkBhAVYSgBdTzUhIktfg/KAEYLJJB2z4FjqhDvBJsPYMsbZgrGs544wXdIPXBYFtbWiTvRrIVz7bkRfw2Cs1iP1c6tTTY0Ry00U8p5gdzxauTFYS6Ed/rtdqcDlqEtCuyT5ST719AgOn7ER7L6Ta5bWQbnL6HvfTwhdAle5c172zILiIzti1H5N69/fodi/s/r1zvNRQCnKwBkM1alrWNQTQVzaaQjkBxjh+wZsqZWRjPJf3HcClx3Yw7KKXFHaL3bie6lCOZcB3Iloy+D0uexIa0sp9Xgd59jVcI76yj7ZPSZnQwjfQ4LnDJv01qEsoqtcE5VIQuDMSG5RXs5ZxGcJFFIuPLNQgkX5GeVKKlIpR7g5HJBzxsoZzMCBfDCRpVl1Yu1kjZK70fWYl3P2B8fvjkYi+TwTusnLrs6N3zSZ1KaZT/Ec2DIaXqqObwCX2kJn07u+aHxzZbhYUCuY9M5U8zO7uQBJyErjeumBu/qgUypTBfay0LUxvHsRmNgYu7P/wLT6ItBoQffY6YZp1i9MP+fqbU44eOGyo6LubOdQN8W03LB0W8fgebS9GlwageDe63UrVBdEA8BBvqxUcQGKfXtsUZ/hqP6HvuMpjznbSv5YbL26G71AOQ1HTtoh1PlHnTsYiMrSfD2Ry9ejeaiZDirHRzuchwHe0Gjr3tj/+lwb4NLojt7uCDMPLyhbzL+nIWo1nXvo+aMR99Um84WMllo10ATiz7hCQ4RieYOkzdgEHmOPtKuRA+7U2k9DdlP6GnbgCwHrsDk/nPoqk/BLYmHjjLLIJBPyyuCnjNPjE54ejjjeP+LpzRGcM5bDglfpLVJmHB8f8Hh8xP3jPfh4Asmih2T3l5c5AUY54cHuB9cAuupq778CJXjt5VBicBZ7RHiQtVEhiK59cCkf+Dl13f3d6yfldbWllETsS1goQtAd9NVScq/R/6g0VHegWz9VRGu2PbbEJsOqnTfjqCi4N1vxE3ZCtwM9Kq4vbSf/hJ/w3cBosrR5j+qEWrBrklB3ncsuc17kvvNDmQRHqvqBJZjMq2jBrI6driBPrW7y9dLEzIjBfRqqEgfzN4kIh2UBM7CuACfGmhKYMmxSKuttN3J0KhZRCmvZpa67zi1wrveh83lHtNUTPcpDG9cZ7dFZsp8cPl/akI2eBZsx36AxcyY16LXL2dw7qTFKN8h3rdyPXTt7P/utK4bjWDbWjbN2ztoCOxv03/6APx5e4W///H/KiQqfNtI2csAZilpXdni9k7S6mOYjoZ6xHvFMdfe6MPu//1//N0ALnPfo2ssSnJL+8Md972r2QO6NSILJjGemVHbi6j2mIICT4FaOpy6ZJHjO7rh3baMG1BvnpqkQ9YI2/zeCwYSI99K6sgPNeKNyqx/8ztzOwPfCOFQ+o0mCyIXB8w43/QhIkftiC5JcGY6OnIVfUezq1vF0SXXlvt7zzAjXjPy2oCUbpTtHWHFXAQF2n3WN2Bb6T0kcUZYokPJMqmPj9bU/nt0f266TQUSg5QBokIjITogh4bs6NzOQUf6r48kqujyODj/3m61ffI/5/hp0qL9WIDjbvZOr9VW6rdxfHd22QQOGb4olNPTuk+uz0f3mQNVHPi3Jg47X3PdwysZQ/W6ZH76wRH3XOlnTTWKNfOZBsc+GTu/58ij080xu0ziPfhYyr+X4T6AuAFrRwhldVvHffNDWZ+2lsb6yxBd2aqdjLiiWVdV+AujtrqpVXvgymgkcnQzjt1LpZ8mnoqSdYtQAvFfRIxWoNODNN90pzhAcZEe58lty9dWdtHXirr4rd5cvlk+eJgJzFgz18kaRd/Z/2VWfKJUjYE3klB3ppUnkbjEpd7Fnk/EM8HuAQhCdBt/jM/3iT3y5FF7CRbmmjJ8w5bsoJl4k5hp3oHOZmG5lfF3mwo7u/GEPmraYdgMlNDxhaCSIrlEiP+GHg264Z8bFDwAvRcpbNkbzm8cs5NOSS7un3lHw3Oz4JiEaPzIemKXlqJ2pCn/lshj0DQOPaGSMffr6YqDStacu6uE2r+RX3dvEls3kcj6KLQBw8gyAHi/d4ZdI1H+Zg2OWBY/BVShq3+XzJ8PhDGgfzOzu+N6dNDWt4Fq2sqZQ87OV8/6n7xDfD9Suc4Senppd2v6I/S2FF82hNmUkAE1ADepWQp2Yam2tkGzGqN7D3xIB7JCNxY++Pxd862cLUNT2VTZOrJ8kJ0dpEH3F6eGIx88PeHh1j8fX98i3r7DcvMKbN6/x7v07PB4f8fh4D8oZ6+cj1qcTcspl1zkDyLlsoMvKjKh8CQnk6wJdC6i7HeBUExfR4uURVT4Gaicbv4xpaNzPcflDPydATUpG98IcGPcb6OWxNa29/70NN5DJvXp6xTMc8d1yIJYT7brRZMMPqru/AzhYd0aFuzWeWwL/J/yEYNC15EK9wXcOosB5kdWrA6Oz+RwlbxWHVwomOW0SvPxRKhMznBLyUp8XPa9GIJcYc5Yd6LmWrwH0sgvHLMlqTOI8G/q0TXv8zvNRSS5POcowASljbYLxOtmW5TSlk54nUxfj5FVWXLpguq5uG2Ps/rwydV+aI1TQ0kTnUMSqJu2tGrF59FxqG5Ye9ZcZpYNdVmbN7cDA/KJLhHKgXxqYGcHGOFP58PE0/2a5jtccOvW1M46MF13BTdkjs3jQp38G/vL6F/zn6XNZif3rOFmLgytLf99I0DehXGWwEHCisoDmg0tL9Y4jANXAkjJv//hnPP6P/8S/42/tXcYA7D5qrZ6lro9hcg0Ihl8v3+qB8twEkIb0qE6Id1BsKFKVaSDYfcsq0JrGBgO6K8vh3uxS178AylzdeE0GcJSukeezTO6IENJ2bCTfonGVo1vpTHmqoNhM1Pefvu5sNip9G88i8zxL7rVcec+sThSKnF9fQhd/D6BUS/UXhz/5wk1nevk5kEV65/ki6e3UlVpnlWGyyI7InVLjgulEwJ04qksCLW73eZaFep89/UZ8qkwlf7WClwnNoi1GvYIBQEd8I8KZQSDyMKHDxr/yvAsSaL6xE4s7lCsvOuJvMWve+OSa6B49vEWR228knab5xeXzk5GxMv+5k106dsVkNb2k5kFQpRueWd3PYWFPV7PguX8+nTOIugrdhFG3Pi7qHo/DSPZN8Q8VGG9Qk6zbc0DhzxBzXxw+U5usH+Th+/nVOpBAuN719xnleHZtlthBuugGVV5M7723oFndKUJ4B+CjBbtjp4Yb/ly7XeMI1T/S7lFet354X/BIxX7ywfOkk3PyRPFdsCARIXMuQXM/MccEXaR4C8ZRsWMq7NrQWJHLBzHd8rrarhvpYWRlKSqB+pRrcD2fC4DH57qAYXXydnTE44x3toDiCG1AN3CDJCGQun8n+jYWL+LGvxA0MuVKGMWz5BviYMaDfdp0Lj1tEILZJr3CYeV/FQXyxYse5hqMAuTO2m6MtwlxS0Ztwaa/Wh2jZ5X9xWFrTH7TIHJYxoc75vE0i5cZv3O68uLyerujwkxfkzLMuAxjrGAPRdxHduDIVozvZ+8iLt72ipXHYUo6dlU3AgBuXH4mgDPwSMBr1CuMTNG0nxQ++2bq4je321RQYG0LuU+dlzCbSw0IOSWGy7NiXsgnkyWNtmg5RhphmIWWbexq+eXFpP9GzzwNNHU4urF75aWNdi0avqi8a9Gj9kV4VJ77B/G7HnetCyKo6afOThgo/G1bYlS3EkksG63K7GSzp8VBu9E+0iqie9isueC+u14MNACt9dp/+puMjAoqhEWQPUjwnFcUG/ZpxdPDEx4O97i/ucX9qzd4uLnFq3cHtpezJAAAIABJREFU3B4OeH93h/V0wtPTEQkJD/QJx4dHnE4nrKeT7o0rbLTotU7KHQUPShK0zzWIbnZjhs2DEAlPJqrzSOoQxLEQvga8f+uvkOK2/9U/YbdX3M8Tu76tPoeni4E14k/+8Yi5PN7da75rGxyvxMWPSv9zS2KLws4ZrZGptxzN36Mdcz0cGjm/paB/wk/4vcDQmPVGnfx5wxGQSRF5JzvPKemd51SD50mnpblMrmdCzrIDXZRQKUvuL0upxssu4U2H62jPGJonPJehZrBkUYoZ9aY0dkYfA3q9Ofl7h9yx7Sj56/eRs940AhcJ+HOzMn6i8GuCtJM97QSId69cLoirQh1MacbaYLTa0HFnQV+Ig2bbmuwJv7u5GsdritaoPbPFLm1hZ1EFAPwCvHrzV3zIT+Bf/76987ypO+B6kB1Ui1SdHT/bjl3q0PJGORjAB8bxw9+cE7kBel8uy6GjeuxSRbY6nSFgGpdtqIwZVVmPMpVPyyr1//2jxJfdke1EqMe8y/fRBVKd8yOg97JlZ2S7e1kNkRHfT1f7U/uN1BTXXfM0Tq67hrXPmiAVt+mZWrp+DzvllYZ1TPilsX0dzTVJZHecEI/dz61JyRcjcsg6hqRJ1fEFqKIjTpA6PZxzc7X9bxlav6no5uLTub4ym8B99++U9p2aVUdSf5b0ajek+rcsoKUsQrFdEXKWMR1ScVqjTfJe0tnx4o4AGvFORoetXSH8aU6tO/p4qIb36OYL9Pc5aBxi+WSu7dWxMJtlgEuzRFwSzyZ77+T5HSoPal/58daZjCcAn6SMf5VEdmc6tzvcRzhudFOZrEhO/nKNu3W2wxk4ZycN5elGuoZ+BulGd8NvwUk+/RlpFD4j8OR7zOD5wPTrhfgNK7+gjFlS//xMkc2933EySQsze3Nn3ZOuIrwH8Al6xQvZjiOWCVQ0OqTrfm9369HsDS7vSxtSAjPbfeelncpqcqOzLb6pk3WJ/Aw7TMeVEzmKz3GLwjtPhmTle72PkzihHrdY6tCjHe0ACG2cHsVq4Hah+3TWB+77CJSZr4VNP+4njKB0/TUygK2ctlzqfsf7Nbs4A5SbRQB4WaUJYtVeVvg61cV2PKi8VLHWpBOBY7qR3O9owPxe4Vq98Y2qvmrc2gVYF9sev3eI4xbtmmsWZnibtLHF/HiFR8nxvd6Gou8zwAeATgROBBwZeEuyE93ZTiQehX7ClWH1uufutyp4El+0nKTlfB5i6ML1uk6Nm2lH1cucUQ69s1N0JLvMfRDUJVOjIsi8RmeTKzw+j2mxMWQuvRkQZP3W5ndGwtSHuRDCgo/ehfMEOVIu7TN2eBElkJu7KBuB1FfWe7EbIjC/s5S1o30zX8X74bM5oGjUBt0Yx427L6EaV2osIj67HkpJk+liRzqEBUUGJy62eeISU8grg5GRn57w9PCIzx8/4+PNB7w53ODNcoObt3d4ffsKv/zhPTKvuFkO+CcW3KdPuH+QeyBPJ2QQEsqpk0ip7Ex3WIKAJPEP4mT2NMBydPsqGwIKPuBUDuDT+X+Zu2SRKXpfODUBbtcz3C8oN+kij+uR6YPT2YZgGRH5vvVn1HeAG2zCvipmMiVW8hN+BJjcgT6D39oIf0Pj93cAIzvxIgp6aaM8WnRAUO7u9a7g3KBcM2CpBtF1IkuD6CJrmcUgzFwUkr//HHATRDKJLfXYPcXkw1/RCxd1ogaLTxHtpdkOdH3KXJRxzsh5lUkztVx1dymKUqQswa5Ui2NNJ5/e8o3o72XJM3Kr3qPCL05GF4M3YOV7selbp6abCCefZmxwxoB71ysjmrcX3ogntJaaH5CJp6CWk7ZxMBHkS6pID9Dp0CM3xs4kpVDAyPa35cXB8tyq9+4vSLTg/vF/AZ+o68med8TJ8+l+oRJ4Z5Rg6TsquPh7zrVtjXMbarIV/T3djIDey5dfAdKdrvWtw79lskbcWe2ePnvUqtEYGNY5qXZku9GXfPr7YZpn6Psi/tbJ6oiU7WoL77QPBwxB3S92znqbIfqWLbu5B51BHPrnE4A/yONPLVqejSKus+eR7KkppBr4xtqxCH/kmi6uCGRTy3TOQqJ2McNvzITq9Wkc9CCL7C/IGk1AaI7e1p3VzU53SH5K5bSKlMoR7SmVALqzGfAIufdZbQOUANqid/0JDu+kcD023YLspVZyd6MTgHHswDmTrkmI3RGa3BbhZTEQJ6za7EHmAZPZC1+mfDaLWWbIYC4nFBuien3Gh1IGAcBnqd7fMf0Reo10fXYL4J5b3vgLgP/Utk9oyXCD+NfcdbvZcp2txL3t0HXFoC/22lCY0QdCF5PjhZBmr58Z76CXA4sIBNxIFRoTBepCno1u7fEcQERZJ/i8gnR/ncxmVzGhtakvsT897ps4e7qBBdG7Anyw2U/8UrUdOfKO8ZrftZ5A9Ifymj4C9A7gjxUFXcyh+EB2b7myVI+w4kvuZKwyY2646bAezH+pO9H1/nM9BpLc9rQbqZ9RFvmuUD2YwMg4FmKqA2ttl8VRlEBYq10gfZRQAgjMjCz97Cf7FipHxefIf5F+fL2MIu+BuhO9E7BXwJXFxJ3n+2FMuDMRMLxz/SvDdP79GTAKmpc6ePIb/fpJo0mvDx2fxkCAfjZ2mbMHnOphpXVXVzfMfpLYEFL5RmjG+Ao6q3bQC9H8V4ZvRbpzn2E/XJOdjL5U9nvbo9qZLnFrR5+tfCsBnXl/JVD8MjMmAg90kemBHTT7PWqONXOLN5xR0thZFLqJazURPb2WS+bs/AK1cnIWwAeSjQAAjlTstAevmeWTah2Nl0qABrB95X5+qxw0VxcFG41fONSar+06b4t4OhwMQnMxeslkcmpY3l5wMtTLcn1FqLtyX2rScmOjQZy/GnVz7C77agHSkrOdRhfrj+GOw4fYe+3JFSY3zvgtdcHXIN2ueYgwpj4AOoTe9mktNMHLTxPsQWMvRFcRgC0+cE4JOQYhFDa2P+JyJ/rCQGasTyc8PTzi4fNn3N++wuPrt3jz6jVubm+QljsAwEIJ/LSCGMh6SizXhRAZALgsjcgSRFfJohsGwSjXPXo2Swksp9RSSuC8olvyS1TuX3dB8yZF5/dGuynIIRc89/eP2+wL9YRd2dvxaqffUH+HxTTRtjOsGh3ozum8ZCHJORj0z0/4stDdgf4TfsJPENgURM5gHU0YAmYskNt97p1PZjmyXZW1M84Ier2jX+3LQ8UyFb1uEcCmfA52nTcsGEDmjNO6gk9rOdpwXctORN1VrrtsSZRtapWKNc5WhbrCnz1J86OAM6ti8BvegfgCcLbsaqi0ntWevMBcY7dENHp7GUSH45zncqHX9d//BX8+3OJvf/ufzvFzO40H5esEgs77IkGOEEZ1pjV49Rbjo4GHeKPcNXYvvwlmdFVeUV4SPDLKblS0w6jnTjDQnoSOunpT85Rf8S7uCZbqf3i5QnCGvb6kdqbHjEiVFfWVd9zL7rHeiK53cIkRuhU87wLtro8dOdlkgV/g4J63NFDHvS5ymQSttG3+zC/t6PdkCy0i2/m6MHsXMtmp2+A6siSjr/Ss486aStO64+ziLK4+13FktrKHpwj8JoAxW9QhXejESyM86zMLmJPJAkLhUTAXfkU5ql2lTN0VsdipNbQscqR7EpSE7+8hO6LFFRTGLtULLosk17OKm8kOBiGDMR7Dagaoo3dO3s5gkM9f4/BcxW99H40WLXJsJ5UHwRiKv4EaGH9PdmoEANBfS+CO/ekkuqP81xY/L/YMET25wXD0CZyMP9PdPhBqkwN4ZhB9VnZ87tv1E/bLvud02ICs23oDgRhrU5d0eLTyDPcQ4KjHvSeb2DZ/hAlM70H5QwkaOzbS3WHVJoh2IqFBgv4AH9JbiJGFURodLW30wXP/d4MqszRH2zWp/DHjhghPDNyA8WQGkug2JBC5iTyVsyJX9CrIBEbmUmPF8D3A/6zNjOM/420+834vtObKT4bdCSM18NXqRqVx23mF6h9W03Wi1Gpi2PyCygkNqJtMGWV2OwW1HHa/G/s98i5+0tg3ABuaK/I/2/ya6I+fO9H3wKDjm/5k9xntwy7xZTW7lTqNr+B93+hLJBTdnAC20/SsQNvdbeIGaPKbXgzXyFH4xrJIGEStGCLFr+pfTdOA6PDqnsn/1ja2ZGe7sDOvXkjIWR9fmeZSCDvQfTWm97yN5Z+vflqH28wBOt/B6ZGzVweNCzzfptHzUT5P3/r7XB9PcZPMNlVAzbrw53NozX8pGWiewgYMynKmoruriJiR1xOOj0c8PDzg+PiIvK5Ylte4vb3Bcih2/un+Cesp43R6Ql5PWE+rMQ7hBOQF4FViF1I/AWVOA2XSgbkeHNHMIyiyVBvoOoyFz+2YdrHL7WQDcTQ0IN4sxsC47z3VDy5Knff1JIheeaSdBxzBNXr2IqgOV8TAJxj8/gnXwDiAPnLcASgh/ebhbBsd8+tPf5xNfdimC9l/XBg0wNOMKLHoy+8LyoVMvVQbpIuK231pbNCtSX/1SLwCDo7i6LlkaSwPvcs0JfBS7j/nJTn6kEkgCYjxinC8cwLSUvKlpJH0+kmqaCgg4Amy4sjWR7N13mLg+sCWy8yZsa65Bs5X2WWe5VP7rWwtqZNmnh44y6fka7bbR8OsISYMiOAsNEfIKA7+c4spGyOs77PhpOQUEXTk4vHQSZKmfFPUTqawH0ctoy+44rqlTPvvfZuqYdJdGCVHaFuAxStv372BjvpPZ6BEaTFGJ3wf8KF9Sehg1CV/JPzp8BZ/uy/Bc3xUUe7GXcfAd73vMULdSZT1gRs73YEOwJzBhtwCkXz2fY1qhTGqDGPpYM5CHiJX5Pj0qpLKWDGoHG0mKLEeZ+ZlRhBvUX5TfB59FQLqKnPZveXv+lL5kIWm0mK0BDCwcJ3LA5yzw0JvIj9E3tjkYqSzkY1I/oNsCEjGozjttYOqT1mJplVvjWJpHUHPM568PzH4vSD2h+J08YfQub4i/70hdfKjBnYDxoag0Cj5btC+DquDdWzYi8fAKFzbSNycU9CysT5uv8QGhGcj+X6BjG0R3Xh3TibCtSuk14ViQAmuZDlhRe8DS0BjA8YAjzIkWHZ16B0Prj4isRtK4JyXRY49c7yp9P8ZxQZ4J/WJPGXhCVY1/C9S7pOUoYt6jEv7Pqs7R2fjx5Nupnn3q7yPC0q0Tf5zqHP9t0rHLQ3Ggt2QaPnk77Cv2S3xVpNGJDloL/9R8PtbaICfzGt2uYS2NG1z5Y5sPpZjtFUEaF6vM+DrPgOzNEIzIw46mxc1r2Ju6d/qg0mpBODgfIkt9u5wCOO8iee4z/t+C7p6qyj77YUtgtIMGbtXVPMHs6boKGpYoPyf7Df5uzYc+UQOa8wxfeDkPEOOaGRAhI7oBP2q+oP7rjTd75skxoMbe+3qBFILxiasEpLpqaKnkxSlllq54/wWsLn6av9AlwvhFQ4AGAnAgozMqPejqw+Ui0C3RYZUmwAAq4kxxoGAnFLxj0jXyOgJPL6D3Rh2HY/2fPgRk0UbZ/T93OOZ+jvDU93rS6LNkZ4HpL+Do74KXDo9EXJPH9Vd5PWVD1o0Wsvy1O/NEBkPBdkW5Vs3PKpzKh1WNlWa8yMhaa0aj1gPO6nhfM4tXdBl6ft1TxUG3Ykwe6Ct7DqaeT48v78dPBP3hl9dQIEBdzrMAMNIs5tIvEgLdwCjCe56JvRoGOsQdndco+O0nMH1TYCbqxJbp7nyhlCcd28zpuZ1h5bdE14TsSyGA9SWVCycDUEVB1I/Nkn9Cxflt6L4E68BHGEmivnLsQ9dSzs3V4LeTGzHt5f2S2J3M4s/wM4CvtK/lHVBsLNYSPb1AKC1YqLLx7txlIC/mdCNUbRzzIPYZGlj5/NEGOllkgYMeSE835HE49CaaPK/jFtDstYhbTuKmK4L9rvmRPsg6Lr4XDL1TSCSaePAo35utwqj8NmVZjYyT9ONQqwDsKqoGWzrDYqla6f7F4VpqvvHXT8Ry4JNR1MjzmJpnbEIl+PcFxAWuRMdKyM/rXh4fMSn+3t8+PwZb+/u8Or1a9ze3uLucIOFF5z+eMK6Zrn/PGNdc7lRiwHgIPxKYD4ZrRPK6VD1GhwZH7nR0twQNY0TgTLLJ2w8Wa66rNeU1XFuTBHpS22r9uOQvWwhjwTmqfotzbocqByG02GaoAg5v5MdIb0g01TtH1c7qzZmdzg12txdRtfvcR4knoY5pfDn6dwwOntciiYzD/qtxcfzvpOlWhMPcqttZ+P8ZQy1+Q70aQ98I4vxxYF66/eSxQHRAGyOnVAh2d4vSfa/rdH/7UJYCfbs1lL8oZ0ZP+W/Jn3grCySnKjeVz41joKxahNpTmAWK7OUomXqMazLgnxYgGXBeiDZSVbwXUB2Tw/rPSWq5JYFONyAlwV8OBS9k8ou9pRqtfPOErqWyVZBsaDcGM0wGq3t0uf1PYnxwutJAud6f/kqn1lq1XKyFWH++CppveHAriVDkeIchrFWnPaCIsDMIOa6y0/rzHHp3IAOvuJCoRrs9yg1U58OPF1SeB6stqmSLd/NeAhO3mjdQWSlyj0iz1RfyQQqMff3JPOoW53iH1mIo9+dtxhfb71z3/8V+Jc3/4b/+vg/gROVe3TlqPA2sEyDKrmujl7qs6IHUqUrasugoHdKv3leEI8xqbHlghZ6lJLOonMGv0uFnj/LEc58MD1Dq0vOgq9srIKIG+jOdcEz6iUv8vq+bIkiUQalbHzGiQOrS+CWFkjEEWDZKpslQC6GD2vnaP/kXAxfLdAW5dQ+SnD1IAS1rT1kBrUazCyGO+sKWqFFb3b2blVlDAIJzaAKaPUa9KEm1yPx1Ihf4GRQKN+QRBXi5N5ZdZFx9KXrR9c3JphlQUPhd9evmWW9k5Tu+7uc3dUK+OZM5dg/be/33/fI2Z38fBa25OHosfYHya8M4gTKMijpptBkgtz7JXo+O/5PuoM8WUDHZICOpUcrLcU5TRJI14kkrwsZZTcIE/gjFVZ6q6xEddIp1WxYpO732hKUBR2uX9iIVypSuhh0ELl8rXCMFgq35TLBVvI09oD7PgQSW4vqqvahruvz2xNSbvHKTv5jBv7sMv0X6vHsoTVDMp4965Qm9S+aY+45KOCaN/s6VO+q7tYApclkn58dvW3DvPfZfR+kO1c2Y66Xt5RMmrxaz9TXV+BwaemzR0X1uD6Jg8yb7TH9Cyq7s3NubYGIlu9QCkZSdh1AqHpGbIMqfiVNWlBC0ASmXEUzVXqo/NCZNLV/mJFXQqZii1AiLGsyW1H9AvAb8PorON8Jn3+AXU3l2xtkKhMkxlzkgbJGaUpZXGwT8qpmVg1mi24Fyf+l8BvAdHhxx3SHiArNZDqxiIJkJ7I0/gmT2Cdll7lqWNYTRFIGrSv0fvXEqgPEBsvvkflXmJ52KLRjHfodaHl/DwyST3NviNZLqix5RrQ/kzFev4zfa9dctDj5e4MB6p3VONIXQif7hmCjf8zujEpHX/Z5WdPwKB25v+eh5CqZQ76U+C4pfCOdCQIP++nv+knZa9p9Ha9cM/9oC5lHulNK3657J2wKsnP+xQTURmqKO1+W3sXLcnJUh0v3zJXd2W3tz+aaPm8eUH3Gw7xOtzb2J0u5Lc+XKUbSSi2dR7uIgTJJoPnVJiLKwI3DdSXwHZej3O1kqRBkcrZoNX9rvdk+60JQTmLTkJzeSWXTq+/B8pfKQjvR8XrfM9scgloHVI6mZlmfb36rdiPVeIuhVk+by2o0efto1jYtuio0cG65Te03M8miXaDjowVHYDXAZgrH4RdVgaN1jr4CCn2wBhwJZcOU8bvHR+cW6iYGL49YeSKlISoNePrvFm27jvFRTwJ07kKtC5svymVTSfG9tdyoeJUPUAfEPkgbFJAOfCptptB28/FI0fbyQD/rwsxyNVfpL1vDqU3kEvRddDrc4hYlTTmBrOKUiGx+L2msgROwEjIx8mnF/cMDciLg9gbp1S2W21vc3tzi7tVbvHl7C/5zQkpLaV8G+CnjAYQ1ZzBn8CFhXU6Fv3JGXhkLJdykBXmVzXbk+k9sbl2PU6YA6p3q/uTJ0kVZhpMlDzcxYGKyW22V4SJrxiHW4WzAk9NAHNriXPEjTK6ZXxHqWgK96KJiYXabI/fNpVoAnYk5cOinOYx0EU1+67NNDr2gvlYsNW949MnNoxZ0gFwG67PamU5LtVlHsvOF4fBVavkegRyDXFNILWyaJr66zmz+XiAwc7PK7gxN7Sa5AVP458Mguvu0I/iuHGOzjvTT4WWMqtKa4O8yxSK/9c4/VbhOZrlwDhgJJBPuTdvahslHFOK1nDo+eGZ/Byeg+97WTU7IFcXgjbg8yOcNshmCg3HraGtbqRRbUw1A3qSFvXzaBxmvkKGmkM9g5Wls9D7y3qRACrTbztepkVALLOwzpjcN7Zr9bzTNfecNHsUm2Peh8zCQsXsD5SN4B7x++3/g7//4X2VV9WcMZMWWXJf3B9TV4ln5fyM9hf5H6BddeOT5lnW3Ndf+fZuLfOEMvbus+B/OEDLjkcYVSj082KzvUATFfhgtfrFnuSVZfa0T75rTjFFXU9KoiKNBO+pdFgrY6RbyXdKRLjTQfJOz6HVXdqWzMiZMeUJ3ChS+Ke4+WOD4hFE6tlk4BOATt/cm/wLgIwEWvEeVnUGUd+/skyrNNI0N+Jj807SlkDIUJP3r6tAmeZ5uPo3zRx228Wqrnwfptl5fIXrHdY0QZhlHPYNbTlFwK6jt8BaGoyuZCUoSBPOTV3pkIdDKHKXLJuA2lvv1Dl6qi3/u5LWbcConF9extlbekLGsTWL748l39NbsTXMfZgPeCVIC2aChpliVIe1RaqVUcvS4BQyOekNlbtRDH9Hywv+3Uewf3fd/ovC14R3bgZ5fHeqk+HSYo6UZP1Fp5QkhNvR8BZO8lTI+70g70seOhhuS0LvOPXqb/NyO9lm9HH7X3uC2vpjNdGEYg9i2qKO1ADcc5B6fRVXrdbZX+e0D5qjj7vLafCr8HpTK6Bo8j3cwl3qpqtm6hbrFhQFeGesCpOYO7w9usVUJGDPeOXmmRzp+RGtbeXknspVQdLj1K1m3kEzoJortq0cy3rg2ly4q5Si+JMFznXCxhZ6unwHghoEnm+WT/lI9KfIlQSaZOVeVKfhaeakc7F6KHSyFjeLOVvliTC9RRJ4Rl2fr25Ooof+9+WmSNsqk89X/UEBodesA2KUdvXuuO7M9vXGOaEZybKNGQm9bd0HoUOUm8hvvzgJt1322knN6ZFDj3n46C9cROw2+7a85+BA7a7L8XKXvKNk+K+zaBJNMZxc1dE7SWWSruaDBqSjHVB8HG2Vaf9AVsT5vPJDWvMxc2qagZgowoGR2r/cvIs7M/eF95mcDZSd6qms+H0nuQxexwO4IdvMdC58y0OwoV9y1+Kz2F8li/wQLoFs+s3MgxzzraXu5BPg1Embdz7KrvZTDjTEl7bd5Yj+0MkadXy3j54zZ0Bz74qnET8v5QDv8b/3wQ5Io9L/Wr/m9regqR3jXVC6JG7/TmFqaP9MLsVwefHOwqdSox3EGXbJ6PH9jGo36Y4iCy+gHzXAOBldz/IHHv+YzeXhOmUf8fO3RfGIM3TlufrDYyGQvmYAkwfeUASQGrwAjIxNwPB7x+fERnx7u8fD4iKfjE3ADHG5u8O7dHda84unxCfl4wun4BDDj8Xgsi1AY5Yq5QwJOQEKup0YRy6IYvWJR2paoLPoHyrQIlOTiseruBATHI7WXYQttqy3Clqw72M11rnVjYIOahlzYoh2cOJrxd2fbhbnNZtpNXjeFCB315VY8AkUOYIbVRF/12D8fdurQSfioRxExIW+km1TuXsVNii8FP+9AV5gEiaYwmrDWooDhmP7I/uFZ2GM1f2vorJzwY4S/X00Wg+cCduSp3nFOctcetfl0pWNjC0GUCFEJmkfJrgFW7BGgXwZIViX2E/s7sLlq8YJhsK+uKQrf/4kPfnJzGnu4CrYK65k3GqQX320WvIJmk12s5GvLjTvg9o9/xcq5ueO2BWr5t7OgqASpFpEJWRtHNe8W/Alll+NZKOWaQcloddVHCs6l4ldN7FHTOlmoFu0VEE/6b713nvx2DhglULJG6hLbCos4XLL7tnobZN0S1fiQbG1MSxnsx9j1R3uxQXQaq7NFblxYK9UjXHlBPTlA2rOEMhfRF4qbeU2KS+grmwhRpzcZptH58otfOLMro/ImmC0AY8xqgXLNos8cI0ePpYFvpa2+PNRTEEZvqfk4B/WYQC1bLX70JOe/xCsCNN+9fL1DpWeGnWhhR+55f8Q7l28BfNoeOWq+bY8xdw3ZKvE7pJfdq74D/BMDPzXImCaI5wcBVT5aF/OcpkY61ePPG3kvhC2S337uvdkdFTX6SX7YrT8zuqsy+WzB3SKloONnwXPCmfJHoIujvEzvUerbFWWJV2oEu45A5TyVdyS7HZgZ2U6E0aY47rVFNcX/sN1ZSaLCucWZc8YKuN1aKgdV8doL1xbH2yyZm6F7Lz2k16qEELkuOhbfKGEp3zWFtC0hNe0srFWOsXQPwGB3BYl2LxmfEJW71J/QJHDq151so7v0lCaNpgiJ34PBWOkj6rmVE2j4lyvPepjxzHcoMn9Cga86NLqI9ll5ozAaCqf6uxO/39LWu6LunXL8Sx3/+RO+AdA3pNUttnrxirh/pLzbzEsGv1x0Nkl6v6itLAgjWZCL4odnAEcqfsOjLBpzfnNd3JerH+t8bV2rZkZFOD2LkwZK1b6pwfMynyo1SaCZ2OHI2jwJ06ma1/K0uRvd1jwemWc/iv6dLMoF0NrYZuzoz5Bnhx8Uzyc7j9vGq7ihZVCb/l/p6ALmOjeG3oxlI9vGTh3i3XDBpOgNvdK+0XkXxUNtxB4Bgs5PCJ2DkblcOcfgspg/M3Jm5KdyH/rjwyMeHh/xeHsYkABdAAAgAElEQVTEcljw+tUr5Lt3WN8/Ij8ccXp4RD6tWHPGesrlaHgiHNICWgrfLdoj4kuMIKUEzrlMR5Dy5UROMbv5xI1BCu4Fh8cRoqnePD9T1U/4xvAdjs3vN4DOcMfaPdcA10+ujD943wfvvjMqeBHQCRJqJwFe3Pmgtq+7nSGjLDGNU32mhHRSyhci6fyyzs6IcngQ1SB6cmWJsZqctGebxFFjVY9u9sGytv/8iq6z4DRJ08SmH0La8L2pqnOyYcqSdOzhaP2lSJy6L5PfAnEFInucorIel9Hxa9dv0bxpE+zekT7YRdbe9ePKubI/pwZFrVp+u0lIl4jdk2ogb/RnbIenZat0knfnUE/TnOkr+uVfcTz+A/iPYwk0+V2XfoEIVUfS7DiFBOBg3h88n1c5AvdcUWMJnkcnxcnPUFeRB1zT6S5TZuAtAw++dbpYhGSyWKzFLkDg0a64y5S8w8vh0HRia7mWagj1bjaGD9yQGsU+r1+GmQjg3K4QJ5agCdW0LI64XfJsHSRz+NoCDS70xOCPsbPqUnIr751z1HRbvd/d90itQo9hEifeggu+cq67OXUn+i9UdrvWzg10IH3hLH/y/+npJl49+AU51kcwMnPMXQNT3OY1+clt/tD83weMdIUbWxrJTcf3lb8lgdupAZ8MslsC1Pa507FWd7PYLuAXx8nq5oqv04/kjo5W6dFK+MbosYZEZ3m60Gok85sHfU8AUxX9fFBd5HeM/0Mq+fsArYjIrH0D86iveqTYlJ+V56gZ+jIYImCjceb1he/fboegL2wnvI2/pcJmJzpN2xoqrjT8VnBWevQ8QiFv897V1S3f1yyOiyaEU88ca8sn29JQVbjJYW/jbzXYLXoY2nGqg0eHS8HLDfKkEWjOC/mgn10gu3SxBntb+1ID5h6HgrpoN13okbilJdMHWs9bp0y4FqSJjWadPmkaWptQyFwWszXjUPq84FxO9KgXthDK7eYk3VJPoSknVOghrrUBzb2m4pMxA68AgBhH6IIDNQacTe7sjHpHY2g3qfXAYHxCghwBG4Pixr+hP/Sd3onufb7YbyN2nj3fBdW+eDZcIa+7BZg/EETUZ9+/XO3nZPG5Ika6afDb1PSAKGf0uPV+WPdeYMdvvvhgK3Xl86AdG+Bk0gCDbwRndNG5vAScH7CNqjFXw16pTPtnNlfQvefznbwxPv37kbDdxnEmpudlDoqONowrv0k7sodmKAYeJAtOj3bbUchTdWAbSHcIOP1rupLkujO1l16R2ax63VRG9UW9ycbI5cQuono1lWS34KdmTLV+DQRaF7IL8BdjC7zK4ns9BdD3USaz78z+C0d69yTodb7aY1z7ymyONqO7ybXm36HXzsqRM6S2XXJgVLO9fT9xk4QcTVRfZKtysdlQbcvp2nrFYev3LqC+W3bpEup/Ngpb+6Jl4F7lucGenls9qqAmaq5v8HXZsyDnIz05PMl9Y+jGDrL5m8ZHWDNOTyc8HY94uH/A4+sHPN4+4ubmBoebA26WBW9fv8HT2zsc7+7xdDxiPZ0KCqdjwZEJjBXgtdzKltvx73pBaIlzuQ6CEst1eNo2N/tIYkXr8e362LHlaDiUL8cI9BmKWc6DdJ7Pnf3efDaFfVFoeHC4O+i5tsD3Dm4cAMz6e/i065KRA+qlyOXw+w2gKzw3eK6wu+9/UM/wUviSwXNyX6IBMEs/dKRCvsa+0LL1ezUgpwatBs21DjUuU81f0JU7+FiPPcxy7EkShZGCwYJWbnhZcpZuq5GneA1vOG7azobrcIedn0zcsApbR/Yb0H00hrYcNJ1InDHyl0bfR7A7PK/lnx2W+wS4c377X5FtNpIX42kafBi085Kmx7Rbef/7n8rCqf88FiQ/x/SFf0mXKzsyaQy1g7zXjUXiGNaNRtGTcuB3nmug4n6WfiCrfMd/guwu9bxcrWs2nnZ9Hyby9bAMb174Wrvfgaza0wXs0lWA8nCShTgeoyxmc0qtcUhAPRdbPjOhXgnhnVxu187M+N5w9jIbdVX9TMaTGu/zcturIgh1AknOxbX80jTZLczvCDy0xLxT6x00P5YAebwdffhrQmxtgwb29cMGXft3IPe1YO8w+LZuMRxJnT+ygT8MnqP2AbUv6jIUNwCayAeYonOMwqkkDrCNXVexflW+l8H2R/19hiy0YZNnxJjHRzwab7kuKtpla1wAU3LZdpBeDoIt56veBbkuYAJqP/26ozxqz7QAuI0x6jH6zSwc1/HtykOwb5uiNxJeCpN7xvboqw6XffW1rKG8oz+3B6wGh2u65koBL+MDC9rxqZbGGQD654qKaM/HfoR7NJJQ+bmRs2jzBFZh3W2lQl1elEnumc210Y1OL9a7zh0ufkbujHzoNpxPk+qiNfLr2IxnNOhPegckq5xM8/q9aA7fdYLOqkFytlLGAboLvaTSKyOYhWczASVU0NlYOrmf+J0My0dk5uIPXnXf804Yjeu1IuAtzl/jQJOKupnnGTI/sI3g4CuMcAvXju1LQRy+iNNoeK9TS5g2fkZKngSjHTAq5IuR5Neyd85U/+zM5wuYLYjpHp2ji0tw3ZN2i05HOh2baks+o23kGh/tjQGwS0cYpxt25xYPuDTN0fNm43j61jKKYcB6GGYqi9oSEYjK0WnlnnJCPhBYT1M7MXBHwGMpi53iV4+IRe8ilT9btKhr4QloIu91DVuxAWQyoSaRhnHR2cwJRAySna4wb0rqZL13mly80w+w2E2Nz9YYh6gTGrW/t0iuCSLz4Gscuktl+XDecAuh6K+iJTi3uBKoQeOuhkGd3k4rv8+f+7kpBXfYl1pIoQXX319h3tn1UsPuY0b3Caj5HAXRm/3t3mee+R6W3jijTcTSOXIDHZjBTyc8PRzxeH+Pz6/vcf/qLW5uboFlAZjx6nCDt2/e4OnuDk+Pj1ifJIBOwLKesKaEfCSsGQCv0OWqKSWxk+uCXZa4B1KCbrgjKgv3bYh1QQ27/iR21z9y040jF3ePONwFTUHk5lr85wvU82IwnVj5ccH6l9A7kppmIqAGXcHDhNf12u84gB4G5BqBS/F7HCru0/3QEBoSdxd9ieC5VmAB7Tk6jbaZvhspuPDnJs16WemMUDEIsSQgLXb3ue6YYAmOExKYs8R/2K7HJQIoyX2pIGfgtUZcuxHFYdQo4Fn79JkTtJ0x5bW031leyu0U1ghMuXlr8SW1zAZd1bnDts5ooDY0FI0NZyDP0O5WrLU41bbTGN29/REnT4feU7SoomG/jw/nR7T3z93ZCUa/m8rNygn01yBK4Xef7Gyg/ZzM+cs7YP0A/Mep3FH7z7GWtfuEKDhAWt+BKq3pcWFq5FFxGMf4qIPqykqQ+4sjD1P9GtupoPcew1PCSOa1Kzub1caJmuqMfXyVM1ECR8rNJKlNJTctLxWI8RlWc3f05+5a1cB02RiW2zIsvWd+9O87/Cv/gwAsTmcN+q/tHM9Zrr0OBz0mtshQbWNJT3GI7tHeWe3r9Z+kNQXXlAB/ZD/5rKjXV9SJAXZBEZQ7vBlyF7Yk6Xal9+hM5WMz0VA/tpekf1uYuvpTlLUP5W50odMo8WIeI6TsnrGjRRE6rV8QdRmLeUKNqcXNDAKAT1yDvQRZIS62h9NvdiS9/eISMGEG7sd8ZLVw98Xec3xsJDFQGFEHAL3+i1Vt6sMRPIf+HA0zF5vumUWS7ioFgqAV+ZzQBNH1vu5pqxqVGiivUz203TUKced50wBTc82zPl3U7wy8CRm8bvN5VA/GMhjAjft92sKzlTvM/TPd1kAaZCaYzm/vIK1XKxGF8hUvQILVpbIqBQLfysRVtyBikNyJapeOXbqqE+CKZP9ObJm6HoOqSxPrgx+OIlcS6SkZ+g9e4be2SVXlFbXskuk7H5wvjg8Avd+8fppN4uUCOY0rx9TfSkIO94w7LN2n86vC0CxcFi29FkTvcYLXnSqwm/VPXBfGJVJbmJASY5WjKoGPdVGl9QEqn6/YhmZhpEcgNPBLgRc+dzgfRAd63jWCaG3EDjo59jVhj3Dczh3l9FA9bf2+Bkb682tCJ68HOmia77l9X/I2i3FHK3abLIP352jui9BklFDPhcvz85D/Limn+v3nRm5qt0zr5vDouf0zyTdcNDHA0o/56LvHb/idz5chWdiXF2wPjxtHOlSeJzbbxVwIq4Zat4vadFaDleXSJjNP5Sj1ZGWX68elkBXlhKKVgdcMPBbeL26RGhwEYKn2XaJ6PLsG013AnG21b8GQWK9j8R0mfncGGAlYShAdeUU5qaakSna8O2A7c7Uu9XlJR62lBfsd9bAbAxN1A5OuluNeRGUxIP8pRL7w8yhnmTHQ5EbxXlWTs7va8vS/usixLWyi431d5+YEbKwbQ9hj2uFfi4w+ac3XyK5GaW8Moj4iKas5Vp0GzfX2Tltg7Cv77e1kr9Pd0HFXnOt/s5+VX3XsdBOfHLeegXxacXo84uHhAQ/3D7h/c49Xr15hubnFzZJwe3OLuzdvgfcr1uOK9WkFM2PNDMoA4YQ1LaBUrgfMcCdfaMxEA+ceEkCcQJwL3+fCyXYVrs5rJIAzgXRzQBS9QJkbpPa+dXN/dCEH93Rgfg23uBp9oLy3kxigdVDlI8dPNX8dz61rT8+9vxyeqye/V4i8E187fol6a1TMF4LfcQD9CjBt2Y5OoyT7p78R+LaMqjpl2KtnUZskcIHyqriS/dZ4a1uGWqDkAuhLuac3pRIQh068iYKTSZoSQCeAczH8EhWDL7m7/bbQbgitKqxx4tHvifPmDKKamuv/JEqpWhETcLNM3yX5E6rim/VPNNqeA95SP5d0UJdOtm6WPzfS9sOGLNuZu3tGhPZYY4J3iBo4FxgfwaXN/AVlYcv/KzOW/7ygfC9v1NHTgAQxQIsTDwP+nZVPqDvP4yIYZ4g2Cz4oFELtcaw83GKqfQ/gr7+IvALwH7+iLudWY/N5VB9sffnUrXG5vtDj5BltRRrYD8eyQ5ze8kzeW+AyYuoMWDWORzLIutr1+cL15BArK9Kr45PB7mvWZfTapWAwJOAvkwBN+llPjw0JdJ0mOMyuiOkD5tIXtsuc7T55csFz9sFz+9N+d58jHE180lim/XDQ87L2JXOW4wGVxm0rqJmIvf/vnK/saM0u6GurJV0YoQVpn8qd5v6ABtsN6VH+hBL4YK63KyAHmil5OEtBdn8gl93ojBI4YW3bQPcPlYBDzqfzwqJ9eKZA/zrokYZndtDdP/yPmV0Yf1Pti61As2Uf8IahV1fWlwk8GRF3d6OJTeuvIMumamb0Qvr42Sw5yLhbBw/szIYGwucsALermhowHorRRtfqs6qDuyA5AX5XzSVdyHGsvAyIeLF7buPM8z42Wqq8U4471Iko2W2VkuDC7cKAIb+6opPcSy6IZ2JwzsgRH4Icm4pq3zFbE2p3kvVlY8eIbdMNucfT+rwiXReF+QWwXOuaLaA1WelErWOruqNcZvYcEsxsKrRMgOVGFtbTQ2oTevk/kE9R/H0ptblLNA4S7RSpv3d4fhftFqRfKP8PDDEAf9bu/EnMFaJivAxMtvnfsWtHqvybD8EFNHNubuJcF2687+yTYXB/krbNCPOr3W+mfnbLZ+1MsIgHw3agA1TXVptPyDLfSXIFGgP3awmiH52eJ9T3fo41UclPJYCuJ6mZ+2i+LSHpQnrrDILOwSjdWbA+JVDOUnU5tSYxITPKyYKyaJJ1gZ/g2Ljn0VaD6xPfZ4qSNq0jI09nIX8ovoMX5ZGRj+WAILbMKBCMM0H0LSN1400jMPYY1rME5HAsPidTbt5dDnNkIld1O9DPLVJw83WzGkb1bKVu2FiD53ICbpYERIREBCAVOl0z1uMRx4dHPNw/4OHxiOPxiDevV1BacHO4RXpNSCvj9FjSPT2dcP94xIoTVi58hZSQaSlnOJHaxozMLqDu8GMUXicufNroEPUToDwlp1nEOVf9ENmtmwlCF4ZhdAy6g7f86VJA3UnfBdFn+b9aEP0l7L8f1IZsAulfH34G0C8BLwx2GVY6I7Et+H8sOKOIvzjQ8OvZtPqE4q01qBaUpU/u2agsNdSo7DoXo80+LSCuxmIpizOALIGdzDbnzjpBJwF0izGp4oNNDZ1p5wBft0IKqBNPBnGupJvbq8qcw7MIjTJ4seDJGWNE6mE16PVHtaqrstPypsHzbwSzvlJHpXmwVY77Hsl3LyoXaaLgHHTgjG7zTvxY9Gmbr2fJncbPA2oAgLs/Af/7V+BPCfivjW0/VP6Lc672zo4Q5SoDNNEML5+/WYBCbVvFuPU0agJA39/J5+f2uTo//kr2Wm74rmXpCnBtEsqEdNdubNBF51iRODDeM5SoELlAbqRPrmU1zqsP/Gp9SkveoZbjoCwnu6OhJtBu/BXj2lCoclMn6dlwcmlIJ9Xlu+Yxx5JaAmIrpTax6wdG7O6KDVUczGtbnayod8FbvzHcjnL/nG0FPmcZm+yex7wdXChgKH75RlbvHmh4eNBO15fMZUV2uTPYH0lWDi8siz0q87F0KltRool0Rkf/XNBuGDDOLKu54colowNL+JGMzkiPdUfgQZLnUYcrrbxm4LPSbg1beZz6lfGhv/y75rezNgyPthA79cT4KtqhUfk9A6b6RoWCq/PMTsyRCuDQZvZysDu23T3XZyJjtpHdAOb5pM3ZBQHUpzunp/Wdt2MuQZt82wPtz9LusA3I7UJUiq41hSC6D567oozFRGfoZE61dXy9NCRPY3ctTGl/CuTSeRy1zHfiQ/R5KLlMXPnJAushC7l/fk89Ke3qd4a7tYWqbhd9Dya9oQoU7I1aIFX1K3VD7UT1nRjlGHRbkFPamZnrxjXX/02L4nCorHRdqYvtygfhNRIYhEecJD9ZucRy8zrL/eZOLOguloWWYgPl92D6gKwnStgiNvSgz6dMyhvvXgD2+GzK/0P5F3TUc1C4Kve3halVE4dsOITXjKtnqCuKmEEnu6JtNBi1SKfTAOW5ys9At6M8/g7gdfjI5gE63Jt5jS/Jf18NRm24rF0c1QzgZP+kTH2vgc5R/mvpuKl+UJYK8CqwN9KKtnDv6gaSUGhnC6VaT2AXbtLFfKg7JwEgnngUE5PYM828gtcTzndtcKTKKRT+1DayPUBydzExWNvFVBfOLVR2n2eU+dCVLTBeguMlDy8Z9Z52sQuWUj4lAi1Sr9lBWRalF/8qqfqUIWNAFiGLD76qm0WCeNX3Wl9h9/Z3I7j13jPDgdygSdk7gmdDHeBt/C1dqwM2VChSxih/TE80QMRhaEacl4fnoeEHaA+5Z4287K/YaaQ1x2dCA2Mjv22Bd4mopil2aUI9lWjcsDKENOnnvlpro/NlmoOkmn6pfT+aZyZ70wmOQR6tl6C2eTGDKchSX2oZlXbuqmziKyKw8Oz6lPF0fMLj4yMeHh/xeDzidFrx6gAsKeFwe4tbEPLxhKfHJzydTnh4fEReM05rBhaxiRfdl1FqysxIzMg59/4F/K23CaAsrCcnvNEKdm1hWxjhW+gHorbedrHbaycL3Rx0J4OVF/zcG0tNekKcza84/vdtG/IkGQo6J+lpfG8Q3Zrk2/LiweOdAuBbQmdXAp2OrS++OPwMoD8HpoaZ+94NYPz9AxDrFF7Y0H0pOIdWN25uwGxih9zv+p59Hg2cqRbQo9sXWUaZ5Nh2K8/ht0KMzWKoFT2o5SVTEkXuckNWu0SCZnZ1t2p6YJpEAwQok0XBcSadzNqoXqe3viownFXN7e8JzILn1jsvtgDgCvDeAoBqWc/Sh580b+cFSAyeBYVlNgdXi7ITd+pwRKsF4dkGzJKNnvtnf/0D8B8fAMrA3/OZ6qrh27V8UR51Trc4XXY0WCM3BJjrUelmjVM9+l2fNwF0uOfu0x9xa1aoS5/C79lfctXN+u1icLiy0II/fqlTiXEyy393xmrD00pswXjsLnjWdDxnGXKvUk8X1dytlxZou1q2lMVRFIxzM8BbtIYI+f7RYGk8dtnyjozI8Kl/WfpPd53bX+1TXvW3D6KHsnKow+Nz9mh2r8V+MAi6VKE59jwzWIPnEkgn6Re2nek1Z8maAKxWPiMV/ep39jPVXcpOgxMgi++UHmEOlWrnMjTKL1Wg8UelaYDfCGq2cCTwEDkiYC7HcH927UcNyFZ+EDqaMZ3SnbM3mr5pnnH/6hvD8F7PwOJbpN4tMlCdEeWUGYGOb2ewi7Wo0smXhJlvNKp3CWk88CDd1rHte8H0DNfftvCMqkpvJrErcu3koMN1zxg0PILGfhjrhKg7pKLJgmyda5+5OXGiRn/7ILoG2vX/euxpqVs3ggBuRzsDnFhUPbmulTsOSc0iskB6FWdUm6W4d83TvWgJzCvKquPyySC5idwkozXaRJorR5+VicXAc8Nu1QZy0//EctIBs/l6GjyPTSC8A/BrX/Sovq0AHdHXuUP9J3x1uMY6KvR2RQlmb+uPUFYTiBnVM2TaC+q+AjqBcQ6XK3D9CS8DsyE4E5S8rI4twtpBA5p/sLhsWFx8p3ZG92wjX3TrKMzedPnFFjAeaJWo5fbld3W45x5n/UsawCLXHilEjkbHkoqN9iS+I5aCTyIkSliWBE4MlgA5SbkEAEtCSoS0SBBdqslc5lRYrkihExr/1QKISYL7mSXgT3Z4DIn/TYZrwclO6WkOmOHa5kAaRLXjmh2oO8F8hpGoAlrRi5AGdCVfhEpH9qt9PS+MKdKk5mqqUB+UNotk55c+Gxjl5KXIaIRuXqIMwV5j/VLYYvT2udnW9klo0PJzAOTt2no1YuVIqkzMjlblGVE5OQLCL8TlMlliKjxzWnE6nvB4fML9wyPuH484nU5AzlgOhNvlBstyCzxlrE8nHI9HfLr/jON6wvF0BLAgE2FBucZoXVdb1JoBpJSGQXQTI/JF7ehEBJY8AIFZnpmfhOr+xOCzr4Jr2TVwXbuXrJ+9H1j7vF2lI3LWeIlsvqXlpwmfSrZm86bIJguiTzfZTuAldeWPAlO7Ifxm//DL9tHPAPoe8Mw/NKicovDaxE9A2jt86TH9+kCuYTPD86tCtEgcNHg5XL1EHwXPvYIjqjvNF7nz/KBBdIJuuSgGMFWU9NRhmy/TepKX9w5V2Y2uBl9Au21P/SxyJjz3FVj3TAjRCyAX5Oqm+dgl8QHsJs2VxH4mf1e3/23QjquZLo0O4ka5vQx4hfuM7F0AHZ1RuFkwe8XcCp9dgfVzCqt5H6gjEnNnuHJtS0f46GnTp5naqoM2/dufgX9+BN4B+Mc+47nhRU2ufK312KSSk3n6CmjvKyO0clF/2wkV+t7LHieTfF4NuheLFUQl8EayoIeSq9vKhh0934q/OtlbJqgvkNkD+c7WH/W9ulLN6mvHFp2zGAt0k/RkgeXgELIMjdtlp0e46yR5T8YD+mraxJvfml9+50XXhNDYIb0G+6AQUChnULF9ar/Id33u7zRnSBCdXICcy4Iu2X3OGmjXChtd5evRRSQT2aOCtZl4HXTO9w6dbnXjoGenuzvQ/R+T3Mc3EaLst5+ylifM6me1TOSV3+RxsvEudfZrl9wY2Ri6+4w/MfBWq+OyxaOj0UAEbwD+7GpwwTdzZgnt7yFQ97PVSZ5+ZkqIN34/A2bZvdrYMJnaFg3kYz8z1+ZuClG68PJjJ74jNvOLvjzsOIp+E0Z1jRaQDeXeQP/7vCOZtwsnr2uCHNX/ydcd6MijR/V4xspCpT0tebdnNFV62bBrbPGLvo+2XsA/TpQ37b1DhIJfFpU50oDVFqz3/cEmSSlLPuau/5sdR6pjIwsmAvDR2TqKq7NL9EhV6QtdF1TYgVrTQdpBqoNcdQy2oijQUhGvpd90/K08+Z3ZPXcl34DwFGryPUiU6ilYYGRebUjLIWOMzB+6vq8rj9DSgL7zzz2yU796aORcBluyJsq/IRpXIvDNzYMr8OeWegD07TnTvucudu4X2V2UWyrfyNvRXUw7oJkob2bld7rhQvC6Y4ZLWyF6Yv6G8Ny2vxjqFyKwldzbM0OTTWUejekh7uiL7zbrPIeTFbQ//3Qu0+vkAf1Gt2H0vnl3xl6ZzDlTYzfpX5HhdeG26vTBkPg8vn5CDUQ3OjvVdAky7ynpFyp/x+IT6ZzEkhKWtIBuADpU3rNmL6nsOVqo3FVuapHBnJA5gzmX3e8r17XgXAwDzqJrZf6D7eoaknuaa7CRrR2CR+J6/7l/bkdG6yCoL8J1oZxT36Upep+y/N7gz12sa7wyo/uNwrp3e3lcbKTG1BnzcrMxwPlo7GwhMdhc8VyTu9+15rYJbbXurbNB7DS0gVkMqgHnxg32A7WpLzST2pGi4b0cc9j1+6Jn5W4Jhg1UyNsIUd+WxlfSFP7QsSGYHU8ZIFnwipWxriuOxyMeHh9w/3iPh4dHvDnc4tXhFrcL4WY54O2bN3h6eo/PDw/4cP8Zx5zxeHoCnU44rassjlnLVoF1LcFwrjvQu5OuRJyAGVhL0JxytsU6lKgwOhHKNbfZndrkBtPxSdPv2t4hnyihtGOvMskWybh6Wh9J+aTVV8197PqsJm9NHftNlYYHjNbNrWihPoA/znohvEghz4ezVVNj6tW5Jq9MR4UN5ChNkj4DfgbQL4GhIRM/44h8B0b61wCziLyQ3Ku4L6gmGC4dbPpPI2Zz78xIdEbpqGw1xBbZdX6QILr+2cSNqlUpyAczHNGw1H3W3mnaRq7PyyfpHb40E8eh8GBHUPdQ06+owVx232fwFWjeG7f6yZjgReEPTpmrUUfOsHpBJ/ua7LE9w7I2tIE3MLZnvuZwzpA/l68+ADrFxuO0FN+Pyt+Bw1sAHz8C9yfg0+jMzAlQ6MmkciHg5+/v8STj+c/aInxqu86pnjrROLCpkUG6y8uC4gf51LvHKIGS3FaaCOx39Wlb3FFs9dh2VyeC8flcoEgmA9ojApqjtWZ0RdVAVLiK0PQAACAASURBVDuVxIxiN5YSQCTdSdvkrzgUe7p9Pw3wRRFpDqIzVvd005Ycn6UbsSm75zz4DXcqgg98Z9k5yFxo1Xaak4lyZN2B7sqLO9CHCM3ko+pOb9y/vB3w1aDhEwc6k1O80eLAsXSeXjqWgHb3uS9IL7jW8sqpNVCR4lah66pyu4uZCJmSowXlCamXISu6Q63mZLox+yS/7+SZ3A/oZUO3WOItgz/XclrnmKFB+raBoz4YgUO6Y08zwM6U8QXsDxPmg7KjPOAJzYAwWOUA87J12b7SnJ4a4WlwokLP6ueoU18CKHyeq9tk2yBjY6vgeeaK6rWzuMRP8qzj1YZZ8EW31b6LuqQhgl1yn51o4PnQdGWRLHTB2baWRVHn7R5/JYPuEgcRsGZw9qt+u4xoJIr+p2ilYvCUnqG6m013n9G7ZqFhCcQTMtVpQm+RQ95L45ouYSvB6XtU1jJ9dKYnzhubFbM6YdqOv61BQ53s37waaSYqR7BFW+dkxB7Yy28z+Qb+IuL3tw/Pt5G2VNOuaik+CL83g+fPrPclYGgKnOmIRg7skQk/4Vkwcw/03TejmZ2VT3Rrk3uLZS/xD+1zRybVzQ6iuB+X7f+Ep8Oi8zI/4d4RykJ9nRdNS7VZ9N2ii/fld2LgieSwPsJChOUAHG4T0m0yZIuNwUgpyfHtSW+wLG3iLFe2AGsmnIixUl3oTRl2M1YGge1EUJTgnUzXJL3vOZc5Aj0pjhKDs7OlGNX+1lE2dSb3rxNaW2hwclBcDxQp7buQNgMzhwGb52D/kLukBbSLXMCwDZ6P65GEY5x8cqJBXwXfyf9U18rxUjcO0f6+QucaEGRjx8tCGQ9n/W7IBmoyoS7OZ6pTBLoNnTIo19OZQIz8tOL49ITP9/d4ffsan9/c483NK7y5eQUstzjc3uD1ayCvjPvjER+Pjzgy4/PpCfT4CD4ekbEig0xs5JyxQv0JsZMl6Eso4oRWyJyk8HIqDMiZQEigxMjIYFkIw7qoxdiOw9VZg45p/Mix7xB9zeauc0dkGuzWTN3x67bIxvk0LsDdLGJiS17KJfdgNMa6CEExaoLooR0Xw7X0++Wl2kUYNkFCHrx7OXx/BtAVdq5kNKd5uMTMK1af90rcvifg8CUGm7f6cWuF6SUQixhNGEyqsVXijU8oBqI6i01Aa2CemkGZQMtSBP/iAl9uIs9QYaDu5FBLlrt0RTdwZX4iIBPYB/a9VexQApyyCgZE31FjGLjPbWw6CHjbEQJge8fZC4EFisKziJt3kp3TUL7OHZDpSiUPZ2h4fEPLlXBpYWZkRutAX7P8bNvSyDe/CrfRO4GPPc+Zg7G0u7CHM3wepwFTxzq67xvj8AuAuz8D//vvrdOzF4yv5EqGBWgiUpn9VqlKY9Z/AXd9r3mS+zO5A3FSPVML3RKB76ScTwQcxDiFXhtRDEw9VU3RYqho0+AbZFx/DV3oxuQawh0tuIiLOPy9vsPJOW5wIBGgKopHdypZH2sJUU4F3JrfXvqasB6jNfy9BTMSbYy7iUPZOAuDZ/bc6ROmMlnAqDvOGaC1fHLZFlfvkl4BcIbtPo/1zRqh3qpvR9dPA1q6g3oNwMd58V8d2LehIhRFTdWBhGYXejmvTILqciefyJ16Jow4tkTi5HqZmG2sSpdWHc/l0LXKzCkJuvXKFx0LPV652hCeup0D5geGGfjIJYiuY+P5QBdhmEBhOc6d236J/bVLjlAz/nXaRHXoyJjzCscaEd4P4GqFzHNaZUzWifjGeStPPii0xU8SeP2rFQz7ddBHE1vseUf9qq3ggNxn9AFimtgxB5cHo/zUln+aEFNc3GLqsq1PRd0Qd5dP7z9vTlBUPjC+d8HQRg5Qq4NG5GiyRWWnJEohXdNGBJ3Kra1l9MNgJpBeJ6N45wHNhv5RTiv6IZc7SzXo2y2Wrd8tlr1Rto6lqqjSvyKJTMbUgzVLFwnXE/Ub9r29wsCTMMornSgPjdX1KLqMwK9ZUPSYldXKneaem554toBAj20vyjQz24S/5k0ox1KuzVGR8nZ2FLvxQhCs24bEoN+fCSP7Z5puhA6hm/8YZR6luVo+f0PY6v7dQ/PcMVTmem5eV/XU5psK90mx+/TRdXS7YXcOkwde8bu49uDyUjxWCtvBJ1vZvaJ6XvWtwtqT3sMW7r5/B6/N7nEPumexng08aeM9xS+8nd5njXpSAzXdvITQUfN80vZoCwzTxPLd96HdFOualat5yNlOVJ8T2l3nGmD3AXctd6lpU6pBMRwSsDAOK5c7lNOCwyHhcHvA4bUc7e79+1SOeV6WcpqeBqWZqRzjzoR1zXhA2YW+MoMyg0h3pQtONq+yyO5aLgF8JFnTLP4WEZDcbnGHR8kvuOUqF0m/m2FAc3mmRXYyCVfpNwr2QF/UpILmsTem+qTD66mskJDW7GFUO1G/a4JYXix72h80kOVxwKjN77uHal4yVJxP7AeoKSPYXF2/bdlgl8mT4RzWqDhn9LrcRofVpay6jEBVVvn6IQtBGOWqOS2GM/Kp7EK/f3ywu9Cfnk54us04rSsAIC0LXt3e4u7tHT4fH/H64TMyZzydTtZnBHciU87Iyf3WNER1KjQlEGc7xG+lhCR3oqusLc2ioB7U5+JAEq6XGn7Vjm0GxMrqzWylNUdzDJDobZ1JaebPQ3yLZSzYjaWNJMl7UvqUeiZ0oZsUxkH0vmnPgxewxV4Yqtxr62lOYhznrJ5cMy7B5rsSfgbQ90AInlcDTAdhYCypYTUsb/7qx4CRwqDGbvtmzWtQ26fYWqPSGZRWRv0wWrC0ZQco09LecxyEM+lqMJtJUtzITt3N0drQXW2GX8DZyLG8N6FC1JDYJWJxaiLYJLqj+YEQ2txp8VLQdJMaRdw+8xCdG0vmV1uO2/NNmfUafQYgWGIXFWj3skybL+XZfdDc/lGsrzVE7FGp7Awyu9Gu8PZPwMOvPW2cBcdXRHK6hPI7ZJeoa1+cxGhkh/6Gc0RTDZxrWrUm9TMlJ1+cQbhQuYNYVoUXQ9kv2kFzj5jJFK0nEYBfK86kK1R13K4muAmYpV6dl0ZGu44y54abd2q41lW5NVfJNpY8u302K4z7R1MmuISufHsmZXBIWgawfdacYiK4WXoxDHVHMkPOkRU6XSHfNY2+H5U7ghE/P0M2ajHvuP7+OEv8lWE3G6gsY8Rj3FkmfkTxOzL29Mxg6OyPM+j9WALQbRFlQU5ZlW1Hm5E7zpjJJgj6Wz7qBQ2bo/UJ9UhvO30+6lL37A0D9+6575uLyGJmNarzzIO0z4TnqPIgoi7NYkD+i9OtOnPlA8n+uT6kXAe3W/Cxo89fwpTZ0/6YJtZ7Tt9HOXiuTm/3xskmCk3W/iLffy4toXnOaJM29qJ9SnnDdlHz0b/baOBWuzWb14dJpwzIRLzn3+mknaljkR85l9+2+7yi2kh9rWPUjLC4oYgoDo91IVv5pverE4upwjCZ1mLOqNfp1O4oRRVEfBx3qKWozdeClFE7GWH05de4P31cThdRnTcfXMdca4pt8fns3UuZfsPyg3ynScLRgruvBi8hHL8lXDOAV7b7BSckL6/7mrw7M79o4FzL1P+u6LfnZlcHsSLyTHjBMe9s1jPv95YzfP/8fu9tiUkdtFHH3q7v3o8zxCtY5uVR+AP8onoml8aOcI+/gbICm+zKOEpk6/4pMdIrwpITDpxwkxJulgNubw84vL4BsyxRy0W7ll3qkB3oCTojkZGRc9mN+pQIJ5DsRuU6L+Wvp1lhcyolQMcgXXhMAOnRXiqqpnYL+heqly4gG1/slq1wNZyVvc+hdWc4DfDmOOc6Cp6HohpcYqSeCw1bkk2MvVFZH/ndzeZK+aRdgUMP7XLgy821s3wKFJ+dqCt3bCLKLzWvzJSsKUwcyU70JKfjqYtwWk/A8Yj7x8cSQH864ul0wno6YT2sxSZPCbe3t7h7+xafnh7w5v4NjusT8PiAMkkKEJcFLAxZlLqu1SfTT2YkkpMr1ixBdC6BdKZyHYOtdyHzrZqpP3PMCv2Tvh92uBvtrTRRDjR+eeCJ2WL44G+V0ys0W0u79Wh7937SCH8M/jCI/iPDtf7OBJqTBL5QH/2OA+h0vmN98GI0wn7Cq/HyZ0rLP/tCCvUbAFWJXX9DJ1lelnDZ/tuRkJov1WhqQB6a8ajtoWoojEAn6/QY5kR1MmmGDisVydYiM7RjNe5OWohxsOjZzJMKqP1a5HmwILje07htoMiklemGMAUVgtV+NeIXgVHZTcBhgJtfVe4mVfVIGR7l6epAM0YzOH933Tlj7dLnO997ZqE6rvX3JcX3Mk2NLxh9eDpxMqFzhmc0rNazy0CD91N85f1fCPj4ueyQNANolif89v2zlOPFGqdTJkRth7nO1I4Waag8sHfyacHz1KzwJoIcReavkRCZ9DaVYFUC+G2VUQCBPrty1ekFW/UVD5iVyATZCTZqO/oxezYMiMCXb/04qXNAE5Esi1TTXb09DJvS8DzXo9z2lzAvj7ovHTSmh3cGfJ0Nii6Dzzf6A5cju+SPWH+zC5azyU4u58y28qJpD7l35Bl/3rhYxvcKV+HoHFcXPI+6kikXGpUdouCwWqFZlAZ3hL6MuS68IQZnPWZC8jPVOpudjh7HlncKuoH+9fOTfPUnBYyarfbLGwbuK54zTbenl8n9b+Vzn+Jq6FcYTNKN3g+F1CAj9a/iwioepO+KdrzU7O4Mtp069ec6Olazq0tbumrs+1hOtJc00cGNrG0HdrI/oywM60tu0zZ1UvOpd3fr9waJLjttvKtJ2H8fLSL1PIoxJXRy3dtGyT2L6NlEseNpL6NLQyUdQ2e47UoFbsdsNnHnF5JawJrKHYZejKhV0fkQniStjo+tCJJPJllcRKKIuE5ylOVEdZKo1C+2kba1nUGDDtIRGTcgLIJdYQWC7mXR0VlDJ+sB8xkZDMKjIHsDxhNY7kC3uxWsMcX+yyBKQM5IRABnrFxqPGW5V32ms+NYeEJrmhjTcZ9+BM8SlapDdsBblMWcMT/Q49xphZmWGOX9WnClrbJHLXwhUPv3+fACdtqMTve+v6rOaPMEMHIb0OWIx6z87ssLwoxXLsv+fH6h7WbtLXZrGGd+5FQXo9FZlyESi9zIR77cic1Evou9vRP1NG3UtRP3Uf4Gx1DaYJ6BbEFZsGcoflJjCzChCTyzzh/oM5mf0GvgSjmp2HNLwuGw4OZmwXJIWA5AOgBLItwsCTcnwu2rBTd0g+WWgFcAcgLnEkRnF0jTXejahiw3YbEc9fyYgSfmEhjPsqA+U8HJrUOuf4Qk/1jvT5Z3DVm6oCtr3zKbvWlzti4YY/edj3zhqOLwHOl6nm4qTYrtmSd0PISZ3PNI9zYpO9uD3Pz05ualKAQ4fLqymyBoh9ugY32djkc9yXepbZ5jSz5oTm2f438Z7+dvUfPV7M1Hzb/YxkHBsDvqKYHcPJ+GasjqlxKYcVpXPB4f8eHjB7y5ucXdzSu8Xm7wOt3g9nDAkhJevX6N9wl45BM+HB9wXJ/w+eFBrGUgpXKClQ0z11iGX9xc6ucSPJdFMZwBogwlaUNN2+R9H+fe6FB4c6D6C2hokn2/+xhB1+NWyHYQVufGqB4nr+2uyGl290zpyALisREt+OD5EIffCYxjLfUZx286bt18AMUMz4LfcQB9P2wGyLbHcwAXOKk/IHRKYSZ4nguDuaYXAXJ3/w0nN6hJ6yelGMkFz88hV3aNsgpoOTo+TEm5yak4WYYGP51gqklGygDwCp/9m6Y/xUWIw6W2RDSUmonErwS9RbQr21mS+QLBntLjL0WwzqKw36M0Lwd254uSzl5ejqg+H4HL4b+9B56egIcTkNfz6Yf1lju5SiA7iVxIwVkqfdFf5UGhKOXPev+n8X2iGqDXfLajvOCBRKA7QjnrTJI8lHronaR5V4LrJM6oDlPZ1SUnXNjRbIKY3okE/zloxm62CAbK2eQj9+ZyXrmYRLzc2iW/+Mz7y6A19Vz9TRXht8pen6W5aBXVptD2ZTanmlfZub/6YDm7cmN9k/Ze1Q2C3ycp5137+LuGEY4NWXSzAW2f6pHEILHlR3eEu/G1svUZlTJIdqDbCQPOjdY8nm8Hd/QZfudAxwkMvOVaLjm89PdbBj6ro3K+6BFU1/oL2xKj4mdVDhfu4TqapfhFC+SqY/Wt6w4G2j7vCg3lzOp+dvduZE7jx01uh+K0pDx5EWzevmBY8DzudigQCr10/JrJD2/XSdmqryd5u3cUPhHy++eep+LiHHsmlVClIZ7wovdlua6Q7RYL684JCgNWvhKAD5JSBLnbrVb+pSZTu1SPa1Ma34Ns7prCa+tt0jb0jXtiueyC1fKprWb3vy9V9r3bp757khqf2tqlOJG/2ndAaF0UHe9Kf10ie87BjIn28PhLidlhEP0nfBN47ph+a/vrRXTpFQWoPTN8vaOCL2yufPdwzu272I/8wjDyO7eGmYLZdS3NvSC/+VZsFksou1lVP9tcJ0xnl7kJ1IC5TDlAnxOVa+yEXyx4fnvA7c0BNzcLDgthORBubgm3hwNuacHtqwNu6QbMJ5yWE3gtp3WVoFo2XNJCWEzxEzIRclpNzaa13JdeNqeK76MLiZPDlWTjACWoJeLvgm60dTDBNRbWy9JqU44DWDH9fJxqHpr7YV/BDQKAPrDknhsq4/e2mHSSb1rfKJ093nGKQlcmoPNyxfSt92EPp5iuBamv2MdtMPvF6wFMRXmrtbGNm0Wl8p7kZEo56VJ3Qvu+0GPeKSVk6bOcVzw+lgD668MN7l69wdubVzje3OKQEg43B7y5eYPl9S2OyPjl+ID7hwccPn5EzgzmJ1AqcxSJWa5PqjJHd06TMFp5Vb4QA9kt7qlBa5FbzLI/oDoHbVD6y0HFB9s295n58eZYfZf+a+yU/k3DiAG9IFdB8AW69nccQI8KwE9ikPtwdxjY8+AyxwHk2Ytzz78mPBOHaEWawiNnbIaAsBcMFxExdT+bgOS0ez1OVJVMYjTHYOqkE/5/9t60SY4cZxN8QHpEZKZU1dMz887sms3+/x+2ZrtjNsfbXSUplRHuxHwgAAJ0epwpqapLrEqFO50HeOEkQb3HWxvALV/nKhA5gyb3l8XFs7W5EQxrL1eF0aJ9tCJ6BHACySlDvae2gpGQQCic6smNLpgbV7S+bzvLmtrIK3WCM1dL1pRE6vqRxX9wLaX2RcVLBaDc7ugskjbomR7EVj0DS+7DUBHlmDN26WRXq4EmRHxFeDeJF7mn9szuifv0Qai8cZ11Amm0z0Z2LXaRZ6+2ClbYWlqWd9J4nbZ6v29frMyt4JbGG+MCnB5fnoOtB1UJn4d9K10XTifg9xmY5wt1dO92wi0BmepJcEr19CjJRGcZbd8XrOtdCtX+MfwhzGyuzKp6q6h3ljf367YBR4zm2rf0oW7QMeH2BeZqjZOr81DnZ/7c8ioP0coGsEBOn/s+8AJTXF8r7xOh++KptirYBiRwvt/92ujHQ5nsLtpO2nCgME4B3tfe0+rGgIf5xXr/WktuGH1kuPD9xJ0DeZ8/lOXPCbWrD3TYK0vCjQZA3u0aVlmTZhyv5VNJRmOa8VbTlFaetUO0EuTSWps6Oh2WorbSDQzrnB90kZf+9DtLYz9rvwssfwPwz65/V2FE96+kMyse7lziRksYVE86dOS6BjnWwABKAS2qsAGQAea6AYe5uiljdUVGgLpdX7dDkH5Amcl4iopeWKOEp5H71dUtv46Wn5cy10KxjgVQI7830tk97Z8k8YcOJ/uufwbwpZGXXvESp4BWrJMeq/FgOU3Pvk06Hpubb0bPHRAEcRgScU/w9tPtHg+hIPaBLd5WbbTdksW1e59hbdad7ooLjF/0MNtLNErG0OFdy9et7RGe9a8+i0SwjVq3zkNe1zYf76ffubu++0D9q2KgrapjBt9/8T7Afm50sCq8Zk9lLLzY+KxZxEbzLaYz3m8ddOjdxVs7Akgd7epADsD3yiWX1ta2FeE+ePLW/fKg5xifwPjYppesqVr3J4ca2lwMU9HaE8FvnnzqWsle0aZnxR3PFfJ5ykqQE1JkV5u2utmmaqWE9Q5zJYUHJDAKmFmM53D9rjelV/ewAGPGjMJcT7oRoRDq3a3euwIQ7lT1/d3f8TdUTNcPV5O6xwJji183UP188QjD9/HZcA0CuCfEdXhbGBChW6t+IPgu3S7sQvytxgerebQDakUoztQ9GO9LsNj395jUfV18/nNI98iceSTrgxOGVg/vU+9VxSnS9whhlNeNccD17jLtkR7GV3NruIq36JiHSwVQO4VcZ0tte6Nxxswh6gcGRfe6vxUotMrv3Vtz6tPD0VsY/WzDQ/ZcHdUUVL1GNYhbeU6PSERImYCJQDsCTVT1FpmQUnWMPqWM3W7C036Pp/2hGszlJPpul5D2CdOUap0zo+yBdKpeXqpsWuW+TIRMCSln5Fwt4QyqJ9Dl7vIdFpzyEcwzjqcTqCxIzFi4YAFjoUqHGbVtyAAlAnPCwlXeWrhS7apHrbKNOvgRqU34pRQ3S1I7zTs21glfqkPk6HR7pPVcZpfpXKCablWzyekC+agsmx/ZpXcMHyOe3re517wZBL1uX/eqvgEeZrcr1hjSbtKHKT/uk0gbPY/EIpORsmdWBcuY12pV/ulhQee4y82F0Exuc8WWONvcCd3g/gVgRmF5iWnlvZdHQ15rkitTFrVtEglwASWhtndhZFQ1OKE6bc+CD6o5RE5OlzpUaSk4HY94fX3F50+/4/Nuj4+HZzwdDsgklyIQ8HF6wn96+RWnj284fX3Dp/QZX15fUcpJKiJMyJgxIzNhwaIXKsgfI+lVmHIhez3sIweWdHOMsSfFXWcoyAz9mLLx+zo+LOPMUG9WsDvZm5A0eO34W5M/E4e5YxPF698ZdWOAm0T6b2D3zSjPrc06X9npYxhWvlFUDlactWzp525IROtEa+TSR2zE3RhPbQ6H9cwKyxpodskUZa0JbMdf+DJ8kZ5neqeNCn9dA/qKcbN/Go7fQHrXhVGee8r5FqEnYnfk9+swlOuTKbZgh53oOsbB5w9x/WKhuDB827z7ZVBF1FRc2kptyZhHtgVqC1UN6JX6VEo0JTGgT+ZavdllCImUVMCUMaYgXSnBlPgRqJDxG7RUxiAnQsoZzPXPmJ+wiSNiCe76obo39vW59IzGQZirlwImuatI4M56UoPqfe+cUF1uck1fFUSeaPTry1MO/34GAesnO6Wrnzr4fbwZc913c3mryTZgGwVqbItncoy4rea8L+/B9c7CGJ9FJaO6NjIEHHcJ13X9aJ+TK8t3q87LlsfWgJXR9Xs/9P263gpbiuRfd8CnWYSzC7i7j1YckeXPuYw1I7IReinADOT1t33p7jBPCZSnakDP1fLFiYCcxeZFbgyKG9K6lq38jyR3lRGwB7A4ji815mLlzk3+ArawMWpYD8RITuBpTFovXtRfQ61artt0s+pfHkQTbQ95t7Ya4zS+67ymyO5VU5U4p+HXlKuwOBdRI1jBHTTtnYUxbnhFMLBnzoGqvAi4S1pFVZixazvkGdzcXzGLS1g1nptxHKAFdTe04r5Sd/czljZn7U8JTGzLmJYgkCxtVzTqOGWYxm8q1BDINSt+A6rx/FfJp1zp/9JyuvJ9wWHOYBw/fKdhNPdPvTE14ElGpX0ZQHXjS76QwvUT1HjuirIjHh3gvaAvGVJKst7I8SIQNKTzkdAb5au3/raeY5eoQMuB3Op8YJ0vui5mHnizEP4FAJ4BeqXQTaMebn3RBNNeOFLB1/AA+7I6xNP34RZLoetS+nHFnjJjeA1Er9S1aUltfVh/yPcOvKaka7TLk134MdLNLwaclhI3CWm5cdKxdJvSYj+Pt9rWtW+AA8LDir+RX3XB6R2/7OV3duVskfaNcSMASZWI1n3dPPN94JrEWI91jd+cJAGWsAklANXG0dcXlWWoG2sUz3c4xNala2gYDZJNt77fdf37xozwbs83cr12Rmm6v0VKs4A78uR+e5Z5BbPKd0m/D3ptNW0+Afwxri+qs3Qix2NA65CTaxT7yONmBhnqJNQ7FSt+i3OfAX/Ruts0XPHeyfqyLfiw6cDNN1JY4TY5+bQCu+XzS7Enuwxg8fQYXYIrgq9fH6/K3tXb8+sjo2coewR3AOobh3SfqgbAo/DdMDobuT1ypPVn+4btdHc1oZZj/hpuLKOumAf67rGOq2FV/ZXwrJS23zkEBuDuAm7Pc055fFVxgsAMj2/M1+G81fSpMV7DKngMyy26m7PfN+Jd+v40rPF7lt+tWepY78jcuaGyY9wtf0cXDX33IJr3ulFTuNUpaZT3qUm4bkFjoHqzqhvwbaMXZGMYVxN2zoS0S6ADQIeElBMSVTlkQsY+TzhMe3zYP+HD4Rn73Q6H3YRpmpAOGdgBSIwFjPnLEcs+gdQXO1gc8BEyEqZESHmHKU2oh3QmLKin4heq17O85VcsyxvqvDkhcUECIxGDqOpYle0klbm4OiEsAEqidnOZTl+CedlR7jzLVS49z6M0vXfNHOWSNqbtWi1NLTzfCt/QmD77KXKWfnObeEOZSDKTrntynRBAhhlkHXNV2DPuLd24Po2WeNVRrBqladYTmeDnYwSx/nGLCE2tbWtLTo3n2r9Vzx8OhLDEQ8enreyieR2UFP782l/7RAo5qZ2sHgXlGb184Jtnm/Jl+Mj/R70JX9pNure+IEMN3y096fyvqgttNNIC8Dzj+PYVnz5/wsfnZ5zKUah8qo4eCvCSdvj700ecXt5w/PAGLMDpNGOZGYUYoATKzoDN1aifIHAlXWW68Z9RQOL1E6C6E7Uu9wUCrJ0ksflDxE3W9TjO+lbnTBxL/10DD76zrhm/SZfQrZ9uBGS+KUzVWwHL2LCMocMTNnl0nFnmLlt1Eag6Z4I+J6EewDSYMcBNu9qBwwAAIABJREFUI/ygv9zFO/p7zkYT+NZzQfrfprjC6ovX+yU3QA14UHiIIEx11Xn2YgNtPBr+ugb0i+FWxvRn+MOGwKgTvNJwTfp8cAhT7xd2p0b9irb9aQMiuZLTQpJYvypwFLPcLuJRQzZ9NSvBJjZRDUiG1Dou0rKvHvq66AzSvRCG+WiN6/19r/YuafsGvtNuIwNxE853DmdQ0LerfVDyNagwWCPGxbxL2BKI/0sSg5v8DWxTANaHLZywgJyakKrflBHSO6Y6gryuoqZnhyPi7lNq+ITQcMkvUvbvKaIEMcDbJpIEYK8wuXQJ1Vjx+wD/hGc2nrXnfUyQUEW7KdzdDk7A4TjXnnVHrMI9FPVaF01xI0dX61VlyGnXYTEjBtP9Mte7Vrs5oYZJ7Wpy3CJFoLFofmWguQgOjvSgP31ubo8lLuZBy+eROg/a4OHplQTfO8yonOl/6uLf0O7ofjSYgeTRNjrazW28Ta/Bblwt4agMnSjU1r8NQ/NQ0a6E8MU46aKbg+YzwIx1Mv9eAP7CsRzRLDXlT5szzNxOostGHtv5MeiL9+tfFwZ8zW0u3OgibfIuAFd5z5VrACpcWp6Ds+uLm0ik0owSIbGalefa4r00v4aXdXsaKYzfqhJi0HErxfkDY36B11ktoaBgH/C8zphs43mO1b8X3n5MXb3kFnJ/0iT2pK5RTU7dN507jEFmCZ8A+gVNCVrrtqL0Tk8HQ2yPwInQdbGLHZrx+lhrN33ueAoH77l+H3wvqCe5zVsEM3KSk+KyyWgtuynGc6eI9F3K8OCxS1P3ENfvJ0u1Rtp1Y5quhgKqmiuclhns0odl2BdzaeEbw3BF2j9SeETu+xmwiaBWOGGQ7gexan/q8GdbXw+FCxPk5/y5OoQpQ3ESqax8dbi136l7UTprhvMGTzCuabwckrGN+z4kqgfNdxnTPmN63iE9ZeTDhLSfMBEhU8aEjMO0x/N0wIfDC573TzhME3Z5Qp6o3oGcFiy7BcuygA4EmhfQMgGJQVwqOwpGThlTSsiUkfMOhAzQVA3enFAKkPOCVy44Fsay1JOoJyzVCMcMYEbJCVwYnIts4GSTmTj0G4U/osqbkV2T5fvPicSam+Qwkh06wnkccvb7Oy66SzqY1caT7bQmRoSCNd95mNe85ZVrQZj0i13F/cv3Qlw9zX1PYWJc27ovRKmgxlxG5WkJMn99OklzFkSO+5RE77QU4DQvOM0nvB3f8Pn1Fc/7J+xSxk4OAu2mCU/7Az68vOBvx19wWma8Hd/wNjNOcwGwYCl64pqQiGCGZo+q1NU8ClIpsM0s5q2PguzUPD3A0oQW+bWpspc8Nb56o1Nu4F29eLPu1RVZWPHG9mTprp9Lm1dJ/JDwDmvAC5069gDWHUweMeE6Yerbhp8GdKAxH/bsV/jP8N3De/W7as5MuQi0i4TrP2TvG3W6HZ1w94oEXTGU9KuSalQWN86kAWBPFYewEcXbghKY+H57CV2M4x7jJgD+9njLU5ihYYtdfNDa4TLjsBG8EdiVuGIKNzcO3FHneYAcTO6nr8fzcr7f7uHxPE/q8vo+OCskBgJ3IVwLW9//fb5fCPjHHkgFWE6OW7qyLDVSBzoAAFzjTQOP1j+d29AAWsAZWJ+YEhpj95//6nacms9RNGOZN7xrfELFQx9/rXnn38Z9o0EVz954/gvaVaa+f7gxad6IbnXLL3U00oTLUVjNz+8VRjjigsTrNi+1vOM8BF4zs52x0gwSLLtuV8nZTimq8ZtLCbSA1XjuJXq96mMpbqO3Ozns7ztXJO7ncvcYgP0Rwa9NP48VpIP7xmh33527h/WbsnDjwsPpA2U7fNc36VEzwBrlEYXjSfWqDRUo2fUVwxfcFDsmhnTzER8EJz0z2G9IEO8EzeNGsbgwTz5zO735oZ0SxdcGwv39/u2VIms+qecfxiA0GngOyfl94zHdKNdNrSWAUjQbetyiG5/iZrbzdNC+6tQjaUGYjiR0rKPtm3wQm1vFdwkdC+iDzuyLrO+joNzZFuMHoPR8DEtYq2Ga6Vi4mTIEhVB3uBCIfjXazL1sa6kJqmhS47JQsyiiOB7bxxsfygDjk+t/nXujjhg0esBrghilUDOgo87vUuqpNfKVh3XW7jo3jkX6jru1y6GT20bl0wpwdn+DT4ovpa/MTjHOcTH0/Xizomyr/+8CQouk4bvfLGJ10lj6vSb8cZSCPyLQeI0Abp30CfqBuqPaP3uXdzLITaHnhe+q/9vyKv/SYaBvufjtW/X3Bo47n6fPy917l+5SOZugkZUeuDbd7ElOnDBeo9L4yHNUwlQI9ZSop1IEUAIoJ+QpY3fYYfd0wPS8Q37eY9rnakCjhIkmPOUDnncv+LB/xsv+Cbtphyll9UKMZTph5hPmdBJ9xR7AUl1GFxb1BWFCwpQzEmVMeQJR/WPOKEwoDOSy4LDMeJsXLHlBKVyBLQUkpw+XhVEKo6jsznJHNWn/qNzExhupcc/a7/krEuNi4KXdIFyFNi4NrC+Hu7j3muedzsBXPuRD5cDESE7VnFca0dl292vcBvN7AfxtfnfjWxC0v2XYas9j9frcVQUkG3AHYuqm6Hqm+ZFkyloBRDfI4IWxlBmnecbXtzd8+fIFr/tnPO0OIKrG82k34YkIH+cXHJcZb29HvH5+BY4z+DiD5VBJtbCQrLfUdFFEFd844AtQ8YMiNNncgkSgwvXKS3Hl3toYG6qe60HKT7p57mSrYdfwlcu660tQW2JasCdbmwZvla/O4BP1CBE9X3xnpm3VyPDhfeBZDYi208sY9H2W9Q3hpwF9YNA8n17++UsLez8o2HpyjGrTOLi//lsXlIGCc2K6UkhTK0PuQ64nVBOIMhT7N+fvLcu6snEcQeFoTbJTht5wwgMjjZXg4m17VlApOuAQFXHWUvKvaIaWNfw8ZO48I6Fjk95pjWjvypoLpykxroM2nh+FxAwRg7BFkd8biG8UtG3DO3ks+HFughqH71ZiVLDdrU0crGP//h8J+PRUT0IeT40p6etLXSEe76sBXcsml4YBc2PsFVkbhDzcN67V9LJDh5uIULnHz+pySgUQAK8E+kDNsO7axx//ttEpaPmFK1TUwL9zO+0+6liPA+y9wyWkxa7dR21uoOgFxY2wpUQN95L5nZwh/dmKt9Po2BYeJHN1NcrQxRgwiFy4E1zZ30fdn4Tr8FlhuwOdBK5gQC9oHhEkLZmnbY8j1fjJBsNKabiFRzWdbaAYBTex7g0eN/g70PvT55pW17FfT88uzRcXfxYnbya4I9iiqWOpd3slAnMBWO5B17t7eeBlQovZwpVuMw0nkpoaEtJ5RG1xBqgCmJndnJIPz5qAgc+lPdvcdED5+3w/89rbBjnXecP15vKfQ+6Ke3g9Zo+wFq2Xep5P+pP6OgFTVnbtEQfRIYY3v23B0/eC49WccZPqYdfYrdTc5DWD+QbfQQS8bAOhcAwpf9Z+d/iE2lwDUD1HaNDNLnqRdMce3hR4TRd6/sRwn35fXcHyQNja2BMAkNUoa9NXSR7eK1DOyFuBfAk/EUbI1CWAPlU4qAD0ZG3YGttVOboM5J0YQJKdNvxRptmnQErcdGx94D3reW85fZNcnXLEHOCqEAeq+/5EAItLdra5V0+Q1VD5txMYO6p4t940Qa58dwUCF6lSea3LfMJID71wMQUnEWMpjqZrar2W46rAbe1D+8P9bgXDpWtscn2ghmAeXDI/w58rPLx54b1YqZ/hncKVA3LXuDUZNYRe7vlXCtS1ORDHc/n0n2v7ZM03s/sUDJoGg8IhsoDxGvpN8iehSomaVzu9jikBnAmcM7DLwG4C7Sek/Q5pNyFN4sKdMibKyFN1176b9pjyATvaIdMkBnQGLRmUE8xANBWkmYFdlVXzwvUu9ZyxQ0LOO+Q0IVFGoh1KSWDUK1uO84JDPuKQT5jThEIFSDMYwIKEUhgp6YEEoMi93aHfEoGK23zsT68qG0tY6W/6TWIsNjzor8tfb3uhJleFIeeQNvL36ylw/iTCmbnk+ezNIgbyzSg8wkpo1js3vAR9j/x7UYSQa57C3htSz4KP4CTlEUfdobI23dvUK2ruanSMd5CDJL6K65679QVRUNmQpi1FDgtVs/dSCo7zCa9f3/D750943j/haX+oVzjkymsnEHZ5wvNujw/7A152e5T9AeU0R1kQM4gmlLSAlyJXbDbtBaGqFFjaU0/TJ4BKNboT17vRub6zXbnbGh42u6w6bN2Rw34lhPvR28YF8TlFek2eF1paeSOvnhjqL9rBpEd57YZOaNtQf2/J/QbZbyoY9JOyr8rjao+kfyyv8dc1oAdmiNZxIWlDoOiefoY/QuiVU9T9AoGBIXcXCNqd4Y3nUG0UhMFMwnDmeud5StVNkTBcvFnnGYh7hVZnMB9PsS6SNl9gyudVLs/0D8kIgOa02RiErV2M4dkxpUEJ+OB68Zq6ED+Is2GghmtvrX+EG27Nd0e1PyxsKmz70yRtxpKbW9vNdnPGBMmrAEITJAfZfIXHA0AFOM1RWFxxTKN3asKkfp64XgRUlDSyGIy6u7Q1/6jfPNyCb1gFS0Mt1OBdhMZQqncv9cYBouq6+gNJ1XEM/tvh7/h/P//e7vAOmRtjZyel+hAYTGq4QzdVDNO7dPbjpcpbwxrucTKO4F5V9Dm8KWEl8HrmzOO+NWBNbyQUpE/iNvyMmsXhZDk34zi7b/JHBcAiQpK6c19gBncTrvT0sMfbHv5rGe0t3LBJo24Nnh658L/d80f53fd0Huv3D/L72n/8Vsi40VJmgMR4zkXvcpKNZEx1PMjdIdFv6vHTLchcZH96otRkCFkNLWvzFrEynOuY/+9S75u35arzz224aBNwPe8zoWqSgLBOmjTngW+ParxNVMdnmLbvE5doKMhtIbSt0Hg9T8Psl3CGHvoyfE192rbWrz2POWarKMDi/CVVbyKWkWN6DJQ5WoY3hLvq4ntPK9FolW68sL+N9fvdwxiG643nF8bpSgO4KV30Ge4KF7sfvJXDiFPclbRRQZc28BrUgWrMRkhMLnM83dB4ixDIx38G0Hkg0uWoynipO6TpSbCvxq83aZ/dPe9Qp/LyLIbw5qhdfqkCcGLGzlWZZO6qcowZKKYYkzLRuW4nXzYsFQF1DagBXyUlEr2g4eQemV85D6lL75VsI7oX0GDD/Zfn8xok9n35M/x1wgPD/fhMecBjwcN14wKd/xcN12wIOxsE2Rtr3Y9ERyu3vo/gGWxcjFVfGPVbx/NM+kALR/R/A9WS/GNy/JX8kW32GolbCgPFayK9u2MPMyXAvMT5oPeeEzUPXkSVp88J2CXQlKvRXP7yfkKeEjIDEyVkceW8SztMaY9dOmBKe0wpS32MhIS0oF75ztVte5JNurRIdSBMKWFKGRPtkPOETDskymBO9a8wMmY8n17xlo44pRklLSgL2z7kkiYkWpAwY5G+WtBk39rM6mGQnAG8qUFdv/vnTn6yUSSgPznaSwRh5Pw0YqnD8TnD0JPhwC9p3VKIPV8Ith77AtdVaEKbk6PiLq011cE+aNRTFsjzoaO75IM9Uv7pjeckcF0PUlyQIzbsFjnvlhCG64xMOhq3IdPY2bHIJxd5rqqMuBrQTyd8eXvF7nPCy+EJH59fsN/tsN/t62YaALs04Xl/wMv+CR/3T5hPJ8yzWM+Lr3oGlXY1U9MfVfxleisCKCUz6CdeUCiBUgEjgUupG2VKg11xzi1G9FEqIuPwK85ym9fXfRrHgwG/h6kZx0OHU7gLPRjRXTqyjemC20O7eE0ixy2+jRaGTTUB2WDdkPcNm3vxyP4Zg4PB9+8c/roGdA02ejR+/xn+OEGZGmVCthOdD4a4vdHcIQ+bAqScaFX65oSU60l0PXVle6GU+TIQKkLqD28pE5DEgF/11Wy/XMT1riJi8AWTVN9e4wQrMTAfRn2a4lKvEWMzxPTxnvhtCUYDRNtj/Uvv8aPTQ8nDlgHHxqEpt86HC9+FWW12KA5TJT404vteITDtozAa/neoj/Tfro122m0EiEOhXHw/0W194g3h/bzV918ApIMYYkpwfR4y9uUY3ki2plsWlq2QUxNKmOG0t1CGLxBytYprPe6vTh+PYWwiN9acVCCop1Wjz3cAn7j1oTJdM+H/+fXvMGFOQRpx+H0wRTcDvwL4zWVgHedW0EhYUabOhtWG+8oJ2C9/+9fhEJlrHpb2qVuE1xh0lW7cuj69EMYIo9m3oDHZ8EhjEx5Dox6vqhHdGc9J3bXrbmE7jc7O+N+V4cbGVXQGoDNdoC17R9x2cziicqy6cJ7/rf7+9j9aGu3+FwBfvjEPFyQmREqtp84Loe6QAbDICchUAORunVPzP2ZTSMoXmtYUctRdIxPXx9pwxfGXGfiHzJW/oeK3fwj+gbz3c8XTe0rV44dWS+IaUVCX7TVKqONAaIZ/SPxHB9ZnIKx79zPo9DM0yPXlRgFMyVVBMb0JtCMcIXh/VNUKHD8Ww+gNmIG2MYkjvyvf7K7zgPDdOAWhH23TAlWOSKGyzQNKexTvr4AG0BwuDYan5b3UtNXztWGQZ8iHOTK8abwd1n8GKFU0XxU4DJdm3/Lfsare1pOL1E4fKePD+tf8ZLq2GvtpBKV7+BiUOFa1px3mnCfyJaQGaJVXOr5ltYyMiDTYV99d/cxAJgr7jJjEr4NXYIc782JfO1214/2qe9dCqDi6DyRIbEUzmxcZlpPnmrswg4mRmMCUUHgJbbk+uIEoDhedK8fzoY96hBmEfpkFMF7QrlDRcbu3oodBf8TXxDfmFS7VfY5x9/KFpn8veH9ks6X+H8ZS3rw2N8r4GWp4j/781sHT1qvSX07bmkxtY+Oo4lVRkadcoe4Nvqmdiqb1Z3LookMTnAglA1yt11X3kfUOYqpWbcoolHBigJeCZZlBJ2C3EPZlwYIJSwbybo+9XLXCnEHISJiQwCBiFC4gTAAVgBgpV5pLnEALI78Q8kyYSsJEuRrjaaplcAaQwXLwINOM5+krjrsFvFTaT3QCLQtmFJRMyHlBnhbMywJOS+tMYhSPXkVeMR2T8hHWV5XGF7RrXZLyzszuGqM4znHsqMlyZeSHakDP7Z1i3L1ryoj1BkEelDumnuv8qytc+qI7w6K/V/5C0TGdsqWEINNo3IivNlaWNQurkDOG1fKN5M6ttT+iv9VYr8bc9yQMmyVxg9v4W4Zt4icmM1+orQOyqcbffkqohnOCGHVR+dt5nnE8HvGaJ3x5e8OX4xsOpyc8lyIeKDIOpQDLgvn5A/C3GcwFp9MJXArmZUE2o3e93mEpXD1jKWyyyKjI9XRQVW6qniRSQuJqPCcqYEpgiK7BrqOUPjBWuc63pv/3QseGXLjqdDdnpC+tDEEmq03o4yFyE5ZhOoZxpReAUtDc+npX5qnn8EdC2lAKeId6uT3qyK2O9NO3qf6B8Nc2oOtuPegJQXm3XWg/uePvGq7pb8ODisxcdlM+kCUd53dKWJc28C9GI5XZIlBK1S0RpTZfVjtTXVwPgIEnJ+CdbqbeecuyRUs00M5d7ZZeZChKs5Ihz2C7svSUkrIgA/5uzPCsOK7WaVrVSh81IFxXBWVoXF9eMp5DYDFku804xfQXvkt/NMV9r1Lqx7sjPO+GRrrRHuGolbLFx18Tat8yJZCf35vJW32RsfbrwCkCR2FUxzn8SwTsAHzO1ZAzzwhabp9tVYTAmymcPCfiuju7UOvmsEsSTdjyUqrREMg6XcPc8Eqbv3p3NoGAT8q4qs8HXs8lVRovDCwyB9nVIJIDf0C9o3jYdrQ8gcevkczJln4vnPihM6NAQJhsDPpmxgFQ/d0+3KfTuTTcHenK7xGk7xvPQPfG+Jh4EN3jrr7v0X3bKrMrh/tfh9e88bzInU8avxQwl7qTtXPlbuVouQFPPs5xNiHzvbnXC+PhXX53KBcA8Ou/4T+QWXnwD16A3/7XRh3fivMWvInSlnqR4w6Eakgnqvf2EeQUpWuMkS3q1qYDXw2ofoNRV/8IrPaN3bxQfkPm2S8M/JMrvCy/48LkqKXAqngp1dMi2ixmAM++Xew8b3kci+o1gDG+y36FT7QzzgTaSDPg+UJ6rnDa79ny3Ysxcv4d52lYPx/tdYDnbJoYsarCpSkORFHg0Jzlzr7Kmqc2ryEgjxKVzAVIvQF51Byd8L4udeGX0fjE9+CDLnXntfF9gi0eZOtbIIiIa88puIWySrJWjp8xa36FYny/MXc0N5W8qeKIuaVjD0UHthln2SdtIOlmVCfT6AmQemKjA0NPbgDtJMWqUh/9CeCPxr9EQOWqCkEcutmDKcFkdqsnZj6BsUft/yT95lOw29l8sgY72t7BzrqRFqj3RDp06+9T11PyHqLRJoYttqLVB1uv9puwMYiIc4TX5a3ez4VzfLcB594/oOJuP4Z3hfdAEPeG90JQd4bQ59cis3eA9+FmP8hPPVr/WRp7Td0Pwn933d+KD/0Bweu7HC0BdGiHzKy9RW8mPb/X048b+/sSLgtR58sesqJwJI1cRGxi9+4p0Rn4Rp+UHgQIlAS0SvohAVX4WE+dJ9iVlMhiZSMCUsIi9KaUBfNck8wElOVUjdMlYZ8O9RS40GZCEvfrLEb0UqnvqQATg1BAEyFxAi1A2mVkYuyO1SX8DhN2mEDYISMDSPUOc9RT78/pCcdpxjJVoz1KBnACYcECYJcXzGkB5VOVu5z3NS6oeqIiHaE4w4+T6+vKY7hZee+mNBJezRuC1kPX0eaO/1dYR/jC5K8zMJwTYzpYGggO1h5OjEHx5UVdkcIeO/om7NfJJzVOgKN1WcbaWb1xnXhYt4BRjn0cNhd2XJ73hhGPp4VDOVnltdxCh/KKcLKsxyNkeKD1IzfHeIWBXHnXUhgLZhznE96OR7wdj/j69obj8wlLKdiBkFPCPk+gaQ9+ekYujC9vX/Hbl8+Y5xlTziilIKVktxiVxEiFoBZwkjVC4kUjgVCEJqeS6nOiekWh3IFO6jVP+kHd51fZQ9tVv5kR3c3DgZaxPa/Wp5fhInMd7qW3Ks+sU6zX8foqspjmPe9AH63PViZiZ1jCAa2icVsegcnaRU0O3V5HMoLfYLPwreGvbUCHIiPg2vsKf4Z/gdDxrd5OZsoISginzymDkhzFURdIqzlDAd+M0fQAGDGY2OnursgGNA8YvvPCiWeOSBB8kBlH901oZ9hpxr7SaxBX18H3BHa/9jziQLXKNi5VeXk/sdmGyTOXZ7D8v5KAvBm6uaaxlGSX4TVFDPpvJDz6dP/1V+Dzqc7d4wmAuwtTl9BWfl3PajwnyZSSwwtCyEfTfZOn9gzWiqWvG2T8tslSQB9QDWlfnDCHzs2zY+TqSXTUzQOoaf99PtY2LQ72c4FQ75r216f/DcBvAueAKendYG3Zsi+FM+oCrODeagaf+zgKnuntCl/hvD4rDSbTqBVbEs/gGw9+C2C7pNUwzminy8WtFi11cpN4Z69Gc03vCQ5372uotiD/7uEaFP0ZzY37BvpX4ccE31//c3VT/iqG9H/iGwU/l0geFQnpOLC4JCMQZ3diU+ZSf/psNFC9wuciWEq7BTi/bj4ysJSKT3TOsTecd3NJ8YoufNsYoDCRnZZkob30USR1dmnUS4juHejX3zPGRvQPjh58ovsnrQm8Gx2ok8hgG1Xk73oY0KlbkeImHO6lw0EcPqng2QnBL/61pqn6QzGuJsffaYNt2PUehM+qKrB/axE6zxFxpJ666dvw6L3KmzQX0fMMDerW92EZbk5usZXXDueZdN6oHLP4ExKufrdx1pQv3qBruGNVURtfdEZ0B0uEWQf9kyT9COATGB9l6f8O+M0+Om96VscVa3eCw7mQNRTEbWl5HKM/jq8mEApT9bhqy7K2y++pimx466cTmiHbu3QHqsKOTZPY0UrPMgic1K01czEP7RYCI9WT6KFDXENHa+DCumhuHnWdDRMNCr09XOexq6tilfyRhf4XDtafQ+KPOKbXMgFX1vsjh+vh+h/oh0frfsRScm49X1cANhjF67M/Uvc7Tb8/SujpM6Ur3M4ovyjEggDbQLVer0MBE4E2eP5zS3ijLoK6Pwkht8Sz3B8cr6RsBnQmoIhukxlICwMzg2nBlBhpKciZsUuVDlMm5JzkLvQJuzQhUTWWc2EsDIAL+FTA+wngeu952mfkr/XM+u5ph12ZsFsy9jQh0VQN6Jysd6aU8XGawSCkMmHChExvyMsRiRcQ5bq3nLl6fmHGgqVuZWa9dgWop+EJ6vKe5Uo9uxoGo/7zl2JpP3bD68SBxq/7uLUs/l2C16PdU38/jS+UcS/rfBUMTGN0G/q+PQ5BfacxWM+IDoDviRwDDWlyHKnM0emFOMBXOzdBxQQ2W0TdHMvgUr1JHE9HfH79guenZ7w8v2HKE/bTHkh1Q+th2oEOT3je7bHf7XA8HpFByER1Q44IazlRxTuiH1bPDjQxMNc1THrogBjtDnS06w8U0eo69hsLXHu3hntbnIwzxzmxaH1rm9C7WSbgmIc4L6+5/OwzvMOEVPlgddnqo+xFLQURCZxb4Y9U1guRvB6kodI5CJE/JPx1DegioNfHyjxs7UBsLnO+F3B/kXBxx2f8fkm4b3RCx+u8YoF7RFsnAYyJlR2ZdZcmNaZT7g2Ky7fm0zga1OfbpSSFGaDi7rRVhbvBTo1oeCZay9B5S3AqTnk2AKlV5oFWXB86UCBnhFNOjWvsCXYj2u0TdQhvzJrW18vvJPetNsXUNgn0f7U570JJ1uEcGN/DeH4RF3VzxqIvZOzaNdTTQpmNFNNafM+KXKi7j++NAf7l7wDmE3Bi4HRs8ma/pXTUbtsMQ05JLWstF2BJjUnTBgHRBZV90/ZLh4XtvKWtF5Y7kMFAqa6IgAK8pGrESgwuqRklUreVyy0vizjV9v378oba11o+Bp2+EcSLtO/K96MoAAAgAElEQVQyrec6Mte52NnisfpcG6T0+hVzhjvmbg54fDQqp/u+TtUY5jXjRuFtBGJ7ZodHO/g9Tvaes53xHIXtLnQq7huzXZXQcHgsv0G53cZx318/E+4Om8UPPnyW6C9oa+2f/wP4v/8tZOl3BVv4G76REV0HTC84ljUhbtTqtRBcUYV4lqGS6kkQnRu99G+NQffr8Izl7bIaWGzzqNFNCb8x6KVUI+s/lL9lmOv2fiOfc5VjuJa9QKhtoHrS/mM1JkW/iZqsb9SgO+HSfai4msSCxtW+d19goB2/8ZXFoK6q1ytDLzke8ZXdgjvHogSYOsS5sjj6OIc2JN4bYHtyaRIOwXC1GuPYb9ow8D8gBrkrPuypqInz3/8D1FNK+VQXFs9c2zM8iTqKuyEM6fngu18r5+r1G+r69O8YmLnNXY0MunlawRdYDPKwdXhhw4jO/q717slPVTup46OH9LnncSL4W6Sigi+8O7GJIHUeujbYB3LXV9U1b6fZpZJ6OkzcPcp0W8PqYHZBV69rttx7TvK/1OFhEkUi9R2nnipCef06DYzb1VPLvEkQZJ+SM6KvCqPYVGvOmbHaeF/dgb6SvzGM75m6b3Ef6KXAfV//iHC3QbVbn1cTj567u7fqRzquw0l31P+IHTrixxurDvzIvfXfmf9djioC5+bETdnuqVll1q1TdRZ9fn5Fzyxd2i1csw3U+e+r5LT5fraojtlSlpgAu65ozVNsFEjuoWcvh/igK8/ncXBofKOIjtexw0FyXV0SI3qCGJ6pulteihjWgT0XLCSGcdGNppyQc0KeqrFMfMOgEAELoVC9rjKDAJqQUA3neT8hnwj76Qm7MmFfMnY0YTJX8EL3ACxUcKR6sCCVhIwMogk0T0jlBFCqxvPCWJYFS2GAjsAixiXmeodyvwnZ9VvltZTeu34WctgkILQ+1KEIdJS79zjEZ2dvX84tYTRZeQyLh+diGIIx5g962KuMwqHxm60asTYsH3S+deWPmuZVh8prPorsGnvTCmf/3mrvft8pdKJa00e1D83zkfDLDKMxjPa8goyFidaeLHJdYGLoxvpSCt5OJ3x+fcXL8xd8PX7A8/6AJPqInBIO04RcgKf9Hvtpj10+YsoTllKQaAEr754SOLMdGtEluDCQM8ClVA8Tgj8TASXVg0dVhnC4VQ3rsuHH8+Q+rNfeoB8IA0O0x7N9nze5IQ6J0HWJ0INdAXeAXIbVgLhxau05fwf6nfNtpGtQ+ADEk+Y+7Yjne5T57ngI7THPSjibktK3H31O8a9rQL8nPI6Lf4ZHg9EoGozFLQM0SGdMFQlDmdwv2ckpY6YC49uY0+aI2bv9rt+CcCHu2gvXE6rVjfsGTFcHaqdIGTBtnZ16c0k3mLzBp5jCK/K/QwjKEWWKLsgk9u29EaztMIsQDjR53y7Q6mH9+igszOJmeFw5n61M3XnjiiVJsT1+fY9CztUQxnLkeiSs6xr2IVFnPFeXzwxkrhKi7k5GqRyd1zArTE2C6n4HE02Z2ML13uOiVrN62pN/U7wiqkuietdOiriFtB4VJMQddN1lWotMDLlLuANJ70CSvjXx8BPqPfI+fcfmrRtzJmyOswDIg+QeN44ERxOgRoV3CGAI+pnJt9mcAaD9ROYu3agsj69YeHvbHdt+CWh3mosbdq7b6dvccfedVzoBgN096FAYHwy9kf/PEP7/ev/5vxtpIuD/+s94f8R/KTjByk4qqhCqfxBc4OIGQnhDM7QqukX388/TSCd4KQ7yQa+LsW+MdgLdw4b27k+yWjo0PkyuwDAbrG/bhpwY/j7HJm1nPBffpRmxeOSQ62CKBAUq+vvKBszYavjc2Pffb3UX2zFkxeP1nra+jIBpQ2RDbXsHlNZpng8DBpDcq/dcVPuhKjPavXlEH8DpM4JCJjT5Hdak15D1vMKIV7Zv3L13vz79NfjvWnTrZIYtCjYsl/REW5cqnLh3sOpGwEs18PiZ8dGN78dI4gQfrJpMemZ5zGh7xc7Z083BI4dU7Gml8XhiPGfAzn9Lx5LNZ3T8TF3DJwJ2IBzlbvLALhDClQZ2JQLINiAx6p3nSQ0P8lnxQz2R3qrfpwxmxnFZxm0ehbBsBvhjGLh7ewfz9Zokna/a1t14Hnyf8GDdj4I91Edcndnh4lEhXfzqCOQD4Z2K+WH1P6KHeI+F8siYP8Rn3zkHvuV4OxT8hw4Pb5qIr4Gk0kYnbG0c9dEjvLuC9TrY41mgmoeS6iYngDJAE9qGUmUMyfH0amRPDZa8A1JCAWPhBadyxHH5goQTQBMIQGJGwQwu9Q51LieAgfSUkJGQqBrBd7sddrTHnibsdzvsuZ4un5CQVAlSGAsK5lThSSUhYQKhwk/LGwoSlqnerzwvC+aloBQGpVk8/9WtcyTG3OBQU/soJUnLaz7Y9aHyIGHTWC8ieM82F9Z52J//LddOP2d5FfVNwtkmrRnKdS7HOI946HUxutWxq/nevh3lM0BUoPpxRFR147LCYfoHNYzbFQKaWjaeYu0VS5vEhZEYSExAAcpScDoe8Zk+42m/x/PhCU/THr88fajrneqG+UwJh90eHz98wLIsmOcTmBnLMjd1VmGkJDxzKXbynQjglJCkT1kPHaDqTVkchOqGHlASM0SBW5oN9zKgJ/B1vY6OdfkesI2q8sHuPVfeVhaqGvLj/fNxHbeyenqgMHR44Yb1f+4O9K1NbRdK1NLOfOcr0r1H+DMwEC38pQ3omyfO7aEfTP6zje8fK9DqYZzs0tbPswK9VyR5Cd/X3bjVqBMkBBftWd0cVSaSiapxC+6MaONSQ5nh9HZIRw2xo54g5EWN56Wls7aSA3fUnq5dXjMUBG2/c0kRv3wLyvFB0b4W2yBAGAoiq/y8jrxmDTldWjUs0frbGrorCh5l28jXK7MadYxpjPPohKRH+So3p8bf/PulOi8AY4wDtTaN+tnDZJyDK8anY5xvg6UV9k+Jv6/M5/8bgK+Helr8hLpWCVDVrlt98ZSXGs3NeO7mbgawZFNU693SbVejAnRm7dmw04DXYFSDeQJBXLmDwL+JQMcklhHJmx0rTLJGBVwmMVr8Xk9nfcH/V09nEpA+11xF0E7DoeS6kNpwedQArsb0f8be3w7c/XZjFiKUWdwohbuYAcmNzGbXwf2uRM02YiAH89U+OT63F750RHhYLwfU7LuUmW0HPOQ3XtMhc26p9zoxy4lyNXCWEo3nMjfN2Mm+/4cdZ/Fr1pfdj1/AXfy1BqVHQr+k+uoC+abueQDbf/+fN1R2b+C4zgPCrEKgXdegY0m5nkIHV+8T/vqUROYUwzDZasr7tcUGA7lXg4vZjOe0GuMC/M7gjzofe+O5L18q8CemCsPcISrdSwQ8cYOD/TPFCTj6G3QvAOAzgX7xfI1DXJcUocPv/YXeDn90xSoebScZ+g1l7Hgn5dPO8QADFyHWLwF7dTwGx3JGtHXIijWVAfcGZLwA/NnRru6CZetrqap0hdswVOJEVp/eTa28Ug/N7SHuYeja29PeFV8kLRgYzkdyxkV32V5xuhWoG6yBokqv44xwdvmF/hsO93INdddHUcw7PJE7bJK4c+CPDp19gt6Z0VDBJRrQGsBqbFc3uFJI7G8vj3wC+IP/FPqDu/m/cnsvcW22y1pmBnMBUarGbMVnDt7mha4vX56FLzA2pL/ySoztCa3fuVCcniO33Nz9urrjncBdf2yQvAYPj+u7NgQc5iNHaTvcdxXv+G3CVrfcVoL/vSP73Ya5fj5vlbON68/lOluz5yv+pOF+8FWX8VDtd2YTPPVQvaPcl3iiuys8U6TnyRFoRWUFzlfKIf0ar8fKbmvAZg9fKGf0WTcKeoi8t5C1x5hLhcu6Hw4jueXuaHpfRicDBbaQXPtJr1RJcjAioxrRs5ShO+0dH6vfKMmm/gxOGUwJCxincsLb8ordicHLhAWEbFULtKUIDc6gEyFN1dC2own7NGGfDzikCft5hwPtMC0TJkr1JLucUF1QUIhAlJGnjMwTCBMK7QDKKEgoICwMnArjVEoVm2eAeRZDG4PlEAUVRCN6ImChyEPeSkx8Huoit8rTz+77NdU+TuveI1xah9dCOVxo9kNxsa1LHILh1lcv+96CADfBpzBem/tW3xPXsnugNVYznlthY9QDNsILmrHXeGkyiTZwHiLSpsJyHQMAZhyPJ5SFsZ92eN4f8LJ/wunjr9jJhhhKGSUVPD8949fyUQzoMwozTssMWk6YC5AzB5htAwCJ/kPuOWcALIbzJPrTIs48Wa7DqxtaKW4sd2tOeRtit8jYyVO+3fB6Uti8CUZ1L+M4eUb7qNbZZI/eiE5aty14BbIV32/aX0+hwbq6ESF4/cb5gpR2eFj7tbUJ6G1hM//WYlrLgD8i/KUN6GfDH2N8foY+DMdkpXEZULWOSVwVpneeq8v2LC7byeL0mtqWtWM4tbwiMBm3vTGR1AjiT4QFZV8tV12+X4cjt9o3qB6yFYCVnHrxwGNZUTZSkq8+zfdg56ir4ly7/DzA+f6/VN5VTeOOi9ript4xjKb2e4cq/azbNVxbfd47qPn6g1tXAP5GwJdDPb15mmH9qsrC1M1bbzDwd56b23ltj8/LjRHtDYlhM4pf9+zK1KL9HHRucKnUXeCFQJpHLiBqboMXtI00rXl1Zzu19hSqhnSLlzTtyLmBqP/4oRyeBusFFo3uhmhzeM3Y1sd3v4+Gc4LNWYYL3bexVEv9Ny+EecO1kh1vLPRpxDhZl1J9rn+wMhgALQwqpRnX1YgOdgb0vlwP3FZbeRUTAfVZNjr1mvX+vcIfBY5h6OaXnwv6uX/Wk5dJBFtn+FjZyjvBboWfAHcFTI1j1nLRjS/Xhf6b24jhDej6q67bpTwyXNvRfUK9v1zj2P0yglvm1n73p54zfP8hICs0/5h92o0w1oCa1wuWf+PmK4q/uratXsUMAvg52gVeL8urCXXXUJ9Nx7v3tg6E+cMuygyAyReUAPolJvaZiVF3VcngZEY9jlBfy2/itt2jydQPJLkpcj+fWPf0eQKLRi9Dl8p1JmGTTU+6ZYQ7A/pVO/ZvRT8k9eisUtipO499ptzeeNyDY25JtxLoRN6izSF82niO/aOGhPa+UWw4koE17RyRIsN1TblW7zyvEzmzbkAubUPhsNGO4rE6b4/1NTuGzq61ao1S1dpxqSfJC1eDgKFZ0qu0aifM4lGMFH6SdVZ+X9VvVXlyfYY1ifPVJVqhi/vo5FkvAX+KcD+OkcX0YN2P5P1z9vvD3fbnbPY7BMI51H1N/vPv5z9/2z2xjt55PPVHDv0Gu6vzXVv2hT7w9Qv9W1XST5igm3G0QJ3pgQBKTSdBSeIymOQUet65Rmj5CUROH6oGdJRmqF4WvM1veH1jpPmImQhvIOyIkCkhp4SUsrl5JhCIs5x1p3oKnSZMC2Gas92FPpWpGuWcHJ5B2GOPBQmFCCVlnHLCCVThIcICwlwYcymVBtue4ATwCaRev1ICEoO4gErlKfQKTDOkJy+Lsft3YxgDf74x1qPlGpIpX3R+Qj2Cau8raJSQtj89HDbKdqykjwo5fVZWbu79gIylOaGCm3g64j/vCeMS3LwMPyLNClJP0M3zevWP9IQIg8y6Wb+1qGokhZctXHVSBGApKGnBQvWaydN8wpevb3j9+hVf396Q90847HZytW3GB57xlhnzXA3oS5nxdnwDwChy3QInRlEXGazeSqnu4S4JKSn3X8yIzlyQ3El0lIKS6sbYlERdRq5jrF9EdjRDNtb7PvXViUk+onmkgogyZPJMn9ZXNeL1zUC+ZUS/MbTrndAM9A+Fc3PXf1v3833BCz8jYXBAB/33Dbf93yv8pQ3otitHhN/mNu0Ct/mn8FP0rxgGxNUpXEI6Q5g+T92B6bPWb5pOOc9kRjdKBM7UKR87IIyWUhQY2CHJPhujEg/9U+V3olaWKohu2uJGG7999oqc2t0pg3J0ffh/+5MvZxkUjwDfa830a3MDhCFR2oJ1uw3+JA/JJolGTF3ljE6g8QB+h7AxFQbmwO30fcoV7dqaS/rsxtr3xxaD4JTZPWhV6U0t3euhnhY/nhodD5thuneFN6f2zX/XnZDF5RemM6ATatXV0J9CVEN4a2urRQw1Dic0JxOljo3b+VzrmcGq8ffTSXASa+ckwWUkpygEBs4NPju97ppHtq2XwL9Lq9QY8xHA71ecFBwOK8fIES+0znRHOMfcUZcmtLzVbdFuZMM83qgxWIskr0Z546UZIZ2BUg3ocGm0vKVeGdBOqPt8vjwPw4jhHPXPxng8ysNsVX9T6Meri97M1vL1RrBtg5PDJe8WGFGgbe3QjWl16bs5kKi5cV+4uWT2V4aDxyfDwvzT+pVGtblCfr7oQXeXl4nBNDCe25yFIKqOfisOVeN6WDOeDmq/dPTR95m+r4zng/C5GTuH/bIxpqsTxoZXU11rujtdyqD+19pSf1UhE+hBqMPjF0m1WmfnYV0Zco2v7MoesIRN58fdJ/feK4rdEOk7kS9CKZkoYvVQsVtrjQ0atE07ixsvcmtove6bQc1NqUVy4yk83+PZAs9zOJgJg743AHjA/w9Cz8cQNbbD1+k3xCrNGBXvwSEYgvBzhbb63bLrPNR125Vr5X8KFHQEA3N3IoP8Gouqm4aHtU6PG7ebGeIDrWtlMABKetuqb2U7/eEJVM+n9Js52rVaTQ6q88ZBGhZF46Eaq+HWleLwIPtsza3ud/XBzVe4OaTsxKhcarzfLTR6dQf6Dwj344jza+GKArZx2DXZH6n7Hfr73pofZYca6rqzIBrpHr5n+HG1V3z7aP3U/V4Oba3cGTreYOWxqxO71kbBPn3k4cO3rl2XDAS39if1/NC5NOvKxs3r0twAzDC675FQpsjzpidUFlfeffvqKc+Mgiyn0OWPsqspiX7Cn06XcaZKPRcG5jLjOANvmJGXhAWECcCJCLs8YZd32E97UM5IaQLJOk8zIe0TJqon0SfOmPY7THmPHRImythxthuhAMbCBTtMWJhQRMcxAziBMQOYCfUXBTMKTmXGsix1sxvqpjdKC1AInKhuiltYDOlkTaweRkmuyGuYje2f7TEL3uvOkNBLvA+pbqYXA8KigjOWkbAmV9CQWMS2KiYy1VcWuhF45LrqciB43tnJrvJ1y8PgmofdYq4VlttobyyNhnGRc7s/rKAbyGrG24/Syab8epWsMo11bqsrd5OL5C8BQEE9fb4wkApKLkiloKSC0zzj69tXvH59xZfXVxzyDnn/jCwHiZ7pGb/sEo7HI96Ob/j69hW7PKEsC5Z6oXnV4zKjlKW5V5fBTmI0R9KLoQpKSQ0wkUOrSFYASnVbj8p+I/2AM55b3w6GXbvDrfrVWIZ3atRGZaMtGctHNaO3xjo5Au5KNK2xlwNXZY82Ej/C2/WVDFv/jmEkH9W49RV6/pHX2b5z+Esb0H+Gf/FA7s8R5DXt9VSEoLsuSY3oVB2dsCI6f7pV81yDVEI6bj8bzMD1jRzFubo6hZK9O+akncVqSSsaFTGPut1NV2Pn25mUVQnGCOA8LzQM3xHD9kTxR4Z7q18xaT2DRu6XYjpfxqPB1/kRwBsBp2P8Pl7MjhuU9SmniAL4JTQSxsSwMEPbms1WSbfMDCysu99YD9baeJiAwdFGbwKwnP4TN2TMCSwn2nVjB4TxXCl+TfGOdn8PnDL8U+sDom0VxKoN1OIrU8sx4U1hxETdG3QE+jIDG9vFrUTZClXXJr3HPIxfAVC4GeNsY1R9Xp0mNyO5FLzAeSGR9EYXuKWzKXmmnzz6GSZ7sJ+/7dGV9wnfFf0q7ugqbZJVHEufXsaI1OjNrRwlI91BiPbiN2B4A31fp23A8NkLzCBsc0zmpMW5+Wm1sjRNNnsEUldE8UTtHc4tuM1JslPM+HJVB4dQcdaIHq3TrSMBdVqn4rmdQKfK6zSFo4Lt0xXEDRM+eLy7IfStvt0RXjbiR91g82D0/XMbK08adU6Sutgm6S1qHghcfdfseK/VbNDqi5kVAl8eGQjcJ0bz5qJ1txPotP7t2tOvzbvxiCvPGz8NFhYqTOtWsG60Cfx6c7moZbV6eNi1utxamwZtW/F7/TPbelNFLXkmx+aOrhOfv+cdNdrBa2XYxIPhICqeuXDgMZaFkVI9FUOs9xKyq5Ktrn6mNHfvAarw3HI4PDugqepyfRYPMkX6bC6L5FUX+V11ihr7MVCjuO/bRNI1DeZwT/u78U0PBMVLd+D0P0Roi+UHAzGCoY+n1dcfFf4gs+9PF95vzDZK+tFT+Y8a+n55rw21dM9aoPNLfhQGugGCnN6kGudiW7pUVf007ZBydePO6sY9TVAXwyRGKd3kyoXqKVACONf9/oXqie+CeiZ9Adst6mqETtOEtANyIuSJIOdiQQDSkUBPFb6U6mnz9LUgcUbiSs8T6ynaajLLlJGJsCuEkoEDCg4oOBJjTwX7VHBIBSdacOITljJXR9AMLKWA57m2keqFK5AT6XovOiWACoPlxD5RafTVe3bqeadz43onvxvCw8h1A9B3QdpXrJ2RSHRzeSpsKEe2ocOQHbWVz+ar+PdHPGON6n7vcC10I3FUH0ybyYButjF1Q1cGgZCJTF7jUoClgHPtzFIKvh6/4vOXL/jnb7/hkCZ83D+BkJCIsJsmHDLwtD/gsNtjN03IOSOJnpISQJyQEtU7z7mAU/M3AaAaxAvAcgVUTVPl/kKy8T3VdUmJQHYIqQ2412+SyBRtr/xYx0lb69VFXz3CwTguv/31T+7xj0eufyRnN6rXr/k/Tm/9dQ3oogAcL6X1RP+XDJ2CtAa6MD8H328mHIM67WdlWlolu2odBWM1QRVxJIhshStVKZQEOYvLEuiuRFV+9QANYfCADrUu8lcf6jCMNGDUXDeD1gyBKavPnAr3J8zCbsCGkFQ9xy5rhdr1X1BgdYER8ZtXOlmZqhhzeTCIP4e4Q19vzKGzoWcXNLqL98Nn/de7RxngCGWavWXx2rAF/hYTaN3kiLT1s8++0eZLQZityABcAmoD+E38sLF+dL4T6unotycglbrNuDcOu6JCPvU0oZJlD4N/d/N288T+KK9ps90v62qkFkUtzv51OtIwu8z3WFeX4iGWvyT3AC1JTqOT26XZ2tCg8KETRBRuOn8yIRw67ZY369M5Izp3aa4Nhpj8fOy+s4NBgVWc6fHLEL2IkciVW3ftalv6Ng3ivSGySH3qsr2UzgW7G2MRUnjR0+c+L2/3la97aztt/+yX7db3UfpVu2NV2xj7ltgbQtgMI8LRVRmpe741n6eHgyI1kjw9bvRDN1bYTmkbQ31H7HNCM1RbWfLYfBQ6OgWpo/5S4dZGdnmJEe7j9nNNjeirnnGAkZuXSvMq8xST2sJ0wqOfQ2EOdjTF8SGk37XfenzG2KAxPX3RTZD1uD+HjnbpO/Ktu+TD+If6OmQYOyGmGyHQLd6ia8rVpJztn0Eh8ksIz67ZaCdbWMgDyeFunde82bzNKjfH6EKg1cNwrGoUr+LrN38vO2T5UtfeGheUHMHZzBam6AmLyA+rNlBYHqbg84xASN8j4warKv3I7QvcDKtp5SpbL7c2RsJPBtLX4aaQXtvO8dx1oKnc3fBtfIeeuOoYKb/mmFEQ3R4zFxAS2Dbr1PvO46WI687dVJoG2jgew3DFuNsFUMfU5189juu6Mow2BPXeAK4iZtems8T+rV8xGzjwB4Q7MMu6BI8jbgybSv0b6n+0Dffkf79Re6Ckx7rtoX57tP2Pz7t7IRgx8reV9vjYr+mIZ3FWZwn4Co5beK17YevzDbBmYwMCnR1MJOMDx4zNKnYj/xYk5yaPxwbsYiPD0/36jW2iO2xq0AU0HVCvPsmVTiY9gU6o+k4GIRmvxrKht11ZQg0ez99L1QlATglTIkwpYcoJOU/IaQJzsv297aRoayBNVPU7CfWXI++QOGES/nMBY58mHLDDCQUzFSwLY+EFy7TgNM2Yd4vJQScuWOYTlsLi/Us3+3Kze+qR91LpavBKK30YWHe/+dTx23FVCp8W5r8P7P61gjEOcRb4PDxIs0o4mptnJ7DCcgHDDTcNb0eNE41oX423rwThdWKfrfIZ87m9GEn/7Xgqv8d0q/MapAOIeVXkxTCGcqvjhoKCjJI/AudkW1nDxP6OdIYq8xRH6yGcevJfvTtJdQvbAZFlXnCkIz6/vuL3T5/w4ekZb6cjaNphlzImTHihhM+7fTWg5x1yysgp1w2vAIgLwBlMBSWxnHhXz5/iik/ALKL3pCXZ+SCmUj1oyPULdi2mnEKvB6DcIaGeWw3j7HvTzTNJ0GQFvb9ch6CNRRgRv9Ydqo51xW35HBSr58Y/DHurx3BwxKuhzn5ucvd7NnR03uG7a0Ee9VUM/dweYMogfP0xwl/XgH5vMCHrxwqMjwUljNKGFZ1wjNhm/u3X86EXNLUuV8hFKqRwe6HXOKHG3ISyhXyUDgLfTjlxzpmqV6NE8cpkua/YXTJUd22yfNRdmw5ECsiH613IXOopk1LbkIjq3R6mu64ExvdR4FeZms5dEWa46LE2kpRhLAXEciJC4O53nxVpZELDUWrQYS4opf7a6Ug1El0xTG2ubY1rt54MuUsef+fqFo513ItndxrivRZWbif5AGeooAh+aIqfh/1HWtdNfZr+uw7AIC4U7Sdb972HT39G1Q5B8Qz7mnFjr6z2BQRDRwf7sAPJLWMFkIQyEVAOwNMCvJbqjp26MtyFNgyIkRmyVpMls0o8F+XXZlEmSe+pLoY7lKHU8vout7pZSy2t36R/yMpSHBX7WHdL6x29hrdUka19C5LFKjgnFTCTuGQrQFlQDXhJDCCS1pT37T9lVLUPmAqKGeDdGFpX6clNIGyuAdzpxG4ysWuqW2Pr5XiJo/PMk/SLbqPVSqgl3QyGL2Oi5E6QexOAxpDUoXydq78AACAASURBVIKId5PNXLCgnkCjAsMZJK7ZwaXubhfc2U7+Sh2lVOH+HPA9rvPPoyxWXD8etOase+Ogr2Obpw2RdRQirdsehzt5p0E29hvlzvINShtamjVL3+X3PMQQd7HjQfQTQ1wKoPIEIhDyVF2T+XmuAl8pMKM7E8Cp8Q2GVIT2one9jjYHvEFdV7mtP26tl7IaCtKecEb1UZB6mBbBk1S9gyTFs6XhXOURKiMCO3IpxncC6r3pX4Y93+akv79YUhIVq8IWvuf9IPgp0B2SvG2+1GFNjrRGKDzJZcGl/YnhWoYiNz+jxpsVV4EH3/2GmBfqE48KiLhv63Qr3KmkEH8GRqERJeADMRh6nLxpyVVa0/NBjgb4+P6GlAa6/fr70MmvTZJxWuVNcfN/cXD5+v10SdRnMHrOwyHhlse1oSTd0sYN94fQjZ/l93iiJWjLfM1DrMZvcJrZ6grD3XBYi6LwDACc4hhSmHQdhiVggcMxnmRhHZJfq4RqbDeBqHXORFU1VliuwNGZKHiCSDcMVZ4k2akUgW7Iizag2vjoIhIlO6uBPoPAmHG0fnQoFLuUwJywsOZPsSqHskl5LI2rjEXD41q+bLzadCXsxi8hRU8RNwRC3Y4wGh9apRyl4BUNuWQWvt9UNqr/vna/S+3n2J1r8p8FvcfNg9F4qHKt487sP1Kp+eD02SI3f9ywgb/8Z/fpDOfxOAjDb602rzZpIpfyDMrvjuj1OZ6iJ2Y3wmmsInXp2PGOgxq6PjWaF+jm5XVgNMuukvT0rXWW38iv9LR3AKSiPYuYYcUkVBfIdj2UGHEzAymDdlO97zhnPzCVd6JFVJlzdbWs5w+QkTgj04RdTtjnjEPOeE4ZLznjKe/wlDL2eYd9PiDnjMw7YMlASWAs4mC9YMYJ6Wt15X7ME4gyEiekQwLeqot1BovjtipXL1jEgRsjMWNXEp5KBmMClT1SKUhFzsWnGXkq2HHCPmW8UsLnZcGie9lTASc1KrKbnwwk3YAs+hQ5dMSqK1F2Ta/ic2xam646iDLOrNezofGAnmlYT5LIz/vp4UWNwEArAMoL93PRJlaUCzY36VMdfPITy9WlzysZoisCObZ1xfR3nehr0UMj/XeRQVbLzeOVQqjeFWraFd9HLYuNh44RuIrwpk9u/wWeeQvBKBSK/9ildqhN32lQ2povEgOxYIaYR+N1copHJiLo1QlgRiqSJhFQqncIajtIAEooREhMbdw5gVCvPFiOM1Ih5EKYpxO+vn3Fp9cv+MfrJ/zy8gEfnl8wlQn7AnzBDp8w4UAT9jSBpwMAwlIKljILn77IFCymK8hcZQGWzS1JhtLETNk0rHGy98d6hbmuTW9Ev0QEvZvwBAoqMpNdAUQX7Wz16bATF6Rurnrjvd9kyWDbbExWh99IH4FuOENnuMgmaAcsjC55nOHazdzFnSWjo07zcsl6fo7LuCLOaKHXmXSHUFZwuXV8ZTXfIvw0oGsgGJJ9P6HujxpW3GB7pi7dlmR3i8wUGOIBkW3boLAmjI60cLd4wveOQegUqi00RBQoWIK5R+53cnoGxserW8umCHGYzJCdz18akRYDNPv+6co37tURTQjLFxh2a0/r20rAlWOshjVCaycrdfL9SMD6RrLKYDE4uiAGh/EM+Lpn7hiDcdgIpjhfM4NGELWOQZFtqFqf2s6xPkNPq1ZGI954RmxTV2xghEbKBYPdfev7JxApP4f8WvBFOOBW62fQWaP6fLl9MnIgu7h2rUFk/+qPW3+UYmEdoExO1aZc0e4JmArwlYGUHUDdevFlubXJtktYcQvXLYw+GEqReDvlLXl0B6Q7bu6vzm7MvPaxd08qjK26HdIMYfOBn89c3RshrsOwJIyBQV3f8IJ4P6EFLp0yZCwXwglUh4PVgG54KywJqhysBVp/95jA8VvNOA1LM6ayW/jazXvFtbZmO5rhx2d0bL5n/gSneaeosH7yULdfE5C8op/1FHkBFTGeL9V4ToI7WQyX8W4fwdU9TB3YIb7HRaPnIZ1n4JzC0+OcVfxWPukXG6LxyG6N+PWhz9/DQ5tfzsWOk3jcThtZHf0N3xXORX4zmuCFbiwqnrGlrScf/BbpYDxf5J3XZXma7DdoeJC0XDWgd4E93dkcbsUpOpe84dzNT27t85td2jactXmlrT0atIHryRkRUxsWIYtbA640yP9J3RSh2DJQmTBODd96DOYF2hqKwDOa744eryRaefb0aDNsfN9aEqxYvcPPgya3blCcreNNArZ7ZzSurJs2vnmVFZBeW+ES15bRGIThpPbb8SIB728VYvTjXN3Cb5NuqItFeBBXGEnJJrkXPSlu8Pk6eT0Gni/wv34NX4NLBy4D6/u6j8c6VIr9LbCxvNoo+rxu7tSu5iGovgl+COPFjHrCmq3+tqWtziOj2Kwe5dgZ9Oq31oTIuwQ65dEtgMZ/JQCL3f9q695tnCKuGyA5tN/hm9A/FEl4T2Zt8rhirImdEZ0GGDRsKnf5fQj8kf8u/YVxuEw9qfvdxqlAw6vvF+ju8t5D5/NQS/h8X60Sh1c5OXpHqOS+3A+8reH3HMfvE/58EPtwjh9vKb5Z8LTXKuzoDcXX9bzFmN5rWaNvPaG6tGau0V8GfodCHLs0niX3OdbDQN2bp0ctp9/MuZV/9bUDsdbfaJH5UpfzPBC1STVGct1zn4A0ZVAiJIhbZAAgruJ9KqJ6XMQIBxAKMiXsCNinjMO0w9Nuh+dph5c0VQN63mGfd9ilvbQ5o3BCKZV3rmbwCuhCC+a3GaeXEzImzCXhxAmYAJrF8FeREwozFqom+CJyBTGwQ8KCSUzzE06Y8IQJp7RDSXvwrpaxlAVfpx3mZQHK0lzSK3sjxvQ6p+u8s/2e3OJsTCSfZ9FX4rrnjzVx8QkCEwrlrU2m6HXCmxMCHSoIjKbLRKENm2vXfzQdNLpvypNp1DlM4xmYAWg9sghZu06V+bDib/yDsvfW/40n6XknQM9KUePDlVEvrYnBgN4WHVaFjd42RB3q3rcjY0E294CVKnRcKcv0rYc7rDfsoLffhlrf7dpWRjsguCi/Xdfw6XTC17c3vH59xafXV+TdDrvnJ7xQxgF1Q82H3QEvuye87J9sCs7LjNNCKEtBSsmpBeQAirSGqeKlogcMZQO7nkhPzEAiFGlDvaWzjqPqWrf1UOOgY639VsnTumdX46JjavOn8ZNtqqrB3M+z6DOADQcMgpv/8b+WP5blGmWJennwXGXn+q6TWXmL/4vy1XaZOpFbvRwA75J6nGHC6IWxVv07A+/B62v4aUD/Gf68wbDTBhM6QH4RNVCXllxxLf+YSW5ZGU1wH69jRQbV3SCry1Q1SAPQO9frYXaqFM7dv25Qh5PmATuGRzWc22lHM3yLujdx3caV0BCQM2Ky7yxhWld/V4dvKspdX3XPbF0MG0j80dBXfy04P67gdU1E454xycNxee6PhKkNeZX31e9EwK91NzKODNDUGFwj3lq+O2Wup32E0SAx2jd+oWcM6g5jKm5NUXVxpq68aj3N+G9MjtqfzSCvJ40yKvPZCULC7Nk6taGRe36EK87izUJPUmlXKlvhfyIekD+9fkKuooiMjUcQDg6FS71r+OTcu1eF4KA/yNmNa5inK4NnRlUh7sW7IJYYTqyMv3r6qDhdPIxwkZ3naliXURwazr5T+IGo+N3Diin3ozUKI2l21CG34P2urr6Kc4GBcNWAzinDRS7eawbElh5g7De1bWzAUIPUVSAafDeGrT7g1QPwTO3eXOdNJGyW1B1L2g+eBgyKdJLSCihGwljYuyfcyh94LMIOd7ly9MT5JRC/HWm/st76YHtf0Xr4TKbz5Q6U3cFt/FVwbYdoMCUEY63GAaK81ee23cP0G04usJHreB1VPBdQ4xnI5TK+v5tDo42IV7YvBmr/Utf29wh+LfeKTriTPF5c8WlW4HwC8LG1fwPco3hxkUM02MkGucIsHliLnDzXTceeT/EVezcNrX9aNzXPF23jLmPhevNr7IZGz9VTTc3o+DVqGYxF1uC+Pbyuv5HIcrY+uDpfGgBEdPZO9OCC/k8eHm3L9cbzjbwPdKN3c3pHZvw4YvSvHK5gAHqe53sNww8f7ndEct+7LYNx4i5+CyRSVlj+4j64Mw1J2Q4GUUpyRSXAxHKncDUoF/HACTFeJ5qqSiEB+5Swo4QdTdhPezztDng+POF52uN5mvCUMg4pIyMjUdWBMJPJxowZhQvUP3tCwoyEiQtmLDilGTRX75+FgfRhB5oL8HkGM+PIwEnaPIOxgM3PV+2TBMoJxBmJEmjKyHNCzhlTyshTRl4mLMsCXgpKSkEmL8xuCJQ3q+XCx/lxo8i+tceBHMqjOTsaM1q/fheafk0lXm/Bt/ErPZ9wU+j4YO7ihEOjwEtfB9hmq7sPK/HyLKw/GEGK3F67qa51sjh3Ul30DcxOIlb9gG7sl0Mf1TZd30thLPOM49tXfP36Fa9fXnHY7/H89ISndADRhKf9Ab98+IjX4xve5iPSlwS8AXSqvPaSEpaUUJjB4tGXCoGwSGen6tiOCwpS3fiDApSEYptcKj5LpR778Ttb/Ab8XkV49ZS9kaczPM4u79YEW8XfN2da22J+wgbK+RneNfw0oP8Mf86wiW+2mRKhFzGdIt3U/uwOHOVe7CQGbwuMF5GVJFCDlALDqqQRxjYROCUgyz1FlFQt48CmdbnWwvrbjPTVSMi6w6s4p0XipciUf06Zq7bGSoTZ/blO9HF982kV8+PDgNC0+D7cq5Qg9zsooFeUrN77lw0gRoZDHcftAlsICtzt0NhRXQcujx1D8oKCzCHb4tjWELl8oWVuTTEI9IGA4xOQF2AR7s8byhUGouY+GC2OiIwBrIlLzOuZ7CICo8xlBjm9OlkZ7DfT6NoxJfFGn7v2MnQXpetYKZukPVURJvcPrdaPV8xq/xLalnIVfsV47pT466nspDK9n9jGTeJkrRhzxnDx4TJXfJvgkUrXbzZ8sgbOzeEVUhqvJ3Zf/Z9mE/nDFOlN+GBnQGeA5eS5bmBiwE4MA+5eN4dDAyAb630V3+cbZ9sypMb03whPXyM0f5Ppc25ObHYCwixYGbLOvW8Us/XNn4Lt57UfrtE3W3MlJrB1Uromjjo/VhSeeKt//POFQesXU4hzkZrmGcCXvn/h2tR+GS6OWiF2Otwv2k3auQF2v+lpkHFj21gs25qnNGOUx82z3ogOwBEYhW6Q3327uIRJkrm+D/m6yTeoZtU/nv6FJcPDcdgcGuUr5Dn2/mA9uvSx58jNsQhiqND4gDUvFtkb6sD0vB1MSaG/0YCOKEcYvAqtVtIhC3KvV+PNwXyVPqoeRMfuv4NyaIQnTO4ZBTemff+GqTQo102POIt/B/iXkE/vk+fQZ3o3ps7leuainkZB4w9RDYPJu1H3NFxL7ozncfYMXP07wKuPgtYXpogXnm+N1aQd/Rh7VnW1PmB5bMlh/L0aK67AU4PQcozH/OJ0pPDmPm4i3PO82y1hMES3hUfhuL8tik0egYBG+OyqoCvr0fZ/Kzngrxqu6E8/5l1y7n5vLfp82FplZ3guwK2PyC8MWdStj2Yke4f5NqChw37bZgevCg3Fn+ufawrTEhwBCHyR++t5CgA0TYG/AQOc5AR6qs/Va7dc/0aELHzMDgl7ZBwo45AnPE0HvBw+4FlOoe9B2EE9ckIMYwXqJabwAsYJBRlAwcL19Pvp9Qh6zqCvAKZqPJ8zkFJGSjOYZzAYJybMUu7C9R70GXUrWyHUk/MshriUkDiBUgaVgpQzpmmHZZ5RcgJPqbqVL6XRVDTPgbWPKfJifiDdy3lxI1D81VgOCm05lddGPDnNIjsODXu3bqRalTFCIiMZpPFdIfqmJXkBV/R1+u6ivipFJo3P5UGvs+c3VmO5LUOtShqAHtPcz4U8Hhwk2lfMbqy8xORciKsuX/tPsxDbnKvx9X1eFhyPJ7x9fcPb11cc355wOh5R9hMoA4fdDr+8fMTX4xFvpyOWMuO4nMClYJbT58l0t3IiIGXx1Fiqwz01oi+lnjwnqh79U6qbbBhytYJcPZsSiggBJvMI6JE14zHNMflRMowM4FvxqzJ4ZYBfJe90+HUKX97M2OMDj88vZNwgtj/DveGnAf1n+POFcwxtz/R0QW8zBMEZzeWuFz3trQaq1DNR1PIaHBJ3wZCk7FDxWM7yJDHc53r/TyYgJ3BKYKqnpvTI63YtjkB6Q7e6cF9qfrszVn0YJVdiAeDuTKkGIl8mr8v3CnFlRB69EC6EbyyY95JS4BGvEdSUWXFzI7hRdBVsGc/DfOqL9vNtkD8oobYKGuS9FPzcdqHt091aaP+HvXdbcyPX1QR/MEJSZtq11szsq77r93+p6avp7+vu6dl7r2U7UwoScwGABE8hpZS2y6vMqrSkCB7AE4gDAdie6RXo5XMAq92QJgCHZ+D4BvyH7U0dRyLdolpXIGS3nEH/qWKXal67DdIQUTJ2CVXcSUA9MyxOP+XmMRMrWl/bH1Vgsbmc1/HgnMcoupqwKmQtq/NfFYFm1GJ4iWq8tQghSkEU6SkYLumJfi8kY6+g8f0zAtu8BGRX6c2cVYGCmnV8d2r2i+3Bhm97qM5JMjG5x2b9ey5LxTEd5ra9Up5Hr0hHQ7j6sd7p2BiQ/ve17k3e23r7ne5Jt5wNe8Vt/Th8lS+zwZ0/KHNsXi/cxbgKHnsHVzZbS+7BOlqHN66Lr5A46LmKBifYMxJUm3E5wzhgge3F6vBwar6v5SeYwRQBeOWkldHAhBYorRWWNEeWMdmmcrqWrmISJ8QZ31xvayjnGp65/p3fo3k2SPdsYTu/ruaDnl+D/HoumTrTV210pHx3Z4UVtPOPqsoGNA7qtdSew9TuRDv4eJahgt0/L8c5+epldTRwUslcqjeFuaNRRIkeynqoBHyT/lZ9v3GecplyFvuLAJY+xuKXHQkzpvez5yuPwxSuGt6y7Ykh5yYpndkQMIHyPbSMEi8aioJI1mFkwPxMZPpJz237LvteY5sqvWPDsqULAGAJB32fMm1QwV/1l7Ho5YuLep05qCVdZpEMty+o90I7HSOX/m2+bo3U2e5RntcwzF9N7/cN2mVA8DoB9LXPP6rjr5gyfrn3MsHDA9futfe1/TDZ/zu5dNto8gyf4mfvozH8HZr7/oA0DboW27DOmobj9l5AW9KtbX9QHxHddQ+9uFseAEFQWYgSAibPXBZVakPcqhOJvDHoAWwu4ImwAFgQsIJwDCuOYcExrHgKBzyvJzytJzydXnAKC1YQFpZQkSlFpJQQ7ZMTEs6IvIHAYFN0g0BpAX8L4GcgXoAlMNYlgv7jDRQBJHHhvjEhkkWuYkRmbGq9ni3RbZxJjBCIAkIgLGHBui6IhxUpHQBmXJJ4iUucCi1q57wzPMhikiosjE+zg7k+lB+muxyL072iJhazNWs80N1tt8KFPXnFaHwahssfFh2vd2NyrMOVbIWH9nLS5tLe8HJkDTHIZejDMVCVt37yE5LyyFRZnrtPKIlZ8etUpppsrXIh7RPnyI12KZgT47JdcDmf8fr2hvP5jPPlgi0kJEo4rCvCuuD17QVvb6/49u0bvoav2ChoFNmAsLiwnCloWLlFl0lCSoQUIO7aUxC2HgkUxSI9JcYSguz9xEiUQAgAJQSpTsnjlkB2RDPb/vGEjPHh8AvApYaHs6eeDaIytJLZ4X+/HycoY5b2L2ENC9T1Z/nLb6rtI9JvBfpfMrmdPWPa/oz7qxUcVNKv7uXgpxGUmp+UQiICaKmU6RxMUEYlrxdsOuEtVcixbtr/zPFWvBt2s1gJ4nqIF3FFlDKMATkmCXykC5M8DQicbBGplo/RYqiyENJg6WtUWEwpZ1o3q5cldi97gb1JgxLnPHZo1/DsEybvSbM4ireVtdQSc+guUA4KaUmqH08O1JzJH7zD/TUQWORpHZyorp46jqjLnzWmMw7uxjSDN4vH7DuN54SAfIEg+AspysS5vZiJUf/+E4AtAP9cgbW+fZv3YgDMAjtbxpvQOixyKzHrjSSeVhknXbe2P4JabHK+WgMkUhfcgBGScwtgN0daNu8noBcEZytubqaKMp+W+TUTyNv8m+KcCFiUQVyC3hgX3MULOQPyEfXnWYDmnb8t6RV71cL3ANo7fXaPu+drybc/XG+083L2alBGCd7qvkBvkoZiga740b4nbpTn+pfqxssQN3W30zRou8f3o76+473POmv/hjQc3rbuTLw3JR+hM3bK3gb9AA9/dMo3u7neI7bI1HA6h9dOcMycO88ZjfaIm7l067I8LL+7vdmGtvBj5jbdbH1O++vgoQKzuY20NczMoGi3rSnjdi/QyPC8cEHDXmDxlQv9ZWcLQwaTqOpG7kOox0FbB5NTojdrfx/DeOWq1MbgSm5VW6K3tSnQmalvz+9+3uoOjHD8OI2sMm4pVStxyUHuYTdYXawxstEYwe1/lH2YFdiepCK4OXF71p3pU3embZeNRiIp11CEZe5gM+OvVug3u6RX0VvIZzU5usSs2IvVvivr93gDdvPG5dnBWZ2Qvl9D08sdo+XW9E/el8O4Oo4MJ5HPZzgJfkDr6qwpQ48zWj8Lif0+8UBb7ENZj+xon7zuLaSVPde+VLHUfV8ASHxo6vaAIre6Ix4n56kgZHeavrg9CGWIqqptEY7K+AbaJCHbbzz/2jpd28Ms7TnRV1UvGcr/sn/BRVFRtXA7ydGn732Of28AqHi5+rEt6164sxLq1uXv9L7U82e3phEaH9LitzZ9c7pSsDoDbqjNH9cdPpqdP7N2b4StecCj944myaTkqPrpJbjmPPa0B2qWiEb1tGX0L8uA9Dv7+v35kT9VobxF0LKoUY4a04SkHuzqsiEQDsuC4xpwXFc8Lys+hRWf1yd8Wp7wvDzhKTzhRCesy4olRRCLN5bEF0SOiGlD5A2JIyIuYGwAJ0QNcyeX9BfEFBC/AtvCCEvCcllAC4AzZWV/BEksdch5LhHVRYl+4YiNEyJYLd8rikcs0pcFYV2wxAUpBixLQFwCgirp2BTl/hJzO9+MitYsHnDsNQ8QacuEWAEefB9OPkoImUEOaq7+VkRZzjSpf9JqljEO6mr6XNPXI1w2a/saXzOpUtsb1jrTAbCudTarZL4drBaGIc4tQHnq9P7Urwm9bjKGYYJ+MnvR0t5ZJgGnTNdn2bTbjOcIpJ4kqnY5IW4R54tYob++vuL89oZLeEJcTliWBc/rik+nZ5yfP+PL8Qu+rV+wbRHncEFcFiSsSCFIWAVSN/Hqpl0U9QnEATEAC8QqnYmQQsKSAARGihL+koN4e6TA2ato0DLEzQWlfImiY3bqdT1aaLZ28vqs+RGC8RU6uO065lJ19aLibfpE1FYwzATjWC2e/KS2qmsfcqf6L5p+K9B/pzp1irg/YaLmhycWby1PQL6VaS6QSWOOd0pzx9z68VHC1CNHQ1rssCShRVIEsZZlgILcxlIlfnYbaURMW8aAz1bOAwKHheSE3ggt1momqCA5KImUYNT6QnAyDS5KRlMEZaU8UJTpmvcjkDCPPt9HjoytygblR22NaN1fIU3X/Uft4dH4uYGiZpwJEnfL7SFqlemtIDkQ8JmAyxMoXUDrCdmiMG85Km3p3iV/8SMsegEGogBXYap5HK/QWmQgRXHjJR1CJk6i7s28l7gWjlr2XIzLBZXgGnN4ySJy5u2bCVt/GUXfuZjrCHKhJmQ8FXKfc99DqNrL4mBHxxmeyuOI4uYz089VvxpivbIoJX3uXbkX+O9NXrXfkX/37MshAzjKAx07T91yk8nNv/Y3o9+MG7nBk4wON3rN2rXOeYbnnjQr9iNwXMWIoF8Xhef410yZiULNxFZ5qJzBAUVBnselxT1czl3/LNeX6jVaXvS8ItWv85dbL8H4/nwB8Ic9aGgMuxwAzujCChbVKuuFHQ8UObA9/O6seW5ooG9eiQ73ztXdKZwNBvo5a/EFqIHWVMHyHQB7V5U0/C7KZpU8errRr3s/P35phQYAEwR2nwBxsYDw+cfIpXkWgErCfK3f7hJHAdcp9PMZq61RydPtq4rgsOIm3Lgx7rDv5zX+pnt9S/1N1raOWZMZ9XD2XFWbYCh+8jitxUGMgUWVZgqaaUICGCe06BivIYAARBtblnjoa1i1qYKEiQiXqJbmtMIrz5ewiBv0zC+VeO7e2TU3gEdW4T0LPhOy8h/a17bzTRrNQYNOh2Xa/AAKX3hnml3QaNdHC5dHr6iraEFqYzN61H4/6L82MfHItDHtrq7vmn5Wu/966Z2zP8MNt+Lv75GuoDmf7aE23tPQSLndPOpquhfAqj1taFaX4Uv3vctK5T0Z3KP5HRXMxgYEWlYgRUXtcrmMA4uMI6B8ggESt8nrsuC0HvB8POL5eMJLWPFCAS+HEz4dnvC8nHAMBwQsIBZ36CklpMjYIiOmiA0bkirQGQmgBDmdExIipNENSb3dxQiEFEHHVUKlHwG8AYkJ6QhwJGArLHVEUkv0qEr0KOdwSkgsZ7BZ01IAaCH5WwNCFFfuzOo2OiURkQajZ9CT5YRM8DGld9oLtDQqFV4rxwEa5d2pxqoCKgXbXeKCwZYSUcV7K/s5Z3B3kaBNrQV6S4tO6+0qymUkdnjNt83I6PemPpBV+S+/5zpv5mEZNSGmYWPtcmkmhS2fdUGV5zZE3nCMcxjYoKS97LNt23A+n0WJ/vUVb+EJ5+WIJzqCsOK4Lvh0POLleMTz8QnnGHHeLoKDiBHVg9QGgUUCOyC7ZidKmYULBHBIAIvVubhzB1ISAYq9J2M7SI2nzBwdQBUfnQpn8P4JKspyfylDqvU8no1gKVceNc8/hJiSPr03fvvvdF/6rUD/K6dWmN8Rm39ChvQaSJnYoebT5yHkGMLmvj1QdoOc3Ubb7U6jXsk14r+PAMsEiZM4eGWK3N0zrQAAIABJREFUtm0xbori3g4sRncjfUhFt4SZb4uRXQuzUxRmAjGflMi+iU0IZuUTC2VrruBNWWixVp1Fyj0ngMUE9nK3+sGN1bqx8kr0Lo3q9QRFXekYgIpKqhkm6tbFHsy+6Ch/z4B1luc562D93QrHXlLiykSH1bnvhXwt82geHbISPdS/ASFkbE1/AigcgWMCJJoWQGupLq9V28+2f3WfLnr5ZQlixRlkLWcLdb9tGAAJIZZDG9gCSJDYWbqHijujZrHYT7M6XvLGLYyRrQ8dm+Av5RjvhCRuxOxSCgW9fAAQyU1MszLHQhVuqi4OUb+EJzJOgG2dNuublejiZrBaCR0DtUIdH5Ko+nYbYVv1wC/OER5pH1ZMVD8Ww7p0jqn6hHos4KI0z5/DDtb1CiVeP89tcv3Z9Qn9+wrm8XNqH34ore3GcoR+DF+MuPZ3p1H5a/UaXuXmd1uvfz7dTfXrGbrNt74LzUVgWTeBwCmJc5gUmvDXGh/MK80rhbpfHzaP7Xy2mKFl+/UtufpapU+1/+vxsqFkuP6VIGUAGCTXxwVXW2GSuspyqDZE327up+YhEm8hevmFnhPwNZStm48j+xFEOeaUsTUanJytk3RVn0kNyPVba3Tye5Zv1shOnraqa8/alKud0Rw6xyZw0fEnFVaQLYNZu4Qs/Gk/81qgZg2/hzdpL/jtVsHuX/lmx7WRKpU1reV1S7p61l3Y6H9Onw2BnGRszxAYzNqfwSLM8cWzMGmQrqBRacThHrPQSDpno+XrUcsMb3YIqgHEBGFa2ARXPfhFAa6rSgVuNSrJD7g4bLfuiODfAzY6YfzaBLLyPD+j0icbs1uOXXJfBmiR6n+AAHBqxK97x2Fbp9GTVWq9SFw/s/N54svltWiPehx/rxV2SY+Vv7f0o1TMh8lPf3Tas+b7nXbS7XtpmOzy5eB44Ob3D0sdjva0iX/el5uRGH35TFzcBtOVfPkYakkE6vPst+PbUkIh/6RcD3mtq4dtKL8pdZTTq2DjWt5SmgXMo5MSutsZdDqCgspTAkCBwQurAZHtYQYRY6GA47Li+fiEP56e8fnpCZ8OR7wAeFqOeDo84bSecAwrAgI4ETgFcLogJlGKidt2+Y8hFqZGx9npGsFgRAQEJN7EZuF0AL1G4YkY4EDgjQEsUi5boUs89ASxQL/whi1FRN6wsSjzReEnbtoFjiSepkhon6AylbgELGkROQwz2KLvmZzUiD8jZC38i5uCspv9oV7oiPEqdIU7YsTlIYCYBD70tFztldIu+KkMdLifxhtyjx5uGhyAeuUAa+m9Kzx6C0sZnpZoqnFgQTktbaGj0uk8dsDI+wmoGvGwTAncRxINa6ms0N0zTGjfqg47p40Wbg2DPG1qZakU5cRIiZEigykhcQBRwrZd8Pb2htfXb/j69QteDye8HZ6wLitOAA7hgJfjM/54/oTXt1fEFHFJG3gDEjFo26SNxNiQREZqcxoktjkig0m98jJAlGT/ggCWS/MJjBAATgEpJAQmsT4PENlKViirUh1U+J6Khskb3hGq/nxq59uVzxdhRvXKXBX5fWmrEmnYPsrbqaeRpQ/ll9XZr0S/JpxXPMI7L//8TrP0W4H+O0lyh6LFlvwl95jHGS2DQUBx2e6tz1VplWMLG3Mif1mflP/MRaPJQtx4KSFaCQXgbyKxQ57qhtkrFVkOAwb1QigMCP2u8+5Qt4PRK+5biZW5KMxKuFhkld6SMkVkwXhyynNTIjlxVlY6jtobpZyV68+PSFcVT4UxqbJxfokx7A1BFWhKxHz39IPalSGhsszgPjMha2vJFMFGDIVine0ZPtuPhxN4uYD+KUpwuVASXD5HtOsezJdbdC8z6e3IHIoBaPeOEChOgEpeW1X2iRhU+cjY5bYplWDEcvM6qiV7FfQS0k5290pqPe5crhOBY0JIokRPnBDCgrCshZgKMnahUpxr65ShyIRR7TK+xn+VnLxlQqybLcelN07dAsAPSx6NvKfMHXkUG2cCuKBLz2wgW5hnV7MODyK5PNzXb5jGrOs7lOzb9M/9++GzpoLZGAyf/8RT3s7Kh+oY4b6WSZm8n/4ebpJBas1iryRbK7rGiJMqPCDhF1JSS3RyY2PKc+dFxn/anuzWCNfPvQKSC+OZkfnI3dheRxiFSdRHORafMZG2T0zBTbrq7UzIBJP+GEl7plNlyMwheSKJJU5qn/rV2rHx1HiHDhEW5ZpVQeVW+YcnUovzrjNVlmnZvXJVng/c0+35O0h2KhYQ8mGkRWX+d6GmxvLcn11EOoftgTCjyzSfwk1Ek7wG6wggl4P7Z6PSmVKoj9165sxSwZe8Nud0Ze6n5e0C4K35b8zY0uv2zH77UBPX0PMs+UEnrVNpoiybIquK5VhWvCRzwGAEOcutPfLWWRJTPaq/82B5M0XVd0Bq1NWZ+eUFIQEXRIBMoELdkTzs4uzF3uWlZmFVcnePEu9NRl8Sxpf/ZmdE+7wlSTQWOppY6HXbg3pvTo92HBNa4sb0IG38E6mwx1KzVH+n96RH1+tgyV77/VFpOOfNwTfZE92TayT6PX3Y2csfuly7SwyKhzztUr1qNgyhg7Uii0ft2fs2Q75Qr7S9yVtyeDtSuwMq8hILrWTVBuCwLHg6HvH56QV/f/mMv798xh/HI15AOIaAJaxYlyMWWtTaMyGlCN4YKYkVuEkDOQBslz3MbwzLM3UOjYSEgCgAvDFwXIAzgxMBiyo93+wCrslG1bYHrJbnGzbesHFE4k1cyLPEY48pihU8i1dOhvBZtBDAK5aFkBzvzmBhrbw1up8Ts0LXf4fksTe4aGUBRAO6bH+RZ4pkVGyAg7OHo1rTttvGTemevWg3ar1RQh60wivc3Lwr5hqpHhDQxKS2dvzea9qtaCtphMlJh7nMecl+hTb/0cmGl5tlSxD61in981czmtECEqOc8gUMke+LnDMRkOzSDQdslw1nOuPb129Yw4o/ji94e7rglA7gxDgsC9bTE/7+6TNi3JAAXDgBZyBygimMU9g0sIMYMqakvDrJRRdWbXgiVn1JEKW5yX85idhEPVGZ0twMFItuWzvt1kOJgd7iYV0DrcskHVVBA4KPMtfAKJc0iJxTy4ZAZhRcluUyt0zwjOAab0xDV5T7am2Xato7Jb/T7em3Av2vnloCD/XPal91N3V+RmokCEZAVITsgLDMn1QITHPZnpVTtXUnjwS0FWHcUFZ+wAwpWRb2n1I/kdyiIj3I2f5jVsUbOSW6a6vqHlVtkJJO+Y5ktkBvpFaV8MtLXhRwZnXfzhB38OyU51wUSXb7SZmlUmsrQRljaPbvK4bLDpUr2H3CKFUE6qi4E6R176vfe+ucht/zjdAHCCqyk66nv9uMTfvuMB6Dd63hqpp6fNu23He/L2xP2b4K/d4qe1bjnicCvi7A0wGInBXodXwvW+vlZq1YHy5ina2UAC+hUaD3a4mVAEQWe/tOl8CUxKxEJCsxJvk1ihgoJiBEpCg3nsESC8z0XhmmIPiE9LIOqccLuc3JCCxK+GU9IKz+WNY+GxOsfS4MVSHgyjiVckagln0G9IvKeRboFOjyXknJPNEtWvvYpGO/U397g7LAhwG+aHBBZylRatiDp1wYUtyXFL8mtSRuXbbb0vLHRguiZ7SrJneIat7LNyjnvo+vxU1HefL81jRZJR9FOvgj+BoI70o9M3Vronb4hWurYWEGqd92UmW4WKKHElIlKwsZUMGP/BYcUxCMNdZscvM4o4zafE9wE2M6A13ytUNheO0ZwDefVdlBr+xM9QU9w8dekSUUS8vZlbVTQV4NrPWV9BhXgaFdPX8G8E3qy/zyyJKZpZXiim1CczRIpyjm+qz+ff3Qg0+zF4PnFSDzR3va3kfTAOZ6pixbTaPKEXLFxaKvuxFKFwv2FkeX7z2Z0tJj43HlBvohJqxojaYxvweDrcPyrNtaYLei909PqmievRLzM2SoqB8t7ZEQ339rNyG389AdbH25Ztt1y0nzECAXizjVGbrLm7L6PInojEbAeazlQdL7jKx0oKFaabb0odnl+qZ9b/1TTstdzJlfWuCOvLrp7B2SJuPdxCyo726BGLmm8t1SGySeTBpGAM7B7BGGftLd5+5+g9+/6AdVcGe6d7J9uhN27k7o3+nm9NhaJaDz2FC2q0MaH70sb2YXCm1WP25pysF5OoP52lKrZH1ztDlEM7eO01ApPqiH2sb0NJrJrEZ1OnzLvl4labKCL9cZKllBoSGUxiZXPzl8TkIJrRRwXBa8rEd8Pj7jb8+f8PeXP/DH8YhnAAfD0UxgDqJUi1ENADYkTu6kDCiHiP1ZeDpy6F+U6OKNisGveqaeINbnBwLOGqs9szaSNzIjcpJY69gQsYn1OyeNvS7W51uSP7GMF0UiiaZQ3LpzkMsAKYksahGeoRIRmUyOUHgBr5C03nQ8PTULsaU63bxz+3Dwu31dGUjVFdraeI8758qivV2quxtnb9OS+7Rne2WvDMJwHze8z5Sn1YKVMt2/dvNcNTYCp+6HQDDj5W5POfziiPjPQ0n156DJ/NPzKUYod3+awa3BPCwM2aUpICVGAEsMck6IccP5csa3b9/w7e0Nb/GCS4yIMWKlgMNhwefTM9LLBW/bGd/OrzinC9bLGzgE8BLAtAAU1YAgIVAQ2SYlJNXXEEWQyoSJksqIWVUlBEaAPlLbhgREKrgOdYxy85BmSnTpcL0+CzvdDGzF/NvYOa+3fn01S79c7LB1Jvh0N6zXcO1ZU34PuRjoNDhqB+V+u3q/P/1WoP9OVbJbO92Zb6k5o35qyoTmjQB5QW62PCf3nAbEsBGdRkkRQEHRlI2Vkk4VYmyTHlJ6MBMICwvKzUidgRx7j0ncUWdTgHw/C9WtJSfU9TSxQKvKeDsc7eA04sBPsNdUOgU5JxPYc1GeM8qhW4HQEo7jn93zTnnu3z+44DxB2lVDHch3nSUPC32+R3pw3PL6oPLn99poLDNzBHQW6P6iirfKfgnA+gy8RuD5GXx5A4UFvKzdsGYBNkQZLRbYWt9i8bhZFNRZYW8Tq/soMzwEccVl+6uMmdWNxGINr67ApCgXtJOEwKMYQBRl76YATlHaSSj7DVAXRKLmSSAsFIADSdgtDliZVYF+ACPptmAlJPux6Hgtmx6NH9rxFijh1nsnzoO1f8NeyLTljId7R8pXAUa4AIMlN6xkpxM8eo88rxlHe/xmv1U5Tqn8wSnQKSnpm8uj8GAZ9zYwdXhzBnqb/0riyfc/Y6JqYO4o++dMhfFsOJi87RhiRiH0BIWkSnSgXPTRPKY090r06sBymy//dtihG17WY97RASNkMf2t8H0B8FliKma9NBk/TwKvCr1gSh2CixAhjZulBLlNwvmG1M7oVue60ifZK4BeUHiG1s3AV7tp3iMro6zk1jiP19YjR6pZnnf9MSb6znq/VxrC4z0u1INRnDy7gmQMPZwCfJ4ymlT6OGenfnlaa9WABlcL1XDU6NfDXtbC0NAgg01uzY7eT/piW+zdPvMcMe8f4Z2x7QyA9+JKT3uPB7/OOzlbfZ5bIGjkV932MNSxujkl2N2FAquzCQGBETnKtxRg4YCkrh6qsgzc+oXgy01xb6AFQMLGMc8HM7BBLtgFZ75djYpHyV1fW5zWj8MUWJfvMYHYnYgo30RwbV+r6oGj/0+XfnpffsKcf0jbf7X0cQf9lDSqfvwZ5+ZRuD64X7dOCY2+U/1ids62B9huG+S+WxnKBtx1267SyjAB7mCU33rlH3ZgSGk5IQmEJRCOgfC0HPCynvD5+IQ/ji/44/SMz8cnPAVVKqeELSbEKBbel3gBmxU6JxFVJkAuCIvcslyqVaU66ScHcFayS4z0ZNTkG8BHBiKAE4POi7pXJ/AfR6TXN6SvoijfOKnr9ogEibue4KzR05at0c21OwAJY6MK9JAIFAlpSWK3RFRiopehqkjMbNvkD3RvhDKi+7Iwx5RcEwIS5fLe3We6V64C+zRaV/aeDP7Zx+Oe97BgNd3lSmbCnMaZb2igzlI8LhCKQcu9mN5qErlUFeFcmyNlD+pP6wcRq8FPU6td8tTolcxc1AEmMiCVN6JcOu+S7R39DwykLeJyPuO8XfAWN1Ggp4hDCDiuK56PJ2zxGU+vX3E8HnE4r1gQkEj2P6nnzchRJB4koygSWotxzhCZrbhzD8RSXpXpIjoRYyUkAgcCMYEszJtXeg/p1PfN2K7C29rROclrzqYCPk46F9H6TD7wDqgEr/yOgf4j0m8F+u80SVTJTv7Um5HcnydihoIjo3xqq3MKZnEuediXbQlT12iJ/FhcuI+HyghI/WUHnB5iYiTOQoCyKswzDJ4wo7o+7bMJgIMKzAhOzM5AiYHeUPAjhZPFY05JYkQzl9oSilv3LKjPJZsDhYdf2+aqLx4eb07yEYynI6JoEMO5uzgKszjeT9cha6Vig9fNK7b1UTaga5B6AnAiXfNn+FXYWjMuv/7MWwMK61XndS7a8+UU5fiyS3XJx/6yyulJ1tjxBFzOQFjlVqLlNwhJ27X+kO5XH3LBxiQsAC26Fx3345mJADA3HKm1Z/zcAnF1hgBKrC6DyiJhAhAJvHC552KgJOf/0hlSJRPcBkIKRWlEtEqj65rHUbYtQ1quebSyRA37KF9GnPGM599ybK68bffWpKPGkTGbY7iriufV3JOaPZh3v009jxijwmpWhf2+ql4PdkPGZ5KZHHMhf6Y4T6DIJayFx5HeCh3NsZQRsQPFX2Zq+tMNSIubOjyJemBavDpNe+8/anJn5d9BU/xdP/+jKX9VMXRLnkm53dTXuduKXcZwigZCFAsSFjdhZDG688UfW0umQLfv1cJ0+eDejfui2EbOd3+0cpWh7lR1CWBE4Di8mhV2jGx9YrjR6vMeddz+zIyktVEhPEMIntPk0jaZpTtgil7Sts3tMz7pq29ctVssNApLPJzL4UMVbr1YnVzA/ZpzIM/RaLxrBDD+bkhwmBraYPTqFgUujb77RdK2z+7fpriDw0C/ykJkegNVPyqyl82toLMutuVHSo37si1gDKXz3TwFHnfCHni4uo5iOjzy2F9+G+zNpkz2POQB17rLFrCTuMX7zeZtz5WRklMqHPN3JvTuwL5hLY26aWjND+UAlWSEUd1oyJirG/7RyqxZHPN4IfjT82wVwDr2NX2rtJcLmyFrJpXLyVqqEChO4G1r053fFW/p23dd7/tBPW72Q2O0bXth691piv1uPEfbNdgu8L2886ZvSu8gJ+ZV3AvAo+OO++F/tN2f3fZfNT26Xit5lH9ulX+nyaHui6QRXTihmeob4Tv4omX4Zm3P0rVsDbkxnZIRzm6Ndwa0S1/JDbgxV9uOX0ODKExikaknml8T3mAIQZRLYBWZqOX1IlabSyCsYcXTesSn4wmfjk94OZzwvB7xFI44hgVLkPMvJjnvIkdsfEGEWZ4LDS6qrBWAKLaYkyrojF4LMIMgcCgXbgEZH4sxzgxcCv/Aq9TPCUgISAcgpgtiUuv3dEHkTdy5QxXnECV/ShGbfoo794TFWlU5Ei0ALeoFLETwokpMkF50drSc8WiOJuN2jhvyvV9cDRXCbRalRzxr16RMZzjyoa4dPX03oP9kOQ3W7XT/kAPWNs+g9YeCLV/3bZIvQmS60fMkDeLgFpF4nrJJZLM5ZQwKz+qYAHPrPQ4+f3vKc9HxfVS9r/L5rHk9eLq/ocMz/Vp4UzbaVT+zcp7cCtFxFDfvOpJJwje8Xc745/lV8MjhiOMhgPiAY1jwvJ7wcjjh0+GEL4cDjssi8jMNCxECcA4KSxI6PTAAYjU+CmJ7FcRQKXljpsBqD5UQAiEhiCdTU6KTTUm5IG8XBqp9yAWXzs7QKnZ6PWklP/cr0N7mS0xah993RH7eyxe/fy1UXmHnCuap25ydsaj1H7/T3em3Av13+tdLjrisnyu2V+WexQIic5fuCNKa+NxjVOp4d5WsiVAOUv1OSnRRPrT0xlfiEocHnK1IBd3uHOJ6Gtrx5t1VyjeNe2IHpgfUvjjiy2JlmEKIlEjIz/yhm8mUVuxQv5/CnoVKQ8rQZfpAZN82ZQRy+7KexObbIw1+QOqU56M2r7hMrbP2yRMDQZTnrVC8ZKRsVW4xvpPdMFblNlMAmat1i7v1+aBeDQjgpFbkkrdVoHNoVpgpzyvBtjJnRBJTmBhIC4olpF5QMY8OJQhQ1RUAAqdvb7GdyHoRnGHCWGZtS2OwCz7RuD2bmysC7AKB2Uqyjpmtw6T4hxPpZdHU7KTMwZWue4KPYvnOjcNuz2x5IW2udoTnasJLfiYM13UrUHhvGuABUgWjh4FG23RWB7cZ+zYk5pnHawD92yfgf/1DiFNzXOAZixz3PoFjlFAXbLjdjpICO1dN2zyMxnYA4uy5PfsOKOaHJWa8i8n+u/tOAP5zcjb7NL9K/cDY1QWnIEyPr6SgBbXg1vvW2TLD4BN37ZSV50lf+T1Yr13k9xOAqI3dPoN+Z3CsX//Uz0+GQynvAxCDY+lSHYNYK2CPu+y3w1M5X6GBgmuiAogBUaQDhl2Nee665BVcbEypnpvkmFIr/En6sxvDVzd/tux/mWdzaNx9mYz37mWnveejhiftdfC09Xvczs33+mkR5gIgiUln7rJbRS0z63npWhvR7YHymqq7w3W+FmyXtUOjXUx1K9OOTYNjqC3A0/HLIE9pLGuipmPs4ub70VM7LzdQrSNBUD9Y7YNm/Hm6pIZjNwITgCAUAPhc6iPkL0nRBOkesxBYkQufZCGxiAgxCT0UEOAvHCR3q1GmXBurusfuDBflw0ILmBK2FPW3KAgiemHvcNRHJFI7FgF1YRsDbt7Zs51t/eFpF9UMOrerQG+LP0A7Wt339v3Bpj8k3Q3DDTTQXhq52X5P29990f0rpO+0wHarHZ2NLf4ePL+13WtFPmpZtH0c1XkP7ri1yC5NdENZf+bRZFA8L2/0xs0XlnQLdxbqrk0lnxAYFALCErCuActhwbIQlmXBMax4Xk/4fDri5XDAUzhgxQKKBN4YkRIYG7YYscUNW7pAVdRgpbtFOb8ACMLPqLvnxCy8C4nVOUkQclX4kyp0hFIMKMFXGAl8IGCLwBrAm9xb5//8Ao6MCBYYksCz8SbW5rioJbpaoyeJgR45Za+aKfPqXMY8MGghBA4afYrViAIol4N1Cm2ulGcpSnSXd8q70/g5d1+uXzz11XG7xIwWv88itbuPa5cgrOqOPrwz7aKhWxDNtXwO7l2ifL8Ga63nyIwH+Ag8/1gdVWzzwuDCZC1ZKW60Y1aiU2asmcVYhBHkoo3S2RYbHZAiwl8XS/S37YJ/vn7Dy3rAt+MJT7SCKYIYOISAp/WI5+MTntcjDssBHEUeywsj8KIu4hNCjoMuMdCFYpfLLcIuJjARQiBRpiMpmyix0UUELO7myWAm483pxk01GV/qFdqA4/st5UVCDR9TizYyLrml7Xe+Gev5qVrEv63V70+/Fei/0zT9umzRjIlXKlNv3CGEfDCIko8GF8eMuRxJgZpHuwNG0nQyIY7d8GKVixfXKaVCOdhKtS121jdKMQXtq9F01eFeCYca4qHB5tmNMtvZ6n545bkX3rQ0lVeA78UxHxCMlaKvzXivkKWqS4lKZSBbYqiF1FTRY1qxhYeaz1YS5t5VUz3p37s3oGea31vWEQO2oFVxbn9l5XjlrOSlYHlr7w6icQ61tXhYAF5FwWzrzxSw5g2iGaayN41TC3U/yeKelzhboFQswG0te8GB39uZcUUzDwxTGrMppUnXhcZSN0szYsKiZZgZHFQ5a/UQ5DKCd2Ofr3EKEZYMFyg+4GZtlBAbbo0x9KJMarZ3g5QYgzXVhu0wbNNzf54ga9HiR54VhUh38Yn0t7WVXadWyKpJezevm3dsYwcG/89/AP/2OeNn+l//Cb3RIErzlIT4T1Hjn6eqzhxsQ4nTcoeJqzHu4J4NYs7eZmj7NCk/Sz2yu57c3DyeHqyjRbezbC1arRbxHWkCdo31m3PWHuXzFMiW2kyF0ar2nfMAk60gm3PYA1SdnbO1wvWA+LHIIF8bGK6q5y+CP+jF4Spm4CvVyvXg2vOp4vT8+jLEaG/8hULJU37pWKolTBkT61IzRv5CmMMzXHWhpkX4E8R1vQfdu2evtnK7N2uYJpIYX/NgrNqMV/YPdV9cuRvmuCpO9Zx0+QqdZCdVObP6FnPceV9/2x4gNC3sYismMFQguN+1cKDc16jXbzVOAzPpyrIrt9xMnm87wzqAqWk0D4Ebi4JiLTTIoGhufmce3yMobOGvgOfxWm2Ba5qatUzN2Od8tj380mf/kuqlstM18+LEbOF+rG1xEmvUrHgBsepkYGvr/nJmCz3mnjT7k8jls/KM/TmygiN84H/79bRnQXLvmZbb6/Hjzakrc63fVx+8s/1Hyj5U+IGyjyZ+EHbgbvivXub+nSTN9sW9Y9eUn9EPAKaH0E103iBNcRTVv/sfPWjtjw+jd/bz7ILc1je60FfRB5NGPc1AzfNp/v5dkckYPDV4PrRdaU/lnE72KRdZA5Z1xeGw4HBYcTwdsC4Bh3XFKRzUAv0Zz8cTDsuKkAjYoiiqKYKdS/SYJMI4hyRgsSi7QggSe5gBhoSmSkga2i5k+Cj7pA/5jJTj08L+iPEPXxLSCuDC4AMJ780Sr5yTxDuP6QLmDSmJBXpMEVvaND56RAKrc7ikcc5T5gsMCpsDCgyTo1IgcSEP8zbKbpw5fyVu3HY/qKTLKfOLbsabuitlnv+XbA7uS9R9sR/yN+/eCNdNGB7241mSDzVQVTlskzM9tA+SZ860/kqg1ROvBWq+0Wr3HfT2XqJM6d6Zajgq+posAC0cfVq+57CRpp9AUaADQOKEJZGESEgETgtiSAgx4nw54x9fv+DzesLb8YwLDoh0RABwWFY8HY/49PyM5/OeO7zzAAAgAElEQVQTnl9PQIpIWwQnMWii7Ok0IRAhkdDvorwXqj3p3gwhyMVZ649o0IE08hxr842GXWncsPul6sfMD6L/za5e/+6WZOUbmIZZ/QU4nrzbO2r9WZ+Xu+6Z38rzu9NvBfrv9NdJgnVhyjxSRNwTrtQLKCpC2qyabidUTHYMQrZ2ZGZVwhQr9EzRZVMD+VMH7aglT4V5tQNDiEEydR9ycJNKSUOlnobZsZtk9kdmdZnracvsJS8BGxADbT2eWPTt3HFbcJyu1UFjmG5quuWUbjgVb04//oAjEyxSvU88UcfuloZsIUIIi6y/xlU7mfIcBPzxGbhcxC3WsgLbW9mDyvixQpHb8uMaimV7yRbKBqPFCQKpKNqdgrQwAo4aqnCB1c0Spx0A/pGyrgsQoSsdCFh0X7yK8nwhgNTNGVZb1rqP6m51XEoCq9WU2zujpWU5vDKNE7IFJiuusL6YRWq3lMrNUqnF71mfPJM2W48ftU+tneupd2M7y7iTgRkpJZB3u6/4LkfJ+LfPoLf/AP9vBkf1FmKhLFKq6m8NGzORnp85fPxxw/WLphvxpLlu//turl8n5WXLsHjdIpRIhanKgckSmJPsu+xBoxEwdIrzZr3pj/zviFF8F/DurMy8HQNf9MeL4B5itQJnC1lj/WraZtTCjKovlmgAs/XV4XNtQ4aQK90UgcGfSJTgg5tAXpEu/SjNZP13tiy/sod3CcKdd7eU/6h08/xTGacdXJqnx9PUVRte4DCuqzeIVBpCd0u+lERBmX+lkZtLb7VVt2uq18zW4GVaQB8RarqHUMM9GkNCVUffRqkb2icA+WKdsBSTcZ7NWTfO9nljPVeVF8BVRudaumG9yb79h+b9A0BxWpQcAiBALNsydUhYlNZLnPTZgkBA5KjzGDIO5GpsSjxCkLTDnMTiXPEQM7Bl/Kukl/ZnIcrkZwQB4W+a4R99B/fw7mi6GjL13eP/Q9mHQceafQjArbWPJID+osQU3bMomvL3Fn+k7L90urYWGz7znvqvjrvnc1u47N3dE389y27VH7Ro7r28cUux4Xl6pbAf7tFnN+WORhrSS7tAXaExGOr6CYDIYMK6YlXF+fHpiKfTEafDitN6xDGseFpP+LQ84elwwhoCiBnbtolHPLqAsenZGBE5avxhgJaAJRAWFnfMIhMlxC3pWbwhpUWUXcUlFSwmOim/wzBFXdLTWGWjZ7EYBwCsQPqaEBlIiOAkfzFpDPQkSnL5b0OiKBfoiHN8ZahyMFMPrDRelkElGa8ApER5u3o2g/LFO7JaxJuYjvxD2+vdyaiaEiLQPb4hTRZddbaYd67ySkijdqFfqbMGuc7X0Qe3p7vY2XddAPs1Drpr42Bsdb53M+gWM8RTA5G4Rl9s3wKcGBtHtQYnbLQhQO6ZfHt7xSUQvh6e8HZ6wZmOiOuGZVlwWFacnp7wCQmfzt/w/PoVcbvgEi4aXsLJmtWggOzyct6bsk9t75nxY2CIl1OVjWSrcxTpB9+4H7t8NHhvX8gu1DbpygWabPX9w3DED0VGf5n0CyvQb10M15FjkT2OBGL/YouOuy+TA6Q45v7uN1TsEDPhajUBTkjsEan/nZOnUFs3pfreXpkr6VUVdoHgL0Rml9TaRu+kPNsYwt9+m+Hd7AJYlS6cGBRTUcIwSkgdy8sqWOekrpe8hbpvpQiDEgFEShgGSL+WgBrLt8xXgZxd2+z+KxZvo57q3qkekeuMfZIvUKd8ak0OnjzVE/KgLePX9IDAG67oEU/aPhvQiNWct27BR43M6M0mmbBYfrxfaiYWOBOmjNwXo6TIbtkiK4ltzJnI9cqssEs5izsu+2gRpfVS3KnLfrPrHRG8BIBX4PKKojx39WV/ZB5g994YMFZlUmXRDWWIyjjClNJ+k3nqsWpuQNj8M7q2AZx0rI4BdFbF/CJK6wQqXpLNbTHbHpE/AYHrLoLUtai5IW4XisdvTf/sOYdSL1NxfTu6EOSe9Tu6vCZjLpux4VwSDby5ASWGeUC88vBzpBCXKthRworfPE6abY+qekbVU4+fDMUB5cv/+Afwf32SUBYpgSODPyXwlsRl+7+zU54XACqbWCrtsPu3rL92f1/riAFbw96Xq1fHqJYq225qaQU35w+TBiOk22fJcPgY6KZVaUAc0TM9+rzhDLmaTJFN1eyXFWAbRfdz2hRnKSNKQPH0oWvJ0zcZcWid2W27X8Nu3WQg3Pqq1n3zHu6xn0u7YOeO5HLsugf2PA9Duc1NX1Esz60BZn9XwO0bG6fm4tRwzkg9erS4BsgSrvwJueTFLp/RmaYEd3g/U1G5v6WN8rW2eC+KzjKmFV7kdtw92B3Gbb6O1uO9G44xpaumqdlcUxzlKiEXAgmUhztTro6uYLTz2FSZjz3frq+H3bwM9rx3g54vkPm+NIeM1eFYB3Jro9BDgMWhK3ChLzTqX8afTiVP5V3eDezHqG5n2G7Xfc5jVBfncf4Z7hs+L2NX8SyDtXmVdxygodGR0FJAUndtPcKA3B8kqPtVZKsVubBslimsLKeONgt9y65PEjrDXSd0FzW46Re7eDiJjV9ywOdYPb5DTZ6WvvKDMstX/W7fz9IEB+TqDK7Z4b5T/17T1M7tKHM7Jvc09GC6t+oHZSTZrebk7W7Tj14wZzSXj95TlsvE/uD02Ih/73TDeEzP+FubCA8M+wPztVd0thQbUnDabTsfp8NCA9x5BaZBFdZWRau1eajFtaOGRuf7nXDJRpRvRt/An0LUmkuDiNUuoaahTdHLxCKLWEn/ApbDisPphJfTM16eTqpAP+C0HHAKBzyHo1ifE8CIekecwTiDxRw7n39EC0IgBCxYKCDQgkABHBgpAhERGzPOKeGNE0RqmrCAEBIhhISguE8pRsDCreg5ZKLQeAD4LBKS7ZAQzwkRCRfasNGGLW3Y+IwtnRH5Ak4XMEcQGAu49EPDZSa91JsSI6QSVdo+UtDYywFiYW4GICqLEDZOv/vwm3kuWefAzdnonLDzdkpeNwRRTQ7XWasMJIpJM4DKN/s90VWXaGl5ixdtmaSLrkwFwzvPIWO2BvQeAHc5YdRHV8Y94GGGSWrh9grNUPiXDIuPue2HU3KK0jbDXUajxh42dlyvt+6z7Ps9S/QZWs0XKSBrtwLGuqm0KkEvJCv+yLwRuTpAFbtKOiicGJwStiDeGOmygcIZ2+WMt+2CM294C4zTKt4pjnzA8+GEz4cTPh+esC1vOIc3XIjBQb2YLhb+QX4HJKRIMvDqgj4sC4AIRhCMlPk79ZTKpkA34yD5bhdk8zh7GXnHTzWzx80X4p6Fb/bKSI9uMtF67+0vVlZYh+ee387+Wb/49IhwoXkty96ZPDL2afJOL3vPgHXPWgxkT7kyIvUAtPth3HaXi/lGOG9Pv7ACHbhtcGfJn2rvIWP3iKlfJQ0OOvJvjRCbEJYPJb+7PUiG2Ny7ihi1cgsyteXfmeBUCbA6QyGKQFrFGrICPYVQhH4aH128TgeJsQEZk625rSaCmQCu2itrsqBtAIkR4wao0lyU5xCX7lmoRyXeTq4nyWGAWG6AZYbZDkYhMqMvuWh9ZrXOEKXPLKlFfDSFEHvFEKsCskmZ8OmwqRt3d2pfSzkGiyfiIJcH8klVrKAzsbBbdbsWBmD61NEzbq21wnA7ZI1qsvHwSvQKXTTr8Goi/b+NrUQ1XLPEEqPb6shxYFAUOPLSdboiZmvxJFMqa92PTwjgsIAXiXNOgcDrAixL5bKdQpC451FYGsSzKt5tzGwcGaQ3k8tIKGzBXH/J/hHFvirm82UXhlyb5LKWbdx1T/V43Cmvij9PyffVEZREwJGAk7QNUI7dTonBCdhyWbjlr0p2zZPXj7k0Zjfewea4zI8QwUrEmn7drDptPhEQrW+qpCt7funRbl6iXG5DtvE3tV4ZfxmHQojMiCH95S5F+XVkeKU6YRxBZw8yHa99LUp0w5eeuK03Vd4xXLrdk8mKvQznsHY+2V8Enze57JQSwCfw9g8gxpInw+NqJTtD4TtQw1zt3XYsGftIjUvHWkVQrnz0bP7z9jSC697KxrMybm90jkwQ6d008nv74eOMG+4ZAMLmft2yEpgWsHnGcOe40ziicF9c1wdM5n3wbNglBjl4hsPFWjgPcfG6w4oLK5rN6C9/lnwVgRm+EPDZoCMlR6hpzK3ZQXdLt4OeaXaeFbxvuJKzGzhxF8IJKvzSYXPnMGVhkKNk9Iy1C2heucB2GSL/Bqp49H7Pd5yzfe7RQzz5PqhvVPfuGnblh/lHZcm1PWjf0+iZviBHx0pKs/5OmqxzN+c1tSdNWa55/PMLbvYfz7tJTX/QwsFKBkie4nLd1hbXBbmpbmeO6nPQPezK+7PBH5AzqNt9Nmy+T+XW3+Ao0Z1s1V29/OX7pPtsQIcYYPLTxrjERCf3htng8N1hRE55ewlP5OddlOgAY6Wlgi/pRcwAi7eYSn3gTMtIPEZWD7CMxOYdRL2HVGPk+ueP5GtHu8clfl0yylZo6TRffwnvvtPGtdSslXqDDdLgnYfha5+909lye37CJnrQ1gyGe9MeTm6bmLRzJ90h09v381adNhMhPdB3gt/Dd5W+u227tN0nvm08d8/Sq4UbRPTe4i0fqXXeXP7GPs7SI2UfSkWx1G3PfEb5500/r8JNDu+MiEAa28fckrIRTgYWPXCGYMegdTAC2eKXcxvox2VAt/SJqyVZICORCyysuFN8qZjyuagaxHNgDAG8ELCSfB4BrAFhDVhPRzw9PePl5RP+9vSC07riaVlxDAccQ8BKC1YEEDESbdhIY4anN5U9SIxwQsASDlhwQMCCQCtMfhJZ4pG/ccQbv+Ebn/ENGwJL2ZUYS0g4pgVrAFZ16Z7NNNhctRNSYmxgbOeEtBLSJSIeGdshYjtvuOCCc5C/yyYK9BTPMK9dCycc1C4hMbIBU2JGSmrJygxK5qZbxjgRIQVGIBJ9qpGRhjaSGULIuU9J6yEXXI8ADpz7VNGo3Z7whC+VZ9U+aniknXUkcIohVL647A0RqiPbVLqZSSl0VsXaNHxO5nfavWSVezpogO+q7dDT+CGVYRjltL0yynMzfm1pLjCIVg3xar+V1syezezoUffm7j+AEO2CiT3z8inFPQVF2mVcVf6iH0VCWT6zI7eQl1YrFfj0QikRg5Ksa7sUEJwSeUCFZEls4EKK5rjnJJdGKSVsRDhsESttSJcNb9sZrxTx9cCgA2EJC1Ze8LKt+GM94XU54bIc8RaO2FbxJkFYsRAjYUOWb1IQz+zKl4dQRpZpE5MjZnCifJnIu3lPYCxMSImQpKJ++Vc91k+btswKaTknr83rBYIvWprcLu2yr0hbJ1fe1oPtpXyM+vO0mesRZVwtmGZl+Bjt3rCnPZW4mNg3jXKuv8o/yjtNE1qvep93BeYK77Lap5P4A+ijX1+BPqNHrg2eIYDxS/1oK/lpFOt3T8OR6IjjRxjUQWvvqo/7/JXij9xn047/WU6AEpMZ7hk1eW0za/PcV+YzO3CNUDH0Yq7aS/wds160m3aUiRjoeykveIv79egtTaFo3OOTqr82fjsEWD4UPKLnSWbXRkUI+qPf/e5wcos0R9+1Vwp3FpQP65ikvSy3LD+XZ1xVf4yZdctV6K6t/9HrWZnhmVfPhUHqloxrY7a30As77UtWmLjY4xpnq+wnQol/vgB/OwL/O4EQweSlgC116Jh0t7/JM7Zc3ApJ55r9a6VtD+heqvvczFLOm+rHgYATgLVWqICgGnOo0sAs5MQSPFtxe4ln2yyZ8JWa5UT6f8hDUzs4oGorsNY1xEdtHwH0wokJfBDiscYLTTlHjNVtOXzj6m3pvFK/A8WKVjcv88MB7AU3yHJg112alJWGMslmbdnFpv/xD4l5zgn4Pz/JBSjWd39ArNC7xPPPbmxHY7mHORrYh4TiaB4m1dGwgtvTwyTRHg5szvwh7vsomuTO5PBM80AfD+aCGSJ8DWXf+D1ZSSd93eOfPSy3JK5Bbuskt0Mr0mFAh1V728OPvP/ZK3W4XAnj6h+qKxwJt21/Bjg4BrQEK04hC0sjcBEUn+TLPb54i5zcGZhh5H6smuLjPWkHgQrdh3PlCnW0nv1zbZKtD4M52k3XF880hymQUTDp1YI0eTHM2545g8u93T7cK/9gqlCS9p2FPm0trpm5eKNpUrXsZGE27fBgyts1fw1/c/UxzjIZSz9s3eVRbvJz9ZV9PdP2qalHOsvutX3UZF1xz98vFx7jjfzKLu6VgS1DnxTd6RlPutJ07wl3FrIgyuba/mW4YWoJnDGw3aubt2l73AxQ4DDtoZDJEXZbatfD4N10znYS1TOfv0/W073UgMi39/qA/XczlP6eNKXR9h+X/XIHBE7Qf096RP8M6HkxgHt4b2JQGsB9/ZaCtzSyX74rfmt9I9z+jsS3wn5l8TyY/NDzDAcN+3kFAJ7Mrcm8HpFFtvz7BJaszB3BPoJhTzbTNunSFOe3ZweNDhcXz1jhYgJIY8mxef9bFizLgnVdcTgccDqc8HQ4yqcp0OmAAwUsCFhgtuBQJT0hUAItCcRB/rAghAVB+50SkEJCjIxz3HC+vIoS7XzGW3zDW7poqJOgHl9WLAEITBrLuLAMFoOZk/nAFFfw6aIxzS+MuCZEElfyEfK5pYjE9qdlvZc4lQExc5GvqmKczECBHYXph5pkTXBLs1QTyBXdJMU9f+fq7NIEIRjzNVNsNYulLMMZjTxodgBDYy9WiLqREn+UuT26d2mPeZ/a4bqNmpfGHlNZFIl8DXppXabGI8F+eK6iwmG77S53qKq6qH69jh7qEs89XxxnLpbJbPS9G3ndS5VHVKWBE/RCvhrAERjbdsHr2zd8fXvC09sTVhDWg5Rdw4Kn9YjPTy/4ej7jdbvg8sY484aFJfzCQgkxmBV6QkpAoIBInvZPsmdVWV4u1AMl9Kgp+gnBDBADi0zPUT3Fo0bpng13NXadTMYHghqPtqxDLnzRAH9nfpaonm/b9uxnj3MVbGu8ak7Hp+JPRunaLrLzr93zNR1f4bfdum55a7hH92+XgZt8OzU68ux7edH+xRXolj6IGvydfoE0YFqu/b6lvnwoyR9XiEwr7C5UXEkq7M3xzTlm5bnFRC5VNsddi6enbTSlu3LWv2twGoE5b+OHJX8gkArbG+Isd3MG2wfB3MVEvbncx7T/oYkGw3KNoputnUwcE8SVnFmmExAIZDHQcwUB+HwE/t8kyvTNcSUVEIMGCUUpbxaAzN0FmH7IR8DfMjH1QBFpjK4LAwe7LED4r//HfwHA+G9f/p884bXre1K3zMjx5JFivb6Th0e/J8r4yNruCAzPRmQmE5hK63e6WnMnyeFBS3rhx19HHuWpkomoB7NidBkGipCOPp0jwhm5Wj2riKhJHoWFYJHXNGUrc726/j//U77/jUvBUXr33r8TWWTCtp3Ed1f0AAwPNv07/fx0G1efs95cUT7D9bnHeTlG316NvehCfptXmf7PGNSqFCkNx1Q3R6Ryn6bzjkcrctxeOVrndXUUz/6TPt2TPmCTPXBZhm7e6KzjWtNNtZBgBt6AtoecnVlw7troMzbwddKPSWrnavYdg7XSVmXr5JZp3qOrdp+R+9jB/y1Z5Z9fg8eO+q7twidM0cYtfS8H76RMpRaQ37YMnCLWvjW+knJ1QS3NE8fcLsNbplu+kMu2Yi7Atg7lmOsVGoE6+vG8HP/Tvb2Suvkg5BAaqcnn1/Sf+dxt996LPmst0e+u/148OqvvweIfDM47W/+pxQE8tBYfWsaPXgB9pPiescYtDT9igf6uBbdH4N3DH/+Vk+Pt9Tv7d5ZCXeRd9e/8LIordc8NZ6ygYfIoqKwhkCrRxRPgclhxPBxxPBxxOh70+wGnZcVxWXHAigMWLEyiQFfr1Uxtu4gBzi4VTHJMpXTBlhhnXPB6ueBte8Pr5RWvb6+i3OYNK6lyfhFPoisICyKIFiSOSqerRakq5xhygZ0PCektIh0Z8XUDIyEdGGmL8pcimCPSyogbiXcYRLU0T+K+Xes15TnMvXUyuoGas7XMczZEujVxkYIMp/kWujTTem0Bx5zUkM7rygIRLbd7CecdTOH3TAPW7IdgKCfvYtey92wIzUJc1Ox7YvQfnVrvaXXSkEYAfKhPM2SpWIHcZc6KTf2V9Ris42Wjddk2fP32DafjCafjEUcEHImwJMJChOPxhJeXF3yKF3xLF7xywlu8IKUEDgkcIpACEBgpBoQg3p4qntL2JIQnCAREiLLajO1Mic6mWGe3l41TyMrzB2mJJll9N+sCdpqnfrvn9DDEQ97QgNFPu930p1jZf570iyvQBwTs1fn9ExwKf9l0CxHfSlSad+Q/YVi0ZyhmTVkcG83Es8yEJu6z5aNx3dz84KSHS5IbkDHKZ3YPrAePrzcXr2F0R0a/vL0gyg791gpc66AcD1DKyAf3f/C/R/2zZ+7hvch1WKQd4+p4LyDNyn5wmt5eyrcu/yTEZpcG1KezFpsX8/vL/nF/1XL1zAXyjT9RnhvrFUAvB9BZ9imfz81+da6M/SUW3wcPT+6Hhydk4q249PUF7JdnSNo+azmW+uDqowDgGMrzVHBD7bqVi8C/StzrmLtEkPgSgLgTtzPNmB6qJs62XN56nuFq255OuMMd2f07AxRKGGRWd/ksnKbMsQ8DgFy/jwfag3MFP7S4xhi+SklsBHNbnccMHn+4jE4RU+4CGGMkKh5zz1Ss3g1n6zV1ZuD/c9zTtcTN2N9Lf/p1v3Nbu350yzOePL8h/Sha+s+IWj8ieUtoeXDfPNzT7vBsGMEmnxnHVTfQafxp1dmlJjZsLvXItrq2eDJ27eE0fObxQhWMWf4y/abZjGWu6vH7abQ1yHCBua4fweO+VGPofrz38uUoeRrr3nWyW27vXVGI33ube6Yg9813lpC2Pbq5uQZDg3fbCxsjOMiVu0FR3v3WtTK9bDFrd+8d9T8o6B7LA9O2ZTTO3rmvaUbDe37i1vINJF1JTxB0L5vDX+mdTMVV5/msbP2kpnRrBGeXHDL5YsI5KjwGc9LuibCxEqUyICGSXOvV3neAd2NcEmGwJ0brr6WNZukqWnUE283b+Aqu8XU+kNj9O0PGPW3f1/BQuoZWp3jhUWu397Q1en//efBICHU5X/njaTTftykOsrP/zsb9Hr23ApqtxWtFHVFyb9M3N9tnetRzgMGw396AZsxZBgDsvff05yPWCVbvDGflQaUpJmovj49O4HHB8TMiFJGf0ak0yEskfpQd5EwABRUtEERssBiIJOH0DhIm7xACTocFp/WA43LAcVlxDCsO4YADVhxJnbFTwJKWLMsJIITAAC2wcCZ27kWVc24p4sIb3uKG13TBt/MZ37ZXsT6/vIE4ApSQaMEaAgIIK6lVOQICJyRe8qhz9R/E6vwtInJC+pYQjxHbW0Q6bEgrI70lMBISJaTzBuZNlOYQi1aJe16+g7l4mUtlMFlDwJRwceaU2wa9lcEqTeZXi5W3SfJ5PUNixbl9Pz9jqgpNCLJ/ZJZieclT364v5OnKPdz4A3jVqTfp79w02/oAIDKvst9KKrJO0qX0ARTINJmF9ZVMtx0JLVmsa1bcisufeI0TnpeTeNKy0IQUBA+b4tz+UkqIMeHtfAYR4XQ84el4wst6xLYeEcKKsC44no544Wd82i74tl3w9fKGb+cVieUSDKeleOzlKIpxBgI7Oa/+FwhgCgjE4CDhlUJI4BySUcLYJmKEECQ0RAhISTZ+7cD++hyYBzvisj+KfOSmasZ1t0XtcoDfkigx60ewVbBcay/n79FUThUu8M8MR/+107+AAv2vPoW/WuqowsnvEYFNhSAAHDHc/N5rmpTizFaz9sz/5cy58mxNu8e1cPsnBJvFPS/WjObO3YURsI8KmQn5GoRsHaz0hsm0m1T21VHhdhNrdKsul00AzH3hVQF302//OUyjMfOCpcmYUiOYYPmnPyO+PzFXJztFHAXyCEP8vVKzJzrif6hIFoKjpsCBunNuH2mccwoECgGBbL3Ke1oXIKpCmDclAAy20b6D+w2YO/TSdANXJmpq8CQ51+kdw8BNAZJ1TwxaKK9JIsiN6UjAQfIyRwCE//bP/y41ddZvTRuxooJKf4LLx0YUroWq4aAErOeERkTPhNMA4ALezBMZDGKBHkxRznYbPBYcsQhGkuXurN/BKJchfHs3IYgaTsZgvlqA2/p4nHUASfVLmQAChCj2oTbcZacu5vlV5cIAxHdA16XZNPrnP0IB+zt9XOqU6PghZ4hnG/dyCc5uBCn5yDPYB585m9JPXyB47AU98z5t239acmctV8AAlARfuirMZXNWgJsveZVa7pFzXtDFrbDKGhiVbSKT9H26J925KL7nWhqet/dUMy6cyXOPavfazEumOXtmx8fes4rkaRAv4f7+jtb8rK5b4Z69v7bcZkKf4Ti+Lw1L+r5X9NmgBAuOClSEW6JsrhdCuyzs99J44vEYyefPQiT9j7j8ArMaqjEWxWv5+EdRtKc8Tl8KbZAb9t8HY9Imy+PDK8/K7eLPXzHtD9CIVWkX/CO6tUdSf6HzB7d/Z/Mj9PbuOvYuDH3P9KdY+z8JiO9G5+/wkR/WBL2/et/fRzbb9Ez1B1Nz1vsvjfJ8WNfk9d79wRLUCDAxUs3f218t97BnzKRyGH3tnAIiMMJCOC4LTuuK07rguCw42B8tOJBYnx+wYAFhwQpCEJfrFETME1JuNiIhIiLxhpQ2bGnDW7zgW3zFl8sbvlze8PX8hte3C94uFxwC4RAYHABOCeuRELFA1N5AdBLO6kQmOV8TGDElJGyIaUPaGCleBI41Ia4b4mUTeDhKXo7gFJESI2rc8+INlMsZm9x3PePJLNNVIpMv1pPRq0UO0y8Agd/qql4xHK8Ed4abXGg0+YP6K63aOPOw7erZbHZxTtMAACAASURBVB8WPkdiOM9g+b6pIm9+AFrqGk/6RS9VCtopk2bhR7zMvhJT/iBQfaLBN/+kYnGMNWpIVLI9sega1j1DQAmEru7aoe84qMeImLCFCJzPSDHidDzi6XjC5ekF21PEcVmxLAtOJJ4zPsULvm5nnL4dsYYFMSxIy4oUEnhJiBEgi9ce1FW82eiQXO6RUKAJkUjCSYSgSnSh3aU8STz0lEAhACnl3yYNkQGYLzCjc2gg67CxHYrnSPZR+d7nGnrj/JFp1nTuVN27nwjpnyr94gp0oBw8k+fT37/Tz0tDTnj8bvasuklKY4aiWwLO3REoE0P90qFMnPLgSOIBlVxqUSFtKpbnSBGImyhkYuyItUIUofwmcY8UiBCwIiEU204PcIu1K2IQGfkJnV0TfcR2w0sVReCiLKoEP61wqxUKTSiIa6mSNRlQtYSNUJ9VbEKSYTPfeY93sE4zfAwsreLillTd0La94ddsPb7V92ovkVJYnmHTPLaPQEV5TkKgEIK4EaOgAs8AhAOQFiBdCgPh4fN/FXiuXf8Z1H0YsYQRNqI2HwU+Vg+AJcglFl9nI80lhatdxnaTm6nE0gEY+Ar831//u8by0n6aVtsrs3OFJZ5SqbhZLyTxwAICxG2ZoQmCbeohgdx9rduv/TagfG9jwzJDnCDp7XNmEDFIGdGsQAZAC0AORyYyd04pt+G9XcyTP7/Tflad50L0uxhGU6EHl0/Hs5YhMSYhgSPLH0e98KCXnwxHeqSa95gbww5nNs9vQY271jauEk/Ed33eScN8d5LDM47ho9K/MsmWF6HhLncL2pbL95RcZLyAbmnJs6btSkkOFEEP12txoESXJqg+79uudXhCY8R3+9rwhbh2JHNhCbvGwyg+1F29NNiDKkCyarutZ/3Lvwd4dHTkD/cET54P8g2/N41wM3ftgF6lw+Zrq3f7x8P3N299RokbyaP6a3C61zNQWwBa/OvnIzu5ed+eqs9rX/1+77s+zpq9pa+eVMnf3YP8+8YZaRXn7fk0O7ONDCkHcEMSc0u+1+e00Y8Kw3ibOIxR7T/b3V9AeLnaRQPURygcwu0GlxVSi4EuQ6Mht9SZrMRk9ZQAA/iCulKHG30zXV9RzzejfkCzPK6NWd0PpWs0xN5ifgAYGnUYVVd9YmqH5gMJkmv0lNuDE6gfTv1U0/i9vb2HXpidx++q4pHez6/xtf2bFMfdc66X6O5Oj9Bnj9J2hiuuVrO3fh9o3rEeZpXY03QN4prJ+Spm+0pjVtcD661Xxvu2ZzRXfbDVZGSDs7tPK8M91EQAcWWBDrihy0py/TMluT5gAhJxVpbzInIRImQlOqUE4oglENYgSvGFCCsTFhalU2Bx2R5ILNBXWrDQItboQU3aKcK0bowNkRNiSjjHC17jG77GN3w5v+If52/4cjnjy/mM8yXiEiNOFpg9RWBZcGHGyoyNGQtEeR7Z4QIuLqITWN2xJzBH8AHiyv2ZkL5FJErglcT1MycwJSREtW4X1+32V5Tm7jOhyDayKT/7Qz7/FRag2Mr3q8aeNbSHZyWGymvSptu12NJ6aLbAkEBApsfcJcGaLGnqG8FT5f/xqSPxcSvKpsecfuX5qilFRr3fOWf2vx9Fry1TafLMeYeIhgsj2xoV9ktxkKPDa/N5119TnjteqgrN1bLC6qUypYRt28BgXC4XnC9nvG0XnLcNp3AAL0AIhMPhgOPhhJenE16envD8+iQ6CmbwIuFuiYENUiebXkbFAhaqQpTmBKQADiz4jgghEJgDmBNCCkhclOaVMtxGptmf2V09tftmOAG6ncpZ5nnE/v69PvD8kBvj0mCHeOoaMt9V8Im3khcsVPqaY71P+1H/yI5PszFBgzMw+H5P+mji+QelfwEF+j3pF52tf/W0d0Uz50FF9JpSa3f/eiLZAvlYPfmz/qtdxcEZc7cUsk8MUjU3wyzPoyrNEyhGtW5EpgSyW1AjyhxxLPGPFxSF5bDJngjqiL7GDZGJfrxVZTkBu4N0enJw87mbyT9qD4PrDBFngnrSnq2FpswPT7krH9f2u/uRD1M369cuqfj1n/OPyrvPvH9CjntOwfaY/i0HEIIQRsmXd98ZEr/L9xlGjHhijYsgPARl5BIqSjn7HXc12W3ikUCzVUCG4nbY4wi7aEPfNJbman7SVGGcSl6A9EKK6xNxTflb2byHjACziweaNwlTaDAWwsjB7sRrFSaslo0XWHsE4Zk83f8UnWE8A4gAb2UMmUG8gMzDgLYu1lqzoJ1tGjzfI8gMxNn+n7bSMx7F27MxDgkcgRTl0hMncRuVlefJubZnr+SfAOOZ71l/+kLv6BTVa/lhRes+c/bz0p8Vro9I/vCk/vF3J1Eb3HpLe1k5jjI15J8PPl1r1Rf7rMJaeCDYvczIuHy3y4BoffM44NgJC4xBzeei5M3xlCfTUPU9Z9xJZrUwMqz1yKtvoHlo7c0AKoz3cO6G8/kd9lNNWA7Td79Z39JHFYkxwdF+XPfG75F9eAsvc7WOyZxN59fSzphble1evHZe5XwjGoPHeTMt3NAqFBCg3m08aHaRiOutlliCZy/0ydUyZ0EYSlLpxbcw5C295xx5neycdwPEYEQnTCxtfQHoMzKNWVU9o8N8Zwe/G5LsT5OmeOidye4+zGKhDy/XzDcKPyQlrxrBcOBv3cP8wNA0LMgo8Y357m373lR2zp9twd6Yvjud9Z2SyrzuvjPxAf2ujt2r9Tl6pc3c8jPtu+79A+uNui+TDBNCfEAX8OzdVdwhfWN/xhNq5XnOJ2cmFiC75lHlF2sZXoMozdcFOKwic1kgzwAEjghgLJQfi0FpYm2CVHwiyvM1rFhpVQU6kBDAJDGKxd05sHHCOV3wGs/4ur3iy/aKf6oC/evlgsvG2FICsGDZGDiuIJL76RsxDgFIlBCh8Dovb3ICsyrCIxhR4r5vCXxgpG8R/MTAN4mPjiOBL0Da5HJthLiX92d3Fhc1fxxR+PbRBCeVz6h8o8hp63KFHHrHBqvqoiK+a+uoeK9+/c9IwoIjZJ0RzTy1NPSj5+1+Qho5Tnz3sN7btvv3Kk9u7CboA4/CUSWjyseEmcnCa/Kb6/weF+s+sCXGXJTGRZGOrIRtL80xM5hYvEUk8WKJlLCpMv1y2XDeNmzrhshHHELAGgKOhxXHwxFPxye8nJ7AHBFjRAobmCI4MEJKCERI0JAUSdYmxQAKCcRBI/OKsjgEAhAQo/D3AQEpsHya8hyqWN6ZrEqJ/i75nI0l5bHp6rXxy4YG0qcCz4Sf8pMF6IWD67B31vM3dsP3ZX8sHsURvyb9+Osr0LtxH3Glo9+/KuX8r5Jo8n3nmVdq23evPG+VYfYsPzeX06bgs/euTRrUnfEV1TDoS4mdCzttUBTRUWPnRoCTQz1u0ZIqze3KaFALXvuDfAIegTXJ2rZDkRnkblUSs4PNU40e3lS/r5Bs+7v0vRa6cfO+DCtGQqYrybtXzNW3RK5ieXL5m4Z/6g3KR9PtyvOGkBpuKVvXPsNozHw+lD1k7tpBZQ8FVZ4H593BlBJr4d747SwMoG2CzARQ/cz33e23SklCzd+1xM067fpNqDQotgcyoSNBxoRvbcbt3228SfZQZm6bdrr26w57YiVbbjdrvZupwq2Vz+zeyPVDOEBHRMN913cAjLuUKU4OF0SYJVaxMNd5UVADChFdQNonPLmdAwRXf5WxfJoVelOtxKKqn9gYVF1lje1Ued0AEKMw5tl1e6zHv5pPP64jGBvY78E/WWF3I878ECX6O9OvjFh/drLzs2JoyO3bH+zUq8W/7vZ1hm2U3+PymRLd99Gqi0373fJrcYf7TWqd7mgV2eWKfx3ek/h0rF0xHMGuyaTPe/yat6CDr56PAU3U9rP98b3YjpvxRf/+uuXi7THiapAaWkTXQn0zv17lJbwL8trqL01OaFEavG7XdWj6amv32oWkdvkn7p6NxrGi37oFNqi/3W7tkNtibIVfs7kZXS5oafcRLT8r39Xj224Es27j5JARbpmW4bA94wU8VKrw1b0nOVqCh2PUHe7dUPqll6rOmbv2f/bA3aA8n4YtAMDejWtVL5pxn39v1+I8xJCDl4Ahj3YFP5Bfhg8kItd8tx1nA+FW0UP0CFfrtQNsN9HDinyho/s1P2prlAa2rT82PUB/7sN+bVwf6fdH0MwP1PEB9PNPpcCp+yKpPffbQjxAP7P142nIUmJW+W2pMY4xGre+bN22Z7QK2sOrzl59DjI51L4DYF5a2ZDHG/WQmGByANKyCj0cN3kXgmjFA4MOK7BKbOBlJYQgdgoSns3zsAwzxWYsEKW8KKETpXxWReYcU/ycIt7SBd/UXfuXs7puV+X563bG2xbFhggkVuSk1uALIwa5cB+ZsREDvEmsYnOpbApvCF6Xi3bqBQaMrAWPBD4QcE7gBUjHgLT1huZCmps8Vw4aUjkptxboFY3FWgnVQ9XRpP7gUr6pm2Sd/x3l9zXyrxRwdJLSsPlU9PS1vpctxBMyb7CfRvRB+26PptiH/ubUkSPvrPJDT8U8TJRxCCnNZOG2ixnxY015NLLHn01fTVCkZ+dlT7CuR5Z+MJdIEFxQXf5jqFK60Cr+rwIskOCKbcPr+RXfXr/hFAJO4QBaD+oRY8HT4YjPz8+4bBekeMF2PiOFBTEEUciTGRMqF2GdDgAl8abBQWKjh5QkXjoJL0GKQ81bpoWlZN0/XfiZZm1Xu1rnfjcG+t7OdYi/2+9Owe12cncijb5LRWVcWivzm5bi3qHkUE0NtC9z7077qRTMw+nXV6DflH4yc/E7uVQIwuG7PWI6E5ZUPbqtWW3TlGCZiHbwEFC7eZe8jY0ERLTtD5BaScOJVQGjipikShl2mdD0wSspQRAfyUt2h53TEN9wQ9y534wSez0/5/6vskQfUlk9DLM87XN2BW7E5r0AyPWneuHnspQHHI35iyPphxI1P9rfs0J5+TumrboRrXuJ9IKHtzonAv4IwKseL5czyl5zrr2r5hmdT0b3Tm5EEkCramuTnF6JtBznagrclsxPlzv5/wbgP/0wKAVs68XKJ4UpKHy2lhNA/14azJdbNIZ6dUvcp6B1mDV+BtPgl/5wUmaRkRlYcnnJlekumNgepnbTGPXmfzuFOAGEKMRqO3ZyRRuFQRRllZ/V8QbtJ7QMSUuV1Xi2ysy+xGiRTPa4joddcOLEamHucGJM4K2xOGculufDJgbtPYpmcl9vrMjvx18+7VHw9+T7RVJWMLtnhJpj+WnTO+HC29f50/oy+QTK2m6rHTJiWrnX0JDbIzZuGWfbc/tM9ZmS4RgFNKkdbHbUBE9AbDsxchXfcs0fmpqz9Du0MazyZrobZQCBGre1wotpvdz/rJj59uzfgeVqW64i4wlG6OY947yX91aY/HNP41zrQ/M10//++Z6S3JfzG6E6w93n9CJCqKbNlNHsynlhVoBZiNSgJHzR77UlepuSlrTpSwp07SGH9D7F/8/em25JkuNmoh9oHpFblXRa5+qe0Zx5/0eT5o5mptXdlUu4mxH3BxaCm7m5e0RmVXeyKtLNjBtIglgIEixyzab60EK5RzMA4q6dxzjR6hozNjUuWN+p7AHqyt4p81XCDr7fUkYsYNbO1gv/F63eB/TaBKt50+t4Gxs0/nvIViN1aJhunKJclfT3GIJuNws/pO2vgRcPTrbWbc4wTPSxQwj3BmFAD6o9pPHjboIH66/eo0bZJKCalhVPlE0ZtTA5rjh852m6kEPXWWz9jxLpwQXqNe2TroskvZrSzjcsJJ8TYXk6qQEdYmBKWfV4cXsuBwBE38+UsVFC2elKWHkTt+1Y8cIXfLmc8eXygs8v3/D58g2fL1/x+fyCr5cXvFw2nPUkKlPSu84JmWwlJiMnwkZyGl0kgVU7R3R0DjICY4O5dGcwsDLwTMCFgKcEbElcuJ8S+AQxoudo+9YB4uIaili9V2XIOo/eky7NDT0c9HJm3SxlJ9ZN7xiNNzNar4MUdaJXD7ZO1kIiNHRYZYdIdc4fRyheIzwCd5M3Kn9uPFecauc1rrOs6zXPrzY5ln/wLcjwoiaXsWVdMyzeaoPXWtMZ1DuCWihkmdOmgP1pZWLKSNg447xe8PX8gi9fv+J9esKHdNZrJJ5wSgs+nJ7x6/tPyDnj5dtXvHz9hjUtWNKCbZMT45TkmgnegpBIjERJNy+w6AycfI5R88duVH+M707vQJ9MazeKs23RGtfts42KkX66AdrbQP757iZd6Q7eS/OwvvDHDn9gA/o18tJKM0FwPFrEz/BGgaqfq+mG38gVz14qt/KdksuiRLJnfScq92o41ZfnWK5fsRwW1CrInMHYX3NvbnWHbmyCSrp6iteflyWc6lVXycrgun4JCyus9fvpczWcs95rLodI9b5fF1BjuQb/oNu5eYnv1YkL7tPX3HsnjLQT9nYN0wYGKV+b+e73eN8fblqcofjwipylXZiMRonZZpQKr1sAqU4L07pC2jg34nvSP1rqNHH4Xp7E1dcq1xZQknu9tTG61tjCNcGRrCeTEokhGyLFidK3DLOU+RuVGP39FaC/WbMFfhNwRCK07aRBuHSx0SqwO2sCLWN1XYQUyqh72TVwak5R64tdAEHNHLPD+wWtZe7aveOmWBrEBdQi2ZI+13cfG10igGSveFko4KJUR4VSy5Bd7JtBK+kCiYpCHQdF0qk1xwT22J7gD/3AocyrU4sLXQbAOYv7tSx3JHGgj+6ufTUFvvXGcb2q4bfu+wF6cK9iPdr9/UcTbEdtaMlU/fDHDpWB2X5q2YgQUaJiur+vbpix91YR/Azg40wTs4LiOwbfGYV4Zt1rkIqghiy8iQG7OkN0TpvTDW9uimQA3ckHMo8AcV414wFgvnKi/GWYd9TOUZojAz7rv3E4dG+u46Jyl2s0yjdJUPM+SRc/tfHUfI1Dd4hWmvxT0lI4hc4R1hk8e5siGnAdxghvm3Ym6kzEuGGIm0q6uRNejccO0Yq7vvSSWvG17YORzF+9U99f1G5GlrRmKKgWo6JsMAzXx77bjxn7Qz/UpbD+X+5fVSlLb+T5DZV+ZItYgUjL4tcAPEezFqhxc6p5GUhWBfEN/H3mTlIjpfwc3nfLmnyv/7ktPzUvTfP9eTYHbZ7dK/O47jKdcNOsfD3JIQBKOfOCCFCXz68b3sSec6TebvN7l2LAjJv4h/vjnvyP1mn09M5y6IG8lv+RUM2VZt5dox+oxSTRJcfwcfsh5LovUEtehvW2cniJbq6LpNEvNfEBx2nIdUqStjy7fxy6VrkkESO3FW61SirfmHV80av0FhK37U8LlhOBFgAnAhaIK3ZkZKzYQNggdw0DQMaGlDcknJHIDvAQtpzVgL7h2yYG87++fMXf1ID+ZX3B18sZ3y5nXFbGlhmUFhHFyezUWU6eQ1yzb5Swmv6j65SUGcxb6B91DQ14X4ASaM2gUwK9MPAugb8w+MTg0wmcLiiO5qh4htdvxNC9A+TO9uISLTisk1hGhc8PKcW4aiCjIFjLVa8aTP6o6q/xa+C3sE7sr9zjrm8AaOT5qv7fZ6DB0635660I0gemwlH4rSeuJR14UrwpxD7noMMY8eKdptWj7ipIS5bse6Wjazu5eIAYrumPIGbGljNoy8Aik2rNG14uZ7y8vODb8oTzuw/Y1PaQiLCkBU+nJ7x/fofLtuL90zOeTydclhNWumBbEhInJBYPFuTrqwJzMhsOpH/WBPEoh3IHOiWWee6yt3oOaDZwVypgYyTvTqp3XU46JGXcak8QbRcqhplcHmmNLUYE0YdCVLc21FwPevUOdNvIE8dugEvcPXSN3os8GF6jjB8X/sAG9FloSceetvbHHbg/ZDigXO/nLwQQSgCHwYiMphG7dAKnhOxGQv1NhGJoj39iyIluKAvtsrvXUSiPoVLOINadjDm4Rq8SUREElyR/duJ8WURoXk6gtKhx/QS5h7jchewAWbFm8MkAb2Ik8h2VnMGbxAtjzMV41J7GHC1QdAtkk/EZLRyBg3A2CCMBJOZ2rmHp9/BnXs6rBIoPo04YCatvQGNGxvMKNvs1PEfTbyM4E+r+CxpdzE/k7tvJrhvQDSqO02kB0iYuubbVhQkRFhaVyQ1Z1GBqGx2YUbwwtP1HMt+srjX5Z4mr3YsXYwngQtdHAOAiMFhVutoqrn1y6AajOVmKb2TqagE+LToHSU8vQ/oKUMM/iuCSUm+rZ8a2ls02xVmGXVHA8PkEoS+cNzAzctYT4ouKz1ZmCncEh+2iXL1bw+x9Q3X/MGXQwkXBtMvTkFEupiBHt9L3pYiqz+K3ano0ndukowDyuPD61TchqAeQ4p5d6d+mp+uzGs83VdqrFfDyXJQl7kn6PWGvHbeEIdkjx6njMPyIYPNrBgiFtv1wYF8x6JyJtFzDiIP9oVvODHzSVn3h8f23n/byTz6G+ViMtDZfucgzil9ssIQero1sE5pVadY8IFOq8Fb5JiPWyjNVBLcJ+zBi3fF36sXllcItZd8Dx8wwG1W2ayJgDCnGyUmGannJxOhhXVy/79KpGDfgY7NxG8V131oZr61vVGfosBmvGonle31b4a7pPVZXLu/dxsge3kVHYVPat9hGN42PolYsiq4CaTV99nKk6I9a+udQDzuJsHpP9AnMwMYbSss+18BUc1w/RPzkAiP5SmsHoBZH/edm+GKYbni5Ni+a/LdsCh6qDnG6UPNxD5+H+QB8Qn26M/KIGZp3kZO6bwpXCpj2/ytwaF9Mtde+rpYtASr+XTVEj0N3zcZ3D3SlT3f42Wyz/5uGV+yoe4as4vNHGeFB4jCu6FjaW4rXG3g8jKq4tvnu7nHQTm9pVqx3tsmpKaLn6Q2h7NZmBhKeKbVdeeFaIesK1a0ZLOuEtrGdIGuICcATgZ4IdEritv3phOWUsBAhLeIG2WTkjA0br0gEXPSM+IYNiROIk/NIQAxRsmwoRrGv6zf89vIFfzt/wd9evuDL+oJv6wu+rRec1wtWFrU6MbD4Goiyx8RqRM/YMiMt4ikqMUDMSGoojCfOi1SvJ/JJ25l1g39OwPMCPl/k7NDpBD5f5KB4VkeFpibon3U9ACCTnxfQSzl1gDKYzRhmHuwkjXdPFImMgftAVwJDGOTvr9E5Lpk6E0Fz2bZBxEZf+u5hIjddTf5w944muOIhKQkzFAHBPU46EK0+d0sICApGMaKnwZmpug4K/7WtQZulYhFaD4dnoDG8wg3rrPeNW16TI3LOuNAKyoTECy6rbMv58vKCd+mE84czNt0ck1LCEzNwOiHjHTJveP/0jHenJ1yWMy6nExYwFt2446fLg/dOIpY1VhaKRpxkyTUDOZw4TynJ3A3f5LwUVcbxSj6m0USpQy9Pl/k9vQMdBNsMUclfBL1uV6pjCniQY8lGX7hfIo9wcaGj3R3oVDCk3/jN1c+g8JCR9rrnQPj+dPA1w9+hAX0SKob2M/x9hSiwcOAu6vojJSRKYuwx4Vi0TtT4UN5r+aekYZ65VhHpy400bpBuTjNaoXaKNyVgOalRUn/TAk6EnBIWSsX5dGRyg+rLH4cTlgxsjMyb7uxU40977zm3hTXdkgeVdkayHWLo8XfMv5g3SBDByYwnLBAY87q9umPBhBoKuPQG4ZEGXANpFm9KZArzxRhlSvATQxTvPhdLNP8zAV8S+JyB/C1gvLi/EiHMOC7Bjd7cjK9pWxpYN8J4WqbmPtMGtzh8Mng/EPAlXL7rc5tKPztKtZIqFzBDJZ3gxK3/zR3pgtpfKgZ1FmWVtFKG7Mwmm7c5/OatnNhSwdBlNO8WE8YY0ZBe/UqLkEHV+gYS+wYDkeN1HIlRL3WHdlLTWVU3UJ3cq58gZFBKq67lkCPWZ/QN0E0G2TcbFAN6Li7afRNRqWcCBIZANK/1+4hujpt5U6iMeneEV9kB8DPcHcJ8jbSHq3lg32mPirxhaAnUgTBj8V9QbFi35ButoFhaBqq7BiuXpjYRs+7fs13rKqdZunCXdTuNnXdUSnasD2UcW4gJ9SKxHZBf2kqa32sHF+KGrVcI7X3ksypHUbs42abfBXdCc4cG7EGlUzkmls+VvFCdKBjlj3W2vGxvIlJMQFfafaXuURkjOTvW2cI5MjKFNNV9eVTjQyUHhcUyH3nmwTcq7zo/y0JbAZOUeZeTiO37oGMqWaZ86nNEHm3tt4n1AWadFXBKOjnpJhsRM3/2JtTloEyGdiw6utAAOAK6ffdquIqrtM63YgTfkcnMaU3dbk395vA8Hh6EcWC068jcbjzdxRIOeSDZCd0G9+8ZbPX4oeofaf+jeR8B3BnTwbS/o/AwnXmkgCt9cQ+/Hn2fis4tf90pj8QzpcuqSxAe/SADy6nyRMCJQIsYytMiJzBl/ZNAy6K6fcaaV5y3M9IKgBlnyF3EiRMWJOc1snzIyk4TwHIn8cobvl1e8NvLNzl9fn7By3bGedtw3hiXVdYfM4D0lGTdMW9yOpUYtOoe/MRAZmRecCK5y5hYDw7YlXHOD+wSFutBAl1I5OlnIH8RLzH5wthSxgZgOxG2lQCWu9cZ6nWTs8C0FW+d0dlevFbG5AK7H7rsuLMDBZHpG3CdwFaJCqM70Dn8w5WnqpDiCq31mqI+GXrMxCdbDmNGtd5UDoNFHhzljoki8FbhUZb6AI0hlO4oeiZ791YGyUiOjCz/zkIRsxlxw6PZA8ytuaECmaE8/sHa33wPaxiZM2gD1jWD0gZSuWTbVqx5Rc4yFzPXa6cJcpr8eTnh+fSEp9MJT5cFK21YU0LiBSkzcpJ5LO3QMTK380RIlPRwTwIzK41JyImROIGJ/dQ6UZH+3XPUzvzyPrqm/83iSeT4vc2rs5hOnWjUsTdHuRHMP2ZR6ncV/o4M6EdQKFK3f/CR/z2Fa0z5MNOOZEbG2oiquG0nvUdIJAgzBLLXEf4cTaIAcY1SfEL2OgAAIABJREFUCXdlNXIR7PR5WapxmUQkSOCU5KS5GtEZqTaikzCWumnNYkqMy6y+krg6bcmbGpIsoRnXYwH3Tom9xaJpiH1JdT9PKyhjOrwj3dO+LjuZntoIGzXiz48JE7o2U+yuFQMqkrZ9J9n9S2SeEXQ89EQ6UwK+PevVCGuAJCiBeSsLs74QSWViUBpIvqIsst4fTmo8r9Yxq9XX0Ei7GoEZf/r1X/DnL/8b4qYhpIsnzm1O2L1jlcRS4JLZnBv6YHAA1Y5UkLQbKG1uT8KVVohhOipvyZS2DN5W3YW5uuGXzOsFATlTMdxUU0zhp+wn2ZnMo0XxXcbazmwbhQje1+T3zZtiH6HnqnnWL97NsR8Z8LvIqnlrieN7UWZlZgdaVSl42bVCseuL4gx3154LTdy2QiPZTqGH8qpdpxGvIkajF7gfcal4MHQ7ZH+G31lox+QKUzwwjjWV2CPoPPh+J1OPG6fsfVZtrH6vKfFU4cc2rdI4o7tNRVa925f9BFa7YtG8VzDF73YivRTeKqfQBSY2I32jMM6MWsI2qQMrA+purtC064Gb56Oyxj20YZDHRZwCd+d2zmFDgyexw6JMzfvo2RqByUl7P9SzkEIFLeoqjKRHSA6dxj0ynRpx8FB5u98bHBrWTaG/uP/OY8ClPytk7gNHfhO9+3Cp0w3wKj9wwRGi1O2hsw829yrouKQTA7vqPiFkb8dnRPwifFKR4LN/qze8fFa4PoH5o7y7/Jjd/9KG35p5yaXrDG8q//aVEKpfgmzbxHVjeCRuQFevsf679tYpvb+GvhVt26lnaJylJr6a6uHF7khvvJW0fKHkHX4+Hmbt2Ono2L5XEf2uroNciXhAHrzbkM5XFpSv14xhw47It3sboG6G4Y40wwuxj4ZrwtKsehr9HMhY6NWx4Rro0h51rATqZAF94pr/jK61aE8E9nUf7bur1Ez+TTspqnnew9rJPNQMjhvZeD7q0VevpU80TG/9xZRkBX8BcEIxnp8I6SSn0NNiJzCFz228YuMLLjmBNvFcJxfOEQgJCcbvAc4Zme2qxwTwSZy1bRnfLhd8fnnBb+dv+HI+Y80ZGwPrtmHLugYKBlJyQ/nGhJQZG8nNfgkMLBkZCxiETFK/e9yD6OcElAM81j+mqxMBG4GfCPwZ2JiQPzPyM7ClhLwweFVDX/C6yRu7zq/XviurD1c1gYNjnWg0hJYF+Dyu+DhN5ggXNWeix5Vs99CVKO/pa3SbGIy9dte1ZAk04QZaPp2arxl68lW/H8x+a6j7Q+Vdc6utOkO3Bh0rjSLidwgzqa2Tr5XuytgXWlZOJ0PolCpcRocN980AXDbWsJfHEJoBYqScsOUE2ghIhG3bsK4Z67Yhb1uleySFf0HC03LCu9MTXpYnvCwXnPKGhRcsnLEtcgKdks1LW1dmPXuU/KR5ShnMCQxWJ6AF3i0Y04XWlF66F4fNI7Ftjqk0MV+o7i6wCvpVQBibrn7gjAuJaVTjV8Oz3XKaCO8uCvm+I7L/jsLfkQG9Da1i+xoazs/wOiGMDaEWHquH9rd9tjCfvO5qPVxhXE4uD+4zcp0o1tNSrRhdmGprLK9LsTgV+ojUMJVAixoj06ICutx7FEuLDHAYLHHh8CgX/3CADc0zSpqmrU4n76KNo9WgnTnYEHCu4CkCoBnPR3JUbUQvjz9i5ruM/3vjK9O5FsNAuCdCuYhbv0YDOwD8UwJeAFxeagXHt7oGhmtG4rAb0iV6BPwEFZft9uNzmVCdQBy2V+L/9K//MmkiezIQxEi8tPEUpovCVrY/lsyAamO9Ni5khar3YfC26kl2dSWKvIG3Ddg2UNbrHPTkud2HLopmKNxoq49F6FvXGq2NxY27OX13cmhC5kJ6v5AVq7tBvXXNrCSowD1pq0/xnloeDTWdEJrHDD1dHozmOYvLdjekM+orLLzDGlqUw9jPGjCIdJp7Jd1bhVmnv4mW+0bhYcL9nbXY1wyjKREZyrBvbmmvHT24J9AYvltDJRLcUBDHCRl5SPhmvGZacffTfwgLdUSQRbMAbqsOuz3/Gd1Q+HUdVYY6zU196caDPYHwtkKni9avEWKRiQL8+s8VutRNgz1Uv6YuHGleK5u0+YfwtgUP0uzVXcFNtRjU1R9hYL8iZh+cAe1ohfwpPo54e5iCVkYQL6vsHLb+uNF9EILxwbrg2nCOArtcVkHt34raI++5kiNNlhhUOhLqr8k3o/e9uPh+Ld1e/dfCW7DHh0iHabr9PLomOZuoe3f4A4sKwGM0u15EvjVzlMF/hrcNtPN2WykPjVg4cfjdA125i/ZQET9iRaiEXt4MsipBhEVa9GrHsnBpopKtEdACufd8gawlLvoXr+3TvwxCziu2FbjoboG8rrjQIkYphmxWC31jxnM5fZpA+YS8AVtmfLtc8OV8xtfzGS/nDSuz7knfkLfAS/V2yrxtuPCGnBLWZUNOG/Jpw7YseEoLNiScqHgLlat2GMSrwAYbt+TyH4OAi7RdzjIweNW98ecMTkA+EfiifW1e+1AMgHZ2YCjpRRkrymId+kXZiYrw0xU2wbtKlpvIkHsyRrXWENLaNA1yopwIpqL+2cEBn9Jte6ku8EeHH8GnBzJY3JvaioeE3dH+saECTBrCTGFDkxrEwwZZzixnkDIDCzdzgatGE8gPV9nSo92NvuUV67rivF5wuazYnjctipWsEZaUcFoWLMuC07IgbQlJN9IS6RVcmXz+V+e7YOSOtE3lql3/tcN38ZdpoMuHe8S5jdO635gHDkt3QbdeiyhrFcdCj5um0EUMRhnfvUL+gcW/vwMD+myFpFW7f5fk7B8wNGPBCEJbO0aT94ND6QJnIJikH8kEsQgSNXkRDeyRa8wBcHmloW9AubpDPio8SwLZveeJQLSAzc8nKRO6oqSWNTAuAETByk6bc0MUXWCaSYZjQ/XhEAWyaZeFzidMrhLtFceyq8vSDjOGHI+H8cmrUbpS6w/lLa2Bezifrs0pmwmk/wbBw5UFkjsMvy7gbQs813CLynMlYZrUpYKKI4AZoSOd0NPeurlEgGpwy3HF4kmUpvfy+ue//h9EQ3EXGMCfCPhr7DZRNv00k7XBhSstLkf8y+Xuc19U1n7071Ti7ZdZT8xrQZmADeXU9LYB2yqGdN5c2JF9mFwfNjMF0+dwhrlNZTOeR4N6NVZSCDutVM8dTCAW1/rZczTCJRogpiG025NTP/+PBg7yn9EdM5TnDGxc333OHIznHIdosBEn9s88XKWVjxCDgBbfNVwjna9BWmdlOH24t34ePo4LeK2OvV/buCb9yLfZCaIZfk7qDa6Vqzl8ZXGx5LkSrJgPEzCGjY1CGAVwKCQLRhYj/7fojiPD6FBm0GDswtnRAKeGXUZVFClr420wTvHVjOzPgYd9uzIH2nCN9O6FQ6pSzSc8I7Vp6kIp3vsW004WKnZB4smYR3HmFrzYC4/0p4WbaNhOYmqTFDl4XI7hYd8Toz7tJe0mTzPsRfewFGkIvX/j3odGlWAA1HwMIw37UmU1WSc305U07aCo8jDdfBZLgZ/YmUK4owBUp6/bNDfgW++Ji/W7vc/zvb7hM9LscZ2TLAMa3KatO4Ua/Of69fbwQJ97xa8hCw3ruxZP1e/N5ZtOd0/g++u1/GM6Hsr8IcbaBwXfq11ytM9G6QIN6tLN+qpsmORD9e+VN+HTs3kxq6E5zX3sOpnXwQVq1xCGaeyfB+q8Kk8FOc9kv9Pi3v3apLSQum5HMZwnks3tC4AlyRKJpiGVWTlnbCBceBXaD8ZK4jrZPdnZcKj3nsyMbPJ2JtB2AmfCmoGXdcPXlzO+nVd8u0jZRRYRGVcM4HLt3LauyHRBSgmnbQGnDZw3MC3Iy4KNEjZasCRCWhY5NU8E4ozEGcuyYFGGyhWtlesCmYGcSPbErwl5A/I7PUm7LEC6QBulQkHWjfZUoQABehoUTne8NSTyu6+zWriKHjMi98bBTwnLq/MJkDplNBlEDx1QSFzx4zdibNcCDZ6LEPemQbqFERaU4Atsmcu5FA6bz/ZE8TcK106ez94BVH1ZTtRLm8VoTmI0J7tWoHz3vjFvC3KhuBu5be2ZIWVvzFi3jMu24nJZsa4XrOsajNhmQBfDuRjRExY1oiMlUE4g0gsmKat+JzYdOZQeDtiprUfuOm+/6zfNa2vZHGSZ9u73bvkE2NVZd8eM5u7ii41B/23lK67dzofEtwDgZQENbvzIzXF/wPADDejXBukICboqnYS6+vo4KOD1HNlZWPtBvKQLEY7JZBxmIKA9SSq5qUs6DkY4Z/AE4WaoMDMoXPTozj8o/kZY7dXKim6Tqf4zgTepi+nTCTgt4OUELAl5OSHrnc01aAT1qe5NrNhgY4S0mMSQe4lXFsPWuoHXDXldkfW+XQbKqXKw7s46gU4npOUJWJ6AdAJoASMV4U13RpE2GXwq/WNNRS6unNcVZKdU8ypGog3gTNHaVRPH9iRX/EZAvPcEIckxgZDKuFUnPMNMozJ2RQjhwNitkmJMZdaNCINmjMGo67yJN1CsKC7sNPRgb75Ea3ol+B8gJHGeVXOKyq/f4R3qKAXAIzqJKpRT/YW2qlAEFTjMuMsJhvyhvCfFxxdV0EI7vczGfTulUG8u9bO9M2QLs95rY0omQ9zqZpu3satTWNBkufccG/781/+LGmnZhTD//ieDtRzjZu/jZn5U37QNPlaBljje5SBwG7Chl9RbBPEFoA1kVy8YHWE9dY4LyunxrO5EoeOk1doJepMsU6StgDtNsvnt87HG60h65WZ0gMnuFC7JC8nQ8VSDiLky5UyurIncrX0a7voiJLhbdwiVlZ2wxWTo7pEYcFdstpNcqKfvmC93n6/gLQO86Ql07UfRnjEzR9YEJnSKfWhd93tfhg7ZK9M/8T4piDuBZwmro1ezNJPfGVxXijsQeSyMTk5Oi25o7179XdSABtr3IR9sk1HMMRQNx3Km0J8Kd/x7kGNsXoTNhOx0vR1fo71BRjksT2sebmi0/0xwKV7JAG6qDX1rfZm5polViP1ETfsshcDpV0N42gQyvmF5XU4KHjGMP1FSGqlyX1r6/qSBCYykLWRjYLzQ8LVis6VvCCJzOUvQOBcDqjvOW5mEUe5x13GuZLYW/0sZQasuyXYXf+dzx3sjWEvNL4mPf1v/oE/9jdC44naH3/Kf9nXNf0o/M+TU07gto28k8oFHa3/quGxsWkco09M15THQ+3eNbl52ghUXj6vM0lhlTOhWdP2XmnE1HNF2VJv4FE47cVXuKNmBN9IT+1TGQUQlLiI6N9eqRFBZZJqAyWPSOCPLFd7Hj3XekjsjjqqgFIecdiLms456vIORC9A23q1hhWOfS71zXYJqcAfNiDN6SMJjU33hO1ZfaE6VLbKVmGCAUoko3IkRq93DkzlNMZFuNKCRe8zmjkzB1LD4mLPke5PbctqTRoBeudEkG7XjyIWrVzen7WW9IuvQWJKtxZMdWWskLw1DX8ZULj0SDhnfo4zWIDK3tPmmyseIxEBrmOhTUfDUfGDs5xDs1rKXa8YR9/O1M+n2wFOZbb9OT0eB18sk262tZKci3wBzfJ6FCc3sOoNGUGuVhIE8EEOIc/pvwl8YOVLaYu3ROYzTotdMRhnXaD8j21qJRafkSyRiTNdydJ1k1dmZmEF0ApiQN8bZrpQD0K/nqmSU9coUZnBObjPbNhaXzJcNl1X08JQz3PW6ylcLgAUZlC/ghbGdkuxlx4qVNlzWFecl4WlZ5C+dsGDBCYyUxJgmdyNDDg9QOSTARMhgXDLjsl6w8obtRe9ZXjfwhcGXDfj4BIDFlXSWdogRXVahV8QtfzLqhp4pF/mdoca0uJYax9m/c4k3FM/NoQnF6ZHzRNcZKpmAeznRM9g/VGRok6cVZ0yuK2BygbVqRJiXiQNt7eWuynjnhxBUTlEjZXVFvMOKvtEe2UTkJvMBohU1uUxhEEI5NW0PMkVXjhECQuEIeoo/60ynrCJL7RmVio23lKx9ZKVFElrMHlJzCn3c8v5rLFMO0+Q+IghnZsUgfSaW+YEkp8VTkjFNlLBl4EQRtW2sRCeUZWFpm7ljR2bky4blJDRu3VZ8u5zxl8+/gUDIyKCF8PH5A94/PyMtwPL8Dts//TPotCATYc2M85pxwgXPlLWvF2yZsRqaLjJGDACZkLJ53xA+kwBZs7Tx8XVJ+FxxT5q2ttzhQ8H1cld8kQFZ9SBZGij2ITZdydYkw9SkZiB9ncHHyujDSPKwng8heYRk5yqx6jvwudrpDCNe6rSlCdx+HxHEURh8tza63lsDXuSrI+V3BT8gmR0LP/4Eejs+V1vcEr+r1GQSwvSgsuAlMXEKjQB6RPx8hWDCFiDgEaMo+Dt57CHhihC4E/bmBoWHODQVoWjdsZlQZAVEgRKhrZYrLARxghlpAJI7gexvOQHLAl7C/eJLcsGUq6oo9EdDGEbfdVITgCUDSY0zed2wqSGbtq3gkQvJCaATaBHjOZ3MeH5CJjEBlTq0XV5XAtMCay6Z8YwZvK1qNN+Q8qanLRnYzGuRcZTRWEahjr2+ml6ZcMT2ivphECr8DHWzI4r0vO8EI4+Od0BHIztiEX2F1U8fFXeTXSEylWQzIN4TCab77KvmdCXhJI63Ps6VqhYvm/H1z2FeWXA34Y5Mod5YfxgrTcOJCrNOAJCBPzHw9Qm4fA01UTP/Y1mB2FIq8Nhd38RwgzrUeI5w2sjbSTocxSBMaZFd03ZnJzH++8d/xb//5f8Dvlo+Nc5bPVKqwPFfOr65xae2f7hqksCJYtR3fCeVmGzTkgo+dkeYCzVayrYh4Szws9xvzjlD1MUsgnHagGwilLVT/xZ2+i7dpzjvCxZly5jPamYdzAzQ1tvrjJLZ3NHfuOdJxiQ7nohsSkKjKYUdu/aXCv32QbVGmPpibtyq2S8L95y9j8BCOYkZlGWXLKuLe5gRPZvxnMUFPoKbKpRhmDI456+BHlinOM08IK6NdnlXeLQXQvmRvjp86PGV0XxHGIgYMWv3NZD2AD/SH7jS9o6oHizzIM11fKZDvCFSgXHKWX+2Cm2Qk2In+MJHCuMUeSCXuRzn3J4g3U7oDnAqd5JbWcMyY5Za0enwjhoYKnRrAKjuM7d+qfux3HUmLh5Lsa1coGVnZZG8BXxIesNGI/uaCztvQssDI3nivluMhz6pV6Oc/QYOZNQbyhhlQcSvMWl6ZORO2jcS1fO83E09gInnskonLAynWS33cIXDe7JfxG0UGQ8E2axQlmC8LOchQLUIaPJApLkdf2qfW9ji/IKy3cA7q6SRvyvfjvwcyiurumzODmCKMrVXUfd3faqOa/CT/zNoXuhBZ02xr+Jqr/VB9EseaImPd40XLi0EGCm8i2hmWyvCAiKps9XAl8yjjcgeDQ8ckc1IC1u4tZ8YdnKuwG7dwNWQC07ZHercbtgwaSjSsW7uDHCe0dCLdjytPwIwEcW6+LJBQUDQ/nfSKO8c8LSurZUD6s8RVfv9EoEWTad3U187bpFv1N2C7q1XmAoftvCLvgycBnT1c8TAW8Ocm0+74lbRZI+d4jrs01O5oOqaK//e4OH+RvMr76WySeZ7+/1K1hEpBwpDvianVHkHclDHAvpRGLfO+GsFlH7e6+h5PW8bjsA0Cj1hJvvX12xGZV+RHal574yG4bkqKsiJAzmtq38m/4xkOP/Oc7XG1iR2Cqz5SAgqy/jVd4u1I5SdUomPAkWCuCg3qxwBouOzeq4kN6BLVpKlCJUH9NwmAMK6MhhbbZxQcYeVf5nTSmMGvJ6x0TvkzTauyz3irBv9U85qOCcsEKP3QkDaVtBG4GfCZidXc8ZKjHNiPJ8WrKcFGy/YTownZGQwFl7EDyGpa/ctQw5g6FbOJAa2NW9Y1xXr5YILVmzbhnzZyrrnZQOR3O4OWtSYJRv6OQObkgFxEQ2Yni8HGhJoy8iBJ3JYLgJbevgyEpXuVHGLArrbpjtyfG3JVxHZdW5VQgIwJOIuO9R0qMh3hd+yVYImPuKC5SfdKFq5NmT42pLBGGVOpWuJiq+wAGh4Hsl/VN5Hgn78dE00o7Z2qpK2RvS+V7n0k66ZmXGYdAxpg9zHjSybXqLM6HsPYt/aepZuCnEaZYMehLMrYXry3HWLpkUDOtqo2AB0Pi9A5iTIzjKWWc53I+JIseXYXeJBrswM5k03+CzIOeO8XvC3l69gMJ6eTnj//j2eTk/4gHfisp0W8CmBlwUv5zO+vrzgy7evOIGQ7S4IxT/Ghs36MJW2y93mdoxKNsJma6uJDISiUhjAKjuy3XPfd2yZf8HlfcT8FPA3zKSAA0FkaMYvjL6NTkhlc6n8F0sw3abIH6FADnAoTnOpxGHqgLFGVFO2loRKshZ6HtCqmfwRKqsOkDR5uUneFtEWzwMKoos81zwI3xJ+vAH9Z7gj1Ih8PE/8/T0ERfGOuAP9RKWGbIRnRrFvUIxr+ylO0KaGyLgHRtsh6BngnJH1Pt2sgkQhaMYgUYTj+KeCsrkY4ckYWakVIbGdREaccxFmhfHFu34qcj5vzyg61vdA2LtTZJo+1v9AqBS8I+1wKfaxyrlIw4+Fu4sY4HArse9VUBnZaTwlPgH42xOwvsgGli5/LAdww7+VGdz92Gfn0ybcJD11mAAT3Lganw1EtpnG5ong/3//+CcAGfhqmxFMaQgGbMvz55bhDxRlinkUWALcM0Z0Rx+lpg6XVOPyPFqnedrj2A/yIPebEcCLKM4cTlAzQMSiuKQiSFPV96VlZVofx3HfwWj52mmluFVaHnd7lj9xl9TTOO8nRk23uAjsUOM4Z5MMpR9sPbx4zchKH3MFtwmQ85PnwF5UFc/th53ED9LPh4MR0w6MK3zhWMH3hd+TKOLyAxUtZ9C0opu0Ased/eC0xIC4llh/iyZ2Z3gU9lGe2GktcG+F/3V9BLR6niZjPZXc7d2GSFdUpXWaiebz7jwutLgaKqOG3YIz11Mywn0JMtuT8qHo1tP5hPb5eQese0LbzCMnLD1j0MzJdujLakU0+LcLAp5/IOIP36f430zem+fJjbh6rypWfZvIxXGaVh91IT4sxLI+7MvNsw6tM8R1uCoHG4cvH6jJ1xZfKOWA5/tLP992g9HqBu79tmuarp950s9dyfuf9t5nz4O4EfgzsvMmYsWdfKVg4t9H6Lp2r2mzOb2XpYo+RNjGaX54l78hAFEuA3rx4mb8Hw5UVVDrBGRazZDYcQF1nMlL/DEqgcogr1bSawSq+Z/qkf0GwCijvVrl1xvymugtO8uqdjlKn071koJXHgGQgwXuohh2gjp4rAT0NCmq+ZK34rGuGMtNPmVkPTLs956bOJvlPeezfDfjWGY9i6De4iBGK5NcfcsbQa4uIoK4TpcDDMxyoj6DxUcXFYBzkvXURAuybkZNuXgMlFvZGOu24XzZcD6vuJwv2LYVmS9gk59/Y+CdduqS5Fj8qh1CLM7BUPqkogQmUN2EbA/qgz8w1Bt9gw4kw7aXUcd/FGb9cKR/ZjrmXtpuceZNg/TSSHgMSuAAhTxfu1boGe6EhxmzjXZ92n0Rpaip8lC8Ntl7X29Zt0PR/ZiRc0YmOQyU1VaSgwHaphqBsCTCaTnhdHrC03LCspyQ9ArPZH85IdPm9EvqUC3D6KPyFXMrL8Z1NfYzitHf7C+mSyn/ebUrjigeVJqlwQ0oS+hvbb8Flh8le/z9hZ8G9D9qqCZAu5gbo2YKwxuHCE6r9ITPu+s8VL/UNKZRBKoTBVTl83ehlvKoz8VBcAQ1Vs51fgXad2oiq7tlvS3IhM7Y72ooTEsCpUXuJzLDod95HGEWQbL2hBDgYcCMQ2ZQcmNRziA2QzqjuCsOK2G3Uk9b1LklW0gbXfvMjMrV/VcVe3gFXG3be60dhCJNAztSRrMg2Jb7GtPsKgx7+VrlK0a2c6RNQnWdbkS3P/3+/hfgcvFkURiqDejNbzTI21zUBVGiLN4WQMFVGYnRWJU08qscGOJqimUuuYC3AR9Ejfv3z/8JN5h3xvNwSsvGHYDtdixTRrcrtrtFq9NpKPeT+ekvhHpRTyQC5EoLhHiFIyWp0+iD6o6Jkpz+WrTdPtezbMQxd26A96c1gq18rZwNfoQ+CeD5mEZBWvs8yslVJtuRrQPLuuuvGm8uLu4rQ7ruDg8EFk4HXdJmdauhzx8Y+K0ktxxwRd/yUUFMDu03eh7HE5D+8PYp4G78IdQd0DK29nug38x9+mGeJsymfzJ+cSXY2LX1PEJmr/CRa4rc28rwbd1Uf86DhhNQnUQfgl/cT/d01L5j8L0tbJQ/pgnE0RCVRmWlviMpwPFxAB8nH7v6zq0ITovTbfk0Tt/m694HTfAKRkJjqtPz4ARkbK+dJBmUDl+4a1aDWuOlnp6IZDqC0oFq7CAuAEfRTXGqOk0SIeP6tWsTD/rFWZbS2Yh3RuciHG24Va7oPFwZPZ92tverLa22Kr/LCt0cHBGlW6mF5k3NPLsm+3ZVO4Mo/dlO1a6MSR0dm9DCZnOkgVnYaH0qPM7eiJbltHcH3C5MbbLqRnPH8W7UOlrvewJN3zK4GhyqsHrQbbXM4khfAVm6u9CAapo4jcvN2IQBpb56asudvA5Rk+vf9sR9e39ht7h2dVoexOO9qND5Fcrds+l3IOrM084SEOz+3Q7+j/r79W1kioiru6lGSWgS17DIScZBhnGOijSF+S1Y3OdpN2y1c/T1FohfqZgRK+nwSeds53FpFPYmpmam9ht78UHkGFSj/I1aOIrMRhTmfZfdZI4HxqACKo8+jiqufo6HTgDcKeRa4c1cie4guzqab60sHIw1XdrqdYYvzffKI8seLIM4GvMRiyNAb4ocEMvT0ogeoU+oLaf8lzRpMmNQDjjNELRQuTWvumbC5OuXZvBi6KlzNZZzttPHgG1Yz35lmv2J5IlQHdGml71LcOi4AAAgAElEQVQlEMQwniCnvXklMDKYV506rMZzPRBAAHICL4yFFuTEoLRh2RYwxHBmOjgTYeWMdd1wOa+4XC5YzytWXrF9WcG0AZxkXXZj0PIkBzxOC3jdgDWMgTaHrHguKNnRn253jOEPYzz4JqPcxremtJlquK+GirSNMjQyWFUPhd9edq9yEFV0kpnH18n0NbXgTGBt5aN2HF6Jl90aAgmvMSLQkU4+1efG6wa7rLwvRAlOmgw+4EyHjehcpZU54AIpzABe62QBhkA/EGQNzlkOCDqZEGP5xlloiNES25gDLnoGEVJKOC0nPJ+e8PT0jNNpwZoJKROSeqCjRCBOQN6K8dxYsp5kLoZ0vTs9GNOJS7yllU0gd5umHwy1Eb8LjmdBZ6kw7gfh/z94+GlA/0cL9yjHfSGYT1gqv9zUF/hCpzp4XM08Khd2iIJI5M4xTxE6hYGrEGBunmfwtotZLlFV4IRcyiiCGyMTMHNVNLnxfHl6EjhI72hPYmBiktPnYmyK7WsElciIzWiWN70n2f21y27PYFi7mbhe0zs7ybLN0CsztRxR0nv7qB0ban5fKdzSFY6/vxfmRKjxftBHFNJdm+vRqBnLiYbyREXhq4zqBPzLr8BfvwHr2tcVy7D0BLiPMXM7BpL54IYP9cSgLtYpMZAYRKKKSdG5WpAUAztD3PWqm58PgvduPI+GcrCX7+7cYT96goAaY6kSAtmlG+9AbbfmUigzKhhcyokKbognEJDUOE2suqLkEQ/wJhBaFj1dnTUtsbiSqtAivNc9oB8miknM4LCakFzmfaVHNhpTRTo51h0hCIonm4Kv8cGIXpT2XH6z0sH3qlQzq4LOco0Fc0kDlt3mzMBnwETlcWjGhpt+at8rLWrwvVWgvnfomK29jyK+Xwh2jt9PiAsU4WeQcC/yFUKcWG0U9/P0cCD9v6XXk+cpj78zDOWpiZA1LaAinE3cXtaiJPdlopb9urJR6IhFMcq1HQTgRWl7tfEMBdF9Vc7itLy4/2XTPE+RjnPZz6MySS9h1W3h8tglvA9z946gTEIj57X11htEQ8pHRb5b8nedweWb8+kw3w6fxAd8R9eewXA4kEOFo5Ki/ZyXLWQ3xhjq5olLMACKK3OrbTajLCMN0sEM+Dv9nYyMWvdp4ms42M7Am/CVS33DQucf6qjRWA/5aPPedv0I+Y+U1eZvvj16D/iouoep/JwwHUv/aL13NmB06rguu5WrB2mmbZlENHoXN/SA6kQF1tHnO/pxd8H2cCF3Vw+gVz+64kfqSFv9lWkcUvYx3abEG/qjIorcx1VVDeLtyrJ7w1BOuyXcUvlEmLgz1AYe6cj+AEI7+Ca8vLHWcE+zjuQh6seMAArG87LZcly0+am0E+ggQiK7ezh0TwY46bpAVq9rayoGctVhc9atjW6EMgN62CSvm9bZrhQ0fHbxhgqPInGDnLFBrh2Sd1mSlDL8vmFibATIbdkLkDO2ZcGybUhpQUpJ7kGnBRlPOOHJO4RZrkW/rBmXdcN6ydjWjHzO4JRV/78AnICvGfzu4ld54rQA5zWo5zYPw1VOHNCs478zBlCHKJKVtQY7pVu+sW3u5/D+KoEA2zTYrsNbCudtCpOt2bF5edR80ZtB7JBGrivF9/LnFMSj03lP5203Qb+5fj4JzMfQBajt59R/+17B8J9sE8RgfUHmhNEEO9TSb4qG0g4yV+isp8+RsYHEY8S24rJecF7POK8XXNYLOC1YKCEBWGjBu+dnfHj/Dh9f3uPl8oItZ6ws1zsQy2nylAnZjOCqpBTaqB46iJAS5DoHkgNIbMb0lEA5D43otiHG2v1aoUPT/dSD9xFnqAu8rY6f4ZHw04D+Rw/ffabQAd4UlJJmAcnsruPsDetRgcwNbUbXuaQewkblN7pBtrMbblgPWu9Q0aqM6BSqUOlKmYPfCZQDQzHBJCW55nlZkJYFSIsazeUUJiuMfmKksioMKCGb0mjG8wxs6rI9N3/RAOVCYtvfR8OegLLH8iMuFEH12uKqpKJunG4Nr7PL/k6RZrTw9XCYrJxUO6xjf03Sd++xnCDFhV161VD+AuC3sxrPmyKsHAqnB31eEsiM6AT43eCNMZ+I5ZQ16TOyLjgoHTBjKxL0YltFolWN/hv+7dP/g//4/L+Av20oJ6wHhnRrttGXXwH6rGpAzgUeAMy6V1IJGasi6ME8S7ixxYzpqoG4RwitUCTWsguUNphLclD2+Dg2PhScQCw0QK76ZW27dLopMlydfreHsfDVRzlxqjRKrsqyfEZLw/3qFuckKBQey9Dd4q6INR402CxIdj2FCur4TU+Ufgi76cPd6N5/cXv0pwA6A/gcm8IBpqbf/NeYWKsktgmbsEsPrjDVnjjuVnU99IrPa4eOO3QK8A+U8q/132wjSZehHdS24GkF+mubcYz4JNTlWfkmF6grCruzfIQYzgN2qnW+yk3cZIzaJr7KRsymjqrv0jDO6YDLenoVTrspr+1C+xaUfsIsISZztaEjQDV8c1f8NiapyECROGb0YLT0lQCcQ8JF8cFuJmnGg2bzOfBoqT6Or9H5WUY1oqdQl/fHAB+aNnQzwtpP4cNMrHRZosXXAZiN/DL00uC8zdKFSg2uDpFQ9XPBn+AlpV3giIuQVvUQTajAEMak7hq7fsDiWdMUfHbdRGUbc7YgU6Qsdy360RbDCijGue2EGxedq8KRiPilDQUWqinZAKcICIb1OoTLaUL87HRI26Gm5wUZKMYXhtSPWfU4QrBx2v59IjvY60hsOBA4zrd72GcryoWiqqlzRRyZwjdgK4c28qLJMzuJPitzRnqPBqZu8dqbQeHDrI49nniw/TMnuNfyU/1PCTbfZ/lHG/G6d0vbxAcEem1x4Dq45IOTKuCqUhpWXRDEqIHrRbV1KKSTfFN4jF9RoTBddQputwHNkO01xaiu4hgmct3hEHl+E9MgwPVNEa2XoLojpvmrCWk88CidmOD1SL6dyYSj6PhtNpZhPdIx5aQe9io4lIM7bvTbvElxjlgNSSAkLrf7OGvIpV1u7Fozsl767XvQs5i2kO3ec66cVtZ6+KA/SOeTrxExzEvfZvBouTIHVHdfGKANzIQtL+LaeTGD1oYlLaBlwZLEmM606D5VKVQM6IzLxlg3NZ5vRd7BGSLksOxI5S8b8End86UFeMpigc/aV6TgmYt7k+t8freD30snAPq1loYXxuubSndyiI+4UPr4Fv3c1lC4rrh7rFFeMa2i8y5RBvxm/Z99LNr6TMOaQlwZ8yeprvHSET/qyu3LuEoFh53TJJ6IHqPKGHDnBHHH4wi6e8S51wzuhh0tBWTvF7/egeJVD0pf7HpLsNANIrWLEDbaQBuwbivWy4rz5YKX8wUvlzPOT++ABaCTINlpSXj39Iz37z7g/fsz3r98E0N7vmDNGSklP41OtImmYlOExFNp58YdcrI9c1ajekLWspgZm9uZ4hzVcKcs3IbRhsXpafdIZioh1D7GR2ryXAf2p5H9dcJPA/ofMYx5w48NN8DTkpChcFsphEHQ5JGyMwEoCPZ2z7jclWwl1G585TRRUYpAyRUdsjKNkZjgpYZrNoO1V09qPJdfuX9HjeeyLAUm2UHFpcKS14WZ0jdyBbQKom4o30RIzGZEN2MhAjw7/WUd8GbU9AqyBsY8EpqO3ufyaoGa55lidBAFH4PFJLCIFwCGd403gLd1xzL8L5V5Fg3nVRrUv5bml38B/uuLG2s7gd8NuejLBOp7wFTpcoekBHXdbiskphXZkqziKwFlhXip6v+3X/6E//if/w43OFk9Nn9+YeCLZeCCpr9qutCVdZorQjprfX4CPRfawpB5CsAtH9WxF1NGVbCK3sRTIVPupc1OJmpfMgjm+d6ndYFef19zngfJstOYTEFk7wZJw9KA3OThjISk96lJOg7Gcrn/3N4hmwZg97Ax+K9ayUcudTJD+lk3MSQOnaI7hTNkzDOA3wrsfcdx/b0KjEEH1O9Xu93meszeCvIR9yztHm1tyuHSdn+nmPBtgkybEZyvpJm8ZnA5Q2Fr+7yDd9b/UQMaBW6eo7nJNe7mV8NHPB6Ut0wX7d8scNNlI8VwxnCVP8A22hCKj8qWDvO46LCQLeIVhXkCXxRq6yzvXIrx+afpDIwU4lZG8Wcd8IlReER74qRVhCMxN08luoAam9Zh3AhVI0q14QgqkMFF4X0nvSY9JF7egoozcjKJO0Rpph1n30oPuz6gY+hrR7G2GTp38NEQQBtdap7913mczQP2jiad27Lx7xMIrKiu8RBPOvLtc123Fi5iWWrAtXbVnU115qnY/GiYuVisRQ87PSUxQ7Lt3yZY0QI/2Mi8A8A4jX0b0qVx3a+2/3dWTiPCdaT5lvofHfRW39lLN6r7rULbrtn8HcJAh2DjQZuqaXZPuJa33ay/l6/F2W4j0duH1nZf1NL29LLSoLBgPb4izph1W1HzPpkDvBfZxTWT6Zrsfne4gbnfS1yIXPYYR1/xbHBgeo+z21ya6WEHwx6RuzokNwop7bw+nQb0y+T/Uf5Yr7Q7ZcjSjYqWyQ8VQDoum5hmF+dof636Z/Q+6yZ0ExsYjZ6usKneaCuVNYhcjYlvWqOs4FsfcOhqhlw5x8gnABC378QZtIn75y1toO2ElAjL8gSkjEwbaElIOYvavzHWS8Z6YaxrRt7EK505K+QLA88ZWJMsA3y7AKd3IErglKQjbd1R+yGiVtmAp/3RHSQofdk9/4gwmvoMN2a2oef3tRwq3gOoUnt8HCPDa4qedsMeafrRfTcKA7j8tDYEPyjEGP4X/sjlBqlGJOx0teZdpsnx+8wfDbYhws/rkNIPrn9B8doHzcvQdTs1XFsL9JBLJgYhIy+EbdtwWVd8Pb/g89eveP/0jOfTE+jdeyyckGjxE+if+AMu6wUvlxe8rGe8rBcs24YlJ+S0yPUOi6z7EpHeqw6AZH2AUkJiRuaElPRkvLl+11PoFvyQWOkQbStwDUH9BPwgSXVF3h5PZKBcMxmrO8LL+zSChoWRyly+AsPPcHP4aUD/o4ZdBR5jJe81wx5h7zjzgTyeps1iQqT80pBOKTOvjISlLNZ3JkIyN9CI16BawgD8QDaQIvU+R9t5ZYZzP3EatLtEwJL0zvOkcMjqapRVvXRvJxVYlLCamyaRbcOJc9sumjfE05n7BLgJkROOvh/JezhJw4y4TVl3fFSW3zxYHVVljCG/+i5yTYPT8befKIO84dkXecJcifjmRVKdvqsHwC8E/Pk32cHr+cuEI9sUEvuzMsjHPxPExBDChuW+bdOcjVLjVUGLt63XnKXOzMAz8B/f/heADcVArXOTAHxiUfACLjII9CvAKuwxWsRTjZVX+MXsJpB0uBBogUvKG9x4D8CNJ7bXJZIgh8vKYE/jV5q5+18V3E1sVYXWWuVkxBeSDMZwIqLBnWoT7mR++6lPWywhiGG8XVgxImu7uzMZEasVs1zs2z7G/mf0LrznSAMDHf6rFmiGdKOy5sXAaby0mxeUMfwVomhXJ9JDh5TOHHRMpGk3CKmE0mfdylHTl1VUELbB/fyvYI4wcRM/wt+jYdbOnmYwBiDeW+2rB+r7gADZmWLv0XPEkXBNIAuT7BM13xr+4/QgCDXVQsaVqmbQVRN8At9Q1Q88qKvLcLnBt11IokxgBRp9phDPPldMGSSjbaP1x3Yu+dzP9fcqCTUgNxc9xHlFcVwUtmq4jF5ZUfrwrpEqCcBZ406DPjXX8ADMvRxt5DxyJK6wwupVE3Vd3WJZ1fAhT4vt1kTT4aUCzBDHdvBqiL+xDJELuupGIISoiGVdubN2cKy3p/mxFbHfPW+k6WkGJNddT+Vm+4j7xOE0JEfMDPkZAD6YaFVDS4o/MPHFTmn+gupkO3/WdlCFQwZt1S1oun4mL+xHD1KOwzT/IIJ34g59i41tGzB6n3ZKSEs78VXdlUA4iMd+/LUwrD/Q1kdCw6bk25VCnWYGWaiAVMox70Ff58W8ZiDC0LjdJYptbsLV/LC8B6EfyOvjnNfLq8TIKuc4r5+6Ppj+euCpuDy7sz1+Jqt9TJ5LA+Om8yDH8ajfG/4/bZp74RgBz4OO7Rk1DQWXR8OY08U47uC5Frh5TlOUFbY3h4GA60b23RDHhMfKRZu2Rxp9Hsn0rRzeEu5BmaOQ4gEFzar389b1tJ76IiT6Qaed78tnFNu1fTd03OCJWHVVBsAXMS67Mcz/UG1oJ+i76e4MELEe4Kn7rp0q5uWmiE0CVLKNnyrHcJJN7bwB2QBngCgBOYFoASUGLQlLBpBWcFqQNtv0x8iXDetlw3pZkbcNedv8YBHZwaZV3cXjBHzZgE8XLOkJazqph8NV255grtXLHfE2ZiPhoiacRcRXutIKH4/y60cK4Fk+aqZOK3+3TI2hpzUqsEzM9e9xfaTJ3pEmCt+HcNegTfvz0f591LDIGBsoq/bG7asjdsVaTumUwvN2+LGXuBPIUvXpysnzMkfLc0nDzNUBF3D5bt+IAo3KDKYMTuJVI+eMdduwLitezmd8OX/Fh5d3eP/uHZ5OT3h6EhqTKOH56QmZM17ev8e7bxJ/WhKWlECUkIiwpMW7O1PWqyzZD0taBycSbxjivp2RKLh+11/STbcU2htH6h69ZcbjdjeIlR5X+HvEdty5kbQ8TIJ+hi78NKD/0cO1ibgrXN4bjpZHg9/JKoUzYKrgHfLQ0Rc30Jmbnub3iMG/WgzpFaeKh5vRPKOhhgS9yEPu2NC7zuW+c8ksjoyMuHLgOC2MBShy5pTlrnVz3+6n0Lk2MFZC04Rk7lHSVl9yYs59vL1fQQu2U33tTs49ON4CdScoKM+kP0cZ53cI0dg9xBGq3wefuvLQ/FH43uiK5dnSPQFbY0jWvL7jmBrS05Ck8iT5BL1Uk1M36HEhjzx9ve1E3UbAfW29y+B3WlZz4rhonQx85rZw8G8QI2o3d0gUQbbZy7CNMJ0C4He1h/JTwHObn4GY1A6vTCqK2mxMqcKtKynsi+GlinL62367uXaEJ3TIr3OjEsWMfqngz0vJGE+Zu/HbjtITqmYDIDVwEzM4ixNXzptuVAon0rMZ0zcpIBvtywWu37TdH2sYvU+rRU9yNAIx8AuAv1lybn6vd9v1fhwleJDQFS12Tva/BzEjq4hQWXB8flD16XdBX2e8twVwprTvhlkrCfhQ04FOgeoqGPTnPcHHaBRmSDNimnvfjqpzs/r3GsjePcJjivx0fapN2ucyX4jnydgZY5stuvAAdxxuGuNUBR+N0SE8eLTBHXhKX62et5tZS46EChajNXt068aKRqLNHgyPJSpJj4LpxvCdKiJOtEb0YZ7+IxEhxQ2Cyq+KGGV1aBpmAB+FdwK6AXAGX1MOyvbEVMkDvyBzvYAWQNH8jLLTrMTbz2uL7V0l8Y2BOJiFAg3k9wowHj4WOt/k3uOnPCnr1m9Az8eruJ38ceP1LSHMg8q+c2PwYejyz/C/TdboH7eGRwQKmryMYPkuu7nfNrSbrmTOUpOmfueGJtRXP7wBXMdyFJiU/nKJ0vtcAWJqvjf7faNoNRj+djMSIGpqfqADhvupXi0MGtaER6aKb+4atCHazod1PNrubq5eacmU/07ym2C1B+dUBgAqg7iVQ3LdW+08MBX8i9e0XZGFKO6kzwA2Nf4UMdjXAWQ+qGFpYzGu23dLb+oxk86TLHZvkyuR1Cu7JmaFl8s8CoJBaBMKP+LghA9QuzqDkhUg7c9WaNpAkBO8vGyg7YJMJEtDSAA25HXDer5gu6zYVjGi87rJOsG2iYH8BaD3LAZ1JPCXDdtHXbtZEnBKcl+6jodfe1PJAyNZ32gO/1gldk8PAYowNkzC081dFQ10kTPoNcxh3/+evnIgzOCbzoHJWLR5XmNcrpCX0r2t3hpk0dBtpPOB1dIci5e031e2cON5/HVFksFcDshEl+1y2jsjsR0oFCM0nN+ilqNV9c0A1pxxXld8O7/g2+UF3y5nfMjvHb3keqmEJZ1wSguelhOWJWHRe9IXInBKcrKcxQWnOCbevF1iDqLqrxyKus6C3Pi9M/5uIziAZ9E1/rGNY3v8u417RPD9GR4JPw3of8RQzZU9SS6kp8H3h8IhjXg/7VA5rX8rOuzPVGeg5i8BbkgnKvcS2+ITQY25KFzNqRtFrtjwZv1oMlO1izMIwFb/IsZzWtSQD9vYGYxmbkQPTTJhJSyGEFDcpJjrpeq+8+rioro/K3w5QGido0+Id3UqJ6Rj9AJAq0jV0sJg4WkgiDwqVMT8o+36Tfm+cODb6dr0zftb8a7qFMZIq6IGdgpp+6SljCBBUBOnyl5U/mRnnmT45//x3/CX//mfYb5Z+uRLGe76icowI/4CAIqgxuFbgane9CIxslGEQIC67pErCwiELILJr/8ErP8F/CXkJKDMCVbjeexbDZ+gikEWI+pvVrMokbViHfC0GoIw/7y7uVwNYfCYlrboHGC9H8wy2Xx2W3yhM+aazeARkiOG9MxcBLThb5iztlmkAD+djhTSOu1Semn3tOmNqSgDrzBb06xeV8wLDZb7t7IKmGY8193kmcEIhvOsBVYbhrbgUsTqAfAbAx/D2Ft/6j1tPj42dknL+5SLS3ejq94hzYTviNuBMKUhhcfs5mtpeqtI8yjdaweFdUCWerpt7+H7o7u+HwkVbUWYzi2xsrGg0sfUph1WMH429+scy22TtQJIkC0qYHeqHMbvJWjK7JJGQYgmdfGg/+w392k9vhG0dldj2vknC36lnMF913FFN262KkXAjeeV+NHOc1IS3cgFkSUQlC7Jc43iCse3yOdCn/nwFqGp3GnddIHz7ICP0+k0oAsRJAgH7WS1DqbBmHUnuAwmrobKwI28foaNFSkcRRAgq9ExssWvmKeFMcRNosZlRVpnskuYm1y32ctux5XCxzi9A92vRY1yLzn8dnAG8FEWtU2W4P6ESTIZjrNuwpX4rLCY+FHGPmv9rWcDLkPrAH4a8L4v05nr35r+5tLiaWBPEudy80bkae0MTQ9AkE2azx0PHjWie96ZW6NwVJc5ipPtSje4MxYeDsaWb8kzKmOW/zUXhzs9M06cuwttfsev43Y8IMs8rN9WPwerLHMFCCJww7/LvaC1y9Mq84OhLbbvDu6+R1KcHEZJ5LeXM3xOVGRed4mYLVOS9Uy0QuWG1YKAzKLxlARVK9Cd0K1i7b9Z/tcKo3KVg4zWNg6VM78XPiYfLbUcrs0MGEfgGQIzGA8AYzl3NN8pyI3cRNK8YZTKzohqHYnq9yqYLDWANyJuJlCm6iY7MZ4zaJWTnnbxuKnYzDmoyAze9N1kjfDny6CeGUGeCL4SrEwRTgQUHSsRrUN7nDaZbGIn0A1+baTBiKz7VknOLCzmZeqMBVnuPdaO4XXDdj5jWy96An0FNgZtKg9t6rXnBcAzgK8AXQj8suL09A5regItDCybL71wFCNd6CiyTxmbRlju5GpN4w19JWJZKlAwONTVpahgG4lCMDnJUhAKVaqmGAU5MSClXr3oIByRp0cC4rU8M1qgbSjlNPyrK+dgPVFGn2Y2vKWxHkFVsorUuMt041WeYdyBYthueVWExEq4Xb4cGdERdAUr34zp0QNvzrIJRr4ZOgaEY8jmnWSrhoycMy7bipfLWe5AXy+4cI6+RrGAcCLCaVnwtCw4qRE9pUXuQMeCxFndubPSkchPtS8aI3p16jx+03613reNBL7O+pB496C3laZNLap7r43qaGF/sC0/Qx1+GtB/hjcKM2FxJ300yllgY9AmsZGuVXEhJkR60tx+y6nv0WKv0xmOzMtgGLTBxD9jCNFg7kk1byK591yN51jkvh0RTI2JUBFEVFgcETWTjwqQDGybnj7fxHiYw92H/hdbNVEcMPk8SvYWBNeNERPCHwx83zNEZgq4enAl05tBM6nAlDibY+2OZ8Pj0Ic8mg9Ul9XGUYhLBPxC+Mt//hlmMJes8p0+qzBiBaRQfCNwW/myw89ctod8rhwg4EDZXQgwiGRHMYHVKLqB/vWfRfD7C4syWc2DnfBL887oDlfdFrgZuvDuFRgNMfiCkZdRzwknBIzqlDWAsPLlAmrdZhNmD/RDuwh5w7yXoU4gJOSsBv5Mui/AYKDwN2hGzmoLyHLHeWYwF+8apL/AphuIrD9yeA7l2vh/1rZ9gqCRoz0XnI+6S2LdBou6vHnH3dZZ18Ls5KtVNaKL1fjW8T4FR6XSTl1HwoxEDcIR3fq7h1ubP+NX99Y91PCv9NKjY7YHz82Jb4WjlUtG8W3Z1MS39I2AaERvu6cqsqWrMzhp8KoyaFgZ9hPBaYAXTPWBdjdCxvZxDd8KUfA3LrT9g0Z+LYb5uFJVDAfoFr5KFzLGfu5jQpq+dt84fuDD6FAX2fbXoM79AgZhUojB6798NctuhXHTaEK9ecvru1ImNZ+YitgU5LAiQjCAD6oLlTokfozMhBTwtchnJi0Qki94idhBXqadSvNYrksWOey6mDUyyDbsfxp/LbAifLMMXKNnhHmPdkcaMcLn7nnCVGeb2SrAZzBE2XcHzo7dU/nlK1rL3hx6hEEP+dmtBRxJNkinhtObbIIheLam7BrlRzwhvgwq/1467OFqqEsbF91bA3r/vQ1cuZK+OexkHLGxAg+EvxLV3yw973Q9lfiWI96CP8muD5vwm2tF3Yurnv/OfKZC3Fe9Mbz9yW7GmEPBRAg3NCgPmhoeHpF/r+R9FJEjLSagrM3084rbvHuAsPSpqbi29skAsDJ4EYOzJGVkZL+IzpYF8wYgb2Bbe2FArr6D7CtVnkZh0VG83RHEUJrDrUQqFZBt5lcOrMSAnBc1/N/4ZpYTzH6TnhwqF1mE5FSp/BKADcwXbMhyV7oVtW7gdS3G85XDgSKUoX6B7BRMG0AL6MuG7dcVz3TCZVlE11/ViF7hRzNmh9BuJDR/x9DBuAKyCb4AACAASURBVCeYxYcaL+OyYd1+04Hqoiu9Yyrb7IPzuwpXdBE/qd2lCfRrv4gqx2uF1vV6CccIW8zPqiex0R4UV+3yUwzpTGHCVdOHg0nCaAaQOeOybTivazGibxnv0gbQCUaHzKW7GdFPy4JTXsAkd5vnlISmuU0mGslVbiH4WCVKyHr/uV+VZUZ0FQqqjQQHwt6SUFeOJp7l8Y0qYURKZ9Ycg69OOElp9rLx+8/wSPhpQP+7DDR8fFC7rcuZybVAWQRwA98cPP8QDXgDplTWgKgI2543GM8T1W7bW8OgrXkEJtCsWBXhQIUHN54rQyHWXZG+gqWamBHlJYnApifPxZgX7tXptEGEy43LJxdkGeVOn5zBakTHpveeu/GIy59zrUHoFnq77p4Aad8bSWhPUWqFplnamRFdhfKH6P2ovdTE37PQ8VrTabeOSSXtbubh7uaoALTKfpib1Q7pUg5FgzsR6MMC/GUtd3upVwV8kbQmkAiT5lpx8lWWWK8Zz+Hzp4JDBTAAjs9yuzqrgWGTJHYimQCc/yy0wfJ28gfFl6IMmAD4N2tvA68bl6/cWRfLMoWjHYq4gpHjvIUqcVzazqFc++40K4DX4onB4QvrTbxtFAlgWdX+gYSslA1LpTnM0ZG7lJ+YQHnBgixGdL3igiuFS+l3nJIWl43GSd7MW3XHOZmWH+8+t3c3rk/GBJAT5Z9C36DtRw7pSdy/fxkR7FcOww1UO8RlCA4HzXdO371U3yAUcPXmEHB7mL8t28wcvxPhvZJRbCJpXGdoDfxvSGOb8HH82UNqe+LIAIR5PO3zCNoswY7wdgSMqu5GsLo6tpO+6+oNspXFV3IEG2EqBQgzQLl+Z9AYP2Ue5ksl7wS6bWUYyU9U+EJEA0a1/6ngPfudiIDS6EouMxi4DG1SV3gVXFphlAf9Gxze9macugeUmA/7BHUfDDadVgbj0RhXYxPAHpURQeoWXFA1Wb5zk3dUOE3S6j3fhXENsx0OXP3IU24SjAeggbOGxUSgKgmLZx3gg+CStZsh+kCTP764+MC5nzsQ/BE0I4AJGSsQlmQMPDGVsBvWLY48tfqcUZzJ/LESrdoOYHyxXjrA8kjaDoDwpehbIHdV35K47KUPyuP2YUDzovE88q4O5cpYDPE88pMRjl3TN2a6c5vG+tg6Q+suY1TEmZJvVuCg31ryfiTEtg3z7zRqqu/U5dAn/fAFHjHCh+OBrITjsI3woS92v8xxYfM6d4u4nrY1alLzNDd61npPPJGebkKOBh7M7gltkLBJY6x7NGIuBlcfQlmA6KfhHYCqbT1f8bWfqrIw59rKwR1QXQtnfPRgeGjTAmS25EdK2MkqJCie7+cuHghjrPKa86OqHOryaeZJ9+3N3/DQ0bhAYNqdDbvzKpWfuG5RrTs29HAGegRyJO6w3CVMmVz0y8yyTqMe7ghQw7lf9gYzfOUtg7OuuXC54IT9xLlZ54OM7Ab7coLUPmZ9drkzGs+pdJutC7Fb37UkO71s3e57/RhMutNdD2rIMsmK4uUQcpo+ixEdm15luXGR9wgqQwH4tgHPC3CRTYP4cgF9fMIpnbAtDH6CrKfaGFSsn+CNrLyVxvEaMbrBt4hmHkOTfKPQwDGOnYQ2Q0gdZRaqm1YnNSSrEdQPhVlTRoBwEVFaWWMkQjmSxwJmE8fmWcdLHqGS94Yahjn54CrS1mJ42oGartpkNI6f8/m9MlEMuFYGRzfu4RQ6BRpihnEl9QzzUOJEHeIJg3xTz8YZ67biZT3j6/mMb2c5jf5hEffsBvCSFjydTnh+esa752dcthUrZ2wrg2iDyboFfpUpSNagEyVsajBPKYnbeTIPqfWJdGsEFyTtZuYs9KKhfIg+aLpT/l0ZVKYhh9xhXd2v/W1q64Dh6+b1yuR1vyjyDx1+GtD/sOFWpey1GMlIZdmrd/TeLmBETYj6PEaEu5Ko/FHzl1L5XpUVweDmm72Ty9FOzOy3WgAN9QEgSmJINCN+Sk6oAegVHTuCUuP5uXpW4zm2NRjPt3IHejbuxceo4SjJISJKLswfZC39F9cRmrhucZNG2W8Ls80CLTKNdp9RzHBPeBT4Wf4r5RIajk7oOHw1N8ZjRETuyeHXf/t/8bf//D/iOj2F8n6h+rR2MEi5juvFx75sTp47TDpvWdP4GCQQNh+3Qi5snAg4/9cNXd7U+zSSRDEp78C4uKGloXWuGEzwilDrRi4wBYXDBT8pi5r8/YvN2TG0bu9X4ddXoIwcVr+lEG4ieYOeEod7sheFn70ZsU4OtJS3LAr+piK2GtJ127wK8nqXmRoPShmMwcVl4/79jNq42QyPPKriMC7h9hB5yOz7I5U5jhTBv1RwFLg7A2H/YGtX9gi+15JNbg1U/ex2A5WH17z2ru19V7xamIY09DXDjB4NxmbIF7mJn5RfyXlcPkSDcX2B2oFyDfeNL3GYb/ru38PGBWuHG9whdaeAF9VKdc1Ho4jAxMCJSpX2Z/crblZp2DTmvCAwtMR6ZQqXRaov/cagyvDMGBora/lmPJRX15uuoVtZDR9kpMmbfQs44XVNBNNKTDkoFzIKM+VwB16VYBQoDO5OqHZQDIrs8tPwuy36GC+XPwLhPcTTTiECds8gtfUrD6C6o+Cu+UPVXprVS3C332RzT/Elfm+7hPRfDg2PaJgDOxr29IgfxjDpVv8QRSqQLuhzDURXwA5CH11FOpxu5/ueCHnEaDoyngO+6Hl3eIQV/yg2bpU/VD8FpjuKnpRP3cO8/N0kV/I/2jxgahw3V6f76SLfKwv0pIrDvbAdPanstCYsbMc/Lw+jfqrO2FdpuYkZ5cXO9ytIAQy4TpXszqkqtPm+vIAYP+8eM0wvTAFAV+UMN6408cGGEdK17/Vdtg7QXmgHdjzQdZl7715f8PwX0WFkPDfYiRoMHNSxxx9M7DMRklQHds9qhRtnny/ym2F3gcM71cfF9Wh29d/WOot3FxFiS3ebIS2Uoe2WsdK5TQyxjpPenWzAB1lfZbRCTnWe60KCXF8Z2m/1bVnbxGUtoFpHVXx8YVnjWTYgL8CFsF5e8Ly8Rz49gdcXOfTkV+1ZHZHKhPHi+tN4rALiqsJBFGierzVamvDu4QEiMZWBLMoVh5LA1nWjbEmBJxDKLVijMn1sB5XGfqvg2hOUImyTZJa00huPTvDXCIbDHOb3wAw+G8oqEaN4+Pj+wQ7K+LOthbO9w424ZQMO+3q5z8GyyI+cs3ijJAJxxqLpt8y4XFa8nF/w5esXvDs94dO7hPfPya8NPS0L3j0/4/2H9/iwXXDeVpy3FWs29+uA33FOov+I3UaIkMWnlMCbbDYitrj6L24isHiOc+KBcNOVJNZx1feRYnk/TI+5lf8ZLPw0oP8hwxHiWjOS4pL6NSbNUeLeMrOduqdCZ2FOo7qN2AmXL3eesxn/4oInXCZ08l9oSJTSC7NuxPyqkEJWAyHWk7g1DFZPEFiKpFgJFSb0uWpnMmZmdd8u9xh195/bIpr/Vb007v4iPWM/DMbRpPcbgxtmCxA7qpyO655CcSSM2h0MhF5VZPxV3kajm4Vh3gdCnAvVt0MZdzKM4smfq7thEgG/JPz2f/8C8g0hmuVXklO9ceOKFlW5N3KhC2Wu2qBSyO/ztcDi5WWIgqX3ZJPtdrZO/ijl8J+DgnjUmPgbgH/R5z8B+K8QV5GdKEjNrIYhTazf5yQH5Ssqn0lz57Jpx7MoETBhEUYq4+K17QZFg4dhrrZy4Ow5pqtwOLTBf5ygCpybnB5ncHHfbkI5U30SMKtgDnnO2yabhJgLXYsnzfWee3fV6YJ86a+6QZMxtw0fn9r2q3ANlrq/7E/gm8RYw5+INkaGRgVMN1iM2jQaLOMhVH3pORo/QFsJtYHx1vAoYR+FlldZPZOk3Spd5J0T2kkQ7wRHwJgFLi63u6RxjGeknDDBhREogzHXp668ro5RiQM+efc4OjFs+F3gDxwFpAHRGg2FE9EIWltGeI9sh2IZAcR4ulnpLEcYOJXFMPMwYOmje8hq4MO7e6IINK2wVK2nbpM3vVXyVb7hVCVH21l2EtkTcZ+myNcNDNUCYZg/VUeyj99Q90jNt52NZYcCN2PsoHLp7yMhtR08g7FlPC3OWQgDGfIT6T3lGpVsIRXvQQHXyevlIB+0knOhZRTGwJtNcGnbl/lUd1jUG9AW7kCPpTIIibhDAQrxkd9w7L4KyI8VeS2z/WvdbwzVE77BTqH3nRoW++EX+ghsVxwFOXAzvApkqXxrcfVAHQdpdEt3zXPFvr5OFR/wRfljNQ7qjnR4kubg9Oky7+UfbtIat6Lbs+In0QO/uCc4LvQzqsLhvfHcq3tS9tEwdhd7Jc8A1plxvHP7WqULE4HtdJlNsDzK/VDojUhlHnT1cKm9rCS0bRnltJNrpYaxuBNkgx7SA/NBtbRZugfw9ShpGQWjlYdDqMsNJ/be6V2D7BWsNeAy9fYaEwWUBu7ZRrduuBtBqghU48wxXXUPj5VFtcsYo8Pm1r/DuVhmuG6nahsCHeqzA1ScCBFkgzkTkHJZByXBZJNK5GRwkb/YrMuRCXdrJSzGpgAAq+5dy5ghnzU7rnOgeIpBIrkHOaOU414K1bDVucBjGH0xuNkZvDcQlNnXCTxe1/KIILI3A3hZgfdPwGUDIYG/ZOBX4ESE82kB1izjZ+mj/N+FAY0ZTnOu1Cp2uaYMtMNI4QRqoGk7hQ9hqHlkkbsrcSbqH46/KAXYvKISZ7SVXbbmUFDAg7115ZaNXTWec/M60w+UFge5f0hTqk5oyrzXoKjdwNr2uB/bsTkOedWk8C/dSJNfM7S7luwzwlW5sLlLPvTRCBsN66T5sm7IyVnWNVnvLN+YsWVx4f7t/ILPX7/ieTlhTc/IyxNoSUhEOC1PePf8Dh/W93i5XPD1/IKn8xnnlILxPCFRKs5E1ZBup9DNI2lKCZwZRCmso9Zu3N/CqHxXuUoD6sMaI6WkrgfAm7ThZxiHnwb0f7BAmCxk/ahQGcAnQnQkCCNBnOKfnTyPZbf5GqZsz8b89c6fKMv5zv4gJ0SmQ5A7sfz0OZEbG30T47wT+i+MxjbB4JyRORrPubgtZoZIp6OiW7j75r9pIMDuKzPDXw1MEPFeG6gocFffGw00Ki5VmgfqnvO6BwuNz+E94nv1HdfbYUPi86W4t8FpEeUjLS7k0SeSxfmgHfh0YUAvr5GdwwZbhDEokzp5ytwNcPiiCLPjjhfFkPn2UWv/iwhL893xVxoPAOcRIiA0MOLuJJ3HGQIEJDDlcmw11eySj8Hef9bu5OMi6X16c7PE1IEWFAwOILY0cG8OxqZUiqzQTDlFXlxAyR3m7HTTT7MZvGU3E7Bl8LoVl/Z20jxbX4U/LsBQFOCHAO8g/mcKp9HDwjOjuAZtCn2EHLxpGG3+ORAeJlH0cAmvFPbaHufilWQHmsLX3LMfGAbrth/Te02tt6LNETwbsKFhfS4DXCmzWpEYCDkcOrPdQBRpYpSD7JX6pF1wuj2Dj4CLcR7SBZVOoChlOKxh4cLlS2OoRQCNizIFnlJdBZsvgNHhrq2adSBP3awDclKQpat87Ykf8MT4+QjlHQp3x4qcTdB7rBdNligLUyiS8KFaRPXLqoxocL24DTTvhFiqSxOw+sIc4pAOANpFRwql1zE8TBfjGHC3rG27j9I8Sfd1J64829+cpjZyWIuL1wGZv19LfzQf6jHY1dcD0pQTwT05q6TQFm3tPR2D7Wp4xKoHXGfj9+a9Wu8OUh6lEzZnj8IRBqo/TXzUKO2z++7QiXCd8byJazYmt/vuDtbaVzUAoV0M9jculOueEJyiXklX/9ZvDWxD2SSkrOL3238k9DT5WHh0mhP2TqDfUZ6u/1UnAIHu3fkZ/6gVTCp/3X0rwHwd8xpRO9gahujZBJUHSQiHnwhmAMWQVKqOhCbIqBUe97JttTm00789Qh/ZxN5yc1yUAyCGLmZW5NFr9wqQ9RWWtu7hsq2kZ1sPINJN9CY3a7m6ZuD7VtP/z96bbkeS42iiH2guKSKrptd7bp+eef9Xm+nuO129VUaEJDfi/iAAAiBpbi4pMzK7gpkKNzNuIIiNBBeyDfB4YeARwIPk2wteXr7i6fEzyrahXmSx/qveWyd9c7aLgqL9HYWwQHmepNujQnM3BwwfgIR3OwLvkI7fw+mYwOP0+33CuvZxB7p+R1+gzIwsnWutZhZdS0XZKkoFdip4vb7i63NpO83LhpfHP4IfKspWsJWCx23DXhiv3I57//O3B5Rt08ETCrXd5WVrc8d7rSYbbCc5+pypPnfnu5vn/k2FuY1xPruOFT8Knh9hFn440P/bhjBLh7yS6L2hD3Ckruko6ng6IxboHmLh6wyEfkS67D5v9zYXiAfPASvWnVsdNwzB1GITY2Gc/2RTEAxZPVkA226xlQ6LlqvVyQ7aPotB3UijFtfN837PutVbK8D56Ha/O/OEsHRdsdyFNp0oOujHWR9NBhCmrKwinIPZqv4lNIEbzFL/Nq3pUL8eTDgMSd81y4NxJj1VPRx/u4JNadB9tudGm0wE+qu/AurPAG0gKhbPgLsvfKLsdRCcZ2dshbYfhCrfjMUY7dt3clHUjsgddvm5QiYTU67wnuAl4Sbt9Au8G5qUOsPuyJI21j0mU/zanbnSR3pkGReZ3NnbhLTIhs4rXT42tuht0Pu+epMZoE0+KA6DEHAsmHVDoiMbrCL8kSunLehpf6yD3cpDPepcNwcKuPVjvY53m0MH3Fle9X7vWm4drG1ZVv7sJNJnifuyynzw6QwAw/28Dic2MTkTwIvBbZ7MDE70rvd7Vsc7bnJjGU6Lqt+LsT7TYQ6Hn4E4+7QoAlj391n5fotetC6nogYYAqCTBBT7mBQ+mzCZ6b+QePx4pHtuPftyTR4q7butNR5qT9Nmi+R2e9lQnM0Q8RBsGRNcE9i4H7EYUrHCk9skaT2ih6MQtQCnywI5ysNV87myyCfmdfOBrlNdtXaqRpYGSTf7ebTYlkk9M3ms/WeyzqfPO58Q+8X3R+aNG2JxHhzNhLRJW2T+cm0N4yWuPcGMdo6C0V0OBXqaSjN/fnI1ak+x0WMfDzQAO4kQFNq26I7c4VBSzoCrlkf9plwrCGwb70Fut5vjA9Mo1C2GoILMlFE8UWTfRN496+fwgQU/M+e55RH67VzFvWmz5q6OYqyLvvTffZvOdP2RHjiiW0q/7F7OqBZfb+Ih8xFPZTIauoOtdQDfWw0HOkhDsD6dV+DpOsV80ARoX66KjkuKKYaPOnY5o8/DY9dPgV2n3T0vnKifujBV2bDWjPUGGFY1KdeHSof8vMwfv0ysLxMguQ+Pjnf3UrLLnyPDYxFj/Oxtm4bMuIFhxNxApcTLaQovNsjqeDvNksnZN+TtQJxMHAOj66JuDnkjobfW2xvrggm6CcV/s1Kc0GIg2Ga6oH8Yr+e6lqQxE4bZlgNARVRIcVmU7/2mnYO6xW5gH5eqvXVyCvt5iMLB7NK64voWJ7DF2d7f5dFvwtECjLHct0Dtrm5tgOSbmmYku9/V0W11W3Tz7YdTdxxCuLb8Fb2BYmeyGgCVu1+eu4UU7KZvV+DzI/D82mr4VnF9qLhgw/MFoNdvsgtdZAA43g430AXgV5OEYbwzeAYRlXiXw0d/spU3iJI9shA2oa5MCytbNAPo5szJt9WH4KRzZVKnlXDCVYZ/Wr9CkRYOejkdG7UuJwtrOHDnVHoqrHJSrtuhey5ywlmzbuEJgkI1mecrj2J2LHuxo3yE3snNlT5huftc5ZcsWlHHucrfigrCZm0pQF8Ax4x2D3oF1za3uVPF9XrFCxV8e3nBl+0Zz9dXvNQdD7zhQoStbHi8PODp8oCnyyM+XR7wtF3wjTa80IYKRqGKrWwA76jsdp6DDHdtR7peKdEw3+aza3Ck993iZP8pE9jd82lzpVcXA+r8r3bhIr1PG8SEbDaKiwmjFoks6AgkEJUvPRHQUf/jRtx7wq16z4QzR+yzn/F0mCbRqW8MPxzo3y28vdNaOCIYVYLRqIyuwffUnxXbDJaZpaDGpKubxbDTez9Wq5/V2SySiImaMas7V7cClA1cNvm2iWG7gbg56ArLfeHqoBGFIFs7WxpxwNNWgh8cXLGDwfIviIENBi8TgWRllEGtkxFyBwjq1tuJVk+zD4sJeQJQIPBVNsORrq+g6wtK3VH3K3jfgV2dTQ0nRGp9cz9mxzAp4kONm2wQk6pzoZObQilblDEqzONQL7n96HHT3MHvD6mw6ajkzjDJn3jDqlGa0JCvoxmaS+k3fTszys1GTphxxLr5AXZvpTkVrLRh6YRvbNGJ1kcwpznJLm4mUHkG/dfWVv3pyr+/ghzdbtmC/7uN09iPK3pCy6QAlf6de7QtzKlVWFUMN0zuFrrK72v7amw29MktM0dftyY/MuiAwRAsIl+F5y1bHQ23w6fTc0OBHuDa+o+UpWlrL+7+b65V7hzTY1YjDxOJSHKt0sFle+YOns9pDyJLGeiz565x4twuDGxSdRE5xQw5vv3ajOm9olY59q3GSn3fwjvS94ruqEDH3cJwHMPIKMPwIdmMXibhi9alxupY17x2OoqMmWe8rCTB7i/rWOUX90vSINb77wYgODyxh/UsL3gYVuH2ESu/cLij7s+ZADji/iOrm/Z16zjeR9UQXjWvO4Lb7PygqzCfdPPqWWiG4U6vmO468O8ReH+ELMPPKCkstGjvrHwnUFNUaIA6zz2sg3mQmUoSVGfXOQfy2C6f1R+3ygN6GM3OM3mu5YWFKxMYLaR9W+wWaVoesjh91b5nZ7OoBolaTXSODZrlTjhSEesMCtJYmOqNsKXf4vuXxwyc8avwMwJvOTRZ2ynmmY5nrQzXKR6GnCfIw0WHJBI2sdA62lqTdYGZMel5AIzFWiG9S69XTNR0ZzPbPkuj914myy4K1DYZVNmhkENt7VedGg3WxhatbtVzfvlEkU7v5KcwC2UxYSd2Nw+w46DWxupKDq0njAsnHY4NTPL1x+CsohhSP/c1fRO70BKlh6AiV0LY2yxtQm4KAGL7W54ymPD2ciQrZ+V52RnEXCzA7qsExyhvW8xChsUvALUiPki3u4WfR7p2ybFhzJbaT4AcifUm0Ox4Y+Nn3/4OV4TyPsys0hJgt89FZ8Nx6U0nE4gJ24TgPL93SONpEl0zHtm6Ky5t3+tyjHsbO00W3Q46sT042WmyG9qzTwKNOMqKOYSqh8ZNFoEF2dUtNMMlpjQ8s4OFmwwPOv3OkM8geUMBOOqfW8fA9umGVRnjTsRetisnyJ4urFhkEKsOVcXBPNyuwq4gzt/NnvL23GQj0UzRmEyRrEUH8c4GCRMfrr5sPMJnNctiSH6AziEBV7Ufqc0vSlQxXZH1DE3stupsN3339XXpYJ+epJ9esh14IOGuDNDe6UbmZ9UG0jvc29CgMwtRm/+pO4FYNwO0OJ1H6HuIggCVNG0ua6sC2zOBHyv4gYHnAq6Ely9f8fTpMx4JeH28NOe62a0Mu0rOraF0qGkNqr1ri5LrTccMWxt8u1ISzPttwVuDri+JBHiwHca6jJBs3qqZk61fmr4iw7nO5dp8jc0xt/L6zLb1XALYgefpe7AhbzFJTBdk2FFfKB/ndHygI5LdRNXppgLxQXg5qdKobyLrukH8GVZnrlXe/TWMhP7uA/emjHAn+ymPnXO16rQlkjnEgoqKUrpcZjB2rgAXlFqt3QDadYyEdj0UEQoVbNxkQd127CC8bgUFFc/7FV/5Ff9VX/FUX/GJNzxhwyMXEBPKTnjkDf9j+4T94QX75QX15QoURuWKndFPr5RrMIm52VXcbCR1kBciVGwgYhSZA1fxUQgA12ZXEKEwocoinXAnOnX6MrdUSWITKpca3+hig0iK1HWTsqbTefafmwvtVD23xyxKu1v6mcM4xll3ugjJ5od7u47s9A8LRsuZ17k/W9N4jAM6sGeNIrcI4lQTJ6wG/HCgf+fwLhP4ICQj78Rg7HTI5XlH9NxaTHlNQrhviEpstVJODJVejlhc6kQvhK714zNx6Qre/xFMkfTjPZwBKm1pwq92U1KZfXNw+IlhrUsdQyjojgZJp2cxafO0WjNGdlu1Bb6CeAfVK0h2n7PbmWs7VMggdl2h95IoTrUNEb1jj3lB5WNHIexzAPnuXXc3YliRFt/noSusN4dV3kB7k3T23ZC6sqYmFblvg5FzILJtkklW/NnFLvN0EfbcR1IWt/SkDnIAnGnctZV1IPsPfw/+v/8B2jYwlbZA449oR2BlsvcgzuRBEZ60e85dOwxkRwvqwDVDoNGi2Rpuwp7/07UDkjUfsRZodWKU/5z6xMCPfduMDRVEzXDs7c1VODm3J4FXZKc566T5BpUrNqhqS2ngLuXqhhRqF6Eezdq/YoibnSDoskGnwmK4bX/EUkctofsarAXMVfz6zZFOTEBlcfyLobe70zFskY+z6FjRp3Hdkd5JYS1j5sHLqlnsZIJ9mDxn9zMra2GwDrstF+AdxYX8STZn3YjY5zeansIk4S3zIC82ipE3Mv/SgcLPMvzk03jCtlHGUGQMbxxJ5HL1r8Z7Po0NfSixbbrbLNzZPYXX8Zlvs+ZXnWT5xwbniWq1iaYTq5T+pmVG+o0O5ybrAuwKo42Xer1hksUVjfys8jfAoraYq4Zcel9AInu95znC5Yq1AjnkjwW6dpid23W+KjgOZYgcL9Z7vR6zYeHkrMJJGORKaCf3BQHIeJo2IBVTxzy26KHO5VKmyfCa+tW/ZRl19E6T94MQSYaiHWK/KnfbBDMVGvP6AsW2JSrR9uamfUtarGGsQw2G9i7OgtoKNKcy9TwtS78jdABF6JtVV0NHRdqe9quLK2asRFKb6lCGThaylWGTLopGy0nhi0MPdNyyCi3qs9T4xbUd6BrdfctqeNk5i+Dp2tkrDd3uCtKBcgAAIABJREFUVArnrIn5u8DIpE8+zwyEvJKGZ3Hpeag+1h+KoSg3l2HiOJ/20dit+eVMFSG04XHDe2btWK/IPi+7/tAS8s+nQFgAhoC7vCZqODBDQblpQDnQFxHjQpzbJVitYUUPBr3VnqO86ova4Szj6PLk8ETwC5i9szO6I+mQp++5n9OXE5znacGaU+XwcgHhe0s4nRRe2g9jOzJ+1NELR4qKn2xWkJKtlk0T/XlXeEde0TNvKpqPZEnsjXWahpRIlyojKegUQOjGjQ/9LvRGiuT9EKJf2JjWSxTycsMgijSs8yUGFnVI7WoeP/kBj5NF2wl9CjDXB5xbSZIUSOaLfs2L4CUSZW+nfWdnN2LAS6q4/cp93Xgg4FmFzSib2meyalCrOXNIO8uvGiLZ+EMiU3yROwFVMOzkEPvKGMhre61ubR5V4CsDP13A3xhAAZ6veH18xQUXXLYNV3ppOwRe++7aodzZcyc3RPB7R/CA52gxTRedLI2GRfC6mQhKWN4+WAZ2dK9qgdBlrgPP+C5cwyS0ZDBwX+TBHhMY+qlX5iLzwrDVuDLoFYWTU7KR7wdk+OpF3gQ5MAkKte9705EGhzcmutzTNun1hkf13BOObI1OnLROyE7PM8u8px/JyMlPzNjAbfzAImFI4/u8v56raTZUZXBpJ1HuteLKFS/XK/788g1Pz9/AWwGVDaVsKAAuVPB0ueD6+Amvj694fnjG8+UFL3VHqbWNy2jeniamnX8HBaQ7z1GavKH2TVE0mAheH7kEQQz4Lg647DqJs1xTHjUTjFP5fiEaj/mtMl95t+c8QXcdKzJ4bk7Jt/N2mhX7lnRODfh4Q/WC3c1WcLJ9DsTYDkNvRtGNMMPIDwf6j/B9Ag0P8rqQgBJUSIVNb/ZM6R24i0OG0PIGo8crcvfs76AbjNMhb6yiy32VtAzYcSdtV6YeeTzbGUmITY7CO4hul8kZrg6WuGrvTiG6CtIFNsn2UeX+JsIHWDtvrWLwXOdM8pcGeeZEH8pyBsgfCPjzv6HvEJcyHwD8O7vix8obtfnvWjn1Pzcp3QBxx4h5EmeEwXIvL49gzvbDYBpNvvEQxwFedZ4DwO6MnzvAyDVyTQP7kTc7TAu4J2OzsEhlrHQOcEquXd0c6xW8t+fKYhDvbCcFgNuK0NalBkAELgxufllZ4O3S44Rn4fhtya7fFjS/sfAZkV2m4a2W/yJJFnurbLcmy9KgfZjrXI4wcJsoloOS9G0iwpflZSNkKlbTSO3mpB0WYuINgtbgYcQ9a9PR6EE8pWTsyqXFry+699vaDqLw6Cc9nSUMQBbZ6QSWGYAez7dk/2T0HOAN1bn+uOMW1Jl6XdG/I3uefH9TfT7/JI6Bfuqkmez5yDxflu+F5OxL9jlnmieYI7vNX322q1c8mARZDMeOlsw869iJ+1niNz8m8uTgh0paVnSIyMkFAPTyL12s4fslPCd6Htk/D3qGBLeDFx0p6mj97fL9UOdn4j9TfG/U0a7Yu8TXvQ62oyadxflb+uZUyDb8LMVBxdRT6VgliDk/cf8e2KjRfVxM0OufVpF2c93qtrwAUuczIgeNJBrLFRzc6Kups9PV1X1DseNnHGDSTXHBjH4RBA6d5xqf5cQpM8ONAT2mb5E70XGid+3jpiajh6FZeiXrIwpzPbNTOs5X/Q64A3SL2CP7hEJ3HNQwLmZoZcc+zG1ZYkXwZXNtxeN+tq+cjLcI8QSDbIYOdGt19HLslyR9cNhEDT53uk2w8QZTNgHa5w5y0d65jjgMD4sDT6k6gt2fPht7eGJIC1/sc3YSsjdVm5NOV5gYp0tRvCfY1B5haWdoHztBpX3fv/O1toX9nyrwtc1v1W8vKJ8fWpbHB+DbSzvOb48oWNqWE3P/OPwiCnYII1UcAbkQYLfqyLLijHBYhEN2mCx8mSR6U71zSI7gYRUsi1j25Nvthxn83bwf6g/BKxTgQPG/DwfqKG96i/vu+BYJ3RGtLnId81QmlAVIbQGUbgAS53ut4e+67/j555/xwG1570YFD1s7/fTy8IAnfgIz47Ve8fT6FY+vj7jsryj7td2FTtQWBpeCWtVB7o5uVzwTgQqBat8wqQsKGRIPPdHpfDilEw/H/UcZIWbvG/P/CL9I+OFA/xF+xbBQCt75DKDv9DkxCg1/7purku3uWTW09IgoIDiRJtX5Oz4GwWVwu0NqNI3s0mTvRDILT9unRqzDjSoY3tuRzXrkvL/zXNJ52z3enejKGt4nYebk/0AhnfHXm/A9FcHbB69jUScNliP8Dyt4s1V1NHszgYEAW03qeQNqVPjyvJknaR9KO6Z9c3n/B4D/QD/ONRh0sW3d1iXZ8kRWv9VVSqd9nZXRYuT6A3OeM8tk8rjEmNJsfDwWb9XHmifdzUr+hTtM+l15yvNsq9QZtK4vtI3s62Fg3+N4kDw/6OHsXm4smmJGG3mIXeD01Y/03DcpQ7tIm0mFbNcEg+249rpXO6qsOdWrq63JvXZyxuTu2wAbzsmalMYw5WZQOcbYvzN543Gk3z9q6PXucNcA9HvL0N9A8I7yr/q+Htwuwy/dnFx+mqAPVBhG3vo7AzAndN9VZvl6dFA4ST68BzOK5+kmaUM6L34Wi/aGsBLfnBNRish6SPVU/BbkwAGr6W4ei+b0m+xMFO6HH+XjHjPck0pH7ZEH8GoVuHZnFKTSdIc550RhERsDRaa7p+UwwHKCkuovVfAZOV61pLJOs5fKY5o0603BATMjGasy2cpZQQNopxfE49Dzvk2vx709oWjR0/8baVJor10joPqcq0zmFMnj9XxvjNl5PoR+mNuPugCgXf/k7A9rY3dMNEe6d4uQlWENcE5MPS451rYFvHAsAY/lJ4CA1/o1lf3ZslVmMDTeITMTy8C4B2Epc9h0ybQUL5cndnwvhmPaMYGUN+mne53oQ9nrauch2pKWPZfBCLv/25HiJzk2Hziir8YLqTJKz5RUvPbPH6TAL+fAGKqgdL5JmptYIvJAn05zZA86wcYtRxhkl9ezdqhjwvPWl8bivS4T6xAeD6F0HmWA88onavIw76hbNyA69Si9O6jHQPNj3K0hlizqZRtbKXk6/MXFRr6g2wyjd4EHPaWiwL1qGl0oRcJMtDg15Gy4tVjhMNw41a+fMjLUambDPHsXCJzpItXgU/frB1WFRN3Z7bZiPMpO5WX862k+rrvbV0I7PUbVvFF8ogPNVBQWkYn62Aoa2x7wQumX3Z/8eCGWSS8LgpUQRlc9g/3mPthcpBmE/nlRZw6Pmo2B13sXUXb7oE+79k1BerwwuTu0Pa6oxqLMRuOYLtql6G0ksScYwPMOfHoAyiuwF+CF8fz4FY/0iEvZ8HqRMqqzG+8xRld9uIq/lf4t4QPK9KbDUjdrZZPPnrdyNwWz3MF6t7niCzCFeKOUYBse18bePj8bvL0n7aQQ7RWWSweHLZp0oM61ThfofEwwHhnk2cCVbpjUZUs/jYpd/0qr1A8gurzW2o5g33dcr1d8fX7GAzY8PT3h86dP2LnikS7YLhse+BGVgU/7K56+PuFyubQd6uYAb6ekqvMbonMNdYgO80IFNd2BnoWoOuE9ncR5xPkisVm4y/ltNOP0oLN/dCHCmOlH+DXDDwf6j/CdAyHcC26jYyQB0b4zXDKgG6Aq/GzF6AlhokouyKFeeLArgxNc69CndGsJA373uB5v3L1SbLCSvqtTn8XxJM7zVs4ux7dXASFavP4uZGY5BskbyNlInuJC/z7SgjOwwOiTs4MSOazzh1IYgtE8Ii9YvE+X+KOP4J3h5nkQwN//DfBvfwY2ObadCPRHP+icwSSDSU67+wrQ7hNPO9k9f3tj1gy3NJH1YWS5oqcsCLypmE3IgxHnYI9nwOcN0VXUR2lCGVk0Wjmz9H4gr8uT/IS5r5bDqdbhrAJG23iv10dUvb+syaxuVHO/3zzAmicSMPn92ODm8+N39MVUP8LvNHxOPUtoR7Xrs/8+G4zmdG8Nua5Q7yRuJrOX+ZNcGsSJCBw/YTAtu19NE0ok9+CdH5TjT4Scx1d0xv64590+zrk7yhofFdMvJ+RznNlT5NrkJzngxJp8J5bjt10CBobJHT/7qYNkRZ5Pqk4P33nVtTHoBIJtB5iiyNUJ95vTsyvDH9W46k+Pp1XdPu2Kd3IdKxvnVJgAG8jdHdXJPr0CGPtG7fU+IZLsgaz/3Y5z+C7hz9CFsO3d7UQX+4hSY81JqXeVu3EIUtr4zpP41j7/r09rFomXnRR+DIZ+tGCLMTMuYKdPNxEQFjp2MTQcpntw0vBkccvZsFzMevB8RKtAx9PNu0+P4EK3038D4R60eofWcZk0TXd6blHGMn1yUyO4o/7MccixVOSFuKnSdZxbZDEr97jaFm+8YKzGIV4+TsubkZtX6zO0BrVMMd2Yvl3CNvaP+3aweCRmiXqvXT13u+NVjgzHuk+++7jub8iSVMtd6anbbSmg4YY1v7So9wGFb0VlJN8vtnqR7xMQM2x4yTvDZ48D+Na1egd2lYdghAKiV2NaMpsp2rFNNQsdmNNEdIxcsxIcYLqQvylc9HuFnWLTxP4aOJM5tuRs0Z61PnbUeqxbBja/pXgk28Rmjk6sqh8xtRkPgpVjAsPbtmncMOVn12aHKp/UbIZJE0tgFurtkDu5uTp7jkcQbE6U0GzmVwAPO/BpA/1cASrA1yvoJwJjBx4egddvYVrspu27DG/l8t9GOF4I42QFo5+qQQSqk444W+ebcgWoJqXcZLQPDp4vyLGcGzOozU9y6tN3N/04jnVMV6mfQRbXMmzs0zegsDnImVnudpfLn5jl2ob+XGttTvS9om7Nif7Mz/hWLnjdr9h10Vsp2LC1tMx4eHjAw8MF27a1K67EGV4KtTvPd7kCRHaem76gfoy7Oc8LoXABF7Z8IJI70xs9t5MzJlbRPQ7xu4PTcab6Ov6H8PsWMb/b8MOB/nsMM93wewjDhFg3ZlWw8SlrhVxeuedcn4s66vofdT0QV0ctSs4g26opMzw7jH1QZInb7ktxnjfnEgN6B7vcoYhCbUKyoBkacHDVCuzXvgNdHFYsznVbsela6aCVotRY1t+FWvarOIfJwBVWzgfWOrLgv6V43jlAvBlsdH1c9fvYzBn6/n2azv/675ReV2ldHFligLpRAJANMjlYam5Q+bd/Dew7sBXhJ2pO9C/Ud6OjU6s55qHGM1l/01Ys3linspRDnfZ6ga5lbuBnePOD8oQXZ9C1pNlQdnlo8s0GttqmPpimwTmVD271sPSBvhUbnBS96iwO45h6NgpU/vQE2nNOuVf7VY1R7lPlrINaK7cPikVyotjgyJn9lUUmQcRM7XJJy9MOt+cOp42xhwVS57jNYyCcamELlGLfTxfsOF3QP9/L7SfS/0JirE9c/jLlB5GU5eSbJxLeET5P6sc93xJfroC/p7+O6pyJaf+tTFSgxetipEm82U2c8hwBaBJVN4y57yrntLzSq867CWciFTe+3Qp84vlmAV425wJmFl1U8Ee2oPcrN5FWY33miCZDZ8+Yq3aCP4DlZJ+qihnI5lRRGccHeBJZTpB7JRMedHLYsQP7vPlR7zQ/FbquGybelIaDEBd4JjhrSY/a6cKAV1fOjAzMVgDCGe5jQgz6u+hOvImentUjoBW73/yzmRht1FPEJNKjA3uZHvSKin5PpYd3hlSP/X7YO0tJUHOOxRbwZVHfIclm50WIPJRWuyxg5tTuhMkRP8F27TzZ78VuEdVP6hFQ8Fmw8GXO6jNazmEmZ323e7i9CqFI3QPP5jKhbZlEZD1xmtdWjXqn4aF6fyVG8zfrt7lzPAfzv2XiSPIvpCGhYj+mcfZpu84y6cWzwVdk5itbnToRnDs8qFIPY0w2rc87b/1iknmPOsTkMQY6j5JL2uuRNJ11RliC+konemk2it0E9lsftN/PId5OtzjreAeCo50Bmy9asUsSHdP4zMNvIxx2KM83wvu/LoMR3u8PCvvbQ5JdPNHVQ4Xuwe3inoXhpIIUO8d55z9SgjOC7uWRyiaXfeBDeZ62yTpL5jaAdje29pT9lCjri5ufzPMQod4VRXp7YwYTpfcUv6Ryr+Mch9rnZqOwm2dc2o5H9qT9cEpLwBMBz3Vtg7FbWmLCnTG5m+qArNSmEX4T+WxrGoHgRF82i9EW/7/swCMBTxX4dgHvBc/XL3jYPrXT2y8FeNnlKHeKbT8bTPhOjZN1+t9K8E7PA3mjJ5uZDFTdmdFGcz1k0RTf7w7ZnhjiE4EOc1DrMK5p83wQbQNtM4NtwVTXBG7BrtUstK069M0IeF8Qq3upl81xLg7wbevz+kztWyntGsc27CxoV0y0DTv2H7dFK3vdQTth36+4loJXLnitO67MqGDszKjEzT7ZCspe2q7zbcO2bSAqKKWgsPzqiZ+1waMnqZgzXXRKOLpd/0oBcW1Oc4rHuN+6piC9vjn4EzU7VQCTB6Oh70Qq//3DiQ794UD/Swu/CQXtjc/iVpJn4FbAEkDdOYdS+h/E8ZeXDjrb8bSgEwU47j5vZZLU4g6fQt99WZ0jXQxFVUqFm+OpaJkOOHOY7+B9B7j2b/LfUQNUtI7HPyfh79rY/lgbvCr0zSEbC/dpml+JYFdjk7sz5bhs0R1VdDTSR+83ne0wlqH+zeUhGUC2ldjUHdwr5zkB+PwE/NP/BbZNnOca79OpcdUr1HvVWz3o8WkxSzecM60tLGr33CeNJ7jJYbR2x7Knecna59Gd00SDiS2rPXDBdOJ/OgDNEwCZVzgl8IMAQneiT47gLe5I2IHt5qPMTm69jkE6m8jiydFwkoDH9mvzPBn0uEn/3h1uMK138q8TvROGH+FDwuf0PnRtGgzTJG2WnSGBHyRy/D4LZ1TRUO/JOAtu4vGwPpFTR+kmTdaxPrggOHOmMDlc2PeFjF4FlRO3cDeR93eFaflidw2C6yDTkYwMOHA6U3eBV7Tuu2qdhNFhtqwolj2DMyygmtGuLyYRnkxoxXbk6mY2oNPZSe3cslfIYF7wqMbRrJ8SjG8OjJnZkHWwrmudtpEn+fzrDG6zu73No2V5wdYKUFsNhgZycbKLQ+qmoTNmQWkGSfaRfKZUj8ujNeVJIo0ND0dyc/atj3UoFcFoR7ebjBpq1nBiMUeOPyODhvRO9k1MuaXYHYylhbkxlbnKp/cIzFXBbwljn93lpztBkstoafd6A7/jD8Fxpz6RI5r37h3oLRib2mJMZaEOlLEFCacILEdrm1fNaXVycE5HYBJvusVQHBNCubo5LRy8GSTxNqk8KSjuRP2xEXMObg1u8x9ut3dqX9BQE9OB5OXMjuo+tBgPmh9U2uAYd7HG1m93YI+18/TN94LC1CXv+s7YM1W+Ry1mnTg1jyVE5zoN8T70YfcxZscetIho3oj+tHWK08qPG2ML0lx5Q1uU8Y1ZvM3ihc69isRDed+dukMwG25Sf7CfnTHjf/UM9JkyO1W/swde3Pcn6ZinAjy7Omf59fsTAS+OS+bGV0+vXaBNcdX4zeUAmnkwmLGePqTYVwCXApQNKLUd5f68gz9X7HUHtoeGs+LyB3v5LyW0Rvvjo2f87Z2MJn/1oMNfG18zFmX/MGiMN1d1LrfufkbaPJLHR+8U7O8NyjfEna/M3mCA9eQUv9tcYjWO97CHpm2gqjqaAVDlvnQGVwJvOyoXVG7XWrKz7SraXemt6tpKIaCUgq0UXLYND2WzdDvGY9nJrjKFfQNg7022aHr91vuh07zqoXQNHPxS4kkgmlxn9RcnRP5bhh8O9N9rePPq048ZMry/bkJzguvzMMxDUC5m/Oof2m+RX+hx086xLlI4iKnZTIZVEev3A7YRpKT4GG1n5i7O852bIWtHGVN7134rYuRWhbWpC9txvleAr7LbsznSuzOeVQtP/tzg389MzcJ0ZHw0qvqAcMt5/kvUeSvcM+GRdeBRgX53xM1KZvHUy7BxBaWkmaf8d89XnXfC4NVF46//CvinfwUeH4HajrcxfpLABLs/3Y5McwaPJSoUr1MwFIgV4o4rbXA5WuVuarmPBnAkke401gk4u8vVD4zdQCwUa7w8xaalo5kjJNCDGwxa0WJYsfB+liOhaq2tjpEhja8n0cyE3an6QbunwzygdCNRX4PJpnxcZmqGdZE8BFnSyuglcMDFXWakrnY9TCP/hBlNX6ci6oMM2FkxbxFjXl7ckoN+YdRRM27t3Na8386B+KsEhXmFgoWoDM+ZPaZlZXk5ew6CZFJnkvWzMia3JfS8Kd/gFM20Sq59Pj+PYANdfptXQmSt38VGrlyf1wc74jIJiBX8Jg9SoTNVyIvnaZgi8iAu8QenviRguIrUmpCFHBB2f/t6dWLWjlQXPHtv0AxfOb9/B9zRRvrL8THpr1DXVC65NikNTOWg6kuHv6BPXTtD+yKJdLslFus/sNWzYPiz9yqHPO6ZHd6WYlX4R3fCU+r7SfIpv6guhf9tmq8wg/C5cR0DusOBIIvQnEwg42fX9wEWXSCcrsyxH7foTftMXyTedokHuuz6lQFZgNfsF5402O+WD9aJqbL+tZNPezJzwbXTlRz6ql8BVYVMmpKo+IJ+fHwMSycOz9P7aFeIgXNLp2dS77BHFHccrMu8qf7tnxGK6akP94TF5PgSFr/rm45F+FJaJ3SwgUGRPIfxT8MuywkSBote5XLPXehGs6rners8C3HW0boTktR5fSyvwoS0lDIcmDVFt+oV/66Pggeze9P1D4Ou6Hk3ANtwJAlZqpl69mPIIrouLjKIDXAcL+8NVoLudz8+ucAcqANuaEjov8wWPx+93heU1zruvfifly+9Ykf3vgOA92TtDHZYtjoOkjBGls8pcgIch6ejneF+7E42d6C8SOFXtopg6ZD32smrUs/DOl9hodN+dp4zjelGesw06aODllzAvMg7yxPY2dmGenc3Jw6+d8w72GtZUFfgGzeHOAjgC4DrqpD46YGiE32mQcOYnUN7jYaUlsU+sE+u2uo+GN/tAHZuc7ZPBHxh8JXw+vINTw8/4YradqE/yy70K6KR40MXA/PmDnhXPLo+CxkSKt5gAn9sEBk3caLHaQunA9wvWxoO5WWDYNjlmxt+yy4PaQfwHV5V2PgEt8I6TWM/xQ063WZ7RfVYaFqwenGsRHxD3qW8lsE2/pDqaZWiXdtVbg729tsaVZlR0B3r7b3tNGeWo9/BbUxAzZ6vXFErYa/tCPe9VOxgvO5XvOxXvLy+4GEr2Jzcp63gcnnAw+MjHh8e23HvO7BX2YWO0nbAD7aiw6g619Ed7ZAWktpy+pzyzU+qPM+oZIZMz3Yolt38eSONyCN6ZcmP8Iawkucnww8H+o/wnQI15qfV7nOf1BvNxd1jJPlKF4itqMVKz6WUknIkrx+gmrDKO6hVucv9GFS5WWmsOzKrONNZ8qpjjOWYZJbJOt1NIem4gvcrwHvLz82h3hxw6kBXePIfwHZ0ex76ejwkfJjxfZD+l9HVv7/wToH75jqBOOAlRL7IxgLpce1K23SQT/72r8CnB9DrDpQLoAtS1JGOCZVYHd3Magtb0hYQtQyVhrNNGB909HoGO4uQLZ9FsslYlnKcPqeBMhnPTdJbqpTGDwJncIARJu+GRhzLMAaHgSOTG2iugFwVbbSjcPVJH9ZFD4oXy6+yJzaOFF8MOYqRXVtvGJDvCb8Kr/7Clbxlku2WExouniX9V//hO4R7j2lXuswDcUIfIE/mZELCm6jNBZzAjTdnZvWrLEzyOhbvIlnjJbJgArcvz8l9s20yADyBKT17MWTye6w2wr0IWZbeSnNvmMHFQBSGk0zDtwNZaThtdl9Uhuz6CcMAWV9yt93V5GHXgpO/4dn1bxz9Y/RAeDgnzGD9z/Nno7sF3pgwbLPz942u7iB1xQ8vd4lDntgcE76nppf6Ucoex/dU6McLjl8IMOe5Sxfv/42LCgnV2frqqMIE354JKXztJDAQg4Mi9g97PAUB0Esac405VOxwXrTi0y5ROxt0jGW8W1NN5dKMpm+HlZPZ92neADnFYZ61W1aIuYji+H5Y1CG/Qcz7N9gfi6Bm/bJET+LuWxCtpvd9uu5Ke1NQm0F1RpAXznofSMPJT0Ls31U9Q8idiDn5r8owXaM2T89MKY+pCk0GwkaEh4mh0rFJiU26raKLV9rR/SuDQr5M2kMQ9UBTl2qv04tiFbFSqEdVlnDjjQkc4o/QfD74kti64Ga59PY9ye+Wezbv5sqcDMJmV6Y1Fkl5lVIm6XPZMzrwZgn5d1aZpvRMYYn5rZDTcS+qw2k3JkXA+vpUmsSfpJpkfsrBwOfy5gKCZHR2Crt3Y9r0HUDYQe7DWXAeZ2mF2F+4xTOjeZtf5+kGm8KAw/TYEBFYZFdRugiv5wwduY26wM/JcIYd/45vO/DTJtcWMlAL8Ao8by8t4XYBtr3bsTuyYRVhzU38Cwx9qpG6zCa3YPJ7IGfaN5kOHZ2w57UzoRWuR9czquS25WHO4uYJiXDbpEN0sF7YN+BIe71fq3UZ2cpqh6u1feTtAF1xnHO7G72YU5zFqd4c4+2K2rYZqwrftaW4BD1Rt1b5Y8bOFa91x/PrK74+f8Pj5YKtFDxtF2ylnab6sD3g6dMTPj9/wtPzN7zWK/YXxr5vePF3mteZDZLtlDHOFjarfiZa3oO+CpTF0JDAofewnE5Th2n/wmXO28P7+OSHA/0vInzcAPhjQlNOBDW4dUCWbv4LDkOyfN2x03ZXERU7ptruxVInui19syqkdOo6sgESsXRLGJnBVsU/3pzlvLdj23lvR7iHHejEMlrkdgePrM5S5zoztx3ovMuuc9mBDtnJnp3neac58vsEZhtB+3ZouUkKz+zcXynYKv0PUAozhfmuNVurCaXlRNMw47GOzzi3Xze6JP9OcVy15BllBV8wWf6/+1//C3/6538BIPfVyJVPbWPEAAAgAElEQVQIzYgokt+X3Yuycs327PzdmiSEJ51phuRntB0iWfkvuyYPuM6kk7SD8ewsGO9YIJaDIhKFWF6VMyy5SeRWx2uTRY6nxHDs8oin7e3gZWHlAGeKvznod3f8qLJ4z+EMbBq/ce+hPnmhyQuBmZpxKqdAcxEDM+9WJNhpq+Y8d6CuhtJjmxI+QtzwEEPotxtpb9Wf82d++KgQVqhS/J3Ckr59vgMe7favWneCI8xSZDjHqu8KN49oP6g3v0/TKE+7+IH/S4q41aDMNwc0MGuPykqT4al/8271PtM99k3evRDKzDvKVsFPWs3anvOLvbJqa2ZqJc+MrwVL3QxDc3geOetOs53eUI91uxOoaSbXzKeB1npecuiO0xyOVoHuyO1COJU5KA2HdyeHPRmEvFkSA8PMjfEQepszYqSuKCp6GiI2s7V/UzAowooFGQS75WRINNgXsrU6c1PZpe11Mm5PpC06O0RFGUpmBzEgd5+3dwpV9ywy/RbsLL/zXMvJApm6eWM2R6Yxp6ij9eEaoc7J1LDVfd5TnTHC1khqItukiJqZl7xtwkI7qkQmd6ArjkIxt/mfHL2tyH74TOR2YKUDtFWdU8IQ9T6fw5DB5mW8B8qPdzil9WuAYomLur1cV3rybXA70Vi9hifsggxXr3vUD4PT2vIpUjmkDfn/IL+3dqJTws1kBpTd8ekBCVnl3h0mh4DS7GUui/oxpL00pa2xK/XfIve6MzYwtlR+5vjAD/be3AR9nppiat/BtkPew41usmg7FsGrVpWeBFjds5wDtniMeMvhJr38eO9vw5rsCKOcMr3ZtRxvrfs9hrdCFPsn4H/Sp/145jFuBCcx4tC3HJ6849362XU46Wl2M/iCDonv5oBQVe4ZBdSd58NJQXC70jvfc0gwf0yieoA30+Rge5wK1OYErRyVmyx/K3wbs52uBgDw4BTGazLotK5nRtumfZnYqRPbYFVXfISfww0i2eR0x7ndJa1zMhMzmewKCzSH+MsV2NA2z7+gHeX+8opPn/6Ab9cX4PIA7K9tXYC3+e/pM21C9RQkMtEcZAdK+S3h7nI6PKcX8aGfZLTS5xyOD5nZhvIS6kuVZ1yfIKdWvySLyiOFxBv6jbNs0rKc1J+0WXegt7Uc0Wawg7YodnmqNumzGXy/UJh0e4NTTt8Iv60/7WpZh+DGff0k0LaxbwPLznBmoBI1RzsTmHfsteDKO16ur/j68ozHb1/xsG142DZcqGDbmjP94eEBn+oTPn/+jJ++fcPL9RUvr68gIpRSxIkfj3FP4IW4/iffOT+TowPHszP0md/iDPPcLfSH3A3XvwJd/DcOYbw0nICBwzHjDwf6f9dg9vFvjbkIwfHdto8jqdaUHhgc6Dr6cveeE7WtWV3MiTPdGViz4lte8hLJ7URZtULuCJGd58wVpM7z696+y3HucaDPwYmOIkcj6nHvduy7OtEZYed5xpQzVJkWaXy6bIB2q1IbPkHUqNJ/BA238DKz9HKexXt2nt0Dg8vL/psNIsnYCX/7N/jTP/+rGRFt17lP3/KISRSqiZShO5MBeMNRE4phGehs6gj21k4fWL8vuIF1Lo77B9Y71+w7p6xyrI+bqcs7rPzElc83hLtWh0gdRN0CXwo0Bd4NdAcWdh8IsAl4t2rT38soSdqkQqW2uEImqGkv4A0gVPAOoxtS/KnR6t/lOKcDwd/BBO7E1VF4Tzm3gP0Vw2qwfeQ8f5+9flAoRmd4Dl9xfld8Kvr2u+rXe8rMI8UsEE4i62ydq7qyjCeaTMSzmwHQfCpflQ4yP3vAcltPEsES3zoTMMmT7YyMyu9qRnwE8duMwBAo1cHp3RnlLv2YI8bC6UynO7WPs1wM+oaTKs0yw9Gc04Gxek9fUoa/DsDI0E3AJ5Wdj5gzUii9DEvh6cToxl0jcw/9CJkSyxRDVp9DW+dlRP69Q4g6liwq/Lw+00mboUyyhWsWN/B0BtLDNjJurGGKZMz2xcTyx68spXtat8XJ+m5kGh2FZHV6mHyYc8bN8BY9FwhUaf3OrBNRDsyHVKvuHPjgzjCseZuLqkVm96cfbvHJsNjv7TLWnyKXTXWbtB5g6994utBIwi3nNhFYHWbs/pAAcaKS7GP/PeuXyqLW9qdlcc6zVAIIdTdovGKKDL5wPDr3EnqZjK22zZehXvvtBBG/wer3cVZyRoQ4UuJXssMEfbpVyHn7v27s5fKTFmfRXndpooUd86YgEs3hRXvNes/tpPbS796gsvotoE8X7UwWjByVkAXLLcdB338pbXbpPTSMXrSYFYjzEBPxPhN6pjMbbON8HjmZENP3MnKbNe1BeEOH3CWjgdhPg11/g56P2jCLUxn4inbkuo21pJJw/ZHmvab87WHO2mozZFB8hzNQqTfb8zA7dHDjC1uCkXjd1gtWOOIC+BuAPxTgpQKPO/BcgB349vozQA9tjnkrbV62+Pyz9pwLfe4j2dcfJot6cV1/nqmg5TCn/hCnpuv6LnQLphxOIusw2Shzjivt8A7Cw0fdPTD1eHSCapZKkzDanH9iHRVtXRa2r+9Z1PVLhCajCbVWlFJQa8VGGyrXttt7oBVtgO41b3vXm6rVVShtI07lAmK9A73i9fqKQht+/valOcvLhqeHB3x+fGz3nm8byraBC/CyX/H1+RlfX5/x85evIABbaeWUWlBLBdXuIFd69QsMQxC/kt953qMIfpw6O8o9q9A+T9zHRY0exg4298sE9wGlP8KHhkHvTPr1KPxwoP+lhNMju18SBvtHBsoLY60lgClNzTdxotvODCuqDzTNeHDv/U2KK6UNcLQsBYQp2l/Jqm+7zrnvMK/NeY59bwy4p13jYFGi7Z1EkdrdhyzHxbMe+65HFq2ObYc9d9vIrwbDKB0Cno8CWXn2/g7yCXZRcKrmQc/3Dn1nsfs0MbpytjOw30qTjH3IUV+ziWM/Q2csMSuf0rM7PkzzEAH8Z2DbZDBUOm/ahJY6zxEnqXKZQtjMaJPm/j5YtwSU/yBl/KzZGh2H0yisFkY0dBh36LcJHvKALeLN7ixX41jhMxmk9ZPLz50tdWDmFPE4dvFSaRa8DETkQ191ngzyeLE2KOzuXngtbaiebNW9b3J7b4sj2NFGW2hR2+pU2ZRa0HeWhdNwxYnSnSnsxNnEclyFN/X9IpPH76wrbk2kz8ZqHxXeKg+Psvn+z+NGyhFvDKv6f1p8P1vGYOmmZ+JJIuD+AbKmneCBli89+LsUvVxWh7edEEFtYsbkisj8mbwPcoV7eWAApdOvjsi9neRtBS+3buqLXF+2ASiiiIozTSaDvg/V76HgyfcjWr5B3z7rBGQyPI6lkhbg8gZdRf1KoNHB4FBHOaNW4vren0yQ4WY0WzNPLLN/oPhLJcq7tScn1jdUPqblWVIXy0OiHOgd5NMLJn1nBDuoq/lBUTsQYhvN0WffjpWB6j7boUxe+7f8eixuGxs0TcpcXR0BIIcTsasAyEHvKWWGLMooDrGOZhy9kB4342ryRB4oLcE1DTPbw1c6soczg8ReBKHYWclNwVT+0sgZjvyPzKwlXdF8beekiCBqnVnIBqsCsyzBMi5NjTvpP4gxl9f3kdJbHOdOgKBIL8M2b8cbtnDCJemnJ8QwUnSv207qYCQnGvV0pPzidVpxhblKdCe6hrwjPbTRydbZztRJnpj9dmcNd4QrIXk9oPiUuHAKhcdDfwug+uGhjeVyGshkceUYo7gFvBjAiISx7t7GMeXwxfEMrZKZOEr9jaaPj0ZSULNLZe+RuXBn8JszZjzW8SvPurNNcX7X1SC5bii5vDH0+S7Te378HfA0sVlyo+FwPBTg4pvgMT3oBWY2Y3sVTlMKa3b2jucAqMwdZVuXEVpk3EkqS7tUxgSZ4prqJ9gDz5e5PrFiUoQjksBW0RuMIVPf0pkZM9pdg/3oeUewvJRTjrA8XFfvOU74jYaug6tLkHBdDad8RIeOQztFIJQ7h92fJhCOb3f1h6s5CcCXHfjsGn0loFQ8PBW8Xl+Bhwuwv3ScPec2p7brLvdDu/bXCDzatSugZjS6QPV4F/piJzopLx/QWoZhNi+8wuOUr1TGTIqx9mT+yra/oyGTfwsYhsD2p/b2sBBOYFCcGUyHEv0sMb1Tr/hinEoAYM7ydr95b2GT1TTPk/6aW73JaGagoqAyo9aKa2GUuuP59QXfnp/x/PSC63VHZZ1nbKWUUvB4ueDp6QmPD094uFywXTcULii1H+FeqKBShfp4zIme/lTk6Xy37jw357vQZXCwii45dLgGA+qNQSdKmad1ZZb5Ee4IFO1Xb8NEuwhTJP9woP8uw9sF5G8jZGMOos9Gje0HPX1ymbqxnxgg1nGMJxOWhZBAkfFrsFJFGJKlYHVuV3GW653n3nmud6DrjAADVMWcKKpEumrpd53n+hPzmlBV5CXn+QwdOWpl/320MHaThcMRGd9L8g+koUbNL4GA+0IevMVI9Lg0uDwoMf5pPgLwNwR8uTSaK5vxFlFRiyLWm1/IcSypM70GLrbVtvrhj38L/POfLDYWzovvHxX84O4ghKPSaxwL+j4I1iE3fxZgdH1+5a9VjOO2+5HtrOwbOAue8VZPJCN1yLWjmtjFMQk6ipO5tU8068QQwYkuJ59Mwnt8/Srhl6Kl7xz4jSP07y/iYjg5tr75frZcANAJpLNkYYyQETeTXbPKnYGhcrX0b03sNrnLatNQkx9dnogsgqSFOx6bYxVBzmfwzoiLyUDYms/odtCMtWZXwZzpq1M0mWwyy7wokxIAR/VY2kW1B/GrvXgBMrdQZxgIT71cGYAMy0HQ5EM67rCAYB4MnvAD+we1NyUPu7y9EYs6fb3SAaVpgwPXh7RTab6co6FJId4fpsnUlLcJIGMiX7fLYGPpWEmLmhCV2ga+PFDqul5B3xXR3oqU2a6jOmkPLJOtZNRR0H5ubYlnD/X2Kh5jPZxTnKzzFw4rXTn0E2whVD494VQ1v6KpMfJPos9EhsHqu1ef5kLOfZajwm8Xvko34FP0p47X+nDpjvuFZ2WW9CHIv5RPhEhWscvyQ1TEve5M9je1cI+JOt3ZC+Hroj8aqqTHrdq+k50M52MBOt9ivqaVB8Gp5CMnw2wecmZmHIeektEXIs1FP9simrhgqee/p+YBki4eXUlOujvY+vXPTubbYuw31E3vkarvFVDvye/7gQJN6HSQyagJCyo/RIp1ZQqizfxxZZhNrdwlc3LsuS0xVtT3yo/JzpmYpMNpPOOLS+uaOLCiM9pnesq+e9tlxs9eYDlYPLJHyNyz2GCoDqlG1CcIcmW3O3uUyPFHtMXGoYvHx0RnHLSEfZ3aNFA7mn4j4OkKfGu70F9fn3G5fMKVGbhswOvudICzkWbBmvcd7Z9fpGrhscGJ/s5wcwx0d4G3CwpJMo2+p01+o0gFSC5JkbGTjfHB8Iq/DxFnVtvZ8P6+GGozmWutau2QoaAzNtB9M+3PjR5lPkPHQYzCLPsFK2ppd6df646X1yuetxe8Xq/Y6972KIKBerUWbpcLHh8f8fT0iIfHB1xeLyj7FdvWjnA357k6wtFOIslXlThr6BAnndbXQ4nvFe6lkB9BQ+zzHzvQf4TfRbABDQHhaGimLg2yseeNwOBYb8LvcDjUpLcZaiRl2O5zXUWnaZHusdKVqKx360hZtgu99mf1EKnz3K0gCgajNJTAqJqOgb773BvH3pDW8lSRpfINbjeq5SQcpoadqvSPE8XZHF6u7vmVA9k/kziF8SYeTsJ+Rxu1bqXnUIXS/REIaeA2b4Hwzt/8NfBYgP3P7dgqqb8vbJkNAud1G6x26oIbrNmqaQb+4e+c8zxCqCvCV4aMLjS5aawvbeBuZhyTX/6oFxPnzvCVcfqeYdIOmdzLOf8wfpuMLYc6g9CKbVVD3UvT9tAnI5moiyySE90ZQJETBcTxx7JYgBj9WLMCkK41KK1iVhmo3LSnRT5k+0owxV2WZUfEOERpn+lART+p/F4UdTb8lqzoM/eea/s92AzgW85LkUiyyFFSfm/zT8iVZbrpN8ejS1q49X3RKBMUR3eGL2g4JwGgZ5eaHULtJBw/oNPZXwLApU/ztR2f6VydbC9RnJwcZLGVBQzeRd+U4i/t5k4/JvC9jeILmKDlkF5m/LtIZ+04ThKD5/9zVQx0DxzskukFKzqyjaETCLlQ8iPye0wKgsn71alD5h/vkDmAHDL0WqGpbiHY5Y8Bh2TRU3sqtFWeS4L71nmFKq/fEhxKchFGsiUlznax9aNXvn3BrR5J23WsRshEczp6g3oR7kE14OgMsmTNgIe3RVh4cEQPTfJTJIYB71Kul6GeVwqgE/OelT26erf6dKziyOA9FgQ93p7Y7w60HjCia2JJ4xXfWoe7G50msnufwOJUCBMdQ5zpinVxNHJEgGrstMQrZp/GdINtbPJDs+bbkfP5TV5NKN3NYLhdd363BfADAWvcbT7OR9jnO9H90MTGSu53aRrniHQ3ul9A3/P2+5NzmeHOzEm9xy1NjnEmFBt3wfhTaX/InYGV+YIBfNlF1cqrAKudoeXI/l0Casl92avOIjGk0y532Y/GZzoB7Svq8CzyiewY7U7td//mdKzNeyCKHdtR+Ea94opJ/lX37JznGiXpdaFxy/82GDgj/f4CHKgUyjpc3Gd5b9MlR6PUxpjtysTq0mGYuNYd4aa/+v4TK7O7ZqirNahlzA5Mf2pFhL+vA/RE5NpW4oku4xIfmqECVBZ9w74e3yYzqjsMYa4uysFQf5at5BA2pE4ndPj6DgKTDvK3Vh93bLe81fYa4FHKe76gnf3e2sL+vHd/Z3uoyHo9qUS31zXggzsj+jmnkC4hmzSfK79W4JmAz1WZFNg3YNtx5b3FX7a2Oeo60XHsnjPsSGmn8YMQWxTwljApa8bjJtByY1ZlzpzoaSd6KO9XCOQf/G7SRVr7fhvGD5uypqabh/llVvt7qBlnbKePC94nMkLBgC3sH9qg+ZJOCeU4RFZWJ7rOaTQpsXPFXnf5q6h1x3XfwfsOAChbG0g+PDzg09MnfP70CS/XF3zbX4AKFCoopbTNkXqMu91nHnehN1BkUQO1OdC4Q/2j8Ho+NLuqyTbbYMmyYSIT4m9pHvJ3GOwkHrUugjw7xvcPB/qP8B3DxLgBkiHU0xLgjhBu38IJa2JDTeYYQvH5+8x+XOlb/Q1HAIFlflGMuere9Wi0YIW7vN5gYu53pqsTPfxlAF0c11GZWb0cJ1kO2gaMg5kf4T3hvPb9kFWcocoJM/j4Txfgy38BX9HmFoWvdCeH3n93DipvXjmOM9Jl/OP//J/4P//7/3yABfrecIu2w0jbfXNR9u7THRm6Lm5RvZ8WmEZOt+KkL8bnuRRegqf1giDOcbRN9yYy5nIlyFrq6ZqJKh1PYvhBr6jQwfcI3tsGCavBHs+fbSb/Vx7YfWSY4fAM6n6N5p4Ze/u0b+nyGRucKidXmOngXmAmNDQRGcvchDZB5xYtDUdHyswgk57ewG3im6ubvGo/403TE9tqFlb9kPHqF54s2MvyKW6O8PFbZ7+p2KOj6BvleTnkP58s6R78OR27uvp8KGtJr66i5DU4x3opf5tBwmwyOb4f68uzgWTauJ4qzNv1CkNgAsyIurHGXCbfxhHDrkAQeFt5YcRxs5RQKWzENMSuMbAaKflYnfhrJdmYDJjopJWQcLi9Qw2vkvH0zdHXNJyr+DR4JxKdaybfRe/TMcMB0NOojzSFVnrkA8rvR4SmCd7TfHZU9iqzs8ed7PPOc+PXs22YfCtMbQ1TqxLznfQCJOVFEavx+oIHFI2sdQH7ojp2GaZrTkWUm+y6MbZ769zC6s5RHOCdNM0vZGf4RUGefnRBBbk/g+dQCd9ZP76jCfWmys+2udu+tjBKcRuuVux7B7up4C6UI8CuNPHxcsqT6StZzBoWFFJyQDt7fH6M7n26+XRY4jjbKbeqdnVn+yqkm9dreE7zO+xSqKS0b0878PyA5kR3QuLRl9xLCM6hMLnACPmHrFkITAckPdSczOHyBcAjA58Z+FLaUe70isfHP+BlfwUuBah7W5+w4zsz4RvCcv6FOw+cnp9rtPAxO9Hp8PX94bfXSX2jFuSX0ebxvcb4vmFworNYRLm7zA7Kttm6DUYv4iTW4+GZGHut4jivqLIr/fX6iv3lFQDw8PgAEHB5uODp0xN++vwTvr2+YPv2td3T7neeu3ltgxHReQ50bbLCw5t9Iicc3eRE3TTVb498/1uEVY+f7e8fDnR0pT3atqsJhbOTGTdrXny/VbY39E5kHb4tRkKnYGmrpTM0yzDTBaUJyapeGjNKM17ViafHN5Zm2Bb53QpAFzl6emurJE0YtvLiIKYdF6LCFETgQm2XJYB2bHE+ulhwxdyulQSj1rYika87sO/tbiA9ut0c6OzuFVMICki34HAb3DbXkj+6fYcd5V6d4ajHuhvG3cokMPp5Yh7fDpfShlVnMbxCVyRZxDzTAc3MNh/Za0fuJAG5NBL3FuUReJgnNYwTb+P++6N2U8fx0B64eF5U6PnXUSm5pEP1iZk4wZGZrI/oXRUyWPzbv27H4XxhYCNwKSD5ZSrgTfhCWK05cBJAnBplVw/0eO3Hf/yf/4j/8+//G/MZjSjPjP6EvnUSx9AYJrcngRQ3E5niLuYmuHQTcboyZLrZK45i460WSTb48zTlB59x0Aj3le0tNmgKVzg+THWYyErbGiJxC5XlKYqJAWpHJLWF6oR+XC/a8WZU2mzbDvRj3XQAWsBcbZP9UA8ryVKH2w2a45pcbVve+ZjlAU8eI7aGlYQ+2dglLp4cHDeCp+uVebAiLpPjs8gEg/GcfDuz8/xI6H9T2Ccw6oeEt/D2eUz+7nBkXs3snaDkvTz05anM9Ij0HR/lwKgrJ0I84G0C8FRMqaApaPYAdZksq6CDvA7t4E4KDLBe/8IizSr1tjKiDnW6xb7ZblPXNo6vw2ITW9yYO2nRMSULA4f/0L4ZH8+CCsx3ENqU189n9VQT9TS7fydVEQG68+pN4Pe+Yt8vB7zS4Uz4LT3NsfNHy+8uaBABhUKzyXQObuCXjrt62ha1kT19doXdeajD4O8p1b1PUYS2E6Z0t0wAxjpVy6jQnVvjvgt5nzVkuD+5jT8K5BBD5V8ikOxYbztTqPO5xxuFwuyXffTQl+OCvNZk1e2a2ekUCJ16z5hHiXPgBYcFPAxq/2gJsyclnBnuYv9lOu/96WU2pDy9ZREA+xMAJOHOAP3cPyU1MD8UIevk+BrudwVN6AEZQXNdaz9znRuscHXUZXDcAnQGRh9qkFeRrkguGJ5NJnKihbAo23TvQhi5O83PhX4qUgHARevr5fcTq6SdehWbkY6bijb5kNr0R6Gir4qGCH8Y91DHVSlddxN1WjfMCahGo9zwx9BrGdDLNH5vdB98HAt5GFGVd4tRaLvClIeBRuze+zsThUon7mMAz1/pZPUt6CCzPMHmSbq8y3kFfzR8HeW6y277E0xuId06Mu6yuyvU7KzVqtK8k8Op3iLdEs93CfdwoChplOt3BUJboDVdgDNhlJw30UsQeKw05tNE+dgmqK04kydZbuY5Bz3hpFNsPzWyOXa2zqMOXt9RbOBSX/xV2fWHJ9JO+x0rbm4loqXT8JyEHRuN+LWdcMwGnxFQUMWHBtak/izZBo6RYT5nNTvWST5DJxXT7GSaF3iW3eq4gHnvZX2T30duHogXB8dYcdc7odnKyBy/Dag5wyVSDqE5zC9oNsLTDrxsADNerl8BlDbXvNXGyJXb4ovKAHEyT+WliDCvoSZHjwmGARO+rxZCcPYbyvHKV4QgpwxhMZrDLZduRAS7wVfR5YiPqbIorDKBw6QQpd9ZsVq/0zRDvM/rNZJy2OqKDLUFZpFR8UZVNaPDsWjFl+pY5YiaSnPUAjPkpH+r9Ld39DJEXU9A6Hqs1bUzx648aFcsp8shcvzkd+e2mIqKAkJ3cG8EFGKUC6HQBtrIbBNlAUaXnoWaP4S4tGHxlYGNxQZtd55ToXaah+i7vbaNA3Uv2C4bPm0P4Kcn8OefcH15xs9f/ozr9Yodu+kUKgXgilrb0e5tXrvRU6F2X3rh0spWPeQWa2aMsyLK4UxJta0H8AtJkrTvAgJezzCzuYvaojE2rCcJ13DRlZi864nJia+5n8Si9GO2A1uvpvHLKH0oPQ8EOOPdMWLKc7yMdxuxAu95rIjscazkQejilRAWyJmlBii3Aand/k6lAGiv6IcDXcIZNTuGlRh6T40nylQiSitoVrpiKLbmlJSqzZTYDf0Cr447QY5Hebg/HwrZ/YfMe0/krQryhZSuoKkAW3OWYytAucj7BVy2eNwoKvoe2ibY9S5j4wfRV7WgayZtrjKc/JE60LmC9h379doc6K97M7Yq99+GEGtCWwO7uT/h7FrBVNGOV6sAXwXGvddthpM61xX4SW/bpOiEhrxDYEF6/bPSQ6YLF7/6OrnD6PZCnmwcrSE7x6kevgld5sHGEQ1PiTh/W/CsaaycLDGl3sVFadqBfH5K+ZRvVAb0720CrfQDs7whILxEf/wM/vInYegNuBRwafxVZWEJbyxdM1On7tM4Eo7J0VYU3nR6aHv7zHYw9Mc7+LLW1M+eycUQXEwK9GPgIhi9Bsc0LO958GFwMoiLrnmHd5oHk8JePI+49hr7paMefbvJ5QkwaSMSz+TJ8Nxei3pFW6HvaEyeadvkUY85q+B9N7uf69boxgbLzTArBo+b7jJaYfDe4oKpaYM87vaYXyRkpCgfkk2F8XFsNE9+ZwkHkZZxnWqZWpi+0hzq4jsGOokynAHfT7MyBpbpehBf0WTPzUnEFO+r+YroRJ+YFu8KR2LWv+uRiTN0hH5OuubUBOo7GjGhyf7dAbtRm6ugGEV29TOBK4Pligw7+rqibx9j9AJ0EU9x/OFsxgASaB8AACAASURBVFMwmxxO9OccCfGqjllhrl+mg6FFljNq3pe9Sq/wWvXTjnCqZF1xc8T2QzyPqpyD6/TSIc6WBRzUtO5Xd/h/yHq8Qdf3GwLdKD2GpvAaAp/TfLaq5gEb10Z4ohYOXqVAgyQqirpJxAy/mO9KmJP9TbNSM03cNEpSR/1Hn6GTFK2JjO64J7Qxird1qDlYvFlD1BezTRvg+C8Jy3pAE9oBtKJ5hYH8C4/vcPkJCSGZMUdlu2RdWbQJ8FiEIT/lCXhIJXs9esNv1VKp9UyhK0J1C/QuLa1g35OTOZmbHDM5myNiu6cje/f6Aqn5znbKk3+OBIkooKfxJ/tSnEqj5ki28Xni01U4YW/oLiEAbbGOy5NhqlXwVbaWlgGSCWQb1pM4vRniFO8Oj6laMEhU3GgbtcPSEaAsTmvtY7FHdrDMRLBMkooL3cpTH4xbCCDTAX2CU+gj2/AM0UaES7mgX9HUd4MSKxarfCfXBBa522DRxUTGKqG6Zjs0+Z2owE3eD8EhttOpS0e1jTNvBM++4TtPprNmoXdbEFclj7nvCQVyYmCqahA7HN8FECJdnb5ogJ+zeTOQByHJgjFyHhhuraZ1jMw7oPGekkivgsLu+3AUOjkbxfRqfLeFcVKv6Tajby2Ruj3iVSP3o9gbDyb9NV3M0HnCf0uWiYznb59CUdHkwVjLyGpe3sewVHqTTzmOBxniuVHtkwlEk9TshGM7EYv1+0tvg697IPNntN3oDyROdJlpSs4nXVg/4sN9GWyPSTqvQL0g0Hf9fUXj7cdLuxe9AqCK7eEB+/4qR7lfgY1lI0EUlmHBH2esdfrU99gIhNTtznlvA00Ewgw5PCsXXUcbEC5zIBeGTZCznuGkrYv9GvQi66aSCmaxQb1N4BaMHcIf2grXtzcEIU/yeJvRyzu1rfOcPZLsAEKfZTSFLhH2IRTZiEeoMkFmG/MsOZmNAsDmbRm17aA2iQaTc6a7GRZr8rVpNFT402hZyu/9ozzmbSyvw0vgF2cPENmCwoKCih3EwLXuKMSoewVRAT1csG0F5XIBUECloNYdvLeFJ5WBCzWaKlRwQWm+k72CtgoqVezY5kAvWxFnfGs47xVUd1yw4XJ5wCMDDz9VXF9e8O+P/4mX1xe8vkhrtg2ECnBBLRWvcmVTKQTUglKEXiu3a2yYbEEg6Wo3cqyg4lFwpgudiJssMNsukIjLJP3MsnBR7fIKN6cjyb1uUVFg7KT8qaFIRussDuaDANxitBpSUeAWWyikausF0bHQSZ6++ofJ+4rp6SDep8vvvV3ToHyvOJnYqcx7kGfj4dcH8ob/kh3oh4azk1L+PYm/t1u1K0V/FI4I1MXTUZq31EdD7SGNZ3pVzANBU3w0dEbzrf8cM4TtHtfCgmZpWoyBJgBlAjj3pB5Tfez8cOaNSiO901d3mNtgga2uaJNQL5MBu9vMCwNG+nUGx6wbB2fZHF2zaGc23szobKKbaVrChdH2blqcc+DNxPI824FxHiJHowO6DugcwF3tDvTr8h/xUvhE9sceXvujbhX+w9+Bn/8N+E+WXcU+DUKTezsSDx8GbiNsIrQBAPAv//n/taPiNcVQRrJCp3Q/+ba4Q3UsXmSTDcwTRaVJjttHuHCoJ6Zslo6rLiZSw3RRflbzfYrgJD29VS1ZfqE7J4NIDKo2FiDoTC0V6auNAardlnKgithr33W+SSYYOazy8EHlo8ewK4DW+d7U/CN1npVH0omjdjnqJ+q0OEs6fF+U9Vl1rbO2QzkHsDCa43tW71uw553o92ZPomX4PiMBpF9tqy2Eo0iDSbRk+lyGIIozoKrgZ/aDf6cRt75vyMmi0I5k16CmXXzU26L2RRggyMkQ7E6I8LbNMFKYyXj3jVPa2aDlFv9kJjtSlyuaCAlcew/v0l7p0PfbJaervAVKDoNuWLTx7IKIgW8Oxj/BUTQW0knnRN3k9ZdjSRVZXnwdFXdzFabT37dXbPa0YUtgAsKa7KajOMfNs2ZZwQxUYrfGlZ3zQbWWTm7JP+Sel+V74UaTeCQaGU+EoFBGb1xb3Kvf5zZZhzq6JFbPI3wqq3lI1+a041cTfYZ/BzO7jKEOIExCM9AuwSYAP4+NSvJSLQpGRGV+j7nPCYDMhZSexvOXNNodZRwWNEVx680IO7DKf1f7QXRNWLxxa7cIpMzie5Mmtn1s4Oo6MZtI1old4wPyFUi3OPucHK44YopE/njHtvn6hb4qGPRHKfxLz2073ItKu1Z5vyOzw8uVO00S4BFJ6FRUyJ0aQDC4FE4woGe5s7ZloPWATicuWsNaqmLOYVLYAXTHeproVYeSXwBPHf5cK7PeUa0OdE3lHJEO7oQSlyTLrTF038ks3cTet+3gnciMfAT50rPmfHhTYIejG5Mk/kSU9ongCGhethG7/+bY85TuX8B1Ju+N4GWV8auzkwPbanMYRjfa9cx+UaK0UXk68ThZbelIC3JUztT2qSg40s+6cD0ckazM53R94xKyJFFWFXQuCkiIQ7akUrseW9MJKcDEAZxD3yEND4vgacc1Ktv1+ptpbSPY6j6bV+15OL1PCu867JGaw/yzvO/J8B9Q5M6mG4p36YlkThYJHdTTIht83IWo2mOVmmP89Qr8VICfCSjA/voN2B5aNsNHBZ4AfGVH/4jla9VONy2pICSg/OFcSElv13kjhcPnNIXHt+8DNUasLfrjmSbhLVfwfjE1t9WH+jHwekZLPFHjCDSXzmQObJewLjTy++MCCKaKO+OHupTEB96fQ5Sbf4SO/J2HNwrfhfulbW2Bea1AKW2xYLFF46LvvE8ty3i0jVa0i2N+v+L19RXPLy94fX3F5ZGwbRvKdsF22VCKt3HGzWftahxv+4jj3DUq29B6pHz/FjFititNFgT5vj3i16xTVu/2S4mWnDL1YVWl4v8OERKyuuLz+3GutS748LDkb/T2r0LWr8dMEOr8y3Wg/wjvCk72vyF4w0DeyX0/IniXdbBtF3COq6ZPgBRWsjnj1u0C60t83K/76dl1sqytyuuGOo953o7UHwEYFN463Y3331Q4AG4wbFPaPFD/278Gvv17sxyIUvxHwZsI+P/9O+Bf/i3Ma0559y10f4/B7R2XNyqOk/CLQdEQumGcydCuCUm/v9ug8pII2Ai0l+arm+HXBhD31nE0avuthzPa6Z3FH9W5qppTuo/i+bwT/SicqXNmzB6N+pT2dNZO/cZ6VDEQdexi0LyGJzP0BJ5sQ6y+WQE8yl8im0Cn7m2TyRcGih7brgOibP371yKPggMbQ/mJjQV8H0m6w6jLI4XHdEfi9YwQuVXO9wrvgkf6/B5+Xc2UHJXhF9pN49flTCcUJiAtw5nB7iqoqrhzcemZqnjmETzM9xPymMBPjnUy9vvw3PH4cXYM8448++0ghHFIYhoad1aekpV+AiqWeEchLu+vzcPeeDMdRHJMa4I888KHwdoLC8d3zupejHdOgZLacxevHpSZM54+JnvIS1FVJJawe1cBcybq/jhy+c3Ja3KNQnHFBFUJdTB4xK864M2hJ/XKrnbT4Qqk/Gq1Hi7NXVw5OkFLenJumA+IsAwnizg8aZsLRvRFOooO8L5cROFRMUEGdzOp+GDxq+OfTGAT8fwetmmHyCYJY4V2uDKOyP7eoGtcWUvnPmeYZvbZ7fIj/kKF53A3kcfvDUTu4q4JjPmoY6P9O9XTonYUV8g479GNDlZgAXOUcOBNcqc2emOY3SlxE5gZy0VCk5mESQGnMp5MQONjkBcrCd/jGoQTfa9BdzcWoN932b6xzYGiexNeAVvBAACP17bbHNSc5xkel3QWVj7p4Yoc25A1tqVZWgd9YWVKmqvAVQFcajvl68Kw09tKAYqctHdF57MZU0bS+n0FQUdeADQkywuyToQmFxreeMDN7w1RLlDXzZnk/DqTcJI+mkS/heffTBDjRE/WQXttN89Wtj/a3EYhKiDSq3CLLMKTC5cET7W24+DBwHXf8fzygufnZzy/PONx2/D08IiHUrBtBZuzjfV0n1obfxYiWazoNAQRNirQi3TU/s1iflRpbtPmLzkgsUWMv1wVP8LHhh8O9B/h7sD21w2w08EGa+SUBDlr/EhzuJWuOrJzA2LvoetrRJtgJZZVUq4GBcXgz4M7hhxHJQK+VrQ7ftVw9I507iPeCULsDkcx7rqCFWyyHBNp5bi4IOZPhLwy/w1F+GKWYTYgTkbURyuc3rOTcmcruu/ZmTYMlPijRn2TeinSrlZ5mCc9B3Yh1375VEh2+pIY/IS//6u/wr/+/AL857Vdg2BHOBcE3lyCcQMXtrtEeOQf/h70z39K+foUzUAfxj+3ZMEiMDBdHdgrxO3d5bnAyW8mnWH+hIfnqfP8AA6+G9YAEe5meCBsQAk0ZaV12m07c4rtpKtUwNBrOfzgHKEMAk6euxggS++5fTqAG2lmir8PH6i8cXQ8THrkeJ35cQl+CgnQ+8nrHnn4IoP6z4i7zv1qlvcE7zS/VdS98RORN/1m7+R2bztZaBMrnu9SmQN5ebxPdIDK7lOTBr4C8/S3PzcxTdyuzgBk1xvp4A3o57u3P66yO9RPaKldJGXa5HDcVmhp45dZOzLn4uD9ZDC85g51w9ijapdXUSz0o6/Tyjuq4I3hiHbtW5oxuac8kbHT76LXov0TpgC6HZRsDpPSZk9nu8TP8OQydBLC71x1OzEnoHL+ovXdMrPCTBOhV6J2dE8XWj9bzfaWcKvfEl6tXdW/CkeqfcJtHEBEzUzLLKA7NsgjyCUKSFvseRja7vmrzk8CmqFLVIueRDOra6nCFFJyutjBpfHZ0oLlkYmwZT8m2lB+CEkc7sxGBdpOdGC6E93vVlnpnZOkNexeOqBJcrQ0VB/GNrPMTmW5/D7tqp8YjLC+29XZj4x0MkD5PSgTmnQTpTZMYA9DLYrySGAI7FX0lDkykd7aLYWQq8ZlNTBLh6m1SiZJxaHWxEbsA4+Plld+nQzzd2H7ls8cqCR5Bw3oJib6rtmELgcfAW5HeRHHeZMppegOrSKthNjeOg+hu+nleE/jHZYWFtfkTsMMyFV8+ldG3er60/dFbMyMGO4L21xZhses8fTruxzo2VYJUTFiHIMIjbsCyKXtO91iGZ1e6PR6ulhzItDTIcqd1Lr22QkbZd3Md11MdKiUf/xOdMDhIQdufd7ors8HMfrpF+wTe9o1fVr695l9bFlUBpAVZfJmhCzU23UrY6mfZ8ydwRA4Ig2t9EDGl28XR7wgz6YRyBYbS7tLVyQMtCsLNi3Wn6KnCVjuNVcPNJo8eSQMxsZXSS870Q/nOQYBmDq6et00F5p6GoHl60aJ5HPxFcCrdPIDAV+pfXy9Ag+PAFfgQnKEO5oZ8ecFrA605QLPmfFzlO4XCxMaC+zBMa3qi9k8lc6La1kEmIKlnD2dyJhk3282OB3cXs2aUMvI2WJdUqm9E45XN1nFoUz02PCNw1inybGVPludZJRlLPeImM7Zr1PTVXagMzOYK2qtqHUXfSUnchL1TQHCfwxbmyqnuFSgEngr2OuO55dv+PnLFzw9XHChgu2nDZetoNZq+KjMoG3Dw+UBjw+PeHx4wfW6t/2O9VW0fLOHqurPbKsA6IsJ+7O3sdjHM0xv6ElFvwJzGiwKwo9wb5hg7R1y5ocD/Ue4K3Q9z+H9VMiDYj+JSvl9PrCylUBqjw0DbQWwKRTd6cHuTrv+44RjaiShOc2pipmuK6732pRE1TsWqzvSaBy4mRK1ydO8OlLvV2SYQ94XgPnrfeH3LWpPrbXOznMjnV9Psd0fboyAp5aKH4rmZz9idTxUSnPI/P3f4j/AoOtuznMWx3pz2PjDbt4YgtHsYDY72pVtRgy793eEuJxzHq8D9bAS3ScZRmqtuNMo4VD+e3eeryYRwspvBXAo+hbtC32Y/cf2Lc339nrhqE0NYrlfjuk6RVQwL7W6u/v6g/h4Sp8fFc7A+A7zN+/wvlWdVyXhyPYPlIl+5/lq0LvinTPf83N4J0eMq3KcTNRLn1RVe/zc7JY0ciQ3ETCDffBMrS7ejcCT+4cI7op6EhOhNJNBr07w7dcJIR0ycmwQx1reGd5JP2EmIH9YpFtVfU9zvqs5cEfFywmkiUT2Xq+ZopI4Nv0uZXgHrf+F+wUwLFogtWs70/iDHpAnXReQDyYMAPMY5e+hyb2dpO/s4rQy5mPaOKMeVwtoluGn9D6vhF1sf6rGwzI10/u1M7grYVa27ze4/MC8NxY206nmtvpHKPyXHPt+Bjyd+718Prkb81cL1oU0fqeREk6j+IivENWi1iMWMDjRnPWw7CDr+W4Qz1E88+CEnup3kWVsR5av62qL7mMqMji8I7LbCmS8P5a3JAca6wHCOTC+cltUA8hpwJMGd/blbrpmUwSWCKC++6qUNmnc3cTauCqXWMsB6gI2yxjC2wk9p/yKugHBFrbYWtjpGAQmzmP7Leomfw3HeXv4Eq1YedKVw1qyw63Fd4ah8MPE068zSMJ4z7XZjvvXHDfA7/eITwT73U2PBDdoREE8+aTOzLBfs/VGvOXF4v3dpy+wRR1SYzs62IFCrnoBiB0g5Oimx2cBGhrWx668JvN+PWPPOaQLHd6Z7baWTEjNYJ7o0NGKibO4XUa4OnRfT5Fn84lXK2MIr1ryq9VKR3T3dVKvh7KvNhwb1BJE4RJswTfY3JplR7NlX9B2n1+ptX9/7fVsQhQ7Aw+QnfbvDffYm79SWM2tzUzTmNE9C4V5UlB+snIm/fwbDN1+6PKVXCwhLQaSfxiw4ZSSLaFd7cR6rZOzadgSrp3jvhK+Y2JtfWpA70wePusCaZY2sIAnznPdeU479p0A7LKIT/4jatc+1ibbg/4nwi5GTmXGvld8/faCP28/42EreCgXfH76hHq5tJ3m4HYCDVdsW8Hl8YLHx0c8vj7get1Rece1as2tn0opsks94cnZYn5Ro73rt4ktQpT1x8cEXYTxI9wI95hhHxx+ONB/hLvDlKlv6XsbzehoTb6xukfzgEDSmUXe3v3952bIRmlnwrEJZ9Fa3EZ+baAI2wgWjWGnvLk5zYm533ded/BewfsO7BW41mY4qQPd/yos6OUx7xgm0snvPPd/6N8deNPnZbiVaBV/zngLA5GzVb4hMGaD6GSQK52E3x7l6WQA8XvYqn5GYTK+nX/wI1Etg8Z3450CbOI8p4Ltjz+hfv0T6Fmc5xtZXHMIeR67YYxZXUC0nl2e/+evgX/6k6zc81FqnMmH8fymGSJ6OFypzMf9KaCuHOXz8pPEy6JKP3rD05VxuAN6BqIOqo3mZ3V5mBeD00E46keyO8hDEbrIR+Oc3NWrJ4gJIDnbTGbTCiqobKhlB+Eqq1Vdn9LYhkQKk5DaaDoj8UOQB2NhfQIGbpR2VO/5MJdF2u4FT8CnQY/P8OQkq+PRlc+zbvjacR9+WydinKW+M8yc+VP4bqS5J5/9Uvzm06repHLSsGaMSszly6N9r79NqCUZ7CcV7IUw0G5QSCp7xWPu73InQuM3kaNEwE7gzU8b6tGCBKokfNoB0qNtPeKOJS6HH0/LTVyfUPxB/owD1nnFNClqljcrUE7xByHXlx8Hesrp6QD+gxBmCzRvynzED4p3o0VfcALa6FFkkel3TSEyp+i3Ettvf3pY6+RYTF+FvhttBKs6/PqIaGO4fIOsnwTmPg4I+nZS0UDdPCXZmGfxvqIfw1OiKc5OPt1JqE407a/+re0O944vTr/6s8JRtTKD7Nc4r6MsPushr8Pl4FzOblT9JWtH38W6Cm7sNqltEC+CKy/BOOd0iyoaqS6UzWw8RQDoD5FM6L8m2Wn5Gp1eXn1M+DuQ0gTOJFtUzXRx6pcUJz2fTGqfZ6xqlH1KFU3NOZkfcOMEhfa3Br/DKLU9WUsJgY2H+x2S6PpuArNZ5KXRRYAPgiHS3wM5EqIZ+IOU/3PnhcjhHJ8dbrmkiVfjZXV8ul+FTcKOKk70nsrqYYB17mLGVrVBQ4ANB5sZ0RzpDU0iSXS3oNr03OKIOg5ZkOL3Z9uCPINB8C56I9oWEELqnWJiPo1J2uKL+eLCPM808JKqtkT7vr/VIRHiB+V9Q88sgp4ecitNAsnFlY7hhbyctTmwYeaxNLHfX4aHG2GdLvRL4Dvd3ceJr4wK5P8KohLHxTfBcjTiaUhOCSEQUPoFBLY7sCg9C6hCL+ztHTDiNS1ZDyIMM7PllUOSEDF4ee55ItDwQNDtX9HnnB3Gp0KSm0NuGQ/U3Dp53yHO86Cll7CGGl7aLz3Zwf8ODgrj6O6Yd/kzTnxfLTsjwuevFQjHa/OqAGq42AkotTnKd8jd5ywnOhaYk/6V3HUAGRanS1R+BjvkBFH5ZqWib4UMyvkgbfNHXfjuTizTn71NMtJn40O1G+qA9vvh/GVCkKWcQSLTpQDilASh6VeXw2uZMPYQO0mkFZZucnZ5RQmHK2ykErLTmu5v6+zUk161Mywp5stOdPVf2FpmRZObw2O5Um7nxjbZAminARH2esXzywu+fvuG/5+9d22PI8fRRF8wJVmyq7urdnbnbO+e/f//bGrPXPpWZVtSZhDnAwEQAMnITMkuu7sFP3JGMHgBSRAACRJ8fPeI4+mIm5sDtuMRqBWltBPpN7d3eHj/Hn/4/e/BaEb8rZ5wPJ5kM2FB3Sr0kGJ1m8tKKU33qqL3UOtbNbaTC9M52eou9Bn35PRt9TuD1sc7Ed4AQNc1JnssI1zRli2vPCAi/b8Z0N/gepgw2UBYU+at36k/K2M1I7r7Hv7QJRTBGBr7Av1k2ySVU9ZYRFOQdBrm68ai70ia2k6Yc63AqRnOeavNgF63uBZlRvTYUCbQmDEuRHIot3PcJLF5qNZ58HoMruId3x0Y7nsLzn5CmZW7hTI3nT9fqXxcDjsZTyfifQkjqmIan2CGIqNtCS/NeI7SjOP00+9Rn/8K+hsD5QAuABXZ+2jHHHNjzPFVd38juND//gfgP36xejUlqk8U+ljXt7Gs9cmDBfjTZ3t9OHz3GlAuSycRitQ8Swr01Qu43v2674N5YcEovITZrCSXkzS/oNQnfKzv+sSUIKdcUEBgcek+DqhpC/jihwnnIu5yBfGVsNS+rs5Iflda3KpPXAMYLhrMwP0YbeQX5xrRF0vnyWcFaji/JP2MlZxLN6tWSJv0jDyO2feloxffrnks527ZHV468SoxqS1quYQ2HM4wI9KjHS0BMZkr+u72rLiJtxizNpKT6Axw6XcUFmr2M8GlYr6QZ7heQPehqc5tUvKJXjKksuxe8i8n6y/hH98cXomE8QRcPn6DsQuRFgf6lDiFJt/HAj06sTjueWEtA2MoxQ/zIuf5MOYs3DaiAIPLk7DIt8g0ILOAga9xDAv5TNJO0uuiSRvvsgFyQHatL+n3sUQXku587fzAx5mUQ6kph01BF+Q7R38Ex7PTVGhS9g6cW1SZF76MtzScOz1ldVrIu/vezXuQgyukde6sc135P5cz68uct5yg7O2L3vaEPt/2Q5VGujsv4y9oWC1nEpVd3D33mUFdGKysK1h1zF4K7pvyh/JJzKRk5lI9Q2v7PVjbthvBW3oyjJrznJncdXqNhhSGrYeQunJvcUivgAHZ5iVlj0297kb/kkuROQAJLiRG+OXtyWlTia33OLx14X0Kq4umXRbD/quQHhMBlaNdKkhXCKT0F7K5caF3ks9iKIUmXNHDbqJL4IJ4E32E8ncX1ufzQutTA3/GIcvtMTKDUAqjwq8jFjsko+NHG1Q33TVc9spPvDAEuKlE0i04PwQVos9RdD0kb23tSXI9WUguConr1hhim2rJgyv3uJCZLAXUDg/lMIVb+X2+Ai1MePm5es0nNf3R3UdHPr5ln3Qd7VDf7OqinbjV90RiTK9oG9eprbPVKnehuzyM/jmQT1jGYK3nyMe/OKix/6o0mPLQ8E1fZv0xjCul/9j2seu9nHstf35FcgWezQLGED9eg7o1E9suXzCba/E4slf4tLKHE+SMq06g9+ycMT4gHnHt9VFDedc9Wb37gcMJe/ujqIq2qzfauKi2yc/pbOIRdeOK4+nY7kJ/fsZxO+HmeMLx6QlcK24ON6D7d3h3d4P39IDf//ADjqcTnp5afNAT/EZGlvrq2C+FUGU9xd91PvvVU+gscff47uoLL37f4MvAoEad07PwOhbxZkB/g6vA1CzjhjPNOYFJhhQp7K5xosMZy2M6VYB9kp6n6dYDV2pcnOXSkelOZjiur7+VwRsD3AzmXMV1+8ZyIh0IRvO4epckRgVoQ/OF5MNVm0vu26/RdVbxljrZuYzPzCpybKvDWSczXw+aBOzP9sDrefhvgezuDPjKdKYQaj31XQzg4f5fEo2kgAvhpz/8Dn85PQPlby16kdmluHBHUBh0p/A14n2ycpAmnX3nr84sFg2h1dJdgvslzSdag+C85vv58dGrkNTqYfas4S9TbH0Zr5koTzJvUfJJdEut0z7fkaqgs3Ud6w5MOQXTk8iDXV0xoafmt0riG5EkRKjjOsw+96o3UVGV354dfxe03W7hifC/BJ/xu9s161BMwknulbOT6BkSigNcc7f5Xjy64vvsW5hR0hg2S6+yOG+oyWTox+qlxphQyKQCQ3u6O8/D5ggfJifP0Ra1uYRPdhqQUv46Rlv3106WVWRBUJTyCsiwPI54KpdC7Xiobx7PC4Ja6WMDrGWBEyBrGAx5KZOAh/9+Zix/cR2B56+5+YIOo497uK7kr8uYCObsVHn01KCu3zJCc03S29fPLRy0F88XdxjRjLxyQdomNdJrALpAdi6/J3kzm6ET0Fy3Uwob9Shj1XkwSxrd7FJKSTMb8gnReVYPizVw/Wdl5Tqy+470vAKSJklXYi2i9kdZMJuIbwZgxjkIr3FNCaiaQtgYIDAK6Slaz5vOAGd8F+luANAPsnj+6/B5NiIuYRNZ5c+m3AAAIABJREFUV5zNllj/d/oluy+5r9nVPlbPjTH9sOIfE3YZZG3WZyY4d2Ov4y8jUoZzLC7xIIvYcmah37hVgGJ83Szjh8ikhXtbdozVvEGuQ+mDxP8U06/6uZBTZdFPmqs7dXVf2k9bdXlexHVrkTi5bnpXqi46R2zIHEIp8srWjVKkYi2sfSQmx4Z7Z7VhSIPqGvOCpOddssqorjj0ygn/jrP8nv9cLHWkMw6cI7wcdINCROkyXqR9n2NnMbeL4UR+zjbg8GQMvgbIIUe+D9Sz1cIwbmNvZw6XT9wNc98SDxWocYRzvaVvWHVn0vGjU4NzxKM4L9rXhe2FdK88Ss8LRekc2dDy5SqwYtSI76ULp1gshvUcfpKwI7qx/KwkbA3RD5j7fvWu+j0eq7xc3LC504UpPUJoUg9TWXnOU9BsF4WpS9xlC8Fdn8VoG5+V6St9ohnSQz121MshwpV9uy+aL4OM3F6zd8Ukhu91+4Bb9OMSB/weAl8QznXIedZwNrl/02o1kUkYPG+ZLLmuQ22NEGino/f6AqrtvKB9lzQhJ9ADn9A1iRZeOZ6Sr4Jj9q9VARAzNqB58ylt02EpBeVAoEMBo23t2YRuTvWE29qYULk94OH+AQ/vPuPu9gaHUkSnAgoVFKomT9QFvJZuugwh3HWejerEbiXkjBH9q4Eqqt+g6O8R9qn56zbSmwH9Da6EndkKLb77GZ1ftGP3HWniaDNAiu/DwvNEeV6Bi0ceDzDg7vQh5nb3eTaeb82Fezt5XmXreGNkJMnHA6yiwGkZNsnXSSq7hPnPof0agR6z+8cASs8z47l174QwvK4yy/OLwCsUlTwm4MOBcGqcqBvCtd5y8hwHAv7lR/ypHlH+86+w4wjitt0WAexPDTlAIJpdA1NS+gjAf/4y1H7UNbLi3gfoNS33OtI+O7OZB/0GOv5ZGLbR2wf3/MLWWdUxT3CMRJtqziujzKrBlvMFoWM9XvgCI/oAZydNq/Z8CcwqtqjsXvvc53gz0DbaSU8AHnfQBM6fLn8NzV+bdohPMcyzRn328jRciojYPpy+7aEx8D1K32VBxgLOM4d+olSWALPsInS7e3HhOuE8MHQZ3pa/DrF+bNEVtzxmkr4FjHQ/GQfmQu4apWRK9i8Qvl4mDXnx8vVs+DeFMwtnIZh3mmmPtyx+zb07dXIg/40CmawKtxPgi1Pd0ya/hB/4/NKVE5ac48OwoW0v/0tUmmvSTIFHNc6fwDF2oQtbPbKyrZ4P+QRJbgzaFmL/nWF6V9ernyBZfT+fb144zS/z3uO9GDNxmxMN8RKSFxuaaf4c1OYkLwb5EbM0EUbufQcumtpp/y83u6dGs3giOy7dT/vCMZOvgsjhXaw5j3EDT+r0bkZiwtjAlnm6EEAXTM/w4UG696ZyQ1FOmhPhgLY5rsC5URdDurLftilE8VBUul7glwZGA7AUWgjR/Z1e+SLb7JzIbuTQ9YXOHtqJcuJeBzX69cVuwcnuQFUv2hNCZqdC8Kor1sRxXlT3HtzNgGLnjfGvZn492dUbLzsqs5JHuTZGiPTnaGSV5AWnEs+B0YzKZhNNmZcu0roP2aPafpP204Qmgwhg9YImXiWbo4XOBzylTNtqzSZchO4hQvMLIsVn3BVwG7QMGfeGhw5Apc+e3mkITpRGRaJfD5DyOwszXcEVyKqNcNdVTgBu+jjKc5Zc9sBH37mJzHPs78s86mX8VQ6Qtdt8rtbwZ6K2Zgs6X15WMDbR4W7QjOe6QfnE/T7nA/XrPAl9GlhXGV9S+G8BZ/TCHNern9L2WWcJ0HdyOR2iuvesWCgv+UYTtWybeGk2cGPADe++tyMx8qA/vLBQxotOoJ+DzvlScSyHZ/Rwom3K82PbdbPyzcDc8n7/CuLayKAQCh1Qbg6gcrBT6c1TEmPjDYetYOMKBnBzuMHDwz3uP9/j9qYZ0AltY+KBCjblk14xKbTs63zq3IfjWxnPMx7w/PPb4vNNQA90ZZmqn7NaOnznFzRbz/TNgP4GL4fByI2ucPlv+nORcKLxz4yFpUeR38DYg+IzWRSgtqupTXaHvfuwGZ+cPgdv5q6dtyqnz2u/E93i9SmBsrGgozWJCbDbsTjcQevK9sAxmtmRrtR7vgzEad94jyR/Hb1nT6HISog+TJW5L4bRZXAtDsO8ht08zGlY2eBdKJwily13Yign/OHDe/z188c2iSgF/Z5duHEl6aTtXiWOfwToz9ApmPNQkOrqySmsQPkm+NZKwesUk5fhH9shTuLnca7LM/eH8C9KrkdlomwTJDeu2MJrv/VVSIiV/ow3uoUCv2hAiQj2V4FePql6cR/MefGYL03od1Kva7pMjdkmR6Q9DwkPL8L8eLJnHcwcDeSKiz+IfEDfPb/iXbmMc3Vafb+aFwst5Sb2MtaHD32VHpSerf046iiT4td4c0/njVyhfWYZROQj2qVvRnH9xcxALaBSXZXkPtPiyhjuMhR3g+0IBVKmHfesEll7uXrt+k3N9XXxBvm2SDqATyhGgqHfU8CldHfOTew0g9k4fyUMaJzL1ynBJH1Pki7IdiVCpSXXPp62NH26Kz2o4jPUfLML/XR5MeP7cHxk0vaz7mBGOupmcYcTf9qfpekfZHFSPMN7r521vL043lVHahhZCPJqsl4t3cWp4x0ul7bYpt6T3CabUI5vj9l4m33zJy9cNrP0Q516+WRx9Gx5TKkHEeMXDpFirUlEZfd7A5AzorL1N4cmS7wr3MGNzgdnTbQEcm3yw3688OwLSEeXLy9ZnSmMY0HluMAuZQ5ihjqKexsFPW26JJbH6rSYSzcVcR7plYj1TUhCWSEuxTLh6gIZS/p5XrWAL1y0prKS+ywPv5MIn8nic64jAD2hqDxHF1/1VLk3nGXX1QTgUMnuQDf0XDS7xznIO43bI7JbQyA9uq5ywIzi1HhL2MijjEp1l3BBXi9F82YAVAIWsUUljRvTvZwQZdKYkuaMcZoFnws8vZ/5eiaDKzK++FSajq1hOA1ccXjXNV9fb1tMn3IEreMlDHDRFrNxrMEFjZbyHG3ISvDwp3/J4b5sN7JNp80gIxu1Ic8WjTRDgOK+H6Ji9DJr55XngHw9hV7G0GWgS6txqzuleAEtLHsm874XwX759lU9WGhVmGObMANHgG7RTp0fNbHv78CwBMTEQFs/+e+Mphevj1hjOxkg2Rj/CfNxnwhyWLyA5U5jNfxF8PV1wo+5eaOhCtwScOxeVrg6KazFFXTX73B5mJDsYz/KV49CyvNi3eUCuPTE+eqjEykdP444EqAbuGIfu0qTvId0HKK+Cmb1etFakNJqztydrEY7VW7m1kBfUULqS/i63Ny4QN9tGumeKnmUrx7dkM95+arJLmkxk8XMqFxRamk3HDCAClTxRKncM+DEtu+kDbXKOG0Vp0NFIcJWKzbecDqd8PT81LxPofH0yozTtuH5eETBoelSVHBTbnBzOODmcMCpFtTa3LUfiLAFxaqdkGfx4Gfu3lVXcus6NKFnP/vx+vjs12Q2u1/9brJz0eJD8KU98wbXwjUs4s2A/gavBOr6OaUwaHhXak1o+olsYPpeCZY/MRDqDiTbhQ6ZYAfFbSLIgc4AS8eFxYhu7C8Yz8VYvm3g09ZcuW/ZhXu1u0aD6Yk7KkHBkF3hQXoGEDYbFEOEfIPiNeTBi9eXamGr+F0ZnOlGwBWK8aVwzfzB0wQDYdH4tXm/BHL+gdyT4rSn1OikQMeEGsKL/wX0dDkK4b//n/+N/3z6E/DXkzOyazzEcebHbUK6B+/hR8CPAP4sKfy4XmwMsdy9AZJ1UsqTuLNmiThd7NLzW8K4NU4/XC7Bg9FO8+Cd9vL9gb6abz/tPvPe8r4PO520Xf9kGmHjocKbC4H1HmYbe4Tu3i8jt8+bwuKKztp2mieeAnghHeyilJmeT5QT+j7mOOG8FA/ft7YQmvFT/jZpG02TXMCHvWweJ9UIb1zg7U8AgH8t7/Dvv/wc8Vvh/aXAzymUllbNn2ctK5xY/mMbBLGsHRj2AE7juzFFC3z1s3GrKouCZaAev2DP2pcyxljDGO0UuupZhROSehTiEH91oq+/TsGw+1L9Ss/ZMXWpruF4wddm1542/l4gywdbsZrxllm69Evpz/R21SU0LfV9qqYnT4rkZoRpz0iKKTl6kQiBPZYF+ruMPcqQQQ9RLZ6kal2XYTVkzzMegyh9D/VP8U2eZf3G6ZwufWuqqI+2U3MuiXq1yDrZUvdSGeu/awc4Y0VfxklxefE8AdPTVvG8OV1PB8a4ROPZdb8MZeSUeS1y/RzKuWnm5OHqsAMnHvotDjuXPre5LaLul7FEQetMk3hC/mfV4lA8uXfHCzRzHZ/uQ7/XnCy06Qk8l2eyoNnnEyvEXLkzYF9vXST1lXIB+dfF0hPo06IVXxpCzfANn4e2m9efZnVUY7WkLW7BFRTvPEeasZC4Sj74esK5qrbqBAae6kVglNaGtUI377Ti+wn0UpobUt3c7Pu8Ex/st7dGNKAzE1DJLetQSKrt2dTWRjPTwz7Z5feVkK/TDWAnf+W1V8tqZetJXwji5p69iEj0LTidNaDrCexrFRq6cDp0WVsEca58flahWbbVtflOcbOTwkSECmr35gZyVZmiBpAuFsj+m+BiZa3x8Gn7FQixcrqd1VQUeEmGkQjR+zqfRCdw2iscEe6qhY65M3qTz4Piq6kIQQ44FiBrCm1/kKMhnSemAWhPzw6n+034kptHBBxzYHof4ut/yQPALK7GIpbl1wLmCnOjzfM0lmGQ/QQcpA6V2xz5yHJYAMANgTbuxnNN79RPf5iE4FTmWdlfHRaFOJLpeAO5sbtMSgenJNxcX1uSyXwBmAuGrnRcVaMhk1CBCewM/GAs5d533VsM2eYw1vjK2LMdAom3z6o16DwTXHfWE6Z6sP8m5V7lxv0SYcbdBXqt7aBhpQLU5hGkFkZhxsZs19cUydsktDVbc9K+Vfkr7R70bat4Pp3w+PyEQyk4lObSfTttOG0t/JZvcXNzwE054Pb2Brc3zYh+2G5Q6YSyHUC0GV0q3syMujPgyITbmWZwXROWc+H+pI/CL3rcLgF6JrbWmmj5N2ERfzegbZVCk1AYlw36OsZlS1tRX3wzoL/BldCFRzCKr/ism4T2+9wymKo7lhVOn3uFkSz7MU9hV0ExFXzT4SuL73ZFkjekO/ftdheZfjdFVv480zQUk9YR9Fn3bTJ6lZmqG7U3hnkBvGIy/puA9bsbPxclCjMvmLRVt+12l7nebd7+/gsVOB3DOOwESz0/hwtRvqPnNZWVGaXBoGm337BiGMfj65ToK+E9gE9nJnRfBR1aPL8knx3cfTgjnkAORS9w0Ek/ZLKg2csVGLZLUyetQ1aJ5ownjkrqq5rZJj4voeNVm12THrisHwQeUhQl/9wI/upZX0xOC/T21T6+kfe9U+YzcPH+9Xd/BBDJ5v/++jMuhpd0aqjfYpbIk/jhW4pgr3oiW93KHeZ42nuf1FxFIVQSbox24/FB9gXIh9K/x7tfdYLWCINLASraHY8s/N+pUX09X+LTwco0fmvjzrUJV9F9FO/a70slOF4efBM6OMezjWH0OCqXpg2aA7WvnMwYeOdMj5xk5ZO+eLifI+hFxnvJKCLbT5dJQupvXQdnp2cjNCdpU2WZn3k/EHm2dU8/8RWVXtd/093zlNo3yYNr23wx9MN4LroyIUXNuv6LyO+H9acZraUysxGkyurKoWTkuMtaZhQqPgOXsRrKw50PIZ8GBRG5LDRmac7DfhvHrxO7CPRkeRZ//XRNCz+gGT+r5pOzH3j9BM5Vi5zuMq3P5H2AD+n945h+hQfR/jRmVJVivoE0OOj2I957ghPW8Msh6/VF5UNTvCjFTxmmcijna88Sb2ZIVx0UeXlYzo1Sz8JvzmjGKmfwlvxIIlJBd0TwmI3vvVrNhbS6/VRvd+Qqw/J/b2cltUJlPixDXZadCD1V2TbYEcAHYdEOJ9LT8QBxP5/LpCfFEQlL5YkviGWDX2XZpOfWdThjJnTsT2wlul8N10vcUtOwEcLlqrpNVg3ke18aeoUwYHhCfWEGHTwuNGt7xCF2kbr0pSCRxcoWNC0+q2RO3Q7RvMGKIMbOMS+2odKIqVFxUFhgG+iG/kk0waVJ2LARLg/EWHnNm12SLlXD9jEMxu1L+ifQrGNUr4LE28P82NVxNt6a6qGzkAFZ2wwXms2ZFj4fwO+aER2PM8WIYPMjgxpR5twvEqz8hP1Lyt54gb74uZjyiqVy2T5VbpuWj2ju6J+3ttGulHagCui+qPWc1EZYzpP2dOCvMk95Ifjx45rIL6nPSGafK6p+Jf0xmzp8c+h6ho5rGyL9wWIykZMpEkfHTP/P4EtV1Z8kZ/DoGv5M2obv+QStjjibNzNwOlUcqA2CUg7NQF0ZBSzLDv3gYx/ejcm0eUBzz36qGwoIp23D0+mIz4+fcXs4ALXih/fvcXMoIGon1B+fPqPWDYVa+MO7ezzcP+Ddu0ccueL03Azn7S70YrLm0sNWUY9z9f2+iPafEsLwygrldL6Rvr+iC98M6G/wAlDlFHFyC2C+m0x3Ks8WnWkqYGI5ffK3VNAVZnqWTkZ0QlsSM1SDuD6D22Sca2Oyp80pSVJFmWy23eMj9tO7GE0J1PJzhbzq7afL5ZWMepF2NTldCdS8m3Wma3/pk+dD2REFP2mawp7Af83c9zUwmxVfmjDMXOU9nCyXe80L4b/9n/8X//X8EfjVjTGCKS8tJBauJ0/OmYfI5RFo8y+QMP1PJVSn5mm9OH4Lbv92FhpmEGJf08fvfeI0YwmLYOMCZyfPOEYGPnBuzL1q/Hh+kieE52c58RSJMjl/qVePaV/s9GrtNGHMS+iI9G70GRo0lxlfcsY48I4FUXyRPrDMtHCEhp7lfe/ad5bMD6HlPH9RRzXI2MSXgFturugUbv8bAMKP1NXBvzz9x1DCv/MT/pXeBZRmVfwqECbZKkPR5f1UUQ4PO7AyBgvM505nykt8GokXOAFvi8BFvDnI4oKedtGx06rq6EQXIr2vyip6DnQ8tw9EnXiYZdFL9Jem/1A7qcvid40g4X0nuSLBTC18tyF8O3D67jvsFWPtxZOfV86aXgWRj04UR/+D5cAK4rTnOSxs++Q+TX6mHmiPWWS734AVa6K0EmbutEksxElvJJ9Bym+gmQVkgw8nEZTByG4lh9PDyvC30juzjiyPg+GI9XS28zJefAu2seldoVNueJp1EjCV/ef417Ievqy9xGzRCDSe6KBsuM9ZLBm41nxA6azKYF2RlbVctOtLTjx2WsDkfVEGTfvHBZl6qboXh26dtdgsbHDhPBvjs0yWg8QJPTcmCAi3eQzJZjytI7n40KCQby9FI7dxHJdRpo40picn21RJ5/+RVIZD0MEI3t87kmM9iE8A+snzQgRSj2BQL02eNPspcI2vH4PHF20I0nr0NvBziVJKO/3FEA/Zdia95V+KTBUJzeitlW91Uheipg8ozB/BeurSd7cXOJK3nUom9MMHvssqsLCCwzxdLcC8Uq1ZxzzYVBnVkM4xxzWM8+cWen4dhOd05I3ok/xHPXidHog0ctlmgTTmk7oSWaNnItLBCdVZ1q3qIy7RGORwdlHNACM0EzwnKA0rvYViXb4+P2gbe+Sc7GE/N2gUozTjZTq7/z0vDi7mJ/VVvEnfpT5h+Cd43TRV+IztVvMVSIJTmaOv3Wps+fDnwxjh80GmWaf0Qfmpq1RbwOpy69xmeI/2ZJGYAzFbpgg+pndbHK0dNnTPerelnz6H9jkDhwLauPG1A6Ird/RieKYnhgq9nCeN2b10rjM54Y9O3358zUtwV1AGXYxhnqR4ksFvMTWbWv0TY9hJ69uCXZh/12xI8t7vc5//GG12ajxQiU/zCvJZqXVM+zxJodbmtReF0FysV1Btz6jc9vmLByovA7wv4LY5llFrRaWKU91wPB7xiHYlTiHCw3275xxUsdXmwp0ZuL97hwMdcH9/j/v7B9zff8LT6QlPR9HpSrcDRdG22oyX2oJoPZ6+NN0SzZdG3yAC9bGRD/6NqmGeH7yudd8M6G/watg9jZXnv/MLxMZXNQ7qRHaSNec0/kv2jQHuutMqJ9Vf2f3pHTdVVqpZBuHyxPgctzgfXqrUk9RfUJF6DXwtw/hlhe9//k6a6MsDYU60FP/ILayQjMeffo//qs/A4y82ntjGU8+HkzIcJzSXqEwO3qNf/cijsDoLPKP/rw2ujp9mRRPw3i/6iOKv7+Gqyz28fyMitdm1/beIt/dJd5X3XwMxtgHNVVO7A6ydWj0AtkjJKCDabMJEek9ecC19GT7/WDBZmXoEcC+fDukzTf5S8mGY5kOIfpFp9j6Bn979qz3/uR7t+d+PfwMA/PHu9zFB7tNV9pfG20uriyp9drpTwCXlTY7EmNtnwmAsHrXydSG6gmBXGQwd4/pVFnVEEYkTOlf5kIUuNHG4/9ffutrZOaO5eWVwLX3zi+o3unhepYwq5RXVf9DrwatNB5lAz/Hy3HdndMOrZUOie87h3F9pTPJ6UeTL4VSG71N2v2mhL0BeXZEFx6Bn62SS+jsRGA9RjgFCP489iBSHEqPZfdwapsSmnhs87hltjlXR8RtQ4WnVvqgu8BoZY6TpTp5fwEd9jDBsM4uAG1ryndHcHhK3hSMmdkaGvPKYN7Qova1WJjnEG06jZNJzC4QxNQ91s74s8QSeYU3jdGLELLoF3STL6EYzVcOXvcp8P/ALgA2YVEQ+ka7wcRHec5ti6j6E09gmR5DCVnSaSxjjEdDdEnN/D+N0KO9CCHkkXXM2YEj63s9jXLVX+dsJbL+h0BaF/S2WO6gSAe9Fhn/OxRAKw+48RylhrHh3y3FtoJvvek+kBpQ6U2ofPXWu4aUQamWzCxXIyXtZNG4coqBdGaE1jnPHcKJTUUmdrUZxdhukGm2Myl0b644HUDQun9+qvQN5V5LLdZAxcFFVLqpudlWZ6fkrsZHlaHWqwmVlX1q/FG9HT89DvwV6veVcUZ43TiphdSMn1nq+eoKRjTYRaDjiSSE1S3qPisoM7gHue64PrZfvUm0onIiecZjUXqEoQkfqJbAjYC1f1dX8gHf6mwUrLtxcs98JL5uuCbqwsBFnRhdeCTJhNpKQpwevr/v2YV/eRLny4f4KGTPYX9DQjKbuHhnl/g71+NzeD9QUFKK2XnxAm0NlXIb6aKaXjNEr+dRXgGs4Sa+i6xOvAILhdodisBR+LfXsC4DvMX/QJ4hMCTEZDSwb0OvSTR5ewUsFB9OLviBkXb9/WKdpLtw3UFXjeUUp7doEEEBcUKl50mo6TeaLvRXtxHhpXm9O24an5yc8H9+1WIcCbIStMp6ORxxKO2h4uD3gAfd4f/8O9+/e4ePnm65jkf512iPd7MgTR+66tn7O/vEd0+sbfD14M6C/GF4xYs4Kz4kicHXee1l8Lc3fKzfo3CpM/miCI4VnMmMfuuSxvPQd8fsK/GKT0/xV6GTPQOb2tKK5bq/c70Rf4T/FYNaHScSaMiHfEpNuKOpCkkeyV+ll3TijOxfmldkcJdcjKOJfSclb6hITJXWmEFP6/pLyvxhMKqIK5GThJLQpuQfRBuyeIb3qgAgohNsfPuD5838AHwn4PeQUeqPfXlLehRf+S1NPiT+lOwnwa4FmaJ1VfUVXmPa1UZsfuz5bv+irv9do+zGz/vzelU7jZ4vDAD6tFMFrIU4/diGzmDDRfCkeC74w7XgeftTDR6dLt2C44tWBn+XpCDBsxNB8OOIytr3ru5DFQPUS/NqBvkp/Jt97F03bIdNy7uNLeb9evmmiS+SOWwhR+Atv+JEmpwcm8PPz34CnncX/S1WYVby9+eNQ74sEcsw3JPF3JMtGuUCGesx7TDuocoG0Il+yTwWgA4GLnHADhz7yGxJ153espcq4pAcRAQcS96xd5+rDjgGqcncpwQzm7C6JqQy9LxAH+V4dj2UYLxjUAfhmd43BQ7Q5UG6oOZzNJ9OU6ShjS56FS8bZTOeepZl517Z+8QPb4Wn+WpOMOwva75rgIXyLvw8AHqGr80ZzipOED142hxILmDcjzYHlWrU48bMoY0OizKoDiQyKe8ok9fm0Hzny1I5UzG9mn76Y7+T6kfV7U/3IxZST6SQ9KPyHQeKekZ3RzN/nMUHCzy12iXhFsL1Rzm2GjBsCev1GhamVZ2tS5Eu/fOCH+Ksx4elt8qGjdgE/SE100TBMKopXf6xlh0VKwsxCM8WwwLnsdLJgUZ3+iVLbDIIrPro+GvYFCB4D6zoHM7qgtATs2yZtBqIUx7B2JKFSTRdMqbRF28CHte1kIWBgAxi9TeV6EoADNz9xkEXffnJWvDVxP7262kMHIF4z7xAxnzJ+nOlJchtPzVgO7iy2naKXE+6IJ91b86kLdwqs0PZDaRsHJZ472TiCnp8qhuWtvD6cPKMZKejdspGXT0fxrvFrToxj6MVCdRQvy3hp8E++75eavnrdyInlroMtOHSfNF+gf+E8K3R0QbLZc/e0/aRvB7mguBVfR8/P8qYTgKl7ZfRnI/1aANm3iegNiDWjVec2/pv3apG+2fjwCq6rg/If065Zq+tbYvHiwKkihLgp7SyoUdfysgvPJzoMTcI6cqFcrcSzmBBuT/E961v5xLvG8eOEevBYD7j2VfylP5jHNDtNxPnBKyMB76RwENqJcgLq6SR3oFfgxhlJFSXdk31gd8d8wn+J5gX8iNPvOjNX5iLCXD1awvozjzEm+kWU8YgebQKNEMY8J/rK3nC4ZE3HyaaA2DS7uW4WSVfGim1KBeIJ8kSvxsd1nEmeygd9OQnHsTU4/Fx6RYlqPqaHBJtMz9Bi5GyVRzOjbhvK4YDKFYVrWz1hlqUEtjMiDfF+FWS1zbHc8dHT4szY6oan54rn07F9LQVMhG3gaI5yAAAgAElEQVTb8PT8jJtSUCvj5uYGd+8K3t0/4N3dHW5ubkyemE40iFd3FYVvg8VByRA65ZnXgzVzGNuM0a5yXlBfxBYuBB7+99+yvFyVeIly8XKI3GWG60zGJEGs/X0pqvRmQH8lvIYgrkwb+KaxOfebNXuvyKETSEg/g9m3jGuF7gKff6e2O0h3YYtBXBmsVyZIOIblR0BzQ31o98tQkfud2x/L3c6gQ/tGBxCKnLZRhqeL3Yx+kszr4xVcgZruQzcXY6eKejqBThtwqigbgXCQ60FZ9GV3UgxNMPgx2fkg95Nc2l61T3xD61lf6X2A3ckYU9DCLuNZ4XtM24rXuxVnmbRyTWE/p6B+Pd6Y6NVNrIZhkIT7jJTPMcdhbKzulMwKxiQeAf5u0unKyRqRlicpvZOMB+pjgtp4oHDveQH99Ads24bD3w7tFNCvWq/pKjCU0oDmxpdJ7p/S1Q0vYEJydoTu2z53kCvuEn1OTlwpZr640DzoyqkLWtQxJTwbZhoorAFsUSwp74R2wIgBfBSes4TZhMC/E6i2fuqLVMpUuL+vePi5CYMZ51y5KiqIwDgEHS7oHbpDU/tYGR5JvoemwBIVlMLg0wlMG/h0tDji991lzm62YFMH+coRAZstuHYw3kQdl1C/FQTBOMYf2tGN4xlMy+XJ+wQ3vcNaecXA27gZMw1djlfe+mzzHelTdCXwWV6f/mz09JeE2k+/+1dM4VJ+Pxt+ezr3Qo3Zzf8SnrLEySfWVQ81ojfDFRyPCUn8xGYwLkpAIcTNUdwWXG5v2hjhE1ALaGsZF3VHVQq4qswg1MB7GIUBYgar8f+G0E6CdZxYcGCRPTrumVUXE32JhWfJZkGSBTfaJIw2oMp9lCwGPjWuG/NQwmuEqcO0K0XcnykRZj4lSy4rDfNgw3Ul6N1YCcCxn6Zu/Magzlrionfm4BbOjjTIx15c/jnk6jcdOdkTWJbKI9eWBLvanuy7x7H0Msj9Aaars2y4Mc8juqh9cG78SVmLxFGdmzcQbsHMYN56+3qLOru6BKN3pNzOkeXku95tHsDRSuC/3OldygkLT2lRynjIlI9ouof0vkyQwtWRqxYj/avjSAaJJ+mGcp8jMIvrZQI2rkJJh5aX8QRPjd099KWMdb3Q1rEO8dVQp7j74Wzv2QTmztfkTZAJU053tRfJc9PV1sWmi7ubWwDAs+ocmEVjo71prW+FX57mcbIakN/b+V4a1Aodl32DAQB8GNWBEPBxrICn3+LK8eUpm7WsWkBgR+Gh/bJuopG+DXrm0BAL+ZfqHZJIJuRwMfGY0tn3lfFc0yactEkIpU2JiPpYMZnU+6BNjQQBorbUoEbl1ipCbxXqD4/ey6fPbT2AhECpaFsor2zj41Ck7roewnrfp2uZ0mu2UuM9rRVB3jgRo8l25bPS2lq11i6SsZ4qZ26nr0oPY1l/0PmdZefwDaeg5bRlvhtWh5lXAcZN1Z1f25qIZ2uKhqtTbySgXKCI+hieSxJN1LYh5iKjM9FaVWjZkStu25LRpDwdn+2tUrKLBlqdZrqPwaxMv9HNQSWn3ylNjwgjmHrJh1Z3xUeWo6qDuO+JVx1kDA62uRBvIbcsWsR5dn22Qa6E8sb03atnOlDbOCd7r44emEiWBlluuOn551YxJElr5c+paku3th34LxG64Zx7ZUMB5ILIxn7XwiRcN10XpW15f751eFbLr8Ox4wK4cZFkzBQavp0fk/2Q34Xnv1mVqA+JwWoGgA9uIDndfOhMjmHHipt39zjRYzOqH6h5p9e5+Q3ATy0t4QCvc603QOS6aF+ht1cnroToqg0JYf45K7ozLHRZp7jKhe6u6ZUsWPAyY7GKFCmvoVxiX/s/otZ/cnWRbTQwxcXze3aFrup7jo5mcdPg1a9hbbP/eg8qbiS3abL2F4k+QK5ZGKEfvN7SzTJtjkUgFNxIM+ig9G3nOiMYfl3+e1WG0qDfOERxWi5XMtpXk83OzkEs3uq6DKiFsB0IVCpKYdRD0310KVvH8MYMYLPi2k0uBMIG3hi1nLCVgu1QcAKwVcYGwt3tLTYwjmA8M+MZFY+84fPpiPpMuH/8iPfvH/Du3TscbgsONwU3peCWCBWEysANEWo5AAfGsW5gVGzbhsob9Aq9qnTu58iiE4pWZTyaZb2oUD/syNK2LDqQKVEMqNcCmztxm5+S2JfAUXaO7DxuxtKuKHLVL4t0ZRo5jY7qLmN0LHZC99Q9sB3L0BMw5jA9ULmS+yueeB4uv4JnxLnTss9rlO0+wGQh3gzorwDPyF6S1sOZfGaEqJPJwZi+g5dT0i7dmTTPREtk9IXZHqqGvFIO7bsTuh7TRq4iRI17q9GczGDIcrcziMBiOKRSQOUA0EEYb3FKkrpbF+Hv9BKVScxVovl2FAZYGdgqeKugTRerRfn1CoxNhL2czX2r7wXtflFJ7tq/nTJXTuUFpeRni6iTrMn/LjkZYr+5xQuoa0gtG1aeKurDIkV6v2ST38uBws/qc45nevqqzaZ55cSaJfnXWeFQZSaGd+VkXMye5ZHzojgWgL6ZRMPJ5S10fPjhA+qnf2+bUExE+lEXn4x2g0GEQOLKty2skymHXYMeRLuQKXUyDtWk/fYPeFH6Tdjrj0XbE9bnoS9aMPCDw5mAP/7wv4b4P//yb1O0bJ39E14EVKXdNVPm0HfRALHKZVbvpvxGJVr/V/pWXh4zJubmQpajqlKVJ0kWekVAORTQQXKvtfMvhq76wXiSFwzG43J4r0LfIZj4ocmQRXPkuAFqUOfy58jTadruQQqu0JjVCYh4J5bSmZCX7xgXrHVsLfPBzjjBkp7+/Mv/N48/S69lrfDw8S5RgYKxc1HuS9UYSxwpOjyHz2f6zSPj0yVZDwJwc4uHwy2oED7VA6g+AZvI5dJ0mba4UIDa7nukIuMLDEJFwdb0BuP9vmByY7lvLvSL9Y1eWLzrMPrEv4K8EZ0YvBFQanPjThB9TNK1C8v6GDdpKRNyrsDGNjFsY7yA7Diz03MMN0fjUyM3Yb2xLfXFkK/Lb3ots9fLHC7pMefsYcWaWfXbS4AmL1m9sPqk0mii91Cnja5bSB1LAegHoDxCTyQanyNXtps7dBKX/Ljf99s2gHLXZSscikJ3ZrCB4WHVcycRmv6vOEmtM03kMeoWGNrwyNczcKqXS226tg+cQCTfCS5YRMhKA/d2QxsHoWj5xmBzCdvoqM1xon+KIOTQe8kE76R8mqTNbez0WP1JJIncXISoH055pTept7BemzrFNsOCA7fNHgv2kOe+FJttrJvGS/wisHX3XP2cOLULu7CA9Dn51is2KdxHcBrcunslizEv1oSXyL3UTgx0/W5Rp34KO54NVcrOibzxPBjdpxXS8d5OWps79Rzf97GbPzHVdlpbTj0V6CJow6uRPbdNbuSbrfELkk1IJG3kMSyqG5cCHc9ca9uwjK47+zpb7rpgr3zR4rn6AvAst1Wo17HzbNfnrHiTjRfjvCrea+fH+r9uRlD3tICq42JcMLrwC/TaQbHLuDJQhOcpjp4fKjnUpj+EOSravqqBEghgjmWFqS33i6loRAmzkB4ex12WRXmOdM44uPuVpkPIRgnP8l4pH9OSJwyMXZ3mjdOvLs4uaVLdGyl03s7hWXHwHejKozV+hckd+la5Gau2WlQnla/+1Dg7ceXqqN/j/DtlmAsGAl/ww7EFxfXSQnJNdt5k6xKllght19k7oZrhMuVlRCEHI7zHrSzPuJcZIjDA92TZAACe7zCAbaZ0cggyHldCbkdGadnKjX0eXnI4hu6YBlm/smsGL0Xamoh84OZqmoyRupKM/iqwtXbYtufmrv0k+qIYzy1pAbAR+IZAJ2lDRUJ1ibARkCblMubrupMOBC2/TBUX35yh/R0vIEf9U7k0yuyWlNHWuxMdUpel+q43RoUNMTaf9Izb48jhZ6jbEryM8dmkjELbzHWSGLWvl4N1dtplWDgr7rtcMlD7AzHEg03ceEAUEHIViCOVmWXPc2qHabMIvzBhqFFFajMcI0zj1yy3klAOWzEquBRwYVS59otFtzCWLuNg0yK5s5QiGzJqbXebb3XDEQDVCqaCggNOXHHkDc/bCcda8VwrnusGPj7j49NnHG5vcHd/j3I44HC4wc2h4LYUnEhuVwDhphRscpCRmbGh6WK+P9l3l9fNqID0cAXkAJt5KPZE7FtZedDEeN4LDWLJ0mg7Uacn7aVhI5eTG7Y+m0DLMylsw8szg162zQl2eLTHNQaGh3F8fgHjEdv4AXy7XwwyXiL/OZdVi/RmQH+Dl8E5ObVMNibkIVwUmGQUUcZBYeGohajbSfajYFDC3Z+vw0owexn9onHO6ZlHBjLEWxV2dkSfjyLt6Se5LTgrDz3efKPFCzv/nxC6BwYXBu0mgv8xJdpH9Cs13lCueahxhGRp6g+E7fkz6C8AH7zK1Ymc7f++czkbQZD/z3r8QGcamy6h1LNQ88RiLGoAN296HfyKZkSX/H7+9d/wxw/RiP7HH/5XM6IDvpF75+oJlcGQnpEbJyXTxcEZ7Cg0YxlzZcrKXEw8CNTJTpUMRnPTDvRFnFpBqOZyiWppngy8ou9PTkddbYnyPwUw+t3nCllG6S75TONyEnCYx66eZ+Dl4GJcX9wZ50TZil6z8vpN4UIj59AZ7Hi041/GwySsnlD5BsVOF9DYB7aIM/KL5imCenw1KJMuzveTxmGYhUm34KOHom2S5GVSAdBccvMmE8VivnacNwnFtZfpF04h9nbU7ulkTU9h1vYCyPmnd+/y2PPEpZJH08eL0Nj9sKh/HvdXF0CTb++jLpH1YAPd/UVuCDx22gDgx4bdn8uArqq3Xe8M4gOArS+chl2Yru1Np/efkz6y1xaUXy7gUzQ+x/Gxl+W1dNnPgquG1BdPaCxS6pznRCyhql81l9AVRU5CVFmCKnIFB/OGdt+xbjTJ7eI3FVwghHf0g5Zbz8OGUlMQUv7SHjIGx70Q0UVtkXXECj2lF3E2PuhYqYbnrd1j3Xo+AU6vUzyCW8OhmAX9WDPlstPd6YF/AeMJdal3Hm575X5pXcvzsOqDtU0SkwvjsQ9INfy24G54D8Bj0jVC6HzQ8ooNYAvdvgvNCM+hagQCPjSZSU8HEJVgCM710mu2jGeWEnjg3uL/7NqqcSOIa1/baKpx9cRU1wgUDc+bKfQJtVNk1dGUqSrCiQhh7UVP6Nn2CF1v2JFXarwnkSdDM5iO09P4p+md1Dtt6XG8ipt/4XGyX/a5r3nFbJ9P94gLhfzSOYI+62EQH2x9DaFzXxw53u77OMq4oUBfHzUgWL7U01Gs2m51gj5DQ7+y+z+z0hY2y30yF8iZBnWTJjrRPKdzoOiTNoK6RfanGIYTDQlF7ixDN0CaDxvmZjxXUBXw4djSf3anzwc4jcj6B2WUE3oQprKoreA7W7tcwdLVidCR2yg0bXtNUrmdvN0YuL0B6CT8nMS4zv0u9I1kh8SOvj8jg4v5zNUJrgTaPZvwhYv6+tX5nsFUjzYYo9EcJm8Bp7sYm3L8SnTulx6SbMsBfUvANUCaQYUdRNQ1grbHmmVThuPdAHT+qPK8bhtORDiVA8pt8yrEchf6sVZ8+vy54VrbRsQiB8z0jvStnoBCuLu7xd3dHW5vb3E8bTiWDQWMIopp9XyR8mC8pL7qgp72ec9vBHHPMg16o4qILjOugC89T/gHgDcD+hu8Dna0Pc/6+6iOkU3xWyrSGqYxyeXRlTARGVE51q1VpMLHceiMsC5Ypz/PgFrQnIOM4V5xxY4Gskh3CWQuuJfUFOXG7IdJrVOkTXH1E01K/eMWuMkU0J1q/BYK2PcGrs3Ivc8nivJfMJbrewwjiTfcU0MA3v8P4Jf/bEYW3ZFskdzOQgDdKq4asmpwLTwPpT6fmU/87HSJKy/Em650nIG8YBhOFvkJok+DmOaSYvyOaQbwC4Df9e8/f5wY0X8nRnQ/DvMs/gEjXHE6/boWS5QV/ETpuMUQtjdZJPfX8pRWN54q9EUEHGSXOFNzabZRv4Mb6JN4jmUYzc0mti9VSn2ZofyMz1Dl5fslsJtGaXKvTpkPny1Q2jvOta6D16RVuIa/n6vb1Zr9mbxwbX7uzvPlPcNZ8FLXLQiRjyu4zSZP20cQv0NzbSh8vqS4auwcyvYnHAlQDz0AzHec+2s830ZwGszU6qhVNvqThe0TZAyJO3cmkBrCm2uedkyNWzwGprbSGOAm/C/t6KvpdaIkZeNe4jf5VAL59pwg8SX4xwDOoPTyPNKzY+j9vnN0WvP0YXTtKV7MTLKRw+6KM48BQrvc9vt38LKbwrDx0LIg55lq7IuOX14gcFs3vKoT0qQ2COFfivH0glmNCVAdw9GPbw+VjeJzOe5z7fKR3cm/Crbrblo2jObYuMWdG5EHATx8mxk40odev7HKLaegk6mr91Y3qYlLwY5XSA7OycSa/KOweN5OFnuJ1+LdoxITTmgi0ctIZwt0R1Yen/du/1lBZrrkKMzLojDXcC0np4nU7f6XGwMUulZxaz/KScjHdlXI8TA1Gq+KTEHjXEl/XHCfFjWEjf249rTmJOfEkwA6dOP4ctM56WlviM5G4iRPe2LghOMGE4oxjZ1rO0/6OrK8WEYchzEe63UDBW1RnhnEFc3HtuQt8zM9BWSbcbmL09geqXzq24LUeD62X17Md3VbjBcaXMWnVy8c5jmMQfnC9rTxOG9Enq0VDZseFqWH/eMrDAPbT14vVnWzas/qN8ExkZPGC2zF4ew3ccT2cBsrKFOh4pzmZ4ovuzCtm+e7FsfLnDn392ThRQ1ZwNqHJIBksG2FhiKT0SvHtvp5uTabjy76MMqqnk7xt5PodU0CNmccMuw0a9vYLpl/PxyBT96IfkGaQE8z3Q5pXspD9I6j+x50eOkfY/ReL5i0tRklJYbDK4wJxWsDUDZx317FUySLwVzgBuLaHTE8lIuLmuybgCkJnq/Jgw1tssi9KvtyeiR5Cj/T9aB/GIgUqJ5b/NUd5rvCPABQlOVEI88zup3JUF/yjtzJOrnJXQ7DLCsitkzNEHfkFVTFa53el0s6W2n1Cp49VJXiVoGtVtC24ST3qd8eDuBC2NB0/E+fPwEMHA4FzIxDKSBmPD8/4/n5Gcdj27hzd3eHd+/ucffuHZ5PJ5RT23JMm9RKdN9z221nMDVQfwewh5GyOda23ovvh1/Ql76/On8reDOgv8HLQLTPtatIv7ThhC/izlRblEzzxy6EqTNu0dqtCHsoTiITbDFZ72rniEGTRfGkAxh2B6j9qaBjX6NJU6yM598C9nQO456Lb7NnzTO8Xi9s/lnB0/V06kz+3Wkj5H/1WWib4Ny3O9ep/+Mn8PER9Kl9ZxDwg3TnxyWGCJq8m0CFaa7NudY9T+EvuZfZTYXYOIxWr6y8B0U+K3pfmiKpTXichPz5488TI/r/7ifRga6dDOPJ4euN6i909b4P3Q2sQ6CVbRdN+U8S2bva5difYXVmNvkltImkXhvQLhsCjnr5EbqCjaS8ieEt8q5MEBrsZwxI4WPwZXOwFGmgxTkqOB+8Lk4TKS3o5NrbP33G3o4749XXkv818XMb7OU36AMpj0vKzbbrWb4rHFZlnJs5DpBWZmeb7ny+QwGuY8gRvi681AqmzwDJtTSaVhZhqFTg0K7O4KJ5CNzAPD+QP+CRFubC1TnG4uWFAFPeDm1yC5m8mleDyo0Pi/tUdffO2wGoW68uUWcrzGaTj6fZ0E5kMLcJdXApnTos8EtfvzFoDavIKwLV1xl/WQ2ASwl6Dw/HaK9NOoT7jFQ3eOjfgvz08RynD/oGANxLvM+KrWQn9EcHjDNx7vUygiShMR5c509blzt5DjaSUIU1c+4j0o2/a4AA8INLN8mAcvxFNoLHHgqRfakMp/6NNE7f1OrvufOG+SJzIHVLSOp/XK+1WmLCoUMGd5U0xA5lz3U+WnxJszBlTRxj9IuUxzzzY/icPmgb6kt7z+1wwXh+iYH5YlZx7tSP09MJaK6OXIqBvSXFf9F/kY7dy9ULhJmfCitR18C2YSfyof5/X0gmQTAb0wOOJDg6sab3VOragnd57h/0FBen8tjnY0bdxtN08Vfdw5vBvCq/XfWfxC1Sri7ckhjRQVMaJ+puoHVY6lRQdQvPsnPz+Db2b+PiqZtHatnagtQOErT71btbs4DuhEeuVCYPpRTUWqGn950KAz9o2l5v3Xzg67koIIlxba4c5yrxneMnK1A/SCDcfopbz2BFJz7rnl+KVRA3Tknes4PGs/zztYozpObZUKdBRAOCFyveiGNXIGjn8mSMWNrxcEfbqCeRHP8eM7hMxkdJJNJWB0RN2XtX2yGZ0+8D/j10juLAoENM9kH+d1KLERdIE1hrDQeApoOXfQSOnwnAO4qR8zgYTqB72TwRODu8aZRfmo5kTPc73odzrGFh2RFKJdiOgpIb1SmaITxV0vpDvldueVUGbmSNQ/NXz1zNCVBPfwO7Cv7FsKT/rwWqb8jbwNN8O6kcvXJ9mFRWuN5Uub4q6u8Gzp/itu1h7K9nktROzVFdKrDBoT16X4QrXzyZw1N652uqD6uHWtXOuzv3XI5DznSSCtrQ5HmpIKrt+jfIvKPoWLRO75UraHpiZYArTgSU7YRSD+1aSAKADY/HJ/zlV+B42vDDw3vcHg64u7kF84bT6YjPz0+4f/yMUgpu393h4cMDPjx/wPF0wuenz/ONLBjJa6Yb//2RH82IxEYq6xUKIUm/rlO7iYfUf3ct8VXgzYD+Bi+CcKdymnj1U1A+XudScddZ/2OfDSiUEYDEZbUZENMkGIBfhSfl1cXjmpz8qXJZWXZNscgxDofSLfo5o3n+fsFkcs6+95TRxRSHVp9VEE6UWisrhYvwJXc6Lldl9+T5Px1EpSKp6ggtF/pBNBCdZBZKYe2UIYHE9Z/+wozpfHsD+r9/svv0GGjD4Ffs095qtycjLFhwnjQ63P1Izk3R08yQYEQtUYPLGucZjQ1lXQg+Kk1SbmiGH8n/3z79G/74PhrR/6eeRGc4LdX3sy8vVSq7eucJbzmvgbt4TvlOn0f+4sa0Kkn6X2TGQzvF5PKxlL7gUGTiekhav/BioxUW/gqWO3vIlc9duQ6rYZ7BUWrfjCy6Bkjp+yXtmvNekHDM8Bz9Kb1PFiPOlaXJs3hYFRnntvuo6bfHybf7SVjGSfPIeC/YyzR9DjvXlGfE8BeBgbFhbNcwC5UPO5PbAZREWb3eCM2LsTlPYNTbjl3dEWRF1Kv64o6rkBrGSXbNFEI7Eefu5Crtbi+uDK6SBzdLOckd6MyiMx3Y3afeTmPw6vA+oelY/uMszgqWfXxWwboMBgVqwtPPoDBVqVY0fhFO6cG/Z/rMBlK3P6P9Kc+c6Rrcv2c90dWNANM72h1w26i9Jg8ocUxE3pduT7UfE0NZsZh1id/MNVhPYrtxzm/1as+rS88TTIwmfqF3UL/35In1keJOKQq7NvKE1/U0NRYwu41zXLtxxwZ7Jtx2bzPl4IVKMABlcbsSVJzSjL4pyBMKMLbHMNGR+HM2G41TmESjSI/kw2SI5DhWql8EnuR7FibDeVE7h3wyJRC5JvDhmsEVOF6wWSDQhh9rgBnM+6nkbkCnnAwd38FoPvAifY89qIa9ftKVIrtw+ZkHDdep2VV5Idjc1+iQ28b8ZhCXe823AtbT5WGQOIf+oaLNOE56jYO719kl7WPB8zSrgp7c9lmndovYtHeOzVlZbD65zfVeUxY+QopCPxnPVa5WKFIH4oCmoT0bZC0HlKLGc1c+u+oSyVUOPORFZd5ugONdiaHY/IoByokD5gnyCXSrwaxmlwz2GaR06VR7iDkxZl22ad1zYpdH8d+dHjiUK2OBJzgIjYwbOLy8mRnQKdE32a/3PxBsnSEZ2zuQxH+Sm54Xkvtghx2c6OhGKI3GS68HK3lj3zjisdKvuru/Hjbt1YVRv/EEdhtzWvimec8ytDHhPtwJjn7M5Tou3bcrTx2Dl7D6phvspeNsQ0ZIS2Fc+0y7yumYyjAp5ZhG7zSWDYd6UtUKVaZZ0Vy5k/5SZ7C67nAA+MRyEr31x/TazO8RtEk9/WbGoHcqUCcSwoJmEyiv7Afr5NfLu79DCDJgJTOcgds87DKLDqn05+UiuqM5iWK8T1mBxPfXqRgqQZ+IBxMzv7NrXr2H0jhE4JJ3Ds9AqRVk7ttr89KgNhsAXG6aXNMykq7SbkBgABXbTcXGjEptOZHB2I5HHI9HoAIPt+9wf3uHdze3OJ6e8fj8GY9Pj/jl4wEP9+/x8HCP+/cP+PB8xOfHR+CXVpZeOdWv8ekIpP1IY79ZB7j++x5o1Q26a7CxPtR5gdGOZumFqXv4Hur8jeHNgP4GV0JnODwL94tze9qSm6SN+RQxAsLlWcRAo++S3k7sOeEetFbNQ+PZDYROdxJlaKtuEVj+5PQVD3l6uEYZWrFkdn/uG+V4LwE3M7gq2VoBeAOBNNmD+1Hw9umsh8QEFP/UNa+neX0OxvMC/D//Anz80zgx+3VSzAz8yoQor6Yni+JiJ5Qn877V/OplEJycOhyHkJHXEDCcsr4UcpJPaFdQbmiTScn/58d/A+5+inE//AR8/AvMauTHrV+t98cyfHlqSPf9tQe+gUKjs7FMW0AE2onwFA3MzcCtWTqdqNl2h8wtL04LayCAD8U2sbdFBuo8uzB0Qbfd0szG7kgWxqrX5BfLUvNvq8aBa++J9g84Xp3rmeOfe5/lcQZ+fN+Lesx3mQrkxRr9Xnj8fo3YyeEzo7mHRyn4fhH3HlM63MVn1my+ab+22PF6xJ7MNlzn42Ea3yqhTNPfGcnxlxnMFVTbiXPiCq4Eogrm0icwiez0PnEmkhN+/dRTvCddF3T0WTIpJK7V2ncGQIX6QRSGnKxjGb/tFBqB22KRLirVCq6yw7w2d/ePUWAAACAASURBVG0MBpU+xpVJEKqbnPu2SE2z27YzyDI0f8t9d8G4D8JaH7IhNct8Tu87qC7fL9TVQpXdykohgB/Q9RKfbxbeXjdGX0QOejzQTrIrHT2C0U4NNh2l0bidJxZjrbrrhmy2aN3ghEyuu2/SqvQ9aQerd/pOKe8VBPFLQ5M0UpndvXIu36lydxEb81LKN7unWlvYsC9dU5pRfcw90b/qdXY6cESWKRtvOD4pP5l/HcCfN7f/SUJN34h4MDMqgBup92nWvzx5NrSnmuQOOJkQUkp7py7OxvhVlmcjufanmoaeTy7jfOxrjcwhL/CHIWZs6Y8+2I37HVyX0KlQDbtKoXr6dHkeywzrKb8xcFksEYkoU8NyLztmq5vvu4G9bU7uunMwkMs3pdO+aa3lXaigPqCJhqeRdvzUysShxx2EgrZhJaSVyF3X1hxc21JqdXJ/uZ1EXgcjPwHE7Gyn/uT0iqs44zTp3LC1XTOEqF7gqpgZ2yQvAINB1i9OD+7S0fsqhDv823svN7tZn98qtqj3TH46sI2PWacMdaLJ005+KyPrDGW4NlLevtT75fy6dPzoxl/1iVYn5hq+tjHk3p08CTyRx2ZTbwNsimZqH9EVzF5HZTRkh/zaf5e4zDc9xxAcxFgMEKFs5WcjreeV2ga5Tkp/1PlBlOOE0FHpNYIrP8g91fa1zxl2F7e8FiYxTE3yywXeuSpEAdSj7103Qgw76pl5+uQxBPpy5RDT2B7pqp6VTqk6Isuzes4qhx6ZJ30ArHVJja53oRfH+4DuwasAOLGMMZoQ2g5cLYMzb7paeK8hb2zxRXge8GqYGdE7P/uSVfqeoMukzAtDLPnN38c03njeTxNT7LrZxqwkbwJ/Up5sHwnqXl7pntCGQmHIOsAGrgV1Kyh0QHPh3tKZfcXRD0myYroOgZmaaUb1GQaoVtSt4nS3oRwK7u7e4eHdO9AToX4CHp+fG9al4OH9Pe7u7vDw4T1ufrkFQNgY2GQDfymluZpHZ6ks1Qvt5eiPXVd9T8bzYU/OJM4skFZ8Kcf/Bx6DL4U3A/obXA/DRMg0XZ3RrNN5fs/k7tLt6cPpEFuEQ/+1cgh6An1UzJowIO6T36aUkxMU3DyLVKDd08HC+B2D113Pg+slBeWq13KWvfjCxl09om60X9b082AEdxraroH8vAuaVmYW5Jnz/gPDMB4ceN3c6+o5PiXa1om4njb3f6XHZSrAj9SU9A2RVoZxdAamEtjt/l1MePo5jh5p2AsfhHSmZ/Q2Cqj3wN35pNV3RPBcraf5+kC1fz2hTSq1vKc/j0b09z8C2IBf/zSfXPpZ+wqz9/L5WtfuBOhqEIlBzEgpzD/9i85S0NuO+1TM/0X8AdY9nHa6u8XqG5+43YlOEAM6mTGOLC/HZy+4/LNTgzyNlZvPL2bhQFDgY49wDAgTSPduZXKSDyskHNyHDCfIoWvzfmxo2ME9v0Sp1TTnDOcZromvxDPDMfOoaf9ch9pF+IT8F7JP+XAkePcwSbM399UIYaXYd64rQkmN/UY/veJA+Hx1g1TvS1aZIPdQM9jdqe6IPIx9uNPJ1GWUp/NCohPpIn5tOhUdgNruRGU6iNt2cc1ODGy14SCnaXot3ZhdtddXURdSf55VUmfh8iTyOfBUiyKSb5q9Cx++J16wktcrNU5hOG2eIvkwoRm7l5oAuxLGp6OUtjwA+GzvDOHzcvembsYIPNoIaz7LNxGi5GGWjZSmUExMrt2Unif6xMwxTCBMSm2EFG/Vp348zfIPTyvaWuS7JIGeW3JiCqAvjDHMAWNGNmtnqayJnpYN5Qu2KRhYHqHGg7XKd0rX8yxlit9FbBrHL+QXsavcps08ZgIOyY30ZJzaqSDLJtFW7luCb7xY9bSg2bNz/Z5QYJ/O4TpQ3qyKJvskxSXk6spqyTtlTt2vc3o3XGhszmDMnRaesxBEovF8cP/u1xXsVZiHbBxpqmxpBnQSA3qtqOzyJkKRNYsFxwKgZ2j7rzSD9WkhAgUzttKhnFbkiWtr/x/3ailOETJT7BsW4o0arr2170DGuoNRA+0kVyGAS1enDU3TRVqbm9t41zjBmO9xIMA21ky7XuoMt2lwMJ7Hfs/vQLqmLLTBJDyvqvvok5c+hOe0+yK2FYfROo5vi6XYof1vPrFbY4vjyZcxuRO+pFpKv0YpNsHJ1ulUN5A+1uKojyHjmdANfIh1d6XYOCXFcVFzmw+nDfGqBth4ZzP6GT5U+gj3vDrwdGXycUyGiJO+GUQLXH1sk3ybM+T2bRvX89WVmVNhbTz3oIbtO/FJ/uROohMAzsZzpZ+E/ABubuBPvwJtE4dHV3BnV+04Ps4JL01ACImVkc6Io7ro1f0VuLkZgSWiebg4oJ1A1/x3+rjj9j3ARBHNgi708YW5hur5TMR4nunF+FDCYT/jlfD47mBq0Aakvio4u3t1U83C/GrML266XZQZ+nDSucx933MoRg3nwqepc3Uwi+c6Biqj8oYDE5gLdBAx1H04OdanHilbzhVtpXFjFv7VxnWtbYShHHBzuMHtzR2OpyNqrTieTjiennF7d4ffbRUoB9ze3eJwuHF8vdWieb8ZZXZgM7O2C2/izWh61dRvA32OJe9hirQj7HYgysHZNZtv8GZAf4MvAKoQ6nt34T5G9RosIdxfHia1kkee7EpYM7qXmC6UI4xaJ8VQJ8EcmECTT43JN3ekakiX8F1mMZkR7sadKCPhW37+cqAu7WZf3uALwqp7B2UzJ9rpBzVKFmoGdelL1s0j7/878PSnZnTV3a4/ErDRviF2RmY2NniM5+cbGneoHM9rFJSv7JJtNs7ITQJ7zn7yO9ZFB/UXGD+axUf0aya9ER1oRnQgGdIJeP8T8PGvKa+FS/phDi0P710cwrofSw6QBYRCKOKWuU/yuU+yjaWSJSMGSqHYvW6xo/cdj/fibNXolI1vo58+1/IKO1u59KhOtv1iS1LU2jxhdiaR3M8ev3YTsEUcztF79WOk3I/LzVU78IjoFl2z8PfQ+zJzP5tLbe5xMnhcP1+P4ouB4fpfENOFhtfkCbxcXF2Vbi9yls+qgyyi2rfljB/tuO0BtmGvVjnFoO7bdwjWeJ2MTnU9SAxzz95n2+NE2a96p0VRTdLkTDt9DgZww+2esyL3otYK2g7d9VxF82yx6elk9Lu0CP1UuxXgaHigfa+oXQJzebTOIA/uFBbaa0evDTlM4pjf3FfIprQoHHAkAPSgqxij3kwT3DWezzOE+XYonY+DwPQBTE9oskW8HTDJfXdtV3/fiOHK4PSXu0jpUdX2cPCNIo2QpyOMxvPc3JT6Z9aV/uQ5uUTn6C+Pq2W8hlSXqj5NRJi5Nfte8fZNFrl8rppfTO/eXKZ2ws59C9MFmtfMnyr3NQlpXLWiJiF4WxR3CpnEixA1t5bH6WlOyWW80HmK6TT9MJZo0dhuLFlhi14Zgl3/0l48xHbP9aH0uyycYiTHYsdrFfIJdeUTySPOgAulV5LUvWy7HzzHS+NSxcoud13hMaAlp88FR3K45XUGEj7TTpR3+UfQ6wuaIbo4HklEKEzmHMzrz03OUuhmO2TrT1u5csDNjTtI9zOlscmyMAu9g5zDeCP3ENh+kmudEyiJe5ok913oOm12tizT1Vq6D7DKMIzGLB2/kXl4/Mwt+wwcqZhoIP3VMb8YRNDTjGuCmZ7Sd+nn4ZMwk2/zsl5lQN+LtHNClrUPVyzKFsYh06JOd447OzTyBKQkChNh5XAjx0vHizngeIhwfzP4lHaVEPUt+Ua7Ku7Vc1r1deTOSJLc9/xDaamhkO6A9cZNf3JT5aPpcKnt09juYVnekLGJS8SVye8c2fU9OR2ZucabwVw6NZ63GXxdl6913CXQRf3DQO8f8lUJpofRGNr5T+fJbd1ilM3Zw8SAlJ10VfqWNbNwEj31mSktLo88hhVVPYUONCO5fhMa5ALQCV24qSyYoDrtkDPybg0XCsyL8nEDyNSec9xrVaEJBEJV3s1ODDm5/T2c9v1KEDRKin/Kk5vRWXWCxNiAQKeDUX6psupGNXI5qTau+kDnWaFLhG+r7uHFfwVAXFF5A7F6EZH7z7VS6vnHpQHYDuJUZpxqBdUNVAlUDijlgHJDOBwO7focanxtqxXPpxOej08AA/ePj3h6fgIRYauN35Ee6iE9YDTylNAyWRWw+LKpwA2Lbwk6JNlf/zHDSodQr4awq9l4peHtW9fze4M3A/obvAAo8m3lnn7RTr+5JH0BTDiPZ9g+nc/LGFbKf1Ke3j8XF2s8zjXtoHYTy+r+1NBkk4sd5nGpQD+nbyjigyLqSl756LgEBertkSeVqwnebPLZd8NP4g2n0P9JYbkCZhHSbw5HHFOSJw3jgoDfy2SAAfyOgI8yXmrKezhFu0DNr1boTkFVnAh9kcQvArlpbs87unILZWr+y0GlmphpaZ0FpMzY1c1cwiWd0Vd7CYGgE14zI7rGI7TNC3c/Rvw/yPvHv4wTjtnknhT1PmkPhrMPLl02hqbKEbHss5BFwgpZKPCLb3b3RUir+y8ABG+gGVpKd0pWKqZNpxMgm/k7Xh77sMbm9jzcx3WrZ42FJ03QLxaFIy6uKAvjncmEgxxnN81OZrm/FZ4+yVhd8HUPe8bnvYn3b6HxZvftA1sjxFWdSZw9eIlIuTSN31CisGu0vWIa4RcIPWunfudZGIPc5WtYmAH65pLiCJrQr/Tos+z+XU9GKNo66VYdR/UoXajyC5aqq8lQaR4PGGDNUFyeVJVLFTg5DqCuDdGbq6ldki5M9HK79Sq8TJ24hPhp8jhHiFJcW5zWUtLCw3Qs+HbexW3RKIMRyIUToLtx/uXHHwEi/NfxF+Bxgou+F5dWfjnp10GdDuJCacWlV7y1Xw9yJNFbPfJCpFa1M3kA1NVI4+muziH93jjtZai6wr79cruGNk15eNtB7pqchvMHuD5qMjPQgNVvbzDsMNfcPkgXr0RxupOeJ+FJB5HwMbZGdpI86Yfd+cBENq8gn16UvEbFkqL8X8G075NLZzeWs22u91prhLYhaFLoak5od6NiXw7aGENs6MBLdlT4VTuk9LvKndPxV3EiXyRhKWTyI1Ct0oNf4HVPrb2jaXhgD+cgDRWCq0Mun5QnOHfsTve2RVaPv/BIXXgNa6/C34g5tEtoA0einuURmsHedG/qOLHck97aiG39Yrapzm8eoHRVlOcHAxu1UdqrMm90GsJLJWykJ1td5XRjAGd6zPzMl6xDx+lG1M/st2x1M7B9hp3tT/SqRoHdvTereu4OjvweFJxp1Jmpfo+urT6LSMsTiz0CsJfe45vEC1mENbbkxn9zEdyFJHvak8zytmy/gcPWE5hBpRla2lVCyQWxoeWN7Z1aAsuadRPGfrD7zPW76SvaPB1PvRSJQEHcZBbNlp+aJdjaDIx4m5MldNc0KN8JFZNfJ2PtBCfJCKidm5G0sfUE6xSyZ6jzd+Ml7ygipkUNm7fT+zHfg751GeaKJHsJAWkuJHU0PLyOJ+lqbPEsbmcSJkIOzz3omOTADDn2R4V4fmxzHgbED7UwJxQ0r11o/T7M9ZM+9F0biPc5lpdu01qozPRzJ9e+aWQCcCf44893D8O0Bo4PXJBuvvkIonPq+HCyJ9k+5jnDycIo8zOuIOkbUg7m4jseawZmW4dw39C+V7QrG9nzLq5NZrg1W1FtwCBjMcwVdNpAZQNR8wZUiFAOzXC+1Yqn0xEE4PPzE55PRzwfT2CueHx6xKfHz7gpB9RtA4Nxc3ODw80tDscjttoOWQ6bFl1ThOb00VRGWJy9Xv3K4AVRlhc53rlvQNIrHDfNPPkN3gzob/BK8BNUInSX6jvxwyBWZUX/CHZa0xb00j3QROtFAuS8e2G2Yyjqbzb57afP5fSD3+Up/7+cdWR1O78zJiy7vy8ntfPoY+nXM3h/v4c3pg93PP0zg9vAMTZJklQ0i+QUD6J+pzkcvQvtc1E3q26cffgX4POfgF80vuT5C8KcxEAXKFaE7CdqXPsCoR+f1E4FgZ3LRaUT6JCL42faIjS0kMWo3BUbVSaLuim2qvTpH/vJJVG423sFXR/g9Hsm7TOiER0Anv8iRvRU5w8/4Y/lAT//+nOsos7Q/bEbhpws7pqZLfz7IeeN6QRxqy39ApjbvDbhL5MFDacBO/DrLd02EZXihkqfpPemSj1pNOQCpGymCr0n0XO/iMwsMEfw4Hin/zRsHMnvO9nRmfeLcdV4LuJwZ/gELslzuKwJ17tlfw2sjOfGRwS/cwsDM4X+JfDadPOh8bKFDUK/bkODKDeQgronJLQppy4bZ73ApQ+LL8JP8oJMdWmU7xguvmodyelY9Itmqoux8JhSwCdGvTk2IzoTwJtcPwJZ8NKrGxhc1LjqC1yMywG0LaaCbRKevk9lcK7sKt/QkfKZQ6whG5oFZuZxIXgUAjpO9vu/Bwn/zE52O/w1zOdHbqMe4AznnX8rMN0D9GhhjaLJeU8ggKrJsaZSTxipNaUbEyFaHENXgy5Yr/IgAHiY91VOM+RBZ14pLUD7cb8SQrIkQ3nlOqOVCmOMi90DvpOxE8SHjFXq2+OAeO96TuvX88jn43hd0xWi3kmEZpBkLbdD9xvW0hfSdXPuVQjTpTOMg2KLdYNuCe9KjzN2H0etzkFzT6jSxi4w0a8fu7k7NM+pYX7Ew951DM2I3PMElcdTunC40IdYUPkYC/dyjLSH5ZdghvQWdVIfpVPnlZeRHPAkHnqOBZj5mCCnuvtJ9DEmjNex4it9prgXUDeUS7+QyjTipC+LZ6Z33OYpjx3nGbe37reyBB/pKGPL3N2n21hz7R1rJf9be3lqKGKMsBHVU5FybnUROzsVXqwNPDC5k8IENMM5dHAHOT9LX90mwWAcz7Va8m6SIes3FdAYZca6Fu24Lyh6D453swuXnM2dJnWYlmKs4wy1E3DudH3AM5ddpS56B/pghcyUGgvPBnGPF4HAxeU3Fb6ZB3UeMRjP/RpLqxFsg4HSF2Fo4LF/4ORG/NZPcZNsNNc+kLEhPMXLx1Y1x8A9S+TZWiEtdAH51U0EvdGcjPOy0+fM9k3YklOp4raD9ubN6ATcscmyAV8NqLNAqexRTAh2wlxOdufNGRMePPT/zmvLU5mgR2U9BkK5hjbvJHE4+4XivbjqeqNSZA/M/VpFdd/uT6H3gvbxP4Pq+eQXR/xicG592Cjez510PDr6WvHtvx9oNZ35m6JJxSKX22nB3oAh5srLrG5A8sua4d51vyFvlh6IV1/YmjTaHP/Q3PFQ6TVgInDpNzdWAvQanALxYEkVqKV5LdON+QRUUayYWc6GnWwduqB51mQiHLcNv3z6iNPxhNtyg6fjZzwfjzjxBmLg+XjELx8/4rYczMPw/f09trrhdDpi44rnk5MDfl7h6682J6VXx9PojBz+pjAbQCKbLuMHCwp8Bdv6R4M3A/obXAmZSXemSVRg7nt3Bxit87HZKvX7n5PxXCHYDvyvzeb0l3veEIVHeYso4GxGdO7u21PWL4bp7C8pwZcoheeY1pKRv64GXsFpATQKjWFh9NWt9t1AqCvZfwk8vSFsPujfqacnILj19htQIAs7JW0c8eODCPgdgO2UJqiOkPp6ia/Nmcrqr5wMlokgi+LEBDu9RhLfWkPGUKt2HVppdjdsQN2/uN3YTVFpq+Ck97ZCVVPWgdwn06V0hQwUht8g+22BJ/8mRP0pdCCeRFfcn/7SHu7+EJL+vH3CHz/8z2hEVz7kd27qEFLvpawLUyxXsSmNJWX3AcBnR1/C37pNRXfyShwGUGS50bV9nHwrqboJDRCUcFlVSK3aJ/7M6iauf9N/Dce+qSlT5WqEhXg2ATiTUGG6ijY+Dt2fWdvqfcl+fSNPlFor9Ew+OS7QvRGoO/jf0nieIbMgALZYlevEk7j5+7Ui5Jr4Q9yM9AvKt6yybqPBZNnOp8+x+OmhSrcrPKZdDCI37H24d8DpjUHsC895sLjxtrJIeFUFUQWdbmAX/RHA2yZ8mF1laltUMlx50laz8cHrbxeD6oEzXcXre+uO96qlyic7Nefpf5d2JkxnRXMXrbr7z65w6qGxTIpBppNEHabH0z5yCYzkHmBMp3idp4Cogrl0GaL6SHXtH+rjwu1RZNmk4kGfGGjf589jHX3TvAam6WP/TjiBhHk57mmQFglT/8wKF9neX3K0RYUDyq7PQE4ezk++zvNIukIPHeOHYPcyMr/58F/2IY1vZtiNbr5HujijVAwL8xHNSH8Yp8SZ/XQE4Z1n5grIvtUAYWF0hTJhUsezzGQZP58oNzeePDl5nuft7kk3Vfi7i7X5wi/0fQfnYNFG6Ne9dNba1E+ZKl34VEX6h+gAVZh91+k1uMZqALDl2Me6R7OL5356HEjkZ6IveZdIz1ZXVysKkYrI6pGXB7VUXY2lUnzPdjpznkp0Ud6qG2tJk43JpbAY0VdKdB9n5rTQRbW6uFPKLTpdSN6rSLPw2G7r7Oc8crjOYFnsBTqObF4/G9OudBmQgSPSlFeWRZpXzy5mFRm/GWwG+ab5zBTbWFw0nns8kmzQKiSSzbwit7yxZ9PddD2jEVd3fuL0XSmrpry0ikry/Wy3jql5ZTt/6ARNYSAqjo6D2A6aLgv9ZnffWuTwb0mkntw9x7U126aYhVKHsbqitNMkjMKPMZfVkDI/yLPJipP5s/l+potXgStfdd5zxiZGvAcdgO32IzTj4KZGQsSqveNvO1+/CAhjnyRQvR6upZLL/n71gcQz47n0JztqjULN/fZNNVMcvhtgV5Ggvdj3QY7nRUpSeRf5XUznv1EIGu5AX230Vvnv8mRfIHr36hqwrVkeSrtDvJC4Ri+dA4keUPXGBOhldC03YgJxbfWsBdTcZDZjtdxmV5nBXNsvGkkdUHC4BQrd4On5iL/+7Rd8Psgpc5ywqTAj4Pl0xK8ff8Xt4QY3pYBKwYcPH1C54un5GU+no9tk1f5zpDw0UxaLfePwyLO/CXj2OGVbMsYoblTsbHrFoB1Y/UWGfA/1/obwZkB/g+tgqfWfma3s5icM2Z28HdxVqzHdJgQTF8RZ104vy6GuxvNsiDvLG1R734kYmNI4KXXi6RyWc7goehbX6WuYqMRwX0Z8TxOif1RYVo2ypte/+AVoa3pyafQZPQ9nJNe7A+M8QYUf9d1/H/4F2J7baWvN9g8ANu53Zg8bHVyldkmuiNLE+pryQKw/NxdiYRyljLNMn6t0+b21C5et/coky9wgTyaSAPf5GlE/Ee/w0KL6yXWcp+NPiEZ0fxJdUSe00+hAcOv+c/0MvP+xnUb/+DOAD/jDhx/w15O73JwZ4E+trWUjj6neheMeFeo7NsGQqyxbe9AjG2kRAVT7M7P7ENq4qc68NaN3M3t1zZpUYXLxex+r8s6Rphholn/lqxWMOpwy8js6V6ALC8sJ1LdUYmdoz1Dx8skr5H5g6G82jANxsp3L/FYT8T2xPw72dZxVG67moNfAoJ6Qk2GrSQMPj3PQ5bR0F3rKdpSvOaLg4u8HE/5kC89MCC7bAVm/kgF+KB0VjaLxN1cyA8Pyr1bXTyL9IDU9R+5f07FWAHABThV0A+hCJNems/FWG6sSXtZm1J6XaxuebegEe4TzJcHpaV6Oe+llOmwm0Gvq4/VB9+qz8y6t7fG+6wOeNJ4dLt6ys0fyM/5k4eTSeTwIjAe0RePP6ItGAFhPPbawduIAXb6pLAIQNob4ZlO9Y4+frjZXXCBX2u4zjHU7S1a0iEPhiSZfYjLa+dZC9qpxLfXLCJ6kpKEJon42w7DTKkF001D/uChvcbgt3MMW1Lz48+WxLZ5VHWhl0sehOm4cJdTVqNYN1O7d0rsNPwvYNeJO6GK+34HXnU7tDshBMxaldhCrAzo7+C0/zSjVSkBTMAmgj9DTOv6OczPehOHTvw904HBn8DB0pxiG+QbCgCB5nbGolMtOEPe8NEQQ1fvJvd3RZJi0RUvYXIziXmjrMwCnO4dNq71IEJwT7NDBkbdFkqFeLiK5k8/bojD6GovLeyIT+gnajnlEWmcJvhuooyzt1YfmXPAQNyM6c9vky85wZyJB8J0fHlWCS1x1x516y/ucMjmjE0IwLKb572j0vQJCttqOax20icq1HwKDoj0YG48pC9bobnzVNsttA0sBNmOGrkIrAzkA737f50ZwV4KozuCJfsYUuf0XriVjP6YkXQgba6GnIzU/mAzRSBRoIfRd5v/Ds/tVXEx9Up3Kd6J/jriO+DOKeJZgIuAWnX9l2OXFkvMx1cm3eRYE2Th4JutpoD9ta32fpcoFeSvds0yIqhi2S0mRteEngw/usz5zSmJZCb6FgBP3d+Z2CONGws/hfc1U4osBIVaIkA3jMe5LoeuABJEFWWMQfgd070jfpk0ug8Ye3CnvnfYZNwll3TsncL8WpWv2dnPaYESPaKjHl/Ysbet1A1tjFflbqNFxEU88chc5lQOoFNBB9OouuFFJPfgwKrFo17JmwuJCnfQZtr5duaJuDNRqVTwx4YZKc+ZQgMet4omb8fzu5ha37w64u79tJWwnnOqGjx8/4v7dOzy8u8ft7Q3uH+5x2k749eNHlFLQDehJv5kw0a6z9vnDRdeI/QaQJYjBbE4NyFVE1+rdbg36Ox57vyW8GdDf4OXgGKUpTVlBHoAQFCrApYHJSmVSPj6D3CJN0FIm75gwNa+4p3roLkK7+3yO/2xX1+UwEaSvUZCSgXv5HeTcvv3/7L15dyQ5jif4A80lxZVV1V3dM9v7/T/b9u5701OdmXFJciP2D+Imzd0VRx5TwXghdzfjAYIACBIEyPkVYLYnW6yqoLR8PCvw/8wC9MoaMv72EOiBN+IuTHxGzTalqPDE1MC/vAPOTwDeZ37ShUw6FILyPkych+PYxyKbRW/tISybHUMvizn2e26os78PSh6nIpQjRwAAIABJREFUUgsgdGEkuNGNAt61a+zPw+ZRlACsERIiYa/6yZfo+gAxcaEEjEUQYSxIUd/9N3D/L6n4f+6f8B9v/sNEzd+3d/gv7EB/GoXpHQgdaB9H2KHuY6WbvU4HsfNjoIgI9E5Q89lDUK7SIEnfpOAO9H0HIcQPkDwg8lDwuhC3muzGIodJQiaNazF6uHdZqSB0IdkeKVVloIfx1A1cNgDz+4vpwtTEKVN4Eo088XctmIxBF9oHyT49z/AwZmP4H/6Uekl1c+FL85U1zcW0wrfJ10WGpbA+eHBEM2WNP31XUd/I1mRrIMpnEotU6DL6mcTUCoiU/tPd4BMGQGcC7QD2SucBBhWZNPi99tc3MOWu09M2ZD4BW3sD7Azed/S2o+87QJ/tvcoSF8uUK726uX0p1YEqA0MRe6tBC08ODz3od5eH6RnVPKv0EuJOQB1XRy23eK35lR6uhjubYwGoR/Jq3pEvo8yb8cvk5CeEbQfYlSVqRI9zbpyrp7Z4msJ9mi46RFQEYmeP5MMqLcjCdYtLZR3hRMtq8rNDEs+FV/dHp9xHMu7g0XXuihpaHKNaYYETQd+VJ1d81hdiOXoulrpXBV6SyEnNCKrgbpAhAdSw1CVWIjvNA0Kv18rV5+FFPEPlyfG4dIqb5tELcnBaLxzAdiHZOiXgLe47UqQNlbnkRtl4H6aCccyOboifDKULfF7qxiWJngA5AogIW9MMerhDKbNhIzFFkoQ8b0j7BDUctVqFg+8W3DgQfEOjyiz4jEvKEQpeDg4XNZXij4hL6HoiE4GxuR1Wdkylq9z08ICiy0T4IF4td0lkMsidPeNz2dyf1sE6Lh3ukb6oeaL+6UH21i0v19B6gwlOrc8NJl+QajGt66g6o9PruoNJpKkNeUvWJNa6ZahoZew52iuThd1qBjgEu6y15nvtB7GMA91lxUauOl6iiBFprWjLHOgekV58fAfZRe/64OhwYSzMZlteZwmIvKaFGrPYx8kMT6UilQdB/roeovjUvBiH/oN8sdZ4dXXDhZTmoSRskuyfCxWAFuuL8TsKPfljOqLkD0bAY0WD0ocLzqkTGa4G2P0/5giwyDomAYlTLfBtNBxZCAD1caC46qgLOvzjpcrvkbkWsL9An7DokSEE4ZhH1LsV09gWjsc8dl8of79TigeqbrkDfZpf0jtdB+m+KFzmqTQhyAEEHNdTX1D8qUbSwGuA7QGCCBBvbhLjeTs1EG3jXnIMr/HYnR5Cufs1MuwyHnIlB2T9QHquxZ+jjwPY/byjo2G/I/S+Yz8/Y2sb+ivG6dVrPLx+Bd53PD4xzk/PeHp6xmk7Aa8b7h8e8Or1K3x+fBzwhyuy4qG1yxxJhueVKPsjpCqSDzsU5dBRKjJ+kMUfXWb9dumHAf1H+rp0uNBEmUwJ2Y01SKBYhz0OAtsUoPI5NVgBOwJmlbh8zrX6nsuXGM+/U3ohGMO4CFfcdMKNi2rZobE7Kaui9wfp+h8p2abc0cv0H4WWCbr5bRtTrWUDg/GBfH/1Cvj8X8B/S33vpK1frdGh9PdLSm7VSsPmCJotE/11UJ595SVrsaEQuVLMI0QPQh5UGlrzHADQFisvocAJFnJ4XAVPI5QQAFCzW77cpho3NmpbgiftQ3y+SuqFHmPGMfxE9l3J//SPUdWdG9L/kz/jf9IrcQok/DtOOLeGf2AH8Vm0zrcAvR+r777bIiNtNEUlTu8SdHICvSXQJxentvhhpI0Skq5z7+BdsEewjTowmWILonFNO4UhDKgi4mFAEeO5h+jSz9EiEw8gJYwT2aDeqoUeCKFbRP0teS6V/ZI0bQ6EZ/p9ZSi/2Xh+85Lp26Y4/vV7SgfwLdixZknPb1mgRx1ieoZx6l/o8LT9ZO/P/VfYPtXkFbC4j9jkcqj7axZRuvuddKGwWEvdycZSZrLojuMBjN11uvH7VqsRfm3mIgr12QMxGpBsfOsitxE2vMUGcZSmDqYN/bzjjCd0fg3QR4yQlZIaRgNdACau8TEjiAckfY0gLq1uV8orle+x/FHeSwLlhcLmqtFefz/Y0//4y99HuUb4z19/GQ+3a80H/YPg3u1U/q/6QfHZUT8A8+4WnWB4GH7wustVSalwi/NFThejalZ6PXz/ujwrfHwpXclTUXetytX7WZxQ3M/6QthoHtL6NWW4ZUNS9CC+jcqPhq6JR3qXTXy/T7Gsx0jWJ0trxIEsiKRLwWtaP6G/D4AsKJjCGN8o87ORUPAW4Z+/pmdcl89LWXnLmIWkl80fpjzxEr3LxnP+kJYyTXRLDmXr1L1ShWIE3MMDIxTGqVR6qcc3GzWXqBPalkHXtYYKp96HYaWJwby1hiZe6EQEfi11mB6XD7RyFGZhHcb619ZUpS+yliSR3X4QdqFXkbebcTGMZr0qbgJSHgd3HFAe9T0Q3VhF+tT1yhLPWlKUEzP8U16vHR5i06g2k4E14ykZuEOGWb7ekK5N5dr5l9Z5KR1VpyRo1tkL9fHiQM+FqtfpAGOHE93ixbX3t0DR1HgO34cjck/i5UIhlGd2Y3ngt4nKenimPAbADqlo6PNoyQoprdFvScq7RQa4k6Bo6PHQ4U0DGPtGQ22cjEQa1r2k2LWkdMW5q86zOjkGObVMdG2oDopRwtFU/2o9SQRwmSxpkzm0h4yLCnSyMdo6WLDq1Z9yWDotFxuNdxuJF3rox87ATw345Wjhc2P6ElzeXPcNRFzFw4vUkEhLKw/0S21+gcz9DVL1bB6G4MsIOZAgcz5zZKnZwlz3tShJi405IjA1MZ5vDa1tI4R7G5Oy2hhYYFHjubKBHquC4IRlbQhQus5R9x50t6IxxDFn7Gv33vH8fAbuxn753cMD3rx7i/PTI56en9D3Hc/Pz+jMuL+7w/2rV3jz5i1+/fX92C++QtdLlr+mA/xI/1Tpn9eAzhy8cqeX6SNr/NOXL0hRM/nSetj+3lYD5W+rvh0+KfVEHETDnom6eG+efJkuLA+KFtFYCLTxyTSEMdMmodvlnYZxr5vWCnXY2aCQx7sqcOiKXZRQjs9tLo+SXJezZAs8bT4dpE+CNiqSVJ4VsMP3SSG4KLAPtKZFfgeR54VM1BEP0zeYlK9Uf3P99ILMFxlkWjZJmUscFWjYaKyFoiQgkq2JIl84/JqXnC4o0DoR0JT+4TxCDfj7T8D+rEf6cl/jAmtxaDYRa6LbQogEMHYfF+NfWbkTge0mXT1QEhdhbIuWpN+u2kqMN+qm7qe7ub6HgtLALJ4eIAstRHa9A2z8fVOGApzKj2LIvVUWfwTwhjNt6fdnHrNqFHUM4Pnn8fvur/g7PZjzsWY7oeFfQehE+LXtAHaA34HwK4z32M69e0mtoKn8IzATem/gBtAD0N/z2Mj71RVvk9gq/4Dh1SGe4qMquQuOJBSv0GlrTuc9jOVQcsUjlTsIvAi7OM+lOh/5ffb63L3jIzqdpxS/LKH1woAY83Hgi7AoMLILiw4drGui5dr7A7Gcnn0K35d8+idIGl6+8kFML1VvbP69ob4q21WORg9mWpQ78zCig5HctYwpANyLbD33ubxFv6QcfEELN58DAJE9ONgSIKHzOAmzvxz3EQ9Zm3Wt0OeID4YdpiEV1wTwGdZX9TZR7Z+Bwfvyaxhq5F70aOQRWdDwgDtouLYO5g7q0hSRGA8YTDsIZzA3dHoCn7ex+OUGbuJCBnavZIVXvTVszgkwXOSTI2K5gWHJ5WrSleD04Zjmot+G9k1AVR0lvHPBVd5foFkK+QrolSTGhrKG6q35g76hE4HoG2NTGEZnaVuZWOj6SKEi/1t5NL7gt2Ou6h9yn1jaZQ6eP2wHAB3fcd6VvqQ2Iu+rrK/j/7r8LniPidOH2CtqaFlvM/c/b5rZsAY4Kcx5WkNwjAAFWloue+gCdSe6mI7MhcrCuxhy3yooQjnKHBsHtlIz4ea2cn1RvhTC0XVZaW5tDsogpiS0NeEt6aAlsD0FeIoRbqLx0lh8P5FeBeKAn6d7zlc0qodM0vNCEMngWirQr7rpX3XsMs/E6FiziMoAe0hz8t9TImteb35vIntUp1dP9hhJyd9FWIMBXspnKsz4qyIQ4ft4F41sgxbtK2t/RjubGPWsXMLVQh2JeBEPvNkGwMYCxBKxRevWf4m/kcalepW3Og66AIFJoUTysWxsiNluTzbcx/EwTlrRYKrVR88M/0QS0r3q/UUuGFzetlcc1wA0FWUbkCgeJ2bzNmbAlz+5POHydFVXBt3zmgfgGigvX8XsIkXai5kpjOeyvlU9BykdViBAPfvsujWBbzLRXhKkwXizgr6x69U+Vx1XF2X4cIIM9BsL6Z7FhFvjENihVpbIPOy8ZR7yYDmwSuaROUjPKYag4ZZHyGLnRFc6IjUtjdzSe0aw2VIsK5C/yhOSwqLYs6JEk61cGncnAa2cyS0IZ3I8KY4TQbU8/nTF03P5cjWZlnoIhViDwLfpTTqoqF7wCFEb42byRBcpC5BIXu2iI+umR6PxDGHs4yFhhefXcFff1E3O360fa0rwv3H0S96XGJwnMVTLFv3N1UcDdzB/uByC9RkCo0V4/UjX2lFt8czwV8Y+TSQ+7lH1uyD2vk1aqFO5UR+3pB+EaUyfEYVpLZ6WD91cX9FUkx0bxYhcGerLoSzGeqRhGM1PbWwAnhraaexVc4OcnOzDcC7rSAbLVgTb/efDw12lNfu+LIsck0gPXfYVHEUqGcf+5s6MzsAZDELHE3Y89TPOex//+45daO50d8L9q1e4v7/H6XQy4/lAaXBYW+DsFk4Z+9QDYYPPF6WizejgM8nr1LbSh+9IMLpdr1oPVk8isNS2br2KHZm7g5iM5QvF/o7p923/n9eAXlIlseu5f8OBq02ZfUjFVM1QJbXDq15Dtb8Tv10FiNLGG5k/5ZC2JuwcTC9r4JBL59aATQyG2wncNuC0Ae00nplRsQX4dMKO8bwo6d4WiliVoL7JHM0SVljKJgM6AbSNpjqDeQczmwAbeBSRKUqAenWbmKSmO8rWZ7Pr2XwXlbgDCox4i8qgvazKUShUNqT8xGx9NzVWvhOGS9M1DqH08eJ0S7m0sOJZht8s04OR1eq7VFDpVmheB5QGnUMXHovJSKgSgF5BMFcNABwPiWwNvJ2ArYjonwg4nYDzz8DmG0z4wE5/3J0EoAorwwwoOpmz/3as+jN2qwqM1/omStM2vBfeAPikMbjJ8M/UR8j3uOYQQyEJ39likRQ2+WSAuEE37RT3ypouO8bzLrKiiexwlBLMMkRD6SByHjWWY6Fvk6mGNBmYecjUEz1de6v5nmXBHO5HZx4Lajz/A//18G/4Gzac0FLoxo0bCDv+2gk/q7yit6D2HiSHJfRkJ7XSqCzeme9xViP2zsN7/b4PQyCbmjfmAFlA65XGzMGWy8C4sxxiPG9oG8IhBEJPCh2jifGdGHYlhrGEHj8NuNQNx6Ec96L1hTB5GDymY9p07GOiHd2M/AQDggH08+CJ3oVnZQOSgS54AZ3yPWhRtJrQx5oWQPNdvVULJsgcw8ML4LuHZa9E+Y1TvJv9ktiszVP98pXwRf4TlgEI96/+CgA4NQkJQYRzf7JiT+dfJL9Ybk3+kI8bAfPA6s9Kf/LbRCGlIvPBNQAboW2EtjXo9TS9yXMeYdGINnDb0MmjQNj+T5JX+s2BV68u5U8MNh6aQOupvBrNE70aXsc819prnGjDiU7YaENjQucd+76j044ucVVbIxATGt+B7jr6+RncGjoeB58Tj/DxqoeNScGFkBpPRRDphgux2NZv0hPimMUBjc/gArzUyUoPNoYsEchjuZrCpBs/EwyagnC0z6CfJT251KefLXyqIE9tCj7jOyI7qIpN5lc9pKobNMZI5O2RTt4ZBt+Kn9EQjTSdQ10r+Z101iAbWpicSFvU1x3MG0gMiVw2OF3UaFjCA8N5hLmmCf+V7/OrFuhuOSRGBpR/WpmKTwawLw1b07pP5ENp4gX84t9Zd+1svbBA0KJeknVSvoZI4lQwm+6pWph6no88EEOfe8WeaAMTsIMRbwWi8Nc8s4thbIEyj6TjVQnVqGLl08iSQqucWOFCG+f8fK06BP4XeXfx/G5si0pH9JnxmmKJUnY/3BuVsVHPZCIIhtfoeW7HjOjtkBv8wY3mUo5ioxFs/Rv5SefNzvD1Fbm4IrjxN5Ck0bpN3QFGInum+Q2k2h8i16mLSAYD3CXyitJtI1mqndA2nd/7uLu+6VwtY0oEfiO66GetX3RbmXd1+oP1KdzzSqN+O0yAsMeBMdeaoYLC94B5l6jKaz4Pmspjf0pxBJoKsm1EpgJG9DSFOgyyLQ6EpgUfseqdg6wRhE+8q4zHIl9kPlD64kRjmXlIyiV6D9P6Uk4sGDUftvGvk1ymmCNQfMjoG+xzQ3UzPFaT2ZWWcN42kYWni/0ILuswAOFQl8pvKllIDMi+yKv37uoeiK9dpbD1r8LOk+MwCGgWDtvx67tz5dC9DXkkSCFniXyk8qP2sIACJ16lVahgEj17RGJiORTjAxbg1cO1ei6Xhn67qUTl2r7Su9TAoReBBLRJba2J3twe5vElItv7iVe1SQBmV70jFs4+TvbwjhyYIFNtpIMu2218bkhV9sRGuTwq66xJwDhwcztBn8gSQZOFucAc3muR9BpQzS8GdF9iNKkiHMpW5eUdhhf6EU9bpJiAAP1a9IwMIvvEclOig+8TgyzqlEOeOs9K+cRfXGRHvr9PxmTIEGaJssa17UigOmFyIRXyuvVZnN+mFBF5lOf25Hp/VDqSADfAKq8RGprovbHrjQCmFva/fM3sdh1ZFxS5nmdImp4k2m5KlkJ3ujw8NdBdQzttwNaAE6ETo2MHY0SP2nAHwinxuoym7ykTwDycluxKXB66U2fdR1CoCbtG/8GGjTacqQ3TDTH6XcMjdZwfP2B/34Gtg3vH0+dHEIDt1T0e3r7B27/8hLttw7nv48qd5vKsEQ0dJsxLnIg2pPJIjkoNdIvsNx2E89xiUXVY5yn/HJaz8S0cH/EmaeCvQ9dG43OYrhgntLHn62pUYhNBuss8jWiKQCpBxNoVCg6Az6lKXyZXbpUtl1KVrbT4fiCPfsf0w4AOUfSCzMki7dJAfaGgrZsR36KJKV+eCIO8jmr9RKJ1jj5uT4UwuRIZNbq4ERb7t9DDzOgBgm7k+bEn/a7tAGlymJSl+JDyT1YxJZvmceG2xIr3YxjACmIY3ud0OjTUxQHm1ERBylWkO4x+erj0+5COiuChjJ9IG4cVccq5yHcA+9frIuuKLulBF6uZaTJu9MXEvKAno1OS4RX6SHTpE2gFaox0DnHoTCHPJSSf8UJMb/8GfPoAnHyDyODVNqfh09lU6WT9SSl/lIPyliGGUAnV8wawO6ISmEGYVmYXUBzbuqnKcMur6NDULEQ7ycYUWoP5OumBg9aG8kVtKJnK5+pV7lrApKzae46/A48czNtEGF7Eb8JvxaUq809CW2rDg4ic82f83O7xE53EiA7x2vZzzm7q3kB4B7QPIr8i2A5j7ZeFOY24fQvQhzggNHvQmnUubHgToVFH7w20yYKyyaZF0wU3h7mFRz2dfZMzAl6o34eiyEH5ymycAcA3/6z/ynvblsV5axLaT70Zx0nTNtTNUbTt6HsH6xxTN3HSzwJxdpPJ3bNPynL1VWxjmgn/fOml8n0WibeXK1PzxJerKOtHiUb+8y53XhC5F3RkpijTv2SYFhuUMyChPdElcAJogx+SSrqVfO2R/kI9ZT7LU/f40rMQ9nY1dHJ8J33YSMK1YRPjvuCsdfR9LPwad4A2NAK21sC9gbc2DObbJocWZTeoswOnh6hWRiFUckkD5N+pEEBSbGjOb/KDvc8XG1bjlsudSpIHABe4w/sUltn1AMtT6ceGloGHoSP85+d/4P9+86/+fNok4vKdZIomCU2qY67rIG2fTJQ7zBTAqxulgFoA1PvMdnwNUfKF3gL4MMOZUBToMHXBJ2ELZwgGxXjUSZclUIsnfqwzXuURm2r1dRgWv0MgovTp+robfaI+1kLlyeAnAMwiTyN8RbqlJVxZvKzmG6WF3LE8Z68qlhrnSRxrjsh04/2iUrcLuYl0apeCcbeWl5gdqcZIKVrR0lkEY1PNSXZknNT7AEuCL+ar5BhTkrFIY3U4P1ZZDyCSfTxIHmFRo6p9LtabbLpKkBEAiFo2RgcaNWha9jpc3lluB3Up9FufCE1I3dYekU9JlpetqG/SsxnDs3Hc2c2bDHngR/9XfJ7wA1WpWfRryU8N44jHqFuncccVmxxNTtHp8m89cBD13cozmU89zHmUGfpsVoaG/AmHnW0ovNNLOcjxsE4z/HOLh/JDHQVnBpeRnOegEJkw3nc+yNDHeTIeh18XB836KB7B7J+ELHuP6lwatUPOmNyOs4ZR6XSWCBrKdl3xBMMBTFWerQ3kl97Ve9wpfUxpKf9X5cLviKMLMu8Y7y674qrQjEeLg9jm9aqN91ja217NBzEPg1xHjslksM8IZhwihzWtWdXLj4QuEHQEwQ13v3M9HFuS+thxQI4vO2T/MEt5IhpR5hRbAjcD4xBPgH/qfHx2KgOnKDG5WPBzVG3KUweh4plzPSs2Wja66IMK89ROntH96gqBLSnCQauICsZZBkFpZGviuT8ODlsobGnKDkn9ehQBUZkVTrcRVIPtGDeTjEoouSQ7pdEr4tVyu1qeAQkHJzNQpe7JCH6FH1HqXD6n6XF+WpEWaeEbpFnNmkSkZQ2dZYTlsT0Z18N0SEQZOSGfhz/DHeXGSqzPyQWIHbC3dYs0Eu4xH3+7GXaj3h27P/SEYUBn471hCB8BkCSkupKE8F6Xa746GPvecW4dvEsEEhIjMjPO5x34xGjUx5zeO+7v7vFw/4B22rDzjv68Yz+f8byfcbq7k/8nPO87+nn3w14mRw3yKc3PXPc8ut430pyPi0dRiTVZJK/gZc4mL4I3/6oB1m5UoUv5ZxYihew55ag9qO19Mb+EqSNWGqM8r5q+WSh95/TDgP5nTF9JOyuZrs+/CJajyi7OQ3GyulCh/Vw0Mq02LiNmflthiEpSXYlcr//l6Rat8g+QXgreEYF9j/Rd2zmufLqRYFk80FfIz8tCelgEx6zxDsPDup2Bf8Q8vJi0RQlKmmjIE72BbALU36JB0FoVst8E4IPr7wleCv2GLxg01CFeN+CjG7gdny3gaFTTGoHuT2iNMDzFh0I47uIeIYRU2du7hEJbbCBJjeX7V/Kg3Ykeqw4aLQN4FuXqTrLs74FOeL/9FdxO+As3bCyKE3cw7xKyUSvdAHoLoo9BOfIT9yCAzzLSm2rdchw67iIzhsMQA/jEtjrRBSInlx550UU5VpI4R09YNgUPjGGcFi9uAkKUD4wBIg15F90K2ImHBhzT9WqBhOPhtjiSvBHQ2vBGbLKZ2giM01Dr+wZCx6mdsLWTHFoAzueOft6xn4GunTQFPzQehnZKyXO0pEpWj4tn3zV94zmm2qG+Or0Avipj4m+CeZ/Hmvf+jE290F8C0iU3wBhJwePG+m8VK5NMDOV0LpDFYep9ioYTt8nCBLI6lV9okJSfVPyagRalLMLcQ4AYLTZ6I8tCleUkodXO2GWh2vuO534ed8H2jh0A44wTjUu4O3U8g/3ah0bg3gDqPmYmXCiHcw8HVOLeyjpdUwTKYvFLq4kyfvLKrYBWYo1ZaX6Wyui7h/z4pex82B+SvwcZknFGPZVyo4NcqMA18kVPLJ7v8bg9LdDE0zdHytQbeo2o20wIuQWfFDPOL/X1cmrQz0QTvKDE3FHbVKG6bU6hrcCzKxCXdDhnWIq7i32+kAgj5HR57GJGtBfp/JAn3nuVdZXf76iJR86Qh/vq8NpowIxjE2g0D/Oq7xYK+9buvxRNlZdz4/mFEc4VPSQR1EwPrAcCtG8HBGue0MEQPodtjz5MSqNvzYg+xvjDrBNNllCXQW7gD+0sdCqHnkO58C7Ca+xBLq6lb+5Jr+UWOFUcUuRVo1B0CG+y+lfy8C4K6zg33Ck/w2qxITtqu4IShIlHeIjsT4bDdflAeIHoW4zqF5eLllfWG0xgbmBmtC7hWq1vlLdOVKVX9d7CRee+Xuy64U9TkI8kEXZsFC8nw7fCZEMko5ot9CkUQyXb+Hw9bxxMBjUPgLR+0s33FV/axnwY869R6SnTgAJh6+bF3BFhm0tqtRq+PedLMxg184BW4k2eexj0Ful4cmZY7XcAIcy56hxx7pev2TJ1kDK/5kmeZqKIB2q0X6zGLfbx1SqM8X381diuERZGSxEnQIypmdcGIT2MsV2SkrYrh2XtQIkG8eS4FgmTSmTEbcG1FHATIPJcdV5bwBW/TJN1bQ/rRcGt4VsU97yP310mvrZa0Ok+1YEgqP3oXmSEKdkFjQyLtqqnHGIn/wrg51DPLWnFYH+klOC7AuR6I3FRrowxr77fMKF+x3TpyhqXE7GvcVXDso4WDlcWDDk7wjOK7EK1OjtTGXUOh1Of+187JAjINaEdnRta78BOHgVuB2wjTVtWJyjhTxJckOWj4WGOMdabitk2PMDbJvyxazAH0fd7lwYB7h20iUwiBlMHqOPx6Yx+fsTddsLddsL93R1O93fo3PHx0yfszzvOz894Oj/j4eEB968ecP/0CvvHTzjvn2Eh4xckZw5yGs3shvRSliwzVarjKEDx70vlP9IPA/qfLX2t5jzpIarwfEGdUXoTlSmgLMJCWre0UMheBAvZhrFWVxdrCufY4JlVvGMUHCzzbtCnUtLV2582XYJ9gc8Lj1+cLugjX1v5TSMy0eOiTetr7DQJLZL/BsHclQoPueF6bAwk2N7+HXh+fAH7j4VYPN3szxVezWNc632ZlFlZ2BGL57UaebVMzFsX4qEOYqB18Ns2DNBlt8J4U0LN8tZAEp6dQBZ+Z8PQ73qEIp2gf4Gs/BqxGo3okA2U2K5sAAAgAElEQVQsBShqrjtGmCAb91+A/ga/0AbGhr/yWKz9jLMrxKQin8D0GoRPWRyxeoprfsIciHMUSIvZNyMbfwQA3bAmizDg4XAZ2DsgISzNA5OAeBIVAPq2ZY9ZC+muFKjNk22gRC8z9QWKMjJSpnUlbBtYrY1AJ3JW2gKuAWlvA20btiaX1DPQth3c2vCcBQ9DoHkGVfr3tqdHPzTZ759egOOnzz/7D7tKJSbOQ/mdxs8OI63a2WGnsZ2+RbCZRzaAk0TbiIQWNySOdKXEcsober8oI+wiy/8hb+/aazTaxgUT5BtKjI7nvuPMZ13LDgHSWWOxgsDY8QpMu9xPBowF9SMsqkrr43Q3wQ8gdJU9AV+hq1FjKxhGtkDwMT7SFkIU+Cvhv6qDTaQfJrI/CaR11S8hOk4fIODNvYRPRsP/8/PPMobBHfWSYZVCSGBS40cWZEnUmw4DQbETTu5mqGPq/8EEe4AnDvNL1l9WhVd99Dp9nbMuqqiamohXMiyANJSXKi13nM5CFXltMgA1GMJWGAEe9jX2IZWlg+gbPg5HlGbkSuVpnHAvhG/3riVkAwhyxp4F/TNE84o44zgQQcdJ8Fl8zMrHCq+GUlz0qyBiiq5Q+rdEXCDvaY0Z8yxYQX8MOVJoUjPZneT6mNbtrH5Lh/KBjfL1QP44LXgdDZTEiHuBIxm7U/nwmUeYS7ht6R1lmar6sxrVZUiRDO3IpqVoPI7e6xHmWL97aqvnUJRfAULjDfJzbaJsd1aYVEeV9RETipjI/BEwktye6ngs6Sr2sfBPmAePjOgGTRBa1AhN7y1VAWhGPJXxo39dWxQj0NDfNY973MZDU3E9pAcKzMPIxt4FtqlMwSI/2dOgOJ2E17rH07AuaD9luKFOgW2pigVm4MLLnrKAqEbjS63OMMNwv6Kn6a5znvvIF4WMes9eAU95ps+jpY2nESMKcEdgjsAQLvXJ0uoJr0UUFv1OeTPINGvO6JHCb4fZYcj4j/6DFllA1o5MNKKw2bxDFqUjXV9shhtaKCBe97jCKMxt8FFmYBjOV7hDnEIJeX0LD1okV0HY1X6xrk3LOi8HpNjHJY065ps6uOx0eTcpaRELV9IhQDemJl4aO3DxLnTGWAttil8aoe4fAVvTHe0Df/waAI/TVGvUZb9Pk6P2MaGkAyGjfaymuwCbvMzKmdYaMy8qOqr4t0w6B19DbqbfqA9266fXYYf07CAOhXU0W/Y61/mcarFjZr0sMEgaLsKIWNE7eifQ3sfW9RljX2Lcaxb0EXXsYVh0MNJQ46NyX0cOPWHDCUR9XOfU2hAxpH0XmHqXGD9DC9low7aRRGsdukzvOz49P+O8nbHf3eHh/IC9d3x6fMR+3tH78DRv1PD67Rt8fn7Cq+cnPD0/o3+SedwUjQtjZ+AfeJtfkDWXKCKOOK/y+kQzfrJpHz/S75R+GNB/JEs36RhH+rUkY/wogVfz4LKOkiFtjN4A1yXj+cVURZYrkEegTe/hi6MlDk3BmrTCkkmf/RCMt6WswL+oDHCZxuggb1zNHy0IIs3btQTj/1CAyGmWyO9kaRIuUe9C1/QOwPP/Hrr7zzf2l/1e6cSTqiCYoiD/JyU3XHVg/DXUO2CT+uNioPJv3lkeVUhbGw3DLBQXfZwk1Grk4kPexIgzLKJiFCVQ2+SEovjGsf4ZXhKUBuCaMhTev4TtJHw7PqJ4oitNcV5YhXXyaIvB0BDS7/AzNoyj4N2rsXt5dgCf7RoJpjcC7gcP7WN9IpiXt10xSg6DyiEFkV2FbtsGxo6+h3B4okDnnSL9HhT83rHvm29gMqSs3O/DHrJoDDl7VWIIAvzQyMirV2dwaJOsbev3RnbrBwgjxNxJK2+2aUPbJqfMx9UDvAkq+rg3DoRhRNcFyXwpqAKHlxHLuprvXv5LQTzyNP8Wa9NrdSwX1t8BjlvStXZWezmEyaPmuG4rMP6f9CqB0IDJ6yjLysAqW9TpjBDuMZOF16kJOxH6WbbENz+wNbw7u8gphgqRc+/jJPj+KUSW4PBfxconuazcLraVOa4BjdE6gdULAzzuY28kp92BdHH0kao0pUsT8rX8q7LLJextdV6j1VtAJPU8f5QH93NTOt9RpAnftHCZCaMByN12lPLDypmKal4Fqr/PnSClU4pVUcgadINpo+HjeoxD0Yvpmops950vGPRWEln2O71EdNij9Ea+U1TjshnNN7oiTLrhruOY2wPcvsrlVYb0BUJWgYr9vYqjUCjlFbrhDOO413AYGz1s4cjPoHGLooo9OYijm/4qk8bZGhY5IW+iO6nVh9kgQ3mrydvCJDMZpcpKB4v+XkSR/rx0oMUzmT4Uqydqvp+sL6Z6inFqAZpuak7o0SJbaRckd24axxc6L4hT/YvfIuvgHxZdJQW7/A7PY7sE0y0TCkz+FOO5GfhLO/B2Dg2WdaxCx5VGdTNYuVpV7FSjwSr67YMolI8xk87tpf3ipRthzocApFcHgzr3cXRGN38bbWgSMcTuXtd+ho4T3B9TezqWfxm+ccaarKiH4yT7beGtQeb0GQ24JMyZp3/KaLKd9pmeNaUlr9WbcnhdET8tVziVC8Jj1XSCe5VBxiwZtg+ErkYay1el1FYA9/6eqDCV9TOdpc9JWOX3yRlmJe/rvGFkIw+6H8imAM8IUV7AmGQth3UYhasmAgzckBwAjFmVAEyYSP6KOyB6uQ9jU8BjOKyi1/bZb38NIXDoFO4HhjhkFMFl2x1Dh9Pr4+16CC8JoI9pL9GzHGx5CHHYa9JmBe4CteGDZB+HIV7p9UQeS3Q3rSeghg2BGWanqMXxVy6fEX8xHfD1nKno3kt+fUmKPBTxpTLnQqUM32ehDrQNoGepgjH2A8dB4hFGUeo+A/jba+C/P74U2C9Phe2nd1+VOOzLhUrTgcgFLiOPvHjc/kipyMRb8qoUY07nB4h8eSx+RUNeNPgLUSPavmqSi9yvc0Tk2CAfOyRqHIP3XcBh4DSug6ETDdngb8C0Wz+ataee56F6BhqfACI0NOxo2LCZDqJOQcwdXQ8NdYw9BCagncyIDjSczx3n5zM6EzqzGMefsO9n8FlhB/7y7if89d1bPJ2HN/rHz5/H/oPojnb3/MG4mR5S9stH3wl1brE57Zq3pYpQtlG4lPWC9vEj/VbphwH9z5Kunkx9WZr1i5cIe7hQiIq9zQEL6UPzo/QiGBhdsYsKDMr3MrsURXdZxMAayiKZsKOSqXyQeq17ilVFXd3WgNYfB+BYKE8A5rc3yN7vm17SuPRhUoy/YarKl42ptE+XII70FX5famg6gRxp8KCsLpZIDJG6WWPG8/C/6efwtCZVsJWOAODdvwEf/3uEb4/NxEVL/PEGwPtFRpuh4wqmlxl7QemqzTGANzyUf71n3E6z26oBNbbxMKjyWEC8YQ8XTnG8CGZskZDcoAaWO85NiYy8VQ8zWCx4CszIIR+H4V+EQCti4GL6qPiQ3x8AvKGki1qTCkZAEe3inc0M0M8AvQmkpUqaYvUjQKKoKs5YG//oMK9EiPTdxJEOaR/FeQdYHduFHqlTJge5iyiMVEESj5OqrY+TmfDFOkl4Z3COwxBl49gO9HjzvvBGoJXyP6YNoC0osScMGzl5aHoGgRph10jyDOwNYPFWHyw4DHs9CeuyAIwEVz2M/8wpGs1rly4sKG5O18pfEcPLPHGIntg12jgmFk7vJiivr16OymjaWeQ++0bsqj7TG8KKqZ7W16wd4BZ1FclzZJQ5eiZyUTeoH+5+Mv2t8/Aw2/kTzgyc+RU2auh2kOqj3JOYlCO4QJEVfJqPAbu+oTFo66C+gSwcG8l5LDnCE6cQTYnHLq5svyClhvJvM2Ll8ViTho7HpaZ0rMp8FN9FuKj8ToS5YtBlo361QSoiy2+BwYwbFIybQdaSPdBXhSltYqlQhT6zbPhSmK8OQJ7rWczRi4xcHs9TYZ25uLzPBVX/11z/1/3fADD+3+dfgo2FTN1Is0Ooo3DteB6MwP6OMhwpvx5lUZz6mObsGQFzVeGhjtuRrLiA6xztoOSrZHppmiwsF9UYo3jGMP5GuOPhzSXNzH3h8DN/ronGxiXeM671X6Cz0KTVT/KZNItqmSO4fhs6ocuJOnZJMyGlswUxHgBK+U8yhgJ+F3z2/l5XWZsaMNMiZ+lT6FdsR7tK4XnkTyd/5aPQlYimIILS70gDistEi4VPdC2XOsFeF/ujMRWqzKvYipx+IanRbvE58BFlRTUi0+FzFxoDDh3jeSRDQbYZQw7w6CY3ib7v+Shb+WbDb1iPxKM0us/hElpwpTQ5ybJBBOpdt0pqGFXDftXkIz2nMOG1PlqqZQ6nDWsd2xXDaXvHhv+piQv1HDy4mMpRmxmHR4CVgwUcxiY8DbxTPMwjzzJPzeiyyw3scsAzMZjIcu5h+e9jV8VeNPYeqU8DxlZ+Kx0onbHL8YOqTOZVNdV+68Ewdpqisd42+i9yXZFCzlDj80HxHw7dmQxSnULnHWl7QciOWxKaJDT2iHPurxqkhN7NW+RLXBIc6VgZa+yCfHFgyPtf0jS/lTq+dVK5pfQQBR4WsJxZImphHMY/EfAEeGSxyGuh7IePtbKvT0ei4Wgp8Y1SGopIGGHfXQ9lZFlUmefPntZ9cXKPEkWjafo1R0rbBDmXTiyRgQYtMsWoLcPzm7TwhF7hWz3MmiIWcdBbIqAAerfDQKN1zbCBTiIX5XC2HXSVNpmAzrsAP+pTOdOJQdTxjHE1HPfhUd73DuwsVzx1M74zM9BPaMJHbdv8ujAinLmD9uEE8/HzJzw8PGADgXvH3ekOD/f32O7vcf/6FU4f74GtAVsbMq4NO89A6/Fd5hU185pCxitFOg6piOB1lE1vIOv4ZR7iaYB/pN8w/TCg/xnS95rgvqR9Cl8I12EjzPnqojp56GpeChUcAUReTuu9CI8qwwH+Wt+yHV6/RhGmR7gRgewFqgoe2/s/QSB+JwVoSYfld1xoHWa+9jxmWdHJxQLlu9Jns83Y9F/vn9saqG0gqPG8tnV24/nf4HclvRu7Nfw+b1ocp5ihYy4gKsERGb4m8c61lVpa+PhdOt73eo8dYyhFdie2jR0732yb4KiB2zhRyNwh/jC2oGE0MKlfhMIULyKOfY1pwYNGOl9Iu2JIzxG6VGF1JdUs44RwTzgD+HU8ax3DmN5GV/AR4A1EHSxhe+0wZxdPvuQ5JI01xUUPOAudpfDsFYDPiz4tyMMcGdNjwt7Pw3go4640YHdD2qfCqOxKA04eynm6FZoQojMIzjQkdwutq4ctjQUA0wBUqnVytnvbO5gZu1xYdqIWNlSP5pEo0FcyZlHoKil9wUL5IcDHyOP2UPKqp5NOTpfuME+w8oV3L0y36AiaKYzpi1FTVzaVxfecPeU5UgFuncp8BXtjgYM8SqzhwJOKRd1sG8UDDdRr+9J3XUizbdgeahlE2PtH6E4z4fOQHHYkOxSssgTefwbZgSc2OUNDRnXxZGEO84h60AzZyCMcxHi1S1/T5tqFue5ItVqlJEO07KpgbXuFQTooz3mc1EJAOYtVZdUp4ypDP2IIfWfwznpTXqElYrkHU2A+34AMbZuBEX1A59A5W9xEvm0NMGhoyN7PyzuycwM3vqMFHUx5UsfW/H2poToXiKyK52K09haKUnovGyk+CUEZu87LiSwSkiu4dNM35TAqT5N4iACndGEwbhVx0sFGFDaNaISoZB6HRgH3hhU+euoc7AGMk+gTeyJ30aUq+a8ACXSqdaLi92gOuFj5lTk/0kNpJtqeTLyB8x69kop+jzAnWV6EiBJWFFUhGRpJgdPSwbuQdO4JhyGPey19GgV1A9WH662pptYWAaAP7hlJuZ/xbMRkPNdnqTLYNKQSRo1DekBIdfDoNa4hUTWeUcJ1gUnbT6oGD3/NFgcu6f86CEEG3MvjR+2QV7oKOa+fajj3LGLwygVmOa15y++IT30y5vzBn2zrFVjI0BHcJCAh7W2EcLAr2gvjqnLU4qGoQTWIdTeHBgkW+s6hH9fDn+e5MrGTlDfjTYJb60del8R8ViwJmanvdkAQirbLME+G7UBO2dARcFTwUA1SJPsR8QSQHjSY5gGFtbWlQaHe2T0JOaX7aWyO6SPxyfRSiWPwsHmdmywMM+SqmjRuDrOPfe0vhfFq62g/oapqMjEnnQlPTrmsgt4OeoS70IMwoXuAH8mCE2l7sSfRiyeOOuc/UyLaIucGebANb1jl+xBtMJ21ukWh0699/fpFKXXsphcH9ej4Sf4uly9v2yKf0jGFcVy0q2PQIUQoXuht92cgCQu/Z1DPBPyFgJ9vhP/PkGrUVUaezHNmePSH/4NTEZf1B2cmTCqFfVeZZ+hVWRBzVyb1sfBDQwdMGOYYHlZweNiMJo4CHSRrejcYx0NPAlEn7FFnAQG0AWB04mE8Z4D3bewA7h3c+3DKYb0mhdHR0bBjeMxgOL40OVYsDZx5x/7M+PT4iPuPH3B3usNGhIdXD3j15jUeXr/C3cM9aBvrkK5zEQlkIVpVVQOO7iKf1AX9nycDyewPdWulVsnh/RErqI73+zpX/nOnHwb0P2wS6Rg3TFP6cq5ZrA0ugpFPy1GGiUzyXGfmVT3TBCLK/WrFjFJ+WuF6Gyu5My3IiEUppgBPVa5HbdPJ80Xdh32+tLC7MBi52D+xlIx0Eibly2Xil4p/OnhXF4+BvuOzBEepL9F4qIPgnubU5u/BC13p0Wju3/8VePwltFHm4sWVTKhRoOLKSD3BJxRy/m5aGvvruIDcO9Abhlu1GiB1Weu8lG7sIgCfaHhqVxwBAR8NFtuPyFhSvZxJQnBP4yeb9cyxwxUJ5UnqH5BXhjckDd+eaoXji0v9OgZg8UIXRbGLQkoM3j4IPQgt8DgBSvv78Xx7m7Rqashrc+tC6G8h3eisDwL49VCq+UO4t0oX8fJdbdgzhtSbXvqcO5tFKgdSkvEnyL1PPIznegcSW+hhGvewNfIwoU0rZVDb0FoT03u3/SEup727iXddGDh+PKxkSWmDEAsyqnT2wqTGrptTyfzqQtuXDOZH6VJXboHzVlRcy6fvo4GYF+958S4+/9p089gsGkyEX+eGg2qqrqNebrraIjLvVfPUqbhqMn/YPONw9OdumT/jl/G+A3S3SRuKTDfmuCzXzR/5NMFc4NYy8r3TCELh9cmit/Xk7cMSGYgbi/cGLIzcqKqc1H6hWkRhLARzAagwfmnaqAPF8/eqJ9Q6msyjFPETmrzalwekiT6M5wzbZaInwBxhhhGzq7B0YGRcFesKH0VZKBZj3zv3dtN+evBA8ztzF/BfwkHsUs2jdEflIUtI0ikcuoKV5wZ7s0KfjO//9/yLqBlOjxEEQD0x5LvA4XUAeoiCPFt6HevSzSMnkYC7WEcwJM+km2mTQnnLdEgyi7G6yBuxbjdxzNlIruAZ2VXk6D2Pesej4yj2O/jC6ZU2qfU8h1vkjihSUx844S/0IifVsW4x1EVaozgOXnekIAqGiWluMDmxGCeas3oj4e70OnxKipRDQ09N66EfGUvtu8FfF/w2LURKjciIgPhxWwQ4bNSbDe+83y48uGRVrcP4ymVPyrcYR4cg+OhaW2q8HnyZ8V5gB+wGLNWf3RM2+v/GDgHJW7fAmIzn2ieJSrXCRXpS+nqJhClmCIK8GjXm6AJCH5MH4SiXwpuarNIj0e4dy4Z0KRqM9Zm+pYaL/Ci8WGVu7OvyyQFXVb1/qRsE2EsV09LyGui1/oRWujyQlxoKQ2RD0hqmRL5GWhvm/Xny4LdG9P0CzjL/VgO9yS6rU3RC0VPqzGi5GGYEmSLOsMubi8hXWRvzJR140a+k6yPwDts7u75EJjwO5OnwIT0nu70nG89VsnJsixwXERrlsFk73CynerETSJwSAjxQPWqeF6foQBP7j3p1neEyEUFeKOwRGfDn8VnNl8lt9eAg3fK+1hXu7FEnEJHv1rKCe2ZfvxC7FzpU+V4IJAD4dA2ub5SiTvVdmoy4OxKIWS6XuAkHlHzt90zlv0sy+obRhJkXJEXen6ZTJab0csiMTiMGjItHzocw0zsEfIaxCLLCNbwyx7NHwhy3QjJAHdgJJJ+63zfEJQPodiWcsvq4wkn1vCYRH8nW/R3D25y4g3lD34WnjO/dqWbvjPNOaJ3QdrID2ee9y1VPo62973h6fsLpdMLd3QNev36Dn376C+7v7/F83vH0/IzHpyfs+z4O8oqXvR1oWgznND6J/KrspVl21XpCfVVtsumksM4kDlf1/Ui/SfphQP+R1snWESv2pCzXdS6sZfW7KaKhTiKMFXKoRA2K07tQURRacZJpOID1oG86uWkbESb0JLR8eviGWsZC4DpwWDz/E6evkfAXN/deUHfUJqb75mpFkbjb9Nh3OgtNV2Un0pX9jwbzYSSm+I6ahZ629Pl/j6p/0XoB/CTvfi39fCufH0qXbCIWhScqd6bQo0z27HSq75suhLrs58v3NvBKojElRVFQw9a+4ojFA1/aaQC20wilc9oGDrpd2j0W2KLEsbJp6zAvxwFg6Thu+B0efynbTUZ0qbAcMRx7HkPJNAXRPNA7SDfaevCiBolHPsB7B7W3QH8faAgyhAxWxfMEHzPFt+IY8HBKJPnkde8dfM8jdN6zwN1hJGIckchkKOz+e/pi+TgsNlVpt1BUjOE9DgidsRvPTxgbPBvGfyLrCxOjUQPRhsY7mIcBzg5GhAMSLO34lQTk/x0hOBYs31guPwRtONLfi2nxipx8MdxKH2Vcv0qWl/IN2SucamZp9GKbAVEEtzFem0YvDfHXpEj7cTP5qK1kUNV8YfuAYYxHlnEuS4BEq6hCXz+0RsbhQJ4PcE350+52rHOKthVYSl+Xax0ddqYRgq3rYrpsoMe5woDguZ7S5VWi9IVLWbbPaCPOBQ/a1PrqzkjCs3Qmgc8YO6JPo86NnSdWQ5Q6QPj84Qy78mSl+1YaV1qytnnxfhRkyCE1rcrjh4f8Tq+xilHgUyA7mdvCNg2UhgD4bvHcBdBrOUjXJErIuI/vzB3g5zEPAj6v8etQVjkm0GesmkqYvovrh+Ila70OoVVLFbG2hGYdF9G9nK/Z0Wl8XyP4eIUUfyza8SdFciTAVoinOd9NKfOp3n/ovK/9GVekuCrK2ET2Pfde+G7Qyq5eKEdIvQSv1JN06mmgAsPRmv2mYbgFPya/YgGaUMzBa8fvqg1JoutEO3vuR/g0nT4AHrNxKFeLL9ghGtFjBquG87NBxyvZWhPDFyyEsOUK4EPht8hjs9E/pmiI9+8FfIoPQz0yLTha1Ngdv+lfn0OyV7iKNA/DmsQuuQFdv41lAqe+RRxGw3kO6T4M0MvbaSxfegjzyg+Gz9n4GbAic70eHEhnTSJTUgzX7fOhrs9I8iYvYeRbbiLvJ5WiiCmy9lD3p0NScwFbfcmjixzHbgzW2jMe3MhR6HpCW5ErVYm4JjMUF/2gU6Ed4vWdRNPN8Yt5jU1OHMB1NJHVh1VZqnLksL9aLkCrh0NTBYr78JsA5jIOVp+YgToF9DtlrbaT1NPcje2qb489yGhQsfDsmm8xdxIiUSqNjDWy3YQmr/R8PdXnGDxJ964hxG/WFtedyTCeES2sWFCeaMgSRqeqLW0RQeVSoCrSClPJcGdzhKOm2uAFfT2XI1xg9HU7l7KLkW0iWM4/04SrzgQW8ZCwmhe9DYB0n+WkE4scVm087o9rzWHRKs4A/uUN8I9PmPC4dHz5Bmk1XN+jndX8MjVWiPdiuipofp9ki9/wrJCwz2khr9CbzNAhY6gacFo0IeLPm+oTSXIw4hWJ+WDRaqCD7hFkge6/An1cv0byqbC0sVlInHUSVhpvTfbrCDg1n387wL2PiJDcLEIVGQDiK84j87kDdMaoqzUwA8/nZ+x6VSSNvcyn84631PD6zWu8/ekn/OWvfwEz4/HpEZ8en/Dp82ec+w7aGngXXYckLH45YJDR43n9IFiMioJ1uYNk+C1i6Ef6Y6cfBvQ/Ylop4+nl17PXoZPlSnGm8p7IPZuqkI8LEC6FqzF8LJ+CMJJ3VN7Fdm1ijf9Rvk+9ze3L/RuEPvSXJicuKba9UK4QXsUc+idulk94vKIAhoXIYrr886eLm5PfuHyl16q1T3VJnonvdNG0WqDETy1faH26y1zuN4/Gc/MQJDBtYZNvfL77H3/H+48/A7RbvTTtqBalerGYdVsOO+GaElbTahYnmGfxzkOAvFeFaRMNCNJH9XyhmV0B2A7yJ+37JmHLYQdhWOXByhIfF9/xbvYIfsIBQVeFeYiDZ7TiIw/2y9jvI+wOdNuQ0gVy3KQirXh4nlNnELrd9wbAvG98jed3wzN/gB40GvcdkRjcBbdxEZhInxMuR3bpc4N4wLOj+BXSAY3MSb4xoOFpqa1C8waBqfAFXLOcRGWFRWE2L/PRZ9oAOg1jGzafL1hpkoaRZWwG7k4/WiEHZCqQ6s0gCwCWcTOasK6WXs3a9NTrqyl6EsTiq3DcR+uby+uel6VL69BrdR7xyKVy+k4PQ1hdnH9H2faVU8ghHCv4+8p1v9xxcAhPoLnlvFXmkKPdC7k/b1x3IeZHmVLGARmvb9q80g1Yu1M8wGLNOr+l+16BsLkuf4oqZHoPmxRd4lH5aTJU2uEWkSpiRLepVKs0oaN8W40zBXer8axZ7HcVkKXAynKpOuikV4S2I8ygdROpvgeAHuUAmVipz4HooxzDZ1wMK7FJuacAk5ZnmbcbbHKx0HzJOM7Iu6iQ+Yj0rWRT4glylWBhnK19yGzDgEWnQdj4bUqvZfDaW6BtuKOGt9iGAV1g6WB85Hvs/IDnvoP5DPB7ow2O/WircVbjVuXF+h6Atks2a06sZFWQ9TY8z/LM7zK1HP5X/7SM0+xNGsElzN/mjHN2wiRn5x6tCi7KxCIZTq2DwnsbG+RLhGx6PongqjkAACAASURBVGLLCMbFOaF40gQ4kipZKy5dX05riRexXEdXUezyIjyWn14Tpfxc8EhOCHNDBYZr6ok6rrq6y0ZjGgEk1UODhuM0YHWxvKsTQ7ZCY17XhmwUi3mhSZtMFYx5gLBgXelLBqHKI0w8rNcHOM9IHRS8z70BM7aO7ZD50EPYV52S1qnfzTsr8rPCYZ1wry2KPVu0HcCMXxRjCfYYwIwBuweUhR4iwegBVI0QlTDIIfR0GBTisJVfSJhDP3RMTf8mn4ZsijFPTxO2F5JIa9MlYhQAzVLko/26VjccuOU7qSdUo7xytVrmxAfKP2GCwCQjIvQJpIP2gnxbVZN4P+FDpLf2Rccb+jvqeqQEdQCD043+TvKZ/RXKc5VHiWbCe4fd1Vedd+b+ev/M0JT0AqfnNDYL2NgModoBhLyU5ODRsgnAuOLB7vhw/dpAZ4/sIhxt63C7e5siajnYaN14bt70IGhIZZPFUGP7aEENWCz4MF5ip8VYp3Uy8Vv9EjIEOkjpJYbzlK7w2iU9I+TxvbOAUAQj+mIkrdpdKtBoWhsBz4DtpZV1l6VPn45hOphTjoG4hs9p5lo//upUKT/wCK3eXSp7Szu/dwowx7WVvGLZC9Op1G52NJ7WjPD5MB6YoYwVx4wXiNEyLPoFVI5lWOM63kVcmB8VRo2ooCHlzh28yfGgzub8QsGCnpaSRGitidNLGw4vxOA+IOw8/Oez/iOe5uKE03nHLgZvagNbnbsB32Qu6fvYN7+7u8PDwz1evX6Np8+P+PT0Eefz83ivOA26VdQXp+n0iP9M2VOlxX/asKSv+aibTRs4Enk+oal+BtOHfqTfI/0woP8Z0g1K97dtb/HdPskNgJc2hwFk42F4rztN+q7+jyGtEdoaUs7riB4wHPIDyBKuSjKdFBqIOho17ETI1ovmMOqEtOhuPtFM+VOrMqNcyoy1FI4FrZUL+f5o6bei1Uv4q++WGjwyPVRCH9+rkpE+lWbqZpHRj4Z7kjxtGM8J2/hsbdyNRGIAEfqNkL/vT8B2HqFyfiLQB6m/T7OxJwvfHuBn2CLK6DEe8a9dNI0svHwrEzYz8AvCna4suzBqBN9mkieIl7r83si9z0lx1DHCYrGEhkcsLHjeoMbSwfcejthg4TieMdmKL/UrKqSIi/8vSR9peKJ/BPBaDfwUFtbyyePubbtXqPfctmub0qd9fH+UAxibHFjY1AOd3OAuVQLh807xLO9Pg4Zo100yfa0nogWNrzCiGSyxKP9s4dvkrlM95x6SyemwyA/GszHE0Wgh/7fhdU5bQzttQ1k+ZRTZYoGHUslJKCcARqd68537vQn6O5r3KMOwTEXWU0TuIsXHD3F+UHxInbU9q7Lw6ovJM9RtsKTL9JZF8u+DRf0K5vh56GW+KlczqByo4as1cX5+JPZrujqlrgoHwyV/XpOYFZNV6MqIHtSLJJIqfL2DmdB7G68bQNFbhjzrSuuZ6rPFexggjdxztAm/qjA+65zFprynkDHJPml27D8N2WYb8gSwzhHRO7qFqxWsnQuD+y1UkGUdAuQlRKk73VI3vpPPZ8yIfQD4KfcvVfG0KHMlRZEU5nvWzTz4oTc2Izr5+YZIWL3UqSkY0ccIBa+ZmNfYwLe7WQ01ydJEgZjGJkujho0IG9yrrDHhHQFnbPjYCDsTzvwXoD9BW1kZiDn+rHJqeh/4QoeDYFDE2uNmUUoE37iKbUIN6YHvKH4cEHHt1tyFVFGUC5FPqa3qj/PS1zCRbNaFOvQgDQFy7+CAZRcaVI1Bz/+9ag0NhGfuQnoqQwqMSjecHyehWiylExeZkcQfpaGqqBBZZmcVKY1igSMUUrjSQUod7cwzbpiPE36AMerwoZ4c1niVhA8sVG8Ml8oia2MnAowVdGVXfRL5iQICbO1eERTqV14zsN9KgQ+hy2TNEOUmrEq76mPgdMHiBpLycMplIPu4WHekYPQ2d5O6e3anjkayIi8PzS8qBT1Gg3oCMmwkU2jHe0Qkxv8rieD4i3swenZq/GchUTISQ8QAc3CYHLQynNLiwQvJZ6jwtYnRjSSNSwLAbUrs+nyzeUsPcAQiZBXTV/rO4ZOUR7RfAYmxr46QAf+yiRLBxGqkVLXDuQBtMaXH8c0HU1ImUBsVz/awQB8rvpsEIU2vfK6YGrYmOCLpSObauuVG3YX71SwjCk3PXUvVE6IC43Qs7zgXiHZ8PxTgL+JBgRi1xui9c0E3T214/w6+a7oP81w5eGAo7uF3Gh8pE6bDKJGG535WVIZMmKP2ua6mr9i2nDRksp0fcWKBGr4qX1R+mN7dSB5TqmWv1hXo0yKrAE4k8rvLorVtc33xREYgriT+I/kzVGC6KGUaTiPqhU49t/ME4K8E/Lzq8IVOFrb7/dMKIDr4/ocB+vukypQ6lanXuS2CA+sHmuJIn1f188UcV565Ef36/JlyKL/L3qWT+IgMSmqX0RsOkPWkJjKiteENwEwm931VNfZ9Bpt2UNvAHejCl4yOc9/RzwCJI1qXaKWNCFvbQETY+w4i4HQ64eH+Hq8eHvD8+ITHx0fs57PJ6omr0hTJSZ7VJYdNk4pL9gqHjh10ljoa4XnctjT9nwtcU7qu9/1I3y/9MKD/nmnFFVWg0fTlmzc5txW+r5q1hSzZd9bnVohy+cnQoBKGTImzu8hR8tYFQYWtlpsA51IoLJzNk5NGCFRb7EclCap9TkrtYarjFpWrZca53qgg80Ge3yZ9gVb2W8j1ibYWz1DoIo1LBXJ+xlgY0SnkrW1WmtVn1OSreJ0390bnUNbOFzLw0//4O359+jk1fW06rcbOUYJdWbuYCoEa26i2h2wMY7gBWMLoxPBlej2ULfii4tEIvLHXTwF/SUbwApeqkBEG0xaDrfKrAYlcn/6MT+LOYCr/BemjlP3IwGvRDXU3SQ8gsBjNwQDvvsjCfA8RCOPAgSnQFBZmRSzFz1UXdOVr+PRw+9QIjQlofgqUGwGvaRzg+IRgLPewk9Gj0KIPxC7YIQA4X8oZCKKG1sY9bJ2fM+rbgIkagbYG2igY3iOt0iBDRjDWwfs4KhdapKHYyyfvAHYdDkbv7HV80cn3Ou+UFEO2x+xmtSpVRHbn8PtKM6XR2/KZfFklBvB6hi+lAwN79TL/mnSpmiOaj8kOHpW+JP3ka1KQN+biJ4CtjGxR/tnc4vKsa0jjTuMwSWT0FvNjyIijNM2LCmsuk4xe3fvCUR9KatA4OU7wBb6xZ9Bg9OS6cq12N5KkXsuRRa8LOobIglC35eLKJC9Pk+fllHScDqylNpYrJpV3F+eV8P4wG8FPX8yZ3r5+A4Dw4cNHOA3OWX34dILWSaDb5jFxQw79R5P6oZ6IMZAoM/uBoACphQBW7VvvKT1STvg9eH+Lp7bhfQPe0tgcUe+rHYxPGGH/zugg3ic+Jp2M4i55eD/p6eEwmD0lpw278zwYCFzVbKCAnEl0ewRFBF/WMD5XzGDK7tWAVjPpN5tr1Vts4G5qY1o7LRq+Mnms7/advZk5vBtIUUlXtB5VcQIbUXlnPEZH3srksLFqKKU3pmsEXomwztWF+sqzkDdiNGoqSa1FEccU8+b+VKPfJIZiY6uhLPOa0tHsrRqjmZDluykF+lSjUzJuar9tPIMhmgitCX8DsrmrB2VZAqiQdUWX6av7womGtxJ5D9bgUjSOU8Bb8NAOwEffpCX+VG7Kdx9fKn2O5SizXzTaxU+EvpUujWdyk/gVnXU+WBTrGTmil63/lehORBLBeHBTB7tssTbyZ6LcQp8UnlePavvFPu62hjCVikKVtV/qpStzhhpBXYBgloYm4Ut1BzhbPl28WU1vmMfS3tk0tRSsLhgNqUdgrKKCwcfM5sUCNgUgVvBh0JLz6dSCgHlNH4tzRD10BVi0PYOPxdaSiWhJa8DwblwumGaYiGAHiCjiRmlsJi+DyR/5XeKukhadYLHMGx7nSIe/jdzjN9OhvRIKeeL+UUYEYLLUhNEwXsWSld6CmmO8ZvMeRzgCruK6x4SbPqtI0HwB2Mn4HuuK7+uof7+kstEP7xBAG5h36U88hhTAGoqqilD5ZL87mqQui8IUyj59p37FQV02USX4FzdUPieNyp5xeOb7L4VnlfCSMonVj989cf7jKbCC0r0fVgtzk8xT5D8tkguD5ZAZhP/9ILLrpgXXi4P8RI79PHu7QhKDiwXwxx/ZdGNm9NbBrVvESEB0AyK0TXWcoZeBYfttBqkIWO7OLipHZaYZe4DNXFxMZFADaNuwEckVmFJvH7XrFTXcGX0fp/8aEe7u7vD61Rv0nfH8fMa+M87UJxkY5Z3RqCp4GDJTDyO46JJ8eqCpiOVUd20nvkh1lvZiU38s8v+nST8M6L97uqZg/kZpNWeuwNKFcXjJh3nlz7Q5HT/lPQEesl0/o5Ks9ZQTqraSvty9GS4FXk+UUzDg1zFRQY6XCapvZTT4M0vI70ratKbbm2CohL4gIntEpUjIHzdiI+1a3ubPWpPTcg0jbLnS/oqAGb9+/l/jORPwQTaj/iqvf1ZFU+jinTx/f9DVcNpwvcnCWN6vFH/rveokL0yR1dOz21As1KKrqFG7j7LVGwY+YJwaVFypcSgtuAc+SWSDe10GflT8NAHBFtfKM5pPQ25FpKw6+Y357ANGn16NTzajOYNYwrbrOKpSbUqa9EHXZo3ciVG7doYHO2D9DAqzkKQh3wwblOohQenW5CARb2BiGR8CHinA580ziQc7yDZSXDEfyp6F5bfV/miQWkNrBGobQB0NDePuXRis1LaxObhJxAYa8LEqyayh6RSv8L4lZZTEyx/j2uDOgxw6ZJMFHgLK4CTc4hFxnKh8XSymVIY0XxBNokDzlfW5kXjdBEvx4Y/AeqlgpkWRCsxrLI3ot8yDK71juVCOeVbz4kKfSlneHFR6y0QS06uRlz5fzXm12ggyA2PzbXifc28Adlg0n95GmO4FTnkvfY+0pDIW8PDgSpM2nS2AJF3iehQNss2NQZAEmBF9OVZR9sevpPXD9krSvW/Gg8j/p8prwy/UqV869Gk7oVZyoSIFaxkaPmRK4D/NmVRfqONrA6DI5IA/nV9yMxFvZJvNcoqBIPessnl2RtUhbgqwhRzn4IWvFZMZMaKxk2ObNmkU3PB78P4Kj73hsW3YqEmbI4zfOHymcntBZJfGdCkH8+9q/5uqiBvEIWeiBqplOOc5kMd6B6vmIaQCXgfV54vaikHu5oPAVlulec4/U4obcjJPQ2/57vP+t5Qg8DCi8th804gwJiQM7oAMqgPN+Sdy8dSjyvcXaKVKlGvYO8K/JdGJoue5s2bgyQOg2DOs2yvtVl9spwMY35knuoUWVWP6bOiTaWqJiGg8X08pDoPf+c1Bv5c8BABvZRqInugqYrKBPoVaV8Y4IFMK7VCA2fIbvwR4lLQuiXrRx/QodPQYt+Weye4w6K8k32Nou4yV9WlCKIUyBZzkOUUum6cOlHz2zr1Tx8atHOhrI+KXLie0nWhfsnIV3kAziqepP0FGGF8oE4bPtNReJBeNZAcAEAwNQIm4EAsmReWg9hVjJIFD62w6HU9tz+NRejLBqPRlhxxLfrVv5819Svx2rDIpA5SXvbuhObUX54o13FnvcACojEUySFSXzEU/Y+1HHSPTNRb5Aj6n28ZDEVrCEA6SKgxJWZqhNQjuA5zR8F4g10P4Lld4xT2L1ODXdGh1W6p2ktO0+lrnDJ+306hWg/cqVTK5mlY695eUP3ikDg6V/aInOurAjJEwno/wRX1b9xrsMKvk6QS0HdglqiL1TDOPAP7lNfCPj5jTkZy47XXK96Jx+IJECMrWgWwI+0optA9KsaPPKX3vTl1LB3TK/hFNDb5UGwsqC8wZ8tsfE0bhMJ/OM6mZeAc6Of3BDfP+Pq5JwvwV5QCXMuJsQq2Pz46xx81NIrmLg5gcEKGtydgOQ3k/d5/AeegaHSMwQ9JTGmDX1NA2DPY72zWN1AjbtknbHbyPyJ7MHTsDfe9iPN/Rz2eAOwiEh/sHvHv7Fn0/4+nxEbyfh/Veb2aQnlY110iTa7SNy8y0ZIGjFKtalPst2PZHup5+GNB/j2TS8AuUgbjo+qbpwiJheuKLwnRILCoVSVtbVGOLbH+f9a0Q1nppYJxhGtXGE7ecPvQrVdhCf6AGn4PNgS9OjMVqyZXiP3QyaX20WCnvCm5/m3QwO03Np1WEFKEpS87vZ4DT+6mf7k2Q7gGNPAEMZUI3M9rYoDD1URr5y7//G3759I8RqjuiVkGu3QKvjedgV05N7nBqa6EelAZiowzTMBQp+t88yjjBSiUffaQRrlvfNcFXIwyXYIC4IXpLUJIXGqY7w+hjFPFdmbnSybflPS6oNJR9BPBqjAWL118yntupWwdz6Mk00K3rt3DHOWkoXoZ4i6oMkwzJ9ltULm0vvMvqotahHtkCu5aI05DsRpkvWUCCellQEwM7kR7eHuF5tw2bHJ7YWbfZtYOjIZLrDkijlEjNzN2UeO+73oPUjG8JLEb+NjyTJNz9MJ4zuJOdhrWBS3irA1rSrSLuXhkilKtz5EpsRLCU/fR3VbT5FuN5SNfUkFv6RlpRfX6l8Or1i6cLyu3zG3++nLN+o7Qa40lksR942TF4bIMtMAcd9+Gt0LoLUparIUq4Rm8nEgQZH/mjAFTYfF8lIz3bPWSgB49P1nDN8A1cEezxvtFDFUJB6QsKKiJLn1EQPtFTi6vwvWXsL2Txe+CP5ogorK83tZzILT0hI2tRYRxH3UjR5w+fAXrAuZ9xavd4+/aNeKEfLO7j/ZqGS8EZCX3pQbjSXJI7Mh/bZD7pPVog/pK5nLOHoKnDtqmi8H4a33fyADiR5wkYh4aqUTr2VXWSLINXp/tTFUVkT9/DLphoKuV9RkPKU5gituxzsXu9xhyGtwWA9rWVFzFDMnzEua8mUTCWXoahTGpGDCGcgvzm2XWB17jd5/Ibomtk+o0scrj5H9uI8glhjZjmYJWvi65W+BftLNOR5WwasOlIunxT3rlxHit1z0bYA3pIKo/LAZMHAZnmJbWQz1ZE/8/ApXVBmYqc8oln9JKSLhkcKdS64nFhTJ5IJOBD+asVGp/Ly99wciiKvyhTqmHRjN+rYZT80wGCBGeGe4KzrlEFkKO5Pc5t+l9r8xDV3i5bB1f1uQccxQIHJJv83Xhwo08lEdNhDmf7U/jvIvNNv1xaa+j5jAvpDQ7HClHnmNvKdtkAexRtUnagSHuaGYkK8xwZ2hO60+EI51dd92daiGvodV+JuHYyvkRWCgIctICjpKPZhqYMXN8IKbDJmSyyNZ8c9KjzecGFjxel4qtzEcphxss8xo3gODZAgjdxGVnnlTRGWT+ZPfcZhRlTnbMg1mxl3m5bkmWVT4d3q9da95ujvjPGmoNscF4OBQQYpRdtSGgu9rNGqZto4BulBWpfXIiBhKjVvnxUGBi+j2OEGJw6iIbn7plz+c8X7kK/NR2JyJm11u+/tFmCh68mYLmmublNupLh2vvfPmU2zboygYOszLRFWlhxRhhrJaMnlUNhbRC7PzlC1YGOPLfIx+ILX3mEcg1Dx88HYvWcyS7XIm5bA3NDu2uQG0eGMZt3MYwz/FpOAJ2xd8YGRtdNus5o4cbgIVJUFxiAjehFDUQP2J/POD8/j/3VveP8/Iynz5/x8eMnvH94j+fncYXaw8MDTqfNuvjzf3c8Pz1WpFxMkyQmccSMsm6RfxIVVXyEeSnNW/ZK9mCC6P/jUP4/T/phQP9dU53J//jJT4y7GrZkXFUqLvWPaj7RiOeV9xU06WKiKNmXsielELC7e2zVyBc690+YbsXFn4Kc6wLvCOhLnanlKP33TT+lZQKjgamBIPdWW4hCwGXB0DJ+efxf4+dWeEHj29wE6tDcw96Db0Gotzd7vrnsUcWhMlXyODzjLopR7prVpMoCASQGT114sXhJtt5ERdDF7iafdjxQ6hKv5+536My9YXlDvug57O+3SOwd1AMyzMAHHgvr17uHFLcDNDIyMjQantmudJfqLKt+j0Z0YgkfTxKRgIcH/BsAd5JJLRCb1znE3VjMqUc39g4Onn38ii1kEz4XjBnZ6r2H7BWTzBlyTxFIaL9taKeGbdvQ2gZqHYTzGL+w8T4MfBs0TKXiaDQjngKKDzO8AOPKhOHTPpxldtuUHZ5TbeC297HVwj0YpoP81zuZdTy149GDz+arlcYc6SoIUQ2/PUU2Cf1Jz+EPFgubdIFSTHT44/DRTe8A5BXW4lmFs6YXsVzZCOJ+AB+Vz/r8klxLDYTvwcucAPCrmnlRnOG7pAdtVUFlQ6iyuQPPJKex2zh0tA8BYR6/tbtqwbgTzzFqY1NGN28A4EQjcsVqrCqoQZQlHgjlxlTiHuiDrLX/5KfpD5oYD8n7fpSi/JsAf0HSeo7urZ4y19+V126kKUPCwQSusjPKdwLAD8iRDhbjDsIwwt/j3M8OXV1i+C6Mt0nhncGn9OXyJqGd4XKPCCPyRA0tT5bVmrH5RmdkdqO5sUxs6Q0QD1VB2wPkVBpy4hm9dbho9YLS62kPF7naKdSp/F0HzB1v/HvUn7RkzcnWTluso1KXkuHtMNdBT46SyJyredb91Rl8zOU8os2I/GBiPK+MADTC8ncQNmbsR6rapS5Ma8dINxE2zPyo86iK7UXDSec57v4h2DO8CjNZgVUgqKkTdT6zn06JgNNpPTgyARoJ3gQ5LT6lmiSfMnjWJf1d2CxVp7/h3uPeLXaQ6a2g6UPOj2I4t27mjWWDXNEl7TTZhG7yf1IT5Md0hKWgXUVpRIQfECD/navNOAKABxm76Ike+7dK5NIlGeBU/7iSOG6CT5QXCT2/Uz3dSCHJqTbPPV4y1HHYpdC2lOHAuwKb57uesqSnK3x2Yzqa+ql8P2roaEynikoFevDyCJCJ0FQf1EFpFk63Npc96tbwkUQgSK0wp+4MEpQ1m10Ts753N14Nlnmf8vtJ3lVGzNkm+mKpkwLlOvMs6sryqEA99FxmiW4WGj0YbzsQlfCseIr6V3ifFPAghxJ/LRBAzVQ6ats6T/kIU+BBH1Sy6qFZErJixQgSTiN4X81sCtRiUK2R0OCliIoMJOclHUebf8o+EwPTfR0c523B3krmMTLYg/3k0DQNL/SzRq4sMvszxl3ovxwKEO9r7N8fNq0I4Q8P9FekRX/t4DD8IM0RzYBNVLkIHHRKKtajTLAzGSsc17lklu3xPI2xQ5rkcw22X2i/+/AJax20E/hOzoxszWDrDeA+nF+ItrG1sQ250vuQpcM4zAB1UGP0TsPOru3YwR2fN07bCfenhic8oj8/Y+8jKsjz0zM+f/6Mjx8+4G6TA0Sd8erhAXd370zv/PzpMz68f39p2stJ8r2Ueo+26qap+JvJzB/pe6UfBnS4omK0Oikll4TRl6ajzQmdELWJ8HsJy22glGXHLEM5MLYxLhkMBLKQ0ylAX0IaQT3/BvfXPlLJ1zAMY83LaRnOW04KH+tJJTO0j+VvlmRBA8wdtw6bcOKxGc0njNAfmyjCNISvG8AishaIjTSzOr56lFaLiWl1nn/MYZsUJzrrHhHEbTQ7HRSME9VxqdyXS/R6mBaKhOGTpsdH+EnNruhwit1Yf8bnIYyk9i/thOjvQcNMkJPgw/DHtI1jeWZEDJvMhtfo/Yth/Owb+OQuxBTHQIyvutgBY4SDSlo6wyhJUWg/ZHOjsS/2ODSkVtyNA4xjQaH/IjuwGns6Bi9zG7yjh2vlL0e8EUYtbbMFBaGNO7etB+R9QLMl9TFFKRYZTGdk2iMwt+GgTAzqclRSF1LcAuqahJZFqaOIZXvNSZE0NuQRpt3zSaGPNHDzOghdkVdjHS3bzx3ApuG9mnxXetaTjn5CkXQsouwjGTVtX5sMAzHkqshRbnJvTwNYAqmmk9YA3gD8KB2t/FrlWQN4Iz95rTcaNAZvjL310X5jdG5Wh3qaj0NNzStnDTIsYRg1LiYD0UuOGtAaY9toXB/fNjDt6H38xzMBO4/7z3cI/2i0AmDanFKcavdsl8E77iKv3ANPGKH3la8YyIvxmHS1FPEZ6gJhuTEwzd0xPYZ6bjD+xnYvPmekkO1XNwNLPS+ZGlZwT3M7juFeARBxrJshl9qwzI8X7jMv30/kfNOk0F51Cl6Mdx80SSSfPDy/+w7qQ5al+7Lr5l/9ZAKeXX4b+AQw3ozm22O+h5QBoEt7fvVEY5VxLI8Y1Dvs7jrT8Wjwgs4PvMM2G8Eyj/Uhk+UZa6hD+480P6WpLvTPjLAO+JpHTD/NIjmhqpZPLmcLGlnSHudxQfxOmf8ny0ocywd5/wojpqO8mGg/yI3q+q91xz3BKINIvhMNud8JtLHcJzdkMDZt0iNDMQHYdJ4MMlrktPd2HB4ct6sw1MPBDeP1WiYgXp0xyq8GfcFwoj8k6R2v4aD4Jd6/quV4GrIaKDWLiRquPOQLKHHxTOMFMxRnFGBKdRFk/s0E5pjItGhvU/YD2jq0XMV6I+MFWilV5eRK0LDP+NUtFqFGqmPyzXhtl3R6U7qroBoivV+cngfAyF+Y+hNYw/LU38b+SqP6jo77TzoiwzNvL89z0noC7SRPPJqmlxTVNMKsvKjw2dQix1PIN2idHKh0JyAyqHQ+pUROBiavJx0zEo5e4GiU49Au5RusoFpt97bJRajBHgzeLl7VkMrhd+SQ8Jcp5I8IvZRCpD3yNr1Srd/bMX07JJNehm7XNbtOF9LWPAYw+k6jQeNu4pBLyilfBYkSSDF+v+alrviqBlJsUZsIsln41+bw8BaqtweIqVcZFeCEsiTZsrWKrmuj59N34BOlvx7zRYESYS7Pjac9vL19LPTCKnNMugbasba4fAaZEGvgdH8CpbHyj3Dnu+5RhNnMvENDGTt4MSXNu1h73JDiPelVBOs8rDSTxrdMO2P8LlxHF8iQu8xevQAAIABJREFUbLEbRtJwrjKQgsynNOZJdiQr1vgfzxlYVCQlFcV7AGoSCff+Xoch5SlRgjg8TqN/RozILnCJbiFrDp1RlmcupH2S95EndL2tKHMYFAjWbFZXXp46zSybtsnDoF/TVzQsJwUNARkBX7ERLnkLBKuU4DdZJlWHdYYeCrTOtTauN8hkJ6CniQ4Wio+6RaIchvUe+kXA8zVwOQ58TnF6q6/LYZW5jQUjXoYiESZrhLUJliBvkiDgAitbQEHPx3FSmMDz46c6JjGTE/B8YCzr8Yr6mOe6A32kmh1+sC3qIvFLLqt3oQMqL8N8XoqN7vexZ6ZrN1GcSV29Q0dH+S7Rc0hQPcrU61bGak1Sp2QXkgChppNNaxPV6cV+M7Zh5Z70vY9tRb2KkQi8+XtqZwAnkEQyHdvcjC5G984kN9lJOdl/7Nt53GRJHfenB2Afd7LvGHt9n54+4+cP73HuOz5++ojXr1/j7Zu3eP1wh5/+8g7P/Rmfnz9hOw0HNxaveN587HoX+RP2JKiPA5hBPDhyJEIgtXENH9laV+oR/rdpg8Pso3IGsDW4jhdDV83BychJKI8FdN4IzEKAhgLgAErrqaZJlHonnZ5ifLEovq1APFBWgYyyscqA8Gl/E78WnkbV51f11XfX5dkt6Z/XgB5O7QIVnZV6jmagL2871ZtWNrA7H8aEqkpiyHPpDsUjEMP7LIzdY9O8HdMERVDle8iFtpinx3vTDCh+VpjI35F45KaytjyfustEficvgGxwV2EevBKXeAgzutw5w42HA+YmBvSdAdoxJrWRZ8zFIexVnc1W3+vOz00GBlciZpr8/9l70yXJblxN8APdI3JRqm71bWvr2z/GbN7/ucZmpsesuqtUyozNDzE/iOUDSfeITGWpVFeiFOnu53ABQWwkSHB6MQsNMu534LzW/lIqpXhK2tfSkucWz1CfgiXmCmyM5+cTC10DwJda5hBpym3PZctCPCmespoh9OkbQEYeBd9zfh6fInkCNwxX2ITVz01bE2cAeqAfAvzVlOG/W4GX7AGgwCczUv/G/eAw2GbCKYGMvLd6aORGxoFp74xxPSnOE07IuxFdofs/Yjvj3V8ijjfxEyL21wxfGMafnM7Ftj5iCTInydtQujyL9RTw83OTDSrJYgrjb64HsThXd1dqikIREsGKrmr3XHkcYn/vDnSlBTV34BzQL2Kh1zGujwYgbRjA7mMbO5TbuL/Yd5E3kqsi4yCe088nN84MvI8tDCkXl+p9d/NeZThILnlzI84WMeFoI3z0s4wouQ+G3zYpEtn8wcb8ZPeqi46JfhNoE2hTiCi6HHYduQA4Jb3YVQc5VhlOXrnN4YGH4JTrQU0hZ8XpLDh5myJ4fjlw9Bfg0m1iehoLeEUWWd+605HEuAZu2UkV6BgvI6yf4+acw5UTHdA4bQS+v9uJz6sidScUbeBD7T3l8+K3ejdbsterL8kJd3MX+ARGSd5/weI/e73xHQKu4PBqPYrBOD8A+mjM8YHqYUNf1uL+kqvzDKErSN5xQRexwLgiAchJLG/79llZE0BPQD/GpE0btNvGEq8eY4zHyXQF2nuDpg1qNBtLIDjBltO8ieEzhcp74NRwMp1xHB1yfMHYNn5gnCbvOLld1PsIBKAK7Z0mWy3nPOZAdye6qEJcr8DVTOqZsHVFKUoH4dcdt4F30s+BXxoUHh8B0Nqk+z1PxEChsdwwYCipTRssG+Rs2S5YgQDCDpWXrDOaE9jFmFS2IXgtOwo32E8Wwvzp4SeSvR/SWRPj4eBbv3xzhuRzaQo5JNb2RsQDjM1tgojSNK5dcb6XgipvYhyQEBxyto1ZLlMT9pH7yMKMJ6utSd7xmrbc+9S3geKV6ZV2DhTnV2kh35eWS3te33DQZVXryfPqhE9n31gHbqEjasj4Cpfa+9nhtNzPunzhly2ci55hDQ8bimhqXZd+sZgrhhTniGeNxtzloYs0CwFrdyQe4WgbC4LDiSgLKRRxLDN0lNzWJqiDv4ua1BVvpU1Z30v+tZZ06a9GoB6XS7d1ajrCEqiTSFwByfhOPWHZG8DzjtRdMBspYjzkneFcXDanvhW2yEo8YS+dN6IW6psffOqmWIpZXhZxx9+paYDtmkmlQ00O8P3oIrZFXgQifmLoocJoY5mwzjxCMGtb3ptWWnlpGsaMUIdwyPp8IMiJaKHYjYkKON1V8pahYyF+IwXwPI2DgsYh3+nc7vStqCy4DEj4YsPBvDZlskHpvs+RpUf7zSPkOCBGqByRSsnOqXvHpIQe57leCeMv1kdwXgBUV02EBcL9tEVpzHs03y+qhxAXsPF1M8ud8rr8vLZ0wWOyOO8nPZa1BiGiznF98EnWekEWIn4i3LPQu0UtsAwLs8gKXcX7lGY5KKYri41l9bojBch5ca0MteHJvkMd6zHaPrmo4y7T2mR1pI/8dS+E0YAcBlvKmrE/LzeZjDGflZbmVx4rh1UmOgSNr78HrexcCLUAmv8+28Dy2qghpkayK0wI37iQa8CysALr3gHzBv+ovyM0vfJGH7KprK3Mm4OQVdcDGww2YEjZyli3yyZ95PAJrs89WQHrCAUNyFiDMbtl9MsrMrtF/Zit2Jg5jiSVd2vj1DmvdbcOHOdx2EB73r0OAR4U+JMAPzGAE8IDQRubTKZBwvzzyvurz26nwtpuG4XOzCarTJsJCMhJKmIJehexj1Vb6ENBOROTBOCyp/aLpHyW55dvSNu2wH2uejzL0eVFOmSTuF1Hee1cFrj2I6wWx/Ow9ZrkRpa059YIGmN9MfsooFsGDKDOzCfOOmJixp+PSqIq17UusA5Fv+iIonfW0ZmTBG8rDogqziIQaSnp1XsnOBRj7aLBrnQE0DoOOXDgBQ0H9HyGvnR0OXDogUs/8Pj8hNPnz3h6esJP8hP+/d//He8/vMf5/oxPf/qEL4+fcfflBDmPtQEVW1tpWhzjauu8YwnPpLE2iI1CIFB9rMUOhiGd6LyxSpI9VDTIPapSQDaBFr0JtfFJu4YEYFnnnjalMcMAYc8IVR7fAyaLtkK6O46YSY5V1aGYeIGROXdq1u27dOv9LNjncjsm/nrZNqffrwP9jwTgDSTknHRVibix9tYkyMVDCUGcbVVDbamZDSHmWpnefQU4Ln50bjRWvEY7OyNurYt/j/LbkxS/UromOn69JCgz5vJKSravqfKt+dbFz69MsVoh+Tto1t8h8yx9csORecgUT0xWTHkIoD8AuJwg9x3435QXSGPE/7y+g+tdGIRg+QYEzApx+pn6kAGihRNxztoMGhUJqHUds29LU4eLVU/GWRgDEoasR9cOVM8bnMLCQGyw4XDn4Riwvki899PoVsbyqyrwRYEP7GjHoKV2AtDG/YxyqoaaCPDFJ8YGI4V0L4v86uGfvRtDrmmvsJb/Wh8I8kafzNhuxtOCcvCwndq4z5zGYExkiE8aSiQCX2TLhUnioXE0vhiKSridZxOeb2yKAvohOGQYobj0EWHEy1nkA0FDayccy/jlMNDAl74l37p8d2KqtL7SD5LAFoNzerdtnnEwp2ek881Sfwe0p11mS3Zv+rzp5Fr/5RHQ2Zn3C1IDcHzH+jx9tfJ7oLH7Bhn0le3t5xIkEK/VVU5pW/kRPAL/9eN/B6D4y5f/CeCD7aa2is7jfi8FoIcOh7mMzS0qwP3pDBXg/ekD3rcTntoBPX3EcXnGizzh6fIZqsDRFc2c5+qL47TJyhVbrHWo2l6swS+98Bpyo9JM4w22iUWSJwMBno1ngiHM13eyfHlDMj6b7FNqkIC+Q8yWi84hGTGPqWBT57tNY99qwT0iQ5y7nTzVxavmGTqltBnuYc/Lh81fpXnblCKPKXvxHiNcjdepQ0iLYqwMPwDyPvEXDn6Xez4u2fASECSBB0y311WBJdNiIsmUx504/G5n16Qjqy5Cy/yv6bulBia7hYRnqPjLrm8OwSs05Lilmhf3NNlFG1Aq8Ffff1vSAoAW1V/zVEjq78lWupbcG8y8H+1rotNh4AO44LEl2Mrv6+MxIiBMg24bMGxvakSAgFRbiloDROF3dUvRaaMPUkeSAE+2cwemFlrwa5UApo9ucMRCHjs/kTb1+O4bSgSi5MAXwE8zFwe654WvF2SZnZN/lp0syQCJKE/BUd7GFbKYF8C9TPmcnr9KYyKlTPwnEtPI8ZcyIjZZI3ESMmSCY4YzZe3UFxEs4Yq5JpPZ7hzM/vHJ1uuMHlTm/d3owO3cMNpGnPiOU76vplvybno+wbNWn3UVWbuRQc73eZf6+GdZvNZJjs7NXe1jpb9wODJedmtxBW/cwKJccBVvkxyMK3puplkojmfLOtjGhhDCI9fltK/0e3xRq7vy5XxC8lUlcevxzgk3i9B5LngrjRt3fmHK/ktrZCbv6CCfLvpUV/m3w8E6lZ0KaY7NjIOV6r5hjvU1aR6etzR3M485q2KXgT+mnsV8K2UATwPQdTjLxfK6Qnf7V2H2h+RvBR2c+RdLSl/e4ieYCGwrtt7S3HdIV4ME/kIY9vOLt1RMkSpMLwc9guSlAGxDhqgKQhyZ5MqYDNXGq7ApcbcHCLMQ3K8cG96aKzySmd02ZNuGKTVbezyzKxWpbWmjspN6lBK3Mcdip299PLri+eUFl6OPg5nnM84q6FA8PT8BqpC7ewiA0+mEy8sFn3/+GQ9fvuDh4RHH5Qh9Ejrc7RMB0BUdHc3XX7qt68rYgJh2s3W5aKrNcF55/ltN8+Fa0oa/2/SHA/13mt5O9LKX9Mu2Wrk9b+H63Oj3nz4pjmnw7dKhB2ZD5k1tL1MeA0ny0/sTC0GS7b01Tc7zf2b6ZoX9WrrVt2nRZlm3DYCm2fRboVxXCt5W7qvSRNOzgy/gn3lhgmuexIHWb2jyqIqx/a/b0e3/CuAvQK4kAPhMePXtcT/7Sx7pSqtlYedVMr7SH7fnZXlM89PNhErGl1z8AoAeESMAAfrFTrSdUHHK/eL+vTLeJSwYw6P1k3LkYpxPwrlN7tD0M8IbxyXaNNeOmRPS6eXOdArEY050/UR9EwGajDvCfYfkD4bPzwQ8w/PF0WO0+3EYwwMmTfAfbLHhY46BquL4acCiH8ywPVuBTz7AMiZ47ih/7NHe6f6Mu/PJuj22I6gMo9MXm3xDRUYwKDMCuLPMF8tiCMswBLHVl74THVlWD8UhOu507xaKyXmhAYLzWMR1J+C8yuDKRrhNGnzvWJEJc54J9sKmVAfz+crCtbrF4cFlaGVGnsfzw36fnikz8PYVnFkmPFx/3c0ZzodK5/ybKr8t7SrRDX7stHl51lDuN/8eyau/s08+gMwnNqbsV+0sShlYw2fDk7y3d4O1PtC7WV6+H3xnsjlEohHeBznjhIYmQEfD0cZmmot8wKGfob2jX2gCbKfRs0M6Qr8BdhyT+ts7DrU7zggByx2XrmdPVF4xJsFXIiW82Tp7zVaI0ydvqdH5/4IcdE53iNWvdqFiGvIdtsGg1BnMrIDY5he/xsBf3T1FX47+/gr9DCf6TnxC9coJurXfNSwnjFxzQ8ZWzk00F+VC5Ds/WOUNQG8Qc7qHbgjCn4wmRUVVaV4MKi2LyrsRrT7I8S0PIGWbHmKR8xbsze/otxBM6RjjFrkOKWqCM8yjxfVuerZ/ujwmnEbS6EP+Rt3HspVZLJNGP9l5LCJoqhY9I094NLtT1+L1jKg+17ojt67xuZGim6zgr+Xld6TbaVAT9/Vca0TNAWODEbWeBVrgNPuHnbfDNMordzzvJGEdMGMdoRYlxKrb4xWTXqdWlVJq7+SUnell9HOmr3CY05/lLEHq5pDh9eQ5O5gFIj8YCF9GnYuhONsrRs/W2liUnfLtyHmiGW/fv3tPuKyLNMfRjt98iONJ9CtxKALgvfX7qdbvcylQPUJ1Yf4+o8M+h1O8htf25zXjLLN4o6yi3FcRdghdIYCaPb66vLuRyqK2uExeZXZFNOmfxYM9pSskM9cT2WzDzCwxva3q6NeFTcT5k1uRqY0J9MJBgnF/LJ/cj7l07euI8MF9YYtTKcKlizJJ09Jlnc1bhduYY9Xr3E9rx6OlhaHn5fOxQmNTaHKo37HN5UDya0rdbYXpOa+9RF825SN7lUGlPzIixpWNoVd1LOPVB/N6u9sUTlOWL4oRW5gMxnNKcpdIVUlNTZOKiL2stvlTJr7n8ahV7K2+RX5wCvLb25iZzzfbXOPbaU7A77hqLjKFpY8MTBPOt2GX7mB7wyC2E+S4DPzytMbb8YFqOuaHvmOvHcBxJgVCbT1gXO3499eb/20lqeN4W9RfreJV3iF58j3StzrPPd0s/kvrjunP+DJ+s1zHhGclW84lRMRJnDPDpO9XgVm0l4a4TLuBNvyH81nG2oFGCLyOjiNtC3NMo49IVl0kT9WLAGgQ6a64oOZA74cCaGgnw89F8fT8DIHgzg7OnE8nXC4v+PzzZzx8+YKnhwf0yyUQzIdh3DbrwFj7UNjVAr3IeJZ58xUOgSfXsdbOv1ySDT//C3bje6U/HOi/w8Qi85fT/mzRyvS5LzIbeeORTxBysrAGHZHswNVjJ68nntb5Tu5Y7BEpsLhR6adUbyZaXFic57cE5jf249dJk5R8bQF6ogdh5U7vdKGV3exIbv7cgrpJ30TnQYZMq0GsRCOUTwQjBA/RUSyMVEjGQT2a0P0IoJ+GIW0GdBg5B8J5Mk9l9p8E/65frOFZGLCCjCxSynL7xWwLXHkRljR5t98KacxIo+1rE7M3JQE8pFYx4JXtTC0fXHSYZhiLuOonyKdeB84sTLvncYdS1O1lLUh5TKT6MMDg72y8v5zGELhjW0b4djk1SDvZ9akz0Io8BqUV7Q/2/YO9flQH22DksZXhpO92F7sotJ8B6ZCe93KJAGIOdPFT7a2hnRs01lVcTvvkXpMm/JkAUApV5cdobcjK8GlHePv8O8+U1a95oFCSvadv6gD00kdktEPsImUgz3bRKRyeYBteCr2UsLSER+tfGZ2io6ZxC97S0pXx7pTvSrkOm3VT5l31z9imfs1h/g9WQLsT6weQMujhdt7vkj7Tdw99mz8hGBuYHKyDvv9q+pn4l+2ccFaryY0OOX9COwkOfAHacEb85eH/85i48IWx/373H/ifz76zxgUBYpKscHYyDaVOxc4jzf4wJn8qgwc7T4qR372SWLRKue4yXpnm/bknH5fYEGOfAoh0SG/bBbqvOv3jcJUK3ljsqjZyvixB8FLuuX51Pek0FzL4HqvSfp7qeeX7DKmzV/NmTG7NehAIWTWcKkPvVWcMCl1qnJb3DM48nwMov4uQTQ51mctOcb8XvPXQo+P959GWqMkFNW0yMaWLbgLR9fS4xmAXq7MhorRQbdTjcDYq9s5zDkWa/gwpw+ph7CuoG7eRrM+qKFjdndcdsU5nV14vTe8yTq1JfjhuF06YPT/F4rudPJffB33Nds3wxtfrnR3WEKOZkIt6Gzey6Rzhs0wJ/B/FsP11szRZHGRCWNkAITR2CsRl4c2dyNUq0IUqCFRBbjgi+uJv41XCx/h304c4NYr574LpwO96atrFXXGMe9uKMU8ULgueQiVq+Pceg8vDPMlN/SXSvMkqLqqwtj2+jE1deRp2D4O3y3LEnanVeS5BXy30HmgzxCjIDvx1XNfvZfPLZG+mOvBQ61LM0pIHlV62yeaRKx9XpMj0bOd4nBepy0GLVYiun16OhXLJT7YJE/j284o5yBuAE7q0qZjQiL92ImZj2WSLCzhG14Ereu70wU7kaMHnL/xsajJ6Mr8X/7+kanYJ8XNUlPQWcfBJVkp15o8plkA7R0gYDuy6McDLDnnDclVkPvE+reEJts6yEWbeZYQmrMETeW97LJk4zQe9zafoK6YFAjxbO/f09tnBn/CugOBkzxrk3Kk/DisJ7F0iulHSU1cIDxPq6MHqYFs2Oyz1mc3ADKTUPpXZg1+BfKuVX8prxecM3uvJT5rSBgunEZYRvI4Who19tyiBdYOGwI62jmqa2Cl0que4Mki/5RQylWiCRNnKHZZJl5eVvv3BNKRXdfi/YlJWV34CPE86F+Zl2boYM0PI5bIurStz/G1z7KpmezxsyvV5g76xyOoSpQ3LinHFGzA2i/SOYSDa4akmscFew0l9oEEBadbKgL33MSfVAyOiZeBmwOBrFt2c2h0jIkcD0I8LjuPAewjOd/e4u7vH+e4Ox3Hg888/4/npCdoV7+7f4cdPiofHBzzoI3q3dRaytRbuk6GL4FfZuY2tpGXElAyJ5fnzn52uOfyBWU59awuTgP9Pkv5woP8O05aEv0nzpJEeEzoXapvJQWmHsnr5CkQa9xqZ6Z2iCrUI6/GWTrGxKWmwNLH7afyeYioRC0O1Jp6vlHzT5OXti7o84eF2SPr+M2SRyP77G7KPyZR/83/5Af+uNLBTWNcbfRtsNxOTIdOz0bpEG36yRpC0m85zXxipqyVzY1pn4ycM57kC+F+UBwD+BuhHKvpJh1L++5Sv9GWDi1h0GRZIuQvdJwLhMOQx8mkjkR8br44XqflrCbq/VrhGBD9r7/U5wpSDTxxfSwOUSZ6YZZh194KyPH0OcxdZfjXjrW4lJiT46XMdE30/XR51W35zqiv/dse6eB2eowEPRm/3425vaSegNcgDyEjVgHngVlGP/VJy/+R8lPCBzOIO4JNAegO+yKiq26LtO3OY+6HHLmMSeD9kpZgDL+91C2s98ON0FUsYTDN+aVU4wKcTrG7Bq1nOM2mHAdhsctshXaD9GJOOA+MOpgtsImpLunY39JioTpaiovKQEv4m3tpeUlDn1NMPydnFbrK4E3RBc6d8UBQQ88YVB/rXJIapoGbj4N6dMC/vr7XhLzzU9Hwi3IGg+tlJE4qlY9x/weW+AGCh+QvSrHu36X1meHna598tClxrT+iHAOEEsjv5pB9xknNkY8eMFx2Lfv9x9yfoXbNb0IGT7XTp0Igi+Ff9DIjgQS844WQO+wNdjxFFIuwxpAhl2u1a+dXDIDv8MTvnDUbXUlvNOWA4KqaQybd5RzbZJlum2FNFKWCBQHVzanvTpOvVqIPrFRS+nxbftvaCLF/GtQfnx6yz9Mfv5wUylDvp9sZ1UfuqQyYqt0S6NFhOomTaCTPgglV++ne3jZxmnE7MqIijUR8BeQTkHfxaAD8fUYMM6tSM/SsCIEPzMTBpJxQLxbpC/RNaLCVbxJ3XrsYWeomhaPyo1BLaW1YI5zNl9d3m4dLKjfeFnnRTxPQ+w0vD6XbUzsTUJLyE3sa62+aZw2yxZvlGePKRr6niEg3WHm2vLJ3yZJM+hhrjuPZ10vnX6tu2RxxC8z0/LV3qRC0T5vamlbKn8STD7gscJnCCsclTgM38kvAvgKCleR52mOepMpIjTK0mUOqA0U9q9/5+zH8uL9FBZwuB34ErFMK9SJbgs8wLiGjwVpThcrPIiRDOEx6skuJAj07mRplrY878n2PN76cxZxnPcEvC7XPJ3Ql7N0mHD1KAd1ZuuonHW/XegT7n/tdxrgZNeaNpn7MPqHC0z4F13pqkgdMhyyv+xOK7lunBBJeH9o9nsalat88Lqy3eA3dy+ibeqW1rq5zCxpV6wOY2IedamvUdFXUAZqkfcqHAMzhijMf0fFovyY8GHx8AdhLcqYR7Elw+QYH6TE70HIa3GepyzNfQI7VK0EYGa3qMuRYwxtRIoEoRLwBAEg8+fqNAbiwSak+L7p7sFf/O4xDjpfnpduFEs06rvjnj7U50cQxhOIp0nDZ3O1AqngmjEHTI2aGgMXZWE0C1xbUH1MvS33Sem7yZN4DU4RiSsXhZ6kaFYsqCskWzg3dzI723s7F9GRadddtOQmv5uAJAfeaOXQ/HXLLOsFFZz9o0s8TzGc55Mz2G/PL+l+AMNqlpCvRmG7nF7l639KDAvwH4G24kFobfK13Tiq+lSY6QPGB9ug7bG2SrV6WZvZDVN0L8W0kaO3OAFDxEbDqhqJCeFOd0PCtoTQsUqHqo6Dl7UuUmI50+XeazgvXKutH20aFogHSorcOp2wRtrMl1dGMNk29dIa2jd6C1E3pXNKWDOSro3aHsoYZOIsCpQeXA5RhtnO/ucL67w93dHR6/POPh4TOen56B3vHu/h7y6QxVxcvLCy4A+uHXFU1OdMkvIkCzSC7lGkePehT2i2FvEkXz8P3q6RX2Ht2caPFmPZS3yNL/fOkPB/ofCcAVtqBFgWFHmDERE3n6BGJyPSYrNAEpcjfLaEzq+FLF/GTn3LCv8w47gU+ELG8YXpMxtnZqmS74FLShoUNsUdoWpkWp7rfhixc54j4PP1Vzrcy3pLdM4jIzvtkQEsLYG6u4Flm/LxUwXK+ENvzG9CYMORjLQnSjyao/t8lo0H7yRBhxYo5FyuKQhCK1xUQFgE8KuZyADz9A/vJzjq1n/ojxO+6EhYW3namZ+sOfy3zCtLjybxTDYD/JSd7OjS1C2WkDSuDR/7haST1L+NjyQxjKr9GG1Pq5Oz5xc4+PAiMEz3jGpn5ZHOoWar37aXHKaPVGGOPgcQ8FxLCZcRewkJnqkyo2kGF09tAgdw24O6GdTvE6jTVafID1Zxt/amo/kt0j5GL4GYA24KS5gKcN4qeFzxgnoRzPdrmlikD1sNMC1GrMO3Oi77I/DXCMxgMlkvj1Z7FTlq3Paom6FB/4sJPaRxtjdyjwIsChFgxAoH2Eih2nFF6xaOd7d/uUN1jJYXd6Y5ptjBDkZgHbcGGOKwDA+QJczkRnG5i45zrfRfnulTJe9BcYtt4/AdA/koj4ijp/ibif5YHwCXN/92VtaJaN/9DkTvW68k2my+vJ+Swukh0LizDZhDZOZePk8xaX26xbNWSo3zmuiEAMKR4EeDi+DNluu7nF7vo68GiqrqGJQtuQd9qNpyL0r08idQnhnvoSmfcGuYxX84akCXduBrFYmOvQmj95lJccAAAgAElEQVS+yPycZMo802V03oA2T6Lf0fdNHQ6YAsGvsx7mw+whc3KTyfv7P40njz/V8kt6xAiNzpBOuFcdV6icGtBO+B8//Hmc9Gon/N/Pn8e7LogdF3INIT+M582AnmW6oKqi0xhADd2sRJgCkR9saARjowz1wsqoR3ex52XT7WbFIvQEKliLThGvL6DJ+sladWdYbWM84+UntTpyFqJbsqq1r+/Yxtm8Xb5ezTLR/6YH9JN5oRBxKZynLWXKi4KJnQO6a5JL147ZwcRgKf076KTmmZ0ICYtWGrrWhP8j1IWd7hCk7COdP+NyFkE65WEzW5s7hPKzyIZsxsySdOSIObckcGJ9oGfsbA3eAsZiH5koizihoaWuhmkkE5hxytxgaNb+7uZs8ffULju+S72Eh3UTTGI5yrOsmgjFN2S1BaLMk2TCsHBLuRlkoGMnWxC4yGWQ3KgSznPDbXO8TbhKvO7ojDPa+41O2G7SN3tcrL/e6XQQzlB8Q4rxrPhJILJ65SKAOZ/oJB0TW4pTAPV0ctZtNCDUCBX1urhsLrEQvIs8Kxmp7jo3qQXmHPVZHrxwmKnPkdkhZ9rmmhg/Y07uYceDbaXWGW27DFDfJDVBytGFAgUNEX3N6hmo05o35FXPPqlp1UQA1VkHxB3X8ZscOWNdkPFOv6OvVN9sV5bT026PcPN8kjPHxqP2aGwcWZ3oYz4tROL2/Ub+gnVpGPPaKlVKaH3q51iOWGkwWMVl86SIcp5eUzdczDS7/R3g3DDuXS/t6tnulHslBe3canbuwC34vF6u+JWSgoTd8BtzE/7zvE3Hhn6RcVhBzMHo7x1BXublZud+W6mMPw00tAT8Gz2ifr22pr0hmJmt/6mp2JY7PVn5aNm8s62ONrbBT6Ob/GaaAkaoc3EbwUqQ6huUbIUkwLGvc4TTHVAzoxXhMRzekvaEdt8g2KGtjciQMhhlrAsm/Y9Iema/kgDsXdHQcXSB9Iajj2mq6FjD69Axd/B2oeZrEBwY4ddftOP5csGXhwf89a9/xdPjFzw9PuB0Enz48AE/fLhH14auisenxyHvjmOcZFfYIaGWUUTRxqEjGxtS3mTMx5GpOgC/tbQoh+tZ9fZrqnO2if7zpT8c6L/7VCcTm5kafXdFN/2VmbM7z8ioLzMhoXolPtdAihXEnKhrGtEA4qSiKyvambqybkoGFwKeV9zhac6/COVepAnXuJv6VHz9UtFRJjY7o7YI6wThumV3RUO/CgjwdqfI9TaqIplhegW+a6/mVbOvgKdkKSs/NjGhCdJ4LIA0U/5t6sNKzyUb5rmaxn9QBU7miDh+Qgkd9l90nAT+yQqK0nvMNd/oo/fJShRntWaenF2hEHEY87w5hmQDhZksvO0iQBx/Xs8CoH12LGOqQF0suNXP8c+yuCRmUvmCuw6ghsPXT447rM02Jo+x6d3Dss+TATJng7g1PzF/avJRjN8sKLy/bkw2yGk4z6WdIAo06LgTaJqZiTptzonaZcM5pi4eU4xga8NQ9aJCffGFv/TPDXx0PZa7S9crOOjLDKs7ZgIIB5dxynRp9IbchhWaRAHoHbo+Qw+BvgC4aIaFNkfQGGI/EcuwU/te4fSaSCCLs4E8VkxqH4te1OxHxpa1dErrLHxwPFkh3K0xu96edjudtiQkRAhzGZkCQ3AFG91ZULK7G33z7PQRuHxZn8+67y1ph0aH6TL9nofP76FeXs4n5+k0evwmJ3oRcTvFbplSYCMcb7aIdjz9BJwb5NyGExKC9+dP0Ca4bz8EXfz1eABwwuODQpzOIrSoNy94/248u/g9jzr61d25afwpOMEdiSPsYB+TYAUiTqHLS8smxBPKsiZwIcnrBbVa8JDzu0luUn11oZ/aIB3mON3qzlkvFjivJH3l/UxwoSsEwP1eL5q9sdZxv3l2u92ZI8lqppR3z7Ftk86u8dvF1k2rIwrlybfs+2Gh2lveAc8CVQHIz/b5Dm7Tj6WIU+QTc86rN0j6V8PeGXULtT+6F5bogh+ATxsMXRuhlKf84UhzVTQlX/SqToqsL5w2Cyz5r87Pbw75FUKcHk2mbuRZzYeKx4TF6af2A1A0EVJtjnPH/9iIKBDbEzf4+KIj/GHnXguKnbrvNuM1YRjhg2WTC1jmhuXlTslLFRucZyLt5XexaWqjSdOjWfGstlnK6SbCQk5j5X0RIBwvsXAq3kKys7R0ZoczHT422aeFBqgvZNJb3qSPP8sJrTX8hJfAl9jiqJOIwCTCTI/Nbh7RWu8oK8FbQUfxO+9Cd+e84zNhT34udxyXziFws00+/rFxqPJ0g1QHOs0B8sS/t5sh7EufCLIQnz6OXt87G9/pTnRsvjOM+ysaAkTkaVoEemm/a+x1dZviekS9K4ImxNIsaeuXOJ3rMp/nSP4hmxr4mSb8hQ5iqjSV8XoV5Pxy8Dd4c5zJTC2LsUjfiL9GxZNEtXwhtmaBUr9mh5yjXIDYO9/kHwZTFVIj2zQ7Y+dsK8BMXVNghxat/KXao69p62jwRiWHZNxwpFsuPiHt2pwgCYez2xIikkGO/LfTFXQa07SFPb+DI4HLzKscutvrt2zkx48v6QxvxFsC122GkTV/yxDriH811ikzEW3wupEPmDCvyvIvD0/ARPoxPrU61q5xf7ldpdjkIQ0d2ISJow/wMsvUxX0jSHyoUl02ELqrW4OelvIFLsm8kxyISBDKbXNxe94BKWs+BI+qbd5So9cTtF2QGzG8H9Twg46rHn/CPz7dNPC/tS7j42VMpy8325bE9SSfvifIvyx9DSRXbHbSGj79dvmpLkdTrI5k5NKBtPucfIv+4PrThgSk7l1xOp9sxGELEtxlkxRvcjMAmkC7h29vdhJ9yHdVyQMC2lYlr84iChyKw9WdSuyn7t0vybQ9+3YP0YiuLugQHF3xfFzw5fEBf/vp77g8P+Ll5RE/fvoBHz9+xP3dRwjO+Pnnn/HXv53x8nIxCM2pL5LzNpiKhaba9PU+04N+PauWdyHxf1Mp1nPYrGCynPmryHmmn99X+sOB/jtNr5I6TwZDZgjpczMwxE8jmnTe6QF+yFZzsaCz/HKFThizinJavSysTPXs2qbEQSBj0hZVCBaD6cav5c1iHLBh9o2JJhHru19e/T86rRh4fYxuJqedX1jNSi6Sn/zOJy42AVL/DLqVMF6uLsJEcsqzv08KHOPU7/Cx+GTRY+SStnJDXZChnF7jOf4Zho1P0HIyXSYejAed6giDgHAmdvI8rkGQdKaLTYI9bCyVFZ6YydRGafc1nEaF65soP9r2HYqq7vyhO8gVY1R97qUjnzIPz8ZFNGR5yvMdgTqudxaKCUC7+3ycBiTcutHMYW+DXqyNaJIniYj5W9rCbCl1UDyEUYXt8Iw2rc5RdOTlA6ZDPKXDp5iJPCxsbIesVTt1OFlq0T1JcDHaEcPHONGjdmevZVEBukL8xKSf/nZnuSNjt7g9k5DPRniMAv65b1Sf9lwRnuss+qVlHn98wcY688ZmvH6L4NtUffO9ARcwBqLXOoTxxPiwfxb9+Ab4jgfgbOHYd470XX3fAS1vT+9fz+LpGlyLXPEfflLEmLArID3lQR8yO7CtwHN/wL18xNhg6K6SHMOZHUUUj090glEA4Ckd41FgTIL9Pl6HW6VjnHLCeC+IyaKzjnifGszJPQ38m+yYWV4yXJxF17p2MvstSejLNUfE9vHL+ihE9iIQ9vV2umdcngAo3r//FI8eH/zk+b54pnfBlzYqBJA/FSxEGN5ye+4LJ74Bozi/NzLBde6iB0mflXeuY91RfnZFDNcXw2YwesNwpI9F6CHf/Y48F1dNZWwuw2S2WHtsxkxrzQDo9OrWNhH+mIqmjcXY5veLCVFrmESZYClQAHobbW5JeFv1LUG9ILL+mN9NeUI8wFminhodjvmNfJjBmOv2QX4NF7dkMP+cht6hz1C0G2WzDOp8HnlKbIZI/QsLTWaOzbpcZi/fPZcgaHD9nMQbZNoLlzSaJ9vXdqEYmz1LnQSH5OdU/f53ESk69UEB+p4bAagCzRxCHXSIZiflDYoh4CqMheeFuXzuU/KEQNDsuqO1jBRZMcuC+KV7Xt/Lkjf0CwgCLHLK5n4CjZNdQYWz+n1TI2saw5AMNt9/Hno8fr7ekPo8fUxr4DMRntpul1IKr1f+chnL5RdIFmJGqjOfdzpcZhTNG4xTpBCR+Rx8S6R8YCXLuYyI/XfuUPcJm+nwggZpVeQarIkrnwFSx0q6YbzpLssk0TZOyoGmgbfZRzm6oTkWanYlOSyX/AsIdEoYNLZLV/Z94xDtvgFl50T31MgsrWswo6BSfqaZAXuDeIjiFHio6wgFOWYyzbp11FZGnx34ZDsX/p49dZgu0YnXV46Ps8yNiG5I/dc5zzRq3+KcYZTwdVLX6LQIBsLprbXXYHAvokUH5XNqumPsAw22JcLugnGs1RVmm/COX/ku9G8U7Jy2vM91M3Funl1LtDa5scJ+E0ntn2vTRs8j5feO/xRF0NlHysiMdKXo6DKiSsaSq33GOY2C3nR4xxUq8a5YBLkZxN95Bzn7xj6J9dMOAH1EVjtcLumg+5NHF6H+Ahbd0jaV2Fyw9Y7eG9rJ5wrj5PjRo9i4UU4AbQ3tfMbROx4eH8dZA1Wcm+B8Bt69f48//fnPOOkdjovi7nzGya9iNfhbXM1aI2nGeQTXAci5QWx+nTYfJZ5+PS5+LYWPj2UVv8fuuRsI39DgrynC/oHpDwf6H+lt6dqqC4AIvCbzyW03/GUqM/7YnvJUZXtODKoNT8/sbp3IXzXRBCdrEg9iwlMYyYlGAYq5/Su5/hfsyll29IRhRkabgzTbtqWi6fO7pRtWAU2A9yiYy96ir8nQ59cLXUr52PZ5IUefiJDBXOqyRdSyELLTNblQvCVD+6VBeUbtdwrgGOGZvji5ucGhFNeSarzlPA/wZcUP0ZBPlkTEdtEp8av1zicEOtUpAjoWcsV5jimvPyc6jhk+GSUT+tcB2/SXVjq106TanosA6Bq7AqPNuMPcQ8MqjrKy63m4zAa2cJ5TP3Z4j37PC2UjhV/cNySc7HRpQziM0ZOCmMxjJ/uW6DXAyP0R0dhou0hfCasqqjRG7rZo0elZzBJ48uj4yO3nhj/6HXhrJaxXThJcB1ThFguyttwrqhZdQAD0CK0UE9aL90EIycgVjWleEG3m3op4tgVxmyTRW/K4/HYdSdvuGQ6/zv6M1Rd3Q/R+VeKjTPoO0e9bvFcesW6dJk7cbwVwVgAPwOUD4uS5fkBOuuZT3Ndg3nV+1pXTaz4e2okuZiYs5QjOFYjb7e+yX5PVMn0/SX5vDdIazvIxdkF3eRgRKLraiXmBvNxD9IznywX9NO4Re9Sf8af3f4IvlL67O+P5aQfpmJw2WFhlsUW99n70v/CHIC9o7RBzmnsY3BK+mRf/XN75ZDJYepaTr6PST61qtLPmgLa1YGlkbdplR6S2y8QDNsUhnAXDteRNNCBCt7+WQr21dOguGW58yrP98tPrHOac6lPg/3z/Z7R2wpMeJsY1o3eErtVBV0LFo8lZp08wusxRu9hXxyIhi4px2aPhsXfwabmhlrrR0mFlFdAD6ne1StYUOgNksszYi0VrPinqNNbCgZniLvXS7AZTfs22FHybR4PKFLSjQFmhCwfOTZl/i96XKiutXpNNm0qS3VzfX8vLOo4+dZzM4AgSIhl+MdlfCHcDf8vG6lt9k5meKN+tvhqcMWJip67jRBjo5GDWNcZc6PfU/41IGD0bZcprugKJqccX5urhuRw8nsZUR3c6zWGfY3FViEVHwSaKTvp1Jo0IK25EHjjCuAey2d3FEeFBADSNkJzMQzNZx2/FQjbuWubnOVNXCD7aAudDqYzvzGZY+ZM57zXRzWRZpqJSem0LzVSZ4bk1X4jl/lcYop9MwBMxhzO2SKtEGG+oABWfk5vpq/mUfADq2WgbKI6OTeW5sWI2rCtfqLe1MCvVU8K2X+lIgQ1kH1BfbJqxHCi1jDXK3ypUHOJafpLVAHiBnX1vEZKWZcYMf6lJbHo0KwuSCrzWBqBsXg1mkxyv5pt1nX6o7dJ/JfwRcApCoMllQ3oMuc29/NRiCW8b+RIJ15a5+AHfM15hLtyLsEtIatYT65ttLkx+qoVnlvvLGfbIL2H7bu9Ez2Y2bVHYdvhJddewduKcy2k9gS6tpSwocCe8JRy8kl1DwCiNqR8uQuSby/mbfKKBF1PkLiCLCTYxnQaSbhPBvOuFZcVOXjOgIjbfy7lNGhoc7VBp0wMMA2zfzwLYcOV87u3NEfT8HuR5R4bqmOf1Sbh3AU4HRE6Djk+MJ0sPrymp751eEbrXUjW/67Pl0Rsz37Cn/PE3Qlub+YXlk29SWSyypORX2lhl0tdJjQqo0mY2o71Btxr1dxnhzoFx+tojQontfc/KEtjZxTsHaSk6p0jROm7a+5grLTyqcZhEzYmuJ7FDMyHcgGYHmwgAv3IOXdFbh3RB7wLpXnxEtVNzoEMxrsoQO90OgZxOuKji8ekZ2jsulxd8+uEDPp0/4O79e3z604/QJ+Dl8YJzO6O104gopBjrrnA7ZVXe6tf8khr2iI1CuJzT1+wV+UentFtRlaxO4LkcN5pLmf9KAzJ9cfPlt9D5X5D+cKD/kZK4+ZOtvXjuAoQehkMtDbuyq7YYM/43vvgd6OqCSWC7jMjKhJUXej4Z8NvkEm15vebX6Z0tB0D9tNVbd9mU/oGMnu8kJKoF+/rzLXBfmQLFrzRwterdC5m+z+Mk17N/bboFFxv1RON5gsM2hBR6HhMaP+837yDnNOyGTotcfIeNWRY/fgRevgDvFPhZaaJsRnNc7FJqXTs4gzE5sxT1jj6vv9675eVgEyZfICcGlmZ/SFkgQs5zc/rC8jXJ/K3ikkOFLX2Iif9rdCcTLDCDKtuI1EjecIrMNib8e2ZhXjTeyRY5QU5XFrNFzMnroA7clW6r3btueG7hPHeqGRO7/DMcafH0UvKQqQ4vO92rhc4xOZKsJmNJAbhBG2WpzXn1o9Bt8sEiu4eFTHmynIv8MTbksBAAOCAYd8P1ftibDvWtqJcOOUZ7Os8Kmk1iDwH0qGO9oTsphWkyvws7dzN9pUA7MKPkH5xI3hT+sdnXO6PvJ8q/k6VTlUXW78TYrhzvXTke1nF5bUX1F6cP0+/dpH73+BHZXwHwcV/9a+qR21WkjG7d6GJINI774M4KBfDTw98xtnsPHpC4VHs+JeJTKAzZL2KnIT7Ar7IYs8lHIw8fcwoz1zTvyI5xXndfBy/fSiYfd+JfA1CiNy0vVhzu6PkaIZY7Um/AOXsnikdFV/N0S6s3bNi1wa96PDcjcl8eZRBZHy+lLmtZ4B11aNEDw6HnbqyKp0ECFC2KlWbgzctu7rkhH/zYXMV600Ncan6PmK19GTJBQxOn/6q+x9SC9VC+A1CmHVm2RV2hTcks8HLeVaYmQIoJkdhhnZtvSpjEnb1xgz51+SVrHWvX9+QkU1vz7/IclawnuhdEzADCoUaxAKIU8/e3+uD06/jawLiaF+tgAHkHow9kI+hkkmGVOEgiEqwCRLSGpVe13xGtSTP4TSkZ4lWymzaXhozw9SLUB1Beoj+xfjK4LfKniJ3PI7lNmHWOv7/rywjDzixeQY4HMRVgkQnbDumh5rXCzLzT/HcUlnBiZztT35kpCbrcYIBb7BRFnFdXHp4y8jPT0yJS9vI5vB6qujjXkW25oyk3JmRfl/4uTvQtRxc435LKqXDQaVlJmueIBNlvnib471nQRvavTBPWjTeLz5Z4erU9HF690ng+8xGoknI36llAvGECkOnsOrk1es/ENsEogoiuFfAhGczX2urbpR4++Ry/Lc+8GWiQI911zv1QIO8Jz1ZXR/Qs1EB5jCPI8VRpL6cBxT6h33lSsJVy0YOoLvuWju8rUWnW3pb2nTsXJzoVDVb2fMi1l1E+Q6j7b8Z74WXi711QYK7P+3rNss06bI1C1jFjXspDRdw25W+CEp5upjf7J/FcT75v0wz0krR+p0WKWBHSOS89n+t2+lyJYG0rbI8rgDKt6/Tb70GPpoQyGH/PAH4U4Mtryuq3l6r43SD9pqqSmWitmg2d/pbTKwCyvMuspNReqUABv5TRdDPcn1vsBGustgGeJTEdbjl4ebr2wcr7WraL4y4DSneiy5iH9uNAE8GhMvZ6SV5LqSpAH/upD3PLNLb1SWiPIrbds53QzmPJRLXjgOK5X8aBoXPDBR1Pxwv0RXF5egGguLs74Xw+4XQ6Dfxp1UeqfVlPL3MTt/VpAukn6Vk8/NZolcXXV5tiv8P0hwP9jzQSW4z8jCebGyM+pnG82DBPLXk2zbN3/+J60IuEgUGWhsvxshtxbwjXuRnXP8PGofVYEI/fHoKjKJOtMcV9uyF2ZuV1JW3vkihHZ9gSuwLPqIgbflPbtTx/kdvFr/VbgaSLpdBUL4/DV7TNBeZ8N8eDxtzotITV4zGlsV2c55s2EnVkqAdp+m5BBe4FOBR4NOehK9Y/YzhI/joZmf9mn3/3iVWdpDjNLxRBfU3TbN79LMR7gKCNiXLh1UZ8QafNm1C4cYpP1Zqhzk/OwYwlw8MMH/WlPp/ez0fJeuVfdxrHnhtHVfOxo+T3Yofg8IncZEXMoBSQxNAjaKdc8It0xfEn7kRw8PsF0t0YayOSbcM4OS9+6q7bSXrBcBi4yUxGmw3k2NnqUk6reJ4mk3mtwKDxMiQasYrs/eqoGC9oXGLndJ/aTPhmfSHspMlKk2ZDpAnQjf4sDH/vx1g01j54qnfgYn+qtIDmOsgqOyHvvua5KoVuF8bXMpYF1Le8uC7PdvS2Kf5my7vcv3ar4a+A67kD9w14J/hvdz/G63c4LcUu0gPUvx1PeHi+dqL7jektK6y7LP2tCPP0Wkj2zeR/B0fA8pA/2KRouWELpw8QAOd2CpF7Pt2jtYaX/pwcrcYHqhhhHccbp9Rxrd6QD0OMJQ049+7mv+R+SFMHz/bD+qvjNO6I3DCYJUSQ2rQ9TnZI0F2wDMew9PbLb/GGBzTTeI/Jq6IeyRKUI5fLlm9uJPV4XF620MsiIKd3Xh+VdV+wSHm9lC42xKbJ+P2cMDgqbWPDu1Nu6niUn9/E1iM9x7chFu4zBB0Unz78EGGYocAjhi5CE4seoSP6iWrq/7ckR7c67h1Y28xh4QtGP6bxEAw6p/FVo3voAXceaFH0HlUGIfM81LNXGSqc6Gs3bH49n2UmP0vWBVie5rY7O/yGnuS789iBxurI22DzQm/Kuw0TX8lRfmVjU9HU/YBW3Fh/0l7b6zMhRakG/6CXcUKkSUNsH6WTpewkcFgcN2sfXuEdl1c+j3Nbl3kJtPC/q64QCUJsuNmeYdmnfkvdHMC4Hvtgt2cgQx5IM7Fq0YZiS6N6z/10soTzMk53m+wU6eUUt9NUOFxFSqAkPqUNEZwKn3BFyHqM16gJjDsiUTbKBsW08T1O6TN+HSZILIguTmDHmiDuOp91w3jud6LzSXSrQeJbbRxj44AAvNfsalpZUug/T0mnOb30Pvg4ZIUy1eagS3mWYyHv7M2zvW1VFq9O9LwmaAq8DJ8dXOnt9OlUaI98+mJ8LurrQS4L15pJRNRqDRec1E9wXh2PYGgrYNIr7sCW4Fk/W7uWt7HSWR7MdCI0qrv3r/TV+jdwlxuBb+8Rl/KxPh+f81rEImNoIR+YgaoN+J3dmdyA05DHMnZ0A9rtdw7k0JFKRT3MMMOHimd/rztne4WUT4nPsC/J9dbVeZnDRSfcufKlLS/PodupTra1uSzpDpff4TRnx73pxwqL40cr3pxsMWQ4O6DDeV76uiE04Tfu4InGoz9pY06NBxC0IXcpX6ViyFfTIdl69qcUiCYTD4T4CbEY837e9An+zngQAmiDGuet2EBMsFyVW5S3JHvWrQ92WfMImKSxfjWWPxrUN0gDqU95DnvtFPoCF3KY/plJ6QvxegjImazmdI2M/5F9+471Xt2fdSVjiQZiNJrXqOCmyHM7t0PQdByhyQNSqPvDvU222aGAChrcee38Sfxulqm4AbDozgoRR1EQgW22t9fN5pMqUDkG3Cegu9e/Ia5lGX54HXtO+sCJRKQ4aryZvkMby9OnBsiBflFcVCGXAxft6E3wdLng58dHtEdFf7pAIHh//x7Pzy94Pr/gpV/GeiKqTCBLKPoe4mSWE/FpOGS6/S3wJ7DIDuXnJOd+j3edX0t/ONB/z+ktAv1avjIRvlaRTF8Fs6ArQmhWnmbYLts42VhaylD9r/QvdbrmPRWaur0KP9kaluO9xN9+51hBwrelWShfm//8y8g2SRry37tJHwCaFXzX5qMNG192njN5AYhdyW5QKFc07XSOqbFNHuc+qRPajz8A+vNwKvw89a8r6vEQSj+5AnaLaNe9damgsErOaG2SSJMno1l3YOhcgciYQDcZ943GHd3mPD+dMJazLLyv3cdTEOs92zwPvM7Al9fXLG6fZKXR5aSG3hChj1xuNUmnaTn2dq0tAm8mV2A40Ftbwd8MY8wjfaF3AAlpHb7go3aRn3pIJlF08Xu8PTqG1TQqK4vYM9whhq3dYQiyjPWxn9hz6qnAQ6omvURHl0mQlH8pPkCErRo96JFjxlLKZqv/0MFyxxg/PQ5AL+MguSrwYltVuznTBRHKLSpr3lGSL76AemA4Nw8C4y2WbiGVW3lzIrI89nTQ9+8p+0p772i8nvL5Bwst/bgh8q8CKPsoAD7c/xcAwKH3ABTP/eekPV/IPwgJV67T+37JHOUR8tsFv76ti28wfW4/l+XbtSsNPV1eDrtH7wSB2m0ZDxC5QOSTxXEwLvNFF9+YkrEGy0eFRzHu2yZ54fQvOmQ+7KSKajhHtLs31iL3eHg2Sls22rBBbOZ6Ncn06fVpfS4h5Dc0/FajyZWJfWe5IWbSFa0AACAASURBVMB0tDAFqILk4t2mOX/wjDeHdJ+78Aawo6kGQO/zZegD/2dkjAXiWPxQMr0nPR5tSfbdso2SjfztP2wAY0VdFY90QIQirITp0gA9wS+7HeAeQNkFpXk1QbQWhsww5WHhE+GOg+xRE6VrqQA/Eb5QnZ1Q5jeJhlG+oNdwFVKHHBaz/lupMxCwvHl7msve4oFX+KQKCXpObbABtBU9b9Ctt0Bb2p1sQhubarmL7QG63m5O7Zye3X5gSgpLLsp50Ch2QHuxKgOZ+cKEs3zV3sw9AZInxcXu1LY63HFVncXJafGX7FnM2xlrzIrM9iHeSMzK0e23RGVCFdBUiypNZ3hDyxNFwLC/lGHOzfqzqI36Z6Ct3IiqwhjhklORkNlY04ZtZmrLdqn9CGtqjvYYp5R7sWFMEldS6pKAqUhNogd/yjJ6he0ar01yR+cnDj3M9zGAVNtMUpz26p976cV0dFPy8HxxqUtQHIycp2nAoIpx3Q2qhOY+O6jZBMsu+036PnGzyrhyWlrzN59sLnR4dXcAjbLMz7Sgtq5XeH7bzOilGjt955Pb2fdrp7q9gbAtF37aJS3d4MelbWqnOC6j4IzbqY2SZuHAdChQmfPmXCxguNqfPcXOJ9/nTSQ78HI5kcK3YzilFAppvMnL5J7P1wmK2FylFbJ1ZPa9yt7TWBNBKJAnWOf+QmLePnUqlRnRztI2oXORv/Y9Ngfs3i8Vatrb24yv2xhfHVZ4NsU4Wh8EED5skJnF7kInlq51ebmiNAm2HwT4/A0206+aNjRXCJfteUbEK5phopGl7v8MKcbe+Ue36PQU9q2k7ciYDN1Hm5tCV0S0n7zKsQ9Xdsj7Hbq/jr9IQDl/qpYivavN9RraqVv380CWKoAOHJduNvZ47vu53D5p8c27OLZQ+ybWQxVPxwVfnp4gP/+EFxz4pO/xvt/h3f09/u3HH3H0Ay+XC/RJcVyOcUXRqVmEUMOJj8lXkG5gg8v81pPj+pud5/9KnX17+sOB/ntPt63fN+TLCUguXLiTUDhLec/FFQB4d6xqWmzluf+zAYaUwDrZIIvVpdvEx141K4os41W4spkKW99jh7nXORvvYQgtLb8txSzpX0gIxSTrypgtGw5kylDfro7WTbE539UykmOHnHDsnL0BhWKagLGxnHCkP3JytjOF3X0GntVOd3nllu/8CXj5CQt9/G1jRBWjmyaEhN85m+eN0zmTE91HJb+h1hknzz1Uu13hcGq28HUaZemEZTjjJQ06xtnCr4yzedtk8LotPPvh11hA8VPcJkfaKDN8O5K7et3Zw/3jtmnRZHYc7KhqoIOdcX6CKJ3AmAzS8chO4LSGBhm+X+u3SocYjB7EfdwuoYkbGvKSWISS+CUqiXpz8omBE79vTfN9nFIvRmJLuSjzuxy34LGFhMdCaTdjdJDYQLjfZz9SJ4NbgOMAWoMegnEM9oCqjBPnvQ/8+OnzDpqtO5wEyNmGuslYczohHdg8UEKdk9LRmqKDV2TXIAr64X9vUMisQrl5vv/watq0cSP7f/zp3+L7/z6+xPeTnAAB/mbPBIKnfsH/cffn16B/PZ0kneh39Nz72jfPbgzFknQTTn3RH2+sC0C5u911CkfIcHHgd5sDaO0jIEDD2Fx0uXxO8Kj5lZ+NTsbsbbxX17DGW8UOId0UodVXROWj5EHmXPWGTKYPs2ZsPJSu0DjKrHk6vbmy1OhX2EOb8cqrTq4k3eWZdHQAvbthemO38ZetXbXTCbOONeD49KT2Me6uCw4F5LyCXOTkHe7fD0X2/ETh1uXZ5P3A/U+ffyK5ZQ73gza/cLdY5PjitBMYyaNw3gCVPkwulzCd7oxyvXCtTaEQpEV3ypSZ3sdnoyx9RBsJq8F1nmIc4elwfaVdEaehZGjaElXIF7dj/NRiOETshoBvoEoCfiHYxTLw3ZZS/zFYT1aPxpMM05z0Mjio0uxk8Wxw91oqymH7XEMPaXkf2lp0KlFTZSHBvLgP6uPYqIkInAMgT9hHZ4kXxaM8bVovakzKRzyNucUVvWp3FPpp71r5JnkVJRgP2XV2qjQ2bnpNwRMznBvaFzNJVyMpcBNs2objNEJ/x92z01UF7tBkUGBRETaYqdKVZASJwhAfggy1Lnk6vGBQsnza0+k4d1uvKcmgaENIp9HGAUy4AMBRKkQ+2tMvlI/mIlf6PJPjrSTUL9GKq/o+x1bgslNK+YDNcQKUv4BqFtEyNjMXGUdtg8v6iyDK8eFOPO50quhQFvlb1r5mwwZb7EUmhNLUoXSJ8HNNroVT864+L/bAM6DN5gvWAXfxtTamBI4Dds7uWyTZrNYPJfTBY5xVecX98rYG4kz3+p3HkvgtEHB/ZvnGlKCclQgpnCxi/fTIA43wRbaAVRZTG4e99EXzRN+YqIGEHk031PCZttAE9vaZah+lFHHf7AhiJFCPEsRFr5BeImZqxHhKy2NipDj1PkakbPxY1tyYx6S+2vS1bD5goWkFpUnwn0fWUS/nNklkn+w30rVCnz72FS22OVD3ZSJin/eZYM6hTkrNUMSzpgeU2klHNmp+q4s3ZlReiu4hMlwTznyXudvegNFq5l83ZtRUlgwd1NU02ibvZqwROQ+53GKW5jo91rbUEREVi2jkdfE6lWW7GcKdmZk692uuHUuVrYl3giHW+JmuiTKLs9feEW04va/XCNwSEm8E/xfXcDvNImZ9gR1zb9OwOzX1DZzMMq7k4ON9DBYHwg+o6ESo7pyXGZgQDivIUl5pHWNVi0BletVHsFuETb+e8tyirhhhHddc6gXk4k+5mku241nYF3043X2DwMvR8Xh5Ab58wUu/4HSnuD+fcH9/j9P5hOfLC56envD88jLqE8GpndBbR1ePBsp2VULJG4N26VfkwjenLefMNHgjlY2D4AN5+HXlzq+Y/nCg/5Gup2Xha8nwNZW98t4VKTPdPJnwmdm1ul7RMluY9HX5MC1cpE5whTUZrLG6aJ9fMyu/BeoK+r9EGvOGdVwyPKX4tGuyJghv39uaobb5Mx9XQ4RMgivJgAzHrht+TANk5P34A/D8Je8VnuvSn7+70tnu3mZnwDUHgk6/569+6aE50fPEeS7qCPFIGmebev0E2M2uCw2byQS+czYcRRK2ebY7QvkAQosCY3LiYRzHnMtPu2iytwC75RY23kc/OVwiQhR46FtdupeGZRNzkdtwqHZboOxZn+NP3DkQPxHBznlCyhj2xTk3Yt3MVp9sutkNdHSonuykKYYzu/SZZfPOyufJjy8025KW5uTHLOjVcAujW7NPCoywgWNAtPvVB3wH7jEWeQ4Lg6ZAhG8UmlGrVcoigNm8Yb1+LPCqa3e/JhV9QQTBNuj3SLyAyfX70XpRQHdm4DOA+83z2+n/evnraG4OmR6D91hxqQrc3UDiL9Vz4Sy/Fm56JxPf2OZOJ39Ffv55d/cDLn3Q5vPl73CGeO6CJg24OA9YtJyTlbYDt+IbQOQBojal1I8bkb5fYMg7f5/yjT3Le5inMqY7Ym3nsIgZRx8y8LBNOHYvtZ/yLRunnP3egvNQpQmHls0i9eQdQNFeuIKCh69IpakJ4N2MOS6ie0OdVFwwPfM+lUWmN8Lp4KmFQb+WAcCf2ztABAfGieyfnh5J593ZNS2mO7lz2mgQPQ2ZIsIL7LNtN+sPYL1TPRQvG972Skh2jkXbsfBsZXwTg4ke13+DKBqk2YKQjhDOdRE94ZRprPlUbe0Z/wvStXVD8Tgx7Hnpc7J9B1uRvvpqZZO682ba0BRxacmw2C2y4S23d640lZkQps/tvBve+gYeqOQ3wf0tesZtlCIbpXyM70Kf1F67Ua5scso8Yv9KI8e5O0+b05IvOhIGnY+Va5rAbALZTEd80TTaLjWkKIwu2dvlBH10V+x3Os95E0DFiNiUQLJt4iswnTKaGX65BnkWG47tiq+iOmacvEJ/AVusD4BgRmkr8jtO4Bts8i+uhigKEwjn+eSsmO9+Hl81+8ZDI8AInwp6IVQ++T/1K7Xmqik2JzEcsx3I+JmaKuWmny5DiTiKswoygreYTSnPFLrdcOP7ZEo9xCUCxo33d+JP74PjbAN6Zich6BWTyPRT/OW0N+kBDuW9VC/OXxPR7+DdgTdV/Gbxp9zGNOZu3/FC+mSveZlaYYK+9nXtx0pjUXHIBoMkHofDlp6XKib9fxXx35IkoS72qtT3BgiKvp+yK3jsvwIEEVxzHN+CWyFxJ3pe9ZHwjW9+BU9GLcp1MIP6l+AyUKLrs7yrYbR1TE7mV8eRrQ8ekD2N5qPdnGKmVZPVHrbdbR5Fms9qn01HPu+nCooyDuE0wfMvehd6JAVy7Y7kyDy/+pY6X5GB/9T0HYcsRL/RYqgvtWib6gd2RqyIEuUHnrmClqLQdJbpmpSQ+6uIbiYa62HrjYdFJsYGHwsRH3hK2lDVsb4kinYIFA2iYw1Y7TrOJm3sGSP7WGXEIlObWQUrWiTVdjrh7nzG3f095NTw8PSIn798wenhCzxCSDspWm9ovY25mfLWaJfNyANT/6ppFvV/pG36XTvQ/2m0QQb6mt5gAM+Av0XXfE1nl0mSbH4DsMUqngTXXbmvNkLK7isT2SxuU7CdXoJlhTYQ6hvVo1ldnVKs4MYPoU+fFMO+F5uKDbivUDgzSqZJH83i6mdxxshUj9K/b234xqtb3ZlnpXPBxVE+n1zYTDSAxOW1ieJrKxtcJBY2ZPu8BvJi+n9rUuL1CXnnzxlS+n9NzSiAvyAJuwK31lVbnAwbe7IF3UwhSZOotDhPiG0sVYSc5vZpjmNxecD44tWgpaOo+YJP7R3f/yRAnkxz+eEMPE2uvAPuRPfJzNJOCweRn+YZvXbaQJDrambOv93IdBi1zJl83rStxozVLn6rMTm3gbEvvchJjYPfcb8qoSJ4aZKJ8ZPxxTLQT0hgnIlTd35BhqFb47hlA46oZV5pX9TrpOfqGMnxF3gfshMxMXAkeh50xKnPPsI96aHDqXhoDQWu0TohxZWGJr+7v6Lr+DubLLA6o+TsmPbvwj84sR7YpLmc0IDOjcQp/wnf35rkQm1aXc8K4An/7/P/Q/W/x7v3FGJagXM749IvyGnEJs20VhsHXuzFrvDutHnAw2l34rgAsSu0ppnHgo4fa7VieYu/T+gubGq2MCS/G2Opy4TWCqpNMpXk27T7Ju7nM1Yqjit9HI2pRQkBRQphgylQk/JfXG8zTQSOGnyzo2gHOiBNEXeKK9mBXcbpYZfBJsvL/ZFFZiRM1xY6Q+4o4Pvi57GlnkRef1KeM49F+wRQm4ku8cFLtYy//K4UxYIXlhOSDdD1e+mWQ/9M5d+Vd7do3BfcRe4tGxMrLcpayBItJ3sAERu3kOvdFi5ACy6Y9KtALIh6PZXm762uRvDIlM82aIx78nqUleivfWuHnVTHKCAyNpOIny53GmwpQwlvqaGiI8M28HmO43ki2nljQtKYh4S3a104F+vOfBgoGQs+iKArt8b1plTb2d6kU6ozib82x0A8GTYR9bWQc+ottyejDyIjioEout1b2P0dkmTS2kHeqLHr5RxpZdG5Ng7zxjThU3Zr/iKz/QvZrvGYskddsxwL/p3w73LV6ZwNyyss7PQwig4btYlALFoRO41cLomgODyYY7hObk4EI2JUwCKBaj657RtICmXYgqiTcaUdJbZuKRrakA3uCB3NV5iSt6XCLDP0mngosP1gsH+xfqWNT7UHAqI23d19XJMsY6elDh5mIOdg5TerGnHnuRSy8I1BS9sA5B0GXb/MsrX2MJ/PdpYtLqOSMHWqfJ+3N4RYFz/hShVR8QDJ9anSi52NMYMggNxfyTM5XkQBfYexiP1k5pHNVUfgEp9L+PpV8rGq1CZk5hqCy5ul79FP9+vxPoZYG6r9Zc5yQOJQpvpY1zFV0eRvabFR0HnT50o5n6V2fSylnhIT7wyTNeEUwqWVYFPS+953d+SsAyZRPuEYbSn1eebB7SggNmTD9TQ9t8rmZTDfSBQUHW3dcqJf4a/YtEfh27kesj0cX8r18Iby5nzYrPxkI9Kax/XT1K8ILcpVeb7qCrdV82C0cGYEvSKjYF2XHU6TWvqwQuPdzFDUGxGU3/tmt9epjahzQDqoDcDop7jEq0S9sci38FXYNT+72fgsD6ZK1cpLnCxneydlY/BrWW9pGAsRVBmvcawCPPNdw+M/OO2bYpmBlbZW4tzXEsJibo0GAJjG6xU43d7hcosMu+UcZf046e1NIVOdYbd4ubD5S99qf2k7JRhpboqkpM633XPQXEwmPFfzYcKpztjN59l9hmEnkdTknskD4xsR24Df1eZssHUFkJyFLTOMysc+FCJw75qYq9yiQp2AceI9/gRyOuF8OuPudIe78z3O5zvc3d3h44cPuHt3j7///e+4v7sbzniMjc+AoLUTWuvQo2M+J7IisShyhMO96JZN8Q3errK2i4ktv9wSoFODMYaTwiQNcQ3im3x+I63a9VuF0y8QakWnvUHwUJ7ftQN9m95mf3zftA09zoJ4TrNCv5LtWpp3t0dzxuz8Z4taCl8UtQVYodDNJ1+gJWN9VojlB/25IaFqu/BgoT8V4/JDWFsmgLZh3ZEynJUeCfDxU6AR6xlDEmuHdknHiRJscbTKlBpydzimrIDPGzaWWJ1JU2IDTjeMzFll8r4xArx+e74N0ToJxbfsCC30OIu6uS87oTPGatw9IsurWsWMN03NPpHrV6XtKkhVTwUthbTU6MVpFYljwnlMcIs1RILYHCGu2PHjD8DL52EsvFD/rvExDW0a1pJl+JmfJHAYJI0qQUPcGxPF7XvZBTjI4zDnabEuxfnf/pqFbG/NTsVgLFyYj2WQtU+ydHMyyXAU4/QKnQWNTzjiSluPhW8XGSOUq79Pr1eeUNSpOjY+x2Q/hkd1M0zDjLWbyolsK/HK9nnSwAGg40RjaDJVzVmFVTtU+h1jriZTXWZ3BeQAxMK+i8tzC1/XXf7omVrI2odMJ9qed5gbMB5Zd1mZByK0aS5ja+QTKFo/ZZ1ehyIi9Da1k1Ueyb0rVPvYjXockGOEAdUu4z7m3lAnAKB2+bvLTJbHRB/UxWVdo8hI7q8Dvklc5k07868IBo7WAtBOdy/jsH+t0Lyenh43oaLBtEDJcXyyT32c3gELAb813bobXT9gxddrOJiAEH62G8udPt/IJdEM4609Toz3l59HvXwKkeuzo3z9xR2BCJnL8r2rQntHv1yG3D0E2k5jt7WcADnborXZU6WrKUX88IOEPjP912jhqfTzBEXPLus4dS597OyOkON+DzqxnPrmlHjGvNOSFScRCbXqGj3smoomakl+EVHbQBmIxTxILtsUJj9Bf4tacoL11bm0D+t7g0bd3jytdQU601v4/HQglNYEJQWMy0oO46nT/Sh3vCz9AwzFtnlCHQ8C6Mk3VNi5VRX85fgCQNAv1pemwPkCwTh9PpxXHYIT3O0eIh8N0DauMRFbupBxQiBELvxuR998+wWQ9waX4VPss43F5Iujm3oXZ0oVZt+exiKMNkiEdR8bvzwEsOvzUd5izcgAPq53GavZo2/tRDYh6wkHJmVw1g94xJNxRcMpfCedaCNp1Z7IcIxodNLsqCvye7vveNJNeu2d656wMSS+j49102VssUgAqcej1z4mHTr7a2DkZTag8xvI1pqUAX1tZQySP5z9/ZURAz9ADqCNe1mU9jLUnHUybZ4R8SbNfHc62vyAYYPJz7KABiBsn7XdYszBwdfILLYI2KSNIBDNv7eoeuyjUm6KxFJzay/GNUw5ate/BjhCz4LGJ6KjE0MQwWUySRIeowzTLxK0lo53jwA1DU4uQrMjUZBj4v0KXjYqluGgH82eqO7JGb8RzBneGldTccQXpwxnGvzB0QIIedH+Saj/3F2n93xMRZNfeqx7+Bg6HG0uZFDm9x3YC1Fes0HdrBDKM8uZ8lWWx9tm5wf3+/fE1iHbA1Ijl9gTJ06u40XH8MEN/QArbaFwqYXiLplEh7ic9pdi8jr4WybUSZyIL3LX4aKxzy3tQk07T9jGE0nnbObJyAflHnGCwdXYfJp5MU0EuXmd2hnvhDbUXakgHnonk9hqJCF2QIOc81icxKtldCNNzm7Ab3OrmwJKfbMT/Wb9SDxyH+hakBiBprlBI3jb+t4GfBKbIYZc8FDpNZrHMIayHtZ3e5w5LpxeXfVM5oJZLcCJqA+wKXiZ/Ka8U+sb+brWKedEJvOVEW43KNGG2+1jn3HNPyKcjehWAae/PzVnbCM9qXMG70ZRgBOAQKWNCjwCsGv5vZjEP7WujjEX9KviBEAbtmssMhitaJPRH5afXt+z5F3oCuQC00R8N5nkSocXR9qtzr7CJ1zvIjA0x4Nft7ZtRvgTJIO837GpXGpB/gw7IZ+F7FRAdmt8oT9A+SfYDLjTNE5FTlIfQ4fY2u2Qfbnh2KYiIYdbzA9oK5uxgujQLV0VR0uegoo5egfSOuG82QYePwsAGfblakMPonU/0CiT9n7gRG2OvqDGtZfTlDlculj0r8Hz5w74fSty6gAuA9STAH2sMZ/MLyUqaP2EhoamDdo6jtbR7gWnu4YzFHf9wB067prgkGdc8IQTxvz004cP+B9/+m+4//Aed+/f40/3H/Dh7j1+ePcB785nvJMz7g4MO/t0wtGGbXAcztI61lPNLi2qBibvDUOqMva/+ASorN1pEFdIcDPiE1+DplODGl1JylwBzblgMyy1T/ExTJqkwcG8iUWMrsTphtv2Naibep/pZ6KlJY9Of9fSTsa8Re5cK8ftTzrkKhj1xe/bgT7LV9k8599vUkLfAgApu6IkGajv01I+GI2tXTItEJPVIazICqzvxZyj7lSPvlxDlkx/IOWZgiQd5QoPAQpptg7JsM/MSYpTsu5YgGYDkyZOdRGX+0enVZSHiA1hXQ3G0uVNn/nk5YSdXdLtW+/c/FvWbPyl7NrDxhDclb9hjABhTi+wLWXmLDcQt6OhudorVS+rOMv79XnacEqwzRnzd9BBWWnymuaaEacJ9azAYx8K9bNrLKvjI8aC9d8TcCHoYgdzkL3zEI17fJI2EFpaEKx53XryvnZNw56TE73UvzwhYooclWzYvq0yjtrd0oL14UTvpCf7yJTP37dex8UMtARmFB4Gayru+g3hOPd/nHWq1LHdk0jbfULY1KWJiKfd2Cq0yaeZrLOFBScvKZ13Y2oA5/Sbsg05l9TkVT7BnTihU4kFThOiPkHjCak5k0T9Vs1u9JaOkkBFdJvHxt0N/lgSJ+onHazfinHq8TiGf+TQ+O7h2r3PMYkKGKgiH8HDkOL+UUfUvWRItY5hKV3sj9PCh9y9zdhLN+eokrFGFLXQM4+xZB2vxobmNr3ujdd5PnG7wMH9esq69D1XYh9Ulkk6xuU9gIfrcFY2+PYkDxiC9A0NBXk/rmpNQDLUnxkRXjy+v5Shud2m5KfOOLuir1zuMH0xSXSFHh0HLojTuacOyGmAd6LOxJFWh5n44ZynZopJhPc4u9MltOMBVUEPOWVRKjqgJ0CkGVxqosH7bN+b0Mls/zP57zuvIJBONoVt/EHTqtd8s6VveOlA3mUdvQFAk/2yYVWKE2+81sorbC/NjsW4roNkClyO8mASbwiQfHcBcL+Of2nEwuCz3Ir37nB+YaDGGHC77jD3S2RdmbgOJ3EUJrSHQAcAPcbinoy6bE8/9ZCZZvCFmPN4fD9Z1a5DjPZag8gHg+1I+nYHfMPY4BpzgoFzib45Pbex4KqK1u0KAR/xiILuJ0IUY+H1BF8YcpSoh3UfuQdqfZML2QoDfUp8kvSicF5pdkr4BPdYNG2V1uxX80WJ4DG3odKhM4uYEV6VW82PILFZFpcVwLlGNzCE9CXVF7bDTOtZnp2R3eZvucjjNJcw+BqtMvArVPCNy4Eiw5fvuS7TN6LLIcsIf0IIsk+Xd5VTkyHc4TVElJAMWDcZOBa8YvHFe7Pba38ZHuYfWry1RUqrAs2c5ydzpvs8VJG26RweW+I/borHQDj7SgKzwy+wVMfLF+qGakncRMviddm1JEgVJCC8MS7deczzLMYX481oK+gEkrDLR3vyUPARvL7Z8Bld5j5cSd7m3qdiJ/QFE72kg6wh73fPt7PDHem0jGFIeTF+e/SrbLtC4v+5HFTUTWWGFXcEsv4oOMh6xReF35KEvijXcyX7O9kOS7wPc0qDJ3PBWKDvJkfIc35tKrhgOBxENcdu7otknJs015wuU2Wxr3rA5NAwbqksCa3IU1g3CSZCpce4uw60B353ApuZDmC84C75wr7Gpy/3z0kdyXTit679Z4Ou1ocd5rQJlA2oy/rSenpbeHozjUdxDoshepLeSxvm6CgqooibXRuUgXUW5/MHATvoXnMyHcXtypW2RHWaAo58ypWgUQ+zv/V6GR4DlmvjnVBfK+uVeJ1BPhIb8QVNWW5U8eO0H6AQSIXquO+cLyoj+lNU22ZRN0ZbttGx2q+KJKBuuPf6DJ9u9oUuXFcwA0k+gOUddxgFl5VAaP1I6LX3h6fyJ6UT5bM8cP0m1LbXW5gRFakzzjaPeN4efXmLPJfp+ytl4jWvQ0wh9zlt9MOi9pHDENHYypjMuJGKIgVGhKx57LeKPNCvSN6KSDRRfbG2Il+sK2/7yeQk8HPVDEqugbn+AKRrnPPzTSnaBO1IGhlNZr+78UI4tdW3WNpzNzYnNPgGTX+eGM3e8oVTaxdJE6pteLTKBK6TGpqfK5dx4EDlAl/PkC5AG5tWmzacdGzOPnVBl1FGGtDs3EDTAyf48vYFvV0gcgbkhPu7O3x6/xF3797jfP8Bd+fzcNCfTriTE+6k4YyG86mhnRrinKWP9cTqC8+azecHh/xd7PcXkjhFpyEw6ifwM+Ilzw3ZqZ2I3+cA9iNDoDNP6MzR/mLjM9w9CKU36eMQce1RMAAAIABJREFUbzsmuAFfgWMHwDXZc0smTbYD+x8Z9m0aeX7fDvTfa5JkDZ8AvL2s/RPOs32WN9VZbAUmZH+uE2/YaSJh4p5amx0kBGA4w6bmM990ulYa0OweT4dxqiMnOa8IqTcj5Y/0j08rbcQbsk33RWeFYNOZbaFZsKvdff7zeNz3WZIfBoyvwsTJeTtYvCrmePeW1MosNithHrHT5yhG5Fe0EXBdeVaMesf9hr/n/EgD18uHwcvdAVbj+Rpw6rllA/Y8iPu07AxflPQkKOI0Q21tIRvN7Cn+ZiNg31ZmqSbTBChN1lgu08wiauGwvjcMIx9Tx6uMDuRE3OscDjvpAtUOHAf6oejHxUKtXyx07+lKG6gIqwK8pp2cdppuu34QPkq7O8U4ObCZZm/qBuJDBYaXkh9wZd8hKYBjcup5E9dQMJcvvzdO86/RhTsS1g/WNtWt7wGhU+7/yOSW89z3Ts8D1mU2si/71hQsZXQXC0I6FlI7xmKM5+PJSqF9AoAm3LEQIO9xEjFnTRKryjtABV0e0CEWececFV3M+akWcdAEgZ+8cTnswX1CTpFLwz1uHnLVoxL5xMxlit9/6MxN8smdi2rveThmMlalyCgxThtin501jFSZ89vK2E7mRGrIo3W7dwTw1To8u2U69pmu2fn/9v4j/vb0UDOGLhfUqCMa45c6050sTjua9EaqS+hkjJNuOJQYl/w7xsQJWaeTREQT9rMpMjgAVRjT/tCP5AqmVeC0DaQCaSE2fRHWr30Z/7OBNlkH9r47jmRdYnIcheNnoiV2akjp10aE7I6lF/ySTbDQ1ehHngKbqiEnB7DaMouz76ZldUuZJKeWcdupoxKm1T9bypLIzPYLCo3uIBjXXVBWa79se54c1ZFc958KULHQqjP+yYYazfhyJjkU2pDBzRblnE7q0Bo9TmA5G+ezKr/yPkoEnvbzmddSOnwDxNJ3W1qe8viYL+pRpHy++rzU6WIsiUPKf2tbX31H8CZd68P0ML+2ihMuN59wv1anukAtTKDlieeoUCavCXksfbG2tkOYtVtDdIpfWsLIv5pmHUpvXP/cTeDyeyA7xDIJVT4J2eFl4wGcuyR0I9NigdOdo0Ce9GPnydStukHP8+w2vI7nLFNDPkwDJ8KnMb3/MwcZHW/k6kLfgnC63KR7kwXaLRJSGpVWz2RbujKT8cA3XWUWXX6D5EFpOnDsv/d9qb/3euVr+fut+UsYfHP8a5wkVXOma+JlC13CnVYVhuNFh5N4Xne0xgFsNh+Qin8VfvvXpcUg3zHGfmpWNbXRYhKD6O5b5CcNF49gBXDFm69zTOZQ0mC82IQugp+gPJBO+2uwp534zYlgyuVpRe4spD74wTGjqbg2L/hqHQN8UeBHAX765frrN5XmsUy0TGuipM+uqqCvtGdmklBv39fL9jLG/0uTWle+uELzRQ+Uhqf2gjYUfvjDb09J5KAgSUoVY/4ivLa4Vv9mGeIn09+C47mPy294NMwessfnnEwQLi3VSh0piXL+ZmN12Ob7ri7jxn3nAHDpB+RyAO2CL88vuIjgThvu3n2ACHB/f4+7uzucz3foONCPA01kXLXZGrpFZ2E2Lrg0UHK8zB646Yuq1txVXL7yHnB7AF8zmH+kr0h/ONB/p6nOQUz4LcL7yu9iJNN0NIwDoGyJuda4Q6CbZ6FhuB63mDoZEtPEUVLIhumubhSSEe4/yk5Tw0FxEJ4IHAUdVRxCseBJp+/8jsC6kWbB+Z9W7H3TAs33rm+H7Y0BM02I/TlRGK6Y/+uk9eM74H9+hv4I4Mz0Z/k+e11czp3oMzWQ0TA9jhp50d9fbNl6euELdZSp1GcTemmNJv+DZwJdVxZaR5r4bk4R9cHfHdmGEh+Wreo5Tts2bzBT8bULcsdfyJxbXJmnN0OMuvi6ZrjcNGh4IpDjO5PSTFsuonaGXGl6971Y8twKUJaNw46d5K5naVmBaN7lJgJbcFMC9P9n79225MpxLMENmrskV0Rkdfeseen5/w+bh+m1ZlZnVWVmhC4uN2IeiMsGDo+5u6TIjKwUI1xmdg4vIIgbCRKMWQmcn1jeC2jy4RMRC9k+9Wk5i+YTcPWgVDbRd7keasProD+PuBC/jc9dvD8id4f7e47W/AJZ3jCc7UU9WlXKS9KpmNO12WuXsYWk3MIFgyeY/tGyvGlFNuWfPX30cHwkN06i9/RiJSjZVq9f5Ig7oec7MfSSWUzkbUAGnxxlc0xwe7p7D8BOwj+2cOuN3aJ+DyEmPhG1E7ky6HR22j+RRgIg/t1xMN7hzbgs2Q6BDAGf+VUZUBUMvAPk4+I77q/KihKhq6zOaTvOFzjD73WO081+UtjOWvrCsAew8EWL6YVn5vGY+N4BiwRSzEBYlKTJl0ewkiS8ViTB7Tx+l9fRaBvjbicYc3sep7dOFy+ib+9vF9Q9zGEnZP7OHom0a/7t7XsIPPSe4rM+Abb463BqRUAsbIgi72+UCzJCVWQNGFIvSsbkFi+nJu9nxQ07z6NrtLPeF9l9oQW2IKr0KZEN4chvOl1s4VKR51FEyZ4hkHJJ1ittmHZHpuXx5aW+DMuOTA69F7VLd/WRDvYRCVFiUJO8EK6TFf1ODoZ8eUbgUWjHtVB4tV8jZNuiykHXPyBk0DIBZJ0uiZ7u2pRgYj/pTwiO335XYgwn8WJGosjyB9PGch5w09FOXjY/SSgFluNMIPjAcet0IkwNbmdLvBP4eUMJYhsicQdjoYogIQn4mX1Gg8Nr8Afp4I7hq3B2GVlwVuUio26pJHICk/M8tkqJtaEwB26fcyDK5wlu722Xc9y3nUj2L++t/Y/EvnZO+Jk5pBQC6u9QyrMsiHeSMAfvS45RLV/zVdZkOBe36Rst+QEAX+w979FSAR5hPXY6bnLmDQ9qZwTSPxG1bLUj7+j3Dk+P/IP5tCnht/n1MCJFN8ANEmtz55xFyEWRdSIdjwDeygo6NGSZFDG0QgvcOQY9agjjmWkyTnQDtIHvhK7MVqpyC3WwXU3HM+fJPf1HyNjWcjgqHOawzQw3p7QdijPmVQK1zfUkL8MZk/kPNSnLGym/vYob2Iq6VSuvHZ0ym6KSeW5tAgNqCPm6uZzEuNOV96UY6JbB+2PX0NwQH9Q70mUKmEce1aMllFPq++JAo3pCAdB7AD7fNmy4aRHVh53jx1YPiWF5eTpi/RavewSuHP9aB8HA/S6NZcTSCJR6GbZ2QAXcngxdpLYW9Lr+HbrCR/X9g/+8GxdNYbSzVZ3v+v3vp5cx/7MmGmQ9vtkN89Hre1ufZ3173PGmLADhLoiDeF01Uhloly1hbIQDPjSfOHX6OqLLFcdBMqTPp8Sc52GvedCtPgFoSNphZCOpY37HOY7bDnlogrtubqQpEXR4o1HIWotzobp0k0zEFSt+at1QtJbr1IJ0ph6T2EC7oJ665pXrekyJE+FfrhOfP3/Gl6m4e7riooovAvx8/wZPd8tp/u7hHd58eov7x0+4XoHrnCuq2BiYMiAyTYSe97nSym1ZEjrwJezseuelrB+0+V9NVvzj0g8H+r9gqnJfFiPG5E7SOI9Jnxdqz23SJ5wvNcSm1RsKLRSHexf8BA8tlopCMXMHcAgEW7yJ0+K+85h3JpOccSuxOKB4IiPIBWjkQvRk7ElDpPeP6nzOSdYl37fbaX/A9DIj5verrk86+nN/tzXhcbTgdoOkqfla3pJTBfLx35fSG1j3nwPIk3QdBDKgZC1aH+9v5O+LR9bX1hdpP4QfCtEv52Le954nn+QCu2Q0YznFEOqbGwMpqBFwy2yj45mPfLrNWFs/K3lzPugiKGa92l72wl83kfzalJtMW18dtI3tDqxwsAFpn8C9vHUCwhoM+UnTWl8g8obYq1Wc6Qj0uWtkOdQU0Am9wk6azzXhnU/AkwLzap+LnybDFfMImoh1RAnlK/eHt3IBI/NDTojO8afHcaA1fZ7rnBvYpxlfmV6iXAYiBCiXUwBid5+Lr8byXejv8OqkG6c6FMCn/PrSetxZ/jWo6WW6GNwLsvzeI2VznS+Gx8PNCxYuT+6K73BMrKAL03jLQ/tfnCdyshlioZtz/um2jwjeXe5wJ/cRunrJ9FXDqmM5x6YKhr6ByhOeYuK3yiwHOuChtZe/TM12sy4o8s5plXVik5zoehHyn074tTuA9T1sMj6J7t9yYV69sSG5McrFumT+msgmONO5/V2xCbXlIT4urGiDI29eIYd3etue3QuwOQn4nCWaP9JejncCaLHxkZgVI0Q/ISdZdl3hMa3YyHIO7vC+azbEi0DxjHFXAtcBmHmYWNmpbNZKhBfWcIys5GHxgbw+IGlmuE7b4cka8UUvCZ0qUbWUckdbQawvWaHj8syuoESqaRsJzz6V5yRlhyBnBCLqS2+uycFiVylyUw6rpeCnekXV6tkaZ1o/i5eFJaIuHy851F/kdJxClz5I+Z11d9+JeGgXqPawUXurm2lZuJzbH8ya3cEBAonZGb63RAJsgaxnap/mDIoQmBCavlo56lhUb9FJEr3D6CfnDCkzNcuGEGAU1fq3aAyHv8PoDnQvIwFvqZsdyeFA5+9RGpxEMox38Hvk0tVftLpD1LDTccNzPUn/acu2Qi/F+53PuD/+NDYUcOuy3TpzbLiWAuw6DODDcpxvBL/Yc15kLg5hyMnSRcd35xGpWZnNBNVMfOQeSXXyd9wehuOA/PhSo44ZbsihqNDloBcBHgT6QaHDQ5ibzDTZtqYHRkvIs9cqighn6872kCvGfyYcUtTuxm2sTVLNJhHKr8GTVVhod+46reVOsUQDO4xtTpJXG8ghDwLmBUyEY5d04Dh+66YTpU7UefkuHZzg0efnSr5AR3Ju3hXUyqYDx8Uzh1/PU91H4NuPGOgOvNHgWI7w7Wlmuy+9nCTH8SR5iS5wJPM8ld0+SbCi7SwFUzjjKywRlXWdePTlGSP14MQ8T8XGfCbtWn5J9IRbzxeb+Ua7mYbJc+Xj5Usg5yKCch3P1EqWoRjtR5hQNm4HA4nK/gbg3wT4y8tw/0+TlL6YXGSUFHZTmOOX5g9/J3SwpbF+UaQpk6GAySLuk5VZQ50bWW4C3ta0Ql34ZvpB/QdRy0vwcZqH+yaFbjN737a1A73ronSiZw0K2HVeqgLMafPPiXGxDUVwWWob3XTCNwJeZEBkYLg9KGutYo3IwFTBdQKfPn3Ef+pfIHd3GOMOD/f3+OnNWzw9PQEiePvuLf70y5/w8+ff8OuXT3j6rPgyn3AZA3MMzCFrTcH73fC201KnZ03M7nixRLFxOhuuwwaxV8jlH+nl6YcD/V8xCeqsJIxiSSVORjllsnLusBb4iROfTKWxOitnF8PbBH1YeVjfy4UwZP2FdgQwr3kCyB3rvhN6Wug7gS0e14lJVVw7nHi/B9yBLlPtO6DKp50qWg6LYd2+ci3XJWQUqwZsTKD/UEJP6vfooxzfy64MKt3dbIpo5RSGG+U4u3g9Z2XrpIKmcvQHysM0u57HfnWe2PRm/vsv0Ke/Aj+jGbqaPHEoFLM5uBM9+2jvwvBurCxSF/2c73fPkgHWG7HzO23IxSf9UY7DtxvWfOioXD5hGqltHvod+ej+15jk0Kf1w0OpirZJKhuaJ/yUi0GemU0THu8KbzeISsjR1o19wwdAmojZVMS7mN34vDlZZGu33bvj74usJlyU8qj5+S5bfxfbu4Wquq5iUyyQQAC+gVWBKev0mi75u05J6HKg6xW4znCmB01MpAz2aqN/NI6N7eKPWdtpLEhA12meUG2KuAL4ybv6ggmPKO0Ub9bvdgMOpWBsA3i3+4Od39tT55x3//g06dsK70uc5q+pPwp4vZ/q44Ma+FjfC1DuV7+lZzbq6uvSCd9VdQLMB5K9bpP43dXA//HwCyCCP3/4/2rZU5IyOlZZPDUQk+e18LZoS2ZHQw56BglGnAZ2GXgnF1zGXSxQuT2ywJlQuRq5Tps85mJBOtuNBH1BgzYa+Glhgdr91khbzk+g+x2f8d74XK/QaTJGFWuiPehEhsHSFtfyTjDS885TJuvDRKANm4cFx92CcRuao40gm3r863P6j2lMUCOuULrm13U1/T0wnwq4uelU1ukbEby3O8oB4H8//Q2KgS+P6/Q5h5VN2rUxsuex8OqLszIT3CUsDeuM87nC82OY75r0t+cUoISPH9eGyzWaa1+EOTvY0e4Q2IaNesKOhb21qH6nQDQebWe0b1vAFjUMrHoEyCsOipymn/mRJBbPJuHG4fQ+EjyxEc375mWYtlGvLpDBB1jss9KtoOMH2f845eKhK73xa/wWOmk+Nc9zqdcravixbQ06Md1RxQq4y2VGXnwl3Uyo8YN6B1PFs5XhN1rWSdGSuG8w+pSsh0yIgkIx55qfSvf33iZ1ay22rRfilTD7hHM5Ty0vblu8OEa+5+QLr2nGS0ERvEyIj7rU6/P5nMV49IaG+vjMfi7WJYjcbiZntxj/xSly0O/CHHYPuBC8Nt7p4JUoW3uiRb36vKRsMgC1zfRmA9Y3DJ8lr4/zjRO4jqHZcXwvEmO8UCclb23ZN9vlpkEJe/A95X3f+vKxslORNXS/eeAYrfzZAxc2OQ5HgbfZzmFmnmgu32wTydV9lnyq9I+azcC8u8SY3S37WTEm1iK42SSqWPaImFxykUu2xJJf1c6J/VcGrm/SC4kc8XU5WYQeGSY7sjekOZBbWpy4u5DsePKT3QYovwskMB9vbBjO7CfVddom4xRwDGf8YiewaqPhfTtnzvsyt+55OpwlnTNwPYSg9ruGPq/O9Nqu7xMMm4KaDNkpsbUOjuxY02t6xKWuV+oh3wUjaY4dTk6UTihNhpXnTpDRFNmeDDgPYawtLILOlZcKSzaZzPWqMO4bMdLTWU28NLgN3x/KvvV3V+Eg+5CMhBwTb9PGoPNUNE1AbZLyF6Ghs83/BWbRRWhlDwrLVUHdiW/pNZHs/h7psGmzvHzm9+65j8lBWNrP9aBshu7jdAqq0bcenzEk22uLhNoxuOo1V/v6vFbtNOTjGs81fro91KYCVsK0xUTcnR34klpl71eCv6PrlGPxvfSLCwQCjg11HvLqaO1rzRbtIOS8rvdXRNtTrksGq2CoADrt7MtYm55V1maFa+JEbRPQlIG1r18wFfj4+RF/ffzb2tw0LsDPP+Pd3R1UBHeXO/z0/ifIGPjzp1/x8PkjPl2f8OnLkhNDRs6R+3oz9y36JyH/yZIIvKw16ybMNdGY6xfH9JzE/errNX6kZ9MPB/q/cNIiFFsqz5vQFEE4mUN5cB496HY21MrJIBeW8V675Zxt+iJqEfZixvWAXNZJJx2Xku+oBqmL/YnPwt0RZIuoa6KzsVC64umKZAPBP186Ks36ezdh2Rgx39T+1+LQjWpg70R3QqVFhG6E9UROw74T/bDAzrQ8/7I+ORx0XeFOGEo1NCk4BYtPLqxMQa3On27sxTP7HJ1/vcYRxr7DFOFxBFAKA1zq7vC/KLVJ0OEyYfvz1ZbSlluTPNa32mgtNhmYY+842suk3sSrulwW3Pn5C+ncDautE9q+HKoixCj9ju87Pj8py/SoDveOBwyfseo0693HBbcOi8aJc/WT5zrXs6t9+kkqM04LGsLqbDhgcex/O1o5wxvTF8sVtD6fDWHn3x0BPTMRf3FiemUdFbvaZ45ByXOrzhfm4/w9bcv/zvrxFllzchWwW4g40BHzwlmFDyiy6tYC6KuTxBgvcvSNTBapxB9dALlIOG+UdIFDc3f3DoMcbWvqf0VutmHeniswBBSqV0x8gu8Dj+gn0Ve3Awcw/dSWpOyI70L0uhy6Mtdg5GZJrPavAsF1LTr7jnu7n3MBdkGeJuFFDIm+7XgrJrU1O47jxWV9EcuvEwlhSHl9/Lt++95JEoQDbfk0T2/S69IldhaiLH7bKQEMW7uToOUIKWjEtIY17ebEO51I9vDdcoE43cJok5wJoR9k2vUUG0EtbuvEBR7gUVjrkwOAbeKyMROQqqKjWrE2HUOocaADsAUqdwhJ9i69d2sDi1ruPhz1d3fa73U57xnkVwErPedaVNzNnzLeT300sEp7/dHhRJuXjo0MLX+0tdoTApJVzqpGspR0RJWhsXHhs8INZNpb0lU7g+2fSo69yU2L46zDUxGtTt+0OUatLu3FdzwnJIfJHhfQLe6ex/+ANBFjHLX0a7QmSrfb73Wnc3ZqUB95vAu9O7kbfEXmRMctmLS9d0c6DLfDdZC14WKFbxPhPrEUDlYTFHM5N+LQMyQfSquHPyudnQjIwNfxfYSmF3aEexvH0+1lXG+19+L0/vksFeL4rKRaYXmRphIhnLS+uH6gvL21mw701s4hkUBJmjFZ446HcECYjAeAt1gRdD7lNsBCc85bJsf8ZLI75oWF7qnN4N/XWKdD1G0th9u1SL4HEMsBgkF9920uDd9nqAEqrMLjzlvWZFPSKzbh73M11ZTD2hBQnOd14d6XSHo6u9O8Svqaf+FHy+89/N4Hehswm13THP7deZ5O03OYU4+RfcF0bu91g4TcmGelZJDjnhxs3Ubw/E4TDeZjUxu8uK4CsO469zb8WjSyhV6QQozGGDqLngz+d08NR/wsePv4Wm2jSES2ijJncO/aeQlITmBWrQVZjQ35QG6IhuRmfTFF7UbrDq4vAP6bAP/x98Dz3yG5l7g+JLvkaF+/TJF8BSjtd0xh4XZFbp47jIsSDzW1sZdcvd+6z6206VvE5h0U1nsio3wdDO8biTvGZvmuD1KLvRT7h5Po1oDaIcp1ldeAzuui+6c74O4J43pn8mX9M6xzinXKf1wn8ATMi1l+tlY454pot6K+LCv3y9MTPlJIdv35J1zu73B3f4/7t+vu8zdv3+Dnv/4HHn57h18/fVgHD0Sg7jwXjjKjOfbiyEm7wodgHWyrOpNH/ExMKfaUcQv3P5znv2/64UD/l0xsdEv+HX4349wVtwkvlAmjl6NFSxbE1LIAZCAD9a4XLItCgcNpbzeCyo5DN0gmgDtgTKv3QqEfsx0X2QmPw9wgjBm6GS4y1/0zJ7vI6iQiUFHxcPyxTz5nAQru/rFpK57jWyrys+LP9OPsvRy+vM5GcoVVVhuboSM8WN4AWT3sHKTX3dmV/7JVYb9/hoVsb7wRP7TC0cHZdcwzFv6i38Sr4biw5xGSlVejSvX5rEyCgi/8tU26uMvNoK2bEeRGf7o1RvgqjmWtxdrzmxO23VBngzS29ufr2wO2ynpGM6WWE/iwmezXdxMbR4FZXkVGlZBerXHVUo5+IDrIE7ry3p/x85Tt8b44yjWybQ05dTNSKxgx6XAZfEXCpwinefsUnUuWC6L8mvd6v9snn/7sEwlHd15sW7srVv7ifbG+X3kW0fFEONmOJbDHO6WQLb2Nnod5YUMT0Y4fUR3teQPjOdl6Zqm/NG3bkZbh0/HRLutL0u+hPnd8t23rI4D3gH4AxntAFe8f3gEi+D/lIcr8ui4rvd3GIZn9pTCaRKoRpLg0NjuqUSPj+4vgfryBYGDKxNQJ1YnrfFos4CoDHuZUMUWheIRa/kk75FdmbtBkckyWnR05WoKf0Br5NwTrOp5cuM5TYHYiSmDO8yugZu9Nv9CUF3dnyMVcfOaTXaTrE7U42iQmKOgE0+onx/EXek6yTLqA4XL0+CAfBGua1miknEQX8jwJgHU3G7RN74h3H+7uIQJ8nBFCA58/z6yXRbzLzOKBIlknBo/bByxiMr56fWYLPhJhEuQQejDzT2QUGu7MyrBMMQ7t7qi0BXK7ikUix+KbdZ1khqUNsR+d9hDwiTgxehGMCDfv9aYjSHJkRY46v+DE66We+VyKeDr7y9EXqonjkXcOJ2m7GVVIfaOv2HxAO4EefdnMzQyXxeyS5TS4qoNhY0AsJ34KTJrYM2DDdxPPOUqBoYppzfoR3eb+ir1x9brRD/lMYxhAfY/ZIg1TZDHnksMY9HRr/uPO1PhvpviRdCyL5PgJlNiR3WlMb8kL5VP2v6Ege8w5S1NmA8jQz4i5f0RfgPCu3cib7eWmgBJCWrJtCbmJ+O5z9BrO3WAt8ilJgmohOCTqE7w3Xv6wcqkP8Y1x8npHJ1Tk+AltGKhQgG3mwIGP/dyP1UqpOxw9qg9FnbATPhdMSYDHlTmfon0uW5z4itAnQno3dVrpeI6Dlz2gpgp0bussoEpv7yXj0gqGvstTe+kodzkpbwXjc26/Slok/eLyJEQyRe9xFJOMWlUM+EYqF1DZBbE1CeFls4MmEDstlw8k+ERb3lvypYhjALC1t9gID+d1IJxWgSTqFGEu5AIQApPpbnd6+3giPZs8nPDtaVPw5RTBSs96y3rzUFGz04S/Om3xwNvvYTzOk8lgWP9sJ+llYVKUrQhbG40NAgQV44rGwstnmHdvK3OG3iz4WLSZulUTVlK6RfVTCvHLz2jsD070QDELL9ezEvRJGZHMQWOYXad6tQJT9GDK49hE6wZHOLSH8b1twA3YpMFEMPbON9IpiALSuFDNNaVLwhB5Q6asL+r5XQiJkAFlDX/SXKcIGHU/cP/QtBnfW1nKwxDQlYxdv4a1sKvgeTyE83kHlhDvGdsL6V6+fuHYDdbJ1J6C5LBL9c5VWbazTYHd5fWF+MAj1D3Tde6uxIl13+Do+p3kXSut8e+N7YBlvb3K+qInrJ/qodsBAE+Q6x2mPEFwB4hgypqvikxjDcG8KnRMyNMVAruiaK76JugEOtZ95l+eJu4ulxjbcXeHy90F4+6CuzFwP+/x8O4Bb968wd3lrtqQbuerrLvYGz5BKMswNZqEEz6J22NzmqJe3dax3eTF67Y/HOvfnH440P8FUxoz/AeYFMk/f+bP+fvw+9gG4qTqTubvfofN2Zjbd0wBODrRXdiQ4aJuSCnWbOMJ0HvEnYyqAE9iOkBhgFHfOw5EALksW2UA5b5qryeOaHC9/OyswjwqAAAgAElEQVQMKTfStwjWH+k8BQ1t6CEy8DM9f8+0U5QhfffJyJufgY+/Gg2x8a1ZLRvRL+5MhzP3lZOFR0V29C2tvvW9kJ/VUw4ayB5Dy0Tp9b0k8bjQJIchuVGl9gkD4/S4UlH75kZw60kFrcHRDdio5XnmLWHhaGFQ54DeisUVNCP1MwzmQ0sVFu3vdt/PyjO9HetJFsgwdkEh7gUDkAtByEVTBaauxQNl2R53n1MdOiP0o5/XCjrszvPS8TZz4eS++8PQOfyEi/3cZoOeMxr4ToLd6X3SDOlybU1cjCaGneJ0WPn0YwPtObbt5HcrowDL+Xdvj14iE9o94N+SGNXN51hMn+8xJAUftmAdCx8kl1r6829/DZ44pI2ZJraTGkP8wHZmF5gvU1K0S1bWyXvtS7maCptQc0SKzlCTi/Qfo4tPVsHExLrWxmOmaeysDlWm+VfW4QMKOyUr7jy/mAZbEY7cIad8RaHKOlWluqICzZGZ2MHoG28mD7Kg3Jkeoo2RuB8GXRcR01jpJhPXZe2Fzpd9/pemU9bhFZLX6tyWSF8qZvRVHd8XybW7aGrY70t6+gZlGLrCrPs+CckoNktb+B3q69lq0pg18MwOdI8OBfo8Ueue3RZNcmTMCaIjfqkvijAqyLQL3R6bajX6IdEg2V8OFPGf24u5KJ4EECWVur0zCYP+qa+BKynPgsTU2iJ9xWaSH25aPDrNglsDxqdzX0qvGRq92pGJJ+QpjMJ7e72t9G19phRJWpTotOpa2PL6fFynt9HZRWrTuQ3caZjqbyOSofe5TLetjshzXIQj1XolvnBJMlyoaQd/bU1NWjp2i6n90N3j50BDv8FkOizymgN5OOzON4q4zzdQ5X3yvjBskuMogx3zMLq3d46bwJPG4mWAqY6PHOveXoZXj56VcXqpk3aXb0jege6blQMnWbDUUaIKMH0QrzHMBYbMvfBPxk09cV1L+1pNXebuG7mk/bSF2HIfwQkuYki4zcoL3YG4xXoM7+0x4Q0fJZnO8isFd+aXYG3+0Ldj8ftHhH8qx02Ivlwk+0k/z8gyLqVTnhPv3IbNyABJwfwiCKGUEIjd3R6I2OJnm0SWjIEEja173SkaSiiiJXCidqXTc00HHZv5nU+/9T6Hw9l0Q/l9jp/m1/HKkYMuJt5plA/rEpKfBxpCbizbrmf4M7qHpOx0O8Ohl6PPQ/mc4+XUy/ONTTVeFrHJrdrtRxgEdLJeqMALE/PCwVaIL/Z2zzjnlbwyqRm3a5gIl/oNFZ8VNYNUd+QgyDH0SFsJpb3f4Fqx7kL/z9+R7/6uqfeRbes1LsElmptkvWiZ370CJZuA2h0q01FVgcUmc7IgYbRU1Fmh413tG2CDRzXtcl9LY3Hh1wJ04EWyuZPqAwJ3+AY8XS9lKb+0K6KxviKVKB+MIF/b8s09CsQhkLsrcBVAJvRyBeYFc6wrWUQAvSrml7mmoUYfEV3DdObUmbG/LgP393e4vLnDuLuEGL6MC8Zl4P7NPe7v7iGXESOjjs+x5IWXYfHOkRKqcS4Q2phTDrO9Vl+Smtq+LvPZr5PPP9J5+uFA/5dM1aA8TutdeBJjQxCLXCN/80R2I1uLcbZkxsYIYmuzxI1rkl6B2B3or9zQh5+4uRrYaovBvZdZ59I/pFjDScjh27EEtXhY+K6ZmhGr/V1rP1bOmlVacOLGKP4gqe1Qt3QQw1vr9/DjOyVS6LvJY3mkFe1hRbRyMWmkSgq9tomKD3kbQ6epqOZnBR7/tqTtAPAXy+y099XoYfprRrbrY6OnOCXuf8HDUgtEze3kuOM5Fj/X91hIaDytsqGZNibZBWqbcenGIttxFrQnrUa3tSYVktwNzivgyg301DvQ+DP60Ccs9XcfzudOnK9P+i26Ce/PuCJQO+jx2Y1d6lPggPrbebXQP+pva8gXX+pCgjvfpJ5EU6FItclDAjWdsNoZYw2j6PrMu89h4duNzqePpwQsO9I6/91mrivC78rIB7VVM3SwANDr+n0BcBHg8W49nx1P7ftL+Dt02ebdrfI9VuwhXRGzqckxbl1ebAiqwNGVdXv8nPw6MAS39Tkz9TrixJRX8BFfn95ZHTec8rsDwpxO+0hyFTi5h+4FBHDgy1tpyUtfNFd+7mmQ9Ha/cuiIVE7XOfGgbyGyyPiv+u/meFqdUufxibCPru5tgzvPnUe06L1EJ9lh/eW2ewK/1mdFd7eTWhNrkeRyTQfi9IWKq/GrRagwB7p69KDJBuMFcQc925usyAi+OJTNMk0I3zz+hb4lZW5ZwLmBhFN2vkPyybUVYD1jk3r/5frax77o+F2qSkbrz2rvBLwStBG2BS0KyFBcxqST6dlJtUpUcoFpPSNGGkCdC0wq2cTLrm9lfqLxyBe0vXvD++bDGqfCZtKwL0JZHybWAtAIPdpc4hZCMRf1QbhiZLris81g5owtt0ax/eKbzbxnQbtSOu8nX9XZ0+FHdarGSXsVTNq1omGj+menGofH7xO30LExppJiB+WAcpoXxQTh8IbUdQFk0pk7W4BS7m7hQ0Fm7jRLDUogttnxeqiPWT4wGOU12qr+SO7ckbHZdhlOFiRW1vZ0clIvDK1Pwmuwm7aucStRr9tfm9+ygbLQvME4kHBFIcI5yLEPsQPNeaIpHf+5CSX6z21GPnKgG+8xP68i7qznYXMssrOa8fOeOs3EtLM3GOH5qLQNk3kBawGxwiq5qaAzQsL4nvrBbX4weN6b/PGw33Z61TY8KG34F/m08kMAfKwy6bDekIDkSeIj/SL63J/ZG5cdnIG+DiRK67uxndYfWzk58eYyKK6OUbNrQMNokdggFjkio1akdskhrE54O1krNU/OidxZEQTSMWOn4Wq/JYpkHbmBKfHsUVSKWeE1PIs3lwiU0UNGR1smND0KiNGADIVPy3zcj07yZA52op+dMue1mePpZefyolW3fep7c+XkVwkfzA4cHxupp7mXrdA2fnidAbyNhfFRc+WRXNRaLjteP+G4T9gjusmtcvYpkLW5tAsqG2C+GsnJLWm/wqCSOO8o4NPu1UCuufbP5PCVbWQakXwRwtL7z+Wl0XFtt9qEG7AchiFrHSLqyLEIMAOdDovhmonZS4Rg2DTO/aas4tc8DpehCUoYqTJzw5rX9wHAL8e+Hzu5xcofLJVOr0e7MVP+ujgPoIgiXu5AYy3xhqAN65YhZyPDeSry25y0EUuod4blBA6pPw997d/DNA80adywu0ivKL5afwendPioT7T8q+CrUl7kRN/vWDq0EOugc80d9YmyyIDMK+ZVMC5ifbQ1g2lnbmRiqG/WXnGdpqxFxusE5lTMmWM1ddqp9Cc8Pj7i/jJwuRu4XAbu7u5wN9aVYyIeIcpwMwC97kVKuVDMbddO01IHoEr9hS/fDLjwnfZIy2loPdOzP8K5f+/0w4H+L5rSHDDmYx48zMrzdAgvjK0FDHOisyXmim+r7Ej8uoGe8dMQ96FH/g751Y5Ngf4mIBfkMcIBXDKUZyqB3Dd8BMw+TUCufrGAsxDuvgTEivbUJumi8L+68JKT799a5y28PdcOWRWHMn3wnA7ZuD8aEKcTl3htEzRv9u0vy4EuAOQnQH9LXpDev++FN6+L4Gfe9d/cJPWhUKxPTqgoT7iOYGe75yPnBl1mPyS2M3ghdxfm/CXpOVKKfFonIAeyJubnDRbfwN7Pnn451O2Wsp7nC3w9N3ugQS0z0luTMGq/0bDqzFOfPLnj8k56picEgOjyZE/ffToVSqfP0zEGYNrixmT4z9KmL7TDtegSBzrgDu/6M9V3IiZcPjdhei7tmEwJv7u6X0Lrhb9O3h2AoIeyo5PvKb84+Ynuzavx8dhsE+u/a9rhb3wKR8r/fPi/Fkgi+H8+/Qcggv97fkg4vezFHriI8+R2V+FtSbpjVgshHefxUrYIEGEiYwZGYUSh+KIe0ppC5nodsVt6mrfR5TAxj8tOQcgALce6hCbZSXwcfjtPAtsGLXfoX7AQ4+woWDaaLFtP4HJCoXoF5rDJscHpJ9LNvku94vKeBtLlvIMY4Tk3Y71NG7kr/d3XJrd1gQh5X65ht4busMbjyWmCFdX6/jgfK4xnAoHZPxaPbEegrMgBy/QWA0nWJiMF5E5wuYit9TlNAIoZ653ZhMegfKrtRuMtSX9jlMXORnLG5Tgr1kl46nOEEuVlODv9nLGzC1JU1mkC5TZirM2J3By94XBqJ5tWO86alnuMbFIdf2rruUSTCoTAIVZcZCzFpMlpDZ+S1YBH1BZaYk+i44gX5MEdOpgd5V9arN/K6cOwCooN7onvCfUKY15q7fTbFPqY7doL26vxd+BFUnZ2m3kDOoBjhPtNNgcZIhg23zSJHWD5Ce/iNDb0MCjx1q8V8IyR0hnlVC3t/WrT2i787mXWv7kPpsLT8x766d9HhYzf94P+he2k1nMYWq6DWhfTZQmL8VywqQSGKlQ1iZwPauBfes+RIjXazs+dHnDwvL3j3OBjPhfejLCBu8zp2BkvlexL+VpH6OKtyqpU1d9F5IJGF97tIagh8Xs/DnS8a33/fp2MzeZWaFgJkTsgNE0RyDuD45M7VY91+nQnF6Or7SuyFvDDQVnqEc4KmbJZ1I7Bp0ZZfuagqTGSHACVWyhzSBFbx4odRG0Ve2jldXXADuLu9O596c+fW8g/r++Yp/epOK1PHLr8+NjWEjoCfl7ZWu2Ecm50gAW8VMgYjS5Sloe9/Vx/yQm+2gtgS38iXLTnj3qQG2moNWlt86YBJtHU2XogxeeSi7oKyyYXyUSCqH1+Rdo2uG2MgN28ZrnDjvqbde4MnGfaURzMqgqDFfANzFGfj/um0m9A3x87bfQLdlh3Iv7+iDBVGHabp6Dcm+uGOKeD3s4uy0FH1kyxJKAgWc5zjBNGZpZxuRPTipRD8Lr94FI0705dnou8PikJWiF4Vn0Ttjy4dOv1CVMEY8w4v7LMpTV/1LnmZFMFw+4rV1nybxp+rnPiaU6M6xPGdeDx8RGfPn3Cb799wN/G22VHvlty8+7ugru7C+7v7vDlOnFt/jDHxdaqK/bf+kfDgNc6rvSdSUnB+K7PfbhuiekfzvPfJ/1woP+LJe1fimDfGN7hdKPvcIf6SEUSgpUmQ7sJCImahEWwFjlHvKt3LxHQahbHVPKjmaGogNwNYKzF0zwtznBVoAoarG9r0WtElFuFRET4kHIm1PeS7b+YoHJj8kXdMgVIA7ct9hqr/EXNvqY+1mb0GxuFBpCxqiVbMWQbscbkRAE8/TUP6/32azYZ1g4XZWy1Pj3XRYJlnQBC8q2XN/aNyuK95DgHJJQHMEOhGgyRoRiL0fCmT/RIWpux0KqIeJIFrWsM4uQPG1nR3gZ/XG/HoeYQIIxABa0yVxhiJZrr6tjITUButNxaCFg1tLvRvFoGovxGAr5nMHvnOO7CtHTK/nVYdmO3x607reIkutLGJa7CZW84NhI8QO1uc10BROaEPin06s7zmZumwheWSwMDPeDWScpZwgJg2veDvnLY/RoRCiH/hvSIdpzearsg4vsm10sC4OlS3/VrBw5liYa8z/FubMrsDIfde05vCAa6y1nfZV1xUspOictHrFPoJ/h9Vha+Oz6bD5wBkE+AvMv6guz5pDqdhB/8nHnE3gN2rx1yqEXwvz79L/zPd/+TsiqxkyP+0wpLdjnrmCD1lcsWaWRozwcgQ6FD4xNYO5in+SXFZp2KiX+XP+N/jP9hdWl0zQ9VpAxcX2RSuM9yWpSMoeCRo0zbnyAyR7Av1lt/lvN8ZD0i5sy25UE1Ww12s5kdj5J5gcoVIhM67cT5nCuCRNnc6XIyv/r4MJzh69xdA+DfHUc7Fgj4mzx9jo4FDYde/hIZdqZP1yU2csf2ChunfI46fIEg5KXJbzEdx+9dn3s0fgFwWSchxp2fQjUKUeDqkUWCTGjBlzfVotNYBV/KL6CEJnWGtOMZ6Tyr+olPkPtfhIv2EPXcBJsWAhpXtud84cYeu39b8r3D60Hk45SBmvOshOcnY+XAV1pQo0DsG5EANLu3hkuSXnVFjsHEWtyZjTbDBna+tw0Tel1t+Z3J8GtYVqefdJJtI3GNJ6AY1mfBklkpeuwWcA4V7GinEOEpLiT3XTsd2qYBHwtXkXVDNWofeT6gyOvEPJ/kj8qWbSz8KHVvpKHUHa7D5tFDLkbuV9uDIsU0z9PldCo7QNOcnktp9Qi+lUz5piV/qUOd39OBHrQDClIdTtA8rR5sETZfls2NG9wHQIQ2bpET0j8KjPQZoojZL/LyyfSkU67D4xglyWyEasFf/eIhT4UfBqkJkZxUmJF9Y3jX5/sTWOzUvDUgMmxzv/ff7VYsxiL8pDx4b18+2vNb1LI6s6bAR7zsTqcnbvebAJa8sIsihAocBOyh5t766S+FQIeFcfeNdXYi3aPaDB22f269AwB5EOAziVoF3JEaeVXRuhSOyxgaws8xNPu6gkcLbgTuCAXYQb3eKesswrlmpipjPJLiJokSrYoVLHNFBzb1SsAqMKf9YXDQH7Cj+lZifDq+awZqocsHriNwEg3Tp6yriWbOFnlsZTQnuoyEy+fpqghDBg1fsQ4KwyXj1t/bIR6C3bg4ix6Rd0RCvHamTvqIpSd7n9I9aTPNhfz3EHGwD+5uM0KHyux71XVKU+M30xR/Nh3rcBjqVI3WpJUhfDamJ9FIBHXoA5UtnkcrJyt6RbCZcsWnvU8ADm33/nIHgTI/cHu4y2wAyn1m+5jB+JsC/12A/9jz/j9XSj33+jJfk/Qw1Af1uC0FWusDnl13YaF6kvqGlyhZZCEKzavTlEVc0yEU0j0LFip28tHOBpqk5dcIyJKtfhKafpkMaTLr1U5bDWSnhoOt91ldV7vya1yhV7fbrhYLbznNr3drQjCg8OvhFL5XZcn7qwnCOSeenr7g46dP+Nvdr3iQC97owP1lOc0v44J3b97h3dt3ePvmDfB0xRzr8GiGzeS5K43JQV/TpqcS7db6yY+lklFiSOO9o2zzM9IP5/nvl3440P/VUzjd3NhLRi8z6ZgAWD5fyDwziJR+niqQFJZpCChq+KjcPb7AtcVbRSoK2mGlV1ssvWjMHV+WJD7WPWF2mn2M5dDBxeAZBCM56Nk5EyEQX9BeF7ps6NLrH8nSa+yobbph0G7z0WzktG2m1wboT8jDYve34HqmY7dem8EWobfKcaek67LC5hPhwudksO1WB6we49w9bCQTbursneg49KtPDm7wRd+Je5i43E7FtOwO8sNCqv2ezrskt/xOX+z73w2ZDI0nJtuoPwX0NkssJwUOncAeudqeex29rV2b/ns3kUTDGemAqMJxY0uVJr/d6JapuMwJXK/LWL5eget1Ob2m5l3GJvt9w9SEkzz36wTGQ7Jx8z+GOWS857N3j3ckGp6jrW8WVq9LL+gugD1Y22e7eOSs826ULe0aUm/m83p/ojKWLh+eqX/z7EVz6I2T/TTJcsAHrwuWE9PC0Peo2qHL19//+vT/AvKmZRBArTzL22fgPn+dDKf2r4eghkrchCB+V7iDMCf+rH+OMmVjyMiFuTgNKLxDYPGJ+ayszV1KnZSuG1pYhgDmlFUUb1jC4jQ0LlmX2VnhQA8bckXBWEG27Z708WTXGJiccuFhVb/K1mKwbmZqlfoC2KsaJR0ejc6obtGm90PSeW2P7t/eAaKYAB6fll378enRcHCh+tMWENu1707WKy6AXCBzrAWJeYHcyVqgsfbWRg2vS9ORPmCOMe+/Ucm4AjqNigR5mr11XXJrbbGwQqQYzPadIyfwZyJlbc6LCxD8zhDLN7hOj3BgDCCB9CUDcorE9qIGHDrMgeyL7rJoNYE3xzkk9BiHXWYaU6o+eM1ZkB31ntxb7XOR4F/GldUdDk1tV8hI0eNq85+62c4ALQvdGmPNKU7N5YMA+sAahGcD0uDPhW01Gp2CnI6Jn9quaIxTH2wi+Ie1VQ/rEF8QvOwQDdOJHSIHh6KUanKawM7zFcktQp1bRnf6CgAZZDsht1asekc6iNs8pJqvO9ew8TrbvA6FcKh2FGcfz8sBZ12JE6re9RLJhOqQBmqENC9Or1oerXx9zy4gIfnANL82xPBvA7N89u/H1PrefzuvBfmmE39Xl/cn+0KnxZkmtZaBy+i2aWiR8zy2Nw4Pkpcq8x3BjDDWlb6OU0UeJ2m/ozJARqgI7uStU+XM1nXkavse5UbhMnUtlKcvUm3TlOSW0SEUYDCjOHgkQp4qqEfpOM6GLexydRpKGZ/1pV5zRqePgdgYWNBFtLBO19mJcHf4UfkqBqSNb8mWjmexhtQzmKKhgzHehnjeGIkdBxH4ba605wPvd8m5z7hJL3UULMf4TBlOZbMOm6v2Ogcf8iG4Tf+VcPvF09W+nHaL+UtI6W8eibcNGypN20Bdp2fZWDLg6pVHkZVicqFaoQPrWyVuz+Tmkd0YnHVYD986bQSfx4Y6NHzS82EMWpDzwnQQbULLftZ+MbLOKmcAC7C1Df+c9NnM39zTQvb9YRw2uP2y6c8/baKOsJ11fPT9mwUKDvuei/Vay/sM335EvpNP8BLLXGp3teOUz5tgXph8k1fYDaVBBnY9VToU1WWOg+gRukY6zMNmBjAxzU39DcnXGlpf3emtClsLnMB1zeMUVwgu0DnXObXLWKfSxa/YAsbFotkBUExcRLCc8IqrrgMyHz59BCB4OwfeTsHP797h/bt3uIyBh3fv8P7hAe8fHjC/XPHl8XHdia5jRcOU3ejQQz4MVkS8D3YvfZt5i9UhOJHNx7TmXziR0T/Sa9MPB/q/YlL64oscNlmohrCkwo73iOcCxKRPbxktmk5wNeFc9b+QQMFBzh8MkpjFwE4GAisspyLuWPc7L4vQ0oOBHbunY+u6TfjGsBNLZtHMZd244Z0zGS/nRhx3YGfwUT87rrYTB32RYPx7pLO7NW4XOlTyjW3dLi8nJPiyxETIz+Tw9ThwfZDt/RtZ0UhFgUfP9lJDSJP/uKkCTOMNx9sZBjqNlfqFqFaOcMoGryEE/LfxyztZkQb/JMBfzkajd8x/81UJPmFodRTDc2ccUh4uczr3YT6bR6d5TCydpxXHuKjLRDuxnaHK+WsWP/2Q/dnX0UG+zQ/SPrnSbqDS98Cty0aCH5IytpTsBrdNIqbrF5sGaC5cKgDMGQtR82ldzzGv1xW63cO3ezsxEcg23IhfOWh3J8cG7rqk87Ei9clQlJmsT26frBm7irjS5MZ6DjojvMwnK385ju3ZML5izrRNO91zM230TiGfa50U+Hu932RugLwalhcmfZ/fxZzth80NLF/8t2Id1+6D8YCXa5CX5hNEWOpIjkuXtZK30OzwFA6iXbOkD64KvVuVRMjsNZUEsE6Hrr0+sqI8iJD/kBr2e/gEuXCKxVtip9p7OFwVWSe9HKqwCyXKu0PGpMlajHbd43ZiIMEFpfNyk/XiDpuFILH7ztXljIfbtA2PYmGFBGvoS6h8s033dhhl2o1PM/lK4oXMZ2X2SbPPZRcmDn4uGLaQUF+krXBwENrf8KubxgqDN8Uc62OYg31YWDw+Zb3H34zNDU6PtC8KfNLCThf4CXsFBBPlShyq2ekm/i02C+svP4XONoaHK5zAuBAU5NiQCcUwevcTg1ZSluPWa4p2sHDu/OSn61Nudn1hTnSeR5ltQecuQAgh3bfqSzs5c+su5LRSHgGcefLUg8siB0MiRKK/BoA5r/bbcZIRgxSKJ/HFu4XJVMdq6lnCZtrR+gAw09uV0kC8LSsqYhE3GK9GC4qQ7XEfu78+hHr3zil+cVl8UIBi/1M7TGIua2WdoLfuVgdvYbvlMP+AxVdDmJZ10ZBTtmT3wtEcoqg5MSnymuf3vmaNlL3+U956CPngiAJjFR0+ttJa8VrzHYlQqiDGloDwk+3nzvORZTewo8CeeRK2zYYdACv6DSAlGk3LyrCXHnsdGry5wogibOF4T3WtOt5nv3HER/Iu9SJYVsp75RMExvfHk8B+yt3vfO8YOiZ2hvr6D6fYeAV61/OE2/y46eE0HerIf/t7KTp3jcMYw+yAtWF3LRHZ1QmyTpx6JAy8A/A5qeTg2HVnmub7wIf16rAuxjrANzCW7pEGso3oJXw3UBy/0c/QSzluJRS4IN+TjePzJTGZHfh0wWX0VEBgB2KxxdyQOhvA+rxO53d0icC5kgw9S7tw7txubHZofBD63HUJOHz/6p/4GqB4pEsJnlOfI6siTvwH3vv4R4uoukXzUZERbDOi5ufgAlFOciiyU5blWJe2KrIJ4h0hqXbY3ODlBJiz9KomQXF+9xaFHnkl+4oSPoNn26gwHo7N7cDb5mHRYjJR5WpDrAFCjHk+OFb2Eji832zKu5JXoSq2na4NXAH89wH8+Znr5/7QiWRRv7KOUN5K3ERxT2v4tAuksKlK1A8qw3PcV6cO/0FE8DwEVYaciMGI9EOoWv4OF/4+19nb2441VVkR5thYQm4MUoOHT1tH1KwdRja2zrmSrzKiHJx0C8tF+AR0zrVOKFib1tDmrqaHFw6WTF+H8W3zmoy4Fm7OKx6/fAZU8EHu8eFyj8fHR8w5cXd3h4eHd3h4eMC7dw94/PQZnz7dYczNBsVD/7EnSDnLY874F/hYnsvRfSg/TqJ///TDgf4jHZPAZ0b22yWp/dEEyaQXgLkXoJ5CYSjrB3tnCuJEIcbBzhDcpvCmKz6bjEyFjmknrGyO0x37z21b474PWWvcFs497uZ1Ie55lS01f7Ezfr8yvdYq+JG+InUr5jsUedD0mSiA374KsEw5k0GdcdVnpwdjxf45LOBS5dJ+08/DPA7IumjRFYJ1MPNP9uxPAvz1FQQsQhN1oW7qDT7o+EDNe3NotX1nY68PMjEjh3M/g0r8ZPkmr8mmw71xO9n0vfifJ8fPppPJ4EsTTS7TRcbvHS8TenUH+j813YkAACAASURBVFynz+eVNkExztt3raNejcSU13vgKJ+Pz5M9u7NQz93nGXK90lvv2x5jXuaKEh7llhV+U8a8UGZ1YG4Z9IqMDn3WzEF/Pw9Cbkh4057L9uuR585/5kSPX75EaQryVMHmHZB19OoiDvNDyydALEZvUhc1+x940bgeytJAXdc93yoKxSRnmmLt2jZaF+TmnSL3SO6yfJ8KDHaOWehni4Dii7EJTdqNflp0udC9ObcffYJMjnUZm1G0fGSaxsIAAOgdVih3WHtP1vcZ7YjtkxfoMh0n1njGXemvQD2nLV89R4f/COOujTN9ukPET8T6neZDRjjPIfZpjvTqg1IErnXZ5Tp1OVzdCe2m+1RMTFOLXo/hw+0KohHXIWo03E8qsgNh0ZeHac7yTpUDHrQZK6IBfPNb5lnND2jsaoHROcALy5kbAC4QUbv9gjaSwGmauTTHYU1N2Dawj5194Xo1VrVYz9FzAWRc7NQGEi+BMOS4Q3OxkMPnD0kTaAG5foT/J9vysV0wCvVhVTWhK+JhVdjZPsg8EZAfmKQIDzkdwV4fEqGZ2bnlkQN+gVT1AC1BxI6KTspiZClrf0FtIx3MUHLLunwCkt4C7CUPfxG7p7FIy8w3ZFX7m8k9jxC/9hFIoJ99ehLtkXxxXtiwf02rTGx28vm+ghy9u1K2NYryAtyX/J246u1u6u31CT2PTz2WITxk1b5167y9mly/39DpDtRGjPOpVj8pvMllI/W+9Qn7/CHTQHmP+Q5Ox53t7yDpAzUlgPpVOu/yO1IspLnTNy21ZzEODG/mHabjTzr5vOP0Rj7153OmEPJ3QrQBw0ucQLfOvZMIMAQcqgDLi5znweRRlSNNYJQ+lv4CZf7CTvX1fpjDwjShYsk3kf20zp250SvFoQuRrdmBRU4QDWvib9+XJLO6TnhM3cGc/hbmm15mW9XzyXUF2ajc7hpfvsOc9QXTc+q7LCf0qYl3mo+6Wkqb5oVgRx1HORfvp1GEt4naNoAyrIptVSWpJE1y+ZbrBsynNW8K3KzuhYn7yrj62spJbzrCXrV+cpIqIazUr8vyfPypxHhMPl0oA8An/S/h3UltXemY2bCpwz2X7FnnVsMHByS3X0+gUzED5pYvRHAcrheAc8NqcR0mKFETXa/ZZ16l1FLoE/953KKhAEWwUDMj/TqUb+QHbgQLe243Z3Sapbni1kVd/dR5Nb09gcvAZQyMccF12ORgehmNg+vBVhfBxSJqKYAvX56gT5/wabzB57u3+PK0Fv/u37zBu4HlQH94h4+/3eMyBq4+R5YE/+VSvSWjN4+s+b3TD+f575O+UcR+zYB0a+iZPDcnWHr+6rnnp2kj2V5hOLysUdlbMF0TQNfBiWdaAzPdMxOOM3CibFHWsJBfcdncOpEtfmefGUk6oeYEUbWTgzwRAaCYWCeNNDsUhqRtp/TjHKYMctdf9mlMgV5NgIaDZRp8T2t6oAMyv0Cn2IGWAegFOxG322GGi2R/RVc9aiel9JK4UV13apqgjkUWAc0gCA3FEtVqiGn/0q2Dlv9W2mRbPacTmkx/z9KMTZqe5Xe2+E7qLLhoebZs7/THY9cmN1w9ZwtjZgdqL7yr7AjNPu8JXt7/DHz4deX/bd9E1HecnR9zuS20KR6fpQqNerstDqRBVCo/wWvma3l8HOOkOP3mMv82gL/OPaq2eObOaNabMfZO4Dt5TnTX7b3uv4bQabStinE4BiAzwQOxvhcPtn0Bj5114HQ2IJtMO53SgDpUl3Xl6ZJmyIW8SGP7IA/MGX7sh18vsL4LYHcRYp0wX5cX0Z/LV4aFZJYAKRNWu3n/nZZdqqloNnTt5Unn4Mo7tmkQvU8OWzh7MqdPipKe2n3LqsAXl7lMWLtxpN9lB3Ifx04HLCOBY6dPaICr6ZvWpcE7Lkf57eU7Lz3X7kvSfH/yQjfdtQXvEhGGPhmmOFq5ofkuS5m9dn0vPwyGJ5hNJYB8sTrvMp9c7R3RZ7+agfun/cE1+cRxP+39BGQqcDW+8DDbSDxoH59wQvvJRat2mA02zKFkd6oJo3bYKVqzv3yRNxeTV4Pqk0S4M5E2RdqVAUsGTcvDA7HqhlTZs057OW4UevE8fvWO2RBjro0FcU+zpg1ZritQEznlHLy9cQ/gTs52BuD3UnnsoHRu/I7us/K/QCB4+/YeYwCfPn2JLLGx9G45kL/MJ8xhGPMAMff3RhMXfHpk+TKgMjDHgIwLBANyEWDcp/P8spznuEg42AuinCaNFnUA83pdQZzMnlO1k+ccjYMusg496q+cIAGIkhPAMq7XOS7hDDeYPGJC0Ah/O6hclutiOEn94m1kHVJUgtrpwVxrVaA4Qm4tsLk8cH5s12go5UsE0O9KR46p2QR0bh+w3wc2M36dgIcSxwQmR5+ZSZLXeQ3rYP0vGGL3nMvafHxxfJDI476EZBgp0kq/SGaF7Bpq9Cf1uWjogF+8Bo6YAqOyqAeJD0UsIiYqSVcYLa5HEnCpOWdEbFPRYRSyGhOZEAEuYuHYReBn110ViEqU+ZOsbSDLka5ZnwR6CjWIj3TYFxpdIJSWlHkzJHyHnVRILQtA3CHqMLnzu5SnkY270+u79nVt3tF81h1zgoHhEejijdB7Ju/63P/ZbzZwbLojHUA/lS5eYzB8tmT1DHL++6YHlwkiDwtvNuiHjaalKRdoia/qmKeyTX4e8GuZmg/T6n/IOuThaE3GOJzh8zM6RE4D/FQIR7XXia/ju95Fzos042w4VAbUbHGPmAJRXN0ZrIt3dZoKctGruYFmUnu3nR9Wp0cQKIKVs5Ewoz64EzbkEMhRbhCI9SEOIVtdxUT1KB3TF85dl6y6B9nDah2s/VISJloRAGDQgvxqz8czrDvOXkbwDHVKL8PUEX55rIG53fXsetGdEZJ9gRyd847yaH9YTwYNX+qzRVssL4Kbjs4Klr/qw556OLAW4sa+dGFrc0l3lHM6OMY6kku7VH/JR2Nk6MrNAIQkuAUVICFdbksWxSlVFqHeWBWRMGMw4WygL/lq7c18W8ZXqF+89hqV8ngwQnYNWqI17AM6iyP9lkCQ408m9IjEY49iDRw+AEG3ehWoeIQmz6MVfwApSQC/CPDrCWi31oS+Jr3YQcf4OpHswTJGWdJeNTWXKGQpCJIHnLvlCWWabRZfiGUtV2Do0YYnDkCsk5YKGAZqq6RUxjex6dlYBscXgV+HFvpIXMrMhnn+N/VJLFsxrbbms/58P23DPqc+Xu6w9sdkHdOnkMbyFYIVRU9N/ulUrGvFniC4WKQQhahiWBtxgADr6vQF2oRvTLveyTp4aREvdV7xNJ/wpBPTZM3buzX3/enNAx7evMPf7u6BMaCXAb2OwPelzBEzuovjSzGsBxnhhNHiF+PtMF6fmy3c9ODuwsWVfec83yrWhHUj0rQOdSv+DO/z5rxd1jMD7w+evsMeJV9t3WHgxHgs716KuR3WXRi20e5WEYXnLs1v236NQvnelOBGd21DUA2kU0a5UefhUWeQ4YKADE1j8jHWIuRirGEL6CsspE7FmHM5ROZ1hQR1pa6Ge9OAE2YcuEGusu6QcEHjmnIAa8HzssL4yXomV2A8CeAHFEFtRFdtV9SckOsExj3G9c7m6QK100dl4dYLm12iavi4GLKn3aF5Rd416cbHJPyG8dbUg9FanIRivCvVFVVlnSnmvsHYUf4g4+qltHqzWdl8fylfywkc3djdtFOKOB00/t6VfdUGE0WJLmD0KdRW2Bdl0mPp8W9WjgaAYVKj7fqiqNU+jwowDrAaToxf1Aubwh6yaRp+Wt1rnHbqz34f7stLgyymNCWkNlV+QfbNT/G+F+CDtvz0g9mmjJMbwRtC7M8EsaDfHeVeo5uWwRdmLayJ3lghasutq71dN3VYkLpUEXMUdNC6kdjSbgHskMiqZQvH8Q7YKb9i/dbyRc7Ud6p5arD2vVlONDlmO0wsSq5FTDp0JzbDunPvyTZaXVe5cfWFIr9JaZLVFu455DErpotZFaODO+kBmxyMmnBi0sOnjjurY14BsSPaQituUPR7/lZnr4k7vtu2eKk3oXZPE7eh7fMb01k1zJcAluOWjqkXW5zphOUmbpP2mfn40ry7PGHH+Mljg28ZMim/Onw7lcapbBbq7+wfxsmtvpXdNl6WGIsZ6WrPBcDlybKYt2linQg2HhS1k6MeJ3vIcnIPMcflJHtPKZqPYkzFZboDcq4bB4ZgDpsazwtU7R5ZFYg51pO6HTEZRs37scI7g4SzIHfOAIBtUIzPkfxm9eUa2k7Ai9lo5jifAzLncvbqhD6NdZWCwvhRsQzKuXibd/KohyQul4qgEIqPn49d21gTfQBwOkUWGmdp7yKP78cXgsBO0xdFY7IwPHWLFkWQ/mnA9LO991mgDKisFyr3wOUOcrlgyB0gF1snkNWdy6IlvdiCsjsyHS6T0YsGBU/jDY153YBT2INOLudauNvqawTGZemBYZMG526Rq+l9NRa8Lrq8G9TeovOwfcLAUsOe1H8FyxlRhmRmVxTmtPP5EQsRhcjlRN06cvytB7J3OljvNWIKR8FDVSEtRAlyd73YiX8cXfasDlNmiTnPUx64fcGiKEPiLv7NteQqSNe8y/uaFoXPx+KZ2Yqlp8288UARvzjwXKMKbfYGhC4GMHGfwAsA38hDHm0lbOCpod3KrO9i+RtGNVwuGEKhj6lmlyXrc0V6WKJ5OcVFBIM2j/vpeQ5n+SdxzidEiIMn+I037RHxubM/avKNESyKCl/S2flAk3pNh6mU8D9SpKSJxTyZfOAJjVqpnPNQtpelM7eT3BAhmASYvRxaCwx8P+nqwqfiZ6UH9BPpMR6xfmKtiMsQ2OYCP9H/gDy9JMa7JGd4ncEZIHCYt9J7GzKI2rsdBhJz3Dvnd9vQRLk3Ukat+Yq76ALRW5Ur7TeLOK9PqC9UcTzTrJcwkTB2Nuygi2+noigbtrxztdCuqsC0+5NdS2vjcwUNB2BO1oQ61pTcSU+wFJgEWBtU6qaqwyCxAGx8GjF0QrgZd0Y+CXnE9lgOE/fJdQ1QriXD+i0qawOZuumbmxBUfdOjgSoVVEkhSHiCXaKT9BTO+MPgev+pJ11oBU0lz0YUku3pyCaDomxop/xJ9O7XAtXWGyyojrUdLXLrq8UFMG/mU0irxSWXRddExVthjl2XrZ4DKVUkBAYcrqAPeAwfH4ekoKRx27iqs9pBwcS3vOQtSRV7BSJmqrIRPYeyXJdX6iXsC1APDDANUBuc5vPHiHo/imIp7bGBg4wSlMGyAnfRlanItXnuU4dK1qGdn3edeA388k3Fb1R88p3TPJxuZjYHWDbnuCWV+1i7UlJaglE4u/WlRqXPrfwGVsQH3qjQeiJ87xF8qDVJfyuXkpeLCj/j6aIAff3JNjjT2lj2IU+Lu2gLbtDF0yJjrRMoyabSVtqmy/aqGkZl4mk8rvdSrJRSj+Nj1eGbABWqF7BudJ06HXexNiLAVIhMyNPAuJsYVwHG02KxL1fo5QIdijmWPFIVyBMwLoKLDMzLuqVFpgLzDni84g4TVwGehphrZ+DdeIO3F+DX+3f46e4tLuMOcwiul4F5uUAvF4ypuL8ODFXMOREHRmnt0k5zYuryQvm/IsBVr23GQmqd9ZvJqGW1wcZtzfvK8mPg138KP24K4EhcCuTthsQEep67N76Rv1Umn3H9P1P6PkE+umW8S6dC+Dk0shQ5q7Aq0YRFg9ci38GJ/pr0rUP+ivJGaEKCsPz+yhZ39mk8LwY9kmntXTykXZ5QU+48s4gWNgwEZF+KloCFAqXJAMhYt2JCRTJEO/KFKtZW4gnVK2ReIENXWHe5pIDqZFX66nkMHnewDCImb0ckn7vS9DLFKHOKtDxbZyBqB/vvZ9MZbejt1y9JO1uUxqnXf7rh6fCAjByw8cMNszHSKt4RuPTn31NUGzxlkrl+xx1jAuB//Axcfy0gV6OoWMD0jWhQO5aeE6Otn+rthOtxjZadaslxU5RxRP991qRg6/zzuv+mwAO/V+D9AD6yrKBWDjt6yYJICw03+cHFjk90tOIuFy2kVsNErLvwY/bArZagSYVPaITqPDrPv0L3nHWz4KK9uDloOyrS9kRP88T33RDI6v+QEafdcrLLliDSjnInH+uPvmrOoPtkQBpNBLlke34aMcml4UYA+L2tcQr1pG8lKZbDTXKjlz8+yCg9FvVkV4YvevxiJ9O1OKGCXgYV/l67xndVHGTmDfhxRZiPp+C4rGzlZZPnJiwAxgdAgPEmT6PP3fWkDrbWxkpEiQ6vUjnudpGpDXj/OT7W34c+UPQeCDCf1pjr2twHeao8UtokO4sfcz+I5gvv+P3l9qmej8Uq1+f7QNx/bDwjOuP0r07YkFO8QeliyHnJv8sJXjk/P1SUWdt2rHbCk+0tEO6xNhZA1ybIiy3u6RXu/Mv8Lpgk2vEFhIMD8nB6TPN5kQNGf6Pr0zaYcZzsVspBc9P086PtTvOFaFHAT4HqxMQw83TB9dPbtwCA3z4/rnIXBS53VIcAuNgG0gHIPTAu4ehwECJUNjuB9FrxKALosrnVN5p6G0TnsYmvy+fgsdSfq3SeSPL9CgdnnjfnodR5HmVh2KVPKKjpw48gT3eVEd2y46NtiuzaNXjVN65E6gTgdVDMwc7nB6ZyKy9tLtVJmOqMiIBR/BoutZOaJkP5vnFYvjXvmjb9U0yVxDHha3GXRYdxGRK6IE8WeTElJ7ECdhd5ii3fmLfQQPrau9//GurTXhPEcWaO/uHv/JAXsXRUWOihy+XaWGy+8UV7A9fdbn4v9kC6ttZ3y08bqYL1zEm86upycP3+mcbBT0WLCH6NOiuMvCCf94ZTHm8XGehTbPAqOhKPHIqcLO4DO/GvxVnUsiyMiNcJa1NaXeLt1P7lfofulK8QOOwVN8RXhWW85RoVR/STlX/I/OTQl/6fdDhGil+F7TCJQck6DM5RxkmIhMV0vbRx7fjPvqoIJssfTcnldSi30URIndZ4vrodIseK6cJh71sn2vcg50rxcvji/cmxO7A/XKakfFaXS3Oa6eQn1QF9t8qMz2sxfFoEKj8FvsJlmG5Sdzga2lQgMu01Yx/QO4E+1R4vPFAUnqCj1fPqGBKCI4RqwoUAi8porJkF/U2XoYKImOWyENm+bzg9ml4d+fXxzqSRNjKJHxsTx6fZc0qbsgRADfuuFQQHsp88CMVjujHCWeT7sHF0rZeUO+Xhm41yYxpHu6hOTC/jWM/nFdSO44ak6Gb2tfAtj6P/hm12cDwGeL6RVeP3mYmd8NV3yu0Xx1k6bzh8fV1P5k7aZ6CFfh/oq3S/4qZBt30X6wq0DiUKWCQpvmtYmWYUcH4Ikw48lq9M0jrhtlzvtCG9rIv0PuqmjAAS91F5F5TyvgLuBuppKPOvTrtB7qm2dWbfd5Buj09KUa6n6AW3VQmCrQwLPXajOa6TYA3x+hwaeByey9uA9M2HyQq2BqxVP/YG0szZCIfCf1ofeUOSm9RS9xw7JshNIT4ictjAIvQrNwcnPDN9LlOW/ta1EV7HWJviPZKWKWWZsEFfVvikAbyYTLxOxePTF3x6fMTHj5/w9s1b3L+5x5v7N3j35i3uLmujo0fZiE0CshBxmNopc7rrGNPHBzuwphQTbkuS3IxPK3vGFJx9+6oLWBTz8fj2RhWlsVZKnyfjf7b0HRzorxTO3zW1tv+LjE43jP7uyQVfm3UV2wLl1UnqghogqbnJ59mz7c68ZQdiLxd1KxlO9L1wcDcPz5LDYoZhWedy/DCCCH6ETIUv2pV6GZ4Tx2BMgr6b8fL6FMphM5zPppco/29ORKdCz75T1WdkcnNE9NcE4VvvPj9NxKO3QNk90Vquc8OpkZez8nN4uNAnXXfJ+XvF+v1Rz3F7MPq15asFdyAWvc1sBo1d9GcKXScZgsjPjL9mxtg6Xrc+1bv3D1ZCZzzaJgoATYgCzYy4g0WOMg5tmAXAMEeVLyTtx1BINgMeBj+WWbvFdibrDx1+7lmDPxoZwLDT4K8L7bLCz7NfwptWLOM+z7I8r2ruHSw5Of3+d0ihIzc0zCBd7cfdU75op1aikHLoU6pLbjzYz7kO6aefHuxVvrzSyf6PT39ZfXl8mxUcNp18Q3rNMJ2S5B2gX26X3c1g/MoYzuPRfQaAa56w1dhUOAB9ixVOng07tl+qXM6FMYLBjZpAJcf37KesjZ62Tj//Lee/Y6GvKStpz47aK7umWI7AoQin+sQK2zaA2AipkhGFYiF11f38UJ9NMxu9bSuS19ESFZEdOtujU0tXgAgHaVczwe8uv6xxcIdNLC7ba7c7lonNLjJt3WGdYScs+4nuHXAHkljj447N1LlpK7izMGmoKitePBPvsy8oG1EVHSlUvT0gyqq/X2x3bgbopGiejrolEJ+ht1cl2dboQ7giThj72Hcv5s8AQAfhxe3MJq6KzPEoCTYKP7VuxJh4XsCc9Vl3zhklf1M90TNGaVcJJv9E1oneDRpI/m3fEkLS4ZxgiYnnPFU+XB6FExHNCZzyKLvlMrVSpLfNlMEnfH8xGH9l9LgeMF1RnPaa7edpokRChFVPYBM2eF2Gz1iYdj5NGAL3zR6nrpdsB2dwIK5iwfdHVqykXEMpcsI3YfOfvCbnNnb0TXk4hdPQhXgl17JpY0E8oq4hvmArRQ0GO+qBGou04g0FCxY/8bWY9LAUIafYcVKnn07HbpsBwKdCR9EPy8CSt1VdfnXeOAeJnIfFWZAaQOAnai2ijaz5y5xrg524HnHWEF2XK8iCYdU/TD/YQv8Yi85JXqqdrot54R3BeFcZQJ/UYMx/hQROnqpen0kjPACdqXwom54Mfscp3VakpiJM+LKNQ7rx+hh+3HVDygt3kic2lPLLoY4Xpd7XG/kMPcdXBqxj0uF3vPn6ZDgdcUTBP+ouWu/+wcHzXFLgODk+9OpboXpRHS8e+2WYHpsBIF2e9/omRdWNck2ofvMYnvTXp1BnYk6Rm15Cd7ONTYOrAP4G4L8B+M9vBPefMi28xHrfa0qG01vNhVDlz/r8nrD+zslp2OU+gB2RhUpRHHKEHjF21d2cvs2X8lsac75v/Vi3fzvKg4Odpksn515+jzwc59Vtozzqn8GtWNEIdKMvn65XPH5+xIcPH/Hrh9/w00/v8ebtG9zf3ePdm3UCHYCFfjd7YiS82ZxWWSW5mXRLjq8WzM+nmLP8SL9L+j4n0J8TTt8ygKe7KqQYdacE2ezLHXP/YRLtOHYn+mEXIXuDfs9UdsbYfqZ4ZlqpO6fZaX0YdJasJya4GwVuF/ikgfNFtT08VZtFBmwrzNRaLLVAnEImeZ9pViQg41blbNwnHetUTZu8uBCMyXHMd5JeleqPTI67Ixw8ufiq9I2aXgFI7IBq6wnPzKNuwkNwffXOTm+bh6LQ7nfQHn08TrLF8wcAjwbGwy/Q3/52hBVCeMg/ba/QSeZQT4VR2+/zlKfSs0ziTZ3ZOq3G4ksHwH/VsHZQAB8m8EDPPlajop+0KN93tM8y8WhaEb+U3iWN6Q5u1iMWEifwo02m2W/xHf8mT+yI1H6e5UIDx9TH6pDnhTTc7VkSrLl4CZS728pE0/pYxv7k3ZkJHuHVvekmwKUCqR7Mj/V7GXOCk/MVsDZCM9pDy2/y/G4TOWHAnCqer18GDuqbwca4247tZYWM9uSO8kfL/NbKPjoMHcdqIbhPwry/Vv6+hJTKVumXFjpJ8sE+T8anfH+Htw9vI/un355xLL8i5cJpE6xn6e7JHNEbE3l8WuV1vAI1ZxnPYCgKrX4W0IkAgmVtd7eHb4cijjToZwDDTkS7vUIhv91gkSUthL0QVnec/oSfLIWdeqO2VCp4CnrWBp7kFPdV3KltC9ElPmiXM0AaZmXOkIveANb1Q9TUEjWXFVDhMgFc4He8exjd+JfV0NmwFXkvVY/fklEua3uWzjcbW0Q4EkbUQSdRij008rvZq8Ovb3LR5063YU4oAV3xBPdlEwBdBvo4uU7ttPzclRVav+vq3/A6jb5YzamFoB1Wxk/rrTzLxvBxlIAJG3sm+9DPL2bErDwxKUA4SIJOylhPqqUro6YbK1IRMob1YIG11VG+ex0X+36l5wtmn67ktVIE6ZDVti0yKdSCcK02RtuACaxw7R6aN0WVW0cJ9jqtjmDV960eL+lTKKe5JQdsrIVECv2lMzzhS/HScaZx6j38/GIbRro5AhoFIpOtyg/4l/xcoAgGFEPWpwjA95uXP3Ga8vpqPj+jHmylQu2mrMvX7mhdSPuFeIB54VfjzXCKR5tUvwDuzPWw8zXqh5R6A6Yx8tBnwEry0fvtpkdbpA5eszvTw5nPfRXhYV9YivlF5fNovw4aEwuRN1UaBEf5BJB+Ip3g4t+Vd2tymoCAomOsMoP0idPTogsxXtAGVcIt9NvxVHM6ThcQ6sB4l4ttbhsjSN3wgjzTTf5+DzEnOtNFft9BLqklmI6k5t7jUoPWFWriTWPoFjmIqflVfjptigDDrkXRNR6K3AyS/XZZNNLZYrDOYeOogMhlmUz3FdaiNmHjJ4CHCbchgZ9wj/yxsccyMP5cTlsf1+c0s0hQqUQzv51cFfHrYDSwH3NmcahTKlnzQRPbtf8TATkOWUwvoc2fQXLMn6mfhO4GYNeRxe0eH1U6Wi6yGRcegoQCrvysvOn8kbKn6veCgrqLbPX2xnqv9zd7hOP7uO6hooI5JesQcg7iNIU5QGu8vK5SA0NvyvZ+cwoh4UqUlMKWhvo4AweHvnJfN/UxPnyeEmsJyzYSuyoqQdD4U7sP/XAam9ipPOjIldaHFBi9gvXVw7jj+DrqZ2VXG6MCQu10mE5g/SMlBxFFJRG6WaZqLVCShs1Wq5bCd7zNdu42YFQDpgIFRS/yD0lO3qFINEWl80EBTugPgSQBTjpB9fU3RrtiGzPzuQAAIABJREFUwRBWAKvcsAiYTrVpjYagSZ3oa5Wgd277rIw5Rkpjp1Mxr1cs3bROn+cmeZ/LLMB1TqhtmPNBm6qYE3h6mvj8+AW/fviAv/zlL/jp/XvcXS7Q6xWXMXB/ueDN5Q5Ply94uq670K8WvWaqYipdKNDY7igr97x3fKqx9LLP/Q+jtlekrtn/+dN3cqDv0u88oNVSp+TcX2YO/xz01dI2RM9uIfpr02lVFXc+sViyQIpgM3FE/EBGtk9IQO/CaOkMJNGu766uC29Ui1ezc6YwCKqATjtROqHikv1W3xtItFC07kZe9eqcaxF6MqxeLmcw4mMmhjs21mMSpH98eXJmqL2GHAvP/k4Mybg9M8i/W1snzx8G8Nm22P3vv23yv7zv5XSMdylXUWpV5XtYfLfrR8/2kjF9KfNQvg87fg8IDvWOQxs8KfXQOcgOOB/Z5L86DbwKOdTm8ibP1yhmhD3lHYRs0KXsS3TtrPuebvf5Zjqbpd7Mu+jkYPO72abg7uQPd7YF/2RjZ9DmaMvmocFh8l+lnczW/B67Nov1+Qr5WFAsKBPXmER8o1DwHeCqwDQnr4zlnFMg72x+AaCPjSZ8PATIO5oVEZrtwkLtOUfUN6bgKTDxpE68YvlnbpZ/3fvPHz+HE/3nn38K/no0R/Znw7cA+O3Lv28qXRU+3P/beZt4OTl9VXK7p8nuhbM7+zJzDUjowrvrPM6SvJ5Lt6XofZ+kuZF0tSfO00PT/y1ictJnu7IWaH1Bzhfn/S/sumVPLbuGHbeaNFsu8HoGVwDy5KM15quXRQZ5vQ0vkYfbNIk+1h2evMgMuWQbMqBXq3tesGb/F4suMbBCvYP06UnisXhpOuS90QahY9f0UbMM4DpXNJCLnZBTCQfoKjHMCSYQc5CrOYP9RPoaFg1cWQy81Zb4QoGP+aZz4jeUj3zGPLjtEOHB9Mcgx0lx3tKmigxya3aAIBwCXt+qrp9A9dukbRPcxvRoZzYhGEv0kd10uH5IvW4+UqT7cT84z+ldwUtU7NjAOV0ufhDXwTAePst+GL+klXWvN4MvMTZiuJ7x3XFhfSF5JmL2K3S5HM+IWji/fQHCgZogpmPMQVo+sM04UsVr/3dz+Ak1SifQ4xvbQjEUR4Uihiv/81PDF6PhQfQmSJwGtrkvSGej/85MJjeF6mnrA3x/eJpUTv8V+T9D8MHrtL72NXqedrgjl0QuYu5OuFinjcXGjhy9DVY/WZ0iyrkz6Sr63HjSp0Q+bAVrInRSvmDxVFwXfu8OZ+V2o8GTutj+PmuNoHJ2KTik/2Rx49qYIfAFf4770jeAOP97/49LSHL4dQz/3HIXehcWBwTxanzRwHsMfDqM+dEdnmPstFOh7O72HeLzgdquKqV1J98cHhv0bA6ic51Cx1RMUFQsG5SBtWHE7atphpE7YJwNlkRecEVI4CuAO55H0al0YN3kI4CQcHOHZaq4RHJed1HpNByk4UwfpAOdWrwNjSfwjQDeCRoHd8CsOkPKZ13R/+cM/mg2sjneYn1xt5l+odtw0J3nnTJPfgv9NhmYufx0v0LGADuzvfucanSS5P/Y8xKvq1F4OHkPG1Nwe5WWaoFAGiGGXz93Otv7b3J407eoVJ1O/DoXuZF/U8O2Aw2UQJTzphP6saAHSg5nYC/rOAYNQrvGAq0EBJBJ3j4ocH1abYxhJ9FpYE/7c6OjsTa8yePPkx3zU1uROnTwMar14Yh4kRXR7p/9FLqcm4rAjlfooZbLB55v6oyP3KTw7033nJ3j+Mel1Q8/69hYpeQrf0rY4j53UzdYUUtNUOT1cTyfCpzJ9uY5qNL8VO1/01ZuD0RWr9sKzwXHOiz5hLURXoAxl+yiDdQAoFMwZeLihyA0HejX6xWPX57w66+/4d/lDj+//wl3lwu+zCuGCN5c7vD2/h5PesVV133nuLodRnKTdc9xmpDjwm92Mn6TEmUvFMj/0NSF2Uvf/fHT7+RAd0bsz3b5XlrlJm+5vwwoIla8jNayXe/+ERMZkXsG0VehrpWk5Mpd2lDJMiokQ3ulDEyjau2IsS86LexVP9mtN3BuhhoJWLFxk04+1o6yU8HrlKxrGUKCuAd9KkQmdCgwZ0y41CcEO9pxYMD0JcUOyjuwOt6i8igfglsQE5xsY9N23934R0jixn4m9ReuSeXwsulmqZlk0+ddw92S5DHrKzpc7IXK6Dx5eX7EMPNv+3yP5QQBWmjI8gUBNBkVB4MsyicSlfP2ujxvKbdPyUHeuVFMzMXDbIi3duK5LcY5w/pcI2Dge6YJpkkWVK8SaFeUEXGZI3FLbsSby3jsnU6ZUYfOFvcCt8m1uZaYC+R8OmbBqqh335Dw2tJe6/ApeerNnzfTYey1lt/W5ZYv11M+UtS2ehXAnJLXdStWtOSxFvsGZDlbp2LOJ+jwO5lo6U/bOEcjLmOaFVqcIxsiChm04dlJ/RxIgr2zzvTDzwda8meaDxy++YQawp3y+0lzB+mNfT42Q/KEN3CdvEr8AnvGXoy57oA+TQ23ns5ESCwqUP89zTeUD00gMNyfjvlemJ5jhY9f/pIbHS6fopCSvxfu1IuVL7IVr8bDfvJ/duC6LOw6HS/vUzW+Wv2MV23v3T6R8nPVqQhPObO1jcWQAZW3uEIA8VD813Aa67hWx9s6fpoREixcvMRmm2VfVbqdKHcPlpQAxwJ/4VPXd10GnuCdHfmOEzsJNjj8qFwguELnxaCY8Hu6qywZdlVBRi0qoDuO+7Ob4935mXiO7YgdqXkJOTwqz/tinUJWP+64/mpP+QZPKbYD1mYLq1IFJndWyOkIQCUA9EJ1knLwcYXEJoaugnakn6FpWR9o7TTp8DxgsYLyFv86BMAV4bijSB68mWCJsmWriLeXrhBw407+ab4J3H2cEWi4Z7zLqEuu2d7tCK11uujLrSUExkAo4zDQOgwRF99+8QmKgQsE0GviRRPvi83s5l5JnE5xx4zSdGY9e/CNFyRf4Iaj212BAtoAYCLZWd3veuU44mQqb2ygSt8Fa5UlqCLCaYNXVFsIyMw2zLEmIOe5uMbxxUAJvHsXnJ7KXeDxVzdDuJNRxXIbPnaH3Tx/eaAGTeRV/ELd/M1lreSYpBO3OTijK8wthoPIL3YnZQ5NoXZp/Ys+5n+Zl/Dlv0VKfaxToj2tnwUv2D3zVrygC8PazqC2IvkmeiDJ239TXiZZUB7O4bMzkWFjIFkX8oR68gHrltoOGp4mNv33LvhvZxCXn9pXA7xc0uagJ4LPSKrp0pQ4wsY/xmuLp+yQaK2tArPw7/cy55r7kj9rfX/hTKZCh64TaQMQHbbkZG7it0vgyedFC2rywQ6mBtxrAzBCLuQpQP/uGB2FrFzvVKz6GFqvKeCRYKwTdjYWVTZl92PeSgLbW1JyQOSSlfiXAoVvfqlRZWAqiSKxyars9ER661puzqiZ0/KTUkTaN95UxhsG0g/jV9QAeXKdhQ85rE2pB38qsq7OQ169eh8cWoeQohZwPqVTzNbPgIFo1flLkTxQNhcoQmmV9/4u7xEgOXRsq/M5DYAbAMfn3qGasb3viPL3XUZyPoIZ8wCU2xPrh9EuX7kEIBiy8I7xh68PByMRLCLmMPdNJHmI4v9n78227Lp1LNEJrohQZ+epzHEfatT/f1tVPlVlHlu2pIhN3Ad0E1zcOyIkuTvDtEN7NVwkCKIjQYIQVDQqbkfMNW/QsG1nG1+cXuZnuUa1GIrZzasm/STi4/uw76hIVeAXAD/gL5gCt7cEyY0UOJeQd+h027pf2nen8NucR+r6xJt/huRknmuWTyRXOvi0rICd52v+sOWvNZVoNEhdk4Y9w8JyxYdlFLZRv/OhvRnFz1FJyLqpwFDMSZG2pvPoFIjQ+CenKaTEB1zXq+LpMvEoF/zy6RP+KQc+/vorPnz5gHF3hzf3D3j/5i1+ePsOF1zweHnE4+NI/V6LGcuBLq2tKBnNaN+gc49qPV2p0+uarlhFN2r8lrQpj6MShuz+E7HJ90i/gQP9dre9Pt+Nz7cDZDIy8vdfp9e+Wwh3Wa6FboT+IGfsMQhqiiYd6VhsiWZU0AMWnKo2QeuKqQaHoZzinxBNE7VLkStwzaHDJnM5fOnl4oKLdqBvBh1nJFnmNp6e2ApBGuHZbYbNgrdnQDFp0BBgB92ycljTH0vDO7OvJaYfVpSJk3j+NcS7+2aFqCG+K+2vTmsf7w2L9vzDj8AX33X+zC6Yupbl7U6udZ484bXhNvL6HYERbNf483vIkxXezeU2R8ISPOY7JP03DavWgMBRDRZCzJf557LD+SnsrFVkSBZa+FvFgq1QrwnAeC+I8HhlnImQ3fA90jXL6lZquu+cP1aU74E8CewNhVZBGgWqGaDT+8C+M5l3jMPCAU+Y/BsH5kUxZV6FMQFtFUt1IDvT13DRWL4Butwpj4uly6aB9/Dd4X+k3P3OdQ931txypD9z5mdLV8H7DI9NX/m2Ivxt1UWo/vzrZ7//fOL7zPjmBozfczCrXwB58NnWzwTLg9sSLCjCUf9AcA9a8LDArI+A3AN6B4wLwf5SgSz9jz9T0Fl52uoWwB3ow7LJHSC+I17CiV474XUYiLWt0g+4EHL+hcM+8SM0AgyaylFmh7+ZBXSjyBCqZ515rY+9/I0TAhILM7XOQ8/kduOgAR+UnOg5XL1S70tg4zyUl+kidfrOuDynfa74Pg4sh/XPrNCsnRZD/8W9CUQJPI0D7968B+QOvz7+6rvUSZcOQXmt/U3QsTsGhivNtVb13SErSmIyPHMuYoLbSZZzFmL9LEmTQm2OHcFViuQ3AhYf7LSr33HSkYoKlc5px8ur3uVZrh3djEUG6pKXX97giZvX9B1Fjgjb6ER5ggoxHfaYOKlJfVuq2RY1vKWBV4z39o4jhk7K/gtZtsLSJjaR+Zc5UbKLOr04aaZDQShPfqsFAheyngwb73LXNcR3oRucazPKMcq0OdL2Larrdi3v0K3v4x3L4fp+gTBlZOEonLN2/4P/ftToIcs/CAYuXYbZe+zYCQc45+ed6Fx/yIiEUQlfWOoSrfYvIjTyna/O9+tE+DmtUDptLaujB1hWWCrTxvEnO9m7gQm9zYKRDvqI+mL9NDL/PPF+ufKuh5PvORvs8Y6ddu2jXmYflxW9nvptrZMilATrMiLWhRoNywu97FPJMc1/a9d+LPhVjyYYzrMZMuKLlZDO9DyGz3fL1W21TCwvgHKgA7aOK9ZSPUmLGpDoCKjJCV2sLWlbtciUi7Drlgrb88GXIOd5SEJa6HSFlzh3SoSTIOXbl9myAuSQLORu+bmqtJYv2+KwkTpqIZkdd/FcFkSzA1xi6RjbylnWQu/5ntRyaxPbrbS4Pi8Kh8Gj6VyPhVnkRP+qVAiJhiYPriHjez2dXs6pP6+2PgPL7vOVh7OTr7Vc0MYZ2+8j3+RMsDENkMfZXC5YW/5skuVmXUT7oqKe4YtiSb+X2oDSiiFafZbNtNHeXyKtqvdFH1zB0+sKul6DoPTwnzTVfgAnopVmQfZFG4+HMmtZ6fPCb18wcNY9wabspimU0XiO+ZVtbAWUHPYa0UWb30fqmcOk03l8DojOOo6NF/z5eS2lS6x+hVgYeACPl4lPX77gZwz8+ukzHh8vePfwgLd3b/D+3Tu8f/ceny+P+PT4BZ/lM8JdPsX99qQUctRD7HeS7NJF3rXRnPJbvSJ1/0Is/ldP38GBvrOgFiv4lH+Trgn2Nrm0+bY9WkZSOzCuKfI/Y2rK+XcS2EJ/ce/mJetq82cHI9cZeuFI37I2C2qeOA/pEsZwXNZowr6ZS0hlFyJWDlnvvhoJHrod82IOsDkBhCPdK88dKU7Hi2P8POWH1DFRRFml52tW3TGY0pNCD1zowjss4b/JlP4u6dyn0g3YdfRLP5lX+Lso+IqBs7PjV6NKlgvZZfqGJOi0utbFTCEAnn7y0DEA/hu4yrfsEGccMk7DkljbyzwDIONryvIX9cAdwEs5mnD06m+SWihtAU1wE/zhLBqHVxI8Q3tqFLSivdoR/8auxlwhHXIGtBpcAVAIzmyrr1i0sLyBwjI7yugwmlOvL0PQCWCTuvQN4Dupo5pVmRSz62Se5cFb/PMCHl4niV/K9gKUs4dgC6OMyqmQhou8ofl6M/MM4ZJ9WRFG0kjM7hFAR9KQDTQO2MB92KSnDEyZFiqRzxufPsE1FxzF+1NDydLMNj7H88xbAugjTmHQ2Yp9kDqrfCeLTvdz6eJFR+068suV51mEJj6rGfTgtSrhlP8qo/ffcJauUX8m4ycekvP8WtkUejmryTZ+AvD2NryftdezlbN+Vnmjp3d2OwCM15yx/hJEf4XO0Scr+vJg38sjrhsUS12k66zmgeaIyoUlRSuitZstbDoLS+p8OwALRHYH6JOh9ZiWhxanmtqQUo95EbwYSC4Yy7BbcZACAzXFlyCbnFcOebrI3czIbQ8cmdyKST7XIqn7UqLJKJsxRGiAn4sxL7e7eLUPTu+lupFDUce79mkLlVB5VrZne6ChIXDK1EPO2lRZvusuwfOGKznRDQlQXKA6jVaifFY3i50mqnkWbB4hEIm6Tkjf1ePI706iVMQomBoKvYfdMWs7CyhCAuGWeycc6euwIt2EDHain+QfIb+ORmGE7BTGKtBB+XR5pWjIUnbZLkjXfUcoLT6Odglst5UuRy3keYJOI3E/GHlcpffBzCbV7vI3LDOqBrLX+u9ZwkqKDYt2wU7kCP0bWSXZ3cK6C2Y8W8oL+upopl2LWYY2e6Be15cs4SIdKjgQNrfb3cNkWzkkiZZOzdC2wMN4qS7EaT12OOYvCj9NHKrm+45db5fLpQrMXPJVYI50geDjAmdvB8HP9nyJofqTwmLxuuOTCuuiTQFqtzmQFYWH+GZtY3+ebV3g3n3bnkvhBCoVxlmjredDp5roHp1STosPnN8kaZRd0FZ/HINhbY+xj5VzXDnOp0+HBR3XQ9P8QgtBSNhhE2FhMYcb/P5+dXqHXh/ti/gdgBRE/RvLkwsrpMrO6vZdxhiAMu0gnKX9Q1XFFAUeBUNtAaE6PIoIg6u581MBTDXYcuNv/AaGlHDtzyXWSXpI+CQRLZ4Np67RafVHwFNNcyKmbYEaxzO0ebHQ9w77DL0uUJ2Ei4q0k/W4LVe4KOkbVddu5ggbXzupN9tvsi+y6fRvjM9lBBZdp86i3bno1fQjasCGFmZdE3vtgX1HfFyh7wPKaOyOyKIArzdwG7i+ks7HIUQ/nHegl+2aH9d5535/SsrQKxUlSYOMB5GE+qSa0zHeGG6pe6nvDJvjg8Z7Deq88YWUIYmSXjX7a9sP8TzxtERtdZtItGx3Mwk3i/dpcQzzbvYJp3TGE69xe4qxO17i1ufJT4v5U5/0/CtJJWrWcDMESIkBBT4O4B+wOcl1PuXUthsE/Nr0HYsCigROaM600iUBspBnrsOgvKm3Fl4JuZ4yoUHBAJ2Xe/8RKTYYRvevdFX2hVt5GmqE7eLzaLyRKsksSf4sL4FCLeKkTMgYGD62NtM2StbuclH69Q0AWaIvbAPE1QFFOglWCp/PADAvkHlApkKG0kFaUnzlfG7jxgEZZgs9qeLLvODLvGCKQO4OvHnzFnf3Bz58+ID3797i58+/JA4npomhsBdQ9CJLs9q0zImxF9J9RsR/E6v+potpdPOHxieV76+bvpMD/XdIzznPy9o5v9vl/zshBiVXn7OBITTsYANgzrrOd9fsHU0B3Z2xrrBcALGDIBUAlc0iOieN0sjSDptcoBJhOKc7bQLWUd9vQL2lIJ9dcZkDtV6UXaeZX4U3I+5U6TN1/cYp8LriKcFfrJpQGyvPBk1tnR03jLqdojkZ7Ceg9uV+TbomS1bn+T8APPn1Tcm6fLeUk+ebxT+rY7x9Ix2nC//0maJruH9pOgnc7escXOdjOVebljDvV6ZSZ0SbcJYIwy53nlRmIeNQRHCZwGWzYlc1AuuEgFLYxIV7AcZZd5x2qLR2COrIiKgjLrU9309uexmtzM1o6cWJMRlV0aKjzZhC6DtD4DKY2HwDII3WfJaWYe2KIQJHtFMENpk4FOM4ylAel1gX/oq2vhJRoZRWfNtIdP/NAF4JGJX7ndJrV1Bzp8Vl7DrfkF8+v1qF1nlStwHthYigdmW/pWwLLCHnGDYlJ/o3Jd3fqgDzjdcbq0Y2+kT4wzf1bMTiC96F/QaQz98B5udS53MTTTW5PsNRrdLoOgbNooKhAh1fEAtcAKkFLVFFbJcSMdtJbFd6UzmCHtmjoZsFBJ2BTW1oz7Lupglq8kKB877FFS/a28p4ctzUnjTkdR41EuJhwBb1RKxuXJyHSBhowNqQdgW25W2yCj29xeKrx4fRdxWtVokCBrsM6+8U4siJFujFJx+O6tDQbTKheoG5qyY0cJjyVExGURh3UXNex++6VbcmmsmeGZr3PFV/cr6DvgOs/DxKgOjSv83+hLozpgfSTnxNpEP5NOGOssmMFrPyGk/wpHGWvcJ+6zn/cuUsV1dak+U9x/88p3KuRJ8t1WxSh8DKbqo/VbzleOPPLkOTp1b5Xt9Uc5qNSA4lXjCxHVOA6zGnn1LwhdD5vXcYniXksFQLm1MdrZruKKZ0iCBOvAg5ORDrXEmuqcExRFvvM+2lo9TpN3dlSzmrgHKqN7QUg6SjJN7KSlMSNM3OxSjF4Ps3h/1jwtbbHd3DMHE+8WbQ3GnJAOfNJsraAoZwmJ+d6DvjZdczwhcLra+72M84oI9FILK+p481aGdFkBDdtMqAcHxip7f8OsY+8V/Sn8n2NQnZtYpaFLy2m9vXTDJG1BXZEH1a94SPaKsCgjcQ+dzfB07SWU48Rb882S8Ec4D1rKUtu7aV+GnxZdKk47Cs5rSNifbYAJHlCNxxjc6BXeSlGIyfdYia3OZor/WI0t7HVZlLfu+6ttQRFRRwa5ChJH2YHGHMLHB5OeUsL8rgndPXnOjrRP1WakoXCXPNQZ02Zi/ymko7vY83Ec49bSrqFBS8ua7Tyzkfvfh1qYd9dllJeAzn+Q5/vGv8Vvm97E771Xf2xOwZXRw6grCpbkbQXjsp53ev5NmhLoGZRfRZCBFGfJ/MOquAaGQ4tuNMGVVAL4nT/I4EHs/lGkoWmhWhupbWLTRzSqf2kuUkfL9JCrItr7xvdUVH6wnMDtCzEnMp7w9KLGAXQDaa7Pym0cqV8l/SPikSNVNSipYYIEL/H5bIMblb11E6VtqbhNuPQAiy3tmVzXIMmVWlJFm7FMWcfkjMGM8Gh1WSjcbOteHJ5NQF0NgoUIo9nP/mtHclPhWi0/6mYAyp42rIcAhtbnOTpt8uU/EowKNO6BAcd/d4+/Yt3rx9gx9++AEf3r/H/c//dNvBAFDx3efST/xr2InqWQiHPZEyH8/S5mtJTNlH95unF1llL8zz507fKYQ7EeX67Or919ZUxg4TZFZ+GrT89TsJwPcj/lV29lkLe7g6sF0auhmNcpiX81xhk2Xazq7daK+TEaqtj3JixWFJp5ctL3Kj3xl0XcWS59uoO8/t3FfNZb8DcrHd6LZ02GGtQ/UKBwmPAVTrila6W5qTs8uVN8OOpLEeeI6HC/+wxP0ubPONtHMy1Pyfmqn050w7K13R+2tO3HUiMg3ewmfVv8JzJX2Lw/iEtpI9bVYoqjgEvrEH+C8kLs4KVBYcEqzNEV7Pw2hTqXITDuFrz5+zdv6thx5Xhv2lKemWrkdMCcqeH2bsFo8+9Am1YFsvZ90JkLImgY2szkPT+dAtvlikAgDiMxIT6H4Okim5InciZzinqu86sNZo7EL0rOvZZfEcUNoQZjIqQ/etO7tzVLch3kZnV4yPG+TfsjPdsOM1Zebuo3rUFjQrYCvzKX/c++IDDgElcmBg+GPN8Z96uPaU3dMnQEWA44CIYuqsCZ9dOj1m2b/RMzeTLL/PJDo+6Tpc38vOICXA4A13Zs6nryvu2otGO2i6y96T5yvo352Lp+JSb3thL9VfpiTr/vK+4NnBzADL5tWY54e6OONzpm3h6ZfCe9Jx8e7K7nv9XPlzksidygqUbLijsrmvl/p2tjb9FFkan4azJqeq1Z0xklOpTufOv5Mks8ycPMjw7YDpGRUKOkHSmHHE3jKWiyv+G8zc5uWbdbFL6zfi7W1/hv6YtAjIMJZHB+mADIX6AktN53rpnc6fcc301sGR0N0rQCeZt+Jn8+qkj4mW08N3/pYnTt6+ubPLQ/Dp8eLyzX8HYPFmgff3P2CMgX9++gVTBkRGRSnxBRaEQmp8Bai1oUL3oLtqyQmTnMD1/ra5O+OPQ56MBgllad+I0V3Q55B1aesVfPg7df1VOy2dgilqA9hKUbpbaTHsFhz0mBXHahPwLz0/Td6ykONFO0LXq4KSVkztNJ9+z/DYt0K2jmE1zh80x1Esi2QMh/rXUY7zuDcbURtN5pcsErDgdIeZ6O/Nu7geQU8CaHpjpSY9l6rRnjiqleRhvrKvYy1Ngh7O7Cg90WlHBAiKVmv3fAFsTYpQ0LXINPqBqkdAIcN/FRht/3uno1XUlLwmscjvyZm0OlVBsIsIfvD7j4tNyiHqERGHAjtCeKL6uVfWfgmYcoGsFL5rg2n13Wn3Xpa6iM4oO8YkWfZZULTd7TS2XRfUmnqIHZtnCmNEmYlVMjsnbxNWRR0AYI2L9yOv1fOmEOwp5FQcYeG2uvhLQ1Vtihjqd+mI4rdUaJMZwQML5oJHok3BA3gHsZBLmdHaHlExggeKFvtSp8JHQXRtK0PpnuAOduqqatKQx1/BoX6s1AAJMrfM1CJS6PA5qWn2WgaJJjooSbwuykHTF7F7Pd4HftkZDKmeDgWjTTdVc1vPiLUsNtp2c9fGvBlVMiq8QrIrTgvSSNQf15zoN8oK2aH0eAQetWgp0ozVSafipOGEj7tkfrWx/KD7KP+8CIXVpNAHQYex+KBI+PKGAAAgAElEQVR0rTQ9kn0KbW2Ivr21A13AjnAgnDQ7Zuc5leodjf8DsmwPa4xYp1Rfmq0lQX80h9PFQe3Yl8T3ugO8ywvGZN0uNk/m0fZZ1uFzwWs5Fk3BeVUBtkERMhdEZ0FgxWwFKzsFG2ykvBtOpOe76ndgzJ+LvfpsNRdjjDTVHJPBy43GSLi8UeCf4rvQCfYtiBv58tr0Ld+2VHLvRZV0w+0GIMRTywKVNQs/74uVnhWYf2wK9nFa5/WIoZu32CHxsSZZslRF0nKxprAppGl6NCKvLeqmIgvMlI04HN8X40FrhgB5+Ip9lEexoPJhijnb58jF44CXdxRuWMcq6kx0CPAExZfLxM+fP+G/P/6Mt+/fQe4G7o4D79+/w7t3b/Dm7RvcP37CeLzDvDxZWe6CMtFgjQ3WVKBF9bnOJpb76vsr/cOlKq6Ioe/GmzcKTLtC6f1OoP21029wBjrQWWMnZOTK86+o5lox6/M/uax7VerS6ytTKNxFiJ5wWlI3ja8M3a7kTGFDw3+Vmae/usp0/qf8vTtdzF9Pz1q5ta9II5SuTMTEtEIgcQ56nNnoQbSakd8UsKBWdpvg1p5pIfX4RppVyuGSyyfMWoommjJvnUF6Ms7+iHRqJ/3GdeAWggjY1oxpkQyZRUN5GkQu5UXFPGhotBnWAD068ca3yJprNEqwxP171FzmgwC/8DeS2fv3BZeM0ZzbNeGOnNjPb3f3qOt0TqYD3YP2OgD7QRi3d29EWqKdhFslTk6aYOQQHJlFi69oMBqyJjgzKCSeW/hYmxSwCYxZMojgD6dt4tHBTnMkJvPjfOJjuBN9VikTictmLKdo09Nv0fo6EGej7xXplSy/dqtjoDhNN/lPddKCjxRHSiJXrCmxwrux7ICMO695Jk4ujlBbN2oT9UMFY5jzHDIx5mGhkmQJU7eFEYWb1+jCtdhwSqsC86u2mf/+6Tie1wWnxRvfMznCM/ThtbPO/WK+a7c3i818pS/7y03alZtnvL+//fmMRUAvTSfm2o8JrrX1ufdflUi/nWDRbT4B2sZQDO39Nt0e8e1YIsM3GgvMma7VTXy+e6tT/Hv/Vf+N2cZRn11FyM3B36LX016y5xrOjKShst9q1/U6wHNNKTA5OARTDwAexUhoh8wzsNaEC2VROU/8ZvsX4ki0xtTAXJpMvJHOL5BdsFZS8DR1qWR3qsB22gMYAp0D0+XinE9QObz/70w3si3AhWaZF7fFw+FAWQXp7LRJB/UoF95/GBDx8LIyIXIxUnUbZxzq5vXSft/FLm3hT2nBNTVz2wpY9Et32gjLpIxmUnxlbdOShWn7XLO3mPc2AiJlqp7tqLYg77qM7M7yNWpGAFl2jj0pAWfdYrswB3xCPXhdgHsvYTqbW9+ibzduYsodqyGIABSjaH5SLbIHNnaYWKeVKnxuPiibOVotlS8WchbaSR6InLqsWCqc4myj+rN08gZayoGedVJzYhFSQDSG2+1KqrU6KevMckY4uqPefuRD9mqr1hrSwvFTPavM4jPIE24pd+mPQ/CzVn3JJxKSYeRELRWR9xHefht0jfNK4TO1NfclQg7s+bzhDVGW04fuaelUBk+gL7u9RQRyWevZlwNwtIHgDcdXEE9AyGId5jwvt3r81e7hNkZJmiX+Ui3bOoVwcn/yhb1enOerk1UZMqrbC6gFJL2fIO8g+FztkoEhEelmoQ8vt84aL74LGHdLkkFjsnJmeptoPKdoh5rY0VK+8CNPGEu5ALcpPFzrGLl/RAgdZYGAsc8dmSD6UazZltA9QZZpG6VTcqQwClhyowY5AA1dE1DToXU8WeEtnbPMM1dUSEW6OLeht1IK78TjOzcAl1eO7qD9UsGlqahsoXm0vgKhdEH28QY2oXsQvvOed4Mz0B7avyrPvIwXQ3XUbYUzL7EzXeN9qzM4cnXSsc3RnkY19Ytwqne+lGxnUWhfYObUkbBI7klaowhBaslsw7dQaSlvrslDVGevZELzskkemXHBA68UgcBsdSz5NPsmWorUPyzrCG0I+lyRfrZbGhavOqepLpKpkvYd10HfXDfvetktL9182pQjDMefMWXn1JMF35H01B+UXtE+nutbbYErpgF4k98qCv7QpPTruqwiZ9k/RRIdR3l8JoINi4+ybRuEVIwcrzMqdye6ukwB45nMqT6tmBIZ88Lzq1Wv5He+ABgKO2pMoBcbs+tQyFBzB/nKrJoVrZqmCC4+1wEonhT4rBf89y8/4//+87/w7t0b3B8Dx3Hgw/sPePf+Pd6+e4v7L59w9/gFl6cJXGaSpgJZVnpEgkdZ/zH2Q3a6/4gXCL6aXUOk8Ac7n9x3SfqC6939Xzt9Hwf6q3Dy9aKljDIkgf6dvjI5E29xKPQHoAy3kMLhuNIaZej0lUZa57xBUbt2vGg24JgUQjgsQjodU+Y1A1KgkNWVAmtjWQZ80yfxdPo5VgM4tARKGvFsZcjmd4MxEZ/1UOAiiEmEmkg7WS4EYBgJK1+s2x7TMv6KdDa6v7oc4Kw4N5O2rBAy+eRoNyJBTaW2kpIRMr5Pg7FlgPBdLZedxSTrO/99dwBffIHGpTKnMzsg5M8CD+KTkpS3GxFhwEjWqxDCe1znATP2/xgJQ8/rMNwipyDZGLAFrNmHvPNc6CzkGGX5RPQYVN/CV97n2hCyONR90YxON1DnNEd6HB3BO9ti4iRpgQRZTDjk6MhlihOfrboWyKjJHAC+UyQmK0PWedkkggqG+C5utT3fI/0riZbl6rZ4aTi3Ztd9H+QpYsjPE+7lbIrypK4b09NCDacPwbTzdX30PX3y4lDg+tldS/taw3SPvkVMnl/GuxcaDZznjr75okTLa+avFTy6/C2v1mJfbf8+w+zpAEUR7XBv0mVX+ZVHi0o7vXhBd5/LY8OfViTJ+5sgdUV0Lez8K3Ti8LPUebHAvIM5iDcm9PxMZROPnOqbsOXQr0ks0+o++K7tAD/pr9W94PQ8tLZXXkJKutNczWk6JAZzfmIqhZPNvqJdW4abAxW8eJEXi64/mTZRTgPY2qm7D2JgHt+6rEh7MnFV9ipmyTbJhVxhb0TreMfuswCe04vFj+DW21M9TF/shGQ+pnwmmwf++5ePUCj+8f6D5TsEny7/XDJHuP4LVC+YMXuqAHAHaExWGMy1dBUp66FPiF3s0Dpn3cpfFrIeQNHIcHvFJx2GQGTiiPD6Tq9p5pDJYyyhvtfB+plcnCc9TW4V5EiIaRhB34M+k2UnU9mdzY5p455rcrRsnptymsdTuCzfxC/r4ipPSf61hbzoO29iHLRO/C4+ubZTTSG4h+0ItKheyEURIgo9pIvZ6L+wRYLhchBg3wHmzDIR5h+l3UrjIk2LJdtbjrqszOuK63IAR8tkhjzx3/iUVSNoNyw58nKhJxcZjofI336tfU0iSrFDmf9CbGwvuIdzd7YTXol6yX/TKbp2Zjol4pfkR3GLkb1yie68pGJ+FMFHcqLHxv9qV/CeOs4WUOIf5rfkpHAiS1/wFfST75ElZ2tjJjbaw2gA0YBwG/fp2oR6e5ane6x8LJQ3YO5MIWC6HHkPoUUaMjyPOi04NrVJ31ajlTMQ8yYMQy78dZKfqZzU8RGMfzp7gxtD9cTdyPvCvlUUUyKQN4m3oU9W3yBcEC/nEwEEb6muz0n7a6o5pHDweSdThIBYuD8ZL2NAh48zvalmA6nrQHdEY2DCImYdYhrE/veyHZe1q5iAY7on2ghdkhFZpI+LJbyYNP7nnpERfeqVZZASlhr+pQpMv8MW9Yk0h0lLzn86V4c0lxhZFUHfXbdsypTSR33hh5btqup255pXemFUSfnRZHnP4BCvRNul0BsOo7aLvj6wHc7oeZrOvVLzNadqW9SRfcw70LmtNyzIBdYT7NuPQHwUvFH6IxvkjHfqf16Alwb3YvRGAWFjcGuabYOyzZMWyI6aHmEUgiTwuY7v2HgTtCP2SL7t8MDPW5YgiluJy382ab9OYUOKSPfZT6DEHNjmCA8I04AXPAH8KMBPL4HzFYnQ/lumq1VcY41N38VCxSixyYOQzC/hnT9lKt2pwSPJP7B5t8SVtihKwcXMixr2ivP2SawqYU8VdkRYBDYv/IWOzD2Crh+LldlRLBjHQXaS6+7JkTZqvK4wv/WAAkNTZJiOvmCMCyAH9Bh+TJkUDkgYxVZLiLX56aKQOfFfP/2Eexl4OO4gqnjz9gF393e4f3jA/ZsHHA93kLvDj6YU6JQcByHai1rsF1KwicqFTBO02yL/7/QHp290oN8cdlx5duubF9Qo/fpEW99W/O+XJP+5nn4rAe4j9usbvJZ+SmPGRkA5vAilbyORZbBFedgQi/Jf2E8K+O5zq6c77VnYs0SUktRhXEzbP5FOM3YMvQCWm4p7wLZfDMfB9BEC7zJfVmAm6ttO9BUQatP3IIXNBMArC1h+UcpoLbtlpXeDV6vDNZ1uvqcC2qSXqcYzOlZNU+V9bbPZrNrCxjA+KQCngZ+47qW9YFKgcmKChGSa5Lv6EwiFJA8Y7Ht4KDzOK7Gjq2Y0wNVfGTYTXJJ5nydCryuMM4BkWE0k5DBTecxAxpZ1cT7VCQsDrhfMOaHz4iv9wjlL/BEFBk1Gu8fgyu2bHNxRSOLEiFR5Cp/sRy0UCNnHxfFANL/vGNqJ9JUdXpuqPzt/CuG+ZgZmGsYrUBrXbJnGiwjXHrsktrLKjOec44jOuxTPqvSQpU0FMeG32SEvkAeYEAojHu1byjilFwr7P1M6Vjpa4P9eTaKBCeYAjmkrHSbJ1QiDviNSXa53ML0G1luMkM70d/XsxoTZ6yv4fp88nzjygaCb5BXNYQtL9FeOtEgLLo5AINgo5HnuHUHZS6i4ouGnEl9UFCHMIzz+abLniv7l3efX+oYHkX7DOsJ0lrgIEDftpNof7c3yFnnWYj9LRXbMP5f7KfrEw/GGw77br7V6/RZBNOT4I4FcJU8Smjt7ihV3e6/1ToC0OU/1CEGOwlf0XRYXdvHFceVnn88nyDgMIznpYnWFnrHJDT8vXS+APtG4YONAhxi9TbdftOzzcL6JuLNx2A6jEY6lw0W+LwDSoRC3+QciqhRcnx+oyCpdnoatYvoE3WnZ+qUQ2nRVQzF9o84v2wgXTnitj67Jrygj5AAvrOUpGYZzYfxtWvhVAB4QasLH7XbniGe9D9ETXtMBCEYuyBE61FrOaGy6vBaOBg8MpH0afEOT8WZ+ERMzi7ZJAru3Hx9HxH3sGj+IGBTUdsZqSINwfseSFGTZkSYE6rZ4Sb2os8qKaBexUT/QlTURi/MOdM220KIfyKk7C68huKT9luNK2mtud5aNFQZN++1HMZvwI9Tb1Gk4ZOpycmUXkQL6tmDOOoMs5AwL6HeplJ7yAoRlEYUw3y/FJMoKd7udaRlU6wbbyYL/arvBM0h+xLjRaCMiiEUbOLD5WetmKalvpNterLpVKzaWnPXqtfEh40CWPh+MXZETTPkNAJG3EOljiupzSXwHL1UZ4nVtBTHhpXYC885rG0d3DT7gKsj5IdfXTdMtc8YSQseYuOpKeq3RY0ST02XeJxCxyqlynErdoza4ZH7i2UGOsXT6+phY/PgM2wHMskT8OA6LvmjDwsiz72tV9dC7eiY2zhdNWhYOnBae9ImAUyHqtuhuwUpzBmIH8koPmzImt3WNSsDOdMnf1nFxqf3bZsj2rA1+nsvKL7gcJXplGlm4sdAo9V6Yfl6SJOV8cny0G+gnxEinyY6Q+pWWZ33viaPMpc2pyDlkAdmoFIdAKQLN6hilWpOuE59ofc701aTAQuJfm9aIHAVqIJYNlnZxs7za8e+49gUwhWI54SWTKvBRgH97fXv+sLQXSef3G2bLBSjBm6vseqajr4/V/tyJRzo5VoljKT2yZo0RFgtKAGgdl1Ue687D60av2IVv7wa0Thtf+EsLpmAB0cwVEMkIB7pAfPH2aa0NyWFVtaXFGlHmBMDFdqGPCT2mbQgZCoja6WNVIQCTebEGUsTtg8sF//XzT5iPj3i4u8P9MfAf/9+/4+7NvTnQHx5w/3CP4+EOuBvAo9hcs61KzPbylEpbdOD2g3BkEVYjrAe3Hva/0x+ZfqMQ7rv0/aSRETfwVRQURKjfF6a/Yqoh+CKZOLHRzMo5pALory+NQz9LtRuXKZhvdEGsWtqXf/WjBQavK3RoTGzlSscYGLBRL/W3s4KFfncDpBhkC63+80FBxwJJTJHc7doNP2lffH36lu8XGGR9dbMT6XMp1DLd5Ygl8ks9D+XSinyB9XMyml+fYjjQH27K+/cPwONH+iqy9rxBLvbb25hgU/7azbMUneQp9CuteyTqDxwK1b2pa5saaMEPjFfJHYvMMnGxDPdygMPrXsDGQU7EK/D05JvejE/1ckHtPJ++8lipMGpZeOBjUh5Ahvjixg37GyKQY2D4faNnWdvt5U1t+ZqjpSFuHUDt6PGVNEodJ8tzpQynUgV1TmPAvDPEFjHejbVVINYukZKvK15Q/aTIWWX1o0B0Tkx9Qh69ETI/ZDfDkWCwDA+Y2FlxBaftHOMdJ7zUprhmwd5C3i7/C/teZtHyrSpvP7zRPO1dm9dfaaUnSyo10evQz73cRk7v8Gp+OFWMl9kKkY5wyCug787v51tc7cNWzwRk3VHOsqAZDi8EblW2JS8V7JBV2OQog+lCf0qSYZ5ZqkCuNlf4TDDbQAGmNDVtHD1QO9CDnRRQP15g+nfgmM5+PQDoJQtcTUbTVREKTxK+7uBg/HU5uz6LHcOpb2fojJDprqUmOaRWmTPh5yre4veVZl/LNwvu1zdXzUDvt7ADIKgoMGspBdN/f/rJJhMOKc+dpyO3kXq8gXlpMjO0e4Ij8IlhCxeLOQG9UNj2C9p5lHyGnYjpVN8RJyOc54oxYDvQx4SI7fiTIRbUZoR9o37edtgKHklF4fpEOtqoW9h0WM8sNfXj8J1EetFfRXxwXRZlBO9Atn1asERZeiVfPOQQ3df0iPT3QeprwwNcCPrChuCz3QS4/dwRHSabMO25N1jdgS7D5BLTL5mIVXWj78Cb2RJZfrPf1G0Zum9NDZhjoZ5geLiCcD9mVwXqfdIsXjgLRG7/i/PNY0d1d2zDn8U8ZXMYqt2Lhi1c8jupVNROIQj+Srs+dgtpcx4bpNYIdpYmLoRKL5Q4mryOWByK7vyMxRIJf/yKVBh4QvePFgAbAsHP6Na/OD8Uj6GRJNfZMCJA7qQXJHTlgKVaaJwoaecV/wf8HTWxsFb3bPXVaeHFK0IgFnWM7GdJHDdHcjwnDHgB3eFVBSNooX4JnKTxGLkEvblcS50vAD5fb6UIBt5t8Hp2nGfPEU1Cen/Gd/Ucm3LoyTXZ2hp7JVPyPTeIxIzLzzgXNRZIaNgKA2WXZB945lnltQuWeZANhIugpH5ozuMT4LTi/OQ0LJ3GxwJKq/wW8UsVzY936I2qVSFbtEs6FoD9jnajEW1TQvkmnWFlL6XjOB3ZSFtNsJjoWMp03ZSyrvFHe1D1N71HzU98aNLCOQw7mh3JsGQffw85dMuR6vg1WArmJlcIQCMbbWup119ua4uE0H5728Jes1eX3u78LOzGkGfdvjkBu7Y9TauVCK7heWNf7Ujhigl2a23IixLzbZkiz3+z2DzPjn9fkudPnQTLoPCFn+17Zo3IEnl3Yz5eiFXPrlvmv2tKeSQIS3SyvFSknVSoIEGm5yVza6SQkzy7BsgmhdQ3kDjipSZoYY7WuGJAL8sRi7mgJDawT7Obo51TAYmjOX0h2bDxoI1RtTo7RJNY5dPbPASQIbio4mle8HSxv6kTQxXz8oTHyxOeLhdcYqzrixQIzaWqX0gct7I1clzL/FPx88INfDxxvv/rp9/Jgc4m8PcrcfFh/OulVdj/BgxSejQESlZGihmLZtGej5glerpBenVF3HW4dL2ZoMnPzYdaZn6FcAYJSO3wn/7WJP2Xu0KX17kCMBznKOdlTgZjQczGXBUBdOZggGeVFN94Rm8qo28pIC4318+VHYTRJsLiW6InWfLnbd1YCFeekH2m6q9sdx/mtAKXjOQ8//lGfT45UPOJRFvkAA+Y28ShT4jU0XORfwMb/eWAMuvWpW27huu5jdfSqb/oO+39qs2IuzZEBTAnLhffaa6wvp4Xn5jXcp5j4enkw8intot2B7BP9IaRFGdkSjrQJZtgv7fMxJwO3eD1JXh8Ga7XXEUKASufwVQ0Y6+9Lzw0bt6GtDwBrmUBbpseZY+4sqwzq0Wb6AoZLAro4XLR+nLOiXmpUO/eKJRjnAeVi5O90cCMir1xG7w2G87k883ERHqHquvp9mffLeW2pt/B4HzSiijOvJoXn+xyvH1Zeaxubw0gWJ/qr/s8Wxb5FZAPS2W/YXquCgWglz3dPZt2NnLc39G9h3DOQWfQsCNYPV/g+8TDcW/8rTNCiZEu9iIzgkV6mIrPMyS6hktkQjgyjFJdLWCxvSyZtTZboVqnnO5xUjKt7aJvdmnAp/QbNB33gSN3aLnea04ewBx1UwimHVyvpb/V4ImmXbE1ulqqMtpzPYHVwqMS/M1GEWHfU+XzY5PG8PjECnNkmzEOyXLCpohv4sgV34WO6WeTEwjZVqdV8TPPRfwXtotOgOG7y8ews8/LeW7i0ewk02Mzz04pmOQS2nmjn5NP4hs2aChTOM1XPmrIrS2o4vrnZoSfUzlr2tku8afL8/O9iQjWn2tZKx0TnysQu7/t+UiWtt+wK6k42kotmJCB2lXrKGymPzUlH4/YYc3fBM/HQ01bVjb4I85FAhnOcwmHOprzq9iH8BL5yJLJQBwgxyc8cLWShA64vew8EzrlkTQUBLjiO1tXKpToFEiiObqhXJPUz2HfNTaX/IbL5m+MLUfmYypJBy45N6NepTIA4EcIfl5lUR7uHp7IpY1DTru4y3kceWshArepSLnLNV58XSXRFdvOKxs9k55X87cLDGecALaQl1sp5UD3J3nPTw149F8RW/RlhFfkTHjru7JxNoPzwXXnORDHGHwBpNuEyWOofmKqYRpaF0O03f5O71VGyYEKz/5c2uhaEMnQa140kstVhx0KMmZs4CvYR0RAyQVU1f5CBtK2qK6Tpe4oh7Ak3F/FCwBsN3zWoRtn+KIPFCg7cZH8O3OmpSp8m5XrXkjynIwQZQ39Ta+jgJwGAwqh4eAhOg7n7bXxHj+ehtQOT1xlFaQH2U5Ff5amRpOnml2ta/lR9q6xOF8+t5ucUPKqZJgPoOdJETBUQU6aNFzk3GBEORXDJlQu7dqCCXWbcU25+NKQmZx+WkSCjelzjaAT6Lrf4G6/4OHUcGrX82X+5only4KPHLmEWPgngB/9F/h6Qvrdkpy6U1xAtrl+yI02nMu4lfSKTClVW7onYNAl3yuq+84pxjoukKPjQ15NtVDjSRtMN21Z5qZk/21ysVvcJRMEPYQFX5mfRjWOR/E0gInD8sRcrApUPDzYBrEqGlHgTWer+4DmtN3nUzOKTOFCuTPd/jPbko91mUNwuSieLhc8usN8+nGiT3Pi8nTBZZpT3RvfaCbs4tW+Ci2/YlmBCvZ5lR1X/f5nSzv4dgjY22V/pfSNDvST1b15F5RQwzB7/UIC4FU+ApwnBFaFvCtEfkd62xHPTtPz812idzvYFwdrGxUT6tunweD+ooVushmrChkbn/AgDwB0mhybaoJmajm2YjjGo/vyQLnxOzxc2MCUOCfzDpDD/nCkSQxV4HJx59kToE/Is9DbBD8ZmgLUDpdwOj8hz2SOGB1jAtNDk+qdl1PnMNouHkdmdGmcFTqH79oZdh3CXdzph+k2nPpkkmIN5aUnOqH7tHTYmq52tvxrEb3zluw7IUY8uZaxVreSqyx9vauXqxCFBm64XhGfe2R6rs8nRd9O8M4zvmf44YpLT9jsqLnGnkH47bxm0oYiwHuJOG6+o5mbITkgrwFL1OlOAJ9wzPKSR5FRbzNke8yc1ezE6T7PuBHJAJ8Ad72UUj812RGVMxagtsaOscOR6Y6c4Wfe1IgxDZ3YIcaV6VOFmAsnjYSxM9XZ+wm4GK+bT5V3nPOAT0nGkHEUIz5RC/V+WKeMYefUyDGAMWzC7hgQGfbcYsXmiRFRls5p/aeaqyYbvrzv6pQb5intvxuHbSPl6R3ORQi8bq6zJppDjsdk02k3SFhlAPL4Csx+HlEAkrucCc4Y5OYE1ygak6hPIHr4n4lExcVlvtGoqEB0Ak9fcLlccJlPgNODXi6Ylyffle6Qn4zdcJ57nkn5eOVsTPqfNmyHfOUjIGY0vrIxY1wGcCyr4zkxLb7UxojyST1uy2vPX2vDkO66mZYMF5hK3sn7SPPTmbw3VW/vv2bV+K20syPHL1bPfH9+l7tzPwN4b4Bd3lVZKX9dCAQD7XDRFvOxQmEBqkRfijNyliIiL9t2McGkMPkLIdoWc1RCkWHZ1W0d9/bYwqAIA6uYA/hyGO/OaEYqCwOm9n24LHVhkxEsBGkbqtt9GjbWaXHbk7endq5HvwlCf6o3UbxWlgO1O2hAIbMPO9WdTo4Ny6P2F9FKJAbV+gi4XIrFOKoT0/WQiE+dzEv9JYLot4TN0odS7WBR7rrwTK5axcQZc8zqLYrTIgNWO2t4eWRH1OSuT4tQHQbfKlfCnqA/wCZchu0sjnDpMqbvnBSLIoIJ1Wk2XtpOIUwiPrqknYQDwCGuh6VHgRGxIUGY2GITGwMTopIOS62tvtb7OQ4pAaZz+DbC2qmp1F5e6KWxB1cMoRr2SfZT5KMSYmJZZpYSP5eMgrMT9ExXKJ5t2VZ9bFpePMKDeHtFZ9WjwcMXKB5JjxKtasBAXQ5BLIyA+JJdEdyRfTkROwv77pFmixrqoGPgMpD5o8aYF7Pz7WvNVqKdcvOCZOEMsMpjEi7ue99olil+ZrH47JQ54pB0w85LswlKAvIbpKiSDLsYjuWo6y7Fg1s0RFIAACAASURBVORCijTLoyxZ7okuhd5z/eF0Ywf6iXchbp+FnK3vCsYoudOaZlu4XsHI8Q8jv2JQRJ+K2ELUoLMf/O3Hrc4Xl7Vei3SHceYp7BZcMXZi9evYq++H0zFQixVKTjA+rP6jCiPVkxY16ePzFWxy1hEugczTGFUdrqJnw9nAgaPaLwXhwEjH6ZBee8dTfoh2uZi1BW9lvOjEgYWU8AVEja0u/i2a+uLP3+RzpqO1nyMNGRYZgtrNO++TT6mUlH1A6RlOLpN8Fgm54y1lI8VPiZCv/lTvnWS+eOlSi2MURePTNYUOt1UmTO+ppj0S5cbYMebsylriBVblkgnYuo5pjbPAMU5fHPXL6q/OTzvEdxuZqhKXnYW4dT4qoj+mxUo4BeeUsCESg3lKjn1fLWqsKkUbjd9E0plRuheEpWWxn/bfcqhJ4bt7vzEGBf6XkoJxFnrIyzVcPChffRPlxIKGmPNRNGPP1W93zlY47r4rXU74L8Q1SKp/GB+pSxa+9fPAQ4eo2LykekOizdFbI+haC6+T0BvVlS3BNCRt02FF5uEPYfNHPF4B/EDjAzko0Wir8hpFqsohJjpqokvFnXSED41GLAJyN57UUc8zHAVXxog5fE6L2t4R0ei92iPA9IUwOc8URMNtVqJLsntU7Ni1hHkisNbax/WyEt2Ter4q/NCLfNkApI93BW4quPUuxuBMd4LFTOboYCXj4yioArHkUDv+h0CdTmeLuHW906ETl3UNLUTe60Gjpzt+wH4uKGKsbEWW9ANc/7XCmnTMenMUJIDqsGihQ3J+TvxChkUOCn5ZMODgkf4ImRnzgQGXxKNL9odiJss0UIEQiBXZxb/wKOsYqpBDcIjJyAsE8+lCQbPcPlIx/4pO9OhrFgntok92bMc4ENHJpg7IFMj0eWAIxrzH0Ds7JlQVvvQbooLPAD6L2h8Uxxh48/YNPnx4j7effsLDMfAYtCnAOAwmjWgrqiYiWIAOwdSJi8vcqbDz05vPDDk3LiRD2tQTsBJXkxetLE4pi2OupHU4kPaFFahK5YTgLwXABddP8J0aPRcH5ssTL/cSd3KFGx9Okj0I57Qi7mbmZ9PvGML9mUSduU3NYZwPX1LwlfsdIn+rdI26AbImN3lY4/Er7Y9aESHFiIiBwh2/m3Cn8Ki/nLCpYnNyJWnZrKqhihnO8+i3q80xZRhrCYfXNWMmLRzoMREGmxQSneZQ0wv9kTGyw000TgUQn1zOcI7iM3IDdtaHQONc9NMZgzuhE1kEtbPBduTU7OdTaKjWJSZrdnQuHX/ROM4z/J/A9clweS5tLCQv4zwZ043cFGlrEa4xJa7929YtJxJmgUhhPEOBY8FP4Du/ZNjYIN60z583w7plf06euKUm/i4NTuKttwI8icH4AOCX+M7p2GfC2qDPmSrCyoor02Q2+K+ozS4uE9kxwVzl0b2gHO9NsXg7Fouv5s8J3w2VWngInlgn3TeiNJvCdBHbdyhs6AgFOi1MuzwpVJ9sIn6Go4P+onBSwHm/WhUKq09j0m1gHAdkHBh3hznR72LCZiCnyr2/bRAzoWIT6TlZDCwyaGfJSH/GPrWbPLvQsfCzs8FSdGx5hk/WMiid9UK29loFghnhniXwVs6umBCIySwRWH+OMqwUA8AdhhvnNbwXN3XNUJuPj5iPX6CPj7Y4CkCuWlhHSGmw8eAQ1dcug2NQkOJbLI8MaTZkEKtkERueJnS3NKSOLGj9s8m7S6sM4Pp+k/SCwjmwSe7uH3X89rV0Rdzmu2t5d2WeZM7yDgDu/eLxpchaDRGlZ76TXj+Z7J3uSE81vO6I+LQBaKlLBeUKEpRpHQgOubfofU663KwTPEnv589LLMQCoyPblOrBZdAUWxdSg5soO8oMjZD707KNfAREygmgCt92trc9B7eBr5jiRmsXq6xTA6ftgE7+RX1nTZSchBKdtgBTI3rJBHJYzHary/qUb3FUyMV5gvtQt/jvXdlfaHaA14sEvn/D5e7GQ7mSTvOnV+k0E31NXrqulVpFNZw4LP+HNx9cVQj++elnGxLcPQBjmMMgaUohw+z5OUJ+u9wPnRx26wyb2BfpDgB3Yk5UcqJjmMMonkUbpjvNcj4tBvcoB4uyoaVWrwhs94Fa3kKnlV2uOXG1E3S8rNpMmyNu44W1OTEqvVN6pNCdQmabJXgwnhHTenpwPXoHEO1OfMmwuEt5BIs98ny5skIcc87pLnMEFsrf5uo6bWpGiQn0KDoaBSrDFi6OkhdCoBzDyh/hoEc55g374dSOfrLLEX2tYcnAJpxi4j/+kdsRqsTbbrZMq83aO3n56e5rp5csQ5Imh2oPfKQVdj05MNnYcTOES264svxetsj5/amZ7kQHkjZFJdfphhss9vauw6BEIcpuZrlu7wkKGgdGP/EUxQ8OZByUknhbdEALre/X1S+B53qXFeSu3TXeA49NJdsU/bU2nqdGCqflwK8SVykqC70xTRRC2aUc/5kD+cCQkX0W+Yaffc47szs0hH4qv6Ub5oa9Nqu9+qvrhvO1py8AHggDiUeWVxvneeIL2f5j0JyTVDuR9Gl2x9q3UcPaLF48FffhkOytnDESsH9TtyDzipjGPiDucFRM8cUZRsiYWk7jqDt2MMamHx3hrOzw8k6+cJwGSzOttQWFhOm0gZzp1GkoFnPPaGPyTcdDFKlk17FbNvFB/bbO9ZXDu9oQk+WcvXVdAV8YoSYGDhS9AOuPXaQ39DKggI/b0w5yHPFirFy0EA6ilCFa/EsFn/0QSv9yE6N8rakpRcrJ/Chs1cBbwlD4b7XRA02eKCpWglPA9NUXTKQNLRLLHZs+yrG/oy0iHp9EiLct6VVj4YO0LNmpAMwO5/lRVxhhw8QZwilLZqkfJgyW1Z3l/VOiK17E6P2QxiSXI93eSng5zADzT7DCqLLDjrGs1Pk5l+HIzMWfkT/wEP1FiduWNiKIN3wB5YrTwMWqB36C7UL/eYO7m/Uu9+1ix5XXCn4uOb5iM86inSJPyPFoa18s45RXAhXN0Q7dgld2ZH8o/IvqhhaFqZfeuYA/bGXrgktBbeArGmKekmsdo7UIAEVattBZJacjRJzUh/tZhuliFcWFBi1tu1DIqRgna8mXiMRksnSSJKJSmqGZlkDihtFoC+BN70KAu2PYHLHvJodHqRsuy9Ncv9hCbYEAh/l2VC/IRWyhFxVmU1wAkcMPHxoYc6QDfUJwgY05HkXwWYFPc+KLTrwZwMPbN3j/4R3e/nSP+zFyWn4MAaaN+3WIn06hvhErGmljq4vaDvfwKXH0k6CNGA7y4pqmVze0Gt/mr9Iv4z3SpKV8bcJU+jP+7pqvNnpRqr5cPL/z0/ACo1MjdtfrfUxmrXl39983/Xkc6H+nb0u3lOCazLKyCxZqmlzq/4fpw4Ylkhk1Qqq3Sb4NXFnpK4m58cnm21tFnpyjz1QUTvTQOCtCT5PZXL/jsRkpbJltQhc9m1gAreUG2Npx0Jr8tYbLLoWVeAWONeezxpjQn9+PDf6iC67sYGg0EQbjIkeVQD2FZlrh3LWJwYRQPgE++G8Y61xZ0EROYsumTHofD1fHONa8ZiTntFOisuqRRnu301mf7Qyzga6kCAfTjRIh51F8RisXck1jDPDdWTcVkNhhflF3nKs7MJb+vcnTahPzF5u4jbNUIcvO8+POnKo+aaO5aVwTZlsRHvaGrySMne/N4XpizjMO89FL+kOLjtMgXuval1OyWW/YNTTIIGMsnwEtGkJQWSMRImtITrtnwI+gkux+1xPhkBI3TkF/NRZcDSNqNy9YCEM4bSmC0JaMFlI2ovwWbpp9Fr+XUdcxM34A+Kw930vS7W48J3amtHY806ibxu0VwLLds9p2q9y3r9Ax68DgtelRzYl+L8AjnVMuPi2/O7t81zFzAHhvu9S5DH1hWPpT2d9Lz1LEGwi6g4Jlb1uJ478he7/0vMRXuW7JzQqZtbirhW+PD3OVO7eT5bHf5qway0VegEB0ynquvWuGhd9tVhbTrr7u2Cva1ZgcVdAE45pK/rVrZdkUzvN475N+pw3BzWhZXp7rNZNutSPlJFejrHOgnZBtuuh9AoEcz0EeJo9n9oEt2ossYt+4A308VCPHhd4Nd2hZbG6PtmM4DFJQUejQkhNhG41YLGkr/nE3bCHbIZBxuLM1FvFKhm8XR0LYOjZEiV1ovD+NaCPRIbmRmFfvk9GEjryBkxqk6AYN/9V5oVUbB/C/Z2pQ+ov65/IMpzwPKEsMqJCEhgq2FwIeLVpq4orqlOhDRofDHpEAIDVBLGIQcOhXl+2xW3yIYHrkgHTgwpxRA05K7jw/huAIJz7pNhGxyTMCqTs91enC7DXM6ofeL9VPXa6KswjVQXifQ7odtisLBFPCaDtDB9sR1D11H/Wu5dRiBq5DN99E/itElnmbSNF0Sy7tMYxli1exTDfxXqP8dHgG/KjhWHZZd8JHu14TkOa2CX0DCVTf1XJkuTDBk+jdZt3WX5FeUrcIcmEOO8GHxAIFyV1QxrIF596Bfq5ZzoqiA3uNPkQMtlwAEB+8hUXpoXJTdi6Fy4CkQ/0RwJuUSUI5oy2D6Hjln1Um5xFRxKtrw04tf+Hcz8DA9I0V6vJnN4/b5r/YASo2NhyA6zxeaF09ZbbKYU50ALHjmB3kxXR+O5ad02srk05onCz5ChEiPVz9Yc5FicMzVpfqydjQHWhpapFCccQx/lJGuMN6dd8yu+Y36+YSXrRPtXbJToKN4KpzewMOz50LqjsMoVPCQVRlL1rEG3bKs+UvkqveBCmEc5aiBxKIul6cwLmmn/bJFgQsi4OTVsOKi5mllf6ijIVHOKqSghDOMLs9KBFJMPIt7Wkr/wOnWvRFbdUsNyup/Cegua0E0zq/+oys3OZbVHHTI7q8aF2l6dhO+R3vWRx71rTR8pnDrlQ2LxZhuo53kd7C1oQ/nJT8CxpP2V6hu781xaKSnEbY2iYF0FkFfCWwjst0GK+vpH6vgNIL+h1SSLLn6st5AZJpz00b5dg1IplxvTf17jP2Sa+kZEbKJPRxbWVEO/ZkLTTKmiF/pIVIb3aTiI1DMTEvsKn2YTr+ohOfPn/Czx8/4uOvP+Dt23vcHff48PY9Prz/gJ9/+QW//PIFX/CYIJTm2siZrq7+1Knpgd+Z7//s6W8H+r9C2tpRbC1wkhwImGnHVvf6mZ5fhW1j8SZKMed3qxBm4cHaZceFpNA1hPXCvJR1tSm2xW3Taphv4FFrS04mAcv4gtrCRlNzmtpH2zA6twBPZ/1JXS/fSPvZFPQitf0ieZgGwqay1aFL2fJZ+17QV6qPesww6Q3oZcEPz9ZUCS0PK/i09a/X0BuS90A6Kd7/AHz56M/EdqIvDvAI1d7PHPV/RJrDslmG4gTOeWWgT6agnCDsQPf8ey7T3vhEBt/Qh7I4MkTOnXoFgeFAzdDCACgmGFQVl6mQebGdvRph3P3aC5aFqBo/aQgCz3OnkOPedrb5brZxHB7xQqDHcAPKrKgM+eoDfbit1RbhORRtwLJOroZwzBlD+u6UrgkBQVuZfZswT0XkQP1aYmc5LXzqq3b9HwFy9/4KStKbTYDxREt85krC+tJDEM1pEUWwONEFcH84IZ7la+IdvmCDodk0WAHFdIch7yiM9t7A0deklwjZ3yStOuJrgVj1ygvTJ//oNY70Ncny+1sm7vj5DoijJ+yl/3xav1oLqctVZn6XtLHbTvZdtwtk8ULUrvEqLgfLChMxQysv23BrP6TRF953hmG1SRYdtmuaO0ODLbu5GYPycmsVfKy7p01CL9UohBYzX7F9VsHeVmfHx66jJkgZ+B9PUiXkXOaq5wtFV/dNkQoPQ0i4fHXZyI7O+G2O9MUWOIZPAhgQvLsKA+6kDme6ZBQcva82DI2zry1ClNARArmzXmIhlusf3vGSsLq+oCNURhyfcgwL2ekO9MJDFDNs4jc274ukE13Dloz6sgvIvlRkCPegq3VnNyIksIJ6sPNZf9QbStyUkYXyS+27MVbkPCC6zR1rpAOng67L11PUu94D5gtlojrCgWLOHqYfQcZOJNpRUdxH/vQIw/vOApbZpKEffxVjJKE2iHXlHPYuHLYRZOkQ6+4DyIAEAqFFC8izyhOH4WgkvKWZAVgkHIAc6YNecmcQiuiZ+Dgue3QWfVyX7t0BWM80UUwNKHMeTonS73V55595a+xiJA6i/Y4RGgyXCbo6W9XhiG9kocQqeQ213WW7Y1iqDwJWGgnmUCHg+NHp7WM8ETR4GNPsLBZlWDa6RUCOKc3vOUMtVHCcbfrtfO/1Ls6ba8uytu8DJKHnMUbzxUip82hsxziI/DWtcLv+VyWtqFIdB583z+he1HzlEMjbkffyIECGcxfgUasfRXLHGPAmZYUMBR6i/QKR4d8Bcg/Dka49JNvLAK3baUw7XRKbfLTdZryjNyV69L/knvNySnubYixzqCLUVFvgpcEL8V3t2M6lMmGzhN4Ta3ffMXlup7iMXh2jzgWnSNN5TZt6WbXxcumINrTdecyFuU0UOxOV+Lmc5zv+6m3jDTv5WDh/b12/3suFtAUlYDSd0xzggupjVcJ7l0cAf4cQJgg8Kz+Gl9lLuUW2iJ2Fa5uz3KCj00JzBqlKvXZ2ev8gm599FYhL2s58tPuUqleRDE1s8NOc5wybKCuhbwMfYSCTsEyb2q75eA+z/5iPiWaBtO1b6xvMTRF3k2zN+0y6qUVCrmv0xZmRJP86HceaptoNSoWnrdf7d+9c3qRfPc8XtU1AP7+ATlrrruTPeauXlve6xE50flqw6cYeu5FijpWL6RkyW7er6pM0JwAaj6486U+vooWYkEuIRUBBE6uvhWFkPNyU1+ekSmWv/NcAolvael8bts4Ntf1ewutWHcazA75WGbmeDIe+gGyhYAzXo6FBlcpnMNSiXpqOnhYiXWxneMwV5HFvQwAd0CmYcvGNV0ZvFyh+/fwZP//yEb/++isef3yPu7s7vHv/Fu/fvcPbN28xxk/VB97GmNNc7Wzd9TfOvQl6vtVBa1LcIrSltpck3V7+nSz97UD/K6c0SMLoAbYG5UZpGxNfk7SaWuG0eoacX2lkKudZyyTBTEL3ZFTuvgnDZnH4fHWS5feUTMhis1p+AXopU1z4mtBs1zEBlTu6noHtZIVThpOFpLfLpKK/GnNZH1sQ1LZXF0adHQYmSDmgnpkiUbRzTbZ0Rn0VPHALtpOTcwHx2rPFAID+gvQE/OzOGKblmDA+gR75pHZoBS54Ijw2E8ZOIDckQGdQF1xCsMW7b+EXb8g4qkFMwzmwCiCXkJeRt4ER/K9VxpzQiyLPOaeNWDXJGMYIIzLqd3wMy2fhX/1cm5ywPzDu7hA7FlVj0KV5BnA4amTUpIcZPgSrOl6ao2QZeSk2uCcZXQiid8t9WIS6vudyuI4IwbbKmNX4WVaL57MFllb8PnYGh2VlfEGnd7GHQfbIAnnGPWD3FyX5zu3VKpRlfuJ/XiFr3dwqYkGC6kKfLeMzfMJZLoedif7a9LWsmF0TOn6B90U68ZbBrbUo4aZhfuPdTUd68Onm1Y1n//N//C8AwH/+8n/qXZwfxbvHb+rUX5E7038L45/l0DmcibfloGdP9OEtgPScZ8V/yIZmDwg9g8uhChuaTs4JO5srbZWbraQW9VCTra2tEFvFfZZd3BzSeVkG0GZrk/85roVjhsBm51Oc0RyBKYWdzim//XeGDGI546HeXTflQq4AYzUiteP7zf0biACfvnxqMHdIabdsyHqJxXaa+jtFdRTBgQikykwbwR2dsWM8FpDJME2n8lT6NPLEjvAhGUZ6vKmdvbVLbkBx5HXuPnfH5ZzmhrCFS6Rk0s65s8sxPDy77UAXX+iGcUDpGBsOeKxJS0HHEcUmVK1PraW+dBi9zwdNZMf5uUWtVW70UHPonUJ6bvR1e7KXgeddc4oHIcrWcnacJYlh4ALzWS377r04RU0GWvnpBNWCLSVL2o6aBekA7mMyTDz8cAQOCAf2gZzMltiFLuqmrKRTDALMYya9RXjuMXwX/eEOdRXcef46mWg977nqj+tCuO+c8d9aF0G6kuyodO4028rbEDhStKNfCn8gUbYyokMrYmcTc9HO92WuS7J9a1+W5xODzZFa5URiyswFqhShitY2eJ6RMIaJOvzbaoWmHJIo75QKUlY1srwHlI4Uim/45OfAmeNiae+pOP6mWmzPpL/t+aNcL2yJIlJneu7bl6HV1wVSJwBHwpZlOH/lDvSASAZGyGcRD+EeTnKpPjztwO6u/Kpu1vUurWIrn3eaMsc5t54KSMcNgDf+7hGQxxDESN95oDraYqop2iSQYRlzF/4T1QHBwFuD4DH69rOVdV+4vtrgYC6NnihHrskFV+cuLyf8OEK2bDw8vTwK2RobClexqCv+H4ZixL6SmNOQWPvlEWgknOe8sHyZNNdAR81F1XvbNW887PIiJ+s7gDqcaiJgV7SF5YL3k4qW0xyg+3Kk5tqTKxEPYif/eeF139HMC2LSoR11hONITYYb2dW36uHHAxWFMGo467eo2+VaOslRu+bPzvOC8wx30FH0S1FHRwt/p+fHgmxfpaDPDlt9y47+aBeW8YHpPfteEx3niAZkF0WZGY2h6iCsEt6DU0rvqT9vG59GqeEuT8he2QotEli+gEpaXrHvY1zf5mcim2YRAeOptiyu2wkN0uiI9YWg6E9YRi8V+JbX4s/A/SJVvC+zpcHDO8cp6yrGbRjFMa5juFc0fwTwD7wsUZf+kSl5TUH0E4mV3F4+vTYl3Tv+1u5n53mhWIierhR6a3PYkrZN7W8pD7fd6ezKXHg4j1OUXQM25TJIVnEd9Bd0Iucc51gxhIOlfnV9PEI+Do9aNQSXiA4V87N6qQ46tdE3ZF0uAA4ofGv5NEe5HJpl2ZjHQtg/qW3qkil2auOY+HK5w+fHRzxdnjB14n4cuDvucYzD7JhhkU9VL6lvo2nGomTja5xVfwXxbayjy6s1OkjZNRsE/Gl4918x/e1A/1dJqxNk1baLkbaYMv1OWQGE4icFPSMkEQkfhBCS+jvBZgpQ2coUhnlpT/7hphCoFi/G87lQxKxCTPKc3ofCWEEMAMgA6pnSgqrrcJxH/p2+V77ByZDr3ckf0PuXCsfnbIpr77mPCLcno5RwegYpXlYouygvncL5ORekS3knTYsdfa+1kl6voq+2l/t1tZq8b//jR+DpY+/rsqIRBJYTigw908gJD1LFDPh55jGA8Dw+07jivMEnC65u9u21JIQkxuTK22sDy6Ask7LoVcN4DP6eF3Kex7swuaRwiRhMtAbDwsLCzxMcfsAmEM6BMe5sN17ykgIXm5CebWAkZmwxbtbBy0sX8bRs0YYV9k1ZPEnVjMv6PicC3WAuEElON44JGUr15f3W6rJ/g4a0u8wU2SXLZ4pycCvtPnenSqxWiJ2dfiyyBIwpY88y+Jqh3axUAOvqTI2QccfhTnRFLkD52nTx86WPVfh6oXOH06+ti0Jr7uayOf3RRvIn3TvR10ffgvuXtPGyC+fOZfzqFxzuXFMGnNLXwruy+6s/juTHy3CSHQ+mmwoZ9aPpY3V2rrJtV7qwODnVYxMHMVGmxK+RgWDOx6sTfSkz6lomtVJtpVhmmVVrzq0JtthR68tspyJWntt3qVvdKazpPI8/RYVs17rPiCliW4HZiU6TwADw7uEd/u14gAD4T/1cHXR43ktMetvkWa3KJ52djnDNcHNZBedPXEZ+NxjoPPFcRCYDE09mMwy4s/ywPOLHnYxq26/6Ge/evHUcO75UwhhBEJ8Ol/cAIBPTJyCWQ3UB8bPOB2yHefyJOdExbEdA1pXNiwgEUv0cC3BX8iNjSCRi1se76HdtzrxeRPwbPCOtXFntqebAKXpYl5uV4zTy2fsHyYj5AXVrTq/Nvntc3ic6mpyJkursaBvOFY/PdOdE5QIdA/e0IKLRFRQQyYUWw0ltyJHywEjPac5LV9+hbkX5dyIe7ECyinbiQNq6GRAh6T0n0XO8YIuB0pbEap5JiqRcB+N92/N12yLzJG6D5labRAiJ8UTNDl16apCsqDdKZaA9L6evnL4HzNHBZNrBigUOoInXdVGC8WOwKzW/7Mvskypaqb3E3tkvgo4NQHNhTvDuDzLwEUX7eZGOkgpvzeMGNJHiOZr5VQsDeiInsVcYxw3kYylNQ5KA2uPf9FlkHx7yojLiWrflsy0CxFKScJ4PCRkseU6pFR/nn+fVglmihzUa24tS0bwtmAjHOdsZVGf0+zq3IjEm6c+DlwMPVtJIGQCJ59LyRdsGviAXLog9YVnQa7rWQrdVcoxXgwWBay4RjGnnag9onhnOtKkuC9RtJXVC1Oh7x6GKjXnmQNczAo9CIhYIJWyTWUtJCqqCPcaCYcela1uHy10W/kUDcZc2H7yPUfBylJiQa2EKBp/VfThU/XnKUeprhG6J/NSeNUQZot+pn0QweeFd9t/C0KreU17koIUjYcDGGFq4bkkcpxPdcWFsTW1Mee9fEM3tdqDzEhR7MvNGspy6p6ZE5Skr6iVsAYO0Rw7zzokuLdLN6gAvRzrfB/yh5s470LOpOKs+oKIy5GICKUirX7Tp0XxOrdqycTAp6yEmEQUqDrpkPcl6JPILxg7Hqi52YNRi3zN4vL6M9UYvAGem2dQXYwNrr/jiA61NJaePF+iFngtsk8K19A6+E10Kd98pdf755tLQCwt5FpdM18tc6zfWL7tfRnnw9yILHSKSCiAYPcMpUm+Q5Xn3cc2/XdN1iojstsJetvOVL4M2OyS9bNACqsZC50J1yROSIOz6NuaND5YWK+DnnVvksTjMyRzoHpErFdSEpk8h9H2U4//NWOgL2xA2Zx2RoL7CZwJ6KKYoLph4gkL1yaczBUMnvlzu8Tgf8XS5ABM4jgN3uMMxWpGmZwAAIABJREFU7nCIRTmVMSBToXTEVerh1H0mU0KE7dZSSCIw5i52/cSN1VMZ5TsrW49xLPwt/Qp69vX+71Tpbwf6v1xayT4ex0DH8+ysunRGsrJfwi8xU7YJR64bZ4Mpk5SxvgU/DDh04yudPS9k42saI4FbU0xSh6AjIxClDNbnzTF2pHZATNphiIeP1MVao2cNNNnWb9bU5mzRZogCa4G6uSLgX/5stfTib/d+WyaZ4DGxHIpU6LlQPv+2+fmSfumeFUTijt/X7VWnebPS6dtxJc/xCcBhZHMvwKe1fbCJ6oYnbsPS/mZYSOVrjnnKO9aGbMpb+OW804I/X/AuA5BjQRjT5JK/OaKR0T0rnGkZuuKkrEzTUc8Axhwlp5zE58r/6jB6SNhjHJDDJmjmIbio+mSNOUtl+k5kEUwFLjlhRsbDifaCx4hPnxU/kXG3Q2K1lPhelufB61uzePOMeGIH4+o8v1oev5/ldFbNvhRVP1MIgEykgwV2xpDhcXqIJLFwqH7mPS4uDzWecVujburjkxG4NO482liuYwCwyM4ravLlKfQk3Z/6t2ffw7uk9f3Um5ttut59QWMi62Sc07l02zPyXlBepF/Vzlh7DpTYmP3AMqQu//Of/9thom9u4pB2m/8hSXHedQ0SWYoyt59I1nzjsKR9fmuFRdgldP2cPGnluyyszcD17Nq3p53ovai47vNTzlPik8yxhUXNPot1232hEOvd2AFT+zty0lFhjqc5bACbTaRJ2FPI9oBrOZQw2kv2x5CBA3am807Oi0MT3ZA2pbhjWxzy8HwNaXlwR4hq9sCo86pHLBoTilzDi/P8+RjmuD6G60Xgf374B8J0/c9P/2UtvTugEOg8ctBv5otG1YZzP34FoRvgL8PBctRCSXH7ReMsdRlYdycwmQXmgnbzKAJ3OMWiiMS1oqJAAR6iL2gBRR0adsaob1siYyZTYIBtTHq2FPEOMZEmyT7nEqy/Jauy9hgORt8ZeUrrUyV/hS+mAe+Ri/YarPcCinSEjALAO+YsSoA7wofAScaOrXd7TsR3ko9wFAKxiEbgzkEJ5zmaqR1O3CHiO9zrmYxlwe3aZgn81W48AWwCCzC7xbo6zJhlKEkRh0RqKBs0t8gpynwN/TAner0Q7LNm6EuhjwGwzR2OJmtmOSJZ7pycyPllwGwLdoL6rUznyxWVrZxwboYjx2UX0SjTdpASWyMVwL9gAgQ/wvD0sVfp7/mb6nt2sIp/X/0jaNFGsrai+aIh33efE5Ocv+NClucYvkgtv9HEqTn8gl6Dxv1MdN8RyLvNB2zCNRb+Rr5oZSyH64sJVigX24/otdJGPqkgdpsb5BzeZIMFfrUMoht+hCCl/grezwUyEm+E2sg18jO6etww3D22KalTygEQb6LFwMCUuJ4Qtftm1gcEYvXFjtTYQ5rLkVRs/BrmCpBcV6HMkQ73ObSinXj3sCxCjlFdguf2cTXdmWNWzT4RoTL4Po7siU9o4y7vBnciTQezaO1uLz8bOWudxdxks/gSsXAxGjQINrVd3gaLyyBvXxwrxGO9zBPlCbzuEOCGh8SvRAQRb9sIRzJoAUDBwIyyOtMZlNQKPJ8RTqXETegf6WW2cuKmO3tap0VveHQDegJkGzdO9Mi1eb4uAqiIj8YlQ6s/orN4MWDtI/HvBio8O1CC39uvQas6vf8PQCly27pRqDNcvXf7MngvaEFjPiFsP4XhiucCCbcyg65nwpwYSD44dUHi4mWJ8kV5JHcTvFxfwQ+lhksai2sFMmPBDhPwdQhKGwiIYc/pFwftk5oz/Zd9tmebewOW3yw1AeeP2oKP6/3FC04S79jjtXGelozjDMrFnIu4AcmS6bfAY7Hy1RRt0s2O+RbRJIp8jhcYGQsouvwyDM2McfqfEXLdBxyxIHwMwcWjJvqytCyRo2kGf2vOV6ptSAnlMBW4mLNbATzhgnk84SLTxZU74OUOuDtw93CPh7dv8fDmAXcP97i/u4cI8Ob+AW8eHnB/f4/j7s7g9zlsXZqW/zghsfO83iP1ao6RbmP9+bTqMdY7X0N733HBzV85/e1A/5dJjU23r2Ji4iQXyTgpYzytIctCtm2bLGPvJhvNzwjtMLr3Gahclq5b4+bK810Kr177aLW0ot3xXFKYbetuQEhO3IkbQPCdNXpZAG3SEiWQ4jsFeE1Zyau1wTuVtACY/RuPr2j79f21ZzEhG4Xv8HMqQja3NSlAs7ELjIrTjtGTQ5Nwp0G/lL3btZu2UZ2Bf37Xngnwg/VxLph49+/AT/8PxS/eFi/vtHJQ1r/QlEv9I8CqCXCtOJcxfmg4szllr1G4ZskmdhxEjgXHtl1sEStBZ/yHLVJzwKXIAYB9wTJmtu4zKHxC1g/+DDOpyYTmCBA7q+Y4/KxzsQmQecH0SZsJ+ISBAsM3P6/8JHVZIkGqvhVd19LaKTnBsdR3+o23YQiueHWcPSfvlPuIYLrO7Ofvg48C71luFSh1mb85nRQRTLiO3MGoEHWHySrWm5P/GaH+7OuCXXWa495lsR3TIdjKuW1qwqdfntr6G6Qk1otVelxzlD6jeJ9L39MofikoX7Q70XffB1jz3ct0/fz1+Ty/WfrGPmjpgpOsvWoEATHlbtPBF5wc6qvdt8oI2b3rfJ+w6CJjToZiPI+ZNW3Z2nck2vJjX3QoOl0UxYQetYknn+HyRWhRZzwmsGti3srKScJT5I6OrFDPLKnXyYLH+Yj//fTz2kCUHRkyhxapNBsAgKiFXQ3nsH+iA2ZvHGwrhDPCFpGJO2QiHHs62sK2GoOuJetRV/Vz3CF0ocpRqkwBPWKRlMnWdPJLaOgJHbMW/KQdFA7Wg5xw9ZeBrbhLdVmnQb1GHe5ktTh+NBbMubURO8+pLJ68jZ2NMSV/Vmy7xLTs+GrE0qgEA5o7wIMzQ1t+wZIcR/ewcO1sBpylii5XilUXsYNGQfZX2pr0l9vBu80jA+5EFxyH2WjH4c50aBxdj8P1q+2qDQ/NyN3mEvyXvG6wiphD447yhSMxoBDUTdtrQ2zbzX4fg6k7dACbSPOJ/Vz37TxsJpL663ANB53pMlG6yL5lC9IRpkbvogZulrKTuek404qwn7Y82dH5bLG1Vk4Z3pogW+n4ZK9b7GzPCXivO+pNuknxOMBnvhvp0EIbEPcOdyeGCV8lZj31nussPIUciPgKxRzS8jUE0AKbFjq6CCphWhNBUE9EanyTJNKjBhgJO1MJTM54+zJsuZDzPBzo0T/KUi8cuIscbGOKDfCZaW0D7TZ3GVY9dq0ckrlC+UKWkpAqHifpLbWTnnFqCwmYsuOX8OGwMjYqTROU9x3uFlY7JZ/Qc/G95pOiHQ8MmRAV1tAAxJ3mKIemaAvTOoN/HJPhP5TcabaE0lWnYXZsOo9W1JkoDRXYixy7mh6/whMvV4y3TALe3bWnYxcGmRxMmjDUc4FFkVxFXO1yt5185ki191OiPVRTRpOJSHNrgXBZXcwW8IvDU+/cYUz+ke5EjyZ1G7LzvOaCgu6QK3PS6llQBnJYJ5KDh0mwhOPcZVKceZ6LDQiOgHV1ol9znqfM1VqEubZhn3xZR+YlOBa9NoLVozkxPxU6NPtIgYtxV41VL/VBNLdVt9BhM63F/w+tGO2W6pjAVeQPfuM5I6Lrkt38vOpcpUnql1XVbiL+ZXYp8dj0y3AGPLWfeYCVdYe9wb0mReWJRaQ8t7x+8gnAv4s70DflrW171bvnaO8FaS0+kLn2w/YmFuCwzuhRG3K+f7s4QfOnsSjpOhaNp81Zje/PSZ55/20peOCZbG7bnhfroOHiNIdNtgLLr7KZqYzgqcUu3NVDYEHmxNQDorYgNUyPiFLUjoqQ0J+6FOydEw50sUinOsU2VU0AF1uYf5FHi0oKQA/XFZdpkWXyWDRxlnK6koG748D93R3u7u9xd3cHnRdcnpBz9uiiBTbu1XO7Q9fG2J/lWCPVHVOwbXGbj2vn+YLwpT/Okm3LjLdFwL94+tuB/ldPJ0WyPDCrCid2UJryUcpPP1frq9kHdCYiq4iVzKkA6XOPQhlZ8EZd4fFixylOYuN52Hsjlj/ZP89QWQzctRQCU3ylusMdBnvs5kxA90L03I5uFKxVvkyAbTKevKlXkNcciG0IdP7kGv4XI5VvE29cfgwUs1tYmy+VpKEcAHSR33JfK0dQfdeaKH0XOAB8+Afw+Sd7duf1jbsT7G3XV4OX6uP2C70Ljdngahmohchn4Zi0+dojBx2JT/o6Bjz2PibbnVYnSJGfqtnLmhUqBfLsaeGdUfZS1zIDDzSpOSNf5nXe8lDtctyZ8+A4gGPYpIJMC9XjxsaM0TTo+Ig0fsmIVWr/Sa55Wnf+a399Sl9pXNTUSciIgJNlkRtYCFFMsmZTYgNGN89WgNmJHoN/iE2Yeh8FD/OJPja5EYs4hof6tTBMkowfCzQq3N0pvQZ3LLbpQTnI1Jzo8S6dSTjz51ax3KpbajFNCSy7/9Zw7kt7IIBb5+1xAjw2/R+0HTqpF9zvT+DqzdvXpPv/8R+J1i+//t96ccuJ/lzd10XQ899+S9rWtQtZviMmoT7TG/T2GiJc8j8rl4xeSdwu5Vw14JIM6/VqH+3uhZ7cKBvmNDf4hzu/fFGOxo6akucJ6wBolrkQ0OjDnc1ZbZWLmJBrbQ/rhHbapE1N8tgnHr88fnE50JBjcsflTEjREBUqs5yWQ/J7FYEcExHmXA/BPNwWCeeSCEQOjMNDoQPevkHttMl/kTsAM22S0P2sY/7PLx9zjlNxj5KfjmeaYNVBYfFyVe6sWdawgXx3cjmrpNUbky8qpfO7o0RqoontEbRAu9kX+YwcgQGicD7xXo0JJMRSj6ApmuzJcQfLT+5iKjwX3gaUdOUq6MvyZlMgHhNf8U/o+SrfnDqzYEAXJaohkcoZbLkG7n3XBbgeR5RFCdLswyGKYwwch+DuENwdEcRAcMjAIYrjGKkC/SuMnGSSpMUyc8kWQ6yFpDqhubRh6eXEE0/qdbOIHTLqvG0lxXyyzhr/qmozc8P05S4KSLZzU7LeLs5Zeu4VJl6uFZN7sAXkCFhouvGUlZusp/wqHNiS9pf4yyxHgqPcmZpO8SSMU5tHsgqd0x0grbvoGQOj3v9ogOMjOdckdmvHNxJU6zIv8mVfEOGtYCb/bLBXAqGLffqCC60d1ag13W18ZDvQJfKKgB3nNpQc+WzEERtru5JPQo4x3ARzQrPG7wg+Cv33GadE/KJU8/WMjA9KD2J9+aiZJSFN+iqeWNuSbnEB8QM9Q8j/1fm+wnedl+Jek8Lj2WLziiAWFRxxJvtRWRRARK4xuyQiOzR0Et9kxVabVCQUgByuRG1l0Sx6RAhehPzE+gTy/7P3rlty3Li64AdGVeliu3fvmbVmrTnv/2xn/u0+3W1JVVImMT9w+8CIyEpJdrftNrVKmRnBCwiCAEiA4PJZ88fayFPSxMj22ljV0rFW80zCwBD53cHRdBopSemkWPWVVhGLR2Nv1JpE3dOHZTlhnf2gUU5QQlcJBiItg91xzu4RNRaRbzWiH53yXuFq4ZkDPkj1TfzVEuCrwc9qJ/OmJd2ETWRnRG/lZjg2BOXxyf3FkQGasspYpCSKZ4YwIJCn7W+afuvOrIzn5lx7oEtxv70fWXTlaTras9z/UKnIh7GwkYqkp2t7Xj8UuXTf8Q45MS66rrFLQj0T+BZHn+M7bwQB6ZmV80xLbI01I3BDIvWzzwMAFcb98yutaP532PxabS94JFPuTSyUYzyPYANibZD6D7Cbr63mnBuL4D+ovw2zLu+IzL67u79QKlBe6VskLS4fv2/XHnX3+f8aiaz4OZyLcPkgCujAwETsA2RlYQjP/CF/iC/xfMrx8cH0k+cW8SH4wsDUL3b4ahNo7JWJ1Xm5fsHH50/4xxj42/95h/dPj5jzgodNcL1eMcYDHp8e8fj0iMv1gjpAV/ObfWKiy4oFLTx1pcawaWGxl/+a40XyxJN3X5Febes/NP1pQP+9ppx1NP2YxoUfSCvGjKUY38L5d4KRJqLtQHRYWmUu1Hc7s4sSKkAt0Jc2w3CexnqCO7n2DWnV2qbyrIg1rRX1m5jY3kN3TaRwhlI/HLY48eiL5GawLK6OJvWxfEcovgd9pcXZXRxxNRQlOLI+QG6yZBPrc0km34oetcHKR2yCpuwVEhSe7dDozDROtEhzoNCxSul1YiySLL43oeVw5AWNRKPzZ+SJrgcB9KMZbJMWvE9h7G39WPrk+TNkU/wGkCe8JDbBC46M5rbOHWrIqvT8MWqERqEHGobj/DwaXEblOv577aDuzZnZNzuEvBjFcxEQUIV/obQsgFD42ZGnztl4bvdujpy3qrOmfuA0B5q0Gu6GOoIJntN0kw9+Q1rnI8f48UY66TvATVFi5k7PGly0KZJDtsIcfFYTT7ZhNHwjNoqa8j2zBs8rgO+WAshovX4n0YTiAqx0tQPhAI/3oFa9PxJ10Fgzvy5AvyHdyXf/3SlAnOTA9WsqxM+wMO5fkz4rDkOwN9L/tH++dmO82+f51uG9lVbVpqUJ4OLfj+KLRvx65i3r2aHVESL4TFg4aSP4G/rHi+XGBpvlSPb4TWMo/6HK5IbQOX2t2/3LSwQ/MyNXLKDhfMidbsYEZEMGxZ5+Ejn0i+SH1BcJuNiIrsaL4vS6yEI3i+5AalvKytRrFp2T8BNFUj8RuKxymOOE+QCwwe8xHxZdZWzAJtZFN6BLhAEWfz82lCHGDDfRfqhlJdKlYEHJadNtlGQx5ZLheq2/H250HBzItvdfIJAtfBsKF1lzDpGfaBMtbOkogHe6cRCtP0p5TUGPFYULhRtzJf0dhEdEA2elcXBEBM0HSnKFCIHD7YA+RfAJwMZril2ik8707OiXkZk4DI5viflURFubYQFvVFI15enFGGvvQ1yxIy6rTeUa2IZgexhpQN9E7JnYITP7bnUafmeeoo3xa8YvBeGThhphkKoQ1q0MkPXtbjFS5Any4Y4bqtUGO0zo0LxVZmoYjYMPOp1SSPAE10l94QqNRhvMYSRi0JOHVjHzg+g8cw2BHbRc5WiN5mvPMDKXuarWFNZ2OR7FPGBJE6eRhIHuUNX/pdqB14tBat3sVv0VaBrJGWPCfY5IbtQHgVRofGavKXPK2N5qTlx5nTxWbf8hZBiXZh7Ov9DqSVbgcwi+Xiujv/+LU+cjjMQ2Ag1HhJFuPG7AtRJNnrWReKHfJ2nvQUflpf9elQ1l7KDlZ8hTNknhP8Z0warTARa8CETH0kLABFO3HhZYYbxa2lqueHRw/Go5+CLckczGxrUQOmxv69cpVWvG2QlnHO2tOWdEGMZ728FvYs50ibBCjuDwrN/EpHMjaJwA341tr6g9cgnpqoy0YmmLRHW6sOr9WvcMjvKALieL/bxZvLoMukisqk7ax1h0LKWGdr2iXw7b/mR5Yfd1I3rJByk0EBygKVPjKHD+XgqXP+SBqBFYAAePsWCF6aBPQDOi5/O5z7+6R/QUY+pta+xjTphpS6BXiqcz2J1E0dcw3oJ63qA25rmEDnGlIGES2zNIZSF0vlAig2n4XkUZ0QHMYQ6fjOIAZ1VbD+YHpONxh6PXnixlswly3GsHUn3M4zAMk3urhDsSyg/iK3WIK+f+xUT8GcCP/nmrjysKVnjOVIZvSqucWRrjNUuQkCDV8v32hnp2onupAjEeDdclKsCsdodLZrOt3T1t9C6tusovl3asOOZ77slq5kvQc5/sqD6SzwuviS/M70oe2Tuh90HXre2szd2rFFCZJk/jEFZKS68wpIFKykONECQkfEQ8EkFsmof9ag4PB2ZtXq8WOQXYsgoDVXGZE88vz/hZgb+/+Qd+fPMGT48PePv2CWMMPD094c2bt3h884LPnz/nlWr1R7hvPT1iNqGzhFxC1hF4bCn7dPbshA6P9r7blzso8jaJ/+HTnwb033M6I94QmLzYBA70Ti1F5JW5UhuY2k/VrUJl1cSUG/eXa1sstPKdM/jYAEkjOlV1ovY12GTNtkhGfiay5PkK7pD8zhlm3H0+4r4N8shknIi3d1dT0r825vjKAPLG41md0YldVaHlhfIht6s5hFv2mWhXV/P3mvWgHCMrcEAg7pw0doqeHHSb2kk4ZG9A/wmwi87snfzD3mmcaPXyclRvQ0Xl7SfBCQchZkkIC+dZ+s6LnbYDejORshFNFvAEdL00Zas6JAw/QIrKTJUpjebwhfR0JSa9AlGRQ9W3h6Pe6NeAnTr3+85lbJAHN5y3yL5ioWwnyDEgK6TEY77wBOW2D+it1eHPoo11XL4mNTBu0H7icwHnCK51Euia5wyIXm54l8ZUO6E2FRWqNUrG4tz+JBbr29XD6gIiESkg2tKiiQT7oFPfYvSdjCTqz2tjw7KmpQWXCa/s3/0aiR0mAKKTaP6o/YNnkfdecL+nWxGPGCco3Snu/E4O8t1IR+Hbvwr27108vKKTnNZFY3hX+WhHlmdxNM5OunVHpZOaWFc85Pmcma0mWbjKCJf5hvmQC13fto5d6iB59VPjGZ5cYRcnu/F7rvPQ+VBAKZsZ33MzfiLvE6X8fUfrziQCXLS+0+M4xWLTNRipy5c0nNt3cwwTyIPJMdm2tCdrWA3H8H6nxR1hfc8w1MmTJDfno1NpTAxDrDruU0/UPpaJa/ob9ZmnVgmPImZATzhO5FWKVCffbJBPd/q86NTZ50mqVavDFPNEkt8VWcD1lGx7ou1stjntv1PHoldkcE0Iy8JY5ZU7Sn2sXhCM8Tr0ro48zf957pmONZOWDXNxAjvpm5vz4n4DQIYrFBE8DDOgP2zA48OGxzCiA3gIVXhEBHi7NsecXjaYQYf7ZjDaFI9QhtY4b7dXwGYvyUMdtLzqZuLOEqg5ByANWqqSKqeRl2/ADYs+EUaSoK09pr0+plGfO7J/VEPCrJ0+ub+sQ8f/0bvEhJQh2dokZ0qpUpEnXVCFzHVS7hWSvZSEYWQozxgBzXfrSWWBlD2eB8d1QGMZVXeW8u9hrAdsWfVhwUB+aLkDnSbpeOMXzRidRpmj2qpdZn2tFqkWcsiYP3kbFZbdTp3DjejDI4OEjjzISNy5G2FbUBGfGtyM2waIJX3BeUQqxlu4vhKP3rWzb7f9enRAvmjxkuhVGM6pl5IGagE4fH3WuQZ8Px41Out88DaerWbCwOW0p8EOpfI0A5RGK8WTQ6TNEA982JZQySM2ywrt8EjlD+hpnoURO+54tefx3aNAr0YYsXeDeJBX5jxDaqnCSdvHgdyi985n86o4ADKGN2H7FSXqBXkCPpyup9I6ER6hrHhB8k84X3SGG6eny8gfvLvGtQzxWIzehZ/sCxmgubw3lupQ1MO46A5PxYmlupn9kBhzXm+lYi6kUsQJWuLsjQdVfelssH5SgaD8aGNnPI8yUnUDSoeYmZfYXMsoCmpRYiDDY8/lzEkaSbeSGR2JaHNS388cbne/i2irX4HwqKcjy/rhnZlSegCQd41DqA4Hc7dNFBGiohuBp2QEjjltGGPUNbh8kJNIygcg2lj6nv2neXTUSGP/WrDPozJqju6R9Y2cGNAP2jpJqzr2y6dkZvVoFXnAYZSHJdv9SU8+/fsvcgL9F8aZ+n/nTpCUl/TIiHSkpLO1JN14/ioQ67isNBptr7gVJL2qmnN7XLjiEsbKCfWxrfWCoWq1CbV3E+UIPqfLed+nHH6tigpw9QX3tmGoCfrL5YKP8xmfPn3Cy2dzTHx6eou//GWDPDzg718+4+PLCz59erZ1u6/vZQxArxVNdc7UuEJGq5qr3ppkFWDfm472/E6rd1oIh6RE7V42/aemPw3of8SU3ArJrIQetTOMLeTLWgflz8lDG267zCRJVi2EFKJgGgkYZ02ugjSeYyp53igxFD5tsYCQvzVB6g143/OP4OHKVibBRkr+bO2aQVViAxgDGFfUpUxL/WdCiTdhY1F3KKwXhWIpmy9W2Kn23qTs3uaCMo3oodOe1Nl0HR/k1cAbz3aGXwZGenWhtCYOFlpbvHEPtRpWznmhHApCgiawENQBkwDvfrIT6Fc7AZaGdO5HTjp+ht4vxnN2s06iW/8oHI0sda5j3+aR/ejB5c7S1ki81gnW90rqNfuNdX8R4O9+snylYeFlHK9MUNcxZHQJby1YUYYC5/7C8bxBHuLO87jvdUAFFnoHdqpoiGAbm/GLORsJBP0UVTk9S/A1Aa1oiH4blkqbiFesVDTa/7pUxaMNqox52N2KzKKAHeUNEqKF+0he6+0o/UaET/Pxj7uE/RSnyua3HgR+nXYijP62QaZAw5Dui1ABdgaCgvF+pS3CK7b+CZCnfFWBy/Vkbr6y4XhPeogKxRTxI8ezXyOlfL4386+YnhV4F5MOwCPw5cP/EDuII+rP9Ww+42Za2fpvKe3kcXhNf0bNgVC3uSPfwiyKb3b2HpzDeKbVuFUbIVa4qaZPsLyQamMHqyzgkm6RSubJYKUsO+hvTnGbLzrF9KdZp7oQz7Su6SiZuIR193ryoHfiYdR7v8NXx7XuJVxsmwlcgrxGlSHELnpSGEtE/F7VsAQNoVPnYqfnwmi+DYxtAI+CMex+c5U49eT5MfJPZcBuoxYoNsSZ0pDY8dc2WGNsw3ogZ3wj9A/1mM1O28M93jZARmgaPTqK2fTFeH2MXaJTeMhpP7HgDYMhvO69HI6WqM3IF44YaHFsUiuqU270TDnfdPhojgUIR2smWf5SqO7pPJ2RqY6eK/AsWVXAF7Cj9crgjVLIk/x892zxhM1xW3j2j6Ec4MdOyY5h4duH4PFh2N8QPG6CbUw8ioRfI0QUW1StE9c5utGg9T8MteKnPgKJC1r3j5BGuNDNFrKK6cV3LqYDghtc1BBhdVwD42VMiRmu/n92gfkIgHJYCljFl3jibLGIp06PB59unWr94/95BocjTLQVp1CZmnKxYzKPAAAgAElEQVRpxWHUqf5YzhSM3K7m3cyB33g/on+B6Kh79L5E8P0gs4hEkLDnP0VcQC2IcO6Cn1FreouyYX0RcghudJGNLThoGOVyDtiBCJLMr1WvrxcG1bYWyidicIqMPH0OCUO5Ow94iIdmPE98CpozBOEBQVdJcPERDgs8EV5wny5r4Utzrblg4vxz/7OWu4Gv6Es4D0T/i+9UnAmien/O8yDbUvR+gvd/OmxNtQHJGv8MOk9R4W/Xk+Fpo4NJuKgnrjAwx6Tivwr2BS6+O4R4j1TkkUVqBhNHGbFtgvH93XbNhAIy0hAap47h9BAwT/iJNimNoCLY0fgR/LVN5WVEVihLsjoOKlS8tVX3vzsfpuB2B2w98RB8aZeJ/ByPzkznu13l+54eh0CXxF3oqArm4R1ZpS6kdKHtRuYfroeu/XTaS71OYgw1ZUfKEi+X9CzHfaiT5WhtgsrZq6KRADP0QfXvLSx9oGRqOU4USTlKXANk/UjFydedVgsJpYP6x8qzabRQdFVv8x5hl1U1Hp1/29yUVHdR06iInUBpX22KFf3Hi7ZHJG1sWkre4mPu8EJpTQMQX/HZ0pQ7p6FcNzXi26Ms+CTt5xwDB1ujf1T7e4syqhdy9vNwqWc3bEftfHNaKjxaV7aBQUVX4jxLJ2pOUR45wSv2suT0xZKBf9b64qSNNuYrtEccc8mvBQI7e91OpTv2kPbFm45r4Yl8CAoiwkjbOjyjXWWo+ZFi6kReEULX4BpH0BSZ6k4xwnTBjvBhQJ8Cmeoh3GuEBgTYjJGoqu0tj2HbnFBcLld8xsTz5894efmM65x4fHzEmzdPGI8bfvz4M/7x4QMeHuwEexjRxzZwnX5llk5cEVfTYaEdKdgRvNoHQVhOvZJO8qQ9bdkPPgsWqEteOa/6Pzb9aUD/QyRWWOix1HsLkbiIo1PmuFTNCgYbU04LrIAgBZ/Kugw5ADfbQmd+96adshGVr5V6u4IKp5kPSSDvoTtOqwF1eCjpafcuRdg65f7cIbSjSl7EnMOw++I/DxShXAoFKP33ab/O2jxDUWrbnDHiRIZGLPTX88fmQSk66ETsv3kbidXvDtYSII3aqs1ug8dONseRHM87P8JOsUltfgtCyy54qM4dnvI3950+qV+5KKVN0LZ6CdzsxsBxjDMAlo2wSW1r0AL2+SHAf7mg/+sG/N3nc7lrt9xJ7zEfd8bzwrnEKsgXXeYS6BtSHtJWxgY8iIetFTee+wKk7QE5zgaTS0ClpWQ3ZijE3xihmnqMKZaklKsCT0AeS3qeVA5U//386zCsD9cXc6HBrj1fVhba6y2evW+tK50KXCl6hl5NnoSijZlRAHTE4jXGMbzQBZCr88QwniNRSJ3fYeMXSTlkZ/JpfX8gT2+lJLLGnOg98ZDvSveP46vV/CL57qwoFwnx4Lm/+x5YvmaM7k4LHdxb5K7sRxmdVytglp2Vb6+djHltm0MlWmNnyE8mu7OLqG/SuxzZ3SEJKVnAMqyhgfPfQroseajcjmet3UqB4cY3x1WcGLkOg5NP7G8AdMMBkZVYpWmjITvd8UfH1S6nZh1luZkjQrreRWupt4RscwPBMB4Jcb3hATZMYTzfhjmIpTF9+An0QbIsLfBQANPHVWn8rCfiQFOfDvTM3LxlvAn9xe8BQmLkU4hEiDnTA4QrHqRHXKlNyjPahpg1dHzelDcXZHkTyWWO6gJqOCJqqiGZv32u3+vZ7g7MaDVxJHVSaSF32vb2uhg27VCQ7pEbx1L6R9+E239n9UfVYUKdMtvNO9K9NomQ7JbZQk17+PbNQ7YPsfvON8EjxE6gD+DBe2l+Ia5fDdooCnYlSOuS8DgkidrDXfh2/74P4izt/5zviLkvhVsaD3VUTzE/HJ3qxq0K1xxgpUHthLc3OCXqT4QHVEl7HfrFAXztjdhnGFhjZjAbDeMZEPPZX/m6hQ/PjeBFkoUdJu+p6/BCdUe9OxBbXcFzkvsgOQsZf/mtndBmQ8J+Xud4E2EfroKJzRU+tf2SytCLtvXlYjwFls8zIvCxkoGhUv2O+QVaRsaYxWfDisFRJ7YJFpHuhJR8mMse3Hd+M9VYNDy38RB6xs/rZ863Rx+xL8h1tDlBSMlCoZ5JOEasuHB8asd4hUd3ihUDrDuwA3z6eA0PHi+E6Df4lF6Oxjegsr2DmRNZsbnBU53XTS0jagCc+9Zwbu8O5vZcIIdwdxqPfsSEHTFvvDyvvyUhhZ/aRkalybQNMyIkbyA+zUMcfQmYmTchmjRmrjLSdirqBz6a7LIqh+tSxf61faobTAQCzStlUOOkEUHoAFgU7uRgrcd3lu/Ds4eQKjQJgRf9znzQMnhzfgTItCMVe3cRnjdepLFZkzb7gYTqUxvXgz4Q0dXAEb9ociNVPcsXhvpwLNSmpLiDBhmb0ihMzno7RxAB6qQ5CL6GqaOXmaq3Vk8tzwk/heT4AAkV62Uw31xPuDKSB3BWmaJo3SEIGxvU6jc7p3LenbRay7U99Y7FA0l3nijSg/Ce5Qo5V/zJv3wC8BcsBvTfQqJ+3LIBNObl388sg1/bvPMv/szXQVarooBbVI0bfdmXWts8BvIg300AblUuB9993itYzL6egiT9e/ApWWiyoNA93KqY8+oycxIPj+lLczWKH6hJ5d1kc15mOT5BFQ/jAdvYMMfAFEHcjt7qADDnxOV6xZcvF1y+XPD2/Vs8Pb3B2zdv8fTmCWN7MJ1GYPNwloxWpf3y6Dkr6Enu/pwF5734js/dnDjId/YbNARdPP+ZKP1pQP+jpCP3pRMFoKkWvshpIau4zpiEsYGZMauWtDLV3Wxz7iAUsiPLCHYVpFLBHUExwaXm/k2SSSIUPQ2YOlyhuorcEoI7gPdpYdiGVu/XUMgcvsgIRZgY486YhwUlkhudsgztrdSEVDPO3gI+4G7daRKpkYpUGa3cS9WVMRe6/pd1899RI4KDUVhHft9B6aDTwoA6k00PROjB2BDVCLMKAX6I8fTPt38Bfv6nw9cdAmLz/FAZCggYOIcj5qH974tEqUV2o9NcpHRU5Q8dqJPc8Ywz0+dCggV/4M3mQd5hF+/+WyF/m1SdlJYl8VPJHuFzMOa3KESHhwObtX+8DUCGbbxsWxkSxvBLN20+hJKTRhGxuWULb9qQGfC7K83gayCUh26eZgKgDa+hrBXuagvPEfaiwJMXeEv4fADwT91Nic6BeSxw8DzyUpnGFrVn59Q2JvYcYzefaBFnPD/+JvQaJ/T9ZOi4QOmeXRWBPoiHFkZu7kBhThAQ4KoQGXXdQf4dgrdPR3nYuWtl3EnQXPAI76vG/o0p+jHp5M+4NuPRf1QKtH45eMeo599n9fxS8JzB8aukZd7+UnQWVeUmwVony2rZC0GgTmzIWo4EQZs2JX96GwtPktcHdqcnyPIbtCmpUiEgJ2B3lzmfuarpVqJ1xyHpC2EIYnFVdx4KauG6OPNFNQ3HwC7aTe9AK1/sLTbpJWJcl/PdJnaN+8OAbGKOYQ9i3/nvQVyWDUjIdA1ZZs8x4U5N8W8gTvzY3bHXxId1v7YHSrT5W0eaSPU9Df/ZQX8n9p3zAvBTR+FMJUvY2OHNSNGn2nPl4N2xiY46dQCuRqW86uNp6BUaQAe1dTqNs3FpFpDA6coklOhT0Y4usQrFsizmuURLxAcYXGHx5YMQltukswDYhaqPW00ZJf2H8oc+BMEDgAvMON7no+Q4b5AMhCDi95kPSRoOQ/qDDPP3gBnah2j99hEMelLA9AKtvqqq6dROeOYr6WOk6u4+mvQR8DLbkVAsE3NS6I48OfRWh0jRusloyzoc1TJMZ1z23TslZCjaaD54Tc9oJ9mFfhdnZSAl/lf0NZcenKodMdXs94h5mfVK0sMQPp9Z82s47uIe8TRz57S3Lxl+fd0TyI/O5wy/1JeEq/gJ2dIW1BrdMQw/QfAzkNwNBEs/Fc+1RT5UfmVIuA/Ed7waowvuV7W3E2lLHk4DYs6+4awm5ohS+JTCb8CRPJvqZpwmb2NjKwtvAfByuN58LdWp1aNy67ODfMpv2HFAEevWiAYhw3j7oLGK0/rVQr4t2sr++39RPY1p4wmsdtEpVR6/GGpjEzRXl3qL6MtdOAycscmtfrrM7HGy+IdLNh1G7jDWT2DXt3DsVl9HM4WHrALV+2pyMp8L8Qpg+xsHgWcCdV0jK5q0wzjRweGD4VFvhpBKmhOr4TJ5Q+5/rRD4XpmWXO79sUhn+XzVAegxsGPPALQ7VvBn4/FlXF/rDF7Fs7BG5uh4kLttBZ8RuNT2OrwRVZjcVexhi9aaHrecPGcHAT5QsOzHro5lRa0xB6In/vCqEGwtN/Pwpg8F5+f5gz46vd1XCDl4Oe3n1h6yt12CsIGUP9KAvtSt9Ldr17vVnARADg6L8yMif70JlrVGXEK+P2scXMNxiv6m8wycL/Uack/uNDnytoY0aqNX91pqe5x3ljmpqerS/vwQoOT7TQm5A9Y+d1ozJEuEPxkCAdH7Ph2aQtYHR2hf5FnqQpAWXYhK7MXzAm/mPlNqbqViP7tyh1E6WA7D8evkfoarFaZY3UDtCpT8bY2mLnDYi8actZzi+aAW/LmYM9Tm0Y7F4dU5PUJVrEyB65z4/OWCl5dnvHz+jKe3TxjbwOPTI56enrBtcfBLTLfxtbPtg8dpekYed7l4XLyQnuF1tOnyIBzTqDn+3Fdwnu6E5D8m/WlA/0OncwlyxH77JhfVwZtS3zV99AAkof8jm/bviuak0znzHauI17JJwaCyFqDvi0J4u75SbNriLhRexHmd2/gsvuqLFkiClAL/QHit4QKPVHrriyy/Dzv0lc9PcudCXQpHCYbUH9cvvBlF73aGgyPayoaTdpvaEEqJOGxpBAfiVPRkz/z3fwE+/+wb+AJcf0Y7SS+16C9aOVZseh95+bK+o42EDCXPiRYujT59+6mFu6/3/dSZMELs/ewbK+HNLe8BfFa7M+lvE3XKwurSUOLVbuDEcDimheIxG21pPAMDQ9QN3L7RL77NMjaMze+S2TYL4b5Jhp+b8I2BxHnclQbMeUXcQWjwSC1+VNyLnZSqOGEYTgs6Gy0qkPjXmRMwQ1D6i06/F0RcysLxP+8NsX2SdkpSVM9zimCZPL6BgFtVE7+/TkCv0Os0RVIj0sAFMuukYJzK0K1CB/cNYaczXwir/7U4ggfryGTFIOX7aB59jUjS5YfAwvxzq2137bUwmK/xQHHa0qW/9wJ9gJizbP/SdEeDz2oOJfeM2b9LK9/No1+rPoV5UjCzFoA2pZq8aPxYlnJUpzu9hAGNRcBeuziW9d0ufMZgztJr8u2+4rmwhi5BIrTmSkyFCftvSJ1mdR0ioZ5Lb4Mt0hQMHJtIkORPLAf7+BF/vdHpUvXIcOIyUjdJJ7C85zyM5A+SV5rjAcBWDnzmdDSAuaWqg5Rl0TEhbuF6p5ITmceqloYgKyGxazA0nRKSloYd0N/pKOLcX7xMaJmSrfve3Z5xc5jiOIWnaifStUpbHo1Bj4HuNKqgoPVBR1q/1fsSp8JqMVFwqU4/yVD6RJw6r5lAba9TKS1tMfjWTjmZVSLQvMqDeSloRthI7gd4MK+1vrPRwrtot4qs/IROCPsJdBlmaB+j4gm4SyIymgVLfgm3B3NnNBLSvMDC1UHayFv4ReBakaYzpEGATVsOu0j7PZLvSTbYNtiofDN4BCJjLEQzQpiI+j29lBR5b3PV7Rtk2vUdV5W8+dK0+f+i/hr+nI50RcQya+hBzBCiUQHitmY+nwmg+nbAsxIGLSwxjGEYZLpp5XnTXiRJb9eDpSjn6SfRgR8BfDyCdN/8CVSRKhT4sbMZPTrSPxv8epgvegCEcbzWasMuTCBSDF688NGgYa36ysDuAprYSwmyl8YrX+vTDu4zK2widMfo9lk1pmbNjbzjXJw+HC8DZRSJDeY6gV59Txw5bYUKkDzCd80H81xybnKKSr4Q1zoVD7AOTt84j/42OiKWyv3PJV/cRz6G3W/uuthwfueSNeuKfgj8xDDZgHvDZSoBYk0dRkPxlstR5jBp8d5dF4CKOJcyzttchzfpcZQcd4XRWZ/xnODjMQwkW8P4W3JADtvgtmtv64hnefusCwjoiqyen5dapY/o8run/cl0gjWN7eVUXgWpHQ/9G/Tmw5hjyfIoDtYAdcZ8NY6n/nKWvFsxVgZ7XFu2Zixwq1o9fjbt4mCmSYPZeZQ676bT3EXKlT/Gkcf2lHOTIwC/T82P5uvOiJ5kUBwlP6PgoDJKFa5octRJgzmyskzRLL5DteMx59jZ2p8MjN+clD5Dx1nlxi6zp7+phXT/dCcA50L3F0yL/kB4PkwHc/G7m9cisYUcy8a9ktoOxl8dUbt0ou18W10xH/nhme5wBATT5TGbPi6sNnNi/29ObbDENRclBxYHEuXGYn55vVo8FwDm5YLLVAieXCeZuML5+DTH0yEDc058/vyCnz98wPuf/4mHxw3j6RGybXh4fLRr10J3EcR9Utk0eF2ZfCykwTemteh3kluP2PdnOkt/GtB/E4lJ9IirvMYKiWsfUXtb9wjC2BJsKF+tCloazonxHCqMq0J8Y+ZJhLCg9pKTsKITFcTfRA99QZz5UPNHwR0GVP5b5XJnu62N2IArhSny3+JadipT1EIVxwal+HVj6XnYmP9BNQxHHEj2BQQkFjNH7QcM9J0VZza2tcZlRU+STMd8L5fDebQ4CicCoj0ADbZdg1nX0vhh30KxcYpuJwniiy9MGNXLnGin9dggmeFbf44YlXbiePrC0QVkbXi0hpe+LrjibAf4SOO57DKhE/I6apa3NqNDePf3+zr9Z4Z0Jw1RahGwvfsrrn/7n1Z/jZUvmOIQnAIYE6IbMK6ITeXcqAsa1glsJpJk2/LkOR4ihK0kzgyHPg+iXwnvxJx2SmcOsVNGqwLnoV7LW9UqEI8Q3Op15HUVkjVDsVO2KsDjHp0Nrz/BDOufmBkdZYyZGM0Tr2gLMIIhx0rpc6k/+U31Q6mPUDKU6wSuE6rX2hVWtTv1EOf//bZ0GcBjbO1rLdzFFtjhhbnbCASQK72c54scU2K73IVlDM4xejJHWDYc4of4/bqJ0nAaHTqQvyod+DWti+l7tdUzGvutpTCic8qf/07V/Eh+38qLfX5d358k9og/bVUq366+E51Dl0cuA21DuE4qN53HP3ck7zrWjv41RGKZKW909BylsuQ7KV6RjpCncNrG0nS4PMqDDIFcLcRDhlk/G4+YisEm47HAcNWckMIEFZ+E5NRLqAJmK1JmqDx5Lh45xU+fyzb8ShIzotvx3cgb8NmXp8c3UNmwyYbnz19cjzsaiz6qfAqmzKEkV0QhQ1OVZHUgZbpkVjpRFDxcocP+xC6KO8E846s6GKc0LYz7cB0nBLDhVRyf+7knJn/iZE+cylL1q9pJeioTv/2OOgXehxhjMijUJ7XN5GUTA13nPZfnDrbB1qrV6G5NU5eTE+V/haDTnZ43l2a8H2p+GQ1GCdoOfdVft6uI1Mncx0nKWFuafDgl5KT19ktLIqnYDDnqX2LLiN3XlHK1XpLxutuxPS9lHnRbdUvUJqB9ascpFB8f5pGu0WQl4ngccOOyz3+WEgmjFg9F4FujFtYoy4DFwQfSMQCSt0UVhUnWw89j/SNEV4ZD2bVNqMnKS6MPfEudLPUnBTvN1a5WtlFMeggDO9FW9UUbj/4RAx8dZ21jlL6YAQeJ/zalAnUa49PpoeG9d6tmWStHMGc+r1vpPnObUBkuf7R5FP8WNtKgW4znuxIA8OLt1sRiNeBrUo49p9SNC7FnJ9VrOKifwU7CeB53wjOOAIhf2bGvmamQMXPQ8M5QFo/9Nxu/tHJp8IPA41UxpJ8JVSKoyJst0Y+InGGb/cjx4AhwUzXDzTJPzHak9mjsgBzJBRUy3oREb1PBy7BBIfLZ6bm5syRXBWzoLaAKZzWZrFzoAjE3k4ql2pSsJPpY0Ul4fJLKdeGzmVdpCI1argSmeDNh7GZDfYW2jy6FU0U+yIGoss65fDxyiy1h4Mg9Uv0k9JbKz9y6/muUqlWreOiUNKKv8017fau20Yzuvg4AkPrGema+0RDoxLkCmJecgaZSlStdAJAjKDP1BHCdNF9WGmv7UdK6RhB6n4hDNGnHTE9QiG84E1Q0Ip6cTgdBQHoGhLbHWS3jIecEqo5mvAuS63SyG8DDRPUpsAMmxro0m7UDqEHtWk1mC9ie8LoBnau9F/avqSTp4jVJJntcHM2K/WRrv5X+P6qGxDA5Rvbach4wD9Ml1+keUucUXFc8aSfOiZdx+XUed3JkPrwAsMp32XEoKqv1nsYpvnbN0fG12mF6s92hqaFFGt9VoCv/gEfZUFS4c/8dvNMHjKN3QDUPiOnUjFY1p0JxxTavkDlyzzWi1ok8WKQqVXy5XPDx+QUfPn3C+x9/wJuHLa+8GsOvXsvFFeizy4Q05qOizgQiuogy2aqhk62IbIkItrV1NqMWePKR9DytupWJ7edVg62T6j7/0VQ+Tcz/WctgXn5HLdm9oj1dM+hJXZ75TwP67yHdlCOsgfjXJtmLKcJPsTQBmwzCmVCWQQnrnfGGL4jcqUz0bA/rUGDIxJxXTNmAi1IRSQWyNtomBBcILqDtpNvI4Ukeh75EbdNVAd/r840jNC89Vb9TmT0LRep0SjZw0G9wPQJgeJFh12ZvFzvNOdTv4AH65pNXkcoDnZgWgcY5mzQ4royLhGSXRJVXQpUNuugCM0KIv8Z/VtV7jwv/PhzJsuXzFtqJtJG2tSC1yJ6QCsHEsKVAtncj5GhuIJkP2XV38mAPtxIsdXLbT4BtAP7LaSE2w1+G7U76rlbe60YblZp9XXFXYOcGmdB2gfAnwbyTmUv9SZ4xzhbyvI/liofz+WMHc2kcFYAKtr/+1abM//p/ACiu/9/fSChavhFaZ8pRwRg2r3Woj5ECKn6gUH1emCFVnh6rf6GIOOsJYWkgBa+qMVYdboMRYKr5AsSJoggnHrDmgtXq1DDQDCXa0hrX5IWdDwWY+mXW/MT0HewALdq8ppJnBuvwZHclbRlThVrEukWY5+Zdnb9DLQQC8aQQBS+Hw7brwRWil4RHpwJ6pTvrfXwgiDNm+U8GMB8t1LtcMEcYxf2kZRjSZdY1IM5sh24ABDNifQfI4YihqDGj7kzqqwpdV8Dyb9dHTotyZCigcG+C3D1pO2fRCMs83E4qtjgN/O+uqlx5+Wv13dnuVydtH+cNf0V6PiiTRvWDdzf1nV8qhY6xPl70qbiuA2iy6nS4Yp7r1XgLLx6jUMg/rk+Aro4v48DlSeZB47SwxHQjepVUmSxqxoRdoaCYcqX2pfKHBCZjfjyVZX4p/wDx4uZkuCYtfcvZakQFSVxNQK7Of67BL1A60zS+LXNA9AoZmxscN+sfAGAYT/BrWcIOMHaGGMEcdh+oDj/+nXJvM/zCT1krMEcA7TpK6FILX1Cxk2nR/pDNTp9b7GvTxR+GNUFTQRUWhCXHWKDzEcBm+t/VHEnTQJzH/1ooFVT8TtcDpkD0wUZJJjBmhpRP4/cI/W9U20HnExCZButw7wa5Gi1tarI96HoKxoxNHw/sHXqmGE1er0Zjw/FldMA4Bcn92QxF6wZliVLf3lWrS1wypq5BFFuqY8xPoldBGgLMaVCr7dRHUDAEPJPemzXD89GJYu0n0o52DUK9ENdhpkq3osuGcmCb1kuN0O6lBTwEj3OdX2T4OsJhhOkqcxg9XFyBViiGqoVo3yRuZXHWViEODUV2J+HVnStjnWKnuL/k+CbC4k52/z986zTnrSKnUyzUUhcOg8K6TUefTmOi2ofI6y6HHAV9JXbqozMG2rAHCfXAyzGKDaIhdItL8DcE/EjjRg194EczT+CqzF+1HqhztvGF+DY0w7sjjG5Sb7OZ1BkX+vP34QQUnc/NQII5r3OKMREUr/Y2+QoLYT26dSCKDGxAOd3CTqILLKR7GuWa3HJYhfqiXHkMgKToDZnDUTB2pJTqMeXh/4d/Zp2jcEL/7DRSRW5IOUpjEvd8N0OxFB8r+n/J/iW4vjnctmH4/ZBdNJZ9kqPhaCyx03G0HeB0PAoAefQIVVcQTuiKNO+tBzw5hyxYMus84O9U+KJ53Um8y7ktlCfSZHohGs1aCa/Yz5XgwCmxXC7EIQ8mQ6Wa1WVYBhHwMqpqyys3tAdnASR/x0l3i9y2kSi0QZ9Z1urTqBvh6txTwJCn6kM+uZNXXHNGLNKMCCg5wkaljCYwVqNFwblGx6h4AUG+9at/OqwrHYTTA+1NFrbFR67Km5PBcB5cpmpT+0zXSyOTGj+yfYk6DR7vBjR8zpFmJAMGQFxJEr/ReFftExR2a28sZD31dAYrk8RlyJM13Hu0lTJmWPS/DNm/U3sUOi2CTNL8IEascV2e64haGpWJhs36mzwh4zPYGLiRK06r53xOXAVN1NVCkSzrAM9rBE4z5D53iEtGTabLB/FJ6MsxbhrOcwS9f9/Zw7XD12WStj4BIBchhent066LMZRQXQlAPWz77/ziJMXriDworpTm/h1XIUUQ4QGQa5/IeLRPtKZb0kWZyHZj1FDOZRTYXTyhO6z3ythhIdvx9sMx1uf3YZVrlwgNyasJVpaH6YeRRRqiW9d2cOfv4h+iHJXltvQuaRW/iPcttLvT96IfuUa4o7mEtOtyIQ/SmcwEibFOpHjMtVzgVKHu3KXYXC/S4TxZ3OlMBLLZGsac3QC9zCwXUbRUJhQbhsyUyxoHfVSRV7jKREYHezB9f24CbMOo7vIFgF1aIV+MF4wHWLQ4UVwAvFwveL5cccWAjgeoL6sftkc8bo+4yOeSZSKQhwfI9WJ73WyothOVdtOj9yOGYXQsx4ilXEudnFjHfqRQ01DR1iP2ofV3VJZabU5Css9jGXV5rPRJvDqf6km5avn4+8Gz1YSia5QAACAASURBVOB9WrRm662T/7pbbQUfs99/GtD/HUle41B3cLCWrxYlzaYqnXpioXkqfHIirlx3mQAsqNrk8GeNHntbxh88w5wm4HXuq4kfeWklBy5c8BMSeFViVoVkdQTwP8kNFemTeDfhWPovzGXFdZSJx3Yk1hbL04XC2cSVUOklcZ0npBiW2KiLMTt1XAjc0F9uAju8Qs+p2LESwHg4UgRQ9YSXwigj376//NVgyNDzsZEDhjO64TDvjndLc0rDuB5sVnF/xDciHAJxfANpIMfjT8Dnf1qFfoosNs5jE4k3ncoRQfbNtaZrDIpe1s/jsocp55F040+m5fcpL4oxXk7zfJjQv7KHo2D8v/+3GdGprK7BRutSSic7o2ELPzuRS1zZfM/XTuspwdccLxzEI/VCAdoR4GmvuS6qkJSltFalK5a5jeg50SVt0JWyPgEdwIdlnv+gduJQaoFmC3Z1WrLNETLpN86TNIqDkdVQRg6ZKfWlaS9FA6qA2l256nefG86CV87iowSbbZDaAhxz5gYRRpxQ32zTQgCZht+E4N3oJ5s+8ilY0Nzu3vjKfVzYYs4dZlOZoeDvSCC0pMHuakYuVVSo7cDvvTIahd/rBmyX+8v9kdOz4/HtwbsVvV+B6l8+LbJlZZ/0apc0LNrr8309/dnRCoD0m5ziLq+VcoYCmLoNoNMd2OSaG7XNyE3zrd05GZtKkc9CidQ7K7BArI2n6G4ei+t0s2R09mkYz2FnoZXvuHw3vWeaXjEngK0EfpyidVhUBslpi0wSm8vRZ3HDn+GJFcCItkGAsu6R+UJ+q+s7AcdIx9V4LiKQLYzUJRcjrCtc/5Cr9fXFncpMmm40VtqbTv1NHFWTcDUAfQCfFeB+SsqtOiGuMnzDQZCeqOr9Qug82lVLr0+9b6IDOis6SEHv1TmNCeDe/cTvpfpT2obD66044pLuha4syRKxB0j9LSmpBdBOoErrU07S1lcFHe/qxWF6Rr+fNOqhdqltlnCWNdqjtnc6iDawNpV9HgknBnKeHUYDEdnH7gl3ozo8pHuyHE1DjD3wd4F3xHU6bOwOWItNNX7i45A2V8JfC5ceuQMfe2StaMQgM4u6QaRMJeZ2UKDQZrk3JEQ3bUyo3tL/yr0oMD+4L4SH+LqGpkXCJ7nBG2v1Qd3VbJeMfVmVfUmJEzwBcWJyqci/TgJDAMQdvIl0qb5WW7Uu6IZfWq0tskloDUDg5sAzRe+sbETnBGnq+Up5duPTu0LteLuyNBU4mFye8/ey9jacHCiPDERkjeADaz2930Q0pKPadHqp8es5Y2LUBEq25XNxh8v1N/PWnvhZY4cOv00bxgXhRyJqgv9rd8Gj8HLY8grnWZ5l8L7AooBxsaTBlUG7I7dQPVLOPVA2qPcoF0DcHlM8IOA1euITgS4jRFO+qQhmFbHm1Zzj5pzFXxM0N0VOdRuX09YM2AIPboiXKKERXMOdm/r8CxUi5GEFHFiEopLu57LDjOzqsLtDBHg4imfsRo/p28sHXIJuDDZcShodbLZRVVHHgOkabtHP+8sdl7rskRXrUXcyce4Qz2zBithjS6N6jG0x5Oxv5Sna6Jzefw0kLMULiVsfsQIhHp7vQlYsxnOvuMhyKRc/9epd0prPAU/7FJjxtw9mOI7UKBX6Gi34i3KWqLkVuE06UKoESwWJMRIsK8xrim2o5LeaFJQ6jBv3Y0u1rPziPIHe5Rfis9SPhMMPG1DMJdj8pC6wIe0s3XpHzZXTRwz6LLSJ2j1MrTKa/JH+eU/jN/j1WdZlrvBWvXC+5kxBBXjPJmFeJ8kCl/YvwVtsCO/vl7Zv0vpS1UjraouqdGilX2URdqi+JRePDOF35VphCXm3TLUDF5GzJvY/vS9Bdqme0PfAXS7N2qfPT+YBzjvSNqDwdfWEDMGYgA6Bahy0NEcVcbkefEoDB1Pdc08QawqVOMxlexAbYh1gv6dccR0bvlwv+Hz5gpfPn/Hp82e8XC54UsU2Bh4fH/Hm6QlPT2/w+eUzLuOCOcX2tAd8PXwlvUGdr3Z8rwcU9eDb+fhEWe1vw+HqcODO6Ym3nTJv8M3TQl5ClX7j/PfKz+8h76O0lmM1Jr9LNi0NBrBUWoqtOLbffxrQ/5NS0x9XSbbm1f55L0W/lk1JnAUTc8MLhjrTU6ifzJRUMlj1l17hvQLdGacOM/aM4cxxlDeqCQBn0KmBBtBfoTjsUi0q7USUvM6EsCigzBdDiSut7jZ4sfEk9JkKeSiJB0IdA6Xx7br0/elA59npR7rkFXS65U18F8zpHyHDTxOfaNqOS/uQpT7//SOA6eHb1TfH/x74pg3JpuRb+R1Od32vTqlvPsVn9VOTBBf190adxwz/rtSUubUVwfzf/4Pxv/6v/iZoMUuZkSRPyuXxrKi+woxJPbRT6CAD/epVmruapIDc6kfyOYbV6l386uulYtkBZeXYl0O00d+cCVN7pPmY2vTVDepA3OUgHuoxFj9Rf+IIvjDG6yxIU2E5wEks2A8qSTRd7aSihsE8YE+jnIA7K3ukej4f6znMiD5jCanQt+repTC+e1UabbE7uBSGp5OhPSbNaJtxcIeyuWpLK7PJauJEMeGg1XGkud0jM1/Jc/b6u3nvUR/+DWk9nf6W8A78MjLme1Iq/N8KSBPadzzH8bMjGXiEHKrWTruuSwLOtPK+YvzacrIgVmQowtd0jtPU+xf2/B0WVm/iKOr3nhurdh2yLM/oIYbCEz30JdhCu2sarjeIq0m+9acDdjo79IG5W1CFd3ntLbuRHHb9SP5BMMaGKQ/OZtzg4vwkQ9FFPWnTEzuNwHqbTvzw9h1EFB+/fDCDxdgwRjkCTJ3Qq+Kqpktr4ErghndCbLBMj76iAFoo2OaMN/xvAzDNbBR6uvgwTDe8Wygn6PTweI5fKZQnz7XIK2E8VEwPkCDuH5HQSkHRdWI3/gaNkEy209Au1mF4rtN5cIde0rm4saRxovWjKfvVqTV0IxvNTZJPq2b56ICdqTwxH/J6gTB0+8DFCY7erNOCxqnGMnjb58TmOGSZzAaAdkIZSMfFVeyWfhNzczTDMaKGrG+HqCUv0LbqadO7l7J5rgteFV2FQ8CnvY2jT/LdPHgbPYlWgo+KXz1Qbdun98SLj4Y/qyPGXFMnI9oQIAwzO3RpwBK6pv0yVTF+LQZyKstOA4GfIYP6VnABIAPP6/qsjVnJqR8BfHC+fNSX2ijtdMwTQhyfYewuvBI8RKs2LEJ9jXqinDFr4yniRnJv1tf54rBF+PyE5V59IgF74z92oYuczpcxWrHUdkE7dd6hJe9etBD8jG5aQwvEdxjdeH4pOF7vfp/J+/SWoD/qwYu1y+vHlpTmRXGgYu08K7rzLkM4TjDFFNV1qXoSmlkaGsXD/QswOTJK7NVEzR5hDSp+bQ2S79aJZ+QtbHEi8EhwNewo0QORS5vlDo/A29ZReX3qua3V6nIdNG+EO00Om6sbhZ0Tns21cbYdYfk6P3lDNOVjo/VbvBPmyBBNsGlYS1diuBJvpXSkQTuql7hDvuqFow8Ew/ekCEm89j8/FPBzjgmGAqVPr+Vk/UmcXZjC4x2ZgUhGNOki05wt3Jmkf0bBxNrSD6JWxpmu+RgIQR7dZxrRAznSEvFTGekHHQ7IJRe46SLydnVA/hUt1m8UESq9a1xjP2+/KgUsMTGhp/IAAPDfYvehW+eXur4djN9VOnVscN6dChrrQVK0pdffJaqOyOF80PvzWzpNyBcrxnumpXXZK+K1rmclTL6WBTm/jG24r7pA5zRjtfr8Q64IUescIK5K4+hIAKBzkrOD4ioj7zzHVFyvgi/yBeNlYNue8fD4iDefPuHj8zOe3r3F49MTfvjhB/zwww/49PETXl6e8eXLZ1ydv+YVsQiRXuuuOe3v1gT7PdLTbz99H1b/NKD/rtN3CtaWWKBG9SzEUQKe86NnuVk3SpVKxSCVBk1FLg1BYTiPrDu4uPo78BDt+I5thvNzxqXQ2lwVlLJRq5fvShZCMTZkBxBhVKtjO3Db0xTaGlp5KUdH7bXygtQCY/MsBL5/Co3MrpbmASi71/35+nlCHm0zTFIvjpLV/xM6D6WQ6/dQUwGKeWtX+Ph9HfylcNEevfkLcPmH5x3Aw4+AfPA8ZhxMdZwXR6ebfWvjkuVy4Sno+CFd/K70WtvfYhCixuf//p+E6yhNelXFaiMivZ3TkYT+An/NMeRrBJ30/jHtNg9XprIlBRxSn5JlljmRrDPmJdcB31Gd1Dc3OIwyl+dwqS1yQpGs8DZUX+vDDuiOh+W5nHQ5HJX0ei1YI4Syqq27kydXHYUTdeOJoqwpAHTLRae+M16rocQ+hGHL8cNhM082vBtPvDF835TuEqeR6c6GOyMDvngDm/Jexp/pVrqF6l9K/flVE9OMLM/5WRDEQSj3OzrKURnMCVFrQZoeZTR/W5Ws/9GyNt10Y+HKhmrdjU1jmydQ5seq4Oz0TZBsWGCPd1Nh4dgE0Ks5zGHAQuh7nrS22g9tw8G6jMAc5Lze4VFEEiPRf8KZCJ02dz1K4h60DSKbq16CIQ8AHrNNyZCJMMOxgw0HI/vpu8+mE/jIuBo5IlS5CLaEYWBO4CJXDAGu6J7npv4Wf1URO23pvpLT+9UcA+u4vgGnHkZcrxjhEXV1vKkAVz9NHrp7htqUNqxRZf4N20iIkPAmKuJEXUDjhnY1vCkikhUAzDSKRwhDVrGn03SSj+sW/fwIf670z7Stfe82utgzNVnZOUEvLO1LjBZrUg6rcG8MwbFd1xf0oQc51gSIU/15kiyMM3QVUQ55wC6osWxQSzodT3U1J5xQQnVrG7Wsj7A2VQb1MPAP+An4HXb248OngLLeiJLgdDAck5lTtRk0a0TE3WTcAAr4ph3hRqsUpBuRRTjuUvQOjQYAN6aqMycFyvGyTrqG0bYcagUZ3jEdUwkPghaClaN41elGYnlucInNvFqbkwGZYGZmv3PEBzBE6OR/6a6hcxo91QyweSlr1Zkkrn7w+fkTBD/n+ErLCTgNN+BqlsV6tzYthcZktPy9/5KfEWo95lSdKHd6EzKshCzgDvn1UelA1ObGvvftq66vqu4+m5a6uR80oaune5QFvlZ7X6MNbj9Il43qwW/43+MALp2++/7H2neGcH1fzgp9DsNOoT+wOW+toz+vU+Z9vOr38Xm/w7WU8AefteX1nCE3qSemgKr5HEMgOmtMBhup7RS6qh9wRZGHTX+rd3g3bX5F1I3IW26VDSb+dN44RNt+CmLMpHU08ZGqWUNkODEdjyZjHEmnpHIcoJhHJEdt1/BaOxlNZ1WuLEN47UqPCmez9s6AUoeVqMUZvhnRCbPOv3WnNHQMHH1PWKRO4t/zOyqyq3MuAI1DGHlFFvqmuV6osN4NL88quMlMpqC1faFhpb1HaG5f8jam7aMczdnlWTYY+Y+EiLjsE6TunL2patK5llkD8/sRL0NSu04QtOr95vkUXEVd1+j72sj6soL8uTz/lqRRP48hKS5rve8E+Oj5/6bmyP7aXei/2xQG3DP5ENkOmDuRGanKXXJEnoP9q/vaicevl1+N1uXoo7s8rTaaeKHnOttqvLXrmNyOYuXBmv+orDBuiPdlOzWnio37fFakzpXO9NPm3kBdj7Nt5nx6/SIQuZazuLo0lC3nN8/60i4c4ty7tLZ0uOOw4/KiEzovwGVAXl4wHh/x5uUT/vnpA9788A7v373Fuzfv8MP7H/Dh/Qd8+PAhI9gaLrxF0hFLFzyhAcY+16OS43dfOpIs9Nnouo/3PXT470u3NQpLWl01Yqo3h/OU9IlX2vzTgP6HSItycQ9NnRRtz+OL0mdwxcN0pOru623VqDE6M6DEvZwKu3t32ubFagBjjsLPXlGg26oDsI2JIeZhJGLtARluvHH1XyIJavGRf9ynfay13RwuLbUeNJygFGYukotbe5Jhx/NhiZM93FKwvcpUvgJf2SwLGeuAkVzQAgngFX8efjIqCHEsLnBjAbmDW1d4qR6pbtse10C6ej8K8OY98P4T8InrWPHJz19DQkfIKt5+URrMdDKQRydsb2Tf8wkgPG2Vn9FmngAeLos2BmLhIex3fiDI1k2ndZWtcGNFZ1uHMB85n6y8ZSmWyqArWpr99SLr6ZcwDgedR1hdmGFAZDgItrE0r6Fcucd6gtGVnJVts/f7vj+uKPNjdk6K0nOWwXw6X57+Pfhm85Je2pjTQ7T76aGhoaHYyfOgK78CAZvfMazT7p7PWINVr65trYkVo/X5oWw7fXFcMS94eSySDuY5fMIArgDfbvb7050V3d3er6VEL+Pw7J/rSfQ7i/9qKWngGxs8o9PvSkzHnab5PkidzmOm+JyE07WA+akwgARniYMISV+h0Tr/jsQwoX23zSRaZOcpMHJoVPq+MvDcxHKjrYZDop2/so44nMGPdUtdwXSDADNOIrt+I1rzeYxcrJtUts3TuP+xI6h0BxE7CT62B0DCiG761lUeMeSx0OFG67zHMcN1Vz9VwuFI3fnSDKgfP36AbOqR4S2UK4ZvBOuE6MxbjgEtp4DcxVbwydsQUwaWIO6Zz/GcUhv5qhBsGKoYOiDp/KR2t6OfQs/QeDP6CIytUKYxPII8EW2ne6zfEbReZGJIhaa2A/QKHVpyzPNPnfYuxkgnpo68hTjxIbV5m3oikHpl3YGOoo2YJN+g6kYKCErMhabDs0/oTReApiobjgRK7MjyXRB3nxuChxtpzSnCHDsmzOFC3dwyMraihUQcQnhS2yreXMZLnABRJxF11wJRTDW9a/psqXs/j/GwfiH1BpvA4eB5Fl9qndQdHyiwb4SLhhkUJpy+4vj8jkdV66ubROhiWUJqlKIN7s7ACheSlEp/9AnAIRk8RG5csRHGtYg0iaRhr6+pfAb/GAKZrluzxjoEYRBopsVRpxY9JoaDx4Zm7kvV2Q2YbtiPcsngw8q30oEkrtXrOtpDFMdVQPYTBn7e58jvjWTyHlE3VkqdPI8hMDlmz2rcWZKRkdPHYHhEkB6uPton/FF5/mc8rUnbkyQHX+Mk+uee07slSj8O6srrAXQpnOuyyt4omMYnxAek8Gj48S9q/KX32fM++ufFzLznWFj7EL91ec3jRd8vmqffe6q8Of6IU7CVZ7c0PNJD7+D/R/dTh+FysFOa1yc6MYdClXkZDQYEusVd6aHn1do5ZGHwflVNsR/8OGN+qfoBcjf0kvFV/BqxeD5ZHhJ9icvOel/6BKNouCNThJE/Rx0ple4MpAh+WHXSUCEOvORcbi87IMnHxYFkJ8IVDpcTbNgVPTBQw3HXZJ3VncZhcEQNNx2Naj9It0v72ylPnGvgLZ7j4CQ6ko5szHxPIk5HJlQ9L1uUiUyThmJMBzlGTbH9t/RREGDmWVBpTXDiEPQNlpTXjWn5hxbJNMepaqDLpJBTlDUeKGKwGhmGAT5njoAc2IKfzqpvShlmYp6i1jQKFA3lmme5um6X7qUK6pTCxnc7kgULLhVmRP9EWf7Q6WvweW99vy7SVkeZNaXupkp8zvfCydjKtBe8NPSvWt+2honWU4PJudAnDB2RXKsKeSWovT4KPRe6ugK+no3nXg8dzpExICLYHgSb2lrTnMr5+ksg9lvFI37GYTrJHDH/pDfGXYtrggQW0W1+gV4E8vkBT8+f8M/nj3j/8oz379/hzZsnvHv3Du/evsP2sKVMnQg1U7IpddxCZ6rJNMCJm2B/IT4SXEbujpzvlSRfPw9Yh7nfgP9rphUZNxJvKMtXlGttVfrTgP6HTazsRtJFwazHqSQeeC+Wxxz659peKjr8yQXodAJcaQAbzzNOjsdtnAcTtOpq33eG9TWfVL3xfLjhBmKMbcQRHK2rIHf4WpU4xfkE1p5VYH30/ThjQlcKF52DcIK/yMb50MeYFMI+zNGPaqvul5ZW/DDloulIMe91NLrb0eCuyV0fqvd7odzyD/+LrWKCQ2O8wcv3arz46OrJTngSAD/EnPHTXW/+ar8/jaWMEI5O+nyYeAzW8dA9nu6pqj04mo8g2lnL8JwiGPLxKr1J4ziEZVFOAKI7IAzmwYRqDcFlev6ThtpPyXhyQJzobmDyAmZX7zKf2nJu0gs90R8Y3rnHl0T5QY94vjDbI1rgPLTY0ngYfTyAf/dbyzkp58K8QK5xhYbm3T/wEEZV/0JZ3hUzhIcTFNGdb94qiC1sA9gGBJsZW0RtR35VJCmtXLGh52vmyb2JjeenecR3uFF0DvAxNGSnVI8uR/2NKKH/jnRr0H6NAf0tJr7NMYj/4p+POEzMEpYUnte2SI3rSxSqFz91jIrBHPNZ0DaYdpE0ENzOz5oEvwhjPOtBzq9Lj4yNw4Kd1UkJI3/AE/G6I5wZGdXjt7hzgEAsYtCMRXMCZvxk+IJ5qIfXtRONfXPa+lDqgMv6OfPKlurLci9bzPcIb97uPN9cPxnJ9GzLgeQq4FeLC+WBGYNdFsYdo4EPGWr9GYjagMsVugmxf8eH42pQ4ICuI8P5sqaYNvhCCBEBjODN1ifzNRDInIiQ8Bq681TTq2mnQCCurlndcVLBxTNUPtvGqxPD9FMGtvkx3WBcWEy0bwpc/BQ6JiQZb9G4QvMUbklMRTP0CZ/K9P8TVnPS4FMCjMZ82jYVXP/Y6UalP0nCwvWx3h79Qk6tMqDbZ9Jj6j121eWDfw+Q8+SY2PfpbZXuWv0u3NAJew36KjpLHxwAMwxQqm7wJWKLQU7cxntk+8lBvCumGXRMWKZRdbS6Kq+dXC6WAUg67TQjkaAMZ54vjRyLHsUb7mFobVpOE1dFO/kk4Fh0WSE9UDOMsMMSfSS2U+5G1P3kp8afxwg+Q2MJcKxob96NehRzPiFkA+9SrsAnfd152GBjIIBwamJnlWZ4jZ7m3CfMuuFjBI16oZ8clp+b7AEiZDoNg99jfmDIxX6eGxg8blr4QMyRkQaZ5jiR5QQyvJyWkT3sUYbPkXxOehduJ5pH9aDwV3Dwu567rTMK+NyvbeqIw1U0Lg3O3VzOvlbfR7iTSOFRgDKkf+nzZO1bg3xZN1oio9tKD0u9CgUepNQrBGl3uomQ0lWuZA6nuehIZynovhkWwpAm4uqDOO/cMIPXht5BawZ1HhuRWnKctQaLjogQvwh+HqbAmooph/2ba3lJL9nzlIdFQ1GCL1cIMs02GjZMaDQyJsNp5UGNMalbNct6ak5HwZTWDXKvM2FSVoq0imWZkhkFwxqnIMAth6eCh/hsUpFPqDaXvP0i6Z6W50Xvgbf9PsSKT3VH04heEA4SnQERz6hJn0As3BAqroWLYAoZ0cUc1gbBZfpfaV8xH4SadtJ21FC/5GD/j9YXVZAB3+NQGJG5JxUUTCJupcc2TtG2z6fqTCAEGt4tU90J197HHlQZ0qMct7H27x7BcEdKx4ATYfOs7rTufXsC8PGXafq3k2iO81AyPXBqU0jacwFK70qno2rnrBrOf6u5YkFLXl5jsI4W1O18pWsBSF2DHUEPYQi5RH3oENC6DSx3fD6A1/uEEVr053VlXPuiW8QiI/Ys7LU6PvzqnOFR10Locacb0NwXjwYx3cl+TFswQSGb6SsxlcX1WbtbXbP8dSpwueLl8hkfXp7x948f8e7jB/zlxx/wtD3gzZsnvH3/Fm/evMHDwwNexufk+RGdJPoYjjXrfm+uVEs8Gcsp0Xs6QvXsjLksZeRohNfcycjLCeJW8//CdMjRdP3Cn0TBusrO+pGy7obN4U8D+h8yhSLXOcrX0fnKuI8ff/Xk8U0ZJSZSbnrXetaM56G0HrF1VnSUHoWQQZsved/PFPMUFLuHGHN2hxrdejlmfPd3Nr+FcLOFqqQ3Um1MRnYpAfktnOlIiaQN2sjU/XlXaG/VT5rHylhY6RbKe5QvYGqwneRv/fB8IVggtcBcFly1EbyriLqdFe0/BcBPfwW+/B87OiUAvvzD6x1Uj6DC46/w31JXDtpsn80Kd1817YEcvehJgb7QXHB4hL8mcNni6QuCnQanyzhrLrC7AqW9DE+BKoo2Pq0jB/A3hYN5TrQhrw8R1adaG9qVqI6dK2EYsaSjgooWqAVldLM8Nn2LQiIsHAdN66CwoZsZt5VzhQ1xupwcla5X/+2nRCdgK0Clv6Cq2Fpx5VMFelVTSAdsPiRtDeB5Qt7GyR03NG0WBricMlxDPAlndDOdFTkQE/VC9y/WesKTf6z5mFapjZ0DgPbv16PnB+3u0qIAnsnjP0pa70aP9PaV8VrTPXP7X5pOCfIgXVA72uvOdnzoMtWZUSp5bcM+5yjSp9MnqSvVbi+1VTCnWmIegLWB11Z5cSrcoYtpJszdaOBUXdQVn9F0rmT9kGRCGCennZotOCP/APzkfRoY5oRi2IH02ARbhyK+m3W2eGMY4EBOoIlqoTDxpq0WLqlyUSQDUC8XxaLOUeMR8lG97PBLkoV0Q1VAxwSuimvEdac/EcUYm4Wji6Noa6fVYE6xoaFTUV4tuAUCmcMN6LVFbzJl1il079hAnSgewzcoQg5NO2Eeh/GtVzMP5QuExhAxAhUS063EdarWIpqEHhKwWcmj9UPVW/XH81Fjw2VamFfp9XZLYQx0jdeBkKj2sCQ68RQgOi4SH2Skl6xMEMYEiTe8UUz1ASaPxaNLjMC1E6P6dTPh8KB+StoCzdg584mrb5aPfLcJoDII1lXHrM7mlCOYhnSOtzNby54fCm1yhisFRN03z8I8TodFiC+1pYzrKxoRLpKGaq4uM2PXjzVH/eo9srEIxkib9q7DcRuKuoc1j/aBxjbVEfOWGbFZtxrRvb9l6OY2A14po08a3yV1ND4pOCB5ilWW/kX17XQvs8NlnRdzPXhUnIiPuiOce/DVn6BuRF+xStj3vKI8EjEXVv5cP8X72ufmSMN5nSCXLCjcHsTvPQ/+1Y3uNf+qv0dJiCtGQRPnT17Be8sbuQAAIABJREFU54KZjfhHehHhlnnaaPzPny4b7Wl8GsJFgTSS97wy6KR+lh5grAIwg7bKwXVGy9io9GfqJ/Dl6aCjXH5FhLgRvfh/p5iFVdFDYwfan90Yu6g/5HdBYDQ8w/Ay3ClILH/4K88DHUXDqUnzYJzpCgOASvny+t8UTeepVOvUbAaNv7RB9XmtyCvOh1kUcnmWfEtKL1o5oLVPqlLbqY6ZpcEkGj8wHhO82XlOjJQUOotHlTHT2ScEVY55loX2jfkyET6hTS8lo1jTWdvamuSGIk/+A0j+aQwXiCgmIUervEvbJMdef0+OkJZB2wdh23/6xJqhoQcvDmctciho87//zlkc88D7bhLeAxyJjZDJcV8T+GBEPquWjXDFjxOfoab6Z4xrOZ+iCAz8m1+u70BzsAqnAZCztY3gfco5F2PhDsnqUfsyamo8V5APvevh+UJvtnVOC3ekJCzBgubjuj8p8IMAHwD8/Tva/S2nFQdnKdZPYNIKglzq00B1zc2vtbYcw6rHv3d772Q8x35q3N3cAXLO6qn5u/LXcnY5QnNGljOhkvCXLkSQqM3PYKsxBBha28luP5k6ccV0h3Pqh+soDPn0+ShyhV4Fsol9js312eBFroGKyzsaj4mJz9crni+f8eH5E37+9AHPnz5he/cODw8b3r15g7fv3uDpzROev7zgcvE+RuTSFCnGMyyNHc6KZ56QbUPM16alTKJskUHRdfHxW6KEHlX1r06v0vzu5S05e3/604D+e0+L/lS8QmrNwXl3gjRnxkGli8KYs+g1oG5JKFrYpKF8mqKnpdDopE3TNTVFadFm07AhlZefhzKzKfUvTlXlioTaKK9W3XXtEKH0bu32QN57Hn8aG8C6lBTfKD1IZ89vKgZHPtQHbHnVpBOgtT+y/x5lxZ9lXSQg8x0953fR5GoMJ7pu9edf4HPpy27QvEDicPT3CQvlm9TegHuscR+EyqwdwT7J+kWQu5ps0H1tnh2O92va4fp+xdkvJREFzakAjKuFaUVqXsEMKs0vWX8fw5lzljeCNJTc+EF1KWU61vxu/FZiBcQz+aDj8tk2Pl3JU1FnRX7qDQQvxess9VSjp/Gq6jvlm2ZgUFUP136lcO0egj0NVVoK78n0zwhMqpBpkURU3bNTxBbuYx1KsRPoOiD6AGC6g4rneo4GJGG2nv4iy5IDvOy+UEf51RGfv7eNeyfzmu/gOYu9VzXH33hqfP733JFfMr1GZ6uQO3iv8A09hejV9IwJm5c+15snj0wXQ4IKu0syVoEwjMemsWtqBEqE9mJtY9HH8hnrY8RvoB4laHHcoTLd7uIna+DG/ZClpkzC+F1sFg5AL8DcXMx2uR/nhADYqcxwnpED8mwhiRWxs6z+e6pmWEeFQMaA6gW1W7uewqqOSagDjg+J8QldZDNcwU+jmze9G7BFzMixDdsA2CQ3L68xaKyPeQd3LF5Zr6ExS30Itjt+sYhKGjH3JlD6NNJ/ahPB2CJ0eLkGXodvZrvRPFR11bjXXnnoUVdmuNHcdyfrTHuPEAOvuxsvY37N9rPUSXFVhW4g99+ly2iSQaCrTVv1cSfcVVSkwnQbhiyfygSE+rSf6csc80wP/D4N7G7ob4qIUHtRQuqxlNRlSKbWZnZi2A3UobezWaVrP70XkbtGZxB5VrlSmauOMlZGF702Jb2ktdM/A8t86ljdmU8zs5DOtfYka2jtGK76s90pBu39qs1HtBPXebKR4NTFpqoecUM1z+bY/6lCcfmYY2HQJQ4ugKikmXM0I7rkJqLQ1Q627PL8/mwkF0S213AkoF7VO4GPXVoGySgtAQ93PnSHKp99TLHTcWfvynjeT5NGPcQfFQhTfuRnPIKfJ8TuoODXM9kNCY7vNlW9L8VOGGH7fOv7fMSh0OWkV4dVV3/XebkSvApjp6bh4pBV98KLyaEoR4b0o/vrD6Ha5dvnZdx0eooLTAK5RHGXRb9a6DPE+a6tpdjQAT1C6JLyBGo71a52YlesD8NpXM27xXQWrdNRXTaXs1mqPGoATnWMxBRSM6LnGHjfhjY/HONlGnwkBKKUETu9m5QZS+e5Kx7RDafZkTiJrEZNh0Z0wc6IbmUaJsq47hmZMzTjebYfGlXsL3pXAwu53i54Gz+Q4NIdhtIBsxmHTXKwIjJDjmfy5oUH5D7WwXqXcZx7m4XTHBd25CfjOTOA9FuHgrtY2gfhmDmcN6mEN8dewhBBj3Yp+TJyXDJsdNIxzbVlzlm3Dx6Cyq2NYaFNx1u1sSiAPi+ZFFLTcmJOo36sXXLfRHu0PlearJz2CnTJF60cTvpvTAFbOwDQhFs9e4eO1vfyGziFfjAI67vT3/S8qQwUOYAr18wQ7K/R6yoUmJt3JncLFiK5G+9b7QeZG0/b8d0ov0eaPTlunLXBo9r2MC6fPq/qtHa8DH4fSPK/CXfIK9zHdAjZZ1exumOOwC+dCp3CJteE4qJXzHmlvjXG7nNbCS1qvNdPw9t+JLPRrkOt+72qiuu84vPlCz48f8Q/P7zFx08f8eZhw8PDI96+f4/373/A2/c/uwH9guv1gnDGCo4Z+nPb6tgPTCPh00FpL/hvLbAj1sM2GRY+gb7jyb8En/qe9CqL+DYA68Cd13+g6/1pQP+jJgmGSEwkBPfO0MgzQovo2hw8msEHjd4FV7EQq3f6Ji8p5npNJbAJijZ5FwWAH6+rHcDrJQVzupSkMJm2SebKfJ6GPAgh9C0pF9V26l2jrbY4jDECUvM+UxhvpBi2kK1fD7/0r7dO6kYj/ClLeX62GtCboFvaWdsUysOOCLcWsoe6xUn+hEeAH4HYoE/Ytv8C8I+EP88o8MLE/7dps0wapuEjQfSa5nJUz3lHbqQjxHKDJ7/X12fVhsbTTjzEqZ6Yg9EE8Zw8+XakHB88J4WnQOinJExvmxUWeEUcbQTkgkNw0seCIRS/FLRxbC74T1gJmhIX+HBVSqL/mp79ecqd0IJgCY0Zcv9Z2Espi6XFmjSgRZ6qnVwEhRwTijaeAJKCsvvkIdEJuU4/cT98I2grR6BnhbwFbJN8QOQB2NxDfgz3ZYm5XY32xU5082RinOmGp3TLBW5MKHa84Hyn81NQ14XckJ3c/GHTS4d4ZywK3bGJ9+3p19SOaZJ14qbml/af88Vx/kjv7uRX/+q0g4cf+AXRbevpSvkCXwP7/vMmYYRRm/Zd1RxjYsfsekVeHZPyM5ydiO+z3GaLVJJgjU1siHValIN+xk8l3hy/6QE/v5Fie7ad1wzZrHAN2O9sn2r9tOOz7mlO8kYA2THAFXyWIYEMRTFOKdXyOtKAHDwwjPRKxWsaiI9TbVKGET2RPBzPcaJ8OC+UaSfRRQDdMGTapkBKw7EzSGgCELSBaofhClqKAfOND1xhmxCqUD+tjMga2Bpm3nmk6PYKwRXA1eVODrM4ZdMGosTopjyTkgeC2qyEIK8XEBSs/qYPpPryQDO/aGzMDLbR7lWYwtjrnFHL8avkxWulIq8jUtyZJGWI5PwTzm6o6T2NORlQuPNChtdd5rNIrzvm1CB5nPu9Wu4KRl02t0pKRqD4c8YbbzYA64aV7P5fyspo78yA4vmlw8iqXGC2Zr1wpTVHDobJqKP/Pu6X0Hf+3MssSeqw/wfidPgq34tniPNkngaaNZU51UfswLDl81AJ2qB3SJ6atrbKWD4gZnSL09khOhxGgbgflsuLVndvJ++RD7L2Ne+IDka3NRyc7W9Id074iSr5KDw+hRUeAUNdjLP/0VjLOonIIBz8oep13iqOtzZs4s+qL80o1OCk4TllDwe0JgD0KajGc3x2PJNZXAP7R2fMBJC3SOCz/Zddy+3O96hTAPVoU3nCXglvPoaJ7Z1lHjAPq4POiZT6w0yZatgb/+PE91vg+gxZ7v/VmDBZKsZ7qXtnLDlQJMkgWq/WcYrZrWADjPFOE5SDrgVQUcgUNxRonmq2JdtM5h3qWBmY/XNUOwkOzTHb0pKix+wbnSWOU3wKxN3gEf1BImSuKjERBUY3VNfsL4I+JH8ED6ROJHrDOH5LbPr7GTKg9CUBykjLUJAKJ4TfPma7IUyY8nEoLTS/EumCDjszhzxVqfGz8Y2uHDJzKtlSzgGz8fc8eFRAcuWtSzampbf2HP3H7koSCRouvm4SfyaKhTKnrGKiDDryl+qGMl5qB/8KWXaeghfrgj/+X6svscfKqIrPmDMEpmjdg5TG8On1cPQsV9kU/tnWOT4WvNZZ77Bfjec8fF+VqKAunSmUIXVKqJ1A5zDu2jL9BtIKx2u/GfbX8p61d8D3d9n2+W7k/vXQuexRncHATpNCf8Ae+gOqae+KIxUMu1EQkp8Lf05nlol0+M/HnnfZekh+o1BcMe30+bxgzivhlsa+TvkkDICm/UfV1ypqe6Khz0ZfMmIE6wqimHPiy5cLPj0/48PHD/jw4SN+fPMGP759ix/ev8ePP/2IHz7+jE8vz3j5/Bn4PGrew/jQUIEMd3C/FozGn5FqUJcR6DR0RE+n03bP915LZ1cO/DYSHTL4daq/mf40oP9ek/IXORhoyfm+1w33gmbH9l6VNyvJ7hc4+ZuVlKNsqVBciVNQaGE+DVPaFDWzKB2N65NCmpqR11m7QUijujq3SmZu+Wwxsyq0oTQfcKSmCRIsq/GYNn4WScRiBmgLNerTK5yjQ/VKZobxKO+pRJb6lCVjSmg5xgHoPePkqOFb4B9J+YUs8ldp9iDRXouTYMjv/xty+VsdaFsrjS7FnKLNt9qPOJhXgqKxoE8i79c7y+lgkt80qB0pmfz6DoWx5TvKTvOeaSMAVersmdvdaWg8WT4PAKjLiXJ+50Yyw9SmciluqTdHlYPIl8spECcK20ntnPvh5SyEAhv3mtteIA7tNSU48GAEpbMAXkh4wcMBjwRxaO1lQmWTxJdJhECGBk614yDu0yt8TtMCddhGzjXC15syDBHoMyBvYAtSByY3SlVq3+6ApR5N8V8unWhKzGfntSAYo06ofm/iwXy1g2fz89fDzK+fTmBfDbKNT5zxgVfqrMruA+03nfxkrTBVML78P70CUOgUn4c0T8mhxxhEbKCGjiFooawzYAufSIyT52sI32Kkna8Rf1L2NA8dTPd/WYbkdTtVocv3YCADGWbVYjlbtItcnaIOJy9yPkN3Zvth0Ozwpw43BRgW0SMcGHSIhZL3oNIqdfrB+KqUkT1OzYXM8HajJ2aoEDOexzgqwa9i4WBlYMgGwYCo9T/QKN5mDSjLY8IfZYnNUmDWaf44vqbiwaNCilCYUglyMR6/wUJzT/HwtYnLoJ1y+I2NVkkatmyjENTxw5tYjr/qVZzCZ/lJfJ0Sl0mTZM4NJXVGshZNmLiGonc6x75bEqxcqD0L+ZhV6160u64R97RuCOeZaizbt4lmhmUp3dc1ldzsjQ1vSV2FZoRn8es9sUHdpiMZ2MtkuT0LWM6k1QbpupV0HsblahN/9GVC6ixV5kLGHFnryfriuzTK2K1/hKfD0pNbetbJZ1UvNJ7UZwEqZD18PKTrqAjDlj0QXfJp0BJTVDIKAGJ3pSdthWsPGUnDIJp6iTh9WcNx5zgbRXNJHAa5XOtVvjZDBOnXlUbqDAvtTphpYETOa3VDd1CxCPAXseizhUQBaOdREoYYyZjMjs3gg1rzPDDdT5CHY1KNQ+Ih+p+G94BZEzf72ZADvTw6yMfZ6UvypYBKpPaNidaOagwHKyAMrArgrb99QRjKC3NvAHlxXDguOWoAj3PDG2OMWj9cr+5n7Rk2OsdduUf8adI3e3gJldxVGCkJdX0uJpO52ME4luAlLhMyT8xhxq61Mji3YQ6PM2SpwBzrMMyIjqDJ0nSyVbUT5wabR8mVLjJVtJxkVBExI3I9l3Pev/v4ZNh2BH27LFhR1TAg+TBuKwzjcS4b1foTRvQkV9Ity1EgnHQYvd3IHqMdcJpRxJ8lPwgGGVySnEuEZGGJcYdxNlhYVyt+Em3YCfTgW5bX5xkrAsSD+5qHRxfo18MJ2tVFoSdl0/Sc+TMk8c3KI0dHCIy0pVfqU40xVl5qQUXb+ADYOyYRPRbNMfWE3qHISCnNCFy4kVYp9vykFN/2mx+H/rju1xkUMTdJBnOTPL01K8zfSUv2o5Vb+3KoUHxPSvpdFKR8x3iHXZ32owA/A/j0y4Ly1YlFwG6P8LXfyyseIF6LNm8JLuN6+0m1wkhcyZLAt6r2lRzJsjIyC1iFdzZ90jGusEu+4gs3isr6cDdzT+SutDcZISSBltSjlPDf5k18eiebM1rMD3f8jzdDGK8WSXPOiTkvViCujoSCQmxQvbp8l/Y7nKIC5xq8OhefDQDM6wVfXl7w8ukZX15ecL1csW0bnobgzZs3eHx6wnh4gGzDQIn7zCbqjJB2zLchE3HdWHe2Mx7tWsmtCKTfbS7t589auj89etsAPXj2r0nC4+1fkwaO5sC9oC7lKvJJvfjTgP6HTsuMU4BWq/SclbZvbefOfI2nkUCLUMII5XXS6RJuY538K9vpDPF0QZMnstzr6AqYG/S1qlHbcM77jPhUewjk067rOtdICRP7Lh6+nbX/hUF3xW+p61iqHidZgcEByoT+0Gni1hCvhvOF7HITxRcSvCmjgsRLM6K3hhlf63t03B3JhlNliyvqm/+213iFXLQMn2/+Cjz/H+AfXjoZamy2aq9V9wp5Np9HL0irTW0+Pg+0sayD6WSdz6ixk6O+3pOOBOeaiKaOmkk6WOfokaAPGtcOf6uMi3qZnYItiXdW3Aqv/n3OaocV4BC4qnaHoVho0upG5De451SoXounJBhC2t4g5bDDkqphejkSDPFdJE9NWt4FhyuPS7rSniXQ6qcC1S+eVXhE58S/LkO2p0N1HOXmKLz/I+5R3ypctE7odGO6COQZxlufRh2m/TKAF57/umNHBc93pDPxcdrACd29pk8CdUmhbOFeeiPzESxHbRzJu++R3a82+Cum74D9NbYWd6i/Xcbve1F1KnNfq3gBgHf78n382Cjvmew6qZfhjHk0B3BVuwdbhl3dgCvk6oa34YauuGLm/2fvbbckuXEswQtaRKZUperunX2Aff+32l9zds/unFOzI6m6Mt2I/YGvCxrNIzJTKpWqRSnS3c34AYIgABIgmKeQxD9n0bLaazuWqt4Uhd5MdBScbEC0IrPPJ1Xf1A1dkHRCyhNyM+0cziNiU7Djq0y6SWcKAKdF3SBerhBEzMkwFmSbrX06DcyKLK9sp+NOw3hebcg4Df7g7w6DxobJqM3WkEE1lgKMw2B9qLWRKotgHANjHJBxQF5eTHZ5/h4Ig86FCaoPLHvyLvVSu4aHkNfg89NO2pdeqR5Mz/4w1K+Ql/Dx8DvQQ+wSTllGu348fFwzVK071yqTVgxJDBWPA9FDaZwcPn4Jsr3I0LZBlinoeCeYon2it9iIR3x2edxnshtENDZpBWHwDhNFOF5kc4EM8U1e+O1CTt4DIEcFM66qbwxm0HSngdj07mLdatE4D6lmnDknMEZeMmPzdhiWJzyUe7SXmOx9FxEcWywWfe456nripfobdTOCjMx8DSdFOypxClCqXOqCUsYRFB1WgwRDsvOqif2hS+8ig2rWQEYwKX+8oP2cgEt3Id2ZctJa0IKKSJ5cFSCNzVEBG0dklEFlxAwRhrfmZK1vJA3bMf/DSDqIf9U6NwzjfU41PjTjFHcEoZdc1shYyxNmhcZQgB98fH6sZgjbhPf2q48bh2bgEQPcUEzPRepEetA1YvwCB9zbGPBLivGml8/ycYacygLgQ7Upn4q4GIYoKgDw0V8TXRvReJnvauneVJaP/vABkSO7Vl0oPOXcUlwNaVTjtp+Ht3UqgM+bMp8c9o+b8qtDX6RyTtnzmOuL/MnDI+Sc1/KuhXktGmUVY5p+M2TkfDNHJLUIMrBhmAB0CIZfu2NLwaI5EofuYGbyTVFG9PVUbRnXDRfBQ1bDqT0O2pCcr8kbo34ln7pFRxbSHQdSJcq8aTdGyUuRzfvorIe4B0p94CVrZAw9K+oVJ04jd3GcTYj46Wd1x7Lgm1B/p/T7atBPIzrphNGWtSELXIFYA5zs7dHp8pvXLJGj3MegDgekoYd118bTxGRbUos9a3EpGNTIGfPfeZq2ZwQTj3mDeJPUqUnvZH0hpeDjz7UlXX731vntFh4QywvaIiP4pXSiN+hpgV6TYnDymPCaYptkeb3me4bpm8QIzi4Qs+Yq/126R8x/APjr2038blLiQtcHSz7fu0LM31QcF66Lkm/xQ/V+eN8LJEeEuKkr/Xq5HM/9Xc2bV8Gvu362p6t7N7aqKzlLKrfesNRkSnJU2PIkN1mrG1B4RDYrkD5mUAxfw0yd7lRG/G5hCeUIf9enWivpVIyDo/mhjyfbbhSYp+Lx98/4/OETHo/PUJ2mA4+B43XgeBnhG45UkI9ha7wHoDptD3l2h4TLrA950B7y750RfU168x1dNwn+xwtt4AldvYMH/aqpeHI5nnzTBHyjrervHwb0f8HUwgy1N1qaTzPOsYZ6W+nNBJLlk77rLp8/zw00hcWCJPh4EzWXAqlRU8WhAITw0qWN1MyRGiczdFW3HA3oiO9H5ssTmcxAxg5HG9yt+hwpYfWVcNeKO6xDl/4u9TcX0TsFkquVve6ZsISkik9q444hkaLdSGFdhV2e2e/YMNa1Xc4o9MnG+ICL9eoQvPH6InU2nVcAcrqi5IrLf/wFOk+ITlOGX7y2uN8TC6yqZSRd59dTZXlV5IyWxBez9XjXCUL4bvifrRZ43L46PRFSMRapAcrycscjehZZHwD39SwN17SNeU7ZYzfDeZAo/F5Z4f1qSF7pgKK55EtxUtIV7bhHXIG0GPiCPOu4GCuYp0rBu35v74E4FSZA20iN8H6t7vxN1O1KYXCi2vxVKrp4ySM4cVUfTiNWr2DoBE5TGKdM46fxF3fkiosgEcgnmMFpAjrIOYYbuUqwJe3kz1emt5SulQSTNz4p8y6whGTXjp75+V2+31qJ/ZZ0EZL/RdOOn0Vi493Dn4UJisvVHBZftNpcjlenWdnUXaBzkWuGXxFA04AaO/Nh9XT9R4/iT02OPJMH62kZdP7k/KafRI88rIcp6mQUGltMeJglph7o29MKVIxF44oy3TAbIe0Thd7ujM3J6bhf+HIwteinCHCMuiLI9QXVhzsV9aIW+logp5BDIaPUxqmrAFHJwBiCMcyAPo4XyHgxpwiYcb6cC6JkNpyotWfT4AscCyBDMQYg7jKvGp8w4zhiSN14LhMqp23wT5gTgQIRIh0ARIY7DIQs9ROdTQc1mVIyvI8rgkSCHPI9zwetOqlsW0vkRnYr1oZY2OCchONjm3VRna2i2ZdauEtcpvRIWR6XXmNf1Gk6roNKh1/WVfwUXIZwxyDZHuGFCfyYF15vGCAmbB5Mtc2m0wvEWM8RzsaOj1RvDFeJLYnbWvpJtaQP1246vZcxPllG6GmOicxOc7bWF1ZKvG/DdbOi/T4Slleyfp7vl60uVUBGPQvycHYk3HfqZXzGkjL6Vgb0YAUFZ/Z1GHJjGmUI5dCtYEZ0nZp1JI9X77O3O4jfiOMm4OF94TAWx3iqz9k0/cV6LuvuxrhsgzZqBXGzhtipWC1DeYRrlyzDPILqK6jSoPUXCH5s9MUOAUAbQ+EPgh1r3wqG7LcfKxIp3Gd76UhADW1E9W1aZNmKy3Ivcni0emf/foQp2WwY731usC6zMZhN4i3wKfRePkLkTLpKFGrgkJoj3rp1hlh6dx3lMJJ/pqceNTBDkAOMtEYBKu48GHPLqevJOAjNkzXNFhmxoGxfAg+UTR2W4G9DOkdx6gcwEadvzWdtuIMK6y/WR3YXHG7kDV7NFto4yVZ3oFv/hkqvSyKvIGggVSmHMbdeoh8hpv1BP73W+3dFaQggyQ/J59KqEe48O5txX5VhoIgSeSI85IM7EMWaOqLiJKclSlTnvWlEj7IRgSn4QeTbOHCELGYPhNRDYgwd5+In3qNoyFI2GGm+sB851FcMC9Gr0r9COAcK3ZfPbb198jiHpFErWcKjXjLWGt6ff5TNs7u0m6TUSwXWVvJ3/kN7HhrvFjwrCvW0fol9o6aLahQPPYyULM637ceKg7f6/0bifdIgkh3K/qdSGHe48XwRRP/QtKOLze9gSO3BkyqfvK58xQeokZvqnNpJd3qvEe/ifkJy9z3gtvvQnYaTc20LknwMfrg8C/5TvVvkXLBEngvel5pTnpcelP6APl5TzMEfxPt9yshU358FAtPpCOw8GUOAF1sD6wT0MU3A+fUK2pSTgMd4qUT0uAMbRCtdG2R/3L8xFTgn9HFC5yy5C2BOxTknGfkNcXIcwDxtLT0n9Iyxpnts2N4m/ltMtqb7X+iXzLewID9/M7PRy9v8TuPYxujZIvafgT0QfJcorlt58jWNRB31+w8D+r9QsnnmRHJrDA9BLlWIFbjtihelPOn64r2QrTAAeRJJ4NFIPUTljHc+6ZNmN4yhaWJvJcoP9ZX76e2JcXr38o0wmTK1rmH7lhT8V000KuOUBQovLE16oJC0doeZ2jcAKII0+gVjZjq6o4ttXehl45Mkp6bhHNSW3LfB7wUdX5FI16GIm5gyU5nYK+ShCQgYz/oyIOdfyxvz+Hd7/VdfgLMQ5nppwzz+vZctrHqJC3ogwl3nRtdWLyy4Ze0WF7mgdDMXb2F79vxGsV91TWY1oR2pC7mdghk6w6TNmksHIwVtYnkGRPglcnoEoOm53p4BZZ8KZZRYj+1QVkWax94m/fnvTM7LxE5+FskQXXRtsui8Lah1mf7+YxddKukuOjMIplImDCezFoDqhpHp2ydEv9cBLWTHRovCaHaotz2HG4o0T75iTAdrGD91Y5XdeesX5MZcSuRs6INjW21pNHC20Ncdb1l1y40CnemkPMcSTm+XkhdsKt/O6Rv43pVfXpr2AAAgAElEQVR+Kw32W1Pwsc2r3TrgS9OvdRL9kr624rfK7ZCw44d9gZOnhUKHUPE5NeExt0smj/CS1tz8DB0oaX2G+7dv2rc4mguMTUbx5KI5yQZynq/xTLE8jzrCwDtqTqeD0h5fisor8M1iUbN1DzF9ZFK/mfU5LCaLH9B5Vr7QGaPmdBKQOuXO+tw4KRIF10G497/SCawHZiNg3UNcJVIzoL8MHC8H5LA/BTB1OOr6yTIOp1sqsRJu7aS9CPwkOyBjQnBinprRW3z9n1i2bYMTOMyQDiidcCVNRw6ICMZUyCB5I0Aq2wLf2A15tiE3dSewtsmZ2EZs+/SZJe0j5oGkXlKiN3y+TEeIHyQHlSpgulPKu6XJ96TFrBt9k2ttpcqEPLaMU9WiKEWIXkxMGagTGV5MYHLfHwT06oji+87tlAZwQtNoePjIi8ZZ9aitGxCMbNWN5/kk3/HfFJCzckUeCJ7Ge0vWWxu0YhuauGqOf5AKJez0kT6IG/FMgdS7QT0r9PlKukZM42YIT8Nwp8maylYojeBZjzvBIOMQpHpUV3IwFrmn4iqg0lvjWWG4yKfFhiBiZ9El+Ze0U8UB9PBChseRkQhsQIq/3EvEajsQJ3nCC2mkThiYZhw3PN/z7nfP8m9tbOxUevCUEnMpKYsmlPrlbcct3mE8H95nOw3r9ZAsaEOC9cczfrDwkuXnPj8Ktsu7j5Dl5HbleaUng1BLgkK720GMPa/fRQ8AnzqswlG31nbf6svm+cGz5jtYaHmYw+4BpFH9fHEQyHGg1T1I3r0F0+YtPfKbU+mVbPNlc/QqDawSbM6fKuO/+Kft7U/MiIAwfc0GpPHXAsLEKe6AseS/8cOYc+FMmBPBeaGgLBg1D1PKSZBFCY94F22XqKrf5QlWPH6LH65XFNc75k0aqAuE4PvNosOhRrJqTV7U9J94l3yg+MsWUq2x2xrR3TNBUs4mMhyX5NhF8Inv/US/QpCJiN9rHhQSew11Kr7rHp7zsrfiY0ryonBHxVkwNdS/zbvuWJVTLNYRqUbu6gy5tcmnN3281OX0rGjtS1RP6GvRjID8okr7Ij7+qprqsppHocmZiJrq0Qg9QFAzzPd2F3hv0SvvybRJ2uXxtmpBc3A+1gxf0t4vmfTm+83vN2Xl18JwZeaqoUsUjWS+3wBde6Mhwy7LO9D3Pr/6tLozwi/tL51mp1zW0S4iUqsEpuQ2RcybnJDO15ILsaF3ABgDQw+86AfoOfHAA/o5yvvnCgC0+EjmWTUo1wHDgI3Ibjwk1rAWZdPCyZ/niSmKx3zgnBMPnVB1O8RwXVLcqD4VOk8MHDio7XRe2+2RP8Phm2mRF/zmPcbzf8LEDiT3xvP3preIvfODPwzov/fUJs87ON2u/Ebvf052rF3dtKm7vLpUHMzRJ/Wk7/Hc+fpN9I0nDW9WMMH9nIEhPI/4NHz8uSHdThyPL5+Ht+lmUcahzdzzyxYg0hZS2/QeBhfCI+Qkg7EasFeDNQSS4WyedIUN5fx5Magjn9tpGSHxvcPPCs8udYU1/0Z4n90pOETH4XH3ZwEwLVQqkBuMZhyclVdCMdesRngFEn3cQbsMWZWqhY7qkwX+oges6vVFl1y1oJVkLlrStxB8V57kAt2zusX/pRMNtw4c3tM25cMbT5ONIKc411MegVXUaWi6AhOtnKYA1biUc495QZJHeMJlkS18p9OJyOdxC2NIcyMdhrxPzWFpUQBjkb19P4ivBswOq634ENaPebrX5HmiNtFrEyadT9LTnymrFLxobgRudbihxQ12p7iia4adEf0bjh93qrmzm1/SL0mu7043MjbZ2g2NivgGoMIRsOTYztiqvGnJ75PQv4+08uMdF+MMK47k/Wi45PO6vkJl+vXSIqdiLuc75l2R96WyUqmkqOR5gatQqOy5ikLmNHaSIcR9k3nOurgyjhfFM/ApdDJSu6zUeNfGkL/r8pP5DQhGkCzRmgt5/2P0qWVc8FrRZfL2Wuf16Vnud5XToT6CS4lvkheNG3w0T2ZGweCLztBCr5hx6h+UJ/oKP0Uc1fN7uAf+rLIyIEMwDvGrRpCyzPb2wvDmZ5iyLtLBQoTQhq3lMwN6+h0M4BgW6hRT/eSanW5Vx5FGuTGB006gc+xYA++AiGLKhMiwsYgNeO+XBM785HyhiwyP6nQSYt43QZLkdiRAYyJxgh7Rpo9cniIvNHFltQVcfarTfyGziXh4vr2ZNqfaUBu9JY+vcMX3l2xXfE7yPKwQ+3lFAySjbGmWSTWnjCWkU6lv9IcR24IsCIY7HEfEAw29xw0JzZkhxloCr/6nK47ZfF28gDe4G1eMLGyMoPex3ghDU+jYEXhirvlp9C6n0ZuoCh7bxyWmZPS8TqJ3ocOGz5gXrQky0FesoIquEE4k6rw7DPEInNJd54b6UX3KyRdzA0RWUuPlefOkslDfHK/Qkbc/JCayPk1cXjdoaybWSW9QewF4ycLMl3wDiVslXFlpK/cXAD9FdSK5vhDHR4S/zrFmw70IREeNYToZSLBj4iQFcqJi6XMOzuUdveefT1nIQlHsWCAC6AekEd3rYmqGLHhm2S1LXhB+ou0BQD+CjegpplpUrKqf7xrd9qEVoHHI398B+p+Qg017XKc3dCINQkVlwa8TSduW34Js7YFVtRk7LhPzcjXYJtTsHFR0GPQpUMgwjcaC2VR+v1r1pg/VNuCOyzGvow3Nc+/ZpvUzDNkRGURJRgZk/ZhCaEMdiCvG5PIlkq2ZOahfQCPJMyTX5SV2Q2itPNree6nK57XXSBTd1zvWFFxuYH8CPU+Ycx/D+JL6Byh/x1LQeOk3dRI0jLbiGeNu9+D3eQ/x3X5J8Hohesh8JbO634vUMPPjwtRz1kQvy7njWir2vdj5o/XnaQp5EXy/5tg9TKW7llJBq4+2d1LhnXMvxb+v107FoauYiBcHh7t0wW9Q467sc371vP6VNngs/PMntT3QH/33D/T9ny118r3+fptCn9dbTGOp18cm9Wck/YUe8nbLuv16AeWJfNrNDd6PvjbwHlxo/O/6IOsB12pS33K2GuXYgeiZiM1rrjqTZlDMQSVPocdzq1jGwBgDB17xAa+YDzus8zgfLqsE5iBylMzK+tUN2fC1i68dZq21ZdB1V/CqYnF6iF9pppjzxHmeOOfpV6Kg8Ba6qq85UoYAOMYoqbhjj7L8AdfxuIwrj/c3zN1nRvT3eFb8g1Ktc/nzfeliGrkrrpcvfxjQ/5US851fLV00rLcyb5Iu3xVIIzYJpeKeUozvXcqINuX42rAz1Qj/tRrPTWPycJSokzDvMVQ/Szt0sAJLSj9t623L7np1C18Ye9cSbPAG5fGFlVwUrZuUTF2un5d3XD9SQY8ttm0P5PZH9cXH0Qzndg8jAN94WsZd1/KMawG+/zfYRvm0px/+3eCLu65T0JNEi0VSvlPqI7W2DmcTlLVYyVNBYURnBS5k882EJyfuK54uBe7G9a05vgqrm/x8aM6zaZRLXFYdSR5r9etu6LLwq6/eABsMGr/pFCbtt1NisA9XcnSeUJyuyIXxio1Y3njufJ6wk3QOZ9JcKG6kBTVgCNbcpCDFir8kyYZyyH0IOIJGZ/YlTorJifSY1PN0xY74IYKWa7N9xVP7nsqlhZ0z1JShPkMX+xhNkQodOnyRcKeQrQpl4Koj5nnicb7bYNhVd8nmuDhPC9N8n/Gb9NZn1V4z7BD0e0k3/PyW3p6V/ZJ2uK3fMPF8Txjz6Osu4/I78toCkTlLsMNYuNkXcwaUECAiZugcs0KOywm7+NrDkAe/S0PxQTCEsJkpcIwtxfdrBIxMk/S91PUUIAelfJZ/s6ppqFh48Yo3lTpdX8tVP3jhlQlIB4t+h/HcNzBzkyTKDKSpswl1TXxA667gC+w8Nuo8t8kIIK17x/Rd9AE51MO2j7yXV/EBiheXVyUG857WxBMMj7FJrkBFOjpd97FTatZFC+M+BKYTD4WeNXa5oRDRDQ7j+5I7KhXeeIjJyUOA0zd9LRy1E6rShq3DXuGF+3y1jX31fKxPLFSQdLnqfkWvKcYU5tCpab5utHDLc7JeVvh63ufcyuouI7rfgUt03U51rGllCzQnqrTX1ehUWjHA0DiCLl0Pqc1C31CGneVUdb8TdWffWScnrHZ2dDFABSF+TeMf+Yb+ldW8JL3/vMENG/80nsZGPU03lveFKmnhy48kD0FzWtYuZd8ldcRgZscQNqYzLM2ATn9LzxsMB4ZF0UDM7zJQJ/4WYwRP/zTOZaiBqn1nRFcg7zK2ueznvYWdoAVjOLxEUEq8cC/JY8x7IG4ZRQtx0tV+jzQqFW4Dv44x3//kUNkA8AOAnwLnzGLzZHqfSNlXCQcIgfhpbVnzh/wgztG6uLFurtN2/7Z/3eUaq76QtBai59VffMaakvo2bdwZiJNejTCcT7ihPsYm5No66I2ddmq/9uy75TenjwD+3h8dn3tjJ5oRvQPwrpn8y6SlqQxxL9LQAaB4mxSdqnPKuExEx3THuKreDOBqm/dPwMiINA0wCRWkhiTmrAqdIZGuLnm7FbZ9093eueJ3xM5lLbBGBJR6Ll5HruPCeUi5Hn6/AoMQ9IS/iL4TeYoT932pxILpH1Jk3jZ3ot7RhrMoj2RkVFvF+HQ5kOHmsh1dcNrxu+cmciX3VUZ4F7grncCi55tm35vuCrDesubRm88vauCaa91tvFTvuJmqdt4q9n7yYIAZ0iUM61Mt4p563bRe+Jq0lQ134870sUsK5MRdYWoD7u9+ooZ+zExfBP9vn74FZlmY0h6xplMFI9PSU0hO3kJw8+JbpNLe4eKLK/HPYPRKgmHNqy7qqd10LMI7xKz2enwPNRxqkm5XnufsW9yAfry84GW84gM+4JQT8zGhx8Tjc4SJ8EKy4McXM5Mie6gKJqZHjbJsQyT3TtUPHZnyPCFyQCZwPh54PD7jfJzQl5HlbI2e8ZHyP0yT5S/jACJa3NOBIRTjhj/8Gulb7V6/dtrJ93emWkc8q/yegP8woP9LpBrk9K5Pg14pgn1BRqouvWongDjdzlYmMK4/lNNVCK31ezhIHf1dM4DzZtYOiFAMQoGN1ap3LLN7HtVYddaJYrhxlPaGBRXaDgCmSB1A8na6h3x9LstOQPw+KriHk4hvUCsJCKWy1qfYFBJGKZBCrXmySsd/G7Kxbsgv8LGCTcbgFGShbt7xEjbGS2UMI/mqwHNP+yIpXobiLkRi2skn2vGNU5aN6YissHCq+WLPEAPnEnk+/9VIIodI7V6V8yx8BI5dYWhjnyfPWBHrmzY1ljEHadEmcOO5Y4roLOa00iIxqKUN+npIb5caDvn5Kli0f10VkfYytJtN+6EExYY7QG0HDQ/fhF3q3MJ+/VG+fephyeHkF7DNDLEF1cAkgvuFPdqy+d020+HNcMj+fQDA8FOAAgzBxAty3GNjgTYZraXiV1fOFoorSDmXyqAoGBQwphXf/ZQjvI/wxV6clJ8PW/Tpw08QkiNAjsuSVhZ/2Qg0XE8BxpGzyHjrYwJ4+CQS4HjBeDVT3/FiNFunQwcmjhgFM97l0MdGUyjcfkqSaT4MOavNbsGufdX+iGXE3VxZ+xx8JeaKaOOzeweWm7r45OKlGE+kt+r6PaXA2/KYRT8vsC75niu370kdkwvD2lXdYPuGkeCCl4W646UtSg+iBUVdeUD1STlcNVkduMv5HQb3eF+8SDP09CxQpp8EFYWMYXxD4jS1Qg65hBtrxi6ppynbp/eb5+zK5jfTobzJ20PC2dJWyk1NliJcFdzYc8JCrMe4+5zWwFnw1oCr9Yn50DqWQJ2Wd57V9CFZKrSxyBCpYbgRGhs5gDGgckDxAuCAygtEDqgcsOs5/NQMkJsbOvy8tKxQxslk+5NwRHwI5IBtoB92cnxOmPF8+obDVHIqM1wIpjllPJwlyoCcAzgG5jS3xHOcNuR57HMCeiDu3G66k4fAC3039Tr3/FdFnfoJnUlTk0KYjnlMckNeiPdKGZurHqYpEB+y/KKKkW1Iz5vOLaPheyWP+hGS0/Cp0Z7PmdINuIj14aXpenqpMfChOdHqVEUEaMqNHQhsJmhepXPAgsiYc6o9O2V1eY12A//+W+LOcxuPpHYJqR6wFT+fnqtxFBKojOuMUqD95ORFTQkcxLQkvZxqLbwQrcSJUWM9Faa+FyeGN71+xRLqvIxmlvN6vnUsz4ItSvss3KqXCvgTiuaE4GtJqbkBx2FOAQDi1CwjNjFtHDLMdBvDgnLkegfQXHwVHGWoD9xRea9zyMCojMnvxDta8QgC+pHwCczpJZeLMX7is0+jZcF/+LsfGenev+t+GhvOAQu7bRGUuI1mhJ5BuZtZr/zJca5Qg0vUUSG3Y7ySihhCdD0qjIz+nUHRV4h8rrEhbDZAfB1WdBH9xCV3/hKB6EcAn3PMAmYkjQWvjXIjibirCzHapOdoQFJG8yseGJn0/aQmndfZeK4KxqVzT9KALHyUjcsbKC51FznUN7uHm7IqzTkRhPE77oxFnJzT8Ek0JyZzmI45SRLQ+c+Ro2/1TO+N8Zvaq1Dkyjk5fMNVzpma2wogrqJbOzvIOS0M37ktl3wjkBgGSenjlgYVbX+6NqZBXkHlzJeQzkcDKMeDCM8OBXQQTpxrpVMZentS/Sk6k9Q1Aq8+IGh7dAIbgQA7HMLaGndCdGYEGEiJHHaQYqeenHI0R7P9LMc8GX3d2vYDaG2LXaJjMErsTN2xI3S3Qs/CJeubKs+IanDXrjKcxEQqEiExF2a34eykzoccomEeIYiToqFbioYTLWLLMb/E6NbOE1FHYwJyC88qCgKjd9juSXj70Nso2iukRJ6YcK0KGm/dEMO3JOrDTiwqv2S8vafvmxT9ZhrId9Lxv8wJrDgjuVpl0Otc8u6g3smE1i795PDwXMNqwy4NXLe/1yqu6k3p49al2AMXl+ebPhakSSa9d4vT7ITtD1BDzJMZvxYN3Z0hz3gX3tsw/fsE5tCsc3hky3EIXo5ha8URcNh+rcDWxXLC92JhdYbzdmaX2iLJgEfTbD+qvqb29ZlO6DwgemDOE3//9MCP//l3fPzpZ7x+9xEvrx/x8fs/4cOH7/By/A3jeMUp0xxxdADDrlo7NeRZ8AV3l9Nw3idnHY2DTrFmBzCmrdNinZ/8d+ZBMBtToomF/2xWl41G9vvC6zy9pXB6lIKx/+aMXzrlcy7umOom0dzirbF93qW+JeMfBvR/qWRErMGhEHfLArxUwggjCzo/zDri640YCO/Nt9K9xKj3QfgZMiNA5R9rla58b7WPkGClMFYZgWrE8wpNLjYCxa0/E5gH5EUx5MB4wJixF5t8nzHDKIK8lzPQ718CslPPwnscdzDN3QRR4iIldEFeVaPx2lSmCU+pSdHvnfdYy79PcSLqWRiZZjxPgAsO8+D3MF8Jt3LvropcBwJg5hhC+8Z7KFmpv5bNTlrHEBnff4AZ/f5uK+6HCvC3/xf63X8DzgcwHw3IdTOacWnz8MjnBjOFg0kgkbiKzbrwbkvBFGOo9T3nuSuBXTEKRNCMWfBai70bgZeK5kaoMQIvpNEfhGhOxSzr9HqD7olmJm+cpHe4azmNPwCQOHkZOBw+jwURvtcUCV+Ang9TKua0v+ifG2VtOto8tMN4obmhTk3C8TYG8Dog48AxDmC8QMZHxMJ5VUvuFOvYIJnQDCWKxFfRZw+JGCHhFR7j17XOCcwTEL97R07jr/OETuu7nTqnk555w+ZKz8vnJUPRxhx2srxwpJD5AD6ZNqwQyHHiAPA6DhwuRsKXYcgrBIpTH9B5uJHGR1ZiiWunMHJMhs+V6V0vHbQDnezjTum74ZGLWLm+AKDnjYMS8XHW7d6jIDYFc02yZLwMyu8vNf5Pgxifd927w+U6butd6GvDsnzm6y9t+K0U5QYJD6M9aTx8mXjKJ8DHlmUHrmboaKwtJY81ntilH5AntENmjFHOhaKQaac1BWIe2DAjizEvtc1cYu1M56kLQRCrU/Vw4Ml6FIgrfPKgBGqzsjCXL/1hvJysMtW45QrJfk9GbdQXMmiK8UwuL0uHohvxSrp5tutd6+8Tebq/AXEUfmKM3FCTcn8IIGYsl3EAbiw/5YCFRn91XJ34t/GDs3bFX+dPPoYTkEcFzXGrqbjnfRiLo7vy8HvKH0aXj/FAbhzM6Ub0E5KncbyeobZ38RlmhDsFQw/IhxfbnHgozuPEORVzKGaEn1cA0+SozmG0JsPMefOEnnWqVcJxzKzxbkgHQtMfjseQqyeNkMik/vundzpHcXU4cWcP5TWT1GZxZnUc5nyCQmC6Lxt3bNq7rsJ02IQs3CjCyutysjWLxBxw2mkboz7gvhk2QB7AUhCoP5iOwYE4naZ1FTkEU4AHMuaCLZuk6hKcGBpOH4JDLOpAmEKH2I3sMTYB4RS0CBHrGV6dMZ/tL7vIFgtBjsZ+4/kmwhUjBEBGRfAUgYVUw6FE3ZHjet6nhkMADccXJO/0wN9N51vLr8/a/Zr8PMpIjR+LymiX1/EDw/lE4L74nKmzfro7wy13SMN4F8FLhNcXKKcFcbgkACQarF4KWGsauW4d+Y5ZaINFJE+Nl6g3uTgyd/UxonRkWHYV/Lu//wna2T2JDmTdUm1kPdW6LMZUEyvh1NqU0kW3c7kUjc3CWx1o5XDxbPDx99IqRZrCVAsLIVoACD60ADcD0oy/MQbdwUQTd1Z9zS8bUr5uQSD4DsCnHP8OczIMlyijj7EWxuv+dqZDjrTzhkJ9uc/X8TABcQcoCKAHwKzxXUkGFEfxtni8gBM/J0pHMtKdvgRWmsxq8qLpN0FjxQPmMG4de0HmS2Zh3U+kSEwuuHLDI/iluhagwKFllAi38gxeo+bAZA6HYaAPqPwEOOg90J0qF0P6kXIn+EqogH56kbU90Vx+h0Fg+Gf0nw1/yhWWoPAKjM+o98kpe5E39t5ud1SEvs0OXnmOUNXXo15+SJ3i9nEN5wbuf9K3mPuijmlPQifOcatT4sYTWPhxfQl6/6H7bJylGc8XTGhuRpSj+7WKyuOz2VmeIk7kTiUsC8/aZmrutTYj+jvO1mr1ogynSHz3Coh/+W9zHJ0YOpD3mU+n4Xn6OGqOUdIekIb1cuIoyEWRETFR2dCy7bqToG7mUdBE8PXg2zk8SYG9whicdRzjMBlHgv3zAH5cx/yymfokLYQp6zu55Op53yLet9omykqm4PWjdJzewIk2WTd4taq0M1Xp9LWYkC/x5LJu7mIMcSMQkt83qWtgtM+6SbVfbV/WfX2J9oFFcDD3k5afJZOZlxUXGmOHDp//IvGP1yHA0FFngNw5HzA4ddo1VBOK0/Fvskehh0JeFeMVGOcExgPq0dQEgkNhQl6nyTsRs8HEPrqKCdVJcnHEDXZnm99JVyp+lcOBOSd+/PR3HD/+hPn6AT/Mv+D7P/8Jf/7hP/Dx4//C6+vPGMdHiEyofjbUvAzMx4n5+cSYdnQIGmMQg+Cn3aftuei0u9PD5c0KKI4Rjj9ImRRG+a5LBH3FALdZ0lMQHq8rt2klmJs8zIvBn1+qeC0wCvXgFsYrOAzW16Y/DOj/UqkWJtvnK8d+ZhR9T1O3D0LI3+XdJWXujoV7ez0r+94RP5ejyc+/qS4rEsJw+srEFwHTNoYlQxtLCqb02bwoBQahugBI3XoVytzXobWzmzzIvxDoXakgHO/GQlyUNgXgZiDeogNZFxjX5hrdCX/n+kNpWfK/mW5aJ5zeVqVoC1ptilR/LgDwfRjKTxu3uFjMn2HSKTUAFbLH4VAh3lyDFx53IpN6s5zqj81yiUCG6fOcioedcjbjS3obsvNGEEqjGatJWKlKw7tLkGfGw3UeXp5FmySVgsbXqkI/Fy7D+CRVrU10pQVAtMFq27IZGYKVNnpSKXElI0/RubKh5wlXUxCb4WHUic0oA4WU8oFUUnK0VaEjtvE3fCz6s8FlKWprZwgH+bQhzbO4i6ZvvismsBg56jfV2eomwol+PtONkn61iipQux7i4c98TOcJUY6rWOVUAAkv0mO4jmhGj7w3UKc7WOwFDEuJtjnVjOdLn75AFF63vb2uuEwVSzsNsDvp9bWy+FvUv3+OVHsCq4zEduq0PG9WfvP7qTzcFd7l/TLcNyNaq3dnSnlfjSs8T+U0YLxK5JJXlwlOHIm4wSJIXbfik6G9mtC54nvwdaXf6x8yeky2GTLDIWMJu91Wu8gy5mfaYVwiHTXDKtY8WllBvKW112XXsm8MlFkIl/FLeQU0S0rTpe6Kx2jx54pztL4PoSpcXufJLu+bcW2FjhNznH7iewLnhJ4uR1yehMhNdh57bVMtpJ4I5jFxKnAeFYSgpUQ1I25A4gqVwKFOdyYrJqFEG3WuosZOsHR464VCdAIpsahUnowaLINSpUpoDHeiE0I6NGlu21Q1Xjdjd3zohV8tm+tZwhSTpZdKeRxXinRaybP7ggZtnW7VpqbJ5Y+I9aKcAdTq5RX5zbRp11QR5XZ6IwpsiGtt/0kSqtfbD5u6UmjHdQ0i/I27HnjNWosWts37Y3amLFzZt/oXSU8aYda5lyKOzxiRCLnNo2TzQbJtDlMe8ZvL1BLG83QOCZ6C4N8OXTgGBzxy7zyAaIswE/CkKViBdDCmNgHJ9U0Zt8NxRasvCEN01fUXCH5UdhQxXUScJ+ZYJTuu3zye5WTgAxDXn5DsWgay9Z1yPE9D2pxwiC/zQNYnwrihOajtVweVjeaQQkKOzo6PfaBuiePB1qepHif8jVJ9fFDttfnS58613+9MvcmcL9ga0e/rFhzZencN6AaF6M6ANPNTxC4ByDlrYXrFgzquE0/+3gPG4oyN9Gn7DMNpeKo/R9C2zR9b4ppBWmls42Ry89cmmCZBEvqaTygiC815hqkpAyfKMcyaMyxOd9SMlgRO6gr3z1Bftspyur2kbhWTF0QAACAASURBVOiKaRhahUjwLn+ixAcHSW1nh9636Id0csj34hGZakzqFOA1Xdc7ZlxWhlXQZMu1ktYlOBrBAKZuHHlZHsqqgSyVZdmFh10MbrX3kne8tzarH5079Vb3XRTqxQJXwPIMR3rzffMsty5Y1co/7b+XCngct3VnX2hMvjQthnOukbccepnlS9vj2cC8lvvpK2GNai6848qpty08Y+d3473qem/RRcp2bvCu7h1gNOlS8ZdrEWqzk+O1rT05O7DE4izvl9LTIl+IB114JQ1c48a6N6KDnq5vNhBskrcSOrJHVMkzZIA56KeBmLqjcFvNxDlPPM4HTg2Xaa1+ApBG826jmcPPHoUwxMXprl0PFnJtSfNx4qeffoIcLzg+fMDrxw/4/oc/4cOHD/juu+/w8bvv8eFvf8f89MDj8+lXoC24WfmV97ex0npJZLvAw/L3guVrupD33UBdeNAXpCzyhbraLShBM++FZbPWpHdfm/4woP8rpVwY/DJE+g9NnQdff/9qjQIpoFhLcgPUnIJjDP+tsJAgtfho6CblRKUb0bf9YYVcyli6kZaeT0PVJn5EWkoUS3f6ReC/YSi/P2VeYnTzuHeMjedPG9uUvU3foshdNBf72MgcALYZfH6qcvpn4PUV+O//Yykg299XkWVL2zxdkwQjV7Dy1Jktxir0amweRWhzV9pysTdQ99ZGm9eFUCfBL8Wp0+NuFbRTxrmx1D1ofnm41a7YsSLHGhyvXpYF3bY/rvCkN7fk5mUafqaF0lGdFipHw7vvrDwLkXDX1eciVDHmqFA5Xld55RNuGn8jdSi+ZreW/tHYJctoHpHx0owZFe6W882lDOGxGS5TiFxTQ8ddHtJuBVAPoVR0Hyff3ejCziIC4EWA6Rs44vcn6CC2JhmdafqJ0S0kX6LFfwsLEsqgCpxz85LHU9vH2w18KUC/k0Si95+ynffKsa9ObwEWc3Tn8R/8/aJQ1FcBuof9LjGDlv7orl7Kyxt+muECl+xYF93Ey/m0Az8DEKdfyxN7yXcB1ltpPJfy5Ab1LMvxavgW/rzr+7ck5oPx+2Z8WF/Ioea+Fy5yge9RCv46f8QM2SdAGmKJ7cepYLeE1QuABtbqVbXoSarOu+Oux+nG8wy4jX6SMeThVDymHY2zEwpAOnfOGouIriLKne5St5zN17FnuJfn29+BnH5WRN3YnfoZ6SIZ3pAW72Xwu0s8B+37RvNDbYdewS3oNn1+xgPab9dDvX3JdYRCMVIHSd3C6W0EzknOidMU29J4tBR0WjXLbfhVM4L03qzicjdL+JmIJNi/tmRssPBGDjce05f6F4b3yZuW70yxlxhNXEdd6l//p0UXcCN6cWJBXNAbBj+LFOYwq5+pFctbm7ujYBhufJVqKWlAANmfu7J2VvgSaTu8jDy5D4koXdmL6hGtwbqBPn5Ff4JuK/8PIviZsNlAQuBk1xdv/U6v3IZiRQ0kwRsVPaeMmlfbNtd8CxbWPDHG63qj1xPP9pC1jf9W10dA/U50Xconv5G1kNfZ4V+dWb45RViJiGyxGs4DtqeDES4Z8QtOZftCNs5lUD9p/8dqiYgFKxdccR8ywx1hvOa4SmRiQsbAmDNvzqoA1Z322zuNU+bcVCc0h7KpJ6H7KVARJnJY/Tf5OwtoPP1JrJl7+PHgS/CT0AaLREhgd3IRMYfrUCXtVchqhnwzZyR0KHJ6cP7c7EpP6Y7indyq3KHPpjaRk0Yc71GPUQlFr2AOuRgO+tzb86h4t+dEpev1cQ8aM6j02fyPbjswKYt8DyuvP9nB1rt3UztQEnDJvLM6vj1gPXOiQK9//jxPn5MTim2neJ4G2q+tgTxJKz6vioI/u8q4N9P3AH6+kWffnJ4B/Q3pLSeLa4GC5S0dLRhM8/a8r5E5m3/ZgrsOT3LCjb78JenSnAPVjOjADZ+IMsUnug77S9KE82QOZzRhJ83zytvIVvNynhMPPPB4PPL6MrjqwfppRFJJeaskR+OwpJCECn6iGxr1j8c88fnHnzABfPj4AX/+85+hCry+vuL777/H999/h7/99AHny98x5cAUCsFOzbx/dO+5+VsjkSrGb8im/lXSHwb032NqCsJ1UVSf9O4u+/3DKtgm2i8o3J40mco3a8EaS5BUQb8IpKYishEpV3MupPwkuopCZMKCK51Qv/8zNt3qVAnXtSjSq1KV3mokRAUeK2Txtmwetv7chai03nRmzp+x6UAPbpEmm2+RngbuWUmON43odfZNNvz7srBZYFiUIEbrU1ng92T2gnohawUgPygwPwOf/qc/E7RTu7fpjgAF7fI1qSVSHzNHXBjOc7HiGJs+hnHqYj1tLgKMCs1oYUoHhUEn+MiQLA2eJV3Gwx/mhjHPlxW/lJ9pPfOsqgLhRPlzp1RveNqaRftfLMzb6yg77V4b6CyDQOuTwRrLT0GEaJN6DS2jAhR+kc+GSJdxCBaQCzXCz9K3fiJT23de6EFPN6KrGXN12rOg4TnpVP3sIekT2ndoVitrivaDb6sWvSq8nQEddkJ+zhMyKdw8TrvXSGFzQIddNeJlXd0lpTYU3lCgawP1IrJ2sHs76b79HhnCQ755vueoy9yQ9f22xv9aiQX5qttcULPwhPcuKJN90GCl88mGt2DJ/8XpTi/7knQhmM37L6+7nzZf+fBdXSU3jH+SwUKlZbml5zCOY81DczBPFQMIw96t9rHyrh0+dNF/eD7OPr47WbUTU0CnI37GDkTr/E9DQpRfcM2OjwI/tNfDXrasAjtBFVebqF/j0bRSSTYX/NOKGC4kZJmW056dnjqhE/g/PvzvJjrwCf/n3/8vJHM9Q3ZMV1/LeJY3rQyBTHdMe/hZ9hkq2SCnQtdtpv0JhoXRjDGxjvrvokPA5EWervVrAQpPLG957O/47V6TDEfYNPmFcwc5OSZICHkuBesyvH1NoO2F9ZF/Bz3teBPwEvoc77ylTslo0MKB042G/rfQvEQkAkynPzOFxpWBdau7Mqk6nV0343Y89PpEabwtR4SPlfhdqN7Ws36/jmTxqRVFa65VTF9+u/4QzyeQqnVmk+Uz9Hl/EC4NVwCqEruiUcwhJmETrG6DQh26nALPTCNDVvusNwcQ2kCN09l173c5n5aTgqTzDd8PrhesByY9QhOtWUztGkk/jVdReXGYytAq7v/EYb+LRhhHCTP/hhC5j4RaBPiL1/e/JsNafc/xViE6j7lX9NoHxgdjO870mMak+s69omyLmJOMiCBZsmMRyVM4LLswpoQzr63G792E2cDofTb6+wjB55ozOYelcLPKYEjrA8O5tluz6stTUQSlWN6exSt2rdqPCN5eRVdIQxqV0blkUF2EAZIVV8eSGFqO9GNwx7VdVeegdbldaaAlKyV0N1+bRRvqhl0yjij/+RiFu5UAOCXPHdthERE3pKu37W25w0su1xDyhVX9WN8NHFnOzoPXtosAcUv7CEOKPVc2LA3BmCHbAhcoY260udA5n6QOmmIZoVgpzXOqtVlO80zXXCZ0B+PcwUdzx08WA3MN48VonhBI6OE0aBt9VknnZEe9voe4pnW2CXSbOfoJGofSf1hHer/TWDK29qQ7VnovkmYZCcj249GFA9O8SEKPfZHYM/Q8HBUwaZYN6pf9G/RnX8ugfq3ETi6ZpAjuLv3tmxtGb3Q3MNg9+IImqCz357YdzkO0u68cyd1TrvubKEp11X6U898Ekei6gcv515a7Ef1y8vZNJwFJGMIZsGbKerhKsE7V7Unf9kjax3uS9n9Kv5TKkctpX7zqoWj7pVOg58Q8BKc+8HkCM/ZwBRGD3UOtA+kgFmMVBnlfO/rCFbFglmDWK+8Pfc35hp4Tn88Tnz59wqfPn/H5YVe9HsfAhw8f8Pr6AccxSo62PV4p+mz7znt0y2X8d8R9X/69z/9Ib6c/DOi/y7SSvE/AUN7aimgpV7Pwpu6tpPnHpeDk62e+/oqQXe9tzHYKHX/TmLP4aU4cZmAjIasSWwnO0EbUx4uvRaCvTUPqu4eDBm9IX3h3CdGusXEe+ycX1bwSwNuK7EV4Avs9bFk/ZUNXoaavCts3Upr2r2urJWQjTHe+6CocCWP97r8Bnz+7ERXAx38HHn8F5L+5ke9rE40BjzlAY+N/sRkzpIymsVETXvN0P6pAzHiuCoh5nssIegR6cLn42hcWDM51IULY3dLNSuvan6cnNeW/GBn4W+AiYPS8Y9c2roPflBB+HoYIP9WYhuQ4sa3AfPgJ4lgYEWTiG/oR/RIohdYVrzL22FjYmJGyx/OAr2xo6FonPCAOu7SdCL3QdYTWxSSDeeQ7vf1cHIaSufT1zVOrNymLxAVGwVO93RG48Y0RnBj4bI5KflfRlFknFQ4xPjitvKrdDR+iTQOpvAheYdkxF+ZZVxK86dOTtGVgMean0+3CrHTN+x4u+E+u5n4teExuPN/eVeeXrtboS2zGZBWkO707PSOit36vgL3nfblk0/mcL6yT9I38UnKnl7suyjTKD6nvAt9kfTJgUjUkj2T9KPQZBSyGGh3pcCOPvX8scLEOh/697yxandnveKVocq08lQhuoe/L71Zel3K65A0au+pkXYeqz7hLmg/wiT/vMMXZ7jrqZcbPQXcLm+ktu6nV3Tg9ZDfMuQPpqZjn6ddvPIAHXQPiMiNcSAWoqMoORh7unorHZ89/CKaHlE2YfAPejC6HR3QRtgtYPrXO66SNcPrrkiu3911PXwUEyag+ALQHFnMuAtnzEBdNiRsPamOLNuuzlxt2ptEGm1K6o98yyL0L2UAMZD1cVSKhMup5NcoSdHlOTc0pAlA3mJvR/PB6hpiIjs+t6t+gl+X3NU+b1Zoa1uU3cS0r+y4D/fve3cJLJNN+expsCcZIYxlP05jW3K9d41v8iFikJG+in8crihkJveZJdIBMQxET2aEQf6ZEiwOHwaHiBvwjuQe4JDlvBB9xdc3Znfh3d+4VqkWR95IDyJOrvZ1qLfhEvE+H2MZHeVDYZM511BgwFZUrvOIvjo8fIYjw9Yk/iS57WHuac9z8dcN5ywEuORoBqN9Pfrvu0voq/PyKx/Y6sbKjtTazNs8uNYL71bAuwcM/QPRBEBG/yQHx+pI2+1UnCfFy2k/bVU5fmvbzUCCQCOM6+fmSjw3opAawk0ZEC8zrH1xKG73VnkLqcm1tvhyTSCOrABT+3d6FbhVXhijmcMcVdamuHhFm6a0Ol8fNSc1FvJhRPO81hxvJ3cCtgQMFdIRaIARLsE1jCtZ/xUj3IWtX/ZiKGfmnXZ+YHYt9uOHXHQp02LhHxBhzzDPHFvX9D7tBwdud4fBC+CXeYVl3Mgdvk5fGYQQkLSgiGp2Xb4bWfuwmRq7JNrH2mw3Q9Qy2szWbZy2M+wgLOWoU0G90alfP1YiesPj7MM6W84Kmwe4rm7V2ELii+c4Kma5VyyWP8E9Fg0n9RTqcxJhNPnmunpd+T8rbKv1nTZpjtHt1W2Yj434xeL7q3TvT3WQJA+u6/osO7mTuDhxi2+31pvzV6N0w+/60wtzq3eMseHdmTyZH0S2Bdzq5GA1pXJ7zpuPBl6RrpIpYR+rUuupkwPcyJ1TtLnEMtUNMpwLiIeCHDU5IHXJZcpAVedT9pGiZcU1OMIzmZNE1B1VgnidOnXh8fuDz5884T5Ptx/GC19dXvLy8QHwPWZkGq5e4GzuHACn6+ZPfO296b1jzb2TJfyT8YUD//aY7L7K2MJLkE/tZQgsU9nLM2bhXyH61lEJNujbJXmRfwaSLoQjqYsbroi0fz1mvMMoGeUSI7MKLhtE8L0yifjxLvOkqgoy1xXw0mXcx8xj2xkxvloHt+8BGpvcHt+/VhNFTEuIKcoOY+oIag6sqvyqeNDbe/rXtRWNZFjuxEOSwS61YGg2J3s/TTp/n/dATOL83LnmerY73pegX4YU/C1LHmQ+SSIWW8zziz8zDORw5Iu+wO7dlAHoYiY/D3g8aCIltoo0c1v4gcQRbgBVe1d/Xsy6vxfNPcqbj+bWMrchCEXlOB5fUDDRMH1aP5kJmKSaCMWA4jfA8sYEc5dmIvJCjcNPu3Q7AlLkpACamCOQByGHKG/zONjmR99fT6hp8KiXqj03B5qGK9aSSFqwaiqx/zjCg80n6MACYcpnRGNjwfEHZqsESjhbUNwK68OeFD6oC+oDOAX3YnXcYfnJnnkbXg/oWhnh3XkkSjVCjFmC22nE6yLb4GS86nvZjk961qNhVEvhOQVbj/kusNbZt/p6S85I3+SkLk7W/v3X/34Lnjsi+RbFS+leITzNtdfnpGVodvKlmrInDsPt80embpJqqivnxhHGINtVyeEiJCX2lvVvGM0O5v9D30HmoLgGAA2ZEv+Kjf2cFMp4r4cfzOJ++ktadzJJlSJfxXn7Wcj3k3KANz6U5FsokhzOcqAhkCIYIZJguqmOUqqBVURmk3AiE04xrfF+IywoJA6z6JvUpmOcD85z473/7K6AngIfrQCV/zGgWYVQtYEjoyhY1R6svUy0QSsh3ARD3J4/DDXtuqg2RBQEmMKbmQYEkJgWUacPHm/WSGqKQxzVXOuLXcSuE2mkBfkW0uQjPUnd4ZnloWqCQc0mJlT1sBNOLI/4hvngvD4jMduFASVc2geNUYDmLxClcSVjDfDWgbigXC/s/BC8ww2osh2L8BXE7Ahm8OiQbDFh7M3+RTtKGsnQjyV/ITf3eltC/9+nt98xDr6xtpxZ01sAbjP3tu1UKULupHxa+Yk6XJhmOor5ZKIAZxiTfSjrnFg4jdHgzOPscHWKO4r3/lquiUMe/EhPV5zby5CD/G5Xx7yHAGMOnFp2LEkknoDiNXmGy4zlr0/Em7kCPMSg88O+QpuaoKqky/pvX8qMItRbzTGiuSRFqDNBlANFlGb27+p0FjP1Jw7OgPSmMSMvfyzAOdryo464JJN6vgBBs0UrIe6Yg7oCkA1RGi3I6EiVYItqB9tPdPOejOYGdhNYaiC9SqwQmR+VE80hpuNPKuy0vNB4btV4hLs7U3QKtJvsd5nUGXLJcKlykJxcr8egJdKo8nbFEnJbVnJKn8QLjB7HBLqX2eL1hcFYZWZ+F3s7SMFPEwBAzoES0PFPVKjbkhEDd2zzgC5lpcHnOsFnoQES/UR15glxmuRxkXYSTuLkcgMMU46Gpzya7CjxfVQRisvVTYl5LHyFkj4sfV2mp91LcJRTrNCwDEJ2kHdIe12VPJMaf5YfXxzSxodEOtM3jsh3q2nLHiyw9am31/CUWUsqAIwNcT00+S9d8AtNBss5w8gDqQEORGGqQHcNUZe4TBTyTPtWjG7jxXOKQRVR1MarHc/q778bXp4szRzldfHV9a+GNeLqkLw7j3vnaNj3j3cve7dP3u2pzrss17+JIYHuC8Uz2spwAbv44UnOqdYn3FW9rorzY6QP+nrhF0f9XElmCFVEiam5LrJUiHy3wCx0mxST5AvFk3lt9AwZGgLbxCKbqgHoI95D7jYef6sM7y2l0COQYkDHd6G6VdEcix6PCnJ3S28vmPKYAI/Y+FBimC49heuU8XUpPi048hrhTqB9mgq2NxyEYw6U+78dGR/IQk48m2yYC4kAvq1uLE8WK8xIXhLfLEHSp9kf6svSHAf33mLY8XWpy8UJjOyl2C6P99PqHT6pocv38xcBZkbcwbAWASXdikdCI05uB54jbtz21+QRY2fy4XFKFNn5KbZci/QYy+PXgsb7Lf/N+7kGOdFG6FxpUypWQN2OWYmX/fflAmmnK8l5fGRVDLq0ac3ztynK+/wF+Avks5fI//wfw8u+QGWGmL9U9T+qSPyDdGtDpnYwljy/QRQAMQoHke5PQbjgXUwTsRDog49gsWpbxgeNsUXoahYVyden3MgZBvMsYNRiYR0ls8EvmS73hQmSlxDHKUpfUDB2BIoRQ6KyA+I/c9IhiQV5hVAbRZ9Sa9OWwRjcPe66PaUqbnBhrKMcw0jS+W8oy2xkq5F48j0V4wabtFKB9V/fGxPkwowg8jHuctAeHbl/njvBH4XiH+2fipCEs6HgZNyh0fjZ1dvrJBShU3YAexJYWk9Ceve9+NGRIhAJQn/rPlhJe53bixjPZ922b7jJ2rlUfqyDjdm/KvbvN30BG/6LpvcwU+GX7+c+GM6LD2/c7RahdbPBGuaUd0iM0HVZkKerzJvXLypPssi3oeD6tfCSKhrLj0SoUAF5RfDtgI4EeggiAHQ97dFi5i5n3jXk3GFYqK9G59XcC8o50bTMM6PxMlzwdDqm/ATN8Hb7pH3JfuhEoBaifJuMAGH1T1k6aR+SacrISYJ7Qc0LPE5DPLjfsahDma+30uaJf1BxDnLvz9jzs4jiDnlyv8dDtRotC/lPWgRANqVbq4jCXF+ZtcNrohGn0Th44fbfysr5OI4Mm7btsvrSpS10MS/6g2U06DphSFA+fD6/+svVAGqTZBi/xcmqx0gEKxS7mAGnLBf8E8CJmMAdsyOy9UOh2ZN4BqRPZZNh/arLj6fokX9JaGoy+YEa+kbGb67680jxkTXUUjN0AWsX3bV2fuuFNbVxEBYeUTquwfcRAYvwbDi6xwxtmSSG+kcZYsXmVYdkFGWVtNGtuGWHKyG1tmF106WkYTRt00Q6NrVTb0aeAo3T4uNoh6qCyG4y10PTe2kjo4mb1MsJW1K+q5y8wfP8YffGJ1+8/r8EvvrAj5jsiz05mrs4d6F+a0EVdgzax5aaMIE5BJbZyHK+tbbhJa3vtVeUnao/7BPBqvEgfhcMsU1c9BQ+6wrbAIsGzZkfpvY/SJYk63jzMqwD5KbQfI8CFVpG97GMRv8KYLDRPJsLIa8/OLZ9hfaU6plh5xQmx3id8Ud40KzMtmypwguk+IChztxm8h+t5JnbDMTJmrM2R6TxkuhOz8QKpMO1ijtFDUe2o1+e/B+J0tiFnwqLEmAriPMSdgqaoGdcpco7B5yfQY60tyDk3YUb/4Sf2U+fIjAVX8hU1Z4QchZAvwTvR37XxERp3JxqJOryfVyO34VMmj297g2squEH5l9cEP6qfXoBuh0l8hRqfdVDlPN87O+s8fnXHVaxXudzxvWo2Tk/e7a8lnWvQL7UVtV86o6YrRJ8Vdj+yUoHY2+HT5HHYQOlZwMj7KFzHrn/3Xf7HJF2+y5PfIjAn1q7n2zv/8jPuRdi28bWRr0xfgccAOST8topFj4x5l07Ju30jn+8ZLERqH+uLgJf967cwFvzhS9pbnzSyoHWMSOkKHZZ1Xt4xoV848Z6wmsxWpk1fbukJYCimnB5BaaTeWJFB44qzgLs61CIIxL5pRmuyNwPAMQTjcOdCv+ZMcZqzzcsLxiGEL3U9JWRaGdZTsfDGkz6Xfe6mbYWsBT+0rLupvfsOXGnrt2ZRv+f0hwH995jeLcBuyrpi9dx4/iukHcymafr31P5IcV3yYieo3gu/olzmg2NO5rIEqJZnorjx9DyrqTHcO8kF6UEhqdoCMep7B4yS//Si/rjZzZ9ZcWMhT/WWIfY+VVNLvgiXEnA8qySL9lzlpRa/N1oDgS8k1OOEbWYMmUZeV2lrowZDILFyI1wf5//T/wY8HnVy9wXmRPECk87rndbvSWSs9J2l+sxVl0/mCIEbtJOGXiGaBcDCODYfpoWDM93X46gdMEU/rxWI8rl+zGnQ6In62Kg4HB3ofeK0kQuP082CwjU1VlsTuLWa9pgYn67v4lmnk6id/7TXRO0YroP+ohqJ/nfSq2gUGeQ0Jqmf5Ms6o9HQUBk22h7yBbc0/EyUEqfk+BGhdtVoc5p3o8wydAj8VHoC7HlBc7w5mqBWBWvaOWIg8hM2k75XeirEKybmeQL4BMgwpfIAXl8/ZL/184kpgjkn9By2oGVHGG+a/Gb6eO4G+Fvk5hendXW0NL7Km3+QCP7nS8+Xir9Jetei8C7Pystk8w74ur4xL1/pSuh1d0QS4XI7vrf70WVGNavUzqrnEIgs26Ka1Ev82RBAD8+2WkhRvCWi8+gwXUwBE8yPaocN3pcUcjXqjZhwm/5FHxDtg+ruxm/a8XwjSW5opql7ZZcN36UDYAwX/7bRLzIg48A4DuiwCByGZVYQX+m09ixZnzI75MCJqScmFGlEnw/MOfHd+A5zvOA/P/3s8vrRdQOSrXlTTBCd6yehw5uTmMnHAwLVAzoP4+sQQA47UR81TkkyGxAPouL48B1xbQ6QARbz0dVkvRmkLa1IljW1KPBFY0NykvWhbeJhAZ0m2MCQW9Di0lu4F5U/F+2NpoO26G5onspCsOTgadGG1D3mA7bVZAZ0O4F+iIVv57DtB5D3oovAQ/iXwTObldJy7N8LxaPplqFr0ZQu1hY6Z9W3w/y3cPA38wr2atICDBvPuZYvNfxfmxjJImJQA6+Go+QIQBqk/buin+auXdMqm+uNgcMNswFxsncBNO+VcC6UxlJqP/qba2xNs3X0qBu568qpdM5A05IRBvaAYz8glL8ZnCVxko5HlygnPQ0P3/aDCP70/Z/x//zt58tYW2KmfsNvtH1pz4WKs2mc1ZGYtjSk1cf43nLzXJHCV4DbQNkwpst7xYqkpGatdhKOoMWki48w57fow0cIXmBrgWJNCTdtenRjtQFlt97pnglw2g2HDgzlWulfkm9JLVdWTI4lVwO7aTRuOPf1/dSaSRx3xOR3mQLL3Fz1d1kQe0/rGbLpItjmtblLjFgttn7WpQWGnzAaZQB2pxUNZxCNILig4JSS9BprsEF1WeeKZ/O0iGmSvgoD0Mnhv2PuxQlgl3AiprPwvggE4aUX5nZtfFEcz6tMjcmHK40I0HhDwh18UJMuyugdb7R4FFAGeSCd7ARu0A4Db0zqqE8EO2ecfq84sZpYOyuXpSGQgJ0nftH1hQ2kfsHz8JdJabh/to95KRSf0Wmf9yrJA7ohzD6SZ0Z71jDVUc/UT52H80O00cMuHSjXHAAAIABJREFULzArfV720X6B9CU44sa7Avwk7zvG9pv6804NrU21Nxr8Ypw8q+o6X7bi/SvqBO4xLMkx+lribguu1f8Uur3zXqoeS94Od8k9zVLMe1bUL3rMW0kJ9lr8Uv2pYeKioNBmXzhXawovBaTWyAMD85gYL8OcwdOGQcpTtKkwR6bhFdPVY3r6/smwNdAYA4dYdFf1E+Vzwq4YOW1f85wnpv8BH/DyamHcP7y+4nh9xRgHdFSEmGIZ5QxYLvG1z67e8Qs7rgCBbUSU/m3i2HH5S7Ko/6rpDwP67zW9scnLzHvzttUj9xl//XQnXfj5yrDv+v7WxnfXG6tijbKscagbomJD6jTj5NnbERnGfGX6vUzMnLV/z7qfwL6+jmLmvuzPnuCA62rPbp6/o7xQaE5mys/roO9Psu/YeBjP07OfThddLGYbw3oICKsrhjqUlNrYaUrxeQIPv/8cAI5/B15fIHpCPv0MC0l+FUbPUlNidKW1kIJEFyJ5jMc2HOJUli+6fEEbYciNTN3wMD30oR09XzQdN+hGfhHqQ9zlVws9gMI55qKvj1OPCsATNfpkC5NWrPYCLpsN7eVFFeDk9ynmu7GUqa+Sf/Rf6lC5ZPUiocytGyFBV37SORSP0GJckUt+QrQpQJ5y1FQWg4ZqW5APTeTpmKRt91rUmAeB19OiIiRMM0+gi19B4Q6QROeO+8QPj4CfkVh543YcZPN9Zdb0m4vPaYcZ5UTsBE4BDhl4+fgBxzHsKqPjgQcU53ni8XjACnmNmmersg0VqfDvhvDFlk9A8K5CPiaiuSRW9N8z+3nXYn3OcwTL999h+ibQv3VTRr+8iq1OAWIWIYffW/Ga79nv9fsOeW/oCdu8XOdERqiR/AcXRUuR868yr3NZlufF3opHyeVNB6nzWQCuxxw1L/NKEl8JCtwxaNSYiPM/22V12F98jgUvWVuSKp846RvxbWoDKCNsyOgV+MuDzXS+mxQlW+vJUlcaGtxwJTB5PgZEDoxxYBxmRI+NXOPzHVbhjsWmn4SBzWTK1IfJEbWoO3bHqp/imqcbqUP2IPHezVkIf65UtkQ1fR4gClHbcBAd0GlXzYgM6Hlgwq+emSNrZaeACUCmeP+8QxNG46p5GtmH1jtfiEjj4Xbs9nNMHYrYdG4b9brQWe7MThuni1QFbVqHjCEdCUKAL+/X6QjglQzk3L9SabTqC7BH6CxOXhSdOZYUZuO0E+cHpIzkohgiOMROob/Anok/exXLGyrnEMlo+WE4zSlMUJfOo+0jvqyzuX2S/naX3sO+96f87kWadMQ3uOJ7GSillVmN6e+7a3IDgwS7WU+iSBoTmeMKFRwQi5IUUIhYNAsNShS/Uqf6kH1S25gEUM6lNCo5a3PfIWicDPDB4xVIZw90A/pY8FIh28uwrpDEQ41JOKxW2bo/XJIn/PnDnzEA/Pzpb4UzUUgY7rBWY9/+9Kc/J6zCcirX4ouey+uvd+xLhIgLbEYxGq2aSytNxTyLxW4ahcNg7jwXLieiXzEnLwTvE5p/FjNxeHnelmNCV6MDjoHmxKCv1YcMPf+h8mQfPlfbKmC8RNMpid6aTpIFsvDI1qXIx2VpzGDja2IyiIrnexQw0quPbkCAvGM8Mkyn6DKepNSx3+mrp+DWMuWaxiCIYOBQM3EPWOjaieFLUNOzKqw2IRF2Mr4ikcXYOEyqfoK8bAt5ojyM4guNH96XuItcULxp+nw0UMroayjy+9iTz4VKFuHg3fwbAQElHGFmBBQGYKfpw418iUiMmfKXHBu1T9m3EhvR/Qlo1G1G+F5BRIZYebNiNlo2GrKO2+9uRF9h3rIXJSM6IkpPzfOCEO1bztg1gsNlX3KZaEzwX5mi77fG9FRedCkApCE81/LufMIyyvXE2irU6x+Czm6M515/Hb6h9te1zzfg4qbzX1XsuYmMiIETk8QuyXszbtrLYjtm3QQH4fXr030kh01eMnhXNM5vbF+10fSq8wlxA00a1Pbu61Mvr5cva5ZVsvm/wmTSnQxa7Vn8OdxvYbSZNrguxqMi+ZwtUTU86XyNLDjE9doDkGNARxyAI4ZIMluCR/i8EHfa1qHJh23Nc2DEwUnnLXN6aPgheJzT9yxPzDkhAF5fXvDhwwe8vr7i9eXA3198HQwFhuB0nmLRVqLbxG+q0zUvJJDV58kFvzfT6Jeg7z/SHwb032l6W3hp50Q3gksuz641676pb+XvSxPJEABaIa0Nyz7fbb1L+WQ6y2IkGFZbVASTotOkp6JOrHs+fQCHbxACdird73W6wPce7XwtI8vnLs+1ku3Tu9bX3Jd8F6J4g/4W9AY+9yVKlW/KfG5ka8dbKs0oYeJKbttMbYKDhG/AoRFeC8B//GDGyPN/ZX2AWChTnMD5/1Uk9i9N1KXLsxSO68IYucBsntyB2JV+IXUHT9KyV8R8IOeZK5exsKN2M1RaLDy18MW8QPIfBroWE8ob75E3DP8JtvWjTrJENbFYkk0bbyTuzJKE/5SyJ3ix0KUQVlntsr2Wzg6Hzflj2OrTFTdIns+3f30ToobGlZ8cuHjuhvBcMCrMeWM6L7LvGkZ0JcVwToQxJPl6Ljpp/By1VywJ6u6KhpktPvcYDk8b659o4DT67NicM0PrKQAcB44heBli9jS7EBMzd+cpRK/SaLCSuaR/rHooHWXti/Z8F8i2g/EFSdHYwT9V+g7Af/561X8p3r5Zl1nH8h+Yts2V3qL0nZl9GmlXvelGTqd8kaLVOFF8XdgrVcS0vUO0nzbPjfa427KuY6iFcN3yq/S9aJ1WwGtzUsaW/Lzkq2f1iuUk9aXJa26T8NmPzlWhht8Kt2+Ry32TNfvjf2rWSPXIJuInIEWGyRs/w6m1y05lHWcErv0zjYeqyYg5T0z/btdnnL7haxFsdIQcqatrYrOaT3Rdxjk3jbl5xaHWLxGxjYk4UY8D6agnEcWFugL1uyiJssLPKxuIjfMGyOb3Oi6hYyjNBVlKrYrCbhI+4QMCsG/DzMrC4LgpLuplFgLdNJkkRyTPZCjuNKFi/r+p/IQzBbQM32J39Q3YaYuX4WHChxnLD1dzDnfsEBELxCUVtj1Oow/PMzY4a1Mi6FNhhkw4r9HS0WQpx9c/9VH+ZfixUYm0319Th6Vu/AgHlFvB5fR8fbvw7l2bzp/DkM51sGvHcNoaPp8xxA0GRqxjmOFlOM+xPDVN4hxqGHE4GkDIjjwJ6DCx3IiT5uYkXRNACDPX8L+B1ViXoPiG/847LKm89QOXNUZwDE0gzYgOgLZExDfTJb8Dgh8E+DGdnwN263s7zTaGRYBqg4RCDPEiaVHGOqRwPCWWhZwOuN50VCjYC2tVcRjRE6/heHp7NZyAKkYylHxL0UNICe6t+5gv5cM9ouEHcNr4DsCnhTo6dJJnot+RZP1JdBstNHEgCbVkbrSpOBYexXsVU/zcQ7xyia5iEtqWSMmFl3XMelJ40xm6Oz6CFFducR5q606bM0Y7Wa/PX/WwuLEfUqRQsULEDeFxD3XwkFzDS2oZSMOtpyEV0lunWt9DR8l7aae3b3Q7CRvid8NExL1Bwj+M9BDJk+8xF6OULqfIOdw9QKGLCbvGg5YDAK0s5SMVIUZTaRJnlA+g8wf/zHmL9cCBIIw3OebRbhrRN/JAhHP6v0JT1IncebdSvrWea9/X/j+fe/0QSX9Wd95f81/6RXtJpjJIPlujT662V1GYDunt5b7fYnwXDV0zIgEin8/Uo3edfIKAu+n71UmvfQ0Y3rO/fKlrIXxcx3ib3t2vmsXXZ+v391T3zvy6fHlWLHSfNZPctKdLzoseyrygCtQSoutDAUI6alzebsBd0psmgXenmjx6ef6e4vp+YGLtu9HZmB/n1Mv5aJ9lP5YyoiOEt+lfxwugjwPzxQvlcrbisXh25LUiAHRO0wdPqW0HNZduwXD+MaEzDtYpcJ7Qx2ecj894PD7j86dPmN99xBjDTqF/fMXxcjilae+Ud4ins3PtjjJgCYoSiNIk4TZSUsOykvgvypb+i6Y/DOi/xxSrkPfMgORCyyIoyqfXlWeLEMT/6MQS55mQvAj8L2lDr8rCds1I3EYBM2qNMmxl7GCG84AtAgA7MYS+xkm5tFMoUBKjGQ4pz3v6fCe4NgKeq3xXdCbaFJaVSTf4bqSfM/ndlteK+gpFGPlXXEfFWoqjK8lRPp/Ltc1aJfr312EG9PkoeD//DLx8AP7vv0L/hE2HdzhaQVznGsNOBUJjWMEU2qoORDXjhr+IxW6Q0HYehSIZ+cJzPER1VzQrjJp744aCF2PDQ0wLoiwbRt+EUfpCsC3GSnFCrOoTGM+XJwhX3EXB50RcOHR+FzSVhmX7LEWWDbbRDsEeG/7HAI4XC0EbRo5QgoOVOvhlLPF6JxCh/EIHgnoYMQoAqDqhkw3mjts0mMfRbAFHSqCWciwtG70X51m+3XBNM4egMMnlOe9A7KTEiUGJkEgIupCsQy2ch7PU08xFY+SGg23IDzM2xc4Wk2njwUFT6yRaAWXYN/z1zXmuVz7b+Dp/3cy/bWK4f7GV0K+b3q19C4Dv6TcZ09s8f1bFvVz75pQs6AvxvrnqeJ++dlyXck123PE74pfb5/QpCpuvdGl1nNwtq4PxuPjctXk7BF5nfme9LeZytAnkZd0KiEzjp3ECetCG7Hq6XhVmmFfY6vgGTn6WgnJ0lEhIN10EKVez00NWnHMe5jFx4shPL6mFR+3m36jryL7EiW0PrA3JK0PCWWlWORHDg8J9sQ7vzmfjxXqaPNETOv30OR4ATpfXdk/c388fyyfA5WaYt5oxwfsbItF+aW7Kh1p2RGjoKe5kKhA9cMwBlYG4axnYqEIuk/tmYXwPWvKHrttEhoiqItuxW58VjaZhN53cun6UgLbU56WIuKx13SK+xZiHnrwLPy1Ig3LVWYuJ1p8cemnPIwQ2q1unmHNKnCBVidMVSAP4IYKXMKCPUWHbh8nkw09lHuJ98fqPrCdAYiPeSjOFMok+KdCNQMSeb7H8/vTWqZ4yY7AxGAsxUv7QaZ0wLz40DLG444ns5xDrbF2dWPj/U3FSYc+H2ElO10R9ClerFno/+AuIQKyeYwyaDn5SN0UIwZ6T1XlYGNCl7LKFC2n/qRMO4yzvXyejatASz+xOVbiufRB1G1wfP35I/ETIaDhO8vSvaPYrjUVjuCNB1SUY+IsAP6q60b7060tkgTGSPnKMU94QfQnqdHgYl4kvGG6CP+bsqvoCO8XCPC+Zf9VHkicY18FrsgB1Md7lv0n3gjSMM4208ak8+VsCHnE6RO+7Vj8DDiGDcQA5Yu2zY8VvpIhyx1BGuwHrgIVfjzvRhZrz2HAXvhbc/vDnk/h/mYut3lq+sB5h+YfTpMbrS/cGtVuuWeLvImLZkAh9PmjMoh5rYyr8BDfVP5BGzukG6pBfEJ7v9hmn4EPSxRzP+eVhaaYoygnacGA6gNG8Rakx2Z1nzsX1idMxPyKsewBs69Q0oktigYzoNY/KCV3jxjPnZzW+AY/VH3MrZETwfF/jKrNm5/W+PuUIcDZtVucjHhPTNyTaIH5ic7gWHqqgESNcxBgtxvdUm9Ymcy5upg3xqHY3snJv7fElSmH2WxPX8TxmRDjLKZJNpu616oA14KUIRoS9xJdXtBrVY69AMMtQyXecw37LOct4PpF7X1kZGdwXUAq5NCSy4OQfkp41GXDyROdIZFsi4LxfCghXxm2slf1CeGJ8K9eq+66RTFbCjY5d5g5rrhG8ob7d2un3Ger21wOQbvMluFmzrr/fMX6acUaWPj1RPku3eUvLXmojxLB6xF8kJGabc84nfZ6a2coOP6kzMzkEB14wX4FxAhPuQJ7Xf7EOY1FL4OHYdQB6xkpAiE+rX5eJ4mlpQFfo+TDj+edP+Punv+P7+T2O4wUfXl/w4fUVr68vzlIbs2u/r6Md8nR5QwStm2dt8IR//gY86V80/WFA/z2nVSIkf7ubIJfVVdXzz5C+WED/0o2SgFhwKVD3JhdSap1zH1407kH3zWkd0o8Qp/Ya9fK7jRLzFi6ukuY+40aRe7dsDYYfgqtl/DZmvFa5LkbT0MmSgg1nClKEWcmtfB1C8j6NCtRCX+fRpoMkuZ7ATwzQlxBoaGKgMd2Vl6ffcokecTKTBv2TLqFUsZMdOsYtrM0GzYsD8G8p/KkpVT0cUSfTUCYsjysquQBUNMOHL0QjTD1EFvJ8psVznmVuKT/XzMV5GM5cxGvQWdSjXb9f0ShiG2PjgAw6gR4nBVelZvNDtaBUtVA/oq6EhRKo9h06oWHgCOO+0mnzy0qO2qmOb3lAX2R8A/NtuKdnMZWc9jVhEZu3w74/zhP/+fNPHsJdoJ8fmJ8fOD99dkOPR0YQ2wjSdEYYOa5bktmw9vb7Pek9fPjN+tZMv8Li8XeZfsO+X+b1bwLF16WVnosTL993BC9LmeX7BQ/rnE4mTvdPMLNUmFLkT7LakSxCAZNbwQOm1sIyQ7dHyHAPdipqTkONL9PqWw504KNhIf7kOyNNv+I6UAC+a96vGgtwhaF4swVsI7gwqr8ZoSXgPKzvKtDp0U2mYE43kKWIthPdKiZTh4iLCCXWb22bg5VA9QDwyZ2wFGWEjugrheQwzHBa1GPwPvNUZNhw8dxz2gaAhDOERxixvo+2OdtpWmnsSHYov+NCC00vRuW1b3iqz3pbz+hgoZM1q5IKyIXSISwLLfKg6W72/YV/XYzn8awDI0IkKkpGOc338Tdk4EXMeGqfipc4YT7MiPoy6pS5SBhi/X7ArEfKuAyUYX9l9br2up+4WNWvPLnXaOKa3svG7/LtxPm7REWQ06p3k5HpXUA1P8YbRrQBcs0VJ8wFBhPfPhah0gfRnghMj501fhYuPQjI6HI47r0UdBjfSTYbNUpw7m5wL/PkFavpRLM8Xft5eZaswI1Gzs8UQTfRg5h78D1Zze/lIuStOE0rwUqYeJravcVkzMoQrSOQpU8qdGM3Lgzkgp+RDnBBL3LB8BXjO9lFr7Yn0hc+fZF/4gZFlmMde911JN71PlYOabnQnvlc4+VPpHeolQVdjLg7A6lGjJf8bEZ2EhtrrBtrWmMZiSF1MjzPXCuSymuqW6WSuY0oFdLeRwvXuVMO0G09Jz4eQdsrD1IgwlVLGrarRzLMEceM5+qiVxvWYj7FJSxK/01EFDJDnJH8dCO398RD4EaEtikFgepIJzR11TB00MBWhL5l2FVKpxlk6FBYxDvm0WNYcMmI8tDCFLNMZd6u9k59vZ+OX85PIxRv6Un2YHsCfWUASV/XqASc1jvluZoc6zCiax/7ulYGtDZH9v+S3sP0EKhhwxIuxvPI00pEJIbM57872VMRpXnvc4d/axWo51rlNsbzu/2RbPgtY/gX4OifJ2103Hf340s63DSDXz/lnFwl3jqnIv+ic/O4s51kJ2f0+nh39eXaBOfNiMEavJrm6h3Mv1iqtoythWMg3kH6v+S4qvP1Yp49SmrMXSAWmppTfUKn4JwKOcUcvjAgL4KX+QLowIkHznDKn9lb4g0eBQXw/QghHmGnzec5y+FsnnbdCIDYh1cA52Pi06dP+NvPP+O7P32H77/7E0QEL68vOI4jdYO0TcQCjMdYL18qrSoXF3tW7o/0i6c/DOi/y3THrILj7bg0fVmE5T9IpL0v3YD/jpdP6iStci3vivAqaFe9VFLJmn46S0ybP07ouTC+Y8BOi4rvUHBoShY4rDSX8IzXnDX1RE7v3pjZaaCtov52ccDo4pVruatvwV5Tgm/K6LKsVm7L8X4po/mXnp7NeB7K/FqW8v4Aq/vxP33nF8DLf9T77yfwc3Vlfypt6XZmidVejD19XvrCz6X/pYCl3yMM80FjB8LArgNv0sQlcNdlfOrEFxubJdr0z1A4cpE0/WS0kAFd/N7y2Dzq2xG1+UWLoefz/DIRbnO17RpeSE//01h8h5pGC6sAQ+kvdowldpYPyGG47yHaAwhf2KUS6P9I4MwXuQrIVL/X/Kx38FOCc8Ivf/W5cHo9gdcYLJ6tN9pv+7nibqkv6C156ErkRPwK8EaYRESOQKUOQNw5YGrhdij08Rmf/vbZg3cMyEOh88T8/ADOOkU4wtjiCmeM7jzPWoRwJy99jd0JXd5tUJHP3+CvxTjXB5uK13crwfxK6TfTp9fw7d/R97/9IwHZpjtjxy+Prq+t8SJU9s+FnyWzQs1Ll8PLiZpLnXcnzUsLogWc6zbr93WBl9qVzdswlGsc2Ywr0CXO+AG58Rcn0f0uMgxYWLWsXzd63fpdCD/S0Re4qI96zyiWS6GS2c/YAy2wzYRFJ/7D6KEU6JUQLHmG7YAZ0e3+TvGTa2E8nwlK8OqROpDO6b5sHxDb+NCfAX1YvVNNvjQ5Eo6iMT9GQx3LEztV6yEuZdUrauMjDOhQ9Yj9kvJUUgdw2thsKmvIzRRDXe4o0w7TRNNld3pFzB8W8pGvw3Dh7zH+5HihUGTY68g0Nu3GDvsFFqv7FVZ3RBx8wf/P3rsuyZHjaKIf6JGpUnX1zK7t+z/gmp1zbOf0tC6Z4cT+wO0jnR4RmVJVqbpFWSoi3HkBQRAACRA8EUM016y0IpwG4mS5iubhf/W2w1ejQr/76XM3nje/TqU1tZOLblCNu9HhnxdUuHZIqEdiBsKc0wDtdA2aQ2CmE0rzndapIZH6/SgrHdZ0S9F8R67fyTaEGRcZh3QaLKExOcJRz083KhMx0cjE9xZqhRAYAsGT607GJiyqxe7GouDPIgJsfn+k2OnrrMuDLydm3RgeJ1yzD9OcaRJOpWOob4YvcNAWxuKoZ/kk+E7Stp+2zROjwNPTU0Gl9CnEh2iq/+2Xj/j88tWBCwNwmTYJ4JEXeh05VBMN8D2r9V5o7HwUhNZ2zEsO60Pve41eIiP/zfsKkVMARCjSA58LWYIUivW/1Pv4TVYue8sOUc1Dn1L+gX6anywnvGS/AOBD4qjhdcDTvN6ghw+lCs7PsMdcVj/fbbA31XQScdDRpAKRzxCY8RhJMyLqQXYsf4fRXsvrVrxU8EsvKSFXYpxzUR4Qs7ziKGKhy1lrYUTPYgmKuqZYBulRi6wT7IGlnug3XmSgex6RjMrQe/TJS4dIUPErWaIMEKHmFXFBhNNmC8Oon8bXnrhIeQc6Pa8wg7mUc0JSpxuqbMntdCh2h22DnYwv/SIKm44mGmVG43Ak4z90ytVxUBh17C2M6DnWSUBxQp34jXquNLRU6HlQnly/JHwyfIyCMIxVhCdlPo7hM51VwHlGwU0aW+Eq4VEcatVedBiPFAhnh9AZ4NsfVbTqHqagYlT5sk26lo/2Da1uH/fcn1pImwE4qnvC8+GU6PdK94z376/45Psd3ejd4Ex0uVbM3t7gAT+acwaY9Iyg+0Udg8PGAQU0L/I/zbZSEbkBfq5jZKy+VAmer8Wo32pEZylyL+fwqfMBMxnJPGo9qVa4D29MvO0oB+bmPMSXyhLLaAvlgpjHutsauesFbVNs2+aOURbFc3/dndFFtDpUo95Ra1uR9604TnRX7HJFuMLtexwUC30tnl/x9etXfPr8Cb9++RueP1gY9227oLXNm3GkhhJ8hrKz6XFQ2XTBY2+ko8r3M70j/TSg/6ukieHwz2GuvI+3/aDJlMBvTUdv3nm5yUpZMfE0AjUd7jpTwHaXOnwgFEPITYb9BPz5MMk3pW9klrxx8OZqztqeFvW8vJ4aP/4OJUQnYaGx2NIx31xJepUp8PF/2e/d62sEzR4Gy0mxZOUmmlgqTm8cRMUYoXaoQwhJkak5vM0MDbEjmvdGP9Z22cxLGWQdqsKtVX94U4cXfnaizf+S7gvuwxj7YvdRwjoYvM7ynb6xfpSXNCkzrIAknh3v6vM5lB0pHMfsmEdbhhaji8qITc/nbL57iKEwrESI9h6nzf23AGlQBxAGgNr2GTT2BzH0oPJ1Wl+No0J8Y2yvd46pvGM+yCOU4esrVDq6K5l+LABhWGukaKqq3eGLOCl1B+6fCuMPmH7BcVB+x/vS/+0S82zmTrQ45rRkmjJ9jXk+bxa0kTfe24yhLHFOMVfFzLNESvni3WvMz1ZdW3XoIGDpkRQLq//WQK/SwzyGJUKHykbvHLdp3AgDSp1eNDEb4VFnFu/j4g5Yxmp7GcrTiD9JqzO41cNeoiE2eZmilIv7Cw3ezuuPbicE0MxkIM31aEjqK6caVKklLj+iahceMhm2Ajpx2pKOYzqjDdK3bqZHdjwmXXGguZM5MWW8eB2nUzMNs04bXm8YtdOnQmIzf1GX2OnyVHf87vOtCeIkchjPqz6qR+H32Y+wz1Ns5Zpj42kDPEwfrbzCOPyZAByWT0M6DUDHecChzI3HGqvdIDDeEqdkJa7z0DDK1hwp+gDNUTrdGOsDohebv0JTICiHHU8WfWbow7A/TTco8Pdnc9L7dL1CIOi6Zwuf+57GXWGmBeDXXz5CAHz6+iWvZFpjztJvAP5xgPcE+ZOxPavS+jp8nsz5iuYQGY6yXI6LSP/JrTw4nx6QaUfeO2eQRR2yfF8QBoxFR8AzqhcvRQNBeO9IwTeDFvjEua9i8nca3MNZ5mQOzliuLGsg671H2slZKV5qoUsJUNaeDj65XteCTbJspgfxE9kQr6oMu4YOX6BJwXOQjj7/i7S1+IAg8cWkz4bgkOdK9eUamZyN6gbKcFQquq8VL0UnCqcNOa7LB0j8NHpRmztMiDt1xXo25CfZYbmeHJLCbpJ1ahU6jaScnEA/vH9fGkhkCTFTS43ZOFZvT3lIYTCe3yszfq4ArnrIgDfvAR6SlDzMfRZ9oMHvlR5goG9Jvwe48wR5BOR3dWuWVW+s4K3tHUXj2wrHhLhV/8C8Kq1OoAet0Wwb0R5ONW+Rz4eG8Y00wobYVeXHKaP0/9yn97TvEj2V3FxXCAYjemaPprvaPeRNzB7O9be1AAAgAElEQVSzCVpraBfBDkF72UimTAI8xjIqZBuCwp3Xd8juMlphkTE7PPCdXUHSe8fr9RVfv77g06dP+PzlC379298gEDxdNlwuG0XoQsnPP228f6ZvST8N6P+yKVezlmRiyqeC4YYGYwUfB2Ge3N862XX6nMFJY9IdoTfDM69eUehicRDKfuIW6iHanRl3hUqnjUE3Zppl7DgGwyYbtR2P7xkXY5Gx8NaaakTeITI/TjgmsI6NneRdaQ8g5YOFFCuu9l8s+TDthpQAXQEU9dA4LITe8HyGNfNpGS2hjqqrP/8v4J+LtmfCCcJI4XxnjpxOpXkxpbwK9TKCwVDOxvNm4VCHndMTUHT+xXQdhuXYiJ9yS9YgNaZsPN93OnVVigqfBleqYhjGbEGP9Hlwt6b5yIrQlOtADgD1ieCPvkvgvnqbYEkZioY7wfz/2+yNcRWf9LwHDvdy6AgjuuxOoxwe3/MkjwHKo3tEy6BoMrJjnspcZsEUl53j977rMHiwZ8w9z1unIuzD4b/6qfrWoWRPEr/nqDa1DMtppEEt1I9A3h6NcW6s8q6Qt3ifNLziFY/CdAfWe+le8Xvv37Kmfef6dzx9PqVfo1K/L/0TnU7/npscUa03c7fmtzbNc261u/9I2Tlb8KOYq6cNTgCry/04iaRe2UruZ7uen/nCUo6keYWiuM48Y+4Mn1D37diQ48lL1ReVmvzErsIBwiFLEUaQdbcPsE5glPid8CbDx1iQZTbDrFR2OTFK91EJWVob5UM49yzGgWHrahBFd780Sdafkeio3RBj6cDZFegv9ocO4OJy7DMyHLpwRTNuS4rmaTHP5sFX05+CDwklWSgA7RCxe1l1t5OsQlGHk44cliEqjff92FWnFcdmYp/umq8+EK9epjOaXRHTokg1NL0XlEJ/1jYIWZYpzlo+L4vJVAbWe/HT4Y7LGJNGqlETKud1+/6PqZStTgY3aa7uCC5S4AUFR3kRU/eaIO/gjlOD3C1jR75ln9PqMNNOkDP9fIgvn2W6NRDH8vOWYKFdBx3woC8Ct/nUDQj18IsIYbXeUwLBdaUKoc/vgLpnXHBprchUBJtc8Or6FlBGdOUKEJp8nGiP+5r9vueYz6jNT4ZWSAxUP6N/53rW8Do3o+lt8AItPMSzYU2Wm97Mr6XQTP0s2PmM6HrUBPCQzswDKGz7XGBSC+fxSucYFMYTn0lrzAQ8V8rWgmy4y1xpw1YW+wJc51lPpzISXjVgAwDzStcphpvDUXmIvAWEd21Bfflu/P0M0a8w4/oLjbOOXVgOGQma4GE5d9yQCk23DnEeJzHvVQdYCjWxZok/PpnMOMMwRgWmZv+HawCG8uTYAriBt/t+VF564wVqDTaiRNyIHtpIyGBxGd/81LerCa6TZbMD77MyKaXd4l3G7ZgHTh/NT/ppbZfxOIl42z1O5fud5zEnNKK9FKfZmYhgY9kdjhPNhnA9RdeLa3L8Wr+c0uydlEaYY2I+dODlxMeNjEq/svcVFU8wGtGZXKKNNWkXbYxAHFepbESP/Hf97oc9tWTK9OdP+hH2gGA0sMtcFOwWz9py7flMDBQjLNz9BWjjM9o7rOpjZjySBgFMffCu9cdqyXoeyZ5DMM1rmclyUVnSc8gOzkPSeRZ5Wq9c4D0I7KKZIa0aOqn6VnPD+NasZ4dPnfMeJ8TYTwYvHxOxMP1m3pKFh4gV6pS8iHx7to8/gxrg4fT3nTGZmjkY+ld87TAkMv2GyQ3SzSKfkPKmE06raRohchAc2ot52tVkXaMKtANXtQONm0miFldrqmLjG95yDY8BqbZGjys06cCjepS13TBt62s/wAMbth1ip9yvO75+/YLP//yMr5+/YN+vFoz4smF7uqBdNnM4VuR1SYSdI87T1mGfhxl3T117S3rLXtuBZ3xTw+uf86Sd5c9DaSb2k893pJ8G9G9K7yWabxixKM4CkI1qiO/EethddjDENS/qXqfdvTjZKLZq/KaxdkqrrN/S/eXmwaMw0cKOJGosNAQY9y4jW+jUHvqQF325Uor70LsArUO6hS6L1YE2hTZfrIqYl3gsdF34Rg+GhZU/3MVDY63wscLBNHbCNEN5HhkKiX4Cw+YAM3wOU30AM8LkhWaaGmrBO7yqahE+0sMigzeGlU+dl0JTfDZORFOl8fXvANDNYB4bCfKbdTiM6EM/+Eubni/oLxa1bFiXUr8Om7pMW16+EOdtahjJN/ud4cRjV0qSLiXj3IxbDtl2hOdzBTBJWYHwTI+FcQR4AzpEu53O33uGbJe+Q/aref75ZrmIoF2e7Dua3X+KBtUGzZBskovB6nuHIMKYO2wRTieM+tPQpENirPaxQaHgfTPb6d2A7WKLawB4tRN5sndEoLoesMyLgxZjAlgo8jhdHbRsWLqSssifyQ/UcKYa+CN+m6fNQeUjTx9pLXYe0mgtnmecW4e0enUamn2R2AmGs/XxBGnhvnCgWTddbxAxAeXZHQe8jAK6F353IE/n62p3Yvj9Ru1o2V09+c7Ppjl8Wv5Geqs8HDZoTxv/wdIN4/nN/LdOpB+WEm9IM53POJx/z/NjlYdf3StPikUsyCLbqugQbYxoLgQu30Wav6Ng6H7Fp3iRDyAPf0voGQK3toXu6CkO5olC2paWtAy3GIbukEV8Mh3B5pT64fW7zLC2e7JCq59guDRgr2VL853G2qSYdBpCS7ZHugUhtXA5l89x0IncHJ+JZj/BhbPUSq7mHZ4uz+GyyR3jRExehmpvMv8JaBv2HmaE0L1sbCWu9lDY9+53ummH9hegf4kB8jH64n24YNBnQDpKYEcV5sQ1qTtCecCkxzqP55CUrB4hTwG9ArpBsMVWhGFIOfipOR9IHv8KQgu6sDDy8VscXkHIiHlMg+5qcGM65OnUNMwj4cicAt9b0aL1JoafOAke7TQ3vwhNbam2NOAQbsO+XQAPiTsyBKF6wnAu3t68UbhHeENxQznRd95fjo4L1P86LtLRpKFBsHn2BjPOq5ezkPJ2Ur2h1M/SWRsuKKfJ1X5VD/qgEY1f5lDBhj+jDKtDBtXsoTMvB/ZNZQ4OrzKEZi5SJ1iSjU5jE0bQzMS1ysA/zvjEmcvqAIdG2zLkMONesd86IW50GMbzpCINbJdcMP/FuP5DiFanNrN/Ld+1JMbooBDqj8KtRh80T2ceOvfT6d6AgAL4eHlOPvNp/5qQqu4QPNlvabheX3O+ShqcbT3RFHl6Ow127gTy+fM/CwbNpg1XYe2KHGy8SpmhJSN9jCKrwUa8wQA0fErhnB0fGI+Wp26gzjCquZHA4xzwugxw2VVOB1NSdoI4xpDIMY9xTz0kSlUEFbRG4tfgUmVHiyoZEVSTh4/xmwG/3EJ0g114ofYpL2O2AvTwvEGxRfXE52T6y2dt6v2EsKQL+r85JYWJ0iJR2xpzF6GrT1ITg6Ll3aot6ZNmSowv05UPZKzRk6NmZLKi0RF2ip/mJGOGa2s3DB8ad9Oq8d6mO+L4Q7CJjrjkQX3LR9HV64IfBoFC4ooyl67SkOt8C7HuK3FFhnUPntAb0HqFZ496uqi1LrZP1/25aPcI3ZJwhc1Fu4fZz7UkEUnMHa2w+NEnhEALUYcleeUzczjwPvneVeoHVEYPf5RPAahjl+RKGqPzARGlxLxH0lgLhwnl0qDDmKObUDiqB43VZ9CTHtTiADdY2Wwf7w5Ad5299vZk0EIx6IA9J0ldB6jldDnvW1cnbf75nlGPaEyBGHcgzS3y/HO9mfcdeaCys6DOjlMs8Bv7SjVGVFEOl+QjLl+/ZXyZVUzjX6ijjPx2zkkFeONZ2tyZd6TgnnfSWTPDczl7QTJnGphtzJcjwPyT180oHm77wT2fzVfv2DVawdd05B2Kopts49g31dr6IuKGqhRfYriPPR/SUn6PTVa+JC0d1FSNHCcw32u0KyC+LZrtifXFZAtpgbpoJphGBOyVgknDxuVeuim3/WCRdr9uownak8nCjh2QK3bZseMrgM8+ruZIrrJZyHc0P4fmV0EmP2kIu46q7+U3gXhI9nDt0n3HtkcUpytke8Xr50/48uUTvlxfIc8b9o8X9L8/Q//zA1Su2D+9QLrabayb5J7HGBkVTigY2YXTVeVZDEzyxnuDCAxEEPm+dfo/nE5460nW9W9mxAOlg2VatRfy/f68uZV+GtDfnUbG+/b0DdQZTJk2e+KUkaaWz8JQSDvgchgWcoOAn5XtGdyzrp8KvQfKviuFdqYLJhDthfAjgT7PN5cZAssSWRkvOg+5YCID37SjkxdlWBbs0kOaeIPWgGQISvfUOjA9gWx6FDYHA+/8+wiqZdPh+d0QS2E4nBh1Ldaibh297yN1ySiaRyWynp9D4cbNQaBMv+PZVLeoDuH1h/TL/7S81/8THbJdwibA//7HEZ+TEkUvps/qlITTBIDYKD+Ea0mNoohRYrE2/Hke2fzP5z0f6eD1Ey1pWRGxJnhOwO54g+QGkgK4JlhBz4Fzdzrou/3tV0B3SL+WU4NskLahyYatRY8bOhp2d6gw+29s+DmPErhnemw1qG92bYkrDq0WWDNlytpWn1txC92utqg2X4MG3ey9NLEp2I1uG2J5GJsFPMRafDTu90z6H5BO88lxAfhehivlcZ/5vqfDQdJvN+cBRH+4bo0qNdtKpqSRAVRmYOoY0opXhlyxoUrmFxtyw7ZuTClaN9gkHxdMaxcdZrYxZxugT9ZYj40f+ElhhX5GdN7xF1XpsdtnzETGL5Vdp/djD26nW2VXaYX3xwM4HXj1wDtWBR6t+JGCZ/zvkfQVwC900jwqOhmszPcr8OnTjXofWKAv08j/8pjm6Ui8T2k5lgoj6zSv71WSJO8af1hwFvXn4kDm37FTPpaNDZ6mW6l6biDMM0WylUKTRpnSJUcWREplW4Tmntia1ev8Oo8yS/EA1mO7wFzJQ/bb7ZetGf+ME5DwDbfaz/cG8yQ7FnqW85eZRKffYfTIjbsmRUdhRCcUJItTN5gnmmiXIB0NWjqflanE6aVdYPehAxrXWwQKVRHXe6iak5t036rXDsELVMOAHqcBX0t4KspZgRQJzU7roBsM6BIMqlFCPctP9CShFnqb7Gi6eb9MlxHHVfTf9GbfQXCngNI7S1aUSPM8pU4FEDSoMT41QOK/w9AYDq42O6SqaEDcK64tEGD3zKr0wfBr+y3mzBf3CgswrS20fAP99+ZrAnUn5wI48Gsp/X2pvRw9qQyNnsdjMayjNeBJFJvsZvQW9ft9Gy7EE1SAJ/W9rc1O6G1cb84rePmigcS8ln6V9TrPCOoaDIaxVgWnibbemAqfLM+K/2eo5izB9EWQpDGaHz1kzr+5N32yWiHoHCOdoB4sshVFYAjB76MuA9yjyVAg+NBM137texqwql+RP05Pen9SpyJ5HCBNeUJQjCjQw/+VWua2U7Mms5TmbujrQsUVMadiXZ5PhzkS7kjCBWG8RVK/Dn5jvL4cJdzZY6Ff6+JuXe6uZNuEL9UMGJOmZ6mxESpRMMyGdW5PqPJCgTiBsO5rLHNkNiWBBHGeeMRRPGf6Q8qKpJfRY8B4PQTpPBatqLJEBBAOATa4tSb2WZLGCzec49mbeZmE74AG41HqTkXxWIROjo89T/AJq7w84+UhAMQVCCqK5vRiK0Xji+EnHIfcoqrWwxBdTiRzDC9AaN6VDl3OBg12XYvDGUZ0NgZyXYSWpNU21pxr9OACZCQJ2RCcJyJRaO85x4zvh0EYaTAPGlSBXfPSgvuGE2UY0zXnMxqwaXO7Qq+bFAXozfQUEV9Oo6GhGzy+L9ccPgjxAC35NURHyDWtr9HJeyadwtT7o5KjVmpkZCo5x4xTiYh4dOLMSSZnQbxu0IRDx4w8lIPMGvfqkh1ShSHjoiiJdC9djiwKLZ/+ofXqTzhgQMutQ+MfG7u91fnktHD+oG9FIN1pXi1Sle8bJZnHWHQzhLOTLSNb6C/qiWvmytGDkR7IXSSZ33N5vV8u25ixqvR5kmbF45D1Rtl4LUT7xCuWbd0FqfjF2M4tOIhBn7XJdSq/nJHIwPnvZJxSk8yzVc/jAcnVaZ4UakqnSa460NrcrzGNqJAEbV/h6Bba9OT1Cv03YTgrNGUaF3xDWfKHGdoL7gohB0kuP6oeKV9SzoTxWkJX8KzafWXpHGOHzePe0fWKroqOKzpeAfhhOStoZVy/UqifGdgLMOfrJpKC913QmmDbbJ2O647eO5pvBTcI9OWK65cXvLx8xcv1BdvzB/TnDfLxGe1vvwAvL9CXFwOngsyFP4+7bzoNdYchtA96NY4NjdFyXp6M4SEt6pvLfbNzzdTcg9WtIZ6Z0UxI9jlylsp/hoVH0k8D+r9AOvCwUDBOSYOFDYf3nN/NdeiNSfcQZD9WyrnlDNIZNH9qs6mn8T7wMy8IjXNODtiaZUonKgEi6NBcSPq01jmsCwn8YWfljOPcxvfZvUQZZu5sfJfN1cOlYScgOhgC38J8XZlNxUfrBPpsQAf9PoOLU7OQogmrAGmQfgCu83nySJl76UT5XOXJRZIOjznAnPKLZT03nqpC4+7tCCne6/S5urKisYhBNwN6LH/SwcFPddT5b0A9VFu0mQsu93B3A6nGBr6c6+yxSF94mtSH00yGGlIuHzQ1KRDDvM9YpwjLgQS2Ygfc+2Ae8NFWd2O59y3xF6HZJxou5J+PUfRHTt4/qpXcSndJ9hEanSvkuuc5ROPXuO8jbQ9VnRHEz/SDpS/Ap9mI/kD6NeKtf64Q7H/59KAsWGaRk/cndQrNrXkuDV9uTSLWe0Y5UssQJUudPNQ9blp8o7LMV8FTm/GC4Be5+Wq8wjbj4tQo9Y+7MxjjQ3ejTI/ykABt4F13OjrUrdQ/bjDgMBlgJ0nrdJgZgMhiRvIiHMUshOtu8tqvAsmNx8HrLBTJD/75BX6meITltF+zjFp1eFWPy1wR7KrmtBdy2CMPpD+atMRUXlkynEDXkXaG8V3gNRQHJi2g6EKAjG8u/lyqDR5qFVj4XL/3Wxvi+CrKaONaQTpDcNt1Kh0CXLJuwav3a8vyI5rrhG+8r3yAGbUHlAuQZ0clKK+jafcT6IqtWbnW7M7ALQyuIrkU6oI8DWtLI0nYOIyuwUioJ+BLFY9QrLcmXJyMuaXXvFGOcFFOHN1Do95VxpP2cjNRs5qD1hM8a1Hto8uhR50GJGEajYDxmE+hz84KbJSNudCcD+sw5ZzrC49j8zfTCfKJ3So/fDBV7uD9Qs+Jv2QO/39QN9XXMlGpAfPh2fjgP79+Gft+4CVYrM+jLjkOJDlTHJ1eKa/AbXQ6OowcmjnD2fycJ93ED4ZTADO8x0fLpk7zzHC0kzcyfJPpPf+u7yMFDDUJAPUQ7vn8ft8qDDvVnuNjP2bYDnU+irMbxSOtuNqk0dRTergezRG4Gf9L7iaas7eiUhQExRoFImHWr2bCMG1iU6DSzHDtelo44NtPnrOuA7Q4v+4aj8Y7ABomBd9r8Chk4iH+O19d5jCbKFb0PkUUESQMEg6Pw9zVnM/i0SkKcxT5BzxmgSOB7X84v/Q9gdT6VhNbHd/3WCI7i6NYzniX+vF9/RZv7kFBsqrkW1N5fqzYa2Vjul3mJX1vqcJHO0ojplNxpXq19M3fM31vfH7XRDR0CxEHUnuECf4Z6feHKU8L14Px812V4sdE5x+dSGUe8KsholeamGDvCn19RW+KvRkvNj4PtMuGvguw+b6/hjHdT5L30hNzPzYia7pcaAJsrWHbbI9b3Xl/9+gWXQDsG16vr7i+2l/rz7hcNnx4fsYvv/yC/vQZX06dbb3dH4EOVu3/sPzrj08/Deh/9fQeiZ/hwycP+sMij96tV3RvbPfbin+fNEl/Np7HX0PGN9Q4mTZsHMuEDxnLh6IqMMOfTAsW34kwSMKIzq+PiLIT8Q/gX05GKYV8LAjGhUEKq0Xbs1foBGzCPCz8wiDvwB8M9ksYF+dVV8bxMHxy6OsoPwmd08WCe6tiv65enpepXlG+sw0J6/fglHCoYyoulO2h6UbzdNptXS+o16DWsxo3SWSWAVjUDel9h8YJ9L67ly+F0Uqvdx8DP1Uc98so71pS+CNr3U895hEbyfrGPhQua+tssc5yurY8ASNVyWu6wbAu5FAThnP/juChrfhoboz12mxUcjRQdXz14x9NMgXBFt285RCV46aP00xppP4hI+LC8X6u755S97BypcNHjnEfdmOQsRw/AvjM76bBO2jaN9pd8L0RlsOP3z093NqjDmxvAf+96983lzsJ4x6ydWbeQ0MA5CPwqz9St6T/VQ3qMWdrV216R+lNatfZgAShz5/IjSMDqRd/y8aL3y25kMCvOJ0dz24AHnw9p29NQlG43iWoe8hIN3WHq1i8iusBfdrSPJ4cOcrn4dlMz3Ly/U7XVlVlV1nHnsYhAT3wetNVpO9QYVkRnx2qe+k0HuFkkMd5/mcFJQkabntaD9yM1DGArNMjJfliOoCgeWQgqauN1ELwmb7IzSjs1IBHKECFVzR4GB9KqjmFSWH1J1R0Ifii3+kYV/ktooDkc3EalKbQJjZdIH4q3Q0GZIg8GBtiB18ETzJunH+YkBuBYAAzcqvDI/5Z4xH1sEOfjRj7tGR4bo1gSxZC8AKY8bw1D9duBvTmbV2q+3UKhNpLmCbhGqGHA50cllKADFXMememw2azvEtWFX7Xk3YIz7nIcnAqvieDF+uYWHPdXVpMbeo05caWZYQv6ZnoIwzjmI3kdG7Zoz7Y+NKewOwM4pE2ZGhf02/U1oCNZv+iu7dEAjm+juV0wLn4usLYksOwWMyKl7v06u8OZzGupwvK+BRmwyMM60FbycFBnDj5lmRb54uHOZ8O9KWgWBNet9Av4BDGdkWjvKeTdDXT9gq2CZSof5i6Ey36i8MVDPEXtKbi4x68OxxzwhBLonKo2U+a48Xrfba/hP/DAKvg6zgQyYLHDtc8IBQy6+b1Bo5fBxxxqi4uH+dvajM1NaahxXBFfkFePODvjjSd2XNax1ut9rIkv51nRji4eW6p8haWmE3wMoaFj+jQqZNphUdX3yFQk5m6xenhCoStYuF064o3QHpDj1PJru90tYth0MqIro7jcmor40otwSUQClUBR4hMtLlKM9i0pfbAhn2nyJf4ngkRHnVPBlqaaUMFh1EIB6baY6QKdBWeeUxnsnEwtrOhZ1S1qO6Z/44p5EPA5Q+8pA4YYfipcMrVAQNK+Q4wBpDzxBvrDbqLMO/hVGNsTaqdb04L5vroev73SsnOjvT3kLH/u+BllR5hqo+kRbmDcjb9HBcfiz3kETZlerIC46fcmFtjw0dYVzCOXjHnZd6TFk6AN9s5PNbVw/HdCV5WorWe1xyu7eVxnJIh7h391a716E2xXS7YPLLbdtmAq10FYiogM7GSJ2O9WvnS2bih+fVcW2vo0qF996W2APuO7XrF68srXl9ecNl/wWW74PnpGR8/fMDr0xNekmfrxOui+eBNpHfcnAYr/nKvzDemhU7zrvQns8H3pp8G9L9ikukTrP7eKuZLgMMKYdHA5O34L51ildbgUSTF7qSIU+iJq9hI5kKCwbge61Neqx6ODhRXs//de1YEh4VwpDh1fTrEpIiv8jD/VSRjrvdn0sublTlfMH0l3k/h1jyv/RwdNeoUPOVl4IbHmsrzoDCnUItnQ+fuk+7//A/LtP9jfP7Q3T8zrs5xBwT+BLHoul37vOKZ6yTC4o1ensuZJWh2An2huAxkEwuVuA/GDb+aJ6fdaK5XYHeDsLoxPSsMw/AO3T10rYewTe/z5GPjroFGWNaYBopjPwbwfRGvJ0MXDiu+sM7pmLvAtYgqWhrned3l53fPo0HUNqLFDb22QO6+AOsewjFO6IfhXB1XjqO8j4fG56YCeofPHww0Z/U8kG6TNWX6TtpPRsOnSbJ7G11w+V8fvL2O6//zCbRzS10Kopk/b3VBvlsX3pd+by33TtPvAeG95U5Pn7+x//IRaUT/t0oyCeT72SvRfBg2juUkPxnSc66JO/JFOGBkCLQsf5BHvpGqOloEqUCF0BXXl8RkMToyIgypHsOis+KmcoZqhtbsR3qdZDirX+/gCen3syw7rTbJ4cr0DmOAhoueNl3RDX5rKulIpBPBrlBRcg5LYZg4ctksnh8A8Ip1wOip83dwcUJJ9XS+rsPhj6t1etbfkXeGoza7NWUk97nwmFvHaifGoo1BJMj0PZ9p0o802GY5XVMAAfomNaBRrkndUU9RsDXWA64PNMhA8sJXbAk8ZDpKl0NtJ5u24SGNYw6loZpPta9ODydl5XTcUOZNwQYRNW1Gwphud5rH30VankIH0qcYm6+JjIXwSfQk2DW5KI8Zhu8ziY2Gt/uTcfWWDpKeiBevN97F7V5FEu9KNkUXFUy6nep61txNSQPBLaIKMyzF3qDRTNx93vJ36LONrooIimpSfN0iXfr7qJ8g1umbM/mELEo8isqONd0MxrtU9dw46zjsYQTLVh0HxAMjtLQAaO6ko2KnV+Mm7+xHNTc/upGM9rnDEgIhK/SXLZwXrJzEoQZFRmyri17slG3Ns5YwreGScUId7p7jjh5HZzDOa+G0plPxQlnWLdMvOX0al5plf6T6xZcLADXuXFfDM0Rfq9q5O96JlboTOoeMWREUl1E1ZvF1gGnR5urFNFWm4ytZ34ptyUmeeXYVL2XjuU69JANhdm7kw/OnGcmpx1IUqnC6DZmt1qLxJS3ndVrCT/YCn9c2VzsApIHcT6X7Xo8C6GLR6VQVXYGmHbsoRDuaG+AtqnfHHgcMG7Br0WJz1XKXkq0NoT75HcSoayqCzwrBm98FiOtp5pT7KhI07RTHBKQRJF5TaMUVFTVOOsj4AYmTspkq4mQADV7D5cfZFN/fKI+mtk39tLEcQqf7/gvrsHGtAKu1BoVmF3neA0zNpAsqZzYnTTgdDLxBdoIAACAASURBVO3P+rHrzHFoYh2b4d8oHVStU+XpXzolzRHPGN8ulASAGNu3KpA3fv9VUzLOM/5CHLbuBEGeJmKhASA20/nGurgqBVe7Wm2/drSmaE8CedpMt9oF/XoFrqRsBK+MvZWDgHfYoh0M7oD2q4WwsANn1/2Kl9cXfPnyBU8vv+DDhwueLhc8Pz/j6WLrfYvcGteSESaiu4ex1/OfzN95bfGoLY9hWLa9KvNAnn/h9NOA/ldND3sELcql4aiUpVLEv4PAvOOx9ecnEoDDqs3wolujXSU6kcLx2bNLQmNBz+cVF7e7OmGEqf4Do1QCe4FPicUslrQRCkHZv3V8GwxzVX/sCLPxPOpizVep/kG5jdj2kV3zc+gfoWKEjTaGZ2V5fj52mOCY0vMFaeTl11//30WRM3rWk98EOqRQx177Q7FZqZDFp4vpnLIyvM9F2bD+oVMLTHIBS7RNuDf5bwgwEjYjr51AvwJ7GNCv9ufG9TIGO6X5Ijfb7wA2hUqDSqs5kJ7gsdDxOvJSuZh75tjgAXsXeCall1e32be4G5aM2bQALacib4vwnHcR0jeFIK9VkIAplL9rGutDQRoM530OSTsl1WG4+Dmtjo/lJpwkHh7ivzc0puXjwGvMcX98bj0a65L5Af8MpU/omU75T+ZcvAv60gdwxQr7j5ruieQZ9vf0ZSGSHqrzLW0t85IsnjZ4jvnomfwKfPyTw7of6Pk9dZwMrjD98/OzcjK+HwoPzB/J7CGoi5K1qs2qQ78ZAxyW4bC2ucfRMb0pQj2b7HK9gSGaRZ3fTSfqhvQ8vEt97cHpBaJ+53ROc6YPqp4bk6iCoHVc54nYaTw3/x0uYvG6DU5Y8czZPXBkhRwyPHU6LaSnDPQT5bZDnPIv+fQQ1vyKOplN+hLjQvuEy3j3VL9Dx13S8uTkNc3V457DeFtnGmUSLnMa0G5RZtTvGpWks7o/1ehy9zolYQ3jR0hkeNa48zUAzdPjUV/KepfbooN/bOSTJtANoyXHy0f+pG+/Cz2aCtG1iWQI7FnfiT/1Bi9Srg0XMVPnxQ2iLecQvE9WZYOUEZSM3QDQVfx+WHFDec39zcdEYPf+XQR54ry1lob+MP7bn2SU+5gv7NsSJxFzRBRD6FzQOJmRZDJexfcYqqGo0ocM+RKdOuQcKh3J9UjgQhXWydQpB1VS22cB8y25BUxowHj66FxHyWrZG0CQlK/d9eQwIJODRfCfOnluhNzE3DqCbpoTszgt5dgGPWnNSmbyukD0MerHEQlnqkywRPqVSFidAlO100UA8Gl/MdgJnud2gUDw+frVjVHNnVrIcKTAUzecZgBwzbdu/JOk1XCEZlIaQePbqx0fYuNRoauJjwGJ93BG8ScLgxef6Q0aLD5Y9c75Jfn6cPpVgXBSI0qm/4OuZRBbAWE9WdGuDP/GfGGwlIm1ynCPaOP+aEU6YF5g7GYM327peYRlFsY6yiyZniU/8avDBv4E48f7JGKn7pdYJ1LOivr4k7y6a97CxEpc0CKOh1XK0j7GfcBd/CeViQFVIKK91ej3IUuMmU6dsV/q1bj8DmRqyN/gd6QUyRgzrkIhe/Q5KcO5AhYmF3CjuaCHUV47dm1ozU6c79ohXdHUDeYC7N1OF4cdQWFysQF2Kt4Hnv1cROlCIc/SIBGzIsdUvK/j8DqmBNCQwZpoHMd51JgLBg95X6fcnYc3ARWZBr/gMlwtxvogj4/fcMg1P5kJP0fRx9DGXvMvxj8iDdm4qfahHFQnmV/9YEN6OmWxmhdf4jsb5v2RMF5ST679v4pKQiV/j4Nkt/ZH/tRE8/OBrH9sIrn1nnQwvh5rPuY/0cucfoqu69nQ1pRmnXI4iX66/73ow+rZ70VT8970WTOzfDvNsHh2eCWkV9VcLkN6RSiLPCzf02mmdzOkPymkNcgmkGeBXoH2YvIiFlKtCSKI28CoGYZgnzHW3d/FQT4p2Lt27NcrXr5+xedPn/D820c894/YWsOH5ydc2sXhj4NWD1wfkTYPJE4iGtM3pfeUn0XAt6TJ0euvlH4a0P+SaaUI48i8hrWNkFaOcfUQfCwYxGomfzf6/nMnytw1jYfxV8cszHjeWsVAnO8T803i04amE1HH74cCN95z8ZUgDY3+5PXhwUk7J/Xn9ZtDV0i4pQJLGVKf6EN4vqOycKJ46FQvKz+pVeuxnkOHbj1/AFlH5Pknz6HFxPGxSNmeX842Hc7SjfzsvDHAF78fuc89dJMS0BKnvsJ4vu+A7nXivF8nw3kfxk/3jq671dsBNK9LLoBsHua0VVCHVIjKe5h2iSFOQ6J6RuLHruczpxMPbWtGbM0rAJTpSCv0XC2HpRbAoTRJR5i5efsKeoUZ0HdqOxw1/DvR9Tyyq/OA5x09Y9ZTtlTuqk93CqzzLXFLz3J+0ui8W7GPySPufNFx/a+vAHZc/vNDZWtaVq2f6cdOH7/AYvF/73r989/lQHrw6sOVLtMEvbmY5UmrLKCmfMSuaIFoK1z7C8PMEF704KjJYDF/4C/Fb+2nnxdkxaMrsG2+aO3m7NiBYAJZi4y1suoAHFEXUrJnuG0dwJu3Idkeu0prtjdJLdYdQlCqQNWNvt3DhHfAj4N6fpIhqYNd/Xc5ZYVUsv8nPW21k3QL1jPmL6s38aSe8ini8LbXvCeE9cigGbbMukMBJBXRwdDBfZUyTcnQb6GB843p2JQR2AZ9njxvHo1KoU2gW8jPMpwjfOxagRvGCwv5bvVlGPQoD9jGmdTpRoi5MSDAg7gBXfGkbkgSDBhV7o745QmBusijgt4NjxtNW4+fY5qLGx0bgK3ZRlLeb85TGICI1rtpzPM7k83kKJyRp0zRG8qO1HY2q1b86Xg+aGBT+fCYby6wfr96fqOuR9LMHB7cPIrx1jDo0eamGRcDLju9uEk5fKZOS/nrjTs7Oe1e4wqiIjCCdYRnhDw28076c6ubMn9xHhabzDPG541dmFklgxglfH6S04EVIKOAiQK/XeZrZZRkDtWTnZ3HXihDThTEerAcfoMnM48bR6euEqj1B3/mSiO7Xm/lAJfXMxmNp0nhU5SumBhqnc3bmCrg51O9A1RHCPndRm8aFE0rTgIbHutEdURdiCgEQBnMJ0O6X09A1vcBhpg1LENa4qW6GXhnDMQwJ4bmuSHgPf+p7ezFlDT/N4PtOCOiLVbJzrmiIAzSMpQa+2H5m629g4R1iy/cowkhMrwZYAjEIGRwFA19k/QS5WgxdNe5IkPD+/lsqHTfHbAT6h22J9D3MFQLeuv2vbvxXDbsKhDdXV0yU3UXoImFfs9Q9NBhfoUhXSV4ixB+w+Ar1NdZeimVUUK/Gz8musjIwsSvmB2FzcfeTaM+7096Pg5LPM/Wx+9Dr3xhFGcjdYxSjeSsY+rwqNqN55MkUf5etef/6eQUdatXFfov1Zvkxns9vfIQnNzOQuq8K5meF7LxKDV/uDQQ8R14SS7+eP3Smz8fq2F9BcbDTQsWusqdMj9TMYBwcs71IWquC9KukHyHDxH69yYWbQkboCpol253oJt3MQTBdwWQ5tzDyiuPozUE3RV97+hq7s77vkN336uIhZgq9n3H69cXfP70CR8+/Q0ff7MDZ5fWsG1toKrU6/A4GdzMm7rku4j+feX+DdNPA/pfMZHyerZJecxPP9iIFxtKx+m8mKHTCuLN6c+elBwc0fUEoTeCwo3jVYZ70KkqzjcnXpnw5wTLWIC0lkGpWyF7LDuIkIdRrOP3GRxuV5HOo9m1pXFbx7rSUM6L10lxPnzOMCkVo+9sQL+TDhj8zU80XF8pxiVM+P1/U15eB6wqHtA4Z6SFVShRxxUWPTibWHIcE4Boj+b/PNcP30kJ8c88sNUJ590N5hluPIznbjSP76DwqpxUTanIE3Tqxg/4aa0NwG4rRYmdhloQWcg338DpAundvAgdjcG1Qnmv1l1xmncUuvcz7hyHh6MfHDOYBg2nwyZOwJVOy8Y3ldtXdy7IBVos5Hhh55+kvM2kTY/oxRHNJwR1TDz/TmlkWeB+Pr2R52zxcFZ9dEfpYRekkakprp8+A39Tswp8iTyLupfzdqVYrlTRmYn/3ukblurfusp/79r3kXL37OVxhBE48s+loWGa2ELWc25rNqZ/j52QPzLFiiqVlJn3v7XC0N1iVw2E31ikRr2tpkm+xyBm6gcBkj8XcomAlnmneUgt+y6+ENU0MANomwFlR41NLon4CUPfUBXBfCduqHDKfIVQQOteWBg4cRgG7KHFaWW4dOA+k46SGAj2tJwnjnA+Ma0d6GEgMOcAkVBSQjAsZAnGOv5H+zVPRwHA/+mfXGd7Bdrfrbr+jwGMwcueylae2TwVSLECmm9mrB22bXMu25teeNCQu9R2V4jsjmY2yTCL4FOddR1A0q6XLWHuNCVad5YLIM31lRDMm0AbkKfUJU6CIY3nInYiW5oZzhuhaAPsdAPUacfoW6ThCfDT6RZMH1C7axySJ9Cf1MKsh7E9je45BNVv2+j3IQksNBloPMi1OT7iWZPoT9x97rhtFDBV3Jct8R2GeAaJ5pYO2PdSxxMTgyQe1NiJ/oJ/wMdLFyyJ6+Jv0Z9hLUJMjmWZsAvlrCfMvGOhJwidmOYOkZFVOM8DqdqSMtzNxnNZ9C1migjlJ/Om3w0Z9RjvFEJNlSu9tHQ+wcjbRGcjxINp4ssB+Ywj5q7N13+ZT4APcsmyUDOwPreL9RMNX9XuzG6XCxoa/nn9OtxNHByDub9wj9TklwIU9N3pS5k2ZKAnwPlMhmiG05mfcCaaO9AKKqR4kH7N8DEPVUDfGaeRcsu4cJ8/JEOz5+wmHNFAUPdHDsAG8zSGkzN3QN3gUS0UmcP+NHljzTDCj9P8UVZ98AdfHWS6F31iFK2z8VzKAYrWD1LNZfm84kFSbBxO6CuV0akeRnfki4Ou8zImZEnnh3Mi4CpSBNNCwOAtqg7lGI64azxqEpLVqTsOPZXh12hxoLIEbEWI8SzoSe4Wsj06qubEpgr1uBGKZpFyfc53NHTd0SHYVdB6xw4zpu+B8L4D2iy8u8Ly7Q2QHWhGg90d80W5j46dJDvmCD1pBjoUMVxSlw9XkGj1cBAhmMuM8lOAwdeFz8wc6h/qHLna8EbkII9vpmmvbzSY+6fW6dy6p54M1johizc8+NXQFn3GM29jfG/hk2vfBS4jIn/0IX/Qp9XBNw69UYrdTOlX9Wj6I41Ygas8cS8HtJ+WO5LV75iYw95Ieviy/CknzznywCHi5VjyNiwz+5tf/1UMlTf68O50kN1yfB9fWGYps7h6Z9NX68rcyJPONgA2OxQpW4Ps6nxcbX8ZAMQ4r22F6yTI7aP3HfIquDbTZ/q+1zVkwaAVwL7j9eUFXz5/xtcvn3B9eTHDuTQ0P6gZ14QNZJL8jXmqVL/9j7aRUT3UxxnNW2lvYLPfmW4fdCr+0abLTwP6Xzk94tXEi2bf7bFFMZ2eFrFQmEMQIRk+Rm2Cqfj34Ky/Z1rBntrD8D1Od9hTGSJiD5/HH2N6C4oOCkkJA/ZZ0uHbpJAeKsQJrZyMKS8iWHhkzoBpUj4nRbSEgGBwtSXj7fh5Avv8U3WV+fH0y9+9nv8en7e/A/jHIfv9pDi4Ep/lWxKDoLY3aZtT4jfno3cK1GWU0YSc0FsoAzw+MIWjW9gzQG2PXNUXnX63qqqFblc+fa72m+mPNhNsadVT8KfxHKiwtHSUyTATaoDWKaUtwv+X0cBOondfYE19X6HY6TT7SafPa6FFeJm06tiOVz/1CN8ED84wKNjdnQuSj1K9bAjCGDH23WmA+cE5MeirZzT5TjiqYnqnj8mqKMsbAEHyQST7BuB6nC6ZOehaCK43deLHS/dQ9z1E8LwePKtzfv4W2A55Y7xmXWOC5Vb51Kg/YrCaTz//7dKE2ny2zDtlXI1x7ijpUcaEs6E3OewKTnUttz+WcEm9aKSnNC354XxcxEO0dTYINBxOpd+AJ3Tj5nx7VvWUSswoTa5HLEem93Y9mpT9jmVMAk3XyfQw7HbPzzKQIIrNSV5N+3uhfLUhG2edUeWZVg5GdM4LgnV+rieFgjwWSrNa/0YdRo46DTwEa5ADYhQW/Jppj/UlpkfPo2FMj02PBqA1u8ElLTkCMas20sgi5sfR3JAOQRqdub8CC4feqPkwXD9JnUwvGqxuhHH9CXZCc+je1N8Vbc/TM+En3MXJ9sSpwxMiNU+507iOd1oXhR327Kn88GyGP9o6QD7nrPaR/RjfMpZUuLxiOIl7R9bxmLxXJcj2BmP6WN9smD6UHQAuh5HCQIxtGMM9j1ujwqg8GjcbGprFc1CBoA+nXCv0M5tGTuaZAuqGp37Qt458QBffKjdNHtSqIkY9CT0f+j3Fu0WmmMcsT56T7jmCJrl8GqCambc/k6ApN9rFEMWKMcamWDA5OnhdcTWFtVHmZfPrmShYjA8W9yKHIckWCEwGfPVdMUq1xZhq1Fr0xmioJCdv+Tk/GfvBaXbqCYecCO/Olmnmc5q4oIcDNB8AfK2CC0YkmwVG47D8g29fOmtplkG0iwUWb7GuBcqjz0zrQxhvKD3Ps7Yjy1oJhAGIufM6ls9cYWCV/G4gC5VQchI5UsXx+eoEr0IHYaEgDHv/4n//R7hTPznesZuzmprBXGSHCNCbOUDsHTW5RdF6R+9btSQK9RABcS95c7g6JJlyzGkVc9hRQry1b86bZSh2OIlWYn7WWfToKcoALKSvadDFyHlz/iQ9GbyDIcXZXapxgnkExxFyJ6PvZZh4tBqOjL6kJN+PqdOnUyuhdPD3NJzXM1Wta4PiuzJeeW7r3Mp3SeH8VvRxwn9/hMTiIj9lMQY/elrRzduKn7K4WxlyH/H43FB5UubfNR0WDjHvBSI0hsr5Xa9zfSXL08EmCOzEuZ8W3/crpPnCbhO0ywb0HftVgF3R+46WWge121ERiL3qvneoXlM/0G4Rm+oOdIF7XaO/vuLl82e8fPqC15ev0Kcn1+Ma2rZBLg267xVkbeBpSH5mW8ey1CFyqqaiuaCnW+/m8XiUHn8Esv2TYfhpQP+rJlqg22f+d8zDz4WM54OuLWMdK+GhQB4B5Werdn9QoaD0fyk1rNDQp2oeignlc9xZ1TXeo5rQEg8LqwnHSoVm5YVKyPCLFMypd0PBUy01BNBC4HPYLj2UQgqYwQBOiuuw1IMbK5lmJqEIHZ8PjxeKypkBfpkW/WtPdX93NPH0G/D0jGWHV/HXMGe9p3HRCC6zxsJI0tmlAnzXPJbp2bBELUIdAWQ3aX6n7nkXJ7HTsAxAr9D91b154z2dro4FC5BKUCzwbGr0gl/h9ozdvzut+MmXCHcKz6aOh9zRaHb/q6BD4n5yxFKf8RuIjflBighAodvtFLrdh860bHDw+ZI45cAzS6AZNpwX1ImLdPAgJY/HCHWvmtVptR5tJLqgk7O0JMrbaeY7b0kDjS0Kz3xxxtMZY+KLTIPHKo0pxIzoQYO7EK8dtga8Phl+3u7MCgnvwOtb0y3cByndc0B46/idtndDpmVbdxpbnTo/jD9wpJ0Fnx8eTWUVGI5kyK8APle1vy7g+LJu6t3p3fU8gOc5/6MN6kT7y+csC6TgiVCDbPTJ9olpkawy5s8GyRNQqQvDYUkmg3FX3OUKb1xezBFLFWgdcUV1gtvstJHxB5cQYrICUlfJTG6ifqemq3etNrtiG7lzt6kr86h0N/6K634z+YpMG+QClINY5a6N1cAvAOkYT6tj/ETB/P/3f06noFBr+x6T4IleRMbnalcAxFUkuHqe7u9mPl14qUeFnRUpGHuvk5mx0Zg6gwAWgrfn3cap/fhmdtxXne2W1ReD86FMIyU+2qF7NEmDuV8YbhsuGyCb+GkBK92gaE3QNhvnJmIh0nNOWDtVpeZJg1BtrIuF9ydYP+LkudVAIdwH7E34lMI3Symh9QcvE4XxAB1OoYdhr0moInVKM9Azj2WKXgXC6KdS9EZgjuopxrruizjNvguOdfO3I2udgZGRdsmJyNiY/25xlQDrlnOrdXa5Ouojor2aPahKfpfj4SoOAnW5tqFBiFMsWidoszzxDj4XbO9H82sq6QuvB974t17a/0G/Ns666F/VPH5Z5En8j5lS32ZUKENhTCBCKQ+zXM2IXm90AqO4VM6ftD4J/nb5BZ9fv0AljDCMHqkQ3YEbDVgc1zHvKHqbSssJE/XUOMzP6mlSXjqryZDPMs88rsZ2Omd8nMPUGr8fISpoxHm0DuXkUFNTwfgP4JPoTYn/OMh1/zlP2WCepAswucxkqwDwYSDvki9VvG04ymmN+SHOCyQzCWLsdEWuAwvQIqxRUZjbQ7EjOB5C32DaDL6a+oMAeZ3DMi2Ec/RGYhq5/OPjGSIUPYTq0EYSZmYS9UUQfWwJO/UUqp3YWs3PmutukEZJtPp0GrItAdufQIc0cwYStZPhaFefswLpDXtzN/hudWgLcWUUqVfB7nzEZJ/xASOZ2gdsEAuv7nDELkfM9566mPNIEjsxrhmBiZ0VGdNhOJJysKj3gqNuPpZXNb0khnbgrDr/SRVeVsq894yBRx4FQ8v/+DmPtUaTjqdYe9Td0lowDBB6nRp5/Eo9Np5zR70eybop76Jfuvj2vjQzgPF5vf3Wdv6EdJD3K4b4e6UzvJ6kKZucPD+bW4e61On9jXaOv8yJ8zmdsP331UU4OAhtOeY5ADEJVs7aSbiqArtFQt33bs55m0C2DdszTBZslgf7bvK9tRrXEAZKenHyp/2o1wYvahtindyvV7x+fcHXr1/w9csXAIqu3Yz4T3Yve1+o3exgVG2GXrtCS+2GfzcKW40By47fIy1tQA/k+5PSTwP6XzLNCyQZPiCrZ5K7H7mZIwtmdUsuZb2cX944mb5ByN7bYXkg6eGXDEqXfXZIbxDpQG+54CBAqKYVTLoeC2L8MnPLUAtZ203c6qHvouIL+ynM3WHBxj1mbX3Jhaf+rBgoKZ2Bs1BGYYrsWFQrBPOqPa5rFoZDXh1/cplVCrwrMARG+7vAQoe/VtlcqRP89WINzsOkKMe/B+m4RmsBxyBx6X0uiD1PjE1K3thsMgOkdIX0OFmu+ae6Q3sY0B0vXWG4I8M5kJtLvhRFbZNohsK1vN0v90LR/KQR5DzbGrAp0DdbFDvdxZq/SILx6vUu0DssTIOGw3g+gmC9EL7WYqRLrWwoGsPUriy+14jGgpR6br91Mda30rAy/oYUc/le06fzc+Ybsnh+WsF5W0v2KsDe3GPTabGd8Zl/g/Q9FjVZ1x0cvtV4fjP791pwzzrJd67+90jfMmb3yq4WpavpmXpF5OEJ5/waAo3QISxmUgX1uj0GuttykHKOeGScCnUNCHzqaWCisxF96JMC2IDe7a5UAcI4IoA5RmV50rVkJISmBW/wd4n+UGfLsMa6wqTe8WeKAyvLvgrhmC6dydLltUrJ5QRa/WfgWKuM0neqrVQCwp/A5QoQd4hH3gEOPeIJ/H7+Sbh7k9xI/K1Ow61kCX+u5OqU0nIVg0Vjx2XCEUAUcYc5tmab8RZ7HbIJ2tbSgG6R99w43pCnyDexE+VF9kaPaViP5gKqVuAIvB4g7z63V4INmqcyz7AQvw+41ELD0NaibJQLI5b9hRHLdZacuccRmJ/NQS0eS1S/jO6RUVeLuhftLqqinzeAkfG9z/xvYtHLWfRd5JGkiA5+xTyrqN7/Sf1qqLwb4n5lAyodRZ12c9axLqCafESdf+a99mTUnrjK2H9KYywDo8zA+i+bRcr4sr9CszdRptYYQdPPcjmoJq+i2R9BQ5OO5vn2/Wrt+Ryxk/TWwsfLL4NTzlk/uvP43wD8M9YiudFKMyPW6ShZFXlKbsgYAp5kF0my7Pc5dfJsXk2UkAMyveL6wl2JTwtM7Q7robGGg7NGUh+PcP2/OWZEkDK9OW6Zb0Vb6uNqMnVlpJ26A5SewmpGLnc03wkkfTJlWg+lMT30GDX5LrxlwM1LfR/En/iMo4VkahkaV2MYfcWJdObvw6l1f8FywbF5svoqHSxGIHSwPHc+6P+0MV9oIr2tcGifjcRtQMIA2Mt+wgiV4Kj5x2Z0RZe6rsQM4I4t3WHXUXhkPLEN7qs31ZsNVt8BaRbSXVVtSyKGder+EBUPAIgmR3z7b37AzEPqfahZwXc8Vh8gOhSdZWu5WE5zcFEunSU1RvBRwbOgmsEwHnniz++m1/H9YLweEBH8T10/KecEG7Jj2aF1pY6rwxbGctqLZCO5wva5oH5ggifMXVx8hzToF/rjb1HkRGcK/NGB/o7pLV2d90sOzuk/05DurQtifk8OrpZmzrgoy4KwK7Dv6HvDft2B1nDZANENDRfI/gq8KvS6+z73BkW3qz0R5B+wBAN3PtNXnRHYfqQgrprTrthfX/H69Su+fP5iPqpetzw9QS5bcTmCf/596KMu3qdM4itFUQLhW5MevvyxKcXIjzO5fhrQ/4pJgGGTkddMw1GD0trqdIRg9GKeQ/JpfY2kVFcwlOW76dkZnX8HQ/i70qjJ2wNmRt3CM4t0R5G7JysgTbE3Z6R8LH3g2HP98TxwSt6qh3yel8cxFfqz5XJonSG06XO5ERrcWYefB+X4EI6cbk8aGLdiOIUcoUTzHfJdbuAelIsx3zoNpswF/JTmMZ7r/Pg/gOsL0P/bPM/i9fW/4iJKKr7CBQHyEBnzQjMWqlyH0HyoT9NfY67Gs6pLj5099lU7XWlUC4r4FPX7wHc/ZR53lqtC+xXaX2gsfXx7jXkunD3PwIby5s5Y3KB2bjv/SI2gWEkTQC5WmV+Ql3UrFrQtpTQkoYxcLcvm1eQc7ktzKh1wKsCw5ZzTOsYtPmm+t+ZOBpNyJQ674y+9uoOW8vQ59W+ampny0l6qA3rs//nxp3U6lOPGJ/4xwMTlJnp2+r3bvBIOxwmfp0cOHrwqic+bcmWo7z3pmyt461lGLAAAIABJREFUW2I6W4Exp+8lUlfy/JG23mQ4P8k0j+1Br7gh0w6AfD42oQB+mUE4k99/1cTznPUUfo9Jf3E9MGRDewXasy32GizOaWt+7YaHuAbgx8XcquU8kq9UGBaeGGiaT4MZ250265ONkOwUBTygtYjYHabddDOo2ic8WonrT9FsVkWnAwsvUbceZnnoLc0Z9MxFIzx3sN/c2M2+kHoGO72sYqoHAA/L1kPwea0V5teONSHV1IHXM6QSv1zm0jy2vle5U+OmKtC/rlld5j/OwYBtcZDWxbWiq1Yo8xQVVFcYaRVFC1Sx0Rw1ICTzU86EDhA01KruWQaF4dx1DGmwkL6tQS5iRvQmkK0BEcLd/5qYwdyiAUqeMt+iSTeGCRRN+rAUC0O5+Kn05nCZI0gh58l7l6GM52FYjUF+4+7aYK9EsKkjQft1unw0urv5MowWqPkQS5SW8woHk9ujSYZGrR/MIzKfnonEEznJJHbII8efKuncMNNbHdvkuomPCj3OcZAh72ib0hGE1bwU/iBemEa+qXcSY2OmyobmDh+29o8aNPrpfdaMANGHO83DMD50OfiqG/tMfSZ+xKf5MSc9qKr1fAq17xUcTqAfMHJMs1SPE63xVMPRWAJ+exaG82gwItTVCXsZK/bxNweEZC7giAZWpucp+YEJAm48b8MyQoh31zQoh4iUYYDzmnp+mOQMWzouD8Q6zQ1qY3hKBvRErBCA9KdjGQE8RGrIUvvb0HOJ2+izRb8CJ+45IwC00RhldyeOM50kZIeL7Lf0yjfwleDRGOaYCNWjBQ8iQsHYZP2YxNwMe2ThZWi2DxmeJez8e2BJjrO4lFWnspgKyQjioLfMeYdZ1YZ8yQLl2Ja4zhG5zTFg4XXgbUQr3XUl1XBEZGOqTVzTC21udbHaLccFosBVzBdfus9xCKTtaDvsigefCqY7agXYATkguCxPeZRGs5iD5ZYggYS0YKPONKhFrjFSGUclTsuHMTycJEZczoZwmsNpRPc8B/SeccoZ+8dvxxz8N+UNY3b+1VV2LmoGaGb/VO5zngSdQKmpbW1ke2xMj9+h7yr9pnLjHJJqd+jbY7g7S99W+s9KZ+P/F0qLLpyOxbynfGvYSaZUBNuTBldtvDelzNbjs98rrWw7w/vpk5/fhW3C+SkM6zrTCSk17mnQVIFuIdyxd7uiozW0p83uIH/t0G3DLju0K7T5Aa/gFw0W4TIipgLIxf1wimvSkuJ6ORELDx+n0L98BjZge7oAItienyBPl7radOpy9Mr26qWaS7wpOArCg1T4UI7TrDo9Czn3remwr3vyXue8fy53/WlA/0smWgwctHUUo0mFz5VFyia8SQWmV1anaUoqcDQaI5XEv1RijV8VFqIjmF5HhnbEDkHLzdi+CRmCYxHhRnfC2YiO0hBleBZ1HEE7/JgWYVxDmbZpJTTk5/FRLvh4IoV1kBvEyJcMLj47fYcORUfl+0HAbmXh/q94q3agf14q5n88HQcN8U1w8X/LBV/mTQWClYTYlFPvd+FelOKBE75VLdSZevh29Xu7te/utacAroBey2CpTtkutOe7vA74tFUp6Ri97pOh+8ytTK8iCi9XfveSzhmdyhSmjvjkOOi+mai7F/V57jQ5Old7fbnT731Ao6Zo0XpkwFUmrAkZUojhpt3POBGY9X0LEd4rf2tV8Ma0nDssH+ZJ+Gjbcx+4zIG5+WsfH3WZttPuwcOLlj9TETsZt1uLkz8YlD+k7X+X9C04vof/t4xP5l0sgoK1RdzmFFHGz+yeaC8X77kcfVfXCTSM1Cu2mRuIUY50XFNYAQCt+d3NXSCbh+9EM1kXVRA/F4lNVthnk3RIXN/4oNXsCOARbXM35MjxeLDF5Y3mW9LX4TKOK0k2VoaqafW6gCS2BV2PzXJnRLd4tnTAfKTsiufz/4rRocLGJ/egFG7ACsxF/aEjeUF3Nqjoo74xTsalpKGyMuV3aQI0p8emkE3dgC6QbYM0sTvO22ZRcJpml8x4brSfJ9H9WfPmms+nnEI+bwQV1t1AUzeoF6WE4W2LsiqQBe3pNF9l+iZj7oRnoG0tQ596nezLWafBfO7kSNK88t8txu9A02MaKeOYztjXwBYSfhreqXQaGhZz3ObYbUa5dFn+VvXs3cl6n/3XoCsjOJ5x5uzQ/F2zqwakpUF997LS1J6Jj3tExWAe4/qy3ZHL6wg+eZ6MMyE9G0WmpEH2DH2c6bpOyCavGGjMvkQkiNE13a+Mcth68H2IXc8AoO/Gl5oLOAHw+foFfLI//5cJVimo/wOCf5L4iveJR/F1CdNgziHJPQZCJW3h1PjTTJiwOz/jc+E8/5NpTjisZ+MY8rgsxph57lDZYG4vXuj/c//iSfDOOKWe72mcleSzkYISbhYpGliKqugb03a8j17SCnwSt4JQW6qBA1nTQw6nzSkNee54FdxrdA+jAK0Dry3D6VincAkChUdkBLVQpUQ9weNLSIc7RPQpawyeL1LPta4AqbZ3G+UJEaYmDjseBosj2mwItv+wO0YUHc3N8bHyj6X3js39zNVfdtMd03BeFJp9Z/4KXdqhgy+kA5H3XbXeTUVq3E8MDk3sGqGgSRXeYyEMKbf1huXtjXSsg3j792hgkYrW6v+xddQcJDznf/mp9enrDDaWxzPhZw7B+bl8zvf9kpBA+J3Q+v1SIjv2qrBGCTO0jwA+n2X8g9M41ENa0trhx710KnHq9fdCww+C0sfSHbzMaRaIvA9wsxXSYwTjTHa+bvsNpnP13mtXWAC5WKSx1niZbUQz6LqifrASOK6LjwMjCnPsF4U2RdcdegWury/4+vkz5NLw7AvGpw9P2D9ccN1kOKP1hwz3ci7/4EQW/P3w8I009x3TTwP6XzFJrVvmjZRV3loM+EIt/pJPrFYX/G1UNVhJzAXE7BUV7rQQmqx/tiRYte2w+kkgC93uoa0Fdj90bBJ35IINsVjIPtXqc9jyKq1vgIHW9TjihVTuKC9LdXrRHdKuM6PWpVqYP1fp+C4Xf9nVMIQfldWxz6TcVqnHyWCZ71ZhGYeF028CO2akwBWlxQN2+vwfUT1rXr8Xg5ZxjJym6q5M2hSm+TvAEuut/E10GIbu3OCK5+Z1r32H6J7Gc/BnB+zuU/bQr/GU/DxSZNF90EVEKIhoDrHU5YWPgjeYrY4OM4h2DAb3YV7MGJUxfLAWvYo0xFK+nECU6iHlSMTvsQEqtispbLOCp6CBEAg2ZFy/Lea7Tu1Fij4WGEOmeREQv+kSX17QZ6aDXHiHYnuz2EwXTqO98c9xCp3W6fJFOBNlJT7JG/45AYZijXwobJtlkE0JQ4znn6uAnSY5+cz3E3//pramuu6hg/P/MrX9JlTOZafCc79mfgmeTzMO+Ej84jT6PVjOMn8rqRzKT5OC9LU/JQn9NZindoOHTXUeGaCKLUBj47Q77OkszSzzbrvcMMNigKRxsjc/WLxDtAHNjOe5ESoNKh78dDpqbd9q49YoSLMvoN+xCVskGPVjMYa1GSfU72rD+FbXuNuTdKC5rlAv61JpiiJzjr6RjpxHDsatHpCM+XQoAr/os/gq67YDvPf1x8quoF6TiCucFhum0LZEa5ndByAcgkPeZ4yaFrqSEWaNa5SHP1cznrtx3E7jihvPBa1tfvd5h4qtAeIUWt6P6y3nyUlU+N1Imwi2MPJ4/8LoLl5nSzwonilfIbAGvsTXfR7BRhU2yvGzirDA+KnW2ICUphMpvNfNuW40mS3cU0qtMcmLqGKaNwynLKJwpYFTjmUmpWD4OqJugUc5eXdYV5yMgZ6tc2gcz05R8JRd1i2FqnDSEKOiAND0YOdzImk8z/w5yBYZLE5d51xN43jNzeGk1Ynx/Jd2mTt8SC90RVb38h9abEO1ZJ57tMFdh8sf8FBMdLEiP9WpHuS6qKtFiOjoENmGvlvXzAmY2yofICcGH4//UMF/0zthfVbVmcy05iB+JyFfHe/Mq8MJzPINKKXxpHpipCc9d3RwmfCUTcjhmoR5blW9R4092TQKWVVH8Dc2YmqWSci12L1whf5S49GZ+p7eB2scORF4pwXDWlGNPipkezgf6ICXYemQERwmjDG/cJAGJ5CJD4gzYtWS+8NQ5dwnPMw8Jh6qnAcjBJKzr4O91/usuRomyhzbdu6TY8jPIjWxu9RlqsF0o8CbRfvpQYuOx9gNKOUyammh9ZhU8rFq6FDxcO1o5qAhHT10AIl5h2HIctLv/p16zUGdYrmkrhuUyC79K/Nyb0clFNBYthKxTHMrp7XqcZsvHS9Kn2UZM4itIQ1aWT09XVPqyd/xfd11XzDlr+B5VFYjz9Q2qcLgCob9Dq502cWCq8aj9hOqz7rmjd85rVjWj5negIAvvx8U35ROVK3hfapresh70DxXqt0qvXWQmVHMRDjIkd+Res7qPtuLWYiOIYrPW1KMwy25zu1wOf70l6GzWb3qeqCiQyHoFuFEg09120+Q4g+JcoUb0UuvGhetTBBmQ0LzffQrAFH0l1e8vHxFe33C5ZdnSGt4+vgBr5+fIc8X4Kvvt1cLqAOLGlvkSxwMXH7QL78hLfeq/4A0t3kmh6a1x5+VfhrQ/6pppptQbg/0VovsQ+G1Fnze1q0J9ag75MJI8nD6HnPljgANRhsGdICVVJA2B9TJ2ZbP2KN1pVrmt8T92ntaA5ZcZ01bBQfpcaOPKtmvw6rs5piOABVvnhXnECCzIkv5FGPeN6UJkLXO/2A93U5Yc4Tty2/A9b8X+R+Q4t81kYAG3iAc5nHw/9RDsgMYQrjrjrzT3E+eyzWM5/7ny9ejdrLSHuve+3zMF8Mptd+dkNKgX4ua8c60gFVP+cpDlLSaMnBFeZ6gnktasxMqAozRAWJRS4tbdh6BOH/g8PTTV0mEkAJGJ9x1P4U/f09624+RmD5YDoXyL9N3DDwslv+jFj2n3EE4gSHKhPFsA2SfePa/YPoWmRorDeCI9mlBMhc7tP0eVnlP/vwLD9s6fQDwsn51T197y/NbYyXI47QXj1QU0Yv9gAyaiJ+69ROKYhvIKkJ7mzVfOyhsOYm4aE6ZXyRNWsaNDD/SOlpH0l2chhJxY3ovY3o5akV+7rjra/NJVNLlohhvqsxTJDZN4fBp8jI2VsWGPwsBckBkuMTDtdG0LJnB8Fc9Q1odTYpnC6eqwsZqoi2e5Ur+WFc+Xb12J1UlJ7UhNPOQf5IlXj8gGDHIsPNAWF8lYlQrhYYWlNFGFE9in0Y+DVtruHro9tYAlQaNO1UJHx/goduh2Em+FLQKSBv8bQVlZBcvn8+c3icNcKmi8FqujMjHCW3zynWqhUo5zIScswVHJR0KqchwL3s6E8i4+nmLOFiQ5jvKKWFwougDYdL3kSVMcm9+uUjT1NTFM3uhi45iNQGO6YCfaV3PU96NQ60Zte0x/ZOpmIGJnd/DFSID7nonxhDupeeW8Tzo/u3Cvwxy1b35xGduxipTlUyljG7nOcAqp/WldHbT/81hRgAKrWynpJnjq/DlBT4/c5K6w40KWhP8vQP/GIZTEM7B6YRwc5PTxo5QM8yzueBkJx4LzBnj3STzRhKfGs3ni7R4PkjZrGqWscH34m3g6Chbh/5Jlc2VwskaeSlOlrl0yCwCSK/PMEQP+ee00ps568xCZnRoFNGxePR9FvFzcyuwmGULcs16lmI+zefZVxFIqkQNTpwSjtkZvGbe9B9oeaLFijBhyVzttXibeEQWbZAwNavHZwcQ+l4EiRcpJ3xBM8N5XncwwyXptHGUG+dTNg3ZibuTxDKb801XLFkPnFdN67qjAeVti6MT6r2b8vqLN7D4MwN8Sedb0zIE6ah3jw3QlxRPY0jjyjiWPtumTl3+PUj6V0w/8fAuveZn+sa01JPHNcXhrRuZsbskY31Yrc5d7ZDYBkXXDfv1ir5fPfJqdzliEchKz1C/thQULDaEAjWicJuR88qrN9sUuAr66yteX15x2XcoFNvThmd8wMvHD5CnJ+g23h9bXOtkEo5LsgFPecjoWw7WrIr+mfzAx3D5/E+coj8N6H9mOiVI0rSXxFHnAo6nnYdlXm4iadblWm1oMUJF85sOdYxw0W8y6lrTpPgMK6Ej/O9OY/fouYyfS22Xvi83OLyHoZN1X1IE3iL+XRyTbZKK93DCNw1iMmywzqk2WwkA9uwmjXntBTfh+cBgeOU2n3LFcZzOFmFEEhXWscIiGSh9zDi4TFU7Dy0CFgvGsWt6zJcr9sU7uEKfr+nedgFwefZdj7M0S6vVUiQW4zNCuy+S6L349kHswojATif4RZxo0FbPcmkqGdwuhbuFYvfmc3Pa+7YroH2Cx5UF3aF59/nVPPD6nnegu0awxgGIhObFCeNf+O1Og1jhdmseUo2qaWjP3ma1tHAPaw7BlwvZ6ELk8D6Ft2HQKw/XcD3DwE/8GofY8tbY1HP8diVbTVzzsFU/AZhhXOv76bEAdlo4vEzw8lOKZxVtLpjvwVBDhbO9gNEHJvqTpWYexLJCrc/pqBGPaeJn8SN8ymWyPqH7lj3XfHIr+S71Rbx/XWwYRCusu9dD3avmvlVBPBVr76j4zHnmePzoXuMPpgWM9/rzMegk+Nr9Ko9trHgplV/BEM/66uFMR8DhXvS5yMq6tIT19utVHp2eB2u2NF3Injj8sKj3xKh+Nx2EZD2Ludn4HaBycd1OobpD1a/iaDDnIuKrcTI0/u9U7cBOVTyajxnfZ0NJhOcc6EgsNLZ9t1Nv6SXeAHQzEmWUoCi7+ZU86kAzj8oN8ZDH8VZJTQmeRCfbo3+yk5o7B0klPUd6GmQG1puGJyBOpdfomCCPdktn93KHnXLiqXMbAx3KYchTlHh+2wtw/LBzIVWRqcPvhZNEI6BQu4T0yJLU6q694tReKp+MXaD/XH1abOVHHuf3Jitcr2qtQpLHgMW95gKPuW4bHvCrCLSJG8ythS42Fuq6rhJMHh+oTkaPXXGw+uC3EeRpxvvZWG5hqEvDc5gwjniOGegkJ6FhTkxDUoXtt9OJANPYxHQPU6K/iTk41I/MI8PvCebIL9znqNPgnI37w+/oJM1Rxl2WObQ4Q1EDkuM28f3DadW5ztUa87Bp/72S0L+Crk3PjZ/6U+exWUIUkNBhbXyCLnI50jWZw0hzwUMx6uyMnjwVfl+JeiLvqTiB/uJOoxI6JFV/kRYMAK/YKRpHMmEogC/9Fa0JPsoTtVbcuWAr3h+ssnR5m3N5ClTiUQe7ZiQKtPJotlLzNtEDwfLkeWwOCPER31MInio+SIGPlutGMlhGuBQalFzu5twPfA0Dh7BMDjMoOnhQHQIuCuubFCikCzTijeT8BqPF5ldHNAAbNK43J97HvJJ/HCOq2R5EAyQ2oBXAs6NonqcTbfp4C83dgR0kT5z2ToaFQzwTxzkhbmCUdCBDJ60hmSMOyaqOeTxWKpjqyHWpUQerAYdQ5DrXZA9d60twNOHTepAnt7Xqknh8w8iBGLZYo4847Ik/e9ASHpStQowfifLeghnUJXlVxJqz500EPWSr85OM0rDS+aVgN98Z63ju8w1hCGI6TmOuYUyp6DsaSGdUQlO161F+0PNolJR4d/5PWQmmAekM6/S67D9JSUXeWoVUTQ/SMFSpn+V03qcESJzkTicsH+tGHe/UWm4jqFZ9gbNkhTND6gPMVMkCCWMo/oENJw+c0HhflD2ckhcfHAK+VwOPvp9Hn4jxtL5pnq6qdzk4s7G7vXuk+2d5hueyyHeEeX5SJBWjMcuHgyA4AUuPnf9uiSq81cbv1v6qrVv0oNNe+/jujASnBiL32H3PG7IgeY4ENwTpoqNsEWnmeH/t2HfFvl+Bl1f0ay94E0wdAQvdrXumDSZDkoNHue7PvfTeIeKS6dpxfXnB/nqFAtguF1zahq/Pz2iXDTtfd5onFQoXAxZHBjbInEDZvSn/pjQ4459meqDy+V3wnwUP4uwuG4ogBOP43GkWNbe/97UkPw3of4m0UEU74HEHbXmrPn+D2TeByAYLaWlqbSpwdlGDEVJ42Q4nVOF0GpKRVzMgAlwrn+PjYRbA7hu/LZBvomHFV4ZVD72cObAzX4jkgmMA0xfqXQXo4ouCUrLjcKjZNsPLNhRxUvzCA8g3nBpvuOj49XTTYRbYtAFSKCWmcqYEpZDRKd/MVaeyA9Pqw6JBBriDIRFjijZ7tD0pICtYl3BRP++leaw5MW30vfomALbffJV0ksKIfKCveZGzEiCxKhSEU0U6tIgbY8Nw3hogF2jboH4CWrGhDO0xt2tjrMXYkCKR6FBF3ztpGjG3d6QRve/2579Nwe9FK8dld9W/0Fl5g3kY1FyodGtrsLA0X8MILIiNWFj58CzvG11/boqFNsOZKHKxVrQteXA+TkkGTF07ul6heq370OAbG715UB8gwvqEw4KdSL8kvzWvdg8F39Xx6H3uKI9Fhk0uSKM9Lh52eKfxsbRrx5Le2Rkln41KhP0KWo7zHRimpjjNidhGZYBtsL0AckXRMo/nnLrJEPjGQiyoZ4NV1BVjE1OHPYsGujksc3BY2Aw0Rt/Z5VTghrRQMjfgOp3u/0PTDR52huKF2P/u6T3KZNijVWExqsLituCjA9nGCii+o74nKd+QhXP/NyE2w3J+Yk4p5yf4DrrKjfQtYyGBsC8O1i/neU/Ts3++jGR/Ex6X+9MplwyVm/2PsRAAT/auK3RX7GEEbA2yK6QL2pOidTu1ZyeCNkA3P5laG18Nak3BeGqI2Ytf52HhOBVdFF17qZoCKDaEMcjADMORh3PX6IkA0qFbyFLjA2YL3jBE30mZNmzfFWoSH/zcQ7m6fjecX2qzfPNavY4qUwaYovMyTWrCEvOjjMU5jjmkC0VqGNuZN0ad4fxFrebRNyH88O9FdZh+6+KZl2PyCpoY5rLUuyJDJ4CowE8DdOzwlU66GYQ8lojvLw2yXVy/EqSe3zoiXKudIhDEZeTa1L5v1oErgFd0M3J0+DoJEBFsGvLVdPEGsdMM6HmaPMCOtlSrswZ3bd4n6hEGT79fHRXFoQ0I8gLDT6eU1ZpKJPd8linWjidpg6DJuEUw+MGRfDdDABn1aQizLCqeT/w2VWDsU7w9PSlIzwueqXSS8oLgJhwPuglGw1/Uy0alIaWeh3H6LKbu+vvJADkCA5bmenIToGnLu6RjCgrcAUMrsoFEPdLsHnTEPkC8j18KcV1JtEGvxAumzurwOdICa2pKRDv3MPh5/OLvt1KTBqUw2gM61VXxiOCBcdrAcRHbnoShzLtrXFkg5VikPgbOTwzr3UxzjtNta7kH0zbgPwD811VzeqgM27nIkNFJZ3Z1Fa/tbLjZRUIRJsGkU+pXlvU2d2Gx7zmH+N+BoDb+hpDftBAx+2UNUsbxeXaL12UnhN1gqU6bDuamhr9g7ZsCl0kltK+Kw5onnfLFI80AgutkWFYAX4g4Qm8i3Z/mHocHj0/h35wGoh8ltP0oY6gNPBURl/A91FbFFTKyjkA1iV7WG1iixxiwX91g+Ka2jwc1kOMSDYVa0HVAT3KIgQ9qyR1+E7jIg3rRD2rYp5U30ksdIRylyCQuErISiBDwArgzvLrssbPmKWWxwXhfGMwVYgcUYz+GBkgdAKO7QlZT87021XIvLDisXdT0AvGr8Wiq2ZrY9gMTBYpUR4Nj8s2QCr8CSW2/NpyMgk42SF1oJzg4Y9xNjntXk4eSc00qBaOim46eRm7bq1ANOifZoCgjuv9rzhfSgNE7urqxTUdDPDscKIynWyS5iaCS0IOgJrlFuIkrQW4iJvLU8uA7JMdL4uSI9++RVpEeBEi3kgJn4gSDEMXx3azAzWDH+18A/VI861hYF4X8+VznLdScbzwewDJnmWn3yPd9V44jQ+rBcG1v1uSXOM2CaG5W9Abm/Q3p+9LHN6ebRnNOCtvjzYLnZHBsxPfBOXPNyzwoBti6LW4DDfhEAem+vRHtKjZpuLQnSN8gXxXXl1e8fn6FXBVydYH/dAF6A3Z1s1gnOeRwAWYXgni7rbontWewoeECAXaLXba3hr7/X/bedDmSHFcT/UAPKauq6/TYvWbz/m93/5yxsbHpriWlcOL+wE7SPSIk5dJVyTRlRLhzBUEAJBYy9tcrrvsVTMDT5QnPbcPL5RNaJ+w7o++sUW9sULsxHuhNY05/g29VNb73OTPOBZhLWuZxoeKOfDWDySeZJ0y0eVnpomMsfH4+p1QKZ/NjgkXuzw3+9hHphwL9m6c7CdNEwGxrlDc/GPiWbZGHjRMBYRHNxwtqqCuE2nyEwevuTRWmxXgvLV52i+tYDnPa+0xFyH/lTXvZ3vpaV+tX27Dnc9eNXGcgPDosd51MGP1xkCfYr9J6esuYMk+yuTNBvTwvGYeBVXDEOzMUyEqoXI7Dgjo2ZIkwenaun6kEpV/ew5XQNv5+F83TAf+qDHb/l3pma+WXZ2C/DjAZhCIa+nTWTk4ZGdJU+AGqK9bTpyqHfRs6HADKhjMdg3FqqICch3DsKoh4+PY9vhuD4jFU6XsAvyjrcDTxnoffdqAgor8Y21i/5RE2pA1I0L6wVYcy3RxGXctzF+U89DsgBwE9qIALx04bRQECUvwnCRfcIbIaNwDtEtHuzaMt12Fh621OWO5l0x0w3OucAeItLZ00byNsR2Oaspa1Hw6fsJYkNdhoalglY7a+Gt4BZVOShpJcgGDCjcM+K2IyXua597JGQI1ImkBkfbZ6BkJoIZaPjAyyEFWWJMvasvmfyka2t6cblSxoeszfAWO4yRe+Uvp5+J1pYqGZCQb2nMdyNEOq0P1c75iGyqbTTirLw1/xn6VCTlVMiQ5/zP2Y5seU4/mFff+l9nWVZdVGSc/pew37NeFQoQmfEIZsRh9HubDV+eish1esYabVI7XzIGuQKwLlEJ+jSjv0Vp5FLMoCZrmX0pTFWxMaHviRVT3BIRqJ3OUtAAAgAElEQVQRNmyqMyA5uGzk7jtEpmQ1XmYhPI1WEfJp06yk4xiHfVJsBc0DN2OclArlIWAHqUGnwq8rK+ZkvJXe57ljjDhAqY+p8QHhc+9OeDlrSHXroy/V+F1LpjpHvqPzmlEud8kM7GOVFoEovaDIpco/kB4DuudbaqCRH5Y09Tp/xgUEUbZ1Yuytq56I8KmpUfHGQCO8EqvWmsGtg5pdSYDEQ5OxLAmOvYpUgE4M19+bcgeoRrSZ7hACN7zuGPsrpJ6nDHzFdYO3nxkhYDWzD9YjoDMV+XlS8I7VWjf8c5q6zHcHHFqSucXDATLpeX2a2x/puykUqXQs8oUyNerOLdv/tnuRZRb87FhUoGk+RnFlCjde3uc1UClGVuzbb+bscc6Op3UcgF8pAMGxvFbLpB0YyJ9QEn0+mjrqGhgKEUShsTWR5VrC6Fdt2/C/3Oet/XlJ0aymvSQDebd5OEfaKTtk751Bm7TRu3hJw2kAXJzZni7Y1Jj9qT2BQNhx9Q7Y3sSvXEsaWmotdahGdzCjHAKDGrkCkijG7sr2hBuAcDcY3wy2AthzhvYz0QvnGU6QEgMYKH6SG8yDeDTksTbE+MCU+frdcG4QzQmzQU1ul/JgOOir7+Eo6nFN7EQyziL3sPdZ2uC5EytWOoxZmk9EgVNZr5JDHLGyrGLYWG8laklcifF5FCCbMoJvOQnmLJfXRl2bFvnDchEA7nIljw3BtlLFazzRIpcTUr120E9cTwl9WD6dtkaiA2XLmmQQXvTfYB+UuYI9fzrv5vht1MQ/idywhaD8m209KiySwiYHlHAoJJpa5oQDnnn+GBq8jjmC+iAdJRjUrbCLQIFr9k7QN3rEQN3Cj8Arf3OqikWl7Ka8sfeuvI4GlrXZOnCFeWpbnxXFOeeTxSF/gfk4jkNqn5Ij9Dr7PVU8mjjm5qYeP6cka6w6NpK6kXRNv0a+nhHS2xgFl6PW0iNmCxwz99LFChqeHczBWXul2vXopwiFq5qWZ0eLfuiZeNRiElaG48mE3lI6P4QMud4H3t3bxI2uvj0tcGp6fYLJrP8lgp4VyGUqnD/WQZPu2RpDzv6vHXjdU7BPdmNnOcLMfBNJNkjrhlOHKE+lyjtqiSbnywzuLBFf9+5ixtY2tOS8Ny91aWM4MYj/0zCP191Beu/7m6nyj9vEVsdIi3WcmWlkxfSj6K9Qx3BEb96ZfijQ/5PTii4NtOeULroE/iWkhi+VjkY1CAeZ6D5ate9ERIBhk3b1r3dGMyUZ2K1FQ2jlVFfmxfPhD7xMfkHpaybaMUZn4odzR/FxKIQNxGcFj7mSt6XFBsiBk3979kTw3hqxwCsgDbvPYk4sUrq8NmXAkP12nbgnI0zwKvkZ8N2zWfgvha3cmTT/qnscZU0BYcKLfg28cSWtKcz1EKpn5XkKbX/v8A7TzBznd3mbuyhvGysGyMeha66Ml2PJ+W7V2kljm3aydhCjmzh3x5ZP2fDrrjlv4kgtqhvAaLL+NdQbMxSmeagJ/l1V9Wp17cJY8k5veqrCtuHs5oKf6h1AGR5PhiPmpxcHWIaKZK4fJFsC9lP9DcAlwSnNHUPxJrdL3rDZApjIJ0qnYWH5Qd2Iy7YG0+Z2HODh7/yc16hE1kEAm+709r3C65umb9iHM/6/VJoPD9yDiSCHwPJmPoM3mlIP9Tm/+2KJ7mNh76F39NOdFZwcRBy9WGwKJT1DokacNfM81JOTrUmu/CfJLvZdAqlk0znzndmCXjhd5gjzDQu7aodwAFj8eHf1j2haE2l4TtMCFF9BW75E6fCYPK9vwHSum9YsVk42loXnHFuvA3CUXybAORd3GZEGPmz1p62vL68YS4gzmqsswRFRbX5wZxrwRD2I/2f7BbmS/+6/LcoObZ/KQvOLccnn4jSAHePvs0RmGKFRVWzezZih/JY5IT35JyK0tsnNOBDjN2pNNTcNtGnEHfVEJ4vO1awO+WyqcJAwsNZWjJjG0Z+JP/6YB8xaj92yJAyfFLAT20SA+C3U9X5SqL0yBYUdgCjcshRwl2j9QYmIhsPUg3x4A3yOCtHwmb/f28gZgBZ1uLK4A4yOdrmIfMfGZYUORoQCmYWka5Fmtzf2CYCFjn7BDgbwnCozzz8qZIVBEG/EEY9Pm0nz6YY/pd51XSPeBQ22tUXuzeuiAiEU1Qj+QynPun8C938C+HfBkzPiJ3uJpn3arC1CGBeQXalgUVdSad8/qt+PkyClVdovU9AJ6zIcSXTL9325cuCQlqX9QYFPomorMu/PFmtjemfPXekVmYv3uD2Y5M4FLTCWWhRUCFki1/sQwTJ8mhdqeBgj4DaAeVzfGXXyex5yOAgIC1k+wQupDwfd9y5ZfwcYkA9mWbx8nqUy9frDbkbMl5iNKJJEKZfbTPl6D5HNfTSxwYK+g8ypIZxnuJtnO9S5oSKd2T/IXzZWS3BX/DMPa+jSI5ep2WmOy7Z6XjYuRZCs99FUaU7zQpDjE6Gb98DL+3zwfsUGV+Sizp2caZg/0uQBnGk8Uj9zpUbE3iTZPJJyG19Lcvle0w1J6fev1pH70keghhnV5GpNntE1LTIuEs/40jj5N0pZSZ2Z3yiDTEuT4h1iSuasPK/uxHAqxqvcbN9Zr41z8mW8SKLpyS6to/ccdYPlXHYXR67eJapHh8buNJEstXvAaufE6YvTx3vy/wckk2Ef2Ct8rfRDgf4t06Oba8A3Sk4jeHEIY9JhqfpoJ7Ro/AavfGv6omuWE6G13Vxp0ATjoT9mDuTeoFGNmIcmOFkIEZbQSq5D1+xO7xkR3rN0YXE7oE1lkZRpyGIK+ryDSjWtpFjwsEFO4/LHmaXo93yauwqh5m3G4JeYNCr+V5NvCsc8kElQXjx/JNnmmSCWZ8YZreP/+t/Ab5F3OZ6JGVH5qJmnDkx/cXtdyuO7sARz904e2kUIcrnxYlTBHCHavV5Twqa/zgD29Nw6shjjQymJJss6B+BlSca8k12xv8PvLe9dHNOzkJTwxNe0hRtrAPm97tacwSE8RgxGDAb2HmtyA/h6VedsudfMwu6LN7esT9t8M4Bu4X7yRs9dDQb4s4W0l7DGhK6hYiXEmQhbu5TvaY5MIe/rzKhEblNogB2kuddBdl/waWjSB3qK9Wo00E80SPFFY9pZO+b6o6Ghs2cNj4dSRkdzPzNh6pkmaR9tLBmt/D3q86H4Yb48bgZS3MqPT6v+LHjTYV7gDuHxrQuVszgh6abi3Euml61km0jjxN+MVyOtXyt4IICsaOzBXIdUZHjzs1b7xzL/cZoQZii78ji/u/IHpm3MaP1SJfqUkuJ8LJ61mbpsffNf1omtRwaaGBjxpoZGrYN6A28AcQo1mfrHGnmDVNkxBhAOWUnvRwSQvX6B8OqW+6H1KbN/SkvhTxSynPY/XRMSdCTRGxo8pZzMVEISBh+K9ZOCztphzd2KGGa3MHKpsSK0/yIanozr4WB9lMrO+ff/bP/Af+NV3vc/11Wk+amVrWmVoZBNQ1rlKQ/FNOWMY4UJR933VP8rCnQ75Gqb1NuAKzGIdj+Rp6bXH1HDayM9CCdXosvUsSjOqcczAERdvBe8SfNeY++iTJfdw2odrfQnew77sXuRr+eJIkUgqa0ldh3rIubCDOUCZ0Yf11U6fsenP31MMTFxF7MrIeAHkCNvyNM+GhYftWdVr9brOu/Q6qSNGPItx2iv7DCVKwmxTpU6b6zNZV8X/UpYU9456WSQRhIRfDSaGcpgJgvTb3OieVI/M81+gCEdlsjHkiPVGkveUqLXe2NjvYRNe6KoxPidXx1utdoV/6zPZLnJ/LY0pXkenugJFqB87y8AEbZ2keBmarBMblSI+dONrAQfG+Tg9NIIW1MjHaVpjZpeWRLzuhUDMPPYhES0QvbHHWDImpuBzmI0uxuvNIRygs3x3Gi0gQwZMLq2O1Le8AseOzKS+oiGEPVm7LSNQllWtv7pNdGR1EcvQL7kmzbSAdw2qhnq8nHz9Lzo6/28rRo5B2mhwK8EVhEXRAhjZwlcYW1DT/MwdjHD1cWfvO1K0zEe6xgpyyTNRRkf/sI8hQ++n6a0a0gLNAdBoIBWOt+Mvtb2RiTj5eOSxdtO++IG5GtQDBbcCOjC27uXY5+eTIfi0h+EbsUXaAYB6zxJyF6yNQcqinWXj01+Joixu78ImIERR3dl/rMMmfuwhs2kLi8yRYXh+HT1zFtmdjC4IQGb4wInGI7l8Ead5EQFT/KNiDzIt29q/y+UnEbdyPMzANtej2fP7+5DxeMZT+vvxyWZISXatPSKTc+tvSDS/O1x5tH2D8jE95VOcOrGhLM5QrmsngQQp01KgUa5kYI/FeHfafPYllx9B6VzvRN47+DrDr528OuO/tQlDD0R2uWC9rT5lYR2/YUbWLPwxEIjc3+C0ZyD77tN76EVB2ttxTS+AHh+KND/E9INopaF5FIg71h8U/GNKaSH7H1j2XK4uNrpjLuc+uqUT5TNCwB0iYXl5tV51yee6OKxMlihadGiRGcSgjlu7O/k9HW/cC8lSDulYhygTGKah0FwtGeTLPogJbJNxPR8IayPGw2s+vlI2wz8gyR0i7UByBi3X4GXf9+q4OBZ6tMg3EWKQwXZILeD+U5tGN4QwZXnGWESLBfmIAlmHbhe4ffRuFI1K9H1d36Wd91nd8Pfne6QzBwf80Py8PPMDLL7tnoScgxfRjN5hijaAbiRgN/xHvDJyyELLuAu+EKkSqAu4V1pA9EGbBc9lG8gO2mgTa9b85vVZRQ+NhtcT8YAqhiHd0BDcTKAjtY7+nUHdhIlOkGv8jMDAz+d8dE3YnVoZ/hBGIkHH3kYerOw11DyzfJcQJt4lEoXBd7Y9ZPUWy8bAagHuQl6icgk9hMbkLqvGnA2lQ2GxulvgUNeF9Xvd9PID9jonZGnkSfPRwQDj/6GKSvO7+4L1am5Ccq86TTY0ykMHLd42Da/BV55urN89JZ0U3l+R1/e/N54ywLgNGcrzx2gGf7pZZlPoyNCSvbOaCTW02hq0ERQrxi7k9MMjdxHSGhHWCCKWAXADwdLvwMnlHLoMJSuEIO6bWItVG4MZ/JqGWFRHrt/UYINBYiQ6qPoAwCYhy28dwnYRANqh1KWWcbPLHet9RGvMwwO5Y/xd4ov+q60aHMive8lVLT+RWMzQR9NAS7ys32P5/5MjcRkbprYpRHF3Xp2RY5dygsGWldDLwu5rsYOWk9ru889wYw5WNsx843Agwq0UP6nX8eQ0TbzlgPJeMSnYkEy/SBdf+/QUNRn7Z325Yw3ziFwrRNknfkK3jjSxVuEnBY/j/Lfj9srZaXVsBy5a1XuqTkwxe7FbZChmo2hGUgILpI3EX6RKPZIfEAfpKQd+S3GP4pni9eEEMNfOBSfT7QBTLimmn22FD+sV40Iz7qu3VApNbjpGK8m/nrArNgPHa0vHuqacikf5ewCZOcNylMaKAapC62yWvNglSz/BOFfhDDgZjWqauEN3gi4EGHbRIG+UUMjuWZiU1rXNLx7Q0vsPqDJYHRdb+TPYuRd5XILlbwxy33vzOhO7XKtFH9Esb5GA5QkR0VvYi2aYUz+A6EEnJI6TOme58jmH45g8v2q5XJfEq0pRFLtnvW1RL0ZUu5YSScLNcuP43Ma1n/uDweNzuiVx8LKZ2yMsq5CUmbMdP6oO0htjc+p8/AoGVvZEjgj/4PMT8BNHdtYbOxzvu6wYvBJfb7nXMnBfMiDCEJvmAhd+fkcDl6RozVwt2vKIIbyJhbrRGYDS8Nc1jHlwGtdC4nRKYAmxz0ecl816Bubu0N3ZDGDPYAXepuDfcCdczJJlKbchhnpfAwvt7hVnOgRI8vs3gEACNt8Gy8P79IgePj9lt5VZmfpfpngb52eEAr0L5Wms74DoeQD0j3RcbLxl/D5ryP3/uWTL3b7TbHgnRHmvOlLFjT1OXNPexRkEXlRIVReRuKfhVPBBVAe3qkzgZ37clcat3fguoNfXtFfXtCfn4CnJzQiXJ6f0J+e0LfPcj1N78hXLHH9r8JlIbGP4FimO3nDj3SefijQv7eUNhUiv9miH5aJW7xakbRFzETd8hbLmzsYju8jvwCD+qjqEoEsD3wzlTfDQ5Zcz6gA7VzuqvKdToMq1DuwC0E3L6uyc3LKlwkyh97LTYRLJxb9kTGwSYc8vDvYNywVzk57ExMqcFt9X5Rb1ct3CNhn5XN/Jkke6zE+kj79A9iegJf/E3AEAFDyPtc+UvIsO8TTFRKd5C136eAA1F3nrYO6beTmMF7x1HYMCUAZhtyB/hp3Pnve8L52Bbq5GK8UmV+EyRJCmWLe2jzAI8ZIua9sRi116CUxwlMaLEKJmAICvOu7yGrtuAJdlUKyptVqcReFM7VdBBw0UNtAm3xK30gU7JdL8gaCbH4zzrFs17FvosR2xT3C6EaV+NSu4H0Hrq/AVY9/doObmK9beEPz8CR0ubuYocqsMNphErh37tIPAiSULaFtDXTZpJze29Ovu9CuHUL3wKL493sfBX4epsjG2WSCxgM/6dZi0jyUtOFBppEJL523DXVkXnmWLEvboh7e4fTbcONRvC9tDydcWRq3hyW7zeX44u7G31AmF6dQnh9VtXoeJ0hpaIuMZV/yB4BffHrJTjcHGjfGsoqQhkGXxJAmyTMLg6zJEffN4kzu48/RsUcq+yL7fELxQh/RkNIz/57kFRj8Es0H0nokp73cCdSaKNEbg7psTLmrLNSMJOdIJjJPRKaeYVdW2oGgbxY5Dh+zPl9JqCZ2Yyi35VFjMGHhPQpi+FpoUd5Bj6E3uTw2b7qs1MmePdlbyuD5CTSB3ifAaBVJnfbvs9a6o6NTx2vh3QTLPRMnG/MeYyPjr0Kn//v6rzrOuHYYZd4nunqCtGUJxA6EhixG+pJNAYqqi3KwfoSsNICr4KvDkDz0HZm2BHIXOilvEwWkZRDvUSDuOQ8sBSL0tclRhE2jCdDQRzk4N2/yDNRMZLSkypb16fg7yvn7TN4yuAnK682/mBXGAf17zCmOZzcrMaps5nc1IzyfWT8JMc4zFnqLesoUr99OHuiZzz6UhvwGsE5DrhgP52tKaD68ki7RxIsKicXMqlLhJRstEQxUAQvD5IIku9BpEj9pkw8Zw332Kg5bsXOx536meeR9XvIMY7y936pdIajxureTDAh8HDJb8yH4MBH5OVdyZxScCbhsQgVe+2e5t5IIF5UhN1xEOcsRnaDQfVWGG6FqtkYIuIDQGuHSGi6bKM8bbXpVxKZ3Sst8NpB6o8fqNBh35avG3jM333wvIAo85l0UeJ1xtRlzRICT2DmR08c8yORTYNwHpH76AxWENWXYoZTY6Z28n6htmrIa6cjfWWZHLinQ0/vqzx4TRa25oh2woFsUe5pcbpBVi8MzQQwJCSKv5nzGBkCgtM0ZOQYjmgx7m6jI+dI0QdmUT/ChdBuJVsl9OQUSSrWch/ubPHHI/eEiElNtbplGml9nIquu5zJFPKEsB9kECFBNoe7vXYnOjtd+jKco3BqBO2kMODi79l4Sg6nprWgsod0lrJAYQgJ6hYaOJOEfq6KcSU0ctY/Mcve5GFGGNNrTWiU7+1DibMq66WqUBLKjrdCKsh9Aup7lcX1Hw6NMTUvW4dP9J9M5pp17JDPbUtDOCiKyXhpndLYOpHzn+nkw8vKIxiyPyhR/48Q00cf/1FQiNk7vaj5f6648/w4BcCRw3nNm9jXTSD8smcCYz4nHNevMymiMvJDjC9azT43U0yDHfh5es0MicFq9So0ImM5HsmWZn3MEHD3Mv/5HzHKG+/KK/udnXH//jP3yjP1yBRrh6adn7J+e0S8buHeJDp9qNDrIdj7i/CnHPLkTjgVgfPD+fenRKicjlKNMq1cjY5jeZwHt49MPBfr3lPIOg9ODSXlef5bl66eSi4xlVab8BKQTyjn9R1lUTVT1Tn6WNiYM9bjktPNRaZmaSrymyOOkcCdUYq6fuUt5Qee8R3x3FAKXBIGGObLKqD5bluUh/yg8j/k/MGUmeErM3yGUMAP9d4D+CzUcOkSJ5laDSBvw3NYAk2UaYZ26bTkcllx33dmUuHfdxatnL8QSbQmjojxPf/n9fjUpATH/OW9f1JPGNMHiPcnqX98TNj3TfpH12zaSW8bjAb9tDnqUB3ex/sMuQsxuYdOlDFtb9kfsnu92FGEHNxLGuPmGmpqE0KSmh8dtE4fyFE5W5C89SiI7MtG+tQ4LZ8Y2d63L/Y4q8AnKtuAHu/pRsBlcCH7KgQyDICHhxbpewGE2ACDdzMMO+jrAm+ZpYgxweQLYhD4GsIGhfbr2gIdFdADBIxfIMd40m+TzmVLiT7HCBtrIjHIx3EQnR7qQf1PkvyVkAUlIfkMyHnpPvlUbjhdvTe9Yo7lPYzW3qiVdH9OmccnIYsoTuZTrUilnkwOTTI6UTkpPR/iNfA+C8I5DB33PUVbvSVPeewtrJx6dorvw6ca78kcDnia+l9dNqXOWF2QZiwc6bUpCSA/6dujdtLYDVE903fw19MAZRED3WN+jeEquunRP3w6wX1eh/iwMoZejfFNoTgbGiBT52dEaRbl7clSi5zZ+SnSNhu80jFC6KzVt0OghxPiTGE9N7khjtWrfxV9dadrQRzYP98QDj4b7UHqH7JWbJqSx41BkOk80i2aO18ZfaXpmUWFI6Ww9dlD1jfFgABpz32nODMSV77F1rOJExQyGQYFSDj/I1/I0ldf/k/JsAsMhyN4jv/WKZxTjyEp05N/psGnG9Pp7JFE1z7rf03NCkoOO0puQ7ZukTCNs5U24o+MtynPScOCZ3ugBcOA+vF6TJ80f8Mib3nq1Bt88S0Etam0XmnF2Z8EXUwq/WphNSOAIAHqreu33M21gMD7r3qbRQPscL0XBbTDJKt0dZgASAe67PntqG4gI135FrtV/OKmZx+9KLn3zKwi/UeJkqZ8E0rvPCVvbsJnyPIVub0QeWrr5CCqEw3c2O1AY1bIOQ+/mNDWfRJDZzEYL8+1JZcCpHrd+tA5o+GviQWFOAOkd0kZ1I4ggoaFPtCx6c0Q3qGSj/DL335Vz5nVey9mjjQgXEhxqtIlBIMk9pjsoeazr/syVJKVTUS/Vrti2rcCLEEp0qzaJLsZ+qkSyaHPH0IjuosguFDGjQsGDUKoPkghHu9bWdBw49B+MKc8RLX9ryvht8DBFQhi+weU+VkDORoYJn4xcIhTpDfKjK5xkmmUP0hTfGdDoNXYVj6qwFR24oRhNhBGV0GVRnttUibzs9hmqZLf1IUp51vkzQLPs0TV0UV7ny6huExRTgfRqyu2wHOluZC7NHaSgxPkz//LZXPQzlOaE1XyOaZSFGaXITfn3nhH9zdM924AniG253wj114ZrRP3Rq2jwVx7tV0pHADThz/jvxHcN+g1y/mD0yqKFJAcppG0DONH0mSoVvp+5+iJ6b5FlKMnmDHE2eHlF/+MFr3/8gddPz7j+9Aw0wuXnT9h+esbrpQGvtd7pRhLjIYl4Z/nA+Im8jxF9i8QjHX6scHwfZa6H6zp+9V5Z5YcC/XtIR2ZORRo9n2pf415mtektu79UcshySMQONg4Ppzcuhkk6zxK9/R4pq71fCFnlle5q7OAx12mKRLVALTsI8mPgcldkEtmdiBqRjXBxmidbVdVOzv21Z142P0vjL0oNHcN06Lpqz3YEVi7KR1OpD6t6l3XfeP+laPx/EdB+Afq1osPlV2yXpzmkW8oSfPKNyD7NqVboxhkWot0UpKYUlbyiPI4NW9RhDFJ/F2Zp2Rjg1zqX01+0M21S3LDgAyfGhJAsDbinHCrOmgBkYcQ1JDm720xyobO1YAKMhXvXT7lDfI+Q5MyhJKcVHPWgyeae1TY9l2kXMF/BvKkCXUKk8wVg2kFN59pOJTYJlV6PzwUeErUyVDOusG4AcAG2XW++UHhtzcPS1/uA1SvUhkPdLWmhCnW7cwx2jzkBgPS9KCF0nNQIrHfzYLMTG50r9/JXD+qB5BgtCcWEvacIbY9BSPTyIy4WkCWcGuiiC9k0zCtqsrZBAF3EOpWAYnByb4pTwRv5UsN1EPe3taz3feVP9fcnVctay/c+D3PoZeW9e+zR7xAvdD+GElyc8CQXF75JaV4zKxLcSLhpPJcB4A+wXtD2EKiWeccL4o/KZd+iWhkRH2PXm6aSyofA4gVon/R6hkXdxrsLzFImo8WdpY6ueTd2uPbewdSxbYTWOeZT6ybqOudagCxKB5X9p4dpFODYALyfRHY4rwcVDLBezcHKE6jHNSScDeV4/DIi+2ompO1n+1Qjo3/Tqzs0MTqy56fRdSsj5HtWma+m1w9tQ5LEL2B0NDAxPitcL9zRwRr2vWP3OVN1UzEQDPjNLfMA7zF/evQg+5cDbipVE8GVZLV3tAZI7ZF3I9OXlq6X6RBvrrLGWiuVyIF2ao/Jrfj9XlHn9+xyWAkzmsVp9zzP4f8J4efYdHjhXWm4EHihffZleBtXqHxPMs/4EtJ2iVR4UteUOA1pKBM+/KRjVG8dG6eC0z1iD/sf9d0a69kI6BAAldcWfjF2AkCEqo5i7k3i63yoPxmgcYpsVMJFApPt7syHhgec8V0NNcmUpIpTZJEWzHhBYN6IsG0XtNZA2HDVSBZEhM6Mp+2idpwmv1V/znYReuIKN5WJPGIlYu69uw/SiSh3p+xkyacoG6W6hHEf/zRcdTplHp0hK5vXt8kcTXmGG3Qhyo5Cjw3nsm3oYPzaCX+qDEMcspLbPjTzdmtVea6tNVITAB68uhX3OmeP1JFChAmX9CsUcxsa0Hqx4eZOMKpllMvPKZSGUstjZsdVNw5wcZ1g8vnopZ4pV4yoYFcai6h/RcwUipZBHu0YLqX9ArxjqXoG0NAa4YmARmK8QLSpd3EHqfrcFc9myMtRn/y0nrIOPei54aQvjUDXEIfyjDkuRfLIdG0AACAASURBVDc7jG2NUCLQFjIwM6c2BUKV9qcLHHQcfud3Xscuj+fGRtoUc57TSNunHy7eR6QGe2kG5OKpncJ8A4s/FcIKMefFp0GqoqvwRcZOFt4/jHhsRxIcg3R3y4g4NKyh3xmtk5uD2h4bOr6s2LZAW6ztufJGa7SLhMq9tyRz1m0i/bBKaW8iupTQ07OMYp4t4QSfHBGOB9iZ4snWeGGgbEYAYaRBiD5FufSZq0nDQC6vLwTnbd3lenGYRnxcZa14mcabzze9YK7hAR71V023eHyDKNH/vJHvoTbvECzeKHvc3wUefiup5iHCzUC/v0ka278FP9eDjDzyIzv1YMoEAnC5hTm9tHU6MRpOn/GMoeeeajHYNoIG4Qy9jm7u2SOZLPpEGOqvrZfuZeK26xheXvH6+2e8PP+Jy6dP2KmDWwMuG/iyyVmrRxTVsiwcqSsX8nN5jnyMxBKPWCMW775E4iTzHDb2keuaj39+4bH+UKD/RySaf457DqiskQ71JC/N5UIOrJXS8sXHpY8gyiOV+khKz6hSJwNuyAAOj3Mj0ulw2Lc3flmh796G7ieqn195s+NGwH4O3iBu6jrm0/qPOABzzecdyXVzRDaJLYuG0h7bqkPJPM4ffEuhgvTOy9f/m54B2Da5j2rMfl+ld+c03HFhywGUFI+6oRfrub2+MwCqwFY45UqR7vNsntZ9MSlwPKb0N4iJH6o7D3CNEtrYSNlGqaDQXWGCnSXMud0Tb0JW8n6Qc0EVhgwGe9cQ7vqXvauKkUEs4Tha1PkwiYtYYKsbW1blEZrucHsToaiR5G+mMG7A1uTATHHIZ4y1TXrFrjtLapt0sUGiC1ED2g7uDdQZpDCR++zkN5OMlUk87+yQMbwaupzcWFh7jgPZMudsYW8VzluWWNXQg5vUYTTTLun0SbD55HFqY95s4Ie4lnGaEbG/DfcPjnEo/078Ij2nbM36bjZSKh/6cEcaD5HvXXwfoTwHlt0/TJaXIV4RuT4YW1a+Mcw5F4MH9gOdEi4YCH5qc+283vBlhNfYP3vwh5ZLl7PdGudbQfo1N503x/DJWUqx2l7x49O1Z2XTBltJIneA7PYKswFjpTEARImeCqi8xM1CYthc5wFV/CCQhrJUT0G95iQbSIFV1WPGUR7S/O6B4q1yL2kvAVG4S3/NbqGaS+VRrlo2aGTK2QH8pNz5MwGh1lDPJpL7bGe+mtMji/sgvaGKD2h1UeNJ6AjjRZYSypqYRAfvqizuRAnMEuq4tYSZdn4BlaBsW0CpokSXTbk5Go4MXYnftHq6zk8nUH4fmUtEPuUNnKb47UrcD2KlJ2lUtQfteIjZnrx7P9YeUpIHSYz1hGCiboIxkSvPG7LyTGfHrOIclyiJuLkj553yty7CqWyqn3ao+TbqOY8396sRKW1DeaMdQEvHV23IFOYpFDoYoCiu4M8Dx+X3FV2NtprC8ok3EAg7dqW9Cl8QLmoU9nz5hM47qEVYdzWHxc8M/Ol8NKT/wFzdrzi/HFX1VXkO5JmzsVbfqeypXlXsopy3kKaiD1foU4MZkoQCPUx/AJsTI6CUWbnjpvFB20IYrA0diQZsyYfGwyDranSqiyr7qnyT8Trv7xZLupEYJ4jn/0UU6Nxh99gzgMa77KUyPfQmyJsso6H4iBgd5T8rHkMKlqPG0sHtsu2NQ56tfXag+Txzxv9eKRqnLzR8HXgijTDN8/wOZdFUTNvt2ne5jgCOzXEcFfhtqvW1in1obSROipPNELLJ8YAd9YkEWee6UZUqCXIEEbSlhqA3kbsHUZEPN2S3+iIUO6W6gcCDpv0x47TIo/+vFD5HySxAnWfY7+j7KSwTxalet0Md1o552w9LdZwT8+L133URSYucriFIdd0cu9Gg5SvFI80TY8nj/5ISzQemXwD8/g3b/28G/utrNFQo2uL3F2w5s5RlkwWRfqR3p8wkUyrkKSbC43umqFQMyBlti/Nb2gi0u6ij/Df+1fZDJpup9LqnwkOCK9vZc3+54vr7n3j59Iz20zP4qUnEkY2goXC8hqBZrE4BWnMWHJQ2Bsla0e387j8gjXomS8tNxkHerzTUHwr07zHR4seoFPdD0QMmT+mREwnKP8qm5T9jaR31ciBoIyhsY3A2SD9gpkojs1zYTCJWuO+JVHo+IWbUtII8PXk+ALcgH5utI+Ugfjw8OyQe7NniyyBpWnmX7lNfi6LWfitjye1Nyvujd3l+jiTZNEkfiYzP/wBe/jW3uz2Hpxqn8ROi73W3ggmx0m+y/CkVizl0tVnQHRvr3dKwA4vMpAFkhmkMFZz444h7NsfeuntMZ0YMQMPsDkNYTWUxsng0pQrz3NLY4Eh9jCYpvvq95128z1sHcyvjlPCBhqskimUzOGH1Wu97eJD7ehrWhNbnApTtmPMhQi4PBqgnqY2knXYF2iaHUSq0MTbQtivs1aiDCNxyywBz00M03VCSeB5hI5BeG0G0AW0Xr0tioUtQT/vrLiFrW91UhyiZUoc6L5rVO6N38zInJ0oNADfzZ1MrSLsvKEe7Z63UFN2OrPUwwlp0Muv/zV0sdBOAh663g0bzNCy0cbVOU/0LVsmrtu5NyltpengfIYt7lt5U/Ggnd2dZ/c+sxn/GGgZ52U5yBRfwsvFHiuOuqMMG9bvmkUY58xtCxV1jUfbD+uD1/QFQ8gzP/LvZgP44ZJfTGG8+zx1COolbFz70NpwX6Nt5H30C8FJxOPMKHp5lXjdan1t/3CPTZE191gFsptxWX1qff6t498Op8MpVP7+ujVGT5eueUBYWU9oNoyhpv2kNzD3wxQzEnJ7bADJhgo6hEBLcAvaLvn+h1+FNHBwan7Rwni0BP5aH8TTJM6JDXlIjJ7T19FmNBiyMu3igq1GZRxJBwqlUo8sHVCun+viU3b+DxLCKIr5t8SoNjjPltC7aJ7OEAbYHnVL4cLAeMEe903jNi5Pgykdri/1b4GEYyrIq0eHXohirL/SE4oMyweI6j9a7bGAh5aI/0CUZvS/cMkFsMYkJmtlbeTWBp1Oqa34kCQ4lWj8fKeGKEx+Vy6m0mwmoM+pVnQaVW0S0CCyJDBukbJ5WwkjM4Zisn6v2XcloeXiEbOqdL0TyfzHvyUua4Mpzw6DWxLP2uu8gsshIFqFC8r1erwCrYsPps/Sne77o2yi+E4AnjQBxNR4CQIJe1zG9+FVD6qBGFjJduQGRhm4XT2ArN0asSL3xWXJHaKSZL3KD5hwQlpy/IL23sY4e29lkxOAunxuZInrEiYiO1WizG51AYOydsavhF1nkp4y33EFt89DR8i+iacyeyIZvrKpS9vxshETn2fXIPi7jqEN943pL+MUAGkto895VSc5c6JWLdRRhTe2ZwaHCfTVfNuQ9GeFZn4Yee/7x90g39Avlt+QNBlwNjjKuxlhGqjOxCIRJQZc90wu1sagHVg4se0BlcqyAzCg7RhFhwO/FXg2/DpuivHWySybfco1EmYO/lSnKa+vWOc1KlkiIGyQ38C97nveJb+rzVIE9nTsyP8tcUni0feoqSC7iVm9PeNIhhkpmTBJGN2L0IlEKxGDU1xpJ/ALbB5doTNYnVTA7Dhn8EWs9LUF5ahmNP+ugbJ2BWM8OCsgBpbecyleYpc8JhAeTPTwOPJ/fs/IKduV6zsOx7vW35Tdl/Wnbd5wbrjlK7jcP8PqRHk8hV61/35nequz7ICVh4FuVf+ydGHwA3y2mrEjiUVpN2bdIS6HaniuBLMw0f5LLG/K4ygu9d6A1NJdVKNRhFo2ps/O9mZAZYeZZcEn9F15hRaW/lGgYv3bsf37Gyx9/gD9dwD9dsD81XInBpkAnJ+mFrpX9eeJNo/NJYpznib8gtTtahzS8Ozt0ONMvLeXBo7xfLv1QoP+lkm0GaFjkvhwHB45gDqdhRb+nNBGR9IDHDO+oO/8OCV+V6PrDdiabhTBmUejk0M0QgpucZcunyMTk1qaZpNlw2Nou1kWZWA4bxZLFiH46UC4TPXYq1ekKRi6g8bCGKwCy9dMzT1keSu9FSlNUT/WM/ZJ5WvLHzEMX6QjbTCiPpMpJV9gz6mWl5oWOhHfjhDKSJFd/585y97Depax9XZ0tTOkDKcJyWa4Aq7jlChFVnO9dLAhNaZz2X6NTqwktLnz0qMsV6xZGPxtLJFgyxxa5bPagc0ZN+6IumH4iQtHH1kTxrO0Qb6Lcb9C70ptGtSCHT7f1yQaXDbC71kkVJtwlrluPzTmYwXsDs94a2XMQvATibHKp7ZLBiFi9Ukjas4JJ+YALwP2C3kjCPTLppW27fqZ+cS9BFDIbMrGPmLTNg+QNDzjOSLCmlKccOUTegvBRn4Xp9PlvKU/Pbb4hTcYiB6nR4iHNwuZpG29LmedYs+Vz0a2SWoCX7UA+H3iWk9NMg+x5g3uH51Mz/BJ9DEZZnDwlY/IsX/Y3yQYZjdIyuGucb83zJdJhn58rPti6tkKjcLGkyZhxyulrlSmJOYkV5IjAFm6VAVD3KyrkCnQGbQy4cjxZEBGBqMkhpa1pXat+lMgqf7jxm/6XafvIV6xvo2xyVzrKT6kuGt/4Rn61nFY1WveMau8asO2zKstNYX5Foq1eeI85W8mvTkc+ip/nbeP17lKMOOCYWf+WMnZk7Vhm74QO8S5omD2SBk9YlbP8GpNUi7GV9CvKKcyeoKZizOqRJvNj8YHcjiuvrYlXody6bgc3mfzk3wUkaUxlDRTcGnletE0nta6fHKexFv9UMWLLGbUrbYFuNHw/I8PvxtbTtS6drFlCFi+4CqU5YOVXwzK71cxpSm3ofy1DxD9YQnsDjs8WXMSMg0jfzRgUeErKpzN96v5t4UlOy6/LMVKC3T0jpjtklzWL0vXMa893MzLIbMlHR+GLXYx5BiWq0YcGwhM9i5c5gA1PiiUxF6ZAs/H7FQ3UQGSB2IGNgNfGeNmv2PddSbb5qSfRx3ceBOOPAYNMxyqkPPJL8X3qMt7hsLQRIShKMmQiw/WAM6uRt6oQg16S1Cfic6j68xGT2RdndA48tQg1Ae88zHwD+YwEw/jvJmaBEJ0BJuGtcr0BwJBoZ6Mf2j3VglfUv1Jn731iGUl0gss4iXoXe2Qrp8G/ChslncNyPpNiD8Rhn/7m6HPuoHbYlejpdzEUKIPNq+x8Mhhw5bT8Dn/yDtsGmBe6eqQPeVd1HiaHq+xNmnpsb0oPOgibrtKue3W7osTajxDrsiYtoK7R1kYhHttYxOjPrsKocmkEUiOfgLxCA2fCnMtpVjI4Jfg03hg7XOlntPNR/no0qyNFcrxFNs3SPBYmucCj5PBP8t+Lno7ybK7qhDScyRk0fB979t2nb+l9bukC4FcA/8Y3Bt6Xadx4Ix/s/b6LtFpOt/J/L8MY+Uv+aXRu2uroA4uGYy8yTejiSGVRmolIrqJp8d5EgzibH/vGItAsoqC51M1WlJ1nb1o3AeDrjuvnF/Tf/sDrUwPjE5iewNyBtomQOAzfx3ySnIdHZ2uhkQV9rXTU3gK+nM/s7z2neat+6QTPHkk/FOjfW8o7iSRh583mIpCN58/F+1Jy8KX+3rP3b5TOKOxBibPFGDtoyywVuZVmqtskQv/O4E2DPXUShVjb1YqopftHtW4POw2EUj12LXU+2P83RaiH8dA+UbrH0a2JuZZ36psFzonQDkSbIW0NdY1Q9JIuVKQOcGrL+zANb+x0Ynr52RsR9Z8NaE/VfLwBePofwP/3v+b8E5rcR43LPWhT6awgt3Hs9RlbSFthzgIu3ToV2HH9PinIY2PlyJrhSPOIQg4cYPweRps9BPwEi6Lf+eRgxAsbBxEkRC+55zn6DuwbXGvTdEPr6yHhHqvVst+drvDKO7oiUHSHwVrXoGsarX6Srnvrs31Sml8iDQOYBS3tW6Ok03bfjKnpwJUeeZvCJhm6gC/a5u7Kdk5rkew4P/dxB0C7wNrCNZryQQ8MAA1FjyZCaFOLShV4RLYU5TnvJPTDInQUeJokGVNQ1ve41CfancXKTGN6KSq0UuHlpxWrBrxEXaJnWY/SrROG3NaUZ7X++OD58PtdfJyqEn2s60bd5WgrhQcMtFE8awbfxGdVYWo/0RnoPwWftU+QHhhmPmX0UnF1Aml2qUfgXBuynY2XfsFxonluVrlOswxyHoDbhJfmPOPkLZaI0EujtwMjSDLIJPMMXZvDUEuZ7FFoh/WscgnvjI3MTkQ9y9uGvBE1ukfc4v5qpRVx7z15i5MM7CfAHPzmMOXQImOA1FWd8c48e0qRatURULljE5inSJSzcc/5n8nTfFclejC7ubtTB/KXQ3icEBDr/9LA53aaltaClMnStQP+c3hZXuFD9iw4Jg+Zjc/KXZ3qo561AS6elMUAoymtJYzj4JcFYy1CjKrYcw4puQ91I8h6Wa6+AtIzOz6feldaiO9zXue3i0V9NqtuSLpgvyOLnFGNlrh5WG7Zk/cIoI8lzrBRvpu9DCNVWnCmKJpwPZEneT8zHj+chbFKirrSvtH7YDKcKc/nXshIXLTJhgERVjf5qKq9VR33p3bRMRgNjHeXRGtZvTd3p6n1oJEBvLqclnzJtfxF11IN5aslGXhusjfauYNYVMNUeNcCCBTKYutFeJmj+GALfQgjl6aGXBeIt3nUKYrxMi1Wn16bJO/jCqXcrQaSEPF+BqA1KH0bFaNhdJRhmQK2E8BQQ2OHe0qTuBA+9UUmAKJOL6u5m4ylsLQWuFBsJpWtEsiuLFccDN7lsLP6yUalPeQ9DO+sAo7yw4AeSLEId9abqZRGN5jinNFtbzNxlkrFAi1kDNzVk9bXcqLnVPmVDN+Umjw0leYhL/1YtLMcAmDSpmaaYvW7Ewh5niAraR+kwzccK2KOGWZWZHE4nKVOdjZpESMiDkbP8EcVVf2zKGCzBFUE3kWS2Wgkkd86yx3mUOOJxkIrrR8EkjwgN5qDRpbsHLRDhjAYo5CZrlg+hCEE2Kcgc/gAeabS+jzLv2TPLUqdeaVH3jhuWcEjZNhx2r1I+THNgMMSyJhqfRjmR+fYTfop0bjlYcvY3vi8phHdrF5KDwhBfwoXV9Jio3AFnOJY5fg/0l0pI+5HpYLHlH7z8Psjm8wrc/Vc35rMUvJ/Y4x5FB7OWz9y0t6TVqvaZBWg6GeclhnNpFpGDpfAvMHkZmoE2inu5tCzqsYN4TyVeKkRSCcaFvMs8fcgavCCrDzBiveO/rqjv7yCP78AnzbRUWxNQriTyaD5hMPoqMlCSJ+1uVBAn4B2ePehNK6sg9xIyBqr7iyxbomTXN/fGuuqMevSA8WO0g8F+nedDqZ49TgL8rppu6/cd0DsH0oLpuabr7yr4CJ0PtbEYiNgEj4BftBndyBTV2smDcGl3+PgkVzpFDtHI5ZqHEE8d5XSfog7LByU8A/y8Gk+exrKugjODi4dAEfewBMTiCkYgX0YdVuB0dtCKVeV51mIPoI1Tt4fPL8nqRK2yDOECPt8lMY2y2Zi1Y69XjF9RjolgQMz3dHiVm0MhPcALeBqBhTHG4xynpQ2J5HzawlIad7Noi8dJPGUd1hseq8tdxL47DtAuxio9A1pB1orzAx8COUe74c+Yng3eR7bWjHluX5vTawG0WKOaZPnZGEXSadW5tzmteLEqi3tlrtvaJ82VYB3CWXPZPeu71rsSXLvJPDqAHbbDKpwlg9JAFBn8JXBvCu8IQ23TUkU+ScACREPA2kDsIO5gXaJFNBbR9/3kCXzRDl+DjSBpy83ksExC5dW3oRmqkLWTUXQKI2t+rJ69pY1les5w4VbhLFuIt6dRofuEx1ykDujc/pn5+ZyyWRY+m4cvFORu9HmpIo7g/dXIXPd1jcXZbqUNhqalVPW8TGU+x/IRZbpbth9MO1cVbfZ+uNw7m1p7djB5ygvrPYYNLw0nuNyEQ1yzaoyeUE2qTR33Iqa2gnI9+26+Y3LFzLficaZ3AFROphBmdDKpITRE8jwdMx9sbWehZZxjY3pXqHjiN/asyMF1n01yh+r8hxJcb5jZwn5G5vntGUrhgY63sz/AYDH8PP3Jq71eCKsvc4t4wXB5aXtX/ETAOB39cVqSRkNvmrRXg/olbbf8maLvPHVMSbVRXLijU96Z4qFiA74k5vcmMh2hXmQibepi3KQz7pKMr5RmQey/BRr4DA5n82q9Cq9Ufp1Dp1jxnALqvdQOg8lnsbryvMz1vW9pnQAOnqgawaVwQnL/fUq0eLHRJ+NDJIu4TAsE5xpaOrJLMrgrDiuONH3Dgk9fYnZL4sh8H7ZkS8xaQkXVi3eTFm2p/CiZ91fZPwr3vtW1tlnopNldpMyX8Oq293npnxnU5ApL3a5WOcE2GCWiJvyMVsKVSXNPn9mX+89TmQxcuYhWG31l8jiNqPVwKeCkAcY6V3utAlqG0fNdyq74W+M24Pwa9g8u62OYGJJ0K8ILsVB38nGavJC5jVmXH4i34zpEdbu+wP5uDJDjtWviADbrPA4aY+XP+4WAmS+edYDDPHafYtzVD8PX4yt2gAclINhRCyDksfeydRKKPWS16friLeMUJvzWIBGy2mBp7qu6V0/y9EQpf0GF8w/aXtObhxD0pEOxqbOCp0aOne9EU3euX6Fo88MM8qR9dYVV9lx39aZ1CP9l1W7ax+Mv4QhcEAr1qrWlnDNj1Ishz24O1VZghffzVil6jxmGVjKxPP6O/JYqapWt1EOfU8GJiPPGPM8kgILV/hiM5mfjvke4lh/38QA9q8o/H2pZorhkXJUM6pK+LekPj9Q5cPSbJuehcn1uixP5GAJegcXzHkoX4NkV6hQIzfW5yS3BCOiSpiSDGlHX8suqTEPAeCd0V+uwPMGfnkF+ic5H7uQnP1sUVnwkgHJ0/ViRZ73s84sQJwJMt9LUl6f+z+OYQTqoQ7k66YfCvTvMZWNQ0UcC012V/mFlXs4B9iGMYkLeY/9xfDyPRVniUqlSD9ooCmb/ygbkLdzNyo0S8VBJcRsoYwttqOFZraTNoJ4weadctP+u/Jt6J+2YxaSefyUCUimp5q/yLzOEQaiRLYrIVBhTPLeGYLHCkxlS0ob7pVCfMEDat4DSTkRznfMWlI6QLwkqYli6Pcp59D+rbpvZMjeIoY4Bvd6dIJQ9OdnFHMKEd4ow9rWQOo7pVdr3mn9GPqZd1L2pSLRg+lkA+IwGPInCZRtsVk4dBuQhV7vDG7mZRbVQrPbc3YlevbGZ0wM2MdPYZVocGgNoE3wpskntQbQBdQaqF3SGm5y97kJ3U2VQapMLEp4IDpaDJmCHrh4lMDDgCjSu4Zy5+7KlEZPQCP06xV8JYCv4r2vwp8oz20+BA4MBu+70Cc1AmIitLajN7nDEcyiDDUjCKN7ACQYnh0kNoCuSkI0FG9fMZQsHAaB8BXDQ9ZxddIwbyua76cPWlaVKKfpLeielmz097HiY6HiFTe8mZ5/hNXwURULvbTnZw4v89yXBtDWQI2wbQTaZHNggRsC9RVfGLI53QHeO3jv6DuD9+QPZXPHQJykZXqq/bEOZ9cwo6t215UpqfO87TrAliwIVhdfvjllXnBvfq4/y3ejEat1lZo6mtf0zsFXXtY6rckQRWTuyGQWEuO9BhJPaUaEp1SXNJn6DewTqfOPkEMCQZJcwhGlgGA0lAeDtcVgy0+Tdw7gsXwxyETI61JzEGB3Tn4G42cDz0kLnGoSb3PGn9g1VDtjB0uodqvpqGuPpCwzBGP5AmldseNNETVkfDeV5At5Ic929hQ6qAAeicRkb5UVhB8k+YB6uv4l+LLjOaDKTU64bZ2x9+lZuVTPIeE9dvJURjZUSZF3WrTw1Qke5GVCjhaR2z+Hlq91TmOZc0wk1JTnoRaoPP0o2Z2SZ++9/vGd/3+HqcW0jvh2525Vp4eqt8KRxzTkuVrQCooVERTwYM+v+OV7NzNmsNZ4Pb4I2J1w4sRD5NE0zsQzNbkLfcjzrB7nL2oZ92pRIqxXqS9PmD3TL6zbbN0bNd1rJ+kgbynig8wnNKAr0BDl+WQsZjTLP5VukeTcqBp92XMr29G9FYuMZCJTi5blTnVqKYKL/G8h9vNaE6qnXp3c014v+dOTlLZw6VFKLgMg85ZHU8MA3V+hqxLdWmvT9kSUzgLH1gJjzX7SBtBVwefHIBR/BkfmuEQgz1/Q9cy3ufRjQUAPJn9B95jRmdBJFKUt095Ez+V39r7nuX5K7wBfs4XqU6ZhIVdUyhzzV8YyfGW72sacOFKVpN8jspQ5XSTRuQGUt8TGq3xe7kzDcOaUBc0o4zcEkuGwyEGmRDfv7VLt0kEhvrvSfbrTrfZXMV5/NF+fTflnhyrIWfbCeWplTenaoJhrG55LND3xLAW8QaLgUQHMOLbw0A+JARkJ5DmxRv+C5stxJAZ5NdMzsNdRQ1iyGyndTDfnP8bDSqfdw5OT4gSBq6W+BxRAnP5fvV1F8xlLrKSk93PEv1H6Pwz8gwaUXhHo7z3F2lyvg8DTY9nsi3TsbeloLX/E2dGXSkailcmXeagCmdNmj9rEBzKz8UhSL3S9e4O7nm02OVd1+jfOY9ZVUPI8MFIKFW7a0KTx+a7lNHJoa4Tt0zPQGdc2rhvtayLPSwDlgT2QvvjMz4e4H19/4h8ljXidsnxkT34o0P+CaZD96/NT9NHF/wGb6PP01vpHgVhHdMAEqhD4wLJJZuB5M+6bEWOaO+D35xLgFyF1QjUvVyqcN3xEYNY7xTTMbYTsm4k/TZs2hUePr9GxZA2aBPCJ25c9pf3Q+deQ1yLwK6O6xWyPFOGrPLfKFAXnG0jerwqs/bd4RgC1fwLU7sJA34RMkzFsyMcx5cOovBjzmNx4wTyVrcrAVzlfSNsytlbn3hd/PO/2AzuPDxWkRiSzRAdGg+OaTnhLrEp0FTpUyeu4TkM1I4koeH/Ur+E3bbGudZMtSnNRmKNtoPKninSS+wI7xSaVSTfpwRmBTAAAIABJREFULb4nYlLxQ79T9rrMgjwYfixtdIUY5ieH1tAaAVe5R1i8yeu6JxdIWQ/eYmPrFxbSBtCG3hikUY/aBqA30LZ5/+1wgNQDp+1yKsOvjLYxmDc1GjJ6AiQ3gkTPTvC0nNw9mIwmqne+DMYrvnno/VhDUudfNo2K9DTkUKLCNyW0EWjbcHkitK3p7yaoZfivERm4A30XHOlXCXFFpIGs2Q6Qu/K6n+DUbjQKs7Xua+qPYZ2hrj1bOkepLMEvPLfWj0y/LtpmHmbuho8zvxyI4ofT9qjP/if9n4z5+Bg0ZKa9t75wKMmforR/MgivSF7vceIXvz2vPVYaGMi16PjEHG4kHn6dCjYA7C7cNXfJXjcWJvQzOq59x5V3pe42vFGmUNrFi3th+zXm2MoVxe75uE4yHpRNeR8ollGRTBAYu8nwMKmZN4xoPy2DVXJDNpMXDJdSDcb3zFPBfnuHDcO1SjLcm/vxGI1g1JrvSaqYK+tvlSuTtbX8fNYuabkVlth9zuOd0VE2weZgLzmVWXTGFI73p8f3CSYevIW0hyfSArbJoCxCNgtU/J5pIIXcXlGauLeY9bPDeGzTZZK8jQsQLSz0ot+WI89NKUpqqBsvPvfdx/JEDczAbrQsdfzJjANQ5Sz/8OYWOGTZ6rL3PndTkJvyBbmflo+mMbtRh8nWCUObQ68+h9YjPK3FG0byQG/D/JjC2WiXHs6CNX6FysksEZucLxJpoB5VnuvKNS6yg8taztTQZPeOeZ0wMh8K+d/6arXEyOUsopMZGuXJMAM6EZjIFYsCw9a6e57b2bFv36A8LQVuiPCkyvFcNqMoNOH0jVQRoT5bGPz7ItRNtcb3K91oCPzyQGAZWdnWdFTHdm/iquuFXHD5tJXA68xzIm3fYJXANdmUUiw/c4owRarjSGmOsDyxT4/GnvHhj/yApqcW1ntUns8KdOnpKlDjuVxXnwf3bmhm7cENXZHU7jMPUx6qAFWYdY3SEBIrEraQ3xdvURoMP+5nacH/chHXx6+LnNdfaLD8v1KUP857byf2v1Ciu5Gi5jD8jELsTDrPO+cKlw0NL/L1Dz/Sl0+Nlw5K/3HJjUsW1C7LTj9Q6ysmowmJeSXeZXSYkGVFOF2IKDvkhnxsPL2prNi0rMvIwyRnWmJ8FqR0mfUcmOqZDuDvses5NhjbtuH5+Rn7lXG9FRl3AYo3b2C+5/QQrf62i+9vrkBfSd13pDErDV9OZOh402PhTrmp/pF4BErTtuIJpSECQITelAAQPISq3UPKjZFjYrgMks2Cm23yjEmspea3XUu9lH6HNGYY4ZIPSWMD48KuSbhYrcOTxrOMnzZW+XXeKNWy2gOL9QRS77XoCyyMrc85A9R9bsnnQLuRcYOU8CavhfplMY7p/arjKFPi4dT4QC5ICvpSf34+KchrG76tnxTnR7sCefewQK9eaiUc96f/Fx5ae9nKVMlJRlq8Hsaka3Kqzja9BRYjHeD0S+edbI7mvq42W1OuMxBOhiZHO5QHUsLncihCqDulumsCQOoFBvhxTN9BvevnLp9Ebmlo9y8yMYh2EL+i8yt6fwX2qyhRuaeNWJNtek9jdYFMaUyelrTpI89uXit6CEXiycHJzdbWdUP2YFBBTaW37Lm1o6M3X1iwiwbZvrtQp33UuwnFfbfL/WIbwL0BlwZAFd6qLPfhGh/pdo+avKDd+A3UMa+jb9AzBL2HlwBOVxjTJmPoFwaY5I67DuCygZ4vaHofet938NUMIXYfnnuom0V6RiHrmtF0I2P2H6XPQkISjTFazledU11Vly3B2OY+4f8R+i8P9tJddmnpeE5/qW07P9fA1RTrV9Ce6zgX7UV6ZJ3S8ufIKhyuxZCJ5WrxzNOg+E5IBgkewx39Z8VR80BP9TPJfaZ+3UkXuEhYREJnWzM/eaO0s89nlZ+sjxT9p5+AnzQw8++95slF8hf+GWi/V7jTmDdXccAjVnD98DTSdx3jYczPROOT+Mglm4ZQLTiusiqTRLzYrrBIG0wNnYX+iIM/GwV3EtrNwxcQ77q+g2gDWseVCU+8wT3NVVF8URn3xeQiaIB4biBsGklmA/CEOK1kEG+yzqH0WlXVA1Me4JNx3J5Vj0l7TokuVAM7Uvrak5I4zAKY7EA4PK4+W6j2vsOs2UnfZdnvLAV9ib7kAA0Vv88q4/m1Ed9pnaUqS0cIwCtAYT8KAL/hc1whHsTD0czgksUFlxFcExAv2Xiw9cH+VEnTwWhdPY6I1F5DCv+JXXi2KW4ILl3GkXnTSC3Ca7vGISaScK2d4pDf5wxCCcXoJ/q2cSiLCAYXayfRq+iiA5aJkrySDL6YHJZ5qltas9krriZThk0van4WeWakMQ21bfJ+iyzmc8gaorr0qa6wDIOxOwxgI6P/41jO+e+a5ioucHkytWn/F+Mcb2GgHZR+U83ldRaBJhlflw5kY77wXfUzQjK465yQGRfV6GVSg3hDW143Q1J+vjE8uhOr5zcnHk86Lod4mjSLPkQE7JxxP2A2J8nXEGuZUPFi5FEj9TXlJevasfUkMKJaMnl6mlwuRCEUvlJEIuRUZb6qw3Q/TtCommx3oKuimRh2x3lSr8PD7qM5/RNZxuaFQdzRuKFR1+MWwkYbNtrEL5wa8jUlNtL8GTdFZz/ToEAGQ3b5KWE2U6HFBpXAbgLThriqIMpB554pj5lA2EobHQC1LsrkxmjM4CRiS9OsGCwetBUdgj4SoZhjVNMOn2hv2zB7nTK/Hvhd2v/atx2CFxZkKegdpXqq0ps3NURgW+tJro+laqODHfKPjh6zKn0ek683M+JgayeiBxDFEQjpO7LhG//TScnXxhmcm8tRNY/tV7KSIpEz7Uv03PvHeqsYwhOZ66YuxkYxbm+FlH5xluvGvwojGaaYQzCHfGbyWueOHbLnIAtbb8ADg1vzsXS+giFh3jvZ3Oi6I6B3VlvxRV/IlO3xrhqTVI/zAZwFyK6s0fImR8k2SqkOB+ScNxDEcN7/acg+2zpkT3RFFHPeIaUnbnTvMAQyYxUakOnTfDrlMkiJKsZuvIJSWgZMBa7hxV6A40fXY1vJKGBaSkYIzCPeOhbv5y2/nZsYspdZmqony7/uwEniw+zlMc3vTIm44iBRJtV/aDSz4usnKYMvw2XV4WLps+jjW9NAT1Ze5JmvzSkdVnRboXkcI2zHtDBOOXO0ujcts9LwXpW4vid8pP7Kh96UxqK32l++Zpf5rE6R9Sz6F5es6EIvrqmcX5fJIlOhE/hK2LHjRQ2m6UK4PD+h/dKw9U+gfsHLH59x/eNVtuSdNSJQGNjJJqc5FTKJszflMRZ9pMvV5iZhCaFm1RExqDM+dcL/6Bs+7w37TrjukOOLXcYlDiRsKCh875WB3vW6Xk6BEingsjQarMCev7HjT0m2hH0pj8SGh+qTUDE1NhMqk6t8NVFb9wOAh65xwfQMT1P5VVdulL4n/Y0V6FSh9y66TfXDNwBH08NwYWaqx3Y36c8lJHvW4Bv8kOpdWS78n2T311o9zfKVQAljVRBQwoDWVQG8YGqPWAWPyQhIeXCUEagDtH6qB+cg4DAM7jTQjlGwudX/3HZimrC+j+VT35hDGTTgAhshdytrExjZMkKYLnlIXD+IJei9UA8mn77YHD+S8iFHMONcfyLWhkcLmaLIU5b9iL4v0xsWZyNg+wm4/hblm2HDqr5j2BzB7Xx9GyjS2puyKyBcKTpmSvdQ2ZuBEdwKs3Uc+uUoWd/PhMM7kis+EIJ6plWrfiQaRT1B10Imaih26h2kn6AdXQOy7bADtQ7gFeivwP4qytr9qt3SQzQ0CZebFeim9ztCD1PwcuqqHba1poZLDZx8F8zS0bxdHKymdGdTvqsFY2vodmru9I8RF0BH+GNS72/SDZxsh2WDzxcNFW/e9B3A3us6JhLXcl2/jSPKdbc12sxifI+mG4QXtU2V9BLSni3WkDnEg9BYQ+P1Dvr8ik4v6K9cBTKrd+cFSsShrSn2zWuhALScBuU0TFhiJ35NQFl77xGprGKpL/RPFPAGlZ4Lu+/+lGx8zhdQ6vSHlPs8vn+gr2MawqwL+PSwyi60tHetAU8X4GnzubEw/7CrCzYx6ssyiDsfUMcVr0ADNtrc2KRzE4/09ksK0EGyhWHSdW9blxEu2gaZZ9MnAH8APxuOAJ8u/+V49tQ+AQCurPc6E+FVl1r/rIfIRRYa4BcnPjMcgaQJ4ArTo1SqO6j7LjRNGSZv5jHLgP9T3dEPZlP2WuQKNYgBoROBjZ75ylWMJwDoYBYFJnbgGRehYQDkOH2TOc1iFkEIE5lhUgd3PbDX02FqDPBFs3cQNumX+Un6RaxGbLb0W/pV00rOO0is5Vlk089gfGIKT8XSSnhYvQJg7qqI6p7DT0JdeqDS09yuL9NhCdghtXcAOSOVvCu66PjS0u+l3B94Y56U1f8+ygj5HhHvAMalrzJnNGYYPRDyVOoBxUpkBSAyt8sicD4a2l+pmFgMH3Y9ZCZISGK7q14iwMdBstDsHp6MhhuoZNUVkau5GOaDAD/AyQoTpCkxJQ8VeB+FnsTc9vAudT4/qd1LylD/zWmmCC7X5HzZa1jE3vo+t9VaSwfaWv5wXgfl+GJ4puS4vbYZDvxloul/f1P2TDZ3qWaVtYStqvymB4MrqmPKSkFPMVhqbMpxY45Joam4YqrdZspwMngb8w0VSgn9n5THNjyGGS/JAeWoCDDZ5ZV3HAGt4JzC6FXLPenG7FXpn+luGMAlzYMpfb2/FGvCemKw9Xdp7bhZnxoYcA/4WPQoM1Bo2pbfc66lmSBzgCYySxqdGbBkdbT9FqWq1HVR4wbxOidsbUPDBZsaPNiE+ZpR+V9Qp6unbsAxREUu0EBaa3mxWM8igHszihcyFW0g1nmHkVvzrjK+xGKoi9h3JdWaKs+1m12ucGmsCmkOXwM7A7FQ86I0t3votfHEC1fEYoWRDDmALvmXi+zghykhFEcEV9TIwduN/KybQ+NYZjQ3dtpwW+R8nTEWw6s97WfIFMxEtYt5HKp8tjXewc4biUSh25Q2czq/IqXPll1EDqrih89y1z56QZBGUbCsMp4UjSE9H1n0DnfASyDXDqd5DlJd6wN1ke+htCztCB1OVicamslVid8YnmYvcd1heNsUgArxgoFdr2JMzuWKa9bdoPEx51RGQU5XgbqLSdFvKhC83zbfcRKgxocqg8i6tTr7QMvJYcboYI49nY/X4KfR48KLnrR7TpGWyvNxvjn9H00Mi1DhKQPiOCO0M5ehdlevJ+OOUivFOwZEHs/1JPjKnOl7jlmp4KdSVpaCwdKgbZhQB1Zo8pdIacqWrwcYWQrDmJO+vaXbBGA3Y5EwgnRcg8Iu9SdoDgo+vSetSL11cJaNZ6ZyqN/m8fvc35YctW5ehTDtrXhuZy6U3ge+6gqXTzreA0xt3gvze/Q/jw53pBBK8x2vbXhlHZLjbQTZ7NhJjPvl3BOqj1FcU01z7x1920EXwvYkCvTn52c0PIP6BR2veP0sp8qtA2ROSNDdXKsHxawOV9w2eXSV84ANhK01XDbJvocACiLGxoyfOuGfveGPTvhN/QyuV/aInR3AbnydAOwdbQ/K6or1SciBAcX50bGRytFzG2Zici6P5eJcDxxG5Xnuob+L902fhyEaOZ+b1x6n9g/kwTyWA1w7+vlo+hsr0N+RVnzygWSynct4QKIS9rAi2boTSFzCRCoSAtJUgWLm5+VwaGjGBnQHbXx3SncH/SXSSCt8w7YA5oLZxhaXlfaI8hAgV6LkO8wO+3D24h5+fJK0F/qDhxe8HNdUx9ee8qdfgJd/B65dAPQreN+Bz799SHihs7sZa8aD57ahLQwnb0YW1t02l579oHLfwXyNRf1gcsvds5S2lnbgx4zWO7ipB7NuugUWcghEJijYDn201sibvaMDZl1u3raRVkSVvQNohNbF41qDaqqTZlMvFugY1hbMhcIrSNyo1bvmpuGzsQ0SGDtk+6+HPOGRr/zgeoWEqgU8FH6xoJWNo6vGOI3ZBTEgmULKn5wogEBy1zWxjn1Tz2qgocvBRYPcCb/pyN0xVPvQWmnLuaHJwEleKjLcSkjk1Oe8vFQnCoIIugAA9YbfwpPmQ5LjUaURcggbg+uGo47LOmeTCJDxeNh9ThuisTM8PLMfQyMMPzgpiEgkmxJVhovBCMSLfyO4QUiOgEMA/8nS1V+spvifuTuORajbX0ShtXXwzrLZcBwhHcYgQI9j8oVhE/8zIgZ9FK0KpwXY7DRxIzHuWMpqd+LLLXFuVU1/BBdXG6j0c2z7bNPhMloeY4Jn4vvyRA675RAyHaADFvwoRRQx3DKy6kfxuhFtPi9MhOeiGhRa+mp8kVFn0A6Kl4NnbzF+T9z1GH5TjuGh7A5BAD6D8ZMidtBTxp8m44H1vnPr1Sjf5QNzvfPADDxKJ66e/7Szd6UBSQp+jPuRtM4KHRm/ze9WrU690K4crfKxZ7XtLFsErgkvJ1cARfdV7eRRSpLnupYc+2Hcl+y9HTIvYD/ObajOWeuuIzgmE0E3TaEKoCo7Sz855Ik7E02/+OR95s80rMX13JXvxucSfMfE5bDk0TSu0LmeR/ckIzavyKp55431u7dln99F3bXG+GVUNpNlnto3xeaIEZwa5FnALK3Zfe6seV1s4lCilWWPmKLjmZr5dFkX/rqlp9IfMVKp4k11UJgPicMoQXlCggpFJngYT+NEbpwvPbRI/EyEnYGsg2loqgB208c0Ok6zQ/7syqocVgW6GL6IQnZDA3EYCmXD69FMMAPtfpgfvzc6KCPRfZQw7USpVlIXQ8IKGWAGCkIWi8vuGBdP/g0iD2wcc8XMThNsTlrp40zn8jmqyYjWDSXljst9VCItWb9iXx5L+jDledMoOb4qWeFD7M94wIJptXLwEXtnctTunVL6mMWu0tcC7CRfpXENZJwy3Bhz3vH5eFaXhpENmSYH3ATKoDYrivl4equEE+XNKNx4MPx4lBzjY+ijM0HZyyGDMAyiZE0ZzlGhpWNvjnl+TU6rCBPNO8rvCnPtJPk5AmnEmOhbjubx4Sktv6nnedml7N7/8eWi7PrdYwLQKud7ce1vmfbbWf7qiYu8hceFzcda+9jqzujAQxuKA4rHZ685+M7UVObh9j7JRs7TGX6mbucOtt8QAQzUGJfLhu1pw+X5CZefnsH7BfwqnuS4NPAuZ1BZ2qx9Uf6hMqbtMa0fJkPv2n5nhGMMM7gzeN/Rr1fs1115EpwZ5Os1C89+U7pRkFfwfrSJswrm/cpfIf1QoL8pfZAQmGX0VZX6Yo2W49FE+qOwpBYletgme2OjsDu2f9ipj0h/tWV0R7LNzbSDs2TWzrmAbr5vKGrPPE0+JHnfFy/yOz7Ilkt8DU36rwcwtv793y/fhdLe2J3ym2EW7iWP/hihdRN637vEb8rzu5ToEBSzO6xYwq013sXzgZoq+8Tb1A5dyEIGZyUqhJIG6M+ZveS3Kep1p8wE5h3c1fOiM7rYG0q4N6W7klXFr4Ox5gNPgun9B4RpDPOgiYLmWTTU2+XqAtrUSrwRzINAPLxFSQXa5XfyvgxQHexK7ZGb6XdRqKvyoOnBIIMADXyyAZJngyjIN4KHgm7dpEypvMVhXPaqKcOkrIJI4ZxGAbAcBtF9xHDf1+Me67yZ1gcsxcvRWDUReNdQ5kTwMBmmeWxDo/nUKjdyo5Ok68fKZ/DUI5w8J0h9tQmVO83bRqBG6BfxtvVDa7JhmDEA656C06ZSm2rRccZPgB4gy0ElgTftr1ncekFHBjm0tMdbcvs2uHWjM7/4xutzv6bN1jVVSV7cH1o9fpqur6724wZSfLSoc1jfg3i77LpNNg+fKWPyTJ1jAMgajLCSptBB8tYAnhCKc1/L7IErhtUjm1Lz7mMAz9TwUnCg4TFAZ1h1zLA7O5U7ylPzfx5GoitAwt3jxl6T8pc7xnVPd++qZP76UamyKUr/39P1eztkjKNSt0rxsMD9Xp4xlF7mLdOiR/OWKSZCcD6eG+kHBlgsKjrelNeMs0f/WClP4sE8liPYCkBG9eDkea78uoaPX3+O/ab0/aP3BWsniC+A2Gftz0+rLOBP4//8jNI3wUl7GD7ApY4DkW2ipwDWRGMGmpxFmjFG5t/zniWumLoXzokWEvCk3IIJEorT+2ASSsYxfUIig5tXNoFcziqhyV3sChVZ0xesQgvDDGEN5lLXjg6mJldDwO4qNy9jM3QPuJoftveRRU65bKow1zetlQDwSWE80kfd0xDAPMIAmA+bNZQ8mfdfhiU5DuU2SMsZbKwHYWDgNSguZs5vnstUuqJioMxCk1D4Ef9FyjRTLDqBTPQTQ6LFs/TOKbDKIO5UiqBkoUgPeUSGdcxrzaiVEk7JE8UTDy+t8OGQd40D5TVuz3evJedL8r2zoDR/ZdElBuUiG+WCCTb6hevPebDD89VyLs8EjpyaLn3l3OcPSmx8/nZyI/a0b5LtTSpvtIGaREtjiYLVjObpGmKtcLECNdoYO81Q7usNxlqsOB6LnBbrOI+jzvWpd+kKCJw+MaAKxZr/WC48dAOJ9+XzH+MrMCjfObf6/9q8aP38VoVGLr+epPAXTP8G8CvLPei/fevOfJtkHrTy4xwPx7NBvqPMqsUPxdqjs9lDh61MT9/Tj8T/nDYu5FSTYY7A1IdFbOSTxNGn0YZtu+DyfMHl0zMuPz/j+lmii/CFREjZKCIgssl8djzE0S/KtDN3iNXZSuWEBj/qtM/ed+yvV3DfXS6wIY+ymw0j5MKzxGNXTrN+UcJ/Tx/+Q9MPBfq3SnT0I3YJLm/F6odx+SUu6obQLKv9/nPfaGq9WVpy5UJemo+IUvfkzTufs7w0ZPnOxJhM0LKXS94hZOpmArjnz0wVw8aHXcD1vdwg5POH70TuTEdTfA+Tv5XlSyjUiYA2kLan/wfgDvz+b3x1vBqFizxkned7p5anL4c5UDaOb03vkoUmJI+Di3yAsRK4yA4aWLypSUK2M+3g3cLo6aFLujsXAFjvSOe+Q+4Gl78wDkyhDqkPOMiA3Y+a6VCX8NEe8lxuKwc0ZHBjFqU6APSLnhIFPWV3tR3G2FWANl0wAS1fokosJy0tTYXEvMnbcNiBIW1xfwy1Bto7+NKl301CKPPexQChafhl7sDeo28dqOG6M62zPAwXJ+2rhdi2/pgSldRxfSNRnJvY0VWR37dQWtphha6LHCa3+rcOeO0HmVTn0z0La/YvI8xZpZTuro0NUmmSKnoB5GHPcdlkHrdNvLkR3pAifMuAYg+R1o9J3m48UsV6AkVIN/sNSiBK6xQcivwNwNZUeS53mreNwI31jmGtsMHDV0soR/33p/b75xFmP2v/tB3ofekAwATWiBMWkn15wJLXqp0M2bNm+JAzZDlnrODOdAFw1boui+K2hvMFnvda5o9dPd0I3beduqtNOvntz7MQabtBLaCHgKTebH6Ild8DEmKSMtZ29WDvyjLID/p9hlw8kjpN2cD5kxo8yoYtjgLE/CftzkBY/PY5yOtG/ufl5ATwfOhgD8NWvUBD/rae9ljtUEuNSCtULb/b6uEd6QjJMuxWibxNWW40vR1rc4w1MpOeFXbjvemo5mMJdin9Q00zfscOEEloaIgX60uic3XF1AtBavMM6J2pZPjoKCWdNzzOVNoNSOyfkjbji4a1xa5Lv88b8kqrVh7ntc+ECYCHiRbf4kk2OARWc1v7svoePDB+3du7nM7k2DhoOqqZDuowWnZYZGjIPnSe6b5DepNXVk4e4eM7wNbYYe5ewruxflpYDAxUqLw/geZyS2YiRTS9NkwxozloV0u7vvBSmQP2Va+4JPcmliK6uoZqbH2FTEOhwCUzrpWc8b2pjGqKXMTaJMT6dVw3iDJ2CmlUVNzai3QQSmSK8k28l1Nfw+N89q82+pFh4DmJA4ZOYO1Lriue1fVhNJvSXIwUROtJClmjXIVGc3oGM0KweQBM2UnK4+0qC6eBEOM48eDO46wIETN3ts4tc+Rx8V/vtnZF5sTuKD4NhzVPZ8i1Wtx1fLaio4LYq0I5vbQnEa/nBcWcAwxx+SiyRmIQ8rX7LPMovlh2lcPyzNcMw8P8rDDnIe+EKjpeb4S9aAGpDW9Bbs8ki5z3UWnmrD4e9gNmdGPY2wgAd+xMCRwJ+0k263aE4SIBCBa1wX8LcS5HHWIwqsR0wI28kqa5O0iurqeIIGIGLq5oTyRA5JmQP8IDPQEJgBuml1k4+z1COvKQ/hW8TmTM93WcjEgKieOCS/GVC84ylEcNcI3nWmMyVjiQCr7TNGKFAXLMNizqW4h0NoVvSRuqNfRHLeCvmOqx4ALmhwUX3yd6q+vcdDpTppu9y5WdNPaWtFgBIw87+p2FsjHPKLeedXMyJqp0I9Y9D8OOc2Ea5sHoglTNdokFOjF2MK7EuDYGb0ge6HBnCWJy2aUDzsBpa0HrpzEp7e9q0GeKfVbv85crXv/8jNeXV6mVoGdu4iwmJHGYaweFnrAUFDiAm70b+nZz3Y8oNRJh79PHLXCexvCx9X9k+qFAfyTlHW3ZRbyhqvKNVi+izWQdS3a4uMrvuz5Kgl6EcTfaI2sgEaQsGPvfLNx5GyVlqXv1254tHteKx8HcKvBt0mp4JgmOG5ElaCYJMOVnFBzLScy139n5N8Jz5NUPErMlyG6lwTr1odQa0K/fB/rUU6fFb8TcA9O7wwO6W2NjiG6KIMLs1/K6H/vguzYT5NPG8cRS0fY5bOqE3sBtVx0tgXf1BdghymF0+HEv7/C7eXmH3+GcNmxFAZQOKeS3bhyLnEwAN734tIvSV3tHECUfsdxRKZ6+lGiATfJ6vBlMjRlbCTubdnmJvjAjX4KW+BHBoo/IoWoXutEZvHXw3sDU0a9X2dISwgnT1zlDpMgDgdzNI6V+u/ocekF1vsXOAAAgAElEQVQ5NUJr4UndCdLWJv4nZIZdu3gK897Uy1hDqbPiR1dB16fiiJLYvOlBAvSQzOE+CGTvspBdJBfo045fv9DYXuavuT8WMWbb5O9yAT01tJY1sCJc+gGQo0biGWzh+dUwpHM6qUtMSfGKFF9sQ2FPiyygynNsDXRpoMuG1gh0AQgdelFUCP8QpPI6pxNLAPQz3CBQ+y/4qBbCANDFO9+W3Si7+xkyp6og9MEUCvyacUbH31JlFzMxTgq68f55+ExG2zhJR+iV5YN70828Z9zV5voky2mi4Q8og0inh0IuZXPaIIeLTfkaufzKeMo1sihGLToC8+b3ftpBt81KS4pHD69LRlvGMdu3TMAnYesBOBzQwWXym0C9jFFzScYXfKVpj7I/H9yAiDCqEr5wosMf6ZnxzC8gYB3WG0hM/jvPy4LGpLfyaddBHMF05HNwWkD2dSDlMYN2SIwwYFY8zTbKsj0zPq31qPLuieaRS30ttYcDsGud07OjX9b2kUKeS32U8uft3PIudO+NPYsch6Txo3ly1JxavbWSbvUhr9DbyfGOj5TnMvfprpy0jQzBzg7nLKKHP7NcdynPF/073Fsdj7OI7TzmXVHi0UBg4Ccc+NEBXFThs1GwF07jVS7jxhwVb2SBmZewiJmUFOj5dnKCKM8Jcs8vgLR+ffTUAWylBzId/f9n70235MiRdLHP4JFJFrunR7oa/dD7P9zVUUt3pnu6qkhmOEw/bAfgHpEbl+4CTzIi3LEaDGYG2AJRqtpY7a5No+NMuGwXNNrUYz2r762arGpbKdHzb7OwbUqHOKJbef7mdRk3aWTiX0t5xnlIfUjwpLLByKWrGWMo/RokIhCrkhmmaxTYE8LeloIzlrRCSYZ4eTsmjfiesT0qqBipxrecyvggBiFiqp7x1AkX6qKIt0F4ixrtS6t0L/dJyVC/U8qTl1ISD3x6CPnBsRTjpDaNwYZYFAorkjgspSXBGt8t8lVu/GLhszZ7Lwm35PlXA0nZyOhLQ4POreJxY0L3rU0Gqvwxc7nWwYxtjKZVA9Kx3ZVzg9IiyB7m1tlXGGbzrDBHQgPj2arId+OsRMtLS0oLyxmJ51r8LaIBeBVD3pFco4/xF4ZFoBWFkdzQnwVqBVzjvdFko/Myf2nkVOf5JBjAN07jAFcrfwUE+6TbAzl8/0oI7He0/UMnhfOkPB/TwSD56HWVhSIK04367kqvBLjxG1s3N3HnrSd44J1LPmWLc8gDwDyN/CI4TkbAyqTl+FJozQ6okSNwbcC1dTnafWjAVZ1DGoA9zRqLzM1qIOJSWBHyU8e1rd4hx6rQfuwd+9MTnn7/gqt5oBNr9EZOZ30VY+QzDdrJ4gAXpOer5Ph5J/4exZF/lzV+o08/SPpDgX5vGg/BV4RUnx/SzYHpTTWQ3RhlqzJ5WVoDBAxS2/BHfk+pP7PWCz/LFJJCqspKh7vSPXlpANeKIR19Pretb5AK8R4IGVCFv0x0ym/Ly7Usp2c5tTY7TN2dDP4vhN2Kbh5trg6K583C+4dxZ2D/Nebg8mfg6T/Fkuy352/mQq20LnsaYj8zMKMbk3BA8ZsHIOffVF+tl0imUzr+76E8H5OvmbRzO7DCPhRS2UKGi1eeKa/RN5gCjEFA/wpcn8C862XlHUkLm6rn+bv3a9xBJcEua/QI4F28z/1smTbtE6VLgDOR1jHaMzthV8WfNW33qnKD4AipYIVhG0nwg3D3abE6LpsqtVnujddCjS/oTSU67jBvYTnhsrH3GLO1WDZmJFl6BzeF3w5ga+gXBqGB1cOHAbn/XPuK1kBtB1qTqAJNPON9nsx6mWX9xZ54WB8LWlmeFF79TnTnDrbEgB6+LdLlIjx721RJvaFtokAnC2tvy8aNF6xWCSkqZKaLx/beJRz93iEHwApXl01yefanESZQDSs29jBWtJF8v0go967nsHtj9NblgJqaoHQD2O4Wzm4yBODLRx2PGgz8yTYe2ZMT2DYxrOhbB19NHR88lHStsNZ7eA/roUGa/nddbcLmxNMXxHXaK0dmDyEfdf9ff/l3AMD//O1vkde80p9z3zktfkz9T3NMQ95My/L6cNqos+C/nSBNHWGI0U9Dhx3A2022wn70BJ0JDwy971XFWADgrod/Gr2iE1ojBVtDx46mNJ5awxe26zmEAD8C+AIozipe+dUQR0Ar1HP4PHo/wlXSJzz681/5q8Ake+4Qwa4ZqGSC0m/JJwYDIWso9dflvsLjAz75HZOhjP/dIW5NhwEUtKoW5/KAvMAqjSH05TersZBPMUU9q5pyG8ZjBy6uf+bzau+q8jlsmwlFaa3rrUZkyG3nAVMSFaKVqpZbp6lummqf2s3h2ynRUR/Xog4aP4c83w47KYkK61Z5WuLGC5T+HMildSwL+cPIa+ILaypSMTx+xb2KQ9Pzmkga7YwHYcQxNMqpgzfTAdxSHz6mSF+fVb7cVBa/pHMLU+48KZ+/ZIM1zwXsvdexs0ulfs+1igAAWoh/xp+yITtsbTY0pvRb4GN2XeT7LJFJZHxSV8trztY0y86D9eyEiFQRZF1mbJsYJhJtephrCuxY+/WO75k/xLcMx6BrlLzHs4lNUceTKbOTCjbhRtYvznE4jAMFN7K5RK5LAWl9a2Z0xCZbxjUpjI4domQWGLO3nOmwywfWju4DLNw0pt6scdUUhZx7zTZw+z1SLQ48SmtFHNEmwSLqDEBao8P79KXnNqOc/SJWSYD6BAwT0fI1DrP3MHmFvpWtCHZOjA+GaS+PXp1SFoYrLkBVwpqbG/a5I47eoO1HaV5n8VyMb2Jt2TpxeqDCAqEhe3UHDoZHIBk98hojYlgddcgHS3bD8S4b4tW8ktHrIJJ9oxqyxB26FOcCaczWn4AzR31Q/CH2a21saZDSzlNDLD3DIKBs1R1NEfTaYDofjzlA/bjaR7Fq2xf9PNP3YEvGxXOp6junXwD89r07cZCeVg9XK+9nSEn4WvV/iSSJf9wwhjk+Gx+xcOTPqzyvTCYfVrfmSrfGodwtTqaM5P/NaWja1/tq+GP9zMpbSRXdwQfBkKODndGvO/gK0BOjPwHXLxZpBtgvAB6bnM30jt47aO/uJGTsePdm2YjkBAuTTdjaNsK7d/DTFdfPX/D519+wE4BG2C4N/HABPcnZXTifaMGROCVHrXK6x+Mflx7dnEM++LSG717GtzKms5F31wu9ffpDgX5PSgfLNzKu860Qg+EWxOu6CX4anaqe2qCcN4QRO7HxBZvX3qj0NUUbxZoMpc/RUDMBH/MdLIRxDPadh9+lOkr5X6xBfn1aWouWDPqR5qUwXCofY7GodsGgAFEEvtRL44xZvSQd4PN9RQ1O70Qs/6yA33P9CtNXos+4bZy8EscxmSB/JICdyUf2YBQmovH10suZf1vV+dz0BniTzelXnui3K0ifIoUwrurN0EG0w+4cBwjYnyQCgXugK+WzTegUL58TmeG6Bsvc6OFVFiZ3VoUNpXOYJl7xZtpoHuEEeCh3UyD6YXoT4Yw53TEOUcZ0VkUz9M5FlRHdfRzhDErwQya/C3KzsMoE3sRHEg872p6UCbSjc4dHN/EQ7Zx+q1e/S6NpOncL+S4bbesrmh6AEklob5ZxtzDtBxHQr6yw6YEbIy0sqMLjg0ix8465dYCui5ymm0vgOIOFNA3eu8i+bcDjJkYF2yZh0i+bhHJvhi8Ukzwo0GkTs1bed/Te0duuhw67nPo1naRuAnZCaj/QIp2LwBluBFz0WgC1UaGNPGQ7A+iNDXXdepaM3zDA3HQdquLcPJEM/z/rmD6EtN/0IIuaHN76OjCCR6mNYT0GqVkQVZeV0uNsnFjy0/LnN01H9H1aB/fWc8C3s3xQ8o4eaJYGgVLXvC3ZEE0Jsc1UBaNbVFt4MqhRlFwxQSCgNxB1cDMlg6rhO0SZznIAb6EnGwF7kYsp+u4nbgt8mA7Dx+8LXp1AdZQyek2Jw4t+zD9IE2PBIPCrBldFnpuW8vmYMj1lAB8AEP43bLH10I78t5g2HHfssBkqr8nryAOd6/wVT6CkYHrSPPswr2UqnW9b/fFeRiY89oEEB3clH8RJmU6mPB+U5gh+bLQ1FOihbH+kUIU4iTL6uALVqDAlkyDWAF09HcOxz/nG8VBuOsZ41MchbzwbWnmDfYDxgqjqxoIoyrPFaz/BX8OzKnHmVUvJE2U0i+DFt/F5pQeBW/O956n21FcpO1AU1n5neKucdfse+vvmaMSEyTt8yUfGX+Skjpk9nof14ALtr85hT6VlLUso9bD3kHYjNHjqCwUlZjNQNVU0E2xPYdyEtGMxvZG3Gy4wg6ip13lVbEdP48qL82SUz4RsKUvEILY7nWQsrlwDHDYWSr3QS7JeBSQ4e9InLAtzz1BSk/F9b0Gg48ZyJDWI179GDyOJmsiqNO8KQLuQSeA/Y0faBrk0Yhmjj+ewQ8qV7YC9YFaeZ/oxap1Z65lIC6Xf9j2tvXGvycOnzwP7Y4FHR8JOEaMEJed+a5uszy0KQMgLg0ftQrQ4/D3CS5+d0m3HpxFYiUZxjDdn8+Z0OvrUudrRu2zvEbTIFclpbRFI9RBquMT2Gbwl1lmiugZiKH8vZxqZbufxGzbb2sv4NfVac/PEiqJf0hFChG+XR2zkqIAlo02UgaP2fMaFZBCAxD8yTVn1nX1cvi/I41Ic6cszIK59NTxOY6oGI+MgDUA+QZmhpjw2OMT6KQNfYe53SiOIpqvQfrD0G4B/Y+AXAn7/3p15QSr0mRfvjOEaMqY8IXwkenDQTOYVVocbX6Pid+kOB/5iyPPaxDMdOBzD6vFR3lHvNBbOcAPWi+70XQhnTrEZTsuD/7N6gEOU6U9NHUXEOQSqQKedQHsDa3h1AsSezXmIVRdOKHU88HbLnoFJzsSeduyfv+Lr5XdRml/k/A8PG9giI05jpUSLs5wygzPgMWRgPsh/8PtUhqG53KrCCZ2CB+bfP5sS/Q8F+vdKGSeLgn5BGcZHrljn9Nsy6rt0R7DRqiKsZqlJf5NvKhESz5vj85koMg30rRt/2+SMbNHPUWB7Tp1HzOEsnSnXbxwIvbhP9u5Wcf6GM+nhoVPHtg34f75VB36g9D150QpnXFhMnyvDId10kv/OlaoZXwdAV4Cb5CzClyrP+46QnEL5zTQeRY5dV4GIkpcg1RxxSKBe7n7g/QTgd4BUgU7NlZJ2WMlMcd+103L5LnfmUTGuEm/gLgpNsjsbtVOtFWG0q7xuiic5hZKHzAxuamjQIZvYrvDZGqjv4K7eIkwgPcJyr2eW+8pJQ4Qz26e23tWTvZE4PjODe0dv6SBE+y3KdIJ487OGd2+xSd8NN2wMB0LfmNIBhluF5s3Ii3naMwsNB9r2N+cD8LChPT5qaPuGtm0u0JvXvlRkEnleGSTh1YOR1+0YQS1pm86feqMrXoi9RiLQG4nosDUJ0a73nYuHPDy6TRzEkF8RU/7yAEXzjsDz5lPLDbJOP6sg/inJQMRwD3oOxZhU77GwgIsK34q65INPKU9AH94vCyzSKssRGWkn75bpYCM8tjlmywdmyyqHTWkBUCpLpdCiwVQJm2FSA6GDk5e57e42so2VvHvErt86uhrKNACtE0C7VImGXeK+o4HAXY0plMY1Ah7BeGRCZ8I/WA6GL5D7aNdjaHDvQo+oMY7v3p1k5P9FPc9/y0pio11TijacDKV5zFNph4MECUHMed5upVcLWQc4eKONI9QZeezIz58n7Qt8K3Ub/kaDxfXpTmmJKd9fkjf1odIgIO4MTSKLkzvLo4Ut+ARhHvM43oFSHshD83NXzdGx//nz4DvmrfXeqmud72z0d3dEp3YV8vZmsRc09tq0ijZhb1BemKc1lxzCWyPgtyAcm9GYk3OhkZNBAhaGFKf7Ny7f2fs1p+ksmIDP/Yqy0ok0DDLwRQec6cCWwoxbujKrt3pal8xuepUHYePO+QCgpah8rnBWedqXkNZi4cMz9Ink+iUC+aGrrO2k7M6ypdYWIqb+bhZ0irTcqBpdRdag9IcBH4CKIwDxNlTQkKE3Gr4UfjOs1OQ3n1pl//QoP14vpRaqVy15LqQSdTRd92MybYyd51GaMYD/2XqyeWTpWx3XnIKOMzgrOWwhcso5LVZafL9BH3J907OZGrly9UB0Y8vj+5aUV/lQgW6qx+1NteySdM5Tf/yMj7/zQfahuwOXnX+/hGJHybOyAQBRki/g4ePgqvBIVbhK3L2hOb8WGg1TYpsgdzYBdw2sfl8CWv5IjVQi32BwxRaVwsZjfBWOXxOfJXIaZ0Pxo2OVfUp2/888071z1a7CccNMRMbB2QDJ6/OvCPqxdmu3ynP78T53Y2jpx0yTwwdEKf0LgE88e6H/CcCv9sPKrvAvqMz5+xemC5mnx8vr+G4pePxhKkx5LN1i2Rsx5gHLboLlaE7eOX0vJea4CFeLcpyWMf8uNMEcjJoayFCO2mx5GXoWpmdiG4sDyGVD+9DEWB+M/tSxX1mvnGO0JG+FjprLOnXD6dLxxBD3DtAV/UvDtX0G/ekj2sePaA8b6PEB/fcniXjjSzTJvLBr8fJ42N+V8ZUBW4fro+l7/n3v8xemu+juD6xU/0OBfpbuVji+I1HzzV9uY3E6axtQPdURQS9vEdPCshMek0g4NhtBGQ4YyEuVsHkwlvjkXdkS/oApXN3g0qS/QyJ88ThvNnPWeDk+TMnDgi5gcmjlRuXjVWlV/fLZmth9Mxq4JcMSwHYJ79LUrdDuN5mMy7YHGWnx7uiA9TC9FPBvALPR/DkkyvXGkiq+1g1WrqOnmI59WDsEuUvbwvjaAXkK6crm+3AwTM5frE/jAjWFvNUpd6dJmPQOv7dUT9QYWWFOEKWi+rWYkh2EjgZmy4taRlwy455pk97sJEVBE6EpgcbpwI6aKMhJPIqFbAUda20D81f5JVp7ORDgrnpM8TBB2/V+aj0qdVgDqpEFmNE7u60DGsc4GsBdx9I51ixpaHyb2z1t/vqo9Uwpjd/hgYxfhckNc7yq7+QdRsF4IWPaRt8PUQ+Od3R+2+WC7fExFNGt6V+tAySroXLmBqKLfPdzVfuf1N5EEIM6gfcdaKKwtAukWSwupK1N67mQWsTCFeh+H5TiZniu25/7acX4ftEv3QxMCPS7GZUAQAeTKjdtYMYoiWONW60pigFzDjJsZRYTciudyiFD8terHdwifYz3//Mff6tFOf2N/Tiqdrmh4XX+oy7681QZM8TIwejzKMDkvBIlQmhDkmt0jZunniIJHgxrmUHUhZ6I5YRQdxbjDrm+guDROEhpAkOuoND+SD4zqhhhlpCIhzGYkmMAYl2dZ5NyTxoQUBUQHvLT+1Inx+9+H9/bAWcqOvfptbya7qvC+x/t/x8akP8/8QU6czCePVd5RyOLLH+iD4ILTLiSRCn4YopvAqp70635SkpC4mV+C8r/Rbtjq2JjORMU3ISPN38SJQW6witIZA4JLXC85EErrc/shayv6Xl4g4c6K6fVveZHkB890eMXhyLxpK6j7wCpIvmWUvYGTigzZe2LecxJ3cYbrS6U3/PUEqalXnp/xNcPcIrnn3L/M9AHz6CQZV048OGN+Zr1k1jlyIhPUGMczO3T8G3VdadHQ1p6olN9XsJ/K007X+cZrvJ9xDmR/qpSvUdPYeO2tWBPeuqnfe3OjFQ8phpynCmFMtd6TIbI6uGmhqqUpkvatZXOviU3pRxRi8BSeqlJ83m1WzkzPli789MCu+qKiVCqkvPegHJWcUunm0NZMpuHONs/3jFAyXO6fKFjb2iKA1shvULzWjIMk75WTsC+PZBz7oZL8nIXZKoKORdvFEjN58HwOCCVwZZNsE2CjAozHaAZ7GfpNnu56/3IrkYxTk0IEQH0ddR7WnNcqhCYBBijSWtzyH9IC0cRKL8f3nEysOB0qC9ZDAdmqWuWsrh8TqmQ09Hz/AToNGShWCfa6WiZfUX42GpFdoXAuj2hE+QAJwServp6G+3uQ0zjKZk35nGbkrwcE6oMEsr+4b2OxaLJkfIjychFdsprjxMIsm1vYnnF8IPI4GyZ2PszwcDPQFO+svAdKdPgrVOFlNVln9YF5XzDOvsuKdOpVToK4e5K9EwdVpUnAB03/rK0f0/AvWXKq3hBUAxfKfLHNTSrqHhDOjR+x7y4HOdDRpwz4uVTd/dB/YEcelTcmdOqDvvJGK/gGSpY1+0gYFVME5h6kj1avdGLlUDZWaNeQwkQ0IDtYUNrDY06CB1Pn6/A16sec/bYE1m77uCTiUbhMhU0zCKoXjs6nvAExva44aF9wna5YHvY8fWyLVArPRgr5cQ7nYAN8HLjqlEQ0LpH8E5K+kTQS3mXxnCcjKcuHx/kPnkzodLB2nrn9IcC/d50zwQdZRnX/hGB8JVCR5mGOrTirHgqfwQ70JSDSo7nqR6pamAIlNp4d+3nONYzQJ4Q0u+ZfO6StEaL56+pH1gzzJVifZJqX970i9IpLX3H+aMPwDXFDPr4P4D//l/v195J4luAvwmGIcNz5lSVZq9bK2+ENAV38w4vCxyrIqvxm+KaF0Nbcef8d9a58XH0Kw5qM13OjNykM/mkq97jaH9dhTg/vLOw7nba1sAW8t09a9OgSbWXpqgGITzcNVvTcprHA63bIbvCi9WiHLhIc5e06WQAfNFRqsiWlF1oJIqrXQRUIgJ1ucMcvEPuhYTXx51hRW3YIXcrb9o0vH0j7CbIdgY6u5KVAY0qoeHdywFvHAyOm5iiTJ/CbOEYJUp65vqhjCPjO/sjjZQBHXuTKBmJZ4M07P1BL2yOCEDnFA7bLW4vIFIv4U08hnnfYRHVse8avSDxekU/bgQ8IDzOt/S9JZCDYEfEJXqNKrb5FwS/6hTREDqAXwD+AvCWNjnQcIIaIYIboxOjW/u+FhROK+DYY5fpk2wUO5gBkiNkVxAf0xvw8iVpGjYpR83lsZzKl1xhcHfHtAAjrgDIZNtzxt2IVOqJ+SG9mkK8+5SGdIBaEw9gBsBi3EMgsIbJ5NY0NLx6kLWOB2zo1LAz8IFJcN/HljunuCIDQI5gcHv8Vte9d77c3hW6Zw8NICQka3J2tmOcmyCkoi/uc7whACz7sc53Zzo83FjXlMnx+JnLrHq5zL+4J3zqIgA3GaPcg1p5GD/q/0p3HM0JeCC7gKDiRSLR5XeVEOJ/P0A2iZDm0dHwxZXjo/LcFKrje9/a1fEeUbdVqmTD/O2O8xx9v6etu5MiSBzKR6jarDxbY/qtHhyMYMHCb0mPErlHklIxGCauaph/JUNHHp6l/jDWaB2Pnr/ZO6QSSlOjxrr+W6OalUVIKPd0A0mxpgYkUcJTZ/Z3nXlYcRKQJ6uGrU87BCd2NFkbCjCTR7KJif1JSOSgD8JzfDWrkowgt9OowYBZpdrcMGAhyZsatBav9QQqM3o01TWXkR2x9hEJS8D+ZckYAdKobYQLY0OwXtsUrYZCNHltK1wbGBt1MfAgQtNrO4R0Smj5BJ7ouSrIwlvLZFWjmCanG5ynQYFZAykByYQh6MKiCEwBvTM8bHwC8Px9av+OtTQtnoPVtPIiTfJpzMrAa4ph3aC6dfrH8XMhozkrtNd5fvKXLIsewcjnbhhnqp/HMotUq+TyjJG7spKt8l/H3PGjPyBTgdx+KM9lbKFErz2elOtWzmA6WnSUyAcLoCzPMaLLnLI9L4XZRe5//c5lzQKxDKVNriQ/5TGlet6GldYndA9P9lXmTNWnec9fnQRTCFfLxnUhvNVZ45sIM2/c7ueD979BIrl9AvDbG41/TPdU+3cAfx4fHktrP2Ya+cFJvkJzzdAwpLLbuDiu0UyzsPj9jumoqy9teqxvVc+K3fqQefi9akTkEjtTNVpv114CKt8Y/2J2gtLUf6NtDVvbsF0aqG0gAvbPV9BTB/enMApR2leCXZRpCpkm8zJigDsBeu5hHKztHbTJHeiXhw3XLZ8XoxpAccipRSoYWWB5eADX5/5m4PsRw9yHHyP9oUC/h8H65kqLDM/HfHMbWBOGiS4qEfYdM5XskkWfZyGBkAhH/SOiim+Uvlg1RpwonnH2QB/HdWpGcgBPF3ZGQKx+f+cFepaSZ1A8Q1DSIrxhIS9U+GQrzenhqlhhKJqPvBPrZt4cnNNK0J+JkL+70cUi/ZlUkThsqH49KfMjp7yzAVCQaUSc72SB9axk68Q3NoTD08Cc8v3HfiyUhVJO+2TWGIqq5Ut4mNWR5WjY6Oeiv/mwe1zKHnYsK3Vtw5notPgk7XAvdHS9I70HvjKQ4j/6WKu1t1eunYuQ2Emr6X2RbvV0pKZd9IPFdGcaATDllrYR3qXalrm36x2MvHfQ3uXVbg1SeAH1Duzq7d5JlK92d6ztvtsGuea7S1Torrde7gxqu3sB8VWHtpvIGXgjXafyrBJf/ZyUUIM0fmMJHXvL1XrSvinJCvZHMsebztumynML1W7K8ybY2gvfjL7nSwi4B/67VwF1EC4AGI0Z4Ia+kXj171CtnIRf9egARNKfRuJq2WBn4pJnUxi0MG5oncCcvOQYAD7J56/SLv70D92oKBCsTOewF0l4aMooRgdjB+dDMgPu6iTmbP7uZkcDo30uXf2gnxZ/9isna5b096w+YULV03dT3iSPjPlyfW5wQvH9ZPhCzvOgglY67+LFwJlBSTnNRkPRgG4KDWMNpLYVgT+c7vhk6F3XgXwI2glU5fk4GOuP0uRDOZZhYrAdZ/+Or6ktrt8cFHXN0jAFsaozj4o2cg6/+sNyjaRs1ciRnIbh/U0Uz/Csmf8/PcW7faf23M2jthKnAgD8ii8gV557GIxlK/LLeOYAJKOvAzwmUTntmR7Ilm/4MxIsxLbSW3telIOhTJ+GqvN4cfDX/gRPpvwBj2rjQwkY5KVa7kEdx1bKLd55nhhHfj7mX76jqWlXODzbE11pQPE8p/CoK96hYwAAACAASURBVPkSvhvpiHcYVlke45ouzJ6GSa6yJ539jY1x0zaiDxUHAzNYW0ntm5hHY6hvSvT2aPFkGTF+eqdrT46pQpYJQXXuCp6VUiBbm4PLof2/oQmdYCA8ogG51oPDGKqkhpAubNVJnV07w2qI6scYulpd+W1rNs23PCbXwwQW6Hs2OIjCu/n1OTpzasTRKLzNSK+mESV5y5fspX7FpJj9wdqbtiL3bLx7i2iv8DpwrjzVOekIJaLgrvBvC/280i1b5AAJ5WxlLXyzym/cQZ3FyIQZnSXSTFmPI17noaa9lSnSMxSmdepzpz/dOHgY+iRD3vqNEXT3pcNFR5jIHnOZXZfzJ3EkcZ8coYBYA/PEnDiHInj4e2vrtH9H3x1vK66GAhoJP6Svw7BL894ERdFD08XlWlk8WjElIPmfEIr3vPYfPCjT0zgnRX9SnkPLDo2WPh6hTkbx2oC1M5fP+WO92dDOrjuJyk15TmC51s5xQ/DI1lZZ9kO1LlINLdA4AUuSFdEFw3DJIi5ooYyvY8Mc9fizo7ZGvJimSnF4sMq7h9L+kOm9FOfPTRsDH/GT34MOzIhzgmy3QL88s030Y4qMdc9cHhG+F6Sz5sY195w06kzGOnzfYr+HdldDK840+h+pLGYFyHiL0mo7L9NIma0zts5oLBLs1ghbEy90EOH68Qn71x39uoOvHdyp0uzxMzG/TP1JyxDb+YXxGwC9o22EdtmwPVywtYgRZPK0lE2wGAWyYEyDvBNtVdiNsDwgjofjtDZGfD1Iz0WZDOTvoU+6I/2hQH9BEtx9C0LFs/Rxs2UafutqsgNwEOSOUfnjtJGNMKlBqJg0jB/Vzd1h8xMe34nYpeqjNn5wUeXIgtQNHzAT+vx8xTBeyvdyOz+SlPc96ZwrH1P6x39+n768S9IFa5w4CQg5y/Dlx0oMHHqiw+hhEgby2hq24rGsTDjQPwuBPshWhAMSNqXIxalLel5XxsK5rzY+0/pCvCiFBtuhf/I0JwLoAmoN1C4ANXRTYBrdtrvSzSig6fvWtJ3sjwG416VfCD3cnwhKcheB5RhSuk4MU7fDhuGSm22KpS9eayN1A4LMa4cqhykAZ17RnMLbsswmEeR+IhAIXZTsXaRb4g1ocvBGTRVIyX3Cjm2CDA4T4S/SxuTwpOLtCCgj3UNK2kPjuyKhq9Jcvc+bHSYrzthm3rQiNmbHcfJ2QlBO/ffL6qw/toZUAqcL0K7AfhHT243hxhtNw7abTYb9ARpZu5fQ8tQa0JsK9r/oUiT0tEHB3/5shYFfCPyBQJ1kY/2gc7BBDQsEKwlQRb8c7uTFK2DoMv4iEtU1f7zSj+Y6M+P7KMWyilzU5idHKl2Wy8TqBBc928FmZ9WXkoZy7lX8jHWhuzgCZzRTcpMWJzMegEqzXVxSGsUA8QYzkmhKOzs0rDtIDt+NDhKEvgOI+GtaHyVkcMsb64zRGDFmGiFSobiS8wbwHZU1NubPsycQuRLwEA28TG4s02TCzc0kDX+pnuUATiu6/ZuGt0dVrp6vRrLEOmcjBiFLZhyR1FWzZnWq8cGeEONiBE4V4L8pQyMSbLk4LU+HMmz5OcK3S6kK+mn0MoKHcXxU80vbtJguU9hNxafffPJ++YyxJD1nWDC9e2dDzlCijyQzRb85pN1nPb+drEYPHc5Z+ojUFSfO6nD5cnhJlBQIIywPXPhkvcSqIcfCOV+m7DfTaiGGOIcNGzYKw9Ine69dNYTaaHN5SJZN8Om5T0FTjFrHYWiW9EROoiZRTVqSm0gPUDc/D8lGpKGQl9ct1hRXBb3xG48QoteKMAOtNRXLSeXXJr1NfZXi67mo4B1VRJV+8fL7DLHEZRFrgFJO1jril41bxqnqM2bx2mKrlWE8yDj/OBJ53vVsmsHcIQaQXb5zBzGjswa0AUKZabDO9Y7iiC/pAQJsZcfn6XdBsJE3nP1e9GW1IHDw/pRPD3xpuTBXMlmUquAYx6u4wfkt10JHxGD1fLlvirZyuPwKepqK3JfWBUb6+ZJkOB4PdF1o5/1fUjqwmpcgvQsFen2WGkEYhw59WOIGy5VbIxDT6/zK27sTFHEnuXcwfpuIs1gCma74ltTOjJkHSnPCeZVpr1aMURgCZL9n46RU36r/0x3oI/Ie9eYEaC5kHGf5adJHAn5/+Vo5TGeTnZPRZ7ofT3/I9AIFnpCPSkdO65n2dgOP+FdI5axu8b4wvrTG3eizhWEjBmpB5Ip0J6Q7ga4M2hjt2tH2HdhIvcQb8Ehojxe0Dw/gLzv4q5w79R0RDQOofXUekqLyQOlv2Y9r11mvwyOJ6rS1Tc87e3KO0dD03BOMUOop8DtabHzwapmdEa779t9L+fn96dj4633bfUn6F1agnxD0W4cAg4fA67rBz6xndZyRNx96R5WGiJXNp22a9JCpML8gM+GtfkPAeHY6WrWrcRy9s3p+wDQq0af3kc0TpRc5rQ5I78GPRdsOtbcA24pYrzxdvqelUFscW32D7qTj8fL8tdSBx3WTPWjzSSKwwBnrwHcQvu6B+ZEn+qhUL2OcGwgPyJ5AEHDzAzFrYurk6oSwPi9K9DyE1VhZ1X+mxNdDO1egm3aybUDbQJcNjTZQe9BQ3pCQ1TZ3DbDw70WRroIiu6I69d/adTDEMzvqcAMwDvWOi15p/xgswu553NBY7xciiDUnQVylfdooAYyjW0AcrNqHKpTNZ8juPycG0LrysQjvLAYBiWfl+ciW9+O6eGuWtkpj23baYO0ThEZtG7A1OYTdWhz+5/kkO+DV+dE5WGvfqHzaFIgOMa0lMvxjQTKCGDtcWJXnpAp0M2xgRSP77IB7LcTBsBzC/iJLhylujuhcHXuZ1KVe4UIU+i+C4oCNIR1i5YMSXXTu9TEuQke7g42Eb2aplqmZ4uHSWlyTSc/ZXeYp92HdhVLvKt1zeLOSNY7kj9sv4XNylMdRrA4sSDPZlrHWIMTGv5LnViAxy+bQPRdt08Yw4yAJ6c5otMnVEVqZRyawijOh9rFkeh79AFD4BU2TNmzk/H42WuDESFxI67xFcurbZX49oDRawrnd00OpO/j+YZbFi2XewKkbmHXyLqn+6Ci/zQul3+PzMc+NFOiA6RDWcTrPf1KMc/1t47DvTes3BdpY8WXqaQy8UHJV0BMdqWO1PS++nosVRMqzAxyiId+q3ur5tiJr5/NxU+Fuy9mMyrh6osuzoa4lbdUZovh9RIInkU7bHXVyk/EkxnllWNSIuj2Ubwly2jeVwyjGQomO0YHyfPmQbuc7gv3oWep9sf+VV28UkSdsXXTspV4iwpZWBwPYe8h/IR5U7CUAG6x++WOl790WF0RR3gBsJAaWXdflxlKeGzlXIpWjCXJQGfe5y+TE9UZWv/Ei5RDKAzYXnTRsfNMrljSkufTLjChnGGc6P+Na0Av3fHWZOYc3plzIDQiyX7/1w0OxY+UiITA0T+VYQuYxRTG5ipcGsxyaXsTSDmaJJ9DR0fU7M6N3lpD4XX1MAwX0yxpWE8kv47uRkYf3qyKH9VL9+ayUZNWjBcpD3vRO4G5VcMmV52ctV5bCNc+KsB39Pht3FZMqLpd5New4ZOzPAu+tvPW8xOIirErONa3GAFOSq1wa++TYlxSlu6/XGTiT0tu+D42Hkv6FqHcjjT739idLOhT+WR7zLjL8HIXIokTFmYIlAvzquPrQPhPshveha63nElQgkvue62BMAM1rYOpQyuuEUYSLfOXSu0zEt0qfHeiLl2VS3qf9jvlWwp8mmQwwLOI7kkWoGR7ebmspk41ce1w4Z3nfOt0Dg4P2z85SStWLNmh4nvMaTTHZTWXUvAM3euJ8iVnCsV+7KM93Bu0duIrM0zdC2y4yhw8b2uMF+2VT5TrPwSwzOTH6nhx2yj5J89lxR2M1wiaSo10VMLspy52cdZgBUtDckO0Knno/OP1Of0u4HzwfP2+VK3nu49rvibHvmf6FFejPS+83wXlnfYRKlP4OXgNwi2kyL4Wm3oKEppuZW3WYYCTNHe5e/kgH6W6ILYRHf/EWhhm5+sXe8XUV4sdECWZg/0f8fvgT8PdnxG//BLk/6E3TW85log9utKHPfiYO5BuaTO9O6FtRZGgFvlGyDV8oc3qp5rnsmZb4fSwHDIItEdgujDaFJQju0muK820DtQvaw4N8tqYK9I62cVTtCmOavo9affbDRhuzbQCQ8oWRVFhipve+CaUEYoLc2UPeDhGA3tR7Wbu0XTREu7Rrh2cGUveVZxGbOiQUPLF4GXPpfhaCHbrIVvR2oPrs9A3oVz4PdPqrONAayfxvTe+BjoMeyoV8qi1klK73HnMqQnebnOv9oMSkdABopBsJnQ0CsHXxAt8IaA1ba2ibyRF22KPBPVX5zFDPYRAaE4g/qWwvynM2z/POiLiMOpjfVPH0qYEbR7QCm3OLZpDXt+Nm+mmuTK+Svull+OOdsT4OX8do4MDtjYTFc77avOEV41qlsbIDOZOR6LLR15O+sCgplq/LPBoasK53iELIvdlVNtWdaTN80zAIrXfxHW8NnRhfGOjUkxX4wCOy0GN8Mv+++yAg499LJyW80KvxeIR5NjBl8pfJczkfsPQcGkb236r/Y7DhVcWHCHC8TzgqsnweW9GPqgb6jOsi81pemIdHtcgwd0/p11fq/oNSvk9M2ABciPCVE0lW/kcjOP03pwdwe5jNuNkJzYmw0IEjq9Hn/KfvV23Yl1GsujO9KVl6Yaoe58AMp3QDrFmT3Vezfq6DCB8tOV7+ooN3Y/hqwAzTSk/I6MMtunP+/m1FHeXpC9bJU3APWRBBbkmVqhPFhmO7KsT9QFHfhfGkyoS64A1GZr/5oMSz2TmGSlREosbfiLAxoXFDN5tWDIos7Z36v+v0qNSs425oUqd6nLMr50eCMH+f58MOdwliCOxcQPNziPE2/kHuYJjCvqFpFCryetPxsTMXazk85tmM4zi3o0Y8mbimOrJM3rnj2nfsLPLizqz2sKI8DzlwAQgn4EPyMnlNjfg+VrSQyY4SrTKovGB4NuDFPK/TykWZsLN+THKi1TDTg7E+VxCP/bvRbunxQfvxmzHBk2+BlZysvVV6cV0uNCUZ1PB7aYRgyvDhSTbIJbgiPBTiK5p2xygOJ2LINhg1vU0yA5uBEpvy2PJos27XSomDeeh3K2uyLCOMbQVm9doGwHajphIKwzjAqE+51oPC3PLUS/Fe8f4s/QhCzpumlw7oBiAPRH9PO2J7keSA757uwo8jRBr50brC4n1+l/L9DHFX7b0HHCk1ceciKuezr+kTD3I6Z4KSnqV2M/HpAEjkp85buemLCep8NPCyLopzujL4egU/iYJcxP8Nl02U5nTZQHZWBZtP2zTKf07fMn8hLvyGlDGanNiI0IZw8+GUAEzXz2V2XPa6b0H0cn0nv/nk3UvSWwoK3zh9fwV6Iaz5uTHodyK2k/B+RzqzKLrH2mh8lsuMirCDPsXB+JBPd3bU0qKWnWMcWIIGMI/9wfnvUuw5WP9aor/aoAzfaRzbqtytuk5S8W44BhQDKUzpjXSYoeKVhVab1sSNNTL19Az/XppGq6e3Ss+t6xNUYbPkMCcV0/Lr26Q4/pGW3whATjMN0QZidpOXZvw6yjMKLifpbjw6mpfMBMZPyyJjlcPokJiy9XOGdtxblltbzbXmsFPuZf9WYxjyunzjhBfF69xDsG+gJsrz7eEB2B7QLhc02tAaAdsVfUv3A6unuW03s4AptEbmyZRY1dpfBVLbAd8z1zlvPkNOy9uVw03L6dgk7GzzzLTvMG1ieFJBvVQiVF4bLNIJWmdvoNbBFrIefcK1UyvxsqtnFLrp/eFztkSxfu9P6mUTVUjbjVRpvqXPDUxt6D55maqkUWzPcwsRwEEE9O5kmLiB0WP6rYbsHslNJMCHDrSGtgkOtq1B7sCT+yptowFUowvzyiP+CuaPcjdUuo/d760Oi7z4P194aFBiyBophzfqSaKyjMEBQFi3D3jqOGlznjzeakafncVz4PKnAP71q7WZ2vZ+58WxrGpOk7x7UH6FeobvFv3huWlZ5kzYM2KQkNGnQnhuJ/Hzs7Vl2HIF8JhqimrNE43VGCLVpw0QIFcGEMRLjrpWvzkeejR3IK3vtPIWyvIxlCU7n7O898iN4zN2sOQ+3WLF4tQ43PuoJTNrzwr1KEyp77NUvER3+zJ6NZflMJSmMZN9T2oVZvWAZIy5x34tYWIDpPTb1ryO8baYseBxY+OnpSscTTU2s0/5ISRMvzvn5wQZ6foD8o3PlRVFxwz/CtcoqR0OoHrDPzcV/pB5MIrPhn87IksyrmNmamzLfthh0mFnFg3Q0AdGzFv+liQhGF65YjJFxBj5bi5iH1mWHPs7r+26iud+jkoEQJTnQVczl2uknucUfc4tJZNK+cvgJ6znauQ105oZ6Wgdi/WkM3kI9852pQch018C4cpNKDYDHRYRL6+BJBsQ4TJ4L5LXBQ8tHtfcqLcgCBcmPZAUT3RfhSR3rzcW5fmmDgbEpmQvSDnRGafMKldIRAiJJGWyjMnoAT6KCchwTb8TB1KZzZ51xbuIqsXagZnSG35RXP3EhEbmMAHlGxqCmoDGGqVQfPxBaOotRdqbnmAXh745mSEcWHvbGTuL8nzvjN2FRJjzuuvTYtqV/3v9ozxTsYDzPM2rSDvGi/dHaWjPkNL31XdWs6h2yUPHumzMKgN4PkDlywOZg6H7PqM1MxXjBHunLjk09ig3+NynWjgMyzx7FUAKTxizxPfRQIXLu/UYxierFg5A6nkSTAfi7R7kOE5G++Uz91rLMuLPm6g9WKeKDN7G0aAWj4cRLpogR++Yfxj6VKNNilwhtUR49txqwZCEG3lEx0elRgC4DtbDUYwjyrgR0THAtf913HBcPk03shy9Go2Xyno5KXWalq+1vmcZ/83V0k1amGXPlxC7o8YV635j4C+Icxp//dy27unf/P757eT2hqafAaK72l3myY2NeY7w4J48q7YXebPwOemnjuoZu7BalLf6Yvm0X36ul/AmGzFZO6UpFr7ZGBLqPF371nK/jGgTqAPU5SbD/dqxE+RMaSO09ghuLOdhDxv2hw37QwP2LoYhTju179blhCfCH/L4KnjM5LIxyTnIDnDfpf+W7JwnT8coIZ+i2wEC32J+p58D/izrWuDGIRq9gvYUGT439Ib07CB9RwW6TTqFBOIpCT4pe3gZvoyhHPbj7Jm2F0sgE7aMjC+cLJq+wJGd8u91FiEQTaxk1KsNW0MnFXf6XpEzn8gTgdAj3I4KiXFnRx+QUxdge8ZYS1YaPl+QMsGi4TM3k9d3ZgqndR91L9d9ewyHgt09aVz3IzNa1XOoGE8bF1trz+2P1X8oG95BHQ3nloC5le7EmYusAewprGtTBeafGHiGI/qcbgkoYx/fhj7dpbgbGZuNHQu5+7S6FQO6pzAdvDvChfGd4YV6OPv9zavyjLG00ea83OeR2BZsLL8WUuXAZx7TekQ81Grup4p7rNIba+h2dIAeEmlngLsqUZscQu1dvFta02obuvXeLqY2YxHd5DYG0MhvatORwOhjYR0MxGGcxddi+D3YNhwXUHusXYYeTuZRSwMdFAepOiYjxmHVbzORwkV26UvvehhMm+ibH8Q7u1O6u+gKkXgNzFmozorUiSckodz5H6NqmF+6btMasCZymHvlz1DejMsGXB6AtoHbhr4RemvJYlbgTDlgjIOcoxF9tutmIK4PcH9XOaCkDmAHNZmbZoYPYAlxqsrzTaMgiFeVvG+k0QGwyR2WvaNjVyvdDuZH9H4B8xXMHwD8DuADkMeeFOjaK9Cmh9e2Y2l6wE3NjnTBvaGhgfGEjiuQDg1DIzV6zyJ+uxxgX4y26O+yQZyL1x8DzWoQXDwt+5Zp7CtXopezFTYUsl4pf7rJNfiM7xNcCZA7T3fvCphwJcIFMo8AhRKASWeVYPTEHVQaK66nAel6b8oTdrLQBA3XtofpFBNAm+KJJbl7NbquvMXwvojthDSAA3CYsiUHlhzyGz20kz0/lEx1mUEM2O0wrKirRvQ+WsYFzMBfdIv2N3wWtCPrcxbpZK1VY6Ic4m3mmXPKHM/mQdcwKwetl9ZKGxT5mSP6i+nnrc4teWc6iACwrnbCruyS8IW65vPbin0OPpDcXr5hU6MKjdxCDZ/bDibCJ70O5Xe6Osw/0ANAwGerO0HFKFO0Rrq8Ga0x9qY0U5iT2wSZ1+sVck/6zuKZ2jL40gXpdcpTgGeCeCEs8gGQO/IUnwyKxvO1S2XZe7lbFgcF9W8TromELCoM44CqaJ/7NytJ82/fgnprObE/otL/ON6uMhn5+1hrE6FEwXulJ+yGY1MPAMBDmEeHGrgjqyBh89ZpCOqd5JFq966zzBzKR1spilNNm7RwugKLiIyQ19gy8Xo2qjRrCs6AkdfJwBN1XImGPg/xWhkAdey+2iFrdmhd1nRcdlTfuqu4tJT4N6UcWYRqALhZWHJRFW+kd5ZTw6Ye4x3CLcis3m1emFQ8jMhL9txpEiJsusNL/w+DCC6ihrAb85wPmdgUdPLZB8WdfAnjFnJwSHWGIYIlXKEAU4hb/dJ2wLSzHDh3YrD2rSkmtDRvQm90IPvuSnfucma0d5M6pdOtG51iDVUad5M22hSfuxrQGr6MVCHJOe4CO+ab+VJd04s0NuNtcSyeaQUdraZMSA8aGeQL4d29LqiUh5Xvyo+hYmaIlR55foqi0Up+iOQpzImiOXjtf33eEy01oxXDVQBOH/Mf5d8cW7TaK9U9ZFhYLlmNmTeHyUiMo5ax1nIdDHSOiAoAItKRrBALkuVldYBi5IPUKnnEDLdpYKBbtC2ttRtf4dwjHviYGu4AYDZD8zQuBWK+LmRUwOjuOkGPEOHHAgZ1FVDggn51UZHg8qTRMfHgZF/X1h9WoZVILqugRthZokM5PI3O2Swy61FFYIPjihmAGspZ79M6yDy061CUifj+YdSrxffE91cpCTSxBOe8RC3p6hLenq13zxr45yNhyhnWdRAQlrgL+jY6Baw7pP0f6ZbyAR/tAYxeem957scnxZsbouii8ec0GEh91I+UFagwWSrvqKd1leqb2jkA0CFu3ANQRfKMP0fZUpYQRTl9HMGEBhDfgLdbcwfPWXbirAoo3LWuGYpjXxHwZiAMbUIWrF2nxLozPbQ8yh/0oxFhow0P1wse2obrF8K1sxhJXhgPG6NdGh4eN2C7APsOcMe1AUxXYWQdoF35jS2XppKZOYPoGYlxMaGVEqqxQe48b9cO+sdXPO0dT1+u+Pr1qiw+yRZ2lkws+j3jDWmIFZVp/lrOOwZYr55Zr53G5nnrUW41/XfRjjDUukuJvkS/Exr/zuk7e6CT3zl1bAvItvLKs9eDaxRuxzYWv5E30q/twS0GwZgXgD4zOm5bKFOi6+6adTfemRfIBoRV20gQV9LIQOZu8rWBoXv192xE7ql7IPy0qje1O8sOh90tvxdz//J+R19ue9EsyuUuvKL9bDGa0/T8XtReCh6rjGneXrpsbgHusqEM0jwt/4Q7pk5f/oZFH2euMviWpu+2XVk39hJP1ucjDJb88VDueU6l9xa8laW8D5rmAvvhGjyo6ACvxzQb8i4ENmbMR3g4RN+JtBWJwgRh/c2bdIKvIkh19RTZGQ0NHU0OshqDGqHpCb0JXSaUxZFd9zYJFPZOgEboNpzM29DEbbOpJBH8tNYFb3Z4mFIc4LTss3BKUQSASH/mMS59de/lQsO5CoKmRTBl0wZRIHS5qygsS3uECO/jrCCWDllYpbSWsjCZNonPX58LMNgnI7xKjB81CXcNuzeTNoA2OQCd+JTCmWofx0ZrdMuYb8vj4db1fjtSHzAT8nkTgwhSGSKU5zEa0WtuAHfIDaQNzDvk8LSBu9JefgLoAhcrCYi1VGUZJrXk7daaKsJa0FD62kBPBDw14GuTO6s0RGzcNJDGG9oGlM2eywKjPBVz7hJloT8jzA2sindlc32Q9/ZLuAZsJa/cXeUJcy1KXSu8EoySxbYpZQyZx6ZI1zSLYQPzjk4N4msIJJ9KhDGHwppiiggAdjvsFHoIkHsW2r2zlsSAQxQXrMZE4QdlkyrKKlf6Egka+gmc9quIuEazZxCFmka97UaYjPS/iAWGgzSXW1dQnw6HfDY1TvIo1UhZMqlIfIaBM7orz3C+6iNPicv9x5ZLhtq0O5xqCzYxthdLuLrux93foW42IwxVmcE8P0nha+czmQz6lVblXcxTzt6GP7k3uauCLcrJtRvkuC6sujnZ2cywLUGnwby8gjMzMt7G2LO0JXCtAjzl/OPyjGwlnx/Kp6LHZMP4RWoi/oOFzs6Y5iWXYitNv2h4ajMMzNg218XzWEqOKG8HMxZisVL8ubQrQDnayK16fVSB51etEMAqu5lXNlOaXOmU1222GQDSmuKQYTRjFl8Cq8jHluF5znGGfltJM/rhkCudRldMlbXJ5N7xphiOEdaZzXhIpSYdN1DuSh/7G/im+fW3KTfc+IVyHbbmQ7ENfc9k85dItJYxWZvBoJ7iBjDUICzNJzePzcKkRpO+ThK+uWgiFKObEl0P6U38ZTbFWyjgCOTysZlw2dmqjZdIQso3Gz+Z6jvhpbVhfBFdFIHI115RCgGfpLeu8E0CZ2cxi+h2VSeLn3tnQutKpc0o1uaIAWqqPIdG+ShTPs4/wQ/ORyQqK9NSkvtOV4HVmevTckXJkOWPA2pzQ7yLZPWnz3wZfBlG6j+l4RrdSOH2x22zk5g0hIEiYowqYNhKyPu72DuxVZZqcP5H1YOaNaKG+yvz8P4ENE5rsvIbRnPzH4bf2Ts6KcUXDijCwqvycNW3OD6NsbhCnNN64vQ+945LJWmgOdX+BZzXZ9yc5jFlrcqzxDQYCQRKL+x+ZgspbIYP5N2VOjrIFUMwnsBaBykNi9KP2QAAIABJREFU7sDexNDKKUNSttUg7TmyXkw4q9EAcvslDfoBlysTLLP23h/lZ7l8/sh1IBRw+iPITOWZsXe4g+MOCzTXebQWyi1ak5KcfI5K58fKRtTX/IIi2aHhdGU+P1VQyfdPJN7oR6ksrrEyyzDS+fyah+nn+RECBp4rrYVlp2xRHLW56OtKohQ8PxhDdMY6iXqwMxQpvM+rH6riZROlohTZaNXluW+OkEeVLhsMmZEC/k4j0npbNZzHm7MM/CjLBv7aCHXxPO8mrAkfUGtouqqxIbN6sDNYvcy3hw3t4YLr0xX7dQf3jmvvoK8AvhrdUtkvd8iICQP5DMOXXWe5xpAZ/NTRf/+Kvu/oX3c87VcT8CpY07j9PJUjg4BqlEHz3GW4pbka12uGbmFo6YHnqzhxG/eQxiUDuKk8nza1uXOLhf6N0vcP4V7SETEfkI/w3QD2vokOvt+ZdNEs74Yl+II0C2ah6omoIS3YQ4uj16Y3nLhbCrZEpN+kvj/Sj5t2Bj7+Bdj/S35//N+B//s/7y//Lveff+c07h9GwetW2XdNP9la4yIDPaOc0uLOME9gBhUFJDWIsEYN/QJVGpM67wqzE287vXOaTCB3rZDzRduwkm/OeOo7L775z4lempSkR2luST5nmQFk/SPrHGJTYn3OBzkqAOuYs4xs986KgRhHtW41YLvOVFfpjjU68rNX8jeOv7LXXW1AmMFdvCziDm9GGegk4/Jic1hT0jMVYTo2ZKlCahFBhjLMmuIj0NVTl4dqRFFKohwoXk6lw8PgB4D8kn67Z7p6fvRu6n05jO0d+97Be+rMMByM32foYDpEAyLSgjk2AxJrnOF2Kddxwz9uJF5DIw9lDSoftY1bDRrOpzmYThDOyt/aHB+XM+9nZo6IRvruCTWMux2pCVlMeUntI/RexYw7htpbb+pFKAd8V99AVaMnU5T6QVNeQy+ct1Wx6kkFh0PQ38iXSetEdTJNBEDYwQT83VWJ6gW2nJ/1XunmKOjRF9NfIPT177QrLHOd1+E3e39Gm6TaRl2kpgaX0nYj+NWNJ6zEhIU0fVmPathjr3aSU6W2Xlb7pRuLh9P/+V3eVCv31kggFQUn8WxYtuttbo0sIE+yUeeY+z4SMOZblTuiDqvZ9oPJgzJjOqSG04sRKjYLVHNwXZv3piPZaLn2U5hFIvHakxcxqyvY5IPDskIo6OPkIW6H3xCFJcAS5WMAEG1az/oK93EEw++EWYkWSZ+SGRFhEnTcOCp13Xs28IQYif0iv/PcRRdtE0qXOrN4sScDr6wYz7XL2gozFfNsd/qgogeBXZHD2n656zjJJz6UTuiNAfWpN6rGaGrbxwvY2K9s5JDWL5vCHOVTaGyKesIBfjeuhIEk5ifayWpCvY7H8VQ9fTkUoRmWjosuKqb5VeGQweKEZHIhc4o8TkVOIpMTzUBzueBvyEQBsfqc0/Ni1DJx2XW1ZwTqjIRMDPxWgTuTIMDtqoyJHL07K7f8wed1viQN9c3V8/D3gkrvLiMf/IZjjGoGOmFzmPJV2W3owJ38Ss5uZ5XIYdHELiNyRaILzBPmruQOSnvFzIuIQvawpWekyRW0zEqjWlGUjLzR9Hl+tYbL7HesBbuyy6bZ3elvlCuDTN/fcg38K6QCu8AV/A7gl6MC3xDIS0HsR003pOYb50H/solV7m268O3sbMmnLQuDd4lw1y167QWi3O5dFONEwGXD9vERD3sXh6cnBvcr+LrL+RRYdBAA7IzNr94dkmC+UNneO67XHf3rE/bPn0WuunaV3wf50y239F02yr8pK5zk+YPWvTj9EAr0maWe56653oGSuHRihGpo4zlK2dNEB7SSDgi+LigTgsZu2X9mMbrou1lhW4l67MDD1/uZ3Mqyq1TtHXyjVNqbxL1ocFSiH1pc0cH7N8KvH5jh8RLXUhphki3lVr+XjQxtcH54lu5Ank8Qga3bncsA9nTo+5MqxwVEL1w0q11RmQOu72ur+CEQ9lV09qVlab2ZTZtDYKZ32UKu/Z+f0oaZgL/+Hn3qDHejZUZvmwhbatzEqsjEtotbSOt6jifemG6USFAlEspUstJ8J9/azjytPHyiDjBbA3vFZTee1vDqJIqgFxIhabtReF6xQI3yzCkUk8FWD0y5NZGSOQNC6xp5UP5RWNmwOEpjb5P8oCNXbdaWHWpQYUK24U4SiMeU+fmIek3qqmdRisEUMDYvcyg+wT2N2OdXDkJT+YFOc5c8jg98C3bW2axoH/BR2xAl+q6WwR37LqHiu7k4gUCbwCmiq3Ftyw5OyoZ+xo2CDxluOW3wpepwWC2b03Qge9wsPw3ivmwdYRxwT/6S6I5MGVg5fwd74Ff5PgabdEw0pQAhPCFYjvUsgGeDKg8YQGMP62ghJ21jazggnp5DVxvkigDbaMZCPIbPNNZnPE/0cBr1KdyjexOb9k8a1vIJezxl3XnOVp0af68WRpCQ+TktXzDO0dLyGIuJvU01RbhADMl+oyeE36lE9HiEhHeX0O0t6gTjs9z94STU+CQcbwi/QPDua2iNYNSZmBaTxBWcYFwoQzXw03hUmd/cB+R4Meu0eh6K6nSD6Q0Rbpr1RJJHirPChqM+zc3GWrgpTY6K4FRRlbWOIJRb5dLRe+2oDVeKfZQpKQFXdHorad9T9rss8QbGvpPRsJP2JeJGNgaK8fLim+S4Cd1FS6PsBZhSlBM+lomAq1e9X1OfkkVNMesorC/q8EgPZJFu1nOdlcT+P9d+2bq2+BRSf1MvZ/Uap6hBpNK4nohVmay/dFkEMrDBaBclOtEVZgh0pSvUnzoB1alAgl28k7wceMUmz9u6US867wJXhbaTLjUmsOhUtFghip/dQpc0lPGRQq05fMjD98d8q7Gu9ldv8fHffoUAoPzcQBB9XWHOYRpEuwrX1SpKC90V6Yu8t4jalJcTQ7LJeO6auzPdK1/eLX++Ubk7K3cRKK2b887In3sg51dRY314WvHieVbETv08riJLPoxE/wutHymprumprNV3hLvPSaoCJ1tHA0dYLi2RH4PupSGMQI9eS8kiiEbECFa6KiHxheZ23YdOezMva2tU++17Xl2pImwZM4RchcbHS97rPk+VR67l2fI0Cw1U0aeWftcF9Ud6p/SqO5df3RaPGe6saP5+dqzxc6YV/dbPs3XOgB8K2ff8LssFnOgJSySd/UqiP9g75EpBgK8d+7Wjf2DQRmiPD7gwsD/t2L/u4GsH2i4b210bUroXslOi+daldBTGDFz7jvb0FfRZZDihn13vJErU2pnICCPb9/1EM/8z9fUkfWcFemxT7ln2sZlJHPe90k35/j0bP09ZngnZRwXRVccJQjhyrDiXWqjm+9GTjeVZZYxo0hrNDpXni7b/Odb926a7TqhWO8NbZe4E+EVDOn/9W+T/699EcX7vhP2ECvazNB3YZyFknCsaM71H+tbEZS1k3FOO9cCEBvjdc2ZS95p6GPsfH4G/fgbQRSln95e3i3x29YShBuIO2hroQgDJPTisoa2pEaj1ONBqDHSzJjcBLdH4acmlzb9dorm0wopPSmuwnEHABEMs8KxAAZMnuvVjXN6UDypMaLRTUQ3ZLDEg1Xs71XcvrXgrGn4P6cqNiXZYjCJ6l7+WhewW4Jn4t8ypnP+SP0qTBFCPZc3w+/lsM6GlFGTiuSZKR1VOd6Qws9bdOsg4+yBMnue5y45/iwXzOw8W6T5o2IHxbver77so0f3QStr1WjfEc3toEu1TauLTpuHih77ERYgCJ7O5snwjrhwRgLeSEwMU9xGblzS3fH9+uDQl28Q5DgrtofRdjtQCIdkKprsQy2EeJXy1D9Jr5tVeRmaawbzjqxl6UNCWHFLZvXn16gK1ykB1zcxM8mTcvH47SzKmMppHTnjQb9dSigD8gg8AgF/xRfPGjij3jkCq4IhgmIky1x5lXHp2OtuPkYvgTuWzTD6QAyq/7HumW+lNEs/9wLOl7zSUyS7bufqpx0A6p9W2LAQ0pXrlu9lmFXsmgt8GsGoqB4TNb7ICzt42HSwz5MqComwakoGK4Mpyf5V+L6da+73aymZx0L/wnHdVdlVPrsu5MUMUwrjfE93ryornCX9oUVl6YO3m5WDzfWMtj6LxnJfnb6UQo9xvn/KMUSn8PlwfwUIeS22N+JtfSHs0wOqo71R+jSm/DfyyEcndx21ALFlLiTuX+UOZMrvTvAHYqM6vwIjU0DT1hITdi5rXaGyltV6Ttr0pvTRlOvv1D8YvAHM2kHkIXEUO9z/ihIU1JgKwo4HwhTri+pvUG6UbNjupl8mrW9u1O4YhBmK+bjhq9D4QfPzE5o1PqR37bJCoV8F1Q0kfSa4V5pjb1J4bQrDJaKI8v3b2a5TIZo6ldCMGWfj2PGYEPDKkbmHj0aGxvjzIr/XSqn5aN8ljvTQ8eyZTXbVxNtzn1POcfNPzm4Tu9PkkIXD+eo8vNQ9/9+S9t85VG+mp8zp5F9cjRO/5tAaJiFHG6WvDUFW+dP3jyLRWxAO4iRgUZHW1ffZs9qLQF8QaNdR32UL6UiUYDoW4lc5Cn/YWjUBdjGUZjMYk19kkL3lbg63ZtaLagcHJyiJfWP/cfDEpsrM8VJ7p8yXmTYCqD4wLxzFxhLk3o8d10bEtrp/jHdr/SolGummCCsfPs3QE2uf8/hcF/T9f4vnrERvWs6ygC1SF/rzRYgC9q3H+FR07gF3X7Ibr4xPw9BXUH/GAC+hxk7PZpx3t647+5Qp82YHrLrLfxtEmTFImNfSvyJgdYJkZ+/UK+gy07YLWVIZqTR2s9jirYvgVJE7tzpaU8RlOfePD3H+kZ6Y3UKCbkGnfc7olKRpBHRjN4t6augKCNX/TVKxb36Ae/62fd1YrstHB/SmrZGcO5rGXN2LpVzLovrGnmTs6Zc2EyqTTl2wcDuscv6d+TS4YnKSyAyBXM8sbffg5E9/C33vnZuWRftP7/JbEc1DwnrW2UYRPsfQJZfr/9RKfrF/M5DS/s/L1wbdNt0j8vw+//zYWfkW7Zg2fNwAD25nXUtqQ/fU34D8++XOmVJgZrhGChsuV0ytIiHe9M30HeNskXHnbBMc3UqvELWJSkt1vqDtq97JBWnd1oyqfIw8yKWzYXFpx24Tnqgh6F6xtumMzKk/CI9VdgzkDM/ctPvOdbFaEQfDQSJ0l7K+cDWrVg129j+eG/FHafmUaWIgdGQb5q8IsMSP5gNekG3nXVCn/lvDVqS0wetthd507vHJY93yskBUwdjjIPQnzWue0AbWwemdM3DTj7eA9NIR7wi+qU9UBUO9A38F7l5D3pvSkgKkcGO/Jq0xhZrXbMB8gxgqEdA926gLpsxkNb6PFe5DGKp6tl8iYihCHCQ8jH6+fTx2IHVk4XmV6Z2saAG+I0zwOAuHVyACewHh0BNX1qxPF/j+cRB6CgMPAyQiFq6ayrKB0wvrFlPo2pXtlkxEp+ORrPAjxiFbZPclaiDzjlHJ5kw5CzxDVWc8oDxDAX72Vv8Notz2KNfwf+AUM9mDyG02qIBXN6VBc29I6JQD/i74UrgGvM9Z4gCvo4K8knuSxfGPBfIV5gSbjnqi+fDLiu/3Z/fZuEODFzTuW8agtRN8DJ0pgVcq0jZOYwPGRcCIvcVPUZ1KQRexYL5nPFyqvw4/3mdxZsnDR/pzWeUfsIi0rTcw47Sinv+ig3jHR8MvxoSCVXh1QmexcQ86TxzCwr7KaOUWDWb3TMfelTHGsNDLPah7G4mtGRuX5YtzRD4qKyriislvnAXzyK1Vj/ytCRESJod1Mbv29fG8Drav26Q2N1fOcxpFoPQygNcdPY915EbuiPY2b1EFAKAAFJfByAGGXKDrwIYbTUlq0zlOCFUp+jjLGBv9mDxuwmRCSIGBGTwTzvbfW8qpvylITFTRa4dC1upv0udw13d2bk5nQKXvTq385hWFHK5wjKI3AIhxbPGoCQw0Hum1PYo25kinHJsgmFyQKdSC81IuBchZajtKwcJF+jlrFs3KrZupCR5mD16S7xI3FuN66vXdIDOjVK2cian3P5flKlopaqhL+SD6by88t6t/AI5clmYfnPH+qwQ0jrRUW2Sh0FbzowVx/7UfmtiPnNfrhX0PZC8A26dkdzWtUnpJlECoZ4ot4kpsMQiBiueccULvX2n8LUZxlFUaSX9SvxW4aITQQdTcUKktN5d4oZ4Zo3Q1jj21ouHyogBKD1Xac27jRdRmNk1dGUp5PiuDKNyIdz+wPkz4S8Pkb9Wska4wfIhLoT+Glu2KHB90OGuAc/B079s7pXCi9o7xS20H+jLqNFiRZVuWaHTt4vyKfNe1fnsAPG+j6BOZHXB4fsT02tGtH+3oF/f4E/nxF60BDl/OGclwlA2oEkcecQZjyXA+kGMDewV+ewI8AHh5AjbA9bMDO6FsvHu1G1wkLQy6HwxE8ec7nNd/CnZF/DdyS03Me3/9zprfxQD+E0y3B+IZgSwfP/1mSCzf3bB5qHl4/rkWCqp50wLxZ+NA6/2UpCSgFDV4xoXRrPHeU5+H3v0q6peT+2dOHfwO+qBa1wdwVIgTvHylS3Ze9MY39TjhmCnVXpB9taO7p37hBPztQmQHIYNBff9USQqT5T2n3SgR8BOi/GOIdnNrbWYSpxuKF2y5S5qGJBzZfvF/OA8zKkhA7UFNmefcGeJi+We/h1qBw3gfXk8nJGdDVo7RzISOZpLqiAbadtw629MT+8gByp/w4UIdgY6UYm90d3hjglixOex1maqo8G76vwPPsdIJWHqadoR47VkTDZoIc1AWdiPxQHa48Fx4ohxJ2eHpFL1rg1QSFtap8pgMLSNgoOSNhjNNU+wQUBflNuGnBX2h+5gOBhM9ilkNa9WyyQycwgG2TuW4W+hTAg+D5xw8hxn55ugoqXBBGVUzq0YakQOdQnI9/Yzen9OZEM9q2q+Wtfe8XVUX/UR/zb+vms3n/rbwyP7CrA7RjHV1IDpFGxjAlgbz/CrsLXWXNdPAGDlS1QyzFTADAVcew8x40z2EhhjpLFRIB7qk8wWAAVpHHV7LrqvJb3lZm8FK9TVOr8f2ZUQeYxZ4qB1I4znzPi3yo+AIcP2GT9ZbupIDWuO6j+nyiYUYnNIS7IEwTetgo5s0VR5TKUq22fE9El1D+Sk+IYV6eddYZF+kVLgMj4VRdBicbBMwYydpKnuirJVuV8fFyGXWs9ODsSTwHaptH9jZHqETpfRYtWZlbuTv1oI7nJpNbxGusPl/1NEi8ymVJSSmfc88iz3rkhxSAQwZamZQZHoSBxqw8j1EMULP8d8GUF9+O0sin5S/+1WwSMpxSdIbwEB9rJBAaN9maTcpzGU8xFCG5r9uUv644L8iqmRt8nUsbqqiFKJOrMUnyYk/emfX3AhOKvErOs1xwYxaRg2ohg0tWKkebyud4hEeVE3cbHpsymlSEMUM2UvLNOh8STj4cLZp7mbehfmtFht49doy1YUP0u9pzUTYlu46NuIzTvOPBJIfMnvMsZUqSOnmEvP5cCacRVAZKOGjn8UNd07xqpvI8ZT7l07nvR++tj6Owae1mJLq9Yk+zHRa39XBn/SfVZ4khv2DUv+OOHdWyKnmkAj/qVS0pBiBccq1brk9H1byLhzbO9BmVUBipcZSr130QKv9Y8y2TbcyQb562EdqV0y1T4TcW7YLRuUuANDeAh2yzbX/N4xywo7PfY97JRbbWte8ECXg2iniJd9j/rZFEQGOjYWntZggNoHNybELXKXoPsD4C/Y1iP036VspzAIavpjAEgNn4fgHInxGu752eC5N/Vhg6706EYBYi0x+b4IIg2LmMynzQc6dd814ZeOrA1yv6lydcn56AfsW2fQAeHtCedrSPj6APF+BxwwbCRoyNAb52XPc96kJE9NlHztWa/tCDnb6D+CLnfHbf2aah3EmusiAgyW9dSZyOz2GTYXYHMmSGdivbmtvX53fW98+QfoA70AdAj/u3/MCYop/uv9U2/FunxDh8GKNUUTehIdDbV675nW7YZpHqs9TULHxkIfEeSTzPycEccGrt9ODyuWlRdqw/WySPZe7sy/rw6jj/7fQDEpTiVXby3tJRvluH88zzlMTLsbLycRNuFqZ9f4q8G9bKhp8w3RMM7UYFksb9eCahfPD+uyUuH8v0X5i90G+VuSuteEsClMNneO9drqqATN5ZaaFRY/ofYuUNYtB/Ss5swQ4G0K/qcX4Vr5yulo5EqkPiehCT3X1GQSZvWAHfjBtfJfUwEWFONtPoHYAo0OWeQysM2IEmWR3dzquSAn6C1dEUJcF3stQnESK1u9yUT+0QAdPbYt/gl83aJFSmmt+YRkyhgr1rqW/w4JvYTOGT+8FyoIHO4Eah40GuXMqF/WkKTe3znPlvboMSaKKso0turxxCDHUQAP4YncY2DEIff8I0PgChPCM4DExJFLCyDHoo27QP+puTfEMKN7fKbqTh8mNMxUBg5Xme4fde6ah+WwKuEAR8A5jDkuV0Swx20sX1EuqjcsxyzUDjOAAZ5XBWtxKLLMFi8kLYvL9s4Ww9ZHpBLISPn/yOg/5gQOWgkRJOMGu7PT7dU8QUH73Is7ZS7ku8+OBFjhVSj+lBXz8pCC8pp9wz8Bu+TqV8qimGPkmuRrdLgUVavlvVmKN4BD35f/G78hl7WxVB8vsRn1C9VO37721X9c2e+k2AnR+4C5PgvRkcBO9sKY/2nVp6ri/KJ9LvBIfxD8BHjCqdeElknqPS7lcIlTNKd0llmELpthKjStMD+Nl4sX4vdxybUo9o7Dqq8Rs8XxSbkWIkdUdeOYI2ashmdNef17KU5yu/t2ckddkdy0epzMRrDH7TtJvNGhsdtD4yhhU8t+fehOXqhyjBAB6aYMFTv8YYnG5W9JNSNodJeY6EGxDlA8jIJ9tTqXtczzSux+jfy1J4k+d2R993MwC0AcnbljN4PVKueQ0rJaos+2jFaGx4Txtlj76ZwgYQz3fxdg6Id9KrfyQ3slEi69qB/YbIjR6HwFhgmrHsuUQg/HfG+hLdZpz1Ybw+YdJ+LzDJjIcK25a5jwCeEpJdeSKb6rsl3NI5QnODAtK+G72SdSA17skYgNA0CrHgM3dxtvBgLknOJu4OHYO2tEy+xSDU4PDjlRhzMli/AI9d/h9gmtdOVoSXJmiYw3vbjOKn760TZvgM/fTy9LIxH7b3bVNIXcNznwrjc0mKosDB+W+s+cw7veYN3hYG3LnWatadFNOc+sfx3NE+hjEp0Q/h4O9pyJx/j1wiiTMmI7DIJfD++oJMjXApG6OtFMnldOsCmUFMVwN2cj7EGuktvNGHESbW5OJaI+f5y+E5DQijStlZCA9kANTtuqagwzbOZBeVAVz6JK9mucKMjarlHWk140wu6Hdqc3nk/BZr+KdMLhAEHf6d1Yh+FF7etx93k+Tp6StkT6tlmn8eM5wVvt0FX/sJzf+pUY6DuNjv9OGEDFTzcCrvNNXO1VS2YZX59LiTO4BrB56u2J920N7laorLhvb4gPbxAfR4QXu8gLijoaPpDY1CI61OlaPISEuiN3nvCpaNil17QxQRR32I7PKtnRMHTFAnf2RQd4D2/kw183wdSe7HQcXjHD6jvXWe75PeRoF+SBNvUIBSrjLiqXjZISaO9d3Sa9sfy5etxfB8+O0CEsVrW4wt/ZVq5Qun/+XrLSSdxMD7kgsmA3K4YucF6dVz/j3Lf0vB4Y70NjLCfWka+i2C+IyObWrmumtsoA//Blz/W64a/d4k4tXplfhyT/Fn48GKbn0nQP9t+P3v+jc+L+kekfotx5Npn/m+iMInDua7iXWIsNp5Q7wDfZOw1v2K3htAG3izuxKTJjBvChfCi7MKGyUDFq+bWUNm6x3trJ7n6F3ukAbA6EKGG/RQXStrAPEWG1U2j71gA+aPOkBFO2YehgF7nylChPUcy3WSsl0vsB5jj98gNXmTQy/lL6nfp7e96umjHSg2Us8qe5fqY+YIOa66p97kkBKNQDsDxBLGM8fkyzDMGwrOlcf47eg2FNf1gKJuUvIhBGrelZxi4dqPwr53RDQBk1/IYKHz2rTxi9RPFz1V6Yb7jM9fVHHBEOOSxrGB8GWk484e6GOX3pOMHdVt+oYdETXFN4CGAD3G9Jw+jvlXm8+S3+RqLei/xzo44Ed6h4Ie4DM1dPZJ1FtngeqFbocDqvxzQmQp8MViUnjjzLgy4K4sFp6/DJi1btkJCymNMGjrRN6nabgjmPL/kzcOxbiW5cYRpmdpb13eLboWt06Gd84pevi0r2CgvTksXGuuqzyt28MU9715eOeB1pfKKWVODIvSJze10vc8Vi8tvs/9ru0tvnuBpPg3PsaVV4w+6dkMgTBXW5pm5fpKTx0sq8Nd2LLjZKhlCr+XEa/MLW3VZgqRp8NeFPaRxRuMq6B+Wv8tV76G7KWkdxVUkFfvywd5PgIV1uvl0rpeHYSWtWwH8gaoPnjhWqliAMGq3JS3D5dHdGJw3wPOCivzJPb2SvjrIREw9jZ6fZ5o+kXLcYy+1OFJLeNqUAMAbHFXeqn1aE0MrTFjs3443iQ5kVQ5QwKTrdRJ6M1u8pX/RfckfNUPTNl6jRFxalrKOnlsBxOykpvGScqNl2qy/DzWb7FdRE1t4r5Qg117t3nYdhEzWqxnTmY3ys+7eszu6qXbwOg95kICzqS+M4m8ZTjqvJ78tnkiw/M6vOjTIdAOEt3IM1AhU0QYDAvxsjx3Nn/v83HOjTmvumqd4/S9jGOoZ+IsB3XfWuwT3vL6/Qlaj2uGcSC/lHKZQo/U+qy/q8U5Pst/0VZuM7YEtW2ecuc6Fk2fdQUmtSfJ1XidbtUj2lCevzr/tOyB4fMIwxGui1TosPEsuWvXZI3OuuYbgXt3sscq/Oyd9PqlaDN336NWUBjSdGqafSEsDPgljxN3aMFLOR1z2Pkl6QlxAAAgAElEQVTJND2jtSl79vtIRn6sMCGHd4UxgWPvUpbtHXPxT5cWEwmofP49YPCcNo8W9Uul0j/SmyZGxSFnPAu5yuRBy+obpWBMxBb3MYpaRCJqG5g2MJpEE9r17NMU21sDPWygDxe0Dw/Ahwc03kG0a8TDDr5CZHkwwOKdDois2tUQEVtq3ZTo6eySdTzcVCkPPc/Aho0Iu+1PGEIYn4uqP6SlxZ3M9QdKb6BAp/SxmkUavpfdYUXuUmxcHOP3Bfd9q3S4OZ03MW9TPyX46d/y1GK97cx1UDp0muT4KRlROUPUUbqgGQ4UGyTPWQ6A5vyvSqO53y1iQCMMj7PcquLlOPcjEYFbu6MjATxLo+fp+Jw+r/vVe3t4J5wf8twCuDyE8txQ9zvfu/PS9CqMea5MOIH8JxQeTxXndyaevmCigbYby3Ql8SX2PLGVDxzUen7bgaYexqT+Inav7xTynHzn78+4g3sK1V7GkDZ0ad79sB6qyLBTN92Zcu/AflVLyHT/tCvQtW3rYjLYIlO48waQHenbJj0dUinsZm8vRni1Zrjq+DiFaDbPACJRLPYuz54YaKZYSxvp1UIaN/SvTUsZZWyQwsqUQ5FuChnvauq3hJdCuS4JSOFwTXgevC/NY5C8Q5QdhlK3WlFqiEd5bDaAz+vxOs6PsoumT8b7W86cCscjNr5M5MOorJrUQEPHl88rRpGIILpVdztMfwusy/24Lx3gzKqO54ioZQwEd0Eksh3UvM5XfUkko/LpBNipT3ccGDAc9pLPkFJpiN/B2pGCxIIVacl97GQ9u8RIKJjD6X/LYKTKu8hGDyjOqnruIgG8wxTohF3oGM+1H87nQNPX8DouGC09AbbuADCuZWyl5C1yRJmcsdfgXqlAhdWqbzT8thpvyb/6/7ArSekJv6enktPUX2Jk4XOjuBmKR/0vW+Rng5pk8eXKczJv3Fympe9IZQd6E8ywDpBSJijtIk7NU71hwT3ODaeXkF02Q4t8xt2zh+whCfEXhm+xpjjtre9lcfk+dPtsihec6/SxUwFX9t6T5zSNv1AZgvf5paHdrcd9GqPWNPA6ZwMEMJPbVGXjAxMLZDwHggNR6edV72ndNj1OaXKIFh7j5GWs3IftAzbA75glxdvrZvyNo7O5tQykTM4Vhg/tAwDC3sQsoF933IkCGKFP5VtQAOtrhZveOU4WQGXDxuHdaBxjlD+qIUoDM7k5aL4j3ZQqrqpVGtC8HvVvV5jsZGui+zKxKDdu5GgMAwAlr+4RZwJDdK0dyZMjBXClexr0Kvz3apEkgp4hxJxgwdE3htqS6ZoX0qcGl0VuMHksxsZsNrPigb73sEsjdAkv73uTGFeQVTFOS4Hxk+2jKtEdhuRk2Zn3dHfgAKMCm3uoxGLhL4yRSpu3WPpL3nmeoT/WR/cyNFrFQ9dX5e5o//4F/6rE6VsBZZovo7mMAdyHi+jg+ah8LdzqGAjC1yJPXt+5ZHj05f5yskNn55H1L6K/lLqmnix6yGP7uVM69yPeTteyDbDRoqsVYh6ROVNrDeQKdFnLEnGOwFuYuBg/NLXTeGSc922Z7xsN3ztPwyrHskZXnOxJxjCwjW5HjxYim7dhHUu0/iwRluuUHP4FW3QQCKNc70Naw/kK03+1xBAlYU+w//1bA4Knb5OTxKnu44WtvvRcaTxfH6tZGBEFKQxJ5adHt7yO87MlUUMlOEjSqkXPMDksL+9B3hA6oiY/JPIOd7lZkK4MXFVB3nXdtya6hwuBH0jkVmbsDeCN0XfW6J3NxY/iUFR4fCJgXa7QsH1rRJeM/UiQwEUUkFsp4criRa59sXry90zbVn241adb+Q/W5YQD3xfbv3MI9wXgh/1i3izOGb9Feu92kiSxUExHH0bADI/tQAmxaS9i3XTSjHkx5TXk3htcBYupmoW0VojdYjPzR/q+6YgZ/YzpCuDhFwBy5zT2a/U+/2cZ53dPPxsg72Xg47gGaSznzVYhh+CgpThhdVrIbRHQOHlh2ZbxQRTDia67oppio08cglXaHaSGdWOtynFR0iblebf3e+zerztw/arKRxbpcTcl+u78wM8FG+H/Z+9Nl+TIcXXBD/RIlaTq22fs2ti8/+ONXZsf5/RSkjLDifmBnaR7RGSmSlXVoiwV7nTuBAGQWMituas1kG6+bZwaCaPpG+MYNNseV7piG/Z5E0tIm1Uru5Pexayuo/ddrPO9LePm9mjO3iNIX4SkylxPekZZqazHX9saNrR6rbOWZhsiEX7bvFBYnROrm6c0to38MLlUb1Vn4GX9YAk+h0tWCb+mdKmwL/rbSMdax+BTjEXNOPABvkdM/A8a0HaANojJfe6AuiG1DeK4STWBuU17vt98lT614b5wb/4Bpm+FbP5o7bW7Bn1hvSHY7q3UydX8y+d7wRiUKH3JiouGh5jQWgdj80PLwLAVeF4APMEEfuwpcnWH20JmXKjjalbuuqFlIojUSnMzIMJ7EZ6T4kKufnZLuXnDOB5EVPskJCGlpaz89mj5mqqxQTkMWWw6rJoUkgVhKnJAs1PJkdhozFjC+D7mpeHrQYeK0NrWeMVRbO2QE4nYw2ThuaYhV66xZ0nPnrale5BTfaRwYocRBcfKPIt4X1QbGoCPKphrxHgixgbg2ZoKxeHl2pTFlsgF9FSGOw9JDQw+s0BXgbpdUWGWVmTwjtkSPesujzAkVUz2ddG+ozwH33OfJjnQooyxHdpFhA3reZjxQ3erPqFxrPdnG28SGUyJI4SmY8lHda6/MZuShfzrUPqFvDriSehzhYfc62YOPVYCvwHQXu0152aQVkXblKdJMTk0WzPJgXfmR30O9EeW6oLW5PXiZEqvq9ExZgob+EbkrsANfoIbYbdaZK3LBe6w1U/zOKfmyJIf+dJW3tZhNU4D31UWTUpT0C6Voojk2p+48p3likyDaUcZ0kYh9V0t1RUOOVeoijoslud7B3bfX2i5yoCa6/cgG7J6xApdBOXWRlL35E0t0Jt5XrK2o/ar9nlBg8pg32CKCkk6QICe9mj98CLPK9ZantexQBribL0Y7Tjr82F/bjTzkLF6fVDwmIrNHNOMY0e/Hzw8HzWUE13Lac46ldIZb5p+TaIR7eXU7mTp56UlfpWM15ypYrYyd111INW57vkx9ZSw0gUZvy9hoAwpO0+V79ztrAo2lBSFlPfYNiuA0JnQdmCntMwmJkjrAamSGzurxt2Unbi0idOTlWv7YuNypHiO8TJ4MPqQheeawHmr7xEOp+svIc58Q9DJ/rIDn5rcwT4yY4fc5n9wMN7/aEwmZSLMw/lnDfeCwaK/wRVC8Dwprh02XKFUFUp9ykzq0AvCoU7ADrSd0Z71TvTnK7jvYkkOoG/C53RiUZzdGLvd8dUB7OzeO6iRHJVNPLu+d6Azo/UuHksI6FDFf54OtJaU9fXhHjq6SrfIV0B3Ud5327P8/uHtAvSyQ30kXz4cOMg/7zBr/FvCUZ05CeVDnjHzezVi3EGsOpv+pnaT7aRkY0nw97HcrOl/ypz77pViA8f522quAnEF5zMgr+9GI48KHtpJt5moW8pjf6G1H2HUfLs3/SN5SPIV5TqHj2Ult8u0+8/dchXAl2SGTBb955y0823UO2Vebnr+g8N4OWkJPMA7z4+Gf5eMgyZkCrTqpwGsOFwF1PkqDmpyVYF5F4GKTvx+TG33iKsTfyUuQ8PynLiDeXdLc2YG7y/A/qz+51RwbuYovKcx0A12Q9zXTAzQRf+sHQ3gTStN9I1iONI22AavDmhRWtCxUFf4vJHL3KnvOkYdfddDgH4MzP7ltdrCY2kEmKKZbfQzi+5BeeHeGb3v6rJV5tcOgvPRym0XggQRPMcHUiP+ANVPKcM3hTurqMMteb08recI1nO/8wGI0/3h+0j/c3TiHd2q1DSHf23Ai95h/qxpv2l9ux5C2SGJkQCD+ezuLxqXXnndpVU4xYkDvL6FybG2+4bJnnmA0wfrWG2uRzTnm/ZHyrQ5ENdiYBVaqQcKpjigdOGj/r2A5HZwKycxBnU7UTeJhGwZqvXvBNA1hKmax4TmxIK/at7TjpU1uN58bOlztio/KnERn7vNlvYWA1pB1zAm1ySLUm71O/oYWzOOL0khV+qMfUfklrEKq9D8XYXdSDxfFnanP1YaamNDpPe++d6mIVuii6W45kUua+7iehSqG9Jxzl14D1KLKjkYfUJaMjaPlMidNsHUfsjH5Ji/iOUgk1CsDgYhuiQxJby4C71gioNp58XTGDO2coXhRuznJICC9mU6ONYW/makT35JyxkuInEvK+VJ+myFzjpOILEKka1oLW+Nred5j8O2OTiJ1HnqBic2OfoXdtPGLrWiv2SFEYXAODFuqaEKeVRb6gqGAJ5fviET/9eJDbS0cVILHSeHb4Dca0KsW1ZelsZS/R7H3DVmVjfHGUfEQrK1wwgrc7OEt7QdnJQQ2S193HV+erb8DnuaxwS7AjaMKFDhN7nPd6ioBMsqHeKGMfVndn5nibDyrwrPtybt3sj6QCBsSakSyjMIDd6ZwHoQSwkehTQLjHdmdAaubN6RdGy0HDfOcCv0zNcl/Ga4jtLsLbuXFeiG9UVAMWMuY3ESRn6vnD8x6vjfKuc16+asPbkdd8aVT+N4/BFDFjandtKYapVP4MDvdV32M+PiI37YFv2Qk2t+xzkKyoWlNNwx1szK1w618jCH5Z5bAMUAqcznyFsyjuEBMC83Y66c9Rh0VUie9BZEGaehNfK7duVcoKG15FGm4GUGXxmNWXEHXDHAzssZUN5f6mVAtu07VPGddb8WXEEcg5QZSt0nhEX3yIFwfcxD6M/LUYuxG2EWKLxXPoZgWqefuYo/8lr9nYIN3hc2Zul3bsBIPxS6eJVmhKv3boO93nh/oKgp8q8AcqMG7h1TMbAWRcl4VYZf4WN8Moni5a48OClSazuDnne05yv612fsl01UY9XzIzdC1/uB+CLlMS4JZ8H5UL8CzPayY4P1ubMaIjTtw+AtzRWKyLx6LHgDq3+ELeetFvGpOetwhN94zm886HLuzoB0oOVWzh80/Pg70O1htXegxTOAw1XxHsH3Kra1OtIhmxr1DhUPGy5zWeqN0v9840inzYhpMasNs97y/xZNoMRrMFRdEH6q9peUIP8M3zWY5eQotDgTYtyD0J9IYPP5f+DI9pe/Ac//ShuFPzO8/o4M5+Ew/ZnH7zXhAKE+OgxHjEMpfj4kcuH51mRT2zb52zYXohfLQ8PldjCYzx4YahAeG0FJoBblfQdzB++7CnOvwMsL3B+y3X/eWS3QpXAhPwzuQoNEkA7/Ls9NrNO5g5DdxAXDmo8cyu/AQwWz6fb7hQVoIB8j6mIDJneI82zogGEKGHk03xCo4LO8XY9VbJz9jr7v4NbRr12Y5C3aY4fkxuDHWewBQ8pbKFPo3KCxbhLUJbu54ORPMk2fvymsEPDvT6BfUS0jVEgFxEECfssMut04usvvJ4r5917X4dFTq9Ru42WMUSbI7Zk6ehPjPMx9/rxb+elvyBttocX3RaDVi83sXTuOxwIhwSvDLfuZq0LAanM5D1UF8mU4OTDgOcqD3V3fSe9tZ4ir9E1xjWIo26Qu660VyAFarBhbkxbz4gtLvVyweWHYZJwo9yjuXQ837ljAU+6+cvq8wkuyJgHRENfkExvtIH7QY8uHxfNbQ4DERcs2AeNR6nVuyUSuF8URlXKWl0FQLnhBcNdVy03XOPjSGfY14z6HEArBVmsWtFuraSgzC8+pYerqEDEYeIIhujpG0nbIiH7UPpkBwZPBS94hWrsXI7zi5Wj1Z1ustNeS1zjw4RyXgGiFAs7DCpFGULWYRcgUrYpogy/h8DJwg81foTW2Mo6abkJyofb6Xr+bwLDI+kpbjkfI6TXpDPOYywpSGtkBpl3u5LZ7ox0uAn7FAjfBczQtYcVEhxGwYd/Fu8xqZN4DoUht95eU0toaNByaDCR8tZjCi42b/h+KL4Fj1I/OVJeV5SJbPw9hsPgecHbJVyO72LgKwQNg12NRBLmBKY5XchmMGyFghCqCxYxI1PKc1NqfxNq/6XiaAL1Y16Yx6AZTOlbifUF4+F1hmXS9FTYu8WxOnRPcm8MpR7/J1t2UrBw/MlBP0wguFLOQx+EWAruJ4ChN8K35OEFSr6n7IZZwhDF2/BXvQ7k05D3idx9lTY8YmIeKqB6IXl8OEBvaApAHqeu38c1wf+AcDE/nnPKkk+sZAkObS3dX4iptGc9f7wHyIVDs/wOiKfEHEWeKTJFMFK2tv601/yOSfVenhtYzjiRQsz2Z5N02BrijY8PWe4w8qaW5etCKNooHit4a0LucBXQGN5brtgC3FnWlhgJDDNtbF/DP2otLQdFjQ3scuKKPQyWPc37qrxHu5AyyRorhssyITe7tj+LfEnh4XnKqB+8/w48Jxq8NcSdg559cWRbiRRMs5xSrqVbPdZknMv5ph4Bh24ENHfSyA19f0L98w3UDetvQ7Y6braELMybntRcCbRvQGpivAHexPWIOVtL4JW9abSMTRHhuik1b8MbSTbOuT4xX3O94X6AFzvzhYVivPj/4wy7Pd3LhTomYLb6V5/Q+bRosWeIWp2/x6b3C1HSqkL7crL5D/bEPMa1qGupO40X51xbUuGmzcrMLSir7O4PJGsaVnWMZnO7N8m8H810O3edd6h823NfEWTP10fBD9Q9CpfT8+634nP9WmZFQ0435bmQ7S3NpwHUo5/qv8NP3xwe7m+G1jqdetX39kbBZwgFduDuMzPIddU2xC7x6V5Fc18IhbUEhh45PEzNGlw0iiN6EidpEEG1W13kbTVoGq8WINaU2iY27FAuu3sH7Fb13sYTer6Ds0r133c/sgLkS8m7KppYBvedKKyGG3R0LdPCWhLsmREeb179vsNKvjXnaU3H8F4NIJIoFm1h2ifC8gc2K104+tHnCi8o4qafJ99uvMVKBQVfJ2gXWO+V39G3Hdb8C2wW8JyGgMfQYyrGxyL+gekc2sSg0TBfDcrTPfLmzWXYNQwoDTa3IlB0ovpob5Y4dNdfq2U5TBn4gL3NjMRjALyTXcPzW5V57hryLT6v4y1dwc9p7H02mH9bemO3TdX4nXnkLLvVLYBeAScPvq+pLC6rku1GIp09AqO+GX2ahXh+qUc8W6Rgw0CDjonDyjBHf+lYzOdCNTSDzjiD83Q/84g5cxQWvZMA4/e9Pt5DGI2ToVWHeWZYYArLgqsgSVvCTtxUpyZnwvDxSzGNuifMio7BE21UqVGQQQnmC78Gy8JzMoh0RTxS1pgMHb0PGmVPIg1N7m+wvEc63072+lP78PeoIq8wcd0cYhKiHTfXlrDu+lUXCcSXloD8H35NO7eXC9lcwDwhgiLDPl+m4jRiirJyAp0ncBhOaGr8hgoME41Y3Bwc8rNqhRAxfOZGq9XfBJyooGazhdmY0Tl4Y/M/g1v/DGA5mASaQvk2W5lQP8TXa52rwUoF7rEG6o31jW6u1TZmPiMz6rvPEusbDSx75v9oS/a5j2BUPCLep1xXB5l/SGBn1IcowZG7/DRgfwNf/miD23swjwhiylnYEbgynVIRGTdULRPglqi5B8xjdu8fcXQcPXa9xMrf0RapobtpbuoFDKe64+aksXJRlRMAflTfw6ynME4eNwAqZ0X209a2hlPEIznyk3EcCIe5s1vUBTmNvcSd1PAC/bwn37YXfUL7/nwkHP9C/yFs8Fk2cnH0ZCVRWQlnw4XNjjz/bNJbY5C3GcdJYWI0r2JDslFdaGle5WD6eaBgpjjUBTFMFw4x3TenMz48pjK9AjA0sLoy3hsbyazVbX3o3elA9+4jXoAbqXY4IOjvPFi6KDXenGcn7RSPOtlTyOE8jP3IYljDBQDnTgNKjFaMychMzBB214j8y1ImPeJ+Sg7n5zo26fX7/B5m/VTMWYLnmIn8nIvA9whuHv+CMbBCS+Cj5bEpCMl6G3+AYFXachnbtoOcr+NsL+hOBL0+GTNG2hr418GUDLsKbbbtcRXjtJEZJvItOESs/ZDyS4pW8lyJSTyGNgG0Dm+dRdWvGCRdx5qkzQebh4c3C8hv0b6r3lXWchXdkz94zvE2AfnOd3kiwwqHlMGVIMO7cfthgrlHXw6VQ8AOyiI22DBuy8dCPzJrcNqRrNFraa0yHcR6OZ9Om1jbCtXZY4ncZbu/kf1r4j+z09w+//B34pm7bG0TQYs8/h/xnuBnGA5yDQA+QnJWnDqLlrzFTJjAg1TykTTS/0TbQppboW1PmCsj3q8GPCtktS8R6SzhA8kMyhlifi0vjbpbn+xXYd8ji2dWFY1hxiplJ1/ML1RBXpsxtRdUCC4SwUGW5CIgbwe35WnOiV8eS073s9XTOvWhOTLHkYwjT2VrTA+wmbpB6k3ZnrWYjdyo5fx/hubVJ/472MNZ2YoA6+i7j2q9XsB1mQGezUdyj5D6BeQGEzjR4vewHTR/LYYA5AsEnAviT5ma0z13cyudSf0t8CQZXtp+B9kUFSZ9GXugBvsjGYvXJ/lOQRR8ONkyYvlyUFX7iJSc0wX/StnqtdlvO9ouW923h+uCRwEDRTXiPcGtvfQi3OT42mX6wpG5gd9t1JnwkB/3mDcG3twDEjTvA+AjA4VcnnjXuxWE5as5NZD/cHOdXN5l5vaMLgp06mtbtQfftf7vbehQ6ckk15q37v5E8FMOMwKiHjRl5+zple4nJPfUz0hMW3FcD1bYbXhq3G/PKv6YXGh+D1uWCh5dPJAcU31T5AoR0VchY4UxXw0XeEbDXWXn22m30I9+T/hlu/qCoOcb9eK4MhqN9djgdXXG44ASrZ8E08q12PQy/R9GSF09zChrSSLvXXNIKziaq7inH7XxOOa7Go9ZFBvKFZJbotgKjHeeUvaaIlo5W/X6P4oEgxaOcBxi9vUUHpck7uDhrF9ju3oOKAW6h7UdS3QoVvwbijfiAv9VtR+Q0gIK0k2KObCVpiBCqf6llB5rQ9c5zr0LlKo0z5KoOBqOniSVmddvOKuCPPmWYrXwgRQJLDIqll9Nls6Kc/DAczNGKUETV/sGvubG/oowRQjmGsNO7WnVSQfqpf7meIhVltzQvLJoTK8VuHEpqZO1jFbqxrcpizhEHxcBQtqaYiOgwZtP4JsSy/Lb8cBASs3Fe6TrcTHarPdYX/bWDfZ+fkSovKh6T3dWu+0Nauu9V2p3pXlt2FZyd0ZfXTvvtFhwleKACR1+6RtRNuumkQ3GsJR63M60ZPlU/biYcBxWQierUY4pdHccN3DvatqmOv0iFqpKdXGVigni2MwdrP0jOAHqHXT2TB2slPC80mjI+mseOJ6n6GVP1joviZ9AwMgSQ+d57/TzQkbfX995z+T781M/wDuGBqRD0p8o4ZmUOBLuU0hmecfaKKDzrsfA/WyfQtYOuHf35Bf1ZseXlgm1roKcN9HQR6LuIN48LE3jr4L3j+tKBZzlD9f0AxW6Nif0ci0jOd4nU++jWVIC+Sbv0mkJhhxK8m6u0VbhHeP4ey/A/NNwWoNPhCwwiacX0HqV3Mss1yWIfIu8rBGn1pU3OyC0ctSfVM5+X0uL5qGH1oOWRYGs1LCbqljW2GvqbV7kxTpQKMpXxxDw4anANQqBYoRQG3J5ZmRjj2fU7cW1TYWoqo+YHi4S0cIddUj7JK33Nz9POqmwkUyVDHIbvwybtzTTxB2Max8IpJO3ROFhaZU5ju7oH4546lwi57tjGg7Ky2GzJPqIVterzrxrV90hjvHpLz49MF78roHzXcLNbtxJk/nVhGTUf4j8wHmd1F1BZlRk47m1L7SDza4Vk95Rt5ZeD/gUdsUMvSsdK/nkD6AJgAw1pcynZqRpBr8DmLhbkneUZrC7UVYgOu7tMheZqdY6uQvJu9wWzegQya5bA47bvMTzvZJi1EczJmtg+cD1JINH+nMaoezUVta/Wf5kNtUIjuW+dSN3G0w7e97jHvZtrOSVw0LaCQ7g8lJtekNdAmVU/CAg6JQoGFKyKpvOX3sH7C7ppoJowAFCGucmh5wYQZy3UjD+lMnbrHu1Wz7YKFd7ps7mhFhoQhxU5vQx85W/S9y/WNZugkZ57K2M9WB+B4q4eLuyymhv46y6XUXFLVwgYWHIaVyoshj8urDHmQBXH+DrDDAhnYcmvvhZxLfLR6iUD1Z11kabN7JKB7Hghr6+34AlLGhurosQgOCd2c7YmWj1EA+MXXbHftO1fQfigX58TOF0tj7ErqckGfRKX+cwYD1a3ZvWe5UHUXXBLXvHhAn289TLJyXJ0es8fI6xmqiYdDhQHWmWrP8j2QqnVx4nLb/4+kSZ9zHLtjO7Ia8Uy81EbfKZM6DMUwSm94y8z8La0DUAjsLkDTyTR9kCWJ+IZZESITECn651Q/lzJzCwjobcSkAmF9DvgaUackprr6C6PqTusNhpOga+R8+EEbgw1UdAAT20A6ftJLml4Lm2opae4nDqEujqUUaejyijP6BKV0hReaUQjtQWjiH4ehbkPYxz5jGXH8tLwqnBobU0Kh4c1yAjy5NEFCOH9ok2kXjYKzJvFS8MLutwFbl91z0aAKIupdZ40f7wv2viwBI8JZ09zlJuVACLgB2XAq3e5apFu7tInshdDovttyxTWzAYITCJy1fNABO9ESm5knHop21Y0eRvMCt28mji7qZ0nXROZgITnIU1I42AozI79GKb3X6XXGBKcEof03FMSGj5rPvPopIKqzowdOxozQE0E2IPr9s4dexeFNrYi2E5eFUNwbj0VAbtxfqR5mx4mNx1V37UobBp+axR8J6GDuKnHJ/Un0LLz/hj6EsZhXGKCgonWeZd5biZ6Pet2b94VOEwRAv9c3CIYHFYimpVUBFyPMScNT8OpXqXxqS8rDLdYEotUiq2cYcqNULybznd5aNfMS+eW9JRvoHgce2NOzywPCoYAACAASURBVJa2azxY9kKdY+0UzyVs7R+qX4CfpfHfo6FhTOXHiBjKJzQ22pvoFVi9aQQPyE32f3bem1MvkbR/Ek92jSh4LtY13eT0AYCfHRu+zdeOyHUk0l5WnNIgzvJ6I3Afb4eP2eIGUbQBy14PhL2xeNXopHhMaUBSCrDxK9dI2PzrcI38h3Yk9tk2RpZ+mKwybF7P2JPmpUd9Cs+pjqGZQapR40aA8f6U/pev9VsZ5BGqLPoAQT1yFps7k3FXaQcFcBPqgN5bDU8Pi3rHduXFdW8dA34pQ8eLdqzw0bop6/oOsk7p0xouVfOYAsFX6jOM+zFsMCAdD7EzLo035nHZtmGc/fvRJFP8Gkg4uNhD5dUnWDR+yDL7QsrYbhj0vOY6ZBPom480tsrkMPXIzcpPUhM8BQb6jv7tGR0d9JFBvwBbu4AuT+CnDgZhe3rCpW240IaOF+ztCtAVIoOz63ZQaIzgIMOrsiMg6BVqAK7M2FllHIqoGQ3m2a9oYo+wOsHh0aIYiNeY9HSd3Lug3xjuWHY/IqwF6InJ8cWUd0iWRie/5nkgPHrYeDip91RuaEWfbXewTHc7rjAqjwZjWgBZPKi2OVFJGne5HDeNmVrT2OJpI4InrWfWRJw55GEFFgG5pbcfRmHSR4bAi9E2HhJmQxg6L978NBbVl9xJORHaIkPGpX+gtfd9ggvRcTx2Nj+vGQxXkBgJZjoUTPgbuiHg6ZR+1T5GXdf5cUi86Xrov8m3RsCn/xt4+f9qut/u6NMfNmTuczFZh2M1FDHmKUUmBifj+cMC7gx5sWV6smKqV3W8aaEa1zRWMVUc707nyHwdzkVmmD8cFnHrw7ANCw0Z/LgprQkyr8YgPKHRB3nhpptMKE5mFXBbnJYrlQFgNL6Ke3ZW4bm6YReGTATpve/o+xXUd1CXIwW3NN/lMmln8nQjVECt0OHMBKu2pON2FQL7nZgytmzcoY+9/vY0VoxEnzN+IaeBsWdjdDSx3Bcf7mhtR+uMfn1B33bw9QrsohXKxpA2b7WQU05D6f3MQDxSRT0E1rkJhpw8eyV/5EJwcAdensF4ljF/edI775to+G8Xnf8N2MJtLFo6OCaFMRNiEED45BWTufFEB36Vceu+6WCAfgMD2PkzUgEACPxrwte/IfpmQ/M55mWWwNa0/m68i/Eq3IFdj9H1xJrRxR1WDld1+92BrlrFZhU/4gk5c7yDrySrg2LijbcZDkFu9i3HfduP09wTRnixd/PQ2uvnmQEbynK8luIyUNpQjeaEls7z5U3nBvQtrIIBgMSLAekVAibweWLl8tgOnOyQT2DmSSsrZJ7YHclcQLgCIBe1EHpyoz0PXMW57KXbujPClNP3oQwbD4uN/Ow4YU+sMMe3PIQrcoMYMvYESaxIcv1FVyGwjYQX5fMl9dqOxq5ddpxdWMDhIC+3Ib3nEaX0v+FuSnyli9AMFdEHfX7Rsrl+RyyzIvhntY5s6nK0eYFyKKQeV7o6LmFKSQDZAmnjRdhurktNiQNypUVWkGmGq0U5jFSA3kjgTRwiy56kNUbTb1KPHJbE6OtIUdwb79XBqGAddyN/TdsTO0Dyvvjw5P8T/zH6tyBfWRXgajpO6ePdYGsWqKyCOXWmBH1zqalHtT0mYOdEz+fmyRiPwqADnDoqstdRqL2hkq4CffjNgFxpM7Rp8YpwnZss15nRu7BClBcWMYguoITMGfCRJHWr3Ts7+qmwpEWxucXuqe92NiBKTFKdfGtK4iSvrOEOEyIfkw/Hog6SJkKFHwZO6cdoczXMmpNCsG14vCUszarJKF6F7DZzgQW7XbtT7PIltouxUbqSR4Zc+hqqgDba5qVDeSkDGIpDZ++45ZvgZAwrWlShrd6nXke9KH0k/J6QOnZ2ZzzYqKvwnGRPgBBidQaunVWHQ9cRQ5RovQmhnkC4uDBL0aJTpQYR2hHLbqXpeAbeglqcG7ypG3gCyLxWEaFRR3MX/wt/GYbc8xiU5zGMeIOOEg6V3JHsNeHOqu8PSv+Ml3U4VTxmQlPHOUaHdLqpKa8/Y2gXrHCGRM0PU3iKc7gQUFuK2qGA6uCpqORKPBYDgqvMvVZeKxyKLQve3ioSTxOZZ7MWmUW0KJGYEFZaJrjWhOWdu/4ymDvMRtAF7qPfdbuYNoMos9/dDRLPF95rg0lGKC0xqy6wKnKyjlTirQmEzcpkEfp2ssliVQ6s4y6LrWn7De/xwnFDVxqkvEprYl1uc8bC6wgJyTyp0nKbQh1Do9/WPBNBbcrjsAqtuQNy2VcHU1ZSIOy73I++7yI4xybKkp0ZvTNe9l3319bjbkxkHgHfCxqdMQrRbUYKehhxr6P/JJgPta7gC+xfvYJqWmV5j0Fakh8uINZyFjrfg760R+twP4JxePtIwFeDvaAztcjcMxreD6r2+RmylqV+5CJ0LD/hkEXyaJFhriQIPSpqFQZ8Q5NweVC8ngodJ/BgrM6KGHKDEyidBWe8CPnJ1FcEdSR87E3maY7F60Qbeg74GZ6Xaw20FFFrpQ0TEhrktFTzU6+Jx5DPISyJMX3TeKTmXKHXYCr/0Vi8eZJCjCmgdQZ4B3hHbxfsG4BLR8OO/uUZL98I7eWKbQcun59A2wfIvXM7np4+4cP2AdtlwxXf8K19hexzNmzE2EiUol746mNHXa7TYSZ0XEEsV/M8deCJGV/3K/brFa1vaLo77ay8c+uxl10CSaa/4/oZ11Wat6koi78fx7xr4Pp8sKp+SJgF6KvWOcWm4fcs051hsRE7SDi8Z+B4pP6U9rDuA6Ixwteru/2aNme2aey7IZ/jZZTvh3s8jMTwCOPnZ2U4x5aoFaDHcEKxU7FHXMV67MbYh0b4j7Qq/wzBBPUaJqbe0xmNHnHGorxCTG+EyybJrrkNTQ5ERnC1DclR+FGE4UbIWoRTp3iIn/pA63UK3BjixeC9OdDy8XjFvn0+7t6PrITiK15Yf8unA1pZDxzSYGfYDLM0ZEUpag1tI5igmFJ6weA91pTxRUlVnrveYd530QDnHquKZWPAXVy3d7sL3QrqpvDEvl6Ol8YpowA/XEuHrmHXMu/VIn/GE5liZVonQldKB8CmJe/jrNwpYUPbAUYH0wVMV5Gt5DvXUhak2op10smiOV0hZfprSsdJuyovsLTLe00bRBC+SdqmNFUV59yq0g4z9F2GLjPMzdthwhrfNzkaGTD4l/RcTMi0U6cLgdfR2T+0/eq8+XkIN7ktwDhT20/tiTYw3CP3qMwX7R1wCVsDql1bbLYy/ckhxR2C/BFv+mA4QyxnQJb58BFMbbnY+NqYMU/dXqF6h5MxdrxzSxGMwR6rhcY3jbMmPJX2iYv2Jy8EuA6Y8zpUI9kOuY2aMmura7uO54an5+oqLSykKg5jH/ZcjOsVU8ViUzBNWtpcsCDLojvfPrdvUUxOVVgtXie0V4WL7LNiNa6S7mi8CZ/06Uspg+FCNwKQD2aCxAEEfKJfvP+dWAXjrERrGzwgYIJrEZ7PoCH6MCostBPSTGZUeA4KfZAQhLN4xnMSzfhFx0kN44tcPukf6S8VI5ZRudfu76aEl+VDan9+VZ7bRtXwPls/WcdMi5GlHpDhtSfi6+ema47lEHy6CXE9rtX0JCvGSEUuwOhtpkGBRu9CdOvGeZz85aWjPmoKhg86u6AVIy+wak0GZn+SGrxvbXNbNbHQlQOyDlFkRIfEUAO17irl7GVFqbn7jrZ9vLm0JIG4oigaWhn4jErO0sNUTvxvMpdsjZjD0msuqZoAJ3jTtedKSQkmbM9Wj5yk18ZdNyspjYEtcwb5fd923Z2MFxcc4aNgQiLjdTrBPBRYzfeFV9D+WIRRxsqbjxqRXwnYGWjWX+2MOupxL0Tu9iGtwWlLyGGxRgDs6qZY/wFXLcERIVCpCdFQyvGIsuCdNV8u84wUsBjKYQGs8h+N/ytZsqmMVbtfM+WvSZHxmdIMG0gTaLIb5PAMVqW9PMBdmrDbjXuwzxPQYYAy5JMOAJPw97jcjM3rU+bcgirw4n3Iw2aNLhFJR9lxVyghLLi7V4NgUA9RjCmqn5pCy5r2kol85rM5ynmVUjeS+89bCMtCRJ2MuywfqUDbMAWR0LJt8z519fAmSgvwdGLdqXiKZbx6F8UvBgbdaxEkMYy2dGwdcr0ZugrDCdnAK/btMQ/RZZtAG7MUvRhTLzApnmR1kVxDzMwwzuXAZIGPRmYotW8Z7l1nnwj4bZ2YEo6oBZfTgJOw5g3GsuovRBjpNiKUxuYETx+Fw+QxqYsW1HQZtXHM61jSVPKoTL88FDsr6cGQiro9UnNdmQec8s4gADh3lPPHXI3jGuXmmEXbRxx10INxOF0n7CC9Z1op3x6tL8OLncDNaGUuIyvxE0ANtBGwCQBzZ8VxDFxZzxA1p7r62bYLLr98wHa5yNnrhyfgsok7d3PO16msBYY7wRTcx3APovCz3J6U7WvXlgO4HK/Vy0w7Hw4HOPW1xVh4DUb6EeFtd6D/5cMZ4XgPjlzKGcn+60JeXMNiQ0J4VGPePxhDQeKNOLeBIQKMntyJGf/ANe0rSCyQ8vxRFth/evheUCaGWd0nevv8/2D/7f8ET/vGK2j/9OHNC+A7rCAafm8mfifooemhvg/RdqCdk/GQ5TAwq/vNRVXFlEh3lL7r1U9NNrjJTE0t6NhhmwGwadDvDL87vFemS07UZNvn8npmMHa5f5t3VMsAddd+U3ieP850h1j/9GDYGp5sXOBbU05llZ37XHk9TmjIOrHTBlZU4AFWWzm9V5cbgdsuigO9yzj2pX+M3y/YCQ11YfBpx04MujJoa2JhtDVQE+G5WfDbPb/yIxr8bAIht3AA8FnSWTCXymzRjy6zz+NCPjskOAkE5JMyuaNUrdG5idCrkWw6tmvdWfXU+MP6ekpsbTSBpZV1R+eX5afN1/T9YFBPq1pUkqPsjiszXjwqa2Sixj/3mztsPmnxfNpEBa6NZd0qzmuKO8VysiWBBQNMePYNa2j4v3jFqQ1a33y4cwZcY9rxtGD1G4+cIpYl+YKpKW5B0PK4RfGtbaEZeZPMAG2HYPeaQHcu9NUxUD6oz6TUlBUpwVc5M8kesjLKaClPonNk5rb+rHnaWH/Ua4LzaIcpnSX8ZjjCaLDSUhGWk1qYk9+S4X8gFbAb5SKnow2hJGbVUDQlj9Q0wL7ENEkHYEfRrFalJR1miDTj0lpuhUm3sPayj5Y5T/O+QgMjxc8HUIvLBDylrfTDlUtJ8Jdqu01GjuE57l+t6LIaFg75E2o4XykL3sdwCBmYCcTIVTtU5nFXq2lToLD8jlkSngkNjSoCPw41zRk6jyzkALlOO3sTOBofq6+MEMMn16zCRZqiFvSJBhfrJsWNBQ9pa6QO43HM6lPWq5VpfLyPQSLZPryc23jSI3PxAcK/7hvVO8NROQNR8iEiny8bIVdAyGUaaSluaDGwJrEqC5omKTShjkL7yIXumA7Jafxz6/RUNw3DzYAL+9N6OMOhd0VOUbROd1jmmPctdQ8fpu9H+HPBnOWJ8YVmg0qLfCkKvNQjPZQu3hHO2NHvHe6p96h9p46qDuN5AgVZg6F0PmfhUHJ/QxDLydrEWP9p1pX2tYTszHMPgcXLGVHZB1Iqb1rTKqUm7CAibMk6fbrCpbvPkMLkUBer8N67I2GzGBaCy0ATPN5ZvLCYoL81hDt4a+wJuDo+ZPEuUDOcw/mCsh+E98L/j4ZF+z/q6H8i4MsDQPaVZS9/IHh/XVAoYhItL5MwkV7tNZHOg/l4NV76UfPyxwnvyZ1kZZL7an4LLL0DHOb2ZqRmYOlaURnP2bu2oInfsNY2bOpRszPrGYft+5TH2tVrZ2e0y4b24QmXpyf03kEfPwAfnoBvO/i6x5EVEeRgd+HlVHFW74S9d8GXhsu0E4VLZ0a5l+ln+F3DgQA9AeCh1UGE2xpMxzn/WIGG5zOm+Yz7ur+e4xLo+DV2L+kvvXs6vYPND5UexIe3Ai3GQNvWtobWGigx9Mwd+1URQU8wxhyu1LxcYFZjHus/aNcfDaz+g4Iz1HfgjTeHsYolbDMO9jV/+MAHzwDmJTGNd9pVnQXHG/CDjXcLb4WB1+Y3DWXPTvM4TEVXBOtau0P2vNlcBgLcmtgOu/JWu54uFcsaietgdT8b5hrKICl+F5RpDJVaL/sd313v/GZ57uzjwYBotTNDNjOaxg9jOO3GbcOferoCyIyjeZ6yOBQnmBtgcVeEtZXBuHEatX/TZGR7MhvusHojiBYpiy/VLocP3MVtJ/cr+Kr4irkIJKKblOpfw+IjrOuxFwwGeA/t1L0D3FRztYG2JuNBIkRnouLqWKwshdYSXdVSQMv9rIx+gh8/5edfU980T77yYtXlzznyAZp8FDL+AbSPst+Wse160MWyIYf+ElRJ4kb5d++7da4NpPLmalXoyBt7PgQwliL4ffiuAzR/mHb8ey/+r5jk6CGVIxmrXNemOx3KOMVw2ujKb+xQHkTFd5yVIE7W1I3DMutH/Tq3xZusUgBepo2oUTdhUeWQJQOO1Wmu2++YrLMkw36glDh+sjhnB6i81yCCrb/p7fX/VjWIkpigOCkKIUVlsn61jgZ8pW/63EDN3KErvmqQ+zet2Lh0N9psQvRW2yBFhJU5EvoTQTnD0Kn91r+GhhDGvRDwRHGHszjosyaENScQtM9mt+uhthpChHEOs6B+TedCdACz1wSFQbLyR1u+lNrv0Y1hYi/T0h4Lqkdoz9ZK1ke7pqZrZ03cOeYt7UpjEof/YytS7lt8INU1NXIMVloWmDgqLK4p53zr1muMzlOum9L/gu5MOU8Ar/PusECcDuMsA7VirFW7Hmupqm7Yb1pY2kNXBp3Q6rioM5zMzyaM8dp8fUVfV3u+TEqFLAgNcCWBDOu5TmdJ2UlL2JHLHyfezCAz3LbHvHp/qNRQLPOTn6ZprPLrPzEMWy34JO4Eho/MbZ1P0/yjW2kTbC3uCjHccEyMIo8/cbTFcJeOdBp1VSpCzHfGd4ZXbQ6L8NzTUarP+pZ/I+3c7uVA3RV1f3mPhoRYzpKc1n2UIMePz3ad06rQWJcF6emaO5JLZWpzyru8go+s5Y507SzHrfI4saMMFzYMjNakUJXoMwOFpbX3EmfoIcdnGC6903G2NcXeugg6dVnZK7d1hgSq7JzW5heBsMWFkMV4OOHDmvA7rc3ecKwHpqg1zC1pO7fWwLw5H8OpV6aX0XoX3ODu4Qmt7WBu2KmD1GW+jV1wDF2v6VB+rXe0jdBYrn4pmgL5vNjwufflAG5ursF7g3Mv62+rs5PXhqmaRSe+MvDxleW/Oy5MIcNQo1AC/48J4+ByjTo5mL4XvbrnkRR3ume8WaghtFiVY+l3NApY4LS1J4Sh6juruNGA+DFGz5G6vmdHyHYOq1pG1AhbI7S2oVET63OwWpGLUs/TtuGyNXATfr0T44qOpwbQxws+tI/4+L9+BX97Qb92MD+Dn/dkFCId9SO5NHRm7S4OQWMGOvTm2nF8ejpv/hl+13DDAv17Tsj3xNzfI9yzSbovBDN2hCZ9d3ocT8NvLmd8f0NbD8PRoQYB2Ejucb1sfoAmTG5Xt8EtIZHIV/dZufwHEfjP8NcOf9ffp78DL/8AAOxf/8+SX/lLh9VSeHWfvwN+ONnXf9ewrGPEifpOYxr7GRvfKorV37mLxupIKjJzO0p3cQFxskQIKzcCmDqYr7rp1vwsZnZ+VG951JpcVSExC9JZflkO0uP4m0PAbncOEQEkFtlxuHVyMOVjMYyEncx03UiC1VUclfRNEb4ffjgdy5WsNqKpAWk+OtJBNRh+xyrkTuGmNIn3KzoR+gvA24v4wyS4e8yoatjsTO/jgdCtcAb4e1hUO0e9i9vy1sB7E1dSjcB6TzpAIfUhOUgTGLqg2Kpd7SBDD1/M4vMhrSJSK/ZXhCdE120D3U1BhBX+VIGOTOGuyadL2vNcxJYPfVfB+TwfWjjW2887EI9b8aSCb+Gw1fOy6gN8uGxHeh7z7EO6Q0TEcXA3Lp+6R57Dzd07I+6xJ1/npDgLTNjBaEzYSr/tACxXMF3qfl7vNDgjQnqQAJK5yox8PP0fda9TYYiN5zbEr5edTeS6zGXhQ+6b4EXlJ3CtIfskUCPo/XCpcBeYEuC0sOxBYtsxX6NjSj5pn2+NdhyGcMOerMq9XNOZALkHF0EZlCTRuWz7YaWvcHrrAnF1FW/Ccrm7kwzV2lZG7zEPUac1R+5Kt+cQnke6fBCl9lZuGUaBagydUXQ7DsYG63ClhwYtBpUVgvLgZ4uvCgNGWhkVHOKuRHZXseaGfCWYNAWQTD5X97F7ULrfc2lD0juwNTLE5/P1JWU2tgCZdNRrzUrfiNR67aT2swXni1IAuDWFCxWqjPbk5OmDrhXBsim+FaTfapppyCOt62JiVGvwyhPkwt9zOyruoFL3mY7DyEbN9CC3N8GfJyt25ADMTbDVm1z6cqwDW4+C3oI4e1wqkewOzKmxK8RKi46VjpyE+yB7qmPcTwmSgMOYI71E90EZKaS6bbHkdRLvGcrsTuGAEH13fEHlVowypvbNyMGKt84wfUZMD8MNXu0t5d0VqP5OOOjRYgt2nsFlMa/T9Oa0lD9kZF/hfWQTV82+wZ1M+Y5THn2pcHgUZzcQyVdTnNE0BlqG6+1fkoQzFn+L+MPWJzqS4+RXd9kszyZEH2mFe5lRwkW6no/qzV5wyjwzh1MpS2vTXFatettpej94oRuhgNBgluk+XPJLQGtyacYFAKsSa0+8M6t1eW9mPGXtJrm3lzuoEXZuaF3q3NFA1GGIokGd5pGoBbS2J11xUd6xaz+r0icBxMc02fHnIsESR56FzH2Nn/JkP4pLblQ3RQ7hy8QA3A6PWKy/eyD4XvvIHcTAGxzi12XGB8fivcK7WineUd1Um8ScecU4LY8zepiYjtcUcl/691gvE/+mvyNyN/5JcQJDcTEUR7YNm16rxnv3vQCBsLUNT+2CbbugE4lRCxgvvOOJdrQPF2wfnvDp5Qp6vuLrtyuu1x39ZZeabL+6Cy6nRiA1mjJa1VkF6JnuAb6PNl49jKiOfGguiM/P8G7hPhfuZwvhB+Go9w3HG/3T7+9UdSG3Az8OY3YKt2AYYNiy5IMrZyrke3WNNjTgrrjh85TMODCSA/4LoV3UKk4RTO8Nbd/FHYYdBOdngrKIFN2aOM9Fe4aNxFFPf4bvF0bL80K4lyB2sKaK5Q3W892U8TLX1oD4gTX3trneP3sYxyM+DO/jeN1idmiJQt51zMaybDM/xa8SvmX1Bt6rcblRA17lnGa9X+FFW0+HiwCzfBN3qtWdmLg4B6ix/IHA1NHV+tCsjuWWzA1y73dLmt0qROcObLqF7ioUZ7tXWxioMhosTJdr6dvpqqqFzyPPhwNShq8z2Fxwq8ZxB9CuBN66WFJ3tTiiMCCOA4mMyIdN6AochjnrFMcIRv5MsCHJWWgTq0CaN3FBnQ5f3N8sz/UekR4++uiJbG2eJGIVKrvVkfVLTTa5BW01GDCLdYVlJgLjqR6qXwnYCMQNhIvMr1xmGR34rYVl+dEG9dTfoYaj7o07vG0TOPV81n7rjvbXURSpVu4+WNyYBeCqXQYLqfIVbjSfiIVeJXj3pBm/Jtx5FFZMyGtw6wm/c7M+k8qVTSPWG3y2Ka50fF234o2GNG4Ue2Ctl0FyfyF3rdIszzgWKKfGlXHPdC9trgnxXvDEgq4srXfnvvD6ayp+LIOX6ae85Xl1uNcSXw6sL5I4wX9DKOStDIZl/qDRSl9okx8CXJmL4Rbew0qbeAQC8G9XgJA5zP1xGPJ87OjMhebOx1HwcyoU9/7QXIYL0psSITIlHIPfSC9F+yyE8Jzg7tuNZJngnCC04xcIW3lNTdgh4rxNx8UozBPLIfVuylsuuK44yI47CEFuRkULGcslJY4lkOcGvEbRmZalkq1lkWSROeUV4wu7OTvb+2pJhlNcOcb4A4PfvJ5tbNK4OJin77cO4AbeeFrHShscJTFcvpgTUhmNNTY4IotRVYb7SMydQRcC0Qaz3m3M6J11fJTCFe0S9ngbH2MFohLUl3I+UH9CEG4jTgEDOZ/nyYWn9qWC43XkGxZjM75RroNiHDgXnPI6n6dwjizAhSgPFvodoiNkC3dKouAkdC7rbEUiphh3jzO0dBy39QgEZl2lWTEMGTbGcnJRlIFfv43zYyNT66a0PoUc5BlKFug21qxwZDgzpbf5NFzqcTDYszo5l5wW5oPhFm08W7yrb69sxu8ajLXL/BcElp1jKt8TZiN42vAkG2tB2Le4/XnF/TAdfxuamX7Df8kcO/BUxptN7mk50bMZY8cYeA8LbRFaYC7VOTU6ys0jxlBdc8tHNkZJMK5/qcYo4QZsFqo70SUE0kYiieOy5+BvRs/8GQ84Li2F2IwYngeIkmKWni8QRKhERNhJ9mOA0LKdZd/fWhNvOsxoraFtm6/2Hbscf3QSC3SSdFJ5E8MBHT0yXNfV8rxZXJ7pRIccPRr/MY5wCpY1o1+un1bJM3SVTKsM9eEdQoGSdSi8gTbqs+b7bUj77m7bD8I4ZB7Pd3XpR4flucLdwsgVNN2R5eHAjnsi5u2DO3nESP9LuKNvw7nXNJ7fS7C7QgF+rpeeh7Tm8aypyjQA4MrY913cqSs/05hceZoIaJsqCdGOvgHbxyd8eBLPbHi+Yv/tK/rXZ/Qvz3q9Z1JAh50LkBvGGK3ZexK4m9I4IFd86hmL3d45AUFGancN0s/wmvDzDvQpHGxS3jmM6LWA880qh42XL0Z9mATuqyJymqHs8d6sZX5OjFhiKtz3obieJbu7lVnuct0bqCu75wepmHGzNk/OdVKCw0Gr4QYb9TP8TsH53vecgK0B9Al4/kfEff4v4Ov/LCr/Tw4njBRND9+n+vJ+Ute7N2M80EpxGVdampR0jYu5P7uxJQAAIABJREFURpx2JaWxXevUFBM0Q4UAgjuZd9tGpvo22ZRigx9Q2z2y6oKdVfhNere6WLszQOKq3Q+ukjo8eU36PyGu5RkZzPF92hTpf3qiwEzgZvco7p69bXaM5tcm+x5LumCM353IfaQPfqV7sPwEUqGF0iwSK25uxpnaCUg6CbGWHeyTHw/jQOYuxK7erBciqqvQv+td4AS0DcXqyMptDaCrCJLMYnwXIsrbBYRdNwZtOKsk4Ldx063t+EypmiN8Ms5Z2jW/jFZ8eUAZo+asC9EbgboJt3egN3Ftb4ckj2y+xr5aRYfpcj/1OeOuA7bpdt13hnGYGcCHTfr80hUlaKI+pJ0OdBi+87P3FfNJ5WEuq5TLAY96wNeI1T8GCWrTtS9xDczdV6SgX0rrLL1nfLtk4lTRZImQps4fPt/WzKfAB4sw7lWPSvPW3SDD35dVGWgdABcyZQEYqeW5wkKMKE0gZqz/J+XRvxxU40VTd2tmW8PU2PRkol4yuhU1G9ywxhcFWzucIaiwVsr25a1lipWTRVgdUUzTslwfybsSVudP/k5J1m/t1HR252+e2cL3sAsw8kCtoVjauoLqeWlWgXssdy7VM7KnltREJZxMQ3wCj+7CyNESPcouyIvrWdURMjTKV0YtCz7vCQdLlVLpVllsb+cMBLiF47jGbzcglaNwalfWhMBXcGZrXXUXzZqOSl5rC7SMEP6OY6JxHI/RkToOzudJJZXeOcxTyWNJ67stkmhnhfmxfeNzTTcK50PM5hVr22LVZAEPJWsnh0ke7m0XpkLR3G1se8yt/R5hHLNFKybX7Dy8RznLPhTYqDWNfzaKISSn8r2lQga0q9OSYI0zVmVURH0QJn5/jLwjX8JJpzysPy7aQ3PSY0hZJr4jHKWv5TFQlJ6CflSvGoelK7/FgAupXa9SCne0UvJTDCGPZZ7Ue/yN/a+qMo690H66xfNcWlEeKKUmK+mp1FCwsvdlWa6IZRbtcCH8VIcWaNdP1M4v4IVSAyyK5utSEsqNbBT5HcdT5deMjhuaHHmMbPwiNCt7NmHNz9hILMlFWKSWkn1XC3hxbcwq5Nnahra1KLerEiJ17Ls1Sq3Mu+ZXnC1nHbLl06162B74jARu48EEv6xEwz8+7FTnwvkbyq/vF+4pMKd5FF0Askc/pGkP4qHvSfgyT0JDm+9tZqEjj1Z+TwXr8BpL7h8VTMl1DKH4eruE80CLND+GUzoMTsM50MVIXiilM/5V8QUB4F0+79eO3q+CiLYNtpUkZtkDtgZCR0cXO5ePFzx9/Ii2NfSvz/j23//Ayz831cQ2Qymp1uhI9uxm9KWzXC0ZAnRpPsFsqAi802LpGzFbzGM54/wZ3hoWAvS04bCdkX/6gy2SN4Uzhv336eeKAZ2C71TyRirNzfjXFs9e0KL2g/1ZbcCqhQYnVo61qZkvRLD+osnxTO8E2jbQxQQFDHMx7C5sYe5orWpCNRtYNG1gQCwp5bizLv4M7xaWjAb5f8dhsCaZ3qeKvtT364HwXA+o/kwMkIXS4gn38pBoNb7j4hhej/b8R0v+3kDpYWrWuDhzvYs5/xuAf72m/rEew4WJvh0iP16TgJwVRygp7VBX42sn70Rg9f9KG1yAEK55NGwAWge3hk7d74b1wxPq6W+HCwvQwTBLdDspSY9JUO34NlOkm/OvnUwa7Gx+0AkiXFN3dp0ZjTtIFQHkfrTmA2nTRciHNqktZRxHZL8Y5yGdbCjC7ScI0uetgemile96tzaLZN82+blE16SNESj13WIblrjRxiAaV1MpjTRBc4dw9q2VJLJmN4DUVnIn0Tz/GwHqvQB6wAFweDEwMJrwS3ovm+pADseazjYWB0BU1r7Sd+dnLLu0kbiJkI0AogbedH7SBtyEOhOOL7zP0YbPBmBImnERLfLfg0fHcAirizCkkxtvaP5uv6frNa3/Y5R3Hnoao7wxtT9ABEVuXUD+UYTnXazc9HBPRRlpQz82YDzJyR04aDTrKds0X7c47clRmh4mTytxSHtU2irM9DucWNuaX7mzNzhMLZj4qYsn/S88AQD+B7smeY5iyFw9mV+OTV8JnzXGuCrGS4DKcCDL1ggCfrO72qc1UCPknCKvM4JZh5vwm422OX1VDENdPBkoemC/A529TL8mSkW2ZYhMKI+gMdYqix3DANq4TAuOol85EwlepPIeSyJbO+9gv8oEigaD/kWZ+T3KWbTaNz4mRFGh+ACQO8JijSiuPxkP3WiR12xG7Z5jTvR/CmkZusV6skaJObP8WWSQ4X4udtkx/25jPLtg58Vf/rYsxywTuaauNFPp+BK3MjrvaCQSAVLvHERz++NO9TzDyW7XppjjRM2u/5kgIqFOeRRTvmKB7vWEy4cqRK/lWeqJ95k7nX4T1FPUHX4QzDWxpaVUF0X7NU4mLtN+BNy4YLD4woCrD7C1hrwNKzgfNHBQeu6kiRLKtvaP41HnsY7NGI7ypWwFGeQ1Untr8QYXPteetraVUjneW3Z1S6/OYUeffTuTy7E70r10VsWihBe9pSeH+qvoW8TX00yICxUm7ypEwwoX3ZrL3yuEpfjik3zJfSeoclDa4xorRzjY22SR9YKul+9h+73ilyxuQT1RAfx8XD0VWx0pnylx5xKtj2o5bsk4wZ/dy82pmKxI5c/jshzSjDT7MNwAIdI9js1Taw0XqvkYjN7EUpuY0VK7bbkXvUXYqrNIqHc7UQakFteNMFhuhINeYbM1sYy0jvbu+LNRA1rMQtsaWtsCZVJHIxKOl9S+kxuYdr+6BhQKd3KNkPz5MXZBweHO3u5nz/xlDBHBvGHlNZDHnC19gX+dyOUc8Zo58oQjon57yApjU3MkhSjNZ8vy3zg8y/2oYONEgO/ZfcCXiX/P1t0V7jLqOC/gxvt59ltH4fPHewXlB3z7UbEI/J1LQIlb1Hvvmf67hNyfEdAS7HFCF4TK77F5iNLrL69dzj8aA23H/vKCl2/P6ETgS8P+/AJGB/cd+/6Mby/fQJcNfX/BlXbg0oBLAysi894rou55fYDVNkGutWBAPDZeATOM6nmsfW/7g9f5f2hYW6AfCl3/qmHVzzHuvcfikO29HXS/WwXnLRahq+3VbYznfbjWkbCN5aX2bOTtYyJwI1BT5pQI2BraLgfhLGo2M9c+7jnP8MMKX57Qp/8UiP5LBwJwTbPaIC7c7dk+ja6LPPPq+SjNDwz3NOM0TdoRHKGzs/i38DlHDPLdw68N+DeA/3WQ/p+PNGas+BbOP9rVKlMTZjklZBSW38v1lbLjFFjdyBWOaBP3QQANOkWsQnRj5m2LaRs1uwNdhOdkwnNTy2Z2OTrASYs/Ne6Wi+7xk28gx3HsKS0B1wZujK6nM7SpRXV3qeiE78kq1PjjVhlDftxsSxB7INsYC80kpVGCT3YR/IOEed6LKsNxOAKng7aUtg9x6YygfPETnW7EtUdCE/JSB+gq9L834CNEkK4Emc1aC5xMA3XjbYe/S5yZw8qiPB0Y+FhY3ABXRbg5DFphV8jdSdNOftdU8dxw06386vuizgJkJGNh4+tjfFLFQdEFCTwEI7kA1qfVUfOA36c2jmM/fBqR1D1BcUgdG5YbCLY4sJI+M669K1sqie2wrlac4MSvLlisj4JuePg+rpxVGq0i1Vu7zt69LDwfOXWvxYpMTV0N5VpDPAQ4p4HrY6ReMcZu14dfNfrflUEHjUDgry3wLgDy96PaYq4mOSKNxzIJXvSPdHEzADTCr+0XNLV8+id9K8uRiVWYTq6JH/R0VfZwHpIWMDn+cZGuPGtfDJ3KM+Gbpv6bVnOlOuJ2JsMAXpph2nlmLsI0CDrWjEK5GZvSe0M9sS5H/BnUaIZcm/28LNfrgTA4pQBUlWNcXhU6JUpiut1Br6lG9MbMbp3PqC7qvd5ehdDxTUf04KBtXJnrt4pdzlD4KtNasDfUd2glH9bnLuDVQ7G2NV0fM8IOd+5ahr43T1/XckXi43tpzkEXmlUc1yJ4hsVo0eHLvN4XgZdjletdlMUQhQOC8i607I6NTyh0RGktWZ5X4XmUMPc40xT5++eirZLxjLgffRuR5tn3W98UcR2WU3HINHcc5M6/MqWeU/3Vb0ZRknHU3ALWfN6EjEAXBPRm4NPX+TvP8bxIN4VFOy1+WfEBTztB1lF+i77xveSvaiJnISuryFZsscYTLZvzH7doxK+mxraiURXHH5V2X8hW38eJEq3ntA/E6PI+LPclHRX6Y+Nl/EEVwidMkgbCrQs517TqLwtN4DpmQgaChmyNsG0DptU9nXlV6Z3cMt7QQrEmR13TUOUr+ZM9FiVYId1vMYlVuQtv9it2EtrktN6UHP0OdBlDJhXwK2Nm9K3puHewH1U3tvMV8abXIL9OSxP/lhXwSfeDbo2uH4x2FDw4slX2Oc1xmYMlJ6FIc4l/+Bx9n4Vby39KT+EtbsUv/Zbp2BiXAg99uZthuhUSXmwN6Hv6ZpOQJuPR/j8+YAft+x3Cd6tqxLNrC/S7Syt87VmjDxnLHxhGuNY/W6sLuI5bp3SdMMC9g+USchWgA9g6+NqwP1/x8vUbdu7oG4l79wbg2vCyv+Dr8xf0Jvle+hV7gxiTXtS4dDfCIX/lCMcUk9J1lNhEOUm6M/pSWVxVuApH+OFneFOoAvTC01MCqqPwV5iQgbgsu3S4PXhlOLdw9Je8qMdmZOE57Fl9PeR8Of+RMC0KxbwROGL6xqykgiBx285N3Pxkd4xMAG1qhY4O5i4H/cXPn7SD7XG0QHdmaNWcmWH/Gb5DOMUJi5A3rKMW2q2ykqUhAODXg3RmpHnA+K2sRbzYVRs40v1QSDocnnvmIBHVM3xDB9/fGCbxo9dHY8JVZpS2r9L810HF/xjeCw6151TguMFahZxlIgeVkeTsItvoaEN4BDE33Je45gJNrrrgz+S8Hv0bVVCAjq6CDbekcxyLIANKCtyFnLc9bZI44XnKvebh93hI8idKTHugYwZIcLxslKGWKM2F10Y7mAC6GL2KoVPfut7UfBDkdRmd0AHIrj6lyzavwX7KODW9xrmJ+yXoeHJPA8khS1vsRaMiYMJthwzr55TW8laPGtbiOqYEFzAWPGcvigD9hMcKku/kBSWLLL/vaaT7q1D7QzAlj3EtjWXZ/OV4rTPBJyXLpVKfuvKzQxRudimeWrDawbp5fEcfxj7hwcID5XYP31t+p2jrolunz/b+KvxqfI9aDdo9z2c4CvA5XkQOZVuSuXHnHlt0TZAe4NreVBUiiewUK6DYvQaQXqbQda7FFCW1zu9gOGhbdQo99QmA30MxHgKw1TQKx7iksefFiAWFyMlVELW0eB0Kyfa2Q6vX3VmyuuPc7iC3Qq/ffqUP+LdrF2ZegJbg/0kjvyDAKM1iyku+ZiXYmmwwN6JROIDsQj3TJIp2sF1jAhSa5l4ziPTWAKF50i7BIzYPcUt34G9XetMRZK9WqFbPIKrf8t3kW1ANn782TA5DjRSIvTwn29AVnNBfhqGdkiU60gcY/CR4cXw+TFwKbpVHo1eOgJ4ZK5jySLYQNoUrq1rFyiQCf7sSJShUdQfrY81p1SqumAXPM/2ZXG0fWLCs15h9mz4i92hcfFyeeIodw92u5q3pXSxLDAjNMndOLHH5jnSNWVDhVcOGejUnQTy8FSWXZRE0fyPAGFsTuBRQXIxTIUVTDamfw1yEAgOvPS5kPhEAXPBS223lxJ3nAa3RhklsNTZUdHWT8mr5OOY5IrnThyVyT/HT4Nf3Ap63mJGYN8lDHluE5wkHuZCtsmnpTwXpnGu0BcaulGFlBDIc+3JvOFysc4Qj2FXcqmgbhDRHnN9zIXes9xJe29/zUDC70jjupPeXD33Pb9mK1WGHB0Ifo5f/Iv5YHDy+m6DbPcvkwui4hmn+pnLnd6uve63QqRzeTYmc03cTdutv0jmP+lbTzwcg7XFn8697GlXYpQxzZS9MaK1h22bln94ZOzdw73Lb1zA+AdESS2ghMPe/JopaxgCxWp+TX83rd5zLfeUNHbvzS41MwVms2IkaWiOxruyynzYa1nS/zwz0Pbch0SnS45KW/kzrz9uu9JEB6rIGAs9QEYwVhZFxXmgYLENTEDiJm4mHSf+BISs5uFLBj23SOuzi+W65br4PWvz+4Qe1OXtv0of0deANTnmuW8H2DYWqHxTINxL8niEriHPgZX21X+NzRDQlifxWQLc+1yI6FHdA4BgE3juuzy8AOrA17OjAUwO4ob884+vXL9iJBV81xtOnD6BfP6N9ecG1E16+vAQRJITRKUM3SrpHIF07bQO2DrSOvjOwX/0omTkL0B8MPwXqbw6DBToNb5WQzy4ygVevnB8+d4uNj8ffk+6dmnBnGnFt6NxD/CqnUdzikggsQsCO2AwcbSLyzmg1NyuNJGdQANh955cG2jZgI9HKsfuVNMvWGtpF3VZyA+9XPX/kYw+WJkS3iEkIm/JlvP/DYewvFh4VnL9HHWZdaaFRNQP6/L/xYfuA5//+f8frdGPtzJUg7oZc9EnXyp+CvhzOiS6E6fOIw1f47h2aldfpUZGHVenhjn3PVuj35B/6VDWQc5vy+4hEDsp0vGRpssLSIiuRCs+bwK5da3FpaJeLbDYvm1qkN2GUlK/C3wH+zeoMgRRzA39WcFdDc/q3NoXyH6nwYY2+R577uP9LglC+MaDa4soHFq8iDHQC911omFqgx6EwhH6gpbtwlR3ejcY1i9RiyYsX5Wm72TXuaZUEdmjClhBGQ6iZIITB2OTTtYtn408d+EciiJyH6MRt4qsCYUJeZPxXJoT6l4fWD6As3W9S1r8JwGfgb813Edl9aRyPqkLGb5uUY3enOyPAlfaW4xhzgLjgCcbuLbut86DdF+8JJtrPdcodU/7kQnTRZqd2wJ+Wyhe8wiqp4YWsYJIPKc4CHTyPic7aMPHYehhEUCGAlrEjzctJO/ggcjVPU1sOiteNJ8uil/sKuWHvjA8XCphw/kyhzTanJId4DKB1UhQq+M0PNZcH12kXPIWFZ4SkbFJFqPWpssQ8DY1iUPi6zzxJPoweWzCwLlHOUU8yDQlRsEX9Hb+AAPwDX2t6AOrjDf+jaf8vdeXu36jiTyceenj5G+0gInxWPPR3+uhpX8RpJ76oIP4TPTnN+4KX1MemW5NqvV7QhklbLJPSrH/RF5gCsG1vCq1t8as3AQjOz27hFYY+Ygu8ouv5q67hnvz2CWiEYteommFqIJ2ArySz8EkPYs1Oq4Hwor+NBAexKV1pHwmEZ32lTEsoL0M21QNd1mHtRtZG8gjjkIy0FuqRYYsXkEZgv2/UKZzjt4zL2em40GoT9MtYRsmcRlPUsXrn0iev+wBnzWtObPPvCRlTl3hbmz0lTOv8EJ3z+vUWtb+FTr1NOqcGAwD8cLSiPbXxTUomBdxh8xcHh0GljhE8lXT12dNQTevCigy4JfM8OqfjlT5G30OxyWxro19UsgZqOHNXapbnXtOio8MDnaXN/BfVPA+xgncxISf5RgRpzcv04yh/i8eU1i4SIUB03IYqM3yFxbnNUXWX7yHhOUGfFnFmI7cY95uDy+WnrNgJNlfrPkHUqJxUFFHToPnjCDcH2Ogh+Lgn1Hrdgrog0QVgLpAZz6mWcfd8w+Ibr6a0lLSoncI2/Fb9uUs95dILTJyOrkQNjjsW41HTujqPC1qM1gNA3A8GhRVGcStj1ZQ1GryyKyMlFi2UnIQGXC4NT0/pyN4E/dTFcrs19N59DOaB41D4Ur6vtYZNlfcbmSKopkNXGY6ccbTW5Dq2Tm5RTqR3lzfrjxpIWR29Y0/4gWyzp30mFivzbutUeaSmV/q0BhXIA2hs+rdxdtAUuHrwIGUekMbU5Rj2jWEKgxNRTGVUSkrD7yIclHPwckf6HD/iqcTX6Vi86rrKI9phZyb3MDe3K0nlIuHURXsH+vRQ2f5+D2F+uKI/WLiFjSXcpeSJEXbyxA91FKUNWsDlmHbx/h0O2G1ZA2qUY/jakIDx34OHETDAPTyVyJbXCFfzM1yiDb0z6OWKvV9FgqoGUNgb9uszvn79N17QsbUNv1DDp19/Ab90XL5d8fXKuH4Tl+/SEEJYfnBYp0ME5rRtaJcL+ssuOHbXPRnbMDJEyj8KP36G3yNcZs3Ld8GUf77gm6IcfvBYpCnhZTzF7taQmApiiNras9ipu7E7wrQhUUapNTQTnl+k7p4y2f2G2Ei1fwiNd+yb+XfvcWK14vLHvv8MPz7cSwDJ/8OMbx4MyfoQYFzaE3Zzt3t/Y24n+bPyUx7uYAy/I8pnnEzxrfoURZWWn7lr//txFQ95BzxsDy3GigKucx3UouOuRg3gQiFA39RVWhNFI1YB4I563H08c/IlznbY0T+ZamIj9dNK0RyYO7O0Bn2iTHC5j9XMKB/LCIhApg6TpyrCP3MLR163CXPCt6z0gSlcv41jy94rIB+4hBvPEORlqwefLjbrJtWetw0BA/iSNtWLMPV+Bez8eY5b8Fnrww4kPJTzUBnjsNnWhhdNe5tAOz0yCwvowc94iHmA+KzM7FYqt2d1aLF8b/WDb84Z6HoYRUkwrxsK3ru4tSpKEAf1nYUzvH5UjrmK10Ozw3xO43iBI8Y8q0gbi/TtqD5OL0s3glqe1T/1+y0EztYWHC46E+zU3V1hm9tdiMxUrIIIjdX9c7r/O+aU/d7r43nNm/bj75KEJwFLfqp4jcv3JQfq+NCs6nhOgzRtN2DzCKXa2nwcuNdRNs6Caist++z0wbxQyGHpFYwnd7IpgqhPutF3QVojfKaGr8nLFCicwavWB7hxXFfibSD3LOFdtXQEyWdpIe+x39H2F0/WMmbu7j2lY6K4DgUhOLaonovR8eo+cnC3pfZs3xtYL07JXkPZHWZZk1tCw46x03cD/14gwmArxtUssrMhp/VDBOwB6YY/16tcLflt7VG2jldBjO3D2A73WfOFMkzcZB3KHqxHQ/Vu6gXGMSF8sVjPLUQ5zHPlgVxEEvStLCI5rc8Y43G8Az9Q+n/kv1b3oI9tvnPZpzBAHc3vZAuEF+lBEynhjHxiehEMRa29Pp/zA+7pRWmck2/jzwYcOtXAtfWAwn9iNMexG/l37wryzNnHXDJUCORIIMrMLcv438ffKwBA+KeNf/JyNNHTiS7jRhjK4KHu0jYqP3PgubxSR8Z2Y1brm73bWtD5GeeE6uNZN5erI0kJ18cH9/AlqzEacGch7nySFjWtNzo10Oc7ra2xLB4G5vcKhwg2Pts6PRqqVfSt6vLziCvvK2uV656aeQ03y7gQprtCp/+ERbpZo/v+Yii40haDi4NJdjqV1mxZgyeBYt1FBOkPgWjDZsIWhL8jc5VutWRlNuPVCITOPe2NCU2tzpsKz42WyPW/7EoBjj1ccCPK5xuTWEdqfcys5xqprKREKDJ2U1QUPmNrHcziCt78B3VSuTiJtfqFgOcGEDe0pl74tE+uLE9wT0VsPNgwuAWdHoCeo/lHQPNWuAcfnNT5FnTye6KiZdixvih41C7+K4YFLjnCvWOy/PnxYTrAkZh51uMS5qd1ivdeLG8IhZbZOWCiM0mh1r1VdICaEcguHlw6+/2Z5KrSQMOmykRNaYW4dqeNsG0N7ekJ9PQB4s1DxvryYcMv20fgmUCfnrH/61siCYrkAoVN/Ox2ueDy4QP2lxdcNxZ38mXncmvs/yBz8xcNM2oj/PUR2zKMfb61PfidggvH1/FkGiyUtNWhd49j3oAeWi09HDICJbRGaNtFBEWbOD1014vaXjZmblNmSD24i+vGJto3xoBmHvVwB2ebY66fxy7+AabxZ3hlWGmvEYDLr8D1X7j+9/+R95bWSALN41VMB89HG/s/WBgPHA9hXD5wWa/T5/fH+UpHcqnjedBxGA8zboRRuE6xQbsZjvqd4wsQkfdNktn42mezotMMKjQnu+s8C9C3Jveak8iNmQD6DSJMXNULAJ8ra0vWpCQoT7tP1bSEGOtS7tZWzwH0kCg24Alm7j2wSKYrNKSbDm9UiCKH8E0FXdY+/dZIXfrKhh1tC5fuXoHSPfNiMh7MJKFxaRwndKH4g9rmyp9oHbQCwEO69JZAYGRhuw3a17ThofR/fkor2/ekYXUvbvzlYIg7AxvH5pU5LEI/28GMiYTu6eQbEaVLj3TOuOt5rh7c9C5tViG63EkVh1x3o6xb6Vbfjc7IQGrcyR0hOd+y3JGHI/cS78YredHYYtCxeXl5GfasmnjTNPlquWW7EP1Z8Uhj2mUftBsMd7xh42OKHC9dddwg6S5NDsd67yBS15psa1+sT8AsbtAAvTfZ0gOmdCFCmzQu2oEQGC0R0nT8Ke4lCIx9ONgcLk9clUkOesqiWju6P81nq1GWpMlbrivqWhvz1Bb8A98SFjgCamnLf9OzpCQrkR2m/zd+SfRL/uvavmd69m9XV5gRkfgT/QJA50jx9DN1fNLmfB1QhsujmuHyRNcbhVG8bl9kOji65/lrXNa7ujjeJzypxbJZ05M2QmhrHDyD4EL1pu0UK25T6wBMo1/mLKzTv+pYNgJ+UZDcIML0a2qyodiNUSzwpDx2o/rOproQM00mxPYIDpQQvUA4lI8QdnLxVrZMXq5BEiWYTYL0hPfMas1qEyv6zF91b/NMp47DofvzgVxL2gzLY/LbdCij8fyYR3C+gGFu71mwQ/2Hgi4lh2mLhAnQUyL4IrmD+AWu5FuH1aXytRB9EsTrT3Lo4NXmYv0TW8lWkEEwHAbGowmbGUplOEwWaMttjbKoxOfejQCW25UxrArPc2dciI70nquhtOBjtVWcPRB8Hr+PbVv38TgYbk+IZ8qTlBkZqpxTF0hRNaKhzSkdylgnwGACFUlWwv+ZUB4UXb4t1/hiQZe4CYscF2Uf8rz5fOYMaU6PAP9dJHCLcs9CmedU/wjq/m4PKcE9VR0odT61EfCsAAAgAElEQVTWW54X+735hsZOpYw4hM2de/3k73f0veSrhDnM2nMCxbvyvet3EQ8T7ydVUVkDpO+k153JHeib10O969VjCWcT6T3iZmEe+KJRU88w0HeJ20juLLfxorQnC69l8CUhwncCU8PWupTLytcQKX9o/IDwYuY5zIToMVwNW2P03mWfoHWi6eVi3azkgdbFyp64O120MQqvRDTwSgOHZHuqxRItKHtafg+uxwfZgNM8hBPmZKYptz2R5DAkWvb7NZ25EQ6LfQ/cOZaXf9+z7L9yGGneQfBPI/37g4TMFyR6Z3jC+ReCWqD3RBxMYRwgbGgQC3QppoO6KHlvxLi0hqenJ9DTkxiFkpyDXC4XfKKPoBcCPn3F84enWJ/G+Kd2CmukDWqEdtnw4ZcPeH5m9EtHv4Z/kUlB4Kj/P0H+u4WVbhCA2NSsgzFnmZH8kwanmn+iYAdYmYG3PbAyLwSEuyBLZgiE3kKmZiZW6lYhB6mrYvtuO18iccHDotFD1MW6sEEO1/o9rfmTzdPP8H0CAej/judV+O3tdfg+/08Qjpr541bMXPN7s8ZnYeYbEsdOw/uYbvxE4zcrJw6RKcURXVzzW+Q1JG5+XJAOFypkLXjTmM/3gZX6GQrX7B00l3J2bU7T+5/zfW5WbhmbMjja4Xzf9yLcXgsdxQKqDt6NfBBBqc0NQa3RmyoCtLhHuVFY2rOMF/d8A7Fu/gGMdwTJjIkGZ3YbxxtcGY3JLORvtf5X7WIGmH/f0V8k3ukABguTTLGpzwcHqVbpBpf8DPb759yCW/wVw8d4V5ic/HamyW4KR8QisAXi/HVPyUv17G2dLM/9R7VpnfbL3HS733yHtH9ncN9Fwc6E6qNSxDh8Vpw/L05LjDfxA68h/6rcwzVAx69ljsl1vaoVnoReJLB5V7WoruClvIHNDwftouHZk4/r9yBY0WNzCW6FHhvUjK9QFCu7fmDlEVnhRtxjQg7LgHCCgNRGl3ePIjRrSL0LnQF80BTPA57iRX/TfjvL7FNdqydMcXmo6re0tg/KuB3upPC6L/g8pI/ps/j5HhxSbYlM4+RHrJhEpsT4BOCrW38n4Z/NreHJpmnMgtwE6QaTWRnS8QUnAbwmTl0pbmIdrlM6W+uIuPBZIviUqTgy1q0h4wXAB4UDc5dufjLyTAZIxYJwQ27k5mq9RuZ85I1mhXjQftNIThbzAV8BQb78/HI/uBBchOa6/iiGJisdZihx6z0ioKsniQHsWFtbln1qvbcxobQIeQ1EW8fgyitjvJc9i9InaC9k486182C4ax1TFXrEvt0mxJ5VEAKoTHK0SLdf+6sn7TT8edmLrs/jMkPDlE0nl+eooQWB829RGF6+FIx5QKYqPj0u+4SQj42aAGqgqaWoBa09HpgboRD4k+Ajcm/BrwoOQzwPOa0mzPhFx/9jkjyBrWS9GW5tRCZeL1PiuyqoyQstSpF3skrfMwQNOwproBNF4WDKOG12Rl7qdXzJqq3RouMU69oC96/6UuzJ/WmquNRADofm/t7wmNEReSbdS98GuwjGH3HwnirsMOt3TaCpjS6nMUpKivmu8pwo2iV7u657vFJGembW29NunLVKuR29c1VyS4ohdud556Qcy4h2pnrLfFNwGUQAdaVvBFGkND6EWbb+JkjfCa2J+2LiuN4jKwD6nI3m5zcm7va02jzaejlbcStc8x0RxEfAb3T6QwedJDvrN/7l0IPanzycean4Pap3LPd4GxYYFj+UyD0SHJx0jab9j/MkDLBeL24bR7Yr6Sxrt0fdMbUO4k1gd2dNr16TzTMHGOhX7M+Mfb+CqGHbdnzcGPT1Gc/Pz7juV6EFjQBoeebpw9l6crZou1xweXpCv3TsTzvw3LG37nutxoTeaFbk+hl+l3AoQAeA5S7rLxce6eO4sfydQux8hREipE13i413bmFiwKLJgghtY/62YEygNqGJpiA3E3gs0hOJ5RKLAITU1bxIf3C8wcz9yL0cGaN0cPUTmfzFAkHkVU+oRpK2/x7PEG4s1WztMYGRxZ8V8KcLt3DX++J6QVHj8eXvN5a1Jt1oWcMMaeUUScgieHWx3Te8i/yL8k7U0DZz9aPfzfI8uXFn5Z9s85tMn1OZqb2rjplA1Db8Lli0e3L075PKUS3/gYzXDxZeNU8MZluYAPldiyNcDac01ijpwFysWp6zKWY1AriB96Y0RO1YvcnBBccxiAnS9BCjA8VhLgF0EZpIegWKCdHPw+r7r+l57M8ZkVuV/QnK3QMQi9I454r/3arK6Z4ex3wG1F8V1O2LmjyyKyOwXTOb/QIftn8RTJJCQ/Ll0NH8bc/zE+6pxJ1W9w0LruzCdPqkcP8vOxjiqQp/PuQngOXG0ObchHX7nGQdDjaZDkMLwXlpZoxNZ8TBQpauE+Pp8gQG4/pylbjVxomAV2mBl9PxtE5zUVaXKWJY+ygSCz4j7Qv7JxPWyUFepUdSHKf7EgnUSdx/I2Dc2FijzeQjmhSR0oCMlorPPqGUvgcMemrOuRWVTkMaEazpbThyC+x/ebqm/Or+sijg7CXfmqkZn+cwfv1ssUT4qneZSwz52BIaPqW707+Wtsr8WTFNBeK/6H3oL9reT/QCEOFbC5pK1LGT3oatJ6Xc9Ibi4sI9hsPpMChPVxWya0SktXSs9Ef2Ribgj05HR+T8xCy+Scsz20uLt+NtCG1NsBNpBNbbQDNI81isCL/j3Vq1p/SOSrXNoWs15DIUgTk4r7NMoOvUP4ZQPazfY1SCrMh6H4s7akNq5oSK61qKNdJK3P28aohNaIg/L+mseFc0OCiEmUX57NEwCM8JaW4JQIJds+gTNrAFmc7Uo7TLvKRYYbZ+9JlJjw4ohsqF95kExLxXanXQJf+fT1mcQ1gBquGuIXonQ2f168wfsGy5KWsVkQfDsn+0/k4EjPzJkl6flPdQw4YYUi9U9wbDNWcLhubHWoOfPsMUKUcY4lzBQ1rqvHwskVM8r59Pq7VGr8qjOkCObOPzcXgIE90Mh7iN00MGQSMuHEtslX+MexiHnoUT/HCzpnsbUaaH6x5h4KMK3Zg6PjB+C1jlMogUCsfZ84fDSJQVnt5sSOpkUFIWJ05CdISwxxTl7a/3UBp15etUnjUphO+1P1ZG7yGQb615vTF61q4O0IbeOzbD1xSrvSj7jQqYAFpTQZTSI+NGGxE6E9omd6zT1kRw3sWiXapSRbDkFSTTkKKsR6RbqgEXA3XOrbF5Pg0P5L8zBJmFdl5Ghbl4TM/7CeyvmK6P2tCPAH3JdP+RcICs3s1Tba6GxZCE90IbKoI6aN6KZq7i72vIexb4FwxHFOFBnmTcCxVlovT9Ha3UfJ9SKkbgY07vhoHtUwYBv0qYvYl97yBxNwbeGeJC2XhmMT7qe8eVd1yJgQ5s2xVfLozt6xXPz8/Yd93pkd6bDgb2q6Kd5vsvu3O9XS54+vAB/UPHfrnietmx697XlqijwJ/hdw+XaYOFrEEWB1bDzqaGN8H/K2f+6HD7dCOSjy7SRnHxFosnMz1D4Uf9vtkl28ymZ8A3sk5wy7tWSQwkYQKrO2DeNM43xvn+L0Va6gLV79LTQ7DpnrHELHk3EwdudyLa+DA37HbpuWr1SJkXxH3Vwt3swP/P3ps2yZHzaIIP6JGpklRHz/Tumu3u//9na2u2NtM9b1dJKikznNgPuEl6ROQhleqgLBUR7jxAEARAAgST8Qji+com/Dtw7qlpQmypXKC/aZE6aOi3rpkupdfi8TeQ+5K0yf+7fcocrRmekURnXS2rFhlXz17DGeeE2aCRScSeU50v+0JXKvphWeRwKOG+G06lbNm8sjQs2JYvnpryJteUbhvcpWBd6kcLJJV5uGgukSPnl7ICWoBFQ95Vu1ZhtcZl8s8VH2K3tD34pBt/yMM3wRrL2um5jYst+kiNubrg3e96MgyQ7YWK8pXucmVbRCQ50/RPZJW8YusBD3Rl98oqzqkT2iPHQtxol5Snmxd86aP+6bu+OMUV/b78iKEu5IhtytAdMj6TzM3HvFc6eic1+mreTsC26dzU+PcmD6lgLnrIUHoKU0hLXv1+hyezk13Xu3v5JDyEO4NGz322HjnDGIDPi9rxZCe0TQpa8USFwl3WqojkBjB6sl0aExT6w+kEahvw7r04tJHibGvAvTh3MEGckYjlxPdpMQC7jtE5PTdLz1mh2ox+HHSAuMBv79kZr/71LuPiDiQ7zCmkmVevZekA71K35ZfNHlvgcJBXQaUhSceCgLJwz3AeyF3ye70x6xaHYx/1S8hD+5ZFYRh+7VFj+GkONliT6hOt7Aswqpwq4HkHcCCPj2Q7Dd/TqVXNV6a4XICsPIj0ih7FUMYf7zoEWqeGZSRYP2T+hR/TqAem1hOziTseM7ICwzyNs9FmTvXkL7v+nXkX5iEnCsOAzoM0e+0hVmnNc/O9jUNUEn0GIK7PTWNeh5eC7hHwjcbejl14uL7vtDsnomY6PUVbOrb2KexY+M0dCR3/DjlJxFtzfwGHr20RQ10N7qQhR4mAO5yEPeq9c9SAk4Zpb0rrv9HZHYofaXdZ10ccZIHEIw2QZ2FIWWgdAKMx4wHAHfIYEB4UFW9YjOd3SU+xk8TnxuV2BSnbZLM58SG7T92G1cnNonGk+Zuo0jeTg4jZh8h+x3RnHz93D1W8GL/x8/cEcI+576FSIWvGPhiBAd2cR7hjZE2gsKphI9/5RWmNJZqO93ccrVpnvsrBpHx2qkvuAOUPnHmw8h1D5zAps7PWFCbV5UM4VZAqH3YKr+kGWXMsARsIJIohKIVkcN1ER4QoYZQ7/Ko2CP7sCobAT+XbZ1ZVUa/UYIRRRoAnnzsZjyL7wlVkJemy60Kz1qmOVZaSEikpIlTEMJmuEHLTv1H8QrqX0i4CIZNxE2wFKdMPTs8IpPJroatZfnIhJ3/qcUDGCCehrPVxOOHYzkx2miNn4vrIyMv6leCPnkfe0d5BNr5sLmZK32xjnE5xUsy6LEoSmzcWPdCYjj2J41ttP31SfuIFj37M6VpevvDupjoPMkw0pUwr0Wg5ZQ/Nv/TIr/2vjn6JHlM2DzM7V6Z4h+uESeuR+argl9PU0jAAXefZdLPusNnWa5nKZw3O5Fxm9QCF50J5VnPu7m8WrrnHp8ZNmtgMIrDjj0qbAWP+EwVFoeWQEPmsOqee56d20tCfjo4fFFFjXJ4z3KBtglhkHTkt5JPaPqLcPRAnsfFJ/ddI5IdhghWi3h0vcip8E+dUUscrClnCO/s4UVPXSYJGd7M+qCTSe9EDXjhOGtTxkFnvI+/ojQZaY5VTQNs2yDLRemr46Wgg7CBsTTaEd2hoekcng6jhRDIWRMDe7NwA42xwkDo2EiDO4uRR+VxOGr0kqnY5laaxRe2xk+wMu8vdrhwJDm50YMZ5AuLwWng5ROUg4F6vYtlZ/kxsbKR7HSp/zubUy5gInVhOnv+Qny0mw3eQiHtEzpkYWmJixgcLb/RKjIGlcpjzTZwmfbdrh8b6y8/Ei3nIs2ruYrqS+Wi8xqtvXQ5xKifvquybcTLu5k1yR/lTFXOrMXpKEoeYvA+Xf8/rWGlTxibr7SO9pP5nOMOrVPh4cZbWF/luKpnQsT5U/altsrYhgtinOuQQh2lC/Qw8NvS9C284MRoaTnfA9rDj8dNv6I+yTr2nhq1tuKcdZzrjy+cdX86/44Ee0d8AeITPb2obTp1xvwOPDXggCACnO/DdCfubDec74Lzt6LQD/VEkIouTEeMEu3JsSmW/aqGbOF6TRF5N07nioXz+HJ//ddMpUxH5hBrTgqG9SqqLhmcVt7QEL686DtpZ8eFrID2JuA5yKAPkKT+hGmhsoYb5b6Mwovh9sWVpVRUGZpiFwPNoG34/OcE3jE3hrFNQ77Nx1izAdFUam+dvajNItNNl/72bm/sG2Y09EXyXlZE27DN92GfajsqrzDy+429XdEZcPyW9Av2PXTnMN2cgWj+/JXH972I75fUwOUJuHeBiNZ2dfm+E/VK2bRM+f3oHnD/Is3c/Ap8/VIOtzQ1gfTUAZdGegH7HwCcK5cTeU5RbAsnzI3n+QpqhkY6P0qXxuAbrQf2+qqZFNuUV/q7mIeMpB9C6l900TzOQUEcf2+DJciraLKFbs8vx6nmu39nLRLATHN5HSs+tfBPDgGz+N/Cpge8gl5+a8kKI/RZK9Q76MHxrVSoPvZBdxXFebrA0cm9F6gB1ZbJ+pS/JQquTRszOyk5Pn911y4kmaPFVh4TKz3GrxN7w4jvSAtPqagmGiiNHIjWRYRbtBA1EOwgnoAUbsM0Ji5DEncVgC9arQwht080JUtxwl5B0IDTa0DcGM0FMGz8g7keKjUYbp56R4SAT8F4fflwxR8NoVUB19PWRynALU51Q6DQFAGiyyN82tO0e9MvPoNM9uDWRt5vy4K2B7lQrOBlF7WkejIsrJDmLyNMUbpuaJusdpmTwtAvqTGvIizjbeDK6ZUbr8mcGCFNbumX/pAOLPcmiVnlb0Q0GXN/CU23d5MXIRZlUO/AGDPn1WXODCQrPpITQTAEgcra/OwtmB/vx8RF5m8qTeTP3hTCysSmXrW/DZB4T168EZGWwrNeMp3l8a5b5CcimYcKNncDdu9SVA30wqwHGaZ3Rmhl7uuebRu9A0NyLmRIP2IMvjbJBK2CGn75utNWK0tzovPsjI4GPelLbTaCrNq6RXKJRXr9YiqrJ8Wv83UhPnwPC48NwleeCbw67g5d+hxkA0/qQCKx+OSJ7yK0rbN8hev4ba2NjoAFfSPKTbc7a73JiXZ5bhL1G0GsmsokqY4m8LiLzVmvFxjGTiG7GM/TEmLRl4cltw7QhNqsfiXDvm9gx/n5LBmRDReaL0NQZ1UE5s1I7Gerz38nMHG3yeirzsRhqSg5vzp4qqTv7bebkZ+2r7DfzhL0wo3zRBcjkUBjPSftgRl7JTc4CgARbIl43mruKxAWueXZi/dvFJke9CkV2mXRYuI7bVE3CYzcDiMMv9Uc3dF5ksVlEaGVUrtNl/c7kgRtf9f5Ykxg+FlG5bBDmBo0hW39N2piUkDkvESM2x3sDx5JJrWcmm7g19YOS61JshGGfYxjzIRk95xxFNPv3qBWw8VOqS0ZsWU7YfLRw37aGaIeQLMWCy2qaMlHC56+rWo1vrvQHghii8uTLk1rHUZwh2rQ5744MCXbScvOhD33vfajwGI2Jk4LQUQT6aM72rZQZyL17QAkKmN/nv4B1jg9wIJKdimumo9yrSm/M+5z6L1ZiuC4E43On5s9zn2a4Ew/h+WFppvKmhHljZEZeCyiEu0cr+dSxffpQqPzjVDZeJ0Hq70kP6aVnSu88jG9ZOiPv4FnZmPe5B1Te1QtTKPWpuF+VDkB5vkk7Qqx5U5tmMAX7Ois7ZE3IzaPiVnq/TyiM6QlbXo9xviSLrZyw9nAaayynrzcmtLZhMxlsNecxVB1NAoDqneZUjfRsbTTlDo1cj5Ur0OTEOTGhIZwbzZ4rB4fZjedmrGJ1sgKJY0aWnQYT9A5hM7LvfQd3W7trRCM1opOGJBb/ckajHSciMHVx0lQEnEm0l06corLqpyo95HpIhOrKU5NQxRlBDFPWR5tynB14GyScMzPI54TSIfcYZ7MU3qf1RKYjM5jboLYGOsfY+hqbKNZ1Nt4t5i6+sMqf3LlFe5cfBlLK5wt456aaQ5dIPa7GmN4z6oRvCfiU5CdQ96vKPBz48sApy/xevR6fT9rJPuc5QMWE8mvoHTLMQ6b8xEEapK7qC/W6RPmTHGm9O6UFrx0FOjDhhaYMVLOlgrbHWfkblzqCt5cHC01iBf/Ro5Gvp7oVJhPPAPyUuUX4KDyTgN47dlaDvB0QBYP3s9YlZbYzYzt3PHz+gv7YsVHDqZ1wv92DaMeZv+DhoeNzP2NvO/BG+cJ5B1gclTYQ7tVxSPhuA7YT+t0J+90G3sShvdMO2ffa1HjeUmi4J6a8RwYgbTgH71rld3S/Ao/4k6fLIdz/UmnFJb6jZIL/KfmxLrOSo/U9p+8L8ndBlZbiecfQMg0wmxrpCu2QfYTPDG1hwNc/N/68cloxhaeUfSmjGHWTo0zL98+n3VeA/PtI7S3Qfw+aG9Yfno46ew2F5d50FZq3YO8vg+Cnp1W3Ze6z6/4AJj5FgMz5ZZKNqDihkY3m5mU/1ptXQaOCOLQzlaUF/XDkcf2UdFFDgF1V0Rq2bdMNftK7zhHRQEqD15N79Ieu7M+nDkzVLrn5jUlXYH8gHcs0ssl0ZVLpJgX3Lo5ju5xe7iQGENmohHjoa+QVM6DLJrJ6zDdGT4pgZ9k0Zu7qa3aAEx6XBK+HgfkZAH4rSjUIwO/1fWugX36SzfdtQ/v5Lej+Dv/tzU9gkqgv/8mfIxzgLke6+ax4AQO/N+DHK725ShuUpmEex1XXhve2CdPljj5WAzrZJhE4NosKA5hRtXy+gv3S81Fh8Q0wfXc0V7wsqV3RjGH5NN0x6O63JEsjWSR5/rwhYDxrWBTSCPdBf3P49ackHsoNwxjv5SHr4pMQa1AHlQdyQaDaDr/ShPuhS5w2bIcuB+8cC2vlg6Kcuc6yudTnw32Yg9/ykIbxYX1sWjNg1ucfdWmWb9tgnJ2GLqZEC+/GhyrPyHX3JPsI+Exnl3ctyS8mYLcT3s1OUIkMZD89DnALw7XLYbMCN8IbheTRT+oveKi2/4AzAAKhq2sW4YF2ZQE3yNZrC6FUPmglSNh/Q4NrpSlv27ENwBetRc4Rd9yxOZIR7nUj+EtSU3z6JLIeQc3zIE//rPoW50HNsJqWhmq7ToGy5CKAOvs8BUFOXhziS3hz6GSrHFUTCbl+Oa3Y3C1pnns3DfxhHXZF57U5TeXNtfYWM3cQjzQ8m1uKc+DZaaHmNIP3unU51RjtebvpU4b3yBlyTkvaXXVheMHTj8rHjzEap5WOcxwBcZRWmDgqf6PszJP7j0xHes5L0611Xsx3qEStCOQZbXwt5K/0P6rvaHw19usyz3gqei+hIJ+qlnmz3mAb+Z7z8qex02ekl41TyJxn1PPNTu2aM140GWpzNjqrEXzbcNLr4LYmBu8oKzpYaxvQCd1PfVoNwc/cAVIdqUmUu3AAY1bRn3RE5XG2JQsgdASjJFXzzckhHKCu47MsRRw+XStx+m7PKRzW5q3YrJUFoRafpJzfuncJqOcmW/tko7lNtaJkanubXa2mz7YG7NoPN6CnlYlH4FTov+i7IKQXduAVkl2zOaXQ+dPgB8y/j9rrXzx9tS5mF8pnpO8G9c8BZGCsRa0j5L1h06N9LjoPVidp95AGQAzeE0bVV5J7B++M/byjP5zRtw5qG3ojnPsZrclhUzTC3f09NjqBt3t0PGA/PwCdPTIIdA2NtDb39RuH7DA+36AHV2nF5P5J3yL9uQ3oF1dZWRnIj7+6Jvj1kwtQKnwi6+U5Mu6TKiY7dZ42WABVsijWDWmS5ySK4CAAR0DsZKktREcDulX7Wvwg74Y9e/xfARjH2bV8B3meC/uRUnW8IzS//l548/174OEDAJIdy4ePKIAzVUN40rYj3OXYUQbeQU42Fv0/KXw50fDle1Ban5yeSUvjlJ9ZQMGHbEbHgmwFwbSfYCeNlcGb0jC5sgMa2luN7WVcDsZkGLtw7oyKOeKZ2mp2Mpyb8bxtm9zPpfeE9Q2gTbc6n4DirAOJU3JapPqrxYQ1Nm10u7oTeez/4Xuq79+mV787eJqTy+/XSXE6ctoEt/4VK4ZsGnhoPN0I6FDPZ4J4hDMk/JLfDydKJ3ND7+rxbl72bxn8oft98tFLUVnNMUROxTrYWnh6EPyGrZ7a33pSgeIv5efyjQD8EG1QA9oJ2E4gNGDbQNsJ1O7Q2gm9NTRiUNfbepJzWjkJRSTWuszLms5ZP25MCYYL8l0KB9Q5JFlO3scOUI9wAZ01fJaUM/2j8maCXOB+vgDDhefe/vW8ky5F+jCXcT4omd14XjaCLOu6IVFP7D5iuOwSdpR4Upka+qxsuihdrZrxqED6OSqOR2msbznxjV7YYTewNgKIyQPDGC7OWq3NpXJDCxnPK0ywgHq0SVBF+CDHdU6y9WtYc6+6G+XXDDQ/nd6m9kh/jzw9yKcaxqK7VAkxC89Rpunnu9xne5/lnW0o2Oma9K74flGErrTrSOwec7LB0+OsJ2o4U0/Ba1RWJtYGAPcgPHob40JO1wepX5kTB37HybCi3wu6L5Uv9TXbfeAkd5tDONEDGPeprR3hH2B/YajWaFssY+Jjzonbc6DJ0BBURqUHrIRjPsalx4mmyEmFfSoSMxpbwGvLaLJMr/UigHsOBx4nrAKQSwx1jWKfZ4DL9wIwIvyrv2f2s3jrWEaLMbNP7VNPeSsm8/yK8T8yvB9F3JpqWxe/ALHyNZeP5Pkmijadw0QAVxiuJqp1y7TOJ+Lh6yNiDUnbwlwvZde8b+yTz9YYfFD5vUo5CkFgajyZHTqZF7Nmy8+x7khtkTHa+HUEcqiwnqoa0jX05PfZcHBL2VdL59QgMHLUCtBBei04L9DC0+v52sgbJtwtm9YlxroxeCD0mVme19ry2f7xzQydyAfVHZOhlp2/cuithwdU0spu0LGejWHv9qKmzMwutnCtdcfAsR52UG7JT64XW+peOPgZYz6ecNfqOpe1mBnN27ap8bxBrnaKk+5CP+LI2HjNM4kiqh01gPSKpSpkYo3CqiuQKyKJ/mwfZyV77Fk+zTiw0ewgYPpdvkKNGknkC5VLjTTaDSUdIKmtFYI88gGzXRczpbxOaVHcHE3iuiLX1IbyAxLutgEGm/dDu1mHSvpPqX7bauRMVwhJBrAD5Si+70kgjVfolc4fnzWBb+BzR8UI4hDwuKeHjCBEe6xt5BPoL2z+NgAvVTxO4G8inG9OI/+g8ZefwjnA51Th4Y8LhQpA17McaWdl38xk1EIvuXXILmJ4EBMAACAASURBVIKb6yZf50m7DO7irFMOVyupMnF4NDOAznJKfd/RziwnxHtHa0BvDb3vcrUFbaDTHe7e3IHuGvoJeNwb+ucOfjzrHiUFLxzmcMvz29dRg5vs7cuylL4vmv4zpj+3Af1PnIJ0Z2VmVnDs+wGHyLtdKR/bKx7y+u+kHPiEpNg0GQS81eoKRjF650XuCOJidhucDWKA2rve12qKe64kd2K8Z2x4/dXSCyX5sxhcreCWUxwvqf/yu1v6TQffX54IANoGcDqTdfo38PlftamXRC6wFWe0OHfj0LkB3488+hHAh5dW8pVobYW/xfrEN7psrZH5zdU6rxEBVdZim4u+gccBkxnPqXm4dlADbfr71IC2gTeS35p9WjfduMljTty+zuKkeM6u12Vz4mqXCWC/8zMWpLDF/btUxydcJIFXJ/VJZhzlGxaCJfyQDJrdzyfJ7ti2O6N1C4dIlF0iDQev1e0M7HEKXe7pxqDPV0A5/T915uO4qM9yMi2k3Xs/TpgdMpX/tkWs+u0EbPdAb+C2gWgDtjsxqG93Gq4PaNilj8QAnXWdomGU1es24B5kry3e506HwXZ4KTWkxUbZ8Sf/7VJVIwpIrHaGX4IHTvtrPNQDgXuiG05wz+iLPlPNu0or/cn4g2UgIFu/PGw7WRRE5S8gr3L6whZ7IeROU6MWESW/GOv/qI8MeliBuaIlzwPv03IBPcjzFXkczVu3QEvfLNCmL/u0ia6bddkw5H5SPtxc2ijOK87GEo/UzePPyBs3627lR7/jUX+fB7LJlyJNI4Gf8QYA8Ot0E2xBiH9U0Cn9uXaNDy7DTp77Z9wDIPyGx1LDe+t3kmWDgPOvVPJlHYfSOyuafqtRvFlZvTZk1/DrrcmVANyAk55CbyRh/DcC6ERyuj2Bdq/z5sGdaCs63JiqxDCfuDYw8ygaVmOMcvDXVCoVCV5hURI8YKfSYEds5H5h6EjInx5QCJ7n7xibztN7bf6cnAB7njy2aeSCX/M0KWi3ZDPyfeXWBXb+YZ3O/j1yjyg8fKsZyJ1teSFregi26PNw4GC68R3OggO/SFVPzxJ+s6NEFIkRHFnZ8nwN6zhzNaLYy17Ct4ecXcI0PXlpOhIuYy4Jfy+3IqQxUCOAXGHSY54ij1++Di7TO2UED2nu/9R3Y8rOn671ZrVNmual08y60fUaNzOl1W/4hAjKuNTnnCJU/K+5LpM5hTYHAbJiK6uHY9HV98P6vsP0XDinMpcquWHO/KG4mnn1NJimEzLgYWAp8l0Gf+z/zE9Xc4XL39BC0uHt9HCUMx1t3Zvynar6eZTP6l2/uZQuleHUfw92fFh7EatIuDGjxKLghLfXmqcDW3EUsoQ9hz+X0MDUmoRtJ72CQ5URa7qRXJPJxNUAb82lfQ2pU77nE4vVPUqvX6EqG0nDtBNxwReBEbfDawh4qF7jJyavuF9Y/+TeHL2Ji9B20mhyhE7iPNAaoXV7xu5LL46ClRALjkn7vZIM47RaiM8RXs/Mek1pnzUOyZOUylzegJgnS2p32OfOOq63qbKdOAzuJq9HejV+9C145hlxtdNFcT6MxudvANtfLF2SkkJiiVHfUmrBEGn4DF0zqYe5idvU3VXjaQ4kes7vr6WsryVZW2muAmt8s3cCN+ESTdcSsWhgoOvpE5uaHXL6/HHHTh3cz3J3+tbQtx3nTsAma7j7uzvcv32DE92jnRs+n4H+2xfs6c4GuWWS9ZBQ4MKdhdKemPfJ98qQeMpCflrfc/lJKv6Tnpr+egb0ax7C/vXZs/wrpkuwU/1M2Umfi2yu78u0cK/nevd6XqiTMQ4vf7DBQIgwxX7v4A19G7yuSesgauLhYwpB3gj0BpPSUOqylfPIwReK8LPTi6XDMl3yaM/v+mrT4NXTpU2HS1plfrSg09eA6pcGnD/6GNObX/Bvd2/xvz79V8Qk5EF+DIltI4h5pPz59GV+f0mJzr/H1eQr4uBJiQD8hKowfDCD9I0w3aBvHYrcWxeYvsCT/9jmMM15lvzvCLZxAbHKb0NoG5UjX2V9ZvytNbEENDWebwRsG3hrYD2BznpZmAWgF1CykpLCAg3w8eKbEzMd/M4A++KaATf8WixWkhNmbyHhWpkjbKtXzBX37+F3/uCj/rasFqlh6khejebnjHlumYzJnemYDIM+7lYPLMbo0OQRb0p9Swtdc8joREDTk+wNwK+muOopdI/n+kHLvi99rvymLCvk63vl2x/HPPbTGFfFY93EGfrr9wcLbTJtegp9k78PDbhr+F9fvugd6NCNE+u73Yf6EXb/H+g9nI4Mh50w8wvNU54P39n6YP2VPpoRJhuvi17vJ9CT4wJQcVPQt5oLhqOD5yXxwXPMfAioY2B98bYEV+PJ89CxyLOhaJ+bVOe8eg/8qCoEkjWV3DFIad4Cb053YAAPj2pUtbmx4sHlGSMbD6QfNq42RokWLGuNkhhlG8VcKW1Jnd03eNhRGWLUohbJgQVC2h+COvzYcLCVsPLkvZHqjeoCyFvE0YQqwqiqLvN53gtt5P2z4LhBHcuyw7xjzy0Gy/eCpVxg+GzlV9XPzRnT6DfJ1hRaPTxAlGLtZHkDqDHQ9P449efpakxn4jK+TflUs3vJ1RDNJFGt7ondJcDnE2XZjKXxnNPpeT9FkO4gjwmXiGfBSjKmjQ6F/EyukpM9aX8eGLhT2iTNa/squz5vkHtMxQFG7hb1i90RW9ceUJ3ijG9hlRjA15N8NMnUxI7S1N0A95GizjoeOk84OLWjMIc59ANv5vhCKIPizjfaF8834nhFz4A5BazOiI/dI3WM87nAdUO86lqBETuRHqqXyteVE9IzUoYhWg2Yj2qOGZukAWXZYQ3Yhh5EXykG7YokAqmtTtvNIgqV14QzgZ7CYVTZnh3WnombVZrEkwpAnvJkyAG5uV0LlAgw8Z3z74tAwOv4dfWex8z6mcrNFWLo2EGeb55WFHol3WxsWUivJe6mFzfU+4xiT03PrZvHL7fg18Yhy9mhui4Px1k9NTt8j1Ny4pRoU9l5RbIkOx8c9JLkVp1kU4XERns8NGj11aX3JeRqzQcnF6f1z/DpJ4W9npydUw4s5uQTBt1l4pV8fJCPTXcyWSsV5r09C99ukoLI/PbVuAz52wHXo0WlImy8ofcO3uQ05Ng1c7YiAhrne8gDbwI2o6FpxJw4gT6OZRwysLZUj4A5M7DL5UALV1nie9WqN5E64bWG1jtkTdvFQQASOafZ2kqN6q53LdgPwOGARtA1iyqu4HLA1dmcDUfTmv2kfpqzpS2LqsSq/I4wGChJdkRR0QVHnfaa7CiiMOm5O8kehsOXpH3mU0f7lDelBWEf5WOo16yWMUN65hlFb+T0+0rzry4L1hXPbGlgljj8eSFdlhV+BcIhqjl9HFiwxvnvj0dGNsjXvN5MnZ+22cZ6ea2ry7vKM8bnc35MfCJA5mvoO3iRCW/gSgNeJSplYg4BFHz/kKCfCs9ZrzYDwHsXA/rdDu6Eve9SbGPcEXD/wxv8cHqLUz8Bv5/x6fSbRNhgwckOdaTyPUfWaCAI4znnHih8+7gpM+K39vsrTKK/bfrrGdCP0q0Lq2+dfI1IIViuGaM9DyUjtlWWkjKfGlF92JwnQHZWWDcNBwW/ZoySTeHYmu56NoC2xIhHWLIAV7hsidwaaGO0ndE3ZSCNfTFxyKEP8RN9fz1e8aqV/QnTC/p+RMs3Tkc/ceEChIG24Tfut+t1/v5gNUShkhwJeAWmlJnaHJ99a5bz043Pf7tSDwFT7OJrPJTii4cRy+zA+ZxpZfq+pUy28Z15ItJ3f3chMSJcd3m+0vJQr6YY4XLjefwxkZ42b+AW1084eGURg7JQSAEuF0AnHHii0FJzVpsPbwloHBECTx18D+CRgZ0lxiwDurOif4g1i7lxe/OjbIBENCg7+SPMOaUM7zCH5LqQbEP38n17oVxWYEyJ5Jo3K495g91kIwDsJBEE/K6y1Ia3ZUm9CTgNg7eVYSSUx4do4GF8Z/7ETgNuzYLPo0bgdgLzHUAN1E4gbAA17GhgxJlZjt0EbUY8asvadbQcrtIk4icmgULHk2HDFiAKGe8CF3eFb0/4XxEDH+Oz8Kg0/lM1NOB89XxV55DPuysbO5t91xdmCJgNKfbbPgMGJnLjmJw8STqc6mis1i6y8TJ+W/jIqn8G1BUmSqkuQ2NGaxly1f/4jHrqyvLPY+DTimulPuW0eXe6IB5HSbo9LPadwpjdwH6ZmqWhvGbPIGd4j9KjM1SUITgK2jA/WykQM5iG0p8hThMddl95jKf/75cdE9ILzPrLmq5ZjefiqyPObT+opZyayEDaGnoDehOv/Kbsif1KDHY8tE2uOIl9s9gAYiLckd6LnmQ8K7iH9qrROpi75XSTsUvpZUwoN7px4E/wK0bxndUIDb13DtKPBwAn5FghIt+l6w07AVu6/oIRezDANusBXFWu4NmstetzphTwIiCeZREBtIOZ7KYbN5Q2WGhT0aEbSPeCWfkNFTiKZGWFRsnMDL42Z0yMjjFNRrZhvgQD17opZR2d9XcuG5y/6/uI4BUOO9FqgY3n03w3QBQbhdNmcJqbC5np6iYu978RYWcOfMPGP486F9Y/NUcxThnnzBy8+5nJIolcxVwhpnhGfKQbW1rBlzqWxdpKXx3HhNR4vmwyy1XlgSPgK8Z0sfM+aQfkD905enf07NLzrP88laSfU+aw3BMqek6bf4q0EFaLPKElr/Ny+vMH9uGTW5SnMe9Udnge3zmtG+Y8Yw2cyt2eVlDk8+T59431chhIDZ7YNjpYeRdHoRuTq1XBdxYa6lzMjOK658HMYiim7qXiag2DmbHvO1jXS2U9QaKPgcWBsavRBoBHM5ET7OLAaPeLdzfWBZ0QiaOWGJKSiwLHXoqdM4+73OV93OGeT6QPjgzeQbiu1UDgRqIn2fhwF0O/trMxY0dD6yyOm6yOmzsAMrlLQ/2ml6Xjoj4kMa/MBa8sh3RsiNXJMe9l9SgpCKAn0k6Ck4dnhV4uMP6sSDAgayPVXwnwq3m6uieOZOmybdHM10hbC49og6HZXe8hY/8W6RZ836CGLV/bRsG1aJS5hpepfK+W1lPoCcTpDtP2GwsleKiajGfFusBXUq6DkR7mUBmhp8rRY/L0R3Ve2Rg4afRBAJ27Sy8CYzs1nO43nPoJ2xYRJoy9dGZdraSuj+FVCDFfhAF7X76Lgfybpb+HAV0plLLg+c6SyHy6rGNn47qv1U2BW4VfSsIzKS7+PW++Zm87ss0VXsCShSBV45Ib9OH1TMqvzX3SBbfykdZITrCQKFRDR6QgY6hreJZ3P8kbeaX0dTSNcgdtSpTf+ZOvmV5Q/6WiRy5sT252k3G9ew88/gYm4Pz5k5BFOyhyQUEs4iZ7utl8KPNmBHL47fE7B/rL9T8nPXkTD8Bv2tZPqJ0c6ewWg/qogIzOMZPCUh+EtzJ0+lLkc75lp2mBwtucx9GFNjANBQA9OZuJQnlQVjgm3C7aMUN5kzDtdgLd+Z46L+W7Son1tGiqjDMPQzWil6zOczP/00HMLv8RLzb1y0KUGb/NfFIVa0B9pUTRs5OCzkJ1nenJUTgswt5zbeJTevdu+P12+D33OjWRFnU+9rwowpgfEuqG5oCDsQ/pfdx3lhTT3O7hPExbA8MYT320E/wfMaSxzYKA6NJ7iusE/tWDBn+Cyt8NoA3oG/q2gbBB7j7MBiIznisN9fcQL9euJMZJLwjQJgV+MD4UXpkzOgqz0jEo+iO5jnSd0zV2eChjFnWt8hIQURtQ5YCDwHWYNF8jDbNsm1/OIhcnCkEgNcmxhxmX2tUED6Zd1a+qy8i2EqmTMuHz+TFXC8ezHTs1v5JG6kwz8IVoeuhU+u28OCW7CwyKM5yGPIPuafTgY0shb10u6OlYwLHi9zFzFK39TS0WNfPg7sNVyqFNFQ8L7jwXG7/Z6eUDOjTuP5c/zj89GOdY+RbjVzcVAy7y31Try/K2yN+mp8opDPINsoHZAGzA1jbsakQ3uWknzZlksxMNuMM9jBuc6VH1AXZw7ojUiE4J5hTa3bA36gnez1a6E1geEUeJ9md+pBiEOR/p+Sg0bvrb/nHKK98b5G53OQlMfkf6PYQHWEh3q5M0P4N9CZa3q23Nek4wNn3XvS7diJ7600GQKCvMhAbZIO8WktXqzyGrU+r50YrHJz44ycHEOld0Tg5dnRPWo8Zz/rGNo98htvIsZn+ST/7nkpPL5Y0MxBxDpG3duCf/pqrFmimEzf1yTDzrQxWNI5dKAzK0584SIOzEaCxGF3Ghs3rVAG6GDGPZppsU/QiFFso0HJ10eMhcnqdHDcmITpEP0W4tRkO+of7xAaXvTPXk+XKog5uE08LMYSws/cXOPTe9YlV/TF1L5XCd5TXSVNdzK780G7Xmwh9m7hNIIhwhrLKYbDy3z2EeI1Z4nlH5gRs1EUZjTm1I5I3u0Vx89WLXW5RW0m9CGKGNr3OQfC07p3H6V6PqWHr8rpCOqurQ4GiqneQRV2mwbu+GxNATx72OaBn2jLBIpkKJPmMRglj1XtMk0uEDGx5bn4GR96caEdrWInz73sSZXo3ZRKKDNCa0TbWNbhRpgxd8XfTDkDRhFEcxkDu2zUnD/vI/rtiO0aE4VamOBMwk0dsZYDRwF0e+3joa64qHgda69KUrPyYGqQQ7ml/Omu11azohlKZM7lLACdarRGGxanKkrjQRSg+nluPD6CHn10lYZneqyvfOMhtB6MU+N5o+13uHih/cqKvlLwWm56Qr/c+yVi62r9HLyvtVwdcUVrek3O513n9TuopfXmRL/R7HLOn7pAUXEkXzWJSlVG2uc+zixDjHLLngwNty2UtifsDHhJ6jAxOjM6SDUufu5ZT4v/MxqGxTwLOMcX6c5I0JU71qQu9USn+ZfwN8YtnHIQAsB1WED0PnKnvfGJAL4LJKa3N5Z/cPYLWxkTlRe+nn0Oxi0P9JT0p/cQN6CJzvznhO8UdZMN5qbLNFO8WC3QzwPuFHvd2EOShmJyEEnAuzpeSNOkyYq3Gptc038dk226Y1w4KDU/30EyrF6DosSFba83L1zEP7iGfPSqaJfRtm87qt3NLpV5gbmYYnRen5SUaegRMBrD5afccvP7zHvz59qBkdlvS5eo4gpUryRjt5PlzrCGFppPkjkxnEDeyjk+k4ek81tuGR4drn+vy+HsLVfGYEBMX3ZqfTlA82VBpCsByr/PCUMkEWt333gr7wTKFx0stFHa3AZg5C1JqcVHYYrZruBiVmio3tJS8/0FzzEdMx+5EinpU6gpwm3yCK3XlsIvFDSr8n+bBqKGUa5QpDjOaAGMqzsbyEer8ljeOx0vb58NG6bDyk/C6d1AiRxtUBoFTBFd+5mRFn75/I9I66mX9P80vpkNR43k4aFWEDU9Olvw4UDxVS2nQgAGhafd4kyW1Z8SRXVwyWrW45fyBv7FQ5EPH2MmLFu5d8g6ZHuCpihHcUIzw6yBcsBcYxXeIRSxWCht+LugyNPg80vCCQjOcp+GwxjFwDUiqt93nbV5WCTGBSQ0jWiYbIEY1Inf41j1nn7Nmqf5POdpQKY1fD/EN6zZiO0k6JQ0CkfuxpLiTW5ugo4HJ6P/THN+uOoV9BNP0+4NYl3bE5PZwXb+d6nqomvL/y3qjN1zjmleoylJQEEvP28aaKwIJsOblERKBN6pMTT+rkumUZzjJVU722JqGWZLupVqYz2aezKkrlkWDigDvNE7t/2/iXraWEjK9hWmea8RhDgbEWtlPoTbgZBa7N/B2h3aXwDmjcD/m9gdDR/IpKIFBkNG5G+bzB5HdFs3FT67ckO6Hl88Tfx5wijbdv11F2NbN3iIFahqPpSSsO/GM9F+xLGN1RsFxEFK8epOdsZfMmGJVsga9VFInKXPLp4I75JHO9C3d4l+tM8n0llp+TvHwi6FkmxMbbOrHSQ0DlPafx/vOEHc5RSgChUEKnDkYD80ldtqQuvweZkJy7re3uffAz+4spthavAVtGx6jaslk8Eq/Kjgh+h0Ru7DCNkAQMv02FM3yDXEq4xqIft6dBgPHi+6EAXkmjRfVPFS7X0qU6X6u9rwH3d5NGGpMkPHvmoSjPI+/qe6mLrU77knlgNoiPfDN0pQpb5Mh3o/Pyvfxf4bxlQKOW+v04fzaUj84E/j3LEMK0VBjvy35S8iXIgnlpex6BLvNQe7nijAQ5RS6/sLVwBHRDtF2nBtsnbfpHsDuxiXYQ28lGMy5r3swzEzSjUi34U0y6cVxPmGt/zFFDzqLb/zEieXwArjhIBvuEATjVu1Ed2MSjCp0aNuroraFxh179DuIG6l302nwlAlVqFl8FtS5XL9uSfN7ZXe8E1aGupXA8W6dLxHaNp19jwPqRDlWwuVM2NnF/HYzXTq4rMNYH2aou/3KD/p8gHTHvo7wL0riJGlmcS+KqqEVpQ/sFWIP0jO9UmMs5sScO3dJ4Xiqiea5OrGOMOpV4ABZkb3xtPDhACCHhNKlSjxMKZuFXhS81iSyyixBwuUo7+nnH+fERD9sDtnPHw+MD+PwAZp2g6lkVES8g12zuHdjPYNsY8cWu7EdTY9SrOCt+vD9TJ1L+v7T+9XXTX9yAnpMt/OQz3yP5x6VxQRmL1ymbThxCNh6F8dzVkGsGeJssunFGzkVbnfSFg6fJa1zTDF96JzCpEb0DsrlW7ngaFqT5fkL/TH9NNbmei2WYtL6ZC9c2V0LouWvf70K4Pxf4l1Z7Q7vZ6YHyb8LxBUG3t8FvfhSl7PxR6P/Tr/jX6dd1MSeR9YKlFCK798Rbyp24DURfMHGi1a+Vnln3aFD/+UK9hrKfh7Z+o5p1NJ6nfpe7CO2xbbbbCkgdcIR/6ELPrqSw0922gBwXOysc65RH32Xhk5QbNgO6Lgyz12AhkcTb7N5z43EGF3uUjQxQKCnMzWE3eRMOXElBrBUkfCV+mdmxa675veVRxTArifeQqdcJuPvvoC78+3+je3j4bLLDqlKWAPy/v/0/Un3hv0jtILyJKeHwncqHW06cZ7wtf1P6XCx6czHDDY8vajHyzGkFwKp479qvHaoAL7rwxMVO0twDindYnEKvFdPyXaKNH0mcOoxGaQO2E4jiN8uxUYSMHepiUk9W1R9M0fYNj6Gzec6XMcp8svI/1yU4wT4QFSmMgSrTA+R7hOCLSA+VR/Ma90XvwHE+p4WDPOmu4Npdcv1JDFR2N58ZhKqRxE+W645GBMisQMdzNRslPkcMdJI7Ac3AmdUkgPDD6QQG8OWsxlzTm/ZBNlGqu9ApOVqXhL0SqSO5MCJ+84BHCX021JdhWNyx7o5YxtpSdh+O1dClss9J+YzxUcrvC7YoG10ucMBqJfb0ky7NmCJCwY6zQoVahhnv6C5+N/LTvQBhJ+nHDt3UGkKlJ6DTM9uc3dSfrOFh615WFu8mq4E37U5lJ/CZdkDvNycCzgS0pjSt9HhPEob+gR7gRnMA96Sh3FuCR/FszrU+tY1V0ChnORW1DtkGsl/qnT6VX6Xwh7YJLvNLKostaTjfktO7cQ86Efv9lvK+oaHhy0T2jDdKFBvrzE86dNe52jnTWNCStWUyO2YFe47RJ08v7MBmG+AW5pR1rMY5TAttJfFJcyLwV3kOEq32yr1SFwkMiVJgm32ZFu3TZA7XN3ZyhAedIU7BReaMmYzOavjJN91XVAw9iO8u6w7Ey1SWcs+G+uZaat8YG6K9zhFuV54xzPCc75+MMJVGOdYMg6mjcwv6ZXjoXb9mhcht2jQOapEHI/xpTk4MMM/XhJ3k0CMw2b0QpKfTM9PiC4hvAVKq/yPRAMpKati4UnpkhJQdHSpd3pYOqGQUak+q8wntHVzN9+Lqj6q9tR/P7fNX25eZON/lbJZoeHdT8dlBKDsyjWw5GgoDchgu7TR5jzp4NjSX8glGHr7VcsorE8+z5xms8fRxAdlfpJrTeiNYyaoO9rzZeF6/x7MBsgmXy0TCeXJkyFmEcVzb1uNkIxGBzVNO6bk6RXHsNRkbJc3Dom+JY1vzO7xZnf5N/yG9JydCsmtTTfcb9uD1BN27aM15uyf3S6Y0LCmDyUaWe9fZYvEkozpSiGIrX6Ig5NGw/RYiz5PnLmkUBDtVLjhg9KYn6GmT5W4ntCZOf6Th20lxyOoXbnvatsQxvaSMve8x61im6c75/WEyHGvfb2ZDWa8ZgDJa4zQWLntsrlyodxBLNPYjGVVLvS9ioUcMbtCjxqh1BNmr6OmZZHwJMK+YqPClJ6VrxHATsdi4VY5P9VGta2DkBeOXxNmg0mVv05UPbCHNuar52dHJ86O9v6HfhZc6TBUvVo4XocxrvE+j97rRwPmwBud8KJ/5DAjnucSyB0Q58qldfUGE/njG+eELHmgD7WecH7+gn89g3tHppC4vCrvxo87A+Yz9cQf6HnhsTfZyrfetoUROXAGe++/zf3j9T3py+hsZ0L/XpBOGLpyqPCwT3wk4Ll8WgJkx6eQDyz0PlCYvUTAA5LYA42J2/w7ZRj5I7PCUVQvNn2FxLxroJhv7c84L18LBDwT9qy42r6QXrjX/kowq05YN3WRQPRokKh9HiX8i4OGDnHiyvA3y2zPps48EP1IhK4tEx/rQFeZEay5jBmD+SP3ua9L2r4tnZlRftkvV6J75zwcMmlYtBiCFPre/TQznG4HaBjq1ZECPsO4Gylj7OEw2pKIbtaoMsX7qyVZfzHF6nwd6IzeYm6GAmhrFm/DpnpUSX2wrYFavbTxClK0woiPKThtcI/5mRXpGBEfnc960CbBMZkxxRVA+/6+f/m+Hzup5RChw/9Efq5K5f9GF0GfgEWK4/9e6yYtptbAYN2yP5gMP31OR6XKTUgfXrzZ2mTdN66iPAN5dELgX4LyU8thRCkGd+WoKk2y8rLVNHNhUDssJ9HRa2xPFDFTGnwAAIABJREFUCoAIFvjXTyCOqXjq3iL8CHaXXyAghddznmvvo043WCU9Iw5Kx0LF17QjX8bB70vPM587qsfaymqJGcpJMCjGcyCfPr8NkFUeayzwk5pNo6rOlJATrx12GjYhzqtYCa/UIRvnsen8mYvZhdA2tB3jcF6Qm1cWb6sxGfKU2ZxY72jXmWkOY4ZZroxg8CqjEOLRlFhN/fFZsDqK20YuON4t37gIzmOZ3ydjj234eiYp7I7ExlM8TLuEB/XT4ycxpLtMM+P5Bnd2g/vsWDSsZizK+8Zp/Ks8jDWA6RZ2Ptn8gMwgb6fOfQ1ivUoGaMctRhKm4TPWKnG63Mg5OaiwoGbXtq3VbNAEgMZpHgI6LzNhhrHdXCOsrZ6gtDZZnWWyY3P0gJD7GP1i5Z87iFBOv1s5oq6nuOIUuG2YB03FuXcyeKAiWdvonPCecN3t5HNpF6kfdRiK8b28mmcTT7+Oha3vyfH8DFxPV+Y6abnJGRCtxcnx/M00af/LZluMoagdR3WYnhZt2Z3oMfXJ1VnKeKVU3jYY2eY+o6sDg1O+zz32/rpKOfZ9MW7WP46eznJEYSz3TU410PzoiLmOQC0F11jZqs2D+gGUk+8ZKYdSZKh6knW01nmh41SE0TBnnqNfPjddIOtXb+db9uurJgq8EdXf18ppWnI2n9zsvDirxJNNAlzfD8/Hqsd8R++eNExTv49q4MWnfb/hEIbOyQIjYzDqKkApFPclN8mJJJPuEqeUq+7B5tSWnJtKbb6IIVO1YCfKG9IawnmuQk261mhqYKeAPrilOvHpv+Y6YNKzEjzLvhvOmNF7B7O4VIHNvbej66l0309BnDQfYwRwdET+M6VkYGmm3cjVMgL3Rk0c7DZ1tqYmugs1CekOEt932nU4OaZa3ssua5w6/qXjSz6dn9FhPkrPXp2NXeON0/BajJhRRnEt87X4re0DXUrfSq68RvoajlpPqPJWVC20puXMv1rJKEcODPUXlqxPSzfh90DZtHe5Lsq674gDm6R9eJGkozJ30dPzAQ9lJT30V7/6cFcVO58IJwDE6A8PePj9M/qZQX3Dw5cvYBaexQ3gXdZMvh7vHf3hEee7hset4fzwCN7FkI7eJcop5z2+v5Ty9KdJfysDOpXv10+XfPVE6ZP0y8iRxp95MpsRi3DAydLKkoYy9l430uUCGmv/YFGXgbXTo/k+4BYbMXM5XrQf313hJdQ+5bXwtCZOdRdlyNpa9eGZY07+39dLF6XR19c2jjaAwjNqWSg+Mx2OxvNLRrxr6U53Zo0GGgHvfwE+/6qb+RQElENrk73LmnoiuLETvuJKHbok2FfvjhTw56QS+ihV8kvK81+HhW9sJNX7a0IPI06gZ95hVeex/pnkhHsZS0qnyCgM55veJ36iZETfQKctTqGroTpDOC74C0q13WBrGkhVx5MsJLSeQCdm0Z0YPoZ5ocEWmtbC1zb58+pxID/yyt0N30hGdAwp88vco0v8N71nAj4pvb6FKHAM4Mz615Nx6z/9zp7/+f7f8b+3O6/nqUrwv7eTGNEBQeLOcSeQgfpvQHFP3/X7dDr9KPHy63FazdW6cLeNhovz08O3cxnDnE0e2THyHyO/pR8/RbmP7+J5x+L0uVRMjIjV/Al5nzvBxjLXksFKwis3tHZymu26+bBEGwN+yhK2CcPOIz284UgTF2nE+MQgpJ2PpgVFXtAXMU1TeTlv5hNKFjzMYGPyt9DtoBLEswMd4ei38jvZlIJudGUcVmNeFLeT56vTjSs3w6zsABZ60e5KN7ZLZlgztU3JNYyS+pDjZ8gTrp/OB4c5tNIFCQCpswbv9d0FtW/J3ryrSbYfzfXVOKbfvHjl4FIshmfaREa3/56uHxlOgkZbhP/ElzR2I8B5XOVv5Xj/k8kX3+yM8Y4qN32fTK/KvO2J+RTmICl3ygvuvDzcUP6ojXR3zGGNujL8bSwy21omXb9rOTl1TrIBQNBPOd1zIjkBJRGucqcIDffSPj04iuIuzlxfQo3WkZcSeQPbTiAJhrJCCCCfEMhjsDix6lzL6mKd/z6t5BoF2/B+o/sxj0kfGTlCdmH4lHBBAO59WrI/j8itRr2Ek+Y34yk5NHmSdJiLjTnY+CuSk8xdL0RtSt4S4QJy8svYo/c9z6HUzMAvY2bY6fyRH+pnnobDex/mKzzBwrbbZ70TMIwl+WBLSCIzEfOAN/nIBv1Rz5scAyhhhgjV0I0pr78hM8lmejnoKyf4UtLovVl7RcGJG3EUkRzPwSaXrLwYJ4zSHAcugg/kwYi/KVviluMaAfAbJ6IogdASVo5SapfTMxpBKFSFJaZ9Hq55uMNqsqr0zxjXBVCv9gGX5d9Tq7tWj+cbO3OA72uwHb1/jT6VtKK/V2jjsPyKQx2VycJp+L1M4xqy0mV+s5pOxTieyM+fc5DqaEhf1b/841TW21gw/iHVNrS2A55/GYLjEuvyRyUSpkeaLJse9ijkR2FZ2nWPiKMcgzi1QMbFrDErmxEgupvo7BtOTcP/wpypRAjlsx/UCNtpQzPHRFOCAAnhDjGYy5rA9BI5ed5Ut2O1/E/yN/EDZolfICDobxUG8lyM6p3F6COywka6Upzfx243eRmyVOeQO5tUj0lk1dQJUwzlLCfz0dVZuUGju4M2icjFRODG4B5OozQ5HakDZu9lLLP4ICeHwGNGkF/esyQm68RALyMdPCuZUEv1jxs3xfFfZH34zL0qE74IZnzPfOJIOOjnpFuM+PpG8K9SMR5/y3aBjIc63DOdVQ1HdVvb1xkn/CF6k56DoeuJf43vQ687tqodbqVnL9dlngps4sxTJ0LVNQdeE1pjxQzfH8lw+NUnxiMT/jnqc72YNCoSQxy8dzsEoho4yUZzf3jEw6dPON/tAG84Pz6I5k1AbxK5RNZpmnoHHjv2h4bHBuznM7B394ZmKE+27q4x+0/6yulvZUB/uRB7pTSt38iVqasTwST8YKg0BfdyF1WaurDKv2WrxbmDV5aVWELi0MWIbmpTXzLQlRCdFwrlRI/tjhnzy0eNxoL2/Ftwkee6XF1fc1xp4+rgXm77tZEz7i2E5un0FO8PBucWXBIBp01DLCca7L/VXWJQnEq3xatLuYFQ8qN3JEYtUzJN43RiJFSlVT+XtKdfviYt/rL4fWhEf0EiirDv9hsAfqEantee/6R4NQOhOdYYrzLj+bbpCW8xnpsR3e4Z9ztgfBFjCkPiF/p1BMGesd0DZqerdNEocMvz1oI8aBjMrmHaKdF0hNRL/HC1OKLh+81zHmuaWXmwD4skAGJcfcs41FIzG//wP/E/0r1h3Hrg2U6XjnTc3js8/3433Mq7gn0UH1dTwHMIfHldNzY4Lx5LUZns6w3oo9WE1j9mm7NcGLPn6xqZzQE2xDovPrGe+oRsIvwim81iJ0rzrQLkePDvtgGhHSG9900M7z0afgr9Tg9SR3jEtZifSBchwasD5LzBURc6q/YWz47o8hb4B12EMIdpd8M5ABpl3qLCuWkafo28bq0vkcLUqCFvjELhCVWBquzPz30VOD7LzDWNX8Yl77HYvTJl566kdgzoPM5Dtun7pam1mM4iDxI1EqUqDng5YTDGzc1c4hxHJZmBnw7ykv//DL5Ripn8TH9Auj7F8iDmnWXTTUhqESIUTU/I67VMZtAO8lKa1brcX5EIdgK9k54qQmx98Ah7gqXQZslj9FmJwKaefFDhnWbEvSyGzEklmtNOQTah9OYBEj9jsM962RPWE2fdTyVIbbXN+NUW048A3xABhS9aH4pHMFXgM8TobvxJ/ixj8xPGbD1kyMa64qVpv+zml504qXYcYoTjmYBXabSEC0cZmUX3qb5azGeG7BMJzFdkkEfgycaodGcvm4E4bXTB2BeXvIfNeIZa//WZSun/4RuNuZ6aDPYV8wTMAdDuQHeHlHETlBDyHh0SU8HwFP0dXQ3mbvL0jFD1suLctaojianxW8iyQwASDNlJKTi9jYY0NY4gYQnbtA9yAPQKjJemIxmY2/qW6QgN195fK/dHp9ccr8LVERO9vMtpvOvmagMATAcZZSG5PtgRrNH41ahCo/yOmBPzu2NVj4fPsU4A4Zu5zHtU+zFORscA+B5BaveZYxqO8YK8iXR9WOcw7+H/mx2YkJY+ohyZrqUrN2ytoW0bNmqaX09+a2/sNLYYk5uvNdwm5shwDUg/7e7zoA+7FsrrNpmg/N7lYjpZbljtLNqHGNT1xGT5d5ycSo8IZjAME2uEFYQjQGsNjQnUgaah3e30PzWIo2dHWYv5uDwpLXSUZa6kyD2hDV+jvYjvZD5zRYPJbOKP5MNlXxUCz1PY3980XRL187vQ0cI+zCWvo1tpYnQgpcK09E1x/oHrlc9O2WieP68UschXBZhSZYRND5tRZjqJp41zQhcGjK5CpoG4aXQm5SkMcQZqUZYgRnNmQu+EZveVN8nLndH3Mx4fvqB1oNGdRBu7u5N2HmXdve/eSY/QwY879hPJXejWL1vyMF+kjX/S109/YgN6ndCX2EwJMUdDse82rfpD08pb9PII/34x0qop8dnj0teNg9JQfsyLY2FlWpd7I7Eq7VUZmgD2anXTntM2sG/8JdimhWOCi3MbJjFeeyWb+vINONZKMFUR+NRUFxRHJ82P4KjLk5zBMybask9a550buQIEgO0tQJ8Begv0DyK8zghjeVo4cDrJ5a9a4hV1TaAby/qDKVZn1ridRM0pLZz8d1qshlI98qjnpOHE1H/hxhPoT0trnw0aftJ00pwBORW7A5ROF7Mb0BHG9G1zIzptJKfOqQEn2ai3e8Xi/vSkLAwLtHLdD/nS0H+z8wVbbZOPjy3ksqKZOQa1zEZSXwdlL4f5zIu28Zrfa/PWF+0UT2BKnAGVV0GFvSWsfJJxwA+rVgoDKNXYM+cxyXPYFvToH8WIToT/eFQvCYOv3Wkdd1FpN/g/SV12B/MbSHgvSx8qDCOoE+jZkYpHVKS5mlYJEX5qXuSTlqN3BPw+0Lt57066BiCXmY+LZ/3ymzkYENBSSPPW5MD6h0Nm6FScNBYABP7IejUFAT9SvTbFNlSAuCPYwPFTyKzjoWEBVO5mZycx/nDQ42GyTucFitWT6DZnHXpVkfkJ4Pv6XtlxzF2Gbe7LAkfzrQ+UzlOOFt/54HmGjwgbqIRW9E+dRLK82rBKY3jF8e0KyLy9lY0Y8mTTWrurbcx6NzoID/2MDvhJlLtNNqF22wyzPpucnHS1YRKO+Fnh9RKpOPijDB3rovKxTH7iGfhpiOj5m7djhFOrLpu5SQNqB80e0X8ejai/bkH8mKdDMNZajgiEOy1zxrSxpPhqaYl24g0MwiP2AZ+EL9hBLu8atu3kw3nqIlNbS5upBKDJ6XSDx9r1+zV147Zr3n2zk2gdFswTBDeqW/+FD8Eda2mBTxPP1CxEu19giXsiP8XNWtZJkwK1jibKczLjmUYRfpACNrujlNLjiB2h95RznI81bi0nAmDcyVs3+A3FWRUPtAmP2OOoO7qqTsyLeagwdUDuVtd278dsLGiNU+ysgWLipIaEpRcY26hP9FhXOlYqiy58LcRvpflVKip04QXRAA+juahl+BWzUILtZAMIhyo4eGA6b4DNOYNx6MTEs66nzFKXtHm1j7lxpC6rPCCScPn+yuSEhZZsgevEvcxgRnFkR8q0iFbgQ6M89dgN5cpg50THPTWHNJSWEvJMMU/NTX55nNQRkI/pB81kHLCRRnAo+F8JuCEV/K/yjjrhKqUMY95Lv6/W+4w0iPsDCbeG5ynvb4X9JtxhzmSPb4j0/bJ0hJ8sv0eaAgZGqrwo5assqX6OfNkrUqN3qUtpWmk7mzbXjpm5rRnxo7P6Kk3vXAYk7rvindmpdxRc9jfR5bpNtiZLfp7wedgT1SGY84Urqr9kJy5HL7u+Ndl+slDj6ojWmvEku8N7w9YIp7bpKXGAezJJJ7JpaGi0aRPj2Gof/C5xaES/sZtWIVeyMvHCNixcUMUEcJfjUZInGZpQoxvEENgJdFQjdpK7fkodKm9VISfti5+iJ31GYliXAnq6HoSdGhp1cQDtgB78lBE0oDJ9eEcT8vR7ca5iLHhKYlIjgR0Kt5rvgIvNaTntsxDNsA6y5xIvHfSIr5IeWcK4G4jzxli0bxEMCzg3wHYzIr+HdCOQh2M2MNFMe2lOJRO6v7BnI48/sgUUzE/GbqA6Z0Zddvr6Yjoyns+MtD6nQu2RI/P8/J3iegtDUriYDW1SKq/8Td6LHCMMkeOG+U5MYFZZ3EVVtagbzADvjP3xUSBQPk/3J3desuioUp+uyixy6q57SG0Dtw5snHgSTevKAdn18ytO979j+hMb0J+WbjUa/pFpVkRvh9nk6vRwmVmZAskmmHmiC4PKDHql3C6Azlwt/yatoywoLqmy4yLkLzTT85r5yrguDeg33UF7WCGqtvysSpZfywYEDb89ywvafaeEtL0F+JOeZNb6LexoB6iLhj0tGiwPghxd2DBiU95PniOEk9HxCvw/kjy/xonzITnJ+O8DRYsI/Nv0UDQIP/UWJ8yh955j2wBq4I3SeiBOqGWt0NZzRf0rCsw4GGUZV9ZHAFJ4bIqFmuYRPT/ahS4YQ9/iUHagcoXER0PZKtb3al5OsXF4ZQeI8gd5Z9gJGhIFwO6gMlA/QgzrPNeFPX0nBu4Un/Zh3vZE8HuDVIlOK9KopHT+KZigMk4XvVKXOzJDGYcvKf4AsoNAFlUXoIrq8QpT/0cOYe3RLxC/j6AgAn5UaHVakTE1tg0RC9OH4GdOBMb8OqAKP4FB1FLYKbpRVCQauYRBzvnzdw1RTYDFsmLuaerq4iFP5XEgLoG2AHUJxvQ99BU/w0FmQJdnT7nn/NaziiuA5+6OAEvdRHabvT9yZ0YCoZFtUJmxUjO5sTnpeFHt7UR+S/dGPbDoChfqSaT1sz+aHTzsZPdvhoSCvFl3GZaV6TUvn19KHo+DyqhoA3MLQ44KGKjQKpX35gnfsCIr5qT7kC7UvS/J2Sbp+2UoLFw79HNrsWHZTC7aOMrElSfs35NrCWRtAezoiBu/5W1XWMjCijpDG2Q3BUom8riB7i5nWTEKKmNm/SMmN6xar30fl4Vudr17VE6lmy7AGkxdKrMgOKq2+ul1IhZjuLZ6Z3G5SUz1ORrmQ4Iu0/EXAPfWkD61QDOsTqTEjJ1FFRP22qMm5xOVDdT1W8VV0BylefZUfrdIqYpLczFf622ZV5ogA8meExOsnkTWuZ+dKKYGMTQ4pyOfLk8JnyZPJMjDus7JkH9UrQPYYHPQjOhrLFZGb9EW8nqN8hdjGwu2/aQRT+i2si7fKNPRqhDVxsqmbs3qvcg0Mb5bpoSXouOOsFxIT5GfN9U10pzB9krtP1Xe36J/HYm+14Tle0mvyPqKBOTjSv3+1VISC3p9XttHtfCQ75umFHY38/XB3utyzMOR+9OhOipV5jfL/DYU5QR6eR2Skwf+QaSOrZq3gfREuYRvJ5X1vXUkdamsO8QJcpAJAxy2n+v7ugkygW4h84xJ8vFpcibWW7QU8xfyjrpJQt3wduhDKB0uaPwsVdJVHR+sEXlU36VU3AgkqVWjwJnT5ID/F0h/VF9sgpYw+In2Clwx3n/p9MpjMc5i4TvPFUO6HwSbd2zTHLNinfSPupz8SuRm6xeFtOj9oa9n3mbrttn+cEF6ueAwnjjEXVI0+Cl0KO8BIJeZ6zPVpdnWup3lFHljtDsCtg2n+xM679j3DtDuHWu6J860o7WGbdvSuDC6XWXIjNZl/bXTDr+L3Z0COL5P3PivxOD+uHQqtGHKwTcF4SsOpG0WGVOJ+Q7blHlRWmkGtwM3VDRsTmRhkrjToCppSTqAYVxRRjuy8a4bcr6hmjhh7ttYdza4J/zOoZNo8T2ecfpGRGKFag20Abwz/LLBtJ4dS06/vxoHpzUuxjwXU5I2T67mauPX60w6anmVhFBOXDPM8PnppZwnKUcu3cc+W7mUqZBK+nEPAJ8VmAZsjPb+/0D/+D8iJCmpEfYTqUtQtOd7vVmm2CNm0AOAE8CdBU6JYiiZ7JhPQdyARD5A6tSpofxNaTHeN5NALNyiXGIgeczLY5reBc+oJ0PG/RszSOtKUXZpzZC+NcDuOd/kDt24azxv9hs+a0d57LwpCwb8JbyMw5A3MEk2vFvJlLwUHQ72ZgHE/VoEv4/YntPYF1wf9ZXX6GFezWJht+WHKX1JWPxOceD4R8gxHLv7/T1HdEpKckA31ouOyQrf+SMI5jGuyllPmbpadDuAN+9H4ojP1fPRjbLkPwpVNPvT1tecs1Y5QvUVPl3kgJBL5nM7lBBlE+HK5FxubOVna8cLBoD3JBE3zMXVYu9SB3gH+lk8U7mJXKc4fRWb0gR39TZvWaKBxAnBADP+hoFxhWowerHFrcp9y/qH/f0O0A7GGeQb/qFL+Ixg8cYtXsN5AMerxet0HXiZyV8bM675U143mkNCBebQ7dlQFHeUj5wQnqemIxpZTYpaH8E4U+6caYDSF+Njp+0EwO7JkjHvZOUpdLUi+wf9bcINnJ9MaWRbRi92KXc23OriW8hylNXS0180PL30qSlVBu5OtngdSOwnAB/wiF8BxKK0oLKM+3SC8cb03knAnK/SiBsuOJ7b/5McO2ycUvkDhOcoTSq37coSJvINVEaTiBXbFgBqORkWipB0Lq/1GhO9zgQaIlNSTxB1laEaftTCrHu4de0KNxM1CoLJzHBGEaO6GHTvSAzFTnqsZUzW6mazdNvN1v4XJw+AQsBH411QnKLZ6G8fBSWYTnL66QHAHQTvO+JO6lE5MpbRlS9WMWQbPUEnW76mU/to9Z11Bu9aidcBMaLfFZx38WNkQlcciRhRg79a+5nMDQJxF7rWmoM6VDrWZ9anmMqFJa/QXeIFpLmT71oPFfCSPpRP/FteDp2lDMIo1Vj/t5EIhpfDXxZeruNKjQrcY7INfijuWMc3i5xM/9mwoog47HnAlY0iqd1EEUS5f1Y+n1CPk+X1HHvp9Zpj5cHmdb5xCBqMXhK9m66gleb7NNU6UukFWomJtjSngz5jBn/Q+ZMPHVr1zmcTbgCAchSmgjtywpyHny/+ROr3MhWxfsD388QoVsNxtpWt8HVdh23bgzivlWvgIV9x3rVqjvro5SrV/iHpCkpGkXGxikmXCnotM7nQWse4sinn4xxPdW7aK05lAJSTvOYcJZ9pDCnyLztboZ2+1zSfvp5JvgiOK7WN5Vh5JnsdF5dQjIoYT1Xaek/9MUEtwzJjknVGopgoE9f8RybjMKoTjD+7Ed0h4dh7VcepTXl2S/N1U8am50IiAhaHVJOxhuhNbDCG/LTrsfxOcFB0zcbOKvFngeuIEe8N6Ziw7JcpFPb/+MtOl4uhncrRgEKznDFax8nuQi+sH0CD3hms9Td3a7SusLt0dhZ+ToDu82l/TL7AflvzrBHz2Abc5ZDTo75y/4g6fQbCSPWX+e6xCPRN5DmuLpXn4a+0t4BjzANoqOijibVKVyo33JhgHx20R15fOqo8s+DrW6VFJImrRYYCo9A7qm/5nA/zB0emQiPHZWRM4/rLS8AcNJjI38cm7wEZzeR1TmKzF3GZ2TEPtHGhYNHG0pxzEvI9rvye0/zMeycLwXV0KGfgTlEFVRg4dd7YKEPWdkzAmdE23Zs53YHvNzx+fER//OyRc33dYHomA60zaDuh3RH2hx2EHbyfRUc1/de6XozoY19faU6N1Tju7PcT20lk/Adpgs9OJ7TkL31RYbxMWM9LLy0/wkRJb00K7A2K8JPTsrIs5UdBUTWA8prhi9n4m8fFu+RG64ZOzTd6JxhssykzQE66kWnUBHAzLxpRTzBsSzjQdh9is3tXZYPNwy63gbNRhg1JUUmsTL0wqTHQOvi8A9SBs2kuHIaa7CFoi+ij2bdQLuyk1vNpYTEPHEUZVyMs7H3no3os67LZJ7KWnJ+hNpF1Hd7eYRPplEkuV34uoM5KYzkFZvhhf11232xzigi4b/LHUAcLxun+Dg9983kgCi6Bz0rLeVO+MxqH4JSxNxqNkIDE0JApXT51P5abGoM6QjDyQHeuPCJgsn5NOOfl18DNtQdPoYMbqNzgdVTSrE8TZHlHwLSZZBmalbcN+JPyCN28PzXQaQNvTfiFnU73tvOcMR6U+ci1fuYBWZ24oSk3IexvyeEbbq4qDgiqiDUuz8f1AoiLeeHWNC/K83zh8jifFgObl4fRNwHY1DuS3AmJvzD4joMPPbLg/6eG1jZsmyz29zwvd4aEtCM5YQ9RBnnf0XtH3y3MkOnECRkPH/xdLL61apsTKeS/zLEj69xNCLztHQMRoz89przNdFQJpe/51aigpjr6pfNoLMdXbZPgY8i4cG6wehnoGiqgdzBpJIBTB7UPQDsD+wloJwnzxyc0OoGpQU4eb3oKkQHalE8yOjpIQ/P5dNONGltEOefk9EnQi2qTjHadwoz09i6SLwBVdnc0VS02gDbQdkZDcz7M5tCRFz8E0Q+y5j2g3X4HSyFXgxz31FKmgKtBfBEMD6ZfLXUs/U0XATl6Nr5fKCyeTGsICVbLmSHXHKOlPWGrLDi1DVWyOzIT/nzcRhomJGURXinWWY/7Fi/9ZExL53VKloqDJ2o+CeYEa67aPrNaosQx+vqNM/5H1UtoxEXKNatFPrF0cZwdRoA73Hme09DbTzg7sF1Dhbyhe4CAL3T2a0/IjOmNwKTbiQRQa+gbgI1w3+6DPizyTrNIMUpXipPeSBxZifQO9IbNwqyzGMyBjnPrYBK5QQ3qv7OLfLI5KoDEHKJEQjr3jN/1RCvhTNfQmHUTubkuWklmnBcxnuCtkG/5PuQnH1PyrLaBXYfVYAzdwQK5ZGO3odlkxBYV4OxUlPQgfyfjZ04j+9D+GawnRNg34k0/2wHcsfGKLeIEsBikdmpuAAAgAElEQVTK5dR7R2OJDmBLgw7ovega6l15B+tcaiRODmIEVZ5DyidjZ9437ivOVrNY6iijpl87uB4cIR+dWoPLBviGoc0wtrnHIa5GSd0LDFaelm2ZL1A4oCz6lOZ7tmmYJNxIaEdI0OppzsHHCHCj6lKbqma16AEnXgPhDVzLTbXmORldiM08wKH2Kc3s7y3Mu6Cba95UmtIvD9FLMVYmit2ZjlBCKBccDHInuEbk+gCAOTkaGN9nBPO3DntfjQ5Md8tjgiE5tcXPZZ78/WgupK+DA44w19xGyBTZOtq8rLtWDLJN/uSqj4q6gbeR6X0Uv2G8Oa49sZej1KOEi7I/bu8TjpZs+E+SehmjkAdjMvxNbM5kX9q4H8vb6enqQGpznfyN8QrmuDs7697OZb0po9vaqvMSq49mmETsrLhI/h9poPO8WimN9nwvz9zYH0I+6mbjq5pXq/D1ika1itkZjsLNamKpxKLAsMu7wF84Nml0mbSHV0YkG5Sc/wkMoWNabDoGNcJG4szWwGi9YyMGqMlae2vY2IzO0qlG5Dy3Gb8ioHMDmtyb7ttUPYkpxUQjWWs1llOMxF3K6G8N0J6M3gxGR9e9DzK8qP4Qxm/JxzDHDdEZukcUYzATcnD8oNdBZ9P8gtKGjQjUGvYuDn9ba+i8ofNZDEtgNOwSHYl6chBRt0r25jSvOQvq6NkcTjxJ/L+NoNIgszq8UNopcFrRsdV6lpoP1y9OIWlfPl6Qh6DPe1PXklOrdc8m/XMN0odhbSeuMGRRDPUeEUMvQD0hbXh1a3pi9jlNeznPSSu9MCseR7nzLvUBeKmMkebYmu3rXES5g8XDb0g0V6loyDPrQWa38qgUHvHVGLFNKhrgCf7r7wG7T6omAqD7RMh6zWRjY7gupmtPk41EeY+LKwINTLn7DiCzd+haU/ljdjjyGWyHUEFoOIsfVpNutC5rmNYJdBYXqbs3d7h/+w549x79zRvgPz6AP53R6YswbWhUr33Htu8SMWxntJ/fov3yDvvvDzi3z8D5Efj86BESQez6/jIqTcal6dRcJOqI8BuefaP04kn99dKpasNH6VKeP7hnF11d0/tr3XwRfRwImcFoXr9TXSMVNObyRQvSP3sun/mWzekzx0BUhmal/PVYLFeX4PATLYR0cjSpA1NdqZx3kpwB+QZJMyVGFU+T973DdiDqfdyISXU0bgueLwrJLK4up6FfK3or4zwiITX+4rnyTCIdBc9zqjiaZ64TXK48b4iEZm/CMxXfCHa3LxHi1NRGwNZx9/7/1EOJWxQ0K+gd5vFp0INoFMo6kRwh+yh5fWiIi5eteNqSz5vJpwT63BWFFR/IJ0KOlahaJtV9xFsOi9u8v4XeFnwjG5p8YW+GBcUXReQLx6f/ARKKtYHapgZ0AvS7nzzP+b2O1O0FbEck6GeQSncXhsuh/CVVmQpOEip4BISDBDArpK+TtGFbnDsJLVZqhtdNv3O+k5pQLppqBHpsEkaO9dTx+w6/Z3xjcG/mtwLqQOMmG0f7I7BTeMgz1YXe0ULEfn7CMr2ARVWFvTwf5PDRENFYPkPzO+Te8/H5+JskDLsdUbWQ7O+xTh+N1ySZbqT/Pn1Xw5UjHKyRFB7R+6OGctKxbgDIwj7ZxieLk1FjSJiO7hsCdmVBFa6WEu34IjC9YiA2kO3kuQGd6i1DIAWDQ5HwC2JQ20BdaDPusNW68jhmHz+HOcFKc9QCvyMaENylyBFWbIOEPDfP4Th5TjrdNi2v9djGyYS3FS6vpRXe7TtPOes51sSRU5/23v10KTPriQ7Gqck8fuxx8oZtAar8G3y247TH/RjVnXFuZRzbeG1Qo8gGBvCL6iYE4F4NASfgGKu+YD8Gy/KVz5E385DPHw/8Qj9/DImH0cHVA+ex9XkFnOHidpoQu1SU85KZTzSAyRxRSE+Pi9xl1aeINqCd4HqXWIWBjfQecmXyUNrWuruePG/UFC8x8VgNf6Kfs34i+mgblWxRBMy1Q01/NizIFB5tuxRmwMyxlJ/lBZTnjweyqduiEUtLFq88NYW/FjRHy7l4bulRv9+ldwHBelbHiaxU76C/ZL16T1mJrV6FS1lj4zAWfHHyIAnixIxGslm+0+5yhAgaYp4LbEy9kjAZr4tOjsEi87BFcPRK6wXdqYaVSDbasTaPnAzjpI1TUNLpkZFe66dSItEjq+ypOmSK2hhFSvfq6K/6HdGP4kqFiXVmB80R6IlX1Txhmg/eJyprIKLmYeclZDWmPZNQd1eMPk3gqcesJ4IG4a8V5nlsdBjG+phvhFlMLycw8/hEr/OoEDcQzLOB0lu2OgqBUvBZZ1BH+uFRSryDDM5rMsD42pCH0vPC+zTiyOBoYP2rhrR7XXafXRTM/YIfqCBQPlBVNBEDgVOjYW6MLpe63fDPqnes5/7xiysp7tm4LV1oo7yiCUOKZAupjfhM8jpkGy+GPAh0nOfmwGBli3xMzSM9r3lGpjfzzsLvPU9w7lz3DPntg1NzJh0iGLvzhQkPB/WZxLIplaPVln0+0px56uT2WKWwram8ZOAi7z0Wssz7mpx5bM3vqQlcdh1UMwM6Bdk2q1cnV0c4vklUrCRjNY9xcw8uBnWUk0bgJ8+NmRr+FGdu/LL/WU52cxejUWd2PMlYZaEsf+7mYYZxd6pWozqJbsU9RtTl9hEp6YCFu6leqWVR/kgMY5ScIMidhNWxKAdIM9FmDE0HyHm/4bLwJZOZBqvIDhlyBhleKMqN20O5/TFNLMHZo8mded6OzyfR6MNz0OCT+eoVOZf3D8JzMZ4Bl/mxT5tJE5phGMNx25xPasClWiLjCOAl4G7JdyEZ4xnGgzLQqTXOP25s2nQ0J7NbVJODxIl/Zueu4/zBIwWWtD7PMErukFTZJqL8jJfeIqPuOWqaOR9Bw2qlN+oURDWbJ/M60srGOcxpHVsGg4XgM8d3E4Ll7CSijgA6y/7p6XQPvH2D/uN79N/PaKfmeiYzS1AIZjkoswP9LKHc2w93wN6BR3MmkPWtr9dXKfMd7RQdMtzbiMbJ8iV73Ud7MsetPb+tr5j+Nneg/6FpQZdFyPqEvkbAawayqGj+fSA4fevEtbJU/7C5PFVB4/bIU5JpsohFtP1oJDb1JgzVvNQBpIXDhQn17LkWuMoKeCyeVgi8FQN0fXivpVv7dcSUboZ1LJZo6KYCwxdz4vCVvH2i0ptFN8gbKo3kzuwGsN4H0rm7N20SXdU4bxD05Imn4+pBFvzggCg30p76J3cWY5Ofih0UV0pliSFW/e8sXVSWn0ILoZgdl7LxjfHzz0ZlmKW+NE7DmM1K7hNTnr9DepLQP5DdU83fQsa78ZzipzWZT6fYToEvSCwct+SOTWFGayR/1NA2ObXYPgF4r4tJ9VERwznQfic0bqAzA48bcAZwZtA79ZbeAf6QFlP2mfFyuFg+WGE+NV2r4sLa7DhZ+HZjWLmSA3n7cWgoG9XH967g6ud7GjR4e8/pO/kr3uVEOrWzXJHAG2jLq/Z0zy3bb/3e2GkLMDLSdjg22WI8Nf+hjMFivD/pwkR5cQqPKp8/SNZyUs4ijKxOmqeF0sqQuhpPGn8MCyrIhpZFWmjKQ+pZxLliOmzw0vNbUi474lp5Qfo/0175nyI/iPxEjZ9aBcAk+la38aYN/4aGfxHDXcJXsuQIz7fMwSVqpA+3YG3Mc87V93PNSD3RbNZlCL9g82eb8saWDGdGqk5midcbagmAGCiP4cv9uyXZPsIJJ+flRLLQfqRztEsAqKn6oWHXTZ42U3RkXB/wCKNqg0fOhTeYh36c3yS8cQrx+O4AOBkBGScNtX8q2wZNOc8ptbPVmaR0uMNOvRO+UNzuvUwD3cSpKNQXZWI/Tc9ZN3tMk5nUH7WOe18tVMO05VmtJbIbzlQ/wx12Zl5kfJuV0+tp4JTroQM/kMLj12uIPLBRax3gxikCw2gen0A+TJd54pz30oGJy83mOAD2qU/SIz8Vp/q6nzDUeTWK37llKk+Oft2aqth5iYyQtCVdwdxUIiqA8XUzlz9Vx1phRa4cMF4hBgxpK6sJUX6N2bpiomE+R775x3Uh8yHBPpNXHoEjXe6pSes6BGsUIAflLz6jQQe016YPDflLdekdnbHu6w1y3lRImh4vjRhFdmJR4NIw3qJLfOP0NHCexx9Edmbj+9ESKk6VM4ZMk3xZw37UxlzDJWhvSbd4NHD5dGeE0mOEVLU1cSojOpHo8d4iJdrEBR44TNFlLnNUgUjIbvp0kvl+gtrhjbpas4ihusZoDY2a6OPU0Dh0YJdTpDwX43pkAi7tD4SCaLLAHJSYKj6T+RtmDJdIBnqu3Jzw3Wk44YYH49SN6Un7MLNQ8f1BWe8SaOd4psjz6CgG52HlC+CPJh2lH8+b3i9MT2j0e+CfDAtldBssU77voRP/pG+WLuwtmaE+Pg/UqefOy+WCh5KA5IWgFCBiNaZ57OCBRmZisYor7ML3qTVsbUNrm0ZxDt7MQFzwoutjv17N99mf0cd/0qumfwzo3zJR/qDhVV2WzwWtcF1+39pmaHIqkIpF2hZgE5CpTQowaAEPodaZ0rQNYUpxCkNmOPGq1ZAZIWKpMjDvz2LR55orlfdHC4Ux5ZO2XqGv9VLp4mBwy3i8jOOtmiiK6HTC6gDWZzXu/5WQVByPF/lz28L0zbAq+Bxoyg5lmJB4L+Gb0Ai4ew/qH/DwX/8fcAfQSfPYjp+Vz/AZIHayShuzYmJApyCRznXMzfie4zD6PMl0l4VZ6fhNqP2q6drY2O8yf/O7zJdCoSg4Lo4RFKHbdYHjz2wla3+57QxXdrgY4cjtjosiWzwedOVQ4bqQyknHsukzrrYTl3vRwmrBochOPgoQ1dsTYN3MlMjtOrfcMxwg8AJ97FHe0UgOUrAoarYItQOpdodqa5DFattArf//7L1pmyQ3jib4ghYpqaRS9cz0Hh/2//+0PZ55tnt2VKUrw43YD7hBmrtHZOrorqQU6e5mPEAQFwkSlMV4ZbplYaIbwrvJ6K73793VyL29J+q5Wq2l/OAv2GfaVnj/fXeq5+RO8044V2VsEs/AeYLHTf3hB+jrCYxTeO4YsZBAAEOvqNATo3ZCoBgKbOhLCwWInfa+2cEmFdTzdtCtbt2c5KFTJwS/nGSQTRZUnk95yH6/X+Tzo2lXvGZ5fIkIaYgyQ5CeArGTIfATruR5ayO+BrUVKJ9b7u/oSmWB/7tvm3QS90IHmBm3eWKCcbCEID2IMME4bby1PwcI/4oP+DcPTI2Vp++Bu+Bs953wt60yupcet//3XNflItiTyfuSKuD10dP1dzv10nawR8YrKDwir0zXygP2q5XkGevpI7gzTXWD1jF0Ui7ObDmqY6E4Q9+oA97v3kwRasjOO9t3DUHn564HKrICfqvj3mh+QDicbXHUaHANta88UuZH2X19T0gEf+UNZkCdXjAifLFNRTpnEjFsG4CdSK+ug4BnJZ0VGyYrMxZfYTOUtLmIURbGvX6WEftFnwwQvoXQgN+K5Uf4AhbDuUPVxHvGasEsXeAFSWaW/DtGim5Z2VKRZeGKl1ow8GZ/s7x31RBwJxWxALOjH7WDn9XYvRuV8mrbuxOptXbJec+elRNxsmlq6nezFUU1coTZ175kMRPtbeSfv9GCuR9bBKw6tI/l22zzPeYMTzPhSeA0GLmVp6V7Tzf53nRZz5MNNLotn9i8Kw9fa111Ircvl+y4TO8uGymuW9jRcofNKYo/DzrflLb2qf68oL97V0AWvrRNJAyUa29SxS5zFuEY9clr1cKOoxwhJH0hfcP2mfKVutb+hWzk+tBshC6D9qPbodqkjugslVu2jutCy9bmbC+xnQYMmEOCkq2R5ZVJhtyzIEpfpswgmD2l3fApioFfTmyGVreyeY4xaGBgyMZdGrI5Pd2FKzo4Igv4dTDJdsiuG3XLlw10Ve6mzZV9uJR+PCx7OUk+3Qbg8l+lqaA7m1Oy80fQoeJkIZ9r+uFUj3WJmPW8DUl0o8Fy8FTr91P3fhWZM0Nty34zx1wvD2G/VS6v8xDrARtE3cutH806yZsAGPC5G8Wz/Pvp5RCNJOb9GdWObcbybyd4DQ/3dHl/d2XgfUn/4ZKw/TuJK9kZl1mSE73ndWnb7bmNiePvOWVMa6YhgWeVGZuuFeuXAbl+MOn6CYBYDvOJUJcDgC8vGMch11LQUJmY5tc5DQIdQw8ThiM97IPPnO5Uyg/e/zOlLw7096YrJdTniVtZsNMgb1Qc7hF5yynwNGksJlh8D8OG6ozWjOrsALs34905vDYTaA9p5ODporXd2cqswmhaAb2v2iYqrWu9q55UvN5lfKmw73QCdMe9t/X7K/lMIaWbRZn8NmlnD21bvEKL04oa7+bo1BkBax4S+1+c5kTiJB8WmvQnCeM+CXwAfn+2ahtK9ZZkjkEHmuTZz6W4tkFg3ckq68lD7kCfkWfLQgsOzPr9o43BDZBPg5TGrKUy/c2yQLZUi7K3MMA05Psg8Dh0gtijBXS5sBGitEF3llV9hrXvUenDddrgLI2570G6B8+7U287QrBF1eYQFzyRLhJEWFsG4yiGX5lU+ynkaPHUqTIzwD9aqMs0oQOlqzZst6SekvhJCz66rGtBOtfvnyTGHs3aHhTFVfF6+vI6vbHtq9PoBs8z1flq8QncSEI34wSfJ4jkjju7V0kiTabFD50sYGDViW1Y4nd/ARSnNgMiWBngr+O7JSoZEfRrz8TlxHSTI5GTAZpgHik0HDsPrIniXREfjWEzP4N8g4g5zEU02dLGvYHYvfutZP5W++u/MelD+aZ90id+2Y86VG3xb+jmhKme1X+Nm5pRx2v9WUDL6VCeMZlg+Cbgv758ABHwP14/4gdAxueDVXVqdpEtfwPhRV9yWs1id4dpfm72XeGhBiAD/0Iy9RkRFBP/Th9dvuVifwPha3wNk7FCZv2KgPqL27d8tvo0pHhdevM5sd95/aJ1+ilNIvyMG+Ku6bQ5TfUoqQOd1DEueQYO+iBXqNALmAinhu81mDl9JxyO21+ZMfTWa+ITttTMBHzFFUfy/UAYS/Yy8bqZbG21e71soSbJXk96yQ/GumJ59flM2st4OQkg9UwO8sCSm9URKBleAXyFoNh92jhG2lsC6oJR0eWkND+D5JnkRDlJFCUC6zUsDB7AzwR8C7kP1Lxg2aZzSaP3+TlqEpxCr+S2gO8rzFkXtXZfonbtcjzKlB7lQ3Ad36zcmvtnZYpqU5t0bw58gn2x1Kd4KJsHfiu9ITUP1W1dT6gkgdkGTgwbcPpeUqsgO97NjCtiwdtQnXTZV7Oz9umReVjtmLxBxSCo4amXdrdNd3u826l3xs2H9wHkV6YlISYb92Dt8Gztows4M19rUeElKs8jelFyN5YdNrlOSn2yOBz6aAApCMZ/mPQMvB5BaZisy5IoTosv5fxZLIgzjCNDR2+sb2Byc2LqBjau5Xqzu/p2eojb+27X/DYp6+715HrgBv4vwE5zcc2O5tdPm77mm/jCNr7fI3svJK8bB3Vj0mBj024NNDlodjcNdaDb9TCHOoEp6leFKjaemTtc9jG7Ekt6VYpRbxjr2XWuvK+2i1SpmOUJZrtXXa7psWkjCHp3OpexYN5RkeG9vvPTmg9IyWq38bLNzoP0BPog0GnjHmslZKdkdB2ZOG2k3jnEMhE8Adf6Pj1I9vFVNazvt+L6vcl1xtW78iW9o8d66r1pTuB4MkLnb2cGfUl/8nSlH5d87pcBsu8jtG3SBylls6TY/UXhZZ0tcy0u+VT4mbDtk0FimSQOaBRbUtlDsOs0iQjjGKDjwMtx4OOwTewRDdrkqU/l1YGer0I1EHOQ3S/p901fHOifkp51pD7IVuc/lBjTtCtVZvX6FpPoccO+WJ1Cuplk8b/02+ohOJO7U7MYugnWVCbD4K0WoyU3rEKPhjjMVXr43ZzgApJImiQBd3g2w4Co2eJu9W4KtWSC0eq7HPcdvh9X/6Z0OdFGjK3loSf790Sys0VAsrN2eNiOAfxkqxQj307LZvCqZWyLwjQI+ECgQ05SMbMuECN20c60W+sfcbKcWuPc7imD2tXeMVbKGrILlafizTwMGoYleIPjD1hnSpl5iGu7MQtDGatn0iNaov79XoENv5aJ134gl+mRjYUpdaI4gX6ow/xQR/oYsng+bKz6YGWYuvXzVIcdut0iXV488xG4mDQscxBbIbZFEl8xTnJB6+VP2jhB7UN3UrfNTKnJ8o6+U+BZHZA/dm4wPiDfKS6niGJyTLANDtEfN+7Y7mWD71KvVmii7fQRKU8yuT3/BFlliwl2TflPD6oLRNRKsifA8hWYN+2WL1TvO/8xfb+6B/27Hb002dJlyIvCerLci4QJ8Al8OEGvJ8A3j94hKpDEgaITAlv4WHGUGvPNF0EzPk4FR60SBoCfFzzanaiZNwuf0gBjhs7Xazp4mCeHIccM8iTGKl/RJ2yabYMkqPVjgN15PjS/XSlTZWP+7N/vPbtKfVAb8E+Vi2f1FI2dAjb0BPwv44g7vUhDXRKHE703Q1jtpD0IWSlgwdm4g5uyE3KbYXm/kxx25+0WfU6/LWUwd+UvwUovMnjZTlzgJlTcBHOzbXRYbKpV7lv9diKbCRGpBylqDyXdYRvaYDolNlfkLbQC0fDm7E5whtCK8dFHhA3EJKHcpfTQrjNs8447JVPXf/Hl1Bx8P1qtT3a2SlK/ZL3IODeOqLKs1JGaurcNWUdI0U6r2vB31hS3N9zsiYBlr/Xi6SsgUV9Ufr4SYhzScUY95OD63OJGMMN5HLAFbsZPAP4K0u0RyveqUiz87XGJkjvyqeiJLO+DL8JmyL1dBfhMN70D+zEyGigWSBpyqzveU7ny8F5apbP06UpaPZJiNUVoWcNJD/cvr3eC9m2t2Ul0AHZNLoqDj3kVOxmZHJu0hewsMguDaQQUzosN5mTL1odXg0Dr+23WOjKg0AEbc0AxZsDsdPquhN/z9ThxHptUT7cprdkHfar69E6+rlLuZF3ypJChLlVJN0px1gvhmPLi2T5MpmFtV/qe45KIQytlequ580x6pkyvm7H1PV2ZJ1VuKY80J6Nztduf0XY5nZte9UOv9by1/UttHFj/t3GbHpSrO1R504YJUhvCPJTcntcygZsqvXZSvb/XUuawTThxtd2JjjuE3K5+qvVnCWFDQCD3qwK6QY7zFr28pY/iicuxiA5g0sH+pjXiejCSmEtqd02o81dOoJf/SNas7DR60GS96MVPVQNu62HDp3l9IGbs+bNurPb+MMsGDQ4K8PeT5c/WDQqNBKVaJAMfNgq4C/x3kmJbxBypA33KtUNDIyPRsJP3uspjhKQKb2dVQvmVLJJZIU9OfwjCpPbe69ITXXl3BiBrMNPyoNr3aqD1DUuGu6eSnWq1QrYDfD6H23KPihkHn5KW6UvIpqRkEh674tro/m0D71EKX9Ifn9Jm250Rfm/ol3nVVap69jJLr0TlQegeNQjcqXDfUCGw7rCGOtHJZQLTxFQbweTVOIaGcrcDLhlelaEm9I4BejlALwOw6LtvmG18erowgv7J0xcH+udKi+LYPNO0ZUObbOg9h77As1Q06m/zdCyT03uwhpQSZ4kyfXbQm6O42Q3h4Pd42wjuXzq0wBJsWE1bcu+numopTjguE2V/ZLVly7sZKGC4B8BiFtvspnz2Bjb9uSuzfh/h0teyKz7sS+7E54DLJhYP0hY/Ri8WkgoWv0ry2pj4dZt62nAQ6EXuJ3X6HFrBUIPTJgpz1641r237+Ed/CsxTp1g0UU5VSmMoR1y8nOG6GX/2joFY2UxZgPX3FvY77x6+3/NffZ1lzOMGlwmIySqb1Zjz/DiAccRCfnauaxlSHHGrsozLW1KsXr+x4JruiQAnHQ5epCXTk7ttt20IPZmMDOd5F8T6M8ltAgE/sd9hzkA5uUvfGcyM+fcI0cZ5ooge8lL+nWoI0pTJc5kye/m0VJ7ZgvNDe/YbT4AeVb/Yg994/338wnO8T98+QaRXTvO3JG4/jE984WzKRHpM0HkCdAPNAxgn6JXk1A/Zp9RhpzEyteUUrMjapIxsQcf4GWWC7J8ZXAr5GTUD+EblJEMAe4U7zvX6FqEvDVHCOrOfScnQiTgiiSq3e8h3UMhh59s4l+F/Wu56ZLsAz8+eTY/kbdfhV+UzHDZCuW7efsbYythkJ7pgnByFyHmzvXXJGyaHo/7+/n98fF1Nxpu/BgD87SXOn75OOb8tC4prmz9kNJRFrda+L4IR/ue8RZcGrQtfDe5f8evykgD8BV9Z5SaMkcekpp3wduC2c/qlLMM3EPoNBmnDLeldaj5G1kUAbstYdW2ojDamURLZE8mYtmTAop4U+Exe+PNwPnFqD/RYPOdkZV2FJBMh6iHtsoUuN+d0azjDnIzneqB+Z+teGXCXUANIjgpGC7He8y4KScozQMwaXUZI2K6UjN5Q28ymfA1gTMbp8owxmP0U/U8ke7fMTLXRmmYqX8Gr9Fag1TrjnFtszrio5OJ5xUrGS46zEXlWvHH7A/JoJdvIbZ1N4QTm3ZG2zdnvSSwbZ6AO7P22z8+fKt9s+BiBV1GZhi3FF1tJ2wQQ8qaOUOO3nh5uNI3313vdP0Ufb/IVNr9o9AqWZSPhpbC6/v6utMHzOqRrsnF01a6jp3Bzl/FJXlo5Gf8k4/VtcTr35/qjqItH5s5vMF3YVmmygR7nnYueIJXzWsYEP6EpQBUzHBurROwo3lGfhfROXMvJFudcZ5N9m370vnR5Ge3uyy1rUGVtZCL3Zu+Rqz0sHUhzXdf3Tt8sMtPha9j304NGx4A5X6UW0uGgRJPmPE/6D3FVgYHj138YmKkHGcVDy243JzPcKQ2HxXSmhiI33eq224av78xJKenmdQwZ7KE7obi0pzoObLQVznFzLLkjXd8ZsfWsarMAACAASURBVNlz35ib2vbfmV7193uSz9hsAyiZLTq1LY1IpeEt3SRfZGD0t+hw9/Q/mYJIN8/js/DizmR4Ezpa5UDA/bAeJWhns8zMv5OgLUzzG7T3Jf150+cycK/kxxN0dX8Gl3iLbb68yekmr8ohTuafyfgBeHimJFO9OGn0jHt2MsHX0Ok4MF4OjOPA/IQl5i/p86UvDvTPmbIDessQ6zPevqaog+qfTGKzVdBmKa4LdzMovvMstZnhXECOyTLlRZRysqDC5K1mve2f0i77Oyp/3herNgvOZFeXWVpqzwzVsIbVKHXnuWZcDKHUB//6QPrfe/3eRRZN3PuNjIrW6U9saw8ANv1rbSUcl2SPhhq2dtLcHOIkY0IDErdRHa2SF8CH74D5D7nT86//Anz8oW5cbCzQ22YgTsB9q2V+QaxEJgLlBZdWj054KPWZOGg4EFBmXpU808BdyogG/MOxvEt097N6P2jzTj8zjZWx1t/t3lUcI+5rIXnOLsciHHbB80O2um/yhJzhkBUpb524raUvD/lYP3Mml0UcE/4uxD+J/WyCCNBflbiJNMSxNjQAvBAY3wIE/OvX3+Pf/8//rhNIWcDI/2kHBPMx79W/O3qK03xyAnNKGLTJc5kQ5wWiwlI9dWS/df6UT5gvdaOe+N61B8SY5uvNB0Uo9e80j9X1XYRLWtr7XCnPYR3xwH5zGmLS74sh4kRnmnInOt1AUxdB55RQUirvqNCwOdxS81o/JTmX35rqXNBRFHsv27pKlKolgD8ApKHeTgYf5kCNcJSySUBjzhf9jdizwpY/L3lpG3rPs0BnodvhE6Dap65UrpwbzzL7W4XCXS66yJdOy4TBpJ/p5L71xeiH7CS6ojGRX62K4vQYYwVxt1q1XSkSuquqtg7AD2B8r+P7d9sg95ZFt9L9rj84wZoeL6fkpf0fAHwP1f2+IUTq/VnvlKVWLLYhnP4wIq7MkjfO5hFuCoztJ/jgDno42qxzO4piIDkyxCZ/0WY/Gqxdv6UHecGZXaYPkN+NHrlko4mdKAg+eeVTr1xixJ0Ijk4Uu0r7Is8P/X0GaFB5ZQVGtoWVlu3u2ay3ArltvtRTpoHAhWM3H51K4nZXS7I4/NtHCP7t8ddpV8pHO/25HUjtwTyU9UKeMSy8uTnOOTVpTk7GSZXNGOlgBMnp859AOFjiDHyver6cXHwkg7IMT9gIS2DzOr2yZe9tnfufm6lIFVZmBdkbV5H6j3yabSRjzilD0QFLY0Gvb5XoyjIBZUaKw6jj/oTdX6dez0PD+Qv1F4oVosBVFtV3Or6jlMdT0Tdj8W7b8Vnp0TBUN9Tk9qmKpUdweTVX/MHbr+9P1uCDyjJMhPqZf/RqKB6V5RawT3UsSkpxUKqc8Cb0BDa1+mxDk93pXGzET0TQlldsZfPetVJ8Z/QSnd8b4VXmW4SSbiBtHNKcTvlTzmmf4YwtPKu/LaITtzaYKsz9Dnf2P0FAlo+1vXVT34qLe29rj+Lf/LdPrr/LE7FFZCd3dIpyVmbsokYEWxAO1X0e6l7tNQk2GDo5Q59Pmof9l3QBp0bcAEvbH/QZ2SlHqCuYh4YjHxhkDnRphG291/iPbW7vCrqgx5w5xYYppzanHoiUDfEWmn3CTp9LnuwsXx3sDOYZ4dsZkYudqhIdsePKnfF5jMu6ZuXj/Gsg/FGTyEPgFzuNrSdeezHza82N9tIBgvKqbxT2hWrak3CeBJtN6v1WA4CNd7UJlnEI/dT0eWnDmNXgbQDMTNMIWrS287Nd5Iaxoa1n0jNqfNl0m98pngZtZPYTeu9L+nMkpeXdcCWRfV04zcHi8RvHvvBv0jWJLy4pyoQ5U+MPKh/21f+0QtmQZRuM1n4wTG7K30zyt/Y1CRciCQf2MkDjkMiuND4/R5R5NVYElYlUyvdPnL440D9HWuZj9CRtGVNeKRWk9ypYjFspHC1B8Lt2M+Or+92yOX/uToKiSBlna22faBRjbYW9CZwkH7zaZJuwGY1mlLmlqpdmFaO1cfYVDGZgWBEzaLKR6+3su7++3WT8U6V7QP1GRshdPCjt+ulxjSxgTnQYTSFOpdMAf6/vD/ktDtq/gs8fQEcaGbMLL5XzzsrdaFGnrw3s7gzPjBNt+2TPNWkq73negftPoa/MmztD+57zfNc4JZxnWQSSe1koPulIodyTk53LZqDf0iTedagPLr/ZLivVc/tMrXxSx7L+yPR0A/AhyS/PKxPi//p//O8QKrvh//37/y0iTu/+chb4O9LELJ0wacLf9sNbQQvXRvoX4duwKZ8M6Pz3OUf7ynn+bPo2fScIjuaPwHffxUOGhlb/A4Q81/GN5/pJLHeee7i2KfL1nABOWXiZhHkyiE/weFEha3J0uMEvQ2jh0fUjGQjkgPwMVttBHGdBiVyAs9QVf6NbvbuXct4x4r60OYGXQybTsuqja2cWFpr1JEdq15zknC6FIqp5jLoJLs/dpPLfV33p6Rna+CQhrp+PiLsqMtNWq5CqnyJqyB8PHZB/x68a4l/r7if5c7tlUYSivpxvQQFtZKfpKpY6bqfej966dw8XF/LI26HNs9z8Lp+++zuA75V2rJ1y4g6BR3lcN75USr3Qrb4htenaAi8nvuldtROhgsM8DOzP9VfHe4FVoXCgKRySbPsMBCC3a6wdR08gJy/w1yZNcpgeSgvjC0z5i5ZjAl0af4kOK/u3H9kA7LKiFbrSYz4YG+uz9fVuWhaX4/EJW0CWuYtfqcSo6zxah23JmASJLKEbogbJco2Vt8VxYuCnCfx1bKdEG1hrPp+aImh4VV87WrvWHPeAiP7aNhF5ujM9XE8ZzFyt8an8knmqtJzMpB1EV/nX9Kw8f5xokcX3U/T7ni7b0K+3QkXu9KLmAFjHvQrU/WmbK77LObLFscsQjiZ4rt4WbZ7BmXSPmTRmpWlu76/KYe1eEcwbZVXDYTxOC72pXr6c21mZrxJcH/1xry6WSri8a1K96K6SzzYDGQ/ZhifTl5lJf8e0kz353aN8yT16t5a81zPLaXOHym+pxy42keiL5pSklXzY2td5mDnmPFeMQ4efUzu1LzVv/r2cI88K6mkxtPTiIi3GYXttdhi5feHSgcTBG/3IhMUgyAb/AwDPEXMKko25THbV1ao/wEHD4V+R1u2mP+8bketl2SyVEKULXnLiXP6Ood/1bluHPckmJtFVZGPeNGWNpWXPySDQddW8AV57qC/7fwCDSaPPoTl9pjnjp9ASm1WBhDt23odHratjn6mA2q/4KvgcRGAmHCROdFJaAFA29Dtp5g0MVifBD8HERpeaus98SXthcP0s2YecNuCaGe17NKE48DnrI8ba2b1PJCfoz2ePPE5vaOMP0AVf0h+c+Bl6f6YexIRoYaMr26oRnNslTW6n7ATEWpjL/pClUDBcJ+s/PBmYIj8xGTwnJk/MqYLAw8ZrYYIeOBwY4wAOkmUyanLkc6bPNRb/BOmLA/09aUdbfZ52lc/zbMI/FeOn/S5O9MgTk9bWaOGBDsh+IlRhp60SI+id0mm3Y72Zh1r/+wQ0wZKA8LMtPgmwvo44FpUF4GKdrJNg9gqTlZJnM5Gp9LEv7G/NvZ1g/Y3TMhyrXL8u13H/1lTt8vVZ2TDRmMFDtvdPLZdPog+lqyFOdrx8C8yfgJeB45u/Yv70E3DYQrH+6cHmndjnBe6mccxPeFofdkTfDFVCWNjdYb7pfgBi7WceuFDSSwV30uUxjxaK9165xaDQzyJDkuxJjnHZHpxPoA9xpg/h3wgrGyFkL+132i28PpdcGhK3Tq/Srmz023V9qdwAT+POK+qFgj7R+jeL7KdET981kWWwkEwe7W7omFjHuZCYtDY5nS+dK9/1H2Y38vic6kAH+DzB55T7t+2uLTMQ0/e76a0o+hbiON85z7f1XzTwbWqcCMBfk6WrA2qOHOf3xv+fJe0XC5YbYrMzPcuJvPnBL789wZPApzpQ5pST3ONUPXoAPIAZVyrYgpJ1s+97s++MEI+RRx1oNmHIPaP8RZ8yIY79H6GL41geaIy0MeOU6yCmbkmfh+JB6yLWvikepgG5ka8c74y9YuJDOPSkP9t9IA32sAeel0afL+3qui+4QgKYDHCXWspBOKcsgL3offMipQVn04aMUbu+tQ0bxRSe6bI45VuUNqWxQpG3/w1fwYTNv+tpau9PZ6ftMLVIEh2ti61Qf/+dgL/lfrjoFNnpm1IIxhmpKYHbbOV6L2X+bSP2Al8oLt1ROW5oCfZDaJ4kz1jvzQbDIuYIFBYNZmc1WW15XqHlEmuQn4oOd6zk4mSXKSyO2601DV88COsfg7/G1wBe6UxlrIdUoPc5P1eM18WAbhegKfDdwvQTfOxNbPK2Xf2/Akgr7QCAr2fcM4+SG/iFbwqFXmuhBq05vYESqyuFVSbvj4hKw6843w93zOjAkHDSP6B7VgH8jSN0vPXTR4hiSJlytLANWoD0/gKfybhxh9sTojYoJj0zB4gS6yymTdOvUahI+d6XyibXPPNIP+zazWsB96ltfZvpk+7YKeHgTq8vG2vwLAheVbuhpGJwL2hjfx61PDsBXMBKCmn3fsd/XrCoFb2suLV/Z+zutrtpc0c7HfFbG5V65ov3Ca5nTI0++E2vMz5AuPS1FAvzM+kupBlOol2rbqEz5/1ktyXT7x5qL+HfAblLD2XI/mo6bt8v8yybXQPBnPL4ulYa+jzlct1sV4+kcTJ3cNYPccgEoW+t/dSWwdDbznI2oK5b3UrZlq90OdOD6f/lXa55l+rz3dzVGh14kYgsnM4bs9lbLOuTjnMG9D540/+EAQZjDuCYOv/hU59DnMYwhzBjJlujy2kbGdelzCB13MoJ8rpRnyB3nh8kDpGDBl7GC8bLEIe6baSgFfdwOHLrRQN4+XyzVdgCtrnAaM3Pnrugj9OjRlzaQ5YIdMyzOs+T4x2Jl7k9n9Z+Q6TzUJtTeKQK/x03LXn0MJJ8fovogKxJJLz1tZhHosbGyzGcB6HITl5fFjlkfTJ+VMlo+KWQpd5Ba8M3+DH8bvUu5HVtZumMCY+tnZVlr+J7OUTxUGAuVT6Vwe4N2umhS+76pIa/pD9RojTOvm70kBvfmbxqRkyQU3sWhdDIPitHg9fravJD+Sqvk7kFmUWn+50sl3I7M855gs4JPm+4zRPnnOA5A84u+AhyV/oxMIYIu3Tu4a5p9Jumsl78z5m+ONA/R9rPE+/kbyGM3bIl+fNF4PTnAkjD+ngeCxX5qHHNRWGK9zDY/e7EbZVEcoINA6Cj5q+cv6mAE6zBfGViYH0bQ5TuAVnwNwPYF+QC6RZK3k6RhfGjRvTUHZfnDThvtW8b4WkyzO2L3Pc/LOXZ1u71I9g2xtYbmt4OZ3am3vs8SCzcYZ9wJ7l9Z/NmmGV8kId6J3XSfjgOfMTwk+vi9I6/PO6l5z1UUdbdy19W6mbcIpglE0R3JFD/wiU8cjSMGEt7n+9K7mGor9K9MU+OaFX5dfgXmbUMbjXqbTOLZVNFXj7Noe7PzYkuA+RRJi7BpoKipwl2FTPvT5u5ylPtdrJ4JwyXQ/ojKo38ygD9CAbw7z/9mGhmYmRmJZtnbYwzRqwu+07xGacIJ4uz/DaBU5zo0B2UuEleOfVsDSGMRyAZkC29BzfPOs4fpbfMzd6q1x/2ayssUjrT81+VFr9JxXW3T5ZFNlGwPzsxYKcqzkNPnL/o5pZDjPFxyPuXD3UO6+BVnW76tauhLWrIZHAa/yxX/UiThVTP9oZKq2OC+dAT51qGTj2dniZEdno+A7OzR/SRnTyXUFupX5pp7c+VQLhHFL+HndAHLD/bSnwEXCkPQe6A1KJ+Cp+BQSzrUXljWW7CbKdki5Wx9LIZAn3xiFd8ESjbhp8Zs30G2tPm+Q/6+bdNhnJym9Su4Qx/X1yuoCTsIO7ADFj6eTeekJD6UH4zO8UXDibAB5gZkxglNqIjM4c73VA/Gx1N+GYFhW1CTiiR9yvuPxW8aiQIC1W+7fma8nUKG0522jLf0YSJwnwdxUglk7wolWy+c3t2l+Cu5Pm9nmZc23fbzLBJPlcU+G0xX0Iis/bflv512BV5UoIlQAkB00+zSV4P6kF257n8GV7/AVkg+OtVl8pm7jekjf7o1Rs1LWpp86yIE3OeQx1PlE8mRzjqa8Duh2fP73KbezzUmpjjrvPhv8mff4pO8YU9g8vaYpVDuOaEBeTWXr0SQmqw8MChAiL/XvRT+6YbpdUu6FrCasljbeLtnsdV+kwrjfQeez3Lw7XSIoR5i7wXkpDCkzmkbLe1gWAuQ1xv72nbOMssSrZTqoAZu3DWa1UfkSmDgcIn4TAPKZ/5MDv0bNwp1+Gvs37jakc8Kz436Y3ZoxxjoTyrbzd02wou3pvz9qoeBot6zlYa1TKdZ7Oj3OyFkGz7PvS6Oiz7tvIZ5H0d61mD2XJM3G8lpWUIKnV1XS3ndw7kI35xAlmdxO64VBsor9sMSEQ1YszBIJ44+UjzZNuuRjiZMfLJag+bD3ioc45T4QzoJgh2ORzgi8w7aOAYB17owIdx4Dhe8GIbmllCwBjPWSQo09hkiFdv8lOb9Qke9SHCB091gOsfOOGsbIWUvmu5qZHnBMcRQ6E70e2djoCHe+/D6Wt1TYd2lRouNzt5Lt/jUsAWvcltTs5Pt7jRjPfTNSPfKZM660I1Cz3sSby3W94XAfA8zJ4oBHPWpUXRksu2z5Z2fex9Wp5/Sf9Zk9m9lzbXp9UO0ws+yZFJE9LEaF9sS3vGhHlO2ez6zEKu5gQGYXvVG5MxzxO38wa63XC7nZin6qs5A4a8Jqu+knHo2l1alycGhi7LflL63EPwT5K+ONA/NT2c+Lb326ym9CkYKDvR7XdZsHhSy2SHfDLkOsdw/ueB8rS7dnLwvAWmsvjJ5Znd67PAQKSHVIcIFL3rwfx2sid0Os5JJ+5+dxDSQhCgm/dEMDEzzlcz5xSWnX3vBkoYk7VPf8509848t0bfKSULTXqD9bPTqZWzPO5cBUBDTpFbCHc/dc7BAx+0DP8CPgbGN/8LvhsHPh6Jjuu8SvvacDFU2f2FQb/IYiOIga9JjgP5PG+Dm2WBReuyYzl2UibZyBVvpCd/2nm03YLbri/rj6X+u6nIpk3/tkZEHk+dkmT5QeTXONgGCB8zdZ77Xa/qPOdURhY3Ex4s2RjsaOwpY54uu5rnA7FgqQbcMll40BZtnGwJbFb5+V5RwemLb3QCpa4FfKyTMpmrSi65Sw1wZAxAFtEn/L497n8q8/nUncKQqAEaqh1zAreb+lA4Tp6faULoqwcZuNarzz0p6+lR9R66/a+aP8sSrhM69ygmufkmXd9pG9dzhfzMRCeb+PmldmARSQk2N7pvAI8IiT6GhvMfwJBT6TSnONHtTnGtmJEW3h28Ts9ZYT4xpqyn/Bkop876ZiRDkEW4sU0AurGASb+CAVZXEhsEu1mRwmeL9LbRztrL/daoA3F1wRK0svXdAX/w+7dMO4LqisTy5LwEcS8RDjogN6LIgNvCIWDokUXED8cQlp8dL00ZU33kQ5w3NZSjV+19eZyJUOC35bp/0cns/1zg6XXYM8XBi8JX7tlLOOP2G1jvRifye9Fr7mj4K5Kp1SvlheTWTrOp8kjZLegv9FUCS08he54JxqGbniz29nI2W0ucYvvy2sUYmZABcJ3DrmdAJpNsXGQsJkS3xOZW+WSSRWrAyu34c/OI4Au+ZstNh276u8gep83rZmJb8DgRq7fpaJY78DJsDcbN0K0pv9wR3864y/Lqom175gNG7ghwsPTL1PoOVJDNeW7bHKRs3JMuqDQ6qWYBIAvff7f6VH7aetRIfwTgX1ofSWWu95fjY4+PSL75GUCP1pDz9DKlKadR8rJ1OK9k94UTvTzc5ohqqPNzfTm6gai8y6BmAu9oR75HxKUke7PZYeYLgqfl1KFlVO4hhC28wPqOlPTsim+CyxbHUzh5axdUb3eIlJ5zXynVQOV9xPSRbSZd8JGKszt2TFeziR9toAeNJG2MANnrz1h4Lj2Rt8NUxFAe45w+6OcNoI9X7Cdg84aG55rZr4JCy59VupKXfXdnus2VcpX992+cuhOd22d/np/0PcLx3c6NN9nFNW84WlFkI6ssyNMqzgYVV0vAftW6r/pSdYhbVc088fK0wirj+zymVlrMXM7LmIfcqBtABB5SGWN2hukac2ZnO+aQT3Ve8pDv89C1Gdip6AniA1z+k/nTaTCYiCT7qY5yc6SrvpHT1+ZED/6XtcoDYwy84MCRnOc0hm98F9Eht7RTox/iYCIa5M56bSAt9eZy6eQ3xXjW4WHf9MyITQh+ktwc5vrbHPHTeMBO3ef6EM+EjjfRogpFqD4CqgABHLZsKeX13zEGBsUVY+CwccARTj8TtoitwN9e4l7TbXnnX/W3H/IxpBsA+lw9XqzjSRr5LE/nS2ucI4dFlZ6rONwAFxwNj56hngxLwl4rfqR+nlZlhph7BTYK4Ldw4n9S6vD/mWD7kyajqbS5E9joossNqJ/StjUYPOo+JyP/UDKNl7putWwTFpXNudrtF7V5VaaYbeARSDwKyMTtPHHcbsDtxJynyldOLNmMCvO3kcwb7D/L2m3tz5IeqfQv5A/giwP9ExK9fX5J7bNM5ijNyWiTLxtEhE1s6jUl5/lDUE24uE3Meyah9vfO1PWj23bqRAcfIMzwubpBKickB/QeUw0RTeo4KifQLfywG4ITJ451dpcWXvz3ZIDm9Tr675wen1B4upJ3lEOjy0bITrtmwLfliDHCeW538HoMJqUF3flALdQ7jwEaE8cYHqDBWc9+V2iWB6R0Iael1Gj9iPxSEycayOp+Y+AhlXmEO0bacYfPYxw+dJ5TzZONhafqt2qGfsoDzjRgszUbsyS3mCyqQKeZTUqoIFt0+iRSj0VI5v47n/rZONGJgOL0eKq5BD/qbve3Jj9lzsA/0g5wYtA/Lsr4SQgWeQiKTQ8A5mAMltMxZAvT5sTSCWYcMIzQsC4H9QS630dtDvTJaUGNFnjKhLI8+wPSt6g09Yi+Ml0U2rUOmGL4OR7TX9dsQJqsXjVqJ89/TXkoOdEt/ZTqJWSHuo8ZTbBdyMd2t5/dLf7iep3t2guefqTIdIxt3PC1qwIDp0/5c0lJwl/LWJO/jMp2qDAdk/XLnBp6niUSie3STfXEhrwEo7WZZHfWWmYnuPi/FDmPCCXribckKfcVQhXV9Gx9XTftnlEeVdigUslbl9zySXSbsA0wzpS/NLMS6wN4m256KhTtrq+fkD7RnLJ0f3noDryGxidtO1torg5FtVl0owx8Mk4eQl1EA4PFtZMaj/Nv5lQrNEJw2cXMusGR0ylv9nwEkzdGO0I8csLZrXuE3OT2CZA7d17F9qNX5ODtDW3O36b38rwo6z/Ki8zZnuPR0P4WgtjJ9HWsiSQo8oeSN+GDgV/bJCPXYhEMBNNcSoPFTWObXgb0tHqydYCwOyW6F8JeoIiEluMIxDRIx9tUIa4xRJArDgiEf+l4KDrrLVy8k2t7OHo4YrZuUi5BTzaueNu081aI17dVF+3S3c3Qlqfn/SyyLA3045bTZ/+LvITYstJXIbZDkdRANh9XjYblIHp224tuTxtrbB2EolInmUX1cKKbHbCtYQZe58RB6i8x4uubc1aR9yC9Ud8xUL3RD8byCTrLGgG5S3lcnFGMvzlDINkLKFEJrY/+kPSeZoOb5YuZMdv3m3J8kWe2fLslqF6m15NJbwuD64RrODK55r+FVx5ir+V5WlZl/ukUVXld+mn2DMM3sTPUiDWdN8FjArqRSCKB6PVFNL0G2RQ4fROyL4eKYJH5uD1jUgcywMMcxhucqAP9GC84iPBCLzjGgTEOWR7TOZJbZmxaSIu7bRNYNZcOF/R2BJdLF0ri4lm2kO6z/PL1U46+xfMIz56dslZLwPXsmgpv5BL7hzu7CaBBGKwHqMYAHRM0h1xdttAY3cGCZ/l88qcacbVPXZHBdJFwV7VyjJ5R+YaXL3v9YvS/oYnQc9goUwJ2NPwp6VlHaVEKf5BC+JJ+n/RbDm/362zIaXnUlXp7JTJkxG001owq/9BKUsIDcajxxCwn0OftBG6vOM8Jn3VN1jW3lUfk2g9dibFDXFXkfua0kxlfUk9fHOiflD7n5PWqCZvdkf92u/Ddla4TnKfBsX/zInd2/t+TiNoPN/iyovRdSlKXO8VVpgwiWf6bckeXOFPVEWsn0Inq4kMLcUtffYgo1Mk2MQHH6hQSpwLrPWkqARkB3520NZwNnE/YZeULAk8YNT3Pp7QLIPwQDx3n+o4SltQJ7k7xEU5yIshd56R4tRPogwA6fIzsJNzfedZJ+ISM2U/YzONiPysRwL8A9I1W+YrwXGwZIc/mszrM458nC71cTeGHU9N4Z0jmENVbWC7Ss2Ob5MYz1QLBS7FIp24nIjnx5jSR/hrsHrZd3zXKXIz0ctq6vHs8Sbfsg8jvAiuTOg4e2jrRczvrMNfUdlUGHT2zoHC3G/HlO0gcVaM/F5PGGA1AFn7wzSiaU3Ax9OY3nYAihZnzqBxDjcC0GA8JG1vbdCTEv4bHT3WUf4Koos0vBlfnOX0btJESOy0aLew6sANOL2ffzU+j8hAj5XmewP4SL0tdDZ/ZFsBPAL7xS1zyiTvmNGY2UZ5n9I3VuE+rdVwamlrsZ8fLipEUYrWhTOBRxF+GXE1MZrpkxMhhHPr+Jv3psVHJFo8YdAzR21Yvz9D92SSwBgrQGeHrQs8Djf9ULkBUzi7fV9vcaz5bTPt1m7fjd0eQtmQoSUb1BDNjkOyoCH+MTPhkPyPjw5BQ4Ld5k5aGV4D/7fiLN/eiFfxf5wolYOL4Aleq56/S8NuZ7+xqvJQ7dPfn3XdOIrR5WaSgy+fQYvF8u3yXH1HStffgyrZWqeuifrKhSqfd5lS70767EQAAIABJREFUxHgly4smO7SpCDXNUbnru/RdlI7QENmJ0Is+XyWnhXwyquMneDc2J1p4adrgiFo5NqEJcjshXx56L+3GafNMbYwbCC/2vpg1sYXB63A70TOFM9DSrNp7pE/jY3OKDyWAOL1O7ngHIiy30Yb7/tq4XVJm2qwAkmsOiH3/Ri1NJNcfcFCX/V3V73eiG/q45t/NibIZFfil8r6Qci7lL8YKFyfSemtKfZ5gOYWutuezWiTLle489/C+DR3TNs05xfCCv73cScLD7aLy5ol0H1lBOUL3WZOJDUElb6dHpoBPYGowBjupeWEP2lVSRq9Qq4ZMhih/dDouzCE2SDVPdvnekx4gr9ed286Ok2yDEYCyWWlTdznNWCr3zxinamP5HKMNVkHhHLCQQpfm9oP0zFpIDkKylIefYd42/6h2TjD4rURc34etQkudXH7bey7vHDL7WOq39u0ztUMo5FDwT6muMnaWz/iWsbUrsHn8FqGY59ucnmUSLeMSVpbNS6tpb7Kq2S1Z1xPrgQCRvXbFB5gwOPAtN+MMTLVhJG8Cg1TOqE3k+gkAz2uaIiJ1mA8cGBh6PWE4zxH6d6YT3Gx9DvuSA5SKOpd1TTcUWV6gAvw+eYWb0wl0/52c5Qqk06c5z3VAmNsIcKbqeylsOTK568VCpkSf5UTmGAPHGHK6n25xxeNMZ/idUCrXKVlgNVJz/h3sndh7vVzerHrZRi8Ym4E4QGL8N43/FD6TZ/ZcBiV1poPEgG2mtXKuy1PmwbrezYmHQlcWffCWZHRNFScOX7Fhks7UDbh/lgNsa0ry60v6fMloNqc3+C9cb7gwzIqTiu1OucRCn814KfWmOm0duJOB8176TgSeE+ecoHkC58Sc02WQ/blDHiHjSL8bWwSe0sn3L+l3T18c6O9Nb1Ukn7v55Lx8FpjPCXI23N5WLgJQhEFP/g4Q542tcx/6m2gAfIJwg4VLmhR48DDgemIWnkcnyhOglwMvL2mBrAu4Kff8ysl1uZsCRHoPa53IvDVZCI73pjgxtzrRn5pIfmoqi2Tp02wde0/x3sNv6vhAJwxE6kTX8N9kY0Rm6FGMKxh2793JpysXPewkv3dRXF0BBVi+332jbUKp6uQMOdThLvdzOCddJLO1st8rfeKeCaulOM8FkSPGxvjNxi4Zw7E4EUZ4nuABiImB/y5NY/9ik5qTrPVAa2h3Qu6c6N7P96fnJop30o9IczGrhzb9azSosmzyBCbJYUQdK7uDh3LZtIDBIL9IZ/DAQeZAH+JYGIRJKwxGEmbgnTZRdrA2E6Y/Iv2EONm/heEeP/+IwP8Vbfx18yzVlyeJW9z8DF3afS41lU8QI7tO4fPuf1vcsM1geuR8Wvh2y5ZhxooSb7MtFuysd0rZ6vGNFY3WH5cxNjFgPVWrV7pMhJzZDtkODsloNFqapAWVFx3/XOlThbKUt6DeH5d392FfTwA22Y6YkNnJ4RFGmosN5ghjdtkl0pr+bBO72tWads/yO8B5+Xtb0NtUSiCcbkkg5Xykx6J9+/qLjjITcNAHgAgn3Ty6i0TWoTSGkplBvjA4cYNo4ljMZ0hEkoMbL5eUYTbDKxYNAMYHHGBMfKRX9NPlxIjFTN2+tboKA+GsYevJ65BvHyB7HXNOz8X5t8LovH6P3y6F25Pve759+bAngVd95qfRWbTvrnyx6SkWzOW+dzatHc/ZQrUnW1edAyWuwAT0mlXYAr3ZAPWg0jsY98kiP2jW79vze+y3a6gGuF2z+GKZo5h1kfjZ9iTHI7GwFSf5gcICBG2fOr6y2dPs13vQNNnd2CfuQF/ljIUUXoBaAI06bVPplai8BHFVqC6npGJqGQMx5R53jiq5fFmbvOLU/i7MsLyQmiQ01/KmvvamBiPWGkqplMeepxqukHlPDL83LVEKqX5tYjODZ/sPndcYeuK2BTxvfQkLAn66lcq7nrel39L8aokRV1/0509XgP3Q7X7znd/5mf3NC0i2T3s3aG3vYR1PwLbL/dsMV+Ob/Ji1u5zf5rzLCmOywaY7oeOyJuFl0u8W2p2SnSu1cay7ZpCI9K5yluUQZo3u0vNJqPGDDnGMjEMOChm0bH8M6GGR6X0M2waIDXWr1bFuhiJA11BVxlrBJFw5lS8nzvNffhcQIZtg4es1uZH1zPNp2dRl3QfDt/YTSTTLKdHJxjExzoExJmQZxGybVMFnT08IrEUf6uejwwZbh17T39zecxsIe5d11LOC9zlj7PlkQ9CVQIapzC8ewPcl/SdMT1ubS6L0reyHSZurAdqS2E5b1PWwSrQL2wFYdtZ2/xIYmMCcU6JkzNNlKUH0RtikUbeIakrfUW5L++I8/+PSy6cJpf/kI/eoe34fkTLOpfMlKb8HDu9YcLEJp9bP6sxikombnerNYG4VdVe8gE+mOfha2kr3DZG2m8qbw2z0dk1g0Q4IqycMN95Jr9TnmSa3J8nzMQiTDzBevGWGOHbEASsnJWPyK5NktjteB5cJekaN76icDDqmWtUTY4oz3QQfnRM0q1HZ+1F2wLvjQKedn2iQlHuM7Fl6UScTqYPAPtRyqbx+KUtTG+e4WOU2Udb3dpqc8nMdA6VXW9iLxa945k1+p1Ac3wLzJ/AEfvnh/9HtPgSe5JN8PSipCjOPhzrlBzCYwF8nSiYAr33sWO8Sle+MAdAEyoSD3Ij3f6uuu0g6cPaR+YcDtT3FpO+J1LLFHCloIeREGkPjBvtOkYdopLzC+7bRgUuo/Z6PJGr0QPQ7GPMSZnsQIdA3BL/FNCE70Z3tWpmYQ8RkShxCcn9ayT0bcFrOn/oKU5KXAICZwqJZ2WzaNd7KwOZivjtE85hQpFQdE9hkdtoizxgS6drD95LvIC8NJflUYGPdqHwy+GTwqcLdjcFCJqnzlc5LHy9TxnM61nqV+qsYkNUAtvRt/qFnDIowsDLJGrY+DIWfUqc8dlNSk88kBsplbJkniMsJ8gILUA9GenkZF4nATyVMJqfrW2LcyDwwADGITzmJep4ADfg1yvhZsMQmne3UgQlcq3D6tSmVNxaM6oJSGhcSvPrpUoauR1uUC+uj0q05CYf2+dDT1FZ+MsQzZAQqOM0DZcthlf+Q9LYbKKiA9u/rgNvp8o8b2v3qjnTP30lxEo+rPmtCBV/p79WRfi8lemdG3Jps9GSwHDgA3PgGEPDz7aM4XM1xS0pjYPx3/jlVb06FkFcZ7MtgBHalgN5pHrI6F1DaWwX8pptUP3P/o3JHhec1oqVdWdSynkdpM3WZfEPMkaqVjXkAtaqjPgmVHhElXPtRwYI2KfwwaMQ1KnpVDvtpoIkxlf9Gwon2cwIgvY8RY3W0MQ/QJNlgZYX8NXs7GyTJN930kp27PVdWS7mfmJBrG3g6PdkGOAm/Tsg6w66bcV1gG4Xav9pZx72pwsBuykeal8sDLNdyOB649ZG0jZVgeflFAKZfd2mSirRHv2b0M1f8caILthPpSa4oFLItdDo8FrFG6C5UXXauG+6CtkMUk8JCYN+sl7FN8TOAV/r/B4KVGcBfmf13grAMRT0BstJUfs75vSsjDoQ4LpehSY0JXenFONpf65vuRiBAiVXfNRoCAMqzU+lhnHlOOkd5V/C2bhBomI3uhOci3psTh0a8X2pLf0mvA+SH14xHMi1kRw3VfyoMqU35RWnjmmpjcwrZKR1wDBEnylPa5tKGDZWM0HcAfqb6TjbgAbaxiFMfgkISP7HShI2ZZcs2sK/QUi3facl3fCeZv7GHvSp9laedgUPyUSCPXIFEmSi5MzhGkWED6cKt6ltvIW2CNVznOgaTnMzVAsMwSez1xGbdWPfoXc+yhW2ulRvj9LEwuL5Te+WRKXCVwoxI+iq1x4HgMq4OorLM1v73uhXTVOV1vTojPc8sxImtk8EQaErPjE/zPNZ0dAafQ7Yvp9szDJk1QEndCVCTwx7Idcez1Oc2QH6bU+6DyjDu83AfjIQYDZ9eyrt8ixGNzYVd9h0F66TXXbHHXZPvEc1lit7c2YPa5LB70PUZK0y56wPiPB80IhwvFwwq5qasV3JYN9LWlS2RKS3rYJu3afucVbGeKOeJkycmM06O29nOKZFL5pQ/278cWjmdQLdvnLiJkXJsONRkaELkTo87kseh40RijzJAPDEw8HKQ6F4M0LyB5w0Tp95/Ph0zRteynJ4EHCBOeO0K6RzDlmCEJ9hlooEEztybR7B1IU/MnbdaOYJHIZDXgeeiu08NpdHWbnxeVD2HFYeu3zs/JNiKDk/1UMnUumzxj6wcOSzej7yRgvf28ONEK96i1siCy2y/Qco23R+QjKadFmg7RL8rSJxIDQBQbUUi+IajQr9grBHA6DnUlmyZ2QgenyuRPTuqqq3p9AuEIqQNDMUuFvqeym/D/EOZNKYID5oT45w4bhPHyXg9T5x8g0T8SHSriCKIPCIWp/uYsun9JiJP2lX7IA4UpgFQGyCJaVOh9XlG4F693E+L0LuTUWVnQ+Z1/j+ItZ5Jn+hA/4+edgPXn11Z7y3LpfP8fsuZX216Y0wf8se0ghgJ4sgimCOSt3XpEzeiY5o1c+vOWAQP70kHmE5YaJ8MNWsYzbrYLzUX90dmUO+VcL0012YlgPdF8pEuDgq8ckoUYPqqlLsb4cUW3TUdAI6tMWeGvryTRRBORqCi8uMNeJXJA88pJ9ObwCsOGRNkM5ue70tu8HljS2fvFIbcYxzT5E2eJKg8rKVNbkjvzLVZc/p0OoSvqNV7sgEozRqOshO9wlQnOeBDvLAWyTeNRZ+AcX6fXs3ojjzKaMyL8QwwyykpF/B6n3SEp5LJlsxjRuE8rkAFWh3COlHMMP42aa1YdD6BNVxvodnGKz4esdoFphGL8HaH/SDgGPI3dCEfQxZjbUg95kwY1lsQt0Z6lhPdWOX6jvPTe1ZAIYLiPAcAPkcjJRt/lHJqGbU+MICz9SU2GBBsMdZA0gmzitpBzXefnOikm6jMaU3mGAeDWWXReIGdLgyLLGjcDDIgnJdZ7o05JDys/Z0ATgLOEfKu/8FGl1Dux730lmV89S9WZlfunpV2VQZ6At2OoIsGLJa0g/yjG8bSIYrhnToJMIbmb7XYT1totql3MX8CpnjW2igVznpXrGXMcawGhW66S8wbv0n0G42JMW8Y500ig2BgDpFqN60swu9NACfEmTV1In+ChiwIGciu5zUCAiMc+5PMqROdz2HX4x69cCAC6vibkE+OU1+MA3RC+MdO19tLw5nqn8rjGekRuDV00E7+3BPUvYykveM8irjmCoPpboplaftXYFvvUe9yEoh+2CtyWeanyUs++aTIpjlDjvnC5EU3med+0bEXoC6tE0+mzS7/dup1ApPxt+PFGqn1mb4y/i3NqRwz3uGUv8OWy7d3hLClmcntoW/oK8/xETfJSQdiY0LIHbEzMtxcYRnxzlh34tVewuxjOobfATkGlZNPNikXfA4wf0jrE7r5yvx4p+GD65BOuw8TusGGxeGu7QwbA7eLQt/YEskA4WCpoNKw8PBkCwwaAlK+H7qo+IKvVIi86j3u4jsn5etwhhtug6JIu2S2nPHqcDthz3lZPuzCuld9w6pX6jLw6gQG5E70l8bzvpiU9Kk7MsH4JbPEhajw0+nqYGCS74PYTegYs2AdngyLYWtyl0xHQGaOydUrpGfPKUYrNidxcTiHfBM6NDwY+U9dcPoHA39VO0b0RS6/Gyt7si6+c1q0dgkRjFF4L1FKrkCeEdyxm/HP0AX35Jwx3Cj0gWscMEYb6mgH0lw3tcts9VKxTfJGxUWicvrCRtvGCyEDy+YDkyGU27etclKPnHJ0F2mUQy7W5JanoAZismBj0Vuy2khFnWzYlYVAdhoQG8GxK/+zyYpoVNYHZI75FwC/JJxNnQCeZjt4zbXvHsNH0b6Y+gl9ZExypbZ3z5/ZaUkhHxNVFXjNBZ71kcCsii+psFSxyAUr4XPQr0Q2WDHH+0fds2QbKWUM5yhYX+SbDBXHPs1hdapjL81nwBo5A7ROnSlgya96Nr4Yg1Xu7lOv+15b/bn0teppf16cp7s8BGZaLgziltfdDI102HmzQmU6zVJfeXKH1tzPkDnl8YeZb1nen5jgy3ut0xjn3wYTi2zfYzt/hq7OOBzMEHsfC46XGgntwI5qJY6NwSW+C08QDwyemHrtGWDrkNanip/uAK+YyBAOvOAFhMN1sGFB8C44tTIuVl0QDUw+tAznkqqPmvXBKivNITzE0Q8wJiZOPnFOxskTpzqATnWkT5YpntHJ9FbSZ5HT0V82nGgYeB+eLPiz7KKdBq90SEPXnfkE0QTdpIMHgDEGvnr5Ch+OiWP+ivk6ceObRhCVualEwWTB5Qk57MNJ1ic0V0gIJ9VYECY7hw9e2zwAtPxwBr5y7LptStZv46GCvFR7559dnTmblrlbJOsPsz/aAF9WQPHeGQ/RH3sd9wzVZLqhz+cei/Clmn+mtNi9fzAGjFJ1mh7czoi1c9jsa+ryWt58UWX908lpHI3w89yQg6a9UKJ3mJDP9mzmGUp51+YnnyAwBoutc9NNSn5wBRPjNnG8nvj6duLr14lf5g0fz484501tBgr4/CoKlvn5OTGY8cKME4yTgHlMnMQYOHRjkcmiuWcG5bEslsE2X7BJQuf5lrqS8bXFJ2kvy4Olwv9Y6UsI923qA/rkAL+BDi5JjeKDN5X6pMocl0b3T4L2MJ8v9qVF1abTXIiUyfdGpbNDi7xQ0I3eBkBe5y8GSUwi3jse0ZEyUfDFior8fKKeGKCXF4AYg+Uk+pxhOPn9FD4BVgcUs56qutjB+nQKw/rNiSFXivfiqnQERjNezEBMsJqTFAir3j7zqaZyLKUayiX1V12Y+rZbAo7vAPzood0L7JzLd5ixEqTqFbJTpeqp5J0jwOrcgO9+qay0kfuc2stgZ3rr3d6knqtMRrYFuqyIneNsm212iqs40MNIyHYF+ylzHZ8Ugn91vAMLPu/08HFq/dLJdyysvYUvhHCuWmaoOGgS0xcwafOstx+rRgX25ZyIoZ8tvK3IDavXo1ZwLJ0BaRLmi1GEOAnVu8qVV5Anprzkdce5G1r2HaUes4GcxPkJ4/3RULWIJxXGi4IXizRL+vFHdaI/axnu2kKoPa/mu4qEMgHtFeTNFj/X97m7T7HFXxpgHW9Y61fjWHa0cshwy062hExpqNqgMcSYBwNzSqQCCvpk0oVanTDU6CJZVlZZaLJFTqhpm6qXJRIGy6acCfdH0Ex3N7tskk9ze934BAF4ITnBcM5T2iHEfoWOt/S7L+zYVSXc8N1Pnt9znieJvnzubw4Hvi4wcSpF2h4rHL2lHZEB1Z6Q0/xc8p/bkqSBWWxB0SFZbJutsSFpIIw54vqu0MlGh6Smfli6RSHAS9d3Y5EyMLVFnVa+9e17b4pMWfj+wFX/Vfqu7Rudc32fN5zl9in9KS6gDlOwODp2vRRYtU7fHAn45Ne8HX5FAvwKJXJ4tL928tHt5Wg0nIrJNCIWZ6bLn8BSLGx3maU8ljZZMtesEUdiXY3rkaGy7gwOutIzT6RMb4WHK3/tn0v+VwAfrC+ux+WfzN1lf1fK5tTDKncBEE/BmfKAOUz99CmROsso5G8Cz0hh+HOTrbXNeNfQsentVv4sKsrwyPi79v+E3LrSmmo1c/pWz3f34dzDdVWx6fGrEsEPOaKJvWeHSPqWW/K753XT0Ml2vci1vtjDKB873NimgsTu8jyd3HQqmzZvlf48N8ckr982Wgid1LhiAp/hJh0O0M0IUlaFDQDo5lKm6c5bsUlXTVZhSb+cYLjYyTWyBq0li67gzfPoRW+7ibalzCWd9fdFrtwp+WiIsmij/sqiG/S6LFqBiYavWvsfg75VRxBii49LYdfrBI8eBKDPQ/JaBOe1XqPZLBIz/BscX6ND8Wht97qQZUiqK5kFSwMFLtNPBnjqYtoIIVm5VMEw+4lqW0n6s77vPFzAWcrFJ/unAV1h6N8fbSVrmmmT89lntdZ4lJXRAyLPdsyulW5aFJupNmF4ts25pFqQMEP3kelFmxtxq1cUNXOiucZ7eeOlFy1ooNShVr+VIXH8ei2kPB0i+M4opHn9ZDlhbnN8xCdYHOxGO7GJGrBIdsFS9V+n2+JU5ugf2zqoMLppbln3iM7Wk8tUBYYjMGsbBniuWzoUXscXc4ZyQXFwLbffFZNU5vK5Fr74bTpZcaHrptRDTiS4Sz2FH1I9lqzjvpG1gW0Cm9vzbEBwLsfwucDS/qbbRb/yiobSr7fYOlul+ob3/7mSH+Lw74/w8tZU63uzz2LHpvnz3vA7CT2pAx4l6l+4sGGWv7TkvQfk7r0PitufkUUatVPfxKwRL6YfrhQrmHBaHcqnrNcKz9srzo8fcX58xe12k7vTAVkbOzgilL4bZU+Mcx6XbVtZBuS+P256GwXsP0D64kD/k6WtfOkPCIlRN7OkTVoNgV2et3DgW9p+Ughn5+ySPp3Duu1wL9/yjAjj5cA49MTEnHow2Qwq0k39yYCeZqCKsBtvVUa5fX6/A11OXdMqpNyYnuE481lgZKYxQIeMTTldbkaZnkSPA49Ux9CMPcrlUnm0/EeqY/493tlKYLZJdyjpFnG2sez7TFK713cHzbmKKHbHuPyMikFOhHB/eP93AYbqz/olylNaEkw8SdDToF4VVTl0l3/fkjrSPrW+N6aOpo0DkOzfYiTlt7SidpGX8V1sYYbdbWbP7EucGovJSd1AQJv6EbycSH27kUbr9k0/tqlGJ9T+mfjDjVBuPHCxYPWu9IgU+CLftq4fN3XYhOS7qOdK/TxDhnfncynU2V048ZxqLTS5AzDPYt0iR7dYY6ngl2RToJUlxE5a1mMkAGPi1JOXsolMT64RgfCD6AWoY57+Al8s9/s1kgzZyQ4aMtGwq1iOdGqWBkA3uFT0IwGt+63aa7R+msC2k+BXzvPPLcUqqcm4rY70ewSZJzx900SU4aVMUx85w+SSr37tuiuXczAi+W7xDI/IoR9ur/L8g74+9X2nn+Zf/dfjawCEf7v9GnkzGnapvevyeWgbL4YbInc3HCQ3Xk9iQEOBWqPMt0r7NuluG1tsA1Us6FM4qt1Wm2rTEOKUr7bELxru7UTEyo+6IyNAkJNMttGQEu9TQuYHtZ8+0kfEuCiMrANC4vzCYPe3m6a6m5LHwFTPs+nt3PtIsHPLs2shomjUPOa2S8+TKXwD4cWko6vWKr+ySbpIcw63oLeqiParMTT/JD1k3h07rZdu1wFi81HL5IsomUajzrX2J6Se0XFLfwfje1QH9HWqTvR9jiaKWmjfZZTz4j2r0kkem+y86WjiTYWT4kaYHF7Zr8Z4MmXn/O6dzUmnbe7ZyC54/wTInaTftVyNvxDYtpHASCTOiIdsi9Oe+VQQlf/EbTUQMSnIF42d1onUUWTtNxuICX8B8GOGugiSpGi8yxua3THJFVruJc6Z+phRwuX7EqcxvF9LxtU+J6ds2bxk/gCi18ilVwd5IHzLb0ILwWL+yaley8oVPV3c30MtP8rwMO1n7u999hDW5cn1GPgfre92JXYbAfgCk3mMe5uP0ieh+3OlonveXHiht2IPqRwSsR/2oY+WzXEA7Dai+57CJaoSkOdIRaBlU5n08pXuMPUakPQ7YNd6dod+1v823sJrsh5pjnRzKNf7ztNVSbCPTGN5m0bF68oTKU9bF7jnJ6v9t7UI/1n2yDLLYaZzanRQw0OhcdbT+FqBr9veS02vPMz7TJ7161NpJ7Z9XcYyuGGxB+VRm50eGehy4tNT2BzbVx2WL+k/X/pUx/gnt49l7vI5kukF/QEnYuVPO9DmkXgmuxogK0+JncHiPD9P3F5vuH38iNvHjzhvrzinbTIN+/hL+v3TFwf6H5r2kxnOj4qjMRm6V3zfJ2JuKHKZzDpj90nNFYi1kc1S0Sa7LcYsSn1trdwLXRY1ouOfKiPsdqMCnw9BXUjpIBIkRNyEGGx+t3oZQ6pW4WFGmwTNp3GJ5YeJEI74t5elmAwggTwVtjnlvmNmwI3nMGJpkNxFacKadFxc8sMnFkwk/UzNTT/dTp43eQcDpvxs/AUW6hBf/a/A+RH45Qd4vLmFGBqN6SRGniUFM/q7fTXBN09u/8izsqsFqweLJN2ukOyjZWiTR/J/+kOZuuj7oNQ2BrbgTlSdWSCQLjBKtMKhn7ZRgoDDyiLCudOIk+m/WdovDOQn75UVxvtryOcmJH2mjIZ+2oNX7hGoE3a0r8XZpz9s92LsBrfJLZd8PqnNk1Uz2JaOqgGXDDrfTGOyYHL85clnmVyjr0W/L7k87bCmRsqrN47yT5D70IussfRjfL3XF5eLhLI713iil1/g/SkRGeoYAY9xyLiIcsVrXZbJQtcRbLDFHtDFE5Pb4eyO00g5ZLp7OTWauwyVBvdzp7meaIPVqdfNHASeOgDpRHm+B9a7ZOMz7QSILq17HxRxB4Sv5gAdGq7a73PWDijfvU4NfzXEzTn1JPqjFIv+KlONBzZFxXm+pmfYwobs6yfyRq0m0U3ekz83OD565UabWo4oQuG6ncaJL6Tugw4cBPw8ZcBf/aSDZrM4bf5M60jOmYC3gf/MKsmGF4O8d4yanvWmMx52erMvzC6bOYDvFV9UKt60lTaEJI5r9Vkeo6ehqjccsj40qeeGZpPJrDiXKw4odBfpPewSzzvZKKRDzcpjpHt7VNcPm+xTRYPZTYZi00WhDpw1SyhaP9kEEL3oMOhvSOyD5ZIjTv1kgHjAuNFwz35UcbXRugq+b448shjSuyKkernVPpfhjecv/pxgYb7tH19s1ird0cpU5MLP6URYYEVrzSxFMS4j/Z5MGEQa4j3LjS4DUiHntfRpcDZ2y6SWMVSHQDonKiSdavNraaTcD2B8T9U5WNRbMQnyEj+WEv7szlCber18nzY5Wsh801DKoIusAAAgAElEQVSMCTae07YSq4Q9DYbdE22gxEn03t592i1mntlkGTGU22Lvv23YlHGNu9ydXjQqBtOMu4CtRyqUPIq5kQ80dH+aN8ZIDq8hC0t7Rog7eonseXa/hMStY1uf5mduKas8WuZyWR/Eg807Y0R7sVBifb57/XTKhS4Gnq/zORSm7tMmkCuwhEx4eWh6y+UtQhTY3NKD/k+DhIKOzNQw/cABqR6gWraUblHG61CZ6H8OxfvICo8iLpTR3WSrj2ITyg6/+b23TWvurFWY4LKw9D19izabu5zzE9b/K33nmeQOC5zKAokFaNOjzBZNCq/0+jnSlca/q+g9a49SU+pVJ7bdgs4Jv75BmPcRJVntYdvcdgn3Kq7i+Y61pXF5lIcxydqkCEozDFmDO8E4AXE0Y+o9xKefRJ/qWF8d6gy5JivTWaXCDHaU4WWDzK7zVGTVVUrUTJDrPefAqZtHxYF+yvqFEqNd+2nym9u4P0Ep0d97h228810f2LvNYJeFkwZNzm91b3mLEAhuumeR9g0GmycfF1jIOxTeczy003NXsw+Rv9PpyMTydpi+pD952o3tbpzvEU+SRAtrNZ7g1F7Ps8jg9PyCNGsdO4NB5OJUp/g5b8A85US61T0R0SRceDPm7cTt5494/fiK28cb5hS5fQzZdCpZv/DE752+OND/sJS1yIVGofVTdCWFgntrm31WcE8Rbd8RPL6j1inMS2s2piJ7YvJc88Zd25u2OMm5faank5qBK5zb1Jd7SE+Q54k516EjqiJM3xOz+infD3tI17cnGbHsdWG/5xgsDjOc4kjnOWK3vhp/RASMUU7EloElW3gNB3tpf5AutJMPfzjgG5F/m6BW+hs0ME89ie7GYqPlXafzZ/++y/MkLUhKA/9Ab71XrUXYQ/29OG0TXP23lVF8ccmnnxru2B3nI4Vpt/rsFJI52Gy8jlZu6D33A3ok7wGtv4sVnsfku00JAtZTj/39lQUlGeKtTXJaTXkI/R3pp0o5myzbZ2pBnBF7+pd5XJo0lU0+9th4W+Hw3+FANxmBU++8TjvWlw4xfNL9bsxf6aE+mVwmkm9M5kS3dEWHT03yNmVynfl37sdbZFJ595fNw9yWjQ9BFsQTILH1Fdl5DsjNveJs0zvLYfSoOod0s9gcID5lvZ2hTnS1+NMGOCYC0ZBNN8PuzBhx7QNP9VIciNt1E8KdMUajOdMvLFdKaB9p2EKJOsWZN+SkfLWbk18+aXA9KPlVe/Yp2v65VImlOtLlW3ek2+n4j9lZzAi5v/BVbiPwseU+r+cC1KKECPiQbma+vSbTcDfB3diXAHDTyW9ZCGr5U9v/hl8fD8wFT37fZbGGLO4R4LdX3XrfWqWuW/PjEXhwPbCBzRbXbwTWzZqm08NB6+dC7cJZqVfveiMLF6/HYwcQe20yDrNNaE50ixpgXhC7ucTknbHOhF6TA4BnOoGVN/ZtqM/1UnrDZheh0hOl701bNkLH29OO2ruuMxedwWDPItsHopLX7wVONwG6FGULqkDoi7d/0a8/wyVeAct7qQtDZcEdvUDFrfF2jGFXah0LNhrUngccKnkDrrk6H8LJaWUD6L9zONG596eAH7KpU0CHrf6qo3Z1TedKP9f0ZG1IXXLvCBUI5QbI4Qx07ZS5TlLf7OPrGM9jkGQpdAPNiLw7rEAjy6DgVaiU3CEuueW+6xQ9adEb9S+klPINU0wPVeyVKzKyKsCWLdrpndR/inL3E1U7bTHoVgw9NEPf9f6OnOLH+fzGDNjnSuMlPxt98FLOg/0AYP6gVxC8tilQbHqx8QMBNIM/swTuny6TLvi65MP9Z1eJD9Krh3pa5dbu+/73BvfpmfFiLdff1+8u/x4M/97xzul3xXR5Z85NPMJfliZrayUt8D47Mr9vEvlwBVuWdrrJl4IzfAmLqm1UpnZjleN8T4cm1WmOebHLCJcOZVJIOY93q5MTLfl/E5OnO8vnnHoN5fSQ7ebkMRqZJgW4UhQj6ChDwA0mf1v60qXBM8k2+2mpoZu1dbP/OSfO85SN0cxyxRTZZjXoZtMks58QHkm8vT9ty96T708CtWSzDt0RHHer7uU4aHN7l0VKY2j9570Gngb1S/onTE4Lb9Hqu7Qp20QPqfFI7d3V9ReZVqn9TtVKViIMs113QMwJ5hM8T/DtBp4nxM7WfjMimh7H5/nxFR9/+RW3XySM+7ylyyrILsH4kn7v9MWB/qdONqOk9IdkdKXfQGXqJhhqUubMPMgxhzHjqNSpcPgB1WVSbFWlAhRgUM9PTQblfvQuFPuzF3xDWgQkbb9epTP3jZF23qcFg2xr6CkPx4/j7p2Jjsd5NknGMz8gdX7qDlE7iTLJ72vPiEpro6A81rYbV2kj8EF1wYN0ApuQ7OW0ntRJRJhRBl7+Cz7QgV9f/gtw+/9qHwBZRezpGwC/aMMfEmFb1bt9CHfGJU/w7w9fp80rjWzZL7RwrqGdCFwzpTb7ouQVrxDCWU7q/LbT4ypjyqYWAuR03MAYunN+wE+tel35TnS7hLi0q4NwuaO1P78y3JPQKo/vTFR7ujPPiFWgXdv27gpWABjqlFY5karKtcrCIVzosskVzWgnnci6xr2dBLdn3P2RQxjtsX/adRM8WY6GTH0/s+M8AZ66/8l31xQH+aOZbeen9zRO4UQ3fOnjXXP5HbMUimgppgTCkC2yJk8KwsKu7e7azO/zpisXpg04Dgd2CKqER6aGW13s1HB3TDUkauhdCuJjFkcAq+NaoxUELFzkj+iUHC4+uSXsAu0u9onlpDoDOouAGyq2iSP3CeKoZzBwHNrPU0vJfx/GIeKOhCdfT5msfCDZ8MMG98XCxaUkabTRw7Y/kkC/Ks6+QfBmrnZXFyHuzbxXf3Ze2LQqHOkZ8LRBy0QzBHeEF1Rml5zfHAcmM256camTateP7pC/6hWA1zM50R8kGx87pugMluq20OXcfvt7RNlHA5Sc2t87DEibIMPG+Q5fASD8QlHOWOdGrwrQAOMEiDB02kX0NUDACds8QGAOo1xou8G/wwsBONXGmiz7XZKaZQ0X8RVJ+PoX35gQp7mByC/OLJJT3ypvTj2lZID8go/eRug39hsiQPZS2gm9ekPfGGgiLUQfG7pVTgx8TDRNkPveye4sdfZVuVxO9RRBjEtahER/MB6z9NHKFNx324DL1CzL3g8z7hwuJ/ZISBlgkZUc5pItS2swV8nsYxnJtlP9pGh21WDy3duMDQdUbJeMp7RB1llsHxY6nC+hL0h1YYxhcoZzKSzdEQVUfPRV+ycdS8APED7s85h6qjJLSqAvKWUaW8cz6goaTDQKuP6dHMtjJwlnM4CD5d0wDNgCPizkr0KldQyylrL+lPzW0bgSLHqVN2rP5tjITm05Ie+lvGf+p9EqJgNDvZ1BexZU3SCa2i5psArWU+rS5iSSm7cA+FUP7hQnlH+ZQbYpj2yDT8G0fxfdLYSdadyCajhyckovrcdDGYA5tUabsru0ZNlzxZqy/nuk4bnIMOOuHSzBtVn/5bG94tuUszGdyWSlvnKjStRoRV7A/Jpaz+90M4TRfdqwcZlSNLi+X7bW3n4TEhGsifu3A8Ctt13z+xBkvaaI4JZ/N5QZraXOLWyG7Zw3HNvWXhefOW+0m5yZVMcjnxv25zQvN5lm/D7mDl6WMRbHb5svZ5vj86UORPosY9btASRzMI9H4icSbWY3RHnp3s9CQPG+RtMwmyXrFg6+JpVxM0c4s0bz+LCDSNqvbDe5s5njKUOdN37S3BzqdmHGxOn3iOt/qqCDLtszzhsx2Md+Tvb2kT7rxoB7MrGhlqIXWV+yotn6BQA0COMYGCwbBCL6RuGshP+wCWwTgZ22z/K2wpo+Vcfd2/AQcqotPj5yTtvzpe6L/Ebv3AHnbCCmjEDhB0pfTOEWI7/xzssBWDQ3JlkLPC083Zo9+kIVhN4Jsw+eoI1tekY9f0l/WLq6ouKp9FS2roGDH3xunGidTWheVN5XXNYVmDz3AdIu9Crm5gTfbjhfX/H68SNur6/A7QY+b0LvejWiAesz5cnAx1dxup+n4M9V1Bfn+R+VvjjQ/+zJT71YeFRy1jIGvcP3JVK1LwLYpxk1ifti8WCpqVbUJxJFIO3270uhbF+6k9Vf1ynhvkOp4LvSFaIe11lMH/J/AGxgpv5FljHfO28wX+e7EnMB3naPs3pCWYU9yyWJa2em3DEUyoFqZTbBLDhJ9BJqwMvmSVp+HgflfwHoW4AOKTtTB+4RiB3PKYqrEfh701XZzz0X3Na7Tvrqb9o/39XpIdvzpxw/IztVvvB7nPaMMbfv6eQ5WejmHYxAFRTNyN4aVah5L1M3tt87KHcMf51MX0lIyaJnc9RpmZ0LUkjLpoUf5yu38bITs4NmuTcA7lai29UN6SCyTH4nwnl+YzmlkZzrEbr9Ah0bMJd0x0H5fHpyAvlsyk70XXVdv93hfe7vS15GCQ+f+TTPSe+1j2/WdktZDt4y3u2Tz2Ldw2mTlEZSNGSnxTDQlZ31bmRxoE+nIY/fmWU8QVatT1Knp+1SVyc8ANipByN83dxUfK+w1xaeOJ1yIwKNQ3bxEqSCwd5O6UfuvOkHVKdJTdm5uFs8uJYvnyh5ts97yw/tJM/bCVnSvyQ58j9dB3NBvuSoWFhENdnWOk3mYHY6y7aCfPzt5Wv/8cPt51r+kUAxY3exr6wQpfFOeQitXM+Tfib99n1+nd7Xairdm/4TaC46VD2uqe34LWSay5uTs+kf21hzyicjOdFBMdl2FKlLr9tFpl845XNe4ZKf8yM54nNtBLfTWsTQiNF1rJa4Bg/tNsFwnPgy52PP3x88EOjb1O0LfUZx13OI9pAzRAzbBpE3xNk76SaXdVQJl2qnyy1U/QVLMPBtJiUA/0hWhLbgJBI4jtoKjbLRXM3pqoCyWjCnG7wdgddUfhfkSrlaSd2Xp7V2/kyN/h3AXzlc29XhWHEixddxJgPuupD3Z5RnphynOH+tfYK/i9bkWzjJA2+Ru+IW5Xd9ykorLk+448mxJWV9I1FscYjoMolPkMc2Alo7+6sss/eSRjmhT7or3HRFRJQpWzcSuBOEQ/uUdUX02f6lBKdt2rfQyLG3j4t5GVUyvoNsLnHRZn3ie7Hccu43JALqkXiK5/6w6QLPx6mnKPmuJReV6mKbxv2U+dSfEerNHMiyCRXfNq7eBV4xZnzHSR91OtAvs6E6o66fQq99sLzXsnw5BNK/t98b6X435dHxvImkXTVuy9b6PT/Vd4u0TvRdy9ec1W1aqT0ckPseZZhymxtocY2lTe+cXh/T6XW6p5/vvHJ2JMRxkA4boe7sDU3HYOGJ4phUmt450i9hJRdC5DIjGNnCjttJ9qivUQJVcZM3IYIz1Ok/Nof3BPtJdD1lzjNmY2wb2xhw53rqOoej3PNbi+5QD5yUU+luq+XnTUc3tAUvMUxy582CE3ZSXsZxEGGMAbKry5C13WZbnY+9PikKA3dTk+h30kb+3xM+79FBD0F4S52mXxi+ztft8aMtSH/1Abg9eQp90Wy791/Sf74Umit0PT3kMwAXdnt/n5jX18DMuEmym8htx4Bsna+kyh/8jlq8Gtt8ggQGM+Z5w7y94vz4EfP1I+btBJ9TDqQQMG7wA2pWDc4J/niCX/PGt64jvqTfO31xoP/JUrG9kh1nwsbkTQ1rngt35czlMKUZQC5csh1sYW66XWxcbI42F1TiLAufaxdA5ZxJ+wyzxn/3y/R26d5ugU9KT9bZZ4CPLKg8gX7nHeYAtn7tt1eCSkNWMSFOBe7SYZN8TWWIaftZ50g5nPCTcJ4A+O/A8d/wDcmB8kL0nDOjjsMvCEd8Pu04UtntpHBjuRMQHjKZYLH1qfDaMxNJSxcTq226ILAdr+SJALXfnkeNYb+rPJ1At9DrgzKLp3Ijlbf36Q50LRSbfJ5MW8P+ooYtmn6LycZF29umstEGucI20Wg6VLjQbel6dmQiJpi2Q93KlSVNrzc3sMpwI38y2c8MnCwh2/2u89lCnTV90PpOCVYPIrQqpOfSgp9HGdv3sMafTzmcey+6qlH/XnfPpgl4qeOJvnvdeaCskYtJRRZFAMLp2QdoM2DQmJpTQ6gzgflnAF9Dzo/p9R1jQ+g2zu4ch04IGvyWd0wNC03yaR2mV5kdpJgmjrtlDL1RALEZxW0h1s06YwiTTQaOgWMC520KSbP0+ZvDjCZp83ZO0LFbdL5i8mva+uru230N/cT6vZZzqlpHdW1voS9Q+s+kALsdU75XfQcAX9PACcYvUxbevhnk+20+j/htvX8GGRlkSnRkOsnWcpxH0rN79WwGU6on0BFTpu9wAET4Ea8ACAe9OK1+UKp4ZXlHBgPJYp+Amunbvr4ABBwaxv2WjsxR+8Zej75xvZ2dn6EvPuIjAMJHljLU206CRTaBiT1Ak3AOOZ3k41LkdWbMDi2XbDT0DvS26cb+DROUg18vmCt8oZsMm40bLcPy4lcAH9pz27r0y9Y4tk0DMq7yTT5fXC/OZIZx6PK0CYMJoJmQmrudF40T5NEFcwmETfC9ZvwRjIFTyT+fJs5LRU3xUtccliuFzXf0sPc/b571DXqpllJfiZUYUJgqsT17c5FV6SQ6rhKnPpheCRrMoaprKpcwFEd74MM2CFhUgVqL9XdC3ch6//gkxuCp145A4bPw2BVHV2IvHJnN+ZnsQAsdSRYGwkUZwef7sA0CycDxyFCJGijnNvyE/kTKZ21kuokt01T+2HGT6bv230r51hSFzzbzMDgcvuZwWja2ag1lhTRofLDdYpE63Xkhc1wZGP1RBqrLE9487/XeK7ezS3p79V2UDGrt+Sm9BeBztWm5u20Lix2U5bRoOACY/FpYNPws+mSi8AmnfPajHkxoUkkH+prfySte8vDmpwW8uV3kCcEYry/bX/vV2yvXrrV3M5VkYFnjsTcuG8u79VR5f56dpysMqVMUZXtfSv+z3C91ajnu72tPdjT7ySnz5FMOQpOLIWnqxY678boyQDa/k5yt781GCxmkAh1dx6X4Dc3JvJMB3J6EA9tc4sz/P3vvumRHjqMJfuBRKLOysmp229bGbN//6bZ3rG27Jm9ShBP7A3eQ7udEhJSXblEWOu50XkASBEACBOX+c1kPhSI9ZIsYv5y7YlhTroNTWaluRlGi52vdfL2Sxqm7qo97y3vXibKrXlcSbucNUBok21kAxhxuWLmnnuv/hVIn2SEBKF8X6x52A+9aYk4yY8hcmLJUD56OKockMmGi8pPAWllMhv/Q8b8ZYdzwHUIYw+d4r3OsyvTL+a31fyES8FC4V9cjpONbeCi48U2NxU4eKcFR6o2DkRXm2+9Jfp3yy4m2BP3uQGWYzt95IR6lcvnjKfeZf37GfPqkSvRnuQtdpwQxy/kUPQwidkwH5vMziCduBBy3Af4wxPPcozYr38IXD98U6H9EOCPmtElA/Zf87zVkprju9cksP3IqMQkifTMHWme+67g3ghBx+uwuFnMyAri5pjy99406sbLS3sp5X8G0T2Hqv7b6OBmN3IZubv2q8I68jW8VT4eqSCmn95aqz5hSPQ2oDwv/sBMtO7BKqfn+c8+jd+3Nn9Yy9iC10hnLpvgpDiySZiuaY8MlN4nP8hG2Vgk73LprYPDg93YaLualvadf6Hy+EVyRTuSfSrXJeMZPjpGhTlasEx7u7930LqELKbt8v5fkyyfzoE8u6OlzxT7bDeZIYggkj62NpU2xsK01EmKZnctPdL1BWCi2rpt5TllAzfTnC+tNUxcIMvlbBebXhRPas0n2tvJPwi/p2U6kV7NU+XBnPbgsUPOp8zeFzalz9Hq0qpEByBsBbUPZNkzkvo6g+6UwSggXuFAo+GJdY8mTzGAXBkJpi5/eUD44zKpJ66TU7frgzoGJ4S6wgXLXMg0hQjTVk8pI65eEIq6vmxXma2kiwbfES+j3np+V8ki4wugVioCcUhy3mB4M3hcwQAMfQPiI7Nr95Mw5iZFCkCvb6HrtPLyi5a8souALtXcAdoVAGeXNiOd8I+U/rT+VRWt8kXcopSP2O8pr3SntBZgrDDbL4YYtFs1dib7lXSPBAE/dK/aNUFVm+GaDaUsYai3PiYx3AYAcZ4gopUut0G5yQ1qTq8pmWxa+eofl396O3Tw+kS+WPLu+q3Q25g1cWR1p7AQbJTDixO9yiFK1paL4lluHO8RWbtRnMkFA9Q9M3HhiQPRGN4iZ1BMxflFUF7tHjrJJlJwiwmQcCwWpc3+OtYSdPN/3XYPd27vS1Yyz7MiWSyVXouc+jyJsQz5dI1VoTJK9esmeQUUkZpebJpljclFs5FPY1pwJdbYS3bNiIAGsd6Kz95/JeZxOfK/BlSqp3YGZrDeWJzUYA0yq+iRzp629Vu7eIS+91pd7i9HphdkY2PQk7x09727K7lRSyZ9qDtyNJNKaNM/JYgR5zR279L3Wpe7bbar9wIzPPnaECcazygKU3bkbjAPYrufcggH12yWr2NGMXV6tu+x30AYJdvSLFlxbpcGeu119cFJLTpH7iZRWM7+gzqVEEDKshvgnFfEmMtMSv4HohHzvFHMLDEuhae5s4ajV3O+tLWg4ozeu6Ox1t/cz++X1HC37b1eib/GQrzCgl9lLOOsRrt+3XbMbyLeE3dg+UC4BVNY8Zu5kMMszd69aqYCYH11+4JRinWNe0la+DMMoJlbaFCfScxXn/CHgmpi61ApV+FTX7WIjb0ryxGsLDiET9XT6POGuKc+ZSxxg6a9nDjR9vy9+tx9c7JwW3M7XHhFwI3WIaDyom0mfz6bwioSl36NL+rUjC7RY223zgdOnhD87ort7v/xgRmb8inIeDXSOeGOs73Oz79nhofLwLfyXD0ptktGNB1J571XyVP8s5a9TqctVCef6HG9VdBXU2bvTPmuHQ5KgYAbmAT5e5OT5J8L8/Bn88qxXr91Ak3WbwPpI8x8MVu8ORAN0G+CPH8CfDuDF9vK+hd87fFOg/9lC7FmsglZ+f818cQlcJ6NtptkP5zhuCxFZuGKINd+wBb4LNH3BFAte3/eyavX7wtttcXq6MM3x9Lq2L+HBzHv55CLdTrro4/dWH+yoHfnW/JRfclBcuNo47n7+ezlp+JdSzODi3qKNoHs0yuToH/j44UkWOD3jmXz2KzIKBoPM768NenIsgAx0teJP7z/alfVI3N1yMmwaQaksIt0dzd/seaTvlFy423UQVPuMCOK2crR4S6sv7VTV+VTrUsoatU3/UDfJiLxrvVAse3O4BwAlehq/RTAri6eMlI3m5oVWFvi2xigmGOb39RHqrt2VmJPBR3rP7tvzqtkFuXevwhJcraxcJ/AV1lQPFGjK9L+fZLm31suK51Ne8MgiYFOPvxszNXww2m04oLwX7NcwxSY9Iwjns77+iMGqDtAx6EuQgnIDqhyXPyI9Bb45ueTVDcWvwQB/0m9214ZueuvCo+1UaBM1Pp96N8BYErMpJ+fEPBigG3CbuDFh2IlBJny4yZ3ofprNNsr8TlYpj+4MExD3iudWnw6bhuy/pIcrMvjodNih7FUd9UrQtfbvcMNnMBgvIAK+G4SDgc/p6LmrbQiBXl0cBDlv/85vy82AcZNRrlpIAa6VfaTPPqbGm07KzTid5coRCT6qr4CPQOWnAH7iz1EIAS/zufDf2IxjEH1AnP3UXqcnzdrkX2JMkrsMPupJPwB4JjVzUMHaNhop8eHYkA+4yGE32WU4qRgkY8H8Ak5WVnLKNs1F5urdFKmf/ZShnLYtpIoIxB/0HmOZp8bOiuvTtDORKdBn3xSJivOpepRfXDzv3nN8le/6XHjS12eKb9btqbdltJKnKZkZM4wOSjwpWWtn4PReaoJspCxuExK4lJWKMJzTPmO5p3qQmqHqM4HxP8CqVGcMZvyUIMt46MpNVe6K0peRWy22UbZZXUOWbiLXanzDgJ9cmWlDfilNI/83gH9kMS0Pm7mIt3nVh5YyFkQkh0bbp6MpyuvwidKFk5woY2wq9twf0n+W1+5In5S9iUjvHJBOIFN6azlAzHXvL47vjtV9fWV8OU1ISU8xZTmuIHCzdjN0sVwbxe4EyYl31tPJSu9M5S3ebYwsGd1TU5C80VnKjnlleYeXGHhprSQK3kPQu+eduVsfET7QwEddv3zGgRetahCLB5Ut421y1kPhitvu6Ur9lpOcAuZ5Yg6FYYX1KyNO7nuxac7Fxm/2ycAFTJsDoQwDRG4Mr4Ym4pnHBqdFVH09LMrE9GrjVPqnkWqm/d6B95AhzSbw5gkftOdeNunakJ2Lgp23nNfd6RljseV0WsDpPXOmnp/bJoiqSVMZvcSUeyPgnp1AX3JnI+ttKsWKk467r7q/Fyjm5d3pqXXNkMXytUPk3NcFn6ijwSk0kRItbt87jm/ayT2vT6SYf6JIMlrb5mSei/6TFNqKA8JH9X5zddcuiit9h33XPP474Xek+15wxWJPr0x7ItJVF+6xl0zAOSm9QAd3996gAMNhCO7CTjqzgUpeBuS6dnhYjQn4mgQbv9mtfXdzzrOl+eN7wvauj/lOjYccl27qK3QVUd5bgm8CcLwzy8n1QjgJeBqysDzygqHB94jBy+V+9L7YN4cvXd63cD8YCpD/uOz5unIiwyVG8fYRvq7obIzq1O7bXP391NAv18gMPg7Ml2fgM4Gfn4EX8cpI9AQajHEcekBer87lA/wiMhB9uGHcbuCnm3TfAbl6M3s5/RZ+t/BNgf6nC232ZYUYTLgyiYBPswEIOVkFHYnj9BfxXNLxSilI75XJp8/SXksBZKcoVmbeRc4KvAmLtdAsREmdb5QCzgjMI4SH2sNW0UHbJsk7vR1uD291AW+7NVTjsrA3+qIopcsuUE/aELyQlnjvjEXRgtr3znzIf4edQM9pShEdnk35/ZDlo3mXuRsDTMkAACAASURBVAjZGGjoKni5kbQZa3/dwYFujXsKqiu527gsCnSqeUZSnqO9a58zkdxRSgIPGe5afTYffazkL7wQnDXuquHp+WFBoC9W8sLnlXMtz9dML/3jvfI2ONr/lvS+Wgq6a/R1B0emvT0s8CZgclkM2Y83hbmfQpf5T54uWYnmDRP2/9ZqedvQBwPXrH+EMGg4Y67dTYvh8PC++8tG9XtPnqPWYTSx85Uclr6qfVk2Xdy/rl02zuI+mCYw5J7U4MOI6T3gimw2XnFUmu+bnI4GRiCnK7dBUAt1ExNUge7Aqv1uom2suwikp85ocnIZTOaLNf6IwkVX6qJhrKy1L6Zh4t+nCLgMfinqKmXEPo7c75UYVg6XaE6CR06hn+c0uS9JYiVpvc92U4ryj1cvjrfhsZ52eLrRkTc98avMS5G/b8qm9tB5r+7aFSOyUkcuk+KblbHj6ybI2FwR7RL8SoWM+5Ylyz25PIr8zs+T8tMwZMZERj6B7qGxLi8/y8YsMNpdyb7B0H+tPOTTPQ9gv+fPBaW8SxFS9hM6vtfvlvHgQxtR4wnAk3blC6xbo90xpHI2Fpy+Q9RW36sBhXl1/QWfapOIu/QbEHrz7Mwvw0++e4YJsjvaVXkOsjwzoTvjn4oON5X/BoktKju9NFfP8OWAkfgJvevb1pKQMS83zSbUYW1bsAmjKvqPsuyR2t12p/6TgX9iFyKTKfcN58nqKX1lsAcNSxKOtIfhXh1CTR5tNnfsE8DN5pIrFTW1aYVzf7iSU8o5YLeI7+fAojzpSnNvOLlMYv0W81RPOA69bknn5mIfo/emVxwk7wEq8Q5Q6g+dzQzFQ1P0THU3HyVvyIo+23wj7RVTFkffZJIX/RleGT7S8PdBN3x3m2ovyDimnEg/ipuCLnT1wPCLwxMcPUkShFq6XVyOjz6pvXNC49wBey/LeqoaRBj9AZD0NPOktUkRniexQ8DpMIWMzbA6ge2yuJc/d2mo40SSLRdWrikzwalVCDw7pXElmC3+/B2Q+bylzUjzFBULOgR99nL/2yq67a8edmGj0Jzf11/jATthjHEOewW14/aulVrvkm88xNrPw4lc1qspWbIgZr9GRbIS/U65aZ+jeixJHmactq8gBbpl5fSKRfnCFYlKfbootcUwS55NWY5QoINx8OEn0JkP/WP/HorxGWWpUh0cfMaU5eUOdMDbEpAl5TaHJ5ddKHMgrcHCvXsmEKkegw/pVz5o3dPLoQHQBKZftUOIlmt9qQWXJCuB+lDCy5Atjk1AY+fdUX7DgzQpfevoVfXu8C6HJj8n2cXjx61nUlfwD+5T9zK/hb98uDpIdrX1L3gf8txl/tM6gr8FndylX4QLp1lFBnOBQ4CqBojNCDgtIWY3MPNihW7O4wA/q9D6+TMwXwB8EE+wL2I0OjMtOw6h7HPiiQbG08D88IRBA3iedncTeo9+C18/fFOg/xWDrhjNzc/DoSjOEc/Q95kF8irUiBAyxGVqWbE+BHDIBXvAcHYnSrG8f3W9O0geL4DRAN5lzUqWnGhHtE8Wa4+FB4T7e/k7Z+qbBosCzMR4hT3nP0O7HYhpg+x0Y+KH9Dx+APCbKm9V9D52yHECA9BwJY2RV7/LbB+XFboujhigqSlsAyX33aZtSzUtwg1j9P8kt7K6I1yz2XgAZWGY22zfysZ5uvdcT5xXxTgAu6+eAN8pbX/9rjYL3MD5fcMXFB4uT52cNN6+mjxV6CywbrWkBVOZF2me+wot46RtztpfRpiUpwlwdmqAJovr9jnVvXz707hYnzVB0MrT31hffYH+/yIL0i8UfoHAYm7dAZSxzxbifdxKeGAilCR/W79frXXrzqgnphJjSPlZ8cO2Mwhyd/izppygfEWLTfmktwMDGAyejDlYXNZaG5wUJr7pKG4fvwPw2TfwaMzKF43kFQTTkzXESZFnS560MTozwAcA8hN/z8cBgpygpkl44UMdcdwbnz1S9tPnu1zn8eeI/gg0PbxmyphO9dCBCcqTZQFAzkMyPonLAdloMnYA4OlGeJ68Vl54Uiw+HQcY+H/pJVrCLe1bbQQzAHaf33GsLL0zr/y9102Mz/gEkCpbzdDMcXuVE5bnHDcyXU8Jnd/a31jzuvxWeTMX/t5kAC1GTiOi1QHNLwaBXOKQ6khwMEBmJNPlFvFKDZoQxVzBi4DdSQFCwcJMbR6S04uPSnM/J5pGS0PQnlPfGr1I3550AJ8Uhk+4F0IufgJg1DJqZHxg65KNI2yTDZ2W5XgUtgJA8VA29Aexe/gwkhjYEerH4XVHYYIOU121k9zUA3PBzKkLuVRtq8p/MGse4CdwuoMaIQMkd7NWqbHEPLUZ0dwi1yL6JDbxrccjTYgX0pd5Az9+Ny7dkfvW3JxLgUzm1pzBSY4iktP71eX+vjzy0+4ZluwxIXiWQTcZGDQxcRPvKNZhNpoGm1XT8aPBsoKYmC8b/szUOzprM16y9p72yTIfYegixhcjnQ2362CIhhvDGVl1V/fqfYJ8Lbi6wN+1q8btesHoCrc0hEaEwJj4iAHQB8Vj1qtLXnD4pmfGKNo863senHeFXX05vpVPWDrmrFei1PgfqGxrC02Za8kRKb8seMawbo5xnSBlT4o3tCKwzYaJK9V9bZHRm6WhWQxxYHcYdT9kspRzvEbG6ri7x+X9O7c/n/u8SZeUlh1fsmIQIDDNNn+Sh5kLmPbLOuOpueO5/W7yfNFwb961+VRkrg4LpfgrvCH/t4dn24M1Zpl8KuuYjLetN4pi9wqTlMguV2Q+Ov3/cN0+caiCfE75A09xTJfUycJ/NbciX2APp+2CdA96gTqU7PGPzpBp7cVMvKLj6nUxaZZYXRPSppfJOA5ROAFQW1Hhc4NkTehyb5pcNvqFlvTwbjRuHJvbt7A6aMlfwWeSXHmKkpTTshyiYN7cZa7B1ha+CMxzC8tYAQC+ewI+v6REqHkMnqum7XDhNd9fG750ed/CSejcvZLAU76zyetRfQn4rtAQsxl7rFdPXNftoHHsv+I4SkPlsi5bD8R6EUxx1SY/gYZ4gsYg8O0FGC/vvB74W3hr+KZA/zOFswlI8cc9/rVVGHPuyvOiXE/f0sYcEemJ1QTAPQYIY7zIa/VNSAUtMmaLfyORJBAGrwJCsbhNC4JiX78IHqklWeLafffP76Xu73ABLwDsX4ucT2vqvMFr6TeCxhUJZy9RM3cO6WMrrvbinkXDPT33sdu07wVl09DOVF3u3pXziFRHCj6XjYHsrrFU1pWxDQcWa+YcvyjHWv4scRCqYDtSegLcbbsqzmmYG1fyNkX+XCZ8GFyBrj3k9Sf8iHissL81XJbDJ8/vqy5v9OWHZb8gcviHOHHWJ0k+OUM1f9nkzwuUnbDIKHPWOl0Aj3KyBaYqx01pzlOX235HOzcDqk3+DI5tYHv0G/s+1Uf+/3lZv5+Y+IPU9ovW+vcsTOsv9WfG1vd3X5l3fH7tAnkBwvw32Ukrq2KCTRmeAbHFALMYUhwTRC/AvCkqktjRDHKS4fgmV2GLEsRcBWeXdIZHQHg9SfhD+BXEtyAxukjwTZYMa+KhTDP1r/4y4C5CXUlLpQghUeYuNsjc2/pc0n9M77sSLjjHu/D3qtx7Ya13pU7+Qj0iJ6L0/waWN1tQnfC7qzBaXTtemflZic/lXIO1xl2M+omsOiEnfuwYsFx9MCONIibpKXOim+aLcm74kFgHuZt34btc+X+uf+Q4xkd68rRTF+LTZddwAVvcsSs0nAq3/0OJ2LgbSxsYL3oXc1Z0wX+NdLryFR1fCTFIevo1Gf7V4djh31paxn9zkv+MXUj4r/33BOCFJH2TElL5SbmkNMtc9hqL+I0+KRzST9/jyev5BZ+DVtEUUqiH5EI0CB5A2ieEuLrDiLYMsaQdfiIdimezSSJNQaBk+Edt108AwEkll5TnhXQYLW6gspWZmOLWXpEN23IZFWvUrGr5rsMEGklFlOQll1HLGoSibxlRzoiezG6rjdsu5FKL5RH0PnB6vXpg6u9AnG4/VH4cC263DrLKkOluEQrF/8GcqpAPaNzVtu78FZyiSIMEF6X6vDXWMTb/jcQp3oWaLpTneYpan1Soc6euPVxHrc7zejq90fmO25CTib+9wOfoeeBaXpahumC3LeZM+LNv7IZFxSOPdBJKPziORpl7PNzcJ0xIowpvgxUX6M8gpYhMAM2gajK1tZdZZS+/NSX6nxWHK8wGh3yfWiJvlOwnzCB7u27cJCVfhJodEPv6Oi7uctic2H3JGOG/BZ/jaVcXeylQWrnCUNXmvIlff6NMbrMmE7wERyGeazvPeqgaU589vye4hPFAuv5MKHtzsRjY5sycjez/DcNydsL5vZa7Q/GdtrjOWYbxW/Z1XlZya8WkCmT/Pl2pbIruiYnpJ9El9ZxAzun/83QleSjCDSeMt9QDV+tcDIW8KIda01PSnS3q4hTE6G/KZzCxKqaOeeA4gJfJ2jbA9q6FbgmTP5Z1elC9AoQDsjfOOw8J+Dtk56HwgPFB1HxCONdCsc6jC2CL4jzPp036D3pN1+0GvLys33dVb+s8B+db+GuGszvQbS3HblQa6fWpF9Te8RhObRHqTC5L3xvBuvQQ65EE2TBLPIEnwIdeqRkrmFg/E4rXX7CmY4HBPEEzg25D1vCn7foWvmb4pkD/M4YL+fAt4miW3f1UdZHYZWJW0T/Dktw46y6DCYzs8uQO6BRHVv9FaAusnv/9vPRRwftEoHYCD5eYPWX8p4KaFXVymvMt4XUS3P3idOx3YGVPoSrDn4S+eNrWVB97mh/SN3UriI//J/42ngAw/uPl/hkhfA/gt02Vp+7bWzj7trT7FVi42f3aKsq38SgbS6dlUsRXV+vQO03p5M/Kona3a5qvmsbukfK9nC5Df+nw6on+JQWHvnit33yhnNPv5k9Jl7dN/dzORb05um0R7pTaOW2mk2mxa0pzEd709PnmBDqd1eP8wuJjyfmq8LsviL4Qkv6svNEU6ZlF8C+4nBR08uzhezxsHHW5SGjSgW8OpZPnnj995wlMOWlMNwJI/KuLwRxcEU6aVFBeNloWrUIu3zaqkhKduG6Xc8In6GZLNCMjiyrQkfBP6RLnnRaHwTT9okR4ug0MAJ9fxKXyd+ODHkY2gPM8210oJV/fevLcwhU7OpsaXwKD8xJL3PLuU3ynd/t+1jF8YTmd92FIjt8O2fL+/mbq0JPJfLaJykBWPW7TPNygOz3zSMddpSnz9pw+m1FZKK/P/ByNxGITz1UFFCH4c/W8lOtKhp1k5aVrD4BymrwaC3DEockLS3srPhaudTJUNCn2pt+AtFcY8TEZxhCAzZacpNuAJyRMgAoTo1CA2t8ur0OyuGuW9ycor3TY4qSx0CiubniLp63U4rL2CXfXhImy4Z9ztqHzPRfDPxL6bOKdD7UlNpqqc91clHsS7aukp8c/IPem/2wGhn5Xa2I3Su7tDuY4oVbl2d7Xfn/qRqTKfezvAP4FceP+ag84dh0JbNquSGtDFaQmpdkcOdkpg71LvJviDnhKfSd1mUS1vT13qc/C+VSTUrJ5XU5vPeAGn644r2W443TOeBH9siv7sVCQfhu7KzGg3J8G7esmcUIvBjyiKjrwrKLCTy+M//nxewCMf//0S5JvdeSMDrPWmQwMajveyqV3M+KRst5ap+IYJ/rOu5JeFmjMaz0br7LyMqJva9NyaBOZaz4TgEp55ENhhHvFAW5lNcbm8wyxA/oS6TkP+Q7kLVzr81Ue3qTb0r0Mdvuw3a+Dxdd3o78dgtQT+0DtOy8PF2GX5pV0+tXhzqhxjTd+cx2uEbPznv17El68YizjSnRSl6XbnjTs9a34xQqHeaIL5fjEJDutDo+PO9M1N7c+K7U3c46scN9Ba/OsG7C1thQxKTNR6yMKHs4QmI/JOKYYBkhXyTpWRGfCVo73folvb6Xm+3DWE6/J2vM/COEJnq3pdjBuMpkVyGKYnMePglkA4up9HnvYFnS3eaLj+6hHssKny8PbwpZXfQu/R4irG/7KIQkoAFxO6n8w41kxABI6rdLtSN7gGLFfS3BDIJMZdiuGb+Hrh/8CCvTXLDo22Xbh7euSi3L6Zkne/TDif1ZxTJa6or9YuVzCWUV3NgEp/zW47cSHWBhnYZDTcxZQVmdHvll9Bm5uijJopljYv12qyTiybnoU01CFYSdKEA39VeEvb5S2zYfgv+YCjd/HFL6EROcnNDou7qtatlOWtHz5Wj/UbZsy2PZpAMAPABE+mBvTtuazU99sLpT/BrmsERA91KecGL7nASCuEOD4bL2xW4ZaWKaxbmSvw7lZJNE6dP2UXtp3b+mAS7tXg8XKHFTK5uKCfXiauBudlEnHe26/n+rsm+xpPl4a4d0jzW8UUqtuptOqs0XzSaVOe9t473ZRlhlBGxwwt5a1nMD4ThPPgylUZJ2oC1+H1VehBXGGGzdxwnVWa0eW08GHfjAT7aIg1/92i7asVO9xnrn1qzeG9mXmrJvI8/55Jd97JJyenDgJ7p+0572qYxNX+F5Lt5s7uwWx9a3OT8n+CYXnMVA9HRg/ECd+AofSBVPqaXnB50J8wWDQkegqRFnEMyGTyQXM7i43YBXl0IJyE4hNktw/Cf8UCPeMYZtUA/CjnqlzA6Jwe3zewaucAHBTnm/Nm7bhnPx1XlhP6HbO9GZsP+NTnV+V7wpH2tVl/5a8kDwMQ+3vhzxWDK3F3Aq+GEN13+RRZB4yNtftG+b7QdPl/RzDF7/SjyrebfmcuZRszDsZsOXgc8boOQi3IWefp519HpF3unHKWIdLf79LVy0cGvmCF7WVifWCnW69QU6e3xBygN2L/ZRPeJPhoJT9QoAoYoN2zEnATV1jgnDoTheDcGPxdvOCT1ZKKCk7uz4LZHTFkG96wxnihlPuVtcyRy+w3+hso9B5ePi9WKm/M/EKb7rPwtivuUZ3FWoyFMr2PURx4tq/s9DeXx1f82lBKzvqN0UmY4NuCV6j4XZ6WFy5Szzl64d61xUvNijin5X+o8L0U1I0svEXNpKcaC+XVnmPF0dejLC5AmLzfkczyL6T3IVO8EnKSQby5ImHsPOSmFiSY7oxFilAtj4kT8fhhreTMINX+ZHDkRMmmmUQyOk8dS5vhMIebc12Uqed+PW2NpIuciABPP2kCrHc025sliFzaaJLpyYy6BUBFPJu3osgEtHy1no1t3U3E0MOiPGNU+9ZAdO9e+1cKVMuucQNkLASCKl/eTnwM0jFiNXg4TRkObk2wuHPkNSEieKcyIoVy6nYJuZy2emSxjut4ZbesE9MB6BtjgSGr1B6leDNJCBVl7eopPQ0X5L1rks1vLS+FZCvf8B2GN1poNGFBMvgnRRGAeu2q+PD9rMNc55ym4SBqbVfik0orXnst6gdqbatpj57s/yBl+Wkub+vWig3gM3lLm3c42mpk2tsTbEQSPmfrP70t2FD1+Fs/PYwx5xoPIjXip1zs9LDEzxwCPJ4Z0Xzoki/aEmQQU97JiMzGDwijSm9Y/RD+b3Go3xjNaJzF+3G8zjBwAFJwemFFiZ4Wn913p7L9ASJHmTKJZlIaJQLQpTmjPJ0vZ5uzok5GczhI4Z0z86fE/XaovDJYPXYh/D1fBoVvDyZLicVp05eCBStWbb06wwh17LK+87L3llZtw+Sfh57+uLM4fGZ//sFl7Kxb1+LvxjnLxXCy5IomdfReeW1vu+E414QsfGUEfdSYXjwbiX6vaxnKH42zPfyM9LpCOMraU77HE1rE24+F9UbqNME0/lZmIl/DqFe5UqQVYB4RYi+v0zypQOXn69UyUX1Gxw7u9Zxl/YvrkDfDPqyeluTXEQ+HpoSrFS5MARqcToDrBweIBoyM6Zul9DQuxxJLLh0s0xcXYnbRKLYXKvCnP3aQkI2r1nvLxx2B4NLSWr5MtOkd8WbTPGDCTxJNh5HWL74KZhCClYZ69QNR02UTsM2kbcMV16Rn43jytgYLO7xdqEMFy1g2t7WXbrMe1JQBM+Hw3bb4d2hb0SZ4GqEP0Zqg9sFrM3c83SPCGEUdwzb39NHYHwAY+CFGc//+99107sgOug7ffwVokQ3nCEA3zPwTPWSvSTVi6weYywWqqwyuljlCs6xCuVQ5U+aZ5lpZmVr75IHhizrJTs/XLuOvAv9nUwJLmOmJELphtISIiE5gwToYW5kqZbl9cSfLzgSvWktgBn4bHnPFSpcxV0tKDxRdlG9L5KXmPS+LD6QBNO38IjVHeXDs7bwDwMtb/jqZ98I5fg1y0TWbRGG6EQPufccdu/5ywTNCbb7d8xU2xbaZZMw40NbSGyVza+kT0VxnzdcduX8voLVafiZ9RT6L/Ju3bLT1zwUvsdj/IzqJ+e5CkA2agFDbm3e8Y904ozlLlYaDIypJ9VIlAhTDG4GD5BI66CDwcfAbQ5gDvDLDThMhDj81IKdeTNFHsiOrU/wFCe1RHITMdOzjGzs5iPmNeTKmCw3AYkX2LdwbQgMkLnIAgE4wJPxjAmmqet5wguZe1EllnQklOYwWtHw0fsPMLVhx8kTClOCQTU4t2llHFWS2jGW3fsVcZUycqq4FTdWXp8w0wkzrZuSK1gZVHz2Q/qZee1BDSWQpK93nm7ylbYRoO7Mlzu5ezPTxpjEbc5FbvtJ83B9BcRlNYHwTwh/m3qWObSKFHUnNrnIkzpHKVAomkfkVyZEuSppqJJDxLPkN8DLF95LCOEh28MRVDlG0LnklcIVg/pfkVxtDWCC/pBxI4oKxC2myRGiBOYBDAylQWbowOCDfKpV+Mn5m8n52uKEBgy7Zxla30dldqQNFltBo2+5LaI8CxXoCPKh94kONpppG+ZSj90tOh1enSck96gPpRHmcs/mktwhrfKz3RnvbXQ08Xh/pjoViEO68Xlq4CWybwr2UIFZWxm3lD8U6CIj3vgmRhGKs+bm1BV32i9GCm0TmiH4RAD+DtY5ouVoOik2W5gtUpa3Pzbs6/xO/nDW/eyyniT8i+UkevmWaMrMOqQkWJvtlcFgtx3EZQV6Dz3sG5Xx2gW70WSoC3lTcme6O1zGtD5iMMtVCgMUawGfm70DqPShy3wcbQLUZtLG0FgqAQfHXYuk3ghkT4HAPPSksUDNNNzGaFBs2mUvJkSEyeLhYXJeFrF3+dArKyzdQWrcw+HC3pT8rIsJkVasVzKOr7zXetlV6xwzw+azKYoGGC9GbJaSrPyFWOknskanyOSK04xIWn6m2eDP+XdXy6EYNTA2s0nv16EigCZGZvhjbogNcTnmlMxVw8eXgM6v5silt9P9ZpDlU874kWOnxJd+jnnOpMuPPpcSEfKs5FFaN8RIZc1cH5cxLpC8OUyI4doOhc7KzfFz+ZCNRtIvIRkTWeQBU35W2sCls91wbQNJzMw9pFTe+mfbI6kJ6DxHijuwP1oanE7CDY7xyYgJvS88OvhzViwI6k/4oRefv5kbC3yk/VkpnPGCDcl3XtP9fDCIRtoPpCQTAGGwHDWwrsdlXD1W+nnK0xxO5sF6c/k0x+s8xU371LvOcWj+SHVg4oXSjeeuSE/40Lp2GmwmeLDJJpQu/LG2ZI8zdZjODxObfKt0R/vJjLsAsaW1G4+0h/T2uQEW4RlzjLqfpUaojIkX86DmRnEQedjkN98Dge+r2PNU3sFCFF1eJfslpfWp0SJHnXmSya/sP6Sytk3Z4BCV10vTEo3HBi9LbYkOGxIzCv7FuFvFmShnftfnXkg1JSqvB1MbLoML5qnldNP5MPbzvrc2yT5rnWe9tCvqukeXdK8o+kuGLkUAgou/hxL9XqA0F2MPk/0b6bx32pdRmhvf60zRE9bAMydKiH5lFOJER/96sWXi5expfhBDTpPoykHPpPgSGIQXGhi3Gz7QDeABniTOH220SK5vYhKpbx4DhBvGcVPKfWDeCM8fD70+gzCYcHu5Yb5MzEM9ik3ADeE77Ejty6R+9nT7sHRNMpp8e9hhMdqYncPw3tD1Lo/mAf7yCnSgdn5/3gXaPNXSLhPkj13CzEo+ygW0BZdLC/IrJ5uHMIlJ8A0cACBVnhMJwx+RNzZ7rFojNitJLZaok0GmQAcL1VElTLT/5nCI61eSUydm1JcWZyo+rAtGS3pqSdQJW5TXOjY+5SG+wvosGLxmgncF5R6S07qvq9kQ53vp97W/MWygayi6rcM3yxN+AwC19hQB5wLWPDfyHvcNwLhhmHJXGawIo70lafOXFfeZgO9SWQarobn+UvLQ61f5ytYPAiizxD3SvLACkARQ2vTh9UhdioALr4u5JB3R8LMYuiDIyhhKN4buwlJRnrtC3XAyKwS0Y2JThaowpMkzSlw3unHsTRN2eVxmurREpPYH+Gkwt9Y8L3sB3E2lPeKi7v33vPXQBdmzLsqWpX5q3XeKagneWmK/hiEW2Co8M4TGzwkcpjRn4JhAVp6b8t3G5l5XO83eSrS5QZqntZjbcxnbR/11FYB+//Azh+FPl9Xt+bVhZ6HV6UuSMcKjMKFssfInwb9mcGSZRKGmc4Tldww7nSZCObPt0thmOomLd1Wm80FyJyYPNcCgQCMltEKSjF4aPoureKa/A/MFAIFvHDhQXOwoAZ8M1S5GGpOBTC7y3Y2piumXRPPFbA5I1J3gxkPu1i8fV3L6XnlukP0V51eJax/28TZWjcdf8WRgmVtdNnGKwpUmXc4zspwq6Blo5ZcSXiZGajRkZtDyKk3Ln3PlmSPBl2VpEHAoHMqvCKx37AF4mToHEGOmcuv/vP3NizSHtP+BZ/meVz6mIbVuuaUxJ8Igws8kyp0fKdA0+B8JihqPJYDGCP5NBHan48ZvgUkvoEH4fnyU+XLLOm7pz2eE4etn5ePWnUdipEYBvqMnEKWT6CDI6XHCC8mc+8VZvgBChZmb7APfaL7RwAHGofNIaIhcxzCJylCBcZtTCAAAIABJREFUGQfJPZsZH+1kr1fDAbPhiEtZTc7wN92Q8FnC0Z2Wf/iHCISbK4PyOUvKfCydyA7PL4RYJSXZD4BtlAh807DS+TLbr2lTvRXscydOmHL6qgp+paGDk2Tj44Zqv8FBa+OkleQdnJTwhi4EVZYCNKgZXFiDQ+KNILAbuhgJ+FF79Sdm3/SS4k6uJdFK3HDCf3M/DcT5sCyTWbqMPZLvX0Tqzj1B7uSn00ptX6L7ogRWAzMKej8Z636y47BG2eBzlCU7M8M32msHR1oknLA2BwsKrpMxBZ7KijLjDOPFbKQ49niV3x8Yfjf1sLlHtul/w3BCKHWKwt/uWjS+IO2zciaE9KkzBVe4VtMBUeOMYW0ZYo8P25mgOFGc9x5Sy7PXFlF0VaHLTpvn0WaIsv4FE8xHOCy7pXkdsywyAboh27BnsYpOdEwGw/uuBlXOUc5j+Yzn1mzcnoqEoDyTtM6tusZFGkrvc6mH0F3sJp4KOPHg9B2AGh+ZYXVAF3OOc3J0eWCSKAU7PJ6OjGZmWm2PpPTS+t2IWBM4dkPRA7XfB8IkwavXBRuHqsBOlABFmen9FVxIC0BsvScsSWmtiEzP/CvPVvMjUBs4tpe4wTcgGA3ztnTGbOhvc68T2KQ0zxnK+KZWGF9JAEe/qoEfIDQ5NUzIdtAAajlL+zHbfkTAbLDmOZtPXxZfN8ZEnbGYMtuU53a9Cnufi8GGlqzK8sMV4HK/OTOL8lyfJ0+/83ziwKGyyXQluqGXwchqUEYOc3izC5yKFte+yIqw3k31veUl6y+o8UPgjss6DPAMqi98jgAaYApFurtFg7EpliWETSdO40xAeAtK5gBs+18MMlmkyHLV3D9vY7oy3RExtSX9j1qcyE3JA06XWBwvc748LbAJ1OZgFSeKzLIvqM+9fR0GmpennSv2XQP89BH4/BkLzSgMrYOR5I2yNt5QlfJp970RBG9/R8xdwb3DMvC5Hb0hj9HWdwWbi9rfhnJnp2gfK+99cMe1pL3g/AfvyhiaNDi7YdmClfHTys7v1HDnFGpcHYQrZZbvme6r1tw0slNhUzmNh+7V0U3yTNnaKIaGkPUzILpAwsCgD6IWHGpAdVP5TeyjQPMGzGfgmG34zgSfJgwsjabS/sz7c4tDtPoK5hqN13RgQp59X81eDW+mr6fh9m4P/yUU6H/9IIPXJ+YXrQEok1T+900E9EmQZw+5BFPct78nFEMDETZW1pOF6QZXnvSXjIL39OOPCF9lXP+LhLR++jBuOHjiOFTYMrn2hrDqAs51ADumu+HdTbZHwZUzvvOG8N5iLtFmUabbX8v1RrrShf0dQL2r7lb1xefButT4K4dYgzyAOebuzBk6g80KEZA7dV5EYU4Hi3X7zCfP95sgXy8kaeWrV/sWnPjhJD4Tm9/W8vvceO18y+uzXE5Zq7Ev9j2kPIwJos89egOqnSeyhenEnHpSgW66gZP+JgHj5hsjZmuHORSkZJ1vC10GzHuH2SUx6e/NCtG2pDTREUbX1OqcbFPJrGrTwnoR9CsdN4UCdCvkeZoRAeNGchL8RvTQcIWhQu3hnveqrBOV0hcJV/Xuvrkt5CZwuhQ0WCfj+9vAMfWc2sITThjnjkncA9gznZS3AExYTxS9P8ipRWGp/xwA+73jNh1FPrbT40ykR32ThynbCFKlrN/JqEr3202/DXO4wFp+bFMzAR/GLCerbopNtnlCiu+m+M2igMz4umNhadNKGEYhCGlrQGV/UNp01A827U3pGycKaC+G2HC+aSLkNUxSoHr9tvDPc5OW52XvwOCi6OvkTb+UwEqPYsEtpYgbbgT5sQ3cjYGwu+tsfMI2bM2gYwD4O55AAH5VN/9VxFNloXqIcHy0wnsb7KGAVOlY7hs7l+b7oZrIHJWRAjJJTlT/HeKxQdLRki9XaXiToWBLaCS+QBU8WPA2MGByh96wODfxbK2YBsH5BOT0mPEPb0/MgfBkkHqYUeanhcRtC4RS12ZFbQoLspNEVHIvSxxXliv/TelkPnIZ1zjXTMJ+tXg3jtpOzlCJw2sbaigjV0HYMJRx3wRGOI+mQnskbOdn+WdprJ3sabou1oo+MMH84l5yxnLlQ8rEfax2Ldjkf01YlBZvKGunRbmE/FzoLn1NNc7Q4qzVZrBbQgcpf0hTle1KizOwfS608gyvs937jqgugdqvAvcBWGwIloY00C5quZN1Xx4HLq8CU9vw2E2Sbb6zb68MS9YGwCk8760nR+479LLKPs+KEPImYPbpyqQ5kVs3cW7sxF2NwjCFLefYaafOWZTJfKiSnF2pbkrzyXIa3eNnlOcQcj19fq/Fvi/B9syxNrR3hFFcafo9pkBw47tODz27j18vjELUNnlVizmnhjui9ciY5/F9Pa39omF7yGJJdC9BLW9OXYjs2qB9tO2qO31xuwHHS41+M914B++9qu93GrZvASdoqZRo5wGg45wffPi9gwmIXX5U2bkcCLEgwLPSS5N73SbVrJwzv0prOeYJtj3baQZCA+JZ5fD05dqzBG4i+BvY/vsGt3N+BXmUB/n5pkD/k4Q+iCGH1UXxNi/uiD6+vqlWrymzhDLfTRKRZ7I7lAnv4zEu5USVFXnDZr1sLZTO6cvjk/AaQO/MoEcn2JXl12N2Ol+RsL3VKm2RVS/KuWvRl8KJvsqtULsV0lmxnU8VFOPk7iiFhPfMqa5XgH83PCqPX4T7i/Q8R9r7ZpFxt7JGA0qOtLEnP2mupk2QgHlff8TuW/fe/u9rtz8m5F2hVyzUdgLQVflG29kWsubGh/30OY4pinV38ZOU57mq+6vnBxPu8iD42WvL+DOGXxj4Ia3Oi2Cf3q82B819ew8FbYwu0f6dGKLUV0WHGbtZSkp5nN4xXBHNDJrPmPigx4kI4Bt8Y4UmeKpgPiFup1iV0jzAdMgVAXZCKG+qEKv2QBokSnSxgmIi3ZNn3bjkJNSzahysEwfcbciwI6h2iipbqKfejOkB92ZyuVN7Ngi5wDW8ksKehj9sOXNRMfc3WzTauOaEhptVvFsL7PzZfs1jjB9+5DYEda7xPAAi/F8f/uZ86H/RbwAB/0bfAQD+nT9Fns3p8qVuY15T24Fwgv1/qEcmHuKaGUQY6gHhwLNfiYIxMDFBNEIhRQBoJDfZJF52hsXfQDfZADQFuojJ7Io30d2Nwt5Hd29K5N4VbmxnOuG0YuQBXcbIiEbyI5UV7YiNzRgGEgUxGU3J5J3C7TOnbsAD/DnRzkCBM55ZG2LrqC5pWLFmnzD7yRyN77rDbDLsOXwTOmRGqyDgDcXzSPmzWFpbYCeA89kvcR9OCoffDMAyJoCeUkfakEHg7mBRjpquUKYvu5OGuAc92lDZFnt/Gut2DyZlMNUTAYC/M/CTujkdWfm1GTpfjer61vDC7+0up9RC2Sxttl5S+q5yU14zTu8nrS17uSZtEMLQo4KYzzrTCn821lHDckrjwponky8Gi/tyyrhg6SX4XhqZsYYxstqJVWyL/Oa0N6veof0ZG3c6PjqIZiDECJfUTjfI2kQQZ91yknNi6L3tekKcp8a1YfM+zPJItMD4suMkAlZmEg8ORAgrasHfkTYAJ1Hx1DApPI4AcKXSwRO/zIDnA8nM+fdPvy6jb2NS7p7PfMsmhPW0TcwrumZeVg4bz0aEyfqkUq88J1cmWr/WMjUta9l5kynxb1fcUmovKixGzGLNF/KA5KVW/dqfu3h309r5kcFMiKsFM60ypggGm/WGg74ZBEOMU7gQcsBWkb6GBNFaV324oIGRpnoryb/1eIvMI63dFaz5e+svr76WwectuBM241W+Vuq0PuVwUVDGK/b/Tsra49fyLkz2uk6vO97Pl629D/P7rh5ObWnj1AzL3d24xk0wDj7cpTqr8bOkmq5In3zIKfQpinOedgrdUnJV2istq3gUeGdKn9IETvGcWqLfOi3MW2zbfiOumJBpQnKh4mR317tOUsnLM1fRAOue4pqTUhXxyebcW+ZHacg783+pkHjBZZoH4O0M/rQ4k37vzbcrGvCFwp9lGP4bBVNb7Ud3NRWr7LvJUiGMR8rl/WsO8iNli0K7BpdKU9wE8/A1G25UZY5FFrKT7Ycoz60OFmoep1q64J3kiQ3htK67123FkyuvPfG7Ti1vwper1UXXbrTVOmYnA3xToP8Zwz0T7neVDReA/B0myCdSRoDdvU5Fgb5zFPbKcMV/mfXUG1fJhtP3JORs76z4s4Z3wfmg0PJnCK9RonseAGPoacCBjzchTb999z+Al/9EOhAX6XdVdHnt1FvtOhix7aRF+D6FtYcaIz+T5L9yWECn4IbAF5unZS9ka/W7pg1bn77Bk8tact0HZrtaOoPkPS1/f/5old1G1MuMvrGNDT/p9GBwV2kMu6RM4o4ZrtkPFoHrUF9B+b7zR+ZnB9niXts9mXbbbxbovmh4D5E9w/HfNnEXWXLcV6MNqS/TfPKpugAT6fyechoAv4B56KFwPQLLB4Ab5M5y2cQWAwyT5UWd43elGtX08TVXeBz7/yDl6+r2HYgN5e6CM3ZIUTaGk7koYYBvAovjc16JmXWyaXp4gCmfBYw+XIdQFv4fAXzeuDZdxmDz5V74I0SWaCf55vSaZjo9yoslZiEzz4cpZilnQu+LN4WHOyXhROyaITaIKj8s+XLWsrrPeDYDhyCnyu2kuV8kbfjo8eSnzsV9u9J262fT6hLhaTxBlN2Sbw7CMx0mbrtswSZjkPISEiX+ULhfEKc5SCe+n9K0k/LWNO50QQL3J7u/lwh2H+4B8pulODRdbRGr+OL3rpEjnN38lHuagdCJaaxdNHWOS1ZmT9MXvuvpd3jJulFb6KaWR4h7KyniqWmbpuFIgqK46c6QudLK1JDsZJJg05BTd4nzclMR/4bPIAJ+xJPX81mNMCY9I67ksDI5yqZQnvt3LhUHXpZ+J2tqbLJ7sjbvTelnrkcJ+EFdov5sPCaKLONR6Ysg6G5z3Kh0jWt9rf33n9C70E25ZrTsKkxa4Du92jKxqo6lzmpynJ4/N2MTud9weFEL+dGxB3PyJmBJKIFQNyAZECWJpjHsDBEr8N5Pnxt+q2JBPFeYZzqF1+okxV0kXDflqdchSnS7MoJhnhGMZ2fuq4ZE2mExWtY2KgSrSsj7EbW4CcbL/Cwt0SyTCT+Z2Kntm5ggc222lZmit/fM6erbA+GchKHirv0luPxRDBoL+mxFlBPZdrOuK/O9gVmSkszbsvFIm3Re8I6ub+QQBsTLByewE31yGgawWcW4cizV3bV2A5V+eeIGl+2K3lGkO6/aDn/F3+UoLBssiY84TzJ8rDSZIyXcfXsapM47S/o2zGcc9m4w0YedxGp8K/G1FXh7c0UPZboOtg+Sme6ry1250b7uXbr2nu/TYKjHX9a1ifFAU25XxTXz1Hu/ZW5Mbnefq1L9mKZMP8TFu71jhvIcSH+tTUkpvm1CUsSbZOQw+95CpubAe/ZppS4Km+9UutSZRBp3z14JEWnaLNuUTkjtznOPvaY3An/Rqq9T3hWc2o6r5qS74O8G6dT79TrrIhSCZT/ZsOu0av3+NwC/bhLdBfmk0TPDca+Mq5Db9hBA3wI26MO6ZsrztIQmgCzvX7vfG423NRQAOcxhPN0YZPUMxhB67Fe+3cST3ByQtXOpR5Xjrpg/IFfKmiUwIzbl2nQ0Ouwu7DjB1MKDpO1rUMG3hD8CjjMDum8K9D8qnGBB0HGTYO4QhLco27OA1IvPxwtI72ugmyvRbdGmiddGbME9I2zs4CzwgWL3B6iniPO6ZFdy3pXgfb5LuGmzRP8iRg3vLOA9bjcus3L5Oc9/p/4Lxfl2y2NZbOvWjgpbtBuHHPp4UmtH/s0LTU54kwSnKI5qRts0zoswTg9NJiws/R1DxsvGROqw3XiQMuWy6bIkqXWstbbUaY7qCiZ3JxkcmTe/lsO10zUrKK2Dt7s01OL3QHB/O8P5UvdFum3BadGG3Is5hcAbyvNVzb6D2GJMHDNBiVmVnHbqfCI9268herh9z5tfsmA/adw9pfddM0Zryp1y/pDwt/RsvfvL49nPB3lN4+H7O4W1PE57bGHBAKUTtukOdZcfHIjGMDEd20QufwbGBOMDcNwAMkH9BuaBSYpPh8oN6U50AdGEc06C+qx1shII/h4Y6Q7OHfOmobh6g508J7vvfBDszjoGATdWgxGCbSpm9i//mZ9PSt1KWK2Fc39dzV5oCSvHuBe+tuB/j753SroEVWQZbXpolu4qPWuojblfGpjkuxthYZgLA81ngmnzvvktrFDnSZgd1/TFDTwBY+CfNMCqtMQIvuzu2slcuCPW0H4/rdXHmnd4PrEnUQX9SHlJy6bEU10uX4NzG9ssdsV+TWSYXIzVeUNmPC81UYPKM6IIeXPacyKfpLTUIxDsgbSw2FzZt32PZg3DWwKGnj4vG+qZPpoMyv5ei6E4kQ07Nd5qaDR7pKrY302+rcJnYCKrrQYrOk0VQ0l9IlgXS31ud0HTcc5GyN1ep24kYvVWUGG14bdWu0qWg8UMDhyyd1KvCRbPIPwA4Ce7FHuR5Uqzk+GF1WU9DMDu600wisgoCno3e2XJ8Z+Qu9C9Do5T/Z7OxkDNFTLeZSgZQRIKV2BpoxiHtJvL01phEqnSWCU9tvvCQz0qVwYM3Iz0wmwiRZE2iNKY7H8nsyhLvK85tSTdqW58z0/NkytBXcaniYFwl577PMsWcUIeYEgeU3YY3rmC1RWtcROwzTPjpIYCDHVHD0SHKC4yq4kJ3dQgQRThrO0BMQ4cSucMTuBn7f8JaefzZPz68gLQTktK4TbDrpZxPpHwlFBw8n2BwWUBFU9O35csmXYkaaQBI1D3SCrN4Zwu8cps3CN5zDBMUkz1HuB0zwiN8dIy9xPMDqpeVNJEMVYsSA2oecuktfpo/91lY5tgG6awCx/ax4Yqu5O2FeCLYLQm8RLBAW3zTHMMMX4+jtwV6HoazZtUOt1pT4lbDNHuwZvyDoV309SzGWE0vMprKz7IFxmnrveuM+Mc+mvFy1k+Rh6N+I83ada8e2l57Rz2eWdjluuVOLuhnJNxjzlvtzvNRT+iscxy4lxPoR/m2j3HqZJd3Lo3Rbo/h8o4K/IdzZvy3fcestK/9NSZ+rn2I2l95nmFMsOjwGe7rsVsY0oJZHKOPNsVLFVIC/jdo6qV7/T84ZVPMK2/TNiPRv3+SDoNWTi8LA9wY8ptkpAl9pV8iU5+sE3fwpcLyQC3bWGtSYHFNjrLPtxie6qvPxGv+CWBeDitlD0uinnhv2L4dGMAGOpxjoCXIeJFkt/lpPoE4wDjgCjLTS4i+BWHdgJ9x6Zcbkrfm3Xw6eGtzkR5x1cvuuRV4Y8hojuP0Y+cPLfwTYH+h4Ug5sLvd1TlBKkovr6fHeQ60kLET57L5iDZ5rVbxZ8RsQeYoE1q7ucD0sbWJAAjESIpwxV2CXRZ0PXFU4frCrYG6bZj39fTdEKmqgX/eQiB/k2V+9o2iunjfm9J8p6Qa9fwQ/rkSX7EZOB5HvjbByVNn/5VOa6ihZ26rdUMif8M4LuMR9Q6sOJd/ZQuVbMTjJ6gwZGDwrIo/GmX+DVhJ3TaPE3lk2+Tpk0MS77pf8BlVm5xK+yKGbt5kS2LOafGtu1FFCoyM5U0ZWi5p9nRnjN6tAn3rGb7ZDtT8FsZvM6lLxYKX1BaoZuebgjFrEpEqOt2yLcZaUIUze5eU/l8sWT0ufFK2rCM4ddcbH7Jfn8HkHmOXDLo3yBK9J101vEzf/tUy7TxNaZlC1qXjlchOLKykJcjSca3G+T0uSWcCNfnrCe+SenkEFys0rrkHVYdZ901gEOU70Ybug6bKXg+ALs72ug+HSafEGjqprnNBdLFhZ+ulm8mM8QGNeHjIHfnnPmD0SfGxOcLPMgLu0fCF6YK2zJ3dWRpLY3iyqcA/XKDqc450fYJSncNd0Kfazop9h6gUsnmG8eCLzMMTfu/8Gvgh/LB/xifAB74t9tHL+U/8DmBSOH9IHsksLlyewII+Cdkc58xMWkoTg+vh+kFdsyXCaDB/h4GAnFnOgjgwXimw4qAuXa/Dalz0kukNeWtvk/dwV/MPhLbZ+hVCVQlHNZCfKNQ+8JO8Jj0UuiHliHGA3FqdgnGzinhjJMwCnk6kyXLmpRwrqhsdFOdmSPoS+BlMZhJT3YKPfUAQKyKNuvT3pr6TpYvGhjwU5U63PaBKtkfEMfXtdT6FIpKG0EzVJC7xQcBn/jZ4/+GJxAxnmmASN1mg/BCR5MXoGs4ne+c8GmZr+GaOSs9zRW5ogOY0jQ1ERvhfl6KlZ65gfEjEf51yQdT9+ZnBkwhxBrBVkeCnhR/Q5ErbfgXgH/squo0JuFfBSjkeVN+CwbGGLHB6Sgv6W4J3xmGowQ7e+502JXoHEbDAOSkoWKE4fmiqJX6VY0mihGqKUzBl91u51N4gd8E5ql7EMPblOu5aXlMqOtjnmB1m2Gn12/WNyZrgt3ZOyNfJVERI59YFKXGDLylAcaBAcKBiQOH4DabYrwOqV8LwMDPEEXv1H4CgJdyb3Yb+uXlgrftyjgL03BtMxls7nh9m2JPwDA8OOPp0YrUHupp2I224OIZe3IzaOeRQGAR1ThPAlWyB3EzmpDKyjKonWO1cn3uJBljUbpngoHUlhRP+YPV7ZOpftt32xr8mplcbuKnFj5YPedET8YsaJzHhoCW6J+NMLyTLJn3hR8eSPPfG5F968W3HhPhiljn/AFyVGXxbYxa7kIgS72dWeyYx9V8q7tsZaiXZiXevo3rv2d5dml3kzeAMsV5KMlN5o6T4mIk4aZEcsI8jZx5i8q/rmTXspidQ+g7w5Te0ZaqPJ+7OUdwJbunLDzJFO1VgR69sxvHnCDRCTNASwZXnU9wpmGU6tI968LldH7aVV5RZTKUYPgYABzkmEoCpWdc6dMOP++xjJy2te+rhz690N/PcHiT1sdgCnM4S/elwu70+UOBOkJ+C79j2O4dlwS7iF2GFGfGcfnTe8bV3arsYOE1rcISXnjCINX3uAiyjjerY2Y3oKUB0CAMDBy3AR6kunAre8K9jtCUOWby1AAwlebz4VtgRZ+08NYaJySM/nxz4bX7zF8xXCnPgW8K9D9fsMWI7WrZzLDQFvunqHYlv14Ftx4mXzTJyRvZrLku70xS3QkJGTMpaB+n73OC6BapCe6ip5e+lwl2C9X6cHpnOdfvXKOjhpPsa7knDOGejHKmmH1NUFk0i6DlLW9KXa0N7tZzvbC5Hwz3/DyNltvyMrBaOSSh9SkhPyuT7buzilBs/7u7t4yrXMByWDKy5mM3adFufcnvGTdgj2Bl95ZiziZAX13vFWLnOePr3nQabTcBCeiKZ8p9aO8b0pZPjqxhnf93BS2r9kpxvlRGLf6KTuzg4Rbz2HgUAyE4msqTuSXNfMGU51lZXr4j1n0GB60Qb7v6VYKMI8Z5GYzzMu9JKo9U/+a59uvbstk96Lvgc+A1YHW8Sf1Jm7hSWSsGwLXPZqVd8wAw/WS3XnS+yh0z5Xc/emku9mmpNNpcvC+LbXebm86ckCwacNg3XTDo7ioxgZLrYXZ38KH49qrz5q/XZSsag3Gdp/WdSh+sKEZYojbh/Ps5rr+Ta9wJsclov5/Ld6E1Lo8RkvGBQncPB09rpvyCk5erAjZJDQcTL1zSkePN9tRaEpD+md1Ou+CZynQRJZU5CDw4DE1vSm1VgU6AXDngd/pCT5yTK+BB6ddgQog/fCYLuBwi736PcGfhBIT1IVyZzM5b0lzO8gzZaVTJy3Sy9Z5lI0ofc7Etky/gqWWLboKo5Gzz0whRn7u1b6r8nfpc1b/mkt6VviWEWr7I/QpjvsM6/4HMbbWAmUwaG2wpLqGVtDkcdQ8oGqUWCrqw/qaT5WA8YeAFRy1bE4ipUZXFpM4wMBJyTEkui153iPVeam9XErUjlQkhUtCP+uVf+o1KSkuX35E26yPEhjfrOjDSl3T6nyjRKUVaOdFe9ghynCs2s4o7pJCz9Yr2G0M3vUb0R7LTAlTpzMwYineDp9AFB4ucz5jBwmH4xYTYlo5GTNJT597bqlZggy9yME/przYBs/tt64vJ4n7d7AwIQTGG0xXphQnWu8gFAuO5k9UIJCMIxCiAMAR/lFYFx4bLCnrjoy6tZH4Sy72RUw368r8YUxmrEHsZP7P0qdiVOjNryBLPrudtshNzzIVT47N7LJBHpAuCvJYDYFnzghEKip6mzdEU8hjsfFyRXZtAHwC8iJL4RgCevLwbEcYg3DDk2hGwu4R+GS+gSVXeKtfD8Ka/Ex4rHjoedP7h7eRUVpTPdEPqUGuV/lTakpgOguE8Mm7tfVDyTJCrpZMMuyLNaCFV4u1mverBUpqytefPVw/MtIG+cueGzdXjh6d4DH5TYMpQxn2s0Qwu72tI+JKFA19LdwQAFu+CjwZqv6kVBW8Mn8oeUK4w/S60YZcu6lj63n7LGiuU56ZIN1ft8o7kpp2B/J0F7qn9Pl1ZHmnsDvQ5Z0Cl887wxp4BINT7aH8Vn4yM9eHOv97+BS/TewhA7RdG1rfBYdp8z1hEpHwr0ZIKQbxVSpJ5VMeNM4j0dyW3f47Q96w2062kPev8HnYKyHrPw+/XJ+T/KRz223lRz5f4xZ9IkffXD4/NHWa4bL/IKjskTePMi8z0hnBZxBmNJ53uKncbzucbA6fyDRNOoWu5QQCJ8nyA0rlAnUusB1j0SmMiYNwIk8LjEuOAeGZKC5fSdW0NxDV+QfMece/7dae9LqzA7GH4knV61Tu+vqk7vX9ToP9h4T0IcCFNXMRVQS+XtXJQO31uSnRnfu8NvisW9RrLIqgeyOAh+H5j8aTWmuduPyha0vV/X4QVXgka38Lj4Yf2brs0NHAbN9x4uNupJdw07TPqeOTnJ4i7tbKDnCS3vipIofIdKnggIPNdAAAgAElEQVRaBf4kZNmOYzuNHTtxbwy+ue8RDf+oPJ7JD/0EWFmLZqGXah5zzVfoxkyLlbTY8Q1mX0m9j16sQ39W2J91Qp7gzd102Xgkc3DDMdTValGUc83iJcVpPL9zVdP4Nk3O++Zw0dYM9xcNf8Lxf5hP2N3qBCGKZ/3zKZJtQ6IzfeGYYQKHa1IARRF+qLJ6shqTcz0R7AsDq4eC7ulmTEoIgMU9qy5IGd8Fs7a7HwttNdfDSXnp9OVQC15rq3rG4QPs96jXNscawRbtJEXrBhTzgDmbzbns1E+cl7sOV8P8CAr8Xthrase8Ba8zv7TyOwx8xsCBFzCAp9vAwYzn3hfLVH9wZ4Tab4/PoVuXI/s5zx+o4r3iyX8cL5V32goUhH+jj57vP/TU9z+p1UcEwkf4qboBYBy+x8J64nyMJ+BG4HGol6abeG0aANGTo+DTTRbCn/CsdWhBA5g0dUo9uevJmHpSwCiKCUkzLK3+2vj+ys+eGz6vdC5SrAVkI5xSSpuv8sxa03CITGFh+TnW6+3Eog9jHVQVlUJRHPSSvNbs18JqL1ueJl8toQo7sf8nD7JFra/ab8MVehlgdnITY6VKRHPz7uWwjk80g7WbhpHcWkxCS2tvGDzYiXLzjmHKBkr1ZtuNjPp2p3NG+5Ham1qmn0m7xn7jm7AHM5Qkz+lGxRwKRe86L4NxWJ06HH8H8L9L4/OY2ZPwgtgMSmls6JnqJ8D70FOXqcKJlXW8DKyPvORtCCVv5HFUMZkXIhbb+Mct51KufAtTgW7uVdXIgYjsbTLDAYmfBIAnDia5jsBSTBsvxX3AT+zbCWVKpee+yNfAc+pAMuWmGduYbAD2dbmZAjDDlevrvI6T8LkvkwSh/8/wlqG4JHhGIBxgHsg9J48mxdq7wPyz5os9BW1Xga+MfMDrp4xzr1DIMB2Jvaw7PJCB04XaWmArL+64D/OPBn9JT2ij2tIpbo0Rc38M3MZHJ+XOX+yfruv8xBXkSowAtdVTXrXepJRh21jOOUuX23fLFzxHcHJu+EDqFycEmz7fDXH+lhkAta3SEXNLvmudThgeCAQUfzI6r5lYjdTYUc5daSc89nlv7dR3pqRYXxTC0baNiVKD7bwpXreVk+rhlKIWFm/EKn+F75b0N1LKATHv7ON3B8DTwO337HlX7qYv75Yb7+4RBNkkQmme/4Mo0jlOkdsVJtNzhCv3ycBUd+1+ep3tZCJHvCnPkzLd6bzXm+IyfrHBfhG64vuVwQ3SWl4C4uqQVHbsM7VJa3xK0zLEg88gMXCdM3pQ2po4UCe3JmBl5iiVpoQP0PyHQi/jER7xzvqcl+VqqTbvJGtni1uetpxK3/C0e83MbO5LdPNXD38JIP/kgU9kpDTn2ue3coOHYDl95zQXuDqBsbnF0AWAftD9N1nrq5fnAbB5efY9Ofby2Q8Aitw1bmLI6AbwrHJUOeTC6zzOc0iIXxPZ7kzGr4bamaD8nvVeVHklBqTwTYH+RwXavBjDPs2TNwjCeryEe8KLLwrybGrPFH+Uns8b8SgXtPLhxEWaTImPsyfNovRINLXzbm8W7yHJus4l9MhFQ8/RAlMUXpTZ4+8ZJZdNrXuy+VvDyVq7FMsXMDghPhPyUvy2ky8Wr/7+d8RJD+DgiZfPv6LgzjJnsiCWkGMAeLHPim/LgKQu8V1IjcltNeGwbAylDm2ovZ7MfocgTLJp0Q//lV1TpxkU76mj/CmBmwNnIfpMVth8XtZJtvg5w1VSQQDc5kh+f4SOnLxvUPOSFC7fbGxP4i9humi0dnzfrMjqkT5Bk2qhfW/w78YrC06baUPpf7NOR8q2XQDnTZhT68NNH2T8eWhR/QdISl8q7GTAdWgvwicA38njWdp7aJgXsr3egm422Kwu2VkWuzMQJ04uBRaWujL+Oc2Jylx5ToL9wl06bnHgm2+q6v2sdremt2kmMcn8ww/A7tiVY6G6+a48O9FIaY7RSE7dEWrC2mm7Qehz+Dy89duXCGcUaYnzZieCQdmlefRXcaO+LezBcDonWq9UdNpF1ISc0nWZlVr6/G2QnDh3nop4JkK5t28w6MZRzyBVqhPoNuQE+hjyrgtiXySTWZvDbl2OQ98UPJ7VyxP1+wK9+ewyS2X1tf/+Rh9Fie5tt1oJPIe6W4fMmSy+eUVJ+Sz+6cFuVCIDyP5rJbeBzX2a8IYq4KXmXVvmMvYV+YzDrjgiitDgwMGQOKVZxLQGWj/5vzvJfYZu1NMDINJTtGTKcEnha52SFkG/NP1vEIOPH/AEAvAp1Sfus2+wM8RZuZ3R24fIpzalruXoEwr15GgjHm7eka+qFk8hUkyirPLkLt13ApuFrZexqGsXmAPDrbQti8oZEq/0nDa9FZ182WCdpVkndE57wlCUu7GH8T9Wt40KAGkZQkJE9R+K6AQITFVCZVyY2ZXnpnqxvi5za9NfVioxxS0WfUplBafhHtvp8yzRhrcLiQ13wXUuigP8TPrNdCfPSuHLrC4r2fvJjRlAkE1560fxnEMkt69P9cLEgJ48x6o8N/mgG/h2uUQ/ZkohsZSUPPuz6KeBraSHEnodIYPZRQLR+yus8V6GlYFqEUkImmhI/gTgBaJ+e07rOcIg0sPpTyAmTDzHKKsHFU9fmmhlMPy0MuD9badrY+L1podswu46OSannNSmNV/BPw3L3Scp/d1hWSkP9ZqdCD4gHGWZy7FMnxX/bS7FKeTAY+nqmfBWT6C7QrTjc2orGtP3+A3ovPlO7sNGh7aeS+Zcvs/fHXdP+Mq5oqApwjc+gt0g8JGw9n/Qcemb4NHR5xF2iMII+n/KhYDS85kDxTj5fLB4G1+dee7Ene2+c5snLAZTHCfRJ08cHGkPTDAfcvc5DlWuQ5XtplQ3I+I0/9J4WSvCB8Laq51dSOdSMvTord9zIgvU0ySU6VSWnXu0UoqAE0UIX1QBjXhZygRuJ3pochdhr8srgOZCctyfPZQeekcxmdPYRNvdx/WOOiz7X6Vr/xsH92h7svfd943XBJt0LUGmCXnd9QbbnU3lLvRWgHZ8s/A1I54cac1A0E+gW56N4Zite7Ii3H71bwzCbQzZJ9BT54en49fNj3tpl++p/LppgHfP7aWqxxpy17DrPVU/UPQ3BfofGdKui51D0JfT9MWK2y3+UCf8DvGdsVH8Meqk9oVEwFR2W7aA2eRHULKryaSbiW5JTbGRZDKqE2DbiDHOWWWuPSinENJbs29D2mO4KKG/n9TeCdCOw3xRQkEbAngVjwX0brh/H7qLwQGQT0gREV5+/n9qv/gFehp1gyjJTai6QU6dfwDw4Ufg00+ywX0YYzIgjQlySMY2DxyPU7kYiE2bRFkp5bUOWXjrewVGmX+lq7PyHP33pD7mmEKUpvwFvSlrqsz3zXVmaiu1922ZacOqz53d+1oQ3Yk7C1fS2hXQ96S8rxU2NCQtblcilpHVcLDOYWY5DWxTIG9c5k2Xff0pvJYGvXZ4vlihf4KwW5PeXacmJfoj5aHF5U1hpxG9g/s4K1EwJbbsOJf17+KZ2UinF6FEJdel34m/A0xZZ1uuXliimb6xrfhI5irYFhXkHlBd60OH/gqNl9Po4ZI4szUh7wPEjBsBz4dIIE8k6V/moVdXk4IhrpA/qtoj9dblEL7121tCGZP0zu1bjr8KDMInPXlud1nLBtsOj3pmky8fANzZaIIyG8D1cq5Ik2swUxpCK4/hd5GD8A8CnvkzaBCEv6sVuN9XbvecR1lEN7nw1RToybiUbwwMxt9v30uZRLgNAsbAM4k75pC7Afj51DaPYGevBZ/ntg+yzELx6/lzlthgzxuOwlLESKXzkjrKAgdRnO91IxhVWq1YsQ5gHqIUqyMvpbIjch1sArwe21YPwlQKjDyLNrxu8NtvMWAAlsM4eS7BS4nT8YI9XNqV0S4N69rqbIsAPenJlc5EEzMEVEhob72pKgdGbNF02V0L9lLZWoLi0dhc9VsP2hiIIizmgYiX6rkjnQ6X8qd3NGkb/gFxr76Vj5NircbnPtljnZ27z6XaXehZ8esdqIVm9+aWJs1EuIkVyz3jI2IQ2ClhMomnCJC4HW9q8dQcL4VAuFHAPqiemvb7vLXtyqL1JHrG7JDuOh41DAo4NjifZ4wpzo2/+1lvBkRIGGCeGOpKu6uPCHInvLhtH1tHYEYHp0M/S352eqNYRFHDoA+44SbGBPSCX1wxRH5n8OJFrGtElA1UvdmG6TQl314a2MzMPAFPtTG8fayR95hizZgV6mFXGOUIL6C4m50YoAnGgYMPHXLB0gnBtxczZNRqn2jgRt+BifFsSncrXQQJfc3K87N2s5cd+MwoimklULF0t+8rzffy7N2fc9JECMukaTOIu1JVKE7IL5tBOx8aVZLPEm2GBGzXpHCMIZMp0K1npsvUboBg6U2J7sYGG/yjE2uCHTq3dxvWbLhjkINtS9m87NhJc6UbiyTAWA1ucuX99Pl3Gpc5ZPxup04KoXqNmPrc+mtJd/U9xx/bdPlqEnJ6Kn1gvNWMI0TZbWMtaY+p96UXhbidPNe/qYrzOTEnF8X55Ame7OW5Et1boOkEWIf3usdMIc/IRlvn5m673utpdV4ZbidPKwGnvYch2W40bxCZMIu7ZYqDkiEhNxKeSjQDnrPx70z3Dwk7vvCa7MnAgxMdBfbyWud35rnOP/N1f+xYaC//vfuo38JfJmR2XQOnD3aF0tfCiyv6b68ceJn4bEhWOm/s9HnJHysLZgJP1psUVQjunnM54sTr3ABogInwknRni92XV0kOkjPv94SvoLQ+r+v3qwpITXuw3m8K9D9BKCcXqG9i6Yd8WqHRDfb/TkLnYfm4BFfCZAzLLfaSwOtbR7u6LhXtZ1xS4p0A2Ca+aezMbabF5famBxdpyhpK3fAtis19R1Hpj22KrYjX84es0d7b5s5iOZPXOFsQ6M10S5hSt7IlF5C3cFxUZm4fM9Bl06V+qriR3beX8boBIHyPgd8MX3yDiNY87BJv1MfQDe4bwnTUytFFLlv83DBqanFW94gF8iJYpzxtc2i7YH9FsBNsBRpHZ603H4HaBIcyMYay+RC7FW3Bb4oTTZfb2MZ/xZQVP3q/lpP6nvR87gFpjpqY0pmdt8Pmyl3p/CTkfI9Muv1OiZ/u3pTBu3Rs90jmUy5cctVqrV7DEduIMCTc2YJHSe7GzIS9K4G0GNak8pY8xsx4V+1/v/AoCp72EwP4CNCnNY3RNSAIg9GDhedphPvzTfyeIcL72OMxQTbw4v5xI8226cMNP3o9UFewmt/RlAr5qe2KOeH0bUL52EhtFwUoD9I2QBYn2fjImjoNMOmPONVo/InTcG1XcQXER+Ku4h8J9/Kefb+gGhpJwQo9qArDN56lL/P7e9pSQ8c1erDwJLtaMS5exLjLt1Sm4tA//BMBZKfFb+puXWW8IafGeUR+0nvKcJtqxKf4RQTcICfP6eanzxUtxSWuwvIJzwADH9RIxhTkzMBBz9rX0htPdNsMXD2lTeVX6rA1tGzthzcB2+rnLjctHQnkgTA14ihxWNKd8w5KcCe+3wbbvgtecklBYO2rTkzZo5Rr+nfy9IBtbogoWWcGK3Q7O+QKomzThvI83yvNrcdSl2zGMHCVNwl94sHw2dxihxGw3Kf9K72kPrJ/Q//n2pbM3tP4y6jHtQjJ1rKxcMUtVeQIGVffACZnUJJrGv/J5hIA4UcA/0oKLndjfkJyvRknCUyOkSlPRW3tSnTOqTNBa3PCOkDbP8jOj2sfJVzJ/WV4GNKYeGIxPmTKXKZszjKEB6Uj/HHFAiBngSPCTqszTf8u3gxSH0AU8NE+Y7tNeV6ToA5aOJafLNe63IaUwGrMRj6f9D50EMQjzIjRZrjyPJSfYbDC4PDsRoxhFGwallv/TQA37VztDxoYOtaTgRd3BR6KH2mKj9aG9qUJsumJoCk7jqobuXnQz8KjcnASpQQ1k9lQB31R2ibEjRJQ+Cs3YLj1gDIgynM5l56LBMDjg+LrwMATnvEJzsQYCM6DTR8YZWGn0caGyvqHKrxGg4KO7suVgmzcuXVg7yvLarBmOqztCISCYlmUsR3f80FnSBt93ruiUtprSk6d4XA/IPofIytfA+9jT2cGr288z39P5a0dleiwG81L8Pt4k/9SGkvzpnd+orePx5aBQk6kfwLwEafXWzmedizejHmJt8nXcnmjd32pz2WP6LyeurbPil9TA8uvXM8hCu+JiYNZleN29zkXxXko1ScmHziSov1Act2urt+zZwPmPUSOp2X/NfAstmw5yvNUvQ/TezPs6HKXUCwrgVzmYGanKNNgy729YeMh2lKQBAC2L6lLA5hxYqaRj+EOzlH1Lx3Y6e0FsSjJl2TFYu7MBYjV9UAdrwpng9KYnqVO+o6vcbL1v1swHl1HNfOrFJXm52pzkekuOT5+cSX6w3xpgxuJZiyefSaLXoIBPwHIhCkWsELtD4BNiZ4JGetqjvWwiL7bgQCnmxek6YouZVPg07Ds/fbnLz1vr2Cxny8/Px9WnqfmflOg/2HBFkXxm89XXI3hu3l12cDx7ZK6p5DTWX1pI/XNwQRaXRyIGyK9W3CKcIdDXLOJRY7do2KiXb6DsfFBTos827hIGws83g68Gw6Uo7L44rTjdIPoHQNu+q56yrcpz12Cvl9R3gY9SbAPpjzv61gCMOQI+a9699Pffvy/wWD89vlX4Pj/xKAXkN8+AbLQawsdX4nrYq4bUmwZjm2QWTm5ojY5XLBE4MEOH96DH7ZBD8DviHo0b4eJK6zsTLoDHe1ld5tMBX9cVvDdQ1blW+qcvpqxcpNCzfKSttWbDYBPO+41gvxbO/99FDbo231Gn5Xnka0vshNcRWhRGm4nKaECJScXonpaLG/KxV1qeGc/PRDO5gWneKOrlyddf0ch7UuF3O4rGvFQsJPpn84r8bqyZJ3ry5K2bWiT8FfTChzQq6YZNCI/OU5OyD2lMzZBOD2D0wrou1KvbYAAAObYWOZCaQkSI6/NNNWN03WYrDD0eua0Yst9n6qZDHwYgm+fjymb8D4PqmzxOfnT+oi4A7TD/Q5q9a70j+TflklA3sT6TlVun+S8ND4MuUv5hRnn2x5cfv7YQL4hJq+Jn9hJcU0GInW/TqAx9MA5ATRU+S0GeAQCjxmGbIPBH24uN0uWAdyUT+vp81gj5zoTu7S/aXAD0NOZcVPx8GZ5sN1KCkVkGds+DlwfGaHEakK+pskTp2JNt2OMMin6egEml7fKjAteFrfKfX7tkIy8mio97AMhuXQObXKwIrsRgtIY2TqFlNbkVtm99TA123S50NuaZS/kPo7z0lmeji1j4e2KaQgVdOQWLFnp0M3KZYDUcLaCofia3x2aGLnJAW2IkTLeckJNZUTW8Wn8O++7ev6EEj/qx3+ldp3LfSh2e+1LNN5IUsEJ4CfIHew1yw5vbRyiPyYRbuACm4u/SX5yRfaE2AMvUIoRmrlCN3q1um63NoRCIriQdaj0KCs+s84F5exLzebQPzfT8CNHli72BrK47Z7AGKri4RAdjR2yupQnnhC36noCPxkvx1UVil9ELo8OZj81TsbnMRKM7HHWgIMOmMrpsD7x/moCWN+gz3ani8K0dN85j8ugnaFubvRZAZvymXezIcv/u/ddeuv/Fp+shnIzBIeecNBzlMDrnBokBiJ2ktqVv2WicqF/C1sISou4fif3ScrrTbb2cIkujMDyZoK29EuqK6fzBrd3S6gENasLt2HHnEtXhHGB95/+ep8mI1UzQM2QhzJz6vy3WKtPv/eT6As33sC6i2MkL3hGhm5gvTOPxdwH4KfEYyhY9Xmlre6GC/R9A+1jSpcU6Q+H7unLxuKsnN4njxCFHHKHSZqq+lXludF8jj916A7miYMPlRur+/a4N93eAT9lrnmjvHTrejcISPuzWbFuEKN9y4qiPBsK/u16pM3JS/JpuG+8jtlla9bvS1ersOEeS3YKexVdaULk+GPiINrD3AnkztAm/+08UnzNsLABB+RthU01WIMRfqOHjU+etZUga/JS7IUCnSls2y/AAgD8jYBfz/nmNs+38OcMOxQtywh2HlYStOs0fpfT6OcLEABm2gqERKv5M7GBmfcO8JRpdjD7lbNcTqDLas69U9sSVMEghnhp5tZlHfRCu7S/mhH1Q9PkT2JU8laqdllm76sHwzcF+h8RYgdGXym/xhhSitQExYX7m+vXybxVWJBP+C9uEAarTikFA3aH1RRzQvChd7GakDTVvaYJdsnQIBYMCPk0Ce3L4oaDNi336jTicEqQXRO1z58VnpfltOLW+M24vHXgXXbfFHCmOO8MK/0AWPs2PrT8gk/0w6YfykKaALsvlOW8x8GsJ7B/hGyB4dzS33YJbc6UzfQRwtuG+voGkL24z2JuiXA5BmlPNpjSOxh7bM5yohV3wFgEaVxwHP2Qd/bTtzj5YOl6JWd1bCrrXZnrW/q6IEZ6/gIEqYC+K+8PFhJ8AZth2S1QyPmBzwlWBZAudJQC1eI9znBqgxz8wPMSt0P+O4GCDn8Ni8I/TXhA4utTh5cJc5YBldadpVm+87roNxLJ7FepELGTRNuIkM04lebZfq1MBvBRqQdXPC4shdt7hqsRsaX/7AS6+l31TYx0e/DS9l5Z3by0TYL9MBkAnR7tZhhO487C11r6PVxz0nRN7/5iQ32/mFdN37R46/yxy8BXveO8Xl+M7/t7Zb//0HjCwKAniHKGADpgp9FZfWmTGSaNDyKTgMQ9IX2Uu9BB4PGid/CKrPwbPeMDycbu4ffLRHsGD/AM3Dz0TKgoJ+wUpuKZPS8GG+TDZcYcxITf+CX1m21lJp6dTleUDjZ5denn3HmdJ9m3SqPsJHepwE/AVYZPKc2p0jSRASlhRbJc8lYlkOCZSFjNkdkVkFBRkWO9wZ4z7VyAUp25rcb7uKBtGN8G0KTXAmXHSAVoqn1jKM2lU1Qx6gKV3YEecDHTVrzitPFLqMp5SglFgbN2aj0dpmmI/VRxF10GxB4612F1/kNj/7XU00IzNiwQ6bqPYVMmxshYyk8kK4nFVf9MZQTInn9wwu3EypgovF8j+jkMuBmiQJYcNKyfEwAdlvRsxh7TYGTAjCqk32MaBrasZ6bXWRHGFUEvM4rmHBli9n/EMp43w+GGQabkoCW/egx3WiFf3DW812qGtXaSNd95YO1kMB+Y/ILfmDH1/Lp5SojOXCbYZe+sYRFAahGPhMvNlCyHnNVsI3oCy0W5QMx/d2hmPH48A/wxpWW84HP4W/AhzX4qZAQmMw58xpxPYDyL02pOtDVRUA+GsCZ66O5vXBOTxs3HkKP5xZhCMCvN9NZ/VAmfJ0iEuEzopduCoODQeILJmabwPA/3vnUFppbpCryZ3rN6XcIkqPjLiuIMnl0WR6on6vJN+YdD7l8GGyLRhwTZB09CFKZdZXmiL/lU+t1Ay0MKHzdxex4hSvPaD33/sI/ZomD2X17ySBc3fN9DV8oKQ4ykOM/fiEXZ4kprdenO+cR6mMUv5eXW8ooLvEDFJb51SJKNqqLfml+UR7kP/3/23nVNjttWG33BHklePiXfs/b9X+G3116xY0eWpoj9A6cXLFZPjyTHiSPao+6u4gEEcSJBgi+thQYvO4tysah/Nl5YE9usUhuvdNMjt5sFktfpmDNKSn+zCnkVr/xJUtqxpXf7+6tywAlf+rzPv5l2vMg+/3gpw4PpC1XzNd1J6bd5LHsT9SfVrT3n786Sj8pyBlZtHgTdmHwCxOlxteueVCfm8wE83+xGwjTxLJ/JpGGmkN/dpFO7KGVFq/wgurDn209ee/09HOmfUecXA2dnKnLa0NtXB/ofkmok+gn0R0t9gdZFkKFQY3EoDd3fSzK5Ua9qs+hp4d6m+Dx5uvN82oKmHhPTd7JP313OEyhdqm5gCxCx8FrYsc/aqbQ2sn+0L/m66cq5ggcbuigbJ5jrEU2w7jrPgYc7uW+8C6LTKl1kO4Bxy4nBN+OGf2AAH/4/1HEHAG/+avTx8afNvXWwDcTjZ1dSYhLumSxyoTIa5MSTQ/qk3aifktYFuVeXPy03fqGkpGvp2ScNMdsPrbxgCzdvTmiyhiZ0uTK41vcfktaJ+MXkPk5GinpYYT8dFouidVLAxoHJuhFAnkSOJu7QWpZZnq+yN/NfLFzG4+RfXmX5k6ZLXuH0G2UG+kkJPh3xzn6feA4bVLLe7Fm3MHIeeQfIE+xYnZ/+0gOQZ5elb+y3qn0i/rp+jnXV6ruiIaLJ4WVSchIRc8lP70O28O+V3gEcpP5eTm0FsAGzQ+OjVPwl7bmGa/+k4Km40TsF8r73j7m0pH7/eSEz7mB8Mb1GNWnOH4GtnH8p+VjEmMrym8cqZJ9IOs9tMi/5PE97i9+F7ifR44Q65OZVi3nShnpRlq2FhulEVycgkWYvdMICujMt0VwAKCsx7mFv72c90XDo+Ul4jyDAZ0jDyWkOr1gY5Cp3QnsHm/Xs7kD79QlVRfuxSTshqHdlY/Xvgao2dkXPHmNjUQZU2D2ExJu5L49ejcx0QE+EY0ndxNRc8LU5XZz+5V4UWHw9Qll82hycfPq8L3r0Tqv2YQBwDjgAMr28zbNa8hr08HDjHZ/lI6t/m52v3ksSsJOEFO+pMLVk3PK9t/OT91P6hKXwtUn8PLmAVEuqha05IudnUvRG2yv6+0kiZyke56Rb+0BuRg23xxCtzQxcR4Rxzjqi/9XL4nTu+0LxhJdm/9For7qD0WQ4C3nijnfECUDvAx1NLvOwXJt+UzqmO2GDRosPWdenG4X6xLLE5LX4EX9Ri5JyqOMsOHunEM+YWB7fNcw+L6Uz56J+uYDJCl08f6lNL5pGNutKzvgB5kSHh84HDgFuIniSN14y/jNanPoMBfCsCtUPHdT8EmMathc/q1clEFmGKDYD1y5tEIIAACAASURBVBsJ4mLBEy9aUW4fONnCuyryc9GRbFtCcXmXeKtk/4Ykp3+Sc1PpXUaiKPyolO4IsrW8dc2iMl4JfpNDIYu4P4+kaGylyad8F6d+85Rb2EsAnUp/lKbfwjYs/Ob5Yz70Ad15vp4ofw/g3UW3VinJOLoX6WvNu6b13R0bRH38m2KmL46jPAWuvlk5+aLTHbes+UdPfMhSd6cjndtc4NdF31KZWMIthzpZA+nk7vT9yGivTvSGjsAH9U2XeV1ar66/7RR672fYauL50jDezUUe5otNuU8t+znpNchu5VbNz5XRq9zVcFHP3CzKxkY9XeYQd2GU/c8/Aqdf0z8vhSnJagagL/h0Gv/SiXew1kPklYdw+QSgOka2sYotmT1Pm2LOp4qGxGsbrKa1rlSKIDzqrXbYlj9+fkLcadbwn5c+sft/Mgf6YuxClu9fmOOarSQLY3PbK2xUhRvBU32aGY701pVgpjBEfeIrNNFMQ8CZYRU8WnWJDECm2w0LnjRuz/MQlmFlCDZzP5qQYUeDuvlJ8GnA55LgOMw5OuNU28id7Oplm43D1hJ/z36Kf/rzqXk64f6Edb87t0fx2pRvz11Q5k7bcxttnJYypxPyGyhfk0R7e6akQnD6tNijAOQfg1rS36CUpd8nYOu9fGsG/+mUTUvadEX9fYc8fR5pOszCkwSCT9oXd6ID3SEePNSALloabvAdUvplFSFpb2obym7T10j26cQ+tTVD6taWTj9FnLWJyZ0KGtCSONV8Rvl0+WyNLQWExsl/nxaD1/FbqjvTGn9eTIROaSeb7Et/80Jdp9CI1b9V9CZ87XcseLBcrEnoDtTeltYk0iM42Dhd09m9+9XbCbKrfLnwcjYeC130nbOd0P6lDLc/2pq+SJe8sWTbhkELPC+LOQLYAlH+qK9s0AszsfTxAAB5BwvfPmBC8gnQN8B8gs4nyHwC5IB4GFW7gkmhGhvdFLmoEyfRF49NE7ccA7R7cRgTOCuU8+v6Mf0oXHTbvLMyZ3VZC6x0Zy2Ted1SohTcp8WELtWzxAvkfNnlfPsyP6wqq8lmbHTiCmejEcchRrNd6iT6tgacey9JIzLEdktnBm8vTokGHUh9lxO8y2/WG+vVQyE/mabCNmY1IsB4egPIwBt5yhDuT8Pu1v0wAMjA4SfLo628C10AHUZXKoonfAMZYqFu/f1bh/NXVt4SlGfy+aPfRxO4mxB8K28ACH6VAyqS3B16IKR60Zf1WeL0GSI6VegTRdBEugADP2yoNFyv+rZ0kCYyOdtOZxN8VM3q2C3opNEQy48Wya411AlT9ZSpRF7yKm9HrE21AgDT7huVIX4qyR1xGpj3vEFmk+xfFbtVyNsSWU7XqV1/F+UlgJORd0iLItcYq5f2fPDzCzuj/GOCZxx4ytCbzCEkewPzVF9zuntDOR04qY5wVLJ7Weu90gAE4AvpnZb/Y34LPyUO4OfFtHjUUqhw8lFjbQTKjVwCYPqFCRkOMpChiHvdVer6wqmKkUe+bcC1xKe15q/mjI0t1rfEN+u/OXH4Rt/AokAsFK/4PbgxjsWK6RiLqmar1h3aKLlxsodjM3VX1SSHlf7dyAQhm1XKdcJlC6FFPJXT2w0+cTz1K+zE7lQfFUkpyMp4b2CobdX7VY88pR/yruiFItQkApX4lATNxslNUqxpnLOu0v7syaOLxKupyJPLOUG853wNRITuZHj03PwCrZWNzTrq1zyBIglRGYWvuQiAJ+h8hoy4jrM23qfzTIBDSYet6wXAmebyup+AzT7TVpEcvKpLqVyiQktHXKKAxuIki7ApK4u4YvqJZ4IKQRzwLFYjFyD+WuGLMUxXYGvXnZFaEVPovG9WaLJ5nhwMSv/R4xOIogu/PipceU44nvpYBS+57ZWOdAgGaRhhxGzpmPmvZFk1JLC5i/f4VIciTptb6eqcr2rWWJ5C2wce3yDmXSwNGyzay1RLe5oIeb7+F6HX6y5zRYRcr/W482nzsPP4VDm96SDcYZnADMvmOrku5LQu9own7To4zx99bZuZ6MoFy3ZiMCpuY8yBD0/XWQQZJP2RY1xgNrsfvFFXATPXsbV0KM+Fhsu6iLKW8AnGkKznOmYyg7fKm6sB2FR0Yo8zfb6CYTd5V4Zhm4ZhCpnHVz/F5kpugvqQOjXGM8pJHfLIK98YjgU/GluR/R1FE+i90MRv0lrIIi6zipANWhrv6vJ5hfdmFOxw/TunGLpiNEf/58HB9uRnJ+Kj+qBZQ3OOu+9lRWXuuo8KQmfrA7LtAeAWW/VCMS1pYwOe/EoLjQMe3WfYn0oPzZ5l0ugqiS6APCvGe4Xc/E70Y9ba4Tai9LmruMp1T8w8RNqPjEL16/6zDQz0PVhO1/f/5PRv7kDfEHmTyzxTkH3+L9X+ekHUiYF2sLqhJKPAi3sUr1qUCBkZYaRiMScWAliRhGQpgWQ5h0Pkd5RF/rA+MKByg8rN4LkhT95A7Wuqr6j6Cs2NuE1siA4oXADoAXGnucwJPSZ0TswZdzrF6SArr/qMCOFaDnJJvMWpS0OJhTSO93qzE0IZkjo3K7DhgCjc5TcUtzCLml7WXGg7zdMD4f7ohnFi9vNIh1HX3/GtGq9PkvdlhMKKYZIwdnxL6XEcGQaMjbfp+Da0DmBEkDdxx8oiYxOf/mIe9UxQBpVvjpCnN/g/b97ilzn9/CLwUSf0dkOfIeXgouJfNvTZqsqbYc7vJhA04iKmolOg7iINTcz0oPBICf57KPFWWi4Fh/I4SeKoYWfnmGwyK2CTBZ9L4o0jd1OMu/OChrzoIHSdVuOk2ZeeP7vA9bAxKb1/tXFlkXGnYzyMt12jS3unDjzKKbvOEMD5cUced7ObvtdkutsFLDy0PYIC+K8Fb0E2v0Y+zc++bmW4HSG7wsHZDLPzCYdsJFcfpZzo/F5w5rU8Cbz0jX8GbQyHZZ0I5RCXRPrj0j/BEmv2iad0Yu7S+/5T/OQ5qJ6Qp/kX74LXoo049/WuHRC1e00Po40pbtCbnBgAhtySBA7XIXoo8CGE7XPRZuBw+kToFC/XP8f64E5qioVxMQF8BG4DOOJMtTlFh47Chfri/IyQmALRCdHDojdg4M0tTqAe3ED/TLuHifesq898oJs8V+mc6+VyLYgpLVUqnlORkzxLO1FgN50LYinsJnbH9+7u80VdnABU36yY4izocu1FVlJ23ZqPN+gZ2oVojFxGwU+pr6mutBv90RBgDKOXYXal3gYOf364PTLJnsQwuqgT6Ei7BeGEd3jN3qOz/qmfZ7571nDsB64ceHnquIkFg6Rfy8t60dCh1V8Nm2Fm3pLjOyaSi+eB407ntShIejnoqYnuCR5umHQxcwyWv2rQEkUhKwTNozujn0DfNNy64RsdEmpNp7QtVYwMdz7o5vBwvptM85MBMny8XF/OiPEpCOcjxQJo8MT9pPbc5OcTlUu8qbeq1u+IhFT7RAxH38x+R3a+v8gvAD7EpicAquI2AcEIVs0Ga5J1YgM+TkbDnYrEVUS0elZqAgvvHTQJ+Cn0qES6bRs8kZQxgf+avcI4mb43ROtZ2C9xXQKHNf9fAD8m/sRNk8Bj6C6lRSnggOR+Gqgm+yvENl4oMHwf2RDrqO3XHrgResLkm6K2xWFMCJ4xMfCbjxcCDwpyYmiqnpAAnIbjK3okdFmBNawQGeXQpwGNbqdkGYac5HyJTQYovpVy9qvvIAh8iNsYTRwELBqRCIyXggIigoPglo42m6YIRG6ok+y+9OjhDCYEH8TM3EMFfC1BftEcbO9r6Q4JXtWYw7KGW+rKcYyeha6J9zv7zTa3mukltfGbYMo20rbglIyRdTllL/mCe7VVES4xGQBukvN3azPq8KtG5ADwJutTt+k+6HMKnRQjsxoRtc0mUC/r96YX7JuUfQLM3irHdNB7E9CR33kik7/b7/O1dyJyftfGMrvc8hQpaY5NDpMazoKnAl5yW5NsW2eImrydG7lmtRNtZNh2LSclWB7MaI9a1ACF1qKaDRCQmW4zckoFsk8N34zbCdEPwHzKfuZ/HhVn5LOR4bKteXcOJ/7XCBPxoQjbXfO0+YTgCSf6kujdzHIFFwM/wQRznr/nKEPxxut9Xzn0nHvVf40M888d3XzXufpapzvQ4z5zC81+YE7FnN4nP4GuOPJOdOh02WdO9Rm0Mp1upltxszb1YbiocrrUxG93eCuGw+LPc0NHkYAtGXIklMKFrZbW1o+KYLZBEng80IdWwxwseyF+B7ACxVDHCabJO9+xGbQ/dWAOxbyJLwFOiE63j0LEKMYt6oGvgyrGMBvKSRfzYk7bLrmg9UFVdN+W69t7qVTYZBXQkRJOv/ZyI+9Owi++rgzEvM4RmWKdx4VVAhRtrTzr38cE9FZ1uh3cBpe/pg1m41j6TDPYhPxqDYnL0cBv1GHPiIDyWrfg3/3Y9d9Kf7tMS7q0R/+Y1KNavbr0Z7a+a7jkY/3bcWzhyeugZK9Pz2ROVcdGohrztSzZK9R2DXXIJyH7bpXim36mnyZ8b361BqToMPO5LDHJiqchGLcbng+4z8VlTFx9ogocB2zm7BFG39xwexa8+0kBeYbqxPPHj5hPz8DzjWgdnXwbLne90nP+lfRbXecxllfRTZ8dSPKx27d32z6D+Fkk+8l8Yunf3IEOvGClW9I72T6r5W6abSdA209smD2eKzFx5CGDMIosTZ3FE3VayylbBaQUGk/UZAByKxh4QT70ZJ4gIgc0cMqXILBu12AYz2AWoC1kH9OclXqUo1MVgN9RmQ5oEnax2BmrYwHvsF1zuYgyBKoDeBLE3WyKqiPDbTse1kmqAjlZTHshNi6gq4OTYOLOt5G6SIstlF91N0l/JNWyi+SJQdrvH061g8Zgxg5AzU0JRTPIkz0yxlnpcVe/RSq3osvKqAAwvseTjFa81/g9gF/o6ei5GJmJu1HZWRBH3jxZTvCsPKJeT9YRvLkQNNxC5pNxiRNZ8r4m6eYbwbojotOzjs3G7hd2dTa4yKi+05uNX7mm2Qs4WOWeOSL4apWv0V4AtL54ILU+rWMiWXfCttBEygkl6Bc6UnqecxzOHxubTgZC0NDyXAD8l9fxK9WlK9JDZvMzFF2n87w1iqLherxjqfZC14xLZ3ilf+WzbdrovX9aihH7lLZJV7xkZ6w89UldXUMLoutCdkIlfb+jZwwMqIz/zQOYz8B8hh7P0DGgenN5IRUhZh6mp/Me9ASmVX+GlZrfsB87A68T0fNQ5I52VYgOjzRfCGZxob6Arj6hCQnTTiGeFhb48wxLf7MO7DmazD7ftocX6Ro5Vy0Vf/U3UVMEYRXYadwsc7Wr+VRXb1DvndLITVQKdttte9A2Wq29EpgtuCySAIAM/HW8Adt2GIJnsQW239IxEBGZBr6Vd4AAvzZD1vhK5QYRtc0kTqeHHLFlI2EdEguHbJ/46rzTlrZ+uT2Tk3GjmFBPXXTSZtfQQ5BERY1auKReEDIMz+kFoTLqYTt/yRE81CznZQNdlZOiD7ljV+QjXdokIcK6TpFrCDvSS1z6onrp5s6v2koU4OqOAVXCmYRc2cFn3w/1MdZwu3u0BtoAWo7NwCN8c8tycn/2kY1mOY/xn53KnW6bic/1riXHDU9wp4d3xvaQSLcXor9et23kppOZpPYto7hMiSqkA+7fSVojHOmFU/sSJ9PXu9Jl8y02XZzpQPCTmBPduQcZnYGr4Z9xysX7Pj3/iHkoikSnCmrJeGJiWDArMrHEnRFDgSkeKUVmutA1F69TCpf+XVkwdVsBrKitNjv90yStbziyNnxWfOLHmisqdVYdKUZa0xyKJPkKpgnVgSGVH8pbBsXpneaaBGnDhNrmlmd3cxx64FDgcGYebTW9vkoXpEXEgtwUnVwlBX2udbSNWVJ17pIAuVtIeZ7jPZEAQApGpuJTxYyB4pTKpTg78M1JZ4ctTAWNYfVYdJggHJahH5FOdH0yWTOK/7upFrTqDnRMpPOc58jLWJ4IF0Y7nUnDFtOedYPvrTwrsus6aFMoT7kySvzfNs1S5LQtMg3CYf530VxsR4yQ3Boyv5GkZp/jVHGe8F3mfHYf9kyRynVQtvq9vM9N0tcKobVn32+wDRcA9CkXviXyyfBPcb4hp/qiE082sYQh0O2MxHnr45kUVhmfm/GC0VMohTzTU7n+XansW5rv/1Y5+aPCyzQa6XSh7b+ZlGGn0KGaTnDz3WpTHIo6qQ7XIdMjf/V7yKseq6JfxVTwnbdXJnZWxyTkIm+Kh8R9GFdRT+kNbJIun1FNlzZ5Av20IQV0Cn1XPzyapJjumBOatnPxQxxHy40lAo+kZfI4noVlT9ILGyM2Mue4X3Uz895jRIrKVM3q8vuq8D0Gl/t5nJdr0ZCYMUBu8l2xeVHvm8/hCs5GVVayi45Un02lr1Wuz9v7Fd87Ra44Vbq2caX/X5Kpn5HKHi+bvjf9OzZ+J8kySLsIvWxlAkQtOeTOXacuyPbrKSnTXz70hhYbOOZDzAJkm5T13PXuPQBWHdT8FMpvzGYa2cogcpN9H8SNuAPA+8N5cUKfe1ScDSDXcK/28JWcymd3CP5zyI5UtOoLfL0r+zlpJ6oi3aM1T38CB/q/a6LJGDupm7DoIxjG0SndI4KoJwzbLLBrQ9zxvMKEDaH6JG67AHcHlKjLd1vazkp3mE//nbEDuZRbI3zxnAscC61DMEOs7oBfBDIFGju1cxHTT1LzYmY4FE6bGABVPxstgbfYgVwnrxQR+myHs93DK+wpmoCLcLmfkPLUksYETckm83bmhM4DehzQI3bpxskHMRkfDnP4WA3CfZqWNFFuGz+kHme/C78/3t7gH3PiJgNDLISpzcsJBwPA8zPw/PdrOw3iBvPymEPKPiqc4YrWF8BzoS0XCKJOAiZiOMoGtFenZda4PHqR76+ST5zaKb9TXd6P1l8e2wUe5tVmVMd7MrrDhGry7vOxVek1de0mL5+ulR8fksUw+xZ7vK6VfocivV+wSV0Oxqex45fE8UVa471uDVT8rpOMf/nUcHExJrvHTVUvd6ALQMfQ/J93SE/Gouabo5pPg0eoPZ3mRJ8D+mxh3lVHbXDLEOhS9gXrrOH1vagDSaZcyZUdi2ZVWvkdbtO9rp85W83UssIhwE16M4yqt67jwySYr9TBr5VEXzrFzZSrynv2p0KIHjJgpwAV/ST+Yo6t6eTgXBpb0yMdpUWuR/K9+IwTm78PgLIrL3fbWZ8L2iazzFIC8lf9yC86qBKmH1Gnf91t9LzPMI+kl8qv75m6whbuz7iMyK4O/qW1fkro2GN7eaqbYdEF/f7bvsdCs1A5bf/26qSZ5dt1lcVs4xP0AwBHcqkwpWQZ+9TF9gVrnBE1pwTZ0VkeHiEKcZrfT+wqcCx2xskplZUpptxwU81lH/VoNJXPFtWnmHQ4EOZh73DMBCxoWUnWDVfUeGkd0F2jvTK8CuAHz5cn0k8dst9hrwvJktg4/ZMCP+5YcqmtqaGkG6tjAuQsJ+7MMbWUmyCUZbHd2z0EkDEX7Jx5T4GKfhWAvWDPlSyIf3tvOUJM24DxSAqEoOxKO/lkPSwwFaqDHFrxdJO2G9d6m+K1f9CJD/PIcVDExg8npiae7siyYNAmonZMvSv4Qp5rhXmn3lfolLU+jgRC9r+I4CYWDWG6s7d7h6O+N1WdKMwhHvZZ2Hhv/P3HtDnjvs8CjWwy1wccIcOakAxDvojdaxysaCNnQn12+XZlmsRLxUA6ElNGopFQ2j6NjhT6bOtBCkAH1ePtx/QZXA9deYB1/h1O0HCEIn5HHofP68hoDtRo6rmwg4FzhGVgQ+uta1tcWXqyvsXyWltLcKjdMSE8FzyNAgOyGyG5CMq15l87FH9XeuH8rCTWPb6MFCfhI7z73koo3C+bIqK9qZkv/iL8uo98/lc2iqZTPRzjSs/TSc+/wyEfNRMt5fAXgaNleiFlNLtPSdyG9McxkmyPMamq20uK2EhS8kyWKmMrmQxbA+7LusXvgTvxdiO6KU8gMyrEy517BAP/nBSd281Vzot+G/bR0gc7lRf0wusJV93njf6XNCa9rXj2AX4O4FNxe08efE1/zrQo36v5uohHmntt9WudJwMFbSIA1unq13Ug+bDku8OU4UJ8RjaB+aw4nkNTuK9mbpp+VT8uPr+mF9NXB/oflST/Ia0vjzmkk8nywV2lJSujB0/Hye187s7zIaC4Nuc6B02qsCyPNKO896+dPFeYk3tOC5k34zSbW+e7PvnpsVxIirky392SE2FpoNu9YxHmwt8NC/Ot4SRlBb/pu+Y9r9aIDAXGLeGI8IJimcvUumtn7l6GRUfLkLtLSR9MhnLpRqAqzbfdSD8OG4cZkQC8ghHC3M5UmGwXC20ps59Qz1NSUs6+mOgxTOGVUAC3J5+IaZt0fZx9Ed/S389zJv6e95W+hVld/vutAB+I2HnyneU3CjA8J1LrAp33pIV7PMHVO91frPklJiXxfBlznlnwTCP6s9b5QtJd3fm78JM75QWnawpOZYn39F4e+rLa39IzYVuZbvD4SKfXrLoC11PeZ5onjXT7nh6ca+JFnZDdG5a/hHHNF4sV3/sY/dLHMcOc5myRQrFWzMBt/YrN7svXJFk+13cv8cifMbUJKV4m0yvctfTb+V3meUeNLUg+8W9EVWFl6SfMjwNTDkA/wsIwDqh+RIbdlLhsg+SUtMrr9139t8iu9fsp+Yo3yc2Y5BsYM0P4gdgtFklaI8rvUHJ1B192aJEBOA/PKyTRq/Luyunu4e4dAEid/j1FvPVv9VvKVnyRV70sI5NpIWQW21VhLgiMpFJm3WmOF7XCVmvwSv9cbdC1Ls9TkhJUrodMNxNBcZPRnjH9Zih3l9M9oAi17hsPpQFW+OaTBrXxiaEnnbx792Da5+zYuC7lumR5UwFB12prbCU3qe6haI5ePnh/AVEvu5CFP9uhbytytgw9sh7VU4mLMhUmFShsZdfpEyhaCrP4gMAvrLJ7rdNIIkoN8tFiJ+tchFmP8ag+r+JYXHZOtYOzNxTlQyusavT7iLo9n7LNgXICDA27w+CJk/X5p0JUJgkLRcHfprBHf/RSPy/vNeBa4F7FejrRFzm4bt7QvHaB6zYMTbWTqBzqXmGbAWxsNXEUDaS/Vizco6j3WxYYCSpJuVaP8yoyKtXUrW+Yl/TkFdyVcTRZs7VNW+WULcW5nzaE+j3x07MHNVqlazSFpvdFKcd6PtU2GHz0y0YA4FDjq0PVr1MwQXE6VesbKNilX4I1ftJG8VsM0qowrJw4PPWOGV+BJy//kWXoUtdJfvTehrwv8biXxcr1ivoVI3Zf75PccJPCY9hFsUhbG1ueUJH9YvAFwAcgr7IoWAW/AXjrayEBI611nLoT1wAJBE/5auK5rlpY5Sguf26SLqqKxn8r3BtoyHUadij6uwiTHg/00LppCnb1QzpQfUrVZMlKigDybmtoyj8ANS0Mp2hwjYb+yMDSsAgoSmODjBiY7BtRM4jUGZLa7LLgMvGyIuvWOxSOc+pDgpM4ekRbRyLEtvZ3dazKlgswDZcwYx1cNtPOBlD69L9GGJHeEeUqFB8C8V5RucKrncrNb5P+nB+mKjmGpwfjDKe5OV0iAkGs6a0O9emGSt2pznymBOMFDSxP7q570PfdAa/ts/yXbGQJHZWsCWaQ3CCAChvPG04ilciWtBVMd9pfrbELeKSbFhX4ujkSpnU0qyOlX15D8f8+SUuwsXN7ZcP2IAxcFoJk/fFp9m35Jf05Efufk0JfrMN9yocmT16VLusm+SQhW4JfnXd5IvaZSQD3Ny0Gs8B9XXY1hpDsTl3N0+n0uzivTEAPxfOH2Lg37TYZWoa7TFe20N0yL+mGMna2B3sfTP/OrP3Vgf5HpFz4q4ktwItpryOpS7WT87fl7RDYHaXwRWa3KEcYGHHvuDlN83Q3bCJ/GVr5TirVWbc0apyqjnCwcW+vxue5M7ZQtEx24H1kGbj2WWBtaYXgBCSOANTJe9DYLFVMPazogOEIN4gedio7d9YJhhvBQAlHoYWSDh8bY6vJjRJifjf8J6c2F+Af9lKnT+yOg5znAUPMGG2irYMcGDzJFt8xlc7xGPHqbtyXnkaZALg94f++/xk4Jr797i8+SRAPF2xZx3f/D+acwPv/CQSScR2P1PML8M7HUys71EOMacBWMJ65yAuK+MkPoq/J2ZU2onRDk7NUWoGmuu7Yj72Invv2mhRju5wcqllL/Ta7omC2LDTRpcR9PcmGezsA4Qq4nRSiBl7S49cP//i0X8G4TrJ8trr4vfgqLez0+q/wCaNP/kTSiItFrr6Qq4tuEJwXVB4BdPm53fCBM31/hij7c6QNDz3Kx7L+IMUi7jxnRzB/Sq/AwgnPYn31kNjzAMaz+aJd7w4V19kH0nLXZ28/Klw6sXovWGZl1kUOnfp4BweLyM6llPTEhOoLPHkhh+uALUbNwzaG3ULV+dnCD+nuAN6m5cOGxudNAF5bdmM1tJfxfM3HECuAm1tic6ll6jOeH9VHL6XTZgQegyXrLV6Tc0IbkVA1G6aRYc4PEfz37RtABP8jH/EXcfsVw6szh4EM1zejxtROgdtplaLPwE8Q08ScirxPlh36AH6ZH6HQckoJNp6x6leY3UzQzJ1Fu5FbTmNJWOw48a8RureZj3fHdaVtQbdXSXaJT/BTn9iruDOSK+rd7Dz0e6bVDovpDv81243yZh9Jr9W+xo7nnuqBB+9tIk83AyjhZNbY+SN4FnNdHMqFBLw4HPV2rrBNUVPrPndujpecR46yQjyw4C1k5NQ05+OkbwtlDqNIdR1RQPhm2KTZuCE7vhfrjHAYosbCxqsvdAfuOSmA72EwRmj3EB2p02hI0m/kVf4NwF+cdHmjBuMl+NC1Zce2Agqf/ymJLSA3AzMIIRINp1Zb3anO/L3ZgMJdjXBO8wAAIABJREFUIWZKeZONaX7PIPV+t2INjwJ5h3MVvdJsXK14eXbgCjuAbFsAsGoX9c1b4bSXfNykXiQ6/+ztTcQNZIfC7rVVIVxNpznuo/R+J5+TzOJOMl8zv6Vzf2egKPIamQ3uTopUL55vOXnV6Jt8orBr7gDIwJPUvb5FIRPTF257vR/BV4i05oUNKJL/Ups3rbYJOc0dLP8QxRDBwM353cZrqN2zrrGZ9wVVoFu8o9sMBVCrs9Mg/Zr5T9K31gSpqvF5longopmYslpT7qhk8EYfapOZdWJ2LH2ZVH9zoqczPDo1M++KtnpG46Wl8wqNs3BxiXvijzWCDkju+0bBm2/s17yaJ+CQBg7XcH4h7etLdFGZmIhk+V39Ybk6t5PQ2lCBxP8Z4jxVjveJVxEOXYysp5zb5QyH9PvKbdidhiY7z+P0uUXs1Am/M93qNp6G35teoduhiiPuMHd6qx4RnfAQL7+rI5WjNnRQmS0W1yrOtBpGmUm3akMgtSyeGzViTIRKSNtEUNUKhkTY+g3h5Xp27+wqZfuhFNpsoPXMO4cSEBcIeXX6YhU93hQj4KR2oq/ElAniGZcpdFa1Pl7L31FdjP/X9GdKX3RETwy8b2G1rbs/63MgcoJ2216FnkXVoQum2oa86XlMraNfBQvUpMQOmh7PfnDFZec89ErVbR7sbNA/Pp2WifLFPxuS16evDvQ/Oi0LzukXe8mJXhYGmoHa6nUKzLlRVG6OcUlDLQvl6XPxWX4G9AthEHeRZ5GNYcSNohYK0lzOe7hRockzhHvAE5/dALL7I5B5mg7PT8YHGTnzZn8jjHoxp3ALW2/fOexf1WRLSOr3+o0x7QS62uSafbF1KFkR9jiHUO7DSwapWsCl2nHpZedh95N/Ssr5BVuLmnSWO5zb5gWyqoaH7rVZgvVVha4v9Y7rLNwGrQ2UQXyCSwHxY+rRN5emCjUnzqkjhLgBiJ8USAesjBW5VfYbAP/wKtghTmHXE4agoXxOVt9QUnb+LukuFNoKw2p0XnRtNS63XVlmdDzpfKksN3BlkDLhRZ/cOWvDoy1qfay/tDUUXRfQG4N2mLfjtU6uOc8jv5fagp9fMsJzRYRlZ9FvzqkuJw8rXum30l/+XmcRS1DSQMPUivzBk5vM5A+TjEOeiT/WXOQ9EUZOJu1zL9Ffac2sw717/880kL6TflJ/k6402d30qwLfvqCrX0qfWryxiALyrnj2pYhUrB/97mLBKCf6PIDnkuG2OAP4xXsQPBMvBf2EvCAKZkdiPGtf5fyM6bq9lqVs1K8lx0P1KADhOyLlXH9rVhdHJvhlb3OF5RPSp5Teltk5k3d0fJKxq7y0MjsLo6mlswDs6fTYEZ47CaWPB9lMbdxDNq7d2yMBSStkf/wIINx2vZ7CU7j0Sl5GF0yx1fU3rtpH/c6Tqdxb7gctwPVJetiX0Z6f1fRnVsUgVHY+aChO3trTpXi9Im9wG2bDzXlEMKeel1hkVxc/CvAzt0Q71tcWlFroz+2Jcpo9oGtIfpzNmr2hc96vR/gPWeHP76qiNfw02eVbkFPe2aehWTukrm+F6AK+4CIa4eslQwAf3ZAyeU1l+d7prD7AirvWJ9wRI0inVRZQP+GuGa1siJv8sR/WIA5Q/TNOOPt3CfsqqHw2VA9Y/3yfNoY7kab4uWiCSXA+rZxzKXJkBgagwA/++6dCaZYkxoY5+wv2v0Hxo0g/WDzgi/5xcl7iDGa6Uqf6uUwpumJqDBYbuZlWEhb1AiNA83mSiD2TwSOqTVzGt6rt/C5IMDYuVInIUrInzL9V/a0aQjSwF2PvfQnbdLrtOAIPAZ3RmzlS4eLsRg14nQqITHzA8KllnGSX5KdnnXbqfA7kKVrXE23dcVmVS9JyG/fs8I1Mi35rQky7LdDkS62lVDjrjsn+HkU0AmRkPK5xAbFGb5F3qTMVUMWHeeAmk64NqPla3BesQXhQQO20+gg8B72IYOrEoRPQD14uFnQZET7uG3lrVRoNsAPdYKI1h0SZEI5vXjdbJYssDliUPymbrmWWqoL/1ixRVTQt1dPWw4RByoEuvdlWXzrIe11AyJtydGbfAFtwBxCbUnjZTnsly7NweoY8DIdk9EA3lVAPc+76jAjfXiW7js8q2mYM6XQRQmYlbqX3mQdrwVP2joXz0x2WAo+Bm3hS/9Y4JF9H2STV98Vb2aUFZrXNRC0kv9Ozer0TE9CZ+eaMU+OHn0SP9UB3nLPzPE+je9moP53yO+c59YfWJYrWvNe8ZnEvUf38CNHfhruF+YoQF3Fqz8o2qn4w1eUd71SrQJLkgj+jbc1rx9QU+AEP7R4b9hxHtCF0leSBw0IaQ7/ggf7986QQJNR/AXKuxghLZ+CS/GBHlT1l+HKwAo3O8/eLw7IF7Gt6Ka36luXyS+vNv3cim84t++us+S3oYEcP3cDU3fNWofrSmkJkYgz1EOxa/MAVpWLx9QudmB+BWqVRzGeUL2IF/lG0noyfO+/PnXpFQ9dVXOuJf+301YH+R6Rc8F2ep07hO4KBZSWI6rnzmmbDtQ4ZDQzI8N3gHkI9K2p/5FiGxAV+BR8AvVQ01WL+neSqG0V8/3m+3wjdDAEYRlvdldgPK21mMOaFRq6sCdz5rZBjlhN9aNvdz+CmuTwEkAm7EzZ+O2SBjjDG2EjVWNiIpQXKnO24gd2MRgDP8/Mc6GsI+LBN2yqJj0XXBkWvEX8Sjrs5zZmcd8tTnu/EQ7zHzP1CqSjwf25vML6zk5P/8/yb4e3DM3CrJbSbjFqoEgDf/jeeZOD45f/a77ffG73+wy+G/u236if35RsF3hNd3NOPnMJRE7SRFnez1rvR2OrbKMholF6dZAIbqetzXoiR5d1V2rVxggtOCwCHsM91LKkwowBopbC6oxxydO1AGs9XBsyXMKAvhOsjqQnfl8ovCNWFmNIIcoRx5ANdBpc3LGxpcjFY1kgACojvZshFRxkQnZCIDmFLv1QoPvl0zSOpjNHL1w3+JaNQRkbh72E7fS+20v29AH/fNRA7a77ZAejvvlRa8HDJj48VbwhToN2DmQVKbomamGQnoq99m14V05O22eIAnhUYtvhZh6xcl8j0DeXi/K7V1pVtzTLrnl3+CD00XLh+j8Yn6l6rVZ+nrLaG4g50dZ1tC8m2eStOtJ0Xs6ubDO5LQ/kpkm0n2nfqip/FUlG7A13MCTQgdSei34b+1nX4r3pgOUrarJPX9WBDBOu4Jz2Ji6WnamMELa0L6JJZ/nLze1uH4G/yDAD4f/U9gIG/pI3DWItY8d6OT07rXCzwTt+6Hhd8wNFkmcwR0bzNLzRQp81htuPkbssyTb+r8+zPVOmTqw3Fwafk7qazzgofk4hgjLcYIngez3j++Nu2hm1tvCAOyelA8jo/V0CH8VAuJ7YVzahvNWw+R/Dv6fLsRL9KwtAudcXJaqmcfrpJd22nM0/OZgDQeUn9lHOQc0ZsClsBOERK5gZ0tCE5eHW0ehkGKRabJqPXU5ZQ8ft0zdkLTDvhO7X2vXjvQ47Yhsk4wew0Hg4g4bxWQTrPPffQ2H9rtBIqKQOpUN94lHjMTFr7LErryQ+u4+JEugZWGy9WWQHwN1X8SLQoM4aj7JOJCkoeMKxmjsAimoSjGBAcTocDE8EZ0e4M2H2jwnAk5Kn8kGGu2ztlMsWONKUgvDgo9C+Ni+MzWfMlPgnnoNMeR3EwEa25UYD+8Y00I6ENnlGZOT+Mtj+iB32v2gVvMfAhnEoTOFx3G71M0CIHTnb1yoQ7HRYwH95mVlFyuQsx57PWpPixeW53lW+v0J9zKSPrdwI+5mt+OfUB60oUkZQj6AOub/E0BLeIDXECT80OnBPpkef+qNkQmRZCyiUDl0exucDsj+eSEevYRPUKWG/WJLTbL+Rlyc1oXE9j378rJMOvF9DFWRrCJaqm7knQgPNGOkqDNM6o8qFSkj72UFGw1kah+uTuBWJ25KxUo1I+bjvLNLxv9K+uz9c8pRNtY5YAcb2NxNWIC4CtLL3XNd8Fv6x0v8Kk998bNsiRyjhH4Cc2CYGcrj3qQi3ya0dTRB1JminHto0Fh2Q3p27cUW4O8sP/bONKhSjvzvM4tR51p/NcG1Q1/rk5g5zrDV+NKXodS1pDwjcKuSjbQ8i3AVlq2DVY+K5rH2oUeXJWUlrysHNuRHD9YU5yVMDMIRlBJY2J6EOTQ1vgoxCYOL+cEyho9BV6Y1tN8P1r69n1o+RepqtDSxBDMgurnC/hrB5POP3ExEKvPf9S4/I1fVJi9PtGYAWpos8ZnvP0AFs68snCS070c2WrpW+fVXvY54utuAhInRZNWJ8PpA+MN1+lECUbXiV/V1wnRd7TdS89itNPzfcFWerhjVv/IumrA/2PSidnpizCpU+ATwtxFzpVs2wZBLnj2SeDIrZLUabaxmc3ysJZbmCsd4KXUDjTtnRY9PR26Vs8UBIg/rfigStUgMymNA6p4w6G9n8D11MBfY6VCreuJnQMjAxdOz2Ep7S6bdHA21YL2TcPyysNR0DeURUawbs6afHBRkhQs9oyuONEeNtEYDHrTph/KGn0fVECOblh45ngiTRjYuTAh/k6fAOBzJqUD5so58otH3XieVIuomqF/gIb/gFC/bYQWfZziF81kHbhDZAKpXi96UTMif4rdb0d2UGjZQUtPCQ0G+bLulwZbp3oWMpRHjYk79qOy6Q0y96baOJsQL+0q4xIDy4aOCRd2SYObJtDLLJrC5BQX6X3OfloD6G097of66WuInlpr88GUX+7hXtbbsdD9KoZUTH5oLrzJLMmPoruQjZs6mpNM97pe2z+4GyX9KX7d58zf1vtzvX7Z86VXkx/17ov/pTCaf5fn17/lziF/tkpCIN4KT0SFtLOJDiFofVwwQPTHGz+fELSmQyxsIG3ZCPTT+FwGnEiRmKhRmDHFhmuzffGbnJ+zrKfTkW19yFvow4OJR06j22T9lly8EwWG/m+pNeO9qdQx6e0cW+L3b6f9f3jRZ2Grk/owc5Rmrp/Gc8c12ekEz2y8XCE7cYQ5njW3w9w3U33lbc8WqQTDkpzNBsXlN5j/aFk0rjz6YjFRINjOizGflJ0qaDT8YT5bGOR2dldSQe9oWKjr7bkWnVNN9UGBDcRzPVsb3P4lITYqz7Ky2wbw0n2bDOr6IfmAsbOdNETyax9fJk7qVhkPumYfn63h8nvuQA0G7BsiKq8lUoUxIgt0CoAKYengOYGAVGaYWdbgSklhmFyaUGGT+dFdSu8MlTUUzQh1K/4GpQR/RIEnUiH16ufYXd4BXESX4B0nofT/IZwtEliU1BjwpDWDdlm94n2eZoVMJ783n/+5JWI5g3g/QS1FcH/Qu1edYnT8lZnRtTPEa8N7tP7s6apPYixTt+6IxW6uTv0qwumR61SVa3T6GyapfiUzIfE1yJjogitKdB0lcrtSnXYmO5s77gvQzqZTgHE56lmU1SvZjhxxU5ayrCQ6x/dsSpSm+Jtc39dCeYuJhyqeFaLcQGlJVD/Z4btcSaKkzghJquP0Anoz/pvLRpA8BqQ8SYWFJZ4jbHqWvoky9r7ovUz3xpeFRMYs7+K8Q3dknNnc2ZIhLXQj3iWNzi2At8HWT96U1JrEPlhYSo022K9ICRGPkLwVBsSEdfcIZ2NNi+a1M6TcVzIJh4g/6rprY7yhUMrS2Hol67FpofSWNoMqFV2Gl+iBPDthrrOQ5uD2+oS0lmxGUlzAbwtvfu71fEd79p6UoMQC71pnlYP53/vOuGcBcpuztpwvdyBnrzctEW+A+A3QC52SqaF1ni9M8l8sYfyWWF5/a6n57vGtfFgObdTYyLHM/CEMx3luKztxPpf8KbXHc7bdCYr33de4danIp3nc86qK4aMHOgt5L8WFgr2jpmCXRv8dUoeCSNjkvXRLp0eK7UZ/d+OR/BC8VFqMQ1ZQvW4LTypRyXhS8dJAOV6vhz4RBtkF5oo6KPJEpf3kLbDWmrllpNIWxz9+ybHQlM/zAhCyNrJkdX4Fqpnffel0kt1KsFGSdy+++po/7y0DDd9IHlwZeB8vTx41doDlb1XjjfJ7NJVUaUvp/pJo99repqOniboyzdTQtBVzkbChSANXTjFoiqfDAHpRbG+vwNkM3ouvq/lP4dfUrxr+/3vkL460P+wRALEZvfnLHKSPI/WTOX4LgafON8GMBR6HJA50phLJzqkJveCdBAr779/CaZVBuafCU/hNvMPKAMqGldE6PMsn8KCjR2f0rawn4t4jK3GvLApw56LAGO4U7ZNB6gTEcZcc+JgRWuSCla+TXgBmH7qX/qrujtpwQeF6rDLWq+Q/UDiDQrAtd1yFdou7luOg6qqyJVZVTuliFGTRoXfW9RMVpQhpgC+B1Twyzzw3bjZxPLjR+AAnr79Fs8ffivhSsUBa1p45Up43AXt3ko2cGPs895oUL7ob1+J2MvzZk1W+W1mUoDZBpv9G6Nzs5bRYLzKR48u9dBFuZ5HW5vrfLtPcHtj20X+tcGAIU6qN5gu+G+b7uV7oY4dgtZNJp+bTtV8s3nx3j5+9Z/fbcpd/f5l18anJv30uk40tdKGnh6XLMZdevoiiU+efyvm9AZguH/3QuEHnOsJ+ssnO/flPiePI/DEbna63BwV5T7PrGr2wG3cYCGjBVPFw+q6G2Oqhdp0/fEkAsWBcM6bKA+tDnekbyagyVIbI3y39nCem/T3mb8Jnk6HYc8okMeFB1AL2UBzo8TpEbwc3ivOMX+R4XtFmc5iBWVsK7z57+clH+i5piUXSQEMHPqMN+MNVCY+6J1Tz4/wZsh2niXLG3shdKIsjMnWsWeknRAyIt5HtB/v09+yp2Vh2r3mApG3tCnk2c0ro2kZPgtVAeQGqOCtPEHA5yWBm9KVMGkHGd98gME250fEPaXfyBuoAO/1o1U9rM00M04DK8sv+/3WP43WAo+XRlsQ87ZOKDDnRzwL7N7g+Vw22qa2cxVl257e0SvJE7KL3S3d4ZQdW9X+K4T+GZXXRs1OvQTwgt0Lad96aOiIENDtnOa7YaM38KNr/11+qn8P/JCxbDMAHndNno/AQCXLS7YXIGIndbnhRMQLBkacYuZNqkA2yiHQy79rkUgUCpWB3DqghYyhmiHQB3wfs5cvXdU3ExQnAOrhvR1EBtdzBE8fWeYHAD9pr6/VTzD8zb8MAH/16uI+w9nwUBWYE92d/iKNFWVtU4FD4t5gTSez6VH1tjtj6lTfv8ynx89DhsL4+njz4LHFPk6NajSibZRsG75xweRvNZxR6uY0J/q0vB+cho0WYsyF2qL7fDFwTHOgK0ymjtTZoc8P2iSwQUPaAowQ0k9EGcnywYsc3t/tG2nltNenlbvuOuP2Vjh3MHHWnfzXElAt8pDzLcTvQ/coK+rrtfPoh3Dx4dzmAoqZUJNR5M/J6dR0UMHyrMANgiEfIHjy3M8ZfaFaJmS7zXZy9DaAjDdSkWQWhUbkGN8woKudmJ9d+yj1QTU2Ji0oid0iahtPw/FeTswQFKQ4wumZOOtXVJgaKOd3qZDCrWZOLtcD3JuTkUQuOUJ7VzTXZ7KzSz2VbvU7P7qOTEWU64YuVKOTK/mSOcG1nD6bkuvw9++McyUErGX8XpLE5voZ4dXfZ5mkC5c3NvxVbiE9MntnLruV83xmqXCYq04P3R6n0Cf08O/EA4q1Tx32jg3OTb0k53vgqJZetTOk0rMdNundZboo21/H2K3PwmqsSKPBByx91+TmlmkUb38qRw2q7u1EN7/PPUFBhv6ZY7zSdDDuzsT6rLSj5Xu/L/RgjG/bNMtyKn4Go0v/fTbai0ayz8EE0c7c4ImaP8mCi/SefzxS4JEBWDvzNf0RKedMX3I80lDnhvT8Pdf/hfhiB+Q9elrsiK0dLskreQ86q64UVySHG29I+YDaxv5mzDEQF/24042Wb5ORH32hYUrds9b/SPricvZ16asD/Y9KbDikht6k2FEnkn+X1W3K+Y/6cCFhCyCxQ5LK5F/UEQuI0hg5+PO+ebQBko0yFhZLvjCPlNtVNnd3ZqNzU7fHomgBEOEwfPIpEFu9ORS54z0nolRThHMSuhgLLCzvWAIKMirouSw4zPvhA9bA0WdIq0thqtfP+etwuPIIsvgiNMqJPtV2wQPAt3RqajLoPosPXDj+v3HFUpvsvf/PMQn+BeZVRH5aGEhz9FieDA7JFvTiD9UaT1VyojuPLQsAGjADqM0lO+Li/q3PlDZIRMGNkbA68R/UTplrZ3esCxqXVuxVzY9rpiZCEDyx9pGbvpgwc74GywbCO3OEKvlSptOAfZlE498npLvM3zgkPkP4xWgzWK3kGn2GHN00m/vf1SV1yM2UJRcAvwYFPAFjGO+Woc+VXpmAmm78HdKva93hRP+DJlKfPWdQGPzacCsiGGohp0X51Jn4/y6jfWVA0jnh4TwR99OGtp0Wtte/KxQiY7kX0wDIITzJTJKnLV3I1t3vXfcbG2/qFn+uvZxZQJLhhJVhdmeQRB2t2oD1PnCvHdZXSv2WSg1dyEucMdPQ4fSRi08bK+tuYtwnP9PVEGxf7uT+7veqRuTqYT37MelZNnm5jXKghg+iSHgdbxQCQxQLasFdqEjIedqbmXKt2SMEipLtAmnitYOwbuijykphnGhgHsA8fmvHYuVWJz+PQ/vpnTWlx5bhrt/izoIMhd7AuNiEGKIgv96RAT3jq5Ki31JV1ctpGFZ6yTuk3bT9/un7fPf345e9WR6nv+8xW/6uvBmIvTElEU2IJXpV+8+KBqIHsUCf7SSsd3Q1I0RkwQTbUyUZ2ayJ76oAhl/tkWao+jjU4v6EQEbeDpb7b9u1IgFOSiXmYHW9tfRnEfXfA/g54aZxFaA2aCvUT4irAv8L4C9eppbyjRRusLD3NmLT+oE6jR75+Fx/YjE3GYDCWxu+w73CwcaGSETmTpVaYx/96QJDNoQZmDztVz1nqvQKfgvnUYTZtf9NvpSTG3gPC/cekQjipCxk4A1ggb0VOBB3Agumam0GibULitpQ186cObrhXgjYfLdSr0Ru5Ib9+KVBibmTvHRkCBcOLY6a+5X47FSsUIge6DAHzoTyARnOXPkpXX+3EIiFxZ9m0Wk4z6eLlY+Jl5JV1/pe+Qq3BulTASTPBbIi9cYBB8nj3LCcqBPojru4E1TD+U0HCXINohgtXchNboZyocstZmzc47JUhIdafSNo5KDN+jpM2kjswdMq2yym6CDJbXayxyaMBFWrSECWobYRPNXxz+0pUO9ZT1D/IqVNv3vZfp+d5+2sQmsBZ7YTot01m9KvVuHG9joJogUPHenovT/jjD9rZN4jwqV3/NX8x9qSVscKavllZtL3TGd1OM+NbjXuNQ9HOuozvidrpPNbyymfjnkaf73ovcOy3umedKDnvmwQvOCQ+6v9fTjPd+sUK7ltHq4bFao3knxh5sU5Ck3Y8ilBpcSpAovZ7BsbfO018g/fKGunPAEZmlfzaOo0wvTeGNw8+zdMqzDJ51qfy5ygkoCOzdazdv9qje02sU75FMDPYmDTxk7ufE2fktpQKZZ51/k7Iv9r8H9a51jkx/JNA5BU2HouttKw9jrqAU9eJWrfvIsiNX8rgd5lY1n/nqF1R5I+JQQf4PboALTswodT20xAz9aBuHJuv7R56nFAvlA9//z01YH+h6U7yuKFZHx4NUHe5UZZEGYZOBPffIY/+zVTLkRs8usMmjaupMGiqzDZCLDYGJ16bGoe5O5CTKvMZY1uwj7IuFmPFrztDij1ZY+8Q8Im4RVusk4faba+aXs5sXw5rm1XXj7c1DlPeEkB+ilJAck9/kgjskxgyshkGeMzh98nO1GrRqNWiFYnum9QiAVBmySG4oq6v0tAbLFM8atOUwTyhOd//KPLcAC8nPd2xO2u3sDxXHfeZqOAfAPoM1XCTmVFOdE5rcMDlOINRmgzQK4wGhbbZBCLc55fV2Xa6niZrrPZFcaHSMON/EfyroZEks7ViXzKvqNT5eebCfMu+wNg/i7pkwx1KtwMEz9xvqnvLOO+qV9Bk/oeNTlzrPBkZqUh5eZD3tlpg2WphdJnGjCrocewrXQ6lk8O/xWMteO/E6996RQnx7+5m+s6fSZcJyN+efdQ9SR7QOFwFX6qzzfODWn6vI7gVcjrm7uUbS2Tb249zPbXo8nkWNCYKeOial9APm0QYpiv5MIGIVeGwYKCnkhuG7A48ZKYTWUhurU8OtrrsVLrYsA1KK9J9/I/Sv1x7pK0Y0tv6fsHADfcLOwtBDe5NbuuLLI78uHKFuNDd4muj6Dgzf5yGdD18fq5YmA3M2fwIkuKvnKsS2ykdIDVf+emzfDmxR/rbu/6KXJjGLyK1YNW8DddCPApyl1HziR/RQXrczl/JxPFfCymI8bgk7N6rkYEbVWS7KBwkqeLNYyUyy4FABfvmm11nR69wY7bSTG0sVGE/u3P6G04ZATQk3s07FvNOUWcvm1solxKUU4eWULFoxPYag9LDUdEQGjQ50nOQMBOsaw/tb4P5lNO/VmL6hwnABMHA+on8SyT2SITwCG2SD0cTB0VYt1uSSj4AhJxV7XVXFtk6n5yhrEbId/7t58d2AxClt23U+FTNE/V/03Fwrr7aE+qe3gZdViZ3MXfheg7RfxQ5F7iKcVediJf2h6jqUpObynnuWpuVN4lluLFnwHhg+meXfJAIYXiF60NaiKGi2PaXFvGKHmbJdyWUMWhgkPt3uCwF2sTgsPku5RU+doIpvnIv3IzcB3WjcrT3e693Em4X9genj8j28kpS5dlJPGV+hDvhPKoK5pjnqqOKILTDwSI2rV9VtXHDmuLFnOnW4vMNrvvtxBCm5Ih/zzyhPhaDFeYY1vfddKmANyo7hA2O9lVMOVnC4evy3uGMfoi+UJhdmALE+98BymZ2x2ym3PCSm+1Tp3lJkWaKZg4AAAgAElEQVSWu9TGBNe9dtM1y8mx6Z+LvuuOXpNa55k8/+ZNsWuHjJerrcINIoDjENtAtarzRmavkEPbtIM/kBvvfkPSGACboXB8JjoRjnCelwxK/EdEJgXiihBgxWs1FWuNMfepTRYRwt+d5tNPnIcjfU4K666+8aTodqJTGYcyf2ldtGAKWtdWN8N/vzzxYH7d8+MjobCvsyxEF9eFpaNfcjyapea4bmvKw+39WN/N8XQZkXfdm3KNMoNk/JwK8V0zEoestHT3STjekad/eGIhlTgk+JWfU97A9UnAOS3whul8t6ZVp0WznysP1vQvjP8/cdpaAU42fX6yfL8jex5v+bqG3N5dwviijk0PdOXtMMh3+QWNR/K0uBRfTSBPF8YBwpRx7R4ZMOIE6JtjdbgMOx5D3i5PyoHAySbT78lK/8Zs+tWB/q+ciNFr56Fe6pm7cxjnU0gZvDp8YhCz2mRWOQs74CTvzsbCOjHU/Mi1t3DkpNIlTb4acW6h2Mng4YbthRMbHFaNn5apL9mW714Px4ECqm5Y5fbatIqoXxeT7RXpOentkCSKVqOiXbLt/Tvl2Tf9SKqielo4bLuaT2Ar/RHcSpOvXBz3o1aTnoktMmiUTbyijDMRX5gK/CyncFJJxRKD/dV96N8D+AUyfLNDxoQUp/V3kPEeeoSlGzvYY/s4gG+1nUSnGcmCD+m4ymxhHWTHkJY1Yh/7qtxfGFDd5Nkusov/25+ddrE9Qj9XRmzwROMPKhN4d2NC49nWsKBPai/vNc+8V4b3A914INvpHvUiyhNsuzp7+cigSQsRjrNLpOpT3DitOMusq8noedKyS6UvQn/UpHmpo9E7yYG1atGlPeKLrOMTraCFZRpsn1rnH5pecsC/7z83avNVPHsqVGNY4drN1WDO81A3hXiNjWKst9zROHLS4VJFgAhdaRvQ4BuFjLgitHEsFg2xMhMLDS0Tg1OfHxz68h+sTu1F32ztk4YuQGpZXL2/rPs/QJoDelfrbjhf7MMXyJfyaFFhJzT6ag+L8W4ThNyqkMRrRe0OV9br6HJSYwyE2iA90auV9lGw+sN4PlyHe8U/UoSkn+QZkHIEs1+6tpN4o7EXcABv9QZA8OQiJ7ZJ9BCsBJsDfciRCFfP/35+tIy5SdXaFpaTfIS04Z1wuDEzzk94UAhX2H2u1Rh8eQWRmHOj6qIxlk5HW/3qRn5IlN68oi/XXzD3lbnQ2gH18wEh4SbQ6izhPkTI8D1I0mTp349fAERoX3v3w9N3gCp+Ouw+lT7ncNogUPshzqq/2nLQk1gLbrYoZFI/JDiiHKWiN9ySAQsfDTn3UspANonLapH8JHOV++my38yHoq0Qu+J9PNzRUtEaAIhAJAIokwMWQtPVcrjHfqfEUZq+gvYKgh/828+LDDKWEIyUAdbdvwEQFfw1YBaFhvwQKux6LkWdFu6ivxnzIsdL6Z29nxs7zPI7xtNZTJ/Z2ytKflQz3eGrVCoKHeKRWbWmv07mP4fsktouFTgYWtVMsbt+BXZ3uUzBhyFQ39I1J/AMu1ZGyHbgKZjOilzWgoZkd6PBJZZ0KIiL/nY/QcUf6Cw5V+IpwDhfwCDt4ZIxxjz0zgoWK1apDwFyw31bG+r96v7xkCFP8PP+EIZhbToexEYCAmdbai1MpHcoIYkdL66T83vjgaVCeqbzPH7dgU7QLXeKashmRD6XbaqMKujNIw8s41r3Yxtl5Bod4Sc4vNUX8zKGhTqnMFzMXQ7F+an2OpTqqe7PjiVV2wDQMUcfOxlAslRry5KtndEc8xEx0wwEwb4QPV/BIVm/9nyXoksrrQZX1ylk+g12MAPF//3zNL6Rk53VnNfbmFoO4SPCtYPuREfBA1UP5071KdWXDvGIDcabAIo+O1L8TaNnVJsLdtHaIUxuv58oGl0TEAib7wugKOyV2ACU5JrTIomVXP+IasKuiMg4cYo8/jxn6eaBMXg90q4gifkTBMhrQUI8nPjzYYb449KrwfM+Zde0P3ukzk89DPbatNpSV2tcX9MXSWxR9RHWzic4a77HGyFrnr6/tFmn+Tou62W9tIPvDt1u1kqsz953u5+qazuSl6rPJbFlaUtjrhMznqq667Vov0agrr9YmjyVWZ+9glc++XDnvzc/fnWg/yukR2gvDDAy0NelgWsbNJzD6OtsGT+NGV9O90wac5eFoA8DjdSt4Tw3C4/DlGfDLjd0z+gtjNdOSz8ijutthDaOqWO+FkfM6iy8s65wlkiO6FMaGaqvwdSsyLanlGv8TDssBCqNXhjQhP/WBp8moYVfW8yoHfgKzWMU8r33MfzTYwLjhpYUtZ4hAzcMHLGXdtxsN31DwXc08Y5Jm0/GRQD9Hvj4d+RyDSvCcUNO1p8ZB32npOxOoi+KKAfBF4sLL1GtdgaTWtyxRz5Bz8WDbH2D/Hguy+/1O30SbQU4D9PMqemYRUj7rQ0XKKMgcJ5yYzm9JNewsxHUKfQVxssprfh96X3nj/1YPNhOA/uintMAcbtcAZ1KhwJ4f210aEyGleSrIia+NbMUXBo8V8bVPXTsbM01f170udTJ8lDET61p/U598E+acL2YPpWhok/v6qe88r70F1MNgB0yL6dM2AvSaNT4NE6d5yKwwhbFrCbPZyFqbM0hTmEKjll01cQgXNIpYSKqz8V/34G7bsoJ0O6l9v7ECFvxeHVqrNadFW9vpC9EIbjhLYDfGg8WVq7Orz2SXkPRu7zc/s0fxAn0Z37uqSRMMWGcsXjvq9eHeqhcecyi6pVTXkE6Zvt3G28lGLYpVd+GNnaZXYb8wE8lKL5Ola9BqaXZXvGPoDwoq1ATEtHx/VoXFwTkVk27pfdPlRxyW4QkkBfvrn4/kE6yW9pvA1e73sgxIjuRUURZX1pIfI2pwgC/VM7kzQbkc1WUA2v3W74WNMWftyrUMwU+tLfZaNBpQFXyO7e3WgN8P7YAde2QrksrTt+nKf5GVp576ml25C0ysL6bJKpNR2Vj5CaknGuVI1PdFh7q+24DVwqITJe/VjxKDVDwbOG7xwe1b3ds87TGqqFTywB+8Bc/x3hS/gk7hZ7VCPC/kGxPBPhLkXvSmYxy6E8/F3+iN6l8AIkCReJknVOGo2/rPFfeGN05Yje6K8+033eYiUYWY2qGz40Fur9DMXTWndtczjfdWQQ5SdNuAjhisih+LZeaA/1QwZH1K9ZrNdSd70pO51JDEgj1lLu6lx5Lyysuz9ZAXYn/zFR8d5IZJ2GwInYjtU4npVdJxb9ps2B6kJYw5lfjmLsPFHUKfRVgUX6ja9igk7Lz9lpcyrhiuKhNifUEUiFp1KSjknETDq1b8ffSeP0WQG7lBA3lepgtG5veKn/k82+3Wt84OZuJV9lhrysqgy4jvzs/WSdoyxd03IWXYqkX5ThdwHK0V8F0KuaDlDJLQe98+50dae0cqhgyMfzgiUpspNnQEhdfcH3OtPLlLunyB1g8pfUdcIpcsHzGefByGDdXrT1bHMTKJ9BzvHD6zSHXc7yIBuy3h2v3sZxOa1Nm5rfxmlSuxrC37ecXTw52cuAnzSwbLLI/hOVYM1gd0ctI7NLV8xAA/VrDMx0Hvvwb6lQmbdRQGl5EFBIf/cl5N050GbY2GZXQem9sVssrU12hi18ZEmeFWpWpA4L+F3yt5Pc6Y/efmFYAF1tkfd2Jj3bIaSEp1Rm9AzoSQ4914bk0uNNH0cY1xf2+6Y9q98+RTAZ9Gg7Xw4AvnrlhedYKflLz9xOrpqB/khSSwrhsuhl2DtvyZ7FI8EeHL3TuWu4RmD+l3H9w+upA/8PSOjm6SmTAaBluZgewsfk4ratP/OpUCM8WBXnCx42Nrc27TihOiqwMiOZrZOOPmV+rON/JZZ9CiwyROSbNrIS7IGEZlt0hhcyGcwq5rN9nUWFYNSSs42Xv27JF2Ahr3myD6+PPPTXoI0LyKingS0JYoNyuD1/SY3R9emeH1g5M1Qp3JmdbqerQy+rz/QnHZsGu4cOLdhV2N/o/zvWJQOUb4OnXujpAsKxX+DJfOtG95nQKbwy70H2p65KAqOm17GJ18soZ1jzxi+m7sqy5Ct6etT3Y4X2dCZzeRUhWarTNcWvyIcumkzPtM3wbYGgOsgfoDPIuhczoZVxGsvHhkJwqpzE5G2m9nn29hWxp7Qg9V3pb+du060XD8sLiCRbiyW/y1b9AYjbxk0z93TJZuhiq3yfxCfFPDee+S50uAAD6zfYxZfDPlxztO5nZz3waC8f7gXf51PU9H11W8eUoK1/85PxNmjVFwSrH1HfMDgA6M/xt5Vd0RyqlHYPr5rWD0VQqy+S1vCwPshualYYz4nBtOTDxGxHgB+B0Cn1b/cUzXDz7MqkzytmyAD54pyMkv2DhtUv9/CDz3YbJxKM2AsqTb9KYhpG4GkhV/TQIYYrHjzdxLrZuwPSTKOIy0v8exq8f9AMgwNRnc9qo4Ft5CxXgvQwIbjj0Oau6KUjpGD7CKRMS+jccUAJOVXGTNwAEz/psZdIuLdlfLnTGr2RLplbLvfwOT3flweUonHjmDpVd1r+UDJ640oUrNCrIsNtkLtylHDe1z42/UObFfEuG1TGxjEs+DbjJBul2FZ0K8/p+ev6pTw8A/PD0PRTAz89/D3PRZZW0EHwVDWSlE/TNR9Qv8f60EnkHfdRHSHI5p2yL7kxO4fq6SdvrdTykzTIbPiynwpwxxkcZTQw05/ROZnjuZC/Pm+3TzEW668enHRiwcLfCf8I6qs7Lp0/Px/oHl/k/ed4JxQ3aRGEMU51YBX4S4K8AcqOAlCzTlB2E6CEW2XjYAv5oJ/LcieK7CFq48VBwzWkOXzDszgiRE1cWrmi42/ATWTANrPV0yVu/f3JoB5fTMuvC1g02j1vAbE7rWFKF4oDIwAF1Z1LGv0n7JGg/xvLUx7Ql103Y1vp/D1vy+p92H7acxefK0ECTsepwpLCQ0capEBSMVGsap+sjmOmZQXkj+ApLe6abV9kYZfNn+kywrDBE8S58lOQ6ljIM9TYxsShaAZ2AxFUTvKAc73WtKD6iwvVyhFXOY/NbL55G2ZJrnHuFJJ115JxkgLXl9brJmSmbvulSnn/17NZ4cw5GKRbzyo7IBNL4qi3ER4FlIwYLhvimqM0wAsi0k7kjnLZb3bxKnZcSE9mu3Efv37rxZMEaC72K7b3UtfBdjkWNV4HUnec7agvH9bmFxZndfmsth8bYotz5Vbem/Mv2tdcDgirrjrINqMiH7ec5bd5crVE0+IEuAFzvScB+UXviMeCssOuGIqLbsNsJpD5+BIkZBxAdkKFGQzp8/ZKsCPows963wYZuFxR5vpa8/+0TCfX8qnfo4QpBr33+Nf3HpJOdtJ/0lb16lrmyPmf6TBUjG1vr1cBm+WxB/Z+rNZXYkJPGRFwP4fUFe8VELGWlUt3U4pVZeZVWpXWZ7wU+fGlB/k+cvjrQ/2WSdIpvk4m0rE6Om1zxuUfDF+9rHiKUj06jXU7GHbaX+Ibt2TRiTFCY0bIIgGWi2Xco1sJFVU4wcDsMtNCXq5BV2b5UPj1QTnSNVYxdxTBTTjYTouVZmyjvUj3nYQH8hMaLDrU71apaLWMU7WwnE7xgWOF7eSai4iESw0EHxGpOCXmRvrN8q0AA3EwEvVf1/hHdF0hGM36yIbvExnks0r39xpH1m62hHAcw/wG8+R64/Qwc2g1eGtYTmOsgNEUobS7gRytQCybBmuKPmG99gYwXWz7BWMxgMD4hOIH+OSmc4k020EaW1fhg5zk50a/qbntS/tXSF7HdV+erbL69YkLa6mW59X6ThwRvysTP7NDVeMr6ZW/MZXjGseZH0W7GXCYZkNXqn2BOdYVElnnaUZnf33n//b5JfIP92FNbZCKYtDB58S6/eWSa0Pe6LEuHHCdAYkHj0GcAEzd5B2BkOMK4l3YKoGonVKbrggHBs/pJdhcAY1j7JgLvOAive9nk96ekkEUDwMdjQmTizS3Oblvf3zr+fvM7Sg4IgJEG9KNt/15TjWj/hh5bJU6iP/nzDwsMBw78RjcIfw57mQoovo3TGxmxwF/YvbdAhB5up1E+X3GdJsMKLOF99xPaWvgseyLvOU27Q+vSYpSLfEYjrWn+UcKLVSfnu3Z97cblIi+ZRF8kPViPndhxe0Zex8cZlenU1p1aFO4gvSNTawWibDL/V6sSen5ucl0bKDXaF6Wbmd8KdTcfWwGxsbiC+pVxK96WbTzSVpPJvLVe2t4R/9ACewJ5MgWk+tnZ5o6+3TgtWqU+9xHgvMhN1eb0oEbF5g5u3YudTpWqEYqJW8oqwS3wQ+ZBkFKPe9WN/tMUQBU/khO9THPXiDE3leF3qRqsP4ngL+XNToI5zyVsM9kQwZCbO9CBciYo7GoUNSc6oXPnLL8+gf6Z6R5LeTIclZuxApyfyYV/5xlwpb7ktQ8WeAwy/SCbujxZKtnasV7D9Mof7ljlVd78Q7bOaRMEU02MOdffnOc4I+QyXWEw2pz0nSu+YNIrND2SVjRFExGPHyDBaJvN0sHOdmxbG1jgMOEJ3zWCvtZVcrX1T4GIhFQbJATQp9b0lfbJ50+kk31Tn4V+WU6q6iq6StZXF9iZV+XXZaju1KPubIzX1CtUx6lPIXbXPpI+UuHf2sbVrjskKbiur613ARGcJqIVQwRz2CaXcuK6M7KtDYHaDp7eCBl+1NqNF2HNzm5j5TrWFf8E4CGfV77dSa29JEuXOTnBeQjDwVHO8Wp7dZ4DCp3lZI4w+D1RRModCZyc59XVhJjWjbPs564HABtYP6GOi88117r5YMubSiMXOGDckEyxpURfo7wBGgeMjto0E3/i9Brzm4qmpUXbxEoPd/wL4O/3T7rouXrc5lHMrwKTASc9Qrwcdz/nu6We1+Dya/qadklLztrvDUHx2vXvTm8SwiR+db9W3mF1K7GSrOc6OvrU1PmnA06i82v6hPTVgb5LjZqC6Pm5/+bJWtrkoVzJSD8tDkkvE5Ung3OILoIpdsephfOB+FLA6mzgZtqCiBsBuCGcY5oneEhziQAy6k7wUyLDmCeSOTMQCIaHwHNDUYF5TAw9rB8zLst2Be2Lb2n+p0ESAjAmTBtW50dXCwmq8Dg8fRxpYkSd6hWv9LAkaZl6eZ749N2y+9R8SUuTZ1vlBbHXcDFpMYBrWg0jd+7WA+SEw5VMhUYtWAEBvh1lVNptgN709DsKxVcEfZwH8ON4U1e+5YSaOpw0TLeIj2FztCk0zxNA/gsybtS2+oYBEF9yt1xpRtghVegulDsPgHbWzonn4FmLfc45fVdrPApt6PTeJqlLmHtv4DTPjAU6kWQ/li9rVIq1C5V3wUeTWQEjOT5o4tAW/gUZd7bhGQrNxQ7vy2m2IcTzDOh9un5R2Us/5XVdphYelXNSaIEwdfJXij6DMyZprU4A0Pc4OdFpcUMczjSOeukdqPWZZaSz8ARkTmBOCE00ly/eOI1tLnqwHnghnSZUF3Cv8Od3ksPTZXMhhmT/TmZdNfC5ZuDah93Jbx7THUwv4GFNIYcu9Ie9f0fP6Lt+YzCudkTW4+69rH/gHeJGdJpUhJOCVv3eQvFB/BPqn+LjPCAarlr7CyfQkIGphw+jbdYSNXlsG6oqlr+InVqZMdxkL5xSytp9dzdc7F+OKhGyvtVb8nDqcg90NZz4jJpt2Gjhl3Kt1HrlG3wlpWz6ViCq66/GP96/0M+azk3nt5Qhce3JRJwmZSzF1aGJBe/kX8fbbONvh4fQ9OtXlPCqM+Sn6+JJSjTGL+Bs5JtKDYuiqudJL4IP07cHiOmaMZ4w3M79h35wHfaWxLv19iNsHD/K87kN/pzGOxHC85i2kFu2mut1t5/DfA4Y0m5a7MkhwFt5sneOgH/M59QNMbQ85JlYljLxhb3WiGxHcYv+FaQzJBxKHJqVzYui85hHLLLrlBbeXuiqZKE3kF8tnPdaL2/20fPr3qmUENKfapOUANUpnn9mWSBC3K480nz5KoD6Ish8yjpPKpMP++XmMcJLLsCv0q13NURjbpzJehTQiW5TSINcuALGT/anX3XUdLJWLZIDuCa1e0O7oLY3YszTIg5F82NYhKuUt5IL2bGxYMDcaQNmgg7nL7pYqvWTpwCKGvu6nUzxgwA/w+ZAEWhLRAjs2PxqFU0o/tf59sfgX0U6FQXATZDhjs3xbgMft3/Hybabz10gE8/PTKdWL2lO8B3EjkyDLefuVTJkb84/ndbMaSxIW5DlL6W/yXQNb1egCHgD7KpzD7MnwgZ3vRIyXFGRT+KJ+vUDIV8S26qI6CKKkXZEbzDyUpmWWJYf+H9zDk59Jv7iiBC2VGAyq6C1PmUkAwm0aYbg5Hl2OF0YGlv7WGRlyPE2ACxT79uYO87rMifacB1HsiZVrVA9g2W/izRx+so+oHzgq1HSukHGTuxkU3U/qFa3SYY3qlqXTVoTe50Sza45Ob/Cz7SG7lJdsd+b1a6LW/7gvwW+fgjkXPc6ktVGL3d2oOsJ3uhT9lAX7DQcsx5YoLiay1FFI9qeCr0h+1+LHYo5J3QMD33tMkFGW1YomV+S3qgiwuw/n+Frmt9trmg39RDpG+X3NTgtzL0W9mKMiyzDgdvHom+eK7zb80l1UVh1v2Qpnk0P3Tvh+IpnTp1Tq+0J0x01xsw4QQ8Bp+fTuCKh1iqi/Az6Vw83j9rnPic5rHMtoY+DcN+XjQF1D3ulGzY4FcZ5jAczeAgD0wHdgU7jl6H4XR55PdHfSRQW0Rfs+gjAdKlL91vJJ9WJ45iYGjFuvA0zW+zKGeqhHT2LdTJJeWo3lpKQXPmWiI1lS/TxghsfSm0DGNdNaN43IMRLL6VF6AaDq+OK25dJ8jxsgxwwtHXRlYIU7cqtpTuFx0/F2H2EPJ4u7KhXArN9FqeRWbd36x4pA5A5Kc/OnABVdmp2sVN26UQnjICmdJIvq0TZZ2lTNoW1gTHWbN3OPFn6WxtwAxrPV8OQmfT8kU2pYdvEpt+Ee/rUKZSG070MyA2QtNEPewdfg4VtrnXLqK3JBWmL81HbHHdC12Y7vp6/9+W2hY8VG1w6EFtc7B/vyiQZXrbxivSZ7Po56T/Xgb4y/dZoFDCDn9My8DkZE35Q3y8Z0oSi7SyZacyfhZoAONwcWO/0Qq1ttDYrW0xOhRe9RW2xYtIsJR3nbKTGTMpuLbMtfKOv+RAzDghu4oHadEKPA3pMW1yfz7CFbVJYpwU4FHc3BlvwSJ0+h5jcJB2bPCSCW9g/HmG7L1QuaaHy7YCoXZBL9gXmCG/KNQVZ1Vx6EZwXqVUtfE6gKj71RlGGLLVnOkIKmPybWZFSzEkT9jamQyfGMXxSLrkmpwq8UcFHnXgnHl6WOz2CthX48BF6e8a777/HbYwMH/aR/c4iuL1xB5d8a0b8PDDmD9AI2ZfKUc/+uWi7OdGlPnhXQ1owCw07vqLymX2SotX0U3aDYJ+Wd7RBR5ffVKPz+dkp30RJE28kKwDYIN06bItY4Puh8jdixLSDnuUcBw2Xu4yfc7swsMzSPc0Trlfu0+WexZIQS16e7PFYTqBOhwll7zV0k5JxrKWLeCE8CuV3oqcgownIYYYgk3PyUNDhCkWcGPBKiu1jDDsNLB2oLyc6JkTm/YMkW6LrInUSZJuIt5Zq+8PPMcT69RbXaaXVu0BtSp/bUMX58mMBclPNhTlh6ZutAaqLw2mMG97B9raOpM44BVlLMbF0c0Od7gsnutcEKDBy8d6EwtPtDWKyLxOIU8cf5keoCoY7SN+gTh9bVBELk54iOOlt6VPwmBQOu6bGxVPNcvU6NGHYHVWD0qcv+0EwPHS7+un9OHWDDOzd2pRFXgzBSt0y7b7XT0m28FZucMDggIiFIwcwxRzmtyG16A3gyfv0jGeHx5TxRwqvXriYOQrln6g7gMXHSkQgTr+r+GznFGNsSY6tzoWAtfYvuD4g5NrGTyQtxILVoLYiX+iZPOU7JHW3+uaOsLk1NhmyTnQZa5N1TQgCFwmsgGRUuYfamGv1TxxRw2EL2AflNX3EmiJklPKA5PsiMi2cnXRrT7q+Fq1+5DutPxbzIoQvxtsmKeNn1aXxXuqT8qhkhl6ebUX+vQIhSHuAeZWopJ5r/60KHEXs+35tWv37s18npDdAx1lEr+psUV+x2L1r71SV7J8D8zzA2RVCXgpf7oUCOggPQeuTM3PNffx1YppUSjtVQSelRfqQJl9E8ZkbW7mlw8kzZ79ijnPTa7Q1TCZqU2rMX0J/VA86yVpLP/qzn0kPCGrvVaE0Nn+ZlvjfyDuNU3/0DUu/DeAN4oD0tPw68QZi4dwhMM0sHmXrAG5q+xqV3c0hUUzTDkJOSO+6Yz5kazh9tfYbRa8kdLHJv78lXVCvdRN2HyHPNdsGuG7ftCa+zWGpN/Vv8pqtIwyIRxyo3iB/K07RceKLonIkeRHda83bU781GVNz84zIE7C53KpRiMXr6J+94ehwca2ZvWZXn0ucxn+JuLVjLhe08HdeYa6MJDe5WqZtHi06qoBRwtD6Rr9jX6v684gcWE48WRZht11JQDR34zkxqsnccx2Sv9vcaddO3h/ueY4J3G4GIemcpq/hDsTcULiI4KZbikrCEWknUukk9DI06u2cTv5mP5Tq5PeLE391tvHznd0Ps40Cz02kV+G085s+p1rOSqZ4yjZnm3N3YGIqcDsEGBN4GrnBUGByXDFsE6Fv7gHTlwLQujAq7cXAeyg3YvxuHRxIJxzVUkD7X64lzpAsp+y8oSDkiSKiaRX99PGpfClD4pfOdJzPqQCm3W3urmtbBpo40mUeTnJ3+roTfHqdsznPgXX6kFELdJr+RPQ7voaDPf6cFrSWpBSKOev+dvhcw4aAradyS4PKxsxkCaKCoZrzyXJmd+c2zTZyXFI/T6dtEE9FNg2MFk9Vf3jEYlyCjzVhA9yEHUKGAcYAACAASURBVFI7hqfVeGSZDnfSF9UeG6ZE/sv1hL055j8ql+aLlIG1Mf89PddC94mJX05d75R8CpjEO32SIqFveLPTVQokh+IIp+G6npG4sk14xWqRz2VprmnpqTikIoLFX3Oen4Di+gkBD6VNvkeH4NEmXl0J2eYhPLObpKM2pVZaWGU8kyO3VehT7BHANIrE8bp0yQ2dAsz63CzzvoRn4guOvrTCfgnzyk+hGyI6bQgeCOB6a/UtNd0bvp1blPN15tBvc7blbLk9ZfsmqT4iN13LgODJioVTv8EEXyQwXZZyPtbrzx1lqNtHY5OWa5FRpzq7Df0YwZf9xvS4kOG/XfrPdaD/Cya2KTMtku3MuDgxN2Uorb5tj0zJmF2zcXupuG+ICbh9CmIxvHrizYs5+9NMms70YSCkYVsgr1BevHg4bcOB+c8roX1SRLp59hoYXpN3WVyuhYlznofq8dndZYlX2mYaJwtCyIqQIeP/BO3E9WbDDTIogO/cRlPcxsCz1pJ3GlBMS+moHehO2gV2mmNnKGHEXV0UUkiobPAHG31TFyf6Un+wSTM+qX9tB5uc8dvnIYS3TVoc2Fkft7Hw6aWZk3wd+FzaaZrNfrAvV7PtCL8oiIW5mHS2tv5/9t50WY4bSRf8HJGHpFSlbrvW1+77P1/PjM30oqLIkwmfH/DlcwCRmYekJKqLoB1mBAKLw+Eb4FgWA4bepztn1+c74ZGhpXcSFXHi8u8Jzg7bQ5e403dsdqE/ExwN8yCLHemlTp3a/IbwNdZL6bpdZ1CCHZ1H3B2c3q30Lx7OxiRn3+6ljwT2ZPrKJ3PPhVA+Cz25baBTKj5Qdw4xOItVNjlID2tDfJIcy8E5Grk2k4PK+tBp6mSA8HQYNapO5KsoA7NVlrDUV1DLH3fRtw4PKqMx0vJlvkV2lm2Zd7I97Pf/7Z+QTgEpH//t8jPpGqMqMcoiW+T/0o9Ff5WaeLXWpn5M9OZkPushAWIx0DxdNNvaMQlvO0Oro0Xqsq5HemiCY+2Hexm1/L/mvWfQcTLdV7MQ6j0BfbcCFL5QgCcVz0o55ZOglVny1NSZXzaFnTeYacezDZNG7Lj0jXm2mTjfR2xoVTWdRpu8IfNObIlnxhyrVHJeTMerR4sArY0bw/3qYa5fpv6PN3YQbmo8g0yooSwlFz4PAJLfdjjhU1MTBAV8YZaX34HOi6GFKUCjqlFPpS+b4sUv9v5fXpUtbuzItb1iE/tp72Y7/9PGMj9hLEhrSvCJ4hWwuGZL2u1Qd2nQ1tGboqvg1gWvXe0kC+BfuemB6WUpJv7T2vEiwGGO+lxvmzK7GV28t7bfbuZQUdi6k52usPYzJOXYNCvglNNJeAbuOo0tPd84Y0AM36xvFRhrn/wtro6QvD4MwFgUanoqxJztbJ0Wx6gmfYxduqMd5RoSddumx/+wGIl2i8EGWsBmixH8xC4gnTUbU3nBGLdpwiIwFm6UUNjULTffoEFt5rT+qQm0vcAdLKqfTJbZCTNdbfrG3rUWtMxJBd7dsNB49yUSC4HFu2ziSB6p7apXcsy4sMBsxe4DO6qr3OGOYRk4d5ZGs+JXM4FiKnd2oPu7UDyVv7ZibVXCz/rKaUZLE5T+yztWSyGV5qncpU5zyN/UdvX2G64CNB3zNU3Gwp5hU2Pwni8U16TMCKl4Z3QheGjG/wm57QB2mOd7w+dd1IadSBdwkHJiCkv+1BLHef2LO6/rd4U7Y7aLOug9F3OYg77ADswofS6c9S/hjHDyVInMMxN+g/bB4iAIcFMW8wXht6Se+GK2f3V5WOsJgeZtfW5E5zzPI+cgT54r3F495GNu031NvnoPyR8fjKcXivVHqXOOTKTPoXjJ9iO8LazzKn9hRJJuzLi3ENJJmHXJW3BUFP1Gr4UcMBkYA9D8VuQZj424jh2gP8IfHn440P/U8CQDhIH7bYRdOLzUHWFWx6kjfsocR7PRfdqSR/3ZUBUuCvw4ImAcLzyO+XQjRXMQ6UE3g/VvojGr4aL1danx24ZvV+YX3V+0y/JMf98rz8e1CuBvMtlNbhhJGtxjNsFWMI+B87//9l/QBvzbz/+CJoJ3H37CDYLbb7+N9C8tV2FdO/r7jk+3jtbMRT5fx/hu7Ei56li0cWkHroJBd8ffgf7f66BLJ1w8QkvkU9x1oscMndR8zio+4XRq5BNcUt9j9zem7/caMSlrTpb3OtUseYRfpnfneew6jLLLdBqhdyrUJ8xi4myG9RvwSpLf6WddYu6UM+fgAfXd4PdUe8I3OtSV5aNWwPn3fNz57cI8OarIRSdB2/YQq7hPyghL8cTYrKPgk+c/I5zdOf+Bnt8gVz15yKBN+x4VyRPXlP0KxQWKl+ZmXhbCrO6OzRHPjqUBzw1jFzoA24ley3HuCP0vgpteob3jpY2d6V17TCiO6yd8396ozSeAEgVTgzay6U3hyW5xGG6aR7I2ERxywdgnM3bXvTOgWKQLVnUkm99nwr05Ai5jHHhRzxrJ/ssyPtvRkYetbvaUggveA1CxfTAP2Uu3tLaLK23dk2j9MPexznUJeBP22P0s+MUSqeti02WqV6DLOAzUzWe9DpozT5zI5BSHxoYlr1LAMEy4WKKGHeSbL9+ZEwIieIcexzonv9mRyJb9ykUtdTzonEWNmh1yl/B2ymSTRmYtzjb6HsbnJfVUstk105qMSDfDURLJmiLbz/HVVgEknOdza8Yxp/MYZWqBrLsNh77enYSTtQwTaM/tj/C3NnXXyXUsdRwHLjigcuAVr+ZEJ5d4VOrw7aykRHaWPil68Z26O7Nh7gdNuzbqEfAYIupUkm3e9WptsB3Vblbwgd9DruuC1Ih3LJDZ4odV/KKK/yRoG33PCfOsaWiyPNHmerO7z1vdIxJ7R1ThJ8s1GYvTjzZueu+9Q9oo/Wqw/WeUkJcizT0vGLveL82PkB9jlfUa63E6jBfSTXZdu+289APGxI7JD/yOPvMd8gWhDMRTQYnuZCw4EVp8AV14pDo1gksnzERiiOTx8wzcvSvTU4+mS0tkvgVmICwgDXo3/FgpTB3xxgZPGAnUzkX+LSBO0naSj07uWl2UEjp8xNYd56Oztb3DYWO8myqu+gLFcKKjA3ojB1bnWqktO2IoHtyAZhISIPgozxk9scyK7jUlHruP5byzd5Pui1xdZTtP3LMTdPSLZCp1h+naJp3yL82y+F5qy4ws35TioyqtWVzSFZxRPdUO6Gs6AKpjW4LqkBGiDdIu4yjyW8NND+A4AMmrnpo2qBxQ3KpNRbYbBHQ6n3+2vlNO74IJU2IgjQbmjlWrL9jetPM0TA7xPuEuneTkIHd4iuOX/621K4g0qV/XpRRr3z/RirVZCwAJL7YQvqXsGUdcjbUqveiVbnmxiX1Xip8oO2NY1qxGyBMwE7RPN/s9xnUjlfrKJhPq07gWEZ/Hu9ox9V3jxtG31f/GUGwsDveU94xQK6fYafbO+qwQtFA5pDP2pnCGDwL89nsh439CMBtgkhtL+INQyL6m5zLQ87MwLorxacPzvO4HZSybOQKOiVeD+bUmI5kVaezXfSO5qXXXmeNbLib7wjZ/y7AOSP8wOvuzwg8H+ncRZPq1MKwAe1Zi0NmAehsDceq0S2M2APOq7NzlCvhoa3+cuWbSYiDeoHoDuh23xAbMZOnnxOIEpW4GWo/aOeNpsRDv5l6jZDZdv0GYDRgSmPPdykueZ8JmEM/lbOfudl5HAXJQiBwgqw9MJyMp5g0Vce9qsexz5S+fQXnDDU0O3OZJGadLM+rb0poyKkMT4MYD47Ri830xrCnzjqVmvBs8eye6fW8tYK6O9DqlMTclk+XkzGii1Cwe52NMmfBW2j/hgY5el0nRK1pxmgdNcjmu/L1ejysVUuvKOHgD5+ls1hy0/Kyf+ahHGrDJgukNYLvytPYvlTtHPxvODcqzEUQdLIZkDNpSOy7PjlhkfTENXtdidUr3ewSW5ZuqTljhaZh+h5Wnf1xgo9v1AZ5retHLIB4aZV7RcJC8XFCfjMK1F3p3k/5zvBPZFEDrr4Q8mf+4fjVQEwds9nBZZUIkwP+6TnMxP+ZYbXJb1WQfH1/7XFlc5rYe+u1Pl3y/rhpSyD3H0dmvTAFvhWxh56In9viIdJvvqSM3Oty+/UKflW1Uan8pewNEXHVA6tnfBbAtyeRa5d2KBR6HgXQxHmOz6AGi8ZDrwmU8EAphJ+3qPKOGZ+UrytyXTLguJe0YYMOmu2T7yDeE2eY5qVyXhHUUFTyqE4aeZox0mtRb+mSxHcbVAXPxJq+XCZq0qlbbvZY7WV8A6OoNZ1BzLu2m8NczSJbipg+zwyWd6I7fqIWYM+8MNZj4mM5d32km8xRxvLRIODYSivEk1hdu3vOJAz5c8WrHSa652OVf4DvREyPdZK0AeaoKFONgYxcFiqsK2m0cYdsOu7ncr0T0bjC4Wu9Au9gZbw2vDZA+tjJ/Vne2+/HpKehY1okILgIc5jwfDnRzlOtoj98XH8cye1+ho4la+1PmHeKHRPq90bLor7FUPm9qTy1HR+sbhrO+0XajnjhOlwq19YF+T220stgLI6ESzTDd+CkzDrGfnuc117RMww7nOHpfbGGGU4VB4/MmvljG9JOojiP5tXPpdiofsp7IT/Ke5ki8ferNJLx7nGjaKdmaivXR9x1jaYXvwLdrCARAewHkajnHgoNxeoai621cw9cV6td2mozTee0MsIxv5hNqCm+vwi+/b+Wty0ZL6l14I0BcFGm9libohMqqu8+5UAYmF3mkU7S2U5H2RA7LBoIUsEUf1Km7eTz+TPHOJzMWtOSeYNbMS1xCpWmkAzA569jpP95L6aTXxlHuY8HpTQXSb1AZV0w0GWyhfu+Gb3ywOkRb2mBuWLgwKJitbxJPWwLZ5J30qDu3V2xMz5yNsK153HrgNhzmI3Uckw/vf74bfOCra47X/aj2mDt1uiywBhEWB32xG2d8FTlScfMMBiOvJq48OA3mRknnMU6ngS/eKT9wAOQiBK18oQQbO/NLGSi4cjwvLfaFpINJK1LsXel7tNOvlyjATIEZ0XkHLNYmiWyyfm9KPdMb32kIPWbP0DJeGmlmfQuEEXUveLk/nOe/SyjDDKf3NdU+87Qw9WvmZEY3k12wGf/czbwLLA+enmOueTnXbrF02jyKuuqJ2hJ/5ncRhfqK2gOx+SjlpqTcIvmzQvQj/FnhhwP9ewgS/41X4zs2jkO03NHj8zhwDnoSP9e/fBuj8jmi5hEfUrKbtUP9zna9AvqKMfpKI5AHKj6RUe5AQwrkUeI3DmzpOEzQPTrmtH90eIvjvOS5Y6o90yb6vk44APiJSgxd5ZMvHs3GFcLY+j8f/gXXpvhH7/jUX/Fy2A65Ngb3OI5BFLcb0Hy3mOKq9YhVD9dPH0f57y5A75B3H9Ag6LcO3P4rE26PSJrw+3cA/2CdOxuDyiMHS8LWNMEXzn8kzu/sDosoqebIfCQnly/0nvdXU3nMy8TCIrSTyOBPZwAZA5Z+uTvYJ+FYRMywJsCoExrnYTevso/Y1fJk8rlvl3c3inSX6QvsGN/B/H77dWkzG7MGi3iUKqS/s4HeR0B7cainxNRauIegf83+JNJdwu6b42WZIDuJ756ZmC8GtE8KWIZz+fBnhd3O9J82cY/CPWEA7HHEljUb7ANRN9XYd+yTDunc9v1zEtmUfu2SFnwMJ08OcQZpLgoUwDhulu/ccxgPOSJOoDGpeNggOnYNhlg1eaR8fy5O+v8s7GBMTuM9dM4xrSRRdLlCIHiPCwSCT+h4B7V7d+PW1wBvrml20DzbhC3LCvwWdhxWzhWjVy6bXKO+Fn0Pyyn0LjhwCPCqndK8Pfiiq//n9ls2QA4TA2nYRumXST4IsJ1koQmwX+IezVBg4+e4jOzqE5dO3wEIEvNH1PGKV4NLkn3KJJzbMhvdu1VxfvQv8Ft/Db18ad47I99VR72iw5EV935avX3GC9OtDQROJEEpZx+8E/h7bV8xrfiT2xibb+V97sLA4wlIu8oA21mccD5thp80bU2WfRtqay7iATvsHN1eyrwbdgZqam285842F4YT/T0dkk5vJpM7hiPMx18rz6tJRp1LGr9S30cWp2HnOClzql5uCTp0AJ8WLGgYZ6PHXmkE8zseCB0KPwp9RLiJ0bjzFHH6AzDkZ9yjThIi257VOBS/2MLM/zKN0aClvQpA7Ih3l3eH7foGOjoabtrBJ6/wEeDSBdq8fwQHhuv5JkBrincKfFaJw+pTfybsw2Ge9YotCos7iKk94mML+6awBfBq+XS07xAdTnU0QMR04yj3Rl2qhrkhqr2dbmEwZbvWdfwLDY14L7+lmMYyUVm0Wyf+4+tXKJVGx2Dx+gJ0GTiI9hJ2PzPHJ2j8DvfU8F4mneOjfTjREZYMtY8VIVAnd4r7if5HzWPvsyMXANl4APBK3/PqlcBye2cFuef5im6Lt6/aobdPQNfhUKf6xlBDsj9M9yX6WfYlDSzitEQY3Escvzo2T4qAwbjZWclWUHWKsrCatYzB3Xuky+O/s+6c2hrXEfQYi9Xvq/N8kr6qU/za0iGjZmW7c5hTmWqSfR7Xkpkz11MTWB0+KdIVvSlu2iFd0JrgKg1HH1cvdIzFNwqz2TrAJ0H4VS3LxoA80LLCopwIC1lMXn/MmPU+1+lrPc1k0x9TFcMZbNdShoPbaILjkQ71cJ+r3XluTtvujnVygpd8k5P8bB4wen4AQs58RH9XpzujdV/mrpYCg6T8HvSzEU5InKvlVagd1uROdQ36JJWadZEDXanMcjpQoe3ZNgHiyoCwIVyWjW97i9nTEiwlrLkUgOhHoiHTcm62ECsJl8uEp1OxM8F+i7DbKPW1gduzQ+gCP8svXaO/VVt/hKfC210MuqrKLw02/nWLOfT3bkHMCShZzp00p9/vDRJd3uXJzeM1LNCazsvjAaUAsZnQTVtgeGG7jLmQGPQbLLF2n/ljrut34OM3BdnYDv8c4YcD/U8LdWAxvyo/UMRiH35BdV40RMhZz1odIcx2AxfBgZi8DKMwK+GbHBQdqr7z3AdnZh2zHaxiR+a5g0gRgx03+HaDsm1QkjFaojHJt/Lt3vtU7pvDGexnRsYu/1uMiug/z8ND9x1cHFbBXBzn28GxKzsqwonYd6iH3aqIVZ/Wv3G8okzluWSWNhzoFu1O35gGuVyA23WkQ7f0ZIwzXOy4Lr/TwMwvAlzwwjgB4VoJD644jdZ/BvCrx7mxrCf455AJxOopO8Fcec0zmtwXZR7A0xtoll8FOeGyOM+pEJIN8y5DpaRSYxI/0fydQbCRNxxm684HHTUSs3wp3Vp2aijdEV2bWfnRI/sUvzH4H4TtMa/TW6HZMmhmLlTArilAV6BfgX6zOwpzJ3oWf4YrevwzDKB7MP1Thqn9j3TeTp5FMePlio4X7fgkDe+Ri5AGLe1HFK69i/kR6RMkhUyLes/678zC1gKrwG2RFJMxWbp1Us3yed+ebd0stwvj87FY9q6Y5htqPdUNv5a4My/mq2oeQFviHfRMN+tqj5Mpzp2RSi2d5PA9SMorKYBZf05wjc9GcXMjCr5RdNTcl7/40ci0g7JcZyLAcheviC3I82OVWWmxMuUjqad0BNu88zzhTbhmTMrmKY4h9n40FIjqciBx/ipF7RTXo0A2SKGmVQEUmqbumSdb99KD8ri98BBK2a5JOM8o54zCaTamBn/eRQd636qOtBa63O+6s2EKMFrmXByQYSoqJ3sCFLGrZjXMod5vw2F7SjpWOO+iEISdOcaLk10R/0/2Ee/GPANSuJ0MOb2FKefEpNE/zu68vMvBH3NP5vaUHrZfHJ0eFTRbmDQWDIyxhcYEnh/+7eEXERwi+NgUh9F2s4G0WLlj9+UY0/ofVKEduImdCCOKpnZsugi66NjBqR1XbWNRlpUvArwcwKEC7UNe+glbzh4vBldrVL99HPbgwJ1dTALR29iJ3u1KJkE4b0QlcNFgU5piN81LOryhqA4LGY5Ddt6OxXKpcRDtAh0R77u7x07vWNTg26PV+4U1ipNYEk/6QFcCH7Th8nnWvSxLBAgryWLU6/ayxvm64efr2U+qSUNieFaRbJk775nPKSJEiKb9lXJADfeVqYThN371RYoj9FqX0pV7HZDrpypX+ieovIz69dOIv1ndPfsVKrEb3XdmeV9CXeczJmuLAc1VgQB4YVuI0VOzRAJHAIB2JFwAfDXIMuai6t0ZyhRD1ASnC7Vy48730HGp67wUNRqLBVA05uSdsk67pX+ZDOk7S1lvxGCxtBTCz8iKS2ped8pGByVgNLe4R3jY5SZvvVVDhqnJr46jAzcZOcZ0jEJbB/SAdsA5we2tga0hNYuOo7F55WlqX4F1HrGcpZu+FMcs9+egnaAPTfyls5od6OzoznlRd167k9x3ng/neS8OZIejK5Yy1fqpkzNd7d3h7QwbkAsDzrp1pj/Pp1mG0wsvGGFEFryh0qDDbmRgeGBazTx8U10uYA2AEhrvG4d/YsVkTSIeZ5OutfJsMHiuOX+9wJ0B6nb/kHOtDb2ZbFW5tixaoD4b7aU4EgBnNX//QRHKvUTP72uSE0L9qyLiOw1KfPJtinscqrHPdF7SkD2Zdo4+WQcVvA4s8nuJdqbcEdgGtmLncF0CSKvKJQ1We6d584udhCQvABpwPaA3BW4JT7GebF5Dooml4DNs/HHhyXHp/6Tww4H+p4Y7RO/8zIZutVOSObezTo+LXkCZIzdx4kLCTV3l4//YzHW4hzGZf1w4YlJG6Nez15tVzwCndp1NTtEgp0xybwV4acpa35dqm7OzSmcY5I4UWqLnCK9Dpk9yN/m2nlKGTWKA6UzyN2gVSYsc5xaiAtC/pQErY/ClENzsZILX3z4BttMhqpED719eIE3w6TZ2Auqnz+UIwXcv76CXF7z+9htwCN5dXmxgMnYK4GajugvG7y74qrJ4d0XP9I0NDVB57jwXQQxuRYCPVp5w/rWfK2TzTgpUvAB0dO2mTaW70tgHQNtQ+JskI0IQs2alTC1dXz/X9lS5MMGlvqBjR+tSS7s36bz75kckIqe7BltJ7JAcNTsuCc6QO5Ps8ReSJaVpz/JWhI/2+2FpQ9hGrANknD4ydhUhBl+q/xhXY6gtUIItVmKFsYWFvhUj8MkwL9hYJqnOeGXX0LNv5WEq/2HE28OfZYOWfuYPO4Duy66gZcafCm4Yu8g+Q8ad1zE4t4mwSc7MUyUf0PAZqLHGKzzcAb1Jy22Fvvu0TnANWbmVBM+Ml3SCJ+673CR0PRXA+afk8wsGnuZsMAgVgs/oeAfBe3epWLEHyazxvofCS29bg+tx4ANyAYk7sy9gfIndeO67MMU2erdyxeRnpBvhtV9Tbp7aWfTBdVyxA5iO2OboADu+uWy78/f/yMuii/7djpN1PfoLRrxIg7QXoAl+kiN05K/9c9ogqGVBGsErOGIRKNCVzg8QmwSjtGXXXIHR2tAorlnK2CVvqBHgitc081wneT3EtnHCS/CAEB69K2oHlWVhisgfXVH01XTKg+t0oWeDhtHpebPSmUgmnbmhoROLwIqrhFdV6xp/p6T1eRYLswl2psfv1rPm4THIQNckT2Ye2hW0iS6oeSgYrf64kgI5Ab8kGnA47nNixo+vNpuoLNI6sY+QE/vzMCZf0/5KetKyCKvQJNwMdU3F7Rh84mWPa0OHK0bLIpqhA4N3DUY/cNzl+zARZUhJBdDMGd0OHNKCvcd6nIZ/Fd8dbrCow0s4kNEPvufSmxaLew22OPK9j1MC0MzJZO0Z+3IERxtN6X3A82peh+MgZz1s3KBjgahoR+8polJM04JkIBwx/hdHvodoq+ORGLuZoBJzVmYSX3imtmOVndC63O9rhAqI5L3amrKtqS+GQNBMPRFNgaZQP3qg02jfuyd27E/8EAKxG605XEm5eaC7k661RgEx3Zl3szcM93m3W87EaiWYnN0lMaPSQ8x7reG40rHAYNQzcTMZFwyjRJ/1ZN2BnOCHMT4mNEb4lPaR7zzvZsFxnxkN86Ty3nGe+IwxzCwTPU+RH84pa5t1Fx+fOX7VVcNpZyXQ9XyjfRWmPLbd8B99lDKbpeIy9USivXPOsD+r7A9YinOXWiOMO4ZxL5lZ1yh7KpV/Ud5lFuKcBCj8K/DbboayOqTjJmKLlhTox0jRMJwGZhQJhixt2oMHi1khZjz5EimHT3gu0fuLGiE8Bi7NzzyCiY5ra5Pv0hHufVGPbh9x3TcIKR3Urt537Dzn8uxfTyd59zqc971ez1PijC+RZYbzt2Ik0pfd7PaxHHseNJtlRNlYyz3Db8G1Dnk9ZoFnPDoMWZjzBvd50m3le53gXYGDKyvvrPpnJRUbhH73FibZFwKaNqv2ZuFjn/cspKrZ9uwkSpA1lqD76G8Xzlr+ZF6teFieSxVn9czy53dr7D9N2NoNJZ7sm29Ux5hWZjvqLJ99pQTC5T1gibXA5eFxuDtvaQTrNmqxcyY71H9j3EFliwJNIK1BLoAcpuM+y1hY1Tt4fJ/zvULjwKIkn2/f7xFiXDWBcmee/kvdaN9b+OFA/06CQO0etSTEU/4PXt0wzmx8ThOWxaDiMpS/TgXxhORW/p5wAxmgp4E+d4wV+VzceD0bjJ2X+UVhZ5TonOArjIpn8pZJ6B1wZ+8Pyrh7R/DeRNxHyea7EeRukUCxRK2zY7LCjGgAxVHsR+lZVGsNPoFWC61BN3CzbC86bkmEtf9FgL8p8N9cyan635Q7w8u404mfTohPpHwN3DnbxuTLpk38vOh5CZ+GywjlPnDZMeN8LmsXxAZMW6CyHDfV5kHsaeHFwKIBUUnD01zOcxoVhnlYdshwu0e0G24+aUsCMwdBU9MEmffpoB/p5UO2s5SfR2EKnI06gH9Aeh/PvdsOdDY2mflKpZvH3aDtDOaTuLc0GKM6UAAAIABJREFUnHF+b5D1lvCleQOU/bH6I3z6goK5b71sAe19uwfMuag9SQ6gkjww6LwrXvsNAPAiBz4RnwsE7+xA2/mIVQ+fS+FTZ8n6LUkvd3EJkJOUE7+zXA+Z8KgzuY1z258Ji7jV4XRWTG1K+8h1yGco3hEQdGDrKQhnnPgseEs+n+RfTbJIv+mtOyn5+2NElhSu/rket0EKLjkDVvoenqmI+5dZ98FXbLdi2yrnt7xDtWaaTC+ZgAe/dmWM+DOnoWTrXetzOq4z8bKw6WxXzrbCZvPGGpz+HoQAwHVv8u05zc4UK5UoywLHCaS5pE0F5xS2S8x9NfPGEww/6dI3JH4yT6VTx2l5rwbced1zup1ZeAeMkkwxTWbtlMUc/0BCDWM9X2nml3fFxfHgVDyTStzkEmMGY2RXEIKUBVSIucdJYpllZHB1HY5ZPzSbNUz8SV6x0CVv6I590npApY87xNuLOdCPsL+ajUWajFMXx2KYXO6tBr/vABYgjj2PXSSaeiOcox1AG5Nn2lvcIdzbMa4KET8GViFNoeYgznvOYc56si+InTrZxu7o9vU+an0QZ184jJJHlye/pbaTTBxtLhQn3r5xlHPs8Dcaug4iBcuXYcOmVh1DRj9yvy52EAc+xpVndizL1813TQqowtHhMhqJI/s6+FoUmSjO83RzIlZ5KlUBKGguRhGLp8Jh1+G+l6AvoDaDmuUY0oBH4ecOieEyGRF5HDeB6DQSZTqOIVP9E88yqmWKn2GmJgcRkhdrnfeZMm/o7SysqbTgczgwM35xrFr7WfJEPKV0Wk8/mRaxnt3ENOHvlIcg7qewE3wzMAy3JBxZlJ9QphWMxVmxYnewBfdT3mE9Fh96C3mRC4DeoXL4we6xqN3PRnAHpF+NUKew7umxs3Sbb6rhoM7FCygYV5CTl9CxK5kd3em4zrjYEc6Ob+PtuBOc46cy08luec6c5yQXdIK3OMfvYkszX+BGC90jZNUev2VRwMaRjwVGzSPsvd70iIdomJ3KpW/I7vB8gHOYO+El+VDrX6iOU9wIqT3JDJYghxZkp0rKxT1FrrKMReEfFk7nm7+4QJLjG64xebSGbwnDj/CWUMcIpx30x4Siez3iXoY3jF1OpfhbgivUDd9Mi2cYla7dY/6gCeTScLxraO+GG7Z/Umh/HbvQAxFZB4+fctmwYDElvvNQ5e1fCPBN+OFA/zPCYpzygG0MgtNQqUwavDLvsvGPxQk2Zbf3ZEvJAWGBa6mW6vN0rCin9kh+rvwxcTobMfZgC1gjXRp0U9vuhgdGtMESwugZnfG1fP4WnXTmpI0ytPxsy3/KMJpHvP66yydYCWpTFs+v7GDjVc0CHDbdc+2v2cetjWNMbNV+g+DTx+GMkncvtWCjvx6rwRTowOd+haChNVvR/P4dcPtX4NN/nNO2hRjwNbWZvmqYL2GO5/KUcUOatezoyTSLyoyJuYzy3zIsWpQ5TayzXPDIJrVLy3fx2TjUQlxhb3iey4YW+AikUs6ekmjAsaBbc+QUMmjiBVW7ENPpx+pSBQ7fwRKu6AlulL4UuHHJNMBwSRmsAT6IwjmtnAUFxj3aH7J9VLYg1zsACtGPdiehOc9vtgt9mRiZ4dAJZpLZ38IQC3TdKehkbHU6kn0yrBS1c4ivFWjsfnic9tuFNIXDCAYqH84i96k+GowXd8r6xMOt41WBqyguTXBIMz+h4HOROoUZqEL/XStf1mrp4L8gAaGJGdfzdKToTKY0XUMfNrbDU2GTMOyWCngP8stJem/6xZyq/uXMiZ6TWKOkzZk7xYa7R2GKsTEMyB3t7le9AlARuDZ8xZj0u1iJh8GQMI34G16hUHxSxBelDqisOcv5Zlvge7XxTE/lO+Uhuy0n3hweMa+R4N/lU+rEBgANv4R8HmnFHez2lxNWxj/kfB/ZXIdRGhEUB3zAPyyNPOIjQSxXtSx8auU0X9DgR7QZMYnvcR0ImMfYiw3ds65il8ZLDzjMjQeCsCbFFOneMuZ3wRhvEJqKncJyamr7nD7VYtWhYQw8LU5H4pQfwHIsP5L27hc7fz1J/VCeLAglkyDtGZaQrga3RT8jv56UcffM/Ir2E1uAJnvblCba5J0Rut36vExe0yS+ah57TjLAYZmXkLHsjIr63OdCTxr/D9nguHZHTLO2lKmmGRyo3dvufAQ1UmsCaQfxb8r4kWwIKrbQvJ5m31/kwLgJWCBNMe51d43gJ2D0Mh/vR7yrmtusNRyW4LBabi4mRU0U+i5oP9mk6qOuedyy6zh3YPvZII6ZHvk8SiHSooXiAppEou9EB8biBb/bNsSDO+FVbdhhcktG3psM1FSaYC7y/rO9+N4GTsOnaMQxK9Tr00KSRU+JQtFGMcUpm30bT7ET0vpIEGObvGfeDrmme64Yp0AZgWxY3R1qDku3HbPugMvrEgZMK+p48YOXMh0wArfT2FnNxwkXkD2TstT1Ap0gSE74uwLzmTwj1cXKVgQBF5ODZAvXUcqhY1Tnb0sbll7Pcl1+kSOzKCDvC782QX05Ry3b86nmTuJs71T35Jjkbzo/b5zj0X+b/BGyaQUfEmPEbSezAMAcBt7UaEltikQhvePWUtd7Hc1sBG0NR9fhRJekoWbSoulY/CMwG0pdg5B90xRAp5Prz/p+C7U9acGv48hxXeTfEkflBK3QjnNUWgjnOhBHuIcjHDrG8Eq8Lgj5UuCx/uPj27mOjB/ldoKRf1eU6PSaNOKfIxk5tHd0u5Zd32cc+1Hu4Tz31qg7vT1Wg6dKkVPbdqf/CL8THAWxnJdg5Izi9mfMq2oo7TqU+G380CK9+8jx0xHz5BYle+xheCLJed43ZBYSJKXirVGe5ftgZGM+b59/hD8msE5A8vOj0dRT5b41C+lZJZ48LVPqQzkhLgQWKs2VMrba+C0QYyVopBCg09+WVG6ANYFcBO3dBS8/vYOq4vqPK/R1XOUEt4lg7bP+mkTP9xl2tsr07a3T499r+OFA/57CYpOcCTNn1I1imtPxKG2talvsw+DHlQHIkZvupIWtuBn3G6EdNiN8y/oIEDewfOVq1CEj+5t4LvT8d8KpJzL3TfmfiYPXI4S8rww8CT3X8bPQxDWluUu6frxpHnPa53xGusPRI/YuoUB2xebKeklw4BMvGqlWGOm9lG3xfxPgV/7ORPugsTwZ7Q7d4mDXFQ5/mycjprLLfMOG92pzqY32p+0k7xh9TIbJvfDsKIoryG8NVeYJ6nzQKMpHNjSi4wkARnPveWSkcIN9ACCEknkybex18fvRx12YXsauPd+Av0o7fwN0PdY9yUiB/g8A5ji3iQtVHUe5DwSc0Cnjax4I/dXDexTh8aZwoiRL+OnOt2dwyFb9DvcP6jcduM3+SDf4pIx2KDpeBbjGApoxmX3YrrDhPwxpeiaaIo5YapqM2K281zpAIpGo2/RnFT8KO2X7jALmNO4CcIvEv6S77DOAd9l45ES1lK4Rep5rekZy7oZ78/fAnmB7zdySbgPhEBGpj7iravD0Qjr3nqw3G1CBMttUHNv+DYA0/OI6X4D37UOkvxkffDAn+EdQPnLssN4T8as7BGJ0f8MVf2tjgc1HucId3+50VySswuUFjNQGMaTPerbguWieinra5ViIhcurkUW1p57WAGlxogtwuiuklD/lAS0miWQ68PhE0PnlTrbw5arbPpM8n/ILf7sTCo5IDH+xvJnU6mwnuSjcSfw5fy33eVnHcnlvQrpMWisb+GCDSaOvl2Km53A0edqyyqEX52PwEGB3mkotjEBjOJNCZ33OmKx8FLwLxNG8w8XVrI963Inue4X5jvYusHuu7Zh4uqaMj1xugDnFgSs6Ha/eStMOK+vFjHSBXauh3RybLDOAWPAqjo3hzBbtdnS56aPggZT3gTMFFB2QYyyspPEYLzBWIxrRcW+rwkWDhPNbfeGwNKh2dHOihx1p9bYQ7ZIL39XwZ3QVC2cD/LFAQDB2ZzsJdfBR/t5QtkNGD/ipW95fTjGZzsPuJJsT28COiV6l4+gnP3Fg7PpnnedyxR3mgw6d1iT6M53/XmdSskx61ngsnNsadbgjbTiVSvIoiyAnnMQI21hYkp1E1vKCvz3uCTkr9TeE01amjm/Z7nvlPy8X3xJSkg1uO9OO6d7znbUwGqeCoJRfSvpSlgo49a6uQPnkKM0gtXs43SQfcriniwO9LJVZDD1fLHqirFzmWnXjdIvBA915xpyCN0jIHFUdSylCLgJAR5Nmu9h7XHcx/rt3Wpdufuc//r7P/Sjo8mxawe0p5peJViKfj40KzXC56Xx3B3js5lamvdrXM4XVVtflG/P6iKiTIgNzk/P6Hg7LrvOA8Sz9Yg0BkFhEME4CyfoHKdfFyfmT8qVsdGCZMjfO26PIdp2DyyDeTeMbJ1wHxkEMtrgtFpZ1QFuSjtuwEkY7bEWan7zyBGy/S/hKmevAF+PUv+3Ss214pjN+hD8irHbUtywZOCVodUZ5UAyx+rwvrPpu7zA2R39pY22ss1yzOgmL5VZFs5nlEBzuQO8KfQH65WpHPs72WGYOWcEK+Hvxc/2ThR8O9D8tsKInSbBMNGzEmQCL83zZgerfLT/txtFi8FGZYZDMoLrV7TvW+10BJCYhRksaVI68g8a9Ze7kaUorxgdcQ4ZKTLrUnUu7cEcg38tG4P9h4udbVLTYn7PSMbOMdlit1cryW9XbHRp0+nNNAH6fQbPBE+eBwHez+RDtIg2f220sslAdZxICuMgBiTq8jBUfr7dXxEINjKOKm/geFCc8378ntdPnEQjXQccu5o7mk7CAptQ3btxPZXumqV0+sPRPc/fGEX2UbSGBWT4IVe/XkN1pCruNMpYGVlHrCZ9Fci2fhT4yRfj/C0zsNPcUHsebh31QJDYZ5w6QJmNCrwN5R8RMrytdOYRxuGMx7nby89ng+NrgbW68pgE2RG8H9BZHtkvv48jLfrOV67zLaSqoOM9rRQ9M2/M2LLNmU/xuNekp0a3yIyKinPc1nsrVs74JQjzppHtb+L5p+IKhCYnLovdjEGHS+t6qddr5Ck/SfQQ/7t28emWhDpwjJapsZryL1xfVV7vB9YcSHZZpHoNV7chsPgXnphP9WG6fiGYhctbcu6GgP+uV9WMJ1z4moC9t7KTquEEg+GQd9MH2fHtbeRKVKy5qh6rzaUJajljrn+L5znUAsfN83vnu+k9jp/Jl3H0ut7iLceqdJazfTJ+6nbbjrcV2kPrOupxtg5bO81yY17JIsXeyN+LUj1LuoG2xBZxhCzUsaVWOqh/Fdg7mkR/Jd2K8JBJpDYja1O2gOn+TDoiPmDhCfnJ+OobXdryPiXAPGs1SoWOyA/2ai/LmXi1d6OUwPbeCCqiuc9viqacme+GnSibpoDrRKTndqSgVlQ9DA9IJeWKqLAfh78ouAsf7cdghjD4Xe9vmfgP7P/hg+04fzCGx0zrVYa0FLin95kVVI6VOzXtdcNIpsCkVqj6zfMeWrnhbZUeRVjFBW1vZpZfdtkIHm/sooKlARMl5Pkr3TZQ3cwo1AKINaHnRiXPE2NE9YnghRVfgxaSuM6QCtijTwVaDLPkjrz5yR36O11/Vd3C7AzVhCfeoAq33sWCoD70ZE/nRTXyUO5+UP4zN7NvhwHdl2xzXkjveAR9ZpVxRW8GQ97A7zFJ4ZfCjHcnfvV/ZQBwCufkiJjSI6d3R9eaUlsTYwrZbI2FO5UKnbb/GmCLuPG+IY+2NlnPhyHDm+D3PzXb/x4KgaF5KDI1O4irNoavuWMt4KPGjjYPCX0HQ+3KQEXMLGk9xOx66tyYcS4w8mcqZuTNlN5A0EToiJMCRuUr5cxwJ/YKTzRzGosL28oQXF4733ACSTsjgqvEtHHOZJ53QRse+AMdU80y93q6MkylegGIjVzlLHEUwzW0np6qTGCM0aEUrntXctPTuIRal6DlOU7APGdeMP0SHDOkm30RN97bB60fgtYdF0U2CDHk6eLGFvdqDqHwnXp2/5F9F3H2u8/c5KHin4PNB4XumC8ly3zidqdqiF28z0TulDbpRnZ6VFswwHdCz9X8sA9GaB5TOaaWczEA8H3ZAiBangTvY0HTD5+ISxpU/Oe0nLtTiox6dclEXKn9fEEhyRusiJc7vD8XySCGQ7XmwYIDhYpkYa2kdJl5863U08f1nnDN1tC+a6hr0/gVE+g2C49Rf7/DRLu0y//OEsX6O9gy80OBH+OahnBy1T/EwLqdw9uXwiTiPSr4HBg3zH6R9UPJEvm8NuXgHCDnkP8wK1EJpgLw0HO8PvPz8Dr13XN/dIL+Rr4NtP0VeqSS28DQS4gt12TcKk72R8RS32C7/M3j4hwP9zwoz/SgQdzBuPo8gVflHtEyzFsTM8wTfXDpPvPDsVSQlCVDqmKGQmCgwS2EMeeQYUW0MUOWlobWGrrRrUrrtkHNLzg0yKcXfZby/Aj++YYfJEr4i674QohEz3vKLVFBl6gcQTYHfuQafovFTCCy6SU5Mt5yB7T5Rw+Vhf5divpjiGjPK1YaDU1CLCYCAY0O6ETfj2fP8DcCvpCgj/aQ4ttqcCi/zD9SG6fN4b1F+LTUNdho6rI52zij5/JgMB+Y469ySU3ytKVER7GULcjXNpobAD8XHYMf/uFgq37+b7FMc4whNdKA3O06T9fpk/Jw1anFqzPC+IZzN5MuHk7brGFSpAv0D9PbfMUCPQgR0vCTnPQejtnyrXZ4LbzFC31TNlwr2hZHvV/FN5Ou98KCCYOTNiMB513eN0wB+SbfEUSTzbMy4ThmKQIFNiox6b/D7YpFSVSc9TRWtg6QsfP6mkX7t77OB2NvDeUfvv/ik/6ZPIkOVa8tgktqc//uvyfE3QD/Sy54MJvFUxOOwxvAZ8y6RAd/aYzu+GxX8q7wD0PAf+jlSBjyzKN0F1oHhYTJ7Qtw+EEgbQ/lXx5oAP5kb7FfcRgTbDQeVG2VJmMAQgbbE+y2OcvffUYmK0hUnfpyoT4ZppI3d6lG+wb3TwzgxDWaccGCiFI6c8zkdOW1p1KclzwNZajJhGpqPfARHmIvRf3v4Z04QR9Rb2XlizpigAR4g1dLZ9h8ygRbzYXQx0X/5cAcgJd7u06kdc9Z76H9Sza1kcI5PEXN6Pqysyt2C35KWpITm23hY7ZnhQPWFHgjaWYjacFzkPDGVlzPSFmlD8DrQ5syM+gRjXD3gbJ7d+dZlqcTh5Oiq40YcHY5PFUCb4qIHfGw0bK9b3Ieu6secjx2WHcArGgR2ghZsoZHt8u6x09K1qbnxxHenJ8rHTmSDhZCcR0Tb3e+GTEdHNFUr3XgZgrG7vUvWmzo4l0WJANo7bmIn1GgHWo6s/KhwtX67YeC/IydjFRhHuCN1kUByHkBdhs2LP8cR9IOOemBsiOCxmz/nL4XowXWDh51iIpp1GimUZfSheRC6uD1g+ip5pZmD2i2ZoZe6LzjUFnOcEkASLbNIgTvFUk6x92jEJ5MOfuSleiSbZNhv4vZeaaDxsYwxerfKGFOCpLEiZiQ4hxawEaYXQbrKB399RvRt0zgfbr5WS+bBd3V+NnwEqnf0AMRJBWrLk4x+s6Wa5RJHwW3laX5t1hFLOdMvp2W8Jt9rid8kDTrdKY9yFPaJbmHs9hgDjDFqU7tWwoDqTdD6SOt823U4xgVjAdEYtg552m1RzYEgYfgmhq06Pg1zSsXO0fB8eQCYj8C4dkA9mU7ZlMSGy449TzBcxT2tSVOIOFr0sbTJ6TDpsZa/Llm6G6Siz/Vu/NMZ4rU9+1beiSUUbVNao06twCB8k5EM/KaPzooQsIwYf7l02GSspXe7NBYkULChRIU5xuKnDfj9wqn9/FYjfQ5Vxr2pfW9j8h/hK8M6F7OcOYZzDpx56Lk6xYT5Gc89E9QcylnGo7KelnTP1A64LvfBMINBaoLtJOWP0tAuFxzvXoCXG47LATncllKMVXmtqByJ/30s/bV8+g3DKWqf0wR/xfDDgf6nhNlwIiNgb9PG93Vji+w/8KBm+nRaxb3VXWXmRusHNwiEGFwBwQHIMKa1jdvWLq1BjobWhxHdbwLtN+DmTvS8X3NY1TwY7BW+ZZXbJiwGjGw/MT5+X/Z+IPDu4f+rVt650EWlFbV3+/W7e2g+YuBDqByfkY7j29l4lPwV2hPgE9r+1drTAXQZ9wVee8ffXn7CZ+24Xl+BY9zVe4NC3r2gtbYoXD9uWN0ZLzeDWfG5d1yM/q7X66CxrRN0DpPhWxaQaAzm8JMC/5it4cSBMs5Yo5JBOTuHyrus3wlCqjYdKjV5HexVOCejIzLqPjmlLwbLjibrDApF7hRpQJ7DkZj9nEZPy7vDQL/qhgfs2CyFdCu5cd/70Gdu6Ypvx3GmJQNz29bst3rk2rP8O+PEmqcK6EdIv0G1j2M6rb3T/ok7ZW9gfRKqktiLcRkdjpQzmfzsqOhRuk/2O+9EnwerdxTpWZXf3BjdlbehLzOmtyQYtrLks8crUE5FiAVwzM5aywJI7tBuhFjOiyoaJqOkG2/ebKV8AXW2M+J7uo1nXKgByxRPJRRzY56oDZ6I4k7kEdftTSnyzqGzSRFd2wJVtJbIGc6BlLy/mUNXALyD4OYOXi4XsHvTYfvosrVXPA4COsAHA6s3DBI4SjzAk2NY3n16nzGjBUWYv+2A0XxRCHmnnmkMEXLQ+KjrvyD4ZZc2+MASi8TijtJhzaSm+A50gZiTXJ3XRsI8g5jaNU4sqfaKXyHEzvg0bXI3ejzvxB9yt+SphHtWTIazOzmH0cW6qv6e1auB/3KaIuenfmCRceZEl+BFz+cENttMUzqLy+yCpXA4q9d2b5ulRpqTXbaIOtulXq5XLd7HKLWg04cs9e7kmvxueKK/z6ySXdml70RPqufFAjsn1B6o5b7RIm/5WTBOPiE7aBIP0SWKwZ9BYu4EJhlpOqKniitORAIwrUrrP9/d1ZHvjWQgLfVFx3AMa9fYDenHmtu6HsOdHVeviiatWIewtNfWRz1dwtHeYqylpkMaLmj27E7obKS/a+hh7im/h3m02J0rTrJqiwmcPVW7OUAGwnxxcrJv6k8hvcx6oWMcDjYc6WJi0OjHRbH6cezpYIDVw7JRTH/7jvWJreDeY194gBib2oH5kjQgCTViS3AJLkNI1hRH5p7ifed8tqXFHfdsqyQducPc+8rr7aABIbKxpGEJz8GR7tRNMMc7XT8waJ7uRBffhTlookGhMuovHKo+3s8x3R4HWXdtsQZ/zzJmK3PuFT7lGO06EeiaSodVQB1f8S432X6vvFSBXB2gLsM0nKFdmcpSHpbD0W2OI/p38WJWOHb3W+f31ImL6pzaskj0uT2ALWhTAg5ZONHPfQUl6VgURbPjp1O22iKaphA9INoh0tHUlxABY/d5ywPgBYZDCRtCRNLeSOxOQRf0PgrPJucal3G8CVF3LtfFqQHZpja3Mc+hmHo//tVESver17rqHceZJvo9/oqEOQkrrDo9PFgTsOTjBQEOb+CPCttaVjPMCzD5WiAvcv9E8Je0ruEcLsCd8TFejAwpLWdsubNv7XKWU9R3OJGjT4UzHikAfVmxwPM2rRsQAcom40yPnH/GYgxu3sjob07/Pzss2JjHar9DYDviW4W6+3uq6G0FfQE/WN2z0FOEXvepApV8DzlyYBzjfjmAC9AuLa6Yo4LiJ30r9n/MW3xntL2Tr4vdMxsyf83ww4H+Z4Wvofl5Inn5fhLnE1FqgudZgbHIJ3X7OuDx4n0gOWxDjxgrxdGGA71h3NF26x29XdFvDR03qNxsWb1JjNZRZrNsEP11juS/aHjWmvIB7dN9u6avE7AlMf3tiuKyghLi+lPI35CzLIizAxVxOCkA4FV7TKRx3cWUGjNEyB3aWdYm9Xl4lMzoWPvMLwp8nCZkCOLcNeOTX3PaYlrDkxTMTu81x2qTSsmgmeqUFM4aXnG6S587LXbZvc7NgLGUpCkrCtgzAU4KeRr8+aRhyIUOwFa4wxdd2Ar44WlS4GeFftzJQOojzV2jfgRjTJx9sQx6lM+YQwBf5SzRNAU6OT1tQscn60aKXflz3KP33yk8ugIhwjPpJkf6E+PFh1W+KSFV9vMO3m9kGer0N1UdstQV8r0ZjHmM5GUmgSX/zQXQpD7NFBU7QMvsuBeZeChjg6ws8+gc/8ZQsp2VQYOejRN9TemT4GPCtPmx89R21jUKwWco3k3ynp3oXGO+b/TBBp6ZBHI6LSdtc5pNSgotOXgh1AmOlugbAMV/4IZxkd8sp2V6nsqfixSY/m5pDzTBv7Z3gIg5SQTvSUZ/DMfBbciT2CluOIiFIM187Q1+7BlE0ORiaRtu4SQfW9ebtNj9ftjg9NX0p9rCPPFFAqGwyW5i9J21+ZnAJtZiNiglCe1UKg0V+oVs5A67bdZdH24SM32v+7KnRFQveJLxQViSnMg8UYmbWwbPOl+s6n8B6bR2S9lNOkzInpvF8TvyeF57yGmiJY9UUkpnyKwAXHoExERyUuWEi/eI4lrtOG6TidvpnWmiLuw/BdnJXu9ENy5ri7pInZf9WR1NtWWjPi2wIJzsY3f42LnPWOq3sWtc2ljozQdaK3peqSDpPDo070xXY8gOxSEHoA0XGbt+b6JjIkbpNAvVOO69CyBCNRIOnc/dxPU+dlQ2jLu7YerujkZc4hwG7YouMqTkEK1oXaHN3cOzvjLN6X1hsHbNI+19v/stUviO1UpraUP4yyCW6D/xEwAGjriz4wqZsEtmoUo9fMJWvmM4h5q28GKyZXl8wEaRGD/4PEaqzJSMqgKVzqAH7N6fRe8LOcFIJ2TelL5+NoDgBYrXqafcEshTCxKyOzJJktYHDT4hrO20GuMMe753v/UfFBRFvqWD8amsBffRR5ouTEX2od9rXMVvdYimjbZ/R3nf430Gf9cc2ca+LZT2u/zpalcz+YKZ0W5P7MykAAAgAElEQVRR43/tQ77C8C62KFc8zk4AMrykafE1RtWK35nAdfp7NuymI+NUjCXxWm/K5fuLFXa2+tfs3tyHdQm+zjLZ4oqj3vvqS8Bx0b6CEj9PFbsCPv26nUZ0+8h5ToVrMjJIMQ294/N8ejJui0UBiU/VsbEjColyCTR16Qx8mSH/JweeqwNWtRu2zKYf0iD8Ed4Yzufv5/Ct5cfXhTT/20YW/gGwfpET3fMiT//cgColocbATA7bUHoAcdVcjAEMpon362Kyv3hYm/eXCj8c6F8R3ky/X2JhLCs3dolsIMaEKDvKZGXFoyVW5Gx5EDPH2NOUOgvp+MYTSGKrTn2Xz3D0tKPh0hS9K6TfcLs2AK8AgH61MnvPguPcM4eRZgG+BJ3PZjpN9ij/A2nwFA18qWSUk9/Nq09GAYFbF94KRjPRABMC79ASL0PG7i+ZBtVtPip1/P7b+7/jIg2HCI6YgBj3oV9eXsZ16FA0OfD+EDRp+K2/Dpq4YewUe3kZk0y/mUPt8J0sgnftglvvQzFd3kHbFfj0NwC/JmyzhT4b3tRc/RnAP/y7z6gkDuZbDXwldc5xeNrKm2KJJzUJmYGbSWsylKruz1mblAu6J085+SY75MwIwuY9B1abisp7HRYbTX2B4Rx8HSCO429CljQZR6yKDt/Pr95et2RoJGcD/mxWnVB+xJ8PbbC7y7R/g8ReJL/P7Yaxp+eW+f3P8Oxdtdids8zfDFhm/8cWrKXMSWe4yKZrGcL4C1gpnKGxzzuHHoXf7Pc9Vvp60joLkp6YvnzcvMv0MM+OLVXP01YnsHkxTgKC3OkvUzYSwUu3nNWkK6grAJtvc3pfKKOUmJtvsMa6FjIYXGV0zT1asVwlGnMWGEFPhlk8NWyzx73sDn/w/5gAfDV+Gl0yjvUdsAzefC9jcviT3Ur7Hocd7ToQc6O6+skzoDhQ9QE7o7I23y07dvMMcuE9S2Ni6zMUH+wXfnxmfBd0dOunlO8xITZfUQKg6C7ZfD4NZDNwOW5L0LHpGY+aZ85u34uvjQahY/GTZB3sRSrlSjjPg3C3ZdJ2a6pfhPLuxMiCJ53eKdpnZYt8sb6R3JVVwjKi5vxa3nn3pMR7hXXLXYQ6P/jCVagu7Zuk75kYPhHRWfZacKjtucKzoDrZFFrKYGmyFLs+kPzr8T4W8eWCQICPd960i8q5r6Xmr2uhZ3mF/jihqC+vUfB9wFFDyIFm8fNxs9V+mGnP9+E2+K5oq5zKUI+COdrNERqObLPDslCF6w0PeRy4Lrhkik51oum8aVlap7QNycvDQSxB9zfV4c1GAzSPrh4O9+QlBnvIVwl4fRfwizSaI77hqgdeRGL3tlqZubORyqW2phloEj+MOY3y1WUKHIcp41nvznTmeIt720FtLNSTLKZjmUGUoXFCztAxNx160w+D6vZdoHbvK0lIumt6QO3/dyi9+8UyscbZ7g9PPo2HpY0cv1JYIGDUo4kzEY1TLQZO6l5k2ovuFBqgpNrJHujFkarRn4lHeyrgsQ4RgBYQaNyZYGliQQiVSt6/WHgWn21hQogz1hoZzuUW7phom/7Q6RPrr1KGN7CnDRvynXGQBSqVWfWTMAUTndSUKcNol68aD0xqIa40Uj/onfNmedNDLWNCWvkq3pcbfR/5gZTZax3r20jPCitscN3nUCWqnhp20zxtwiXf0I19yDntwcHOd0Ne6bhWRxua3CzeThqItgx+r/t7SZ9b32uBvbZ8G11oLTiKXhmXe3IFwVid6GuvzrJ8Yn0E7qcuTNJJvtaFLkHfss0zNWzfiQ2Wu9ILBla4C0Uq/+RCnbmM0/IAFBpmnGwyKpB28ZSGDleq1USfcUFUxhnCSpwJIa9jT132ZSA3r4qoaf1wjez/qT27Mi0ND2VmKWfYoYqQ9e8mq5b5NwXKYrRdoDn7qJftRsU66OYGz/1wqjyKvXmealPmdxbq6Tn3wuMUD+s6kYdBK7uVQF9dZx1XZelzrwmlN5vJrp5ZSzqr6fnou4nidQ95PC5dclZZjsByM4bEb5cGPV6gxzX9JHOxJmPOtkTsheLX9Oem7Wt3Zfk78jyt+zvkya8A6YcD/YvCTulYfBjwEoP+Qkxu6R2tMmszA0NI9LuCcyXTFXkk3zoQjKExHzsofszWZNA5Y7J8EPqNPx+YSOwYrvcy81RFKuoYN1/Gi/hguJlubGbwyKs1TeOY94CvN0BccfseZT+6yw2rHfVLzmP6AKui6n4409thJT0ylc7CG5xDVM8Cl0wJy5mULqCndH6WpVMPO2y9LqF+g+/mmmDhSegmQ+g3gfqxp01qGlgaOYD2HrEruAl+bcC7dgDiR/kqpDW0Pmi2oUHkQG92864IVG31uoxDb6UdRkdknAXYYvF+VJ1fvr7yzvbV+E4nh/dZEUp8pY4rdyjONi09qiWduzdwehK269Il3wbvTO3bFSfztyG7bsF7O+AfUf/uCEX/Hf3gk2B+o7IjNo+r9F9W6GIyTW03tuTu8hjwebvt2MThf44r5aUd46icpiaPDBbDddPbWPjj7VAbQHi/kmFXTGDRhTQG+miQwIPSXVA/LlIB/WCr83+1nfN08KgTTlfIzTEq6D1hS8xP9QOoxwwSv5YJKPEGEHwzvCfvswBi5zR1ZaWtTnFS8Fz5Z6d/P2E91n1qx73A4797PBJlWojd52/QBksdku+732ABl29zeqOXhsp2c7fNbdDU3TKjbAfzbrJhEVrTc1ubytXUI61Jn2+7jPFMdskC6AL4BBQqbZGtll0jwe8z2sZdtK3Edx3H836GxO5zl23K+jlzwFdH2D5Diy8H6paW8/Ot3AWs6DJqVMD01dBbn6VDxScdFerC0CD0tNlQsnGYTtWxA5OTRINIJ/VijokM3c8IyDO1x3nA4r9CtoCX2fBRPsPtULeR0Y48wcad2swTMuS5y/b417hRLdLmr313O8ZlEmDHqx1TXm5n4k8Cp0zfRnY6a24P3hcTDQcJa323s8PDXsPo0+6iM+BzmLimYWN1cVcYNYZ3wsK7qe4oDvXjMVpZURwnpW3xgZ6nd/qenL5bXLiGiCtiaRzLrW7LzDatVKmy7ZdOXyezxodQCY8Er4QLLfpuY/j5w6kA3qz0cfqqkOwAx1h8J0VlQMYO66UEt3d9Ul6KOxPhjWW4t1UPynBHklWJ4F9YD/IYwXnfHOlNFAd6ys5OpOHFGnzdPDXuSI6rGZo5uYRcf2I7IHvisQmAA2jNdo8T/6SUFRzqC5ckhsLsVFQAja+UMNnzTsY96POCqeFQH/R5QO3OdJdWJl+cF+NYZA0yHMf2IqcHxOEZnNqgZhIwJ6nBb+7DoLuotWo2vx/dZKxEf2lOT0CNNEZcB+/SJuQQvnq5qs1+V+WRtEJ1u8waom1MtgJiO/pmG2XmTtJvXI96Wp9/cKkKqtvpZdClLywAfAHFzWgqnfGpd9x2J7gkUXAjR9ho12y8rc8uJXPsOEtF6xfj3XGGwDVyp8OJ7W5vrFgaenddAh6Xzm51oTKw6K5x7UEys51ZQbAfDnm5wj6aPekMPxVAl4SBAYqe3+x/wThhLmSfk2Mei99TlEHjn9jlWYQXAMr2laNVKpz17va9NRC1bRrXlXE2t4mjrAM2VYRDbyawQmMrTUExrg+bbAp+8SG5YOCud+AGBfoNqoKXi2lHzWFLl2NQhDbgGEtIW2uD3x2R3aSL0aSwTZStSnkzOSG728bZO/SH6T2Fk9PtWCCkgbvu8wLKpZLjWsbimG5C2ulIVaG9F8f3aJv3yWivGA0OmemOcmuD1dm5ftWAr5PzUjHY3LtXdSw4irlXi3P89ZAdButic9jJd6abmI+7vXVbyBRdRx3laaUjp6m8ONMbrs9Vc7iwp2Pqb/5AMjvMP6S+9HzJXlSItkxU5jMVY2wyLs1qmovnCn5c7gJ29dc4ySX6PDAwEofJkKgIYNPPnTojwfXUVQa7LTdzbyqLKHSHiPpc+OMM2aV6+2bXsgowjiHd1TnoPt7bWpA4hozWlmuVvI/C0eh5/8Sww83GPBlJN/206FTdfNsVyNZofdrVUeU3980u7HA6xU19s7JtGASo7uCQmMhB1ikgbwxntLDBKZFocvWG/p3mPJ0AOEyQdQG6QHEZ15KYMhTYolazzK96wSve4bf2AWivgHwE0IB+2HXGMeMy9JYIeuvD9m4uxPrjTUcKpGOHeJvs8zr+N3kSK3ynfiCRE1/DNpxwVGTJHfj+ouGHA/2rwoYxQ5f5g/3maBOLtoSU7IXoeJWwKV7Z0aQZMz7WGRNkln8RAB1xayZbH6GdBcFPJ39kr2b9we4TasSNIl8/LraIfzjN9TigtzacjYphkbhwsPbPmOZ19KsQLz/VQHpCr95LQutlTyqZC2GhtEu4q2Qq+242wYLs7bNuoiuNJpW4wTjRA3f+32UsAml8/Gobcd6GoJcXxES63zl6NHzsiv91aegiuMiBD20c337tHR9e3qOr4tdPH9EvB/72/mcAwNGOsRPkODB205nC9TZdDkB1HMEqg4QgivfHcMR//jyOkgtydYOs4FcTT+z8jD5nA2bCrSq2uL5n60yRQzeLbXY5IzA8jo9FE1z8AwYI2nMHz1z+iUIM+mCYNrxZ0grSmU47+1iGugInnhg2mgw50TUmGEeVO+Dc0Bj1ueuexfNIJUbeDeL7gLSNvOW+OLY9HC7nIU9Av0YThQROui2XeLizyNvu0wxjihM31x/WGnXKMXgNptjV5YOVAI3p2fHOdDzLDtdhqOqE8eD8sm3fzDM9cFbwFVWelKP+bUfH7kSfv5+ln5LMEBte9l0169QnQtGhs87ayPwz+a8g+epHaftglfA2N3nps8lcmevc5aU026M7Z/hLufRxyasVZl5wsVSe8nnsFr8D/M4YiXirs1w/z4PKUZdEhnQyDPCTW5tcIs9nX5ACd4c4xDk7oHi1si/2Pso/DDezOrpZGQfLWBl36LrciclyKBQdn+ETfcMB+gHAr+50jYubK87C1z/LN39zepvxuUmbE/H+jTGr+V3amJCXzMe7xtWPNottTZSe6WpZWJL9473Yew/4+7Qw7r28GDyCj/Jqj+N782/tGPcYA7iVBT/ZsqSXtKtCxDpsJc9sG86ycB+d7QQUNFk5Jy44yfY6zRG5Tt1ZOSGfrYaFhasMS0zonkyov7cVJaB1TfAsEnYhdETyxshsFi4VMkvyVPUU20n3E6gprnJprzs/fcIkr1hxPep5Mr5OZbl8m9yfC252yjGDRNlVtjrbs9mrlM7vyV6mZcKW2VRdsTWBpHDzYMhrtxWA3DkqCRiGY2SY8Aqf/FFJzEu0xHCniZ+cqLcVk0WHH5ZmtCWrNLvKvg0ev+XEdeDInxOCgRp7agoR2yGptLAIDQdyd/m1jGndOX6DQoaMT68oyYxBMzHPqb57Xmmey6H0xQWKwxfJ6JClkDzYJqebs12Zvy4PyB2jgq7NxumIKQp38NyMTGJSLmgmJWNpHOlvJaHizrEwgal947v3v/W4tuq0p/4pxO80CYaLlgeRbHZYk+KMbkLuJnCNeHs85tItZkAWw26L+x3GQK/TFBum2jo142MIL4oVkmfe8xmanQ6YaR0AEhpq+I74bEjuiJ5gUlSdbPFS+sLGRdP8iC8kUEdS4UNuNxXu4xvXN0FiGa/0HrrB5FpKY3Pyqw6nF8ZeDqd9T+kjZIc3oSIXqppk7fQ1Jx8qL5yEupPc4/hcAyrjTAjr9CzUWoZdq9SXJPR8F18+4PIoFXpYy9qHHHR9Imrz/GMBSuu31AeQkCFNFVejGznakMW8cItpk2hrMadcBk34iGKK8q5phNL6e7TXMqj2oJtwbDPz44bYUky9rO5U1sS9cn53hldvN8Gfjcrd5/ncSZaoap4qTDgpeECtIhzLjqP4Zq0TlDYF9xl/Nqd3482ES8KhH1c8DgU2iuoJXEhJ1Vjbs5vKmi2ORNMUH2XqqWwtJlo4m5hI1lC2fVD+hGtU5uOFOLGdUTZBCKF2suo0nZOO5Bkatk1CigFTbFSsNW+lM6nfZoY4DSynSI8sxy14w5ivid7LuCMXF4yIlDXeqrQNeJfudxSi+fchy80Ek15bCvLnOd0mD6GeUyffTnlOwTvngznMfDlTYCUjhqjKy4dVbvn9AT72BdirkNlTaVBLHmJknrcTBcROPrWTVMI+MrmScmLYuldteMULxvJK22xhf243Bj7b0KOjLtvYdesYs0MnsopZ0t6r3BnAzz1WyGumCe8e/53kGoIHdc1ba5ny/fXCDwf6nxYU6wxUfHmQc7EkyLDxHTxg/oDbm4DabgzSzrNFEcKjZUZyqBaoWaGdMRzVMRakJYON3TIyHKK+kqYD6De2KSBU8CP8zFgdxyl9KzZ9XpF807BUK/knlKBYG3PGKknD5FIX01MZ06RW/DYx5/nY0aXmEIfAHL5EL+FtcGe71N/WYqGHqO9g493vBD/tPHAjI9b1x2wgr14TiPhikYoPsQUcy7aqtuEtPp/0b5LHuO+C94UqFuPkm4RJG/5e6ueB8jxNX4JMf7vvm4JCea9Goh+TGiRvfzouZrQiIvIUVLWyfJTNxxl2pDs/VmHDxSud7rDIlDFAu8VxVzSQOmv99Knhw1jdrHYCgAggPwP4mHjQDlzamNXRUUiPXXLGaxMfOFLjWDdemKAEyNeQ1JndP6f5ZwzP4OZenlO2J12u87c75eIEnnvf5jQcGM7d86OPZ3JmnjV5czhDvD4NHw8zhvNgxLqDKtY40QA+y+CYXSfyJOqYaLrXLYhaU7bkP6TTHDqVTDlMNy3WVJhyZNNxzTE5T0aguG12stBkpxPKcbBkc7CNwTaE+Kkk6QAqiHG7o02VUf5cTJrf1NsU6olsnmhv/s6O3l2vltCkiFZQn61hiluM2F0FMtGw1m+bKp66r/aJEBqFu4/BKKiaJ/vvhDtyMtGoJ+0wfj1dYJXlb+8UBeoc1/TLmpQ/F+c+2dQlrxsNRBBlZ0OZvDR6NbskbJ0F2v17SpB6PDvDrVPa/MbOWLejJhg3E+gzxt08Eq9jBy7xkI9dc+8uzPHCmPWs9bkGWlrtOrEslLFvwq6wkbYjbUtRAeRi1lSz2yUUIr06djGc7S1kBMxR7e1XNHeWABBRm+6i018UsWNbxGGztmlYboMW1FR9aXZyWMqs3FPCInLI3uw5H6awTsipd69ojLK62E5DBbp022WTHdtltCOvKekoY6fo66nLkimnb47TER/OOvtVW2A/8LzmH6eOeRs8TwJQREjYxRW4VcaPhc2iw+ns8PjO0uHgaGa2CES7pckFB7NejbpRnZkyp6vYWlEVfCk1gXKiF3vOnejVZqmFii1mq8sK5b4euSfqA/+S8LLQlSvRvGfhfqUpy+jPcxBm5zl/jN284bTMOFVA+5X8O8YRxthjhy6dLhQnWCVe0jHKZJWyM31Ij3QjybMoeyf7qOH34h0g8bZXWtxmm5UI0hmpzluT/cH86ovBBYKuHd0WgA/Z6Y4GQLWjq6DfGm7S0WxRUSxOsTLFYGWZFziK/nyE110wynuQ9f6c4n1rpyzjcEIPhzo8osiqM4B0l0Kn9zkPZbjbzJk2SmZryRO06/q10PvMa/YcTkSq+7QGJlvH527OJWS7v1Y6zQ9SETrXQ9/UaVEBvvs8nYRaio32PiIstbbscP9NgsvbB2nO7Ocnq7gfecc2/z2a/E8WtKwS+c7DN6Xx76DRQcMb2VVOITM9BcW4jqZvZNdmTmXyh6T4Omn7w0kKl1nfAe7+guGHA/3PCmdKxpjhro4rgxAgnYdkuvGkmvNHsdh8ByBqegFy4tEdOP49GW0BbzOTUlNKfL4537sA8MnPy5GLadRgRC3LxdIzYpeNsVxJ+zUC+w0Dll2YBd0OFp7xmG2OstTHOoXjY0ZKpoxzBWPwFbtcuSpeLOG7y8Wc315Wa8AxVggLOcS1SR7FGmUBYyeI/R3mPD8aXl6aOeCBn+TAb2j49Okj3PF+68DL+3dWzoDw0to4AOXyHgLg4/V1kP8x6nx3eTfaI+lW6LZa65A2Jr/kZ2j/70QV0eyq9mRJk7S+63yHdcb7htf8Red0VOE0YKmJFc87mEoDN7BM3/dzN4/L3z4LVuS9oVwnI9AEp+NGeiyC0N6AQ8tq5sors9OIpAkteLDhax03OXo2cq4GH/hU5PkOD16p7JMAaSZ9GBwpPtk5HEba3KVvGS+XAe9F4RNhKqhH+ag50WPUOjeb6EuAhbQMtvOw7mTJsnehKIX7aWWm+2fC7vj2bxF2cJyM9OQhcXw5CMyPrhqDtTTjlHD3aMyqT3y7l39Jbzzk8M597Xo90ugJDdwbADISphMfdnkCbyf0dELCLgmYDH0BInyyj+hgqDrF1UymQ8bd6L/haqiopvZL5OVOEJI7004gu/cxc2QqhyOc55KliBwQO3byM5HnvGrYy5SQkTK9FyTU8JRT1m0VrSoh7IVLRPou95ut6M4rVMjeCbSN/GOi1mBtvgPYdId/F6Gd66RRDPx/mCwdnx0Whz93OmbVY2HeQe3vuBoLurzjs6cp9z179ExGnqH5CXET7PgW0TSlTRE0IpdujybKTNZ3Kp3tH9S89j7PeVZ2XxFWHBZ3TDGOUs44mVmxr8VF1lSsLHCkvPD06k4LqNGq1yqU1Rbvmd3y7NIDOufgYY4snx7C2VMdTXE06+REz5ZSXUXO2ujC8MT3YkcBKrGrPOw5x7N9d7zyKUOxo8VRJ1XtuXwYJfWJjhNej+43xRWK1jr4HIEDgqZ2fYECMIfZcBjd4M5zkQaeQu+q5oAfQN76KNsdvSI5zPWbIoYD3Y5cl2bwr4wwq1Z/VhG7pCP5UkDjXnOoz7gQ02WxYAO+G37A3wAcoiGm/caNHA06zSF2ijeYE33Wu6vnn1qhUyeCHHCOc4rz4DavO6knckzo7Oew2BvLKDuV5UZj3LkMc4QPjm2GA+K6qELhJ6IFtbaRS258DL5WGUUoCjlL44gC1SIyLWInJOPVSohj7i8AXu+L5qmK++mM52gB2mNbQcLMybka/+Q7nCnPzrkbdtgaZuc5pwtJZ6LNd+vyjuDep0WHljN2+Fqby13RaCHV1e5pn+Hzvi13Id/Freu0Sie7NNvXjcc0dE8s9t6XO0/hu+OwHLVckiSvpZM5z7Nwp33XjoYWpyZ5CjW67XpDu8lYtCN24oXDM8mAiv8JDa6vnqBxMfhCDVFzJHTPrhLcpcMsv2aqdJkO82wPOZGnOYVyN7hSSa7DmbZ2EITzZg/1HLfQG6F8vmt9SRxgaqGLuuteJ/rm7wY9zefugUu8xa9sYKc8oaJ4nmQuVzghah3MN/HsbTLKn48BoKK2IWRSpnvWZH8uMIHPQWqy3fOjou999BM/GQ/R2AegFR7byNQfYQ0bvv3jQTgVzvX3LDz03Xw77uBFX6XuhxkxwSchNwZJs7xx2TGOX9d+g/j1HSxUPIcYHFt7imGUyFLef4TfLfxwoP9VgwJ5x3pGx4DIv8cdajlwGwk39yYEozLTeqG6juJWgCJ6M19hr2q7Coag6CYY2jEmI8VmF7R7OgPHDFgXM4ucOQOtGPJ/ZpjwtQVnMl62wnseyc5p5qkVfs1vcpYGYg7yA3I0tDbu6+i2ShgikL9j7Bxvwyk+fAUydlyxAx6gHegS96W7I12OI3aux12sfgR8a4DENBOStnJSjukt7hp3mvHBmigUN8B3rjVzKsZuAJRfmeKC1qYB1cJ0kYYtXt2ke0SHYa3TE9c5W7VfSdenBuvDGZMp7S7OC5c76XaApPERd5wZH4d48qNu7Ih+RbdJwLRaVjkhWVNMFo8jd5Q8khZraWkQNrPdKer3H0KMhgGlw4jS9+Zgv0Jag7Qeolft3t1xz68ZYT7r2gTaGrRdoVcZK05uecexH++eBhuwPeCKBy+aePprhEeO89+7LTtZvOPLNxjisnnnX6P5XKDE1Z4M0Cfb/ulvS5p5RH9HFzkDyvQtZol3lZ0NtnZxtsONZfZWFOlJsbsMOdw5sXCglMaPJWxpYMVEGJBXwDVa6CQAPoHyAXi3hW1+y4mqdJI3fAbpT9DEsLg7JJ3r6vYQ02j0kxtvUu0PGpeVNSLbcKpQKHi5ZFMA1XYoi/BaxvGRzy13yA37wrN4GaCyuGwCMSZM3cmO+CuOGpn+HrWS+EOM/t9kg858/ZWh9Mq2i/at8SHGaDYfRjxNNE/579YVjCT3kejkqdPViEGq+8x30TyJgpr2RHaKgNiXnqvgrGdHONMoYpI6JsYleDTsVM3WDLSYXbyrCi59pro2Qr+cEGB0Hjv0laVd1VpDsmhdnxmTzmxcMQS8JECLfF8k6jDCggZmCzHWzMR3r8Hgnpocr4wwwm84qTxvyDyF3oYqGbeIXSGHoOMYvlbHi9OAy0ZtVk5Dg9gOdR+f3mCuIEDsvu+b7+QdcOWd6BL3BY/yOvwidne2p8iR0BfAkE8XjHHyOIVLYle82PvAmBAqx72tKl6Hu4NHJU3zWHuBr5VWHCLhRK9iUsPsUHHn+ajP9zgH3Zc7yjcCTrXce+2pVWyhtbVZRce4wPpU+qBpd2hHfndy2rkuKllXmgTWGGWrf4XB8+TC3eHcE1qf4X0kbG+IHd+ttBhruR6p0m/aGYh5D2+JL3RIABlCLlOjXVVpMae9QN2Jzm2W/Sk4Z2Gbejd3schlljYn+keouSzzy4e1tIiTW1hF6Mk9vvM1nOb9OuyjDvTbLey6LNPkuCLsKNWrnUaUstRu+k7HOakBLy9EZzgNSQC2oukiUy6+igbQ6RyMw53y22CG7ncvdUz53V6sEQC6LWg5c27Ea8Lk0mgsVhg8XGiH7M04vpZkvdD/xoL0kDCo9+nvNOe3m0/UGZnAJk18CfpjR7HC9Uc6wZ3WvF2gds3rBnTTzXP95TnUeMIbVE8O+N31CkD30VgAACAASURBVAiIiUOYxrWmGAtSenWeOw/GXfAJ4bN9lyfqMZKotWfF6JTEgd7JIS6SbjUMWV3ZktFneolg1ZVV2DpymjgH/K3hXLZ+UVFf9N0RJmTYnSUt2u+pugJd8fCN2vs/KHwvGNGZT/90vwyHQTvLIs03hzVvoUoXAkP4jWtI/cqYEEb8Cza442DoEr+RKafmwI/wzcIPB/p3FHR+4QEQK1W2nHY7UIlbeQVf2rQdY/JyCkLl+XPMoA1OrXs42TgW1Ilqt3pJIarYUWduZWCUe9gRea0NB5CMVXv9eoPaBLkXvZqkjiOEIV2EFevi31WYTELz9AgBnvnZpZGTZ+5z+h7jYRokF2k7v/JQf/yvXIYdzy4vFxzHgXYc0LHnO8u7iF0Z6DvLLZ85y8WOcVcCR+TvlE6Ay4FX7eZAVxvO09HtTSA48Pn1E1QFl+NiA1KhgYYZ5AII3W14046LtDhqV5mWXwR47dNUywblTlqbdSaR4Bkd69clAJOxMFXksaXMeljlmv58dLCu+rtH/LLgI/n7meyyeZ81PE7eV1hS1iDv5hMiYy9eAZE2Nnw0lzHWL3bARk601npdiinniW+aItdTn8qPTeQ0uRM1q7XH76s24wl6hfO3NhkLUpy13AmO94D8FnwhMk58UGno5kTH622AcwPivnTbBZHtJ31SxMuDweNO9zwzyHnQ1bUO/iZPyOv3Dyr4s8IZTBuEPGOoz2PKEAVzHz4J3r1+WXTMHOR+uhgAkO45rY8KIT4vn54J91TtZBtsQVg+2UCKnkVq8tmJPo6ZVJLYKa8VwE8Yd+x+xKulGaOgrsPe+c0AtsMqbYd66jUv74orgI6GCyBijvEOXxDpE1F/bx+g6PhVP5s8G5PD/1veRVn/Nz4barwtfvQwTfaX37P9sBu9dsz9r/hfx4ewAf6//ml87EMmqnS7NkzwoY1TZz7KZ7MnXsavWPtMR+TxsoB7sMbu9WEnsOPc7YSwgXbOcSCd6BjHtf4ko+4bssyrvFqrb7WnzQ4RtzcAk+1ZbVDPzpZbcJlN8PLvqPwtH5yycTHrXbmeMJ9iwZcw0krCjM6dwhtbqci0yfU1TzyrkjntJydxIVR3/GzaUMqcHu7ImxAjSwdUJllw7QfAuB1K6PEyw5Ee6s70q3vmyjDtTNibbbtrBDuCohJeEGD2j/0NuIa137zYYk9qVKX0PtCjNLcjNCHPOOIlfBmXPEc5ZrPLTTzGAJl9JT6K1zDfoN6F2REurxUAbsMcuwlw7eNkI4HgooIW7lmT3tJw2D2F3itdFGp3GzbDWbMFAF2Gcxpie9zt+abdrq4a8qmJHSzkogs0tFKXMQ6+OccFdgx8ElLKb/GGluD9JJkl180r9YnChnhjUrFByj9F3p89X50gGEsJwunwSHVEpxTNC8Dvlcw+FxPmoYutAeyQU2+HV6Ogg12CSgO+2WnDtBfl0gkSfuKJ07/r/XL1h7aIr84Dkls69F6cN0G0nIvFF4UxurYzzBv5HVHMHSxHLkQs5EyXuV6ulMsx/ep1TQ6QOXmdIAbJJK3PETxegfZS45FyvlMellXpxKP/XeSrhsMS6GMo1sfuaAZDoySSM+QAdcJU5F/872s8jXAZsqLn4sPMEEQMpY0rvRYmKyikvi9CkqD1xgUBKGUxvirC2Oc17JQiNpAjq8sGPq9i7PRv4Rx2e87ymI1F3JnCSb1Ub5akE536NHZfk7zeiZ6zwM4TX8CSJH1uhK2OT7tmIlOAKa5cIQCisXjWaFpQcpG18I5Lp3b8MklRXzox6kl5UT9jmslyqosYavATw86LAFYHuUKhk/O8wpHlz5gt8yv23X9nOk/7IhsX5alygzPNHIaI2KQlG3dKnnTodWqZxl+q8DTRPOb9U0v+y4PZIFPkWlfx+jtMky16j8Ecx64kfFU5QHar1vRnzT1lP83/ubjfAW3fe2ATd8g/rDhL4bAt4+xSl0fBef1+It3/Pgpni7W+VfimxUr5GSaCE2aH7z5Ht2eXx7xCB5r8IcCy+N/Lb1O2cxU1Sv2d0PfPGH440L/n4ArujOLvKYkTPZcKa/IMBmNKGol+hLtrPxuM+y4AByAPGpQoajYn3ABX+EL0BKy1A9IETceReArgFsfiTZM9XrJXUgYhji9McwZ6F1W/X6DavlpoPQv5JGG5Xz2i9DOnFdsZfsFxXNAuF1xeLrjF9JENROK0VT+6HWPg47vLWdhD/RxA5PYFSUe6CPWVjt21GOUNlSJL03dU5oMkoxi01gBV3BTwAyRHs4n+C16WIg0lMrGfAj9jvQdd1uJy8QrRLL0u9S6WzmT13w2z9b/h8V04JatnCVamX47faXo5+VbrFjSzl2QPihehYyV7890FCkCuJB+w2vfsXIFnonJZdi6Gpheo+64SO4KYBpe+68hmaMYioZsCejMj6sA47k/R2lipDb8OQe36hJbyWBrQ7CqEm46kY2U/bBe6A8bnfKOSBsnJuwNHDm+xvN4i784MvlPd547z72B09I8O/LyD4w5smzHq09/PBkKPwm6cfPZtV+49eJZvsujiwoS8OGI3uvtWBv5T5Zwhe8T7/+xUTnbhu2rNnWoyK6ZylI9BV1Rm890TDsEYMCkkdqjnoe1VF7wH8NnP43G4fOLXdKfzj8i4tz0nBv2UDZnK5l9vXYmq7zsZvvCypD2AOY9/HwsHxn3PkmlNTi93kfvVMly2tPiufuqNe6TMxvC7XGddUJzUmvcZi8MQb2dMQH2zJPv/2XvT7Th2XE30A0Oya+jx/d/xnu6z+lRtWxnE/YEZZGSmZLt2VW3RS87MCA4giIkECUb7AKVrNjbEuVS/mRHnIWnNupl+AeVSARfINwDkvK1iqmyc81P7LfJg3gEsbzzZQxw+T8pTh1LmSjRSe7g4z002LTQdv3dBLDLE9aS2PSBjafRl/K7W+lomI8JXV0i0gctOBVwMu/4AIFh465BEArc6OTg7Qo2eMl4S0NmugX3fwNiPvzPaKNcNokFiqj8ml7F2+iarro7Vsr7W5RWhnOj1aikN1wTONwCTcQ4GDcbtILyo63iAIFuKSU+lJ/gRDh+5dGdon2zTrziOJuSKj4PlvOqNte/qkJV7xtUxPhiY5PuU7Zg3RZe8wx5S3DcOJRw4bbN/DCR8WjYOcRVi2+4dHpArQawKctYxZ4xRF0/RmbM4KIyJFiWRxngUP7OxUl5TPxSXTvbKY3PGNRvSmRwzA75RbJEMO3oBIgKe9a/Igh38SedDTzIZnhIuAwcJt8Yu7gyKGisL2kl0uuNn6PhNwiUEaeszAfiiDd+iKLW/Xd0lc392lVIeimdh8lfHt8kQXgqZSzLqjE0I2YGeS0/lx3CCM+RUtG36ySTRnZko8CHRfcVP1GtyIZ/6VmearrkEWtLAtx4XnDFdzO5dOG6L2fccJaHYkI0ZbEOhPc+OdOapG9cb3CanoRuDILrFI8iNw/FNYExMEMPtLofHZVM8D5s782WAHKejA5jg9vc50p9J4QNaa85zAIPGHCVOd4ne7D3sOdce5Pye1colWJBg8jDoAJp2DjLhhi1zmDqMmRu1xeRUzaLd8/W+GRyJ5t7lyCk8FjB357lFRiqiNuFEgKGKgCKPc0q03XBLbNFeNnCmMUygFj/0ztp1tLe2/qXTYmMb5+7yXr+6yn9NQ/8OyPt46tOD7edF+hHM/TGxbhOIffKgefJL/9RxjgmaEgIrrBXJz3boz20v1O/vYpbP9CvSpwP9d03sSqOc+nlnFQBQj1uaIZNnxil/PhW7ZECaOZsR3ZrbHYUJvk9v+uoHPGR7srL11SEOdJ14Tl0QLcZlae9CYKn1tLzmbS0/Id3BY/nd2n442ElipgmmzmZaM9S+U3vcx0vGwIP7Wb5hp8mHhG9/fcF4fQUwMPOE7VAc227hvECsv2nkehnhPB8RqvUAeJBvnvqNWJ2GO5DTzjYC3ljDrJmNO+X07Xh9lU8QMIAby1FksnvajwEcN2D+FeD/ApiRomNXNBqbjGRwZxRik5pRHWEDCYVX28QvnAYZgDsWD/XntU534TwySt2o3TwvANkkolVWnGQbcH0CnP6W9zmP/aJaPIMAndi7DGFfEGBmEMupTWZDtc1gYme7T9CRxGb/bPTnM8UygVTazovIDnSaOanznM9TnNxTP/kLMN98wjWnvKMxQHNIXNGDwOMbMCARIXi4Y4iOQ/jiRfH6TbmJ0nj5uCXBuPAYxXOkPP1zoTt7tyG0TJK7K0O83J10bwPZ/YIfKPMzk3e8fDydf/e689g7J5uX1W/58dnyhSmx0EZ4O5JdcdH27veD9PB6lkKzT+J2C4wt+FBxHEpRdQCamgNwm0L8BJFJ/4+/iQ6yUjy9tKBF797V53+lr2AAf4ecdv4TDm1Jyn8jTqdvJv5Mr5iD1fEuJ89zx6x7p0Fgct/Emmayfi1uXt6jqIc6cwpwJw75iQODnex/t3kJeHmBRdX4+/wmYXtJI2146EdAHOVxXYuYEnrC3C7ozWHe0/uAMKAN7LDTp4+Kq6Qos7Ui91UD0BO5Vk/yklZWST+KfE0VZqd+f0sbmHq92ieniOx9X4rd4ZMOxLbN+lugGKEj/BLuKtC4O4u7eZPMMHd4NnuJO05Z8ixqJP9wZia3CZw22KsJbHKzTyzVw2Zil7DW2/Hc4UzmDAAMd3hvUqtuA0nLJzaSO/KYJa4FA33BXN4bjOwd9pD9PY+Wz6NJ6VV8UFIVHDCneavL0WS/uOOG4Uxjm2qNpXJfs8TbOjmzOuaQp+5Eh4QIZxbzzFrkMfEyTGYRTlvApxgncZoTDrzggNyDLnFH7ISuSz5YVIYBiIRnOcFO0OmS9pkgznO2Q9gj+hf0yhLWnBlkJ7U5YyKNddvU5gv5F+Tp26Z1M5JetBakXnbR6FVIibf8lGJRKBcK15k012kycwad6An/U+nRHOziqEvVwegnc0j63ZtBLRt9MH0QMirqshr3LvWMWHOsVwYWu3/wQJVfkcWpxnVIfU69wPL7Sr9gMwwEWRa86RUwPYPiz4mqteEO1ZQXy0fI+p0uMV4udWfdG/8zzeKglGaz487KmpySN+7cOyUMO2Pqpg+jpZlGKE64p1HT8O/xO/XOWtHoRCFbM2oYUNuIc9HIty5i3fl1540LykzkhIhalPI59GuVHsVH56pOjmrXFNJy3RL2htH/mBa7Z4IJOMaQu2BJIn3MYeHhTfOgjN0oJBdKpocHDo2XOTTlX7rYBmmH4GX+38fJWpz1nTpLGFY0jjMnqnQ4OH0asE6zhebYx6PQdXeeN6e445O5djXhZdmcYIIWuV7UNpVzJuc+xKaBNUoI4+78LZpPhIqITOhyBkirO5EPKruzMzszdv7D5hOAh5BIItT+op2sAWqkiZkHbVP90u5jdLwr7ejzfoGL70+Xs04kfR6CP96ZWiobFNhf54otEm01+p7pwB8rLdr6Hl3/o9OjceuvH/lINjrzh1Oaoz+dKAHDrriqkPDPLI8naE7QZInEsWheUZ5kc7fmTLdm3a5fbPlsZ743PUk4H3Ja/vukTwf6P0NaFMZHKtDPsljTlNeS3xKted1K6HUw+slGX+TwmqVMTBZ7yEWTAFpOd4rLSQgC4fSdrdWe2AiEZ2TEhxwwP5KuZoXPCrTdVL6VW+6P7CZdL58NEK1Ni7AJXz9BPgA6QOPAOF5kMXuSLY+AdfVN6khtpkXzuM8UIPpzoid9PhJs27l0CoVr9cDsrTDKTa/AmzYHRzb0p5r12cgNyuLa7KqAdkrir6in0DkV6c8+mIIDeupW9mp1+7ziHsm9ywC5EFCtjRxpIuq2wbkq3wSgD3lbliqT//SAoQWUsJkAHMV5LnO/OI8SIx/0FRk3QLqhn/4sY57YkYVMsp3IeiJ8ymlzcaCL85znK8hOobPQ6QQBt5tdPqmfAxjfgEGYLy8Y4wAOdS4xAXTo4f50pQLbrhAGcD6YmLWB+dCkyfC0mPCBv9LUXYAaeIRVhv8TGW5/44tT6D2ZoPsg7N1O+AhKHtkaOzn27Pv+zifPWekASyzaX528z1edv4+U2i2dzFd1CnP+MMt952YB5bIlPHEavGwb5UW02ro8+17exfdvYD9XZXpP2uy9yLJ5R1AW+UV+5z5kcsviF5u8nqmZJfI17j4vE7+2Ec/0ubyyMrWsO8fNtgDwQq/e7ivJZqPfZjpVhxainoCInKM40ZDKf+ebV22q7E+QULK/6eYGqB0i36wdCSV/0Ku3c7N3NigZhmRzbEbKsebYa+Tq1lK5gslwaX3aqPxH8qC1Ugpvy1H7Vv+PopsrpLYAmQxpbWxtl2QklnJ7x1SHuc5Y7HnixIS/S7MsQ28LKcwFCxKVIjcv7Ui7o9Z1Ia7i+bURJ/CqHZDH3kRxXoS+o4qpbwzITgQtaDbPNm3wHadxqWQZ2rmiKpq68CGm9HvTtG3OYa0nD1A+G1ydeTpjYJ0tTKnhJOii/SF5SB1oYI2WJu9t/Mx+1d7aU28XMGuP8ArgGwCbu58ADpXgA+pjI5OahAMDh0YFc9ZmOcl5kl7Zk/TtJHKZQbDT5CJbPbiyiLx8UVeR3YKTibf8kpO+0BM0kzUMPgMnz3RHNDc64NqAjhHp3C5vzGLdGGBOu7cUStfHnrGY7raJoB6+Jtls6++tN6s9EvPK0PJ74bfhvZI/lVnkreKw3RVW7Ab0GH9w1smQram3n5/P1HwZdYEHL6B8Ev0qFd31RLoWV87TxZ9in2zitFo/seycNsMg8mUHooguc+ZlZ3lyPCLfQw0A2SZDaSOgyNCqHZjzc86bPhf7K+XbCbTY5dOpoaWrQYnnxmPMs2R3+8E/cvTIiKZU7p5O8qQI4qQP5U/lm57E5znkqos5McbwsxODCAezbkhKKzcTMlc+BgZHT/JHONob/Mkxku3bcDK/h4gfpSpfwq9vdFduOodpA9Mr2UlttCm1TqfX0g6ifiR6Dtzs5NPa5Tgl7oyhX+15qtsJPPFOca6rM51rH96TJNqQwcFLP6h1wkyKK64oGw9cyGTiR/3s0CQ9Q61dt29dIZEvxTu+EOWbAPG/0N0Jx79LuouMfdbld1zzsHzem/9bv8lkjFtxz4P/mSI9SUNXdvQvSf9wn8wvSMthkGpD1cccJrP+NDlLaTOVCzD7s0ln9sP1ZlhhySjtvx+mKybeyIGt0fnH5M1PB/o/Yco72dqLjSGy/73MU3KV2fCgDTdc8kJWhL2BmMAk12eDL7eRZua22EAE8Oknodl2vNrpo9z+nYlY7efPTvcmLXd+O7xPCJqHDpZsfCjestS1FZFdKkNtCzqpDnPCjfgkGqBhCxgMHLarMvWNECu87jyvJy8y+LIi5McpQAR8AeHr6yu+vb3hKxi/EeHl5cCw07ZEOM8bxI0vSkdCvzJIjyPIPYyVlgeN0CfzDBiuFhAL+yV6S3xTUJx02xbf+cvOStmU3eu/pMy4/d6W5wf8kZT89v1F2Yt6fKx3ldmWcsuT33FGJHxDTcVKDApn5KcstsgCDNBIJ2emF62o74ZIE4FlfmUGT4kdaXBRcBLrDIkZtprIPP3UuTjQX0XOzRPM0xcNpQO/KWkPeAhijsgQzMA81J46Dm1bFiImHeBxwO9PJYbfhd4UQISVbsi4MGwv7THO9Ro+dgjevH5PWo8Q7uvfNvSPMO6ebIN2PPCO8ve6/WyXn8n3KI/DcdWPZiOYk3ORsyZbTc5SK4c9zVBk2qnLQpbP9PESsUnueA47TUEFRA/4rg9jCXad/ps9Y7CLk4SXLttC79/wHQBh0OFv4/pThp/p4TOVrZ1c0NhY190/pE4RSicNM+9t0CTs2QXqJmX6z17s1SPseMt1xW89dZ426tn7fCqZsy7Jtm5quoK6IRiKdrupEFZushMI7qSJsrX7hU8ovXBna03JzF5gW1LWY4lHi0NxU+wyUbgCCzQToOwH55orFqz1aR/mhXGNcTgNw17xxKMG04KoVniHSIrm3IRNhqktgIqergaHs5Cq/VKp6/TrDoRp/FhI7XNw+qvtDxBO5WAbicOLNBuyF9f+EuDw+x2jnNus8BnHTlCcElsAN10eko7KeLEPvZtuHC0tn7SONiWckvFYgTRorascS5Mj+JSECAdAJ0zG8xA7a5DcYy5sPGR2wnEYd2Y0aH1nwp3PwQJanG5PUgyXGriDIpy8RWyTmgZm0jvTnEYMOd2pOoage6VRRGdxsjvAROLA4hMnbJOWzrvYpB7D7r89p4Rtv7H2ewJy3+NjiTMaFRT9NJPcdicT1E6OvEuQZsKG/ZpRYQOMHKkEjpg6OpZmkQVXvNnVZvQrbxLgy7rMrhCRmC2NcKs/JcszLn2ixC1DOIulzhf9cqZ8O+WP4OfC8xRC0T6azZFbN9yIDo8xtjDg2V0udYhTlXVOxsMcecoD7hRnrTccmJg6PSt3UmsepPPn/pEd7pK5OjOzXGKf/iHlD+rkuDMcOVOqBLXu3ojAu4skafk2Aj23Z2rVxo4uylHdxG42ZRyyS5vSd07O/kOvdSCLSmTz2zkl6hpNsG4fyhpGyEE2mhOzOyrzFQ25f+uomA7Jo7Six8enrw1Z34ZJA/3LztGEI3fRu/NbpGZ1mydHfoM9nicHdBKKXGjb6NqeJ8c8JzjcKW68kVpN/eUCSSAoc5+MSWrboU2f5lDf4OjdSdvpshEIEWO0uCkMt88bqQiISW5t+BAMjySUVkzduqBSYGN3Mkq9md0KSNzK/eS06kFDwJUMufObd2UfjDPnznebgCOPyom1zW0nPlNOlZgKndV8OwkZNsovxfLVGNLy5SKf0cYvgtLsadrIk7vrdtnYpDCuMymX4qIRKM+nzL7Vcm5GQZ57j9MUpsDm/NPyvSt1IcgLmxfC+uiBoH+D9OlA/90SY3Wm3lFmPduTiVK17+YjygsbvW03bfEY5qt+hWQpEVogu+bZTkRbzCZmwELEcZIuVz37kPD4kXSFh58hYNIUvqC8mnOBkztNF1vPBD0hLtfTwH2229g2Mmh4ErmbY9aVoUsy+CuyB3O3f4D8f24LzDYRGKEvbM7S7N1neOf9o5ApslWyszq25ZM54p3YZF4u9rw3cPcsW/nN2+elgTvvDZ4N768WRXwajZBNVmMDxWqn72SffcuL/GEpuMThTkdGK5JH9lukCRNBQ6hbbvZ2XEAagGTRMLCKaJvg+LC28WVZevF8GpoHc4LVYY7zhCwYMMAz6vBdiDNW8S0fWOQgQ97r8qpgV06PDAwQMc4xxIluMPjGGM3L03HzjHh8mmeKTOkPf8/0ext3XVD8pCo/qnJ3+Sxd5b+qazvmLb8t4uf8+dJZf74I9P3vpxLvf97Dh8vl55GQ7zfPUkq6Y7LPJJNxXAUl5ltcdJo7QZZWRU6cjLrYjxQ20eRc0jMm8f4/u12dDZ4yAyufW0z0h4uN2HVLvPs/ZNdLZGNU35+3kHFDZJvh9S/ji54yJ/wXbpJl2DUxGonDzB+DR/P/HW8yrObNUuGaFwdd3Sa9m9Vf6ZFtkIJZJ5anX1Ehb06F1ytiwtAT8pPfULHHDsPdzW8P0p3R2z/3TlyVtC0ICROuVxH6KlX3YUn3RMH31t3NXW4vuvm6rd+ZMw2KMpJH4I241rgaPHd4FTs3gMniUuru9ZjMzM+TDQIbJ3EyvFqrPXuyWVpx+PiCUjv5FBmXOgr9Ogxhs5X2XELW7TH2jSByVQYkrsswleF2pLJ4uX5HzTlSc6mMo3qHfZ7pclkqZgdEHDzTrsjQ/DP1gaH3jWtU8THZHdKgW9ihIHUKRyj3oTblBMsGFNU5rwR8145MZgztsNyXLl2YLBGHaBIGhbPX7j5nAAcPnDh1MxM7PdmU2eAJmzChT3mZLYqSdp6JcYNu9OSp42WfRkKEORnnFOd5sZEXVtjo/fK2caBlOVkCKwEug8nvlR6LNpOh5fKQAPBsbW7kXlArlTzl5VPpCWmY6PjKzLrWqu9MXRiWzqyyRvjtgDnRw76B2j5ZniW50VNBbvQo2zryO+g2Qubbto0IpO6OXHeuI+WTNnQ25s5Fg495qoNbNofIs8g7i6wLGMu6gztG2TMZ19hMLuPV4A9kZOthl/t+CpF9cTXWUu++LYBhYS5k6BqlmdPSNz5qqzNkqDkWLf8VBFIeICb1nXGRXXZYRviBCs3EPFzGZpLR4hL3KPW097k65W0MeFWOj9MT2XpI+dh0Ed+jKvYyTm/2u9Nirg8ceZahjTqvwOeWzxzy2dme3fyx5NEc8IkDHW59yVhBeyatNvC1LO2yP5sFwuuprnwHeq8+OlSfl85EXQs0CyndQQAnMAoTpAzXpuQHE6NsnvI+59/XeL6q8iGc2XZc6v6wNvtMV+kdNNOx/1PJ7Q+RzH40m4Y2JE4xX0nCiiBRt1z35vf2p7ZQ2e0K1mgxbbSWg0Y2cfoZ/fxMPX060H+XxNh6EgGEI+d++aeFXtJXruMsM+GBrqTyuW0jK079zjB7u1bufOzO79hFzVAjB1AHLcAWvlhzEJNO4kcyYmivvM1y6jPPH01LO4+MgYrDCs8OKNp+LW3ZjHU5ed7oppzwQuAEBDk6pCfNbVetnvS2azwmZJNgvtaD/5Lgj+M60QbQ4gCmPMU2JPxpvOhjGVc5TUGlCBTk387vGKR3QyKMc1tg+/L1a648OSYGBjFOMI62aFQGY0PH8v0Og5Q5ZZ/2aiV2Grg3mZMpyFI80XfJ2AteWOaXBJ+Y9G66kk/3qw3cpf3A+bk7TzIt3wemzH1gmG6nVQqIsTTrcmhgc7EvYrF26QzU9siTxvY3oyXPNCd4nmHEmBOdT/mbr9qh0yrR/vwNTtBuBCnAMxtBpzLjKc8HQHSIgYYDTC/CswN6iaedSFdXXFosFCwmum0TbV98fCS67g5fp8UmD99l6RtevgH4k/fgftophl+TwoDuvHwFy74Wz3oPIIOiGwAAIABJREFU1Pd0/dku35NTyztu77rNkn7k3TOuh0w+fhBoL5rgsBOvvFHLpSB1Uk9N3yvsy8XxZOtEB74erwAI38/vYstoeSv9Ml5T7lA4J0vY1G/K+wcdGTgPifiCL2Cw57/B7gJd4Wf/v/KeDAM1jJOJNgDiqBbnS1KKfah7uveys3/KbHKdmdq1oMnGsRsq4qJmxW+1m2SiGluxzESZjobcbvpSqwHgV7gLhMzuYCoL/xdk4zmIQsUr/obrQg5HYaA40U1FV8LGgusBks2nOdPd8VDd0mS8lAtZZLrCeHe7sczlgvGhdYYqHDtE3Xu0g/9ZNbLIiWQ3GFiaZyCp2WokCMzGFHkBVfseuYNPqNQS97GyNe7w19L1dEinAG6f8T3zr8FJMemq/WmPzVHPqX07VR1uB83Bkb+23VPeorPqRsNPikwMGR9zz0LFmcmgVAi0qhAK1SLrTUleOQ3HfcZQOeLryWxDrbCSm1jerF1ZLIfW1GFHBL163BfqmZTsiWSKBdnk+GLzF5KyNIExRK98AfBdC8upb7jMMkfTSDsGKv8nt7P1RX9OCCw5QNhQ4RK6i1xeygIgedmgF713HIB62sFgceyDNXMTZE466X3RlpHY215eOd3YdQKmFsM5lLaaJfkieksiBEh+IaK29wxGPFZfCSHvGFbIfbNb4tN+WimzjEvPRPuk1oTP4Rs41o3O/tS+L6VaKuWXTjugGVRKcr8zdlhAEvkgSwiBuY7v1s7Koiw54movbPO8ZdMN0sV5qDzpfYi+RBm4g1GGbILnLdWnsoVruOl8ctjqzFH3WPmhyOpSBtkPuThpNRZIZFz631PjFeayqWefPb1zPWPyOtF3CSfYm1O8zaBVG5mQlbKRoal/aYd5gZBLPpINk8Ou4gnZKzKfvV5jU8G7efA3RBpQl2+mGzOdZJg6ytx5nHnHmntkV6U6YDTlVwmy99HWDYLaA5qsd41G43elVd9Qgnge7VszKsdTPc5H1ZtfoCntWaZgsvTUHPCGywqLw2Hyc2PnbM+QGyNpzpwnzxOkvMBldp0VJ9NRCre0T44Tl+6OGoo2FVa7YsSjDbHZQVTyF27qkT4qmhMeUfMB8EnBR9NlWYWZW8bc32XDmOnlKzlx8buoHI4BKvlb+3fgX/RJweePIOvfKL0DDZ3bngmQ+8Ntv/MEudvjV/l/FOartNFdl3NR2sy/ADfiOktZOfXCqPWaBIvZqJTEgOsdqrjL9pS3mX4Xm3qHwy53UOTtNk9p+I+bPh3o/yZpEYT2H635Ch+5cZj+yuVa15OpbeO7PKxCkKAeWbhgyLsfY+cvx27UMcLIZMbQcE/BzsMspF2jiJVN3suAd6VnEPDM82febwau9LGNmS9S9kUEe0dRDGqoDg3NrgtAfn8yqAR+lnGxoTLL0eregGzh8KopWdL/PF7xW3fYweqPNEE4kJfHrwS7EehuwqbO3LLhAJvPtf2wbvOsMLFG4aOYLCz3d2/r3qUtJ1/8vsLvvXbuMfIH8hl/9c915eWiPka3LHLUvzpxq8UilHulhcBKjG82Ttjg7l31amyCwcg2jRlIxaM/OX6znDTn25nyWMSME37iPJ82B8Od52BfdPWJJ0M6OvT0uLhIgDcCH6csJBJhDFnmZTpAw6bqetWBedRt5dcMNOsyo/bpYqS26Xebs3wD8BXP0/M/WXoG7Ed5fjIrP13m3bBnuYBq2O8mAiXTOwBPi9/379x70IG7HngpW6TwxolueWXjH7y+aJnTX5RysKmeVooSqovtzkRbDPPFiRXa+n98cee5qfF8Ek9tCfte74ttiRhqQOj7CHsNmvgf4wtAhP9MmPlfxxfB42CABv6Tz7D5DEZzlti157l1tvNcN8SsX1xE33FGXsohRoFjvHgVZ74XvQ+5oZTyI3YZnjcUZCvCRrOfi/IxJxs74FVD5BIYb7ghFgbXM2xAb+19aaOR2/sl+PE2XaxXoxpF5fzxJTxZDDzs1bPdvmfKbbISdN9oYscadViAy+HL5SR0q5zFiQBOtmpePAFSpNAOZC6zcOtFZzo/mmsrPw8ni9nuI/dTn3vbFzzudJ1wYHMyENapV+pvgFvlPGlH7QS2842JjdxL40MSTJV3/oXAaYOkhVq1zb+RTWCeJBthxmuWd3rDkzrXyK6D0k0mpHAT7AS5AGYwmoP6BDsd0WDwSXojzwnQlHmV8orIysDAV4gTPaNU5l+UIp4GYl229TfaeT95Zyfw2yiZE2zCZkmmV5x8ff53Y8bbNEdZ3KFNMHWVA9wmoJ4RLEiBl55YWOUb0COwSCQBGZ2CozRGgOGslrUxoab3lRL8M3dn1YMBCpavMr62CSnEQDBQ5t48wgGSIdt4JoewvsIZtXcd6vVKD9bBNx0qw3GA0vqAbADOPeupK88Ncnb4Mnlldx+DwXTUaRNkxJiByX7mNaZa0HLal3Cg25wqHMD2N/VUenZIWj2OE5b1CKuLikNyxWm9Zz1jpuGmdP6e3Qmh8RnXOlymhzzE22zdkVo2kpjOQOAFjLpcuGmlU5jTLcHXoMYYOMaQAxJqv8smgSlRM1ReOgRtneUqeHeFpXIjjB7elRg8ucDwTLt2/UYeR8Fd0qVK95x+B7RGz+sYLWLWH7QxNvpu+iWvwXq/tDH7zTkve2WpJo7HgJfJvLTFTVuHkQ0T2dl9jefsPKdAU4jIlE/qbwKni80LMWpOc+z+WlGRJU+yX6kj4fUnpnsS5TJ9bIrxfDKjs4QPyu/vwOBl86OE8Lsy9DN9pp+ZqOjxS3twR442raAlgFsqlyZX/TCkyend5CvXw3d+XyZObSAmZbt8f3Be+3Sg/7OmR7RpBL2fdT0yw/WHTobyCoJPfk040KYwt/y0eR4TcFDf8d2MJmTDjXWiAlmTPQjuyp1y17Xdxy2huNQwzffY5ETanjmY320w7yp85vmV9NzMGsvrnD8PKFchmv+0b7aDV1Be35Pf3cTp2ZDFhTEkWrRL9OEhtNyGxWyymIGhCyZt1cuWGfqCg7yTZ6/jwGF7H7QQI05GMIAvGJjHCzAIf/vtN4AYX49XnD6TZjDkQujvb2/S5vGCCcYrWbBCCXeoszXQy6tswLghdgiUGchmClhWGTfjX4aU0sSCN+/vpz6vDnJt0yRqvxeYLyq8LLOb0D+TjZzHy+eueFHgiZ6tk8uxkCx78oxIKypZuJQrNOcEFk/r/KeOU77zNE/KbLruY6zMwXrPo9x1zhqmPSMhOc/BqA70v9fnfscxRxYDlggSCl5k42CIc/wA5ASA3I85jwNDM00QZGPMrCjKOGiT1DWEZuOBVM87SHuT80dl8Tf9/NqeP6M4H+V7lLqCzr+LILyfFqN2o8zfA8aP5nsWlBRF5jL/gqL2gFrmSyNd8+1E70a+mUN7W5vx9oW5UGC960TPGm599tv5vaIhKTr2p4y3KXfq9pZuM907yvBTmC/jC0ATk2/okWgrJNFGl4ciss1G08+RzCPS09GAONkZOEZetJ0bukWzI59IoSr8878XoknfjTyanbGgYMNLccKVCsl28kP+bY9NVi7kV/UN1AQtb2nNH4/szuTaHpFUxBnG3q13JFp+tScKRCyCZ1e6PFktjaRAkkkZtsAFMvtGuU2Wkng3UPu6tqcass12Z2HNmzE1l3+nSEBk4Qs4dxwx2Bz1mXwxXo9TzpVqqS2C8OZqqt1GhIuetPcBn/G28VDu464u8nbJ4XQ51lU4xw9avm3q3jDtKPiiog6I7CR0PMhkxu2kVjcJVz63k9ZVGidxGXuOCerkZ0j8qyEbE1lOXmceLpIrLRIzGFPNr5MYB5FE0yLoyeU1Ikq/23cyPPx7lkkVi+mP2W8tYmaMqUG4B0lUJJpuF5PS9AQkJLoRRRrbkwknp41RDgAHz7Aio9NHB3LBVjy7J+eEp3KOXp5iUz7FQOZaXbqZA85PNxk+66nqEG8pXHmmmfIl6rpK0vYMOa+bWstSi+Iy6DMpvIa3gGnXUIbrvga5kNjJlrKNHggxv2m5nODPNlTpW9Yk4Xjr9qRzKOt3l19xkjjPs8uJ8/zpzUZ++X+CeajDqzvVU81eH6JddfDuNlOZmDf4PGK02zJatpSq0fe2yTcVTLDbCFfjGrI/DDt9kARiuZYDa1+W6vOpAeVH2zAZvFXb91Pqqco5GeOQuS4R9DoeozMGY2LqYRumej2D49zl8zXerh3k2SmcnuhcfHFST92oYYDs9zg6XrJMEHqyjZdKVXlMOnv670vh6XBepkSz8rNxeO1e6e89iuJdJnewxwa78juX0flElwEBLCWbK+WjGpUqm0hZbBCqjdJR2ekhnPUJPw23nOr0V5zrVibL3agIu592+YoefaaS96ZGD1fvEx3vYbF8VPuRjbDF9mYs17gtzVc5FeWsDa7Pt7B9piVdMncbuAeq6ENpN0d7V/Gus35BukOSz6c0gaD6OH8OwOcBUwRXsewolcv2YZVMqforFm3pqvxVV+5n+ykI+5dNnw70f8FkvPRuMUK5XOZIasqK2l9O72u1hyiTkMgp2K1aJJMZQ0xrB0mcuQRzkNNgmeD7BnPfsw611KseMEPq4Wr5z06/RPukz4TT5DyPEFhU8E4AxjhcworIE9zSccRJNHeiD4AGZJlJRyVPKKhCEuB1evkLgFisWjTIpnf9nZrU1SADYmzVqPIFYELA6BN4o5MRf6ReyNxSZqq+62q3APsXgP6GDzDic4mbIZ/etOdrnl9G7dmgzjIjDwC9o/0NWm0h47KWvDDDOzywU91IPHAXhtJeGOpxpibzW9Cg+MJlV7qEB1Qn+jKL0j9/PgH8Tek4bQhhbXGyhGDP9ycQA3gRsp3yehzA4Bc5jT7kPuAxBiYPjDnApJthPCUid8c5l7d38WR5Ogne2wn5y9O39N1OpQOP5fAya32irdzxzcTwUT25yM+yPZ+tp4zXT6jfdOt7yhbezfBcNXD9U8rdb/4+YI+yPMpjS7yUupWeoQ21/2dPrqcyi9Xl+keiSszm4OeaGXaKx50O9Si1qmqVjWTyjf05IZVx0UcS8Gd26zPN8GwReEbZ/2S53/x/v3zRygb+g7/XcofaMXr/eWzL5oJJyc7LHZk9uQlQ8MO4nW+pL/L0K33BN7ztzd2eyvu9HMi2zq661fHQfudF6gckGMNK9Vn/27dU827bo1TNSkP9juHyzqpjICI0dNp51Lk17xMa3cHwbzTSw5DT2fnHZkgynPer2ReGTTdH9QLdaFGdYnFq20qx4iP1yzNkpK292FnG0b87OtxPxhPMbraxiBkUe8j2kvyEXPm6DktfmG6kcpUuLBPn+a5Rd7/9u7GM2u5mp3geqvcbe3h7ahX1NrTeqVFB7Fofn8WqzTuI8DIILwCIT3Ga275FYplvATiTc47UiQfIiXciwp9I7kOXDZHCO+TYMEmW+pbgTudxHUE2VbLw8/LY43LB52eJtusdtozJQ8O32+aFGbKeK/ouOTPTOfp3a7OWLnSUOlWizGi9NEYDwDpEUdg2km5OvzEf0ndThQTUbeCrRomPTQj3O8l0czIMKiy4g8efnq5aW58zWKINkFk6O332KK3CoV7PEPYOm+zm4FvZ7FBPD2/vjrZPZvAZcR1KPUjljFeY/W50y+8zNJ8zQWGKTjAAPhKFzOQ8Z8MefG3LVSdXHtinwtWQwyP3dGmlz8bcKRdnABc5vm5pGbhu8wISbjJK55xjDhwayd4PfzCnUPknJjEOjf4xQG7PUq902+4jONMYP9kno5WecsTBEs1nh+vNsNkVGjAd3dr0tv2/J0ah8NKugNDy+0YTTi/GOSYfs06SLRC7sg/Gjfc4AEIPGgwELibioyWIfP3DO6zQ4PP0l+HglKdEBPO/ZxvK6dIg//lpt7b56xuNNvumu8u0G7Wmjz/Tw/TQPnu0pvPvmn6AhOyw3qUQStdJATHvJvjNuXUTpenpdTL3cSB3yar7gw75j6Y/rgP9KTrcZUqzq/ye9D+btZdZebeaUj4GzCmzVesyWwhlfE6MyXIawvROzGObmb3pTlnVAvIkuIMoDRhn50rMg10nfYGKC4Ws7ZL2m5JVEgaJfKNxgF8Uz4dNehn8Rjp510k8GL7V3jDIAiNPe8cqwOZiVL9Xbtjdm2Eg7xcDrmt/wqjvySXrkEnEOGQxhoavUzOgi8obaUwEvBxystzsUwA05PR5yT8AHBraHYTJU9cGOWgCRirrXaC5H4Sp96unxSYFaQB4wYHbjuoH4TcNEXeMIyYeDNwOjpN3Do+MMwP48iqLKFMzDSIcRDhZ6O6ggXMM0C1TnSJla7PmCWNfTEAY+tlOvtywcWEUk+nKzUnBILTa8jPyq0yW71H67t0jWs6a3oiQmgx5UC/vTzKG8ybtsudcnlL1uf0QbfKGYhOgytky2bNCLsoM4bqJpy+YEUDcAu4wAXOCTjlBQPOmDqZdnxnA3xXQM8q31SMCiyPeJ2L2fgK4AVM96PME8wHmCeBVqjteMcdIesAstQGcQ8rg9DtCiSY8kodDGjLOInWWHiUlUxbUy1jmEukFbZ5tK06CLTfkWXpZG+juTF+gv5NMr0lnmqRfYWYgFj/Hwrshf8vDJ9Ozlu0HDep2pLbW8p46L/R8Nxl2Dtzc1ra7re6FrWx7S6uvOOhNJrGXqTCEHbXM4xl5bRPZ4OI0viJNhtOmrPea9CAFQWTZlyErht9z+PBN17gh0STXyTdZgBybkhmHouBTPZRQnUIHF58DhQ5KC5ouGmEnLoc68GtJx4fxaFOvrYONLxKMDn+W7dae4nqpa0OHxQ5KddFaxdfxim/8tsJt+iHB9RveKnyGBwb+rJfznvr7jU6vK5+bA4Cb0QwxXnQqdsOpeVWeqL2ZwfWeJHEkNRPibnhy0DuqHDdoZgqxj3PFI0IHcdOLFM+DzwLPRh3McMdLQ3DtSILNAMy0tXZkI6uaqin9MTWa8zDc/pLvodQYqDoONmRNHyXVZfXW+9RVGhhNme7g3Dc2czk1GBWvZ00TYIm0uwyTz0bEDfwIJd4KJ7ZzkA1hCUfSdmwe8oXjNt7B8pVOAS4qKW5ati0X9lvfWxdSd6j8TjGzUl7D9jQQ7K4qrXgciH22IJlXsMEm/GXlbIMmkZ4QHyYjJfrVGBPzDApIyHYnIIgwKXTFofrrKzFuuimavKgEWD9dEsseIHNURAR7GQe9wEdMVACDGecJjEG6X2lq/THvsP7ZaVgG5I5ztk3ZxuYjIRbxOZO8zDxRCDM/jGQOzfJsQ/O+KYyzqGDMyUXk+33cLEgI3pMe5808fuo8kyVzRC/jBEuTLw28RbpF3oQQgy3RZMtcnvpeNs/fFdVGDnbALt8IRwh9Vx4kypvfWVsmkN7h3SPTGYzsMCv9p7HPOkcvDHAQg2zYHddgaWMaLHqHMhuXc8hpWysoJ8pRN5VY/lgeio01WdpW0Z5PkpucS5pQRTkn2pSDCezyyPQga59sFBcEcv5aINcPO60etsSaOpE2Gsn2VFqviEgpQZul6SRlogHtfI5ckamGgTkhG5aSDJEp7IlJhHky6JAL+0gLsWY6wRiTCz0Si+wTfujb5DPOCzLhOgNBS5bXxtnWWmPMZ9kIQY4Hq79uW5pKT9PqgG7o98McORocO03YFTBBSCnih1cfY17pWrnBaDkNY6Wx4L94Zzya+DC9s00jWZxmkrTl1wnd96/fT2uDo2+ZnlbqrfI1D1+xQcqYxphHsRwtJGAw/vOHSH1ppLJApcgs1/skPAbZcC+ZDcEnEqX+UwLeNEjViLFxI2/aqH2pYfJz6QRXJgozUKKnqd72eyGIlvoCkfVnHPHM+o2OJ0r8Gf1iW//ftxjEm20OxwnVPjjNhTzL+uinJF6+7LNluDadi7Gn2n/bBNPH8hKOaKBGpvjAZpqrdordnxrfwdYNJuYyB9xuhOKLMaL2vTB4LtCtrlxfMrZy9m0j/XmqtyyeusUOu9bCZIZcszRFSXrYKAJPkk3Ng8BD9eGhf5NkPdeZgpy3i87I0JH9xxf9+mDilW4yGsvLJj5+RvO/Z/rjOtABPDd8G9IgABh+qmKpyjVumTXWKs2YTJOMhaQ8zAmLk0af0cl4mVMMdCK9Xy1qWFpcupAFNcMrMMFlzDiRZqPJiOFj7RMsb2o07xK3RwzIZC2hKsOpUoIGYbwe4FcOeM8TfLyBT8NFEsrMflcN8wSfJ5jUjJvpcqyCjOfZV0rN9iBJiGdO4i17Mql97b8TXZwvIAwcr684Xl6B4wCOAyeSwUwAaKRwWFIRE+H2OuKZy3nJ53ebkT2SLwzgdptar9EGVH+HQRc8UaWyhAlM51w2g24cUrHHqW7UIXNCpPo8VeJ1EcUmDf30BScCiP8K4L+wT1LLzJBtVlL5z5ArrFu5PpHc1d0fbZXQU2lPe3RlSG3LhQIGgu17Yh97+aMyqNng6IVXIyZ4OI8zQ0IEy62MefJAPGSyrIt+4sxOJ8vYwr+Rs2T4T9K9aySBOG1TCFNMSQNaClvbTgBNM191lZUB8ASdU2TSBDBtMj/9ry8CsiPS8DVcnhAxBk057eO4ZEjlA3GXumKQDxCfOHCC6Cu+v37BOV7ANIDjBRg3YLwCtxuA78D8DtAbQAwJ8H5ignGeJ2RB6MB15ANLG8PT+rQQTft9SR+z0kIgyl/vK8rt9Dq/90KaZ+NYtzun3SG+67/d+5n0DkFWzncM4wbrIz2z3auf2vhRM/OivK2WJhDZ2rxXRbEfBrb1PyADb43Oa3Rn0ZL40HSAbxjLea5kni3cmRlgXpARMqvIAOevWl542dyZWTcki+8UHWpOF6uOiPxOYr8zPON9rTVVr9AtytJ4pspyk7DuJEgr4+T9QKhuIwICKDnbqNWjWjQX1Lbypp2EEFDwR+cFtpplQViyp0G3Ck2Wa/6ZZX4pg2gnb+vOi7b2vRURjMTYu/PF+wG/OgNqKFHDi5RN99IYe5n+AKHy+mrfJA2cxsX+X+XjGvWVfJHPcZjlkPfV6qBWWvJ6iForo7LdWYyCyiL0bKIpW3BVNbfn72wPGG0EXQksdqSPO4IKHrbftcABDX8twEKDxVzkN8dLtwiAvHPTQ/CaY07zR5hR+5LHLz5ZB4+4cQ4H3zH0Pu1mN609jP9KDkYxWamWKJKDUx6HlbnUSJv8Ga4gO6MLkztNPhFkAGh4hXk+EbwSc5ZMryZWRJZTFqPKEzVsdyA9kOAxqVQNTIJvJprTdEulS1av+1Q4iPJ95+IEuo2JgwivOo/2TZxkzh9WGtFFND2ZDgZoGB6lzCsYt4RzGc8Jpinh2DncwFNP18efhF2fYA+9TkQYJCeI9Up0DHARAaS7CWzooLBm+YvU/1ySlQ9qmHd5Z1dorCnGSVxSIR+dv6DA5kVT18dRDWFqFAWWRUckp79HJSCVTZtz08wy7rrAaXfDm4lA3s6iPIoMWGg2HqXfiZMS/VqfI09655Ws8mAvGXYzj84XZF1XtaY4AMN3lrguGBJ9YdimOqGWyRHNoAu6GB9b5OcGvf0vn/lyK8DWk81VnnJSyOlYAZF+8Jx+TzXzqcMSDlJ3lrM56dk3mhiZMqsqNwinXsXw4t1RfEQnTSZy6xMTUtQexaddB1JHZE2ccUjlRdUNm4LL7yTLScYzr+nES2tr51BRLNp0KY13Eq+RT3nNnP4ic4Su5k3mfIMJg4GBV4xjYBCJLGYbMdZr++TZIMJgcS4MHjqPTdrN1XRsDbKNDCa/S78o6MIdqyT3rxvtZUe7/zR5Z/94Kr1KhCh3ZpPwjMiyUeoRemV1pHiX4Q5030dPUm+mde+Hbghx2kb8waRAJdJw9kafjc+NT+3P8rm7hm0DmsxnrM2Tw3l+47SBywEVPVCd0KLnY8ZiL7O1YfDMKGcD5w+SHLN+21jqe5MDEWXICu/0ElymydtONaQbJAQPGY0u/d0OkU20pd852Xjb9zJFIC/QfJ1qw6RN5EXvNl3R58Xc8+fP9NyUXsbRdo5dCrRn+XeCNdNlycYhWDhtejBiMlGQkV47VnGa+7XAeNWPH0hXXbuomq7wsKsXYZFmemKGz0/y/72l/IbTs+ChH+1/U/yFZe7RTfv5aO16+1p75IZIlmUzaMDXBWwdwYSBYjb/zkaNk023w4zqzM+heDThPWxL7Ys8U+f3PAfmZNz4BJ830PkGOk+h20ng2wDGAToGeEzwcQMdhPFCwCk6hRmQSQLB1x5yHzrJD8vryuGHk+PY+46Etyuhd/fxv0z6gzvQL9KVfKWLLEYz9+RyUh4L0dA+X/4ekzcAkzHPiXSRWiiLpxy5+cvaFoD1ehIvdyVkszNNixQjxcCju1wjclyNArehUr1TTk0aw45mLRKzXDlMEcS5WDfL4D7AV4Es9T3tTK84bzPI/Piq373IrgqScOoYAzwIdAzgJU5HsysGu7/c1Kw+P44W4o6SJib/o9Je29n2F8BXVhYGKNaj13uPLLvdyNaPCfzt9h1gxn/7mk6gF/6RNg91StguzDn1DIgucE/WnfUsjsxh45jpJvdxS9rdeLwwAnPZwi/r1wURVy9WXX2nol56Pb9R66iL9Lt613Gj9tef3e/OiqSuxXPIXg4bgAE/r+CO8zxxphhLH4+M++CFUr9uFLHFqhg2RgWDADud0xffrDnmBZNVjPpedH/DJUfQkn/bDWB2oE8CSELHE094WDPldTpepNXJAEkUCswDjFNOTQHiAJmK+WRThg0bCymbZceCg+sXjZD9cev7pXJ8ZGrx8zpQT6n7HA2AbNpIbSyGcwoNT0BM8hINd5noXeuw27tnzcd7+VK7234/lhWMBGI6JbJU041kf3eR/ylQlG/vgZnYmgGf9yx5CsNknCUpR2ojwHTeuqff4cn1ecOEvb7P8oN8WJwkNddtpi1ZXY6kH1/GK0xeTJ5xhUpFh4JJuI/AIfLNzZXsGLfyCjnZSVTB22b8AAAgAElEQVQ5vT7ITkJTcqxLWU4QrLvEV3j+43xzO+N/v3wFiPB/+M3hQIFLL2Unu3pG/7LKoJ0dYnaM6bekk5TnfI6nX77jrTyXArwl671GJbeXf8MJBuPPfIBAOHXx+BG/25rZi57su2031Wyk8EbVSY5Ewtb5UHmx+EIBf4g81jY8Vi/yUmLqtdNTpX9EXtWJq6Nf82R7SkNYL+YllgDJ8eaK7Jootzt5vTVRm/sRMVW0W8Qpi3K6QZPz8BofRUX1xJQ8TxTtzsWg1AWLj9O2I7xXTSllOrrA8KbK+3qrmmHV1vIM5hD1+WDoFnYcBkRhFWk2VfclEr47M8uAeDlKvxzEEyHSMz1o+GUTOSCAUvQrGnYiT52srNboZMzjdJk8hkohYz+Dqy3uMtKFZMzubAIm5A7gOA3NisMJy6MODDDeSB03LA6NyeKEt2bt5L3IAMVL2sgycBR+MSwKSoWWyWzoNHmLcejaKcnfC1vwmrdd0DsscRVEjFOuy+fBFgeayB14kcjrzs62CpuRp7Y3RB8WOVgVhj+nUk3i5S6jA31qgyVeSe1b3Wx3p9dqK+NeseZdQcJJGEV7wZPw310SR6/jnUIL28hs7wI8+80wacLTt+K7OLAVHA+prrmFHs0BrndLIzsOZ6sHXnYmx3lxnnPUKbgOeSI40O+6aG08WJFLpS3HpTk2ssOKrCekzvR7w7O+58DErsD+GTWYy8nYrqMQCFyexwYTnrIRykik36meDeAeNWFiAnPgnCfGJBw8cc4JHKRSSPuYJqMmllitj8mysTwcrxzylmP9yRYjJ8cBioCS3bnKiqfJ6vhWr3bd9jHReil0pk5uky09iLnJUZM/u+Unz4f0juF8UOrT50if+V0ZBgR1en1IvKAvggfjffEMJzla6rCmDBbvQ5X1haQofxCKndSR8kTa4XBNXb7Vz2wpFI2RdCGAhDPj66cttftpA3SvuZs3ET2F/L09v5YRqb3dfPcqdXutWFMIQ2C3zp/p13S7i07T0Z2zmr4rsrK1vQc41feOMXoGF89VcplCl7+T0JEotDlCK5V+BLKfQcc7g+T9fbxMT1VV9cVS0DdW5igwqw24f3bR3JKF2ws1slQBCeuxbqDixh/7/rCBXoxJ2+iobeyUylV6hoXem95D1z9JbP5e6dOB/nulph+Wd5vnNsdhnpjzhJ9iAgHLXbcP0nvy+oLz80WumJIJckJ6MfbUbDMj3+2aJBBIQotXkaaCZ7KGwBDDQRaAbQHwJ3FpEVxpIp1/bxfXETjcW49R7kpe64mqc5DcF3qQHs4ZvjPbd1WNFs6HgDEGKMdrJYpTWqnBiiqFN1trl4nqV6KlT93AXRPjNu+cxnyUuhLydrISvxif/Ogd+meFwf772VrpI+lKO2baTd8foCbypjJbOdbbtXHJ+I+pWjzKeIvFezMM1snAANiXB0uSIgO07Z9OlsiWeXbhunP+bsxnevJ91oDGg3C5tBiPzxmTPjl7lHTyFuEKBc+Holk3d4PnELkxBkAH5HqL08WmH79wsZzHaNvsB9I7JzCl6D8DL31DNcAReooGdHdRK3PBf3l32jIZ3aRnUedO/XekZ7OnYA8en+9e2R3M9/qR1eMjmB6RQ6sjL9wRAHPUsjmLCWmhB4hTOclOMSfuU/iyRV61RaiCFN8rn1NRvuI0v/GqD6tkfXYAo/VKlRQn7ExMOrxRNwOxexlPyCcPT50quAcqlRFK6R12x2UTeWPgM3U+Ss/gfDXkPi4Bg4LzImOV1Y8h3OH3PjyxUyWdMfRyTFyeiArhZm4lPFCl3AoVhwO056H69VGydYSAjMqQZ1q4PBW0TYmH7GRsU+nk8FLKXctn66vC1zr5o2TKF/jaPF/3JK2Nm53xbNvlu+LkoybADiUuQ7XeItdsM+Nm7hGPqb2rIZkjbzhyKBOPDVeyXxkkjvgDAMmVUQTCQbLhk2mKOTPrZo7cnrXPAF4gYeMPGnjBEKcQGFOd2OZ0tZOOJ091nMtd67e08G8Of9F3HDhzR3oo4OwIiygb9p6LMIuF+sDX/XRHEnbke8uPCcfJzBx8QDBbZbgCaX+9gAPo2F/D8APWrZYPAygfMmA1UHwzE8Icfr69R4aXpSvd2y2Xq/qazr974kzpkqXvHkXP+6044SAJd9gBaY6U5z+IP6NI6g73mCflu81zN82JftlPO8GFlC2Vy3ctS1MUJ84bSqKti3Qx96k65QmZXAyg5IxdVHJ/zmsekylssi/x25PJqpRQ58BU5/mwayUGRds2qMWc1E1GEEe86NCwiAjlZo7iKK7dkXrraeWk66wctXqMxrIj1fJrPn/Wel5gcRqJegH46eZn5r5XOtl8a4ZHTvkLP3h/TbpftL38TNsKuJWFzn0uobvbofu/H5T9QIs/N/305n9Es/xg6ozdhSXy7yc7HooaMfGjfZ4Oy2f6TD+aruy4dcp+J3H9SkHOi87MGd23pdKSGX6F5iL3TD7be1NOzZilO336TL80fTrQf2Jyo7TvwLj6vaRiIaafZizq9zkxbyfoYEiYu5GUy72Jacty5ewtZfJkwordM/jtoy0KlRUtm7iaIW+mF/x7Bi9uiIOHA/X7zMByKt0OY9OZTohmfO6nye8ytjreGHsclpl7bqxZBVdO8934aHVMHOEGB8WmifzZV5tIsWd4ced2ha9ENkKvg6K/eSFsO49Odfs9rLW63gRBXFS3KSF9aeRduuz9J9awcTFrBZjx9fUV386ZFJS8ljvcDxyw8N/w07kC4l8Bvgjj7utFFzSyNSzz9wf8/oj0yuaR9ypI46Yrvo4h3TaNzOf5s9MNBa93Q5jb7/ugtmecDoGztyF3acm5AeIcZCvBSNAoDCeYh/ZD/rJziNPkoPjEkSYN1oe00i7VSSQM1j+98cs/YzpqZxziTnN7t8UMBwtnslsOniSAmcUhPs8b8PYWjjsg4LCNN/OIWibJHwjgofjKDrvESBwjUZJlMYDv0nSWf7le7Mnk7oSpC7lNuR82KmPMFyPVVo+G0da3WrTzgv/8ipg09qZ2s8b0fvuq6ZBNs/fTzjBoye5dIru65WxjfQfuXXMla5cX/LC67Z1uCz6rBWC/bFgKJftpP2rDQGkclaMyHy4RLrbQFgjy05UE2HN+P2+tGF0XvJN6VgKQYvM6+Q4i3foj70xkeohgBupmo4tkNs4D3fYf53exR8ZQINiLS6jjE0QHQIy/I91tqzgoFsWUcakmzWrf+NMHcmENlZtL27cMjAlst1zxpnV8TdcdCeaGn0u6hyI7iW75JP5Qksf2zehTwfA1qSa6Cl4WvWIaMSrtqtu2orm1TpUO3lJ2HlPuJ9U6ZqolW5grbTYlp3rW6HU3ajZWWSZcikkzDRNsVqw7kKsJV5hew5BymAlaiUedRZzoz1BR65xhcFh9uU1SfuO15xYydU0rDrb8j8od3c+VqZ/9WzxsFHjR/jX/OX3tlFYe+2VOG87FHOHV6NZcvPEfx5jlWtSuLiJ+cTTXvhMgpp15ZexOXguUYTJTOZVZb4mmgYGBwSqgWC7NwZh+6jabm4Z09vDdshl8cFxd5KfeIY50CesOfJ8nTkycU06f35gdNlCEQo0eUfnFjqlOEOz4YsXyMLzqJlTnLx0Hq2LrQ83jTpbfpBy1XMY1pnv0k8vlWkEDO3Om0BGX9y5Z2CIKGFF1DvJRBhwGxV3TJwvPtC5HuzlfWCTstAQND6y9puqoLDzEtYkOzdOpCRaHziufshZFA3kXJavMY0o2QhEb7P+HgFMndj4xrnhlBWXqWPs95Qai0qTfM80Anzcdk4k5k31H8NYZrKfIGZyctKyhgmU5ymKEuREkUVU1pLY74UnK+UgSanhhbzPG2tdrpuVJMFwPyvIrthKs77e/84AY/W1uk1kHjuv7lGJezuVgqus5E6R5nYuQem3jTzgnMM5Tss4DhfuNz9KcY5JFFEzbexxUjfpCI54xUCIT9G57vrRNQ79P/w6Az0LFrGX8WgAfy40ctZFzZ73VoJH1DCfpG9KzR2uVLkdLB6O23Sak4jhPeZfT7qUHue/wU/3hRAeMjx25uZDVdDm/X5+LaqU1Sx7AQrZ8P98DsbhgihKds8n80N8VrLvM/P5ESean/vDSsHDWzia+Ttf8fQXLdf4dzWM/zrZ+kn9v82E/XkPLng/a/kx/6FTvld/Lv/qu6azIedVAnWrkOgpvqREBwBe2WXXHycCcKppWncE91JZLWCRXCyOEE7KS3QGdXuQMewvyM12nTwf675XyKs6zRdQsm+cEkyxi04tYL+IYPNrkrBSORKgC4hIEZfqsNFfLYlOOLhjXp/Mpi0uS+N7DKafm2UIT+wMNW6yhpDjt1Pb5sC46YFvrk6msttj31M9nnDU7h+hunn5V32DwAM7BOAhx13md4wdcyahkh5+8L3mBQgzgHcbjI9/Hs6Cx0HL75P4eeB0viKlIa29TfdTX3nRr/iLaQCV/qtGCPpxaJaW+j1W+qO1OB08ZxY8a8SluJektJISrHPv8mray4smUJlmkkzqyu5D8yICFwBH4cih3NmcxD3VuyyIkJbq3+xG5UcaWwEnaJ4pFNtJ7yQkTPE65dw8nqJxIz8snJtOeGD8OGytD5q/Z/1OenOA5gHlivn0DzxNjHGlBV3XNOFTjj/ibJ4hPdVq9gfk7FusrjUeDpKLN4fpAYkDDh1Q5+c+asreOGhNdqERJ39ZMHpIfAG3uZ/d8uZ2E+25HvIv3Gs2XiS3rxgvopqN09/Uz8vMKjrvwtdnIvX48qL+/0ltRU8UdZwxY6PCSZ116ksmLwXkNpM2diOrJjEfgezutfmMxWkokeyLhjpnTNe9pW81i/iUZSroxj/YnMj+cnqHLZv9Q6ZD2f8MGcdyINqOVqtd+rf3ZEfTGZtxluRTU9dlPUYkXNYTojU0i99OOorWmR3b+RtbZaLFBQA5QExf2reG2h2nwSvWk7bYL9IAuDRoKtTKbxt8Mu9xLLrZFj/+Q77yVJjieI3Xb81D639qkWA+5clCoGB6b/q0g7x3qlP6jBmOHqZTL5J5FJK8L608TdJkDkDJxyOBKDZR/qP0VFpRvoG7DX58lWbcDmSiFZeWCVHs/knMBQNnoA4bfWS5RRgjMQ7bpMoH0Lhy7a9xsWECulzphqjYjmFRmi1PigNGA6SB9r32aBLzp6ZQ59d7zKVcinkkWDOVp2/tc92qQq3t3fu9kYVq5D9ZuurrRlzhI9VmZxyRGvyNaV2szO9FXKSIn8mENatubwVe8s9s6RjjplHl/16DqDimnk43dsenqHd3flckqNQuPJGr/8VQVlvV0B6k46w7IHAiFDELuZtKoRGJyxG519pLuwBRKC6eexoGYnOpACckOc5By2mCfSLRE61KYdurDNonkTTXT2ve28nbHgCf3tTpa17WOqtOfmhkude9yPE60yvH2vmw6uedEZ/YNSaZkgjOqG7nGZInvk0+cJ8vZmFPf8yF60ohL6yI9dT5UoJ22iZ6NVrMFGFcemMw0KSJLRZHfndoQl7lv7oC50E33CTEFLU0vVeiK0y+Tg7FDQ9+lshz1iz7SvGR1LDe3X6Y1V+K5DHty5HP+BHv/86l4Hwnm0seJ2GDLnicXSH8LkKqbmg5x9u3lkPVLlF/qR3/GO8S8L/nGu7wBkKsaLA76H23wOpkOzE/+9VLVN5evP9Nn+tH01Joi3f1Z1JY/gPO6yE2KCa9VY7bkZJnQuR5hcZzPUx3o8wkYE2y2S9vbM72RYCtMZNqYN+9/hv34x0ufDvQPJoYxBvB+4lNO7LxyVU0xYJRR59TwvOSzbfKVmwfwLKemN5KC7V2eKKQSfdc1p7c73vXXDNCM98XC5qiozA/NKAmzIXoZU0s33Jhld+1MVf4MOSEdr31reFhPN4UBL2A+AiBm4OUOQJ9IJONe7/X2MmnMHBlbebwzvR4I7nIhoAPUK0mwUMO5DgLlwFrw+/jknC7XO24mwDxxzhN/ff0TAMJv53d1CgxMTJy62nSC8WUcWqdSBpGe/GBEMG/CCw1854yjhqfddxu7smibO2jKdGfJd1zWn5Q+V+oJetdOlTr2u1C1Np99dH5P9SAtem8gWE8SJXic3sZS7iOptGKTPRgPN5oOH7X3wRdkaaghI+d0CIfKnHyGz6SaTZ7VwOo7K+psLRkuIlyYTv1+01NFM8nhANQmpdKpqX3LBlhdEKv4sFDT2TiyuoyEb+AbY54TOF4wjwN0HJClBh2fMTDoUOe/HCtmvoEwQVOWnE66CXwL3TSh3l9dDv8H6GJrRO7quYLx2ZRwvmGR+2UQ8iDrhV15SvkzqOW5wf7tfvsXdS8LqJdj8nXJVqWIEpTDxomvONGG0QHV3570TOfi7U3yS/FWZJzxYuGNWnRbV9PvxVlURKbwOEOcyOsGJSDLxoTgtU2nm9R4RwNF1igaJyI32cu3RxS9WmcrmCcYA8NhIAIOMqePLJAdRH6Tg+XJtzePob/Lyph+LkAqXg7Z0IlZOr+ly/9JL85PHgWDZKPboOmLqYMO+CnAxD8MYNBr4kn5+6KYvmm/Js5ku1T3aLfdKP1nJk233zh5850UCLjxiUHAb0z4ilH0Ssfgo2Qj3CNg+5rAhoSXyAyFrqNQdro7JS3HRql+cnuXxaiORXEQK2ICTNukYptdk85zO4u9D+KgrAu5MfaV8bnDtsAt96XWE0rmeLOTh6ZTE58yIk8qy1Ant7dL4fS2uhNEwwbNhUL+bKmLThuhUnZTvInmvNx7ddp81y4TF37vzV6nbsuQD1g4Letrs4FscTrLbd9ECcFmxC+zfEl/5UhtWrnd8V1VifWnO3l6FyjpQPkk/T0IGAeBcGCY8xzi8JYIDEZPnHg3TtK2g5kpGX2I3TZ4YJDyqOJvgvHGjN9uJ86JOCFL65j6XenWV0OuOoyzY2mA01xTJUOa02QYmDnmWkUHd2z2TQyKGWOs/KylvIVBbPUkY6hdVZZ1vtGZEklQQMg6q08KUalvN003ebDK2xre3Smv787pukOBXjbxcNgI3qPGuHUT2ZaLo7KtpZHgKbJ6w7tp/KKfN8gG3GbJMJJDlVLdtW8uR3Pb/jU78uw3g81u0zm/ONRl4dn5TNeIOHeNAIyhaybJWegOxPhL/vlUp/IXGJiJZrIIZutbepXqdRylDVzsmdaLWa4ErRe5zLFLQfEOVO5kaS4/3zRkdGDXBLpybMaI6W8yK/KIamxsmAFMwelg0Ekg3AC8AEN0pUWGITKaCbIaLr/I4Q2LAbD5vsGtK0wKZnMMJ4c3kJznnJzn7oDW04Kc3Ospn0dFWP5N/4b0f0ZxE5PLVLiGmnfiSs7xeBwOeZMnpoEQPFC+s9fLOV+Cza49mPpp14W4I91pJgHiIZc6ladoPlgaKs8o/V8Zzz6SvCpO7BWHFaG79pK8Q/3sbutlfS5X/HNO6bS+w/VQ3wTTtUDo9kcp8W3G45KHa3dW4mx1YBnHFR9qvOwmMTu1dnf9/Mdx/Zn+fdK62Zfyy/WZ/U7272oPLa3sf+fHyc51m0fDdvDJ4PME326Y8ww9Y+WWuqmq8y0sVzbEo9+f6b3p04H+A+nD5Ff0VWKKp8vz+jcZPBLzvqe+DJclZfrVBrhXMW2QslPEmyxbocHLd59UAbDFEj2XHzpejVtzVO3CIP7rpWTAzAnmEzQpYrAy5JNmTGYcfXSHJjj939OVUUNYVmrKbAQA/TVXv61qrfde2tNRv2q1J+6/fIHtUgtdlN2D9L47NO9WtXlWEHy/5AJHM3Z9YkvrM/++MWS3z3LZq3L3YH4iKbn7YpgteMR255B91r5vcJDTspwn0JC7v+WzCzqrazNjTdmE9BmgqbvXT/+U56cJG9S70e1PZdIDvNSTXnXitExtLbzhHLoocAPmDcwvoPkCHi8AHQAdoHHgoBfQATANgAf4HKChJ+nBmPiuMj870fPnHjf/eFts1+BHgbgyWLF/3le++wn0q3K7ZvsM/VHZ97bzjNq7hzYjNYuVNmfw38PJLC1f13Yb7u7tFN7okkfTGy9qE5j+f4EryQLb6LXtYp7ErDbKrpBHTf+QGbIi8ErnSc6KDXOC0KD2PA1j0WWqIXVl/7lFmJ7e0dHL+sWlc7/mHHr8iaY4HGrPpezYaefhy1U1HLAlVUIEfGNxFFtQ9lf9zO77t2dgR4gaU382bvn6HUrkErii9Lxtt1mmILuxu9okJ898IskEyHYN3NxVCKTQMa1OYPXq3rHLHkyVzBnVOaCwJiPRjLqqHKlUCyvxf9HnN7DzU8hG+6SoWxt71RZK16JAy19fmandhdwoskzpLP0ui5YU1m5H/xUbkBXmAI57+UvBuxBerSA713ygqkC/HF8HgoJGEq7c8WvP/LW0lUP8CmrqGOQ9J85TA3Lf+GBgUOz/JcLQ8OwHKG3QlQonW7wWczTljZRTnc8SKAmgRHa6aYPk7nMPnK5h20Ek11IR4zYnbpNxMrDdWIA+ZD6ykdecUI6ZOj+KJ5zg03LIp7h3qrsx3d3EFUIvmuzf3DbFZ+FDrwmQ9YtE/5psW23ureCYF/2ceUrwtHf03+/Xo/fXctXMy8jXBAavZdaqNm2UOhfrApWCrJFR+NWi/cX2dCsiNGE0siQGlsVtf25f1RluTnOtV/ReOPvkM0JzcyqbewN1bJZg2YsDnf0t0PZoc2q/KohwXnr3OT6TKC6fi0Ct769StWN3Ja5q4PV7B6p24m51wYNKlTvnmSZh0ZUWYsMDY0zgJIDwAptr8CDfYidWRVyTIuMgUUQIgX/hF9YoH32jKm+7U06Saz+Wk+dpTG3TqdOkz9ejPy4tle7gzvNEU1ksXulT10mpFzY0iVfqZ6dlLvUGD6UIDqW09sueUeTPvfPQ7Yq9MxUHVOzYzXUr1jc/bWB7AS4o6uRbRFS3y96Rrk7Bv7uuII73A7FNqww1y+Afn57R5ZoeyBA3ku6ZjPblmUnos/k+0x8wPUG3ea71kLl2QsbovU5ifMMLoHvGVT5MOXA1307MOTHtFLprsg28ZstlOD+2qPSZfkL6dKD/jNR3syy7W7qV9Gy9VhcF0xWm2k1OGCAKx+KFQdbbofaO+5fUlb0ZWiuuizNpEux9ICwGZCojejVNbgGZKN3sPiyKCBbMurB/gs8pO3p8oX+6MSntXODsmdTxv+kj7xBmH738VvDZTKCH2WLvjxx41TvI9GSWLAJayCtDJskp/AHQC/tOz0B1tB9hXht4ukDB3EusBnx0kuD3CjCQiZGmDBpNCy2bjfwYpy904K1EDJbnLxRhNYnkjnObxX0/T7yMgZMnXuXInBj3LP2bTCCaGLQuyteOp67kbjXLndL3WMy7Q0vtVdGBu6KUvyp9Lbs+exHLdw1GrljIhbRkp0fd3d2akxMGG0ujxAXmR0CUWhdO4KvybSGe5WR5LKhuJhtkeBko0S8C2IDZRmNpui26ytZpuDOdJjCMx+wvTS+9P4mwGCu8LPDURYkEcK7HVi+mhEIkSieCpoZhnhDiJznFNI4BmgAfL5hD4bdqQbpCIfnvn0RfgA5+zzh9b1rG/IP1PCrWh/h6DVO/bxYgTT5eGd1XMFD7zvcyt9SHY6lzA2dJ31t93JV1LTc5rrpUWlsRtwPoS3rPaVJR29qGdqU+OKh5XMVGWNvqNMq5OfbYAI2+xorPvDnCG7qjL3o88aWPyfYB8JfjKwDG38/vmxyrXt5ZkP2ZfOcAf4M/1jEICceYxBhjxAm4wSAaftpnen/gi4wR1YXSbRpc9WUH7tlEO1qyTU8pGwJPlnssSDR8xIlok99mg9a9ZOnUST+Jbqdnc5vGs2mzIueynMbSFjNLPe9Dl1pP23ecTloWUkxm4KV8sfeZwKqZoyWpysCdnN+oCQu5XGiytMfI47h3nkv5tv8DnBh72Re4LMKm1zYkCH4yHZi8KQDY5xip0ejftLCyuWluA3w9ytWm7gyr9sZAxbU5pR7YgTFtbFTzBF+y9iMvq2d4owE03RHhwLnjzWjQ7wJH8Psy5EZxqy2Qw4xnh7H0VdtOAjLQFxmc2rxdDtENgAaBDgbGAA1g0iEnwAl6+lzKECit/8Z1QKfCOMnoizCZMWiKM2VKTCCwHOAdQ+qiIfKDKDvjbb5jS+YTE8B3Zr3n3OQb+WH5jIMsArz3jGp2smHFNsxzzo2pp0gNqpCnQYtBGhS6gCE25M4rbRtdF3oM/iJnVBfM3qY7JxfxE9y0nervcJJxxaEjRH6SAZMc7NZGwMrAZurReCP/dqLN9BwdWXQ8Jb3D1nru8UWi9tlfZ56mhpkyNmYERkSrWN7itQ8Of5UZ4Wwke6RtmZMcIXcYxVke+dJvYiUjBh+jTo8ghC5iPTu/Q7KFM5TdBrDNb6oBBC6bwiE73vUz99cBoEBh/tRBDDWSmdYRcn3j4G5O2DB+/3erh/vv9hz9tyaSE/3SzQSssSpio+JkUtlnz43HJIC/22Y8QKwRgiYwMeSqQlL5lqjMZW62JbxtgCfhGAz2q9s6LXZcNCdycSyzl5fT5xL5kXlKFEg7ic6pPKK8jXesQ6a/chK+PneiCaaPjwSz8YnzS2G51AOTOZt1lViXReRfMgWJMuuWABbJYN/R4LHxKLCuDafu53Lxjpa8HG8y6S7jmvqd20GHL3cw46Kaqzm5ScvVpvz5SaAIGvrVaacsFgN7ffyMOFreK0f7GuQqU5cKxwBuZyr/mT5TpGse2XBy89WFJrtrVT2CAOsBQ/0vr5Uwg8+J83aC3244zW8F1omD1WG/bX4AuYpsWSPvyvAKD03HuJ37md6bPh3oP5qMAN+bJ+n/7e9SdlOBz16aYZDy94nylU3+vmTKvDPubsJ6gZjcHZcRVXQdXfqwOEvPU++LMFXLGspJneuYJ3iqIPI7Je4Jk/ekBPhSnRlrNhvfDfBOeNM6o4+ZfMvLoKf1ne0AACAASURBVPOU6SvfPI/Lal98oVAIrCePdLcfdeWSjD8P32qTYyKQhT6bseBsxqzOczzEIudKswoqfUkCPtNnN7pVN1S1tl8RUbB9sfCg9KyAwO3pO1LTvaWGPzPwXx9TQL9UbeWJQ0ZEmoJav4R+7tF3r9cKd0wvmbDSPre/WoYaz5YJptNI5u3SwU29BJniyWeGl5e+MGTZNZ8PNKNe6dq2VtME0ZR71indGSEzeC2XP1v466uJCiMYw4Qc0iQ448d4Sx3mIhsgK7Ok98ErLETAGLLsywOYY4BpaNg1kxkWXtcYcSYY7siypxTho/QDMvpR0/fe3xEv8jwrqyxcspHMm/w98f7dboZ+D51Nf/54uloi0JRZobT3rCxNtNzn4TmVfhEeTY7dWUU2AQ8dsswHdqKflNcXXFNj0T3C/R5Vf/3MQMYCMF2gJT/hzbPLdPd1hWHZaGe4sLxmg5T2WXVFhLq2Z7Xb2tbtlK/D3FgVQLdVAPxfTPwPlb1f6CuAIff48sDEm5a1esTRDyL8BS+VP1WOceuz2SxnuuP+NJmKcwGvsHaqwxxV0Z5+zl7e5HUg52TRHd8Uz7l+u1jh2wUfcmorWVAV4CJe4sR537S+q73zaNGLZO3frcTruMFOflF/tcmdekJrRhGzj5Yz8lbbVCfJeOXtLxyvajLcmUrVYTu07htHhCsCPAqHm0xs8kgX+Vmi39y0zZfcEACwnYjm5PhMI7tTJzb+bsOZvVT77qNZ6mzv7iVWKUV4sGCb4Lww/5ZTh7b5Mm36KIL5ormyJyjbI/kkulYRm2XSb2vHxslgyQCbaieAxhBHOg28gNyBEwDFh9UyIaceT8jYjkRoxLq5kmGH0UWaDVTHrDnP02abm2wXl+eT8AaWe85nuLVtLHK/E5ZQA4ILg69rA7QQSD/p5vVRwrO2EPJOP8MLLRCMqF/EotmWVm6UzUt+whwpjzmyrdfa3nJ1Gl3gwnfhRBj4+G3OeaU3HRe7D3u9nq3WXUiXGyJtwCuIKIR0VbdnMVy+Jz3k9pSt6QFPN4StwPBNy05568V6Abx9ZumUBFZ3BCa7I7m5tYrkPDfH96i5diW7voznzT3K0hMLSZ2R43k5aG4dc2sbLkNdRFaRHl3PT0sGXp+VtHvxgDa6rN6OzeMksHMRvzL0tS/2ykSAXUHG0AMNushjuDh5qh11AgdwTJY5LekecLIT76L7CGkdg5FCgRPOAYAPDN/4YSNDle8SJcBzXf+eFlWHNaIBywGN7Gy3cbXThDWiHJc/huGNAyqjlW73OK7qOC3ubqPPsglgT4dRPnPOpk6DWPWgOczl6sU4KiDjEF1022RDWmGjaIaFoXLLa/+McJyNdm2xkacJl019D9rzqzuuktt/75fOzyTp30a2/oqGfnETpS1NlL88g8CtTforMP+Z/v3Sr+LSnppeJy5yUYQng88T83bDPPUUemGMNt9u85W4VoSRtwpXHdMSpfdZd3+mD6VPB/q/QjJDYVlU3gbIijJ5gpy/u4HW9GUysC/5aseXxerTxtoJVTsplu+3JIWF1AAldXh7lDzAFx2YJ3BjnG96R2+SFZMZNKc41k/5BJ9wB7rDy+vkIUDU5/ekScM/t3e5Lm6Z7lVbJiFXeWQBZoBBHq6e0z2u8seyvbee4B8HcLslUG3gyRcaWGY4mp/k9AWR438gEQ2zH+Y9dKFBTlukRRniOGDiiymIP70X1dYzxIk3ZVmDCJhyLzMNljslp+SyS8qGrqjZ6avz7Q0vr684aGjILKl4gDDSgjrrIvbPURxGm9jTxYW9Tv1zZ0xauXxqzfrlM4YCxm5mtKS82EaFT/s9fnv02FkULH8NeDUaFlykWn2UlglhLNJVQ5stQmycrLZ2eif1dLXTub3gEVNF7Xs9ZW+N2moX+/9pJFJ2VriM3tlnkLIzvTnNzaFSwsVfLTqlIv6uG0m5kG2gOaVPp2UZkDDuIh99L7+gQ3yIh4wjjaHGHRDH37qA4jqevlBKzch7T2JUr2dDwkJjvR1eH3VjdNdmSRs6zu8KyVN5tTD1RRXL+0Kfe3Du1gcAlJc7mhK5p1NKG7R5ruPa63jXEG9oPOOKcq4kMH1Dx0ZRUxTO6BP1ZD9YWbjJyzJudjolnWRZhF7mems/tbFsDLtSLEm2usMk0lrCWqQFCvu1W9A38WDDF10SPn1RnEzO24lYwxHDQwlPnukkFqsOJczJuhUpyYMWTvmplHbjbTnTSABcyY9V1u5Ep9kYZqcoElzd6yMLO+wL2EoDjuOmhENMU+pnjHvtNuWuWZYoX8q+JwWNZpY1x7qM3R0mzSJ8C8I1TMyJz+7JE38Xm1sBqLlptLJpclNnFYu1YRcfPoa5nPINjRgXVcnMYhYYTzBxup9TP2bkBZDXtmvevKlIyzjDAfCF3SZUghdzo8brKZ/JCLsiMl60ulDKtCd6xUzrI9ahbCQfcG/FWdar8Wgliyro2eDf6RTLV6rOvEW+KYU0X/xKdVruJo5CXoQ8MX43vTGI9VPvqtftE+UUu/c/hZbWJ6c7V05MniAA4xQ9duh892CB2GWvCToG/DSszbsg9DgZiB06hN+gznqOjSpWJxvBcugHTjCDoSfKtQ1aJGySUeyO5CLnnaaT4jUadtLeaDSfizedrJUMdHd9z2N4aZsZFKapNJIsg9J/j9yw05tFp6nMI+tHlGEYb2YCE9zkE0G+uc5yEIFn+w0be4k+YDSW2cN6ayIjoEiwAgvWKm46Hjev3bZB6FEA4DPKR0iFhKdeWVc0kbJrLnxgxkVU3tsbv+ucUU74+jeOUjn8tkFobZmuj9mY/s+BW1a7SB5Vey3WqrMzslKhPLNxD3h8flnyZz5qjzK+dtGhUPNdPKjP8+vJoVR8INrng2rNWSqEm8p6hLbgD54EkFyaYFHSxOmsETmgZMUTgwhzTl1CHKqvGVMjJdl6jkefzP3jgG6ouGQa/r12KH2SyFmA9doM+zfjPvMylvYs7qyVmf50XPi94O4850I7TrMw+oon3X0/y5PtYAQdc6sz8QdM/nnvsK/Z+IHTOEPWS8whb7d42b3nxpuuTRgR8ZITaRdbJ3jYUtua6/ldMySHOUfW6AWnKDV9qCtzATCnlguASu/Z1ipO9LAe1llAzDvuDdm7kq9n/qwKL1LhkWwPZMRQCFTK7+kJEDeyCEEjC/7zPi1vnh6jgRv8n+mPmbIuy2s2i00UdmywmtH3FR3t7Ko9A1DOpnKEGepAnzjfbho1+axrDaQfKm7kgGOWmf3vk+b/0enTgf57p8bDV8mMgnBQVnVedFPipVjCuD+RMuPEFOEVOybTJnJwXVDtbn1fmvRFJ8ZgllPmJkh0pcB8XoM4TlPyxDxltw7d3sRJnsGwuyNklqUO9H5CFWHJZcRco+Si92nR4Ord3WcfS4Pt7kMN6DcneAwVqmbQ2aDbd70DejD4+C54MomcspfuEOT0xXHAwgk6relEJBYPSB/LePqiH6XM2fYjddARME6bGFi7or1ophCGtrUVLAsU+U4qq9tntpqN4M719RQZl36W9A77tM7FitatGZNduauD2u9trjLRTVzM7UuHna0GBvoddZaB16f5VKQ5WTN07JkazZXvaXy8rQxkVfx9jMRJkm2dNBnJznNvt1nf41A6ZdBgEFkYydMXR9x5vggERt3NlyBTOlv89SONAUNpOZ84n+kv4+CdsoFzWXRCREYSz1sspmKAcAB0gnHDxBHjMfSUutGDXm/AYwJnCo+/WRANpsvd+aC8633btnWn/s5Qm/JXJ4hclC2vN0LC5S2Sdbtn9LqAnaordeA+KTxC5zbk8abgA9xs5WGW39fGAPYOkW2Fy0+/t7ZLQ2oZiervDGN+TAj9sMvXo7Hv6u2ALnw2Aifc6fKe5US+QDchOn1p7QIMbr+Su/cu9KXuBRwO4s9oJKT6udWw488rTbbTDRtgCfjvp6JyML7hO5gGXugVfuKFTc4Gnt2cM/Gl37Nv8+R4JqamGpi6QUCKWJ0zgadh4/lWedzvgUXgQoFwcUvQU/eNRIBUF8CJGC3LF239+w7PbPRBiRJDYZP1xeCxiu1RIc0dvV6Nb+QvmnYn8w0l3Mte84S9o7woV7IP0AVcZZMmgOxtXlpswMttLiMcX1ZFMlduzLEnbvYKIU4lXwBHWixm/2TIieECNxiHL8pLni6amDlup8E6Mo/CeeaF/wUP6et+ZCpOlsKuH7Tfxkv9lJeRZxZUzInUEm9xqmgRO+y07VWxQap1tM1MS0DQ5KxRaVxgB2l4YQwMHrDYBXkTQgYrk4TPTuaJOU/JN6W+gwAaYrKeAF4cZpmu0kkmnMTDflBQw5w6rRWoiSRaxf9L+lNox3hIe0h97M0xayNeHcr5eefnKJcljz1jCJGSw2q4Lk5m/86JZij0sZ6m504/JTXYCyQB+0LPlKKGRJi1Dd3X0WWlxyyxScsvp+MVO17a5sL59/LeambUDYMha6nUm7c6pND498XAnXRlPVgrt3jHIRM8ogPZsAafkdLeEnnCcih9Xsmy8MWyy0XT7XaljGyi1g0s+Y70m86y0hjlTdjm7OOhmwJu0Vtm8tPENiaxwdpwlKQJ1/WLDHf+jAytw5Tmgl3WAWDeKZtdejT4WYZz0n85y5WCudOiiewtHyQ8QPT6BGtED4uwoUt1SNvxJ+PE9Dk+mVuaCP8/e2+2LcmNYwtu0E6ElJk3q+rWw12r///n+qFXddeQg3TciX7AtEGjufuJCEmpqqB0wt3NOIAgJhIkKDjMChDBHC5Xta9raBwsgS8R3BWHwpzo7XDAbpuOj3mOcZw1V3Jw+5s5UZsqFFPvVN7GrjvPQbUFvsvRzYjtw9O33z8f6YKx8U8MRPKSNgc/gNSr7DTPvocsjD7787vGCXRuuaARgDYgShoyDfdsY6QTnt5xrUSnuRlLl2yxRtPwckKUwVFd372uPI2W18oyZxVQ+v3lwrnBIx0zr5V7Yh++3vr5awflOVxh9q3PVk33UAZ9qD8fx9f39D8giTyhIxcoL5POyufngikHWRf7nHPOCdxu0NvN1ibCrkv7ynRmrZMhdU/zfXxPv0n67kD/limNEdn/fsJkWHJxvWF6mCJSn3nXLkOhT90YtKe6Gyh9svi44A7iXt1pATvzaIZnlhkOVgXu03bf3O92NzaAKbQgoFp3m9/uwJ12RevFH5Sst2u8P01rvy+r+IK616NKsnlHYNTY2RRA5+wOdPFKVDAxMMTxNBXz55+h424C2eJhtSjRk3E0BDgGRCyMofrpM3yCLzLFwoe44a3uGOA+3LIda0szHDxEbCyBnNioTFt4er9BAXz68Q/4JMNCm7gxPlVxn3aX1qc3o9V7jPchuL//bHSjwOfPnyHqpzTEF5ppIQjzRNDL2KCPfSgsWgc6D9prqSYIj/OdQnXR73XB4WwULCcxlsW0q2lDtSEkR5ifL/rb8CUPsy65tmmdkAnPXIL22r90E9sAMKY5g915bpNrm5nbTuqRQPTp9Brw1bgjMqtP643twtBxLA/JDR+6Pa4WMz4sY98XzrbaoBHdKteQ9Vo2zUk8BoDjBuAw2IcCciDuBsQBxPEXuQ/IdMdRnHybAdcjHUawfNWk7WtkdU3Qr94/vObn9I4enHfiWApDWwD8HcAfetHmfAzZvDJ/F5pfkCRB3D2/+tmh2OCNh13RybPVybqHnp/CPW8AeGj07JKcvrZw2gHvCkurQrJPKR9pIVrXic5Jli18sE7IHs7bFX+9/ZwZMutmqFI9xXU8F/VxYa6vzwHVuy24q0uxzdgo1O7WchxZVA079Td1ur4GRAW35gQD0fFC87s/oDbnLf3RpJtaytRsq8IgNx5z2/VZqgOUSp8Rslf9s+66tS7FifKgkxr/RrJNbLk8BS9ghnPhEXH2qrbvroRYI6Qto+4rX487vqTfqb2THuNGnK4U6BFdGnESSgh+x5+9v8DIDtQVTmC/0SL0n2o6HSeAOMGV9p4KxKMeiZezSoTypODIuU+JhB3smkWd61oIdz3lvKjpia7V6PzmxXNrUDfQRIG1AuKdGLOQWSQmE2Q7XviUZ4vvXR45bvN6hKSTPeaibwDKCa5rDhScA7bxJU84ajrd7tDEydld4FGIdELv6gHSlNWK36BVp4sn3OmtIXft+d1JaYSTL3gs8aaYInZ3MOmF9XBw28jg7ya9rzJyxhH1S4HERT0zjFf2AJBwvJLNaf6xjII3xI6qNcKEOA10Oqv6Ay7rZ/QrNjJFDwILo5qNekicNY3baMZxknrCMKvsqc3MZ666TO6Vtj72thWkg7IW2kDWMbFPZ+FBxYgTEuE3a1sZI2FYkGWhju3YeItwsJOMaKxXJ/P7qVvPM1HOyeA3YWej5PrXlLxJA+HEz/ha4YDO916fy2p12Z5taIfHraTokfFd6o6Cr130tdI965Kr4XiyAH4p4vXpiFfn14pSZxHNMqCP1cqWvas9oqtmW8y8ZkxE/Aa2WbQAtwnnTCoPO3gMi06pIphim5uGGaIYfjjAnMEVcXIITJb7HnCdZW826ROGdpw890EM5zf/GeruUF8tazpncfYGfdj3yjndJV62xqw20B3UM+bx6TDhupxWqVznVxqSBE+T3BTuvMm15eKxSTDkpzFi1aFoGwyKMBrDVXSeFsonAOo2tLR3vQ/RbuCT22TUy6NJ/hO67nk1684Iqa2K3k4tlUmXfV+dXF69wu1XwuYDTb0yj+qJsSJlr7HsobHjUgCcwXVrt5fwoDTk+drt9/Q9PV2H3L13ndimsaTPrpIsGYjuQ77yzJyr1/vEvN9MDxEb1UfZLCewl/zf06+fvjvQf6200QXrM6FnevFeELZHMJWiqdddwStYIu8XKc39895yigBvV/MuuJwKTjUH+i3CWFjuQ2wyNBSATsypwP0duN/KgZ4Gczde2+eygBQTPQPnGyriV1C4w7OsnyXA2wJzTu5pEUeTIlAGS038Zm6IULtfSt7NKW7HtNNBuiwFY4pAj4ExBoYM6BDcRYB3g62dTB80UQBynVTkhlwkEwHG4QsOtkCl90UxiW2QwPQp6fS9t3H6NRwVU3MCzcZ6WwfQ2tUcqek0RhsAyJ8A/cv12KxKq2lAf/lHAH9dym3SCteT7NVsW3Rgkl9pmHgNV44XbnXtkH9LQ3hXTDpOXnAK7Kp5ljObiHm4xMKWtjrEHRt5CszDkgPuRKdlDnOeR+18Qilq2znQi7cYLith9B2nSeJEUNEun0I/9ewCC7xAVXK+y7edJRWgTm82rnoYAA6oAvcxYeHcD+vr8A01GMaz7wOCCUhtdoHGKXRvoIFMsOgTvfMofa0ojgWbh3k+CBtvcHpWvwDyE8qJjk2XHhD9o/s1nxvvO9Dk4c9Kj8dM1/HeioTdwzYLuG5DVzxd5xPSjdlEekUlS2tM5GPM2uyFrJMMvYwCwjfn7MWqLP3REkwfsSXI9qo5WoXJZu4uDS30G5vrqM+zKdZ5e7SmBFuexqKx1HfWDfntzVcqBf/iJ7YPqu1n/IT/yONq1CaPgef/TwD/K+E0R/rt/m5OgoP0k1pQZfGV0b+lu2TgxwVH/D0mOp8Uee3Lu28cKp/oDek81/tzccHjlo1JYlWh+IwjaePddcAPjiummJ9pkxYADNJDHnPI9jrB9jwpVyBI+riTsszXxGPrXt6+R86pLRyX3FWqU6myO3XiOCEs6MYHVvqzOi1/JQEky8rAyV6/Gp6tLyscJ6jNxlmfwBd6yY6NF7EAkg7zet6R4d99sbmj+QQMvT0JQCqlFkH5C1Vq1n82707g7F+d6aBk3vn3s1O55iAkY65CQFyr/zBBok3/ws3Y+PQmO6m4BCM8hKRo43Nz2yk2DQ+jb43oV4cUrmJl3d+ZA12hd0G/UqUikcZMPbvikBkZOZ1Nd0zoIssk6NPy/wnAXwh25rTY0JnSnYaMKS/yjGxinQkSf7igDAisv5QHheBEs9+VfZajXot5YYpmVCiyVJCJ5IJ58NXVqdesF4brEYXcjhUIMIbDPUOy2L+5kWqtUttXIRnJDv2TkpVyxMacJcc0uhvzlaTvkB1kyySvIOWv9NHGOazOpg+vKDNV2OTpVsyy8BGkqOh0ir5ylWzXeFZlAiR+nk2lo6229GuWM5zGqVkLuV7+FHY+rvXOsOkU0JsgwlGHrac5XurREEhnBO6ldIixFd1YGl8WHVrk0/Gp0AtH0JYDLwXkw1HV3af3Z/Yx2y7QP6h2l22zHxIxwuGAzAM+YvIheNrYfGLgwN0Phgj8yhXflD5EfD3qgOowXh4zeXLmuhB8Hj4zmNyArWWtfeybJuLb3nke+fn0edFb0UOG13V6nMsG+lmtIO9JR6+vzqvX4K3f1mVPXmdlOGPMo7bsU7SXMHcemjqX/g9/X9ctTOrrKWmxc5p+K328QG/Z13UNLN912n206rUD4/Q+ukR43Uj4i1p1eRSTiyeNXqWzgPF/eVNV6Je16Jc2+i1SWVgrXIIFjzS239P39Esltt2u09U72RAtPZOyy7p0arkB2Eba6TpYdUJv4tE+U4AFwFn6zMtdHnxPv0367kD/HaU82R27tubMU486ejDiE7uRU1EvFzu+EZyXBpUC91k7EhV+svwGfX+30+Vu2E2xZdJ7GIDT8o37hLqT1YzA5Y5hoCb8afV8I+Usy/en1Ur/uhoStG5gv13A0/dI6ZiTzGEV+L19WRAxIfAFgZhB3C2fDnOOWTHZCnv4Pcg6fDHJJ5R4h08k4xR7/CbB70chdPwMmR7ab7whnOnqpzx+mj/jr5j43/JD0qOSUzwd7LYKYnQSp2rVTqvHTtmc+I+Bz8cbRID7nLirYnjYsNuchovQebtV1jWxjlL6UjORJeO3S7kssUzerlObFfbPU82cf5EB+VjrwtDtzGctJ+cZ9Nr8lbjZgFnN1uTI+MJehDO9+dSCHk6gmOQrWqdTECEVRWCLfWsYyTq5HvcV1g4MX3yL8pGPJjX5vS4UJkRwPVi+4/xMnd8fjGHuflbP75FKcL8bH8eqhCjkcEd68LIK5N37PwBguGG3wJhwbNI3mwj9xgbiR5znS/pVp4Iu+va6fPPsxMrnZfNn7fV6nuDl8arDps59AWEdJ667TncpoMaKPxnMtkENGL4Hr51uIxBO5HwCT/sLdqZ/gHTjlO1crtWote8895dVs+5uUGyGs6PB7qKECoZfdxGLd2WDrJXMXFyz9UzTpf+0dHLVqv8EwX+8goDscNhDjk89vV5atKDInH+rsrZtxcADcfrxoU2sVW05OvZyKk8yw/PlQH6ZPLteFFwI/Lyz4pSz/ybdkQBfVEAOz11N99C/6HalBk8QqBHqt9WyFWF24vg51krfBgXXv0s3uMSJvhYHu6vPtgaeNqB2W0vNSSYkQARxfQDNz7zMnX5XiVDeBO0znXpJs3pmyOX1w2fkLLuE4VHb3PgDuuSeR/a0oFw25Q+qIyFK2mIdcebNVWa2duLBDbiLO8QFmMPNqJivRr2iNTcRtQ3eemqyWU7pLHcQcqszgR1V6zzXE3It9hSvJ8irT9r2LEnYbFkPjaVY6OrUCw07Cy0uDZUsnAlchDjnDZeNdMh2LkcyzB6FLxSmzkM6eq6v39Hq49I3m/H5vC8dmpoquu4pN+4UGgx/kjjiFq8Q0nUm0/+LtmwRdN/0hGVMCB5FXjZyUecT2XFq+0ZjdJXoctoUD5p2WStaxH8BXp3GjWwKQIdvbgM7KJ1CnNf5/ETcDxrOVmQZGgGNU71FV9kmOxTVOSENiX3I+bOGqXll4gQAMDb21ON0GrZ1OGbQ7ZMKuCLu88vgnAHR/jPF7QlHgXktnRe2QOhWMjpMzsIjUEbwRP89BBY9TQGRgSl3X6KQHCudM/nZZGhebAE5ZkYBUboTvWDU/K2wtSjeiJHObQQdTi5NqFKql3638uSYVz/xTc7zpN+VVp+NWfDLxctAN0dhUHoecCYW2jgRzhYHduvqojLOYGiiSegZS7SkCP/SpC+NE105f8q3a/fFnPviOG1hflAX679fP/V1wg8CURNOT8/mHdtKqNkrA/RKp34w/VGAv/5GiP6efh8pDzi9mJqAekT/i4ASet7Ff5sHRNUK1JXDc1NXyOrQTz6/tDq0V974bCOIm9j6zi/fKn13oP8miQn948rcZs9+ktCd6WHorOcn98W1JpPYL2ysj8pcaNKC2tiUOM867Nk9ztQAer9hvr9D32/A7Q5MC5Y3MVC3AprTXObEmHcAvtdT1Z3pG0Eh3sIrevrlE2RCM3svt84WT7jk/JuFQKmTZ/k7F03IrIzL4de2LierYWj6bCHw5I5O8VCFUaD1Xu1+dUE4z10Y/wx3ttnpDPNAUJ/zKIMA4waVkTgK53Wcih1+dySG7+KWiToxq8gVpHAA8rZQmlAo1t/wYRcMUUbFmdueTO6Fvwlh6dkk4SvTokOtyR19Pnrmnyd6owmrP2i/ld+fjOnI/8SoDoL+II4SojPQLZP4aZJcq4lmY1zGcv8gfek7s2dU6FULeqhZqlzj+8WEyUerLyR8S0IJ+gdOHjLZ5APKyJp32PnFO3L83nwzypstSOCA3dk5BBneVrBfGfnmffvy+q4dftjQ7vIaF2XZec5f1uObrwP5+N2z6p6YCdeRJl6wLy6cenk66sI+yOoBQH548BLn/i31nXYGL/e6Z+jFzenGdl1N0CvrpBASQ/pvEcjN2rKF8wgN62kqs/WFHKSurXZB2DpfYN6dWlEmk6p0xVu80aW8rJ9qC4QyYHpWxCXhOG1KiJr5M1CTXcf5N9fyZ9gJ8w912seEbTNG565fr1bdH2iv6EnpMCuvzqRQQGSE5QP9KJSP0pkH8rOp62ey7+qXXuZqv5t63ORrRKjL27W9sHkXPZ8/bGPaoxMEsbGuZIjj45QTACbJNzS7oNWZxhfXo2WjUv/My0UIYQAAIABJREFU9pD2XLB2XSO700bXebU8z/lfuAv3iqxiEferZNAF3T6pNziWT9PW87X+swTJJ4rc69r2CT9IywicWntWnvcgwiMACARzKiaHLWlO9LV16X0OtbOoRTdXaW9A8c5ObYYoEQH+lyr+K3VTx3Bui2ubIChP8hLfpU08QV9O/CZBuxuduEXwCzbO2tGrkbocQF1El4d1Nq2GkA2xcaxtmIP3cd20Hn0MB88XHjhIipAHvzf0naOlvLGBZaSsT84NvwJyAIAboDmJ3ylLqnZT+aqUE076omsmofmYfY/Q7AA7+TRPibfTssyrKZoDwtjsR3VplWtwtwgj/vCI8B8C3N8oX1Qwex3Mu/H7Kr3uwb6u4qqFtYPsfE2cLfzClT5+YE+dR4NVUwyBmqZ73HPDAdt0aSMHHce6HjCaQ9vaG7Ar2WTe7RTfABD3oCv8xHScalccQ9NWnXpgyMyolqllY45MorE5jyVgX+41T4c35U8NTsheMMl1706y83A1Z3fW+gJDc90EQx5Sie9Km0wavrvzfPqOg8Lbpof8IAaMXoSG2uk0hntNaRZqh9FOb0aFZC9c1P9V3PbBwtbPb9LygzZki8+efpm2P56eQKoA3a/1saq/O8+/p2+eXqCp05SXVxP3ss8e0ewuhPy9NqDu6s5NTFF/2muht1a+0eX99/RLpd+vA50tZqCsNyIYnnCejGM8uRM123jwspXn9nWBRdsHIpQQOzBP9qyYUondkhpzYfUZdzFJ1CJu9IiOnDfHrneA7gCKRYC2W5iWdNJpWfcEiwOQvMt9UsC2AwI5JtkhNt4V4/2OcbtHry0ce/zNSf3i8FhhRE5MsntVBDgGlaG0s2F3p+1OY7wjiiCiAZyE3CMiIrge0hq9JOOzgSYDJ8fZTKK4rg8+lkO8DsPbpDwnt75tBUbuRhUAsDusEhfRJJ1Et1e+uoOZeS0Mqy/UyIDqwP/z93+zd5//Kav5BOA2b5Z/znYKYd5vtMjpfwMZ8l3fb4AI3t8ixCsgY+Bd776DWTByJ5pA3wS4PVeUTfmJ4yaYURkf2obbmWa/jsA8gfPopchS4u3Ip1rve4NLbSZTJpUrOATnycpKoAOI+7CD5NtnXzS0XeBx75wCckfbqy40biSVchxz4du+2yLmAqPTbi3fSINNXT7J4E01Jksio2ZJnjHbnyAiYAzoFGq2NvJAjzqpMuw2dB13YPopg3eB3mKzClCn0r2MTpSsDDgrTqvS/QJsU7V7B5juFloSv3+3PZ4T0HdA7smDmAOQG+Q2zHF+E8jtBr29Qx0PQjv6l0Hwfi167Tk7PUghX5dHrelFuYMd/QDfVb+Xt/2hdsSd6w/jdH3XjIzIOIql4lG7pFK7MPHP4XJEUAuJezQuY0AgzdiKf+rzwriR2i47ATTOMGl7fBJS67PAD+vE3cLg6qQ/fdX+IuP+Oa/nZ8Gf96CuwyIwZTLQ8Z15q8z9APLqheRX78KQ6m7YM8lURHcr0tlpld2SPnzBNnJ6BBkmS3kjE2NH44lKRbsVWkBy0T7yu7hzRgjDI/syIS4erXY7+SN+xySg8KscMCGquAOIcz3/Fz57nTWKzFNDfgBE8Pfxc9oJAnfcp3ztyGpnlwlvEu0ELHhDSGZ1+Xn3k4YCtfpV8O52rNm8QgvqiQyIn6Y/9FNqh1iwHOSIDcuCLiAiWKn/Cqj4FSosO1SAO/CTzGyfN0v2s11eD8oGGI6TWpYmPeAL0zx5H5yLxbgQzJPFmxTOG46cFkTy1HSDQKVOQYrgxm34M7sDNTZtINsR71hQZ4SHtk46bwowObRzVqyLSbzIHhIPHbsHbMOmZ9JiW7/0Gs2e4wMCfq0Bxf13mVGL07HgzbTdKcYlTtK25b1vZK48iJSUpvZOuASeyInx4fTMYdjAOuflecVkugqCDEdKymXO73ot6ER47iYkiotyAopyihJo2XYFoIWJBu+qtvx3yaG1vrCKSwkRuqNtdc6xDjk5Qjr7xs9VNUUbN392BErE5QnhxW7MqDbTZRO0JAKEDSgL4P5wJPQuc8vj5Tit39mK64cYxolwRhfSChs0T6YerqqaTYWw91XurTYAkOHOb40w6+LzPml4klMr1L6XEy+XyjPEp/c2NpDlDGEVKa5acrobDwNt0XUdG0gIV8TWsqBq7Ud3lYzqS1anuLcZfdQjrg8lI861DglSD1sEnCPrTjhEWvbQBSmbFXkLNaujaCd5RIDcrBFzdpgum+GohJ/rdV6P+et0So3PcqmXvsWkZyGGF1mYC9Ypn2cuTkdI9wiCZ12l6FvumG0OSCD1QPS2mmRck44m3XW5APmic30fBEy5syX3kEghmB61c/VOSPFQvxJs7XmTIKivNsiZI79M4//p65I9uKKHQtcB0VkyFeXQjrbHIJtGQj7GWXa1aCLcTQItwvRXOfoLy0sEYRer04iRlvj1G0h8GH3XEES+cI6HuWGvS4IyFlk6z7x/vWg93Ptxv3rSfV45ELUryTceOi1zJngSgI6BqRNzDtcL3ta0FQsLQ4wipWgWFnMhVFH2u0XxYbJc5FKIEi25bnBGZfvLRoq0Q5rTbCINvIo6EghUrkA1p59ln4XlL/T7HJWiep+SqYsA3eeMf4Ms1xPkeykRa6GliNZ8j+M20WBtHtfc64GMYDg3BBvsJ5vsKTMgVSZx7h3igI5ZS8BFv7O8y9RODNfw/5KJaPgZGGeVQbbds/I5oVLwmsFVAb388SjjB/JcqZXV4Itn6+/lPORriQqsay3+upODtHf2OdH1MQlt4ukSnEK/Ld888ZJNLvyoktlYA3bg1flVQhceB/DjsEOKnxT6twn927326FpFkGF+jCmCOdSu+EpeWnCxIPiE1hyTR3LieWrUFrYwPzsZ/svzr2XRry3/Fd3//TrQgbOAF5r0OFKKbzdY/iq6WQlPy9pbZPt2gMdiVDYup+fBp/TJO1CayyGUCNehBIw7UEU07yFahUkXsMW9bZFgnRvYzAKhASUmJeEQpwnmuN0g7/cyeu939LvMayJ4OhHCujEneWyGLB2omVT/3KYLYmAchfPpK9K1UUOGwCUsm+cbAbhmU8BnFdKfPWIAN0YM3xP4o1qMzjBoYtE9wj3H4MTJdF+ZFRmQqYDeYXcvi11wD4dn3soG1DvkfjfzNE+go9FGWbU0qAt/K/oJ5LSVg4oF3dDivz0yGrYWqiyH6on3tCZywGLg7FDOfQCvQ3ipcP9qOtdzIrExGJXrpHp4UT7e5XQgO0kGtA9pnvrOxXrH6ql/NlmrNe/A/oJodqoL9UUWw9u/rWxc4lKa7FXRviAK0CJhF141l3bCVoXE6mmgQ/gexwlbgDf86PDeDqfPqYC8+4RGzHGTMpg2GNDEdr3As6T6jiAD/qC31RgciTuVmPKHfJXSOxGbdFjYehEA94mptoxrsjvogiblcN7lVQL+/GKdqiBPyvKcu79k2LXX6E7OZXZV82YyWZ+xDl3bCnyM0g1x/QFcf66b1XyRNUITyrQ76ifpwab7Qic0J3n0yxaHUsitxmrTXfQ7SUzyft+u+7nf8fWsawoHKHrc4mg/bixTa7EM536m18Hq0rGpz4ci8w0luNd+uIhbF9MyFK9CQ3eJh2WeIesIDysc8SpmSOXZ8Kar7WtTYK+IVrkX/rox+nmwGOqQt7GhrLa8SOr2KJVyLkXz8LpicXAEhxqthMxYB3JLHxc/2+Ke0aEOl8lizgwZvvhP9mfcu2i2MEXwOROwyfMRNmWPMpB7HUiklq2QxZv8kFrRMec6QttZmOemhgOwoMfYaa6GV3u8jkKNZNmz4dgKmR9ZXKZDk74Y0hXnJxOBxSMRUIv0EGNxqq2/77839BvjxHucRNwRZPnDjCwzwSl40Dgvui8w/kgNKD0RxIIGw6wIChOdHh13NFksFGe7Rx/Y6cFa1BeJE7AdRa3MumK7ZF7ji6Spc7k6FzhhVxOXv1bSbTPMK46cU5Ze91yfpUwMfSat37EhIK+aCfrzTWaRv3REP+W+3kdt7MMyXos+V5kRclPCr7hsYvRMg8feeZn5NOSvydxYbq/v5fS3EjmfV1JdCzaV8jM4f6b+WZQP2pyvSwUhMyHZ7y5/7PuEJvw1l1KEzZ8sGvMy51VxvRK2tDRcFapLN619rE2I4hsdYmNhfga9sFzUMAuu6bqSXOrddStEPfeSWhsJVuIRIpSreEAEQcHcGpJlKiBcgsr3fFoALHBPxPqI4Y+d7EEfTk+z9D3fS18wrjKM6JWbj6sOEh8uw3OQg7qsxqnl0FSnTb4jOgLVzZRmyPvMW4hrb9RJsUG8l45Wrhzmfp8zOdRyQxTUNyGzmFf6VKqbqfwsQ1vkk9josoPuiexN2Z92ABUPHcSe27Xz6HCf05P2s6nrDVpxWOFUZWxCA9EYTfhzf7bUxoygnwnN80NKfWA9J/DDEsMjTQRVadRRfLDVhcJ4c+d70Fp2yTc8c7dY42rQbVW13vJRW7l4lt1WeRLb8f5OT+PbXdVPievytv8W0bwuJm09gs/PzSTME2KRQMc0hzmcfqWfxOddqUO7HRr4qs2FDdHLg0CQoLBCR6kCcJItvYrO8dp+R96lPXqdICysIRb7oEHdLaWeAp8l/fo3pjihUqkXVpzs0mZdL37z4RCDZbGESWcnEF1s2VdRKsv4PLfZKgndobGSZb3O2Z7qMgxEp1ddzzZCf5NujPHKNdgH+ve0OP5Yzn1pqrF8oYnVyIvHz054itRQRj2vdmfN94rp9Kg8PRea47XMUnzQn695vnKMog6eHzW6KOs26w9+aDbXWp779QCmoE9a5FFoXjMT5Yf6EtUE8HkAf/oB+KTAoZi3d9z/ZptJR2yScN62SCw26rVhaxFiZ4DOjxTV369gg82IVaurT3RJJ1nwO0u/bwd6JHag/F7SEzn/SuLJeFSqy+SqNRRGP+W1/69Y4CJx/anMTGClbJlhMdpfOdXtt53YqFCKvUJ7VneUnaeQvS9e5nRaY/n9tSTyW5LYZdtC7/bCarcp69vCgCKzJswFbbHLT8Cq+AkgEcw53Rc/8IMI/nK/Q2TYHejUnQgfNcR2v970jnkXvB0DcwDzdgfEFZL4nedD8+D8yFMbRlPj7RPm/f6QXJLM2FhdjGsAvsD6Bfh8lpa2lPEZBmltHd6WldV4vqi7PY8vETrfDQGNDRNpFHT5s4nv8KR/BsS5VPSQrcmg4w1xs3MyMjcDWxqKeOKjOZnmSce6KHAx8AsYqrYpRA4zePLk+pyICBJ2wny41bTUJ2gTlotGHrxHGYHbxfUayxSZ9+nOMJp8LIbnS6P6DLbfMjXDmNIjx/rF4uV1AQXixNyAbVg6kL/FHbsisZfJFneGwHaRTgGmn4KZdp2FbqpfgPRu2FbtlLP5Kf37tiu60cFX6Qeqb13il6K/NlfZNeqbM2JCcQJMiIWlNmUBdjI8nehnEPDm+M5qtcyTEALhNLDj1CXjnTVTdk5yHihs4Fgf+KvXSMR3HdNJiG22/OdZpT5uMsqxEEVhi2rVdJy+FnwWk+Oq1tfbLBeXqOKQA0CdsYyFsvh9gtXTT+iLiQBwoDvpYyBsDS6cEfHqgj8F+IwfEG6onzQWQv28Zm5gAX6WW+IvhuWzfIJoRdyZUkxU24tiY9MifhW454SereT4d3g2c/XMxBvw4xpNA8DnzG+13XBHxW4OiGljGvpiw8+0HFUyKpy7lvOtsjt6hH+eUXzx3PBCdYHIUnnjrsn9Ow+xLl+D1wO5I+YJfQNFnv6KqkIMLKJYZqfDpdn+xImy7Dg60aS9PfhkPl01afetGNLMv9N5svnGxfiHnJ7v026MlP6tPNref9Ai++q0k0X546oTF3pp34B/8oAvmyUtm9KamZ7aYNqMEsnltIIe+cpHHsRdNn+6lb2NaDdOVQsmMAemXy1kTgzeilN0JCh/hIHum1bFnIniDoq8nor682cA/9k7VT0g9QyYM2VaNwoG1pGXyI7nsc5Q7zh32Y7FhyUv1xXWYGxXSq11yQ1VtSHO8LLq4q2Zt6GLcsovXZuxAaIiXMVnyVuptj65frvHKQOFTI/4ciVUlWFY8+1ovmM1npyr7xvDrpLGe+cLnbaxPdGqhB9hGK9k2eoMCT1BDhPHX4T9br6fYDd67rVSeZSzUuP76rxsEnWZsms+S8cfyvle052Q+7B52v3AivfAkfH4NJ01yDC/H5mHC20d6WEr7xHbcLF7HXxWbWkJD+KNDoty4U16RV/oHvSAy4VlhEDfwb2b8/OhvjntCr45Zp1EF4+wc6xb0sguS3Ot66DQ9yHDS7YUPlgn5AaOvAs9ZGNsKD2PJ2+miPxhR0yNk+Pevo+/RltJ3308lWDJqAfRfqqNLgO1PSlY1zFjXkqYvb48dT95NaRg3jdEsg1oMuUpVT0QfWfb7kvqWaSmLn9XZS/bKZwG4hK/H6lnC+dvmEg3XGma/uzBID1cE2LB8IJh2Oy9srX6Aavv6bdPG4Hfnm/eKR4YTF/Qdqv+A3SxOkqkEd11XUyqHxJW1NTbgeOHz2ac3SdunybuR6wZezOqOFwm6ywZ/VAZf0+/aPp9O9B3hv1rhT5e7JunK8XxpNSiKFhclR1QQYCUONomQ2y+fgyG7Qlanvv6n4TxHGEb3VckUOjdTtlNcp5zCCazfSWft7BjzdBZBbLg3B///UB2v5yC1r4V3TyzK3bPr5TMabf4/v0ZBn2Y73rHIRuiilMo87aoIn1FaEit2ohmODeIOyumOTB1TnwW4GcBekhClJ6MtoVhAfwmLTqkzoTjNJYTgPj8I4C/nMdFl+I7/MXzPwD4a73OzV1XaHxCizQfY3AAxMYSwvcKC3hxzMpYnaRsa8bUzIRE3vAlvlxYs9lpnU9ZG7wynra9W0CuMiu1Vq1+nuJqV5vUFw3vWp6kl/yeE0DYCfG+N3ig3RXeJhO7fnE4L4XIgBwWJBNz2hUTjrs4tamMQ5rA91n8uZ3TixXffOq17aKPT6KXJTSWhifRVpm8CPW58RKN1RMa//US0WQzghf+AE7y8hp0WT57+fweeM6T5gM4BHL4Zorh313GjWEhsuMUqt7VNgzNianTTqRTaKYgPWuGjeVw8FqbbA5llvy98EwjnQ0Gnum5aGzVxQ03F0Upj3oRnrvUYhkQp/rFnegyauwszGDBIgLIIRT6LRxzBA/RQWywMjic9glNIqVD4iYGdgTSMLyIL5dh38KGiJVtclLs7ojOYfbw2RNRBnbi+wR6SDL1f1tQ9VPOR115JBKSliGnmxsC8FLrSuVCx3s2AWyDQJ3mSh1JrFknHPQMdOjAVSAsv0m9WP1oD9ZAIi+owaqDA06ufc4KHV/BM+XdCN1MCDjJNtl9rC2cQG6aXndaMORrVKCFt3Twg3RT4Kno18Cvmku0WIHGZwyo9gfbsJrpaJtJc+3EIus1WoxI/MTYnys+fWXHDOvLxOtCR2281zoz8Uhpgkrd3iRdPpeqGm2t8nopsyqSi588NnrStUQjp7JaSgBUdqUlZvoFENMTehqSsHWv9sKNhbZSqqtNU/rJNyK7oFM/0cdvssvhnfZuRKSTON0+XLbmFhyXyVNsUYZPiTdsiabc7sAZ9HEi/b82WOLqVBSDQ+F6F6LPQn+tb/GN+PXsmWHhw8JonsgmslsuqTZCPBBfM3kqwfNq4s0d/CwqivURUxElZ3N+kLzsdjytXwwt+MtBtwPC28DutLs2PKScEmBxSbV8gJh+T6ehtpwsRVPnh6yTA6kfEzbCQ6idpQ8r1Lp9jj78FLo65EIu/QR/eL/LuUftr88Rhcmhrkt+6vvUKpMbbKIHq+xo8iZ0LKuIcmr2wkUTjKvtJtXtpOmCctb6EizvOR9v3sG0CrorcfrSRM42uz2i8WfPdrpvxnUyMPqcQ/ycRazZWLl5REylkg/s7FjPBttmTbSxKFkfxEkQuY0wHbdToyWS54H3oMmghcrl9F+O78mbondoYjuX6o1NH+t6KQ930bQmnbcy6OOVZYhHknSi7GQHPk7vJevunSqZU3050ySV1Bgn7lCv8xRxw0pcYXKfUlfv3oE7iP1hLKqG+Trx/yL7XIFHrVyt818X3vRNT1+uG+a2mt31SpLN9xhUj2aYz1b9i/271QDfYeBrEf49/YLppQlwpaZrv6SttZ5nRWhxgH83umc+8O9X4Cnq3ryPwOF5j3Hg7cfPgEzM24R8ugNvN+htWoBmuFxVxeDrZNqdM9/Tr51+3w70V1OuyHwJc/6jpt6XjAIIpDGQ4UZJB5UtnRy/Fwqhzx7or1P+MOTvE5h3D/lNFwhOhc5pJ39xYVhxn4QchR+SSI/SF9LASbh+q/RKnRd5CJ79Aa6YJvyCdJ9GjJBTjk4YrSuPU+0kwRSiRysvCqtjKFRv+EmHna4cwM/zhimCQwbiTtcB4L6EhrITdabsJt1zd+DAgOCudwwKVZuG8/qd+7frc+s/PfsjzIm+5ZurVcf9e90A1EM76/6TamtrpjyRjkkYGxHxLWh99Qio5qlP4efnj1U6nfrRcyx9RN2zWxWW81z89750FNqFx1thiTODWJ7FKcwuBoXHw3WKrdtWSHMRxRh2okPHAO73nEgDFoq0jZPkPxdJ++dDUThT3Beki/DPZ7qpx3Uk0whIPvPM8VR0V98/QAqCfiC7zyg1zqnlXH5+fpZBGQ7BeBvAcUA+DchxQN5cznnUf/j1KRGiME5WyaGIOHkyPSpAXCPgi2PGwk5nWotQul4HI9GnZUAYB0HYS9HLpADwE+X9A1XyoMzyuoV1FOTd2JDCuG3eGbnZxA4Z00JZ1DmQcZ/bWCmAt2Kt4m+jg1wsjutHUja6/RJl+DS6raobGiK08KoHVlLZmS6Kx+HbW4XUpyUJkIv49il9LxnnQ6pVvHvIzeELjodn2HVF1SMkiPhiYs/0f8+/4c8uMz6/WXSCG51XifuyB97wL8lTUrgVj2ri10jk8ElsNjKmecdPiIDAAz9AMTDtpu1afKfFyTwrPgd+lnfIELyp3Zn+A3nr4+z9e0rKeUnSseXpjKXCNg/13xss61v/rYuObrS6jGQWLU0UTnSNzTMxkLk4YE/z3nKpL12SST5l3Ts4dziPVtAWNR3Pef1RhmCEDhFYpI2sLAq7jEu1HTjdDMaqQ1d1SvkkLxn1MqHfclMvyg7iCB8VxxQnwo8PWjxlfHOBvomxngGF37mU4bTeENGS9sp5u8s+/wrIg/dMri/oh8zC5sbDEk90x7Ok+U821u535TY4r/RWmaZLltS9zC0PgD5xiK9KPEfmEqqMxl2yUmMqorh7/bH3Tt0MCAd7nHTPfWJqdx/mHmTqq3pbAsH/UvWQ7pYmLJy6itI1HBUweKVxbadxqGO5KYbmDoySOlafr4omaaeUWv8rozuVJUcNqrXh1Fv17FKHwcPxGleKeekKAhyBzOtOeu7ViQXCxs0NHTHfyH8yggDeIxuF984Nf/3KtEypsyuCmIBo1x1h52s0GP9r4udn+tTAWetn6UnDzCD1sTrRlzaXn1bXvX4T89deih52PaU8zSlKnBq/lCPdlgsUE3FXeeiIcmRT3VEPP088dKdhhm1vbXf1wh3hxxq65H5UiOqIcBP5L+bmD5F5kdJZJ0w/gTj6TpCu8/tAjm7p6LVUTtmL9FLVXUeCxjGjc8WtalKyYohg3v2ebrHr1MLBHiK7eMlgTTt0xGZ2TXaRuBpkRsQFoiytDRIq2vpttKjtL2Sw0VdcRDD9HnTPL8j8M+oj+uT6LDzvTBo1X0nImu7wRn6v34Xp82YHbqv65LlV096fGn2QBcbI66Wrghpdpv1rsn6SvrhgryPZYtFX6/cdoq5qTfqwjLrxLzBN7cB6xO8J78tpp9E2WVqS/fPFtuz5CVlNjuy+axk22xTte77m2Nz0hw9rpZJ5JmO/p982nedFHyu+0M86ld6lR2uVV/U3mxdkT77a6MNGHtLnOAbePn8GdOL+fsPt7c2uur3X1TXAA5HxnfR/k/Q/woEupy//4PSWC0ulLHLhfGf4smxRetRsaTKiKNMJN8/kRSx27VZffAFa5zTn+f0OubvB6pzfwrZvZypLc48MkHPmXBCL3w1CzQ58Rfra8mtdVwbIJs86jz39lv3vtPH2eMm04nkxjrZqsBmhmvkENlmoXapUepLxNRW19dSVzJQ6tT7IwJ/TTnN6kSF1L5PYrLBsKv6HF+dbb5zIr2h9Nfx18xk8FHX8FXUSnU94bNMyyT6132HpeH9iPGpbX0IsEtAsC7GD+qSVVU15z9FX9+LYpzsBZfQYyrlQJg3l/pQNXyzfLwYgZ7nchuTvkyOqBBwqvrO9SHtKObMy1NSmwpYwY+FOT/5hoX/jiXh5eTuAu0BmrCbezJk+7QjrGgp/AX4z31j5Mh6diTMW0ZWF+7qbWuOZ/8hX4ZFsGfv3S+vtAR/9CsnItPA5m3JDGcjbwoubRojWNOSo9Pqy0UKnDME4BuTTAD692anzt1H3uXoIUoVgitRCkUhFL1UFblYXJircZuD9bkhu+1uE5Ws82+lo9GeR5cX7J4INT7kfFScYUx8xXwt9CWc4XYYsMuhZLyvO5gKYXoi6hbCR3gqtxWmnDYt8T7on8vupl+x32A0eYjrvQV37rQRfreb18WOD6yVTYpMpdAGJboHiPhVHW3jv+v6KItYu8DfDzvXpiv8E8Od4/0p3op4rQNbNEK3c7Posc9W9kUCIuwqSnKFEVUnuRfZajN8I+NLve5AKgrWs0md+pTC79FIpr+a71vNl7NT/r6s3NDYF8k56HpQU60vddKXHyT7mDZodnP59R8rUbxFguPsqHB4hW+MkW4qrGfxbel50QS6NY+jm0tQLjM4baeoo8hopAG5ASrD2RqWSANsmHuhoYMGBlqizKi0vX3DQVCfN9XZ+zIWoFqDr9xU/ppjaZGiPMnoQPs5/AAAgAElEQVSLvwkZnvimcifhIL1TmT3w4y9pjnL6vSu/2sEnpiVZJKcenemYJ8wuI3LTb8gKajsyp0QlOYGqIslUCB7boCN2v7rr/Ny+6eolTIC4g91YQDFVMHTB6RYHuTfZQ7orodJcpXeotyM0TOpDHV4rK6XQZhEG7abzDkj+TLQRSgNF1k/esBqdTuQ4rfPGVQ/rLcbvNqeUpEtx+UGYL3zQPcuanzE+m2sGdMWilRqcZ5Hnlktan9nO7PdUc5IzDBptVgj1yi7FGqQ8ixPiRLzt9qkQ9NWvGPuULYEPFwZRVw/fTrBcij9pmC/sFTqi7ql2n5pCKfJP0Bw8YKE7FsUcUuWfqhPBRV+r87zkfNwIDU1q9XdK/BnlyRmpSmN57lBrO9rkbI34qcDyM0foqvxF4g0HMbiqOEcNUy6z9CXk3L6Bh+1X+Qf6ZbdW2TKTDQDk1S1lQ5XMFPW5jtP1HYJDBHMA93kHBjB0lE0ehEqDWEskpHNDtGvMw1bn+fJZVOy00k+GB8RJU1DAnd98bcCk+qqnGxz6u6m6hOst/DJvFAQgOufn5ITRKIPlTx1e5yEvP1Pmj+z7yc7RsmMYuFhjKht3YS4NOXnGw+mE+wukCbBs3iK1w70jZIfpUXO8ucJ+R11XgvKXSamHm/q7gHwn13bv88uDvpwWqUIv129b67+u4tzuE5gCxzyIevVJcH5Pv01SIOeWzGePplJY9AZc3qzrGnIul+8+kFLup4212FanjYkXQMc8qRlDLBF38q1yyBh4+/zJZO7PgLwNi146tDbnBVxxsAZlt31Pv036nTvQ/6cIRzIMKQlAkXo1jSJpxgvnVmLw3arXYvA2IRVCRimrkD5T4A7o/Q7cJnC/20l0s8RyodoWEZrE6+1fLeazXnwm0y53vO36/GqSxUL8gvKtq9LfRToZYK82+KXlPl77Cf1OK/E81t1yZ7Gwc0Og6Q2J8rSIdBxQVfx0v+MQwdsYmD6RFwEOqaUYJYX3+fNnqApu0DyhDpUMSTggtnvZ6eJtDLy/HebUXEjw9JsjEHGfSY83bP8Vv0jarp09Sm1GheJF1CQKNAnIMoA7e9fWaMGLOnwZulb448w8tbTVz/cZrQzEInqJMOLBmCdzQ5kG4KfIc1JTs80L+UNAy0Sc+Skneu9HwB0dtn/VTk3mCXQBbta+jmF/UEBnb7IlrzlC5CVY60SPJhHt6US/w/0B1bQGNgAFjUT758L/OKnRXITV3/SHPBKmSwQxkiXE4oRTnT5Kh45wPi8viikKOWAO2CEYA4AbwTrU9/bE8nTRnMDyRmjNmVcPTCPDO8zxfo+jkFryyGGpQ5J0WmrQsvdJ12j/eWinBR73Fb8Neahw6S3PPqkiDmhl2yoj7zhPx7nfEY/2F7MNwn1uSECTCTF2XVP5CQoxXLMdI5wnGZ3w5I72ECFtkfVZimraSny19zxtZHC8IZtMhlA/6rrY3GAm5oiMEPixgJkHpyTIJPRDyN4nfVVzov/rAm/JR85aFRW0r8XHOYff7Uqm2yQ13rKWX8WdhLwvKR81rvN2K+KRIfJFtV8sEjwiREuSC6AlAVx37L2kzpJV85lilNpwTF6RVTxnNbe8z/EPx1rQu/OMLFVkHSp0ilqamQCxSEFjCmT4oq3YyXBzEh4QzAzhXrzLHVmc6GQj5wnvzB5An1FgrxetQLIua21TlA0y2W7Si/Ycrtg31couNfOnEmVE3btT+Nr/QdggJ2AumesJ17Hd0Y2tp6mcQEwIIauogZinrY6WBTTZFef8WQfxb4h46fWQiCt9AXeLBJyKBocsIEYZvfrNKNN6N6G2n0s9EJfL15GbXmAOogVECoRicp1OeSdbd3bJd3/2B//F/O+4sXOFhjHyS6duiLPbfKi8+lsCoo/Jwkts7Wjd3S4g0bWUYAnYnOjQBe9dx4e8YjqR9k28R9a4pGyO8enaJPgxbUkWQT6uvF8OAOh4P8n+nsSJuUt1x5t6m6cFYwqpjh7+vW1mADm+F8zWbAutbPZ2wQefRM+HLSnM0Q14PDiSRtWesahflSWFVVU7RRyOFvuzwQuHlJUNJ+T0ZaQIIR5OdrdRwob2koHfgml1jIrDFW2Xk7KNm9Yw9Bo3OFmvt7tIRtJdQPVNE/R9siDyXs3qVUf6wo07EBTXfr4TQeeLU527qjvZdjytm1aS9sIJKUjHZUSHCgpKHYCJ97s6LxtNSVyHpb4Z2SVmbqpLI9dgsJm9O83FbY64nkkKNm2frFk7dcWa5uT35KBueJOisVZvOLxjHXf9nv/hHF28wXZ+tnOycH5FOMuZD5B/wVcZNWjj8G4burnDyq77TnQnEiT6fbSnWypb1fMgv3cQ1YlNAerSapdtYVg2P4mUrHsIyy+eukx5Kfs27YytpWrZYYpsvrZLM+q7wH9bGKAsZ8ODxnMRzN/TP1ii8f8gWf4Wiefhrzmn9dQvCd26U7BpX2naeeo8oWLn1aZ/tmsHCY1hq6cpNQZm2AXf+eBXT79fB7qcvgBo4vr07Jz7Hzx9QOik/o8Foq1yEZwtjzJATjyv9GW3eiH1XlU9XDs5zyN8exiDHh61dOiqRGN6txcEejW4pwme4rTicQb646ktyn/L8nLx/XEqfEg3Kpffmv9+Iex/fA7Zzs5prUbf3QGiZIC6e/w0ZnSWHTGmbX66tJtGfLxYMiwm/1p637EdKTZDew2HytlqovQs7XSfoCYSefve8js7uqN3pcbbjCkmE3rOkwYPG6ighSEgT88oI0IaXnYnnGR5mBsdEAswzOBFD70UYfuSIP0ktfbTNNhu3uG/qHeAhU3QZ4WQjMl5UYD6p83iD/uMO9B1AHL3063RrwfyVNuAEAJeMOhkogvKs7zv1ayG1zqRYXrgwstscyebf+VkC3mSrMCLiKwaCuYaC5Uogc5L6cAF5SNbOGSSuJN8+FzwgO/jkGxqgsIx1dFyTJFcWFa1yA4yBbjDnE63ey1sDEKxCOCndIIvNZgvFpUk5GsW6hODQEE6lipaDLzN4Pu8TkUByN8c/B+A8ek1410WG8N2RNlGE8ez+DPISPwK4Vkj5LsCKrN5pyqoA+kSWqRUypfj5y9qz50Sa8ZiOypjdMTznVgymuP2EybOx4rqK1Isrs9yjvOcNVtQ9cgX53tgL6pMdmcJ2UpS3//t9nfLw+JjHJ7vhpDpSYlR2TFSwgLAP5HOr9OQNOb4Gf1MZDngBQcU8KCZSc0QADe8Axh41yNLSsp5o7Xh0yFBOMmLfBSaES40TkjnDca8o2XmN9P/ozRFRMgh1b2GfSyZxf/uCM3qYx0KAO9eR1NnifPKZzKo6HssTQh/CVEfO9+lAgRFl+LkbG5QQdkAMtE2CUHV7oHW4Y6QQTjcKBKtOtfU3EFxx3LKrirPp4WyBJk+J1tleXYKjR5iMWQlkBuXee4l/NvrtY0vivONqJp4jMyx0NIBj3o68HU6MfJf8PnWE73L51WtTvTeeEstuljSDgmTBoP2z2jA2wgezA25u/aq4ZIuQXcLvmJMO1osc/Kr51n3O61tt/2MQvUjNi2tMJLz1xnDnOi2qTcW70K2RH1RV6i9DMyFoH13p6Z8RIUYd9j+i/B6OsQe48s6Q6IXjpuIpOXIPUmjXhnClhCpoOnpiFbTU5r4iDFT5MbSKCORY9irITnOKR2TV6Q+dTYB1k6qE2ukvgcQ4crZJoiBVWje2gIUDrnLDRcqwDCnsIzNVVJh0wQWYnOAKnQUXjqh9pPl3Yk7oDITK3xqnHFcGoVH0LFZRjO1WKHC84qVVQxq5a1ytU2Uw62HzRNicoraxkR/NoO4g1bVbOrKE9u03D5I57kibYaQ9dWDE9Aa9HAe8IZvsy3D/nAZdi/bg0+GndIL9rC+mM+ykVznbysjbqrbtrDP+qTQ+vqsZ7brGKE6TnPv3qPcHOI6L+4/t7dGo6LqokkQ918MHX4lkUV3G6NCtMfp7WhMROzKIC2LNGiu22Ibx7nrvXIwezk6lc7u4rANyvbQBT97JCt9quMi+YhsR+R7VPsJE3/uxyXO488IC0+8GfTB9bNzuy/9SG0y0+v2eD3ppMsVVH8vvDs7kHbeWgeX48e6VsLwSOXXM3wsb3O9Ks2WULzLht1sYpE9a9sLrLv06N2uL93xx/2+YOrss/ZnLzVMQO4m1mwBBGFdwb/ZNNZgTxohAuyL3N/Tb52I3JKreC6QdLLhFiEe/Eg6qfAXKuA5GfmPTifQvwCM6OK5CjLSV1jUrKYJu3JE12L8ndbEJPTmFyHue/ra9Pt1oD9JdWLlo5rg95CULBvNv7iX7HQCPYTFgDlwDlT5mKo3Z9WCrzXc8IpOs8LgMbiakrPd0KgdgB8YigpVRAoTKyxdIFkTF418FRkITm1/uPyjZ+cJbH/wWDg+evvNxeqHUeD0JVJ3bw3APE0jlQEAvMnAOybutzvuMvGHtzdbaDp8sTrWIxZFJxD8/PPPGJ8/NeM+JMCELYJMteXaIQNjCPqSzZ8A/OW6o15ZckrYAfseIyb1DuhlemRXLisam3dKn4/SI+ZjHipj4sxYdjJ7W8ti8J7ug5K19VgmjMHqfeDzVAlWLOLIqbKL9Ag/Sn/r81g8rPL279Fy2YJ9yM9eldrlwYj7fHW4Qz/uq56CctSvJ8Y3XVjh3nVJFAtBX9QBXtVAGrlRB8/O18nY79FI24peqSEelSnINlQj7/uJ9ysnaUoYYMaqDjnqpgBTYgMGVRabiVTt7E6qAAEON5LvCj0ilJ+3JnXaoniuZCzEnPDjsO+DF7i8hbhjT1CH1ZVsighzLA5f6vX4S9agaUNjqT6NKoQF7zqsfmIfEo50O5Eug95zOf9TAdpRPdC75VFAw2Aludvlmv7Y+qV87zGbHpCMJGADq9T/BZZdOhPOB+TY4zdh5tl+DfWzhV2KATV0Eep9EE7jvdUQS3D2okW6/6hJHY0+0j9fYFdt2XpTd50Y17KJyXGXJ8HyCCZZkUJi9XQtQriF4lcXvk2DKciBjIbHpMWmA/27Vk2eqTcgNHjZIm/vyuY7bnInEAm8kCVi+pvBubKplXrPrXYeJNngv20qYmGFJ9yZPiLTowgtBYswjhRItyc5UAovMfazeqKl2U3VeT6dhfclf9VPsrC11QXMaY33gcNE1vzqsqaNEddbHHpynmem87j1pd49IAULESstFu/T2tkq2jq5LbqRpcSSKz2fmpEzzdtYLu9CFAjDq3TK2/B5fyRzHaZ0siup4QsAbQMdPEx7MryrkOIZQbc+40RLjGy576q3K6R0pjjL8Xd7p40KQv+FHml6HRzKe9NLHyf1cMgsbVobSQsRmr6Pt72iDV6q5ERncibnO9XJ2yDY1RwbhXhR1HBMUs11FC/yh50l8Ct3kt+E2quaGH7VgXXDMKdzRJW5cOWu3BXfxplrxrnQL65hhUmhOPa6dLcBR5YfJLDUwxEVV2ku7CZsMyRxbJEzect6pCSZO9bjO0AOxZq7q1cco8O0zKNuIt5rPs1tPpi+uOhXtLmr6Ul1+ZoZPXTTSwUvHjy0515JXfIAyLXCJjPCqer2mkIx/b7yKQKZtnnEohwKMIz3Bs5dNpCD6myTZIRwx0jRQrJS6YqIFQ88SQDy5IbDmCaPz+/Lnkbq9Xjfwr7zv1qn2ourzhLiCsIrnOsiK2tDSsGXvWs2YMCO1AesJVKmL/SVpzJPPQCq0Q016eb7lVg82WFXFV2UdSX7EkWnWllyRz953RoMGy5/X0n23ujz9LSmV8TPc2AoEQUIPWvX/3ykYa9yRzCxm5B9H9/T7yBJ0ZSiaGNLE1+jU3BR56+TTMesdL9kaBtAwl9nm5hu9xvmnJj3u11XWxoj9W1FTgFNEn6Fzn1P2/Tfz4FOdgaHuDwt7PwjEF1zCgPFLE+AC71Mk4MselLa9Jm7uNHll9RHTQ+lFwflXRc7Wn8UO8XWjP1cvNzUf6qSlWVb/SAjXqtPqKpPYHNnvyiN52PzodQXEPaweX9lMdifpF9CjVyZpuswnofV+lDqIC+0BdqCi51Msp9ukIl4HEzHTdJv7Iznxj4wNgLUshobbheZW0+WZ8xqcf85QCdBFoP6Mq2G9cpKcvqmm3f9jS65d3y7+0GLIw3JwUW8eMJy1nPMsa7B9X4s9jbDdqIpp4PAe0KQdkoKxN7GF3OBojtLBHa0kmNnCmgptEqKR9xzp42FqPa/OYAxkceIBb3Oj8D3yrN12Lf4OU8Cr8O1P8Lnt5I4XyZfT62H7FjfCb3jvx0I6dR1fbiK6wauG8Sok4V1jtZpNsKULQ50u/tEG1wiAtyNDu3k+WywxsYM+031yoActngrw77zhhNjNT/95m3GQq8AdT9wGPgzTkZNP/ERvKEAfiQaU6SX4K7OL6GzN8j1kyA4hnt9JfEtvuFE3IGuMRZALlDoJ4EeA/88BP/+00+n+jXxH+CFHUFjyN/znyj/Aj3zOLI900THYpScBfdXpR2nhonGzecGyQf2S3XBa/EhfQoq95ePX847IMC/fv4DIIJ/k1vPyKB4mf+A4J8CidR200CKPHEkEPyAT1AAP+NG9muUEyrfdVYu6tMmFInfEezXVdsPOPy7u3+1yo50ayneo+ve6MRMJ4xybzYyudunK9ajH0RzrY90fqQ5oXr5SAebPbKBidU/tclbBHShJQ4h30+G+z9TSlxpmRXRvs3XJsjTRrTV3eYhx7b6q33GIoXJJtGBOslYKTW5SsnrxJtu6qXy0b91Yc+f7+/J7cJolVXWZaH8PbGKPssqprMd917bRqdrDkKY0IaTR9KxUy8jaWHmBJWIcKlU1g0uWFQ1Db8E7PmIl5IdDpGVWhArWCkmvVqLBOC9cEcq84YsfRGadK6yKh6YbDHnXxzWIi2ZZQ9UsLY4eR7d5XqV+ly4lQwPX2gqyRLlYga2shpjLvFIeC1yikJL6HQtN275KOuUeUAiVE3SSkAWOBZqX+oENgQ2v4BCI7z1KPxXx7UhTyDuEDNazv4H6tgZzOtG4QFyJ13dCV44qChV9txwInUhPQD4ifzSPJtELCNCOEEAW9jKEQr1I+EYNDob3E8wX3B4d6En8Z1hRpa6BDhFpNfhR1TZhZ2ndgV5cjueT7LNosfhclTHd9FmhWk3kVvyNe+iFlDLkrBptBnf2Im+yBUF/LS5a5uEr2qONl9Jz7KddMJcAAKQ0aboWQvl3up6AZCH+R4AmwQVxHGROfXXpr7GAJbB5IuWKqh/Mp/AnNpzKu7HgMzp8wWfN0y/Ix2N9ZFXDWjwhOkWVXe8z9J9EXWhWneaSjor54Yu8PHz/l+Ur3Wwcp4XCvO5/+L5JPmaG0/0IejSdE3hLD/TMxIOfVAeYJkRv8+iF/QuGojetzNP3iiH6efn8bXpnnXitq51nxzUmzL+KQSIuOxsefyHkTvbF2W/Ntt7xVqzBR8lpjdKJzv+QQ07/Jyb+HK+v0pBALo+1M3ztfkY3V5s1T8N9lyf2MF7qVm/p18tPZ4jZMoM0h59eAQvG9rV9FARnXXny8AE/woJ6ot5VrwO+aPAvCvu73foTTHvd48KssISJ88fzeC+p18z/fdzoEeiyf5ZKv/WSRdwvgA25VCrVl/u1lStkA4nLou2BBzCti89BMYewJSLKlgOgefMN+I21oVvoVCBWjDps/IvT6xoTxPpyCKnRb8vbudL0uXJDRTOTg1cPd/lufr97VMz3jfN5TqF7AX9//n8J9zExqR2VAnu0xc3HR9TgLsAPxyfMKG4TVt4jxObMoaTv+DTD59xV8UhgptOa1vE78UyA3hOzXWIT+PA/YW+vorNHdm95Ii5SN9KYl0a5ZFavEpHDoVVbhXlxG3CHAmaIaz7ov5j6OX0pb8rpyPBS5sq9lgl2bbW/dDQ3tR2slC0v8yQk3362AKzxqvA4xBfwI8c7izge7nazHIDLsvKHXq3lpX0dyxrmrF3ITh38FyO75fS+7eg9D6lV5QcaXpnFB2ZjgrEeJ8EDz7XJmNs1ZzB4w06DouUIQVH1uGOuM4A3nZax1En3Hmu7mw+aL+FYEo4yA9EyHORgXEMiAy7G3AMuvfa/lWFhySlUxExbrEyOc2At3uLFTIdjkMB+dGPrR/451jIhuLf9QbcbsHA1b+GN/p9iPUpxwPAGOawkAE9+tgFrNrGEEv9ivBOpDNVqV8RPmzuKFrKcxHZo/rVxmGcLd0jpF6z1AfI3aq8KEiycTj4gDTHS8jLIX5RhiDO4DTza3VOZTQG3T286EMR+5eJAp2YYgrpyv7cPnW5Fv1Z/XEKD0WcQxcDld4Hf9zOJZ7fwxddBVgNH3Ne9E2tpLLO0F/hR5Z8AckVvjfq7lTlydlM8yMOqdf0T/CRErWAyKD4IKNrZLf66c5wWQ9xtTngeIxx8UgBGjY6IYfwLMAJbyeV57swM+Q+rzxnHpTDbK2vr+BnvnByiDtq+nO0Mldju3WGX71XPc9XuI0maLat4TFV/MJpMZn6s24vlrNyLb8835gh7l8ttskiLLEFIN40cleU97efzWWn8MoazzCao0LDlNNdtflMSJUJrWuZQqZIXVJxV6nTlGJ8dKA2stANJm1DSl77q6grJ6QicWUod61x4P4nHUY+cB5DznlIAlHV8do4RGsMUy+vEym3aeT2cROqj+iiZExHeHcb12c5uUsHRskm6QkvDT6NE+YxptzH+F6Y5AglhKGS2ZfE9AHevcjKW0iac5+el1vZ4YFmOT1Bv0m+wZN7bOMTJ8JBzvPiNVu2cie21pjU3dGKcjBGOHjD7WSH+eJAn0SU3H7AxSd+J/WbsfBIqmYfH+FkkfFFr7vaVvxe4/vkN+TsrHZETjBU9c5PW6/2BoxLsL2N1Rxt9s1G7wYMu2pjHRNFh9IZPEELk2DCIgpiVrQ3TGDQveg5qi4g5yweDIcuIPm577M9zKu04790gBftdEQR3SW3ddrNdzmGsbGk2s3rs/z7hPONMt12bl5HmO82z6gOCRvL/qXrZ2T0pzlm/dUaen1nu+XzfFeMW5JboTTvCBu/A3sN9Mk+pHryu57LrFXVxqnHUvGhbHhUqIjjS2r4YJLW5rk/coG4c7Y6DrvKs8cVPN98JMWoKeCI2BpxPZB539M/XtqpvscvXqz010w7+ib4T3Nu1PP037k8n3fI+zv0XTFv069AjupzpSab4GtE8tDL9/Srp9+/Az0JZyHmdQfxVsD/RmkLxmuwtXDmZLRpZXA7ZDUsygBhx3kWTjTFxIpOou+siZisgzAfC9uHhyYO53msEFydok4r+UuFgJy+7rEpeDBjfaGZ6O23TGudH2yDZ+O736e8j+p6MHk7m8KXYOc9vEL0k+99DGTYDvugN6FyAUvQ6fCToE6k7RRUEC6VPdmg6/er33p+z6NxWohdJgv5jE6hQ7+cqk+wtld9ArMr67rXxWDxWOn1M9/kj53zHJpxKONUCESqfq7D74+rEcGyJrWf+DTHRy7sSRtftFqjGu9UyDKZDUc56WqGNsmdhbzroEp1quQqL5pRPbKMSxCPh6QWHFne8npY9zitSzvb9+kRJRFu1rGEUI4SkFZbxu8+j+HTpIvd9jVG3DfQzYI6lR2LKSSL8vsQuwfPncsiA/e0VgkH66amBp5WHnGdNwC8HZDjAMZh0Qe4YENP6N/gI/eMiyDiCao7mXD8EZh/sfo/BY1bPj0GcLwBcpjTdNjVFCZfBXJEWFVrR0M45qRZ22I7Drcv4koWcdDmhEwFPv8AyCcAA/+sgjetq2P+N97w/8pfXO/nXRtd1nj3MnT74WPBuBx97NQLapwyC7S+3/Dvcm9s3IanPQ/BouZg8+/bpdDI70jJ9YG4ezGHUEvZ5EkBh3Gttm0uwrJ48Ng+PUG46mm22VLeP+KoRU82Mb8uKhfavpQ//+3978V3TAcCvyd9lI9U4hS6YOhbjr+RQoTatjuzfVsAfsK7y/WIwznLdtByA6RrQAjXNEf4pJ8SiCEA38H8E+62QKtoJ5XOwTrK/s73tIFhbomDEH5KLHtY55P82fxm8jricaO5wkE6Wqgzce9x8F7QU9OowUMnJ1jJO2NXi94ibj/IQFGSt3Oo4O68dkw7Dz75HJmDO6L2lQUAP42qHVANNnWHt/8lLdCUJFHsZUIupt6P38k49imoeqtAx8jpd8yP+G06eMuu2C8yburb4GSfpJHByT+/mDRNd51oiKv1fOUZJtgEjT5ToKyAKOpqgXptY7dnj9jIEvQtRKvWtPbpvz+re6wVK2+JRnhacVDIFUlOQFCxKl3fYi9Wyi0g2zUzWksWuXw1yZbxL3BI0KHmjSUSG6EaRmhcaV3gPyDuMA+HVF0jEQ6q5pxZ/hX6S1zlRx+UkiZ961PayuobjMTxK+JRcISGp+TXcMVbpCG9vrSbkGNVaw2A5mWSMcb5itpxCUf6UqM+Dcc9y+wozUHiF8osdDoQDqEEhkbLLhdFU+f2BwSP9kJEYzkasRnD+VFqYpN1scbP0PJKtHG1LkCygOWUosY4Tuuq1xWyNKZBtvbri8EIR7k7uE1deJh3+5y0cBztpgOQxX86NmeCGmtnebp9lEMR93BGOk6KSRrqi8XWMdfrnzwXZUMn9EjmPZ8w73USjue99NI5Y4d9fQ1NeUAPX04RmeeDhU6yor4556cMB4VOj3EOuy3ksPdDZ+ppAJDhc6cJPzhRtBv0XHgseWL/02e97l0I24Hpjmgu+hKw5XdU/qlVHpOeeV+nKqZOp31rQOlzel3GR8UzYF6i+opXxOu2Z+1WLmj1g8bH+MrlAb+kDG0DTSIkaLDw3XQC8RefAo/yIcKqXqpDaywAkr/a9c7JHqPPrEfRYCDurGpalbTpaserSn2+5M195S6xs50Oh+BEkF6oR0TZ5dnBUX+5fekD7PyRlGzRnj1o0226XA9QlH2YFVyU/Z7+QVIaQOdnCjSD/jQHuZ+5tx4AACAASURBVFJc17xzbjd+0m+as0XenOG6vXICt02Wds1RP3fwrH1kuieZLbeJ+8834B3AbULv6saRuLXo/J+y2u2jKznzPf0q6ffvQM+0KI9gUgA8LfpvkYLxQKfQ0/gAdZWVlF5OhHya6hPZMiEesqUvWpgvVDDGwMzLVO1jDLW7HMLCvX+c2Suckix/H6nE/lHv4xenryWfbdtLf9b75uvFa3We2tgpsm+YxNvkT9SJciIS1AYLwacx8IZhO8a9nAy446UWG+4DdtJyeGi4WUsWokjf40/v74AAb58+NePqkIFDxgJ0GKcvDuhquwli3cZ+t9lGfdc/+s9wpj8d1/X9hVK+Kn56RXelNHtVkSt5p52bPqkUzh8VEv+K1x0n1SFVZyzQ0Dy7Hm9mM1WlNeFVfSxxP9aT4TlT2OBLioiu6o2PZcFILnmLHOEBhp8+x3HkLQSKA9Odk5YGlb0Ch5C6fT+24wkHPyfBEt8Fl2T2u9rVW+PEa1Qpk+Ke88PCho/jwDEOu2t82LJ1hF12DiicXNFiLC4OYBxqvPBJgOPwhRzXOQp32rIxTvR5hFPagJ/hqNN4pMDbG/zYJlUxIOOw9uRIXQyJU+e28Yh5KRdeEIZ4XUOgMZkO4eqTHBl2Ah1Q4PMfAHnDv+jAoYIx78ib+hTA8Q6MeznQSSaEDMAB8wykXij7o/7IXgmSP8Sd78PDgw/0TXnV0ZUEDDzHSTCA3kkm+JedjIhKhhATRd828iwKPZJhyVtruV3S5ft1xQFqboqg5lodag8nlQtXswZ6gLY4ebmQ8WpiO1SW5+Fc8Lb/HcC/5LtdNfQwZHOgVNxC0AmVUVepZBsGQ7pAopCsjZGeBJL3DA3lBIp3iYo2UV+Af0AT+epULAl4YyLQQ8F1X05diwdKihdJQOkG8zFTqdCjVWG4yvpJTjSL3fHsG2nFVZwo6MhnEKu9EH/UooewvbV0r9hI6dMhmQp+HQaG+veT7WZkY2ihDhcJRL8Zl4SYhR8UfcNnovSltNDfqYE+IsEDrbHHQuhh0ztz9KVqQnVcE3SXBbsqk5/9/XQHC9ME1aOhQ7J+RYQZsXdOD6HTlu40ehK1fY2CPK3d6J5UecAZTt2g/CIHb0+6c0zCNldNPInatqCMGO4NseNIYItmIUItmEPJMoV6YCR78mco/guKO6zMIHwBFqXB0EoOx9h0QPwd+kzVI0YEPMtCePBsoVMLeT5+LHencNQOaeOqDqedwBfHVcgbHwPe/xljQnKQncO5ETfl+BJK3omgdCG9jF+jP1Hq3MNylCQiAmwYqucmGf2S4ogykSLuB+E8TBhqXpXLNa7wf/eMX2pu1QxOg6rpCDXHnY9J0JYKdBpthl5Wl91TbBNJ3AhzRzgdYVHksiUkXbLzMOvzd6ESTB57PrpEPcppg5FxL63P5W2kfi9KQRecnjfgy0mE7/B5mdZ8yYr+/IJkAi8VhQeLPKV0stMqksG2buYqJtu55uNv1I+0zbw24ulwFObeSNSYqpcVH8NjCOYYiBXNM18tzaP0R+43jrkI0O28IBwFIuJcnTBX3+hhmyZyg4jPL3MDyCwnejjEQ1cUfboDPmg72wl6Rb2nfJPzhqxTwBzoDrf2/LFJK9HBxOwwx1pzOT+LB3Kog/+uyW/BfaejZjL4l6TSBtIirxY91OEv3ZAmkj9jGJ9ZS9x2A3sG/ldZ+qyiD+R9DhRV+gU2XxP7jnF9kH9bX+jXF9u8fLdUEhPadbNwwrqv8Rth9nv6Jmlj/wcjvpIWOfFSsae+nie8cppPPUskg068owuPlgyzG28mcLtBbmJ+svtMGTV67STjPgLb9/RLpN+vA31LPAtDMMV9jeP0105pNQLnBRTKo8SrWawmv5UXVR8lMxiuFNjVM03BEuWHIMPJKgR4s53lA4p5F6j4fQ4qZ0fC2t/LtJo6j9Oaw+TZBS4/kr6ajtbyYRTEKsqVGfdoAr0O7Cbvjl+e9IWmMcsLmtWszvNc4PorIH9COh6GAHL4ashAOtTjONKoNmWMdHiNY0AOzRPotnPalyqoPSFruE6z+2/1++CcdjUW1+xlGbLKv6190Os07PiZK7kdemlacXrDWD6/LkX8PMzR9fs1zGprqzliOwwZe4IXWdIAICNBHNHhRB8xu10mYQlCk1ZUj+ZrifEl2rwQXw/6boOSU2dud2tdB8EEauL0RZ84Jx6yiosgw2t7InbKVu/mRHeSn0XJRV98CjBAl2r/sr/cl93uB82Wkoxr8xVyUbTJyDAgT03r+ftvbcw1WRZyKZWU/ePRUeQYON7eMN4OjHFADsmFvjaecu7pyYgV2+wzDsfVEaenw4G+VJR88wMSOL0VjN6I5lWgDjcO4NNRBCF2slOOYad4fbHIXxB71niG4zAm+gbSKCr24kJRY0TNnpADVujTZ/wzPpnzXO2UmOo9F/1EPwPjHb4CCjt1FiALnT73fh6jzDPWB+GwE9jY+EYFo8c4YRzjXkTazpws12w7EgCNk52xIaGNbB/fZJZ4Rrhi2ckrfVzHI1V8uaHuSXrAaz1IbYHQQuXqAiMKnaz+Zsqe5yB9KIUtGOo02mAnegBHcNfpSVuYj9DfRezq4l5JeJrTJYfLLrusMoGhRVdpNk2wEvzq8EwlHbAs2kV9Zn+ATmq3yi5w5PlaGUXpocDJOD2z3IJ0RicgLQMrl6gsFDfCiW6/JPezOEaJtn3MGi/4h4SOJP6cVU7uhOM4ESfhMPTTqVlPVW26s6nKwn3qNC0HSWZRpEcG6HvVFF0UEK8vmqUWk1NvV6d3o3myn7epZG7PrptKlwey/pQLWDYWVA79+o5ObgO1EL/WuGzoy7D5+e9Sb/OIEFgLHu2bki1yFkQsR9spcwRFXmGe8Oz6MR3rIWME6diNv24bqA9ND+FdbZbeKH5Z+J6vlCAO4hOecRJdANyBPIWeTjDUhiDLX7AGHEnKGjanyaMppv0bSjxKjXgXJazUEK9qbbNZzCcIcwOe/zrjG4A6xlxGlywrOZxaTGmTzjInSBFG/U3+pC/hGKfmaYNAH1JIyfYcl2XwC85Vji/97VC1UbF60H430+Lc06sM1I8ur/oWX17p0QVaLURuOebaJmFH3PrccOdORY2g7gDUaUon7tDaP+wpIjCYI1HcITjtM5aSAtLgw3QiEkwGCOJDgeZctAhLO5lIdLHKHa08BQS/7ng8bS5YbYRdHbp5uMII35zQnEn+buiy85HrBnL3f+zkpn6dSJjTogsu087M6cA3Kd+QQOsxzB85Fyc9pKq+nDjTIS0AjuOATsEYE0MqulVE+1A2DKb2vsZ60hArKxXVKdtXAJhFcyn9408bX8Rvc55HZIY6dT79uqwoP5dyOUQ0rOlIn9Qe5V/50toXIPhJN3kIr6q9TytBlK1kNMiyGNRmm1AwKymRB9P7jvSJ1/hVYkbXz8JRNNvaXOo/W3koOoDZAVOp0AJjyM9uP3ZYvjatbBmybenht2lPlwF7tuZ9+fqRTnnW9pelsJW+Edq/py9KPAJEueujNV0N2koTp3ybgq/4aVzPQCjS16pPl3UBWhh4UOfmgWKRf7EpyfCi9wl9Nwf6uCFC87j8GU0eRXXZ1HeC/83S79eB/jQxxV5NdH7fyXoSRsoX9MsXD7YGRGShtnIWncXpprIhGBmA7kCcVxFMKzLivl90Zl++81plP+WzMRZ+9fSt217re1T/IiWfOM3XjRHKyuBbp7Ba1t/hxErneZ1CVz8pGfdWDQF0CP7w44+QY+Cnn98BAG/HgZto3uN7+ImymwrYQ6LLJ0acfYoFEHvxebxZKFVVO4EKyUn4OfnyGNMs3cXEunG1FUUB/AXAnz6Iy968lf/LN7bCw/GdR10u6K5NGrT/EZ6hw69tQJFp5hHn63UCRvQcOIsQ016lPWP4Lmbml3Ttg8QzqJb3MT/TfP267sc15EduDNFpp3NFMeQAhmLi8N3mc1PFCvOTdnlh+gQyT7RowhfVrny8TKHr2bbyAOAatl8yCdEbgyH8Z1/MaT5wvB2Q4w1yCA73215GPgi0xlyeHAEChfzhXnnETp43lawElP6YQA0AMyIgTBq7uCc4T5T/2Qxq54cITygyoBkTOSa8VUXoTcXfCe51klCwqdpmJWmOb8szAGAc+E858K847DRbnCaFbZg79M0jhdgdTjJrIAQDbTuteKlwqgdATIcxbnHZq/ogeXzcEl1xkl3jICud7FsGsiynJS1PMquPC588f5qWidNJZlEbmxexgN/WtVmOJZ1Ly192UjUQdlpJXF9A1wXXjOI24Vvw8iUm9MkM9we3m9kF43B6CKIC/j9R/FkPYAjGsNNqYS/88fgBcVr+b/qzl/XTk7mJDzj0DYC7gcheNRiclxwJ77gVL4gkqda3jlfVaQ7sXV8vcSAPMlynotrlaSyiuU5PNlLFwQV2NFhAnTWPKjn8azGVYU+7agFshfEeOCXZI1FBi3RhG3LuCp+a2HjFQrNNH2iDhSxt+aIDr4VY005TtFic8UuBUrtB+MtiCtt/beQ2vHGF4Vef8ts9iz3RxXLxqvHew6afJwrTnvMz1lvfILGDS2ITmNKJ4iZXd/pM22+tilFOUmwMPLP502nsVWW0KxRt2CZdLf3i9K0lOBLUmr0KqpZUgpk/3LyxrS3an4iw7eGIFNfJ3WWXkSJU8Z9QtxESiNSZsXiX4b7Fg8Jr1yBDZY/SWUNQqrHGpubsJXFro6jnYbTHXD9/tyFpD2zsHFNhX/j1LukoVviGO6lOI0S+R/jhAaLheGmevAL6SpmUN3FdDxIukKx93K4mL2waQEMcy6zYEBkbEXMonM7u81TulcROwtam93UiZLa35t7yjAyS/7jodf1eIaqNbvJ0uXddoXb3J8Og08X3agvVvilVQI+71X07kha6wxNofLnis82dzsg6Oc3vpyzW/pNgY9WsZxqUebhOZHn7piV/5wY8VpxM/wBOayCP5pGo8SUgvdjm2pGNLqoshiuTSRG6u+ipnNfeJtk3sYFgTnOgx2ZGVcVxDCiG231wR3jIhtnwprTZIBzmgF0pYweEPAKi0jUw0OW/gpvpNZ3kQb/Kp9LJeR7vqOawV5jeytlN/LDSbitXPGLwSb2bcZ0Bis9yROz39LK5DJH8EcxUvAuW36RD1vTRqcMu6bZm5LIT02DQ1bN2r96neki7sB7GOHUbcin4u0psTy36JN/vygiWibZXcYWETT2sAp0H1+sUFGK7CGPz+2cv8zef3+W6zEWz39N///SK85xTKZjN8/ju/1yRP/NNrG3ojn+WJqLkVOh9+gl08fUzhUxp+9yiPREz2euqw9+lsPndpw840Jt19c0B+bK0EqicX8fjZICYUa+rL2shrvPKDAiGkfr5kYUKNmhX8F/aQaNpGCGMnKh31z+CR+iP78yybz7xfQDC6dUQRDA5O/lSEyC7V9UFAy8gth2dBBfNa9MgF1OnepoVnCeMp8ltdIUF0akDr+BbmnIvwflqekCrl3XFKM2L9y80BTyg9312LwT8MTIs5VNwEx5k+RtxmvAwB6uMvH/YFszNkRhOIfV7okfcjSvwMgrIoFFX5D2nCdTuMwZc+u9YZNr2fJUhEe7T37KOjNzL3DNo+uUw5FsjU9vH1euW4akO3cg2WX57LlunqcmaoVyRK2fwTBAbn7t3ODZJzAE7M7ORbW2aVnWpjw2AdCBmfjoZFIvp9mrB04XNnyEgT8BsBikQQHVeD8PV2C39HmLrwcdCn3PUT4WF7kmn40XDrM9am9gTHaN7Ow5RJcvSTcNbfeLAPFlwOZdbf8juZT1aX2/otnDOxBARLkymyEHyZ7wBb3ZfufgC7E7tdjNC0VyvcYpq+NvQXULh20/pJwA/1uRQKTQ74z1CaTSZak5zidMRADnQC1h1WJVC9FfNC/2zEzDyE/kqpG4GGIbDm4rdrTwFdie1+j3yB3BMyBwmL6bQdRcDHVCp6BVpFwjh8IIWUvj6SrAhgaRXx0Wnca5LS6dHjg1LwW2aosP4Evnj9xMGWF+/wi9Mymx7sP2xNRu6Y9eKskxSYqvCnN25GGNAfXJeZx3M4bubKcvfV7WMGudmk2z52l9ExIDmfF4K1MrZggd1EtkBGI+ijt5+DC2fqqwq4iT7pGE5D4QmfkJGLnpvU6JtGMtJeHJ0vpMVKNJZ5Y8hBOeYEgitrWhSaJiW98/sJa5T18GlEmzOhr51vedmYa/ebaosJrHBhykSJesi4krKC6LRPHUW+EXXkdHe0kdNebGM30qSC+yng+XbxQ7d69wtqcQg795dUddF5ihzKhT09FxI1Sbn9YV0mjvBsQqHhQFX+HxXVAxdjX/x9KkGeq2xE4L6lMsBqJOG6rwSU9MwbXjuKSRDudWej05/r31pbVfyoC3UJz8t7vrtLnEKvSyRuCe3VOjAf2AmRFNtZh7ykdVaiffparR6VNIrkOE1ylLc0RoblkMMs1gNsdbwRZliGHNfLzERQ1T66oKHklcDvyV3aUvCZlMdt1nleOi6g39VdCTr/VfAGs939P2YKzcqJe0P/yHr6wv+YT3EVaQOZzlK8jv0wRmyqjk9wbVhPZsRCg/ttFfXahhU03VLOsZ9/KdoncZVVHnAx9PWALTlid520VXi3TKlQxJmIzPMDT/aH7S+XdCgbn+f8z6WrM/eXrgQY3OEMfMiWkl3STlX983pNZs1mlgzvKYveMOI+JhfbVhnJzrUnNIjHcJW39RpzmjA5nb3O1QnRkTmUnKgu9BNDLa5vm9MnoAMi1x49yx5pQZhvxzmcFlcp5WzSqKldro7+uDP05ldIBbCG39GXWDCbu3E75pWes8n8xLxmhJ/eBUzcOQwylL/CSAvf+nLaeUW+iOEpaxU+xX8vmmu8JP6qXi7vV9tjdW+S+W0ci9OuDU94Jv5uK31+6N0IWysy2e+1O2/ihOTrjzbeHwPVDyt69uWLuzqWOGncuvjvaRcAOXuxKvN3uQPpSv5BTzAyyOZeKrkMtN5ZDb5GsPGh5VsZVkoAAg9y+lRVz+UPlLJls7Kbt0X0I6cVeg/kh2vpFcOg+2wdeKNBw0G3P8/e2+2LFluYwsu0E9kKlWqumbV97H//8va+qGtrllNSkkZx4l+IIYFkNvd40SklCUFw064+94cQBATCRIkGQXXtw8T9T8e2casqRif78CdTpjIfa3zKZDHYbyY63YX9Nyv3TZ9DNMr+f4B0gcY6M2281ANDwjpICB/O+k401gw3k37G7OKyGFxtkyVntRteY4zyW1Gc05KeaWVkxKIdEtiCl+ha0evCESXx6ncl1Dkc8I6/Ldqi6iuKYB44awJRcGIUG4KWIhVQG8j17RNKOh4z8WPQfcbqhtQqx0P1xio4O4LkM6IFxi+yDXuj2I59bi8XAjd/ZlMCdxjeKhxiZM64SfQDqNNpeW2jWsYQzxGxy5NlFhngYsDzzqqeAWDd5hDNzhiQajgeKVRBiQ/1WqCnyyMUO1jPZMf1vPbp+WsGib0zXmlAuiwaL8C/EUAkTd8EsF/ybrT/Idxw20I7vBTZBbGWAV22R8wFT98+gHQdT+aAMv6H8OySuBezTIbohDcALlVupK3xIwCijspKOaVmIrtyfH/e8KXn0T/I1XOyWFguSQAfu7MADilOS/FTMm7oMtknUdyeiAnT8nJayrFD6M7vu+wWJA2SZ22g1sUcb9x4681cWv9tB3iI3xsunz1Q4OuIjR/AS5BCXtieoSDPHm57BsWdix/vaDm+2LkWKYiTxv+gFVWJsJjSHbMvClwWzIxrjqfgM5B6BzAfULv99qu/Vj9SJ1RF3JsY4M2eglRtMsIt/vy0WFS2/tY9JQ30PDY247fF0QWtH/1DtjDKAN5+lEKGOv92tkvt3UNBMaA3gZ03HC3UO46xuJ/WQ7geYCZ7YQz9CNtC88lwLkzlkQB/MXI9ndWbDT9Zl8tVrFfV6F+F+ygBVpSmn56ImSBuL79A22USxpXyHLAB0FowKFC2tIrEgFk4v+YnP8XOzWvEPzHEvaAmo2hCtxXqOZYwFaFWox5dfw53XKcaFh5R6MPDttNqlDNzQNuZsDsi6hDAXd0Orckzkn3TsofYxUIyMqNscVs5wjgW1a0mPkV0jyCzzYoVlZhfvZyOeYwHbdyNr3uEFmeWJPwsLYkn9fpFCkhbtfOiQ5CdRxpR1jBGYp9tRZCbzHe/zJ+wJCBf3f51XjH3UQ6BXedsbFOQh4ir5/w/20cRIC7/BkQ39gp66ohIK6IwRBMw8oKh77r20k9PGOZOke5ggp8sZLv8asY2x5I+b7oPhyAsGfBtx6K+XxW3sOdDwNIBOYu4z+jyQC6AiG78i28ylMhR7Cfhg/L016GDFOJx+uVabIp4UT30KfuOvcrfASajhcSE+EKClCV2jH5w/oeDovhuI+Fb94wulB34RdbQMvvSr0JjJRnpZGtvrrh49V0GKNn9l1PdLocijz1KFJON16lPCEnJju6veDwCPHCqY+CFcnMvzvmm70RspDa9uG5Ql3IOx8NW7BUhJNlmscg6QplLN0C5/dT8pnAZVflKRc7ajoze5ftQ4B3LHk04vnK/wbfliph3xeJJYL/gvpWdpi2JSj9W5PZJF+a29hOa/op0drvoHdn9lB/1G9rwzGtBqdSTaTNNvWrG7alZAod4LJoWDsOWzgNu16tnYg70GWVX6prRSjRiGwitonRW7a2x+rPEHKiC9bGTCxdh2mbHs0Jx5FSgt9djzPbiAfyV0IU611Jya/xHyMfgCT/FBzo2p9+s77RFRerqozGQNiiuj3cj9sCbh9oEWsRRSTo3pznArz7vR6SunIa3XHIa24dMk0k3fO9767yTck+rgBwz/7gvqLShCMxhEU7Pe1OxyvZ6XbQSOmg92WPlpPhnaj951AaL9bBVF/A4bLdKpomG3+k4+0uELTyQ201ecjX7dZjpotdcCZeDF++oZ3lmwCqcy/twpUfME8uaKLbq88Tfhp8ncXI/sz7Cud/07VekGbX+jJDQeUVO8t8H4XnAiUFVi1qaqHobqTkvGsFmxmQDvAFtEDX+Y+51q9UMux70rGX58p8PsGS3WrWzJ+OfM/H64NiV5AwE4pF7FibRvyahKlLpyRkPhaayOWO7h7q6lynxGcgcgMM81ilu1h/VNKtzp8HR5u0qjYaDqLq3tjUO+uXY5O1n8kEANthEEXKXObVBJhSZ/6CzPzeLjuOtb3Z9fWh7rDFr4yeViSa1vI4vvTNvry+4QYJOJ+3TXJiccDyTdC8vc+manLkhmBKfaSK2Mnvr/9U4X8gwi5wcYXXV8tf11t4rykBoXxRkftAENsWd99+GTMt7UvL+uHk485GiFar0GFpJIQ2ChXWng1Es0FeXxHCSrgenOVUtOUbYJTyGixXKcOi2vKJby5dzcwyt2dYFLQwFTztExWB4O1d8MMv6xDK56HAp3fgxzv0l3fMzwv3NxG8Y+CzgymyrLp5X+tgoQdA8qB0ID/LwL3KLP/Y6YSlt7oBpBsXLvS02+KZvlL+fLMk7cumw8wAYSf6y3X2uk51I4V+0CUZl1xfYVgv9yDpniWE65zmKNS6YetJ5yLEqYKskG7pM8BsVri1jDyQ4Wh3xlb7MYZNbOwEMnfGyolVECPiofpCNjFddkK8UsKIOYeYQ1fljrRSSMCJQPopvEO93m8Zw+7SFeBmYcCEQ905DeQkfLmhfVmDmjoqlj3pfIfeWSm7cngQB8zxZfDk3bZSup8NC5GARh25EGF4YeMp/kZ+h/0efwLkD3YqeWTZYQ4tEQtFBiwn0cSPUc9qPJbJ3XEOUkZ5KW4otzQ+tI6j+iKDIk6xQAAdKJJA/xliXm6NOp4xU/uuAvzTkzJ9MuBK9mR7bGWtn4oIKeZhyMTq9p7T072S8pMMVoePjZAIUaX5LAkjDQLjf8g74BtGRArLb4vVgrz3XsUOT2rSQJJw6VXvoZiRNyEkklluee6k7RDZ3o+uC7W32vAU+ONnTqOOi/VeVU385DumQ0CXg6isCli96tKnjltOxg/Eov0LwShFFNTsJW2CYn8fpZl+Wt2xCvxA3ul+kk37D9bzil3HwkcoR2uILGe5yxxZTmN3HK9TMA6atoq4/0x3DQdywOLp2daz1HmpG6XmK06ItSloJnu05HLWspMeqhMKR5rLWOrLgb6VX9nGOAD4d70D+Bx1AQKMm4mzxeeTLixezij3jjndc9uoeGPvWNnhwLKdYLM2hFbjlDIodSQWGUPO2RULveMuG5jWgr5XP6p8q0C5zuf/k0Ibuk8kpm08nO43HHQJIdtIZvVCRdeXqRJr0On8afzvLPwsZFh3jvHCpcG6bKZlE/2LDPznnHkSkfqlQqcaffxU09FvNHIWU37GbYTeVLETRl3lVexU1mz4Wz98sbVJ5eA9Jb0F0p2Jj02ShIx0xUR1EgpjIIo8VML7ERWRPVlMEDchMw26cFHXoYdNvZck0PjSGyS+UN9I5iBPxIDoWM6TXHw1J7rUmxyiGTnEZwonkGGr2eRn+NlhSgKlCBfmuSYM0EKFxvBV5q4HjEh/d3hifKW+k+0LV0j5HtDCl6am3muSTtZWphGtcgb6PPYNaQtsZsVegEmf51RH+6HbEVFeeOp2qOHAc8i5ahlnntMG/+TYd5HPvJWbW0zdWjkR2xcsFMYdHsbd7cMM3TSLZlci1xl9DQiEPsKR3v5X1wk+CuksLlygO5qLSuzjcUisJZMF+CR3Sz5o7XWBIezLCr+/AwCROiMvgWfgekZI/xPdMfOfaJpYoTjI/bMIj84q+8aGjjxhpXUBxElkL8eeFOcirwkqpPwOmqccXrP6P4Ml7ixXj3FQ+XMa4LElT3yzGcrpcwDEm7UX6ePbtClcroZjWsubOg0n26LX3b/Dy2N/1r/xr22DsvAz03+t5qqLUqNIfNvbKwbDQY95JQoY9gAAIABJREFULSm7QHhtukhBwWRkE9ldVe401jDFIlS9TGPaAnPKd98c6Qdw8uQ098w3Q7N8krUR5WJtr8AmVNZlnu/xCJvP5g+kc2KjJHfDtZURG8N/0Xz0d31Ke+n0DJq7+Dva7KeB2Cycob3gGHf94r8nQ1+M1+wDixmmJs4s1L/gtQu5fXUSvcqcDkt7xnm3+va8G/odfx3GKHbFZwQf/Wa9ey7VEFuNgdB5su3qP9CuUEGAFNIZ34UmrrrwpenEUm7PC4zvGiBP2lvdMvwxY7BoeMDKCcMH0iu4uMpDfPowc6wt6pkm8aR7uue5DAzyRYkYUCphbvZcK7KvCzwCpMs2IA/GIdu+QoJsX74ouf7UzgcP6nTbz6+tysMHSBZcRrSVUOLPg5wzJ/pQwdsd0DdA3gTyCcAPWD6fz4ohvl3HBYTbugqJoLAN5jR8Dz3pg/dBPvkHSVeipoVw/yqu+56AMy0e6fNrCNaMNV+U0hTAW62FT8iIeik9k1wH465of4U7LdUc6Nqm9eudKVptAtpFW+BP4KdaS/ubIO8zVTsRPSTuSjvOavlZLIqTKeSnJsKBPoCbhSIf5qihWgW241xWfae7sB6OFz9+9w0APqH0z7bgLzt6lrPyPZWb1PyBbV17v1Owp9BnEtZLgWtixoW7h+fFwmWSnjuyvCnFn2Xil3mHvN0gFJFBhqwwXLIc3bMj8UT0Nu7DlNvwIyniENLEojiEqc+Oqo0GCIcPbQOiq38CnTxHKjS9+O3tMy1HhoQvrm+Ik+GVJs5h1i5UQZnEA3HyKxzd3E4vm9Wug2p24tK8FH4aJHqgtBHEWfgOiA5g+FL48FiVIK9O4kSw4yeenSw7HzsNPpA4Oay2W5s7s6f0bcSXAzLkonhOBNainERe8fsngRWd4TbzJMg0POoI3hSTlb5jOmnXkXBhSF2j5u8wkSwXcmHKKY/L9oOBe6m3T8gL6/lF+BQrnDvn/7HmaSdBEfRXddU6Cb+PvU97cn+MlOaC5ruTticv+07yPYwOD5PvIEnSI8k0LbLWK33SbvD9C3kfpgfj5rJ69vpJaMmL43qU29hA/93tB9z1jl9KtIkDmG7DdHmjI+HeId6e8QHB3hOBR9tfciQWK/devE7aryQF/l0/45/lhv++kksXYfx+tk0b1amw41wVFmTGlYjsefsquSBO9NOR/V71nppT/BmqdjQxfH2EELY098DvOX8n+8aL34VLX7ffo6nvqRPnsywS9UJrjLM7Z/bD3G5ruy3nd9u6mg+zxzY/YBHocojhTNT8czbY2Uta7AVikiIkGTudhvo4td+bPVIBDHRtWdyguqajp2z2bEPFKdVAVahhjJ7V9SV5vY3XYTybVa18t89LIUW3c+sgHPK1OZ0PZ0y97Y14uQ4bhNTu+h1qJhy6WTJUnXlu15bvFetkzfkB6Dq56zbrFLoLXQXTTiwr1LfG2AI22YsMpmBtrgbixht/vhxIdqLdbM51+MDaKItzGujUhucaIwSXplLcd19rPYx95wpFCOu+6euUXhBpDbL8PER5YJOoypqlo+I0Ldx+cuE8l9ymhWqhsgDI+SCpj+5fCP4jbWT0phPrrueQW06PNAIxTxIqruCQ4O4wD1NP1+a8WDfIqrBFXzzxJyc+7KG67CCnXZNdJWpU3AXeBam2zwOFPbWJjXfvVD4YGOiOwce/c6PAAkey/ZAdDX5B0IEKTOGf+kMne0lSJRkf+sn6OAVd/d2bezJ0l4nXcIKJpJHFLiuX3Ft0VY+R6JKDkDXHN3k9uKcPlKrCN9eSE53sf4VmcBU/HewOfX9v47dCps+8Ax11U0ji1uV3bg5w1Hj/960VGyIDvlLWS4ivG5TsH0sN/oWzizzYaf+lerNw+w1v9OB8bxU4P255pRUp1JM6jPj5DGzSxRdaWpfpW9XzZY32Vg94vbTTrp53mfuofapm22TJab5e5/f066VfZQwO0u16gvS4mt9UYuJ+kIZAbjeMt4H5CSty9vt9/UGWrXOaY32xLfs9fWm6sgTfnm5OiPTCpOQfLTHyygKr1PfSCD2yfMH0pyzyIY2KRwu7HxYkRZu1uuhU08lgtgl+2MQei3FonDwG1LbSqy2iTaiFfg5jRpBTyQBHECedS8NsaXM3fKK6yq0T4xKveh0SvyV/k9GwDtmOPEF9WwJPZVjI6IbDOHVtcN3xfEwu3i+IzNFGRvVmWfZ5kMgK868rhFR2yfGgVKcitoz7zDfCjGXovXXI0XBrYezXd+sz/8ZyfmOszQRaypNYUo9r7b8P8qZP5h7gK3pIYVIE6+4sIUekn5JMo5ycuwfhKNIXjZ6kzTl+8Xwz/Ktx7vB5OFeHL05OTI1x8wndWb50ZS6oC0LZXgmDHDgB9npdFuWfYtLviAlgE0hU3ApWJAJV6BzGoxIHVJM2pc9ZsgojJyfL5cRHzSwTQrBGWGqemuYRSKvXJu3PxrxMLgYijLvjzBcfO+gGR0SwkJttIvAxtDvRTa4uXvVaYgb/VUbjb87e/GgqJC+G2/xeCPTEG0dD9KDXNwHU6nvqbO38xvrrL/bldyQfWc/tBrSH+rOggZet+sJoBLoIeXolK1qaSH1Auj74xSt1EW7XFKwfyVPl8yTnr9DtY9hlxxH0bhMwLlOI7PL8YrxPOFKcefoi8UKNAnFX4gslHz9+YehUVxjMVazCPA/hDFZvcwOj77jeecM+r577J8MqVqkCuAP/pfe1cWirfufXtQEpAQldndDmeJrTYs4W2ULRwpdKoYywAyx8/WJDTRnvOvdw0mMbij7G7mTfxt5lPDOHUKW6P8Ketcw5+ngd6EW9THS+FRCh1wc6pKHNB73P6JlKE+vEYurfRYq8yJwKjsWVWD8d7Gs4WPbo4f2hUwc4KwK1fW6ZH9cd8zfK3myOBeJZvtTxv2jPJ1QfOoVzIVw2QOr7izXqc/16gJEd1xtfaYy3X1Pk5eNEtfNKg7eAbXlKVkm5UdjgNOSlQoeBM2mY1Mq8JeRE9I+uy5COM5V0+ng5NdnlOrxICwH+AxqObiBPoYvxlTvdlw5I/Km9SxqMhpeuErXYNkI0qQ2xDSga2jghr5pjK2kTg+smmcPsIsEPu81AI0c4dLJqctQHZLPTTrwMVj8tX/1k7ekOc4bO8wjl4XqZlRxUoXLtbdNZH0zOH7poxDfmdobR/FqDsoVziqp0Z6FqOLCDfm2+wtPf6iR8AeTa2N6Z9nuB2O2FzNPDZ2cbRuVXzUW/UDtEMDKsuwP9Qb8S+r2AENz0vsz7Wc8d2tMIrfAYpqiD5Z6jy//rMrKvVTYCkZYlNs8VkCf49LUUO8RhXRvq2tAheRtrU4j1tUSpOZMK/cy5QXeiVzPN5KzOoF9FjqXfia7T3uss6x8rlLpmWT070H1dKpd+Fk6D1zwv8WO63K08bQQMMV0UCB6knTBO9Bp2LZPqsboDobWyG293uirrUw3OXleBOfnDJWlXw0m2JJMIV4vXrB7DufAc96XUZdH+LOeMX2DDvTyv/BXThrQX00dM1b/DpGEx/bbSr05aLpiKrZYpI0ef9OKJ/9r8ZHsSFX8ZmNrWjvpkgkNNvVIf1v43HWMdInT59lmBv9xTPR6mmn0P4vf0jdODoXw7PNvTq6dv/pHSZoAZFbt1te2K3yd9H26aDKVqtDagXh02P1kdhbYZY3vXy8d/RUIFw99s1nW7IVbVhdqdw+4KSyOp37sFgTlr3wwMxi9NJVnKiO38tu+3T58gb43kY4Ldp6gLtrpeIuuei5vBfRuY5jyvPsj1fkjuPo84fE/G42oKOej/GCkFjhcSbicpdZXVeyhlKTytST9m5GOaI30caMrxf7PQ7I4PWSfzMdwZWJ/5eGAM3EXtzhDBL6L4PD/jDsFnnfXOdTNix5A4uTtoBjPGDZPC7l6x2Pv9jpsIbnYfqrKBzfxkeHDDdS0ytf6/Kgq1lWWjUlu+Xm6vLMvFXb08OfJYebNObk8aNzqCw3fKNstMmXjLkOB33x2rXHfjecjsXDaqeF55BZgCFcUcE4Kb3RM+oHayNk6vOgwNZObg1SRbYg5g3k0ukS95bi3qPefRvWWeffkRHodmUj5vK6+rEFE79WMwDDFnkvGgJL791Lr/0qhXa5ve7dANhJg4kiGlhl8/XdHhR+vpn/2912/RR3CDyLDNFacedyI2HR54ZXh7G1dwvtJHaWzq5f5iz39COpmrjvYFkZTiTYdpfe6/6y2FF3dOKc6TiuNx1Ysx0JIJ0VdffCht+Xep7Qb9fgm9cPuUtCA6bbVj+T7e+3iuUPF+F20P/X6QvVTFn99/KaDWshfft0ytnw8YOUSuZ/ei/Kzhmc3Yuh7V7SWiy3glWRVvktD6KnRat5mv2NuzUqd9sXDLrBobk7hspV8F5rR80kiv1dmbYJjlsNzx8mpDIjnZgNtlXbYXK/D5cz18HvKFIyuq7wNE772YJAIrmXdZRvBHWOhCSAnbzDw9FHIRM0rPuX9cZ+Cm00ODiflHe0ZpjXQAHqVeRrCdnNH2eVVT7ire2fzU9yv6/K2kjYdwLYcJ9nAXOb26Vgv63TfJHBgSSVB+Mlwb7tbYRUQikXRWFzHWruwqeK50ktMxz+eh0NHmjVbX4OminyVfeaesiFpOsk4ZZ5Vhb4WmcX7PdzgGOLfa/ri8gzN1gqQzvvXUUeB1SH2TVwWpn8Im/gpUUUh4H8tGEgvNz/hP0W3u/ErMwvfN9rlwEZyP2umDB1Bn6yfnCYBYm/r3VHwnFRjPqMqv43DiMRtrJld/oj4PEcsR45ObfXkDSk7XlDDLzkGry9vUUy8rIH1tZPPTlnfkzAzx22Eh8qYKL8Nrd3oMBLFyZOfnub6ctvd25NiXzbsHoN6PjXUlSmxmNUFFkQt0u5rIaNM+VanyrkyKLnY6tzZ8c7fRQBa45tNtWUSVp7l2uGbV6aJVp0ab60qfxO3J4SzRJw17cTDPdxGxddnD25sVKOuazODVKSGLPFpfl6gKYM6JOZfTfJLzvDvbp+ml3h9XVwoKV6+d3+zku5IzvSM8YNL2SW3YwMR1vVSFL/Xs4veZPH6QTkUbL+7P23vtL4BAApctOD3J7t3O6pFGNinOa4aOn0fSmNewYpC+An/fNJ1kEcudZ1qGbOmPpK36gw4QRMSNtQgswP0r7sz+nn6DScsHzy1pXzGO24r/yvOdbc6xntL357C4SJhQ3HWu68ve1hqyyA/AXyb0dse8S12ajoOB+fdbkST/SOltn7hqIdp4Rh9nYfs9hdVBix4AcoL2BWiLHW5cBbdzSH1yCyDDvFMl3QiK9Qse94MAKwa7m5LdCGBONoNXxsirTvVWdrdjKmROrEuvANVJRroJxGF3h98EentD3skImsjRXUMOiJ8ssv/k0yeMTz9QHxjo/CzOc8cZwsyKE9Rqd+oqz2aBmMh45EhfmJWKwpIW7A8mHWNAPt3600OZbXZiu0LX/a4i1MdilbrVPNcdt+5A/2G1EQufMYlBjM0KjT9irMVOoq8DXG92+vy2cCayYLETZ0Mkdr4v1A5zsi/41BoTN4B5kBVBzOEsavZ0oPyA99yhy1MOx4MZ0/2oB2o2bqvAdcrfZcC2AtALugzwk+cgI5w6PJeztUQksOf73UNy8Vm/r6oOSOuLlDHx0NpHUbi3LZ3o9J5hdTpa3s31aggiFL0503PCf+6R82yePvf21PgwedjJV4akHJLswtOT58Wz5OeECC9eWcGhX/pqNIsRsHlBGTeobyaKxRAJoLX0wr9S+5p5u9xPIV/7dH76PyD93nDzc1Fe9L0rsSuFK8Dv6eefmEp6Vpbx/PwVG+jaAEiIe1/+bJ8/oYw75+FT4FtrQnnsq9FnaoK6UUzjuRdTFAOh8MRBvjQxpv5/yMtBdXR5AmQUiAPvBF8o6f6t00DnERyeH1Pjo1NRzR+5JOsRVFqfOM92UfN189cvH1XwuHIuXdRR2TzJ8ohoR7jbp3YaXbrMOvRHSW8/Crf7h6gxJ89BQneDU0z+HnUV9ZHAZtVQ8/r9weYwMB0VkRtOYiQA0oKXHy1w+V9Qr5zxEzoVWo38nn7ZNmQAOpb0fyNcfxa+lxh4d54QZyNbQLbTMuuV2VZuGG383OmsInE7Ncs81+Y+S4vX34BnUcJx4kYzg/3WtGMaqboJUhYyGKbtU4DuTOBU5AfLHG7UZdNJ4J6Ig5/rDtMhS/XHSnldaue6OkgV2V+e5FS24/nifYiBTukEqz95Ebx03KmR7fotqhvdxfsD2NymnzQM/caXXu/AnpPjgVXZRZ+iNlKlnDVvkXIisLcimLpCqU/Ju329jmmn0pcEy3KueybWPYruTFr2MJ+u9XwUjj7mHgyj42lHAfehso2c0djZSnM8VO36J82e1I07EptfhSs5MoHzcochcbyvrzAdN0CvOi8mW2ntQKzuFRvIn7MuyrrWckflr7xv3XrpoduLMpOsgMF9amx4l4gOrHsxv+cT5BdHnWL6Rw69RcdrUzSmz7I98kCWoVoaXO2iP6WRJbkTuTiDO7SACOeu4k5Lo27Thdxs4RgK07Q99/w3XfPu+y0rinqrO5XZrHIm9/mAD+3rWpZVLHL957GXkfzUeaYBtbqdl2JATjCUMied51+cEBh++++qXNdRLb9ghf/3qyhctijTWzidU2zmWojVO9fVGWKyc18X2bpbwQvcGou0cXYHepHlsWalmJj53W0eQ9Xk/FD6nS1P7rP3N9rXeLec+cmzWtpaY+35mRKPm0FQyUH6OAV6vcF8t3D0gMVD3rT6DjDEs0IjnK/LvUPxw5O2tfbwVQGVqhuYPhkHNFaClOtFvz6yww64qxWsmnljxdlZ7xDgcXtflZ7plW/U7sHE/kdMIcv0YHL/amPc6xdScURjnnYmyXLXlX8MJponVf3zgr3zlSkjGx3mNQWgK3zQo7jmcNn2v7zf11zmJtBxW2vinz5jDsGYwB2KuUW5+PX7/D3VxCz3dqnhXhmX78Ktpkc8/CvzNwcH473LCn9MizBa5gF0xZ/VsU2U6kWUWkyErDsoK9rzBYkJ3/4pb8CYN4RVOOyk5VSo3MELU8vXag5ZDwH+9skmppKf3Nfol2QdPhH99Gn9xQyxE7AgprpiJlYTlL74EE5BngBsYWp9KWLVWc+P1/Q0RPRQ7BeCnsoUS3R9mwp8GhBt4e8ky8Rpds37l1UV+EEhOnFj58CwFoZhZAhUfJz81P8wcrotZ3ngywdEgk5+FOCPtrjz5/fPCNpRPz2quM+JqTPXM16UPQI//D5sYclYUaScXE/0VfzFRZ7cnl9i2Oz3Wgarjz9jOfq2fLVIhbj3QZaDbyrwR6dbm/ROtd3nqBOaaX9Hp463u02P2mc/TT3oHYUod0s3JhUEjA3YNl9lZhXAYq2tqxzeYDtLzSl1NzkyqA2m4xO+yAFeN4s4GQrWiWTrCwnEY7Wv7sD10MBbuTVmqzmBSJ4ET5yJnUAHllMce3/jpAFVy/3rvNHFnG8YUIONiv266SRrD6l7yp7lf5a2YtL+/F6hhjQhI9l4gM+vrCLS6uyAdyP6wqi+6trDLvuEGmUcs2rZQNJSadoK7ErvfKri+kuvJ2tcaFOrQjTsFT4xhrYT91wvT+ikqsRNHls7BSbit9MiWq2gptBdunSTzJa/Ofm3ek79PuV7lqpMyeqpvxdJgbwugutTMgoJ/5VmjgrvBRj5tz174Djfqtgedr11yshyhPj9AnW08prO87qjqtJta/JKPdRe6/aM39afur8lm7KUYVQ2shYmiRM5et9KI2RjbGCy3GpyR+i9AGWB79K+NX5RD92OvNPW8XUlUuXJZ88YutE38JBcgmB3rDsOOtHw8wuZvgnfTv8FoFLqATWXVjaR+EDFfCidovE8U2FX/PXVyfHo9Np+t+cROr0UN3w7M4RerE70PL1o723j5sPuHEyIKN90M6tAAdxPme+tfL+qYrh8Mrmsor5Fteh4lcZP9tz3b4XjvDkpCVGIE8EGTLC2z+GUNpwS49X6zgyp4ZRoz72nSuPRN0aUehKGl2TqCZoH6vdLyDflfw3lHpv4QWsWzcGedOA59Vi5o2w7nR99+AjDNSZhNee0FuLOAUXSm/GVu47Uw8BPlq+skJ7B2PveX7l+SYLXsMez7OKxdDK69u2O+3jD5A5tJFcsf3o8y2+1hreT8oJERe9bayf5vT5T/hnlj1AhTpcf37oMOTjw4cxEp3V3bWOPGxL7jwuHeC8Sm/m6kJy2cUdsFUDaqqNmmXAcW7h2bXa9y4kx1rthzzrsvlllhQmmEO4kZMLxHLJ4UYeHcPcq4w70cOyTc1uZnqgPTndRbyV5xyOfpPYQ8bB68651++1lkPWuGKAJF6ewE62S+L3t5/Qx1cwfZetQPk2l/KHAJa09qO9Bko3vDnmsHmMHY43WxzJIT8A50NtW7pW+PUsfruMJUsK+erUoCbxHa9vPjN1T3bx5AQB+Ejv08D19k3SyuUKG5O9vbODnuF6AdFEI34ZxvjLx+kk+pM8uw9KGUwD3qcD9DvFDjjc7gHi72TUliqEUA0oBn5N841H4nr4g7SfQTxNgbe/42T9k6p1vJByLSN+OtJWl16HaWM6JLB4ojYJdhgMTKQBdQR1BFcTCT6EFM/J7aM545+14WbvXVwBZe+jX86FrB+8SIQmWL34MQG7LMSsRCvxThgP3CWmBt8HP729vmOOGONWpZBQRFt1wz/LZST6gAHgY3ZMRKVudj9KzKzPi7vB8cpGbd5MarEMh6ov7UseaGl4LMRO4IXfYmgNdeHHR/KqxS90/IXb63O7iFcBDWseGAw+9Qw70UApWjy8krEWg1Z88ZeVjTDg35ZXXemmMxQJhRJ18yilcZ56fjYNA7YN3/XMra0jSi7yn3+2dGM3hj7BDqBWWFUbYdzrPXHzWCeh9bU7ZLFL6fhU6T/JEuEeCcJpf9lWupDCq8o86vRH/QedYyDaoLIf5TaPdGFjvSoSo4ypd1qwXZfILO8Fms6J1opEWspzPJUPVXm1oKeKTH1x2zwD1tlTWdRU6Fm2r2ikJo5OxjCfc5/o+ZW0+cnzKgO9Rv5q39Kavk+PxN67Mf0+65E/0/Gd9bKMU+jb8/rMAbwP4NICfKfPPVokkLQBVjS1upI0jdC9ybrTiE5oHvMbs/cqYagZYZPtLyVMWifQNkN8jpRpX2+mzhgYV08j+wNXeRsLgaDNMWATjUck5QwkzTT7v/FO6T3jUnuHqtxc+68bX7FZncq6+jRE7l0JGNng8Dm93vj6F/xUQ5fw94OHXexvK5QpobTDLmGc9Eu/8o+uVj8uUP6CpJUo/3n4ARPCXaRvtjrCfU4fokgMn1t69bW5kdBtDvbd3Q7vLnaNI2Vnsm729h4WeWnQ7ec7AGjifiadyT6LzsMZpc3dSrbFSf21VeR4bK+FxdH3EyCVcbEqwwgcRY13dhkTbl0G/6zvmfXrZzRUmV5d3BxFV05XM4CgSDEfPT/zgcq2F1MVhbKsM2/P2eeOJa9kv3Kdf9QtSt39oHqrojphdMfSqpeKcxvFkEuUPHFB8Ib95cc/spnof4a5797YJJ0bjMcc4lB9Ix2Cp40LebFcLgPN7S6nfe1Vywo2xQIggyROujGE/5ZvoT0f6yeF87oVke1EPlXEiNHTvTuxreos6C1lK9lFBdrhYu8vuUusfAFyFci+blIqtdbdP28Z+JUe6mkeefI8pq9vzKeQBtPlEVNv/z8rFBlSoROF8sSea7xIGYn7ug4sxBu2YJN6vLG1DdLBSHWsY5Vqs/ygjHFSoomVr1cf+oYngeo1saR1awFn5Zv7arjZY5TNctq2NvFlks/vNbrRKuXUddt0V1j36pu+3VAMh4itXMioCAdwtsToVgPYIg9cpRd0Bid15TushniZDFUMZSADb3nU6Q/zVxa1QO8VhqA1Mq4Nl9uawcfJZ8+Mwt4mm0jk9zUToQsufGYWrSZIDTcYgls1YWVUWUcJJbkRw53Xt4Wo7TohHCa6JulxZyurNfoRD3vo5kd/Zae7l4lQ88xByg4dyvQxJd54zXXRAy3PC6cEBJ2h8pblhoNTT643fuEhyfqk1R4zpSU4hu8qitIh4pzGnsypoUBU/jeSJFy76UmC77K+9Luuhf6t0gfu/02b/odOvhe+nawVpfy0wrvJXSX3dXPLjR2ZGXke9A11rhQ+7JDWPYu3dvi9bRoYsv9fbDfe3FeHXN8umOHa/lHy8E9/T4/REHQHdgc47Wx8NynfBdZ1e4+Fv19YDIVCMgLYos9Z8aFHgCLeUh6s+zy9EL248AMVhYat7YVdMgdwAMYfQutdohRZXr1upU+ZM8rDgOm7Q2xsQJ0ezX4mTfVapNhGdYo4HW+yqdp+WUmtxUvIT6+45uG3t/WKsllkR7zy3aScbo1uie/0OSVXMf+j93szvNKhspLxfIrLuEOcSx0mEwgMABp18AkQnht69lXxZcGB9sFPpJY+H5/a/23AkepbYKfvPP65Yyu96h+rEbayApe/zM00OTjONfPTe7kQvf+KRCtTuqGcMHlIxkE8ZcG0AKJbT+0qpFgO/ZlojkcOsUOCPGn3yhYFcGPeT6H6yWSOyw95wpzLZnykiLP+CTiM0pBBGVXxy6LvxBXW7csfbBa4msBaldMHsIXqBXNd22oouSQg5dRw+0U1S/ysTZmF62OTKi0pvC+0NhyybVa9fF96YxsYAbreEz9dUVG0NMMMMrysZaCLldTApvWTQ/QbTh+Eu0muTD7lY1mneThQHHYgLDCMFjXzbSfSuJ9mwfskgOL3veoxScZBy2x2OU60eC8V0Gmahe1ePXGMsEsH1P09hzn1Ta0sjKovjIfF4TpzHFbQgVxakZj223OsBvpiQrobkVI30l/ZdkLCT87XUf1x1vgLAXz2jJ7xGdt0eKfJCr9sSpg4ToZ3nhH5vgHCmk7VGAAAgAElEQVSf890fkKhkHfNlySm1C5C6caSDwvJZgbgtpOZTB86emd5otca3wwJgP10ondav6NQNgo46g1NiowZ1RmkbLaOliC9FueYpDFzLzLrl0VAQ2e74ddgqrXW8bQuzLL8P7ZRnfXBLPULtexvcrr+jqDcPxQXhJ5GNHUEPxrLUtXepk1ov95I0e0UGPE2PKnjw7lJO4jyGzxLr00snutXNuwxK+9rq4bpzDH2OI9Ssi3IFVsAiMiNOB/WrriCY2+eMhqgobeTM6ojAKUKc2v/R9RWsPZ55HolNMvm0Dod4zy9Za6GKFg63+ROFxb3SlVeJcKWke3qslEcVVLZinuTPK6aggQYdO+CNlP5egL6xJDVVzR/Pbb1ESl7q2qGvgsyfea7Y5msYva48xBy5o16BOv9H7kKftjm97T9yvhHgYhirMMiq92XypZMX30jwwVbF0e+Wc2WbcwFLzEekryx36Ty/7MOpPy8mif++OJ1a2k9WH/QdFhZaL6lQr1lz3DWpNEA/FjsQT3nHeHXnKsOcgzrNTlkyLMfLVw15fLYWNal7OB4of9CULDsorgPpPSExvfoesT/SeX6w5eO09wO6SMe4gdc6wvMvPlEejnnNk+2ef8b7VE5+In2qBszsPC+OpSAHTZ0K+yy/K+KvVO+h03u9/X0ioKhrfpypy87MI/pa7M5ruA8CpT9g9nF9z1BtPPJATricJfxcwlbWfr5h2mw1FvqHNjn/F4rAraJXVL5H3QS+nz7/e0mvrrE+q+NDG4Y/0lRurlT6P9MLcChs3V6Dl2XcILc34HbDeLvhblcGl/mmshl6bRV+T0/Sq2i7IM23an12S7Q18i0I/Ht6ngLv2gYux6jPz/2LKuIEbjNPaSqmKIttXkexihtlPRr6vuXe78wsVQxguMEnBp/d3Ty6Qb/q0hsg47Z24NyGOfQyHLias4NNjJ1EhWod6w6J0jc55PO66rRYNAXW2W5J4TZgjhj16fUyf684NkNNn1OE7Ss1uPDudGLv/P4vAFMEfbmDe7u6RY4j+5Qb3T+5AN32KHi4tFWg9+FnKP6Z4F0FtOXdQ+XbrVdhkWssknEIK7f0YwnAF0mjfx663k9i+EKRcs9t0kB8w/h8KvYeW3xik4VkU94HjBr1W7zLZEDHb3pmSrecPt+c5xPaT7Rd0n+D32eNtkKy6GLdkJhKO7NOp8W4k/Ze7zStQFjBpmcIP/mpEDOWY2ijjMkJ9RHI36vbaYwvHuGbCBkPQjDkBouPpwMfO1uZgafqYpNlMuyqCufHhhPVdSLdaaMstJ70+Kvg+jj8T9fvjba1kQvQ+pjyKBelWeZXPkmVSUvNQUJdtsqhrW5QHXpwZInap22IpdVoXeA13nivsNNbkmUbOLUnLnP2XsQTbUC73rnakd/Ld3TI3krik3To8RRar4zHtaejEkfyV6t3UnubHLU8W7xp3UFgr8yHEuvaB5Vcdc/lXbnH5wSQE5L/7HyR7/g0IdtjgRNFzxjpD8Fv6/W43aBDMA3ft9stiv2CX1CReZDh3jeTkW4/JB12W6MnPYhC02ud8VTLY78T6xcvwnegmwK7W5630nICnxqhAdHD3vfhQ2hq+86hqWm4nUxZ9wBhH7ktJ+ScLPOFzbtHtoBmffmQyjDpK+dM+62ySS2X9eF5EqfVg4wqTEnX3HTDnuwMthEAV+BPeLDJz62OmjPwkiKwO0KzK138XaLko2r9SnY8rDv1ykM7KuipjS/LBy4bNGSI4d8UwSdcDTH2B1iPIj+RzuTKqihvQ84B4LlR1/B8k1OQS+vuSc2AFuZSdGWJmLcooDTHEyj+GYL/7l4MQpMGcTX0xnDUq9C6PSIwe9ttT9p8I9hFlGMtJa9EGaX6En8JVFEbObKQIos6Ag0fhMOsnTtG/XM+HrPklFbU939ze0tnaUReEx1Ge373uZ8ct/eyYv4kdWqpd4FM+rBRsdPbcY242xlo36/yq6Rt08V8K1+klggwLELaDdC7Df40vqDrz5xUsmGqT/sd9E4XNIZWQRwzCH3CHa5Cls4Hx1MF4l5wFssJmbbcTtBmE9xHydt12Fbv4T2237yBQR/mPJUFTmJWy9dTP0vOWEvpBXSHiMWvvwrlxAKO6tlshgZPyW/1FJRo2CZrr2DaaOxA77KWx4jlb5FrQWc5DsIVSn6Pe82DJvIgQ+1iHvYo95AHSk4n0QlWoty0g3KzgDvPezvsVHfnufdxOq7ou3J7LIfVZJgB4HUUm6xzEI298u94rcdiR+c5t+Ov2zrF6dBJ1pF9kUNu6eUMJpdH3kKSsI1Is2NpwPY+lO/MCz2vwerZtjZO/H1K2bO/bvpGbT50fHbmJYT8vYVwj+E/SP1HfPOrwOLASGvvaHwdUziZPwyvFlD2Jhs9ZMOoBek7VcZ24gbjo/lLya8EBgFaDaYdTrW6TOYNCMYYkLc3jLc3fL55lBuyc7TbL38Lnv87TBdkdCm3wXeg+8x81zLf05ekb4IzElpX9fWJEtYJVBlmSE1NoxFtbGNRbcSrVYXGSdBV/wtE4LZkTG369NNOKRt9rSu27d0YSwANgeJGcGGdPreTy2p3a0MG1P5WCOZERuwZlyrDcpoKKJ28OyP09B1pI3kMDUncRqh3nvTqCovrT4bBchGc09q44l56HeDonvXKerQv7oC/StEDn807fm9GTzRjClwYLNNwUtpkpeEXWfXJCBR3AL8QZP7tz/fPUJ34Zb7jJoKbDNwguN9n3PkEADcZcSZ0YC1XDwiGrL+pE6KCN2v6Pu8xcbj5QoxNEh4b9kwTJ0xevP+jrn7/kz3+2XL+AStU7B/lMJak5KmvCes0Xs1PnZP64X8T+72eqMS0C5J8PBQe+nBteBi2QORyYUSo/xx+OqG7oYke9CabdSQ0HlrGxw0VN060zE3g6DG+dGe/KE84JRcAY8HQZM9FaMgvS4VZl+jyZ2LjEhP9apjKGBgYULlB7/cls/SdQiaKheVXaAgke97ptaxyXIB4sol/S0mwJkfRzQOt/j5lFm4kY34nK1T7bS1qzhug/zGBNwV+UOCTN2DO8VL1WU/EEh4fMVIB/my/f+IFp6aMjkh/1nlKznat+KKvP4d8zdMDkviav0sNpcbXceKiM9AJFu9VJ5guP8ygKPIfG3/vOmpvKzt7ha9Xja3rjWvLYefbq8iRxobR5mhO+ZdCyota2fjE2vTCQpLz+3psLGA3+6mPuXQa6njlQjigjttxuKSVcfuPYCG9vaWHw6DZRneIQfCHrQruf6cDznNBe/FVoo3i6Awn2RnoZetc00ribGlFiKygIAfoY+GxwNdorCW+z3jlaIwpgzPXV8HuQrefKE4nWgMcZEDp1Bd5cp2dk8dhOIDyTKc0Ck88bXbQqRQ9d5g6z/gjj5JVaIXkScilE6943pm2QYGceeZKmQLKdv1Dsa+l5iU6zgV6MI5fTWWfKn5V5F6JpdOzV+oMu48I0X4L/34VGydY6HkZUYrUFiKlNUV+5D3qvQ+/qwUWhQqoB+SyPK5ph1cgKxxvXsK1bNgpNreUlBOxwSJk1KrL0bZU/TpCn3eiozgxE3xp4+M44LD5OTSbjCV2i82ihoDalo0g2bO+MV5izDMFHq3e1ed93LNPEnU+2qTOzlrPG7P4VkzAEauqjHaRlFJHEi2GEN/Ky7poh43ksLd5hvyrhABf7RfbMwjHvYcO9eqTrOu2FDHXApDX14SQSrtYRj7LAwZbjzBCb60yc3obmlghRiXJvnKQXasZyq00smhOAN+wv/U2eeukntbfPOYvvwNOrbkUSHuZShqOVCQ3gx/bkPbbAb0QbA32TeCV2q6MBps39DZepsFDfAHn35lw8R7I4Cu72YzvfvH1nOT1PCThQ758+9K7eVbdAMrmjUMf1QBTar8cAgq+0cjvJ9HL5gVFOr69GNEyj4O2OhF5NJ5PbJgN3ltnLmZ8rlPok9qxvPZAAkAGihUXAWn52KareD0IklPS1s7lGtyeSLye3z0qd4SFvriiK8+fJ+3waP2U/px+n0ynv1qK/qZuAIA1/2id+NrktsEXwYdGi391DP1qqUr230rq8v4g/z9ULfH5gzFM+d5SrCs8gKWvPfxqtMIj54wvB/o+yTQBdK39vo3bcqB/+oT72xsgAhmKMQYUsvxnKh8VSd/TN0xvOft5gRmuRum3xel/+/RwJ9U3aoJ3oaidzjXH+bIyzeQk2aIGWxgazOcn2C+VminV6tXNSXTUK+HIMqCXA5yrGh6uuC5yC2BO9Jx0K4ab0VaHlL+TnUKrCJSXfurheULQ8qc5W3wEW7tshOo69S5899JesvrPD++5H5tRWs3tCjYbQIK97vXM+8OYXBMPN+0l5+nq8PJic1MQPu7CfxYS3L9bEK4JrF3h6hUvJ/gdvlvfu8mGGxm11v+lWDicofPGeht9nRPrrkAsfpk2XuyP5JnXPhhtHHpqk112zgev2vMSLVRBOxPW5N4N7ZikTMSJc8/v+eIOdI0T6rux0GnAxnbriwA/3ded0zqgQyBzWsi79Sd0uu40XS/9OqWDVRTiSn3S678lipwmG2muqKHFFyByYUedvnzxkBbMFhq3M0YfsLWqLOF60o5bX4JSYzUQiy8GIDptA9G0DURjOc75PvRoS5tM8OfdsyMV5//TJx3uOAdSxgCFP0t4PFp8ZwwWwSbGl83oLaqi8JCYTnU5SnU5XEcebBW3LLwg/ywtJ5nRRZFNmk3NyS8sjXUFQ18ApCwMGi8EBl0X27HJEqX2WZ86boXQWSFwgbccF+LCWVCC8c36s0JNfBHHURqc8OGhsQq4mZak1snjT31JnJse8gVgaXB0+7C00fHVHisO+PIXFRl+qsYrkLCjGtzentCn9N+1tW3cYgG+J6l5hAPVuk1gDbAt0XRsDpFvdvAyAAXcvW7bk+6v1GjDTw2G3Vro14rRsAuGjTO3GD0rv6mlF1IfcP9KsoRJEUBshvEyRYDoNjCpctYXlnQS5X2zWSU6rvbpVMeKrsg1jXfAG9x2OAudnIme8icP+gnVoHd33AXhP9zKmhVvJ8ydGCV5ubyXWt76dbRZSg9DC5V2cmtDpako0eZnR7FyKS8ep0t+eqDKHvJbz8Iyl2Esdgwyj5cp+nT9DmcHkb2cinPVr9BtgTv1R/K0FJIKB2kX5Q3WVa6drs2G4plvfndRnU6atFM9D7sBVZmStMAbXRmEOyDsFwjW2oJ66ePghE7L00XrWTrXk93K9REwfdvlk5ic0czDQ/1ouAqEht/khaZISHHleJkeKQyU+shPzS+1aG51kUJzXh9LDKHmtmcBQ5Ud1CKhpsuHWuI1ndJTlx0HxdhSYTvv1A14G4L7BPRmckrX1V71jtCkrxgKOWhug2PooHu6bRvB0NRxE0TnBwxEd8j+L33xOUGNuMDGb3V0an8NRYYR39otZejzcs6VuqA7w8smrNLM1quLuvf8C+oOu6Y86+8O9e2UpzseQ69T2zKLjOptxYltAiWw4nJQs1y5C9rZ1oRm1rwKraiV1hB9sqnn8mmqx6tzTewnvL1vk+aXRGfUNX9eQqrTaKjhSpH9Yoc6lOgH9Nyf6DaKseaFqKvqDS3/Gm0EIDSM9vvARdgT08Apa5Xxtai/48b9s/HAk7L8uqoCbXApeDFXOwxeZPNU6WX3azYn1hBIFaZe1v6Yt7T0/4EmPMiwr0vPjKQPGJbPqjhVGUMvYXd8T3+LxIiXyicv+LwuT6Kf6HWrzjdJyc6fW9YDTMd1uK9IpzYMTrYxL2WEAjl/W7Dd5romeHk97CQ6W4zia8ZZzxOJ8D39GonG9K08CEGlMWE4lPmevjp9HcnvBoGuU6iuqH2xPE6rpPGxjCuJyXPIIrc688GFUGTrs70/EkmblA5BhgxTxBZ68VDbSN+8/Vi6U8xZ6/WlM917V4SLCbEK0hYQrfVRWh/a0oOY8Slk/B6SKsz4Rjo+BzCHma9XBX22cHrfwu4CoLFqBWKIel8v2qXFk1gyaQbjtpdi+82wtRkKryz4Y5vg/ALFXX31aeBP988AgPl5OWd/97sfIJiY8w7IwF3fC1w56zh38aZ2q+W06YOMNcE3mtfuaBatdZ76+nJS4Pf5FaKxdqv/VdtYQzkrxbrhrrruUtcJ/KzBO+ph2qfmafRwuvtugE5MTkdPpLve7fS83Q09Je4KW6Hch8kXNxR4aUivat3B2J6v/uZCkguD7M5pPhX44q6zSANiIUIVkLuRpQmbxdfDcDsPlX9JOp1McRLLN3VCajt7fcPQUEDHOq0xBjAmdAyIO9EnoH46DpIwsw7P5gjf39iQ/GsmdphD8v7FP/yvxJt+zvz/338DbwJ9u0PfbmuBb5DwLjawVWbRAQqNmaOxqYZNHOe4SyxsZ0Vfkh7l75MPA3LeASjZ5FV+Q/97LfLjxwL8HGoig4Rd2APZpA5JNcGyvuRl2dX60Pn1yryIzOszQzXKsY4LZYlYGDnpU/NGXDd/4pGDwIn+2+dAtOmhs8si8il1ouo654Daa68CF37QJsPNgvjRyfOgbMRa+BmGJ8kWJwUrKAusvh8+/bi+D+BHrCXLPw7fCPqZeucbiA4NH7tcQ7R1OFJUZp3hXO7FtJsw62TczaZRW+ZGY1yfIIO7CwS36EDtRIRdRkqXyNo29607PKNDOY6asEcJoeEvrRJBh1P+YFh9SdIF+9Jw1b4BJMNgk0Mkycv18yFJlhN6JrE5Z/2bGI2dDwPbcRt4HCjjopUCqgC44LsLuvT87RKqVvaCj+X49bWmX0rPBvyF9+4o7emjsgPIOo9O9Pj5UrrMdoU0OonuFQhSHOVQkaAoIplgLzA3Q8JoL3so4b9X+LvVqP+/WEn8dudFsXpBU8CKfjUy7wg9qQ0xrD+tNiFHJldvsmrXeb5pf3fBRJe1uuq9WukZLxMFeY/wG0hhPmyOOWlNJEPIIb1u/nPJkXCYKw9k/gmw7v8WrPxZQeaX1gY5472TooPK747l3v2Hd/p2G8lx4fNNbXmZpN3WovJBFnE1j/+36r3JOiH12VCsa288q5GqZ7oiAp1Kd7Ckq7c1riLrkIhgLFN9+hYw2rRBzOjrNZv95E5BV4KnExHRXwW06RC155J96Help+MTyUZNONU7VK3jsHWJQDbJlmSY8vvZ1rzTKflTiTip/zS50Hsh60XR7XFx1BLBkM3ozmihusKZbtefdWwolwd2Nc20iYwMoVbWrQjAN+FPGi9Np3c40m1cxeFdNJsbA3JMleBPsrQ88T7p8AB2oumA5tKirmiRcfd51KcZAStEqPXDcXtKj0jlyfNyDWPPoPSc9XwQe/K21ydUphQpVev+m2SZtoJ9A0zqOaXvvX4pefbtDc9SmzOc+v9XSRe2bO+Pb9z3Vx8SCIf5RbefNrDsxU+Huo4Fv6dvmj60rlUqqPzI38N02utPnftbSyE48RBAV0DB1uv7mMCY5kSfeQXwnthOJfvie/p10wWS3865TtLs+zBl+gAHy8X3L0ldQUt75460cUM409yJ7hN3N4w4ZD/rxKew7QKCpp3NrrgQAOKTSmt42NlypbmeyQmWMyE87NSSYBQhE4sZ5UmDwcDfIZMtGyNFgTi1qg5PTCKlFhwSwxOnjX2uzqcpjunifWnDZ6Y4Dcee3/Fd8rEQVvRZptIrxCTzQRs+AY5xss9cUagzaW5d80viLTMkebKhRqezA15t9IfU07KMWUGGuVoOSKU/KuC/GZijPXnx7qHt6UA1nGqb1qrd/w2F/lGBn6jcdAc6w0vOcw/zfrRATwB2ItKsw/jN755TGbYu45NNwVL5Gig5qvbN8cOwZPuOoj6Xf6iBtnFQwO4j5DqdlhV10TXWXIgOP5rY0ZGsk5RZJ1XEE7ToprwabHJDhjsHJCcuPi6lo0eg/uep8J94gabR5/HkMefVlB0KlNMfha6a7CY8qeOf+DSjBiCG59y2ZHsn5G+y8GoGeZFIQOrU9P+vmJhQ/Gi0p9D5l7VpaAKid4RilcXis+DS35FeUyw5w3o7HAEM0wkXrcuHtKNwAac8IOR4qMx5qvQBob/MA5IwC3DpBOdFcIednOjhUDjtnD+YJwcQrpNe5bl8UeHeaBI5SH3TWwPKI/l9SKSEI6FYCgeID7UrchMMP/wSQDpZbe+Tv1d7BLoqRuzwhG36zA1f7iT2SCjcp3loa3MNH+jsciuzZoBfYSKMdlML09Yeg9uzr+fu89iaOZDRlQXxKHk4aim0mdGCzm1kL05hfnUDkEIux/cTH7RnJUR7ly0dEc/eJ8Q1e83XrJ2wE/acT6HH9YUE30LlPxNC5/fZbYKAma0Vkw0jXJkxolzm2Fvn6BrdvPqCFOahulqkUyBhqAoaWRMr0qB2HUYAaaMTVq3eorIDE7X+/J4nWJf+mWT2UkHrk6dpVESRkfNLihWDiyFj2uXTswxDNuSO6HQT0KAUg3/hKJYoNB4Z+uQwnq9SOw1WiAjv55lI+LR0TKdJh3DJvvAp7ftZInHA+Hx2hCXa8dF60G/f+LgIKB1lW6VSFqcD596e/Vf42sZ8uua4CRNJ0bNgHLkYcJPSngnxrLNLbDgnGGL8AXDUgqDTYiZeaRiiXq1ZlDr+aPOjcl48cKB7n1pdnTe0zBk8P8nM5nA4HEzf4T44JvhU8mZH0UctqOW1et2NZQnYVq/WX1u7Lhd6Xi2ZfcNROp0bTkpUpav0OIPjJaScKvKqtYk6Riv/CofO/aCyQQvstAYtM6k5tR0TCkQ5gukK3hONGpKL/iGgc7mL8M39Ciz1uq9opELZpTuLgotOED01eI44qHn3dUMt2TqEqiCnu2+MIPorZEeVnNZlSd4JwbM1Tp3peDqj5DSujJMPGDR/lXRNq3uS49eX059wcKL/46XKG38tukgpcUpnB/A3ahbU9FOfyvP09KDDr50UkLsCdzU/Hgt/0rNtmqn4FfH8j5quyODwPB3obqx9H4uPp78S7orjZz1wawjhSJvmPPLTvSIZ/tez9Xvvi2TSpAl79G3Ei83mYqeOYIjfTr5gqZvBc/dkfTloFsu1S+YXyxdVedhrh6OBtSXGq0AH+KBtwiL23eu1XUUeWnB1VRe3hUX50Jzc36s/Y7jQrFIeS5o4iy0A5Ew46jka6G0iWD57KgvtA2VG7O9z5rZZ0Xe94y/zPcpMO1Xtedfi0YRiRVi42QT6fXP4L/q4pccDUA/DpbbQnXSdd9RTn5mHvNNT6yyA8UJzj6t5Bv6IdQrdrfsw2hVPFb76BNHo9merl0+cBzO3vw1A4NwRfr63v9IdflGjykDe4T1MgQPAhJT69aKuQxvdANAdqoeY2gwNGzOhGM9iMqehI0N2gfD3qLFn6Xqpf3074IZWfjjgZshccbkoyU7EViIDqrI2VJzuvP+fmH76UmXakOKPCsaJsETtD4bnfjdxHaPTadT4EEA2eB2WR8T0BX0Med95RTExLTIBgPkDdNwWr6oYD/wQV1VgvtuJz7UJRm8A3KkOwI78km615yNuZI3/a0QY6s+X8M+vbjOR7vlaA2abqNn4FkG15Iy4E13rwnTZ/HYAc9MxZ0Cwh6FOOy302FVye6T8vs7+BZm+KHloXODBfhgzZwNa9vCwoAwYn7XZKt/sAFR/aiu7UbwuB0LaVqMNL33Tw7gTHADwyT4/n/qy6coF7NIYeb475wZSzEAni2KeUW3trHVA9jWJ5cX+/NdJEV75OkfrGNPPM5n9EgRRx7mm19ojV+3fRzrZeodkkhMfGwf9YlF1odrph9RMxEOLp1a/1nS6yaJemS24S+djr8xlT6lCYwOWwsJjq3M7qevIX2Fg/75ujYBOwa4TioPavg3gbSw72SNmhPNK6GT21l3quCD67cCEoyFsWL5axMsAEJdpqTe7+qp4pKajQiAumu/0Jwq8uV1o43y/wTdAtU4QHdSJxDOyvrx/vTW9tXcpA/bc23O3b1m5OjEwjzhOgw4QpFpwCMT8Iu7mvis+z3WC/E2A95tVPnG2ubq5aDoxxjOuSegY1px26jrxznM3XgAXihSx5v7IqXLMByTbU6BcISjexyeCJObn8bOiKsxFzc8346JQ1JRReIOCEwTJhtsEO/dRTu1rlquIq+/j+yuylUahT4B6G4q6VvKRxPhT1C9kc6u299vaYIM7aDjtoQJ7748/as75vBIpQerO8wRz0ebyg2jkU6rXlxviRDjMqvffBnfS7Ov68DTCfjpe4xcSryzHn5GHUn5+xp9P0oFyX0hNnjSYlZ8fwdNWzKwMd6IbLSnR2mMAk2/L2qYLUH1Y+DeaPsrATWJ/abePCrTVeWkSnl78XVnOf78p1qstnYzxs7H395UU0DvW9bL2F+v8U8MFUPUhS7Xv6W+R0oFOk4u+c/9LFPffPjXlB/7pp69b1shyFSrQ83dhLnueUq7PFqge8bDVhGvlvEKTSTKazcxSvedk3Y83R/hhqbNgt0zvfq+uYK2cY+XXkaEap64T1AzyJtSkPC9g26c4vrcKKoYjLBgZtzViM8PS8AWgDGipWuj/fKaXb2oVcf7Nx2CsH3T4iDtBleRYxYKGnsrYfyeCi2HjiUCtr06U2YDYZqjxbG+KnXWSQplP+f2M5QCe1M/ezNY5b43q8TIGa1z17YphKmKGXCxih1/gE+BC1kbyU4Gb1IUpv7/dWc3fDF48coP56ECndqK9NtEAjgZ7jO1PSuHs1GdI4AJ1scYmTrYRRiafWNbcnTYNcVen0GOxvtPDlRV6ekZ8Fff4LmQump7wG8JW7qQz1XvWqXuVQRtH0bBwcPeabdeK6MAKpSe03pH0nUdCRq2zz5g3g80YtEx4uN4dvrO9Ljbsyaj1RM4FXdUVzmhbhkBubynn5b5Q8U5ydVJ/gsgb3qsYIBy0jinw0v2wRyUJbKR2la+UIfh/IiZlo/nH7MD//v3/BgD823zP8SUYtY8AACAASURBVP7P/0AsKP2JEGkrZ6r3tbMT1j9RjGl/6pFPxBaITT5ZPzdHWhkneySIkz3K/ynbUm0jWNRr7448UuXC0cYYK0pF6NvQ75IydU5A39fv98U/IsZAE+ueC27LV+O9HpPbeR8g4NuRQpwR7hIpnA621dCMyF0ravVJ/R36fm78zeJ5R1fnx+fpmKuwjZS8a0jb6XnfuBgy9NWGHmVqdlABrGV3fPU9IvxZjtUdqrZVeCZH/ySRdU6xuTDz/KH0QuiV0NPWpr+nTZ984rjIt6iqOi5KXa63fSE6FsGk8vjMqn3R1KtX+FYUr510cR/sYaGSE8IwC4Qi6ijXU7ou5VOsf6ru+l6lBYIZjqoVYnf6zk+TmUJtRckgTzW87aJvH+bzoOdQkOyzPoXc8EYPdW3XMV3p29C5STcua5ZIXNFcavE2BhFOQbE2Uq1oOmkX0vn8GFYDSr0PS4hld87y+oitsjG2KlGV1zbEOQ/u65C64w7JN1fJUf5QLAk2En1S7Z5FkWYbvVQs06bLjXi5VSr1OenkrTyTFuvhU1stFZw0G8pVmBC5hE0c2Ra98g0rAqknrVt7zi/rM2+G9htsYuwB3LBk63+aQz9wKyT+VdPhTmLTPyfNZ95cFstS19NYLOYortc14yCE9e2iuoydR2bx9pJP3GRJWb706Ao4smBa01AlmPy6HObx1CqrfdYNjNmVgaXGGhfbDDyQOGTJF0SjWXfZFOFhn9cVNF7/yG4lvg0+ll41Q6bI3yTz5foyb26XQO45a9ORsfRAqEv9ABd3wDugGMAPgrexorP8ImvVxq/8UviGQphjO2VpSmsQ8Z/W4TLkjc/rVxWswRy+PNk9VeK2wFyHlqN6LifP4c2ljC+8+VAwksZTq9ArLrD2rS6P60L0OQBOHip5TwozkwiwqZUud+K3HN/3jTNLfbLNYrByKHqqqk4PWjkaFw7l73OPAYnTw2VteqrJR8l1RfVNBxMTuuRFlZzPhjKwsLqwgPP/l6PbZLLmc8zFOBku3e9Ld9pyZzqVo40WaUK6891YbibvaOT194o5lerUUn/Qv+ad7DE2/AnXG05NGjgIXMRo6V6+DaX3CdS/knj9rddRxkAy8ieT2bFcb4Pa8l4EjgnYIhe6gCAspKhIgtZ8ISSDKixFwje569jWVh9rB21dk8wCzn/CSe8bzvn08K5UwGW0tc9ZtTWz05l3IRFC1CV5bYMM34i+xcp6yeb84vRYhJ7Ti/nL9Tc2nr7X7VRFEakNd6eu8zrsEbAYhyvE9eeHAT46Qris7KRzmapEadXg9cGQ+q2QNcuYLME4eulu9odtj/bbbUNTYrGW5vVLhKXTMTEFuKsC8w6dE8OvZTZfnppvbqE+64pINb8GH/y9p0vZ9Vrx5UDn00bmKHxYz29qoB5ggGcrrPIVdt9UEjxn/SK+fzXTpkP91NfAzngEMrcRluQdvtCT02hZC+Vxj6/dK0WOr+WoG+sUqRgOhtg9UgqR27rrVBVT/F5gFHoII4KEJ5/Kzknh+t2XQFUnlDK7ORFtxe9Wp/+vdMOyAgra9qBZPtDVZpdyfdZpSwTOtr7MmTYTw3bNH8fuWXLDKYy67MuuFsmoqhqn1gc3zq7Soay015fK1g0oAzoBDVjXI0aiLcYA+Hx/Xw5tXY5ghayNHqYB//TLn6Ay8ON4I/ykYXbzaZW+L8eQHzi2DG+mXOacGBi4jeVLEwEwdUWdO4S1W7ZKm6C6k2x5jy8n1At0yhtGrxYnRtwgHmNtJnSEb/Hwi6ZIw1kO+04h6OdchpnS/YS3sY37NRX0NwODeGX1gvtyz6+9Bp/klEQ6BoJcRBklixOPT4T9/dBh9wTeMO6SYadHozsBBm4Q3DD1Dp13yO2GgYWL9S8vSQ/TTAmXDM/GB8jx2voHwxLfR+6y6ZB/SxJ8MMaAjJvdhb76O99hC+oDuFMo7qhakw/pERtX2SUhspSkt5fuwLt6HxT9OBV72Ojid4/a5Tqt/844Bq/8yS4PKjAYPt81j1cCwBgY8463OfE2FWMIPuPmbpPQL74oEXY3W+UFPF07RpvCHirkXDO29do7DnYt0j578r4DQ0zujR+hMjBV8C93hegdc97xn/MO3N+BzxP4vGwGkQGxOwO1RC1YfVhOJ7MPhiyhOSyiii0su/O7qgbm8f6M0sBy3N+szXeXjSc+Yfw0iUOLniWLveLF1vIiZJcPbuP9noqalSzTUoizcOhYQaadWA1rAvTRmIcZq/Zz1KzenHLm2u3itYmFj4Xf1M9UV7ctuilL1Xkb6X83KcObgy66BBgZFNqxCAqez2BTbdf2hDPd8+bvcJ5QinvHDzCFSIkw/C3pOqEZt2hYL38wZxVgJ8edvkymeho+GeaFSss/VufwiyHV7ebqHDDcCONEVmcGAF0nr33DlTuqZuCH5gvhTFn2eJKNn96mwRXYfckeNpegL6QqPBRZHkuf+wL4vOQz75/UOsIz2QeMosvY75BbYNXYx3LGW/Heh4iaWFv3zJmmgnU0wB04bicURimt5XfFumz6RP5Kz52xiJkj7TZckSWtztPaZE/bGF0lFk+n/Bd8fUqhkUlcH4fU6Y1VeGsyf2Qm5nsANhe+0iUVpg0ABdLGQDHjAJQ9f4vOqrQE35wG51vYndowvHrciAqFBBJ8A7cWEnOSFNhimyPFnqnJJSfRch04KHuUEfzfn9Z2pv/383/m9E2X/PjLXBHAhsH/6Sb4JANTFXdV3G1Dr8/DvV8e8lzU++94lag7+6yAhca/G+/mTeXDpl15VcZQ4H5bMK37xyVE2irhA+cdV8OLRs1F07y73JpLnv9kV8QJcP8zX5B04k9/lDTgDm4RWbaZ2MYp8WeEYyslB2aQkMcnOq4ZpYTGo2wD5LlHJVz7vGLtEEvAck4KQicH7yuW3J2COzyCgULfANxnROApPhmOdaJrXDTuleaRod/ieO3SMDeUhFQ3Fbz2mUv8vjv/UAjw3P4dPXXOg26/sdkFsZdT+Q52RnD+LraImG7YDLha3NfG9+njQf5753Fhv1AfBxRjSn+cP3l8tyrILuEQ++FIXvDV6G5UZ6s0wmdrVZQamPe+LXn4JmvOpkak6T9QyN0OZ4hH6UxXsUCAKZi3scHwLCVFeH3puIY7sf2NAuqb6VTJie4osv4inTY5dBq44ncLvRP3+z1sj7qJBOk8t0MX/tvXle5YOiO0C815xOiGeYFrF6zoj667YhVWq+OJlzuWHqIHyrqMn/PvE/brBiN2ojPOToVN/EPnIZJHPzShhz9vX2Rvw39rfex8k1ExksebVIPLNjU5v9vGUj8v+ZphokQipsg5Ys3LOstgkkBS5DVavT3dvpzrBPawY9FVMZ3mPwUezXU5FAW4k3D62eHTy2b/umlD+Pqp/feCN23itDLO6/XXnZNOJ+1boP1q0bqXKspM9veeZ6un2SGbU7rVwTv1ANg9g3uzRytlT7eQWgRWrMVflws58uEk8FWM+sw/JD+B1e9pdrIAqgP3N5OnU3Gb9+VIF7UDrRM674Cv2UFs4/9rePmeHqTOEl2uFZqt+H6DnBju4sG+vf1vl56B0t8HR133t7Hyc1n8UXRUMF7MT0LFFdpmhND3UyOxoDehU8yyGKms7E7jMLpCabaqrr6j6eKjUSR1BF4RkjEgNpE6yeTLcgR8OPD2tOsK2d4f5xNqyo4nmzjw31UFp9+9kgujJKvrmvpQ59Vk6BVC7Mg5Kpr+rsPqRr9ns28zaSSdzd1IXfUqOznDX2VLNvdpE5KbFVuLN1OWIws2QVd4CPJhhqtmnTZQEQou+sNGsn/XSofbOGZIqCjjvEvV+A9xnPhEQ92M4j7zpz/PzxLSDkoTVsMfj1MF9jCminJvb7eRniXPf2S5AwOfaHYjM5vAsaDmLepUOE712yRp2wN0SvKIvg95YzHqhJCuTSp8Z+M0gVOd4LCEgEDGAMab2WmCcAfpPRYTQqYqVcZ121BXlL3Q31fTU+Updre5bo/xU86o/q8f/3VVo8D/uf8SFf/bv//b+v4nNk5B6GZ535p2uTGXkTrvd8yxzoTOoXnijXSAk28cOJRz15i3aC/HljlClZ7wQjUV/uFnQXM/xPP1v3m1hwBqoVUpKmUa8S6HBeEUmgzTIg6NBdnbenYjGeE4mtI62fXQA30uWCezx8x8v7Q8hUZO/OSDsjdNvdnbLi9ftfqK0LnOxlWxLcErksK/T5BeKutSJkKusr4qdfX66TfdblFqjtOB7dxJs4u23dqOlitSoHKxwGqt8AlhaSU8MlF0oeujNiyPxK4vmgcvBB1r/iwyt5eXhNFkgXC9/n8rX076zMRqbYe2ecTzSW8RfLL7UxYwksA8SGkHxBLsFZ/aPKOokqb2injqLET6tJLaQf6f5gLBRwemCgErDf6N+Q6JeZh0vulF7++JjEoXT3Yq0nbLE62rZG79veL13f44B3faFDi/3J6cQ0cbFVyM/VbLBV9fFrxQwdz8EoO83QGIhTsyYx5JQ8Z7bVQLnXIWQf9tsgnJR0HzoiVf0ZNu4x/HKOUpvJrWzWM/pPa3rF2DnQBV2ou9X2ScDiNtfefkYeBP0/SSldTdAHCTNwxRYL7jPWNvB4wRBt7tIWBt2u9605zsfp/14hubl1HEs8SH9VKw7Jsuq7sYEKSQulDvebWZZ1/yZH2EBtqRyHVyc97nLs64iNLvA/8VP2v53holsES6N4KzXjGAPz7IDM4zDeeSerLqYoV4VKyhwBCMN+AOAe6m34dawKDqmHOaLnxVOtBg4/nz5Fr2jod4V6EcXT8k3Gr0qbY7W/VmJGvPuc97cyvdbE42nQOaTKf1CWAtjJeKWKWEAzUEQGpvr24LUFIHt4R890oAw8lVkuhzVlS/sP7bJQDbMPlZ7IgGY+KW87uzt4KfGzJoY4avbxjJxIj/LvlbBcAQzJtC/tSBuMIFZ/HNdrvzfCo50KNCzRDuyrBSpcKbEHV7vYG3GVkodOHDdnLuJ1SPOplvk/s08OtRyHKMNRrNzTVG22zHnOzSKK5U7gQgU4CCl6U+kmokT23wXSiKw9jFvEsf/+5yjPVEqf9LOlXgeWghNf3FZQtnXfV8ry0GgPtQ+7eeuDHzgdHa5scdjN1WLs9LPR9Ml8brExguK9KH1X6L1Efz7Ih/UP7VLvVWix0m5wou6pQrWDcSeDKpCK36Oke8nF71fXbaeCUvECC5zyD066a/v6dfLT2lebftczDerrJ+T7/ddFZ0zdo1wy1Ok7ARNdVObloeXc6yOqXoQvCZ8KqwLP23L0bWSaMchOSpp6X0cxiO779SAomf1WkTFFS7Xyn/lqodeJEa7rU8/Xj66gquKu2pqa6X2p2IU5Cswe2rh1mG6rofBIgw5svRuATZ+/uE3myRBetU191GbUIxMDH0ZrxggL3fQ1GlQd3DdfbBtbIPtbSmAgwc5GTD85R9sRY5IsOCzaynbK+3k+joTnSl6uss4+wUKBm2d9sk+iptCzIXLwK/XyBLeKLwyKrzunm1NO4HcMN1fefllBdnDQ1m48/jSldbrPKKZRD8h9nYoUzs7lYPSzcgQ7H2va1nqoAOQOe7Fa+TWLLMgiSiBRZcv1p6MsjfUiaF8doa4I1gpnPmnJD7xB2fITpxl7nCHotJ+OEnm2y6y3JMmitEgLq0bfT2bBIYBb6AERQAfqBql2wTUTuFLhQOzE4mDUln+lj0pLapaNHJtJBQvNKk64T5dFmXNoOHPQ1COnoDLvpEJLngMQd9nMY5MOSlnL2YKml/RIShiuLJeDX5QHe+vsr7bEhDL3whA4T84d8XMHyIt7+CIQMtz6ewCuIPP4n/gaaLjUu/Y4E63gMVHrezWrtdrgecnCgyi9nOOIKv7ZeSXK7L/mqwKtIBu+Gvy7WFxORH13/eZ+57UU9uJzywpYnM+apVJbS9mrYmCi+9UoL5rr0uevcRAXkdRmvuQOBFT3d8u5gz/Xuu9QL2TmJfm8gO3to5I/Z/TDqwWnv5uPyj1xsmCr4OfF/yym5GaZT0LFHpI0quaog2pX9BmkaDFaYzXbIDfcHb5hgMmSBOCEe9AH4Ygh/HG35+f8cPN8G7pkNtArjrOxTrBHrpoCy4FDAnespd8f4X4aFIJ7rbGQiHLQDE9Qqe39S3ALT54gson8RFRC1wMXjYrfL6aNHKgNuMZX6APMVobVfn+aHtFxs/b5DhPxLaJ0Q9JGA/yZsbsl17AfCY+msqSp4tj44Q+zCNn8MZTbYzqS0CvgGnaTKla3VedulxkmhvE9cFxtU3drQdqvoqkylSc4Qrn+aOhiqsl83W+yFy3N12nK03h67p6cStwVEW+Q/VxGdzsNfMbPuE9Za5zT7RXqtkvRvw3Yn+IzZEKecDCt6ZH/f1EofQoDK+Sud5OtC9/FqSUeQ83oGLFgle4pfWrQrBNbMy/zjNctj4bcwfMY69J9CoAOOJ3xBDvTr37VVfwkQNlfW66/Sw9WfO/SdlGCzld/33AZrTtyDUr3H4PkxuPDx5f3xV9dgCtUV/elUSf7GsfMAQX1/59/S3TM/kT5v2/abTl7LtafITduhr8u17+tunf1gHuk9CgZyABMH+tRj2ikG2BT3N71iGZYT8ujImfabpRrDm1GPdnyy2sK4hqMI2EZiT3YA54qMj69SZ07OrGcdp0axXI20BQsq7mCDYp3K+YxtflqoxaaBdLsIcCp+e9/wxCOfiD+vobXT77KMC+Y8Afv8Ad6eJFi1qp8Ma+VuBv6iag0YpPDqMPhf8Mu3GKg/F5WHM73csx+K6E0fvd+h90gB5aNKlgacprHlD0okKdHM+KzgUmS2FIKZGwU/cdySLdZxMrBBD/2QZKGxvcjNN7AKWGXBExXGnsb/XGsY96IZ3sF0P20YUVzOsZ6x+pPVu/XxEuAr9nd4BtnJTxcW0DQiGpxV22hfDNfjYT4kUv3Z8LyttoLPIZZL+GHYCswuKrXwdh+WYAXyyLwBEBsZNAJnkQLcwmrE415n+UVJwp59FB0vYv/1E7/a//hX3z/8dv//Pv/9b4ynH5xnIqrsfWN06Ab1D7wN3ADoHZN5xHzeojHSaj/Up/ikmLy4E8bDj60tMua5lGpK4DmW735c/y+WTv0Mdoy5gfKXIaEUUMhSCG/zuTRWs8Og3WZ+h6M2JLvSsqdY4pVyaZp3rtkO/k8wKa+tcRNdn3vCLRvm4fO8qDW5Xwk73h2s4shHWRVdyifOf0qH+B2S26YcNLHPSXEYkaBUx3hTkwHnE5dlvklzEQylbdyfzF+ChtPdK2tsY9OTuOcYNIoJ5vxe7jxe81olxox2T0+6MUVDYP24umrcB3Lp0offia22fHexpHnioT7dJ+DzVqqkseNpvjdVty8vKyp0ZrFuVLd31PDYUiPF3P4VZu4AInapcNSEr6FxLtlz0dbpM+uL3SYMe3SDO0aGkzk9F2JJTM4q26zqe2QpecDPiuVIL6n5aAHYbcRPFJEPpd+/lzjmm23m8f2OJLsxC/QIUG7+nzkLinJO0EFk1N3pcnphEe3zRXtEPp8yKkAv+YF/rZka4aKxkKUi5hjacUhTdQ+NRVKee19oSypud1ahvdVmNtBW+9VbA96SnU4XvIBco/p9f/pshwi+q+NfbD/inH37Ez/oZA++YWCG6P0/gHXfb61ujcCmAN1kzr6WSZ3KlrjH34VntU2jeOKmvxPZpsydO5roVQVfn9KbLhLiLvR+JzCL7uhA3fSHc9nr2/ssKJD9M5ggVFPE/Xc59uzYjeNjrchPH9Tzp2Y0swxyilqh8ydr5hPvzNEn5yKd5jUUhMSGbwYuVuXzqIDWY4u2w34PfWXlxGvCrA5VVXJXPLLrhdMx/uw5JSUp0AHAD9ru1U9VVfmdVQAf99WbXmNnGgbV2EOdzo7+pliR0WrwreqOObd3YosDNbApNmaARNbYxovVH56jPLcUNLocuxxNi1vI+1iF7qex3OJLpz1O/7zdwoVSSCVEIF7ArYBytTrPqeVa+IcD484D8Hkg6oPIU+fAUBYJDj7MGFBvrcJrTJ5fz7kTEdoMvxs16uuDxdtLpTuAFrp1nGN9qsHg708ombNZnnDZSOc55IBruHVLl8rmBwN+tbLQpcSeoHKiouuU7lSnlNcc5hvrclrTPKB8fTY66LDnCns/0iC9tn2fw2TotNmEUe4CAS3xW+Aoc8bb+3qideOvDSas4fZiemFaR50Fb39NfMani9cXBC97/qvZxVlbBRI3emUW/8Trlh1OH42od0//cBzBJ13mxKzH1Pf3V0z+sA/1vnhQoO0U9PZNTVq4EvtqUp3NXV/ya7U5bHR9kuKqu+7tdXk7YqbM+8eoSjZ8/6oRQybbQIDXfWceyCcJN9eeHfN8gfa2B8dLYPjG+PgTDN5e0JsH7LOhiRpaviB7tnqYhYv5ym22I0eOnsU6Y//IZUxXjh9+tCcjdlofufnL8M3TqumPufsdf7u/AnPjd2ycAE7/MO8YYeLMdk/M+oQLcxB3v5KQ2nokJqxvaMfmlZ32yERMK/u31rilMOM/LBEXiWZw6J1iiPNelk+5D98LzMCnRF2jugSWrzanV09WrEAO+YHFeuDmXobL8jvBWJx9OhESMFqY78FXoVEuIbdEkuZ3/aNYt6eIRn9D7AsOxI1wHKg3VHtS8sdAE1MUqW2wcA0MGhsnl9/ta2szmzeMpVsm22n/Bqi/dfX5KL8rdn+j7P/0u8DDefkrZgM8APhFQrZ0/KfD7J+Ac5SyNgeoKK4n3tVAxZIVb9LuGZIXKHwMrxLj6gqzER2F9XeXkbm0Y3eWCg9hqTlBcnUUf0SVPZqNU0Md5YEVbv61laRFZd5a/DwzcMNV0fTjMFetuX4aB5ZfUe+MV6w5X5D2uq/1XFdtJb4P4vCsMb+REl0XotvpJFmjeowbq9ldo0q9M1JfRcUaE5X3gcTmg+HkPNPCbC0VEg05C22SOZepFNyLfoWhUcSZwZdqJsb6o50mKRUk7iR1Oc4O/nkDHTiqEo5LnBYCkdIYLr796kpxPISXsK634OFVWO8FG5rV46yv4xvfim2QtOoSQ01z8Ewq/sgYml1QoFCadjDwOeyiktNy518+2gABayQJtCJ4lce1HlcSXp8I04b9q7HQXJulqVdAmiYtKaJyOz68eaHv2txBLH06vyP5v0ISni6aKLaN4aa2vRBa4ondpdEq2m6unHswkdWPfbOc8RncpN/Qp5zX+D9lVGkqLSfJnkLhd0ram9q1rR83n6obYwB1sn+93KNTuPDeeMCewiOSpYyv4eS6YJYJ4rQ1GdQ+PyaSi7wwIF1P2n1vAfgoaDW2+RCFUe3bW7SjqtaS+EwKKA3Ush7iUO+uF+tzxKQ4fqF64o93L+nYBxLur9Mx57t/z6pazkzR+KxZC504QBX7JCpLSHP9uPOkhh2/+Qji2ff+kGmhrU7MU5/nSQTkuqyENWloFrRzoRO/MNqKbioAh5Dddv7A7zw+4OibWyfsbFIwwZprbKu6A4tLcASsT3dboF1O826/dKVZ+FbWogI6qlggtNmhU/onEiPUG3frPdXMts81BFVJkU1mbdDy44e6CiGTcVIVMKTa0b93QeYcIVjSxAdz+LEGDAWuzB9mCyG5q+XRo19qBmkPapJPTpKMHROOaJ9RXG0kjnMfLxLJFg8VlehtG2BbNwIs6bMYe0QbrjliT4q7lGDhdRH+IZgs6NrbYAO8ZeNDPn8e06lXeVaC1zEmaPjYDuC/cqbRxA9zGk7WaMuAP0wMLNdegvib18i4Hr96jvT++5vdy8bxlebUfX5L3e/obp+SN325qOvG34jy/SppaoepH0ylNpuRmzmXx3cNw/a2Py99v+gd2oPuuVz4P8VcmRDZciqKz31eL6GxUy0GBU3XqzrtiNE068jO+TIkVmJENhcUhu3LdFrx4onlung2Xfff4Veovv9yseph+DXkcY3aCi43e+AaeshTR24aE40HJV1B3s1Up+erCCWZ+9EcAf6hl3Nif6+5umTZ7+P/Ze/duO3JcP+wH1pHUPQ+v5Th32Ym//1eLk/gRr3tnuiWdXUT+wBtk7b2PpO7WeMTuo13F4gMEQQAkSJAIOFlWRaYazFlOmIMBnBOTT+C8KU2/6KzjFHfsomnDCJznTdwEDxZaHzJmfD3KZzKqpCONE0YZgx1/3MacrfEUpPEEfk6zIv8tBUVa9LTpVH0xoG/y5AWSZy+KukxjTITXqEehrOo9qptDM6CMw6YYcCSPbXi5AdFnPGVjBE8GSDZM8M2Ki4mTu3BkYL0A+z7yfAFrmUhcIYm8fkmm9Nj5Nowfz6ZckeOVhmwuEboe8kcH/MRNpuEFtgRlbnJO3k8U7hHQi9y+LydlXA5d0cfrGvVrKtjurluyU/vDRVfY+FFYpsorUpk4BhgEHiSntmno95BVk9LpEqUBflFX5DM2QLDlHQP0ov1k8tEWfzIf8nb9FLACqaPQdIIZsA2AjyG0QUPIYcpSz8AE+MA8E48w/uLGM0r42i0p5fGYTuon2bQcEe2Tb/bskW5Owf1MbUxdlRSZiKMMnwFtdE+Nbvv4+lbhYvZ/f9gh47CqTnfOH7gh4KLce6y29wH1uA1o4A00nRbuB3Ov6y7V80J5BzyLmCQOwJkHZvqE93ExMJHy9EIjO+BaMxJ7pZ5sg/aSjgRbBON1rHnT9SqZ5zsZVxo93YtDJ1bDAMUGQ1O7soHImQ5kLA01ZCXdwTd9aYlhk7uiPKr43m74pQ0+G8/vpe5OUfZ6U1/Lpp16xy+bLDQ9r5VQTiY6TzP8U0S39jNTiKhEskUr8OSMkrgsBn89s4lqNkL2Ur+rkY/mt9zH0UW4/JpJ4jFb2NSP2JBodZH1wU4erPX4JhlrCzao8c5u17HscFjKFzwT0Izl7MPDdYEYmIgTtxQ8wmDM8rzN+zj9RrrR1QAAIABJREFUiyzKrK4Y/n6v+g7t/w6Ef7XrHTh7rpDyS1MoyrW//3n7FSDCbU4QCLc0/M2HzvtDDMGfkzFT1AJW53X5vlwrW/E2gUEEuT5G2doI5u+QkrUxU7Ftj9I0DPCYwIvOcucR5ai8cwO4/dHQP8jeWIXVNgnK6XNJTQTQoafpSd3G09B3wrC8AHBGXTmExpL5Ujybu/uejlq6UmZaPO2yqwQnln2iLtmz+FzU9yxTYOpWnDpmBnBCjJaH/kk3J/ln/NJAimcgZGNMg5PcSnpgbJILfuGO2WCGSXXznsTUIn27QdGvKkoy55iOx2xUZbIW5N82rG0AGOEX+BNyZ+J5L1Oy3Mz4LTBWdnXxNlPlc9ORXv8WG+iBc+LEhPOGgay+9KTdtjhYN/F5ZkuX9c70m4QLKS+dzDgyo1AYrK6RhTeoyJhZDK+qoyLJEURah8Jli1O606atAzn9p2fO/0VhgTfmmJKVvCm/D5tqCg838cl4zmLMzyfRM92YGHR1nAOe0IdSF2gFfvSJbcxJAm+79WPvPqvXy8r0FHxgR3cFjry2pWVRSbBhbRnfLo+Nt1CKa+W2YQlCGO9ze+5DXeBwLt3XvBPOHH67VmV31VjBr/XJ7tvm2aLuretIgk2deaA9rys+hZ+HpfwI/0uFR0ShZN3n+Eu2HR1/Cb1/k5AYQpqL3F2H2BbDsn49pxz2g/HfdKWkyTRGvXrxR/jdwz+xAV3CckLlXvjNCZVjAOpzXp+6zpZS8C6eXYkACDjN7XHWfB6HWCzIJ1Mzo9hMGwkJb3QtfI1pPguIV53qfZj/K/rvLfC9uaqaeGCgT8gk1W6xZemJbXoxC31ZSEvApfQau1H2ygqQASnvHzFxzomDZZFG7jSH0MpkNf4Af3r/AXQyztsNzMDBcu/5tDvQ5w2kC+3EEzxPYDI+fv4FAPDy/r3YzE+AhkyCacjp8wk13AM6REyhz9pxaxfjkl+U9WnApljy4d9Qy/VhxwDPmJjZYpQtvjtMG1ft5uY9TXQynHc73JPu+u1OIc/qIk+dTK3V5EWjPiXy9XtWIyQo1cEVLp5gviHuiocrHjHvILc/bk+xFyNdalaaYO/vTGttpv5oCxpSFwchJKXRHG8219gOlypNg8F0iCGdJjByem0LXVx4RwnHhRZ6XTnrpvOvutiS/lUTvH8fHz5+9mTz9illaPzkV1zD1sEgABgP5nZpMWnO2r5xJmO6GtCnnkgnHZ1kPcJRjs1hP/1c2w3SjQ0DeDnA5wDRC0Tl0ngDqU9QF86OaizzlY6QEz7TH3Jdwb/CXIeK8j3mAI4BPhj8qoPJiw8ZGneKEoIO4/xUKPKyOeAe96htybxJ4Z0sjJkBnLkkkxupv3qRrlfY+M/0w+0PjmM/AbJlT49bU5LGluAEG9fu454p0oVRcANM6RtObc5ZlKeVxR264P1x6m1vqt/obl8ZzGjEiLtq5YM9T7k2wd2cY+U5URh6w5aThK4HFvPDZSinFjl3Z8TVUjJ9Zb6ZTiKlGPCs96fPIIy1zPW9G4rSCqsan2zssy4Iapqh41SNdUwAzdlwpD+DWq3PBSdtNwhiT3d83aXbsCuDwlC+QrHJfxnSgLS+3aG/sZKShq0UXtLJ71sx+SBcqVHb+LXuN81vN+FuzgbDnqc+DtxopG70qHBcaqraTrL8F6EaknuhXCryxyRyO++klDgMemYsT4VTjtdxiSiPlCcSc7hldnxS2N+AakS3GtIQzKQ4SferKY6zMYzQrkQzMQrgJqoEzqk3vU2kMSgGlZvCcapyZPUA6tQHtvAXFTCQ9n7MUENcnqNu7DS2RrlrxLuGlQXS74YYgu8r9FPgiHepg/VPEop6ldNKQQMU+1I13v+jVqYCX4z1lohjC/t6ir2en+/z/P3W9xxnXrXu8MPLIcGlNJPUeT6TXeibPDPdZerErHq4AXACdKSoRAO+84MBYLoB3sYOgDCIAy7bstEy0iBNlfXEr2oc4VLetrghnYD/+rDXo7hi9IIXxbzP2lbTOjqPCbwe8v31aGVc8MV+r0JbF1i2RzqoTdC17/bCSY8BkoEX0S+JzeztcfbBE1GFy8d/x6NtXJ/+3honaY80mkqSKv/jlqlaT8DOLX4i0yHnTQ8aPz1tbCyBGruzqu40zrbGxl6n03PqB1/2aXgWY3kY3Sez3OzndaT2KyyU17qSnCq6phmTc6cko25xpe5/nd4Dr6TtLfwl1X1HuMf6jze8keUzA7r0bTKeJ1ioLSDYZr5cQU5B/ikJ5w1cISGoxGfcWRoumSklynkTzBm6ZQhfIOaRTrj5bpvR9jpQPK/t+L1C5og/wncZYtAtn6gnaaz9GVvYd0EBfULzhjTGr0mFBSdeN0CNE5hSim+j0PwIbw7/9AZ0AD6xdUU764e/XaX7CvJgKBPeJHHvLgKk8m2yXhQgrTfNPmLtMs00UxafDPLK+jhzve2zzWgvUHDR7m06V3IvJpRLuk2y7yo8XugtS62LclqVfS8qnXrw0p++w2QX+I5kotDkOxwlu9EhyYRb76dmPQ3KdgJ9AOCJwYyTod/FMM7mzmue8ndO4Ii8llbuSFd45in1kZwuWNbm5umKr91jx373OAAevsjk+1rKxC/9ev54ht/xnuJsvCVlgtN4XP58Ypj/9kpICfc+r0Rzkaj36x06ahPt4HH5t6Vp7MHPcmR2l3hQBf2i7MlCG1O9FwCYvqqmE34a4AO6RAZZpLGyfFZEqZ7ewD7RSnzKGSp83K1ouxhQCQ7CgZiCx0Qb5vqQLQvpKqeegi60IZtFyknF3em1py+wuheeIbhFgtRkH58o6qr0HY7Lymvul4b/OULIAbKA4YurhEySK/wE3G76akqtEsTxAkwCDSqLEaX6jBJGMBovR99TfNxzzOB0fzipvCVijCELMYMI8zgwBjDHCX5BW8mJ0eUSI+1sTbewOgsr4v2pwJE4X11sfNFPGDiThVfaR37nXXnc+aIOeVTw2Z4eG5ppde3al/n7FwZa3nbA8Jqat4/3Cl/TF+Nrai9LX+/H0leETdP+BuCv6f3vOFXXmfgT3kkevQOd0xUVjpG3wJfqd05Oe7NEDovEan0ui6lyOtPibbGNIcbztY/yPeIBwUTSOdK3DiN1BSZ1I5G4RgWzXCSvw5oJ4GNjtCeEC+alnYEF1o22xLOmy4vOZZxG3ladvzJ26WubEsGuae923ia9wZnlfOIDYWKR/Pu+uwiZHxQa2ZdQTltvUn3LoVfqLZpTrWWZW2Q1qJQR31vyfbqL1sTcJPi05zCkXCHmSnUqhUQ6bvSX9Z9cRRa7oSPEu1EVp8+swjBko3zdgW8wcj+hQi2t09BKHaYeMLeT2JwXts19vNzBYt4aamPhctx4UZblv542HxL4RoZF4X890zgidRtPuYIY/7FxQVdZCHqaOXEl9ZzBxu6JLvTm3I7E5KaO4ZE+yVF4gSbzSaJwLmS8Vq+1sI2HQ/kAgUAzbXjUttEYoAm9HUP1RN/nU/t36cqHAuyCyDeBEG24LOpu7jWB0wUZe4+TukbfllK2N8XpWHGUwropUuhjTPu2EV47eLM8yYTJNZGIu3QSFzEu80lez8MohknzQpaNZPYlxrP8uoRI6TnB4XnT/GsdvS2G7TCL1sn526aMphev5S8ZFkgCPzXU+50viMb0i1xu3qPNANdtxkEZSXgc0YjoqxX0CwCqlxgbrw8I3duU12+ySJEIijQ9T2kT6jJNwnKkIW+32kPqtEtTztT2cvIcvNBDBouVls14HqfPkfDZ+5/izYzklzhKfwVqskZrH3BDv+E3eAsDZTMpteQ1XwuMclI+WrGmaw/Rptx/nP/SmNnWvT94FHRD2C6Mb1MHHfWrxQyXuV92TSnvxoOMP/ra/tqGJX8f37vx/mA49fBb6a3bit4I24/wXLhi+ymF/r6xt++Uu5t7WJ6ymZJVb7w3b2zztredPv8eCIvV3qFr17POudcpENX5xI/wu4YfBnQNsVM/SPO3r9T+SZrgtnpui8B4buE6LDpNETKNDijbxqETJQQMBNQ7g02BupDZ+2HchfrVpCktptAunU6ULyef1H539X1d38YJvQcgLKFqWH6er21WWIux6fE1I12qWcj4W9NzF6KPmHcoxja5OueJecofsd5Fzgy73/v89RMAxvn+Peg8lVENSQ/dZQvg86+flJan3P/rJ7LVqGTumonBGCqQCRPqNpWSO2eFcFkodlduG0Kv0hqLEGapDz8z8PeYaZKPNBmLNmEhnm3yku9o38Wnb8+ELcE8kY6uPiDGY52JwXFhCwRLmYlImXzIx+Ed9nz1jEZ7yuXozIRMCTmFDiZuUvAw651MNlltzmXClxbJoi2JBlKTvbXGvjPz5Jyw4WgoTyfbcGF9eN2PDDWgs5q5pixIsZ1o1msP3LOIXfBuuf3kR6IfL/kbhT+ltgPA36wePWn+gcNIrm2poeGJGfg5IftjpYOSjXpEDxeTRqPN7nfRFre39G3VvJd0r7eagAh4eQFwE2MdH7oYG109vcxGa1sdwOiOfIwY4dpSCal3BpoUJ6+IxJU8JuZgOXF6zKCLhQysrdl1ff6zpEkGvMmaCalb93W4Ab2Mmx09VlmTF/cDJuM3iK421cpZbR+4Vy95DF8l2TI1n+zVDK1ePckma1FSCRHXMqwEYy6tGl9xcSOCC9mlrlUl6jrRM334hXrERfF+2g0IvVK/WCP6Qq/TfxlrrfxGrtkFnMsYbFDQirH0i1hjYxXyYvv66uKUesVpgs/hLvSx+d4CaZ5CckYWBujQtk6EYdzJkWXjjJXRG9mfe0iLzgZQHZF38mq7KOXYjYo+FP1k55Wf6lZDfS6MAdFpeYxQfNPxQ+ozujm5fi54WXcTXL5+SzH8tSFGzBo2XHJLOl/q88rUvnKQ8o4I7nC5sSaPDe3vQkoLEbaxaXWaqOysfcOCdhhb16o3XgFc3NC2EKvXDZqUmlbEgznbtXk8pTICyjxVIcAd0mVg8jVXMxUlPHRg2YxiV9u4GJYaR+4H54hqXkob9UjL2Yh2wxxi8wOFfkIjNkQZ4SSZJ7w+TowPfx7ClQYFf0VkpbImlMpCqtrTV2M/WXtMznuvxJy/ps/8cR+CZjY0Yq7l3zrmGnH28eybHfqgN0MQgq5klULnJkRiQJ9WjtxFLRvns/AYWls7UVwGmQ+ODnzo0qb2sco6cLjq1jifZxPD1gcYsTGiqk8sXqlgebXK84B5yJBT7qJLO7jv1Hj8aUYzskv17knFBmK7wYU/56tJNtxVx1tw6o1s0QHBobDANCpGdWVe8hlCLKLLft48Gm6R8ag4L+1Y5QIX+AnKbeSb34Gu78wYJiBMc2QgNgHfF6LZ5XoOiy6TDckGh8MaNDHBftkat9K68VyyRKpMtwGb/No95sX2yShx1hbPZ8bzVFd1V98KSWXH4RGOyjru0hM7Mnq6XG6i28Qv8pdCt4rchYNpPT3ey+IW58DZ994/m/JR66X2ffSNFSVd0N2+jlQaX/xauqt1PG9Tluc5+W4sN77BKZ7a+HZhSUteyv+Mo3rVSrAE7vHMUPwRvuew7bsuhzZy6c1l9gR9Qw+Clkxf3avIC0RvMZ6Xa+b+oEDKw81wbtfbAqHD2vzAr1Oy4frDiP6HhH9eA3oWsm9dAP6tgwu4RWW5YFc75Tq/6G9RmjgmEjzgkwzLzK1AVzJ0oTdPIrKSlBYrQ5hWPG+HeeaKtLp/IVOUt7k7VkwJ7Grx1/Xz1fSUc9F3edhuSYB94cDTNKXZ8N/dC10XfzXh/Jr283XbwuK5wYOpya1RM+0Oz7NgGsmgze6mndVIwObK/DT35adOPvUe3W5EULr2DSjEAJ1C5czgSeLelPWkRp+1yFQTvorAqLSaJxH5OZ88ty3aaXJSKJLlRHE1nAeeQsm1drU23gs9zZKnj4115F1Gb5SbpWzjY7tF8JxeFwPqpCAr/4YTwDbR2EJNn1oRpG/DiO6x8CMjx+ELYFGzKiIb1+lXytXijpG6Ctjw53S0Q1jmMLFVp55C1zMPOvNm6A7EcWhx6oHhQNwvXXhKq/NNl3ndCT/f61xEp35s798sbOjUZnR+5UhaZOnzgN1AMXnWtVV6D7/D2rvLxmiKtAVZyL1/cjWFnE4FkWbJ9JDqYODeeGFroE1sTxsH+ku2cDZ0kY8AvAPGBL1MQclgGRs3u8BU67cyzTBLQmN5HfBS3D07cTb67/eDOJ+zgjb0mWjZOWnhD5qopLsH5hfO9g1PO1qm9HtRNKeuvpeYu6F+4Y+Nh1/WmTtQuZ4aH9ZKczba0OMjfO11jfsqDLe31Kcugyf27rzfEJ7t6kxHhJDPkFFm9Huj0/WLD3rq8zPM3W06c5dc11dNmPBOn24bIEjTvOi7HS73YLLQSJ6kLgFJeR2zeOU5KLrS+GPpXwYNvUNY7wZ2+UPAC714nSDgxKllEfjkAhOOPJa1P5XVjBfR52e6QmdpuY2rdkreWKY3IfNcau9LIJR76WHu4U1GBA83Y3rUwVeg3g1dw3qYPsvqb+IZZlOHS5CLccqZRiIELaPymUfqo42bxms6Zy4blAtfbcJnJx8XnWOTfcMqu5wwKXqVgVJ7tr3a6HVhx9TcuaOpDnyRkUIlyb+Wzh9drlTZNHObvWkqBzxfUWrSvz5TLb+exg0M0wGxTVGTxQAhbW4och4EkBkivX/NXXOjE4J4FCsGxG6ATtfMGZjF6u1doRscg8+akZuI1FN0bW3+uw50562F7ZhJrdG+3utAqWnbwh4E7/iAULDa6N/6ycdxG4JGk4grxAG4ajsP7bNXxok4ZWtyZWC0c8u17exXDhoc+w3Api7UZYDk9cXkeKLnZ8NyV7rVYVHViUybM7aa2hpD3jiznWu2ON49bdY+lm+GkW6ZXYtr6Wss9Toa7N5NuyJhG8FrmjilTupVK5dd6c68HAyeCO+hwVMYskFA1gGsDdMNzpawbTdCXzO09begmdw2MXSvGxECB9nALS2qsOY/rcnp19uScDpnnCi3tbNy8pytjLhbPcs38qt+UgeVNN5o2FoU67PL7t6pvCkn1VnzZBoNt+4laWY5V2Uh+A/l7zH4UjY7pZ369MFdDn3k8m6M5Lq45erjy1+pfPaN3WkgOHzeHkZgIxpvG68rPC3uXrhagzE+51Um3rXJUvrpmXp/hH+M8Mwa3W5c0JN583ht0V6O1WF6Si77Qngv8nO7PvMWyf/G8EzZ99K4zDCewP7n19SkMf89GP//WcM/rwHdBm+ajW5P+vxGVV/Hc5oZW2RIW1P3dpPyu/UVTY3VXbb+mgvtwRscsPKvhK80wSZTgkxmmwvc3akn1QiXvYQ+mU0T96bBFB3KZ9k1fygXu/JN+ftSRmPTay5Vdhv9s6Wzl9XamhSt2NFb7zjL5lfq2fJL2rDwtex1vxyQFNKcouh7SQlMRhFZAh+4Qe/AdRfueune6wkwY7wghInSmtwPIgb0dy8HwITXT58APsPdOpty/iKHzAcw5pSN8ZNxHC8C1hmu4dk8MhR3whN2kiDanhX11G6bwdizPEh6YuBPkBO5hpO025NsUVe/sRncOGvVSTlwnPaeTdpHoStev5fflUI6tXnswnx63rRw5fyEsR+Xa9BzK+XPoTZeBDshq53m/rFtrGjdU/1BTj2BTkOMyyA1OtvJFVvuSx42nNdEG2NotRGhdwL6IuGW91l5vpwT/Wh1khyJN5g8M5+al3UhQMsgkjyHYe6E3Ssop+0R1xlYekDGWG7a1HGF9Y6r1MiQTa7EXjUUqW0X38v7FTFcybVGhJ0HZa5XhIfJpZx2N5l2Igq6raJvbYcr90OTsC7y2F1ywrc8q+KTi0/zRBsbXJW5g00qjP51PxEI4KFlTPnOYOCYIJ6yUO02pAnwLdabD8gYYcDvhB8EDEMxWcsK+gAAH1LcpysasqYoXneLGGXxQLNx0Ek/lexl+CoVp3JtoQneRX4P+g6+S0HZaItQdMfyrfD2nRtaifdl3XIUzeR+EqLZw0YGQYmAC1FcB+dZxADnKwuM91zl3NT/pYEZ5uf3bwD+olXP281p7Zd3eirN5LnhM+vpqU2cZAyV8WNVLhLMtTmklMEmanoz4pQ2dN7icjoiWcd/QGObQCfq0v1urBudsrZTYsx5A6uQC65h+CkNhN3FbPoEAGCYW3aIEaqf8kIuNzUzs+osF3cyIY3rMMylwnJzsxxayEzhTx+5fGoNdmxsTvBl/pyM6KFvAOzL3FFuGDot7g7/uBPWqUeXT99TUNz0sQCTPTYued9toG2zlrF4ZVDnVILiv7sZ3+TaBsryO4mVK9WFzZV3od8wt/V1PJcxJHTDihevlAKP3PiYG85S+rwf2WneJtlqZPZiNJ0bzSmGc9mDRgjdNBCT2p1OcLcNSjZKMj45cigNSIz2kmsItsl1MhdxGTXEdiBpTzLdchjB7fS/zQRY8Sy4kkYyyPmk8FpS45rFdT0LQQR2TQUYhCN1BxVUEQjD+K4alfp1IPGeeZ56P4Mx8Po5M4fwUpJACBG3ZFYu9RUSOvPPXGlwOyE/djpyDkiEI9GwqHW5D4UOj8E4B2NOBp3s60VigBSea3JtnXEOoV0jZrumCLrxfeFRccraW+TN46DXGXS7KgGA3xxjVTKqYZduUveLyr4D4F/EJbtP0/mi0ERPJuNCP2jBGUJrJfcYr3AbQq/0iJ57eVxf2eWxrcWUJjp/bf3SeJkfuC96PQBbD4LSWuo35w0s75MjHpxEdOrMyWfq+myUUBgr0Nv2R1p2mvXyejszKjTeXaoznDMax8r76MMZVzaw25iT58kei3LyXOc9M7Wz94vh0fic4dGii75p61COWJUfRqvXZBb9lwde1gf9QeIove7xzyX/wqoaHa/u9wGYZ8emw0n+i2Z4OXX8GRv3NAnR+cRobmO0rX4voHKkD9xlpCS5kDOmT1GY8ZVc+YOQ03WewzFCczQBsfSm8GYJ+2TNXxB+u5J/hBSepp2vzPNMWorfrn/v8/yeNELl58vtiMGXMw/nKZukWK+jZRB4llW4H+EPCP/EBnQNZTb6e5Ijh3Z4r9osHNNzTO7rZOu6rqT1+GIf60C107wjpbNJrRkigSL8Ccgn1EAyOSWyHcXhCl5K8+n0JpDzDdpOFjTNgqdn2t4yfTFPXfe4e3lPkM1e9dBvXBlh6Ea5v/JkvBXuE3pcLDA91nm/LiTJ5rXtKuf4Y1M+k0HZGmCG6MlAvvu8nOSW6YYr/kbDpjR6lROM4afbfV/HNBdrp7t4d1rGTwB+gc3gpBxOdGxtTk1ldjdf/iG3b7C6LJ4lT0mbJzVzqjt6TvVkPPXx3PD+lPLQ4K1UGBMdD72f7TWN2TK72I3ZNeySOM8Bgv55zUFkd3yT48YWuBjAaX2Q4SGCuDzUR5vUshoWKE9hacUl2eLdCjnRxSLIF4Ts7LLiPv2Z63YcTsek2iWbVZTMYNCmNGkVlspi6p3wk0AGBvBrSvyx0WBXbr3qqwruMNKPaPSF9HJVXi/LmKPyFV84tZUxc0masm7rBIDPAD7Uj2UWnuiGIWP+VBfvNAMOZTc8TH62ChMOC+mbrExNAkgW8JQN+tKzjU8z1r8cclLU+BGfQj66V4VftLgzjxX9MzjtHSkN0u+zIS2QF9TtfldMrN9znq2Hh12Xjm26DbApp5XNjVE9FyqPuJCZj8rI/z6xA7nyqibDglDeBMNXBUXj30BiRL8crmks2Xu+N7fzmzssobY6ldnqXd9jwLkWy3aCjfWzbnZri9S+6JiKWgFbI7d6Zuqjtac4+LkvZAl8sQlBi0gOOex2Gi+PEAuSnGrckUYuc/O7snyq+NSm867MrB977is9oBNQB3Y3xgyPWWdCsikSto1O/Pae9Hk2RI8+KX9/17CnS9Zvj7nFV/KTDUvKduk3oyrTpxe4Jos6Km2UAihRVad/T9rkuOuoQbc7Y3nZQO/qhVSQzEgb0EMXYQb+CuDfwK3NTWCqsTM2aFf+QoBeCQHnyWYmJ10zMY/pxq/ZrlFS3jegJ9B1pd1qGMY70/ClKXePi5GNMMzUnoaHnVQXnd22oRGYToiznSM1N0ZXmMuMOXmDNMFe6Sie33ab2TJqv4EI3br4vxu+xngOgIbTV2XcVjrKeLP+NbolzWMoZKPlRMZyfZCsDU2amDolGaQn0hEGUQZjah9PAobunpjMIL20SoodRrgA8ubSAWRDtwd2XPlmHF5T5IbnpZeevpg5/SquTGeXCE//flmoWsYG9m2erJfs8LMPWzgzAIb3esH3JWyclIK6OTH6cPHwoUzK1G3WguyKWELowMZTY5OEl57W1LBfa7xAouHLbp3Kxtmmkmo6DjVH00yEEb7CpG0x2mFpf77L3HCSD9V4GhtjCLf8CcWBxsb6r9ocBlEu/Uyd/rth24fDNSV243lh7BfZ2mxl+y0BBVuri1f2+Jzzaec+Bba0MaHTsVVYktvm+QZpwaP8E0b0O3Bcwmj1P+Aqz7ZZA21etjj/kvCF2X6E3zl0+8P3Gh7wnu8u2OZLU7D0V6XYktw2M80pW7h4kqwtzs7bfoTfK/wwoP9RwYVvmkHnCTfVtEXX0+8tyYO6EAzGNS42rStf0pPqD2UuXK1qOl/k0tnvAMSYM0F6umnoqTVzv02wO3strAtdVcdpCxAlvuddmTzlT98g7Mz/hqZduKe/5jduD9VwiFDEL2RYWR5MaMjxX4uCfMdbn9y4Kz3atioJtmjAbZ54nSf+cvyEiVf8wjeAGT8dBwa94JfPr7BdWOATv9w+yyTpVZ2cvhzAnDjGi+xgP0iMPhDa5FN+30OE1G2eYGLc1AXsK0688imncx0+BsY7yIlMM8aT0LU0tEzA/KFMRvL4MqM+pB5iLZcBttM0ugBkNl43uqvxfLaJrs/Se/zzE+K1vNSW+jHiyinylK4s9rXSnoLMAAAgAElEQVQFwid0rhjJI946SM5ylI/YLggiX7yJBROh04PIF2TkFPoE6FAPAwM4BO8DA+YPgXTRLvaYG35Sm83doS9w2RjQhTquJ9BXw9aKFG8DpB2+JmTpHYa8yDUi0QDAJzCGXEdAuoCUTycTat9RLIDKBg9yF4Srp4sN/AQ9xZ6Z1ia9MyEuaGxc6ytC6geG90vce+wDC8XYyRknO2MIbZ4TfdOrRPnmmxPAO1TfpFIfT3XZjptGH7LI5yRv9JShaHCiRstCNaLNDOBk8Iu4+SOWk1LeRjOAM8TLxyl56RgYRmP6MwExrLliP/QUeow7B36kofA5QN4gNAo32vHVqIb3zGOV73DBSc+zqyvVWd7zDwXutuS7o9Es+0zeJLpSnGQDSF/eJjcmbIA3OPKxsx2PLTTB6aTdCjr5u41d4eM2QqwtLgZz/vUF+w7YhScEAIC/sZxEt3DeXgEM4FAeZ1cQMBquUx154WpHeyV15udVZKWiUjBeYcjs/TU9/lQQTR6/pN6nVtmRanhtp9KPKNzjRHNxadVg03HSjOhCfWq0yg079PtQ+lJ5Ugw3yhuDFwAnbon+SDcjabvUswBpw3xD4XJXAal6w3XvG+J7aaLCzhk2K28xNLWxZlS+sXJGyrg/mGGu94ErE3FfSO4gZZVpTcab16+VgV8ejLO+xQR3H+NW7pP1t8EW9JcZNW/6GbuBuueB/UPvP9o+OqlUegiqMINxHXKWqXV+33Sphtvgt0m3yHTtZbjEWuFM6XxDDKmBBdK3Lq20QruXnG3MZ1i0jdljtrAZM/iL/CKQXEkzDEfxF0ZVF2gBM6mx1IzvCrywErYkmENMpXHC2UoPXcU8MVkfTAKITzgHVR3XDFXGKlnnX6xzLIEh6YoO7UvCIIIUjW0qrOb2He9UsXq1M/aZjrWMXE3pncSRuBnRNwPKDYZW1bG52uTeQFSBTwCIIq9xxy4X43vn1qFJeAlkeA6xPVhcXtOYGBPgwTjJezSMoyxut0/i2KRBDLm+5UAojgy/Sgmc5HCWkAGV8zoeIBU8sdayshMfjilNtrrJRtV8bjhq41xABiPpDxfSpUOwT8m51quwno4OfQr7PQap1qZ+pARcvpl3LR818zJjFOueouDj2osm2yiE0ik2XR0pawwvxWnaCC5gGg4qLrLBfd/49YPw0+xdgcOo3dh9oQWOk+oT1j6DkcPIa+2HGMItj5c7U3pLa2VYnmV9KsEPOL/duznmOrad7z/CTa3nqSTGi5PYuHu3dvmtOoL9G6fB4biVZ44/5Rn39J3t9Qa8+Va+t9/UVuaIr5CbQNsZzws3TXEVbl5esszYMbQeTwkvOTrJOxN2LTyjB/5x4Sli/RGeDivtfVkZeL5rrsSfyR0j0X+Ern6wIdJ0yXOXjGJtZs4Zl8JNOYXunuW+rwH4TxF+GNB78EUym7R9C8Zxt0J8G+b0RDWFgZlSYX6rm1YGwHFgB2HVGEDmFtkX3oagaQDACHsjSCdmtjh1BzbTpu4xGk/X4u+h7lsz12e6aj/fuRsXOkxWAmN28eyGdJ+fbdN/JY11Y85TAO0zMCC7g+sxyphB6DPPjo/0XP5ywUHDRalWZZHsJIR/SrQ/U5lWni/gZ8S2duW8+d1goVxuwJR1BDOeb3fM2kSq5a+lPBme0jgM7pTHjegKcR+zOY3XQ9HAB2G/KLiHldJDTEoI5h63TJG8nEoLBDsfYwuIYnQ8if2USyognhnPD8ilPdLPj3Kb6PHrCcucR5e4BoFP48HssioWwFLGvEDbj/2lk+gPSenjM7SzWwT6nUKTIXGKP4+lkkHxdpRJ9TK8Cm5YDcGafpgc/aSfVd7NF4B+lkXqEyILT9bFO6WBoTfwLvwlQWHEYO2DwWPjM63e3Bjz0AVHEhrJ1xIw6Un7AeAAiEjvrIwFMGJWN5xpsUhPn5OfSHcgOrYc83mxsDRpKuxXh4RyO58JPWkvw33awsdG/tmHnGYzMHxNIbkQf1Y+3pXN99p9Bfedaxdg7Cpnunr+0rCd9T2fhcSdOwD8BQjD1FWbtgufDX+9y0a4/6y5Y4xFFtKoNubQ+DZN+LI56xi7R7dXn3YLWADyYn0UcKFc+qaIyv8us7U42ibaCZ9eSNJgTK488DyztOqiWQvf3bbDxl7+do/2pMB9Cj2zn44Fu+nsCS8PUfqP8E1DVpLfmo+AZI75isrvJ9mK7ztBjBi7cfJcIUL2G2pjJ12AgH9HwL9yR2AY1mXmv3LEojs7S5WNeS/HiQHCoSdoxpB5vkihqXu+NM4M7QQ36hMR7Gpx4fWKPJ2rhZrKroMYfk2TE88ahnPVcWzORyTeu2jAzrGb+/toIDseAaOR2vgrbvh9hKbPduDfFKJl/i+lT+nR5GOmqMPyp/mKiAFGXNamGztpyn3n5sZb5y2TOVy4T5Yr15QeZFHZdvfqnddpc7AZQ80TT8x/FFrb2MXkNnbzKvDVvJoBvKZGvyQam+m3q3d9gsFw+l/DXOOp63yukPbCU5JW+cUBFZtabMMO7ieC005nVzZm07ugQjeC29ekh7O7yJ+JDyYebHmm8ba4+/yeZwdu+K9pucBaToJjxZewTUtvp8XrnemstGGbeziVnY3ugjfyBFZ2Kr3W/2T3J0Arb1v6SCKXa+uSbHhEBl7+Fwy4t3G1viHB5MoTCFqKUnlU6KLx3UcGdKBAv8rWR7BYp38/kmcb+uD+asb6I/wIbwx/JM29dXjuNn5TzD9Vu4lzqx5Y7QrJ225eB/wRftdQDOh9mrVKrvvC4Y8Ni4bZ4jfKpbXPfxl1IZSSYKBtEdvwbLpHwQxvWlY+lPRYq+jaUlIC3Ainv9PcaJuLbMAvPQ2tDmAGnyf4PKPucYBowkhJdqulSaveQ4b4mtDS+4KiDy6b1aaxhhNf9Kz/9jXIZ7tkUbSLsnRHn7m3gka7l0afpY/st0/2WiVsMKOlu6z8jYFiKCD3Dy9k2Beqrhb2X8YBGlNtfuR317K53FJj9NDq/zTeAQB+uZ1KpwLQOU9RcF9vaFv7BVQmgCfOOcHEeEcy3T/5BM+Jn95/wMkTr6+f9TQ6pcuoUh/4KVELeazAle3FSO6zJOUps+Mju4SaMnF0xV0WEbi0KVdairmI2PX7E7TQ2Qe1ZxsEC70niqA161WoU1WA/ZTBUWJlwYRRTmDrSpws67TdxY43UkNnhiSdYLdikO5NTAvp3gCf089CE07nBF/I2QWJ1sUPH7c7t+8bo1imPyJgkhjR54kwoh8Qa+1wQ6gcS1L6yxZ5l3GKT56tzgtBVl6tLFX3ruhzxcRaB+/4RaWly9/cHt3hvzUadkTbLoVGq46qDG7cm4Iy+E1+lhIY4FMXggg8CHTKfZ+DCDRO0HxxtcJdSjouspwzWrExsKKuoHMCfBCmkYIemWI/MqVXtRyqtB8EmlPFP6vMlrFg4ofTKVVnykhgOegJvi1/SPB24dFlX8nTaLHUmXHUykhxeyPho7Ch0xbKPdy+wSGEsddKdFXCpq4OfxXuyxAMAV3HhEYso/pC/Sg8dQfi48iLNDGy7p04/hsATMZfBtUhpTlWA7ERKKMqQGwDK8Vdy6ItmSoAfjKGUl+6bLexLpE31hOImudMUyw7gW57yGcBrg7i0wFil4Aj6WEJJYGDxsske+JZeVzZpcJ2FQ4oeZFSuaa+mX0jV5OVFXExtvg0Y0fw3PS1NJXSMXx3opPGEJlMyLyk0Lf1PbBVygcXUCz9jnJpiKykCTBPTB7qvcbyEHDq3cpQHHE2JqUT7AUvLTxaNG1jchFZW1a0KdPp4H59tsXqIvsliDvWvcQsxtv7lWw4oL5zGEse4CdkJK2ALjyRF+A7G7GybMxmXNlnd2NuEY3h2vdwsUu+eVjypUZdkDMBq5qR67DvNlwYxXuE1ZvbPAH8p3c/A8T4H7dfAZZbxn9+eR8VMPCTKb4EfOITg4b8gfBuqBcbTHwGuVpMdmWWsw3ZME00cSgWxaU3l5VCVwO8maxjbgbrILLlhdLNlpb1xLIZ25iGPKv88PvnKW3U6joDEVSBKnKRz8PrIuUBILmnG5+Ta2A/fJEFkdFvl2P9OpvdeOGILnoBI01MYmPiIvT3gRwUSiAFD9YvKTb5rSB1s1/gQdj7SGmd9fbnMTAnA4ODTxJAmDLlP6MO+/O7pB2KdOgDnN5P2MaK2P7plIehMm0izfFSa3K7OeXLqNxzyRhPlZcuzGcpIdJSS7GLz+XdL7cwRds1kOQRbfMEb3W5uwQlrnywQdsv/IejVRx1+fjU9Q+mNLcAw3QE62+2dZMMp/Yra5NYKyUzjFPm6maUjjutHK/GNwoK0tg3uBRfVc7NYuy2uqBtb9dlK2rYT4fP0k7No2lYUcZqaK82WRnXxuMNv5bf6ik8bEcieX6ua1VU8FDb1JB0J6ql383XvK5Y8yKHHTBKWVlVGzMdwVs6BfqGCHgd0o9mpiLd+Jlptq7nXVTOOb21ewvKRbjSzO60tz8bDPeUNQDlYIsx3UwLpld5x4hMs/Foue7xmfqkGwQ3WZ4LOwJu9e7KdXhW/lm/34HrLm13rfftjbuATCNp37Ynq9n1xv0Mqf+frYGBy77ZVrsZM8v1SOlVi+41XLHstbon2t7sTM9sjv5NA0E3nZocq16PMsuOjerANXNYX5fwBzf5uwj3cPAEfSUDeggCBtLic2cSnZk8O/DeAuHXlHMFzwVDzvy2DGqK5mnWekLtDuyZwVzqud3dluFZJqI5uIsvXbiXaeQZxjgvSl1TAbCJsHSoGh0x24Czug69p/UMHBCD6AgXa5OBc2Ker+DbZ11sIxAO0BjA7QYeB5g+A7cBjBfgeME4DtA4hFmNATHwpPtmC3PlEOTdWGTwMqJvvEdsBzrSqd+WfdmxeyfkE4y5alZGe0ViF/F+CpJ1lYDypNoW42LnNGBqZBAn04FZJo2RejEMaHurrH8g7O+hhgBe6BWBHIO97eoHsyvIZAZy/Q/nDbhNcSdsrs4nY+KUCXmKs5VVZgiN+szLdikrjYcWHHohbBHFRoMsVIg7Oeide1rHPLX8KfCx0qx3PlBWtXasMbVdaPEM3BMHfXr/cgLb3lnRKh9iTcNHNOpDe+4A6VipgS6ee357zPTUxuMuHw2Qu9LTnXVZBVeYYpmDkHfg5fr9jkRdjZMTJuz80HBruSbFHwDZGHGeoOMF4yCMFwIdB45BZV4Ri5PC09h5ZppsKB7k4AS3PtGWqCJk99/GRM6M/Bm1VOPHQEyE49RkXTAyHEMNm4e65CUdCgSmKaeGbbMTs96XM0LW+cRI+dOWDvZykzZvXOCz+EYgm6i1vicSx+qLorDyRUBPqTxST8oRfzGWEKybt1NGBA9H/PbJoq8cf4Id92YeAB8Qp6QmH1+AwWC8S7WZrBqpxsQbSjNTnEUeBJwiY5kIc4juQEPH4Ai88CDMn2KTCn9K8pMAYOqpefjpGiYI7zY8U5YNWfDqP4Ze0zZv8T1RvozhiUqHdRVpW42vPbOm6zqODR0zYPcOLXyNUXh8D3nStYun5NLXEnFKW/ptW0EHag2PZPmaoZTHVLCeOUpUzek51+uyZKMPeKCivi1tclrV8mzVMVlb/qaM7y/l/lmgHEzKRWe57zpkCE81bSb4H+Bv95kTmzG5rUZej7PyN2KXJoCZr/jomOdo08J25XRn0DG5oVtQGHxDbu8IWWUFkl3rofKAhpzQNM9RNlBC8mg/m7v/BJcbCk3PZJRrQLIoEN18NvliYy21221I2i6lt8HiJcOXnpW4Zi7P+0T5JlFCsXVcJDb6J4PQF1QUr3ykzYvSebJArpvVcPNNnjSNICdoKq/V8uzeU69rw8ecGjPrzGyvswLv1w2RlvF6n5VFsr3kn1d5L8tM8PiGxr0MfsS9erOFFBhloxIFmVV+Y/U2OcBI8zeFy8W4M4qEN9O/Ks83vcLYWMUxhTE9ZdptehcVNt9qLpFSrlJm5h+ZfTZmncEv/ONUPCR95aADpxp7iAk3ljbezFZMaZ+v/p5eP+H9eKebeYaqEsMp6MWvgpB7z4lIb4vJY0CN7Dpe2SoqHanjWHHjudX9u7kEN1xM9R5F6pp9MjCUXngSeEzlGwPgE0wHzIgyTdfmytImpI48lbZT+ENP3E+21RkGYSw3+BCZ5kaSNrWPdGLDGJh0glymmvwMWs0rHVa8bYyUudbzoaclYhDdHGjzyuUshlKtTfhKm180vp5M97vmYe7y5XKsOQDwFLzzxOSJQdBNFZJz8ok5GXMyzjlxql530/QwYySdAE4QieV9YEIoboq8Q/SHqaxmzGQwcMRGeBawgt68Iw3PSIM9y0frKtYWGH9SfOS7Wk7Lzm2VL8l+JLkDjo2v71jlOgMn/BT9jsl7P3C6jiy7Ny/CpjQ40i5rdNrQybD1oHyXOisCWVuw8niJO0Gl7Tkl+TvnRuiPGZk5XN26iJHxJHsk2OWDlDGQuIzX00DzeEqoQkkvni3I79ur2W28GP34eqFjLrzCsVGLn6Y3BMpvXBvCpQ43ultdXhnylF7C9OGnKt/UAypsBSX+a23kKNdgKrhoDUQYWANA4wSBZcr5sOKflqckL4z/Gbk7bCT0xwUc9VqZBa0TAioHTXWqcV9se5zWbLi0K4G2aUET8n1MWfZS7lWZOSIpKpf194+Z/jP8XOOKUrGWxYkWI511YtHQlvFwN9Am0cNMlu7ZhFf5n6i3Eyinh84Wd/xz01+rrZNcfxR2mw4YXm0Q+ILwFLrygkVuKxTONQOWTmQ8hjmN3Rqx1tM5yDJm05NvuNqujVx05jc1mvd27Mp2YRUsQhVO4cpT3seBeYzYZHZamQNEB4xf6X0gUaUpn8bI7oaE/+/du8VvHrS/Mi/e8uNKkUAcG06JVIzeMxQ+JNBnwrck3l7uBh5q33YIMkFrs91EnNTyXLGUNfKekNoNbIWREROXXC8NMJsWnl07mfHc9sDOYCz+Z+m5/ZmRiELBH4dMi9kUUj2pMk/w/CzZDrlzlzBkh7eesAMIOMQQefIBenmR3eg4gGPoVawcikRBAVW0mNtY+5x9v6l26ApROr0bQl7KDJZ2j+5q3bEooZO63BmU8twvEQXPDYS88GGG9DiVYPDnLRVVMLuI80Xjtfal0h6eZrZX8QG3rybbWi8DNOXPvjEzPn6+4QDjJ7WT/93vy2S8zs/4+cMHVdxkd/kvrx8lu51MP2QyLifQZ0IQtzE3QTRwQOaxonAPvBsveK+u3QYT3o13eH03gNfPwOsE8DPAv2i/jIRBrkMH628oQBxtIJZ72f8M4G/N/Yp3JLdCULotpl5Z3+npjT4JsWU5JfDV+6wc7RSTfiIif+u/KcgMJJVan7jkjT8/4VYL8z8Gkr5uPFK/F2OwbDA6yTYaHcC8iRGQJsaQ5b7D8MDWF3ryDAAdaqQnc+d6JpBiwUxAS6diwCh3CeqplK061VHedoAukyxOONNvYvzQOwFtl4HJ7ZNiBfzUNhKpXyBK6ZuToD4pupSXazPY7yNMGVyGWjmNf/6MSPdLr2SV5bQ8sf4/kY7+oOAq74JClhjBnTtcfYRsm296giWwPnJatpMuGdYJ2bIzZeHSTkimdoUbyopPn9QbA3A9xTbTadxJuhFDYdFjaEwJJ+YwAAdO+hDwHbLc7fRtniDSPc/WDqnvQDn91HCdmZWznnw9aDZAEqc71SkWQjqPQ8rv/JPbqZjM58JE4cNoZ5iP5Gtd3g/Jm8P6MclzLUiZCne6TzDVcqiuUW8Cuy6xocp76kjfmNRKhOlVu3KKPBqFz90LW5eZbGMvwVMsTlDxk/Cs32WhlEtcGYMmF2wM5jKpda7LjAvY26+BmnFBja+5YxKT1iyGCbEZcJCOwm35vQeUNt0rCYVqM0qPCWQZbelsU/SjzWlYSDFIYCosxhvY8UZlQs1yx7HzUv2xU+oDKDLjSDgyiwWLVHaOSySb2gCwXZWSx3jsMBDcsRi6vEuJfMPYVQ+aSSk4fBvn9sPKkAjwyQ8FnDTeAcxydZVd2H6eYD4kmznKgYxxGnqd1U3mIpV2GrSJ93QaMxrZyR0n+TaeO99iAvYl7MpccShdcTU6Wrmui/VS0xgFCq3ch2xlQHFKJMavL0BxpNuDnEwRBo+xAzV02Ryq7pEtL2r01uc055ou9wEarBs+UmtsbCVJ5CMi64hmvXY1QunYVA1apUZGiXnf8bgk06z8G0UEE3DTuddn9UpBYHw6Py3lk87F/88Pf8JJjM/qGpnUTTrjBsYpRiYKA/rQMiNtjEeTzqbv2HtukuFqAD4tmczAJAyxh2OYrDD8aHtluidzPlmQtA1uoofZtp7gTnL/9iDCwKH3cEv7hpfLkPu4zRmPdXYjHukQ7TOjWYqayOiCMTHc4GsnI8NwneQZ4loJ05OCC1aZXA2TlVfUcZ22IvkwNR5MidcMrTuu5SMMgF4APtrSjfFn0iJEt9AtW9rPEydOEJ9ItUl/8InJN0wW/MtwFXqbPHHC1rgIyJ4OaECOGsQYYnMXr5iSsWkeDRh5479veFI9x+9Tdx5TRnXCqg22GkI9uM/t7DS1k4m+S750GMZQq7qD15/5Plt/VkN8KhzBzC5g6fFssHCOkFJTOf7u5cgGgEyLE2TiP2CEmpdLvYn7cs7vXRb798y7hPN/bmLfNskF+LltXh7MUZ2Zu0MPIYOD0zonUPpgsSVzegbpfgs70OHEAfeI0WBzbGtBsvnDupBaRRV/DmEUgslnANn6uciNTCOpfV6e93F89MMyltj5kuXp3GFLfimFnVjPnCHgZhXGRnO+XFj63cLwUq80moLL2XDkHdnBND4YdOLN39aRCeQKiB5a21M9CyHfK3I35zU6DIFS4WOra9xBHJRXbbcErQnvwbqEK3x8u5BL44LeNpgWUHhNk1/ygCrd1PUb6HKc6qGNL5dR86jpDcY324h3Ge62fQPQZZ2P+nL9HjV0fksFVD+otAsdxD4eStovpK1Fbq067CZhiuEYagfJ+h2R83ji4RoXIR+yYtjlSZ6/yGmLxOb9ov/+0cLXNCHzuKt1xlJN/fjicZ2L9Ml5K+Z/GeQDeKYtgpK3tPn3wE/W2Lgw374eKaFzwqQcXEv0lFcmKHJyBQCGKi0MJltQ10nHZDldzMPhsftTy+k+U9SsjrsoS0oKxSmngHqkZAn/NrtampfrW+s21JrbPSS4g1s569uGgGKgrIxr/rImdCVwAbh/y8L0oz/zLlDRNzmh62vp0DTTXXxmF2u6mHTZJNho1nZGp4ZzNtyEgLBT6OwrV5nRdWUQ2BORKtikCw6FxyltlpPGnEDLdaTXu78cd5XozMLXJP5EwC+1u8tvj48W1GbuFGKkb3dnCvmjGcvv0AlR/b1OCKPrMMvkU6b6jx8rjzwAdLd9HreRx6DOxmUyt+wUpwp4zmSwIvV8MZ0tzDmB203hNDp4gRjHySepSOPe0aY/fkq+4NmMpQlHVLvHKfRi9qiUguWEqtEnOA17ezdYCKBD6exUXitxhiMAwNCNT+p6UnA5A6gdO2vw/mNK/3vyTVNwPqn6RFFGz3mCGat5gl+qNMETcqLmFN4w+cRJv6byrJgNEKON68kA3xKtEoCfBL6TRCR+IAcRr5yOFkqn/h/jJy/uv7z7m8S/Kr0YfTPpBl/teW3T/uxiRlB67iqGrcMyqXcEFo10aD3E0ONxuNt3F2PpYdjybWp9+3x4mPyZBG+p8ypt5g/lJFEKaQC/DXW/1ajfc5S/Q+9Fv5uy9xml9reM9SE+X/C85fsia5Oekq1rVDKBmWpZ+5co9QkGa7qSSdm1UXejrj8auyJOpEPlc8VCJyauCYndKG8asyfXhdfQCxH0OkyXGCD1DhL3k3evF5mnSXmxbZY9zlN4naZZtOL8OY8fRYwZWousr891o+CXMKd74VuXtw+xyeX3qe/bhtRvTxL/oztytdQ1zhVTxB7iJ9jkDrOyFJaMdsjq8DM0RSibX1V++x3Rfe6jeq78qCF/hwPdnCknulmn+Cf+dnsV19gwHfzmQ2SQGqLJTMIyvzOzJEEM4EMbaaroRPZ3Ntsohp8yZ1LT/WC1ecizMe7pcMM9jU2CGN6JxbDu8w7oYQF5YQKmbYQgwZEZ2Qemnk4fmKSbdXxvvG2GoEoC2pdpey28A1ylzwo2Kx67ANOUw5op2CLLU8KVIt+lJ6W81NI2Yi5Wcq52ldNioyxZMxsgJt1kYkZ0Es8ioEQP+keiNgvXZ4DE6MeTMId4IJjabiZ1GIIXvWFITqAPHHIaXcWFHOJKcokIpJvxJ7P3W/HM4zs7a88Jqjl9yrLrAv327M6eMk4NrlTHkb/p9zMh2xlNDW7EIo7u8zKowlngS/R4GULH4Zl5TC6yylq2NlArJ/1WyY32xot6IcMx9RMrndnBk+JJNNV9Z32oG76DVGx0CX2Ib4MVS8I2KOy3yjfMsGG+EHyPr/Hc1BY7WT4Vz24UScbqalu77qsr8VMOI6luVr4XXFedjlLyFZNCW9t6G5hPiEZ4v+tztfmyk6J8s83l3BH0XL3aEdEPO8CfGR//oKGtT/jzoyZved0fhZ8/sF++VdXcfr+bkGSJhz6arnnrdxso6z3fSdBNp6ajcB+ang5JP/zO2vBPFF66Icnfv+XujH+IsGMAefLQJhJPl5nyPC2DI58pCWFw7spoKq8oi73MTaYnlI7ILvlpDNCUYyauJHp+TvOzKQaCoRNuyqB1WLLApgd0ljlKpltV2u1+V8NXSsc2gejGQH/NymWfEEmZlwaDO/hjrYsouwNvyjHnvtb0pZCstie11fCu0V5mpgWC3lWfaCiHju+tUNnEuQJu7u84afkceZjB+DvAf0KAO/ACxkc+ZVesujd/vU28mDtuvROc5wl8Fr+/H95/AGPiNtNp/lTXTz+FMQgAPv76KzAGPnz4ACLCjafuiCYx2ujY+pdKOP0AACAASURBVPz5o5waevFZJ4TGdRNIanR4QWioKSiSWZjtZMbJcsL2LzoQ/kTipzaP3ZgVXGI97hVSGt9urOhAbSbrQI2PqWn6fDkNa6/3xgSFBy1PRvWPdn+24aRqEL7gPqSCwIedbJGFNFYaE5fK4r7a6fScmLczaHEcIHehSBDXYG1C4W4wEyPL47G07QJdbXI6aE0fZ5GSy/Z00gmg5N6tK0+k2QZwaLz5u/TFGT1hPMz14HSjhNxPR6ieTTbtKNVmerxqNOKk+QTw8zt9ucWpc8aGD+VyevhCpdH60Cbd/o7UN+Wfjf3RFNz0l2jA+Twd8uyKcNpExXZoXNxU6h0XRTYx6oK+eETgOOVppx/zAGMC+FV5/gf4KYUSWEW1jon6BQSORSgiMbiPkD/ltE0fJ/5ossDiM6/TX1s5nYneSOmaCOKnEs27SAZ2590hyZ2tnsH12WF6RMe70Hgr2BegKmR8UUznxV9I00tofWKsxOXxpvo8BnYiIm9AJKOBqjPdBeWqaUYfj4rhdkKnbIhsTkApuVFF76V9RXf16pRzt8udkd0cijeQOPMW5ZOO00KBJvfbhmXX+D1xGo8FvtZZlONpwf8yMsqp/DD/7Dqus0rnAwschksOVmlzygx+MZ4DMQ8RfATOAHcZq3CKR6Pk4aMsjveOS25LMy7KOBAebGBHaZtyk9x2XuUbApWDuq6NJ8K3GvdfWPwjFvcwknfksi9u2ZRI7T0KcMxvecxu2zLXx7bav5STDNKuTj+z7sFwoyrbd+YqhquUNKqteZDK8HSkBkH57rePFLctOxmV8MZQwyWsUTqeLtInh1jI4ySVL02UwTwZuM0TN55i52OOvZekmwNZTE9MwCQ1WOtq4FTYBpEYRYni1CdBja11xJPhDzGfmADGFKPU0FvhMsfn1O8z8x8W3WeeHBv7BTLInd5qjGcxuIe+HWxtUJx48tPxidwMw93heXiFYOcztvk8eB0DbKf6U38l/hL9Z5JiHSPruKGgo8k5OvG0/BcUHDSlm8G86AxH2iiWxpb1nZ1qZ8A3JohnuJcwoo+Q9VP/JZMN6uVwDrltTTxwDaWn6f06dBMx0YBNcwZDDOak61LMcmO66s/mR6y4nk6yyDaluKiz+UMejxmleTyVwO039aUfErD4TSiWxEzvqWR3+2fws3odM8ZlYCd6a3M+L9Gbx8GrWCi+njwPDyFu+LVf6lgIHhN6U1A6PrjCGuFTnDCf7+OUOX9Uj5tsOGenUy+WWsPSe5Bx4sNt+puc4EP8HmSI45nB7nZXMep8lZVvzljoi/5iw5n8Z/NCoBuOUV8sXVnDZe92b27K5pvD3ZJf6SzrhaKb2aarugF0ydXocosgJM6S8M31n4Df0yTvD95Mw08znl+EPYeMOj1nH9MBEZwX7Nq6qW//KfFVwl2YS56O0+3vPUXucRXyawcqrGB9H8cdljQftINX2n0C1DTj+/pwuT5qn9v3J2FEbxeAp/thSb7D4TP0scm1NGfTvmfCTq93uu36tP3sToN/WTtKCSYzlk2FDdZH+C+Hn+h5XPyWIatdsCsrYh65ZWAaRz5f+A7a8U8W9AR6YuhASN27/OBaJP3jhswUcuN7/B/cblMmbPC7ImXyPxbe91dtymSNMeOyYC8HKV92oQM5uYgTROpCwu6pBsNP2tlsfE5gnHLn7lAH2pnxNQPxIv8vFmbNzV5XEl0dK9k4fc8TlYS7ZJzinWK0GJuX4nulF3yMwHb/sGvVtov3vuIHuMfdZYpb5nrWVqKET77E5ZvCLwD+hMobKNeKUDqyAV0VXJp5wwADtxv4GDWvuluPd65lWV2p7JqmB1ZCVjpludeaR5I8YDh2yTwmMKJ/7C7se2FTtyv8CXZ7nPklt2ctwqa4W0Ut42GbM+NsQwNL1BMn0fP3JVmO0CURSrg2w3h/HwOgQ381ftj78Ltec+uizeZi+oxWp4vsYqyE0nSeN/AN8Csf6AVjsCy8HAq3s/8Es098OD23yT4Z37w/5miPQF9sahH+SylO+LDhwNA6QGMC89AusCn/Ed3LkUUKMBfvhldto68I7xvQ18K3wfezGM18j0qe8aaunEtYZKirAhu9QGmFjgM0Ek0PApuMHENdNI3YzPMUmHqKzK+7QIyvxc0dALxqX+sYsmNLsPFghFDbsZ24KuGxSyKLtLo7rAD418jODOBDKguyl+NVx+oBwNw501DdIrmm35INb/4SwNYlvRlpPIUIz/rAEzTKjHUhjmtlC0z92ZnMJu+dcJluwzeWkOrJi7WZBLJysSDviwB7nNdomUsE/gIU3u9Pi15GJX49UJWNFxcAPDiFlVFkaapqYgSVGGMpqtPDvbAqA2Fr1LoXmLNeAxR5npVFmIyaIncJssHM2IPpR0NPvOlJUj8Ri+TEYrvQJPCRnaJTTzx5szxD+WrS3yy9ueYceAc3Tiv4MuQIULfuDOUVsMUGvYc88UIm8W4hcxbDm9UT+HRR6+0hGH/kkfiidnMYUKI+77UX3eXkbuw7jn6HkNnLvQHI2E8RKsE/V1cPV/mN1T5Z/PPBjCmt8AftENVnk8F0ou3mPq+xNuZCMfIrCknropDCMTS6vCPFlclGhl3Stmu7g5JlX+ZDtTKl41Tt0ufy4V/e/VlRQPi/Pv2CP70XHeJQGMnwoOEEY045GUoURqehG3YmBT4YSAdqxdhuxmsxZseVDOzlAOAJ4wLCrwxjA8TqpJsn6JBrFeYwGS8FmfFfqtX7vCnKP5ljSmJusQmY5wGwmhaYQTpfSIffHY96dsD/BswDX9IduF7PYZ4CGDofLZ0ovzSFz18P8R3Bj+13cwLa+Zi7kvd0Bp8ZREiuxgID6iHEy/Exo60mOW3OuhndDI0HEd7R6bixE+lzyn3N55yY/IKDJ8acAN2AMzZW0hBvADxETogBffiU0a8MBTBOxhhDPSOceD1Z2z5Bc+CkkFGM6KNYOwr8b8efd3zCE1BoLnSDLLszhi8VtyWed8/GhvLcjalUXXmX/VM5UPYkKGnyRn1SeZr5UOgkZhDuVRoueNvuB8FumfrEKGcaMr4ZAM16qEQfKfHoXPvO8BB7S9ZenlpA/uLLMfbHGQ8pjnlZ6mGrRdfJAkdxQj1V7m3hTRur3Njjh43Zcspj3w0z1sdsbtmpGLxrWo9oNLfCsxXBHY6Wr5wKz8UpPS4nz1PfNYD3ITpsU0YLyxyRlqL7lTXbuf3SRxnejZ5RhhjFS39foEGB5U1Bu5L6gOmF74p+urpnlctvGLa4/w0q2fXlVX2/CQx/bKC0wfANubCXf1eTk/zbn99SrY3n7yPIkrNdIToWNSEkK0f632Qu9SM8Ci+hs4VAqDM9TZnp+lsY5L7bkBpsqyWmNLNOzC+l7JUwe4Yh3AepqC+5WPIEyExlNQZXRcoVeDYj+rSZaloXTjuK3Rg2QMcBnDcpc6oRanAYvOxOaoa8jxO2V2MBvxjV5R9XOvoChKttQZec/i3lZP5qmuOW1ya63+GLe5p0EmDLsa6UijyNNkUtI5ujGoqTbK7EIN88ZvegResFdXofEMmufwejjdduJHp4Ij23rWv/+cEVwbQ7m+0dymOUMG4n/nr8GZ/dSCJSYM4bfjreh0CbZiAVZHz69BGYjHfv38mkWw1QN616Tr0v05owJ0BmBGfMqSeNdcI9mcXt3+2E2RnVVzFi0rijD5uEFEJsfS84YIaQzZ/J8YG/W76Epx2+PVmrgC9+LdAuvk4d77Kwbegf8zil9F0XXsz47MZyCh5Byl/p0N2tkpZAwEGyuWLo5hu9e7FUwQDr3cys/WXLTjzD0ZrRAqmMY5aTQnx7hW+sGIzzUDqgd+4xA0PrTfbzmNbartsNTpiSbcpGqio7aeLJZXKyMbn7hqRQlCQv2epd4BocK3i6KAQmsBkxSBadaAoxygnjwye+TNYeO7lgDb4j7xIry8YRAGE4X0ThBYF93FdxHZpsNfrYBU5p0PFumwcSLee/XbWmL2XFm41+B2gcGOMQOXkcslg4BiYNtWELbdMYIDpAGGmnaWpH4cNBN3Kttr0rb3RrlbU5NYA/iayZA+D3Xp7Zpm5Om8B/OP4MgPHfz/8W+D3Yjk8E/Xt/U8iT1n8BI1/IFON7rCviGnfeVB9BrGbd3SC1k+3Rpm1wkqAoPi+Q3CXGPDZMPluxtV4TFaQ8ZeHjF7rOZbWed8fXU1zHx53muB7htHcPmKp81m7h1s39OxYeDgL+6tkF97443xpDBmMrdIHW5G1mCV6nUeUFPfYvio/ax3AYfLE2G89Nh0tDVL5kT1IVPtfvXaRkxroLO/md5AF1mtBWm2cSsQpt+Nw1r19YeN9A2Z9TOipgcLvpR/mLjTs/unUmetQjpoPB45A5i7ZBpjKjeuj1ppHK/SknGycg9x9n3UrGQHgn7pt7AyfROq2/oErgFFkqte887XZ9e+1h3jytIU5k3Eu0/7jkWcap0embhHLKnnj/VcWMZGS6AsxgMLmTcJ7GdK2jwU1dt2p1XMoWg0sePFWfT5UGoNKhxk39YAvsQU319lQ2cHQNxs5fi/gwPUWN6G4RKVDHSWzrAmu/3fWc2m/1EeAb8yrJaF222UT5898/E/7j+/cAiTvtT5hpKhOGIDecQ92n61gbAE4tK580dxam42ZyXKljmrS5QzZjvOlOagoV4/mMeiYYeCEM4zHsZ8Yd+2bo9z4wXs1U2CQBYtxXWEn18LgyN3Dt3mi0zXYCm4obdK3LOsHKBWnbJ4Ya9i+cwyek5dCknDdsxw/6JRbU/gxT6URUqWU2mKj2pcJIakiXTekEuw8alIznTBg8wMcED/HONHli8AnMCZ4DjNdwr07iecwkN+l8S3RwxjEC1wN6rQAmDhL9dzLr2oGuE9AMuG0Q2TjUwWLGUMOKumGMd2T+Y/3KtYtG4mODksyzX/LsCRj/7RyrTvPJ2SUXWLQts+e2ko0xcbTB3lObMZUS2UZKAOGcWieeDMR8GrJhQfBHwfuhFGNo/PhaWeyHxH8/aKF2SrzrEZCxbJ7ninBR3W9wzWPeRIDSlYDymrz2OsHlu7U3x9gSj7ff0RibB7Lb9sAdO85jSpNxlFWuyJety1QIwaNjz3/qTyQ4yaFNdOffuX4tVVDV7WaCLc4xxI0C2RDfyoe3vbaBeYJ5OA4LsT9jPI/YBHXCh49rbuPuXnDhmmIqD9xfsaRYXAbwDspNlPf/ldJHFT9XcPsrXcTrOvegKpsSHMETNarTJnq/JBhmK9NEcltPvWzJJf6+Ybgqcxlj65jbxl+EvSr+ZafvvxgNvCOyHK6g4SXVehZhSwQX5W70+5aGH8KquS4mRuV6T4l4MIn6HQNBjOeDZOPnkLVDEVp9W5pi5uF61Y/wW4V6B7pTvb2nX+B6DP1DhqtGdTFb09V70haRfKeee2neGIwp5e2yro2o0dtB3DAv03jUmOJurY4pO60nuY8tdaKl95iRLF7ZSTZVPHxLaDmpa8LzJSk5jdkWpmXnOwj32UE2HRsyUg5GvCc5nvOXkBXKpgAtz1t3uCt828BpUmQTUzNYJWEZh1v13i82zAwMpC0EdnrBFFPdXS87l4Yc4tOSBUPfevDGuIhptvW5tsvpI2hzpdf+HEKNOC2quMFS0rIa1n0CC1PIdqeo+xjI7+23zlLgG0yWpmdaSIoi94TcJhaGj5SvZJole9UVHihuC4woCxgt4iKuw7P5VOYCdZHF30lPlbvhXOMGQXiOnTyXeBrhdg+DMFVxECNjbN4Ja3g6Qq08yKezzMW1daFPQDdV9PGtt52RbaSQUxljkLg7H+RjcRq/ozJ7h/Un02j9e4Xbi8lL4WmyBFjgd/xT7V83muomgcEAD7kn/mSh62x84FNhnV5P6VyXL4/po8SY8fx9jJH/9Of/oAkZ//f/+G+R9uNS1HPht9IZm4HNWX4f18XYqt9ZFvDMeE4vL6CXF9lFOgaGnji30+djkI6RgdnuWIx2xoSYFb41zUXE5DBMGy+2TUJlUrzKhnvyN5CfmcH9IKj6nGLMkJ8kufFI8yBx2wrwLwpd/jVN5JvU4QU/w05Nhjwrlrfpnsm8q/xevreWeSVDejobVYS/WlpaU7EjsP9agj39u0aYdXN3qx35guSf7e9Nu7Icdz1YyhRDCfzKEJDc8wsQDqXC19tr5eeLTpr4SodkQUviz6YQ6moUvQu3i3J7BMMXxnyzhAE/0p/K2i0AOX6nRxF43iKLiZB8TYOldp6kOt0tyzDCxOlGp9ApSO4uVh7qm/Fgm0q13iS+rG8wASLVE07TGySBc1giRVF1U8w3O8EueiibRyXb5NMW/tKuiS8KiePfTfFbhn0Nz9XL7DczS7hiK/fYx2UGuny9ACYSdfV34dUXerKnVXNdH5+ZttNzVpVLfYS9+q46ZobC1LzYjCH1s817NI49HukwIOOvRPiow/Y1D9nMKu1XTxf/fMjHj6cYLv7fjx9lbDDhP3/4WUbaFH5+joHP/BnMjBOMm6vXZjSXsgZU9dRq5ZS54HMkcMy+RydEn6JwoD10Y4HZG+WkMeEYLzggnvHOeYLUyEeDwDfV2U2XMqPqOFyVIzV82/SCSU4yg0Qz43mI+kyE+dMpGwI+H5KPBK4JAtjuIzcWm1yss6QhxaOQE+n0MIzQdoraDIzsPPEq9G+0ib96XuPcVb5DFAQjm5UCHr2JvJXD8UdpPu6GrthMMAwHNHDwwCAxopuLcNkeLa7NJ91wgnAMwsGEk4CBUw1stl4iG6KzeCftWN9LjEPP3DNOnsBN1rhuOHGwnkTnaMUa3qb7/jah1Z9VWAe8KVhXrJszx1HJY5tpiqEWzkvjhHTIPZNZFh+63AyQWNf5ND+5rlPbU8TpxygRgF/fFnXmxk1Fh3wsI4F0WTMvsWQW6nWz+rWrOGAIf+O0RsMNZoa6aU9llVAMtOm0fno3GeDYLMAFHoNp574J3FGrx9bQ4iR8LZtLBZYvvRNFuRa10FwpbH3OcZw+Lm2oArVs5kjx+0FKLTLxz43QjWIb30z1LXK8FLOZyMD4do/cVX4nPPr+NeGh0ZCeqP9OR+/ybjZA3yu5aGGZF30PIdHr2q8b+fA02H9k+zpxF8pv8Xfg9LloLm9Xrr12RvyMbN0N/gdwAfiy0/G/TyDVZ2kMN6TLOrkdpGq49PVw/mPJ5p80vDjB2XgvizfWKReKWo77Rww+yC8a0DcU6IPtvFzlj2sad943dV0uLqT8ZddMEiTl3R45FJEMxq5s5jhFrqfMbLHJrLnhElwHa7vL1RaiSJU00Rt00OvOYSlborPS7SdL0+LXPT5gk9GtE7udUtOZdlYGFyba3lMHk+HqSwPDFXdX07zr5EFcM6nqzgzgdCFEeXEzNcNBOpTR8gHZlS2T0Zlp4yI8PJG+a4zlBfvu0qp7J77CRkpTdo4rbX3EiZ+Z8IkJP493OOcNn+cNk6ZMyhn49XzFoZNj8MSfPvwMgHGeJ5gJr/PEQYSXlxcwGIONMrLCbPG6dsLAeZ7i6m3IhJ3evQPmKRNHux/KXV3tFMOG1+ISOyfk+P53Fjf4dvp8mb3wGtfLu/veQ/CByicyP+/jg/1xO57WuS58gmJ0RAMYL8En3J8eQe4bV1pFGNHNUD5IT20derKVND3FEluf7MesU0+U+4K2vptRzgA3Q6LTop7gJjEo6xCUjSgENaDLksuEXn9hq5Teb4Gwuvxp7I2SvOn4k3jnsQXJHPAVmiZdKNIJvbt65FjgknWowFMcZg84zcjK8IPs3p9uZOVKM3nRoN0zip+eUQYeK7n7kIH/AqXD8LajXSTzCyf8XfLC3B+SR05KKT0fB+h40d8DTGJIJ4JsDFG6HmVTiIHJqRaR8eUUSQnWyZ1ZJNhe9eEgAJ9B872sJE2B57/e/s1z/cvLXwAQ/uP7/937/v/55b9GWb38u4GAd4Ad6+BXBvC+iuZDae+E6xH+XCrd9QPHn+sh9mlhUpEly/7My58OXJ43oz3JQf3H7wHg/vF+WJpAm8h7NJp/L8adGZrzRrR2Su4BUF5uiBuKk+XpO1l9FqcnwcowK9dHNJip/MAMEPthWnktLZ+oxu8WlDhFZ5o0I4A32E4cGs80fY1bcfJf1U651lNg7WOao286HRV0mQy0fsy1NlrNfB529jLx/HxlSaGpznP03TeWGT0xmM4meyK5nzB2+RQ0LqRpnq0MDK4F4ADZ5gVOsGuaOH2luGfdgOl6QYY9GY52Mlp5lHm9qd/tt/VuSrcdOa0flzRFh9vkv1N2SZCBuMd6tjrel8jrxOqNFLnN2/L4vRrIS7uN3o1uaY2/k7+4Zt7x/0JjOV+eW9QxbCdzfRhViBIedKD7eDeaS+STTojacAh2ZbCnMcuRW2yPwZdY8cFaZ4jF0O/YL0G3bKzq5NAk4UnhrzpOmRgHk8/nROWeIroBmP91uc+cfN+NcUQ/RY5o+2Dd7k2EqfqU4c3uzDY0DHMLT4T3dGBANyLOifO8Ofc91RnEOLUQDOAkvamL1ZitNEFyEpqYxWgvvtWVbqXuyexGv5GoAWw3lid9QHFHxOocKjtKtxPurHpgkxNsdzkTTGqUTYAP1C9yeZ6Sl7isp6ST5Vx+tFZb6xnyvgxR2bDl3OsdnN86Lbo3IWuTbvICQMSyfAE5hX6kK7TmmDhBmJNxjIFjyoa0MXVv6FQezgzmU+mVRVxweMAxkh+knTkILxh44RcAJ26nyVYZC+e5yugyKpsojK0GSZ644Ek8x/K4ajCBeWzFaFReXiQcabPzTJCWeRG3sjqN1Q3gcigh8hkvWAytzsMXs3uqcnoK2ZRjhKV+4jjUPGG1uaNSu61qMp6X4hymvAFAi1EdKQz0CR8zeJrzQLCfPjcD86QwcNvvqX8Fx8ZLN5BkF+Qy7kcSc5xwnEHk8lvK4vpsGwWQ6vGHntc2KhbDs/dcsBTOcKRy0t7JslprZXHoWkkkJZ4SzIU5f+htqL/ykuh94T+bcLXBreXlDG9vj7Y0fjl+Fxhqfbn99cDXE2GXuJNcj+s6nYNrOGuF7nTJvG5kZVxt7E/1L2qwNz70+G1CLyQD3/G467AngrVv8baxvj+9rF/oMb0v/LXpo0s56YHb2LuT7Ukgn357/G5xO1oJfl7jLRuvvHxbrvHnTrwppY2jwqB2ULOma/r+xr5RjOhXY+T3DqT6orpvHzTk2iEzoJfJFGJ4PZrP/Qi/WVC/2kkw3aPl3kkPdzD9o4RdgxNzLMLoilL3AuA63R3BdA+8q+/OzJUh6UzZDc22OF0WmaGnMQ81cs94HxNijJU2yUKW3smAA+BbME+dVIaZZ8ZcabK63pqqmE6wnoDMmHqaByyuqTnyP4F6w/ouaci1hLP8cbejECuDLt9yAZzd0TUN0yeAE5NPYJ7AvHl/nWQLCukUOuygLQEnAceB8XKC8KJ4sjvd8mT5K4Ldg669lfm3VFA0T6dLWzDIO22r0syA3TFniyhazLC0Nrlrho9wA2b/Wv0p/aQyPGwoE+BrvaS2Vt/MZbQbRdd2eftyHK9pHQ6DPdFQUaQa7gCgTXD3cNzp1aLE5LrtuSt6Gn+lFKUk8UGXqmQlBH663O40d5ftsqMu3LfL6XJ3Zw2kU2Wy6BSG92yEL1wNBZfG3xxWik1BbMqVub9seOJTxhBeAXqR+obcjWe2+zjjlg0EQKHJjRLG0PYY4ZU0Tbnr8cpUffks96lO3MUoK+1kXSDiU+oSF4mH8APfKKA04Mdt0unzIuMo9feOttfwL//+f/PnFwxv63/5//TU+a/zqXJq+JbaYSHgiPPuEdqSRQ5aZUrpOsNJ8Fd3s2qbRI4DPF6A44hxoH+CbzlpZHIplHtsFhJ2sGv9OwFoQ30orCfHnAVQ3smVzyh9FfvB5cQiz7TvpeHrNM72uJ0KxT59z9t/e//k+rsQuAoPlRFSYQEsvCAD5Pw5ZB0hseJH7Vu6eg+YORnIdzfW35630xElWOmibouMD3/dJbkC3WpmJMNAaAYLKY3ou6IpdtCdVVF9V7oPl5ZaX2rCFr27qBLP0YG2iOk+mznthZFrRCiVJOYlYLwovzh7I/rpbvk1Z8Ou24Phmx6sLcNwkPgPdsUJ//dLgPTqCbvDlt0YIoaTOaUugmx+tCHGZJs8re/Sb6Y7AmiIwdk3W2W5oq6WwZwMh0mzNNQSQ5S1Ec2gA4wJYpFrhPC3BMoGkNhoJo6dprQHDN9kB3Yv8aTyVvAapRiXZxJPXXxj3XxsPMCM6t0zTeoGfuyasZL4E7Kv6ARPhGv1o3x/yAbvhHXcpMIumcOukE2au7yzxnsRfXHzmU7I5Zj4qAzcyyq4SnkZ61CMObolzZsnlSNmcLds2zLXhIQqzi39bfq2mOJylxl4z3KTH6fj4R9vMs6OIdzgP7/7i+JBXYsz4X/iM8CMn+gdbucNTIxBhJdBOA7dDCsjHzdDoM2xBsTrDhk8jBNmRIUTUKCSY7+rblIaugGRMXAycJ4TtxlXgjFRvemIAR6iIw9GuJElc+9tJ+RlY8Axpk471S08wuBueDcIfXuu6U+FFgiT4pQ9w6Sa0MHQjg3vhpz+lOtQbC6I5uzcucPXI6Isan+VOLjF1y2B0QfWPk4y6FDY7Cy6zyO03WxzL/eNHRt8YwsCww1kM19FpAvJLH1tGx0GJggndKel3JfOJ+acAE55ZuAAgVk99xnIiE1QA8DLMRKvegHzTenkxGRy+bQ5rvF1oesUzpYSzRtf3+jfcQ89UJT12llRTvlYH4OPsL97ln4SXZ+XayAcQ/bvrfC3SPsS8xptcWVsBMZLywMAny/V9r7VwdpD+TcPq5YOOs/zdsxw1T4VGZb1xAeczKiu06z1K4B9CTGPdcOlfXQMcBLpvZ84Gd1TXG5+IIoDJDsUMhtJtV/HJHPap6gfhfm2Bu7rtL9tXfklrQNWd/ZPhJbonkinVm4sDwCyXQAAIABJREFUt2UDasCyLW3Z1Ju1+/RU1jbtY8pTgKD1d6l3M27vIeiLWFWv90mFstf1NWzyUV5eHn67cNEV/q2PuV3mPbP6ncKjjnlLx+2+XSn3u29vCTnvW2DiTdw/UGjqmSyL6wn0/I1T+vz4NZO1H+GLw8tC7IxQyKi/b5jC14yV7yFsJ+l8/e1uRvvUqbxLemrfd+GOMH20AMGi0lGJRCg1RYEFRGO0P4a53eLRy7Q/vV2s7XYtbrNYzz6by0Oe6a+ezKGOjw2T6I3Ituw9K1/xNFh2gpd5ZckYyilz/Fnb8474Gjbx+USClu1TXw7vBWZIFxdkJ+hMxnO7C9bbpfvW82lFkNR1DGBOTLwI42VCuE8LOHfhmRPnu5xktKRVxUJlUyC1jOhYoYlfXn8FH+/w8fUT/v3xAcDAJ3yU3eY6e/hpvIAZ+DVNOPKdiPP1FWDG8e4dAODT549wI4wZDQn49PEXEAgv799jEPB5ToAYL8c7refACcLrx4+alS+VpKJwL0hJ0TYTAgN/17gBuQv93/IqF2MxlvexsFb+IKQJSgZsofkaseyUd57P8W7lUf8zzxT6PF78Gw01qIP81Dm7e/Y4hcukO/Dc4YJs2oGvSmUE26hMTfU/GWe2YOKTaOjYs5MIhvs5AboBdMi6zKvCOaQPqRhTEyzZKDdtAcnqgttE/FoNk6MF6ITn7RBNcoQgYxu26GqVMDD+f/berEmSHEcT/EA1j8ys6q7eh31Y2f//11ZGZEZme2eq8gh3I7APuKlUc/OIqDyqk5keZqbKAyRBACQOiipEmIHBED7slZef7vgBP8xUwWxCXY5EDacC9wRxshAHoBcCAJXvV+nzA951mRZm4EqidRNbhM8vSrHcTIHtbW+XW5VerWEp7wynZaghibhhyFAlOpEe+qbHeoZnUqXW2u8HmwNHqtXLAgC+M+T7LAC9mDfQBPAGzBdbXwx8fg08/R/zF9QxTVpeYdmNxYUE7zFj66t6r3kYt9S1hJShHtFa5GHoKZ/VucpB2h9rq4kvF+P7iN6GEn3JkxeiInCjscIqKF1Xf5WpcXQbdg6cqXzjxDw29ea8rQFbPf17W1zP8J96K+k5tSuGUGkz+plv80T3qrsH3OloO0Ct+cjYlRTUpjpaOZBrT/LkPdZCXDIUeGp9JZfrvGbOuW/0ydd5h+fxfG3G3emy9zueV/wrg1IO5PWg2HhcxCmy3+IBk2tRU5CQ9TmMsPzT2gt+VufMPNB97V0mX8edEapnucoA6vEqceMIjQOgqbK5OA1dhkRSBpCISCOI6FhNcEBGkQfFFCaIJUJUVZ57vacCtaw8/v1eWvPTO6+foS0+XauXhv3zMRv5c+bzUfgi58hCJ2hDg+r8tCY29KFUtgU9FICnVnoVHQVtLHzNU+yhnR5VRWpXjvfuVhF2fV9pWfSqPCCDP0WtM/xxdl/bA5CWIUV2NHrgwyu+ruIKopUnUzyvsP/3zz8BJHgZwMuNcNCBgw4NgQ4G4w7BxDTFtntmDyK16TOZdkCCEg0bTTXd0ZbU0FALMMxTGQMswGeeIAvdPoAIFS+iQW6mSQJ6lSSbIwBMlta+ydD6FZ4BMDScOBks9nV8NiOeAaM7mk/nRbJ/9lsKzyA4n8iofhoMSxW9oVgjve/blfluNJw8ujxryNo/0xN9tHnLLyqDykKX5VKZUwqLOZZbzUI2e6+O4EONkmD7CynG1uX8iILgWrgAV7Ab7H4tyiAL4U9ihtCqOBfRu9IFDBaO/bsIIAdj2DVWbqhVlXW3w/ae9wM4BCIaOn6AAM4rBpLX2/oS82aPcSyG8pHpTGfSzs95MXJtW7261UpeXWc1eJSIOgagFFzO48QBrV7bSz2hVCxEQ3h9522Ws6iCSBL/lu57P+P8zFexY4tGSYw2ChnXoP0+YD7eDsPZn7cdcVQoyKcszyYFKJEQ4MQHEMnAgyie594/e8fySwvRfkrrq+V3Rmwr4+6ge0OAnT/1CqTg7elsKj4l6pECuEAwvIMVtsI/VbQzmmLwUW2zFS3tO08qbVK0i/N5c3aowLppJ8q5EHoCI9IjMcVha0BI4malZ7WHUV5SOo8jvUJnU7SnspZqnwtNbnD470IITmOw9q7AVX+1uwjel28yOb21sm4wGnxj29rme4lsAGS/WhXvyf5dRmlpPXe66loQ2Gsj1ocp5Dqc58LbbWvwRFjzXdAlyrI4ib5LO4U2fXGScyMf/X1K69xVvN20H5+y/K71Lbi/vqshhzZ19G+1nQ9tWn4/ifJPj9P9C/LTU+vq1+LLn+lLU1Ggl0loa6MIGu3gb4f4/wpp7dPVolyRdh3HX2NcknVH007UKQ8x48AoiP0qSNl7FojflesZivcl1yp8UUtpV8yvRVTB7jcJRYgtnqbUEcAO5OiR4sgkFt1UlI1/6X6VmZu9euULToPCQ8TuIYOLP15FKtzEQoNlqEdcCwAU/yzPS90C2xCnbBJnnwT10jcFOvGEzDdTpHMXHkKhWAeBVHn3ooeiOsYM4IArmwXVsvtLk+FJjHvFp8SZflDJ6QXsQolPDouGa28HWoLJdxzjttRbBU/Jd7EhNiWUlPkSAGSx3uICQbeQt+/Vk5C4l6fvAfn5nSGpcGH57usK6ZTEpUztX0NsiU3v16UVqCsadiUc7ZLTHD8MKd7mgHP+9Lg1r/OmLI+7z80Qh9KDXZWLFLp2IfOUo9p2wTOHt+GJz78ddPuaL4cRqTawQxtMSMFhEIA7QQbZCZz2JQ45g+ZZZkGu01ienT53ElLGmOpvp9+1jioc+ji7csYVMaI0BD6GMC9OmNLc1kZ4oR9ZD0yJGwdtBT9P6Upo/oOnciBuD4Cyce7LYbM+BLrRJv0TswBJv0g3asrDypz2cvho8yl2EPghMYKAvgldEpthigggb9r2KO+8s8O9iUp3Y8qX+b+Arx6wpVzSXuwL1DUYX+XcTiVdjUUQeljmIqdK/bxIdeP8KJ9nLm3VLiu5osKLxJp+Yu3Q6cspjTJGdUZc6uuSUh/TOPJ5Rzv272v72+znh1Uc6uFek/6ep4bWzFlJdM7nbsnnLoukfQtJkXoobl+bea/22lx/RkZX+1lQAh4hQFuS5atkWUkYew9LP0nn0PHlfQLwiK+HhVT5O4MZ8saCSa0Pw5TXyMPlsxJdyljbsafU+rk3kYJ5KU8b2uVKacdbya754+HhezWP/pt8LHk24Hud0/Uuwk72e92nsa3lUHDS4eSe/an0EZ76B+G/u0NUFBL7Ed523cjzFYnjVymzIwPvFN+KzXXZU6J0lKv5y7BUsqdLMBYQehFXHA2XJhYar7nK9r+9/Tfxm6Oy8bYmTsBry0MEfyVqyyFhMjplf28Qi+KkkB5DDeYnWO9FFwKTyxmqBB/mka7wEjSmhISijAgYQ8DDaMox4izxzoIpE0QcBs8i6WXvynAM8/K2aBogwiDBxEBEpBLGAOt+w2DUMw/1qieCGd+rAYYMgz3mSkJhDgtt7+pugpadUDiGnLHWzx7cK9sN4obRZRE2uT5iY+CcLmh9+715LqMhjDa9Irn+bkoSw0B2BKdRXmkEFiWxBDVhsPZmwnKMG0hsr8jVscCwaPi4a/BrOgBiBmiC6I70/RcPdmisQkNtswzQmLrlrAtSOPasB5Hq83lohILBYB4mByd7q+MAsogBbfxXmcs/5fx+HqextWojEp5GJCiy3G1m+dcjaQVXuJA8zMdCyvsyBEEvKp88iS986pVJAZDWt02Pi+yU799iv5pXaBROLYDgpcVw0Xcv5UzvLcf9hxKKtx7V+DjEGK7ARY9tvKT3gfM317KxZqTVs1QaIDR4AJsT6Y99Dkw2Ifvs1bpjym4evR7Jujjr8/Wc4lnnHSU2SRgzVZOdbYNr3x3m9pkZwwilFKEC28O9Vj1nKanyWLxTnKSBc87ffq/yuX1fpxw5nguSR7vxsCKhLBme2RP+s9IWSVf+AZzwW9qXnu+p/nyh8PdbjFXD2wX/r8B5AszLEfgN0eE67TD/PUAveN/l71VOsWfBQ04LaNPOHzupLEzFT4jS5hA47SHi2b9G9/9w6dYQdSMEnB745upic/yHSWfZtaSKndhkpHUneZH8xTdgFvVQqe3Gl/Y2U5mbXM2TlqQuDFoe8z6XqcrX04FmyDGuAEs41EvE23cADjhDDYVqDRNPZrUW9WzGvTwSF2cpW+0CaJGSJGuKc9GpfVS6RKUPpS2HUWwcmLPuBwfO7/JRgYVYdgKZBw3D+2aesDTv1r7f/W3vBKGQ7MmUmBbGXfPmRlqWsX33EH99Ty7sLsKRuHV92Sj5XLPNVRGO01sw5+kzf9a8n14CB4WAO79BmPFSkbkKbdL/PtEBEcbn2EEX4M3yQwSYPIExNEI3Aa5AnTzxxnfg0wDud+DuZRbL8jqfK99ehau6sf0LAgd8nOBzXrJ5iP/cbyx1boHZpVXIqJWWMV0E6KzZMTPfdWs4/3OF+EgPc4J621YPdBqgcahCunqp+8EL+YRkyPS+J6H4DJoVfAgANKyq4t95cuLKBA+zK75RrLRQgJmHCDImZNw0BK0pOKUqxXx83EAiZMCFrvgzoBzyd37aD0N3ElEJLU5JNfpBl3n2B87MnCMI6LgBNMsmXixkIilt7FQVGZKxgNM82u3FfzgswP/4z/83X33GQku+RNK7ornv1eMI9ER761JYT8pP1VB5VsY/lmrOMNtzPSwyJXpYpZm6b9h7VHJZaPZqvLjta4V1kU/wknNmNCmMvAU1MrLlEeTpMBB3LAazLXOyjgty/fR3n3K8Gs0s+RZS1dLa/8oLIOgW+J7f4PECZb5C7ChUReScb58KwLt5kTJK5aBty3drnx89sxQOApKvRZwapPq89Wftjsl14RkyekPd4/wMB13+2CTHq6DX5V1OETwkqRCd38fvUthoakVJv/cSUkQk6wrBjSZ13Q0PBW7/CtAVWD6GsOs3vH1Kz3GStTP+0aMeUKxnFHkXoCO95IXLhNZBkuRQTpM0rLgXtEJ3LydBXpx0xJWysSao9TMXnEZaycGIlZO4S9XXTJJXR71O9VzOhvLY4ca0CabfkwwAmKI2XQGKrxtSWc0UMAINyys+8XKDR0kJi30tFWOjHqKqmHNzphxVN5z0EMmC3PcIeHroZntiOoyoQzzUaVGe7/Din53WtYIE470luqO3zkbyecWXJ9JKzxbcTvpEPX8FOujgrgc7OBZat1Zd69+BXNoJulK7UFgykKK8v4/skl7uVQohAWatsRyqt6qdTgFFOqX4FyH3nicu6I57anozrCHSTx2D4L99/jFhMEPK/+vT9wCAT7ZAXw2/iQh/588AgH+8VaNTASbhDYI7T9CYISY55GRyjF+LQCLqKW774YOquaHJ6cbZBgSfxg0HboAwJmasWXLlkMndbofjdqNK3+8Q+mTbaN+HS4rqxGA2L3dTsDORhaFX3sJOi0jpoQydJ42OoeuF9CYMgyGDo6ehBEHcWNF4i44NF3zxuVcvawLAYThRPHbX6Qz0LXhi+OS8l5IyN7yB98FlAuxSeWqXP7IUWirWeT97EApfYqXbpSrSHoK/xzi+s5ABglDmwz8FGKJ7OzCIDLeG8xRzeADMeIIwxYwXWDR0vsCuEOW4Ek7xBsDQsdKrRglDCGMMHIeEh7cqtDkVfsF7kmZUr23PUhXssSerU2IP+l3PEuK+39NazVfaveWneZc8c5CsL+lioY+hvMyKOmmUgLobTXhvZPldQVLaJIBeLVYqVhmvtCFZm+IIld/17y06OoJFS/cmbyDVZ0moT0rQEDPsKdc+4KQnj7O0U3QBav102ce/eza+gtFxZfnu9NzFxjJdvQ7P7+cfVZkd+Vz+lQZvyKfks2Z0ojVGfUj9qbUTd7LHWV8bNHuWayPKlOdXfeq4vNa7TmhvS39QgWGtaxmnRQboYovOewSiqe8D1tOiPPejtr8b1N33dUxqNkFH7M14XEqBXu8oZ3KtTLVUXYoWyxJZ8a3n7HVc4e8j+Orvcqb8vnD7oJ4Kyw63VvHqVObUyPLbNw0XOHGC552x+EB6fHf8hgh+vAX77H2qNEPqHF02scJCl99d1qQklI8qLjB9EMd+yxREhZafxcHFX9hY7+MD/5l+jXSrgnYIDpUyB2GukyTl53+FyWsiwzt5NoLVt2y+pmVKTGpHKgDK7/hzTU8taHPMdsjlh0gu/BqDTjF5lD/KdmEKmwi9MUr9otLjIRZiuJys+kmNbRikCnnRDdtYUN4rSXDByJm3Km79vvWGplZnhkjbzItkKCHmHoJeD0XWaTkLNVcCndahxyd6kDvgXvDVXw4iamHtysAq+YnYgUJ6FulbM3gA7EBg3bh9JQ6K4kNacYp10wUZa0Pq2LvhASBxqPgjIN8XXCT1soeFDXVv+6Pi6lj4pJTfBT8FiNC81XzZT1MKHjHnXMYBkHsfSXkuYvD+fJ7THf/e7zC6AFHhvhJkVvp7aviZ9Ei42NGqM440uccVsX4Y4wrzccA90Gn4wccAxk3vfnaPDrsPfcCU5URxF17Wi3iWId/8z+dZEjYfy9qnRRDNTU4Zb1fWsCSNogmNiAGN5jAlQ7TaJzPAQTd8dIpXI/kRfUHANqxUFEpUhp32eHCakOqBgmXaBHGJoyuSBuC7nHAAHD4OIw83BgC5mRHAfdNu9rXv5P8Fk/POykO3+VBRYPOaLPBGoU+FXXkdBNST3l6ZG6n493XT3VItJzqfb/fTuwjNKc4ZnLZbW65MvWs9zmOD952MtzawuJc7kDQ5FNzvIM8q09QvV6Tw9HwdJ6f/1uM6/mVY44D0IXK/A8sFbFVx+ly6OLRoaFm8rePlFe3IOqX/jHRSnNe8J5g+SADafoEKPiDIyl6ezSJnKNLgqzlQD/s9EPwnlVIaxpdchmrEFGW7YzujKi8TjP4uWOIHno2vNiGg9KnHPOpZpb870Za2ELFNu+XlBjIbEgMg708nUl5eIsIofwPavoE87H5dSC6XuvLLQ+bae+c7Pg7VoKcqrZOxIxWMBUlECwkNgG7AmAVXZtIvAMVyQNmhuBLdMMfla5fN2QAyWiGgsicykMIoMvvnONHkkZBDPrruv2HaoOAutQjQy/N+OHPVl/Xh5khn08ZDTnAB07PpTMmW6gtv2NHCK5Dq96s2gsWi97H11XFlkTFc6aak4uMD4HKyhtQubO8E+WUFLZvfy+2fLGIhjLuhanx3YztTEotFB6kKZMejsMcVJz8MAodie5hM7btbVWTqGp4wxTlzRP4JeQUUinAmASZh0AGMV0BegOiP2B7cwrPTBA1V4oXynEjtfIhMhQ2wkHot20C53Y4rx8iuKHGO46SXsusmb+mYpVc6QUj91AcIoGF1cjEj8ChSy5xvUrZeeYaFha+lhcp5yGrMK02M6vXb7LvcEUycgn15UH4N+JEKbxhPGWNAxgGeAI0bmGYawnnfROsBGBrPgAG6GxZIsAUhnRumamytYzti9CxMv+jf4NIHm8tjDIRSnjlQOqu8GJB1/N3Yrk6XGSqo8t/MHrko0W86jm5QSADk1crcD5BHFSQsrtELlXG+504qNUuTO3a4U8pcZWm595+nPOVFnL9QUZ7DXWQMa3xNRP7sW/DhqpEuvDnacbr0Hin18ed3sq5MoP6IZtJ40KTI03FsK1/HGkUcKvlCZtmNbp3XInbEWUk5M8nBFDQZfK1PjEYFiJVXLbix/vmHlDaRvK3hwSPl1dVYe+Wyyb7bI1uf2/sK6AaGzttPBKBsG87Ycqru6vd7n6eKHzx7cq3u09cIqHmm/sWKSGcb/hnPL+r7wmY+nB6N9zPlat4N7zxVudb91fuGZxHxW6Te2aci7T2sY331BA3/I6dCcGh9jtM2IWjtr7UU/kz7dKMFK2X9FsRN8kDj4c73D5ZCJthROym/dx3eYfwz6UmJ9DJRni1dAXASIHCi1OFp6FKdW3O6B9pWaHGpcCwClSmb4hCealOZwgNXvdAlMpUOnSTMPh/JZ0tdFm5d7hLf3StUgDgo39rruFLdD9DLZ1eK5iFi/bfBvFOiimhZ8wjVjbJtr8MrynoaAp3kb6tQoJbYRHmfWV+v9YkZA5CWjPnbpXeZnfT+2Tjqv5zTIL7xKl44XLyC66GiKax/+PQDDgh+mfd4N+c9Dmvu/Apxtx8Bfn57BSC4uTLxdiu4KUuI9Ao/AFLzgwN6aDBAEGYQEV5//kWzHgNy54AvHZU2gvc69L4+/N0obYP0998Nzr8A+Ok8/u3wIi9c6m09mxqir2tpra9XHGFkgFB4R/mIQGFh5Ex5TnTAw7TLOEDjZtm1DFk5oqJEh9MTP1EbcaLWLNHT4sGoccV38UxIYw0/SMvDmJyj0l/PGyTLaD0DxOrF4L/DSz6GUA1h4v5DqMdFUJh6buXKCG9LVGnZrDRjwJf5qfUACMXAEDvgt9MUQY6fjFM5GqYohQCi0UGcNEUY5EqHtRGk1s7p9LIW/j8ntNVy5SqtW4f3hIkdL/4Iw13z0tJc4SZ2SFzfnJqOz4I3kSePOVp5EFAOBWs/WkBOq1dR4chsBpsf/NqDE/ytbl+zDRjJZ87zYEdXLLGWY068i7Ks05a406xQkJc6zgOSvwss2wwP6Z0EP2rf6/pOsrGsqxwL510Nhi1PrPha6M4lX/WPlWf4etpUXcd3M7U+XAMEZj3wFSDvZeTS3q5deBuCfyu0yCY68Di9ZzoROfW0Kjs36eo1rfPiqLoWOInYnUZSfeyH1UJ5aG10NSi0yyKFi6B+i/Wc3vwd8ChgVafCgeBt5VzU0Tu8q0ZL3b6lU40HSQCQBJkln6eGMlUh2Of/FI7TWxcyfjFO1NVDeyqvd2DrWKWhWxrMqlIqB0ngMoODJVxhMZ4yvd6C+P4hlcr4dSwWacl5HgpFNdkpog6AwIMw2KQKInA1KgBB3lIGrUSLwJvZyTwuqXRZvedpJRfa8hFu1tpf+dI72aO9Xf5l2XnP1vOBy0pbOq3WM5ks0/su5lclyKYOVBlqB0fDnfqakg84fKWOU3W+FFCxYwMOkh6HB/ky6L418Bq4yh1iGBTtefQhv0ZByyWOdRipfMeyzEIOKXj/f758BwLwl/GiRpUQD8CF/8RnQIAfZwkfveHXInpfubT6qTmwhRKsGAwqDfXIFxpGHQDkpmP24gZQAO7s6lPbB4uuubCZkUKLje4MuE6fgHloJCkaGKTwkqQHuBv9OM0QIQwaZpeqeEKiXugTAmEyJb3K3ro1sJmy6EK5M9AJYCLQ4Gjj+OGTDtcv99w5CMA0dJ8a4hqDo7Y6/oRCeMIovwxCQQ7KZ1LK+7wtKZXXhY+UpmNL5nPq/RTPKhBM+HVEk1U1mvgzcYwbbvzJDH8dTMGgQ2VgUi9yAWPKHcwTzHdMvmPKGzxkv3uf+932lXdz/CIcsOMtABABz9lkj+H4aN7oPHQP2NbUOhZ1hN0QvF4jVPOVPtbF4dsr5U0GrZOnWtx/CyAbjAilqc+Mn7tIyhhBTsUlj4Xn2dez4h0JzEJb1qEIsbygWgwdZd1hXwsLwQ+B4NUiGxQOW/ZPVPqCn31mCfgewC85+w6cz20+qfyp07LwLnYatoz/dt43/NxH1mW9ZgtYPlOpnO0bQi8sb4tE2Z5Pc8x3NNDAJM+D/HTAou/xuJ7boc+9lRE/b5PEpN5HJxK57i+PG3ddbO+lvZfduwsFesIlvcxpLnP+gMq3ydaed57QcyLyadV1bK86VB5XWE4DlLRxJ08Zhi1rH5BmNftOGtXQyvtXFzlQsfG8oW6dyU+WM7BrXWvRsvby+9JWtXz/p6QFT9qrq35f1bEs/kUWpCX316dHc3P1+9u1vZ2Wj8xXOGBmnb2Fc5ulofer/6fizVckF80o8UTlY/+ZUaVqujKg/DP989Pt/SxVShK0Q9kv2/n/QdLKPOpzXLz7dVMwzkfJGV0Q8LRsPelEXHozT2ACVHBtlwJay1GBva+CwurxEk07LP5nbZ6UC0s5SKEi+tsFBoVR71qT+9Sw63MCc6ZyqA5Y1IkOS4wVKsXqzE7uaJ06Hd4XKaDJEtbvMEqgksWO/Eq4yZrINuNhIV22TGGdi9KGweHCdFrgVgHpg0mSSMuPAvyAIrGXakXSCEOAvGNyMz4sFguvbjRrHpTfxZjDpPy67aPdHIagh1aW3IDDNnFxxlDvr/b6Ihyaty+93jI++b7iC2Wdnv5CehnhaSo2dOVX54sL/Ft0sTVh+KSh2QFXkGeo9gM4UmEeyrnibQ7DZQnFOeXycLqEnejXMb8L2OdBW6lXu+s8L4Huv8m9SNDnVwC/R1EVDgPDPEI81C+vHnUOQds8VABpw26WDcZaLl4XIl4EL303crrgwRsn/PoMwELhkli3LeytrPX8MxHxV0fyTZJcq09lL/woUhyZIDbRQPLIwANbA5IaPl030rJR43crm/L5KTjm8H/v8EwLoQ9YfOfoavcCL0ZQQrYMyMIrJ/3KEqfVhD6HcmHEtEtLWV9scn61TbslAgSP0CY281p5xcNp90W5EntrXFZAl7ynPeNKo76VDLmnkmeYPN9Y7jc/b+ivhvbbJrL/5YxWIVNQB+bBkFV5Fu4FWJeqQA+2Q55ZcQ95oFm92Go2k3uDL1QesSHrpykvDT6lNN9XnTBfGC7ke61BWdYIr3wtZ7TIoxehiyodiGUtjLJ21n4v/dK7i/1djqcIUt4qwarO7bYH9mEe70zQ+LwDPBjEQ3/LQEYZWOZ5V2WV5dFlUrGQ9KVDC7DbCvH7S+/Rmx1Pe1T816ES3zo9w1Y+kv9hA+8N+bq4nTYZLorhmn+mGLnjSaVBX/dB/wh/A/C/34Mllrk0uTT2SmuRYjQpcNar9OXMXotcHEHUBGKe4IPUu51ySZtiV2t55TvGZKNTFlWCKIJYOIARl836EEp08fhtRtnFFdkeKp21XVK8ZtrZAAAgAElEQVTFOMZQxbVQeLOTGfcodRH4dSAuNjk/87vLwcNuqliYgb82pW1EHoiDZodyhEhORom872IbFKlyYMiZa3LZvs2WfUuq38wy3Hs5eGOhpdNz2YG5iN76Z7ijyjc1omIRU3y7b3HS1/nGuI9p8QzVOOKAqIED3eHHT3e8YeKOOe+48xvmfMOcd0weECEbf4M1jIedlqcptli0gVhfPO2NDh5B5/oghJND84j/CDFgMd5W+YH1/a0IJRUv7t5Q4rLUc6dYbiMXXM5YAlll3HcVPvLNWdbDqijziC6hojz374mLWakWnGLrtNSXNNHxV5x9R/8l5MyFdpY8Xm/IjnUtOT0MT/fa5pWcEiZUwS47yZelig6Pg+zNr+08s4MISNu5YDw0eJQg0ym/NFjyUwqv6u8dzAbbt8SvNn2y/1zgfLbtug2pyvPnUxnBqzYfEZGTsrbWuz5f62nQrxVcp7pveia9R06+Zfo12/qWqeLcR9DnGzX9h01PA78u6o8g8O84PdMFX+ZtrP7Qs/6HTbc4z5AiroQQT+9P6GrF9c4e/Neb6F07Vyda73QyNpM+JoIPHbifwmqu2H91EPGgjaAXchaSpRCTRT73Q18F34W7A+HN4Z7kwgBP9bDxw7bGnO2Ze5yC2nVEYWUeylOrczJ090UAJtRrNftzsoQuVtTue9oEG/HNqcKpXdQw3Rl+uQ6nS7HSxqONXyg9qHeZ7yEQ54zVPq7C3DJhMS/U3xdDBLHf1VO1rkMpsZ1c9PV70ekYoKFKzLN8teHoVdLdCmT5u25EAMnNITJ0pQTuIOcbYgYZ7sHgcyLAZNzpDUQDP719huKFGm/cCQCz3TdH+O677wBhfP78i9b78qJ1v94hwvhF7tqhlwN4mwHnp++/BwH4/Msv1g89mblZCP3o08sNwowfbt9hHje8/vRjWTffAfilj906TnqikVnqeHLJ82PBjSYsX9T7NfTyVJTO37f02dZbnL7Z4UIozu0vvh8ADggdqjynGtpdvQKibF1bKGSUEAdBQktI1Fi3+rsrzwVBGcQrTIOHCAvnEWaBsG7v/Rf4YbnSdzbDDFuXUg1dyn1RRKFPB1uQx1G8dYoiNEOiGfzxrnjVN+GIyvcEWLiPhvVKMw4qxin2ahie82GHQXfQODQYiEzLpgNEOGweuLhPjaSTzSJJAn4FqgqxF7Tk9HjJf8XyXOEsbYAWlP4SAbpvOMU8nkR2eVaYvL8Sf5pT1wTRDYIbgAMQWw9yW9ocjXc4Lol1p9lWGGqncs9ZlI5Nl2wWOaeCWfmd3S3pbSsKKkzk3p3Mylf8nsqC0xJ9sOOvMDzydhwGLmNmn428VZiAMw+9oIPRn1KnP9+iopS/Os+ywOuPr3hi8r/zu6Voq7Pw1MqPKx26THqwC0DlGyQbbpG9gw5muVrt30IBbH5xm4OiJodJ0uYNSKf6+7vsFcW34nkVoBYY1uW2ssll2IL2t4KKhzKgYX59zaxRMgyw5nVT26w0zfAr0ap4HVfP0CIXueJEp8TWqbGHo4DBV3sCAeimHQ1+3HhDWY+icAgs/LFFS2ljxGbUNgjpnW19dHxmXkKh16EVm24J8gUYfgybW4qwPYgrIghd3jLSIvDoF0CEjo+9iMSwu2+qVDrjuCQM0ISwmFe5RcNxL1CByhPQ64WErY8wvsUcyp6Yg2LYSYXniQN0uU6XiBy7KEIXqUYyiCKXLK3Mm0N2SSJzrcHr3njBVA5WX+xAyJYf8Ub0sbDs3ktfGSvJTYBo+V0/C8050Xnp79e1tVTrfDy4qsumpVqH2dnM2mSAUvg1wexyCRFG1zN5nasnutOxgFgklKpyEgbO41vFKe9RrFUBPo2MLvKL0TNv87/Nf4RhzOeQ/cqY1PENdCuW8iYjB+wON6z/ruAkq1d0PfvxAhMwDwvfLsDrfeI+GKoEl4wGBcXT4fCFp056fPrd0QK7B5s9HPsdgz4hjXABDFWajgh+pXezD2G75/yAQDTSlNMs7zkBzGx8OefHWx/giOAz/B5zU9wrjVNmwKJh2tX29tCjE2IcAiC8qic07poqjfXGLPVqD3uE+FOFeYsg4+cLyH2RCMA0M7aez6vI+badGi7bzyEi8qBEG7pO7NO8zyWMApwOM3Bn3MdnDLlZiHwNUX7gBvfeFxLwINzxhld+xS/zFa/3iVeZeGOJW9/Sk1lhS6X3wCDBMdik8oFh51EiGmkh17DoPs/RrI3fOkDaTo1Nknc8J4GI7W6JaFPpJmUJrZrsS7L/sh+RiN7PwpUMFCIlMQYNlgBbCm3QFwHbTgSxz/Tasx43si+boubkwtGqfpqRjIg7p1LbCoSSN6UWnJLhk8MR8P8kp/yNVTvtHPVlfV8Vy0Zj6lkqiSrY+0JpbVLQlYUzWFec9FE2kiTW8Wfdx0TlUuaEYgmGV2IbyKW8L9fy5w99LGtf0/vcx41OW/91bJ0vRi1tKvpaanxrJStYQkCvfSpjp1+lf679vkwb/ArgzQDM+Z7Rg1ObRvMfNnNqYGn2+cJbUbKiaFb3oNK4thBIjmEVnc5QJPMUHIrqw8loAXBtfp271hkndHWtLWVi72APB3V+FFVv8OaUZwfTI3jX3xtCuZXxz7JxypueirFuqfa8fp4DU8uWiuKjMQFc0tarirf4SuU3vTOeH0Byr7QRkt1kOlGlpeQyN2uidb4u6EB7XSdmk66eX1QfcJC7NiGjgA43/jf6DEAOgnw6FOenOyaq1Bdb5Xem9F82/YZ9vnHGXupp62G1JBE7iCh54nCVUjLIAui9/Qqv2Kjva58/2T4XDHUpaCl7wt9GBWvedRxqHsIJps1GRshPB2GhfNHConm1vvZ1/+LtTnutO8YMcpgHBJheWI+u6KYhtVhG8i1Xio0DwozpDXkIeKgnOMYdxAM0h5mXToyDQbeXUKxxuYfLw0BXHEyr5VsICL5VO4ZtsGVAZGAywIPBMy0oCaY4qx7Pq+Qjm2clL0mGW8rZL4o+/6zlKrPhSvDLn+/17J/cE4WYDbbDUNtu5yyPAzgOjNsN4/YCOm4Wjkdv/aqMgrKJQKkKXhO8VoYnqiRRxXcfQvX4KXPvh5oubc0JDV8vAO4IJGOGyGFNTmUMbH8D8DvQad41L6yuOlcnhd5OAFw/84DWZ3KAMTFB4W209P+LmJOty0oHgxGThXHf0YdvlTa05PR+n8TniKi4pXn8gwOKXwd0PR4QugF0gG3t0ngBjpdSo9F6KQpKxznyQ/dcf0I5rwolA8MPEOxQ24WIWI8EcjzFm96vRow5ch78YA3wlTaWvQADcrd1frPf1me6ZT+MNrEdooyhHjRCXDboyAW3ow0oB2nDBUbDybpxW+fLx6/tnCzE7niz6v1kqXAXIoAO7TcNDDow6A6mAxwhd1nXKs8ipBWQbd1p2E0dNRE2JcgtN2f+13C/d0OV4lXwXpRbkbluy69w+mvWTyHAV/uAq+qr0kkIUNMcEG4gfMLEJ4gMYN7Mq/vWx4QAYYKw8fJDFM9d6RQ8XQ+69NC28BIBRlGgO0VkpGI8cC9g9fqgOatGwNYJseGlhV8mOF8GgAmPQBFnCqJ1tsOZFoHkKDDE4KW3+hXZ9jFeJ4W0vTiga+tLsi/1WaxF82+hiluI9VcqPNcZWTwcKXp54LHsTCuC0QVurWNSFDwxla6YBMARbNtAKnzGmvlbvHUfNpcvrBJymkjZnwrrSSzNuqPIVXdaz7iQxjQaPI9Fr4nWp7xvzIJrWB7kNTYux621OnqlEFaBRQwCubK3jl7LeMJTOc11YQ6U+Evxr/RqqNRLvVU/bKYy13H/LiWfGzBWwBMgxqADBw0MomQzomOkyg3nSRk+2Rhi4dn+p/QKw06WiY1360Fy3DlOMIW2wV4GL0MB9/F0HHeT235Q6ouAAXIPPVIvRxkA3aF+ogOHgelKHF//Gga64mwqKryfIfOfZsZ/nZh0T5VFw6dpxbG2cnNOLxfSaSWcG2mwnn/R6e1V2ZMKvOV4luuudYgrhB8VqK+XSBTV49jz1p2TAKmMWio7b90LXxLHXKWJBASfcIVixYPcC+e8avVl3JbO027kSh5a6ZD13RXduftUJVUdBl+cPQoEFR4rueDaAbR1TKjbLUSn7TOMvVNZnVGbxKqpNKvUDRhNkcIzyJTUwEGEm3XmTaYaPk2TeaDtMdI2lF1xbiL3cfj6MXkUwdbCq5yIMcYvIHyXNNKMXI5P5ovtXqggHCDQ0PvUB6lh0nGoVzg72zx8FBg4VFZiM8RUY4Cpn2+GIzNR9+1HxgDhYKVVaiygfRyDwWCzQzYl//2md3RDd6okAwcmhBj/93/8Hxh0A2Hgv//9HyrDwQAt2nCxejFUmXk3eH0ZiJBeseFAfk68jom1edUxvCuN5ZutmReVR4SMxr5iyA0aP+8Nggm+MwRvYPkJr7hDpdhh7MRxjDAxwBC8MuNVBK98x5sI3oQw5bC4AYofLBT3rAOCMYDbDXg5Bm4H4XYIBhSvRBhvd8HbK2EKIFx81EVCevbaeJri2K4qIABzqCxjSBdjE6wRdrYW+2fFNUV/Nz5fliA5n4LxZoNKVPaoyk63i1aUFYhMhMu+mAJbqPn7SFhamDmHr9eQ1aHGcIWm+Lh49J6FBVYpMpY6G09b+TwDuIsdCZ2Ygq86xRQVkTruhcFVYconOXwZ0+AMUvfNyEEJ+pRtaXUSN056OlhwEwHwfaepkX5uuJDcQj9j1k/na8g+FBjXbKMaNkotd2qy9V1lRQoeEnWX/LzWVYT6Kobu4Uap0zhU4+9rbCPJAq188qGHDcX3nQxxlovyaoXCe1f5wuqVpT9hNOFjt+BKHxSBnBB7A/bV7zpmfv62rW5ZhAFIEZKawOJ9rvBnxWn6VuvPKHnLgivtSWlnkSqv1uQK+/Y9rSD2sVnzn4lJgf0DTe/ybvOvQldfl/X6lvpCTpU2IvqgvSfhhJ/S2hWN0e7a4oIrkcpcn8aUCm2i/L0CUw2UPtAPl2jbOaBuhhB45/Q29IsUcuSZRtDyiTM8tS8QM1Cs2bzdTUdO1dd1Yk+ChJb1s0nuqDpuA7fbDWMQDha8iajR2fcD9MOAvAnoM0N+etUoywRUiQOPmnnIJ/5MX5JuW/4D4KmtsVSkRmyg9oTuiho90c6+8S8sd5He28yvv7fZH/UlPaf7El0YZjwqq3M9lQzCZISkMlHnk2VxBP2JJitBOhD3l3lIxKGfMqcpeIYefomHLisLtlGRBRYBwsOD1UtED7A01peGWxyhMHDhJix1DZe6RwdS2CmCAFnMN8JU4zR/I7XjRalQ5iXHXpbfJU+p5ywg7crk4/zhCiNJfPMhs0/d8BeL5HNFC57oFw+fnSfqlbm5AGwNWPt5SOdHMu4NslBX15I484yxMGZXvNHDozHyFE+f2LjYIeYx8LehSsqffnnV9y+HWRfmIWwefArIXPBuY0BEMA9T2N1tXgcy8gGQTNasu46h4sVdJgYIt3GARe9dBwtwExxE0Bhu3ROqk7Cyfhs+lkzxW5b5APAPzvK7Of4m6czQ93l2qRCTKqe4Atw3ZlgYOMjW7GoIcqYZHbel/7nQEuskPUY8VLorDuyowJIbZaU3ubgGoewnKELg+Z7CF6AglfnTnuk4kRv5hCIxh5BdKVcrDXJY1rr3t6BV9AeV1lViTjkOvNTt9fvapEPprFgo23AtMetFEvVCBIxI3tTAaULD7uNW+I1oX31NkyuJsx95VFv5mQO3UYiHcE1lrspQXqEjFZjr73fTZl2tbaxZ2rIpma+AC0OOCTI6p5zysI3MATU2ofP4iXt0GB2zeayH/0QCgR6MhrcuAbjdIuQoPpkhyE+vCNdbduOkuq6SVwV/DIso0tCSNCD0BsrJynoEID+5KziceChpOSsCyMvCL/x9OcyK8e8TQSe6u+GvK81tz8u7zaFW43OtikKDALh/cL5Oqid1bFqmBVcq7sTcPqC9RZQCquf5CqyO+dDJjGukK+3+W6u7GyZ2MOhyqCtYuj4qTcsmTz16wH7OdOOcqL2ic15xWCS/16pq9THt/WGSc2pFTjCJGW61xwMHbvAAJ0x3BJEyWc69NMn5AhBe6FnXMg52iF0NGnQs1ugYmRJ6MoNaVpkQULgFIMqDlTDDJOdcZIpNl1dGzGm0TWgKMPU8d+W5/VnI2tjniPajr6HssnuQBWUUH2uYwqBOHuwg32nKCFoEuAvpAOiAGwTEze7hZe71W68l4aWAu9OffvS1rvVdkuXzI6nI4bt2Hu1VL+F4DM26CmNtPjoMfiI9BnWhY+/VtcoKCx2oCmwg1/nJYGHhCWcYHf8bCY7kK2rhVn1LIL2Yiy2jldibDMLoRGMBjWQV4Y96u9maGzJSofHJq5p+QhzfrMrKk9eDvzogdR9bAaj8sOyZ1RjQCYqVNa2aEPAKxpsYnWQJRbJfo+rKpykRXAMeYUKgRn9k95GHIsYNPc3LnIZgTALRZ8WL8WLlBJhvmATQ1GMxGko9hjAO0vuwD9tLMEkYIJH3B9lf9++tyjIN107paRrDpQprwoy9FdPAQWpkMqw/GoGATbxTT+ohgimkhsKS9I69DR88Bjw+tYdRZ5mYIhr3zUm1R9sSV66SGWsu02xTOTBxYGrsKvLIgmt252n2+TaSXwqD56vJtuqhPyPKFDDNIeKNGW8Q3EVwZwGTKb592Ktu1+fd/yPgoGFe6MojZOqZkQgiIJ7tGCNCGYuos0pb6GZUZnJu3sTk4+wK8uKYwmRGAclLc9msciFQtqYxdSJqrK3HLWLG4blOB8tiKOhEiMIONsmB76VdbqrKcx9Tqa0jrEqsBXLnnciLMhmlvBnkhFmDqCEAnxSkNY3E2/MoLVsoKRPfKGbJk98Jq/xUzmEMb5KBFB5Q900hL5TnJ84aQLXzQqpZG2w9b41Y4u2k4fRSbq1Pcs1lfdTaa1NcFa0X/P70tLVZGF7Mw8IDZa2DSvsVMDrDUHFsD03Wuf5eUCI8yvPBaQ+bzVPC3hj14iEPnH4HOFeg7jIXfumwPSx/EhDk/FLqqFAv5BHm4FGarJ7T/rDKVVm+HROHNENlvrqxslQkoDboSRQDRH/uIa78t9V43JSfzXI93Rem7TQ1dLuSH2sNvQw5n8Bm/W/QNMp/AGf2S9V3jLUyXVMRcaSWfSigX707y3yNnZH1ue7L30mNLp7W+oP1fgLxncZiSIr8ajRwlehP1W5E3dPntsEK10XGKhiEiGx8OiwqDzVIvBe5w3nWWu8Gj1ZI/kxfn564A/2JtJm/6/R0xj/TFyXBu25AzuBI4OEa815g0d3UUX43RpwKtGxP6i4kU2TR90ITfoQgPCB86KaabTNAZSNPE6F4iw1qChRBVkWJtcSBWDL2vL9d4r+vSS7I5u8q+K1M9SO1PrMmNhWX8XYdTt0oaUrhRxmnGnJIlxqLDGzzWd/HV0Ef4PTmaYc6kbfmkyIYCXQnCDRluyusXdEnthHtUlhJVVirGWQzpOvGI4unCOAiIpkXf4V7re/Z9DU491uyOhcKcy72aFrxxQVo/66F0qN/I4i2DcOujcTDD7GZVsWC60VUCpRc1suKyxne0/rmpxLmsau0i22T69WMrMo9y2HlilDu3jV0hc6xAChD64ZHVrZBMO87QOkxEUAaij7DzrH1dwCHeRvisCnzyB+intJwL3QqPKXMZSjU3xEO69D+6ij9HsY8Aojy4yHcvgbQ6B5B73Nk0jCbAgSB1qE0+nLswUx67K04fSqw9SAjMCxEMSGDe1jVYlq/4eTStziEMzwlXyQnz0n/p1jdN7qP/KvrqZUtYJ1BeTzubVy8f7QvQ6dCm/ol6X08koR1M0c6RO8g9RUverQ/VWQ5R9JubLYFaN1W+e/XQPQhqRvLr0m7TeYHiuiD2pvHleie87z1pVJ076FZql4YS75ba9U10Ls4LB6LFuEWmJ2ACNzrZipqUkPHgPBbwrho0qhU4+H6Q9O/QTc/rKHSWTHNiNoqqYytbEmMnKdfFJOHO14GgqBehnHCRij6DcSVQvIWdIZYBVHn+8OMslSU4BQBBamgYIFMUw75JahFeSd8L/Pkg1DVku4JeOQ7Q4JQZfg6tShJUuUWAcyPz+oJAPHl+4Y9zfit0q/Oen/TtMokK5P7+NzsWOB1xndA+wK8uBZD7I2U37ZOehnCXwj4BX1P9T/fXgtgaEN3vvvcgJfyuynZXbZxemRw2SHgIMJtCGgMvJqMSm7capH1MiKKlo2oO8Hiy73nrPCFYh0Syg6B0VUCiN8g40W9j+1KKfWefgXkkypDPx+qmC9dEhLIMEU26b5QBmMQBT0ljOA3RBwKdYEa3Ip3x+ojmx8iqJETCJAjoofIMXEQY1pUIplH0j2/T9sVahDQdwQZwP/zj/+Jgw4NiX6/gdwL3OfIlaTCGm+N7W5ypJJW/8i29mTjSIH75PNi2wRGOi+MwAn9XfeENGfMp/KeARKNJsichmmN47PeMx/KcYfP59hkThYLnC0CDXfvDiEGu13/weJKjRH80Om7fmOw8SOt3o1AATgXNzx0xbwrKnx64lMsagDM8cTxI2Q2NbLNsr5eijwpChOZ0QSD4ioyV/aDduRGbPkqjort3XRdlsyNEdc/lHHJHQV8PICYy5YcxUiKQYJ785ORqK89haugPlHTSvYftd5k68fVSVzpJ8vndwB+jt8nRevyGXNSPiM8fSkV4uhKi0vGS5Yiu++F1i/tf3HaFb+q8p8mjNCH635q3P6lU+0oFTyr2FoXx26R/EqD9XuZk0dk5PcC4yntadLvM/36MD4WyzfS97fc2xUBxyPLweQtGoRBQx1Xhl411FbgQ2O0P9M/M329Ar3uKgV7wQpYNlnXW8E/dmpi0fmtLO+/Bd5fDGN6dCwMr86RK8dYcqcpqXiJ0Nyu0Bz6OUwwFvSqOyylc+adZxcU6rPqtYzi+bHy7KZs8u+SPRMEwXGFQPEzKUTGBf86SBvBsWsjlkFdxP+tpeTmeW34iTl3r5veFs4Cfh0WNyLwXWZrx4VKraQrYso8ZmWlD/adzXKefVNp2+40XTeLbnvnd9BHeHckvvlvAj6LgGVmxxbycNCBQYxXu8N8fHdL2Ek07DskcPr7T99BRPD582fNf/JUFdzd61MA4TvuYQCiFbOw1dthaZMRzzdzHZy4CPN+AP1X6D3o/2bvftyU/zXSRxQlMSc+zn7gTEiLYffWLyH22U+vCOmVV45InBZtkNoNPfJdQ3b7VsfOlSi5+vvILohlfKsHaM0xofhXQ/qLCAYx2O5DjMpH0i8Aemjlh33e1Thd83ZsHCs8JeRwO0YKktmOlhK/vKHAtzjJs1fDpkfHn5lAEepyQA6B0NBDG76B7ja3TNCw8ALIBGEWes9QdZCd5sT8uvKigkoF/jV9AQMM/KnzVtv56HpaYaAVFZDjuxYp4/8KDbH4yYdM1AiNARqGH6Q4m1eBvBjN9sghihsyXg2v7kkqyaRmC79NJQqBU3PlTm5QUdZcgOqAc7eHuFFmuhssx19siZhxBR1G4+0wFTNoQjfGKmtjUaaHPOIoYnwrisI3n0nPc/2XdevJ7rHs73FOle80uaTUR7s6HAa/d7kPp+P+nkV4hynb3Xlt90KnPgR4pagejOrLNOTXL8Me/HVp5BQ2WEqlFeef1hKd0+NSJncsCuj4kRqId9vI5ed8RBaFObXXmX2lGUjle9BThNd2pkrMwzoKgKvHE7YDVJTo1OH1a3UgyKgPV/0svMiRQDVJD8tdJb/TXsI51Y7FRa+tcWVPRCgYBX+dNlXWEgr13Vq1NuFsjjppSBYeazBJhfR1GXSDSz8EERUpFOfxD4Jp+sTSYeMefnCQMP40+TQ+FRA3yjmbZsg7nyVfw+2YCOzTI75VeNyujifW67Nc8XS4trC+j9Sl9WU9W6Do6uU1bKtnz8nThzqMl8Nl7Z+nJBVigj4mtTtUaX+pKwzOto1mXwRF7FushNftqhidkvaCDFfPKJDNl+sytn2ub6V3sKzdkLVDJvf8+fssIglug/ByHAAxJnzvSKmYFPVIJfLrYJzyUWwfhPSKNvbxhYUpLaxb34ndb136EnMhIH5T7+zDolKIqTMlI7hoEYmDS4hAptHDATNMHdFjJY0W+YXyjyi95B0n3JRnGHmiEMAEmEqhyGkvNEy3EHBYRIFqqyqiQdKmwAxkORvCXWGDx7TKforRPgZDZJq3tZ3niNJXNtLYnIAFoeDHgHrtDw1bP4WBCdxp4ggWbhhwNxrrhseBUn4fvLEW4hgfHTNXisNCqguEFZd1+zkNxsM8spNtiOgJFQSYMHlbCLgPk3vJPHIJdHvDYA3brtGcJJ2tJ4Xx2LCrvlhmcPXBeW7hURscdzWILkWUAj371uh3RDk7ZIKLflAR032uBiYzZDAmE3hOyBBMW6CxjAC4F11I/VZPXKpFNoe25qStea9lPT1bCYI/dYOHYiRubYhFRBCjG2KTxjbvUgugOu8Aec2hg28XONTrJrayOpJ/n17seJYsX0t9uzPAoCn1vOzM8wU/998bZtn776AbRRE5vy/0V5wAele9XFbUPoOyG6I0eFq/l3HbwH3uSCm7jpulE2ffje3u3RaGy8HcT/vS1KrY3G398mVC7qR9ny4G6jQWXya3f7u068UGJjnnlXqPQXSrMqNyztDWxTcwlmkTuwCxlXtX/D2v0ZVmXML4HvDvvH+sqE6ke5jtw+na0Ujehen3kDbzfHr/ldUDSbNWXJfkv0+nh0v7Y2tA2AwG3cDPjTQHQEP36HH2l038mX6j9I080Jclu+L/FsHo6sUfNm35/T+9i3Jqx7dMTdZahUTf2fnhsm9wBulnhHJXC1gSVovkwRg0TDCWbL8x1gTNdkBW/x2gw3a77hnpMOSmO+uR5bOejEhU703EM0qQpPbzIxxxm3WVQDf5PsqgrGu+903F4UlVIGIAACAASURBVKNEWdbnVYrlkjij9C302oc96Nm/MlbOaHw3LYLYYcO+h1JckOHAyqdHJyCG3q1szbkRRWtSGiwn6F12in+bNHQ+t0JgReQhiG26h92SKbZvE3uPs7S9qfX9ZO1WhXk8333/HSdxDzafW7LoFRbiO+bQvOTYL/rTgwo7bUE7YdKKkTgpTSi+Ej0UszdrEUbDLjc1vYbdkR+A8LQgqEKKvF77zvDDTP2HiE2/YM+ZLIKBN1Nw2j1BHIdiiCjzb/lGxR/K8Srvw3MHxVDJQk4KmecMyJQodkDlhHfc9Nxt6B3pEmHsxe7DPvQSx0lQ5U+dP78TGxu48PxyeZiuaOK3ZLA2rj5HtLx7ryxgArDRuTmh9/NSeOzoIZkdeOIo9K3evuR0LPFEfzrOuiCtJQt2YcWJNvaBW8lptd5qLFQZ0iiiQqWfaYSVMkD5FIO4Arbw363dTPS50INqBOC8ovL0dfO+2/xUo626uCpMje9RgaGMTak3h7Hkj/Zq46W991C4rG9/5HulQp0a7QtljTdRQoWeU6U79RS/Pi8ea3BuKNthzRovOrbQsct8F4nWXzEQdM5jNBvQjWYFgkr5W5krrrVIKrEGjkpB4fK0y1MrjBXNCbqqsXnueafh2UHbIdUy98TNaFHax75caSc+xdiyMrSW25cmV20UZSQSVXbMUrlkyXqY7AvaI2yIhjgGQb3HPfSoiY6qu1alRTyLNW3gTTEWyRjm0UliHnXiJsLeS4ESWSDkExjOGQ92P0Pxde2Gm0G7uNS10qGr0X70+5wo+P9Fydp///0NWNyXsWDZNv0tOe670dL+aanwgE37ZDSh0gBfjZfbs0JO37NzebiGF7r5bZLiHU/gEwH/qzxueRYi0wyvgtdUuaLiK532rt8fn/DD8YLPmCB+xS+YYJ4mTmfdbvwefDVJCUB2HEF6PzaNPFIIb24BgFmuMEncdZZBIuDD6mfBoE8q55sClmiEjRJB2zJROe3ECcDNyOibh3A3IG08wpOcEB7pBA0fT/QGPhyHKI0pb6TB10nvOQchvd4X44qkWbZHgSgt8/2/hTQiissrGk4yZlGeT/USluQFU1Rp3Y9NKGURccMBkw3Mq/8AQ8YE0Sx4wHB3AM1dQ60on6VBILDtuXQM2K0F7houn1kh5QlVpJvRFsuIcOCucBdvMZibBBIwWQQYM0g4PjEwCTwFczCIyZTuOseT1PtrDECNrjzWjMI8PJJeKCz9DntdCwepkZ0r0AcRxvBPNbRL5bkPsBnDmoHo5Almxpx3MPmRC5ui2scBYfQQfNe6vd7AF6HJfXI3xqppQuY83o1VEwth7x1sJwX1Rjv35FccA9gjTGwJnLeYghEFvy7tVcEqXrzD3errzXK6rCeUxGtdJgct+WXJ3M5d/VsR6PIIVWwaamfzV8rf8gTMy+fuZxNzHmW8SE8oz6/L7urB/vOyDlryPhCmnwBns6PoGf7VkwB5TvWkELOW/zN9m/SNxtJpU0Qa/EOkKzidIUhZole7k4s6gl4sNGtHe67YU237Kt+XJGeWDDVYEeP/kLy7yERBoaLXia7+Jpuo//Lp2yjQAaQGEOcTnJq+0Lvld5dWYQcofWtiz+nnr5KceLqQVgXPCpPndUU6u/mtSurCEzIH3HFFdx0DcT8DkJ4rIZGZgBxEilWZIE4MCOCpB2sz7+7WUuOShJ5fpOc51/6RtiHsG/160LbWVwTB+vxK4H43rTjwTHJGB3h4dZUJqWdpcJVNiGQmsQ2jWy/VfKF8XjcQjXNI4oM/Ygnv81Cge9QC89wWx50SDjPvPRdTqAoyvp7W/+M//oE4URW9f5zNsjstwShR6v4GAOBx63BbfZ+nhkX94fvvAQCv5nXw3XffASB8/mye7C8v6mg5DhwYeBnqWcwy9Z60exvs5TueeG7vCOp1XjX/fy3vPmpw8XSiBW8XJD7h9xNIbnMpFrpb78nzuUPgCgBgTOuiHcaLmPPegNhdiOlAWISi+O70y2GzmAzBZpb7lWSdr7VPdf1TWz5t8+WHXW5QNFn7Qnc7FGI7fDFVCkt4mujYHICMpDnusDhQ8N9opRsUxJ2xfoerA0IL6JTrKebDM5RTDEjvG0HbEFca1btikfM3bkrTbU2TG7/QUF4gDvqAtDU67KCDgXYPImVbK/+5nKP38lyk3UHHMuV7+l8yL+tlDZBdyGx5bH3Uk0BF8zkx7m8QHDrdx9T75WmEAkun9m7sSSCjHCwyzAP0yAaL8tzblhcKnQ99fkMYtVX4+mWnKaMB8CPNWLPen3riFh3WNRtl6Gb57oBv0EKZLYi7zys/abwG+WznwVoV2m2eMm/rK5B4VptZ6YKseYxPxmmjT0CppOKOPxq1YcmhLmAnXEHo0BItdRaM098SSzkOV62tCI0rNb/+/OGE52m17PQz+KqD1+hhVkhW3slP4BA5Zf42Qi1Fg1RA2wBVcIgKfSS3zHaIqNZR2EvIJ8lbNBvFXdlDJMMGQ0f8US/rNKwkJ1fOUsKDsxQ4utFeQmydxerPDqAdVuc3au/CAZxi2x34LhavWGzN040zHj1pqFtyS3jbyIdcFtO1rKnolPFsNgCYYjsQ8sBEOIK3wRQUrz5TwEQTYmTAe2NeajGoQ5U7xpvEEF+agpzjM2mX/S40QsmTtPPaRpN2iHHxzMSHTFeH9ZfpUaOlqdUje1fT8m53T7h7rX5VKmjcb3sp7e3QXoE8530mifZHThU7ApXvFaYNDPra59t/pawwSubYa1PDlN6XqFjL8ek9FX7ozTrhdgjKvPiz+BmMb3mflOg0mpXuVJbnv6sBaBvHWsCeN4MIwaADN1Gl3j8wwKx3lpJppBsXpfxzNhOmSxIkJDyFKe6tNM/baf0PPmle6m7UA5frYT4DGf59OLwgq5/C7leQ5GrYDwZwsCl9jQYySd6n7nAPDd+tLJPNo9nnRXRvDVOuY6pB992Ur2OoAe8QHBg4iDAGgYkx7D5vAuF7vGCAcP98xzDPJYFgyMCQe0yPGHlUj279bwpjqkpdt+9iik77W4MYEREGm6zi8yMKJ4ghLBh3DvvhJjPAxd8BkQHIHRHGnG52DqR9msKYU4CDLViLG0UxCJzRB/xfyYvCWKCwCMCvGvach4CHYAz13Hc7MsLQKHVjAlMV0uNm+75pCADBIfc43gCg/Qw5SkFQpbnOkyvOjzHKXA67i12V54Nq6P/CrKFyiggw5wQL4T4nJunegokwhAG529ZNwIfi3xDEmZj7Iuoy7c4lk4y/etQr3+96dL4TUbR+Gy/kkK1iR1DkHYscQIizuWnQhCN57ENSHol2wxAkaYk0WVlyUXbo8lkAdKZt7ceunlCw9EJp9FtpV6X10mBo7yXHvhM9lPy1jz2fzyF4S8EX+Ne+AoAbH9Yn+m+Ouz0tma5akgrj2p+1HMWQtTz9JZDC7Ab3NlO9/Xz0fYXd3xe0iSUtuXaSf+7qWnFnm+0CVx+9/5K07j7Wd1dw+d6jy2S5v3b540k57DTAdP2+tbvJu60fwNsb3p3oL0kPq1lokKWAvspwl/XIfq4/An7B1VOxAFEWmH7NdLnYv6K+XV1Xv897mWfBaBE+aqr8ZyVujyqX5UuUPeM5uWEbe4QYNn67aBqpLkUXmP9Mv0X6SgW6SX8AgjA8UqL/V5znJ3nCP635RntWaWdlbK5Isd0W659M9UAJ21EikLDpfwgyBiBD7zCsLbiylRCekCGwEIHHwBgDGtpddzVkih0p8Lk3AKgyhBRiQ7kP30pTxk8LQf9LJ8EZ3nsTeaK4X9jes00sfXJhh0XDf1SjiKcZun2vyg6B4sLkFOCZ1csSNr+BV4JUmnPWK7N7oXtbbk7tynZoW/VAVqfvPLZyOnEt4wAnO9JynMJxVp5GpGN3Gh5RBiWftB819OrK10983udgrfPi+zdNHxB4r8q3766yltxQiM83p6LYs7Pd2eI4RPWe0ji9OC+rlU75XeOiLVOLt2VwVWVbVEzL99rIo3delRjtY2DcgWPoqQN7uG39Izv88HDzqvQyoUag+ca6c15OpeqX5hG6EwSLINeEMx9np4glA9k4uuTltNhP9vze2DtAx4udGaWroNwHBPf05LBDOV9dBA3RCXlDrg9vbxUCNunCK+9DiZbP9Xn8kP2795rfLaVokwAyBbkQhBn3+x2Qz0o3jwMYh0YlGAdo3ACQeeoAMhjCR8jCchiOySz8q5xIVvdY886hpplZ+vtePxudoJY/vsY0uoeI1hueo2vkh6APjpuFp5QsjU+0F04r/J+KyyEMZNl4XprwE+Pc4daX+b3R7YWfbAYs9MdUuMzaTM28VkX2wwoOH84qsnjWuEu2DMEKImAKdQrlefpL9gr1wNZVxdba8O9IUYEKyCQd5Eq0L9YdbZFok+oaWp75k8NCohPce9v6R6UVct+vB8eLIpiSiycNFvpn7dLKnlp1D353yQOY0Yatk3U5xERdE6J1qHc5XVzJQmlq5k1UqVmcRkudU1F6bpolimcdFvEGAdAwj3U4LSLbDxhCmcEdwtMcufRTd91ZZF32Ze2SrGrCCTcwECdK1q6HmJW6gIIm+Q2tgF81JJtwlDFPvgjayD9CbsSipsPD8yqfrekrOd/T6Qq7Hvfmnf49TNK/PVpMNeODPA/Z+6med+QOAP0uE6tzhUHWF85/zgBU9gRcj/kDgKChmAvLNVq3hUOSDgo2ILWDb2rA/fVFj39+nG+lA1Qmq/S/CgLxu/I2CVG9yh0i6p3sV3sd1gTfALl3uS9MYt2jWAbynnH7K91Jz2+jOxEhK3lpG5hDQBaOffALiARjECb0IMzDJ/toElR/q2cVGlIdUPIyhkDmMPlfUgnvynMqdkjQfcuw/a/fvw4o2YEQaCjNGgQMVq/1QzTaHzHhII3ocQjhMI/oAVGl7J1xDMEb33HggIAhxDhkgIOnpccSiynMLZT7m6giXafIvWIpv8dMUwT3GOwe6QMDNwiGRTEp8YlGmTdydb8bVOuIDb8EhQ7lIdaSsMI2aBbF5QyMc2cONi4upMYSbLwlWImoYcAcgjmAMUy5TYJxCA6HcWj5EU4XovI6A3IwwEfgvrIIyYBq1utxqPL8Ng6MMXAj0ivoxsAYhBsNjHHgGIRjHLlvbLKWfhM5AGHMQZiiME/SKDlTGMQTYAETq+Maa9QwloweYN3XoZPyBzUoUH6ng0vk3wOSyxTiNzpZKgJG2MgZy4eIYJrhCckRuxn4mik0p3ENcWxa3rUzqwW49nvXgQKuLGc+dcAsb2MPdc+xa+Rq6LbE+Yn87z27KrtN1YByqa/1czU+u4Dl0ecOpsu5KDwnF8GSiZYya9kL+B6lzRjo5zt9v6xvN8G/RXoWhiJHbD8/mp4dqGdgunr3Ldp4EoyPPK9ZpO24HtSxr6zuQS/bKHkfNPAbpHVR1efPpI/g3ZN1Pj0chTaewNjAVeXqZ5ve1O0RelScl4hiyaROfblf72Mb+90/02+WvsEd6GWL2LxHpLzfpH8VT/SapIyDPrBPWn7+ygTu1BxtvpeV7UIiMzDviMDFcqh1NoaFdc+FjEG64bWNcsogtuBdke77frfAF+gh8UGqx6FbKnas9i7M9fsp/R0DYTWuHu5DN2Rs92F5X+sBWeCotJ+P05UEXE9MdhV9Ab4/EISb21hR2K268LXp5awofmsIKSPWvvvxjCzqMWBhvOTvDPwg6HdIAhmbUxKAULJ6fdXTUvDd99+BeeLfjxd8lokf334GZKo1OpSRiAh++P4HAMBPrz8DogcHEMZfvv8eAuDnX37SOs3YAxoFD/P1FQDw6btPyAMk4GYeZ5PvYDBe6IZBee0BDgLuXPpQ+tvmR3I866eUB4IeoMGfffx07fl0koMfiFwF1vBeqvUY4GSn3QK4M4DlmTlGEMWXMSzSt4cKVuUhYCHBx9ADdV8vxcsmJ2EnhCViSxlAbbrAcBoAKuNt68f/Cl5o9dOUklQOUwU4GIIBHsMi+RFAA0zqZUD+DGKuMtaUWJ+JIpJtnvCJZ7L2xzJFVNZjqR8+Ccv4NIONyputbJjBW1QAOXQimUAHYeDIcZyskUIGdK7SVQfALDpO0YOxcQdkRfTdPG7SlTywZaVli9Fk2NrOrr6tZKyp8RyFR6ytbMJobMCUc+LCrAhbtJU3hMEQ3xL/jwGhCR6EQRyh9NkOVnGQuXc4TtarD/xzJfKcdwROyQNmAGjKpiqA5xUDcY+hG3tA2liQlZUq61n/9aCPkIYTt+x7U57Xw+lYtZ3PBC0tn+07yjopPGdNlZ8Tt+rPbXknVyKOQo/yeZ53UtShh48LiD5+DfbahGGMHR56gAp9nV7RPntU1rq3F+1and+XPlWFuI5DbuqVFOTxfjc/pIZhZIpTPVf06028TpT1kBFFtiLSO8v7vZd0emxrEWIhYCng9zaT1DrOmXJXlvquWOLpGbX3NTCerxG0v1qR87eRfdg1crV3uIIsJyo/XMsUA3BuSHm4D4TzKosoIgzQABEb3Tfe5lEXgjZWE0UqhNERJhFE2OiaL2k3po2T9vJZDG1dObbyk/ROdZ5ms0EwmueKFVujUq/IiBHQPrgWv2odVv7lOD9qnt1EnMeazAsRIrZHkRP56QW8moXefoO01hhQh0z1zpr8YGOnoApOG6/QO/jDQoeh61hJ2fVv70P/0us+GfWt+SpMkgpcDhpY1toCLVcZtlTV+B4lzNl0H4jwHzXFYJivhrLcS47W1jYqnti1Kz4+IvgbIe/tbny9MrFSzXInbH6rPXDaK1FeRBW1n20POKDe1ETAL3Tv68iNPGOQEPzF0caPDM1eLFmqiy0uyvDCqw+D0O2XjESy6P3Wd/MMn8aTlYQafg3SK9Bdkf6jKrNpcGwhqrLcKdMggHiAMG2rcAPhk9r7xPQYPxIdz0HAwMQgwp2AYyjNGGR3an96xQHgh5f/gF+18fd//CeOMXDMARkHmAYEw2JlqZK2jhOLhmyfGJg8cRfGNKWrIOn0SgbHjYK/zOksQzcFQnYtkQWgEjJS6bKBy7J0A8GUx3LDoEMV6GPoH7Vb2+HyFY2JwQNyEG6Wh0FmxHCoLb4Awqx4PdSTXm19BWMCzGIe/KZAZwbDQ9+L+YsQYMYMvqcbPPSZqOEDjwzMpSK7Ggbcbgdux4GX2wtux8CNDvM8J/M2J4siYGYDZQ8YQ+18TBhskYPGHKCbmhHOARwseq7FQxXmLBCamIM0xL3NI8vCXtl276LK/ynaLXd7ceN0J19NEjEAfafTqVcaIHp/SOr7HRez80AM44VOL6JKpDFcL5ZMqjDR9QwvB/TUslaf+WmtR7Joymm2PqRKfW3mrPiOuxa6fAJHOpxSntXnrFDXscq+9Gpbf0oerXOVL1uOmNsyo9mD0rcWbr4aLeyGO/q0ebkfrvOz9d3u+TswONos9hqlDOFi+s7VnZTsDxr/Eg/R3eHt+4XyU9DnJfajjlgbPEgLuKVtzR9OU1dtn+a37L0fDWarxhfde5uygnvP1H2iD+v87RqT/fulTw5yiLf2dpXoIv/S0tUMn3Z+8uidPPz9iBb+/tLFov6ajclaZayNFd+fHaO618VJXo7xf1bP6TochhrGCVs0GT2DZVKdm57VBtPOst9s0/Zn+kj6OgV6wxnKidzR4Jaf9u//q6RKZb820UcXj5P6BykUhtM2RG+ADAixXoVrpsVxnaIpqunQEFNNeS5AhN/ysOLEwN2Vo9B3N9u43Ux0G3pTVTvUolGUVKt46ptdrY+GKdDtLkfxQ5sr7lUZ8aUg9ySB3RLNb4noNodVie4HNIJOXMepcNZSBNv8bsQ/lB8AsVo8i3sau0c5xHetUY8CURTNBlCE7GuMRsuqRx/Hb8A3cSnQtdCjNttxcL8RXtPvyn/5bynPdHOu0ZPLiYvATmBqvcbALw9Od+k3FFi+KVOV/BNBKMtaXEVBhp5WhWx4t4FB4zBrmSMs+5WIIHTnNZRyCiALJJavbxLrwt5EEajuKHGy5utn01ueEKiFPw6Dic0TnQ4lfEZbxP7o0LB8Mgigm/b5sHCQ7oF+IA7+Wuf8NO/EGJwOdzjJDiq6PnPDdOu7qJ76uBZ3q7hKQ8SiMXCWszsWQUiP+tK+tDggpwlY4HuQ3ttN1LE45X0P4a8ODzwV127x3yh44vizqcbzqIsFIOaxP0yhPuzyzUMPOTFukMGgoYedGOqpRZS4RXPA77OUFhLTxnPcEPFX7q8FJuWhw+m5PzaE0SxJ38hChvpGYKWUpzEUz1N4qnyyL8XoCOXTKmx0Od4V2u58KArUaA31PZWoJtnvBNyeo5R5FwUzwwVlKMdKPrCVL9m7SlfEYC1LwD3S+lKknFqghK/2tVnBMO+vsr5/kHh17kOpOFXkBL+t247ZLccINidkpofCcAW8dllO/WmNrmTs/HOfjCZnXlprt3EonjR2OH22xC50rdW2T/Lge2BjPWBe3rqU0uGVbmj2qLEtYNmSX+1TlYRPUdTaeSgvoYM61GTKZdcCDSjfMwUCkcQ1I1XczCt2YIdrvr71gJ7cYAuEJGC9w+SIHH+VLFwNVF1zpLIFCCLT6nxBm3vj/4o15mm+Rk6qoxp0Jp+JZD1lIRTevY715jsQhsT92hqcUpx3VoO5JW2W2e8rrTJokxnoEvhcS8/JDNtxeGpw9m3o1JyfP6pOaWbiUUWhRtcdthWCyjJ2DdT+OPltBH4lJE04WXI5D8d67tf5WTMoFCwC5xZIX28iwCe7ukl87ydsd4lPrWsuxVdaWfHF6F8943dKSECIQRF+HUu+cgeD2w2RG7TA96XlvnIABFZDR7Hw3ELhwUzDr7Gz7YC1FOHbSfJPWOtzQy/HBcKiQDeFKcGUrio+qtc+qY75fldl+RuDhmAQ4z4nbixgZsgUjKFXTI2hSvcwfjBE1PvEBSwDkxl3njEVcR5TBE43YOI3gF6KbCIqOwBDw7jfGTLUq9t1J2MAgw6weAh9rV/vOj9ApFeoueUDk+8b7xYpSwd4yIExVB6kMQxVBjBuIB5hFCA0wMyJL4Apx+2qLVGP7TEIJIxD7onT4leMOM9S//YB5P51uHzrc6Th2Y/jwMvLCz7dbvj08gmfbi+4HQcOOhrbICIcLmO1/xSX3deAzSgscBWEeSMQ2xVoLBAmMA/wYLAMEOv6YPYYMMq2dWycN/uRjUYq1C27RbEyWxwPYla34EIp2bR1V/rlSxaEMNog43Mnu8BdCvJptGflry1jIbBPC0MP6F3I8/4nrc737hNen8n22wbIpnyW8zOvQnpdaxVthC7GorFiqWPR6foqvujb5BneSPC8VYTaQ/nw57u/T+9on+cp/Fp44en9yufeQa6dYUAr+hWSmnxJ2XfyXwpM/m4nT1zkr+vwS9IOlqt5/Zp2vjR9EE9/j/K406zfYvg+nhZBd0tYrkf5IZtZ6eyWJq0blk0LlW5+zYQvSnbyCG0Wwp3JdC7CEJlgEPxuHTWyU9lOQr77Y8zwv1L6OgV638X1FJsfyXxUn+P3SW2eThvG0ay8Hvz+VunS5WeXinC2zV5JjwmvDLsbCgjFNwhMGpIqD6a0vNRP/4fK92h/QOMYCnA3JQHZH1uY252g2izq1p4lnqnlMJlCQhX/l2O0CoD1+XaYfE6X38+kXZk4XXm2HkLLT3TanMRBzkbwbvd5Wj6yDYNYXiqHHhCYB7oRchaoYYUglSVdWd4UI+IbbvtN5YTk8GjSgp/wpsf5pohlZRf45fNnAILju78AAnx6eWn9ufP9bG2H4pFu7244Gj55hH8RVRmsdXx/+w6vY4J//mxdOaDW0rMMNK4/Y04E+EmAv5ZDjDrVfwXw4wWuyUfwYknrHsCf7R+WNiUfrzsu2PyCALPcV2XqBGQoc7cDFfUPuBuNGFmshp82q7t+NyYWGrVoH2y9pMlMtYZf5sULkJ2suRe1ecD4ewFS9+v0gBl6nzcQlwGSheKmoWG5iVSJaaEHhUVJmRkJ0IQqpYX0OmsO8MvU5mENoAIUtS4XpOI8mED0fRX4qKzlbCzuh/UmR+mrjYsKYoc+G3bQf7/pWdohOse3m5LuQQhryBjA6j1f6GQRTMNYIrKZQNpj+qGnd9ZBErTrPA/TWDaNyN/uEUPlAKGOrQmyfodwRFrBUN4pRvN4Kp6I4qKMCT4YGAMsxgOHKtdpajh3khHj52GLpcodTlf//tno8QobkMYmtkrCVSsXHFGuhzgoc+OsyHYR4tFJQl1/fCu/HcdkMz1mpBEkR2yMqyQhSQ8any48xZ9Xmlvb3uJFLaC/G4ZJhWHp30rni+JfFaYVjzKveoNZW+J1u+I8667Xq1N5TrUyq3s1HqNV5syMSCW5EgClWiPu8SVADdnKYaiucv039WG+FlIGLMPozZ2f11ROlcl/r1nsHy6Fv4tKydam9kFE8EauFPJKc3wdfZZI5IV35IF7N9BURaupaAHS8LdG/VrHXJmQ0POZDcvF923vU2Ee41H55K5IO623hzqxoNutCD5uBGc+R0V5Tkd+j+fo4kiSmVV+0DZ92ZHzlxohyVzjmv1M5NVMdBq0fND16kkzInQi1fwqn0jMi7voOZOtdMmj7PT2cmy7AY2U56dUhkVEIJU+X+3BnBd6vvfSlQHgowPdmi8LnJ5nP78ihXzzBBDN6Aj7Mb1q4mHdC40noEfNO9dUS6zrt7DNPW/xaqmXpWWMnRIzXNToCztJWMGzE9y1BYnHRjnK46TkCcDA7e2O/9061evuXvJO1P06j0KH69q0f//63Uvw8c8ywTLBEExWRadrWKlhm0e5sZqcl1bi7UMVz9IYiFhcvErbcofp7j9f9NnQOVAlth9IOgnlHMeXV1VKvn0XN9vp3JgXOoXuPkkBQY3Ova5hBmqSXtWZBhJUV8iT3ntOwCDGfPlsd2oTxu0HMBH+/vP/sju1gTFJ5XcakMG4kYRA2AAAIABJREFUTQBj6I6XkHsGQ6QJ3R/M2x3MGr79/noEp3QlP5EaCeBmkcMgoIhwlDije3WLMMBpF6FbHjMmgO1A2Ool9cI+cCsGcBTrQDDAFvGOnW9AjeWGTdThd6bTgYmJOwsGS3hV67Ky6CfQEOKxDbS8Mtw4sESG8f5RMT6ARgMAFHXdsIzcUIEGbkO9zz+9vODTyye8HAODSkQv8cgEGlWCl8h8ESHHx1rd0UwGZAwLzc9QY4AbAXwAwoQpOi7qie9jJhruXVQmYsdV1nJDABzqea+4WWTgKjQBiH16fRWiBqWxCsH2M4JBHrJdS6WHu0XECNokuY7bWRLye4SWqHzU8hsd0LlZ6axnTrpy9o6XJock9awRnpwKrnzprJha2YKs/VlTGWOVR+jUj8j3UKEqIc5QLRPJ4geInwJqTnJZ3uo+1R7tllE0WMmj/xQWcsmTn2PpJ9a81Xftvl/VL+c8spY/scD0RhdZC9Sy7zW+gWVb/uL3h9My+u1wuAmlm3KF12ItV9ZLPTM/1bMgvgi2Y/PeuflWvpKzMfL/z967bkly42iCH0iPTEndXWfPzvs/4d5maqokZYQR2B+4kkZz94hMKVPVRSnS3c14JwiAuPFpoFrzP1HuamjbNZrlB+fzy526T4BOe/b39GyFnfOzd9+BvjK8H0rv2Zy7Dtyr79HvVnB+Ab+qEwEu1rC2v8I9zY+xZPO8H9T1OY2GIBXoznCCocanxTnF8WzI0L960f6dPpC+/g70acMVICVcA5vIuwHsh0v3+Jg/PFG2TeXvYbpGGivCj58MZMyxbFR6h7QMXbz1AHLERS4kgB2jRAX+AgAHMLopogZITwTap3oA9pZDESCOdaZx6IFK4CEoNfwkQcZHF6syAF+54LT78c463UuLCCaSz3c+36Gwrsotb0sSdEMBIfGd2BQl7t0H6HpYbDASu/88YoUJJg/04kWcyjUpf5xdGbaeThjcBLpCUxw8jVYUhswPb+Jx+U7pDlG5euWTczpJYvn8IMH6s3DGDj/tunx5FpNlDooXvy8BMSCHLasUz3L2kzQyAoSdgZn0fQP0egXraET+tnbrQTn6uTJjDk8VvmqfnT7ZQBqZErsFOpPTWvqecFcAtpB+QwfQblBDHxtjF/Uq5p5nfGogNmUykYblFgJ6C2GWIO8T1L2gkj8KBboL9QqsS1Y5zYl7FhemSqZ5ynGGaMDHXpluAqTbM+llSho0xLupkQjA28AkUbl7sPd50aZST7ASrvfiwocPnkw2hxOv4h3VT9nyLAUOHVcGvRSoEt1giUiNw4jgUQyEBwY1oN/wf/zyC9AJ/1PU6ITQQMPxKCkdgwqYRQxH/35o3YcZMvh6+tahsl+RIRoBqBcLbC9UZXqMqOyM2O8JJ0E7PNwyAHy+aX++vM1bVCodqHPoNGY5FduzSacQdcwevlo/ZbmqDFgP7yt6KHBf52nOU+qqqGI1CJjenxFtCOvjt4Sil5Yis31d/qCKk53mEfA5YFUrImS+OM/NnIIK41EiFaDuRl0nRh5H9Q5vhoBM4UDTVF+yM3R+uHmUPZz2WOn1RIv2yfueIWApFRub/PNSapSiOYBlpSs72t+QV9YAAruGYdqE2Zggh/cRucbumdQfrhyvE1yfre/9tyvKm9EqMnxjYdvJr5DwvqMuUz4U34tugFCvQSmMlf4cM+ku32cPU8Tc+Y+gYZIzL1Hzjp4jJzzW65pnJOL5jeGdIBNVYFyHVqdk/S3e4U2biXRjmnN6N77Q9Ux17v6m8ncC25+VNizDt+rpJZZY8exkbFPzzfR+twZavOLnd/Tjok/OINHyKkPmzvRAViAI/LMA1frMxvc3CP5+oou7Pub+jU26c56IqFRudMjGa6qHdNGGnttbyHU8kJKxCEIzAobmkUYgplg6/9M9NRv4+80urkCvu8zptNsGs7Nx8IDNBDIBp/Pk6pVONgWmLDdFKTGlIa31edrjQa61DItHMNBe91wudFbFJDHbbT+EPmxezDMZne3or3lVIW+HE6FQsLKoUnnAFN0gkFoAK3dANpbuSn5TPorzt74IOjPDeLbGRyxuRweTWL255qpIVuU56Q30FiWQIbC7vC3QnQyj6eRzZHwJEXDraEJ4Yz1nsgi4Cei4Kf9sZ1E2JTok2Okw9fZoKQorRQDv/JRWDSbEneluPBdXChDQG+HWm3qif3rBzcK3y+C41zQNBHwfuEH+MHaYg7/XPOq4QKY81+gugpsbTIhgkCrJpRGGAMy5vgRgsBqGtQYMpoBndDFjAFIfmWFnDJ2GM+oozEbsLXuVhklqAKJe8h4diHXOUSo1eJ7JYc75GRF5Rp7xxBXBmJ4n77LzQK/2dul8snx6j3btTRFr6jjWvizjCr5C5t8xRytNumj/1E5OI5UhONunxti2d6W2dY9XoNjrp77LOoavSNvytV+0z3Na1+V7nZsVdu7B0t35/orBfu08fes0H7YLH4H5+VSmGKF+8/58+yr/iA68j797tIG9zsSRz9V7fvFuxXlp/euSI5uKy7HBkV/T/tVGTb45KVnJHz/fMzeb/tT1rEbPzyqxAznPh8RmEXCY9eo0hRaHGfVCD+U5K30lJpA0sBng/Tv9uenr70AvzMmUBAhlmlJte76RFvyrpNX6JASetH//0VSmbcvP+eHiysqsnmROjJ6UyqlwYJTrGeEalfkW1rtf2e6ZCnl4FfiKe4c0K2t1hRI3rXGJBdIr7HjfU2i78sdOnNQgxxTMFMebLHSSfC213UOu28l+ci0noUERgkxfHtVlc+D/Eamnq915FmIAEVNoUprHrwMQXYPw9HelDPt9upLzZd7nIfxwQQirddTszVOUJV7eBBTuNSylEz+B8Grr9FkE/7DQmp1uIAjeSm6C4O3LFwDAG2nI4pdPL+bRoOnz5094Ewbb3eeehh1MP3/+rDVZv0Jfa9bmbGNpaLiR4BXADHTPcN3L4/8g9UIHgP+k3IJ/KL2jpb/r6wUnWYpfW1C0O1EDv1gbMqa1tjhyEQVQdYkEKXfJTXldEj61ucFdNp5JubeWEO+84w2DTQs7Tq3Heke5E2NV1giMvM/cHrr3NjowDgA3d7ew9Iq438Kut5BOALoK2Vo3vqvN8kS9bNyMWGysgloxMlhkXZPCMLsD9MS8updrUX4BxqTZfmTFm9zcSwJaLxkeualRABFrdPJuc+Be0nFlw3LYDcupBaCu8B3tftDyYvlNy+e20udw6/TTlUF1v95tY61LZhpK5hrTBBiWp9m8HQcgXfOMFnAKhsEWhfIGga9RcDIC9yZtdctUXQ/fGrkUhT9Zmf8CP1rO92ytCPm3lg3tluT3IjzUZo1eGK2odGFCrzGGwtMEX1IzVjwiy/u6NpmPKp6c9oz36eyxMs3P9JiKogMBQwSo0Dum2w3gyrPAV96ee43JBFrpEUX4VLfanG3Sd8wgq8LxqkCv3kMxdEdzViaposTtG97tmaWi3PbwuTibVwIusM56Zl5o/arfnB94yVmDXwPzElORpZpNRoWEqh7N3tXIB9mm1zUKsN8MB98sclId/hu/2ZUdJRLTllAlVt9hpzNbScv8mJhFiVkaYoXmaPneRA/gvjjdjHk6VFneXWGu10XoVUkyXZk0RRjZou5YdIPHMg8FJ0Ga9Z4hw3Bi8JT7YPzzxLiyBSgULHE1vy1laZ5QmeIwIZUmHHNb0aFMRqGFxdh9RnM+FwW3PSBBbT0XVHpTSKrU51MBzJMlm2c13TnrrPvu/clW/RudeR0X+q6n0sb6O5Wlc1+irrsAhiRt4sqx9NebypAEO+t7udm7szCr4CsgjNZmXIMch+SIjIxoLoNDmc7mZVBB8wrA2Ptkb1vyCPY78gvK7BmNWuYrRnaalEKuoy/WGx9vIeUrjDeZcXNE84mh1r1e2g7lTXrJiogpsR1l6Jw6zRF6C5RE/Emft1flj+VTVC9vn5QONoHz3kKwm6pcuiDRf+ANBAK1zzqXpAJOAjSgFUFDuW94Cq+rmcIWn79YoCdtQWFLw3V3K6/BsVShjy7GWwJoAyEVaIQmw2hBnjmGiEUFUAV6MxkCiSl+g8AUpbIbhiKNDsRDZpFTUc3j3t8CUmcLC2/SLHx7a8aLsN7XLqxxywabEphZ//wcYt1p1NT2y89YrHAzYBFEQlFtmMD2ROr4JPaPhkR3T3Odn/Sw5BijilokDBmaR+xKN2xVZjODx4Fx6JgbEeQYqTxnSWMGHLkPxULwG6/iURq0r1z2axp+NTKlvphBhzGBjdQ/hQw2XP7DrHwo2PtvduxM+rwBUpXoe0YMapjhzzK6ge8ZkuQRdU8TOomGpY96dJ4n3OJoT5GvtTuFJjsnr4BjcacuBy6Tgn/r3jN8pI8kjNdnHL4o2c+dQIUvRPdX5Egld3ktZVp4oZvXJDrmKMrK9LhmnAhJetxLdmTq/Kk0YjakPrQxX/R1Wdq7/Ma27QAOWdpdvq/VTgQqH9AuTxgQZIk6Ldv6o9ydNL0/zcTamz8pFWI7PQPmuTIIFSi8RFQy2kwOAr/u27tIvl9bYI19N3ew/J5Ur4Dz8jsY2pa9+jHD06Xe9AJGTiuwkcE+Y4y5gzBZh7f24c8Au82Svm/Z7m28e/k3HZlA89HaB5ON+7NdH8uDs81zYwj6IimTIe9SRfBlgfPV98Al/07AN1Cg1wWU8m98jUNeBc7y7r/j4u/253tTNQGNZ8bObuvOg3R2oBKt0qlgXheEAzKl6VA5GAMexlMPO5KHj1JQ7wqzPyPEDFf6lL84uCBjTRUfIpcFpkzZWf2FANE8Pw9R2I7ZvczzlQv3VYIkmwf/z5TnGv5+phPxF/uvpOCnBRFC1+8y5/q7/IX3gCnM/8HAT+YuG4YQa/gt3+v6XD0mYEIKW8RgcCqjY+HECu6o8pJa9QLF1vx5Le3ssFSwMo3z900wq7XGO+9xfv/LciB9irZ+b/y4Y7BRpkmgYVEBVwArMJaw7QQVAjXPVxmbzQrWLZ0nXhTAhRtjbLu6JqczBAtVR+Vs5hWWwuQh5pw50vvQqXeEgUhFjUODFqogRufDdRV6CaCG6CYIcPNQiaYI933rc1H3nSsWhGPaGqmoy4X6qjzXED8QoLng1XFrKOu0MQ096HksUKArY6ECOTLuTRjhqkEwoRVI84hAuCPCd0+b60yXnoL1S9y4wsiG9iEm8aL8ZaNZbqvkdxiojPK0aKVtgmm5DUZM0GSCX4mwfD2lX+gADYMhAjVWGBr6RyR2hQoM5hzXZhthzOTfhUtkQ80rdd780Or4lyzaAG3GY+WCPaifBQeDgP9qGrr97/KWfYt8MhUSoHijrfu4jK/SrxNerzip1OPtnfLnnpjyoXwGXco+1ODnUx/j0fwunPOsfr9f3kNXKh6SyOteaa4FTc8euz5ggctPsD28w13eh6mI939/3JLlWZ0RR0sEV0sV2kgmaKXEKaeaV/LhfXM21crl1qr1FN5vu4c3sAMs/cxcKnouSphT56jUkX2QtAh9ghrTux0zorc0P/PeT5iPclx6VavBkynRnR9X5Thlne5y5++cbTSvc/1ETLmylRXvuuEryvzlmHWCKb/7XIAiytBpu7kCwqzpcxsnjtCt6PiebJvsaM3FZJOvPF1km+6UmTIkZaCZZ72AglDoRGQsij8CwvA4C9S+V9iz3doADlqCaJ/qQWiqp1RjvPaUVnBf0X39/iTs3k0rYnkie027otOzZTlKIJVv0v2HqQJ02Zf+burD1VqU94Vk5JiWIrHshSXZYcB5sWV6dzYwyHzPLJeTq0r/ZB1wkOLCS2O3pjPOXdVlYcA2bZXCQ8yZT217pBTdMknTp3kVV1S6wcSrKtW9DjK+WtTj3+NmNTsnVB0e2WzAlIOhxHdewPCeb+GK6fW+dFU6d7Jg3gL1Xiblu9vrq4Yuf0Wx7yw8S9d7yEVe9O729gZii8RCDWgAvyhO5beOwYCIqto1yowa1zEa0PUOdRyUi+5Xf8Qme7UIhIbzHF054+D3m4ufgTRwe6OG1lR53syQ2IHfbUHZFOkS0YhEDf+aens3d8YQFxexOQCYUVbIJexTrHaDIZUumaKfmsEpDE9LfLqRGlHuDxGAB8Vaqtf8wJADx7CzkhveDIawnn3VHtm8+0k9+UXE/EecO3Eeha3b9r1GTSGJyEECpIF4UV4Hc+YksKnhgBtzNp83GI1tpEYgPn0XXJeHig+4RZIgX8YmMPpD6FaKAj5ox7I+RSsqfq1JlmdU/rZpZQGrzKpURuKKY8n5vKprqmpPgdzAinZZ4rzkbS9dAqZrdLZpadv7ruICQ0QxpmyrltuRbQlZ4DTIpfxXpIflCVugOc3hE/VE3goEy4jl8se/SLqYuMJbTLxD8L7Lej9jFPGeLj3ik36A9AhNPeuIfJkk+aZvlX7AaXyQnunx/TwnZ8tncMMVgTnx0Sh7RTLLh1M5J1o/0vgTWMKkBE6nUu6vt8Z//fQNFOgJNbL5NgFZ9eay0n/ptBNg/CmpWokqQ+rPt/lOu2tlFhbrwjid+4O2FBNA1BuVh66reGjv8CTX/Hp4daZNQ4D7URaoQn9onayhkpVh61aBeb5Iy7se/ODo/Z7Cy+bj+csH0lTJjnl+svIFRiZxS3HFSuXWZUWRb2ssUfdbZZA3SWqeUNyhKNOtwqku/y3Ik9aC3MshTxG9FAdGLnCrB+KfBPh/xyv+ebxZuGsB2YGWXm4QAP/48g+dp5vB4qEH+Zf2AoBx+0mfswy8tAb3P//5559tOqQwJoCQ4LBDbSPCy+SFoZbkX8abPjsJbOUSHMoS5Xr8Kqo8r8+nuIn30tXeflTe18qLn/f83MwjHBYVzWVF7FTniuWW8Aff62bBKqR7OmKXlzov03O4VSKve5zbQ/ZDYyrO64FfcaSGJp5olMN5WMpqITJBhdi9g2EqKKJeKiEtcy+5pkK0CFFvc2S99fsaYybYvCE8EoQJhVwawACEhp1lRIUzccUCwGKCoOpNh2YKEdeO5IdbPIozaaJzwSnh073Y0qiliQCjgxtDwt3BKplgv8DuGpdXls+dUuS09Gd8uXtdOrBpsO4n3+80/6acoyyyO3jXdx7yXuCemgT3bLG94NtRLRNA4MBN//P1d9Dthv/x+T9B8gmEF/x/HYoPOxTfpbZVK3qTNHhajZxG0ly4xKaRuZ4YIDVdF2FJOLa1ctpasPlmDnxP5+5LmYQ/r7hiYUSqgLOmqkDH+f2sGNppK+VUJeo8yPw0vtG5rAu+1+rO0Oc0khbwqBya4gySwrHF5sulrQpzWvHtRPN3tGElTOsxnKac/iSmetl6OmtVseIKGM1cFbr+pQr58vnSiyjnmVW47tdrZK1V9Z+d0qn2W0JV3PtS81johurl3SHL/eXZRo7tvPXFVCbiuNTevYmGqq0CEz9QHQuKkPLuhJLKQ1oGOt+BnoYEVadcT9pkoV310vZC7FSbkjTMDanMET2uOiJBu90CH2QXz6qtABgRo2m++AYdBggS/D1ivhRNrft+/hmkFaasADyW8gQQM2Rd1Ln1KgDmyCkz5Om+XRTRgeQWeA7lua9FyfuOc6IrXXzZVHEDv9UqULRIejKeDEYdH4dxCk35tlzXusFcV3PCox9ND3i9J+fIqOuUTiUe1KXL58aOyEkNfgABL3WlW5nH2RSi4GTyO2bXKZ37dMa985qV3TUVd9vT03wGDa54NT13J7zvUV8MZ/yXAH8HGx/q85LvZ2OxadQ5Xf7NmmvGDxERDhxoRPh9SM75htZASmSpQouJ5rqrfCEdzHwe1qmROJ7o78POopJVGf9DNDL6i0U1sWAiGird4IHFIjTBPdrN65w/w3k6asp/EzE8wgWh0r0yrviu9LSRnh38HnWrSm/YkAZujD7yPKPe6A3cCJ01ZHonvbPbbgtSG14CSBjsXuhvBwYEQ262HA0Ao6GhWXQ297b36EeuRI7IdWDwGDqfgwFpaEJgEgy6oWOgg8A00BtB44cfcEOvG3e7l1wwCOrBLQODhzlkGDwRQNTQe0NvDbemSmgeAIQh4wAfGtFExgh70rrO1XhOQZz1PngW7ZajbgtBTzzCOLB3v/M+gYtbN/hTrkCEMY4DbwBga6dTxAbbpvTvKvcQl59Alv5VYlng3QE8InsWeEW5c9xwW4NHrdJyjd1lgtAkVTTO382cBnLrn/BoNfJMOu2/XfnebN1bQIpBmEXG0qEtmC7ON44nKgcH+Lki8aLjvSv6Xul5DmpL1mT+4le1UME96jU/MwT72go9qb8FhV8suHBddpmzbLu5VmPrjOlTv8c4kFN7UoLXcZ7qP9e785K/pN5S2/HMBWfvijgddXDH/fynXtT+lenYK9YUyUl9sVXYr8/kwfsny/0pqazOqT8nYjzDZDIq+f5yDKWg88pU9wPNWeujYig7MVlVFlf7t9Zz9f7D6YxrfDrOWPG9Nee/7yr3LY0WfrhUkcnHxln50qxWLr5bmZB3LsaltGSsP9+74HdTMXKyhuMk2HbQdir+jfvz7/RM+sZ3oF+kQMCCVKL/1Vf7+0HsJFhxK9er+XTN5fxQP6pwJ74bwxkEz47GtX7PKxw61hDeO+GkQmSCeWIIEzROkoVzZkbcE8sCDBNxtm7Nq9U0mvXBlDSzTFmm5UghQ0k/LNF5Hwz5ITwt3ylC1lNlPgCE4nttYnrvShf77mu7hnHfKc+nd6XO4FDdS1iZU73DN4UkBODv48DfWtfQ6YVYDRG8UDmceFuT9CyZuBoObExhe5yBcxSUDOCEuibm0Cd7tzafAfzuGZYJXdI9/vLPSN8MRW0YX3/s6x8HfWvUJb4uuTKlYT73ct+gg/UAuOurKbXzsF+O06u3ucG+VPj2/i9DwnDv3UM/G1ShjMOYHvW8EOkpnWEJg6Lop9ND2680bCtOVyU4pycmQ7C9yYcqS1nvxxHpCdmOH1pD6xpqnW4UihSfJWfVxPc1CB6qPxlL6B3uLEDX+ng0AMNiBn7F+q3K8wkk/PC1wMmaJz6C2SiZrjZcraTkjzFflDuBLKX+vAhsVGZZaCJcuapz7HnY9gKJhu8nljws+jrDr9soe8e7GIYW9jkYGcbS8ka8R+ud8WEqsuOsy3pfFeg5rEWAUWHYHtJayPGq7yUq5U6KH8+bsF7nbm7K+YwdjVvXreKoFYdJdlqW57D5XuqeQ9zO6hz1xHIYoLx22hVjYsZh7r0WXdrZm5+ffIq+3YNu2nzLXz6yNYcsOVU2XIW69S3Nzyq6vVPnVb+aeb6tO522+WdMv14Mk2lFSlfz4k/m9uunx1BKzeJVPbvWKla4yPAgTXjaiypgxR81UvrjnuahEYBrX5JPJMUFfs+55/VXEdEWGZ1khnUq+KXln8+N3cPaXAsTUWfMk9u91S9w7AQH2/19hrF4cpokz3Wf8br2+LD9ZmeiCYWs03KiPbWH99pG8u9RStK4jmz9Cak8f3SmeQf/N2clO5PZ2vF1uafTO3nRd2Y/lX04485z3ePdL40uND3Tv/dCQ+3R3fp3JHFTm0Gskso4T1WPldpDWb4/08uLvlk1qSCDsT2E6ZqGExGrirVKsTbc2tQFgawL70MhxLind3AUdkBkQA5TWINUmU6m9COXYZKyUKwKYE7UawjzNzR8MnbCoq4Rgezu6tzjmJVoTUAvr6agBfjzf2CQoP/jsFvYXEGq0aK6K9itPIt6jPf2GX0Ym9ff0JugiSl+b1CcwQT50sCs94KLEIYwGM36qQr8RowmatbGol73LbyeBfRq3tMgvX9TGMIHAFWgNzM36CToULbz1gjSD5M62lpIB+RF72EnxmDGANs93klriQitEXrvuN06bmZgf4w3CA+wDAgf4EMV6WyGjAkS5ukNQSrVBeABburVridUBmRAwCBha7NBRC8O7w1BQ4eoMhgsEfGJ+cAxBMKm3C53dLXWcesNTW4wt30zZgGuTFZ17FCFM0lB+X4esDwO4cFvIgKhNECNDUnyFvKg9RJ3vNOAyZJ8cyBkbvMxncL7feXXELCqQ1czYZhBhphxSMm+7OGHmPsRw/WY1D6sNtbB+JVvmaqxQWFgV4Z2+nyKFgaPZp+bvisd8H2XCHCKHrI9k537XJXnz9HpD8zj1KdN+fdWecq/6fm3Xe6/YJLCG5VndXOd5qjyDcvjb923f6d/8XSPW36Mad51ZrgEpxNT+kRdXwGbIqemTud70L47T+Pff6c/In2lAn25D3E6+pXTy24TLMzl/Jpm6dVU95r+SPBZ+33nsF37PKUzixmFtgS9Pq8nwFVgVH7riRMQNoZXhbTzGPRoGF7fcVf12k3JOgGoEHKUB+bBJi3DFM8dK1NF6ZRIBD1K5b2SduIAht1ZyALwTWOMtU8ZUtK9WwgQ+F1elKFSfX4C3OzeFnRIlzRiHVBl09JfPXQ4LLL5SJeX0APT1/HSlGbggMntiwQE0/Tbo4QHaV2NCsgPQynuU/xrjPC6HuEhvjz38crI73qJPSJMu+1P4Tfw8VaY7Ro5QLI8FUWMKSYiv8Go0C3nAACbF9f/efuMVwj+cfwOgPDZwgr/5+1nQARvpJ4Dv3/5PQcNwT9ffwWI8KnZXcykou5Pn19AIPz2+ruuHWlYvE92t/qvX14BAT59+oROFAe8IUM9Texw6Xdtap/9bs06n+upB0XgWOZGCPin5B3oV8C0KhMnH7rTIj6fPgK8LvCK5k4bPMfibh7m+RqxyhznhOHMANB1T0sH2SeopWC/pTBBWkvUVQHe7odTDkJSUqBSL+tPK++addOMOGp0BbhwQqx/xUMnJBJIxbV71Md8+H4YOQ+uIOhqCEStoTXRexDVDF/7QqVyapA2MKQDzQQtphjnYWG++cg9yr53y75lj72AZMDQwEKg5sr8BrSbCtRag7QX3SPMAGv4bfWEt5CTzAAfkMFgHsDxBhkHuhwQvCnubILBr0WIIg1yAAAgAElEQVRg6nPo07Radxe66EYKHmkECXcS3+/R+YKvK+PgdPGUd0l1KV3yNL1cyq9GH8LqWRPZ3VNJgp2R1LDrA26QJmA2ReqXAXkDjv5qwq2Gv336DLp9AnrH/xpflG7afZqQBhoCGYDI0PZlIK5RENtv4ZVOticNNpnCNSnQGxB7kGItfCfaOH2OfOt5FAYB/v7ld9v/MKOPYpDlhlXVMADumbOsjdOZ4BTm+ZZq1BJ9WtZo+l7btMw7vmVaISprOcNDGjHYfAZeWGpw1EHqbxRCSx9X03GEx980EMnv9vFpmimHbxR4lKgmc+Y48pGAwx+o9LtsM5okfUbHIwNZWbublZbyVCqszdbpEYCoo0u3OXHP9nmM3mrMhh02FRe7ecoy93U/e39p97LZKMgEmx5uX4KPFkoTmNgoYSBRNaczjOiUnwErlmLBadMSFZwJIPtOSr9gQmiPGqKkTuariyw0u5DiVeqCdkuejMyyQzyMuzfXAba7WQOkm/lelutLcl+XjhdBgDBMiU5Gmg0vcdIUYdNaiEfnyPmS8otJjBcp87nst5Md3mlPOP6t+ytmOJ7M1ZinHHnfcr9G64UvUT5z4Q2oWdvOazDIeLoCWUDrdpbpxtsrHWrE4cEX977HmcR4GRJVYMHwoV+rRAQJsxSH4ZW2SczEPP6MMzHvp2fThl7v6jijzWiTyzxOq7bsK1pg4XQO2vXuwfu0ishzn2NM39/RqvFL2VHHe7KY8EwrMWHUuo1aMRwOW7KplsJGuaLZ8VSdmwmp1B2lv7Ue5dP+BguKFTSfMBuKSXQmPDDd4LPwakm5DUlDOfVK+gGkbZyvsdXTnLXwcTsedrxihWPJp+el4AmwJOqtax/GBSA0o0X6wte/2RFaPXfJ4DLOKmUIumvNG11uwUOQjSOjS0iWA4EGoTdKo6VDFZAyjGcwHkkDrTPe/JnVp2w8o3O3EOeEPgiNm96PTer5TGyeCKY4F2l2/Gm2FNqB1rQdahYAyYwAurgZmUBlQgKRNxwC9eLmVmiDnqP0VvUDjTo6dfTW0XtHv93QXjt+ar/gZ7LIc83gngjUG17aTe97Z12X1pqWpxu60aTeBLemXt9EDf3lBb2xerALY/AbBjt+lBgvmUGXwL8r7HU0dGJQ6yBqNg/aTm8Nt1tH6w2dbmB+g4yBgYEhrEYYzBhjWASvjBjjdbEAxxjobFECjJ9QIw2ycfquUWmUR6Q/iNXnxIB9sJszKC+UuDKNc32fEwmY3KgNwM08+LmBeeCARUpg94SzvcEWRt7OgoGzHMWKG5S5wYJFpoRon8p2dBmaO9SxdybO4r63Cx9BHtnGHxiH6Hz/hFNm/FZ5QMe44nIrZH1Zj4XFnZTDC49WI2zWtlD4lweylglD1bHXdurQpmFlDKSpFT8TWZ7p99T/i76RlQvcutJUzIj5KpX3c/8Q9GDp0XWdsuS7zjD/lvWTFJ8v2Xe1ZsQGJNhN5VZmiJb+r7+XliZ4W555B9aOTu+XL7FXFrq3ZXCuaGOtz8pam0Jz/oSNMjGeJ2BOcn8moV/aW6Hc8myBfu3jOvZdVsEWrtYp2M2n/WxS+zlnm/ixUx332M+HjOepq+fS530ds0mkdMh5NWCWTSygOv3ISu70YsGxC7iKw8G6Rtt18v2/QMjpy1JXDJhO+bng0ti7p+04cd1RgfIeV3vkAY5yuTPZd9dHnfaLZN/LOLhDtbHdnln0SWp61xq9NvSD9OqeAxAM8E3lezT4jFo/lOpC3sHzFUc+qvHrlGY/fPo6BfqCXDcvN989LRutbl7aFavAZ/kmrcofmNZxnhDrtKtLufXZhpBOqOPi+8oMSTncV6IjRriIUN0GlDeyTa2c67xB6nxPY12wT/ws4/KyzQ5nWN5723F0XOdkqFLJ+86fkAo4Y3w6TAGniEObaKFo4InwAio4UuwldFMod4XeEgbGoagZ0Vd8x2kYQkBr2k7lnd+NGEiVVqXpmWgsRDifKwvPlAp0vpT+2H6aBBxrXrFxq+14KCFMIccyiiJdABnAcYDfvpyR6uAZXnyCpq3h3rxe9n8D+AUpYHEr85XSUal79QjGqUwGJNskHqkYaqo0iDtoa3kCNJSfsSmuAVnqlR2TO+fY9jEWfWXuNuuZ3iKP2niUnsSPW3h+VHbGUeSHBxnauw7kQbchIk+IKtBJugqt+Aa0Zko7FapzH0YKWjAl4kYswZS7klbczD6nxe9UDWbF8AFs78owwZSEUssC+uW4JryYzJ6u42Fj8fdlbVHhxvbb6KBm3udsXuSsIdDFFR5Nr64QYb0jkEjnRgTAm+okxwEcpjznI/ex7WWWN+QkUE4TNUhrqrRoLxr3sb8AdAP1mwmMDr1CA6Sh5X1YzJC3AT6+AMcriA+08QaSAx0DRNq+NMYwg5jgXqctUA6xMY9lnkzZcxf0Yk2+ljG7wjVrtgWvbPoVh8w6FpnBUcs6HBottLvrO1R4xkPAxxuIOqh1NP6U62cGGWRWZSQCHGxou8OVU3EdStAzhw2YbYiNNQw8GuSGYnCn73Ur9hDIV13ZdDCpODnouHU642gilPlemRVu1Rst5rOEv6wHHQcTy8ds+6DuTwAebULrWtZUJPdqrEkp6ioSxxeis35WotuErnjT2mvk944SCG6U1YytsfF5n0987vn7pzIPVN+d2NANFaTkk4vZXfBS5P2uc+Hs4sSPTlNg4/T9SlZHet6VTs2F7FmTrsL5eOcqCE28DWvheCUNPBxWDqupW3/IDC9dCUMAXspICpYMXOd4iE5K9CMKvTm7Yxu8t3WGKNS1lf0KDplQrA7Wsl4FBVyTzS3Dr3Gw8nEbQ+W5jBZ2Un7RPMzlJorzfT+bAp2Iwj5VA6YUharjL+GI3BL0c2LbHM/bWjrtBSx8u62txkIOnNaYAdE7fyGSNzn5fNQIFG2Dm+n05Zxim6x5aPvz3IopwKkYBBFAU5QjLehGCZOCjzoU6hju4Rl8h/O2pHiKm6qbQBZFhiRCAytMOn10mFbFlsgAaFib3scDqp5xicxuanxv5h6tT4IuymUV708XZFvWL0QlqkvdWcli5du1Ugs1/aDP59DEURpVthDwWMiGeB/XLkoh8XM3s57p2YzHpbQsa8VI0nWeh8SjUsZW6d/cl3NPoubCK6/DzJTEmJYa/Huyaoqr9fpsSR7CDfHcMMTanhU4No7Cf+iZck0CTHtS8qMCF7lRSFkgUwL2cj2H0nbovne8ZH0dZtxdJyZZkE9K81mVoo6ap2g0Tew7AS9W7ldXnAL0+6/B9oXRnSsOISf4ag2gF6DRDWR3ipPdEd6oa3SXV1XoN8MHarhcw5W6ZMb2ThvorMr03jm8z9sbA5/8/MxgYbwdL+rRbtf4MbOeY5z3LLxHa3r/Od30vPefLwf+8zbQpePWb7j1hpd+i4g0ws3EXbonG72g46Z8BwG3/oaX3vBKpCKWdtNw60yQ8YpxHDjkLfvBDeAGghvyK01qpJjy1oEbveCla0h/X+ZGQO8Nt95xe7nhdnuBvGnxNwhemfE2Bo4xUvLWOqg1O1vlveFKTwU/oUGo4dYU53ci9E7KT1jkH2bGIMJBb5DRMNpQUiQERk851IIUfS0N5ENPzVBFOqijtYYxBsYggA4cgyPgI0NtYdtgC6U/yxNpmAc9PC6P80liIjangQQ4iy4SgbCUrrnXvNVRox0tezaQhtTNOLM9DmPxuyCJaZpkMx6rV5AsVqJWin2sde7DrT0jE1ST94X3K8US759phYJFMcoI3CjlV/5eeleoWX3qfF3FyyVbVnqXdlcasBtc7fdUEPP4r1pY6ahW6mu9LPRJgd6Svmw6UEU7QbOsuJJCKiVW5uPB70gbXiH6e4c3dbn4LpV9sE11Hd+ThBF3Dk6GqIWgefvk8hF7J8VQj5axPNe4fSwdN746GLEp73ltz4YP103N3w1n8hleTyKnOsyLLt99Ivtcj/DIyo85f5GdKPB6r676aoIV2m3k8rdUQEu+CpeT4Gjt9Ry9r+5zqXWdOguFRaJyoPbmKi5YxjSllgsauO5in+3SughTO1R42wqrFdGX7xa8bXTnYUQZjltTByzc0A/Cy+8EeSPIQTgIGC8CvLnD1zfUhT5EyOT///FN/eDpq+9A/3BaN+/2/cJZfJgi/MUTnRGaTs+DuXDiH6fuHWJ8UH5q8E5ywbRzYavCCZTvlzqFjEkIJbrV5cwQMzS+VEMIFANhEM4A5Idkv0O9O9df5kCi237U80HLXFXhHWlmKN6TilXfVH2hQb5Eu72hDN1u0whCMVk7DGeCVqWF990OEfZHzBBUD1fB5Nlayp0YQF+rEro9si8nHHFPIlu248tv+L9vr/gfLz/jM4B/WO5DBj6RCh4FgtcvXwAC/uPnXyAAfv3tn5ZR+/bysxpe/Pr6GyDALz//om1aSOOff/p5ntjCaDgMVDjqreETgC8uOPf5v1x2wpZrI+j95/X3FAmV9t8fpg/C4bPJif96IKD1Sx3zcnhlWcYkCBN4V/hBgGZxB4kDNgRsEWFFBanDtAWrULXCWnSjMFcsO/SwbDHBtBH99LSOh8oPsb1FyO+xWR0PWj0M22sj95qHYGUzeJKBCMEtihPdOIomZcWM9zL82soMouBhwrQmYJOomALysHmtYyaYMt8/Uwmrz8iWkYLv5CyIPBQ67vd6fU4pXuXcFq5sdzj2cc1flvcf3A/1EBuwQDZ18+8QCpxOMpuDcCVPJ5qon3oHI5shGEN46F2OPEDjAEQwjgO+jmRwOIVHjYbYa0VezWHtVbhm+2wA2AxHQsHfAk7c5i6OxfkAIRH2QQ338Clr4HtG7Mci7Jhpmiz/zvB4IszAJRjkO9rnpfKg4A03xKr9Ss8Sz/cIxkykMCnR3ft8Aojls6Yc+6e125etXv2i0qtdS5Uv2OXajXfOS0i/Wn3WkKOlaCcNlICBAy/LzeXPp4JvS/K5ltPhPOcgFMH2lM5TFSFyB5UV29CR+tLZmrzGLKMQeP6YyQWvTZwDZW9DcSxiqJ8K3sn6w4jHtfTqOgg080BshNY5O1PwcRq1Jk7WbTwPONhKIWMJJfF4/FFOQGwbCpY+jFuozpMU53YT8F+h/elHPpU1zzdNhhMBpNFewUtBqmwSakd80qROkmdoMQ/iRroEJfimIHKPjrRDMri3pQ5v6/wwfsLDdwGzkqVO7Rn3ZjajNR8kpx9NV835rOno5VF09WmvXeO9O+9X0o559fz1vf4iMM3M6tTqo15nk6A/1ivZantrH87jSbIb705DtPVFtqVe6OH7XozInN+xura/zzMh0+cdQCrnqrkqqV8L+1Droukj8Wrh2fy5I0qqv1FYI8mJio+1rcLLLDtJf7mRjEVnsawC+HaPCBYkAvCRsVzcaY+SLpFF/wsM7bQGuTdV0SkQYvVcF5hIgOwcoQaWRA1Mosos61B6SPtIFL8lzWLj6wRCgjFegd9stMJgJhyDigIddl6ovJ3iTyI1imtwAxfB0Qbe6C0ifbR2g0y0nW1JtTyGDc6dSIzeiBBkaGQdFlXisyl/2c+ZjroBC0tvEGa4t39q+HQjvBBw6wLIgNiZTfwKMjQzcL1B2oCQGVK3htY7WmrPEQbhUGNxEp8H9yJWD3J2nqQY1zruIBoaVQCERoeupV8JILn3XBktsYIM57jcjFZEldvsUB0KaZcDlc3nZ9O638p6NgsV4VGAmlToNwjy/doAZspIKrHdkyYGzoHCbARHsgpSfCalH3Pacq4Vl1jD9Zl/+LllQiOCGA1qn+/KXa/fafcTb6xnpcmDfsGDmp8ST53GKXd/Rxub9xntZF3n8n2tbvl9au9JzcgzRgfbLNMz2jzb5fNHUkvN9T/X7T8wLfN91Z9H8xbws+R7KL9e6WVpy/HF2tfa3tPzV2kDgr5nn9eKHvXbu/jEvEyfi9HdDl6WOr/2nPFNvXIDXDZ79lumwL3fvup3pT/ukPf9kwkQPHIRALicXFjU0M2iB20PAt97bf4bpu+nQD+lsjMceV+9/+8EKdVK+ypt5wvYP9xIBh61f/fwu9ZxemCP3Fa1vl+ZLvfysEuAme2wxGo5THmIScVQyxPn9mDdU/5FLecxCL4eLvwAoI/LQdkZdzu95oFTP58mhrSO/TxF3u+2zWIddi+fkCD5cwulVYR4U4jIyiiEUC//QsEXIdxNoRdrsmNqKsNtzFV0q3Iq4kMrzwqjhvPhh0D4BOC1enuLV/IAHkstW0Z7yrysiVxkBaDo8svy7EF/nBj+WvIsXo+TJ8O7lOh/ZJJlakq/6rPYd1RLJiz4OyowwiYyaIwwy29mIINmXnAWnty9Jy0KhYZJtXpXC8Lav9YUllt5uB4Mfc9fLt+CqxwPT2Bje8lP/EW5EZVzESj5IZ3NkySkXYTQlFPtb1U5FQFL2V7Rf14GErTDMjLrvIiY527TsPDT2lLyyYxg3sKZJFCHYMBC/qGUmfa1Crc0pWd5BZ/U2a8Kr3ekb7Jl7m78OduyxOf3jzo0c77sQiwQ/tc/fgNuDNxEXV1fDtgFlgB1EHF0VQoMG1Wat4IsX4wOT5lcuGghB8RDt9eIDqfx+toCYoLIUIb7vZUn9O999Tz+qOJFfSgT7VhToXn38C7VvOsYaH4WSfdvRDMR330L7rjqm6MyOwQpy+DK83hSMt+DE333vPJ8fUvbt96He9FNNth8eZufGrlFQ1er/UWHerql2txXYYAwFu+d32GGIZBlfp5Nzg+5YpkAM1wAzTWmsbp7ac41OXrTPCMMIHLPaH1hw2UoP+DVwarwo5eG6jg/r9tVmqhcnuYrFgAK4/uMqqN9nIJyaXxYjZ7UCK0D6O00u2KRnKTWf8Lljjpo7mj8ppxXjwzAmAdbyOgkiAuesT67mKRpHvLoep9yPMAT70qBGJe/e8mM1GIfFDozoQK7xqZBowMAEFJlkJv3CpquobnqS5k3WufUeK4V5Uv595TqkArK+6M50h2234HOe/riygYtdFHqkuTT9pfssl6mmlOmp7Lkczyp+lu7p1jm/E49XLVYbeHvcS7VlnOuL/f43KcdHakjv4L3Od//9qu21ll7BzAp25A9D3ivGfbTvKSMHjJPgCRsOGtyqsQ4K88f+3ahks7j4NWq0yvEBDBfahNnAGFwSgDaW9erAZpkZDl5TbolABlMTDEGxEJ+AyARsCmWGeLBrABRQ3C2DqrSmlWBboaShGb8So7bjXIdMgQMYlXEwqMImMJ1sKjXtShPoaHcsSjQtQwRoYkp8QeDqOGtHXo9WwO6NESo9XVRvT6y80gr/IKQ2R4TmAVDBEMYg0UDdQXrqV8a1NucbXw36D3nL/2GTy8dL51wawLmQ8O0ywAP4+FIFeit3SB0KE5uogpyFrROiN1K3SLe+e5t9q0VO2L1Qve9qN+bk1Po1SdsEY0adBUG4i764JdTWV7ROIsaP+ucKFDkMdEnZqMor9GjEsADLpvxHzmtEqdgj2xALBikPAhI18dvY9ki+NCSkwO+zl3lqx5G/9ulhMV5dpC8zUIZp7DMk3H1/XYedKOMDzm3+aTke4xxI/uTyvNdTXeV5z9UOq/BekY5xzLz1/vnJ3ouuKrhr5k+slUiGdz/VSfk3XAsXzFXP1D6w/bvd5qcxeHRHn6fvvyRqYY9WXlasbMBC8AWCZn/GvD6bj3ZXyz9OAr09RS47pdqEfVDbiApFLkcysrP+0fd62o/2JtZ8EAVtxYGct2tAj8tzszqaV38Oe1xm8iGoakn2PpoZNwoO9qot/iBUKAJLCSlCbjZ73d0pnrTB5UkIjw82w1oR3phTjyZ96t6c3s1idVOy/EeheeJEJw7rceg83gmxl+AiCxAFoqExO44g0nM9L0f/IU93GytZ/Y0Vw/0WbGeh6nqBuvj8e9VaWKAdgpdUuGovlOFHkPwxVeBgFc+zJBASr810LbIwH/8/DNEBL8eKqj59U3vOkfX9pnVchvl4FTVCP6ZAgR93FygLECnXg7eu/Usz+MAQomvalOe3hEl5rm022P3fr8j1b1+hddKnozjYPNeBeIq6YEr0sU9qUjv61EdsnpjK7PAEX428FBvZkjjz8vYAu/4advb8pDM5dEEwys+snq3hy6vgHLtW/ntuKoBKZQgAHotggw2owEbe6vC+ILHSEO5SswlL8pxx3slwgT7b1fkb2CTkLjPDZW6MmPSGNSLsMLboGYh5pvi3/6SuJpHyARcbCRx/5rjqQIsFVd6qOAVTURHl0T3nnvawMNVWuFgW3+lhyg8CNmS17GVehykTtWtdK/kYWvHcYewXZExIlyze8o0y6NY18WB2riJMRGatJhX34uSOiD/LWZE4biLqgBTO+l3L0+DJIBebtbnBhyHeVfVvV9oRwjrCmwIIC5RPgGETeQUum09XWSPtr99LWwdJ2y4RY2bhyvzX1E7ra9dcW74hlx57iVWQLlOs/J816/Sj0p/p57ou0mVXEPc48SRXfTqAh9OIVoVDncQCajH+VV6Bxd12b/bPMpToYQeUw0UZUzgWos3GlbgonNX7aZi11dvRf9qiz8F4PCvNf7yo0ERQN33o+1BEUfJLsGOUOyhOLd3rTe03iyELKl+NuLKI3jMas3u970nT09zhwoKOeFrLnlPd1ckrlxqjOxuFaDhypF0uBm/gFy7Pz/xaTwznvLkV2qJGp4BxYsPdqut5fQ19Soqvw4bMQm45zUREvVSbL1m85TRkciuLlAehjycvCs7roYoy7oGz3Dlv/1t0m4WJTqkn3dvdaPHEHHyIFrObDvZzqpIFSs30491PQt7f6IJM23yX+txgEBgyvgZa7DgBtQbEgouQt2iE35f2Y7AVbBx1n3sey9mYGJQloGV3+IwW8usnUTCV7QThecbvagWvKpsHZzxClP22qDnqVVLgNpWxufDi33gmHOeC4/WBDib5HdPAyJmXCYWxr10xxzFjc6IsSyc8G60aBChUYkVQkYPQHFMclEIQ1Ts0QR8aPh1j9zQmitvdbLdEIu6tTiyLp82+Z3BZhig11NYiHZWZexgVgW6C3rLXHhSRS/ALDEmNOAQxhv0rvQGRidToBMAUk4iuYqG3hta67i1DjTB22gQuUHGAXGPc1gEGunQayxGWSk9WzERSARjCA4IOjMOUeV7E5jhMGMMMS92xqCGgQGmAcYb5GCINAyDn9ZUFtOoZah6orAXJfM+Vz4+94sak5tnu3FP7nXu+K81RpdDjQKazhlBTEEuet+7/VaTK/0PAgxhkAylBcxmbDVAone1O05pBlNMpGMxfp1YjfDiyFuMQansRz8WOniT+7yQxA1BaiBhF5jEFsq95PGBqlFi7DyZ91vCVuV1c1vKmrcSQCe8E0+zhBDOLpR0TUUfKQl0byzGq5uzhdTGp++0RVLkuHf6fWp9+fTG6ieQRIS32TejWvKcx+NfHulQ7oebvh7Rtm9P0PQTL7HrYyzDjq7c79/cjxNQ3n8/VVAIxjMp6OCmzHp965qCflb6tiGQk0xU4lEB4MfJafwzinpFRcuD7OsWdi7p+dpHOa8Lnh/Gv6py8Pulf7X5vBiP66/iPFL4MfIzhQCsfE04NA07J/+rTdNfMH0/BTqdvmiqeL8CSDD030OA8tF0h/C9kyZ+tP1nPI40a+EWpZygdv0Ue7g8X4/Xp4Pz9HB5wRa2EOYZicMkfiZ0DV1RU51rdIuQHamHZIGHQQTIFECH3SkhdmIYVielMDWUUh1T9S7kOw36yUWMg/xFOvP/pQkfV+EgSC2TY61IVDlHdqFG3Dlt2eUwpWXxJrfyNbx0MlhVge5993L11IHCdNV8mJ/V+KZVOOLKf5JTeVfI0vSvmxKUvlC2VJuvvrsKsnan5DK/+63oT+vb927YBZFVYnkCIzr9/iH4smfxVBVUURl3Defql7EF7EFDmZPAleeAhTGN0LX1bpdyMDj1yw7zsU/9Q9fQFVq+Fh4uzT8Tnnwsa7ogSuESJPOrSYEIvUecdX/JMCOdMCIo9frdU3BBueSW80OLzVMo+tmFHfWAo2VjCmCMvnu7y0AoOszlSaShvaTvqPZNLFyh5btRKktc4TtyG3pYxMkr0+bdFVExNiBtlQQmLX7HHjufgD9WVvarG/mcJnqGLS9C8++Hw3B4oYQfkpSYN9H77k3QCLunnFjsrt0GetE6iL2ejecOSt89xbUGUiReNqhmYSfF4cWEfm6UVQcX6Npwc1GUC4xuSGkzDDe8nHX+RBvLJNe5r3nK69KjoEVVATrxKm4RW+e/pKQONrchvMOSaPqWreYNus2V52GAZ3/U8LnU9GUdG3ae52cGIUFTppzZayqoRe/5BGwpDI/SBNA7sH28H4Mrsjo1fkjLEKlTO7tRFdqxTek53QxOU0GP075bZyNprsRPH+0kkyE+99DW7kYpv3EnvFsrY4hJ0DIR/tjoAhGBmaMPoZj0SLRl/eM5lU/Rh7P3udXTgFt/0TvOQ4FOkN7Q7F41VbqnYSiPw3C28RmFt5VQhs+fpy0g5Q8m8Hda5bQLBPcqrIYzCoKGK8RnIGm7zmkP3OA99x7t7BArllgh6R1U5VxrPQ8Fwiz0IBoo9NoB0SM4ISggXIkjTg9tPalh5n1IwDfDkXF3PKvGbdj7AW0zlDRJhYGc8rvnDymv5fTqaRbwvWnXG6lfCuquf2uB9Qj2Tk5g24uJnaPpY+UAH6SF0bC9EeaRQUoLTd20Gd6eyOAwgBpQxPrYPqpGD4HdE+0sYyA4ZAoEfxPB36vBYExw8nT5ev59HvkdvFEHF88l8bf9Q6UvU/ZEL6WvWfdVn2Iv1Imwtvw2pcs+CqXdKqpBts6F1GmzFSVBhFUHqcK5EdR+nyjWRkhK5LlUlBuiRBNT+jbAlYyqyCyKe2u3NVWoEjcn9or6na+DFEGte0tTzBuBwvbYsEgoxgFVnKtYQMdzcPHwDRQ/T6BDQn9bV5kAACAASURBVFy/AKhg+IUxoH9MDCYBE6M1u6u9a9+VutzQW48/EKHhpgsiXa8+cp6zAUSsHuDmWCCAKoId/w5T6LeBLg2DGYe0EFUMgSrOzau9DcYAmQKdNBII0nscDehEeod7a+jUQdT0vBfAanxYAw5VeaOh6Z3uoTzv6Oho0oLOd2ZwyxD1HgbfFehDBoao0nzAPPDBJnxn5XQ8wpkwSL4AbCH/SfskZe8xEbotFMMdVhKfEDXjHQQqv6FyW1riJGqiVyqTgISDHwrnFyp7iQw2CzwGHnTWYKdAXrZp7MHgRTDt8/ibqpLyb7JpVZl9Nry6T2l2OtZqCugZyravyC82U9CA+H3ux0JlClqsEzC92PZhd9Ta/l7GcC8lbfpgeqh5L/kqD3On2CXMLPUG6/216S6zcyfPt27zXYWdn7U9+yMIJL96zjb7/gcY1g+T/j0X3yfFAceusgkZAuA6GB6i5744gv44sOsGnf/d0nf2QN8dSbFwAEv29ST4vVJldN7dlzrAq1RJ/DP1SxK7yxOtc8D0ro1Xp30qV+fAie3EmfDclntNTxUUJNFMqcPdhEZDvR6ZoabRlMrc5gI3U0atcOLtKbdubZkbThuGgPxkK6UrPoDNBPn81jbOP/bl1mwnRiDn8SRMnWDN35hktVgxCRP8zi0fC/ni8RvcEzBC/4oeptJDcPUWLKeQsHgq6/1PAL9URnxzOHEpwgTyvwLwO8q1/v/nn38HWsMvn3/GEEajZneXFS94wIiHqCW4SNyBHi+t3d/xxcJTqxD79y+/6ouXbuIH13y6bb7YfEkc1FL842PEZh7KZ33k4xVo+HZf33/a5y80h3Xf7sd7APMo1QX4QJoUoDaQqGrZH3XcBNiJWe/6Ts5AhQkykHd8GlyBMnQ0WWQJsXYap9e5mNEIkN5/oDNeiX2sbYS9fCMQU97yF8YjBvPsBiRl/Hawn118Cp4lP2Q0lAvwCtj4flB8xmPoXXZi4fbI9mzrCOW5eeGlEF5yPK3bpYf6nOQG0AFxJfpY1oYkDt4pCEXO/Sht3zrYhD7N5pUE6NSA2wvcaEe4gUeDjKF4pTXgGKDxpgJdUUEYmE3AovMY02GCkintTrTzgl7+nB5O0oj62mnBvqIM+briWSqw4M9rPUXYs2v3opv5Q5IWVfjiYYI/K3CoZyHdTLAI9/iwb6QGEBmRwLrilqupYckxOezaPZs2EQrHJIAoHRZqBX6WeZ4YA/cu93200JVp79hfanjuzJ/VXdfC18GVtgZnyTYKQtsY+0zHMIGaKK53/F8DWIBkWvpTCjxj8yCSAu4QTnse/fs8ta6Vfy4TKssc3MPeJ8W54QlXVocxAJkvUyg8zkZkcz8f05ozZ1pnXqOROAj60/1Y5prOeT5Iv4jmorZWDMIBNpU8QTBQlft+d2cq0Ci3JflItH6Oppz+5Fhiq3i0CoIK891wYTesiluIIOY9ru8k62o2Pr/mmpS2xc1GXT3a/P5zcs/mQlM8wonYmBnKPwa93uLJAhu2JYk8wpPjMd/Whj98H9r+UIc0pUnhNW2S+WSvHVoyDst7U10N//2xJBd/nurcOH4qz8JAyEFSfQvRW4ksAv1+E1CTtI9rAr5ZH3yehmBiXf1dQ/DSAECi8MnFaOQ0KaX4oxn44C68W2f9XL/PD2XKv27txNEr7b5oe0Hqu2uTTvUT4kzg2xoFOs93wAKzQZvVunhIrxGRfK79SXPFuQT5mvJ6PsdFbmjCi2LEjadWOwqySieKMWWqNNcALRTrS0dI79neDBPLMM/byOd4kQ/EuSwQsAS+cfbB6f7kM7+euS1zcnlSm4EjoHhKNh/mOkv4rNhIAIyMSBIGoWJ1xgIpL9Fsy4ZSGhrW2sek06/jHFHyBbUq9Vz/onWY4r21BjZ47AaV7WUoWmgD7fUTRuPge4QHehumrgXE+E31xCbQW06Fn4+oROEXGboafh2VfQ4g1MBBGsTn2+ffjZvV6zs+QfhyHAD9jsEDh7zh7XjB2+sNn283vPSOF/qEF+poTRW6LKITKgcEwHEAB3cMbmBp4YGuzZkftxliiY/b+D31sdBJZha8jQPtFeAmOEh0zEanmHVPEQ8cLHgbo9iD61h77+itAe2GfnvBjbru3+ae37beahFgxvymQAfhhm5/N9zohk4Nza7EAWWQMRbBGxhfhNWIgRlDGIcwBh8YzHgjxiEDozEIqlwnViOFAbb5ezMYo+Bh0sQLek88zXeST6H+g2/27/kJ4wGCnvtVJIEI/LwPTNFXCIk3bW6JBIQ2HTU2ZAwTr5G70PgKI5jROWS+SlwqvSnwTAazu+gKOR/75zWt3uLO93hjVPNYHyt5o8WDfW3ybjj3YhV25c2fAzFcW+dmarTSB87v9fepjA8YD9ITE2nZqHyvNGWVV29ZgpUGrc07TD/Xm6WOlb7QUvc7yu9+P8r/UY7tmWouYexDM3Xdj6Af5zbfHclz2utWuSzv4j3uDmWKfvGOIT82uHnf/NXIGl991pnmoE78Lq83mu1H6W99UIhUueKrfn1D+PsTU43S10iD6LZGev1ahX823ocrLnFzyj9s4r8q/asr1b+jAn1Z8FUwWvMtP1Gz/Ahws/YlxkL79/4zEM+SYcrnz+rJ+dGg7yHATX13ki+H29nyugClL2lduRCkSf52hQjZBEMC9Y5spkQwxbmQeV+oNwZBDyYTpZ243joAPRKoYErv2Zr6ByzIt/ax1F0FC5M33juQxJ7zL9/l/FqA0IhUE/kinA1PwZColm6KAOPN5tXLOudelB5S51Ny8UPQeWLXC2OycLALRT8rzOTcF1Mc+iEObm09CXTM2nmIBWYr61T755ILV9b4PIorhLyfFVBU8E/id41F562Z49zeFn4yy/RuZdQKnpiYsun3d0ZwAYCUn+G9WLIAuY5E6v3Q/MBNRejlVy+IhW4m5DUEgEkW9Ds7PCOdqvyOVReGUdl/LiSsfafY/dGPVCBVuOdUoCMFBfOWXNqqc2MK7Tyk19lR5keIAT7Ao9wz27uV7R7LEWlY0Ax8Kyw4LhPzrhAA3bqywftl70Q9wzwjPepHGzrBcgMGQ6irV4KYsJ/ca0JFPsOU7twOyCDdFp1Ag0B4U9gQgcCjYGQfim8CMhrGmuj8/R5J85zTabp8W40r6r4tzyc5gKDAVunzdBCjqfxZOl06cdos9iNg2tcdmBTQbGJVsfkXxU9EgBykXt8meYqwwBGWueDVCMlHKFshlVi+F0FqhNEIeT2BuUY2gotrg/z9fsTeTny+U55LPvNoI0FXsEllPiJDNQLwbJXmUI7PNQ4gUO/41Ai9tTC8kQKPLKzhSA3/jwndCSZ+q/B4+npe76DA4hgyJ/tzoWwnIYTv0fLrEeYn/7fgByfZwfaAso+F5ys+kKcar3iac39yfCuGWjDogzF87O3Ew0bDBti0vIeSE1eXZ9+MHkU9ut5zry/64fSmKs/dq9AVF/7Ys1Ob7FACs7QbRMr96oABkht1UHgoEsgU5lK8y43uNmu7EW6mQHfl2RvrVQ2uPPGtI6LP1POcQPSifXPcQy/LnkMYmHQnby7gjjrXPW7KDwfFeG68jhiesQp8H6wz7yi6rs8VhD2zh/al7tS+rdB6G5fQOygSpihQoFDqoHcNv28RAtD1ChU00TNOEyULPadFWH/TYXW/aR50m8smehuHzWvQF2d3HTY/wFt+bC6v69p9XjZaM+xRExLplScXFa9H30vZs70IO7PY49bcpCAvle76HeUI82w+hi8t4diagixNzS18RSiKDRUGvbIBVQhwUunP/gbg76Ck096K1J6cldFOW7PYjrjPyqmse/5ZBg5VqOmPid4KlOcJnIJpieYK3XC05L1oPp8pfo1e29kmE5XpWTphfXfbX4fPWCsRCwuv5bh0IsiDON1QczS/u7wRIOac4MYfJEpsCACxKrg1UoEAjdAhGBX2xM5ErPRCZB6X4A3gF8PP0Ahakh7P4YUOYNDCvQTv5bXpfLjSXOde+/92HMpz8cAhDQcdGL2DXz5h9BfIDWi3TwAIrQvAot7q1q9jAENI/7iZFzbgIbMIHeTypHK/uohGsbnZFSgDjLdBAF4xCOZ9Xf7McB+kfXg72Hg95/JIFf29gVpHby9oraOTXTsHDZ1OgIZH93kxE1gN3t5xo44XuuGFbuj214wIiONxBl7BuNGw8PmmPB8Dbxh4owMNjMaMgwfQ3kDMIFJFO0E96EcukMEaLTfQScKYwWZGaix7e5UB+c/4d8EjZIoBP3J4SA1Top9ozcozrO9LHu+L1N87XDOd48onkq+voqMohko/ly5cErI5nXHPOo++BstzrHzp3KjYb7l4r3nmOuUi3xYh7vCd9et09i1jifWcUPcTk7Vk2fEfa73edMLwdX3bsa9wcerTprG7v0+NPejUg9+P+nP1/kl5/67sDGFrPXfaP9HLTdFH3fKwFo6PzhN6P8n6XZbP56va1X1vCN9aYb4tt6KINYUO6hGcnL480ZGLZ197UEh0N39eVfzBefwxkvFGhe61pmf21oy/nY4KgnpFmvIeGWHne6b1vvPZSOu7dOkPTz/GHegCBJSsM709Z9LXb9Jvmu6i0e07uvPumyChpTHyY7ieyC6QX8VcgpznzHyWCzhjJVXSgPPCBZd+fieCjGXJ+QdGVaZTI0AYBFUkiKh1bHoTX6WF8LpigQXT3d4nImL5yBmBEzXO8d9ND/JsCGJ9IIAqSqb3ccy2ZwNSn0Uey8CmQPf2Zmlnfl86ECKTYCxpzlsZm2mYu2d1vMnl/vzyC/Bifms8wBD0dkNHw5fffkMqQxyOgUZqCMFTncDt82cAdmTtwM+3n0AAfv3tNwDA5/4JgOCLXQ3Q0CAQ/Pq7eqj/9NNPyJYcni+EXbtUwZ2AuLs6T3T6sfM+t30p0eb3xnOF+ablmb7YPEPAV3qJF3WV456IRdsVLokTNzGphxb8yOh70JXbrjWAS5gWulFxTaIcFeSoUjfvprP67c477ajjBEJK5SSfTUPe0K1JSOrlzBt7MAQj+CBVenQTjDUMyCSAInImyv5c4iCsFTAlQxV0VNt11K34Q2IdtHumPIfNK5Guw1BvdCa/P7Ch9Q4093MhtHaLenMamuKYw+CXbZzTHEiZ24Uu1L6fpCf1GS3v1lSe7aQwFShWdL5DnacfpbxPMPm4Sv+r4KZyxyGAKnUKdB2bqMJ8ABrj8Q3h5kKAUIPgBg/FGWVdcSMbOjihHeurGG6L7EbfXGhIzQxJLIKDbyBuAOmaku1fv+Nwoik1okNVntMS3aF+X9MqvPfPq+X3OQ8Btq1DI3xu6snzkxBaKAFUKP87sXkJqSCSRY1EjqmP2cT0ZYNz7GrqUFo6THyWEi41uD9ZSs+1XSeap6c+Q9LIFeTvbwEqf7N5P516tPIZDka+PhlC+lzPWt6xSo/vrkRueDItk/UaV7+UgVu//FoYN75jypw3a/90JZ/RFx9RX6ei0glCKM/TM93aKHHIaR1cXaNYCp9522vVUMasNCTdGOeqJJUi7N6Gqi2xrUoRFMIV6LA/cToTfIhHoJB5WcOz3G+aNbh2XJMNaGhdL+whf11Bifodk4A5yMIH0/N7ynPvXFt2OOqKWGTUGwCqMCfFpdSaKs2oQ3rTyC1d15J6A3UBdTbAF3ATZY/MorBbBJ1Yf8CMfkjnlx2vLLC/Y1s2Q7uaq5U0fk3aYPSr7gRpAhXUteK0i0bu25g/GI3DeoHnYFuXvvn231OxdU8uaoPAM2XdpPxyvpYoMGocRZf+ro/CFtCX3/oY9fhYZKEDPqBp1acS2axI4CRA7l9lekHmp3cnoFj6cBIG5/zkQObQ6jFpzusYjSKsnZUzOQcA/jyTM4fHAhOGwez9MgN8flRvMXPDACzDqElZ/0/KW+BNY+4Nf44gP/zFKBiJ4hIRNEPdowGdATHhbBfCGCqsdV5JAOCLAYwQ1APb2TeLmsXGt0gGN9IjyLwxg88xjW/yPSUujSmXhzSMwTgOwtEHDmrgweBPgkY3vNy0viEEGWrsKFD28gsPvA7BGwsOFhyDcUBCNuChzJk1Yl2IUcQ4AVLvLxZg2GXmeqwSFWQXEGRmxbeSsE/mmNHQ4sYiIg0Nc2uMTmReY7YeIGWj3fgNZB7oDTc03OiGW3vBrd3Qm3qiN9Iw9bEWZHw1NRwYGqJdWMPT21UfKgE5dGzoKOQW7kXNouHpmRkHc9ze53jOjnFqUFp4hSlij8FweqADYaQQbUn2PWCEzJi+bDrnm1CvVNTdReHB7pVsME3wHQjYyxg2pQNXyvOisJ5ontUrU+aChh6kWVFGE38DyPx70xfA6ULJuGt8pwhe+hF1LH3YE+IF5z853h1xLyKNj6Wn6Acl/lwJ7WWZZXzPjvE9aTu3d35vK/hKDuxDGixBGONXS5JnJuluex8Zz536rl6d9tWy//+dfsD0lGlN0Iq/ZIrzeqF3ACpfRE3lwcnLrjy5PvNyf1mI/st2XNP3U6A/JHByfj0xTj/oBnqGNjgyp3lTTOxKCK+kntTe14+otT6w31eWSd63lXmq3GRdh52UYyK4WObE6y1Mm3tqmBcKuXK7uUfoUCETqzCKiE0woKEr2Am911/aS9FE/fN++clAaubS6drPJc/EJD6xOO61G/xrEvN5qi6YWSn9tDk73Xx06kZIAQA+EIdXKfOwKnaLhCbCC0680zKP0eYieAwYWOHA4c69Cc2ino3BbzBLY176qR+fUO+MlQxjaRnYjAQ6kR1o5/ERmfB2HtQyDx5ybFns6RS4cmcXMPDbMr9rUQAFKOZ374kPdJm+VR1VKKUwsregXIRXpUxEQwiZm0uiSohogmkoBIQOVeD5xJjXhbMNnt/KpuGBN51tEcF1f+cZcQG/wLyyq5+bI5IqRVuFia7QtP5wwe0VlQqrV5+QUt5DhS1NPIqrKjJGCG9tHzrDZX9qhFAUpu4hbIpUin3u7U4ijVm6Cla3Rw8hzmac0DoYN1DrKqsn854jNTlBf4GbLql8v6vidwhUsUMmWTuWCV/nThIXzP6XJf8T6RkwP8GrnLqiTS6HxqC/df1rfVd7vC6+F5WZhgRoWz52Sa+5EjbROe2AjBu4HeijQbqHdqXwPkrgTtjJdmytY5/RjG98LzktJugdj2ZwotEHqoLe2vSrF8zgTZtaFOfeNi/zZHh4VvhKKJACZusVEssS5k+ancVt6l9Id8TPosGTqYyXAfwkDQzGK0ivKrBQpQRB1flNYX4XvKbvfb95X2XO4/jO8s1HnvccgIryvCgSKPqymaQTHYMjlWV3Oe6k8muXY/695phFjbKU29Xw9C63IiX31AHadMhoFQAQT/zAtALVfRE5g1TnpHoXrkOY9g/KViz0iKC3CAHh9R4cWt0CSHirxlNEqkjVrWs0ptGivLD5NkU53LtQyBTpCKGYs9kcynML/RKfDi90ViLF3qBC5pK4uoI8WS1rUBw/6O+JJSjg+SgtEP1Umlf4KseTJcn/KQtXDRyga0cEvTrG4+s3izTTG8jDuN+g82vKc40ioDiEqIGaRh1pSAW66lYZYFWec2UH4pqahWJVXD+NA4ayVm75PM/v2qdLukMtt7+BEowIy9auJHXpVKUJ234sDW2dpMqSB4zW0MK1YOUVvMQFKIUxWvAeM76mqU3b4/ap45eiiMo5mU5fkhHjJN5TgGwr63zCRabUIqxRsKQAEcWz+aqreWwT/o/9UYZe+luL1ueEYnRrEB14NZTlhcaUfFlPYKdsz+iwl7nc+Ta5k6imrosnn9wdYhKcgthwzVQ2xDwGy09AIzX2ak3SsEyS3FhskWktWrNQ3KyGfXJTOOgCMKlymMWimTid8tvtXMnKZKxbVzwjMDbyDfqV7JoI669ZhqWBmE5cKl2niYSAVOndB1ojfBoDh91NQtTwcht6pLBz3yGEMRhjqDf8F2G8MuONixLdDDgHmbKdB1iG3guPDjFjZkHT8OqAebbrud/puLiRqC1C3Ik+7F7x1qCmY4RGHrGO1GMcBG5sPKeoDayTbDR00dvOW1Ojyg5Cpx5/jW6mRH9Bx03rMxkJDzOCsOllcsNWmENJx00AkW70XUO9NxEIE5qx54NtPGYYMVjXxfELC1no+oQHB8huvBBjVp479Dn3Hr9XlJfBZuZ04t+yxgnxxauZMuWRTOY+r2e1EzFaHrBMeSrEnopcpqWt+FGQhNHdKduiPD+Vj9fnDpy91ueyl16vp8frBM1tlwbPv09FDa52jT2cQ5zgZAse9uk0bH2/pTd352rt3NdwPhdV7n4/Xc9HC36osXc9/lj9D+b3blul/MN52e2pByX8jP+w5ifzfXTtZDmzyrktWTeLpfWaInk4D38mfL0zrbKYb7Q1v0daDTn1eh6LGmfnvHz/3Hnme6Srq0N2Itd/pfQDeKCvpyZ/VtLEc1RK+hfeOQBC4EmL1fQpH+4jCVfsBZNJAJ0LuUfMFEV9PQhOfUOcFRG10Z4ZWdurBUt9xRS8cqWIeQjhu98B68ohsTsdLQQmGohdfd5Q71rW/0145QJrO1QRTK8TA3IEJikTC9oiOXCqI18Y3tMPnNdL5vJp0Ldw6adDgvd/ltHcx0Pr2gtUkVUZxoXQBjV2+LFaqGTdGltg7lw0XedqIXhL728H41O/AdTxf739Cojg9ulnhEC2lNF7vxjD7v1KRbzm4aGe5Z9fPmP0ht+PL/U0rx7nJOFG9ut4hYeO1zVSAWX3E17M2UDGx/R5wj7t9qrvBd4UmuasLS8+mqqw4oPFT9waLZ/e8QXWQMBkgIDFKTv3qT7k3IsAMuB6gVOTPkQ288oN74nAIabAOQ27Srb8XnAOQf/0B8ef83i8fu1PWafqpR6wWtwNAy+bkRC5l3F3DYY6GteZJJczNDSi9PIIRT7B77zW7ezPFR+m9593MecyDBB8rI3K57A2VHIiEEhrEG4achYmQiCAut7TJzD3FmYLHiKqCO6HaYYGMox4hRd/tiNwZb0qbFzQwTRI9XwzAEyoq34nsbmrzzf4swrLT/t0qbQWd3zuv2P4FUZbToXTLxFIY12Tw6RdYwCd9T5FYgu9CXjoTpHFqKpGJlj3MhAMekYY8U1q6+/7QKx/Mcm+DwwegrYtSvOI7lI9z93nSmI6Eki9f8VL6bSRN/iMvMbCRZmhQicNna4Ou3nHo7ETc81i9y1K8dSI7SvzIdRxRQGLun/zlXoKfRHgs2v4J3K4wCmqEPxqTzx6Ntf4OM/cE4o12rWiWKkCtIjf51lTxK6N3LN5DC2fzyVvY1jRuguP2oPqVRfNVGjLETrtcL+jo9ZRyxv/HIcmyXY8hLoP59ZeoP51iH6I3Vnel3EL8vYOf6WeyhTthqen0wJYaHeD89hPbLCrcX5TOeJlDF90ulk0WldBEcKQreIlQPcjz8pDsR8eYbGFYZuvSDWA8UJIfMjlnZN4pHj6atfT8nv/rKgTJzqe/74H6sJkL0DWcV+FD/3tCtKi7oSfTdzuDQRwE6AJWhelq6ZhocZ6ZnGehowLMOO1Tom3mAnohDGkKN0Ra+2TU8lndncxgNRFLBGT8oM2n+9JO9J7RY6vylZu6nulqqs5jWOZmAqTUp7uLs5Y2whMVM7m0d4DmUeQdm/R+rqyqI3WvtVKCP8Fwd+jIitsH7NXTFhj6lM3ANxt1FLqsv9XD4OeOk+yDCgGP8tS0qDuDuRKoQbW9cz+Rb/IJ6RxXMuJXke1aYZ232u+WObZE6nmdc6ZWff5xEZ8UVihz9Y9MhgSxRHd13rYbQ8taXJr6qcQ3Q+UTHmTUHmWesVyOpM6HDeKSvxzngUfF4Vyn42HYNHoMMNoE1PDaOqJJUJ4E8HBA4MFxxC8kuBVGG8ABpGbnerYRSPaCafsp9kxSe+PH5ChNLoRgUj7kn8URyM1ZuIYtStnnSccAhzMGlOe3jCY8dqa3mOuqN3uNxXD4w1dGm6kuJ2pQ7oSCJIOj8I4+IjbwYZFbuGhXvXDQrILA0MGBg/91LfQe+sPCA8z3B5Rr5PgUZXksb52pYuYgQSSmudOUaBIHGLRIMWvQlLzaibzzKcBbgqPEvyKTAEJ9mCybqjZvDMfu7Ge7SAD2gkWa5XTp5w/L5HjO9NSx8I1bPLbbO4I5e73VHT3ckO0nqzvlG/FobU9sX+SUM1tT6m+e5Qu2qtvL5iJwOPYv7/3/D09/CHTSY784YrO9X6TtCGUq86gMqEX3blb/e7ZE+UvebM7705Ny3N5vzY909bzsFx4qt2++1Y48V82fWDFl/MZkbuFFhnUqY1lbVjOwqzvmJ430vrrp++sQN8Q9R0CnVJFqj8O0Gy5wJV/2PAbiANfpfy1wHxIjHsGHvaF9gifVLgTB/FQiFm5lSla+x4H6NPCTc9kp5gXhHdZlJnMqDgVLi7El2F3+NmhtUEVTq2rwkZUsEQusLWwF2RKuKjXjgJ+AGI3JPAzMWAh0qCCKD8cuDelzSjZnAlgHhvGsC/zQSvTrkcWW8oSbN1+QzzMJS4Y02YKM394Qc0uGZzi0R3AtysP1Lh/qXcrHH0t9iuAX9a67jFvGyZYgCaU98DV6la4NMbQVIcFWVuhMYIosceY6wUu95tw6eESwms95G3Hstk372E4nuXOnk6OMD5avO7LBVf4eggQHqin1gWTcUPMiQnAToYC/tyTh0JV6U5Mj3fFNpBvM/FFX72FjU6EFelkbMQQYRBHXL+As+zJchCc8CVyr8DnxupBEST6b/Zd32ysQ6VXXUDMaLHZHB8ZFmuExi0EE95BrbbsmcAqZEK+9cqG1S/NEhcFsq8pGDgEaO6Pa7igKe1wZX7rDaAbAIa8AXIQxJS8YMo1nzzRSzSN6dPn8GNAS6dfElXnYbrgEk8nwQDKus516c9Ct2I6697AUlf9XHiD6DhNc0HsEVk8FLMKwIQPgDvELz82XSI5VwAAIABJREFUWIxQa6jhmMv4lu4rDUXQIskJsqFQhoS0SAUiLWDcFUVx1/Oyr+KTsn034gg6upXp1AghBguVZ1jXrvIZVa5tymqRFOYRCPUOVW1F3/3/7L3rliQ3jib4gWYRmVlV07M7Z8/Z93/Amdne7pKU4UZif+BKGM3dIyNSKm2LUqS7m/ECgiQAEheyrg1Tnjd92znaiZUZH5nM0soF3hEKsF2bULUc1u/6aJHO0l+ZbxOHM2OBiPZynapS0WSeUF25WpBM5oqm5UbQMXWNck2fxdvo4ntqlIgiIMc0BjKyE2/gWsFMSiejCSqfkx1B8B/5iHUS9SXekspNZMYKNSRaqHVrCPCc3w6ihd8q/ErquRHoIFWuanwIC3Pp+wiaO8xIzHWeS9NBij4LYwszkun+hOzakgSbXTUhJFZoBpk/Js+ilqH0TCPWyVoY5bdXlnI+MFle1m1RCsKLmDCvNYpP3WcNM2gjxNhtEIX5NjA2yL3mxCKn6pUZ5PKXRuRqDRsaNiK0xuBNvc81EvyhEA3Sum0dEk22foGOQnxZeUFTWSnxLPuZ44+c8LtIlQ3W7w/HlQUfkyh66sii4nfSmjNLoasXIUdQeV/xWdh8sGJBbEvFCjQhKnCeXUtS5c9tt3vCreGOwmh78lOm8Eh3rksmb+eoTnqVC1OBOSCzPa/3wBTdRgvZaNWdtVcnha2FJCxEiyWzNzWHKnZ4eDFAVg3NOxIgs2lDotAxM3CYayNM3V6wjRjYi9+ZLyFFFiGZN8SERq8AibLYadFrA701NI7zCWiI9/Z9gBtAX4FN6QWR0Ax60zMP9VNwzOn1HkOHzzyQs1OuxIIz+eoNYfgXqIrf6bypdLUzgWmAhpzOdKWFnRk3/XtjRh/iXPF26zhuQ7zWB+PWIN7nAA4iDJJQ73KHNWu4dwZ4oBFjo83ZKTqD7SZwIt9vtUZoTY2VWhhPtSH98NVjcob29TbE03uAcTuk/NaaKs9JaDfJWt1awzZUkd427G3HwYy+iTJ+B2PDQMMGwoGhOBid0TVKGhO7hzmzeMXfxsCND/UsF6X64AMMvS99DAzu6GxGChphXtDh4w/IeAxWBXph/ewyvkkfA75PJJEDmZqEzaeoZ2gkhezJPddsszBSUKPIN//SNc6JZua9jC+081KbzrXsN6f5e9ov3OFbTygXTaKbmqzlbdkvqyvEpea5/K2Qn+q8B/OCay/3zrmJi/pOjxeMe0mfE+1nSk8Sb6x4TNUGmy5wXsIVdWcI7vZ79fsEy4OBWp2V/3Cq4/xOgehD6UOAX1f1cJ4vB/Ld4BAsEuQsf+VmKzZP8eM+EQUPk51XLuSmd1Z0t/7PM5y4A4E1sbyn6fecwz+YCEmgr3gLWS7yh5E8qeAYr02GTWvZzrBzfCnzBl1NzN85nb3Q84+aWT//BMN6L/2xCnQuwsA9ZK54679aes8kzvyc2Tet72+TV7vwKckGWjY7fshST0guYHsYRbrIOY/hzWWVIIhmRiqgoQodC0oGMYOmDdw0TNbWJRQibeBmJ1C6C2zyR37fKiDKK1XGm3e7KtQ1kJfQPoZ7oNmBOvSZwDlcaS4W3rPV66mbrniXJ4zDETDJdIxUTxV+TKBnRKjjFTLzzyyB2zjzudEV0HVDP0n7z8zQ3CmEfsNP8c51/D/ff8H//bf/Pj375y//lC8NCC0G8EUPJ/93f4PdZxq7EvZQyH0MvLYNgyRM2pttlCHW516nKXVedt/U9dFhd5PN4O4Abufu+kmLIi+h/PlED/Kfxban6/2hcs+mC8J8RQ/q7tGe2fMmggSb0k7HW2iB+DlOtzXood7ZndTyzBs1Dy07RiigU/Pue0n5ae0bpV1bAsa/Zukg0VhmoW8YQBdax6oUHaNJ9AQN3aoUxs6Q7+yDCRMC1WNNlJeKII4jP6oEnSEezlpVa4hDJ7Mr6EJbxwbpQ2tyh6vRtwaA5Rm/vACjA62HV/U4PLS74CKH/aak8ZiOFxLaKX0vL23dP5IPHi6DUkGdv/V3Du9uKUeXWB2oW9bqdG9GbQDwheV+RBqgQ9yDht1LPDq4D4w2QK0c4k7zosxbE9JlSQVKh8wHNoWLzRdnSIAr6bP3uR6yiacrO9sKosfwawzUiCOU5tOthAlmaw+Yxvwe3ypKMZgYYdkIYB74TkNpeSBdln4o1/WJLH3pFqCjMjTvqX2/DzKhZxrYeV6+EeHLQl47bcAvafT18zW5vSLCkc5vQ1EOhCHi6i+nxnLjpqtGFt72z6Qs4XTt75Yq6T5buOQPOhzzad6OTsKNjm+G75ZIub3LB/+mSDkyyc88X9cJIWylGshZxNBltKX6PYQbWf8MpiHVNQZh97pldZnCmcEaLtYUaES7A3cbOh5Ke/emi4OiA2McMA/njEPBe1OYFH70s4xZUGba+/AmD14orC0Uefbblol4D2bemVuaqET5NsNNkyrsWt55xDKmXARIWOF59oc6rSZbBxsAjRbSAGzi/sk7S9SWTdihb3/ceFfxxKp4SeF+BW/SrpFsaixslTnJTLzs2HQ9AOAKcyICD3bPZ++Vii++ejK6V13n6aM+ju9P0IZMLpds/TxdVF56P+2pFd2dH4W0Jorvn8aO5lWwqi9K++w6yR/nqCCVfq3g9HYTi1fWj0amNEvlnY0S/g3Av5+w8GBUDW6zhrEyT/KCqyxcftACFDplRKAoDcBytSZ8T6KZNZnp3qIvNKIOwzPskybRY+7QipnmPLb2fK1iHlRINIsBxvhuVTHwRUK086vynSF0pg+Zk+1XqGjHYvhQvdD105XoIw3pHXClS0aHOf022SAtZi3Qxf1cksrQ328dwA3UvovhJm4AN9yOgePwwF04GuMGucu7gzHckE1k2wYGd4FFIssppAxBymBRnDdga3KNz94I+yZK7pYM41obaEf3wR3Uoj0I7+rM4OMQFxClqZsq5wlmFycH522Te04bbdjbhn3b8NLesG8vEsq9bSBqYN7EgGGweJwrLbCzFQaLEt3wwAMDoizvo+M2ukfsG9xxuGJd5A1mcnyKAl2iisl4k497LAF2Q6BYF3K+OAA1FGOfS6I8p2lODciXIRKPXkMF+F02+YOnR6gLhpMMMTlUMOY59560WqvnH5+SJvqUZKNl0+nBdC6w+H1Nqt/bB6PhlYj9YHXL+q+StsvlLM4NWSqUGXHkIhB7XXPV0+cDSD49XeHtI/gkYPb+/6Rk51ePklnbPIXIxXy6xMmP9SevrUc1CE0986d/9XSxKgH8qboR6VGH/nRpMQKJfomBoXzz/CxX1CD/eVkEfbuo/l8qPdgy/DnHVNIfH8I9zHyfz/enQfoDQPOmLp8UmKCy2Enz9O59iUywDa0mLldf3uCtpDIqi/cUwj2/RJQ5HSAbd2MI921gGrH5ZkAU5LJxHWAQNxBtQMsK9F3jc+lfcrtgHnrH8QHKSnRViNvhPrmAlax/bMMMSHh56P3rzGKFazvMy527EkceQFLiBopmgd93rzUj6w54mWyjev1MILxHyfKjKtTo2Pi7czliTnLbNTznJcEpfmn+03eneaSh2PTwZ95pnOeVKSEnWGekAOluw5XVIfm/t+npKe8nWOllpnrvsOKnp3kfWw6Q9I2PTaZJVzvPhPR8+kWYn/tv9dzyxhmuULddkSXz1puaS3PQlrEKIsPu8kt/yedGDkWyUYT1i1KfpxDuCR+TgprhlwY6biyyhp5mbQPcB0Ado+n1Ag2ipEYEgA0cxFydEUgBY0U9WOEK458Z7Djwano44t4bLAgedrchGIxNoGhNQgTrXYFoO3hXr2UmJXfWthpGGf3P6/VSWC5jukos+UivQbHDlFOdVWibnnHMhZrZN6T6I/POPHczfYOfbEU/alYfxKZTTMqIwYRkIHVvEU9OklNMDcfIY8gcKfM4H2jl5D0wlJvlMhhxea6tQYmQ4PZcpPcvkxplKB5O+3TOQMRneHD5LIWt4bEaB0vZ83y6kNyy10oJEy8ejI6BjboqXptPjRxq8nvhOUSiEAazR9Ih5PCl2iRJlICyAgtSZmbzHeK7tUrnsnM9lJ+X9X21hFZLQVC/mh+UvrX0KyjXnCv4JRHwUqPuLK4Rul7sV9DPZU5s3t7LgDjXn7KtDEypfM2kZtJ+xKeQGva2AFsbqZzCMIVf93dqrOL8pHxmgJrdda1rL/XRA3iYYUumTyBEnPAeBgB+/QfmvJ6uZEs4vXOWWOVdo5GU1nuSvwx5oTxn/d/GyVTtZnHVHKKYdwHr8UHJaMUazjNtUW5iV03LZn9a8j8ZquYRrGxIsEFC9W4D2Nm3K1Z8cMadRGYCqzEn0lwztqpTQIaAQ2M74l3AT8vvQKzjiVFMvKqsvfoJLJF4EpFR8txB+Ily0ELEShUvRZ+7ad042xxNOOJ4MSszrZrJiDaAOAUiSzJc0NwMtfFhWyP3YDdjieueGYv29oro0tK7atcn5SlBy6XWC7hWhuBJZjqxBao4mNsfq7GtJEjHINwQ2MtHxyGGf3m8jPAHs5inZhkW5xMFVAJOor+RRScLnH5Pi8pbm/Fg0WoIk1yXwRVYBg6O62kAAL+xi+C+PVJ6YOHKjZU1Nb4xVDn3ZFV2DlZjw6DuWeYgvOjTm/aRdflQLKN5OUVPTeZtMjadATDjjQ4V+Xb0DoA2MDccB9DVOo2p4bZJOHMwMIicBhKTmVu7p7aEZWeJ3AE9oMZwHkvEcsd8I/XDEEU6qUxM3fDOADfc0uL2cwYWpTWxRhIh9WonDQefV+MmBllNleU7NWxtV8X9hk3Ps9jCoLPgqzNjQ1yJM3zCsXiYOzyiNO9juPd5544xOg4Ww9zBjA5yb3RWZbeMjbiWiHI9xRjgEbJwWua+JBl+vZQr1bUt1jM8Oz8bPJTHzesn5laowF3JMK2HwP9EHGx/kyJCTev5YYpzoxWL+0i6onarsO33YK5kdKILtQyXL0915A5zfnT29R5EPX1uFsSYFmOjb0KWKXjkE34rg72D6E9Kl+NT2rrkiPdwNQkkf5JUJ/Ey3ZuHj0sZT3MnxYsz3pYMS10GvJveNzF++O7zUz33wKiCSZEyPwmGn5eegO+OvPinSlRkzUQcmCUKpUTyNGfQRP/sZ6Zpf9Cy/yHP8z8hqVqlP9gDPf9YiAKuaOFzGcIfOmk+lMpiiOcXu4xlBT/ecRdGhatEnQsBTvZvxtXrZvNH0z0hAPDTn9FjDmjIWlGGk3igtw1ou34OyCWTctEkY3Ppk4cI6jQOMOudUH2IAmsMdxycw1GyhKJShBFJraQWwKZg8l1mEtrXB7Dm+V77u5jbp2esfVvhjRV2+GcOXxeRDQqRM4p9YqhlcDn9XaVfGPiblVzNkdUJTxJyD8a/8y0RYsLf//YNx+j4/uuvU33/3r/LRpMkVNvfv/0dAOOfv4rHOr3uekDQ8P3tO9APD3cHALfRRVB60RODbqfRHWDG9y7GG1++fgn4AKQYd4tPOx1JzwjrM+nJSGbGjXsGGSYJ6aqFRV0/lJ4XPvLxgP/ii2dUnp3el/7OExZ+Cuy7ZRMa9IFd4VAF20nyqMDTnF8Pa+RvwO5qtvCLJIscbrqgcIUSYgI4NVu+2+/BCOVkm/tsaQzw6BjcgKPpPXjSf24aEg/b+UwyCfsCYz45z3hgDel6b8cW+LE7LPnW1bvRg1/rVQgstHPbNA4kQJtF/gCwN2DsoTwHy7UKrQG0qTBINrkBbiA7jUnr9F1p4mNXzxjnKV9479NtTV8kTXGDTX7BTBNO/DWtDw5hebB6qAz1ybSmqAO9i4EZunozEpg3eMzqTK/1GU1tnwkY20XGqTPuC+cH+QxTklHqY+Eq8pfFNpunzH6oGGuTtfoF7htHVInBmE+nM19Ni+p0qsI4mNHGANoGQsOrHqt+n9pM/jXpEF5ui4mAt3ZvrFDoeT5dkaHIFHTxDeRK9Ddkhfq9OcgX31dtrH6tn9H0lPw/0/c9vSIzna0Gmk/JtE828SBJi3nhxfOB4LGnestynRTf0BGf+FTMwSBdlDwYyJ8BwCsI31VR8UbD62wmn5knuS072pMCnSYcskehJ6EZTDicluS5sGGad70XNuXMFoPlnRsgIQX+UR7W6AW2sE19PBwliWey+58h1G+qgOHzuPgYgCG+rzTplWt6uafsv5NO5BfXK2mCkeBydKyX+JU5QQS1N/68ARuBNlbluSrOdwLvJBE8smVKvuJjQHhnpjMNkwKyqZLEjPRYZRiDZdWj1RpYpcq+ps7y3O850zmdXiWRw9q6hCOh5JLEfg6JmdstTVzmYRRF+Tw36pvMN88Um3NGnxKePxt1Uayuq+7Xub6i/6tZYr//TXP8u98unUO81FJG96MPtJ6Cp3RFt59NXEWY6eX6N1F9dY/bpUPLnL22YXBQeX4CgKZfp/o8mwFZForLV+zB9aiMtrGNprB3sjDlQgMMTqLsuR0qS2lClecsnsQ8gU6qkAfIjcvDoMhC75NPhMzHlIlpKHBnO0OCqo+b3OQ9OuHtrYNJrrCTvw20vYA2xvd+w8FdQp1rmHvpu9ZtciczqA8QGpg7RmeNbCh3iPMx0LcGGg3+HzGY94nl51Hj0XEkA0o3RtWDb5cbVSGfw8oPAni3q3DE810uItw00khzwzl2wzytkewGkDLpCR723+K/DLaw7eKdLntNvUOdGb2rZ/tg9JH6AYiCe5CPe9ZL2nV7dkUSYJHh9HcyUB3M4Wcyhk/d4eO+pl8uf9pc1blna33iSWyyhTZ0QUbsVokgqATwReafnLxPmeTfA+UzwPzROs6WYJ8Dz3WD+jnLtQ/ZvM2NZ2D7vYb9d51eP0EQAtbs/t7vtYBzv/7L/D+GwJk0qqy06Mc9rv9fI2VhnP6rI+P3TZT3jIDxT9mHq+PnGHFExVpI88rHT9oAfTQ9ohf27F8Q9GfT/vsKD6sdgj3PmCSsKSqXr9eC0mWTz7/88TQpUp+AcUKDbTbsxTMwZq5gZYIYzgInIU5YklRcYSlAh1h+bcW13FCnj1N/dOHPEdEMX6ZslhCTKn2rcEwAN2BsQDtEiU6HKHWwyzveXUJlFmU58w08RAkBJ0zsh3o84TD96R6WzYsz3asVpsG5/4UJ+fcpENYd3K9+p81BTuVw6SQMqNJiNTLnES5rzdFR4E7f87jNM5XnnDnstcKV8SJB+wve859tnmCzEPAwoRR1mcUzmEXB1DHhbPDQkHVmpKGK1MggYcRY6wXH6zzOzsh+Bv1MY7Gwpr14MCc7HXlk6jrlr695lTNl1rWYc2VF+SOBjOqXOnutfpv3qwVSw+zXZEKzWb0rPXCQ9WqLtJGO+0HbLJuYMv90OJZgXsVec1wqDSOdd0RKQzrGIQcp7OHohU4zmR967b8pa0zBwjEtfW4u0DW9UuXskeneiNDrnk+CM+spmsV5B6gBmxg1iQJ9E2U6AUDQX/A+tz8AU8rY3T8VqScL4Kk7Z4I2c8DVhKgyxpOJMd0pm2lRPNvndWZzqRq/DMx9ZTgPluk9gJvwPWYCty0PlRj7oAvP69mgx/CReSQb64LP2dSHOCTLY2/9Mhhbepb809z4gc9L1spnfo15TMLTItH2mgZLrOu7ZraZ6yFwkMeHgDcGjtGxYeBGAGHAIhZEuFFMdRj5bIrHUYbUMjvlSrgm72SBKwNGhDee65q/z0hZHzFygn1+v/YwD3zR6VP/Zbun07KfiMYMr8+rBO+FIahh60jWJnFYb3TTFLGhDjgSb9l1Th7LSYM01c/SSIyPjQFP74O02xf95cZKkHvFCWAibNjBMEW59Flsg6L8SyqPFMWBlG4HS6HUrEV8oPibOlLoSrg1YvbbblM2i8BQEaZB5302TXKwr1Gj0xxTGHGFwbRuLAMrbFaFMBvEQdZQJcuY+uLzbxqcAvmVEvgO6V+xkPUsqk+nWDAwL/kwuE0sV/9Y3T5pEx4p4dpZvA5fBvBC4J3BfmWN4coqsGMVwY+gSe6tbQDYtjBsIXgtsL/Ol9WNSSc6rT1T4C26WfbgYgvJmbFRSdtFE/XJxYr1dwvwnJ04W1olvTvwZJN6mf8OIBmm2u+T8WuuL78LGn+Jf6Ts6WXmHXNUL4MBjhgbLysT+ErUPrVJ6dOWVK4+ws0nXp09mGyj7jw5ASYZzig3WCPLKZ3gysWX+5/FM58oQbum1emHDGmSKH8zukd4xawokvKcqgGSmrpWtej31AffY1wRqdX3Oc141LMLEi/xXJpgY09hDkkCvYUWj6bU69g1xeygGn3I0XccX5p9J6GFjgeKeu3KHjfLY4NvNvRl1ru9ATc8pkE4OvC9DUgY9w3gDUQ79r2BBuGNDhw89GYMuTFcZJfgPx75hCyMOAPcp2gfAk4HtY7jkFqIdgnbjk0MWokwEls2xHAaZwu1bkpkAkd4f/W45jEk5D6LETJxGC0aAt2E0SwUQAA1N6ZrzKARcqrJExa63mgVe5umyGY1UmDnH30QxhAvdGblaizcXI7I4joxW+MepYyD6zvNg7IyZr1H3XCj+1tfv8bvgmZRunKsxFxycWKZuGasJWn+aU9sXvP575rv3ONkDxIX+qrfZ14T3510cP6d3hdYZk/898D1ZKETgb6T526Vi5d38UzT8xhRiidcSPySZ8y8Yx6LWqQQ+CklGXf5OzfL88+LX9dvnhRYstyz6vupkSegqXXVen90KRS8nNIjGe5uvfF9Yt3PVpGMNe6Xu8hxWfBxjZ+e/PylPsfjaTUVugP76ewrlX8vDZiA+0GalJ9/sIrrAqXEu3V2Ka8RLWIwBpj1b5isgumPOBA866zutDst1Tu9vVzr50xPZX0mw3tQ9hPSszNtlWc/36v8mSkEpHtZphV3WrT5+8xERQmRs9L5+5QqQ/7AqC2xXuqfmMQjyS/tjK9mFOUyWQokuHLWXRTUOw1msZ52N2RhhBmiYezxvtYPG8LkybwiHnYQloGlMn4Mbbv0jeGWs3NfFTabR9mrhyFCd7f+mAJnQ2s72mbeNwT0js4D5CHck/c44gOcCNJpo8tw21kb1/pZ+uTEMdX/3FJdzRUb30Vbqcnq4z5tEk7wzT/mc9m571c+E1MdvHjPCjsDmMb4QDAPQucbvvcbvu2vOMbAFwwM87RMVQ50MBpethe0Rug8psPWb/urHEwz49v2gl9xEyD2pgcNA0wNL/sLCIS3dkDcwg4Am8cUbtTQxyJiwAl3lmys68vy+xsBv65Zzyzb2/PibeWk4QHd9mrpYsgqLTy/5/J7nVcBsqlNoQCZJ1TzsZ42s/bb5Q+SvNx8zcMC1vEuzwbBY/LZoQvn8nmd2k8G9Q4aXYWTESGxYd52cliRlWEAQCPmqYwxKa2wlOZJjoVodbgbjtAe9A6QHAbJIQwkPODBYgS0NWBntF2FqhYqdAdL6WBjkgOazn4wI/nEU0OJKzx0PGxky/xxdiLj1DazDVLe0AcwbvJCr8+g1kBj09iIDby/gl9e0NoO2oFx7GAbN/VgotZB/AYc38HjOzBuKSTwKHMu9Rd5TOTPPf1Y+R+V8hyz2K8+qcmn9dU6sTxcaHl9V+r39ZA+y64wfvWoI3lRM3UvK4djHYwDcanlDrQbiF6jj3yD4HrAD4etbZsKhsFkJOQPnQgZTm3+pvU8Uj9aS/Nby2d+aOtkj4PGv71+A8D4xuT09v8dbwBmavfGNxFPB2N204xEKH2YsgQ+TVRoxO7YTmolMnlkTl+lXlO2N8NxYFBRy/592kf5uDOA5h5ZAOHW2CNqB9rL5FouhjzPqpd0LjNRsAwtCOQ0TWDW6wIS/Hmqr2FIicqX5IUdCDmZKqQyc2vX0o0VTzzEX0c78r+qdynlppS1ThcjIzaWuZBXTYho6gSRta2fUYcp0RkSVtZa4TbsYlSFo6W5lwyOKGgbw8JVCg2XA+4e7O3SkFWsoNiVXgWxDhYbaZgzTNXOdMv7ymL6aJA2c43nDY0B4g47ELiNDnCPAwHVyNh9rtHsQFdFf0Mo9++nai4yrx8LZgMgPLSzUQTCS35GlMA4VBYhClVQLDbCRmLPJHa9WpcGaBk7MBoDG8tNU69AewHoRfJI1TJpeMg+hth4rPKccUM/9H5dVWgTswS06htGn6+XiHlu88BWXvJXZjh2Jxzqc4byBzZPQZ7qnlNau04E6fGwLWrJ1QfVCiXneSJr2fyIMd9WcNHQNbvnEy4BzHfM2hpeVqDQcua/sKW9bHwWJ8zEhzwCip1LmiJQeHkaF/0YFGNav2WyZ+jJ0dccBm3TbVd11jOxXmMWfXAssNERM7CPeRTEKnVyxWdOl/hePT/PAeZsgA2cGszyWZZXnDFIyMzUqJbkQv7WkaQYHGLRVF4jOp07daKxMxWzca20t847rTvJZDmIRYYmL+HM5zsx3rRroGBnbGVsHtu6IQLoBgLhhQk0GA3NQegkdC3jo5Fc/KSxAQG9lGLo3uQ4GAcdcBmYCLQ3vDHQBoP4BcQNGxo22sF9B3gH9leAOmgkv3keYD5Ao6vt6w6L1sBgdBrgbcg2EjsAke12DXHe+UBnkR3a1rBtG7a9gTpLCHg9K+tM6IcaL40waBJCD0CNn+VG8q77qYGhzxtGGPIb9BaViztsL0bdFOzdx2aAwKSGyWTXJKnC3tcL+1IJpw9bK5ucrqn/QOdQdA9VokeI91C+O72wfa7SB09+riZGD65090+5koo4rkK0aE481DmFGzBkT05c9vf2XSNBxjqKiAqJcBW4pLCz7ulTqRWHIZn1zKlFZVBw9N9NXkQNLDy79T8ziczIZjEkaOllmqzer4F5AG80U+luJni1IhEIc1/numbIOD1fNIyJZpphXy6S+NaCak5PeNmXMm+vwPGU+svp2cR/ae73vZqXvO6ZsoGfxynHQrrKcdWuPLbjPO/6M3PHHQjsDE8ryIN+d+wxs/gqR/q6qDxyrn9UofDi/H2F0asrAs7pKsfFwc6LAAAgAElEQVTV89yZZ5D5RDotRTXyZjN2WruUeFmjoX5eG5FcSsZYM1UuAXydLj32Tmm1Juw5J/RRef+guqdQShc/nyWOVwBI/4nMtNz2a7oGmjp7ceJ3TZXmbaC3IVFvxsA4lOaNDWhfABwAd7R+YOvqyMrAwAjd2eAZnOlH4S91yfi53UXX7j26T4CfS5+0FH40ZZHpPenne6Cfqi8L4u6iSIWrx4Ed/uaF47tEig1T5rjP8Jz3pNUiX6ZnmB4noUThr167q4U/HbqnnR2Jl0SucvagbACbd3cRUmmyKZ2bXs0X5plo+ga1MEs/lawrruz48mVAJpjkKiB9EZ09R7/aBho7SD+BlGd0kNz2tOzHydLdf+d81RP7UbpDlB6Ve+rZO2p6MI1yHjLP62SJN1ljrtI/Af5bes0oFRfiTr8A+Jv+DqLOYG+/ABV5fBqTMJ/MtHWOcV7/LONvB/oMYAxCo6Ye6DaHhq9BNo9L36Tl+89/VqpjvMI1L8byAefLwtFVPkezCUo/mOqEUwEthwWcYPLTHhvUTCPUMIbNmy7RDoYqErUR5wXZ0MRIiY4jsyqCbVxZvnsdBlzAQdGJeAedp6vu+3zR+sgOQznBkeg6qQeCud0xA3gB0QDRAG8N4TWfhEtChPJkBrp5JISw7CQ/4y2vzxUtf4kM9Gae0conWoPEilRPEN5AY6j90oa+6fNtQ6NNlD1dcdm0T+igg4A2wOMA0EHYYMefsxQTYzNfbyAHTe6xr+s8H3Zmz+qYc6W/dQDvrpEE1uqFjWmtwnlvbSpl/JLo3W/2UDz82Q9FJE4nYQPzATNYo75BbisxA4kcraDQXYcjeaBf9q/w4CxbJDprB1wJ3XNZIOa689QR88+m9KjIVSWRTXu/CDXNbrI60rqwZo0u6sE+WO76bFpNo3zgqv3xtZKSRh8wb8BwyI6BpbnRgj4Wb+J0KEekis00H2ceOyeanus6KPCKUozh4S4RShPL5d91jMKDmLw/D1ZAVLQgJwD8/sxehIqZggatjbmaKZclV/P4k2MCBO6RLrnl2U17tms+JsKRDPGELhq/SbzCUcphGKIPv0L9gQnxXAt9b4ZDoWsgUaoCwFvGgxm3qnf5C0KBbh5jck0A4eYhkzOP1OuLyjixrYMppRVe168+BiB8x54SsGPzZm98pIwS5t2L0+b8W5bY5qO3M+myESNWuaN2YJKxnTSZb3eaSdwxqKGnpyeymsmavjQJwaKlkICtyuW4ioVBaZ1o9BnYQWsxmiSTP2iGUetppDgkxD3nDXIVywtEDm2kzpOMtgHYSG+fCllioMnaMWU9SG2cycVXZpbQw53DZmgQ0EVGqPbLQRPZp4GRS3s8ker0W7aVoQL1nU8hcz8j5Rl+/jcDkCWdkhbz4/xeadPpbGHB6inyQ+fXbCBqiBOMTQEAamX53GIJHJ2/cdQ/yRQEcOEPPPWJ5noKPFGNhThNBmYsc9PpovGNdNAKcKCBOehqbqaIIcb3zdB57uyUERENaq7M96Yni7Wal8rv1/Q7GfNzxeOYi7ncowb9pP1PTPXqKM0POI0O26Tw/GqwVWWgSd7R+bY8DK84yms1xiI1NxHQwSTSNxtrswN4pc7pcJVI7gYnEtFogCB3igs6RjNFskbtQcwx+1cDk0t7rqztGBhxpQXN0U02bmi8Kerl+rbGpo5XvswDYsjFoG4GWLu0SB3cxDyL2sCgBmrA0cUoW9ZrD0I3IPsY3rBhw06b2DtDeXwbuNmWSI1ADU3hPS5jf/ChYdO1ep3nTe//Fn28eGhjmBzfQJD3BPboEM2+04bhe0gZXVOekzosxDVDhDjOCOV4B6kyndRTvKV7ykWBLZ8dg7veky51bnYDO3f4Tjgrnu3gccQY+iRiBqEn5bnK+UOM7QRJIjN7PTzXU/cLCyqXYEqfFqktLyuj50bPkJXotZ65esKi1SrXI5bcrEAPvjzVffosLdwThi5hSYUmslIJR/rNZ04795/Kg5C7TjSpKC+XLHmZJyvAz6Vm1sBXL6bfd9SJ53qmuuiMN6ZS5jQ4F58XyRF+Z1xWKe1zr6qMrM+MA5xpuKTMc/5TUyehnER+duaRx9CJ5VzbqZ9n2WzKd4mW+iLDdq9czvZA0L16zfdeXs2PH02xj1m2cE95DiT5M+azsJNCX12uszMma2k1bncRc842ERebZElyuDqXuxziZzco7xgLquu8Fl3QfI+uon3J8qLqL0V/0QSjZvA8uijOD4ZEWd4BdSYkZtBQGRSEOL9Y08epb5UEFfHyQ8mNZhb1Paq7sNrfNWWW8wM4+Ll3oH90UO4mcoFHkG/MLYksVPL/YaP0kZRmO98hJrVMZVRWBxCT/Y/Cx4nW8ryoPU8dQ0jkYN1wxOQPIs5DFKpMGvaQCcwd6IxBAzV0mNd7EvbuAf0nT5dDv6YkV8rCp5MpKU/tsjOV7/3A3uIw/H/98z8KLFrw+w0HAf/2N/E0/08ewtx3uV/5119/AQC8fv2KwaYcB+SKNpYwmsTYX77I9nr7Cgbjt7d01zrDo/M/PexWtip5vgH4Nffjv0jydakHCb7GEw16dlb5gU8OEWti3JUUQHHIzHHgxlM2wqQ4m9wvE1+ZAHkEqKUH9DWDToAbgrDdE67W6qyT0YVaju9jeB65Xw9TJI85vE/6Pu2EHAAp4WTVvKcso9FNi15CHgSAhxz2uBsGDrVHUaGwSehiQlPlnd1lSAA3JQEb4He55n5WNNaHInRqsMBFvrnrIZxrovRlcR7wrmVbeZjj1vj21Zy4aNTGBBkfHDQNEk3DHCpl2qrn6WUbHPMIKHNh0Q/OD2n69GLmamRVrupL8shxiLf5/+w9plWcPkZfMxAEzIoH60f6fSIp8X6jcDxtJAr0uY0kNxbsTU/ewQhjtDPunFEs2jhNoIneWblZRT5/zjnnkqvPn5fOfclPr35fprxO37kwA4dRJnRA+jYboWb31WSQEJ7miYdlHuHfr7CbaVZd8zFTLLF5Algzj6J55bJP53uQ0w7AlhOHFbZMs0QhMJQ+hUYi/TkpkrWQvedifQjPM2XDam3YLyGvFLZwqRYgPALc+98cAXwsbexFcZFrJyYJ2z+NUUQoMI92mQrqhdoY20ZorYknZhseRIcaoW2EralHOyl/HxCPhOPAGCSRsgajja5sVbzz4tBdPkUBlcawosm87y/Ivw8HczrwkRdNccRpDtqIWRuSNRkWs+L0PXxzkepMfy+9enqr/KieB899vhXWfo/bO84v4DuX46lOa7CSg8qhJZvdlf5Y8rhOueVq1JQnU6aHRfZ6Kl1kvkTkPTjv5KnyzZK5P6inwLQSo9blOOEoP17cBP3kJK6c4+HRTpm8vBwrCsO9ZDxORjiH0VHG0Ag94tEN/QxvZSaABulRsSjsiYYaDAkcWVk/xgDYIinqMFHD1sSoGE2MEEeTe9KnK7kYaIPQ0FR13iS8+8agxkATeAcGjgO46RGBhHkfILzghYAXavhCL/gbfcEr7XjFjoEDPRlYfVdlvNzKwi6TCtqakHWNEjHyn+F3WOh8wCPOqEEwpTnirNfED/9uc8km8YAbHZDCoPMhG4+JrRV5CR8ka8TKWM1MYFZLgWL4GZOozL+Jx9yfkKELy7JdlZEsc2n36eSTfV3vD6Tn1vvljyfyvzdl+ndH0r/bRlq0U+YHva11XrbxqL530OBn4PhXTE/DWHFxh78JkfwIVH9MOglS5b0J+H+l3ymZQfNf6dMTA/XcyuUeiwTHEs2GDgZvKktoxE+0Pm1P7fqe5X7r0ZL5a0l9Sto/jsiFMLV8d1XcBL4fWLJ5s35FgB20OwLFe5MJraswFlMbj7hDzV/qXoAaLDQfWJTq/RnPz2pFebf9cMF9QJiZTrV48aIUcmE+l0mvOcLEzfANcCcNb9VdBh923zmNtYzx0Nov/f7RU5m8r0HatF7kO6XP4Gh5raV5M8PCpf+sj36y8E/hFXQ+SNB/ksfHd7B6hWUL1VgTwy3vykZM87IqAckOiCerS5lL59hBtKhr2Zl7L/+Y9CSdfWqc39dwfExN3z1ivH7uC381R+oRb6KU6hZhumgyGtLmA3P/93TINbcXLSyJ3ARYXU5Bc22eMQQwU043CTHPRrcouXVweNBzfDfr7fDoTK4UsLb0zw7tDSA94HAL+VsSoyfL6lReQw8OdDk8GgD3DrQbeOz6jDyqHNmdsWzeDgQJ7T5EQPRrHgjJ7biML1yhAirhiTFOc/c8lfnixYLXPktvV+KPK4PTHPdDJKFjE6y3VM9EXuzH0KIj5skQD3U0uUeY/J72PAeswjM/OwUVXS37FZtO3WCLZsrnQ1y3fJZLoPE/tq8wXvKf4/tcv83lCkeWA1wTRCVfPlUENvMmRVbihbd5M2XaFJqHUr2FUT+U3WqakcaLb5IGBgNfIKOxSjStPeOMswI9e2qGpyDXXn36hvjMJ2j60FzAaaatJhWw6c5wS/W9LYwd473kz3ehWzDxRoET+7QnOUrFpAhHkJIvU18Ex99JLsfgXJYiT9QlXnKsSvjwd6Qkxwqkdngt/lg9WALSDduTl2tK6TcBrvP3K+QB7O1lwXPnr2/DfPqFTtzoAE5FGojkWhuQ5RQAdhXLDqdNpPd0mwehHg44GVI8JDpSIHNwtvS+Y8adryYzcMgGclphnNvLnKCmd9hClOJMwmdCJJpXTdNnZEoNA00ECDgZIaW6NEAkPoKtNWz7DrSuihsAGta9mcbdgOQG5g4ejD4Y6EP2LMxgdQM02zIhZ+zs/eLSk4IIg5uVfVsY2wRDSkJCLWQ3lyplTppSVnrelOboZMh0+h2p0qzPSpVUnRzOFzJvtqUMKnQfMt+HIIsAJ874AFj7WC8M+7k2A7cKknyhsoaN15LNT4Zoywz4Bxj/Sbbfkpq8b5NsZjCcW/JyRveU79OKxlEukxqhOWO+WiDmNPK0r8BFPTZeTw1O4lum2M6KwUy8vY2Lfq1oufVreqeZM61Y0XMG8ErAd/ZmQ9zkOXeej2m+RnNF3lFacdoGwMg940DcNh9kKstzcQ/7ALmtYzM6mix65N5sq6klmgqN5iGeWGgdGwEWmUtCnIvifNPoLi8EvDbCToRtJ/Gc36TxgSGh63notosBFll6b4R9a/jaXvCFXvFCDTsaDr7h4Bts37Y1CcPOmyjFm+7DZI34hX+w+7/FmcPuGJcJKnsYGV97bt5+WaYT2TXHTBAjghjYajjrFxApNvO1MJqbTU5Ol5dkVl2mRyyqPAlzdKVsSOULOLLmunj+9IhMxpO8l6lHPH+e4TunHP/N+4ALmNKz0zKrS1uAnqo4yzCxBqbuns4bL8qdidg1zP5cx+GU50HZkjVkncve3SseuR+cJ82vM6IX5yYXhR/hf871EIiLPFeAPPptzy7auDf2z8D2DOinPPOE/vn6ae2/D21ef++fX3+lT0yrwWdOa+pMh1ffPsVa9dn0RxhUvKPNTP+maA6nyMr2M8mszBhdnYHUiFostBta20Bk8oWd8tFZ9nwa1CLr/ZXenT7ogX65E3iyeJVUPgEUD92sn38YXa6MYTVJl7vVi/IXWafTJMRmpD5fJhVUyf4uwPy0xGeYcnt5U1tD1U3ZizDon6Js4m6EyzYqWUl1ffRwgvVfKX0UnCq0OH6rlFqRqt9/hgI9z4U+8I/9C/738V32YV9egOMAth34fpvhBvDPX/8T/9w2/I/Xv+E7GLixMJtNDnmP336DK2YYQunkpBcA0EiOeH/9568AdezfvqIz46VtGDzw/e275P3SRMHVU11TX+vBjObhuvnRfL/q97ouTwL6o6PEf3Hm54YyV0RFn/kpwRUvKMIGOHC7pCOU8ujDod5sPn5K71rzd3q6tACZpo9FR++8N3p3cZhgh0djxH3upEdQzKBu2ufmh49gSMjvoXeqHqpoh95+zgxEsMDgB5NCPa3nCW4G3zSCx0qhKci0sy2tTsIPMQ3g0MMK6hi0gXnTMLASqriZ+y+19Peiw6mV8oE4jNH2dDjj6C+HkCpjMW2a0/vipXIap1rXo2W1queZpZj521UZp8sU48cAzMvfcGO0u3WdSjpvNC9X789l359Iq7ltQrtfo2DziRU81usA9Hez+bRYzwQs7zHzd5kmljxl49YnOsqexdU9nIsIjf2i6/671zcjqYJ7wsP0klI7sn6nC3EYMC+g9bXudPrX4Dz/N3OJyjEuOcgPysR+PMriafuiFd18raq8RXp1jof1+h2E8EmhjevO27K7eEcuCxvc8tvYw6SAiEIwz+bIeAmov88jOBkNDsDvVweBR1IyXfJTI8gLWpY7fjfFPI0rAhRSYr/CLahzzGwiDfXMQ5ezvGnKb/0qEd+XCVGvd1jOHuBWJjzDs2IzJ55LwGUsa5dEeS4heG2sdK5Cw7ZiNuI0Q4xZh2fKEYWbJGw1K/+lxh6evb1uaBvAWweIMXyOsIbiF945BoN7A4+uioTUKbvcPNNuRtBR4ycTFkjHRngvSKppWeay6a0KTGM3lKIvMHcw4sAGysf9OhWbny4qGOyJ3i3GqqY8s3Po80rtfwcqckorOLj8Rs5TxKYrdkvl/Uy37zPpe3Vmcmu02kKln0LVlzpX/WIw/kM/aerVqi6dk/dkmxPQT4zqQlY9UUHO5DlorBT9Mm9fvXAM1tPOe1m+SJpqcqXVLcGaoFwtUQAgMSwkXuDMQ97yomA8YzMK/AK/Aqjq98+Vp2c2bCAwvSGUmPJ+qe+A0PzBwAEzptVDXVPIZtqSuJ3ffc4ANdk7+HEwNT2aCN7IEIU3uOMYB9AaeBC4Sa4NhI1EUf6FGr6A8AUNr63hdSO8bhte94a9Sdh2v5t8Z/Rd2YuFmxuM1hr2RtheduwvG1oT7/TGkEhf6GDs2NvA1iSE+WY9IOjdu1USE4/6hh0h01PYD1DCkIaUd5GG2C4zg4Vzlyu+ohnW/baZE+RtgynPh0b9kiDvvewO2MfNbzizd9YxH3wxmpqXTDYzomjcqUb02fFxut/cynGaa8ZTNN7clFf/VSBnVlj4qAF7uiYh1WGixoLov5v3nPY52oN752j11XkBP9n2O59PqXKmWvgjXDjTlVpvbe8KjotU59Dp+SemCvIVquzHO7tynflZXDzT/8cS9O+aXBf02W3/jAnwXyfNs4LPfgd/oXdOafounSTzZlL5ajaWZWaM44B4p8h9OHILmEQ0gxp9C1/XQmQ78ovByOLjSS/xV/pI+gkh3J9l+lW6qIINPXh/8dwOZ6bDmneC9my6x4OWL1YFKhW6AlZ+c91M5iryHSPMiJCnXDa1FoJQcWPemOng5VNX2dQ9TszSHyIE7vR7VY9Lu5jzOx66EBnOXh7QNldexanJ9/blnaluqbzKKnB9OoG7VyfP3+t9tfX7E03dxeXV++MN9OUrNmropBbtmQZUGAZgd4L4psuUkeaxm/ttSpyK6+mXlBmx89S5U+8/fyCkf9bymXaMF0i9+/oeYPcA/AwiyemvICR75k4d4HwKpu9yOF2lTvo6Qo7SdNhkhw7MEOWDhUfNnttWoUcgyG2IgYXUfbWxy/1c/PQupoMHzhksHJ56VLgDepMQhaMD6jWHYQpShrui8RBlBbMeXUHvo+7g5AcyT+RE/1ZW7toG5/e1Pwb7MFRofRbGewy9H3cHo4FoB7UdDQ2NyFECzRPNN13LO2YaHevbhffKK4yHLdnoD9KxR+lUlckcuF4+07yzuQ5Mp7fT8kxrxOgaBsAHwLu58AjPG1a/Wq7yAeIuSnUaQQ9RFFaZn67StKnlE2juzahrl4d5LDHoFuvnfx2/FhwsG8KMQC75K+0qhh4+H2dawxg49CC36Txq1FX8afg+31jrlbmlL+vBZDkUsxCaE5lGqOPcho/NC97o1QAT4avKQfOhYO4/+V/DWnFej6RI+/yjKWM7xahwzji3dG7HaUc2gETMg5USh8pnfX45O/MJsiu8g+xOsr/WKEoCnhqgindTiHsbgCu0p7CyFHlb+g7CrnV9p55AiLJJTSvfWfhQU5jjrDrdMYwEV/QUALBhl98t+v02jplO3kVq1Gu4I4/O0tBoYKcY/7chPOdQY6/NmlXZjQZjYHefOJ+1Sm+aDhKpwYVxbqFgUmaw+4CrgiJovHUTHPPUntnd5ECMx2Hda4zJla+pWoJkPVuECh8Hw4waprHZphkKdU4M5c2MBmoE2jbs+w56ZdDO6DzQWZQUgwmjNz2sl4tHWH83jDAW09DxPDjJouwNBzWuc4KTKDXfye15FHemRA86zykX6z27nDhRjGeIM2XlmjyWIFrk8mdXz39WenTUIO1X2hGYVi58X55w44tY8xOvd1Sf6ygcsMCeaRefM1DwRFliyQOd5yO9Ktp5zK5UbQwvJRoOz5d/xyRRvu0TOVqiXBAU8w+pbMVNEoMSIk7jQ1DvZuM9Kevagyo9YEzXH51S7WRCnkVpsL1o4hAweevcZp10PH2cE5fXsxwnUFHOOm09AqQ0H60sq4FNe1P+eIZjWvdaxxhiWNURMY/McM7R42zZzXk08soMqxIrAOJFnjmlAUncQU1lWzWAfyHCC214gXibf22b/NGGL23D123H133D67Zj35oaRVkEOoAGeVQyu7SdmhgKoQG0AQM3HHhDHxsaEzY0cNs0RDxjayIjbmyyXsPQu8GJKYn6TfFgR9/Jvy+YiYgS/kuV586f7Aoidn5suLctme4odVwl4lfnlhToQGc1eOAYfwY0wFkYQBhcMR0IfgfKNLNtnAiBUIDzZJrWpPaw8DT5ne4gn95xaqNyvzXFTDr/+JKf5WuhmOP461RBaqHS/QSL59N+3aEoF33D4rMyrEU9/n2dNcuTl7BMP6/qXJRXGKm2ccL9Klnfz/SQ/N81jD7/JoOLufwSgEfnAKfxPVdx6uND+l3Lpy9TmSW3eFyeTi9wxc7W3V9JXIbXMjeexmeMzd05u2jzGqa/0nvTUzPqtMbP9NSpnL3y4clr9CeM2UnQLM89/YHzhWak8Eo298RBU5T2MaDBXBjcB9APIY0H0DqjMYFog8kKPNFN46UXtPmKDj9Lq/5Kl+nn3oH+hySbVEkAs4X1h6yvImAu3682Uxl2Vm7YFnlLFVmh6OXy4i7eLp7I/v+5C8sU2ZPSCzh5fk3C7R0hygTMvGk244F8wApAPNQ/tzvPpgJJJIOfk2DymYqeqZ3VA5tfAcck+CzLvqPNd+CbAPRDlNXb/oIDwJf2gu9sMY5pXt6D8SuLRxBupshjRMQBRH9eX7ARef2TkQgDRz+AMfDWRNnUXneMrQO/5npSvyrgnH8gpNfVacRV5z3/Z6YrwO8NTqUZP9jsBVm7n/JKId+vgxaw2Li413/Bs17dwDonXAE90mGT11vKLuF8FhdJsDkJpvkOScLk7TEgJzbcVdnXRCnOEiZv2Fx3xXl3JFAOBe/PqyI98QZKjxxOVq9YfT/ZjfD0IbTUaKzWcbwBvQO0gZt8utHKtgG8CfehDdR2uWbDq+8IL8ot4ASQLrOfYZlS+GhIlmeE6/cQtlLvvfXqNMrws5j4BKiWR6JnTIYWHOV9zuj3cch9SAM6LwC0TYfP5nkHhmp63OBC8Hn2bqvEbZUuZCgG3BDE2Qjrgb1VzZeyfarkOZjy9S8uF9ACXzk/YEoqQMJJ2wbEPXpcRgrjEcFUWPr6pgV2MKOeq4ktRUer7JF57VW/YyOUQ7Tb7+a/5r9aa00r7F5xpCs2J8/PJVYh1tdAZDoBxzwgS0BwLPUniiChrjEr//J7WC0EQMO8gsLAyjk9WS3kIeBbHRtqeCORD9/8xJtEVgXcI7vR7rBvqjCnKmcqHAahLI+oy0fPnmtZM7wII9joJT8c8ZWEeS//ekHGnOPod3oqJVmMvIydkD7zKuXL5sF4bWOhXmfWfWZRErNe4THBpPMDtgLMc640M3XN5pSuIZ0cg6B3zOk8NCX6JnHVicTYdiMdcp0zOUz54AF0gFMwecdFesLQoBwbgTbCvjfQC6td00DvkFDtzt5UBmAzniC9BYCBzmBqGJADlGH0npUyEUAj0S3DxQju3x6xTXustHwkpA6THVyUUR6dwxCf6g3qVWnGggv6rLWcIz37I9PVCjN01vdX0sZEa1PBslQ882modC9rOH2cVtBhUp4/8kTPLU3RU8qbuxUY70+dijub0+/JI4bnOpb1p5dp0sucaSflOQDQKPLLSgQi+bJs2mWLire3i4GEyl13+H37gowbj2hxAoCvF84pJRpsMhmdckhxfy59kLs3Ncw5KLzaMWOldncw/KYmU57nEo0Im8pfpjwPfkmLa2oS64Uqn3UuERhtiFnWTgMvNPCFGl7bwEsjvDbgayN83Ru+0Y4v246v244v+47XbcPWNpWk5Z71DYS9yZ6EWY25NFwqE2Gox/vbGBLaaKhsTRplpDOaGqk25RHEGiWKjT468Yx1wE33d4prNvkn5A7hPzx9NhJ7r63J9SYvJjFQKM0HS+C8kYy8Osff0DVj4DDM45zidjAdy2FGyQzIvgLwsEl1HRkv8LVmSvAR7ybaQbB9rdWPBFsAOONuMkjSfEIiOZXJc6rQlIRmgTdXVED8kZStjxArYXWUOZVZEf/3wPAw7xOVebsFnifSpDyf5oWT1mV1M4XMAxBShIO0KnWFq3QVxfPS75Ppss0H+Z9+lxcXL56X/t9hM3++lNehzUFeoONP39Gfllbiwsdr1LSSQ/5lhuLze/6R9FzEkdjLuQzazcCvAzcGdSjzxrwOTMZI/PFcP7DeWOTf/1KD+KdK+8cRVwl8fvaBgbmyOsnNXgo7+jKfbtKi3IdTbfgKoNXzyvUWO2sq7zJeV/2wZ2ZW6tJiym/7SEMNRZazdfwTaTU+V0QjKwlOArjBthB658qxHFBO360Ov18qZ+f59/nHg/SB9XIpYPH689PaLsJwlsMYSbovVCFZJ/cAACAASURBVHbaiHwwPVp3mdhjeFYiEuXbcSyLlSvUEg5TxczAkLDS9p7sEDIbnJiClaFKV6vjBfNFxX9EejAn6pyp8/6q7CV9/QxCmQemLvg0Cev+2vI5vYo1PR0yTfTd8KCHPjqerjTXAxDJq0r0YjkeP1YHaefDpIddn0yA7UQjH6xZpIzk0d06MDRUajuALv0js44fDP5liIf6GMB2wJXkb+GdHrgvyvOpx4keX9LaBZPJayt/ZVm7aKqwhdwP6DIakXiONLnPZ7QXXX62Dj0uPObDJyo0anE46e0X2E5m2Hd+P2O4VPu+KpL5rSkPcySJPImz8/OJH6a1nRRP3obihNsBwwFbFALuiDvTUebECujFs5XMZGMwKUS9eX1l47HCUeBhWn2+zkvbtWjjkuHOmNl8THAPEj/qjdRTnPT6AfcYJM/uUzN9J0p0qMAZyjTzlJX1FQqLgPWrHxClee5+5jj9m3N5aE++OByiuQ+55auzlgT51JtInyE0Ry/K7AloCj/yIElXIFAq44jRF/67zqvEc6Aed0TqUY4Yr1Xdfn+1PSNMg4PaJsVz2MF4jHPulMgyJ2aIk/K8DioQxjhI77L8W4pGpnhvxgxN+xbKc9LfyQ9RaXJd4jZWcn+2sa+RaGIK3dpIlVucSgZBzDPDTH9WJkCzZEGupCFlHd0ymQaiAdiED6EpT6JYf5t6xBMBXTU4YvPLoM7TypD4Fqo0GTYfKPCXDDpYFRKjQ5Um4Xkv4ewHRAmo4daJMdSMRP0aMZIxlZlVTHSUkc+OxZgp4VFHz4l2cATl1yoXX9pru9yc1nJRWvrP+CeKL6qsY/n4Oc8vVnybrtl5VSCvROcrejnPtZomDFdIozECpr32sprEFx1pBXuLn5U/Z+8xBtwTfYKteM9UYIwH1jvPSeWTWV+VZBYbhHyWkxUsYWV36neBcIJH6M550IQnnnJDxiNgPfUyNV+pS17p4Ywgn8Q17zwvp/1F9nT1h+lBIaScJiGh5L0n+8hAyZf62jufecuryCimSB+Sh9oa+7WvjDDXTQDAFPjDjClhQaqsX3ZlBrT9JOMwYdvEaHBvGzZqaNix0YZGO7a243V7wcu+yx3n+vfamnihb4Qv+v1lI2ybkn0N+Y7BElCGxHs8OHEDYZMrOajh6EOnbEfnA50OdGiEwzak/IGw921pvZki2RXO0kPz7gbUAE+zGlW30TH+Y2zLlOab9ueFgFcEGeksxoE3BnhIO10Zuuj/yb3RRzLatuXonufMypuSMt05jUVru16dNr4RGcoMqTKh4nRuQ+nPGlT4WPlMIhFWvq7jCRaOfPGbo56rtYeyhrNh7mI5nY15LN/5+dWxZ8B6rieYmPGKmUac6riC7V7Gmm91fuaQX7RT8Z2KUfp+P60QfM5SvpQ2V7Tbzozmd9PcebTvX/RrJdvMfKw8v0OyV1XMKc2ajIOrutL6rGxn1c5VNbTs4xMpCwTTtHlijE91Pf3wr5TSwzm9OJMoNaS85ROYadFpj/AMhJeAPa7g1LcHNOpD6XJ13HmU+NZllcEfT+Crw9foAL0BuDH44DjKzSGgKm/MbVTnnspr/kofTn/sHegfbfuJtX+Xcf1eoF4CkIGoQNfZnjeb5WTjfEKyoCn3Nsm/c3ICUvrpId8Ik8KhCkxW3vcBjNPcy4KGWzwzzsqXq3R5svFD6STwV2HvkfL8GeXOdevnn36gWcMlP1H+09I8rjugp7hy/yRtG357+wU4euR/0bl/GNx21+9I82rx+TbALUKLdc4HoazKR8id58Tg0fVCXQIQCqp7XRBwWO6h+0ppbqb0jcSr/So9kmtO758QOP6QtODWOcpECaM7r1ECNk5KAV3fmW74qV4SVnwNDc3CYXbP4YXr7hJkh2C24eAL0nCHXjzMXyWcjA8Nr21Z9HSdTDlqbmq8yeEOM9C1H0PD/DS1VDQfBFOcOq0zLzJ9pgdkEw1lg5nTwc+9bqfx4PmRPNe/Fu25cwe9YGsE2hvADYN3cJc7f0gPaeLAZSWZX0mB1t/6eJVvVfxq7B+k2QX53FQ+nHa2rZkHq5sseZazQGz9UjWKH7zrXfGNMbiJQQUA7pqfb6nvPVV8EgzS84VM4d8Z86F/7nfCXcGhLU9TFbliGXnqtajHCxUc5Pp9CvCdjZw91wLFwKbrn1dN6Q+4HFJr59SUDekEhigOw3N9HfsHOu9ntSohHypnEDPOrdsrrne1Uub3+bjPoGfPExBmP/D38Jvo0a49OijafIGF7ZZc9WZNQjZd03/zRtVyEWAnzuytniflcZIttT5iCZFGuinS+poqZuz3MAUpor2hscNv1EPJlJeSD1qERLeoAhMcYL8JI55rrAQikG7XWnp9G2JY+Daqb/7c77y8av05D22798vC0Hc+AD5wa8PZlFNoW7L0onSeAb6BAHQIjSKDmRQxtIHaAI0xgWB3tTb4JQhlDsf6sd5a3BGjkqxz2O/qNl5KqoEgEuX5toE2QNy9t1jT1GxC6FUPjK4GNuYFT9Ti+hiwhl2Xu3HRNgA7GBuYm7BrDQgyhinPG3g02A2+0q+hdXZZESS8s0HV6rRJfg0N7PeZN5VtVDEq5C5WixkzcV4jQNBYpyWCbVZ5SOzZWJFLaYIgsRJVPpmhgLlCeub7dMLGsnKfSiPvsuUrOeWu/HI/MavomcD33hRWbWkOkb8oVx4u7VYZMDORyqXLKr2UVx5RZg/n/iif/tn958+0EFcpPZd/2ep1x+P5lRizqC/GySZmDqv0mrJehFrPsFkO38fk8ql+W1vZyJDDcMHay5Ya4cGJ+Qslj9wMS35oF2bnuoFSjoP+ZnkqV5cRMGwuXiCYoPRmvsNzFZFpKD3vuayBrfmJ55s1NgvB3l7x5eUVL23H3nZsbcNOojzf24atdVBj7NSwkdxz/tqAnbocJTTGaB0HbS5jDIi3uGxPSCWvDUQbSK+eAgg3/+87bvQdB93QcZM9VxvYAbygYetAp4FGDa0xjq6GViznDKY070Oiodj8bRYKnYZ7htucNeX51lRp3hj7JoYC2054JfFAt/nRmIRzdKmya+h421fPSnGCRRExz3PZsvHshQ4dT2YVchjwsPHJeJMp7Rt5mnJpssyTzQKm1TxsbebJmOe20rC6UJ0naV53wafTcpmoXxZmMszvPo8rjdR6SvVLknr6DOMOr4oW5U6wPXh/mb/Avsy0pgduqJc6KL9NTnoAwilSY2mPS6eWyqE1BeeCx/fxpKsy9+r4kfojUfq3RjgKfJTmaPVQXz0DzikPTdvrPy69B+9/pU9JtoyoPLuX9zPb/pOnJH3dzREiXuzN/NziYODo4DcGf2fgBrROJZqS8TogjM5K2yeeUunpX+kj6V8/hHu2Xl6mBSOlxXf7bQ9/xkKt9xXfmaN5cxLZVoySp41WvMo7ecOR1ZmYLs9Z7bWjYpITr8KIrTrwAwjkDN8ziWYOzunPOpbHeCVV+yYi3XU8HdATTgf2FBbrM/gfIzpzcY5xyLCCL9DzyQQvC10Vrss2H4z5LwD+Vtu5B3cpkAR52dICB3ieMoyTtxXVdqbND8NjnKViHgwhH0TV3U2VXac8NLf5rlO/z0gP5oPP87z4V/lKPXT68jnpdDpaCVP6bOmBnyYUmp03UHY6oId34ng6xMhCw7jLH+CnBYArz2V6pbuckbF7vSlbp3SUOvGisq5Y79Rl9UOzA7hx6F2MZhTSgSGH8VJ0AH2A7TS+D/DQQ/d9wE/sATUysT+Oz7yryuvKGESl7eYJcG9n7rSZp4jjYIAHgZsc1oAJrW1yiEsNaAN9nCbHXK99uZzDF89P+R5l/MHdAKti29z2srsBgNkDHTK/bS5ObUfzEt40CJDcZW7RCkgPskyAvoH9DnqrcxWFwIa5wFcJXd1A2fcqS7nMvhgYQsKJFvAhVFim9q0cA5ushb/vr9F3fffL0dNcvJL9cn+SwJOFm+TpyxMyiuxWInnEDecIR6/FUnKssOdWJRv8Hs4ZcLk/OUMSVInKzFQTk3LoP5LX4TSiRNNQypitmNvn0Pw4ADrXF0uCzg8fVwrz7J3kJn0e7ITWzWflt5akhBufz+aJjhQK3LyxW4G75Txtwefyb1Gby/F8S3hachj9oFnGB2E6vF6Wted1Li/ozZwhnif+yhagodhappXgB6CmZI5MuvDapofaFJPQg/ra4jRftxkzA3RGq3nSclp3BKnTumHj7RfHAtigd5QDaJt4oZuSgQBwA9t1AOZlT+Jnjq2pkYVBZP0XftxxgJso5Ac3dCa3bzs6oR9A74TRzRNRwgVbGF9RnqtsocZ9xHJv76CuMkMiOLDprDg3oXaaotIHUmWXrXwjxqwGfMvIOptRlzQ/WFmPjat+EvS5XdmSxmWVfpzS1Frfz6+r7LYKaX6+9xOTeGCi0mXrhcWe9Iru3VhePJJxMg9LX4PW4yy/zSWcP1ChheveJEpr8vLJE71k9+VsE4Hu/M4V1Q5Z3uDf7HUgxoNS/oLAud/nZ3P2i9Gc+qONTTzc6FXcrR0bTEuvMCM0zvCuhQdN3wPAxUSayDo3AK/AFwC/nbijU1fjAYy3uX+K6uy97jLOBU7IlOdZuDjN6bh6Iyi6Uk1n04oZFtOyBsIrveLbyyv+29dv+MfXv+F1f8HrtmOD0MO9NbRGYLqB0dGoYYPIBhsBQMfAwI1I6DA2MWKAGAmNIWHX38DyTq/yoLYLNK2hjwMH3vBG33FrbzjwhoEObAO0DWxM+EI7uA30wThax96Bt8bYtoExSLad6v3dt4Yxgm+BCTzkWiHhhILLRgARowl7UA90EmX63vCyNewNeKHhuCVVFNtujxh6vUf86er1LYLbk7PdeR6e6AJgc1oxR6nIczZ4ADg8rU0+mNaxzx0Smd7acQN4Ks+07szgMzuyx9YRMxrgaHYuLy/ZXyJlnCqMTyp1JACmcPLez1r3ufpoBwW2qzJnen+uqHy9bPOKxvH997kBnn9W2GPLV4jHBex8931GfULYstAVgTeZWeWfR31cvX+IlnuDjDO8NbvhbllfEb5rWZuAjPlYZ7FW7oK6SEbS5fvFOvmRij3/M3Pkr/S+9BiJdJlLxyRtBeeCi1Inue3HpftUYfppe9KLRTO9ow80n8o+O5fL+dC9qu9hnUBAUxcKM7bsQxTptwE+SP54UUul+Y88z32MLmjRX+np9EEFeh3Kjy6cn5CMRq8WxI8ogT895UPQ0y4bLqC6cjzy5H3Lotopk3tkoIROzQU4ZMafl2zRpo1xgjPGK5dZQGSC24mAraQG8eNYylwLmra2vOZZgPuRtKJ6jwSrn5ZKe9NkSpLY9PKTmy9nEA3At+0FvwH49fhN7lO+zQj5v77+Awzgf97+A4CEwh3U8Ouq/uk3SzxRb45ET7uT7FIPefdt/wJmxm/ffxPH81VdFf6WD0sI+JbyNQL+TsAvDyZdTXdRvipbqUH+XFW2lMLL+08edyo/XKFBsY43OwAPbz37s8PiySjAw9rohpwR7l7Ms/LcQlpbYTZK+AgXc/pxQ5pcbojAZBEgGkk/2w1oHePYIAfmG9AIzHqoP1iV56pEp64H7QMS2tK80a09s8RX2pVPGNiOrwT/vulawn21CDTpwRlZ3/R1jiDOg1S/IYewmw6t31F7SV+5/F2g9IcTXXx/RwN1+cUZlCtuPI+5eAzlXxnxpwObXKnhyJTnTeb6LYOtmwBWr3Pf3GTc0TwPTBmfo5HkA7OKEq/T1F2FB9tnS51YBAeYMyusrjz/MuMEwC9vvZDORKMm/p/TuHjH52G3P99gLPJBQ27STCFXFMQwlOHLXuh06sfZ189Jnh//WNkZLplOIQ9dr9b8bzYU/Bi9v1tSYXqm9npRC0EuUGH/NcvAw5XWhMPWBUWbKGU3vQV9g5O/UiV5HeHBTHjD4aFdJy9emKczgoYScoWCWR0aWbU1fHuaeMqfGr36q6H9GmoYNZ9XWrmoL8Y+11/lgrm/1DTU7jgCn3ndFJIUNlJND7AlLjmrNbyr0pWeCY52SHhw9apXr2upyz7P8AmEAb+tIVG9R/7G0DGy4RBFCDUG7zqWGguX26bvjECrEoFoIltgm2OKp43RNhZljeOVcfTuc4M1b2fCOBqIG/rB6N1s3uwOccAU9KSGfbKsw5BAYs8wBkQ5J+olVjxESH00iHzr857FUMB+DfMwVxzblSDguJVA57zN50HD54KPRbbHc0UQi7ImR/gdfJpqlT1cPVuV4cWzj6TMppfPVxkKEHn7mp30gRxr4mR3Ep+MTKbWcCqdn9jeBUgG7ntEohPVv2QDtVaTJwqCjDhNnQ7+Nv8uVZ+MP1bF04yYnlezolQ1A8CxcI4+j/6q61k8M9nLzggKqV/LJghaHq8YU/jOk3af4jmVwpW/MNJVGAgjymmhka7XpDifQFXewSa1sBY5e2/6OZLLG5QElbSiWekRC00c2g4zoZMoO3VnB+OjpJ7k316+4b99/Rv+z3/8N/wf//gHvm4v+LK/yKHyUF9yYhwgiXSSjHYZjO57JFSRQdCgUcnIDZibKNCpSaj4RmAa6OjouOFGbxh0Q6dDZFRi7C+Erb2Il/lgHOPA0Rv2o+MYJPbbA2Bu6NxEie5KdUbvQteFjgyN0iJIabo/2oigbAxbI/G03wgbMZoaehkZ30DoLN7ojTjJNorbtIQHp10iw8O7hwLcYpyQ8wxZB0lWAaat5npbLLid991ARNRC+qP4RFofic+4lh9JEervU55UzhXdhixKnV/RNQImK4NJd8lzmZVS5w4BXtJnPn++m8fxxfen8lfa8552Em4B+F30pQenWyLjzXX9y/ZXEsEz5d/LGX8wvReHnq6ik1kBuq578fzjMlKZ5z8tGR//DKlO65s+/wumSxlO0spg1As+KPuhhn9W+uHz2J+U1JhrnoN0iRrbqxKx7FmZ0MYAHwzuA7h1cG8Yo8k+a9Xdu0Y/tFgW76D5f6XLtH9swl8tmNUW2b4XBrg0Y36y6WWTT9Szsnz6UOO1bb74PeebNohX1VRPQX1nRDCy3lsJdqefbnyG3Q1cpRr2uj5MBu8StXz6YMJyvFp+T/3IEOf5E1Fajfkrjjh8WDjvoukM553b6xChkX8g3ZOrly8+m7I9Oqmxf/RvWiL24wdgynN4mcKT8q3fdPOYoqevNjgA4mBh9hw+S/gMDwznVwQA5Kd9scm3N4KKzKgIYL3oDH1+fk+Q/wNkiTUMeX3dEZ7Sx+cAn4XwexKdnb84cQtvCPOIIMBUD2yHA1kYMAX5YMDvJNUNunlMmQeNeYUudnR2f/Bd+nXvnWlK5gI44ZfVD0NOvzSUofYDBD4OjKYnJ7wJ3WKERz1r/0iO1n1jb+N9099fFQG/MeIQI8Ml7U0Rrt9lWRzv5NxdvPWcvzSBg/Uwa3Q5tALIx4zsXsFJie4Dh2viWcfqCk7jEXe68Z7d6SmZEmYGKzRm7PckxlRIh0P3mnTQFY+GF6dlpPOgrjN1G9X5da7UFhBHF/Kr2heDd+LPKi+sIhakOtnKn7LZel/heIEE93RJsOWyVPJV5flDkkbn8bigl9M9stPSbj4sc8m4yfpbKSfJAp2SerwaqjnCnBLFs9QlH0kdb39m+d2LyNrV2ul8n7Pj4ZTGxXPjpfJtB8UG3Q7X8zNI2PZianOSZ2tTy5hASXFtSCf7rXWupAFXdOe3qY7Mh8R7X/sx8SScnj2WkNTXjlPZ4q3ncspqEWq5ee7Egj1L7QlOozXKT62rM+9lJ7WU7jcHbFnEpJ6dwTJ80Z6rd4mjDY41OV9pYPgLLGZPdscuzSWEslk7eTw0byNgb0J/G+m95/YnYW9zuP8NodwxBHX71shV7W6Aqck8J2PompLeTUSPzvI3GOjaWyaPNsOsAew5cEUgYBB4iII9bJ5MgSSw8Gm+GA6Cn7O5eCYjNSLFCSEiKyRlOjeN5qPrV7wjENqXAZGluoa975C7+lCvIpjpVJoxD9MVZ7hfvshaNRWafronPNVeWY6Uh2+dLZhM7thMdchpNVCWe+rHtJzzF0rLNsMcwKKU+EBS7qIV/Qf4BC8Qochlaqw8OhfAcPAa0k4ZL1od6KYR0OKGj1JxUv5E5KZU0it6Kcc+C3rNMXaX8zQVIqNHSWYlvAh1mEIXG61PdMpw5vj6tQx9uRQgw56/EwD+kvoP90KP/mZDo8UsKUqpMFgweh+yk3XD8TKEdixpkNbtZy9ESrnM8IAA1uswmijPG+0Shn3/hm+vf8ffv/4D//j2b/iyb3ilhnHc0I8DPDoGDzAJvTYCM8ZAH93/xhgYdqWXd1NxY0bWOlGMpm/UsDWKvQt1DHQwDjDFje8bxBN+A2O0ga1v2GmgoWEbHAHBIMYDpjzvQ77fMOR6EMieyFksQe5tJ2FTESPpRJ18EkyzNhMcHaQkFXrOfAToW2R/uZAnfAoZg8hEra7LkCdm4dPwH/Mgbc0hEbySMbwrw6M9QjzP8BLP55rh6V/gLz88H0wMsn5x1D+V4+k3zz8Da1fMa/X7cnlyTNyrildllywwHsZSWGa8hvdemwnIaY7W8c/VPMO0nspzzkTTu0LRL+bC8lEd8vxiysd3YL14kZesw1ozrHFnqa6+KlM8xPFPV0DyjJtpY3FVxsbpmUX0V6rpyskn9uaW8U4ld4XsskCmc7ufnX5SG89uSu4mW6+Gk8D3HJ3N2tR9FZEaPIvsOFiMlf3uc9s7qjzl8tyC5vt3zj+o/E7v/1pOP5z+4BDuHx05Y9YP7vRa8aSrS8ueTrXST1l9pd565JAESGA6x7sHg4mqs/hsnxyL/fdcSHkx5w30yeJ6ypw227aRT2Eh0wbJnxPAvokrosZK+Dvdv5qy/t44OgHwwQqW8+RKov8AAHksVmUZaczj3e14w3//8g1ja/if+I4OBlqfmMF/8oGNGvIcduXhabeT5rYrRgGA8Mv3X4CN8O2buIv/evttqhOvG7B1uc/8dHKR2pjqxayIWuLCqnhEL4pk/TT6313gJ6fKpcuhDOmabhzvKKGoMWpo3EzHRG7j5PHE8MtGVeBwhXP2pnhSKXx+9QxeH4+BHa8RD4CbXs2oB916ISBzA4YeKLgOlJMC3RaGebGntr+y9zkE3Ax/3ZSv+lp+TKzJRMGoQPQWcTAqZQROxsA45PegA4RNPNIHg/gAMEAkioQ57PyMsfm7ju9D3rs44FlU9dyaebChs0scrd4N+QLgyH7C7bkPVOaaePzkcTAlORKNM0WnxV1GjIWH71R4GIhID9aofppk2OL96y7f30bw1m/7Cyj51ALA0d/AAG7pwMua6dnFmMSjlrZoemiUkH++5YwGf6W9i+9GW0yOoLujn5qwNhaGEA5DPLyuL3nqkB5tUlbRKVyThinzspBV5jbimeQSetkQQa8p8bmZ6mY1+b01tV5LVJ/TylsiNoKWZ/pctvmBtCBfJudKs4/v+UU6ePca9JkpDKeGXHkucqLdK01J/qRkNJJhaww13CKI4hRJ10No6p3dVcbsere5VS1iS7uceGEYeo1vh40JVBVRI+XlcigMuRt1S2SK3Q4g0ZhsdKgMPPlIQ2i8PCddB36HbjqErx678+xLM9qVV/pGMzIYbBb9ILTWwDtkvDScu8BPUxtRO8AQb0TZPwwwmQ2UjOFI5cRkZgM19vECNvBoGOpVOYZctcKd0zUbSWZRvnniqca6TYEwYo7XoTZltxVkYo27ZbSQ1aZA5rE439t8V9wZvSRG2xpGY1VsyU3BxBBFuR7qoAO0ySeaqGpYtEZiwDMpEq/Tiirco9v1+SdRFaeyWa8wnYNtswHLCo7VfHqKB3me+Ne4UTV9rPWt6fv8xOCqOc58Jj3LnqMnQ7ey/k4tf1Z6XDNDvHqneZDXQ6nF8GB/FvXhcdt0fpzlkmDB62qu3p0GZUTdTiOQ5JMyszxfZJ8bWHieRwcKDDr/lC6wGRQ5i0mV60HvspOTsZkYmQoNhkTrAKFRA7HcP96IsG07WtuwtVfs2xds2yu27QVEEkPwNjpuxw2j33Dwgbc20IlD3zoGjt7VG/wQJbo7PvC0MC2/QUxgNFbP7ybKdGqsdF3rMO/3RtgZaCxB1BsDRKyBxGQebsQ4CGBmCSNPFkMEoDbE4GEA3Bg02ANSUZO8zfaCCrCEWu9g3sSDnYb22+4yN0W90n2N+sVsf83RkExxncaFIns+6J8uCtLQ6meb17QudAK6UfhEU1jP4zLPp9i/258BZpfGV0umPF+VNwYpUrq0CvnO84PJi31KaTFNRNMR+EPptCzL510+ltfgqbJHzwlZxnqc/xkAniyCBXrvEsTF8+V841RxradMlKl8wcO7x7IUuJo7T6azFJqregLfxpo/mwFP/fosCeuyMTyeX/c6+POkjz9zujctRM6n9fx92qE1E+3/6sl4WBHErowWyERUUZ5vW3NZSoymMfPCTMp4rifSgkE4THR69Vf6WPrXuQPdLYwvFu7p/XzUIJ47T9Q/ff/JTOGKp5+ksvAselSJ99cX5SO8Tccxs96yCnD30rME9Z6CiU9fEhpsI4gFeqYepDrC+p2mzbLvBLw8+6bgjuUE1YPDFfz/P6Y8V0P8HgvFf+J8D/pVYgD0G4BvAAP/79tv+NuXb34o2avCRAvxFAnADj5WTJyvNyXGmOB+f57X/iaraPP6ZEAu0gTUlejPlZyO/v5Nu8CW2zdkZ9okRxkeMcM2f07zWA85Qfj/2HvXJUluXE3wA+mRJann9MzOzvwZs33/V1vbsZ2doz6SKjOcxP7AheDFPTwys9QqtViWFRHuvIAkCIDEhTIv3P4A9ZCKwgxHdFGSeYVO4THur95PY9vvIo1z0V0InStKmQBWb2yPkKAKdvdQ135qCEKXuBxpV0wnbE4G0jvDvdrx8tTPNn39JkuGXNsjtAMQJD3UsWggqllWAwdSoyfxfDR4ByV6g1MI+wAAIABJREFUiCDhv1vHFwe8K4g/Sr+P6lFB2RTo8dOyM4nSoaLNIwCJbjEelUdcic2olJDsAAFt99zxPMnbHSJzCu9Cnc2BWJ5vCLCt5KYBVeaRmGBf4priagp9fTg73t8wQp3yfGyQu2khmmExMiFOlMf0sclo+rJqhd0BDfsyc2WuHewThb2U9sGNehgww7BO1g3eRSYnERCOYu1YWt4xh7vQJTrF2Jc16Q80QnNJ/aV7LigttDkPpeNnL533bcdVPSqG0pAXAO6I892BCPc2BiBh0AjbiQf6DNbMj97MT47Eox4EJFWmFh1PIr3FnEhD57flZXPUJV3/DScE9jVVHYoeLAphYweM/EReb97VPW4QiVHqynvBFLk+z2NAgsPITtQjhRu3qiIiYEO7nZu636ueyLKrzevScxreap4EN8IjIrBcMDvVZ6uwmjEQZcQg6YDeUM6NrNrsiReyyCw2tGIYkJSFZ3DdVZlR0agMBZodKrZemNKcVeaNC2ckluMwgGR8UAFTCOUNOWekLSFnuUOYXKfCKFxQmcEoUm5Leg+vKbpI+PlOMG0Ppyq3hYi2BpSbp3wMfBKX7NX0UU491tVYQqSvB+3yQHOkACykOriVjxLBfLSwpoi+jkwmXBo+Lcagqy7sV4e+GO3jZT/munl6wc5/zlNHBIaBxgIvF33u5OKe9y2BXhIEzHQresFSyGiv0I/zUU9nucTqJHTE2RTGwyMeyonB0NdFx4avXf0/tN8R//ig7/4COFeenyUz6Is3CAOdwwoxUDigX+CnDBW8dC6TXm9B7XJv4g2pZuSUhcaQ3HdUmbDvFW/3gt9e3/BGDOKCt9ffcH97Ral3FK54S8Ce5ABa8F08z/e6o7gCXa61GrmtUV4DN4GRCciFkSuQiOVGsQRVaJPaL+jetCJcpcPIyk+zRvso3NZhYsid6AQkjdzhbBh6uxz7MPk96AJoURtqRilJwrMzpCIATEm2Fazh4Qur/bgo1GsxPgRBfBZZxkK2d+f9YZQ60X9CjYGSDQQrDEsYYZ4+RbEfn9vEhPqD9zmYOrgWhOuQcXD3JXYurNDOcuqk7jPmNLwbaf5lxhYLnBGok7bb80hjj+jFlXoGmA7LLN4DmJrtUs8P5sovDpzKVH2PKXyba76eHozbe6WWiXc9LiLidNuRPiNb9W3MHC4+P49u+6CBo/PGZ86Uj8D7K30gTVQpPL6KSYx+XX6jSTrcAP+OSDHKee9MgsoBoUm9z4mQKIugUJRyWVBOLemRfBwmhLUx8M+HUMT01+J6b/rjKNDfkUY0eEhnf88F9zBF0T1+f5wis3yqR8Om8Q+xcEbBcJSxQ7LzMCDqH+JGkYeBMcGT5eBsupFuActpej/hXCvaPlDf95gY6z6b59xtw//9+g8NSUxA3sIJhIzfvZauvv/3P/4B3Eg4jZyArvn5uMTM4/emzzbZpFWusonfq547WPuKP67ENQ/PxggB6MEijomRnZs8XMBnlWBGxT/AUu6Sga+HJ/KRggARM4btjR5CEeCHLS7TGZ7og4mOseYx7+zRKy5s1OfhH7cJn7U2o69aa9d67TDqqTOhBKUAA8ggliCyftDgXtpGBDUsbtLDEVAgkGETA8DvXgzMoDv7mg4XRn/AUNWitwyW9WswkcEiIecrCsyLQQxRUvBfNmE8hnM/SJ3yfFz4Z2kF9ciArqQD5mSfmdBNtnoPQkP4zmC0dmOvVi2y/28TxtPbJQP9SNI1N4jw/vIl0KodhNey4LM65Q0+4c9x/ot++9tLE02/llcA7CGT736B49C/ky7b8jBPSll6UqB54zDKunjfa14+neCwpe2eRbDQlb24YkcgRAbP0dpa40T8a1gRfYx6qjMmmr6JEpIXOT47DfqGx/kPnvceU080vlpo9s4adCMJ5U2jgn5EQ74i2mnDo1zSHRb3+df4N9d6PT0UQgA1/rCDut7LC33Uk5W8QqY01nc2fp4tyuTs3xuNm4U51nK9D93YrN6FTqxxcE15Q/3tPA53NLDNKoPYvFeXAUs01uOm6JCfDTckOgFJ0QpwTa2a2ENd87bizCQm2ZhWDmw88PRhTACjZPqY2vrPlJG2jJcvL/jy8oKXLy+4vdxAWRRPhcVbcy+7eHcyodYddCPUVIVmUgJV+WNVmoEYdRe8rExAkjCDlaoMeU667woiC67h6DPcK9K9VT1P18mLI2Md027NhgojDEdwrFbZOJNjHhP5rM56kG+s7yiNoI9jUhWBfu7kinEUJyiPfy5IQpcevV9lO5rIQDo9Y6RXi69Py0kTcY+cd5XfeBx3z5Yi22UY0E/eiuF8IeCVAb73bRyKAgtgjO6EMhKuvTUnMpTK9JJBstp6YQSlOYEog1OSKyMoIfOGTBtSEhpjdPhtL/j19Q05/4paCwgVXO94e/uK+/0rKotn+T1vKFnqI41mUrmgqCK9lh0Muzaquhxm3StIctRA4vW9UUWGKMNFoV71PnJC2jIykthkkVyrAWbtWkVF1TIsRwUQIyhGQuIEThBPdLWRrpRQSxWDv0JIpgwLxwyocv1VJbneo6CCOINTFcM9yPiKsjxhLxoivgClkCjSK3vQMjPMbltjpc8rkcPQgEdkHXCew1+si/lombbSHU/jUE9czEFWYp7a660AAoVzi79AlZ1Bos9/tBZXjOCMkH+LtOA3z6bDYu+F+4jc8VUQr3aEMU94FOAu1HPkeX81fcu5BXDGPy5BPvK8w1+PYDit+J+TloLY8sVf6XdPHRH+ZwLybdNH9YbUlN/HWWQvhiqyIjFAzMqtyZ0DYqBVLal/IRIzbDWTs8HWl4915a/Upz+eAv0UWUd2Eg8s/In8Hu8Of6YtOpKmcPL84i4w/OCwEjhmWjKNuAFkEayXa1LzmgKCKiRko93dbGM4hLXq6GDwvKBY7wfTOKzUNRCeDRJjEKSrEQWod5UKtG2ETHAe4K2M9f3EF5PP1TvLL+t8or6zdXHqeWl5/D/0/YibieF31/7jJo7zPiqs70uRy79sDl9fPcQk0g3Y70ggUaLH8di5KaUmni51sTMY6sarcpFNroWdVIUh19otEflTxZ5zJfMULnObY7eXBhSrsRgeXpFPznD6qF1/vHp/sNlcN36QJ+AXAeJFbeuP0WKFtrxkngnUDl7BGo513EMBoKo0wO/k1AzmgW7z5Mp0NJrhdDfS38V6tAOqq8nub4OVCxPIzW++W4HuQakPjFYBQrfRDqWYzSP0BDH84EDf7Vq5nZpovxjQE1kxBhFyxEP1cX7b2CxHJLbbjVkU7lSLYDGMKQU+Zmq/FnLfibs1362pQ0jmtOI1n5YCnAS4Yi6l9tw8z01DO+mX7VqK6JE5ry3H08iPuOHLNEC+vhSm1RUlplH6QWD477cfPc//Kq+wGt7MeImbMu/XtzeACL/2AM7pwQmOgXnQi+5zS+Th4efqDL/lvRyMavBQooAGpEsiILvjbmpXShhOm6ezx94mhNily47KYW7zGGJIOOTKGt4yeCE1Z7MQTcdhi7KfDVI0OyAfuwpSL1LFI6NfMfz3NBc0/GrByze3eAh5VL6ydh0uiOTYlM8K+yDSunKQDMeBtxiydgDNPN4s9DRAyJ4vfJqxFiwmzZCHgLcxYgcNfSDCRluYg11fiQI22dQTaXhsccpl+2JDpEslR/B0ICiJ1R5zu6bgXsQrWYbWJdlGi51pRHk4DFMnpxtNkIZpU1XwHvFf8iZmCb3tjcMnK3HMnLo5bLBMkKDT+jnscRWz/99zFFFytCpryGvZWnhZ4uT1tbkksMkPlCVUcFSe+9GCxW2Id25kCAZTN4w+Bh0hEhwT7txwXOZMZEcu1eUSViMy0pUZx4vMaMC81hHuXScZB6YkAVtUI+9+QSYn3EghqQ6D0RO+AbgR6EsCXhLoh4z0sonSKYvHIu0MUJExqoRaNhlDDX3PIPHALK0/fuEEifFPYYLfi84JYDteYKRUUZe2yzN/M+wfKN/D1Odf+02NdR6SxBWUDLeG8pDWgXW0OmguS2aIQl2OKPvYc+Zh/82hRgoPO5rc1RBIxJH/WAM+bkPlqUM3cYaeGEXID9IBI3cjGvved6Ir09MsfbYUYwgur8b82lYz3KF+QOlNCWAznyO8aFP3PjvQxC0GQC8qFqTGr02WNrC1gMPb7a/GQWrwdo9Hz3aEqwSO+PmXO/BbGz/Pv0w8fNLwW56tvUPJqKayU5JIFymLEXzKoizWPyYxnAUlJMrIadN4VNZvRqk73nbg11dGdSOAgrf9Dfe9gLmigrGXXfaHqkAHqSFk1XXEWUOJi4cXUXOKJzW6txVJpPsgFDBrGHTz3K0QhTkp6LpGq0dSMR4EN+50e+dhZsyjPdOOG+0oRYxDC2uYdlteTlvMSAnq8F/BlSFXXkmtFYTCFXsl+WORke9MuLOMya71MgiFg6wRtlpyj7jCaWtMX7bzymHxcYR3CO9uZQJ6sY4nWHiNzXmrJ9IZau9iox4GPvBor2OEL5ar/W/YGp1B7h8GQj8mnn+ueMyIB3N7F9KKh65obHzgoPPU946BHdW5/D3wAMMftCmY4VjQlEW//Rq4/mkoczIXY57w+zKfupRhZEALhrSsYpHJ8Bfo6GsvGw/PruKLr6dDgE7qov77NKkjU4l8rWNWPT/jo7Jjez2OPUzT+D5RFuPYPyN5fm46ur9cXq7zrbj1+LzJWauc70mh9rgvHc+ibF66feCATwMKzW2Mz4Y2Y94r57WranmEsW9uApYCHEfoEg3xTUpyQYkd7SsxSt5ljwUC7QnYM+gOVOqjAAZy0ZZNxzdb7vZrgH3q+wH8V1Oc8hUSnj375y21D6cPKtCfJHAfTgOTCgTBhSB6AqIojIz0e2x3+X0s8EjqiG8Wd23y+AA9kilySljOAj/o8UWJXnpLpqzQu2WLHstwrHxkYLECnqXBj6YzYtOlWexkBkqNmtKQdyUbjlWlDmV+99QRvndVMPS5q2tFuTTZDvq9jX8GcV0tFUe3rwB+EK/v7QZwxX/94W8AgJ/3O/ZagPsOJML9/iom1rGiAvz4n/4NPxLhf/38c2jAXH40DLb3pXWoFjk0xF3yvn59Fe90u6fSDsUdHU0ooMYEzes8zo+GcZuE/XEc4rKbMlCDuzMIGiqJz+LapnHgnYDMMHT18TROxwUOCETXtilFrT+EeALGZn2XMyglOQDv5GuZP/Jw4AzbQBNXiaQfFOVcGShFDwhsDtjHxA6EZxpjMCcc9n2k1avulzJk0oIuRI31DWKOXzBrc9hKtM2l1ZfafEVjAStzR0/0CJ3T3pf/3PjQ6z9MQToCuJjfJYqMMWYRyBIDnX8vwQxP+h7OdH96dSXvw7JHaVxb3D/2eQnCOrOGCSbo6RpAGf8ZhH8nAniXrpv3OYA+WLXwc6NZw4w/6BADXBwPyfEC8LuWJ9owVKMho1AUpoXO9DR1hmDPMour8kDLdC8MC0MpTVKfRfv8koCsh6ayRMyLVkaYa2kiINttA5pZ72J3hXDolihTx6tEBkKu/IFRxTsTxi4smoTcCRrRyKeqoymjjMuQIOpJwbKDdO2baLhaCQYwyJrNjonR7lSl7u9Qsu8UoST9TNSeuZLbAe76wMR+0H1Yf1ce7s3V1lekZwoztcyd2odSqEhpkHeTwid5d5gozGqrn9EUsdB8HpK9daA1DQ8m3kbV4A+LvASW7BvsaqgQ8KlH8PBtHMkoKwi+AECWgVScFgAS2ZRyB4O8HuYhpmm5hw6RdsBpkpEI1qs6LF8NeFB1XdahPlm1stux3qbGfxy/bJ42ICVUymLAlMTQhPwCeJ0JMgOUBHb1TdJ76mG3++gcxNWQfCrEMwDd+aQpJWoRGYS4qPejjbB4OvYcXypsHLIZsCSTGVICa0h2rhWV987pc7slpCxGJpV3uXPdFO0bo9wY+0tFfmHccwWnIqgIwo6Ckgr2BNxZFTkZqDm5vSkxgCRt1F1CvVMVT4kMAjihFgKKKNmpRmOF1qc4Yz3X55C3vVvRCDr4PuebpYqx1fGbQxxofixL8UF40d1g4GsnKk3RWF3MC7R5hEpQobLEJhVIbilP3Wh1Y8QMM7CYUudsEO95b0YqKWX8g/TqimFU2GnJGI2C1aaMBza4GEBAFZpGD+V35NHd4TVr+9yGjQZ+bNkOY8txa9PHcEkyR67X4I/zZoo7efeqD38IHYT3X7J97by4o6GVV0wEINSx6oMjELrx8L0oAOCt5TODlljOmg08tHIF633aDtRwz7l7k1egNxAgJDVSBBgbgNuW8PJyw3Z7QUobkDbslfBagB0ZOzLEuCZjuzG2Dci1InFFqhI9rHLBW92B1zvue6PlewUqNhRiMRQsBfAzocanq8pXiQiZpHhmoac5mTEeI6UdlDRUOyoSVSRkEO+gzuKVG5dhXQVUUWkX5X0Syb2CUJBQakUBS8QSVFRqQeQ5McA7Mn0FpYKcgMoJpSaUIsrt0vHfDSDW9pxbyl6wstpoEQoIe03YmfAGxhsIr4oRhbTOJPyumlGXKrBJDc6J9V53M+JTVHeZ2fY7zp7bmrF11eEfWCOvMFy21tDy3aK160F8XRnhU6RzYsXOj8wg0eHz+q1egod9sfXIDDmDaBQ1Ujc/nqz6e9AMu7w9JR5+LQmMS4QxnfEwoK1VYsicLZrm4fecZcw05D96F+oj7iHlhYKz/ZrfrUduDXyjbaOsdALrpDTvW1+/pLncZyYeWp5Y4vHsM2TM1peOHhkYjmN+hK9T1pNE/Wfk7d37WDe1V528FOfbKKriFjP8ikcXPK/A+giBH7/+cP7fI52t3wcZe+V5yLVSQJ8O+gm16nQ7kUfYH7sc4XWtjDKWvw/aNQNiGI+6mFZ5V1aZVnuUh5zRcXgX10YPMoUzA8+jqM/EIg7min27Y8sveMELUpIM+72Cv7IaYzPMyNsFkYnAtDHtTc9dYDvB7Uec6LicDEl/5dmFYt992j7UiT8ikdHUi0X28D2djUT8MzvMDZ5TAkjD/yY06iJx2KjVKZIffDPNCXK3LsM9LhjoXGx9rZ2usMfp3fi0FgzXDbwTvnh49+70wbG5wOwOm3WZz6QwDnWOhBSPfz+dmsBzngeNSYz9W0t903O/eU04Y1t70bu3s2Cz8JWBYei49Ms2jB2AUqswOIuzG5VBUeAbp4ltLak3PGW425mVsU1kHIdl/+NDY3TUhI4O7jZCy3Qqj9A646mEfTRZJzB4loHGTdmjwDXCNgpxI51qwhhN88M+dv2SG+qapft1t05Ijp/Lr6wpR94zLoVpfTRhsH808IOj+drRFOhX5l3luh5eOu3v5fSQ1879flDhJ+X5hilxO6Vz9NXDn8MI88NgL9fDWQrzHVGaourubITDm1ehX//z7dcQ+cNAsd1AWDsR9BTp7kjL4E7b/+32ozeX9GjgF+yet+p9nb/szTv3RS6VxJsZThldjeB7v9lpbqYs90oBIGIN+8kaDIBRa+uAsRlLFL1gnIxFWsahzwhrLsybFQ8s6+/GGlyUU8lOWU9v89Tqaiq1eOQXNywyL8yioGYM42NtxsZByCyHzKJObF7txYf4CA9Xz4N8QMPvkCKVGwIGgAkS0tSWkCvTQ70rPhI+7x19r2A3iFrISABeNGT3G4k32Y5d4WTczMhh4F+MFhzfHucOFgNb5zfEDeeyQzzc9HeI6DAGzurW73I+JOf6kE3TXWQcCQze8z3uf4Yzq6akW2PATFF6FamMnyxVjf7AUfFneUzZV9HUfgueDFUaeNmYV5FF76l3I4VgcNHalbUh61u8IC2Aeuxp8rzczYHMg9YRaWE3Lrb2qkabqI0dGqjoi7UeE1BVbcMVOezRXNGZjG4kUJKgTfmFkDODUkKtLHItCEXvFaacUIlx510CPWF3pKpcwVXvDi5iwFVrlXYSqcemKIkyJyBJlKgC6VtSL/uqUVYSLBRzU2kajtNybnsJzbGD+pFdjPAyWTt8UP64jH3XGmzt5pBxtAH0r4TVr1EsXQVtiHkNNzjg3Co3T52z/CecXhmcXz0BDJ8Sup0cAnKgV+PjK8Kb1GfHt/70z6P8YOR5OBNZKcvbQgz5Mcj6q3Y5NnwEU+QlA+3T8tQmqX/lPxbmuSMiWFsR4AfIaqE9pzTAMjUe6fvhmRP8/JjiQbIxv/g7CEoMwatKPatORNhSAuXsV2hUkCinNUA6KCEnRk5VqG9lpEyaXfC7UsUOHafKrlwuYFECTwoAUjtiNfdgoCbCDRJBAzkhpYQtJ4AqiAnJFOhJQrYTFeXXRflhlUgtosEU+koVCUUMFguaRzqLk0eprB7lwkGqRk6pVcaLUYBUJDqRGiQkAqoeKZiRpkyIRftg/yc4pkZ9zK1+bn+sUY4qEyqyGhVocHouTd4MuGKhYx1fAn66B3NQoK89Zgf882d92agU78uFPF0d8tBllFCMFMJWbkU0IowzhW519nkJ2s9hDR0rbFadt271BkJWr8sY3XhSK2O8qBMajGr348Hh/wmkoezyHcLoMIZxbnBSyLnmO6NcFJuPwPZzQGOeQ0J7kK7k6fKNBNQBuFbPQfGzuuLYyevzClZS//Rseb49y+9PKRrHOeT5+cy2BLo1L6bhe8ADinvbv9KltByojuH3b+hsvT6bVgILnb+O8sghHo4Fg2CBsVyPh5/TrzOYeP3YOiYb3i4vs8ltQWYnwPaofhaUE9KWsKUNfK+ot4SSC0D3UN+ifRPT1xAunzyXLuyiDN1woES/uhF7Nv2TCcUfL4T7X+lyOg1yp4K3fGcJlZRM6o2Z7PfvhYknMF8p+int//7pc1pdCKQ2d9+KQL0n/Qrgp3eW1furf+GCey34r+kFfLvhH3lHpoRff/kFq9H8bX/FPYWTLpe9hwOYQSbnrzvuOTx/HfIe7gtMCsjNYTmFDJ1HRg5rURVqVtwY7iq8zkrwvHI1xWmGs9OWb5AuLHffoDocswDlb1YbPz0F6Bxhjyava+JsA/xeGnVQJ9dhjmnd3aMhuA5A+ziTb8d9jBd9gF95+N1dGv0n3PYsZflIU6h9bABSxt8p4WcA/44CVNWGuNeRnS4Hr5munQcTbzTm0N3qPWk6XUHnCdzJEpplim6xqivwJaL1+w8/G2Ag4IeckGnr8rJ79qu6zsCvQ82jS+mH6SMNa9EOoHpy0I4c4hGSHX/IX3IlX+tN2zJyV9fwaBouqy1PLfbZS1+s+z4thUX5mDw4N8UgwX3azlXB19OqU0M68hLquKPhw6GYzX7QeTiIc6FeDF8UWUH2sbCCtpYJIFYFHDVAOCwHk5mOjKAe8XPqMxHbPejGPCrU2uuw+uMD2ZGOkh9E6IXk7TMYinQyBAgtUkFTntPURjgQGMaCl4vL3rS12U6gW+1yjhIOhQgeOrdFDZE6axEDzbZ24AoqooSUCXkj3G6EtDFSYpQq3uEVrDc3kIqkjHvZgb2PNGOyl3gl2iuDQ5Rf4mV6kxuW3qBelAVcq9y3e2eUnYGqSnbWcM+KStxNdRy91UUlB2z34u+ViHOUxlmMZPIRd1u1f0TXzsqecZcYIaWrfADO6gimQsu6j0mUIQM1JJ1yjTz3o/Ie9305HfCrbT3OZ0Zm5+nt5J2Ed19aQ+A3/7b0/nMW/8MsAMTc8XfIN88nAfwa8sz9Outvi3ASSs9iyABXeMcSxhwsNKJmdh2p5UsEcE64JbkLnDhJlBciZGqh31MWSrwxkFNCJpFTDChmiY5RmFVBrV7zLSY7AFUoFzVegkZeQVZamYAtI90yiBlZAtuJh3pi5KwKdEpAvYsnMgPMFUTiY24GTlV9yiXgCqliHKi1qPJclO2mzK5GY1Wepg0aYkSvwVDDozlWh11lInSdW0iQIZ8OBme0iDX6rGYAWZxpkMHaA9j1aAjGGWY8yoBxKtsCeBa2/+KDGTeWCOQCeITb8lbvb+OfQ/nwEeUXXzNLBcsBXRhfv4ukPVeIF+O2HqpGHJuiHVgvzHekJ8D+pBafb/jdxY4gHgnYnzh9lD1/SuMXxvk9gtFH8v6LpZV8/c9LJ9C8y8H1ifo/JR3s9bv2NQUZzs97OsOhxu2JkhodbqJA3xi8VezpjjuNEVFX/A0f6/ZSlv0rPUrfvQI9WlXrE/082mJ//1jCvjCVWMQNrwldRkc8rx6OUAhnDXvX0uEonRKNq4Cv23w+vRMQ/nb2Sd88jRsWf4iLw8EfG/YO586S4eGygkcNAG+76KSZ3N4DTCi1Ysu5rypWWcUjpr2zTaBtqAJdiONobmRA2LDETZgyryVfHpgXZbTNn2rlKcAQDzl8RxoPrFYwHpyUPRI6H5HD3yOF4XSFW6RPlsnGxnCc3HdN99cyTozBq4ibD6bdXQ89PPYQ/L4RDwAtx+KiIDJs3Hl6d7DOBs+Nue32bszWG16GNWiGGKv+xPO00ZL7b63Nr6/xMP1J4XOpPH8PkTkQCL+XZHOQM/4PyiAG/g7Gz6WonugRTfzkPh9Vd6WZFT6V4ZnjFq/z6D3T/+1Ls6L6QZVn/x9/9We/7GJZu6V20NxuP2gyyptrEVbK1X5Qb4mRacNPyKhgfEUBc0GFHKhOpCHeDe7VzZuV0Wpfpc62tkbjmDHyBgN/D+/HgzDbRLVIX7a1Sq44t2AANRxqBiHvbFg6UKA08+jQfcdJihutCZ9G5NHf3SNalzUPG0IId0s2MH3Zh4nD/yNNU8/YQcEqnlwGq5VXYAavRP/O7dmWScNrBpmMCPs+svdA5zFP0zH17L1AgcGW6ZCEUhM1YF5twbttqKKJHfEgP2wmbCrSNpQ1xTHAikHknshiZJCYkTRXaUcHUppN0krKVhhxhPpvsaNBfmJyb0f5TBqIowXClH1i0t+iTCCEvrbQEE10GfGOFGOCDFP9IDzOKoOS3r27kJ0FHSRvrdY7DuKnKkuM0VJ4pn9V5aOkdwBzBlJO4JKlG4qXVQ1Ta600oiI4AAAgAElEQVTQa9QXyCd30tqKqHelb0nc3KkkVRQVDf8r0ZN5Z9S7eKBTgVxtYAr0sYlh9lbJUfApT6khBXnr+VoGyMo6F9DEWetrOlRU2meDZqVg7bHnLJkirhf0z8oaPRy3Bvb5M5SmhD51h35hhVs9cX2chgk+7Yrxox5SIOKQQj8asjj/VRq0wBnxuG+wEY24GWjbxP+tTGxzGEGOmSK/4Ugy4ZEwdHwp4udK9G7IdbhYZPwZ0egvjom3wd2S8PdWy4gTsQV/ttzDhHYhnt+lVtz3HQAh1Sp3odOGSgmgDVuC63dviXEjuOp4Ux5BVa9a0Q26XatCTH6JAJHctFPJcM+uxzG6qUDplQaVNwAVdp3HRoScbhrinZBzRUoVlJKyEwaniqpGQgwJy24DGu9tt2gbrAp+d7a29s1bXlGNRZBTuSPpXxxJ+WOuIFSJ4gKh+US1457OveIVaaq0Z07gat+V95EPGpplU5hXoslyx68OcwIVcZ97HO3WkHVYJYEzA/PRK5nbONiYRzD76Et91pY/4Gwob2UplF8pth3mSJtG0rH+8XhNx/oWwxKv8gAQogUMmaeyJ0T4qqezkZBpiPvy04nqA/rv5zQrgnZ0PntU56ovx4wvtMsHea8wr6HsCMNK5lmS76t7maOcTW5etdd+PNPSQbooh/VRBfTLtaJHNR6snwd5vvP0OMJFzIyedLdK/BmHOq/W880SAWsjzY8k7tHgQ4r4i4OwEIPo6LWzsdVipPAvIWND5iwyB1u0Er1yZLWwJ9oWGx0be7BW3jtu3d43NP8vkL5rBfrKspZXePOnSyaB87Czgx+y+OryrxWAHRar1rDbnJ4JXfikMf1nr6rVBvA7SSuh/ek5eWffPzpkhwIwAv5S+wj7Hdvk/ed0AzPwi22CMtrloQzg69tCtlogbifkkRyOFQBfdBf/m60pCni/OnmIzHCTSjgPPExVERqmzZUP6dae82674L4dh+HgaOP4xEOfh/FccfuW8UJl70hOd/RL/B7pVyVwYiSucsc5hYMGOQGSfNToV+c1wQy2O5yr3rEaN8yOIKGPHd4NONIJOicLzIZq3A+ebfaOBBSDMyqn3r3Gj5K28aNVegToA0n69xK0TwHA7wDEQf1nzTL7HYU/c9FYk3oYZfc0TvP55ER/quf5mOK60Z96F/iRPP4Z+Pn+mVyVFDyXf3KHZUUL3V64y3ah/jMaQIF2W1I6v6QfMfNoDNDzQds4beo/FZPeno6qf+xeOz3sPfTjPBYJ064Bl80TfQdr+GplVQsQu+j5RLhDaTOF8LYLQmFHvls78p33fz50NrbGx6jroR9kdzUQLIw3EyEH//qCCibCTT3a3tjWI+Erihwo69rlMBdv1DzMm260vSci3DKCfNDzEtb6lqF3J9lk0aUh39UlR4vvDCDeZ+se6ApjxJgeb54l+j0um+GHiQCmzu6vGWhH2q01+2Zw1QmjoOuEKQGJQIncpZDMtZBsxRg0GU1lY1EdxvgPpO/DtREASPGQAp1xmtMpz6VPST0po8winooWCaN23tm9DFuBZAJqGwZRFOqar4xcSQ5dSMIUEwiZkohLlFCoADVJmHaGK78bDSQkziCkZrSqo82VZbiqjCGDUO8JfE+oO6HcAdwBLlAdCHX0I2JDTM0YqE8rinmWjtZDVC6frRl7XpdPZ2kj/vapCqLdmG+5cnweZ4/xKNquinX5BrFVPnuGZN9aJJH13LSA7boqVQYWsXU1UwEaXkHMx52wr2xhqI/m5zrNYTW8PXoXz4na78HL3JRth0j3ZYDpFf1IHhX8oaOq/XCF8kskGPibh0j7EvJa3xf8JNQ5bUEeMZMoADjxXhUQPsokCvR7LeA7sNeCvGeklJHSBtpuSFmMijIYlDJeUsILCV6SKs8zV9/HuX07CdcgSsiUxKtdZQQ3nFADSeMdZr4FSARGrkWUkpyQqGKjjB+QkYmQMiSU+6ZXV0CMjUrV8PMMNcCUqy+4ApwEFmZWBbU0zmqgIVcnirUSj3d5A6icZf8LU3Abb0D7rnSemOV6KI1qJwZptmIB0qgfFj3GjP9Yv4siXbzQHVcZCCFHAs5EnNS13+6bAdhCyseCtq4iWjXeGKwJAkIhvIv5Axyj8ptNaTg/7/J7HaF/CzrFsf4BLHvcYfwjkjSt6+Hd2M9HBH/6fUX6e5CuktUjxvWh9AnwH6WzfnXvIlem4XOsZMHBl/PyDpgupZFgr941fOrupedPHut39eWJQt36HASqv9L1RAucvVTufcXelxa4+QF0/TywF+ttFMHiayWJclRBLjNP0HFYm6EO+5qQkJGQq0ajKQS9axAtzE709rO22Xl+V6vzxMUm4ZCOfFL6F1qz28c6+8cZqWZ1a1a+fxzYfv+02EjZBshWuwu24TvCPUe6KVuKFR8R5D46LWf71IdtDwTle0tHhDy+O+reR8f92fI8fL8qe+tZ/BcG7sMBqx/sAE1I6DZ+gEsBkVmMgtkKf2sAkId6MTIoLMYjz332JkguqgQgd6XHyTJ4eSgXmODYYLeBDH3uuhkBCFx9moO4wlcS1BliHU1q7EsYU6ufYlGWMHkZkAMG0s8UwNH5IPVKcOW70X2pQyz6pS1SFyv2dmtruwcAbfxXm6kI/zA84Xu4LeOY9yyHa6hwok8DTB0uD995eDVu0v38LXgdjCHZH6VocnfimfXdpZVl8zLf8Nv5EQNc8O+uXSx6Hz2F8O1W4ErFF5Lz8VCLHw7rEVdHLx+kkb+MZUcSEZfRk2z1l/2uShmg+AYgAJDCgX19ENY7tF0YqLzjNwLgXueqPF842xytVT44jG8ZQuMxq0fVjDBT8D4fp8LUdxTeyYbJfM9joM7QaiidQkh3TGwx5mctI59Vb54mFJ1MC+0+pSnCk/Wdug6xt0Ch4ZGu0kwL6STv8jkCL0CT+9uLDvw2XYSoaGnsltUrjrzeZoPG8Pu1rYcxFIpmjPdkdry/1bKEaWTxcel1XbqawtguixmbMctxB9E82WKji3F/RKs6w7WEyq0ma7aGeuR/8wiPTCy6SQ/MzfBOQwHLd/M6T0IDkyl9bRWRrktTqlP3twyRT+T0lLQtiuPBVRUdEb42kaIQIafFHoy32l5L8vu557jM1KHe8NvQt/oEMzgxKhIqkRoPZCT1sqwAUkpAkYDDuei9vMSgmiSKLycNQ5zEYMpkGBZ5qxSAUsVeitCK14L9taK8MuodYtvIALOMYVVZyv4fVyJ1HWzPz3+v0/GyWLfybDqjoyuF4sP2dI4N89kiK/nruUcrka6dkwfIwuJtTxf1mTjd0cwowAIIXs3cWVvMtLWjW/blJEXvT5NXHOrBCGW8A330cusiD057qBlGsI3JJCy3WQiP++hPXS+7PFFciNGzurNsbv3uKp8YdpjTCEsH89dQ02JOjtJK3rHmV/M2nNku+XZ4UCsDtYCpAjuQU0bOGdtWcUuElBM2qsgbISfGT7cb/vbyAqq6ZyuicKZSQLU2XKEEShtSzqCUQTmBKeONGDszSinYS3HaQ2RyTAWx/N0S4SVnvCTCCwFfEvDFQsUrS0iJUNVQiDVaCZDBlJVvtZvIK28o2CSqBwOoGuLdh4Rhgd4rFR079qVaK/nZt/EJQWPB5crF6yA1ThSbMJK4KSy3MjIAzoxURRKkmnppgyvAajwAQL0P9E8NK5jkuinna9Rw0c7NWOm58ofxGhPj7SMrA68xVIYo1MLDX6RJZnzgf3DYu/UT6/LvkZataBf3eYd+uVw30ZSjNccP3od38Vxklb17RhO4AcrHsPFBGxFka+kSIwvzOo3/PM5rj9rjhlYRAU5AOa4u8Kf+8UWaaZWMOBXbuwTftDJw1v85HZUbIqp0C2odCehSelTO9g/vq31dcrXOvK0FPhyNfzfm32eaPNFta8rh/cEctahADxuBNuJtfGBCY8Xdh6cObR/NzaP3nwLour3uPHixtqalSOEz0AoGPKzeSKf8j4QVvwGVKu71jvJrwf7rjv21BEV68qb7nrf2jllS7MNiXI8Yy5V0SNv//Om79kA/TEdE+M+ehs1MS3HV87yAfPHY34GbG6+ox1/pcvoIXk70qRegvmka9xTPlDlCx9VzPbz+Hz/+F7yiYKMUwjgGDylm5O0Fpb7qpg/AS5Yd8Ncd4XTpsXBtz+9DhpFLxYgPxig72IcKCeiU6kZpd90ARuEhf2nfy2uojJY8fA3gok8dTFclIxo+P5g6OEIUjCi4McC16mV5pILCQtroFG0qNNTaSJZZx9cqYdz9nKyGAw0Kh4MBSa1eo6HdJqTB2YE0HFpeEvg868HmYVXPkdFPDnUUDEKSffKMm0cwedufJkV/H2n0XLiSbJgyZB5cy6kHZe18Ck43oN/jhBCunFY8ldxo5PCe8kepDChtHUV8OP/Uz//ry78BgHj2avqf9RcAwFsdvUjx/Nh3bfdlawXuKMjUVHSV1fN8ssZ91O5i7OKp4PScRBk16Pu7w3cfT5kb+dkPIKk9cl6oP1YQk5ZxT/RB6SDlONTGgN6AzuGNtRj3fiYJ3oPRjUHZUnLenVQxufndpWMP6ID/j3yHdPn4JR2I68j9y0jebkEhWrSOiLE75LD1ToHGq3LUveapgSfe9NQc4NVxSwJJmLJdirwVqa+zUbPvxuZwgG2MCf/FD89GIsgx1H+NtyZcuTneyk17/5Ao2wAkiNAS+WS0QBmsUUzZQdYfxUMPyE7YWaQ471dHd1e3N5/sRaDL2TzOiVRxLnhNKQNEYPVAtxDuzRhFRoKRVCqR38vDCcCV5yALSY9waHAsZDJM5FM5pzMukL/ltkrROWWAEmnYYZu96mybGUCysO5QnE5uH5BAKiNXMDLABZQl1DolpVfmtVgRPMnV+5wkfPCdCnCX+4TLvaK+VRQ/2JGRI10D7qHvZIi9e6EH3cqmIZ/N0zj7ozHREX2M1ORodlbr0cQ6Yw+jfeFRwKFVu6v8Y39qN0LH9dqPSRSMdIYHW73Q3mo8Yxv/CN+bqGy0x+SJBWTcf1+wnvN0RoyOnh21sCSy9y6D88DDgcT83mWM15D3BcZH/Vlse5K5aXgV5n0Yw2UdR4wfWMtPxnh+QIiqtkjjghgR8KhMZDyhDMPuKRfuXVNF5QJKhBu/IBPjlhlbBvJG+LcfXvBffvybRw/jWsClAGUHyg7zyE5pQ0o35JcNebsh5w3ICW8E3GvF29sd+75j3wXw27apgqGCawHKGxIYt0S4pYQbEV4SSeA5IlDmbrwLAGgI9MoJjE0j/rToIYwNzDcwV9RalMZXpatKA1FhcX3EKFSU4Ua7WT3QK0tkEzH4rBKZRMO3A+w2X5STX9eRGag1+T3tOYmhKBFLOVKqzFB83hVlq0hXXJxAdoYpTMoT5KV5x/dLf1z/q/g1jZ5PcoaPDYf3QSaw/fakPNeWOgV0KBuRtFO2H6dudR7lfbiNukD1HFSeP8cQJvF9oBgrMD6sPF/BuEjrth+TqYcVP0pX94djNl49HCWDo/cn9T56flrjQ0T6QG70Y/WBIf/2yXD/ag9XOP04y1/pOK3o8jsw7gOtf1L6A8y7G6EZSXHeo4bZTt5jHrRlUAB+Zewo2PeC8kvB/Zcd9fUO7BUocf+HRttMTue2s2680/JcYIAf6/1HK/hu03evQI+WD37Xlfz65wD0uyQaTsKof47F86MjBZOMo3CsQvi0oQoH8u8Z3TZV71xwVzZ3f9T0KegYcHu0GCN7ftDWZFn7TLPvAP5XAD/FBxfrCCA2TBvg1oPBkkKdtQJ5cYw8KkrHxpbWWLE9Gr4fDTAW+SDaGz9j0U1p0gdEkIOYlh3pC1DvumkMz48sTP37agN2AcwVzMt0NCaPGjEYKRyu66cZvJvHOUO9DkjP040G2WH8EI7NlOZ12HCXFt601aHgJJ3zpIdpFDfl1rchrJ1/H+lrnU9EJ5r8bIprO2nTBxti++ymboEAvXtM+D1sqjcrwnLqv0qHFyQPEuFTKY79s+U/gRk8W4Wd8BNkzHKWNc1V3PUK1GrU5rJjougREsOcfFa6sC4BgPVuxZgo3HfoU6IGLp4n1DNtZG1RxNjEqkgbLWEPl8kVQsbYsmwb9lB3CV59ft+5O7Me0bEH6Whd6xgRSPR4CHoHzfI3gnv/+DQbLSSIkRip6prlcNQCS8dmOnbQfdq9oFlHfHQbG4CFhQzT8KEt7vpJ4sU3uGjZMHy8Oxt9Bv3Z2BaFrNSeETxE6zT2AV4Oj73esS7Y/ebS/wZ/D2eg/NoZ3ZQGvNfjfLSw3zThleGcOQh0tyx1g8deY9+RBidNnYtlpfS8fq2KkZ6yl4KtEAqwM9BZf3T9Wq2bFV9y8ME1hE4eD8CnsqvwENpW7Lor8wwH5I/MU1xDl8vjNuctjgPBPO3lvEPmc+xdpz+j4CmIBr/M7zGdktC5w2P1auSIadRqFtrb+Lbdd25Ke1ICkijZE1WyA0ASr0YwqDIKCIVUOVMIdWfUQqJHUREpQfgUFYCL3Jfrc1WNRMu8VXU1r/eCupc+xCADpgqxMeo9ZscxGsdt5Xvdpw9IVJdY/JSHx2swxoobDbI8lU1Ja++MQh+nqjhEYb0e3Y8ef0SSQaMcSH35uf1m8OOzpGJ3kynjXEXaITjRojH0MI735vrXBesE4hjNtGz0bKHIL3h+P1XuBR1qHJnJRDrsAc4OEec1eIj1ZLRxk5cBlAHHbd799yv6RCofHMEwVjUOuFZuSvSusTiOOrOB8A3sOlTL/VMGmrwxl3KyXytKvWPfSUXlHaUk/IaEXJ2TAqye56WANboHmEFpR0o7Mt+Q9jvytgE5o0AU6Pf7XQ6edzErKyUjpeTe56g7tgQgyZEn14KCHW8qt4lNktDawrscZNcdeym4M2MvhFozdjblN6OmDRUZtaodd5W4IAkkbEivf7FoaGJ/RUjmhV7J8TIpLsttb5a38ZmUCIkIKYkCfaOEDEZKKm+w9CETY6sSWnQjxl4JORMqAakafSbI9XLhjIHhNN/PKUCN39Y4v9wmdsRDXQgNp1t4fftzG8ZgVCZ3rPf0pmvHFcBD25MiHSFvB1n/Pj4fs49nLfGMObyyNc9d5vD9EeM58iA9KDPTAe4++t+rSq5wwXVWOnoxMakHbRwp97ufF+E8EiWGNHNSyzvLx+tGaMhyhEur3wZDGh4PfG1s1Why4EVdy3E5RLim+cAfMB0D1ebe6E8dM/RVjL//FdMJnbkq+y4NeL5F6raOB1Lx9DjsIZcp4P3lDj9q2ATAo0ojIxiERT+LjjuBRWRsi6BaGXyvKK8A7xV8Z/BvBfW3Cn5jvUZRJYuRF3bjyet18ZAm8DrfM+lfdP195wr0nrk1z6t/GkC/T/JzI2qEzw4bMfymOB7jDtaE1L5qeRe+xEX6kbGNu8x3p4+U/55x44DCMS7ssOd5fr7tcYP87dIdVQ45grf3L9xr7nJKuGe9exzAly8/IVHCb7/9B47HaXgQn0UGvErGQ+1O4Iehr7VACow4xXcGE/VrDUDbvNr3o7lbbMB4/HFwavVwc3fy7pm0GldGg1s39e4VXvUAoYZjNQr465tO/V25hZ6Ti+oQ3KgazYnn86QW9m0n77ZBcufcuGGKBwdjxzDnjxuzQ9o7Pj44slqOnz68Bxh+MPj02XC9o5dz0Hjm/jU2OCDHCh845HPafpXIHOV7BvFCHe+1Uo8vroQ5B5QUMpAJyBl/TxIu8n8D4qJ6N4H0jMAc4M8E6HsW4pVdxIV5JijOMCROL4U81NHAn15u/v5XRb5/1HYg/KZaxR9y8ql6xQ6Q3Nvr8r7r3keCAfzty82fVI0qQSQh6hIX7BDvJwaHcO1xY3gRRzo5CjCFWxoVBkH8cofrkKMtbfJrp1uX5JBVwnLK5shKkd5LHjGFsfbFHbGI9CiaVjKBA5SGMnanOA3Z18dm4mlKLQo2TC0h/TC67S10OBVxKMI1y62shlM85gE56do09PcrClo4+QxQxavdG+bKVeMlgfYTNSMLNnRpMDK0CicPpGRWMjP1diUtyR2owq5ofVZqHTuhXQJtlBf0KwPLZink67T3TTmVtw3iWVxbKHWye7bbOucaZK4ZgTGup9h0ZAsctNFyH7z2eeh27S/mHvoV5STFWlWYk3ld2ysghHUH2O87J5/DGFGPFa7Yswhvg4+B6W8u1ZGaAHOnfHI8N8GjQlYhtwq4gi2iCYr0FXrXO2mYXkpICchJ+lQYQJFyTBLWvRYGF0YpjHJnyVQAVEKpdvdwDvfoWvdk/pnFGLFA7gDm/S6GYpXHQUTkPRxGj6Y3knIYR8IgprXpPOJW0+ifccsVN7Zk01EBtyGpdZ7lkSavYARmWn3kid4p2Jk9esYK9tX3zrPceGiQYyyug4X8n9u3/9t7WbNGOxYyViDh3Tg6f4wXNFjelRloz3NmDhQbOefdY0Dp07zc34l+mI5Et+XL/vVM0tcE+4p09yhPU57PMlPHMLraFp2K40zj86lV+Sj6XWKLww2bFHfMiKhURtkLdnoDoaIkocX/2Bn7697IIRiJ5O5vrqpAB4Mog0jCwVPWO9VzRiUJG7+XHeUuYdzBwC1vGupcFNCZKtKWnNYXACji7W1jx2qwtINRuGIvFXut2Cv0L6GymgUxYU8Ze8puNwsmUCW5Uz0BOVUQVb3dVIYnU1XDE5F7Ldh6YUZiloDvVeU3Uq6VxGCK9M71nDNSYmwqtVVWL/MK1MTgIgr0DFGmv1Ug7UWlygpG0vvgzbNbx16NqhpztJCxLN85GNEsFegrSmnPOZRDn88V6+EKSYethjLtd3d3eVxarrzg1myAjXigE1MXzvq0yI95fa6ugjhOtP55WDas8wegnnf0oOpjyL5NeqSAflg+fHH5I6ZxrEa6d0D/RvyNEeSWIK7edxLxO5NEgGj4rR/+eYBrXX9/l5n83DTtN0w6W4z/kyjzZ0sHGN/9Xg3RP2/YaNjPfWL6aJ2T3BPpAQ/v7LFeQ2R758DuorBsErZXK8xbFOg7o/5WxTj5tQBfqxg97kmu1jJP9mpXqKhRnkajMZbXwTzxwIOkssNf6fn0nSvQgYPdTdjsjQLKd8hMhiRLmcJvPfCyl11O/YxeRqvNna4+1lue4srr9QAiTH+ETi0Pdy8kFYE/0PLHi//T0hUiCKCTtHjx/kNtv1e4PWLhQ2Y/1WkBNq00OdZLBxMSNsrhwIn8X0sh7PshbN8y6eaws+4L8xJd1Hzx6m6ws44921WdIPSUnTC5Rx5Vd0BWOwZ9SksHwYMhffL2TaJg+W6bYlJlNiS0KNt7q3NUnrunfhGlmx7qNu8FeP0A64mi3mVKaAfYOLkrSoWkmceELzTkj6eMnvnoBM3gQ4O3b2BO3cZpWOtO6o/E5sUOZNqsPEjZqtG8+xVJLcLwGWmkKw/qfUiCnoHLcLDiZ5CcPvGudzhSL5Casm65pg2wJxlTlz3MXxrHJLYxFTxY3wPJ8neBlsXw8E+A3g57w7MafvPwORfuvxOB9a7zMm0YjjZpF8ebgFtOeEkbXgJvYTDebM2rdyhz+4zg/2gqjoFEyAFBBVFC4k2PWMWrL7FwLj8ysA1S6MzYAw5PKVg2JBDKFDaCYIppgizlDYSvvHutsiHEEhFs2W8Qo4nYmqH9mxlckEX6AG5IfVXU+iB1EnZXbMvvpntdzFkn04bKHImHbg8PpMZWL1MHTSdjA/D9KA0w1WVz8fBMP0cy2/0IHtJDPQHCQ9LNUKUQQ3CSbQ7jgtarTFR5bjzCPN1sDppxWxjzkb9M8A/Qd+Qmzp0oiU2mu0Jy2RGC25xH3mP7GxoiBhCDkFWeEKML8qgu4e5p4hYMh03SVBygikptTxTvTx7lhQVpU7iyrHXNxahwbQVLG3YdC6kSUrqTFV7WkL5AYXML16DzSa4sIB1nroxai9zLC6UdVa614cLCpyv0rnPDyRRmpNH0xLmJXGCVseA2VbYgmMO1SZNM2A9IL9Ovn7dPCu/n9JCCn4lPZ88ulFssw0t5zUBiZFEUS3Hf70hzasS5QWyUZ/0IjtLROK5ACN/OcbcUGWlQnEWyVtUoh4Z5MjoZ+tkFAltmNhg60CZ0Gu967RXhPFSwz/zLHQo6AjWlVs04wKHK6JkKxeHAI5jfMHOR0MYA+oTt41icvF/JVW2yYv0R5kjpBtgiUh6JlFqfDadHQdDsrAZmtcod5W8g1FpQ3u5Or15vO/4jv7kxoSjQoYfRrCRGgCFKSJTlqo60Id7zWpX2iQc6I6thlYSMJ3zZEpBesGW5Pz2Bca876utbMxZRkrhDWN9eWaKnMnAvYmwkodbFgLDkhJKBWkgjdwDECRtJoLOtJmRi5JRAqUI6KeMpCvbsPJBYlPUpEZLaAkpEI4uuIv2xcCNmr9C8t4EtadCrpDIdM+6JkbOc6pFFZkOSK9MYHqWNK7UoTbpfNsmDNX+PYuNaC89HhGGlLUF5TmyKgLY+Gs1YU86gNWzMNi5PNh4ylh/gXMF9pMi1xyEo3XiNyJhafx7nmOFYf+9F0/ZiOrN49Pug6TFqSMeP/OuCkh3SyRGOBSxHMK6eX2KwR/WsH1/b76vczMOzR57RE7Xu25pIKh+8n9nP8TnVERP9tMTHY3mUjx7Bo5LFMgsPcxsFigf49lg6/G5SF8ULUf4A5gVNYTG3N6dnm98kxfnpZdLWdi+NzvTyUHI6ePxBvKdwxuP4tSKYcztNXOIga+leTlHXr0QxwZ0D7hdGfa3gu1q83dmNnOUUJ4E4CVzFGHUFkZwcFWvD1wj3NPdsbL4huZjSn2dZAvhTKNAXqWHznzY10qMbwpWhQDuJCRtH6j0HYjLrTjRvlW4jaeXfveIW0sB70p98bo/To44fM5bxwOqZ1DYnT9bwC8A/Ae6+9bAKwcsKxoaEnyAMo4Lx22+/Arcb8OUG7He9J6zh09vbb8B2QxuD/vDgvHf0/GygcCAAACAASURBVODY9b6RgkaB3hSMwudcDveTpFuoIyqmKjemPS21J9feUh452bx17z5CRAdho/MCtWqNwZvAJwIF6+Y9cUVzcR3uTbaYdaa5KBau3TzRq1rXGwi62SHWuTAhidzbiLlioqFdH0IHfBpGy+CmYmuRcO3J2aan95/pPA67+qGHpkNdUXh6NGUplH0LhcfpjhHH4l7xKPKCGSjMJ54PAHoyfQZKHr44qXwkK+alUcVzEIDgYMFCeR7Ws62HqSkePj87ndPfjjQEKLrNWsSJbi23LwTgN+ytjKas+V730dSVsW2t4duLeJmX4P36qu7kr+XNG96tL2UAuhu+E/rvu5rz26NvacOPyHpHckty20H790pCcyrVYWM7tm8DSsp2xD9J2AXN9lYA9lPz4EZfzA98hHVMFrqaqXlAyfyH+8DHMgP4LlPG7x0u8CCXUns+g99+apnoIdzoCsVMoVrD7XY/dYScp/zcDKiAQUkf2w3l4trpJql9b0siQiDfb2heosb2DfN295C2OuZJ4AGqHiQLA8/NaVT5RFMwNSXYvby5AoMSd0NTvXAbKw9XX2Kf0cbdlfSYkx/EqyBkscP9XYNvvqeZZHIS3PDNlzTZ+pF8ch+6KhksfoNpZZA0ekSMZhAHk7XL4vknXWIdi6JejDb+6l0bDGXYlAGhYsstIXeTKxCkXAX75eEW3gBImZATgZJ4MFrg+Voq7vuOomGNveNJYlUkBiqR2hIWlJ1Ryw5wM94Bq7xU4YcyCiHEIFpx0MaMWQx5mMCsTI0ZtYoCX5Q+7G7a1n/yyQLYsakF7TfMTv58Js6RSqyCQ49TGH9PbGlIR9zVREkeMh5RXhODbC3H9pQULaX1mfsNbHlYShXHMAd9VFs7fmVBX78FC+k9z4F/OFXoW6GQyTE90JaY3Sl8EGEIjUzUmN87e1HOOcvWTbLJn325h3gTYDuFqCO6cSAGQKmJFpGPT2IwHePo8nkc7yFD0FtPhWgMyT7JR40/L3ozI/EgnKh6VQMUsY+Pqr8BIztcse9vuJO6XygfKPkVNf/W7vj2cbHbxkd+LNenEInyWdgQIW3yvNYKVnmRwNgS48ttw3/68QXpC/AlvyBtQEHBvr/h6+svqLr4OSWANlQSD/VSE4pG6dhrws4Sxr2yKNDrBvAmXeEqkVUIjJ2AXICaCm668BKR3rVOoCy0fktZ6Su7Iz/f1YWFyK9IkJDwCWnbVEbLIAK2LGWrHcazRPSoGsY9M2GrBblWFK2HkQJfYImYVRmoSfbelQN/qGhGViqf+tyvkI7Du5GC9TNp+EbgtjYYnZLdFw4bvsTfY9Psn86bGrATf/jcNPbtiWJHiYavi7ynyvOJ4ByMw6JeOskXReArv4/huZpsHql7NKeFBHCa70K73dcLkkVHNNv3K3R+BrWXjV3S78bx22Dz7566bhj2neD2stzq5dW5/v5T3OfF8TuUHX8HmJ5P1H3884Fc7SpGvOy/dnKW60ws6pqs6q6cOXzdGVwqeFfl+R26uUhItAEaZUYClekemgDKDNLQ7tzxyAjjwUDy8PlXejr9iRTo487uz008O/LYMXj4AUi/09KFbIdNvutiyCFZrDzed8brk4CPQP3nnprfPznljoRzIZJ9VIa9JJSs3i+E2VgVAzFE8L/vd/yf+cUP3vo7jEa8DnXwSAOupk8Qtg6b5LAjaYcVAMsetQxNT+B/cPFdmvQVzTw54bmYevEjbIQsXLvRISi90jzEJOiQ3C9Mu6J5XVmur+yuc38ew74BcXMdPc4B1mq0jWi44LQ1PHOFATx/2zNZb1Pw/AtzF70B4wCN65XnfIfhJmO+r9Y8Szj3l5Dv7UBSYm7PpsPIJ9MSTa/Wc063piq7tXQh/2cnx7koDLPefR4bPdlse1od8T4D9FHesd5FPm+Kp6XfPvXHi8cox//Y/hMAEvWILqWf8dpaGZZO1/qj0+GlVM/T/z38IdsTKLcca3uUgFsabyIfoOH+cNAUafoLflDZVR4+GWAuqGphzIDLZuZ5VMCqwDK+ZyHehTtWVLCrcZQMhu+tPaG3RAzSUgJl0jCmACh3BSeWraTb4H/DDgJwhynOCKZMJ223D0Yvz+4eUDjA5zwyqbhAeFG6Z7njaL7amEAPhR1IgLmqQlUn0vsHiXZgCnWDlQYlT+xwgucdqDLM934WbcLRFzdxvMko63QNdfuYOtFggIHR+cCeooWst+6LUthCxbacyn/i2ndX0tWCHpqKPIUDrBaK1SeaLIt6LhKaQNQaWFGG+ICNLw+Jui9BETNEGTAVrY2iUx+a13bXtBoad9EzrHwggtVC5YJVUaPKaNK/pCGGMyFthJSTfKpxC9WMiip3mydCKebJJ2NYGRLSXRUeFVlgKlnHMzfA4ik3x3mwEIBGa0QG2xjIur6MtiX91ACCWt0wSxQOchbzQkOZ/ns/mh8TQVvpMzxaovJiy7Iso7jrXQ1iM4e/o/L2vnJjPbTIF0WKs/qkgpZp4qajx/ZZXcMv6SoHIFf04BS6p9MkMtP4fsG/AWCKunKSyPj1M3nDhFhB6h9xoIXCA2gqAvsa234Uoe/hEJO32d5z964veCRzDshGoZ5QTYJGDausV6RYBkK/BoMpjdJ7SllDvzfDJTNWGvltoxxtoBm1Kd1TT+MdRfVmioqKvRakyuB6x1vZ8ZVzMBoTLX7lhAqJ7FFAKETYKctzknciD+hVYSr/ELFTXPE8F4OoWyK8JMItE24bISVGTkonTTgw67ok+1fiSPukA7VCIo4UQmagKOUUr3gdvyo8ya/+0Ogj8l1w14zLBT0tgpt8ivGHzDtr2PY1Lth6WeANjfgUqaDegc6EcF+Tv5coDhY9zmBr8sQj5bnl5wCboO2AU10dcTEGWMOZxEHu4fkZlxka9+Gwtmh+tlqrodoWTHAg9ke0jNDT08X3KFdO+ZZDz6e/53SByI7X6B0VPVUMzWP4ELY496d5Fr+P8AlC994nx5i3al8nD7/P0ztaPjPMuFLuER5eqsv+Ho33+2WLP0U6Yt2WOOLNkDGWPXQeejat6B4frJMPtrk0qvgYPhw6Oh1VGzf68YGxDjtztt+2r3RSQ853qQBsXud+javWVxs7bJt4rafWXiY1+hDo9sM+fWTYViLlv0j6EynQAcXQD6/L7zLFQy/GsBuntuaApkOKwhiAJlR7pe1Hl/8R1f6G6Z3h30MFnwLGP6N5mr5Imoi+TWI4yRH0eL8Y9/F00DbPr/ZS8e/pDmbG39MNDODHH3/CvRbsr68AV7zuv6LDwXsFyh3X8DLQiDiokfna+UukkEt3lOFANjItCmVs/+9O8oEJTvXRWnh8No1j+7A6K/C5NHTqJQPRW6H1Vek3yx3oUtaOXOyQV+7GA6D7blYvKA6RNfiIoLW2Uhyc1U5yJRCNSBPzNKIqB4298uz4oG/aFeJ08PlBlsM5Xm0OA21fnXlYil0p4fuX8H03/L+Ks6t8D/reZVuVf3DqvWx7IqYnedEPo+FQPAe6kghwI5LDDLGxR2Ny1ulHa5n79/Y9odEnelBHeNeUbxjKWF2L8jHsvL4vsU/6voyh3hmYBv3qRnDcXETPqkR4SRm3JMqnihrIOGk22bS8sXyKlxU7Cfqb55O6o+IZoBAHklHojoLgFdR5bc9EnMwLC4Si983LfmnFS8YON1pUUUF6JyYAUWRqMR7LUTO+7OSIhZGmjWEH+5DPyLTzwRgxyfPHS1liwFmTb/QwPcirNt7RS12eKe5x6saXu7ojyIYPUg/HQ/k4nBMPn6Us5lW+JyXogY9N3GtcoiPDZcAVmwYOsXv9OXqqcpajRg/28kIymacjYcGPNtBK9pB2MTT6og8sWO8NGJ6m0PcVHobfjHA/L9RTv/OOC7gCRoi714FkUY9cBhlzTOPOEqQErO1ZxBKTQSQqb9oI242QN0LexGs9cQLKhkIsCvSawKVoGHdYNF65AxcEUJLRLFnn0dQ5w9xFfm8RkVT5YP0SMp4FBgitYCZrEm0lmsFfHNM4+dQCRDh5YVTDV26jv8KwlaS1Gu4jyexRGj2yVxL5Cp7O85z1DsSDeo/EqlV+UvpqY2XbjxjYppu+qR0Z7JFeeT6nRSF0u/KUBslMp2L5pQP2wN7Px5/bR48qc3o0IUftXSw3lbmaLx5gAidib8s3gXRQ5qHRwDg/PkHU5+e57JI3LTIaXpuMOrGBJipI/ArlHbVUVMpKjyMfbgWZALs2hJCRSIyETKHaFETcywRBlnBvaDUCSymB7OoOpl5kTQCjoqCgQu5Jr+WOt8J4RW7rxhTVFBToRKjIKJRRSa664GRK/AJCBZFEDcmQO9ftbyNgI8KWCLcN+LIBt0zIWehF4Xb9y8SLyK5kIZjxHlc43awFqDW1QFimQvdrz6oqqcnpuo2redA3t3fFY2bYfavMOsKcwIHq96KOwts9o5Zvwj2b84Vowd2lKujuQDcYsWhvUJ6b5/mxImR8/iDfszTkSqGOGKON/RkBCgR/yjU0d2kLHtZvbGKi35HBHBLpz04RO0ZO96h9Wny7ksLa899H+dDnOx3vq3BfK39pbocoIZ+WPru+VYrD9GgK/uTJryjxfbnukvT38vj4IC2NR36v5Rzb+0PXeyaExoYeDDwDFqVLfnMQ3vVhiKhm26bEcpUKF1KL/iaTdHSYBAZSvsnNorm1F8FdwfeZ6ffGoz9Q+o4V6CMW/OvMYNtgjLtW+62HTLrQWt7BAx0no9bx7SgkfHScr2oZFikcir47fVQp+ZH0nk19V/ak744TIf+U532NB3R5Pl0u9wrwD8JgakHiDb+WO0AS0vdHECoR7lk3foXhIbktmUK1a/yPRN0XwrfBd2pNi5NxfLJ/S7IZEHPlSnNYF6/zOf+OIWRP6jjYPDZnFx7yqkDogoN8t3s5PTxqZ0Fuu0+lIawNWLsc5qLbpS42VSsl12C41d89G+ryn9c3Odcsp0O1X9EP50+hrd8YvmjitbtXyPKVveszu/dVBZetnceiV9fAJ9L/inadAHBwsjHuCI92iI827u9NNrHHocpHlMQLeZH/vv0NRIR/qLcxAPxvfgUI+G1/041AmLYaF8ED0BSkHPj613KfoWUDjodnOBjzqWeLNLwb1msKyrbfuPiBXFSPMuxeYqF1f5v4s9EaoxcNNtfnMsDqFY7B6EYUM/CyVk1F0TvTW39XQ70eoh4HR27p31zkozAsA/52PyX3i3qx2zi9BlVTtL2xHOahbmHnkx+6A69cF6tCD1m7aWZwR49PaCYFdHLeu8hkHxR/RlkaaP7VIy61jdWur9y074T0xS83/XXv5O5Aa2Jjq3onkBiwe8/1j+x6iTbkLXfAV2GNA58/6sdCXmFGu97CD+vbX7v3lI+qGDpEw2dYu3boFOdM13JtI4Hq5TVageGV40Uca1Uiq4xgXufWFRcr0LZe1rp7odo6JlH0EBjIDEpVw+jL3eVcihsKJWTQ/oJaCPt9R91VCcKpNay6+MpVUdloTlZlSLhzhdcj60NBEG9Qy1JIQwMyUCV8O6uxYgzkwwlBfuBTFv77SeJtXa5o3Gok/Hu5dnstBTnwZGSnxOOPxbo6WOWXf5+3yRK6/UBmojE/DuYtGsstBkC51jKAxXGly4aOX62Aje/O3i+BOVgbq0a9fr8cYhY/uM/vdjkxazQGXTTvnuu9iHJappWNXNyoXy/HaMYedFfChEbHvtl71ng2CX5dCicAlFv/CULjTI6RQOVISMioMD9wu4rGGUNS/qQGUAQKdmCMmjTvXsBJPLczZdxuG7Yk95HfMvBlS7iBkIrywLKDS8LOGypr1Bu2K+OaaF9YxrCYESVlsI5VJiBzRaKMnMQEJTMho6jyHLglxktmvCTgJRNuqSKT9HFX46qqNLZygbXeeJENtii9uRBqIhQWG/+mQJfbjIrZkhegFJbbzSrAhcFFDFNrJb36SJlV3Ccz+7LuL95g3etQP/crpNAK/JySOSzDgeAx9A739XUehykymQXDoWW+4fOovm+ZGDNMPowjrEKj25q1tJZx+cGYXKG3S8/zj6SH4/oA5iOG+KAqqe5iByY8/oR0iYFeg/FaNz5BsnrvGnhPuXjOOKbLPPtCvb+fwPnHSVEue6YMgE8bsE6JO++Puy8f9n7nT1q+TwmM3rQVbcb+gY4qu2ss9ojWSJj3xOGchCF3o5sxXFX5J2WYMTYzC2/vzp5oGP+/0rdK37EC/a/UVieGA0FuG56wye890CkQtxOiMdHVKFS/B17G+4VVgocZ/R7Te4dN07lhIR98l98hUufTqfHj52vgXwH89GTRUvDr669AYfycNryWO/777Sf8jTK+UhLPnb10ezv8eMOWbtj/49cHAAVYzEx9hY9GGaPbx9UUDLbdk91OxC2i7WojNc4hvz+E5fMrbKQBH0TWh/REhZ6D8KsRXzvyBrTIb2Z1ProRxe/jOEf6xTR4ogPtflaFxDey4XckgaGow0vjk6GOEVb02S6lJRke8Gl6N9DeXgd3PVn+tMCZwwghFxqpH8G3xaHgsv15/D8nwsbRxu3keeTZz9T9DEhHm5MHVcX1tszObWl8ppBuSqnre6qj0+QP4BIDr6XgJYmnZFUDHz22ckr5N4QxONUODDJWQEEbZ+6fSDZiiEo5w4yCzJv11TzPL/Qzjggpz+siT+sVPuz8ZhQW+rvZ+5q9BOJKmtB/AVVayHKtDVVKRAVV5PfWHgFueMDQELLU0eYehG40hiFfzyHFyryO8dmFtByLFZ4c5enpbQSdF8/mxmcAiBiUqJtJmWvdlI8NPJMOgTE+1POrWdqx9UJwSx3HCfMCnAHrn5iaRr61p+rvZgvQQ7avu2EweyjYSP+sTlLPPYIoKRxeBT/pPbhJPf/VE1HC9opnOd/taoIC1IS0A6gJpVTUGq+cAURjVSVMLxCczQmiQNeGw3pZ9tHKBAMEAB4FyJQsEv2nyRAE9qtyfZ1289quOHi0WmKpsxXwKMUZHkuNPR/Xz7y6+m+EeTsw2h2uMFioeJ+fh88RpjR6Hw312yHbkQh3BB/Q7j0HgH/TnD+fMHLyFRBG6YAfRIoZL4I7TR0JJLz/fOCg0pHEHg3WUYYlQlLIquvBlstJsTGNNGQ9WEPF75FtfiQ1np3TmorOeQDMts7MgEWtqACnBE5VjHdE4Ah5oSzXQr0zUmHcqh0rq5RjS9dIPsl1NmZmR7zArlr8xpV8y/ghb/jysmFLhA3ARhUbCFRFyY69imESMnYlnKy8r3D1iEIMUWeL4t/UvNKnBKHfW4KEawchMyODsEGebxm4JeAlAy+JcdPw7ZUZXyupgr6isFzxUSOP8clhMCUACXYLSAVhD1vVotFHCmtcoV2V6DtQd5a73IvKj53huc6N33xmBi8EsjvQ4ziPVHM03maIEcVIHxjNkGbEKeg7FpgeixxRbhjXxnmREYan00fkIQyNc/g7LNIGspPB3ymPXfZatfH6QHOX0iSbRFl3lfExdT2C+agEd2+v9vSo9qutPtvMo3q+2Qx923QE9rQunu3fyKj+Sn/69GlGUFeJ5FzKTSnNMM1Ificr6kOmtvViAljuMk/QMyez4jOjNgYSJXc2YJcZIC/9HMQEraEPR116x1HGX0nS9t0S3kNGq8nNKPk027reEfEOhLQPIV3kEFrRUrqxO/pq6LII0xPiT2Ew7XsQwKLUFsMUajbSTQS6OwCBGa734o3tit6RVMBuGt1hAvy8rwkzU0sfDgH/zuR3Wryv+JlyyA54u+PrsGGxt/NuXUEbBfsx10eHrDJcyxl3Vc497HeR93cWs/FakQKqJgBkoTN5gNlCf09Ll/QUSQ8HeWwfYcmHB7bmq2yh5Tvmsmx3A68ENu7biNli3zm+6HdV3B25XSA4V5bpsLFdyv5T6L2jCg4SUSNn3i3ux5q4jW8iyMkAy91uqSL4dfj8Sj0a7k8FDD9k7E61w+nCBK5RCYZffhtoK6tw43k7i85Iq+03+XixHwAuxujyOroYpSNOUbcW9L849iu7EgMxQd0ZDtqJZnbRjbTLvwLkJE3CHV2jzWcbrmcKLvM/w9Aj7yahbxx+T0mF2w+dgFwB66Dek2bPsO3/uf+KSRg3vKpGlDvCMdXx05fb8vVeCwDC1zJDMN/GsQC8o6UxXaFPWHfcDi8L47VoA0M48r9r+Y5lnLTbqJh5lDOIwv3qukGCbYSUfrCG2La+13CthdXX8U+vj5agSJBM8qLsZeQ5qSc3u5VXC58OtshF0LxC8xiElDQvJSR9ZvyNu1O/UT7d4IfjaXgHAMgN7YymEfU3abCNSESG2CfthSrWu5DvBPW0k9CsRuYi+d4gVt93AFxjWZmfKIe+KPgM8TiPU+T3Vk9Lpc2H8X2//zSynSDv0JDfZQXW0NhJ+01BicFJeF0y3sh6L6xEP/BhJmO1QfHKDR9apih/Cc42GbOF40XV/uzsz9jubDM4tI4aOthwSJ6leI89By9FEMBFwNkZxDtQE4gTMjakBHBmpCRhzaNkJSJ5CZOuY86GM6SvdikXlGai0NDBgu2qtGaTaZiBdAfSHdstY7tl5C3hdssyR8lCsxPuO1DuhLKT3khzA6r4aYIlXO9KrrDQ2wwW3px8kKQPFoJ5JRd6GAxdH9wyyg2/csVDpQqmAiZGTRA80tDuXFWGYvYrIOQjNXThAeqOPA1ros3qU2nmDnFGzvPy4vkq2Fe3dOMeO0BruNXWZ1/f2LYZcrRfArVHOzgAgmIJkrvqQRaQIOyDiD1U+1H6R6AjGgslrK+2YsLKac/CV0K7jCFOIkFZ6NiNYZhkjWEYJO5+d69s7LVBGr1wgHYtyZAa74WxFelB5C1D/yI9Erx9AfgNAKEOXuRzqyZDHWB2oPkxS39dClYV600QuWVad1kiC/3Wm3DI8hcZp4Nsks8FsETzq52yNque3GD4/eC2P468ojE1VNpxVxpsBk0ePUQN0YlY94NxbOSLcZIEUa9vAL6A8SMqfkwVP75kbFtSOknYC6HswNv9hl/Khl/qFxTeNPCG8KjCjHsVGl+RYYZFSSPiZC6gWpFuDFACEbCh4EZVlOS5ilL9BtxyRs5ATYw3Kti5IpUdhj+5JlSqypsKEqvXexWZsLKGq9f3YhBVNORrRtX7wiur8ryK8v9eK+6l4u0NuBdVnkuFwV2dGs0P9mMMBOMpjdVS3XwBIAZnm2efOY+WZHZYZLWJVYLu05s3nQm9VMU4i6p61FU11IpHkKxzbnJHHYT3eAbg7SpsE8HvKH3oODd4x/xhfa+XV6iDx2chW2cAF1+aYLFoJJ4/e4j+uel43ncEImHuXp8sak4PRkf67M2j32PjR+0u+jK953GzFoSLk+piDz7kjjLqAM7m2H+3kNtnRvqn0yFL5qiB59OyWOxDxMFAq1flHhnnG21ZNhdxeihr/KJOg72GxZF+5v/LxCFH/G4l3zm0ffUrfO+IWQ/M6skKt0fyxGh7XCDMSVVjXuo+u9R1+kBAfTZFWh3rOxyLKP+e1DnObaz3Ef14OsVBHtf3MV5VPStItu9mMb2TOdI58GvHGMgM5ARshLQlJMoorwX0toPAqKWITOUYpde+QLzViZPIAbWi2vnJEsYFkn92ujrunzI/n5suRypZpO/cAz0c6gDokH2UJs4kiw7xGKehsr9FWl1K7gCHgyzf3NVG8PyZLqDxuf9wcRYYRQnSIyDfHAXiMQ1FI3zvS+OcPZlqaUOlkno45l225uuDPgL3B5PdefvetXqhKC3w1kab/GRiwUht2RwRko8SvYpeKhkPKfyTA3pkgFhQvQL/8x8/Cxy3DXjTDWgQUm50k/AnnbBJXci8JtAF4dvb0+emILSxzBYOHHI4qY7vUBsWEeyDsEAM2gjYtalbq9pP1wn9J/Qd7BBSV6mbS///7L3rkhw5rib4ge6RUnWf7mnbi63t2rz/k82vM7s2p6u7SsoMJ7E/cCEIp3tEZKYupRJkqYhw5wUkQQAkCJBHHCMcKQ+HigswTMGB7YQfDPUieM18iXfQhbtg4mS0cSA95V5lEwdFDOOyzgx1s5GQ3s/aLDadlReVKgvCB4DKoGBnkrMDSnHuWHDBMaXha8/se79btSu+Y7BiDG250Z+vZquq9HUkeoG/Wf1ZkBxN7AmNTeXApKwh9OMjjENCWA/beP+h36PnjDnoHaFz/ODwcZceE13ittKgUzSE3x7mDGG8WiXQQVzB3aXExTQJr53OfGN8DNb+rFwk9f++/MVf/+dmJy9SOTa8d4xzlCtjDyth3TWek+czMr6LX8U6b40zjEV4OgZp+N6ctZdR9gMCuauTQLSg8IqCBQzGRg3AFkQBubG8tYpmm+vKVE2H83K97rFzyqJ3uNcKo+9m8yfpxwTZrCUmUOkHNHuJxTe0rawP5cnv/jSD+mfd0u5nmayCft/4L+VJ0rbNZ101GRvvXA2HTUbf9u53OUb7MD5MPRUrbnqXaAtTsIsFGkq1q0HHUkWXsOunYeHPYRvH0Hom4n2Qr6NMs/Ej/y79oNdj66eatBgyPjE/i7Ty6agytqlnMxXZ4Je+KH7oxSIaMAVZqThybAGHv9gWP5jolSr+ukGO8KwxiFVek42m0kmkWZ9P+qX0/rVAMQQxVtXe4iD7K3gDsBQQLaACLFwkinmRfhW6lBtjiUjaH43nNtpkR30ZV1UK2Q8uC7UQ2wXyGh6+cuCHRvcbsDyjrBesF+DjR8LTB/Im1o2wXQm8FdRKwLaiVcg9eIPuB5iHwSBd9MCeHzY0XhXohNk2crEDn20DoRpP2bCRmmSLGjeYuk7lBxqLHvpooQ+b2wqimLNa/WIROyyEcXbk3wjPd8Uhe2LLGMzU4aPf83c04BNli+unQbTPSghU6mVGIJpt7Ledp7odYdkHxFJuZ1MGjMpAM8N5ko1/14S/QoxWv+5qVppKbRhTTFrGrd7VbQAAIABJREFU5plbPMpJn87jxSdAX4NG9UFsamlkdmL5SE5bnYyZ/t1DkmNGkN6HLkuDmhOZeVcbSOa23TFdCDWHYo+80lHnSfWEoqsOm7uC80FT2Qtz3IvuE/E+YXjOvr4d0i2YMweEfgsFJQpGXTz0RUfaDzzVXVujbG1+aE+zkZRB+owqVLWW6y7CCAGkeoM+sbOcYkRv+Eth/PWp4HIpaER4uRKeXwifr4RP1wW/1wt+5ycAC5YGkVHcsAHYGGi0yGU5SwFRwYorVt5QmFFwxYIFRAULNVyo4UPZ8GGpeFqBdSWslwV0WX1+X9sGNJbjegxQKyi8gLiAuaEw+X4HN5FRFej3sTOjtU1vjVrFLl3lao3aKprKH2agNolYslVGrRLaXRiDjosZ0AcjNYXvui5nkd0FQfboYUr5E1kuVxCxi8e+KxcGG6JAEQNFDcEe0cT/7HC8/m7ccTICCVf7+IHXncGD40ecuBjBdIixPEOZg24wv4uCx7JHZj/MF7Y+HiX4DpUz8CNKg2DqOER91dLn5h6xFcdxkmInn+Owzn7PCthXNL7kWb+Sp/UWTXlVrnmUYdNWz3CYvg80lfdYXffsbegcSjF+yECT0vZzowjC6zUlTZsYZdHeEeXOKo8E1bAflZ5HnLJ8ANx4TrkPd+XR+Dxfg3YDdjrmjflxHxyN94Q5GBJDMo5vR91lV41yWpWZ8ljldDKeR1nuRbnYDtyahxQPQgxkPuE/oc5do252/GTuvTeY3nLKY2a4GEpCUYWAZuskOQYthw8JoicuSmgLQGtBuSxYnhaArmCuKFcGSHQAuU+dXHaw3otOvGBYvk+DM8cJ/Nox/YHhjV3yBzegR3hLT1D6jM/PJMhrJ/BbCfkV9ar3xavsYd8VZCbWN1+Y84JvplR9I3iL8fytVev/3+3Q5ynGAK4vwLrgIxE+5YgKUTfW78NibVo4I1lCwmtNM/MQyCuDW2A4ng327pXuyvtuUgwnmhWu73YUH4Sd6trB9cyT8XgUUlHCK/arhL6ln7cqgyygkCeXceZl8k0g4oX7UMtzMe5HPoVEByEhe8Z7IdE6EfDXgMT31J0OJ4vvqbjh/fNdeMQ74b3VEQB0UxOcbTDMH89waVzF1hQWPdcXns/nWTveRXbS/ue95TLwNxdDs0UfjT8PQT1jsaDAvJuvAMUNx36nlbGTM64S5Xv23O18KjR2t4nna/FY4LE6XMb0HBI0J3OadO24MQDao+J9kNUllQfs8jpDCJ2GjsPuWvlQ/94cORSXdEnNe5B8BfAy9MSs/bGw/rY3qW8Svehvjxjlr3oa0xfs0Kv7ZdsmHstTOVslkQJ4iDPMU7k4b2ia7HncOMY34P4XvbpMSdcP5o77WI9VwOMjp2M5oMLQgwJEiSZC/ai40ApaFlRmUGtoTS5FgHrvRVTZ7pvTAxeyob/BIjSIYX3JZ/tQ2q6HIIdGVjAu4LagNcK2ARSie9WtYdsY25X1PKBuhBWLhGM+lmPXz4B3X+ynDPLRtJ6XJRvVZEaNhtHYEWjSvHejtynvxiSUvSc7R5sSLd4r0pIGoYjtH2aMcr6jOXs4lw9eGPXeEi+cvvUxHDp3KGfWbz6v9OW/bvTcfmPziDpmLbhDaHKsIw4Ax4/74EhOD0REUNfaOdHcICS+U2/vLCzyYYwEFL9HPulCk8f3GPvDk48kEBDY99+r6Tcj8hqI2TMZHZAVHXxmpcIPkfsfuy7D3rkqJY0HNwJoAS1PKOtHlMsqvKuwHr4CKqthGQ2snmKEprwZop2R/Sa5TgMbiDcUsjvONyxoeCLgaWV8KA0fC+OyEJYF7tXeoHZrdcpvrPKyScQ9iaYuB1qkESy805egFqGInP1uW8PGDU0N6NwknKsZ0NHGsPOdLqkz4IFB2SAa0dnjPWWx4Wv/SI3nJp4p0OzAuFSW2Lglmo94PqKaR2DgMOrEDp/XwC5/aOjOAPy+C9fvchn8ZwHn3RNIxDpqW+8JPxoFHLTnS3TdnwDs+qif8I0g6nIcvxxnICK/rqnVitYquDY07tf1QWV/h/168LXy8ie8DX4gA/orwEJd2srdKZACb4/P04rmTQpSZ3ani8ldFa+pM67UjlP8MSCtJjl+0EFfTsIefRN4AwJvyNrXQmMhj3ucv3MH7tbtnwF8BAD8Y/2Av374BVcw/lGe8F+wmL52JNPGk4ECNG7Y2pYKvxOiA1bccI/9M3EqBiBH1QnAajzDvCv0+RV9d7Ut3QDpRUcPqDZshnkZ/uyNmxx4TRGvHfNb1phJPaZvUOa5E+Vhp5ukemL/AhBLCodNKe57MbBtjsli2MLxWNlmmdh5ZtizaFWYoJdlyJvgjrFh/28PFmf48NDuLN992+8Ppxl20hhr6UhtM6+k3J/31juQ5dFu3wmeM4i4GH3EBbeThRLtPk7pA5Bw3W10WbKD+Zd3Za+yWScOJ/LsP9u/MR5UyrgGGgj7YQMwhCdCvKitaqv287N5RR/Q2GxH2ZtmRgXepzvs1rw5eGIoMB6k8DeMp7c7HnsEn9YnDUWtG7PmPUEBb5bwyMv8yHDCZzLfJo8+LCJYnqsHD0c1z3Mzzhtf5dzE3nZ5HbzknP3J0w/rB8fB4sDUVmF3ObPJwGl7hFA+84bTU+oEv0cTtlFrY9ZDm4Rpp2Obxyj9jLV8FL95ZN9IIKkA9kw9LLdQ5jpJNweTWXHu8/Cqf8bnrY8FMIxdT8fww7HMfkMS25gzq9F8gQUQGML4m0pFgEfIcE80wtnCPQKhR8+J10SZUZ8IsLu6x3uyJ6KeASo9PKzhI1HTKcxFht4e0HuUhJ+ZMY1QsCyEZSmgWrGRhNutw9UvNi+bZ/WIXK2B26b1LiiFUEoZPZ5ZW8oBZx25RgvEW3ABb4QNUE984Q3bJkaQbQNatXlTJAoEA6213kGJZG7BfA6eB0x0foUgKiK56px0Uafluuc+WNrmTz3OCIBRXKSV3LRhR7hm6XbapoNngdwO8wzvguy0ueUG7ihWGcN1BHvMZyNjc9LmfKdNYYV9XADayaMuBhn/Sp7m8lQm+z811d+Vl/66w6W5gZimh1JCZS6ixjIGT7aAdWdeIc1QjvL33cmJ0GcnYhGT9b950+/XuqkON8oeQHiR+bF8bWMCY3qcpGGsgIaP4XDhHEYdLnZvi+0ZiXbs/r8gHXwdD571x0lf3KGShWtON9GX0o+BluN0YfFMF3LRzmSWEAVKH6arwq7SUNtzBaGtBKYLiJ5Qlg+gdRWv7tpQ0bChYmsNGxi1VTAYrVUsaFiogkrBUopK3yZh1BkgYhRULIWxLoRL2bCWig8L4cMCfFgYTwW4rHqtDdm96iz4VeHxEs2GsRAQPd6II6/voW1dxjDcAF+Z8XLVO1AtSF7riRkAV9JgbOF6jTgSUf55JeG754g8S743C57P7IcgPcaQH57SyCcNKhM4HIjg3Z/IHB62doa0EYb2DC8E492Lef7D95iFfrf2z+ZGWrMwneCY6jxKEMqj8H/mnbO2Hjb/1rQ9hMRzPH/i/be0k+k4ch/rCYJ+QU7u7ylQL3NEHfOODh0zlB/z8yTrlNkOWX54eFMjj8ZP+c1N4+NPmMGfgu6+BtxlnJuD6VMWiW+3deSLBamHdK+z1oZa9RqW1jyQKpkMNKUpyGcv+5bq+BO+CPy5DehAEq50Sy7qu5T2i0FYYeVFkc1Mxm08Qht9Y214z/ukR+i8+VTlWzm8KjO+0O59cFN5Cwv4bwNv6bvXI24MfdgK3RnTz+r5itxZx/K/tmf8x4dfQGA9oZVW2LYxoMptic9nuxRDHVOphq646TvbcZ41f+xMmRdlMhmLLZBzXUAPux3w3p34vjEeRzuAU0gLhDMj7tGO5kOQF0MY+WvuQwDdwEApY/iaF9RTNCcdM1lEjqQQacDALuKLRfuOQShE8zvqfyCNZtp/qX9jc676bmZBip4T91XUISiDN3vvIbq/hcupsH9LJVoEpwbdI7QPYMq2TnC0ql5T5b1NjxsMs2k7432zhYnJ9MyfM+67zfUHIM/1WYLw+G8wVDrj6j+7QfkpmF3FX3XFMz57MwpdwGhgrtj0LsuXtjgmDnEeAYO+FVWveatjn40pmDQEubVPQ6fKT3sWNge7UoVotN5Xrhu9tt7UPINGaXpjmLNiJIphQfUb9fDvPHRIxyouII8YwXAGa1eChZwPbSE6KGnUKDxOQJhzx2L0SG7t5ZcZzdj1NE7thAeqAaNf9cLmYaZHwFpvPHMMvCrasRvRGTImjfoFxTGE62FbfKAlknezwxasbwNefgdcQ+OO/GhstuJCxYVjTfrdrvcIT+1+XH0sZUjIcbkblsBcQG3TTYgKbhXcNnDlEC2B3ThhwX8Y4uUu98aKAV3UgCKe6HrjnQ0ls93hrp6ERl51AeMCbAS7Br5VO0ggYXbbJl7xTbvAQuD2/r7FiFOaKWs7kXccvqQxIg0F3O+l5Z6HU16vtPRNb6AbRCYY7URTTHg4h+/k+qaO6UEum1stR5VOVb9G4ufeHf39Z5zM0o6m8Tins5FcSqIkj0YM/jmUCRytifu96Pn9LUWBbydJ5e7DK9+XT+BGRTfIfrfUO1nLsa0zz4jjAHZnDcKUPFRXUgSirAec7uFyejeZ70co8y8UjOg92s2A462J5/UyqM0V9rNun1MvvO86z7CGWhhanV3EIrdaARXSc+jiR15bwdYKrrzghRe0reClAp+ujM/699yAK5Nc7wEGUcOCikupWKhhWfR6HZjBmrAWYC3AZQGe1oKPpeBpYfyyAh9X4KkAT8WkrPD5WgkVwFab3CxQCS6wVhcrKpT1KgwuKMxYmEWGE6Gp/iZMsaGxtLE1Qmt6L7oexu+HbyQMOzkj7XFxfIlmegkwEpoeWKBYnnBPfa0G9BiBjQAiidSConU1TUNND62bfhAQcCO6XUcjachvuE9KyYExfUZXJs9GBn1A3K9h/G+FR4QOT+Zqyjfllu/Vrq/VP99iHL4IfKmG/DAdtAdfuP3AbfwJPybY/okfFB9f+zNf9BCIikSGg955Xita1bXWkD+sfW2bTAt9dFvvJ7wf/IAG9APlKiv+pqXbd2fa92xYWLJXMnlbb3BePB9VRDjdUH4EDk5F0mDIu4HOmwXcK5GPY+nGc8bJbum7VPs+cLAw/4r13zo9ek7P80XyHdUCvwP4C3Z787fyPaPiggUE4P/4y39gQ8OKgl/LguffP8EXXwCer8+yM7YysK7AJ/VY53Cv8r39H9NlY+DgNEjKQXXebCT1+3NAVughvqeV3Rp8dW4vuA1FD0D5y4NtssQxPYWBoJROkJwgcmdNk4Vd9xoIuOcNoNb6rsLssE7ku/EzbOgMBXJsS6+b1VBvLGSHOOVnNNLvdCPxgTni9XwlpvRINW2ilVlbr0cEl2XHCWHmAxDDThtNvkc6tbGebPo9AnF3cpD9juSDBWZCRpenUT5NYxveAyf5+CSZK+tGrwe7spumsc35YT7FMUkVzmSIJb9K+uftjGYmSO88iSOPip4IUYc7gVvq1STR30xqEKMbhIB771gz39t4XJHkhtoh1ezrSaF7vI0Fmp44xEQf28SxH90oTt2DiMjbJ/ZuabuQDeGvywf8Vl80WwGogFCDB1lHMKrZpr+S1y31s/FfS2hG/aGMI7qf8Qlpo5SZvTTH/EKagtMa5JJMl5429iQDuHiRxQN4GJ6RFCn8P4RQ5aALmGsvW51mRMewL8025xjOrxxHifvd92HVOm71OwuyaWlkzBYph9SzL/cpxItOvdDZjOvWEQUiJ/yuQqMX7vzdKm/q1aouco4tx7zWLXHU5fuCoocohea6t6Xeqe6dJRZw5qZzTQzo4voHMFcwb6ityh2xamSXPhB8mK3/pF/Ee7ACSwFQwaXI3XMshnTvEmYArd9lzzbyBK4XD9vL1CRqkRpJW20yhFqSG8/9oHOczyN1jbzXerDTjT0+Zi2dyMhoiMM7ZrAaz5saONjrZZDf93kmgMZfe+5pN6bz0IJiKBxgntXy3EsMTNVHBkALQOkuaJ+SU6wzT9q/8VZzLqPZyGq+LC8tdQ5xVXRp2332hQ+XVI7k/2cq91+6lvg7grGczKvVDt2kKh1x9rZ0nTa1PPIvjPkyHBnQz6O6pFITee9VB8U54WB3aR/mswmiBDccJJ/UN8U5lhvTzuoNL6K9vuksEH5PQ3v31Ke/Qnfm8ZyORCiTf9FSP/W5HNOcqUy5bUQupLqe5OubfFHKSANYel5pO0/YGumaxErvbSUmvUNc6IyZsHHBtRW81AWfrwULF1w3xucX2RZ4vgIvV8JGhLbI0ayyMFY0PBXGZQHWUlFRsTKhNsaVGSsRSllwWRc8XQo+lAW/LA0fLoSPK3BBw0oaDY+B2hhbI1QGtspi42a593zRw1hLIT8zziAsC6FWFa8g1Tzj4THzLi/Y2iKHm7gCWAFuKHqArN8C13w8+wiFQ/2mAxjDtLvPG7keYZckemh0sjp5UFTIvOnUeC4qRVO9zlzpKhhy5/uAg4WuD8b0zpUjYRtvyhRuB/myzpXoMZHhIXizZhIil3Xv75ncntU1n3+d9kc9zebDIb956Plxx0T5eNPzfLaXmA6N+pfEO7sGwSHpkQCwcm9xrEmaAcfDU/8YFaMs8eG/oy60685b6B1C14x/eEj6R4c/Sft/wh8Xpg55E9lFGPgVqREdLIbzujVwbV1+n5L9zznxrbvgBzOgzxjvo0XwfBUX3xu81vgRDdWvFawzwRyf8eQT8T3PlZyHKn8NvFqTmFRvyn/UHt+h/NsVvwJOd7K+eP33qJjfBI4Q47hF1NtdAPxCBc+7dYwWVLl7fcMLuN11SbA9BD7HDhZYXoduhhHE2N407pxtBu8KfCOY4j8sALRoCrh+bcIYVmL6vRlO4d1knSgezmHR1e4a2H39+mrP7mfM0jYRZ5vZ3wreykwmGwJeJJ3My9nzg4Xtbs17NC9iOvny9+WDv/7/Pobd7s+hrHvm9Qxuyr3vUTG9kyd4srxpg1EfyHni50y5oJxmn+Qcnzsg3Pkon4lJMMbJek+5p2lyWVLH32y6hy1HoODvl1/82aavX9SM+glbZ0kWsr71EOENdr3I0QYMMC629u8XuyYkHGqwVC/bC0b+ZLydUlX2QzdK3dO9wL2f7ZAR6Vci/HX5KHmp+IYWoUdV7WWHkLAU6mMGW7hVe+aHOUh5sfAk95Ma2G1sV28Qxzr8tSDFutnI1L052d5R9OQcGgEC9RDMVs9YwfBuOqKDWKWub7vqH72xIv+V38Myo8X0COWwJvfdcmlHIzA1FAKoidHZ85B5VWs7iuEXGmHG8hLa4Rvto6HVydEa5ve4VvSN8AZufUdg8DYPGw3i2W14hvKJUHiBx2uHBbfv0Qoamfu46FgM27ivuPJnVC64ckXlBi6Ci7FJZukHM56jylsu1JtFkN8QAwlTU09+cnWkIYyD0n/jBYwFrTLQmh5SoT6EzWLuS2uZ1JhMPbTvm+Ak+8gteqfLWDVwFV1LDhFoSMFAw51kZoJYlTruJbvGwTw8M8/KUS3kAf2ZVnbW1Fmz87NMgffmuwf6IREM02tf8kywyvN96HaZ6xaW/FdY38+wlOf/Qoaj1mRBfas3j0rh6di8Tad6ZV4yfBL1RJkRuo9zZgovZiSeeWYY892h7dSdO0M8xzI41D/JH9thh292B8/uhMEbHXsyuAd0ElPC2brvtFwOf5N05O1DkO36Uu8VB5t5WQ5NtVbwfAXKS0WlCloI163i+drwfCVcedFsBCqMpTCeQPhQCv6yAk+lYSUWw3llbAQsBCzLBctFPNELNRQiUHkSD3gSHe/KhK1u2GrDS2NcG2NrQGM5VFUYWEiujylFDObe9EYgFKBVsPJNicBe0Jj0O6ExofKCRisada9kQkVDQeEK6kJJ+4h13SwylprKPddLjEl1WWSHvCDDC4kZZAcf68ChScffw7g7/TdVA6qGpq0iy3nt+g+44+fx6ONfwOtg3zLSWi/2YCbsHif6P51BiUBnxnLGwXvt51NcbsA96d8qxN6ocszLvHcsHsx/WOCjTOx1MK0lKxZfB5UvA18V975W/An3Q1633wOusvyE94VwCHvOhzksuki3HnQ9uHGPgjb40vlxtLEoAHaIdVwl/ISvBT+AAf0BZjsIM1Vmbq3Ez168ldEHb7rpMpjm67abEBd8FKS4fcS1pJ/cfqDwvGn5CF7vCa7sUhjbL6WxvBH5m4r5HfDaZvm6/lsqJnfUzQCCx8X/e/2M/375KxiEC4AVBQ3iMfb0y0e8tA349CIE/fkqG74fn7CUBfW534fO0chqi8UdSlHgxQWl6iVLSpvzM3evLCK4veQCeX7FBHSxOHj8xlUgulJki9pY3wAZp1SOlzfDIzz31ecblNmkyI0cZoKA8ancn27BCdl3C2uMfWXoHy50Y1oCsscD4lgYX7G0wCEZ+2Zb2pi7CalfXmvcfWjdyAffJ8mGnYmU5SUkXLXjIx0xUvGp3h2uN5Cn9H1X9oy2Ht05OEsfd/bSeA3hrwM+fiev5n/vxWHmG171BL84z1z34bHrrJhC/V1KM9xBfoiP5nvkkOFR0ig7Y9uix/zddWQikjDt8iqX0z15B5fgIck5X+VEl/NkZzrL7F3aLCckQ7JiHWjShttDXpty6d/lRzeAFC9XkphneumkEkiMwkZuR4H6H40/nbfGNgbDvefJQLJN2/bNHX/wQLDaTwTSJY/4lxEWKu7VaemW0AtWdPecHccy9vvubsqIFqPLLcsf7j+19xaOHTOy4ubimYbyguHWTjS0Ai4WZjzzNTGiU9MN71JAixVc4F7nVSnC69IZYcVxL5sUPzeaMwNcQVylX7j1/ilxLg0N2o15p4Ui40cWE8FC0rN/83KE0GGhYyteYNFz2yJ9Rgt846JZ+6puYBS4UVdGvoCwAFzUOY8BVDSMBy0YrHe8Nu1lRuMVaIt44EFD8Ro9Rr4WGizohOeJN0dRf8Y5ojoyHtKAE69xctI0bDip57lHGYj0FsmJY4DfPm+ETjT6Erphha3ytO7MZyfNIzeLpUkTHVwlSJO2VUlV1o5r0egBdcMcYt8d6WhEcE/KGJkkHv7dDQ6nX5ODEgS457oay2Mf/5MBW5D41hl1fiWqc+4xoRQxMmZ+EL/HqFNZ5vHxQJzAzGv7fkj9sjNYHf7oT51p9mR+hceAaCzfxlpp1dWlTHG92qwiUPg+ojfKFq/avjlfIOwSZhSGNr4CGMBHnRef2KPJHO0V5EgKNDznoOr2mey/uef36hvvaZXTWAHCZ2yKxTWWOUIX9dKmgsoFz43AL4QrGggbtsa4boyKgtp4CNRTiLEuwIcV+LhIGPYLGq6VUQCsTFjLAlqAspAcTCPhdbUtaI1Qi/hWE1dcK/CyMV4a4aWxGr6BBYSCgrUAywJQIZRinubQiB7kXSDe5RICvjKhNvEPaJXQuIB5ET5LC9A2FcUVEnVF6ahyv3qjSYh0sgN0kZfnDf/GXQb6AT07AGnyuu/ye3c2PUihMrTLfrm+SPCkriNAD2gx4GHhwxrfvd6dp3L463WjJ+uEMz6Y/z7ibad85qCIiN6AQ0qcrm6Ylc0I/GRXT2o74NEsdiz7FtzLN0xe77rlVv8OiTHt70Fomz4XJmiMzHhe+FDOXYxz9z4LhSM+2L/FHMMQndHTMRJ3pvuO4PBwxOx5l3T3wT1j/2PBkb7UD3zvo8mOEKP0zcs0Sneu+vPQAoDeT3f3x5FuazIVGJYNww2luha0KKjNDrtVOP/Q+Di6Zpyvhn4ehMA3Y5s/gAH9lXDU4fcS45sGTBVQn186o3K41AeK802jw/eayL6b8mqvbgE9Kvi+BNzom4jeLOmb0J8vZv848JbGv8e431Jesd9xaCJJ4rlm+y2/JuH5iFDzqd97SPctCsTN8mMCBlCBWtE3EmeZ7+UFJ+my8XyX9mzCvJIXWX3TWIyBzw2aBIfq9HfrX2P3+QLbyruhSMYtnvlKlQ4YYMx79H0Cd7PJo3H40vBIXXzQ3NnKPv4pEO4ULrlcwr9aOHESw8aXkEyn0Gxj4RjXI7hj4GY0ncJt7uuOL+wG4qP670BxVoUbkvNzpP6nY/KdPo8y76xvTmTj0SHFnPcMZptgwRv1bkjj9zcInzpSu2iXJ/cBHb6Jz2OqTuGzObQv92l9chyu7UVFRqKhwDcpNIa7C7mPgy/ijG7VIG1e266NEjRPARPh3/W5l+vVyXs5X6QLPApIWd2Fej/6Z2p1Hs7he3qR07L+R2MahrUP3WgZ2j5w9FDH4ZZNqtdYUZSu4xdDS/gos4XKjvLL/tB1gUDvgy0hGODdqI2GYaFuA8wAWAy3wgLExbqLWfGcLkzirWZjFell0jDSEPQW0t0P4HIwojf1QDfzNse7TK3Dx76E4rSzpFofBz6mwc+99/0dsXiJLwVlIdBSQJeCtl7FlksASkGxQxNG7yxG1lbF61pYqmqZvKC0CyRCg9C4tb1xC3OGB+zIv0MnXNG5idBv0t5Bp8mbJNSfZQ4xXhCRxoqDL/Awjr0UH4LwnjgaXFgMMNANuxZo1Vvc/XvHFmTZt/+ZHw9nKLWvjvjqkWbG+WF+N0HlLVrDrLR53qQXnZYUVzY9369D9pn8uC0P99jlniDcVdbh6zEv0XF54ybl3scmz4iM7cNw0iyhm4PSA1uKGXaqwUBkWtmU0A4QGfTI0pNk/WumKjy6fp3psr8Q2IzoByD3kAeNhu2sZaRvOv6dy24qwwbcwp8L6hRmXh5pVuHpKAuAgoYF143QqGFrDSiEWvU6jSI4CNuWO0dBVTzRwbgsjAvpuXciLIXQ6IJWVjAVMC2oraHWik9twWcQXirhaQUWEj5/3QhXNZ5fW2/dSsCqulAlgBd2kWtqWwOjsoZ/rywe7WDUKsugWoGtAbURWtOOaFCDOHV1oqlLDWSdAAAgAElEQVSXeVVRzA1U7QoVgBsFek0cPKghhPjejotZxwvDJqAf6FMlk5rm0Yg03GqPuNdq0FG0IpctQcYkfYiYVYfqtNcJMX7G/OHdGdyRxqcn56cRmZlkCpnO2O8tvO6d4mcC7baIeKzct5azUxNyP+3l4JvrfHNBQb7Fsg958FsH7i2D9r3BSV9kufETHgNj2Pep3QdlvCM+fzowXSVGhLP/ePJM9Cnm4HnO/Z1oE/H6lhFsTf0jcYdXwTek2T+4Af3Wiuj49bjSDsr9XkM6K+B14HIiInm0eN2H55jVHEX6Xh/RMsMGTn+ffKTubtZr2z/h8A/lBfZHbnif7L0nVdrXejV8i257qPIj6nqtIqfl3X0P+jPAH+XrtuF/1P8CUPB///XvYIgvEMB4+fSpoxbkExHJYi1vLHj/HXXkwQaFZbYrCm0jNiY22cgkHNXvG9a8zHrXWwM+c1K4T1aDUyN0+jIsGGfv8wIk8bwdYe9WNK8DnmwkEsFPE7u3uG5kO4mlcaB+Ep4jno5u38Qe67c6j9ppz3j/aNjBCflY8d4Rb9zpOiozQ2rHkYfrEdy7VrMVntHJXVN4ooHnTbz4fcFIZ2v4vYXkA21m2efIThqR+vsuXvgADe/aFt/dcef1NCulzwxx0/COQTlMckRrkV4Rxv9Ax8nkPNBLnluat4TyX4e8vj7S4SbEHElk6jFwXx1/A/VHvi9L6h1L+Nv6i9dT9e1zGLONJfJJbSN9OMbhwGHmhGWC89iSO9uV5dDArxIPG9pKuusNiIEcfZFG6Pw45Dd9lSzkN6VPANOIAF6ePjNj+nTMacg6DFAUiSmZvO4Pzf/XN/qDB7olst4q4ors+S3su1U4Yknho7+hMB2iGLXfnb0wwGL6rWyeV8EA7leTsKeVX2bMDfeGAvDNZk8P6d9Ql2fQTWkz9Vq43dYISxDLvaVmsAh3O9r97Q29vrCh3UO36zF6b19LPCr8iHRA3OdNHzowGE3Du7N6/brnOcmhES7a9gLQQqBlQVkKqBC2AvBS9RmhLAvKsoBoAdic8xrqtqFWgNSLrjBAvALtCa2ReATa+QCGGJrztHOx3mVajC9moXC7dzYjG0vZxx1J1u05BGt6Cu/5kC/2fs/ajZAId8N5U0O6Rz3g8V7dOOfjWKrhvrcgzBN0kuTwfUCN91zMa7QpzvsLjwYOaziFRBVySMLKqwenZG5rDfMUnDFi6KGd3mCiSaS5ONaGPtCjYgD4Fd2jqN/pbVwuxMZwvpR7ByBduES6HGu1MS3BQCo9u8cwFHECVHp7B6NrizgYz7UntEctYHEbFojSeYf8jOQ5GHz7b/PIzqovUcrDqQjG3rPa2yX3ScdtDJkPcRaHd/EwU6jMRpZnmW7BUXeaEf2oQDJ+E2RhPPBF4a5swHnCYcVEY4Q41UVcDJplmSjQSMxLKmhXFFrQSK5n2RjYroxray7fiXT5rhZr4gbmF6A19fMCVmI8FcYKYMGCdSloywW8foRcTUp4frni2jZcr0DbgOsGPF0Yi6J5bcDG+mnylggVpAFiCHWRq2VAgcZIDmW1RuoxT2pAF+/zrRX9lLvV/W74ZAx3h/EG3ZxndV2X6+LEeZz7NS4u0zHy+ZGpIvICUr3DdRs2tstBPJgsqXoFiBjPuRaVLaYDsRsSYLhFY7rzh2As4E56HJ6NRvOJYpPhhDQ7Eeos8wMCk3JIxyL2Fx/8PjIS3svieonymfNlERALP6qDd19O4abn+e43+lg6kgh9HJ67LpCIcMarDyH2vzLeW/vG07FNeZzZ9kOS8hHbM6nmkD/f2d8P0sYAj8qGXX5r240xfpSA55WlcibKwJ8MBnUsgIhHUUb8YBuPyf7cPfcOcET707SYq8nUX/rSLCxyWmsSiaep7FQ+RPZPo/5xlIVx3X/OYP4c8FpCf+ME+YMb0CO8kpkrA3q8ujf2fPKo6KEWTcONv2+VNXxomTN8ww7EDh5pz1va/oa8BCB7X02LTQzlPXjLe/Cot3bbm+rfrYj2cKrkfUEGHYsXrSAgZAuYHiDSPeYmBpaFCjbM4jIOFUzqvlNRO9+XPHkRF099QfhAYQ+msXSTtMydx3xNFSttOMlgRo2vL0LkutxRG3Rs82JsysNn3PBoAZU0VPWs7PjIxqKn3Rnsw+/ZuE4X3BNU3n2KvcfYhoX3VHYkGo/seUtpp+3Lc+TOTojke7DAuF0A0A3k79n5r5lXedH4Tng8Slcx0kzsmji/PJQmOulTSIvwHnj4rMAEqTfkvbeGrnfdqubKz9PnHP7/kjBwLd3QiR6wpud1hy0O/4cBswKYwn3nQN9wDmlIeGI0VFtZFg6VY6WOoH1E3moZInMv6XfYzIoRFiaHpUYpFwjRve77YYnmZa1gkltDLd5o0RClNZRS0c/Mud6hb2cSR7orbCxbm1XmEzOKbgw3ZvHpyl5YCJ9D783kCqMfSuv12YYvsRo0GGIU9bHq/d4NsGfAA1dzT2UAg2e9HaUfjOe87yzH13QRoFtI7TnkznpIyP2id81yYX8PAngpQGHwQmpAL2IgXxd9V+R5WcSIvl6writAEgabGgNVQvoTGriwklxB4RXgi9wsVFnvR2dwlXC4vNM7OnNk5tvnr0I4V/bDA/cJtJ3aDOAw9CB3MswHhxB+uhHDaca+x1nWM47nU3n6fFeZGtndSDlriz6YaNC777saQmH3atg8advtXGObd++4YTA0Tko8kxm/Dr9sriF5CMvGaQ/hfgvPWS/Gz6hYZTigy0FHVzzMy9c2dgPOFAbK2vO+14ut6CeeE2R96BaBHE2nN6GbkMjdSTYXgzbCKcGsqHtxOj2YDdAvyrQ+TQqMOCk0fUF+gMaqGWU86Ub/UBwnfAbSS4olUY8MYv+VggKNOFKK4qP1EKPp9WjEDCp6MKrI5RugKxZsKCwe04XF46tQwbIQClYwreD1A3D5BdvGuDJALwyuL7hWwnMlbMS4glGogYixtYaNKzawLIFELOFpAagR1oXQUPQOdup8nxcwMRqqBf/AVoENhK0VNF7kYEADmJdg6GbvM2pQma/6jxra5TDc4mde7ejWbk2u5dkhLI+UksZ8CBTTgv6gy2a2KJeNYbHnqUmEF3ADahU5OhweDHnAu7aZyJ+SuaVF/JwlPMjM4bvpalbEHfxgNJ6f4HAvTpN0pzraLRwf4VfvyYofLfTd6g76CgN74/l71zfCoyz5FL4Qjl8PDmdteG8Q9cyfcAtEV2ZMZbrCrPdvjchPeAW4DCIXmVnXtf0VX9c3MaC31jrpN9tZCQdQb1Z8ewX/w8I3JOQfyIB+A2Y0FteKmaO4ls7HA/TqgYvap/zmiEQIVeWK7LDEHHdCfHPvbDFlKzKvd7Y4GrZAXtOwc/B6XznZ7x0H13q/P6byWozeZTS+aeU48EL35XYYMvNC7wu8omn+s37Cttsw7lVUcxEanp/M4R3E1Rqpx1xH0W3zayq3hrwvJDHgIh0WYNyEvLHi4aN3Wl4+Yczhb/4gpTdeMGOKqa5XwQ2+6XxXPATIAuIy+go/7T2y/8+9b70szeChWRNQ/pKZvS22VOthM6DHsrTs4W72tMlz751NO1mD0+F6NczqOU2UEZqluwNJhsQsNLje2TBdDLxcX/qzSyjnc6Bb4x+BhezQG9Zmj3buPbSfZbkR7a0ldLBCOw3dwu/kfbY4xDngBqywYXZ4slZ/l5R/rCzgfge6R2keOd17WMfr8sZAEv+4/MWfC9URfsdnfza/J9d0sLT1zwCKRsWwEJt9x1eTMOKTy/oEAGj54BcBz9tLoPW+MLOqyEJAe9lqTDGaGkgirOoGHkkBLwvpLhu8hnvPGnidf008MD6nYNIh9W4kucUalLbi3WM8PRs22FOZGXyBKn1hj3qPq7Zsd7oDiAcMDKJJ2bxfC5mmTYes2sXRzogO2cTXTeJiukCTEOe2ccwwb+3jyTPo6Cz+vqbemxeYe4NZS0y3N8QJEu7c+wWh31XSatkMuXfcQtELTZkcDh70CAZzNaST/ubJwQfpFO3cYUc+pSOWCPTEro9JOF4GUwEWAq3ynkoRQ8pK4GUFFQJo0emwgGgFlRUoK6gsumffOq270ccOkCwoKHJPLYungJCX3SVt9GkTrQlOwfONivbBwC/TPYZBflDQiUfukgXdCG3GC3NSF09x7inu7vUX3ewx0Sv30Kk1yjLaJ9ciizAAPXjR0WyQ4W6ZBCZNmeGQpS4DWC6iXW5XnqrNvYb5m/ysdwXvZdj0YG8AMt6ROjYM7a8Ut87OMCbsaULLdJ5pekZLvwE53WGKNmEy2Bg5IXzuDWnCcHe8rLlZ1kDmcLNQ4N2IPjZRI2BQL5pzM8fumA8h5Ze877JYThQ1Op+HLjkY2uHwmFc10Y8cJ/b0fkVCSCM3S9EYHcYKG8pXesv9cjhZJi84Pu0yEx/16ec41uG9N1EKiMbxbCwnKtrG3CGpz1rQOYY05PpCx6CAsPQ/k/sENJSuA6ksXhqg8V8AqlioYlmBp0K4UMNKBQuApajnOV3Q6Am8PIHpAhCDW0MDobUiBvRG4MqoJEZ5oorKDZVFm7PDBUUjpSxbQS0L2spgFJEVpAfAWgOooKGooZyxNWDjIne3c0FtBY3lGhEyMcvsbbRz5zB6ZJLDX6b3OAkF4/XUiC4/hLRC1BqlQzI5SGqKjyqAH35nPZwGUGO71QVc9U50nYse+cQM9/kQl6br6knZzZfOR3ObjD8frct5+nVX5/D8hiTKvOJIHNx6frTuSo/35xPv0ANi5jvSHh/MmyBzBmd9Z7TJUc5GXeImc0s40MHzGwjceEbo6uotSJLypNzMwHPaW9rPt4SzzrhHawvp3MoYJ8+dnf2Dwb1+nXvqmNAs5RRJ77x3bv1JYHcX+l2Dkfr9aA8w6MSMhq1W8NY0TJYk90Nwut8w1SW1BDZ98s88dt+IRfx5DOhTiAt831mQz/zc4D0YjSt8kejjRA0KQ9jQ2VXr74/QmeA6VHm4GtzX9V3DsZryE94BojfYl4I8FYjlwq9S+iINuom9maSxxGk1VQpktQYcEnE8KXYCd8lNn7JJ+XPhO6xK9/geQT5Z+OhC7M3wFgbw+OLFQ90MB3nyLtdk0f9q/PJ42IaLvoubb0y66xtDzvftnF7MhE/fgm+q+9xaNMYNhumOQnf2sR2cGcw2K++GBztoJw744PkkzbAbfA+it3C7p+FvJYCkXO+KUvp9sIr/85duWG5hrtj99NfWnD1d9MsW5mUNm1+hoIAWj4b6HdD068NwyMRn899+z8eEh/Qdfo2bxWFt+nf7sivqzjE/JEFbgO03sLqXuH76gi3ypkQPlg5FRVnUOcVLysIHk+8gjeNDMG8qeL5u9De+WbxqXxNmPG7AYZLDF318iWSTGqggvb/dUjA0XLUtWlXnYBpNVbshoYMNtbg54aKrx0clBgqzhHBje8boHmC5qP2CPEogH2Znd1ZeN/kP92IbnUajiI77eC+3v5R+CN5ibN5iYJjHOblRXdN5GN7cb9TPpOXWRjoqLAaGQkCRe2wZpB7nGpJ9DRy7EFqxjQcCtwJsBOaCxmJY4Up6LbzcJdsqULcCvgJgMZIABQs01K65BFa5W7YAqB62k3yYe7QB0yPEYGMeecY/PBxf7I7dk0xUr5CD9yQLQzV4AQ50myHjwj53/D17bLW+5FV5cNiyyTsrNdt5pm2ZvL+l4dwutb8f52HMd1tfOB9b9ThnyPw5CF3QPc1z33Pw5I5jM+vpY8wo8/Vdu/Qwv8mQwzJj8Wk+m4HEB7T3ao8zNpFtER5RzyKqs3dab39mc3if7l7wFqUoWn3jNCYm7NYzNgyD3S81OuJ3zzDfGq6j9x+S3jAY1PPBoEmxE89zez4F4xMp0oL0SRnIW7i8HHZm5dVs0cNKgXBqiW5D1LCUhqVUrLShrAXLxyc8FcYHanhaCOtSsCxyuApYsTVCbYzrdcNWgWtlbC9AYz1guBBaYVQwih4gq2hByvcDcnKkrPoNJ+JxTn2uFwKogWkBg1EBVF6wQeRWwyph4HWWyCG8oE+AEx3bV9MS1A2BUvjp3O/cP4zvdi6ulK1rQTYrfk+oGa0cAhrE4K4yhfyAnaXh8Df57VJTi81hdGZzZ/j9igl8CFHjipWZLmD9n357mlu88tbLtyyEvhN4z+H4SnC0rZFE2P77Q/AH7Jj3gnutxT/hEEQHfHMh+CF4zLcGsihw8tNndtSbWcO3b1XDtzMQ7kKnzFNmuizZdUB/0jGb6b5fEf58BvSBkml8nndyph5S70GonCSvKlaufBKyssSunMbFzB6rw40Bn3wpo22E5fTfMexOB8nTL1+xj81rM//R4RVt2G2apmez7wSAXgD6IN6nRPgfz/8EGPh/Pv434MMH/P50xa9tw0oFLy+fgRex4vHLs9+FebhX9MgQ1pQ4csxxF0Q/GFh5b99vDXjmxEvywi/fFbrfdJrf4xQ3xY92fXiXfEyXF4VzPvMq4FD3rt6xzp1DT1g885A27hDEzfmpljHUMX5PPITtU8ssSrDmPekbEeb3p2UxJn37ABwN2z2QrTdh02F8zub61XerTyvNzym08Qvzsxj+/UOMJZ5p0zYfEz67vQreP6fMJF43eLbpzLc8E6YbL/Y8M8Y2vr6rzEnxB9N6XozQ/NPH47jDv9YeGaAfsI1zMX5Pn/n7/AF2fXFoZL+DBm8az89hDDDRzLHG4Vctp4QI5DL9eNAXjI/9dbVDCQUvybtwy1EaSOrs9B75XNJVnfZCeydWXZkpBLk7Onoj6n/m4W06qP4m9I1rDh0jr0tfwKXFnbRBy0jRQQZ1ezZM2RjvZYa7hDnM63jim3Gw62V4B1ljHu2D94PJHUnUJsUNPe58hb1qK9OixpNvCnddgbiJEV3XBHYvOgWdnHcdxDZVRxzCE68PurGueKjfl0cpYG2/N1/zGYtXzqZ1srexG/ntU7yWBW81oh+ubgOtEHQTPqyBIJ6XHluhALwApCHaTTxLmHYJ3ctL0T6XPE1HrjGAbYGE8y1AFeN5W1hpmeWK1kpolcAbgViC9jefHxpuvzV1sCcxCljzwkD11trINFhUAX93KJ8xLP0IRk2ThEMdUS7y/vUJ7FRBM55HnWaH7ojTgKOPe/89mGu0jngLSK7KXwT+kP2noxYXsxwE7j5uioPVMHba/aHF+5yePE0lj2lyqHa2uRDyxcgfvTdL36QjUvbV6S7X2g9RRUVg3yt7PKMWDp+j41VbHc+pypH7JR44c3bQy8n5M0nvVb6cYgViRJc8jHlu7O4fN54YaTn9HsrbFTi+y4RwD1l5ILUDyu0Tany2cwLpdbqBdaYXBb7kvTmJDIAPoehnpL5MssTpcsSdoPe2Fru+EMN8N/kTGqU6RMTF2gTEiDlyyx9BDuutIJDIWWKsC+FSCtZlweVS8PThg9x5zlc8rcC6LljKglIueNkILxvjedvwvDVsTQzn2wa0psZvVIj03tBQQVQH2UwgkHpgoymDbzJnG4tcMfJgEuN4A6m3eUNlQmVCwyJh39uC1gqINxS+aqSQeChPo8a4LqGDEcjEIkgQ6f3z/o6V5njXx/MJZHeh6/uFZX2p4pxA3XCuh84ai37B6hHevc/1ezhASLFeP3RjMo6G58fOQDcm2t3sPfWJA2E8WE4pbeZmJ3V6V+a5Mn28L+cQx9eD856ZwL2rgICT/o09Et8n3vNola8+KHGWL0a9MHztCpqQNRVBh0Nxa/B/ADjcqwQOhZ8nzR36A/XLV4CfvfWNIO17iBymkRFQf2/Aev+5HKhDT+uHxya6XOZzf1bj+XcAfz4D+h8Z4iRUoP2jHxr+TG39fuALiuVI05m+mWWBuCz+yNSvEhXbqHwdnea/Wfkr8D576F4XPHk/y/xIHxveobybxruzct6CywNVTX+PCzTzpJm2Zliovhekfhw1If0oilM3opuXpy+kLP8bSOpxuHfBPKPBmH+i5B2WkzcMEtSQNFqcPoQMn28gzL4DkxA6QPBoh2GYfjx5zinxgMTB86PKaf/ornw3MtwsK25kK3xNGry1aZEjJ+42QCnhOhunPRBRCF31IGh9ZQFQCP/cftdnPewn2T3LEWfF71fHUyUQJywmKN0ekgPZMGRMGxPePychzW0bN3YrQ43G8tA3ybMRXD3Sre4Y0r3no77WC9iTj03QUEkr383rGdoJJ4M8b28YNOZrS9uo0015D8fNQ4ph04xIztKpbIoRx4dWho3AKYSOko1kGb3FNo/DXZp+GJ09Q2zgvgcTKzIW3LWF3irW9vOQUSpjbx91Y7omaUW8zpt6HsbwqwA8TH2sRQwD2oSAY2fbhE5fE3MRkRjPF0JZZMxAAK0FtGjI9qWgNcGnoUmY26aHF1iiHqBCvNjF9V+uWlAVkyujVQJaUeleUIhkX4OvgktT46beK1uU9rsYHcPcC4g/Yh8t8YjMZz28vbHvjCedyqkZBALoROlvOf1lMDxi2NuhKK9mwqt2zDDkn82NO6ZK/J6l8iyNvbtchHe9XNthNXZGojf1kdu45ynPR6u//RV5VPrXTkKd5/Y5FVf9+tRVuMgnZlIn92Ruw6xnoYHwCHOBziZUMIOp0Xmmg2U592Ydxra3JnewZJRuDfpNolDm1pnWPZnGwhPhcPBez2HcLWz6aRU2NJPHk9pfBfwBp1GEeBJ9RNBS6n4Zfw9IGcPhEKbE19Wahsmv1+jRbRZgWUHLCqIFhQuoVVyWgg+Xhg+Xgg/riqcPC54+fsCCBqqESwFWu/IDBdda8enTht9eGv79qcpzWiD3qJN4k+sfsIFKRaGGZQG4FKwQucdXAuqGlZuKHQZqQ6sNtREKsXiWN3VC0xs0atM70JUMJHS8RgFqgEV8Gf7AACq4SiHcKqruoxA37T4KB9TD+Af+HT3Zw632MlIMmFd/10u4G9+LjItrF6bnmMwEJsb9Lo06Z9pfgzN8TgnuVoKzfL2Vb5oU75Efc+792nof4UZfCr7WknQKX6Tx37pHv2d4xWg7D/imlPITfsKbQHdc5jpuBoZENmPIulJlKDP1bdaz6UD7ZdhP+HrwBQzo9zK/9xLpN8qYvT6qOq98zxb7b+LxtvEaF4oU/mKdSbNjjLuCbEXZAo737wd8U5viuix+AjgMvTgpZqzjDO4Z89mmaXiVPeZnY2Uv0qbi2+FtNPtteF1fnLwa3qv/PjHwl0RT+XvcoWYEI7pu2gJ4ooL/bXnC//z3r8Piy1ebZnNvSSEzGt/RFHp9EZY+B/qiL6QrISNDvMwJwIfYBpZ2A3IHPAP4hJ7vCLLwHU6l8RznHW9LD2iW6GSCv5ZsHqQX22Qj52UjCrsNlkfq1zX+cHejbfbt3AqDjxMVoJjhfIGHITYerBsNDPgpetmxD7z9Xhxvwr0DEYkz0Ih9qfq55LQzZFInDp950rDKnsldczvUeT4P74KZPER3Ht1Vn+k4zqfa55N7Zx1tL9JxyMlYxAzjUyWalb0cZD6sctw4P8+Q9YVMn0qzyq9eXioAwv8sn6ZFjOjLi2eaJJxdO2ivjzxH3HDK/XfSafpXns8zigmP+t0RCc+iEiTfrfjfss4xIvIwPGNzHAjAy/WKuRdkuB/V7ge11y0m1Rc7OlY60XdkeMcDKgz17C09n4UWtTDn0XhOktaChu6GnqJBP+AzGYrpZR1xzMOn35k7yPM8BjHMfMQ395Gltn8HMoYYdme7jdbIAbO3trWri2+yMVS2N+gQg4ej0bP8xduLIwshPeEea2MigFs41FDkDl2tszFkf12N2c65KRWOjoN4k6uXXGMUNZ4z612wwWNsxL33LlD8PBSIR7ILJMqSNNAZvC30BNBFjOhUikeF4WUBStHIBgVEISxs6E67T47Jxr50T3aIGJBQsww0OxxHYCog9RKUhOHAQQwja7wh8jsj2z5CfqjE7jh30TPV1+J8ofF1BO1zDnSD2McpnSM2yI8s2zNPDEXk1/AZF3h6aljIF1k3MN7AvcMg8wsaOfT4f8I4zq0s66ywmFg/e5eXWBB6px7Jk7M34S0Dv+5Y4ZQxDrzd+zgRwDgkTejSVdiYtqQcNr8Wfda09Ph+LJ+ch4592Lln9yHfXy2yb6I97+VO0s2GC+OzQOQHlSwB1+0kaeJdk3JHCRQpMfR1nLdGM7HbMpvMv+0ZzR4Q/F72KRgfjhAmTsTpjGA17W4cI07TSbpHZ3e4Is6jpxKVx1GXYIbc8cFh4oe2EIOxKf8HCkQnIWKUlVEKUAph0as4PiyMX56Ap7VhXcTQTdzQ2ga0imsDZK3HADF++7zht+cNv32u+O3zBsICrCsuRbzUuVxBtIFQgdZQSsNSgHVZQKt6xDOwYUNjRqkMtIbaGrYNqLWgVjPEE1pr+sf6p4e7pAaPUiPTtYVrNhg9JHqFG9Nbc0M6Wuvy0Meexqs6bA0bCJLB4RaC/pzs0BsYPRSLfEjQpHAQzg0EoQjmUSRFVu3FRZkS5VX8MiO4yfszHsHzV317lifv8/zhNI95eHWG6q1no4o48qJ5tvHXwHpuTteDBGd74bt3k7SJx/GsfyinyXArgb6fypAbDd+lT8XG10q/Q1XEgx43hlTey8w4X16H1DtApt/DdDfG9yz7kdJ4NHbvBrl/R6Vrr3PyO2Pxdnpj7KgFfebEt8qnZ+tXL+/GwdCw7HifDjijp6P6J5VPaXTG+d4B6axex/6Y6VQZXPQEXZhEfo/9Hxe+bLd8Bfko68u+X21Wj3lbv3n49rd0/VuH7QuwxUfgHQzoZ4OXKXL2+yv2QKa/M9RvofVWtIdFo/ULhQlrj8KPafh2CyfTJ9g4UTlngO4q9SQWprhB1prd7QXHx1umWspxOucmtyb70XtVoLMUPM323rT1Vkb1BnzedMzoG3OZWzAh0f6O0Q0h3WeqC5Skne9kzKzw8Cyu2He0qXe35XvsDGY0LK8AACAASURBVCqPBlibM3aXSdyzipuLPqX39e3Q5Nlvw2fWaYGHDAak0F4zlrkcNy8nS2uGlOHC4oP6DoD5jvnpiQFucurOfqcmwTe/40ZM2rSyvim2STRWOupGQYlx9kvobSfxYigFKCsYBdxI+iouClpD0ZC7xCyHCFnT5TbuBnMCQ5vu4bEzpYp7X9xKt6s/zI3hdVDlrZusTcwQDbBO0uuva6j1KaR5nqWnsajLHs0J4rs6BVJI2SkcKQb5M3+flfEozPBuoarD1YZ8PY62fpw/G7oCyfe897ZHM96jU+0RweC+7EXS2C7fyVcdwBc22o7Iw30ej4hc1v7kF8/OapSOPIW9DkPrN/Sw3IDs+QJ6L7i2fwlltDBvzTnLwqU/K2Ffr+PpAtuU9250I5sXkMiUtbkjXzfj345nkhkQAVBRr9yeVj7EEMlE4qlr9ZYxbe/a4moj4uNoxKfwN6bSX6bXBfE78T63+9fdoJ+6YiDBwPtHA3/Hi7V2P6uV5QtFEW15Qih7hDHjrlFIGgapQcpFP3MI+R1H2hpifLT134DecxruXo7h38BuT3Cerx7sxBKlx+YYL4CN1+D+3ESHselF4RI2MXYb0uoSF13kLCwtd9T8PlrHW427iyJlz4hd3LLZt9aCshQNyy7GconCuwAXTURFT+frmHDBxiIvpMuamkvQ62qlixOTzS3wLes3Ozjg/QeAFzReRKbHntf52B+zhA4OYyv/LyAsGMEoJalxOxFO8LVh5mmsd6ub7CX5I2r6xwCvAF/Q2O7hhR44kP6VRzJ+cs173KiJf5kH6fMYYpr7aR6fMy3Lzb7N10uNcRGiGCHP1VPt01lPf7hIHz9fq5f3/HImwzRnJ4wDCZ50g4l8O66lcwUA+KceAhrOvuTcoat7FI+jQP68+4bCUxxzOwq6Ud5kmPxfQUPJOs/0EJPQe9E5krZsyWZcbJXUMWuBjbBjwWwRoIc0s3N4+zaS8peG2TquH0C4dMkQKhKyjmNs2L2k6jod9mTih9wy4vFztv5LGHY5ZU/k+34ZMMoP4SGacEaf7BNV5v0uBc1pJrOc2ftZtoPnsaCBmz6Fkk33IwJ+B3ydqvG/KUTkYGK0pxcUMFYCVs1bCmMB4bIQLivwdLngab3g4+WCpw8r2nbF8/MnfP7td/x2/TcqKlAbiAqK6TpYcG2MrRKqHjwDNYA3bK2hckXhFzyVDQSW8PBEuNCKj8sTni6rUh3jBS94ZsYVG661Yavicf7xyliWFQsaKhGureHaNmxqzK9c4OtOKJ9vIugaWGQjK+XYnh3bVSoVjA3F+ZbNQeU/UX4D0LtJ4HqEGwg1nDqMDi0ijeVjJ1BZOiqP76rH/oydhbT3MOz2Z/fGdtns4sY/OX3eojVO3wPzHQrP2awBuzdRaAyPp2uZBJR40/xKiMxtrN59lYdZM2/D4XR9GwyH5vTLjl/hvrECEmPILxg3WzGt57YecIyG0OP+cK0xMQrJeOwHLykx0kchX4Z8sy/v7ewsW2j69dWwG/ejQq0PeXx0fzPmdd9T1tE0fxNIw1/bhXLguLnW0oFG3hvmA8fnrjtO0ELXFhnYD8n7dsQNmCkXRwysy7H5gdhRdxu3UYcfY72u+5AenNOydvN5UmV+5vKT0YhQdK3l1QUFkWhBoQUM3S+qDXRlVXZ1X8VVnaYq375iFZt/bJgq+HfCV6XXPbyzB/p+4bIj1tkE+SJwB1XNlKOvAQTsQ5dOqh+EwB24MftC91wYBmZjSSn9nuE8w/EQ4fBs2CwIXk43yzmQAt/6xM03Ab6LpP+4EMY8Dj8D//2X/4YXNLxw9deuNhz1iXueT1YSp+kOeJRFAZxxTDZUgnBnyN0mn9GfDUaEhplAjFtSg3cQDw8xnazTZpwTTTRgDDh63bOJ/yAh3p08trWNj0u8r3cmZ2IxMyY2QYK0rGxwMo+2UkBlBdMKoADrhx5bDwzZCdDThkqK1DCGNKRc4Uz5O8DRu/6A6eb7Rnflxv7M9c4WdrG8I+FgZTLcIkTBhEa2gRnqHsioh5MOanyoM9BfHrJbod8PV98ma3nfl3SQ3tvb6W6Yxg9MgXs2FOc43VH2sHB4pJw07+Pub1Emm3ldHpOqDyO9H7KJlDnmsS628twiGRbWU11JadDSUsiT10hE+GWHVtZN98347XBwyAoOn3vo0mV2w+tY2/C/t5/D53haYgwQZO3W0PaDMVjxK+G5lUUWWcH4nj4DwBpxgxEWgvq3D5/vW7UQQ3yo22kt3F0e26ELXnZcg1yinsrrjjIydoR1wyD3rIOKlkf+fYeLHojov1M5UTfBiEfEp4RRB2SBXMw4mVjz+D3w1uA9Ow3QH+U0Bbam84KL3YHKdvFoD6eLbLztfJ3RIFvtLO1gM0Lr/d9NjLHc5FnnG+O8cwNz1HXioV2QGM4Xkgi9i3iYl1W894oa0QsReF2AdQE38TC0UOpslncWsUyBVkgNaQSgqnzu49UPQbia4YeY2fvHTicwr961fSRChxNDreedFsOQnUUuyeoBxy+REG29uKMfdvazaD+WUrAscnCA64K6NWy8N2G6cYQBuzOXnf/yWEeGGR0rMVqo78hnSf/PdkSdlbtDOPIu9Ztm1ivoh/bHaVpwticTO1H6YApT3WrkGH2tjQn/7x306+TpruyQXdg1h1d2eCiWM2yDYlwXEHLXRQYh9NhiyTol9coDlTlWp/F648/dv0b7Uo14zAymhm6oGybBrskWhjxvFJvhsWflsXkZfEhtLII88Oej9CWbqmw19jM15OPKkNOb7Po91KAuuToxU6gj06PTqJ5NojgJvI15tozNAzD2Z+5aPwm2757O4xO5TvlJyMPz4sZ0JhdDwdP1Sqb3jkDPqjTD2ge/AGDRZ+hFi7B54YekGwhycKiUBkLBgooVhLUBa61YF5bruSG3dtS64fr8gk+fP+Ffn/+FjSXiEpHIE4ZGG4PpSRZ9rOid7UI86yIh3yUiC4MqCX5XG2hpN18r2rah1oqtyvwohVCZ0ZqctG/MqFzFO73JFSQeNcYI0/cM9P5wm+es3el0pe5sahT3V3a9nRVRg55hHJklsR36s+euSzjR2PzqtMw6hqZhmCwxOeNj23o9RjtB3ZGxd7QsjdXXD4OM5HVCqQfzZg7xEH+cIJGf3FFnz7ETo67b8ug1eh6142hyH2SYiCOePH497AZgjh6PSafydtdRR88PsB/G4aiFd/CkUEKM+DKei9Cxm7V/wDlLtBEvzkRxE07GdlffjbKnj2ny/V7cMuyj3ewrD9ToB/hncvsdYOi6pBslufm+c+QWnNNqPzRqeoXxQsxVPASxSqO+Y/qB6RC7KcV4+7Cj43WDNRqSB++6XNi/miE6zj1XvWgy55IzhveTJx37fkcR071lee72djekiyOCLCOpN1n3IAqKRmxvcnVYq5KH4brxUO+0Y78etX5ReKep/rXh5x3o3wIOTgo/lv8VBdyb5z0Y6ashKaw3n/+EHxdGYfUM4D8Ql3Bxl+JskXQv7UyE4xEZDml4nJO2OJwderlnHfQQ3FL5DhT9ncZ0D1JfV718O9zAl5JSUwjdiL6AyiJ3rJJ4uolXpnqg28EL3fQh8B0nAR9YAN9KM12AxTmQnq+DS+9x0Rp+7zCdbaTYgsdPDnhHhrKCItkoOMRSXx8xA+aR/lKS0qjj8/IA3Q3578syh1mdX4H+7yo+rRQcpszpvnozO8jZzk6JvkWnn6V9qIsp0F8ug/A3/Rl9QI1Vu423xEN9Rf+XZ//wTLaoInxGhc39qoapZw2RqUn9yzOAvwNAEa+VahuAcU0W7t/1j8l+nRzWScDAPtrF2Ad9tW3f9bduQjPJYtM+/X3IwmHuTjALv4/vYx+X9DEnDSn2MngMCb8PVTf5re01b1j3vve+nZURnu10ZfWsxljM0FY+DwiRYXpAbgKxnmnvxz0gAuwAkxhHmzalgUPAbJP4vWx50n1t+m8PGRwN8lEOxE0Zxl7vIQaodfxKEQ/zhUCX8L2QGM71XvN+1qGo07sYKqDGBZMtBi1t8Pu5kVK6KJKu6B2XhLbTFvc+nmpH48SEGypyugfBx9fkq987nRiGGVLUk39dFqyXBetKWC8F60potaC+LHgpG/ByxWaHH9j6Er7ZY+H6JWawfj6Meeyp3fbfAHzwuU8Rc/ceXi/yvDWhwc/XmlIcgbxdVsm/bUep7ynl/O2vOBJlN3LrfBqMqpSNzFLOtKSZkIj8fyghvgcaEciu5yBINBILx2yeeCRXIpBuRsqVEp1b3NtOH600aHm+cUh6XNSZbhb5dnOKpCEiB/cuQpIGByr28Hu2t2IyFhf98SJzq05kIJusmjQy90/qkIHtvQbipvAgYALd3NLJQvtdnquiNdMIouybyXNmjdag42o6m1yF0Q00/UyW/RNjbN02tG3DFQXPz89YlwWX9YKnpwvqtuH3z5/x6eV3fH55litKaAGR3KPOpPyW5OquUhilrKC1YF0KqCxYqODDU8FlZVyvL6jXKxiM6/WKViue9YxW44pru2LbrmjcxHN8KXKXOZNENmkav6sRaiO0Ju9hB8aibkpRFpgcbl0em1xg7gdSLSKe8fj9aPQPsxZmZXZK90Hu26jz+BQwmZ3KnWHheoTG8YlWddCZsMgF9c/blpy3w0xUHaX5lvA94PCHgjOZ8hPeB9K66yf8hG8Mo9wBnA+cyhLRkaLTuq2n2KN1whaktpmCYW0d6/4Jfwh4BwN6FDJ5iXf2+3uA7w2fE4hKWpxwtvygMMnPPB7IVN1Z20/GaFhE7lZzcCPitMh7NMwTONqz/Ql/XDjSTXfPGdftinW94B/DqTpC3ewe2bNNsEA8RGO82enGQ9rJ2ZSuV7LJI+Chz3Je/TNvv2GuNODfsznSyx1PvgEPx2dJfXcL9qee81w9+r2r7AvDAzxkNybki/LRO1w2Sdx4bgb0sqj3+QIqFwALwNTDH4ZhBmSIGhGKey0F4noTz5opcvGzTd7Z15z3wWqnc5NHFBbZ9FuWBbSI9sjcdHO+grdwT59uxoIAahbij8FPNkc4VayfOfqtv7u5izL/fnN+5MZbmrXX+54RUG7u0h7g6PnyvHyFrN1VwXA3v5sbp8BhdJzZRv5Z/SVkIozWyNmQ2IoFwN9LTKeLk5AnOkgdD58U8gLgI25sn7DxFUHobJr9it5FtkD6e2rQv4Z2yUGxabX62SVh4DU2Fr4nUfp3bbiE19QQ7X76uvhvC0vPIY+MBYOxwO4hH5ABeqfGzh32RqRsTtjnvH4GzZ9hMgjn+m1vF03y9weRJqQx3TN9PKpA3YCVVF8tacdi4pGMnSlydGk5Z2U0iJrdPnJ/19cDNn+JdR4z9JBXhYU+p95wZWlNP/WObm5+AIrUaG5e59Hw2r3HeCfuev8TuBR15BMDXVkKaAFotUgvakQno5Pi/d2amP65iuc5WJ3qY/exeTf3Ayp2eEI6SWliEJOZjuwwHIX53GnVH+1Oylg9Y4lHzgr3yC6jKy7mcWedG+V6A6g5zZdSxJC+LFiXgkYErpC7d4t4avImed17mgOi3Nvb0YwtP9MNz9vU/I7tHp8hTs19NwViCoMm6LLeaW/pgo5xwBviHLmN8tEL1qkV229zqOf5NTyPQyas0zxTzwSryhY2b3HL3+vlSb0dZuNjdJxDhbeeUss3jxnWqBXOs8MhSXNm3YWkd13uAK2BhEIfoU/TaCC2/tuRYmzmrvA5CowmIZSH0C29kIKIntJfMMwLGT4pj7iGnDR8+FPrTys5T6Okx7iR+EDlAwLryf3gaOoP745cmBWQ5HTqO07JpzAj4Wm/j7J0V4yTsuJdRRaz6drEwEflGwTwc+AHXMXQzBuYO99uTCKvUKU7SsFlWfF0WVEr4/nlGc/XZ2xVr3woDI2JDoksph7n1NCWhnVlsV2zREUpxQ5okbOgVjfUTa5AADMaGpgZWxPjuUVaKQDaIocvK5MENYMENqssRnRmljawsWkaOoyo6fnlBorh11vVPF2Gc7j/3MdoOq6JMF02hD+fIMY3ePdqLE51hHBFSvctyMpNz9eNGEYcyfN8Nkny5DiS0zMYCH6Wb1JPTmN8/uj3dwiHEVgOM6T0B+wl/x4O0dyq8q3v7053xGzl3bjNPQiuSR1J/vSFzB2I3oIHx+jNxSb6v6sJWW98AIYJM2jQDxb0E37C62E80B5lICZ8b0+bvm9i8jCWYfsSqqP5ngPDDy1bhJbd/Jsa9GfwPUuaHxO+ggf6GVP8ySBfB4weAt4UU+rdHCf3sDl5Y6Pj9j7IscKRhzmmzxrlHxb+6Ph/x3BEPwBe6oZf1v1FyGuZWNei0jcsioZdhtcjA5wo3RNEBvr/TmHa3DPt+d5+/IYwoC/4yv8WmpL6X1kk/ilIdtHWBVRWYLlo6PhVw+gtAJv3aS+fGUCxMxWzDWf7fvb7BBboplLcqZhtbMx2MbwTxp+zdIQb0bcCzgQspWC5FFyeVizLAl7koELdXrBdN1Rc0a5A95jrqAxGuuAZeQ7UDep2DV3ecYybgbt5ergjclLntCPwLvR/WMTRAJX++nSh+SjP0b6PbBLQcbNnE9/aM7n+1u6Jm8GTl3/TcbaQbD3MmW3w74Lm3VWtBWg9TT0Yz8OjPZr9fQyRzxjC+r4OKAxbMDz6nNKNZ4pedsLv2HRB53/6p6HXm28MU8/rJw/MzBD5V5i7DIwe8ZbPfvYxNbx9rDPNTFgCIRqzjzvdjU2xjJnhawbkt4fPAxs4RN7bqyoYjTFD8lhOZNfZqJ7QjBLFPbVoj40Y6IQntmAglU32Kt57w/VRVkEfUzOgE7MbA6gxqDY1ImioZuMPEe/Y18Sy7igF5YnVy7yoAX1Ro3lx+mNIuHU7vGNe2K0AXFmcolvvqmIHLnST0g0H2gZWed6YpqQiYxwnqZTF9nanP8qsH8oaRP0oi24tpwLqobxUODfvx16P8neVqyxRgNEqUIuoM61Jn0mS7KGoeUObAaBQUYOpUXHr7Roae9ainK6HGmfvw57qeBbe6rnYv/uePjcM5Jrvkw1uKPbPMC4ww/lZfr5x9q7nj8bzzmVNrttdwRB+Pug/+8kYq5TQ8Mad9gy2wuaE0QmC7MCuq45b3HWQu8aYIAbQ8M7w6IcFEHDgCQHdmHFsdGFhptvgzQwO3WfoWzXht4CtR6+h7tRSnzvX4AW8HxMgTEuTJbsEOi4cI11FuWrN1wLiQWG7wzv2zVmAiThBrfFRZpzyrFTQrbVyHj8OHe75yecaM2TXctO50RitXtGuBZsOFrP0deOKWhtak8M75oXOzNiuV1xbRYXO4aZzw73PKyxqytIWDfOushENZV2xyXXkuL5s4nl+vWK7bspvJVR7Q0PlJnfaFgI1wgqgtoKtSrR3qrK8u27AdlVDepMoK62ReKuHKesqkx2isu/xr3bjOdhoL4yrOwB0uR9l+ZQ7Jlnv130Auj5GTiCpmuLJQBDsu6l6yJF59jC+5/nnWZ5pOQGRe/K9V5ofAWY60Vmae8p5Lzgtk05+SeazM2FnZb0PfCMCes28eXXCO+TET/gJXxzupMGDk9Gc00TdKQiXfs2J6Somo3mQv27Q51g6n06jn/B14SuFcN8v6v48msUMePgYVpq5q3hMMiwifSNNTuT3Vd/Z5uDBO6K+SBruA3wLzFaFM21khtOs7u+Bdl7Lpd4D5289Z96JQ//OwF+OysoED/wv3vC/rv8CGPi/nv6KItvoKGW6TT0WE78PAi1U4xuUeQOE9L5r6B3oLAY8Qv+MazUTgmDZiXqZLOiGTSMa5vEe8dkczHNA05ySxqMrl1mdM0aUcXovOMN3Tx/zNMooh+Q9BKV7u5YFWBb1Pi/AUkBrAZYn8UCnBXJZKyDh25uktXvu9L45jrtvr11QcPpi0pmV7tD6fp2v6uJOWOqbp8kBk2EobWMy8OfBIM37tKEcKgXLsmBdV1wuF2AVr5FtKSC8AI3Rqm6YsM47RvAsTjtyH7X+eNd5DLe7xDy5zfY977bEz9mu4a2dxKgsq7zl8TnR3QM+Fj377g9O5tld0+2eeaLpkiFgV/etU/Tz9cRtOFsIGF/0rpAK/g4MxnFapBAq3au2LBeACGsIX7BMjAlWvQX/3VDxQZ995g0AsKmhiVnPsIB6qGj3Tpvxx1mjMNkomKRnwr/B+I+TooTSqXfNsKmuf9kD2yJuFJKDQR7CvfS5b57qBPjd6H61RZHnXMQredgDTfQzuPr3oLnSdV1XdS9SCvegD20ax43M+M+8OyRBxtNDF8hf97uUqRv10Yw/Ob797KmNnaXlrmobiTJQuBvPfQHN3RxlG8691p7mCKiN13QzM6hIiaR6i3Sp3jZeOcxHBriBucimfttQbKzdUdtkoRnL9Ts3MZrrhjxVDIe4uNndqtz1J6M3cd7zQxhlLaAn+SwkV6Kg6L2ySw8nLxyaxLZrfV6A1ioaMbglAqEQcH4gHNn0bGp7ZpM9iSacgFtAQDs6nffS/rHumYzX4KEUZkXUD8P/TuthuHalMkAkhhs79EIcaFnHlUjUklolPDUzo14XNRQxrpsYkoZDPIaK/0kfkQ4g6wXRY0hBrSj2VXwX2uct8n7sjCiKi6MgJ33WM+JgWB9u13ALeA/vgTHE1DHULRieTmB462Lf6En40K9T+R0Q9nyE/eabMZnwPNDyeOiAQhZ5xwOhBuUq8bb+0+jYjNV9DWUyxfWBAVWTKTamudGdpw9EDdqrD04/vH88tL0XO6QiJJ1E73wGQ5TErDNxT8/Ch6VsAtC6Y8GUFjoNj7Rsz57g3uhxKD099zOiA/+Kjc2NzDTSy73phGSdlt7T0JmhTRHxUEbsYooHG6aMaoYDgJlePBSELjwBb5xyyH7YgyHG4KgPXAC+MpgrWgWuV0JrcqjLPLmYGbVWNBYhWsuCetGrdLaq+lxRoR11kBjqnMUAzlVkadvA2wpeRY5RAbZtQ71e0bYNrYoBXQzXAKOhogm7WAilLQA3bGh4eWIsVIFFIqy81IbrJrytbgtaJXArst6o2k+uvzB66HYx2JNtxPtmvPxxC0bAZnNhRtfhN8d6Is2oB7nxkTCvZAgDx4r5Y3mRDByHiEykR/19RPfRaO7fcxpMgI9/DrxpKuzmZabqD+Uas38fKX7KFm/XGx/u3u957CmcycPZwYQYszhA1wbYsxLmfXIzbPEhrzsZQ3uQ+c1J/uky3vcu7EHSL85PxIWqjhqR9aYH4R7Dc9bhdu93X+6sy/qF9oR7MG0OBcis7G8K37r+n/BN4C46PJnzWY7YvPBprnOmiW4gxvO2X4POqv5Jkt8dfMU70LNi9CeHWXc82kVJLvLuRS/s9IqwUAYGQzzeYdL+/+y96ZIjua4m+IEuRWbWcu61sWnrtnn/h+sZm6Vv1alcQnJifmAhCCddLkXkVhVMi5TkzgUkQQAECHBH0vRGj5R9NYBekF6Kvy+BfSqRfKP0DdbuBke/AHgvm76lKXoqGKfNJmtQGYdF4YxsoMSadu3WToZGGlJJ5RbeH0k5/71r5VbbMw6d6ceMeOwRlR+B20f4qCnO9V5VLOquVfQ7FaAU8HLSkOT6zIR+cQ0AritcCtJ7SIGmuBnvghn9Gk7ructOzcGl23AQcNbvz66VnfT9xnodbvwIhXSLGJUeIYpJ9EQxYxaVgrIQ6CziBDNQl4q1rChllXtKvVxxBQvp+uF8c/B0Uzp57koloBvIKLQOJdPpzlw/be5nWsMHZZqXkNLXIsO79ahZYw3jROryv5z7bECOfepFXgLb7x15jj/IlcFRIfP63Ek83zqsmfZpT4EVng0Nb3MI/s3zUO4AmrxGoWpfowSJGWp0jBrtI/FoEkMstTu5osGdLNx7aQZ0qx9wo7JF9OjDtOq6ycp5iispKF5Fqwg22uATO5rdBkdb3txgj9mM3iMYHacD+UDSyoib4ZxiIxOEEZtzokGdspnb4wgzczuDqqJHdVk9K68EKVg9vyQyLaMWM2CLN5yTRrJZEaM52aZeIZDw6Q0uiTWint4+1oJywleh3uZyz/nydEI52d1vLcC9RYMXfb/cUOw421pPetDinqMyHIlH6m/WOje4ZjgdB5jTgLPcUQs1JHsVMyKQQYiJ0+PETnosNzy1PkuY9kInLBb+Xtc4M6PWoiF6K9YrY12voGcAdHU8qmvFWldfC9AjqD66jCDGGr0w03ambYTtPUh7g2G96fvK6XseMPY3e3zXZj+EGU/tzOBq/d/mrBv5TfHAsivN/SP97tsZgMsIczDrD3wyWrXyLjbTpivgMYzW6doxGukHlrZ9tfXhoZgBuNFyQ3atntAXTu86ZA+YHevqEa4bhf6MRxsHqAjZwcMr+kQAVsiB1yt69VYg1u1XO1fDDHJvXm0v1rsrzzwBWYZlwOPZcPsb42VfuZDz0Xyxd2EwTP3DK/SQN+0JLoFm9XzaeYbO42ylD2lAQgXv06Dz1K21gC/cIhD449rjADMDq4QnX3FFXVc3Flt3qvNTkjvI9UD8WleRN1ROIm6eYTVyHWZgXVHrqsb6C9ZCuBThYUwAr6seFK7Ko1nnyKKVWH8gHu+ouJYVX55X3T8xVhAulfF8YVxXwloLuC6wK0t8TGsFFwvbvuqC0X0oJFIMqoStd95u/M2vXglD3hnJ4TwjiyVeKEZQiH0b4aD+pgxLI92hkVbYokTYvN00Embj+QCGLtHOu1tpxpJG+SZpjwfOeeJjbd1f2ayOSSWvUffXSnfA1pGmH7lPL02bA3z+oj0/2v+85h8atwf3Xt8k/Z0R4S3dTLMDWbPsnfw72gMoP6sVlQi0AsxV9GwhOlFs2hllctp5Sz9GeiUD+khCOfLse6YfAJbZEN1aI1GgjsJ+V9GgnkGWjTCZp+khiW6SoreK1zlqbJJ80/0diMhrocvDoP8A+PraaU+Wi+kqp7QBrGK9ngAAIABJREFU2cpfUdXPgPGv8xP+eP7SNmXZoTRrGyrQMyV9tsTdHYSpMVrIaE64Z5vSiM99w8B7Fm/7+PrXUP+nCbMdjUF+yHlh7u0KwwazU3bFchMp2F9H4jBr6yXEIsLzCrhuR54dMQjNyFLUAzMYmNyQrh7pi4ZuN2ViWYBVw7db/bUCWIEnUY2AGfiStDxd/+LuO8Bnn53RPKbBlvsJwJcZsbZ6o1Jsh866cczaQFOk5HykXvhg1FpxZQJdL/C7c0FY1ytqreL54bAwyBRW8YZgs9g/c5uqeFvDJXxfd/Big5IRn+O41+3wcv4ywu+ZuqMpj2hIByYwbgCYvTzKMMLY3CwyGMeNBiyunxeCNiubwPidQpU+JJTwU77Eof7X8iHkMTU4SdAQTZ8VkVhDcdagqWdDPOYUWp3S9A82VJt+BHrf8SJDbst/bPD+rZ8bQ7rLb5G2tTFoxnBrN9I6PSik+aiE/LEuIjAVrSI8534oqDMeWJQPAzFOahyssIa8fntKGlEJAS50v70m1nUXI5Onvrfw/g3iMIBdm0wlvFHcYKur0RHa+YvTE0T07s+kdpcjEAu0VPMjq5C5OTQGNHU4jX4T2ia9EPxwDJOETbdudbRfWw7GfAarF1xAXyI3nnMhPUUgEVxKIbn9xMK0L+T4JofN5J5z0emzGtDNry0cwLC7roNVhKggHqoxo7ZUT2CW4wyclYWOZ02W0SYCQqXZtHXPoZKhMpmaPLjhm4PsoxSWh181o49LAcpCWKiglAUEQtV76dd1RV3VA7OyskmZO0IVI1K1YU1YGti9o0A8EWGpW7YB0M0Y27iZUafRBumTx80QsSpUKzXFNdZg8IMggF9dYCPETG0eAyz9sBN+eWqCxcfn526U2wGgaJAPnTcawBCP8/D7Jp8M/L1HHe7nw/fFDddtHTga2vLOTQSaZ9d5UCsOGB1PUMlBKcDuZi8ahcDpCmFguO77bhSW4zg68qa+AXK4eGAY45QtvvUbZGI4zMhOYPdXA06oYAddl4bcTuL0ABALzMSMEjxtm8d2g0W6a7jX2nX5wezvdhiJFd84CLENvdHWSV/jtm9xINKn5ycfBoRhIMfNVED307gq/8x7FsM1UKvDspjWsIR6v/jAjpOR3QFtlOsKCnqjecIP93Tm8KHzWcXPW+76ELrHLifI3LTiLaqGvCkg3eORkitilqiO4NAOgy+MtayoRQ4aG75zZT/5EYNrGWuPrQFioL9eGF++iGc7FcGhS2VcVuB6LVivpIejFu27HKRCMUO93oEO8z6HeqBL5BiRLeyedIU/AxYJSRxPfxD+uEWcsUgogBy28wgv3eTWrngfPSHOa/jCULjj3Ju8gtvJ29vLPKsrDkTC5aP8e1RV33JXFYVs8fnmd+7PkQMFR9Ndef2/8Lt/ZHkym3uo/aP9Tjh0V+I0vU5fJowoz+CAnj2WIjYcSEfHLSNWn3HQ/p3p3vGetvdwRW/pLb1+mhnPRzxsliLBD7SSq/A0YevtihWRQ2ftzRrQlw/Tnbf0kvQNPdAtvRHKmylLUEfy+/ewmNLdVXey6G+YjnT4UWn2Lf2QaRbGfYMKPbYSgL94xTtawABOywniqT5KI0wPq6Bgqzh4SRopPToFxmu0dbSe3V1LqOceajBr+7X69rUToTMEueF8AcpJPecKaAl3olv4vFrlZH8NYXd4Bd4xxHi+qvEcOqSJ6Loiwh7qi3d5W30D/jhf7zA2or/rGr4jBa+Lrkpq3qrQO+24Yl0vqJ8vqM8Fl1MB/XIClSLhYnlFvar3Ocy7Q1Wtpmh8j6ag8jDAD4Cdky9x7YQbNW6tiVgBYeNV1OWj9LlT96E+HRTI78ozKXDvGD+RH2SgNXh9KQ3u0h7J3ctLaLSYCKWIHPNh+cWVwxf1gn9qdxvg9Ej4/Akwf/Q/Zz9uPp5uul47RToGJN2OvjOaZ2HbI966kVyV6JYPoRwhGNolIsdIEU4dANTmMxlQGn2J9DGvJftZtq86AyB3pJS6ukooaG23/7uKWdc6IZzRjOHm4SQKEPvPjDrspda7AY0NoEVnsNq/8hfT/bQb32SMuRpthRwQ8C2BhIaV0OA2DKxDqsak6I12RWNh1P5AJA6fC7mxvCyEshTxQFcj+qpHAdwjDwAzY1UvePP2djJA5F7mkmFJNEIf1yqKB0fnNjMCfgVYD4toKF3pSBtZIpIDACAxwriRISIfhzkMkSkiX3HcPEoY9l5bndInOfOiV6aURdqqQK1ifLriCqBgXcULUa6ZqAEcGxfDWj0IF/upk8rg7Aqcko1LxM64dvf7GXM3/dBMU3SEeEon99kaD37x9P0oOX84LO7u4UGoQPHd3/kBgV4eMlRrWxYO5aUOC8FvI9LHULH6Go76/9pm4QUllBIHWFbUaLKcFbNAW6TGz2u20o+8qP0wEmGr7DcYjdBwv0VzGqBG8mEI4VygP8jhcHDCOuYNXuostKZD/TpifZtGL5OCNU9Za4DS766hDDEw6u4mE5w17uXzwwAjfA5TBIaxx9urZJKpu+0mwupoEAGXStjml6iFMAegpK5vyEMtV6+TCqHo4UCv3Q1ksjoKRaU1A1c1ngeZwsUdlsvKeQVWggDBJfGAOBCD78pWV6z48nyVa0bKigrCyoRLXXBdWe49tzNIXocq24t6unP1/hLMK914tuXhIK9RMAxy8Ehv17d08xD4vyxJPfykMgY5n2zzENWP/aFchlF5Z8FxULxNK0eh/QnBzTLKYN09nB6tJpXbQn2Yedys+7ukEXsezeXNcfgK6c7x8WNfN0WOF0L/PeetW5Cj9y9toMnjD9XVyT7fBEve0lt6WdrjR5YILcqZ00QOd1YFnldVPh1tR6IyIKe35fLd01cyoL9ASPgHpc0ImXA/Ook+FNJzWdpufDaMbcxQZasdGdlk/iJs8fdd3DP1Y3N69Rbu/AiS5L1pI2m+pb05t1f0DOAdsDzBdpPvQVC1adMH2WZwdJq+27SnNpdEq8zzPK6lDi6Wzbx5pluY0yyofrLnqX13KcuVj3Bj9EzLdWtnlnfvub07WH6YLWtDjra7l3K5l/ARGyuCG2fZQrWTfJrHeVkAWtyIrpp/mDec3CEr99cBEKOin5SPNNF+JzrZwaTv3mGbbnY3Kh0DkX+X8tzyht6rf/LMDFS8QC+OZvCVcV0YVCtoqeLVuDL4ubbTlQA6Yxo6VUpqlxPsmZlh8M5+Bpdfcb3YVj926RzDgTzOt/JMqnppuqUJ7T7zu8n63ihM9X0J/TmVcdas871X3Bsoa3+PtHyTZrTlERozqSvd5Tj0NueUN26EIs958bxHGiL1bz3R5b17WlF71nlgZ8O4fY/vrEkP1W55gRj+3dryd7BhIq9CHoa2Qt4Gd5KFIhw2AiSVk9bTWLLlbUjXs/zYBztYEN3yQrs+1wp/EKFlS0sdC2e0e87zuQ0PRTtEL+1vVPjaa262ygih1e89jUpqsDvouaNeJpEMxBumpXQVzT9paNtid77aODZA2j6fHfTWvtTBBDGcL2I4p4VAJ0JZCFADOop4you3vFF9RvUQ8whzr4ZsnT7LTdYYt6lnQE/ys8836UEvcr7NYBXUDOMqqrJps04QQEV1HcrrK3wPZtPXrixA96l+rGnSI794TA5qftpqzmQCyVkA1MriAcmAhdWnKg9IvfhJ5dEClvvjbQGF9drWT9GVsoKogN2rdpRi3yj9HnXXPJqv4VVYmx0k8Ten3zYf3Ehz54luCyEmRquJ8deX5xmQ07YA4A+X5QzQwe+ReBAfdGJCXqzk33ss63uyEYU2hvZ2UNGuV5BnaDwhtmkHVrr2yEeAYbSVAKpa3PrOjRV0B6UCrWU0j+jRkBMLYdD6YPzMO80B7gRiNCyaEX3LNkNSb3SvyxSW5h1+AhOHbRyl/FanwsONJzmOsfWD0YVOmvAER50cNY03X/q+++vAsGw+RnxphI+q3KXze8CiFTx/kuJry4aqtG+VgwyUzyGMOtnxoIBv3XAqX1Hm3bFiZ5GNwbWlrRjrhBnCG/ysUGzPkCFGSLBiLWS7NMUAV9gBP18qRT3RyaaXESa7dVnrKtzoh+VydFyh60HvPMeK9SoHoyoRKgquFahcwJUAqPe5h50QGKkyyE60qZe5HOwWDmce6VKkqge6oaatFUaWRbq5tO5ZvvDKRpTAQXhpER3arMs1I9R5lLdZiscAOcJltDwSvZEBYQj7cPHfSCP+pe13NGG/fZo8T8T/Rrvxd34f5ms2b9PEt7MA43G+p/48/KE+iQ60rcPJxdTDfPY8fNkBjfI3H8NudSZ6Ze8jUzmQ7kW9TeqIZ4Jlr93R+zvHc1Z+g5v5+f747ydK45za/k5pfmf9sZQj2Lylv3nqDgACne6jwyVdK35Dlh1i5r4azdpSJqxZZv++6+Wfmr6DB/pb2qYsYJnwRvvZNj+CQKDCHwBVvvFmn59rkL1K2JDmMFpdoZ13uymXGcF/T/mfJfUbrrcE4COAXzDeV2Q58vNn4P0TAOAvrninvGkpSyg4YCpRyOsqvRfvjiRbO65+eoU6Z0zz3vrTZmy428tt3dt2eD7S5hxN3vSj4xcUelYNAd1dwKQh2+kkxnMzoi9L89bkk4IRFApnRbx40MI8Ayxs3VDjN9uIPdDHeIjp3aD80Hh+Zzt7MpkZ4ex9FcWTR6pkah6LKkAyRFYkChV/0rHEItcdjNp9CgqxGM590yeTSvNr7vnU0GNpVmdOI8I0KDPlz7GeA+nwlB3hLXvvH11nL+RnBPyPp8YAzlHVoUvF9UgEkBrDnrFqTsYXDdTuIdmD8bg/vMsDiOXXH5tuBByJnxuaeYMGfzV2b5uzgt4wYrTN6J8eBLLDQEQoGrqdgye3K3wZ8IMuBC8TvdkJFh440vkGV9OT7vhnd7R5Nn6U3gsycNk0GR7Yj+LwGsxwjKldtW3fywCVQCqa52PxcdK/NK8bEGwTrV+jHsqgMMW0+mXDjQSJTYeRMKhmEn8oxBDFb5hfU0jr2pDIKmawZve0o25MtMWE7kys150QeCkopwI6qfH8RHIIbbHw7mLMWzmoy7sDKPolRz4IWmsGAWUB2TiBAV7DXJJ6u5OGjtewvGhtVphXH4NpRbNaSd8LFg/QsDK18PgHxKwRR5jnvIcokCA8M7AWXJmx4IrKdnev3h1/Zax2j1619Sx3pVMhEFeshVt/EusqRFiwAJXAWFHWghUFg/uQtoUP9nzLO40e6x41yaHEzRC8lSVze7z5fytrzb5vk3ma+8GSUO7Q7NkeelfWo/QnLTr+++9hA4FOK41THmC0znzPKdJP64OtYWGqMqu21tbAL5VM2GFEmTVuI+N12Eix3PAT+YmhTFxM8bsZ2N3Vl7bvRmPR6R8Gd537BS6tn/I1vg/X+fBF6AmdVQcSZ0XaolBfxq5Mux3M/GA0pYouRynDBjt20GS3As/HYz7MOlx+UkvrtAj576yRCfCjZbYHKwHMBArTyRrBCheT7xQvDaaq+FfgskmrL3hca2SNduZg0eDtitW2h2F2HLGtiolPDKW3bGHgyelniTjB7a/YehMQnO1wBS6VcS0rChhcFuFRANgPgBWAl9YwAJQVWGI4GOGFqGv4PRhozS7h3SOMmRYbU9FMjO7wnlVLOqatbm7X7hhNZ5M9ZA21YwwJtF7gQGfY5Pi7z2ZtRJ5m3GTYf/uyOaA9SBGkUN10nWbyNK103I/Dv48SiVnzD5c9SKBe0saj6YE2D2BA//KGDHiz/I+Yvgsu7fHxHy29BK5HEeYt/dyJ2h7bBQjD8YQTRlMrox32A3p5am8PkdOPuo7+vumFBvQ9CT1znpz3exOY79n+PqL7iPHg4T3VqhDs96GZUBwvJPKT45yExXmDjR68BvPj0OGZguYHSD8QKH+7NOAtowz/7fQBAPALFfzP5z/x355+k9DScQO26G71as8TPnX6pEijGK6xsXcbr8S+KhDaaf2T/s5GPopfWA4NgIHfSELYf8xKylvjkOrr6o9ZYl7ewj7dGczWnykM9HNKnAIR+aqbjgM7G7K7MYNBxb0xLXw7od0L/BQ80MN4vgPcqPRseBFCvRoc7zT/Z+pg2MJJTfn0ErrysJf5tML2ETUFzOIRoc9FUaUGstM10O8y2eQ35Zt7nndGtIhbmNODof4lKV8sRfvdmvJmkYQ5FCj3j2tQRm/THXLPbvkDMA1lbR6/66pXnCa4hyoAwfVYmdE8r5LdSLYL3mwPMFnnR0WdsTqukSa/Y9rzaZj2KQ4hDfdo03MQuC7dg0+5Z/2guyd6GvNmkwz0xorqZo6Khd8N95QH791mMBJ8kFDOJDy1ay9GK2rQMdpdo60fo77zYI0F2hM2oSKKBoO9G1YpghNgan+i1O5vrZX7Trlvy2TZDK3tfdH5tbXu2RcOXeJtr22JwRXvm17v4rPX43AnWb1Dl+ANqfnaARLS830B4Kr4kKaD2BT/1DpA6Pf5Be55Xk4LcCLwiUALAcWioYshn2uUGeI8lYajUYYhQA6kCX8uatBl9xyvjW1r5ISlQL1uGWb8bUPDAGmZINqRHiohK8IAFRZv726WxjNDh3jFQG67kQhQ489JDgeRePetVz0AEPCOK4nhE+QiL7MYj4qOs9/ny43NagdkjRhLJgaogIt4QQ4h5emPkBbtxYpmPIl9t/npBYYccpysT0qPG61pxZrXcr8YoifokfRH+p1L+21okRgMjDHb6DoxixGKQG8in96DoN0vgTZhKa/LZx25bjSSAoEKtFZGjYBFaFS78qAZJTm0bwcfmBvVBQCi0rFOoz1MMToQmud5N6FI6oTt2LZX1Mp6B+K4h7IeXSc+O2vhSytbnxov4Ngig6DXQLinfOmjryyBI14J4Ke01I12Pw94yDvpAs+uIut7NF1+A5QzjMx8zfiDhTIX2iD9ix7x+WoFjtEGQt9oqAfKVwjEqqjBkJ5zGNfUvI5peOe8W6/fsoNaZP0g93x16sEUDgAHD21oWHSbfDlZBV4BVAajCn/pCBCrXGXcTL1so+etNin3pWspAtaq57SVr1ayQ3sSRYVoAaGgBi81AlCYQcVCaVkYd25XjLFdN8Zm8QeY9L5yQ3eFfTg37Ttxkxvkka6x4HneebVP6vKoGCw0yOuJ8xtZQTbYDrzgR6mdz1YaFZHL8WqEq5EAjfvhJXPxjKObF/3XvHzyup79vpVmnHj35b3621nf03eP+0Lx9c7EvWIaNsHUzeMof0MVDg9oUGJU/10gfvv6fuTGf1gD+lt6SwdTdAzayOUmc6usXeRZ3Jf3NGbGo6j7eEvfP72CB/oNCf4tPZyGG6ZbqRMYbUG375t95qzhG41ujegHCu0CnTfLb7j0j0jmhX4rcdvsWWjVlSuWoafbSMof4VN+Xif5BtXGbDGke3zPwx94GSO8d63s7fbuXbNH2/4xBGKRWcwbp/hdvl0IdypAOUM80cM729y/I+DSh9lxDUh34v5on7Og9B3Sjl6yy+TKTemfbolVd1tUb7X4sxUFnXbelDdAUIgEnCH7RsCXMIYf7D3p/UD6+xTgNQeje/qb+zrVwtxR92679/CxANz7oMH8MqBv92pWjqQRTlBqwvQfUQ8NbIxvr5X+WD820YKius+wJihk4udWv4s/9NdZ0BWXeMfvqAOuPAmpxo1O3vSEuT5CCu4NozdMCRbqc/u95mQGMtKw3b1pKdZiq7Cfdw3NaYaUrtTWT3Uf1lvvqG02ET67fEET5nhhf81kmI3nANzoEW3oGzVyxHNGV3sel/ABCg6NptsWJTRAincR1eqFOzzgzf9I78KPAJtz9CmdsxlTHzMNeSue5ww3YnvValCvNghoxjObGwJAFra9AOqFjkWM6BLLVj3qLPZvFD3UEh9x1A8xcfhDBVFBoYJ1Nau2dLwUwqL3rRc1iLAaG9gOuIE0bHuFGNAZxaMzQNcGgaoq9q8N+/tbHG4TuUNs9Y7EwWVR7txl+a0GEzaE8r925YzjmqIYBwNK3wjQjOhyn3otBaVSO3c2BC7+GMmRUSbiwbMZpk+ac/rDB0r0c/X7+T0A4M/LZwBbQ/nRNOplgPBADQGhHuWZiS7ODgmMYU1POiO8HTbVP4nd3dsQEq+1pdiMcYSCotcIBLmvSsVsvx1+HQgK+TINm9E0e0kczhUEBtgZwbnRLCyhLwwxXusiiadmxKKpP+RKAzH+NTrGsT2kKbXmHP7BjIz6ei/hOFIm4pt92m0GH1p5NsfmJTxrgTo2824yO0UJ4F2QV+lpAjMFvkfA8yp1L9aZwYXrT5DD6VlWU5JCJJZoi7aSz76PPNM5dpDtHnDlH+2eiH7bEmFigLjCoz6YnBXQSFCbPOgLwxy8JfrLyrYEuR30LqQHUYSel9VIvt5prmHlQRouoircFsadq54x42BAl7742bsRzmi+7NUd74i38ze+uKLx/IbHj5/JTmO58erew2cev89rTw4KtEY49GFKfCft7pLqyZIe5XmU5P9w6TWEm2+cjCodBn0fld8SgMa7X1B+mH5CBHtL/5yU5D55pv9RyBNfEvnNoCKrVFSq4Fra4dKbhrm39KOlVw7hfg8C5B3SWxqlqU4sLtbBe39ox18PDXNTOY72e5vctg+Km+GXnCbb3Sy/pb91yqTDfysyVOD/ev4T/8fTv1w58ydf8Z90Bs5PwPOzFNjccRwrDDSHWT1T08JYwjNGsw5Y0WxjX/Tvi2YyJmjeyF8SI1XFlDPh7MEUfz+ylvI6/1prydfqaKfxmo0+widMmaHeB0FPyF6X/pWn5nFu96ATQO8BrKqjABA0i0mJk7WLI/Cp4fLo3vMbfXnReNKo/KROZg2ZiPFUusFoo1lRw0XIfLaYhySKL2MWtZ8MtnrtuuIeoC0Qh9EgljUtW+pP9yMo/nJ0lqmGk/qv/vOWBigl11iN8nwDZsiAE7pwICmGg42pHxXuh2c0Qfrof3vXFKpFY2L+Ub8AILwD8DniVxxPayLRnKEpZUA+/0x9PaysmxaKhQcK3U22mO8V5F4C/g2hRb+NtPY6D/202LqjTes2z67XDCKjPRMPXfZDSFsM5UHded1Q+J37RO3VwKu33Xcc5FNPzVhqcnHS0QLYsvLp3BkoHMywJMewDu9uoj456pnUA3Xk6GQswosNyF7UAxOanN6M54F2jZaHPe5IK3fj3t4Hv2F3r6eWNxjSUdDuQ9dBq8SoWoZYDBzuFcZh9ANLsNDkHjCZ5UhEUY/4WqsPzLIUnM9y13ophLpWrGvFWi1Eu6rQmVGp+o0GZSnC6n3MxAQkthQO3ooN5+7lwhFPHqLgPgl2qEA97wM76xsropjBArnngECoqLwGtmwRKEIdzGCuWAthcWPMDQ407VAutYLsXnlcEUelp0QMujFKzRO93Q7v4d99weyvzmOG8xEcNPhmOKowhLaPz/eISgX5yvLENSeN6dfYpsKxkUUHtFTraLzeDrIAWBh28M/Dt0M/m/Ws1dRCHoihsJq3qhFhAlskCeODIYqIdrghhFkaNwuohN4w+hPLF/WUtU0XwHaY0wmt9qN4JXJ4SGkPc5Ul5gc+9SCtHSLyKBpWPhBQQfXWZ8PQHG2ECL4BIAAsVmxaNOvmJFoSguKnhQIxo+cOgaLuS6wv8ggFYHRIxZvWCAYd7WmyGHWGcXs6gSeeYOu/CC5Zu7uESMagqLFZaIQeEgoHJNlvo1DYidWjnFFpFdqjwyHsp0Vs3NzT7aCSLwdiRiE1brN6oFf17AfaWvXirJ7yDNDSvPrtsGM1niYGdOsTB3nE6Dbpp3uhqyHdw9HbWMexHJ20CwecdfV7FhmyeD1Z9f4wW1mbMz1Q0J8+65eMo0nAJcebEV72NCxTOHnYdikWFSP1sCe3BwU5l3+4UdiuvmFVPPzqj17Z4/bIkbLHKx/X3cY3vfe9WZ9vv4k74Y+4caCoLD+VNrK+ymS97ByRe5ZlC+7xewBchuBYmo7FEKN38j+QbtW1B9ounR4VQBiWr4i/b+ktPZI2sszg/ebZKCN7dirtWi0wgSpQqWINeplD6+ge4vqWvmp6uwP9J0z9tkp+jfdPbWPAbVuwX/GdvOwWnXlLb+lmMi/0vLHx388A3rkyo+gm/3L5gvruJPdW7+KuVVTRaVCmabDD2nOzGwmC3YZwmPlvlO7YkX6H5KjhSkM/CqgZCvDr4ve6UuekEpQPrmTQYir4dB6Qn2dQaMEveKERfbSReqWxNwUMhf640k0HgVnufy9QL40a/oppoAK4qtKlplRhV0xxP64FvWAau3hBuA8dwJO+fMY4uQYO/T3xn/OmuwI4477xfEV8t2qeotd5biul4fXSI/ctbeCQFgMv6NILCus8fSHC2WSU5JXbKd9gMg9jNGemt+uMJcESeRld65tgGaabshFt339tuWgEkxkgwm+mGLodbY1x1KlHqbLRNVEQtzxuyLKmu8nhKHKi4V7UXEbgB/25YQTrinZwb+XgrcF8+6vbuAa9DjGa3QqieHvJiudV/9RIY0FMR7KzDVlczVsVcr9GJhnRKRl9DlVJHhXp1M99HGRnm/a4UHN2LuSfFuGAiygG4vifihh2mauEJI9vdaCJSAOaKP6p0a3URQBYQ7+JUJYFp/MZi/KNC1/A16qGdEhodiLU9QoGYzkX0LLgtBBOT4scroPeH86s96Sz2F54gR8+jsOHLQaNU4N1u0xvEBOOJUv3vPU/eD4G4zlhAdQLuHJFXZ9DuHqRe9x4URmoctBBEROFq3vxG6zuT7zxMjwyEjn/faMY09HtaTaU/3GZCmUptVHvn9hzCr+cmt5V90Mp0kX3pN5SI6Mn/bUCebzttyxoMXZRQ7UFco1RF+rdcM6IEoc/M45DDpxei9hhueXlCO8RpWQ+/KMTT/mBdzzTrgmT97vaVcanyG4KKsQYyRzkWA/1HeSoRzyFaPBJTyA8w72cy3tIZatSAAAgAElEQVStHwB/Cf2J3TV4OMFl99LfBkG7K+nzl+2BDY3YwADw6VNfOuZdJRcTgz5oHz6F9x903SSeHkOc91x1b0zHq7+UgkKLhkUNUQ5qxNkw6OadTUDFCuKLjHIxOkpuRG+zHAz6AOyAh5TwVaTLhGV/tLLujxp/7OQLgV5wDYR2Ldji3udkcx1pMUMOkwFyOI0rCLUZ7bNHOKtXuvXEOxLXD3qcUoN9Mza20O/23avRgwjcyezxPvS+KTIYwnR2hn4vQA2eGyljjUmBmYRY1UcjZu1mu5f1/eyJsT3nnd5/83QQN7aHyib12Lqxkp289SCMP1p6jXm6B/f/LuP2lt7SzRRkbe6ZHpEc9CuL2S8qKhWRE4Ctw+oN1peX1d+J1fxM6RUM6Fvx5eulvxfabKHn9IL1dKo9oz5nt4/LGy37YcqQAvaTo/1KbXe7kWyeK+QOJY+DFeBKU8BR6Igb/aHX1RDwBC+lfNjm/W5MeU+CvKeOR9OjHX8pzIaAed6OwPMakpS2vYqSj8P6+H8un9G8G9Dwz8I9z0I9MwA/mX6j7W4npvWvaDvhbnj1/ZcwVpuus5T/NGi8s07cs1tJz6ZKnsH8Zfg5KB020SvuWIsvQnXqv1OCtVPK2GQKQCasiJEcYDrJ9+WkRvIFOJ2A80k+S1+/6RzInL6qnfKXDKaoMk8bYqWtvKgyYMCnAs7iMwHvsV1ShKBIyfQzCWWtAHYHegSO3+NH2AJAA5hye4ojDEQvpi6tTSnCJ1uf3BQYUVni3VRc+zTrzx5CmRE/9nNSxp47T83jMGiOQkDbES5SdGmMAeMG/QwG/V+ffgGY8dfnj+N2N5rXnCxztKrfQ2szPciKr+39yPGBOH4NlGVRLtGh/X+/XPp3HP6Chuv3BAqD8GeWc7pK0jPFo0Wd1NYR2nRzb3DOaCbmqJc9EQ7TvEBjd9Ng/k3musVaGao8lT9e2A88Mm2PU0bRjLunUZlUk4jphBBxPH0kNzJqHKjMWwb9CXgBwA8CFI+kawbBQX8cRXp5t9fgtlJuMzJvc2o92hxRjfyZBUcrNJywySM2/pEMULECGyVz0yMLj6lhrDiMQffE6WnsEiHzCrFzk5O9ZsJP4XIJjpc21qIAYKlkEQN5KQto0XtnFzlVz2okEPQk5zOFSO8wB1YuOlJx+FWmo9r2O0ovZThXlEpy72s4J8RMqCz8V4weCyqq3rRQNUq97qFgnLuAyoKFFjEWVsaqRmNeWW4McXlSPbmZ4xkcZ9ORpc/WIEW67He/WsnqufyTU5yDyHu5BL69SNAcmSiQhpmWmV21FZFJLA/H/Vy3Z7M5Y9RaxfA+pGc0eDgheAzIKbtA4AOeZdLVIkzMas0rAPgDIVT4oNAh8jornOCTLEqznfTGeWq4L69iDyOtI5iXrxkWt2zH1p/iLNvYUCgfWBjgMixrKGt7Lku4iIGxkNyzbBSAKrDI+l1OciClLARaCuTGZ9bAS3Y3hTw16uHephCDGemdzqiyjlq0Ce2Dh5M2Q5964tYK5hVEJ4kCxVVpWkAYedxQKHaezjo1kR4rnTWrjx3gJGA5iQF9OSlFkIiaWCv5DQlguUOb1+b9yx6BKqGMzY/jRW+8Y+ULBrehgbw8O3xtfULWOnzYt6I/U4f9fr8wRzmwX2Ucv1lbNShwN0noZSefDwgdobQKIpwfdfNNg3LvT/qqyP4AAJ7b/JEdKugCV4R6nDEzQKsaoiH7NJVTHJ5qMLBNbhg/NZRzC7/evOqVhqZugQCySFp6IKkaZjIkUkHMbHJAhz4FXEsYG40coutHFARXzbtConmsgHA41c8p32IGrbJptUAlqBYxoeg6Q09oIk4pjSbFc/seb7B3Y77mr04EjZ4EbPPnra04ImxyiK9h8rp6RI+CSZ/iWmv19tnNMG+fXW2dgcPoVHtmqNXBwg59aPB44vQj9zTC2gsX8d2tRg8C1RGoG2U4/N1qxQlWzjcpEfs5zLKpaFodDb63cU26AZ3vjEO+DQR6BOAZfHOQh4DFTNM+7TWUJKTdULFB3tu0MwBq5A03LJueGwiZLyYuOG5voLcJh2tf5pwX+R+n6AMxC3ewv6hJSxTW8p2pp0L990wBnMpSu4LHaX0UJzRvQ5fBujpCXg5A36qJ44/bdObe5KJ1kLEDbndLNjOHlPL1gF7Yi9jaMH41WHd+ADQ0GrJXsJ83NVGEVwKvBZk87bA+qbkXIhvMk9519X6PtAfaK6PFt0wvNKB/7dnIBKQXw37qkR+myIEoPW47YuaorCdsxyaUs5VZALmHMHEIBnz/U4qIzKY5ZIa4KATYMoO5mygyJru1Mfw5fS8C8OL0Unx9acd32qbNl23Z4ZwdkhT327b0kYFfaIP6jvv0DLE6WvhCRcTrBThN7loDoWlcQ6WVEUMV90VouwwrJ1JE/bKLTLYrCGz67ju/aaz5g+mGcGoLO8/JyMOX0CvzjeMrkx5CeQsdX4Lu6sm2wctNfTT8KyShcpiKKBTLAi5n8LIApwU4ncVwflrk/vPF7kMVqYavRZpa7V45/TOBqIgChaChaSsDWHRPpp53w0vm8qBtEB3dPaaejdEU0cOdiv6MeM4N3j0QhvzjyC5Cy6yAh9O0y/qAYENmiOEgwbsZnzDHd5O6G8DGQzQu8RBg992yGcdlHr2+aZimwabyReTZ5nyUAp8ftpGNMJPi0xTm3jcjKWVDX84yIkWBfggqTuAfrJM/t5n6z0ISXXVV+WSjLsk33o12IyN5cpKGqGrr0Pp3LxLM2hvVkXCD4SHViTSUKJGD0UXo1IdsXr9M4IUAFoNbEy3zWLVPjv0EA347cl6z8TBN8ODioIQHAdQUJPZig3ZhM9qxV2r+JKLgVcV5nGOOPCuv1Zrmao6XcT/cvJriOCkz8A27hW+Fz5ErpdlgpLaB1jpJ7yatzO6d52auzu1nu9AY6bUZ53xc5bNAriW3bAKSGNEYhG4/oePc5By5Z5wIwCIGDyrizY2F4Je7Ka40xZHwyBINv52COEwuMZhXVDNSuVLEaHH0ihVYay24XgvqUkBccKmMlfSagbICuibsLmN2OitXtQj+rECtqCtjrasYHWpx+AjqMdANNJy1smHFZDkXnFBQwMSoqCCs0iYCT7Sw5Ob5itKMaVjD2BHAi+NVAVt28QJFRcUVVQ0rxAsWOvs4V65q+IjjGtYSi5gjip2GvwAFxb4hb+rwiFXWyFsyDtOA9pu8Qp2U8+id5f/9LPuC//MyClNzB733x42uSZbEd4zHZeO57jVKGdA0S87GCUSLFlGqU9nrlidLo3e2HhY9GKp8wVonW6unBVQKwCsqXyEh9VfwmUFPwOn9GU9PZ5zohIUWVAtxjVVwl8JvruC6aht+LEVo3UkiQGBlrHYIxRQMqyAYgbFwBdUVVBl8vaJe5XAdLcXve5Z11a5sQInjrnJ3kCucl1H44rxZxooWQjkD5zPL2dkFKCRq6Ho9i6i/VvBasV5WvVKa/VNofJhAbpzI1Sbhb0Sn/S5rA41KA7PDiej5O07O9ZxE7eM196X6WuK4xWgAnicWCb8jOTFgNqIVtVoI8D1DY4bgGk5IcAujHsQEh4XcsaSilpiBHTwB0QjaYDAAMC3tV5et12h3w2GvSkHVfZ90IBxpoB4esIk9+ryY7GBhHwqAE6jq2q8VvD4L06YrQCtAV1RcZe353lT5rd13rvYo25uSXUuga6AoIrIdZoG9j8McZazi8ovll+qS/iKKX/Z1QN5bhhFexcGNFfWfMRhOs3O0PszWAHffel4+1ItG+LRD1L9MsO/9tmYGZbuxH8Ayg3v4/lZKcN1hPN8sw73qRxfb79Km8bg0pAqyxI3mRyM/GvdN+PkNSnLrf73d9hyiA+keA/09bQzr3Mm/0Q8O4MpjaaRgirNTQIBMR/byPpwGVwRx657wmddt8+W1qbw/mSrnOSS9o5DdD/xyI7NMAdszb37l4Q4Szz0FWrpnqVH80uRzqZf7z9zoiAUFeaSX8fo2mnyZ5Sj9JJVbbX8GOahdGSK7mFhSC/Rc3JZm3kVyJn0c4P199b5yisqp117m3yG9Ugj3l8yIjeKsjtuCyc+XjvRhjOmyvLl73zYlE8FVn7GdoN9psrejGVUeCJe3ujA6zZYbG1Kw0e9bOPIN0/cC4TWIzU3YpZFtyDV79zXX+aRIzF5FBXq2LZQaFk+l4Bp1Aq7HzwwvtO+b2QTPlfs6wOqpFGDKTK47cGKLSDeD79F7o1v6ZIVfi4vcWU+cjgF4prw4etalFcKdheZ1dR46sX6FTZ6N2urnnWH3OYbQ7eUdgNJCz1rlRrai0sDnNW4GOMAW5zwPaASeBr9D9hm93J1aSl/zRHrlqS5q9D3DM0QGS9k4GYBkwA+gbEL4KRxmPEvSPOWNGw2+P+uDCM9TGMP4vuNjEcwBvtAo44E0zR6UQDGSg/UlRJT96/MntKgDWmlGk2l6uTRM/X+T+sZtcMSpEe7NJsKXTyIw+VS7h6tt6d254Fye8I4IH5dnfLpY4ySe6zZ+1G4u/ktha+ipnqaW3wyqecnm7ufn0Xb/zQUDUQr8JTto/B77wAgyWwDarOtG16KRknP/5X27T7IGehHlz9LKdG66bTxI62dYnvv4XqxJpjYa9ORp82YKBcybimJfYx/N+0yeR8UsQZTNPXuRMe88hA2ludVpY+Oehzbe2E6JkH1V8Az2uw3qLVJO774ckIWon5PlEML5d2NjeETiWa5RXIjkXlYuuq5KEUM1q6ebylOCYoJL5t9XzQOc9YkZ1COt1jXL5i3o9ESNVkDwqNP6te0KiEJiJdQ1HhLWiikaQ0i9TRmF2Q8tsPIsUkN15w0KNBlB4e6PUtBwhuSZHPJgXgFmUFFDmx0QZK2NAQsfLcaJEirkrsYND9vgqZXhrqhewBAecXgH9KF0gzWJNSYOA3OcS89t3IYtWT/k+R9oONnebml/X76vdQwSd5/7KUJI3Wec642eexgJiQOkhoM9+C7bDtpnn+PG24zuURFvciYNOV70io5FDrSQrkmPmFF0rRaVe6mg8ALGCUyrBmkirNeCC4BaGIWqinDmgS70QAzpMp5VQ4AQqojTpaAwcNLDr7WsarwrejiXAGLwSnpHM0CFdWgWlMJAXQBeQCQHQGqUve0gCRb4wqGlHY4JNLY7BB33giRFyMaEAParJghcxJuY1SNd7JsVKLWFL2aId69NmYGCQUr3QLcf6XnWy9zwNKXNN35gyxUQ0niydYo7waYvwrm8/sq3JGSP9LxMzDvd8NL4uIW+uKaC4efIxtOtX79qwAlsB4AdwI8cr6twy2p9ipjbAf7mEczqdd5Hx+srb0hCpPlLOIho6500ygNpO+6huYI1VLtEFmE5fFJb+Has1QkUV3ZDSuE2RC5r2IjYEvOOZ4rd8tvhOO7ejwaRtr8tk/LZ/t1gTYzKptTR9biWZmm0Rrhvl1LGnncIrLOltuFxc9DH5RPsx5f0wQa6rJmRHatyWmQEbF7zM9a9kR32cOtY07vVcZjsDFdut6N5R9KdhPhW3VN8vge57mYOre67+n5HvRuYDsJ4NKxQWoKZRx8atftCGLW6Rzzv7hT4XuJ3QxJJ+YHJVnNS/KOlLay3BnC7Dzq0XjP78caDvLARDg5MZhMSQv3czSGbeGWRzixCXc+AjrX3o6QM6hEmMRS+fr70dgf6z5gYsKPJfoeZppGzRDMAoRGK4foMDHNDkHOlr5H2pJe39I9LIy/0yBTrFzA0FCnB7VRXrsD5HfAcLg9m7DNgD98+wcFdRnwLbwMHjoZ4V6Z9LcH0K6VRd3+IpZsloYnSxl7RWcaenlRBQQAV4ANcwebJaGzTkfjzZkcfiLNHx+Uzy+GKoTQXO+HAoNfixTRC1sHu9eYcchMij6SclUsbHPP6ZrizyRau0e9QbgrnJGP2aNubh6igi+XK6E6HUBEFHLvh/D1M96z7m/W+JhHJG7bQeJw/974Jz2wsCW18asozae5mimu5AKdywq/q7VpoESVkhRrPrXlZ8OYD/RuAfyfF1916kR88+TCx/NdCaOuGzpXkkaaFZ5a3IxuyIWxG9NGOfAQEfOztcb8vfGTk99WWptrsA65KR9n6AoMrlOVG+ttfCNltQxTwJ4ge3lZWq0oxq80eBvodDepoV7Ye3VfGXh9JUU/s+mu/umTER8mNG4UW0HIC6CRBrEqbVzFiA3xFc6hz12Xydlc9uGErUyKtcGiO+u8dREVDRKvXqb6nVYz4XAXXa4V4PVc1spuRX70BSMehVsZ6rZKtMtYV4KqGfRkYUOcFnoZnwiO3uyQ9vAf1zId435YCCZu9kBoKgXoVE4kY2i188/yWbSFzoUXG1q4+AHOKMcwb+J1s9J0a15AfDbLc50n+UgHzlgAxXzey1rdt99Ench39My9vhtuJmDebjxh2WKrRSAiloCyL0tiCWuRKBVoWlNMi8qwZmZUXRs95EOsZ0qrrAgBX1CvjeWV5XritZV8SssaYCEyL6/0IBCqMQoSFCScilEv1pczQKE224eLQv2qHc84oWMDrIuEs9SAL8SoeOmCAqx4OkLUJ2OEeEQyYgXW9NBprEcacvLGfnQVB+gENva1r2vgHozQ6WQg4UbvfWm2U5HMUaJhPKgN4BmqMjJZn+RIw4JyQgTFFjFFymecBvropO5PPx2uR8jKbpUn1t8+2zODS8fc9UcO443Qj5GP/bw6JGs/lk71MjBozBN3LyyoUscu06GF8aZW1WgV92TmARc3h9qkGc79PvjbjuWnpo9rPD4IbnNzD1x8nuDF+j4hvj6RJO5sDiV+pnWNpQthf0s63GN+vBYswmfbjJSz875wOyEs/dnqtif2GAzFikX83RQA226fwYvLsb9b/75sCnx5G4Qg6GI8O810AfUuvkH4gA/otypZ//5OxznevrtxsJ9pn42JCM/lPADt7DlNoUb9LevVh35ljSrD67vu1YTiYXsRs0o7l0SoeTaY9BHY47A+QzIgeE8MVss/XC55OGpbSELdW/O/vPuDPpyd8+fTvti/NzGulFi3NDn+faHxPuiuZ9dOvQNY2F4Td/+Azrq/3UK/TAxN49xy/zmJwhV1HR4K/UrdMJ/izORH+EjybbUxVUdLpKwnNAE7qZBlCbVIB8E4NAmeATupRt2xwbeNk7qHugtLBHgXNGQHA573ZyLyL1Ig+UlAly+x0jx4HYSYd53yzuursRSoT8OGhvc/Mg/2W8oFbtqjsquH9U6AJl4SLVr15rIc72vvxvbH7oDAnnN7N4KZZntLe+Wu+Uaar/Mb7kKULKxvTBDcOpayFS3CbVTCHs9y4EA2+ZzC1qWu94N9qwLvwBViB333pE347/+JtfJaQBCAU/KdW8lm9US+4wgwLFz8FHNoeDYc9qweUjIdTrCfxjdjmpki8K9nkQQt7azhqNKuFMCSg3QlaWa+j0LylinedncIkrTufyvSQqHE+w6AxNEQpMLBE9zjiHl2ZVs3HN3qWive5MfyqvzM/jrWx3dThoHhkcP9jAw3dnFiN7r0dmzBjcaArzjomCBX4SYSz5jwDcWgrc5ihSeZLPiiQN8aq897uNm9j3QxLkkcuM17aXef0BConDY/OTQ/AaF6DwIZ1CSc2j9h4mABo7vlawCcg870CogWFCWJcVp5bVXZTe3m7TlF5TCU1mi2gpfHwdZW2qQrsdWVUC6PHBW7A5gxH6NvNg2YcvpmXu4XMr1hK82QsIUS2tL/CwjqPqhVRJ5h4/cBC4JEwb3p0cxG9JjtQlU7AvBmDwaXrel4LN4aAAfxxmLcED84YZaJv8Vgi4H9evgzK3K4jep73Je6UWQY52pxZGz0ZsUOdOWAGqWd3cNgF60bHDG1EAC8FtZwga6bokiphDbLTLvF0rWALNwnAjdwMMRTGdQk5BMJm6OPVvdRRxO5eK2m0dvGQr6we8iC58oFIFiATeKkg1j8sivOK/1UPY5J42QLUB/aBiRsyGNa/zrvQibseoFngh2oYcqiHvLtSoEKjZOh4y2At4BPUw7d2dKud+4nXBEyZ9oFn2yyRvva4Ek4ocgDmSHL2YQwiFLyEDfE5F4BEegqsXuYiN7y91NMjxcThKRXx8JkveZOxolwc5Qf3Mrf6DGkjvsb+JiarBTlG4Rl0tQ24frGspCtJEainhSOaQ734Y7TVDrHoWia9igPKv4MQAY/7CgnfzqzjJCFVEu2WNoysdyAZuwAQ74ZuByUT3fNKJv1zXKL0O2Xo7hbqKg+PqP+d4R7Ad/ddw3FAIsv0dwmkWTXDJwNcjpl3K70lU4zGT58fGYM8P7fgGb27lwUemhqDi9vvbkGNFvSdKc7nS/r/M6as07jl8f9N0lCoxmsOOnXf+7WzVUm8EL++Qro1bTdK6wf3v1uHW6U69DPq8lCa6XiGeV+8un+M1A11EAoMtWnA21IElLf0c6UfyIA+S71QclAS+WckCxmxGaOcb1AmbxJGyXeHo/F/zTSa4x+QpH5PsF407NwY5c+QPjLw6wBYRjOgG5MiANcL6PSh7UNHBR/p/N7S2gihtWeIR+v+0dMjQ/dV+kXDr5s8hBalmJr3jRjRC1CKhMIkDXeJMrjTmfvTgaNTgtyUQTEw6q1N9eb35wq8L+HxxK05eJ/PZf3+RTPyx/fbTUqUpe9LN5DYmjJjNYW/aX17lVGgY8NFOa4qK+Fyk3vdyPVYX7LUf9dG/EcixAPAZ2t+nXz3pPc5HVHk5n1dTLOyFfhyYXyhZ4Ux8rQjYzrDmVcixncpl0YL4SBedEtY5LmtcojhRj6LcV3U+BgNY2ZULVWU4Ew6fwaLbcRJeVweqwq4526bd65xnSZh0zeTqtjgVtZ/a+jwLW2OKlT0xvJRRBB71X0xWjLIiOBJxtA7yAPs0Lt+N8/R+uHFo2mAGrxODrkHKZBJ9hrCXA3TgNA5qRTPUGk3vGOSy38RhsCrsegOBUtZxLO1LMDyBLb7tNUg5SNl1xjqQQy3z2sDztY0LG3fG+1ppNGJflj4+MIEiqHNq1QmaKn4Hq8kKWJELouMdcXqxqjqfIRxvUKvYiStk+CGdDIf8gQ3GdD7dMPvZlVDB5eKWtVoZOenqhklbaBO2m80L0vFLV0WSSEoMHNcU2o0tfbtMEUa9jbOzO0wRDTEpOybIZi+NcgI/8JBI/qurDkqP6tTYT/sHjuulTZPjpYc0IZJauxLRpNsjt1KLnXZMzOqCbkQms0hRDpKwXo6gcqiGCAe2/LL7p1udK7qgQ77zbgCvAIIEZp8STFAdvBsRTtcLxMnJEAOaVSWwDR2kId0LRJpqPTrijZPiut6EAYryXrw61FJvG1txOwQTRQrGSBusjwZ4SlfAFRgOUno9oXl+nQtz2u7ysIM6wwzrJbQfeF9XEhD0DcsMTq3QQOEiGhhjh3q4aJqa70L/9lYEmyVf5sUeRtvv6NnTzECUHs5gFWz2Gtmbk75XRuRESi1YaH1WUTxgpvro/bSRGaYle/gYkfhPs+ADhB8ayfTu/byGInbOaGGq2O0EFcQZL2wV8J6B7p5nnO7Bz0d+O5UP+65zd332d3cXRnmMQ/ZS4/kiaF0Qx5b5/HV3cbzI3Cld+OVdoesbl9tXe82vvd+0uatIXiEDd7Dbqcpyijx96xCGj9+LVr3kr7/I9NBme1g1he3dXcKa+m2qP5zpgOGf9Jst6iO1/fVxynIB3+rZPKRMqtwOMF/m7gR/97ST5t+AgM6cM+G9B+ROnnEpMmDK9Hy5k2G19nCdbJvkMNm7lXSSKDKc7zZlf0Y6aVj8CN0JW860vhuNyWjefrKHfmrqndwv4H+r/qMXyXmdgdOIRKlaAcaA08a9tN0GSfNEA1AFvUwpovWvUzGwjb7dW1DsjlNltZZTkSDMkfT1+G8be6DErtbmhQEgtQ3St8fvgudtFmKP1MD4cbaGP4VBQzSqxFJ7jovJ5DETQXRApQF9KsY0/GZQB8M1LQ7zyBFOKKiiCHe5FEr5PVFj+uQJyphzBOdczsJn1OUkTYaeVww0VvltcsKfmAANzfjqdJZ/ldFz7RLG/aN0JyAGPgQFvQX9ah5Ch4770LReJVDneFsxkUD55HNQOrAPVUQmtRWbwxyPEzEmy/H1+jIWD6SOWbsPL97SUr1/g5VYdO2ib09M2s5WaqqMN9E0NDPjh8OJqsbi5ny9hbfTO+7OkcIH+iJG9nUG9BcAmtVclAajpN681EVA6OF1q1qCPDw70ZTw3cDr+uXPqACjTsa4FU4yAK6RxrYp+Go8LY5/07Gq0jzNTnYqdsGPfv2SRXPrDXbnd0dPB1gQs+Z9NCAy8ZbuG1eTCbpbXmtXQqAZlwd4+6ETgdPA6vTPE4772/zLre5NY91s+aqxzktJ71TeQGVBZUKmIqMEgGVzGAb+qe4V9iPrW1YmcOXuuAe2vov4hulaO/OrfSwDhX9A+SuZyvaHQRhPeOo+TwcL0vI3JXbHeuGt1AvbqqdTOwY0qFymsOOrnKHI2IMVY9h9QIm8wImC48kQikRB14e5EkdcA8yofAETh7AM8NHf52BVWN35TavcxmXiLMEW29tnTkYsd9diZZ+Z04h3LW8k7u47tSTmNqTe1I7ALPHAeaprf197hG/y1z2sBKN2h9zKQrfPSzzJmemUQwUYFkKTucF56cT+OmM5emMtTLqlVHrirquYDrhVADCgmVZUGFtkIsJDBbjHYquC11xMvngAhQUhUOjNBQGkYRvX4iwLMAK8TCni9xl7kdQSMKuE1fgrOuwKj2B4pddoUOk17MQgGvDuRj8JPFm4WYaUkWvkmDIoRUqz+CiVzPo/ecguX5C2raV0k8NA3JvOgs8UvaiF0szgCcJ5w2GXwGRCRwxukNmG1S4okVxQY938fDuKeGOyWWMduBimqJcEao3PGiBPXq5sYu8pvDEfEOmxegV8Y3DegNXnRwAACAASURBVEQDexxDmmYeGT+R5BBbg5XRH6TsQUhPlbbRdqh3SUVbj42dGL5kWXBQyYBP9BFjZC0TMwpXPZfCLqpZ1BLiigKVKdRg7gfyKg/CuPcgGQuJC6iLWJl4XJZZiDfZurHoujdKG6cD+9Jklk3WBDtvMhxLHlkvH4ZPslfmeaMOTbnC0b3xTZzp3/fh9Wf1xjmY4GD3+wDeDttKxG0YVSDnm8F2iz8f4P1hOmeQbNlposEjB4mj7d+bNnvMMT4eT7Nexzpnz3g/072g3JNI96cZP167meAdIuJkoAOe54Fh32vzW9UTGNxQquzkZ+ORbTy6kgfQ6FjSQ5LDAR1BGdPXRLhvkQ7sNzpSninXW/rZ0k9iQAe+NqH9KZMOSXdn24toUC89EsyIDqHGc23JK6U8x29z/pZCYgDPH4Ff/gPvT+/web3CkLFQQZ0ZlPKmO+LVLfTafX9wIaQmW1EGPhDw6RsIDo8cQuFROdp5l/I9unSDLmk/gylVtC0P/Wp060kM5xrOEkW9an5d1KBewL9YfWmTGlNW7mTwOsXODPg0+Z37RBBuCYO7ozcauf5XNw8UFERZWNaOdPcGWttRU3Fwc300mTYm37G8hB/DyBHDh6FOhLvWCYghLTH6PruUO9KDgSJyNCb9Swl1uSc/zzbwe3Vu6MUrp11lF26D2aHjjcz3sPIXsP0o0C54AgP4gtVBfWf3m5YzPuCEv/iKyzq6wwNNEbkH5+F0b4f2B4FV4RrlPlG01YDD0Yi+gKq+o9KWFlXxzFOju3g5hnsy7Z3R145MGv0IcqF67pllz+9CL2F9OYk0Gs5Oym2JlqVVWa+BbpjMa+1H8rXV7HYfrgTXB2a03RJ4M1TZGMV50AtK7dPEYmo0PZuPN17yzM143x2gi0Zka3vcpU3ingXaQzIjooUkzhXawQci4YmF3HiOInySNOxxVSNLVXygZLgAu9m3G4EofpEqWMhHGagsBmqmduAgnt6nqnczQ3idOJoHHleLerZSfzgALYStRbq1Iez0vqvgOJn3ORawh73eDnrPjW39Vf+1wcLGqNXrvHnpA1W857s7qQnxftw4p3E8yV6a0TvyMIexHaTYpE4sYBcLmBlU5Yf3ldsd8uiUvm0UuhYGzYkneuxJzB9koBclTm3fw3TsW47yMxIIelmsfz3zjh0nn0dtW4zOfSpcwFyVrNo8M8pCoBPhfF7w7ukEfn/C+u6M5+crnusz6rWCrwwq4ru6LHKHunivV1QuqEZzGCg4oYBb2HAC+Mpi2C7Gk9SznQhLBUohnEAopQCnAsYFZQFqvQLuaK70hTzYus+5Y/oiB7n8UMy6gu3+Z9aQ7pGmR49Y5QdFCbIc9KkAneTKCT1kw6WA6AJQRcWTHAQaiZmBtom8cFU+eO0JGlSudX64O8sR2C51B17zYnKasFPzVFy4LWuyAbCbdfLSeeoEpk01KheEg0D8HA5VWbj+YYe0rOukogU/j28qn4mTobfRnKks18sQPWVtPP+mAdKQLObXg48ixzEKr7K6CoNQXGQSetCi0RRud59TVfmiu3YjDEGGhduXdtBI5ZHhWKHV6f2cINtUaNlWPD2bNEgdLk0OF3neG3qOqTg1qHLCNQe1pGd39O3nTb0UdDvfJO8IR48mHv98qQTx6mlCyrrPr5g2TU8F1Pz8tSAYyE/DxfU1B8PaVH4VDtZGMu6QvAIoL8XDe8o3kaQxNhEb8qroGB+28vJbejiFfefm+Yhevo37T5++owF9hj0zxpwR8w37LJmAaWIx9Hd7CcSQVx5e0zZmUSbW/aCpwEQxxS204auO+605fu32vmd6aT9eUv5GWc5M9UjxW+v3tZIx+F7o+hVFrxW/AHTG/1cvuF4uEmKZIcpi0s+I4F8CooMk/6jfZ7QT9sMutc1ntwszWN/ro04hGuvTQp98IWI8pl9hPHd+3myWJ+N1pOzRtClPg+9Gw4Inepflnd53KB50XMT7Bb9Z6HaChDmNQ8AQTxFT2lEQiloZ0beYGrPqMytnAEQCnGmatrVRh1PoxmyTvn3eC/sF4/GyNg1m+zOFRIbnRpruMDL/tjo1/HNUVi46NmuG88F0a61aWitwOrff13B/5a0h6GzwlD4fAu7Gu1dIQwWx/jfVIB1QR0T5YVS2CRzoB9be78D8CsO1x/UqV3ymipWHsej3d9DTV0fnMHfgCG/PdJtUCyn05996pcRvxcY20CIlUeY1yFW8nMRYofSCqN2NDv000lVMedvdvAyfU/XSlfxmPFf47MJx82YsEV/I8ZC1T6Qwd8Mf95zmMaRDWPR9b6S22puBhfwz0DozYnsj8S91E4DT1uh5XljDh5ceuzu5gJrnUxDPfXjMO+IAyt3CsN6zgtAdrqX+AJHtA8h5HOTOc5IQ7p33Bl3RjFkKSPyuH36fvH06S2OFqbVlk0JcxXCSD3o5h9WDBvGgXBHAaSkoS0EhiTJDCzl/lloYl1UM87IkDHECfnc0TPC56MBQ7GA3E7pkOk8OTt/slcBOVMSAeYJ4oEc6WArKQuLlvxo8FUWjOli0hSiJOK47XvWXBthzMQgLVB5ITN8RmrHcThmQeTaiduvKjedAqKT1eHPcgG282xg2IzqHOuHwxTusrb22rmYLpG/jvrSt09tLHplfg0ULC000VadfPJtLWzNGa6AoW8TQXxZCORHKuYBOAJ0qCghnOsk+ZgUWnFCwaItXMBiVVxTSOoveVW4iIUgPdjBc/rVw8eo17Ou7ALQCOBNwKijLGctiM0eoqxrr1wpT7Eon7EqQQDPIfwFLAZGqqIoc7IIFaOhkD/WGty0W6YXs9hmCStBSgIXlago6oTChKr7LTScBp9VJWNIZwLPwyLUo7EXC0gNgfo8mHAY6ZnQyTnjgUS0/ATUc5HNDYeAqT7/J14//hnI3qXKGlwaOjxdG6N7okK/XBNrsd8dyDRalAUOvTobd2+58nEiN5jHpQb+e8duiCHVTY2m3LB4T8sADS+7e9rY/sGHrA5NxGsEU8EsN5+ArQAWMRedCDrLxarSg+h+q8uHrKvuYaDivvYwR2UvffuBT0QPbjEuBxA/lktlvTg86fAvyv72OsgrQT+EmjHuelBvzbbkyXvi6irg1rjd3pwM2w7vJS3OU3OAGDWHoR2dUbtb2Ttrzkj80pJ2Ue6C9PP57TPRgnTeKDcjOjUR3d+vudM84j97flD1ud6BfC4N8N3U6j6S9zn6twf75U+RBr+kd/+OkRP/+VskEgvDZyQic6OBIgHhLP0P6iTzQLb0hmimSiKJC06XSgcBnm1TyLCL8b5UtLqtp/ahycpxRJ/eePgJ/+j2UeMZKq2H5f0Ia7mS+VZrsPr92+sgSxj2iOAF/fvmI09NT4E8XrFzxn6cz/heeUyWMzXFnU/DbGojG0pspb7wio0zpM4DfoJ4bIctwGl95bqMi6lsk06ZtgXiNitMj2n5af+2zECT2IqnxnIDfzNuugOxdUGgxRyWzKsm6rhDc493uR9X4suyanNrn9z9GT2SpKSa77yxX42EQBkmVRkOdwkhR4VrDuIDiWh4g5AiVPfstOjB6FxRG8f15Vk8WLHdSBw71zz4ps/pwAt49iTHpkmlDatnm9iZcg+eHaQdNwsSPNrSzJiMupbzDsO078FCal01b+8Wnv7tycUOBNG836h/m0xfFPAUZ/3EW5fIXNIPLKoFqcWW5M/0T2HVVz5cK0Doer90T+S/lha9F57mBoxZyIgK5QZh6Pue0bGkGs6J5QEIXLdw7APdII5I6NCRuU/YprdQ1w+YhqKHknf6ZstLcy82bMNIohxP6SeBLW1fdYXm2njdZts2Gyr7Bi7mJTWacZ3QKVJaxYSsfECKLBPK9hamXg6VoBppQZU+PA/93L7EAq/epNyCO0gh7ZtjIzG5EF9ZIzeZUdWwsCgiJB2kpRUO3233LAlvFtS2LxCM8VLzNhb7zsxxGqyisnjCvXCtIjbWkcMfeMlestTZ8LABREeM5FqCcIM7nZ5SF/Sr0yoxqByqrg6DjTg6ZXGHAAa9lX1VI9j39mG86n+ZaGmiP2YYXy0IoyyKhtKnd6VwgXrw4Aeuq4a4VL2RNw72Eo+IlNm0exN6kRouwAxQ2pkHcAfmccbs/d5XPFq6Xu0/nO1kZG5BwJELE1Hui99XMSeusxrjY0kztHvSMyLx9F48iMMIX6vNtytNOF1Lqrh6JUQMIsHD+HvLajdxKJ5ScYmFxsj4B5UxiQF/kfmU6n7DUAuICqguoEtYr46ph3eXqAKX4J0jEiQrwGrzg1XAvi5f8IL2clxKY2/3sBXh3AhFj0fOJXAGuF7DdGx7pd6TVOpKLhkaXawXs8MCpGZfrIkXVs13ItV1Fog2S3mdeNCqFGd6LeOuX04KyLBCjZVEv3gqsK2o8OGZTzFA6qf1fpK2CimKy3BgFt4lTnt3FckAui+JbBwP19eZ2be7MWC2EdwxLfma/S5i+rBva1MPj51t3yP75k3buOea3RSP0cCoippRzmjhwtzhnBQkaSebesvql6vgD8NN0VSKmgSG4q3mZK4BVDxuw3n+eItnYHCd4KDTZwxL47agfnLMH+aR7HwW0efmbQk1XViZmXOKeAb+RXEbpUxwz2mYflNgDK+fNA3srf8744Hu+9W4OAW/mWgt1z7kX1o+2PU15YG702+Wa9HYI+147XzE92NRsJXxTIF4tEfrNhKXvDdfPkW5F2XhL3ye1A8RGhZSHUXyOJHi0/fff9KTE3zr9gAb0W0LCW4pCOCMQ1OyFQ8DYMCgbD8kzz0uq5XLZx0+iv3Shz+Y4Ps+7zO+cfgTa9rWH4ZYn+vdMpilnwp/rBWc2bwpJl8//hf+lRhQA6olOetexGkMJ/V3n2XuSAVzCxn2j3Aji+ZnD3eph3X2wGLQQ4/+/66CeUZpsPF6MeC8pH7UzsUrX+t1f9kUp1qnfzXDd3dv7HqBFDeYLcCrAcgKwyG8KBhwPJUhQXzf9rZvBqnk4GdQ3oEV3Ffsed98R7jQnH3pBilNf5/vrTEd1PDiOU/TQN+1K9gg2t55p57ZQ3Apd6Gny/hKen4IWY70TX7sdM+08I/Tu4xE3hSjMdHntjvRcrm9sQzaHLGwWRv5getoZn6/BozYRJyh9Yn9o/HknWLT3jP0h6eZyKx/8wYx/pYHf6OMY+Bie+v5ldCBkhM+bR6HcIVlotH5ulbtFPzn9Em++dpd7CwHtd6Cbl7gGy4DKdzCFNEO9DtHmzGhJJZ0n+d0tLwKI1KjjNFIacn23uPdpvcXJkt21K/Y+Aq+NjG8CHtn+M3iRE2wKTJnnmRp+xefqRc2eJ5SL3ug2Bp1czE0OITTjuVbdn4uReegU7I5z9tO22gMPdPYqsH0Z802eB09AKkaf2ItQN05VPSkNCRiE6ihUV4gCv+gDY1XdmpZ+chVjLbEG94HN19rRgXhux72UzUgcemsckLi2ZceknqUq46GCeRXn0coWBRq1VqysdxNHPq8H6Ei9uys0VHQ3zAJTI1U9DbSQusTB06xbFC1CDVuzehhlZZLBWcUTGMSgovdYnxeAFzBLaGleCfUq8yO8kZ0kb7zNN0nnJCOWrR/DR27lLSIC2yEbhLyp6jAciIb9NgIhU8LTf4HxhzcavGlj9iH52wOkh2BOmkcv+meURg3g4Cm+5UOj9j3rHhkfFGM7yORoy0qCGXZKxVCayoIVFVesWPgCrBX1ueCXd+/xy7tf8P70Hh9O78FXoF4Znz99xufPX/DlWlEuFZWAKwEgQgVjJcZawoENQuBVrLxDlIJVDXCVlVSsFXi++DUFBYSn0yIHWUpxus1c1f5XA2kWvK6wiAgyGGRe5Fg0Y21kwBYWA4xV8rBd5bAoCyJgqaAFKEsBlQXLcsJyWvSgUAGDUNcVdRWaUTUstnumGzz8JHWdqrIAFppa9aDS+MTVHEUsPemmtGjYMmbg4+f2noF2V5EhiX0aDxkgGce8HL7HZMJAJmLW5/1OWIyOju/G7OZJbkslL0rnCancE4DnQHfOAbb+cm7J4mdjLdLiFl67o3oqp3dyKd2W0TjDgqlxY3gnbF11OJRhUUUlEl5MCAKFcsgqfIrBoFXWiV+FUHnjWN1BYgehjM7mg1Gh7Ihk9YbzG0Rt09WtrJzOyG3g3NY1KzABYQNvKG5jDsAOTG56NCs+IvkRdffA6yZohoQPpEf0sXmdHqqbbrRF2CDhkXqnG++blQzn4mbpvT50NOAgGPuNdR9TGI7Ox80UOjA9nLQD26j9PfnF9kH3prCH+zapR4xI99oe8vXS3pbtZtkgRnAHX1qLs2TyVKRVmZe9Gr5tG2+0nds62gwwbcrQ6NVPnWwiN1JSNybt7Vv62dIPYECfLayJQL/J989NJr9vFBVR1ow6Fg7hHI2huCFEKzMFl7/SDWo+mf0iqNP3CMMm76DR70ltvlfbrzL2VtdPtHaiF7qhw1pxWS8b0rAspZkBh2PFct/lMng1Hd/Bw26TkIXA8Hu4I/vBxn4qOVKv5Y7PN1lp+5sneV+UaPCHBicBwDv5/Zue5Le7zs2jzpRqFBUk1NNNAL1xBf1ntx83OBItiyB7ikb20TjaYwpNzsbQJM4C8YYPFdgBAff0jC6SFro9LB7SGI+TLlj42KHR3A/dTMDM/QvgQ8E/XH6WnI9Regb3RGcAeB8stc/hwEC8i90M+2UG0M587L5/MD3pvBm4l8lu9ZFNLICG0Dc2ZEe6tRHRJjKcG7Nm9U/4fY6YExQAIxCfL6KE/iNu4OzAYKZPMzq4y3O/pQJgBgG3vthO26OqGC7rf8xtTgqEF1o0jehh7geRNBy70XM9pKQBrp2kiI29ihGhs34Dvbc5Q939kCPAMIQeu7ds4sfc/dfmvRqocUOaN+6uPLbfShO8jP51u1tgWeBjUYpIzpcv7LyDinhJbpUbAcTNuwgbPGJAfxc6NCy8ztfwUAePl0zUvEDg58ooxZTtAYYIi/Imghpr9T07fKt4gepBsRZqWZeluHxL01WNa5W8jpWvMvcWNcvgVPziAHczGrYA6kTx4Iu0zfXkVyOzXg8i3udiTqtQYxgWiTijIFMhlEXkA5ufNjZ6nMEMP8r7NuKh0w8eOw8YsBaqXSMwMKBeuXrfe6koC+G0LDidzjiVs95RLYdJnj/rNRNm0Ms0NMDW5IVAE2a4o/hTXM6xP6hF1A67RETuW9r01dtvkM3DrgdP9CBDdBEY+iWxkzaM546849oZxm5SD4y+HoKJNqPS/5Y8Z5VHLzW0pGKdO1bruBORyCsF4MWM6hVXvoLWAsIV68r49f07/PrLO/zHL//Cf/76G/iZcf18xV+ngj/B+PQMnKjiCsaV5NBJpYqPa8WlqJkuA2/8xX5opAIJXMDAuoKeV5wW4LQULESy7s5C083Tda0r1lpxvQKXWhtv4WYEFLIb1mFp69HZS4XI9TqUbPI1Fbn/vJAc+iHSwFMF5VSwnE84nRecTnZNhcC3Xgq4ElYw1iuwrhXrWgFSuBYAXFCY4Iee7FqLyPOOpG5sJ+W6pXYCPv6lj6mbFuclubwf/LR9wbb+pmRv1KODb2/1rYKXm3ZDkRgefpvY5709CvTtTKnclsb46jwDdLEqxuPpSux8KMDEUZdJYKR7mBwKvw/DH/R3iQ8LGwzt+JzBIHtUYZOdFUXXHdd29zkgqO13oTuu2DxuYlMG3hEOECLQ3AFdj0+mnupTKmcdG2Q1WCfo0cZ+xGvuSMzpc78iGsHa1dfm5abdt2trhJORp36llIl4PkyQUlv/R8Z9MN+biRzhRK43yiwPpM24z+SBgw1kEecl03Or7MF2hgdwDlQsvDGtgSOwvEqaVNgJzBOZ8rUg4DYOkeb1eb5K049rBjr+GcSL+DxV3kWYsioYPUEL/GHTmD9+GOpWz3RAA2/vG02/XgjD90wRrY21q4ynu+HEQ3/ivr6l721Aj4TzDZEOp3h6Kxi9AbSQjZkxaz733rmlBCDIBjTaWr7LFGXh8ysKm7fSi5t+yQC+tPGfeH19ZOBX2wAAuHwG3p/RNgXysT7/AdCp37jYhucEdGNgtsyr5lkSntnp9xNkDXhzqqX9PJCyGcAnffabbhw/WF5NG9nhhcL+NAUa8XD5A8noCOXfr41vqT5XMHB4/b5tyDREuxnQRUEBeHxXAHafObQatkzmkMFoeV1x0ea9bX8Z+ADgU/A8T7jZwE/E9P1IuZWVDtS/A+CGLYLcyejvFrS7eot/JxS0+0ivmjd6optS7kG826AatYc0wUO7hryEQTqFfNdcYK99HioIX53sxeFx3NljkElxscmys97NeP7V00tpxaScVXmk2iOeC2ktnYqst08A/rz+hd8JTTmqRt8/O1looKQZbipvg/L10xG5OG6ObS2boTzQlCjz2QbXZEJWj+GKdrDI6J6GEW6GdalDqhbPvTxQfpraXlUOnpQGBsPvv7U2Mq3YyK+xL/Zb4aeAZpz+Qh2nk7XLuFw0AwPC09F+693DDQ5W5bqNnYyDtNvulTb24u1ucC3jH7fmbF5upKhQGbcRMlrdsD7U0EQEMszHGt5qmHFR7K+KGrVv3Hkqg1BwqoTCDOZ077tFALE7l82TFmHyVNGwQf1SmvrB+Z56pyqPq2r0X2vjchXmhUxBLintfAgIXMSzuFKBXaJM3bi1CR1Tanm/984PhgCOalyhMMsfLyQhqwuBFjJHXyyFwAXimQj1fOcWuQAALPQ96fcOmM7gmxaFzg+54ZKDnIPmpej9YxjO9qlNWPO0MHkilggygT77F6h5ou8S3XsIckagWdnZ84dPo43rZz0IYosXOiZk10pkGp+ih0ALK24spwVYCHQqEl2piNxUxfImwQ2YsdYqXt4VONGCp3PB02//wu9PH8SAjYprXXHhFc/rBV8uF/zfnz/iv54/o1Z2w7jMOvkyZl1/KHIApTLAVIQjVDvpt4KWghPJtQWlEIryjrUyLtcVXy5XlMszaoVGZbiCqnp3u1hstLjKgQIdy1qrhGk3NkcEsJRFWUTuB6sB3fifrEPCBYVWubKCSLYKFQDJoZaVGddyxeUqYbMrqxFdu01+2ExDaztdH62zp30UuUvkiuo6I9ShgukSaXg4FlEDvN6Pfu1szbHt93xlRsY9gMe+P436kNuJ8I6r5LOROh5kDp76X+yJ0iFvKskesZ29sc0Hi0d733zPe5ID2hRxO+/sTBzhnnjJy02UGR/gC3TW+YK3k74ntjDsa8cbUv82+Qf9j/x0Y8zeLfnydMOAuGnzHlZzV/4sL3+r/R2wWYuv2mzsxy2eOyoDJHfZA+W/cnptRLzVnVu0+9FmfW1/5/H0lPHja8LFw68/RUqnco8eoIj7gvhsRLa35Q5kfJU0YLA77P6nSQy0A+/213QIbT+snypzugLhLf106QfwQLd078L9O6y4F6S04CxMY/MWHBTpiDD3m6+uMrRNgNuE4qbqtdNM+Iq/jwpmXym9WrMPjuHIQPRo23sbvSPvv0fKKFC57fNr+Hx3Aj4ftLzpvYISGjMq9x6Eb/bwA8khgB8pveTYpSu8bYPfNvrd74cRNsOW6s/PQQDeu5KHfzXtmxrITdGuij/2Mo1muqLdmrY7UV36RFAiNBhbXaxG9AjTiGaFTrw3Wt13zI2A3TBQ+GNonE8N8xcM6FQgRnS74qCAsCD6qTXD14KmLFaNDAVV2b04wkCvrCfgvcHOvV463z1NsX8PplvLlwF8MdoW+jaCy5+lSjul2i1Yj/Yla7Dyu8nvR5fwUGM0Uu5YemHY+XxjwAyoXR63ha2ZysSw9MdwGJOyri2DQb2j8i9N31hm6jxFBzyNWCOpcwsDXNU4gHbYqG3+2OkmoAYf3fTFq8slfzxApPnCBnIDeoQxeaJPuztKthG1jA6C0eu4cc1GD6V7PnYGU4VF9hCP7Crjw7bhJWl3kXIEu206g0ptHGM/Eh85ajyP3dxNcYwJgBrSumdeK6sRdfVzGIzmFS6svnrjHIoKqpBzmqIWNdJDGVIdS7R1K2udUIOahGMnBavNfxNDCwotYNRAqgmEBcVcdRkS7pwBJnaSw2p4FuO/RKQhv8KFvBNUGKjtgPHGs9LYbvZo8YHQ5zw2MLcw9dKvuuq6qIR6Ig19L/AUsN9yUBZAws03j3Bm8+yOZi3ucSzOb2dEb4DHpUtA52FITovzvfQyn/IuYztniMZj1bfejOi3+PcmTfimP9ozhI8WUD8wzRveH0x4Z0xNpmw/lUeF/sWQ25ea62VbdK2OAtBSUM4LlqcTllMBzgtQ/n/23nXJjRxXF/1AplRlu6dn7dixIs77v976sdf0tMtVUpI4PwCQIJN5kVRlu3sMR1lSJi8gCYIgQICMTMLLE2VIDImAOWdcU8I8J8xzxhMiznHCl09nTJ+ChDAPAdc84zJf8Xp5xdfXF2QkJJ6RcsLMGSnrbQNsIjEhByAjKD9hvQlLjNxmiJartTNCCDjFiNMUEOOEKQpulzkjhCvAjDkro0BEkUF1ySEYWQcg6ZqFLHOgeOeThJWf9Huwg6NGHxmsp2KlW2WORTBClDDscSKEKQCJMDPjol7sOTPmpAd3jBYUMQvUkTNbTJaODhjAVXnDqb7iLllQNdy3t7pOjUhrDVamwRIfl87QzbKelcfkEzny1WcjlQAPf6whdLRRa3l6PtbvnRZP4Pk8A6AniBH9SfPbNWwW4r2rrTa/lWHqWU33PJBb2zvEFk2y0nOTjh3Ki/z2aQewRmVrRhGpXD47vMPlOIzDpeK1ZHHL6ywW9FTwWHnX4TeKTdJ6799GJ+We2TU5amdO7S47bt7sonkPid8DW/V4Ic3W1kP59god8Tkrs2cug3nLW898vqW8sguLOWfFHhQsvte4HQKTu+rvO4up83LXae4m4esB6MfbP3vfWrw0OmKnhsWIb/you8ar+rRnNgegjySumwAAIABJREFUyJ0dv1sL4e7SvOsIeH77s/DL7wGlvVyFVyXEur9qO/zv1Pz/NPiJDOi/4DjoLGXADB4milNRRHbJG6XHRrH+04Bq+T8OfrGZ/2jwodwBYJ5FgVQIXx7/3/Nn/OuUMP/vHyix2jPEUyOzhGgmqnekG115p48eAoqiARe0pPhErYe5wdwJMgaL09ArlfaPf5F/hUa58IRi4PviDeaqSCvuZr1GAu658VPPALkKP7YJKd7rjuAKCenvT+77AmE/5lrGIhZTr74xcEZyC9luGrzG+FyN52I4N4NBUKVFBiEiY4JoQCXYbcHlVoF9FNb9PcEklFu80T14tN78j8Emf3EN/MGN96LMtXcj1Zz/QxdO3inW1DsS+b37eQPnzaav8a/u+VYXjt4tmmd81D8SY1K6OMXA4hBPX8xav6mifSkwrRS0BVsN6ultq1NuBduhoa43Jba5Pcvi4QpSh2Gud3iXcNWurMKi2r6RLHr3q9ci98qQBV9wa7eTXdv11/PFvTZ3Slr32fS049/pIsbzVqmsV1osXMcZ6QqIxzK78zRVOd0oyosCd4BqN8U3WlOTdKTkuccRWdxWi6o/Ydg95BImv+IcoP2QxThGSYy0xcBtewymtim6nzC8gq1HFuKYqAQXmYn19mK993gY/USvWXGdJYbhAEYAc0CzViECYYIc/JiakqJ5qYd63UDW6wQC1KNd28UEJD04ImH5udwFjpKONKz+2phRmSvN+JCkIMgKbNfJyB3nBLvSIGfGdZ7BSJgT9HkA5Se5PsCW59Ir3lhtFUkI4WWExH0eZtceNM4TfjIV2ONfa+nfK93RcvYWno1nno/esRY0Nfdo7IkUgYDTBExyXzcp/w5qQJ9OE05PJ8RTAJ0CEhgzEhLLHyMiE+EtJfz5+oYpfQVdgBSe8IkivkxPOE1PONGEp+mERAFziHhi4IkZ6fd/4sunM64p4ZIS3uYZb3PGNetfYlxzRpozEmdkpsIbCYSJIJEukhjfJdR6BOUJ4cxAOMtBG7LOsHUkIwCYplPto6IETmDOSFAvHm+kJJXJicBsc12ERuHFCcYNmbPc7a73r2cAITMwMQIFnEMQ0TppWPoMXANASAC4zGKvis8McPbHWQbrXT/+/laT/l37xYEJwC7D4SnT4dXnbdb50L9oiyHqkqj8lEbzxeNrz28V6PvyHA9mSFSGnaqbuWhwtiazfH8DLEJBycN9C6j8D8j6wC6FBEHgheHFG2d6w03V1XH7V+aAw4BdIU6u6XmUDz7UQ1Hi3yLW9oiXZ0fzCl5bcCs6x+rl+lfwWKv5jvVns7z+2YCOb4a9vUUPt67Vt9b/vaFjlqNQ0A2t2bgf2U98MNxIZp7/PCYbeRo4snM4Ao6x3lycCbF7gtAHwI7Y97eCUfeuPfsu8HftaAe2Fjf6BUfuQH3PQL3G7gfMhV/wLvBOBvT/gMnxw0EmWXtfUTvpynpmhpCSxKftN1KLXUJRrFV11M4Im0Dui35EPlzN+3egswfa8EjzG4msFzD7tB1trA7MaDX+qDHqyp1fgdNneU4Qg0GoZsI2uZszEWqEMu9bLwyubX5yyd6itNFWmwOtPni1ObvAPhTg5Xi+R9fl3gunf+cMV+UUeE1wJxIjBlK0CfWTnlAUVV+iBskgUbBF/bT31OV3JN44DHg9RtMYckom3x5ymm0b8DY0fP0Suny87FcO7e+mze7P48FACddOUQzmL+JlQF8kpHsxTKjQFjhAVJb+sk1peH/C3u6sHZ/u32L23OrJemWhI4/Wk1XhvY/3HSVHOzBjQN14L74fEYC33n/HdW2BRod7aWu8odADihxHr+axs60f6OeFzhd7V77aZoSr3NMfBBmhtXIPV/t7Y8zWkN9ldZ2yp0m/Rk9b9NW9azZq+rUYyuv8Ly8tdDvkcA04dCzI8z0tmbjzsNQvbJ56jh96I/lIseWb3vQpufz2mJfd4p5bKOtSt3kTq0FUktbnrYJ1NO6MsvaPDlqR8ywuvBX1t//eePCOe8S4e+4EhhFrPAzkutDtCUgjsYSy+OVyp615W5Y7iM0Q7eYVEVcPOADFsKR9TeqTaTerR5KxSWWdCSUfADFalzW69QAnRICj1h3cWj6BEMFBDoqxtouCGKkp6J+OUtADcNSse2I0CQQ1bGt/U3be5FT6gz2/kY5Y63YnOrATOSSEvNy6Ij0CTkgJYErImUEkHrORAk7hpIZURyk+NACsoirfDCMCtpZxmavq7Ug6B6S9Gk2hMey4YpryXHuLKHJ0ke3x81k6/r1G+IsqcvtimG2L31v27CZkx6P6H2XvqwOshy6MD/qpZ9lGt1QAKPRPpwk4BcRiQNeo5ESYzhOm81kN6CS0kyHe2TmJqTcEXGbGy7c30IWQXhk5XpHCGeEZOD9NoMg4MeGECUyE83TGMwOnc8T/4c94SwmX6xVfLxe8XC54nWd8U2P625xwRcIFGYnEUA4mBMqIgeSgTWbMnCDW6ohAjJgIMWZkG1+u96KD5bqCiaKMCRktyWGenBMIGYh63QgIatdGOSzLABCVfCovgXmsZwLnjJwYOSXkxEhgxMRAnBBtTAIhBeBCAOk6yjbne2OoPmdQ9UQu+wE32LiiIQY+gymAaAK+vdY1a4MsG3BzvBY7ytSt94PX8pYq+Rrq8H7C9XjA6sweVdG3y6NV0nTv1/bVZAh3a2NlPm1yhhya3bnMvK4z0sLWAO7bz+BmX2Do1is6bPXqpcuqU6/lBcfGWfuJLQRsWWesfY5hWNpsnuQOpUJyVVfIhddXWWc5jpWgFqJdScIladsBfV/x8l2DJq/Q6oCGV9L1uO1GS9t7vfN+2RdH6xjJ5mtI7Ly38vacL9beFzawrGhtirRJR/Jtl3DBlNbK6svl5e++7sXvrcr88zGqd7xcL3OBb/+6nzs7NZTiDhHFep3dvLu5vC2aboq7pdydvtqq/Obu4ObbjVLpuMRdXsFt3xyttKRfrB5ANz+Ylwe1fDFOFF2SwFbd7wFraB+tY6+DV+E9Rrcr64bw6o0uwPPDvj+G/cLvgP57DuIvOAI/2AO9p5j3nAB75d+xmPxwMHxNqccARFlkYnu5U9AmZQlvybBNPtnGnnVjueh29TSxzXDIENeUrOHRfAhMVE5NpWTHTIwRbQlfPyn4Da8pSR6CH9nuvZWsF/S94mhr1e375L3uDxzAC4uXMSAe3lVnWGjwf9I34OuLKjE0xiqxOtqqwTxA3At63ImAye0eWcvNBFw65ZyFpn6xzF1f9ELQZwBfm8rGbSzZqEvjrRrP2DeivweteZdcu1fbfvdCXsW1Kl5G9EGL9GPwfi3KV5iKkpHxDCCAfxNva7bQwwGoxmSrx90JTqKMFi8841cEcICE9tUQ6HaMP6qXtrcn5gSzMlEp29qbIIYVu0i9xJks/LooRQp+2r8lTHJwOgrXv77rime9vWN59hakLz5pn3w2PBnIEqa3uNcwgBxFduMAcAL4irrB6XlGx8PLGrA2lv3GeA8eoVnXz3vCqM1rAABVKWjRZvs9KoxWvm/AarKuLFPS5UGGrWtX7oW78w76uSiRrd/8utLt6MyWVspyGsWF8kd5OKFuakjnWLGOWn2urF6xYzi18ccHcKRTHqHXdkMsH56XuvXJ+EWPl28TCf3/qfl+84d4NLEoGbNSdO2z4tVn93El4y0i04n7I+qcyQQECRcstZMVhaUx2vAz/m282bvhASWqRt817nAmWahvmmD8h5PzFi5VZ/hwafaPOCuPS0UnTUqngawtjJSF0DiZ56+TafWubPOMRvE4S74n9L2FJhY8KAPB3THu70Tzm29CLtJ82yF17qiZqZW2XHfabd7moMk2QGVukfYblT0CEYGy4lAcvVnHNjfZ2Y+8/pch67PhBsjd3QxbLrnSkNK09S9ZGfq8LCv2HoRU1hOln6Ae6CGAYnB3q2fxJNdw7ROdQIhStm1dsl2BovcYMCNTBpFEJMhEUg70UGYRC6kEkvcz0q5AYDO+ag+Il3kQmSAmoRNW4zwbDyLwlZCSjDxRkLubA2F6kggxjARgLvRFqJ6XZAPi5o2ddQie3yKLDJyTyAGcwTkh5wziJO84gSiDoob0H66HvvXKTZpkGtJfx9SblwTNXlZm/I5Q+N8fw/r2oJNVGt6+VsboeenUyv8KnuVFTeqXrSLKEZicasVkPzNoQecdRSDW64UILJ7np4jwFBFjvT8cJGx3piDBra4sVxZQBGNC5qfKCzJjngNeMnAJGX/SBX9MjE8x47fM+HJN+O31Bb/9e8LnGPApRjxNAZ9jxP+N/4UpnjBjxoVn/Pvygv+9fMUfl2/4Or/hjRNeU8JlzrjMCdcry7aKA2bOuOQJl/mCCwLmLBEVrkR4YyBcEyJfwFkN2POMlAnEE84hgEIGx+z6VCglJ+GHcj0DISOqgdzL+QBITmuWm5uYAEw6jzOIkgQhSzPyJeKSGTEyQgTOMSAp48oMXGbCdQ5Is/ENoSm5EMkOX1cunQMklL4NsB5Kk88ufDsxWHmYpO/4vJ9iDLSnUNnJ3FT6qA1/jTZ9KczBp6eaYn4FKIno31TDwLPb+GTZC1Fw8/dV55qXT5qtade28+x+Vp/+ukZZiwx6eadtJ+uBCUnav4Pu01HuPW/6w+6xL/XY+tvJrUCRyf0ZOT0XJblNRulQbLgQt/eRy/mt2j+1eWTClHz/pEm+aQKVGajTtTQRENjJLOzrsTI603svasB1N1t5Dqdmv+W+jK4fG9ZvfJYWyWsae9PvBZZUUL+y++QlfgO5/sgK0587PZBjpd6BkNv31SrQXoIdGOwhhpUu65Cae93eBi6rr9bq7p93bc2LQT+MipTWlj+6aGd5kEf/Wz1Et1L3lgFwtMex5579k3txr0GRRvTSITBqD3ySjX6nJuEg84CPtlLzev5bmjxMuzxcNATPwD3fJuVxiyI8ExiXL1tWW0t8JXugu0DVS9YjrD230/WDPcfnunb2EVBGqPZNWFly1/p2Uagvxw44NtDT4sqc6ml9r+sWyaktZpefulxlWer4ZJkyrtAhKzWdb9fOZAl1Xacg15bpOlyXuAd4u+nCfsF3hZ8ghPuD92tuCEbL556h/4wEd5TRVtxZj5wuHKrKgpBdM1lrCbq2OuG1F3CJdIPHEOVmfSYeeqaJqvmCeZMUDJ1moZwSzjcIBLsr943AtrphwRy38jwqt/4UwIO29ivlgojcq+XC3Kb9ICjFrwxUMdToov72Apyf5VT/6sCR0z8wGmVbMw3YpXWCbDPZfNhRV4g3Bt3dRT3v8vCELSP6bpUrpxfbQjzNmBuj5dW+cWTDbILnXp0mVnbCThFkPC1K/5awq0WLH8BfIhhBld1Q44pmC1T5lQ42l7GScswLz4QYKkoFvT/cNCQEEXgyq+BDcuciBycomxgbwJjRKhtccxrDvr2rBn5T0VnXFsO8Jbe+D76NynEjoRj/rS+eJb3YzrQNcwZe5HJLSgzKAZQtcoOPckJqgGf3hzrYcP2trb8ZrNgybu6d36+f/PM4qC6rwrSivoSVydiQpY1Js5taS3wcLPk04jVUvw83H12a94RFVY6f7rTRlNxNv1ne0YagbLo0bTkj49eZWoZ5wDYGF39wr1+uGhrtcfdMyrfxXrhVNhmtn7p+AM36WhVV/YbT963jH7b2EWOJF3cfo/ekkW7N8uDrMroLLkcGszeTtqjU3ag+C55vG48KXX9wy060LdRHlIUpF2zNbw9zclGcmoGyyqmsxnPk7G7EqOu6lUpsPN3WBVd99AfplJ8SiXGegGIq9F5fmpsyl5DmWfunevr6RrIacmtVARBjvaMvGSoquZpxsK/B9zEt/m+mOwDKEAMJwy3MBASuopLSR0Cu6y4YRHIvK0PPm3WGcFshK2sNCFTDm8v1ImarIN3bSDnmJZ5BAEUJ3RsjmOQuZzvHJmRmu4+kY3qCraw2Q7J62wuZ1UN6idz4kXqWKu3W+891TXXdbWVT8fwTumJ9y8gAZTFK87WyIZ7AiNBLrGGHPUAEmhh8YsmHWSvLWpuOjJG+XyvVuz2QdUu7/jNncM5AnsWz1w6VcAY417N9Oo/GcGB94EpabERAKL0nh717OYLxO4A/QNBLtneqWePje7x9hU/6Yr1lnFHlC/KJ0Cx3NgfsQJC0To8QFCWX9QUpHwxAUGNqCAgxgKaIMAX5C1EPotQ7yXOG8p7o/uRwe8gzEgekDLyRnNh5yXLj1efE+Hyd8QWEf4SA/5om/PM84b8+PePz82f8A8/4PXxGnhhXuuJfIeIpAE+R8WlmvCHjwgmXzLhcGddLxpwB4oDXlPGvN0Im4Krdk6HnjwEZz+tVZdAZlAkhEyaoJzbNyCGXs23C1uXAV0Jl86yRlsohmhKdJsPCcFOJukQt/WQgcUbKOvcTIQTCHEkOrUAOg8yK6jyHwivAIvMHKx8ZmYBME5jkLvpCs0Y3pIZqzgBfHV9lIE/AW2eU6smS5vZZw+jLondgNo6hHtwyOX8hVJU6iveyP3tuB8gsebclZcvbPig/JW5JWc07DIZmrha1nAdy1Rbw4LOVswr/ds8W2WC91qymG9VW43k97FAPqJdiO90CgMrbz1Ajur53fVkjjFm2KrQ0V9Y0ODkZwLdgMV5r6fpGOhm7bVRXrxvp4frSrzsb1L04fNK3dcTnnew8qr8TS5vnfR8syt6BUf6j3vNreN2ESqtvXxzSLGGFV7IX8jyCc1dIg7+vbweU8a/68QwraH/KiJtUY0f6uEFlSSruRdjA04sga3NtlUe5dE0SR5838Tdf9MY4DqCvRuTKAzQNjOthdONr885d37RaPLfvdsS1W9AClm2lPrFFZVzMOZUzekQ6XIlH0UHaSpdRM+oasTyqMuaTley4RWM4mBufw8RYitc9ffdrxRZ/3KPj0UQ8OM59eloprsel7KcVd5Pxy7669OsKAS6i1fQLhoyq7IVsg8oA5+L4OjTM3wR9vb/ge8FPYED/BXcDowgX6xNvTcGwUWaTW5VHAeqFnro01H2ulauCgFeA3wN3yhKCg/u8tZwbu/EXfBB8zXoXOgGXF2A6A3RtxzMAxdBoIdwi6d6B3fkTt1nNmt7CAjaccbCgfwOqoddo2glT5g0FK4uALwC+9qv6QNAh/+O8kf4Md7S+g3uIfA96HGwTrN97xaKH3k1nsXEyYWPwlC2s7DOKd8AX5yVOqMbkUgehMfj7PXNpTrs5aUjClEKNFxK5P1M4Zfe9Yl+NPIP+KFYhqt9NYDPjd8lGNXuofzU8LdX2BVL9HdV7FqcowlrOlYdp9FrKltW8GfKKoP4AzAc3oUchx/V3a5u48t4RgX9hOEY/z7vd96i8IQwS3LIBvrf7H5jup09PJe/19TrGY2uj+zA+GzvlBT/0sFWBe2fzuCnmUVp0vJBHz3s0erob0OFDYJ7nRuNdPYVH30iLw2WKG95ZDJHvdZfX3UX4E+D6V9ZlrvIy4N7Z94CqUNP0OdRlAKzGUbvORU+RE6twTCV0arlbtfM4M0OHU3uU9a18H0ExkFTzeRcPZ7BtH8PinVtqqHlM7RRy90g23jyLAkU9WYJFQEX+7MwhzCC7J525qZshoaoZ6nTEdqYoAxQRQpA1LYoRnQMjs8pvgUGkhy7sYDEY85xAmesBOSYga0hnbQQ380Tmj80iuce5/pYsVA5JVKO5Na8enLCSiJ23PvfBkZVGuisAmIGcGXHSCNW67jMxcs4Skh5BbVtc8Cr8jhnBHSQRMsvIWUMRZ31ubXXzo5Vm1mAtReUDbTkaJp5c3iJCO3kZjN8Z+GOVnWxhxqWPj+M8eFb4xqCcPTbHSU5omEyqspqYCzVvcZN2MqXKmlkPVMwcEFJQ+gIyAjJYD4xSPfAEwAzIxIzAVaKzqCPXeUZODMSEFCbMISAFiZiQ54x8DZhjBPgbXhMDJ2AOGS/5ihdkXIiQpwmBgHOQyxOeMsld6AlAIpwvF8x8AQXCKU64JDGkz2BcIXOxxDQgAgeJODGzeJkHsCowda6y3Guek3miV2/34vVMpBEqAOBc+TvXGVweZQgfCepBnuQnEwOJ8UpJeQQh5Yw5sdRtpwCgh3qgkTOmIHxlYt1uKmGUuajjnBnI17o8ach78Iwa2ioPJp2PAGZwi9wQXRndQv7N9o0WxaeXGxSZV/MYZ+CsaS7ctLGdDgO8GsbZvi9ixOoCpi/elo8AiHf2ka5YM9Ruya/Njx2hZGQwa3RevEznvi77r9LtbbzsIBzqs410t1T9AJp3FdYk6YlrDW4ROo+k3UtztD5PL8dW5bvHjI8k+g+EvaG6p8vee/v3V0NgwV/fD95hB/r9YeVAyu7VFB0c5XaH4Whh71Xpww04sFZ/CKzz5qq+0jQ8SvmL7/4V4W9kQO8JcE9h+Tcj2FFzdvkIr897E/rV+4N0wwtQewCraIVWcCrhVm0jsVLfETDFyCP8sShssM2sF4rvX/DTQWLn0cko97nOr85QkNCerr+V+Fb4RaMQoOXzUVVHg20wIC63PxPt9Xy0f0fLtF45WH47lrE6FF4JZhqWGnKwhPHX0opTOagqLY3PFAN4E+CuKL7NU5FN8erwbBWxVclJqpyv+Ld9QhKUEARW70tT5gGL0PK9lwyZkg71FKQmRQAQgzrgySdZGZqG9Vp4fGPgS4SEqgc4MDCTpMliMjCsqGr1tgblcfBk4g8v9HNmQEoLXeKCDGn8nbbo1qe/o91Hp2d04arzCj4jXakttDduolZhDd9Cfn0CNxj3ss5+LDf7bEeZOcy70ahD6XySjh6PwOG0fcLaqGoevbMoasvry6/K7m6ClSTcpvPFlDp9GSOUPK1UfkZ213N0vyOU9Wkev3z2y2zq6lOZ0kKTTmcAmZAuFtnI8TBnuC6egfZKD8rZVRu5RGqqCBAyJFKJGb6zen2KpyNyUDtYLqMnBhhvGDcUWNca6632TtKm7hEfPAi0+sOGjpr3Ldesv8xLR1DpaNPaZWPrUPb/N6y3a2fpH/YHB1w95GtlZASEQIhTBKYJiBEpunExg7y6XZcbaZmR0iyXjrNFjUFdVO0edLIuL6On+HDZcywc6/T9UMllY2t2Urk3yJXsaJ2VbnoFucomyaKrl/4Ug2xQ+YQTO+RsUOuIEIvBnbNcbSDe57rea539IY/bYEmsFlmh50al4eQOJDSieZ2nv0ON6E09vhz77vtta9KMWjYaO/edVtIN5qeImgS7194ibVCQMOwWUSFDr9cJJrvFagwPAUwTMia1qVI5oyl2V600BD2Q6K/XsGgO4tcL1iORzMickCmBc8RMCSkGpCgG9BkJl0B4JeB6DfgtXkEnQp4Yr/yG13zBK8+4MoOmgBACpumEM6IYmBMjJ2nK2yx3t88gXDjgkgmXlPCWE64545ozMiXkEOQ2DQISMxISQpJ70qusJAcOck7IOUobM6OEVtU1hCDyMNshqELDwm9yBiQMOte9gR48kcwMnlPxGmMiuemAWe+X1/HWK3UY1vcMOkHzZb37XYkh6x/PAJvxnOvyxFPlicPIyEOBUN8fmaEbB01vKdPtS8qkK0l9HpbD6n2+PtngvHcz3Z5rN5X63nyqdv3C60ZfPHnBYj3Z9l5iBdEuaTkwVWRIpcDcD25fXl+oX1203BeX5outt1Su2qFvaLunK9KOa7XHtjarXv8++r0KvJF2Q+gD3DzlcZo9nPZwXKP3Wxa/vXm49vrefPficU+ZR+talLs15l3+e/vnu4Nbk3pYCoV/WVh0+7BNnT7gZr3ADn2M5Kw74I6t0zrs8pLxo7Ut9DIxt6yO3KG/nbr9TmWIyrFBXcFrp6weSfYYvSOsyibLungrfV9md/AZuEkLcwDcHlZl9OFe8QO67Bd8H/gbGdBH0LOxv8Eqtwojlr2ecvxCN3OBIcqmlkFTCOK5YAqLwNVzd1i3aZ3eqd8b5dA9+d0GdoT2L0b214AXlo1kUoVIoUO04c4YwBuJi0M0xZPS0Mk2uhBdxVVp1J5fijRTBQOLXecVCCUMmhLWZyWsf+n7f9akJX5rA70vmSLfaB63CPMJ617o7wkbOHD3Y2RkKUZhLcvmMnMnhD+JgSLbRL2A8SQKgC+iiC6qHCIZHu8l3t+t6/H3yg0LLzvWOBTDt6QnCdlOBLCEbpTyGBqao1W0hmJOEUWmU9pVg7nhS2jiFGs4Tirh2SH1aMh2igFk0RSKF5KlVU8YMPA7S7nMIIkzWbu93NGeAZ7BLMpF5g2l3XuADwc2KZ6l3Rho2x1sLW+bm7itTL4yLSSF7nn/3cbEKca8ou5tb4M4gFG337Vk3phJ0b6+1ANHnz9/Bgh4uV5qIuOFW+NzFCXf3dsPlwVsJXsP4G6cgaqH9mN0i0jTpxvtqqv1biWjW3uaaBh3glkODhdxXLbchHtDEXoomgaT5fwm3j/3GbqQ+MV42BXcsCPWp1yaL3fFmwwQxHhTlju7C92FatVPABq2VUJkizLbGfzLYVWU3xZJMziMvMja9+SiZ2njJy2fFY9z985TWgmn3hdjhoJdGq6D4sutYTlp8aEBqcFBvHBpCsAUZE5OLlsgIBBCDIiTrssk93uLQUvGUIIC+R40GcQWxjpWjYgHHVXOdVy1btaBqull/Bqv9NJ1esVVID2IAVuQYWHk2U526JTPCUBm5BlIsxQWAiGGCYFPIAQkmtU719G+bdOy9YOGjzfjOdsft3Toxqs5I3gz2BHCjmmzRhNyLIit3xaWROB3cGtE92uQzZfmxTo+x55Z2X7dWZFpG3r3zKMQG0IEYiTQFEEhAiGCKYgBHRB5L1g4cgBxQp4mcIg1ipDiEpwciEBAdEcfdRxDDpgQRTaGXGJwLRZJMVQzMnIKuDLhwglfU8Af8xWfLq/4X7ziE51AJ4AD44oLLnzBlS/IyDidI6bThKfzM87xJNe2ZUK+MsAJzyfgfDqxif0TAAAgAElEQVSBYkAO4n3+7XrBy9sFL5crvl1fcQXhmkUkTXYPNCkp2j6OIQZxlrs+K/twdJrVp12vmmM9ZRq0AFK/d6HCCc3CYN7oxEDOyHqHuyNTuWs952r8VnmeNRKA3UzCkWQLEJ5VLryAk3mUXytp2HrVTLM14XXwzK99y4mwkk+90D/pZeDfXsflHlqa/cLK5WN0EG4VnT0wg3gpy696Peg77p+5sp4rPW3DUdlkxAccfzBHEdS1vybbQuJ2TmtXzHi+vcCOa9piRO9pcFT9DezycH7sbNXWMg4z2Njvl7io9f5F7QfAPZuuvwD8nZpTWCK3n3952GlHs0H4oDpugI9SCxQo6+8xPNqjwevFLVgnH6zq1gbzyudaOo9Q/7uRx27E4yNhD/f+3XvoJFagXhcK7aYqM/Xr9jIMzy/4K8Df3IAOVOH76Eb7rwi3Tzz230rX6HdT7gRhMKSGmpBZTo7nLIYb24T6lbQw17qRKAoJ7xl6D5DVcWd+D6ZIG+3NTLEFdPLrLwb342DQ9xauulkEuRPo9AepRrK6BO2zBC8kACieD0N8vFTyjFWj9hcAX1fqA1BCtjd0uafh+AgjuuucvupeKLHFnzW9+6jvMbD99AU/tWPCQLlD8As1xdtQsBbMzohcPZIqs6HOsM7N2C8a6JphxKIGE6d8l7sY9d7Epq0BNZyxatnMW68YzE2Z3t2zFCZRqhKJ/TuoYUaVphRJryOQv1yuK9CiJSZl4W+iz3GxI5lFoc4JyDPA+p2zG7/vwOdGJH3PEk2QvvB3pK96pYwqcN9T7NL12cMx3N5F53HrQsn7bOIIlDnq5aau396NRHZUaeUO3IECrFpe2kydB9Dq7zZTV46miagHrwB3HcHHwELB2vD/Rerud69Ep9o/RW5yfeCN6CaflQOKRksD+ajnz77qMi6ubJMjOUL4ZBTLSbdclIIWbW7bSd6qxxnzm3wK32s39najdFGylg2/yax+8999byXk2h85oYRfLhtwqn1s4gZY7UKuHWrEBGysK09u63fL0hpJYPx8n0J1PWyUO3XcWzM9Q9Y9eec9oBd1lQMAIzz9wm9RT+yfPJctQ+k8SREIIQRkCkI+MYBilDlJ6nGu/J9iQIyEGAMoyvimlJFzAuutxS0+Hln3nWsKGZZCRc14lK8kaTrfPogRvfY2iPXWZDkWUMNOW7XdyLKGcE9cyE4ct+Ugc6AJkWxOBURWmSS5cP+ZIeHEs6zzOQEp1WdwBvReruWC+UFWv1x8zBu4gYbf2COR2bjLbQ9+B/BHQ+C55U2Lvdre2rnxrs/brDWuDc1PN5YM4XcBoChjRTEihgg6nUFxAiiAKYonOlTWo6BXEgQwniACrhw2IBl42PUEFCHXzRDpDeFyjQHnDKKAQBp5KBCAjMyk7zWMOgMJWbzDc8LLDJyuF5xeI/4ff8Mz6fUUEUi4IvEVGTMQMs6nCc/nMz4/z/h8/oRTmMTzemZwnvE0BcQp4vz8JEZ0Al4uF/z75QXnkBFyxCsDFBgzRHxOAXowRfqhnu1gvU9eZWoA5a5zVj5OgBxKsoGREPdE6t7ezGeTk81TXQc2BzAnzOUAqePvbDRhtEDlvI1FBLDIfIEJTFd5HwJQjOgyD+oNBWrML+dFaKDndao5b4T3dFYgd8vH1CV083DgAVrY32cX5evldZGuHiLk9jkDdO2eHWYc2/ecW0SA0ftyX+l28e2nf+VEJKttDH796oQhzy4KzXQHquDr6Rf5Nt24De7dn1y80Mdph1/bB7ZwLWiKx+nLd9/Q/rnn5+PihljzxgCVXDx+3RjPN9L59w3eK7BHt1v9tAfDdjyQ95F0ODJGtzRuowLf/WuE+WBV6zgIArvFH9or+jKl3Ibu+s+y99rD7yPguPTWwHsfAFiU128oR8x5BYfNdXBnLbgVVvhfX0cvGsqQ97Kw++7aNjpUJUvIuP3U7VV48Xywzvvfe+x2td95+f1DDopQNw0HPJvW0u+tAQNodCJ3oLsCNh51VLys4AdhpFz5BX8V+A8woANLQv1Pgb3Jqae7e1cD2wTYpo+UIcQgG5qsO0jS0Nibwr99Uvv7HniUYQ8Ft45xev0hBs9/wQ+AfoBQ70J/fQGeQqXhsrhbmD0SLmch9cwL9mTpqZXhMouuZgJwcXXbwvdFDbF/2kN9/8UM89wKT/9SLck/tZ6vvi1nbAL3G/Yt6Mt6D4N6tzkFQbW4qKKi9Y/ykZIe7feig9B8RQn/jHbCMer9hvrb+lyf2RWI9l1QcX3lvQHKe98uL4QOcC6eaIRygMiM2Mb3CGoQoVaQLZXVUO0SWl4N5hQ0v96LSaLcL5Hi7cJTSFspsCjoCOJxZN5HgZGj1MWmWwSLXrUopVi8dFIGpxmcZ3C6AmkGJzGas7i4lXlBn9vx+VBgSL0RlZRGDuA+Pbn5GI/eiWBwtE07zJ5yGyHTT7UF6aum1corStMDa+YPBeNtVG/AaE7M2m/P70Yb4RvrND7bH4oalTscTuNRN9aLQRvW7p58RBZYsJu1zdRa/kF/u2tt/tRnvw0rroywoDHEp+v75toct3k2j2vlkz4SCLnvy2I32sr1yzCQSeku9R4snt1dIez+yv2yapkZaWGUlsk/6zfvDNRDWnYYz9o5kG87RQNz0nt+WWwRnC3YsrIFrn/slTFQQxmNqLT5bekHElOXSvm9fW9oqq731B+Q7SttDrf0AfBcn4SgbaoGdCnf+jDomu7W2hDFWDzZugc9OMfInPVaYumoECW8++kUwcggSnLHeSBELVNaFFTR4v64jrylYuN32h2ld5yHYdG5ECARu7iyDLL2SVoTQyLEiF5EFrXGFbbHTtHLQEpiJORs/Uvi8RuTiBFMYMwAMWKQdhARKEQ9bHJBSgnEzvPch3Bf/PUDfAt087rzaK+fPCy6UuDy5e+u6D+s7MUBH64FraK+8mK0t/TL3RprdvWbWBxIvMyJJgRMAE1gOoPoDIn5rR7nsIt0VKDNABDBOYLnAAqVh8k921mCEbG4b3OQQ0LEGZSTyHS6/skBDUKkACZGyox5IS6RRCdnxjwnvHHCFQkvCOAgnuqgBKYExowQGJOGY58h58me1AudEyMi4flMmM4Tns5nxNMECgFTCKCUgcTIV0bEGyISLhm4ZuCaGIkyIkdMLPeqZ2SJgp8rb6Ug/MKuQxAPdYnoUaIpIOmSlXSOSf8xWPqToAcRCJlUUjYGnE51TG1CZn2p0R1Y9xSFK5LxDgLhAtuYBJrAIev1Co6YxLXdJrSTMbbWflPTzc36iMHXMThhdZE26sM0TtOvq4tng3XvEE4une0pDxmsWnArb5dQn44O0z671DTYcDRO+ss10x43JrmRV3fP50Y8psgwN8BXpefBq8UwrHnB2yFHn9Gz6LUCC//2Pc/jvA62JVvXB3fQQBmbBV2O5ghhIdcf0V8ewmMH7s23C0coYS3dAbCuvTP7Kjq3vH9X6BvSV35DQ33HrM2fNZruDzEPC3+k04/A2o4Ct/OlmnHnXbe/HAIdpokP6aGROPw9638E1rp4h0evl8fL7x9kPF/WPcIBsKhdfm5RWZG/KzPpwEWiI3O46xbXopcwINxEcL/gp4G/sAF9g/Guvvcr1d+RWAcL7sbGX9b+TvD0hkivICcCIYhXg51QZ0C88tJSaPBMwtB6jy7vBf+b87vva3InDT5/wY+BhazrBuZFafPpjKXB2IRTG/A0KGwFGiXFSNjeKWdNuCDI6fGvRybC8n6WfXDp6QzgiscnXaeQKJtndhokLkpkBteQfvDCDaqwQwDwBG4mmOtTIoCTnrSPtQQzJJsh3Svciz6cahn22xy+1TOdrbzVofQaUVeu/bH73qhRqOoVygGAaiAQHKIqt4FiSPe4Rg3paWUFLp7o1hYOvh770/tgjRWbF0QSZTmnDL4mYE7izmZ/PpSr4fvhwKJ99cPrXm1Or+/Gj10/mKcT5RvrvgPRInDfCp7X7aGyvgi+fH0BCPjvz7+XZ/9z/XOYdmG4ONreYbIOp8ZQ3Cd1ckUpz6e1uc0baQ5AcsRmdZaIDzyKOPwdwU+EXsDqZOBFH2j6/vQ1AQtF5ui5Ggrr/dArypcjh3A6I1t7wp6X893TnF3zUeiBcDpP4rHJGdfLW5VDi2fpQP7v363OQVZeSYUGbA0iWvFwsbIYUMsJqmeueSXWbb81rw+6sGz/ChzoclKZ/jlMzZpZ+t6XwfLejEQ+QQZvTIEeEdIlkeqy6g7TscND1jm5FzrEAA4kh8XU4JVhnrdSSyBCIEIMQUUEQmYxswlpBG2GmrFZpQB3qLeOnhrVGOU+e08PKubYtzrr9JkY0b3cU43opHNCjiGruofQngVhVEWQnfdoxkL7jYGcZN3OiQFkBCIgTCAENdGj3DGNnEGsERD8QZJyQppdQx6RGf38umGx7vu4f+nY1u8wIzoq3u79Ok5rdQ/e5xH/qvhJn8lTb/ur78SALu7iE5hOYIgBndXAnkFuKZN5wTmAUwQ0fHlg8VOnzAiBEOxQO2cdQgZzBmUuhySYMzjKTeiBgMnIPKunOhgwCjHv9CTjlZHxCgInvTM8MiiYrzxjDgkpEXC9gIlwnTIiBWBmuV2BA06wAwQRUwg4xQlP0wmfphnpfEYgwhSvuGTGhYFryrimhMAREwKuV8b1Im2Uawks/LrOpxB0SWJl7RkMQom0ZNfr6P3oTElpP5exgUalEJI3fu4ijNnawxbqqh7S4pyV7JQurT9VPjSvaaaATAy2qFDligXjPTsCRCFLJe7CH7bAVHrdZPj2Da3hsFsHOQB/Ostxs+aqsXYevbRi7uQZxvS67JXPogQU4z6Bfty/HWhiR3ik0O6DxrX4tdvnbH6v9ov1e7u+bKZdlL2Q9Lar6ovjPg05fA6g0xs1dJD67NR91uQ2sL6cARO3pWT43jN+m1c9Xi4t9886zPbo+BYyX/O83e3fUQIbxDV67R+tzYqVshc0MioT6wS35vF6BB4RN26oot4TbRXe0Ec8aPiClmxPNaDfIYz48dr7e+AWuecjBmGLl/T0spZsTQfQ/lykWjC7G4E9nazU0cEqNa2gYPLLTWhp+l40rX5ATlaQN83H7rxde77g9asYPkhKfq31uA/mFPk8h5Bbh0ftSk395hXPaDzbGz1Em/7xOn/Bj4C/sAH9Hvi7ERpXgZe6iVh40Egd4QQIm8+eZ2VWA3nHDNVrkgKBzXBOBHGB7BYbvy+wL4XrP8gwHhlGY8a+W3zbG2Vyl+5vRz8/Atb68Baa6GmdxmvoJQNn3Qhnkj3xN65CBkgMeV64uELuQb+M8CQJv160XieZA/DPtLx/fpIC89e2yROA3wn4I0OM/i5snq/HEPqyth0dgDfMMwF0grrRvxP0i73nI1yUyM33Ibg2e82jzTfzgi4v9HuAu4tVPbztrnBLV97ZM+eC3t+P7qVQYhRXWw0HXOQ2gniLMzSKNxXvNubghEvtH/Ogszo0JDtC0DvL7ZPqn7Uj+HfQazS0fkKNZknWxyZRA2AWvS9L9BDM6mE+z8B1FuP5nNWI7rzQzAMEDucfDatyZa6bqgkoY/7qPEsnl/GDw24DQGtAdHWn7vcaNCi+8z30nkZG9dq4e4Pn2l6+WHP8grmz8R82f29MbuB5JsN4ftGv5005G8qT0UYtDTb61D84An19702XjPUoIB68AXitjP6x8bX2GcOuiEC9NUOZJBdWanzYyamLTWSHQ/k02vTLiT5XI3nVrhPqnc4+PLW/67kvH01dNHgm4NYgzsK/rf3l+fp4Unkvd2hLOG+B7Oq2m3wBNy0VlWB9vVpL2yrqfrfIvA/Yamo9Z1Ojn3GGSGE3/dvFnJJSSNd30jvQmcRwbkGEzMu21MlZwjEjiVEt1ytXLDR0zuq7Z/scbYHhX4w2JUy/lON5RzMO7H4rkdaxs9r1znsftlznTFa6qYERlB7MeJ+49o0d2oDjw6zySspIiTFNAZzekCkC+SqGUD0oR6rAqdcHdOuW866v4+AOCXwYLPmBijMeDfdJakTn7jnagTlS7yhZKcv1/RI7rE0m5oCcxVM60ATwCeATMp9AfEJGAHMo95TDuIgVl0TQI7aw5oQpsxrPswihCcgkES2gRvWQxTV6zhkTJQkdT8AUAEIG5YzESSISQAzchADiUPgOg5Gp8qkYCOE0IcaAqGIsCLgQgJxwTXIgBDnjhABcJ8wh4YorzjNjCgkpE3IGYmR8OkdMp4DP/IQrgCsz5sSYOYkhn4G31wsurxlv3xg5JzWiB4CjyuZ68BRCC0QBzBKWHpyUlOWmcuQE8VZPorCGrkl6MAfuUE3Dj4oBHdXOrctODpCxsAQWfCxHgBgc5fZ5IIN4ghnPWxtMVkq6AOV+9iU9EWzOVsprv7HDfXQades3IF7tfrGBo312/TFEr33fPFhdgdbhFibj+mO8XbHCTnCW/wWMerzmJ/c3yjFG+Nhd5yYHbUPDB3ssjgzvOCf89Qbt+K1w+4YZd0kYq225SdwoVXT0uMBhJd93WKkegnJw5t78Nz4/VN5O5lvL/om7/92A1z4faPwd7PJ4wUcK/QAEhkU5+n+kv3CEt9xf/nrO5ZsxHlv7fXOOGo9N2y2j0tdavjKGPZ3uwZrxvOf5w7wH69hF4XhBzFwPsP9o/rNy6LZ+X9tw/GjEf8E98Dc0oHeC3n8EOEVCDwSMjOg+6+K3Se3GkRhqk9INZyA1SAaIQlEq5sxOkYolX7CN3r1D442Ud8Og8tJ35NqPn14e/+7woMDzEFD3abT0NQH/QN3nHkGR/ZeOHk64Aa6o8Y19Oa8APjt8zwBfbqAnV95XyL3pR6B4t1tFAdVYfWtId5trgkeVC7j+33ui+3f9XLIkeFrpAgJ+88oKaj7KAHuPczNGFwM0XPjzqvwwJTszVGlGi2qq8bx7rhoaDgywXmGh5g82o03pGlM6UdXsFBwDKAbxrCMUDztAQ7AXQ3oAR38dgPPKLGcB2OkXCDVEsTzkxMXrHIklTqYZzucE/Dm33jBFG2P99tHgBHILDGH6v5HOapif2p8fCuqFRC5U9OQ8VLKjAdPVpYP9+F64d3OwPruvgv/5+kfp4vAkitn85tvkDl8sENmr08qxMKb2eDEp9f1WeV3EBJM5bP77wzxFFnJpbyV3hsypdj98u6ywdpS8VIJBv6yAH+diRB8wX1/n2oGJwigH+C1E69qB5tFrATq6120Zo76irs1N27r85QsDWb3jFGcySyQDYjRUYxADxahuRnxropXVl70qM5uHY23sKKBqfVLrL7i6ssWM5p9RzUNtSX7mLGockMlWmrecdC2yVRLiNbvIZ4cFBLyZpif9LUqllV+yDHXrpn3qmiT3Fkti82QHUNdGZuSUMYMhBxVSGUK54z3oWgq5girXfD1u1cNcvXTJGdHVCF6uSVEZqJK84Ss9pr7vIAQEVtO3M84VI3ohBzfWbF61HjcCl/uIFDIjZwkzfXl9UQdcAuUZlGeAk5J8UgztoEalwVDedJOz65+bVpNm/VnhcxsFVkzcVWH2kLwnuhJFM383gFfSlOeuLuNv3EXH0HotXCMA2HUEnElkQwpgRBAmME1gRIBjvf+8XBGE8mkh+pH1CotMCEZLDAST8bTaDLl7W8hSyk05izc3ATEQ4okQ54AZCddrxowkI82MQJMeiJe/KyVkZGTKUn8MCNOEOEXEKLImc8aVgTnNmHK1Lp9SQGLCJRNeZ+A8JZyDhFJHvoL5hCkGBErgQHgCIZEESUqcMfOMOc8IJIbwnAhzysCVkLPio+GkKk/3Y5IkYhMRIuRAkkTRzCq/W3h3kjkdZI4zBTCfwf7Uf/ms60wZ9gxkbnl5oCCHXHXuIejRiGyHyVIRmSrtXfXbVcs5oQj2tg5rcquLQBCPfG2vUSwzRPhk4KybWH8IfCFDebnA/zZ+2ePq55cTHfycuRfKqaUWNRq8bmsZCRgebDPvQuADTYj2Gi3Niuz5lS+/lYVq1IMlrNzsjsIr9OvezcyMKhqNXvpXN0Ws2xqyo88P1jfEvz9E2TTEPRiRrZeJGkNUP46ON/fFbaF+Lykf6o8Bzd46bu8Bi3J8B/H2tHovBHbp7L0au12aretl/mztt/p7lvvP94aHyr1xEDcPNj+KQZ2jh/jUQR7U85ZmCXmoKaO1ZcmTqEvlpWVuntaLFW3tsEPYS0T7ekfjuDK2a3Nnj3f3+VbffyDooJXdVKlzo490mIR0d5BshZb3h8WQOApYlZNc27YiSP6CnxL+hgb0/zBoPNA78HJlY0TnLpF7bJq5LJ4Kcg+6FqKGKoKEI+ZSby3bGBkz103nQL59qL0fAb4tfjH5Gbwx/yOg37iO3vXvdbyuLxL6OqvgH0h0C2eIMsqyZ1Sv26ieAWX+UC36uiI8cP+dUZR35v39BQA9A/+yxGrA/nIGvr6K93l66tq0Ay8o9nh8ZQ1tPgJq373os4LHHfeiD71r+8nsN8KtYCPz9QlMquSzZz5ca8G5U6TY+1K889oO7s97cPtwjE1oRurmso13cG2kZdMCKbqO54Vc8bJNh32SeiiaZK33XZJ6ltun/YkSj4oClSMVL3epX2ia1KPdwsH6ux+Z3J2tSf54ZtFMzgm4pvK80HBpstVvfYRjpNkY3x7kyY+uDa/ea5vkXAusTC342ad/jzXkQaQbFN7T61wH8C7UbmmTpXskjvmt4/DgWrxZ3QPjaWvOaJ04Vvk2eH65WqbjzUNPdM/jBsagtaJ72c0Zser0Eq92cgYIZgCxhis3OxNR9bLebcowjQqpKpNSUWhJp1/fLvLb3/Hc8Ggtw4fVHmrD+g7QfrW7M0qkItYuaVVFPZiBXIMNd2m5CUnuMVn7vUepS2r25W8x+dHzlgjqt1rO9rJB7csiGwweuEM0TOQM5PKM9M5aM1Ya+eWZJbRyUm9vpRMCIQTxBratDbF4kXJ21Q9aK++o0Drb76bNtqbKs2DrOBR3Nm9VoRG5+UpD0DNAWQygmVgM+1ayIdqAeJ8n6BE+Rr2b2eSBLHRKDCDPQLKQ7TZvsvYLL4ak7QFrEym5u2eM8RzucB3/XjLHnpbdjBMRTmUftgMF5F5aWQ2P7GfNCkp7z63cPirHGiv2PJIBYtsry7U9HCx0e7Wz2sF0IWubVcYNuO37RuSWIy9Bj2iUK30YSAGgSIhTxNM54HwO4LPMkWvMuFyTnrFiodcgsl9mwkuekZEldDxB5g4JXYMImeVKAE4JuRyel/ZGBFyvhG/xDecQcIoB50CYAhCIETAhUEIIUULDx4ApREyTHNy4pDdQAuZTwnyKmE8J0zWCQHIfOrMauZOEus/mmc1gzGVBCgBiDJgCIRJAOEFqEC90uXpCD4vo/mCOCddLlPKzrlF6NQJK9Ah2w8t1XjEjlP2GjZvK1OEKcAQXZwM0fVaH+TSkWmIbeAYWaSLqveg+14zbVXs1Pyu/amKn08qcuunZSpKtebmx0C05iYfRSXjrk2t9dJQn2P7h1b8fZ97nja6SI0mPdOVR55LGiED7Za/2D2++35RPNvntjembGpuZU+WsfqHbvAN9T87+GeGdcN6g6XeHA9UQ0Ijsj8HeAn4HLObAveU6RrfFZu+Cowodn14R4NFzHNiLHoWdPEWoaeF4Lz8yzvt5x/u8+qJMJ1qSyvE14h3g1qp+pKPc4R3uKN2ttP4BsDhkaxj5+dTj+BPg/Qvugr+4AX1EdHsqqD7d3wFskzMSBA9KyD6ZN6JnBgdWRaWUSyHWEzVFIKey8ZK9uW44G2XHQZQ+EDbDYPZ9OPLc/zuRzS2ws5n92IoHiPgjxTOAyFhcYzDjziudrRwGzjS2OzMgFvr18HACDp8vzzgWUr3RlNUu+Gqf3BnR1+Z6v3M86/d7vNHbwW8UsK676vzh9gUDzZ3nlu6LU04W5ZL9dkZd1HdkntoW6jxQDXuOAJDcIVnDM1Yfv1KR826r+KKWx6xeaiRGbGWKRBGcxZJeQqI27eVi9C5KNCIgTGo0d7ibAb14mBOYWJ9JmaY8RukGk8b1vlVhtvI3s/M4Z1GmX93zDPVuKp0NH4j3h8xvGxSzeZD7Mzi7H1dHX6/f+xJqR7+vNt4Q3gP72RCzfvd4fo875ncE8hvHOb+Zgd9n1HZQrO9qHOIPgo4PjcKNL2Bvc+LG9BG0irjZKcd38zq+cyStS7d0IO9kl4UBrmtrrzhUnrMexh31oEC3RDV3ERetAYqIeJP6ipfd0XBpVm7eGM/NSMjufTWwjP6olti98887xIo3rPBtLrKt8uQuZ7u6mHG3f79OLEXMqcvALmmt9q9bo73nbB1yQuYqz4TgeVVdT8swUy0yuwo2x7d0LyuJ+PvV+0G3tVHqDRQkLYlBvCkziwGd1dhF5U/yhRBBzMh2MXrSs5WuM0nxqs/sALGNLFTqMemn9x+xtK41mjfYfcwW0acjx+bKKyJHF+pxTj4TkC2agS9I72m26YA0Azxrv6Deg65l9LQ08gyKJdKK0brWk3sT/I1gbM+a4ICAcl2PmYklhD9LCH63r/yd1AtdGtCWT30Lxzgsam+09uRkL/0sJzGgvGp0lzIr+darCJiATBnZYn5HOFkRpZJSu4pmqfBlPSOcs8iJBX87sCl1cGBQCGJEPgU8nSOIM+iUcZ0CrheRq4n1UCdJSPmUgXkmzBkaccHOpeq1AZmQMou3+JyRckI9DsWIiMj4hglivJ4C4RwIpwBEAmJ4Q6SAECaEyIgxq1gs8zMxye1Cs4oSIIRAoEjI5tmf9SgS53qggiEMLDAQSM/VMqYQcI6EOAFRjfgAI3NGBot9nOWgzuUK5MRIblIy2zVHFnHEPvRdmWwaWcJHzqAsnu12ZUoT0cB42rnQGinvsBTlPG4hinbB7deNhpSD7fPS4GVTDIYym0WoMTmmIARDyuHdzIxtGOLB9X977+dB86ID2prdtns5Jj8AACAASURBVM9eM6RfS5+2XuAEPA/WIofr+Gn3bs0I4XmJFze2YKsPGnm4+1wtrGvbGq5+rV5r3w7+tPjf1tBB/s3v3LVvi6+3sk2PzzJ7L8z2sPJ+z9A0fE/j57z6oz7jtbk2Km9lPj6wzRlWtWgL79DExnsnd1XZaVTHvfDIHq/jETaP3gW3RwdlDZRHj7Z7TbLR3O7b+xAKx5/3i8BK+jXP8/p+jYcfA+ERvHhm626hT1dFu9erD9mRyqGDToT1+buG71E6HI61fcf4Ox54fg8sePNgzSrvXPohux3k+yhPdCU5o40KRZgbkPc74/ALviv8zQzoH7UQ/eRQNjnAwoi4msd2a4OFyvZOZiBiVyJB7kHXO4Dh77jUYhdh3C0rvY/S5fuBE/Z+eaL/RNDR+JyB5yeUTXNyks2sCoyzZrEw4SaBTSw0fGXJfvF1oNqaP2l5f2rdv+vzP3qifBKlxBeNR/0VLa4WleGfJHgt8q/A162Xe3N+gOPhyeQ3bWtCqWoyiLA8IHB2KCiexi5+89InoXqSAzVMoZM4iqFZLmMkdvcYmqHaFOz+GZmKRBVXZlinvj2eJwaou5i+CeKFk0UxXw4Lsc/LEA90K8fq13DtUQznrAcAEA0P60ICYtaI4VyUcWUTWRQJDFJFMmm4doAlZPs1A4lAKYtzSpL7UcmM56JhBX8C8M1w9oKol/LeA4bbim04uIQdKsdQ8F7nJ1d4H21iszxHg4sKfiD46s3e8ewCLdtm7M153vQZqS/oZ4WdzVT57sfVGwIbYWmQd6tcyz94ZNFPVpIM8+xV3aTvduu7BarCjfo01vZBP255ujMVO42llagiXDxtWyN6C3dwgSZf+VEODyla0vlO6WOGjdw8F56dVVluRhcn35X8vRbB91VAjRZhB48EMcWq5C63bTTtzmr4rGaH7NKPoMSmcEvnEB6duoOxH4athoTYK3iRtpoWZojB917+l/VocahV12zxzNX13F2FwrpuZ8VnSc6OHk2mQBCDOnMRNagk5QYBsnbqlI7NKGoAdKuWuVXmEWtQGzWcmvGgRC8wUhNcspOLCFzOvXgdDxmOGoK+Rk/QsNacofZNGM2LXSwBKbfGvk5pRKUtzcavDIOAUDPpIQAxAOd6T/udQNb05hkVOo929U3RTGU04VaVlf0OJ0Yv+F0H5dFAzmne5QX/7LfWy622hlonSAjvyKCQwST3YWdckTGJjBjFqkyR1ECdijGYTydIjAHhV8I1YDf6lD1EQ3YatSjr/GRiMMnBixACpiB0PMWI82kS4zkiQBMYJ+TMuCbG6RpwmqFh6IEQMsCzHFwAIaeMnJMcymCuciqAnK8ifkLPNEfgSuZ9rkdlzOsdhBAnxBgRw4QYJ8yYcc0zLnPC9Y2RZgBJxj+GUCg0JeOt9WoJooiMIHIxGEhy+DQEwtOJcDpFTKWvGZkT5hKcgUBIeL28iWHe7lKPKsvb+ZXS6YScpI/tPFW2ORNqGg4soS5olj2AGtZRQr0DxVg9mJeVKKl7558wcjl908PK4e4i5/dUpL9tbuXCfOR5ycIVEfPIPiAmbUGdjXsZXUUMZPKXi9wCJ+3Hro96EaCHJ0ibV9ZjWXZGXNEOPTjG7jPtwXun2Uu79v5o/j0o8vJg7BqZrK9rY6z7AxG8QuNm0fre4Gnrrv5fwfvRsfiecADXkVzwU0EV/jaT3bvneTzze8BYgi/fi/DsBa/R90HJa8uVgZOJ1zD6YTBYLm9G7MM9vG8sn1d/HILt0b4RHuLN/WZipxyidxwLkSb6K1kY7rosO129QPVnZna/YAv+4gb0R+AHCVHfGwjYvgPdNkPUPmOq9+QutRw1fZ/PFdmsp+8GD2sKx9dt9oxtuDN6sOpf8I7gdrAvGfgNVbMwUGy1d99yt7hqBju4f3GPNyOfjwjigmqtd4gUI8MzwK9S8N6dJ1vvF1UPCPQLdWHc93Dfqsg2p0W9PE5ejlueUb1TFT+f5beu/iChzhFcfQynwPGCu34hYGEQV4Ur6V2JcsehvvOqJ++BvmgKtbTU4CMKJtJNlCmgi4BkhnfjkSwROxBFgcbmLR+q1xDsDnRADxA45UKDnl2noR4wcwYXZSbEkD7rn4ZspwQxqGfAwn6yHgbhTwR883R6jyD3jsLfGu9dC9pA5gpWtJa3lXsPNNNso8/OrmIz0vuklH6SzTEqrW0kOVZshMwDfz/vHeUYHPHOLmPbp1nLQzvvj+QfDJwpx36AjLCua+EB73S02CyBfk0cNGLUrpHR1Sd8oC/Wpmzz24XVLQNgii3n0kslXfu8DGXvcbEQYB1WfYQV9XJd+J53BmVZOqrnYG0Huf99O5edN+yTw91Nhlb71Mnyi9aqISCU99pOV0bQQiRds8I29GQeIXW51WMEZKGULaOuyWY4L8ZzlQ80PevBMmY/JlFLtfuJg5KEeNDmzMhqXJYh9wfr6jfrDFvuA3y6XO4trwEPKpMLRc4rndPIHqUnWftXDXRQfFo8KlUFlQlIxRoiSJ/mulejJKZWZokchpzkzwydZTSsiSrL2He4+aQDykzFw7qYzwniEcyMqjJaWczWmVPzuswCE+OIAJr0adAxtBD+uRxCQMHLzf9S507lIDfXVzDj7lGd8o2YKK91fNVwDSQwEoCEzGY8B3CaECYgngLiJPQKBlKSEOMcp8KiLOB4BiMMZ7j2HFfKZ2RkzkhpxjwTrnMChQSKM4CESEls5xRQLgWYZX4gJFC0AxcA8wxOQQ9ikN6CpTRW+u4qXZkDUs7IDGQw5sy4wsRbpS09cEJMCCEhUARRQoxzaWmaM1JmNeIHaTeFepAEde7JgQU7ZKFXFOg8SMTgCHAiOcwQNYoFJ4mmbvqNDFBOIEoilxEDIYNmGUeKGu/C7SGJAjJTPUjAhMzcjhBDrlcKZ5HNA+lc1U7xstFg7i9B35M/COlp+F4BZJmPc712paDj54qbcoJTg+INQKUJi6hmrp7VYj8Bw71ouefcvXvujOWvU2fsJtemjb7sZL1m5V/xMCSXdlHOqIqDiv023bjuBoE280qhK+/XnvdV9ekXROIelzVfy+3raAx0fS1eZute30yHN8De2Oy+vzOfQt8Tm7n6Odvn/sh+uhm4+fjesLgLfQRrxvM1Mv0ZYXXe39LxxtC2ZCjfHdz068LQuMeLFuWNf78bDNiqMWzqXtyNQ9/mJrrcsVKX/XZwDFd50LHsfat3dgGPwYPOi2t9yeV08uNYj1irVIJBp7i166/EN37BAv6DDej/KdAJmh6cApRcSrZ3cOdnbFOhyg37W2U9P5VgZuBb+Qs+Bn7QimCbMfszT29zNbLT9GagZdViDBc4Bp403zcW5cYLu9DX0LiRDLkczQq4aDjnWBQzBf70iJ6BfypulugL7XiZo6a7Bb4ovX+9XcOxXRMNvhPkxMFGTmbgN/V+KVpmHTTvEe7R9doH8yw3LXLwGmUNSZlFoTaMguRdz4rXuir3TJPtFbCKIgFKU+TyCIKFo6gyn8yFzNqjHvM+hLuU64zoBDW8ey2tjRYXj8vMLErxOYNT0nsgRWmInEEWrt080xODMhWlpbQgomD+ydrLkJihHwWe7lZox+6OB1qPXm+Q9XmbIvfmxdp7R2jrOsvBsuHwTsZrdnYlfRkfvRR9M3pWXJ9tzgF4G+4QK15KCk/np/L4LTvFbdKyE7X5+k68W7G6BsNJvfHsDqXAL3gcPMu+Jz/zmE20iQbPzMvceHq9Wsju/a0nKCsPb541ilkTLJw8YXU3SxXDI5n1dxv7oCpgkuaMWkDSIkLJ34L1o/d/B6qYc6ST19hbec6s3t3LZyODvh1RW9bCiyekh8nkt62LuocgC45ia6M8D2WvYQZ0Ql0XSashWXMDEMAadp4BTgBLQOaUZiQmcGZk9ThlMz6XciqylbOTGqr91VQEsKypejFzQzOCV6jlBKVBCH7Fa97MPmaIZMC88SsfVbrUUPQUxAhIdm82gJDscEBCTmLOziyGRM7qYotFEwsOKN/tVIFPXN9zlzuEIOKzM6TWbrjHL72lL9Jw/WvepWU89Pc/mPBvr5RqGE9Hk4v29WAl37seZDCSeEQzKc1BxjISphNh+jTh6fmE0ymAIHd6z9eMa2JcQ0RC0CU2lZDxOXge5OUgk4FRxnBOM14vIgPmlHGOCVNMCMgIlBHiBMQTmCNmjni7zrhcMt44IemBTM4qbyadu2x+5BWNpiuVvzJnJCsA7oIGxduM/ZgVX5ZDBqQyoJCvzSESYz+gzzM4MTjJjApQA3oIII7iQZ6vyDnhmjJCEvzzDJwmAoWMnDNSSkiJy9hcUkbOs+Rntlj5WoN4stt3EJAzy13wWQ4V8JWF5QBFVq8jRHrGk9SIrty97EVRz1ysAoPQRxBq37efR8FGZ5m/PR+3NVfo9moXOEg5iwPaTbl+xiti3xj4tFX2mpzL4KcL7EqN5m7zb3uLqrbXIoBswg0L9EPg5ZcB5GYwN8Zrpb8+cp9i0IsOH+6p+QPgbg/LX3uTnxYG22f/+TBrfLiQ7wnvj+jPQvmP4NEeOPyJ4CdE6a8M/tBhidD0C/628BMY0B8hMC9xfQ82+7OsZn6zQ1iGm4vundt0s8+rz8i2UAOloW6CmZN4InANibz4K16AVo6p1ha7yfvh4TKq8Lo7gn2Cusf768Ki0f3c6RPw5s9t2NV+31bUXt1vr8DZlKfA0npqSiB9V+4ZcMqoXocwpIFe4cowzxx54QzqzcWWXYGZdco4RQED+KLvzZh+U9cNCNTK/8wDA/1Gpw680mQYpA5u6lvbdHte4+5K/pOAf3BV+K15j3o9IdUH1WNNeU+AKONtjCmCUcO9sk/XKITcuFDfUtc0Y28ND6XCJz32DFRDuNFLCOByF3pQpXioaYic8RzyzuPoUcsAkhgD2O4DnTVdEqGNclIDAdTzL4D0wIh4zEt7xePDXGGqAqaOrWtV7xGwNUd24QaiHgzLOJ0ZizcOAdhYej2kXc3w2jfkHgT3knbi1qp3xZ0oGBsC1Hg+hmbG9tO3Q2WoIEzcJTjQB80Ss5bezytX/vCktpuLfZrm90bfLlB/R7luMS+oW5P8+nOg+j5Sht+obSJCWDAozwO7AzvynlvW3hwYQpt+hEHT5dJO7yUqqfMyKfp8zidNGCskioZeWVH60PGmEibb1q8sB5p8NKU+spJvF/e/3QJElljkDBqGyO++uvdkOJYHbQhs1lR9T9kD0rfNqsvqKehlmEGnWpKeVnpuWYPR1zZTqbXe/Qe4YDFsbbF6QosK2V3WTqYoewe4P9tLEIgiAk0IFMEUZU2nilk50Ks4BRDiFBADQ44ZBKSUgKSGLfWMNc9z+E/X49YggvRrZO3zalGUT04gTiK+2B3jyBBPWQLFqOGbCaB6NzkJpggg9RZXKndh1om4PLd12toYFC8RIxgUWL1FJQy4eMgn1Ou33DrgIgnUgdPO9HRpXzPrAYBKHZ1AVoZNsmc3rWq723K55hvIDkbjNgZN5uLyrwV0l9j/A0GM6FbwXvQT70regJ8Vtb02M5jdc50QBCULO5NrBzSyhEBHlt/EGTESns4Rnz6d8PwpAsxImXC9EEKSA0Apc/FIl/OYQc+WUFki7Z7wEvY+EFImCXFOYhC+pAS8JaRpxhQTYmC5D1zpKPOMxAHXnHAFQyIMKI8Leuc5mTd4lrnY9JcTpjjJ3GfhuzYORovCu4NuvUgdxq0hlZmYHE8k1y5ku3qDJXpEzn7UjCayli9Pkvb3mwRgwJwY08QAJTlskhNyyipHy+GEKQIxCgWy4m5bBrspympOWa5REk/5BI5UcA8R1WM9SUz7PEu4cb4qI7e1qtCS7V1b+buuGdeyispb7r4tJlr3bA8G8x9u5W6XrfqbxyLacRgsVtonvq3Wu4t87JB7PQHP10Ub2nJXHj0T8M2e0HoGj4EXD0pS6YwSmaN4uaGR4Xb766Y+3RpvJ4j0hxKH5XP7bkRWq3kXNbbfeyIqb/q6/XrUSDtNycucvMRr9fdWA3Y6/si4rKXp5fjm3YGy2c/9O2BtzA/Ue+jdkXSraWxhGzzfrHfJAZflrqPVHxJaBErwcscwuoM9ryvSkaF8ZBgX02FYnpeVfd7BfFodm77vB/O29MtynOrxOaPaZtPQFjuqW+fLwlVP07PDeVn7oVEYwojj0KKjqflVgDsJ2+Qdn3hzfXJ7I/e8v2rq0Dq/xQ/Xst/TZV5/8Ahd78zV3bwrrKKH4V30btCHkV0W39unxgaawHgDFBsGcT+J/oKfAH4CA/oj4Df0H1X+Wl2PcooHZw0xitGgrCaxbOgBFz6ZoAy8KorEGdcUXXJPHltaAGVTq9eByVXnk5z0jlE0SzkKHmGC7kLVUJPl/jVWPPV49VYk+ePwWAF3C59j+cC9VKDud5PsAVp9MIzJNmyu5g+C4R2633u40PLRWlIA+H8Z+P8+AfRWqzPBjiFewEw1HPSk+GR9PqlyNAXgTJX+bd54YX0xFvbyDPzxAjGiq+rlixLOV/38QhBLp+K25lFuzxdaxlFnbO2KncD7xT3+uknQAKo3Wvnt+IdkdRO6MaRxSVaU4n7z7sfFwnBzUs8UyZNLWHOq5RsfszExo1TxwAkIISJTBGNS73RC8V4L5HSjzuPK+qfU4Zpi7TQdyFDicUZ04urITUDxji/MlVBd2l2H2P3alOHMFyjKBL0fU7zI9TCThqIEETAH8UwPWepXxQ2rB5/cV1yVrTYMzfixeLOtwsJD7Qb4BpkWa9CE+wfaOacdynN51SE2/Dok7zWy98+3poZfRsu6avl4/P2sYtYlORz9fHA85d2F6UFD+j0wAf/9+R/4N9dY+a+vV/28VJxsiLI/4LGs4/n5qbx7vWiZySX1G0VfjMkLGKRtolB07Sn951507Oj9QSvYXM48bRDawx2Vj3b7ZAwL9fxjkz47mZVc+pKv42FNWe65hZoFqgLD2kE+veuLIv9Y+8qtvKhxa73BZK3J7X1iZqAjDdNb7kB2dRm/tDuqq8HNfTILnyxtVF5broMg5bOKrx8fJjURuntX+ymgnxLOvGVGfigigOKJWJbTOkjRxBOPpiPx5PONp2F51LOpEZQwd0QlZHubhSH3xdoFKVSWeVAoRkUmj6hFgbF1x9Ya6DpplEF1e0IBRJP+nRDphCsCZpjfel2gWT2tKQg+pxgxnYTGsvKSWddInqOOpXqfuzvJnes0LIJBoIwIOSTBOUpYaE7gPKsFT7x5ST29sxmr9XqWgAkxnpCYkTnogQ71YaUIkIbShpQLzmVtpgy5wxoMQEJLa5chAghMmIy+s3jU8jxLGGotq+67bJC4NrHMDTf+7nUz6jbvnMGDuI6pzDXWeakyBIuBtrfXHIF2xlQ+oVJTlU7ckPk8/7BxJca/m8qXXFagX8s0Lbffm0OYDRXC3YWu99ojAPkEyhGBox44uyLjikABZ874FIB/PEc8fwlgJMyc8HbJiHPGdH1DSoQ8JwCEaYo4TRHnadIQ5Cxe1LPShc7ZEAhvCfh6DUhZQowDGReekVKWe8kRxIDOjDDPSgrSrtMEnLK5Ucud43MOuMzAHFjuDEdGOcAKKd/ojSiIDoCoLBEUApAz0swaASIBrBGiMoAkaQJFIWdOGnUiSiSFrPuyLNEeqqhk/ITBuDYsPhOAEHDlE2YGrhcGXQGKdQKwyrqkvP48AV+eTwh2Kohk7nHZJ9hvXRbnGdecka9XICfQFIAYMcWAKUREiuLGkAg8XzC/RcxvGYkzcnqT4vKp8CFxUJhrIzCVtslncjRq7bbvnezD37CqbBlqdkfP6nzp3zY657IXGxSxWvZ9MBTbGz4egG8aMemTGdLdWt+s2fKdX12fbvGLUb8xQKlLtyghrMihenhuIcsOUBi9WxNuV4a9ZZY6SZoi3NoMaqvu0GRemLOGlfLoO0MOA/nqvYFyWEJbErUn4eUZwY1RV5CbC7uHEoYG3A6lu0mamo9FuWvv/PvVdew7waJa6jpV+3rBNOp7k1mbuDbdeit52OWhbm9TC/X/jwfY8Yju8RJG8zyv09bKmA6n6iNw77D7eT4scO/Z8ojtcEFY6Z/a7XVvNa6LBryrRnwpZTek5n+36xRp7lGbzBDd5Biw0bHKfVxmXz7raV1hrd3mcMGf+srtyOwoDXfPOiF4jT4OLPvS/f18HsAWrdtc7as6ehrsIf6K4dAs6l7BRSKO0SIPN0jp91E9WVOv4V+cFVDFtl/wl4a/uAEdeIwKt6SWnlH633vSztF674U1bmie6P5O2MFC5QUXzy/tS1Hm6wLFGcyhvDelmBh81KMSclpcGISm7U/4/2DZr8BDJNOt8ouyBquSPaYHueaPIreH4INWCsagXKNJo2NbrFyY8AWMhHItp5lCPS8YldNLFgNDQZNfKzgSuv27w4jXDTZKwzy9EMaDPvSCYEaNmmHp3YapCB5mEAeqwRlO2tU/H+Y9hDZdX7fhW+4dt0fjDRfrF+qeNzyuN2L5yv2GovAEQ8toj1tUCdXuZJ47UGG3mV/Ufg8M5KA4B4eWW/YLT/IKuncAC4NY6CCIEf3TaCN8FNy65H6uwhrr8ST9jcfPMfg+cky7B0ZT6b3Bt93o7NXW70on//35t52C3AaWfAft8XWfphsvm85K7wtlw2jN5P+fvXddjyPH2QRfkJGSXa6qnpmeH3v/lzezvbNfV9mWlEFgfgAgQQYjj7ItuwU/cmZG8EwQBImTmELMrJ4z7T51qPzmh5jW6Ug1ZlvLtrmzUxpOD78g0MJJulrxWNAw8MrS7ZP4jq9zmixKu3ze3JJxtxPe1tamKqir9Y4Crvnap/rOBavODzcX2QQyOhp4hNrfODvUoY8LlN1mnoCmCxHa0QsWuqLqpc0JbEXjPSY88zQ92loa0w1CcN8y40OydD7mFPFmrMtDk8Cvr4OCnbd3uhf7jAmqcgNgFp7U5NgpeIrJZJ5jEpgSmFR0pcJnVPRsUrMwEHHu6nZh7swpDWcXCngWibK2layf3m4PiSImPAcY5D6gq7t0K4MLKJEZxjKEsymzUR2fnhq4bx+0+O5kysg+bgxIIT2Psc1BYfBa1Aq22KdZLTdL6aaogTpuASxdHAGiNhbVbX31mGRuraHW2HVdkMWBdnIN1IuoKIDfg4ZnLd2YOsEEpOJHMRfjj8UT/oDgr1kpU5o27hd5klCnmKpMrFu1LWvVBoHiTFWG0D2MygHEBxC/gGDKFAl4fMzIS8IhAeXIKEnVS5ac8fiQ8PhwQE4WCV0EXCwQBKGujS8rQEfBywoULmDOYGakTFiSIC+EJZMJrRsqiJB2uZiFOS0QJCQmqCIGw+Ts5sDDesRtnnTpc6M9SYX14ny7y9qRAEngVS24FcfVwl1LJqgKhg0oUz+mRI3eiUZOb+EYTLFDtUghgLqTB9RTE5lWGLt2GCOJAEvGQouOLwHuJYqZwbKCxdza+/5iijZqsa6u7ZGAJen4ZgIWSsDK4PwRSVYkSTiyoLgODr0AcgCwop1RHdaKf+1//ybDb4e4d0p8sQ8doeyLmfzYQMtyOt09MC87eDwJz+bf51DJ4/5b+zrfuJuS3uXQpZ53a5Jwkv5U3WO6WSPECeisgSPN3m9uSD15cWpsfL9xDwc0z7M7HuODgT/cpD+DDyeUw7vhvGi+z9RFk77GdTi2yV/Vublire2dtffGub6f5dl7NiDcKW3NUO9GCbVTQB/XffBgFATrrQDfzPZwemyn1UdN4HX6WmLAr1l5p7LdTB8vwLehjjoqm3G6BeK4I/D3YwNk8n1TVEhzAtdDcurWCoWlU7nlsfChXbNmkNGdyIHP6nd+Y1qM8eWTaoIi6RwunI8O5UJfh3XSfe6Vsfd73EFlNhKTMnYXi/Nfsnlas5+ioac35Ytg7kHiNuhG41yzLq5nJ92VpP0dfjz8AgL0d+ghUtT91Vi3ORkeYsjmjPYewz5WQTt05JcgDPubhsLthPo8/MzU9ZZ2n2P+Js8pAfQApGe1+ojTcbQfTvH8gjDxcDgJxbu5y8ikTKfZ2/PYP/PbxH84M2briXdw5TN6S/GzcCNOnIql/jmOfWDaImciesHUftPAudiFVy0q4O/msGhWTebWXswFa8N5vaTqLM/JngVBO6nZX18/umrmv0fGPvLl26bOYVPWzvtalQQfuKFuPTk2ps+F6fWsqRad3YUioMJygZkmhnfk7ij9qsIFls7SJmMSZ9KyO+GjFxlCK9wCFYeilXoZcMv/ogV9TD+p/Jrz5UXLrI25BjA1WOz7Q1gDx7BnRDoz4t41cGqLqGErTh8KO9jzzak3XgCA/NAKKmb08/S8tvYcLEM71SuOvvqWeWLhjcoxd9V5Z4PfxBZ+IS9Rk43pbS2bNab/FpPaSbIxdwGn02e3thvrCTT7LFqcWx8778/31mmmtjl1gvt2MRUtp/ZKALbeo12cM33vy2NS9h4rLUCL2rSzP53qc9q7APF9JlykEEwPzTy6VEtpe1t75QNAgVewD2YdV45uvk1ILrmFN5GckIggSV0eUyCOJkLH1nW/bX0MFWj7ccUEbyKr7acZNaAyAVUhzy9tbFDrUcfOPmQCaXJBuillRCEz2f+eT0Q0ljStFs9ZINxCyoisNhYmfk7aQ2ejxOmWmuXqvp+UrVXHO6ztYYGsBWVVl9RcOCjbTfi4M9Dj0z4GjShXS7c9g4yH2auZJj9cuSD6GkD45ioGfv1ZS/ahmnTkD8CE6GPNIbVg6PjIGAw9OLnPAkiGG6Kxzdk8vEEYyAm8rijrEcfnF+SnDFoItBAOywc8LISCIwpWHEmVMw5Z8JAJHw+Ew2FBztlYx8CbQ8fgsBbIc8HxyFjLoh7EWZCTICVgWRIOhwwCmTV7I9PMgGSCiIZNECgfo/wjAxYuoDCDRdQjA1Kd50r/6mSo54Ls4YpAADLUzz1hJeg6YIbws00keKcoWgAAIABJREFUAUzNgx0IUXE2AaDkwjc7J5hHkWiZqpZUzk87gll6pwUCbQsYkAzCQeOpVyXsAsFqbuNXrKVAhG3dKp7mlLAQaXz6TFgoIydSC3R61HWfGEkWbR0fceSMIgWrCCDPAb3SLsr1CDYeTkZkvJa5uoPp3OWhX/kssYFD+/q0n6oD8bShbfQQErxgCw8AnvfLu5GRre54vzU/+K2n4Q7YiGpk+HydSn5ReC3E+dZI+MtOwH84hD3jR0/xPXcm3wCamvCtENbjJcW8ob6/w5XwPnc/NbwL0AFssXikyHsU+p6b7juh3UL1D68RCtSCpNfSkeGP7RKHpV4m1bMt3E0w7A4qXFj/csRB0GlXxj5uLp2GzhNwUjPz0vpvgR86F7TzeU3+Uzfioby16B0pPQLygnp50vl+nJWzc4iIMtyPAL7Mm9JDRuemdmPV1S7pK3zCjVbop8aSQv2nYHLJ+rvl+Rza6K87ITq27yvE/k/a+lmAP3xsSlXyl42rY2A7jvabrD0PvWUXyKsPwudmsjJMIXUf7VI29p36ZU4nlv05EC+bYOY42/vZqlwR3BIL9CLT6hGSZrFXibFdUCa7JPTY6CYk1xlR27FeaO7jfS5o6BXwcfLsZstzg72z/r13AOMFerRwP1Are0X/PmSZ/FB4nFngYk7WXvsew/vlbXjhsD1p5f/7y99WN0H9Ait8/KCKQL9Tu6gs1uD/7+uXTZPXY/xlldcx7ddS/zu09RScG+drYC/7NXvkbhNmwhenMT9oE75kCxgJW0DbreMBaXSH0CwTzKKjEnOGKfb4Gor7nmUaxqRaItVGNZrUbdWbu1d3E697AHUdD+tawmetx9JYspQpbBk9sY86T1sWPMSoDdbNcY+IKgInyeHQ9KgDEg1tuqHw9gaS1eGhkXqdqmDtP6StrmVDvwUe4TpYf9q+2Fm2179+HXBWRKmCT4LK0TKpTDtnSNIQLJRSPUcU4oABZqkKQC3goS7WRbdSLoJCqJbyLATxDhO7X/32V3HQB9Vb7PbVXEeELP45uVvpGoZHrWYJejbSbV1dbNfRNA9ekhPY9mzxMiB1cklsTNAL53X/Z1VCIGCFQIezACzgVQXnbNbnel6zMaqWdbMNZ/Io4FDDUWpxq2uf6jdEF4djLVVva1DE8qJUGEq2tnxiUiivF6TXp53EXCuZC9GBPwQaG71bNIRun0ds47gpRQTvetdoW0fmBaCiLRe3jtZ5do8B6/OKl6cXUCakhwWHhwMelgWHRYXeq0DDA0jRXot5F2BbL1BFk85DiwA5Cx4PiurLSlgZ4DWBkiAlwpIzMqnLdA9noFbVOs5FsoYcgIVl8DjuYCSo+qaqBCjuSQGqENrWXlOeSEhgJHKL9wRyJUg+AHJUA/1V1EqcgicqRyluirPq8M7xwSzlJcRgNw9N813WCE5d93E+GVwSXl4EpWhICF/TqoCgMdRXVkUIFkFOZBb2GSklUFpVqYUOcAKjc2c7ke0dORE4W/Q7Nmt2BmCKCBHGfsjmaSVkCg/2rPJsg0B410JqXDgXwNex6Hlrvx2EtbtrST1pRm3nQ++ABADkAXN4hI6l7Jd7K5y0xjv17lSZV6Q9VYwr5lgZ22J6LuuspZ8EDA4096Ql//CY6sORRk8ydqR6utGdrKt79ZroPLMg3WvAt8Szc3W/Sr3hy6VV7KHChj6+QpsDKtVQAm8ZTq7t7Q7xKlVebMl+Zvxk8+VsY+OcT2snmjp2pVddsNu2nE98xTzseonYfNl5/4Zgx/L+tNX5yNO8VlN+xADN6vTD0g181ju8aXgXoJ+EkTIPh+e3thoEfluBHc5zzqON3fKbCL90Eb0IEElNiA6l+2ptRO2Gb7xjiC6139hwXQ11fMPv+KOj/SPeDIfda6E7+N+Sfzwtfk+4Z1McT6zdDWhf/v/7Bfh//gCoAFm0z8UuNBwv/W6uCsPsejZls4B2IZPlqS6nCfgNvVB5CkPb/KvXl9FuU4oM1t6YWIaf+31FW8bs9SQb8TOs1d/sCxHwmdCvbWrjBKDdlNozCXm9PK/bvUaLAMHaXDxfJV+E6oo9XmK64DgBeMjQmImp3b2uoTsdukhod4QZnQ8XNN240fC7hzhEIynsq5QmpOrKkv5QV+mKTJaAd5g98GNLS4C73vRxlBpSQNNK1SzxQMfpRIPH9p95nyLTGHCgQsS7K+DiLHvrZu8wQts5fnVo5S4fmmB6Pdol8EsYq/uK34eLx+/auZmNt8cmDE52+9uzefbpVPXlf/z4WJ8/8wtABD6GNbubd9xPTnShyyLbZ5H+7WWsh+O49nbq/05QW+yS2CiEOSXV9f2TAIKYAxCpsgwXXqjBILWpNqUJGeLbzzmikRkd2rxLVKWbpzn2znj2cX5i2m0Jm9kbkoyljyR+2O0r8PB8/Oz2lLAFjfni9ibhtw4N23bgPM0Au3ucxX6P22e3B3law596FvB3YRTM/TFIIFmFypQzkE14nj38CqmnfY+5XHs0EApjGZihAqkVTZlXFDHJeME2Nx6uxIRzES0I8Fh4CWQu29mU2gTEghYTs7lyVrfprAI/YkjxWhjCpH0VAhKpgM7yJwiKK6T4nmlj51u4CuBdiK5W6wK7IBJ1K1/c+rxIO9DZNMgesk7OiM27gPNZMR+FXIIoPO/Elp0VOnX42pLoXFaL3/o2WezKaMUzp5lxLTgdm8ZyJ42N/teY2WleLLqjL7N6qeoHdeV0aV3RXPFIBdT2igE+Mtbngqf0DBZgeWSQJKQPCYd0QF4EiQHmgvWouLWuK56IUKRg4YKUkgpuiZqyhQhYGEtiIDMIDFpVeYXMsj9J0rjsQlCXBlCLb4vVXNaMY0lgUqH6kYFVErioe36YK3MUAcqLCtBZZyonIC8CkIBJUIMHkcZnTwnIPlRmkC8sWEl0zQCAsOobFDHX7QzgAFC2EbYJ8gGtHvJqXKO6PureFs8mQkDoPwmDJKOsgq9fVngYEUqKv2yKCysLuHjs9AJeFixLQl4SUlrUVb68ALRalCVCFlIWvJh1PxhEBZQFlBhErJb2hIB3I/Y64uztCBuk3sLuRfLuZnoBtHyqLHENr3gH0CDkjkPz29qe7+oCh3ZKWL6huDk89ONYp2FmtX4BnB32GSG7otxTutDXlDtJ+2qca1RovKucye8fx17vw7k2fes2X1R/4EFepQ4r6IcIs14Jfuq2/+gGOFyw1+wdsc+UOi36nq3tFeDuqn/ovP3gwftpYbZZjnvc+7j+SvAuQD8L/eG5PfvRC8G3Fzsg+uXV5I6pv5RvC1lwZlH74mfTki6sAsbqMi7UWy1CZ+V4u248FLwlGO90Zu827/cG5juCeDt+BLQ4m9e2QSpTv3e1PJRHSW8s1M8l+ttmajjtxcbYWzOObeQlTuKvF3AhA0KAuocLbt8/Sy9E3xRzCVvp5Q/9B3YOA7RzaWh9+RuhSxSqH+jKniUAAfgkQahK6PsR2sT2260XI62Nl/VqjtLkACY0F4+9a5YwMYtatbHVGNsQ2k3ensllCXXRNuEWUVTzoBpher6Zu9HQoNb/0T1+TBObU12325VVIgDJHB+Y+2SBXigmS18NzJt7WoKgKSe4EP3UBZxdVg6ueTf0cPR8fCm6TsdlBwSorngBaAzJnXquWC677bEqAODh4wNensKlWb2osopqaAhTZohCXZZaHi073Xzts8ueBbzB8piq0KSIWk0mIqyiC+p/r8F9pbcrmOH+M2u8ib9zu7wU4Zr067ONVZQknroDjjDdNl9pD5PNl50EO409502hvv52DM+uUU2lH9Tjk5Nu58WqAGmg48FLADmBE2n+ywXBspwR47d6zOiaUMwyFwlRuZOcem76sL1wI6P3zgrsa5ZH2jw86/b8Nj6UNaXK/Mmq9jw+RqGIMATw3cDpaai8xtijkDe2K+LPDMVG1jzNLSsp0OMNjxX2LQDGr7cXSs693J5O+Jg70qhrcaVfJcGsLptr5Vqsu2tOnlf36ZTUstRdIKu+F4FccL4sWp4J28V2Tu7moFkmi5VdUYGBUgSpblG2LyKpUA8qEGS4Qa1J8OJASROcE5mLaxNYWwByQIoKyqWEzV6QxIKraNBzwwuBmDtvkaR7c04mZLfxhCCZNxnxxZnaxp/snMYsEFYBOplA3d3KszBkNUtn8b+GO2E1D/1FSyTqIL8JHG3+JeZreaQrsUfW2nqPBdkhlbfAFAnQ8DD+i9DnCjU5XaodpMpzxVZ5Ic0SPTz0MrqBcpo4MDCBboweHNp4EEiK8Z7J2DNCIvXgICwoxyNenoADaQzw56cX8LFgSQvUhQLAksCy2LFb8bSsjKMQclltrTi/EemVKk0WXlFKcOtvc0qrgFB0blhUuYObJ6KXQjgWVw0RFGEcWYXmXOe1LQcwAZyQkq69hAJXMHF6oyhp7Uhs25IgJcbDg2DJBH7IYFaL+XIsapHulYIBUq8UVOm/rzXUurz71T12srmM81rLNKIGbW7hAl5bTPmaz2ZVhMCcGx1n0pARRgJWeULBEYQD1BvFC0wvQNtcBDgCvDLKqgo5vWJL2DMrRClo3KsH/Pa1uvq6f7mQ7Rj2xpsh0OHvDOQ06gP1/Zi15+nQ/7Z9ItKUPf8F+v6VmfOTRV1Z117fd1mlkab3Nc+K7rjEqaJvoKW7dba94qTl+U7jdI62dbvFabsvqg3dKXZ4PiY79/s14Mq+13vU12jMhd4CetjHGYy8/KiYdrqyC9M4t/HKk9EJt34QIduDW5oj8csd/Tmb9RXH7crskfeaWaDvrZNbrJL38uyW1Z0fJ7Bzd9AfA3fo03hW3KP1m/G4gNZ0S3jexmldYzHTd6f2htfaV+MecAImdww/BOIcnhnud3ib8C5AvwjeOoZb+wSoQupw+NujT06o232nBOLuhzEriwEht4QQLxl+CXGJ4dwrHz++L5yi/eP72VjczWPI7Sh4d93DhexN+cfM966nnTVJBOAIQjLXiUftOlsbVrsodiFQcTfaMRBx/MzBBfyZQfxkZX8GKsPw7yHPJ/J73T5Ec+zPKETvO3i6DXvJT2UThLvpeLlq8MnadE3Vn6yAL/b52S77Po2Fx0b4Vwo4K/AYhfVi3i25ABVQksf5ju4+pdKnhn0timY9hpF3fmjL6Ld4g74mGqfZlUvfF6JoRQc0yy6vC/2BM9KU4U8vJU0YRTZWICDbGETBuf+xua8F16ZJvZxLuIuR3MOv7rkpXRGgwrYx0Zg3HtT3DiGTHzLkrWXE9Du70OwARqheMB8+7bl33Cvo/JjOWxLn9RXgOVzCHuZJBG65N9LU2/GCAHx5Pp5Nd3lpPXz9GpQYPOZ2xLkdL6Y93LMpyrCOQ93d+vf/Znvgt4DZHJ5ZE93FfKS9/lj7SoBJmsWUQVzxRlSgnuyKmc3aPDkdjoJKc0/tgrrwZgPdQxVI78+Y8qFTemGP0mICX3aPG6RCmM2gRMZ3bEjkfWe3GJGNluoE3Evw3zFoxkjujVJvq+7KCb8pXij1OEmGo3UXHITs0XZQYn5qYVE0VIhpqCW1pi4pI2V3I02hve4JxuoiUuF59qOmWcbCXidSC/SU1AtQ9aoC837tChg+KsNe7UoPkCbTrlWrADMvinMVZclsVF0iCLR9VFITovuYddau7A1DdNvOYlbYweOKuvEvADFYsrKSkoFFrX0pGTdCuk7qdu20RTTOOZnwXFj9SUsUoNs4qWBQhnWLHjVPLLJmBE6md9lcYzqO+Hmx/tWyZVN+XYqOe86/VEXrxp+hjvYoPu8bXJURK7l3miAIDYQn2OyvO1t/UxSYjVXcWwb6Epd/IJ/e1gRBJrW8RkpYRV2Vl+OKIoxcBOnhiGMCyksBScb6Ilg+ftD0a1YX4ja3q80JsUCoWCxugC2MAARIVLCkYw0joIJuVeCAkNLmksBMTbAuehhRGWxS429RhbrCBcU9HsCiA8HLFguNrnHOMwSkPt2V5guadwTDA0LSEBn5BYkWHA4J9KBKNC8vwLPp4RUpNrYmkDdPFMJGs0OfKSiMiLlxB5lCSVTohNRwdP7b5fRdmrCIdM9LdhwwtS8ukERgiwePdcUROk7gr1WRhTyMg4gqRhQdDykCLlB3/LVugSaIENvixCrSbwleK7ysCS6/Fnw9S0y+DYxW56ENIgB9vLUtr8GTWf7YhiioP2mhPqEl3e89gnVZkbsJIp3E7PtQ2KbMUzhGYR2deo8tr3ZFV2trYx6ZlHkOziX/VmvpJojr/zXLvKCTt4zTNWP3psb5rcEtg/NaA+o4t4N3V1fzuhPtbNlbwp9Xb8p36lur5gSNOUnbz+QdTpqX57sCvgWJ/JYwniHe4aeC/2AB+qlFPDtNTzncO+Hbrxh3o2cnuc376ZPozrZaoethTfx0HTITAZIIksQElfYwXqhIi/n4hva622FzaTLgjiAcal8LV24th3CSCboo/53V3zUEod1nyqFjAdIDkI7tPiJaqWw0Yw3f4zkiWqn7uhE5H6f8b1HBd3eomxwS462NCIAndFboXhbIBM43wDjVPgZjW+r3eLANBRDMzfwMf4bfn2KB4aJboOPic/DZxAa/W70pLiRrB3s8RHucBCqINeGxSAs/WdeiXrIRtZtx6lwn77V/dK88EapQ+B6yj148zPFrIwPi18RiqSjUZ3PibnVrP3y9OW5KN1dNGGL5kloS+eW0Cq8cpzOwlGrZpJd7yf6G8TjJFw9pp/uJtHdxqCKtvJYGXUI7OvfrQ71eQDd1Q6GzJt2zNedQQCznodV7fDHhcr3MDeugR6nLYY8JPzGGcWp0HUnDi6GslAkJUEs5g/8SDYapKGp9s8vt5dBoQKKmLfTHwwcAwL++fN5WcrLPt07KqUL33l0yCePAxvaFtXDy4Dir95X4wnPF1D3BaEzl2RQHapzhzo1HGJdoqR7XWOexApV31PeuDDURhtZ2QK12Nw0+5Zd0p9ubQmaD0izJYx7v2cgLdORNtu2cbRVj9Z0cTrpX/Xifgr3y3eIcMCUG/S0zi3GYGJJCXtK0+tzS54Ob6YPyosLznAFzwU0QY/19DyKbRwCkFuaqhMFo8epRyxSzqJUoCLJwyNXjupXtSmQWSKrurICoVa3VSxbzPPk+60X4mJi75rj/pmrBbfHWOVrUmvJw5d/0j6AW6G75KoD5lE/aeGKzWk/AIm7CD7CuMXfmUPM6byMCcGlxqFf7jIJy65r4GFm7XA9B5ZAj0u07XN6gnvgIu6i69buhsGzZgZrPxox8rsRIh4u/jWOy/aOzLAr0VYanlf0JO1gf5l1/jKHSd5VsxgEJBCEvhIe0QAh4Oh6NptUFM2SLY6H9T+aVgURjgrul9Eth0KpuwHktePr8hFKA9HwEKKHIChaBeHzxlCyQtq0xE6Gz00UCMgoWKqrobnMvTPV7OUKt4It7YtD2J1OYcc6ZRepfEV2zIPNwhKDQYXtFtYYvapouZrUuLgj3vUIIORHyQ0J6+IAlL1iWAw5LAmVALIwNW7FMGQT9U7P4ApRi67A0/BKAJIM2bvwD7otYiINxH/G9KuBGUIIhUY3nZP0GyKz3NR46ip47GNlitrN5uFB6RAI0rQQjJ8XoDud+rwh8VF1nHQJDzxTCGqYsk9LQYm3vsl7Ab1zCktyS9ruAAB8TcDCti05WHdblaHke4cOxJX06oD8TDR32PSg86JUvznyfwoQhuOb9jLXsvu8x/4Tx/LdRTxzKlO7HGebkZL+d35ok2ssXnm/bKdt8bpF+qqzZy51xrMMsY6Ir4cy4nH8UicU19c7GaOfHNceVTT3X5T0V47rnrPfw+B5wXqY25pXL/x5was1+i/6MPM+1dUzwcHi9qW7WikGYMF5PiZygMXfCaHm+sUTvzgjTxs2fd2nqf2FMDF8vWWOXWJyfhL22XUJ/Ju9lXMtvAPaMbd7hHS6E/2AB+i3wFldX3ND8MGtENun7aiV5CfM3HOZgh31kqYdGKRq3uLmPtDa4hWhHl+wiAxgOtr8AzPaEKHzYdPaejePekdte9lyX9w44eYq5tAmnNvSaCPj8GfjHH4DowbhZmNmE+KWsW+24hfTHYKpAAP6y538+A389AH8k4E+YRfmEifjT8H5Fey/D+9pcnwtRwXKNgz5jTl6D2ZDuAnn7eoaz9syF59PxjxdRSa3MKzhNsJ9/cyiDTHgu23XiAjy39lLtHLuQjm0kABn1QjcMnX4dT8KeubmB7Z8LmtX5ADQri/v+1besV7z1goGxvZTx+tCbErrluF/qA+HgSyY4MMseSm38IE3YlVOtRtwlbolNtnRMFtLggtMyhfae5d4nuFzjT4b6L8bzMMZ7B/5pE/L++3PV+rMg33spIb7iignQVh7obQmCxv3KThyE74E4HcdQnX2WUtoP4xOOS1vXlLvkJ2Z90v699dRK35a8u02NtGX4OVa1okPB+X4sk4fXDPyUAbggLXA+SOVtdP/3ke6egzpPO4dJAjrhQsXldkFA4taqRo0F0GC/KuQUApIL/chd7+pGHO9BemxwfNBPccVMiXPW2kzJ41ObkM+9cQQXx1zYBDBOu+N+EHAegLgi1KhcFcgX71zSTrfY4b3/TsN7d2sdC4mzMzgd7/a87lFlyUN5ZH2qVsAhnrN3MbzzWPZwK/GFkCmDloyUM3LONb3LoB03xAWmBBUg5sWs1UPkbOI26tYI8bqr4hmZwxXf1X3O9NNdvTdBgc+JzqAAKOyu0FHLd9fa6mLZOlAAKgDcZXVw9U7uRaUb7GAFC6mOipolugk/UZSHgUAKg5ABEdCis0/iFvweO9stfkVxtRRQUevz5qadGi46+taLO+h5La6PAUfi841M2Qs9Q79HRzr+qWggbevziiBNobCiZb9aoo8gf99mviKpCkrdn4OTpooGTmvISGETdP0B4K89IfrYOYOFEj5SRqKEp7qJjvsdVd6mkkhWFiuL9iNRsmYRQAlLPiAvCygnEBOOzy94eVlRPidbP6Je3wigrOEOKFu4HheiO821kEVJgAXmmh0wF+2N1ysroXCCrEAp2m6y9UAWUx2ESseLiAnBdYCFTQlGShMWh3AgwitEVnBxN+UC95ik3usYeSEcJOOwAEv6HY8H4OExQxKjkNR6OQGppMahr3r3wFJUkb8qPuu4JmsjOa2jlqQKz7lq4yh9s44KcdgKDLGFAGQQkjleOYDwpNMtqtgiIijEYHcpZt4hVPEF9c5E1y5MGYga/+14NBNwTXlto3FOBjMA+gDgJdDALXpu4Bo25w3DWRbzFFRmZbKJzn7P8rt1/NMNdV9Sx0mY8WzOm+3n8W36oqoniZoQeYfJvEhx47IGVJbiznJa+jPlxXR7L77V2vkea/aivr9F4nAC375L3T8S9ri3AN+jid9w+M+u81vgO+DxzI37q9U6K+iWwu+id+/wDu+wB+8C9A7qNdaF6d4a2EZrvAbB3PEZ0yz1pix+jkVQv107s+ya12Jx+AiosS9Ne10SqSa0GV74TUKtcWNq8xNCFTaOFyiIt7897D2/Gm4cuHZzeHvV97Sd7skujX+shYwD2i6JFcUmZG3susweztKgHUrr953EnmxPs5rCZ2uswRAL/R6IUx3xMna39i1Mzni4pDETsInL173fO1ATNkSlyiXs1q/SrtTSModbWrvdipb7fmtaD7VeBpviBKFrI8Eu/PwnNatbmPNQQrVoad0aEJi8jO1hmqpLTIR1txmQ9hFfc2hnTdbqVretwYqrSkmsjX6Bm9pFdbXYL9bPlJoACRS8NEyaGdtyKo3fFrtr5k2GcOknqbuc3tRz6qy4905OvCeYO2+rYJX+3UhL7t2bpu2Tvm1CWB6URh3SUh8/ff7S0rjXypMuyHfqH5fkqTEN+D+7pOgVh/V9jP9aZapdHsFvywd8eWrx0w/Wn+Na8C9z5fHhw8HKa8LIYk0QAPyyTuZjWCNA7wd7TCrDfF/K4l0Epzb9nfbErK8NXuZGKjv5vVknTkedFg4TK2JCbF3jRGKePlRsqE4tqMk2BWZ1HqyNrZymne/017PsXEbM9tR4URxw5jwQgr/q7TsvTmJ7DN+lin67BlKf/WTdUX3rIhyc0MrtkqD2SQiKs+1x3Q6o8esaBsXnzBIE1+tISV2sUwItGbB45UhqfU7Zrcbb/Fkk8G4uOCWL8a1lAdB0QbFIYC7Mu/VNrVu1E6YUJi5MjwFZYigpqmimMnAZ2BXyYUIrKaBVscwmuBaPmW6FkrDla/itZbgFLLXCYIJvuGNvS7tC3bovCwiCdTVhvSuZibqHVuvz0qxYeUB4/4yuqX2fC0K1KoyueFF9EzSSEAVKUxiImIRn3fkuCMGNP2l6OBRLqFlq7Gprtq8VCvPVosID6qLf3PFbfhWiOx/YGkDO1wH4g/aE6ITZeitSkHxDjvgV+kyVprRAKOwKi0WQiGs7iRJyzng8HLA8PiobJoJSCgofsXKx9aB8ppAAmUApIz0Q0mHRcBTZlVzcAp3AkvDC2aIMEOACdEmAZAhrLG9/B8NVpgRiINEKpMbfEkTXv7VFh5aqHgdcAS+tYCrqWp5XcyHv3gfcG4MK3gkETgQpBYQXEGUkKqAkyHlFXgqWB9Z2F0YyDw6cV/CRdayEwWsySzOda5Zinh6Uvik5TEaRDNvM60TO6lGHbE0zGCvU5X3VhJEgbBRAhdTiHuX1OeteKH4XgmxKMJpfSrF+kHmPQFNcJadfAvdU0fD2FBMc8JAJoBDz/BSvdw98/RaFBnAX6PHo7meTr/vZBAA9T9oWrc4/HOdW6Eanplbk/uhct1/tPZ2f97Ex3ZkiltnzbWOW2fd5HUbPBhZa98kze8QlAzfpzn7ylngWzKcTZG14xTNNGdPEbWx8/wrLoLLj58Zotj+9FoyTemvd3bjbf6e6JRMu3/f8UFbHZciQ8F7Y9G12thjgFYf+Kug3oAnIBDcnyPwqIJdZTOHmAAAgAElEQVSNQ5zHcNaKM1+L2aEBZ6lHrGOKctf1u91nBDozjPne760F+oWVVn65nTvr81O0YW/pDmzvvC2XNO4c/z+u+Vj83kH8kj3hgurPwgQZTln6/2j4VvzaO3wXeBeg/woQLpu27/wiwy6XqiB1tmqpy1MvNCpjz0Ah1YrPze0bAXp56rcezRxlLPnnhhM8TB3SkQPohjomuLbuO0Zwd1P7TnBv3ZND3dz9ijEeLIA8AvQ0zE1u1ri56Lj8aethLZrmLwF+C5P2XwB+J+C/znTC5coLgH+Q5ovgFu1/kN2uGTO6PAK/P5vL9k2HcDW+xOXtAs3RK0Rd00C1ZhqfUy+VivEw+8r2mqENqb36rV6n9nUlm6+stMbjGeqFt7WbivUDqNbpbH3zCzok1MtcEbg7d22JD4pdWgnOM1WzE1w9zNiPaRHShbhozP0kcaQZs/OqPwuWKn4n30Y2rO1kFwuhvQJSSyECINnGLakbWRA6K/Rr0W1zw3DBQt87IQ3oMU0zy09QpQBFmkm7oGt+Y5B+Az39OlgNj+3j4RNQS7GaXtB7QPgOZDmOK2Hb7XiS9X0+hi73w50puQgE6TG4Zk86sCs/1778tnzAbT1reD7lHjb+hbcpL6oiwqjccBdEpDyXZg/u5JQ2a3K2T56pJgrRKv7EvcBoTIKuOUpGr9XqHCkIrKqSExof0vGU3p4zF3TRU0bE2WqhHn562bUuGj7r5odkHju40LAUiu0bJvAV43/Bl00Rhfbqgw7NxqW4RxY3xW6+DPU5vz8smTGtuGA8q2Bcu2r7o71L2eKXUwJyVv4pEVJKZgFL+g52VoC7MvbfrbGpCr+tTZQhNp4s+k0FX33nXAjWE7DJX/A0UOuA8RE+suQFNqF3AiFVlDIrWZcOrvpdWP1dUxWIe/xz7uax6QNYfgFiuBZti8Djl6tXL9U2JgC0mgDQyhdh8LoChVUY6Vas9XTmAj4BiivXNQvbOhjbj13WpV8EPjAtF9WZnWAshTU0oYXRiYVfOkYPFC2n9mX0jBHjo7c2uHA6tlvfCbWUWldrfV+59L87EKwM/Eu+QoiQLfJNXsjqEKyr44U9EyM1bPiDBGIBpwJkwoIFOS94eHjE4+MHCBjHUvC0ruDjM3B8UQtmCiopmdQbzHpA/nAAiVrEE5LWRbaa+IC1LCiF1NjaXYWLK54sUEvp1ObWSSwDRVYAq1q8L4RkguZEGZSO2k9m8FrAXNS9Owt4JRBWCI4QOYLXQH+zuZ63NSqklurgg1bKzxAuIBSkJMjLEQcpUOf+SY2sBShHRkmMo+EmiZiFvACs7u5JROmUJMvpWKtzSQQsmXB4IBwOyaLmMI4a9F1d5pt1uFSLcVPScEUatrVflcN8wpMp+4h5ZWEwU3V3r55X2nZI/k/E1m3A4S0aBqCmJGeCfv0uVSniVeHrtQeDW+BU+XvvSC2/P1xYxYfA2D496Lh9PYTiDb8B4IMJ1p8O2B3QXffo8fGeJiz1+SU83y1vqG9PUf8c1LJoeGbzLPHheH4Jebt0I1Aocwbn8SmS75ly5bToPYWBKCA7x57vvH+1Y8LN8IrrMM7duTHpMpzCT7zaAG17+j1o0FuF4cwTPrYD/i0w9NuO+8CmXQeygxnfcKGeVXz54XBP+/ZOCJMzxTX11T3nooQ/BPYDW32zCv+zydovAP/hAvRxsW4vvebp9vJfCt9qxdhBLlyeNQ2w8NAZd0JL399gDE30A6LYIU2lkJLNdfDmMssOy35jcor2/qywZ4neJ5qgyB04c7MQ/Rwen4F79zQaEewe8EPeDkMvAJ5egMdwMK4afdzwMV5AEDqhZ/uzujww4LlmAW1tnSMZ50jMJ9KY69cOW9yUk1l+JNl6qt11Y+njYGvYk/xu7fHyf6fgeh47l4/ox2V+Pxni41Kz/u5Qxn+IXriFOOh9QWEwzQJdaox1QhWGRGvCaJ4XyOIosNG7AGn3yXsHGHZhrpUxpnMBvuPgZmkM/fcp4CENt69Kc9HwnC3KLFl9lEyxSa2J1JWvjU22ywnH93P4Nu4LJ997mviwhHS5vRv59g0OnKtnp0rH+QzgRdqYA8CHUIi5Ts4Bj/+ZP9bv/+vff2/rmNV7FgR5yfOk8eHLmQuL01W83j7blaU/Zi3r0XPSuzNjw6b88I/8oRb8/FFp+Oenl1ZhV865TkqjS4SmzFDO4O2lNHez9++1Z0TmvXTfkTnq5jXQZgljFn+LuKy07edEyAcTsFJSLwIJKnywEBMubBcyMYZb+FVPIHaxCbPkm7Xz9sWGbtwrq2r7QeAhZvE/N9bmtbj+WXVQIuHBMJX+qFlYX76x096PWE9gvX3+oqWxbxNIVF2yp7yAlqRKBLZHiAnQU9I43WRW44wMQC3JmahzO+59YlILa66bqEOCSLKpD15fRPegfhf3kFNWgAnek7lphucX2s6OjQfVsdU9PlUBogrvfGMtEkIOMNQivIh6XC+Axx5vAjAxc3YEHGitIHHqKPWxx4ePRiXCZovMDKSE1YR0ug87nyCt/lLMU7atDx6Qy3kNuG2eRKxvaQxdyNa0s3cxbWfZs0OOqKvFn/X4LBQRs43TyHZKNflteGrcCwDyN7UUd+ht9szGmicTopegDyU2H80rgYTx+UOAv2oTRyZced+UgMWE7mvfvT59HMTK11ioAhFwUQQTwxvOjFIK1vUIeiG1fi4rjsdnrMcj0spIzCYYh+Esq4t1o6k6j4pLHge9gMGcwKtZnbsuhctmjW4ngimJEEQKqsSfxBcBUk5IS9J45QubxxET9pI5RbD1xB46w9yXcxU8N+zQMTXtehZIMQURFjAzyrraGiuArEjEyEmQCciJQSg4gk14L+CsSlspASKr4hFr7HUkRkoHqPt1tPAGhn/5ADwcCA+PQM5KvDPrmmdO1WpfjklpWgF4laYQxhZjnpvCCwQQXiqNcUoIZpCHgbD8VDHZv5uaRFXS8rURcSqsm+SLiELfgHreGPQ83xy4tfmM5+LJsw+TmEmdRfmMUNHwnSbPgN07lbpNnNunL+XZxnQjL3gNP3MqvUxZlotgZIH6jdnOxbP0p9o0q/1eBJU6b+etuP3TuYcTIx1e0PCMbFxP5j8LsjN+Ow/2Krr1mHAKn2/v1Mm87VhxTwXfCgYOsmPiEXix79ikS0HGz0m7He62wD2BMx0+bzjyIbts272TlrBPmrWqwKduSd7QptNAYXzi93M423u9mBZ8tm4raPt77252snW+PlBr++ae/RIaP2vdD1z/JxRk43zf38TZ7tDuSi62wH+Hnwb+gwXoI7G/liTdy3G8EgkMLlJmTXIBusQ1XC8uw6m/ug1s96Ob0L1O2AsDxBBJnbESEL9TT3PvGeo3A+cOaqdw4t45Hw+AV8CPptvjpfy1ebcP7TNeRgdke/6M9PF/6EVOErtAknYp2R2OTeDpsdE/WTFumf5vO+x9AszzsMIfVt9fQ/v+S1oZEf5B/TqoggTSGOszmJVzKZDUS/G6zDccaRizDe/LwN/GSH0iyN/uxtay/Y1+Tgf0lk/R8nsHqqvhSCtmh0wnSBLmbdbnUEaNUW6C4trWNGihu+v25jC0XtfWcfOkoS8dPyntuwTLsHNEb3wd0dqVNurlWEXa7f1DPEQJN7l9vWUF1LovgVIGrRrvkTK1Q8A61fEfbhJGBD7dvXlHh76eyzuOi8QX6F9WCd+k+pehDReGSJ+WdQ6O4RQ4ufsrz83aqFCwiumUb+7cJH09VoUZr9C+7wzVBlwY5fhIgqevzzGBfbT5+JIsIKS0So4v3pD27IlWu5Q/o/tLs0/aprloyCaXC5sLh3nSi8rbIGxMt8c/3LG3G/x+Zn+dvvUm+bLejYU+7N/2uwoUbG/1C1YtyuNgS3hoCapL39aILb2MjTzRG/H8oS2b/CPtimM+Pov54gKqAXMRt8HQhF1IVTBItaY65Ps9mz7vepfam005dVlS/a2yaI+lnEGHjLTon1qeNyF6SgSk3C4YOENYmQmSsD2Ff33lcU9PYAES9NP1axUtZocHy29TSm69HjyliAuTw40bWd1keFYF0qLCKrUGLk1QJUWtZw0lU0GNU0zuppk1BrSIu3GXZokubRRavx0PY0+SCYpFrVwtTyKy2NVUhY+xLJKiyspVaA8dg2qF7uPbz37EZIlYdgEfXpNUHmmPCNKAzWPacZNvz5qXgRbfHCBUd9wU252QGkcWT6z1uYBQABWim6JgAtXtlCA1fFmzbgf+INmw77Gih5SQacEHJPyrPMFbxazKRIpFIy0x/lESQBbOgAWLKQ2tAqzrChwJzy8vYAhWWU2AfgSvKx6KKQoIgUnpqJjs2WTpphwAsAgKF6xSULgActA93tyfdxbJREhEZnXdYpKLx5IXAWMF0oqUDlgSIx8ylkPg5AWQoobtokOt+q8W85ytfTUWi1lzE6wPSCooL+5RgSEF6hyJV4gcATBSKljygiVLdZCBorHPeUkoa0FmU6YxBQWUFycYhh0H5XuFTdkAoIMKzR8eCB8+EJas45BFvZAwEyAZ8qJu5gtZ1B/SsYZZ3MNjoMf1yYZnpALxipkCEJoHi7bXZVOKMY8TnRV6gLi+68W2TcAS5nfkcadlnU/Swbd23X43kFqTnwJ/v5eudjEI5b92Ly6Htz5cMzjX5nEr2DNeeKWGzEulkOTCegVhvYx7U1/nKTi5DV4DM/Z0fP9NIfJoe3Wea+RPCES/XJd+DIzrRk783uYZBd2bVTxkj9O2u+Lj0XLz4jtN+l6333HuHfysE89e74L0Xwb+gwXovxiMBHu4wwLpZZoMzMQpL3a1yHqZYoQgXpz69kUhc70h6y/3SPzy8bUZ7+8JO5znKZpo1jb313up1GOE78hMzMAv5G6FTd6RkaMhrSALgfEA9fEGNHffY3niN2HhcBY4vd9gZTwOQvTx0lAwRetJsvrpAuHf0Ftz13Q34AwDeDBXuvGZlxWt6U+elZxOiLqXJzo9hSP98SEchTKRTnTzZv9VrxWReEnfnllDoqVpTePXfkmF6H5RGC5whwbUMsjmR+Jvn+NIQu25WxeRZ7DP8a4hejOud+WhLc2wTcInt77bX9UzCJr1cDJTmbXU7QPEpH8LtQu45J9o8oBY4B4Oko7neQj0ksbHJfxYarL6aHZ62kzZlScVT8pQQTdR87L4WVBCO/8XPt9Jt7A7fLvtek0yfU39EfbyTJ/72ry04X2jRC5tYlyvhH9+aH47/6u8QIhQjpML6Fi4exmpXG8ggGWS7tQ9W23KLQN85yTL8OXaNkTLiuiBiIb3Y9ldVA/NUI6mjJMIEHPVa+7+oyWwr39yrygUaYcWmlKri83ks9LVON5d+3D7GiVYfOAo1Ai4GfHD+pLQHkkoJ2btyJULsDG6cO9547M9GKeYZl/38UAoAVljmVPOyIcD0sOClDJythjlKVjr1u/aMY1hrva/avQYRqdtqjo/HjImPFeb4ci/qnCpE42SW58Dah2rm5ywKcGBGttU98NQDxlqwXHHW5is0Ra2xwWH9knMIFbXzWTCcylQK/sqaBRYYGlU/iKegQIeBiN3gMytcy2jtY2TCc4IEHDdTuuwuUAZA/uKLfcSaSMhVXzdLI1wkbPZHirL4Rbs8aQWU1Prcqi9nxJRnOvyzjek8al4HHgkNOfsbvc+By1dY6Ir2xPdvZsrdJ/35H0kFaJvChMsREiU8Dhpry4LgStrdG0SZ62C4mbS9VQZSSII1OoaSWN6sxSkREjLgoRsQn6CKqqv6qGFCVgJOCQIJ5AsEBIU8/wgOYNKRmIxrwlkOGWqBqIjSGAIjkb3CCRHJDuzU16BzEh5VS8UYLBZi0th+ywai/yon1LEnHsxiEkVbaIWpyT9K6XiNJOWq3HByRQDGIVX83CnboOSecFIACgJiNj+ALL2Oa5qIUWVRH2BCJSWaIwIs97XPStnQloKRFYQuyW+ek4RH1Mv2/cvIlAiyJp0zTpdMI9XsJjqgCrdqNSeFXclOEAyy39fiRe7qPY9WzYrbz/PLXCP4Pzjds1M4Z62WlzzW7ivPdhRIQ4Jhvdx3/vWcI5RuOT8MLZ/J+1oWenW12Nzzo7XXr1d5cYfDMM4dvfmUZ7UTbPXI8sf9rFZ318DxnJe8+j3zeEMvrWjxCW9+k4932vLZl28vZno1oP/N+PtvltLxnplSNMfkjx4zoljTF+kvz8rdJTpUJwr/9sDzc/TEa593r2bc//7OV8ZN64tblTA/8FAN93bXFTy8PtMX+l8knd4u/AuQL8J3hjGh3uNfYbmgpVa78DC1cPATLcDY9u4aFJG/KmhmN/YmN0C3W3JuGX1DEPPpb9K5biZHZB67Xlj/tuydXDrfjWecGYFRgUPg+N6RHNdbdndbCO25dmuNH5zCYph9L+5Vfl7WGCfoMJuExLgH1ag3/P9w9L9YUW5iYvHUHfL9QRURZM0W5vXznco4yUBiwTrE2dCQ/Lu+3gLaPDJ8hK0zxHlx8uD32jAeakJ62WWe8MY64kMuIhawkXCUr+fYiyHNJ2EWuACdRliu9f+BZe69XrZ2+1Sk2phht6TgVfr1iQ+5u20Y+3bXiJ7+PZaDse5GiZMQlmt0vDIfnsfCYBdFsKqTwlqPpRc2KVCdb+vHeOGtjLH5xfCWTpI6MzB41I4d7qaZjrTCB9DRhvr0T9r93PnaDKeF/fgZDrZuubffL+RcMYL5EhKzt1Mnasu5qvfrRIfW7e674SksQLDp6NWVoIl7d/0omQxeBN4ODQELnUdzZrtDMwuE7QP506gr7qf33l4G9fizXsrehzZrc/HNWZsnzHueHMfHQoVgEZFqq4dMp3T+u7StBeB52WMEZX77753xMWzM/GTcdRcjpX7gr+9ombPY/OnI0DYvxhICXQw4fmiwvPlsIBSRspJ9e1MOUFEKkugbqi9RnejblfnrsVlQkLAPr2spAJxt0J1XoA8LzxiOlnbW0fq9lecRroQPYzGQFvJeQ1/6e2TZCyAgJh162azfjUrdLJ41S5Ad2WzxjVresfxehZyWiZ72GFj4EpwItUNduRRPD6yrx9y3nAT1kCtiDsSV88lVH+mRCiy26huO+CR17IPYmiYri5H7dXO1iH1fRD/e4mhEpqW0odN8JFnmKjXOcr6tkeBtmckUI2AXSAoYKTEpv8Q+RnCn9Ja9BcJDomQbf95krWrgY0eFUdQRht/Qz7XsUCy/qUEQQKTCsx9bytcmtIXAWkhpHxAwgFqri1Q1+8JLCvAAuYFzBmFM5IJ0IUyOJlZesmgIiB2Zi6h2eoXWxYF4BWQAoIJpVNSvMqAHAg5A5TUKtrdzXMpGvu8MGRlVUA8itbDqVG54Hmmdk5MQ5MVp0uSZoXuLu9lhfBR0yGBwCAqqo9D+p1ohUnPtWTigMzqNoJIkBIj2Vxx3UNc0G3lJUJKBSJHpUOkSh9KlZL+BTKia5JAKUFSMcUCn3DbT2Q1RZkCdctetI2VNrnHK0LVWDXadBYI2/3wxRr4cMGeeOkm9N2szqNFuIXp4dn7ED98YkV+Dzdwd0+/11BdBMFg4DUgkslXhdcocJz1ocyLrf32sefb9P1eiPzoLTCO0/zx68MFPPQ7XA7fbbwGXBuOR1subA/eJ/huGM477/CTQrxHBvq7tHf4qWC5f+Z+1pV8Sbu/JVb7xnPp+O2lYzsoh0sUKRrHC4yCAiR10Sik2tzCa61a7wEIZJrXBKiLMpI57+mWncymKa5nWY/LVu+srI8CaMxEynqlMr1UvwZ+6HEp3PJF6rebGP0c38P8XsqovHZe/OAlPqvcL4Ym779A44f//W/QP/47xC+iBIguQLvPDQzjNcYy2Ayn9GnsvnR33Lq8ZML4e2Eow+vfm/pxDDZpwo22APgt1cd+4Y1hWKYdJnfl62lksnTGG2hzgu6Xkm4lbc9EWN1TAqgC9xpHHfCYvK1tgeawN9z7wBqfl+1yDFQNZvTukRqqmatGYtFQkUCzGmP27upD61K9fI5D02lj6mW9jwN7rFcvp/2onxL7E66oISYEAOxitICSX7artRtxaZZE7HoA0vaCyM2Rj52gaqHUpkxcuI84UYuKyDXb81yLILjpjTf5daBCeRWvh3V3CYy4fgkp38t7Tf7ZGtucin4gJ33N+G3W/qTds65s7lG2ibT4jkFpLyr+Dfk6i1BC83wR8hYARMghlncNhx5ocFpMELJaxpFl8T4w9Wu5W+e0GU+R0LbIsu0O1IAb0/mhLf51YxM2Im9rJY3UPuptYXPFrmVNLr5Cn926k4QBytpHBpAbrdA4tTC9HqXdVbicNHY6iWjc6VZwa9owjZX2WEMJUmkcuiLiGPZ0rQruXLGqryCOTifY7bapvjJ0vt2F1L1xsPat/xEAEhMmN1WDtqwITaPJ9jefFEFQRqVqbatdsbKy5c2pCsLpQKDHrAK6xeKfpwXICyTlWifDLHUZYAQFWjqAaNGxr3ucCe2ixblvFQHN1QI0Q8yim6rGhbXTXcZbGJVqxNmGXK1p4X21VWPlUKIqNNb3GSIJJFSPK5LEjkoE9RcN6DkpVTftGu98VfxkwQJUi3hFOa42qdouj2IstcHu+T3uk2p4G3C2skPmzL0ilLr8DksR3Vf7T93Q9xbWfQZS9kiGgjy9oM4roX3vhHgEUzjwmM5tg6fa5oDb4ZOsTX1ghr3NpfE+bSXEMZfaQ+Nq6r9adiVjrZUJVNHSnzCATACTjp/YYFQX5gD+BPACaus2rLs6ltGD0oQYUCV2NgYsAJXKTgkLeLVo7gwVtCcC1gSiZApJ6lpdeFWcTO7pQxUBEgkSKf4wSdURFQCFBClryJ5EWcmHiOLFasJvkuqlSmSx9W7lZ0aWhAUEcEYRBr8AfCygtSCtammO4n++9QqUMda6ImIIH9s8UkJeFkg54Hg8gNIBwKLef2CeS2gBJEPWjCIAMaE8F5SvCeUZWJ+A9VjAK4GLKUHLgw5wOUCwaGmJWxQrUcv+chQ8fWGUVZAyA0RYOeHrmjV+vGjccxSCHAEp5G43tC/FcFOMZqWMJGSxztt61k9TXnDNIaKmYFHxzx2+78CwLjdLWgA87+TeLXQHbhKe23q41PIcQBSeU/h/fKfwiCZE7+vY05W8BAToj/ZIYayHgjcm0tf0FZjTv4lHwWusEusjHy8C4WN94dbT0mXwZys29Kt+p4br3fO+N23sff+YN32eu7V47NOsGLE29X2J3+e5Nml3PUHu98H3s01dXeKx3JnHvp3O1deXDKDM+0B9ktshMChDm2isdzrkw3lhvBfbpN8vsH81tCvC7uPGF/dMpZc568Ckng69xjJ2E55v4G4bxve8rf7ixbbTn9OV7uTdK0sm6eK7uH52mrGHGzv9VI8uXu+Ef5XT/lq71s5Iq4zPIzOjn40PHmnRbNx2aOn0IU2eoZ0vPY1EdDhFi/aenYDp/Ur8fSLvOWvz3b1zxKOxor1Kz/V99m6OcOST2iYX3fo7TcAnr7tJaji9w2bcTLuvZUd+CEzmdwfVfxa4U4BOw+fPBve2+9b8uim2Ms5dLpwqxz4llCUEcIFe8JhgIgFEGdWdOI/+AgOZF+npZTUbQSAAoi7ZoL+9F2KXQO4uD4C6g+z6c6sQ/TXw7EZ831S9ZZi/Pdw4bj/r8qwwWyOGs7PN2C42DumAI/8G0NfGDYldRjM0zhmbJLQMjP7v5sK0GCflaLOQWpm7Rfl/M6bGLc3/tN9/h99EwL/td3WZTc1UJZGmY6il96fY3xsmj2wMTh06ZhsZMOEFh3YEnnU8/HaWQSm1vPUSfqis8unDodAUeFSobamTjQ+JXnBxsUawKf/YOCcyGTl1VRE4GLqHcbELfLUsAYDU8idgoYSMDJGCoxS1ri1qqeZN93OTlqgXnyMztcFTGsbA0hDISPNsQnw4d+iAQC3oBEgk5oBBKon3mKrMK0o5QnBUyyYKHaBwcpDQuRnEJWNjJlUQSe0UcvJMGfBLzP2sd6ZaioUO3g0j7k2Knw79/nxs8o/lXg2nGnUh+LSZbGx7Rhvo3aVlbkiKnOj3iYIFcHGTriXF1Bf2BR/4I2vrPz881mdf+Fif/5kWgAhPuXkN+XLUi3waLnAIbu/mZKnHh8XQtsPPuh7G9lMb54FOdi7Ha13D0KQBFzcDRPPxFDR6SUp3uzAQY0Oj1XaljWYZS11KRE5NQsObQpMlrm33ctnaYspLopaWlHT8krnXzfkBklIT4DErPbXLARrGa8QgRumUMJOTiI5USRum2iPxXoSlHDazlq1bcoQUKBJtwk9PQRrpjJTaxa0699aywfNJ/ytv8ao7kEMdjKTGktf1vqjL9tr4Q0Z+XEA5IaUFibIq1qYFQhorWJAgLCjse2W7dKR8ACgjWnFqPxD2TmnnitgNqACdQGp1SgV1XVOuwr6KUxzqSFRjOvtWDQBEJn4mUR03k5ZSdaNiSsEaZVrxMwFAtqLJhOfuTYtUyFcExCsAtuYQWKgqcbDPIWB43nwuAE3hoKIYux22p4mzPKw1LyOO34Y2+MLgGmlimiKun4H4RP5B4pdx2yFTyNvQfKc2E96k6xWGb/tPZBgTDCxhLN3Ptb4ioiCnitYDqXQbbEZuMcsJelYlBrPFn7eBe2Tt4UsNKbFVGojsY9d0UtyMVAeuHOShLlbFCzABmUApAxlKF4lUGV0EhVe1ypYj3KsQJSClBTmzxXw3pZSIQba35CygLMhp0X2QzZqfrSzOgCS1cC+Ku8vyAjoIMggHyhAuoGNCeQHSk4BX5X0zkgnRtS+6jARIyoCS7y8wXXtAFV5IkLAg4QBZH3B8PgCkf2Uhc7++mJcFAq86XlgF61PB+pxwfCpYn45Yj9TWMhIgD6YRmgHOqgRbRL0ugcApA8JYXxjrWoCvjJTEvDVkvBwXqPYsqr6oKgERyEzRpay6puu+n4AlgY4FyWif73MNwJsAACAASURBVDvViw61vUf1j3yuYhiMYSPuv0zWwYwjvYvpvBM2RAIq2H0J3ydQWfzHyctoeT57/woQ6V7P+A1AO3M0g5fJs6HcDXFz3jUBeNiWLwLgOfw2he1uXMnOkN5A++uUAhz7Hhuuj+22/bDTYuva0s92K/7koIQzcN6+FN+XfG1EAotBWLZhxCdtHJm5M+knMMcG7mn7LPVu1afH53yD9goGYkur4uLQuj2qMR2Lsaq9Od8Zxzn/PjIYho0XDcuMvvib03NJkWcFcFrYmM7M0zB+w9qaN0V223hR2IhL8WYqmIx3KhfWOeTvzyD9KUWfTjzORPozq29YKs6ThUZWOxQg0g5/70Y2uu5quKeKd6LnktlCQF/VzpRhowxSV5DhrozBaGNf/XAUxnvDh28GIZQzaTvQzXHk8++GnXFq2oA31nWNotnOOMzp/ZjO06azde69Vqdfbvwk9bMPZbXT9Do+O4MUhedjs7tGnKnoZ4DZFjP+vthDzNuGdxfuPzvs4p/M0xCA6ss3PIqJ4wEuLobRDadAD6w5/O60pakRjgi/ApF4hzcOdsXm7kUrQ6CWciABPiLENDe4Fje7y47JznG2PGMQ9s8HVwK1dTgt89ZKAmNoXfVD7Sj02K3CD8FTZq2nG02zU/q5kyZ80blMyqC6EXPl2aXRH+fB/GbVuR3X6BTnlQkA64X9Efj45wc1TBXg87qqMkWx9ya/rwx71Y5P7UKs69JwlJwI0EEAMw0yiJF4MnbdPVq/1dMHqQvWZH0CASZABxdweQGXFZCj0nAu+p6CpnbHt0rgZ7e4JdWqNuBzZBC7raMO+P5JZuSdu7bEsb2TAZvh7GvwdDeXMRwYvsVeeYvwfL+w/Xma1TGehWLebp0OvMYVzenusoKUiUgP2o7ea2hQCveFtVb/EmJzV5N1CQkm9woNPUUv0i8xlfrefNEl9Y10C963QDjJY94KqsJMpA+mEFX3jHbatK+yUfpue0nPPwoNB1rBcLzdG2ea0NwLD9o+zbZl+BY4qy6Sx0theyW12T6sPOrH1S23EYTLiVRIvmSkw6LuoxNMmJ7V3TNUlJ9AekllMaE93ncXv7gf6G7u6l7qJJ9gFt76zv/V8aj44bgjQBIIcnd2qALbcZ6sj2rRqUoa1T8Ka1xkj/kczyFqvdb2etSLFi86ePGirVg4AViDYDzO73R720AkSsYzIQretylPPTn/JqYJ3hXOwdgJkTrFwIYUdDWMRHDmin3eauqeX9ZesRrG1FRr9vXirSKoUwyQuzPXdAUEJAFzqTlFAGFgEcbnmjKOJSGRVKPkyu8wqscCxSlnSNse2VpLjaeCKoGKXdYxC8CMYlboEGmuDRzhnX8KVvq+BpEyKDEAE5xbn1SOoEoyGh/dPYHY2oEqTJRjwZFWUAFEVqwvR6wvL1iPR0hRrwQgQaoW7GEc/Ifx3hL7aQJ0pgJKCethBa1J5XbEWNcVx7RWhYek0eBNaRVYXwTri6AcjV31cagopPHRa9gDozdiytEsbSaVkCRwEqN/3s4q7TdUMxwSmKeK0OFus7oAZ4PQtGfhI1GPjydl+iL88EE/v55w2X3Jsv9u7tr34Ue14HS9I4W/BqLiwC2wR9mjEsFJnwWhHIR0E0b1DcBlcbLPFXJz5a+eRer/35uhPwGbNu904lzfzr6/bDxfZc4vLauyIZek+z5r4zX7/33qHM9YsjNU8eBCrzacse20eRbeVX71Qjonp7jN69bvdonNS/7JZYZvFAIPtTfAe8YMBvVEZgkizp0p8h324BfH9XcB+i8FA9NWGYKw0RBUeB4vlu0qQqnHeAkyFA+0yyg7MFeN9phml7D84ivqHd4MPH/9gvThAezW3s5Y+aVphL8HvPwzJBFYLHUB1tlFx4nf47t/2+c/0GKfm4UVPseLyGth1gjCxIznimJmbXEmBbv9bJdXN3IXdpElMMFTvTAUFWALgJxNOObWcMkuMGsLuos8ENSla6Q/kVYJrDxt88c/P+Dpv75OLsnE3Df2BwhXcJbaHqpFx6ocKI6jPyPqjO82DZXQ3xm4Fq6zgknAhdTyHATA3dRq3Efwql5ExCqlUvtY14rfDMfOhGmtMinyH4J+Ixjz0PYZBVyNQq5RkC/hz39P2nQT7G1Lm3LvuVi7AWTzxZpxpsNx6ggh4sWQ7+x+PZR5C5yqQ8ILn88xvQD//PAB/3p+6l+Y1PArou9vAxMsfvqgFjrVMjQRVl5RlW4M/OsahvlgrtyPPOAhEJSyIj5L335BGG/a+pR7hcPX75hFI/42UAWb5jGEAHUtrATZUukCJQA5ZbWuJMIjHgACnkVpDB+3dCwOVyUDPvZ1GNsYpxF3Kk3u1wqd+HWmx/Bj9TXL49IaZpSE7L/Ns4FuqoVnQqJU9Rd0PqDxzk2ITktWV+4pgc3iW8zbg4gK0d3QXIeu3kC1mitODwTYxr8qFkjY14wAVVvlqPTmZVS/0yZsDPRc5fBUt5OqIGADpJZ2aldcm8LNZEXcfTuoCdrEu5agFukWR5mVcRDqKt9QeB+CcYlv0lwLXmAseHy3m+l1obFtJiquczIyfNqGETep5bT13HdMrQz3VoqXVn2EYN7HtnKs1K5mgNBE160O7vKrCkmGWaenhKaOYS7wifDJlD7/IlfyaeoC1YnUpjsSamxEX+Ijv7gVtTh3S391266I6qEUmnCa9JxgvKowWRiDJlknJFASJMph7cEZNFMgo8BjijuR0CXCgnJkrFKArDG8y/EFx5cX8HrU8AaSGlcYpykoT3V4U61vLA0LSimglxWUCZQERAueacULCIRVhefCKkI3ATofNQZ7OTK4ulW3+U5aNuViz1YIssVYT1VBqO3Z6p3CHfTp/IVF7+nEMHmmVGq/tZvaQf+3he2uoDQx4SRPfxZ2mKvvxJ52EIXxHwkqRJ7EOQfa82Gvw1P8dQA+HGu6twn3CMq/JexyF2j4Pw6qz5Xg6n69yvlhgrT3njl+FPzo+q8Fmv+8uRtnM145sVXxLVRxkSTyZ5uItwiRbkwY4z2oe+2Md7wk74lXUXjuR0RTkH8VoebNaPNmN6qfFzrF93O81Q24FnMPwvPrvDXcAP8p6PKLkuF3AfpPDzsHqPrOD7B2YQXUy2UAzQVxPTyO5UxudAT1pkVdFLZLkWph1JX1i66ed3jb8PQZy8ePeKFHqL92GD833IJOgTBav3XwiZrAWwB8QhCAXwA1qd18+9r8dMuO+lq78KScjflRoDfe/dlBpqmC4nqhnY+7AMJm1SZocc31OUDtFi+ZKV0B3N2l101E1Ut8i4vlDZE2D8Gl8tP/+VzbIPHyzF05dhYoYZz8atHK3Nd2RO/+E3r9GbzYhRcSHl542UYAitmB1bi1JiznAsgzajBHYYRAlqEAbNfAcB6q+hljZ9zzw9jkut94Hmp565wjlOVjLP04372lnCnghzG2Iw15zb3ze3dqg+CTJoQb1Gh22wLY4p+PH66r1t1JAwFfpH5srb8mIGjIXfE15pG+vfU59WkJV+swfReY0m26HEU65STnCb0UI7biYXxMYCnKL+qUi9fYz4ddgPTLPBxjTaC+2ZpliIN+6nIttrttYlvaVkdl7sRtZCGuObpT+F9xKa4TdUM3L8vxy+Imh7twAWzdqLU58oJ0WEBLBlPCyrB+JCSkIGT2/uk4UBgItaj1MQ2bk9VZowD4hiatnS7AU0G/W+am4QLMi3QrcDS8qUqPuQrQo4y7RVYQ8wBDaO7JUyia2tYm9o6sP8nsXYWxZHVnvRqOFWtjbUa3PwWw5+xKOsCue/U90BHfZ0qnb8zd925V1i63nN6s9x2+bV/30TF8/GxtrOfAzcrYNCxWuvlfeacSUo9EuJvQTVkMFSBHcX0j2y2PqVCAkVHqSk84pAUxxMXf5YstDy2keKgRIg37QYSyqsCbyAXbjZB0e4Bgy8ZlKAsGVHfoImxCX6lIJSyQIuYFSSCpAGCwmAW9hSQQEYAYzFkVXDgBktQ9PFr5MLWByuuyGAfLWAvAZYWsBXIswNHLLmBiJEnt/kCl7xCzZhfbH+u6qeyctbEAUhL4SCgWw73QgmIhmVjUrXqSBFrNm9KRIbyoEL9wZSEpWdx0U0zQ2m3mKQe8dxrXZr7qHiRW9/Mi3dyQkLm/F9tjxDw22VzXcE0jPRtRUkxBR8YX4XOEyXPXLfn6dVvXa7KKrwajEP1KeDq8Wkvugr2z7DeBZ+A3G7Mvp1NGzJ49k+7LObg44Q3wABEVyhNpTPtLBKA3Wc1ekudSS+lxPN7kGkPXn8gG93D5/E7H/TX6fgkP8lpl60OMxg4/BUysq28v6tIy5rzU9GAj4cumeN8P76OVHU0LfWgc4PZZ14rwsH01blJm74a89Xwx1BrOONqK7fh2x7l3k/P7oBu+EzRMNl9CNjpLazYW6BNc2eTp6pzRzG9ER18b7m3TtVeWb3EMboB3AfpPC+eYIVvQdkgGmyDK/1IC2cXTxiXubEP0j2o1YgdhSmBWd9k1Jon0lxbv+8c7fFf4AhVoQ/AbJbxQ6m9cHUEJTRD+6aDPswk/S2QATYBjl1wd+A3dQsA/JgIIr/IPaukRyjlAC8jQ/GvMdCnsMKuzu5pdmLKR4cb6RJ3TrPb+Wh66pvdbRkK1vAGArHEMwVIvv8Gezi6pCiqd85DeVIUm1i7pSV685YwWdU0hyC7OYBds/nt6OFvD2IRDyDhEs3fR60FNOEsQGt/dECNsDSYcFxNOuKAcz+15HefAABL6E8BQfJ1WvygmqDloSiDKWChVV7siDE7NMoe7gxC1g0qxvngzZOe7j825u8d7IN7Tz+Dk8oyNu2XjGyveKevchZ6PVzU0GejPuT7ulRnznGRBdiZoQ6qkpRvfbX7THC9nDTV68fl5a0nzeNB3/3P5rY6fW7F/XlucSTeSPqRU2/GnuU7919NXbZx7ETnVrM04X9qPswV9W5hV199qVEKZFwJI458/0CNACU/HZ6XRRPiMo2ampHusKSu5YDoKteL9RL18qHJRUaP3EaT+19aGCdWn/Gd3oLZ9Qfy5PeUozA9C5rGdk6HZA5p8qwKW8JOGunwJu0v0uoBJ95HqvCMnIBNkSZAlgw4LlscHFZ6vYgJAUgHgcDHh9RJgEaal9ps74utZqAqxgECSQi+ABKIEylT3VxZpu5gA1cLTlxJzFVJB1F7edduS4Zu7i0+iccklumGH7ffw2NXKP0hsP2V1dy/qTrqegWr86tZfFTA2D1szdOr7PlLtydhhn3xun1ufd9KfgkZCL8sdU0VH85EW69eeOPe4P8bhjcvT58e/R6xr39iscz3iec3e9Uw2T1tDNUZ8QtpGi3FFh7DlEAjZ6msdjTxcCAsgTcWkehoKZ2hF5WRbmu+75MuhWaFzGAd/BwazenUrEHAzQW9esFzAbpodIhrLXcP7aHqGrSHKoHQwYXc2UldAKMZW6epRxRkvj8BFn5eyQo5H9VS0ltoWoQSGIIn13ca+xrSlNlaNfbNnRd/zWkDZWb8DSmJwSjpWLvDnjLQCiQkobP0mECfVFSIxVl8gKbhuF2h6AtSVvg8w9X9+rpAVTaFUB1tTCCqTKoJkygnsvD/CuHW4GChAdDPf0O9+kN0fPx461/DGU32M758BegA+2Mp/+v7tP11jeCvH8Hzc5XtKfzvvTwPxHcoh86kxnqsjs9TBdxrPi1nSmSLFQ3j3SvB+2Tid+u2j6/F0c3Q7BRN07HmLa2u/FZzW/2J48f0G8EwTWkPqN+mf31XBLi5L/NGyDHRzxNnZmW0Pr4M+76T+/d+x7He4B2Y4dA6vdmZzXyt4SOZ4IzXbRXAu3S9Gfq6CU33/ycflXYD+U8MeQWiXCGrNIqhClOhmV1p6Ebsmk257mpctMOE5waVNQgTWG89gCTRecLyF1fK+rf0nwf9/PIJShmQK6ChtHVTwg+pYwuMmyQa6MuPD2UF3rwxql06XMPzf+0zQqWwOneoYZk8TkszUPZP9aLeak8zhsfeXpQUsFnfBaBdu9V6MgbLC4xxakEMYeUJLKG3uvFFEAJvgBaZgBFS3mvFiv90Mjnhk9HXWjxlUns9xlLbpax3RPGYouFp023MWVMtyIb0gBEMF/DKUMfRhj2cloMaYrHHPAaQFh7zgNySLX+nRNaXGLf5ax0XhA4CvBBy5mMUW+jH1z2iV/2o4f2ZhvoED6k8F3bnlzB576iZmgub/sjif/+M3p8WEL6Lr+2niCrxeinflSvf1KkOiaVoKhRjtFvS0kWZ5b634dr7l0ib0u5cY79g9NOGH/SQKzj6MHvpipbB+uwqCu274exraJHp54aaRgUYTELwiD5tg/Do5+Ta34NSyexFeRxDkbodpH3Evmh2x+h1dKNq1u3PoWcn6Jgs1hS4ClqTCaVDCmgiSSMcmLwAtADIEi/4RQbLPiXWcoftmJ1jy/5vglKBtrTSa9KIqOhnp+4hQngqnm1NtdPPpPSdXeAPqGupExtTapdjpuLYdK0Dnn6pf6tz6Y7iZkyAha/uLQJDwsq4QVkWauv+D5rou1dLVv9s4DWkJIV0cpNnvvT2fZy9j1n3GtI1ZbeG2kUOd3g+ihgMuQxy3xUjiRmrVogFI7Q5Ra1EUwktXDpl8WXHG46nP48b3Pax1CwMkKIGXqW0PLBKsHV6nrsJUSTkBYGH8t3TAEzE+kIaq+CzHyrOVjRVy51/DCE/wmFR5YKphiAhkSh6altkE22zlkOGxHABZQKJCcVCCUALoqEJzSRpPnQkiSc/lbGuMk/G2AhJ2Vk7HlhgEBhEh4aBCebE46G7xHvkw4m6tx1mpR5kw7soqukU62TIkkCvysEBpxWLC8wyUrN85Q8oK4gxiBskKUNE2QGOyExWlf6ThKXwsK7mDxlQHSMdLPO6F449YvU3DkFxpBrUqxUA23DUFVLfq3+ygA0tNj5bmGHmRAXOjwbULlRlAHnaYX4EvlRf0cb1PJrbP2/mgbwszunTq9yXlYZInUFtpz6S+kiGn0rPmsufSNjygKj7sQB8j9vK+adq5Z4FxOcyBWl9kHCfq+zlz/3SyqXLz2tqs5TcH+/xrUw7rk1/ai2u9CbyqVW4sa2rxeaau70BLz8dp/waNOFvktXXKjmsl5X3mKp6390tks6P2Lw2iNzLqDvbhxFDT9zu1K/yNK6P3OBb7NeOA4+/YxJ91k56tejn5s8t7D+mb0Ry/bwCFeT+xn24PYbXs01XL+USXwmbuDcl+VpQ4BztkoR0KJi9/gbF4F6D/lLBPEdpx0A/0dtBz4YropUSn1W/a5xIuhbZuSQJDSm7RKPWWQTqLD9Sy+nb+6BXzFpnad7gN9g6W4TUB+Ov/4PDf/yde+AOqPzQK711I8HnVd24p/nfA2U9+4TzU+YmAv+yZWbyrMBfA73aQK1Drcr8A2TCggRGQCVNAk75Nsu7zE1euuXjLuAcbBmVyWRAPscEVZq1DEDhf6useN1cKmVyg6mnZBji6cPRbXUr/l7033ZIjx9FEP9A8tGb1vdWz/Jh5/0ebc+7pvlXdnZmSQhFuxPzAQhCkmZvHoiXlyAy5uxkXkARBECBAMK0QrzINi0tJoO4+hSjcTlD1YBGzRPCwDYQbdbnh5LhaOQcFTqfDoD7eEkYAiKdd7pvwPdgpBEfzQGd5oJ5KTTMevs/KA/o+NaWFG88ZKAV3dMJHLlhgxnMK6Ijq+zeM6wpxRQGrF1IYd7bfRwWtp64tG3Nub7x2E127xhyU7odyE/1etAiHLWKscrCAXYHC7J3N60sZun48WknIHhU+T1nWt7p7tT4ib8djCChxv2hG0/8RNGpI3jhSmDPhmZWNPG5D4uvw3oCtzejmY/d27Ombu+cBFxf4jI+oa6Xxf0Zroxk1UcHrpC8iTPmzYNorOubf+zz2nvv1tFs7M/9rL/tSuqDQE4xGoPjNI7rw8D6HiRebsnBRM0QS91eKiEd5EcNXKeClgMsCJvmrKKggVMp3nlL7Uw9N4oJiHtjUoQgL5E7B6zyGVI+9Y576pGHizZtTULY1szWy6F8zrurqQe3++W5fE/Y2bDVS9MzXurrfsZer1ilhqFkvs45rk5UObcmmMmymeJ6s/3F/Naf3UAgHVWQnH0zy7a1VU1zzfMrltbkxHDSqQBZOjGbjMiL0IQZITiSX+5G68prcIGWSH5G4RgRoSwuDYsgoFV2MPVVq3tdLuZP7tifliVF5wVvAz/sstGDl1Q9qrCYjGXuIgxcPB1oNajhnlnnH2tkEQq0Sur2PSbEAWEA4gfiEwguIxGceVOWwA68ALzImLNcRMJNSvPZsJekEFQWpcFfGqZwEh/Mjzhbe3A+Nxo4MfcTc/XQl9oxRB4IycZLqoqHnCaATwAtQ5Y/qItHA6lvFwXQPcO9zk0VFJVEcPXalfqy6gLBoXcV5H6Oi2sEiNjHeOBF7JCsT/4t1wXT+x+lFaId3jTBmk3a2/offa/g0vhbH41r4cn2WZ8Oszi9fgfL2gPw6g2cIfu8e2/UXFiY+7ne6au7gXujTve8WPluSyk5dGT5oQgvl7vlso9fNvJ7eu1pJJvzFKqMgv+Uhzl3TMk/vfzev8+uGmH3e5Mft+6xAnr97RWPWzFbyKnXnUD87cLjG2E9JNOk40qb4E9eoMeEQevsIYhfSXJbFXqi/O73OU3gNLrf3hzeyhn2sizO++GE8xBryPWVd6oAncysvtG1FTY8n+ETMuPsVRZpNbLr1O5fR18ppLu3CFfP628ATaf0F6rWe7cDkcP+5I0fN9IV5mDbhihvPj47VDzOmF+Blpuv4+7XWwh8Ebgb0nxYy044MJb6z8MZ6uprC8mEGCn1ioRTbSRz9o8jBGO2IObVkdAXzucENviF4GHeg16eaYfcDgE9bub/CY89dXGR4w/sx1ktBuqJ5mg7RC5D37x1+3H+9Wi6irX3RBTCpNgjfXkaSZjZx2tJImYaSmmK5Vr1mlwAiCQELiJaLLFYmPOxrU0Axpgs6I4VnZ1Ui1j5P5yEZMpu7yk5zhneKk3nqzLujhjtPaYMeVQR147OtAcbHs1TDGoKTRSeTx2WgL+X9wWmx0IKCgoULFmlF2HMpPiRhgDXQKMCMz6K2xKphSQdt+YjqrFNu8M1gr78TLwMwN6TndFvKECDznn9+/qrPSOwJRKCTJCIC7pTHf515pQd4UA+wr/XLhmJkiykFZranUBn0qMbz9XsXKSKWu6eADY+eSvY0fLlY3WBF64aUsdyJR+Z6rs5fvtA9QAVU5J0YJyFGzniFgJW/hctMIcbKi0NHxBI6D4TkEWRhvYf7zLs2Cj8XMqONvjazbvu91aeEzVfT7F6vPmgqhUYzRFBv8wVYFvByEsP5qYAXCU3OdEJFAVXCukKjQ5Ug1neCECwstV9fYteVmKyiRipaisYYaduBoIMKvFv7mfT+7QrAub9GqSqkIkJBIY1bQtAIM+3e7lKLe4QDdndz9Ey2zrP71eO4qXEd6ltcCIUKgFVFAPH2XY0w455I2zAcaAu/vQ9c+ZJkCkoZBnj+GrbPEnhI8/HtBwDAp/tNoXenLAq/7CC20Wqfyszh1i8dnp4tzdGuBjF3NgnGyshzbwQrukXPttpToG228ivOfnGBRCQg/beC8Rmr0J0WU8FYK6txnbBQAU6C24oVj3VtdFg1U0n8pJI4XSvpCbvhcAAdIr8SIIdETyi4w0JvUegkIecJIKoSqr4wmE9gfoO1AjhLBzBLKHiG3Gdez6tIYiw+/kuRwzeFWLy0TVxcARqM561/zcjc8ZNij2JI134EnAdV1ugPLUqRgBxmpkridc4LiIscltW67CwCk54EKKujKXVwSwcGWL38GRpVquinhVRRy7S1xb3Pe5pMIok+CwcINo076KZPPuxzFfzVxF5OBlo6emf69rp7NPcPA8+R67wA416xV3LBR/vrwqrCz+n5DG9wdRj3GWo/1ID+3PByY3slXDuGzzXI3GhmA0xW4d190EwusH9/VItAxx/5uatIBFvcX6SwG0xhZ13i7VevDxcq/q64HYDn4pcn0C+yPt8M6D8lNGFZYEKZ/sjCuJvhqfaJXGEUPFt8NjF643nIZ0qBTimbhffu1Q1u8B1AlGAgEi/wNXjwmoG3U9Ar9ZpHuVGz3Vt4AhCvRDP4pHk+6Tz7SPLsb2jKIqB5opsnwaPWcTI8sormStHO5tpWtmslRbWBqE5rDnkTU2jjfRAw4wEcSumidAtELWgoiyXkooVz1yslmsdebflKAaO60zRMqbt1WjHcb+he3DFsuyvaeFSuIx5AmvXV/LFBDBs55uX+s+tnbdxqKu0UhcTpvPr3ZqdhrRshlDp6WuqGkLsHJ1rwgSUEqoVud4WjD3FTpH+BGs557Y3nZhgLy89F3c9smrzcjug6eOKUfRrkOTZ5TOHP5pxHwrimrh2idYPoZKAGnDY6ZqvfZuP4kmMbQriOQPO6cv/q5+mu4O3SPJk+ff0KMPCv794DRPjn1/uxrpL6KX/3dIYP4d3dHcDA/ZcrFY57Y7DTnzLdWSMMmfEBfVuCt34ENv6oN2M4DVo441Cx27Dj8hd4fafwCOvNwL5nzXOeRR3qtGgIZYumxHAjS1MgzWEgyzoSyxZptWY2RVPEe6ETrNOYhKsWNdQx7FXBeSGgFNByAp8WmdsnvbKkFFQucjjqUSO1GzOu2lFmKDLjua+3aGtFXENQ3MBuvN4Nfp5Py5aFV/uRwauEiFZTvjyn1g+EBURiwFxKAXhVL1yAShFDHrc7oe3uZh9LKnq2Qu+89nuLpd3W0yDpHgahFACVpLuohS63dnAclJmcMID1Vf+bd9L4ronn79t4yJfNrdSuIpnHrzMRJcjCLoXk5qjXbxYPYhH+3ULo54r0EJ7LYGC5imBShj2RUpr0lo3osRY37hhbonBoxg9HhAxEcu84PUKiq9m1BsXIhcYMVAAAIABJREFUFw9VwsGz8jDLercAhAWFCt5CDgzcU8GyFHytq0X5lkkTvdOVZxITsLCEHCfDzSzYIcw4LSi4A9EdCt5gwYJid5qD9U7yCqY7gO9UnhIPd15Zryao4McVtVYQVhT1Pl8IWIiwWPQslivPqbLsl0xGs+7S/nVPNKVN9ogDnNm3t4Os7yoEr8Ko5QF0LgAtkI3QScacrY0FVDUKx6pjz4RadK7QCq4rajGeU8NC0Hia9wEW5UXFeRW7owF5W+NB0E4ubQzC10cAYD08zZHGjBAB0IPk47eBFB/0ix1MvQ90meEqme0XgXcbz+8ZePcI4M38fvX7u32eyXmTv8dfnwGRTD8EAehOw6c/KLF8YOBz2uT4OpcL7I6vBO4Yw5NdA8cM3E0ue9vq+RDw6yIQtNWDh1OVXalW+PBojsTB3949x/qjOxgz5Nna17wWzfRrWatvr+7ZRmr+s5PMc7ILbWqvx44/KqJsvRsMsoc9zjl9GiQJhmdpXgm+iyfmwTqjvo4m1O39Ps8ep9azWvmE8WgHD7eKzEhxex4gauFMIm5pYwWRoWTmciVQ4u+/OmyOZdjbTfNNksfy5oUiCHg7eqG/KPCTqbafppxfTL7/heBmQP8poVc+5qfmGdBo1jaHC5qmUpmFKU14NgMm1XU7Y7Ty9DMqBkOGbYnsBjd4Zfjn50948/4tHso7YP2Cjh6Ntj8S8OmghK86GgBqNA/JvJywyelOcOa58AoL9aaWdQ+eiUs35bkJIIOwSgE/qzM838ItakU55KuRnymoR7pYDVSoLhaBwMKxUuJ7QShTgznrdzaeZx7o1sbYBCA43F7QdO1tnurO0MUdCbEr7Boi2j4ryB+zeON3vDgosF2/ksYhKP+6+87tMWlY/GD0zyJqEEnFawtiPH+sZxmHCjmMle8536XfyctvsawcEdijIfGq/dQLbJ4u6EjmDy8h9xRcEi852g8zFrT1LOk9+JHx8Z14Lv3L25bhT1WEfnmIClGjaWqyyxSoZ1EAPn19aHkV7u7iHZSpmis2Yn/rypUK/9hKfA2Pp+FL64LLmabpqFZwIawPq7bdlC3Ga8wKsfQbYa7CNwLfTU3u6ut1KL2MyjGxs63IkEvHs8iMyNp5xPDw3VKA0QLDDRrbzHjSK+3ZnvFcUuqRosBjBbM4b2LDCEQnkN11vmjo8dMJWBbQsgCnBVQWvwsYKOC1oDK1ZRIt1DkF5btFn/LJxSuY1eMTVQz5ZQUxozDUCz2MA9tySop3MIhWgoY3USTEeEV2wKKSR+5hgt/fDAaK9hSRVGB3iksPSnlmfGW74xhandWpRjY3DheAUFUkqOAiXqxEEkVhCKUfRjcMTtozbRDKIP8kmhrWi8aPOjGJuycDTEk1le1UdmQdC49MvGKd371IO5sH+pwRoj7Is9YC8q7ozuKkz/a8BXfvWXJi0BFvbnXJFT4awti2wxZ5R/PUINO1shm/Dx5YOkZEWBlYqIJB+Ip4o7Mc3F3t4LrxHvfmlg5lu2eewl/kC6UZlplPwHoCrwXrw4LKJF7nBDARuBTgDPAZWM+M9QyJxrRKXVQhc3pdwVTF6MwAs1yhw8RypUEF6vqI+vgIXleVe9thGh8b87CPfeN9mwZQ62GTjc9AJflNeo3CSneQyBBFQsuzhpevcmc7g1GNLdvaT+z2Z7+OC6f+ToEoLzADOCt/CQX5gd5Ggd1lHcbfrLnaHiDRqpHQnkwR3+8aIwLdXTSeHxUGXhripuAvBBTu6B6M6UALTT5794Lw5mszou8B5R81S0nfH6IxPRr+Pz+FftJ+aTjsFhZEjukv9MfF7pol2JcFfwzYwIf77z8Sxj0E/F/K+PwDTY0fFzYogg+lejl44pjvirpZzh5gJlce2Xj/aHP/J4N86HZLNsp7qeH3Rv5vPTSz7eFfifccmQ5/UbgZ0H9aaIrA2Zt2olpjxLFZ/UpK2BRSU0ZjXrpRGuWUxoznnXE+JHG550eYSbeF7a8JibY+k3qRA/j6Jz68/yBh3I08TWFCdT6NTpCF/Bx2FRXiLRJp6ATgXwD8HvJ+JLkj9+8EPHAIORvgTn8/Gu4z1WGYa7tkO3lJG5bYXdkuvLRwk9nzfFZm7j/fq+rDLWtCHIdc9lBG0rZGBVQxBSs3L2ozDJsiMnhRdhsxzh3CojDUO85N0OZaWxSBQfnVn1clV/RPuotDubMuyYqyWZ84TrNdTNS4hT6oDDeC59P8HZ9H67NYn5YjumQCULCQeEZaObKKVE/YVhb5b0XFZ6xiPDdFsnmeu+dPUChGBchAQjOJNDRgKjRzexc1o5eK3nx3ZDO1k+QllqJLZURnXw6/DXb5C2830e7kLC3pcaR2wA/KhLLigRyrzCKu7jmvdMVkYg55BiP6xcIaHv6zTZBPg7d5Ko/as//+5j3AwKKXH6QAw3gP4P78Bb9r+vuvj/2YbY0P5S9RwbhDswcM/sbbnCUHJCLv9eDL3IiEAaCqF7LW1Q1vGgZhVyPf5WR1oziWYIiRXqOSmNFCXxdB1PuaYuWxbx2XXualrT7yNo/vT+WEaBAXT17lyWDvKybCiiqGI5fLxauaC1DcWH6SUO2nRQxnakhHWcTIrvyUzfO1kDuEi5c9+TkvWa/Us5v1XnFeAb3jGczgsoL0rnUqtbXFusfRVUR1Re6NbHoXOhWIyU7LqcUPg/nyxPEwrtIR1VgRPOKMzifSZtZquOm40xkW5qSyHDwrJ9IDFRW0tusHrKRuhkRF22DwsjHqHgavupa/wz02TbPK9SyxPANK9HgMiIFSNFMRoyoAfL7/jDZoKY/TdlsoOk7Gho7N/A2kePjSmhI8uMkO/KlVmy0Mf6jVRrJgQfOntH5s3sOkxlQ7mMLedIveEDykwzrY87HWMuO53RXmCWplfOWKhSoKEc4gMK1YwXIvOghYgDfLHQoVPNQz6lkPpljFvkaT0HjRyAoFcnCFCgC5E1yM50XnN6EWs62egHKWdfHMqCtQHx1JmPWXq8xrkF6owxqKHnKwsUAOrqyPD1jPD6j1sTs4mgON2CEcE6V54V52C2PJleVw1aovHwHxkK+oCwA6A7SCqKCUBYUqllBYVT7Jxjc5GM+dXDQqFcFH0wzuvAYvSK4hakiUB8RL1w4Z2fC4WMomzVqXNDp0GTi2PXz351/0xUBPad2wDN/C8/ypHldX8qRDRVhI9/cXMs7kWHv4Dnq3+QFZp9sPPapActf/dp5tlZpH9nOF+JA/RhR7bFXis86/D6XdhW55N6uP3uZG5/FzG435w2jEz7RrPyrGfmmylR84cbkvFnKHqZd7Hle27/Y7n9ihPt/AtLX9h3WRvDmfL2T7jrBXeZJfQtKOjaYinq27HdaEK8BJKCD9Iv1r8+EHhBfVlR8sa6vOKMttFhWvOgqDnSPBHAaTgxO9PnW4MhrDYckeRYaxerpA+xv8lHf66kf2bv6ufGs+I8fuj8TwBF7whGk/iApbUUB+YniVpuT9wv7rnw5uBvSfEkRxxN3OsZFir4S1na2eIqfSM/BBOxL+BiYTOE+sIqwhM9PQpsLxBjf4JsBi6EseaU7OsxW7I+N7tFhx1Hug71d7MFHWBEyQulqAJMzdkiZVbuFF5XIbZuU8d1/CQG8wj4J0Re85WsV7zZ51YyvKyBbq3fo174ijYiFowdw7OyjuXVPYksa7npvZODdI4RLdBOWy98PFzspfE+9mHmnBbFrWZ9b8En53awO8jxcAhclD7r5na7WpsltFVdWNn8E48xlrXcUWsrIbeaaeTNNm7/Rr9HKdNhTovBT24DlS3TV5v8X+PZefx3SWZk/BlvYu43zaqfAoD+v6RX90hnUa0x2R/kOM8H998wb3fuEz8LA+ggGs06sqJm0K+DyqYep8ftBnrWP/+VVDcRa0d0qj//3ukoZ4hv+kE91DUt9f6t+LNLefwI1U8kvTx5MU7CGJiVh4cGSz1MxgZgSNwxc9XoNgqaBG16TUZu1XMn65CCcqxs8AP3DERSowL3C2Nkf+yYg21ZHNkvaBhbZfrOcajVl9R6c4AaKsmcrLBMYClDuU0wl0OoEXQi0Lqso2BAn9TuoFblc2W1j65jHJIJiR28aLJeSz3fXM7Z5kAosXeRVv11pPWIjaHfe2FlarzfA3oicVvWzULTqKhG8lhoaZlrGqzP2hQ2IUCn1J2qZCSj+SzLxpOQ4SAKIKZrVIEIMLSVj4IiH8iewOkTbIBJLDB5HODHj+o83O9kyuMeDhuf+8hn8N9fRP8/GbDTSfBYKyrN021xi9175KZWBUpeehgC51O+DC6jc5XmPTRBTyXJK+glDQGdHtMHdotuS10OxVWeZ0VEAM/E7co8084GR0xszhnKkyjhCxZyHSw4YFd1TwtTSDdhMirW/YDxjYbJKoDhLKvK4L6FxQQeBVr1Bwee0kxu5HMaDLHJI/Yj20xFXn3IpCFXyWPpRoE3IIgIixPj6iro9673htCDKHEQp/ZmWujSZafwnPFv6mo2FG9DMLr2ZALl1fQUtBwYpSVhBJ/dJVDPjBG+g5HeF9fkWdbgNKEd5PulZV410rwwNrKGUQF6EFX197WhYWULXvWA7hqEc+Q6+mqHp50SGDQRxz43HzZDd4ZXAD+eT5jwwfwvfPW4SyRVR5c/dSQOgN7RDjf8bH5LoB7Ts826PfJ+wNNmFne/ea8Jw6eM8g+VeG793mmbDZBOzJmNrmjadvD4OEonp6+zerj2t83ltuwVzinqeLCPzMQG0M/ZTiN2hTt93KO5pJ4u71N8JxCpO6f1We9QvBzYD+U8P2rqvN29oWI+NOnZI3zPCZ1iKnAfche5s2MT4IZVD39Sbb3uDbAHdC1OPjI07LCeflHVDv4cZXNyCqcf3PdSzqIzVdcE3z5xzSgGUPCAqe5Qp2l7gV/5jnCQSXldPDVM61cmksYjdfelk3nhsul3CYKYfzqb0c5r3XWAaZJAonJtTpQSDzeATB7zQkwA3PlVVnqoq23A7HM/axlcltQx7//I70VhQHmhgU2T37DM9nO9mgcN4NIZwKy88Z4130rRJB2LzTqD3u/vyZaiWZsIBEyerj4I0RknGlOvAFoqx95FXSVzXEMIGrekDGYY37msM0noXW8Cwaooau2ui7GS2+Jsym+9GNwLU4UvrsEKBJQrR5mFErYewtQZqimwg+dW89Q9X4MQH/vA+XLCpf/9e3cvCJNKw7UcE7lGnv0uxXNmZGhXfsmy5Z+EGhHMvzVBnoPGLZ8WPv82aU6uCQ3vTYwJhnsh24Ge5xdjmUQz9RaD+3g5XJeu7svI5GK0keDDoA/H5dlvxCm1Znkl2NgMNhBNLoTI28wqI5mYq0+403ns/BcU5QJyPIRAAtoOUEWu5ASwEXOcRUNYKBGINKGwIjDwYY6kUOApEYHqHjw3UFV/FKZfU+J15DIQRQFSN3rXL3OgczGVM666VrhhKd3ydM8qsaHVRGu4lEw1EHY6UYypWO0O48VyuZV9HdOxzdUokArCCskPDQwgPM7lZg4dvDrbFkOBftjxrwmbOvtgyGTjdcPFF4Fwvz9Jy+K7UOvGUmN8wft9D9EQ2eJx4gzBegyVZhnZZ7u8V32XpNSudmPM+nY6LMxeE5GCuvYBAKLU4zwDwit9FVdRduO5jR81jBsD1o+9Ce//we00CjG9jhh9CJrAJfXuI4V6qwVsYjHrHQIjdwkxzOkDMiwgcLqREX5GQrZMiwiwzAC1ALaiXwQ9E7vwExPOvYrNR7r1J7RSGyRGG5B92Mwms9g9cV5STp6vkMVIvcYL0d22ZzWzdGDPj9QxqmQOZx4KZk9BFonCF7nspAWQE6g7igLGcULihLQa1QT3c9eEASgh4FEn0DDL8WhICyiIy6lCLLEzMqVYkIwCRnAhCQYmgkBGsTd+hVD18va0/VK55EpyJHRAuidzu6cjKzcNq76PH3F4EN3uTvtl5+mT8GMPFOD2u2AX8FSEOt+wGqN+F99Hg+JveMJ/2eCO9D3uwsHsuOe+VJdMdtmPTH0EbaafaWkN7K+54RJVvrOgbs6+aY4Vpcwxp+dJgDz/3u0AQS/bKNVLcteOKQjrTQ09+hrcdu+UhzoSs+VZ0Z7oV5c6CPXgwuzZnvMac2x476bnO9WJ+22/vk9M/t06wrPJh8v9okxH5ruLJN3xZsQ6XfOfbTa+Mb9nA773ugC++fB3mI/pKe6Bz+ngpPJI3vNANfDG4G9L8MXEHBFJgkpd8d8Mb3WBT1b3cXsJ99utzgZ4U/zo94e3qPs3lNAb0nOUFOdX8a8zq4DHGPaXy5TwD+X8xJfFf+uDQn0rzZ2xNv5aP4zMrh6xe+Z8tQqSMu7dOzktm9LbNSVhVa3U5QlXtmRDfv9aEuU0SGusgUZC7WwT3RLU1mjxdY6LjJPMALM7oXx5423oUdp+1mo0JGNI3jO/1ORDhBvc65Nfa9lvvZFK284oyK9by2WjnUb4JadEx48v51r/90s7e1Sbkki38PuGaP8i1wJSBZb+YwzFXNt5f1Eunv9UV+53s842eB1kIaCgdKNlHbO+UX6w3sJRUwz2s2ntAv///DvZf1N/MILg3xZXkjU2VypmsPNo3nB3IeypKMgs2bHP24O5/MVwelNego9BaKHleb63boSPGoegULWex2kmg0DKCURb3EGXWdhAbZFFcnjL7rLFUalvbKjHzNoCSepcJeU+B+XjSzMeMCwgLQSe8iP4n397JobXoHuJ6VJRsHY986DkW9RKWbCH7NSxWPSvuDeqha2HMZQxKc/D7kCuai3r4UlkOa/2lbzUwIbjEM6gqA2bchvmY0K2LXzxRDt1Mw2JoRSw9paenQuNYIMeu1aPNcFX/meCe9GdPKxmGbi3AkE0MN0HuF9G2P4txhvJ675XI05Iv920dwqGH8gRZiHeFpG8sWaYHRt1N8ygWK/hfLaN8ll4xRRdV50HKz0RT8YpmUu/0bb2Bq7Z50XH62KetT+CScmXGmM5Yi13XYwRAAKEW80yszHnEGl2awdZ5BC5gWEBZQPQFlQYEdHlhC41agBazXP/WSBqsHdTWTfPtXp3U9i9c310f4ofu0praASza3o1gcx508nR26Zx1zvws9ytFV+ArRKlGj8OjzuIJQq17BgBWVaqMxl1fXVmURQ7rxWz9D65gRmIvitQR67em2svahGg/aAZ3+OolxK9UtgsfgufP0qfAcRb7vx7beP73oXfiCdkUbEHAIBvLIWy0k+/vHlv4+pPVyfgDPcwbwSXFnhoc2//yupTE59TMwdvJrEtLOgM4CKu0dgrjBN4RrNpc/Inwv5vhrw0Axh4bhJcaKjxVzlSD8HHjCen6DV4QfcRy+GTHe4AeBmwH9u8I1As3WTv1SnqCkcOUYXHkhoS8pJA2bUi9jo27zRNSyorkpymvt6/dehG4M7vvBc4X32bjN7qcJNPYJwEc1KNz/jt/ef8ADlt4mZNoVU/ab1tuK/ah3b9Z7eHiyUoGTCniWV8P44hHAp3DxsHmmm75o0Vf/pQqYj6oof9jY4LjicoNuGejuEY/PNzPMfu70Y/zZJd+qJM/zrbFPvCKGP4ze150Cb4K/KdCC0buvH2pbZ1e490ojLSQSBod7DjkaEkYlW8tjyuPsjWcK5YT4pe7bhKM7C02b6T32ZWfniPyxKU4LCAuTd7H0FYu+hBlfTImIipVXD9MupZgPG6MP1Z4Ubz6OqaWePvd5HmtgflXIJRqcJL0K8poS6ikBv3qg/qHcDaSOFLU1BcPwNt4S3ueyYz7jd9HukVG0MY703ckSYwWcK+b2rnlwZ4Qm/C7yEP2wEOr/891HJ/1POENXBYc7PVj1dlFjJBE+Pz60ggk6hqHR3r6M08GxzqEpnOHIROjuWx74baureQGnmq8iOZXQbPkbTp5Pxs6nMLcf3TVAFNplh5diH5aeH0nF+2KaeUEMZKQKZbZ1AP69LaGtb00eFfsWe37j4ANxO1kpcgc7mqydsQmt9WLYY2pR6TuDcebhpHciSwhyk93J7nNXZindI5y3MNyAXtPd80SkBwiqGtHPIG5eqn1Yc+sjM8S1sPvNMYX6v0AyxLYKUBsKW3O1I7gYN9DnRhusywlBxpMi3WjbK8Q73sYdVlYM1M0wj19Q1SrCGmi9rnzEzMPF8W190RmIudVgn93d4IPM0n63tdF+c4vuQGH8+wIwBUp1mdGvyxmZ8ljOKE/PD5YYjXU+6gOPlu8UnwXP7c6IbgV4k8VQKr1MqcRGWjaHxJgM8JAyrxMW8l/nSRdFwQaB/P20b7rkaYxsDsf1yBgQSRyEpTAKFT0IYlEgoIcUCx7skC8VEC9gOgE46VECNaLzglolv0fkIAC8gGj1VUEOirBG85C9TJFTJkKjdhe4CVp6jYMbiW30rC3OY8MgAIFMjOGEdof1Ic5MzxeMsEQraDXDN4GXR7kOhAnMqx6UYD/o0zpdKUW93m0MqTPw6jMbuxb7vrXLeE93UNbmZLs3vieMMP4dj7CvW4tZyrK56F3ItvPkSiFgJ9ulcqj/mlHZzH5dm8fsTfYRMK/yN8C7HZwJaB7oef6jD5FeQprfZ2N/FcL6QcOj7YLt+xeA3vXP3pOEcPf1sE1KEYPyYFA/Fk7nQP8i5pvhcgTmafs1JtehYdwvTZlLcyoP/d5VCVfBVgEHxvOZpD6FrTJdhKQ0xtcVN7Q28Sqev9wrYbvuKBdtRo9zYXMDry2gST7j/wc65+hB3yO48ezhTvqjsJlvo41pXeyFOGp8zwX9Xi7qJR+TvXPxB2XXPcjbobHykQ6Hg9wT2BeFL6Ma5Z8j6a+CKKlTeGrPEL4x+jF8ORzGR8MA97A13Y/g5fRzpOP30l3Kf2TOS5/mIe6K8KqyTPAajP6VIc3dq+CK+ZPp9yD3/WHhZkD/blAuJ9mEM3gSlmY+B1QJVtUTg8/gWkC0ABxPVjPAdt8Zu3aCYhksp/zZlXfcy+0dJgbkT54tu74IPAeL53CZnxkmiqhvCkf6PK5omf6EQAvkLsLzAuAcBA7XoxDwgfVUd6r6E4cT7+8l/PWZRtQ+xQemLjYo/cYZEGP7x6V/FhbvsW0T2Jxcz6HV0I9XDz3D1Jr2uwu9iqjUtiRxY08hrb0PwqEr5oRJURhHhlbLpaUjwO7dJaqT9jT6plCXfedMTv49C6z2e2ucjtExTXTWR4HB2u02dqFO0o2FGaBiCPd8cCoYp10h6VeBSKIvXrSoNWtdsfKqXoptbshHoP090jpMsrpAXZ8x5N/JtzXmm2Xt1H+18fyZcKS6TMdPhtI3fba3YfRzOefPSr0IjF6BmRUrkWc4Lw9pqX/dUON5nc4KOMxvI9YJv3djgtU1b8jbu5OTyW/lBIDxKXg7/fFwljJW4G+QeVzXBwCEPweeQjv9OWvPpbTWX7mdwYCiY0Qg1DKjF+r7Lnouu4I6pFEjZsd3Q1njbc7kfNnYW9OJxkNRxhcEB0IL7StyMDVcFRkqAGpVpZ16ZbsBSaCgACVgRep/m6LJ97JSWsPJ8kkGGdagkPKL1I0Xs7eJqOKk9/ouDFBlUGGc1OivwdcBlnDlRcfKpgCDQfwYlJRSvhgQGVQrqGrI9hpCQhutUQGWAipiwGMmrHUBo6BC7mSWAbF7pnVcdcxqbSMl41bEsEcLCrF4i4auq7oeVTXks9MVg2DRTRZ5tBYNLU8o1QJeqycrGGcuqPwWKGdf/yvkXmhmCWxfUcC0aB0rCOdONNShUsIzb3cep5aJlb4kRBkwyhLKhUJ46BH29hvz5/3M4U4pPc+xx/tj/XG9pPaNbTxl/IliGuO07coXj8BgskEXVaLxZJHVYmzjhGno+MahmjGclccYFjI7LKKA3DPeFMNWAbXxMz7QdUe82Zvax+YQtfKwkhyeZbm+YCHy+W7XFkiY9hPerO+wliKG47qAsQCnBURvQDg54+Nana3wag05g/EFXGRuF72PnRZzMV9B5SxXJ/AK1BWV9doGVD1AI0gxTtYZrb0aOULOQ1UfVyabm2G0fN2SOcVk+SO9s0+yZRH+JoFCpC1KZFquyJbsegoxZtMiIfAJi/Anht4TL3yPK0vTq0SlF+dxBkj0KAxbe8M6pfPcnA6g/JH8QIryRA8tD8jBA+fsrX3IP3l83ckyQ4YNiOVMeMiOWIV3AL60GdrnuyAv5NclHDr3dfZY/sKkBzoacPob6nwPaa+f7wqynNOq5rwP/GtmUKf03Sr9DD38jnYVVj64tzc0uewIJl9YP8e++qQIfHgjGyxiNDW+zglAIjlUO40vB+WKpqFQjxyH0by+ngPgsy3KwpPDFSyRRBkWLSKMBhHAo/5ydoCZM40OfbNJ+EiD2iBeoRbXAQp5KKwtkdfsVXcBCwBygHG2NuQM1y3brwseZvgZRYTvYzHcE01cG58ItYbrWLrCjjRikibuQwZ4BqJHULniAMMUchQmK3i3zNhvfX7KacL63oy1pGgnOSnJk2ybsI8EfIpjNHDwye8ZyuF9yXk3gAJeYe5R7ek+soG4R5uXb32W1++Unvufff6nQt93vcxJfTJ7bofDu4O3z6m/qwC9rvMoPe/gkfN7lVs0MqOFWbojytOjk1H6NK5hQhEb+NU6R3MGs655Do84KCa+yrr0hLx7I/gzwS9sQH/FRfOb1H0N6SlT8g3HKpu/zBiidyWrHs+UeRqyjFA9DBuggrwVMMXLhNaJp9lPBRcW/780ZCH2G8LmJnQmWO/j9+9fPuHtu3c4l48A/SlZiuZzeUkFxo+yHcUJsmH7+B7AF6BonLIz+rvLDP6mOPzRcHKszDP9Y9h8moe6C2stYGUK7BobP2ldbn8QKPey7cJOnx4iBW2/sQhVrrTW5pU9jmXoo+7IK6WxD6VxyFtCvrDZZkOkw1/ndlBotPs7I3rhgaMw53e9sD6BDWP65jZvsn+apYl3sXc8OW7CvJtTtAWYYhI6EY9AAAAgAElEQVTo7zZgMBcXorsTsSzeQCvC3ZBuVIp9Zd/jmE26YZdG81yPGq9ZxhLG/hkH1i6zljnUdoDk6XVR+nrlJM77561u2Gufd/dEEWMbt0guBws+LA+44bVjJHDFxKy/Iq5E+Lf7TwkdAu4aH/gfJ3E5+qwKyvcoeP9GeP0/vt6P3W7zPsQX/vjmLd4Q4QuvXlEvYaG1w0PAIpCvNOaPLuM28Zkx6mq2TsOX9K7VSdrObk8+5O/n9IDRcAJJQ3AjHzBr2QlIugqjFm4BVzRBWRhMpFHGCSBGrZrIYpqrwp2hemMiiCXa7mq2dFZXk4NBxdVLFnLbR5dIjT1dx7TlNwy7RUG3LmE2pXfqNup5rBz+EnyKNaCegXVBKWoMBoOqGUylLaTliAhvB2hr8KS10M4tdLvsEaogSgUgVdJrmGmy0PJcwExqPG/PGlXG8WQfKzNMkl4XIt3e5K/mvCvyD3MI1Wx9EWmU7b73ArUVwkJXLzLaWOuCNlHP0KMGaCVLapR4V0IMJK50E4aou3MdQnMuHuTPQOLaqjDg3L2PKUMYl9CXw5exr/sHk6In8/5SPjcemfwlY2bTRTz57ZBi40qNQzTjebsn3XojKL20P2Nu6/cS0bb+9z9uh0WCUd4OettvO7ITh8W+kzUoGtfHjmoyzJQpGs9IayXBL6Q/M7AY7yMojUu/MggL3oDqSVaiUsAoIJKw7ViKfILAVTzFyfIyA+UMlEfpNULgV0btKuPxCq6reHWv9swYZGwR+TLbtcf7N6xw3gXG9Gx96yk+HmzoB0An8MJgXnUIzl42oaLQGcxncD1rXzOIC2hZINcLSf12nQMb8pVRV3a+242nz8GloW2EXeWP/PqmGgyNFHibesXvwdRzvcEYtWq3sL7c2TQ3HjSBbirNys4eu7mcIAMY/2ZA+svm3KwBSXYgoe4uqfZm20ZsNYC33s57ju5ZjO82NT+QGqktm8mDmt+WjN+tI2nouFn3dnSdEwyOL0lm8kOMsRDu0wAyIYrIN4R2ZM15WCjdJC3nWY6CcEMznttB9GhIZ58MyhiI4et83lPd9/0uYtUsSmBqC2qQvWYQZaQ0gQ8bjPJkS/w54RhlmL50W1PiozRmmwR7AK8XAdqubguLuE5dLj3Q+IQ2jfA35+clXGbrr8WhGTt5btBK6ADYbNylNu/JAhdhgw8ehiAYd7hQGoiM10w2MfYWyuCcUim/FDlcOmu7j6shUCTaJ8e6VH4dZKk0fld7615Kz0HAG3nhkHqDNmKP2ep0mAyumEvbEAcmFRideobpZzLssypvBQ7T7QX41Rbug/F8r66dNeXJTZ8t6FE+tI8JjnGZfCo8Fe9LdJnQzfvzi9FcvgH4VdA/AC7XwC9sQP/VYbbjmgixcS3mwEC2GLQpK4fqjgq6N7jBC0Kk3/vf8fH9BzzQEtU++hEUbR+DcLo1HwbBgoCPnJ5twKcofHJ/7/rH2a474hrzZtjLu5NtD37oKSvtFU8w6p7Ok4e+i0KmKU3cw4jTxl8Fq5rDN25sLq7q456QDskPe2kujZfvb7RNwXjRUOmFd/HjrH6JpG9YGai8yibL/wy/uInWwqMH+qBY2sOZQ5kIgvZzJdYrIFfTaTtfcJLsTf0jefeE6c0yaO/lFQjspL/Amp71fnhH4Rn19Ox70bYpNeP5s4AI442aprqcmonHZ0fum/dyn5psSzGoKEQbwG412y8tZPiYpPWHyYNbwyq67FGWjEaRdiZI+5cbn/CoJHFT7YYvDq/UjOc8hcY/Fp43m/LRu9g17t0+fr+/c+9YM8bpw+D1jJUeUHACcQF4RSXzMmOxXZgxhwiV2G1S0oZ2DzKR9UMFk4Vxrl0fijELKBZ9xNsWkOMYJDYH2w6NUSt0e+/+oSFWDXXiGEAobPdb18CmlLZ8zalAFS90u6qlkCn/eHNT7rhQARWGHxpww7WN+ThyI6vNxNG/3WbNl4Wyq8Q2PdARSf9J5cygo0tGMzjpK1vyO3ksE7PNiijLli5d9FePVW8vbflQQvscletVSTKU2InVnOSfhPq1HdiWGfi6xMAjr6hVrwcggGBXhyivIWAphJUIRT3Qy2kBTifwchIcKzc269fmaGj4KOdamHb14EZdwbWKAb1W8WT3A12TdfuFRKyh+FQuV0YlDR+vB/wL7lAWQilyUOZMBXyGzO1zlaggJ+XipcKiU3QyJ8Oc1Tv21tLpp/ESa3SUa7UAOzAq/R/7zRako51xNN3RtT5P9r18+s7Eni95IDCn//3SvE2DHny37C2CSALbu5yMgJOO7XkXqwvvBsEwfd/Om6XmEJtge3jfay5CE2A+K83ZOzDw2RirRMzoJ49+10N/FD01uftA/8IFAbQ1VMrk961tZPst10uEOULh80X4Qi7kCXfQT3SLP5si/qeAV+zSdiDxNm7fHeJB9V19lwtNuGrBOI7IRn1bEN8/D5/XatEN/oIw22zd4JeAmwH9l4N+d9PfE5hSbu0JfX/RFqsm2odFdV+ndIMbfGMIYdwLAWtQoBVVSBmd/hkVce+A39T7/HcOod04KDg0/R+JyD9pmX8vcr3Xf8aXFO5L13ljIeA/Yg4u1G5NqGdOMo3aeCgSzqsCT/jMmMQUV93Gi5EEfysn5rMvoR87C0ZMmHhZVETk0+eeJGkyOk2LKfciL24VDJjTNNkIrqTlPk8+GGVRF6zA2B/M6FwQVCG+AihqkGFmDbGLppF0zWQ0rhg+uNw/Q+M3GrrRZyPMlGTPgG+xm3qJOvJ+NnYXwZysQvpLG07qX7k7YJIanuBsP1XWZ61k1q+akQPo+QIDKOIN1UIKo82JWF486FFSOWED/o+zep5P+Y8pOPVnJfzH18exP7srFOTZV+gd053nWG54bnz/7LeNt7tZj76mvfdRdgw4T9o5EANBDEVpjjOlO46dlhjlZFEkbM1d2xUXZoQPvJ4t/LgXJt5NhEWeF/XWJkatBPFojoRniumGZwtLHcOjqsGrsja/J1T7VbRMphgQfwRK37KxqTAAPqOexQuemAAuGvXf+LH48snyzV4adTSmb2OYeJiRubZ5YTQQkCY1RrXzS0a/1t6JTKJlyS0M8e5wlrHRBD7NwqE20jrbNAlrrfMBRYirr6tVk5pR3k38DIDlPmX5XuKog2jRMO4WQULD26Md9JizN9b/jRZaeP6xMy4/Gt5l9qTrao5RdF3hl4C6Dy+R4/QK/KuUKI6JURbQxHZEYusoUaxVuYrKLJJaop5FcT0iZmJGbYQZMcbg9UlmCOXA3zn15kQ+2fLc31ojJsWBK7AWVFZjcSEsJFGw3ehNDCpAKaQ0KdcnLEsBlgUokp+JndaNR8kNBQQzHLuRnFdQrbBr2riuEiaXV2C1awTanfYD/kNfhN+Z3c9kD38ex7WHynKVhBwgsPD0BVhOKCSGxAULKpdmvAaLUz0sFDvrAQLA/XIrIKHaw9wHnF+0tVyN4QS9M34YvPCVw9+kMXuwtbfKNLRrTKLp1/bokgAQZpEGVcOXUDXaPBuGMIOxc7TuS0t8VwCledF6N/Z4JKZZPwRMTgDO4fhieQDwALoj+KnG3+/k88ubdrjn/QP4A4A3SgMM4L/SwrsDo8TWBCezQe/bA1M9nxnA2zGZXbslP9ozFzK4kbDTd1iTIl9McppjcM9t7MJ50hgrgruolbmPLkyCuLYPjCGk2Srm0hy7hE5eQ48NcSvODLyzup4FV/bjUXihYsZiDxZ8sFmd7B51CtfCK3WjlB0K/14G/lzvdG2+Erchue09bL5fInRqnx+V73yKc5t3+isLDUfg0jjQq9D99z/T8aIM5wabENbZTfLcEF5+BviBcf1ZD07dDOi/Guj6xhZy8AgTGOTduFBRz987T5VURshygxt8E/gMsTbovvjx/IhlWXBePgD1s4acQ9CiatqP1N9nzgD4C7qj8PwFoPc47CUwBavwpSfFE8t8DVSeBGGjblrbztPD+k0VpDGcnHqkbWp7snBkbbbdsf42BbUZjZs3SvycVRGVFFvNS4JYfP7UDWQlDOHpp9+3dpuB0Xd9IlDthc0ZZgxh4KeaswMExZs/xvEfoFuALtf1FNjYbL7Y9H2p/Jf2q08qdOf9ptJrw6Bwqci9NJsn+nby5meTDdK/P7QQIO/vROP6j/N9yBQaOTMcXISsGEc31Y4XdDDd4P0ZFB0bindTlpc76rI2Z4QWspPXLQtAmvNZqcMASu15RqYfgjIa1wj3Xc9m1EysxliEpfMEFVRV8euOru2eX68jCgBUJE1ZlNeZ2jAphwaFDQ+9XRDzmzH3CcCMulY5QHBmUCHxuKbAl239Cni2G1TTmknpz9Y0trRSFnE7W+jLrxnVa2Y7aX6ytBgMcFkDXiFGNMm4xDDuw5oVDu2UAugF72o81PCvwUgrF02ZPFDFqKBJuJB4qxPAepiDABBVEBVRGqYrIsTYKqPohtfQmx0RP0cJ3MHz8m+x5U12fQAbH2ubj1O+Su0Mnotudqw6GWgRh1oG3ikv8HoGxOu3O5zEXf7Ru1nfUzbZjzLbn7GR+XvqsJ7v7CxWuZPjAUOqct+2kuhaxHi8wMLUC1EWKsCpoBKBloKykBvLiABeCZUA9v6VfiONxACw2MtXpVk1mJOGcHcj9Nr4Bfk/G+240D8gavKh/Y55cpcl44SElW+vViKUuoAW4WSFIfivykfMYL4YjQDtgKotQQS/6sF/h3TaCGLjzk03QoYIk/IGyKEeXDoKkvopf39RuGgul1QbspM/fQ+Q3ovez19045ZLiXOQwqdBRx4bU4YxdtVmd3H63ISncjvNlw/DD6nIr2AZRJn3CcF0OCF/28ZDmUSOwvWF5JA9Map6oPsO2K+lYT1oE/JFY/pwN0nizx8B+qw4kIRjjkflbnCDl4Kf04ByhL88lQd9R8jh4jebkBaFP3e59vWwI175+713P1m33+BHgBmx97tchxt9/fJwM6D/kmBSc1KocU4z0QP5xrlXHo5ZaUPTcoMbfD/4r8dH/OvpPb6Ssj5X2FbVFCda/a0AeGhT5mN4zzG//v6IEPosSICrahUs/yernFMBg0ZqbET0Qh/u4I7lMqZ32e0Vf63nuW3CBzRmlRjOGBkL5TyWhQde0+fRBnH276ujAG6KdA55XVMU8abWJsPVw9sGBUQNeTIDvCTcW9u23tHsIbbL9TYNjQ7fQ993MmEawEyGXdq5+tuhxL6cacqSIsiUmYZ77kcK48tIawmBKCI56ZzDp6ivlIYvdMN24hmOV2S/Fij9de8SLxvqm+xgZ57mR8KFzn5u7VP2IKM0eG3l9xuV7Shyd59OE/QF/e+3H/3Z/3n4s0/azY24gGQ6zAM2S7OLxuxBerX3XnBrZ1d0AezuvYz9Qi3fgF64F7uyulOHIoxlpCnsivvYZwOdSn0d6yMNIU16BIqrOJRXMbDWzkiqFRn6RT3eF/idxVgB8Aq781ZYaEPM2iYj1Ezk8rx66yXHvM9NEb99NEHuBXajdSWgqFGnLSip66mF04fdnWzj2Ppq6EfLTUBhQlGv7Rps1USQ+ieYWl/IT5NDtC4wTBkPAmghv2qdSj8sME9u5fELSA3otq8AancQAE6HjKJe+HZYQxu8kn+t1j8VEG/0BTLwAQkWGSoEdo8I9p2Vo6pYfv+ZCJxtumytPbb2pcc8pEjvN9bCzUUrMsPtdbB7QxueqRYVwp81YYL1dx3q3qjLPaGsaJlLnGsOROPU5+PTz48umwytGOt9OmuaKNcm+cfnf0+sqTOM5ik85BblSueRVcBccSbCyeZGYZSFPSoDLZavAlj1IIdESpCoK1W9tlfQufYh2leNeFLPbU5xAfG5EXW43qIZlg2/HfoMXTs4+ge5fb5sZn7OiJ7d61kpaCmoC/kBAAlXb3gxaLFgYHYhRMNfrrrQ52ZEZ4zIVjOgV8ihHy27i2qQWxGiW2w2EpffWZKnGpEWae90aU7XVNM51REWXgJ1RnSj/WhM77yWpcR+SxHX6g6RkCPOKaQhsWdjV6f2AvhTvMrHgwHqdv4FU+i8iQHggYF4cHCocI5GR2deuH58YeB9uN1dvbot2g5TUL2yHN7KVXaouMe5RlUorGMrvCKwEkR67VvK7RoyJo+aw1bOqtz1z9b5dh0Eu3zX9tl2zUqGjo5n3bi1NPGB8O2W19lqHrdJudNy+nV4fO0ryfZZuH6Adtfp43B5Hf6WxfQ8iTeeA/t7wJaElbG07OzPhrHtEBlKQ4tmNKsM+0vXNdALPlsIpff28yUQ2MIFO8S5lykX0Wjd/7HBKgTXvWQZKeLwR2LqF1G6sl+20vPwxde0PYyOVD/Q+FRn+UownQM7csbNxtLgOVPO6N8FGt98hASTteOleM03hJ/z0NKPBTcD+i8HDKRNpis9acaglTMcZRDOUG6T8wY/CERJ6ut/YfnwAXeltNu27L16Nvka+TEulqpJ+JObEZzeTyrYwQEQr3YvNyqqjiB/BCh9Top5oc1VV+W0LE6J0HiM50mCSpc18KMYZtddHbIiNgo5yTM61pk/EXAKxbHyPTbFZ+d9ngvPbY5CVh4/7ut9CegUJ1s4xbR76XE92c0Ral9n/Z7H2Pol4mcHRTa7yuiqoB8bK2Iytj8SXMLrKXhv7hrju41ET63vCCkfLXuLNXZGz0nxF977O0DYwxmBH0mG+68Pm2j9t3fv/fs/7u8Du9nT/Ow1+miHDB1xMN+kpCNLjgKrAbkzolPtI6RLbG4UEmX2yueEIYHPjc/QQsDC4a71RjzLIvcLMK+ueObVC5JhpWCMD16m/pPVi0rXctL/Gu8ufQd088GU1GpMKFXPZbV8lHgmdbnj8wIyQ/6uZnDydDpGKrczqzKbmvFrCJlP7V/nfxzQrqle60/jpdJnJfytTECVfpVQ7qJUjxFjTUTqcda/WtuybF29EEohlEW+960Q83dVb9YCQiG5F5r1sCNXvf3aZLfYDgbYzN5uLFNjWgXqmcUYb91RSQ9Pxj808US70L3x8/DEJgPqpdqnGtjkViETfnqUxR4Bt5FewuMK6IKDREVfWMttXGcEHsd+hpopy9u/lk8oFQBKF+9hhUe6iDPT97jSo18CiXZrA6Q9pkf2/PauJhEu9yENkwHDKOqUBljpl3HmFQUVFYwTyVUTVBgVFYVWxZOxMqOuZzARuJB4ZdcVWM/A4yPA7Z5zrPouHvphBmHRvj53KEWs90L2Mqd4Ah56IKWbPGhngCPPEr9u5gpUBtOK8wqUxwV2hKVWBq/KT8DiHKv/LWR0zbpdUGrwQzXcj3XXUDXO+2XpYYDsupUqIfL9DnS87Lx8fSAxFGeE2UL/Qzrwfchhffqli0si2dCvf9NVLh4smkAehm8Kn+8asp8fr+LHW5D7YcYBBM7gqfqVnJHGfxvL1ChApQIPqzxbZO/jkWiU/gnwg4SGCVfSwyIAVZEh7Ow5BxmhZ+U2YXXsrxwwStfsTGHPeH6wvj2x/6ll52gKAjQmCvLCZqE/KKOYtzEnenYtk+/BkB6FyL8SvEi/vVyfbI+1ykhE/Zm/LvPeJVTANyPwrWpmJPYqlb72qmXM/gdlGD80PGeuxP6erXNBlonD8yMP04+M218Abgb0XxIqxNMiKiImW+Wp0GsCOQUpO+dL6Sdfb3CD7wKq9ClY9O409DvewiGkGYA/VUv9Lxjdw0y2PVFfTueFHoAA/EYb88AKiwLz7NkOkOWJeWd1xPTPhMMe6xN88mV4m6fJeZBtdgUDwpx3RW92Cr8nyewL+wPuFJARtf63awYbLoQ+rOUezMaEJt+3NDOmOOze80afBYVn1oYNdVOjL040NOX3Vm4o3yqZdgWHtIGGY7SFmMbCSSsuL34Ad9coOs2AY9Kq0cVO2t0qtwggQdl6EeYY76UzmEw81u8zNhXTDYombNDWNprz52TawWCgNDpw0+t+udr2aVjTrVCnW0R2hD1PZaStCbf3O+LYOv1S9Z6cEs8jtPlMQNWLhvfmUzfUPq+FxxSidv+xIxb4ESPxZkYL6a51x8hFT/B0aXVMCJTtfusWGpXEDVXJqgCknmM1hC6lWA6lsnPP0JhsEyRBPE8w5ySSbvEqGauFLO4qMa+3tLv3dakvueg62IIXw9kuhU/x8CT1fEeL1KMKenMuH9ocDfipOURiFM+3jniodLVTFW2VO5oT1Hhn/p9Gf9yvV1a1Gc6xyOeqxnkGCARaAa4FXEkN3+2QRY/X+MOdaGPfxnVsKsvMFu/2bBrEYQoba87mUhTWtOEQ4EH5xIsyPjESuFXfRBHuRDshk8Cz/Vf/RtJayHyGHarwkpTXMzOKUEjLx3agLqDcBsuxIGZ3ejaeTJWBRebGQnJIZGU5rLFIo3EmUmNqIITYAfal42UN9WDhQiDGsLSJEV0+SfiqGXIZqLVi5RW1AkslAFWMyudVPM7rWQ3owXgeDb8EEBWt8oQwi2AGdc5tCONuhTTOEdpm73ZJigb2LnNb76Jn1rvZCbWsOONRcGT1qLf+YuULFeDCMnYxfABX9UIHqOrBrUqy5sQDM7wCfBbjuDdEjfnWt9aHdpiWoyfljmyAmGYyuWdiQEh+uVx9xLP3rVCKaQIrKAjHIMx4a/OVZH72IsnIG2F0kPgBM095hL9Pr4YmvNeaPod+08N6rY7N4vfB185Q9qysPXYd+jEnElbTa9ZoeatrH8B/nJUXyArXZIa4iDbuKO+KyLgFqIvRYY+UHDKU8SiFuv7nuqKuBJxDDma/nqAdlpyvfczhoNvOGnBZ7pmDl31RzpsPeuPHOVl8sEcwlxbf1CscnnEmhqcSZq7nGWVdKibPv+iNHL746rBJ76n8yaT0eAjMfZKBcfWFt96c9UFI62t7es0IjOZp/ZjjbjxnZK8GHvtkD4HNll5+gEGAH2TYcABywOsScYQyN98lVKZr2sHvV1bdFeAng78jUOArkc9kvnMDhRfoj02Hm4kcbPzme9OJwUE8bp7nLwc3A/ovCQy5G7DoBsrm3sHdw6YbU2Qm3Y4rbFaujRF9gxs8Ez5DjNoK//b5E/7+/h2+lt8A/CE0azrThfR+PYUPtnnf0GZEoX0aajwImd3eLQqbEwF5yL+XBpgb/GLenwmyFJ2fz7YIeSM14TOqcPM0zpNy9QSgNEGD7f7WhMdgHJ7h/Ey4OgRYpJMtLc9EibBLYrSddkZ21s9NQ5Pw28J79mkQTz+nz6xsiRsPAH1syy2IRr9X2pjsFftSVe6Ws/XymspDn28pY3jj/RXFX58mEe8FdrlJu0C/UQq08I/7GBM0zfdA5//n/tOVNLTHO6wh4XniCZs1bUyP+H7KAjfS5ynuGnkCKp/d8CcYBx5Jckdtxw46OVF+1LO4m5elIdamLo04+A9V+lEaf2aU4J1Niq8Z0piou2uZQCiLbIlY79glFLCFDK8VzKdWX6i7VWqdfj0pz8+PpXE3OcQ7soS85OdhWhdHRCyfhpUPfLqXEuQOZXY7lEUMkJDxrkRnVSxu6eG653Gt1LvVrb/ycsRwW5XUoX+VgTOL9525gkPaIylKaqsUTPYOVcL4l4p6tvZDDlCsrIY1amVpIzwSDasxd1cBmGSD3Y6ZrMND3z1VfhuDnV/G55kQhtPmPQPJiM6atDiWM2bNk3/jrx7nCg7ltJJGOTHOCyLJteUoHtlJQRBpsog1MEaM3ZrryCRgB3jCnCNUEFe53qESKs4SYLwy1lrBZ7GCycEWu8/8EVjPqLWC61meV51MyqslOAeFs3NG83ZNzqK4rXPcd2HKxFKSjTR2vUdUTtaK+vjYhWyvtV3nI30DUK1yEKYAzVNOPyt7hAmqcC/chgMJjzurkR4WCt5wkT8yhsS1GdZnbY8Q5ILNNP54gxdspV/aCPpMN5R0CCmg6GlSNW4stXGxWyw8bDgktDuReLD/foSvGJ6zPpnLVz1CbR3tDyS/GRvwVOh47AF5lfofIiH0HMeKlYM/tn5I+UQAih5XIAbRAjYeZJ7iPjUUJwKABXZyjOxvIZSTRGNhnxvQcgU7QkUpBctSfL2v54K6rljvKyrroQc9XLc1qp0NjXxZHdq9BS+usL8Q1SBU/LL1/kIwrsh41rSzWbBvPL/BN4dDsju+zzhdqvJVUZrOgBv85SER/1Ru903Ot0Lq5eAnRPlHhpsB/ZcDlYYH75W93X4Ay5M3PtFLsEuf076gwuYGN7gGjES//idOH/4X7uiER93MypwgUeCItlaeLRCv8T901/hxIlSdv0A0DAw30GYv9D+U5j8mhbYrrzj8zsJbeD5MHWoaQFc2AN3FdR3K3PLFny8Ke1J55jec3h8oOzWh7eovQegrrzr+Vl7FEAVa935Sh72fpcvNtLE5iGZfx1DpRnpy5av8jLgVjH2eywl4hzKzoUoe09A2jm3Mw3pxeDmQxxaeiX6YIXF4xROISsRLNcU5e9e2WR2vAJf2YU/ap5mWf+O1KU5zH+QobE9pfhyj7uLKWaFpIgRvZ/k82HhTLrpilRKtaPEu12gliZV6uO+Y3tPsKHsPG8QTX93MRjuJ4rrQZ/ktpZ9NqxFVAum6xiFNm2XclxjZVDCwlpOkWs81RAVVT0OqXSn2XYaMfbr6mHEw32wtCZGR0CWFbeov1rFmoN1gzWAqOgcMw4JmtZIyRJm96p3h1e9Cd68o7lsa/6XQn5H0Zph3pr5p0yYPScI3x4aaMSwaKP1tnDPqte39qiHYDedmPFZjZ2WAYphNkr8qCnxiwhr73ceR208TQ2KPMBr9MHvU5O7gU+8I6utYrRVcVqCsYqAwuQ16d7QjW5sMBwvjX6SdVY3phsOKZjy3u2G1ztil41xjT9MZH3z5FRP2MXNTKH227OWHYY5sLq05XzfRNhaBzri1VXAra7wnEs4vohG9w4XMq9KemLG/PYdTavs3M4jGms3kya3eEeGQIRSTrOGxV+qkfQzxRm/0YbIkkkwAACAASURBVJ7W3PrLDDxWfjT4UBpnM37ZerbCPZyJ1aNar5JgRYprBdZ2pzlIIyysDKpn8Cpe6H7Yw+oI4sLAv1i5FsXrNYxHmyE900Y/KluexsNoDPStfVK0yCg/1womQl0f0TrYDj6QH35hVGmDnnTwQzPGs3yeK/I18A49rcN1hZ/acR4p76T77HkMUbbVpvgj8LUMtPnj9SDPa+XPdgjLoaTftpb8iz6zPW00eE+qisCZ9/ja0FLYewL0LnHq72Z/dj81HuPzddBnbTTAHxPwoR00a9fKQDk+gVk95e+0jvVB5ipJX8uhQgZQWvXEI+kQg0rIV0j0EncEqqRnQXRQqbESgLAsBafTgvJ3MaLXM3D+94p6BnBuPMmLwLg6dA99LW4vDhvId9JR+ubrQ8/yQ4Z8KDryV8sY5JLOexAbDZzUMwNPox3S/U7vN9t8sM8cjtL8leX6FB7zTbvp2vpDuUxxvYjpEjNKvy+2aMZrr+7fS+UfHccXrHda3YE5xKk/M2tL63iT0w+Otp2gAcmGtBDw+167efp1+vtAERef71R3uGDOP3ZKyiS3JzcfhdlQdA47lm4Y3GdW/AuDyaGzA1qZp/8M3by1dt7gxeBmQP8VgfUuNRLhPWkUwneEd0EBNgOP+7QnNN7gBt8Jhn07oVCRjehZaXbRBKo3nwtnX7Sc95OX2BCeUuWDcDaZU5+485qf7+iTQss+JwqSGNVwqPrVpusRoXovTUIuhuGi9DsX7d0a+51DP9G87Zw7yX7qcwb6e1WbMOUejrOm7G7CkIb3ym2rt5VTm1J9g4E8tXXQrrbNF0HCMwt5EczoJLYOVh3tVr+F39MN1GwzvbNjikbUrDiZbBiH9l18ubW5P+LJfk2dCHi/xiR8ZYXsJdRdcbUjM2wBp3EmpHGfZmofVvduHUhtsPkxybNblhX0lP6e8XVCVx71tDlM05ize7ip/e34RFZedgknRTRRb0tTQd3HAMzwe7gjv4p8Jxju21P2fzleiTGpzo05HAx4pCzIaKMAoIrmBbvIVd3EcP9MWsRAV6qkqnHKWjt0DSAx0BI1g1+3xCb5I+PfA+EUaOCsadZufRIPerud3fvH2tmVF43ninI48MfWOYCeA6xAIVRmFDOuVYQ70Fsr5Cv148heanhI/owY6vXN7Vr6bJQ1dFcCKqOuFUwrUM7g5Qz24O6r4h/HgxEVTsQFjAKyyFveD+pRvwKCSGmDFecHw0PIy3BPmF6k5SvY+UwMaV3Iu+n2Bbht4/q1Yt9V6dmnb5C5qLHQdKiTuxrIf7Vvw0yaQA3eoGOadoyhvXsI9QxiEXZu3dmSYzq5K+BR89oR3jHaO5ehxJucWHlJ1WfqSV5XNfY+VuFVFknjbHeea8Qk8zrvwpLHOSZ4sIaiZ6BXB/iXJdBhMKY/N1IP91/k7nM94UeAH7KqFWYw87GiIv2j85xZI9UrHxE6UOtmYAdiH6f2Z22xO+Sdv9pET78nM1V7cdKuCxBlj1lX8iRthBgpzRIX6n52Iuu6gYNOVqY0e4yn+1KqRnZNlG9yuihrzeawGa/je0vCGv796xt9xUM3fMtwpEPdaHzO+k4M4E328HlCBbh7B/wpX6m0aDdeuC+MkVOxHOovFVQkfDsVBp0ALEWmBoerLXyxIgAFdCpYTgS602gNIJQTPGq8nA2J/GHW0vT6QrLLkMaMHzdpJ/Ljjdz9i2eypOshVpgQmO59vh29/lggdJ3X4HG8Uv84j/zmA3sAuPv44UB55uVJMdmLHJJlY/sPdMJL9dOeXPZXALJ//ioN+pbwHD4xkcnjc9tjHqX3bwk/GDq/CtwM6L8kmAGoIJzb7xRfHajGtN2sBN8YdPcrfQPMb3CDl4CHx0d8OBV8LR8B+lP1rqodN3cu4uap8JvucP+swMcP6A3p74HTPcDvRKmx5YVuwAD+H1Xi/mcUcKMScU+rsiUkBKWWJdGNsv9egxCQq3tRmGkYc0X5+yXhJ2pzeKLog78j7n2cGgStlWk/drrT63LhygSoXukQQ9nOR+2KDt7tholgN02f+zYKh5aP+/Z3J5NlrMxEUVwpSfhABWau+UKMBYxKFY+1No9er9L6K49R/kLo4k3uNt3cqLMWb6vjXnrzPRvLNO8uwXOVz17ZFl0FfAhNebqltH2Ociy3ZYoW9d/j3O0MsUabIY3f2x0+NY14AO7NLX5amzx9VLLzhXF7igYvD4j+dcXwkPp6mJVrXuXKw6Is5+Fq27PzI1CKmaLE8Ggls49LGJ9hIwo1upM4d+fmeVeoKcxkTMFUQpDWCp4cZDFuT6EPSe/HjfVUsBvOmxGFAV7UoGxoJLyxiJK8UMCX0TzpKxgMKkaPdq8oe2kSED5ii9mQDHXnx02pHNfD1kgOpETNktl3RFDSSFF6aIDhfSIkz2GppdZnrJ77M3ElLSuEOG1J2HfRPjJv84CjvAn9vAJYxUd5pTNAZ6A8AssCWtSoYBchQ6cqAbbPkaLtiEFp/EbxETrRENjaPvcq1sLMmzf2x7CsdfJC7nNYq/zfbfbNuz83nw1pIq8MeNGk4uyhp3zTA4Zc9HSh4avcU48gczQjuv6CUYrsLpsf+ljkdkD6VlaMgpFTtzEJt/h6NdnPTSIV5CYGmcPoAsYzDGfuu2ZYZzfWECdJVkM51IKvSNhBl1UNvWczlIdy1wrwCvPGbgZ0q4C9xULD7Fl95nXzODbEHgbGzefQL2G8M8xop5P/Wt91d6zaWPlhmEY8Hm1Do06wGs+r8jX7z9sUpiQZUccTEgy4YwFi1IhYd08jNuYtCkGC4dmOvNaT5Pg71jp0Z2qHM94D0gLHlZPa0MiinvAj4LFVwx+0/UY2X0YeEHHyHg1tY9K5T2OmNqdihJiu4UMb57LgBq/ix7aG5aTUp/cufRdkpHttw3tSsgzvrBDS9e4Ocrhh0XVTjehemZ7OYjeg63pGkDDvpyIe66SBcQjt3vLafhNpJDDDZpE/+kNCuuPDCpDyiPDfuIjbr3gwICZJc2Ta5UE2H5higngAbwI70yHVuzW/ojRy/TWSja6oldXxsITlIBx0GSbvZmmeAgfm/FWwISdc4i0zj3YXnDgIhfvVbUzI64GGL5cq7t/m11M8eZv+ngoDjY3gLRpkOPSCeC6mWysAOx3lYfY7PDLtauY/Z3PfaCQuvFfCbKLP2uffd9bWp8LeoHfyNPrPF0ZjhCN85FeGp/bJpF8zze3xgR99KF6dLn89uBnQf0XwU+5BUUHcXbHooEIOdaHn+o2LbyRJFQpb4f3k6Uu25AY3OAbxHnQG/vPPf8P/+Pv/wlJO/cF8RvLCmAB/mT+newDv9mW5T9zCwA9KpJTpUwV+m3m9bmxYs7AMNAP6Qk0AqLn+vybEiPpAkm97bQCmAx4V4ZY+KvO6yl4K6QvvLo7ZVoIk/IP7urxsXReU7IR0CsAFH0AgKmJw0OQf9PMLLTgVxmPWcx2lMVfYxZ1f2qDM8sTvm3vjifJtKGSGaO5wC0tR+iTXwqsJ2t8JGRu7q/awJnvkeTSZsFue53vD2iWKhV2B3ow0XsLzzgrdLWbykgC/57n2yaJBuizyg3lFDE9K0ZM/KYgPY508Qcj/mUz82cEK35jOCo9puX1QUGBvZPW3btRnV8q3YVTerSHc3ZZaTaHHmirjLbWSLqbuwe6YqMGf2qXdTfSlVveEScVfJ+Urj1ruObR0ZlQEp7dsS7zVRm0RdPmdESzWfdli2Q4Fc1eHNAz9ooowJmGqdasqww35ZJ6uHQrsRbpnLAd/+ZWARwugXIGifxCaLku83x5gUkM3mWUB3gek7XOPQTWsk80t1kPCjGY078bhwkqRjOfX3UQe91j6z0TMOLJSDbCxrPIsTf6uibv0e7yXAVOSezKGz2lm7RWKIdstLXW/BiQSklZsu655FjI/1yHe58zstuppG7bAFcwTnjfp5wGM32SkAJkXlcUYXixtVad0AriCzXh+XtXgRuKlvTKacUzx9MnWcLfoHU8T/+P4nPpnZlCfJT9UodG+dYjMeOclyhDI00QDIKP6WtdxQDhDDt1OwXjeDocY7+aula0Nl2bZ3oS4kMYImVKaIfmWXGDfTSDYSRfXZW6/nfVGBp4qiGIeU3r/EUDYGnswwpCus6eSHjKbyQQEyH3nTQboYFMOG+d+llka5L31VjraTkMM3Bu+DBQCs1q4fwtr9p8EUBEDetHvRRUNFtqEGKTaCDY6KKybsAosRa5OWUjnMTRgiskvaLewQCPOlKLNlEM19T/OWOtZp0P0CA6LguYmLcyiOUQu2oaVgXCoAPcMOZhwp4cwO2EI+/Mn9fLTGNQNXgueYxye6UwO5316ta8LPyhiz0ErLnFd9JUn4rHFUo/m72BS2PSQ32sDu3x7gxvc4NeFmwH9lwVbGC+qXhzMy7Lbficv9M4jjJoSKhV0gxt8HwhCXUHBiRastuk0/THpxtW8z0mfMYC/6Yl1U8AYaa+60T3dA/QOeND0HyHG+06zhqR1pvH9DOGLQH1xWWEyFHVN2U+UhvUaOEx0a8fqxIF6U7qgwO3scx5JIygojKFRKsqL5vZi07MspMtKpaPQ1b/Bj4fHG+lmYcEJ8wjkQX/VXEmkrYUICxa8Z1IvdDGel6Y6UUUa4T0zPk+1HtbHtnAY/W/Q+aC4S21wxVleUyxvoIVMPof3gTuKuc1hPVj4JR3d1XvVC3Rmhqol/GZMdIcTJebh+il8D18PiRdhzGdejTOl70UDNoex79NynqdH2tspFDKKTxVmcscQ+r6cZ/kDsi797XAdR97P+GzuN02n/EHYZxsfUk151+0+H6k90/rYwgpvKOWITqpoDhp3VuV+HjR/LskKAPAq54DoLnArDfe9VlVeA2zxwxcGqoVf13qDh72ZYqq7z/ZrgRjP1fjM1T0kG6ZlxPwA6fTscJaBRnbvuh1Gd1doSkce2QFJBCGdejN+bHzC+oZclxTP4w6f3MqInscOLL3V9KzBk/cMUA1y11KBsmoo3Apa1F5ESiYlmAZqJEM1BmhYfr+QpEADEtTgHRnXrGtgh+FdU5aR4Fa53c9Ldba9mv/ujGg8fk/iXndlQs7vwnOiTy3DySp8cSO6ZYccUGmc6PhC2ViTdlgMaRxzFivV6m08I/zcthN4ReOcMSNujEQ05Osy5b7ySdsObqxVCVuNgMzgcxXjut6D7mJsFZ7KXDGEZN6ku8z3DYE6JhlgwjdUnSRvzEg36Y+Bp0y+s81P6W9rJ/naLv3th6JykZ1OguFyv49hvgqlGXdbzlCH/275/asTeqZZS7NBy1EJ3yZCasgMaPyZH8Xp+O6dfJ6/yjsi4IG7vJ33tBPVvDpug9GtcKMoSMgRGVgXinh9SAwVH0QE4dfGarb66sIaOtjZ+bF9TeuPl/eutO9f4gv7i/QgBxq5qB6MZH3pprgbzEkjpjQvdGm0lkm1RfIh+OF3KpCw64sclCwLyYGaNwBWkutJ7rkdlnd6ZDHoF+MpFZVXVF51ebMFE6GN4TuhOc5Efh374B01hwMG8O4R/JkBfgDorucl0wEKIQ0wGc6B/9i4X70wbyFw8f3znYqvXPjDRyvipdqb4VK543orP9OiuZWti/JxIU+uLnr9T9fM7WI28b6Y/mhypevNe15eHzqMI31sNmUqFemHzXO031n+5fiFZi+Od/eLdduV4/YkBPjK9N8Ismxvn6/GK34BMNLOfThbh279/MvDzYD+KwMzjt2RMsmXlGsSRtE2LGJE70OLbUnIN7jBN4JE6l8fHySM++k34OFPeWiy+kLAeWOBnNEwv0d3/D6WtVXGrqCrL7u70LcUMRt1mdznbjYU7nZ/iqQ74RV7bbQsV18dHQvcVuRs4jRTHDpzsqKiZ9hOv9qXaSi6p8DGxuPJZR0oY7ZhjYouVTgSExZVmpjfwQcuKCgoVFDYTA6ilRLy0ntyAbxHwdejaMU9sdHmTCnieF5QmMX5lId19rt795MKwtespU9Y5q/HgZsy9EXreAbiPuep50WbNBroLCh2u3f7FR5MF5HYS2/vw4TNLIQIdW0lrmvt0XVFLvDmzR3MQOpGRvMcDMrOZjAb+b1kbwpWVgNP521meuGOHq4dx0uMhIJuQ9LKUBO4yv2pXEI7YnhUUw6ZldINKvLeg20zhWVDtdoEiPK/Qu5QtzCw1u8F+d7hGQlldncePMNTV3RhSFNnA2L87/oDTh+ulAdaJIKukqaAcY8/q7PkEMWzINjtqXh0t/WSTRnqhvlQCsmouWHMltoargKpBaUuorO0q3ZKBZ0WEEgj4xLMIFOZUHXcw4hLjVTEeO60SRIingCiFVAjbgzZvkW2mTq3qTW+uRTG/eCafgja6OyXmFLsJp6kS4dJug6LySkkVyO6TEtuNIoQeQAyExlzlJpxx6ew1y/LesoVfldLxzbWiISZo/xHhLbB3D9ncswFUdPSUGVwreC1gksFql2VoThWvQt9ZegFxvD7vqsaz4sL+S3aVISBGfU49wflLzQ6Tg87NcWAn5zlM4Y1KxcQ6qVCHnk+uS/3qgo22uaYW1m6Xsvg1TbjOWnoarlQw8o1eokblUB1pDTi4fQDDqFrthyid6eTnbt6BtiaN6s7frqjw4CQ9tIM/7R80yQdBzLCB/tOuh3uI3BsOgwOMs1bdPwxHH52vCbss7+Ghrvf4Ie+6THYyha8tz6jlseweKcdUgo80s/dm1boH+E6gkJ6h7l4nhNRd+0N+3Va1LzISUSJsgBYCMtJ7i9fFpH3iFgM8pXlgKyKJ6CiV5KQPzeaZzAqV6F+BoYOCLJDiN+g/d2v+v6yQA4JrGmtHPivGsvp1P/+ZeCl1vUXhm+B1rO91/cWzleGQ6hvSSnfEI500y6Kun7u7rdfUj59JvwgaNzgLwItDNooj8TP/P1Hhp8Fz58UXsiA/pxReurC+CNQxvfE/YUECtcdtFPeTAsytzChXq7GNAk/XLBMIu3LdqmGTbChO+NIW+1oG4spwlOh/wA85bDAFK9fFZ7a9pfot61xu1xu83brs/3HH/8f/uff/zdOtODR7m62O04JTi8UM//BwIfYns/6+V7ynCvAn4Hlgyq8TPkS8P+zilHcN+NRu5ZWa2a5Z+hjnBNJQTntmtIUPH5lNA/F73tZrWneTlTGW0KFZTtD7nAzRUqLtTnCJh6zF7mvwm8ac5DxMCAoa2M7slYofYne2ROURuVTSpDDJm419mr2NFFqRM2S3ytpv41+msJmIfEuL1R8s/oeQvkL1ICOeLtw35QFpOpIEqWI0dRMI+dxIiOOWtKsS2LMyFy5lweIcsgMWeYJij7DlFZn0vEM6MLG8iDEqe5g901j9nLn2QG9RF5K7TM7DBpdD8r/C23eo2sTKAgb1w6mOUieCd0673Q75pVUGWdryw7uWYyYFs+IXtbj+KiC0TwZZ+UMzzb6WdN8uBNt+ufz2h4OxmwO/85go92B5o+Elc4l+v4yap51Ks+c7xgcvGiNEBk08N++IqIFEt7VjC+tcPZODgMY+Yfy/rJIGq5rCxPLFtbbFmZFvorc2ntwiVxrpNeqjXWiyQu8aB67d9g8zqNXapznHNpjbafWB/7QDMmkdSAg04OUPlnH1BhsRm0K9VjI8uG6Qkvi6wd7Of5de6iA2t2ttqy48C9pOY4PQQxliguFCgsA5orKaijkCloJVAlUH+X+Z5v1KwOrGBuxrFo2o/od0NL7cid01d8AVRKDhvdDw5XdwNZw8jshw2A5Bfuz2IE9bVPMuzPtjF7ig84LnVO6bhpNYzMMafzhsHDMEdueqTz96nOx/ejT2VRgpS0WgxGxhXMWqC6ThR4Zyu46pB0gIUw8w1pdYKVoltGWiOrpkIhN61RGdtSa9spwD1psQKKRnrmI0U+N6PXxEVRWDd1u049BamA3hI0OORXdVWn9gvidWwLFgSorShwiBqT25Taz8hQ9CNE4A+AqJj43/rZBHsKWScPYN14m/6p3rvGzbnQSgoHGpB19sGrLE1qv78bWeXVWT+DdvZd7fx1BQmcKYdg3msNjZuVxGSguwOGgFQHA/aPzehvbEfcJvUcxJ3q4DQ2qrT2xfb2YFJlmSIRwm2Ac70YrLWrAhJXF7/wgH3mK6b/MpRsjv05kUlQD6r9XgDU8PhWS70QgkoOJpHt6JgAn041B+q1AItvpXed+V3nRA2d2rQyRHOAvBFqAZZG6RCRhrPyIigK+J/Bbu3JEMa+6prLs2PgMrMQolSVKxRnAWuRalNXmmvBGJze2YebWX5zWF1/PdE5UBvDYeF8m/Ggsj9/DYe2e/uyJMfe+2vlCN4HpBkkXVq2/Szdj3dM1NKMYJ28o33473R+8f/1o+54KWxvH9LwbD9cPbOAV9/b2SbGTKBQYvud9Wq5DedfVEMfkWY4PvJ0/rqlXFnkMaLMSb123kKS8TP3j0CX9NoyC2kTXykiuTr9hHD6SOPhMsdLZPDv88JSheM7wzQrK69D/Ze9tm+PIcTXRB8ySbNndPTO7E3vvRpy9//+v3YhzZk63x7YsVRL7AQAJgmRmVkl+6XGhW66qTL4TBECAALtkA8YbGfToBNdrQGTEPMDfbti5X0fX1g2glQs9OHo86/eMRHTpXzJwM0Ltyh3Rkab6uDBc/tGa6fbv3KHEd4Wj83GDV4MXGtB/JOy5wXFQxpqVixIBScwkDICTnFJtvWiUpyQC8kmJupyOZ0ogkfwhyiqAkd09nVaPeeZ47b1tyOJuy7fVvhtH7zjMpJ8+nRdEXgIvKeOllOx71v092z6D/e1vM+/+HvTyVkJVI7GcoF417QmoBy6c0uCd1TOoO3vPP4d37wn4GJKXu9A38LgIxghrYDCWrBe6ltdByJlVM53WuNGLx/VnElQYr1KN2wy/iG1wGN9RE6gTgGfbwoskYJp878rmwXsKX+M8vmB9+fEo3RltFOxlKueeTkRYSIw/cse5pCPoFQdC2XepJ8F01ot6D3JdJuXPIyPVpusGd+jsZ+TfN6AZNq6JssMxU2L4dfM1vKOvgaaTJojnkGAH2fxBiK0+xfWfUfP48fR7j659OwvVl+OnwJeRwth3SuBJJzr8BTyijJTJ3UZytMzu39RnT1/6hHaHaCJ0in9Hk/tZojZphG4MonxiJdr9kW7NlrQpsCDe3jy7KXx6UmW6GS4Njwi4O9XtQIYoo1NKsDC5VVEDWIDd0usgptXDk9V04Xu2nCyEeuWZlE61ALsvWQ9f1dWRappSfW1DaYJ+z8QuMLTWnpxnWDZvaaNZ2eKkyhiRu/ccDFA92CBRWEX2tdcri9zb3NdbGrQiFWODjYqHytuq4Vrl3UwoRnot1FA/ezkFaN+rQU5ClufqBUcQzzntdmbXIruPlRjEGaQzwNA9gXmV8qoe3a5PNoYw5bv146wsQNZTRkJKixxeUI886YEYF4jPEmp2XcVovmYQr1j4jJxXacayYl0ItJxxXgGcEjgtyMRYzVMXBOKT4OQqexRK4qGaLKQ3ZzBWMD8jY0UxMNEJ4LXiKDDmUXEOPQEshw5GMJI9fN5Yk70b0c7s0tjXGW+oD6fST0Cnw2yzkDNrUxQEjTcbLughmxL5QNZXX99o1OuzYjyvD5pxb5oFt7LMSO8MKIo1stXl2mRhmxsjMZO37Tc1BXmhqebPAOUVOI+j38bzGszA2lRK6nU+Gi8efOXmvUWC6ESsUVm+uMK+BnMOhrjC+nucvMCh3zLAuXfHzsY7ZsYw/TT2ZDEL+tm39LOx2cLyyif7Q4ME4rUTadglndp/SF6m1fix3uresH7H64owHgbfyyYZKFd3lCs8vIE/N/nlmm3h8y1fIhE17FAEGZ/1Y216ouynQv75RfOUvpPeF+4IyzM00hvVqUlvyrhmdmszri0lMaQyDOVUW19wmMrUaio39FkN2gAe5ABNdm+lpNIolAba0D4y0qKHxx60HUygO01+zzV6i84ZJxZ+rQcEiRjLssg0JeFJaUmgU0I6ERa98zxnxnl9xvl8xvPzFyCfkPAG/JmRV+sji7gKu3JLxmddM9Ys9DGvd+CcQM8MPNdDMon99BlxQcEI27+38gwc7nFdQm/Jhb7vob2eY85Nq8m+oUZaD02yhrQd94rl+XwccKxPS0W+8c2ZlGeLpKSltilS4KgT6BNeAJdkvSAtUaTNxnMLd53wP0VEH2rD59ttg43hKFTHHt3Ghvx1FExa2Kxk+qYeEYk5ttvVR0icrZWYzv3igGKjKr1swRTaZTp7m0OF96R8KY4Lo52TQvwGFe/JdF6E5drGAxCpQPejM0h3CxM97RiU+lLUGkEcwq7uCR68GM8jRDnHvlD3uj2INGhH9yjy9EvaPlkPhvAmGG8he/Pb/uwEfZxbl4ZHZWDOVr4XDOmwwc7e4AaH4RbC/acEv7rUR4YBU6rK16QbF9vcuAUWBKmsSqKkAqOFSeSUHCELgiTgNqKewQ4Wd6PADu+bE24jIvBaVO2l5byUQM2EkG9R9w8IR4dixkM1/9PzM96fEr7c/QKsH+RlSnrXJmmoRIhhfW8YfRh323Pn2Fgt5K+qxH5DgsP/7Dd55NM3ZYQDKH6f6MMOj9ZeaMa0K9MnRwd+sMH1QtLAmBkPgzf1NmWNBKeQ5Ugzt4xOe/n3cIG6LxdWcAE0dW1sKDkDWAotP9GCBQve6r3mi9J1wzwzng8jTMa5gyiQfmXgQ9uomsHvR/z+RGk4dQp/BihVWzHgDKYHxq+U5dI2yk+/cA7CFqvZasjEg7q+P1LmhTjjyzSSsQJFqclAUepnbvvWVKXtjy56h5rFrp4jXZnhLrd5jNbNytoyog9BkayQ1SCPREWwtcHw1yPpVhVukMVeTTg7HcQX9bBdRBMqspWmNyPj6hXOijvJ7riH8izJ4brm2tyMo83tdrMb/yPbawLbnrVlOSsnoz0pJq6TaqbvmYOnSorYfs5ckhZsdAAAIABJREFU11uSw65d+hus+r2sh0oZYA3NDoZckF0N10jigy9yrjF6ubaIOIHSIhGVWePqq3WJmEBYy7z5QwZFWwSA1Eut9scmrY4elTEZ0DAtqphOnKuJLXcyZW4jU7u5VMMFM+vBQAlXD6wAEzivug1gHUUuXt8oh2/tIACD8ezuzk1gXiRmSNIDV0pfGAzkM8BqOM/P4MxgM2TzKmUTq0ddRl4ykh2KOOXqOdMorLngDmeZw5wNHyT8tRhr3OGvhkfp1Jev3Hyz3yMWViYlmGd4+GP4oIM+hWtoWOt0oLymmNi2a6DQmQlhcF/ZoTE1+SLBj5JI6FlSHqWW52b5qJxsyuHV5wtNLM6emn919bXLzdEZrkZFY+eTHk8eVpyzNddegSaFtx6YhQi7dZwHsoZk6J52D7hDH5+sjtegN4WPeD4Z0lkEDVpLXbuK0xLdZZwu7pK6Nh2G0RrZQ37Pm8YrsmlbXFsNf0YlKX4P5w9deBYwEG/KEaSoV7F6qV6t4cm+kEuufSEqU+mPQfl6vXe5GdYaVuIO5qlVV9m0ww+SA3rplKpolN7U/rJc85BzrqjCDOSn2nBlBwCApU55vVXC8VlGkSg4w64lh5ePqIxXjaSgpwhgd5yTOZYvhHQiME7AIgezQAQ86lydar+be+UJIkMsoiu7O52QTgnLkpCWpXiekxEhAuSanYScCXlNKA4sq9ELqkF14A4c5gw+s1zJY17oWfLBj5WObYtWDbFBF8nvrV1nw5CTEFqeGc/5DLkH/bnOaUGPSst9PKQtB+dhs2Zyvjuo1fORyFsweNankV+5IxPxQMA22QnXRBR66antVgEb746QOwpf9hnTKLP7bQd9OTwP41d0y1yTjOagk4P8d2vzDEl48l7SbFPz+eAdYyMdtW9qLnzKFbbVIotcVfdwcb7YfQz4iNXRyCKj+tyVEYXn2Hz6vthLne+P8f2git2Bi5ywZWzG2fdWRFP9YBriqr4MZgSI+rkYLY9roGG43weqXBWJ3U6bhrqEOIPs+ogeTyKNOgzH8a35bftW79DQzG3T2Avb9B1gs6n9YZ5LoxHeoMLNgP7TgmybivbCyzqIp9AcV4ohvJTRypVLi+6/9L4nmHCfa9pO9vFMc8zgR19rWJMt9vr9GNANflAIcv0///X/4//523/gPt2pzx0Ai56w0P5+xpfZoOMn1AvhIJ7v0Qvd8h6B4rG+VSm1r2GvBhvG780zLw055PvTgKdNe3lfkR5sSeXpBxtrD9q0lMRg/lDCs1P5NJgaz2fFFi3Xfv1hrzTRHwR8JqBq7nbq8Dh/yQ7sUpiV7Z8fwbtRn7sCLyhvM8lIWTR4bHUVrWRQlOwdQIlzOiBTrwdTAjFJ/uxwkdyfPsvkcDQiq6vKcJKiccOn8XN3BBHHq+6k5azTLs7aOKBHF1xnY7oUv6ecGwr9775ehsiHpoylZO5cQF5b409d7gxaVMUylRdJQh2H5gx7yOTKpprBMmU1GyTtPAFiPDaNu42dUkgf3paFkrZRnKXNxNXGZ7JwQy5LUSz1GU4Wpa1GemJLEw1orLXV+3/rcGobOu/J4QAVpUINhe6M56xe+CuKd6QZ0Ll4aGXUELAZGWcdao2UkxjAIopCIheeOYPXVf/OsncwYyKLF3zxdNe7oPmcwamGmyVADJoZQE42Im6IxFBeVJRZ2273rhsyBL1YxKlN/A9wlAV16Wiw1i4teKeMr8YetxZhoUGAGRG42c/JX3ttiqdZPQ2w+Rcaw239oYPcfalJbd3oSpZgbXGr6cnQjJRGPjB636xPpQlZ1kdvQI+fjm+za9iMx+y1ZwazwerSmQzu52ZUqQvr/rXg1b2xfNl4dRnGX1/AHrcKPxiNZaV3S+GL8ufRpBq71VQZ5LDi4W96myILsbIWbtl5CX8teVIiCC33TXAyVSmbwHe1HIZEorkv1wACcj+2yAfMjJyzeJbrb2FH90B+kvVB7A4MKui95Ww6IsfbOTPwiUs7+Y1eEv5JaQ2xGIZB4i0PAO9YBtGaqWHW6UTAQhJV5qR8jQAsDKSTnw7hNFS7iURIC+G0LLi/v8fp7oTlbsGyLNIuEh61ZsaaV3BOEp2BFwAnIBPyyk2QGviuslxNwSsrL83K39SYbuOhGUYxP1pcM9AMb2sUMwndPsn6091z/u8APcN8ZXL3SvAVafy/A1w0PI4pdBu+nSw3uMGPBkNvrOHOzcnU9KMSuhv8oHAzoP+sUAhFJSblvsYmkdukj/SWpghcZLOzLBIiMi2yecrrCi5352wL6fWQnVfyzdRX1jyv2ZgQSOq+3OBnBR/GXVGGALynBU8nAp5NOaAK3URuw2k7YhM0AfH4eAD4U7V7JEi0wqSKXvbMXL//Uw+V/M1OcedwpxADvybQB9TfjRHd47zWQdwLAWUp5Nqnrw7cfHQwEm6IgsJwkLlzjTGlC7fvm7q/slC0hMItRPa3AlOw+UfFa4Hr+4IqkjZhwTteihmICm7wGH0OQDaltSl0yw0gTmnnS+ZSZXlGI/qu63CocO5aygAHA+RUuRO00ofwxBSC3D3q6jqMd34tx0xe6+bhQhyzedE7GmvsRrTrxqpsfreK0Opt5hTm0SAbm/fVWe9IONlKbkppkuiyowh9NmaTIj0qdqf4Q75ffS59/6ifsvSSKsFDEyyOLxGeLBpKY53VFaMGfy6KaNTClfYX6UjXuoRHr3A+u0MF6i2Y1xFCjw4LsEuxPQfdMm6LgCng+6En99cgNMTU5VPnrhUMIHk+admbOWO1ljFk3OxiwKT83IzQRXusTatGAGEBBOBU100CUiYkpmKUyOq1SuUf6556WNunGqOxnrSNYZ1ZGkdMy7LUNkn3ejoylcoZAOfiUC5jod7zq+TiZAdwNdSuD4Ov3tzFA530DmRK8scWnichIyk5kbyi7D+rB/oqhhQGJMy6m5uVAFIPO8oSDj4z7CgYQBKu1h+6MhksM4qBqHidc/HSa8bBpjgMzyafnN6DHeFoukH6uAZtnl9F/OANxLi8qCFrK4NY5VbWekn5ickw1GXyQYW5ed6wqJIljNmkK2VINQ/Ht8nPvFZiuKtAIUv7PTCaEo3NVZztwIrr2rBMdsWNcdYjifWm3Fc+At8X7WrkAFMMKG0dpXDjVl4vIU0wtm21U9+XGRodEr4UhuPW11le71Q3nbZR2rI+FLfNYM5QD+7BZHhuGxTFNRgAF17ayCluDRlLWRa9TkM/MzMWMHJm9VB33opaRiJGKjHNXRMJ1b3b6ksE+kXTPFJJQvqe0n0dD+WT9OYZ9FHawA8Z+HynqiS5PhCrOG9UyQTAA1XxXI3Lwlo0wsiqvDATeJE9EE6uBDsA/Q7AI0BPBHogpJSwnE5ITwBhwXqfkdUjk75Yn6EH71eATsrvuIxxuQoGwiZzYuWdpN72kjYzI69iPD/njHXNOK9APhNwTnIw7KzrI5OETdfzX8wEfNb+rixe6ivLYTQpXENwVAJZ0NmRtuYzAp3dYcI6zo0M12ZofnWUNeaLD7oE43K7x1/zIM1hehMH9UBZo6J59qJLdPjxsfb0sgBP52NWP3dzvlltxzcdckUhh7vE/XfePiKyPa5eeJnzzXk5e1EJKkzHaMRMprJMTDxuU/OdUGSwUrYQk43GvsLaasSytrxDZ81jcQ5F2udfmQ6MGnttlV+zqT8LlDEc7Jfsh3fofAXx8QY/H9wM6DcAEBQOMH5qEr9/Sr0soSEYOYlCLC0nZVhZdGmwOxMn3A26iWpCj6Ey9NlO3jf+YkXUDX5aCLL/x8+f8ObtW+D0K/D8R32X2cV48xBwjT+7Rw8AfQ4VxYr9I644/jG8/xDujZp2xit12D0KC+ZbLo9LBZJdAddpZhrZf1vB9qoQueXoTrMI35gkNUqQrgGKpARn11Hvc92kmsdXisUcgJXP7tLQUH3Z/Adhdra368bN4Xj56ZSMgMP9oP2h5MpziEm+rXsIO6IDR9t+BEZl9yFrt+vcq/yV+KQ3ppdyffmxXVuwhQivAIeKpXqwYAQ7qNF0caA4/BXAr/cSjeRjNl6RcNK7MO9I7tt+Wus9xmfv9d+MKVVBrQxdatGzkaNUsOtowiXKv5ngNUu//34hUZafzwMPpcGAlmjo3CYymywD7c1CnWGp9oMspDog8mmJy81yx2UxSNv3U6dPLBEHiJCKYdh5OpN6trmQuMQZyAvM7EMsdLeGtVRZwIznYJ1+DYlOqb1qliFG6gw5pCra8TJI4olubcoghyR+xUZdXHnDECM25dI3mHfsmvVdPRAAtvp1YM1bnBjl7nhKckVOWkTRn5KEFoZ6HarHuRnPwWths02IdTsQuBIYKzIIKScQy7gnSmKEQUKyLLZPaCJhaVlZxzhEySJVfu5xhjmZG/Df0a/X2L7Y4ZAJbFfh3vqEg0cHG1MzhkccnpWoC26pMttLY+vypec4batID2IK3ntZWKs40BHzNh+dkWN/mEzXv7WzbZgrwNcX627Gwskz+UDeaDgo7D3S+4PA0LGb1Gls32jccCAHvKXIJvFVHLQ7NEb0vShVr6kU5yGqXpJ9OOSHy2m2EtR+6jh4tu7lfFoZ5Z5aNk9oqnwRsCjk7QFKh7ucALpLSKeT3sm9NPSWzMjr5AzjLDXSCNUl4Yz2ILTzSNBw5wAlvYccDOAJUCN6OfR0n7DcMehTBt8n8P2qA3WStZ9LF2BHBJs4WhngT+J1nS1Q/TuI8TwTMp0AJtDi5K2T0RUCnYC0ENKbBXenE053d1juF5yWBZ8en/D0/FwnxMa39DkV/j/ChKzh1VNaQTjrFMphtHXN+rdi5SyHGFa7nmQRA/iaqlF8XSrvYiA/6SG2MzQt696sjkuhx4yydTJ2jVrUQD6YyPhXLsduGccHo/3k94Jp/V9p/xKr+C79t4pnVO5bw2wQJvyoHMT6Edr+jeBiPPEyQ1zQRtDc1ZHfABf/NDP2p2jkzwJe2J8kadCbHX/502DcDX4QuBnQfzropNXJ86AYGG1kG+HZCJbdFQUkWpDlmK1I5TnB3yjXFqR/VLdBVdmhAhChF4TiHny3vze4QQsfHv+B9w//gTfpDl8A3Svo5jyxGNFXfXZn7zWzhY3ltwB/rk4Vy0PFTQuzBivc4e9/j1wfXdqoEP3IwPt6E2cPTukCHI/BfS1cI0hfpPhyC7woIkyI9xpOox8x3wvgrlbdgfcc8iR0azo34SXqu7YcAvfk0oRFrScxFV2P3uBbWuF0ZIchAzivGlYxnuycgtPSqELPPNB8f6QCbbt5h5T+2N3E7m46UybOIi7Y+63GNXyFLhuUa1Cvi64QCxsppQf5N9vglPoxoR/XmHerP412jcKwcjuORaMK9B3YoWebloetdPCXQdd0Z6rvvPG84KOXMWg4BlxWj4Hdmw38piQ6l8MG6D+7d74S8+qKSgz7RS5PHXQiCihEGmF+Pol2f3rOznMrjmOnXPEveKYjHqSNXQlj0Fco3wP9Kq3h1Z2XoaK0rmPQMkCpmuvYAGLItaeZgSRhY5EArBlEdmFqFkM1Qbz3dc2wo5qsxnQJTZ/06nSjRQlY5F7XBC5edqLLVl5PgF1gTmYtp6xh5cUjnXQoJCmBKYP0nljz7JbWeGqe0PkAMeoZMNLxKzzUFAsiexNlED1DLprVA7Pkvf6N7juXP1tMpAIQKf1mLSOZJ7qJXGY8t7vOGeAVDEImlEO5BdGYgdXRcjUSECDejra42aLbUCt7EFCM5lmv7fH8q+Ac4sg5/HPP2RVbvl0OuqJqgUAbgr3Uw+0zzVKeN0so9P1q2KCzW8DuQ9l2ecWAv5u5IXmsY0FcrwKzax8YqFEiUPpHRY6QO58b0rHXbE1nQSiMTJO2x4z9dnimHn6p4yK2c27wpzgQc1tPeeDbVXB11DiFvNWZKEM5KAd/0EZasNfj2toUnWzifvNG3aXQKId4nIpG9ElVswZet+RKuwrn4HhIwMk2hgwAOrlt0Kwjtw4VRHM405XEdhCLGn4rx4TUbJyUByWlzQTlSUbrjc8oLSUGlgW4I/AdSSjyRf4SA5kXJM7IzJWPeRxgIPFaxsWa1S03zVZ+v5PfKwH8ORedEeUvIHoD8JOkfSTwA4Hf97TbX1lqD/19w8SQiHP3cj0HrdntTwh4JuBLkrVkkcQY4C+5zAedAFoW0CoHv9J6h3QH0EKgM4HPKg+A4eW39hJErjxVR8VYTmLg+YmR1xXpSd5nzlhXBvPasCXwojo0loFbVabgXIzjiV3gu5XBK1Vju48mZAedbV4icxmCyTsOP/2EgyXs/VAYNGQd0DZbT06H2BLKAxDX2CXsqavTCryMwPBooXta0ZV5HQ/dfr89EGXfEJyZOPyOvIHbfzbgSvnA8sY6ePLcfy981Gi3f7fDjw7BiFeN3o2zNpFdqR3/4/cPR14QWzLo55GiZ/vCkVxi8Av1zj6vBW7uXiKu8qyASwqNck7M2zkQxAbc4PtAkGKbuQh47T+vlR1v8NPCzYD+U4LflepGqt0dDj4138zr0jYlmocogRKD8iJ3Qq3rQItQy9drRN0mzbWUERRAfovmdlK77gU3CnkDDMO4AxLG/csdAU/KdBeSTWdi2YTGJdEI9QzQW9l4nN5WXD2J15i7YP0C6DQEAh+zGtF9ulHebwAv2S/tFjoABqqhYed0wL42sIK7m+9wnniF43cTmnuB0faUw8PXBDwUlRs1aO0jCV8CEuU341/GTrQpDVsZhl1zm97oBVzaHZ7BP+fKH6K2tVEKXath+Uo8Y2ZxjP29uA2E3khu8JUQtHQl8vXQx4gDe2W+NA25NCNFQTk0QN36KDDdYBHaCgAg4Td9ZQ7BVsWjGgXu1MNqxRkJYhz8ssotpNnJT1Ex7OsSpyY1PPr9oB4+7M5SDJUke7KSS9nap0obRFTjsEe1H5PJuQCV6UAGAjTEuNZtD2mQs7ymsszEw1hkzqJbzxoSnPQw6PIsg8AnoBjTtd8MmGHD5kDi0spVRkQkNuISzYmQuHqg1x4yWPmaeedJGFiVATKDeBWZms0oyMUjXdqRSzhcLopHKvfrclDrk8nMwyEOyki2O8xZizXjuR3DUsJvBnS/cFjvTycCeNGw+Vn2Bkmud5JqvCd4LUuGeEBLMqPcTZ9Z9hnqIV8iWlFyt0D5PYrvKtcm8+DZEThA1+YrTt90CWY5CO1JvUh3L6fzkms773UlC3T5Aj1tRIMgU/r7zFmRvSVpsfRKB22d6LFCEIA/9hqbAdurGluzIB+1TW37ra4c1lgjo0TwY+BllSneebkmyDqzcuNzLxTOSGs/nPp8IJdEXrkTBWFQ6OCZnVzdi04yevlSeY2ab011RlOHMlrfkourbUQmjzNU62ZodAWUw9opkSjySNcwJTCSHDoie84ufLgJ6UqrTwtwl8B3BD4BvCTQIpnF1q7H0PTQFBlfgfAiylQWcDtelYeUW8x8KhZyf15lPdM77Rs91TGx8bY7yO0x9BCBBXuzUm1hvtWHJ+XnicBpcQe0AHACnZfaNj/hekCOCBLS/iSh7bEAnFiuLCTHl6IoCEA2iKcaTcN4mY0JE9YMcM5Yn5XesIR0r97ipAeGlNfaGs7K+nRzR8oOFpblV4KpZAav6rHuJ4fdA5Vj6BDPY+2Xm1BL/+jT7JXx0nX6EnAT7cSUY22aEcdRNf6dYe2A3pVNtx6GmJXt5ZjQpNL8GZ850NxNKHVeW8BOvi2eFvlOjLzSyQIcfl4rtfyA8OpdoeajrWuwTt/TtxnTFxf/Z57zP3PbvydEJJ6MY3x8G+4bXAk3A/rPCDHErWyvBmLtROhxIcVkw0aNsFhLIlU2quIsbwhRZbNQN6i2f2J/MrXRutg/VtclG/dL4UZl/+3AIfzHz5/w9uEB6e435KffdbPOakAHihLjOeCBKvQa/Mik+QhVYQU5df8xVGzwV9UOeI90IuAv+v1322Tp70+5CrPNhtBr+A7i7OZ+dme9HPG4HgrbW+UOxtj66OhD21cE8jAqw8Fpjw5QnVtL6g3mV3uaH4TFtX89QLNsusNclnvQ7dABE05pMSfHsqEnQA1tfDGFFPMIO6dDbl8SlfEytByo29pNdDipXTzNO1TyitgNfuXLHFTd5xkU738PFcAHYNjEUce8RnVUzQ4vja9psFZ8WXaGbtTfLfowVBy6+nYVcnswyWz4PJuHRndVla+lXSaLdJaQUFShAaNw+jXfb04GSerNlFW5syx3IV/4voljzYLp2zzyUI/6plh196BmuLu717a3BI55lXs0y8kAIKUEkltSQZwbb1xe63ilOx2Pc33/vJ7b6eugl1FLW41OEKGGfFnrpx3y1PtHmz6yoTPFxzrSXFm6awohg3kVvEmkAS9ygy6ckiihs9wPTuQU3pD2SJ+tUgLs/m99To0XurWfxSsehLSu0lZVonORlXX+1UuXYUu6vSWazbOSUNveeO76sW7ng/gMzlTHlQiFsJcBU8194x5YW2NJxCjAQBbP+OqKr57nBf+0P+WwAXX6VBkykdWYLQw/dCwZvMi4Ov/SADu0dDgkrGPSvizfvMKZ/JuWwMy4SJ2bSYJIo2b5r4XQr0mCbZg1wiOk/Z7VT61EQvrSjP3zyBptHlYj/Cdg1xm/TJcv2rEzW6/Ern4zIDZelIM++8IAR6sGfQccrejbMgbux3dYQBy3+cov4JC1wc+uqMHAxXI6HuTT2rP7Xg5kfxKZnEzHbboLYSbGDJ/6u2JLkp52HvI8b6rxi93LN5VPGxVsI+RUPgDIgSn503fgevVAghwwUt5CCcgnAhYgk623rIe7QiSLchCr4ro8SQ5N1UjsDmrUA1zQc0lujFgGihmgjwR6pz10826G7Xap61gM9mEEAv5VhxHMYCQxJucEOylHTKDlhJTcGjTeSybynYTdJUKGXrOTV9AZeD4z1hINoMU7cgdJOvufPeQF5S73Mh5UaYI1iFOdZPMcVxZLuumizzpGzEgAsnqmJ05Ysx4y40pJ2YiYl0/aFg7WaK7PI3ufLbvpGpi8mK3fmffnxWtsVv+MUUVhA2iRzs1fLLJsdtv3fZMdjSMn83lwHuHdDr2IGLp+m9Nog255cIc4m6Sd57bh4kH6Wk7d7ihKujr8O+OBPIm4Emk+h/YFPvsyiWgCewg4qbPTb2zlp3atAXVb063VnWaMmuujmMW1HdvxUV82p6lj0i2CENrTtP+SxTwtsP58qZF/KK9tpPeiyL/ToY0/G8RIJrOpUNnjNlc3uBZuBvSfFozJEcr9isVYZHdbJbBXkBWmbyFy7e7NKmiK/pA1JJ+9XyAXEbq8QKkrbhSplGfKPts0sISwMgZNJpz677O+3uAGDoLi58PjP/DLw3/gju7whSD6+MR1Z7Gg9zgusIF3pZ4d4ZA3knTPFZ8/MvCOJokOCLG78BKBdgJb/dxqginsy6lY/YyXdc+E13e6oXs2gSpuyMOPeFDCw+gg0Khf1w7/8tr0qi1voaT+52j+gMumhqGh28F4xjM+eGHVvpMqffzmYti0oZasbdEluNOlvRTxvjbEgRjubC8vdmP4xulfaUy29BP+3dfSY5S6XH+S4lPXxcFC9bIDbST1eRR+U4W2iEKNm9QGRIVYVIpRO07+t6EyuTu3XzCoKZ1AAE5LH9FjUQP1SoxqpK7yYUISOmCKxclmlMKXXbScvXixToSKbpBArj3u2gvAeYGj0rLFwn2vsAtmqxHBgdqGOZ/FUKxGdyrXVGjBRJJY5V25S10NBkllWlWmErI6xZJ6oDOwsorVvkyUUK1Gdr1o3KsXB3RxQKupKELNw9aU8iFxCeEuFcvbXPYRskpWIFs4fCfbm+HcDPrFS7KOV1X1VY5FxvPtrvgs40ZJ/pjEA7HRCUeEjFDkCMYQpw1XthSJDewRvo33OkX+ntom/SuxtqYFr0GnZ+1q6Jr/XfsjNko3YYa/JlOoFzrrYQ16yQAcHT/HTprzaEZDWC9PGBofPPHeq2ckBx3MHg/CXVHGUDKJMrZ/Fuezzz14NmrEqJLwju719RO+ikx3RCyzdF40ffF6cXqRbkCjQBLoIdk1LQCQiv21fCbFyQWgtIBOBFoISfe3nLL8EWNFlmBrzvvQLnsSPlLM5xAPdMKdi0LC5V+4bxZhxHlgF1iAdydNRdXeVkQRBs48x7Hpnhx1C1wGwv/JdTun0wLzqLczBkRy7zkTQ+5aF5525oy8nsE5I3MG5xOAGsGm4ZeePHcGJaVfIOm/8e0shM/vzEwXZt7kMDGMhZeW++e5lCwHeziDtSwyo7xFHWMnz3UTci5jx+VwIrnPM/DWDr+hyDrfDK6p62oSMcu4U2BDMN36jQdxeXCdZUdsFVJZ4I6VcL3WBHA4GGQShxt7zY6k3cO3nOb9iuPDmaHe6NhLeMV367mbz2PywEU9DI5vtcCeSn9V+CpVvXKhR4rz6/Jr13WDHqKIbby/eTgR1AzlX1mcvMG/N9wM6D8lxN2ECl7kqchE6DDFUqOoplJGZhbFHljCgNGCpKd3Re82kLjtRHeRNUXYN12EJaltHGgDy4MNCvgixqQNuBHYfw/wYdwLEH6hhC/3BDzqBnFhiSR4x7q3DBbbRQX382cAb1EU2AvVJdRsavynK+f3VTzKGyRl8O9+AfhNmT7/yJovGD9srWSXJfS1aUPceBWFVcw3gYRqXxlBKZrmyzTu3kYR2pt9qaddaAVXAvAwCfE+0lN1BvOdjl+Y/DDYQaOrQA0rRXGT+/HyB5ianC1GbE0RoxrOzzgj5zP+WO2yPrSbvuzmCNyecYro5nnLKLqAzxPL8fwrnu5uDn5dAvSCubiwniEw+kNhk1kp8zxqsJvN2Th6Q3MkNZeCr2O01uJavaTQrfZc3eZRBh2PZDjETn8lA/QbSzoiKnqxN8udoo0olpmAZ2cUfM5fwAB+L6GufZVhsJL7aeuC9EGqPMBPl6HMdHQVrBKvAAAgAElEQVS9aGd1NuNG6n0uD7P40SstUY9qc6zGqsExMtju4Lb2poq73vO8ITBAjXE/APMzbcHRL2YwzjVNM34U1nvlBXY3rBYB93PUiNrYrJTPaGliuSsdDGZRNnPO4t2XFoDUC1090zkzeFGlNDHEogEAajy3yTEjujaMtD+8cFk7xfO5ZKN6zQyR3A3O4pFdR98N/IiOIgTxVlrivayrZ2LqB6/hvxLM2lLXg28Oj6D8qJRvcWdthdXyWA2mFqLehgfcGnQsHgpAyHxSlqCRAawaC6dPvg5XW/FQ9EPTr6hsXseujaX7fhy9N3plkOVRzRfmJi6WmK55W/l+CPPS0vgfzdvCxjAqctn3spVGKAsNYKWBlOWQRDm8ZLKG/ctVLiqfNg0bhNJwptDXYMAwAz4zkPQAetKlR34u7QCO8ouGpni8tN/NWNh7T9QbAt6WY/xh2K9Q9hQX2rmottSWB4+ieNRD+Btg49A+mLRhJrCYIf3c5Xgd8LTPDz21y1I/SQ8/dfN7BBpiEV/4nyS00wihjmMmizLiqSYhsx5sS/KXToTlLiHdJZyWhLQQaAEe+QnPvNZySTKYIZfsoJfiYDEI23kyeKOv9j30x/gAtaMJICka0gA1tZwSzpxdyHaqfLijj2jXS1nrRheF91KSA4BlKgmNLCfdXgBOIt8wkLPy1NUm307LGV/33Td+tLhGaDud57mNCpmM4q7y0fNBtWt2piyOoyXQ9gldRHvAj1EwpF404U8gtJNm5vn2eZikVT8fw94qLlsArTJvBpN33eNIHw4U8xoEYsRCqzAivxtdDRzNIDCc3N9FtWI5cLlOFCnCaFzRBJg8CcgBC0J3f3ktnasc5Ov0XeF2jrrjuV1ElB0619z/NONLs6JGSOR/xzIdndgu+BtCiwtH7zyvMqHOQ5eNo1jU1LjdnsnjZljdj2ZMB0LTzOsfcHxqAr7Y2KEBuuw67l8r33aRbjbSznD/dQWQG1wDHZpOJtLLA3MB7AY32ISbAf2nA88AOfy1UEK0N4qfugkoYbpM+achIFfOAKuXY1pAtIBwVhlqnW4W5Uxuko1EorKpMWInYfhWJ7D6DVFb1vbva2A8Rjf4k4OTU//1+SPePbzD6fRXnPHPuj826XVBvzkprigM0GeA7PK1iXT7njWM+16D/Pe4gQ1t+KjljoraRP3ROnkBjkch3L8g1HU6a9PWnjjsSWs97PIR6CE16ZpmeCP52b880OeiHzhIS15CKkaHjI4C2yYtbnJQmv6Un7EmobQLqEOTKFJ6yi/6G0bW/5hX/MHReG7RRpQ/DAwErY6Yq5KWXL5J+31RPWzhMG8ob0Yhur8XHNX+zBQMG3mPepzv0o4D4Kfikr3K0Xot3eIemVMsYePKGG4V0WYkzw4HfFaiYuglEsXnbwFFE1X5Z9gHC2NKJFdFjsa3TKeXuUxR3LQeQA0fXJQyJhfN1grVdtSwkoTz2obL9u1NGg2jeFk5/ZnYsdZSXlUEW9mYwvTq7VcCrzT2CkeTKUWkjMrAEYh8yUY77HJRqIEtMcBJCaMahynJQShxZRMDekrgtFQ/7JQg96kvqoKXAfGheEWs1rpA4CTGezIan5XuZgJyFnzIGVhX8e5e7b7XBgH6/sWxM8OhG0Rq0prMXb3nNaNLb1Go2D+WfzLX621KFVFbxjZSha9YTf6chIyXXjjAGt5edxHChk56KG0pI9Auq9qzIqI45YuNRRwlHijqImmT3608V2/i5jqOw4XAlYfOKgjJj9DWvSR2V/h+/hfKikDIv1FWoGey/FjlCFIjkewPaaNd1Yi+U4fhqQs97Uks65dCAwGJdAAL/kAVn73gRKGKI+Dl3LYF5VeTnCcvfALaQyRXgF+7UxGE2kR+wIADMseGvNswVM907VOvR9HQ7i8OqEPGw7RYz1phfBDNeqtXHxmPb5u6O9ddmwedIGhY9lTGnCgJD0sSsj1XUqnt0LYmAp0SlruE09sT7t6ccHdacLpbkBZCfv6EvD7V/rlKvZd0PfOnUT6ydDYj1cMrcFxmqXEheJXrTqIhSEKrS16yUOqAeHjbGvJ77oZk2MLi9l1Dw/2nxzMqBwgqB7NJO4GJShQaAmskGV3WOYusSAklIkK7oXRrwNaEW3OeJpTQAVR4f+F5vpsWoSXXso0zCTlkNbTL3ouV75ONERu9VF7ODH/4pAM6oeKhUtXIrw0eD1KzI8l2LWRXwEU0YSQ4HwWVh5agVmeIUbyjzZGoKiY6o3jThBwM62OBQ2RO/8LC/hsD2hvbmUgyZQJHgLAfrmD2zuirpmr0CZ1kNin2FfHpB4SRZH8o10jPwiOkMqaGy4fS9giXrOnXFC0vgUsPiLyosht8FYhzZzJ5Q4A9Xg+cGW5wgwNwM6D/zMBOABly36hOcUzU8lNg3aZVKJ5bCYlIvG9IlYqjUEMue3FIdyc3LS2bQabZWCeIZwu1feo6diOSN3AQ9gMfHv+JXx/e49d0wj+NrwJyX/bKoqv5Yhl1k3N2Lt5eO1C8nB6ljuWhbpq34FdF/j9YPMs/+Qwj/KWBJz0qZT+jlx024UrFaFRaTJVtO1X779P0rhIC8KC/Bp7LpTefR5utWdk6d0cF/pcq7TwUI96FqlZTbHVaI/upNDOJkuUzMk5I6j3So0ijp2r+2v9+b7yrNLX/bcov644qkotSyKCr1HiL+zRBeFfhGJRVM2jq18GZwXU71CvgaEWjNIPO+uLi+pqB0cWRgmbGTmfIU97Z5ntnI7615mk3UYtnrwFUP4gIv5SmtAPBBPxK9+qRLTmecBaSv8paMUeqL4eVSD3h/rVJ1aYtK3+0V7T0jjxQSrs6sbxWOto2kwYiXDVfbWLwK4b9HNczogeAtayiRm1ECnQlHvABRIY1OZMIStsMLxngJEZjysCasKQFZOHDKSGfxAtdPNIziO6QeFWFaZ0wsXtwFWUtbK5Geqoirt49S6Se7gxaJbx8XlfBg5XUiG7xVvu+F8ruJtTb2Ej/6SJTd9Au6vZsWx3QQvq9e+cOry1Xw6OmjfyoJiZlM3b89+S6zO36KGvChxmWkv2yGQX2aFQw3di4FtEoV/sEpcZKG0tK1+A2DD35XIH165UBXaOPyDWef24R0iPljL5zn2yPF0S50sQ0loNEFk66HB5072uUggGqHeGDVr0e9GOi6mys78+GAEbbmj8q+T2+SfnU1mfphjzU7zHMuMm9HDOcFrcYi4zMXRLplGtMdAs2Hr4xnYVgXETktwocpQnPiiHzaZDmguKsBbM1UiIi9fIIj9LVEg80KCKm/hEASnroilA90ZPg/rIAp6W0QlBAxp8JgDhRgykhr8DKjIWBNcv95CktONGp2GjNIzyZMwPk0GAmiUdDnMDFGE1gXibr1+OOjw7hIFM96OiM98QJ5eCaH55mzSiul0NtLk1kb248yYrI5eiV4326sHWcqwPlGXnNaqC2e6o9LW2Fmsqn9Mix3nfeecnD7fe44lETMcXKK97xpFeqrEUGMTqHzGAIv2fOyFkOObNFzgFAOMvvTeJHzTcu36h9+Kg/NgU+Dztre1aOp/9bS+lQO2Z0xBF8o3MhCxdZL6xVj+vrWYzopc0EnE6FF9TNiSZYHY8dkQADb1j3aXIuX2uTXcZE9aSXrZ/mZFDlGaUbncOA41sjaAyPkzRlHXYPD4GPrte+OFLGYQT9KnC553lXwPQ3dc+OCjjudVMId18BiG7yX5fw9CMQ2jqdS6WNh6ufyUGjoidjNBxP/yzKT4FX3eAbg8kDLe/s9IwhSysf3OAGx+FmQP/pwV9k1DKzKqs6wbJs4oe7ZtgpWaFJST3QCTmvosyzeGJTQcxkPB+mUX7nsjFErQtQBmh3uBMwCo8KV9gNbgAMwrgLbixIwJt3wONHjcCmG8Q7Ap7JMVz3Wfhv2HTZbj2RGg+9EiymJ5entqdN5oWDqHSi6c/L4IKMXn8wKqZph9uMbdXnx23WtIdW4KEofBPAnzstyrh9o9d7kvo3JSVxnvcgpMnc3inIhJUzzsQ4gbFQ2tRPGLU373NR0TA+FY0b2r9RM7rvcfOBHu2KWzq3ayvi1HA5/YC0fnNZXSLA+7QzBN6p+xpP9DhHsyGOz/3vouWZrMcZjBRD/vUsryfThaY4nEouYXJtKgWmgmK/sldSMU6nE8yQ/g73Hc2q+zLSyN+M348oGxtN2MZYDcph/z5+b7oXeAWwGU69emNyV7wvaBR0vS2nlifoZIPa9nHMvo7h7KxtKGPfDwi7GsMMaqEMCzdePMQI9aJx1JDPZtCWkJpmEFeDwIkBTmA+YUkac12N39a+ErLVjYuIuIasGea5xnp3KxZGYgsfL1GaJBKohuZVg0TH12bhF7micl16B+eWDRO4nUcvw3jafoB09atBmA2zHYhYSyJmag7hyjEx6N3xtVPFaOIMlt35W314ZMn69m15AsuxZOvDDrAbVjdkR9oCRrluIb7fKqK8Hw5GzL/TGKba7mmaHrX6QDE6Yrr+WNeJzKO7KgAoeCdTWyfWZJiLpILBPG7OR7CNDMsqpWy1hAdfWa9QsId2/NElnRU5Gs+RoNftI8LkxLnqX4dKDyLtMN8l72xd38O80XeriHDnvp8D8ePw00VjqQSKMTxccGBORkebqvyg3s4g4QHJvhNAC+h0Au7vS5F2zqEYhylDrgWRq/R4Bc6Jy75ADOgAZ5ZrKVhalGiBhW5niwevPDA3BI7AGBjIXRh1soO0cSzMCxv1sx6E5tqZZtjqpGTzhK8EvY45t3n8WpErpbPuZORgjBibTyhhzYsRXWVAJkgkEwZoAXhBCbtuC7/0BW4xMgir5NWDBPJGdWFloi1PLt2uAfllXMjuwma9EgasRv2sdDDLzW15BbMYz0UflrWV59KmfQHSdIAmg+hp/ARwvnRNOyCNqLMbLqPN07ZvlMZ9+jEFWtk2Eiwi4Nk8Dfw87LXHrdqlRobA8+ra0/aNuiea9yWgciFnFykoGo3CdNkaq9hlkQnaohuR7XCDXoAbUzhSHo/RuhdAL6z6tftyPQR2NMankcDXFUQDoYvr36iwD1vM7AXw4wxvhSIL7Qpy/bMfsT8/G4z2ukBHHyrlG66kG9xgE24G9BsgSkebUZRIwiMW+lQIkqNMju+QbkDIaeMs7N6wJVz2B9oOOwXMlekz0JwA7oqKYsYNbnAM/vX5E949POD+7i2eHjXWuqGT3W1+ZsgFY6jXmy2QzfOqHucJwPNb8Tz3m/stJv2Rgb8pjv8KBG2EfPymCpr/ds8+MvDeGqLlryFr1fzsNqOC31DuJF1dGi+L+HpmbdgbGnv+EBNY2MRaGT+q5iHtNLgoOo7SiMGurCjNwuvRJu5qUnShUOfH1u6XtSLM6YAYWIDPyHiniRf4A1N9s0XVVA3on8F4Ns+PeK3BQIFVaPZsb73Vzb3xjLhW8IlM8+TSX6C0YWw6pV8MTZunu/wdGA3EDLm4KjG7/YE+tGfm3DAMl0nt2MY1zZjPa6d55nGe4SbfvUhox4wgB5rsfcFxLXDLGHwYar9/M/Wreh92EsasOha0N1XtbyD8sVctQ5We27Q6mvXmJGagUemso68FO9obN9+vX7Xyg0nB5NI1z5u1YTRDEJSzGrmbsJFWmqwvoqyswGRSuz00a2h/8UQv91fyHYgzGEnCTmv49WIUtLK0CsG7IlCjeMBVJ0AQk3jtUfVGEhuJ5uNsr7T4AaU3pVFhjdQtuToKNk7jsfYjZXnL1QRHlOFuhUnffDn1khJ2HrlFGU4yZ0x2KXzkT5Vnl/vZsz238XJ/TdZ+3Brxyg486F+2Me067OdzMhDE5SDxXEyZEt5aTTdHO3leCVo9rOvvRlrvXFqA2k6UUOw6dtIbgnnLD0a5/BhdH9yCrWubWbSHjUJ5U11q2ZdSn6Z0x7DE89xBgVYOeT+2QVhlK3LW1q8056UNw7qjcNbknBQY02/xFKvbrVvcYWpEn9IelZXs3SgQlJdZHO1jcNFV+CltcW9LgLVs/siR0Mlym0sx5qopOJGEaqYETgm5MYjYpxyasggN1oV1Zb3WQvjDelrBlMVBITMMt/TsYLG/8ip3gOfVonVoq9k81W0ctXfP4fcQBx1tDxFJSGkzm0z32cbY2shYQJDDBS2NKBFU2NK2zIqsaa45ss6Vd0BDmJe2nyAhz908umtrwEna2zEMo03UtEemR+avsoeKZGXr4sbMwrNLY+VQhCTIAGnI+9Ip8zpfAXpGdSrxeDjgA4dZA0no9sNCHA1+bmXeKbigOvWy/tDj0M8b2n0dEXDno9SEMryHOGm0y1F7bI2bt3k8aWQfneGyL+6SBB39LdcCeL5CLo2TmZrvpUAnA7r1u90ILcYyHkUkL/8czbMhTw3THUbS7wDSNp5F+glLbOqhbolnj0YyYOFZnu4ifHeLZTg918gUs3ZG+vSDwZYnc3z/IlFrS566wRQKfz02+FvXPd3gBkfgZkC/gcLWJrW+JwCJEjL7LVnP+Ai62SNCSnbS1m1i/CnjpgoJR1U2pOWjbpxqVV6yi5qXkSbmBjcI4NGDgD++/Bd+efg/+IVO+IfxV396/g41LHpRdEx2GPQI8LteT/Ye7h70sHYYaLXFg/Z6XQDH3eBr4fuWwmsi2YXNat3PhUGOoSMHesSmgM5wbq918/EY2xeB0SuwgKGy0tJ7xcYexKKPCr4Xk6gBbWvQhzB1gbJ0+nlWb0WhwHPPUXtvBsBP+uvMud7By+Fv2Ke42b1wdzDL8rU2Gd+UbRxVJLVKwG35P2z2TCP36v3akxt2YJicXjivA2Vd8RijaTIA3b2UNuTVc5Xw1zs5FOV7/lE9e9ZVDN+kCjVPA/+YL45xFw4k20yyR5f2PIoZoqi/vGbUDjia1Rg5RPlcdf5FYzds6rEn262ZPo/syfDFEqhc2pbBRbldzmrxqlkIEsfGQqyvIg+rCCzhaQlMGUxZDpiyGIqzU7QmY1thGGEKeQKgd5qWEOe54iVlBmFRpZvcy16DR0nB3CgwrR/c4kZYjn4t7K9VqaMaMBrhBePMVF7LEOud5tqz4jmOcL0UAWIAqVc6sZ0a6JZe0BQG4zlZRS9cqts3ijN6ZbfxcHbzFMocTNm4DfJ0Jlptda16yc/e+x1hn3Ku52X37xHg8TavVELdrSCG2VtFXgxbebxsBQwDtDXiegeDCR1V0ng3S/SFDjuOiFY7Yvy3gwHuzMZnY4VZvmrOJABv5OGWN7r1/x5yNZeOXVPTcF/n/izZaBkHvrI17u0N4qEyk13M+5hIjK8WkYQIq3pJm86lrTbrataw3gzgnMGpHqriRQ3jpT1cygZDvJ0zI5/VoM3WaIJQZ6mz3KGu+Mz+xAr3aJ7g7J+eNrMLS26Z3kCu4rKBJjtX2fKhYlMmLu23CfPTJkHQq2HZxk7WVZJIJpawDGhCM/nsS6sjbryjnrsjSMh182BPAC2Q60WyM6BRKUPEEON54mWeVWdGZIEIpBI72Cz57HuGKCsy+n3hmO9K7ZFGKzdwMtq2Ie8YGJ4Wfl4Ym6Nzo3qmwpzOteHHKY3zrxNj5Qy8hzgxmoM2Oc4bXBtGbXz5uO1CoTVuYWkfmlb5e9mb/IEf7QkL+w35ChDat5vuuzO7F0FHImdw0XBHwX4guHwNeIUqNp38vjooYZ+h1Hdp0w0KHNmzmaxQ5JbbpN3gcngFA/qfmzG9DP6Mi45Q3WbttxiLcmYQrSj3OHJg247IlM0qs4ZG1KeaJecMfnoGnTLodAIvhPT2DXBOwHkRz55yN6N6WvgNKWecdVNYN41UlBPFc4SyGDhzaGM8lWlC9YumbCKQY4OZNvAzr5WXwksm7oJx12oSEfDwC/DpX3rLAQmOLVpWguDCWTdXizsdbnKo7I0FTo/Sji9v0ZzOfU9qTNffq24Crc6SVust7ov6+30q+uIhhAhznSQ+GppSXQ7DbsrdoEFqvDpqW5s9XJOuSC+DRuhaepeaRz4NQTzNu/JLeqMHutkt7QrgPJvI3C1gtGXt01vbm33hAbwsyqaQfLZ5jfvO7mRrbt9R89IXFj7dz5zxTCs+p4QHLS+BUO4q1PIMFTOAzxBFzTlr2MBMEpWh3O1ntDe0xTcrczfdDfjf5PoX+9jgTqT5XpEBdw97U1BQcuich+VW7me0qCnRg8kpRKaeak17BzDACZ69rK41B3QDNLlaYfB8tXGmOmbFDcY3IY4/2jGLRidPb7q5Df2jQWe8IdO/JzJnIbnjUx8vd9KxNYdym/qUrnICUWrScfPFK+T0NwHI7sqbiJd5BasSFkxIpfyCUCjzOFy31I7ZcA3bPdgawnc0/4SwlkP5RQntyyf0c8AhN5XUzRsGeuVgbJjViaKkvYitl7WXN9S/keFZvUajBve1JjR0ncv0ELiMoSrOlf0RBHfkGnkS+lD4nnxnpTek8msGQFnvLiWNtK6ythi6E2hZJI/iD2nZ4omXm/Xl7WkSylXvaIbcVcvl7nQAqx2D8kKK//SLmOCnR8bDDDPuUEjxeEP9LAJ6W35r+xvQkFpb99j4j18uxbjhQcPsU36WqAB5BSUG3T3JXMFdVmURhLDKXoSfwfwMcZtcUQ8Hl9Fth0nfs70vr9sb2cfo3ZZtvHN4DtPJIb7HRPEu95FYwk3b2P1rXvxDWt385FBmgM1DOL6ftnZ5MO++Nvc71+cdGWyRweW1decT7RGZyIBbOsjDNBCkjpGeILhZjTlww0B1XprfvviBoBiXaHk+6Jetv3IQzL8LX9j9nolFvho3hY2M5NsW22gygS/A1+V+cHzZdiw0pn8vN2RFXqoh3bvQBqEtb2wuN9bFqI+xWMezm/Xsv+SYkeV2O+XLgXJKWYTifQ4QONsz8f6+pzswVO9CBE5+9QrVKzoWJnFg1jKe8xk5VX7JAFaQorbogZiBvBLASzmslbLxBFZNorbc7uVeZRAyUNc9Gd/QpEhgVUOOgjLZAa/C+2D5K+aY3G39M57Hug+stPzsyhb+mvnezXdDYdHeucxAc9c7Q+/lcefdeWAfTbBoLUwMJKPHi7btueOVpTTSjhQanPRAmOjcUmZwVhlFDzjIoeZnOZCXde7g7l8vtNIjs3aPWbdn2je35hjnSt8eI/8erdlIIDQdGf563oB+8sk9j/u6YrS2OhL8oYq2DEfrbJOQVArww97cT8/htz31ciRCWe16rrQ3lEFeOjgKNPjm29V/c0Ja/e2uVJC2L+7AC/TOH6Ub1vaR48Gk9kDY2y8z/Ws3FBTeVV7bHkyrRLjiMoc5M6L6UniNMgIUVFPaVULAxQEZrKFJUcIQOKDBIL2xBPtBAK+sw+fWVuSZ3ku+kWNi0wynaPIbw3mc9S+0vvah6dDg++F5G6Sz9dILXTVBwwsILQ27dI1HuDb/Hv7E5Nx+AsrvX9D+SDNMJhp56Dt5CQA2DxjNutbQ8UgD3MsG/VRGMTpnh+1iO4cVD9rwA0BzLcq0ydfwnxvM4IUG9EAgvym8tM4fAYm+07jNhCLOSoO4O9Vb5BPUkSsnhzM3SkIGwHkFnyvzSXcnpNNJ6Fs2xqRxwVQhauUxuG7ezIieJE9atD4jFgwwWsVix0RfZZhnuH6U2P5AlPYGFbp70CWM+/uHd3izPOCLuYozCQ6uAE5+bUzwwtAgo55X8fJY54UewW0Oh5tRg0vxaqusmC4K4FEw8UJ2LbZct+CFTPLffQaXP5F6mzfSlSveDOcDQawkss0/Kk2IIcZLWlVHFcWSFFhP84/z1D5M0hR3FLi0g++j7M37kMD6MxQQA72e0T3rJwHi0ZDxmRIeymaoKk5UxCxe5ysz1uJ5TjKuflPujehbKFbqd80ayX0eVb0igIBW0XxQ6A6KmOIB4Tfew6Iu3eRdCK6f0544/Jy+Hz3oFFOh71Nj1qiRk6pDHWXtjDY8cRg9fbC5jboEL6/4ubcw1t5OnIzu5JDHvntfr4QEu5OSS9LcKV682bjtKRj4kD+rIsrj6KKkR7TUvzehGmLDqP3pf3PbFqllshmNtCWWB5mrumc1xWNsg/di6+ddWuTvx3QhXbkfpRYcfT4Cw/btle8/w0xy5Gk+eR2buiycp7zzjicQEjHk2JEpyeuNpTJ1IjPIu6QsgwFekbK2a613hQMaeSkl8VQj678ccKW18lsG1PiOwmbtllOj21wsxrq2mNEoKEaGrTJ/7Rrm4nnncrAzTjSKmDGt8EbpSDFgXR3kzY3o4ISopiotI2e9JpgBTjLf6QwsZ0Vtw1e9lIRXgFcwr2B+ls9iso9RtlznmdtxKvwzsH6q5Kt42pUeUJPPPXG/3YGCoFwq5AH1Syc9MYmxvTZAu0MO75ohrIWHuRoa7G2+m9PPPanv1mVnLRswC06lsO5wgadvzafhYqVOBh82jf2+6kbwmHYhrpH63ctEEyEs8HJqDGWxPP+9oTCDktnJu1zqr3NHg7GnMp6e20S2EslFk0Db1tqvqZmnUm0GGoVlKazB9gtB81McFwLojX5/bttmJM3GtUGyFp/7g3xtEsdUG/DDXscf3fyXyCPmLBBYJCUCJfH09vevS4S/BYQFmRnnbPSS9PxcHXxOSfmQK58BXglnWosOx9b0amvJZAKu19eYzzmVe0ccjTR6o4kTV0paeVBFHluuDTY/+h/a3nIoWvsDwqrtSkl4rA2v8HC9dIrlrvTqoa3rjRLY7iW3A0UN+szWtzVL7xy3CDJwsoUWJqzXZACIEZ0B0AKczUnFrVfH30vfLS+4HMwEZ5CFdM86xpnB+SyHKzL08K9JaouOh/A+f1TA9gC90cTLrMF4VmST0E4pKJRDzUfHIJpifFqSsnwUpEa+UPk16Se5wixZM5/UE7Ey9JGhxMw0SAeXzrdN/8rBbV/HqM++jdvQcKbZOBceOM7f0rjqFMTLqfZhNb4+WAN7DQQGPCY8a5yx2rS1F67uUbSVbk48vXpFCPhoTSsAACAASURBVHuwCzOj4HsHo3Kp/8mjua6ldxkGy62vIhpJGW0Yeb8G0KP8qNzmt9CpsT10sH5Ct3fttyPdWFfNS+bN4+GRMuLafgESBtngq8Ds0AFjrC89Kjtzv56lioFsNZzkrXrinI+SzJi1+01hTZJD6D3Ee23a8pqgY3/zpv92cAvhfoMXAIU/Dyp0mxJETwYxuIShKqeFTE6q+wdl3wNCvNWURtC5EZEbHIRmUyxh3H99eIf3lPDFQnYxi3f4HYRqPireplQ29JZfNiBv5ffyKN/Tg7y713pMQfAx4OkH7yqegf+ZZCP8z8YHC/hLAn7PjvlPOHu0VZhwFg28YQw2vdr3YLQhLr8nG9B3kYa4HfCj/J4btQeCVaEHGA+NGn5FycQ6JDvpZ0Dhx56wOZoyvykZZbfh8fqDWAi7307x1SksXL4zZ9wR4bNO9oPcKliSfuQzzmwe51wF7LiJOrSpugYCU4i7wjj2o75eI/TOltWsf3t1jOZ1Q08z/R0b0JQ56HTniMvuOQ3WDvd1+ST+3EKDv6HBkRV39YS1NhMjPBzamMb1APUYt9c+f2sUZO6X+XICCIy/LPWU1SecATDO6xeXksM3+ff3ZoLd4r1wT/5b93KgaGl+k34E5RTZvarN5NT56TaVI3AIW5RXgT/FdgX0EF0Nd+07AjPyKNAyrZlRtiOHg7JNBh2RADE+pmIj8mSZrOKCr1SfpSSeP/qZUgLTAhCJIp4SmJIagsQCTrFV5bCJ0XgL95prnScGrfKGzSizAmhk71yt06aMV+MHBWtpx7bjOBbDFQ0VQMPsI7pwCGwG+ueypbDw1qxGBfEwL3hOciAMzGA1oINXDU0sUbH8oYbYl7qaxxIJT75f3sfIy5yHpT0s3qzNU7kuoG96gMkqmC2wb7al0nmogaQ7tt/LToMGNsbUDToz7NeBzs4mmrXu8jngo02bbJ4DTb5mwGdZikekFyQHeafDNCLkfTmbRXTy5zWCWScQ7acxepnuq8YrA8ATwHdovE1L9+gQ6ghImPjqeKBFednGyh4SDC/8UBhEOaAlh/0ItOjhtpSwUEI6JTWu69V3gNA3O6DgDiYyshrFlS8Y+0gJS6qBv+PBh9pO99UNlxjkuaZPQD1Yp9FQTKwsaxUV57PtYxn41MtHBAALgxbSthv9hoZEjw0M1Ps9CZ/7mF2/apQgWJ99x6zm0UHFBkKUn7AkGsrs8+dnfXOSz8GBxUrzNKpJuQNd+p+LZ74c/sqs96AXLzyetHmC0J5WibBQ27RLF/zPCQMpS97LCQoptd/LcDBwPtf22XujrXpIcdos449X864LaVQk4dMiIq+6sr5hsTs0ksKPkSF+IQl1X8YcVUacFzav0695YFDnDQQGhHdrrGY8ytFbcgkkil7qcNMO13TwnuRA+x/XKgNvcIOvDBw+R/BCsnqDG4zgZkC/wTZM9tkGnXrRlGJlt6Te4VkVV1GwZ9toWdhKVCG87CmpbOrmG3TdqhQBze1keFekvMENAhAWSsC7vwAf/3A6LVNMoEfGEWIuAPIjwA/9xuWokm7G/H+1jeErSgelSSTrtTuNGNodBXi/gZ6OjVMQvqPw3NXyZVBO05StjcXG+I7mjXQToadWeyedqNHZVBWO38WxCroaUw6V58UTd2cDNX3tJsW0ZYYv5qSfMlYNFZxA+MhnECU8raq0WFnTBgWjr3MmwHa/95RRg+aPlBCEjaH3LyfMq2waefj8UiDnEXRc6do3a7uSSbldPRvKsUK/Jg24sv9FaVeqv6IwPwAWSdBkiOTGd7TmJXarZH3Orh2ubD9Hse2a/jLZQBUSI70rCH+Uch2tGxcxf+DXa3w81FE6JCGVzcgZb5tkYTwolLFh2C5vPE/UB408OENFAGztGqBKn809mdLCPXyrFR2aZ2ZFq74//WxyxTGjP/E7iccb0iKfWEB6D6p/z6h/ZjzXeEvwxpAiFwNOgUxAJqRlBdMJwAqmJOF5i35aDceZxaiw6NrNSa9UsqLqeBWKykN0DA8mBHCky9eBjLaLsfNSfBgLrO/FgM6aLyOfz+CU3PIw73OLXOU80bN49tVw+dwWv+v5ws2zxibhknSD0Pe4ZCwegl0RHMrm5puV7D3f22pZvNOPyJBMclVXmF6pg0aNG/dsNo4TA5I1/ZCYG8WL4B3/KwMfPML1jTpU9ua7mC56Ic6KMAtj59V5GVfiUoYXyuJaHODCPPULwCGLybaACzUn89Nco3IYjozNJE3p5H37bFqcozVDw/q9Zv6iBgqXtmlOIHRe32EHHDrjtfLyREACUkpqQAfSQlgWAiUgE6uahJVXsB7WsoXKSpoyMhEWFevlDvET0pIk/Lu1zS4nt4N4g7XViZLGKJLQQKaMzATOct+6NCDwUwYo6dUinEvehsCAkZKPFqSh6jMAZI3WwoVnVc9VnbcipEkDpYsJcnqaal3Ru3jobRw7PEGaMtc1b0Exn4XO+uAEn6HIRiWX+2M5FJazRG+UQ2JyjzrL4MjcuBNU7XEzbXchTTP6R7UrVPnQNphcqfwryppl/bh3XY2BC5zu6hNmiOe5zQ1VJuen4zARO8DPL4WdLNtNix1wOLg3/s3h5wsgpVbWMYjoTTrus4h+sS2XPG+SXNOJrwdVlrgCqPm4oMaWflw8Jo42x71pISsFrXTuc27yl0NNq2tIU9QEL5vDaK8lTfxYOPHngR2COD3cadleNn/XreXQpqiTiHo7p3+Yg/GgGx7d4PXgZkC/QYWicIAYtCmSGyFgrd/FwEfHXucsCsOcgaTbNYIKYu09vkw+9IQTwiM0inDdkBGheOPc6OMNLoVhGPePeP/wDn9b3uCfpnQzb3RATuhmrncgmgPeCfpFXcztILfeQyr3mg/a8BeSMj6MhIFBht8z8AtJO8jle3+hwDOVPRhj4SsoFbxmxRRh1l/74ZVBgIRpN8WMV2BYjscN2XvPYy0f7D+FT/8qTlGnCNsreDTHToDzw8pttk15N87VbIpGD0b3Etn+KK/aaQ33F8MgEVrHzoMo2tZ3AWH2TfX0vkcV1I6M5sjPw0S5cLRZw/Xhqn3BPmGYN5ab4ibVpRn1f1qfG0w/r7PszZXSg3pK+6i+jgvI8NreN3ezOoVa45Wumba6RdMfg4SuTZMulB/u/V8WUbL/vn4sco4cKtIyTRepJO2PrsNdDZOmxrGV778NnnVF2HgRYDKWPJJGScmeZlMY6rBBjd9DVbU3jPYuTe4TRtweLcOD6DuDY1l17igsJarLoi+HurZ1M8Di4d0GcCVAQ8SCoIbyBKST/JGE48VyKh7pMidiXBevcQsN72utYWE6VDaFsnpnkV5wSzkj5cpvOScxMFOWe3JV+V7k8xAVyuoqd8WFUZA+1+fl+hb26WcwQI6roeKgeaEDkKuk8CxGhtJ0uwte//QaKTCD1ChB6okefcynS3fWg2mXLIS64gr8XeeecnAblevAuJYkUaaIWX2509Ii/ZkJHBfM3dH1PiuyYS91pKbXDc0OjV1S517aTVS+lMCNxnkwcYcaNuYfLW3bwoBY1wX9mHW7eb4p3I3zzpoxzO7GLxPwzGY1FkbgDdbMNWr1rIyZ7A6gGOSbcY3lPLVdZpJ22d4ym1xm8qVQoJwzEhFWlk+y0PxMkGDrq9LeSteIWLdk1dhNBNwvC07phMQMYkJe7pDTgmc847xmVKpXDzb4q5Kl2aSRqJRDVRZT0pfbnXygn3DAIBHLVvojI+cMnGyMK+cjCNs8aUh6BmE9Z+Q1Iz8zJEx7AqEegLapYiYh78wApyoLPWjfPuEFQINf1OPGiE5EmsTnNoEbL38gDLwWnp3zc/nOhru5dLx1VvHVGd51jdrqYl0DROS2cxsLsURACAJUPDBjhtl1nRfZCGgTeh7b5I3qW6Rl9P6FMuk+bHPdNt2FxY7qaISCUT4vLGielOq1CaUM0r1eEO438aFJ4OobvN+ivaPiY/qRzPNieAEyxKwcPnfzj5xYduoLXxu6bPK5/+3lfXa5mSRC5iFSwZs/b/CNYbQujqT93vN2iZ6QXfpIj25wg28ANwP6DRQcp2fIxi1udFUw4XCKuKHNngBmqPFclXasVsYirLX181BYCkI4eQHAVV4MnH23Bs4NN/ip4PKJ//3Lf+KXh/9PVAjkmDQnMVqzKisMp+EZeaiT9DeF5+/Z3YM+ayuHP7du/sUSyt3SvQ87h6MbiWGaA5n9wiK7qx1hrbr0DwRTyrSrn8Gfu4ehrp223BPwZVKG9761IfRKrCYdlXM+h2F0MnK66aDgdQ/gUw5Jx3SsKNWOyIozBUOhkRTKYfdv12h0j7eE7u73YHO1oXeR71HpQi5NUMqUOh3/Gr2zei06QdlhXscYGs/zF8BVtfsDKtKa9v3s5LDSoIsPBs+MEFFZOAVq15yvPxG6Ax5AVbR5GWQNeSjVSA0AcNbF3XkPNVoEmGHZfu7BBwZ+JX+pDDdy0IfOAz+0238lQn8/hk9jBErxPM8WjC+vrgkqv1E+mahcFSnLnuBaWpSifcByiq2rlKJ4OvpPl2hIg0J5QTjrs1D/a6pk2wcq/7Qkwz/vwGmipFtGP+qd58XTH4qTajUgcr/pBNBJjOeJAFqAlEC0yB3jaohnzStD5S/q1T/mpu1+DGTqFzHEpCxV5wTCCmJGTnr/d07gNYN1QUnE7OwO1DiftQGx8CS5NkR95ZVW8J6SXnGkeotbdfbb49NolQZ8c8J+NThADA1w1900d/aaDKfjygzKGsZd74Q0dtH0xrHi2ndrRmhrOSzIbds6pfKof3sy2LgYG446NYM7z10Tiqc8+ReRp7i6OjHTyX+MPmFph60YanG4yGZVPvF40BRpddqdnTbnsVNu3Qpx26MTO8xsNhW+cf5kkn/uleAMRLpXh8uNW5OuXQuebg/bM/Ky74mGq9vx59jPPb6+4dE+TF/auJt4B9x8NV73g3b4iFQrJPKG9dlemSE7tqk8Su1DX13pSyFqkzab1/tTWzb7e5x9XqFPYscipEzIREhE+myVtURnpWYMizJCtGBJUN2LsJyFEt7eL3h7d4+kxtYz3eOMBM6MTM9CM12fItVg181uqYHFqOuuF2nobeKambh40eNpBa/a7iKfCj8hEJa7JN72Os9EkKulwKXPrAfAGhLmJoi18fKpc/kA0GdN8tbN++MO3XXltr8cHYTMhwuOP4BAJxkgp8dqojv5Ax7MyKvyLouWYleQ+H2iw0WjvNvtGPEcL1fGyAP1W9NHIheW3dEWk31Hw7Es6HSATRMNbwJN7PhSWD+hnbWsjd+z+eLRqx1cCWXPDx8cw7mK31vpI6PeobN+/+J5mB5akSUW5+2AfNLws3FaO+gxlu1/AHhRmyZ9Ll926EInF1xYXWRFpIdyvW6OlW7MyhvV3YhKJlsEnsivMZ0763Rv2b5EvPgzwhSdLpiJkVx2OP/kDu4j+Tl82ZLXPV7uedEfgQ22c4MbzOBmQL/BGPwGaSTnGZE1JfZImQWI0KX3NCHLBoiXBPCCEkRMvdtks0BolelVGSn/pybMF9vJbdsIT8LKHBD1bvBvCdcLngBjIQK9+wv48XfgDNmc2gY1Qe6JKj9QlQVJvxfHIjW0P/kKHVb+PmknKa7/osk/cP8eUA/6HeGydqzdMNmn7m0BiLf8sCC3uQKjWpt58Jxq+ndVyCZXIX92ZXd7PcKmcfNeE37RvwgH96devWAKtM27eWcCphfCXF337076mHHOA+NlHOpIrPxeeNSHrqmD+YqQeRANwQmuZry0sF53muTLYL5mVQNx93ZsOXpjuW9+xFVfX2cBGAnVxls45MMcz/bae1A/UdJeuqGL7ery70n+E5pgSjqn4xoWY79L2FW04+8V0ED1gBndS9hqtKdNbOoB+nvcZ3CODduHS2SCDx6lvIzjC2twVpV90zkbAQFTxB/9tu/Gf/TOa/1e9Y0ETkJ9awCAumYsTWm2K7/vqpsc9jSaa5mbAtd10hg1Y5NLSbPx7A28F4DNtR+LZq07A2CRO5Vu6h+lVOkoLeJpvpzkE1SN50m+l7vKi9Fc/1iN6XZVgVsXTKyfAMj8mS2Mr3SAEgOLXNKRMoMzIWOFeOSpXBL7Fg+DBXHBfnXnmFi7wNzM8ny29zRgZaQDHjqDcMc/ZU/ANkGZUSwPJp80OKsylikSmSX8rUfz0MeSZ0/BV1o76t18HdQ3LieP3/IgV20Pmn5Y9xslfog40DX6atiS7dzzEaK8lO+Gfs/IV/9glGGnDZavk9kOCTujwrBNI7d4w1768LsTmUb86pJyR/04+vs6vjAvO74O/bazz/bb0kSDwLDYGHaeXbpBps1ueZpv6R3N0nbkLL7hBEJmQuKEtKxCHxOwgpFZPbmZASwAnUDMoAy8u3+DX96+w//47a/4H7/9hoUJyMB/fnrE758eseRnpAysnMU4zQlM8rseVnF9j0YXGzOC0uYsxmAXVp6puvizFsWAHACgPHF2IKSUsJwYSeXKzABlgJ6hHuaSqRzMeSDwRyPrdt85Ko7zUsf2WpxjUv5psokN0AiPO+IwKC/gkGdTWT1RjefkXCMAlC44Jt3Q9HrQj4ozANAeFpE2U3k5amMkFg5fvayVnOzSHHwGLNLZoTEvezrLb/mo6RuK3nDEj73MaM9mjGEGF+DHzFB0qIi9cbmGPtr46xhdkKWE1bJ1bgciGKoXGNG5PZ41f8/aThomm7S9K/Yl/OMrwmw5DSEIRBcZH8NjtuO+bh15Pphj+WFtEIbTPKyYUddgI6teCxO5dDYcP+jU/7DwVcZrE1lep/jmt98wTGTor9icG/zccDOg36CFcsrTNo+TDe/eZrswUhXAMsk9WHRCSgl5YdnEJJb3ugHgxsAhp4/ZDDrMGsWSTUvnBAL37AY3MDjKPKn/+/j4Ee8e3uFvpzf4h8kF9AbIX8Tr0c6AxDLKb6o7YHoE6G3dxPiQx5vtcvgcy/f9u1ZIiPv+Rgk0SsjtM78J75SScN7WZQsvvz6v6JRGpVhuPyMUw/nWWg/jBvSbeffd77+6DcdAVxarMEHu4d2bMseZ1buveABoOD5f1me7jNwVHkN2DcNKXgmNDoTVUxFhb+7jeocNkv0+srExHjF772Fvjo7geVF8asLRPMVFV3jcRuOKEofC43ZsaGg0fiF0uOofeBy/su7ZJvklXRnJDOQ+m801OzyxFzEERFTCYToM+21xeWI5p5a2EYB/PD2Ny4l0uaEF1M/VdEzCM9+ocrhjNhlxUcT8mlc/RadKRSwT/eai1ZAqrwiR7pL1KQKjyom23owfHDKi+59GiMcZegX1JYyPmpSdbmdYBI1feTx2z+SxGc+pfKfifU5gOoHSCQQxrlNKYjx3+WQotX+mwPQNnXp1Vx6TwXWE9B+yey5VK09giOVBjfOJgNU64okC6nduUZu0435cCY4ukkOPGXh9XSCzxQNZFXPd/JVMYZbY+LfiZF7hQ6TL4ATFi3lBOYUMaYdjtIb+h7SDR+/IdWwAjawxSVbCzXty6RL39oiYwn64hAMPvNJUqkljEAAfYeByYI8k8kFw7q6+3AFilGQubbMe/LVgbs46FLF2DAjAnpw1lHvihIeE/TLdL9PKmkQzqFXvNXhvoiITPJJnlq4d6GY9MAaHUnWOPJkpc36wCSVLHKdBOt88L1MbHtlZ/UIC3Hoh165R9KOGJVTDannftM1ou68n8u4M8ZJeHRLLfHPZMki0EtJDVHK2O8uVHJzBOIEhsSFSBh7ePOBvb97if//lr/h///533GEBmJH+87/AnLHgjMQrnldgRUZeCCtJZO3VsXkzwrKuozqvXP+IyxlqMi/WBNihLdYDAqQHzYky0pJBpDofpfmFHi0sN53o/Su0MGgJ9KJEhJEx5bc6th/1s8gpBP5k/CtrZDTUvdhFEGmI/3R8sLTL0/IwbnZPvZXCKo/pWEA97oWncfU8H9GXCbPyx9qoazPQGlpD2W6eycklhU/D5BUvAxk+Oz53CCY0qKwF4++xwyNeOqCjbYHuZ/w9aouroxHHJrx1UtX14Ps6kwcP1rnFPwjBwFrnshjT89qWc4mn658Jru1XZBXNWI5kHHu+LRMeApXTuiKiwZzjHHcCU6ADk7pGaa8GrnTvYPIbHICZB//V4xfL26K1V5TnoHCfHqGbJdNm6DZHobT9em9wgxncDOg3cGCMk90GzzPTXuBWNVN4ai+NOa/gTABnpESgRU7/Mhh8Fs/0RgBz+zDTpYscqxq54jlJ9dnR05U3uMEIBveg//eX/8L7h/eVD58ArOrqbPvHckcwu+dvAP7SLpcVAD9CYsZpWYRBCPcAz66eaMj18FHrv/QOdIORABKhLERdmJ3q3MF720xX6kCgYDgPFZbT8W6jZnDvfmx5m8/kpUETy4uolLzDXAgMOpa/PzzgE1flPDuFRjWcCzyrNzdbeMCq7Zl8R0g3gNl0+/K8YtJ2VH6cGM5mHjZX3vPcpj3qmWbjvZfmKHR7O/eA0G/wYc8Gu8cRHmwZBDoDTaxrQ1lyyVL0isDN9/HhQcXQDGzdmyRo9az23ejaYE36aqwpKfXvIhg+MsLam9ThNZCNR3cCOElkEBpl3JqAvXsa9EoZPy+zKW/C9lJNQ9pej4elH0u71vTrb86TvHyOprn8NkbErj5XN9X7zrsyi8ezg1EI21Gdtg4bJbCjLaa0jG0vY9S/25oOU75St7DGTJGaQ0DbNfRPafyc4BTH5D4cbaUE0AKiBMKi4dklYUoLmE6wu9ELU9f3Vqu/KKCOs++v0WIj3C1yWMBYIiDpIMs16EnuPgfk3nYiMeAz1XL9mo8joLjBFq6e2mTE5hNua6DeND6GEVJriFiHl9yOSH3qeZw1ZBDeJZmbIwAmdzes9bXINPrH/hm62rlJ33ehEZNUvBiPQWTEbi2j9eB3g1z3PlpZU5+DJn/D1mNrxnykIw3Wj+leqy/H7JHNU99d7wV8BIb8OzShe+fGuTFcHqx7i5WWuQhpd8SDHmYZLuFpR+rYp4dTmPblaDk2B5dXPWyL53fNiwvKsM+4FOHKP6AQJlCTnZAcnXCfpd33LjPJJd84u8g9ujhOpGyCVM6p5Yh6hZEzg8/PQntLGG/hC8wSniQx4S0l/OX+Lf7XL7/h//zt77hLCxID55yBxPj4ZsGnL/d4Xs9iQE+ElRjP64ozZ+TmkBAjryvMI17qcjRU71+nJFfH4A1BrgXM4C9nZM5i7Ifc3p7fLOCshlntes4Z65rBbzPwpPfAK7+XLnpaKH8MAnFSj3NPeAOzsrmJB9SugkvXUaXxZT1472n2pZaJrmn9vdRdueVHbVv56p7NmEZ5MaJHNPzaPhiMxRa7KN+DHFciwDQnWmombseq8VTvRIAdgnMByejyjOjGiwrfw6UwHz6igPG3abk0nta95tgcbEUCK2gTBqOrZ68B5D4uGLtSLLW/Z2VcM+fXQOaxn8gUJwuDsAL0MwpjvpwdKGvDXxNyMP/u+wvSXgzfapJ+QuDJ91cp+KXC3aDI7lngif+uB3du8EPDzYB+gwBBSO1O6VMnMJYcRa5X4kbuO2cgr6CTeMOkJSFzAqckSnd/0pF9YSJMFCVlULhTouq1PgG77uVGYn9WODjzg70kgXGihNO7v+L85RFYHwFWL3RNY1cQ1A3NF3SMfYEoQMpzzfse1fg9a9OmPMJuvYzgYk3epBi/qye3vvW3GV7uqF7z54Waz+YXF+/KdGW7/X354sO0j2BoP+H5z+GehUVR5fctk+H6+9uHvmyOD6r3+ZfP57bimTDos0cP9N1NeoCJh8y0TFNibx3QgCsj6mno/7L3dm1y3Ta66AuuasmSY2cys59n73OT///DzsWeM8kkmdiSursWcS7wQRAkV1V1t2Q7LtqtWh9cJEiCAAgQIMY25LquTcZzBlyYZh4VKVZG/I1KpO55qGOpTOqrm1TW+vs1a4e8bh7AWCy2Z1aOl6SoN4tKqaPiOpwsIx4MRwToN5EGzPAyZu610gvFHY19f6kfOtqlE2BPCE6hHLK+Dn1i52hu4bOd2jeuOJlMrGlo/tjAUI7LYVF5mCbIYNil8BfwxJ758fKX8UdaLf9KrSZQhfFxHogwFm1cmj6Lk00iEdyDcaPUL/HfaW66kIvWX3cfLfEqXofQ7SSh2als4vkdPLKINoDsiBBSD3Xr3wk0UdHGpefDriwNRnTqPzXSvgHNaM5yXQktulPZgVpETp9t2vC+IId3JEuKZ8q/2l6yG5V0hM6zlpQ29yR8mPAY1i56T6jw0L7MAJknX0/H2whk/ruAP/MMZhT0Z8TG/cCtMewQQyGceecdSXTc3UFK8Bd6MeXDq3dxlseeneDkJKyA96/VQ9Anra09LlBDTkbrF+c9A2UKsCqODsryGb+ONElpYTdJhg/6/NN3C8iyjJHLWMkgQ10ZrgvlDmn2LtOXBb2Z1nldNs8eWVPmBVjfdxtirq3zSG7KaR4fPMAQXjEm40w9Kx9kr7GYdjORdyJNtWgjbuCgVh+RyFKuyJD+YQYqk3ic+znY4ZziXbzXqRKoAu8Y+Hg64Y/v3+NPH77Hu7JhA/D3P3yPx/qEDw8Fnx9PeOaKMyoqEXYwnusZz/uuIeLFoFP3it3qBQAWr3JWL2kqLKeWUMG2FT1fnFF5Ry1n1LpjrzueueKJGfxQXcwhItSdse8VwBnnz8L69r2C1ct816OwmENf6R+DgE8hbHvEtekgzBj9NYmbDBQ4R087Z3IeGk5ED+qMNP5K8pEMuG6KACbMJVWUy4yVU58vPLOzzgeC7ihsbeWQ32gxDX9G9+18+G5japZtc8pRxez8dJ9TNNLSa9LgiTn5cFaW0wVuf7zIv5AbbsWyJUCTTRfTPom1ztbLQ5mLFNdzrtfahM6EKkJYmXW5Vxi8OMgkr0nzM5lvLeV1UCwjxUw9gieC20vGrceMfgAAIABJREFUqxUoKfKrSApWZUzIVy7SYVjNgdekW8oaIpi9Fmt+oyn3wwr3Xz1OM7y9sdwMKyHQ1rHwyCp7OS3z2IkUNqwR3hJR7+n3mu4G9HuapCBg+6VerIhcpIH+zFd5AFXwXprii1R5SBtAu/ylsqwI8pLRlCAW9i8uoEnfR+Vb+F3JA/d0T6v08+dP+PjhI/6tvMNfzn/Tp6r8M69wXyuwRgo1HAzMmgBs3JSGO65DRjt4909qoPo3/f5vWn7coA00j3b3pn8lxq/k0EgTAPVU1rqe9NrOQjtHaSe4HK28HRkAikSmmHqb0xquVkBPG3J6l5Uq4dN0tt9/vP9Oqp1QkE/YO8Ly+fNzn2W6QAq/7kWBrjuX+a9N16wfrD77taGZ6ZROenE+Wsxd+ewIFiAoVcL3R1FG8qJ+eL/AsxmMlF64t2zsqFRWt9FsVs5R4mPGtCznlkG4Ij3nxQb1cEVv4jg25jE1LFD02ulTykeUNtcrXln+WF5XZFYSvnShbHLIJGxnhDHeZ1hm+Y02FaDTtmewU0E/TjXrdt0b4Emsoa48LlvzLGClu9wp5ANcAFDM+EldLYMXkCVf4JLr7x1v7eu4LrW5qsbe8SQOUjGN5/056QeaPj+YOMPGz2XRVyci/8fL8HPZvY/t/HM985w2kPZbDf0r2Ec9rjs95vGeCMQaxQWQs8+Z05jVMD+bQZj8bWMmUoYa5A3uTcMGM9IcVGCMX5sRnZqRk0zW5yrnudfajltabnDNz7XiCcsM5tnJFaXcXecBCObd0CFrSkldKdPE6S2PcC+/m9LKruDwNmxaCS/I4ExrnQxCZ+s2Hg8C8cRk7wrrKJ+Nibivt2+GQnGB5bY6F4Bf+128n/2GPD70+u20ypew1bEjg6ySO+GF/Pna5P2y4pNHAxOeL2Wia1MqazD4T+p6KSu3MgoCPUz9PMgNk3Fg9JPlcK5O5L2h2CxgW74kVzB0zXGCb8rDF3lhG/JORnczfcveoUWN7YRCBcVoHwP7846nxyf8/NPP+Mff/wE9TAT7+YwPDw9gfo9tI5y5irG8mAF9FwM672rEFu/z814VbjkjvaoBHcwCxqYwbNaXjMob6sOGvVbU/QzsYkhnPWGEPgDlC3CmCkZFqQBVkj1Zu3jEg4H9TKhPBXKWeQjPpp7nF+1KUcn+5aVz0mgdOfnv0ZyRkKrxDUcLavw+4ouVJ3H5hV7rtVVG1mkKC3driaPJlOXYIClwgtfgc8I564PZbZbRDOcVjz1iH6VOC88zDEN1mZnH9qfqvXhGhxxfmRx//TTh1UvG1suu08zL/jA5N4yP5d024BwUWsZ/fNhnsK2EsEGCSctrPoZzoMML/vu12fJVnuGrbyJvXAkqliITOapj5n2ONh+6z69gxLPqfvNz6V88/dbGZ4pjhquMjpa/hQx5T/d0Y7ob0O9pkXphvvNKiQr0oCsh6r7SPErkKgNlR+WKYioxaos9P+M8lNvWitRsICT3nSDXCe2a0YF4/Q7Ge/qdpEkY9789/gXff/izLE43yAr/GQC/B5DCtDekzw/m6SaBptPmHDx7o8T5Is6tBPiDZQttJohRbljMEJqBegJ77M+Vl+bqbPRBaZauH6i1xGnLWNZ/vHvff3wwTp8+P03yLcbEBT+9n51tfgtOZEXBpbwTPYV/W7m9T2vtPv9ioc75wXh7MUUYOwU9tfKzd3o3jrPF5DXzwwTxcfHesqzK71b3r0t5jAgY4O8M+fl5hu1SZZPyHQ6eVrOGExiV1Jp5aswkCUHdKdKs7KQ8y5/PyhuM3SlNny/oi52H6vQmvi/txp5XA4Ga/hsBVXPdeQxXSkGvZ0YngwewbVTqvM313toRPdCBtvHBm3kNDq+QAa07XAgk12d2BLdDi4IWmv3aROHfS1Aelzp/G8qn6dOEh9bXoqAiIj/fHGUDoTRvcw3rS1FpHMmOzjkiC08e5iAXKcsgYUYlVl66MBqBu+nD+i8D6nluOFIa2tU0uSNsOpcJ1KGTO1VzlSZUiTbTtaEe4M7FZ+l9VCpSeD7QZ+1PzjjWaI7DGEAFbIPHBJrO2BHuTdRh6+EInwc57tp3jPt5DCKzQ3o3u2/5B4dxbjjUshv9pX4dliqYQqH5/B2zkjjumtF/m+WINLcSC4+Ph/qzOJm7X2nhT/auw5lJfTmt3l3z/JJHFKd8i2G+WGd8d7jJLN1nQnd1mn2TnkV4Ohzs83WiS2MYL4Pp0sapDoaEn5NNkCL2tV3Kzfs2fmfVcgM9Z+gyh2eWvwKgGt5ZZ2jhe4FEmQhn2hF0c1aYx0WfFeEWBbJZBlTxVHf89OkL/vL3f6Bgw8biE/z4nvFEFfvTGbzvzid8XldGYUbdVV6rO3iv4nlaq8DN1WVoZqU5TGoYj/yFJNLJDnAt4L1it03fTMBOqA9KhgrAVMCFwZ+oBeZida7fxYBObOehSRm9t+eK76zw9wa8Y60PAHEblGFrUhK9VvMAvg6xW73nCjbPc0UuM6x31QQ8Yzc6xzoiYQxRHWN9xgPQGLuV24foB2gaWcm+jdO/pzcCVqJJw3Ak/kfxOaGLi52Z9XTID4j1IU2dvVzQucX9S6jrGp5UgW+cMXpmY5SRTZ/nTei3Ahe9Rh3lSb3T9YHpd1yejPBfnl/X2J6/afpq8ExwbyJzvUmKfN74y1zAbfmOHBIiXnHOey0PviJdjQxvWOe/YlpFnpjKjIcFHd52dV1KWScxc5zJ5c3mx9XT5aVy5T3d0zzdDej3hHGRDTgjDfxUlmox7wExirTKPFMY4Cqhv4iD9chXoKNgSsacnbgmYdv5Js2bcU/3dEtaLMIeaMO7D/+Op+dH4PlnAB8aM9+gngJoZwebzmWD4OZZFy8b2sKCSIzPfyL1KD9IFToZorKcwvm/q3RhQhwtOmcvssLtYZLHzurr5BVbUduKLyn9uwWyfp81D1MYL/SbhoC/RBY+Pshh3x+WZ+pKCX/58nld7Uw+43RxsI5/VQr6tqVuaIAv0HigLYptjBltAWwe6HF9zphHUrjYlpUCa/JthJkCjDGvKYpmITeXsMVCTFmU6o+RToq9PIA9FBe9dhcATD66JkUl2HBxfYpnVx99bnzVIiWQKq6K1tstwCZtpWBwHsaDgFI9a3cxUWZfnS51ZwkI1Z2JazKE4UJpIVTNaGftdk2ggUsumpjzt3tiMzqDNUIRw0NfQK6FGSpaR1VP2VK8DtFxajkGOyGMT2rjFQvnfBpzU7LavAsLX6PbqlhjcNrv1JdFEIU3q3Q5a/LN2D1FHVq+n+acjU0cH1dAm2eHRVTS37KBQCgewl2LVHmW8lnManiQ7gz94H0thnJi8j0KpQA19meky94IM2ZalgaIhJcHOHquF3bWbaHTAUYtGiKcrI/c917yVJb54qH8ixhXiv7OeKPT03h/lKKyrslClCa846vBrx3bhTg3UhSsy+wts+sFPLfwu4ukvdUqVzn0aey6zAxHAHqHxoZjxJz2iE0HpJ/bcaPyL5AWEF4lK/V9psbz8DF3Z69P+nImS1yq+0i26+o6KmSFLFeOQ6Tz07JX7bpBBjFasXx5COB1ddxC9Y9k3xU4HZFfw0xEAY/i8+NuGEq0TUrOf6kvMkYnSzy0bVqiAA9AVFCImqxBLb9FmWFI5BEuGz7VM/766Sc8/wX4759+QpGjz7G/A3ZinOuOvTJ2YrFzk4C0sz6vu3iO6x/vFVwYtAlh4b06ubVNYlSK8EAij1xRq4R532vF8+eKZ/KG6x4CCeHOlcVGvxPwHAaXIUb4ChA/wI2pDJ/YRvrDvq+k12f0OHBlyuyK42XeXtHLhxS8QNj4MtTcTtrhTnu5RXWpAMy7vzJQq3qja9n2fZcIvvEjRsOYyjX5Ox7fx7WQdWwXWWbRj1N5bpMIOgMtpK4ZY6SjViBR4OmWuYvmZgNjso0+u5adXcz3Sjr9ksSEGB1vgIAhkaemaUWoaJFt0g7uMmh+zbcVYLe+jruILbKoTsCL9PlSBuqzrYx1y+FZlH/ECi6x7K64lPFG8nIxLctLDYi70pyPoH/WCYSJ/1/b5q+52yEvD1bprfv4Xy1ldvTLifSvS+z/YB454Z7u6dumuwH9niYpCrczAYsGYsb63IT5fj2uhM7DT1Xl3WnRZ5q+ThbgnljaOsrLt28DJb1F4Lmne5qlsC78+fMnfP/hI/5YHvBfT//d8nR4eEEBZeVVtDNzbZL8agXAvJBOQvq7RAdA7Zz3aTFxAodic6L4S4t8BxOc0Hmb+2O9qRX4+KBeC2EB4MbzNJR//fJlDeMMjGsWFc2ZIH07ybtaU+a15FF9mSbGHeSzlN/H80qngjhPnh0BcxXUAb9okTUK0dSPXVzw57bHB8vFeOjgWVtnO2cH8NK7GZm4Zszzx2lTSVOXqgrvloXtRF+21A5Hw58r06jPO3iBUXsc1/VxfDqP96wE0HwzePKzG/l+VEi7LBLvFacG77T4Pvw4mFoWBSVf7yE0UwwaPnkBeP/wHgDwXOUsCzlnVLyZqehY6GYs6c+CzuvcQ+xTA47CMBJgMXrmaGnmyDwWDPdWTa/Cx+Fxe2EyIiAKdSLzGrtFcJvPt6/BSmfoTN1962PSPhbPcz0XHe3Mc4YYLWhFfxnatzqv7B6l31OmmyeoxODmk/EIxcazR51elMbzuFYxyGDg0mBUOYJdjTieR9vCZB5yVtuO8fiLVVrJCyF1RTQG5B75nk/6wHBX/mcnK6z43vVZMgZ076LC5ghuTn6HkUfn6AuL5BS88/gbIJl807+Nd9H7nKDNrO2J+0vONnxNcCk6IbaxHaFite74PsqEd9ewJ8Ox6MTdec1nmEM+mTYNNgq8ZkCja2nODSg8PJ/27411dPkWbZeHE1oeZvTAM3PuK6joVD64UeYYqrmCkRyVMQtsNUfPeSKde/20Hnh/Np7rAR0B2gRzobART35J62Ld6EZg4BnO0y0QCBc1QlMBNvEpZ9WFUCE1ogNbqRrNr4BJ7cs6R43Xf6mM/fELPj0/4d0/TxAjLcT4RUJvKmQvOJNcyzJFwrPv6gVduYpdslZgA2jTxUw1WqI8D6SRWIQX+lnZVcqtrBuzitFfksj1n+A0pjLAVTYIOtdho98FspiebHrOXpII1x1zewHuzxLbyOeIh4kuB5xxlVVB4/fGMm1dwyy8143n6vVfSTemiVNLv0nO2u6FTaYRLW7Xc5BKvK9NCOpYZBOSukg7oUjBEeXb4fUoY/cT3OTbEo5dIjIORuoFHXhLVELWDsg4eW8iW/O8PH23JjMvxLELgE5J6lVfYi7fXDM14ndb0dAQ4Xk+UoPD9c1A/lJpgsdXpzdoFPk/15OnYcdQ5vkYZIYBg2bTMcp+Qxlvna6Xy16pBvjXT5x+36q8r5lWnudvbTg3WexXF/rinn7t6W5Av6cbk64+fDXAs7eJt+qV7p7FHjixKz1oKsw2vWoimgO/D3Dd0z29NB2Ecd+Zge0D8FCAxwrs3wH0pV+QR0GFKSh1dMFZWYzMZvwwxYp9+CctyDzSf9D7f+j9jzXgOAOb4bx9rwuWEFn8qnSkAGxr4pbepUznxcSLhKBbm88e6gcEdNY2Su9XybzNQ5YoWJ8IOJWT9FkqNpb61y9fblswXSt3MaRuhtLA9O7qxdHielZOvuaDvPYs5rH1rysg7P6g3GnKwnBKF9t+IDTzKh9dNzZmFTjsy4PF6BqYg2cXgUp1hf4fqr+ifB8jU6gFfjsbv00/KuE+5usWNGiTblCYLcZAdRLsHquhXbGerv/flrlTJSAasvMQq/Jnajy3TPFVSe8AmNWTosLOLyY0YFZHl598wUfufSZ5aqiD3XhOPT01snqNckxhcqeoZbYetoubc47SxWG2MOaXCjcav4Z4nn/2sn/Q8IHGHCRGDhlz3clApHADUBV7i7TJAUrxzGv8i/Wscy2/cttb4ccfcIt203mOsXhpcQsc3qO34hHUE12jFjhqcPxlsYn4MYot/KvFpEIlsZmX6mV1dGaII/7tEoP9KPZ+GUH9gEcaGXnIlHclfhjSCjuPsdbezCPgjKXk/gylB9LuG5VzVq8ynA/fHik+0QSvjttiQ57p90vJwfjtlTyA029HdzPJD1FQ3JAV6unGfFL/VXLJa9NMOHlFGj6n4d83rW+oa1XelTLbqrxI6EYyveB9WWZpZfQblFrWLNYI2eA8k1KhcM9wKgXYyD3IqQB4R6BnzcYfpSn0BJSCUjbFy03Cd6NtotsKcNI5yiTnhNfKqKioYJRtQykFT8x44h1fzk8oe1X+JOekFw2zzlADOjPkFHKANfoUb9ZGBp6M/rB4nkLP6KYiQh2r17mxQDXuk55X3uSWHahnGGNjZjtW3Z+RnWvu3WoGYzsDHYHY2VGANoi2U1llveiZDOnPLg2DenCfqIiQSt3YRjz5IETZMdZTC9wYTei/oci7NUS+9Uu3uUk3VUZjcq57JcO6UVy+oXDdt3OUIPrXk0lrm/Os7wMo46aUiUSWjBpNhC0g3dEt3dDDOzsZDVjAmJryYjI38OKjdCUPGwt+fbqajdBkuAkJ5TE8sIhDQ9nKUwvDveidnU6AGMpfABw3sV+TLsE/vP+VpBXKLNsT7k0Wj17pUFq46rdlfwbZ86CPXiPv3dMvk36tqB8Yf1jA5fXPQbqF3N7TPd2Q7gb032RaqS7equysATFuqSF6UBLDtgUE6xMKC8ygdGDIDkV61pBmyty3TXfTbgDLDkZi0vUOt5Jl5dmEOVS9Z4D2Vp4p7LRO+/Y6GetXxz40/Vrhujb9tuGvdcf7suHdd9/h6fwE4DOA79AWDqQLh7Sw9AubJ5/Rwr+jCQPfE/BzEuKBURK16WT5v7ZwkBdOD5P356MFEEYYB4WsKZfyxxPF5iy54bwv17KfhiEZ4f30+IRP3eOUJy9QjpQrgeS5wTy+e57019E4ZnKc6hsU1tHjbTbtGCMx5A4h+7yrlD85WnMNzwxG6qsHLuP0AH/EjdBBriyLSqkjbUlWpM60rZPPtc+d38Xxt3wzJW1ONl6DDSW0L+NB4r19+Qx3eYls3ccrFGaeAmUPE2fyPp5p50o8VUJanjhXAulr3WAwVTTDWqJ95pUDNJ7u7SEN/R4W8wA6TzoPaRr+dr3QUJRMRRSdUbEQ6V3yRncZxLLEsZjln20msJbqQvDHiLdEIgJVqPGT8FTlyIhSNojhlQGSM7a9m91IqXWopzCDggd6ae3TfP2UoxG1rB3MoYsMkQYED7+zlOSxvoKgBKVQx23s7aq8N/JLiorEyMYRlcMhv9ImAmsIc/J5IuppUZi74pfgIfjJ8HlCokj9AUVBz5qtelQnjvgO7nCTYdOm9XyLwG9KfYIYPcI4sTWXQlQDKdT33xiZLRYinLRLSJ6BgMq2h6CN/xFfmfCtnl2NuOaefRM+IlONQ76Ar5k3H3qac3rEw+N43Vix9W/3sIMRup6xIw26wgZ2Tt27FZs3Gw6HxU8mt42o5YLaNx0Y4btDr434zaSre2JD43MMwexDlIqulaNIFNhCpzMGJ1mJuvxTpOsKTbAekbrpgGiZIxFs8HDamdj1T24/pXLWNJMQ2ONQd2ubrbfJo2kEftVVs8K6VGtmJpMUxZBh0Ff1eFuoNY7qmJUW1+mZRQ6ZzoWEnh61Ro9zEbKnm5AYaOGudbyM9hUCsXhi06mANsNeQhFnYtCDfFWtU2pphshS1CAt9JcDuB7VLK6h1NhteXdm8L7j+fkMnM8iE1DBxkUN6NJQ4TR2pAirkRe+8RiAeMsTwey6Bl+wmMNd4fVoE5QN9Ego2HwDIOvRILYxi60P/U/KM97i05RkA4F0VuQHE5o8DHj/siO3HS1fyTi5AuG/ZH0GckbUR4ZSPpDKIi4a0rytd0Xu0DwWrr3qgOe1j0dOi891I4PvrgvNV4RuvER/SOpsUUnQGEZHQABga/JKqLKt5wLuh2pmcFhEmwZTfxU/6jfwJfqt/dTKkjlgMlFX7JEy0Bo/G2orc0pMZsSnrcwcrkFPsaKLM0ZyRHebbLhMK551iZ7nfhuFCDjdNJ1sNKTHosk2uWj+mupe8GOXpaZw8vTybdItBY5527iH90bn2otFygO2oG8XWXGY58A6AqLlySTGfuPfcYUHGDUrfJblGhlD8q1zXff9S7/8RdI1howhy/V9eTHblC4ePLtU0ArXMsyX0MZZQuZ3649cYv6lvc9/tch2T0fpbkD/XaQgbB4KIHmRoCvaqotTEEhd0WI4SEsxglpTFqb0dAbODPrwHuXhHSptIfTTGcQFW2WUXQOjlYpdw0eibMB2giujqiocbI3AEEK4qSFTPXZcqBwWAbHt1zz7pdNrYFpKzl+53rf4/hunyZrl0+Nn/OHDR/xIJ/zl6a8ho+JWUTzcC0DvAH7UPPHsOwIe3vfnRtuZut8B+I6Av9beA/5/EjD/1PvvSf4e0/LsWS81Qjn+HvJ7e3TeuNJo1gchRJulaDw3rYcZz6Pg4oTgmrnG6XzgIOHbfB5kP83zTujazHB+SmcOP5RTVzsB+PnLc3iQ6FnUxOvlH8Lrnxa05OE7EcZsfbQ/HdCWlRCY5+psvR5Ja0dqr5hrM6Fydga43c/W8JYGhWdOF+C5FNp01Kz09XO4oNRRg6LJns0KmGh6OMJ1sAAxK5JnTYuQjFt5ML3oPAaEYbOJKbr6jAv4Ft/7t9T+zPid+9Dgn8HuHgWLRZeBRBDDvEMYFvN76cWT/J2/0wuOiF9QsGmZOXhm4PkI37siE3JmePTSnjWCECOqt3Yz9FuE7y3fOH8NRl+gVsKPVpb+0aZeyiWXxRIq1YziID0CdDFOVp7jneBBNIjwwvGKQkPIDUimmPPBbLTZ3Xo5PSMFpY2OKPQJJdRmSiUJWUo9MBMAifjYSTeHjByI58Qn3SINoM86UnfCZq7Y8TtV8ssx5RXYd3BlMG2gssO3B2g4W99YoV5j2MnDo7pn3oTn0XYGqMIV19p3fma6Dze1oWDI+w3trFqEDakI/clWRhhPzcZFcIo72lOV9+of6YaYIt9TNduPzV2FxX4n/Sv5jJaHqhrA3Sac8FjbliL0EDBsLrLOvYbXdQ/zLxaO9RP+stigRhEeIYjty1j1lObP6k39tuc6ZAZEFuOsZyi60fUeFfmQHfoHU5Bp2j3tdYtt0IkWAy8O5YUW9rS2dXvufQrv+rIC7NP2WYGZKRy0KT9fvg8vlhGa7FmgWQoHeZuzEV4aI23O5UUEVk9ihnotk4O1O5JIPTYHs3mII1w6lrlKHi4AM975/B/ayy1fbHmQD4QOhvDOUS4JMPhGfw5448Wy8yREj94gR/CmfVqo97KNRLeTBxB4spwJTpsa0QuBKqlXeQVTFfqsm6L49EFg9g1Mj+CT9am0oxLhTNTGhA1DWB0+n4FdWFM9Vw/9Da+zqMG8Ovt2nOKCZsRuk4lYvdYBVF1sFg3TbqHpGQB/sTD1GpGFSCLlaD8xPwP0hIIN27ah8AZgQ90ZdVdUmLgUc2Uw73qEiNHzXnaRTwTGnt80vPZzydnyhp1ijjsVwN6oJslcqtg7PtW2z3Nj4R2DEhmBiIHaeLQRYKpq9K4a454LaJejUEhi2ctYsEQXEJm6x89S9dggZulHI+xDdCSLZtNPTulKNYCaDJDIHIFQuna18hnQjRYELqXRh65+GVA7gsCOHrB3lat2ickV1MgYkZwBz1WnVRirs3QRzvJejjaC6wdlQxlJpISMDisWP5ERiMcXLVZApq/GU4ySHDHNWcpMtHXkKNcsGFegZwN8gY7MeY2+r0C32GdMhB/9Pp6Lbnn39G3gS22PB4+g6HNmHvQ8XV2BPst3F/p5YIOpn+PtXFhYpDGfi0tGPr1NiA96wAI/iisWnlwdgkBF9Oa+zqxhcxenbwjDXMi0t5v3xyBQgJzzS7sY+pXDT6QL3zh1mye7F98akttTpm+ejsfNprSNW+aZvikqj9mAvib/0Pj+EgAJLaf0tKNZ8RV38t8ayOtf/WbSv0IbfoPpd2xAv8wE1um3gK1zJcM6ZYkxcVILTYWwGM9VzETEKKSzLgKgtI5IhCxZsZuEC0DPiaxAdWbA8J3MUAHfQk8CwjSKLjCqCd2B2FtzZt0wDGd7MAgAF9HmQAh9VXoLnPtXx/mvl/7++Bf88OHP2MEaxv0EfDkDHMK4A5j209GiLAroRGroDhm+B/DzFQDadxnHv09jPnjgLnCiC+0G4RSMsH4j0arFz2dnEALoz00O1frk4rH/sqEzLpDe2VW/2iJq3uaxulM5WQ58+vLcFzmQxkjzgD+4Ygrd8x9A+ImAP38nZvX/Wz+p7HcwTwrChoeDNNDVgzzxd0brMjmfvbMU8XO68gnPriEHN5EM5S7JUOAKpuRI0a8zzbDIXk5vfbAiQwOHzR2EARluIpfc5vDQbn2WvchhzxjIhm5v4NH8DYM4CbN7LdgexjIueqIx9jn0yykvUAjYEmHLHt1xSDvcEh6dPTC6Nbr/5v6wggtEzR3HjRvNqekba2Oh4J2dmmQ6VIPVdeQhf6RHoIlRd4JHQWD6oXtJKKfioHWbE72ZJvtwU9zXgG9d/1CTf0BuxLa5AtOJD6lVSgovq5K9VzCFtsXF9JQuUPdaWmDzk1oOjrn6voqPOxydJkpXk3FYbRrricpQj8HZkVWluwS0viJVPhCrwUroE2ODq9kJ8s4MDmiGw05mtnqKjXM7Y7LJpNyUy1AgoUYY/QM0pLv9WbZYTVSCB34i9x6/vSWdZtIn7GhnbSJT/hVGteMSjvo932brJwD3/oxA5EzaJ15G4XX2LIstGd/kw+HbHvz2vPHlYX8SAxbud9hUkOaWeep1ubz/7Tm5AdWnSjAstVxQ40qcJz0Xbd8Er8Q46GzjceW4xrYcvIOBfDTNgWY8mWYcYYpD0Q31bEdOranYSPPCb676Ehs+er+kceIR3ocD/Ht1AAAgAElEQVSxtrw2PoBFtxhwJIk7jW6kNixhM+9aNQy6TNzoA3UFkf5vvw1lAuCBHmjEOjOix3V7TqEhZjC2OeV9Q60L8z4EX4pw+NUyxXAdAUYoTCvUjURybni4tsLNWzh9Q9ofpcgRJFQkjLlF2gOZpzi3888ptIsgZ4UX3f4U+n/XESLbkBXK5QpQZXCt4J0lGoh9anykiBGdfccVyULKOvFZMz9Zv5HjgR+pQuGcc5K28eco/8V5qrzRgDBPeacLxZ9DWWoTyhrcXZ6Y2OiajqvLGnmypohx3aaYQKE8MstuGIFW6YwbBWQLqZVHiF0NsESWYeiGhYDQbNEeOdTLKvZFj/UCYuHxgk+Zqrc7eZcW69ReNwJCLYKOT+TIH3SCSSgFaYut03wfgq4tug3fyn1s/hQoj5Z7yrJmmAsAz416FRIx64x2vA21MgjHZGWaJnl7LO655JrftU6dsYwxe8KpJcyUMkxKzu8of6Pv8qeDUXc2zwaiPoeDINEz7L7W0MaAk2x4uZjTuSPs0wkEmUfeMuzTwi4N2sGnsQgOv/OB7WnX+Lwvts+yaKWtdf01e+SqOcxBSJpGhLkuJYmgez4aYRd4tFyrXao8tOEo3VT867Do1eka4uUb2dPzqLs4+hxKqrnHQWZZyw1RoKabWi7cx8r6i4MuTrSGDmC4WN8V5f+W0m8U7H+F9Ds2oN/Ty9OBwDbki3lMUIu7gm2RJcySVSFTAd9FzMzibR49WxkAsSoWRUBg1vOkDDQXyuy7iWB2T/eUk52DntD3p8+f8PHDR+C7P+Bv5y8tgxtsFLkqAHoP0JMuKN8B9VHy77YQ5WbcobDwA0aDeTaif096JnFY+DxDga19uLec3PM8KQ3d+DpZTEUuYX3SneFNE0EbbRGey8v6ykQipuTlXRPFB/mM+jDtDrZ6nX/6cp4Ah2n3SGIxcFGfiQD82/vv/e7fNW9cPsde2Z94NPyuUtIZLJ9fK5wOKxfun3WKkoPfnH4p+plx4hAOWxwOq/BWQMT3l1cU8hzkW67wrxDap+vKq9Qw7XILtKlTPCl/jMVVC8GJG7VNl1KgA77JIBjPzSU67iCe4Pqmm2f2Xe55xwSvg1ImFhTr7xaBk/oi7XKtB1rfHxpvUgrKIjOck3q+e0hWHwPC6fSuh5UIOz8DhVB9wyCp9xu1KCaUfrPSzH6DLnqOfjMicwHnjlDFtcVXfBjXyAdF5tTymlJ8/vX4tNHu+HLIRwIcq3Tauq8ZxTvFkObvlPLMgueG/0zuBSYiBLUx4p7PsckXrjN3P3KpjtDxVbY8pqgrk/6/YlhbOzWjzQHu67aQqm7UMoVptc0XaszHBR1JbECA75LB9bgF1yieVs/GF1eWeFDwKp80VsoPZ/emXpMnAYpI3ri9c5HBUArwsXCxddKyrn1+k4zood7cI2TVvCpdw+NS9vnN+Pga1rnK8y3kn2iwAuDzbpHV5pznvSVF+Ue9OymOMrd5S6SRMogCjlk0C5n/bOtykIa1pn7/RvertJc0KLO2g51uosGR5bbwlv210SBq3beF+qLRRpHUNx41kQSNvyOIKtQMER6SHGghy7ndF/XSh20kMpiaT57QRrmoYFSS6CIe3KVyYx0bNJCZ6EdaZBnpHN8XZWWin791Z/CuG3SqbTaktrmAVePiRhVS73QNLb6HjtC2u9xW9J8SPIm/lMB/LEIKg4vGJVReRQTsTGD1OufdPMCLyHUc/oY5sJInbknUd1RHxjpBufuqC60934k4JtvwFsRwDjJRt4fcQeImykRCTjJnOu92Vs6RaFxAE5+jQCirVdYDYNZmIzCBFllkIi/TYHO5ktumkRIDvdPQDhGDZIOO0BegFMPxFhqHJUYCAAbt3LXXPMLZNunZRrOAP53379Lw+5p0K8O7kb8NwtEL0kuNkbH6oeqpIIGhbYYXgG4G5hDiPRIzU5hkb/cJ7N3zBMByXb/oOy8mlbds9ypNPnDcU77K7frNE6WbyPuIgg6ds1h5ZfoWAtA9/ZJpyou+eqW4o9Y9/ebS3YB+T7eljrJeKwSaMKICPJHvduboLa6L8wqgsO7IHnZUkQvtxAVUWBYxLKHmuZAaD9EWHmGRMaXSU3m6CTt92785a7mnXyIZaocF6d8e/4I/fPiz3H/5pz7/ANQPwPZZ876ff98VDLiRJ6/TCf156DF9r4DklIXmbrFAGOfpZN4eLa7sKDVLz+neoo7OisjPLhnPu2tuYdrzZxSN5r3WwAznP39+xjQdLIp+iO9VaSxGc1p+8596TjEAPO+BWL0k+tRqGK7p20vfZ1p2rcB6q2D7EkFYUXJYWK7WwUM78yI+LmBfCtCV+XLW1Ri4tjvMz+HbhGcUnx+sMmaPzbCavYSt3KgsHPgcxgcOSzhzUXni/3r4CBDwM8tmlcoeOxiPfIYv5u08TYoeMCGeOG09aLYdGtydsegyQ+DJdsmuiEnttQzheIeiG3OquX255s2+07qjAiiPYWeRDo8dTrn8wZSPAX5x0JHyqKiC3ELnGqxmHSWgnQFf0tEXaPDDFNzUdZfd95GDRhyMgRpa55kWKHwcPFE7GEL/cSiD3krpffiKLuV6UT1WqnlhCrZUNWwXgHeIacJMShs8RLuVsG9wuTLjscnFhPZN5odn9fQCYIZ8KYIGnTDnqwo/P93RKIsHnVjQnTKqojMPfKOLHqEbWf041zBHjXJd0rP2ClGdFyCFPbUs07VBDgJ8c+OSB2RCO8t3gLRZfouPAjzWl9N9htMlSU/bxvdq45oQdCFhY5t93EPf+PT35jumT6b/XGhYixL9m9bDLRx0I5OTdmY6lEls8jKizDvzhMh1DLIGGaJP6g145JbHre+8S7RthhgD0uREAdQrqBor34jRHkKzegci6q8B/87mu89Zp0ktEoWMo21Y72kWQwxiwosJA/jKQ5uB2Z5RANiKDLg4TCAbfIDsSA07DqOQG6R943As2HlrpjmxncaXS79RzY3p4U/7Xa7EM7sE2t6RSv/VUO1FN8wE/kzWT0G88DZ6P0t4b9qD56YONqsepHEK6EZrQ3VdV5mME6P97dpXAX5QkVaR0CfZTAGPjsNqPHcYAamZNWQ32I6Ct+KAWnCuJzAXMAqs97im89Bjp6Ue7K8bzzX6kO/7FMMMx7LaYI1nabMN1XxK5mo4HAvg051mVfk9d0iQ4MsRhexfbl7q5BNO+7PzAE8XA91EeB7nF3kXcCfHos3fzXBdaVC3QUfycNnRdpYrzoPlWIMiMnEp5P3LvKNCQnhb6HabKPHoeJj/TI50M8Wh2LE8tv0gHUaZi/kurjvj+xGRxr1CNwDpxV7geTNeefBomi5uSEgyimUvSpypJvnCiAMav23CS0uaPc6GGRw8+/YSqPnhtX0/6c+O915IUzkoFn8rDsT1h/3yTAoFnAeE2/7b16WvtmngVelt2vaLp1XfvmjTTJODXjZmkzpXxUx5uz27UPer8elaSn5P9zRPdwP6Pb0ydSvy694zZIf1vndCty/EoJueWf0wJoKThxFz75YCP4/VvNI7oeye7un1iWvFu3LCw/f/jufzs4RxB+BKH1uzFsU7i5xgq8Hti2R//iALPvMktwW6nTPeeaFTMJ4rLu+Q65LxO80VK+/5VkFK86fzUWHNNaP6nrRCXTXhZmZMzrJ9vH43eaWr91MnFLZKT+WET1/OeMIzpnP+qAtIjOcEGYo/ffeHg8wt/Rd/wWPVTuHUFzk98igwzmBawTnrr/hu1i0rAZVTnvX68/o0VXDd+H1u2/BshetXr/b775oL140p1bccM9Pw3LibohuPoMg0jcFQ38EKZaKgGz4re7/YNhpGwP8+fe/ZN7JzL+074BzO7W0VRGSNbS9dtinJGPCY9EwXYN+Di9VSKUJhflFTfHZG975Kz5vhcMOAKXaGry6gnrwU43n7ljTMaVFt8sftg8s+j7SDCdj52T2PmUUxXVRWqkNbSMu18jncG/sxmclYjspLRvQWsE8X0Vm5YvTELTQUyrTFOHAxmOKBsuu2WZowaxx2f0/IWfucDS045LGmivKPScfXFX6qzDYPRSgO7wHBg/HFzyMlwAwbNYJBJIov727tcBdzqeHrpKMkpC91PdN1c+IXFP7k+4melAx91DBvHVkkJC00ygLbZthYj9eCHt64scDyVumjhqYLJfCUNWSgEXA0fheeXdLbXP2wfx1nw3Xcao3xCRPhfKEreKypZ/PyvntG7WIWnH0o8frG3JYuLStjvlueH5V9VFbEEf9+JkC9RYp4GOSTAb42Q2VjD4VxvRauMN8AoVdsW4GgaKXvioUet21CrXw2q2hQzg/R0L1KpbulnZldiLzOEeJwQIvtWYiT3kQiYgBbo0NOxBjgoqCFWWgG8a4vqDeOb5FWw2Uio22NhnNrbDiyioPhvB8+462AeZ6DpH1ityzNKGlwPmwAHiTf06MMCQjMO3DemwFcWa/T3VrbJucTyVrQQuUTwjEtQ8d3fL4QqXdw8bGrVIBNjeeQ5ygbCLZhziID7iDs3rWbHs0L3rCjgCvp0bzecRDHCGoNisYd63Ps6AHvZY6LaYhEteoEPTqFAhzU5Cwfb+a+ZoZHgWkbfuI31EWV6XA9RrPxblD5wjYHwIqivmxP5FVxrDMclxiz5mQGPQrXxvfbHFNcihtXuo0fYZMCAVQkGkGoRKbURvJXWPFM8lSwBNZjlrPgi/aZR8/i9lu0f2KjODT3a/CqFyVqcBoveXHYlvzdopGcb+jg/YWqprwIrU1LIYHCjz4zQ3pVRZkLIlXn5QZg77/J0zzQqSEZbgATIXaVQjnxm2vxJ5Gkm/ZSpOqvSqv8wyZnkxNnAKV2/mrmyj39y6QZq35LPKNr5/c93dPr092Afk9vkPT8KsoqFxOGoqIBsmCsZ1Em2tmeRJCzlHagFNRaQaT+Mr4CpVauLhqEXjKwyTlfEtqU+kieXRj3CHaQwn714d3vjOGbpk8APqZnBPz8+AXff/iIH+iE/37+b8gZ6NRQvDtW7T2AJ4CeWhmWLw5n3AF9pPOKdqi4iXTIn/D9FrTp5ke6VkdSzzOzm3X33Oef5aXJs/e63DdvKF389GHa282pbPj0ZVfDeQZ8AVt69v+8a4P9cLggJfyTRXn1BcCXPXdCyPvM1wuJF+BbPov9yIvnC/AuLtJuwZtfhDQdTZZXpNcWGZVyceFqG2WCwq3VSZP7g5X3oPibpNlG84gnmy2mzxiOdMhO1VFhNpRJIRupdy21dxz+opeZVtTpQkw5Z0N7Cow8TzVAFPdA30+xTzoluckZYqIsDxTeUJctttdUlU2BaP0m9xZJPepy9tCoH0Gh25tnDbaC7eGdAEmiORdRyJSEGp++EAh6ZqrJS35++2KiU/+eAQ+n6eFeTUvCATejjteVKLFl1J5n2jYoXUKZU+VdrEx/XzD3XjNdV+R0fBDG3qVcPa+UduFVfhgvg9iUfxbC3PC/BNwy/IqhhAPOBWD8fOA4Fj6V2nd+3ykqAejZqpmFTsVzLcpOrdRWoFPoh8Th3NXoOefd4XPaHhqMEZbc8+ahRjI9uBnXBKWSQvMaetjlP85mbfDUeeYknF6VtWBPMSR2y8jd+24wxgJ8uIQUjXPJRs7PCY9RISLARN03NbbJOtveOlIGPFBQO1aX++DguaDF5GPSTHEicPrYLynBOsszAyb37YKQ+aU22OciGi8YJgXGtKr+Ei4GXjPzwjNS0/YuUfdpX5k9DfdxlxXRvLvM2F024SOGo7apx+haklec4kQ6avWQ8TYCG19T2Kj7ZmhyB1zcmOV8XIviIvxNPOET3qts0DYecIPJot2oMVCGPPBUCr/OixlgC0Gv5A47sldhZpEAg05CD8hCzsejP5xfFKc9pEd00Q7QI8CP2k7WDslryg6HNdINjF6n87DzfLNNDqXIGe5lk41/IIA27KWIAf2z/op05V0Vzw4vBJwKYzsRTiepf9/VDM4s+psIa8fzciKVZRJGOP2kcI/p/bChz43TNKGB3K69+DCJD8SXRtK5/dqC3u8NCxUurZs9k4Yx1+fUNasRVIqwI8xBxPzWhobTq306HiUCbR6Ibs4rbN/bvFE5m/OGPkOCkK+QbCQtHr5d5qr8t4O5gssZYlCFIIuezS60rx1n08EuXdZ+ZynztBTVZO2xPSnqVo/IKA8dfd9F2lnkiTRmKjPoq66uxAdmH9yalp/pHOWsuIo0OUQnY6Dz3iCNMpq/WRQ1hWvV1K+ZjGRcwI3MI3wu8gvwSkpo/MlIjW1CMiGvULfpqvGMhUxzc+J5s7+FJ/qldcCvPTlPmD2f3vS3uf039TkNOHcbDoa6ozAZ5ZDDuXqhrkvv4+SZF3ABgHu6p+vS3YB+T2+UooQyk1ZsUcIAdMVE0FCkBYQC2oB62ny1wRa2FIALBHYX1uVcxLvGQqAOu8Kt+kvpkhB2T7/79LfHv+CHD3/Gz1yB7QNwVku7Caim/DBjj4UgpvcAHtuCzkL37pBn73TRe+aEg4rAD9QWj1YuQyg4Ub9AjELLs1p33unDlSd6t5kklLHDNwD3+S8IqHneJd3M9JmGU/bHqhiYGc5PRcI+i+H8xjPO9fn/UaN5oCrusB/TIyqedfdAL5OFc2ijwPvIfR8yMAiPue2zfpm1Ib9bCaQD+Q0EM8Kcv1+N20qgP3h8c56jD1cL4Byu7+oyU39QwvtL8CzfXbFSz/VMF3tRsXCp3hekLqTjQsFm1wT85/7zAJZniDrOTgtHvQHbFSSaNypHSRV9w6Jn4rnvissAqEfiSIoky1saop8eJLzqXtmV4qSK/GZAYBDV4GFrSo42MdiUxMOCMeMAwRWb9sW2AaWA6QQ/O9UUlSSwM1U0xWbw/st9Hdrrved93fJ4GwgaSl40iwKya1FuW1+6ISV9ZEojf9yfreyQcvrtNqDldDCvqL2fkomjJxP+0t+thEjpv/ZehFoyjZW7XUPGwY4a6gxWaGMVvAJHcKl5P4ahMgMUQMHIrrBF/Ajzyp9a11OfncKff7PSqQ140lTZ3Swwg1VWAEVjlOdWBaoBVsO31u4aeOyRQuUSLs+G9DAv90fAJ1YP9F00OARqzjk+jpVTeDew+Cwq5g0o3OBz2mD/EIJTVsOZbpx1eGaiRRQHqH/agTOmCX6v+txQ4mb5gufPo0yzZNNGz0LeDhggehh3srblm8E7fbaY61b/iux0WSe8Jn/QiSWLhk95SiqnFA2LXkBcZVOL8RM7dsTP0Z6VFyoLm4cqhTPCJ8eS+OaiAdgwl2I0lQy/TlgOHeH7BaOxj7nJKxs1T3SXcSKBJGOosnlqq0qutC695ohL3nY4HCgAvVPJYIN6vAc6XkuY6DZh0Rz9q7wutT3zZWhtnxisPXXXsQv3vgGSDQQbF/EuL9uGoh7oznM0dHvj6pHvBLJELGdcb8BpIzycNuw7yRKVK8626zDIJm0np923cRNxbIFfS4qs91PDaDp32X9nedNM6mhh+Mw2M+RyOxgibUk0FBVAFVlwcsC9y6eJ9Ed5qD0L0HVOJaH+qGMDIJGSTC4NcycE1nG5VudFi6ajkkBk7XavBvSyEbatoGwFhVTm5orKO5jPqLVCvI/D/KzSd5kKMCSPd3k0nnc0cOyajLNLHnK1YHxlypsiD/O+Zd1TxnN93UuQZ7wl9mXiLy58hsdFiXNt85GMzgBokZjSHM+0v5P9Yj1xrG9t15Vj0FvAr/vmLZO104S5zjhufZPGpdb0bCkk3dO3SJfQ5iuh1Qv3sV8odHE98NZfYK7c0z29MN0N6Pd0W1Im7EoWT3HRMlnEx2fGrGtj7KbAplJkNzo2gM3KjvZdAIN0AW672VkX9+K5leDrBApb7UShSGHJu5fejJO8tqA7Y/m1pH9+/oT/+PABn98T/oZPwCOA/TugfAboC8Af+g/SmmFINjXSQhPfzxYj6X72HaHpAiJOX5syjNF4vjKcD3NNC4oGtdk5bAQ3nHePCTjpwuuhiFmbA9H59OUZY8MvtEM//z8PHyfvg/GcgMfQ6Gec4cY9Es9zMPB5P4/lMPXPZr95ET/R7xwu9lf3RySiyzOjz5fSIv+3IEsMJHeL9O5Ci1ZK3ElxLyfTi9pn5U3WpdEIy7m8o3Ws7cq/Bu5snLTrLTzUvjqZWzWA/9x/SnVQA88NYKHAmC/ed9aYOGgT4Lcczs++576MmDojHFyhJ7898WFAvbDM5Sv+sSjsunMas8xAQzOhuXf1DgMBP/i8a27qf3z4AJzEgF5VSf8FZ1fY17prEzeBg4qfN+phODulZ+684GE2eeddE+4bzgVCcRgiP8hyDDHIT89ER8s3qtfnaDszot88L2l6eVTkOnT77FnmWdZ3prGNeay/MrNW/C5pgs8MazYPIv4Rpb4kL9KqidMUwLDfKO6riqfBHnZ3bGpkd2EThXmFmre1H6uUkcOPGuhrdE8lD9Oqef0cantueOgfjgNHBlts9ARPVzw757VmcJfJXw15c/mLzp15eXQ9do2HWr6nFBWMEAadQzuMtpgRvQFrAbsjvabcSakv+nDiGT5goAeTydaGLXXoIEv1HLM9zv1FfQbbhNGAnsDZf9q/C7iWwwZnprBKA41N5TgvybAFGhK6eOVFOlQRyHwHdnch+CCbXwpoK8C2yRrdom+w8sayyVe6kW0ti1m51MoluAFd2iBlOE0opR+m1BS/znKS8SU0ODWmXWewd5C4ymZ8QjNkK9tudi5q9LkAEhlGDZmbGvm49hErht6wtmtxBWDdIE1uREajdda2cwXXL/L8WWghQbywTYqx+elG9K7WiEva1yzznqHntVNxPuJznQqINok+QOKB3jZ6FZhs5RxON1dIEoMoSCIKShQDoGwF21bEE/2Z8cyEUoHahQ5UHkDap47kMn7F8HOg1zZOE7oT3yPwkVwI9TllDCIP0UGJ83CoxOjbSNsGDhur79iN4ZS+aMA0NkykeA5vjxcXN334L/X3ig9u+O7yFUV5nS+2ka8golH4PvxN+6TVQXokBAqhbH0/1yqG8FrPiNEjCBC0sMj9ctaRhHivDN4BjlEMbP4YWHHIVv2ffhfs+tVpdd51h7Z5g+kqrQzBLUP3MynguPxV8npWHQunY2MTFgNhtKczpNtcZeB0kvtIYysnWSHw5TYZWh0YLzMYF6+vSZwvrsOmlzmdJ+YfN6PZ8SV7EGq6OmKf3AbrMhmN/DWkt8b7r50ONwUfvbu5ounty4fNiP+EL0d5elH9bE3Vir4RH7MtZ5W69dJtVdzT7zvdDej3dGPi8JcUBd3KfPZdWKww1IgedhmWAtr0zCzzxI0bkLkvS9d3onRmDUdm5y+FHeIdMY+CfSbWJqDd0z0BEsb9e2QtBP72+Bk/fPiIn+oOnD+gISo6+QGgcPzxY9s93e3I1d9nDnkJ+FEXuWddUOwcPBTQ766uUI92NGN3VOy54hlwNwVbnNh35zAnCG0ezJTRR2m2cMtedXb9kAR+vfz4cBqKsixiOI9vA81ZrNdBzdv8KD0GD4Subu2LL1r456dd+jM7xzKAJ24g1fA8F9wpMCbAzDYbWFlH5VnK+BDzR9KdhdzotRLfvzS9+PvFh53xJGSdIcul8ju8POJdlwp9A54R59tsrgwLHctHmLh29t/UrqCULrU5dXJN+c3rlSBwOBhpjIb7UH3GZzp4x1fmA5rHrk3G4AEvZHVDUD37OeW1EP6n83ayHmC97SftXp1oop0ziVY3wbWNREUPAJWzQ0WbTB4iV+b9pvp10mNAVd4hqduj7ByNXQ7JD2uDfbUiHEl54go8NAWU8TazWHTGc+Mz6RoQ+Qw8Gox7wBG7MDxd5b6QY/aGjl6m57Ma1rXKvTHmTGTNg0Z5ejwkOM7n6XFC5AY/8dIsWnr00CSnH0xyLq2P8q3Kh1WK8oH9giEKUgbCn4cJJagBvfUQFGQHG+2dbFYjL49804z25Uvl9Mg7V4qbrAS+tpplvlvgzAROZI9mjJ5/0WqaEUh5tkEMnGfsQc9K2GgDA9hZNgPaMVxuaFD8dDO84mYmuSP84+2bpGwlnW4QzULSrJz0O5nvY36te5blpvNrI2xl8kzhGMqc1OHw03G+2XeU7rvPIz0iYNvESK6RU4jF7GrDQRspzyrTIs0rmxVWKVo2hpmHq2TjRKtY9AIRPErjH2EellZ6snoIGWHetBTkA6LA181ICJ4cZdNobPfdVpRPKz6W2sLj5nlp9DAYK807viqexX1BDIAryx48rrrmaxP0xCrbWP2MDh/oM4Dv1jzANiYzFTVKC3+x9krkGzOUbxKm/Z28r0QQ0mE0mTtnR7d2ki0sxOhfqKBsJ2zEKFvFVkXOYe8LoNAGi0ZSSXmqbugo6hnNk2N91ikjPYXnV6RuGMMApRrajclG8A0FZjhvW5AiIVKjuPPQ2oyCMfQ1a/1RbCho9MLkgeb635qamx9wucmpWqCRINvAaQY59W/paWao2+ZNlnuAkW9b3djA2AEuqJVQK6PuVdWDitcWafIcuqRWWeOeGbyzPuPgdU5eL2lnNQiOxn227WGWbmNw1CHRpaK5/31temtenNPM05zSvePJTMa194xuatrxHt2mJKWx1jcWjjzLBhH346ZfK3y1gS1WNY0gcWXy/LfIB69Ipu+O85EQ9DpR4Am8ou4TPMv08qsAHOr6OiVbmtbwtefES9IvDdNr6s/4Pl1XxTmW8r0mOS/7pTvwnn4v6W5Av6cXJGOsWdmDIESN7zuBHsCgYCVoSHfI+aydJxK3/BNoRIAi+daEfTtjiFVspSwQcFiBBGHiJV67l9Jb0PRvJIPdU0hTGfJn1Pon/KGccPrDH/Ff//yH5Ns/AuVTyvse4Ccp4/weoMexjijzzuqLaw/7K2jh31dldULyon03rOeAC/B1mQxWajQh5ntICyVNHx9OoExXwPj05RzgTUJ3pCnpecYtiRQAACAASURBVDOczxv5rBbm02ANl/L+yc/49PzcC4ZMQp/8PhRvi7zsiX4pzfQ6+Xp2v3qW33F+Rk0Rk8l5/n7Vhm8tpzqcjT67EqrSymaIaQelUKEvb0pYDAx4+IKUPUZyPd2jyKdmy8WoTLB5OEEofbSVgr1KeLxzNYMzA+dwbrMrWBWeGr2REPCFGp2K1Xb4uGjraFlrbYjjlr1lgLYByd/Z78nzir63gLEBTPijtsuKIQA/0gYG43+Qo9k0z5/RaxatL5jwA1m4yxaeHazGc4uWUwp+xhdQVSUlA6Rng3ozSM+Jd2/SyAjWaYnTrNPeDLczvYnPrEjfJoSi+1aMnhQVl7lMRvOGcBLEsYjbJyPly8tzcJwFNHlP/X1UNvs3DbEDiuQLzZKJcKQdoW/D/GlfqBzr3plmCIpTU2/I3MOKFtPmkRlFbeh7SLm7utyLEQ8CE8zKEIVt5uHf4I/8sgJcxHNRcYk0NLSdvwpSA7vLAz1OTqSB21IwuAENR72q2MaJeDMtayDRdhb6ZVioXXoSVthgUMyYFECDdBO/IbQTtQgngCqYz2kq9nfSBX1tXY5BWT3W7d8R5jaCOnnYjbXhzHxRmB2yOl/8Gf/hfjwbgAfw80GeWVlXpdyrK1o/UrEmpuoM7vomE8pQrjO/wKjdYKZGVDWiY1Om7htk5Dsq5sXc6vGw5pqqzSe0sO1QIzozg2rtvm8ghjJDi0YH4Ngeo6UKK/FIK+0sZhDAFXbESYv0wm2OxbDvgJ+T7hvfingCs2bm4syuwQOIDEAEvFcC/6iOBMYPQfotwOUJKO9lLB4/N8/bSLsLAZtE4GNm8Cd2gwmxVlcAfFYK/CH0pc8D+WNWY7kdn0eQjVi0gVEk3L52nITMJnBe8hZEzBJUgoWBJ4AKKhNq1cNOAh+QvbHK3yIv4grWRlnkFaICRj5WK6Kb0Ir+HpHNBShnE5U7VJzZl0ZSkT/o53Lz50jEyQrzMiPP0LkY50YlQI/4ETpM1nmtbJ/TaHPZ5wvrOFEHYtsAGjZqlvgLPZ2mwdc2nsQ6OZTY+oEjnBXiLQ6gnrXVLEZw3gm8k27Y3aQ/qo71mdtZzuZAcJZvcGZgp/auG64wHh0RCf2vl5TuZ4mjzHOUEtMe1w0z/sX9760py2DzDAevX1ivpUHWjb/oeftkXvX3MmlsfdT6Szd5uFOI8juP2BAK7Bn/OO8yAOnZir1fSpd6kZKQEnFBeOILKiWhscqgAjA8xysO7X3lsL84XestfGvqp97xXBuBeltYbklTkA7mzGsr4HxzZdtn4zabz0dz/Na2LBdMNxZ0d5a8p1emuwH9nl6ZZoLSBa2Cr9dGYZapqLysQnPnfRIX0Urku1UadYppFxhWux2j4t+Vcfr8qxDX1zBkA+6efg3p58cv+P7DR/x/9bPg3Pt3wCc1lNNnABrGvTu39BFtDD/LD2k+88Z+UqULR6MV9wougnrx6RwwnPV8GFFlR1vUmAcvADynfL7WeQGuxk9c2cT9u4d5fvE675UNDAoe5zmFPrF7/5QPDeftzHT59qTKoFj3X/bPQj72SJzyBcl55zYUcRFyNF3jenKytuyeZVI6I7ezsk15oGR06Q3vm4wSTK584OO2vGW6BeU4dHJu86Vyl/Xc0sgrlRO+FrnQOO/jtMD3cTcFWF7pBjowFIjG1wq6oxI8AgUBRZVre+VhY4HXkcP+bgj8M9RP4flMDBi6Lb6sAf+GGJGNxtn1oGg3RR6F/BFOBIX5BlTCj1qhm/e0CDMO/ZE2/MM8u8IkYjWGU26ch3cVOOhd87D74SQ06ZG0nzfCEx5BtIFQVDFZOmWnk5US0YOwNEwt+zmBGTqOgT7yBIAWPjaMbaRzzMETThUT9pzR4IvPvWxuPMg3VV5KmWheIoSrVzRcHmUZ0xaurwE8wukhZsLnSn/TPPKzcztwSfAEpNzRijC8B1pIXQ1PTNGawajK6dyAHro1TlfDdkp/uUUJmfoc3dRtyjyD2Q3oNndZ210BicVa4B6XthGnKu5YaOkot8dujaIQz2CcpEt5IgmIdDqSwZRezjq5a4OV1gx0gBnWry1fqJ7g764bg87Yu++Zz0piqJUf2CwbbFeAP8s6ZYU39VuiR5O09tdf1zco9K6mSbcILbckuuI63i5mKOULRVabj/G9b7ohX0t7qPNN6UoXvjvMc/VStjOyfYiMrjiPCJyHQvkEVK7gsjd4Qms4D9CM/LsVNtxDjbxAoxUEPe4t0E8WGpX3unj4aMp1oRkWN6XN2n0OtEX/Ct9FtgiNRIwTaXircByPGel906DQ8rpxK9uq2glMG/gzg2sFn0jPogfwHYCfFa7vaTEvBRdk057INSjFvY9BhEpF+4fEqFkFxgrytSVp+Hu1kWv0b908CDnfmjYpa2fC47OE6gaGbtI5rPgSdi1JF0cD+6X5F9+v5OQsSytM5MMANicM/8ZwC553pHWtvzPJIWBUMXHM6IyxeZeX0jqqkESNUyAZ1KHPIDtv1N2SnmPvvBcBN71+vSfSow3Ii2XsTsyZguxcEAzEBAiGeOEyz+EO9fUMgBjs3sSs+LWBKms49jAulcFP8LDtLl+e0UK7V+jxkKGTrY3dYIRBCyhA6f44XcK/l3F/+fQV337ztOoHHTdDEJ7lv6adFH7ypIr8yPLp2HJ4n3UGRlvs21l5w8TtJsll2AeWPOHRi9SMvZdwLMDVtd8LkgkXy4tru+7dL5Vyv1zR5rdIq3b/0t0xS98CpreuY1h7TeaUpwkTvad7+hWnuwH9nl6QggAzrBwOGKFL2fpnn1Y5J4ttZ3Ypegbq5pJ288RSQbxfDcA1PaWo97pq3GrVNYYIC7NjGJsgwQ2mr7Uj7lsJBvf0NmkZxv0v+OHDn0EgbN+9x35OIX87fc97oD7OZecpPmYhPSx+TUmzPQB4botux38EL+hJe2zhcK2B/CXRGGbO3FcbzgXsdsb5QfkTrcT/efdxOWeb4bzVdAoGkb/un1t3EqnxnNJYsizez7ZASwuWsEbrGpTWN13TrnmHxTOnVwf5ZuVF8uzeyZjjTKzH0lcii+aJNE+J7yQvwZVNMZ/7u6r7bWjzZL4EJdVsLrnytS/lTUCZp2vbGRErtKvTUTDYQux1xVedp6UVFemYFx/mlyvmqYkJXh7BtXexP2Ol/p7RuUFlAzo2AAV/RAGxnKVJUY4hgKiiM0+57GKwm6cWtTODoxuVbVDwiDibhMEFBD4N305oikw2z2GiPhJ6rJnQ2jaNcnFZAcEKwmhYtA7Lhjlu76KXpimk4m8UsHLZUZm52rF+FWpev9C+RD5nTyg9a1dl8jbkuVrZauPW8JKX0LbEAMAMUs89FB2/yn7NYZOch921c4lpb8N4BFZfowy1eh5yzLFSItociLKDGcus/6j9tfktYVa5kHqmsT/vjOVeQMA36hsVHfoP+Vb20B3cGfWf2djmd7kb6KIp18WxVeqaDHiI51xGf92eZGrQY3XDOvb+4/7Nap7OxMIJGkxTHhNYWa3meqC8bn0W6Q/QwoCPoNuH/V7qhMcRh6YyVZ4gkxbmMqZpnP/DO78OPHGWjVu7Lfy+bL4JtNY+iJMu81TLS+YpLH8gtM1g26Ybv2zznQ2kGNGq0wjqHOBjd+SpSPEGYggeUhrI8ZiU0C0dn7cyWeUUat8YXw4F+XnRhltG1LvQ6Ppd0U10JCZCsnGweWH1F+pgJPX8ZQD8uW3IU1/s1iQXWoWG8wbwVmSrb8e7Wep4IuCBxUt3r+rFC9ngWyD7sXViRNooTdCw7N4PFrIdMEs4q+6F3m1yb/uaP7eusi6lrfkwmEGVtS0M8Tx/qgzQrt7DLKG6K0m0dwbAUo+U3eaUewbXpsu5yqnwgh5nJDUcDOiRngYciTRoVZCVl2obtj7ZbrZ8SLeJ1qyyB4s+i/cKnIrnJSbfLN05vodNKr55lCTalM9vzcxg3R9mRxEZ/5XvDN+dN4SIVopZqcVGBFJnMEl7dpKzy0nkFjkWglR3B6A+gGqVzSDW4ZWB8xn0bHNA/9ygTr1n+rT/4/MGv20YC8M0fMvAwfo0t3PC6C5lv/TiGl3MdGdGvrq28jdKHOrwMEiBxnXcITA3T3G+GP+pzje67Ea37ZvM3ynl9XUL+vwBRs49x8PFq1KPU6ndq7FZ4UIvWLeutbPkuzYuCKjV/ap0VHauivrf16ahO5Osd7goAF7f9tenDMFhT+Z1zBL8FR4flXeQ8rh18/zK+mbTfVbHJRiskK9mu7mne+rT3YB+Tzcm48YzorYSgFpelcVRjcmrAMxVF6q2q5t1Ib3LkrzoQmCPArkJ9i7pkq7cqvzWKooAW3T4N219yrbaiCv+rOC9p993WqD7Pz9/wp8+fIdHPuNvTz9JJv4A9y4HwpnkYTU2mzq7elptuqi1UH1RqrDFbik40YbzRgA/tYWiLQxmAiNDFgm2E/3ZPtLFiHlDrLx4V4nSryuuuE12Pcounyf48SFa1VtaGs/Xq+DDM85Hw3lLZjQHbB2lcO9JkbFP+tMujsK1D5qZdG1/F9aK7g5YQp5cXkcXDe6Ur1s46oNcf8z4Ulr4ggWm+XgcVjnMxbhISwhCefFLXT1egm08uSTIH7ZlBYP9s0IEW9AGHKIG+6rYJUiut8oIFdKj1ql4UktAqg6fLB9hiI/vi3K91/OZcUqL9oivGSQRBEKdaTGWDer5vX9GrTxQU/gjleN5NvwIMV6LDzl1IJhnkxgFGD6J/JxRaTdVUfCyh43XMkLIyw/vPvr1P+kJBDnfEertVVSJyeLG5gr3wZE7thX24mhhefCuitzT7Js5rw5WN2YKcwy96LhGnWcuM/mZnyOd5GV1mClbgTA6sc0FPehta+U60XA5Cyse8w2lhfW555nCPCb2N7MOWH3Vl+CGQ9bwjjbv1Ehk84kU18ndAat4kpE14hgE84BfSfqxRcO1KetZo0DFuelTOcyXbvOZyePU2jmoLx3xkPE0ks6pAqdVtG7KUTMTBNewtyl77d7HFo65u7CeMExfrbXGugHg2YNnSyooGnRib+USQJDQ+e/oBJAFTQbOVWSyeIgEmNqGDa+vrccalJd6YJKOEG+Bdtd+fwxN39ftaeLPh+kSbZ7VMIPBJ3L/SQc8ASjowgIPUT20HDLeqJFTul0smjRqxbZJyHb2b+BRU2xDjvFNBsCFhAVUBqEPw96mI6MmwY5swpLRrVmfEPiahYnK7kZffGYocvOwBqPWCtdHQPQHxk10cymDZZNSlEnQ6CRAcsw3lPbBzg4PmyMJepa50GqRcwWh4vYkAMJP3xNAD36+Am0fwDqPGY/NkP4J4HebeJ/vBC5APevMfQeX06QpyveD3FVQwHRS3iD9IAZUtYIX0s19AEONtp8QNjJzZ5+Vc80B2hr6VhDAJMvcKkfuVpazzzcm7DtQzxoBgLVulyGMsxPcYNptfujTrcZzzTQ+ClU4BDzN2eSXGVQmC/tNRIhJ3cYvWTGjFMVUBngTClsK2MKeA002G1z5ZfzIIi4onm+nk8iehdq8ZNGzVedH2teGC1F+sGgFR0lByQZnNkO3IEZog2UoIJUdiFm8zoW4CH15YtAO0K7bhfR4F//roikl4WDS3e3VNQznG6Rv4rTzrdpE47WLbzQZp4lsCjQ87FJJjyIymWwY+SLQbQoxXDEexGi8cwxFcqF9r+xPLyaVM213/ujgubXJ1vJ+jzcD/W3TGwJ1lZz4q2r8ryO9RZfc+/WefgfpbkC/pxemxNgPZekYDHJSTq3qRaNe51Ghjx3ErGHh9Kw0X5SaQBZ+g8LQQsT5vniC63CbfBVVQvobjehZMXFPv9+UUP5vT5/x5w8f8X/3L6KoeNTQ62Yw9kTt+4IO/1qW/CB+GypmBqigUMEDEZ63De0ES623cF//W6Lt0TyPNjbLt4V7leH/4/13nu1zAPTTl6dUgS1icqW2yKIUqr3Rgd5oTp7D0j/2J30W3kXZXRfufdgrjH3pz1K+mDL4QX8ykMWjvPGZP5/gzazMI5gC6NO8s3RtvqsTdTB1zkCzlLzPu0WvP5/gDUalf5uYDZRW9FEjbTEe8hzNj7xT1hW3EAVXV9sLOzd1i1yrwutxAqQp62Z95XzVdvz333VzxvtsdwWy8W+/LrUpTowQGj20QmwTndXn8MUyQ7J3quQ3ZThRXwYRqaFb3LEKNtBmBnQrPSrZw2Qnde2hoFgPneBNt2aZJ7nJImZ4QFEjJqMUg8fyN1it5i6iQkIdmvUF1HOI8wf9t0A719X3SHQlmhxk0zwrdcIv5/sJEQluiOvpQZOr+ftr00y/e1jKpZc2JXgBa2jjrCg//3Na6dF4xezcPK+qRXnYdGMDqyc6+1iIgUg3fpA3Y+RBExDiuOeNBstEoSBFA/c8t3c5T3xetY2GQj7/OXiIshoC7CgFgZYAP6v8rXjT7VjXkp/RjjQjBu/gI3Y6PpW8+YsZr4vPx3PUCyAbkjUv6VM7YxhoJ8DsXrENKtrcp3nt8hfLfmXKyuRMlhTvncWMXTAXCyzVNi6UNqBF/O+qzfPZaeGFFkee1/3W9Iy6t13ds01UHC583ukaOMTWJuetIXpM3IC2bSibWEC56HLCN9LpOtzrEQg5/EXv+g4D03FBTP14Lr07s7e+04XYBWI581OJUp5uzlh5TP01WIx3ClDj0VpoBDbSU7TTJYyfygYndMfddLaMgCMih3iPIl7YaV78rsgZz+DmNPmZxRMZBdgBJjGiO64XbiKYzY0wDgSS8PvlBAPXNhPQZqHcw+7SJwBfyPOAgMIVxeY5ix9zrRVE1T+TbRVFDOc7oe4sEb5YDOW16pnoFnrHvOBNpmCCWl7bJaET+S8bzgdmmn5tXOXPI0OZOKS8rKMMA7o2HjXWfMCU8lxWHRcBKFRgERQlFyu71zFkNSQXw6lQT4GE1i9iiDdjejlt2IpukNFZuyvSEDM8xrpHWAvNi+sFi/4R6arLltz6gVMPcNwgYX/t3jdSmDG8Kq7UCtoL6Nlk2NryuCw6kQGsGRfkgjnVDk46c0rcp4x3mW69Js2E2tTHerMqIPy+kZB0daJ532ReOMhHl9qSxibKJjG303hNRb/1TSJad+0/fH0vjWM23ygWK41tssmVef0oR7b7yOuAvo/Cc64Y05tIa7+KNGLQSr6YPL80Rt8oHUa8eKlN4mtNfZ93ib4ckCZavVr1//L5tQAuHv06hvuefkPpbkC/p1ekayhPL8UaL/fd1yaw1F28ZzYN3VVIPMcBFGZseja6HcHl1QZPFiriPWHKazeg+y579u/cNm6LXRdSOMgsE4Hvnn5/6ROAj+hlAgKAn1Hrn/Cn7TucTgX/xf9sZ4qXz0D90L6JZ1BT+IsKnULN09nw+r0i994vZMVsXPBTecCZa4PLjFfBaOELA6AZp+yF3fbHgocsB3O7m4fpeTxzLbyLxnMA+ICCv375Ep6E+UYTgPRWQrXHxYWk7G0eZ+/fnsRobvbAYWYzVEFl92Fs4geDMJjyzSrPKa1x3APaPMZzJMvkvT/AGMtT2lUI6kG7+DbWz+mvy0fDorKHYf3q5enGBX6k08HQ0hepZXbe/CFv3q0+lfpzRx7ByBk9Ayz63uZj3HwyG4NDMJZLkFXF8qsLHdIJ0S3UKHiPeoflBRHBvbJP+rDG7IEGldAXDm5SzkH5dGc417/uXolpVKAHDZ6z+0Iqa5g8AHA4I7qgQM4fj73CGqhDfL3+BxWl6IBE/NitztBlBDCUjhs9N4898+YiqLIzhLR2Y3vr2qmDeccvZsqBazHhinmVC3fBTe+HM9NHpdNV69HMN2r61i8y4ptyfjYflxOuuxy8z1O+2VVvyBnruanNV2X2itENhnmeg8OGuSa7slbAMGNXmFde3oXq0uV14BLcE5TJNwa5PB1L8ukdntOxyJ1m3PBkzHRETN82zaHJT9awtO/bVbPB96VnXB1LnRGQlqp6sj646auVwyA88TNYqGVzyhrgRFg7XWxU/+hG9n5zupoA3VIgEKnG1wE/zI3DCmR8LyriLbevhYuvjaNBXDPBzr0uZUPZ9HgllQFqpreTurkLOdNvdHcDsRnRKZUR1zGpVP+J31jZRWlOsAW48Zw941CGe8LasyJSQWsfxJhYKsQLPYw8xcIQjOJ2Fjjrfjv9bmPp6xMDXyySiG1wsurFO51MRjAYnrTPLPy7GkzxWZlw0WMvqKBafZWax7zxB4a3gcKf6Fy2jrWDCFTMmYFa2z8HvCky+7dKYixHBbiC9zMqn8G1Oi9gFFRs4FrEwH9m4Kx2URQ5sqPa2GrM+TgWFvZbOhmVrJ9uDJk24FeeaIFfdN6qModepA6afMQ6nAM/U7wiYpVPq+ASiouIspejYq8aVoAZ2NVv3JrjBnflKEQeTYAKoWwnlNMJTAzWDRDMEkqfUFvfRkLdsW8dC4PJ51mYq2yb/eLElEaTbopgzyt/7AZzoDega8ZaQOczaGfvV64JB5bMZSUpvyTN5M5FPh+P8OmwweoamfxNGRqub8Nb1TWDn0PfUN8vhhwvAWvKpKkHwdf8UWgWeip4dyBE3CoEvEpoOJDl8iuX8Q12Z0xaf+C9V8HzbWTnMXUc6heE455enm6hV8648PKxVtlk+v3XXnDc0+8xvdKA/lqEv6ffTpKxZpdmlbmpR6zfZ28283wJZdhVe8aNXbLWQgBvxWXonQgoQC3sx0GJvGUCmP4SSRjsWsBlg4SuVAMB1abuMbmW0AwHQd5w47kvwiO8L0g+TcICY0hvKeDPir3P0xenRdf99PgFf/juI/7fp78DlfG///Bv+M+fGMDnthiImolMLukLwMGoHN87eVVc9N/qNv1i55zGQombwaorJzSEMF3YvyjFKZ/lXk3ZcG6pN56nMnMhlEK1hzDX2ePcWvYE4OdgOA/qEf+2N5pDFv4UFnNhge8KQQvXGL8LishukdK16cIzW/xkUnBpqFKfy/4FSoFbb0jffPOQKhXjrvOpsusgURiv8eV460Ynm1d7WK/Fuct9GdmNwW8D/4vncE9hJx8z2RQ2CRkR+dBST2iLf+of+W+gDRZ2Mc4tVq+fbr5xa8vSYxYN57uYydTnpZgP+P7dB/z8/Bl+pkNUUkLb62eBAxILNBRbAvPXc8S9trxhjiBnZQJhQ88GNuUsmZKWuiEUHyqTE1iVw/2Yc+Fuf4B1L1hg3E5ykAfVZ28T8SZ2X41t2kJqh2kfxY2ucM1XoOdDm6cfevwL+buR68oS39PuHFXTsZhHkdbguk9Gw7E6OyM9/Jo3tI/pgo7M4E7oY7gR+wcIdDhlbXN0rI5WL/yx4iIPJSuaU8sDxRoKpYZOmZKuSEuyd41bKQP8uRDnK3GcWaM3kZ5xGIE5g3kDbyyeibz7+8jeOvlgZuS21nI0lua1Hw1dy5TfpcMzrDnMrvfw8kMkAwY8cHFjxFVnbURQ+zcj0Zive60XbtDwJmp7efIdc1tLhH9brkQnlUx2KJ/DhCL26BQBFs86CtaDGctL7Ugj7R8QgJ01yLsaA9k30AVirOB03ocRMtZtySuDRvzuKlFjUsmERkbYoOzTdeGMvt5Z4jQV3KPSJo6hM63h7gd6Xt/Sw46aMXFZfsO5jioRN/6nE53Jzi/eQKcTqJxgh1Tb6dsdTSGgbppHy6qoYmzTMs2D3aULFnmHdOenY8sQRiUMSvdcX5lrcSaols8Ghtu1kFWZYGQb6AMvCGxt2t3mZe7+vQlkhoYWj8fquMVcJ3bdWkGOb+2cbjnbmaRPd8vWAHEJwyKMEOQMc0bzLCej41WM5woDcwHqA/C+gnYCTgQ+ESQuerV9e2LQZwJpZC2ujL0yCjFoi+SIAF9X6nhzhrmGiMks48YCH5nhVHfDMYDKGia8Aqiin/Hx6TwpG7WvBk2gmzFeEKt+ph3hl8Z3WMME2mVlGO22cYSdEc/oEMENv/qKLfj/ipDENXnjZaHAbvw7wInhG1N1A4QvbVSGqHuRowA07AHTphsW0OaFb3TQKEi6kZOJZD8+NaN7BfuSlkEqI4d+65h25Ovc+DaH8ewiwUTeQzo/jI5SaLaFqde8hi/cwrRzrUA9iyxjc/CIv2vPOxxox+D4yHl9kW6lMQmjdjFllOB0acfvdHkmQkDcaDSUNxQ6Vjg8X/DhKeAL3Fx9M309AzwT3/gscjP08PMEoqV+wohuP/+Hq65/nRMKLTOkYdvidMW4TxI7PEhiey7P6rCN6x1XP64/Ow/Y7hyQ0Ied0/RI83GZjt4lmAbwJgN2VOZMRuzw98b+5ym2TR7kfr4A5xIXAq6tPp19Nn3Gy1djtTb/Eg4YnJFuR9nrqFsP6NeQIeulGD0tuyL5rPfPLnyfnV1yYV3bw6/xlIwZcUhfNs37sr51ejl5uqdXpjfwQL9EhO/pXydFQZUgi4SiAocttqOrZBAE7HGnsJdZX8DYKIRg5IpKBXUj1NOmteo3RYUDyvCwvDPhYNvAO4PLCSi7G0soKXOHTYZGjBhBGAkvjwjVILAeJD9zp/s4FXYk0N7TL5LSMPz98TN+/O4j/nT6CJyAf9SzSAL0XRLgvwPwBTh90KH9rOOv+VanHHxR/HtAQ1ZTUJjyiILAQHpPEM+JXa8NjrPOF9vOfs4S0JW03LKVyXNrj875mfH82HAeLvRndcZ5NJzHBdITaG04Z4xGcyCMVRFl1yBURdf1uBpKDbhFHrdvN81kimrz3POwohe+T3Jh2eycy4XldY/1hDpM72OC8E1k5xU0akkHLR30d/eakR7MvwuRxREVPjKhhE9McXGlQgkLGQ+VGid0WuD4uZ9yPYSVJ244OBOQI85S7Z8B8HO4Ye1pYLLx0tCmzhMLBI8bOlE6OvwApCOrRLAoaG2yT+0ZCN8/fFA4qZXtMkP41pV9BGynPmpGkeNZQAScNuBBiYxvDrC/1pZ2tqd10wZmCSla4m484onAWAAAIABJREFUGOqb93ns7J5eMDBX4BChnNpX/1MJPxY7VZ2c7trGFgLwMxr6fR/Fq5j0PZuWkzbP53AoXYpTYUo2zNPP0N69LbgXd8D9MRb6TQGBazv8gr1T5K8di9PkNBkSAjHLGfDWjNRGt32kExXaejkxygVdpHyXcIAaMoT8M6Ktb+L0ZQ7wGGzaGzOyc2lAXNYMAM0SR5oSaTMDe21ywJklWhNXYNtRq8wZLjuaYr3hIvt8Icehbi4T9UpxAC73N6FDaVofasc9QSkaqM0zrfWw7IFtMrEeuuRlsW6SlRDtSnP8vtXoSvwuZEvcANMzSjOakdFBqHJ72MmShQH7vucHjVRHIaDJZv7eX4+EfUbu+xpGOOz5plcmFZWE2We9evB7SdXPQpf1logFhM3OSo+erxyNQwltjQaxUTxeN8Y2hE6bOZmLuekHqdNB56EH0NaQkwkpFrKwNuxpRXc5nc/KjzoCx33m9B11v62+ZVO90+1oA+1vAkppxrMdOq1oA9MG2t6jvHsPVq/jChUxna7I3OKtoCoPZiIw6v/P3ps2SHLbaMIPGFlVfUiyPeuda4///7tmZ2bn9XhsraTuOjKDeD/gIAgyIrOObslSUqrOOBgkCIIASBBg12bRLsnpq7VPN6sn4G3cd9HepvIz0nNP23JJEmI9noGtXbmQrkN4pcoLWA24QCAKJKQX8EL+jctb47MZnKRWEw5olnj5xvcAEcA20LiT0F7VWpSfmCM3CQ65MnDk3lHgoWoYPiPoAmABUUX5LMZ+fgc993pFIeBA0N6S8On1VHE6nlCxgmkF0Sqh3PU/3Bfgd9KfBIB+VFpriJExAqCGzQuFxdAv3VjAEE98qlDSKgAOINwAuAHTE8CPTQgY7wWDOyU9/wnW2SPRdJ3Rj/XU2TGGhBlT5VbpVzcMcVEJZHSqeks85Wc0oNPkOv5G+ltb2S74uOm+GnEAxTauNF2LedVjNajxyuWgVegxHHZUQxgrdmTCCSuOvAaZD90gZ+ARwKpjNst6gFU3cNjjbrM5BVke2hL5aFp4k/EL2MY0cxRgXtUAWKVPagXjCD+uoQHYyurYbKBXbWPHWDMPukC2zFMSTpkMjBl0xvOBSMdvMnnlXbuxznw7WukncnUrxXwXImUYb6GMmeFqWrbtLqLtLBcl7edC+zgznjroY0qDOdrZM50KPMpYBKsrJxFKt9OPxixDEyLvis8U/hO36JUhe1ub3KOHFsFiqDZeDGMotm3GD2P58bvAG7mN7o3a91NUVs6mWZ59vMzh2Hq+kaZ0iWfTmFSdZUySNaaQhDXkTVCHNV3q8enDOJdBz2p+TLufZXzkjXEUaT+MHV+3sPA7Ns55GJK2ZH1N1/ScdA3h/qp0qTLyt5Be0hbjpPKtnw9FSZB0SltkhmEqU1lmWUUnh3puGAUvrXEexa0uY/IFLaSbT0TCR0En7XSVrZQVp82dT8aUt95vlb/9vsfaK2jtmXJ9u5DfcIph3NOLHx4+4P52wXsiPHz+Cf/92+/wn/c/JC9lm0SGFPXkS9Grk88VFZ+1AFdz4zixNc6Cfs9LnK/nZ+dSHsYz43lIf3z3XrP2FZw3nts94Z+C4TyD6cZzHfpP+lwM5yReFfE7RjOcx3bHMThxBO7vafIsPPf+TPliH9Ps3hjThEZm9xn29LxkopqVEydgL5kTRPq9iIbehBG9Tcp4NMXaxdn2gGxvWP/l6dvtAij0OQ0KvaPJDqDN8HZ0Opm0BNqLxr0+DGmDXxYNCd3iM4ULg5etQDuTkX1xzo3ybjxX+rPFO4J6j8NDmcvvAg9Da54ydGhG9IV8YbcZ16V8KgtwswR1o3nGxXYwoBElWnv/Hwi/5wUVuqAacMgAfhj6tO9XqnCjXsOv/NTI9wvhByJ8p/NXEPBpssjW0J3qCTCNKdQ740M9dONiBeccem/fWh6VOfZdNth76bZI2qGlQc4Oxch8Z+xydj17QN1DmnSXbTQLYMa3abxTwthwH0k8MEDe0g03G/LMlNvlxMENpRXyD0k0DV5Nr7ZvNG8hDTFMaV/YREh5fzYagOcNfam8oYsIpWWR9UvCfWdoc8OJwVBSOWh8igEy40mgYyY7RzciSwxMo4Dvker9bGUEKJ+TAjsK8wL4GCIYP8IUJ5KHdShu8YM5McUWe7t4fK+FhPsC0yXtnml1G07FAqErCfnrXV5IaCyVGXv+ktRKIG9d3wezzLTxfHw1vJ/mnXDb3Efn5nFAi8BhtO2yMzFlF1WJF+6AHWmLAiNqPIxRuUKMpYy4mYwKoRTCsug4WVQmumzSvkVtm85g55rHMMxCv12zvAlLB6drSGzyctaq9Czx7v7fzJPjp6GjUlW2ectHoM/n2RtBK7W6Z50wgctfcxFv+06sKjxBZ7M1khx6n20DG9B49aO+i51+/5SAIeC9eYsD9BHSztrqKNr3cmiNejguFYULKlbQcgCo6Vh0L/qgh3vXcpo9L5wIzXB9QHwnijo9E4pF6SkAVo1gwkV/Iyozsik0fBzIDg+ghU/c4CJNRj2HFfqeQIeqox7Uyhh5qdFh20yZCIXHKnqZGSsNygmze5sbfcY6GNAjC2OxClG3iZTa+IbIRTZDfGqf2Tg72RL3yKV2db9D+xIvHbz5qc+tdOTRC2qVP71mrrKBq1agtggHm3hPcLrKGvNvsSCKFD5pTaSRaaLupyt7E1+T8rJc6r7f00kI87OtX5p2dCHO/bsxlp3AdlJnFLPNK2OfbnqeZz5iRL6rl1tfRVndmDjVFuni7dKcr03hOqt7Rl5CPZxZJg50+cI2RfxvXXsV1Ddh2kfh9SBh3jpttPkiVJzrky8E80tobw+U5xroN9W2DX3rXHrLofTaFIfHz5leg5M8hkw/eslGjGt6Vroa0K/pZ0txd2hlgLjqny3/tMmA7cCV88iU61FQCLrwWyTngtkEIisWP1d6DbN+Lfi/FEHxK0zfP97jf7/7b/iX04+4ef9OvNBX0rPn9Lc8yPno62elRfVEX9QTfXnfe8VWVeiDwciV/ApUXsX4M6NrexTPH+1WdtCe2yS9O28Oz6O3Sd4/fngfXkuGPz/c737/bVDwCcBHN57rQo6q1U9+UHgD10K1W+TBYa55arxmSGt6uDWxPvcsK5pxTrk1v7R05I25pz6sCf6cNzlmPp5OUxiXRbxCaj7TvIZfxngG+4v5x9fiuxcCNwPnIno/U/5m/84WRdJ4G76bTITjgl+FHtFAYTJEcEP4DBAKC2O5LvubzLVbLlKwKNCleuoD6qUmgHqo297SiE/rg3y3LHBD2HKAG+KIQKWAFv12kcFMC+CG9gN1BnRalggk8gYBhQi23B/nFD9wDTa+PnJOv0A/IY4CiLdM9WbWGLXCPtNdej/pnoFVh7k7DWlWY08/Qor4LrJuL2sOypAm7Kz/rPW5HJejm7Ami279MqL1tV02T1OnP/NUpBnAfiKnk9s0hQWe53GPLfoey5WG5LzxdsqMm804pMvZ4it5YZQHXlSUC8YTClA1/m8pfoSR4NyIFc6C/PzSOH48XLV11IwxWAE1FGTjntsfhbxGAcYvpnJ1RuiGeOGdjQXVNEjynz03Azqh90gP3zp+DBeTbBemc+KSzHtv1lT7kOMJyf2rnGwib2pA2chrkSGOer8oLlf/flWbv+U7BRJjLOUGXAoYq3oERq/iSTsdjmcqELt46YfC81MYM318aHjHuxzNSl0YODbeZjKfe4OzLyRnNHTjeM6p+4v2wI8rCeAygLUyqFQJyFbEC7WQnn1sztsLA4VlC6riQb4Vr08OMlD6t5cNggmSOnyglIGvNz2ce1vI5uLerFPDOJ7hUCvq9rDrXyfSOrxP+ndLt95+GL5Nfeeyvy+bLUKL/tozboeU93v2qUlNPEhj2uYGrepBN1C8N36sGxMh/FsiEgAFCwoW6fv7FeVUsKwLcFrA30g0wchv6IcADBUd5TYGWnubX7Tw/lJIAgfp/LNaMSxHQ/Cq/WhHJk3XZsjht0bPtYGQxxCdh2xHo5Yn6C0m/7wdcCe31spM1fupJ++54taRsfVpoEsxJANyDGGvewiuS2+fMsCptcu96C1LwHeLKhPwEFDU43GC+ykatFWbTjOTZJt41DjuxvPKerZ7dVnj/esRQpL+gx7bzQmRhy6Y90oCt9v080yB085vCJ0d8L1Z6VZ58Wbv+82WvUGKfHOmo71l+UA7SuEF+IrldXRiz3nMmo5pagLlXH0zfcGevwYvNEf1jJa6OSx0XEWhFq7fYoPFWxroLi5qC88/d/qlwTNJkR72wO0Y6OzBFj1/Sb7zihSdJy4ez9d0TefT1YB+Tc9PO/zHQta01yGjfed8Vh7YGVpcAaoSZl1eE4gWsHuxqWJOFrZrgccHo1BX5+GnvwXzScDFbZ5Mo2ZhRNBl2CsQPW4m2v30m1ekX6Bs+5tKW7owESoz/u7wHkSEn+raaM8m+Kf3AH3WD4IwjxPWBehsw1lnscW6CqBWrKViiaFK89yMwt9Mjw7wzxf1dlLS1eP1h/e3Q/ZN4zmAb8LSCBHw8fYjZsh+wjrwFQbww/okTS+paYznG85zvqFA+6HUfxHB6PtgL+V8/stjnq37S+rxbBRv2m+mkWenLV73C1FUt3DG0PXwDWKOzxhzPNFsUO0BsoNgChem+NsiAqOt3w9hFQ0O+e3m0t1i8Qhn59HjolbrD97xtqGNbsifvVvuIEZTwv3xqGWUFglGvZIAameWF+WJpch5rOY5U4p6nCuVLgVYLAxlO8exedjI2Y8Oe9dWQA4P1cVGb1/pum+6AQnB0Bue5TwFdnZzXLTQf5wker3B1ZLUN7uqwvCOMN9dLPQwOw1kUoS+MNzYQKimkaXMgfOy8ZE4YVZa9aMArLzJpDriPIiu+DqG746JFeatfotNs2d+zyEH8+SLsY/jexHpLQ+HfPm+b0PINx36lzDcgA+aPItAscYA1mOLZCOfRZlQMEwfNvoNq/NsmaLeESmKrCIrCPANrDkqQ4DT/vUh4uMjwQ/uI362Q4oFOqrhWzXeajECe15IPMBDztp7Ckb0Af3c0+hwWDy6+4H7BzRJczZkeWQTeQE8GuQuXPOKxW/lJaCFse3AYcTFNYsDEDc5MNi9eO0EeAvF33GMcD8fpwNEZ1plOanHBU/eh684oXRWZl/dBj14uEvaeL9TFtDrB01QbcOBRn7bfFv+iSqJGWatK7kDVzZ7yQTjBAnPzOGEFeEFpUhO0tPZANmIXtiGo9FNOGSBrb21D63ecfF8NAFPG1e478M+jwMB1vO1pYL2TbhtxkIOBQ3iKPG2VKdHzujyYyp/nQ/FlAz4zm5jNSQ8mpklqndXVwXwBDy0vNPR6zTaeJyVU/2YmgJGAd9XMA6ysYoqgAXkhz9YmfG4EAvLn+vlrj8by/ZwJxlB8ixGtvFchldrZsiX6/KuDLDGF3bNQH+2rn0YKs/fxnHV1IRWJCv/jCHJO/gzRuxdohfKmJykCV/1PWuQjQpsdfp4DzB1u/1stJKe4EMaGl7x4XJ+BkweG3uSKMOAwB/6xpLRLKczzlcznq8eut290TujYCgvPYtbYL1P6ghDBndXHDnPmgqWM98YnDO+HwfDjC9eUtdEsTirV56DfS+dK9uqyHLvJVXJxxfbfM8adl1iogEWRqIPfGPUmVgu7QcHCDP+8Lw0UzooCHnTxRU+O5aLUzsJ55swSQPc5zzPzxY4f/DLdprl/d8Lh8TQ9rdsc8eaMpzPKKQpJ9t1tLAe83w/S9ppa9YF9bJ79EtpxjX9TaSrAf2aXpku5Dim0E0V1+pne3KtoFI1dKAoBVRaiGoinegRg0mtCQRRssgUbAJ0xz3bQkChuePJK1rqCxabH4QZ2ExpGWZo1/SLTxu6wk9PD/jm3Qf866e/AncH/PM3v8e/f/orvOPfAThRM+iePis9qKd2MTqhXnkxhXcNvwXAymBag71d6zH4iFqZBneEf6BFm8zm5xPFfTA4jukzVnxQ/8o/3wfjeVwxIODb8Pj3dx+nZT3qKtSSvHb/a733uXMHNuOVHue5QErP54ttQ3Z7v3VvCyKz/qjp+WyNCMDdzQEA4fEkPmV3B9m88Lg+9RmN7FgpxqMTRJpBw417oisQ51Z6fra0UffGfHN4TzFDu3YjIaWPrM/OwTAIi1nehNTOY9sWMOOgDAsjtAK8hLWAOJGO7UuTZ0Am2n69wFZ0fU3Q2h4WNe0T93rz9iislj96wICC4bu0PzO6LcU95AC0I1f0Gyqk3uoFtJRWtsLAtUTMDGhnX0RuvlMUO8+9c8jX1tqwkItF79c87rVfmBeIZyZwKLL2900wuP2ol27LDBtj4nA7UCs1VsHGB+ybrcUPJZO9kdgNgdlk0qGKAAAhtmfSdxIzN2x2tB6JUZ95G8ZBOmyCGtIody6avkd6dWWypxrqMg+DvBsTse7twU7p1SW68pk8iX5iH0h3sp6Pa3UXAKv+FNWHydXl1j/xL8MTzyO3LGYsJ+EhqCDriT6ms4LXY3e3j7MXUCcko+u8GH+s9dzVE9vDevaufR+Eq+MzKz8cNkHQOaLcTINv9oRYm3PUpJLwKHMfoFHpKbwrGKn3FL6K+D+hbk5BujC2ZQGBcazqu87ngmwmufNc/HV4mnH3rY8k38vX9ILeuPn95GXW66YvZ4H3zwM5RR9Vl2dBbMM3PLCKdR8uSvu8AnwSwcIFxWRqKa52xA1wNpxW6CdQfUANucTwkMoMapvdtd390cfcHAojaqxJjKYLpAa3/anUDVV2GcaNB1i+EsYtZUzGd8bjWAy3oQWXD31tqBsj521kbWdU2USPkP4Rz3Sp2F/fM1AaW8wbufDO9l032pXNJnrmORcwCPVeA/u/u5G+rBX4SXnhp9BvvnuiPRMMN5npXNPwz2j2TR1/LZoJ+zSjPxZGq9NIJw033G084P6fjp768UOAbaxowKHvkKQoOV2E2gILcJQ4bc3kS8TILBrHjIKivMk6lVEytzbEQQ6oHr5AopQE2Q8bn3YuizXA5Bh5ud0+gvC9NzwbewdBNqasSXG88BAR+mPPqvQZrytYjee0Sth2N6aD5bmPE4vYQJgLsBSm/q3W2YZyZvw7DnhKj2c6VihnD86LDciRJjfky4zu3yRtCsEXlhOLy+NkyHBheTt5fdM6tfGWxIYUYYQcx8xXTFM0B0Ary+Qyb2B45ppz5Cvt4RdqbCcnL+3Pr434S3j7C4t6y5SN58/psx224Rk6xn7RR18nbYHh4xpv2oXX9NtOVwP6NT0zbSlkuqh99nvhcGFpqz338430iRrPqYjRXKboK0BFjeeq5NhOalWybNc42yQ6LLy/lll24dUQJvy5lS1DazYQ5P7lgHi4y2v6eZOdgw4kQf0J3z8C3737gL//+Ds88UnCjBPkyIFa5Dw7egdgwxM7lueKe3gYJ4KV1JBeZcFqNpcwI7etcsWj4vKkwNIlOumejkTA+w93XsZnWvH5fm7I/cZA0/FxznieQfrzej9ubmYEw/kE0HOG87ygEF907jxxUWOG/PBsby57BpeX5YkLX+fLm4ZbHZnx30h6BsB5ne2CcnzOnvtiyvtDGXt9l+WATUa6CS6JEdkXLG3CEs78pdt+TFOgAaOL+EsW9rgtiMpbXYrN4yUuHoAcRHFIJxlnRLg/nYSemCS0rxvA1aK8FGBZZE12WTwsu+gLRSzHHGAtej4rqUe6h2sXfNg502Qwaft7bzubgMc2HQa8y5491u97vGRnHG6IBUB6zqyh18zyhA8QvIihINIVq9dvAMP6JNTTnazQV5mSnCUqBnWZGDY+mPu43QnLIoALLGxvW9fkUV/pUuCD/kVokDVwssgYSAngMgnYMxNGAZ7h3dbdZW/krSE4Mwfyq6GkzlM7pSiu3as7FLDLri4RDoZbCrk4/GsGL80Tr8MuM4YOOYawlCLHLpBHD7D6bVDZBtZGrbaJptGNnbk8CtXzqu45xYMQmR2jglG0qrY1Zti8A8JorVvhhkSNttDPWtqIH+HOnUgNRVvQsx2TcK69+fTHc7TbfglNDOTAQBmWrk62L5oAypHHfXibmGro6fSuzr+YG5/pHGMjKFvPuvcuaCF4cWHn9N59HzYrO+lHmHMts/lglHvn6DaLmIkKkF8aZ2Fn2EH2TaoeVFLuSzKckI5xVhlq3mj+ba1YV4DpKEd2lILCdmSKnN9dzOhW0Da6EaMSsDCDC9sBHWLAgx6ZpqcjVAZO3QafHoEz1MYNWVQJVBVD1Npp9gzPr+ysR5I8cPlGduwbRM5lBaHrjU54emWUcgnuo2EuDoI4ucqJ+itjVbrBWZqkvEgba5uT6OHJeW2vt5OzugpGXde+brZ2iXZCRKATYQWpzgXUT+KR7lEIOnnYb5py7DKr3qB1FWh0E8lRwcBJj4HQvbpcAV4Jq+7biEZdAuk5wwFLPm65u2+v7UHk95aRAqElPjvwgdjvsbd5zEICNwXF0PWHRsyt9A2j7sgwOIqRkGIUpCBvSWslGa/MIdQ7NIpBB1fzPG+Piuimcfx07Qj4mPLAifzyLunPriYbm0F+FABF4WY9qo7XqsZzMZp34dzbzowQaSGjdsbIA2zWred4+kBsuWd4UtdOWTlrlsFTNW+QhBvvzqWZENvXKzYTDxfox4+93hHqW/k22tSjYafdw06QVyZH25ZeejkOeYq3F6Tc/lnX2m5rnuTfK2s7Yxt7rypnD5ShEa8u8+0T7/+eI4dhOGfeu8HTXjhURznzytQUHqWtMC4ySl7Vfxfic/f7DVzGgoc5Kn5ZTvTX9DeTrgb0a/oZEqMtdpn+w2ge5EDzIpeJvEwc5D2bOy7ZohqjhWVs03QLTcfdJOttUl7XHfSblGHzvMdr+ttNaS7x14dPuHt3h8+84unpE/7hw+/xeDrim8Md/vWnvwC3JPbzMP8Hq0H9Ri3zFprZhPxB7420o6viCvjGEcrl6o0Z0n1cpTbYIbzmyu47bzc0Cl9n0Pchy937XpwMxnNN0Xi+bTifT4o2vc6Pk8m8pTc54zzgg9P9ZO2lez4pYvc6fj/bdR7KNc9ze2ae579f7gAQvj89dOUS2UJgKtiNe0orzkq5wWfwZBi/Cl+7sJItNj9RmnfL8LHEI7PfLH8nX37tEycbQ+HldOHPrieyzDeIxeKNNs20a4PO7v3j7l6GfauDtT6uwO37WxAIx5OFwZB6GPDw6hZ2XcKzL8ChyDnlh+Le5CgEOhQxoFMZjnJnKvhwuMHJNgyQGKxZFw/ZDXptibeq5bmtd+lFIRSK56THQL+1G7og4JiHBVHXdafOk7ady2nff3fzUZbCtUEHPgFg/FhPmk/4WqbGCuqM5z8oHN8p6Oz8We+NDjieVtvaaCQzXZ9zeJXQu3OkN1InP4q3b7bw28rLdAoUjWhBBJgza4PqNYwk8WKMt9PjK5SxbY0HAL5o3RaiLxnnYXHRx/ekfbmsdN+OV4gLWYarBksMqd9qiTLRFhdINqkqeHbkkj3w1vtzy5fGVkBD/m00Gm8SPM9Jvvm1hBLMiF5Dm8n5m7vTcgFW5xIKTzgnh6vzkganv3wWyNuikAaSmH9h2OcRlI2U1YN8by03zeyE1ElTw18ci5Kv1grfqDAjY1iQ7lAKc5oHXaosbCk+Eb7t+2F07obFRd9UTr+b8G1kYBdZO98mGe4ytwfHrgfQGQO9ctD3bcN5y6+GzVrBK6FiRVlkA1a5KSi0QIysJicJpJEeGKQ2UoHEg3NrE6Jzu7V9dgDIDLXN2zrkyx6bHS/JSEDXdwzbuGb8IpRsPKobbnbOtn3f8OU8LsNh/wyefYqECZ/LGz1Mb6DaKohqFwHAvRjOSc8vt++i+udj674CpxV4l8efbaJQ5n1Hsgn8J7QoJUA7wcPy6TcMA8roK3hGO2KgYXq05ytjRcVauY27SsKDq8mZhh+KxWkNRhubY5bDhfH7hGH4elF7JO1QCpzpPCnyiRmZXcJyTy/tG6io0P9mRqeIr64hVphwaKKjv6Huivxf0s2notNrv5BpgdzL3bChzLWHOC4cLMNVwCd3ufrs8WLyS2CPcOM4t/IMpx62ndVYDvE452g8134y5ZgBvD/B5cPnZYLXkNLpjtOcu7x+kveFakzjDY3a+50jSIDsy7ndNChjSc4bjeTOPVdH1o+2EJdpbF7AZfUMOHp+cZ6GZs7arePKvFZ9PM0qo+7n1UblPPffSkmO9fLOlYJJ2efgS9rHl/I236v2F5kmY3FKk0ngzF5t/b5VesvypuvAe4L5Ukb6NVNQ/iLf+1q0fU2/2nQ1oF/T10mMfvZqk4xBgYu3BNAClKUJ/9omDC7EupCRCOsTcXa+o4S9Ip3jwcMu6hcw7Zefm5PSL1G2/S2mDT3hx8dH/P7dR/yIE25u7nDkFd8fP+H702f83cdv8ZenP/Xfe7e+7wsaVpziuKH2rkKMwzFUYSSVeASt7TW5SIkO9UaPxB36ufsgoqTyikIL7u+fpvnPGc8f80RGq/6qhnPkShosnaUvKtHRAzj2xQxnuf9zHpo820vTvHnZLhRN1EwIU3K4kEZi/nOL1F86zXB2aTMyyTF6uo/v8s2szi34Yn353icqtT0zYAYZkmDLbSfSdTA1lufFlJhskctftzHHIdPtu1uv2tkIQc/RZPVYI/E2XwqwSOSYm/e3KMuCw82dnm9e8LHcAihqlIuLtVLbT3TStSbuhlJDpZlyZOGgrYV0SAhtL76ZLi50kBq3l3JwPBz5FL4Xuu5UCRbDwofDDQoY3+LWF3wL5EiX3oDQrslhDLwjr3WcWzOL6zn2eovGN8MLWh8bzVEHS/so6k+lwdzBZm3hpoepd3u3oBOL2luIOjcH96K6Als7cnndZZOTQxkAxsDXcYtEgnFSzaDLDrjK6Rzz2EMEpb9Y78Z30cM80Bt3NEjhuoEua+A0tKlSPJqoAAAgAElEQVR5Ljbv4FRpqI4Cn9PfLbx0PFH4BNQgy6H3+tDyZkLQEMQkcY+ptu0F7aTedDZCNzVpZ3tPYdO6Zrr8KHJ6Qb//PoxHDKjeTSPWw/M0NYrTrvnU4gLBmdpPSxEPwlSCzV1mnlj5WVejbaYOPdcyUcuTipX21UZvQ8GYND7xnsiDurFuNBv7K8FASmOdpdPekY8hNt2ay9DRTGXs0Mij41yW0sdUZL6swLRzuQWfXGUDOnMFM4G5oB4qSimo6yo2ziJyk5YC9ogwhnrSTWkQ3+XmGq429BrGZ9MlHMXc93V3TECWhXrN6XlzOBz5nIWJB4xnxNoQ6DZG3Ej0nuVyN4SV67DiNtKwB3NIZQVaosn8i1Dl7Hmtix6FNvy4HPTFZaWInNbi2ePhzxi4GdEfjHETRH9avR/6f8mR3QzngZ6Mh850Zes423CrG7eMDokYhbjf0BBQCdgRGjuciIB2tln3cSpvUopvQIwDPsuDNn5tY0fPL+2bSLBbvDM9C8fHEOIwvoFsp1Qd2Jdo4w5K+WP7s01kNqYR5WLrZ+EtmX9RaGvksRnOvtXMxmNsviJjIY4/w4WTi9Grh2LnZjSvK7iujWaiwXwii32zwPsV+DzbRDEFfTNx7TMP8jQyn2eUe1nl8WJS/sjmLijzEiC7jg6/G9/uejVfBtbfZoo84mdq6KYOM8lrG1K6jJb/FfB/UYPjlyr7Lcrljd9n1JVffXEySkrUsyqNPOgC5sObNy9Iv2pGck2/snQ1oF/T10ucL4xRR+XN3odJIdm5qbU9AwNU0S1IQycIBA955cW+RAn9BaXXgH8VSV8odTrqJwAfUWvF78oNfuATDiSemH+4/YAbWoR8F2phxgGAPkg5T/psUbq1X8tLpN9rfZ0nMIehM1m0s8UdczCp1IbY4OiTFn8suavJSIn0vvfSvDfPc1up9Zft223jea/4M1q49kFP2zrn/MWG85Ci8SmGLBqME6HlcYEztOFZyT6x9RLvM/3NZ6Fr/rvlFgDhcX0EAHy/PvT5EzzLsmD1TUw8nrkeP3mu/v2i9MLCt1DsvH+n3Dwvjn1r93nxLUZ06HaLP7Ov0xqWLRqK1yREthmQwdvYFxd1QT0bkATGJvDcw7RswycgGA23cRcvnu6P8k55mnt5GT8iuAc6HRbg5iChYW9uQMsCujmAS9HIsguAok5Q6XxlAI3YI3Pq8wjtmi4ADXkPH6sCKsPOgly1iKWI7kDMqJVQkie1Bfjw2kJ5HSRMYGqe5luJuvJC8FFvu2B/oXa6MwNYdfz/oB98ayTg37fF30ahPY56429sU8zFaMZx4weae9a2wSjB/TtbVO0+nfDMoWgdCBfrajmTfEh77we2TMO/8UpUyB6L0w35gxf51rtZw2bt2LuPj8M4Tzr07AQTeSF/zTAl7WP7SHlKFxGC27u+SaS6dl5c7MfMsHY0WKVyWyPwyhPNqMiq89O4DUN4YgFZfvWqlblAk+fcjTQJEctGu1PjeTNkcVyM6rx++lb06099u1xq0PSLvumaohoQZ0d7ftqNO8aNSHJ10PFw9Nr13zDsyWCctbEsIFRUNZpz1rlyu87pFjl1AqiXy9lJK00BUyEN5xdpGEmdG0DJOuBM1cu8z8k9hG4fDsIOvUoFI0+hUEfmufaMAVrAZdHHNsgJeoq5EhCDuWJloNaChQuYCtZCWLmiMkvUmELAoTSDvhrPqUj46LJIhJYSomQw0PGOiJNOYlCjxWZU73soG9L91/hRqoQdH4nXc6SBMG4rQoSP1Ke5PzuakI1ypL/txUQmBjio6Bhb4rgQeUsrgx4t7xHQsOsz9k8AcBfuPxN6Rcw+0o1EjrOGBT/azrDC3SnqDnxnOI8FhXvTsZrndRAwrPzb9TV2vlSC5uJt4YbuTRnWQZh0RJ6hzOisq8k3HnB41o16V0lURg46jX7P5nluNUVuk9rnwB26+7bHlbVMk+mZzkO9Xndpv4Dqpdq/HGjCeIEz9RmhK6KM9Pysl54fNjVQpZD3dwjHnwa8Hbkiey1ZRLlvtAi/du1/QJzHFRVSCbPIKe5VuYj3f6WUIR3V7PjgYsm1U6EhYTKgeLh4RZ2ZnqbA7Hz7gjQI6Tf4rsPJRsEvrffSFJXns3XomO4I3geovDdZ8nMMBPJ/vmL6Ug3NAuaXxFkm6Utu/Hnz9IsH8JquqUtXA/o1PTPl2bEp5ey76ocApXFRNj1nnyTawkFpHufUFuotfCZ5iMY4AYiTheT/FeeUbyDDZ2vKZz3ETXh12YJA2/w+LA64MvTC9HMpT7+29AntHHRLZnwkxg+Pn/Htuw94+HQPfn+LP9y8x19PR/yvm1u8e/dHPHz+835fFJIJpFlyQKNjHNBoZqWRtn0ew+EdAYWR144dls0JwRmieS8fnnQBpj7wCEu4+bt3306LeZwsBf/nsw3n6eHu5OiC5z5mM88DOiO5HR3hZYSTSGflxv6njeeYvN/7Nq/6Tiol/1fSQsAKboskW3PoDNcvlZc8B664HpXn/b6+VNvY0fF9Fs/n5Excu0K6BmSMejsSDXXh26nloXBPQPNqs4l1K4PzwnwAY0ZOrb0qYy1Uuy3yH/S88wUStn0pwE0BHQ5iTF/kl4t4s9Xgcf6n4ydg5m13kZwWeIotgEaD2sxD0HDFVrttQrCFB+DEFfDQmAnXmopuTnioKwgVD2xBkcO/oSuMqy22qcHHVNBd4HaN1p2zlPj0OVKfaWr2gDrPK+EBrXh9FlHgXuUc6K7pfo7rbN1Kuk1V3j2PjxH0pH7nQZ8n0HDE/bTIySsanmzcb56bS8OlP4j8YkivZJoerpbCf3BaZUC9RWe0GzaikurR3TnJTce20dF97xEGYitY/9cnboROVdujQIDRSN3vcZowUNKPM68mNJ0GNqJT/9gGGS9S25A3RkVy7fTyc3J1nhrLtaOlusb4FaGR2aU6/jkRg733m/rPhFcOi4Wx/NnGp1D5q/UD5TUTj0nmcNb1JeXkGWmny4Tykzc3dx7K8dUEL7V911cR+LwtcrvM6eVPJ2M7y5ryE/N+Dnl7MS11tb217exk+1bGneZgFg90m0NUoKpXOVc5YoVX0ugycGLlWlALiUzQ+hoaNMw4WuhxW7xv8rnRfNSDmMmOcnY0I3h6d+fGI/62gnuyCz7wVqeH8I6dRGLQG+hdcaZ8xIyoOcYMGEP/R/A8LDmMuzoyYYjhRwAavhusOshsDBnb/AQP2c63AHgB7sP4fafG8wfqN1t3tNuQzxSuYXjSPPbOZABZgTLvcQrQ9wQC8aJ7rsVQykXhqABQQXyEKI1VvZEbRN5nAW9dl1N7sJrXsult1ufcjrGJ6kls9nzZpfWLL01FmRPRBjOqB47sMiMQ2MCmdBPBUgIPy3zqVj3L4fTvcBNQdOOFDWeLmsJA41u5Sa7TxAHoRNpXYHKdILoicWy2Prcvelru5ZN2QK0CJzG4hjPOwXL+eWVQ1fDzvl7Wt9tL/Gx9zaqSWifHJgek23BnfwnnCZineETRq0VZgGPkUZsZ23Wkv5cA45sgav9sr86LQQw0s5t/0pFdQTT04X5ZL8h3Vl8Ive3gGu7whoTwBsnbltaaHO4JsC/yIN8ZJK9KodCo3z27rq/RKUlwbNYd6YTGbMzz+y+VXlz+m3K9X0DSQRF51pfG/TX9JtLVgH5Nz09TPci8sbgtSuTQ6p2yFHWusJhQ9JxUWtSrrIWqkl3ZpZXTZujt+5kMI1ygPJ1r8xnF9yxD3njfba2PKW9EeAXT/7XJw587GVkbXt3A/RN+fAD+cPcB//zhO/yZH/DX9REA4wkVx3rsjeEEoHwG8B44KX2euOWx6HQWfCHWf6O0vrIY0Zf4MsFnHliFgCVNSj2SqY1Z9LRCw0WfHhh4pwtLj7O6W9b//X40nv+Epwa1/vMI4PPx1E/K0vyvGwvZ9r43T3vus26xKSy++YutU0c3Unbvmi3Sxz5YcVEyz3Mr4w/lPQjAX9Z7eazs8bRqiGoL+2+rHVaP0d5C6gmAkR7efJJD4W8rb1pBmKF5a+L4EtjyGi2n+3MpN2cLXh+HFPqBAo2V0E9q+GI0uuloES2/ysPWug3Aw8oSmww1Q1gs2xb2l7DJbVmAWwIOC6joGapLAR302VJwBAEroeIki+4V+ERPSSbPQzCeS0Slc6wXdOqCtyJNPMX0mE7AF2tPir8bLFirmQ4XmGf/qjhcFEar5qA4We38ZRKjnQeMIFm8W9VR9kY/XFmMGeYof6pV86vBUp22Tyft16DmAMCP+vttmoNTIQfOz0lPA5b1t6MAEg8sOeeznW/cPFGNBpRIayuvx3jDPEg8+ymEyeDMHwnozxZJL5lz5jHNPu3e933WZU7fzXKG00ZTZhsbSLonxudhXE0qnDyndDvBDfr6mwndxnpk6OEbECzqg29OLWpgAWBnHRutcG6bXSeQ8jp9I0pbsOjbb2eibjFFMp4TDW6xr+2dGyI1pHvnXR7AVT7QPNA9nnCAr8HYt+UVCnMnzgmcBnPXt2RYD3wXxo9bu3IAmj3P8wjGKQKEikVrO0bh07X1snbX9dTyXqATtCyzzJNnDl56HjexuUo20pM8TswSQ7Ze/xoW3PP3xhMp0OUW3LEupVlb7A4bWfoxjTY2o6HdjOWk2xbs2iPNWD/IHLxq+BIiVhnZeEOtqxrmGgXVbn+HyvVq/CHqHw1GrgVrKahoRmrhHa3NvY0u8zMtNPAEBqEmnZ+7TYNWQSiv2+RkBsf2yA2cybW542zcimmkxN5e2cchOGRkMtFybV7lfUEdICZdZXNEKODIwOMRWMLRFOYVb2I1FhJtYLXhojDAdwz+rI20/rstckb6MJYkH/lRCao9ERqeYiJAIv4pEGZMZ4A40JtlJdGmpEwGn+wYgKrRKgi+kSOyQyeJsIXLaI70uUWBgnjOV64g9di3I3ssyloFZJN3Df0RK/xs1z2Ry783fhRyQxtpl0s97HBUSDyPWFZrm5Rx8LqFBZTmaKp02jR22enOqhgyFil11XeFNOw/N4dtq9oqjBt1GhGiRZMZiF6zBtk9GNw1Fe0/N3LLQCFuRx75GfRVNlHYmeZcK5hPkM0VLY+HbrdB1tF7z2c5buaMPNdR3rSh+PwS83VXDzpqmYHyihT7eu99SDYuJgbrfUee/C7cZx67k3+2l6y9H2E6q0d1rzfk8CVldR7bAZ9xeO8m2r69QL8Z4QgEOaufU/5zFWQVx+Ver/MAYUzFjwghrPsz0mto3fSZrTI6Ycrp3sqY0NRF6c0GaSuP0v1eXZ1e+QXBGivu63nuPIbSxYvg/eKN3EimTxsYG4Nuwqr2yPSarmkrXQ3o1/TCtKEwbWUJ17aw5ULeBK15t+kCgqps4FAP6wSJsIJR2kTXmaNMGkhX1t3D/aVyeLNt5xSe9H7Gy88qvP1iwovTBV11Tc9In9F7oce+Ica/PPyIf3j3Ead6FGVed8f/0/IN/pWfgMO9GMpt4pf7xoyXdwV4VPouJFadnN8mn6DeDhWP+CQxajBVnfgqwARZYXU4bLUotMk9dGZah0ys+YFB7/LMqr+dGc9/5Kcu8wOA++NRb5MCZ3OiOGbixHlW757i/pznlmiC/Nm4YhoMYNN6hvJemWh6KfeziQjZks0GoJkenjOR9HQWqWfu8/cT/O9l2ayO+3sPgbaXqOUzmQVAOntjp4MvVPHkmf1SouUksIjEUA2E8ZoWwXZAnl7nTN1ifYDBDLTFPM3FCEelgJYFfLOAD7rpraiBfyka+hUAip+h2k1uctsTjOLtlXCQm8MlUYNqDLbZLXjMkv0TVsqlC7MXX6tfNI058ooOCGtWYXsuNYo607zwxnDqRhNSTk/C5/gChb/9xG4suGRQ2HjKjITQDBBsjmOtRfYNMzwaR2yD6ToDoieD9xIeMzUuT34D7hsg2/nbv80wTXms+ri3wvO4Se3oFrJem7ReCptK1ZDu3qgECbnsY1dlES0AZFOqLNxTp2t3bfGqJtcxedviH3ryDXjovbs36LFDldEde9P9r2gIXgtg4TYiqwyws7BbzAuGh5sd4E5nuDsdjucQPzedH3/YyDGGqZ99M8sjZXGfZ6cwyRP+1T6kC2C4OF0ytnPmPGQhj4d157Nln6t48p6BbUWOUj7LY+MpnEft4zFEgbBri+YCNN1isXGo81gzmKsB3e59Y6yNE7Baw1scBiok492osK5Y1ZAFqPyjNgrKcoNCCzQ+O0BALYQKTkO2yFAi88L1gR1EE6XfgDb7ppMNJU2JqZ8L7Mk966sQDcqmNO09nDd1wQ1IQ3DPijQStNDaY82aOfFAg7ejS2qsxgzQD3KIAtfiG5cYvZ1dPO9pLP4BcANnFVkvbIxkjtp9EH4NVqOtsPHARPmQjL4oGM91w1yppSELcj68bwpiyLy1qqfxClQ9TcA3gMWhlPk8QQzgD60/o3gpZQWVqsZ720XOsu9jFVzXTf5NwHsA9zeIxwaJvKgq9jZ0BkaiGYKcX84AnmBymsietT4wnYKcv1pHtxLNqZrZ+I8+F+pAZYaES28ROazO/Y17z5Flc2rvxH6Ql8S2RahtqiFWz/OqnufMwLrKtdIiW/ilKnLao9NwV6PQnm3+WQWRLW+DlaPGtyX4XirU3kwYbhW+UUFk80BgDhf2p/OcWf7Es756emuk7ikDF2hU3fEqSQf5ov2/kaZ1Bp3dGSWPY8by8NYmjV97emmHJYXzLdLPQTtfJGWlKqefsaFb7GtrM61986vpm2v6mulqQL+mV6TJpHFYnEL7zeFkY1G2874UkE3e0UK6+dnmPsPSyTL1k+a22NcWHvy81lcuhLX2hd9z+VoDc4b9cqLiT2/A4eOs85reJk1x+gl4JNy+K/jD8g7/dboHiPAfp0/4n4dvUO5uUT/ft+ym19o8e4UYxM3T1CI02Tz6KIsluKG2RsdoRnRbwLLhZ0YjAggFXGxhg5vefdTMVp/BtTX5BPp1RQb4ISrsfdabdwv+o34GgfAP5T0A4Ed+9Pd6Wjfun47tIyvOYxujf8cY8+Y8s3Q2b27HRJGejkcKj8ICQNY18321VQca88zA0t+7gxGMEMhjFXz+Xj3PI1gEQtUJ1LIs+lhyneqpL3i2XsQQoxljPF9+N10wWT37bcrjcAUE76yrXgyLT0RP/XM+bCw+TbymN+GYIXX28cb9bXjsx0Wc+cbrvYDpm8yMm83cSw5tY9tSgHJAKQtoWVAOBevNAiwHMZwX5UnuGVfAC6ELG29w+059C5ke2geoYSyMCabWRbpwR2BZSExN8ZCpqh7M0HHQTUVW1okhXlNayUErFu908o/Nk71AcNL2KUl+Ow/24Ogkfc4wqAE9OgFtk6AXUcK14iHyO/dEnxHaMK9VQ8slQ7YrKiwgZT6muBDbDY90aKHePXfzNpe13W5nVwA40shkoa8LWTgB/hLdxgxQXd3jGHJjk7bNPQKjbmk0rAZqCqEQAvqTGvzaWbopAlJvM6BrWHZro+m8Nh5BAC2g5aBGOHsXvWClfd7GbEz3cDhdC+W6t4yj0U+fbTZdCBX0TwK9yUJ79eYTCFSpbSr0DToGT2CSdkYrAIshzJ0RPbdHKx/OWN7ou7N0N/kuqBHjWztDtvfmrP2nXm0MVhTTAmmixZaA5+NUaWQwjBsWT8cjVuSx5qz3krQ7r9m53yzP/lFuHHVTBaz1VO5PDCfUjLDOeE77fnjuGztmBFDgIaFcporsFH6xtEguZkw3wzuTyKxoOEczoDfP6CxTrQ0VRAW2aaSQRIIpWsa6ru2MYVikETNEMQpusegGOZQixkfVd4WWElI63hbGVGSCKgdHW4/CMeMHnbxxxtQ/6xEAYEW/wRFOh60K1q7WcUbcnMWC3JHmhK+25uBdm0Ks9K79DI27HbIRoF64IDs/uzjfiRLU2mQtIaZ2KoTqLz7/MybubQpwMkvl/nGgKW7jO7Ntedn/kerfssdCwm9XpSF5pfCqvZPXCj6t4oR8sm4w2jbQA30DLlvBBLxD0y1tPH2uYjz/KP1I9xVEC4gZdYVHRxA+a/gxZNw1BLGea0YM44cCWfOmbj/UkXzXTzDyudFHYojvMGtl7cgNCccOTHvE6JkKapX3HOo33UD+gnz34rgrrn0Tzc4dNOjlZBr3ges6r2J2UvEjGKqGmK8VqBX1tHpbofIOTj8hmmUcc0ZbgG4YiWev64uiuzuRPw2ywi9mjD3fnxXwb5C0n7fkTXxh+hsYux7ns3cxZBCl9zxc7KazuS5WFIBNzeJZ+nLCXyZZlweprjPq3cgN0wdnvz/3zsrZoLMcXSeWFXcTESSyh3uZq15netKr5x6TdHY9/WuMnb0043WXf3q+jDfG6cCj3rLsNyzLhxA1PsLp/c+WNngJMB8DpnLQm/fmNf0G0tWAfk1fNu3poPGdKvwlK/3oJym2INt7ltskXyc/ZJMywpt6oL9KCflayvg1fZUUvdCHiQ/jsa64LQfc6KLZiRknVAl9OaWjQB8rhDMfIV7o/m6iYMVXnJ7HdWRIuGCChHSsLAtilXRh/GmygjKdyIWHW7pKyHa4K/4IAP7l9JN+SninxlwG8PB0msDP/X38zdd7z7aed4tLG9/lvOcf9vVdMidntIWNjPvdid3I2PKT+aLIMxNNrl+tbW7BtfOctGI6l3fy6iz7XTHQdr621bjZxDE/irJpC0CfhOTKJpNlwB1bYr62hJZgf063m4z0xUlq3qv+To5VoaWgLAvocAAt6oV+WLwp7Av9IQxtWDjsYATChjht8E4/cR77k2JD0eG+6QOEFW6oiOsoG3RN4Sp3O4F8TdztlPqmnGNURB7uknOWczwuvu7C8m0y7sHWc/nwDZNkg7bm8icrf4Rx8WeXCV8G0WA36noo3G/yiHlMgW3M9XkYQT/VjU9Uos9VTCqUvYmXCJqtummgEzNIVRtzSoBi/LIxCL8WvVh+2TbFaDt643lEhvb/Wc+l0F675vh7OUNyNYTSmLeutaaaccU2oelZsK1+aVRjKWZOrtCdil0bSAtvZPvy/ro0UWpfBw0n2Hag2Xq/bTjm8bvh6INZLXv4eB6+Xopd3jRchzyvre3SrFOWZnKvNFkKktDoetQJhWuP3EIWec14RpRbVnbYNUtN+se6y2GBRFjhFnEChGZWr017pMXJnKucic7rop6vFjY77JY1NNqmzw6vMrZI+6dR0xgDRFTerCRXXDbHzgrOhhYwCNaWmDkY0UMuX8RO3w0DK+lo5u6cUzGdhltEHSagPgGPUBioiQYtr9sn6bwMjaepB3KDgVrkbTeUEbpx4meZE1AYpbCGAZdCWrCpXqZy0UqiOme/HDYHqoG0rgIIVwCrnoG+VvCpSth520CgsEiTgtw2eUOab4VvPrDNlkQV9B4oN7oXhQD6jkCf5ZtCBXLKBIHugXUFeL3VCsIGl6ijfAggEED3AWdbaaqvmhHeXkZllbVaNYAS3DPb72fqIowvFMDPRjcYrOwgIONGP+sw5haBbia6gSAwtiWOZAnEytz2rJBs7mhNDe1dIWehr+znRjj6hCGMDbdcRqNW71b+usI2F3oLotNLxNPWZPztRNwFKbTngmwdHAC6qFrPqjbxhZe0603xcE7DuSRNB+PLYDE+1AbZG5T71im0dRgLQV5/eTX2V5j2EPaFkTnd5HRNL05xbKgudk3X9BbpjQzovzWCfAthH8v5NaTIpILwni4em1JL3TMLS0e2kECUvk4zuGE2Z0HBos+YfGeTwldT6tbE46XfX/L+rYbXb22YfulkkxojY1/1+IQ/PdzgHz98g+PTox/Ae1g+AsdVBLgfx6mzdhszB6PlVRYOngDcLEEJDosm5onO0PDutqim5dkii3o5AISFCt5Bzl67B+NUCCupm0A2ojPGNgIiNeIKT5zcMZpTEwGnY8XNjYznp3UN4DPu1+Dta1GwGc1wPhtrO3PslmxFcCOfraGErJeydB7uAr67TDsFRfxmj/9DgD2vE1o+Ijye5Bzpu+UOAHBXxE35sxuCCe8B3JY7vAfhJhTEAL7XCABEtsFBfdgO1PfBFl5eNCnbm+BqYzneI0RZMJxQj9/B8pn6Iz7278IEJXu2DuAZjR76l7O+GV5Qep6uPWskQho/CYZz1hfjxojU/lnn5CwZbFtgswc2Tsxb1Y3nC8pSQIcFdVnEGEeaj837VbumpMq4r9JtVOY0EnmpfxIXCvo2zFprBnOCOWaReIaT0rsNsRU4MrvXOLF5cnLzNNfxIcOTcWRZmlt00cnr7wwGGczMZEQkMICjhp4+FHXW8vNBI/3S0Gc/6stvO70rYkThCDyzEw+xMAoXUS+bLTh2UYRaZ2U/KLkhdJYB8w70bzdomCImL0iTozAu+/biGjR70DcJABVQIRQ9f5UDmgBbEA+CkYBwUP0OHKOffJcl4J7jQjmhRXFS2NpGmODxqkZ/BtR4Tq07rL87Q3qkqQ25OmvGNEMUfvGjXt4YO5Kqua17GIwFQCUP1CNRewKCGE3/gS27M+QQWXOLjPW2gdGTfID1Jbo55UwNSRtBo4eu7vKlS1PDmh+5fG1SayCboca4iYD1bPSd1BlfnqHzbKVICpck5U82fzS7kPyO2pnVcb6KCY0T0OgEaNEfprW0b4nEE9JCt5MYsXEooHIAlUWN6EU9JiW/ySYPKG4bwafkw46O5hcu4dpLUZpnuHGePLjyquHBCYQFhYrijoDCWI9i25IxUES2Q+jKu9j4eufdyhCj/clJ3qNdBOWlNcfgD/yR0fijbdKaiYmIDB+se0xpMn6UXsyIPqTMnrKMyesXXUQLfVWU/wQdlisB/AR6lEzSd2VSHjkL6zSLqmsZMbQ3UTvjOxrWJe5AgKrhtO1vVA5DbTNfthtROCav7QsR2SY/BPO25lqx1hV8Yg3bzjI3Ne9IZb2qWIaQ7QrbBwVgMRz2BOaT5zEAACAASURBVOC6YC2ABm8oB6GzQgB9K7hYf4SMgwqsuJO2UVG8tSMNvLyPPoIaXj9U4L7RLjjzGHvX5DwrxqU5smWlRctqeLQyvcvsL8vD7j7wFwvVLw0LIEV9IPK0vh2Nv7VioryMbex0OwM08SFy3MkXpPmYOXiLVxnftYZzmhsKAejZ5rFoQ1LVY++sI0xuFQwDOOgMrawsw/Vi05hi+bOUtrZTl+15KfGKXMYmSCr7DCcD/wH6Rk/KmvFSzjS3k3jjeniY6Si1eatMEIaNSLl/dxm29av+4+sGaNezir2f2zjTGGeAydIB1q027OTL7x31PgBSRuqfR49fbSNpOy2KzPD9lnF9F7BJtjObFs8V9zIHtEsR+cZps6mZ/+/Uv7chaPd+//FFyb/d0H8uTbusYW8cviBdTB958MzebeF4Uscz2N8XS29Y925kkmt60/QGBvTfYmeZ9HqBQPlVpKDMg9GWcU5oyzkRNzrhZgClipJczGDBbc2CmwrjiyT2VyRv1TrZd1O3n+J77AGw+IDVTuHQGVeatBcqPjmQ/2or3wpnAq0OKPic8ER+nejFJyq09UF6RDvK/jX9LGnPC/3piJv3Bf/j3d/h347fA0+Mz4cj/vH97/EfPzGA+/47n/goXRwhiwgrgLLi7u4bPNLnBMCechQmDyG9Q8GiSvc3YPxEEnb4eNBxdgzFzkjUknp8dcnYgEbEs1Xd41FfWBjwrbRAznwH2hiNbCanXf10AnRm289h4RwvIlLy5O4CvjAr12Hp+dpwQ/3vexDuMab3upzxfpz+h8/PICA25ZnNms+0E/D52vq8pMounrhNeOmMfijnI1tNbM8yqLaSTa1A9gyRHlTOZVfZ+cGS2MRFfuZVyEVXow3z6KnWJGH6PpTpBs7SYK4EX/gHAWTnm8viv8aXlfCYPPW58vo4wDsnHsKi55izt6udVswRt3k8FFn4XjcWaWzdldXjvCzyHQXPphWsi78BHwCo211DoXTVT1j0iuLaSKQGyd9FWHU2nOiEAlkMlm3qfpyvFKUv54+ZZiYMe0JivjBvAKQjOWQnAY9/RBIpt3DIrx+TLZzWBsbCDqv5BXGldk79oEvO+9ONSUhZurw7yUiaSftc2s9soyQYe6hBa8NZXpGeT1yUXYhhyq6dqxKspW7oYwAo0Uux10G7Z9TuW6uoGeUIiAZx8eAzi0jzNId6lwokBbUEr1JYG2PNiS8GWWbGMA4bIprhR/8Gz4mkf9hwMr0krUramagNDRxL8v4T2msGJCbV2Y1v11hHRWXbuGdw1tAN5HA2eszN4Onzy8XhjKbD+M44I4HbaFTQwkMR8ik1T/yQslTqrl0epRaEARZ6Hr1FLRS+l56tL+QPCuYF9O1kJYw2jg36JDO8+EmZLttDxrjw3o3LwAeHsvTdomGyC0R+mre2ep1zWcB2VFkM7U5m2BNeKiOAm0NxpFFq8HRGJ4JKJUOBBZHWzQZlEeOjo0jHuYb1rreQMU4QfkXCOxonCnVVkZ1kOCQWoykAepI5Mht6DVu3Jt+57w/H9dLzQ+MTXRSU2vpNKxC2UhUl3PWVs52x5z0RxNwJgw0R55Q+bjLCU6UQ3ITRzr0X3ikdQwAfAVrEIxfFj+siPqDpYaUV0x0KHurkdM1FyYJVZlmY9dVbRViBUlUmVEFpBVBY2akZHQPnddxLeRK9QHgt6b8nEmM2VwpHtSufZfsWvtlJQnqvaFGflsZj7cy+ym2+WCEbQRSXVAjEukFsJfC9wFF5BfBO2Hsl8FrAp0VPLCCVGQtc5wUDdAI0IoNh1PsLBNdlDBeeFC9BltqvUU/UZOH9UeFHwqj+xRavqPMErq0POu4daDHSgL2zMRGPDOiM0pGXwceV79/wMsO4dAqyooxHnWBymLmG9wDXo/ThSc875xNQ9Y+Dd37H2BRXrgOYkdx219aWx/n0GtqljVoBLIfUTkKnb3TyrJcpY5pxjtgn5/KGx92mhtnsaSaxY39Myt8CbxeQc6nP10cKC683UbdTD+9dqzyaZZgWyf1vBxelPPm7fVyw65B75VyQzoFx7n6Grxixw17MjOcEUB23anYytruclNFX9LrUteUMPqPudVGBXyNlPGzhZWtlJMD7RijtU9ZV0PqVh4cJjh2ARMHSTwOf7or6Ig3aKDbIAYOHTEfhIKya/rJV3nlOcE3XNE/XEO7X9MKkzMsN2eFcLf31GaUpX8bb43laSbtop0/pd4xO6eeBEeruY9iyt5VXZJIIMyTogqMZ0MNuvQapTAkr2q5bX1QnyATIdv5q+7d3+8y4/kT4evO7Gczw1RCm95p+mckV3M/4P59v8E8fvoOdw/mXx59we/MOoHv4bu/yWYjr6V2vMC76dyLgCNQ7VQoWK586HcJ/9fg1PxQzeKEzAQ9gfKNbTQDCNyBUFHwqhKfDUSaptg8mtsfSEq73JlFmRDfYSni2hbOnrORhrofuaTvnJilxPSru8wkb2uU+NWrAx3jOmlxr+L7OK2ADpjgnteIKR3eyYaJ0dxBP88dVzou/VwAe6xMIhNsintLfVzGr36iH07H2Z3vflEPfrEUrjWeczyZuM22zY1tbs+OYeXYdPzPZEupLZ0Ob57wvV6kBnKvJFW1PXDTp5uWsTD2cVVriQIpgMoCTPtYz0XPsXaT+7pqubdlaqNkMwTd5HsacQ2pNM3ESNgP0cybLUBo88Q+kMpLck9UM56TnopIa4SSMaDjDO/IiCs8cijSAVI7KvrgiG92otcU2vnHGmXq3dwsmXry1g8G0apeS7NWjZjx3r0UuOKin01HH360ufK9V9JiieJEqaiMbmHdC7iPJ6ToQhw6DHj+rXVFRcHOA2/NqhUYr4cT3qLUPkYy6LRJptGnPaLs357qEOf0VBTYvUIHUsy6905VTwwl5PNmoIwJg442mm7WyCDU0bjLhLUXdIy8VAEZQAoObyANraWfEG/3PaC78FAuXDs9vhuzO21JrcBsP69jyWAbWIRxsmXmiH+5Jx6SP1+ZN7vdK3AwNDd1thNFII51neaagHVwyHH9N5TUdODC8mT5MmYbsuY7VsDBjXKvjZ3DKV7Tqoj25agM/fmLltmmDWb0eqxg1DQQzsPkYU/i5vw0fTNSh5sO4R42jDNQ+jQ2LsoHTN3Y+MQu8bMPJxzMDrOONCKWPSq+RMdTkQU0meuhoG3NsZpFA7DxcnkmX5kz5pp8pvfcCrPvJqeNxu0aR/C7wqGldzi0a8/BPG5/1c3tLFRokFl7pw5NUtsofE4F9TC/KQ4BSGn1KtyuNdUZk421WT8RDa4vRR4djC39itMjBIG2y1XWCxJPsO5+vqkxVWeexHm5bhQwAj/r9vbbl1oENuCxoxmMtPyyOtnyh+cpg5exlexnaFoh4JqnjTQuWQ23/jZdI4RsKH2sbjZ8QnBeRTpYEN3pE1YPpTMU3f1jIcYsSwJ08piCfjUdEOQM1Dscsdva2GoapqmxV4zkpkwg8xOjL6azzeGSAzGje/zYvcmr82PBSG+9sf7rhiez8agln5mPnE1qfg4HvlCaZQPWdkIhugiMU8EpYq+BAvPtXJWkNGe7PF8GvGc8/6O50arw9wul4ft+M+3FUERPwoOPmPcl++NBPbVue4JrI+sImdwRmO+jH1puiRAmbClpHo0vk/zSZFsO5dzSRvlc66Z7baxMyHNsUs1pdC2THvZ5vbuea1yoRbiSGP7iuajhfAZYd+hRotsn/GiKfGS99UjgqcDgAxzCPjXSf2ffpmHBEalTnHg9suEvcwbLUwBvTMNz07OX4PpU7E0uULmbfgQCu4x7FSTFbS5IUdZzNdCZDOuZlc/1zAHJLdhtMNAIe507cj47+fQdR+4kbUow3R7k3rSv+chsned/rRvOm95Fu9vJ19z2ex4wRwaxHeWX+QCCV7V1uzhfxPtdTxrHxFmmoW3+7+d8Osf+S0owmePLiXFuy6vJiWMKRYp3RO2SasJc50donNpaiXjXhJ2Ej+ZunJpgjYGnsrvBNhA5z+H4PtL8FWpull9LKNb06XQ3o1/QVUq8ITXUBXai2BV87p5F9Ip8TNUW/Tc3QvIjan80rzkE3fynKtelj13RNXTIvdBPUkc6OJxQQ/tvNR/zX+gNQGX8s7/Dv9T1g3uRmzVnQjLhWxgr3Qj/+8Fkm/Q9J+bH8uW7Of9zZJXW0+fVHFHA54Hg4CjxmgI8KSPQgn9UF9IPJ5rp3IfPM5gQ0z/OYeON6L9/ec2tsdDAtKW/G5ayMWVsvgW/W7q26pgquXdCkrHAObnyGSQjHvqRt0HdfztIWQvLKQ15UmFQ0tH8DmCmeNG9WnnPG7CXuzzfqsEkGARIKGBhVKN5o7o4A6i0irZyZxt95y5l4anhhkJ9RyF29Bnc0utm9bgpQwzlRkUV285Jb5FdCzuqflYMFbpC3hZBMq0Nq8NawoCGX5sXUvhP5Ta39Pma4Pcv3Cb22QClewUDz9spwVfghMI6/yCkJs109tHs1YqHfL2fno+rDS8bcbHII9N8GGokvtvjBkGKZnedMuOxwmIVRAC58xqXo5vDcAVGfw/it0a23J/bRBG6gN3Yrs5+hd8REoDf/oeF7QtRRY132LPSpGcrSQhWZ4WlYxEvg5A0v8VmA1YwZZLjUvNmJqE/niK4Zus3YcbloOC9IBD0EM+6e9U6xYs3z1RpWWD1jU57OIJSuO35CeoYzwvM8JsNY2pJLEciZPOn60B4aTMKHdGeAshyGhUzuBHc26Iai5nhvzwTN+3nePF1c9BvWn3E2y7Cno3kauHh7FnHutCd9SVQhYdyrGs5tE1AKca7lceAPjTTDZgfjk2YgyO3y4nYabjqDH32g/KdT4Urf5J5ttYedi3ycOIR0O/smFeaeTbHCSfIN9WQKECbCHB1e0+uZjSo/etamddN9svzjVSOuQOZuHWMKcHYh8Ql938V6aPLc1j4iMIE2jCaNV1Lfyg7mWG82UKlh3bYTegSbCok8wGrIsVDtysbacWUCP6n+1SL6MEZ+fysf/KiwF5JIC6RkSQB9U4EnAj8Z7AQ3PJujw7sGo2+wYKBtSwmb2QAwSPa8RLEQWDM7LiCGc7I+AUbdRVekWH9dxoT34XY0dth4yOMkVWMwdfrQFkyxjNDHe+yWz2UIWZ2dkOt4bVSwRL+owO6CXCzM+QqAcnI4iLGrLnXPjdeturbh+js1T/VLYamhslI2s3uKi4ZK/5eylLEs1U2e/R2r/OhXA56dvpBK0Ap/Br99aRXPSQbKZpi151Yc2nahHrS5YYJSpm6jduBnvL9F9ppemWZ9+EXHyW8xXaSct6xXgr+mr5SuBvRrel3i8UbCh9EZvsejduBzJQufSfP5ok2EfJYTM4WJhGWxnf8zOGzutdWuKzO+puekbs3hE/7v+gH/uLwHlgIcKz7zEe8+foOHnz7DJ4Y2p/NwotTOA18gXJohu6Grzu51fUEM3dTKcv1Zx5ctVHGLqhCWP+DGIgDfEPDDwlhxaq6ScSBE5eSI5q0Sz2PLuCCIcfxWXx55MpY37s8poucmzjHFOit6yafrLt4PYd1tmOgMu/VndW8ANlPuIp9JvHBWz1PVA7F1UvdoB2QzozJjLbJr4aCe1d/iVj4tN11xf10/AyAsZQGhnaX+iAfJsAbadHh4hGu8SSk2bNLArrxAQ7bA4hEXbJLYf+c1M7qFsHE+HievYzkuLLrs3F8T0DzRLdTDMVzvpC7cI7bxN1vbnD2YeikIAUtIyEzE2j7zMHcZuXhoWZCGxyxFjOWLetbaWa1lkYXMAvjOk+jlGtNinuqGw4BvD/VKSsYcNjY3HhU+6OyTphMUdeZpwX5ZAygwGBIm9UAtGGZRPkgEFN2Zv1Zpx02iJ/NGC0tt0ixdoDxpuNiiHkyWL0ZxNT4LAE9VFmpvteBV23v0xWVxN1wOjKrHRXYosIsJf5w6DgQYhmK6u4mCQ+F55IG2GKhni3aeSjY+zFjJENrpeIYWRtDzSOPCD9A8tBNcvmkk6HwD7JPxYO2YsRq9i00d8UDtczdUNryxG6oRHL+MUCN+4zUjer05tXP6zR3qxVL6S40IBlUP4zsDyX83eE+XzHiu0G55XuX7zqv6wuS0RglHSLRi7W1zDXb8cOuQooV6NKtAs6H9zXtV6Sx49HV7IzLfnfLh1J68zp76r+NtxjOdDgKTA7WoEB07zXgmb5sE2CA9kUFNgmRhd1mGcljUJ8z6N8KeQqvv5gWefaTNbnpmWS577LNMUbSRb1JX1A3i58wuLFpoZmio7KLevvar4ZtphRgQLYS10YDSrW12jRUNTZ/xOoMv0LG3LyiS2RM18u9Ov619uyNIClMfYpyxLYxyOVGwhMKzp9SMH0aY9aZ5/E6qwdiM9p7be5eXz9kcFIEyfAu/EVZzC9Qj+DHiqY033yQD9Twn85Jm9GMnM2+tB+k2bMYUtijRKVhlsfFxKgGnLB7VDPb+5K78juCFJyK9iobydO0kYUZsN6LPeM1t6vOmxEgUduGBBIBWQj0y8GT5Gw0QALxHi/afscd29AEZ8wdPaKmxxpG+ZPOc4vOD9t99e2vwNyqV0PPWRxz4fDsmII7T+BtS1n98UwTBlWMgyD4ev4+k5fSW8sQ/rUaKO7UXqy5ULH09trlC+p6bTOvIrpcjfle40c9xAQ7HDi7S/L2sym00YEN7h7azGNUdl5rJjOoOO/Udb2lN3gDn7Omub0RqzDzvXBmT/hyypMiYgcb9fh/IIW3iuWVI95PiOpqL72c8f1LWc9MMT5mlvaSMZ8MR65/oHMDYJ13/IeFxIgs8GcMbj8CZ63V50F9TS4M20f3kx8PDt6Cd33Ka8YYujfjlK96v6SumqwH9mt4o9VKe2c58mgh5D+neJhmedGd98bkAaehBcp3X69NFLmbWM0nDbjvSBU4UXYNibM2i28Z71mKT8qJt22jNNf3WU/RCT6n+9J+ov/ufsF3x39//CX+8+3szU6IbN3dooQ5tISJms/DaNqnLqdM1grLnf71iEUsoeg7bQgvWUoFlbR7kkmGsw0Kyb+krccL0xOPk5Zw+P0t77/fgyL/5L+fNiwyx/Bn8vJXpDLyU7hn9hD3hrBDJGrrDRgOYdr+h/k/zTp+ML9PzvQ6cIR2YLkR3+SaP/Jf6dx2bZlsx3EZALnNGD0Nmw0VYhCBAQhECoInxPK2PTNPQORO8dSFbw9jPc+3pakWsSGWthY8N4Z6xFODQzjmXM1sJWILHOVHwPFc57PKV4N7cBmc14Q14SNYeYNji1mqhvB21lFrT+6IbyIUKChVUZlQNAcpDx9ui4trGjKGVAOb+0BfaWFgKWs3wrAVrH0dhT4KTRY+Of5CrNB3JJDomIJxDmTO2523uuTXuYqEJNq9T2+Rqmr4vunDoi5T2G87BMAAsxDHs/HN9zlqGb4zh1jEORNANbdOHnwWSGeeMYVJo3nSAh2+MOPQ+eva612ccm/Levc81DwV91b3XI6QDT0gTfg7tzoau7k9xMfE+96NJyLzjWUN5tzYJuXFrZwRyIC0Bero4sYXSvgAMC4JDIamt6fP+OXl5VELmCm8/xwFfKsBF7RbcbFZGdjXSD+BzBdaze40TsYU+D3wgL1bnZKG7DX6jCTsKoFAamurJGY1ozO6B3ljcjoDb6ZOG6XalNqmQibA1X/KvCD0xD3T9zLT1/XPKzayjt4rCN04g3E/5cSA4is8o5Qvw+fCzD6qzBSqrZg3nKas1kSsD5YCm0+exoM+sO1zmxnyJF0Y82Ov8rMvPY1Fu8BrLI4XLPIn9GJ28ubQjn8CPPe9M2K24KCn9SamJL2u5TZxnWZGvIoS5cy9M5q1v46KSVnACHgi9HhRljdyzhiQf5djWb0pU5ZUfrxLGKVHb5EWGl8Af1cBJnNdYejz4v0Z6JvdX1d8qNd2vAliNd6H3QofqKV4GIDvCre+a3uDjuALR7ZiJwCct9xHQ2O6wMPQMgNa2OZysMF6Fbizm/uR4EY56fsRAQj0pXtuehRAH4L3i5j584JuyQpXeSTHfxm/OEzeL7fL9xAdnZWbFhPv+oQyz4U+/o2PVsPqR/ghmRBf6aOUN8jbCUyH0jCqy+xEvTBuIm22Sj/ndU73pGReFJq4cz4H45SYfW8+FdUvneBUw2OLEP18KvKej19cqOW+Vgj7pME7guhoSv3ya8uis17ywzN9seg4CeOTfLy3qmq7pmelqQL+mV6bpbHkna1hxiIyPze0qnNcF0Uc5TGvbTt2+KNfrEdZ9qOiEkkBVFxMHzTlMNqMeMjTryomv6YKUyYSA+/WI/3H7B/zb8S9A/YBTAYAPAH9Wz2cyQm+e2gxZfF25nYUe9Xdb8Sy6cPNev7MQ7z7jDytJzKhcwVSc1GNUdoDwEQWVFpyW2kLxgfrzy0/cBllc78rznnjPk/tL0rl8l5ZD6dom0Ys9ULy1I+pGpTjWt7cYMZsA7s29hsWDht9DWUBUcDyKwXat4rX098tHrUVCIa6I8QWAv673WErB9/wAP2sYwHd0BwJwu9woWAf9Ki1c8nAhKduvHB+ZYWaEA8OCfFzgzJ8ZvdgmEvNw8Ln/uMg1XYCDrXCFgqNHq3+aJsgT8B1OQivTDOlbXuiU/rYWw/w3El8AIp773cGL1taZZygR3ChuxvOywIVruQEON+F8Zc17OCCeh87qvd6cHa3PzGMqNfZJYb4lbCZiPee18azu/FYKxqUqoB2IsKBggRgSKonB6aSLecb2CHb2txj+7IRqqUo8MpmBG1q8vo/lFmDCT/XJUVv6znG+WtSA2TzPpQGN6mQp9aQke1v8Y+1m1m7Ub3STnx9ll3UcvWnYnAiaOJeMOIbGGYlrllMCD6YIExvR49tkVCVQiR5A3C84+oopa19ww2MBGGLQhOGBIbrfuEo7IoMalJGv9e2wNuhxQJ3eOSCofWfttXoovI8e3w4LNRzZrx1vACCfi+5jxtnYTOFUXPijOOZrXz9CvY3w271GXfL19dLX6HzM2+0ApHoM1D3mFa4Nlgk7Gu69GTP6zbyYug87Nmx7NqoIcCrN4E+1CO5cdyJ0A61wuJ/xKxrZcpSPSa51mCRI+f5SonyUUoQ2Q2Qs5wtqbWDbZGLRHgrrOJng0mp2mpUSezVHeE1lVufEonyQcattMLXySGih7LsqhPPWunp7pmlv8XYT/o0y9vSw/BxAizIwg41DVs03A8ZJIcg2CoB3/S91km9SYcj8tdEYWXvqAioVrKGmiYz2bNNNCeW38dyO57G8Ui5DI3lE2HoKDD8M8CnkWxrPJWuKlht5T8CjR65ikyBrBy/X2uGOvPCGVN/q5l7olnKs3NR/cSOK27Ns8x0l50zuhnPrYdp8H/cRTLiyp/nQs4g7aLgmAh5tkxOFbyl1lTCwEUY05h3fpjHHMZy/n2cfigqbqlq7TEYF+ohnSicjm/CCCkLRDXQGFgk/XQFSAzobv2J2XtuxLa/SOszi+xu3SrLDOid8CzDwA6suW4CPdqyQ3lNpe/QsP5tMCOLMx38vuxrJJ0B8Q6B8W0r4vAL4EI4IAtSQDjWkk27CUvyztTlV43jn9ruVfKNqkyMO4NZnnC8Mt+HeEMQaJ4pXuK6mervIJm4qhH1ehSZZN0+whvj3v+74Bht0oR84wLLH51+cuC9m5mHewQSgtmghHc6nMPHk0r5hTGUjb94MqUU62cLRJGUvdIOl3WyXlTeeAfM2dO/T74aa0PGdrTyeNfTHZtrqkws+yzznzVJAgm/IUJrbCg+fSMi7KkVS5cptXFryTWQa3+25fXdNlyWn8dk4vOL4y6YL8Hvtgmv6wulqQL+mr5xMWaI2OfRJzAozpJMZQUrLapuYPaUFHtPFugUHW/h0A4EpimYJ4qag5HlELPiarmkvbXmhM/D/fvr/8OF3/0u47RPw/foI3B2Ahw/yYV65mU0k7Iz0UC6A3jM8r5vZAofdM+PEtXmfheUtWZPSxTFfgIcsgFhaQ8UDnPogT5jyHG1vLD1nnF2aNy8qZNz6QlOc3GB/QpUnhzO4turZ6idLcaMC2oLlmJrPq11R/xorVw/lnk1vlIBIS3R4GdOj7d+hERuz5U063qnW5ElX9sYHW/2yBVKkmYxgig9PcHVqmn/jWbfAwpNxhTB7pvTXFTChdZN91IVgR1nceMOHA3hRYzkRuCxuBOTFwr2LdYoL9TRSZKNbR7Ax7CeH+85peKN/QjOpkBu3j7x66M+F4YYdphW1VJzYjGONNzHVUGgLSeqLz75YfGbVJpTRYO9bEZ/kMwZ9LXCj3zlu7ugyjoxkBumIxTx4xueGi/G7sDBojTMdy/BmXW1ywRQnlm2OlBZf4f3Q8G78yg2EzJCzS0OfsXk3ZaMxww1Ig/HOdMnQnm5xNNGvtbVrP4X2UvpFuw5yQ8LkUjOe62aTTt807MQNCdbWKFAY8HMromeJ0gaFzVXdOm7wTKVsOCds4KuHY9yQYPAlnMXnHZmSXo4MvDPIdZeNHqLBsRtZFD7wMavv3aBh/daySGQLlYs10EZhABVcqdUV6LgVT1OnwdaELWUtPtNZi9FRt5EJbUGUQjPd+w/Bq76KccqOObDMW/rGTspiYq6iUY/3DZb98jQWeMmTi8qzMXKOlH3TDxL+4s0yfujjMvCHmIPVeEQFcNl0EvkLyKK38X1SL8taIB7IRU9nVm3cjJ+Im3GqbgbfwsMleGMAJ829+KcFcMdSrlAjt7TBNqXZrxej+GBm3afCgQeMcI6HM1B3N7YlyCPjM12XzGTZpMSt4arvukgSxj/HbGNyElDaYFKvaELYujeBrzErdj6YR2e+3wCeetg79BNUZM7Kqp3qBJMBcd5IsklXpqkVVAuY1LBa28ZEdt4V+FcWYQPkd2iW7gx0lI3UF/DBZOwBoEX5u/FV3dRpG9xg55y3CbSrWsb3A6/rVQYO+SWvM/pczQAAIABJREFUQ0mCjyanbAMnhS4xC/vqfLW3t8QJ/J484fGR5XWjWvg26uHUfZTqCwjxsazvO9XEZA2D1jrKc4Ney2BgjJiXaSNJ1Q66VeXmEMAqHvPzVmmPMWTIQn7TcRfdvWcbBPbYbxhn6cFGvp2HTsP7RbX8QQfaLHvG9MJ3b6oDTEC4VI95qRF4r44313GeUfmz66Y2hobvVHhbldf0donz7wz/V6S/PD0Hd1c8X9PPm64G9Gt6RXqOxgO0xTmb4CBMstSYXVdwXUGosCXBcSI71zaavm+TKZLJVOWwuFlG5YLRzRu68p/XxGu6prS40y7/+e4P+PfTv8niyt0fAKxilK4M4JNkvvsAPCAcO6CFLFpW3mlutFxKU+Z8QmUTPTiBM1d8RsW3cHOHLtvJtHSBeKF/TyQLzXGo+bVWkCPpxspnOHipvvNsnYr7RbWtNQmK+VMZedynxaAOpkvgy5sfhjl5wp3ey7+Em5sbMAMnlp3wf1p/AgD89+UbrAA+qSfQR11xWNT7cVWPh9/THRjAZ/c0bwto7Z5RipwdzTfKJ9eKYbI6Zb958ctu06LO5gQ+4gIjfszjwSp2mjKccYJzQnR57GzNWmfhcfOiZK4m543FU/jDsV9EsYV+rgBuMZzPS1uV7giluGBWSjOeLwuoSGh2KkIftSxqNF9cXrItQhZdvSq6GAn15OxgD/AZrzIewdyOgVgiHzK+QmHFvm/ALRYstIi3JK8aVID9WFZeK+oinufudGUenVoGcwWzGB0JhEILGBV+9rouslaWMPI/8RGMFWJ4k8VQsxO3YO/KRwEwxBNd1s7siSQzcLR1a13CZb1atZNXLdPOrKmJHt1wCq+3tS9CE78xElAvJ/U85ahIdUOFQh1y3YfD73mpONuF9vpmBN34CH1v3u9xXAb+6eGv7TxWNhdpy2RGdIMLCqeFuM6mCepysrbJdMLucIDOII6mj5qMjYPWPcwLOnwEb/UWyl3ykUaGkdDp9l3xoTGO3ihcEqKMtlglgpfbN70zuKkXSkNfurdWxOY4Nc2VXg9lPhPuKmdivty69k97TwjPaPKNls0aScA3Ayh9dkcWuFOl8B7z9iPDiYd8FjyQnbUKAqj2qn/gw83gYXWmtue2UoDJ6cL6hhweWmSThZFfk22sY0riWlhoWPde9M1+lOrtMccsE3wfDxb1InxDAAqRbKw02lIcgdH1tBQisW6cH2VSmIr32YtZxs0Cnp81GHzaN9648Gu8B4EnhEq4ws8THcIcWz/l9ijuKotcrbLhgYyuaFEDu/I/riDznAXAWBpsJNo52bEZWPT86ihtrB1Cx935BM4/DMbIHYWnFDo1mWE0wgWVJQoVM4d9SW1zekNf8+wFR6goDOsZbu1a2mae5F32brxPvvW+pOaIf1HSD31sW7IHCQ47c+tdqiB6/ldlpg/abyT9JeVFvTuV7VyQIJv8tuCNLzjgKMgOStl9nMYXIT/LBpHujGNfmwnIKXqmewUYVUspzf7MqjM4IrVyzjieNS71bdZ5mWVzek5s+FXdVcJ9SD8U6mkkTFadzAhNZrdCW9FQWeFlZIajUSbifCHwZgoF8Xudn9/nMtp47MeElRnfhz6PuknXoEQHXYNDOZm569htfc6itxlvs86XZjeai6wFQmdUCeAjwCRkrxEKHA5u9Ga01MMaUjf/bPW5eM4yaksmjOIypB2mkb/LOItdZHOPPF+OGyE7+tZ77ufgu7Ak7SvC13topzaF/mlVz+rKAj1eJz4zi45wifjOOIzjfFpAgmmK30maMtJzAMY2XdKYM2lruDseaZ5vlkJe7i9SnhpoCgk/b9Cm31zaoPFh01FKF+si1wRgG19Z5dLfEeu83RfXdE1fIF0N6Nf01VLbYR3O2rKJGjNQVzCvqLyCeNWFV04MNMwMqaCPIW3ns+pSl61eFzEGkZ/hSq3yqLO5MjdRTJ6zuHNNv900m6gx8H8//4B//vAdcPMReGTclQMe8QDgI0Cf2kT1EaOGcGQJhZznM8Dcs5PbZTfvYQBcsXIFq3dnnG5RV3D4eKax5DnGnrI4GzbbWtDL0v/P3ru2yZHjZqIvmCWppe6xx/bueu3nnPP/f5kv6/Vlprt1qwzifCAAvkAwMrNKJanHnewuZVwYJEiCAAgQYBAUYGrSqZ5V3/knq6ld11E7OrG4fm6qONP5UsPjtomdOOnKKgK1DkD4s0hGgSMAxjrgUicUgEOBUjuZFEm1rISnz0l1cf9CyLPDkwIrK8847wqso7JDv1XmccK/zwgjuivtd4h7pe+E8rXTOF+1nSAPJ8jJ/toJIxTnafDEh1fzOzeWuzJoN2bOe4GhfDXjIIEbU9s9TriPHF9CMafzvT9rMEtzh+qGrW+QPmzOn2QbVXegqwweT4bMfWcMoE5ywqv2Cm+l4YQT/rR9gopgC0XDVGJpamtIFdSIOeN4Fu7Rgozm4gZvRV+6tnHZFaEUO4W+h1Z1pSbLUikjI9+uVIO6nL0aWd0IUJKPtQ9aKF5pE5cbxmMT2GznMIZ2jDPoqQynKxFuqBJglv14bjif2jOVZGiuhk3upzB+cx2Sn7O36c4zHbmcNvsvPNT9xQ7O2s7ajKFEngZ0qtM95ALsMg/8uun0Wt29p77cnQl7RG8qnq7zieH9Zfyeab6Z+ZQfpXeCaTjUXZ6YDk3oDF17F8+M79F9VGr5fVkQNutb6L3PI5k01f+0iRnP2356mtcvb3wYNpmxAaSLtVWuAXKVU3ybdB3M63mfUsbF7zShzvIXKLSFC7stDZu4bTLQseNrxwp9DKUD8gDAx9w93psdYUIybbP8c7IT2Cv6TW2ifhhVmwE9vGZBUcD7MP53tU1oMwQ3ZGxtD/ukke5eo8AEHIXOrvqTJ7hi0jfeeOKfVHkinlORbpxjtqD5/nmSo0A+AvoDPXLi4BtxPjr8tX02XtYnuzE77KcjulmvtRTBPKIWw3ys9ISf3R58wcrtQyadETm6bVRakV6hDWWCvZWTEtP0izx1Nf8EI2T7w3zPkQadhtfuIPqsbV4XLwrso7Eg3o8usuMGIZjHtczKXN+lSnxEZxk8V3kmH+NmxYHVGmGVb9mEDEvIbf7IGZ6FbweAM210JWOn83fxBnpYaWOaYy+l5PVASMcFJmCuQ12uFEE2CFortZDu2uQqwhx2yaoP+XWRuU6mNj9v6/xPTt6C51GldZFKfX2QYk1xjOeWYeZPc0pztmelK33/PdMLDseLtpPR5arO5kUb8ftOiT5ey3hPXyet+vamQbmne3rxdDeg39NXS1M+H8KDL1zCkyUtJvo4Z6hv0H4ei3hsELwKAdaXJVn5mReragtEX8ApABULOWa75z3M+yxDp56XF/M7AfIFOuWe/vsmD+MO7BU8n/8EvPsr/P3rv8a/Pv4TPn18D7z9W+Djh5HnbB8+2N8ZGbV9gbvpWDc/VoWLLTAj4qQUQdueKXDWMzY5WXBBCdFeMAy0zRQClw9okv0jgBZj1xZvl1/flJar5qOqC8y88r60tvFFSunmWf8KJlICHMGTlFT+TKfL6iPMmWJDp8Mr3px+AETwuT9CofhP/QQAOPexxf+ztOJxnsfwLU74MBApdcFmGysijG+3M++aKVJ6wYVeOi08QEqDq+Hv1kXkEo1IE+KeuhGWF3t8WJ7vu6oEl3WYq+f1WoFwt66KwDBqFUUgD0CU8RnAmwKQ5ynPdmnM4HE5PaDCaH56iGvgBJE2DDmhdBx1DB7ZcrlOP0jpN3SrijiTT10RaF8pfdbK8ISxSumFjudd8ak94iTAtnVzUBdgU2xWbhwl+MoMUc2UuwnfxBScClHBa4t88yufk2Ba9RR0lsaoJe3bvD5J2cRSyWEfZT4IoDLONu8CdD+CVtoUgNyTMT7GLo3azVOP5ZGKT4ma29/FObj3qp7FLvBNMIx5Vld4tcqQ4VxZ7OM5mkmaB4WForabUJLqUJJ2wTAqMQ/K55SMwAGS5MfYnOkgeyNk8rfAxZ0MSc/jXaNbKydt1KgEQ2KaxLn2AMS9SsUjONjGtZhGStWPfhrdV5BAnZy58l6jXJuIBI73r3vgK8KQwfM36ndaSs+I/lY2tQ/Rvk57srn4jtlfws85aiHTx+v5bh4HsGIV5AUY/MHbZ9E0bLhD3x9aeZkgcH+smpKeM90HhWy3AWoSEQK0SWKbCkCbQrvsvcWFxpr7R6askfXg46bbO59BrvI/pXun4d6nzt6ZgBu+2aPWHkZfbeFauO+HSymsmgfvqf2HGHbxJRDzItHF+Sp9n8l7qmIPpo+vzg4hejRovyOk0S87F33aLn1OniDYMDdTKIAHg41poMN7Chj2B4YAk695W/I8G9UrpIs5TPrBD1b8tg1ZT/sIo9xtcpjtbNCtPLYKjUj1zDsdp3wk81clkPskzvDIMGG48r7xUNUOyCS4gW95n86geWnjC831mjSgol79WKmYQD6xx7YMr3TF2PzMhNjnUPBgxxuXsSimR9qIyhDNgVvPqLERQsMVnHPN8OqrIgGYUdNviEckL2Pi0dLm1BE6ssWhF8BlSfXNQ0qdz3AAE7954xrz5x9re3P7Bj9ts/JKfwMmmIwyHjrd3e3/ncho834/84P/hiAKiLVBwRF3Jqx+3rs6rsiYH/KRxgGj/7mFGv9WPPTUCuH3aBkM8WIdr5i0azYW2fO827pPqQilPtJSjgJyGtA6X+ijGDEcGjZ5ha5gkjPUd+qct1mHSGrCDqev3R/Q9lnYpFL+QGsGTtsGnE4zdLt/sNgsuofH59IF/njBi3K/yZ3Kdpo3AaL7HSDrR4de6Y6fURF9g+v16PrxeJYAmBmveZM+y9vU6d1zvr1cLJ5S7DLfAWMC8aw6vszUxOa660bS/L4hOU7evXgtlfl7IFPd00unPf9Md2njzg2DsMpygfze0z3dmu4G9Ht6Rjpm9Ne+Gf+1EDYj7JCfednP0O2E3s+QrQOnHosU2OJ90MMixPkju3C1gLoRxUInNjOmK/a7R6f8+1Rp6J7uydLRWegA/unDz/jHt38AHgT43IFXZ1vFvwPk/fgFsEBN4Kzju/PiXU0hbNOvwmO0A6r4VTf8tYWkrcvz/Vl8T0irtdBLJN1dHKSjSovyJttk9gvu+CPtUM1zCOhi8bgCS5GFQV8g+VipYhz6LLsyhgeQJIUlIDOK3KKqD4tV7NBn6PDENe/QUJgdwe1KMs1YMy4lreu+naBagV0MkCzeyeo99nCzZ2d6p/tnNV/9DWWTECgyx18e97DjzboCXmv4ESWhdB5nnktr5nV+gtiZkRLvRhhy9oZk/fVuPpexFQWadtqARopxwQjnGOxek65tei5rxjmrwI9QnEM72htgxfw0+UE8ZLnLGjZHIOiq+NA3NGnYtKN7eHdrWP6tuLRH4qPp73AlElJAvZgWhtMERhRi8k1vJe+Us3awM67VySmzr+anDau2O46Ewl1tA0LEeJ1IGd69JpEN71qFaJttMeM73CO9t3EuMJopTt3zSSaORtN8/AlUU9pP0kgvD73ZGpXPCnn+xokr9VFcz4lzKB1XemjfCT8QmydhvLTzkEXH/LVBVJ8zKXxs+UPpJ1mZ3Ook05wnDJkMPHuPEVEzkraqYvV4l7jaA76xq1X2L7y508GKxh6zX/3gmnC2AxAGifB8Y7p0ATAv3/DFz4rW5sZRe2cGdY28mWV2hzvgOfaDPE4uUzz9y6MUrCoVeWP5Nw3+Udb65AmF3VrEYsJKdVMWvihY2K0QD8BhHpgp4oN5nMd6N2isgjdyAAJpbmhnGomxeVbVNrxh4mhsgrJ7limpDb4Bp/kcVzvMJIy8Ojavnzf0rlDdoJtkhbzRN7dnVZ6m0mgzBojW1nmzmkc+GYRo7uR1o/4WcoaGzLQaIyADtqqS8+lkI4f5Du4/Euw1pbaI0YaRf9a+gJfpcvA54jvpveHQsqEt52fxwRmpYtK1BAKNnXsjB92kwqQ7co3IHt6JDcMwfJIwpEYSAHhNHU58lO9b7dfaNvL89iYEyjiN9XlhkUeEjs3YDRn10xGpSVFaSO4Mb3R/PfpH063TFcZvrpvniy6uMfuJ+yzyHPF3vjc60lfPvP1uiLNJoX1flqHe+NWxcaj1gYrS5vF0XQGX96KfSnMBaD/BzggAHhrw6EZ43Q/T106Bc9bm08k2i12BhFFjSXMOK8R+rGrZV97v5heQPdFv4JuHXun1vuKk482XjNQR/n+HxF3G0+uLC6zJea+Xf4A0lQbG2tm/8csVDXhu+uaz7reTVqyYr78jav7+0r2z7+m3me4G9Ht6ZqrSLz+zBYuvZJgP0656D008PlVAN3PTGueg976h9Q60cW6pquQFVaKrU8Jx75vwGvLFlBnRd17oIXPEiVe7Mr+7QHdPf3mpotKn/4K+/QP+7vX/wr9//hnY/gy8+QPwcRuUWN8DZ9ty744mbDB/ZX8qwFubOB8JPwUj1LsC+KyznFhb22JKFY+67bzQHcwGwet2wue2LdBebpsGT1izrdMzP9wpmMrLojMD2Z/WugfrAF6XXAXthpXzzmWufOb1nXUY0S3U4DgzruFBTjAfVwCKNydHmLGK/kUfAQEaRr4PofzKC9Thea7kYW4Ls3bKi7HWRp4OWmT7wo+UZoxIX2UBplQ+PXOPmTAo0bixfo2U2splHenoRHOX7er2B1XBdVSm7ucUR21YshnBIZAcaj14XRtKyziL2c9BH8ZzyGmEaPfzVZmNq+tczLtTMBfqyucEi+nqB46kvjXYQknZqVlqXNbKjbCxVkeMST0LHLrvd12EQHa9oosfkOFQB8XWz2hoJkJY/0SxlViPtncomvcF97shlje5e7t01PXQBk39vHm+MXcj9q2HfFUnQkp/XM2sb6c/2+Wp9yx71U5qgS7T0FPD11ecQ+Sb9bsix+DTYYCUcEl0kPwbRbgrhtLe6EqjsyDjnjwquQOCvlSirJmm74g8RUBK5RDihGwoyIorGK/MdE546PhPDK9NUZ5ky+hySV3qsrNgeiHDwndLOnd+eh1GOzjiBp+LS31xwBXHW2XgVyM/cWP2fClR86WjyM6zc/mJ53Gcosfl89i3UOqr5Y7P9rVHBISKy4kYev2Fl6yUxIJYmwharDOkKfTUaVzsL8K6T8wI1srzRgeNpZFe9se+B2wMNY/S+nfSXo6eECW55yC96P08ASR8WXrIRb4FvKs2lGfR5UfIe1Dlk1OSXVYwTTqZM+u0L5100nYzbu+OTgiDnl1DALFds22EkBpkyfiFG7JOMqJ3GEmLqBZRMIV0dmOVSpQ3KJcSz+azUrcxztsZfTvPMO7ap2yoClcZ7c5f9/5pJ5NJJi+ZHIxpHXcy8ytHbjqGCb6pJ/MkbtmUQQkmnqvVILQba6JoKhA/Ssvpc/CMxdz3zwM0pS88nezJ5Iv5vSYUQ5F3ZBLSIq8YbpDBL0WvYG/oHQEUSGe5wgr3DSFK9Yifd+HRFMav2gYkkcGftGls1B6oLdAuaUgn+I/IRnSHgXA6GdB5/o170RklKNiub1aJTSvTcK6NN3g41aUUm5WV4OKOmzR7eKH7eDbr9z7mpALhFOLAfQDwA42FYnik+7noO74yV+Y8FGmsdvNoxfc96fxJBrg+73XgD6NhICYR4ZBbDLARol2Hd3k343sHsBEdMXmf5aexV+1MldkvGfPnjEf+DoPKjOHyyD0H83PRDV54lSMQ5dLYKYw235D2bPhKHmr3NfCv8jpNP1eFpMNiKt2sgJXnPmd2oeOl5PfbBZNnoedqOih3Vcclb/9bqvkS+WLXbXUsrIJLzWG+Fg80l+WTZBU08lajOq0D7wlEjg5kh6vffwniANeJwX/HxDhdaUS+dznyeM3xooDd0z3t0t2Afk8vlAqXJ8UhC1nKWWkNEMuE3oFtg27DgC62gB/KpdP8MJ3/lBfWgO4UUdMLhM+jdIEBRGxZkuF8d2p8TzemC17o//zhF/zvtz8CD+8tTPvPgLxFnIXuC5AHGR4nr2UYw3kH//KMRhwLvkp/HjpZO/6sZ/yNNApTzMsiV1w8E+/T/F+lS8Lhc+fahTJDKSJ5Oh8tdll4fompvxqyS2tTf+ab3t2OpKaoig/XwDEqyGGDPcSr/XW1eg7wq2r0tNwf5X3xpATiul07pQGF/d2nsoiNx6StgWCcVYqSz8+oZcHfecY55z8crkt9xYzS7qtRTzAUeF5v479pzJkGUoEdHj6isThT1l2hpNggjzpO1duutEeBcJBTDD1aGPo6IPY962nc6A7/lvm0SO6uBaomjyTi664QU6tEKJP3SzUfNVbszBbBTVqCvHFFYWezsyFKrc6IY+8PCSc5fOpOybJI7OVXWj9/pYwpPad8s5v4eT1fsyhrsPK0dk90DVlrPNPJChRDFvP55tYgr67RwMe9beZhWsweQslYUufxCkFWtIrw3fEszTu/LMbYHZ/Tqd+K9vnXxoDTOMwjEA6H1Gv1zTLhkU/l5iF9RqpKNr6/hGsZQXfo6iR0zkoq+QLNXqVS3Q617cLtP6KTtg0WsODlabqJ8daK84s5kCoW8Nqi2TEqIoLe2nQQdnzyUNSSsGbRTo1+OlQSLdMRTzxKa8akLise8q3by7o9PeN7Qs0V/v0C7Od8YlerOm1er0DRRXn+fPPCBbHm9Pzh8sp0xv+cnxiPiqnuRvRRhrZBz9Qiu0z4rV4yZju3Awbuh/HcN6urG8461DZYxvFpmxnXu2928o5wL1staGZ92LdhgI4jYJyGeh+v6IgXxNFUum3alLEpwfOokkwgeRyYTKl1ovgNjSUrYmNsbsO5OZwrxW2dd1KugZVeJFhX+nbeS+AHvZf8PrHDdDGMuNNouSeiY7OWvWO+kuQQCbo1z7q2/j11KHmhR1TxEwJv0ZCOsc5dRbiCNj5kMUTSDeGTwzILHn1p+f13nNwzbP8+DN7UpXGp3MvBte1NnWd+j7+x4WjORfXBfUsRkhRjLacA3sg0ou+SDKP7R4NrJ/8cfLPj5Xxt8PYJc5RtsA7YeI4zztpxiBDaW7ZZs+w4B/c8Dw90xfRuPwBbdZyzDh3rgqPW0RSg7kwkKdUj+ZmUPMuunE0dxXjY9lW+F0vXeN+1yhbv09A/QzA89EjnCuqkupAukf/fTHKZWp7XZ7ck5Ysr/cbCraPIajf1KkrEb69z/zJS7eMndeOXysD3NNO9H+/pt5vuBvR7eoF0tDBeZ43cwst8F+I7gHEOm2ofRnQ5oUOANrwvwwvoEp9aLHqGwO9h5MkLfbl4lvRzc/vu6Z6AYUT/ERk/BcCn/wTe/ojXb/4Onz/8O/D6pxGy9uMZI5Q7xkePlv9sE6aphXFv46y9H8pq0Q2f3ZVt9t4NsLs1tWLrG86nHl7opIbDOwg+Lc9Bv3URP+rAg+U5Hwn2qzKeKYBK7exSzYpMkdMjBLbYx/zz57eEzr+WblHSMYx+7Qcoh/1N0LWPV8hnkBZfNbyis6zZ7N5V0bmP2wNGKEYLtff548j5cBpK1LMt8h7axKtIrMRc9PuXpCPW4opgny9JSVsLcFhI8wI3XJn/nyIft+y8QR7CGNLIi5bRZlxI9HwYqeUVoI8XGnEtOfIBgyC8mf1bDNZxDnmcfe5G86HlG144gDrvdDVrCuXIRXLd2CslMXQLfeuQUKrnIsIQtQF4NOx7hTxEG+bmoOEQP50YBMAmU6/Kc5rPKujj42g6hJRp498GQNxo7spvtXPTMY8+6IYTEaTUYG0xjbI27lE7ugJv3HNQHCRWSo6Ckt7eDcZ+VIPAzpvFngZE4odDmfyL3f5k7cqJC5J0LSWvqUVnnjSfFs9rXcUwMGtm2mAwRV6GkzzNmwWTN09O9TNSqQ8D36M8zMEK2EsbBJg7yJgtZhh3IWEjP226qHovV7iYotkV6DUcN9cf55Q7LRKd5DO6iCAU36wzQrqrK8y836unKyPPQt8WFaUM9TcaN+EufGzv1840l+WKjB9rwA7uGRV1/37/SNMbKfe72lasIwyoSvcKRpdpvTLjeZvGc8g4PsM9IQGYJySCX4QXBUqECYJngEByV+2T2iKCWamMoBqCkBoe4t3gCyf7/NHwSXmTTxS4lmMOevbg3poguheLPIT+fIDJ4w+LipyeJUhVdN2yw5Ypbypj+uH3DXvAnd4bI2sTN/KvF2n3siE2dpvBcc4QO8bipPAzTdRkfe2NNtU4NbMIINQXAIYBPYxidlyP+nnn1t861txDMuwkC/OGnbPNg4cg50EXvOOM7k1eO/Kk+2T0t9kq1rggzEYXgyTpXK5H4yrPK0kWvxW1PoLG2Z9LwDY3OJk3swhUu937XHT8rPDkjQzDE93zCYAts9aUFBytYITdN2FNGjwMf4C7IBHOiyZHzowredkyBHWaixjieVQyG4g2fK5laGhGfzQN0EddahshFvDxWfaGv2PIDZaQu6Zcm+AkOWIOLXEk33Ap/lypJwJIardG3jyBGG6n9wSO0UVV/3OP/dLOBKxCDw3nDJN9L/Uh9uPG77x96vDR+/BAL7TWx70yjmjDmJNNfdv9ZrhAkQa6QjcMo7Mbzr28ToUqgR/v50bU3GMH/aT5Nzz2eeOi7nsokXIFaJk8628n8sZ3jJHZb18jEdjz2VFdF2C4pNN8TnJDcqvPvQOt/MqjbxEDJCHCccaLbfpK4/HV0qLNPs/9sT/b9SvNJ2eGK1XdPX1BYrq4njdTBGEeOi7+0rDxLznxmvme7ulbprsB/Z6+bSJZIbEl3mHti/beY0ECdKDT2VUhWNSFRU0LAWu3+K6r6nu6pxdIFcnt/l/e/4z//e4P+BcA+PyLcf4fpxbEvzlh2M0e7NfTkQd6TYz6juKuzBgWJfxX/4T/0d7CjQOdlAzjXOEC/1E7V/UC2Sh5MVWt1qLMa1N01d+rPEt4eYFPv63kf2kysVwwl2uFx4jGWTcy3t5Ktyw9fEA2AAAgAElEQVRELEmYm47wi9MQzYoB68hYzC0G8Mg762ukJbrTAlLKs5qHC+GxTkoozHehdHvAgzRIsxOAyYA+0II8xjDP91ZZRCA/atcyFWUbAOD1OqfQWc/EC+eZxZK8w9XDbnYOf86bMIynajGy1sW+L1o81KsgKTNzW2jSeQhz6HCO2kx/ojK97LysJghjSiMclHHedmy6K5PUFV55dlBeBcwKUXTeYgoziQ1J6yGaW1HmOOusRUE0tFR/Cz19UipjdMgWnqY8y0UVIrUbZ0FocA71WaRkS5Er/J8xNgJjb62joQ1DhY2ZRBljjAaMMmXHeSAnQW9zIK5o3IE9LGXjSAGUSIRMz7JQno/rkE9duXXY9fYdGuQCMsy9K6RcU7qHR4DwecgwG1HahdascFy6pzdFEV/QP9rkQM9wwt4PA6Y153qBCaHrmyBfA6hdXZdrNth3Gz+Q7p0WS7MtiSLoMjxpxfJW9Kpkdd2gZwogX6RRykAtQSwPRh56qPn6cMyvFfwF6RcDjI8Fj3TU74fyxpVxCKW2DXI3XhohqaXIKwDQERto1MJLK23Cc0C78cNuvRw7vhAh072hvpeWl9QShizbrdbtb+tQbFanBjzovrGQxsf7hUUkQmjVubFwlIdpRIXOICtAappG3+kiw/7u4nTZfVBpIqYM4uP1BubhWwogo+Vo52ohMwqfBmSnblZ3ZYjOY6SWUS6V4E7Hcfi3zms1yaUJz5kmJ9pvcEVeGxj3FvfqosrMT+edz/axavQtpLERzFHf+5FtysGy7UH0b5VnCLfLUSzeFRzmPHMXlg28LMubDH/U56s5vtg8StJAqnksp3Tfh/6FAC6vXifPluEj3VKVLuFmKbW4+TssjkOKQQM23fOHPr9xOSfNfUxsF3FdHFvu1IzmYoZwr5/rpnnubTlvuZLa/u+Vti2vO3abGL5x+uLuWDK2JxZBMuhyvG4s/5DH8svvPP7AC4FxqU8yLb5YfzCYleC18j6/p2enZ3blbwRr/xulW3v03uv39O3Tw+8b8b5UGvqSvvuektiXpgq73fvKiBevKbmrmRHFkKX5HGaxbDoE6/Zox2+dgAeF6glQi8m1s24BY0csMOOFmdCr4/wrbW2Ep3PBn891AuaGXdBNWtMJXVO6uhoS4gW8yr1ehi6uvmkqi8DvUvl3nS7PrLx6oXsxn/8EvPsDHn74W5w//wdw+olCuAmAX4H+bnhtu6Ls4YMpIX40W4WO1fgbK3+ze/dclyJ48Jok6QgUP2PDX0FwgpgqBHh/iKP526XRjPNsOtydmgy4twLTEqcXz/jRDeuRNJe4K7ZSdj0J4rVdfLK5z7bFFai/loe+wPzxUgMYsAr3IlvHdBXrOrzOZZ61CgC9DyWEmHLOvaVDxWUK0m0b+U6nE4CGbfs8+urhlcFhCPJgFTq+vLZFnp/vedSOC4++PB0ouOLW8XF6eQ4vwAGQ7vBNSZmp0b9oGs/8LPBmRhGn44oexqFgEcwGAQzv8wvg+0P2TlEraGmMroWxMsO+sb+hrFZAt+ENAgHO2wgB60r9aekrZUvgET+Ln9nAsnBnhWL9zul4nEUwsn02nho2Bpmee2pwxvV4J0Hb7DnGue7ChgSr9ySDpm3bePbK+nUzp+aTget+L6c2FITdnohIclJyHFDd3AELqoJPW09dmfaiHKEsh8V0bz/vsyJ35P4t8hbLU/G8yEYc31LySecDBXOI7eLmt085c3nIl6Mc5WexiYIyixpPs6gAKtC2wTc6zLZpbkt4nTOeMUHne/Ns56qVc9rcSZA5HeU2CaEZvYcbvvzMYN9UQPhb5poCwwvXvcujimKcFqPlxttUZqyRWSLDkrs3N6DgWoZmPeoK6L7k+VmtsLB59sSvaL5O3Ff1YzH64fOg8gHKB41WhWHD8kiUTT0TssOC3i3Gb+LCoE1K5Co2AvnwY4IcHum1s7WZV7DYtZqxE0YjiFZwO4/WH2Wot/L6kb5TqL1feetfv07fuMH8ArveIwQBOgdon+RCey9VF/NnX1u8V8Q4EwrZa4epzKMKZ+WRTKOB9M3wIm4jClUDFM3+Tlj3M429X/gGNiiaKpqY56d7m6MDfYRsV90A3SzU+gY/+3zgXAdkxCXSrhlQ5i2iGCGZHmaf+mTOxBO8Xh57eHTiPvcPewo7qUzXUyapkfATKWMavQOc2+AAjbLxFsAH5E2DxMOUogIkz2WmDTILDzMzG5+FPvDsaFCsWeLsRJ0f1LNu4tn03IWtDyAYXsHmvT29Z0tSIMKm+2vfGZi86xS+UW6I2kaf5AFiCyWxSS+2P1O7QnTglKzUNf1km0IAJ54abePJVSaZG2CLZ7dG3oJE8YzxQGcYc6FyS2mBMEEQ/LEA/cEiB0lMNbYnT14y1iSOHVH221Lmx4Kn9dqzNgQ9EukzT6Cl4YQTYXdCqXOU+MeMGEDd4J9WgHRyiTTxeh8bC9UjWFABK5IdfeTvJ//Y8yC6LcPIvznvkL9441/aS1jJhK1PRrCFvgR5zX8M39I5BQXAZUMuyDAM3yotgSN4bnp2S1mLjBW+FY6k98y3DupcjO2Ozt4MJwHAOLh6nycOVUQwB/xXAInXKzrLcsMChw7nu9Mfh0lrhgPv893gXEiXEO1autAXR2O8u6+C2UJQe0HQbvvw8sfHb18A7i9Ki07edeclGA/6fhWphIvyBeyXoBKDkApHUTdn+Pa6vWemLyniJdp9T39R6W5Af3b6Pc80Kde8iOF+mYfoxZLZVoqxttFmnuWnIeg2C3/3uUP0cUS3e/WIUztB9TXOpxOgr+zjEwQnW0CcMQIPblB3bQOGQCwnQBp66+jtHN63cCWFAg192E1swROnwtHub9XSzlDiEddgQs7dlISvRbrHH/nvmapAYff/tn3C/zj9gH9VAOdfh9Gu/2hzwqzuHeP8Mw4fflbgRIJKEmJKZSsdUroeE/FT/4yzzTsFsKGjx/mIpYxn98NiAXUxXVnsXV1YFmHvKKWzljE95h3WJ5Pq1Yer1bDk17UefqaYYfmhY1e8eTpqnGBvNIruBMCmHeL0zAyqUGDznfWbK198fNxzgJtzoMQ6fLZKX7ogWi3MXTHJC+CObJUwGr0DkxpYFePR3GE4b2hockIc+4Fx9rXHavA1brewyqEgk9eAfsZu3NkV61qXCBDe5wtlxTDU1PYqYErL4Wnirt5m3RHbDOBG9DDmUD+p5GFfwqmmyNT9++BnrLgcbQ9pQDV0eqGAEiBiuTc3QLq3vIxnDUNuaH4IpYz7zRSZtrkExsOlLvwAoKs1n/uOxk4NJvfMi3Ilmpf24ij9AZBePNAXXTd+Zf/cxyS9y2M89nh41AMlfPJzNn1jA21YiM/FNhuUaRHDOP9N5lTXPErff3jYTEm55iYHxwfrtA6gzbOeVTuk03uI6cz7MDgHvGq1yJzHO+P/pBMznC1R5Quyl9KVwqI5uKjnQyT+3uceMKI6mPzbba4B+UzX2OzSzYBO+EV/oSMTC9cQ9eFS1yPL5WtcyqOj5Bim6ROFzn5KnnhSSlFM5fdMPZVnLfPNEAmafYNEOeIEEHI3F+Eh8wlfWD7PXoE+h9Waaf0uhgsy+4LnVsTmcfTipjcZdiABttZjbJ2UeasnnXMYbMTVzn3ddBhTw3C+Ab1Be6dnDR6G240eHk4693zpzzotKtFa/u6YTh4bYPZJ4D9/d10+WNojrvHFC3nisWD2hyBwpGS4IBscPWcEID4XGyyYPgrmOrihvR3r3P7R58MpHbuiOKHL2BA2cUiAdkIcCyDD29cjCInJPCO0cofAjOVQOO/Xfh6bvrp7nI9reBQix4N+nn1U5Saa9yP3GSMuN/GZQ76Vw7rHK5k0RD1Md/L4NdqZPJSd57scQd1cHEYDWvboVsIJGs/GkZYIdwZq98KqcxnzaBx7x02gb0ToW+ohiY2CA5YxBC5/WBPEI1nA+mvQxS59bIy0NotYYEnttlaU1F+M/rFRR33DBs3lkIWCyI0yx1lAtr/xhJN6ZA01sqtBR6V1Qi+nD9Pao3gz4YvuE6BZno8A3jk8RKu83/W1wU5vVyQrPN3pheqgr6JjL0gbMkYTRROdpCzIWsM49mdEn5H2OmQwAPDjeMLZOz7O25YmyclRnkQEeCuQjz3GX18L8GFhHXulQ2fwSLgNzL5VB4hrne9FTUSh/hlTw3mr07LJQ6EWY6DpOLpJphwa4wsMxxc3oDMMsa5WYLPNxY2DoHqIAoeVhpDZmOZ7671jJpKel1g/mn5mWVBbfyz4mG8CCjhuYVa5vlzdrd9LCW0m9e1FdnszlBc2461Auql0n0wMZOwYlcv9uBzvWxJ3Rp0LlfFfEkAYj3XxfpUIsXrZBHxJNloU6zwjddHud4XI4sxlUbDe0KfEi5/T/092iq/9sYL7C9MOl476gTPeDsMLQ/sFqeIvMPU0R1ByeyuOLvoiMVyKDvwlaSEf5XpXFTybQKyr+B7pK6D6PX39dA/h/l1SZd5/SekS3NautFVIyxcaAmgs58oCz/NpO5sM0IGHDpxsAWf1xH9ExOPbAJcWkLEY7/M3yvCT1YdqYsKWF2y0YkYi6ktJ/0JXRZ4rmWR5eU/fIL0IPzvwQt9+/je0P/6/wOu/BvojIO8Bt7UJbG/He+D84/i20eJJdZwt/qjTuC4tR7g7mfD8aC2J9TAv/GZL/6Sf8UcZhrpf0XHmndQLWezw/ii5Irm6QF1MhPHOqc64ToIYqF8V+JEUdsv8mMq3T/bAzyp1eF9ZnmtnoXsd762c5IlOdD8pmX1cJemRJs7oDOH/4IoCp6OmPD2bgu/BCxiKgh6eB0bLulksP32ydts4Pyiyxkgujztkv/C/JOPeiiiJztI37HWcfkEL8V5Y66KPfS7w+iCqceO74NTe2KYt90Jvk2fJLEfdkCFTNaNecBhwuHmWK+ahRtUA6ExTxTCcl4VMjSIqmIoeBy4WIVbohhGS1Q07dJ7kaNdpsXalxXPqv3K/M6DXBanzdux4sXvUKsQiaOjg8ak+g8MiWPB5pIBA5TTybBhhbUlBE12rEuTw3AFRjXvvro0U11yG19PNODf2/ym6mtwRHkyZrkYo+Ip+PP0d+dI19VeMtT/jQiZucVBVp3/qY3ska04BKaby9EKnaEDpl75lpe0Od0oVuxvMxgkQRnnuHGmmRPdnc0wFW8yjsamF5U4CIgaTacUEZjwd/ZgoygGpEiDCJceQefbYxMO0fEFAuc/K1IDDk0uakPpcuyktxgz1PF7OOf+VgjPJczu9yXzVcb5i3MUTAXfouWQeAXn6NIwVNL48l3h+xV+dRxMQ2T2j6SteGo2r8J9laHQttTghukqIQOw82qCA+jnb2ifczMaUIFaGdTW+hPpySQzLmHdEv6AeKHn++vP5QRkzpzOp8AuTbcdHDvKuHi+POSq02op1WiwcVpg/56oDrWpexwkvm+e7F+BCJtMqx4dGVElso7nYJrEVMnWIH8NiYyBer7oRXAHdoHy2uRvOtQMWuj31DQ8/e2hXnK3dGmTW8wKTgc3OjK6K4ma5yfbOskeBJ3l3+3wvODBy1E1GTJ+pbcAw1LqBGj6HdBc1fA+UlcG4gzEiUp7NMogKi4Vgb/PVoKOTDzi6Tb3K/PMWdaZpPg4wRwNpwQuzNuY8v4mOL8ZanvcBjMx7BYYBuxsf9Xqs/6UhNiGpjo2L5Iquekp9EgW7vP/OcOM90v1MJ/ujpkMnP3Wix7Cntkl8KMAQhY13j94am+68MHXjssoI5GCbHioJmhu2uKP4PYgMOOCW543EUIgC+oPdfwDww+Thon0MMXToDqAWcQCA9BmSPTVYCByxcph38u5xTL5T5QHq1jGu5xHVYrPNuluncqixaSNbB/rn2SGx/lyAzdc7vkB9V9FjmTL9p3AJ48/XFKnAJ9RzgVXt06K8XduFmPeVJgYbktXj64BF/x/lW9B+f35JNq38M9VVy+U5SvxUS7bbBhtw4ahspLg5uTx385imjw2EJ9RXPvWGj40qFsmC8aLT/Np9vKp315Hz8bL+G9KT++Za4c/q7Js/T137UrXvmvSMMX925QdJyny+df0Ya+ryXMuvZ/dnu5BaL5GOYL51kO/pnr5OuhvQ7+mF0wFzvvjFPM10CP2m6O8C3frw7NgE2HqOqm7CeBi806Kcfm3hlhZMKdGzFB4UkzPshLx7uqcbU50Sdn9Gx/98eId/+/TP49nDe0DfzXyCMR9eYWg8hb4HgFcyPNJX9aQ6ZexWV4C9t6Z2SdB1w8/tjD/IAx677yCnsg5llRvn+8UybkiswKnlAiWUeqnM3/14Ac6q51gtJlaf/yj7MO43pzp2NjZVumeFVddpZGWh2DXibSBKr/Bum+GTK00pg4fcc/zYKVlA+bU8+1rpkgZl8SwptHmxcAuMq/HzY0X8nHPB6qztdHqxmhdpzCtgTN7HvACvi3E6bWQkOu+cwffQ5vycvcaXTdOhTFMgzmR1Rb7IVBSrJPBCqZQL25efvP+pAD9ignmnacg1Qn3ZMx4nBaZHksM7fqdjWlvyY425sR7PqIA8vWbLZP4a/vC/EI+gTF6o8bvqomt4t1BExQKUxvmgLC2wh7GA5B9Xu6zqnXg9n+VzqiteUf8tvR2WYFagEcqsXbJxY4+HhOsGY28QJXlPvZXZO3xkZiK4qlQLidAc3nMHfINIC7yoW0MJ8NK02+ikYhqgf7+pzt9n8Jgj5W+iR5SdqhDCOzeLjDNfyzxz0BKKEc3ydcOh4ID0vLL8eeMejtexYpfjiifZl+LZavo/vcxL9Pq4tBRHYtW9LK7cXBVlWJJNl50aPSRZTIAw5qXklbrxnB6nWMmgMSM5DwBtF5qwuswGzEgqbgSyjeaqI5qUG9EjrPJOfkoNXTSeeVLhTTs+sZsYVJ/Mdt8kninmkRiIPpaQYearNO/U5y5rF6iPAzwFPtl1KwCR+LEQN3KTAcwNmLNsDv0OIN8HKjgnMfmSohOFDLqrm/tU032gYmpONZ4D0Icpd0wBZFfeMjmIOuQuNiEzZ5wkaJQn4uG0jZ/LJ2jzc8hM9hKSXEIe6jtw/AgrQcs0PNGEDFktITaey/zWpaHcJ/PPR1BhMme0k/BLSz21P0N2AdQiH7lEVsl9GEPf2kaZsrlEIcMjHTytZOD1wrhf+2CXQ45Zh9c5jpgZm4fVaIr2DnXdgdMmjlbEm9dOr4Dzp+Pyv0fyaFZhMDU6cnEj8a6QG/KUVOkgidrfJL1UPbtNoxcK3wsrl/NVUvfk9KyPyrfMN6912gt16lzorAWuBNMBGM9tehCiKwV8r/l6T7+jRLJNFWOuOSHe0z19pXQ3oN/T10lhxBgLpin0a8lShXdFnAO4CSCb7fQ9A/0VoB1NPdSThJAbu5xj0TsWLe6AOXe3+oLMwr+aAn+hUqjg5nbt3ml+9iXy2kF9359NfEcIvmvjv7Ry1vLM2397/zP+4d1fj5tXPwGffjZDqC/EMSj0BqD9MAxg7pT6SQde+251wbjfqBIF5cdcx7tjH8vGCjyeH/HzA9CkoW9bOZf3C7vBz4bz0xds4zkeMObg45XC+Thph/mXJwK0MnS7Ud375DWGQuVjyaco3ue3LqAqIeDvqiSIvWKRdVmKgQscO9o3y/sZ6Z91KC1eW4O2j4C8muGufUwfTkibJNppPH88z0pV5hnwZwPmQZaRAY+adHsq/cV0NnB1tXh1HGUKXpWLq+p0oYO0B+SJ+9BeockJm57R0Cw85hyg8KYxHufqtTDEhUJ3lMfeG0k3F+BrwDD1z86zqD1FUZv7vWrABAie6eHkbEdO0+Jl5SrE7QqKK8HkbXTYMA3Zq/V3PHM4TfHSZETOOOW8Qhps13GlTUDh6SW2wFKKEjqUnVso1D2r0DiPagHgbMrgN/bgDBIdAHzeNMPvC7u0QY/eFbFgqRAKtKX+uCHlIo6+WWnmCA8DjWwsIzKBN7Mq3odM9mRekPSKOruQxSlHJ/eYU97EYfOt+XPCcV9VVw/0HQCAK5R9fvM0U3t/3JP7vlS+DeTibDJ/bxjWKoe+dFpxpRXVrHk8X82zLF9yX69LXwFQocprhuw/7/T7oFOrR2aqh69p3gYtVoJFsPTaYC90h325+YW/4Qsp3eH3k2YknqAGV0IQTdlRN/dcSE5ip0hDtCwDezGlNRzPw12pl1P57AkfH2SKfqsYPXk848iMcirw9eAshz+XzH92YPSIonJ6PQx85w9zkPoH47vCRvhKaxtCsPNNeYEzs681Df7gAU03ANMDPRnP43gejbLn3FCE93jwNp44Mr+J16fM89RhXxHCSXO9yAGGpOrmVxPO4ZHdY0hHnhNsYWTfyRxyPh7HmUwY9PxP55rI62/OmUDzuxIPvjM8YvpAMuroXiUSJZCWzZWK2edLQyYwx4loloqH4ma+JzEeah7UHH47jTtA+K+ZdybSW2CioDDet303cXMvOQwREYfpoxlY5Z3PAxlR2+ARfFJlwHv7fecD2bCmt7PD8rE8DB011Deoq/Wd2rV2xJnsSn0HsQ0pyGVXepPIU6FVtJFldP/cejBQtLQr1hcOP19QXp8I3Z47XaJsaQ+N+hqGSq0EUMtGBDeaax/e5t02enW/9/oYBxXYPgF6xjw6ovbZFVzapdJHun68S3kv9EHRazp29Zs6H4Q7/dukw20Tq8dVXtALea91GtGolKpj0vLbg8Gr+bVkuQl/gBR55qnpRvk95XdwFE8f+2CKvFbqed7iGeXOwnFTZ9S+fnad9/T7SF8fN1zHM67vuHhP3y/dDej39HWTKVWGEZ0fT6P6kAl8lzktdhRmRDeZ+3RG6x3SbceujjNcu51YLorYlN5cjlXQQmfIzV1MgRGh8zSWNhLwyHzKISId4EtKm6+S7oziLza9xzjHLQn9AD7/GZ/f/oT/+eYfhhc6BHj1Hng0L3TxM9ENM1nZG+HZigLAH++S4bAv8BZe6IDi8fw4Js+m8wyjawufp6TlYuiJBXP2L/IAx9473T25kxIJzwxB/4zERGg1nj5evEADKFqAAvgI9DeDxnUA8gjgNZIXRzorD3ORl5Q92I/90Vr1i3CjKpXK8+gTnQrRQ6COyr9l9bsvR8rNG3vyicodercxp8I/pTKUHRwrZQF5nkedMrM5HibgrEwu2pVWoaDiswVN6Tyt+xkGUyLOBbylGjo+uc0v+KMCycjg5aUO7Qgj6c7Vi85DFTuzWyjcfKWlSbbwf6jvUgOPk3oe64NQDq94e90MsUs7zcPFukc7WlZSX4TzwsOlB7vEn4NMew9K/vo9461gETYhN2MFX4yz5vGxd0IbVwCgJaXVPCt6iGRiYqItpBkFg3Sxyduv9sb/fCurh/FIOaRkLXp37/hXfmu6Ra+3H6QC2bXvb1ceLsfvIFTt0yBZDNINX63xz8+BnpMvezuijFMdV5enaBOFYmF8K6A6HeXIG15AGNEZ5tq2I2RhOJkPr3jdmD9pv4i3P/HHp6YVvDdmv1WR9aQqfIyeAxD2XZdQaA7wNDR6XipHSjmJP2JPx0o/rCWKWqgaFEr3zhsVghNm+Falcik6gfHzrmc0O8c8/mOv9NgNplOesMgw/mA2jemx01meixRevgPJlfeQVnk/r3hz7TWXUdtQlDZEJPCx4W7CGtOmsKYgAfb9OCbLx5bnrwRO5Cjf5SiW1AyrNL2jMmH95Rv7wfTT2+9jPzjc9M42wy0LXkavVHJJO9HEZS8eC5bFkiFdMDdVnqkgLdf0bJLg0UPFqhP4Q0PM0W4YQ1QUevoEnASCHwZobXysAPDB4S549R7AuwYNnCO6jdL23SwkguCvHS2j72w26mnMJbf31n7u5cFFWuXmb7X/jZd4P1oZLAPtcK9sSqscOZGfH8YcBhT4WPjfDlQ+UjFnnYe6+3v/6+hdgd4hW4eezXDuXugAzUUZzxONK+m5bOu5Kc3hB8RZ9WpHPH7LxG0/RF19Ij+s5R/IgJV3v4hRajHvbuL9R3yjpMJ213moshuLPa7seyalttBaQnSGbz9KX9Tue7qn56QvmS/XvjUuuRN67umevn26G9Dv6ZulKQOYaboqK0au8dMtHJr04SZxwgjhvp0h7TTVENpiUR27rq0Y0bGTuNuxTMPJbazCe4SAG2ehu0I27aZ2+I7OA+FGVUG35r11F+p9R9V/71Tk4H//8B7/+O4PA8ff/AH4+OcRyv2sgL4DtvemT5HxrL0b9z/YwvqDWVt8MVj1cxvXR/n8OEYGBlaHn/e906Hcsmq5kuoZ4lMneJyqgZyN5v77R5uff7L7P9j9rV7qflb62WBs5c/7a1sSgeuwx1noN/TfajENTNrAu9xj44S7zNvzzx4ezxdc5vL/+s34PT9mxdSHz0iKJze6NkMSV4T4eL3IRoLFwv2we1aKPbsXepw8h3iyeT6qI5R1lA0A8AonOY0z0K3BTRoEJ3yyzG8gZERXK34oE7N3BymfRDA9ocxwHAvg1xOmpBVepeKZG8pS/9jwI4xmvgCnhlP0lrz7xouVqApAORqTFRN8Riu9S/NE4uzoUJ9upio8CaYC3wz7XYAHm3h+BqycbFeclSdZ0R1NX8GpQHtw1eUYdLE2PpqnzGsLl3siI6cCeCUNquO4DSjGOetQOj60tNvvHJ70mJShMVx7xWY1tPoZlRfXjFp+uU6GM9XDWwdhIf7Hc+cTs7jFnIP3pxu3rb5GaKwKOQ0jZT/XcghKYW/wsWFCYsOP4w4AOxdaRea+q5hb3GTGSf96zEXXWfPwZHXpBXrepTgCE21hL+QGOnJB8pgGDlyidzXtiBQ9fzpPXrGYmFrY98B4d7me416rJa7KufS1pNC/4kYnkpXZmXJdv72sGwmkXCvGPAiavQjVH7KUzvs0/iUfN/HaRoa0ic3ZhyPcpGfpPlWg+XZ/ueOggLNBgdrV/kzzb5yqteom4leu9+0mhOYAACAASURBVLEeEfMl+KLnI7nBjU6MtkwwfMHpY57GTIHHgRDbo+OI8z9OMotVtvjaYlUFkLFRXLpCmo/LbIsC5gk6hXzVDapbvFe2/LlXaPSBDlxv9iw8XIW6r/APwGArm/AEcAP6PPLGa1thHJeFPVKGrGve1iK2kFejm+MoD/g7kSnOBDPK85g9zpksKxRoFpJa+PRxz1iObdhd8xjz/Hd+Wp6XcnycllMtQmBLbBwYMuYoO3m3e8ECfjHRnnjpNKKD+t3jUvhDMqjzfOSmHNDb7Es9wdrldMb7USFvPwHyxsCSWaf1X+iLeLOLYu2FtlxLxASewAfNt+Ikeoj2mvAcp+/r2rU6WnC9irxBUNWiBwz4mXxwLTMq9pTFfMOCSK3L+wxIZ5lHNDUaQ/X5a88VA/934OvsiOA/Gt8MGtKh3Y6H6N5fo3OGvZc7mejRTte26L6lfq3AV9t2S/KsaT6vjt84+LbCK1zgER48ETYvbsXebhT5tPbxCqyj+fMladcvOO6aINpJEi1trZtPAAozRuWUwpkfHOHYqk6me37siUcyXTb0QtlP7Uopv6BNSgnde/3yifWs5KNF+iKd9dPXJl8llbHneSHlPr24p2+YnjJRvpA+3dM9vUC6G9Dv6RumycXmMsQWg0A8GbvFTXCRbh6xfZzju51HGN3WIOiAShjKVew8ptbhYXRhRcS6G2Lq8waVRjvqpz/LBJXgYfCPmnVP93SUDr3Q/wv93U/423d/j//48K/j/eknYPt55JG3AD4Mg9QrmSG1I5UCwzvmACl5jeKejhx1UTDCw7u39Vy1P6PRN6Rrxa68y488zpfKrSck9kbn/nFixffXYHmJtFqE8nN8wFTIsyLzQlnseX5xsVeUa8/UU1wGxm+5cFnnWVZeAaTrdJb8Qb38aNFvqmqe5SOTiOI1BJ8BM6RrzgugmCQB/cwFLtr3GuEBFOlgEGX9Lqa7ClwJHJq36BK6F5mG+1COcX/JHAq2rSeFsT+r5qWJh0OHOQzgYmG3Wbk+pphpsZPHueX1Ywf8TzEM6uahNOEkhSYfYr3TW5N5IKLf1F8zsIoQyXPt6r75oUS8mHjcSz+lPIvyLz2rxedhOa7LDScyMio9FxkhTOcwHhSciqT2XaW7VYsmZHeYPuNictk8+schscxmnIgzYkHeWKu57CWEkvsSoAfvzCk00cj4VcJjEC5TWcFjS389NQLLN0ovBpWsbq6V/oVK6KswOP1bvG+2JkkkXvP3TotjkVGITaBG9ZDMfEmSMaLUVQ2znoeNGbVVN3ZZ7t1rQsMTR+KFh+4paVlthSeTn0V+3T8vUz0M54mcreQLyTLkDlrnV268tczakczZXQ3t3IBKuNEpbJJ2aD9T8S7IFhh9g53TW2+etKDBI3fuKAlP7RlifpLVFmvr3HWaFdQhsBz1CYNLuN7Gmt3X977hTpzONp1hqwVAo7DtnzQeQywsvvGQJoCKYkubLjXgPEblNJH3tD5+SyMXbdaQweylRcaYm/eZycvsw5B/uFDZ/+2Mu2ZA3ckJXI8fV/Q43694lVKjAgyxLmT8X8tB0W0fKl1btEkH7KoAfgXwdjWR57Or4shCppsGbaa5fs+0PH+X+mFXj2QaoIKTfd8hVmcN748Q2V1jNo5t0CD2+9rKOH9YvTd4Uvu5A1JOe+2ADGiGfo02DHvY9rx7eJSj24Q7omjs67spvRRfWdLj32B6ST6qi0Z/7Q1ysRajObPOiATbYb6B3wP9V/RI9m3a3V+Cd3GvmEffPdWAfokmXEwkJ9c55cfGfaH9/J4upe8kwP7e018KXb6ne8LdgH5PXyX5og9Zq8PhOyMMmT9bLD5dYFFz/+wden6E4mQhXR8AaWhqwpSF/dKu6E3R1Na1OtbSvj9+LKCHkl5bA3obu9zLzuYJDAt2BwLTJUG0araWWW9h2N+LqX9vjvY9hZmv0Pay5v+XD7/iH9/+NJ7/8Efgw3/h9OPfYvv13wH9EdC39J3Nlc86EPqN4afb6Y4ij/lZ2Xz4ZRjQSWo52QKEd9df7f4vlHoUwA+YuhpfGPyqwE+mgPn5ChBq3/21wfGnZ64uvD5TWI4zxwkm14c/tfhfCdAfb+0r3S/A9H1WmCnlrToyT1xdP48Hr83j+cPj+Ogkc6HoWkWA6JYhVvU8X+mvLrUn3e60TzdeH+GCzY1QPPLzBShVP+fKPmn41B9xQkdrY8PVsDkLPot7gg1lkUgjtdfwKtncg4xdXaMeAfAq8xj15wyXjUcKF+vvFDPsJvWH44p7PtUNH/6+nmEfhmeHgwb12rgq4AFIE8tUV1+aCSBg8D62utzo6HC3BrTBn8OA3ti4LuF9lfDUj7SobbYQtRJnyc4+FACv7PvNFIGv2vBs/7xRn3J5ZwUVES8mKrOsMzukvj7qy3whpWy6KR7lvxg+/RSwMuK5fHVBjmH6kYx8lM/fc/jqiiOreSUg2UptqPk0T8m69WgD4QoVqua2FuwwQG7z+3QxClFXPoXxqFR3JQkwzvqsZQcyGJ4uPc9pXvqz1dw6nG+aftIHX6gErST86H5Xs29CiQ1G+X4XnWHHK0pjd9/Vb8dIKZ/ne1MKgpSBsCKiWq/bQmOq3y+9UxhWxtPcPjFv3WQa2RWnhMxqPwue5d9q/a7Wez2xmKjwvZKDGTA/22HBjt9Unl5+j3B81TYaphWaH3t4HhS+Eh0qPwx+6hltU3U6d7rWybTXvm20fjzqE78JOtrtSbPzjhVQC4FsNE/8jG+TR8MQFYRPybMcgJ4xN0kyzpUBiSNRdET7MBx2PrkDm2VOGf3knrGzPeyBzi3WJI5lj3Smw4rhYe21F+Tp432IP+59bsfA6AZby2DOk4axVqKqQvTg47MlbcFazGXui9mSmc9lGM4n5mFdC6k8lc4sT8VJgsPP5fYyGDV5oxlCxrPrMJRTtKBdRJrVxPUxeCDa+WioyXMsn23u7QhMUAxv6TAij7LrbKbWT6buz9W/cFgtz3v75F3pV4hFKKi9L/Gv4uD89kEG8/2K7HTJc57pQalR/LnjoM9d7wfbKFLQZ7Y/fn3+M5ss9CjgLnxy19kCvCm08iM12ODRrtML1zqnORzdzz+f174hV3wXvlhbPfpWZRKrvt1NRJrD11hA5F/QEE6NPM4Pw7ZfYGRLOAhZfK4drnOfnmJGLMA6FgM9/wVZ8ZsY0o+ArXNo3pZCDsrtJcuB/Mgk8inNdS90v74E067cJwhlR6kXAhRz6Ap+Y5HlEGcvvb+Q/0nf3dN//3TELJ9SBNPPa3UBLzLH7umenpHuBvR7+kqJFjkr+uZKTN95vfzey9CxWO4b+uMjBG0Y0E9iBoxh5Nj8E1Vo39B1BGuVPjzghv59hCkUDwNn36cqk/CuyHF+jwQp5PdXHv1lpRsEta9a9/dML9j26oXuTfv0n8Dbn/Dww9/h/GGEbN+2DXiQGSpYMa5fmXIkndW9gHEF9mrN4mWdFEmxvx19+JVSXeD8crDwr+lHgrk4e71ISqHuvzRZm35V4N0lnKqLsvfHry8tjlb63N1CkOh05JtKkFx2Qaqb+7m259IiVC8/CxBWC8oVjLoXxC8qbABXQG/aLTrK+L5B0Mx4OEOqdfMe6ejmkdG1FBi8DoC8ug0WKTf+bNF1M7vdsCcT/J4N7v6+gR6u0xGu8cOjz1kRv/DQHF0r810zY/mpjWNa/D48z1z5i8yzA8/tom5uib4bPD88eFiZ6l237AN6ufRA5oquJauTUZorvmQY3CnijmmIo+A8XTW/rEaNscnBwsWmqBaNPxqppQ8LPBqbGIYNSqAbRxnyAPruS070O6wEpR1Uj6qYHn4qyPdKswrcxDFVjdDEPKVu4fC6my5CVThutnkf/LTCAdeqPyEdyNK30mDdXXzjVJnRUeNXTEzKvfOwQucjKoWWYoS+o8lGg5+gUphbqk/Oo+bcOt9r/SUdGIaPfV+d9xTy97XH9qbivxAG64pJIZjW1HFdf76EhLv/KFPldZfIbaIBB8xDNoRQqn7/gBwdZuxUHfTaoqxoH2vW8PZ2Q7FV7QzDveLqsSVRNgPNvxKb0iZbnh7Z3NARkWTAEQZzABERxgi9hPHpYL5KsUhy2PoE/sTt8ZoYZbzHjAYSN0SLP28O/JjHboy26vxICBF6jvlJTUtSUpOkn/39ImnaYJT7XFguSsBJ6pPBssvYhsHc7+1bpfcJso690nrWkaLQyCuIPtK3Ag59bS4MwWMlJgbTar4QI9kStc0sFs9JLTIDr0mUhTEB3tMEfDfqrZhPEFOLfDuHzLm0mstJPvP5Lmi8OIxplz8W7NFYWPCzKZvQXmbfzCIv8KNDeK+8r/A6fKoQi7w0gnCpeZhbaHY/Tkl1hG8vvDId/tOpce6BvmZ5v6H0FQC8tcg6BW8u41rhlYn9llLh7U/pem/WxW++ZDz1eB6tYNk9eEKfO/8NHKjEaGx6e5IDx5NhfuH893RPN6VbEWvFoO/pnr59uhvQ7+nrJxZwwnvJFkSkKhlJMml0A5YL8OczujbIQwP0BDk9hLwhXUw+Hysh3zjYIMMbvck8O9PCwjZp2JoA3QST8ASYIITCdWX4WS5o9s+Ogol9daXXi6XfsvD9F5hKd/7Th1/wD29/wj/j/4YX+t/89Pf4z19/tp3uZkTVt4B8BOStGdfzQjvufR6cZD72JDADuQ4Fk88xD0PoGoYjZcLXSH4+odf1d6bo+Y8rldcQ6n72+XOTn5n+o8xFiutqgOnBf3UBcw1ud5UFnY/uyQfzPZLGTsvro2p4AV7PsPYNGefPSAXtPMtbLru5AoRo5K7CS0D5q0ur5LoSpl+eL2EAvVZfmWSuhKpaTs7QAQ7n0OUNmijOvaM1xafzGa0Br9uD2cVnSNVhRrdAjP0xw60K6Ot9ZIcjG/auvXSwdHiJS8xTjfYsaPTKCzZ2m2DO+11eLmMFpDeRlJ/syb5gGRqbfRwW/5ve5mLG8rHRbXgEzvZlaWHpKcT1bvwjaCdTCBsaPFh73RO9m8LilUVkeAxFLYVxb5jHzqZuqQrPC0kwoz2kgmTxSwXWaD48XdLUMbnKcF7MwCCQPH38eXj3d4oiO44EcDW463ZMqNqDHV0w5ad8ijortT0aQEL0mZdQfqRBL4Ms8QbMYviZthSCO3C9YVgdMmLW4VpKOk76dvNC5l8ynNuQrLyU4/tLE7+mVQG3ymXXmWJlL4zWLBJ7k+f7+QWJ9AVuKnHFx5bJ5/tkPfP75C9qHpg684TneKkkbSzC7FKeXoIh61/ygIhxV7rfJ1WZ3sVcGdN2pls6n087qOb+pOslG1yxgHLtWZ0dDQonx1iye7HP+SVi17W0Q6mbvrjy5kiM2Y29T4AjWk3lkKF70hy77YIIi8YThWlAB4ah3V77Bm/Dtzgqxj06d23tYKYokKA/ApnRMaxswKK9iMFeQ4EI4a8gv2sAbGP6ZAg74jj7ypv5yTDuDYbc77mkAz94mGrv04L7ERlJJjEWGWWeMDd3cdUKpKNdfCzt3tf3R/tktTaLC3dwvK8kZxaXhSi/G4vzscnzW0nlrBiOMxbikZ3yhkxGY6Um70U+qrw6MFhfOd8U6bNOAJBXND0+px7hvpG4VxrL17MvAAAbum4pC/rUtegkyAR3TCiEbJYgyJvzsvToaXj8N+MZfq78KsL4hJ2ZhA6njEmwDc0cd+exCYJSnn+hnVBcAJO1drzF2jLwUG7iB8EH3/j7MsarEO4K4DXnAeSDDpmwK3Tz3fY2Bu6Z3rcZvl0VomeIeiQTo1N89jn35a5Tcks4QoTDeRMfOOKFTQ5e3FrAKs+Vcnw8b/XyZlGBn60+P8CDZV396Vz0xdPR5vkdrc/9Lov2CBB0gqbhIhcwzvHcV7uHb3H/mwqVfmHu1JAV/riWcA0PnxyN4GguX5tjXzktwaq08y9HA//7SPfRuKe/nHQ3oN/Tt0m+iGVJR+siYf7LHkvhNSkdePw8otzpCU3PEH2AnE65+E3HmUzmHQg5DdmiN+ipxVnokOHp1tsJ2tRC4fHKu17eifs9fWG64IXe3v4BePUH4ONQSmzbGX//hz/iX//0X3M93QE8/JDvWakQE+FAeOWFBush+Kxj8PV3wPkvWee9lMz+KxaGbSufF1Q/yuIc9EvA88JcZ11elprR/NZ1+ypfXSju8qyUUb4QvQFvlqvMK4N21XDO1wd5A7fp8eGZjHodF468fZNSqds+FQ3jateGzcMbWl3j7GzFFgq0Aueu7HUTU9hO7wrvWg8HmvhRWTTv5jApVk1Rm99hFOx9G+fKUYHx3aKvOqaxSYBd6NvVdxzKup3MG67NsLLmcS6tQdv0JVKHddVxK8XJcnyzmpyN8Sm0rPo9CHctby+VJdRfyA+rxAri+PPvDHY3kid8zNAn7WwHXPHtRmwJRfj0IGRwfdiFjBGzKXQ/repTZ83NZb3vbu4pZdWMeiXPvKv3q+cuF9ay+L2UawVp/5c5Dw2n3nFpE4NEfqEQoKnPVuUsIVhAM4Fal/WN0i26MEOvPc9JQ3nj/CgFr3Mrlso+MzII9X8YYhIeINPDmPMLesXKf25HbGYimHZgMg3UTB/5qI/ALeIhR8aSG9jbtXQFaupaXed7whBeg+JwfGu6STZMwbDnB1e/VcSOK215/opghiDGnPsxMcgblmm4Vxw81TfwYObrXp4ZvzugHlK4uWA+eWCwCSDjhwiGp3emcQIMj1E021BrfFZl8tzg87NtYfwVzI1vPsndo3lnkNoJIBNON5afdLTzjLkhFQCkQR+Nsbz2tq0QfdQvn6iZvKnwUooh0kTURDwySs26f5Zxy6/aDrXi7SWcE+O9Qn7kHh0ovMZLfssbEbrVuGqIKzaWHsbd6+d1S+BvAdiY84TFcLbKhDGnXo9+08/ISfb5U+dNaUBVpod1l9welomYdoYQMUOEBcwfFPJuUIHJA9T0Pjl1tbO8zWg/frmvmPa7wdu8sNU3Y07juf+msMs8V63vI1KVtSUM583xMuOmJ5crRGt/lqT8W+eFzHecL7zI/Yzz8Uz8fPN+Ht7mAPRhkBo9d9Mf2JFW2sPYOTaATa/1F2IYL5C8/VrCuGe6+cVV7Jp7E/M6Lg/P/3yNB7+BdNieCeshHfU1uGe61Dd5j831ecPffc/E8q3zuO8N0z3d0zdNX0r87umevk66G9Dv6SsmXkBhIb/N93uxbi5aoGK7J333a4PibH+2gPKQUr7w6j12xYbo/jA9ZPwMTj01tH7CJttQ5Her7/C8PV1ePrkvnvzd907fS/D+gkXHi9X/wuk9hnGW54MCf/rwC/7327/Cv3z+L+D1T/jzx3/Hj6/+cVDp87uRz9eiImOxvQpXrJg7yeui0C9fw+YUZrkb5lnp31pmeWV1/ucXVvhn64AfQeeOPyVR/b/CjNr02PVEroQDpqF9Z0hflLkz6ABxkN+v9t7r5Ow3gDvylw/D2Of1LQoUBR5MoXr2Mg2x3CgURrMjNWF5vjOYr/Lp4ll9t3r/lH726gvdXnWFK5EA8nT6PPpFXqe59Ng3iw46xqprt662flvo03P9PCcF6UxzUmSGAjU820aB4hpUNxZUfSVfHJJQXpzbPxE6kuqNd4vPCY7cTi+D/gTzPHMvO848l2lIt29NDQdleDLASJWGghKjHdLs3NQ52GJKF1esfo4oE7PzTmZnGMpdm/z+unieT8cYu7GzandgxjcaP0kx5AquAEOQ5lDN0+kMD88W554i2WhimJgVKPlOWVt9nL3fYw4kQ7HhpHtaW0OSTTk6x9tSlKcRBt8yuFdmoLvYtc4ydTZ/HAvM446MfnW+xfirtc/D0oKu5mfNYdglnfBh8Vu+cxxrhtPdgz7cIlLckudL0hP4+z7LFeDIW+x6pYuyeB577lrW0ktGIH6Gsm9qwJibIj6XicZFHWww4qJ1/kgdc8qTEIiJrRtYfNPKng8yi8ht69c9hXatT1DvUp0WnLcbgTms8bBQ3edZPHpSOpx/tyanYEdxv0pdS/FD9vkqYd8NZzkmZVeX8Yc4HsAjYRQgzFCvEYJAaC5Igdfpsd+fALFNSkGnGwD3Mnf+6xvWThjr6cEcpAm0cR0Fq4TaKXb2eNqUVueJDsO5Ku1dW2GiPfcjVh7tfoVf/mkrkVFqmTy51Ga5YspN6q+JFlSRKGgGPWca7iTCaUoroCiwkz0LwmkqfxQuPPacjA6t9tIpJBt+U3uZ5ul85sDWwuD8y2AJGDWVFf/Km9QfMXZBE8pYRkkC7acF5YlB2/ehgHiEnbPNRmdV4L1C3462J8dM7n/tkL4N/mA6Ju0urkjOT0b0ubGplyarjYO1u1evV029Fo2RBoh5n2ujQAkT4Sfv0HglKZy9pQ/WZz9wZy2uXcdl3v9TvjTZ6sPYzCPdQrRv2/Q2h0LRoL2Pv22b7TUBTXC2frjEjfaXE6M0v5Nl5tK+C9XcJHPdkGkxf1Ef8bgkuJ/ADY9IpExp5VA+SDSTr5mI3Q7K10kHMO6YKk3eg/ZG9KGL1Rwx+lQSdnh5tMn+pRMzsjr/63geNSNtjgeh3AL3jvD4ZmCPb+/pnp6fXC45IH4H9H+s77B4f0/39PXS3YB+T9823SiPiC9EnJi6EV03QM9QfUTHK4icIXKCh5qL6HibDoF+26ByimPB9CRorrA3YVSaQE4N6l4HaXd2XVFTO3436XtL27cIv1+r3q+UFuuEXz79B/749qdhxH78FdB3+Ofzr/jHH/8G//Sn/5zf2lGKOIEiNlohJ+zDcR8l7lbTDUQIRIrwfHuDvNDfQBIxI/rXwBunSeWxn8f+K3fqpfT+4LF9906e3q2Hi6tVRnvo4f5NcXS53AsE3C10h97mq+uj94tnssgTeiXdg3WwFs9FL+i7Yhpefee6fjbF96s4i7tD0DHUx+6dPtp+3q9Zs/5r0byixGUtbHwr83kY3HV+x4rd2tblkPlCpSrZ7E9wg1JJcp3+TSju7boB08vcPmjGe9uJvM/n+9GFtWE8kAW2wL2ad9+GMHjvxmMoKy8rY2r1sn6/zMyKQSWFiCNMycev2Iu2G8GukQ7C4cfLnXgVshGDTHg1p1CjMfNxGVEKRkhg3+hQcU/M+y379WdFsLWSu8z2QDooXi7r+W9Ls//2WFAJqSQP5YQhZHzF7nnBjTJMYvlGd3g5YvUdk9ffd1p1yoVBP4ru4aW5Dibu5cCIXuo22poczhM8sgZ1V9IsfzGbC83vc64mAwx/cXkSPHVZovR3/I0uri7UcKPIk5r+FUV6Dq6c0tV6DXH0TLLXwyRaTlN3inXn/5i82fGF6fAQFsyYzLSfkofapU1kjpszJ/HAQmfitZAH7o43C4ax3TwwPdpIs2htyXivyDsC3Qi/h2Enz3zG8DjfyYSXBoH6hTewJTGF8NM3+TnvCB4iMW5E9bMom4qtlWR4pmHzgA4ELy0y0S14LlJswDZ2JZqYqOTei8ksREMUEdvdzzwJPHMmRIAFfjq2udF5nmU+4VjJKHwOkabLGHZ1/CzURNvcpBg4V5O/JzhjA7oJD9rnBmTj0fJeoe8A7YJmZSejo3ZIt3neAfShQ9Iu1m8EvHbbJGFOHL1Pb/XRkImyoItOxykkWcGOVpBmp6dJiFSD/4x+jrIOusRKznlSdp6XxPO6zDJ4jNS8z7ual/sG6R3at2FE34aRvDuebefR93E+Ok9Fpf5YwP89UlfgZF4Cequi5IWS3EoMUIXXL0/fo78T3LpD0/U101beAPcSDbjUkUcy6DcS2Gs1dW46f+168MGF9NJj/73m7j39PtJF4/l+RRXrbBfL7+mevlG6G9Dv6bunFIVXxm5g5cWUciaxXbAbVM7oraO1DmltLPxsgajAEDZsEeCyyNjn22zN32zNu6G1EzZ0Ui4sEq8h48Hqmu/XZV0/eWX1/vesff1v1vaVFzqAz/2Mv3/3R/zrnwHIL8CnHweVfgXgswKvaUEsYsopKpfP7Tb9LETJo9ae+xHYAoThs3qh2+b+p6UbBfyTlf9o92e7/xtbQP3HU+st6SnocsnQ/hoD1g92X8No+yaG9PnR3FYqKAo7TtWQ/iXrOVeguBKqKlQilQpcIt2AaRSl5zXfVeO5Hjz366qUpt/EJ7w9rmzO4OyadtRvTs+L1yMUYxPWqSqGH8d185AJMpRJvQPyiOGp/goQc+V3A3zzb91Txwpsg1+J4dVqAcBhKKdyvsB7YQijW1mxHMpUTH4nfs1K4ANlcapb8jMPF+vlNEzvclYutwaRE8S80tXrDxgO6l0BwesrEfKe9jaM+03r145bo4B2Mr2gc2g3bm35q1CTphB7C/CWsgI9Urrw66oA5bkaBoXzzMsGOKL/WuiSKqmwpcog3l8yGutREVyJr90MCI08yOnTGFeNsqfTLmW2b93+5LBEsyPwBYeSz90mSg9pamR9nexotRsDGAUdz3gaMVonauS4NKss8uCcTmw0l8DnCzLfb0i82ZPOrwEcaTuuFa/Y0UVJyOFxBEZsAc4wlxEykW7HZzIAyj3ACLHjv5Owjn8rkIO2zygi/k3KFLQns7vJJ6W8Hngli04pyLhI+2C6C3hu1JAuc8nq5SV56PbSb4fsiUmw6Evk8RDMiE0rEaUeLeJHoThBqBu2kjcg0X7HU8YV35hUEdANuaK+8o2qd7ybN0RBjBc7zLR7SWCR2DR9O2gdh9Bg4jg3I0U3frb6Ew3mPl7FoZ3IM8JhE8+jsZASizvIsgAam7c0E3Ce+h3Dyx70zqOUH80Mnm7J0Gu1NYlMXoykPjK6Uu+dX5oBXNo8/ztijtNmjXmUO8EZx0DQuDQAZ8UwEgpmrPwCe5RFTFm8+wynhMYqNs4RAw/67LjRC5HJc2vnKbbbfFHwPAaYCv3g7RDgbScYuk0fw58OiCq2mB8TkaRvdn63ldxl/iV5zJDG/8xgrCroxQt8nsls3x9ogMYteQAAIABJREFU9EfUgQcTiV1zRRtvMMvtoD4LfGbGFJ0EfWv99MHq/aHgebqguaw6w86rxtnp8gHQriYCKkKo3MT6Qc14vgFaZT7+63McDz2nCbaigxPq1owe1zhCwaUoEIjNQ4ewUMWJkByUuauj5OGNfzfIPMtrxwFF0KF19IbyYfCzdcXXZLxnnRS9aqcTsABxUW7tcnu2RJubhAKfS0+RIIyO7QA76KerxV7CeezaermcG3AvfZGI8YWMB3luicxwVM5Tv/3e6dY1yT1dSM+gFRfSOqBZnstzc/Q93dO3S3cD+j1931SFevKGSooFlxuamGG8A9LRTyO0lIvCTRo6zBChCmzDR1CxQdGA1qcAJ2PhL61BuoWvEz7gc0K2Cyl1sUF3Qn5PN6QqCyvwf/78T/h//vj/Aaf3QH8HdOBftvf4x3d/g396/M/5jf+dZFiFYp5Idgg4qteTK8488VnoAnzTbX0vWc1LCcBGJ3YLZ1duNXvHlrndueiKaTh/BmBuSH9LC8/nti+UFHVxX9+t8qwG6BYkWyzob3p+S/lXkOZovXmpWG4+Kz2cLTRgnPn4mhSQn3P/JU8XhqOcFamucCRljgDQcQaDNA4Li5zn8LoqH681EhPH2YC+SvW5SNIxaTLA21+TGbo9/gDYOeciLRvP2YieGnEF6Z2WXUPTqkfhodKs9ruO3pJ+rqZb9H3+W2UfJdzqfSh/Uz4CPixlJr3cIr447njfW3j94X3u42IwVAMErK4wFiHD7dl9QwlPEY3Ks56SFs4C2LyzEOy1/7G/d7Pq+HOv8JmnflkDES9DQAdv1flT8ClAD5weC/xhP7vLhjM9RaFJKY39jmDbGxq7FI2hDlgeYeVnl+a0VLJLxwKwd3LyGGXkRrzPOHsl+fQ8yHj0SsvfKodSzpcQ+WYRl8d5/0Yv67qviqTPEI52cm4RHI5ElJ2opPOdH8/MxvMjWSRQw4g3b7pYenv7R0abnf6bvKCAbbLAlFWNrw5+a7jqG93U31N/pF+vG7PeSHbMSuSj/LsO87TaPEpzlo227u3q15L8yFO3RAkysZlT5jl+qeM85wVE1Jj5meyfAzo3C6xepwL43pwFjDGmYx7SURM2Xl325SomDvhYKsyIjvks8hMNTCFR3JDrx9wAEb59J0DNxmhfvF8xRqz7f01v19+nj0VMF2QFq+OMKdNVgV8U+paEHwNA1M7rNhlqfC5jPHrLG9F9Z7maoVhM9urNNrZU8DSD3f1IBsYNmdHeQFM8oknsQE5NH1jLB9BQ+rDqs1JG9FmRG41+ifURuloYdzVjueGqy3V9o9DtyO1egfFMlv9lyScDc78jYnwtfeMGcHWKecNy9Wp34Tfv44O06uYK3wVZ5kqWl01abry/u9aX3wCWBb3VatC/p3v6raWXnSfJeWT/9sr9Pd3T102/cwP6lzCkrPh4XvqaTPlIGfASdV7xnFzWz5csbI/lmrqAOzWP2PWvArIpIB0qGyBnyHaGnM5AP5kw2QCcAD3Bd8VCz3ONeRZATsORSgWtNShOY+e6dKjYLuNw+xjC034X39OEKlu2rRc8y1Tz+fnv3zN9Dwb1vdsMfHG7j7R9vyJ7odsCukPxv378B/yfP/8XgA/oHz5Cf3w3jOWuMHAdlgB4RUqWjzBvSUV1igEwPb49uUHDDeeC6Q3uXis778sb2gadyrdVqujs08kj1f/BYPjTM8f/z35xbeyUQv9hGL8FwC86rh/78Dxyh+PXmMpQ333v4Ti931Oj2OOcV8PHC/GlYxlgihFTTv24OndSqbla3vFzKb+LbBXWcAG41J9Hyq76fKlFw6S3l8rzV1pAPFqFE6+5iAqyv46wmJKfh57OJ5MC8sPI+/hpr4jmcvhMeYfL1+pJ6Wxl9zeLeeRcRALMSEFL/CF5jek0dofPZGwaI1iF2utKaYetzdpH/0sAoPQoG8+NWEmDRIh2AVpDrwb3Nn+1yYGYNdsWqvSTQ+DvJSuZ/PnZ8pxcMUL9BuAkQ4l9PpNiEZgGafa+vtmjmOabyz/apz5kqbjBnDqK8gCQLuPMTlfwuFGdPZ+Umh/jzoayAmhECLC/vg15qhveOk/oQDJweF/LPBrH8Ua476FWhUZXiIeaNWWy2kZGv09kp5ORUhZdHO0SI4UzhLEbJhZqKaQvWYFt/8RUlfm38xqOLh19p8IGe2/IAl+usadc+LqMW5IcfB+sY//+iyWvRJeOeANXxHS2dGyigZpppprB1RWzJCL5g93GhcLHdtCtFDfpk9xfahMtjoZI1eS2JLLhhh8/jSH4zQzVoBZeONqmzWiygs3zh0dPYJJR3f2VcBJOTLXTFzQeiR7mXgYyu821HiN6He1c0dPTNEIe1Xmt7Dr2Z/s9zcfhYZ5CzCCYhDrfE4SQrTLl7R0+Ur3iOOSdyf3H/SkIwV0tJLTqMAAaHwtU7GbNb2o8oBNutllnf4C4Yc/nlDieTNRWqTDBxCHri9gPKEgGcPj4rJLxHXVGa/Cl7yeWZ8zD5F/eh/U9o3IcP7+GJb6uKJQ2M/ilQNyw6M9StAH6NIqxfrJ3XTx6RsU9M2cnNywqm2S7+EzFNlVTeSxD8O6UwAEan5jjSuAIpvRAsKnRPGW4TV4gIi3TfX/mAQDZILIlcdm+KMSE6LhqeJt1lbFZ2fpFFJDex6/RVv2lQ3+QcV43htf0kJs6muocNncw9z7QWfeo14m0CYN9ww5BljsVfQ7MjSsivlHByzPHDeXIELnHcrmCRrSbozXoG5lwsHGby1QP0W5/4UU+/rR34NcR6RHbeNawQbHNMfe5GfKQwzHHRwN6OkqAo7LkzkvdyNIat0AAWoPR+9rnqPeGU/0ReCiq7yOSVBkbv2CafWtZe0AvsCNZZG1UxAKmBF+hfQwrT8dLILxE8rq5q5ruI7rUtt68i6/k4wmzFC6OxpLf2byM+aMHnXQFRuVtvDN/ErfFHzDPCCLMi4j5uycIebxTUzJ9f3L6ot2Uz/3Wec8Bclwrvsgc6fmlxHLDLuuNi7VgrUwTL2Q8uH2W9z6t+9dpLW3v8mihFQfse9IPnfdPBbtuFqHy9zRAd9eqCl2tx/+S0pfA7U2/e+B/8/Q7N6B/z8RU6DnpyVTqC+p6bv2rOhdbvUNZYIsIX1xGPXPx2BQQdHQ5A3IGtkdIfw3pG1TaUHeqG9BNYWGCPzZbcDSlaLINDSc7Yn0D2gakMz6dGw1B6lqr9WLfzLY8NSym7uNEf4f0vev/XulL231hrBdk4M8ffrWz0D8A2/BC/z/bB/yPH/8K//fnn8dH7BmimOcquiDeKc9Rvfw9w+IGczujmA1NybvqanoGfYtw6gzUU9NzpDhLvyrwY6mb+0rEPDJ1aFzcMCJa4kMfnG/OStJV6t6/rjRb5BMZXumxiLYy/Qz2NO6rfli8X0YaoMXL1UXo0fu9wLv+9pKgzPdFsJdFFs6m5boUkfK4VY4ilMRvrCJk0QzGN+M5J7uuBunoby/O+J6fVekGSEY9glvImM/GyrygmfzT84spQMMZzbJ3FWyuFFavA1a2fWsGbTeki3kfT4foVtboBEzQqeFp7uEqh4H8hM6hZN14LuX7HQrTHEGLRWOyqlofipU9FxeWoQNhweY1s+u0z5rfsbHbB0X6rK9lIGOLg+QKpk5DMY0vpWw1VbormJJH02iYmJFNe4cmDyE6F53KFQBi4TfFFNChsPc+bhaqk4zoIn3m6YQXJfxlE7HjDqahRWYHxDhAEQaaYWDvhkOI4ZTuRnUmZQ7r7LIx3NNInrJSFyhfEY5M0iBUHsHsXzGvZbG0IuaK/kSj/XOJrEsKuiLXywpuyc+fXqLX+mx2WYvJyfvtsLX0XSJgpbwKH09YJd4li89Ndq+y0G6OXOFnO57hUR3q3C7lSC470Ne/9fnrxpnoCzdAdaNVkpBmtHbyJYWaUfNCm9iwP4FbNQ4xj2tRDiNHdQbmHJSJ3z2VUNOqXoJNF/AvM14oXRaZEq6t05jarPYMRreoJIAd34pXIcZ/nFYadihy0xdoPxjwdtxGlu1FxkaqqPgBRkQHyM1ki2b8AdvYY+6yh4B419hsFxvqGKgQEZwG+5y0PJ9hYcwbeQ2N9x6efPbbwcA5b2F+J8bTfP1rilIvYm4gEaCdxl90nOa6FmREpA5Ier3vfuLzU/6SMV5qGy0KW0/54XxvbqZXDAOzNkyjElqyxbqpNQEXv0e0zfuT+t8JUCicrV936xEz3Ht/Q6k7ifapw8y0hPHTQQpKkp43dJzwGHKF+B+PnRlDhszSodpNaQ6Inux3yDetI4znEqHWhxF9e6PQbUPsVhpBDOHyVqqHOl/tPT8TAJ3ONydKmceHx8AN5SRfuAH9/2fvTdflunEs0YUdR7Il2Tncqq+rurr7/V/sVlZX3+pMO63Blk5s3B8EwAWQjOEMGpwB+ygi9uYAgiQIAgTY2kD32/BY4eKM5m3a9jrbuXrtg5YF8slec1PFFiHbLSy9HrHv99D92P5eHoF3R4geATnG/egKxdFl59LtvhoZpwDwAtBPhSYrYHqmWAz82Np/YsxHwsyHAoXgXZQmHbSdAQsWY7kZh6eBcVWuTxYIx8GIC5JfLD9emO5kGbwOyLxzZ/V0Zj/CJfhP03BdzOmZ5xz7u2XfniOMQkLqZx6S+UTo1RRjXX6QPB127GnG6Kgka1iKzwr1sOvDCxrY6rLc+j721+ermMIFaPdrc2aJaX2vqGrtn3hB2WXYslwCIyo+d1Z8saRLm9xpgT3ZFMEn4oErNAecxvnwKHjuqXIOzYfUPxVUb/A54GZAv8EXgCrs8nMXspjxZ4bZz6C3zd+u98D+Au7MND+J1zYqzfNrx74fIZtA9t1kFl680DcGN7jB5wCSA97+9lf88dUP+OfX/4r/+uV/AwocfwPw+rvY+DfHE23e55t2zd130t/fa7kzfVLnHcb3gm5ENwWbHp8hfNQO4M6E5E9GgHf27hdH6ongjZd9QZnvym/RjqcJjdu2YXfPT1Xg7gB89wvw6+diGhMe+k4778L4OsHrIlB/8oNNI789XdAMp1n++v2S36fqOFeUK0RkHPvcJJ389j2EK4pjTULfWxzpt6IZzFWBw0sAH7sS1cvhKA5xkaVv4h0JVh775vEj2oWEgHu9Cd8lLlyON6I3Vu1Z7cV+a++GOmCankMCB7/DWfw+eKE/deO/Zjom4z7juplnuZChFuSt52WUzfPGZfSWRX0pSgZaf0hb19NVoqAvTnsxXQmAe48iMVNAlWrHsjruGsZxKcmLAmWhNEonql2pEln2psjUrkxGKEI10gyKFFeADu4PgCu3VLwv25qifoUAswW9H9iBupJ4Kx4T2saaeieQ10mrvT3vB/8FwN7GnztmhULdQrOycyIEZJsPVIH8rLQ2P40XTgsbEzZLXIHeD9QMhSwh6ieluEMak3VYf2adV0Aax5fm+coE5UF2nwjz0wNjzwxafVG+TP06U3xdQItTKzmX38DXnPE6rPim8+c6reGJaPUU+zoFol1K/BEoOlu/SgyD43IqayaX8+eQljaoaU1z+UF7O3dF95QHsG/texjRSbaRvfHv4t3JC74Yn0+offRDVhnRfsDkQkay6hcB3GglUV4xKYestndyJOEuV9Gdm01CEpeUPEGvL5XgNNv62tVRkNQ/ycgnduht25Chy1lZgY6QX7ySceh6fYps1KOWeHX3Pj48PfVZ0NdroPXb27O3dbnLrT7guRJLE58MSmj1lqi4DGpyAolT0TTmE9o98oWK7XOB5Ks4WIk2D97uwCuN6BmqGtMjG+lBZXgfAIxcp1LiaHPwMdOFnqCXxjiZ/40jGDEujh5hEWqoMg0opz1LI8T0YEFgNaN57GndqN7vkvfnEWUl5M4qNAgG1TL3zZJak3Fc5KKBk0QxfkhpoaeIITfDmcqabC/W+NbnD+B1wx3r/Z26bHytMMh7pHNr3aVr4bl0l6D41PJWZgBWx5VlnOrW6eS7MH9NNtVJT55XcLqGE8sFfXqDzwSLQz7+tvQt/9a8qD09as8BoYNY8E6HJ9+7avn0798I3a6B32GTfs9wM6Df4DPDRGBMz+vvcYlSkMfGbuGm9B6ye4g9z1OEUuHNgbZ8svUTYRXVp1C23OAGp+A9gNcYtP5///AWf3z1Q392/x7/df8S+H4D3tPp76Oa55+0cX3pscXZ2K4bSDdgDHDFRvEcTAwLzwZhRL8C3L6oSGEpm7KMlKciwPYKkPdfL894PaPzTPFWBdYyOJdwioefy79QqDxmnNXxPFtyatO4+aFP1LEpoUwzpdj+GyAv0e5GL2U6+PoT32saQijw+g5JOW3GcxFANvcSsvKGbqKGmLLBlZXJ+xjInz6e7buaB7rzgtC1SrtPVVzBahssMTy7t1pTHHtkYqGyG94zpbKTg9oOwjH1rY78LKIIWEI1ku97V/6lfFo+L4BwfQL1q5Xtd9EuT8G7Im9UnGVPDQ26snFcI9Sm9nspdc/po46+3RzZeW53BElPNGp4hr5KRgW5q2dlb30bV/iKmTlki6LM+mDP7Z+IPKD9SoyoyxPaWlE9/BwVMqT310bjBRtZsYCnWOK8fTmsdYNLOernh2cSekVoupbyz20FHl33qITORgCMMshzKrVmh24+A1y6cg/fdfbmisLPJHk4Gcac63CZj6roMvFkSMMCxVbSlzGQDDeTQqf1+0KsnXe6RTAOKingUUQ2OyS5GQ/d1HipMylFP4Rl/DzWAzeebjGXFQA+zg6FnBO0zoEUJtzvPI/VQMb03WiOcf6yrBC/ea2XEuymB5/OvaHhhd6XJrUlLB9G7AZ1ALpFleyJ7gkyFdNgIFykpMk0zbnO0ZwGXjn00SBOWFhyH8N+HYHLVRUPD0VOC18UrWX8d97rvZsP+CHEmf7TxqD/crmok6rLSvFHcdn50PNu12OQgbwlozGk/LtSVIeeugZU0o3zQYGT/Sa9P/adZL6OUv8iTnJNWaEIz/xuFD9SGPfuuQ8cSb60tJkEZ+Ehy/uMAsESBjjQi3rC2StVkjEfKdjNgPn2Y2XHh4pgw2Bk/vN1SZnPAw8knADpWgvnFZ8VTnGSf4S++0bhAV3zbYfafp694fX1fqM0fIzAsIJvlBS/B7gZ0L9Z+FKz5rEKtspBaDM2SMj2Tnq+vtE0YX9vYdz1/gAcYOFlNW/eTP5vX47QXbAfW31HALudqo17uiKU3COauYCTCp4zOW/wOwff/Avwi3mh/+mH/4af3v6f9vzj3/Hiuz/jEz606bBJ8yzY0cb7J7S7ujf0e8wd0p2F/gzNwRVoe1CPlOjvFM1A8xzwynD5YMqMDaaYKvU9xOg9A95jXwJv7NN1YpsCcgCkKcKObz+YQsEM5q9eA/uHZXEBr7GO7v4soGY4n6kxXk6eHUvaS/n9qY3fNcLvlYIyLSNXwUrHy5/12UxZvpvyTgWQj/neSE7v4a2TllZ7PaEEP4GsmMdKUgTFRLW0dI+15WlJNjPq2oAOHLd8HyCH3vTvlk0PW1+Lgx6bzQuF7BS80fHzcsyIDtnMac890Nmb3ulIedz4MCVJa3eM0A0W7pVo5h7lMDHDlahwZSApTQDgKCQvIL+LH4IWIndyHY2jy+E90zRgJQ0wKH85iePqSt9Q+Kvdv2n9rtrq2xVv7fcPFXFu5tS4IDSGvO+klct6wRg3NPFcp62mh+LJ4n1r8lbzcHcDuvQ+9/D92g40+rUBelQ7X0EKUJfNNlM4q5n93cZTNJghQgJQ9wRESpLpL/lRsAD2aJvlnzAhPpypM6PCUPdjNK+nYNVYe7fyyLq47FOJz8jSw7v64ET5bgSvHuXRaV63lmzSjejAZE7QvuQxsjfP7+n78llfPlrZlr1kNkh4WWq8ZWQKvqojCjr+HJdGLmdRwNl+P/f8NKh7T6YiZuN81iCZPDuD4ixfrD10XYjzPFCZy3NWwbly/bODpyyTxPptD4978z7fKDKKHyZjQ7ravc4sp2wH+KEwD62tssWd5yJO53ytR/LyJqP8ut8J3zRnJ2tkkC+nV6YPl5/47p4HLCSugaeFYoYoXWkl+dr7OEzX1z5uQitNfCFJ9G0OAavIC9zu+UxzXHSW3ul+NwnL/6msZxiOKURZamuEKhnIo194jJIwwPfexLrsRfN7pxevEz1sPE2uCSdp8o7Q2cEmC5mntMlF6sbmHQiZSTXtbzW80KPRRMeB4oHlHFhoos+N5Hc/OODvdkA3w1nagAwUhMrzhsZhlxkO9XBBnkt6bKHa+ZCBesjqoxnNde+fqkZrx7f3SSAfCNrzwO0OTSFxCfBE73Tvo3YhH9WOicnJeNGc3o/oV2sQbc9058k0jEydqvFcc36/KnIl9tVoH5eIhyGDo/PBx0bcOZd/oP85YJ5eyj2LJ/GeNC/o3aPgsflzUe2yLONx59oWcoD2trEO7mT21cuLBu3XCQPaE1rUz88EnaNM5ASd9/c1nudfxtBe+TdojSjJbnA53Oj1u4SbAf0GD4DHcgOWRv13EXDju7bNmpjyXneon3Le9yYI7/fQ/ZNtTO8A7O2QvQuSvpHYd0CaAV33DXq8xxG+aVKTY/OJ4ITHo2EqVd/gHx3eoxtsHRT4+cNb/OHVD/jJh979jk93v5mBhsaSh2q3sMXr4Xpm/NXpt59K/8ixfHF2AX4A8PZzSiBlU71hEnrx3bhXuwTFDU93KOAUvFkRtxrNHT6hN3bGlyvMlTann50j0DP3cW2Wf+f3s6UInK9u9kv6WRO4zJk76mxTCADy0hQshKQbndnIqTuy8tqN0krp/dmh5xO0cb0dqApD1g2a/NjXYFau293mAModvCXMvBnKU9h292w3zbUYXtMQw4wHESvsZ0BThvp7UzqEpMEh8DxTUkyUPlh5ibpRInmfg+5G1TFP2uDbQAijuD8n5fHKYyoMuKYc9jCbYWTfe15u03TMVbC5bx5Ggq3JXVvXzHfSm5eSP03zSVJKjbEiNuy2poRPxnC7J9eMOYL+POjqc0+20I2KK/GjT4TmWW+ZoBnNwyZShpfa+6rzHkmkxfu9pHJUy/jV9G317nNBZXj8vDLFGQOcwZnFXPP7wRv8bD1z66KQ8bx7lBNONDxmHujcT0M/KI2rx8Aie6fwwkD9VMqzYbnK7RZ/WvnfOZD4x/LkTMr98EQwlHSyexRveUKfLNDT5fUg7nPXKvsBYWT2QvTY1zS9M1Nfz6dsLJxNl1gb0MfxanoGynX9skLDgM7rk61Xtn70NZn5JkcZaflFDtbVLY1sm91zooAc0rzql6sNDDavfbXpwXbsva91XEAcIOuLqe/UOyU60Xh+AbQmRuj9jEPw/0DPy5H+S1p22fzO+bI2RSIM/aNcVshEVDYjbTJEW68kaI8QlSb8k58zHln4yBW9EDtA7W3p/dMpK0Z29jzfuNPo0wg07BtKX0oPvy8hk0ZL2rfob6caGxKZ77gsZbTZdwtDDogb0l2Gimg9JivtrZ7qcT7KfiMDEQh2Ml6LPUspmfQhG7gxTWwkCrj7ZFdjG+2QgqY+RZflvA2pMo10fl853DHEn9uz3Q3oPqdCnrRnu3ui+5yj64FqfxYc6gyX/M/VhiGelvOcRyxC5WE0pHspEzlodSDpSWFKHepf+tSafoHQai3m57MDV9fA5zDmnV2ngSLYL2AhGAxye00jE2o/c7tr3+UXeV2/uuzVPP2WYNH2yop4yOPzDNdT41WJF8fja5B67Hx9LPCaeIMb3GAKNwP6DT4zmDAOYKFFmL+bbhbum2eTGQGavtU2DbZJ3cOSbpu/fQfkvu0PsGFT0ojux9gChXdUwuexi0nfcN3gBglcTqaNlHuhH374Jxzf/t/27l6B7++A93ZK/DtXsKh5uaJ9/94K8fLurfzqif3Cfh8JB4eqB/GynwJ8z+ue6L9pLvtHq/fv9uxHAX6pdV+Ayxtpd4P/3cs1miwN8mXTcYfmveEKr/3YvChf/bHh+/GXlvTDhaHbFc9rPH8jC8F7Zjj/aM8/0bOq9TmtukjwK+X9fqE8cyf9V7MCHrJZJEE/jVfegCLThJUV54aUlM+Z7kXRrlIo8zeXqzlzrduVXEJ0H8pqz9UPlMHXqUN/fWhe3mGcNq9vAMDhgPAQCsPm1g+HMN1cyZurtnIJfwrVHv5+Xi6XGQp7IA4ARB3tvdL3nI/HtFVsH+qb1c1oeMzXWCiaUlK4C8gDKege+amb6nKd+leRw/CXfquexpwu8PB0kjesioKfHRbkvC12TlFwUru4Ui3fa98GsJHHKtqbfBRDg2giHqaey41m57uB48fmHuhtDKiYR9bBxquSgX2TZthIBneT7yBmKOqHMkTM6KUjOp0tNGOr1PlFRoqIgsAkM28xSV76vQB2WJ4qSsz4nwwyRJacznBYpXkoDGhVJnStjHsmLdHh8eivSmCmP2nLoknhgb74nT3TZwb8CaOv/CIlzS/a+Rtnqj5wqIyFB+zVoI337YCFDAZ2VWzWvmYI6vj5QWIgD8EwaF1Vd0KjwfIwz2ohntcZd1On16X/nRfO5NdpPzljQ/CJtN6vtq1cvdXZva4neWIx4mckYBhfG8t23Aj/pGhVpAUsjK+0JvmBKEHvC1t3xY3pvr4fraLNwrZvlnHbotgWhcXX8x2Qw3yLwJ51U4I4Teof59n78x3oBvtaTqqwrIc2ziXl6GNdyIgrlMA0A+28osR7PzzYpu+GMYKTLyftYKpY9J3mtS/B6lXqMaLep+0u5N7xfjdypKF1MSHPi3adBy5/+bbgVytnz0lSeXXCMYOIeW3cRmoftvBmgtIX2o9BaFrzBC5DaJJf/IiG9Ihpiu5lvmsYzkNm2vcWZTC80BU9co/2ds1YXDJGdtxifg8HrXgupoI6feK6BHS5Bo0Ocd+4H371QZj4JvWn0pxwfHank3nfa4sO1apsacP7nEKztzKP/ftLnz58AAAgAElEQVR7ez4znu+VLr2/mWV2cFXz/VrKmDwcy6l0PpTnM/BDM9b/Tv/DoaSjsisTi58yohBpygIxI0Rt/LIez6s57YTdTcuv/G3WpqeAp5BLr4IT9DoJUj4XckDiAScKv4aUemHc0SovNGFtlAXOlP3Zu+SzgI5f06fzt8+LE0/x4RDqCpmv2Sgda+0F+5rnR2Tx7Cum30Phi9D4Bo+FmwH9Hw4eO0tXG4RrcZhIltPNCtWVBBszfO/H8EL3R0nn7sYEz7ebpwA+QfUOx4Mrk2ij6RvUYUN343A3eCZYeKH/9OEt/vXVD/h3f3avTVHFjsKW1gMzpE2tAmnTd8mnohk0XNF3XEqCeLC4Ptu4nCqq7nWvAffGfqe9jqkXOCH1bu/5TKE6Tn9XWuDLsgb2Nq8KVnw3yfBx8n1G/HO7dUr366xD6fuH+u4p1pFFlbOxNDvR6+lOjT1Ow89WpLm6WZy5IrL1NWjztKZw9DEJ8goPg7lADofuXX4A1K4faB69XWmXPlM7XLnrdc20W9rCbJPRMmukpdM86uV2l7qF05hh1dvLZRG5wrMvDMf+R0os//QDdK58hSsRhXTzyoV3fGbLfx0ThmmSHTyflauuiI4/8ltKxnPPc4SysheAR99pRSu657l9X2006+Z4Nkf4RbTZCEDyl0CTEnWcQiVMrhNGBdjveihhsTELQbtmYAf0YONlC74b43Dzdy1EqW4KqEC3uK23VefrYWpfaTB5dzXP3G5cavrpTofBTkUtdv25iHsT+xiucitG47pMiKeUafBAwyNgxqgKgjTQR0/xBTyShQ8e+4OCqU6+gjt5Kc7aUlmb15E80HXEo5W+j+OmpBhxWqWhn8GuiLmoEB/DmXovgVqv8aA47UFL2erQx4TnzdTBfFWBg9DzvHerqM3WFoD9ObPEMHo5chmqwNvg37UN9Htgk9SXduAFgB3iQYmM4mmNyWiN3AOMB5JmjZEuZ0Oz7A6Q3FnGROSZLExuXIvDWc5jfD4YM3ODeRQpTe5X7Qdutw2AeaHrDshdMMN2BsrKkUPjwzE+ClMbung2b5RoRmsiL5j+O/pOwYX3A0p7yTtDhOY/pYtpR+tHHBIMecaei3Y7J2++bF77lSYqtl6r3x9P91+L9AgBIUAQpnUM+FeXk3hG9lNc1D4eI97ZmvmLG9J/y1mGKxDq58AzyxzyuoY+aH/q4zNq2jqWbgR2ASPaZqkV7XDkrhGqHftuIcgRBnO1O7x1P9r5EjMK7xrG5tyEkR918ZdpWcYiOE3N6D1eVwpa/5leaQrN8LO5Iib7+XM7UKn7kSITaT9MENV4PipLFe1aRKMRG9h5Hg380r5rQnqSpvyes/30fXXjzePAcDx+ypHlhI3xMz7hMis9ExBP3pDlb3rHZQXvP9O4pMu5AjYh8fsJCVjn+jW4PbXR8DGi0QqVWGJsLD8Ryo111zlsn5Ph0dPQGvglvZG/KCzoltb/MdnnhGG/wmsV8PCx/5g589jxcmndNdm40RrzXI3bTHaY1PkFxwAJa6sX05/rch5a/w0+J9wM6De4EqqA/JhyvKxiDXQB3093k7Dq+4kIzeZ3oR/vzZ7QtimbKyM2YBeB8r1cCmD3i6IPUDc60OrcNqU3rnSDzwixkbbfArz9tXih+x5vQ4+6LWj32b00pcUnNA9gVXOI0G6A8xOtPoWPVJ5PKcA8ai+Z56udwLlsprxwXF7a5xubt79Q+W+kHRyAAn+0dB7X/geJZBCMnuXv7Pcb+/v7bE5PNvlvBOFQcqfAx58BeQUcP5iHzitg/9Dwd0OSop3aP0WParT/wfJd45X+urSZeTJXr0DXiFVYCXozxQFwcjc/M57/6l8voffs3QOl4tBQlXLOjWWee1XfuEJhpSeqZdX3s7rPTaN0L6kpqgUIw7l7eB8O5s17aEZ0+y3YsLs3+lZoolvS58PDTIp5bnuoV8MvrZSVBvGb63Bi+HpOd6nHBy3uHKI+3mvWBwv9DmUHITOcBu93tMf95Hy3uP/m8sKzyHDjMbRh6N88xIqcxIo2zY+9TknKG/tjxbArKdlYrtposTPz1lK4lR9jWfO7Cq7MDTwrwna/pj2vuvixchA9Te7a7VoBVvarohnRj1Dd2r2mInGDT1NQHns+GE39ShMfMmLyIbsQCnmuob1PBmKTKd2DnfXaOQ31syu24hPd1jGFE7LzU4nVZ2HGkCqTWzE9e678u8LivdD7i3B8Ktl7zoBHD/TFUvVYSGW2ShSg+2n9D8h8TGvmR9Xv7Gu3Z8eEHNVTPVBrQQWlaAtlcdYw0HdRxrUQy4DzBQDKY9NZIa8xfDiI1xE3NjO5lfjADM7ir4kmejJTmfghOyi9kkA72K7251OI60zE1krzFN/RvgPIkWhsv+0O7C7/q90T7YeLcAS2u2bw9TUljOgK3Xbky8EdZojWeU7rsa2XQg327xJG9NRp45oPtH381JDuKJX6/QWj5nsnLe+SXFIjrpTFwiKlhNF8U5KN0KLkCUacYj3q4ySGtVI9ieT2oB5iTJOVGsGk+Y4aIWiyfSKRAHGoiJhL4iU+Afl3Ekbou0VUGuQF89iHdzPxyeAj3cO8G893s49z1J4d+N7lKzpsODWeU/v9AZOMMVfz7ua+UZAsJLWpvb66LtiHeOdqj2IxrIYKJPd7NVrsimYA1xaJaTdj+L5HWbkQMo6ng1tq+1g2nkv55DmIyRgYEF68m8OKrXVaKK5SXw/Vdv7W14hjr1gV2aAOZD0lj0EgrsaaVRx11zXlnJwzG3uLwTh7PWF5Twp1Wj8LzOW3B7cr1lVdlLFYK66u59RL6xyWTyrPh9KB6cfCcw+E54DJwKrsZcVubvA4GOjLMtYXwCch83VDHbUsrpyEb3GK3uBmQP824Slm2mPLeIjkVOsswngSKE04l1HITIpgvwtdjoAKZN8sxJyYbcFDYwmlV1MitHjWigNEtn6t3bNwsxt3vMEZeI9mUHWwKfHv73/B/3z9I/5fADi+B+Q1ksXCDeVHbUOaPe92NQMbFbg60Tqs/tqVOizMP8Vp2Gv32IL5vd5SPlewSWvD4Hm+QMTtO2kPbW7UO4Dtg7ETSn/E9XANKV+7QuyKsq9iO3VHfKqTrIJfT3TccoN6KS5PCKHoOUE83jjUfa2cebcas5FHSlmzsSy5fP4MxRobn23B2jbyNt8gd3eQwwFy5wb1Nog3OUDdY5yQzL+UFOIjjsK4u0Iw2r9QksuqQV5XzeMqMlbSCtJGLiXNckS/7tXKUarCQlrGvGWjefr074Qn9lB6CyulU2snA0GtLVEmuv3fFbz2XXZtSl6Xf3ZF3EcZuO0WStwbqj29F15AuK/O8I9m3NsnD9H1PvHIQ5vPhkBVipsnnhy8kobYLmhXCTixbIxvaoc3Wl7IHqM1xrAbJWSDelh9G1O6W1hixucUe0tjjdCPppPna1K00pqqIE90ZHqn3bT0+TOrs+L46CVXgKHz5/x+XpXMOtiyFRqPCU6+n98NWPCaLDPJQBtfJP9Wj1+R6613gasbA3u2dROuAh0L83GQthmTCp9xCeycVNMwBD3v4/5MoZR5X5xCWB1OeLCIsPl93XmciPPEautYzZ+0rhivj35RhIe2dJbFyxdkbFvw9f7jdFuIdwS+RbjwYtbii9K/Oz9ChI22tVvVrsbAsa+/gvbbo1ipICKfbDZOdtg1G8eGyyb2WwHZ6aDd5LDljCEO15y4cdx/W8hvWiP9fX3esrNBsBcjyofheU3XTGVeHjdfZ2DenLTuMBvtCzmyrGMo2OH8JmeQx3kMKC9vQx4mvo5JoFvXJ1t5WxSWtFyT3DR7XF+f+r7rpCgqQLn9kYm+U/6ynnr2+fTw+WAD0tNx+h0Wul2TwVz2HXq06EIeqjzdfa792YxUtR/ia77lXMHjkdqTaNQZBwd+6IbxvjL1z5Y+rZoDjXa06ESKCF+vapEYrY33dFiAkGv1kqd0lR9VgTe7HUavHTR5VvlfMdQzxXII/5xXIs0EavuvkocWC8CgX6xy37HvDw53EyQYlyO93ibvKbuiz+vZApJ4ZS3ozFri+XmN8joXZPgyQPJvyM/otJnR5bEQw3ZV7sJpqsg4UVb+snh/CljgLI/3fdFX47wZUkwFkm8MdDFYld9Pfld4irbXvf6lwuyznMj9TDC0tcgBj2naQhc3BBgc6vB8j6j7GWEm6o9ywRn4hofMPyLcDOjfLDx2pj00/3NxryrhXSLx+WbN4s3tAuwb2l2Yh75BEfO8Y6Wwb753oG1CfZOs457hSeHGIW9wAnzI89D/7W/YX/+AP//hX/C3n/8T+PgeePmmSRz3tgH5zhJvAA40xvwu6uNiHtXHbjB2Y7C7LF2E+KzABfgBegsDHU6F78oG/f8xA4p7zv+1GHZ8r+p4/8GUTj+X+uL+dPv8k2lYf6r40+/Dh+bZf0QPafnaTjjsezOiux7iiHZq3+9cvxR+OfP+NSnRroFTKLxnBif9YyblsXIQaOOJ7zpfIkYb4rMIPQYWCplLD3lMSHGymvr9pE7DFaUnNoJAV2BVJFJb6B7oMJjb98PBjOctbLveNUM6DneQgxvWpa2B8tEUFt+1CtI9lv1TKbTrgBI3x42erHyahS2cfgLhDSdMK1cqs5JO1/1j6ZpTl3T1lYVE3kWhR1OCKMJzqHkzU/hLV9pMDYINr1Dyxd3cTBhvP+XjonaLbOPeW6bUjbt2FeBw7BpKYed53UAgLvsoedilHRwTazJHKi1jb+qKa+3NqWPc74uvJEo/FxNDrR3+w+83j/e+FiighzY+xA4uiJ1o8kMDbnRSAAf2MDcD9lbr36H71gw/LRWG4yMeDtzKVjj7lSi72uQdl664OsGvEz+cpDsn8j4p1D7i31Wb8Xkweh54CEF9/G9zA/9KuXNK6e3zSsdHEWY7pirtRR4Ip4aSz9F+QzpG5fGkgFkaFllrZtFLhnTJ7Xys8lb/vnX8u+DY5cbgjau1+dw6H/Xe2RSVeJULmfFY9LXEiOOHsluKQ0f1kmHJ61IcGvIPDt3taI08r9NojzUreF+MN+OfbiSP7M5r0Qy1dkhX3KvV8AnTmNvOVwrwE8JWBMqa0cAmilibYg33Im0/r7rHI/9HldYb//SxQWi0Zud1Ow8hG88ieQyq5IOFkCha4w5b6fIbQB7nfRz5obBeLoL2WYYsiCuo3/25dwQb5gXdRVpi+dFEmwJTzW+dkPWd//E6733F80Y635tADCMf/xwd24vbd7rzXIHvFXrfxkc8c1krIvdYAX4ocjaPC07T7QTzax4llW3b4T+Na2ma/NgoscdBLjcue/SnlteNen4oT42cO6D3CHnV26oekdGRYC/y/iEmd4fsGHKvfUYkt9TIkI2SrGN4VhL291z/hcxvxvsTLFTXU/ZywPJ0u0ejApAiXkY5NvaO91Sw0v3pgn4A1uc21XWgaEl1jVBFu/qi4nuiXasHg/Wps45ynuEzypdXQDWiV3lgOQ6urgg+h8okXVcyfXwuLfd13mPwx4jeBY29ihZPRrgvD7r4PJn4uWG+XnzTZA/6fr5G9MPMp2SL1bOvA+YqqrMLWX/99TbtBgu4GdC/SXjMTHvsLI2t4ROUMXtefusewmHPISQZmoJ5vzfBHtD9RXgoSJziZkHf6nEDnsc23DqzYw+Mp4Mv2W83+CbgPYDXyOuuAH95/xb/8/WP+NtB2ub4XoE7UkD4lIwIitI3JQETQd6hTsmkBeD5TmWutAoyVYPNgYXh6aaivPhRyBg+yXPp5jCxsBnfIeM447i/Q4sA8KH1g6fx0O2XGs9f0/f39R0r3HC6Tefks8qq31/JR1hxC5y56/wbBx5qlyoarmn+yfJmFYprrGxOsae5PdsOwN3Wwqoeegh3vbuD3B2gWw/pDrkHcGd8wWK1alf29upfYgqk9+zsgMZHoh8rjjxTbZ8X4kZ0ZmRdmRVFLoee4gDBJtKM6GHwaJNX1C5kUcXuhgLY/ZoegtGVNnwdA6NtzYxI9gpTIuY2xbWzjOYeFfT2+v2b3va9yRxiilDVY+sjV7SRclNgnnr0LIzwVfG00jrMDk5gy/KRvdi8rdKL9FRiYyiX44km/e1rkh4h2OKO2JDF1O8hF4qc0gx9Imb2EUJkMyPgUe0qHsNjkxa61CIRDXMbVkcyRPi44Tu1maJ0hyk1TwctJZGP61JKx2vz8D2z3OfhsNw3jTh9uGigAkZ5UdIl+PEyclYvc0GB7Bgxy9tHcPU9vwxcodOMb9eUMEHeaUq8Az59fUSpDyiaXA+8A30pCohE0VUs6O3NHoOBO3tIT+rJ+SxLK/nkuJGT3xw5BE3UcDXOBMFmr/3SLQurDCCM6PY1LUEJqYl8m5T5vT205LQHu/FA8fUAvR+Z15JBbCRAldO5/b742K8iewfr2SMB0vUm3vgwXPbx3HipV+cyp+Ml3UO3nHdqRnTjrzjYvtkn9955eB5hxNTKJI0UmrpHnV7JQ1Z79JWYV9pwcQO6Gx2rZ21UVNdI66JNRtSk9LtISxdk9H6ww13a14/mbW54+n3x2xaFqlJr6cCicsWidIV4T0NSW57QQXceB37PQU9IJv7JDO28Ct8D+DDSK1L69QCcNyYqlWP71Pazx5uXBY+Lp9aMfrW080ej2Y4WrtyNyMcm0+nx2MaJoh8CqcbzwbuOOp/GTL/OoTJAb6ubvmec1+kszdgvAESg2w7BsUga4KnuQiZ8DIvu1gT7vt/ntrknfhwUUCQPdKYv33+uaDRLbeyfy1WoWmbr3FHAmUf3PL9Du2OukGioa0bLJ4TJkE+GcD5ElGRE+zySkTyuxJrg7Ab67TC+831YsPoL9SYz3BeLcx/i9ICXls8FK/fSiewbCC7XxithONzBQgE/1z6foJhe8XB13eWzQt07COah2y/CY5VGT7z7WiEthh340Bz/fvLqL5kcmklbDxV9s0A8YsFXZhAyz0zmSmM80ycOkKX9odLvM3381QxtOTEcF/zvBt803AzoN/jMUBdz3tRXpXtO55sUtTtaNYSr3Q7Xb9Bji6Wsu0wZ74Y4z2tVmGd6CHKe75zkc4MbPBO8Rws13nUcwG9/w6fvX+Off/gX/NfP/7sZz6HtYPUO+42W4Q7Ar3vzmv7enjmEjOdCkvSpp+WPwUOgex2cgEOiv/FKLhQiP6GV+9LS/5OFgfxgys+/GjJvpFlyXgL4J+l3bP+0mJ9/2ibv6fvfbPP0J1PE/Gz1/HEDtvfA3ywt34UOAB8V2N51HcCJyG5T+ANaf72dvHvNijn7vLPPe0o3I23pkoD6zO9PXxrSJ303PVp5pn8r731lnxYFP+p/jeeB1RA8IchPy8CinFOwTH+uoIK03/vsYUDdYL7R590G3N0Bdy/s2gFpRvQXzXgu2wE4fGplezncNmCiQCXlULKeTQzrrrBPqLuyXDqPiQa1hN0rT9HvPPe0gl4g4cZaRjc4CcCGpg1bqK/VnqgpUnfbmB3Zk4khlJX8zNujFHGVFD1sRE+0VSpKc3Gm3HS8mmc0eZ0PClBLF5r0oujhDfygxFvIMjynwxJcFEoicfjAn+UpQe+8Hy4Y4r2nvSOMVx+3pozfAOgB/WCFjwO7H33nawy0r1+79vvSDf80Lo2GqkJdtTAgzJlH8pAczpjV/EMxM946y58hdGzPppepi8dqMXlM+RVqfat360drguT59qykuxRW24kwEM7yXNcHo6QjMUNnXKGBz/kNgn1IfRKDUy8vRj0n7Ety47k6PO+8J5eykPNypvKdxzl9L15gLbz/WGvl7f27r5913ZvgNpsGfCBJXZF4xQgWHvHOu4nPUnFVd+9rblpaPDI7refqjFYVcVguyLYjH/7wPT5zTx3lrzgQ7+tI957VMBTutj/3yCzdWK770Yz63G4vh2jTLdKZgR9ZbkBfP7gZItS2LfZEzbG/chqTgwSt7G1Du2dZelme2e+gdzrymuuPBGRwpnrceJrqJ6N5XFfHSZzOWyltMvdfUY3DAVpAsZfFcAHD+zbWusiiwbCDD7HhW6XtF2IqCeST9D3wjna4IwzqiLDugAYN1elSZacVokv+zGn7fNMgsuS0qlDzRBcVyPGY06Su1U4HH+fqciLs89j73Y19aoQImvm4YH7WZC+hqx7UDmbqB27TqkNnzx35Gu0hGk+/75A3tJjIYE8N7oXOuJyQH5IR84xcy2k9mp5d2dCXBDOU7wDkQH0t1Fe+bth6cWkUNSCPUfVy6/PF2vMcpL9OdFkA7auuNjjZYjQTfoaHk7KfBP8ZTo7ahOghd5yo/Fnw+hrBeXPhofz51UKVA75xOENvXrYe2jXZA31Wypl58a3D77hpv2e4GdBv8AB46AKxElwq81yz4qQoiR2Re3Ed212Ym2/scxkCtwP6JodOnKpAXXBV/ntAM29wg8cCTwP7/M+f/4L/+ef/BXxnLurSDArDGFVpYdx9f661MIPVFHZ9l+MxTbvYAMTjK3ZnnHQ/lfA8Cut3F2p39G3mG++0hYXn7EybdLDgBLw5hRssVLu/+x7xIzRnv04yjeg/DUz4ex1Dg6FuVC1/cTi3TM1ODM/yXN2cdaXuBThBBkHXiJoCdMO5XUMizctcDhtk26DbAfriRfM+99Du5nGudxsg9xDzXG93lPq4srr2NbZavwkrvdyYbic+Bpp1ZbC4QgcIxYE/0/C6IMILf07C1Po79YLQ8qrCPRJhXoi72qE5tfV/F+zmqSagu6p53S9d0vCViKKfTsGHsnszL3IQLVyJVr0zzSAAgEO2h/fQ3o0D7S48bUpwq7ehubdHQR+TnULbztoG+2Mxi5V7nDaJZ0JeckWhOF1PFBHR4MS8656GrhjzsLuWabcDjTuNDdmg2CG7y3s2NnbyovSQ7RyVhdPwAYSo29OxzNkMSEJji6nZsdJiRJeeKOi9IETyJO10rKmfjKsuM7PqWu33IrGe/Lmuw8mik4fjCwxUuCCceS17pPoXXJNivjX6alpLMdkWjXuXc8Vr+R3fpdMis0/pve18BV2RpVWmcUPNcABrMigqe1zgfBoEg8EVdZa41znQDf+Kv/Pe7sLaBuR8DhOvZOM+Lz1a86Ifymnvdjh3y7ducz4FNj8oJXAv7lgKg6cw3+7UUK2CM1Pf12j/LPdtp31Glw9inCraOuC0SJE7jB/LXaeZt2cYeaejOah69IC9UUvtQIcfNgtj6A716CxWlyZvW+24xG/nx7udb0gdCkDSVSURGYXx82verPlKzF9ULQQ70YXSAoK4hso9VpXf1xAJizEbfeQpKbR3rPs0R/OyFvRiGcXFzHiXSsmZ5RWyR7oZz9tBSB6DTiQvV8q73kzZiWamc5kb0LVFWuDFOL2j9Hv/yxEi6C/N8d721OzJK06UD2tS29LeoveNn2dQsfGMe5vSdKiU+8LGvvrBkd2MwLv2gwJeq3pUJWobz4EELZ3ns5rt9+lNeL3GQxbPE20Tl5Y0LnnU1zLn9TwUDlYKb+CdwZakI1M/g53BXts8Se+Gcpl4pfN733AkOfUEMJrpAMUF+c6V/eRAM2cIdVQ88a82nl8KSm0v/cY6YOBx9Dl1+nUvk+D40LZq+vjdgZbPZbon6K/HwjkcrzkY87mhLhUXjieWejLrXMkxaxr4gVFNfanf9th+Nh52gy8JNwP6Db4QMENJO3jMJToX8tvJaQ+rpbyy2iYjTuoCYC/0maCehCWh+0kHJZbnvjHCG3wGqKHcAQCKj/s9/uXVn/CfP/2lDcVXP7aN+G+WRPZm23q5Aff03K48DueYQaly5jmQN3Oc6A26Fzp7owPAmwvmyy7dQWVv83AIhe6e2J/s8zv7nHlyM/7n5utPLDG+m1+V9nftnugvrOC/u3fkmSrYcD7Qxt2yif99B0Clt/P+10Z3X6nvMQeOKDCDkx7nVudSaTAZDMM4YW9Re6GUsIapD7zs83N7oqc0LqiT4tGVXs+hXBi6wjfyXNnLjJMZ1WWzP2kGdGwbjocD9OVdv7qBjeh6h2b4ligD8Gq2Ftm92yOp2zQPbTfoB608BAO7czvu34XSeFSM8Tqqk7yg36cIb3wiSms0POo9RAQHUFhN5U/PTnWvDsoxAeje7/khiD1vCpWec7fGnNASWlQRXnWh+PJQtRSGk6w2TeGp3nrQi95XGz0bFJrc0PKd8UzJFwpHT3PBXFn3LMlfZkSJk+luNNdDjM0YX7HBbouI+tBQjH3iY1zzdJ/JheypzsBmoBzlsXuqfp3wCNxOLh9nyg3e9kzwNYvkCTdiKDOjxnCg63TDfNy6SWA1/TjdvT3R9EahOPZ+SlM+cZYR1fpOa8pZ7kUhwl8EHH5fy5tmWnXex8Kr881JtdcO/9k6fbKgawbiOWbZ3rP3+zTbySp5QT+HhwZP7MXbOhfh3+mvPjPeW/crXk77qSEX9HWK22Z7d/ia2J+F57kfONspBHWkp+8+Dnw8ptMOavK0NiMkAF83PI3y4T1Vuy4L0CPJtxut+dsR3fIp3QCvLHcZrY9G5DgkiUyXNOr7GudrXiXtsAWJNlN6p1OK9sM8SJAIMAxNqiG2LWIe6Tu68byOt5lMRG+1HXnUV30M+tjQndpaxJ9eJo2JcueWQqfr9yCKeTkzPOvhx1QOj+/ZfKYxnl6rRcs5tjFth5wiEjjd8dGuHdr7HDCZUZSu8il4j/ywrDVB4/4spOXvDdH31YjOXGEYcQv6FMRSvhcljUXJmozvnA6Yq63LSnGKVQt7wM/aMcnEJOU8Keml64KNB78rXWFXO9Rszr+29RCbVqf0eeGid25pO5fvqcD3LY+RVXNhi3f03A8H6onkF8OpAqyOWdtCt/bUBP0HhXRI7AZfK3zd++Vr4an41g2+FbgZ0B8Mj1noLlOQ/D7hEuG7MCLa2LXw7fzMYUc7tX8Edmnh3K2ofFepIvsToW/CdrUwa3SSveC63mfAV6YAACAASURBVE5V/FfP/hH7/B8drtidzDbyPnwV+D8//QX/48//C/j+B+DXt8CnYwvjLBaSTwF8BHCn7cD1veVnI1ktv6I6QzdwsUI4KuUM91N1VDDPxfb3VPPjkvnG79y6fULhGBGHX/X0p4pPxvPS929eITpWCNcaq1SZ58i0S/rGzPGf9cOldF0NCqv5TfFeWhnGvya4RvEwU1bXOUM61AHEEklNsEDA7xpN6QTNQP2q/dw2iHmhy+EA2e4gd5uFZz+0EO4v7gD52IrYFM1VSNod0fI9xE9kRBM3M1CohbwWGvqstPcx6kph5k+FGApAvhva242grgJubdQ4NVPbf4Je9ZXNj7ZcK4AN265QOdgy7t7erY7dvJO6HswUif7dFTjeNKH63Gu/Qkxf7enqy/A473M9h0w+dhkk7qenUO7Mz9T1A92ItFxiEm6Sy+H3oaEnJc9s/HsevtM3FMTSFRf+e0KsIWi6lohAsJC2Yajp+Om+QzwcrkVrUN2aF9tmZfgdvEETN4ZL1Mfj2usX93zhfJBke2GSRBVEI/+dholwQpQX+XOaLZPvaYDWg7FOGdKknw/ZvvQJdxVuOf8VRdjnajpMq9ITxZ8TI8oUze/nq3b6yXMuHjjzme86hvGR8F/tVGzOcOU8flVPiwpXvhsCyKehNeLYV4huQG+UUHoD4xbmcUmHuP4eDbnScKD5r+0Z721JOBjNvO4jHczeC1t1+pZ2c13DvNexDI/CYV74Kn5ftCJCp1vWYcgs2+q82hIGr1bk6zfsS9Qv5c/SDDTe22FYQSmPEBvWMqFXGoZxN6K38xwUlSWitVA4ZuVy9/7JTGCot6yb8MNbRK6Es83N4d5yW5f4nntfV2yu5bQeD5/m+qb9oFusoSarGRY+Lzw8uNDhwTp85nPU1zvqeyuRHef7uJ6MX2SSAgJ5hXaf94c94ZezSi/u9Zb2DKItnDmPfQWaPd4i7PS1ozJrGwtH+17vOg+e1vN3mcmwpXmUG7pi5nOKSODkJaPj7cM/5pugXdtz7GNGTOIR4pnhEOJX+xxjrIdcUpg1XXRI7UiEMJQmd5trTpeL7nPYPeU90ZBsALrqZ5Gw+vDncTbCeD2j98C5/vLS75BPy1/ASAf+nR5ibPwS+zGdHwjaZvW6x7pP0kWx6eVk/E7DhpfyLlw2T8JSPqTCVfsho0hc6Uq/p8Lwqp5a5yyB8ySa/xPe0efuhXUuxv/sa98v2t/07vOa/gGddW5KfM0wFUYv7YzH1Pv0RfayLyj8bNee4AWyesGPZzQkrpt43Sl8M6dWfjRNm7l723e7rDQp8pKqPyecw+dc337Lc/EGA9wM6I+Ch84GRQ5P948CrDiYrRBMzxrSLJegyu+l59mPUOw47kfE5l97+LzjcKJYARxNgBVyKarCSsWvPrtkLNy45z82XNn/76V7odMm/OcPv+C/v/4D/uPDW+DlHfDrfbtDXAH8ZomP0pxYk+ciKc/q1CryE11XvBj2RYCr0ftYILoE/qbN4PzK2vGnreHgjq4/l/euN/2DteXnguRfZ67kqQH0nVzD3fP9j9Lbvkm/M/0OgH4A/rwB9wr8MiHOa/LEWXmdr05efrTy7ix0gGtV9oazHrTR/ghMhWj1mNy1/HNjb7Zr5EFiz97VMJz23S8erpvCVbXucf65DPALnciYztrAHkPJe6kU4uVuFJGAGu+mQgmVFdPW0kZI1a3/tlDtONwB2x1weAE53DVj+eEAPRxa2PbDHfSFewDdNc9zFUDNYO6GdHxnXfzRqnhp7OBjUjC655XQ3ZhS+luNTkrfIzSpeo5Qsfbc1mymTrANDi2favONWaWvHXTbzfNrA/ZdsVto1xfSlO3H3UK97jv2o6IFAt9tPlEYWB+7VWHhIZAV1l5vwAbood9JKh1T2XuZ3VBkilArV/Zj+3MFaRgPWBG8dzxinjntSfkrGOiWFEM83hZKNL4WtjWRlT5MF0sYhhLkdSJ9TkL2ilAUVg7Pvxstrc2bAOL3xZLX3K7A/Q492BjY7F50MSO6CLAp9CCQfWub8808yTdphyk8TDXs8Eg6tNTHbaKX0SQ318vpZPJlM3zk1T0IWzt0UJDKQhQuUQ6Cl16zqF4PWQFCdc28Y2Zr2EqB4Pmv9TiIOTk9sXc+O7y/hPgcAOTQ5dDadkS6dh3FrGTHj04nBpns/Q66txhI4ejNcJTCY8dHa69WugkidPSwpKmZh9RXkt4+DlqrUGzYoLQHVVPSq3m9qVdmB7xypK/cxtGYcQK0fBJ46EbBhg0SAXd9PhWfY/vzKB2Ito8dqaOsK5SGBwD/Gd3VD/hYRArdeyHCvDGqnO9dRyIsiBIHtZy+jS7RJyRrS4RcpyKOXFZpdN03F1lHI9STh5AXAIf2KRTvJMa94eljfFMAh7TO1DOh3NbcLS00e6z1il5PeJ3b526jmg+7C3tCA+kUE/c3hK6p72MgHXrYbd05GJ3uOX0w4yBdnwLUF74ux93m3lcWmjmM64DoTstcexfzQW0N4wMKJFSJCGQSDjpGlajJZmj0EkW/I93W2Aij3sdi9HOMpd5nvblNlsFLi2BgyCnzTI5WcNzaX+WXR19RBYIj9v0A+DU7zgf1SGOv4X74dIRYKHOPPNic0dtYaeL8bmX7OOl9Lnx4slBgyqQSgfk9cyo/aDOun3GdkeEfWdGb1eUt7wPDhXFVwY5+mJmvl0h7MC6cUYe0w6SEf1riv7P2fBgq6OvolDx9HGUTPY1PsbkrVIS6KvqTYxN4ngbmnRfKFlGp34vOeCOP+Y40fdb1vCZb5V2NJ2qDh4Dfaj2w8WIHq1xGmDWZxk+0J07JlAzDUsQyyKmEC5DyfVgb6aUfKJlWWAvyQma0LIWnV8RjZsD4+dKRgi/I6fyr8upvKZ9p6vmcXVRyjXxVyRi894oyvgbwtWrZ9sXAet7tUVszxlqv66NLK0pwrmEsZJ3DhdcRr8v+1PY79eq2JEeOmK6Owg4Ckl9RSHX6qum5UpBET+MHFGfdfo69PgfM5vk1fOIGvwu4GdC/GFwh8D0pfIk6V/WfwmXGIcd3jRVrfIMeoUc78Wqbf5AMUeWZXl7fVJ3D5tq3l6e5wQ0KvEf2ZAbw9sNP+OOrH4HXf2iCyR2aIWHf88DWKurNR39/J5SsKoK4KJJwpt5i+jA28w45lLeKRYWY8IyT5RNOb2QMB59oUi3cBhFSvqS/R/Pun9X/mnGTXHSEa8eYdyjrt3yAIXgZ/T6hnJ3dAHsJuMqiC6R1vGg7HACY4bsqHa6AL+G5fs2SGwdNaiYdlSaslAvoiisRmkDuiRQKVdB3NwgeADlYiNC7ZkQ/vABe3EE2/70Bh3vo4QjIC/PIteK2ze5SEzRDOuFkuOv+sY8TQVNQ0nz28JcC8tz1ZoVBV7OiFC8TrZak5mvPJ6nCx1A6voIDKRMdaSCiVuzSvytw1ObRvce94k1RtvMBOTWtSWzKaKNnCMa2Tsi7Cq3etg9sCi0x+klMH/Nqhit/25+omDfhPcTvcbW/CFGLvbel7hgVKF8wGvi874lWM/DuV/R2T7UDPg+4aiWxaZxYjQvNeYLynEqeXrTmKEt2zeDgRlA9wowKO8JY4zr5TWzsHyCbGciP6Od7DkxTyWSMMV890cE699B/B3WYTaqNX04kYnt/wXC/40Cc1QunzWUMrOo75h6xp3i2oM4FH+snxYipaMHyNa1lM+A6BwNFzUdztyp6alNnRYKM6PMEJ6DIJKo0Z3O6vpzSICJe5Z7F2QNW4Jpc5fo8Wo/4YRzP63VkvsEGiO7oqYFynu4Fd5+nQ5htSpsO6iAmg6fpB1GQzoxLGss8oDaLjYL0133MFbv9NeOHGiuv/JGK5M+LwJm40ZF4XzLQi3S2KVJa4wmp/Uw3qmqMQHRqruY+mQ9XKycZ0moDynwKNO25VsK1552v+HoFQI4I/hSG7bvJisCy6SinKo6AHXxr45z/zHi0K3mje99YGliagRZAltnG9WqgeYx9f9z7UQZ6RqYyoeooFlsLTNbzdJt5E+/sDd7muYjJj7vn9/nP6bbp0uDezE1MMVrZeOtjFIBsPYiMthnmd2R33tLyh4d0sCNFOrSgQJ/orIgnGnzP7xX6Vq3beloPTR51x6EJi9SjAPYj5HgPObZnIWe5N6/CjOdmYI+x0GW0meFKQPzkJHj+ysfaM+F0XrHzZ0GXj9RZQ+HEnamXajVo5+NWOeJD7PsLT+RidCx2TCf5XYrgcw6EPibr9rnpGPkrnztAhwxXMfc+f2Z5dYoMeGwu6xv2y7P8F44r1zuk0O7M6xB8LfZnqXt8rGtBZ4H7WRJW5kIoFdSHrtGaYFXpiva85gnmc86+1+msGJ/V+hXGM5DH9qnIQdcAX9XB63gScHRCq3PV8nhb0e1cGefgyrn1ZBBM8XSyz4keTaUQD/FI8q4q4soCaLyW5/34vvMGX29WxfPasueXLO9MUTjX4jJvhAY250+n9jlfkUs1i7PL6mfz5zlgxk+WPOYGv2e4GdBv8JnhlJA5SztJN2VUGsmVlpN8Y+WNw93gGwTaf7sA8u/vf8G/vf4Bf/npL5bILM8vTZjebRP2nfRT5F7Wgb4ngQt5yvF3Pxkdp+eRpybfg87wjt5fAp8IP67b8/t0dgNz7C/rrsnrX8z5P26AvgX+Xp6/lnZfePUs/7N5xP9fa/wbKe0vfCra7R7AGFlZ+q0A7L5z2bpM6/3uvw8lywy4X91Q/VQbjfc8GB0m/HXJaq/h/88A11a/2tMnkLLZlpEUpuzobkZbx0M2QM14Lhsgd92Iftgh294M5nDj+n2731y2loY30O5Q4QZ1eQngE8KQstnd6vqJ1Hw66UJXWiB1t5p3tYYyljIlBSB7jLaJKlBAzMvdFZpBhNoxpDBJhAyitQfJSzsEgGZgcZ7lin52YUybS0FWnKDTxNrXupct/8fWRunK3q6/6bup5lXXXrAhvWHq3lWWR3ayFC020YkGazh9CL29ZL137v+J5/i5Wt0wmtaqU4rGM5OqJlHNTVeY0smN6JZlRzOs71sbo7tNL3uuuhV7oM0MVtSKQtjaF0NTo/rKAR1dZtvxybTZF30qlnpFlnOG50vgEsX3Ko2W9xxq+Bxcqnh/ci+OJ4BnROnMCjr8buuI87326Vy0x0ZosMcOaDZSnUftlq4djGj3bbcQ0xry3gUkOJXA38V0arOnRijpn52HVqz3uPncmbkdMFgZzwMKDWrBqoXvPgBmzGDAAbMXPXqN45LmFL2b8ocij7lxiGkyHAI81QiPetDqFaXx4OuRKtTXqrpG+zjUj9AkyGt+X+ks3lY7FLHb/c4qkHQvOv3B+k0UXRk76b8qWmy2PxoGt5Ru2s0zurYRWK9tE3LA+5Recj9r7yZeP1q0A0kHiMX7wM7Ytfx7H0MDBfoVAGksSAiKZt/h/mme3D6MIuy505zCjqv91v4AuY8pH4CqNFcF9LUgrq3xa23iXnNQGTvN1RaJQHeNCBktig+N4fhjqtBgoOdnDebT97VMK7fWM6Thn8yXahqdP49nM8MHo7XA+YEsLsNqxbr2vYOne1Eef+qv5YV/meQ9MR8vqf4sXEI0p+2scOZbVORaoG4vdxvz4ZFOfMvnx2Z89tzBxDQP/UXnQfn5GThFjmvG10CDmlkW3y8o99J0s7m4fLQo+GR93MjaBhnHxVcFl8oOz1X3Da6nv+8RymMtPGhyeOyzk5yN6ycgDmve4AZfEdwM6Df4grASlliay5uT5Yl7T2+bojilKh66yxVOT4XrDW7wmeA9eih3h19/grz+AfjhT8Dbn/pz1tP4HntwUFwIxe7dwGUB66HP9TwlKBAeXafqxbX1c8K38ySCbkRn2Lmxkg3z7nnOz964K/1E6TlrlvxKxVd+tsgfIY0+9wZnkMy/AA6fES5qnik4QnnVfqcQhKFsppDUHiVlOyBCt28vSvj2O0B2u9v8CLW0gs2M6Obpo14e4/4JES5UFf1OBMcvArHPm+4bl6T3UdMHvUDcu568z3mtJa2e2Ofeyu3Te6FUcj6QEcppOY8q4o7Ro/EP3nhFeZrLDk+6yvBaGerGz03pdVP6KjZrbUI66mjh2d1Tlsrd/X5LmKFXKY20/g6acfsvYHhcDgC2pnsXpPv2gnZiPy+cy5X3uLfLbF0Q9Idxl++swK1nUP+wI5GDossMIVujnxxc3tuINyp0F/NAv0xR5Ub0Chx9Lr2dkMsN821Ymaez1IxXwDlDtS5RoevqL6x8qbAvz8mI7iNnioSSgWVV/qm6lzCZC4vsp9jIg+rxuupfed+mVueEM5GqTpPKsmb4qCe0RD1d5rqM/+ggt5qsVELhN6fpVuomdtnHR/Mw3+gJ/3n6T+jHeBTtuNI+BHFHIlTUOzvFomXiOv+vfTfwrNLotE7QY0sjiUEQ7QbeVfCA4Sg1Tek0502RxOugfowDO8SPV/NEyjMPlS4AZIPKbvzD5Qe1w0jS6epRdYJvOn5HtBOfPi5ObCgEUBwBHMnGqhAcobqbMb3xeTXv8wjzrIo4DVaLPnnNxIQIA6OgcONWnlq6KUceDpH5IkazP60tvV9nASzE5y0fcAZyl6oCekTyQh6aLLkZ8ebYebgC3XitVIn3qYYhnlmIukdxhAsGxhPARAfpM9tloO4l7nXu0a74i8gDPaS/2ve4BiddgeN4kyE+EZEOBpzja5P3euLX+pmDEF6OTh17mj+vKX5gaFrKo7moZ/IFvjMmeQ5OzPmhzlPFsGF9KlzaN7v65KGC1lVe9itg+j4mX+c5wZsl86ImA9s48qsh2g8q74q2PCDL5QVPYJAVV/lXfPyBiDIDHea/5vdPAsbguT7vq73Ur/OxfbLsU68eTKdL5u4NngUewj4cdPb91Bib5HtqiP3/pKLF3na5X30MbW5wgyeEmwH9Bl8IVkJm3dQOO+IL03bLobowNJzavRZugsQNvjDEtDEv9Dd/wF/wU/M0/02bzmoD8JslfinAC7GwtggHDwCT6SfjVKppeHMVmwBdRkJfAhubuY5NGv6uoLu39rywRO5N/0JcH9vgT/bef/+1zNXkIf8Oqa0rvBh+tk2I1+OheP3O8sF4vjAmrIS/0NOZdsovCo69jwnAcYFw2Vw7MFtNhwCulTqXg6TA4v1rnAnTfmn5zwTX6jjOkpKUh3zno8+R3e81N09y2fpYx8tuQN+kGdC3dtc57l60d25M35qxXSEW3s+81x2H0J+QwjTaKgXXicZ21t7pawXko5U9Gs97If02w1YV1akAezPFQ7/vCuZdHPhwWu3KaW8vABxZ0Ur1sEI4rmUoigVTuno49ni2WT0uUrgxZgcg99B0QqlvVHNIdqpOFGoh5rXiQx5aIoI715EZ7rt5e21GOkfzfmhbptcwZLfWhvxccz8QqZ0UATGe/KgijX1xMuw9vKR7Cto952pXFmRFvKTfeUxliKHjfetGpWQoU+wq2NxDbmtjr3nadgVjeKFHXbw25bp9uO6SsaMZGM11PHv5OvLroVVWyqBY1E7bBcxe+Rg5f4L/zPtQwhV6GLnm9xx7yTIqQ4a6Sv2pEOdXMwRXzy+HjNqF5RHr6Bc9aJQXFxgUQ1uZmcPzXDStKQAG45yvLzyOo6BhZiPvfTxCiN99bmWYN6ds7bscWuSQ/bgPpU0bQs/bVQZK8+SAg83xeqaztBQA8Al25zF8LciVKv3U/Oo06OTvSWHGtxZXNwiAg7Xt09blheB/JEfq1vmdP9RujIzB4XN1Y164mKAxnnytUMpjbs6boG8c7F6juIubZAkAOSIMQCFxorpSMeG0Y4go44fPwiPZ1mfsfazbutKvbauNpCqj6pFLJf6r5bnQqGUDJGVpzXEjlx0cqHeWC51oJhL4/Otrp49xu9DAZBJbPof2aRiDvR4fN3uQFiKxBqZrX6T1swaP1/DqbsbpkUZ9SGnzfg9+xPcy07wNecrCwTj5VOkWautvdOO4sOF8d2O6tr/9CDV5zw3h3fOcZcA6ydlwvudXFU4yltmKqyfe0Xs23k+TnWFKs/V8dv0Dh3PXTINxNfIyKZ3fPPZhFcnx0vV3lreWMSvrRc4mNdVU6jmNU3rN/IfhXD+egwvzE9tePEBqix98TaHdYzIhmERq44QnLtu/kE8fSoZzMBuSdJg3xq2W344n0226nk/GHY/xqVx6hUy5SlbL0Qntfd09yYPqiwvxehL4nHXdIOBCr+w10NrAPID1ITVdPH+uiX4pjPVf7H1+G643+MxwM6Df4AtCFTJXvxlObVomz5IX6814foNvCWiHwF7o/vjXn4DXP+Lux3/C/f1HYDNVxJ6zpk2CKz0AJIV8yGx183YBik8Js/3jMqGMP6d5+aFZ0c/JqDMvdIDcoqzMd9o90AHyPJ/ArE2H98CdND2jv9/RFSRpQyhIyruAqtDAHPenhNemFTxVz1kj+heGK4f66XzkVR6aThtku4VaF7FPv+tcEB7n24uu4DyYAf3uANle2Kfde+6h2w8bWghxrw/oxrmi3A18DE3+DZkOqXBgc52+lauiXX+hL3v9Xg/v3AIfLZ9MSLWchADt9aaTtCO0Bi/a9UxuWPZP95wLXpirijs4XWHN5ZRmNkOx/24KHo2XxozTfG7PmxG9FXYIKmhTEgrC+CkANjss4N0mpdM2I/Un9yY7QRqZNXiWrnheJpWeli4IApjRxRX+2t9LUlyhhVSHlPuQ+Xsf18upmmha5gFHVNH853fDZtwRCNf6/GlyEk3LT6c535c+R7bUWRPXSDBAWZ/zY85WwXGNJWta4frRSZjVN1lX2xjuL/o93adwKeOBFaipZGdGJ8pavdIpSYffzqEM+faL2ZwZn9qQazilsztRUG7zGlOnlg8y6anTAYye6nyzvaydRCVNKTp7tvFX50VCXzlnHVy9XOdXuMMdBH7hyIhf/9wNy7i/GAgl2jAv9Xz7Z2iFIeJUPu+8qTwJhKJ/oMuEU52rxz+lPnCowm0ZvLP5pGj9uGmemFw822GOaqHAbZGz8lvRdgULFM1I6guUyz32G2W9CxgPEKRxKYDoEcJeuWH8dG9kN57bs1gL3XhOda6Y8NLDtDKtPkva69mGYVwhQnAKg7gbR+ywmPJcZj4yDrYuZ9nd6GFYUrCBSXk8xyLU5Rv1A4nGq7gMAdFMORR6/z03QhMJ0v29RxsTdtAi6prdF+N51PBUDB7muxvQJ17ou1oaN6BbWVPjuZb6gHSwkfuQQZc/TkAREGdGAYDGyRmYegtWfmDphig3Rg/Uuibj/ywuq/ezubECl2hnzy/Nf2m6U/jixPtz+QtcctjhGkh3fc/wQou41DYGSONAO79JtBJgGdHvYriyHRcXS2vYdNpQ2x6D14zlq9erWah7SPlLILpHtADr3720aTlWFn13duyh8LxvCb5FnJ8KZGRT6eBkps04DCbyT6yHlOSLkJh5FiFQouwA+HqM5//IQ/EGS7gZ0G/wFcBsk0GLxdm8q1c7BkXlDW7wO4K/vP8F//b6R/zll//bHsjrZox9c5c3JrI3b27fSAlISQQkBRB03GxtJNwMe8sLNpvh/X0m3b025w33Qn9pONW7Y9OmQMxDHN1DvNb1nQDfvQf+ar9/snd/NEXh3wteK8NwSqfAj0bLP9rphnuiabEBJNjet2d3lJZ1PW5E92YkRS1vmKugLHPcHyIAntp41YgDbwR4R14K76hvGIE/Smtb3DFvn+8snd91/7ngoYIx5xNBhPpUoMfiVLR7y5vHuUSI9gNEDuZtvmEPA7p7oB8ghztgewG5O0AOFuJ926ByF/ebayhakBWoPB0jfLv9rgZgQS8DSsNK4g7Olj0bZfX4XUsfrrdlzA/G6RpitX2RhIdm/uSKes4XHnIb4vR+VRTxmn/0kJ7eL149e6jbe9m70ZjQd+V12bLmemOueF00mWMT2D436eFnBeY1aspsiXu2Jb6336PP5rC/hmDblDDrm8/MftLgTb/LMBiTMZ8ZxDZqJ7YTIpy9SB79yOsRG/CSMU/ir5GtP1c7FNHEvr5QqSTzLbKRi8YcNI03jVocDU1N8n4Dki+9TYuorTe56DSnsKJZ0HUsYGk4L/nT/H0Q33PaI+Zo8In4HEVu5THjyAxMaNa2GbEW6/spGaQ+jgmj6VOniXO2zb6M3WRjrWI1qWuYY8wml6jX2V7Tqv0vaOZnpkelE2OqnB0x6ne73EOPkXOgjw5f+k/pbBzmeX5q+B/L96Pfce7sk5pyrp+WMLvS46r8+efII319MePhYr4OUIf0NMvsxawBNKbTWm/5Yxh5J9VXCoUf7LL1dz/aQLaoBcEvN7S7q40vnDSg30/QVYTBTw5wz+P0XumKmRgIe2+XyQ3iodVn4dHTz0WnT9cxfsGEosVwth6KdBx9LPga533iXvMhn3mknb2PI4pGo+4xHtUrcOA1jeQroXqCX3v+Mg5sSnRjeStEd/4NJHmmhhtJjMwq9zubqf9aqHdNsox6n3CkAewmt7nR3A3n9+2AxW7ptBnP/d7zGHepXxwv7sPJq/p9BtPx689n61Jd78ozz6ech4u5hkHVRSTz9tz2CS85VdeHgvezwqUC0jVlrXiC8TBgbL/3zQXs+zTUfjiRLKGn40Of9wFiVxhN5KfdVlQ59LwnRKSJQPP5Ia4ZA8YxWhGfzPPJ9D6ZfQVPMsQlfUxfV4PmSXggUtdU8VWBIf0lx+PXCufG8pSXXbPQfQaIA5hzphRXsnwFqN7gBiu4GdBv8BlhxQ1XioFLhfbZimKMOSlfb9z4Bt8wLO5Cx+sf8fIP/4yPP/9/6JuKDeH9wPur+CyKEND7h0yTFCL9EcDengzncHojJfx6FSLfnd7MPBR2APKqHzCYbbr59/a+P7ujF6YXbJ+kXIn3VQkwUYIAzXj+HIeG3liZp/p46IMJJIUb5z1T9nPCgpQXww7gIBhPh06RrgAAIABJREFU+Pva043nYiHY228zoh/yHehy6B7nIgfLs0HNi71N3z5JJIznGvQN/9qI8y00v6nBir6JKd50wSJEImnTc77sedHfZ+V1Ud5p+R3vhYZrV+HXYuJ18UTt90uLleXeaJRXLR95YqVGuiLD592MX24wZVWnaTlSEMUlzznnx/b8IK0c0R0CP5bQPOvcE9uN+BKh7OvxhU6rjIXafe0aAZoT6WxUKNO7eCWxzn2p2EVvVqdT9TArtU/5F5ptYet3aLeW2rwp4YGbKMfK/5ZGNjPNxbjnvMjzgfpHZaOm+j3r+UDGTI03nOlwE4Fy2trmAucUljWrT9Gpon1dTWTnQxxnQKdfeF1zAjhPId4ya7bPP5rz4/o8WTc79uVzhezsvZZ0NhOYN1RsFuwniqtsjo02NgZ2pQzFUO/94CHXCyoTBPrsaI8m8yvxzsr8emEKmIzFA9AN7u55rFSHJNS52CqiBDayYcOGA7FhhQ5XkzvsaGc7WxrjmZI9zydN6fXXrq8VpL5A/6swG7fDc8LHD3bSqzDkrkK2M/h6ec+GaQzttMT9QTKOnmiI87J0NzUn6WNF/Ofer91QmLFSNgj1no/Gnr/9tRDgrSenE2pAtc8NsStNugG9jGFVw6FHYeksySOUmLf1DFakOgVnDJin2WmZh6Lz4nZtct+miAMIIXOxjNbaLtAWFp488Dsdic6R3YnU8ejPvPzdpoZaUc2A3vuxIM55A9fyTn0c7THC/PIGsXBbCnQ+FF7S7ll+374fmwFdYEb0fYfsvlGyKBV8x/ngdb5gHkyS4KsVzg0YupZoOcaTMDXHYeVZe9aAPhvUdWGb0GI1cK+dHwMujy7k8trKHrdeEZPlZaHVJwqId62AWkH5TMPnTBuX723uLbOXyiS3wfc3uY/7GpTkeo4I5Ub0VMcMt6eE1SJcH+uYxPlXOE0sBUOqazaeL+inyYHpB60VJ9HiuWgvbK1d840B2RM/63o7Q+Qh8Hnm8g0eAT6+TnbVqbGzePbgITOTFc6UnSJdPbDep4ZTLPySdDf4h4CbAf0GXwmw9DJ7zr9nXFnpXZGGFEUYvcENvnGgafCX97/gf7z+Ef8OAC9fANsn4P2nJsy8PrTP7dCUJ592ZE8/RTKcpQ2LKWumU+68cuFB8E6bIfZAbRSNq5BD4XJnSiC/E/0Ozbv5J9uU/NkQ/pu9/9tCSfHzYyWgV23n2i/y61Bp5l7njr/DBzUDrOXZkF2yArjfyu/3K/75RLDyKE/v6VkY3Iva/KeSrxrd3Yj+pTzRH0S+okiPNcjvO2/PBAJsWzP4mVG8/T6YZ7mEBzo2M55HOEwrkw6Die//QwlpSVVN1epKTu156W5MRN4zSqQ0/1+S4qGNWTGD8qCX2y0dX0ng+GgpXzWW7aYjkq77X4IiVGXhRb5Z2HkFzADgilzfZza6CVIIveqN7vi4gthpy8N58HazOcAKXQHc231Dq1PMKys+vd2sN7P6e/OpYsdvovWR/hUeDr5jqKmeXpnRK4pUom6mtzoqdm+q0ybuFRfOOeMVPlAEEao8vGjsWYQFpisKnBji4YPtc/MoBfa3tTRhj/X5U4zxYPLZoGhL4Sg7DkOVSOdh6fcSNr8aC2fshb+nqTdbby9SlMwKuxKuzFsjHXd94KIgTYnWdS+JM2Awyai5v0p+pfC3efZovIvqrcNTP/JvYhvQnD6fTdH0qUSndCiC6Dh1JEHHvWNu6Sd04N+a6t/jd57tpSPT186jFVls7LV0b/ONXh5RWKf97WCP88azw9jh7PTUOGF0meXE3C7tWEWBvQTKvFRNFzcUBC4tkCCdpvABwndV02c6cDKbIMOgzx3m5e/u8WyFbU4k6UYq7V7DGmu+IA5aGG9tR9fKobHEMVE6U6PZEDUZqhrQ6wTzA4RMD5KNgiZ1ntDjk0D4Sfkd750uPAGkT3qeSuFlZXTehfD1IrWtp4Ub9XfSec5uOBykTx4o5NDys40mxD+gj6NYF6m17s0d6ChddUNNT3hryGl+97zYO7V3Qm2XWMMV4ON97nHudOP7zsnzPIznJkuJ5ZFdyXjKTLj+XiwiKez/5P1qTUrvZmUn4YIyl7kwnEzinycXvgXCyG1KOGDCTGv1I0ePe9AB4ENdV1Y4XYr7uXRfGCq/rN+HLjjHYM60d3kAyORrXYwloM/ZWDK8z4+W9AJ1/2ounJojJwu6EmLdc0HDPvdTND9R18yLdTYHXKCpIdWX5a5eTAhUlzwB1uHoL4VTQtEZfB5Vzw2+TeB5UNaC1MXXyrBPDzfv8xt8K3AzoN/gK4C6cTyldrykrNlG1H9/2cXhBjd4FCzuQt9f/4h//tO/4r9+Mw/nQQCR+abI/9hlMaYNa2DOwbmN9RXwToEXAhx400p4zDZQvgGapWfX5tXd5g8Bv+88hcKf4LeVi8Cr8Rzo3ud+cADoX4IdjkpxAKU9C0+XFYShW5+WNQ7DYcHLhXD4lmHqfV6+J0Wv/W35t0ioGi07Kdl0D7tl8sTm8O27z9mZQnnrZfk7V9TN7l3Wl9AIxQlANByFvGBRNZzcc1qzFzYbpKNcbxdinqqEHy9MHzvs93peifw9OLd/bghv4vjr89M9cZsRvdOWoqU2PFgRLmj652Mpcstt6neb7h15I1gzmIs5rwsER7pj3De0RAMg7lPuDSett+Zn39n3wKEoaOhNnpv23d+LYRuVrOaxorywEqjcPn7bWGxDiGnWx6fbCYz6Zoz3v25IV/c4F7EoDtIOm4DC4aa0/NwPWzjZotKO0oINModPPuqi0U87enBapyPftd7HJM1vRbaFMSKlfv4cpgTmeDMIFbtKq+o9UJ4nnjNHQOlBLYFv9c5zcrFYDbxogTClr6WDf+UlshTtacqnp51YsjXmi/MK5nVWs+b8YegJvkN4TfDzFuXqtf8l9jMryEvJ+RveAuyTYw6FVD0NlS99rm6m0Hd6bBCbgsOgwL0JOd0bkGcVt83Z1+oYxmIwVPnQF5G9ZFkp0Jfly6SffNIe+vPgpTtUtpJBagHAG6PDu84XwpC6c3rBEKqA1+6KK7fDSZrC41Le+kwVGifz/HjAFutJREVR56cCxBgA2iLJg8gOiCT61fnk68xOxtC+EnkjOi8lHg9r1xajjyua0OcyUMdruRqg0xbAaLTcKIH2PuN+c2OYuBc1JegLoh1kkLxQuPE+yvL+GdHEhKenq0nUDq0YX5vyPMfNo7b4WkpDt9fVcG4GdF4tW5s0Xa13dCQQ1+qoNs9zvvd8P3bjOXuds+d94ouzftfcm5qTSXpxauRQfdNEJ9a1VDfPvyvHqbVxGJ2S+6+P45p3VmchSF07k9f2w+bVc0FEzVhsfp0vLLGmw0IPen/u3VUg9C9Djw4yr86YzA6KiGclCewqjjvMqVD6dNmUR7SxrkGpWKXDzJxnMscu8SxfpRuGOLe7vNRZhgvbL/yl8+c4dVuvKrkUxtOg63cZkRv83uCUTFXTpD0XumyzlHE+B9R15BHrylMtSQ8t4+taDm/wmeBmQL/BVwgPZeo3LnaDf0z4D7sLHb/+vU2Dw2vgXswDWIEfzBP9Dv2kcrdydAjDEW+eWXFDz3i+vWNp7gnmYb0w0xU13xkubjT+3hL9qr2tUPJ0Lsbr76X9/fWRJ4DDeB7/zFkWe50D3XjuhnPWswELz/MCLvS+nyk8lpnmadj7WxX4weh7LhT7Cv5oiuOfjb4/mKIvjQ/C4+1MUfcFYUGm0xkWG3WeNyI9grja9PIfqqT48ue7KQ+9wA2yaSg6GVVWOje9fTEmxnfNVw0oAJX2LBmsFP3+U+nXWXPoWFLSdY9pP7zBHkXeqJmyDhB146jdVc1KZv8eXvMoClkCb+PRwsCyHl3RjSiO9/Cs0V3MQ9wwMluB9vqtLwAPc+r1e/8Va431cauSQ6S3St3j2Q1PGvUTf+0d3TtBt5SGjwwwjkwCwO9bb/SKWkQB3RD3r7s39khlS5+bGBv4OubzDh+1RFdpan2aDpf4HY7S2rSJGczRlPn2O/JxNeGt7r/70QpHq4duR1xw7fEbSquhms0zTgaf14Lw3Yxp5v7F6s9nlFA694IL4BRrfvDSq+fzJhYhwQYuwUNj4F/NYE+KFLr8sc5fA7qKe2GTAlLzP3NnDTj/pjrKwUX1NBUXnZRBaZtDrpulKzGRplu6NznmffHkVZ9p0suoEGlyVaVBED14bBUy+Qnut0wGaO/xPcppIZo7SdyYRrTXVPDY9hnwmpEmZ8lz6fzok3ZZoVQmSUP7MVLMiCI1qB4sYYbkX/x7suGXNcXz+hpmQolSb7Wi3FDajeix9sScdvlBIYMAy4OVO6PMCaBHrAnk7Hs/iQL3gG8HTbWPnV1yNJ3HRpxzxp74VaEfz3X35A9jt8spZuyVrdEt5Bm7Ygv2fD9atCE1vro1eWTgmfb7SJjcAThqTzIclOiv+Fdff81QzbwhuooGmBnFJTziDR/ZmgwRpPexajRguux5cgq68T5otWvDZ7/vHunulR780nmjyZohU9V+nzGBQqMK53hEDGFmEjNGAGorRno+yuBa2zpjlDQ+h6pOMdLFez+8/36V7pr21DFayrt6/p6re7aYfLoy/YlqB5kX9cX89bLAWX6XMM/ll87X+X50kX43+nag9F52GasRQYLKHtp7ATrn0vNBkphSPL5nc5cKnJV96pAc80gPox57xlW/LyfSGkKuoagsLq+d7MfKPx6xln1RA+kNvg64kJd9bghZiPjMV4jmAA9gBTf4fcLNgH6DzwwzrlMFJdaC1OdTaWnx2wXHE1VfDTdh5AZfGBZ3oevrH/Df/vTf8X/+9h+Ns9+zQsm1aUeSp1iZIeO0m4ILPLqYT08krC3sZAM4vsOVkwrgw+PxmIEbzwEstaV81zkwGs4driEVk/b9Sln0SP70WPZW8/9DsEtWpBkUhV43hLQNtZJVWt1Yrj6QFdgO0KMCm4VP3Te7xlty5NA6nMLwaMZG36RsVvZu39kTfXcjJSEvLwL95MzsCvzkub2TEcpc5HdXoE6Ul4ly5FUhjr92NiN+t6rVXUUAvycveXeWNOA0Hh7MPMOV2rJr8uY3u3LLvqs5jAkgzkPp3galOpJhpfPK7D3SDfUe+tR5chjaQ7GogApeAviInq4rZ9w0q8kDzcec8G8SpbwOiXcafdIVTFTedOM4k70mN7CTR1TzW6xKItKbwbzHU7j2bgzXTQYP9RYZ11oa4eBh5dA84IHh4zs/NWrku+WdGM2ILp00CgpV2z4VNizdg7DQu5YaB2v4+bCMas5UYSECs+g7jQ5KjOThq/YJZaUjsSxcJu8qU8s9NB7u6BUQxXviYU54mf5Vc/qCytTOwZ1VPNC11lPLVzpWEa/bnFOf21OvQQ7TzLzV+WeeVzsZALPxXI3sxAzU5v2sjQGNzxwwOd9otsEWVXrHvc3HTduz3f5V1ZGeyVtyWvGAzyzF25p23zv/UtQvi7LLPKP1IQyf7QeCr6WxLqUN43jrda7mdH0gJT/VIdSHXqZSGmc6MRaIMegEf92JWfi61tbMfvzHDcLET/1wkcw863g8a8edae6H7yJ7Y4rKa3u01/JKrl8LPo82otdmBEF5bkt+BtDEUDsZJY0uAvS10eW9vb/2tgkQ4W5IsTw9uCaW1DV5zPCB6Jc4A8hoxoJ0D+WoOYD1g48z6bROYdwBlzMlQrm3SigQTONr7iEMdB4HALtCtBnG3ZAuukP3I+IQqe5QPebDmLpDnRcOPEPLMyac82g1Us/5QZ6us7k7q6dCqbeudR35gusFEGsA1SPev3a4QHWyTa/1lXeBxpwHnfbkPrnQT9I+PZzzRLdEaMbzCQ5p/pwUmJ4VltRJXty6SNmftxsTnCYgfnJEO5wqOU8an0/cR6s+4aVpkA1OFnhhOn8/odfgFT9bk/W64crrThywVKuLomesEJ+1pdZ/sSf6U/Th5xnzc3gePvFtg/a5ecl8iWeVP8ss0WeAshkuepFBJv0a4WvH7wafBW4G9Bt8Abh0gb9yU7Gs45K6bnCDbxBoT/Af737Bv735A/DqR+DwAjjsdhe6AO9+a8qcNx7Ca29eC67/2U3AP1qBdzZ/Dla424rMwzXf+fzYBjBYfT9pC+39Ct3gx/qrF2Uu/1I3JcV4/mdT/rnn+aWh3P9km0q/Kz2M57JmJ4f3vR2O6weitT8HRsP/ygOdUZ0az58I3l65WazwU1HC/2KID57oK7D3cRf6t8KzuU/KZpb+1BWn+xFhGPRNtcC+t1DrutmGe2/GQxVpr7iaUPSYctO9xmVvc3ezOqDdQ8uVuhuQBmBtgiuvI9y7Kxt8bGv3EEqK8T23OynmPLuVIy3kelf42+Zwc4WD/R7mDvGEXU3fTGPvaDjsLY2WfkiKDVXT+5LyxL8ftYUB92Z72PbdvAiqiMKul9HOlmiHWMDfroRs7GzHZv2Q79T18gQvkX2ZgQ0vFWHU+M0Yx0smUiiNWjoxLFgx1g3nYr8Ufmc9ZU82gfitRZkaifj006hE7r7vlkIZJSecheOVje4538L50Y3oiq0pTTdpw97z++ER59NxSCN7kvuYU8hwE0cPCZ55kNqccB2zWtp+QKKVFx664lgteFmwXDJix1winLR81mI0Jx1qm+RLhypOAc8//x2VnOHRPJA4/8n0p1E5B57GOcJwvs6r0hwGVxff04Nq+HQWp+UZ07Z8OquLu4eJF6X6fG1QHh0lnR3eaAGtbZbbdRCqeWyqeYDyhQ08gUW0oJ4polGT5+iodu4raGb0vTs4G91WhinN/1wNb0dUs5NX1R3O0bgepnmZiZTJy9d+vK1h3us3RprWg80ZplCGcuK0sztgo0gGVfHqofLF0vqaJkDzjhb4/SWaDmux8Y7w2I5zZT9PjpkxXaTQshK25w+eFffZuNxDhwa9nkcZ0Zn2jHtd0xTBYTw0L3tdA9Y9ilhkQjawdsQhLJvLItHawMH75yAoEwl6L1FsNw477kjpJX1TiOxddlJOof23oslqcWDA0mzmRS8wz3RFeNzzmh7yb+cFACB6hLgXaMhlLluxEV2bEV1PROUIa3FiOtQOv57A6/eyzsBFfKlyxECq/LZnztun4/wSIFlcJu2lZADo8EHFZQE+1tDHFV4D8g5FVpvgdVU7VvlP4PXgKc3z+LpqzwJ17fhi9n1dYZE27aPKrLXMgen254OuxsffkTzRK34GwbeomjNDZwrL9Av6xIIkmbbxnR7u/M7Xmlmxs/XUDwvPOu8BY3joDsOH16RZ+odOl2eHrxaxG5yDaddVQdj5SkgOzwznGK0+fMidkvFvcINngJsB/QbfAFwqNU+kkeFSsMdKyje4wVcAs7vQf/sZn169wb9+/yPeffqIX4TmQ7jLmcEudCA0J06ebF7NncdumCtMNoSnTi6nPFfMb8FlRnQOLzozntfqDu+Bu+Kf5V7ns6qKE8HJTfb7IfECia8QvgEUHwWCrtAC0PvHQ26bstcVhEnZdTSjd7/TUz297NAwIAJ6lOLgK2jxTKXPaTc67nZx96b2Hdl1cKnze0nfczNCcee8Zd/HMO27e7GRYpTRpe/qYUpDSaMIZbqo0aW015XT6p5xLW02kqMYz5neVlf0A7rHVVG4tndK/Qv6Tm3W+rw8Iz7ddLj2n7KyfC8srSP3MdXXUn1MfHtPz14mZZRakXYrt93brah06fh3r//00ce49gbV7vEc7LOYuVVvg5a33u3Z4U3QlPSb2UvcR7+PeQV6JmbOwlcDSDzOHuYd32pE728KKPv0Sk5H3nbetxt7ElJb+d7uYYGYeaiulhIaYr280/q5Snv+VVnCenmnWq8xVim6UXdVuBI2Z5QjrARydHkkaEqp4ycN4GSAikNDlEz7D3U8kxc18ZA4qONv/W/HnjqTxoFWivBcjV9D25macX/62JM+0lODookm70wdpgFAd9wbZQ/oh0R2RfNiZaxEiHTO/Lg0w3g26Oqo0OHLmIc9V04N/Gm5Z555+UCe34tC02GKVdmn2uSMcFaD0vuBSDTqaXhL8EzrI49ONRymsowKQI6A+gE3P+Dl3q3MayXqklnDyYDelsJx3PeG///svWubHLmNLviCWa1uSdXty+wZj3f9///ZWXueWR+7u3VXJbEfCIAASEZEVpVUuiQelTKCwQsIkiAJEGBM1oL9uHEE0DWJJRO/5l75cjEkjsF+nGTkHG+w+LktM4/J9RVeUzixuBIwYd8ulftBgZRdKIKFK0hgJ5Wb+wji5ajzhp6Rq7+uYUmP6YiXmKodTPKy/ZK0uRz87CT0lu4MnCuoNjfueuCnrRuj8rx5+/EKZ9c+jsTDKaYwh/Z+GPnxPaE3jCPm1vssD/f9ovmTpRrJV85gOc6p7i58t7iGP/nfFwx6I73lPsPrMIwz9zr0obk+EFbyiaNA4ScHu3LmaxfjDS5l7EryYns4F5fvYNckQb9RzK6frjo+r85grJDgVec0vC8LnxQRXlbz7vD9HmAHpzixF8cXL4LJPOPnAh8vDe8rfOMwXzjLt8zpVu/6xsPTJwOKD/3c+XzfEWC9XLzCFT47XBXoV/iK4Ahrv64irvCdwBsAL2PQ//z77/i///w3/F4/Am9+bdboH1mu+2KYMuLurie6cwKZGyBsoPLp5WFIzXY5BwQHR76/FmuLG5I7D11SNaR/x21z9xJitfymffhF6vOrpPlXsoxWJeSfxVLin4s7qTTdH1+0RekdANLTCwl+fIuBFtllOzDfSwVBHGOwDJ4q+o/sMBffXwp9hjvIPxHQkT7xBcHG3iRGcO9WxbxZEeGVKdHlbnMSwUQ5w9qb5YZeEnfrajHsXWdWh5Tdm9nTt77NMnbFWqwAqKXLOEnLSigr2rR4npGB1TVvdkGcLNOBZLgmiKhXC5PvK59yZWfBD3q4Ks6ZM725edSopBoeBIsDw1UFUeJWfSYDjebGCPfXewsDMMxv8SDvYpxNGFXlnACJAqqV3ZKxWKR7a6v2ZyppJwRqrt23N8iaT6uyKqfkf64Qe1WjSejK4W5aTAW98y4y8idRJwdyNQcDPn9AFTSmoqMCKgVc2ITEOixUqa65kObh/liswD1K1qwVwAnm8IB8e0vknnsO90JmrRN3hfmULtKa3FslUkr72t7cO/884T4Gw7dUxrIXmbJuwhAfy1XyBnQ667sUnX7z2iNfJpBjxzJaW1AuxXdN1zQ6lqa5DYX21rBxZt1J30OgBHnhKUCsijCSaaB9s0M43gLW8d12VmjWn6Tv6bUHYhFf5MqZejdxiSMuSO+AbqRIQPct0QZlNyre6Li8ejmwXiAXLfPtZUGryWxs61iQgh4ZyBGH0Tv/HtbTC4Q9MzAr00W8jN5e3gNaOi9KPsoAWedFP5EVNzMY43XPANk96ameOuewjDFv1RgqXVKY47mDclCjOULoXeRKs0ybFauS/usHeO+72X+F62udkY6o2y/39W8+TMilp2d0Xlrd9TC+nsYnBG7c9y3G7yc9KO1J9D3s3LkjtJWlFWV4XOtIJD1gaH+937C65mcEntnTVqCe0Q9mMLrXDbnzHF55nvqE9b9ccUdrd4BjTP8QWPCQKY/JC+xJ+cPhi2Pzqs7heje9rYk9Dpx+aYbjDDyTlRQvHE96s8rnaP4L2MNzyFbirXjEgFcuL3/eZK5r2Co+NHuu34UZ+3u8fN/vC7Z5NtXHkzymlugpfR2DHgZ+bK6+69pH425Mgsshned15QUyT9X8PaVb5jNHN9I/8cWZ18YDw4Ns/nSRZ4drfbjBozfcFb50uPfUNlswfU64B6+9du0rPCFcFehPBo+xgH9KuC/+s5VO3mis8j7B7gabps0bK6QN32NsnI6k/9rb9gpfDuz0JRW62GKC8aHe4b9+fIl/vP0VKDcAfZC4TqhQ0JRLSebQhEC6eQHGsZYENpr+JUX33DxGD+kOgeAnCo5xL5+RfzMkX8KKhczgJQH0DrYhUuW5z+PHfN86z5XnHt09wecKr3wafJq5RU6/Aq8ZuJ05tvUb2iy8cMQf4oxFRJxX+CbI/eizgivXFP4ecUePLEQc+iS5H9dP1UV71TsuxSPESd4ZwNmpfcwlO3XBsM9fle96R3QhUD0BdBJ5g6bTOCIEZwCFwjWmHT4A9YdeBb3qwVsiVG7XdzKD6rl3OxFOsFqhe0FmFu4QmntZVcIw2n+14dYsrSKZWx1hOHDNAnvHM4KHTIeHtqnwNzNw89GtrZwgPQmZUWtMqN8rXBg7WVDL404U9ic0RWtTX5PEESsv8RJSa7PM0jIpuCltGX9wmPMg4Pa18riKgHti2cA56TAEeCrYZNDgNjncs6xkp+b2NWLFfa2mVaiMWlhitoMkTd+jQnM/xlTYRr2bhvnMqUa7ltxuB2jVb2Ows+ZY8RY+4adMgUyqzNTq9OWn74M+F6OAU/hmPh5f9U7Z1VQwclCev62LiKHa58Ja2q+xaaibB+3f7g3aO3yWIQfqbbo1d5Dl6Maq4LK6aSa6Q5d31laG412YtFs77NJYlevwdgAnHSTifnDF2tXn58bz3Kmw0IFzGNCvwOjhaiFcQ/2UUkIh77FZP6Fdb9Dz76edsqGlVYXYpp7WUn1cT/mJh1yl8ImNVCGB/u+HprCHAYxfZ4aYB81iEC3DOvE4K0BWgu1LQOdae6FY16SE9Qd+WvslZYi/PPvOH2pLvEyztWmNE+m03gk3lzZ6Loljpo/3letsOTzowa8d2LXlRrPeC5j7XAAkVqY8aNa2eRzLAxc3CVH/M/cqCG3Auvwb6uXHHsd+zrD7jdGzmmHmPvYxRJI3M29cy8u9vRndTbvn4XKKrfXDvlYdvF+wLIfCmuMMb12u3nn6As5dEaR/SlcLyg3vvgde69d9jwADf9qLnF93MrgIT1nL+fXhwN/SeMxjdFg39mRkaznfnycRx8B91CdR5tzBNfca702kAAAgAElEQVRq4aPhbmkyRiSAfgD44xoninxtE/xhtc34ftIa0eLtmC2ccwz/m8vaAX9thl27ION7WN7TvJij4PdOM/Bda2hTjSMR/N48r4uUp/r5Uucxdu8h/yN9dNHfcrn6EtaMBf0wUIZxHzX/3te4LfaqLw2btY289+CxGOUD4N4oPBT3+Z7DumjoXxr/keiV+7Avxw42Tr7tB06/x2K25lL3vpQxzMp28xyh81Y5RDnH5CA8hCcdzf8h36/wTcNVgf6k8LWOvsfEe8Zst+Leg2Nm5n+FK3wr8AbAi7ig+f/ECr3c/gfq7/8Ent3C7gv8XZTptzfAiYGPd7BVjB9edzJO1MJBh42GF7dpzGMyr6UmOof9xb2E/85NqVpgxrSmUGcAP0ncd35sE/Bbyu5Pp1ak3oGu9zp/lGQvS/t9k3iE3sH9QenxAibfUbhEeb5VZcUd6IvxN+uYPbPZjtPTd7ErHfCYIbbaza7iJ/iT0FXvRr8lsXrPmzyBrDzX9096F3reUAu9zGqIbLE/h4WCJ8SXTUgVl5QkdzdD7naEuzOSKnAmCftRAt/D3KjK/ZJdKfURIAKdTkA9gW8AVssmIoBumoVBObV71TWc0ceBksGN12btKBaP1ctAnDDhfAeuZ5C4cW8WvSz1rNGQhGTjT0KcUlDP7ReAeMFw/ZVKF+aohaSXF1W0Q0BGYjKjfm0TFkuNZvUGsd5viiJiAp0Bb/3ckooLfagCvbZyjAB5U+nbmuX+dn1leCW6X4tUFjfnBBTxIMDcBNLGXtTC1ehepd/U1g9Sx1O32O8l/MdeKzfkWF45ypS9UDLI5WgwwpvKrKfzAIcNP2u5qO2wB+ml5v0rGO1gxIlAtbYDBtYB27ghu4OcnEBDVTMUz00SWnnU7lDv51Aavs2lPUIC5nYfdBzE2lMIFMIbXvrN9ygvaCnMct9rJyuk/QM3VGsTU8T2jzZ+UpP6qs44dJYRHhWt9XowCGrdCeMbRhHnMtCa3ZdHp3BHfJPTThiq8rWeMPAczbO4z16HyeINo6a1iWuGnosowYVRhLHpMuw8eyBOOwTTlb2Sn2qXCTh7ZboRxY0J7uFjEa6ROfZD5DerQrG+EwTOgwBYXHob32lltM+13ZVeAaC4doq0hFiuUumKd1Oa5Y6Y65VpzVlxiskYk6xLZBdggHLyOPjRB81s4OyNhgkewwD3wbzOagVh0JbYqaeg407/U75SEBSXckV1PzRUQ/oBiepOQ9hcDcxOKHQSO/6e2zEk4M7qhSHFsUvzgxDWbJNORZoJ9bWMO4g1reOQuSEQaTciMIb7BU7yFuEGygQNz+MAprIoG67uk3JtncfD9NtiloiKe7Jef840lZGXDslRTssA00lCdf0qc6PiotN24HGOF9Y7MH+Ep7HOoPGuc/cuzdsPMK34ZBqH+f72ttDAvWFqEXs07ZGyN5jISlmzx8LC96N1F/4e1r95LM5WHRuIDC6GV0X38dWP39REu7zm3AFmDMrzJb/NGdIYd+A3G21jk5dLK9nGqL6PhtJdZo0eFPgvu++0aCK39qBEO++CXKNa+WXA03LsC9oFVEceP141TJhFQFTqx/4Qkes/pkxM9I5sQ1CnziMhh9bB6Pt6yYeR8pM5c1M5Sm44aDzXP82b3OxCq1Sv4btm7MddjrfX6S9djDw03TcAk/WnrvNDF5muIx+h7DopW8tYrSvu1Vwccm/g5Qqrtc8CqNpOWD2s9W/oDpwMdSGo7lce0uU+dXc9Otyu8N3AVYF+ha8I9pj51iLkSPoj8EiT5BWu8Nhg62vG+3qHv9z8iL8TgPevAXruNhB+Ue4Sbu1pZwKpHH9pPayJs6Dm6FiUjZLt2xVfv3F9m+40z+OUFr/p9aXk94YnSltnea6fsvL83cYi8NDmXgrYVZxjrOIy/wntgXlbpT31Uehr+lEY14Wc8nvr+4nbzH8tMKW7F3lMIphGT4Wsvr5616MKggETdpMs0fic+r2jJ1hkAqIktOwp/nlBs6XNFWIAzxAFN2xV0I2OJa0MVFG4aJoqFui119Os4Yv2RQafWe5qV/yFcqWKIJ9HmYMK92cbLqk4M9q9mk45RUxmjqrKIu9hvrM36jotVuGJ5q9CF4xg7cvRpakRjnr7wdOF5QxARQGhQlzJg6D3u/dkhiEgsW2br02qomeJO9/fZx7VXw4NwwU7mUZlxXfC+7nVnyxTbjSmCr2PnMUlb1MMyYGMWhxPadZzBDiZLJucgdSbAdDoVakbB5rAq235yW5SaOOryRd9m0k+piAlS+8lKyxCvyBQI+pjIsyb0fLR1FtOyBibJPbWKc3ds+ZXFg271dwUnhUfx3vUEtHV09BmH780N8FDZxztaMg/uf7q03J4cn3Lj3c4xTallKyt5HDMuduYj7yahngtn84b2y+78Trwe1YkIs08bC3FIrj7y0MCwsQdRE+ThevQ8VN73JAF9Ti+oCJHrLy3AE1oSg/NgiC+5Cf4ArEiuWfoOHLBNafZg2knimVPo2/0j928XUsOywK/kMzReXOY92WWzElO9xByJMAYpNDL3P0PkMaTjZ/UfwOiQKCJuoTXgDxwA3KTqyuyQmdzonHrF5tr/ZpnFp3dy8BcsST4FHzdGN0du/yX+c6MZkDDmSqmC+8wnn24fHjPwLMNGueTJYl79rwj3VtTuswCfeE8t5zRLFdl3UWO/uMAh/E95ZN8B+Kzzh5W1ODJgDn2E40zFbrzxquv5yztNwx+3p4N5yUtKH6nxfiaZjaPN3ry2WuIA/FoUomB5358WJvveNqZFzrJA3Dz5SqP/D3ySx1r/hoeohi/r43kSb73JAw7qKxjUw+1xoSC1bhumGMfI6n3Jzu0W0n4i0em7wSmdTC+kse3K2vyGFmoo73tT938FsjnwpdtTn2O0yh2eBEwD3OhVjMkF99XvMvokubrWbwD7TWFR+GN9y386SH6yULqSJ7+nw+XgI+Hi9BwkafNs8WXjuU/LN0Ig7gprkQOVuBTd6fVNMOL3yt813BVoF/hO4MHrZ4fDYsrXOHRQK/kdt3zn//+B/7657+Bbv8D/Ps/gWcn4INef+AX9/KqlpzeHA6QTQZ1RZa/ixyAKUhXvlIfAnqv+WuoKWUQvvS9j1Niv6Bt5fMvQqRfBd8/SH1/8ysjHpXnP4ryXAz4cQLwQ1KeZ6vz1Rp7xkY0zhHF+RTSJvMo3Erb/vaJVoT57vnPdef6o0HaPC1Juxdh/M6qiOYqLt1FcKFjkAjAW5hQmPVeySIWuQQdmLbXF0G5uZZN8gEFFbQ0d+5+10AAfwD4h5BvM2BzmQlfaJaKknkVa+3KTqGuvyJoUBZEBC6nLmxQpScRiIXJeGG8F06YQC9vbN09mrWI3EKsVc6eHtTcr+ud6PCuk3kimPUWCGS4NhyzUIPjqxFc85sJPJqlahVhh0ZTd+wFjCIuUqvQhLmKJXbDqcgW+yyWOda++g6y+nX8HXsK/YP1H7winwGnD1Ha7/OaYTs+CDU1Y+0r7ZqDyrVZ5tfalN7iCpErQ68jQKFwd7wbACLUL0FuBjBwJrs/3ctCGBDP9j3QGxi2fLspvjmFJx8u7UONNrF79P4abiZMpJzK1PSdxg+rHti5Qw/MNj4XrWhzXZLCZ6o811/XCdh/s7yzVIXjuRNJE2e31pfbIYw2JqyPg/uQw9h/i7GnzENWFV9HaDgZ9+j5DW3VWye6w43fuvhaDtQAsAMdib9oM/R666dUL/ahrj6iEWeK6ZXP+RxjEa3g1mwnaQeyNmqYFqRTE7AGnfCbIf/cOzOpFm038jNfp1UC7Ifd51senDnulBei1/HSLWebqBH9kUN4JsZxN+Dm+PA8whL5ac6zwBVNNsfgArxUltE91Sxwse5Iw6c1baaK7dRh2XtSkfBpX1A+5xHxjR6z7fGzItyFz6wwczl5yZHHUqiicBPXhfp6IL4z0K4RahM0uppbPbi4HPPeTRmY/YbSXbDzFOJ5qN8DziCk8XS5T0f7FsE1ej7wl8EanzD2FzT5gyZ9o3lfQucZI/SvvuNSHJPhOZ24zf1/Dxb8IUZY8cbczw7AkkxHJ4C9eCucJA2j8ZBwuKJ2r2A5n/ucrvd47h0+UP5gh7x3krDg5NcCWif95uOexZW6XM91iHz7CMD6ZFCeS+PO9kgXDI37LAOuPO4Tg111sNdBv19gIMgZlqLJvXn8Clf4QuGqQL/CVwZbO/LV6nd3VXyFK3wbYKttxt/f/I6/vvgFfy8Anj0DPrztcXRMPKNmNe03cnk4ZdjaG7+kDSWp2+QcGYqvXTp1205ICzGOeOvzrcPjxUIQu3p/+XKNk1XtTXP/rpqQ8yTOhlxryPPeivMlgovCUlzGfIN3hQfAqgOsBLvVxSXpUxR3IKpWUSs+InCRU/3mFjDtUJgQLLIkeydybtHYxVflBoswNFgLqeBBBdFncD03oQShCy3U+tsLKXyh5BQrwRq+AqcCrs49uVgos9bPC0WHjZfk4QSvXUCi8fWjuGd3vLC7Pq49/9B+7l2FMxXoVl7c8fPCyKwwsvtq2egyWAW6gweVRXEO9carVs79ZgvFTFWIhbU+2rRZwMT2GiCHe+GAdWuK1TwAA8vvPv3BcC7UmRs9pZ3UdThXljoQUNTCvtGHa+vU7N38A1ClNjO1s2LmDUOTkinGzZqHACrc3EZ67E0QoAoLRb8JUbqyoOOlw8fkzhyGl9BknCs5/TqiTefdkcMsnAGzj3Mh6PiZKHw4KOs4/QraScgUWBv0O41xXB8L6lw3Nil841iW5BstwleV9N/jmI1Los4TSXHRd1ab4MZH2NNiq2jABK7GxVn4Arn6uc6huNjZRfYcQLF2PMnXomvdEV0ld0E6O5xiNSR96VcaDOlBkc8zYP6cuV2bMLBWq5cfGanTGluO9BjomqdeXnxkH6Zx8wh01xypq+4AuXTKXTlCLRZtlnQv647iyJu71+1+IAyJXpsWTDZOct6zOjoaGm2A8dAEL145vc7WS6t3V74pMBKuLjplxU+2LtxSDO1911qwPxY1cuXxMI1+1nUWTT5v8Cxddryr/YCxKy6AR4sgLoWxaNseNxt35r7DRC0vXQPp4TGSecHHtTkbrj+exQ17LNfwqpBS9SobjmuZYbbMlXd5D/E3ufE+PDB5y+MxMrkvXLoSyDuHBbzAASX6vVYhLT8ChrtbZlkrT8phQ/z74uLK+5TNmHDf4a47X/1+y0WxZZ3SVQMna7IDEPlEG2stN1mhku4RlUEnZnMJVHfAeWrd7/h83t9N93jye4RF+CHh62PZhaOy94SeZ15HX+HzQT+UvmiDLR7zqeEpyw7AfQcy9XCYo49r2Ctc4WuBqwL9Cl8Z7EkcrnCF7xC8FbruHd79Crz4Bc9+/l/48Ov/tAgqzX/1ETgR8OJH4HkF3n2Y75lEgDG3BEVfJBXqG4iXAF4/0q7ypeT9b8n3xUkULADqW+D0vGmQfhLh3TtuCvOKrkT39cmW1mqJrpbpZ3+U3sF791zeRFO+2UbriHAUEudRlOdHJbFppf0ajwO3IsDM+alb/z+VRrNf1y4lN+Gz3IV+AFZyuq2IXkCRP+sLi5DeBPTUx6oql4nQlIIigK8MLtTdo3MBmUrV5cNedAGTQU37qL97S+WdjO7u7sxNQa4KkLO4nz/Ld+UXtcqhEnVfR523aBEVTdNbVClZWuCJej5FLnFlSaD4qeA20JSbcqKK1bkKavWvxvegiPGVzWEqTPHvuQNYsBPWBIkXR3f0qU8wM6hQNE3WdM76pjv6aFajZwbOaApfIuAkic+yjTVVajjI0PP0teDhoRftKTL03YcIQ00sry4dFbdze6xo1jAMEMk1B2pd7ss2Qb7cCUkkbdHSNCU6dVTlgAaXaCWu96o3yrF5clB5nNcN9RtRuhV0F9gq9d286ZrSlAHoeqcpb1m55AxhLpS9DeAYdZZ6mO4xXHnvEutaoKU8aw+TjIr12ZhUBao+/1FnzlbfzCpN8MpJQQ7vOjhOxKMlPMZvqfjp8xTY8vEY+x7NgQ7kKFBTPr2wdoOw7yTtygF4uloh3W+Gp/GIZsct122ZRvl05ZwkZz7UJ/AK60mOsVn3kYKmAknXZq5pwzhh4NUUr5RuK85MO7FKw+l3VeZRdrgezuu1YnjxAX7e1jGq4RXulEWKm8qojH4gbKsis3zY+uwcxzHZ9kf/TpPq6lxAKfoe3v7V8QiiSRw3fw5Sap70hVmYR2k1RnUNNFlXzN49PpzKZDTX7h5+SmMv5Lc3UJaYt9Cg/BLut1KGZZ7sr8jxhWS3x+z46TAOZr8zrBdt/xSwxWc+Jcy6+GURYrwXKVj3shr+ZpLfzNX6QbDrQiZfPFr2PHSLxGD3lOeXWphamVuMfALL6LH/TjGRtcA0gxl/ynEIbc9UTq75eaRNqNdBmEbXcewaR/d7gQeTizeZszwv1HRV5q7gXordwlOsMD7O7jXf4usTILj5R8ryC3xCNKz4LPCEPO2bgvvuaR8BeGeZ9K2Al7U81Xx4hSs8AK4K9Ct85TATIqxWo9/FtHSFKwioFfrP+PsJwN1bgJ7DVve6uA8ahJ0su+x84g+Wxs1ORCfGzwum2ebxNZpy1uJ4JYhP+xzA25h3RVOmH94MHYhXkrZ7Ra/dukmcR7M8R6LrSoo3E1J+JvguWG+ajwK5ZcNAgFmRq4AgCITl2QSkBLtugaroHMRpt403sba1dGmQiKCUKiF61s2WzwDoWT/VXxnA2e46b+7mnfCh3jX3834zVFkU6klIYSjJYYCCZr2uupXCQD2BSCyC1VKvcJcvq7CEfaaqLNe/iaAbkramcCdjsTgmCMkC18wnszBY86qjwFxNU0N+7rmIO/wc3guLvDXQAGC7gzTJpmYKjNXrEVYwZe/mzHwz4TyOuBapAJ/kXmpVoFfA3LCT3LVc2uEQvf+93YdO/U+sYk2JDnH1TuKtQa3U9cqEyqBS4rWP2g4EEJvtW6sFsYw0N25UoU8AiSvbPtdFwZ8qFsgCMBre2PANGYU+17tXbDRaCXsfhc2roFKFm9oZHI6DgkRTtm9hRGbZtBcEZ/fwQLRg7KEOhz5mecAhFbayRp+eGNkG70qYJA9Ct8To/WchJRpkw328U4oozupjNlyjRXJYFzl66IO0YRDHO9RCCmUzVV680pvhTkKoorxJjRncvU5rY4c6dtwVp9adeKT90FQ8JSMOf8d80A08c8LRjM40Cddn/32CiBf45/Fq436F94h2oK3rgx1qJvo6Pz9OAho5YomHUHxbWfUn/T2ss8fK0MgQUhkUP8kv9wfYQLS+7niH5ZU6lcYfTw452OhUdmVNrlLij/MGxNz6/gga0l7vGPjRrw1SOWHtQqn+fr04yXsLCIj3tx8Ye74OA57yXn17ZZ7Arn/p90Whw+GC3J+OILsFD93UzPrElw7a1wV370UqbTvm5HFp7lV2L0evMIpzH7tmTuN+ZRWZ8dH+xenbkaYydNI8MTQ1TcK3eMB9+omWEQZBD7eTodTmYnWBr3xL3x9hrNi6wuYIXUe4foP0nPEdMp3NQS2+edYJ85HikL1eLOaHzTpT/6sceQ2RKPM3cM/4L+MAw9GJr8ES/alRfBBr3mm3UE5ayz0GS+fFYZmvFcjt0nLfTWflnhS+FDyu8FXAVYF+hW8ALpjsrnCFbxWmVuj/Br+4xbPb/4UP7982d39eCPr2fYt7Q3GvmRcSM7mWCrwZcveg+7Znhc7A6OpxUeAr23EB739vZWVBV33bovyoGxq0ha1aYuS7uDP8ys11+ykJ1nyyrDz/fYJ/dhf/TPK6S1V7TMX5Elab8cwvH7BqfCkrY7X0z4KI1zv0v5V+p+729f31A3B6FNgp38tEpx8TfVVQySlMBReWxgkwvCU6V/ctmylrOi8cmghFRVBB7FKrAMoLSNRIkkXQoErzKpZsfO4Ch/O5vQOiZJc/Ymf15uqrbuKp3WfdlJuwfkMnAukd5WqRjQoqXkGjsjsVmvd6NjmJWpcnQfFMCDRYm+tjZoQThjhbdkwPECUFxqzPVI5C6BCXIv7mst/FkfdzUn78JlF+CdmmDf8MZp+0v+5Euxy037GYMGtfP0M062gdt0DvRwcEF1K6yTg5t7mBqYgSvQkFqbTxRHzqw5HPzSLlzJad5mNdFRCFZZ/fmo68tXPrhr1vs3hHKTN3f0xx2vJ9c+gTFD+kV58vufccnnPMoN1K8VrrjxRXpXdDpjB398gT5XmVtIUrwkEEAObuV3Hz9ZPyAs7MxpY0FvlfF7lKpJLfjU65etyJ8QDQWpp6mvuXeebjmM/dgeBc0CvLM5SzctTlEg5/eH7Fk6FPtiTMk1tcxeU5xT84Hl3dVQfDZJkKJ2r91rsAn3h1nr8kmH6jne8HQdsAwHgaSiLM6Ap0nrWCzflhtdiY0NPaz+NykrkWi/nJ5WE8XtPTuKaz6JkpIV4/Q2eH5gmd8WoZfsDptR1aVpzv7dkGOvU1kpWX8CP3EvopHJ00WPCpk7pOyeXzwfjs49FmBPSB5+iY23zFm9h9fOciUepv7xK+L9z35Zg4MFiY+4Iyu8teZskOb7fm1fz8mmuIr/OCcllguY5ZKc8fyOMfH3LH/YxFLos7ilNq7GyRvmWJfl+gxBM8BL6kAfr+YZ3ukPxwwYdX0/rMo8QKjDxxto3JPc/0c1qu7yTjfGAsLqx6wPmcLNFr36P1BcIErxV4mrkD1arAtq2vX+dO2tfz7+EQNRzf0MVRjfFPks/dHeZzd54Xdvrp1pxQBLe6mmu/InjgcP10td9GLE/vV3hayPszAHisPdcnh4zfl47vFT4bXBXoV/jKIHPc1RSdFqIh/VPCV76gusLXA7J+/8fr3/DXl3/A3/kNwG8Akl0tUVPs/kBtJvjAadiwU2JJZv67Ck0quz2Yi/ASzqW3bKBcVku54ApevwF+JhHYvIBZnPt9Sh72+v6CgDcbY1/vPV/JDbLyfAZZeT6Dx3KZvgWUCDvsJjLRnhBm7fXVwUxo4ecp/65jRcJEeU6WT1eO86ydZIx1N9Xisp1Kfw5/TohjJ/MBkLj9doOxeZ1mMFex0OX2W2u3Mjdrc7VEPzthSK9P827hBZgqeBGhN85APYnClHt6OkPdcROaW0Guim+rUtdtdwqBAWIWi+HuVlrFrdnF6LLJjsj5poJ5lyhbuioyQUjj29QVyuiHkSxZElrZvXqJH+e6jJjZG4VyHa4DTkKWA+xiP4o6XfeCOF93AnMFqSt/dd1Pd2CU1h+4XQXBJtNTAR/1vJgAqk2JXkrrY+fSuioBpObmhJYnkSjemwNtO8yhWQFQjxGdRirCJ1fsEaXE4vOUB1L49Z6KZ0knYsf+/qBl74YEYbrMzp2vt3FfJizG4ZBGo/CgD9E8yNpLYtpQ40ic6XbAjUkrII5fnyywswEhKVLT0JBqAxrS+ZBBL08pR50XzrKgXie2DsOOntUNc20DmuBKUJ8ROl9Y/QCASHR0IwH0e6blaEXlcNBfdxXDur0asoP7djc2IywGzoCLQkkBO301lzMrixfxhiwW9V4l0U5iE56/O94d2vDxtN8ae1nMAysrec0v9BnXP03BIXTsg77Hrdrerop+rvN9IhPC2MmsnzjcjQe4PP0AHuqguPuyZmPcz+MOlykcWNAOyvNZnINhIU+N5NeAElwXib13hEOg/cyl3RwnAxMfy7c47LpI95gRVnIhfs4HqY1muB/hzQsYvAbcJ49NRrEP97bkvgRm/NCBttVRXB6CsllGa69wwUhTQGAhH2PBxo/iu2ctA3/Qw78uyAqfeRUZ1nE5XaqbHZBbECh4+PNxGGui7hA7Lyr1QHc5pfylD+RDMpuHcNPgY08f5RO1VyesSySNtlMea9liXPl8PrQdEUKfE/cY6t441LWYtEmoK8n+eQP2LMj3Dn5/NfCp8P709Mjr1cFyehjvG+ul7w3CGorcYXQAkGu4/P5pY3q5whW+VLgq0K/wlYNfJfvF5XKV+vlQG+A6M1zhE4O3Qld4/xs+PH+J/3j+M+5+eI5fP7wHPjjLpcrAWwA/ILpl1wXhyWVmaeS36KYvC6QUFkKGrT3fNLIrt6C58q3P4zBnoLlyf9fjP3Mbvp+oWWK8SYm84lstxcXosa/6XsR91+uJJvwN97vU5UprfHTfH0N5rneALy20V3xPvy023rfU6JrviN+DPUvxn6nTbRZXrfi1Xvn90SzRN6WND8vWpqAZffW7n6Pg4onTdQtucZrCUBQqKpyxriwbd1WgZ8W5d2ltQm0tmjtmglIJAku1BGMwq/Lc/cE9e+t0sFmLmzu7qeJB+EVRoUgVA6RWP64ngGq/Dxxowhwd9wxEi2DqMm7u2WMWFiiuqioSel8iDJ1tlNNOMCjR5X3QeiUB3t5mMnQdTnF7/zhSjamFb05+eFgQguRyj68PvF8FW6UpVko/RNJddKJ5JwA7A0ntAxV858oWV+7N/XsVt+oMtWBvepfm6YBY+ppZsROIS+wVWiUnrCcTChQJIhBVU1pWaeuu3G3/z5o4URL+Xl+CT9/jrHpSxTb5/R3kms7Hz2I/+zZFWGnRQ+Z2tizlqvgE5qrZd1+A3BCJ38fihTJOkG4szAk0qwv3UJmDJ45uDbHf6XnjTTE5NnQYs/j+ucrX1q9q4Fkhsv3yKH+3qI5vWqD0dJdegdQyfEr9VX2m1YsJvWcQdH5sfMRZQOepYx8yZrM5aC8zPcCzypcxKpV4+mhzrz6veLRXZGwy5Vm4o1/OJA/omfMaxW1dwOI1cyXNk3bore1PcoAOAJ1yglQ3LUL7BkVGuEQ/z8d+YeASqtccX4d5hrFPL9tagziGL8bmst13HGcZMoNirRdIhgeA5zueEC5WyIowPByO3shj4K/hPiHk9iFbzPWjRcbxJx5PDIeQ5cbgObzGWaS/r0xnULp9bjgyeLD4PoXNwEMAACAASURBVIuvfW9RpxcuHhHwdrdjH0NFYJvdfBiramvovo/YLk/nkcyP0Pv8tD054rw8aDMp0/dj5X1W/NG+s2hjv1f1+wkNOJ+B0ykEhXV+4H87uLB7CP3ez5mJr/r2UE9T+WBy5umzwzT+WgFjU6n9/FpqWh9edHkXGKzPz4gEuiePuMIEnpJnXuFioPSnyyxGvOLp6FR0hSt8QXBVoF/hGwDPfdNCcHi/whW+I5D1+z///Q/89c//Dz4C+OXZj/jt4xsEIdsz6vdZznajW5YFYZilMfcSTgk62XxCyqQcmOFtr4/dx6nCoOeSp96B/rzHzzCzQqfsd86hOtNcZOW5t26PUp4Oj2V5viGjGCFv9Ff8caNtHxNe0lohnuXRMxn2Fw7s/o+QNtoEdEl2a4O+x98STkmflz/S51Ka9SsVEUSXmEZFjk6QQQCYm4Vht/xigG8APoPrGaTu2WttynRVqNvp4QrwnSjQpe4WDpDeb6vlGyoiiCF3z3qB/FbgTGCcYx+g0qyESd0+u3utlaRWVhOazK1uzaayPWvXz3EDf5rlk6W0EqYIDYnJIbrIbvbCqzCK8nITHNG6jAA93lwGdjCfWeLNzbB4CAjWg35MFLB5RqjCnYRPVQKj9HMhKoyt7ldpUNEOfpUixuPsOgQ3a3PJiM/UxhIDTASmM8gjT7FKTAAXCv1L3Wy3Krm2EYFpHwYl5JtffHMHY6vUD3pSlm6V7hefcZJ78PjVtB7isOdfSfYZsOUQHrPTyq6R6LjIQQrpO+QFy25YcuibqUSGWZQY71hZ2g60XXfxcRgx5kLz1Wyhdt99aHiqNd2zpLUrPtil1qjUaUG+d2gssvraIS0Jt4MjofF7tpBvWrXexqoMo0goY02ULMQo1t8kamQoevbm6/kKifaHeev+9zzCxjh+kef47ixy8HwyyXcPGQDgrGTcS6ZrC5Yh1Ym5HhJuMrDhmsrc8ljiv08VJJhUnXtcG7cU02gebqk6zJUEEEsfD7j78n1H5I6r7491ow/5+visMy65mZaKNZ+ejJdF+mPkHcusePGx1dW6z5sKPKeQSia+NY4Ohi4AZQSprZeQP6a0A5/qv4Fb1BQ3Jzti2b3i+Yfh6FrrwjzvM1Hfu6yt9734B0uZFHPvGh6feCXwDnFAhUUzti6tCd6R7D0xMrMa5z7nbh0gWX3Lnh8yv7QJWeZ7Tt825yvLIBeKPtdOGinkq2Xnuu/MCSGtouDieP5olvyhYov8XHlemR74gJsweJJ2+j6DxMM9Xfzd51q/cFvPuPadwmMcpvkkFtAPyOuTsLELMn0Ib55M5f3bZ+DPe0U8+rzzSODHbjDkAHylBmv+Lw3uwyau8N3BVYF+hW8Qprv1K1zh+4CZFToYf3/9O/7y8mf894d3/YpZSLwzNwXEDdwdyGiW2ABwt9q5ZpisNLYUp7srlfT+hpvC+uMrMbh9iaZIZ5giHRit5t/Lilitzd+IwEnfNbrVFzG8IzC6g/fP6inuRso9oynP/yjvv+b8LoRXD1jJBeFiEviG9nlE3pnvide+8CcRXOjd6CtL9AyvU7xd+Ewr3yC/nAgWLFIWZPj3nToRABQwNYUflRNAJ3G3dwImSnRmCnh1gakEVQZR7QLciu6a3Vy3N0U513N0084SF+rWvQliSQQKTTEv7Zu1auZqVu7KrdyN0Aqay21moJxEwVXBRa3rm2adiJoniixkB+OWJcArkkZiNhqBQ9N5eGVRu1Kn028mlF0IkLKQa2uJkrvD4BIyxU18fhTeuNeE3np0xIwNpT05EFT9h0j3iXyPVsIyE0ZKb2Vx0+0PAHHroixa60ZeEY7q75nsUAaXEwqp63pxA+/Taf6k+USc4nWW1Lp8afiQEoYUl9Yv23Dwwj6ayin1pw2LsY+YAwquIx05+k4ofYSDMd4knDd8+WbumTiZIYai1G9mUNAhq0sJVd3FO9W7BXpx8Xw31Tuwc1dvw43tmaVfkAizlezWLZyiLAppOOCpQk/y7xjIG0YBp9/8DDS8Wq+qUq/ihgGj3wq/tR5yPCvwG4lhgvpqcXt+ZLxGx2F3xV6H/DkNUlbaWa/SDkqB5ZGY73d6qQcUTenuOw3EEtrk9Yd9C5EvgMXACs9p3p0WMZ0sLig3l3MQVkn6aSFcghvlN1GQziixpsUB/I4qCKwMXjSzrB22ivAedRKf5Clt/KDZod2sr4b5kqfzp8WdzdGEzrwnKPX3xqlJ718PqLoxuEDf6r5cT/iZgIG33JXob2TsPU+JV+5pJ0gQ8rzEY7QFbuz+10dTlC/brK8LrCx/wHtPeb6M96XAqqM9Jaw61zoepcWieuNhcNqHb+Uz+06TfjljKsr33FymfWXgkAPHbDnleSlbQRsutOxPNg9rf9U1ZpiO8vukOqE+K5C6Ts8F7KVLj8ziyamvF4xOUgdbYw3tIRAOV2v+RcJdXtou+cCR8tbqFkTGM1n2qJwbrHs4U5rf3eH+4Gnu5iAG2kZCwolk73y/OfvR4GIvIhvwxbChR1xTXeETAvVxLHyW1IMEAIDjvuwJhsdFsLOUuML3DVcF+hW+IXAL5+lq9Km53yMubK5whaOgMpj3v4Je/gwqBP7xGfDuQ7faO6O5cNexY0NIN2S0vjcvg5e9biXxw3Uzs8n946Ksa/d1qcWtFEoA8Bzgt2gu3d9iLrkHQC/m5c9YxuvXzdX5Hrr+WS3PaY8Y3xmsyPG1konzfMN9DJhAcFI5qraH6DJTvXfWC4tFMa4KclWSlxZGdGoCDRkLTKWVFwQpbAWZC2/mpofhCvBNszSv7Y/5ro35egfmCuAuCTMYdge6F0oGv8minnaCKK66oVJ6tPul2Vu3F0a7Q5VMkW73UEtavpEwQBTmInzltkkjj1MiQ3b/14062H1n3FoChLH9SsoZeVhu35VUTIV5OdxlWJ1gOpflu9KqCPeBF0qSbW7G7mchYJ+mckp0nxVtxVLkulLQy9KYWc5tUFfGmiCyyPWUyv/dXyGgttNirHelq9CLGl1IhYGQi9VlzBQhtI3NAodzsT7e5GWi1CXJo4pL+lBn6gry7KLdLHddxb2AUik2dMXYqPmAQ+iWPKptH8pqc7MuVGCGS+CAlyyH7TCFppVWsfGjObdx0nUvnn4J8anF+ZpCdsgIjo6uk4q4qPWYSd3Y9ad5EZ1fuvNIcmgJ0nfIVbk0/mul98cotEeMY5bnsX6dXDJGPIqsOKRpKWYR+L52Rh6+kdUTcEV5vAbeFqkWsxqYS6/tqoNvdfxc5oz/beaTBe4HywXk3BthbhE8myfk+aEDechzVvaMznEeHRfA7jvN4uUJNPVX4/HyzjlOLo4xdJ7cPxgjo9zK1/eDGXuYhRtCW/lqWjfRraJvti+3g1orslDmA5A1XCuXGeu9nZvnA+/2D27O5Mg2XD6LbCf81riA+9aqN0x+kd8MkNuYp8GXTUQp/weNuy9ps7NHgwN9eZpmjP8pa9y76wcpa1KvtHbdMxiPU6gLcOu0YIGeeJhyH3IHBI23+ejGv5bYbHzL8XI+F/Q1RjNAyHMQubUL+QfGkD+7YGCjaEdLH4/Ss70vmW0MrqsPO8F5Osrgp3Zv+U7p/dGAJ31qhdt9+di66PD7gCy+PnhizIPHg0du108N2fI8De3x5QpX+DrhqkC/wjcMc8HKw/K7L3xlk+AVvm6YWqED/3j9G/7r5S/4x6v/F3h2C7yvfaFzlvFyomaxDZdeT/mqMOoHCc8HeyfyKwCjFfogxLpA0vlGNqs3DNDbdhc6Aajq5p2A4tyy03Pg2duW1Xupx0vC4Lo9y40Zo4mdWoC/pIjaG45W0XdoyvNf5P1fEvkPku9vi+o+GuztBBfwCzWl06+faIVb0A4hvOdk9S7PRej66Hegf0pIQt8crpaCgz1obyOWvyEfAuxec27u2k2BXpoCnVSxXpoFerPUxiiIH3YwDK4VJApxZgLOzfqc67kptOsZQHPTTvWupbNLrLgrvVX5x4Ap0bUccs+M1sZaOa69zc0dIsSbt5RDpX0ramFP7RxLBVCUEbX0LL+FhaqGW7Ui27somODcuFfFXZmYU/KYnKi93xoJY/985elr8v9xDPo7oSOkPmB0cXVgtPeVufAkq1dg3Gob+frMYCIP00Be1GedySUQ7zlt+paMpPr1b3eYgwGmKr9oikO787zlQgWgWgCqYKogKiG7frhASpXhWp11U5dhEfS+85b/WYQFEM8Q2TOCp0HpfdzybfWroKUSvZGBg+pVc9bpyTm/ThTtVGP0aWxy43CAPO35zDKHi3JSuRYi5WfsSOLncz1qfOk5oy0lgsy0PbB+kCYjUh6maXaEmax0j5x5Hb/jZ7m6NiKtN8NZoQOVui23WopW7mMp17YNd3WiDvC5WgyjjxCzKZVkPPRCJE4bEKUUMFfpdo3vVTvhFAe6HiRpUGD8j325Su9Ilzk4apFE5pRMr+MR3jZxGrBdyPDJrcu2+NsGhL57j+XHOsnW8RKfviQCb/BS41vnFN+VyBs4XVS/LexpnVfoK8kLR16fTOcW7XDkOqLPUx90bQJ0RbryVCDQccCVx0DPq/vJnTE9adzERfzw2uiLuhKZxsl4rzJZ8jqSaqTvb1o6U6zrjVdqiZ6Lqxznfr+mC22fBzjm77oGXFqZ+0OZfvWRgXsEba9sPe/jzvjFkwCPfTnAIQZ7T9gr89J0O6m21ouHLNEn3xZKcLL/NSCN2wUqY7COSh5Ykq1SZ8rzKboug5xZ8E7h8pkml3XvvAoWme3knU+7M4/4b8XTzq3Ic38lny7lzZ4XuzB/cNl+WJYb5K5y48g7q6xZlMfaCUPEfMCyL/Q4ef6/UX0ODwsg2H40HGqmjuNjwlN7yXhI8Rfh/onq+bUpn792MLmE2ySkpWz3WoH4/QpX+MrgqkC/whWucIVvHXQv8f43nF/+jD//4b/wf/79D+DZL8CHu7hxIzQl+tkHLAQ8k70TUjKDTVfu96iPupovb8WVu7pwf+fweYt+R/qF+XvI955n+UZ2Kf7axcvCtk8Gy513+v5ZkYrg6TbrD26//qn2VJ8d9jYKXqk5CGhlIxL+mhCnKezaht7uQ3daDh7y8i8iAKgMnCuay91m0cjnM1DV2vwOkPvPuVYQahNkqnWhKZxhQgV/h65iw/qfKssVlcJdYa2HBKiKIEVc/RWIhq3iVjdnKCJPEsViEJCQWGS5PxBIhbLBEpejMq6ZMkt5ehe3ax9uZbJVgOGVHaZYd3tH3+yvkCJEtDsdkZ5rLMcERT5dhjTcXyl++ftW2iGQuuvzXVjUU0Gt5gYhh5Szwi/IGblfM63Z4YxuEgeokL7L487Wsl7+boJeEeRxsMARpaheF0Lo462wS9O6bbsaIU+MtSPOpXcOUuyA9IMscPQk8blnUuX3mhTwOQ//i8mvPs/Ei5lKzEnZMgHlD3ndMO0O9n2CP3O3igawco3evWD0uhgeaPTZVaIfAOW8/p0tvH0pDkv2qYy4DHV6zwOmXTlPxGA9LKI8joT/Ol6xokhA0v+m+vhhYFOUUyjOl3/CR23QbQxm/z0I1zYWASF4UgGepXRzz7SHZ7zuuy6S+WkI2yovx9v47g+aTWOUqDfJz3tFWBpahG/hNgblDDi1wXK8K48NLpc3JrvB+txNDL7ygQ65986yPkDEaSVq6mazOHKIamW5vUtzHeHLzrCTT41lv6amRM8Ll9UEITTMbbqHd7dU3xh/6bMvgvQqr1ndOV0RsbI8H3jBpfAI+6bPuPX6eiExu+ASuIF1z2EpSSneZW29GXuwQMc4Tg7lkyJs8vb7wkamBoK87jXskMuB5MFdlP7H7vkIfgfQW2bnyqZlpEWGB8Fb1frDAIVg15pdCk+tID8CXwOOK7g37jR2yaeig/d4sQdHhvnngLx+OIDYF4H6kyNwha8Jrgr0K1zhClf4FmFhhf4//+d/47/+/DfgxxfAzQn4cAZ+lI/vZQdyg7YxuPOLN7+TylJVgSxr0hPFGv6yAK9X0qItSMsrFaAwN3M5fg2U5ymNuHHH247Dj7Iw/vA8CoGyHCZoBd4Af5gIE/3fCvKd5//eiPsocEBKakK1ifDwN77fLv1lUyAhnTPAL9IBfnN4Efd+kZXov6a+Yd8TUrt3oR+VFn8iCNK+fRxMzmBRVdCrGznduKtwXhXkTVxOqsyjdkd6tGzoWVqAUy5z1TvMz2C1Pudqrtyhluc4A6pAV/mBWm1zzNeqYn2NRNEIdMt4FmFNkoywWhnLM1fcnqg9qycMtST2QvOkhFHBctPjsFgsu/7FKvfiTn9rhyS5NRq2OpDVGSY8sxQ0+QNARPhZaHd22QPect3BVKnk6DcTjs+62sCfFPd7jg3lGxvJe1dOYzfxXN7Oxhtht2SO5kSqvNP2bpm25qsATv1wRhGX6hlDr2tn5wOiOgGipqDSlJdFlZ1VZHWixJTxBynK49ZwdUI38ncldoHwSAtahDc4p2/5duni4uV0nhLZ4nwWfzXN+RZWC/SMl4LWOEybRGGZwJO4oTD76WPZzpKYfJNDkmwMNauDdoX7jApCu1KAUIPRG+Mk+TVPHSsdFDPhzMVZh2sdMvN2FrwyePo0zjJeyBqFzw23Fp37rQIy/jtt4rzP7v8gj85CsaFxuMezaxSyItEn0Tmj8+sH8aZHAVeHVYeB/7ZYa7i05Npv+AiAhNc03R8tXCIoXuxInfLB/HBTLpVc+69j++wpHYjJKcnl50vL2KwImiSuNAaF/ubXMoBMFHVsk0F5Oik/u3MP6XNwouT0kAVPH+fRej68mW5Gb/9tryUX+BrTle+6p9JvuRi3lmlBHNMfhbmrie31C6Hf2Q7IPrLGPYDWJ1seLxn/rI9eAE/Jpp4E9pjiLH4cM9Mcdi3RU5Y5F1lfEX1IcScNNDuIN0RL/MM1dHBwMFWiLxa1jpfGyihfd311uS4e+TunsURGHx964fgEyxrYIU56BNAf9gvEQPD0ZXyBZYHGIz8OCmn0w9ilTNupXRemZU34ZaG+J9X4bg3einL80s8LgW6pbG1rnYMCbnkd9C3Bp6rYN0uwJ67aov9+zuKd/KmNmL4vXyWJD1e4wtcBVwX6Fb5BWGzOULDvvFLhsbk5Y33M/HPAQ+qThT9X+Hpgvmz5x5vf8ZcXf8Cbj+/x+w+qXHCCObW0U4WV5qWutlbgpd75dxoZbkO0V4+U0SuOrtT5bXPdzs8lbgXwUwvPd2y54mO5OwICXyctIucxU/gehrUw7BgcKHe6kdf3S8e6bq71dbbpBeaXI6rQDk3x7jfkHqcXNCrmLQsvdH3Cncus7GAx7PtpGlNUIulntDdlWwHQLM4L2j3otTCYzpYP22EXJySoKrwQRU6tAFcQn8H1I7iewNyszVkV52ju3InP1oYFzQrdBDlV3S97gUYXuLCvfxBmsrhkZ4C8uk5cYjPa3dVUcIuT0Lfd9U50EgVlr09rAl++SqEIODVhEDODqgp/xH2pJalJKa6bPpUYcw+3furGyszCV1CoItSKX+N4uLUyESK+Yhfu2zN0kYkgKfO2QerW/mNpu83Rnrs2AYza05hXgBh5aqnu+7hstr3Tb2lJEXI1Gvvq9r4NePUxqecAXza1sdXulCYQnc3bQMuzxGwIsDvOiVrH9hXg0pSBZzL8W3yZP6vgYK58yQ6ztCmVHY7eeTgBTGAmZ03dMNTad4O9kc8EFIevGl7FxWRKkNL19KntVDCyKKW3UW+fjipZO4zFUx+LZN1y6OrF6J2R6h4vOmrqAcN7ikh1zfLToR4uhONvkfB+vqXbgGp57ZARt4NI2TpJSNSHAoGYcSIS9+5KuzQXq2DeplwC6NRL5tqoUSeVI8Cu3nCFX7xK8W3K1PqVTi2+F2lRVnVynkocEdi5iu8VX3dk9Ft05uDmoek91/5lZ72wpRQc8so4bGc9FuV6qtItZWk8U/L3HLNfbeGnEZ438LLRBe+ZYoIIQVEz5CFlBTfmiX9O19aRK3CmaxjYM6Km8TkvwpcQw4Weh5orM8kZDXL+q34yFHjpSDwWf7j73OiVsxNiUG7jCe9Eaqe0zD0G67lkFpO10DxOgMgQXljnF3yWjbUT/qnhaLmzDg0c4l+bWU541tCAOkkkXGdKaUrfdO1PfWwR9fm67wcTHpPix6JObnXiva3UtoYC3Bwg/+k6l7p3l+whx48V8vVICttx6OrKpx+C6XuJRZpYcv8dWIS/8oKaxxmtl0Z3V2rF/DyOAHEBanH59StjAg4l8XD5Vuy99D7kp2vm9o3PMT/b7676sq+x5Hl2Vwvmvqp8qWrdU7WHPsSyNsoRXZkDc08QrM/7nnPX+nyrTQI69xzLW7CX5ewgQd5M2H73nvBU7PUxyLla/w11yvwxIbBYj2yuIbcO9W0SdVXYCiZ5VRo/h2icUOHxOwil9HVqNXlLTuswvLTNHnlavLisK3z3cFWgX+E7As9dtzZUs1X8Y3Dmp+bC913NXLQzvsKXBN4K3Tfju38DL27xugC4ewuw3AfeVjtN2E4E3PhNDLnvaN/9Jay+e+seTBfhxX2/PY1W6Kuh8VI2bK/zuKVY7rMXbeN39xo4PYe58SMG6Hm7H70COHlEUpYeD63XxzftV0/G/8kdNNB6MrrA8ynPyBjMKjTjayvp6oGxnvcMK9f82aJc3/8grjn1gMYLILZzLmeRv8TnlznOZ+RXeRPB6eMMLT+dnNhtzn08aYtK7UoFVZ6bIrkATM2aWe9kJu4CFX8fKHMTStQKknvPm5XuR1R+D+YbEQyI5Tmfu6CAzyDWW9q9olgUV3VCa/IWVYKXvfpKusM7ELfXTSqEWxSYS/cqVSskQosiQip3spkUJxmQyvNEo0ByiICYu+W5HSrwcfsYGLufa0xR/iq+QRhjWgzuzjtc2mZE3ulAEpd9qQzcSpRXARvu/NjC0yb20D66903O9V0CuzQS3ymge9ZN4MhmteLKnNn5sksXMGm/wagn14UAU6KS5qH06PfGN5LlxA4Xbu/qHMHuSndtT+LektXEHGh1LAzgJERRRbUqx9nqAKqO0tznKWdyakp8eNUwO0FnbKutVaUdTXHKh4EENFqcnyTXsxXU69G+R+jicOd9wvIXp9Lcp2uS8KmybhCYdsGrdg9VF+aylEb96I7+xiJWECncR/VsPOmY7dj18dy50obtvrnz506LoKgsOIly3fByY69ZhBGaEv0cx5oKrWU8jHUgBCWGZy2aPhBgrL/lGfple2bWAwbUOn5NLSX8a8V12O7nid+2lecJwd3WnnE73k9m+ed8iv0eveRiml1uLGLoQYM+9vU3JmQimXpc++Vy8lxmh4+kD/oJ1cf1h5dmVpYMYaeX1D17BeljaM7htHwZ/Z43y3ooR92GVidrr7001eE3DEh53Dt4sXswg9bjzmCylt+Kv/pGgF214PnArG1X76vnUE7eMDi6sVOC+uZ3ONotFc+lj64slXX/8GIjP/9Cw8fPC4f5WYLlYugBiBityJVBi/Hs+oo+0Pavv0Rnjn+NeZLvj71jlnNXoJPvtwwwSlPWZFxRnMKcmg6Y3MHN4fAvUKi0Q7fUr6UJbHlCFuJ+6LGvChhuW5MXLD3TmTcEmb+VS7Vh7tvHd3DPE7UeXd5BLHtH7mkZ7YAv+/kegBBIeFzjq6Ru3cMhYvX4JFyU3Uqy6pqc3Rqk/4JZ4gidwuE5uVpC1+C+X2j9zJiDEdYKpLSEy8/RxbqhpgsRI2jQ6dTnP50DbP22J/Th3KoOvdX4zR3t8XiU7zbsrfVDeTi2hDpWmoMpQ/4E8Fh8cQZz3INXFr9fcmwvorfAMRhYTCPcB72NCGldnrMPh9YzHj6882xyfxbN7UEfBMp7ZlnVT9nuV7hChKsC/QpXGGCykL3CFb4FcF37v1//hr+8/AX/TQw8uwHe3/V4Z7TZYbZ2Cut5F0H3cDRJl2Vhh+5DZ4DfrYfiC1cIyyEA1ufnHQcCQM+bC2kqu+vPJahQRleFfi/g5ZsvqB1cuMI+BNd3i++fdDP0mWA5ndDiz30rfjfS/8g6nvyyCj1IxqKjW1VleAXzWd4rGGc0K0L5Xp0wQDY9prhzChcVjEz3Q1lYKdbjkDQ9f9GKm9u/vsG61Q1XaWEkikbmYrXv+1O2fAmSRvFXmVLeGIqFMfkKOB5ld7YH0AFeYxKTSHiGQJYirid6nFmXGEqU7q93l7+axpIwLyB6Cpjxe2jtJ2sqF7RecfUv8zjr72rVTDYeEDS/2jaktNN2VNfY4KGVVFjY6JyxcQUMyDI8JVRZqtchhImT9RoGwS9fceB6lRZySZNfLMLaEvZsJBkol+nFMxpegNKF346ErwWdeykvnKMm8rWsaj+BcONZ+KSkAsYZhNHde4/FIczXcBYvlZAfWeXGbf5hL7jX/Exg5orZgDnlDqwNB57qkMzCvaPNc6ivTxbEhsojMV87xePKDB4xUlt6heRFnniUAY/z02b8JeT0F3ObtL+Y5c3hURM1LyM43tY+W8qHNSZz1SxgPXE9ACTTS+rC/uEChD4J/heAedzwlsSTaEbvoeEPliO/tlb7muQ7k45w8Tg/Ws7seSfqgFuaUYcJdrVGpYSCe/fehewqKPkhyF6E0O6ie9cR1HTEti0i5RPh0EacL3Sr5ftkO5fsrcwRlb6k67LYR72yv1rmDlYs076rpbjDNXsZ80jn8LAXgfNyRBKTI60LgYrsJeVKMCLqaRSZSmCunQYV0GvFANj5UcKp6+X8MkTqks6Fis68N66VFwh24fxiinYPfqIJSKVo1KOeawznfPR0BjPc7jEvXuHbgMdm258E9nZLnu/o78jXh7MAj1X3WT6PoZy/whUugKsC/QrfKewtYDYWVFe4wtcEi7vQ8eE31Jc/4//65a84n+/wr3oGPupmiPsdWN0MrZuqqfusKt90o+otz315egfWFA6MM73nz9UrdwAAIABJREFULkST1dkN2t3t5XUv80RxQSWbP9zJZlEPB3ycoALIdc8TLfi/alOQ/+hwznvVI3uiXyTd7wfiPgpcLIk7BrfS4MdNwxpky/RbIZoerPiT5Puv2r8z1ocuXrMTlmDjbvQngCUq0lnYdxon0FaBCJf07iz3iEAoYJx63KhGFGEH4C3MVWnOLJZ+3tVwrT2dSDdYlO9xrIqFbB5nJqwQvmBCH4zdi127SdRbkFhn16b8rGj4nlrdiMVNcRH/8UXUOSqA8QIj7RKk+Dq6AN3NuH1odaesvFCLymA9T0afsY3ZYkWBmRfsJYvzbH3tstWYUZG+gMCPjgpqDgqVZzIoHz7IoxKdc0bs6UHjd2ge00uB3Xey5uht1wKYqGfvO4X1E2mFmYLXKiJ5ab+Bih/1GwwHK8P6BvX80iafbYyQ877glTmqpPQ4dcj9o/f+Bkq1wQW8d606adNBLJji5O9lEq23KKN6DxT6Ta2tJy5ig58YHvPtz5meczxypNVsZVdwLr5HJkYwfmEFz/HR3uKx9rL39lcl90aPU8pEneBzsiiPJbrrAwYk1G4/93ME3CIRhcImsN9wd21Weu5glQ4JSuXMhF0O4ZUy7Ugou//XsF3+GJj7KBpNCoDSPACYZd6G04FDEA5DODxCUCPocC1C4CFIbZmSh3xTAy2FkZ4XJfwofQ/xV/OQCx9w5IlFkdZL43d+1tC+kPDs03tL6KPzJoTVL8r1A/0I7JErZOwebb4LAQdAmYj8qmX3c1tMRdCJJOO5AlpE9PWT+Xu/7RTX2vF7w8erqlmEBR9d1j4Z7nkA7PIyU/w0nz4cZhvXrbrRZOEwa+Mc5viE5xdv5b1ome5QbUKFS3PVTrrmc4cNG0+c8BhXvSL7LZuXIFcZVdcrqJWtZRBTX6pKZnool8WSutet4xxX9M6SXKPlJW/gR0hzZqpTosu8vXw+2TbeZyoEKmiyk0IAFVA5ydntts+0uV1covPZ5WZXxLjq6fVkEPrYXjdZWnhvPEBT4CtezN1LelhDc3r3dPPEcuV4Yvr+Z2VH6jSayP67uvlI72gPVvMpqZV9D/jmlIHfWn1G2FwDHMvg0XB5GGzg4fjsTiSrDw/jdjvZEo3M/74Ucl3hu4WrAv0KV1jCJRvRK1zh64P/+df/xl/+9Lcmui0nAAsr9KWBRpCE7JSmygJ5PWSFvp1dQCF8E3zqWwDP405WvUZfCtltYHZBe1So5ONeoYEXPLwEguJVv88EMgZPvZreEF7sNjYhKMjFVTvkjvN2JF8szEHiWlrDqcXjk8sHUZDAACD3mtd2zznqGVwrgDtJ2+85b0ICbs/m3jwpkGcCvC3520AClUZFocWty7sJrypUWN7kM+dmuH4C1I07VYgSvQl6TAhjKKqgqwuygO560IlXRuGbG99qrwHNc1RfJJgypvAcU/b1BvuoSgt0deEtgFdTnpvCuNcMAF5RO6CwxvcIY3LxZkJAX6TTrHaLbolEMX7zJMxzobQK2cELmbVmRJGKBADVKfA5pVFINvLyoqX6++lnRqaM7orSVVjqxv136bIhXHjgcHAFDocMZi02EyAjCCdnn/LU9ajTEwNc2XmilJZwAsswEqj/LOWS8BTL323UL9Kt8dz8nr+yfyCslPkdV3f5heNNDHdgyTV+dJjg+JD3XoC2RDsziQVeb8n5csSHxn43E0qtaZGc48v4HnS/bgqcuS0dg47M44s4YangENnK8tCaYjIa1CuMTNF2fYMK+u99lY/DRefaGpgoel/r3imCC94jglibYDIHyc+5Mbc4wyNyDSO9a4OsrAjxGaNC75LyZN55QBaPCheR8ui8/WmSPwrseSN5TOVCmPA+yYz3CSCv6/CIKN83oyN7/gMlK1sRRbjNSC9IDkiwi8jtcK2xQkksbsJh2yiaFNDW0cVf20Ms11oRqh4LZO7OPkSJzmE/Kmssv2dd7H10Fuq3JGwIHqbuMxzPm7Hf5Zhxefm0BLB5NAsY9rxOBXQSK/RSQEWuJLF9GINrAdO55XEmhL1iaJNi9SJUkG4IuO0/WTyBQQ8hyBoieJxYLeS0mjo3TNbHk8joRNmLx3Kgg1o96scYhyeHEXfzvsL3AeNaWoO/eCD34HncMh4CD7eLMRg2lgcPgA+Br5WuV/jm4KpAv8J3DnkDNXv/0jdXV7jCAegy0/D7329+x3++uG0bITVSAqBuukBoM4UtUgjt4mUWBTsFvXsASr+MWMZLrJXoLzcEWn5Int17EaHmh9duwyku3at8L9xOEBtCAJ5JBh/UwkWsz3+YlP2GxzvRFX47KJD5Nb3/QjF9fv9S4ZXQ6xeh5x6+f5R6/Vvi/cG/M/CzuNh/z7Ff/C7PRw9dvBaJxe3n4t2rvkrjFDLEIzQFuUl/YK7ZSZXop9ZnySvRNd0JdjWBneR3BXEVl+13XYmu95zjDNj95wxzp64W6c4KXYUbpqPW++yCYGdG75WAXvNWy2o2uUvLWE66EDdLdG7KdBXmEFfzvEqgdj+61NniQ+oAApUbNIV8RT0rqcXqs0K2fepWXtGbCC59bYbq5giL745e0TthIyZJXPZxOarRbxl4tbLwGpDQvkB4BT2okNASd4mUv02h0VS7GQ15ZbQ4fjSUHD2YwVSSW/0j9dMoXVLYhpITkgLhqt9pfbiJ+YL3AQvTU1cs9TX/lDbmWinVjU0nUNS61nTPp96l7nDyXa67i3d4wqfPatsY5zw2hAg3eEwRXJrGR5teU0k1/U4xIVib2lXLVp6MbbBYOSHInnq1OeZpz7EeGr8qH7Aq9VvR14i2cvwSaYzHMYFaWShvdBlmlbqyNW1TMsESu3y0ItSWNZzYq37mfpCkOQkqUh6lvBL/Mpw1juunoX6GRqcbo/FPyzfTBmKJ178TIC5gxztkQ7oJzC65mF4FkfLoMQ7M/RPyxI+Lciq1taR5YLqAT+1B5p++z4VDm+x6GI9pPToDWm5hHvjR0NMWz3mEatpV/XO+wwgX0CuW8nfHFLTPhjDEvnvpsm9Qnt+jHfeExDMl8LLbZD6/BdQPPYb0k/YKrvrd/MjcrboVVyXzrOn2yFNSxXL8yVwzXzdM8vBj4AXSwWZqYZzrn2Ao6xJ6u2gPtSRfjssjZV/aySeF6vrkSPTE4/J5Fcf2DwEBoLctXyoUuBnAwFvuE6AlAOJEKzxRzxyDgPITQO+HhWyrakGhG9lDsDjaqwCJ8rz2+Y3TbytLO7/jT0OfpcgLGOJRS2YlDqv7SH9via192PexQvMhMoCWx/25CK5iXd7ZPfd+QAQ6EXBTQHQCndqek1jXuLrvkoPW9RzYsfVLLUv2s0TdSxiBwJXAteJMd8CdHtoG2jVkmh+j7V2BflXZpF56RZjfv4Z+aAtOW3NO56qJJ6S25z4B53PPoxTZPw8Fubz9O/a9a3wx1sePDd9gvXJbTT2XYaPqmXF+YTQK/OiihCAQimN/DG6GGrXevyvkNULO5wsj3xW+H7gq0K9whV24cugrfOWgbtxn8P5X8Itb3Nzc4A7vEe4J92ZQYc/hhC9B2LU3ViZxslL05YEs8rvtKnkULJy5W9L7TXWIlldpk3KW+EidHsImZmXdVz7yFHCYVrhXF/m6YCaI3vjuZAENkoW5c+1Nllb/JI6zkA2CPbvv/CPAd+2vfhRBwxngHyScXRpGl4ikHYvKIrhj0ofbbOPl6ZC/M1Arbv09g1kAwQwiFZZXEBegVFAt5sK93DSh2Im9yqWiguScT0VhwomBioIzgIIqZJM0RTZ6gQaidgsKJ18dI8aUTpYgC3OAJjCSes8+G41tL85dhqffSZToKkS8iA8PlbF3xigcnXfnoXIHokzw8mhjdvN4zGzPWE2jqkzQKiRuOMN1twNuDmH24ZSI4p7Z059idfJ3dogxRHAr41funPQVZKdooKihTbDHbzq+R5r2UdnvpJuIyDMFHi81WBhPivMvjHFJME3AyXY/uFNN7Z3KrjzvUrY8osZRa8CdU3y9x9Xe8BFkvkiGUc16B3rDqWof8XVajluf14pfZEFhDnaFkFfCyygmXxeE9rWUuUJbcFhwZpPgTpYPWLMxxHKOenEm+L9nnkfA5g0/T6G/67VLm5B66mZfeULYbN9Z0IH56GEFb6dZs6TjRUzD71uvWbo8h/V5fzm+VsVv1XVPgX1pnQbc3GLoxYW08XxsSW8f8SBOnxMeq6vvZjL/TjpX6jo+x8+T4aoYtxViqArdr6Nl3UUFJHdzszrj0u/6Q6X9FoCo9u7L8h8zmG5Qyg+2wuzK4AI+n8GVwVwBuffbA9u87w+RaT59bddcuqvnrmqHytQLjV1d40k3zK1ad8C8ikG2hOAxbt5bhVOYbq9YSleg59u+JC6XAroh8KmtPKiQrUuYGcxF9NTcjC5OH4FqrlhaOBEKlUYh0qOE5+655VxB59amTEWu1tM5DM3IgdFoZzYK1NfGLCtIu+bj0sGQCT5pAN1/a3sqLR/TmvYK3wcs5/svtSNdgBf1P88yTXn+WOPl8Pr/Clf4PHBVoF/hO4PMdQ8spEL49wwPmbGu9PuiIO05/uf17/jPl7/g7QvG7x/vgA93feGjQjmVAIOBH0R4eMdtk3gj72e0TRKPZQDu3azQZaP38qDSZ3bZqv/GAM5q5Udtw3jzvN3tXkg2swTccCv/RnfvLsP6tj+r1y4V0qi1w61savWO7myJ/rO86mXFLwG83qjXr5JWLbJ/TRX8RWj6+xe2avxZ+kbGdwX/SvF8vVXQAaytzAnbXgsyqCX6U9yJrpt+r+A2YcYMH78TkXdVqpm0Q/6q/BZq9/PlcrkJh9o9591tO/SZxALd5EG6yZHEan3uBUZpatTqDTVZjfn0zhBLaFEMkuJgpPI8gUU5VJv0rDCoNhe2BQXP2OsVGt4EVSoV3HBtFOSmoK2lgPjUBHF8dnVVIZgWWyMOJpTSoImw1dd3RRwneOT8zRR55OTE7YFFOGbWrQTcMuEVJ7wGUOKshE3s4kwy2pRRTSzXV+7C1fX0sLxynQLs3if5kENnhq51TNefeIgAOypvOJPIzNgs70iscgYlg7/CwJ61saQPyXu7VsDd+dhdOAThaMu/9u8mPBXhpStzbIpFu9m39fzaUKdA65yLKvKHu9ET6Fm7bJGeyeefvW34Us40BLTY2QK9SmzXpK2MbOE9IMbGH4aPgzKIQ35qdJ1uq3c8pf0U6fd3GuBYDqD3hpMJnRU6Wxu9DXSFvMfOUTsrWDWFD2faIEwO9nOXYkbwnjvYJddW8tkdnLknCS5NuTPnX4yIry863fwYZnqA+3aHlJt2Qzt63uHjBwK7es9wCYzaBTJgFnxL1By/nB7aWq1tpkhMynCKiiUOG7Br/bWBDo1j6XhG0i6DddokqucnM8Y4BR9hMjcfSjcLdn3JW3I/X5QxTAzpPTDeLcRkbgR6W6+afNokrp2X3Y3X/ahntIHmBs01dJn/dt5ri9RF+GwNfTH/SpltrhVd/pM62lw3I5H/tbZ1eXBtDt6IwGJR3c+95/mX2tVypTQPNTcEenZyHg60PIrOu1At33a4jPvhI1UgAyAmUG1/5QRRoJ9ka9V5mbZX5QpGNUtqKVmGURv/qoTnc5UFkx4uI4C7MjoQeeXCyQ5TkpyrZguO606fXta+Pg8AEGtynJSe7bX68VQafbhQiycu2Fv1SDwoyUG/SnKI+QQTDqk3ISiN5ZfuWqiccGhb2ipxhAedk1W3eUPTb8Wtjd2ahSCLsMncNSjvEiObfnPtQQW4u7O2BhWw7Rc3wD7vDNR7j+ErfDFwuC+keMNaJa8djqyjPjUof3LP/pse8iEK03jjF7IeqnkMHityCMtTwxWu8MRwVaBf4TuCzIW/hAnqa4GHzFhXOn8xkAUO+v7xN5z5Fj/c/IBfQPjtwxnO/DHKxvx7KXI61wv4JO8oTc4Bbm/hhW8bAqhZN5rsRft7Gu+MrtzXtGfIaWfdqD6gn++lf4HmCWAzj0UWX+oQeky8jpD/gU30eYEmf7M4O1msQAUfLO6ldQhyu2+uKcHvTHHOfIfW4cWNO86IyhMZg0HpImGz+0VDlWZCOYrfU11uTeGYhzkJG+l4mFttrs1qhEUQA4Dv7nC6eQa10tZ0RRTR3tCiAHgmpTADH5lQmUxRqpYVpHRliPLQW+QDpuA0xPPmGMYLnQMBR4tG13hjdVeystZblDNdueaV6J193jI1S3ROZQRenJl3hgOCgA3erjK9aTo3d/Q6+x235/961/k2jvNaMLo7R4pTS2vM9lpSEn3wbjOTBW1Q/FtlKeZvGDH0sAdLJzALclOGdZfwils8YKMEk/gO50xmGr7kuXavbcf6zvPfyeZgvFYki3VSDDsCGZ9Vt/NNMsSxtqzueBLbp2GnYJ45evLKXYkdUZ9gxEkOpd2gcyy0O1pdvLQEC/UCQMRy/oltbE1iS/tm5bl+ni2yKngwZc4jzi8ICcZ5DRdXfO05xLKnL5PgCX9dJCCokmKjL037mdZNj4H4OCvX9TQl9yeDKc1mc88Cn+VA9kx69fkBa5XPAbtWz9NE/Wcr+X2ynuaT2+wemeauvWrrTwm8eA6BG3Wz9dNs3fhIcEQBcZhml3SAT9AQub0fqz8uM5nxgj6RsqwvV76CelpZ07hojBM4zaP2EKaXApwION2ATgXldALdEE4/3qA8I+cmOOFMDOZnYH4nyycWS+Y2p52poKB0UUVp1wZRPdn8TyTXZJFT8DPjJAeLh64l31lcm9d6RqUzuLBcm6UT4qkpns/nSKawFvaVavQrdAJTbfeOG520Apo20TxDITmMQKByQjm1OAWM6jtYAbgU4OTREKt5bUrWNXQvk3By62f5Q4EeO1ZD8a5zIxCXZvEvcy4xgYqspar43Tlza9NhvuO+rvXr2+nw8/SYDaYUj8RSX5XlTCbromHNJLlO55/PyZSv8MVA3kAM3zfWu0+9jlpt4vOmBOhz+DBdMAYG/YDl2RWu8CXCVYF+he8Ytnahq4XQU89uV7jCPWHLjTuAf759jf98cYtSCnBiZ24mG4gg29eNEmCKY3JjRAXyKoNVK1cPU8HPhjRoJr+dffeK7LsK4DXw7FZ3wc3qXHVVRfDWXbK3Pp+ho5borxYruz8KTfSOc3VHv2V97uHfi3zVUvtnyX9V/mPDn6S+2XJcQe88/6M0dN6PruqzykdB6a6W4z9S94Dg78W7BF7zJ7JEXwiaZkFDX/cfJjsMjV9cnVmVIM2FOVMVjw7NMjIq0M8AfwTzHQh37fQ8VHle5DuFvLvmIwonOmY9fsA2vyzG6q28cKYJQRRIioMqUmWMeuUmQ6zPG28iJ5hmrYfkPViGotensN4bTEE45F1J0mqzGyBVpnQCTZx6C19U0ZIUzNRxUSWUslaCKIWcEt0o1On6yncwr0TyQjdwvwd9Ad2R+h7TXYVNM3X5ad/SIEJULizyVD49GycWJMydNWudj9DnpSAEs4hgu0uWoitJaR978fkM81D6JvVmV0cyPPWNelxLlwQV03myVz9+mfS55QXw1PGegSq5adkqFr5xQ7ZDVtveuTLN3/z7RBjM9j+HJlDy9fHh4w8ZgE15ToFuevbEi/k9rp3HyB9nBbrEYlcnK5Mlf3bNSiggWS4x7NYKOJaMnr7jAOiN72S1YNTuLqgntnw6fw19OtSJHNk1lQb4saph5lIo1TWXHb8fhVf7UR4BtnotJZwJB3ylL8DzvkTHXbpohHN6d6+ety3zS7zAeMPG+nvGUwD0Qz9TZjhPs4cT+7AVPlvlbJXr8Uy8b6uY2Tea/HpGMGOIoc0vGAhGihmd7gmdiXR4TsCb2p9nOLxJaV6k7+IObHsewDiEKKpke02FB3l+ip02O2IZGCbOvT46ye9ot3xMGCf7B8KsjfNkn3lDX1/5/bZf3bS2bOnY9RdLk+mtfEQVMqemQKebkyjPb3C6KU2B/gP15mNXrs7bzADfiSMtbuu4WsFMqCjNE5KzmgRzux5K5j2iglJ0va3zsO6v5vMco6KeK/jMoNruEOd6Bs56oBPN5TkAQEy/vWcRzQgU+DGV5uq8Vc+XnRufYFbfKOOynaRNTieUUkCnVs+Kvh5pcVrZbG3k2l0V2cSKndBL2qw2vFgXYbJnaRbrjCo0LySW/6eKghuwXKxF9dyU6Fw7Hgy3Llf8QsP3sK0pyAihDSYtmw0fitDuWQHe3EEPKwOQUwDztR65/Dnz+NzXhwyOzFtfE3wr9diA3bXCIoKtNdz3sMDH05EtrfnXwGHNQ0U5JeywkclbfXa743MSnr9/ijn1Cle4B1wV6Ff4zuEpZ6srXOEJQLt87voffsXbmxs8f/YT8OMJeHfuAiAVZHsLcw/BtaS7ZNbCF8KiLHC6D+Th6y8kVTArXXZ1AuanLb9g+BpY1YVywcN5+b38HrykKOQjNLf7n7y5vSSVYlAIn22o5Y+kr5ILkzgMcXvHZ/nVvZoIj9SVHVcQKlDPIL4DoBbo+ncGcCNjQK3X5zuWKF/IgrVZWJLcOOHBbYrVh36TpnrPjM12V1TE3IU2ymOICUQMqmeAT8bPCBB31yyCMaGhPxwgv0XCq+DScHKKLWsDp9HyKIdqc2xyIlH+l25NHbpH7AtmMC1XWzDYuednawdTbZMXArWfQYnuB5BvQwCv6IgS/Qj0iWS5mpp+YFfp8fv0NvQtucyQhwRMlLCtrWWcBXzgOrzOXa1Af6ggHjCAxRkR9a88vI6eO52r98xLwjy5KjeX3OpBFu3+690kSp3mQukXyGOc4oeBZH6McUq2Vc/2eVfWYlm2cT+7BtTHYSAp+ZWXuHendA7xGJ3nyM85IOXSMOSuc7bsPOfpWXIgS+svWn3CCXrnIJk7e03g/4+PmQKxX49coLcy+TjMKV3Ce/iwDNgMXoYP3y/p53m8bZW5iJf77R4cjHZxQt8dA7+cDJB8dUaPvA3TKAtGfgiOEmMv/618Zt98v7w/b1xMYDvVurC8x1xXb8HbCwuZ1XN5WGuS1idLNMn8hZCUVxtD9nK4rD0eUuRFaf0+5kVfZz1gKt+BtH5fzg993a8r5oCXLk9nnVasu8ftklj+FjQF+s2NKNALys0N6KaAC6GiH3FlnwGR6UYZtwC9azHkEC5XMWhGu6Pb+KLbjKhy3ZaC6HkWuTLKPM44JRHzCUwELm0NR1RR+AScZE6uAFNz8W6e7zKEPKlZi1Ozvq+400k/7R0yEQmAuLzXQwLUaUYnAp2at5t2BVi8ksa7ZTYcGYAqtaktVgoAKnrAWQ4xn0qrX5V9S0WXx/hDE1o9bjIZPtWWjkg8psE6eb82S58KwlVHK8gHbQLM9kVwB59F/qW0LVLmxQz4czDsK3w1MBwQfho0HgUy+xEwec1sbG5skafheQh/zfS6wjcHVwX6Fb4zmAkJZjuyC4QJ3zw8dNa60vCLBtfVf3/zT7x49jf8dPMT3v10Bt5+6AshtcjTyBoG2fAyiycu2SAS6QVboqdw7x4GqTyPXW4lw10BoW2GzgzgOfCBAZzbqWJC39idUpofZPP4QRD4SQp6xzHei4SA3oX+xxSuludqobHnwn0P1FJbLdEVraN3giveRy3iV5bnGY5ami9hkV4t7TO+v8hhiN9nvBvx7nOins/nvAudZi+LXUdQlWgHLW48sIUxmiUFVW4KFKq9L7Tj+q3fV3HXzmcQzgA+AnQGqxt3FcSobz0TKHTJHDnBkgqasj6JvKtwzYfQJE7y7dbXVxTheX9V3LgvUEGWIw9J3ex8jrrFJrlGoiHMzhqBWO8frHG8iBXoSWhmqnrmfs2eVJbhBSfc+dTEYkmo1lubTjjRCXrTX/WHICbCYhb6hKKUluj09C1mN6JPBexbAqaA9GUwpI112Vsz5Nixsv3dVOihHLbhMeSjfS7jaM+dhr2vRqEe6Xxm4w6WUT8Lxq3PlYLuBUDdzjsBc8DBdUBR0ut9mBSoIuX6exj14Nfmga91Q7Jd8UCxLOUvW/kwh1Qx33mqIZ4okmeuT3NZY8Y8kDNH8udIlNYzSrVxHRXnBAQvE9IyQprcB1i+yrMcXCJUMLejSUXrKVbpyoKq0MGL/tV+voDsyonOhttDldSdZ3bVuPsPp1QnDbcDAN6sfSBhCuyniSRtzFn7kQne02EIP9zS7JJgm0/cJ070SbAHNxfEXUHu+UfwfWzgySPFZ8ye03iT+4N7vA3ekE//REa8xi/ksxUvcxc3By/oPLbkqi0yJ3lgH3DjMGSvA3pV3aN9dZYuuPDRfA7Ww0jp004KepOCdR/zXH61D+R9nVpq6vuAFs2DF5wirhcnfeY+Q47T7zTvRRoA2Vp+E2zfdwmimee6fHQfx2OUPQgY+OVKCJi8u4REZF4KWPcFul/RtXGYYP07wfY2tsahftdSIXHdfgJ+OIFOJ+Ckv4Qzardw1PID3uaIHZVOfWgSgMKotW0g+v5CcfBrAL2vu1dddwnVVgiOdwo+trIoDOJTy1m9GHFFxRm4O7c7xv3aQidK5n6fN1FbX55OoCJ51TupqijIIQcRIFbe3NtM3dCTuqGXfQxRAZXi1rhaydZGqnDXdu20kVWMXKWOUwVRbYeYoWOU0Tc7bWWsV06ZAYMvrhDoxEAtQDnL+ghtbc0VxSv2C4VbqVAdTgH8mi3x5OXw851VriU8uz1l5ansan3lkNsDTPlTDt/hCw9donw2eIq1z2eGvSqu+sRsbxPe81r7SwFdv7h1V+Dt7pmbDEX3e2FpkrIclnezcLj3FL5cUl3hCp8Jrgr0K3xnsNqwXiJ0+R7hIdPUlbZfLEya5r/fvsFfnr/A+XTGT89u8PuHuy5o8e6eyWVAJJsk1W5NVjt+ITST5+lONyff6joTGYPlxUCX9KSy5RT1EG54HIC1VHiN52OBLlzPexG/JriAx1BeVS8IfIFM8VFhEEr531lERpc8qFDAueE1q4DQxSeWAAAgAElEQVQuXGEWK/V6B5MsMGSzL3f1cVOgN+vzCi6iPKcbmKBhcAU4Q5dG9KmNdw5toJurArWOvIXeAz3ZJ7EXVKnYS39PXY9DNQh4qOo9hGx0YVJrdcBLWvT2iKICKgCm1WLGiZ3KQORa/z9779omx46jB75gZN0k9fT0jP2svevx//9d9npndh939/S0pJKqMoj9QAAEQTIysqp0OUeBc0oZweAFvIEgQIAmDILcQ+7wmwPVZhHrj4QFC2rPQgVwct+1OrlUUrSCsJL0uwnGPE0kgNTlYrFwV2W/9kNrhb6DSG0sz+XTxQh7Y8/jeSFC4xpdbL3du8XT++Gb8lz/S2hHIVjDpUcYjdCCwaBMbn0I655k7cRjNn3ZMtRAp5rRNdQCCPACQlGqm1jexurq8Ntq2Q1aqF4tXL29AK9RBQySj7wBjOQcQ87aCUWGAkfSfzw+Qa4kwpmZO3cfGg1JfZEj5bnmUkfLrI1b5XfNIRutQCY558BWdk1RaWX17pCQCqUDUGW0Kkg2VTkHy0sb4zXwDMYdl7NT7ReXZlKv5qPUhbv2rq1GMh7Ytwm3Uc0jrywzzTmkS+A6/+Mw/FK6rTgB0d24jIAGcS7RXPc9rr3N4Z9AB7qCLtF1dvmM585w8jTRdGW8xl393k6+AA0eDbV1H0cE4yeB3bzn5RVzmGSL3l8NL8ChweUVSWV80+hKDx93phR7TfWvxb1Z8EcfA0RX91fBRhmfGXj30iskLuQ9fdcwEuX54siU8EeJKp1JNXpVlAPAArVApwRxFY6iLDbrcypK81NxYY5lQU6l8fPKyGtQmpKu4G7hAYH5PYCvjvZlgIoSOlNqSZ9rFor9LK7gM2AHhqubYs1Ayy8rpCquSRHMGZQJTGLN7A/tycbD7mvPwv9TaQcsJyl3McV4ogS9px0gdTwmKEmY8ny6BIBLe+oBTpQr2W0baHsXuSPe2m2t63wCsDAolcPblCpPg0z15hhK4sVdW4Aqq2G8gOdFyx3yeT0DawZlrsuRypfsMCVX/se76BmtA4Rex958dHSUpazsBCv2/hJi4X8DXORl4lp8wO8KRv2vc+KHKtEdT9WFj3YWQqeUjkS6uKO4xhHSBkoHHPAzwaFAP+DXAhXENQFb8Jab1AMO+ElgS/Dw9BfQwzv8abnF080KPMmpZxOSkmzyUO4TN6Byx5e6MlYXw57nUhdZzWlM291d3HM0cClOvpcyUS3lz1w0aacFdaf3WHFZJA1J2JcNzs23oVoEPMn7H+X7f8j7t7JEV7C70S+k++yFqleAt7gn7Ld4/ydJ95ed8f8oQqG/hR2vt7j/xP33GXz8mTehXggsB0869+3uQAqjfNeDKrqW8RlmmQ1JkrMIfYoCvSi6z5JOpCxJ8vLaY8Erum3n5l1wN2vK3KZ3su4PILDg2lgPaBnkEphgBNB7wKuYpwhMCAy9joEApFwEOl/Pz8hEuF0Wa9ZnVT9xxspcUpjVB4M5m3v3BLX0hHzzvRPHrtC1gTltVZ6L7AtsTjsIwnBTGeNn8JABz7Yh1T6nxjK+Ba9EV0EZ4wP23Rtsd6FvrAf7OSCVVA1izvKm8MkLEKJEU3H0PJz7sXyaAxnlCxEDSGbY46cew7qkRcQJRD0ecYlii881OvQ+ezfm2bnhZx3PPrdSpifP5NLWeo8aUyulkskQh3XwhG/SVs0hGA72mKT1uEzDR7JLLyON5dbwNuVckMKWLwOIZ1uiy1ivkCEULxe+++MDtf9Ik0u7DRU4axUWsVIqaiyzNb2NE/dn9547gZMK6nOTqjJRiwrFhTaUsBLryZT0GyfrtNFcuzfWdM1DDNfW8hcYFGw72iRy+qI8HxGvy+PpJXefb9qF6vwhcT00Ozy2kful7809tddIERFxJzCP+JwdeT7F/iujv6EhRmO38lbC6BXpLTOgXjcaXmDaTmHC+vJG3jW6xSGmp/b1xXCBn/TFToeA+6DWnVv4NfSweenjz96V3hmDNqTA83wufgzt7Pct7zD2KNYk0/r7fvbjp45PO7AzOSjVjmXHVL26798KHCKf9f1a+hK5rUvc15X5x7W2Wf9a2tO8f27HJ6vy2SvGVXluCnGS/T5Vvh4A0kncpxc+mSVeUZRTtUBPzp17KvwUU8aaqVn76uF9+WOvuQeae8Gxoipfk+MffP3EM1Cj1VHerF6x0jBqA56q/Jvq90Ry73jx/uWNzxPIFE+cc3FlIxboWJYiryBGwk25PzyJAj3V44DrysBa8tFroArmuqq41YVrFZpzVrIu0EINr8usd6JD7jtmgLK42yl0n8FiZJ5KfM6SP9VmIQCc3ajW9MUzV1HCl/1paecMkr1e4xp6EfnN+Vwr5PvR09MRWUQMYxlvC8DnStcWAlZxL98nupCnAgHdOJvQ6Sib3q1E/2mI4O8HRmvXFlyyPK8B/ftP330TBAPZK6TS1edSvVw82ytc2RZ+evz0zXjA7woOBfoBvyi8ZHNzwAG/cfiMqsRVCDw7APzb4yf814cPOC0M3DDwLJKKuMf2kHQjG7gnLwzZEniQizAVWA0y6KZxsDp3m0nbTDkhOfAAU6LjUd5nQpwN/PfAtxL4RPnHt8j/R0KUJ70UVJ7h5VJv0h+vaSAnkTEX1OGP9e7z3I5LZgCiQNfoGWaFXhXOq9yZnQG+KcIPVmW8Cp5kYtjd2ir8QjsPG03uYI5LRHPb7uQH0e0l2VxnEZSQTf96B3ERbpNpW5VtdUITxY9yNfemoMw14aGaaajgRvAwxZIopfVcgLaJK7K+uIFJFhtqW+5viNgDJW21V1c7Ty2HJMzc4Lt0NeS6Qb1Hib4P/JjYn9Hl2LMYbfjlfPQKhIGKzQ8VEQTQZA3wbV6UzS5e1/w8TNstceZBgkXonAapq0h0Y4Ech3fjFthK15f7OiEP5wkJv8IN7lbxUV4TZ4C2aLtMxnbsoXV0Qig3iUruvjNN0VnyzHqQgb3ifFzTcgepJq9qyNysAb6sWqcG86v6p9rA1zWmj1NKWbDImMjgej7SpfeK3vZQjPZEzHwD2dmnaZIRbd4BFn9jBE4PrOzOvMJwDbmcrP04aksfRfAdos2xcyZQvVXU98tI0oBu/O7ge/DB14y531KDGyngnng1pysnleL4PF6fh2W+JdjeUf8GBbyDU6K/BEb08lsMvr0bxxiH6vohinNShW8CTJGuSnTnwj2lhERLG29JpkBnVZoTwAnNGfyi2E5orsoRBTn7PYuvG78H6CvqRiQc+AVgJdSNSt3nWJZuz+SLcUyHvwqGvdcYOZRYzg0UfCuWhERF4ZyzKJdT7tovLakcPkhkbUgpNUqnFQxaM0DeYw3b7qruK8TVMtTTjNtj2AFgaQMwMqfqUQbs7j7PYDusp1cSFR6pWKBLG1ozZCCvYE7FixjDDjHbXlX3e0A5LEAANecB2ZTsFSjQkCtBrfKZnet2+Wd4iO2AA14BP/O63VpP7E8CocgXWNSrYcRKT55/5mY94PcHhwL9gF8LfmkK+yMrv7fs7yGhOGATGMDTE/gu45QS/vn2Hf5MT8CT2kURWismqvcoL7qz/Co73zs0fRotFhohpgoYZTNkGxhESXZNchEieyXvz9kZ0zwC9ADgUbJ/rIKeeAe6vn8V/KJb0jttFwmMhxXe2hJdwSzStxolxunVJLK1rp/VTeDHfZtIIirW4jcSoJbney3R1bL8j+IP+T/kXev3zw/APYA/P45S1zvPQWY1Ue9npaooW2Sz7N8zF0u5GUxPIm+l0X9kTHdSwIEQBxngpTxnwKzO6QzQSYQ3/qqEM4olZE2OLP0oVtbFhfpahAGKR5VKVbxSUNx104dcfK4CJmubgtMHfaOajqQNyQsg2RUjc5yg5IUcClJW5mLBQQympVjYq+CehS5Z03BtJ3Mrpn8ZYHFLKH1E5lZRLbq5yrIbS0UyXOHw1Cr0KsEQV9rsNNkY3gJgLPjKz9KaKhzixouh9aF7Nkfu9Z8Wh6akAQJBJuU/lKbYtz7HkT0vpCuoj0Op0iQf2/rGCeiI6lLhyBzrOkWoAjGul6jXe6Klxcm1sVregER2WsKirWXpFy7Gv0kVlDruyz+NoaE7bNZMn6wW84qPq0dTeTc3uhbXdTh4sPBxzLd2CPegrkWpj7NnJDRjkeFcgtYYu+4fHrENoe+hfU8hGABxbmTedWy4iByKEcW2jT5mwZ9BLPd5MkRovBShLoollQ66waitY06L1+VWrdYtitLwFrGT4uqmsD4mGSBrZ5rvY3lX9NQg0ZB7ZgALbpDMiY/SS7VAb7og1zWFgeKCVQ8rZV8HKasjPzXgI7h5nwM3P7vjd78RKPy+FuLg2ii6waLO8DbRjLa7/mQE+uEHm3q50e/+AAjDPNw0+UJ4EaD4POC6GKlFfxhPffsxHEGs+UIPAFIbb8pzDWgeqVVnO6cnL312I7im+0cW9JHu+mbxtLzzhLC9gvYs/FY76eMLxvI0fyp7lwf33qzZoazN6ebSBs8y27hUXqrJaiP7Nr8JjjuBzZJ5koff+zUW3NcU5OlQO8+jt5Uxkj6PQb5Mk+8OPutYlHgkF3iQWojL75JcWAlnkLllJ+G/yv3byVWtWDyTWaIXa+eCWnNJiP1bMBClZ+SRrH7uz+hCTzNqWj+pqLad0qFE5a7uTQ8Jlflg5ca54pzEsxSh0Cpy7VL2nnpw6VTxk7vfsSyglEualABIeyvqyR2i1obw23bv8ShOs2ZKMTiTuGav44vkDnOiXPifnIGc5GC2xMtFac6Zqjt3ZbfBhTeWPRqLW3xeudyXzlS+qwc1huxH3WEN4zWiAn1UKWy8O3pja1gqrtp1HCQC1nVjDdqCDbowXbu3wt4O+pUl0JYXFb9j/XlR/q/gv17djBttcmkdG/F73wXeotDZYs0dWbUdqE0nRwuuXU+7hzG8FUd+wAGvhUOBfsAvBjPy+3snyz9kNRcYuXXd2NQd8G1BrdAjJx1kXv/297/h//zjP+HmdMJ/AvC/n87oNqEmwOCalgHgFqBnAF8A3JfNCbsI1GYTZYBNXkMByUwq8jAJd5BRXI9liCv3B1EUiCW6z5reybNqugdjtEFl5xieof9d5mm7MW7DQ2N7Id8muM3/SNc+ra+P4MtOk6aU8PfL2I28tzB/TyVO9ICg8ZjqwQ+1+vQHPGIzjcaqBkQXnBZR20VpYKd2a39tc1827sXiUdzVEYHoLEqcOwDPEvcs8RHyQBFAUX1uKsDV0tlw8JbllMI7YOYgFkaIh2I+EKAu1ksTVMWW3YOHIhZR94sdGXJD0azUWQ4AqFCOGXmpSkmihMVt3rJraxYLkCLP0k1ernfdufdqtS8DwPbCpJWwNy9esjYCMFc0q6Cpxu2/i+pVD3gILqYcUGGP3YVewqNivbhxH2yG9wjSJ/O1dEv4oJZElrD8mrHjUNDFXfzm1QlrR3aN5qihqR+ZHgYqV1UXl04OqigRZXQ+ApQeSHozCKfabBysptlOWYhQjxKwyhUFHvdI4gRnQo1nFjyuj4qcQjo3ufYinV4UcvNtIuOal95Ap5n6g8W4abD+vtU9K4Lipu1JDvdR/JJvm3Nuvrry1fofsM7SAxTeIsKsv9rEfVdE0wmJk+QTGzLFRTsh21kkUstxJrHH0rFQVM1sYVoppS25qS3bn9AgP+eBZu7660AFq9qGTROGddWomYn44XrGMNErCBLgrqFQpUDblkaatT0I4LUK9O18yqVR49aW5j7kaTIefqeZgsM8RVTXt/sQ2snXAagnM0f5jF+bOTusq3ehHuJ3+ejAQNOebTQ3tuodR6jujUknsIRrflqvVeZWJazNGmllBt7L6EygU4y+SkrIu85tMnQfFkezYntOBtBknbsKjLF4ZT4dhPZ7dfJX5jfKvMnONWZs102rtle0nV1N4lCYFDEOHK9F+8oGpne2+6YmiDKdnDIaUC9CLyta1vUOlL6F9y7OhZL186Ojmc33BCzydyouxvl0Ap9O5Zvsp0hoYWERy/qUT4TzCc2Cobd123oqw4Vtlao11wOVBHdYUqmPJ1tKCzgj84LMnytvYW7d5SCArTdZeG7R5BJCc51Q/JQLj6jKcuEfuGqGK/1yNDSX05W1Np5UplLf4rZdeAfhYZkWMD1DXcivokAuVRT+TzyPGdkEYOytknVfILfcojAw4MRYKSOT4zFBSLyAsEh1MsC3go+7H5yVzCtNF5f05iFNxkUmUGZgZfCawSuQzwReT7bnYTCes3A1cii8OUxo+XF97vgl6Ryr6GidpTIecgatOj4IWLlV/sOnvwaa3cLgO4fnhnAO8nhh+Z636op9q3XhCohVfVPY79lqBB2P237cLHdHpLY7L3lReRG8eEHFIh1TDy4J8SDUA1O6bspAYpZrDlYe9+sMHT80d46HvVkfcMC3hkOBfsAvBtduKH4AY/G7hBFTeMBPAxPZyqcvn/H+/l1RWN2korOzY8WyEVQFgnf9vEp2CwD+Aqz36DYSDCfQ1GcOzJTb0MC9606tg0cUE+UY3wnt/EYyZyA/Aqf35VsCgAfg9EWSy+9dqjgRgBuqmzmCOyMi+epd6GqJrWioVYKi8y5WIghFPk/Ywz9Jur9eYB/fC6P7cYeQqamgvKuS+oNaom8J4eTbJ66W9gp/3sfmmuBbLc7/MSi4/iL98Z8eylmJL1+ATwz+R9k8/7taTgku/yD5fQQaJdFzwOdZfm9EiT6STU2roGO0qw2mG+LOWimhWIWRCDZUQJZAWFEsv4qgh5hQ7jMnQVwV6T1O9V/9fjupCHXTs2kEQiussDARakBctpuWrs5bFTL1e8bSZ2Zt2yjSJU20MNF5z0Vwk+lcVPUEJOlfYsITZ5eszNWVucilgOJK0HCvFuc2MQkipMuiB2OMZKVeAFXkTfVu960tPGMwBCJkGH7apmrlrAo7aw6gbfetvE3BUPkec+N+EcJhOE9mKQZqERvrvc3JMcIiGqyWNk6UVYXykofV3ykSM5CSSQGdKJakWevBikbIL2uEDvEiyIQpsNkOQHARKLAecNEZl1qdgVtuDHXoPGe065vnR9W7gmQkh1UoJWk6MgTNYtm1Z62vKNF9+wFo7jhuusm98KAiPuZG/46Mtbp3jWs4a1pXJrUjpLRQfys7hTyqu3HtrkiPrfDyjxeIhzzN+Y7EXfx8Q7VWXwA8eSsMvW7BotY5XQTQyvd4mi13iptXDN8fte42duOyvDH/bYYM6HILRVHAqKyOitVWXkEgZM5CS2tLaTsT1/tiI12/BFPF1E7o0lcNvkNjVkbb1vsKvBRhRKsulV3HVt+5GzTV07AumnZkRYAoyxcOZW6gF6017Vd5Bs+3eSLQcAF1YFlIM7L7OgFjouLoZb+cXJgMI5g1bzN+wvvmGGjr2SkslEDFPLpxPEBsVu6wK3uKuZl2E9jOFZNZW8v6qH3U5CMVbIghJvzBfL2xML8+XEJ4q59fQ2q4e6j5tg8lznv3/lk/X0IgtEG3Z4wI0Xz8buU7+vxO+O/PIbrydUmV6CfQzQ34tEAu+kZZDxKIkwzvokjPC8TBFkM9QekBnLpWl7UkVQ6pbWty3IL/SCwuyMmsvTMDaa0Hv5h8KST+VdSdOWQ9qzyjv8bcPxDrM7s/H8ctfHZ60B9a9ryG9pt8Uwt9SmAkUWZTrSqjKqmVc8g+V8lLcKy8qJYpAVYHl/GqzcrWzyV/aQwiMOuhgxXMSrPZ9R8XZXzOlWZlofdZys5ifX5GcV1/lrL1cJtZ8gNYV2vv6vtGLrrxDIqvU2VaQt+MaA/Jfeos7dWWv/tyko1lC9ZC1xCcnWv9JkJx0YJrlzcjgNtFx6hxuszYjV107BvAa5rkEnzzSr2uPyvFbXbblRY2MhnhGZmr3Gxv8RfmygEH/OxwKNAPOOCAAw5oQfj2v339gj/cv8MpnfCfbu/xv8+fUQXqnrn3AiISo5ZbAE8ixRZLdM81zYRGHsj+CWHxRTNRC/SdAhVlCvVu6QwUF+6TMps9st+EojbHYB89DMcgfC+8dt+zG1wf/6jNzAj80NNDAiMwwYXTfmjYqP0I4qrvR3Dzk82yCdl0UxPTjPLxz7M4owE5eI1z0AuSGuW5hlIXVRWGDze3ABobDKwi0Ho+n1ul94WNJhGD5M7AomAVgYp80ypWoZMI0LTeTohbxFQFiu1Jya/e4SfKUTdumimsbUS+BaKFv8iHJOwS8133qJXeVlIibiCprUebhIMVujbEuF33K9E98XRZWtbyEKJt53c9cZmnkgMRapnN20PJdGsWMeZcrXGHmelw8kJKYllSXBu5gwtsCm/9HuboaN2LSA8qpWND07a5ZhvlNeUeOvey/hnlcs13noRfA+T+fG6lm9jiwL37sDo2WmRGN8q0afsFRqiIvEhPMSODwmjz/zASTrhz3x9RvGTEAzrMDKZVlMc9guYI199XjtAGkk9Tl0buyig3rarc7Iws7tnrDSWON2zG9T6e7GOMN03GF75H8G1/CRHan28Xb5bw2vAY5wq+9i3AaFldA+29iceAePNoi1eGINBUBtrrI0L8HwnXoHBN3O/NTr4F8dxZznRt/a51dnuxn0kwv7XHfUfFwnu4uZxl9p2Btiqgn4vCURXTjVd4Lh6w2JTUcs3CWXNIsgUvMRbJi6h88f661NmAWnkXaqg0puCXGBC/6H5hFxr2AYRHkLc+5yRON8TSXX9NMICm7uohaAyBPleXO84IvWkc5Qbdmu+zqm7sLczzk5Jj5WXi+Gi9BkWrWmZVC3cMvKPR1KZ33pH0qhrjNyikbwsvf+J5h1dRrp+5WH2b8o37/eXwMN2Vk3oWnQjmul0hpY1yD3gVHE36GwFuqVm7ibKg9lDwAQf8WnAo0A844Cr4lReKn0DAccC3Az+0XVd/+vKId/cPuD3d4A83J/z9+dwmsI1d3TCCEjg7114LA3gUS3TIXeksLn98OslQ/bD6vV2DVxQ6jDb5Pg73wYRiibyg4JYBpAfg6XMvq7wVHBdx867p9c7zJ9mcfuW2DDUOvpGwuOKqjm0mG1Vrg2iJfukucYWRm/OLoHVwyp2PjSgDc1rwGvo4yFPb59+D0OL8tf2uFv9Rmqd3qn9wY8w8BwzKi5bp10A3Rvd8d23srElbrw6oilxxYV4OpAB1YEXpy5N7Bqo1Arfl67jz/p0brxBoFQ6m2CsChg/hjmW7z8+UNMk+P9zcthst7RJTZFVaYPkI3KcTvoobewDFApgdnUAGZwKL+QSbVV1pN63iMxgnp5AWNVbTflVk6CyZ9YtmFDaU1RkiWxuZOsGNMzaJ89Yc0sh6T63GTZ2wzeek1ZqLOz1cKnsWLeTu55Qho0JGsuaamh1DhXHblIVt3Hv82C0dmrJ2zFCmCN/fNgBrOu0ebWf5puOEM+RuyDCJzHuKjBxpj8aK2o+PDLtPu28UHdva5y328KmYy32Y0cLWr80AitUQoMJfG88Sv3WHrwG+5LjeQg4HXM8TaptU1/M8/L6ZxyhAJTpuHkQHsJbWW9pqU8VhzTVLcGs7RF5JHaxo2+LqN3L/yuBAQhL36MFlojcn69ojeMOQOEzO7bmrH7cRS6u4/h5Z8pfvjqoxC0YZzOfyPbORefZ3nDuBf6fk3+prHijP3wR8Gcs8WpfmJeN7hP8aPscF+FJ+vCPeJD+jCzT8XKIE2tEMLp1MusZXgtFeM8Fl7aXk6L/PxtEjzx+wuzt9T72ct5oC2rannkSNmswfBABqu6hCn0Mmk8NSm89oixiCncBx/bKV36Xwvd9nCa524evbyfE3br0ZFzdb4Wf5b0WJcfo1am9WLwabV6Oy/TibIPIgYZ/DuNxCesQyzAPmY2JWxKjvzBK9Ti4CzNpb7znnRMhJjYyVV+FydI9Ij7da4YXDSebcR40byb7XeHXNSugOpyq/hcJXESXHX8lBWABmEd/wCFJtWa8YSfKRSRk8b1U38J6mOmbBu5aierGKGMSj5uJcqMf572ixfVcPW80aToIa1TwK8k33lTxozBfYAzU/TTgDmdldjyPcCjdZOm8mvp3Y3WvO4hqdgXMWF+5cFNhZ3Odrusyort9dXUy5rTSb2ziRH5tBchVtXUO1lXoTnuSt+JpvwR99Y4jr8RVVeK0not8m/Njxxo6WNntufY/Zv6BfDzjg9wCHAv2AAw444IAAnwB+DxDhr1+/4P72Dikl3N3c4e9g4Nkpx03zEYQjKQF0C/CTC9Y70WtyS9cwYH4zJ7u2TYEUZNP4KBnvvAsdX+Qu9IeSlh+Lcl89ZPtNGah8p4fi9t2heRG3KJPwcpLR808HUfA1EoS9BvkNgdHok7aV3IUtcpJ673kELy34YX7BLkAn3FW37fJNFVYqOFFN3HCTz3XuYPDbCUx58OrwaQSALPecKy65irkcDaBGkD4QqjNwdhYuD4sTpvsDOeJOkSAKInJqGa5l36QFWRSt+tsox2UzfmbgZJIfbs4WeOSsJ4hA8Ap513ZO0AURienw6m+N1gT75glp3bUfnSyPKKoF56UUK/Sugm8PzRyDjYURpegThRjSz8zsXISPc7KlZ6MkO5cSUzK0oZ0gk8oVmW7OlG/lSgXOBCRuXahDXFVKIZx07nrc2ZXJ0PtBrfpeuWDvqwh/i5Kc3DfDLpeDJUmV5E0TeJoyX4TiyBi38vhLW84PBJ3mVfTTCrMDHbA5NSCd7ZpcBbLq3rDSn7mAtXdFTdKHKuwuigM9aFM8X/T0isF4VEWhhQGtYL/k/U6ozmfLp14TYK1SB44Lh8VXXJXKZrD9lYNKBQ/1Lm/XZpvyvqJKPmALegLc5DUNvJi1a59r+KsXkcrX0FefVmnKaGC+VXl7wS06ur5be9bx0tMdv0ZG3mKG94ifmR14iJ2peHk/xgzvbaFZn7bCGvS13uNoU9jdNaHfd8UfxPseQ2EIsr5/5guuxb8nXNtZb1x21ww0+HVrEOAOStZjyQIAACAASURBVI/SyfPV7RvjX5F+Z1S92zxRAqcEXpIpwNVjN8DIyAAl839DULfuLNbn9aCbX0aslVjfhcciF6NdtqD27Or1ikFgWpEpAfwOyF9qzlQO3PpraBR/VqKW2faMGSyKdcCPr+6KJ2p+DOVy2FHSMiNzexCpgYZNYdkWqXU8OVbS0WBLM8gztziaRTo1jdeuxbb/YuM5WfjX2ilSsLaBDu8sZWSuyvAVwJrlb5Vf/V7ysiXGlgLFxdfptXNb6pQWYD274ATwOk92wMtgd3e9YR+/wRD5cfBWvOQbpVYxzTC2EecDDvil4FCgH3DAAQccUEEZIccw/evHv+Ff/uFPuD3d4L+mBf+6/kfdpNmGClXxbIqxVDdhQLkvDU/AWlw51ytYOWzkdCf2gKJ0F2ksP0iUx4qcbqZfIjehe1Rr3kFaRaXuHEvZiyrcd5b3HN79ypvgXNpNIApPZnejvxTe0SDPsHEdWSZpo/9RJAR/eykCktc/yYD4iwg+/xqUrn8SAUS0SP8HKd/f9d4JpV24t/YeRb8Gon5qIuMclxOFAyqokPlDauFNdfxpXcwNKgMQi3y945xu5NtTLWo2WJsgJ9xT5ZHN31ZxTiI0GWVEzsRDa/bl/BVAVX6XKi+mFLxZbtqsDJW6SStTvVoHm5NHAp7tXmrCjbNQeYa2E9BI+hsr0rYFaisU5XljWRxa0pREI1eLvi5XC4A8FqW2WlbJkmv3qIUsu/jRyjZavTV4lLDOjXsYy/aodQlXonf1sqamcfWpRnLYWj8jqaPztuZtPgQmnt4pr0p4VoEeWHDRuxZDfBRZn0Ot0gqdj6xlikDXxqt8z1QapzusU8dyEcQmuW9RC5stQCvMilyHuT+hwYycqtKzK3NGk5oMq5RkPjrljtHhYtumsnvrG2seoLrW3yilMwefEVR2/8qTjPWyZJNYRcV+9kIfbr/pWQhQ9XRROgyqMW7GaIMLy1Lu6Y2rCpO5jAUYi1CWYo3OOPtLBBllnLGbZI72Vdroy5fxMm1bT+/8PHJrC9TRbIm7IkMvn8ji6tQsznNN70n1JWj6165LibTjhRLMrk+0TQhjS9EA1cwOWKSCzzNRCe+oL4fH0ZyJREgb0v9N8vTwNOkAv/5NrYPRTzM9wGXtNqBn5MdcoamtTsavqEHRZBbk0j+otKUoeLLLx+ORXXk+H+fSqWnajG5O0KxfqI9nUcM39mlGC2V4H3Unaz48SBCgGz8+fFTgTujoxaX0bb0ZKAdX32lek3aKyropWd9BRAzVWSYX+K1LZeyiP5N6UPfQ5qlXeMTvQ0W65jMYl8PCY/wX0tGJJTqBgM+6QyEsIKREQEpgAtYkZTPLZR8FWCzBWWgFkfJhWThshnp3KtcTOf8xSj4IMBftg/41a3dkZKFdGRmZZLGiDOAWLAftGTCX8ZalO5yoD2VJIIdz+eindfXkUuquVIws47q21jN5SpfdGuXrxO0zU2o+gwcHaWdLABKaA0WbvEJqyzdrfrY2Mrpoz1x5VLU25ywK9OKuHZmdAj0XK/Rc20D5o+LpZoCbhTl8NPwS+DiJyjhadV3g6ro917uf6aU8yO8e9rT35Hea3NMs38cvgBcm++3D6yvu/WAVYkwtqdVYOvejB4gDDvhF4FCgH3DAAQccUKCRfXxCUaeUwE9fHvFw/wBKCX+6f8Bfv6i1t0vHXIVuutnNdzAFn24maWCJ3gCNv+2RCRAAeoQp22dxlOnL98ApoSjrH+dxgbp5U0t0PL6Mz4/7hB8NuxXyEWEnYfheFRnKi0guwJuB9pt7b1ymvwKfruoqeFDh2kig6HH3gYzedtkLDRR3TegEAACAKHCOeQ8q6oUEDZrtwFblOVkaFfhUoVcjbDdL8UGHNXWO3z1Nqd9u3Qb7CStUWVksOskJumMdXX4IcWK/IYoeq5twZioCOFZlrSNGTZcpPn21rxloN5TwjBV6F6IqzAECySEL4uqenqU1TInu5F8fILcwkMdhPF+3lOi1Szbm++TTXHdzmXZUS/R5vCaXIGBVt3QtFIvyGTHusXJ9p0IDlTOaJbrgadbnob8b0smwe8lJLIVtnZGIifshQyh9n7l64NDqSL073MlH2Grr2YIbY23HU+FxzbN6omi9Cgzy3lKsN08jiVyMkYvr0Zo5jAZ4ejAQ9pkCz9xNs/3okZp2tBThfUvahUY6Okxc7GqTy3NEFk6csHA5pLECeMZZUFbLcXHvb9L40Rh3uEi0BScshVKg2rPpARy1OC+/Z9KnbEpzXrkuSVJ+s8zEhtwCpzz/uB2zz+8iKTWiiEv0ZVzGjjTNugPUcT66J9dbU++bZ98dDC23fs2U6Nq2+hv4qH6Ky9rk59uAlayxdYaFD8Nl3jP0gzHSjRU/NuAG84AX8m3S4TLjnbDJ2vyuYHIQ8eeCrjN/LBhNmuDzXvD1ivTBfBpnTBfioE7Ol5Id6fJSWvF+Q0TI6ocdnjyUuVYc6VBZvyjbXeksB7SqYl3zIFAS23Rjr4QH7+ZVnegZZ4gvKFkayxpWlOcsU1bDoCufbAcdDWGgGAAkuZtdtpmO5bLmRD1UV/jcPhKjrOV+uW7OSXVtrHusWkp5phAn9svWGI8NF8cg93Gbz4K0jl9uK1GN87kq0RulucT3lue5tBwpn+ayL2vG6ACkr+9GdYdN4NaxfK7PoPYu9AO+A1wiQK/hi34SWv8bg46tap4dTdC57878Hk1+wK8EhwL9gAN2wa+8Mvwkwp0Dvh94QahsOP7y9BX/cv8ABvDhdIe/pse6ydM0plyRFwZACTiLxfmthPHJJygrEbMYkiiTpkK8exQrdMAU3AwADzBLdIqbPa7fGCimEU2Etq7rKjtjlA3dfXFfj8dPJY7KQ1dJcE/FjXsSJfqdpFVF2pcJvbgVPJ+41ttVucNrBrO70b8JSD91wkbAAv9dwl57YvsvQfD8T2n7+5/EKSADjAR8kDvT1BL9vcPbj0l9N0HHQCqyF3TMR0FHI//VeeQFtX7M+nC/G4kSZp1rgq8IhcA3dYNDDGRvkf7k0l5bx4LDBzDAxQLj4e4dAMLXs0j3iIpba1d9Z2fe/IRs3QvwZT2DANylkwv3EWsfNdlVM2xXZhknzwjxo3VU1xw1fgIjI4FELWZuGpt5QKLkrHdClnYaCLZC+59FdLd1K+8NEp5pDWNErT29oM/VP/7CvTMmwtM41mZQFfZtcAjwlp7myn/g1J7Dg05FwZFUwUZ6MCCMBw8kQsrZmHPlVIO4UO/ujt2YXBMKTplFib6W+rEkbe7PNHlwn28qXhSYVYWpc0fKMXIn40yUVHYPu7fsYzcuRDDcjMNmffaw1e9Vmjm2bq/x4gGHsUxF23+uRO/vyY65NJOwDQu0uKrtc6NaqPQgCKl9/+p7ty6UUaaXRBALrSAunkjZecYwsqvqQLlltZm7WkZLoxfUM2ELM569UpYJ4GzJ783Tj+JaD1JV7CVfJiywIdw0IYHlm44lcSzPcl+pou3cq2YdGZ3ld9ti9jxYZz92GglyyvU2p0kRExgoAd4KpnlOPlyNw2i9fmFFdiXz6ycG00wD4lrhMg/Bjcy1GeL9euNJE1E7U+vw4OanP6jgCrHmc++N1a6f91RpdlPnST3je6RRyg+N+J7Re9c/PoAG32fpZh8urO2jAwS7wJXzbsBDd0MljrFAb0OWF2GgqNwHOo782I08m1tbG778JTDgWYaHjv13At7P8hrhMiiDMd+TvVCJzkDZTp8APjOAYkXMa5Z7pZ2XFLhDrrpOLAAo2/pT3JNnMBcvJywfKCUwLbVMt5YChMBuiKJVSw5cBGVgKSEpEUB3YGSAvro8xBqauSh311yQZUaxek+VRnkaEYYghSfPv1jLxCU/pLTwpsDBnmJIFyf0YkBze1C6WOdp2Vs7uqgV1goo3+E6iZkLb6zW5ysXGUtGbWNGaVcUz17krVmVTlPxcWD8v95Vrn3t22AvHWAW1+3uGsK0iPKcQ9QBffqu8C0Yl+8I0/Vtg+4BaOSKL4bXdNqPbvcfXT5gNCdaoOs8j9bnPwPKBxzwHeFQoB9wwAEH/GrwGeJuD3v1JgAx/uff/x3/8od/BAP4L3cf8G9fP6LZ0BvDnGXT6ZgwBZOqNbtEL9WuTFtnHSzpyFmLX1La7uHFM0p+JEr5S4IZcnemW5oLZbwUt58S9g6cN4Q9xdGlBlWJR3i/ZEG/lW0nPXHCuc5v9aSMkfySB7sSL8xjQC6a6zc4zABuync6AfxUP3Z1TS6hDy9zUK2RiYCHuwfYvPX3nbdIIr7OW5bDM7XhjXApxo3F+LTTnTvGjR3zqlai5VYKdfcImNtEYocWVWthfyhjSzC8IRdvoy0mUGKxhq01JTTWL0BxVy4KSrvH0ceYmoJfGJ80iWau8wdp9GFLiX4FGtMIFtS6fL9YFKNVoqtZlBMBazjZlQlo2y/7+mk+qwgHGwkvzGmr/VNdmtZ3uKETheHymAFQVUKbQlr7VtZrljy2ydvl+dBLSGZxB4P8ldDlwIjicYmnfeNxJWRVnrthar8yn2EthdrHUTBk0XIxuqAkVlPFxq0YW7G+SR4JxOpWulhZJbg8gxTdUzkyPLwFfYmhlrwElxnHDEKjCeio3OqZ2laiPOeKatVTjCzPt6FRnm+laa70GWV0sSRMD8HMMmsOz8jfzHU7u/h2CTyqgP9qfH3cGPkHMogdb6H0xdEZi1iAoPafbR5lWhKqx4Jr+sjR5K554gSt86ZtOl+ep+WhruwDL+Hk0o6eI8y6drOLN9rprYbGq/PZYGbefklweV+gE1MgtO6sd6bp1sBNKop2Al0xpi66pR9tSC7l/4YNTwCjKL1zXkDrWZTnudx9DucImAhICcXZey5VO4kVOREIK0DFy0nWw7C2YK+FY7LD9XDzM7nrZMoBNlaPXBQ8cWlzLQnpJokLbwJoEZa0+JTJKxcPK8+5/Gl5SRgyM2QP931HRj90DUscO69n6+moHyU/Y9o0EcZ0oDsUzC7fGc/Wh1deQplMbmIYL6nRlMza/eVZlkVhEjKKUjozcF5Le7LyQbpv0br5A7KoPI8cWrhqpm7RMnIHDXWtpr6++zM84CJsNt9bLga/F/hJxpvRYd2MBt7dK88POOAXhEOBfsABBxxwwAQ+AfyhbuYY+Pz1Ee/uHnC7nPDPN/f48/MXNBt63Yh4D7kpAZSx3D7gD+mEf0+fC2O2nisT1uwD3QsBrRU6yfOI+ZaMVMhnd6Z/FvScW3e/d82PBd+Fy/3m+XN5vxHmUS3G7/T9c/k9ERp37qpDuRfcoiX6E2/vGaIwT59n8KaW6LM8glTeXvtN+NT97p8Ez79yfScAf5Ft+UxgFC3OFf5ZFHF/lu//KEoKZfj/gHZcVRQLqCeAZzdeBoIPg4vNOxFUaDuZsDlkNFVkzooJA4PX8s53g7RPDhW5X7z6+t4uj9wDqbvf+qHsrer85ER4ON1JqcUt3nreFnt0ykt4yxWgnwAV6RtRxD5v1WEaXvJZmc36u++GKtlWeQsZdq4tPGp2H7ajPy3aTb57N56LpDqDHA5aZqhWHF59kEPjhTSDAL1z3QoZFUruo3gTMffyjfUTBcUTmfUppyrcquUN5kw4aFU96LsOCusLyX2NdRwOwAksy9Tzfa9zSSpMIYwZ9eCDZJJqXgQEyaAGFkTNtahvULPIh8odnbyT7R5HsntIC861FbYWH817j1ArttcsTSTCEXYK0KwB2f0wmgZ06xJr/4q0uhozs4tOklyFusWa/AS4ezm5dpbdW6ufxGLOCX7NXS2s6SutFOU5qfCpowElTA/EZC6W54B6SSy4mELBVyeSyuZzxe8d31irFev56jZVo+r3VV6KPJyd1blgpGmyL6fSST/uSnu5N2nfj6NxMSdYVwDtHlo/BibMHfsxvTVvJhDpOg3KGVn7D1Bp6LcPNPrWRe5QseWdZVZ243ZGd3cE2zxqSpTHML+sLuzSuXndsRqxX3w+A/zs4KZGqL4vht3YVQTY5aGle6W+P4dwgV632sDrQQ9jN/mhjq3oCcU3ypB/uGLyvsgC3Qqa5+MVaxcV2rPP+n00x2jOy8wzRM2I0B/6Qfju08TvV8Dkmidmxrqu4HMZh7zU9SMrSksCcgKdMpAXYMlljdDvCWBakcC1PnL2nkDImZH1KpXMAMqhtJTU61OSqsoVKlzziE1MC4AbAi0AJUJa3oFOT4WcEWM9r8jPZ6xPKzhxOT2bGZmKn5V6rYRrQ72ihXUVbA8PVZJMddn2NKHrOzT8Rsu3urIbGuDSNvPLEa6miHY+kvIegX/wCOvVTWT4M5gzaOXSN+qJgKUPzJp/FXftuXQAaX6pbEcpAXb5TaNWL1gmlDxUMe/x2xrHbSNroxYczrpzlAF4XiWJ8DBvxju8lDa9NN23hivw6sakwogexW9vUf/X8oA/ax9swRvg7LvHW5+7a8oa6/M3KvaAA35rcCjQDzjggAN+RZhZoUdZilOeg4A/P33F+7uiiL5dTsCqgv0mUdnssG6YCKCEdX3Gl3QqJ5NPty0+ka/uNo1eiR5gxHd7Id8lBk9Rz4/l5fQOSI+98Esto5LkTw8AO0t0fqz5zeBaZvMVcq3roWnAnfGv2fRweBShA6N3p/waUHf8s1Oy2qajsX81OEEg+3cvYFGBUSN9ggmju2qrMGmCnJVT5lVx0w4Ul+0X8NwFpdwP9lQkUYTKNKbl3qJqzqo8vwYYEEFKET195TNIJGi3FyyWR6NF8TuDceNinF39z5O0PWZcbpcAYRURnbk3boSTta8IKFYYMy8WTpi/Z7RXOWPBwdPYcke7uxMdPO3lD0B7z/C1081IPDevhuQ0fviNcYbahSBwppj8AvJuaoXC7JdrJ7pKbBGE8p2B4lq+IXuTBZTXmrZzcV6EENRIeXt6av4FXDltO2j+ECGlltOu2zWvNodhK1LI+yLM4247cxl9GIW5GkdletOf5b14ABcX59n+qe2cGVUhLfSHyxzLmYsw3zLlpimVLnhlOUTsS+pellncr1OlB1JOe9d9FUjFWnt/DarnL9MlCpHrferNDZ4NS0Z4jxtL9CztmODOOEr+GcAZGWdehYdza6jOV4aTT4dJ6hbcITXaWoauZCEqdZzREMZVyrgXwYuYhj7dixWBG3leBVsC7fDekEWd4H6OAnZ6RKeSDRrJx4+fSTENcHjpeDsdvS6ikVIq30yx6+MM4seX6Pq9w4vjYnP9+np9gjeEtyr3FZuVhl59L/jWBW7k/6om7zbJk4xpEmdH1voSxjUBZpHNmcHruay1JHeV63xOVA70nRKwLACLEp1E2XqCHPQDSO5EJwKwlKtn7OxFzsC6IueSjnhBQlmjiRIoFdfxXvFa8hRFOclVNgTkRMgLA0vCckpYbhNubu9Bp2ekBTg/n/H8fMbz52c8gcq8fypr/ZlXJF6wMNU1RcmQrLGVXVD6pvECj2JDYtKP3ZCJ/KbLiIcJBjCgs55s2dru8mTdp+SKqZJdcc/OOVdLc+mjQopZ/tbiDj9z6Xs3nmz1Jm3HymENq/siqPxbddUukKi6bv+udOcXgkvtOv3+Gtr8o9bR3zj4a2xMzgnXnI7gNXuCAw749eBQoB9wwAEHHLABn1DUL1WI9D/+/jf89z/8ETfphP96+x7/+vSpMFXZb3uobKhyEgPYsln58lXUOOsZrb5N0tjuKW4aB0xxJ3iTnZjy3ulLs9cEPbZ50YMwgWKZzo/ltPRNuc8Wy3vBQ+57fvIMJhclO7m0izxnUaTPLNEV9CC0Xgk/M9ptdSo9vCMXkd7QIj0qlVQA6QWpnouebFz+yuU+cv8OOEv0C6i8D/lqe6ol+mfZtN+JcONZ+miZCNe/Stit9POzc7/8EmgslpwiQeeDjknTB+tYD4LXrhmjsHZQFy9hUNeFpt24rfG8EJgH/RWtylzTkciSTrF4mg/Ji605jFDapf47GHsO9ZNru7OYSLYq/FDIhJ5Eg6kRqovlLZbgTHZXNxTfUf84OEnQKvTjmhGndhp+7k3b3g2tpqtH6FEMAD5K5A9TDLXB9JWcLJBCPEeThT7FYTZE3o/TePBEhZs+B4tSO5k5WVr7t+tkGW8E0U0yUnduQ3EmkSsKvQjKuSqMjHjLWM6aTymAkuJZRpWte9ZAWre2rk32XR/CzRE9VoHQ93Vt5aDYr80Y6VI7eOKd523BEQaEYy80VrmaVasoc3bh5Y1dW/p1LOeGvWDJn8UiOiMhYdKkzMhu7tlIlqKLdTkV5bu0lz179PTBW3BIXgsICWrBJm5wo2Lc2sStLbN2b8pgy/OMM8DPkm8dx+XfFaBiXVblZa4CI7rj6Z7MdTY+LK5hE8vzq8EvqAOac1U+cLyrhnmCOVijFbYcrTAwtCy2tSwOjDBep4XuhD1K+Y4XcLwd+fAIIV6zPMs40TVOJhwP6EiNLhSWqMxfKI1x62psEtW82DeW5qY2fjmhpydN0LhOVtavWx9HbRcQ8HSaXZgeHlhn8zIGaOG67l2KHz5M+/nC+q1xujEwGPcz6KIMVvcRv6nrXWPJdk35l/pnE8l52mu8Qunh1+y+9wzNvMiOFQl0puNpLuVD7m+S9iJNoPGb9xpEZGsTVi5KVCMfuiCSeMRJomhNJd75DF5W0ELgUypz8iTzNpFYqycsqSi+MwgJCRmMLNbe5YCq/GXPX8pVNkRIiZBUEa84M5BXRkJGXgiJNe4D0vKMRQ3dFwalFeU6lixGAtTqjRj1Km5bgmvblxlNNdwrprt2Hsz52mHwCvuOl3DeI8i/NpEHeRqSGsfdK65RSA/QseVvlc+5HKA4y0G7zO5XxoTdd851/LDyEKU9SS3WFR85nOoPXHGzyF6q14BB0XlKcAp0qneyX72+vgX/Msv3W+X9GnhrnML6HGnU4FDeq8q5Gn7GPrgCXtVsLV2qbJHjNQbW5wR8+7OqBxzwE8GhQD/ggAMOOGAOuunzCjZifPr6iPd3Dzilk9tcqwAoCLBVeJVugfyEgbQKuwQNrHcwA6CZNfpGPh1fLIpuuDvVFdL7siHs3FXC7aIlj/RQ8jBL9DkKUxgK8X407N3EvGKz85b1jWh0WpBvUTiHcr2AhOe7CrdBjOJ/e2iScnjmutFUoW0vXanPo6pe6jIRRpX8e8Eau9+zCpsEltPJYqznYvPt5Xwz760e2Wexw7wZIW511nM4WtfZJGJA1GNtq/u48wYpCi6tBYGRxCJcDy2QJS8kcy4MeclMSVqGH1OuE4qOwAseWLCttjkfiPDRhHgO2asQ4vaxmW+jPHVNkOfUFtYPc559mYjVNXSiqJK28jr+mksNYRGm9k2ho8Up/idt5mXT1CPqEsYM2Hprs4A4nsw1vpRpzV8CiAk8c+HeDPuaAZPL6CLM5lKfngdvXtQ8Tieim8aVfqSD4VfpwoAmV12bfA9CbeaMjGSsi+JX73St2Rp7g3LHfIK749zR3AYFLjmZTFlyJBQL8NEIfgaQgwq9dFHB89a12Zf87Gtb/pdK/x1f8H65FVp5LsJ/YsBZl2VpJM71nnUjY1Fo1kwG/55Eee7cvDffJzD9zjviTMaQ69tvBpRw3X3KM3yGjfvbAGvnSJ8A3l7ou+WXmedX+limXMdjXL4VF0+AmSpN8ARzhMM1sI912JnRJdo/S8p9fa4t+7XDbcTjXr1t2GLcN9J3hV5RGYov1zREVALtKYjb1zeFmOkrNpNj5sWAfX1Mk1y/AmgU6MwZeU1AWpHxDMYz6ESgk9xBfgJwItCSkG5PRTe+JJxOJDrZhMxcPIGz8GErylqVWEQOwkEtZW1c3FG0gpasZ5mxileatDDyCqQlAUwgOhW0KWPBgpWpOBFaqZRHBE6O/Nja6HlJsnIrz6h8u1vHKY73fX1VzhQVelZY/UjPOPxh8M2HsNxb7ngh83LD7eEQ5QOyKNbPWazL1/ItO1f7mlYPVzRDhmUrUxuxkoF6mL3caZ9c4aEq+1qsRE6n4gpeIVHB/4DvCJP9xzDqYJ0+4NuDzlU7dOJpU+A1uE129NYBvxIcCvQDDtgNv/Ly8E12fAf87GACjt4KXV25E4D/cvMO//b8WfRTjGoZopsX4cqez+VONBWu3p2KW62nryXcb2icbmqsS7gX/L7M5O5Avp9UzCnflfPjB5iF+pdPpS43DyXC6X2Je/44lNMii+Jc3bjrnk8tUO5cZJ9O0djr+TrqKWYwuxv9DxL+91dLzASfK4RIn3h/+dHifAajO+ZVeGpKRhmLMcvMYomuO4aN3cBWu/tvzdiQvIlhvrB4lGlVbLkZEyAKSHyZrm78hAZs/l7Y3ngtTyPQrBX6cHvfRNXfryJsIXiBUTtJOrVkaOq4r77c+5IBV/EUUO4LB5e7EIFisZ19IewJSltS7YH6S5KfqiDVgA1UUzZu1Vk/i0J00uwX5JNzkPwsf1b8UNsivDcKaQ4ZXYCPYHyYJmG7o7yrSifzcm096OCuraICRYV4C6EdlTGXETbaDkU5nLryxx3Rjllqm86y1Um/1HaWilTro1odvUdSLTGrYrid/219gObAhK+Zt9xhEUMKyVElFAkeLFj5fGIdm/7SwzMBlajc4hhB3oPBkdWOXEdbv4Ngd4lbupbm+bvGS1Bw1+yq0SDnr6CxhuCQfwkrLEeJk1xWbBZ35QoHtTw3Mi+0vSrPazlWtrOUzcw4i6p+4WZ0dUtNxnN/FocARkbCCU9Yce9V7zbt9aHeqf3p7A8dSvtR29aN5ZeWG0mIvWtdIx0IETuvFBGoG9vzuFpSXIlmBHUHoeXZiwrcU0ubXmxqc5nmvij+0yRenM8vgRlZnUVupi3XrurS1/lghEBwVCV6HZftGqv+WNr1WvpFrb8BV2dPJ7ldy4bW0T49990QaQe5/GN4S8YmMFmzpt/3wrX5XNXZNcknoTHvIx2K858ld13vuB2jbwIjWjOp1xYv4+dlfAAAIABJREFUEE+lzYoYxfH8dFxjG3wCeEvdPX3QRdHFczjhmjhb1/1sl+l5EbfWQd59FVWZ+szglMWDyxnEXPSk5xW8MPgZxaX7QsUb2M0J6aZcma6Hufg5g9eMnBcwCERZrM1lDStMDygvoKUoYSmX7/qf6n0h13ITiuJ3XRnLeQGvn7GeGeevjPwM4EzAuoByKnklRnaHy5BdXa1tyLU/CR3TSOugDeEW2i2+nMwTmLAbQp48PePw5/qlmQsdQQNQr7UpaBULc2XgSBX2DPEsyOJFUO4nVyU6exfu0uCJ2rr6PNRi3cYSORxVVqRK9YD78DBl12wlH3/Qw9xNjRXo/dR/K9r0W4O3rPeIJo1olCMgL+ZZuP19Cbx0yX0T+MHjjWhc/7icxmTzTwcc8LuDQ4F+wAFXwa+4PPxQTuKAHwFx36+bs8YKHfgfH/+Gf/lQXLk3/mRVIAbAmVvVhCowzbko0Ilad4ebQy5+lLvRR1NzN0f32GebgXKn+UPFN+7XMjuLSmeJjnB/+gy37w2dwOgHlP+9ytH9mo1FbuveCB0mArA9+PrkPk+m9qO6EfX5j2Czf0YChL2dOovjcRxEm8iGY1JfCjvVXOZnu+uQM1mcbZz2QG2LJYSrG+Zs8RJiuxE69aHL1z+qcAndeGjrUfvCRGUMnN5wvpmyESqbd8KzQJ8mwQL7CcFHlKNTNcmFtC+kMc0S0Zhyt5lFEtwXNUOA5d8ifeytHN0IaJQqbm5M6+ZvrL6Ex+hbLa/9IuNJ2+Ziu7L8X9YrmgnjVb4Urp6YZ8/9INqHUIlKI1nWSIh7zfsAwiEGRVsPLuhBjEYZ30z3QjVWeNqhAuXynMC1P1jabGB5XtIJAlzdsTNYVH+s3kqHZBeoKkJD0Q1LEnfzpzDuWNuBJYeu2YLUP4cDN+C6dPlwtmq1pQ3XUJdBh/wLYTP5oPVYwy9Yme1d45vihpNhB0TGQn+jJuY3Cs0A6eeX8dFNNOGLIokKNHpqZDkqj9AKgZsoSoxUiTIi7C1dnPdLpTObAucuQHmSPWkO+L7wQjXAkPzN6MJgXe6uTLlEU/bgOKrLG6o5iCvjxjCe2qYdoyjAsdpSlAAsVCzLkRhrYiDlctf4wlhPGfmUQTdcXLszg1fGumbktVyjwrRUXpSchTMRcAJSXsphN1IP77n8ASiaegavGc9rxvm8Yrk5I90s4JyA9TPWrxn5K0SBnrDwCQkLVn5CxrldmD2ryASU29kdN1WeOa5D3eaD+jV34PXLnkUxT1T5nB4pBR8WeB/WjpI/cKGLYkFuvJK7joxzcdHOKxcLdNa/0t/lgIQo3DPD7lO2Zc4pzw0J6tH2bfEi0IGZirJfw4jkvvYDfi5oqMcPxOMXXoQby/MNFsYn+dY4HXDATwiHAv2AXwxGTNNMfPXW8FtfZraYimvqtpXP6NtE0HDA9wETDn0C8N59KIKoz18f8e7uAf/t9g/4v7/+hxPels3sn27f46+fP5WM9E7qJAqtzMD6XCXsi2yMn9fyXTeQXtKsViZAHXb5DqAvVU9mbsecxVUjyNXNoNxZrgpv492FTjwDWOT+84R6pbRa/DCVshZCsT5ngJ3y3LxYM4AH4FnzkoJuvQDFoRcMic2H9XOIO6ybg3chvraLhjcW6t9h0/AxlKF3oauKwgnrXwsEgJ9k3JzUAtxlrodBDAXXqDPPB8N250EcGaymMBchsV646fuLgEzBcocGz6iCqg5fO1kf8OsE9CGCbZR0frHLX3AmKgIIUxrEzsm4Exr9xaHMzSCu/VwxmNH1EnfBEhSJ4yr04NVdPn2bsNipDwSZMSv21sfc9F1x3VyvUWVzo6/lTYRChOJeu6vXSNjpn5diCUKoAiCubtoJXN24e88Lw/nE7eNGu34E8MG+S73cOxsefdbDciffCxpRkyLjhITWJq6SWJ1WVJ1mjicp2WN0KWzLiokgXR72IxbIri3rFeDk1iQfwdswF8jZpfN3iLMvpRasd7IjlF3KbwUdDd2Byh0ZLALdON3IMtU6cHvmJ5UwHZYMvV9UFMibY0asroQusZHCDL2fnCyeH4f1WZVnRemsd6zq2PFzrKSz1me4ucHW3+3aIum9dwbFB1RvrWi+AUQJybkc9SNmNKgVl3LVZlWcM1Ywr2AkECexdm+p1QrGuTAzRflg7FAG5K51cu7XfdUiO8Cxvs26pZZlE15AlI3tUhfoFhe82AIg87Zdzz92DYQ57fHzdJOeXFoQLi4Yk/h+BbnEkPTjaF86jaONOOmDXXlsJH2JJVdM4/OcrlXV/W6TSOlbtxYVesWylsLRuzquZFVgmWmm5IkIJ5iJpl8GIt7NmujWyJFsoFOyUJt3nCfsnpvP3HYzGKDVxVkmdfLFTPrwmmESG2M4vP2k7Do9gBJyareG1u/s4vivcZ58K7g0Dwe8AgtzQQ7HIbqFShtk5ZVR11U/hzSIxTuNn0PBEw04hfkXO4qvaLrRwq9HTrn/ZnxEi4ItD3ZWkNC41459rGsK6QzXMhIYyfKgnIsb9sSiVC1u09dzBi9nGY6MnHNx354SxE97LVPxTsVTSM4JnJeiZJb66kVGCUu51oYysAJ8BtavhLyU+cf5HnzOwPMXYCWQMi8MkKzX/VRVBse4Ghk+UnPm2u9Ns8scG62rYLQHi7hdouHWdeNxFBedd7P1qL4Ts1wnL2PfLMPL3eYsd5sbPyd0uNxxLvefM8uhAsdjkOxHksyfs3zPPFhaCb1HIYK5vI9rBoc8ALTXW3n+ZClW8krLU6pW8x3dC88c++d1UHLboquDfor1vApC4un6NErnn8PkjlWI+TTj+xp4o4Z+NXSMyhXwHeswWL4A9GzYtBsm9N9otue3sniUQPvn0r3qrMsBB/zG4FCgH3DAbg6lF4juh2+9UfzWENtnqz6zVf0lYb/1dvvJ4TOKMnXAI3fgmSUTAhH+/PwV97d3IErVlbsyXaRCVEmcubhq17vFvUAroWzIFid41bJUKEFAZ/1jr/fuWS3HJ/ekDwVHDhd7J+DMLT89smzJANIjkN6huIIXHEgU9PwIU9JrvbxgRvOa9cFVjOkg8q6N0o+Fxnvhm2YcA5wEVMfSi12ySn6mUZoUHAUmGmiu5DboKyMI4siUS6VoHiTTel06ZR8FFqhj035FEEMlr0/nr3h/urNUd6FO5S27XN2gT2xtTXrXXeP+lwbpZhODJuGtc9eWiJR/F8u34sZN+c4SuFF0Kn2oSrPFSmDLdQu3EomKottw079whYXxHOWvqM3EstX6PtAndK/hw2TOX1gDzBLddsvoJ2zcwI+svDmMueaRoApstbav5UitsmSeffrSnjYvZvNZmzk5gedERlWnbLnvPoQ6ehX7uu0zHRlkNso0pXNdF3Rzm8InGdPJl1vDzUX84BqJeNc5aaBqj3NsEScGN5kiY1gVs16o1x9UnLlJ31Q+1L8q7Nf2XYYAgU1WXPJX/LSMIvjxeOv8bXu90gGSO9AJBCK1JdODBDnoRLhhYToQPFYwVqxoFdkMYMWKFQlLzQvlnNyZn4uSndXVvx8LyW547adtSze5WwNCm3PsA5feL49brEJXeZlfxicCH+Oa5svu1p3R2rmr4EGaLTp86cOMUYxhvm+aEYyeGrOr+yiPETW6BH7yjOq7N7+dfNAwu9BW1PzYdSPaPo2tql57MRyLbk7Le51HUoI/RNT4OZawqAgZ5u2Q9XTE9imapqWxBYKnB0+UfJuwf3ffO1oboJmXsz7a2XdNppPFj9z3FokQOSp6Z+VswUb6rayvnSKDzCkol7kyLrBO97SpQ8AfTCUUV9F+TOuQdIesqBzczF7ZzqjpkGBrdcsMuDKvmc8DHozcatOMLeMogvLcrVuKMyU5NNAWwTqPHe0HOT6BT8g4ASzK6STu3LMcdlszQBkrMVY6ozksT4t4rLuFXfmQqM7RTKXpVgInAlOSIUpIlLBQOevOKAfaGBn5qRyltesE1CMGv4deiVWqU+7jTnaKvtTL+BgjGao813XeGqZp4fb90tzWInx+VrKDEW3SSO06RAASZ7MWByAGDQzkFbxmYD2D1hXgFZkZxKvgQbWtoO0V6gtU2sAYXDNCLr4nQka0Hf7unV3abvnUPKVc5fNX5zo/XzN/Xk1kuuwqN8mD7tZTwX59e0Vhr0lPQOsZxy/obk3slgU/lidXemzCG7f5i+EaPmrEx72m3NFasxN8nzTr1iQPXxwBaalzjZDL/sOuWkD7J2mb818/S/cdcMA3hkOBfsABV8G1m9S3Tv8jYLQixs11hAuL9tXw0nY7VvO3BW+FXjdH/+vT3/HfP/wROSX8y90/4H8+/b00/Tnjr+fP+M/v/4AMxp+/fi7aqzOKMi0yeETlHvSTMN4mzyjM2+n+vtxr/PmroKCba93wq0D9HcBfUCzMoxLdcXn0OBkigw2oH/Lql1ndzuue7OvHEufuHYCHcjc6AFOkL49tEWqJTvcFX/UypivzOfzO4LXTbXZn+jTeC8u5BHvvPh8AEeSueZK7zV0v6sOz1O9EqEqeGAnFMwCjHJ7YLFRz0J2EhHt9GwOdot79NPdA+msP4vuWoDLKTSy/J1etW0zNRsMmqvsl4O/PjyhKpSjYK/DFW+M0eVPIUgQ/a20Esgfn/L0THs6EQn1d/P6xpKyi0uqaeQ6ra8dlI542Ww5h/Zjqy+v3mk5Q2ITFDilCFkplg1tk92p9PixKyir/fgDh4yzSFpBXoo/j+3o3Q23vyRiXxh7Jfxy1B6CKXy87o67t+1EBoNHh1fkc0+v8o0F1/HyQ74tz6M1uzijZifKoYCTGavndCI9doXEquO4cNrUpmMKay/KN0Z05qPfUln+JfEPVWCWLlm6xCGTNgYy3iIhDz9qCTeZHoOImlLgogC17L1R1Qm+Hj0MjFOJwMCFlEwgInTB/BkxI4qZW2ZCahZbtJFYNfqVdM5yAHlIfty4QGGex5CveLMr96Kxm56Zcq22a2Cn15UsGxB07G26t8pytjQ3d+uDw9+uRVtG38wbt1DkS2vYT2lYe376rq8A1t/Ne2odcggnBfHWSuIaFdd17VID7fe12JfIRrSR1J7ymPV167l+pWZz7ckYl26GbNnSQwNNh9Vqi44P7vugKdzxXx3+Nkup8pAG9kbidYnwQkYHGkhmMbdFcXMdioVcCoSX+3bj06+1GffQwdgwfvNayaPwc8Wvycn2/e75o5IEnpmbqUa1/0+eeNoWExgUO8HFjTu2PWfPQNV3/MgFYAPVG1RywjJmK3yP2Ye7Z6HAIN9TdIuA/2/Rk1y5hTbC1s66h5OeeVo5sJZdf5SeoemzyeMkevrhnV7fsXJtXPGGl5RaUbh1PpG1Yqtucq4QeiHMu1Zu1zN+NrRV27cZ3AL5iDrV+3NbGtY1rljGFG2Ub4k4Ge0eXPHPJrv/9gl77s3qe4WqBLlbonHM9CMFclOp2BU42vtG+219baWr4AYcn+7E1oiuB9+mU6IM10/MdzAAn4Oxdt2PTdXszu9n5yXjpyf4JfbLm6b77eUld/KuKvoY2er7YSmQMXMa4AtCiG7+BZG30EV7LW+yEVxezc56OkryWh+vKZ7wIny6fC2lNruPnnPs74IADGjgU6AcccMABvzLssUIPm6K6n6tM9qevX3C6u8UzZ1AqLtPszlEAC1Irw2CIAlk3XbLpTjTYL5aNsirC8pSfdPnhXj7IHekz2CuIMdkLt22haVOMR0UuRkCxiEd1Rd9x248h7Q583hIuKc5/KzDryxhucobQD2/VDN+i/wZKdP4OGxsGqudyYny4uR/GuW9UzfX5C54RG6ToxEwyVgKpjXVGNqFXurJBxSEqMnomd0shbvjZv4wV1Nj2RmjsGRydVKfq8/wLrDtxAkpdijioWmoXWWUV33lFetEFkOvADejkNuMFoVGiX8iu6i/i5jxG3Hi/mIDaYB7HqtH7xazpP31Mvv/8Hefk+jbi4cezFxzW8kw5rnjSeJR0LaX3jfr8BglbeVUQwo0q6oModTK0WE5LRuMbhzji+n46+FzfOaGoKsbLsJ0IPHt/puV6g6Y+Lm4cY1a+b6MqaieJSCIUbpraW071aGBlWL2z/qt3sKpQmDUfBtMznuDvShXhtd4jqh5OiMBcVAJKkxiFJqxYQYmL11OObe7L1MfRmsfoguP3i9Bm8BH9MO2U5GqtGQW2L1neNtO4eb8375fg0Mz9azP+nfBiA9haE18OnhbKWufDw+NmPlQf43oCuLBNuKL/RrT26sSvBVfZi3UL/LJvJ6DsI94RdlfotW6nXtRu3woo/KGSGb+EpUF8IrnWLHivGTIGzaVBofw94PgIwrT924Mro81T3mx7m46otJ2IyplzjjlKGxBAicB0KhnoIXs7gLhgOd0iLbeyHynflGvI8DyAHlyktp7uKq2qS0+u0n798gQhtsO3hMHA3j3Wh4xOC3q3uT8IoZbo4rad1TW75pT9uKHKv2iTOUWbeUey63pG6zr3zw2M+BP33oWHgCXJ/ezs3i9ZIhzwevgWwo8DroJdXbBz7WD3NypDp+nR7Qf8YnAo0A844IADDuhhJCxiADS2Qv/z81f8X3d3ICL8Yzrhr+evJki8MRURAZnxn+8/gED4/54/olFipgRKJ/BXuT9Zk+n1VeIS/mwbsqi1Vpzihjcq/R7bz93mNG7eJhoE/bSIIEj1LI+fS/jdu1KWWjLr4YBFTDWeH2seAHArwpEvk2oE+Uxn9Dvqr9F3DX834HoJwKfJxlsV7e9S+/5aeB+VUVeCJv0inP49uXcCvorA6dY1AMG5lZN+0dsDNPxGBAXRkiiOi7h5H/XLLt2DE2whCOGdUH6alc7ZaMk+g60mNwEyu6v4CB+fvojMj/DgXLnPs6L+zc35+rWMKfUkoe+n4STw73tKbSGbQpmj8a9cw1p3jEU2FF1Vl29nje9OvnxLvQxQh+iKVKyCVXnejLFWA/Ai2dtG+PVKdN7eYU+Qm2/xQ34yTi1WE9kLon2/qhWoCk9DWqZyFSlYlNy1PQ03J1DUKQsCeGV7LoLatoJNUzhhMtFsrMtzcol8F+vLSGAsnzhtqK78fAy0gzqr4gZ1iTqSsKBa8YymrEujAlZtp97YfTZAePyqD5lh1mydwNUjpRbdbSRS6yyfTPNvhMAV4RWMM4sFuQiqvWv5Vl7sreiDpIp5eC2zV/D7anUrA7dfzDpdwd837S3PGW087h7mENq/3nkudEj4N3bzZpwBXBvPCvIL9jiLy7jOrNFkLmGRsTtoj+RevMsST4MbXLzC6dLVKjtB+ZQ3YsNeBXGcqIefyMJA/KUMeZMYVkb59BCNz1iVOvEQhoYPqd+k4bzb9kiMpmPX4Rymsv/k90yt+xP/EBU9e0R1l1b5Ea/Prs18uKeNozxH81bC9irRbTnleVRCvy6bW5OXDHotyNPG3dxRC5aFW2/tHmxy35TuyqHHHOqrY8KP08763I9n/Se5bqD2t7uDPfARSu/NgtvH0PFdrw5RC3PlDazpvYeH0E/aLOXKGs+TqHt6jZ8Kf5USKFFZI5bybvyUIpcSsJzKvdpaFcM6ei7xa62zEDdaIEdfO6U5muZm3IPxtZsJ0RvOWwENnoB6SGCEoyLXjWTrJ8fTqZt26L3mXP8yg88ZvBYL9JYvyHW62H3n8uvHVNtIBXf2yAC2/jED7RFkF95UoA2PnyMuamWxnmHjPNvJwtB+bc+O1qWXH1R3tL7Nsa4rAOpVawN6y4Pkr4Zrcoy03r3PxqI+HpbL3x8aIjDjsXw4DR+HPMyMHZgVdcABv2M4FOgHHHDAAQdcB174AZjQ6n99/Yx/uXuP23SD4j66bF6afb4JGeSZqAi5ZRPWuh1tt4Sk6TszdKrCoIaRMylY/ADgAUMX7k4WFPdv07ZQl/SdbCYB/ADw5xrIqAcDYtl0j3Jf+mTXpPlvmcS+Bn4vlugYud5jJ6SS99jBKnz1wSoweA3E8bQL/EAEGmuduDH1yrKrEZsj9RHF5Tf7MgkbAvAe7gds5hesgmor4Gu9VIf6C+jZhHqP+RyiclxTqDvNNtSXrSHlX1GHOfErOxwHBWz0Q74cZRNUZcQoJNBRR+x62+ryKxD7yMCHHXFrllcMfk+yqQ2qWXEVJuvcYGCq2NADKOTTAnbqaSgnYkund9bPqlxtK53Udxh5UJBVbqtB/eSogu/6SYXUSidUsAlrm+4MQ7BQH7uqHEnJZoLBCdrxDuImex3NlbY18tOIEsd0oyxZui4IXBu8qxcB0ueYJwPDMpxCXOOxlFvEtGLFJVZb0dV8OZAzYjRaHJUGtU3QvxXbxYQVCc2d74j1bzJuw1Sm7dPM6j8FnqRxPJ/R+ng/e22P7VVpu/g3jfdd4KdC5pvCtsHxaMzEcDc/ja4MCjFauGcxC6OtG3x+7VQa8UIYTXmO9ZslnMFe5nLP4r6Vx2BR7nCY4LYHNd/Gscg9sPfQaCj2xdsoBuoaLOs9KzV2/HikvZZG6axPE+9yGVFCqgexh+D4jybMgd6pIlbhkZ2AeEshwaHcIV6zkauwA2iIcsWVzjeu6v397lZwAqUFKS3l+puURKGucVmal4CUumnPqHx129yO22eSK9LJwrhRyOrc7tuccSer8CO+DVxe8UoMH2/2LBDct2v3lSvAs9xpLC2mP7nwLTnLd+Q6VBnu8Ifjf/zctXcdKKM56dt8xsMFHoV93m02jvlyH0eu2ydXjH1T2KAwryXHPxoCi9k9H/ATAqOdc1QJQzMWyeYbx3k3y9YlPeCAXwEOBfoBBxzwk8PBlf2cEKVBBDyf8Tc84uH2hP9yegBTQgbj/3kutkj/x917AIT/98vHkmQBwIyUEjKzaIcybh8eQCB8fX4U/UZRAHz5XBTRNw/3yMxYv4iSVO4bBbjfV6oSwQIU7y8YK9G9wCxWV5jJkWAuo1icEwFPn0rY+qnkcfcBUgEpWhXqToFBBP4iyvP7BwCPvef5G0kiBvq4k3Kfe3Q6/LUOPjxOrZFFuueuo4Jd43+alH8JXnHn+RA0u6+h4e7DOP06oSkm1JF+fgrjIMnGQt8b+X8QwvpGXjEcM80dcyNkKISPBMZbQuK4MeqiXqatHwF8EMl3mWJxEAGP56+GCwGgpdiN3w9V2EVl5WWMLR7eYTvjbHH0X98n2+Nn9FUNL72orMpi2nuFuf3aPnG9hVit5rmbYK3z7yhreOnor92qjUhiLetkrkGm1gvgtiCO5TESesBiX24E8hNmJjSPKLiG4uKjM5QY1iEGGoW4u9vNe1Ko5bq0lrEX/rp4LG2oUd03O1Qih8JUztgM06FFWA3vDqUQpF+piacVYVcHq0pzCqUdCJSSCEU0+3b98eUqyKiaKNd9ktl37q/i1GcV0oALriMZZ2OdAydb7QU7tXU1bjluon1O9i/LXGeXtuZXyW4UOLXBDDZ37RlAFv/pWay3vOK8WmEJ9p2yPpSl7UNqv1gL7yzlUWhMaT61dGbXvg7xzptKHijPfaIr+W9mZ3kO1IMrSbrS4RTaROPvEtrVAlEJhGUS1s4ZwxPzaesx/WbfOXyWCc/ZhTvitWVxb+/XtPcgLl34/r0gFq3NwHIFxiY5GX9sPXeMeCH5Z8QbjLKspq2oRH2jzewEANszq2XmNuqWbyxiXw+pMkhj33Qx5u05X/PHuuaeh+m/XUhjVugXYHQQ1PPXcO/REl2skMsS55ShU0X6KHxH67MUomX4sWXjRxZfpxDuaI5e/aXK76T3fJ8kzYLmMp84Nj1t8GxLV8cJjxGjCd1kImctXsMNd3n0B0jJ5llbR/9vWVEd36J/iUo9/XtazLocaUFayl3wqkCv+BXvJdnzkeRXxEl/hkN61pIa3Zhm7x4fbqxo/v46OK+Ad3OM91zc1AOF8RLnc11uwrhyZY/nM9UPDJgluVqjAyg8Q5a7z9eiZV8ljODWY26tzw0VpYmhujZXlBdhF6/tk1LQxCuAyne6+nGti8ZNCVjXGnlJwDoTkOxYb19lRW0zZlz2d1+eX1uXV2ZxwPeBjs3049ytYXH5ss/Oc5ZLdnH5fw1cy/oecMAPhkOBfsABBxzwq8PsHvQZ7w/nxr0R8DP+4/yEm9sbJDBuQVUmTn6TKAJO0S5lBhJR2c8RI3PGQiJMMAWIpBEmKxEVz5m2x6W6MRvKjHxF/EZ4YonegArOZu0hkB/Ld92DZ0mXHE6dzGiQIT9KvQeb0ggL5gr0AxyIu3GKlukOGglRaHuTTTmBxFw26T5cECRONw6jwCAkvApG+e3AjRgfQfgAlLu2RchJBHx6eqwunql8p9MJRdS1nfcdRWsbxaeoWddGZNfG3XtneMw+OhKIYYpxrghNMtuqmw6UokDLUh+vRPeivJf0pMeV1ELafSFrf0d33Fj9AMLHN9qt7lWiV4HYZFHZWntGNLDLIgbMxZhlyBIaRbuV4YXHTigOie+EsHUaujvpGwRnfhQ0ygRnQ0Et30ON4gPBlV/ybXIO8mC/5ujzRZKyWZEy2qfhIuRsYjjXoUQkel9GJ7CMa6AXrPogFqpjQttyEIeYQNQq0b30nHxejOZBldz+CgeNz0A5xAed6Rq3CJ7Z4VRpfBAMmzBLM3WV6oReJPiT0S0dbSuUXjp3qJ0SnPt6dm3r4Ur6MBM0q9LRKe5n3kuYuTszdqFQfB/Brp/Xg/HnFQmyZtY0qmB1ipkuA83nykrM5iPFjt4Bb9Z+I6Ldh49oURtvhhiFtnd0b5rHDKh1xW9pR7gP4jTK3i34poPzG5U9S3dhIVCw656u4HAaTzKurGGRbq0MBx9LeFj0YrproXOf4Pal/s+U5349ZnUTYi7KOamSb0FRnlP9ZT/GvW01W9E++553uVCP5K++EF7V5zVhBth994dgC5YTmi4Hb5PwUpyKhXnhrUqjUErAshRF+nIDSqfyPfmDCAB4xcrn6rnEeNvK9zRoouhmAAAgAElEQVQQXsuVMlRbk5tMJKC/FqR81Xj3kpfcs3YVqX0dHehXj4KTTIEaKx5y1o5TniJnMUXXWOX+8+I1R5TnuaxbrPPQ34HeHaJ2PA4BjZfBBmOuuDTvjp52fJD7i/nVTmzHgY0PAu7z/Eq6bw47aeXPCjMvWsP+2A+XDuMert9fCN164InTqE37/rX9jSrQN5IPOb23ZjcOOOAnhUOBfsABBxxwwH7wskEafQD+/PyEf7l9h89Y8aCnzVfGv63FVPm/3X8QwW9xnfqvzx+RxJXcysCZn3HOZzSKTLE+hBOG43QCnp11hm3eAjTyr3YjXOBBPjHAM2W61M+EJhrmHtVi+Y5KnqtYmmf5vRcL9cdqst1sFlQz+CQZqvxAZS3xakSVyd6F8JmOeLZviTKfmUJ+Jgx77xP/CJhsDvTbF0Z1v0fhF1Xg3MlhQ/+qEsAL58jtLkZovGRjEIUyXbPuy3RqFXpR5zDY+IsyzyvRvcVQuea6F/E85jKYHlK1muqU5yFNkn9ry1YR1kuU53ud903lAjOlr/+MzSiDWwCqCOwlsF9F0KjTa+KtKeMjjKoe3q+3RH8dmAwOhPbObjKBOuDuxNS4IjhWZXNVtqIVvibB0oS8Qts4tXO/ETaTpWOZC6R+T6N3isF9630F0bUzy5wjqoJTk+FOslDcSUMdzuo54ZJAa5BpDxtZtPKcXuLMSldZRwj7V3SKxQx0QlZIV4kCglBU6ETsyHste0xStdz6m50im1xcXQ6yKDhU4MRi0c1AK3S2CkXhsBMkKw5NQVw98sPUHcYKZPmPWf/YxqZVyT9Y8erGNbSlL8gHEbbvHY6W501ybqpdy/PtweHfvQtnxlhgvwEvWZO3MvFV8NqMYPkY27nOO1/3l6Gw88OPg5G1MXSu9XzDIGoPTfsJIVTWYms4jPYvo/h+nVReR/9sHQh56ZwC2nEe1409fcTdg4Ay6Deu8D19PmNUrl2RXT6Xkm4p0pX2EAJPDXTKm84Sva3LUOnyooOme8HvIzyvkJzil+q2KJHc7b0gnRLyInSLEojE4lpWrapH1MElf1r1JHXrtqGxvqMxoYe8uBoF+3XRKzHd2pRt3AO9lbXW3ZWnCvCUyqEBeadlAadT3UdTKn8pFQU6Fat4PRijHn/KUEmV1/FKcxffn6exurnf1p9NufKk8mi+T9t5FY8/VflBcOvO0WPMyyA6VACqxTtB9lvSTwOKOeA1WN3kNP1KbWO1NE5dtiPX74oAXPa+qFzHJWU3N5mr0r6bqwz461xaxqUv1KYE1/g6Js7PbZKPQ7dGIW9M2vGNoeF70PO1o3XhVUgxXk0DB101YOEHNOjl5ZL3KHLAKyGM9Ybn6SlV5wRiMFWarIHxND3ggN85HAr0Aw444IADqhX6VeA2mV4J8PyMz+kJp1PCM6/459MdPi0rvjzVzY0X6wPAmYETJSyUyx6PfEw4xozqv+czsFDRuiseJnxxmyvUz4OXNn96kE+T+85mu2Of5cpAEvfzyqQSUO43fxjnC1QBhS9riH/4vkdouAUqHZjpNX8TMODiN+Wyg/7Xv7hBD9m25sQjwZ37vle2eQ2EqjYGZ67Os72zzjtnr3gRPgL44CrEqMp0r1Rfz2eboZ9pRbRUmYK1WSnDN7FahL9E9bpVPydrm3Zlm9OsfD9J23AVeRUlWJzQak/6Uojjk5yQ8wVDr6nidW29T4n+9pOBmcI4j9K9ZMEMOI8JTgA7QLOMNj8K1WoKUIWdyfjJp/NlLiUs5yZeSbdnovo4rhztqFjVrnnJDkcxvLyuJjAlOlRgHcfoTrjUrVEYMxK+yiRsXb5vCBSHghuSnpO7zVUBje3alOlZhciMojRgkSh5rxQxHnJulO7VpalDMApPOYTHAwGU61yWQxP6HwM4Y0Ven6WYXiBrTdcJueRh4I6jXo/h+l91QSzUrDsJxAO+JHRMfEdsH0X0Gvrg26unu5uL/44iLntkmNENeXD8Z4mp7oErAqMi3ppV+O3DqG9xvWKAXRpTgPux68bezHp5Ojy3eIOSsCHdLpPXyZuf0SrR98IL6PsW+ENkM3hEr0SfMVyeFMRpPFrzrgGK9OiF0HimAaryXNyRWxz5PS3AkpBOJ9D/z967tsmR4+aCLxhZF6nVY8+ux+N9zv//Y7tfjs/YHo9HatUlg9gPBEgAJCMjs0pqdU9ATykjgjfwBoIAAZ4SlkXDiwK90PcFqkBvFoDGAr0WRUCiHfywXQD0i7rmLWtWzurSW1x2Q9YBUbgyZ2Rx710Prgl/1BdPrV0oibv6pSrSkQh0OiEtp9purHFViU56xzmBOdVqZJY1uCrqpSxK0ox6n3tDqh5qg67JQRHODHACca8er7yQOb02nmWPEhzvW/sWQK07ub+QKW4xfD2VN2nvSotiPGQWF+49X7EJcn0RhCfXHgbYTLmOWQivYVcah3DlIwMfRclZ1WNZgPU8KO9Hhuv5lO8GI769A7dJuRraMd8fqeK/RzC0W/YXCk1xPuCBRt1i5+c7sRMHHPBbgEOBfsABB/zA0G8Ar4djVb8KZkKLbvf4BeCfBmHl5T+fn/BvyyesVBjin+kOT2I5oWeC//78BZ8Z+F9ikf6X/AuIE4gyMor74343CLzo3eeJgOUOWF9KuN5RnREEnCEP7l66x6botop03bRZjpEbA6obzTPad0I5HZAgJ7p/Ae4BpI/AWVy+67mCkY9pC3HHfIZv/2ihfgni1OjNZN8GKif57i7mo1hhJ8SoixlPtu2jl78LMoHyjVEPU2j4IpFP8NrsuCG5sEEZ2yBQ+J4HG9S9JybaBGf4apAqvNjKJovlp4p4xoK+GV33g1zVmKb0HXnMc47vdvqoAkmdIbcWtERwVCyLYE9fVeCpaVo+b7e/9sVG0BavAteK+tAWfTvzimoUfGPYDZ/l26dNhL17/9avvgbl86UJUOhr9dhYDxKR/1VLcL2H1Fo3aY+4ttJS7cmkVATXRGjyVjY4yneIEFetKEQYweKpgigBItQlQTga4Wk92DYDod1VLfW4wx1AhFc6I1rkxaZ0zTkFhqcZM4LkYTNbEdJeFL50aeIz16yoCmRJypfZxXoMIPyxx9+Ii+RH+gYI1ueiPEAuVvJitVcRsY9sFomRUlxjm7S9MFIfjHtVgigFFiRHr8MdhWAnPEeOOEhgx2OM+kZmJYlRYCrXcqyvPLhDHc3yPB4YqHQijhDu8arPtF9gb/MzeHe4xGjTPCQCpdt1bNUtvvzm3M07ojbGHGJknrfg5VbkLsEb8t27rGjkYI3vhLr6IOtn9CTShL8zyjOiV1sIRkJ5IVsg4K/14TCcGw/guzoWECbliL+Ywguq2/PN+PeDbwxg8XUhDObOaKNAg7kdGYMAs7vRh2sAN4bSjouAK8c0W++WL5Cx1GIEmhzTuGishFk+JpTDcktR3NHiwxcClgV0WkB3J6RlAS8Erkrwkp6R2iLNaGMKDFT+AaCUkORwXkBs8N4vsiTXFuRcFOjl3mu1TJf10ijZsa7IawZobYr0lpupqz6L8jwRkE7F8jypq3a561zTmjzcNTQoFyBVMipfnMW56U9tydokOh2rRwjT09LGVJu2Z2ZZ8nWkhBO4W0BlM8hqkf60sXzNCQvP4glu1rNMF4sNzqa7WziBci57NaWhJi/m4sIdzG75cjRNgVqejkE1w43YZVLcwvMa6GKoJ5FXgE+aY/ichIYpPomAvIbIV8I3tYDu52SBqxbRC/l/b7i4ubgipyi7OGAXdPyJErhRROrnoM75Ou8na+KovK14e+Do7gN+Y3Ao0A844IAfHN6ysr4fU/cPAW+2Qgea8Ivxv5+/4M+Pn7C2r/jZqJAIwM+mizIzEiUQyqnwRKpER1NaxhOR+RV/uH/E31/lBHh0badCHruJdvsUG3lUvQ9hGA0s09nka/NnbqcF9DdxETDkX/xxeLtR34IYX6UL7zHUf7NM7J4N6ayfzfc4bur4mQgRroUE2aCEMa13JEZvc5c2MHPfprBuc9XKVJ0L0t5BN/nMUNEjmRxYrIGN1bWp6td8xl06hZLL/40RNcqTSkvMlQ2m9FtBhWzkaAC738TNDtcr0W0u5lM9ORCVAJ3mxPy+bcL2Q8ILX1rL8TDK8B50J33sPvb5RDp6Q9fo8Pdlb/R1dP9fZW5FAFstkDSes+JeqnVTwZ3g+qx2C8H3n8RR16xVyljcjZIrJ44BUw1CEwI71NpEtR4bWjbckSAw5GDACF8OdfHF2PxpolXvx9eMxrYZOgUePu4H9oJVDk/1jvKqcCO33FcYocn9q95tnuUojQqvGxpqeW7oRhQ2TwWw7MPrtSDW9SsH3iVhEZt6N+WqQfNonWCv6OiEXQbfTuIvuBCB0gmJTshgUFq9YHN2UIDZ4+YOd5i2qt80nkF0NqQiSeD44R2gKj5vTOuUqaYTnNvy7nPjUS8W/Q0YtUorbsx7d7JJGbUfJdxaCrsDqpFnMYuR0uVaxIWxVGntBeTd/OJ+fNQ+1j43ZbqxHvByH7eI5AZ+lHbGf0avRKeCu1r6EjCmW3Gjon9pkObCfPzCQYkeeSmbVeBDRprJqPzv8pXwZA84jhCLOF8YE3V9NW7b0wIsJ1A6yXVGMr4WKteNnRbg/gQ6nYoiufKBCXo5ETMBHBVIpb2rt5iUQGkJfHwfv+Hq2yidCp+05oy0rsjrCl7XqmwmZlG2rsg5g2gF0QpeE0DGx68cKOyV52JRvmibLFWJXu9AN6gpdpni3mRta7l+I5Q8NT0Z7sfyMgxQlutbqjU/3LytSxNb5btangud7oaFI9boBi7rwfuRRfoGfZ3M4coVSD1c1IhCXI8HZMa2d13+9fCEunfXsurcyiVh3ZsFnnI01Fj3m9zoY6WfGw1w7fKjA2CVzbOiFpXxU3o84F1+Laj83q+IQ4U4zi/FvZ0He9dD5f/QEPiUjkAAdU2iPl37fweNujCNDzjg9w6HAv2AAw444AAPMxmIFU6N5A1WIcAErBnnl2csaUFKjD89FO3831++gED4p4efAAD/8/ILmBl/evgJL+srPtMZiRKYMxiMP959wFcGvr6I8lr33xnACvxPYtApAWe9fFQQSVGgRY25tHtZAnrzPCN8c3uJmQv2oFjfap/0QV7kLvSTBJyxf99i46k8Qb2Eatjey59nOOu3ER++B661iL8ED7ONlnx/Dgg2o4Bt0D6O6WfwMi6+g5id7um1TbV/Xs33GX6zAhgDYf8FIeYw/71pSryLJIIBEBehliiHXvm1KIFMwiR3nZNLfake19VvIK7dlYbDU4eCf7iyhHcGoz/og3beg27ppHsfxLO/NhI3i9RPlkYNNuzVukbosS9qttCMQPEl0W3IO7Xvhvi2XxGA6xRiUx8VppaoJT0bZX1Fj81hFfIjTS2iscC3t9zVXcdX8um6TsqEavlEgN4p+opXAIQHugco4VkJSe3DsJgYnG31hrB3/dkVeSB5ida3+kw2bJD3JFkZKRlMCe0Ij2+F1hqRxvi3clXoCmAF5+xkruz+4x4fK7wethFXIXWrplbAxCGIS9oTTliwyHgpLE+571zTcch+UK06/yvERgGQ7hKITlKNV6wrA5SQlDqTWuCxm+e3gZkQe/mKjl5tMaTXQm7571KebyhDYjxnTTvP+7dvdXUlA0PxIdBtPeUWBy6FZ+MFpPPEMSCD8w3MAEG7qNq1cdj/dkwPyvgW3evG1KUClHFVRXrAcaQwjIS2S3MNsgJfJNHIGn0EjsDBrOu4OKcu8jLzAi+AKImr+/EFlIpynJYTMpIo0bkojE9igb6cgOUEXhKqxfVnWRI4CT/R8K58sR6wImAlwlp59gHuP/mqxy5cMiElQmZCBoGp8ELNS44sTpnAtCIn6+2E2r32J8FfFeeg5q5dDxUsSazQSxgLvwUg6GFZWJ/SUY2F4b4aZo/L4t3H7iJq/KoMRpuPkdfSYlwb6lsO74YRsKDt4sIezfM17t0ts8H+c30O6+aEJ2rPBGJqB1WZoCe2i/K89HVVmtf6COg4rrcJCI5qoV/np8RjyKHGXHXvTKZO2rlu/WZz4O/C/LPBKYnyXPt3AdZXE7FjGrbz/iYw6KD3ZDG6ct4ZpuPsrTzXAd8GJnSqboio3xwBZv5f4Mt/62zqAQe8AxwK9AMOOOCAA7ZhKnwwbtxrXIksu7X/fH3B6fEen3LGY7rHCsbp7g7r2WtXSSz57pc7IJ+RQMiUsIjr6Y9E+JogGz3AnarnM/64POCv6hJdca4CtrBxqT6n4b/busZT1p0gz4YBm3enW0Y1A1h/KfFXNvoc6tPslM+6O8z1/b3gR2KWg2x0d/xRGo4v1I/zq4RuV4COh7fmX8dq6CTymQ+MLyT5dQiUe9AHCDDkXmcrEAGKRTCc/kCDqxtbMFZ4N+3u3nT2eV7bYFfLIEw624otD7s5nRGEby9YuFinMfKX02y9X0wQwDbTJRy6Zhv1+ygTSVQ9j6hAl/pwFksviuniTfRizW6VJZtV1bwYTTFfCLIKvYvllolvcHD3dgK15HJ/p7p/N/NqpCQa4mMyBeQKkWvn0pbQeEfqYBVFknaoP7dC1fo9FLQh1CkpSzur55pGV2oJrfmlc5q8iJHlfyCD16Y8rzLiUXs4oZMRPnXjGRPX6loBrteIFp3GIv+ono3LYGQ+I+e1R2VkucSuhNYG2g4JtY4Jd7jnMj9eiJDpGYSmQF+t4moLYp/qn7PajYvzWxmN90p/C3MRPjsLdNP6ZMKA1h7Rg9FvFSxdVbhoTWfptAp2DW0umZh3bvFqugldm7bnKODKMWiVSO3jIE78vrWJuBFGLpG3E8iP0lmzvtQFK+YXn8mP5VuAve3hxZyma4J573C3NGeU4RsmXWoKdFqKVXgSBTqQsIIKT5CoWGE/LcC6AKcF/KmcqmMA/AngvzcX5h5zyQNsyIWuWdzPA1vP4YGI9llyFR4jgRI3K2TKhWUisRqvuBCwCJeivBOpNb09UEDGEn1Budu83G9ebrrhtjRUaJ4cGKh9qfxRJZ/VLXurLLcGMxVFW5tjVw+Grhs5bh7YAMtYA36Oz2jII0pLZ6gynWNf+eq0B6fMIgz5jCEPYJms2NQE29bIXK4ayTngQy6PVkUO8Vp7tEMLeu1NBoGR9EojF93wvbPJPyKhittpEUtzCVxI7j3/QWF40H0j3hvJ07vCrB+GVdiHdLQ813kePfQccA1YgjBqR6rEYMzOx7k9yP6AAw44FOgHHHDAAQcY2OvG3TH3RqBihVwMgBjnzPjD3SP+39cv+DkDPz/8BNzd439efgEA/OH+Y82FASy0YOUVCQmZgP9evyJXybIp70RIy4K8rvgrv8gGSlBy8rSRoHIgpF/kcaiAHgmV4PcKJMpztlbqA8v0MwP8C3An9XkRpnVBc+VN2G9BrjhrfF3Z33svqbtwlad8773qK/u9f4WJIE8tyh9EwPM04v4Z3WGJR2pZMkp/vSfMsovyl4EMcJjXLPziPvYb7NBDltH4zrtFLAN3RbGESaIo6lF/G54Ufrfx5xq3dYe9lc0KnW/D4z3a3JduBk4YQ/XVyv2mqL/vWKiW6F3IGJGhHimuMW5SjPGN56VILGUYKugFqqZSn2ti/S5C6kRVTt3uLg4FWmGgWVZq9hlVtlxrMpznIpRmOdqSihcW4qI41fKLRTqq0VeHy2YfW9hDYN4ZvqUApsqMc/Uqm93AtzOwrRntwobiuJ1ZLM+NjLlDvK4P3J6j8Ml2tP/pETchDIAogTiJ4/YGGRn59dyjNGnXyYrXlPTV7T1wMresn5Bwhh5A0ANO5c6RqyzPR1cpjCNuYPxGqFlGDcooEqMxOG8qbPDZrGNxjhLclSe/bbhQCYpxVKgbv4V8xgtDixfo8C40OX6A/7iLV5OXeDf0dPZZyPOgXRD5qT3wXH7ood8D1edRA44Ijixu03iY5IVmybzXEr3LXhmGAcP5rcEylUTlXvJlAYnLchLPHRmCT0rgnxfwS0KmBPxCyEhVX+33o8J/aN1Egc6urycLPUHalYCfAl8osOaiNi+WxwDL/Cs8ReE/iKl4cAOBfqHCxDCXu7RPwgmTKP1FiZ51zlbLfAJSCVtBwkUD4/E1qAdxWf8M27aex0O2LLVcD+LXbMzhSCbqto4jPX7r2tldzJEPxcZ7hEcTHizT64EUNu8Sl9EWB7tUzZSNHF+4eC4CA5TBenCQWRjUXPPzpI2KklobSgPqlXowrDm3/DLLYcEMrkM40g/ll3hej64yBgGG3HUOCLN3IZ/vDb+HxXxjng6b+vdQ598BxM208kbyG4+Me+8T18PuLecBB/xO4FCgH3DAVbC1m/41yr0GviWO33rp/B5L88H4OdiSoVxqqrqXlMgvr/iFFvyJ7vEXesEf0Peoff9ACV/KUfMi0qUSY3UC6cLw5QxUKzI6AQg7bCekDMqvute1Qk0TtmuDYF3Mfeij8AeAB1bpQFHMLmZTXKrsZVJ7SU7E9z2t0C2Y/f048Ba4hf2+Veg2Se5O2j+gChltmN2M1HYIQg19TvbFJjK/9tVGd4K0S+3CfvzugO4+wCuavlmh9/brLFlaHXlzyVisaesUI6Dcl84SSmAkUaRX8WGAgdbBFj6BYbPskNcQmpwIirt5HxPDXknTl1/SeRRGfb0lxCYfratPHG9ah86Z+xw2af0V82/LJXfNikLVyH/TgGjxF+9Ed5naO8rNnaPud1AXHcjFBKvK6mqPVbe+3OK5uljirdJDasVwG0ek2dhkNVoRCLOucbXb/Bh4yq8tsZEGu+o5uRc7wfJQQEmKJ/dRxh82QHKJApoo7Oxck2r7DuJaqO4tWpwiV2WAzMGDMHbU9T6LcoCrEMn8aTZdjdn8ybvrG3bRXNqR5aZ5JdP2q5y+KOfqir8Otu3I6POqxcT21ALadzbPK7ham58F6RVrPcDBvAbleSzX4FXnMLp2hwmaw7x9hu910b2kwLiU4ST9LsF87Bd9sOtsG0xk28LS2tnSVwNnuGg518zNYSHXwwMVlmm3xbl5J6ARN/Jjx6bpln5Ld81ad6kae4fIEBzlbplYeqHf7dys+EZiEOPPypwAxcFzDQTiVKs0qWN9HuyXbgHHvs3WmUFkG9EylPZ9okTvahTrPopthlZbCCwfkcqBp6VZouev1UE7+BMVBXpCcetOhEziPt2NaWp5a/523JDtl0hT2ce1YTWdfGEGr7biLf/GpZe0lBLolOvaTTkXS/U6VaU+IDkwYNolmVODUJf1ptxaFYtL61cC6pXqlkxU1MPYq6NgoEQHmlcat9aGlgQMe1cRiXMbhl6N31uNIo72/RHA2uhEpRdP5j0A0wAX/c/QIgxwRry8hivvg5xB1mLdFTPKy4CdVMzNiwGym5vaKwweyCdsJoM6OvogY6tam1O5KmB9Dfn0yaffZs/dWnQDxLrszu5a2voGWtzBAMlLtJkDvRqNGfFEUPYfltbgsDzfA04+OWgvx4d0AxmAXKFX1xaTD5u/Lt/J9wMO+AeFQ4F+wAG7YVOqcUCF0Uq7V6IxivvWlXvERGyVf8AQtmQ0TtaiwgtGU+wx/uPlCX/++An/gke88Irn83O1PD9LFlkcqD7ihId0wn/kX1BuU6NyJzrO3qIso9x7LjjQ/Ql8twCvcipZGXqyTKd8Z/Nd4SyR4vfN4ddvkQt8BfABoK+YWqQzmhI9kZz0prIy27Y2XspaRUaosKnHO4OVD4yuhrtmjt5J2nqXuJ4Y2KKxtEEKRu1hvl282zyEP331WdxR6yugyemdh4CAQ20T3aiwiRKEngu1gxNdVlEgFsFJIdvvaP+bY6CZF112Oo8n7yp5ooy+sIazE4uoi+K64db2YYnDNe7Irsm3wzKUFXohErqmU1FOZ1kS45NYw1caRjVY7FTN0By0I0afWul1TLiwWONIBGjwfVQid4/DceT86k+gCw6Crh1Lp7dEj3WggGO5O7zpg8mFtTlCrXwigIqbUHcXpwp3m7ktnHA1DXCJ9dRyMDuTxE2HERTErH2cSlk8yF+TNXrSXLW2QJT6hfa2OqdKXwQZMv3NehCgCrfkl7sR4c/UyPAwIq7yP5N7j+0RpLS+Xeoc5fbMJnK3zmk/B2SMEpq7NGjW/nrHp+TfhPgWBzSigzzBV2ZQtTjX9OziVCrm1qrYTgP+QhJVd/7M4JyRicH1SNEKPr/KbQCBzoU8s8s3Ft/6kZjr+Fv5FVnuQM/8As5n8Lrib3TCmVnM/zZO5lXaGfu0zaEBwY6NEDvU5Kv5wX4IeduyMK7/MMC0Y71u4UK/DfMM5deBuJF2ImjeLM/Ng4jiJTxnearrI1vArOBQzBNjbLk/WiPkw+A+YmdN7ujVDJUtGh7HlzLSgzWyoyEaTobQbrUrK4EIZVu+QsqucXKP8rXAOr9uSfuCcq0JAbgf0KsLvAGwI9zmF+PKIaYvErSrHrafGd1eDQA+ka9L7ZeWfyElZmVjwCtyLeqG15B1lNICSnfgVBTmtJxAS8LprtyDziuwJsKaGetLBqcMvDLWUwLRGRl2PSfxfhbXHYNL3bPKeKzruUbWtVHbhIHPksmnwd6KUO+it61iz6HogTI9ZMUEUGKkdRVWo6zLZTnkejtJyYrMn6ELbDY6xjU7yTuFPqK6Lhee3Zfhq8UAMrNTBNeoLCszp5BcvASYXKpHGmfxXSy4SRSAJYUqiH2/ua6pdTQH9CzG9RoFUwlnpa6Pz0C+N9sGb73evmepJzd2iTOIs7g7L798Xst6njOQz9WFOzFAXNZ55XpZedfq4p0a3m7KSlvoVXuKWegPYrPTG5LU+DHwDpSkLgIpAQ8Z+EK1r1y66dprabsWEWjQHhI4hdjf+jnSrUtry45y3hsYYWzqOhbWWUsf96DC7KLpYV6F6Nb9gAlMx6XOQWq8lF1nCOVQudlSgdAOvSi9nbFRG+gccMA/EmozRIgAACAASURBVBwK9AMOeBNc4q5+D8zAe9RhtoHWb1GQYhnmt5jSjpb130OffGNQN+5v2TzUtCo0Av795Sv+7f6jbMSDMGP0xoRMxf6KCEhMla+vu0Nzn3miYrPOdYNuhWAwmxnDUNoxojiJG7u6CWy701a3KSj+H9uvK0a/G0V6ldcqnoR66WmQF/Xl7ELq7bCV/a1jJAqAhhkZiY4mC5ajzO35ZhRGYFGaRWRuCnW9m1BJWN3Mj3YjbcOp1wfOSd248Jb9IHzPcKjKSBM5kuIBGp/B+JRKBa0n7FHaUvu+b9WVexEskVijF7X5eCSYuVzfjWBQG8O6IhvIDGXEwA2ZLh4JSSF9k35qNXmtSQfYGqFZbJAElSvuXZvGY8fMhvpWSWGUWelYDL+fAHzeM2+0sZRmVhnkLXPOC0lLXaygRsLU6ho63+2ficfliFWxdlrkj0SB3pTmFW+rtCH7sDHw6zozSsv+2fa5yybyNQFG/SX5qZvUaG1fBcU12+LHQaO77PUeU3MQZIRLd+6kSbqq8LgJBkcEayIw7ATHOkdDfNcOShiVzpt1QNOGijrDimG2igu3j1nfs49s+kDfheqZfEKcmp+iPSHEtt51+SNwLsItzgBWuUcUMvyyxWVA4Op4kcIHCilSAqHTp9YRyOcVjFU+rgCvyC/AmV9Dm4zqM/lemZjZ2u5x38zMn+aoNZryCJU0b8y7CieJYca1W6pH7T3Cb/H0rc7RcAcs7BGuMPmdJeqgzt16HSftLSDzgWJbTuhiV9agf6NL9vozYBiiMn26tMwYMhp/duEEp0Svcb2lZDde5BqPQl8lhq6xbPrR0e0ZDMbRgIXYDW/pc4frM4D7SaTYj4a5A5sxc235jF5pPcjHNHC9J3c4Pm18oYJ1LrmMWn4BnTF9iRcLUVGmpvIHJFAqrs7pkZCWhLwAS0rIVJyXMzGQMlj8iFQir/OhHvY2aNZf0zYs7yMFZtXcZrRDQBovrJNiydzOq0jhsjYo+WFWxa+2ESMvK8q91kExbtd5o0BvZ8J07K+ofCCXX6rVj4xLa4fCJ0ZaCde/BdV+UlBtC9No5EeEKp5boYxkeI7iAj0pJoJKNofq5KN4CyKJpBw61/9G9QtzLA5GfiztU5M/AniG8lH1ShpbBrMoxDOIV1GW56o057wWVz1rBlgs4bMo2+taUPKcn/+yPLFZh6zXpdxnoO3XZdu1RSxOPBIqr5ZSyehLHqftChnlTdO3ty2pG6mvyfiWteESv7anLLdUTdbb+hzD9/BKytc3Wj2+MuGAXeDoL2N4fZKSvrovDvPj1nFzwAH/YHAo0A844IADDrgOrIyNvgD4yXyEYY7lmwadVzzjBXcp4UO6rzzaE78im8vNHu6KxfYfl0e85jO+4Aww4Z+XD2AwfuEVOTGezy/l5L4wiuvrGoQQQdBjhQlRmW6FSdmkrTDYKJokPRghHAHOEp0BqLt3fBWZAssd6FTu+gakbtQsyp2wYAOC/O+bwF5cRjA2L/525T9IHw/vQN8AvQv9JaSLd9PXu+e5CbuiIMzJQ4Lw72z6++rzQjt319Q93ACtEp8z49NyCZe2SbbPagcKVpmfce/+JmnyZbhmBIww0RpY1+7jEsilsWLY9wM5eGCEHFYEYYdgo8Zk2phtVsP8HdTxrILa6/pKLdE1RX83+hhaHVTIq5mokFaUrCq4q/JmHXNNMFzyI5Ofwci+ElCV5lpWtUhi26Cy1GjrbhFfqlmVbNiEaAoVaJAMGKoHuTqleBR2EKG4LCfTZirIZGyNwF6Qye6RAGRr/rV3IrH5swm77yFfp/gI8aygKDRCkzurmnuCKMe08wrVoQ50VmRs03Z1MWNxhkT2r0UhZyzDNc/M6K2WugqNa6FDQMf1RN7JirNR9H5uWd8A19AHO2/2LO6xInHejSpp04b834VXIsP7ShlycKW4ytX5Z09GmjFoD4g0txYt75eg2DfFtoD3WDv7NexqMJ47Gq0OeXYH/8h05zVlB/p9E8QxEWkdhbg3wJZC5XvCFI0XeCX6NfV8R75ti4jtAbGsLneAD973FdjS6R7uU0tfaHMu54yIgXPZp63/vQB3QE4JOREYGRm53CfOWtYdaGGAzuVQWKXxaGONjTedyotIWMcHSUgNst5u2J3V1hzGYzGszbZpLGmC5Z1gLLLR5i1RPSTfH+gc0+bmBaDh3umba/sYnA3/a7+R4mGrEslrt0mbL3bV804XJdBytbKV+nB7Qc+DdbeyD+hNyZtt4Yq7VbRzCK6pEphXUC4H8jLLwTy9q1wV5lmuspHilQdhl6kdcLVhLJqNh7ia3M3a3gzClIrFfEUgAfl1ku7tcBtFk57qBv57w4W8bym6Dpy30vM9PNwB7w5W7joMo8qmlrnOQgO+L5oHHPBbh0OBfsABB3xHmEl+osAm7t4O+O6gVugWtnjqUVjt1ta/fz2/gO5P+MNKeCTgRAsWSqDTCXld22lU+btLJ+T1jERG7aHulatb1yh8xWBzp9/tDtqEq3DPbsxtfYYbZlu3GMfEZQbog/vU4n5AlXBkk5/KWFNo2B9lX/IWHKLMoMptpO/3CE+/VxtcLceV/opjZ5hPEBiofOVb3V8/Kr4TGk8qHMddMh/ZhNc2KOHEpj2q1XkJK4qiImgYGmTH8oEgkDACvypMGqUJtXMKBxhaoD+NBtmM2kl5Lwbz8kaxqMGFoTOrL3UPw6TV6rxGt8IagjQswoWOG+Vd/NgjYcd5XMK/AVQSLULiUr7ioJbKEoGamLfGJ5PJSOli3QeDYAUOLY1pzGQz4Cos3eo5rlihjVu77EAPOJj7Af2gNWnNZzOvbH1svoB1It+emoDX5s/j12gBNppzHV3ZgKgoH/WHzY9F4BtwcU+ODllpsp+p7Zf7uJYG1KJbvGZNzHO5r4VR+/I4nDIbA3/TIBfatQvRwW8PlSRtVlVOWDyyUeKwHHjZIVyL4RxfNoR6HYQ5tpk3YaZo5TxDOvb/oAz9yIBVCG2CO3AyKAME42oo4GPjmzV1iPelb1vfd4Djl0cTM+Y9WACGivFRO9LgkfYNE5vo6jVnwES7T+x+dI9BVhknNKgl4Rvw+BEhKtG/E8R92jjSvmgz+BLHrrz/dGV6AvCygv+pMOuMBKaEfCaAXsFgcFrAi7gHJ5ZDwwRgBVEqls2UwOJVrUx5HXcJ1fqXUqNDrLxDmU/NKU5zyUuiPKd6xDN4WwLgLf9dS8DNY31S7xkdP80eb7SkRFLduoaLa3EiseSu00ropUOwhpdfS6upkkw9eOvSMYp1valF7xa6uXn3S7dpF7UkdyWItyxuKd2VLuFwXcN9xuAA/dVlkU/w6doZK8vXmF/HVzTcWCzPM2fwmgv9qspzbsrzKn+RZ90/xHV3BFrXgZX9xfutYzt1fCUBaZF7z2W8LAk4n7HZfroX6sq78G6T30rXd7BOvxrs4enc4YxIF8Z0oiXfy++ZIn+UA2Y/MlBsfxu2J32lJIZedHdEHnDAARfgUKAfcMABvzLMGLMDfgiY8cFG1reLcavdzODzGX94/Bn/3+sv+Ne7R9xjAWNBWu70Bi8AwCIZ/4Qiu/hbfgaB8HO6BxPjqwgPTrIhP8tG6eHhHitn/HF5AAD85esXwUGQtcIy68bI6UisYL8XHjSgPk4XT/JyLs5sHKNcz1/7fHSltgev98CPPKWsZ1e5+/dqqZhLfwFuaYN4d3rM437wjVA8CBAVi3LAWJ/0ijOry6v1GMh33wTvJtg1Ams7ngfy8uFcUGFEFfh4IsJk3B0ijIh+v94LkGqee6ArYRJLBUrzeLG6u4qeJbhmGkjTkV45AaB3cykRjUJdH8Hqxv0NMOqX0Xf7Ls+f5X2v/LplIRZWlIowtlpqCW3Xd6Tmqk6FuWSRiq7wJYyh0l9TB3XlT9XdcFVAujz1Dk2ySV1b1O5JsdE0vyri8OuSomfHiFVAG/Li9VTBVa1DwtyV6SLYd/bft8bnaPoNBKoXgewt7i1hUzIMC6qxnFC7K5hb49Y4Jk0Q5JbP4VRTjbuzPrgcl204xxDBcya7Hn6QFtRDeM0bfotUq9ueP7PL5B1gxCzyIPvQ49Piw4QYRpwN0jAZI982ijdVKo+KGhFwXScNrxmhdyfR5+36f9Y4vBF2Dczm16D93DvauxK/6i7Ufh+kofDt3fiWnXClxWCNqYc1VHnlhslsfJpvb6lnPIA0gpuHw4wZGX1/h856T54XKJvGPWh9Mc8a/wJTwjmD/n4ufAgyciLQH7J41c5ASuBEyHp4KRGwEIgTiAmEDKQFSa6fcccuOVXLX0YWHadV5aorcch0ksMdlc1RC3SlITo+la9Y0dbKaQ1r/p7PQdP5Ultri3JceWWd8mauE8zd5M0Th1WSq7t9u0ewSzO4HSqsvFikp7Luldq3MEWl3ufuM248lSW7Qm/ZZS48CBtepEJc2wItjvTN4OvTXQLqns3ZPtt1LctclOicRXm+Wpfunl/ieopO3vOMDsQ6Kj/lKjeF2K7bkOAUfUsq7ueR50nfjZ68JaO4Tuo3HeSxbWO8N5R9cW2YBF5M09N+d495mWiD+XHAtwXLZwHOuEg8ghAMTVXl+c0eIw444B8XDgX6AQcc8ANBFMYcK/qvCiMr9CFccOOuVlBAec7ALy/P+Nd0h5xzdXMJAMkpNRqoEt1aoqswLsX73ajk04EKyOrmNgj1ooC6DkMr1DPYOUTDmB0N4doO0i7D/ZGxSAfEaEnxGggX90yRN+7DvhlM9s3Mng7MXRfvFJB9K3A6AS+kqpIgO8w6bwgY438r+Zu1xaj/67cdhYzmhEiknNEuSn7ulmtXht/Q+35lN88Y9RpsD6zNxj7vaF1q62z3lBa32AZhvnsBwJYK/Z2Bqa+3BqGgeUIRkgo5LV6+6VwtL7cNz+3AnQkBr4DROObwG7/H9z3FihUgixUTU2oWV80Eq/0VybUITg2tt0i7++FsOlMvpb1yP7WVSzsX3pVG+0pWvcxFNwvSJ90dx+WhW7aqi3k21dDCbDxPgspSxxKV5TuH4sw63tHpQWd1iur4HuNPiBy11V1/GSNhdShb/6hDNrxGeqHSJPutxc0qoLXKcmcRF/Cw3520ahDHomPytj1BIV6E4WfW0SLtQQRapGltdQwvpPl8ZgzcxW/ARjSyEVi+2EOEW1nuOZzgBMSRkFg36RtwFQ9Bg7V5i9COAgpNarD2dYhrZhcWgt4FZuvAaJ2YLK5dfGkvd8+1IWDd3dm/FjNHfsGcjSnxlONokbO6DGPhmrXtV2Vkb4HYd/H9xizjOJtl6egrBoyiRNN17UJ4t9eL9834RACKMrJcy1CsxPlvCevCxVV2IuMUh4Cl8A/IC5AzGIR0WpDSCUtakJaT3CmeqkFwzoxztl4r2nrP4MbzmKYiKrwOjeZVZQ1Gcy6uw6aqkXUKz+3u8BbWWCltX0aixrJk4+lEq1bKIn8ut2bd1vhkSCFVJA1wZEl1DACUjAK8rrdxjULjF91wLP3egYuja9LAqrMb3zbrQj9sFIpJ2H5NNkZpWMerGSrFMs7XXPDKa1nj9ddZz0vbIJt2NW1h+Uzb79Wi3bybis+XyIqwee9ap/xlOWGeUpl369mki/nOypu/0yh8I6s90Hoo0sr4bQNuRsDQh3ZSxYffZPU9pvWNFCnd7uNsWpmPvA4cMIdh+5BfF2tUanJSZmRdZNzhYbxtsB9wwD8QHAr0Aw444AeBK5nKA34d2JKTjMLsN0bdUP/n+QX//PgA5oyX11eAGT/dfwQBeMIZzBkfqdyT/nEpFtrEL/jKjL/lZzAYCxFWFgW6bL4BxtPLK8DA3+4JmTN++lDSP4DwX1+/mI2ybgIFPxptcgL+toJRyMxd5CYvrVbSQRox1HRZd+9f5wK9MYJj2JpWv2Wm2ciVpq7PoyX5JYjNORIgAcCzxHmQsOeQ7izILUB1o8s76NvNLtxp+IhFTOXPMf6+rOqH2g7UBHaJWn25hZX3drf5SKA3IyXWgjf2XI3PDOpc4sbfQcootO/m35y4tdzfY43aymNf/mT+AGCF2u8LjlI3I2Zzadm9YRBrJ3hp5agAk39ft3rPsoR/ip46bDj5cRF/h8cc9JRBIrm+vSDMOhZI31GfVQiksghSIXisDriNoarA9WO9ikazYiedopbBmo+759TUygktTWWTNolft8qrVdJJqVWGJmPEWk7aErsmjOuc9sOl8cLuZy9Mx6sV8kSBoFonDcdc/KRCI4OfEeS2Oz/lL8e0G8DxeRLfojqMomPjysbj8CLDu/wtYHpFtBL7u5aR4dvkLWQu8kJ1oo4YRIUJHXLrsKF6XdPoyBkRpElZs+Y1a5i+DzF/azv1BYZC2D/HQ3nfBSIjtMUYUftxdIta/10SjF9Tt5uXrn4F9FkMaMmsjHjYg0MHWUuw94Ybl+xtsG7ctwZbDIvjYifcXIf3q3zssssJcjvcjFyUk3ySvLgo+SqpoqI8Xwl8WoFMYCQQFtApI6U73CGBUipRM+PMxd12sw4WG3VKYKiL97JWqUv0AoYG1u4gF1Y9+OwBF40bCTZd3Uhl6A8qh5hKGgYlRjYcap1jVdmqfJe50skodzk31+tzFEv48PyXsZAvCnRG9SxTlw1dFwwBm/CgHRaNWUQ5VCFjI+DZsyh23lh63y9DkwzaR46fuCjK1ixjNtx7ziweNEbXi8QCbb2zSZJbP2qelrmZ0s2dG91lKRbzgDAyCTi/9jzgpTX9FmBczYLtgu+6ft8AN9b5Ox4zP2AEQf6i3zrRpj00Y2nGAQccsAsOBfoBBxzwDeGidGrn9wN+NVAr9Jk8su7Xd1qhq9s1Av77+Rl/enzEXzjjZ25ZJaRi+QU/IogIH0H4e85IREjgphCpMgKSsorXvLj5+aeHR/zt+bkxj7UuZmNcpQQwUtLQBlVAbPJwrwbz+/uy4TvzON6muahYpP8DT4neimSwYf612ocgAw1oCrQYxwq9uRs7N2/Q7Ti9CaLAa6OMahYiz4u4BCMCq1kjtbq1nNlt6pqTdl9IIyVGMGgQovC/2F/L9IyClFF9pARqZbhhZJMGl5cVHzf+3tLuI+WPCeul+T588KWc0aGWN9s6cBXGRQMEr9C6oU5k/izYqx3d/LzUdjzvF0ZR+hKBE7dgKzMWwWcdcjouddRxuzs03d1DFeb5bO9PoPq9rDtAu1d9gG+VdOqzG/0mX30PcyBmG98ViWgVZZsyKrTDGlaTBIvzqaWvXZ9yJLC6sM4Ir7G+6vK/MMai5QS074rwXKmDz3sy//vKtPew/rNKg61FlCrPI58wytYJjbWMyd2Cdn7OUMw8/KzpRiOsPArfRAlIhHrDAQAOVmFtYNg+4v3k7Yrm9oMWoYBRRgMiODp8Fj0O7DmgtlVsDYhrttJluyaF8egY4lHmsQ1KLo4vsG1FJg5C2EX83wr9Gu2/T/Zq7rqMQDN7dzXz4q5BM64/1+altPIaRkznsC5A6grV7n2A6Zrh0H0rO/FN4Bol+q9RgUCnhryf4d+6dWWAb+UVfNpx8Yzq5YJFWa4WssxAFsJbD86i3OHMXJeFjKU8EAFLAmUCqLhsz+eMvGbwOSODAEpItNQppSsLNSYHevCLK89HDdXOA0+r8lUgPL6SQ3vRSrUUt9FlrOsWKDHXg54lZrN01rWeOLV3tWrOEjeTPdNkyrGVimtx+VZ4RsHXWl7bTJwXo7AO1Kg2TQkg9462hHAChRPR3okdh6Fs6BBbKhvq1DMGjXdRpbh1z6xK9KxW6NwOZ4R1qR5xmJD4ss81z/oblz1zMOJNm9x1bemXk3+/xEft4VE20vAwwnvAFn/wLcBsktxYCnzWLhT8mn4N5Y+eQI57zwNEGnrtsup4odmeFZ6uHl1wwAFXw6FAP+CAA34wOFbzHxKcsAJzxm4UZjegYVP2l6dn/OvdA3BKlfe7Q0Kme3x+fQIAfLp7BADc4YRMjI8446sIBRIzvq5nAIw/3RfL7V9kJ/fl5QUA8HoupsJfT0u5V90pF4ygK7q7qtFm3wEvsGW/H1GB69NreU+YWxdHIaADUaLXvE0BpHgNGncvbPXlrwrvJJi7lzxe3tguD/LhOXx/lg3po3TQs6S9k059lXpUGZbZwDqh3ZXgrgTYgHPI322wBgEUwqpgqfymJeFnSmLk2g9oO/y9HNNmeEmAQKb3J/XTuTAQ3HVQhfc6l6sIMqBksddivDL/zTCTmF+avjRvuRqFUHXmfebfYUJHOa2SJmfJu42HvZP90yBcZdeswmnKRVlorgphUZQTM8AEtkZaKv2tI1Tapt6lbi6LJqo6kpFXaFYBq1SaqiBT42pg3khnx5ehDe6OdPKPRjDSdPulLtZXQk1S0eIm6N4SLlIYjm5qXmAA9goxd4JrxqECuZPc+seB+VY99GPTVmss+T46ZDcooo8XKsDh8+zQQiyjW9NnDavlm1ZhLvqbBcVqkTPAq0vzd5uHHpKIbTKCq/tTac+lhDE8Mo1uQQrxboGtOkq578SC7K67Kh1q1a3ygQ3tgonXr1nfBmI5fr2ucG8+rxK2hVrnzSLmf2FhfKdlLTa1z5836nAtAt9pLb4ZFLdnFPdK9tts3ulEuWIMftMm+MZzQZWIdnGsiksu3mVIlJUJZd4mEgtgCKldsWYGVgavGZRewZSQV+C8Zqwrl9s00gm0lDmUUrFAT1ggbJBDiTkLNsrwlHTMRnmMPU0/WE+JpQwuueudusIbEcmd7RAlfiY5W0CVZckgLMIKNptnaus0MYC1nYuylpI5C3mMh2v7XQLbNVmXNSm04ahxhIHSPU6iyk/pUUfHb+iev/6Y8oUea7pC2lKPk8HefitbQ7XA32KkWNpBlfdlNDAYXF2zA83q3CjP3b3HM96J+8+RDGvaeMCyq+OetX8UT/pE18STqCx4jQlNuVfO+1HVdWwMI10Lk7WLu4crytqJT9cUuvcN+Yw3jFfA/MqxiymJDiW6g1v71gTUMJYpZCIfFucHHPAucCjQDzjggF8BvpfA54B3ga270HXPwsDQCn0U0d2JDvwfPgMr48/0iJOYS1V9h9mrEkhu/iJ8AOMrCnOYwMjcNrtirxbKJ8lTN8wIrtVhBGVRS6ICBPLxDH7lVRUx8u3+Dnh5bfncnYCXs28zwL9M9zJGiR4hyrF+p3DpPsNNeBdS84Bee276TSUoTiEuQgEnJLaKgbd02Ht0dhjHCvqemlDpYTnhp3IEBQxG5tz23gN5Q7X0dWiqYKmJfZqqXBWA1P6xTdnQqamdoGnUHuT7JtbP4RzoVrBGYvj3Eexe2QZyNCeDisHdUPExyH6zlihaL9NOqmL9ZmJ8Mg96WCSb5yvgM5oS3XWREwIVIaSXOZaHqm+q9Fn+GEXQuCxAXvHT3UeACF/Ozy2O1qNOV6NMr8X4taYKTW06YNCBfmDbPCg+cPhgltFWWMzBNzTLXaq9sGo8UjfHLwPDu8YrriqYnSXeKHeAXxVhG+t5rwpgQ4MCXow6H1x8G0Fd8Tqhe+NPNidmdVuKSZ0V5/jZ5j8opwo7PX3uS4ht3XgVEuFZFbELrswoyvNKJySdPTxQvw+rcwFMnac0a0Kru6wohDXq39EBNzkvIZo3osh6zbpua/tFrjK0k5Cinn28QOy7flePLoZP0LZ0VpE67kP6t/I69aAg+/at+E3eH5pr6Rq2yHs2377NqvM+UE+gDYDLfcnMbGoQ6hLGAji3sVSVdYPUI6vZWRke4Y2w9wCrRFdctsrcCo9hhnbNePp9y9Ug3Xa+uhbsOxipi23I09JsWzXmYu1LBJCZywwztlYwU/GsvTLWNYPoBAYhs3qsLlbsDBZldSr40gLmBF3zzRJnSIGOtdYWjZRemn883sNUuitHSm3TkeRbEchgJnPWTi/O0f19iVvwNgpdLUmLzF7Zy9VqWruCKi6WJJa8m9caFuU8J8gcNn2nbsGTSBeEzivGrRXcYm3waDSX5H8ibk2vSkKpRjfiQrZk8m1VtUcOWigxQNHSPOfSTnrPObhdOh+t04fr0OgbNfql6NQBp/2jFTa/MbtLYAfVciqe+0DAIhKh8+swWQfDk1CYVJd9kmk/vxfYAbyV+SxsJ0JTbzyWr4jr+CWgOp8vFh/kNZHW8vs37O8PRt3TeWK0Yfa30a+6B3aLhfn2rdmIAw74ncGhQD/ggAMOOOB62Mt0qRCyCpTQCwHPZyAl/Pv5CX+++yDnqJvl+VkKPOkWfHnAGYxHQeCv6xMYjFW4wYyi3Ftk07Wey8bzLPd/3d0tABFeX84Ft0U2EqsKHYKAJJ7gVObUbcI13AhaXvxm7+50j1ci4Oks+cLwwIYpnsoYRYk+b+z98uM9cKusc5G019y5/V5lj2CP5fme8p6fTGQDKliId62/yvsd5A5mKePmO85vAJq+jMPs5jjJXEiEh+UOP6N4cChV4HrNwiUYkYpCFvzusMSz/8bV0dhtqG90HJn5G2S3voAoaBnhtg1WHGVz82K4t0HnynGEgbUusTSKbVuoggg3zrOBYM1t8lOLVi3FbytLLdKrNboVjjmvISrQ08kmfacC3GqqTTUJccZ9ekTXS8StDlpN/2CS+N72cjiq2ZmLPcOvl0TX4w1qbZV8lGY0pVco2HQ6L4zgd2j55JB05e+CkSS415jeVgyHF6MEcL/2/tLa/9ln4wSpVqhr5pETAsc6cHgMeeRhTI/rrH68EQfsBKDctbeMczfYPN7MRYlR2q/Z+/3dJK/1jlegDon2BNUJ+tfPdVMoU0g/ENxWS8DQXxzijYrZg4t1hVyvMPF5k++mfeAOEhGqayJzqNTh+mrLRqDbJq93WWS4PyM4ivNAA088WWii3v+cDe9MTZlewTKro1Vy9H7TYnUD2LLCZIgo2L50yUJ6Ns82k2m/7anrHs5kTx5bEJXoMd015V+Db4z7HnWdlTMLUh4jjgH51i3O8MNaSmqo5wAAIABJREFU05MSXL9vzPlcXIu/ZoAymBKYZANFVJSIuAPRCaAFjBOKRfMi6JkDHdUdr6GLDAwVLrub0RLy9sxSdsVTeDySNtMrlrQwRhY+ZAHlolBOYOScy+E+VexKvlks+ZmbMtgdW9F6Bnrcpp6mB1SZDuLmtai2AwG0ACkDrFf/kLHfJ7BYp698HqzxABM33jLyCDUf/WrXtXCIazoMNaDxO4Va3oHy17K266mLnIH1DFIlOueiRM9n47Ye6K2OOfzG8ims6cGKvQ5AbPA0l8CMU0pyikTWBVqA9WWC35Xgqs0BX57HvamsDf5Of7o9xDSz68qeeoq6oVLdaRmIYtznX4+p3jwGDrgZDKtlvay14cXm6gb28/norgMOuAoOBfoBBxzwHWBLcDJ6j/EO+CFgl/ziC8A/TZh38y0qojPjT8s9znnFkhannCtbvZZXQrE6tzepLUQ1ntqwLkRYo5KICEtKSJTwSsX8/H45YeWMVe+wU1duOeCrYc4qjPwmSZnXrt7AQgnrckKmM5zw1w17Fcy4pAaiO/dvDLeUo/qra8AKHqog4rcEUTAaxsDCZlyMBIO3wA30kcyDUwroZxn7ojhHIixpwScqynM9AyDiv2ohwqOspkiYOUnNa8Se+mg5KrZ0yvM4Vu3+nsJ7pj6uQW+Ec3OC2ePa24e0rCj8lepbvMnoIweFx/kwiFKFczAbY3P/eYvEXTN/gnebfhXEjq8CTWrvWrnejP6dwNJpxYNRemSp35mqM9HyTYKZCExJ8EsNV6riB7AbXKEB3et4HDtbty7KhYGo7kUtCSER7Jo0djktyUWYtYXuANOSlI2nDyNp6SxWDO6XFMbDsIHAMnxjNIFcfea1Cj+55qNjPU4WNtbVFqeQRq3JXZ0GFemETztsaXbUc5AIjlLYcXO5QBQhd4J32Wrwt0LwDgj2MMK+MkPca+NPB6bMWY4R2dMXi+NW23ZjZBYvrukIB78a1W1ZB+vGYeF9vqg5kRdWT9uEw69mewNP8CBpn22nTfKx12I7vrcu6B4n+/5Wvm7MVnfF7AN2P2X+s6++5dcMneGYhx2bIxwY3VyqudT18keH6M59hPPmJN6GvZaQI0ZziMelSG/AtYKdr8I7gGDuVEFhMAQfOSNDSa9LV24yg1MqSlw9tHo6AXQHLPegdAfCCYyT3Ju+ALlYprf1UGm7ToS4Bpr22GBl/DeGzyuuy62sophu950noLyz4qhK8hXES7GSVqX5Kvdz131EUf5SNgp0rZ+dkiBYvbXy1u3cSluvK/dQ9zySMKnXDGpbH0AU4toclnuPE5wxUkazbbdKO2xzcl2+xsCh2RnlSgC7hotyHLkom1d5X9dyKGFVd+1x/afJ+sjmf/tN9xFm9+f4CBP1LfR9CGUuUF5RD0JswYjPGr3XsTGI5PIgXH9Cblb4LNoemnZj8SML93nX92BZkW6/0QL7ZmdllsJewmYtviLVQwPNxuUBW2DbllXuakh97dvMyHrA/GjmAw54ExwK9AMOOOAbQ+SqfwvCggOuAis3G8pVlDkGqsmO28SXh7+cn/Gnhw+gnPGYlpr86/kJAOGnUxHglHPJhK+vTwABfzg9gAD81/m5KLFyyfzTfZH2sWT15bmYzPwzlfgfHxb8x/MTXl7FzZkwond3Jywp4ZwzFiI8P7945j7elR4Z/64tSjgR4Q6pGO7EOI6hvSQN/ADgaTtaFAC+Ba4VTjK8a/wfBe5l3EVLcZo8Wxj1ld55/jSKtJXn1mR5B3DZ3s2Q6BPYKAlyF2DCz3TCgnaDYgawIjvK7nI3mzjrzMEpjQ0Z8G3RrM9jc1P4xSBOF6BI2IMBLqHJvRMs9sKTWI4a/YiDbPBkUnPNtJ0Ib/VprTM+dxLGyiWZiArJOiGc4HDRhecgZ0urR8t5tdSCER4HwsEhL5t+B8zvRrejxUBGEUpDhaRclc76P2fCeckALTiB8PP9hzpefqEMAiG/vrZyXFfoi9SzelYJawE12aev80Qgq0NRm2tl8eZKcs+omVgxKx71r0qZRwJSn4XDhLvB4/Gsh9OiFPUGEGHsUIQrwlp3b6lVdker8SoUZXRC3oh/LTT+jpM0fG6pJC6XYcoJj+0Lj0N8NC5yMipX3WQWDz0VdzZ//rGFkw/fC9O4FxiJOrdknm1S/I3yquJ7J3KbfcEd2tXHw5R2XRogo3kViEPMu5K4mCbQmotlb8CjpHvSPKRQdemu2T5z0aU+osVn+AZh83BnvncHay0NtWkHfbhzzuyGKSEUfBhwiu9dE58Hr6HP3L5By9xC6FtBtyBdgJkl+q3lfmvYogPvCRT+kqNfRBnEhqs11tbF+jmhKCeLtTmWOyDdg+7uQMs9kBYU6/MEzqms8bxUbrOuhw6fsMboOr219XDk1q4P2dVHgRWDrNwrG+U5kIiqApzziswraCVQPpdvzFU5zqu9t7u0T7FMN1ek2KYerJGjqTaso64xVI7ik/BHBPJWtVzWTzBfYJmFJzN8UGtiw2N0a2zYJ4xYGECcaGk+RomefyltlIvinMUCna0yvR6QqxfAS7655UXybpF0vLocxHMMkKu+R343TOhPOukJE+BukQMWQaDwHvzIiJ5fUsC/C4x2trPB+ob13BbxxjjeDfucH+v2DHZfOMoXhxL93SCwy06Gkkvf1INMRxMfcMCb4FCgH3DAAT8wXLvBP+Cbgd6DbjffU/mEWqEPgjQNown6jZLq5XzG37Dif6WPIY3n+FReZ7NLZIzGmXAvCDyryNPcu6zwx7t7/PX84iqim4WFCEmVb4B42jTMZ1Squ11vqDcRHkH42lkXqfIlNlT43jG8O5XoCm9lmKd4vBeYwRQPKsSY28Hvhob7NoR7GO15yGCDdtVgRnVvfQ28xyZzVmaVAxbl+X1a5NbzVqMs/9xJ5qjPq+9bjUnmqyrO+wynQzxMtc6IKc61+M7mW1R6av6hHiImVLEiVIw4BrZoms8trybXDPfrBmUEd+0WhZkmjKL7++apw7Wle9kY+FEoOaMrzFK3jOLalFGtX6x8boT47jlQIta70Ss+E2VL9fSh/5UEOt7AhJzPeE2MU3qEKs9J8XdNHUdiHPSj+pQ8XLXl5IiOdeZm525kt4P8g/WjueC9CIH1u8ePqsAkrj0BdJxFgegWqTFWXi7fblJOM+h/XdEmfwacALkqDiKuIa8Oh1E4h7K5fuqwqcl30GAbZ4/gajDlLgT0IPxPIVJZDjwxvFCcB/gM2imOhUsQu3Mz0uhVJ7QK7Jsz3eoC+SpE9n6fROumvKy94jVEP7l09QLfWd62XYOQfMA3dtqbGOdBwl8s4jY8MG/R9brSjS7firCnow/k0836xNEE6uNO588b+24TRmuaWT0rrSaUU0+e1+IujcSzc2mKZhz3ts2/BTP7LUCV6LYv9fmNdbC05r2Y+12bhVs2NzpQ7IJn/+CUTk19bjg9hvBJC0Cn8pfuQOm+KM6puG5nLOWPqfAKnECcDHdp6cioHhO6bpukHn4MdMjxMzp3TFmioGVwu7mBwgFYzsi8Ip9XYGWkc1lJWfnC6mo8t3ewuf8crR9TgttrX7MWE5X2FiV5IiCJly2iBHdlDxeleFHq5dJn7vBPpPFtH9CUiOZeFF1+t5bcTnnbaFXbcei6nQE+gdevxupcXbjrr73nnM0QMcgM207qWXkrHa+zK7smbc8Xwi1UGUsquBPJvecJWC/eKbIbpanleeTTGmLXl30xLfvw93S13iV9jzWzQKVg1uLZNVsYT5Pqa/p6RzoGSvQDLsLIqh9AnbJkaRXbv++F4QEH/H7hUKAfcMABBxzwdrB7eIofN56rwLE8/+38CpwSnvOKB7FCf7x7BDexAxYADMKHk5rAlGz+ZfkAAPg7VjAz/ussd2bpvk8y+PeXXwAAf77/CEqEf7v/WPPI4GLADsZnPoOI8K+PP4EA/Pvzl5LBnWzyVm4C1Zq/1qvnUv/6RWwoTyT3g9uN1ECAadsrCnJLy2BbiW4+vtf+bChrChvC7wWLlLleqIiipXehqwD4uY07F+8SaHs/zTb2YUP8UpRyOFkFVtQ0xfQbMBIW3brpdGioEIOAVJTnH9RCQ7BaRXnOWJ0Q4n8k9c924xZQ6sUEzS16iz62Ph+n70nOsOWsVUlVmAfhkMzj6I1RRIMigrLCSurKYvN/xNHHaOU2t/DX33rgc22lEZG7l7G40NNhYwQU9R5PfR5muA8BrUQzmzbfzN+lPOJzFwnQ9v8MUw8aWKUHayIn5CepMsnd6GBx5a7KczLJqXooZjvPnLUF+fYEyhirbWDWCUkSx7Y+xKrX5s00XCP8YRWxUnfWNeFwBsg4EmhY1CTWRfWesfAtLEacMI6bxV61qFL8rCAY6BAeWseb+EF5Xtsk2/g3VyKUczn6OJYJuILM/z3bwWT4oD2ImJ/d8F7DoM5/uxIAV1W+yxDvg5+1kuoWHbt4xIUkdG7k2erBI2qBF9d0GbeWDRklUT7ncRAGlDOAjKYwt/zRAzwehP7M4HBwKv7cFPvWR/Iguk83qMve8asLqZvulm70YPcXncvemmxyx6/F3dKgXbRzR5zvk8kVYJXoQL9wTxfwAJafek/4XvsQCn99GAk/XM9hE6NchCSKXCrKcxLFubpsR1oAJLD+cbNqL+8RB/brNsLBMs/U9qQqoj6kZWxeCU4pQyyW0uLIXpToK6PwIucMnM/AOSOfzVxkyL28ud3NO1rrlexmNPqr8222viq9qbUobU5IoERIVXG+gGgRClAuh2u6Jjl8SlyMsDvmzLexVSI2/moyxm0fjpTn4VOCtCXnYkmavwJ8Fiv0c7M6t8pzbSfbZlp4pVU6duzhxLXhkRnOAn1ciR0Q4w52bdkQ+bQAr899usDGkXnusBmix7OAwTh6K32a7Uw3d6wh7HvRs8swc3xV4ca9QKdEP+ANIGOW2pJQZja7oS/bX7e9OFr+gAP2waFAP+CA3bCH0bEQWYvRJuu3AD/CknotDrN2fs+6/Bb78o2gVugWpvuLYIVu4zk5i7zUcAbWDKKMM4BTUvvXqAIoYG2S2oxjENWtbw+qFDFpVOaWZDOr+ZLddKbClN6npcgEz+fQFsqZUttpjDYDaQFohVe4qFC23zhLRr7mNd8HDCSa7wiTOdPtnN4Cg80kjQaOx4lVQcAYxOmiN9DOje7GBnjNZdhXzv+RJcxuhcYEEk1lZEOY9VmnoyAsokRMENsHsTLJYPwCeeZ2dkGmBr6C8LHKv/s26nqTVZ0sqmpiERpGdK0SsNrutukQM1daQjaXIKjSOKyly/6S7JBikdqlVk58GtE1W8VouWI2tmVbW8KytFgsKWTWf+piGyW61kMFTLU9bpy8Vlo1wqsSTlMMUxOOsrWGj4oS8vlVZZLlnTi8j+ahhFdrI4NPXWt8HgzCq6wEOubvcEJCwhPWYvlFHgtraerJvFlVqkWXGQMc4/Hk3TQHUqBF7eWi0UaVlNiU5EggGcS4niKJgl0rpRQ84yECfb5El6KC3GZj11wdN4jxJ+ljgUOBqKmHpG/R2NfPTZ5YxGytNnH20Hhb5DBwsE45YbjFF8BC+Jz8p25YEQrR1j6OAvurSAR33d8KuRK64dStGH18jn2kdaE+7h6wFt+zPoHNf4afznf11GIHg21vbn+MRldY56Atk/vi3bsdLxOIwdXS3NSDYCzXseN0Vxxs5OtXedy0QazYxMWgWXcPSJ9eLScJfqzor3zyuYe536HA5pCN6aPYNy7RBv5zAnAB6KZp5guOhOHK8ivu1/LEG/Nn1hRTa81rodC+rhgOD5cOsbi1ojxTPQijVuIJoFwO5yVR2KYEXgjFhfup/C13QLoDlhOAE5jkzvOquU1idZgM7qO+48D3TvA2dK5jUQmGDwhLUDl5WPkIIIM4170yEzeX4+sKrGdwPlcFOs7mIIpaoet75qZANx6uCmkz65WCWqlbulf7rFmb63dCAtGCJP2AlKRPCr+pvDjXSpc2qEWmSCzC2uP4c9OoGlbbMaxX7cWMSlMnXgFeQXI/PPIZvJ7FbfsqVudrdeeu+RJaHQDZ5YxoTTdUKJAGnsTT7zMad4mmmfZJi7huJ+DurtSJY7lDYr1R5iBu7ANM3of53QqjPK5tq/coUyGs9Vs8TA2nLl7jXOL6P8KmHBcfKcjnXtx2wKzfbl0mrlXg240UcN1a3q0vHRM9CG4tTnZ/G8Ad5rGu2wdZX1gtDjjggACHAv2AA66CPUzQCAhiLvkPCD3TtR/san9BSHVVnnu+ad4zAf0BHdi9GsWPgJf0h81lcOf+F37Fv+Y7nAGsqShdns7lLtqfTo81NQF45hcAQKKypL2sZzCAfxEL9b+8Pkl42Zs/LKmyoFk2mRnAAoKKKk4g/Of5DICRTxmJUj3V/bK+wFsgmY17HEojd9uv5XQ3fbgvbteerSKegDRidKVhNzldeiMnvHcDaaUa+umN87zbSEw4/Qpmg2/vrLR4dX0hvy8THEbtPZv/tp27KCJtvqPSLq8SUY1CVhMtwwvsYwVo8FlfuImxVNjTVeEaMPLMRIQPhv4V1Jvysyi5c5EnSSwiVfLNNoWoOBIY7Q6+ZjJmrby1JJsDVyEdFbnisBgjVJ5Z05o5yTL/mRp+Vhjg3/Ur9eOsDsEoCBult2i3+hYRmXdc7KoWxqS+FXulIgBs3tK51p9IMcsgUQgPBQUjQdomDARrVfkt6Vnz0XsXNVtr0mPxkXGXm2CzgMSPjSK/n/WFgE+JatrSrcWyqDRMuUe03XeZQExY11esdEZKhET3WHASpfpSDlZ1zdHGqxUg+d4v30m8qTgvB6x3S2qVuTafs74qk2vMubBdYloMCg3EyacuRdg1jOr6RWo9VcONNVstJ4ztKtiRX4ePWRs6hbepJ1v8G7VhG9YpziPdjnMuzN5OAQ+Pi/swWoPYB7t3hp9TYmk4xK3Eb83EIZrQx6EFvcfls/1EaNPK0ieGn18JuEt3SCC84hU5c8hEf0ejboKLg3fgkQeHhaZFdnFvLJ91XUIY00p3DJ1iFBoSm25owTxpL6esl7zV+u+FTbnw9MDyO3IFBBOjuB0PZQBFSX6WtPcBlSfJ70O5Eziex6zC7Q8yHtTVxxcbS/jWKdh1S58jIZf0t3h/GB56GOQx5E/QiKiipmtWzSK3ADvfAXN3s6nHsM8jRLp3ZZ0BlJV/tDZFmARStFRGGL8zvv4ZvUsDS+/3QMx7XzrLL23DBk2iwbwaJdnAosbPAGgFIPtESmAmMFYAqRxaJJKuItDpBCwPcpC6rBG8LOAk95/TCVjKveflPvUyLxMlJDmAUnSxLEPW+kkCQOwPdSq+OkyYoapiskGa3A5zZVbqIVMCV3wIhLXMivUMzq9Afi3u2sFy45m5j3sVK+nz2soT/P2cavMhngOglaQ9REnPalsZeIVauUWeEzgtAIqrfKaiOGdaZGk0rvWp/ZLOaxbrcg5jnIG6f3G8SJzTVPZ96mkk8CFExfq2eCjQwwi51Wo9g19f5F54BvMZvL6KsvzcrPjZ3G0OHebed5aGuetxap3IXFNHPjzSKW47jWGdt9gHFx9GeQ7gdALlDKxnsScwGVW82OfiDA/8qUW3TWSv6rXfL+J4E+zJN2L01jIn+bpDwxZma4N3ucBBRuNHkZSl/eD2bTaNr9tv39qcG72R14vdt7XMWQ9ElYcYZCrRWN1+6FWAhq6w0qzM/RVq7HOMTnsOOOCAbTgU6Acc8F3grcvSOwijflV4C/627Ub58OT794aIw++YFYlNPu2C0V3oEtkKqpwVunB254z/c7cC6yv+nD4iK8dHPiegCDHXNWNZylbxIxG+DrAhIvwBwJJSTVz4UKpbVZuvxlD3UpIJ3EGAqsGQlCPrcydkbbnfpQUvnUWsee6GEE3C7AfasXEdlOc2qDdAJ7C5Nu218/gSXbgGRkjfRlfIPV0WDrIelpjhY9FoA7781LmToN4LRlvWGZLDU98ibALKHPoIHcblsMkTmtKn2qC4Ow8TngA8VjGnL7OhZSdywb1Zf7A5Z2OFO61GtNU/US7fld3qrYrztrdsudfNqEjx3N2VknGTM/Vt6XrDkIIqaHDxrMKQkLVtQU4fFqtCXQ6ljCx0oPw2YkcqAOU8kkUNc6931oXahWioNLwGX+oIYGxRRnAW6Ho4Ry/Z7LI0cUUwrsr0n8P3GFfvQWdVqIs8JKdcRjwXa7JC5g2eDm+CCu2cJbOWB7TxrpZZJN8cibD5h/Yadf4GsdWxpyN3CGad4tCfxF485gU5Nq6+B+T2rkEDRXg32mb5dMrzSZJoxcQhojfDH+AXM47lsrGa8+BJt2kUlj6aWUFlpQRh1l0SOMo4OdECIONc7y01/BWKG+GfcMIC4O/EeKGXhu01Qs3NqNOO63EeroG2w65Zi9/CD0zWXsd/am+W/uvuBLVpZnlPvwe6ase4G0xablxjQvqH0Lg2L036oPmNsetpiNAtGuAd6RbQaK8ll2YNLT+TNtgFs4m9FRfjYVVxIxOBBxGUbiHUJQtd36ApWvgI7WthiubWHLADKdBvN4Y89fLfZnnGhWovHjPwuLSpxTuynkdwJY8OOe8Bu3Zw2SXq1LCsUFVw4ASkBKYTaLkHpVOJk5bytyztWbk+wyc3liNLrzm/SZVD9Wt5a6fK9mS5iV1ZIah3HcW/RGThEdUSnTiZ80Xc1n61ej6fkdczkM8gZGRQ46H0Xu6z/LqpGtZnRd2GSRv7Q2WNd6jHFSuPpzkI3yiHFVis/4vrfDnsQI1frldKkV7tA1+WdXlX0Wg4Ku/SnYlRS3tu/QW0HY8eagBnEK9gOWzKokjHeQXO0pa8itv2O4BfW75Vwd8UyJFN6drXfuYQOju8tzVXRuRyGlHjEsgozwECzi+N92ET/+KaOqC7dp7qh2vm+1vYiSG8heBfW462h+2Y9tzuI49py9yJ92z7aRvmoV2LCF3aDrsLfRDvSv91YT8OF1e1Xeys0rALc035MMdbcRvzln8c8BsWlXcf5gcc8DuGQ4F+wAEHHHDA+4EV5lD8eOk7e+HT+QycTsh5xZIWfLrzFg/nKiogPCx3OMvG8UN6wEcAX9Yn/E8G/nxX7kb/uhbTmkfcgQj4fH4GAXg8PVSUVjDUafz/c/cBDOB/v36FM/WzAhci/MvjRzAY//n1Fyfw0HgPHx5BRHj65SvsxjRBXS2rtEU3IdKAJ2mXFT24jar64Hzy4cA1fL9Pd0taxT+y4jEfZfwvubcl87eitAcBeO2LHXL/s2O1e9vGygLNXrR+0+EYr0K/k0iv7MsIHv9dOUNcLiGqgoA1xA9xLsEsGUHEYISvsIKZJmhrTWQ7q8tmln14t0LAhrvmH/d/b9nwaXc2Ww0VRvrO6JXmsUWnAUMkOYwjFaC5ssCuzlGuRYz4tcYu04rkCovyW6yvRUCnbiq1q+Kl79dA7UQjLd4UmhRXpjWhoxVG8tL1LKFOZpYybPTqBkElwlTx+Fy/l7tEAcIna32GlkZHG4OANSPRqwiPqaAe1yugusT3R1cGBMc281AgxKENTYKZ++RR3w1I71bvOqxvllONxhCHz0HY1mE4EYQO0/voPHjqsq/v5kNXpF2/eIrSEP1h/3sq1x9kCG3CtDkfP09DBAh13LMeCazN6+ucqFzPkUD4iDRwyrJjMGxG2QrkzdfWblZbMYq8cwW4VljejbldhZgMYvJJfWtZ2kmW/vEAnwBqSV75D4mo7OALyj3m0VBYUewszQP5/knG0hfJ9ysXhbxendO5fjf019Fx8zziZd8FLP0M83uyXtqkY0bPRZBH7qPVUxOmzy6WN4IbOJoZg3Vt+iFOlzitclTyujSjuLM087xuW6psquL9hRCPKO3NisO4Um8jZT9XeCx1IZ7QLKFP8u0EpDuxOk7gpEpe3eSQo9sMRibGguKOd2XZTHTrvcGrskIESoajlJtlSPgg9RzVvAFzraJeX8S5KHMzA5xFbU8ZiTMor+Dzivx6BvNaFOgMLIRiBYlcFL56L3ceHOkb8kZmZTfrth5obxSzHSVofGWCKsiLspzKr/FMVN22V/ftpXwGOYPmlrelK5NRY+uh8ewabOYryRGDyuVnBrCC8wrmFVmVynltf2phXhXl2+vseOkbMTIGx1n4jbPuMggBWuRQw/kFyi11ztkaoh6nnWv2m1yFfzMYrTnvAW/Y210Arzw/4NuB9mHoy7es+QcccMCb4VCgH3DAAQccsB/0HvTdghu1Qh8ksHyhU54bhQwzKGesAJbUrkHwormEMzLusOAMri6QExH+kNjEbUxoj43eP2wF3lbPQl5QZpTo7q5nFWJXIQbhzFlsvXxeRIQTpaIPJsALzyX/ro2NoG/P/sjKBa+F99p/TfQrF0H3lVu6qWvyuxYu5bkZvhMhK2RRiNccuDAYoRo1edEtUJVFMDJvVcAwwBlPk0GgyvPmfr3l9QjCE7iKVpsgxAvH2hTh+k5yqYKKyTTPplrH0MV5ebncEjz8s29AcVdpE1FN6+rAO3qZA55Wr9Cyhi1BRYIti16wrNaPHahcEOU3EcTCRnKnybSezvVJm1b6HCtkChmmt/GDC/cq8VVX7eHZJdcwCU/6zEVQatKTCLKbUBvmneoA5XCPezUqrqTb0GYzLus0ZZ2P/erCzEavYtYQl68pp64HgHpoqGXbMeUnwHhMRDkpsw8aLCW1idmPxTlM6rK1/kRlVMC9K7daqwN6Pyrr946+2Iz7vDu6W9faQXwrnLVyw4nl3KgOLYsJjsM8DP6XoE6fMvZWda+qeHqCVtU9Ccbz9oZF/xC1WeRNMnxNARsLfz/F3gduOEVilTtuIo2EzG6MTTJsk28c5z7SQhvmEDN5hogjek/srb1sPR5Cem3/mE/1zhRxl/R24Y5tvWP9HkIOD25sUqAPtDmsHMzCMpu5H/uY0JupDhs74Pp1abw7AAAgAElEQVTOg9m1bc8/bL0OMpvkQSinNx4Gcfq1cruIGRJmPIG2q3UNWJpu85nyLYqjjm1Lt82YqgdIyoVghf6rO3Yqv6TK8zth0hKwFOvo5nUHvk0o12GccQbw2pg8NxFNfQhAKoe0nUflrHyW5TpJmrrwQdU9PJNYnRMyq0K2lMOcseYVtL6Cz6/iov0V4LXEIFn/OBer81WV6JMOCXVuLsZth+XOPX27RkfrZdpFLfoplfvOF7U6L/Vv3qcMt1GHcli73Zun4Z0DDadA5/bOJXJBUfxMqVk/r8Xqn4sSvSjMtf1WQ3cyqht4vgf4qY3HikMbnwx4a+DN5cfQNvd59E3jT8L3QDoB+SzzYAGv5zJWEJfSS/nfWP4Ibl2HfiQY0rG+Xs0ORGiB8cY0agXfD4M2/wZtd9ESPXp8/C3CZh0ITX4a6Lt7MDQG7dMe+A233AEH/CpwKNAPOOCAAw54O2zJWLq4DK88aEqMKvDS3dN5xcsp4R4JZ15xR0uVl73yK5jLXZ4syvN7JJzBeAXjIRUTma/rM8DAw+nebX8fTiX8FSvEqR0yGOu53Hz78fQABvAvd48AGH9bX4rlFhESJXx5Kfn+5alcBvl/ffiIZwBfnp7c7m99ehkY3hDOecVrXoGHuyJ8eG2bF+g+2b6PwIU9mgZ/6uMBt3HKW+Vfk8fs20S2GGUVUwvuGWi6k2R4lg9qsTpxu9ulr3iFSgzvUkfrx5KoD1eF3GreVe7aIRAmkXv9FtueuHPuO6fanRPjUSLHWn6oCsbyP0tKm1+Z5qq4VBfmhKoI1QwIJqyAiqjt3xbw4K9hVgrpWpONEM/UvyrYr5AVcHzQZhahLIc2t6+lrs3aPxGKi+1uIy2vVUDXwhKh2rt0Fs41Ew6fR0LkPbX19QzY1V+OPeisx8V6yAh628kAvRtdleeLj9MaogisE0AoAlQQ8NlZIJUsPiVZgxJqmQxqLvdd1cOTFlmN5AfCEIbrD4A8/XEuFvWbWQ9ciVEotqNTtoQqM9lofN4ohtzTBfrXFRSlPg1qE2lbZhUMs5WujjJt8WJYFfhyqGgkwNy/TtsujhF921N/D59NYePUk44opwbhFYnxd4SnCY9pRpE4vN8KF5NOicg7FGD7OhJQs/aMYIuXql0+GdOXBNBAUXBFq2YLL0oXAt5qEf5sngHgK3wVPwrd+ynka+80JwBfuCjOo/Jcw90pNhtHF20GmBq/tZowXWvcgkgt+V6IxKk7TDObsNR+oiva2nU6lwb0PNJvGz48GEX48QT8b8VH00cluv7u4cwQ2j8CFbpMNt89sB2vcXx01XLV6N9AEUyFN9SrYSovS2qBvgBYQHQC6A6ge1Ci4lI8JWRKehFMqbOOY0LhOSkXJTZWAK/CzySZOnLQzeKUAEoJlBipespBHdvVXTnatKmkT5fYTMXinAlc+XKW+hfX7LyuTXm+rvUua9b5zShXBq3ZuDGPzRro4vBwmpQbvvQ0RHk7VZ4vpa3SyTyL/Tej3CNcy5F2YjMuWLvBXLM0c49s8XeKcwaycrylT5Mowks0UZ7ns7E4N9bmdjwAjVdhVabru6FfFTcGJzQlumtq085XkwNTt1uAUlOen+7kkMXWJv9CObfgf3viN8CvsQ6MNosj+kzyv1mPh/CjrWX/KGB5Jwz6KBDw8HkGR28ecMB1cCjQDzjggAMOuA4uWaF330dW6EZ4Yb87GUxh6/57fcUfAfxPYvzbsiCCupluzwkJEFvWovDObMUFDcoWgsxz+66oJDSFGRG1+Km4tlPhWALhAcCX6Ordunw3BZMocRYirDmWHJ47WepWGFCU6U/x47bwdwQjtH44uCBYu0bu9j1gpGNiQAZtEMRayUYQgIiAanowG3S53lahJ4Il4mRk4s3C/NHNFEGEJrhV0HmejdBSqkhc9QTE7K4yKDKtUn8CFSEXMqzFexXTknUl7/eUHP7gnstTfTYeIFgnvMlops66HkRIZxQPthtaK5WC1WWl9gWxv6+WI1pUs5ExUFrKiUyvqcpwfF2YbxqHgaqotoL1iqAImd13cbvZCUQlryRjgBaQsSZq8dRtp7hNRROaunjGnedniGv3NqgEfYPrJgEM7ar1tjTajC3q0rIfuGPflQ6FStbiYbQZTRhYntfSY3xr/e7qNRJsmzFI8cN2HZoQtn1nLSdaecYJHBUvNd9+pruyXXBX8fA6qO+sDWL4bMwwUO9KBuA9z4THPZZXjHIIaykebRgZq227QRbnlzNOD+Vg4GeswMqD9tso08JsrLpRfi3zYBnBkGekzVfnewG2staDF6RrEmp/+wNibsCEzEdWmEoDAK/An+XZcQUNHuKHhqMvL2RWrRvl/VH5VstHcFOIR9wrvdaoblXuacgY+wvtP/hWm8gSkUC3ZhmP+mF26Kb2XRz/G4jVTmKT94xw3ADDNrUBowJGDTwdTeN42h617k+4WoneDevhouXzs7Rmtsa4BW1WH39ZULduxWTOGlyTcR9R+A2mRSzKAajCPC2gtIDSnRSjltGljSr9YJN/bb7cwmkFUgYSIy3NwjwzkM3BMKIkZw0ZSMW7RLQg1WKYyz3c0GpJlYteNgEsrUUZ5SSMrs+qPFcL8xVVmUvCyTKK2/a6t5lYodv1nO2vi4Tx1R7UgiuPJz5WSNqdUj10UB2nt//G+RmGrhwh0HbMcrCA3ZBsQ4PFYjzXQ3/EVoEuNu+cxT1+cdte74pnddculeoOHmg7MMD3KPPP9F+sUh2vBr9RO2/RoisUcl2cbhpSGyenEzgzcDZ3s/HoQq0rwNVnz5p/Kz/xI4MSD0MLLywFVPc6PmBoee5o4g/QflOPXr8GbOBycYkNBKX2iXk3XUT2cJSmtzTgQnP8CK11wAG/NTgU6AcccMABB7wPWHlClKPgC5zJyzQuY+TK/a/rGf9EC/59fcL/vRS71490DxDwJT+DAdyn+2J9fn4CQPhwekAG4zHdAwn4ZS2XRf60lDvPX5GRQFiQwNArxwl0uq9qw+YumvD/s/emW5LbuLroB0XkULb79OTuPmft93+0u/Z2u+3ebmdVZWaEiPuDAAmCoKSIzKzBFmplhURxACcQBAjw/0y3YDB+fn6qeAP4y909nsB4BGPmhLvbGzCA56fnWrFAif78MbteK9bpIWO9tIV0AqAumr+f8IV3pG+Wh68Ir9bKvnbHPNqYJNNG9n0NFmR/IailVncnuoxjPVyvv/6O+wPQGHkUJAb4qoD6Ngu4rrtfVISgRZk44UgTJhDegUDNBcy2QYwwBraZqPmq96ffw2zyGFAFEhP3ynOobVCeN3p/N5djMYCqzO1eMrry3jalf+5BSvVyIm5ruATsnoZT2iHRuKUkbtqT7d3zkDsbXXbNcJHfCRAlD0meqgCYQJTEv7tY29gifGU2Vd0Tc5eoNL5BsLE0B4oinWyPqrU5tcKEaSoCUYIo0YsQVS2zCExTOahU/yaTXy3vockjl/NdUbojGDQD6YQV7FNN2MmHNYpavTcCzvzetCK7B/KjzK0HIc4Buguks4AfH4N8qSDW0oduEhaLclSBD9A2Eri+j743/bWCXClbBc8+XlBemBsPi+jKC3GwzA/wUPK7cOFrBhFwQ0d8Swd8wIw5ySLTeTWp6f7nUW9V5zieT8TufYiMIDT8tgVGc0vzdpWPyrqKj3hBulfJwMxfp6CvHwbj/MlEsSB3mUPvMn8fTPjS3FwV8GmqeJRDUBrZCHQLHu5ilY4GaTgDDV8R4G3rPJk5rny0XZvKnGL3zJmO2nzNlR2bmTtLe5INtLRiNN5lze0QhsE3aIvNiDWbrFpEhP/o+1Lc1Xi2bO/6IIqzUNaw7EE9EWVr6RStdLFbP7by+oVW6+5QeF6q/VrVf/Yw3xE0HUF0NAr2ynMUq2YdW5ocOv2ytTImBogxHalcG00EqG67WFUb1glgJE5InOR4ueDJUq4YMpeGMEM0Yyi7YCIw5UK4jGtR+KZ6xznAcrCVS5SpTJ+Irtu5FK3NCjN6BXrE/Ve+jmjKFvh0AOuBS4uFbXO7Nhc+O/9OzJiQsvKcte2sZbgcT5U2yIfruSrSoWp7bXtGcdfOxupcLc89jWn4Bh1/CnfIrkYGa0O3djNi3ipYdztr1hE/fAXc3AAgIJ1qhn4D9qJy2PC3NrPXQP5rgYiw+flzEfFbmJ87vA2Y/a/hw8jJAuoeh9uh/uJ5tMMOO1jYFeg77LDDDjtcDiMr9CVBhBdcqXV2l9Bs4o01zi/M+DuOeEon3E03JmMvUEW56tbeaa6WqnWLXb95NeEMxhE1fuVbnaCKqyrvFsATTdkaQC3TA/dwLURhPlhewnYNlCaXwAWKlldJ93uFyEUzMJaHhzqCwdjhFCQQwRhaa+U2PyMoEqvdG5owYcI3OGAyM4RLIrHcQL2nLoKMTcXpEXKcQ4RN/h7mekd6vjcyTy3KynWdYQQ0dgmtT2wkh0zUrNVlu8G0KPuo+VRxJPer+azDKJbd+DZoe/kw2Q+t4I/cc/lGNmalYGR7xJT/cJH02Jdm0oUWYZGghmr8SaS81gq9SI6ri9JWiS5KcVGis09b7kaXEynF3bvPpwpZ29+a1QMD35Xu9wsdXAczeuW5i980jfaSKMobRX31FlAvL/DCYcjEkX7ovEHwcHnZCkR0mayszONg/nSC2EBQazPqhOo1b/PBhAczvouuvIXDIyKtHhqrrdF3V6YfJ64ODyGi46CurCZ6/vcdjvg5uu9kMb+lMpzQlKLwMINx5otjSgmYvcNG03RSxA0Z27DopJB4NSJTjy4bN6Ys7ypK2vU1wX9fiE8mjqcjS6T6js0BPlOXTtAq36y+s6PfZv56Jf6k7xOKQrxR8Di6Whd5kzeZNI5QWbrWgaVrfq6PxuISEKpSzq6ZDt9k8OmKGLWdfCvZ2fw13TWMuyumW5pc+U2aC9tn1ZuIzU8t0T2PEPTlReuKzLdCg1w/NHxSv8Z4RUNtApPfcLhx0JwRHbK8g9Cwicod52qBnrXe9tqebMWsl4hpYZnFocb1NhMjIWUlNghEXCzQ83TLA02XftK6Mmcr36T8xNQrz0s9bX2Ndydp/7IDYFESF1fjqSqAgTLfSellyvj5pod/d+toO7RHa0pCpuNc62Hza5Z9T6n9Gp3cWNCHGfkQA4PksEBVoEt7K4tQ2kPpRj7dwFqQtgkbi/M01zZkV/kRbSsDOaEq0R3aQn/aaa+I+nz6uRO+Lyzti+EAQIdcT/UmOJ+K2//a96Wl2sqs0a7B537f93sGcr/2S/1Wh4br7M+kPF+9C/1rgq0W+7rWlDWFy2+nPAeyF5G0QGN32GGHV4Fdgb7DDjvssMPbQCQ76YQUurMFqvU52ncVmM0z/kkJf8ctnumEI2Ul+hNl1+kJ2Y368XgsW2SrGL+fbgEAJxE0H0W9rqKzZxGu3iBb4D7OT2AG7sWS/VHStYIc4KenJwCM7+/e4Q7Az09PCJUXkTLjgMByOBImBmmj+M2G24NapL/UtbuJvJguku4FcX0eF+GyAUb5LMk8FyMO4MlV4I7y4Hp2Gd/I95MLL+PeCaw77wWugU4yh0JDpg2NKMrIA+XLD77FoVGft9PXC5n7tlH7G4DxsZSf8J6Bb6yAy151XmSPXP8Xy3QSd35FrwLITNdyKp7j2nuJj3PhKdK1kp8RINb4bwNeruVd0NvaZTEQDVq+BTtKWkGU5KUKzWJdaMbZZjrgsViavMaiHLZMc985E6rynMyvESJMQFGuw/wVYYO6gM/W6VAL9SLz5pqvVfL4ehT37kv1t3UlfNd815Yvouw4G15u7sB5iSle89WROyjH9+8GsGK2TvY6BDO2bNhQfqnfvLB28FvS2HHKCAtwQWzLioTBiMKARvG31nwdnvV5PI6WKVf8za0HDJx5xi/zWXil+glAY6z2/f03AIB/fXiPVvndqip6s3Rf7rBTl7+tDkG/vqxRu0s6JVKgy8JZ6CFWylspdm1++LE1an6/EPiMb8uimeExVSNgAnCQD97iPDISroX2uGh4+czQu55buuLarFGeR8UxjMYJDUNgf1nWBbLhBreibGd0c9vS3xt5nX0FTf0ANBbjWi89EGvdTw8Vy9EaGG0G9Hcjf9nga/O4NJpv4yifS3EaIeDnsc3f9+UK48+ybnf52zSXtGcwMJdQbsoxEaylsuVVJjTXxOBAwOGQ7zxXPqSpbgJhlttl8t3o02GSacRIiZFSAonGmzCDlE/ngMvQqSBrHhflinCU+s0aO7vDAjnPrKjPZVTvLZQS0pyQVEmcuFX+GjxIlfTaLsE01kDbo31Pdou6IKpzmKQcwWXKimzmCVk5LR6c7GFDz+gwoyjRmyEr7S4W6PmwQMW5HgJmUEI+XKBKdE5gnLPy3dS3UbSr8rx0SK5P7VMy7WTppkXynaQXl+7l4LbtVzfuIuV50+Ts2sKPWx9/EA7k+ctzvpt+OlS3/yOI1r3NYJG+No/fElDwvED7GegOrHwi5XWkHP5NwNXVGu7GABuSuLBEfrp2zzvssMPVsCvQd9hhhx12eBn4nW6082UApG7cTYR4l4wiOGvuDszwz/QMMOGbm2qF/iQ5z8Zq6Yzsrk5vTdd9u94251nSeru5Qansr7OF+XMRMJrNLAHWEr1+55qBtZywm5BkMbCPZLhgI9EZypgcYx3z2evwqdO9CrxGwW+xYbsF6DkuaoRy6Woj0CX3HqblPlzvxipDi/pqGvnKNE34FhMOcoCkRiFw62O8yd9gAFWefzSKCka2VpmZ8R8Af4iUtGyrnstgoCrRhR4UOTrV8Fbs5trEYNGFW8ERowgWq3xoScjg8N86/kmLG0e2hrvlDBFKi1jxWYdGUWiUOEYYQoRy72CU9iIwFLTZqS8IZKylOdl3ewe6jWMV6SaNKNZJ44QKdLnrUhTzVNaSqA6uLp7GhjTX1NPQ8wcYi3Wl3SKA7OSUKySnkgE7uNwcprrmqAVyTkFtnGIlK8l55UCIr4Ndl5rKoJHWsP7fCD6pfVclV2T5bekY23ebpy0s9elGwKZsxcN+ax8K6pvyjfJIPsJK+h5Z91GJQTDzE8zVJG68jCqxefL7iFsTvgZTEKXfsFYzgIMI5mebz4hGXQGdMJkRWxYttF+Dziie+3XK6jItFQh9FbuxPmoDt6h53HyyYpUtH6aApnZXYFD9aYapn9stKj2aOpcHtLGkpfoHyHmJIKK1hmdTtxTRGJu+WoOFXjcanPXbS+dFhLsFwy++RlldFhQ+ZrCnOBh9fUf1l7j+8KiLQ5IHmySLVSTE7dNka8a3pbH22Y7jMrztZEsoV+VMBFbl+YHkunMq7tcxJRA9ATiWMZyNCxMIwEQTJjCmcqBHxjklUczO4JmQkITVOYiFedZSF1Zn1nai7KIp1Sq0dCBXqnKOkDvR/XycAZwAPsvd52I5rXd3g1F4TEbZN3DSuZFgedDmDAFXjhtcerhlRdxy2DwX+pEyTjTJNRQEnmU+TLUfSQ9jwqYV1/Rs/5RepYq/HEYoLuobvoVFkcXGrf0M4IysSHe8I6Pm2dSNyxBrh7jG5aBRFO4Beirtx55ns+XbxvT5Ffw4SDMq230u1aVcTyLgcMzf5lOQ5xYY4RNFq9+3WC9b5e3Xbe1MlWTpXKf2e/mtG+sgny+rDb4qS/QtBwFGcZw3NLIW6EA+fFPA0ANdrgZTeocddng57Ar0HXbYYYcdrgN1474ErawPwHuAv0V7B6EKToDGCt0KVKzCOgF/mID/7/QR1mJoPmQl3V8P2cTmmU8gEJhuxKFvgt7q7M88E4AbkOU/cXe4Q2LGCTOekF2j3sK4XbXCFlFkTE1lCb0SHOgtjE0+Hi6S9dL4tcl6wRK94LNUzrWb3ZXK+M8X1X0DTkcZVye7s0C7UWmyiiTRF8DTkxNSCaxZpOvd6JpO7yYsd4EaYd9ov1u+nZBNryJoE2d73alx3a5irDok6pM3OtO581EsKBKy4jzLkrgIY34F8IcOhZoZq/CMqspYlYh6PzpMiIiHgqbwY8IJi2CEixLM5ltkVdfkOJxfC2DjeXmGjyR3xIOpkj/BMLmU5JO7+xuB3Ae5vWbpD4mbeDv+w0G3NczeeS4CZq9EB2o45WfCwViRt+nq/ecSTlNj+cXFun2Wa0tz3CIvkkMaFaQxkukg+9u1VUs4HhDFacy88F1Z72CHY81mquO6K8oJVtqPbMYxN1/0oZIHNgdj1mC0KHC7xncWoFoh82iV51stz3Xtb5TfbR1tJkVo1Mh6B4Oc/Yupq51LYXpun83rw0sEfOweyruzCr8l3BxucPr4jGABC9/HWNnGdn22kucY3Li5pklK+Y5fXI0/KmxUFzKvl9BEtP21JjRV3rZDw6zrNp7++TGhfITPR9O/v6oCBn+9hgjGapR6/PW9sQ7WPE1bWBrRhVkc2IQbIjeafs1BOBfJehc5w/XNoP0KYv4e4kE/XMQj+vmwpY9W4qxlEbbJxrRr5Q2r7pXoNsFowK4jZLgZk0T7OBhXgyztedQGGKiHtktAkBEFf2o5DrD+HZC9jB0YNCWAEniaxeFOAtIpK6qlDuoc58AE4gkHnkSHyyBmECcQn4E5gfmMxMA0HcETF8NpzavMCh2yTGY4V1pD5V+97kmV58VFuazZzDPAz2A+ZaX5fAadT+DZuyzP/D+J94jq0yHuXxrNLb9+Kw1qOkz7i5EvW5+z4nyas8U5IDdNZPyy4pxAE2FK+bceBs73xM8ptzF4zuSIAUxJaqX3lzM8H8OKZ7EoB4pCP2UFeuOBic296aiHQ2peVbFOeiA6XJ9tnz6bXOzccOu7O0DctXl00PBFIPkcjxmn+amtxzVlRYexA37nEgr92wJf8+hd/kxDyezHdQvE7xwIrQX4YtxL9l8jqPOUwf058b0bd9jh1WFXoO+www477HA9XHIX+mgnY4UWGlBcuTOKwlk2nADj1wT843iDH+iUN6t63xpglGxA4iT3xuWvWZ6hG1SGtTqPeEyiqr6rcYywxuBUrc9NXZtq2XRWQNPmU7OPtCtFwjFgige1Wark1mxGOhSfJkp3SdmXwiW7Y0a1OnjTjcVaY5l4XdRBGCTMjpPRpCKYMcLjNirCR5J7zycz0vKtjHaoMdpmY8mfAXHXnjdxMyfMbMp3TfErgO/IWsqSnUFCEljkYnqSXhTlut8nGg45V0n5MconFSZq2Y0ASemDH7ivJYbh0ogGBfQ1kM0wqReB3A5J+jyZ9nLqZ+gYYrHaz7Yy2bqGmbBqgbwIVthihfFkXkNqaoSHFnOvPLdKdpFEq5BTfhmiGC/5Wat1QlXU53BW/MDZUGwyfUqQawLMHCtyR11/tIvcmGAZJ/a4v+/Ljs4wHmCU6BFE9BNBGA+eXVwiuaPYDmVm8fbg8QPA1DRDhFZTZijIDBLagxsrAtpCAhsrUw7eDYYpxTiOKsD2gQeRIuD+1QQ9NLjiAkFZkOESOs+Mv35zB3xzh/+ZH9o+jrwuMPDT+/coxIcc4r78hke5pH2C7K5OUAYZ+hFp4zDKPbjDQt296iXM5fkSvmB40MKvoi5+UiJj6Gij6YvaJCiX3bvmAxj37RdUsCnGzjeljWzotcXBMjH+u6vL6JCKP+Dj60YJmHmZ3fLr1BAkE6bKKyTfpu7X57BoHef4+aYJruQtIr6BXZjPelFJ5SOP3rcy9XbBid6jPLaOzREO9nhheK9RHZ/dWi397w8gNmPI0FgkAEfkQ3756Ckdsvt1HAmJCHxguYVgFhZpBuhY1sB8p7bBl4UfZcI8U1bEUz6Img+lZqWu6rZTylbozNZTlOd7qK65un6SKOyh3LdYVKsb8ZQVvyzv2W35OSs+05yV6XNWDFOaxQI+569H0e1yX9u3tl+hYs2ajnrA03ZZk5ldD0ynkuAwzfmUvM6FxODpIOwiyeFI8RIwKZkVd+9zytb1Un/hJoGUVH2e+w0pkz7By9aR5RBBsUQv1uxmTTXspr5mBZihkZzrrWdHWfqILa13+TXKfLBp39pMzUtD07gNs/22GaJ5OQFIwM1N/j6fjGePALp1YEP5L1mzf6NQ2c8Fuj5sN+7b/RO6Vm9393nst6i471+IRbpl4bZjZNYZ3XNqgCxHRNV4oMDo8KBb/r+Mltlhh98O7Ar0HXbYYYcd3hb8PjeyQtfHLi4qQ1mU6Dn4B37G3+kGfHvAUQQlCcC/5kcQgD8d7pAogTmBaFLxgFijZ9tcQG9TBp7mZwCM+8Od3DKXN5+3OGKCcaTrOVIC8in7zOJ/c3OLp3TGfE6tANTe6a7pQGaXg6CeC+zv6NPkpRYuDfTbiiW6jV/SjCJRH9RFC4Rnn5Kzn227GyhoyYeD+UYI7qh/LVArWBb5lm6ipGOVQzvLr+KhLkgTi/5xsMlVvUAREvo+qu+HKXDbLs86lHR8FyGSIKT3nDOy0nxuhGReQFMKgFXSQdqBa6vkZ4lQbMy5jiGixl7cQScBqriwtHWw4V62yN0yWAeDq5l3PB6DLhs233J9CciOO6VbJ3M1hc1GRZj5N1F1dl/cOTLwYBtwrXpRk67FIftAfZhVupdflRgY5brSQmttXvKzSnNJp2mtBaLgR4CZGwzonaSNYEIj6zgx4pxyb6/mzdmrpsYdCnJaovzgG6sZzA4XZne/elstwKDq5huBME3UlsYZ30joRDZxsYyylk9mLnVCNpvOBpMJN0gGTdVWKzWRuif1zrEmPPOVHy6QSwnzc+dhYDGbSxY4l+mL1kZLY0yLBgr1mBaN2vQKpK6tRzeuRswIV9fIhwQ8Sbx5QUDfTLbBPLxI9GjGc7eE2DxS/ymZttazRE2fBdlsQOXF4Mvt8DKEm8ngjnbxBgM8o9Ds5gyDtluqJJ25xiXTNvq9HDSA0JW5KMRa/P06sbS2K555fc1WpIKfXYTL41Ije9pixhHbOPLNWtl3+WDwTaOs4bGU3uPowSbLgwgAACAASURBVIc5PJeaE0C2QlfQkxs0aL+l+uv3iAEx3my6NEA338xBDr1dumtBi58f8025Gi5u02kCTfkXxwl0yHMiTQw+JPAEKY9g7xLPj6o4PQBESEzALCNJ+BTl4Vj5I3WLTtnSmXXjUnhY6S+eXLi6Ike9GUdro8reNIPTDOYzeNZnsaQ+P+dfzm7bCTMozaCk942nUjxHY0z4maa5SwLlLer610yZZMegjgnLT6R+meBU6Yix/mZpmtycXOrO6pJe7iQvymtS63Ppx2Kl31p9dpbptk4Nru24qsOu8pF6aCBTRMOHcZfIvN8i7+nfSdDjgFwNeIzXWj8USJTnxwMy/Zdx9OplvTbiv1Wg9jlyx7G6xn3JcAnf9gXC1kMKVsZiaWbYlzvssMNrwq5A32GHHXbY4XUgknFGsgcCLnPlPihknvHPA4DTCf+4eedcT1c104wzmIEDTTgju2onADdgPAElHRlcRB1T+FFVstf8HZNONSUR4WY6YC6pydRHhXSo6TvrG8m7FGHeffmjvcLaHuJV9xhRR2+Er3yvE8OlbXED4NTqO8pYCbIucqgLG28kp6UJR2pPDagyX0dwKn9cXLTn+/wSEgMzi7vHIgQDSgaDsh+AVilYBGbmTlHBplrdU7HIsAe1O3GcbZYGH7vpnNxncr/bgN1bN039e7TJ9RnZdjNBeid8bhcVAZurJ3QqsoQTkJjAyJ44mLMlUegGcmkoRbhZJUdXSY1bBZbdNw3vXLCTiUrl9D0gFlbk8gBg3b2XsCL8dp3A6GQU3LW3GXOKA6jqc4jQHIYy7cK6frkyN0PQ91eDmSRldSyWTVjv9+0FtWU2ip0yIE2BVgLcI1D6R2VC1krXz/GREmkkNN4MbqCUg0mDPHpiZLJygVdZpC999m2uafqxv7m4Vxl/wOst8qM8OM8361Xi4oqOmNULUYr4VT8VmrRcw3VtSmju6l3l9bZAT+A6oIBesp9rJTJq3xLDnHRbLsYuVGWOs+F1fHmOnyh5mFONhwScJ9fOdh8xwKX0jeuUwiPo/cdWCWvHStSxW8cgubfrJttL/MjUwlf4HnbfLXHejLa6dF+cDC548D1s4xaR2PGHTi59ZhTlchl3ulYRQNL/DT56qE/jSnzjIWeaxBW63IM+TUAiPQgmfEyqClpFK6/HqWLD5rAqCd9HBDregG5uQWKtnq/6MXwQ5x0tF3zJ/ZkWY3PnN+Q+c7Eu53QCz+dsaa74zjNwPuf511hWW5Yn0wRu+oXqnLSn/LolyzAm0XKmdbZ1kHatSw1X62bR3YLyKeR6kF7KIM7u8YFSJ05zSU/M2S0/AYyEpKeYO4t502nmUETD5/h9frkr3q49VMldYZXyGOvmeinPNGThSe9qpOJlKJpDLvwl5MSzONLnzAk4TgAdMn7zm51IN7hcXhFv0Uygvs2/UmA9BFy2Rp6mazz5bf/bzq/adv+E1uq5OKEGX4QluucHrski2udqrn7OZrpDjPYwz/Wl77DDDguwK9B32GGHHXZ4e4jkk2EcG1EFGUC1Qkd9BwFzwl+OR/xrfsLfDvcgAEdRML1PZxARDjThtkgls93sEcCU8lntpylbx0xTViKe8mWJOGACAzhjxjOAe0n/t+M9dEsLAB9FVf7P0yMAwt9u34HogP9zdwMG8OPTBzQKUaneX999Cwbw84f3OaBeQIciOOwElTDyvIFgNUk+xRJ9IMwrwfeou3XgurvRt3SwjRvl9Yk2XB5Vb6UaeXm9CuwmarwZwlP2hYA7CX+ShrkhhIq4ph+sgFmFfdTHDyHaHHvLc7nLHFmY9yhW5gkpu5JUyR/7fAPBdweUlehZetUIkVnGPolASa2vq1v3Gk/vBvTVKi+M4Du7iNu1E61gcPQdtTssdAG17fI0pe5zuZ6CtZW0Z7hEUaV6iUck3UKlD4GUXUtyAifjZnqkZFtsDjtnImGB+9bkZRqmU1BG80TCi+9+g2gz3o3VeeiysIqVm2XGeHBu0VQFSo48Wauzboy5xkq2K7nG6Q4bRBDH6SzWFU338u1o7ul8Kq/GAj2aHgFW3EQKXhiIlbnXEVMrTw+w2JLDaoyHLfEvlERdSk1eUt5z9VVbCy9TMj98f/dNyfhf799vz/yLg6hhOHuXSZzXzE8qNhyVtb72NeuvTjql94Xns1E31u2wHmUTWN3i4vQllCtROhpuQOs4lRcUusimPMmyq2pYdQlMMLSVslcRKD5ajkt6kELUM1FjwTXgGyKPHbaMEeFc+v7Z4BKaPIp7wXzjpyDwLghbgyeDzwivO8Tu2z2uyezlrC+f9rGCKlBPyHeXAaAn5Hth5qxDn+S+8+kAnibME7WtxAzwHYryOTE4kdxERiA+ICty833cDZ04EEATjjcHcFnLZf4JsahhqmyeZIx6Tzs69+RgpbplT2dwOgHpJC7bxdocLPeei4K5s6zOOFbWi4Vd87ybmYvd4RhD+6KDM1JXsn0p/D+V7DKvm/fBqdKbNMkheVGSF0t85aXlzvOUqpcLyu74p2lCgtxhbnG1uHFtT4uedkfhVUsb2PiOblq3+1JWIa+lbSxNc/tAAOAPiCHAL3rvwE+GjbzsNAHTMddJvPwtJ3lNGvkl0dsvARbkEBb2ZvsyYNMSbXiovd922OGTwK5A32GHTwbBPXvAIGwp3MPSimkZ6usEmJ8f1jbKEVzCRUSC9rW8ViVKJq+vtd1fCaKmKmGRFbpEKCf/zXNRoptfAD+nGf+YbvGczrid8rJWdCPMOFC2NL8FQW9IVXX6BOAOhKdBn6rg47ZV70FvT2+dTmuZCRNIrNatIM4ojji7jk9o61LaB0Cj+B5udq1oJhrL/hv3UYDe02H57vIcZLMQOIZGqvSJ58kSqheQBO4iEJp5T0AoyFPtmr0HnG4AnKv8Y5J8vNJN5XyNi9ElOAN8jEeJzivWG7LVObgozSk/fQRw5hlzcTdrBGi1IeqDxZnMuG9nCkDAAwjfQYSY5O41l/ZhtkLI2r5WIdjigWZO9RZe1gVn1yolK4q+d8K/YOxqt6nssHRqK2xXLwIj45CSRmRpZFyx61NCtoxO5XvOI5HcmSllpZTdayZOeOAygII6tPXhBmc3vn2lS+V17Jq2J1FfqyC0mf+Kjwh6gSyslPEgrYSuHxLnk1BNIKHcY6qXixIVC9Xyf5HV5jXG6MpdfrmrZwTllN4wlm3SAeVeU3H9WQQcnqUJyuuAqP2VhLpE1mwYZO5QVXySuLOuAmbUftA6cIlgsGn8G6AR6jZhNh1VPK3HB2taVU/AoDSM+c7Nb9MQqAOHax0iIhDUx3wImjqIO7I2j8CUtSoDHpn/d+nsIOFRpD56iaPWXn7smuch7blwPX+lpJeBOe2WkHVrQ2I64jGiE3Mb+ZEoWqFvvhEs3dRFHJlGlXHM1R35ZOgtiymlz/KW6oE7M98rHg4iPs9MVYC7KVZpll/H3V86YNiGDc3g9rl4fLZjXetd17MG/KG9G9Y7mdrvjZt5ixPXOlk+KqUGp+5AW6Ms16I4r1UWoZDfgVvzDLphZ71wEnlasMbXduuCxvOL1mtO7tH1UTGyPV31ddOHpzY+AfXKKoXk+tdapxOyiLROgNYeNQF4QL1qZkYCYU4n8DkBOOR1eMoH+tSDTWlaEot85aeT8CBJeMLEYBxqX0zCF6UDKB2Q0q2UC8iRQLBaZ9OUnwtuOpeyYnjCCeCzzBGxLFfr8nQCeAalMzids+X5fK5x1I273ucNgMUjVXFdbudGc92NtG2xvHbd2CmeB5tS5YWbxG4OKS2cASS9yucEplOlcx0PXPFXvirzUvneedb6u3Lz48o6rn2sz17Z3hFt5fcqnSPTtO0RgojgM4or93J9jn6jPqrlpTzYdBFw9yBv0gfHY047n1q67dmf8m7XDR0/g0JHpKjxBpQ26eQ7y+WNLMDLYaWgUd2b5ME6063Fef+Vz+vVvQP7dAy4zes2cNbnlmL6tiUiTNTKRez8jTyy1DHvxtlrW5yHDMcI/NyCHHoKaJcc7CaR61QWiw09tetZ5VnUoKCOe0tLSkYtebqgFjvssMNlsCvQd9jhk8HSUraFSek37uvlOWb8qwMrcLoGorZays+W57n7LXmP8toBQLvrLc/vAXxbA8I4USbmY2L8QCf8Pd3gRDP+Ot2BAfxzzsKZv+AGAPDv9ISJJvyRbrKqZprKfeg3AJ5xxjOAd2LCo27bJxyQwPh5fs75He7AqK6sH85ySbW49T0ahemkQkeuv7e3RxCAHz9+AMD4/t23YDB+spbojfU5ah4aTugt0fVubE2X5N36om8a1G54bNA7EyeyGpFiGpdZRhhwKakqm71oo9xFfD3ohMFuU67ftTuLnN3O7QgnIwDuC3NxUpUtPcs9obppVYHwnUv7rA+p7VNreWbnjtUPJIgwDnUsIR80SaLoI/G88AFZqX7mhKSCvrJh0762wo7yn6mmlkVt3VzzZXfuukGmNtsypKkMb01cFbIa2Qq1GkRcuOuf5pG6sCqAqBk3LiuDoqoh9CS55n9V1K6TtLqkL+kH86DKNqo6WZxwFnqlkJiFBIg7Sr0zU8stNIFdm/ixanMleOEGO7pSrZ2k14qgxHUqKj2r1xEILjTJt+o5JLbgJlTlRT0WpU4JqBw+IOj9ooDqTIwkr4xHN06ovqSuU6zSxNHAkiXLc+3cTtdclj5HP02c5qEbblWIQyB8YDZ9koUvbFwel2sTmJsrhmHCzYsIeAxtbMbNMo9FICAlM+6aguqf9GFpsz4rN8+BTjBslkYA+JX1ntLR6TAtw9IoW8bGBczPVzOuereSyUcezHWZQ4sFIXjXeP7b6HkhOFxuN6zBHd8WMnIL6S09GoHlAXXcGNe8Q8SifKLgLfgG9bJjpuHPJD6Jq3HPQ9CMrCQ340HTHyiv2edaX4Dz90euuL7jPIYfPAPjUN4CthntsFPc7XrOld5TUdg5XqrJtCEihZfsnXPo3LG4C6+tjcOohrY3R2dNrrxBxIdRzQopl12sajULx1s0ynOTZxJ31m6dLG1FWi77yhiUoo7Z0lkD+kGKb0BLzZq2HexgcHR3bW4Pi+E4aTgOgnlmusHybONaGWU9A9XzlocnabtnVJ71XcEkJ9f+lgVc+nBOM5Lye/OEei965c+y1/UDMoN/L3URq+cEc2DxDD3iDTrkvNIRSDfgdIOiHKepWZIrzhNUyV4+phnACROfxNpcLeCzm3ZKZ5kHM2ieRYku94IzA5gxyaEsFgfzAMSzkY7vfsyRTm7Sg3yu3dlefRSvcfn/uR9+Jo8gmfklJDwHHKziaJ8NNoxsmD7kBzbMI6EvZQcxPNinCBj6aaYxmRHYvtnK2j64BbMq0Q0fLbltQZ/K/9G+wLuW17kgSN/c5Of5XN3qB9WtKEdrVnBwLMoo7FSssn/DXF9bMVtghOgotMUjZheHm4b6LhtSN6QkUzN+qPb5uAX6+etLJ/GsM3KDr3OsnrWN2+Dyfnhpvw3W1CHYPaMOZD/oSPijbFhj9wXZKRzn+UHsPP8YXqsS+Epr7cEck2yHHXZ4W9gV6DvssMMOO7wMPqB4swtlpTZs8bs8MNDcqWjvQ7fcf9kFMDAn/JOes7L8eCjbPb+HPnNVWKpKYUJeDGcpK9o81PuG84aAzJcGqhwHM7KVeQnQE/ssgnUC1B0d10guP6qbE3JxmujCaNs7H0e/BfwOFm0/AQDfIVtL9LB5YxNUq/n2uaG5l/4KUI8IXwLY/mvkJGdkC3fjttkIUk+c8ABgEqHrzIxZBReJjVxmJKjZAk5w44IewKJEZ9Gr1jnPSh86IYvZUOoXFuLQFNOXXYUTbd8V5wB+vqHau7MdMtznoem5+KKgQgtUkJqKxXUwn82zig9LE5DBA5Ccpq4n1PKchT6mlEMeasKuTUIa0RLChR534h7OQpLqZt/lazMMp48dYzoQtK2s8E/jTLJuJDQeQvQOSTbKeEWXB41uhYud7NDMgaZ822G+lfwi6HIr61zUFoMWL8VxG1YU6MF3AA/MWYnuyX9UjCLnp/0IvAV71xbsPrbt1rVMN98VotXdr0mX0KZPBbz4eg38ymfYNgRYXFjX+XITujN+XTw+LbQDcXhX96Z8AuZ0E29zaWFrjJClK5TX3QMBs7nPF+i9IrymoH8TG2MXSMNps/ZD1BfWundARGx+hh+rXpyAamIVrJmAtJesBR1E/IddhyI63lUkwNtFiXjBRrH4CSabp7vR0KMgXvM6GgyOIXgRBH3ShV9QXjkUugUva/2uruRH6Wzc+xyfH2uZiVGUwwCACZjm7EEpTc4jN1XvEvwrwPdCqpVeE/JpWAJIDyLmo94sBwTbVlMPMjJP1PtOc1WCPJNakJ+L4pxTtj7nlC3NSe8A1zvBvXUkXL5+3tjvWh1W7tkpXJsDK2t0bQONX6OFhUZFEOwrXg1y+6zumTcW2/JV0vbOO0Yt6w7Acx5nQ48Pl0PP2ylIhxfL81TXsB22g+elozhvJHZ46ehn5PG3dIe87gubvUowP666h/7NDj9cA0KPA76gw1LlgiVqndOVHeEy5b8+vn2HHX4bsCvQd9hhhx12+DxQ5JVqhd4Ejp9VYWmFJcIw/4wZf0PCAROOIkT+cX4EAbg7HEEg/MLP+CPdAlCnwfkevDuakKCW5cC30DvR8/c/H+4AZJXYj+cn/Ol4xIQJ3xyza8APyBbEP5wfAQb+cXMPBuPvt+9AIPzwlC3OT+e5VofK1hrfvLvP90x/fGwV5x0YRXmzZzbSCrhvw93XoIwmX+v6cGEDviZvW5IfR3l0cUfCtgvhIG2rxoDadgftDC+oobjIrn8uxcsIn5fg2b3fyu+Tayx/Zym794lqfct4YWTrF+CMuQqxkwgFi9TvNXfqQX0l6AGM7/R0tgjOqSg6UcMNOu3lChrGPd5kY3AbtygF5KfZ8FL7R5zvYocdAj69/jdhKgp00+yodjCsltqM9tYGK+Dm2gTEBndiZIFqVhrbQcAisGOxrGNmPBSTY83c05klBRK1NGcJTNaZlCWgcdm3dS6r0FEagNpvLd5at1womzYuCilx905ysp+b9jBu/a05JKM2/qS46Dd5uJXefU5BjRqJSBDk6E1pmnXpSNMdqjgv2amVZm/1/GCmUGO9FAmtrQVQeICGuiT1WdvK5bsoLN+yUNhFzQiUUA+3dXPTQytvfmMY07zXhS1KAN/2L6Htrv/ftC2jzLkdClchoMTKXrO1dJH4lZVcGtYdv2doQoMS9cZN96jk683an4Jf86yHN6uW0IAGOOV3eaZK422+elCA5Fob5fcdPSlJjzOK4rE63MCwUZiry3Zwxa+LvkYolJhSjdZcW2OJ8ichNrVYRcuOI7v8R/gsohjQe08+NldxsH6E82Qb43F96+oh4aVNDNW4rdYHoDm7CjdhzBNASdyYu6ybuA9QJXqNKN5ySC8am8A4wF891Cmj3YEQdZPM1hsLJ/CcwJyV56z3mnO2Qtf7wSlxVrYnvSs888rlMKttmsizQkPDlD/Dlm4cgKctKzyFh0I3YgRUeWeVetvORfuJNcJvS16vAY5eMaH1KndZLmNYoIcHGauMbH1+9br8CenlFwiL06XsMX3gJyn9dUrg3kvTpQpzfzh7fLBjK1LXJ+0zEDmCWJ/3Hqls1FaGEGcd0fvf9xzZYYfPAbsCfYcddthhh5fDi63Q3wP0bRCf0d2BDvusm3J5Ps+YDgmpMKo1uzsp9AzgxGfc0LGI9OSsNO5BeIYVpLYKOs3rz4ej3Jue8A6HkOcVtVjdEFjBkJE9kpRxT8BjlFOoTHebZPLfeDH6YtwoXYHRKfaNTPwW3chbw/EW4Gfg2SFycwvMz8a1p4ElnF/F+vyCPLq+1l+OsymKxxOAGzSKYUa22CKROLPE99r4SEC2QcE3xtvm1X544KpEB9oNcbFKT7Wudn5Zz4f6RPrRVsHqfCgLBrVdVHle0gGwFm2swRzM66au1CjPe1EHwfqyUO8XXF+r8NXgXeWAYqnfuDmfS/nMSfbYeZP9oELUBt+oD6OwtfFpBbeKPAARRhaFtcZVl72Nq0ojQHAeSJj1gEAy4RG68j1V1/EkawProRkgH1po7gflKpDq6LQJmHXcKd4siqu6LtmxV3/tvFlpygsJJNtFzgqPOiW1FM+jdAvoRPPfKl7ZhDVafJe5L6fBdxRpCTcbl/sgIKDPn3oBeq3ybFvWPP9CdwAz/kmpuMrNNT7g71M+/PbfH35t2zrE79J1LB5fL4KtCsa+21+Ig/CZoRLkyvU9bFalcYamrPFkBQWq77dU+ZeGDr4Sg0XuV18aq3PENKAJ0MDg6oImqvUQUoh0n48XIAMA6d3rZpU9wPBxwUKhaScySvQINrRlsRBeSWrpW8gvvDHY8fiCYT3O+DXSL2oP2teimDZj3q/XK1nEG9UgiPSQBwmNlT87vCfOlrbatokRWh6SMKoWTf6AbCEs8ad8j3r2qgMZ4xNAslNNUn+iri/z4VEGJc7W5GA5dMkAJ+D8DE7PWXmeZrEQPqPchy7W58w5HUEs0JnRXMQt5dRN9mDNr43Yhw9YJESxmX2Ay2vDONwQp43h14JLUi/wPVuzbA5EAPH9zzqW1jJTjwmDwrvXcUsswjTl8coAzs9BxgEd5uDbJ+fTvky4uBW65e41F5fX6RPdhxKMRzz/XaD3Xvalg2GelP5PU/FoV0mePfBMdV2Qrx2Ug+QI5vo+V3bY4VPCrkDfYYcddtjh84Hd/BclugRGQp4mTISeZfOYn394fsLfD7f44+GIaZrw4/yIBMYv8wkE4HY64CMSJiRM8n+2XUmYQPgWE96Lg2UART3+05ytFP58uAXRhHfI7phnYV6/VesXWVn/5/QIgPF/b/Lp77/eZov0n5/F2kGUNT8+vm8FCRFYJbrKGL22sPDtXJlym6G9y7spJ9RELXz2SvSVdD6g13JuTK/F+QpfCE+BS3oC8PRsXgC8+waYP8rdowFi7aV5Bj+H3ureZmM97pRly0KxkuzWla3WV8WITuaS3qlu3YQlbhWAVjjeCK2jiRhVbKEuw+h9fz6YDWKjTEcd29QmEXleTtfcYSj/k5bhlQNN1fNGNgfZ+yNrfmVW2esSumqp03YqLepbRuNUUVVuU1WCMbV3VDeubO1BIgbUfWips2mLX1ndv7NJa2hsSSThrHXXcR7XMQZF1tBlteixwtdwSDn60NRXaL1VVPg8ypTQuqWsROfZeF8wZRCjWMVTIapQgXlfLdNYmv4gcXUehYJjS9xtvhsb1k6P1SR2wPSLylUUMxK4NsJsK9gBoAL3BodR6SatfQ8RsN9sGQuIE/VdGQqgXhMGi/mLi/T59Rnm6RZMLj9+Q3y2IvhGwrthn4zzD9Vf16ITjfPmfePsGUSzl/XkAMPTGcpVHhjAIWVFOQE4mrXLHv5TkvgwWpMF7safGrBn5wxumYaqQpCQ72y34Mt380AtysPbBKjvvMKGyH3RKmBO5ju7Zzb5HyC8UDDuZ2GSDhNwK5S5Oxc6Wtw9fyRt0uCyMNd49OFTAvc4XptPOUzxSvlcEk/5x4bI+3efvkm8XJYymfbANoDWDYR81z1ZMjg2a7YJOzg+hgHgI0DvahgBan2uLtyzIv3QsRS5mHyHbmZNcv9W5XcCI2VL9PkJfD7lAyvivh1yB7q6bS+bRGZUb07VE013ZUb5bQdBs1WX9mzOhA6WytKtCOJ62HzoajDmQwYhROtCsPuyl841Xp4hzG1jN7G1/+7N949N3lF5l4OuE7LxjJTnDT7+OSrXf38pjl8xeDqyFofCD28Ddj96AeTrEF+GW5ee+G3Z+0WwBJ/yvnJSy/NWjtEpz4G6r4R+cwSyhL3W+r3DDjtcA7sCfYcddthhh08Dbk8X883qzt1vAKnuqrv70NkJI4F/pmf8hW5wd7g1eevt5TneRyTcIztZPssG9QjgBoTb4g+TQlQJ9aZdXohnqzplcUZbtcJYc82YzTfLJOv78QCcZyAZgYyVRLD9Rc3QXbnc7z+ddKMkV9yswu1171P7ImE6ALgHTo9X7D/fYMNasmzMq8bFhiicAT7mOTRZwWeZTGbaOSFZOAvGwX3AVN9VKR/KM9sMHiTOd07QxUb5QC5tHbJ209puYSMhK3VPrSV6birj9tUJMku2rFtp41La5Z1pwgS9KY7NExpKNXBqV1BgI+DNlWci/FoEhnLKn5GtpDi5jFw/AABmobNLroyXQMorV21on1c6V6nmJCRM3LxbZbTVq8hVA0VIocJtAlS5Xs5RFQmsGWeFtqlVl+kwSnJvtORtLSstzVSYFEeqFoyn1Mdr5qPWf2qFI5d4cqhDHt340/6OFOhm+cyfuMpZ4eO7Z1tueSdTvhWe2XzNtw48TWgSBfFQ+4s5j5Oy7gVrp4wuM2vHdfliIUK06wjoOM/cDdfp1rRpWs6mg9GdpYOEr9qmQR0HTcHDb1cg1CQ5QSn0GK8AtlpLJc7rr6eLFlrWtY/zScaxrvFKE+1fAJ1GrK5niwdeGMgKeXPVB9sDjYM2WuV32H1w+M0zcGSMx/sGiNaHUpzFe0Bf31i30YFvkhfnt9Cva4iwe28XOMTI6iJvUdA1YG1cBjg05bkyGJk38GO+2QuZMgq6SpcNn9LgnQy/Zst/Aug7FGU5HfI+RC0Z1WtOEn5FFOYTKS81F+V5vuc833me7zGX+8/TqbpmL27axfq8/Jl6FCV6dt9eRnNnEWnmeDTmS5rBXPOK625c+b4yE4+XJuEQnbbcaP/xakoq01bD7+vJaxME7d1lYb9FfIN9XK/n8v3tBCDle8+ZgLPZn3aeA4LwXRl4HZR5aufExmQ6dfTQ+TDmtagtpy13oL+Qkem9MuDLGE/Gdftkri/jpfUy6gRPZ8v+fYmo7bDDDm8JuwJ9hx122OFN4SXMzaeWrHwmsDKSSN5VNvJWC2CEoI1NyAAAIABJREFU9taiUhnNBPxMZ3xPE/5+uEcC8OP8EQzGKSWAgD/QhI+Y8W0VPZSz/u8w4REMFqt0BvDukJfMn8/PmCh78wWAvx2zc/j3mHELwjdi+vs4nTAz4YdTPu39/c19K0thzgIMPT1ehsqCMIAIeM4M9PHdHc5pBp7ONUk4ZEy7MKpx6WyLcUw9BTh0ivRLleguvwOAm2+Bxw8O8V7l2ECJaoUnG+DS6fT+11bI5dEaCXZ8OV25KoxTIdtGBJ/ObXF3noXT9BJvkj6f3WecARyrorJ4JnCCpE7OZetJfbCFyfdn1CguzOYTCEKLIt0JTwEdmrG1aW+Nrqo106lG0Kk24/U3/8+Sgz02U3IM+3hE+9sz85q3/jXb45G3BpU9WQtGZvyqEZMKQQn1bt9IkOYz9ULKa0Dblepj8WLAhn7kMDIK5KxEJznsk2QcmTmYYMaGU24pcVU34up21Qq7mXObFl05IVt0TbmdSpidy/LczA/N8JiR0vYed7mB9oqQTi68FZbKc9ZWzZK6pDzvFOd2/C0Ili1N7OijVRq49HZBbNaeClQOs+n/VPvR1k4FgTZPMncspvb7skD4EhgIsnjwfFG+OhZTG2zeExIIjL8dqonxJAqF/37/ay18Mw4XCuZeoxmbwxuDjAMaGMY1B4euw8EzoBeCz6bQYWQrco3gPdtMh6zIqolaVB7haI98fLgcxU0QNV+xPreB+qIu2B0RUDqjbqu1isojECPT0SExa1/VaQhnPpvNPdFlrWHJf4J43hnxigw8xuO9v680SCt5kuHjlBcxi59J8lo05wLwZZb1eGWx6nBd4cuvgrUylvioKJ0mH/FlPt9BnVQhG6zbul0r48OnbpSaVPdSdp9qWYDiFUf/ewJwi6o8P+Y/UZgDenj6qJpzmVoz8hHtBOIZPJ/kL993jpTAnMDpDMY545C4uGxvD+DVeUtAVsrrGsxW6WXrGjEBvm150J023K1XI6t2eavJVsbnaF3x6UcHGl9l2K9kMqIPcnIh5FnKWmc3bDaezmfbPu9M/NEe3vMNg/VUx8bxkMtIMwI3dyY/k++SYv/3Dhe5Lif3uwLMDfvf07+VfhjhdqG79ZGr9iW37at8+5egPAcVmQKBmrWitP2GLNp9Vapz7Yuo4w47/H5hV6DvsMMOO7wJLAkotsBLFBifCdbuQffhw+eRK3cVSACNxWUJd9/nhBM/AUfgZsrLHTOACUjMeIJuO3MBBMIJwC3yifsjgDOqhbnCgdqt6oyEg0j1nsG4gcrvclpVtDeioE4uZALMNZCdFXqJSjhO2WX8GWfXkEDf+F6QN8JjI5R092jdwV0ADOD8Hl/2WDcNVFyCbknzBtDNKVp/DoXgyAIzTHUeybxofkdCZ6+4GuE6guaeryWhjH5u4zwYYVtrlc5gjpTo3G3IlVyE00Qe9F8NrkKKVjR+WX9nqhA5rrP5+glaGzTLy9oG/tUKxL3gMTqg4+9Wt/EbmguMx9kIaCFeAngqgoUWAZ8HV51Myc4LagnVha5TgJd7yc2aoO+ZQEv8uQ4G66I4qq66bC9rzFl+ucowG71+kE/pP5/5aNIEbbmVZjfr5CCTSHnu5d/hVHX9x0BoCdYceLCLoZlFRK6JdGZRP3ctH1ACNQ9GM85/UwLZqC6+o/yceuP6v0b2V1mLaz+/df/6Cb0AS1awvjuWyOhSHKXlbwGjfHUN9veft4jJb3L9sqF/bJRFWuUE7JaU2PWsseqn6q49Ut69wvAhynxCvT7G0KiCoS/TS8c/IXha3hU/GoAL/NrViDSdf2HaUXiQT2luX57PZ1TncbwlLqYOUsvEyKFMPxypuvrl6QnAHYimfEDkQPlXPQKRnH5moBwwY1GEzzOYZ/D5OSvQ05zvOhfrRda7zhklzCvPBQvB0/MFftzWdE2NOmv0hYYazUvPSpT/2rDVJWQL3X3TebiFDi7FUXoiY1EPEHpeOCrr0mpd0wzHA8p+kpuT+S8r47fEvr0F2AlRDoE7WCKVXzDYHcGiynl06PezgfBK6jFkmsBK15mRovWkIWzR5suH7bDDDp8TdgX6DjvssMObwWsLHH6DMGyiyJW7S2CVf0V5LlIJOe3/SwL+lE7ANOHucAQz4ywukO7EdfB/5md8Nx3x05wtd/9+vMctgJuU8M90wvfHWzCAe0xgAHeH20ak+q9zdjX5l2MNJwDPqZWQJGQ3q/+4zacMfnj6UOujwgu1vmwgZrgf33/ooy0qDYxSqsQfRLebkE6m5BNcqEQv5VJWSFtF3TVC8c1TTNvGt9GaEE3gHEhugCrYWNOHhcLhC+iDj/ooBye8O8li2XWDbG0ebNYIyI2fgNPRfIhwd9InNuGRRKspa0X5t6aMt+MhtEqv6b+jHLco0RvL80Cx7nUCJStng071cz5aMyFxPXbTtm5P0JZGlx+J9b1BCP14zbn8OrLcVOGoQjLPVnJr25cdZgRUUykzxiKl8BKUati5V+ukzur1rSq8RTBcrLXUzbqrJ021M+VdFSp5eJIRFqN2+lwFHTTJWFZBh2rtbRdM8l1xmEUonVybzFwHDdm2lToXusE1zapGzXz39w2ukkuX3spjvPJ8JMjuvgW0wPZtZzVmJ1mtdzmcJj9VaJYtmBoFuukL1vUepvkcmSgjyuHycvnaKwmHFzMIeB4Geiuz/MddmGvrTeWt8KuvLbdbUxiMghvaFsTrvg3qpKQkPBQ3rSbvywzmmXlQUlsMUYdWsvL9McXfbyjj/ujqvobnEwN3GyqjB1ssX9Z9VyT1l7r6Nn1jl7DG481Ur8Kw94ACg3WmruN0yA+c/ALeo9zgxH5uuXmiVwWLYWZviR6tlzleQ2vKOjuaW5fM0QBK3l3gekJ27x1eC+FdEVfiT4O6N/Ua4BCuoTaDYJw33T6idX4e+19DFDY2fTuNZM3qln5Z+SYCTZR5mulZ+I0Enm4z30lk2i3J4ynHSykrytMZmM/g+YQ0P2eFehLX7NA/aQOW+cBcwpUDsuzLIr21c8jSAOcFp0/Gl70LcuTXc8G5lt321SB296UPeq0Fz9KeNd5htO4JrSiLiM02osf21+Oh8LhQpqcRGI939QDCDMwntAek0Y+DDu8AtzDODg3YfUPZb/i1Gn2/dRE2Rm2Sed5jOWW/hi5DY7XNrc+3DocR3dhcmVeETMTFIc6U96Jl72NbO1g/Oq+Pph7RAaUddtjhs8GuQN9hhx122OH14FIr9FE4AyCjRLcWZ008kUhqWPlVISDjf88z/kTnbDoOGHY2AxHwazrjSFNRrj8jX0H5X9MNnopYP7PCM1jskjSUy6/cFhdWT0tPkk+nSyqSQaCx5NPI0aYl3JBI2lBO4Jn0VwACwK90J3qDs8d1QfBxcQFb2uFz7MBeG44ATv2AZ2RBBxHA4tJdB2NXbRWOByPb3xWt0ZpyRoLjqR2/ViAQAS/He+BqkZ6V6G2cxjo9EgaZfCdM1cu3/KtiyxU8i5yZwSYe9VFWxHntGLXiwF9zhVr8rdCrES5QH9YcumB4ZUAojClpQ2S3QxEAL0ig1ZrcWi03d3Mq/oQqEKYqhJDnMmyLQFfqZWktTWBNW/7MXbylvgTgiP+TCP8BZ3zOJv/iqlULpaCaXPMiExa2RzC3IljtD2PrH8pKtX2X8lgDiwTltpOx5y8siFL1IiY7UfvK53R+HF8CX6ogaiteNd6P73/tw61Hik3Z2osjPve696X2zRaw7W7mxFHG8Tkfo1RL05yEB02utAzoptDnaqJKUOsYK4dZBvfFUxxcAyyd85VbootTH2zXtBIwaqzP1Iifs/86CBcE+Q3WZzbhykO+pGi/NnYw4BGWWAg/3obkLNpbLMVbHMhhHqRW5XZrB2VF2LAMcpSs0O2E7I5dPEXhA0Df4kAkhwPNXeU8I3ECpTMoETidwPMZnM75LmqewZjzSirlWmvzeCyWFbbwB5qusop2fbE8hOY7mHs+aGjhHiePMV3+Pszq0uH7WvN2KZ8Rj2Z59NACfSkzPzYH99CvIhfA4ZCTzKdx2svZmh0ArPNiow2tCf6C2rQ7ZPZSGCnRPydM1F49JsDM47o3e225/sDvWxd5mR122OFTwq5A32GHHXZ4U7iW4fncQsxPCFbIMXpu3mUz2QlPVKBufkEAMf53PuHPdIub6Qa/cLYY//n8BALw5+MtnsE4pRn3h5ui4D5NE24AHFLCD+kEfwI2W5wTbidCYsav6QQA+OOU70T/xzGbsvxwegTA+NfpCQDwf2/egQF8f3sPBvDT00eDt6knkbMcpWCj4HZIhD6O30R5icIGBUwLHL/SffA5UKqX+F7o4ot0wp3O5+FWGOCvltqzbnYk3G5mGmXdQvbRdCX/4oQZt+Kr/3RhpXxZ/i70Z9HqPYni/Fa/n2tbE5AtfMl9O+Yw1VsWjwjk7lI3G/cDVOaXQV1jJ5Y2tvVWSaId6FEdV+hfSerogE1n51H0Xb+Z+mT96VTUfo33cI0DgHgCs1HutsiXv4xCVQ2SyUef7G2BvTisnZxVVRYIHZtfGyW1XVA25NTGV7o6mfSdW0BDVyNSVBKO+lbDK5JZzkquz3UuaplalRnFglytsQoe1K4L1PZe4+UDWjcy3UXtn86To74fgBn4D2aA5N5z9aBBMAJOV0dGK1DplESuziORb3QQRfvTlj9qdmmDUrq1DPJK9GieNHm5BSUK64R7sTA3nA1c26qMj3DcqZCfpG69gO7lAruN6a8uZjSR7O/oftNBmJ9KITm1H+yYdPeXdvdGvyV4umYgAZ3CYFPfxuNuyPdc1Y8Wb5+Bm2fkxmSZw5xpb2QRz6jW409+rrpyh2vnSj/aqymG40XzObtw/Ra4u19szyOAGcM1OuDdMgk383wytKEpUIgzJxM86nQDHcvKLVqOzlLEvw4hotEep5W8tkTt+i8Yk+D402Z4BbrK3SAexH0BDWqGhm+8sngHePRjT+NkhzKORnbelCov4Sl6UqV0QYGr8pzlGDbPUAU64QzCezC+AYnLdeYZnDjfaZ5mUDoDcwJz/kWa633UnOoAjtZ9BeGt/PJRle4w9MGlZS5zoSjbG9ogLdANRZ+PL9zxgiF/szQWdf4KL3HtXFuNPlhnFpNcMofs2kcb6jyoJ38IvkdR1+rDwOGYo81+PcB4jI0szzmIuwPC9ifzQO69/PD6XFuDCy3NWxT7uHp4cIknj65tWoQvacwQxPK8pftcaKGNO6ijPXhUHsd8cbBr3mGHHd4YdgX6DjvssMObwUvYmaHU8+uCUTW2Vu/S+9DLs91kEpAS/j0/4y8QJl6QYBCyOp3wHQgfOJX7ihLyuf2DxPTwDOAOjImyAv2UGEeqd6YXVItyg0vVc7BR0jBqHawQ0yvNi8WdESr4e2ft4YEmXolQ28d+t8i9GrzQMt3i9Ra7g0vknrzwvpr4krgvrKiXJZfnozyfzUcWAbSWewboDln5qHdKByhqch8GZEHiYpwNk39VGYA6D0ycB+ZqhS6o2KKaOWmBZD5OVKzPrQW6TaDxyl3aHqZafqYDpEXUqgUyw6Ve/8/og7ZB82szc0IULxyzMjJtHKtULt+iTA4LGI/Btk5zT2xD1xQhewk614YqV3ZYPAnV9TKhWrGbtcH+mt4FRLhKOh/ke1F83+CPPOEXxSmd88GbThGmxQUdXDUwo0aJXnrhmHklyTcUSHXuHNn8cBu+SHKkoGasbKBTq2TPj3o/GLPgiah9b7Av452RBfY6XDVvHgvYvkr2Kli7X5RXlLcH2y9vBa+w5lnYguo5CtQ7hq8U4HbK56Bell/VKJbWNhDwaF1+C9/WgKJnL5JduwP+hXsVOiB7wbH5Rc+1LPaL6JC2cj548PTSuXIFfIYiF+FLwwfAeOz48CDeC4fdZRl5Gth6F+quHShx0LY75SuGTEDNnRl6RznpoV5VTCYGpgRMZwC3WVmeUlbMzNltO7Mc6ktnWOt0mLUwr6Vq1T6mTe0MJLOM6poatQ+75yiuZ8hXGOHOO058G/L6ITmpwLREy4J6hQfWF9IPw19z8umaELSdjdJ8uGKDP8xP4CCHrWd1w/RFEpgdrmUV30AxHbpiD4teV7TXTOlNcL0OCDRNoImKl5Fu36l70m4TE71vr9dr7Ah22GGHbbAr0HfYYYcddnhdsG7ct4Lf4zUbNncfulVSREr0Eq7x5XdO+Bkn3B9u8IfDET+ePwJgvD8/5+yON5gA/JpOeJ7zif0/TxPupyP+a7rFozD/P8ud5+9EsHigCcfDAe/PJ8zM+Em+f3/MlujfHW9wC8Ijz0hg/HDK94V/f3PfuoO2FtkEc1e5Vy5hnVMuaQIhD4ChVVmUd6fM9JFcAi/3KpdKKjiF+gHA4RvgeeEe9S7PSyBSAJAxtHMZfvNtvt/46akmi+R5i0jasIEC4lmEDqsWYwsVJgBP5zae5qeW6Y+nGtcWdXMDYAZOPs85j5XjIeclVx9gkvxPyJvbSfAvFnMSr7nXHuK+FsDZjRmV4YmuPgS/6XRFlTjeai1QBpRT7Y37buNik6ixPvfN1ZyoJ7FA78YPiw53Aonil31OM9vY5o8R5IYPCKATZhrhn92Yh9PU0FGfnypHo6kuikxiFfo6ot1dO2HTaXCEELX1oChM3xV3crjpX6pxfR2BlpaxulDNl6yT9lW59l3K51v8mcWJPzGQnkV57soq7ecaoBzucu3SjVvfLopHSwdIXcuXYo2SmW0L8/XCpSaJufrAK7DRxuuf6rgOC7BLmpcHF/S1H6TsYkFnBVPc4zYUULlgsgFXCK98squhV6zUMRytuQvtugh+IPqJxG3Ui/Ie5WnSbxmPa93AHkcbabSeGnxG6/c1fWn7p9AToFwBARYvM2a9tzjr4E85DR0ou3rXatzLw2NhCGMcRtVWuBuEq8cYpa3dMEymO+dg3igCWxrPJJpQaWxTrlnIbD+rN6bJjScg030wCiNBR1lnZWFoFO5rDeXw0Pb/uG1gdPTJQmE9dA0NyhugsQTDER/i8UKC1cxNvuisSZuN6ecCV2Y2ojXDuL4cjwsFcT2evgw7j+Sd7eqX8+KSXvkCHfsMTgzQDE4Gv5SAQwJ4BtIBxI8An8ApgdOtWJonmR8SD6pM1wOIvu5zG96gnFy44ynMb+GJ/VrbWLljHWy20XCV35CX2LSeKN1dcl0e5MWuzxeH5wgPu1Zt5Sk8HgaH5n3AA4TzPnXRhgFLeDID0yGvb+cz6kb6gvV9oejw/Vqy8DWD7WO7/43YRADN1VRtBkHeV9L/LQfbHVhr8ku8QdXDsgtpOo+TnxkImMSFOyeuXRBZ8lueq8SJ5lBcr8Fu4XW2IjvssMMi7Ar0HXbYYYcdXh+2KNGXhH5ebkELSnTLgKpwslgo6nd5n2c8pgTcWpGAFWwAN9OEMzMSA/9OCX+dEm7EKrXdgjLIsKxquFjlBrXsZ2TUJlNhgnknlFOrbf3ZPJtNgt0wEBBaBHZyHxOnU/Rwm26VC98iqFqJpuUkZCX6xr3f5eAHWTToVABOdXPzauUaYdnFaS+J4pQWA9lKK6g+Ipvimcy0DVjvgRb8VYFqq2V/Z27zWKuKNosxMB7Kdln+s4KEQcUewPhurf3c7pOoOm03NXaIyps8TqB4WAdF13gEa81bqxwLCx6xMBWsgCUShjV7cCcI9PvzUkWuNNPT1/Kkia1P/wO6sRdOM2Px3XS2odPNe1Ow+YZK74Fl+lfWDPYfSlhJqUqdw5TvdqQj/ihK6UQinJ4hgmlC0bZ3ddX1x4f5ugxgY5zWAr0dW68jXCIRs2thRgjWuKzPcdrxMQIvJPIrsH6q7po1TaOc0sXWCuu7gf2pxUkj6eYIj9HCOIrr5vGYWC4X25UV5PWiplNcyf2+AMjU/9qs7k3bLpzXuxoiOrwpjaElESiPt3Tn9FbaYvO0v0vPS4tQw0eugaPBPCP2ZOLn8YXAJ8MX04sdIe2wBK9BY7cMXjd2Av5kOy5ReVFeURyF4Fu3p8p0r9clm+tljMckcALSBNCcQxLLHdMzQEeAJjASwGdRkH8E0p3MoxFfPCNf15RvVq9Q7lzqqqzsdgkbLaURX7YSFGcwiKg8RrPXjcpZKah0wDTg1fzad82Yvob4Ojw2wyW8jY33GIT56Cv50pQt+c96xcCn5rF22AZuP/A5MHCbYSryObOPsN/NvIgU54sK+CUPX58M1P08gYidHlxpmJO1DA/LaJrluf4qoqoddtjhItgV6Dvs8EnBL4JbF3wv1dgiRPuS4KX4vSWL8KW23SUbpN8IC7UkQ9n6rVGi6zdVZsgvGHcz44/HdwCAH84fwWCc0hmJgT8d7vDN4YjZtP+MrGA7gPCX4y0A4MdztlD++/EeDMbdYcIEKuE/ye8/jvmucxVe/OHmJpcrluh/u32HBMZPz4+mywnvbm+ROOHp+VQlGqooKsJBZcqNQiEElYoYmsPu+5IAfSS40I+NsiqOUuVf5q50BkBPwXC/B+4O+aT7B+fAOhJSR4rVLdNH07H5ffgVehcgA6Bv/whOM/D+IccJNaSR5Jnd8wgBLxhUoRHa91IWcn8nG2C/y/vTOWd5e5N/1VKdAeAAPImlyv0x4//MbdkJWYA3i3DuMLXdbGUn0RKlY+bEACaxZKc6dpMIrmZJfLCZD9Y1nQdl/JuoU0XkgRl/mFT11yoyq3MGEuu7+jfJkRbqKmVRUGVHBLIhFuFuGeKuS1vxQHzGfqjfKXSsJDfPnaS2nbcMWIuneFhq+6tyuJbXeSjuCgvKbRJQkEGU3o4BBiGJLMFIda2CpElmBBWNPNyNFzJu25mru3YZF3/EEUee5CqPhP+w3Cl6lnlShFMcdLK6V3D02rtC7xuoaSqU0WjryfJZ5xLLmGYpSu5oZVP+qKttgwRzmbiUJJ/HdCwiwcM1wwcv4NdYoI+U59oPPnOfaYNfMFeugobgmXBRdshzVZCy+YMLG+UX1K3ElfCuTcPJavLx+K41xGJjtuU2abY2sF0v0VaZGaHy+CJFx6gxjEeHkD4JWIlJ6P7dr8NqDW340SVeXeIUmemNhFvLZ57idsBK3lHUSXBLvIKbmyfUf7ocbF/LQaywL5cKpSZ5JrmOltl81RHSo+8nzakvnwHgQxtOXVtp+9h5vdwwq25sL5mWg9yWR8OAvwqz1/q5NHKg5RKrwhaFS2hDSQTPG+T+lnk7vFd2a/6eBhleogy7S9YNzU95A83PfnP5JfEAlRjQQ3t0AOic90MsCnR12c5PAN+XYgjV8wWXMs/IruPlpDJNqEp3d3Cn4y2TfUFtd+uO2azLYRso0CAOoZv/zZKn8zpY07YqzzWzLjqPy25QXGBSlhHQDBDXf5DpalsulRPxC0u0ydIwBQqj4HjIPDDrBpD76BEvEmamWbjvF5CnLxZeFX9qfrowMmOr8fhVEYmHUxt6/XLu18gLeJGm/GyU0twYvnS4ZSstuRyRLsthHPtN7z4nQnP4Jxr+dv/HZv413iO4/TbKYoD2Djvs8DawK9B32OGTwZJwYA1usCzcaAWrFa5jYn6/4DcXTjh/cV4vxcUqaUZ4fAV9HHF6o29+ODfpNrhyb/JmI7zUOPn3l/MzjtMBN1NdBq2aQOWLj2DcZvUNJlTXzgzgz9OEf6fUMP3J9LsV8WQxRb17HeaXwNUGwLj3nKjen9wqYKgKErp9st+gG4EDuXhrAoHRPnwUN1Dy9HEG6dJHF+EJSO/MHcQDvEpZS/PDNkAQNXRnT2VTOtGEmViETj7PpbL1+9K3K+ZvaeuRMMQLwHRMWFeO5pZvNgoEjU85Dtn7EInaPVwCukvGdTNf3NeqVI+qq9giSHJCtyUBTPc9oaOPioqWYbu9kQ9G7U5NVIKPYjftDMZcNvmt+JpRb8esBdcZTpW4RJUL6h0OdZ27idvrLAntsLICxzJ25WUoK7Nrj2RWlOjTRtmE9K07bV9HbEQfemEfgQBOoBRY+/tDK6UNRvN9ct9a3JrfdMTNlDAJHv/GM/B8BpKOZ4lb6BfqGjRpJzhX6zSbBYH6MVAOchgrqYCcqlV2u9JoNDsQBA9W78dkqlhHr643pSA3TpL8qjK99F+JQk3JLYGOJnWlrUVARFzpUIl3yN+SCbMKcy9o6kaIpnH0kMy3TeR3lRi14To3CQBbzwzRYurpOKHVCI7Q8YugO7DRzOGtsHWx/8QQCRAXidCWdbVjImrwUhL/vHhIQSPqeNc0ni4pvpNB3btlaQqNkS0KyaBe1n07uQdPa4KsQ3jxMOHwsQXLMyjoSTuZJ+XgUjJjJco3LiT3UF/h0TrVy/OVwAbjNMyV2vFjafUShGRo0N8+mtbQrLEMAne87yivoJwt02wJQqXaqD382Oegb12aa33Ld3gGuCoP1oRJ+WVtM/OrWS4Y+d4ky/OZSEzIVxJI+Gz4Al1foGNd2+EZWYlueI/OKwsDfEZeV5UJtYdqLc2x+LqDXx2dCfiIkkU3WRaWJU8PojZHv/Suedixhx9SFG8jIYtwugRek16GvE5E9PT5DOBpGRnftjaq9tnxBjglgE99HuW1ZlKv4Flo93Cs6LoaLU5fE7wG3r5jgj2MPUhcWNuUuXW288Mcegm9Nr0u2MNVa4fGisv2pSazh2XfCm2OVh9ybHdA+w8TaDoUR3x1e+LGsPZPGf6GfiYWejta5zpUvzRufYcdfhewK9B32OGrAL9Ejja9Gzbhvyt4Leb1WnhpX6z1++8ArJCmEdjISwmTjQIBrWtfrhtonR6iDPrp/AzQE767ydLF9+cTGMAHnMHM+I5ucAfGT6cngAjfH3O8g6hV5umI76dsiX4k4M+HOyRwuftcLdH/k54wA/jLdAcGcEZqBHb/4RPAjMOBkGbg27sbzJzwQe7g/n/334HB+OHxvamHEdaw25o0sibCN998Cybg4/v3sVzKb3wjK8m1ocxOSHwJ8D0wG5eGCsdb0HQE4x1Ajz0YK6Q4AAAgAElEQVTe5SGh3ncPF8luPskVUevZVlPSSJ3m5yfg/GTSGwEf+TI3V7rFq6sT6g7rhrL8w2/c9C5Qb+nbCGWRFX9WiJ9g+ioBTx6PHJcgJ6lva505IbtqL/s7aqtBqqQUJaAKE0ks0GlCvs+AgaMRoDR/po6R3KCkSWjHHJkyXfyIljrv9ESRGL0FBox1r8tbaQvU9XQfJ0/JIs6uCADS3sA8tNbw7cL9c0MvubZHoRsqUPFzAbA6/iaj4t2iKdyBKv0O43YvwgTC2IoSpQ3JtEtJG97x58I8DbDvxcoctX3sdJkmgI74MxjgGQzKh2fSydypa4ovB3zMH7t2K67UWzT10FVbB9+2rjzk/OIpYuoVE8uSPqPHADGYUkjDqPzPtVlLPwBNW3frhA2wjQwXLmOBk8G9zg7WeV5eUGlEo1jlAIeg7tD8OEarJzJ9FsWyxBWoa4OtcvnAqFboE/J80fDaiLXNNd+2cG6sQJtC0FZoNL/WKFxbpesiDXCIpusgHzszmvbVPj9KwPnCxbfciaH9AdR+sQgE7TRai5pA32fBvO4kxG4cFSExNcEdTtQ95MiRsqKhgZImqYW8xR3LwwcYKMDCybcBDB1QvFXJpbTzIAh1blwOACVzYClY4y0vq/1+B+CReyu5cNkN1kmfoCnaZRKuhaYufn0a4TOMw8E5G89rxKC0htf6jle+vZaius00eF6IpgF2rjSL5BKOa2M2IFwc4cXt3FHey0O0RneHAZWfANo9hvJOEc4fTBPc1/gdnNEfVgOyq3egH1BKJ6YarwNufrrnJmylvaPDCuW5Y6LGY9DkU5eOdr0NkHsjqHxUDxeU2y0na8QaUvHg/orhlAgO7jFAhyNwFu8HYFQePuLJTboR6WAXMeS1Fub/VwMvxL/jTwndIR0fmTNVt84yKndivYYsjJ3CF7wcVj2uNJF5ZT4P5pHn+69GnTWHmhcjX7EItDyFwkSg6ZDvPgfJgWqTvkewhKkDtFIvvvTg6w477PCpYXC8fYcddvhyYbR58vC1M507fPXwwTwvDdlQcDWK+76PGG3aI2ulxjqFi2vq52SdtVfmmCA3Ihe5XbU41a3LI4C/Tgf8QawDQnEVUWcfpuFaDgg40oTDgUCYcCiKyD6vJlEJGwt83xHh3n73gteIVPjN06CIMbwC/UkJXBQr9+bDaPPoPkV/1+DpXUFbKcbicelXhHLcMeozJ1i2v93fAdkCReMF948al+ZNeU0bWuGkhvtIbnx6xba2a55o+e8AUbS7dJ2cgIAp3wnZ/HF/gzmbOR22T4FpPExc8lb4UwWcdeudrbtYBNSJExJnwQWD87gu1KTNm4jwcUQEiatA1QoOO1rBtQ/ZhSmKrgrN72T6xrbTa8kYV/NZnLQr6UYFiaSicZMnEr4J+d5zusGfcAQBSJxwxoz/5VO+73FLO3RjvIY3/4bKMLhyFN9xjWvU1xUAv25uowG3gkC4dr8yXJSn71h9HgkzBzRxmO8lOETplvLZWMartPFbKiPeAmT9WIKz+SvgF1gPW/dro+iX0kBX1h0C63Nyw9G/XwMv6W/uhcYRHx+1Jaf8V67t8HkHvMMAhdeDC+b4S8nBBf0Vj86vbZ4uwCevykqBZf3aQgOiTfCqlmgBlu66Zoy9nDD6EzIaJ7l4C/Cp+mJLsw7jrNHu14RlHm5T+g627FR8/C1/ARx0z+jctu/wCWC0x9vh00Ae6+wPZE3yd8i8ox7CL3S/85QV/NnvXMvaYYcdvmzYLdB32OGrgi2LqzJZ+0L8OrC342cHRq9gCPcS7kNzklW+eYv084znlPA8nfGPm+we/odzdif+3TFfQvnXwx1+Sc/ZYh0QS3Qu7w/I7twP4HIt9EckvDtMSMx4nLPg4Z8pCzX+erwFId+NDgDvRZjxcD4BAL45ZG1iumXMKeG/n63lObtfqRsB3R2FyGl+0ru7Yb77qJFCtpy0demAjdMi6qQL5tOTkVYT0CrRfZ4236e8sZnvkM2dfdkEMasGABz/8B0SJ/DD/0rIrcTJ/YFHdS8fKL0Il3vKvRQEjXInqveeV/rkYMKN4pkhY14i3kn406AvHo1lt7qatv1+YzaJFgfr3hoQj9kE0ASmKXclmQSzydPCAbn/VMd8kPiNx3ajBFXvA033MH5l4DtxaelJRrZqFnzll5qKjoElBy5v1HxszlSwjUNCgsjcTEB4AvBOFKs5ulrHaUnmWI7qEVXxUehaqVhFoqF98nF0K4g9zEBohTVsfkM53kChtybwGdIfH22JZkSEzIdx/1sOiUh0uQ/4j0w4AGDKTvp/SWcgnWWscm2D6FCHr4tRphMxyCroqPZu29ZmzVoVDtcIHIS1g8aEv7KifRnc+luRaH6aZ2aZ2lzem9+Stazn2t8jy1vvoeNS6OTQSjc8KlvbdSSoduP26m5aEYZfDK88Xrh7iMtapTUjGNR9tRoB//QWEFruCehwPt4AJ3fRuirC1RPvkBezbRjwfMm+E0KLqjjjheaZlj5uAINnp9Pz+XqejgCe6sJbut8LpU1739crMLJzI9MGzRobJ+/Rt7RII/vFloPxS/2w69byhXK7RFiIz21z1EK+QnDrx1XKpYihWer0lTDfb024XYNG67tZy2zcaF1Z8uBT4COyJbrnUXVMKX05oFOOq6v3WiBas0rPU7j8ozI1H8/veLDe4zx0VxK5bwHU0hhxn39uuACf0XC1jdLEYeTDFITxYe81AncAMGU+2MS/5MDmxbOT13D6nYDfS7j2uNoB3hsDr15t82WDH33N/sru/fRqjSnTNVJ6XZTnC2V0FvVfYk/usMMOEewK9B12+CrgWqb/K+ZgvgjYGZoXwwcA38izl6FbiOTrw/f3AH9rBBVkvjMa98SNwlzjapj5LfKDlmVmABMR/jAd8e/5JLxudS+s8O+U8Lcp6zhPAO5A+CiW59E40lvlCMAtCM8mjuZPoGyJjrndKFs5S7mbmKtAtGk0Uy1uHsL6dtCkM/FWko3h6oQXyLfvAHquz13ZfbYTUeiYcBGuJg+X0OWFuE17uHhOFleWkGua38/FTgYsQrEkHyYVklF2ia1CYv87mblr8ZlMHOuiVOvDQHbbbwKbZ1/5COm+fgP/EU20/JcV3I38qLwPJeFQATYRg5nwEYTJWPmzxi1zGqLvoB79goztUKmzKkVgvxtURmNGD0vYyBq3cUnn0myG9T5ogpiD7Ed9Gg1SE3dCtRggk8YKtEs/MBIIv2AG5lNWntt7uG07D4Xq8m4FX92d5wsCsKW1cgRfomy4wIh4C9IMJwDX8ctDwXibb5D/i4VSHaFbCY/et5b/G+fVL11v1sLnUaQN7XgUmnt+oRO+tziI4l2O6xpIVL3/r82lxfztL/Uk82p4aVvUNa/AKj7c/DTpLkCHwaBIubS2J2kKRN1LjBDp3E+P6IlGUcZkUM/NcAEv9LXDRevmVl7ikrzMGOjYA8MzNHuqDej5D5tpz0f59S7dbR1nNLiUvM9oxcR69YiPrziRqVeA32uRyy35LK4h16zPrwFbFrYRUNNzw7TduKiu2xfJYvdBxqgqB8+qPF86LW4yiXi5q+CaufgbA3IPW/dcX+xe4CsFOxT1mjuasuMiMl7F2Pyt5ukj7p22ww5fA+wK9B12+Grg0oX1d8507vD1w+Le6T2AbwfxVYmk4YxFJbpsLX84f8C7ww1upwNmTvhRLNFviPAnOuDPhxv873wSBQvw7fEAgPBeNpc/np/wX9MtbibCDMI9DpiI8N0RSKgW69aSXdVnt0WbwvjnKW96/3Zzj0QM3AJzSjhOB9ymGZyA/z2fq7CVgEaJrm3RCfDa1z4uBhEQhPE4yiaIyrt283CBsIaQBeiMcpf36dcHwea2j+sz9cpHW85Rwpzh2CrcEoAJOHnhBDU/NV9qozB1wc0Gzstpn+XDnYy+50Fj3VHZKGKiarH+bDPmGk8N95/l91Ysz4H8fXbIzDJH1dBFcdaTDEfTxp0ba64crN4Pr0oBM88fWK3Q287UIyqQvxy7howgu2AX8kJq0RXNBd+m1vqL8AsRjkQiCyF8AOGdZPCxKHLzfeipk3wJltYKydZfX4o1sxfs1yyaccyipNH+sAKBkm3QQiML9PB7KayPp3RIy7NVUASG1ksLSoKJxIiGs0DQNFHFLxf2C6X6Ic2ZRswaZ0ng3jRSE8XfhlA+lnq59rFZlXyo1j26nqTDzN+vXuM1Tyvu4V8Mfkw2SNiKsgnjOuctzfXtN0JcyWjjqh+DfOyHrSAt3C1hjg53fdN16gvA5/UFC964e1iNf5lu2syNq+HC9M0doluQNXRlS1l27JOWQ2I9/v+z96YLkuM2uugHKjKzlnZ7bLc9M+e+/6udM17HbndVbiHi/iAAghApKXKpyqoWurNCoriAJAiSAAEqz1hb5GD5XQ8P5S18B99HXp8tyd626MGOteYaePZiXePG/eKkkkugLKa3/NpaDgOOuffmNDdPW3op2/OJLmvQedvlsaiDS7T45uoWGue5o8XAaPMrgU0h2sZhjhxZM3fXJL0OD/OWxcWy2p7GGpx8XF2bderS5WHceXzKOPOKdFXGVp7EYTxUxKMS3c3XyghsvGUXJ6w5Ofw2+YVIcT7137mJ0IfQ1294ZrwAav9QE7aMVZ9qe/ZmnoUF+eId5QD0ecVt+6I/Oh2taOyZ1L+od6RvAIaW5519QwB2/4bAA3YDtU1mw7B4rKNE5U/6qbnLvJk/YsNz/WP3e9D/AQd8E3Ao0A844JsAnWw7mw0Aww3eAQe8BXiqFXoMWwyBTwB9bD94geOWEt2EGfJ7nvFIqRgqgjDLuCMi/IPP+F26wXVKeABwDUZmLq6Y3aL3/+YH/H+pWD0XvR7rUrtT3VIu+QW2s2IhFDwSCEgJNyDcpwlXeXbokxPA+Xy0kLB4j/EW0PnWjR6klVsy3SF4gcwF0bcgd5ThSQTQKQE578vPf7dN0YCA12j7UrikLXty5tGeLU4hno6GwCGvIO2Nd6aT5GfK87Sef3f6oiC/dO/gYu2+aO/enNiKlKoIKtxJzbIJXtnA1lGZ66aXqJGVLvFYvv+LYcp3dhX43BAa239dOvAb9J78ynD1zwMB2IikW3Rclhu0ssrgt4haeXIsq7cG6pUX3gnmgRJpAmiq4Y2bSJ0/5E5dcFWeW7Yd3DO1nk4XuPk6rOC9UY1+9kshpYceW/h6MJiH9BBYlLs+987zhWVH+LZFRrvhKZPeWkFP7bUnTb7fFrzY/BozealJ+yWBAE6wq0rIha+lWa3ba9b7K7dh5B8G1OcvTVoaz7Gb8518J6DcWeME4hYuY1P3JVH5QW4tCsAONWlaf01FnCOeCC/DKd4Iv/HTrHejfzFJPmUSHuRhOPn1WeTtnfXHYsMb17QDWt0Nd6jW6GFNNVz7PgA4SblZ1vUZ5hJj5Gpdi7gEnktSo/S89vF7gbhgv2u+rFIyhxjMwHQFzMX9Ut03Yb0tDwXgy8GuOX8N2r5Q5e7RQ3tBr3Qb8GtCsUCX/snMckgkyEd68wq7P3C77zzggAPePBwK9AMO+CagJwwcCUNGQuYDngbPbbu3KJz7CuCV6M+BoYzjAmGHKkPMOqQKqc6PZ/zu+h2upwl/fvwMEOEhl5P6DOBjOuGWZ/w7Z/xmugKB8MmZHDOA/zff47/pGtcAbvGI+3QCO1VZuUMd8A6jGcDvT0XpO0n4Z2QwGB8wFQv2h3sAjP++/oCb0zX+fP8ZrTt6oK8cp+VrV9neRGjj97Jln3ggtNozfCik3UqzR4hIAOgBmN4Bp1MR+tyKW/cHEVhOCPdyh/xi3kkCc6euPdKz+mzQ5QOj66ZfBbBRD6fXjY70c6FLhvG85TkzcOOsxYnKd+37hTIz5klioe6Exmcu7X7l0nscrrUdpb7ehz6hb8nPKP1GcgjCaDBXmvZ3TYPxCxg/AKgHapaCSEoE4jIme73Vchcn8Izyzm7bOLmS8BlelBI23kTgnMVTsW624WhJxrwX/nuFcCNLY1dvJ4RnVwePr79fIspvQdg8bGGd9FRQ4WtBwKqV3DePj7eibizFWdy2oyrPOd736aJnEWJklIM2vg179K/0FOcg96xDiZuCNBsuHhq8p4BRc4yavGkObsN1eGlVolXeGrzKktH1TZT1NmUPPnIIW+DINQ5BLG1XKnLR3eh+3Gn6MBa7OPXyiUK2+G0vUmsMfnVCGmfJw5cLYMciYC3rBT/Dsn2746VXf16WdY4TpI/e65eI30sNjk6/Kb8OwfatCVNcF0x6+U4r3/aCZ+mMcG0y9S3TL4XFfNoBnca0/EmiZg5DKMyDozzXridhoD041WmzxhMMrTcrLR5W+HGYz5t1qq7N6EJ63EHfl8KFZGTwImh02qi6rRnMeTpm1lZ6XYLolOu+ReUJAY0HgmF+o7mjwwDiHPgkuAXjxuGq5Sv+PcbziMIAPA5A486dffzxnNhbYe+/T5v30XuDY8DhqfT64nBpH3ZotmnzlXVR2O8ApR9M4RfTpCuxPM81/Roz9e296B85CNyt0gKpA0awa93Oa6/9fUi/sJ1IraFSyqEB3jF8Pw94bYjrwsEcK5s7lj1nXbrpHrnX+BwC5DC+Kc/Xrkg44IAD3gocCvQDDvimYI9wLQqHnrvZOuCAF4aR7GL0bSE88u/elbvbDKoSo2eF7vMwAZm8MPC/j3f43dW7kEY2AyC8pwl3E4klugPJe+binXoCcIMTEkpcRaQp2kIJFLaZ1wAeRNyQTDFT1CSpGecuRxXaNEKc5sEj3AkbfNsld+tE2iGzbyI3AoF9SYbA18B8X/pl6m2AUpHC+vZpqnCFRos7aoM9bHk37MzE3ZP9ZOjhvTY2Fzj4dD6hntyW9xSFcirUT21Q3GjrZ914ahGJgDm3tNVcYcBtPYwHpJW6bUv/a9eTxM+LUFAaCIvKPPxzGxts4sR2PGcwZi/f9H3NLg8G6qY7CjLbsho+sehnaukh3ucWs/oS4Pl1U/gK4XreD4jb4gTQhN8iCWUmEVUw/mV9yKJA5zrkG+sxpekGQTRt3pM9W0w3XuO4sfmFFp99SbugE5H3Cp0vyfQ5YPJXdn+Ljy3tjVDgQYQtlHtW6F2I9Oc7uSfMjoNlDZE9COyaeJfQJInlxHHzhcDm2Ri+gcPFtPslmNQWYa6lWV20tI9EIlxVvk2VZ+j3PTi8dDc/tYn34LESp1us8onYFE077Sz7RUB5RA5h+ttbh6OGE4Vobl2vPKaZF9sDg9vr9i85ib8irHkS2WWJPlrYxMXRaFG8tZ9yYxbA+kEM7mfZi/dsOmaA7gD2SvSARzf8DFOie/pmxmL9zBnP3p88FRgXzBlflDG8PPTWTWB463MAdji4kI/bs7Acu/QyA2d5rmHqSW8dh+fCN9wPrwLPGz8jrnXAXgju2zutWcZOGXOsB/rF4x6ZlzpUtm3eafzex+1BjzFwwAHfBBwK9AMO+CZgNLGOlkcrktwDDvha8FKu3ON7801eLEwEGBbXCZ+iW3e1FsjA+fEOP11/QCLCXx5vAQL+Od8jM/C70w0ICRkZt8z4/dUNEgh/O98DAP54emeihisAM8p5f5xOABi3mFHU5RmZGY8548wlHaPcpe6H+8erdyAAP129A4PxP4+3ADP+++YjMoA/331yCtWOAMTaJoTxKJ62lWtghihCeaGvWxfW8zhuDBsKPS7dCro68XW5Wzy7PD7K4YhPt0sBxAKFq5pnfuzjrfSUA55RYdZ4CRDlvf/u+XZPb6iQpcx4t6bhERLZHc8hQ9J/5IPecZ7cN0HV9MW+3pr3A1APoUCuWaRarn4nyfxavj36ckhOo0i44qHleUWZyXYotJ3Ok07hIBF+IeAHACwu16GCI2lzlkqXHJa0pk1aZfHivtJvfEXwvRDJLaw8SGpCXcpWA+iswnKfaRy3xACnjiDNvVs/UwjjGuT7W6u0aIaewHj8ui4k3ikoiHw+U/vR4x9lEAShOwK4XIUxWX87MaK6z2MuJ5+adtZY3izfV299IqtkSxtxUWk8sg1Fp8MfV7kih9+1iFrXl74/tOEVrpwenbLHAxWXHhINntmleQmk90Ez5PzYfq4lzSJ5d6Idf498/iuBctjlXauLCbRts+fgv7BMX1t4xLH8FPATY4S965YQTx+TmHwnCTgD4HPlJbp2HfJ+DQqTUhPflTvLh73OQ/z8TNhxR/oAlO3tmW/cskcfyvTKGCrsYr19/X2h76WRbpsJoI97d67jNnzozUDCGajK8kgrilvApalHZ63o1wxNcXtp8RsDq1ZoH/PKJXVeXOlBYUnUaf/loit8H737Mh1dNHzN0cpW1l14zhyj8/wt9E70Nj+l+9767RF13UsoFpQdfEboMbDbGnkTenPGCg5b0+hrw4hn7E3atHNNx14ph4yoPK8RY1JPpwLTySnPB3Shz91PFzQuD18OcLCYF5/gQWqxBhtk0d7l/TIQy96ySH8blBA2lv4gnpdtMNvIsweVMVD0MVl+2Vy36zUY+uzjHXDAAW8ZDgX6AQd8M9ATAPWA3N8BB7wx2OvKvSfvGcqAPgH80X2TiF64cqES/d8Z+PfDZ/zp5qOlT0TIMg4/gvCIhAfKeIAoyAOiaqH+DsBtEM7Y/ecEJFKbSFeFTj1J/v1RXUdpGMHwbu6V9Rtgq3sIi/GGQLY5MAkm109jdhOkFiN59tr7Ll622GW2z949+MODHGb40vAEYfpqdiOJUE+BcAF4FLxsZokAFp0vykoLVwGxj2OKwtRuRv2eFWjldGp9ZWm5vhsKXuCpyDtcfTnKD6R8osnSRVuLKK+2kuwAQwaBwY7HlJ8sclsCMuPnIHDSiyFy0zSFM8zmsj0i4dqwKzTcGEw9IZ5v98UftVk0CqrB2Ja6l09RG6PC5B0CaAtfoWfvnp6kwZiK0mlCDfM813JmgOfypy7bTW4YOttSZTT1X8w5RrCDegzGN7fZxRrnYI3f9Qrb6fYRh/jyoPTq5o4uX3HjGr3vnfhAHQ9PkfztZrmjSGtlNoNnI+6e8rfK2sLnrYBnei/ltjJ4PimZS7N5re5aZ790222MewW/8BvSsM6t3Mbz8Z8w3T8bnkvW2Jl+L/n7l9Ecqt5vmHWBjnacDjNeKTjOh0qLHgkfdwffUCW697DTFBPohUhoPTDXl+ijtwq9oWXDzn3cHBujOdu/PxERDmELzxGjDhqs7Z/Vl7rQAcqGHKj3ovu8Iy+Vj/SIeid6vA/9OXhtQSfztWVkL+7X4I9D2N9YrbMFduF+nPeU52zpe/NKo9xMk5zaVdrQNXxstsHe47tlMN8q7OEnByyBYKcA/VpBl5AyrzdDyu3Hiy2BX/Ox5Wrqdj2wbXui7mbogAMOeKNwKNAPOOCbgSiE6+0EovTbpzvgMnhuu72pndrbhK0N7XO/x8i7lOiaLwMZ+Pt8j/+8+oAM4K/nW8vrM1SJXizJ/50z/nC6RnRzdg/gBsB7qIN2dede8iEQJiJkZvz1fNdU6KfTDRiMP5/LpvhPp3dIAH5mxo9E+J+HWwzp1NbtPcGMC2vioY1L4UF+pvfvMOcZeDyLLCbmNULI5d/rN92geAv3Zw1DWuZBKBbpjw8BCQaup+IafEYfTmKNfvbt4S/qDpVSq+xF83sePiDgHm2fJOAclUsDAaFuzuyOeUfvTbqOUM6Xz+49wVXZbTR9Q9u98irwDQLmM0FOjpRftUh/kLieDkwICiCpIBm1XOZWm+hp3pTkJewXAn6gZGhzhoxXApEoX0IbWksRNc9AAhOjHKkhSVq3yNXqPINzws+UgYmclwIqenVqOUauOQgC7muzzw7rgdGywIScflynNrJ6ByAUHA3F2B7FFYG3ILA73yJKGtAj7+h6dVWZ7mFlrPjCJ65eE8gTk7rXZ8xg/AtzFWRkpS2lG8en/DBt6FoaajQHST2bNupWx/EJUlwJJH1fSbptYIqWvERVIMrtpwVeDRKvvUYMyDRu29nR9Q48osC4ySPyRZ8G8AcQngbBlbbHvSmXsKBJi7CCw4t1w8q8sln4GuFchoGtC2IRi3eScegzoH304OP3mDdhGf4cYEd7lyVErWBzN0mHLt18zu67ZRHH7IDub8LaY+YlKXqS1F+/pAG2LdJ17PXWEQHF1UzWmtRcoobMGtwH/WzNFdZJvi3fAbgN/HSVbgZ91jTsIK6fX0c00Ch+Y+M1kyea+T2ymHi44rVZ/ZcCdg8EDK3xCbLQo9CtoY+t+xYN6J7b8LbH3Fy97ISAfG+c7Jn7XN7P6sdeYlW8uqvLVvcojwCrCJlQBu+MfUr0vbx9xEgGafdMXZe2+YvC2jp3e3By1yMAUK1Zb7EApXXmTnrHcEmYPJ+BHwj4pWXGzJ7e1bPSAN/d0+1KfZu1Lgf++L0wsX0Qt+uL9bufesKyYHivePB29Zbg609THZ6ne2EC7OA/0F02F67JTTA111Xl+txYoR9wwAHfChwK9AMO+O5gtLE/4IA3CFuyqp4sovv+SZ5H96FLGIcNh9+UeLd/8m1+eMTjzQlXabJvBMI1GI8ArkG4B+MqJbdk1vvMy1bAK9FvOwI2oqJEP0dXV6Fh6j1kVJToifBz1s2l1k1+TbAUGtfq64V3Hp2V7UsiIDOuaAIlwhnnKgg0696BMHeJQD+4F/0yOUMLUWiwhheFdurJvRbpT1hKnF8AyD/srXDc9K1Eu3S/1pMLNx9c5qoEz1FCr4+MpXKWqqta3w/MJZzZeUxnICVQInCWjahZHyueUnbSvMvPL2D8oEprVeAn3RxHGvBjr+RDKGrYnCq6TLVxlAcwzwBmMa50Y0KvkBQhYm4atCMB9IJf34Y5DIqeoKQZ+64v7E56Hf/JtZW+Swb+YBF8fg69VVryiV9ZNKLVmlAOW5Bp0QWTojgHgH8io1if56JYUrqKNLnyWsKkfmbpHsBbyHehHVgql+yv4vivEScAACAASURBVMi/9EGzkox4KETb0Rd7l45b/a/4+LmB/Tfukv6+Ql3+I3hpslPcVXgZ895V1lOResnKfG2hnYggGvr0C0I9yZY7378H8H0pRExl7Vj+V/6saysAOAHZu3F32cVxMLqCuwnT9eMgXUzTA+uyuBbAdnc11R9EXkwy3D52lhn9fCK++iwP79HVQb0MjMbtnvFc5pfeHcR11nDz9Jo78leegr8KrPV975vv/12J9hDXS0JvwefCm3XdU/JeIwC9Gz3iQssgnFF5eLBEX4HBDnAHcPdxFGX57UkT9Q58Llkojea6PYuYOF8A9f7kAePaRbpTWSvrFWW/dE4ycXS8/6WYyJcee28Jdta9G22Lng7YD7L2SnLQ3jxAMhZXg8hahdmPadnlN4e1j3vPDzjgW4ZDgX7AAd8cREnjQiKC5Wrqe9w1v3X4NS/8N0C9xu1x5X4pjAQm3a5gtPcohwSiMP/H+QH/MRHen66QmfF3sQj/4VQEDcUBe8Y9ZjzmjN+kKwCEOzHFvQbhMxgfkHAFson3s5w8TSBQIhDNeMz1Ksq/2p3qpZwkIrT/lDvR/+fxFo30cOHC3X2OPMArGfXdqj/gF4LY3cNta83Uy3NTStKJoI9p+alJQhJnaCkuadf02iqPgMvnfsbquNW7ua/k++OKwNfA3XWuFWtc7DtEhoJgCTiH9whesQN25cV4SvOqfNLyqbatz0JR1GqcXKam9HZjSdMkzVOFPV4hIHmkVC3S3UEMow7i0t56cjtzuacaDErlt8iLZXNKsqlNDh9Dlxa/TASaEkAJTAS1syAXh1x6Sy6GNlG/ncHIsmHO0rY/k1hA6YabSK4uD4qB0R2ukL5SPPTQzHD/TYEWUMcm+fYPfaE0SS4f91NDS4AqZrvGc7XQ2v8bgtVt8BXutBWhKM8nKYsmoycA+BcY4HPBJ8/F24TKfD07cgcijPjt0ZcbhcUSKXM99OGVPyMLaF48OMWIVIz0SJanGe0JEhRZrNIl9Sbvda/PWar00jZy4jD+/RJ2dBVBD2I7RbftW/Jn5Xfd+d6lX7OkHeXdvcJwhVYrUh14qbV6byEUv3fm32dDsCaPbeLXFw3/k/Z6sqcA7QRnMs07eU7DsxaBO2EUf4VfKf2SjmQu3k7ctGm5JOGl11K/W12QdPrwpoOONsvCM4CW31kLrlVr8S3Qk/cktJkPdfiVzC+BGyIspwzUM89p1NYBoR4+W0r0p9BmnA89DqNG8esFje+WWj4779W/nXPcXB4t2l9srL8GdBc1nThO0acH1fzaFkDt69EcHOL12msAy5wojoDLoEf/3b2Y9t9zJu1hoQDfogwE/e7WQQvGHtevohiiHq1rEMdQ+bTRci7tVhXa75055smwMYeuQlRMa7vu9WYS46mLdce3IxO1q660vAgJmBIwr3hSW6yPdqI7gtV5oPfxuX32vQNvN1E8gPYSrOOFwfaVFvI1+9yXrWuzhJSStV1mKvIJmyp0r+jnbe0YZ3W++Cal0ID8DzjggDcHhwL9gAO+SdDNY8+3XlwZvcGV0gEHRFiTV8Rvq+/+PnT3wR4ZrdLcvTfW55KAGZhn/JMmnJBxlZLFuwbMHTshISPj5Fw9qw16uQudzBK9unAHdANOICRKOBGX+49XmqKTPPxSfYfURcN9LrroH1oodkokAqYJoFwUUF18OsLYYZV2SFdHCppR+CTeAs5P2Y1Q9/FpcIHCkMKvwbYgb5gRdYL12QRwnbx58MkE/mjpyz7GRB53rgp1LdtOc/u70COykkbDJgYyQMRIE8CJwTODOQl5Z9iBBUsm41ro/RcCfgAhiSU2JXdKQKzTWTxNJKrDSWIX3azhVX9ZrAeJ53K+hDP+nQhmOq9uikWpQ2BwVyCvAqswTkXWRiSK30bkGIWUGibCSnZ5UHtCpdSvfKtkETpYq/pS1xU/GVbGdCLntj3Jr2OMfK6n/5VMVEa9KIKNFpRDL8g9prE5JEsfExra2xrGvguDm0a7EQDBEnHArsatRM3PRuSnw4LfsNFvLbMvSNoFC3fOozkszl/94IvZbK8oGxtfUQr2RgRwu5pzzb0ojTpqD8woe6MX3vuYy80nJcYl+GzWXBm1KUpVOOu/99KgtnuYnpeuwndAnGtGh0+2so604PgDx/Vsr46XdEtccsbGfk/A7WsNpBemSfOahbAPGK3rHRpvhFe8GMR9UAx/QVjLbrtpufbRW4AusqJE504kf4KDnRU6gOcfknwi7KFlU151NzBPKOjSPEZMeRfy8N6U2oVUvPe8V2RvEMhefj5fgMcB3wbwoDuPPr4YCCAiJCIRU8gBx8x1beIjg1teY2uz7PiP/zvggAO+NTgU6Acc8M1CbyOgYl4KMaPE4IAvB1ttvncTvZZP/DZQRL01+IynW6GvCkkuVaL7fBhdJfp5xjll/Pb6Pe7oDGbGP8RC/AezEE9gyvjMj3jMjMzAf+OE82lCEb1m3IJwkxl/5ke8n8oU/OlcNrAfT1egxPhtOoEAu/v8r+d2g6x3rf/pqtxX95fHW4e3CtMIrctcRyON8kI0hF7h3bCLjsLloZhs//Hjj5iR8Y/Pv2Bh1dKUEcLHJqttmsi2QrSrjx+RiHD/y2dH8gw8nEMGHqjK1lVu0McUC6kkobglf4ixty4JDUIlr7Hz7Dvecd7Dpyez6Qm+icp91r5fZ7RNomipBb4K4MV6lrlYw+FK8jtXXS4TF8sFIrGIRrVGVyWmt5QmbXcCst43Tk7JqUgSiMofrks436m7s+TyZ/BEMgu6jSmTqxjXrM0qvpTxC4AfFYfpBKYJjHINg95Lrkr0OgQUZxSvh9a6LSNiGVOcudALySY6i/92Q5Vb2s5w9XD9auHaTUmGum7Q0QdTZnDF2w4ssBUL4r48V9M4vlms5t13N877Q17r6MZAdNHfSSIRKy8bR4LRkuGcUAe5CjRmsTpnIIultuUbxuOglEbh0tQj9oFrNJtvVKCyNSdXmqh3VmbBVcaDuPPlZm4TSnRyG5u7zDLMzQmLSinddfivZ5Ijvr4qTHbpjeYbRF1hdXwM5yxG7TsLD+X7a008jsYPQtne0tOy4WWVbE0Q8NEqNH2sH6J5esi3IUPlvQhp0EnQieObYYvUetkqrewxhdlQAC2nde2z3Al3Cm9th3pnh4t/hrXnmkeHHeivYH5R8P5IHTq1tujcq6n0avN0oM1rifPAbftG0OVJnP89SlpeD39dH4zOa2t7G6+LEfrZhoEziNdJ79hig1dczyReZ0vu6vBFu7ynqpdq2qf36xFsJsxl4ZGnaqDhacx/kZa5hywj7leaKi+aeNTOPt8OziOvVC8CvXxH85RAb12wmINj8sUCZ7C26OVBWKb3WF3KbLHdnHEObNI9oz8Wc3hvcAHALUDvl/GbvTOhHlhyYasLJ/8l1GFxkGZU/x1hDT5+TPbG72YmLs7IeGULRuvYS2in7Tfy7jK4hIzbLPTzNAHnR4fDgA6adZ+P1xujl4zlHm/0+F/aNq8AzzIJHvDTxfe19OWPZEwtc9paq3DNqjmQPUj2Uiy+l5EeNO9El4tr+k02Ogy2dUBsE0aR3ILGHbxn42uRv0WcTKBS/jijddnuy6Y26avNsQcccMBLwqFAP+CAbxqCYqHxmec3fHrx6tqC95i4Xx5im+5ZMI/SXhLmpW5vHPYq0Xt7qdX91ScAH5cRG0EfdZ6BoRI9A39/uBWXz2Tx1BL9GoQ7lM3ARMDMjP+LM/4PTqarJQD/w4/4HSUwCA9uQX0NaqzTe3ce/gba4ywjX4XOiq/D29ypU60jVKjo8h4JyDbIlax8aYuei+4L82zSbMiIHnnGNSlvixsSxuWuKjvjzzae2s69PJ+xyWeqiudhPqPvXnrtwhr2T224T6r95AXJgNC1KFlJlOiepSSAkJDd5rIdPyoQVkV5knupdUM61Xo3gpliDZ7kfnOaUrmiOuXWIpdK1vMV1/QmbHQbVXK4TCVeuSqBkK2dCDxdAZSgCvSyPyZpsoIzQU6dEwEJ4FTe656XreTMGZln5EzgnIGcnRK8jBU299MSnpVe3bO52pWxyzWP9n5ctynX5YC36NdmIvetGWe0KhNolK7qYaNp94pmeAhhWVBygpRGmV6/GU2o4tjQHfAT9bJhdXN11NP/eS59MaMcbEjFhX8tV/6sjQQTz0+ZhY49EipsQWskpO1GACGDztp+qWWRFJvQt6vkrYdRjJULHTDbFBabSL0OcCU01FnFRFa1KD3o0XO1voC9vNVn4sdp5FuuMbTPGqtSjxM1QQ0dx/x6StZFEFf6CXyQ4iEVDumaJ6593ihmePCsQWEubhTHexq5MyYuloRuTLbPgWFVbJJCo0BegD+AIN4lMDdsb1GeaosphXDIwTLUqcJjtNYEO5tnPVqPN0rZ9g+WH5QEkyhumnXIXCP2lgqB13QxNCayMl56uCmb7uDbxOll4MOfS3oj0tnKN0yfTfzGEt3TKoV3VN7ZrEUl7mLeankn2eEvdITogX8C4JD/FDtI+pL10BQz9L8mT0W1aTudc0P5CyUGj2npRWCDZ9rYHnX8RrasXmp8H47zovidNx2Or8Ci0Zf4db+NCPUJYFn1GIWHO4De1zKZEPeluhPtz+exwBE+PPgd4H0xuHlmjMTKN+ey6Mmi895EtUa/vcr7MV6kDXVNpHzFtSH7cIfHdAIe3bzRdS/vn0eLwVG8GMczvE6UBr1IkxeO8TcDowVKgJXPFOj1kpbguA58i83YeG9zU0/eu78YwWDOWDy1oQRgtgOaqVwxRwSmZOIF0nWSHrDXuVX3mJgrr9D9zkKBDvTvKpRCDjjggDcNhwL9gAO+aegtwEuYLEtks70i+eg+e3jOquu1NtffKqxtmGI/Paftdi7cN9N/Ydizn7zke/M+SGzBstm0YSCLZAZaJboITlTp6SzRf3+6wTtM+IxHTET4/ekKBMIZjCsAn8G4BvB+SrgD8AMSrgBcn4oifQLhBsBnzLgG4U9i2X47l/zfT+U9i8hixoyf84z/vHoPgtyJbnegU4u3ClfDHeVV3u/pb1///+XTLwCAP378DTIYf//87/rRZDw9YY9sLIYWZBI+S9yE0t4z1+8E4Pa+HDi4onKaXizjrdxYJUXDyw1UHg907kwXd8kRz8YK0Ycvq7kF7BMu7jj3whKqRg8WryOw9XWOd5BGt9weP497NAqH0NKJUBWz+puAUyMNlrwZuJbGFcUh1LIcori0c19kfWpeaBnAg1piFtdpfFXi0KMI7czSTC4kT1wEo7NuWHP55jx6UyJT3P9MhN+mBKQTGEms0Ct5leEvOIv7tgQqVtiqxxBctfgMgHgGAficWZTn6rpd+mqWcFWCzDIemeVZvpHEg7SV31czwgEE3/+BflII95bTGk9loBY+IA4tLwpnejD6zLouiXE93qEORuYDBq8HDPQ+c28gpO2aCZSpSVb5O4RAXPlG+w4fcuUl900JAcrxwphwbUVeoEnkyu/xygBNP9Xqta3Z8gOCs2g299hapiS2uzJ7a4elMMsO1biV5pAeRtOKR5NjlLW20G+KQ3KJuePgwLevf+8hEsvivl4MEA8BjoP778ShObSCSqCaIaEd2JfPw922GkytY3iJNZ/rxNXsaOWZO8/av96EOggfvcVur939o/525JRtN/u8YywO720tngx+qJlFdWeOXwBdTjaL/AZjzjf1qHJ+IrR2Dv258CjxUsCBjwc60HFvxv6RH6Dyvp5nKpa4fm7wkXqH0vwaV9eLDd+HtUdzbbfnzTonNgc4HV5Ewps6OCN4KeEa3uDZMK4dnRKH544pazWzJw8W5btPy4AXD9vxmxnxBejXL5XXC+/xn2cARxrdma+/AmxhuZ87YQ6oXbR0jx+8mvLc4/GURG6ioDD2nwS9NVYvzmCtCwbE8rwJjVNSw4c1HpVDWLM/PbausFM2NIQ9zfGkJqOX6fO3CrFNegdA8TQeZ802Wiu8BQj70VVnIE/KP7wvPID567A666vmILqfY6nOuY2Xx6Yw9+uV5z7SaBLtNcT3PBAOOODbg0OBfsAB3wX4Sbi3+z/ggDcM3gp9a2+5tq9cvHtX7u6jxem8byrRIUqtZEr0ExHObnH+gU74lM+WZwahOEpjsTB3FqSSqjhlrwdfHlCU7j0gN9Y/pCl+xEJ57l0tq8DMW4vHU8oXumusIoWQzl4HAv5dxUh/5JCvh7NuUsJ3Di+xvDWBcA+PkZJitPd5Mut97k7SCXkWWXmkpU69fXuzt3MCMwaQuCNU8ZtMalBYxgsoaLAjWW28KDskkO1nF14ZdbPrXdVRVaDbhljcuCMlfEqEH1ICaEKxQgdILITVfXvRuZOVzSC5xrw5fy4kWqxWCVPR3ecZmFPjWpt5lvYTAaaeUJ9JDHnE+j/pXdpaHxnLqoOzDbwXNFHb3lJfzzPavqPQhu4j9zRMPWLfIvQ6dmrM2Hm9NFsQaEnZQMrlUIaWm0W4m0naNuRhynBUYYmNH4dj0gMgJXxdSBXA5Cm8QLuMKWq9LDQoUsVjUFY3mFwbe/al3csqQIoK3E6Ge3hZFAAuBq8f5C7jhiUpH4n8WnmVm9NG/DiGPXcJbDxtINjfncco7QXz5moBb2it30UlTrjZhXlxhJ9L4OiIsDxJhMWY2g2drLbhJdq450vd5U0UinG034Q9YUEz2iKSPGxlMfzeaxcXuXsw54WA3d+Tiuisf3Xd04CbCxrLZVTe4AtvFAS6t+A6tskpsZp29RUIDW4oVFz6Q41A7pqWuqTytNRJyfFl0K/MtS6v0KVfBCLuCw9aIfrL+TfGV2u0jWHaj+9pRY9kFOZp+9hd19O8BVjrw9G3yGBeGzj8xm+3i6i7aZMm2ajoxHdYu74ufAtj4o3Di/FdlyXWVmC6F3QHqm1btL4P64JfWx1wwAHfBRwK9AMO+G5AlwRloV8VdE4YfMABvzqISnQBLzSMAqvGosMJ/KMSnYp7p3Mum9B/yF3lfzi9wymd8O/8gDkzfn96Bwbw/pzxN2T8dLrBHTL+me+RGfidWJbPyGV7PBcT4+upKL7eTTdgAI98LuoOEVwlOjWGln+6eg+WfAiEvz/cOYUD8NPNB9wi49OdhmvKjgDflBwuXC3Bwx3df/kkludXCZhnmBmxcznc1SDoxii59u9tMrKkTxzyKnD98QMmSnjI5/L76XOnuCiUR10BRctzZZkmWxhJZmn5usZqT/L9MYTH7EfKq/OlfLwncI8Zd8IMHyec9fL7DHeHMIuFHAMnZ5ZtdMeFLoiK5QMp/agQ2m1Shd6KMCjZZlZ/6VzvRidk4LEIoMm5FWdzsT3VDTChuO01RTqBaAJTAqWEu5TwQRXopGUmszgnrY9XYiopLei1WJvfg4shuQjKyQsYzxAhFqnJOjgLfWdpS8rlrnh15a5tru7dG1p2yCiuiqgqzwkgVcw3wv+2AgxUb5yN+2MVLsP6qR5W6IztBdS1Selr92z8NQonOuNr8e54l1eaq3KOJXwGKPsjSqEcs8TWIHL5o9KA0i2h0l2DnJbv+Ctr87X3kLOVQ9VF+0hJAwy9j/YcChTK07pS29R2lYB8993WYzGdbq1pBn3ulRHKS80TSiiwmYtROyf609ZDPCR5UWzziD6FeFjE7yC+Eh7pc00oJmUsTwC1eYViTRBOnbQvDrF996ajEN/P6e41Kk036m48wa1ZmqthDOJAOHcUOCuTsR7Ga/CvdaqlWaf0kO2E7QXP+1yY5+duei0g9NQceJTra65yuQdd87mucykA8QDjisu8bJrIxvcsNZr2c/ND/O75bLepnkrnPp0eNkOLfzxQZ0mp7VfvpelWFn4fEuqVHXU+0LlAD1NlYkeSPl/XoJ5XUSw31MeSa5+7SvmpW9bw3DnwShLOQLnuww5AuvnXlOgb7f/ifOi1+doF8Oo8tgeFBnhkcvml+b4P6i7lPgN47wIZzGcU/iNjhQnlYFDgzWZm78M8kw0036v6q3fRWgFzeH/K3eeXwFpDaLibE+N8NawKg3mCeeYC3O9WA+u8PAgfvm+F/wrA7SH63/dMtN84fO06+jWUn3r91sODzvWyH2u9bUlYzBpwfM2PYRmrHGP/SsfDAQd8J3Ao0A844LsDRjVR02n6V7BIO+DbhngX+l4hXi/uIq1XorfCUguLSnOzQgEaxbl/nrnsp2WDcGWW6MA7EG7oCv+iBxSHxYS/yYaVANwgYXZWIHVZHhfWFd8rKlP2Ax5NeOe3puT+rSFV6JpAeAfCJwsHGpfvsWz97oUca+v+SQS659xFo/OyBP+5t0vpJH/Ic9Hd57nVoXXzUGE+r6Oyub8JyhxfVnxuwjbqP4QdA6KnJxrGCf2KTnjEgLla4GZJSM4cWtsULOPE3+Ubxpe5R5M4zVgEuFtfFWQT9C7GeKMzJa53kycUpbMe/HB/RAmYitt2Sgn3lPBOLIyLe/EEopo7CGBRmJZhwU3zlb9SZz0AQHp/PKaqMAdAyMB5qu1s7toltylbW7AqOybZiJtbdzd+7QAKBWGFbP4T1e4g1D70fRuauaHV6ImD3bdNcg5l9QQJ3InXy6IrwHORzKBPcM3kDsFQiyv5Yql+b9z1OWEwyR0AHgkGGsUIIPzUx6FwEIdrleHKSzp+9L4BXz3fxxtgPDuE1cms+cSRd22xpibeHuGpQKJK34sDav5R6uoVogsctS/b+pS7CTunDC5SSIyY6CCP0XUe3XLd+55p4KlTxZNga+LdAQ05cHheo183R2j86BlnM20su9N4w+6INNjLT8JTLyNdC7g7U55i2Ldjil+CJLgmFPdGgzaLeT+prCem+RLAgQ6MN8fFo37r8BdlzAv6q2sMU5zLLxGBKQvrCnNBtEq3QzFarh4edOX3+k/5t+OZ0RJOlbG2hJJ5oDYLC1+lelgrjq+t4fbFeNEXgu7hKrj55rWIPc6B3wLIBp0z6jUkZwAJVXneWXf0+ExcNgBjWvxqNBcV5y/ZWaOJfWMNhYye9bm9jJYoQFGeE1C9Sh2W568OW+7+v7Zi+XuG3ty/sjRq4vn9rxjJkMgcFlePWQ7yF5fR7L4NSjzggAO+PTgU6Acc8M0DhzedwTXczMm+LFoHvAH4xhZqUYk+gtGmfLeA0AuxXLwmTYzjBOX+TkPx5q6KvQnAv+Z7S32dTvj7+R5g4I9X70Ag/OV8B4LckU6Ef0j8/5iuARDeT2VqnpCgtwUTIPbpwHXHuXv5Xn7/8VgcxlMqrqdv0glnzviEGec8OyUL12dvpRIF/f4lY7nxU+HH/WObJkf6CwJG00AGgdWoH0cWG7f3xaibAMYZ7z5+xHsk/O+nfwMgpPc3SEw4f75rh8QZ/SGyCFvZCHv84oH+K/mgFvtn+agWYo+aWOKdJK3d0R7uee2h1W1iqn/kP8T+1Ti9TGghkynKZQ2UOnirUL3Le2KY8lFla4mBfAanVA5aUCr3k4OKopNCWyxQKuHMAIm1HZ1EACoWdkRkzgpAcIrz8ssJ4OSUypTAiXBOjJSE/RCBEiGLtpnb4u2BIAbPghOjjM8MFEU7J2Aq448ZYPGewMygNIFOZJaAnLm4WyV21mIyb+t96MwlvulwxS15sk4PfSq4aruaXjHVJUFIWWW6hZDZ6YNqp3QEEyYo2LPGkPQcw1y2XvCk7U0DV7WxFoziCr+DC7uo7NNpeQzj423WCSyClIUb5WZ8lV/2YwIMdcO/9AhMqIciNH9NV8oiicfanxX5AR6uvgvX1o6fMFrhDrd9Yge0NpUssS9XBEWmwHHCW68M90qdRDqoOtBTQFS6bLkcj+erXl2G7zUPDoq1+MjZtesC3Pgx184d3PwAfeoybjEke/y/E1kGCtlLHwGOVzxw/O2V08GHAdzM5eH+FNK68qOStMmKQ/krjRbx9HF7aaOCtdt+PiiOiS0EqH1ezMddpB2cALkkaHX8xfp6+ohTSA8iucT8Zx27Gl/qNUvitcMHPXxH0FzRIg/dpK4fKIw7438BhaaPKTSpWJ+D2v84lXk7VskO4KHM7Tq/GM+Vr3p9tCeHgZcYat7rCNV/Wp1wKmsG9eKQGeaVR6/lyXbqbJvXRBwvZk6duE/lbTZ3PzX9Dhgp2PXbk4FC0+2YY2P6J8EWX9ooW9cIi8NRQL0PI8yZVs8aviyC299hxJeGVy/ggnLX1gz6/baNqi/sfwHP1G23QgCyzLGgmMk2vOY4e8vwXCX3s9J/w43eq/clbRHXkCMesY7EfhK3+cztnUVGoAfnSn5l7JRRVK5rK0Vk4Y/+Whad53sVO+CAA75lOBToBxzwXUBvUo7CsgMO+AYg3oc+WnP3vsWw5n1wH7o9OoEZddIv4rAtppFhnt3UalVlL2ee8Vua8C+OJ9p14V2PvJTnWoHMMxJNDo1WSRBFqma1SzDhXCJCIsIJCQRgIqfY9PVVJbpLuyoo9mCK7yAQjvK1pygD9uy5qH2Yc8Yt1fecM7IXuLFLtEvgPSiTuy9j8LKLFvH6/aVgtd02OsYEuC1CBX2q+9JmfOmLF06T20RSFVxD8ldrWxWsW79QCTeBcy3BUGzconlhc8jG97Pcc11QITOeyVJ/TgmfkijRy/a4bpQ9Fo5t6K8pz8G4lZQZQJZ2ZAbk5nOklJCYgAmmPG+UblOuzxC36yyK9Mxyp3eq/eTraQIAxS21Q1rqXdoQDZh+1hTAjsdZnz2XSFXQADQKXfh6aPnlWZW541FG4euY+Gt6QpPOK9FB1eJbPQgQ0Fg3e2W256U++6baHR6jcZLi7vgmylgjwWu11a3dwhhuoiRw/G7usbV//fd2TBn0BFhdHjrAmFAOznBeF4ZpnRJ35PKE9sBXnB9DvpskOxAm70rXAdqOsoi/Fu8p8+bF4Of8+Dxo1zV4soLJjeHVPHwjy1zB7gSbuvP2Hnfn+nlZ3s61zhqwKJE6c2cLeuqyE2bzZg9Xlw8a9wAAIABJREFUhd66YZL5YR4XHabKiyGmj+24yD/SElq+4tcJeAJui7LCa0O+jK4A/5aBD5cVvIhtB6uk0Mg7bSqh9kBSj6+SH28IOPOgjfyYgZWxcAJk5ehaTHhoxIm7Lw7nHq/40uAa9psD7g6Ntej9gKfU/4l8mRnmyp2Belx7RhUlD7y/rCnOvooL/S0YWZ8P7tC5CHr1dWv/IdyOl1mDNrQ1EZEozxUO6/MvAxR+D9gPjKHyfA/LuIit+L0gIJYnACU7MGfjaFEAO1zLn1ycUuZhjnEPOOCA7wEOBfoBB3zz4ASv3fADDviG4UXJeHAfeizMyhQB01BepEJ8xo+4ws9z2aT+8aqcAPhXvgcAnNIE8Iy/Ppa7x/8kd6Kz/Pfb6RoE4B/zAwjA7+VO9DNlzJgxS77vxEJdLdEnQeaBi+X3NV2BAPzn6R0A4M+Pd3icMx7nsmH+r6v3YGJ8NmsloFHaeKt0uPcIQ/lwUGKpQj6HKNZ88qJC7q19fRQ4NQbaNePH2zs8Arj68B4JhPvPt20GJ+ljdY+tyrJokU6ohhURVDgJdpb2ko86CDhLQrVE17vP1SL9CjALaqBacFkZ0QQ4fo/C2IXWbAVo0W5j4bcGqSKPqxKrsRynildO1YpU21EFzbPE0e9Tydv876tlNcuzpptK/jyLpdVDyZMSRDnoVISMYomclAYFt1SrzgAoZSARck4AZTBPuCXgHcot7OysoYshnR5yYZw5lxFMjDvfN8zIVLbSIC7XOtidvtIOqisRXaK1EQNQizZiIOWCO0/lmXKbiLAU2HvBTexmKbsrjIMI36kQPYkrbW4O1Djh+6WaPZMjDARLHQ8Tes9rrU/gx1qnZcpOEWq+3xvkSs+eBsnFVyHKAsFl0SboURz0ntAWtYWyTItiqfdo/Gq2hqsTNoWO5VhVL4xqLHrbuY51HtDDCya78uX5vuFlv/iCvYWw0agWpjNaQNbTbNNmPWAbW3bcZYtGY16D9jbcutmIoMx3nk/ZKAxXFjMeTevLyN8xrMoQePgyiEtNcfWD9rWvo2vnptqjcmLddf0UcOPee/el5utdcm/VczVay8cNzKp6AxVO1lwGubeAyGgREQIw6+iNchpw8+js+2JlrACdobG6YHBJB/lOEq66Gj0YpHP53EurzMzxsK1+8WzZwrjtL8MzdJj3ckEkh3UDPX+UZ3Lp7FfGR+T7xivbeUeHVDmQN+CRljaUQ9yOxs6UwP67hjCV9UFzbQyETBxiWi7HNooVc2/s42wc7Hp16Hh12QvNOulLg/T1cHjurdQTJ4O4DlnLU/vbfrkS9a7y3PrJSLzH2wdjf8DunwZb7fXaiuXuhOH+RvAZ7VVqnk/EMA0n96du94FDef414GvxmbcBS+9hKwvtXU21wjub/FfWE8r/dc723sUSlUO+zbVdFJxD+Uvm5ISv7KfKD7swj8TXnTEPOOCAl4FDgX7AAd8F+I1KDD9cuB/wjcGrunL/BJGQtR/t0QmLTRkRBPhEi3x/Pj/WO5blo97QnCjhd9MV/vf8uFhQ693NEd0a1grkfDzLibkx7jX7JkKz8TZhm0nTuI1DWL43Ch63cRnqJZxwaGSJtaLTeBr0edvjfMYpqUtY1PoMWaEK4h1+L4FnT2YcFSabVmsrsKjXBbzevCpQ278FMRid+Lhe+WUJvHWG0gBX9+xMdTPqBdPJucZuaIuW4fZLdW+qwzcFiXRGrU8O4UkCM8CT3FmeGOVoCmGiYq1rd6lTkmyyoVfQyeJUsUWQUc9UZMXX8RHmophnlW1p06lufHI4s7pyl/RzAtKMen+qq5sJ4uO7axtn4eY9jVfMHa6qcPCCCHL5xEMBm4IN1xaLDCNQ51svbJB24W4dMEvV2B7WTvGvU/wIevOOJ+i8UteGD9RxRGsFkv1Ti49zxIgH+wMdVm6dFyaS2YtIRnWhh0Ku5UBI5hwUg66c0fzrUSEfQACP8gr8Os7RC37l41KgtxG8BpP34X6grZXlmdog3ovPnS5jNaBeFKa/vjMdErvauAPsHvSw2ZSBs44BFVFomaOTbA7Xl2qbZ1tGBhpe5Ndrz4RmrfmUMq8JeJC8GcDNU/N6QtmLKyM87TcD30XhnYadazSm46ZTxuLQis5pMXuyzxb/M1xYmbN7XcNxyqDlGLG1t6+OQop189cnaJaxHf34C2sf/SXZXShNCV+3Y4ZdWqu4kOXjymnmHV7tlTcNa0uPPdAd018SnluBQRYLNsXh9zPA77bzbuY6P88P2qzHHl8FNubfYZyXsD4flTk4TAUAuLP3woYcjov1T3iXg7DV68WhPP/y8Mwx+r3CKzbLFktr52m3VzQFul4v5xToxr783MjgZhCGZ2eVvg48eD7ggAPeKhwK9AMO+G5gbfF/wK8PXoIO3sji/wVkBeP83Is99rQhnXcGqnKQbX/618eiVnt3OiFRws/5AQBwNSU8zhmfcAYBuJZNedkeE34/3YAA/H2+x0cQrqdrAMBJfus2uyg2ztLHN6l8v5vvwUz4cLoBA/gvsXT/s+Dz58dbgIH/vC6nEx55xv8+3Feh2EDGWYFc+wA/ffihEfT99fMvbXoTRgbeZIbVEjF6zGuAu49NPqp4ingTYSIyA2+8u8aJJpzv78r7JLipMEytpGdgoUjvgVfM+rLtDvNQP7NMR7uvSqNN1maHlE+T9J1a8uudoz1lx1o+Wo+eNYNtBtWlOMOfzjZNsFfggrA0+aaCp53yJlGyo96RrOlP8nv2wm3UM2GiJC9WsZHOHK1pnpxreTlLPlKPKYOvEq4YmPOMTzSj2poX/KY0ASC8B+M2z/BKZCuRS3wmYI6CbWmb4jaeK26Kvv5NqO2hrt29ECx7DbsK1lUI4NrZim5cNQi+rr2s2ajyM/8tko+3QLdvKzS2EJpGXpo6z734YZxRjBPaoolPnTSaJ4X2CunF9f8ir0HxXdwX+ECq6wU4ztpB3ez3DgIQULxBOGGOE+54ttG4bW8UjNxGpOLRJBEhoSjP9QAYktIEAGackPHogtquD4HaLs21AFYJl8z1T3MyBp12dWk9a4i0ymJvqeNuYaHqs+zgAsXFleWz4EWBAeHFhBTmlc4cQxJgY3Iwrnj4EnBf+e7HhB2OKh4n+jNO/d7kuzq+rYCAG9o22AVhHoj56QTIzm/7eSP/Hg333A5r+zT8x9OJS9vLPNDOKrix1vLYmK+HqZbt498DuB6V08uKluF+neXL9+7xtY4a3ps3UiesV5UYFtME1rVIt1DkD/KLcT5JwPDwrtC+8ChazBkRETfereAOzbiDicvpKtYlElLMk4VMZd5ggNycHruWFXdN22DR7yzzQ6TeSbAF/Qbni8f/EpcK71CUjc+EFXfjvr95yzX5GizoeasN9gyaFy67mSs9n+/FnxGYQUvbuh6Nyvgt3J4Ngwy7zeeu/2jgtdy2a5m6q49jGqj0LO3ei9IthlDmA39nyaE8/1pAvfXnKowmqG8LFl5aYn263rvcQ48HrZe4kl8nbrPvQvsuf1x3Qc16ui4xRImud5+zPHf3Bj3YWqMfcMABbxEOBfoBB3z3MNr0HPB9w3P7/Csv3qMVelfYNwjvSYmaOFv3octDz/Lc4jjhJrmwDBOmTZTwmGckWaBfAaCpeoR4AOPahFK1cLWPj7jFbba+xyW4r+4iJRXlXQLhiib8dP0ef3u4gwlAzZJ0IWZblKznbwG9adl994qCLWsNa79OURdJnl0SAJjPuG/eZ5wn12cZorRlEzYuMhnJEp8CL8WGyf5Z5tvV3Qw2so3bWwzw8xnKs9L4Ij4Xhe9EbXz/zEJbat7tFO5EJG7D5f5x3zdGBlz7ryv8d+6yCWJVKRvblGq6DHGJTnKAodzF/kBziaDuu6nikCS/W5NHFSvucr11UeQXbxDOtai3cNY2S9m5befWvbygYm0FbSup9wQ5He95keLa6bpGSOH5gKbP5nKusD0StrY1ZsP3PbS9UC5FYo2MgERQ4cdiW8nqHlDjUFvnWP+upwcXThDhiRewwP0ucWiqNAJCvSrC04Ye2lFrB6VZ689A6ISWNyt5NjiQDBP94OpLboy4AyATkSjQExJ5oVFbsSTll4NJOoYdr180hgSalwUdyxu0hVEc7StnKu3j+T5Q3J9hKbhYOvT6uJv9SMItOSoZRleP3tJ0De0eGW8j1c9HH0JftwV1Ks4DoXzX2nprntkBazLIQG5rQ3GzCNqi0U7usT9MaanffJ7r2PWmteH6d4jAALbyieNnZ0MOlw69peMwwQ6cVgsM5a7hfguEhXabwWcEXLntw8gUFgcu3HxkfNgGPep46+DezUdQaTxU6Dpjg1d4sLULHC0+Z2Ea5qdhoaPwp47UnhW0hr2AIv1Nw3Pa7dKiOPyi5W0WuDOfNwe9Oey5Y8LDKJ/svsU4t3gaowTqAtLlzasn1A/4QnC5Iv3bBfJ7CAGuHzdSh/nsefd0YDmGqP7ZXq/8EhGYEjDJKXa/JmafV/AI4RXnLFcmNPF7wE8e5QcccMDXhUOBfsABBxxwwNsEdaG45c69J0+IYYs4K/ehR4Hs1rMXiBHEujXh0+ODfJ6BRPjj6T2YgMf5Ef/iGR+mhDsifJCpWO9A/4PcgV5EZBXBDLb7zwHGJGrrGUFpKI//zPe413u+mfDT1TUIVO5il0gE4KerG/w1PwCzs2olxsebIpD6dKfxWwXY32+lg8Qi+U8ffgMC8OfP/162aU8mETdG3ImzBho3KQ6hM88ZOD/i5v0HJFXGUcLt1QykCXh8aDdITi8pDYu60QpldhEZwEmizL1M1qSoRlAhXBrTLNqp4ktAuXNZBSkxT190EPI2cTsDyk5VU/snd5OX+lHbD0QFfbVKg1THK45OarmeilXTLHR/5rKpncSRtCqckvd77tpjQglXxY7eB6s4mJcBCYvjeQbAGTQVgTinJAprADnhkWdT3vHsfR237VevrndCcnbPKuAiKThxtUZPgje59p5QfcKrMl0t000B63FBt7u7sBBmsOtiVy8Of4t80HqWGCk//bO1PWNp6ePay8svQl6NJb0eJGD3vGibQOtWT/l1wpTmuyf5bn2Wrz6YfX0XCn4tU97l8Ial8cNeW6KpF9t3my9I+b6js6ZfJQ6K5bkp0F12AOGGATiL5DswpgRw5mLcq7yGa34IeUQc2++Co73XD5SSGXbU8eLzjTwrZqxfirU+Eb2O8HLRFV4w3iMKFa5RO25G+Y5Q1v5dw2urujbFdOZPjdKES6YMACfpO2/pNkBk8Sm0zezftUHUd8wriypeiiSa/iI0bssbS0wfGR0S6SC0l583CZ5QMd8N+ps873Bxo16m100jNHS94uESY89ee8RDKHFd7uGDw2vU/va95qeWx8tpIMy7Gqa8t0nQM8Uf5CPxzJNIw8NknvX8U1HPDPLfcgZnhjJUkrUU6+FCV/cWs/Z7dCCi2K3DS/Pcd1gfEO9DmXfh223FK6I2pImQ5XPq5BtwHGEj/SvB0PLcwy1AH/bhsW+KfmEYzbu+8Pgb4+iaVPNaI4w1PEbhfiF9G753ytB1xbDtHOORfUOJelief10gW1fxkIZCp8Z12MVz/3cCC/nQBYxjNaru89y+zzyBoR6eBwBKdkitYdu2zmdUuQhQ1vbsvo+RcauKTpxfa6cfcMC3AYcC/YADvhn4YruPAw54m7C1L+7tS6Jwu4njlehhc8PAwsocImS2ochVIGpx5TdnW5jfnK5wfz5bsuvpCjjfY2bGFNwg9pbRWnwSRUC7EWNTEPxbUHovXxMRrhLwKEr0BecgAEw4pUmUdu3HzGz6nQabrkDU3a0o+bYC/vg+gKewuTW6AHCfz7imCTNzWfSc57L60cviVcag792ype5d/C4VeHF4XiPc+L1TUS+0Hcp6PF2HX6VZE/a6uIssghS9WxWJU3yVL2WFPbwsX6pRKcmpfXUpLfeQe+Wo5c1lDGYWi26h0xlOaS4/gpb2N6lHdOaq6E8EYnHZOgGUxKF7KiOuIuk3v9z8GMvgKogzAXRSJLjiTijjMKHUIUlrZIBVGUMZ4KkcIoA6mUfbbos2xnjcqdt2bUfFScNdfRYKlCafQfgCJy+ciBlQ52+UkacbICrMyRhXClmpMAvyzeFCDHOj3ijVRyi1+JGVu8S2nI/ojV1HxybUIXte3K8bi7WhGuYp41fuN4xBAsRlu/6WO+JvkEBSMHGZd5Q83oNLXRJjQsY8e76YKp0Zju1cVftLwvMG4UgXVp4SDxONZsw2VnP37yL+WlhkXhvgkzZCNIev5x3M20Wsfd+YL7sOFyIYiorb2rhz8UcW6E3hcO0QkfVhni/ENYa4CL6kK3rtstFWrwsUHkdtHNL0DifQVL8v4ArAQxt0z8BNZ85+Ci9/zba7cKgNoUdeCGFra8bP4d0UiTRgFyReYVzhzfTk03kijGvu+p1ifC6TM+vHuO5qeIrE5/rMzGVPAoByiNNkFF+5eS/NVtLxok5fAnqW5z3C8e3s07T1WaJevlP3MNFyXnk6jAnwS7CnzaE/Up4rPbOslYxG1gZUzPy1Yat3wnp9+P21QE8FRsU50FlADF9LbF2b1f7gZkP7VSa77wp6a/qdKd3fCnznXRTb79nVfVYGYW2v7tqTXFlFVPZpup/R0dVMk/qi40v+2P1t8Biyf7/zzj/ggO8UDgX6AQcccMABbxu8O/cd+/RVWBOqrSVYKCf0s1NORCW6KL/u8QhKCX95uAWI8Kerd/jpdI2EBAbjF34EEeEnsTzvoaVq8wTCLIvuh/kevwD4/XTdxPzzuXVh+MfTDQiETzgj6z3QzPjTVbkj/V/8ACLC76/e1ToA+Mf5DkSEjzfvwGB8vr8vQsQUFv169/vD57pfTFTdo58lgnfju3CDiWcIu6kv3NS0dw944ILTfDrh5t0HTET4/PCpVbCqe3fpt6JZgrOUkgK0/lqPLbD0PSGfl7SOhJmDMvRucIptOaGefHAbPFUmquC2KyR0ODWukanGt76RfM4unVeaJzd2PA6gijOxWNAz+CQS2pOUJy72iUVMlFHGjGqFplytsQjVYwA7/FL9TFK6frchmwuurB4CMoNTFnpggBOYcjF6Z3fCoitc1LKd7sOUZnEjHvGVPLIiBnP7bcaMrCc+qrleV47tm12/dcmIKx7khOJMla8lUYxmEZ5HKzhzC+4LAxpL2zUmuzHW2VyOT2jyCMry6lCBQKocb4ZYob2GrzaWCFzrI5bopgNUWh1UoIrKKHxxqJLdHlu/2FUBcOVKWcFSvCaTcWzzDLlCWOrPDSZ2a4KM2SS4JjkkRah563jT8aL1qmJywg0RrkD4mbiWFH3J+7G54Deu3rtlSK5NtFLIGLs7174OE4vnX/5b43Y54In6w5HMLYsOPxh9i4zA4lKIw020Jax/50F4P0FlGuTCKvk5OoRr86YQocnk2zCUZ8X6wflUCExX8GqbPbZ9fB70m++jWeL54owFD+jL6KZX7x4QlvQWGTna7+E6BzCA66l4b8nRxJvbuEMcOhBpHlhajGscnQq8nr9Hg+Ha5P10uvF5J0nZ8P0kmegew7tv35MhuXEaXK4bX+/WYRDuLegjHp6n+nUO3LPQbpmSsxwqFBzV4pxlLoDDHQEdy7f93reYW4OVuE9STkX+HMN8mb389Yjx/XINp6mfy5Y2Ia4U3jiM9jnGg9TNVDexi/wlYWNhuQreHdlLgR9vI+U5YTEmLfmIhwAVX6c8H11tc8DbgOGh5jCXHPBMCPOF32d1Pjd7E6AcoiegzvFYDk9bEy8Wlws8/N7s8rn0gAMOeAtwKNAPOOCAAw54+7BHid4L3wz7VF74g1skU4gnD/quSvOYIQNdJTo76zdZYBMIGbn8MmPyC/aQMywFi1wyYUbGJxdvbauledwAuKN216BinInIKedZUC2WKzk5S7OqaUF34Z+lbczNdG2G0j5eSbGlHAgVe4l9xuOM8zSDyAl7FvIdqkqZrszCC7mpxn8pHNfA31seO70rS7xIQ7XMr6vs8LSu9B4E+V6hoopYRnW/rq7IUaPV8VXLKkbBos5jHQUoCm72CSVJ5hoMAjKXA+Yoh0/KHcwk3hxccobRK5sL8jJ2kVksxsnJ1XjQ3qE++qL4MNo7rnW8+HSiIy97fHZCeM03xIcoTV085Tem6B5Zz8X7UK1Oks48NGjLO6JQXtAT6j8ZRsxdwY87/Sl9ShJAEM8F2h5WJ7E2cGVpGnMFb+nEKsG77/VDwDcBqsLZs8eGnRDcrQOBf3ieLIr7hfLfZ2h1htUxgTAxgyiJgKZaRJauLQdAVL9C+o+MTUoJ4IQbq1E5/+LrVdl3CU1Twn+I5eUdMhgMzhlnZsyRrjXThYDJ9U8duGifFpm07bCYOOP85GnfjUUfbyRQ8wEj+vauun0dFoozruPMh1k+vi6dgrbGV/OdB+FrwG3zsvV6k2W9hzk2WM/irVewH4OTi6d5ZltCrPOC+PlFGNA2C9qCSPfx4NlauXHQG99XNykuo0X7rNT/nssC0JdF4Vf5j+U9whGdurzQwue5bf8EqK0WxnHEg2CecNpgqt5F/JBourGTmZXZ8eTgeXwT6BRjC54GeAW68hsWqzgSLzssynSO+Vg6+AD3quWE8E0YxH22gmjHOmEVz5U707eUWM+9CuQL0/hLQlly3AH4YNPZa9yM8jKwQs8AljxzyOCeUa4vO+NJyvNOWGUxwfvFyPL8yePtzXbu9w0LOdO3BU+33H8toOWjerizvZfbg0F2iL1l1WLPwiHOePdC3QxfbPV6wAEHfAE4FOgHHPDNwFOnVkYxn9hzF1KU2F5S9luc+t8iThE4/CqM+uKSfJ9a/+cu5V7j9PYz4GKhXBAaUycTv7mpGon2uVHAAX+4LpYPGYxbUTgkEJIov35BcfP+AadGjZBRrc8B4GF+xH0i/F4s1v823zsBRttvBBIRNWPChCsAP55OYFCxVGfGlAhzZvyVi+/KpPUS1++358cm29Npwpm5uEIHqtvzuUS6vrkGg/God4yrIL6R/3INj4qHveBlHRze4/Cxohjz/R1mYlx9eIcpJdz98rniwhA33qXfWK2BCfUO8znmq2omXybXH28c0Ai9RaDSVDsi7aRTUtZCXrKwmOxdLsou3JlloyjOLMDa0QtOBQfK5fkk3zJVS0PzbAAgT0tBsva5KqEVJc6iqUvVcl2sh2lGcV2uVq7JVZvnMiq89WnxN10sx7Pgh1I9nQFN5z9xSzeOHFnrMVNJPBGQU21/wamUR7VZp1TzhHwDV7rpbca9O1bfr9oVxk+0igTiE0ivV3Bd1T3NbkVXeiR2matpMhjgLO0jFubKuxjNwQTiHNJxHefsCuapZZs6BnpCyoVVgLoHpfo9nYo1vGfDGtcdzCmKbk/jJJ/IpaMmTWOGbfSaRPclYZ1pzc/eXo9axxCJ8jyh78LdPaRaf9J/mZtmsMwFr5Moz4sb9tI2ZIQDoWcRBnEWFkwAZTT3xwvt3BPwzrc5l7Zyw6QV2lK5RuADT2WmSrmUwzN+tvbIbZd7GiFXHxbmu1AyA+361fFEUxRpHTSGKP7lSgZVIhm/9R4TrL8dTVg+lb9wKMOgum1oaZZzZykVeEDzzbUwA423i0WZA1wsmLBwsb53elVeKLhURba2O7WRY1/ZwQHBgV3chpA640E+FuWeF1H07gKxAuvjJB0+u75d4Le3IQbo9dBucInldfIYplVfQ5rIu3A3Fz7ue4ffj/K/l9/3cLw44uYDV9qp+8nx/4gHLx6WGTqetRuMNrkdb562Psn7R7jppBzis4MaShON+3bpSydUZwJYvCuVIHbKc/k1ryKVT7PxN19XFtbXjnMCyv3ljkmQKcILf7W8MoPmkh975Xnm4rKd9S50FMW5/mncxIE+eaX9qX3mXvgFsDmWthJ3YHFoqz0wFz7Kr78zvaNMf3Gg9WZ+eqPshs0h5mm62esqDWou6o1oT2dG3vgUPhzdXvTA5ftRnu20OYViI/0D7aEuH/nSfonjfZawuc3LvD3lkM6VqXsw96le5qYemvzkGuo19IKxEyi2RcXiWfm+OsiaD8B6/9HgeQ+9jYrWfJ53D3319nVRKjyrXxbe1eLGp5M3UbPHmlnWKc3eZfnYAztLKuVsLh98tmUCdTxWN26yT0xyb9ukz0nmdO2yqa69hd/V8auShFm+nWWenV08X8EW4XZJNP72tsfUAQcccCjQDzjgVwFn99xKguN5+upcxi8AequdSxaFr78hfD34mrg/teznLr5eIv0rtNtTrdB74XGdi8+oVughgU97ybOFsRiOqHtdwgdMOPMj7gly17hamFeHs/6uc3+D62cUKxKa1nuKbIx3qus22QmMGfUu9StKOOtm3gQlFc5eyBqFlQAmKrfmPuK8IqwOfIbgNpzLMlez8DhS5F8I4VWw8MhngE+1jzSZUx40kq6eDIKbREvkYl6hnrTgo4ONaoeml3omV8YSyeXvyJNCt5JU29lbLVe/2Q5PHz9kDdT0CdW1qCqkxeSZXD+qvtbyS6ibVss7lJe8ArVEqrqc0qcU8DFlqbiOB0iUze4SdW06b4lufEI/wsldSORxyTV/bqdPpSHfRiZAQB1DImNLmZDYCXaqf3cslOj2qY6P4qJbCylpqjdXEuE91bDG/asIT70C0/7aorVetsZgVHfsvpJWZ2oFtz5MBR8puAklH8fn6emxxCkHIwhNueTy0AT27vJJIU0ERr1awAl+rBmQinKvaSfXWASjeaE8o2sGi3MEX0fgiggTJbmjXHkVVcag3k6y5kggYpQjWcUcXZXoZW5iXCt66snACaJ0BiLA3ZHuLN1ByJjAxMgg/Kjjgwk/u3mw9utUxrGOXW033752R7oKtLQ4bv8AGwdERSVF0h/qur4qJv3dhbU949UkRLBDOLUnqY6HGNlM/JWnUYuvZerQWECq8hgTAAAgAElEQVScqSOxufmAmweHS8Tbhe+YVqvwMdS9ccHgMqWAsyqtFvhll48GuzlJs15TJGxZNen4WFWSjyamXl5oxnKT1uYxT7Mb+GmUHnprdduqdyO8nVDvJhnFRzvd6/h8qtVY79DLStMuI15aXiw7hrs1iM5X7MeUCPt9E32O9ObnCv1NMg8RmLgI3omKQh7KN0m22NTShc0Lfm1dHuo+3I06hii/5S+L8F55GTNSZlDWO87LHzu37XVpIHnMfq6WxlnVEfU68Ik00oOLut7fZb7FB3r8s8NLm3iM6t59Q5H+HOtK44sv2I4vBd1Dfi6Msyy7hXaa9Zw/2LPIRDOAcy+yAb04u5nKBh49WMP/UohzRpa2khM6yic4ufZw6wqbI7lmsdgfexpyrttHyu5nWQRzp2kG5bwpCDhueVhRHu/eaXg1wVbJYT25N+ELWG5/kV4ZeOko3hXdus6PfRefAon79MWLFts2RlbybgeyBAovjcwAhKJAn2QOn8o8PnmlOreJdU5lRmF6oiQXJTrxDPAM5rnsY5q7a8Z9uKSKZsMzTHfAAQe8HTgU6Acc8KuEKKRbg7D4acLf+uL5gF8lXLzHVjr+BPBHl9ZlxEBrZS6B3jVyo5B00kmJ84+HWyAl/Md0hat0wj0INwzcU8IHnPCJHyV5SZtErHYW/O7kIIxanp9RXL9/mMoG79O5Wh4TCH84XQMAHmU7c4UEBnCWk/A/gvCzCDRSAiYQHhm4F8sVO7Wua/rJbSqAuvYPa/7bO7lbcJII16UmfD6X/BTNyFqa94Hi4BLYSvJwxuOU8dMPvwGB8Ndffi7hzR2eJELHAc49OMl3Mx6jWqcoo/VCbKDSGFB3jleyoX+UONkJMwwfp2CId3YtkI8n8lWgK/66OSqfXf4esgpfNX/ZhCqNTFTTeuWo0ZCUJXeQ29XelErVdR/6GE6yZ9c2gJQjdJVcGVq2ukxvBMVBvNEoElydVdBsfUStK27tV3LxNa7nDRambekEYy1a7XN2ibXKTv7oybEevukRp8vD8HBuXOGE6uzzUEGfF+QNcB6QmzWJtZXkaQcDpJ18uFhTN+GN1senQ20Yr/i2vvTh6KQni7ZQnEfL9BHYfODLc5Bcfl2hUpsXoxyqYrVATy2uJ1WeUwIxcFMvJXCZZaEJxoOEk+KgUxmXsgpLKe3LoqxWVU42Hyjqzp0st7aWRXH9MM9ORl7680cZHz837VTrsy5Ql373bbqYZ0Mjuqm66PbIxvH7mysUbwuMH+iqtitVLy9AsaAplp+OWwie2U1694Lbp7u7lub0x68L6kAoPK8ZT6FOfl7owfC7DPIVNrAfIk2NEAEqg03u2buTjYpxj4gy+1F5a+V7XPfEew50GtDzc3J9bdHipI8WzVEfhiRLRf5KXSe056Y9fEbVRY5ogTa++zhrsIpmmFO28uu2Z6egTyGvH0LUTwCIy3lZIuADA7exT+U3jucFVP7Fjscsr7TxeddBb9MBhzEhByKqVXlG5mxW6MpDWdbqnMU1uyrPdX5vKuP4wmsPk28C/LpC3xVW3Lv/2sGajNvnTXAL2MWYeC5SKxl8igFrTO8ZFsdd8If1out2qmsxvxDQ99UD5b0BfCjfluDbOMBiWraNxAF7oLsefz4wc51CZRjsscLX7UbbhW6DaOv8uD9cIODm5N64BPQQ23OcGR1wwAHfLhwK9AMO+FVC3TCOxWPxS0/yFjefx2riZeFozwXssUIffdsVtqJE9+8WLCt8L+Q0BYX/Js+Z8c/8gP+4IiAVr5rXOeMTHuUu9Da7krI/xgjAHJShXqUxGrHkxv2PkuIXiOt227yoBuSp49q3CcANnhv5daM8k78sjzkXOGfM12y63jaNxuvwwD0C5h7EdCP2ukdfsYjj6K07Njq07BWjAMxFuXfH3QjIfAXcRpOAcsmmWIoSVwW7Woaakl/OkmeuSiQQ7H5PObhgtlhmUevrklvcVTAcvdt6xb2vt220Q6MzGlfdphuxNgh4+CGS3LPf/WtYlG8xmg34Qkbg3psrAhqv/1VEzghNtADXniYg8IlZutR9d8L+pl4I33sFN+Nf3s21uuRjAlVXP1WeI8b3eTshiM/Dx7dv3vd6EPo0aV05kW6ab526NnUOedUM0IxB057E9OUbs2sfuKhUDjvp0LpBcorfyt1ZlOoMxg0I9+zmCPJCqYIH6ziSNPE/pedK8iyjlDCbe1LG+8lr50rMR5oBBv4A4O+P925OrPVt6tibuUbE3WtCUmzUw4K0ZXaRpY+1xVq3yW1+Zfg7um8HZ533icx1cnl3/a08pDk00Hm3yI53jGDt++jbnqn0OdPtLuvCtXTR4mttwAF4577f9cqOc9cbg+F6JwaFuboLO9v+Dq1Bb2dpsAm9NKN11HNh1xjYwZ8lMxYvLPwprgV6iamG93i6srHFAVrY91iB6lSm8Cb1zFJYCde5lQEgSxx2FnHC3ZjB81zDMlA93Ph5Gkv+8k1L/0d99RToDUDN+1CkL8Ca/Rbg926N0pmjuxbtTSYCawvIrbC4IBf42In66uBxCcrzpt6yVjDeEOqv4d0h6nmMRjiU52Mg12SDcc7o0+oBBRYelMZtFS3vR5bqy/1uDbAnumA5ucUu/B7PDmX7fZkr2TzFcPsX9rtsYQcccMCvCQ4F+gEH/OrAbzx7gqU1YdNzpGoHXAZHO78K9OQuF4fJw5YMx/QHKgxn26j9c37AT+kdCIR/4R7MjJt0kq32GWQLe2DmGZkZv0vF8vwXMW3+KFZbLEoMnE5WMAP4+/kBIOAP03WD6kks0a9OExjA3fkeHwF8mG7ACfjzo5yUV4X6JBaJag3LgUf0rN0IcuUbA6I8gVxPipO0nd5TepI8493i2obrgZdDQP9/P/8CAHj34QOICLe3n0rdxWDe8M4ukaHETV72siWcNC1PJy6FX7WAtw6Uh7OWHQlRhQKp8w1orQMdTPL+qHyeKp4KjGoJn0iyEEvyJAJe0rtIqQp2E5V45OqcXfmZ5E4yiZfcJjfWV5tL72I/c7X613LB1To+o+SlpyT0MvTmXTN2gmvybaBNq9+pfld3rSqkbtyCOgGNb0P9HPbtJbik4TjOgOKu1QWxS8vyr2XVKPwkhuLILq0J5jUOW1M0+Flal6+1lUOzU6daAQrPkdgjzfk7z1NNY2HuXe9CJ1GOOAUpQGA7wOGL0/SuHyN+JnQJ9YrDyuFNqb0PMDe0EcaWoe/HGRur5WCpP1HJm0CmPCdArhvQuSnXqUfmqhtQsZYurVGU7uTcw9fCi88Syk5AxNC5pv5mRBt0l4WrYws/EuR+dP3u5o9Vi3SW+O7O+46VlpJlGZIcP0v9CT/QCV0EbY7TccJY0D3cOGeHt9ZBlefKRxjVC0EvjbFpWta9O+1x+/2ZU2KngFD4Hoh9EeqyR8Y/GltrcXfj9SKNdAH01gaeWV/Sti6+zenaxhJm7pTnbupF9VWJHpcDexT1vkk73d6AojOtZLjZFJ20FkTFylQVZlFxpjipZfoHAMTgTyhePvxE5/tlgRO7zBiNq19jOBz6lkP7sHmAsWVfrocB7T5p92t3nmd1A+34Uc4SDjePx3m/136elr4lWCGUeDhvM81anMiI3mEdfqUKdurMV+PIoW8u5X8Ko/IuDVdQnJ5rfR7Hm/4NLM8Bt7byyXT8hvWB4Rrp+1CeXwwXrx0O2AO2Z232cBfnUmfZhu73QG9Tpuvx5J7LNyJyNxPVNX9Bw82zdkWOfuc6vA844IBfHRwK9AMOOABAbx0QJSFLQeUSvpag6oBfFTzHCn0U3oSJNM7C3McYZsJLr2BxwnUvcDPrXiyGiFnBoW6H34Fw19kcX4Pw4DJ4AHC9yK2toxO32js13wg1SQmR26hFRkJVQLsQmrh6RYhxKfz6eL0MumxnJLH1QlDdyI0UPEuB4iPPOGFy6YMgtcvefEvG8B18kMLLSLa0xlojDXaaZDgObEPYE2yFPNklZLRyG7M4VxfwIiFmBijXMsjlC0a5V0zKy3p3bqpjyFsJLzwAcw1QA9iZqrtrE3STZFUaxnvUt/y0zZru1A3zYO7zd6pauvAckqiAnZo2tlwqZKpsRiKQIG13lkP5TEc4bn3r2mgR1Fq1qfC+dJuLaLJAbjPwinatwGJswJwSlLZJbSRvDUD67usAN4YDPZhynWo+lIrimpy78jhGyeXZWLJXvskNXtSiNORhlX8SUVGiSwjnGXrfeM2XfSLDh127myjJ0WR1kC33mgNBeS50rvzahLS+o8pNhXZmgFVFoGXVWwzL2PYV7fF67j4WufSyoX4klOtDSmMXHuHTkt4n7gY9Mxwx+aoE1LhWO/I1Bm4fC7P4jNkq/3+uyt23/8R9pWtJ9xFXVsRnfgSYcWPCdsaNKG7eX1clS0mZcWXW1Bl/m2/BYFylycbb/eNj5d9Aez1HZ1h3w2M1nxPuC7I4ozluLb0OFt9fV/LsfYvnpq3rcmlHeYG1LZ5fCkZ5+v7whyki38oDPh3zvQh3N8lzeL+kr+5Q19KazaVt6Otv+FyQ9rnwGWjq3Bs3Da0w8ImEVV6IgI0HJ4y3b9LPOp4X/EeGOavnDsjVyEVJTi4fVg87XnmO7BTkXMMzVyW68ebAo3X+fo3x8RYgWkZS5c8riTa+cXhfy2/NUv07tGI3fvcZoPd1TejXvaM0Orf3vgHLbw2MvoVwPUTzaQ/Bv8SgiINNrVc7ynPlG129t5sHF+ssNw//AOAXLeeAMWibPa2PL1n1fFcwOsjayLbQHBIun8M6bg/01kHMtei4fRkj3RZKLkyV53Iw3/aIlkS8bLHbh9j86zy6aPgQ+QMOOODXAIcC/YADfpUQVzcmtXJhQfDYwNZm8oAD3jj0FvhNWFSib6QFY9uVu/vNwN8e73AzTTiJ5eRHnMBgzMiYkPBZLNHfMeFnzmZ5fjuLAFpk89eiRLlixs95xm+nqxJPUFElzt18X5LJd70T/d3ppuEA/3X1DgTg/52L27ksmweaUtlkqEVvVKJb40SQnBvDKLcRU0v0xtJ7kI1Lviw3bpY3dnDNPZWE+e4Bs+bjs1K8e4bbC2v8gEqD6ygfan769ap4mkX6SWhpRqW9LJtEFcDoJrLxgqDhExqrC6/XMOEv3OY14LSYNriUT9ousvGkYp3OSKCsQue5fNN3gprpoioWpS6zlK26KHLlaTUIYlGey70IoNI+KQE0g1KyzT4RMBOVu9WZ2nvTTXGsY1krTxiSkypIvMyWUOqxJUToDBfKbbgnda/Xtj6I9G5W/xKk48sU3izyd4Ypzu2btKF3FZtlzNud8FJmFGx0hRxUx5kebDBLcOr8uaQpObrQ96mmhc9X/1JRflt/uXyVhsmlt2cWOiVJotZsrl1RjjmxVtbyrLyMjdtSLRtJDm9kcFPBOp4W53xsDHmBFOEKVCzQQbgRfFpLJVF8q0UjGhtsXAN4MAUQcKNfjdat8JrShkCtXTMuLGmJ/1AGoECqc6DAh1NRVp8wW5H/eBDlgj+IpX06KwMWnjI8FOXqYM+xDXsJffu58pu8PW9wYSNcYr6ghjKkO100cu2kMRyftQpImSvT7O7wBjYj7Adre2rDuvOhjr25vuYU+onRtQ68kkiN2/ZY2WfW61IFaw8a7wRKi47XeeVTU9wo3H/XTCb0Lc934P9Z4rxbo+VBtrFPF/2GsWFnb65YxHEZ+/if0Vqc+2/xzuMPMmbeM/CZ7A70wsKp00I6xurERkaDvfgI5J5r//7/7L3tlhwprjb6iMjM+rDbM7t75n33Wef+b+2sPTN7ema6267Kj0DnBxIIARGZVWV32w55lTOCAAECBEhIOH6S7k2V+dfMsapYl4kZZC3PVYjfWMLJ32wWDD3+ZfniF4W3zvMZwEMbfDUPXvo+Ypxw39fweUv1Z5PmAa1C9RsBIpTDbgDMGiN/79JwOCljvU2W4tn4S/ODQhiE3wqyRgGjbWuzprTePq7KVtaTfyLgP7wpz2+GNR5BLp7/3cCCesBSqD096bq4t9dZxNo+X7X+ojY/cuHqnSwE8Q4WzMFeXdfLeMrzsp931QOMfR6Vf4MNNviWYVOgb7DBdwtWUGehtwjoC3377yMcG9wOr93QfcPt8For9NG3Ksz6hewJhI2Am/rRqriVEh3AHHEE8LDb5SQBhCcwDmZLcgh7/Mg7zGCcoHfVJpe8bLIIFPADpTgHwfgeYxGC3SKqyiTZJbqYBIApy0DyHclArUTIioBrpPgjPjPiS52oCmwCsnJ4lO8AbyaIJFZZtE2uV3wrBKCYMy90NF+tYVSrKNBICzh7FWi8Ibh65bu5tU5c4iniygLT9BKLa9Q8lZsz66I9ABTFshdJGartlpXYVO5Fz4p2EcRZxVIgWIUc5igbZO2rKgAPSK6sVbhX3HlXNGBCY2nfbStT7zz+TdxYohV6eAK1fZt8vCxMT1+pN56WhoctY66n/EaulOP5QAyQ2726gzUrz027WvzdoeU5i/IHbUvU3yurctN3ybSVuuBTSwL9TlzCyaQhILv6Vtx6QEeFP7l4ZPCX+CS4ckuIu99soQ+YflnqxK4+Cb16Veg0XFbwC0EJWQeT+0II2MswKfedy1g3inaWdsz3fus8IuVVxXtW5psubJswv0eZb5iAWI4PPIY7ABHP7ITEjWWZwUid7wIfKOCXiqZw/cnMM2xonuOwwc11GKEOt5W0zVeNO3TwdSCXmerfnH95q/SoNtAq5vU9l8nW2+D1DWYR94rbC89h7oOPt8RrunGEqI310iBN5rclwmDWewHIYALQKniAyg13r6IjS6ybgYEwF6Ft1GJRaXMtls3KstIcPrsPbwR6EGHNW7WFhmG496thYa3j4VMvbVuk8kbJElXnC+F7pBOvn7dcG1jdX3VlhfJFM7C5/q/lLfLLzCA5MEjRKMuVZ1VKdD3Qpp1G+ZiZyz1v8+92rh7xiK8ClFmM1govhRFDvfa7j6dx/WD6BpToFb8Suue1jeWnnfZo5kkXJ893fl2Ftm+PIFuf98oxmhxfA36QMZo21voGkgO3frwugdD4A8k1VoxNef5S6E1UfmH2Wlf+3w+QWZvWR3UNXZvh5QN6C1PlMZ11ZFsI5HUUgOoAPnRvmDZPerUW6WFuSuVm6wnJK82jec/KczPWq+K94Xpsgw02+MPCpkDfYIPvFnQRrgudzoalgqGI9bOUboMNVsEq0ZdgrWtfnb6HqAjkGmWKF37bYabfYsTTHPHT7oC/X55AAP6yuwcDeMAEAuE3XJIM8HLBf9GEH4jwCzP+NafLqP/PlO0IMYUAno+YAfwk4c/xWA3Ti6TDdJeLxACO8xFgwsMu3bX+31KOX/mMmSOOl7RppyCW6HO8jq5kHqxwMVtiG6FyVrSsbbJ6+EeBI17lN3y68YLcx73DYdqDmTFRwPPTUy230OdDcsmLSzR1tDhNEcil7ZaZWjbr0AEolsUaZ5L854vQL9RpGpJKfVUnqXeb50vBdHOo7+qevUNwWy5VCFFSmiNw+lNhMwXk0wgkwiTJk0gFTBIvAqx3nWs/0WpPotAjSNmkPnvdHKtiXUg6S2It/k4253MsZVNBN6RMUebJwIYuWg5JoxbwXu6iFv2a354MPVGm39wXekJvU152vzlZrz1UuI5iXBPLb1awMorlf647SnhPCaZ06AruFZxQA2QORYRCKwKKAjlLNOSbETrSBEyqQDffVDhSCcI0706ZyNgBq4eDXAabzirk61rlc1BZkct1BEMqfVLhkrVhbwe0SatzhESbhAxB3Q9Km1clyArz1LZsmExBReKggkAsfLw6MsVVF2A9XNIUs9MvRu+DOaKUO71/IEpu3bOHgrW1Zelff9kd8L+n59KXK+EdoXLN6AvKwP93+lT3dUP7T6xu3ct4+ETnHPXP+zsAjJAZabkrfjb3TvxXuEeivBaE8eFwqPMD8Lfzb2VSBso47k1j4y70CnDrmJfk4cdGlX6HfOfGm1h423yviFfFeUH+1Omfvf6eySgfJxIvKUiKEH8lSZVe515rWa4IBwNqDe4ladbtDMbw6PtDs4AoZanWGNx0IR/9KrI3h3Hk155pBYCPMpGqJbrdE3zionC3B2+IwUzwLmjz/KN8I2d8Dc19f7CMVP5iRDqEFcERYo3uhfIoCvOeFXoeN1ynsUXu0rc/T321QMOXt0IqMJrMegO3R/jeYPjKwVe18Ui2BBWzcHjNXN1840G/XsqjQjCI+5pJlN0zo3gdcPUMMOP12j4hvOcDAb80G4YNXgxU/776AM53AovePt46L9QbnN5+Lj9SHV7t5/QvuG86Ps3vaM71yvNq/t1ggw2+N9gU6Bts8F3DkpTTLv794tJvgPzqZltUbPCFQJXoC3tyAOP96pqg76r70F3itfvQ7Sl7JmC+YKZkHqni9aTzItlqF9e5/+IZf9nd4Ucwfr6cq22gFmcKe8zxvEgOX3zS/438MH8jSlaPqj2CKIKs0KSyRNe6dTLNOFZ4RMNOFtLYTYwq4zR6VkDawC6S+lE2SRe5mzIoVSoBpaQJqji5FIvdbkVMmmsFyZXQmVu6DKvFdRz/3Iuneah2s7L0zBJgFI27BaWNbCpz2UjiR2Oxr3nMSaGQ+xSLkpzSaXGkMUAx1l2GIC7kkAThVf3IlIWglzwzUdHTV27bTbUAcX/P6dQ5IZXTWpZbi9qKbu55sD9vrGdZm5Xlmau2yNbnXk7X6ziVBZu+oyjgRKnOPRftijj3fbR4pN7ERR1c8jXv+myV55U3AWEy+QJuF0c9CVjFuEkOTPWYLozKlKP3jUDBaO5DcF055LvPiQhsLBlIuDEzVU07mldyE6miZkmwztHhqXlEIIIxmCjIGajdwqvinHEsJq55fOlVHySDKWVJACYQGJGTUrNQkUCBEedO2Yf9kVEf6JDBZcJOOAEM7LDLqfZTOrQ1YcZJyvDxfK7O8th8f9ofoIItyn1e+79EzOnMHGUJW9WHy/fm0IjBLbgyJiKckFzjl7QNcSre1eCuA0xEy/AG/BxXvMOEN2HchlWJGXm8LeEntPQdWfAzkE8dTcJv1U0/M0Cz9AA/npEOPSmcB/irvH1d+tFXoSso7YR5Otm+SAzQlHhROBcUGc0F5Z4SGz46/CGBXD9nXuP7Yt2Fq2/9KcUFqKv3B9sB6jYnBhrrymYt14MRE10ANmUCzDym4a6jVkq+xFA5r1vd3KWsv5qrqaah9nkyc0L3wBnMXJuE8ByRLM/BKIdJbFyrMLdW6J4Xufx6tB6Nww7J//jg3Lg3rns/R6VGDHUtrh4U9fAA4PQG5fodwB8IBwA8AfyA2nLcjymLQx+4jpN5ZS+dX1cM4J3E9dc4lAw6hWHzewvY+Ho6tTfpyj7EH5JZBVmrZuW55rPBbaB837Rxj+d/SeXw1wIrNOHuugj94e9xsY08WIcSUMnTmvQmIyt/0v1j9k4mlueyv8tJ7X6h56I9z8U6D3NnHN8ypjfYYINvATYF+gYbbGCgJ/HoQU9ity0gNviDg9uvr4ZnsK7ce2kFQcbD6CrRq7gqoUtx/3054sfdPXbThL9fnkEAftzdwbrF+qtYhgMq2Euq9b9fjllX9B7A/XSHadrjIq4+DyFZyJ1iUlzci7IiSgVO8wkA4W46gEH5rvR7sVD/ATsQAU/0hIfdhKdLMq0NU0gKmznVL+zTIYB4lpPyjaYpFz7RJ7rwEWQ63shnqPNc3XvuBL22zWYAU3KXfHk+yjXc8l11yIrrfHHCWXT6lAqADO9UC9ieggpIygWx+i8KQ/3lts9eTMYEZBNnlrJnRZZaMqgbdUeHSqgEFIuQ3ga4JwDTd8Ubi2KcAJAIg0MAotz/zLrZRfHYzjMoJNVlsQaXuuTxZP6ATpwIDgFEIQ8/jhAX8pLZXtJof1RcQTbNqkS3+WjbAbW7/1xvY2WtxFEXuQcu/cgmUXoFiX+Wjflql1fhu4nLXCv+rQVtlvVxLZT3fYGptL1TppNEYqVF1XdUGKX9sCMAyYJYG19pXyx5S5/R/jGhWIdr3oIrmAaq8pf3Se8478Ux/Y+QDlzonbfCs6UnFhrBWpP7JqHC5qGspp1omIsXj9RMrTCGcnpq0+v/rK7Wo1GeK89J+Z4A3Lsyp1qWus1ZGDRJeSKIvUKT8SkeARRle5nbElV8CUeTrDcyJyRF/9mvRTV7J7Mi85zr6thkik8lHRhFcXzFnJLdrJuo0ve0/58A7JuEnq/2P6/mW90Lb9La5+qb7VAj5GuLnqUMViDzCappnMdZhy4V7/GFFn7aTeMDFSxzncfxKn1Ex3Wrd6++lG+X3pw8wzRpJXMOLsy1dfPNtxvX5bHrG3a/almuXqWffVF7dO/AJxf+4AraKWIGO++tesoVJL/5igg8klHmS1/7ZNtqpY83n3txO2se+6eBvo45rrYZt9en6AE5qxBnmQNY+bezetPwTr4jkqeANWbzNYE23Av504vBU9jnZ8PyIhJlwWXjP6AdgF8H6PU3Q+VZrqvyXXMoqGmitX45u/clpmFwvaN0bcNV8Np+Y5Xnz0gM9hm5rIHKGF4tis75AXiU9ehmef5K6DFn90v2++fmI98ukK6Jm0P2KzT16xybRvevdU5lH6eHsqHbQZJ9nrc493NG+uNqnk1/xDHxt+it0Nv5eoMNNvj+YFOgb7DBBgKdBcpV4b1t+yjtBtfDa2j3HW8AbpELL4U38T4C/G5BMGcExhqnOjlrv+uz/IoS/efLM35CcvMq9o7J8lssj6O8q1VMSl3s038KB1x4BgEICGDErPfTOJX+GLaXcbdG+hskRTQC8VaA0qGLFep3rei8RmCt348adyWdL2ulkBlsmrO76JVsctFNHS1MSArk6tNCJ9Vy7fdAuADnWPpNzmNBWWTLBNPX8rv5JYPDtkFzWMGWv/D52oDRS3N1kyn0jToeSJTnSUFeCq9xzdAV0x4AACAASURBVF3UM5VnW3Si5E1ecfo2CnLntFh+cL4LTb5HQBAkHNnNeZSyodA3iKKDuJTFburJWSUrvR2pK7m37sHtJpzV50SJNFTQWmCY/Lg853AuZRUhfn3PeSzxLU4NMMpz4nILbFXfyjJf/ghGeAEUoYpxj679Qb0CBCrxAgoeEBAmsVg1btwVDyCeIFC+WSEOId9/p/jYClaICivKVgp138yCYxTfIIDjnJluVN7ttGBHS1aslDj1MOPctyj/Q5Ve1eHMwCkrziOiyFpDtqJPimlFm8nE6ZhA4e8kLZVmmjlbaEK6lkncs6bi6sdxOR3fJrk8GMf6IKQzLeV6BnMHQcWrSr+s+rjJ9GGf0s5xlvEEnGdb7C7TNKB81oWrNSoRPp7PABE+0Sl1HQb+NB0AMJ74ZFCnMgbS+hRGcGeUDD/t0hpgkv77Md8FAbyXeH87fypFnztEzwdTuK5ib4q9Ztq9JZ6dc3JC++6iWl6Tw31cV8fquVco309H8Vbw5D7eWx84JNrGHnngdHgHAKIohGblucY7Q48OVbm489mGhdzHq0lmQMqutXSfwMtgeN6QlHbS6DaHo7E/jDjMF0ah79MMxi5ssDmg593AKjvR6zKU/+naiFN9KbIoyXweZozrYTVVoEdjUQ5GUYxbnuZdu0encHdAtswabUTwhfXnHx7ECp24rNEB2DrlKavbJuj3iZtgxEh7sKRE/3rvQ0/KMuV7TwAerutilUc2fWTUc7v/jnYu68FHJOX5VXD1hNYBW0b90wMR6sIdxaMVczrw88krwd3eBtKnlR99jFh0a7/BOlgWSJ7PA6Xj6Tpl8HmDCkZ701qJbsKb3cDS2DN7SoaZ25SHln2bjiHSd6K0F8x7B91zmvgyL3P27uK8vegcDfec11UbbLDB9wybAn2DDb57sEKuHtDgW2cT9KoNyQZvBwOB37cK196Ffiv0yLgYtkD3LFwl96xp0u8/L8+gacJEwM+XIwiEh11ydfuEGQTCx8sZAOGn3UFQ63aFcKAdzohQp8G7rBoBppCE+nonuuZ8mA5p+z8fAVC2PH8SS/RHc8f6UQXAnFU3eZ8UL/J+C2sg88BVQJtg4VOdwQ0ClNxunXTHMy644OHxAQ8U8PPlhEPY4XQ6Iez3iKdTScsoVum6Z5umJDC/SJwJtbxF/zxt9PlJ3TyaCPnR0Lmhrd14AhBPBI0LxCBCmYsRGmQ8ZZNZ2sYXcvKJ6ldbVn0HlX11VE8FKmySTW+M0hUoCaDOVNcVSDrUGXV625cUd9Q4SSDNgBiVU1JsEICTCK2y4TMnnJFNWDQW55TjWFkMnWQkKlk0vtZX219lqRqud7PnO9N1HHGJ26d0CWXzyzBu21G3bUQR6AF1nK5Cpf6WVgMqIClHeRqXy5UbPSvsKOraEt0JNwhFGZ7xqJXBruShCCpFur273OBTnKE0WLqGQuP6Xy/s6dlVq5DHjjc3B1DzkKLadtGkQFFQ23JVacvzyeZrETIVxbn8HRQ/AKv8p05rEgICq7o+5ENZFavqKKstVGy1Ionyk4gZJxFi1W0CAAfs8H93D0CM+Nv8hHL/QsLxz9MzMn+qlFHAT4f7XIgnPrblAlAd+FDBWSFmFZ+bxD5AR4EWScpCXLO/TIdqYHmkg7AOKK6mcfTZzxn6zfCLRbANd8XcavOxVevRLUgZZplbyIgjvDcMANhJ+5y9BeKoDm60VvgqYqzgWmC+M4yM2PMARc+FfzHSeiDG1N1mlolsMMf2+ktTRHZ01onlgmH/yoavnW/s6HYNqFJI+VXvrvQeyT1673b50f1Wefba1+ZhB4UHmbfJHAbzynMUXjQC6wyA2V0lk8ulPEr5ExdFunrLEbexzDaNupM1ONyEnvULvp9UvNb2AVNgP0+9KVzZb16dx1IbX5PczvMvKfMa77DwNSrR/cRhgntx+Amghza+1nmpmao+67Pl1FY8DYtUwdWW51XGN8Bo/lbLc7seNVEa5XkPZEL5IQC/Ic0b9oqHDW6D8eIN1R5C3x2NPyeX/BYhz5lU75do7cCS9+BnPYvZea3yWEawe7Z8DNdbnDeW6BVWM78OFOY5PPqUG2ywwXcKmwJ9gw02wFXCsS7YBU5PirfBBl8IPsmv3oe+1JVH33vhQ1zugxViZctz+6xxjLDUKtHzBoLAlxmXKUi0tLgnIpzjjH0oSssAQpSMT2DsYUdfsmBTq3VN054CBvyY9aNX3z8A+EXjNoqhgaCl3kWZqFfE7zbG0ifZMDV5rvEjv5Gu4RIjngIBc8QZMxAZ8Xgy+DVf244AhZD2e7NoRiexir5wq5npubX1cbzSqhEad8KsMHck76vy5Na1PvtCLeF1dSP5zyoV7gh0YWCO4Ej5vvNkiWs2uszgmcrBBK+gyVZfEhhMXnaj7QXMALLrXGtdLYodjlzq5TympjAuumCbf9QuTn2jxywwR45f6MtZVp5cx/PgWsVOX9by2/KqojwL4Etds2VaFuybuDaL/GvDS2O33bAIM7IA0QotKoG1jauu1TVOAGiXdeGtEj395RsRJA8SYQnL3epk4un9d1aQk7uULZf21+odWX6ZuiDl9ABArG7eTYKBlQIj3YmeGyKbCiKFezZEcss5w3D7EU+zZSj84o6c9bpaQEuba8tHUdgQqwI95banPcCEC53AlL4rjnI/upvXGNhRvhkcF7nzNZWhFiRXVe5Ynn4g4BcEgNRKROtnrDNH1ml5ulqg2coUkfqIVnE0T6TBV6w+YcaVqQxz1UrmS/5eUWQ8LXUK6ZB6Prw0DQ6/WwbU6Z85jsMzml/QkrBMJZ0JreI9SO7QLz2rU8+0CHiUeVfXht0rYNbGkQ3rVH6JpoDMewFB1mKIEdAzHeZ6habd1XVxd+6yv3LXjAbY/jayQB8VvplrbgBC21ZP8uB1aqN+NjrABUgbDr53mj6vxQZFVY6QowNlrYC25atslU55rh8pxuwcy8pky9wryDg617DZEo5rHseCs+rylm5l3sqHeHpEerX19R8B9C70ui7XV82PtzUGuQbXpB/dif51QVmDyFt2Ow6kwwAPKHceAZUb9s5BlTYDdp/MyyIvu6UNXzoG7Hiyfwavrknz/L/OWBNZZE/yA6VrK0h4S7UA2eBm8AfHAQC6F1B+CVT95808VXzdMFJ8e++DNh5V+702jqb17wuFkExh9mflpz7FrvtN2Vea+Oyjc33ANc+xHGWvpfOvvX7B/26wwQbfI2wK9A022OAzwLbY3+B3hoG883Ugd6FXQs2REMDEuVWJTgTMEfv9HrtA+DRfQCD8dXePZJE+gUD4xyWddn+/2wNg/P1yRCDgx+kgivMk6DjjAoDEJSzy0HyQu9DtnedAuQP9Tr6fMIMR8bi7xyOA/7mIxQRbwQmJdScju1WcuRasKmh8u3Gpvjk6Nh87vIXcb/fjQABrLYM7cD6ecNYkgfCXx/cgAP97ecY+THgX9ghE+PmTuNVV5e9RU1ERgsROXdm82M1gUx5qBSlWceLJonL17LJYIkySx5nr8IzfF1C1slM/IxUUkQ0wOLIb6RSHnvUSecEVOSkxeU7K9J0oSi+SJt/lbfLOSnZDt7y31fHmBPpZ72KEW0TFKDqgKHID0kGHAOAsRb2T1AcuynOCaSeqSAl/YN3/ekv0IJa0qpT0fTq6cCsTl+/ZxSsD+fCN1jXL2rlJn6EJ68/jvgjZjtkLXBphCpU/6vxhSoIVKlaCSdgFMELiappc8VJyN66KdnIW7bkIE5XDGDA9mcrt5jVw85ZDyDzYqmX62r7aQeCVTUMgRGbjxJxrz/bNeCyFuRP8hNA2i0kVpWBRlDbqpl+HwezS1cUe8IMlGLJvcz+7q9IHBn4ZZNeFoeAzJf7r/h6/Zet0ccrPjONlkExxdoV9EhZDHmc/i3cSCnZApT8rwAtS41NWmJZOouMgmL55Fg8K/2dfzHLnfUobjMvMfzz/CoBq9+6Wdq9eoi8goOXPq9DrzlcnWAA7J3RR+Pt2gdoNqTKSHg43MjLPTn0mxktqW3toqlnbVBymLtvC0qfEo9LvF0myRIMXgi3j06s6VoFPa99NPnYNlcO4kJWKdVrLGqjiF4WvdvD1oFpDuQ+9uV/+iGEOsJnFgr3zXCft6mBRWWsx63UsphrD8nwu+JJ5jfK3C+GXwmgu9XktpV+L01Oi/1Gt0F/brkvtcWs7+cnrNfiaBdsLYMCr9bCnrrlH8TR/3R4hAO9Fgf5bOXxgztX//sPsmwPL82kj71vCmx88WMNXDkcnsUDeIDbfW0g7K51n1UMXMZsDsUvjeIMNNvjeYFOgb7DBBg78ImFBYIjXLiyuTffWi7ENPj8sbBo/J1h37kv799G3XngVtqBE92H2/WYlOnC+nDEd9pKE8+8TIh6M1dEBJPZ9eh86ZbGvVbLMK2OVXfxyuzpAFVGscsg8d6ztmgxGAuJSWIe/E68fWL+TITZDrJVH6a7tkwScI+I+WfVznHECMNGEe4Ryktr3IRFw3t8fEJlxelL3wyu5N8JQKum8rM5Wxwtc2D2HTprq3Ub2iOSXgOQSnfrt2tPYwdZV7x+jWjEVuVgD2PYmwJj8AmzuKddiZutlW0YRhBMZd+4QK3LJKyC5jY+c3O5PEFe7CV++slg84SMwCGI9r3kQ0l2oIHBPD9MhUaabWrx7i/PKktUgaPDIfbpIdUhGzYxaCK942P1ZvBY/1flUXZuaYrDSFUCtELfKCTJtZL4FjT9Brcwp34du4wHeqqBYnusf5CqA4iaecplKibPC3AlZ7I+HmuydSJnXoyPwJJPGROixY4LjpSTe/RkTIqIcHNGbBpD5NOW2u2OIIpxlKNi8S/tHxDQOc5htXS2DdzMNY/Bt5r4BpSxpSpQl/su45PsMGI9TMmGdcMJJ+vPHeEKeMwvRAAD/PD+bPpcEYz/uD7mvfwi+cdJ7MUgiNHOX4h8J4fx4YgDEyTNBM15LPHNjdYcavbT97FdBq2yr3idD58VOGhrkCqKvehjNkulcx80KPzZ01ix8VnqVgz949lI6jODNcJJ4EAFwb8b8UwT2LG7bqZOXJ5r/fO0axZTjDsDxrQn1GcAqyh+xrjj38KIqyrqWqFC+GW463u01E2Y+pTLv9pvPxNV5vrFm0zBRqlZztr3/XPmEcF3tDz3PMVX+7tXygVthaCloGYqBTLKFBnpJOTJYK/RUqTVjxvWM/cK6930wb6+h9jiqiA8Au47/YiXUWjtpGV4K5qBbniup+l4seH1ebq0FDObaXvmuadwFRt6sxxhDzzUjBJWbJ4eUTsh7mVuUbtYD0keL19LQV6CDuypSvd595UD7neGWNnJreCUtw+xJ9FnWxTIlE4sS3R9uHS75vuzc2svPK4WbOK9u9nay6N1dnmKZPRicty/YpaUb+3r4vTt0TUM2dbHfZB4nEuV5QMs/O+OHrat26WfZS4w7yNbgWAKf1wYbbPAtwaZA32CDDQRGi/096kWUX+CP0r1kodF793cebrAOv/dmaUn48AXg2jvRR4KkXvhimPnYC9MPVyvRkQWmz6czDvsdCIR/zs8IRPgh7PGEOZP558sRe5rwbpeU7RfZEEyYQAB2mMDgdJctlTvPj3wCM2M/HaBiQttykxR2Eju5I87gGIsrdxU+ZKun9D6JS+6Ll0pm5YQSwIZXD33ILrNtckfjHnRkNsViWQSb8G0zLsbPn9JlnY+PD7hHwH/mEyJN+PExeQj456ePFY7HhwcwgCdJ1xR5InfX9ahOZmPPAFX3HDtglGtQPe8WhQary8DKIoYXhF4zmryYsmV2NtPXQxXWGo5VWMHlmxVoWLwnKYPfAO/l/cIApmTx6eTaVV2sJXIw+TCBJgJFEYtzskDmQADPgjcAU0gWpBSSVfNRlGyH5IabVMc3oeAGAScq5VfFva2KFtH35yj0tG3OMAIdvWtW/rIiSu9PTRt+rtzGyqjOeIygoFKyu7JkWnEVzpSuLa4qpO8k2rN85xxq4SAFIOxc24uwI0j6kKzMOYRsgYsggq0pFO8JKBYj6oI9ZyVCFJLDE9rbeZaTDargMvWgLPjpcBHHk5fB0NfwPrZCZsvvOzSu7ufO5CNc5EVrlRTk6RDKlOePpDwP2cqeAI4grsd4cdAufEDK3esKRTmvv4KDgTtKc85MwsCIcYnC/8Wid2LgPT2AwfgUn4vVpHYLzKafOOrb/mn7ncYPBPBk6K193Iz35r5fpU2op6ZshVJCesLCVfBJcrVqfghQVrD3OD7Rte5+exOcWDraeY6QeIgls/IRQOIDcgcC6mN4diz5Opo8Krw2X5uG62tCMluiMtZ8laLZB+Tvlk/K8864EHgqh2hKRhNa1yAur86nYbweS+g1BwCcqRyWqmgi/bOayn8Hd88Vna6BK+PdohDvxl3JpzB+l0Z4lhw4Yo1DaW4hO2/EMtJZeYZtR9L7WTiNIe2PZn7zJShzgc7JsTrYxjrp86X0i67VOcN7PSgshEw8nWcWoNxbUjntuQ46sWsG+nI8LwJGUqLfmwJ4Xj+A1ShLEWxLc/NlfEJVSa9u/68sq6atFFI8KsI6vJb83Pb0GnkYxNXf4OKvZmieZyyn4ZXvWg4dyzasE488kQeTezAH+vxB8kda4IEE/lMA/sNFeU7CFyrgsm4F6jWji+bp3VlVfUWg9ezR3f6OQOfVipm7vw56v4z86uDVgxyWAA02uxbXcULC23Re9fNxr0j5QIP8x5D5VbPXOdt8b9Jr/nqtVwBC6y0vHYOLOTvCDGCWOZPLDWscwZezyeQWWl7DfzbYYIOvHTYF+gYbbLAClWZHYG2B8NIFhF98vHb1+tWufvF1l/0W8PV8o8WnKtHXNkGj773wHCZW6FWYSWDTVngY1ynR5Vk2w6fLjMNul7MhEO5B+GiKduaIH7DDqSPRyttotbil4rCMiBARRVxeH1Zhk1a3REk5FvEBLEp04M9hwr/jBWWjY8HWl3NQ1xq8ChIhplUorsrIbhkzRZBYaG/QXNEN5xjxHIA5zggBOELcJlvFAAF3BBy5FYKmvChZ2fVcOlshrv3mZAdNrRu5ewc3IELcXpv1MrPhupGNaE56505KbTKUYPZtSj6yCKOaU+T6Hlemi5A24urvOqowLCkLKUajwJZvDFHIMUARiFOySA+iWJqR6nuJAM2lD8vd7WnznvosgUoX9/012l8rFHMkYKASqNsK27qr0IGNAtCfoM+4tIwGZ8Zj2jyHEcCOyP7QQyXEsIqFgLriJk5jgT4loUf+HtKBBgjNIeNEXezb7im4UnehfAc6R98HqdAiC4CK8KU7PjVulQaOJjWk6Fy3zyhmVkob/lAJYI0wnvVQUiJDQHIzmChd+wrJUxKQ3PobvCraqsXYVjjF0kU1fhqtjziAGXjCycRtx2ciE+W0NlZtCW9xdBhB1zJNH5VurjP0UDXXUvRKoxRJ6913+z1O8QwE4BK9Gj3xk5J2YbLQPmialM2Y+umQrOv/V69FMbjmuRXGHWfr6jfh3mfWRbk87+7uAcz5OhYGEI+qUHeMprHCUz82BV/JkYrBoS9elwwS0Ta77dY2nj1kkpuI6t8R+PiLaVSJ3uuLdbEb/gWUw1jmEEidtlNmHzaaXqmT3yrYE1ke35Uo3gxemOGiUu7arN2Ey/VrzkrmicwLRJnd9gLLW+D6u3ioISBx355SkKGHcoj1rnN7SMfO0cYCXdc2baadPLScvfBefQzXu6oPaplWisBt1/5yoEp0wE3WLgzrdbvB6rvMtA5Hg7LGmVKUQ2ulrPdIdbkq8/5zJ/8SOGrwK8DSaZFGOo9WC7TyzGvpPS4YXAN+W5VzDaedvHrhS0h7Y46BcElrVL2OwffBTz6NfaekPM9BMv6bIgzqvlDfL876PxuMKnlFDQkoJ4XaOaZ24FHWx7yQ75e2PP99YYVnGAW3rho1frNmzsumtU5LBW+1mC/Xr7Bd06u3sryPMx7ItA7S0JxLJsp0mW9Z9lGc5+LvqY032GCDW2FToG+wwQZXwis3YEPobWY22OANYWlvvPS9F76Gq4pnBHlkPjRK9KU0DETgdLngYb8HEeGIiHu51/bPYY9/zWcAjJ8vJxCAH3ZJmHSWcXWeT1XRLlM6Xbunvciy07YniZTLhuUY0z2u+3CHAMJpTk7gH3dicnx5xi8A7sIeD8R4L9aI/zgnIdB+CpK/8A5vDZeBWhaQN1L5xYTDCXRc2kbwfY2UYRC/Z6YzETAFHI9HAITdYcIUAu5la/bj4zsQgF/iGQTCvz4lCcrjwyMYjFOcMccInMVazt676/uJr6uv50tY51A4q89OuaAKTBtmBWF198L1g+SKqL36qZtgdZWu4yTH1TmFxZrc9LeQlEjMDJrZ6C9Fq6NVDwlndokeoriHi8AcgCmKIoxKlvVev/Zs0LNe7lmrNN/Mr6eJbUeNUv1JWkadPjrcqrhqpvelDqb1Nr+5/kb4kb0RmDjW6sAq0keQyyUP0eIyJcpKW6q7QolQ52vyThbrkpU1ICP3+6bg27yXjxlrmXcyIsl96ETiH4RANMkBHjuhqIv2BMrrvSjRPkcAM2YAEelY1cgL0PVjPFmdW+HZjWvI3HbJYuRuSmPvyKIMtfNlh6f9fLZK/zoOCU2BiHf7fR6Tb9bkylM6VmNOnDt4HoGlZWGkmQzE1ZfHh3sAjE9Pn9osrBJdD9h0mHPlSaEHc47Yr4ImzTpfMs0xSNMU9qXwkhY19fXVJoNvMt9l3YOPZmLvHZDr5nVDsZpnGyhKLCKM7xT5QqDeoG51zf6moH2LkA6SyhgngFHeS5uaNfiIZXVOkuj/aTiJIF6sy9nOx9X8+8p6vRmMcL35xPeF4YY5p3tocw1GfKWPp42p/egt5Sq/J9h6rHkQHG2EF/B1Dzra8TuCiHS68iXQWwtz4ft5TY0S7x0Zl+weCPhAwC8+j5HXkc+yAP3G4CXjJ/W70SHIb2VEvgyWat8sht4+38ZrQILhdWHVQe4c2T+gHFKr25x5afxtsMEGGxTYFOgbbLDBFeA2BjfD2uJ/2xx8HngtTb+h7cOK3Hf4vRfOAEjtvwf3oXsE1SdGrUQ3QhsRfKc08ksMRODpMuNxv8tb+UDAv+MZP057/CxK9OvaLI23FJvyk0+vbnbTbdVkUhZR/Ye0ncEPtDe4TFXy3kfqk581hilSdpFp6+Di5MzJRfG4fH1v4TEWd4emMyPff0nARVxD8zQhAPgtzngMAecYMRmBzh0RjgxMFIBQdA115SCybyrFbawGTZrPxjp9vd37ar7X9kUTXfFW4f6DFWTZTbFJYwVsrGONZRyRuAlPWi3W8UZqfap37lJWqjGFopCSeGpBxCyuYKWfcKVIloLZsZ7Lyq7f+g2+FbA74R05HJW1uab375qmc9+qxWXbtdu+ZnBZ93r5WS3QjWeC/Gst0j2eKyDXVVEYJ4GiYCbxBFAp0W0cMr8qbBEsnMNQeBUX3H2a+L5mf30CzjUvn1wftm1grdJJBMdqcS3xYqo0IieL9CNH3MFa0Gjbs+mClMNGMFk33kTlloIrIVDEHe4AAiZiXGRmONBdLkKv1bXkcy4740LCKWnGgYETpTHnHSO8nA/qzNWWSHqGoPdSOcsPO3MaYLyFu7GYobRP0xcC12uDAdTCX3OruqCkTlgqsxlLFY/w/UfWC/mgjZ8H+Era23im3kss/qL9n6pk7Ys8z5N5fXGHKOV5JYpeERdx2rveb9b1zIAfqQe62qj1s8G1Vyq9Grj6qcNN52I7ZuRJx1n1i7J2UDQZ9xhf6TZ6fYrOz/5OVRfeFL7z3BsrwzQWbKlG4BYA3bHWSy1ccqTE9G6wXzumfJEArFuh34p4PW1rSVm/64G+vsUlob6m4UaiVF36xrR5zXMt30bLC6nu/wUezPdwe9l6cyvqoGaLMIrfxGo2hitJohlffh7mwmojG77t5vAuSDmuVp5rMrcP9MsRX3y/PvoWYM3NxS3Nq3vDEbKbD9IYvBWar5H415Z5ZW26NP6XWEM+WKn7SmPawTrLwu3pZM9p1026Ps2vOu+KN0bmfLi3np832GCDDcawKdA32GCDFWB07769Gm5NR4PnDTa4Ebzgbk0u8iYyF4PEh1X4ZfNmhSA9JXqOx8A8Y08B/+ELPoJwmAImAv4Vz/hxl5ToDOBXXHAA5bvPH6aktDjLBv0yy/1O0wwCMOWlQNqkTFOSDESxXJpxATPjMN3lvUkEsNuldJ/EEn1PhAjGf+/Tnd+/4YxLjPhxv8cJjOf5kuwhoxFO5roil6FRfqsQo+epNNN0oMAwaKp2uUo6viBwUcE+A5gZl/mCn3HJMjGVWc9mM/avp9oEa39/h3PkpJCPseDruWBvBFjynk9e8xscnrYSGZuh/kYTzygVs4CZ6u8HebXXib0GjpLPXgNi+dG7TjV7W4esRJegGJMSnWLph3rHKalbek5tOcekyAoEZlGeq7JMBaRZyal0KZv+cihkSVhp6cymH1thu43O5XekPI8mT8WXrd467u/Z4rWZrTBEf/ofeu88ym9WVFvX7TDDy6S3BxAaMkkdgokg6SjjQaXvqHiullPpEkx+Pk8yabvt5iYL2yY+GuAKhXqsevy2LTKvnEtZnQeTyAymgMgRQQ7p3DXjt6h/U0uM27WwV9N3iczto6XznPkCiKJI1a4h1BWy1bkZRu2CJJismucaln5DVgAAZqNP6yvZW0RUKqwCvFEf6o41Lv3lJuGrP77WK9ugHPZ7Puimn4zyPA2cK/GOy1n61S3p4Mq1Fq+3JlAEtg4LSqxb+pSPd7cDntP4aPjtLbCUbrjmecVA+Bzwu1mfD/g0YuJY1oNMXoNLGtvl9dfSW9cBleUamynbzrfFXWwlpGeUb3Ys2H1CUx8b/JKO5Wiy3sEW3m8dwG+VVtIvzs2+nldCj128Cq5lIk9ICuintYhvBNTvZ6Oi4hc8BgAAIABJREFUkvv14fryIvqNkPto7rudZ3tgxwntkN3BrC5I6rVTeZaMJgA49y3P3wsNPvY2ZJS+/+bzWlOea/a6GCG08/Q3CsMD5Neml99qv3NlJ32T8b/BbSDjTPeQTI7FmCvSNI7uHWVPV5q8jJF03VXVCZDn42ivVtlggw02WIZNgb7BBhuswNIG3W96llYfvQ27TbetVDf4DPAWSvTFMGOJ3kuQH51QTj+uKdHtXeDE+M/lLJsERmTGRAETMf49Fy3lQXbbCROZYpRnzaR28qqW5qWQ2S0yJfVBcuoL+QuIIpD4ANFrUVHN3CHgEFK+BxCeC9ZSChV0W2FOJRy0cQxUNEQdjzvxfZ5VXA9OKLO6qTK4l+QgmcypnQMCDoHSwQYiIM6D/LwU18RR9mzdyb4KRsJ4L5B8Q56tfR0oOL01kxV45LqbsWL7QdX+JpAlDVHaMOcNOACW+7WZsvv2fG96FAt0tTwXDwJdC2uSMaw4K+G9PvSYiStnDvMCc42j9WHzrn8qFDDflYbsBAXVb0TxfGDal2xEWwc//1OpO6kggwx9Cley6XMTZ7J0+pWOm9zfE53TUOKcuGKlsFWxdVGcVIrR62edYSeR6t/cVKZ28s6W9ijlr8pW/cb2Q2/YsXkGqToIegvhMSdPDwf5jTmGueVavlWkcbVdli05AZeP6V8XhKFty5v+Y+dPoUE+n+IRLI61FlSR9vF8cX3AIMxW5jXOO9lJH8+JEmwF3LnNfb4pPGint5bHtpMMqV46xaVTrzMuyIeC5NudxH/3+D73sX9cPiU8p7mUVWnKZjKzB09wRk30nkLd8j3Dy9ULSA96Y7Ce3E3cTpQuzlG8N5ovdyYDbcNnO1dJnd8gqwY+B87fDewc2Pu2BisdwvDKSnlNZRyVMUuoDjxVFumaVz1WKp6dh416e+H6t/L6woZPmDpUXnT8w0savtMnR/GG6O1cBrTM9sr1YKUEfcUaspongaR4vkfbF3p5rOXr2n/0fQFla4k6TGngBuV5Ncet9QlH82a4DPpek1cP72P9Tv7724GuXADkeXaUg3pQqw9ILbj1aLxAsHsWOi8pz/Wx67pdSnqr8rxKb9YWPSX6G01rfzh4tRW33a8ATXtVz1RZja/def5t3ome6sTKG7pj2rdJoTGXxD2062A3hd11oYlX/UF4Avc5PzNI5mC9UoU5gnk264JvsT032GCDt4RNgb7BBhtcCXaTPNqUXgujVX4j/dxgg9fDrS4ke937mrDRsMjh8lDFE8FZpfmhOp0K+lTwFQFMAZcYcQHjME2iPGH8GPZQIcHz5QgQME07AIzgLNKf5iMmmjCHWUQLycJ2wgQC4ZI3kWmDr6KKpEZMzxMmXOgCsBpRMy67NH73mMCYkpthcBF+hCR7eNglS/dPlwuqTVolqIRhB44vBCNAmOeaRXVZSSewu6fuSLqGggltFyn/bsLj7oB7EH5++tQm1McIHJ+fASZxCw7gsE8C1pO6LLZpnFDXV6sX1tTLfbPC4CriUifuCKGyWwJPsBug6us23IwHhbMksEp3q0lbow8DwGz6CSG55KfUp2YGQsib8aIU1zy4PKtAngjV3fGMhNNWpupfthGawkHHiwax/W5dzbHQyIZHDVehvYmXlei2LLYYXGiigRU9O+3RaBJIMGs9KeMkwFgOYAzVNxljin6WMoh1NpNaoEu4epFXGsrYjNnyPJQ8ejKgEQwEQpm1K/00rlWgWv6eyWTppjgIydpc6yzfgqbp9TNghjitjxGB1MK8zDcnRHEIQWAhUDAVHq3qWP637svHN0Z2oGNlfMFc0TKSvczClEQeNWQvLuH3DHykNLf9eQqpPVnuOdeSESrS2trcBo4nLixR1R4+uZcf8GoNzOO2B3b+WSoz9xutF8+jsiyfXFlY+lg+MDAq6630FEVB4H7dtI/Ppj9YJtgG9t9XyHpV3KVEV9HcxF1yE7uYdi2jl/TnPzJ8zvtHXf/JB8vK3NRN4hmjjltdF+h6Hgy98jz9py8s1m0xheV5GCaOLyPXeftCNfNxL14HmjUhj+t+FTje+MWhNz68K3cbz8Tvja1RNfxhziG8ZJxbN+7XQT+HG9qgxz55McB8Wlu4fUm4htY9t2XAWClnJ0b3jVC7be8pz9/ZdbBL/IHSXPCrTXcrz9NFkdl3fC+W6Iuw0idH9Plu6fVSIPNLLtyEvQVdjRys5tZm3tb5q1Kea4nM9Sx53o3lF1GU5+odxuzZNthggw0WYFOgb7DBBisw2AwQo1qqVC4e/Wq1L5at8DXxt0XMy+G1tPujbJDfEKwS/RoB6EibMAz7iMX70H149ZkxVKJX8TUeJ9fShOQVGQARYWbGz/GMP0+Hjove2t2t/s48Y+IgJ67JfDMCRpMegLjyVbe9+XP+0ZgFY3Kc9X6a8MwsexlGEMXxFAhzdnttss3swPAFK3hnzY3BIRTFYc6dbfErWnTdwjWbbC2TF1q2kE+sx2j2dFofx88qF79FSRFCkEMIokDwsrWJREkt+LxOweZzNQu4JqLv+LaBOMkrGcl4JpcjIkmbmsYc598TGo+mghyuNFahdqfsbOLaEUBzCWf1qyB49NYSCkCY068VNltX7wQQp7HJ1gq9qh916qH9s3wgWz7bZXK/Z3B2z242/VYx7i3R2eCz7mMh71q2ag5Hh5Yaz5EyjxMvUEm/ynk4v69AN0KvE5S6VSpdpmKVLkKV3PwGd+o2hGEfs9k2ghWlMdXv1TdLe20rg4+R+pGijlx4XfYegPJeWUXWZWFEXJgwMYNJomtXlbY9EuEOpY+x5aUZE1Vk8rMAg7HDIadTA1zOMRmzoDwiKblDRUhzR7MXQFsvGnb8VFdDtGVG/mr7mUtSKngbeNZn8eZhIhECgzithZMlOto5xo7Da8rV8JGFcvbKl5V8vTksN16JAy2bUTg0/NjjqntIhbtb1l5ZOnW4Fp+3mOxF7TRDiSt1Za/QBNJIuvky8rcBOz79QusWuKfaKv6bhEGf0m/mp1nKAGiUo3aO6y1f2IwrACSHnfKd5/lXlOfRji3zZ9+rIri5pSrvAu8YHcrRdWa13tA8PM91cLNF3mjMXsnLrs5iNBaekVyh95i3CbulGL01QoN6tG7Sz9rWwcWzSv9bCvRyaO5n7+59UAJ936hei4em9XK9ru3TjjN2ygDDAmydqPzJWq8ewuTajWQe6JQ5CB3mU7t2USAAvw0n41coz80+J+9tpexeif49wlLdm7FrebH/VhCp170RfJuW5wOoWLru92ADU7QRSZZINZLD2MQ6tpsD9bLvbPb+iddSnmKd5TkYHCO4Otyma/OFsm6wwQYbYFOgb7DBBlfBSEDW26D23rsSC/fu4XveDWzwWeBWJfrN8EolehVXN8ZAZeni3boz4Tin+3H/390DZgBP8zPuwh3e7e7AAM4yxmZRzJ7dxj3K/dvTlMYqm7uumWfsKC0VjvPJpGLspwMIhN20B6HcrX6cjwCQLd3V0vE0R+wB/CIbpp3clXs/7cAIeKSd7F9S+Ceewcw4zsZi1tJC8HCIaIRXBCOAHAFVP10BmGd3FoJohy7aJgAi8OlywmXa4aeHR1zmGf85Heu0A6OI+HwqeK3lqcr1KwunXnWMQKBXXgXVYc02jk1gK22IEQzPViULAzh1NsAE4BRLOqJ0JzohWZCPmqZncd6tiCmb6ul5qbEcPo7ALG1mLcujKMqDWKQjiit30weDhIuHdlJhAiEp0lVelwWPBK/w7PvzHOzes5BehDZR66B/nTvQsyV6ljyYOvo8lJfos5JW2tg3hypzszAF5ZnVjDQJO7NlOEzctoL9Vx0fTl5SdVNtOqOAINUeq5t9pZ8f56B+T+mQp9s0Su+q72mYC9d+oTxL6axK86jlNO2ay2JK6ceHEZwyAxfJQ275yM1ISO7CTyHggHT0yYoHS+mLG/jCi4vTdxt37+mWMdSEymcUcnm41LVXJ8C50GzzODDjVFMmsU2dG7qiT8Jjp9BVrfI4MF/MfeSfztEnxPFiKwszfoB3h5Lhx9Op6St/O30q+Tr4fw6PALF4cEnwK5/AAJ7OZi52rKUq4CzlZca/4icZ0qZvKU/fG95OE4AAHGNVlzG4wTGyuF5jy58NrHDV8jczcACAgumXtqCdCVvxqTcUoDobch30+OIFuOz60pnMx5dArfcn8xyA+/iNK9F93Rbmmmp8X9HBPcvND2YcMZAXaP7gVHVozfQvOy/r9SmNEmBUPxt2xUam2k94HG+1ERJcV6N8Zb6L3dkXwr7LumYRH7XJ3eeXgawdG2bx/FKEnxEGG6Fe3Qmy9msCB/heWh5dP10DK7Hy8CcUpXlnoUfIa/36YKOL9x6dtbXU+c8B+LdN91pvG1L479oS/Yr+NFpzdJXnPfguCHkj+A3ZGx8w7LHuan+1nKUeYqMqgZ2HY1GeR1WexzafDTbYYIMBbAr0DTbY4Aqwm4oi+FeZX5ZFsflu41ar+t6m9gZBwAYbvAZuUaL3vq+GvUKJ3igSbBz3nN25i6tVkceoWOYYTwhdS3TA7yrbKpXvRGFgV0BGsN8/p614NW0QYf2fIvBE6Y70EyCuhQMCkxUv4hEBTIw7ZvxiFRyWXzAcDV01mhcefAeKIpVcHOp/zxbvDlGMONOM5zDhfppKWhWYFu1UyaNhhW7nTxjjqSJdIRjo0mgtgS+k0sQIbXJDm/65wN+H8kl7kKFXLKp+Kpm0nYesUrWPzPX8KEpxFqGA1kN7cb5zfU7CwijjlVIaooDstl3GMvfysWVROZgrG0m6bCWcf1k2+0ZYX7mTFGs3FQhE29GsEGEJpPxg04aObn6MVHzNxHR9zX0FGrXsoDygZTmN0tsJWsh861/tySZrrr6UH9PBbFxmse4u8bKVWaNAh7FAs+GuTaLJtylXXbfCR1y5Wa+ZZgSipC8188oJxWlEOxMkmtR3twcRk4XMz3ngAvVi6JZ9Dpgu1Lfa0cMq4sGhsvplMCdF4Ox44gFAxIyTCKPvK52ECvqlLxt3+Gu9v4Jm4ssUyCGqYCetM/XqyZ22Qi1wt3ONSdZ9H4V3KyANkPtWoUWLz+W/xINHeRLjp3ePOYufn39L+V06Y20yr7Gkb1mOYySvAb8U8FOUr9dSXS1crox3DVzwSgnNDMjBR/AZSYkO4HleSvQ7wisJ16zZBvNWFcnNiwDaw3sFnZ2nKkzmQBuZcc56kG0wdzTl8p6OqqLoNzuH9OrFLSnfU7qTOTP8Hq0WgDBeM+QywaxZV8ZndXjwlWN5mP6I1pV7Z2+1lL+bN9uPrwFLp0ekjekXAEt6wNSPl5vOCnvIrtrel/Rr8Or2Xpu/O2MKmidV5U5RuPTtSonucAagHHLU8Ds0hx6agklefwrAv62C/iXKcx1j9lU3D2TqwC7ONwrUPKxFHNCD23gr8H1YnjtGkdemfh9L8mRmxyumgGWw8/K4aH2PczadrssZxbtQdJbnMhfbQ88bbLDBBiuwKdA32GCDK8BvTKxp2GjH3woa628jYcYGG3xmuPVOdA8j2dxw0+A+5ld5sJ+tEp2BRnFun7PFCgMR+J/5Ce9BeD/dYwbwHI94DHeAqDJ22IHB2RJ9CkltF0WwPs8XhLDDjiYR06X8gmyP7qek6n4WS/R5PmMGxBIdgFii74U/PM2n9D4lm8c7SvHmKYkf/n5RAURSz6jF1H/v7iXnJF2Pe8YdgOP5Gb9kAaARKHBIm6FsWd3hJZm+VAT0XZazxsMMzX00lOgcIx7y8QUVdJiyW2WQ38PrpyzAkwh3+/R8viQZzH6X+svJl29lI+jlN1UVfX3NswqKQShu2ikJ+7VfAsb9udZPKnaSeltLdFvvnaC3Fp0W8l3rUg4dA1HHixsneaz0BLtaDy7PFMqBlIjSV4LUl+Q3ihAsJIvF9EmFVyHFCyQbd3FgbbW3ZDTBuT+Yz1a5qr+sak0ud6r2rMvVXSzDxDF5WyGB5Tkld1c2S09DN/u9EURqvKQItfdnl74p64glQYvvw3qSpxEQSr56oMFaC3llnMOZis31x66m3Y0p7TY2rSomKwty/Y2ohZsSng841G3dbSMlPdv6at/VMthfV9dqCtJWsSJlqr7XlbW/9Xi6ADhD7x+POX0hAUu1GJEvYvVRF7DMBOINRdpAncX7bkIo/eyQWaD21zpmXV5uu88Q1tawNShNl+8/74Al78Bz+nL6QX/NRTS8eSSUrHqBO85z7fLcxSMfnucDV7ZrgKziVz2bmBMTExVUPYPxKX3kT66AXD0MynRlS1zdYA6OnilJXdXJwIFejvurgpdXkmR81xh6nKOXl52TFCG10ao1g/nWvBuXQY0CfTD+mjHmI7n5pAp383sDAXgncT8yKqVpf0JdKN91vPCPCUv9oQcvrdcaPS2jekvrzZXyVne6LCW3GxB5z3seAqizeW5IazYz2m9e3U1o0L97hbHluCZjXbvK+p+5rCMJojyXPQDu2rTvZc/wydAMAN4F4D92gn+t5fkAlty5f5Nzx42daci7NlgH7fvyXIVRHe/NgNth3F2ikRviks5ex2MPneud51Hc7zUH0IGtn2ywwQZrsCnQN9hggxeAESToPUHsF1J+42J3WH63tS1YNvjCoEr0NZnK6HsvPId5K/ROgvyqY8l8vlqJLnEl4TwzMCWlrU7ux3hBEEEz5f9lN9K5BzzGGTwFEaKXXYvejduDCBZVcbkJ147+CUA0wk0N/1DlT5h2+3QyGFSJldSlMCjgAwO/2HtdUSMlkBgzDoTOeRPY4T+1Xsh87tV8tHGU5+iDTPup0tTj9bqerLBOsAsTZmbwDmkDOE1Cg47G+VqlRxN/lMi33kDACxoL6ABkLWiWKUmvpOq1RW1ljqbPF4WjcUjNWo7SztSUq/SfRqXGppwwbn3VMh2yIVeFrdSH9cK1EECRxEo3uraQMA6y90+4S1dmkTUa63MJY82XY903jGu6ojxn91fwWzK0TW5HMDpjoje3WwGLQ0U+wPaj5Mo0N6fniUtgZZK+jMwlmEtYg9PyUlu94RCw/cPS1dA8C2O4Tscuvv5k6wiDp1fPbqUdLu1/ZN6Fe5I82fR+RBcrkpJpjqM0lYE6cbE2b1y223Lmaot1vtCw2G6J1wBSb+IOl/ZrrZS37Bc4QPWNpQGzwxD0wYgCmziztglFBJ1LmPFurzNrmRGjMPs4q8KMUpuSufbE9r/AxRq8asZ6HfA/p0+o2rd60Htn3QDwCgbrKSAfPJO4O19r6vx2qNezymyS2LTKe6mmQ8UPHN5mmumUJc5Fib7CLhSmd3rfhzHIj4Y2T74AMOOe+3W/Cm6dkA2cGDgorW72E/91wEvJChi2yK7bjRZ0Pk9GPQnZ9MjfWHhqHnbywGxXEMrPlVfZw0KW/9t8gG7f6CrLXVw/1/Tgtwi8k/XQO0pKdFt/T57REg+88n0FmmYYrNHfDOzd4vXcNyhQAbN2fLtCSv+qeMg194b3sIz69BIuNvc6D+aJnIPPcZAPu3cf3ytzXwPNvOLLBDMetP3qAwrVKNf41dVXVMo8SaTIZq3fKcN76cdeef4+mPvQ20ODN0P3oKvpo9/Dnejdg032c11pzmvuETHGRMoHIW+lYyWX+Eob4ZquWo0HV8+FaXeIh+34cf0345N5jACSq+G4Q2POc7AktvuvvJ+P5jA62jw32GCDDQawKdA32GCDF4DZpHQXSnZB5TcdfhPAnecNNviCsLbYv2UzkOGtleg2jRFGu83Hf+YZD1OK/j7c4QLGMZ5BIWCfp/wJEeluVSIGTUkBcMAeqBQryaZO7aijFOROLc4FnueTWKLvc3hEslhnFIt1xfsgluy7KVlUXy7JZJlF6XCSy7n32BmBB+NhJ8Kw83Ny6Z7vdEwbKsRU4rvdhAjgHO3d6VZY19sYm02bZ0OVxAWDCAD2Ew5hwulUTKsJhL/cvwMB+MfzJ5T761Hn1ZOpadsGAMy4PBmXgQzgfETeUFbF6tT1GvAbVqusqT5YIZWFgFo7S/U7OMVRi/l7wXsSXGfU4Itu7x+07RFRhILVvSJcyk4mPrSX1+1ZZWc31NVJe7P5VqUxBdnEa3kikiV66qMMKni88JvcO7QuRoCj1stWEJCf0X+3f8ZNdCUW5mQfbmrlqECGhJZe1MaB1g+lX1uaNNO+bRsutNB2XePHFpcNNyRm5ZPGLbo/BpSa1qiAe8NF+w6fjZCHkV0mZJoDQ0tzK8DRvmnjK1/vWf3nvmxpZOeMWOpJEP4Rq6I39YZV+vTd6Fs37gx7hEpHmycWN2HFEj2FPxklei4giSDMptOxEOe6ZAzsOOAiCuSJi0Jxp4psxCxIZcxgRBwNc7lHmneeUO4RV/f60ZfPtsHobm9T2zwOF2H03bTpNZDHmZYN6B2KM4O7frk0H1MMPTxgfeI/LygAjEOqn+7TmidavHLmqFhSGxopypHXkWZO8sBtxA7vIDuUdGVjSXVN+2ZeC1QnvRrmwYNngZOre3cR0MscSO5drlSiX2Wt2SvH1Qn+MGDZKgBHSvYBfQw69xi+55d8taFazIGGxRler2Om3xcSb245Zrds1bN/N/AnU8//mG8371++FLywYF+0C76lbKJX3ycAD/jcbty9crETQ37LIKqT+PVfwPV0eaMOmNeOS9mQ+TMgg7T2iGS+6dpK2Stx0XuTRfJsnpHmgo+FZvn3LZXnq6D7V5nU7OT2lt33q4XBHLDRZgx5PoQjXcCi8vy1sITO7Bey7EPlP3aMMszBNobec87WGt0rz4cbyw022GCDGjYF+gYbbPBCMAuOLHhKqxi/Tyv7HRsPaFeuo/ANbofX0vA7W0Cuydh631fDRkp0lIBK8kft8LCKmJ5CvfnG+Hj6hMf9A3ZE2IHwLAI9MuhV9JHUIsZ616Cmhd1lT06pdp9Lo9tuU4Lmr3t/qJCHKjxaFjKIPogA+xcyJRHhyT5MuIBxVoVSU1hyAgalndss9vZTvBBhZrmPt2zbSn11wycB1krACuYtaiufIioCHY3XNdf25X2hhKBK1nQ493sLDPqIWHm1BgZe2WDCvTVj3gjbcaJuxG3/qoXXuf9r+srFuhlbVopeCdfF7SMFk7VVsCsOUzZKQrVaFqh10h8ueUEF8ib/XCaNZ77Zvw6kYnHdrKWG1VPur4uKHitQ6bQL+f5j8K3x3qpI9ZjV/1MWVKHmnL+MwB4phAa1nLhWaigfTGh2AC65LKw47Bi2ZbW/ucnYhJm2g8HBnK4BALKFNsDuzmw7WOw4iRUuAoGCVZITTgDumoWa/rSK8IRV8RUi96zWPagy/EktOW0bmjJkXMyYecYjp2cSeu1C4qEXnmt+wMv5XwdLfNILETu8cGgJasfpYNz4udwGVEkc/muqXHmMXanftQrXNfCklHm5Upr7Qwo7Wz4uSvlekaorJaSC0fJWe2iqeRwUcgAvIskC7tMb0fgmEJ71LQN3VrC5S2i/8L2gN4413MzFkrRpuepwFEqa3L/tn8lDn0nida8MWQkYzZd2HflBwn4ZIh3gWPu+tA5YAr++vjX9S6BnhW6BFl+7nCP3hXotMsLdTrPaJ+yHJ9wMCwrxvrL8et5T9mFscD0ACLB3QHctfpfK+Jo5Ji8tO4r75tCb+l/PEdq5tFpPyvvEJW7UA5MHgI5I/ehY5/tIfeV5hs+lPC99jyBefJRAVokOvN28/nvA57LgrtbOJg92K0mzPFu9+/xrpvNVQO3Ttc3TEx80ccyecchSRUaQFeckN6vVbah75XRchs1wt/stOy/r3ubzjNYNNtjg24JNgb7BBht8BlhaVW1LlC8Dr6HxlxBs/AHA34U+knG/Cj4K7ncLQi/N1xdg4Z3dRtkog39lBs5PoN0d9mHC45TubHuKpyTwUDe8Yoke5PcswuggCsc5nkFEmGgPADjHZMWnLuEnOaqv2V/mJKQNYqE+I50APojF+cwRl3gRi3TGNCULzjAFgEnuYmeoUPxZ8D5o+edjkq0Hkn0Q44MqpkHJKh3AOc44M3A3hVSvWWnk6D4SMOT9VBEilTQYD61YNm4A8AzGPYCdaAPe3d/jOM+4nFUwowIP1Hs5mzWUHB0Bqi9HvgPex3shz22s9rVAell5rL+RuCtX7Uel5O0ItVSZoBcdK1wj68+CDkPH8hHp7nGlr941KQJN85eM2n05dQOveHvjkE0fsUJyb63v77hMbsvVQjhHkzrVv+qGLrbfq72/FwpI29hiWfroYYU6tAPqbr9vxd8XjhrBHcg1j8nRXmVQKRJexoArQW5VKc50I6ZamEIuPlkEZIL03Vt+niWtjoczshcG26eq8Wfbjksb+XYiZEV1Io/0hZ6M1uYzJJ9tF0ugVLZSBP2/vrRDY8TOWGPMxspcxmW0sdLTg7x9AorwC4N2a4RcPk5vXK6DWp+/Ht4Ax0CBlK91qDvGDdmPRrYTMt4Mvf5jP9Ho6wAXN4/XQzNo264QSsCcvVCYfqV6GNVdeR71lnDKGSzAwvdn8+1+HK2CNQVKb25YhM9AlzcDHSuhWUqvltrSwc5Vhm7cS+Dn43wwqpqcyzuZMFtGu9ZrCut5wEpteizlT1SWIWeL42vf511bflV+2jR12j4mS6fUMazi6HWj4Rbr7S8Fnfp2FJhE9PvpColg91glHIZ/e+V5FaHzKxDkLzIwn8w4fja/gkevRMgo7CBW+BKW5x50TV3zr+8e8lrya+d5vyP4/d/vkDcRlcM92fLcrzvNvCu8ivTdXpfV/OWMNthggw0WYVOgb7DBBq8Eu/BgANEZU4YsqmcTOsZ1y6K/F9cLh7/XBdFb1HupLdbwj9L68BGeL9RutyjRe9+uDcNH1Ep0t2DPaZwipLE8t8jl2Z82J8KvDOByxLvdHaYwiXxPRiBl22/jfVXHaG35XawfLZT8swU5jDzRfIXJI1DALky4xFlyJMlPLHgrzS9ANIGIoYIm6yytAAAgAElEQVSrMBE4sijQGVEMEXe7HSJmfJjT5mgXdulgAE2IPCOKslIV7I1imDvmbnazyEWgVFe/4MkWAKG063mewWHCOyQuGJnxQ5jwLz6bdCgC2OyeGbXrQK9ADxKWrxNXBSs0oMBAVlTXo/Mtf1BBDJV3izT3VdsvyXVRk07c9HNlRUIAcW20Zct3E1gCBlP+Yrqf9Jmp79VZ2vnCdOrI0q6Ecl+iE7ZL3tm+lmRMVYNCNvSIwNypXKVAZzQEURzW7be1UAeQ3dOxjV+PyCxYkL7CZOdnD4Si6CNkd+Haz6hDM1ufynIdqJSG+olN/FxRlv7dU2iRkLJeWbjMa1wgMM+l3B2s2qbWCLgeltqHzMEGhmmPGck6Xe5ZzgcbyDy7Nq7apy5VWUdJ/yUfbUY5hOAHTaI9qTDV+rAWxEcG7hq6pf55QjrXorenF2WubTBHPs2A4eK4NlTledMOpk/r/e05O4vX8g3kKy4sT2cGjplJFm3+M06Z9sIGEJnTHKTUo3IvO5C+Z8w85ypofD341SwDGDiEfbLcZ2AXpM9gAoLMtLbMSNeYKJ7nOSY6RD+ugP2h0HSicrBD5/jjcXY0N4UaWcv7AxbHuRstB2oR7nbySpgNHfdhBzDjr7v3+Mf5V1cOzc/i4jqOf14si52fXgue51Cbd0+Jg4iyljBwaoMSjlFg54PlEU9yHcF9T4TT4SXV/ODnk2FBVnB7WKD7tehf03Q6mCEjqRGqw/FZ28aDuTgCA7cl1U89pjp01sg6mUg8rvhbjXqUZV10CXxH6WzXLwz8m4E/k4uHshzaA/gvAv51baPY/Kn8Zl6Ncbs1U1Ivz2sb3adNZegvYXs4yfy1cbgT1seRftP8YNfdLrlRPPctzgnp5I5R7FfZ+3eLl1B5SQIAM1/p6whFG2rWIGkCTGWWdT3hsdRHxlhvVVYQmLWz/0aMap/TxbLQoRhoD6VafObgbBevjavvnMaPjvUo+7N88NEeCOYkL1BvYB9tu9o8e8rzzmQ27HLNhDNAVfYbOZ7vj7rfrZnhahZtXn9MqJ1bpUpk9pjbERhWxE8Fjk615Xlvbl4u36ucLuhadIibl+N1kw4ZQxOtxK37OOv6rZlTS8ZpmLsC2PijKbjrdSDxPA4E0AQKIbMarrwGMMBRRmx65ihtGGeU/bHv/9QU72Uw5owbbLDBtwObAn2DDTZ4I2DzG03IHtT4Y7QL2ui++Wcb/5oyjBZ03xu8tu63tEFnQ34VzhGujhDyc8JrLdGvji8u3a9BWCnRsfAsAcYCvSj3CB8vJ0xTwvXDdA8G8FtMbujU4pxCUvikO8f1LlrGFNId5DMiJgSEsAOhWFTr3eZ30wEg4Cjvoj7CJJbsOsInJGF/DMXSHRIPIDxlBXoqQYwXCU8WAA/TXZFlEBB3Kd4pngAQ7nbJxvF0OQEE7Hc7RJow7yKYI/4seP99McKNbF1bKzMqyHsiJyjR8LyZRLm/HITj6YwjLni8ewAD+AE7gIHD4YBTvADnuc4uus2XksPLZ7KFtgh/9I7qfP7ACky80IaKQOGqfZ6JlIXC2qKiBGexup2EDrNK70qfJFWQ5OIUh9A4SeBB4u+dwGcWvN3d9lK5jbJXhdYiUIms5iaKu/Nnd9NRFF65m3hBgB4HiSCE4tVdvlmIMbaChabsJovK0o1B9k506QPZArhS1BoiGoEB62EFFY7oARGy87TyYT2EoJ9sxayreyrxlHdJv6R8wCOAEcp3EtpHxYfUZ4Lkg+ISP4VTEpw4MhXPB6V+mS+S0gUlb59eSVzdL+6jKS1PRtAqdYAoK3mq6c+x4Jy5dr8OLmWr2lt5N3IdGIwAoyxgRrRlrQRO9dwZ9ZABA5E4taYRfB0rIph1GZHo/dI4Jk4KdU87PSTV8kg7XusyPoLwZPul+dWDSO8Ez45MrpzisRFOH+czAEaYornrPtF0LzNQvsrUHDo56dwnpGAiOaylxdfylstOuGq/khXl+uZCSgjXGJQ+5SX/+qM8HlcLNry618OEddJ2+ncf/VWTQ8ry6Qx6UMt+li6c+qz+++suLbB+Ey82T6enUp5cbDZFe+n6daXc9nRML1mV/5U0GOV/0dfOmOiibgrRx7sYZj97Vy5LeS8iujLKoM2uye+12xXvSrp56+xRbKTmihFUc2aT1mbCelCnzbkZwzovC+9nwMwjtjz+weIw8d6bhB9omdZdDyQL0au5hIRk3NLFHuCtymjo1CxDbxlfS32fqp8+EJL18EMbPnQj3w+v1gJVEUx86pWJpJ/4debR0M79eprqoRAK9Te2D4aHDFgdGeU758Oldu6LuU4c1A9OwRvEu1N99ZeUrVo3VwNM/iL0+qLlvjoI5wnuXhKUA7LW8nyEvDPOJ7NXycrzDo48dmWc/aYE9oUdWZ6TiVr2JGNw34Z9fC0eodnf+vH5VUJ7XSSAQlY5vEor8iQ2/wtaAyO+3sfiy1d4nY06wNWpzKrb+MV4vb555URLtN7fKr6jq2CSLUMak/nobV7feTrbPagtnjm0ojQkAmgHngIQVEUue+EoczCldeeeZOU5R8wxguOc4sTaSKPs/ZfWXhtssMEGNWwK9A022OBKeOFCDHafWW9urt3Gvw4+kyDuDw2vpdlIYLGE9zbhzB8OrlWiXxvu5Dsl/CNA71xE6uBIm7+iADIbGiuwsmlynmnj9isBP3DaM4QpbRQSOsEl8YoleCuEFJEHuDoUs151+x4h1n6SA8nGaezE0AnXOgIpQrLqZhMnUFLYq+vWABL/FwEXiiBEMDM+EPJG7pd8AEHy1M1aT4CSgwzBR31BN95ElXojgLCjAKYdziSNo/XNG0muyeDDh2Vym9NcBy+gewkstXxvUFQS1o6iaYDXCnqq+qvCS4WIXijhy2YFjDrf2IGifzbMCg2KVJvy+OPSDr45rBAAPcsoRhkBKzwyCxu07EbwwKkPE4sSvooDE9cJ57pN7yugjypU6NC4IheJgCoJN4pVguCT8lgvFZnGVLcFkaqIldY9nmjXEHW56gMJOn68oJAxIn2xhlYe4PFdUCzPLW5bCNtO8qvdqGv169rWlt0XDEhjQHg3RSmr4s70VEFywhWZEIiTRw7Wr7Yf2nYe9UsGkXj/zZSu+84dAogmQPgbwHiOSU1+H4rP6Yuc8nmcL/jo+yiQFefAoMs2xVwaS4zSk+24I9zp3MGMZ63RNcLKXhM2QFBFLdk5Kidg81zSkAkbum9fLGLn49LEfBPua4GbbCvKk7VudGVcK1+dRZ3W3K6wk/n/MhdFy90uXUNzvFyKl5i1+vaa6SpYqcRaG1ZC5gVcz5eBFfqLM38F2En7d4KeEjx9wFWda4nWi/DijoIyby/h7nV4TpbnHojKQcpB1yBRjiyX1vJhy5nWoTubePLrnLVG8qGy6cbCAEgW3w+oKk8ryIZ9guvvfo/SS9coyhcLO4buISBbodEkZeMQmjHbZE8APxhyaU8g4eOlpZkZ7PcucLSBruu03Tt939Mz13epboT6eh3uxPX8SeagYHhDhDvk6AhCSHeeZ9SdNfLNbtvX1l79otyE+3Ox/N8TevRYqGcj2zB8JXXVPoFLNNOfRmu+NUKvrS/Z8ZTXm0P3MpHfVcaLej/skvs1nE3FVEZgU4Vevp3FYGZxZr9oPGm1HLC0TbpBi4vlebY4X5qnr2i/Yfk75dhggw2+adgU6BtssMEXgG1RscE3BNcKeofpr1WiL2RaKdH1mVEUfEmIX5TojAvN2IcJH6a75H0uHgEQotyvexTJ24EOSJboKgwIsJYGF1EJ76a0hDip5fmUyjNL3B1UkK2ql7o+h6mu6r3cla62ySdJp/A0n5KoRO5O32MCAbib7kBEmJFOHd9Pd2CJDwAP0wEBATMIkRjTboeIiHm+4AMDzIRfK0HagsCmEgI6KWRvs0mMfx6fAAL+enhABPAeExAm/D1cAJqAi3XFjBYnA1kDbYvY8yJroRhP1gi9HG8Njy9LU0n5zZbiGjn7mDebYENb39ezq1srhEMSclX1baRuub8PJSuMgoAsYaiOB6C+JqHbqKU98pgLSanfFXqYvHL1F+ZEoyxP8dn8JoEAx8696DBxLI0YQvvOveursCRwMZ1R81DlN0Nc39uoqsbsCWyNinOJNt0S2vqatNayTwQr43pHGX5GQKquAckiMLg1O73znM6Cx9+z3ctY09g4FqfJ18dTNpG7qBE6u24bRC4cmBGJ0i/scSm9zsNCLRwHWxZR6KwY7qAHlUhIw5gx41nINL6yueShivM8zyzOsXUfZ4j1eSUga12qewamfTGoRR4BtfekQmiGGz/gulkAEcrqGC3XJTDLnKbfIyPfac91VWPGzXi3P4AJmI3VzPGcrIrPZ2DapVTnWCyN74Js67WzE1oX8D1G/qol+gsXQ50hcR3apUn3irLo9Rln09c82hfRQwatNUiu4Faki4PgCnwdAt8H4Olaq7qXwOfA+VLoze8del7dfUd1W5xYXgYjdFrWdwH4GIH38j6j6BD1ih9lCxpuz1a9xI37NwVrY2sFrMLNKs8XD2F01povgrQGXM1juGTzGwldN4T6ExjAVNae+r9Wl9P8WWbMcmi4VYQTHPLy3e5ll+hXre+VftZl+7U0lbWcJo0M8BmIxotKNUUavATgV/ti41y7kdrgzaE3h78J2I7Q2wv6uP79FTzmVbAyHvw+tTfuhgp8qr+7fW8SZXCLYji2hU6DrXbe368dZhI+xbq+ZjnYk2nxPc93G2ywwVvCpkDfYIMNrgS/iOwtKpfCvLMvmLerJWcbbPD5wFuhL0FP/nJtGIBFJboNG7ly9++rSnTCR7kTfR+mrFslsNyfVTKZK+WDt5llJDvqSqSS4y67prYxx9VprfZMPNISlZSqEApQS3qJqvs8iT2JkielDqJXSJE+MKU70lUzlS1MPb9bqo0L042kfI6IQjmhaTTWChWKDj5rFV8pojswUXIZHeS3Qaf9ZKFKIxiRo9Im6YZaBFXGhZ66fGZ1BX6VUKLgZrtpt8I5f6BE4/gy5jx0XJl2zmbIRiCqyQjils7VMWchYsTs1UHKmvtYHm3I6knT/3w5OWds20meVVloBJtFQNCRJPXcpS5Nsbmf2YiWNuaPCMxGS26V6FreXH1yngOU5kaBaS3TSSScVL51rYSNwCantfnaOnX7fE+4onc5XyQGDwRK2hamTaJrt6YdTZ75nl1XfpjxDoiLQiT39KY6RXkv/TEY+hKJQVUEKCAw5/4JShZjJKcMesNZ5xLmegSTwUEgHMG4FwyW5LsQcPIuEzOWQo93PX7XtCenK0OqwyUqHAPmCOS75oV2RGkmC0Cmy3vcQ2n/UU7sHMA4VatT82zHWa+b+DR5GJLplpbHK52oyrGqqwZ+qWXwS+YBoJIg/FW8DPz9028ASHR2RzAzHh7uoB5s3sl97U+2rVTRV08VZQw34Af2iFg1Agawv9vh/Hypo9jfHoouDOZ8Xa9NOunLr15r8mJivwT86uoLZfVieE0ZX1CAnGQ4sB3cUj7fsVY6WjM3CLhq0Ttzzco7SjcQxZWy0eC5ybjXX75gH+rBkjWmX0vUH5fD7eZA19Td+L3k1EFL5duoSBaYkTabT508+gmX72K2a1bOr+xIZLt8OhQWTBrDfPOBS72QS+dBKksTW5S8djN0dCTN01/uWmbd7uhfVoFuXgXEC5WuBQ3dy6LIFc7RLSDx57xmO6f1hFwVVq1BbdL3clUV9fL4oyvPzRoRWgfUa8yvCaRj99dQWAy9Cn11IHkU6QpE3lPVmlX58BD2jZDb9RW4CAvd2g9qv090d8e7ZXUJH/CMMtgBiMt2e0CYWbqAXZ8neQojZiU6i8e2rgewqnu8klYbbLDBdwWbAn2DDTZ4BSwvX9t4I/Crq7cSpHwpCeQG3yQMBbhvhOfa8PzOqBTqPuJQiQ78SpyV6I+iRP8h3AGQO9GNcurCSbEQQjqRX07wpryStSFwnNNd6rtpb0rDYhcOPMdTNZTvxMJcLda15LOJxFDX68Bh2gMgzJQUjnuRrp/FUp4xgYGcn9/r3YUDCMBFarAHYQc1xCHchWSpfuYzAMKHOVmh/kKWzrohdBtEW4G8gbTfjGBfHv95fsZ+mnA+z8BE+Ov9A0Ik/O34W2qni+AnlPazoOG6MVXZlpbDWhpOhHC4Q5wvwHHuyEGdALGqDwZg6qkCM4Jor2wh5/p9SvF51nvERVhHnm5uMGhwXwdXR8wbeQwFkCV6zOOizQw1HSoBbo9Atvxi8myVypWASujAQLbX7RU1FgtBq2jM5bAu6ZzVrato3YdXwbfD4N32H6AIQZq71OuiMXFynxwqAktf0qsMdnV+WWhi6+f7ib0DnSty5+iMWjDV0IXbR7KavQENq3bYJ+U5Hcu79iF20ihrrewzDqYeuexIAm3WQ0rk4ghd1epfDjEESgLngHTHd0rFpU1qgpiScCmmFk1lZlJfAmES5f8zkiW6LfAdAg6B8L8yT7wz7foQ7nEvsZ/m55xHyobwbkoK2TObwZ+V5yjW3kLDX0TR/eH/Z+9dm+PYcTbBB8wsSb60O3re6Jj9/79uZ3rf3elzLFuqqiT2AwASRJJZVZJsy6cTEVJlMnkB7yBAAA3S1u2MtOEHcz0Fw5pk2n4l29p4TL3rXi7aauyQyz70fQlvMZrS1GihN9lfAnehoJvy2qXB4BryvFzo2ChjxCSOm7hrisMHHRPHJ6x6jeL4bR+4//XHgwk47VIbcMU+28tnWvvvvBoY71/A81rw+/NL018T9po8r8lvI07PZDuAjaVtnbdZCUohfPMg8hPny7XQ1UiMZ/9enWjj2zi4Hy/SQBeKjhm8tFlHlwhHYe6XjU4jFylq0xMA+gC4a9bywxBLSy6/5pJoaAOPitFb0cJ5FJzrO9n+aCRSvLzahUBXlmdfV1aLDEpH5xPAd/r5+3qf9Nk8Gh7xMPW7rK2McuHS3pvf3wVuWedfsyfglU3D7Vy7RjDuL4K/FlY0JsZ5987Oq3k3KMN4TrYOxLNpuXAb0hZ3DnawWCEPEZ5r3JTQTkg3fst5Sqyz5ZwBzsjwZ+Xtquywww47XAu7AH2HHXa4EXoHGd54X1Mt5atpU62Yhpc4TFvl7bDDK+BaX+ijb6Oh2M3nEeBPrfDHCzbJPfj3kT/05t3SGWOeRIDFhG/nI+6mCR+nO8doNk30Wgkz7ssr5MWvsQFpnEbWs2qs9WpQ45mvWML6eMQlTk1LzZOFZxe3KOZo7kC16Ox9r4t2pQgoSMv7whBt9NIUI4GDq2lhIsUauoMgM045w26ly1d7iAddYFOIbul6S6y+z5RwTBM2/fLF/C5CaItY3WLGsWQOrxlax5LZE1W/ziUDa88Le4DfMyi8x4i9LJo55wMYrdpOZaKt50GYl4BjsLl5abi5CWKjuRk2heegc8nFqzwvNevemPDsVXCjMyMzknzhfm0xZqrP0hiwFNrcwjr9VrrJzWFqk8ofuWyt7A5jp5TgVgQzGbhR/5YRW/tV4pqw3I5F5/Z7E9eNKa/dwEfAzImD5SJEWY8zWkEst78+/1zXbK1czbdooLt2KVOK1d2Bpc/IpfEzklrWqGntn2+rtGpHsVxOJdA8V4g5eLsPkfHs5sYdSIXWGQ8T4fvC+Iq67n1wJX5FtUQsdQl9x+4PomFSkQH+0Mcvrl9IEe0Kt6k+kOZ4B+BYtLNs3rox5ecf0Ggo1SWA2/EQ/tf62HdbE9q8alke1/XYZtcn6zio42AEV633Dl5CXnP4/Qkk+tnmWSLxE87A8bg4XOxyk1+fHUScr4Wr4vfPRC34iza/i3DmPUBs19jWji7upV11y4V+6n6Ogyf8di0HjQagm9+fr5g4NlSuEahnAH+nunh2287C455+68R4AxgJfkzgqv8dVdX5BUTLWA945RwV4l21RtE63lCgn92761sCbrj90BZdtihPZ1GlmxoU4hnFC6IC/gSAPujvFPYnq43fV9q282QdIDsae21UAooLpdWeQO1rrHQZi3oydf6QZd/W7+XcZPFdu09GiwHgM+p+/71GL3i5/YFI1uLmcqgr4y20hn8UlOn7jnHchC4RNIjD3Wp2LVfd8F0j3fg90ncWb5D+PfXTCAcODyvXaRdwL8tFZ5b76WoPiUA0AWQXdyrdb8QyKT3NnOXMlRcwL1j7Px/1wzto7x122OG3gl2AvsMOO7wStjhjI8KkF+6PXnwhbi/ttXF32OEC3GLK/RYY8e5ujs/YFKL7Q70zt/uVCZ9VeHtcFmQc8TDd4W+qif01P4OIQJTAzDhn8UFOSd5nOiAj45SPzUwz0+kiRCecRc0F90lu9pvP9Kfl2OD3bJroSQXogdcpvthVUICqqW6a6Gf9YhrxSeNZuGmmmwtIy967RiYA90jgNOGJj+Wc9XcAnBl/eEGWMY4KnvpijCd2Yd0+A7Bk/I+HBxAI/8/TNyAD/+PhIwjAfz99Q71pzcBpaRCn+zuxyv79WMMjf9gqCOB4PgHLGXi4A/IZOOY2nqWdNfDsA3swOPReghxbPNdfr4lepEehHONZRT6kM4e8hfPQrUBhZjMKU5F9ONAKMWueLkLAPYSXYCpBxA7npg+d52kOPpxNmMdOEFszr0yHiIf/vCrQixdH9WuQcHXxY94n9cxEF2fFcA35mv9Ny8PHXTFbIiM/1pfXYQxtt8CMIwA4ubzdc1cAqZkVbWhuwzMDPMPMCQKsFhR6aQLuHm/fj8wogm+LQqFtCxouP/fdLEgnhqzxMKahjcTKkCbN3vaOpBrt4k9QilgKtixyfTLnBPJ7RMIHkIq6sw6dyvD2VGPkbXXvEmlZzWWgzHLRieXSU4mvmvZzmnWEEz5iAoPxnZShhlxyvMMBJkSH1kCyc/7QCci8lHXgWf2hf4AIGRJsbjJmDgICqNCh9KWUfS5xGHdhoDEY//fzY1irGdWFAsC2nVoLMXBMOn6zCRoAJBUYZMf8v2bdjmBpdEP95111QfO/n7+GoVwn/bdvT2DO+PDxYTvz1RI02ks7cD4Dc4elEedFuSxG7fceDF2AvCVs5NnZCi+meVG8H5X+J4FnrJfHzh7dRvCJQ/it9Y7xO+9DEmUrLavW+QZ9Y1a2gUpaxSwX1jiXDh+9dhnhxyHeTwI3J+XU0F74Ii98KeERx+8Af0DrXii08yUtUE8Pxrir9yB0LcNR1+hb1xUi2ZPBrXIlUevCxfdREY4ngFOYIxovEUAPGm+q9SjzKxwwrEy9+FiysGoyt26qbE9Ijn6MqPpndn8FETLiJCTw+HEbX25J1z5jUjrtXuN9q3XR9IUuacI7ZcY470H4+ZeD0UDZiPsu+mG4gf+con/Y/j2o15b2vJ+yV7nL0HUFCUSprGtttWzeO5qeFxGgZyc43xgLN1CYO+ywww4FdgH6Djvs8AroHVqANcGbO+EeriUyd1Lnrw+Bm/4ieINDixeib52DRt+uDt/QQi+vGtZ8YgyF6HFaFpPkJkSX+OdlwROO+Dwp+74I28nJwZQFRSakTl2L2sK78zrkI6jckRLbzA8bU8dVi4Dik72KeuwbrXK1nIU1VuP781s0OF4002kCE2NZloLHF3htdD1uNacux6Qp7d4Zv65/njjjwbQwwHjijHtr+yLcsbxrecwZizWO106nNnqtHAFpwpQSFp7Q1rxpsNAiN8y/UXQGqknz+IHqbxFqOqFGzLPHs3VxRudjGjJBybWzy4z8N4uaheEY9znqVTyU1xOUFoZnO8fbkd1Lb++RqxiYFitekxTIPj8fx8aS9+votegBlHYq+aHpwoBk/Yn+/+D6t2HOUs2qDG/FKZhq7V6G4IpaZWx24uXyrwUKgnWXcbFOX9ZhbtvBl8esjFnTNHf9ZAydBs+Ij8t/NZS4DcvqhsDa2NooUzUB74w8gBhZLyl4dj6BdW1XpwIEEUpQO0iky0T7OyuOZbly/cyl3TK+Q+OXi1zeconEzAxkZvwbhC827pjx9Wxm3RnEufa7rrN/mKTIkNA9jeBHk+4x7LTuXZ2G4MdOc+nBL0T1WarvG8Q/x/i48jkGx7nko8d1IjwP070CYvPFNRqoc0LDvn/7Xj3+NpfSCNVKiV/kNZ4+nr6JK4CGc7Gqm1sPI06lHW2/6VTk1W0T107UCefHVe422GsLH8AZeImm683Q3RBuSPua+o8GpH2L7z7eS3G2LEbz29bsOHevnJANrQ84olwE4lvGCQhVsD60/B/xvtQuP2p8Wvad/KN58fitCaLB7ypTgJ4A/oC2nvp8UXh+I428Sm9r0AuTN+czl1UxiQw09BUlFF/nKQmNULre1YM+VnI4idZnXTZ8G/lbGtYH1DRb8T+ckoy/j2pp6pFQbICF/aHBxkiBVR8G4r8J9zm498TuEq7RaJauP4nq1kDuxa/Zu2WQdw8juslHuUrz3B4Gc5bjmLuUz4Xvr9yOKrgxe9WaFt6HbdOeXWtQOFhurs2DMJ/fysS7X/TcOsQMEZyzXtb3a8u187RDe+6www47DGAXoO+www6vhM4BdPX9CkKseY+HtVF5PqyX3w6/J7wlI+0nwIgHdzVv7hvAH1uGWXeM03aeDfPYnpVZ0wjR1SIkA+dlwVfTRKc7MAFf+QiAkFQTOqtP5jOd0BhvL3xq6a/zImaQD+oT/YQTmBl3JAL6RRNVYYbmxgAvjIfpHgsyFizwlZz12cRcx+w1Rg0Xwl2ScqeioZ5hQnYvbI8KOyZjulef6ss0g8Hiq50ZX7RN/yjMd6BqM9g/roe+nun1Ghnfnp9U54EBJHx7sncNUl+p9w+iIfH89KQVVzPTB9UOOZ5aJpgVacyiZ2mn5azCu5mEeRY1uVcWJm9kEDbaOAj15zpmGxOLJL7RZwBHO+SbxiTkQoWpzUZUypZg6VYItW9D/7jGMLVQRjVv6dpUheg1H4kbhYHrCx2DNuwxdkwYWu5mME8AACAASURBVLIPaVfCuMAY0To0SwiMQeQYCha5rA2lkn0mC1e9YfZCr2vWPMcNreb3kptDjuFbkmYNUnyctlFPeF56imtdCLxqP+61qUO6+Ohc5U8lX1ZN8CZaYdK4trQ2N+TUBHsxM7+6WMEungu2CpL7TJbemEmd9b4nRGeAKat1eBGQJ6IqPCez4xH/xBz7ydoJVT+bGcjESGWaSri4Yc8gIiycsWRWeaHgN1HG/z49u46R8D8YKkRv+wbEVeDIKFrnpc+LJYqa1oTo1Otz12S+qeNzCbnIZC2TrZNJmK/ND7fLzzBrN+auRGVIEt+wrL8YVmvDqA177dWLFvbcM+G/Pv8NAPDfX/+s8U5eUhjbzOaYW2x+BDR7icMFCPtk5/tKEHsN9BbiXh4Z+H5t3q9pnJ8xwC5A2X9i22xtWgh9cgN0+20U1kvrwPycf+NOci7jl4BC5zXRetUzYXvvDsXfCfhzY27eSgv+KLB6R/nLyoR7oP0K7dCGNmtBw3fwtMkQGWy3C9do18Al4daqdK0V2VnKyiMRkHtT7vacJlASbc6cIbT1ytSLmmxPqvFJCZQkvUcx925kkMPL6Ly8AMsidP0E4M8MTIIDZ7+Hu/0drlXLdCVXTHLT2/Z96Y/SFp62Tazaq1wvDkCtXvG3kqvVrHn9NAGPXErgcmLMbnoEYmLXRP/BcGleAnFeuqv6t8NV3biR92jL+dFA4eFWAXrUJl+N535+zXo7dGkxCg9B5XxS8yrnOD1zETKomGlXs+1lbdkWnren9bhf/4pO22GHHX4X2AXoO+ywwxvA1mHbEyY+XjwJj8DnGZkhO+zwA+FaLfSt7yP+5iruhhC9POqDf1+ZwnMHn00hejXnHjXRzRTvhBmLMQwAOdAUFCqDLyOrv1v5WA+shNZPncGY+SQa7nnY1JdmvbE4avwiqijfK0Ok8hSLoiaq7/daZ8nlCwh/FAGaY+qXdzu4OWybQ2gHWd/P4fxffLnGdS9ntas8gFhOArAoc23FNAvxCw5vzDgtGrRuDC9aTuSYMVRj14XZ44pJ0qmA+Yle8TErE7Zh1xUNWcsr9gfD7CtI/oTqtMBFZCetbHDsN0cn1D1FJlBbxcoAdm0W8zDGQhmXgbkY8/Ma+WQzQfNpmIyMYju2NLIxLBzDpnQRV3wv8VR8nJWpzgBFs97w5/a5KUYF4JHxCZ9Br1MMH5c3uXne+NhzeTEDOEHMuVvy7OK4sjt91wxzK9NHIe9P3XB07WXtbXiWbYCwgDHpsyxRvhPq870+JxDuATxruDRHbfsFrG4JrOlJ+eEZC7PeB7JGILGi0UBt+z+aMOALwyn+S9jfGGXdqILyXGsQpm+90LAeSwzGt+N3/NkwxX2EkeUAAMR4tATsyuleWmmq5R64tGcJC9Ozdt4K/TXkDhM59yRtFyDGdW3yz3sx3f6v42Njxn2Vfmta+fo03bKx73CM28M1tFNcik1bqSlY1zr2Ye8EdkHMDdAbtN2NrhPvrXGI5Vx6RxWe++evDHx2qWw8LAASt2SaLd/2vqDeFjUCFy5siLtlthWvO3l/IhDa/aoPtUY9wuMJwIf1d+rF75XdydtfhNyE6/DvgWx9Qn1mn0dKwKSXa5P9EkSAPSFNCUQT+LyAk9+rAOBDRSfNImMmuTRqQnRDu9K9da8zirBcYuMs/ovTBOZF3EcdGHo7Vt2KcBV2kcPF9lJen1fa/mwvY8tkcAN94io8L3m6+JtHHCrC81quPwtvpX1v0FuTeBAe4F1sh9oPG31VSGRHG27V6yrNc6DS0P9pMKz3dQOCtrqr8AI28kpUTLeLcSJ/Ira1Sy1Tqe9zMdu+tDR7W/DqjcYE6g477LDDEHYB+g477PAGEDlbkSDpCYLM53G9G7omY+SUQiFdn+BZh+1k0e8Mr+m9Nzz13SJEfzFYXR8BbDCk4xQrgp2OYKrEM8GBxau/UYhumuif6YAFwBOfQZSQUpJjRm5v9B6S+Cg/56Pw6ibhzM3Q+EhIIJzQ0RgH4cMk6c0X+tNyBAg4pEMz582H+qwCPbN+fkcHMKpG+jGfVPZHWoKwdiYcqszRYXBSYeCdchQZIgyatfRPk/iGf8YZzGLa/Qt7IfoAyhIVOZoBcjhl2uFfA5dTaDdjzC0smh3RN/gIVF5wmO9wmhj4ftyOX1B3zECC+kgfRY54GtPD0pNzPq9aKRnCJGuARdgfhdj6aV1mLMfH07HfaCkBYHKyEse0K2V6ho1nMhmDrqJQhV+AZ95VNDoTk43l6IPCGImbIgU8C+6DiV8EctwyDrsXKKy+VCeX1aUwOiw/L0B3Aij2vuw1vq9DcpWKuGsZZkLcdZR+ItcV3NYhaiEX4aV9d5PDr18MAKcyNljzXpn9Zw5NzLVtGeGih4WrdnVmAEfXXqnm6esTheMRCg/Y1xtubiqCxT+2/nFN6/uQkWSKIWOiBLOlQMSKWlJ/4L7q7TpWRoM2A2XPc6sm06X5/TjlVV4ttG3xBzMSZ3wu/cmgogFn44ORtC2ICA8kvrblgCt9/k08jmM5n3XILJBLAIw/h0Lu+MLte4MTtdYe7DeHPio4xfrbmA1j+5LG9NY+dGu8a+KE6fGvZ7lCMDYTfUPe1yTuNNv2t9i3ZUFtI17Cr8eQ9RY5mkIHSCaqa9DKCsU14OI9+Dl0aU79DHiLsl+aR4+6w3rP7OZPeBtzzKE/457Rfb4CPsHt0S4XG2aexFxl3dvrUeWAV3EAY7u6fe7VhyF6sYCKlGZYm/gWaMMboqIGNQ/xNz77sq3cTp4EtD7PBZvV641a5zG56F7qm9FoaZK/aUJKE3JKqk0+Ic0JlGbQNIGOJ/CiC3YZSAfNx9Ko9idNoESOxBD/65UUyyIgZ1Yhl1mpmWCCLOJJLmFmBj4C9FXoRS70U25Nqxv9WDRJgZZmMlx6Y1NhsjZmyY91nhMAcySyWja1A7+Q7GePtnf3xnykxayBfuUavAW9PYrbb6Mh+Yqx+mawte8DACgEXaCbLpbnE4a94zXb1Fb6N29men2fXrpwf6n8Jq9+cC8ZYRK+E7mRautAOc8ywCo4zyY4HwnPe4jIc9stb7Gv7bDDDn912AXoO+ywww+GeOhYSQYupB9JUCIlN4q3w+8Hr+m/H0z8btHXo2+98NHw50eAPrlI1KZpfBXbozIJytTi9oC0ild/R5roEyxKBpHYgCwokwgLRORV+4qZg/A6Ow0JdlNWEBo3JSGDMYWvtcmokQ/1YvgDNZfyuAk37D0fMjm8qkZ6QlYzzL7tJPPwbHhcOmiyfxgMqOiaeZ6FCa+m2Svf97pT7aR+EE+9pbOX3JhZrzFtOpwrGVVY66G3V0REN+Z45/Dc8Me6ZVmskZ3TKGwpIkfHo6CN9F1E+9lbQKlqh3PkheOBscP2PQrzRuWveJBcmdp+XBiTlgG5AKEMUrJ6M6r2fWAuFw10IF5AsIeVsjnpPIdqFRCwOrI0Wt/u3cz32VrDgGiD83pMGtplTeVaVw+2fvr2bTk7bbs3+MF98yj7PgpFlvXctV3TVyHvyCxjBul6JPzolvZiAFmtaySykJpv2x3r+cZorK5q9XqbnObEnXw6Q7tBg2qkP8H4UjD3+041KU8UM7FXLsx25lpXZkYxAD7UWLHxw259V2ia3Mp1wnGOFbpQ9xEuXeFtB90R8PDldXBzVq8tu47f//7TmW7n8NAdV71Az2R3fRYFYG/VZLYOvmEXVNjK1NbN3kXG9wSvaZhLdP+IbniDDvHas938L8AnqsK6bhZufyh30X383l41KNpHPUHM+v+DgH//kEH5Q4AuWaa5PieIMNV8oftwYDxmLI71C5Wf1Ra4oiU0z0vNvSXgIrN/5IiClERzfJ6Rphk0T3JuSSTvUwJNMyhNYgT9vLid6QGyjxLMbDsRQEnOC/5SISUq1q9ke8tAVlpQsRInSJUW4iymlZkZdGRglm+UWe7PMsml4GTrI+s41/plF25N2AX9MFmTa7rFJ+okLt2tDwugpmVcGsbKetOI3PG/O/w8YKB/qe2VeQLod/YV8BbL1HuCC9U2HtBqO4xLYAlzawvpKkTiPpCSXUqFc+EUaeMc/mw/v4Ye2GGHHXZ4GewC9B122OGNYHSgj+Fj4qbvr6xXTudAuonPDju8AsxV2g/XRO/lHwpjAKub9/phKET33+y5/ooQXdKYJvr9dIfPmJEJeMxHpDThPt0jg3HKosF8zKJpeZfuwRrOTDgl9YWOWVkPLALxJP7JTYDxnFtN6LtJ9B7PfAIR4azrxQTxbV5ZPqk0BQPi+5wIz/lU+RxA8d2OJMydg3pTr7lURtwCYFFN85kOyBBN9AzgoBr10yy/X87PAAh/FNODmmHUTC+CK+7IgjsCmZEMx+AsWiP/+PQJBOD/ffzaSTCGp2/fUARaxKoRx5UxG8ufLYwqzh4nMwW60j7UVm6qFw+2xozSsMa/uP/uXk2uYcLLlaYP2gO2124idxgn/9NcAVmX6fes0pdU8WZUxhqJ1nY1D7jB6PUM0jifqcWz7RiHH4dvq9v5A6ZhM0bdOPQMQj9RCG6sOjPv9SNq5+g6s6qDL9gJroJ/zYKWmdSmVNuqx5S0YaV1ZWbRQveaS3xy62aHAVouqrjxHUmMJCOFfZyo5d88B1yZAbWUATqgmrz35VqbmdPygNMImnap471pn7IWUcOXngjI6nqAeQERYaKEZwYeXD/X/8UDeovXiG85usCxVR8fh/0DlaUL1s+kF7m0/9YmGTlkKf3TaJ6X32gpyeVVxo+++GKsycsYXCfvVKpFr5doJY3p5XcBrm3nHwqDMRDLL1Fs3Pm1vBN/WFRYEzcjB9rqGrgUL34f0oq9xezaAn94p/1ceOklPQDrBTvmbdFG8V7bljwofrwOFVBT7fQpjeP5vEU6CT6jsx+GtEbXRT9F9mx02797FuLeH5AX5r4ZqoRtU+71YVWk0ktdV+pdcDRRbzgEQmhlDcchls1GcvF3PgHTjDQdQPMBaZ6QSRxr0TyLMHw+ACmpgGoptAyrvRmCCcyhgvIuYQaaZzBS1R4vgquMqpuvRuaZQTkJTcws2qKLapwnBj6osO3PRS1yKf2U0MazS5ELO1SMX6Rhah3e6HCwnW9sP/mKlv4L9fubRvu3D2RXlpZUzgVAc9G099tms8OLYGuPpsFzHy6abu9+j/le2G8udfbPXGZXGuTUD7/0faiR784Z4PZsPGqHMh/JBXl/5wnJuY3gYoki0Mh2xitWLHKl4bdc57kPvhbhZLPDDjvsMIRdgL7DDju8IVwiLG+BDQLs6vQ77PCD4BIvrnfmGoWv8nkE+FMQoA0S9g7q1EvG2BaiQ4XoookOnDBNh6KcmXkBISHpQUeEEL5KtVC5hZxKKAtrBgsyzsiYzBR7OKuVGd/U268EViFyX7fAN0BNY3/i1VrCBT8qLpgTaNWMVTtdRGlfyITovhLsKsGrurS4NZV1sL32PXFwa0HAVT7LpyQMqJnEHPukeUwEnLxPZYeiMWF72W8W5+rf5MlYS0x7XKdO+/h8NvjNq7J6QvUhc/KKPSwwF9g//RRzhzaCHT5FYOw1YLFm6vb6sLfOrNpoxBH0fefKVWHnOv+NcV/4KvrQXDLAmOlzAZp7HzGLYnbeLUK9eJnHxgWaSwudtDVi/R1dbrD8fMNdu74DaC5R+USMOvZtrWBWrwyEWRnfst7XtZJ0PSvmYpXp1Ix5X4duX9vjqGF6HOf20xc/niwmVSY6+qkLnE/mf0Lw/7O0R/RhHzPyc6upjMbVPRhe+8WndevqpaW+lx7j14uwKvMF80en4n99+FiC/nVU9byhS48rcfNlXBV/A/8Xrg01nRMiuktXtcjRwnBLWS9POoYzdlbOW8FLO+gVHfvIre/zHvQM20xWrtsj4pZ8FYxw9/t0h477xXA9OqOGiOHfARppoq9fi7sZ/60EBXPSr6BdmvIU2NNGjGK6naa5aJmDZtHgJAKrGXciAqs/dBFWMYCPMHtKUAtVANQHulAEdcdngBIyTWAQeALASayUIcv5ENAzlFxw47yopZsM9u50PuvemGfQ1wWYZpRLhTnp7T6AkevS3FwoC/skQc4xxcpHEgF8N/4AEoD/4wM2ibkd3iuMLm3+x8Er28Do3u1DNvxCSOWSbtiEhrSorpjGV5IX/UsgXjpp/DlKz7v+AvPlinXiccFmHzk77LDDJdhPXTvssMMbwzVM0hEXWJ49S9TpfL2w3F8JPZzeQsDyHur6HnDowS2Hpxv7wvtDf0sYMbwuhuvD1nsjUPHv9lx/W3PuZ/yZF3w63ONvdIcM4DE/4w53uKc7LMQ4s5hFflZN9Id0DwB4ys9gZpyU6TepOHpC8mzqIlsQzXPCMR/BAKY0a4wFACHzgoyMqXi1Za2N/J71kJXSVNsHQCJ5z8sCEOFU+ENcNM39akSqaX7GIowbHJqSFj4j54xpFtXsZTmLYIcZf5QlzA6PXiij3DXPREu0dr155ent+7fvg4gXMlhUEp5ZcCxC8yBAtCzs7GrM24PPnq4XoHjtMoJjcglDTnAw/4SpbTdiDQv1LMJWrM27NbxfRiM0d4LhIU9zaOEhvK+k09D+93PMfWbElzWescxV2RzC9S+z+tfltoimKlTzMsZIKTu0sWmjN8wQY6JaBn4AJ53Qxtx1A6msOV4K4JkhTnsdbrhQCVKqgGRe8gmguc0GQBFiOl4K5VM73gpOVj2qBRaU/SToLMAe9dA0w0Hly9b1Ejy7dRtYmZ/0DdGMd4dab6xHMAEM+3hunlEGI2GipGtmraCZiX3WCjIY2WtduSaKovV2jMd2icxw1y+lGRhfKCORYUFIDNzRA8AZB0bR+iaXj9k1+eP0HchclwViMBP+LGXZvHK4cQd/Du+IUZqJE/J2g8PGmyCjU6udjxzz6lkzQBulCxx+Vx9Q18Ot9L33Ud5buFjcOxfpGNbtl8ItWubxU+/5ZnDztpkCoaFsfYhr0UvgyT0/vDybdwMb3XR9HqMBGReq0C9lr76xP95s/AwyuIYetLFk63o3DrXbsY/3kYAn3bfjlhebK1pYelWlHS3iC9nYdktKr8G4GjcUnnsZuQr20lJMK0hV+a1SI4Hsq+kdD4O0vRtrYPreNN8YJ0IozHAzOtOs9BCBUhJz7WkCmxY5JTAlMBFEy5xBk7q0InOUJQ65imUqgsQt+761A4HThLLrlv03mXEETc4gziI8pwzOC8Bal08EsLr3UtpEZPUMLIIfiIFsFxEWjUcg86JVW14KTFw/ZOiZwIglhiyY1j9hrP1d+6K4MWD356N26PPo7iieNXyX9abLTWvOIO6lddMtc9ulXVo/XwFvkMUart8whprnvfCVtnUsNi6MW3i9lrZ5RdqX7KeN9Z4eAlcs0GD0Xb/101ARmOsapsJzc1XRXFAuOJSJLn/OCsbactPlTdRvI1RCXgM/ZMDvsMMO7wR2AfoOO+zwA6DHWfDkiefmFrtbLg0hkjPtt1jGqGwf/3eA1xDev7LekRk4Ylxcm9drcfGCnREeL8TPC9G3mH6jb6Pzxyr+I4BPLjwyAX24MZIovOv3FwrRAeDx/IyP0z0OerA58hH3uMNEhAXk/Ou6njMNdc4gEuF5ZbMYQyYyimKzsMVCUlvhVrt100rIZQZBTbXiXzU5SKnkwjMAooRpElYRg5HSBOYFOTO+gPBH4VBqPo0p5rb8IrgbjqFLtRkNPOdXfDg29XvSw+lMopnes2A8KvaiyVVdA7zZ1F4HNpcMtFAOz40AV38zUBDmmO4CWk25yuzanMjY+G5oGDPT+tTXwR59HFe+tXseHfxDW0eTds34Gowb3zaRSUJAK/y2+O59tR+bLVkCOOlYV8ZHcUIZ85gkbk51mOakHFfLy+L7/IxBeRZNpuSF5wzwUtsjy7oDzkUDyuosGlmhfc3EJwMgM9GZ1qZimcBL6A927RTDwQDl2hVZfX5GM4RAsKag4UTr/LQeVSDi19DO/Mm51KVaVbQ+0T5kWWnPkLWa1Xc8EYnQ3GvjQoTnnICcCZg8LgDg6msMLwIopaZqfuwTktu2GExyPeqLll39ImoNXX3JGORuDTkqMsUcY4KOCRYeG5aKq29Ta7tmr7U6ZKwuOxU0qLR3I2gqfWFI+zHid7kmM3Tnb3ep3ViXLi3Nq3jDTehFUEiCcokAbg14I+Dw0GiSu0tZm+l7e4bboHrteG3bNmkczWawdXnhrcCE7D9FwH6Z+roIr0o+6kugnXu8/v7ScuMYvAUu+T03aBe99Ufmxqx1k84nY6yXITPpPjgusfsf1+0KC7qmWZotMeLv5wOH5qPhM7MIVKQaCcAMwoSq720Y26+kJ9OstqI8bdPMw2cUf+jW7kaveWC5nJuMiGHZXzK4NQSlecjdRE9zkdJ6zwCmzh6u9dWgbhNyFoFySmCSvYzPJyzMmJlBd4QpzZjmpF2cZe9GBmESf+n0SYvytI7QHo56K7QVMcslNJxlXy37MpXWb4fJBNAETlz9m388A3xWc8sM/iMDB1YzzQBNYrZdaDeWdjKN9KyD9Sz1AEO42EYuYqq0sflW5wmgZx0rDEKu8nPVeGcmcLaOs0uorhPLtuzHitsj4gXMcgbo7ONxqm4tASuNexd55fJqO9M6jCUfZh9vhMRb7k9vvP8b+DW4174vySPCD0L9Iry6+SkuKVfm22uH3jkw5N/bgoeo6dqbElj/kOQsWEy5L9yScHbGM7cReQF4AfK5rg0emXHh3fe4i7wcNujOHXbY4S8BuwB9hx12+EkQmJJFcF61buzYVrXNIhHTZ0JePgi8BF5LNV+LSyBIC6wcC18o60dQ/q9J/5q0r+3H0bh5I7hWE/1WvjQjMJq/AfgUIgUOl2ewlffO/LhKiC63fqtPdGH0POYjDvMBn9MDmICv+RmEhDu6xwLGQicw56KJnpJoVuZ8BphxwgIQcKCqaQ4Ak2qMLxCHjmUW8wJmxiGJbz4R7aVSqykceGYSH+h+vWAwsgnPYAwg0cKYUcutPs+tdQWPA5L4VHfHqSmJoWMz5X5HB4BmYRABwFk41s+zfD+eve1NbpevRfsthXl/Mx/aMb84hFnAYZLD6fOpJitLBgFnjWeC9B7EJabHdPVxVoLXkJ4hvumjIIGNeeUEGE297JuLV8p2jKzNiTdgEGwKeTY5XRUnm8MhehESMoTh6ZlrvHoYl8lQ5iOwEsDENu9VpydU8utG0ZYKbVvyTyERodz6V4sPElcZw4U56wTu9lvWmBqP2PVDYei6ahXtd4cvc2HIVgaLCqtVK1+GignGdaWw/jJtJRtPlMEubm2HWLZrCv8HxSE7H+eLCvVDs0sbhIzKGu5i+n4rJu5LgKbzeGo452K+tVheKPPV7xOM0yLr5X2aMHECY9EuPMDoNCZGLn5JLbnrS7g6q6Y7JdFq59JXli5VqodImOaJ8Clz5Ukzqbli9x7nl1Xf1cbqx4q5Xej6yqg4mvZcGG7MtTPZ4o7WZe4w7co4dAnCWFp3lWHv8+iU58vZ/BQn/6VNZT1+/DLqc1sNz1BEJTNqJHN7cp3g+Jr66Uvzbhc44hrn50PM0LCd0NLcfm5Y0AW84x55EcI+fePnAk8Xvht80AyfbIz1ynwhrdxYgngJvIJGH7WPmUYfCqpv6qxXQqwfKX5x0nTSdS4r2gUv9uuMG+bNxM1o5LTNvsNAezboIRMJsR6d0lsgr+jTJslqBXfh1UoNawVEeK4XXY0uiIuT12jkmtZMBMPSWjvSEaCHQLus6y663LqvqSCWyp7h1o5hlYz/Mahu897rjwzQJC5WoOMgi19zzlM1q06T7mF6iQwAp3sx++4tJRmitg+xGG9PWtdSLqt1Lk0iWu1Wc99Mzow9SS/R3wjgJGe5rxlYFmBWP+cZhWYjXdcpL0DWS33qO51MaGZ9bdrngF5KyEA6K01nC6PUi8CYnGastQf+0LLBlQb0+2Fpp14nMRqpYaEhY5dpnzXvG3BJi7Y568R4nby1c2Ta198mjxdM3+vgzTIa48oI9OyN0OmPEclXI1wq62fuL52ybX4AgRbdSrY1CPxiRu0aeSnfVRa6/qZUf6cJSLqW5Owuinv8zNf5IgL0rJen280PXfqtW48WJJfXCMB/ZZ/vsMMOPwt2AfoOO+zwDqBH7PQIov8kuEi+7/ArwYTocZhGGNHxV4df8IfOwEqQWCQB1KZ7oSY6EeF0PuE8E+Y0VU1FYkwgMbTuGHrGLC+/8aBZcKxj3Au/SRkWlgfQNnNcEXyL1JL6jDhj9pC9U83z7BhGiyuRlNmYXNqqVd+WzQTMaQKDcWyYo1QP+KXal9a4wRpw69LAGxqUPtN5Akg1NEeCdI+DVTjx7WfO0P/rgd9792kuHZQHE/NVS6pPHMs0qWDsnF4dcJmBtipvI/iqLZIHzxECk6Rb0AWwNaWY5YsRMohTy0wxnJpLCK4PY7OyMlgaDWRjUipDhRmmBS78yFw+NcjG6hr+EJPf8mbM1cjI1PLLN65hxtTrpasZuDXcgnjAGL2BOchuRWWRoDSGHAx0bfPzalFmr62/c6qm27Nq2nXr4fN0Vh24SsyLsQGLIvYKZF0mSrjTLlyOp5LXmN0FrAWy8vz9+B0MLt3wtTDieGPuuT6znF7D++3x9TbXkE667sfbP9XyCHACkEvwjw8fAAD/ffxWA0+DyIYGA5QDMlfvWVeueb31bCv/+I39gzWECpV6+cT6AK8bGzu8DHqa2x9H+5VLY58ygG+vIgLeBq7xfc7oy1hv3AqGkAD82dtr3hl4QaaCLNO5kg+oW05Z6pX+YJogJoGLkXEIXV/PLJVeYMgC96FuUA29Lpln9i5vxLd4cWFiy6zSEXW0OfqDnUnxCKu1qtNH6nKHvaC6JM9YeFEXS4xMYhndzLljPgLTPcTvO9BaD9L20bxz1lOT0vpsZgscPhmVfIl3DInQ3gFPaFitkgAAIABJREFUBHyTsmgS8+5SpF50hMnDGSlPYM6qnc7AOYOXZ+Ti0sX8H8N1ujXgd7eXM0ygH3cNRoJQNM4ijadFG/roDWBFf0X6ZYcd/sIQzLU3DBi4Oewusfp1Vz+iOeftsMMOO/xk2AXoO+ywwy+GlnnbHjh3+H1h78UCo/P31eHfAP4YmPAU4rsw/7mJKoyE/rs9199WiA58PR9xn2Z8ng+iic7HIvgQbUXJa8nCYU9JzLdn1cQ8qXfa++luVV0GgZLEM83xJZ3BuWqin/IJBOCQDgDaVcN84RZNVlR9sknjL/kEEMH0QC0faPPNKhTPKji6Ux/pT6oxf1qkXpTuADBOywmMjLvpgEyMw3wPBmNGxrNjrlXmGwFMOBzE3/CTaYQXk/luzvDqoYUYf/XNvZzswDmKowFPeiCdyTGPNtBgqxuJAp9x0m4ynuEKccqr7fiPbC9NU8xna1gc8zGfMEY6yKDJxIodxV9pcJALd3mZCe0S7pl1WxDrHZ6jL8fXQKlr75u2bU/7tySKks5eWK9Ae7YxZ4xsoKeFU5jdy1GFWuqz22me1+y5Cr785ZWIXwmqL6YFVbHk0N+eseMYuXB4WJ+becHianauebrqr01+uvHq293qYprZsT8o1DkDSF4zTvNK7GTnusiDceaMMwgzMYiSmH4lG7ks0zuWae9p3dmJWjkQESGp5lqCPIOBe1Rdt8M8YWIg0XrtOmthf56/wTS7TMHL7JCYdhWDRXhONhY6iL90GsW1cTRdR5nTxrdLif2aNEzvF3B7tnXzB4Jd3lhZyLgmcYh0qW2iQGIz3RV1v2UQxH12BVd38DZczObsIhxGkYAnWzDO4zjvET6GPouC57I8XNHOCcAnjTeT0kYKP0qwvqEJb6vUkJ4boVSMG7kIK+Ecwv6GljYCxP/zHz+o3i+BiG8UnhcrGYBR6iaE4aKkTjUDE5zTpH96ZYuqAN2sk7RWXhYgPWhahP4R08JLb9z5i3RkV82sHKpkw60Q+1UF3ezXMzZ5rLiukQtkC/IkjSP+0Qk43INnE+D7NjpAhOcs/scXbdsM0e4mgIvDcqPZHHqFxq1NwJ/MMZaURd/0QoOZaif1ya7lCk1gF5m5aqGCwVPGOS9IadFLfCTK6HbZNy1A/o72IOH9UhHY0VH8KYEfHU252f6OfnzpdGm2Y3dWuFqIHuhVyeCFyOzww+GXdo2dkeOZYhT/hciuzh7xwdGfxQrW6Blu/fDnKG9dLPx14QfTtzvssMN/POwC9B122OEXgz+8xN+dELoe3lNb/Ycc6q71h771/erwlwjRHZPDp3uREJ1AxHjOZ9ACPEwHJCRkZEyckGkC06ImdgEnmUEx3wo4EcmavV8RR42b1k3hdX0txYh9PeKte16ik6FouLwtqObifZ4JxhASHE0QZHlmJNyD8WiSZGN4qWCwyKpK+Krq7n1Qi61vTV4b3PcmyDMdJ2BaRPK1cGVQjRrZOuQSTsOyr8E7cH8bH4BhJMXOvWptdPk0SWLarfxGfWH4OubARZX97mC4rrwtGHbPoF5eaF4Yt/EPlQlC7D65ONHUn/cxCWWW+snB4r+7wTV733fGoQ3MFUB/l/Cuvz3SgsgrTNfmsIciyI7c4lA2ccWtwSnXNKV8j5u1r6tsxLPXPWXIujySS2uRik9O1xZAXff9N2Pmknh2mJCRdf1fOKu3h4Bn6U8OOFIVnrMND/EJS2wCDNFquwcK81yGjo6BEdiyaeuPCvmRzY894U92vj7jMuHrETeBHow2mesj3JjkyryG0bqD+Yq4PwZuuxYr420dzOE53tSicVX9fO5OpPjs4rylS8s4f34GPDHw8J7OB1dAFJr3wKKIO2yBY+d7fLbmPzNwt1HOWwvUu4J0vwjor91zuHQRsbuXuWc13V7WSHv+ycNvE0bNX+gH9xu/mzkT9QUuZwVy+7xS6zSryfIZJkxnEFJKukVbHzhHTpPsU4keQGlWuobKGrScT8jnRbcOSc+FJkD7a+sZJwDfsd6MOg2xSWIqjV7e2w7lnLEs5+JZB5yAw4xEM9I0Y/oApA9mnUVx0fKYCfkswvNlAfgk8WzPFtwSVpc3m2Gs9f0kuDIIeJRiOFWBes2uhJR2MUtmKEUxMGfMOCAfMign5HNGThmc1GoWfxN/6WXeaAOwOIup+Os+8Q2O5jLCye8Pg4ky6rqL84rWNN5oPq76/71N3B3ePWyNr1H8BrYW52uB6o+dH1P9E08W1S1YJdPc2crOYI3VMbjvO+ywww4/F3YB+g477PCLwB9WWEO8aIzs6NWkELh06virEFUjRl+s52/GHPurQo83e833S+mujVuEMHHWUEjHeI0Q/Wk548gZX+Z7AMBXnNQboWhiL3wuAhkza2iMJgbjTEuD20E5hifVPCcVaGXVHhUf68CdaoyfkZFQzaxPzj96a7pYmDDLcpayFKc5CelzWkSDPikzynA9OC0uAnCf7lZ8SQB4mO6kPsqxOaj4Z1Gm2f88fABA+F+n7wCAT3eiSf94POF8jk7Et9aszvcXJOnGQSfe0fonSA628vQMNNNCrZab+wlsqV80klGk8YbEAkQz0yV9g4AFBMFg0EIpiFLM030vvrgdIpMe/NU0ZmFmNsIZ30DOX3jz6ZIGevzWiUuD8G46V2f2774BB/44fZtuxSX34AWzQMsIJ1OdI9e01t76reBoQnQ1pW7a3KZVnlNlqhiTlYEiPI9CdT8+nVnU2sOFi6yMeNS0vgNLWUHTyfyw26+lUTyYDy5+w3GuQg5j1PuGLZr5vl1Z5oWfJ0B/zkWLCGXu+LELNyxsv2AsSGBekJCq8NyhXX5XJIkEmHv56sFW/hOJuBwg3EE10SHrtQjazfXHxhi3/YW48tFU8P614BrmJK8etmEV7Zp0g/GySktYMwDdmOktntcyRFduUyKt6NavlSULX0gozDflgHm5plo7c3AEEc1robRxwOTKbrbrcivomW5/CbxRNtuw0WhPPwWB14MXnM9YK8v3qujXwHtU+uPkxl1YUrvP9+7lyGtN96FA/ULbfgt5fXbpGFjRWTYUhxZGUPcL+z6q03uG1RrlN2Rq48S41gYTQCpA54S6dzFBdh0VoNMhCNETuFgGMiG37r2a3zQlUPqAaTIT8FYwgON38HR09+AWiO8RowOMlrA1vhAfKJfNmr23uqvqVbdtIhL8y9hpaTTmLJdDKIs99DTrlj9hnj7h7sMZ02clVWy/xwTmBM4JyznhfALy0cynA5yrwLuxAkBo97BSVQYeU+nLgrcnH3zfahsRAxmERFwsgakpmtJG6TSLRnwSP+o8H8FZfL/LWcJZ5MgJxIxkrng4AZ8I/Kga+tA+L5awfN/4/Znb/i+XEivN6PtgNWl9MIVf36Yj2AWFO7wEvIW3JvxSOnu4djMZbcyo67n9JtI1W59tyfY0uwnMoee7nJ0lL3fWapD9XTa+HXbY4XeHXYC+ww47/ELYouLshHENUeTjDBiPO+zwI8Bcg/4ITfRVmKq8l/BOIhV8FOaxj9dEZ9wmRAc+E2BC9Jwz/jg/48t8jwkJmRdMRJhAyARw0TA0fooxKoRpQRfmds7rutWjoPnhpRI+asImXThvtenWZRl/MoOLhrlPZ8/mG72+J62jwBci/AExUQyIMga0LdtCg0ClOfuOJCcbEpWr0t8IA/5QU0TTERvlcvhk6UyQ6M1BR0ZdlwvlEaPu63qUXDNhNQMG1vart/Ypx5ArSLx2b+rVuRfnlnefb/gjIBjgXj97U3zGtC7Mawu3Mvxfqn3KGaab1Joad/42lwXEWc2tQgToZpbbmNT5jCpAR1uun/8619oeMVzUZgaj/K6ZqxVvCfPmBh1DvjCEgEZQUoZEwM0P6yZieOXOt5KBT+/avlnvUdfkVVYtMs11D6Y2zorRxu1cJdK1XNZQsSZvVyUziAjPSHjwftIh7Z7QotviJ/7Yy45AjK9qwt12HeN3l8sXTT8OIH4u++cVEJeFC0Wt14atDC3oJevH1qLdgYc6L/+/5ycJu8Hqt5AgfhC7co+8rfW7Bc2y59RzR8vZTRA6fXFzo0HgBZm/wbb7l4ePwGoOEKpF+pmA7xsN2RtSB1JBIoXu5X6f+DzuXZqjPphwvytI/8062df1vZhxLwQ29X9XIOtnIwhFEo1GIojJ9hlIByDdgdIBxYw7EzhnuQTkXb+YUGeagCkhJUKaAKR7FK1vAFNKwDJBLsYxeMnIeQHTIjTIoi5b3CkCdAToIDTFckIzZrz7GNu4ynZd1x1ZAifZHYkBTqHdvCa1/pH8ETGQgGmecbhjkUsxAZjB9rfINbakdxflAeqYfHReCfRoY86Hmvcaq+7SQo5xobvITncs5VJivXDHoFnpyuUEYEJKCZmPoCVLN5K0j9E7BAap+XlwEgH696zbqOLeVI1qmxnN5COsaAMXtrk9xDaybPXh0vTruk7aYYctWB0mAvQG86X8bik7NcsAAFmbE5VfMsF6OCtRzgCrigQvKMJ0O/vJARD9SfHaM/YOO+ywwzbsAvQddtjhHUDD2YY/XAGpCOIiWSRnXk8kRmLxdz5xXBKSWBxcEe9XwGtx+g8kgntnnVWYtxs/StT73GMWdJL7+EWIDoAIX5lViC5Rc8749+k7Ps13mGnGMxgLMu5wQCbgjBPAQKIEJgarL3TOwiBJaQbAOKkq5Z36Os8qhDln4drPdADIWQrXfExCQlQFfHUlqU9zEl/mJ/XNbj7aZ9VoF813Qkpi41LwUd94XH2ln6Eakpqz6DBkLOob/aTlpURgZkxpAoNxP9/jn1YvEP559wEA41/Hp3oYLILEWJNBWAm6MM+ME3XtdBzGi/gBzRpFhJXE66z4Tcrc9CZJvexoCuHk/nyZq3bgdUQvrHXjorSzM1E9Xj8HTK1mmm01qM/3tevgALer4t6Qd9S292tGw1yEcTZrmPdn14wJ/ccav+SpGuVZGbsgVH/2ch2FLYwIxc8nO80DZuWfnIXBYv1VGDH2jBq/1MMvepI/2dro66lRBR83R43hY+YEoc/G5IE+e1zAAJt9YZUK0UnjHNohE7WbtFCCmSn3TN64pocFvRmzubRp+diU474VppaUxcnVv22ctqDmsgRK22eI0BwMYf/rBSvSC1nfNYd7qJCd5PfpqD5NXV+ayV0mwlfnf74MLz/vuBMWoSwnHAIHDLpOM7weLmTi+2jz+yhPXr2W7Lzm5xWojDTPffsVAUUv6nGrADduYljvsscmrr6SMXyDZhq6LPHrWizf49aJ99Og6djtqO/l+PDxchQAwAdF+BT7Z2NCdqcFX9c3FudOf4sgXd+LKfbB2vKJun7Pu3hurSn+2XdrDO+BmW63Z6PRfnWfjyAIzcsl3JEZ96btdf9KCZhmgGZgOgDTPWi6Q6IDRGVd6PN8Xuo+bVmoFjvPE5Am8DSBUwKlO9HkLmgy0qyX63IGljPSMmFJZ+BMKMRusYLzDcBBFKmRkTmDc7DR7+paydOWBrDfIiSGCriJYVr1WjAarU9KAH3SNHbB0eUl0nIQTfrZzZGE1khCM+48vWd0V7BQ5GnJWBdbNlkuBNjeQgzQxNqlWbGlam0gEzCdwSkDywzQIgaMrM1zkjpkrQvrJWfKQs2x0ZwtLVgraDSYpyXcZc7RIbrQb709x9rLvbPmdc0Z7eIev8MPgd9Z+3944dKdHV4MW5todWlX1jHVPi9nwRTnm85XFuF5cyE5/jXmV37j/tlhhx1+S9gF6DvssMMvgBHBYySXZwJFIq13+t8i5H5n4qrLqdvhPcJb+EMffVuFqT90WHiIUA7+1E/PId3Wu/dpXoToVUMTIDyen/FpvsNEoqedeVGz6Ek0C6DHKTWZSGQ+0TNIza+vmSvteDe2z7pduPAF2+oNGBwQwblpiHP5HktVv8jwonh5njUv/99De+GnHiTNd3qTLlZ1k7nZ+Vg0EwaJyuHVmDovZaobvp7REwZWUSJ1zDvl8XUthFs+Zoo6mn5nbLRHPDgXTlxgUlHIR19W3cahOpG55upt82ETeojfetiPXPQR97wX/1J+PcasL8fC47MyY31Y8X9uwVT7oBG293EXeWhoa6gusWcAZfN/rvF5cT7xrK8dM8b6bGXC3F5ZGLdAZdxS+Yd1++tf1Ho3s+0rv6fOV18z3nid5wratdsYyMjOXLmZdtdw6Zc6vsUVBpkb0FrmihHrB7ZvH9enjQa3LStUU/s6doet9Q2wMIv7Da4rZAKLdwRtjg+klxp0rpUyUNH4aib0NcBQaKdmaN/WXmSodp3j3KvPLVN3C2L7jOJs0RA3gx/TrtBO13ehZ057BH4/8uOnV86o/t3px6iCqa2yr0UyrvEvzuwyLEvN7w2zXUFyki6r1jJyz/EOYCQ83xqPw27baFgf12SPl9LEtHdAuQV0hvh4frywp0cz8D2w5FFQuRW3TGc3pm5dL7zXgo9UrWn9aij7To9O68T1kUxIkxJonpHmO6TpDpjuATrAhMfMGcAZzKaFjrqHJaE9FhJt7IwE8DMoz2WLSNOsZLXu/WkCUgZRAmMC0iJhReBzLyUToWhUhmHTLnfUktpU/qHQXEaLWROYj3sTfk8EzA/APIPmOzAmLAvj+Qk4J389jIuxIAaQF8ayeLcoqH6LldwqGBvd5S5Q2hFA2rnOj3rxyl++hNAwWekBpRU4yWVB8Y9OyCCxPrScAD7C5N8M0jsRmucEgCcxPW/9kjPyZwBfWckQt4BEOl7buVpDMvSNbuqt4VTPRUbrrATikabUOM33n7A/7HAjvDkh9vPgEuoXx9mlTXgrzNYCu7ii6wepBrouEgydBnohmfx5LgdXXMVdl61c+0TZYYcdfg3sAvQddtjhF0GP+OlRfPUgt3KDZgzcIR31OxNYvrIjSnjE/fyd6/0bw1sJ0d8CysmENt7dw9b7UIgu35mBx/Mz7tOMh+mAM03IYMyq7kIQv+XChJA0wl8QvURhfphWRRUWmc/zo2qM36fqm9xD61/XhSfJ75zPzbezaaLr+6ya76xYLKr5fpfuAAJOfASYcZfulH8kovRZhXw0iUD+pGYZEyYntGIc+YjMjPt0DwL3eaTefHsUHvQEUwjfrz4MX8rMRbsT5lPR+LIPK5+5aBm5ln6CMNsyqZDcmEqB6WlnYe/OkbEWuhsTsQhTLNwO1VTbsXLx0PjV9vOu1MMV2szLQcMWhpp/70FsNxfcnfuXOpEHv7fmE5AgDmHWTvZszFqgMB0LvzR8K1pPrIxcatHlXnlcmZolb8nXa55R8X9uDBbHXAHQ+iQP3yys2VYJwCJMHVvNCl8mxAVjpenu/4oQP7yX4n2fHOvQIgbwpGusqjrSEW3hxoy61/esKFI7ZwrjXJtfNbxzqi4m6jqTatYW7ovzv1HYzC4+V55xrTvaetuzuWbw85eFjVaE6rrfPGs7f/YmYgn4apcXytjJUMeprtjSiZVtTS64mR7rucTZ1eElssdmbPTKimGR1otjD2EcOyhz1O0d9WON35jKHKDxoIlPHc17du3SJOqBdYbfDDair/Y7H+DbMGhsvhU8296xAFPHD/ovh7BOh2a9CFMWjUwGurcgriQJ3hSi4Nxzox5IBNO38O+zGye3cLYyqmDvmq63vWGCNOVHiE8eLwz7dG2DrufYSlsc6JMhcQxcOxZ8vnYppmgb/8gDSQeafcXoBvcLIDpZaSruhee+HUi0lNM0yd88g+YZoAmMCZkJlFW0k1XI62kFInAisGp0m3UaAtWxQgk0qUCdMsQ0fNYLa2fVgJ4ALED+hsR3ptwO5Am0nAE9O9W+de3hl726wQoko7NqWxFBrMQYKZMAzAmY70DzBEqz1CcTTk+EM5sAndXaPatlewZnRl5YXa9Ym9Yi5Q6JWQHzV5VT7S1rTka9oOA11Mt4c/s7shRg5uLJjPPLZQJaJoAfwDiBya8PCZicW7AMuUj0jzvguID/DdC3rGQttXOVw7tvczgt2kIT+vPFKoHrx9UG3sYLdE2hqXpJfZ6r/ZuwFtbv8D7gHXXK1Vr0NxAX/hzQ2YjMIYOsiVTXJrIzn5GkrMJzOTMx60Xp7FxhrYTnHtcddthhh58LuwB9hx12+IXA4XnFSUM9DSKEx+ceI/KvBj1Oyg7vCqKF9S0YHZZH5+8m7EZ/6MN39zDMi9EXogPmEx0MPKtJwofpgAWEM+dywJqRcKIM8nkTKvPKMWIuHeEa7AKql3iu3FkjisnoUTkh/+rDHaCSh89PDo/lSEkJibikoJBbd14PNcsHa8AlTfRV0o21pGhCXThEX1qOTLjn45XnK9YyLxwEalM1ScMeUhh1xhjbYGx1i++0d6PV3oGmiLinxQg/Gq7YH0ZbZvNRI0ST3+WH6p+9k5rNJPNBaqZCK6NXsuXumGBluYDVVHllxwpk0eYiNkYLV43AhqkS3ztt4+eK136PpuybtnBaY8W8YOESowrRneZ5U24s372UtdXXwY9VNSTPTitq1NUM1dyCXjIM7V8Yt+6dEcisME8ukFeGfts+EUFGc3uoCNH92tW2+1cAQTqOpj0byfgIvDZfHB8uy0vZxOI76LwM4hgdjRMHW+tRGzFkNOhEvxVtoTeCyZm3nfTh5C60LEoHfJBLIudvwQdwF3jc1oPot4GvsCZerhCiX7us2160QwvX0McmhDaz6bdsof6OwC3p/P2M0RDokS2fIP38eO3AMBhNOFRX1lfjvxGxZwHIor9j4wSXQSxeQTXF1/u20i7uk2zLSl9MSbTGVTgd7/sAIkCvsms73Mn+LkJ4JVKTXhYmYEpTFQDlbwA/gJhFWx0A8gLKM/gsYUVL21lpafcACt2bBPciRCfxJ5y44poAmj6BDhNovgNNCUxi4YW+AzhSpbEmiLn0KZe7ppxZXFmUCwOMZObMk9eeVwF8tZFTcbZLjplF4J11QHuTOP5iV7K62gFEJ1uGXrAkNBcqkiHLWrbQXsSE/DmBn8/Ad4BmyZfLhUvDcbzh16HQIVQ9HdtUGmgDuA3rWQCLR8DhseiK89K7htecgX7nev+ucMvmM4pnZ0dnJUMF6XUK6rroznWyboqFkDK/i/Uhf0k64mu43LRx7rDDDjvcDLsAfYcddvjFEJmHHoyLECUpQPewvILf/dBhECUe77lOr8XtL0T43spPu5TR6lzwCOHe+XihsJ7g41ohesO4ce8rIbrkSdwK0SdKyACeVWf7gFn9hi9VYxFqzp0zziQanpMaSTfNc9Mkfw6a6HaUOomzbRwwl3oxzJuyMrRg7DYqvtWh7K9TPgMgTOrj0HyzL46jygw85WN5JwCY7iCa6ACDcD+Jhujz+Vlx8GsUA7Noqv/r9Fwzsf7wWr1e86MIlnw/oT/NYnyxGal2kT3iPn0nI9MCOZ5Cvr0CN9Yjz58q44hQ/Ar2/LMxWl/q5N6dFdymLcz0e/Fdq8Icntqxbc9FqBFNi/cYXzE8zImIO2n5TQUi06wzRzcDAlPV+2W8Kl0peL2VFLC91j7EP0sfuNGE2p6mYuU1pEqZrv1L+TYGqLRbucjSjE9LY8wWLhqH5gpifXGhQ1esms3vpxaHav+wq3P0ad6YEfQ4MFomeOi7CAyIT3QC6LntAhXsmyuJlXb3qhpU0JVukXr4Zi/VtTlT+s800l14+W7la0DSohqFYGrxa9o6cIeNgR610bHGl0NSPxYqA7zTxquyEeLWoFbO7/KPy8GgCzuFXg8vSFJhi7DwV7isjnEQjPBxFd/Cz4/TphFD/p1mnz8eMJtPYQKe/vzmIsc0V2ieb7bjYD1/Hk2kK+HWvntVXwMFN1tv/T7CftyGOfzqct8QesLza5r8rGPxcCMxHYfltdAVpo8aUsM/uXaPJMUQLkT02/ElNEZAAGbqTCNucf0I4PuNeb8WLl1OrBH7QWqFheCEtMRVCJOr31wmoS/K2SPVPbJd94CGdidCoVVJGijjTugRmJFi9c9NBErfK72QH0r5IiQCOJ9By0Fcc5sA3QRHdhaIA9ebtU9J/6iaq3em3IWkelAT9vegaQImQmbRLueFgKPWS+848iy/mGzfUzzYis/lZEXItTmM1nAXhEu/aj0Yrl86ewGAVjvVa2dn0stXDKYnACdUF0K2DkIuClIWN+/LAvo/J1kzDpCLDmrSnf24SKml6Vxzl18/LuI8rINFv9dMCDaGfCTXNr6etodSG61fRvxY26CJZ+W8G7hx3S7wnurwG0KXDt6CrUHYi+snSyyvnu3sIi83c1zWCM7q0kIvuFDOYF5EE92fqa4y3X4jDbfDDjvs8ALYBeg77LDDO4aWObryH6zgrR+70FW83w9GXJNrieHfEf7DCOCLB+ZL8R8B/uTCehmGMAau9pE+FKJLnK/M+FvhBayF6AkAmJEoFYPup1IcOcXp9uDG24iVpmEX28Kq+FIZL82hMKwdIefIAlEsQQlYlvqVO2lbTNZvllcMKTk02kCd+T2R2l3kiGyoEFXm18rsro+Hyhj0mSWqwuiIZgOO+Xn1cmSM/hWXqoLdjDCZ7sh/umWxuGefP617VdrG4t+y1lyqoMvLGGKj9Tswa3UCjPOL4V0Beg+/LZx7a0QK4fE51IfSOqrX+LLwBg1e/xaBamTehLjGXy50gWOulHi9dollopbXmNnW8ouASv+xriqcQ1lA33w71+Srkkd9oj7Ue31udXa/q3jlsoKaO3Vre9cogp9X5OYKo/oobPrQ95cE8mjlo/BQ8GXXx4aYS99h+JJp3MuLRh2sfwXFrTHQSefxadZM7sS9EV6b/pr8O0Pm8qrW37EAiLDtdCXio2ivqfeteb6qjTvr9DVa6Fdn78e9zYdLjq5fAHMH3245v/DsYMJz5wN15c/m0sA9uTl56zHhpdU2wfOEap2HUU2g9+CWZvZuTi6Zbr85b/c8E4rt7mJPnG8jg94TmFA06R6dCZgXgAlMGTktwHQWk+l8552JAAAgAElEQVR5KrQJmVZ5sXxFqiRZ5yjDtJ0N/LmEADxDhPK1+YxcANlA4eIj3YTkzBk4AzQddByJYJrNNY0J0ZuiqdnfMelfShBT8gmU1AG6RmM6QHy+36FaAsoAFoBTXZdsa7Qx3lRGIIFBGaAkF6Gp4Kf62SRCdSlHM7A7rEn3VTIXXlObOUNNtnt6qtJ71cKQ/eg6Z8J4swYPAv19kjHxCDFJz8ozykn7gZHOJ2S75Lkskl9D10VwDWJ18P1SotVJRDq2WkV1qjgXM/BUy/Wkb2dLqpc4ftHavcNfAC4t8rdurDFe77xoZ2Jy+74rzi4X6RpJ5qKJTQvdnxV22GGHHd4H7AL0HXbY4R2DHaYqs68K0eEOKGZo669EZPlTbCRsR4SuD/8rtcVvBtGM+yUG1VswsLbyYP3XHPiBRog+zITRF6LXcFZmAZsGJDOOecExL/g83+MDCdPjqPl/wAwG8ATRcCZUM4nMCxbVwkiqoTYbR9H5KmdUX+ZzmsFgnLyKDUN9qwMJSeQimlI036jJCyCc8wkM0Vhnl9Gy9M2GPS/PABh3k/pqX44AA5Mys89nwSdNgsdTFg3T/zrcg8F4RkZmxvfTWdAxZpFwpdyzFmhC7USq0bFCqYJnjm6B1wK2OprpXcv/MLXhTZ7t+lyDjTG0ZkI2OLILd0yxRnhnTOo0qlZgxBdBm/OLXnCx+loZlpZquqZhYyO7+pZqW131W2GEXeB+lyJiPI9/JxyMsRZ6hIA79/oj1k+/laqGPiafVhl7/iJF9m3uopbZFrm02k9e8yiOFWVAmxnUava0w3gt6PnyXD72vdeEzbuPxG0ZjWZE+E4Q9rtrMrY0tCoEwHOLQNNH5ifVlVXaVtvJ+oMAYip87Kq5bn1k8ayvqMxBb+q9CMYZjsnr9gDTBmnaL9SpOzQDl9jmiPsVLMhlI37cuVTIcPO/sTxGJ7Df37d878UfFbdqm9du8AbWSM3EqpBsjU4BpwFyqX4zCyoM4Pj81ObbJB80Ervvw/6/FUba51sddQ2juEP3sAmBXgoXBtBqub1lsHUyuqi56xcgb77lF4Cnh/1+99GtK8fRuBmAj9tdV98KNF8vZEwIxXH7OJie63w1kl2OREh3iTyPMGF9KQGQiwd3VIXoAzR+DTia4yIyFfcixy1LHiuNvACL+DDPiQBSDW0QkDJY1a698RuA3JJaO0/23ooPqTCbc9vBZeZrenPtxMjSt0XLnETLO81iNt2ERimLn2Ay+8a255LSw2o/iwicGDyxxDUNdDPpDgLoo2SRDgDNkIsAqeRPesnOtng2lzPmO9wqTiIsb9o51fAKyXVGhzYmvRSApZRf6Xw1O1/Ooq6tFnXz0ZRFIKRKo4CBfxCQSZa4r0tpF54mbUs1L0+L0GV5wbI42jOT4NiUIrgTOXx6k5pDvd25px0d422zlOjpoUG45cq3CBR/4bK/w+8EW+tu/EaDcP9dR6v5QC9WNBzBbJdXioY5UC2MhQsr24e1EP5LN7QddtjhLw67AH2HHXb4DWCLIKKBBvoOO/xCeCshei/8YtwrM2NgJfRDfNewDSH6VwI+M0Ckwh6dkESEx/MzPkwHzCqUTpqxHa/qmwCRMEeIzDiiMaLGQO5/zaf3nZuYGf7KTcu1JFx/HafE5hrS4tK2p+Fzj4RnryVNQCM4N2ZS9G+eVJvkkhC95GvMHXQiU8jDvUwkZUyT3gYfabSh4tu0wxUQhQqEvu90uPCYFp24K+46B0F55Ewr3isBymgCxkoYAqGjV6aNO8Dbn9eR/d+luPFdmKntew88g8QYm7RuVs9wJjgmiQUbpzTibO0dB4A99hy3Wj9x89pvC8eIHLavnz+0jrhS3eb2uTB+2nKiXMuYsbXOEY9QjJ//FmgMpailb20OWWdq2TUOtf8uAoFc1bmdkx6ybxObV/baYTQ37eTWNAaKln+Yn5V3bGvsFrHH/W+XpgqvHm7P4yKMMujN0Y1B8kP4gpubyGVgAGcnUTRz25MT4mu/iO9zgfnzXL9fyr//8gq0B2ujXboql9Xcba6r/c7/JMhcXTG8Z9gy2x73cEI1rX/fqdtw6r9qcqJc3utnvg7ywu54KesmcHPdlISviT4qa4Fw9rbyMSG6GS3Y0qR/x5BAMLtWDMICEsFizqJdTGfwScIBkjaZEsTpt5lBT0hEKhi3vNBQ/20zM6ioPacmPEOFzST7lZQq6yKTrCusl19TmtSXOIMoi0A+JxGuN3sqISVCUjPtRIRMC85YULQ6tR5ECYSPWl+AMSEXek/9xBNjTgRT2mcVYGcwctmjGWJNTPXw7fxhAi4VohccIZcSyLcUtXmBpK6JSC8osxOgL2AmMOsewklMrZNfJGq7SLYWl8BHAh61x1QQZ/1Hxce6uAIjyiJoJ3FTz0QyVnLtS08hm2sANusBo/m9MfeJ6DaB943577DDCH79sJHZJPS73+D8+ameo4ghliPiheh4yFqF77DDDjv8PNgF6DvssMPvA55ZTqSyJS6ary+jpS4leg2DqsOUfzEeW3n7MMvrLUjnX0mc/sh+2cr/DRmSP00TPfpC38hf5864fMfAb/BR4UWUOxYhOuMzk2gmsDImVPj7fTnhA4B79UV+htiReFBN9Gdl8xSmFYvfPNbD1lmFmnlZGkHQQX2hn3JlygMAJWEWsZqSTymBACzGVNGykjK5zLvfXHyrS8Wz+kqfJqfxwIzszaJz9XlusJzNSD3p+wIw8JiExZRPbfz/6+4DGMBX5WI+Ph9RxmdpR6AI189BVWmT+UurR7o7YKaE09Nz+41DxLM+P1Xf7zHLIgCL36OG6CXcADSat07o4qNWxmbIt7vcOSaeL86EcCsz8rSuj08zLI+bn3bibNS/RPHpbY71mAc+KLSVYzB2IodCCa3g2kx6Wtk96UYH37IXZ21TxyDx+TTaPVzHhseLXfzSB0uIp4xM97uuny8jtCH3nq3c2N7k1ku4/BzDhzrlO43tMgrs30q7KOLgUdC+IKomg3Fy7UQA7uFNu3K5vGAmW7XYYq439Kvzq1oV26kMiQa1ktzaNrZbp00L37szD+MQKHjHZhGNehOiywpAbfv7vP2ao5rrpWWbvSyMh6YPUfNoTMj2Oq+mW1+70go2+618t6FQLwZ0xnDB2fcb1c8btIJszeyaZjRXRrQAubFsyerYXl8MinPZPxDafhYofs9tbDLgx+1Foejw84U6Pm1/XjduB/kubKz5KekltCvjr9K7vjehOaHmGaZiCbRxfkURkvaWyKvE10XrNGOxsmHfM4AnefdCsNcAN/Ng9bXTHYO4cd1arWMXMRm/2xbaM4RQ1tNeOSGgp4luWujMVcju3ZgQgA8AvvG6vZuxdWtnPOhvnHged2rHLdwYbx4uLXqobbQwxL3KWTW/FyDNQJqAaRa3BzSBiUCYgwa6NUs7H+SSWt3f477XboFU0GWljVhNsIt2dBaf5JxQtLTZdTAR0pSQ1Ex7UgE6YwFYfYETgacEplnLc5eS0oTGl7un8Tw5ACqocjETbjbYqyl7E2qJ9r0UYhedqcnQC5oZQsc5a1CTzmn1S0/Wr0xiyj4/u07sdDAn4AvEN/qj6wuzskFU/JszJhH4M8C8ADwDtKilHvWJXtZmLvu9kBdZBfvWXu2FsNL/hr+nD3VckI4DmWbazww09Lenp1faIJ6+cFBoqDLAXJJBuxmtYQJ9P1d+WxitRZ7IfBlw5+nnw1bZ19Xt5VsnDZ7tndafyy8pCUlqup3cUNV5lnXtXEwLPavSeQYjnBmb32vhNf32g2mgHXbY4beGXYC+ww47/GbADcOxHvh6QBg70P1ZhM4tBPytOG3l/Vri8TV+GqMv3ZeU72ErL+p8v5pbOMjvDeEmITr1v4/C4MMfAXzuxB0VFhnxOo/KuzErQhbd7wwvRDdf6PWgTvi+nHHHjPtpLroKlu0BSVksZmbU+72trKr2IEV6yKJO81CD6poXuI5tpW611mq0dIcZDz89TOL/79EE84mw5FrXey39URlXK+aM9VNPsLBKMwIV4vfiveikPUhAQGGkdfOlzdcXnZVHnVSEPvpODGQz72ht65ljDh8vJHXMgcvaiL0KaOZeSxuo/dlYHzDcIsTJ6PMYNZoPV+Fq4RYbozrVXy9sLXV2ZgHK/Y1F2oeSMv61bZMvj+C1+qeCD1c+YyMM76Bsc0qLbrSjx4lcuwJdYXd5bcMiL0hisDBgG4ZnTGDrDrl09j2uUrF9jbnt4tg2bEOCWRjwJaHus84UOxOBSTTsKAE0OcG6H7ercgXvYkHWb6uNFW1yvEmG+FNtGqpEEbxZt5X12GSf3ypcmW8lkFuyxNYXAOBJxmd2c73JKc4NhyCA1qWDq0T5xuvxWOJWaw4iaiB9YsGpO125+VltrwWtzkjcWhebqnfmVA+KsC7Syqm9PFCee53F9bcEDsyFsO+b0Roa27spbPX4dtAbOy+BQb30AiHyS/L2E9Llb3muaKRbgQNt94L0l9Ld6+8dAd9vLOPicaTVBm5+D/oa7gG28Uf79QDKGqi/3qjLSyBzzSN2aQ+ab2G8mRa6MwpBPXrlxMBBw00L3QwNXaTHLtE/PXhAK0SvNAjpOyNBb3yhjkm/N9paTao1LZfsREBtvsdnfZ5EyLqcgaNobNM8Y5pn4HDAmQ4AZhDNIMriR1zNvYuMh1VxmpvtM5EIvZkJOau2M9cqFcERVVrA4sg2RuB5kqVwYYBNYx51bVCteJonUEpIk/xqJNRBLUgtRAB9Kibm5aig/sadK2EAWLRZBC9Z99vtbUHRWIefeqza/SeRr5tJeFApV1CyitoOr+byJ2nLJS/yTYXJsnWwCLPLPhOQLo0L4O9J2k2F5/jKddO0jtK+BOeiPZ55AmUGYdYisvpGX6TsRX0xZ5bL10xKU+i4S2oy/7xIOxgBa/W2MF6ARa9eUMKsllgyqf/5st+itlNpr8FCZ/Vyr+zp2/IQ90guzVb62wvP28gu9/cEA3yKRSwKdelT8BeL+CE0xWuh8U2Gn9s3a5rDH10LZslFtcu6KYHTDCYqd/9IrVqAGbzIWpIXnXe8ANkUJ4DXd8Zr0r+G97nDDjv8J8AuQN9hhx1+E4jMrUggeUYs1WhdgvNnUMo/ktC9Ju8tBuU1aV8Lb1n2NXW5hjF7Lbxx372FJvpV1eoJ0TuJClPKv4eDN7mHq96F0fCVGH9jAqtWtJmvIwKOqhF+P81NMcbuAsTM+zOdC4NAGE5yoJkmiZU1n7MKou/SHQBSDXNh0BCAO9Uol7OxCcAgmhwATpovwXylm/lGCZ/TAQRg0feDaqkck3Bi88Kacz0/Mgj3s3CKLffT+QgQMJ+FKfN3rfuH6R48Af/r9AQw8M+7h5obKeZR+xzad1ED0PXBCO4f7kFEePr+JDKxYhq+zap2jn0MzOmtNPFDc/6+YV0pdXblXptOo1emse0XUg8u7gfsG1mCNc5x22nKeuE6UfgSjunXaPWixWMzoy2IebrCG6GhlZUql7ikZ5hp0yas5GFCzPBctM6puhqAavbEhiymMS/0MUO1LyPj0OVTnt3HkmQjfz+J0XZPTeu167F+3oSYOSoDsPRBWJM1jeCS67P+YzpBtNDVAgcRQA8wpmm9DIHabk1/k0uneXqU/dj3mk7s03EdEk7YXHm0YqK27xJjY4yTrKWkXLliWNdZNint1wjNYwX8eHVra09Li2O41Xm0h/qmsbVU9z1Uzb2SwK9pzC6LOrfad/dsa9O9+2Smrpv1yvVTzMpDcm2vArPnp2fXpjRu19h2ZW8KeC+QjZ3QySaO9VUh/bJeBHEdDO/Nq5VL7XtdRMLzqKwNGO6XG5BZXKr49KPsvUbj0tmvfxow8KGD7ImBD3ZhLazTmmyziVcwmvtWHkTeeNC14NSLy/1sjPQZea9h//IC8MniXe9r2qD33YclW0MVjgzcaZx7kjVkovEUGSJ7CzyhaqGv87Rdrq73Vrybn/7CX7jgV3yHpwTQLNrlSbTLJX1G8bV7XuRMMiWAZ3hBrz/OyF+7P5kypWHNSGoBz/Yji1n3unZLt4tVSTTQAQBZpNl2AbFcPkxibp7kl9Ok1TdTyG6wEAB8EKFV0Qg3n+el8LLlr4eyR9LRe6ulQ82qG752SYBqL/pEZlWCzWQ+zmAsIHehknWvkd8nVC38DvwdwJmAf4d1OA5L8g/J0ShZLhdCTe0n0uISaMngtIBViI7/n723748jt9UFH7C6JXns5Leb7N58/4+XvSc592TskdTdRewfBEgQJKuqWy1b9hRm5K5i8QV8A0GAACOl3+paGuGn8gEXzu1F+j1E4IK0x8jjiQqPYJCs2IbcGEuTvv5WnB3V7d7uD1PaMSn5YQvEBlijOSOC5cK9pX53f/BecCvddDxcs0fcnMPbyjf7BTPLC7upf2Jpnq6VoHyFDxPn0UesB11j8uRn70CvN1wduIZxGu0Jdthhhx3eDrsCfYcddvjg0GMaLbPlv+3wduhKPK9Mv0MF76VEb8K+SfhnIwAeCMEbhY0Jy9POSJVsft13TsIQYpBTokdmBKqV6E7c3nnjhb0tVxs53xjsvgUXK5VC5rdsDmNO64XmDjrIlZyWcC/Ofq38lXIOCf7v4wMYjP9zOhXpl+2nRvhMKEr0tuQLRxy6Hjm6KML2A6BCPkH0FsVGzo5KQOWGuROfuy/bymqSsHumwbNBdjRHb1Web4a3CgC2ChnQKWckTV/Ah9WUVYQhMWaBr1XIl2skucj8eOHEv7XCVStjDWosOTvCsSa/pXYp3xpv64vu1zdAUyy135v8R7Qb0GtYGecy1okAOgP0hOKTFUmYlQWt8mddxPdw0qLVGtEKZ210PYwSTRyhUWzzyo/aR65eDRpUtxm7vy4/6PjCTeQiD8LOuJFG6B006mTTyP8qa2sYmmTmQ66JibuhuLtAb0xW0tH60zJSvj+uLdv1GzHAg4uZv0vjyLUUs3W/EJLb5w+pcLhyffyhYGmI4WP0bu5eVa6Rna+VfZSMLqjn7BJ9D4LfqcPwWbyunAab9ENXzcMOTHBeREw+k3t/d3gC8Loaq4Y+753cqQdwcrWSlMzTMVmSh0NSKANFKUoMDsHcC54s1tVNt5xRg1pBluWADBtDCEQpD4Z4wHM7Efuo624+mKRZEkCTrM1y0ohi0W5LgZwV5rqjgHgm4RIPn5CVu6r8Nkt9C0t8n01k+Km8H5C2Y/VhlcKUDdC0qf1iqn/lncG82KuUOgrfCq/PIdGGb701ujNwyfQJA+oFKZCtoXgYiNLWkQCakzcD41Y6l6QsAhs+lxl6N30AgziNxxjm5I6eYcZSPckYcKjLd68QvwaKVr3Uf4cdbgEC7CAkN5a4iih/3rNZjpzmCovHjRhnsFWe/yysyw477LADdgX6Djvs8FOB3fj1OK6tUhYb726SmTvDW/C5R132jdfdwSvR7wWjfXIOHylidLO+lpkVRPTi2O+Mr0z40lGiW0v0M8/4cnhED57EEv1EAYy0yUoW5GLTLThPdASD893mitUUDgA4340exM3pIx3BKJbnHJPbRBYXyEGtE0TdHrNwJm0dL2K6VN2BDsI0pe/znPJ9vSQ3lY+HT9VMPB6Spfz5fAJAeD2/ZCt1APiGGQzG//vwCQDjf59echmVEmaRDBoliIswv56LHHUiI1TdRi/peEzWNiex/P/tE5gZ5+eXBXxM/oGKm+8sLAKy9G2VpL9Vymuk5ZVCVDVWpmEzjihzpNfWt+KxmNeSQMGMAxumAs5FV+5w34ygw8rccv5cf6v9ZxscrBZCNeQqZERFY7iaO2z61dbD4mdwidtcvQ/HIKEjqLXxuRoaFaY9xfuSzNeDzVB/1ZytccVZF+KHahbIB0IyJwSginQQQCcQTSiKdDIZBJOR5gXTxwYniy/bpHVFSWXq1pov14ul7Vzlcnv6RqMclYzims2/dT9aGiJB7mBFfzY4XKtPHrflvudMOyyWfp4JjtX9sKiqBJR7dfs6+6WF3pWl4VvIZdX/vc934Ce3ZlFVRe/zHSjSr4WXa+vR4XMuggvJCZaw8UCahemQ3Ern4dXjt5DKtp4CwqCDqnR2rvl5N65/HrO8HG+9bIFPGsx1lO6zaeeD/F64VfreiguAdi4TcOByPbOPqtH8feQPkk9Pkd4r8pqmXLv7/BpQ7w8KR0qW/wpK33sk7jekvcpHgGZ5MAHZ5foEpgCajkA4gA6H9BvSPmKmGXK5LkAk1twTqFKiB0ROPHHSdRuL3YYnSetv2o7I4geWNU0a1TYvdy6HCnJJva7nMQIx1OtiIHGFLGu4/GZ6TEBSngtOxuNMZRmaQsy/KHxi78B05sm4Hh9kf/WDlBchlqYpLOU+gQODk0m2yWCS8XdKv1Ft8/28JeAvBPwe5Vw4A5+l3G/RxTVpPJ+n/JJtCwKICZg4HbiIAUQzOARQjOAQQbHGJ0ZOhzEIyQpfT4MGcbevrREiphgQLxGR0z3rafhJH3XXZXLtajtF31aIgD2MZHm5NRjub34RWDpQ63nyjwh9QvT9QfbE1azQQzt5n1H+hDIgK89juh+E5ZqEbH3+oRt/hx122KGFXYG+ww47/CSwQahZfe+99wSNH5l5uxW3j1ynPzlYJfqC0Hr4faR3aOJ+A/DZSnH6hfUs0a3y0Ke3714okb/3lei6wScRFHy9vOIpHHEIoS5K4ABCxISZZpGJsM3GKR0Ui+Lq2Ip46m1aKcnqYVToYG9kZEcn2LvZMwiTWHqmgwLWrr3GYwSPIJyg4jgyCmeg78KdTKZeoEtFENaz8p4N/pvuTgcmCpj19nQiBBEGVR5Ru4JkCZwCgJiU9xcfuSP46uZ7Jd1ejO4kyNk1tRFwka+QClBR9f02MP3QpB1leE8JzzVIu7iVFZLHTR9FA0DqMtVIcfN4tApER8yaKwj0Elc7NjrtoOPfH8JYqyq7F82ee8JKFTiv5LmtsPWoeVhySa3NJP8wHsoLiSt3Qi3AahToNnOq0VpaWzpI5KJzPiyuS9WyBABicms69NjQbxeq5p22gaMXOq6i7bvRhM8dW771pvYaW2nvBXcNtdzDmvkarf2BfKnlBX4EC7mlzO+O1xpdHqVZC78l/Rq8tXEMAbw3VE24YR06mHnir4G12ayVtVgVKWPrGYgLFwW/VaQvTe0t68U29uv2+IxEI1WJrlb+6obbkrOb+JprQd25X2uJ7oACEI6pDmECwgQ6HEDTEXQ4pncAPEXEqFboyX07TUdQkMujeALYWKLn+qubF7k6RD2bc/nL61A1SMuht9S0stfwuE+UDuBEFgU6V1ste7d4zOWrAj1KO1LBU0k39fcuFr+FRk3fWRTFdmB3+DmtHwNpr2f2KMl6Xk+FmMOX2ngRcthtgM9fQzlE8xnIE/WbPchpBqxduyp+R2PLAQWiOpoe6g0EkjFCsiclsx/hi95TT4nHFb5HPSEQESYiURBewGEGzTOS07VYLp5PGXeqTQAFKZNR7ojnDfOyQ4RGfFwv2U8JvQZ5d+L1nWFUn7V63qkdqLY7V59JrMx/IKHD7ln4d9KDSzEmjxRR94bFlft+5/gOO+zws8GuQN9hhx0+OCxJJEY7gqV3L+nwUoOfdjexw68I1wi0mrjXKNF9PiauT2/fKyV6DV8ZQyV60usSXuMZERMeQuvSXWV8R3M3uipmCMCFk+r2SHIHejxnnBnJ8pyB7LY82V8Tgt64LkIS9eSpd6un6C2dCTik6k5zDmcrKYsqTkpt9BpfARA+HZ5ELF23v3fy/u9zulv9K84AA/94+AQGIyJZZ7yAETni+XQ2gk/Td14RTvZhTXmzTv8uL7XA8+WbmimtSGFU0HiSjfKUlKzHx084zyepSyzfR1AVI+MIRunjixXhF7m7IEsEI4hTM1qgHdP2sIJVMLxpqegIDtk9jO5EzEEeD7um9WCtj/XwCSHfE2/z4pgEJGQ1DlZYJ3VSN/85HhUZSaUE9/iocFbLVSW8CmclblNNHoS7ulfV5vZR2zTnM+ifUfPa6E2cDp1ck2v7/OQvy7Ehc0ctzVmV6DKewxkIAUQPRZhOgI5zqoTJtp9NmdUQpPycjxkxMLxPsrKsX+DjMmrS14KTjsNchHWXq/iI95Ci/NUyzXxlE7839nvDkDsRWr/+JpqOa3LpbeamD8ycbTCy1xZkkLl0upRPXboXOzh0YNgdqR7/z5e/AAD+6/evdZxfij1e2luM4rl5Msd81+fdwF+TsBWs9aF4wymTdGPa9wQ9HUgQN+oVAhhW1lpSW6v0hkXr1OGIdOf5hWuJ1y3V9egRyj3iPk43/4VC1/r5lrk3o9RZ01p32qv3ut8bLF17Qweoe3Ph2zgITxImpDvQj0lBPh0ACgiitImRxWAygMIBRAewuoBXV+55gOpiy1IWEKPc1E5J383VYS2q8SQ2nklQ5jQr/sqzMORC7sRamXlIQsfV+3thYczBwqrcmN9Zca9OCCtu+kj1vCF04ttnUaqrC3NVogs/UJRqWq5aiU/ISvSZgfnseFZHX/8vcdf+H4PzN07W53/Eui0BkPOMVC+9pK2R+kTwLMekAQTxNxBj8mQQCGpdnltZln6aAQ6c2kAYk+yxQA46pPRy+OFi+b4IinLIQPtdETbW+4VkB+gxiL71+YBxUSt3Cz36aE+iV3zeB4Zb8Rt6nuK2We5Q3P2gtzBsDVsK31Iyu7YotLDsl1V5rjRYvWDEdBgFEcScPTGkg0Kz/IryvKIFt+O7ww477PC9YFeg77DDDh8cvPBqJMW2G78lJmyUx49nlXf4E8KWPUMvztI0qMKMEh1AoxTL6bidDlcr0e238qx3ohehkm70ATDhLIrrh5BYErVZsGKilEoEZsaVO7OnD3VjqKCk5FPbZVR5O6FRMCk6tuiCAwoOHeFpUQa1sCivUFmhEfQ8AnjVOw5N++WaqMBI8ZmoWLxEEK0AACAASURBVGdmpUoPSRt0hRSlimpefBa+yCltsqdAQHgAM+MSxZeqF+r1yqw+X7nhVtyqaaACLScEBVAr5u64ue9Vb6sSY+HQSr8g12g999lkvmsjZYv8tTKKojsrNEGAHFipUKkeHF4sFkKZfii6JMO39jZRFLRb2s30r48/cjPs018Dq8NlpVGtXHkoG5O21uam0vYq5CKhCVmMbIdyNd47COfyzTgw+eWwm1gnUzkuOarbdjK4tdlbWkMybmaUwxlcJ6xoEdX93aNVVYH3FuiZtlSX7k483l8xfkL+lJHWICApRNbibsnvh4OfJ3dE6qeXHW9pC7ly4hkAnYAnz+WtwCR/Jxe+lLxR1rv8Rq7iR1tFX9YjpfF9cXG2Dg2/RL/XOMjejLQsLusHUOP7Xdy4X3Efel6D6nUhoRzKn7h0RziIS/cJxIzA4pKbkBToFFIcSvekpzvNrfLclCsHsKx6unHJbnYSKQobHoZN2wp/m63/JePAmaXvQatAfay+VvsuHUPcOyHBsl52eLtqj4d6PGg4K96GT89uyZW/0IponNKG5TDbwuT4H/Pts2nXPy6o27konRO+HmGCKqYL2689WPZWmS0UbwAMrvZt5UxBmi/EcnBarGgZnKZWEAU6yFjjM0BT3n4BLF0kbUKyl9UtnPMC49mV0nY94rTIyDigugDLF36IdXYFdCx1+aSag+pWp8cb/hTw/ZiEtDSk9izNpfsNmVWB8lUaxQI9FOtynSdslOf6rtbpVWf8tB2zww47/IlgV6DvsMMOPwGMmKket6/b3KD7JxOjx3zaTch7Si+uhZ2B/GXB34W+ZdhdMzSbuKJEX8vsWnfu3TJrYc5XEL7Ic7FqBbLiVxQJpzjjHCM+Hx6qW3qLiqHcjf4qbgyZIwjAmZPlud51rpbkxMBEBL35Wy3ZL0lcJqGMQ0wlzlkok/K/yB3qx/CQ65twSuVcON1jqkqf4O5CT0YMjBcVEjohxfH4AAbwF7E8/911xz/PzwCA/3V8QgDhv07mrvEsgDFtqaB96AXD2rCzRcZAljhcoSDI2TjpS2+sathL6q+X0ze0LkQ7UsRFCYgtX/OpM2CvMNUyG/nTXAQDau2qcXPfyYikqbIWWgc7Z9bSNZJL98VJ1bxC0IG9ta4tWaW5JjHLHMjoGqFG4NROtkArHM6WVShtaeM2SluHi80rCzKL8JWqbh+N38F7ozgfvCwJeHn8qWl7K79uvFr0cOjk5+sClHbV5g3iecOHK650AkBFKU0Pbjx71Dr94ueUBqMeHvW8MnNnCGVc5uj2l7jtt9wOMPmTeAAxhVmvJ7CImnZSelNdqerpmNJaN++67KTBoRrqnblPQDkmpuui91MygEUSwo6G3wjcafteuVXVPiDf+rI1Ym+y9b6jbpeZRYi8Rt+5/9wrzlq1q8nrGij/Zfvhqj7h27tP7zx/tuX2itA5Kc/PspbwE/DpikvPRQ/fKNKBQfcRcJFJPm2YG45Xy3nOXNy4W1CX87cq0S14q/Zefkt52/AZfRf1bB7sGrCJ+NwDSiHZUnt4zUcntVqgZ1qelMJMAZECCAEcJlGUi9IzyIHaQMgK97LQpPdFl/a9e7p7dRrMAUsf9LCX7YcOf5hiaT2VBjzBqvNTRHP41C7K7OIBSK7Bgwvn+pdeATwW/oGB4s7BKu+1GgGYhD/UPKLmL4o0NTjtWcXnNUuePyNtW4mAr5KwOz4ss5PeyfRX+iFT1dKpbMIymVRWQfqGYNiHKd2PrgmZQ7qeJs7gyJjBCODszp0RADoUxWK0bSH5xOSNi1UxD8i+gnINCoek6HcYw2qsum9b14B3m/93ylDrYfm0Jcvy/M7um8/nrli+I1yL4Wi+bAmzR4SUxpKsJWJtni3Ojdt2y2uL0jxyktUgu2839E/KKn+3Lpo77LDDDt8PdgX6Djvs8BOBMllWIuC5fsuUjRhOH7e3kfyzw8ffTvzUcC8l+ihdE/4Od6J3Lc/9e1Gik9xxzB0lurp5/3Y54XE64GDcRFuHdITkkv0itMDWwm+9mBhnXECohUVGdOfCKb+Ti6V4aMws1LBWPCoDsgUZhJJ8SwQltN7dLfTolkh5tL0bwbwiBmCaivAGQKN498XkOOjHs/HZ9sJK/Px9JCS2wqKFMqtirtx4N/dta37angzwlH69YFJdzm++PJUHzwvRloCsUDQl6o+l1k6qjF1N6+e1By1LPkYVZHYGeuPyXf4x9ETnWCUU7KLOIP+9GTL19zTcO5XQocFO5T48APEOPABjjJu2b69Y29RWmkv2nUSAZd71TvQ6csGDgaav8nB2gslmPTCeP3Kbmjmb54vOlQ1zU4u07FyWq1Huv/Rs1hctWxUgqmTw+awW7INNm+l7tTZunqyd+Jovd+hQCl+dHx8SbsT3e7gPf2+IM3CY0PjFvlfVQsctbwNeKH0lErfi+smU/dtDGfKxp902Zfm5+SKm4o/nOs4SqHX52YQ16Vwms/BDPUX4CM8ZtSv5ERzQKtE1n63wwsATFSX6laxNRfvscw98vteW9Z5g10YbTPahWhyReAtChNgXm4MtpGufrknKBjNQlOfkaLyuNWze5e8KhX8NjKJIar5s4I56c9zmDWmWV5STJk0hbsEFCu16LRGreCf5PUsaOVhMkMaNcn2P2Yt0mm2Mu7TnZ8HpLwT8vuWOZD9o7Xu1mWnCCkqUq8I2KoDsBSyEnDQwIcYo5xMi0gFxxswATTEd3JimdBAqiIecCwN8KXuMqDxUgLqCL2XqN1eFjD51EO2EDdvoJwGP8sLQpxxePEQ0h6dH+X5YuJbGeF5yS169fYnyu5zOlqryvFKcU3qedM9BZr2LwDyDrbcGddfeo6Utgdhhhx12+LCwK9B32GGHnxB6u34frqesg9sumQ1Tk2dvs/VnhFsFAztcBbco0Xtwbbocf5BwsxK9k1dvGm1QoqdkBBDjdb4ghpBdusMVl7x4EmY6IAKYeZZ9WfoNIcUO0DvQ0/trPJeNocmZwhGEYokeYsLnEJLwSS3YyUhQCUCgAwDGUTVPguR5ShLUedY7AwEKYhlBJAa8jNPlVO4PXKA3/985mdD94+EJAOGfp2cAjP/1+AkM4H+/iq/NSdo/+rxkY3uuzCwFtxWad4sAuEpoE6v0Sf4uLqqXb43eF8vk0r8jAefISrQBvZ+Ni3A1V4DM960wEHjmRz82O3FUeEY2wBwkqZLr4FOcjTy0yjea+qnojlDVM4c5QZwtNCtKucTNhw0AInXC7vLIj6r8VEEglSIgwjAzXpvulbmUE3ldllqwV3JGJ4C0CPVksJ4uuvIrGI3jXgRGfT9tzlPr48aJVZjbsZCfVdjt8CYga5voIYfX48LjSvWjsR7pDn/K/wzG8zLYEVIPZypfc5vKmCD3nBOaFz8mqn5xnZNpiBNkW8sZM17K9QKcBY/ZwrGKq8ktDTLjWqcY2N3Z7MakfcmWe506f08g97CGwnsrzl9G+a8xS8MJu/z9MrfWzTouAbMud+hoU4SnsZ3ym/Uxjc30Y+nF1nZuZtwVwGjSB+M7nXvK9EFZr0aRfuGF7jJteESiid5ye0ayjAWKu3aNotcKbOWdNzgBANAq0XUN3tK0Fhdrid5Lv5RnZ23cnFbhu7hx70Me0qO1Nx8UM3+G7pSRqDxNuaNbPUaBuXgWr1gOQj78pRlquF8XYH+rhbsOIxevssBMOBaberMmVznaELtKEoau8EcH2CrlueL46rI9mWXK82sE4FK3f3WI1liaRpsOZa/zhYCvLu/PBHyb0+/vrk2btc8xLBUd7E3qlh8iqRtLnUqORVmewzhZl+fiKN17ntb5mifSe9atVS4d9cRGsj7nGcmCXVzBp/UhNqMo/RPQuhSzDCaVfmoOBi8RCTPOP+RBtg7f46deFUfa2vJLG7zoeO5pIeoHgdH49uGjmq1nFWX8puEnCvNgXLVnRbom4tLW2eLchFt37pmmWlr4cVt7hx122MHCrkDfYYcdfkK4F6NlNyA+zEtbd9jhHaCnRAeult1aefxiWPNtEGmTEl3efV6DuItK9PquheZedAU7Y7N6T/BkLgIohgqiilAj16vJDaisF1GLprwoi3OK4hzb2ocxR5DT7nFkHA5HXOKlztFk/Re0btyrPPRfAsD2HuL0dAgBs7pLK5IXV10rFeK6QZekqovWDaibsonixhezcSPvojHSBj27Y16h9Q0J3yqp7pQ7At3g01S/a+KrlyOfQN4rF9T+2TwG354mBQ0+aIgXhnaRlwaxngA0rh8nHatcymWIwFnmOXFovMVWGLBR1Ff9qd953NZkxrWTC5c8ua16NW7ZN+AdYUmQRW1QDjeCUZWP5bqR+dPHklezVFBJlkjBQl2rgwrlme19mfk8Dpe2zQXYxqU7C2cHwmJyFbdgG6NHn5px0EbJEyzTQa3jNTTHr3Xad26SNvN0DZYW+07Ule//9fvvQzK1CmqRtHbv+TXwK8hW87o2qMxb6Q+RuCm/AaoxfWsGo/QEkFjCxhcgPJo06DwLvB4BnBKd2SqtepT2O43aeBCmTNxSGp1iJwaOHZp9MGO+UaJjTCbI/fbKN2T+arLQIw3N4ruCww8H4cSprEfl3BDV7YOyPJGsR0xFOZpYEgY4Jv1uPlRr+3TQEGQ70f768W8alnrfah4ygJ2frISosPqyrKZKMr+gPnBbBlA7NMisWZqvH0yv7dj0aXJ0s5AGMq6bbfW4/SuFl8evllmj+r7zb+6wbwVcPRlOxVei8x4yn0Qmr9S0cs1YMrltSiQKmTdgIRgUAI6cXNfHWsGdrpoPecyGORXEzGkdCBEcZ7HaFwvdmPahdc0JxSDEjBsdHFWbXEsktvIuP5Aw9IYPmxf2kQ0fuLRn+KWg1z8Le46Gv/Xf9QoCKNFN6+NkXLYHMmwqGxaCRXlu5n7eH/T4hAHd/LiL0Q477PAnh12BvsMOO/yksLTzX5YOtPaePUbtI3Ddb8VhZ0B/CrBWHqpMv0IenmEkKMth7i70tTL89258Cczf7LvbzOojo1GiZyO8LFMhnOOMS4x4nA4IFLrbQQLwiAkRhDOJY3dRxM2St4qU0x3pjEksyc+izL7EGQDhSFQbfsUogriL5NO7o5MRwkM1Ux8pvR+nZFPyenmV9Mkd9tOhuFWMAF4ur8mFfW6oGv5+fATA2RJdK/6v+RUXjvj7wyMYwL9fX0t6FSyC8dvjIwiEby91+qq4LEdZEKjkPCXhiDyNhLX5vSPksXG0mR+MQLpy2+w34GsIrICXPfWQYjKIpTbiahTa6LZ+o2eXfy6jVzc7KFXY26k/lTGkct66akagUQmKNaKfYf7+TCeMtda59t140a7bdC5XcrKIXPTXImWEtFbXqBZk7bKerkXIn2Kv/00ia1DfyFtNQHD9GlyC1XFu4undgVU6Nx4aK2Qj6GbTTyrU8mU0hZcDPkRWuP4oXzXRGao7SHGc29dGeH5KMeloirLE2+Blx9YV03LoerNCSg492fa0glV97OZl8ZF5Qf47mTxdvp0shmhaaOZZZ5H1c7PJ8I18YU/GbtHwxMPHXaKTFg7Uv8v5msMUm6Je2x7DSXNlvBEDtUC/K9ovz/ZAlM7ryG0SH5CzMnmOUHoP+PQAPJ+AZyQ37pnOLSBAojwnAHhEumsZ612oyugDjDt1vst0yLAln0wCpeyeIl3hCODc0ow6DpU4tu9eOR0GeKT6MMCovr3t7wj3H7ItfIH4+i+QafWtCAndDlyWSpOVXUM48xmU38uZJap+GsifOb+m2cumDvYPJfNqgZD46s4YeuCXQSzHfhnZepaFHyBiubc9ZRhR9ink+92zFL4SVeirW4/MWO5eo6QNIWtjMCdObDsYa+qK3inzZ9vksynkm767dBaqDRp3eNzSAFUVciTDn+R+LWOi9F9nMEgaEt6M5aIADgRArwowkfRgASG11RRAOCArGAMBM4HjBZgVGXGDb/jk9KcHvKsBLnE83yy1tocdKr615bPTwHPrfsN6/BDCkaDyqKIPdVuwDRvyfTXQ4PnnAkf4mm/tY3rv8B0ZzD3nhDRWJ0rvU4qvB6XTj4zpGMFgULyguqaChR6wn9v3Wrx32GGHHb4f7Ar0HXbY4SeGnmCqJx3cAveUxOyww43gLdJHsCS77Qntc1hPib4gcfOXdVsrKV9W990EMuMrEb7kbFL+LJv3dDc41YIBcel+CAHHcGg2vJq7Oqg24hOoBXrvJmg2CGvcyHWeyL82tN9WXnbl80nV58Yy3ddnbIXe1mEiShYOWQAi8awgCOkGv0cA33r4ZwEMmyJM/w5pIrnm6HW+Q73JaiWO3tkOrt2t9gQj3TKWaPq14hJGrfi3d6BL3dk823S9vG4VRrHp5+639XzrGP35od/sT37xd4Raxa8VwPlsiADMuf+qoWPztbIyW5/IyG6xbdeyi8do5llXZkNAdSCA0ZFIm7hvgg0Z+PlnBWPa51Ywa7/ltCxCK6roet3HNPhtcSWbr30kH98IYHt12GoJtNZMbP+o0C4A6S7ReSMb54R39moPcm1lq3I1i7g1UU/I/VZ+dCGPa7JejMuLrzfD8DqLDwiq3Ip2cFro7VMG8ZS+B3TSbH1HPZ7fEz49FPrDAzfSPcg0XJTodALYKFhHdEAV6b37yO2S/EBF8XzB+0i7GKmMxwWidZRvXpGucOZaiW5Bp6+tiw23z6P9AFxc+96L4+Hd3LgvIFxdS7KUhZlvnSWTNQ4Z60j443rCPRNVoTWeDLUiJzIrKQOsrsqreV2qkXkiQBT6yjOldARKQ7ay2NY0Zn1nEpdbJMr2Dr6UFPEFvKcH3Q8B6RCcrSYVXHseWFjSZ/4jCE6c27h22e6V56aNWCbpl4JTjvdtA83adLiu1Jkr3sOviX6seebSxKQyZtJ7SP0/TQDFsmZVY7H0IR2mZLUbGRQJHAMizYklxgXFj5njg3XPE5WmUx2u46Oqw/i1D1rne/Add4Yh78iu3ihjg937Lws9vr7z3nyi+rfJlgA6FBftojTHREAISXZDLId9GIgzKM7J+94cawt0BuyhoQQjXmmHHXbY4ePDrkDfYYcdfhFYkiB46Al6d0auhVu0Bns73g3WhvToey+8CrvGEp2xrkR3m/7F95I2K9FVyKFKdKsQFkXQOUYAFzyEQ4WuRetJ7jx/pVnyLJfvMZDvr7vgAoBBYkEx4ZDia8zICEb+/Ch3eZ7FdPUgUlq5eR1RMJ4Em9f5ZJALeDokQdZJ7gE98QnMjMfsyhSGJLUCjH+da8H034+PYDCOIkX+5/m5ln2Q5COCuG+vr/iGEv63x1Tuv9UifSQzqfJBPxLB3L1uo3UEOg2ppTbQJns+1WFqjrykHKjkcZrnWCBWoaNtN5QhmTWDgfaS7aoDFmBFWNW0txP4dQ8Q1HkluQYP5CNlbHCVv1oIhRIvZ2ZxiqiS6YOcQMmWX4S6iYjAFFCZlWchmBemqIBHwwmNUs0SAZ+013/W8txH7N13aocnUNO9How+5Sp4nsMntgIvLxg0uIY2elWWhluFUgUqPC+ZpNwfNp7reEQx4ZM/GU+lSV0HVAccFniE6Pqj8eSqa9FIqJoLcX82ixHvRy7fkXDxXOfJSMJGm19172xnQGZrL4vDghC8Tox+/f08JUcXqPrUzRYwQs9B8UvDeIiPyftqGBX4o3lNxxcFSgolC4zmnBUA4BCSkFnT6XdsaNYB8MLbckJb8BWl2/s4wMk1+zXI57hPADuNeLfLH5Bp11kiHTcUSICwfH3X6m8FtRb3k0Z5lS2wpEQHWiX6EiytQ6M149q8bgLfqS+jiN2Cm0NxYECvK6qUvqkf2hzqBiDVcFO6F52JjD7OrR9+vat4s85zyRoAG+U5AERgnsVaU9gSQZ+YwZGEvIt3FbECJfHuwDTVPFrmg5IVe/bUY9uXHgF+Tq1CCwyEZUstn613H1u+yLZ9o/yXdNniVN+pbD2t8vNbRH2Qe8AjazmVJyS4Bx8fZt3prUnmgU2aKtuyXpMtjwICGAjWg1j6Y9RW8Mnl9QSE1Mc0R2SH7TyJol/cxNc3ipW6NdbjtrlGjO8ARnn9LFD1K2CH2Rr4kX9XMvdu0MN6pSbN58Eeo+PCvdxzLu/VlQ0MoihLf6JijJiuMYgRxOxmY49OLszJHXbYYYcPDLsCfYcddvjFwEsJrtxU7LDDjwZrhT4SemHley+8CvNKdF4oRwT9lXyfUWkgr1Cif2XGlyUlOuQuOiMhoQUlOswzAQiYxN26WJfbOw6zYI2ginpVIwbZkDIYM9e6J+489cr3zTay7rfCQK/i+CuA/3RT2fI6G2UvEKkE4kUolNNWBatAaiDEZZeXhSBCH1UI+GhVeh6Q5E6gBgUUt9yVEn0N39XAMSxG95I7L+jz7350RIwtRnqT1qUdXtb6PcDX0YRVAlQ3DAHk+7N9nVY9CvBw6DWo9N41rBrDo4jvBVeUVVnDdQRbMMHV5w7N1aAo9LqDQsryobn2tEZ/MDfXAnv99hbr2FzEQBh3E7tXaEtNV8satYCIwBnJZ/NSGVsQo7JmzAaXiatqVnh7K6ycj4uHFRTeIs9k/+Ln+MaMM8mU8cqnxeg/FLZMZx8n34N+x/LPsu4ezB25TX8swT3wead9Fj8gHVhRMEp0ICmdCekQ3xZQRfq9NSivnFCz96BbGCnILTy4OC8MPBl67704e/7q1uVs1HV379IXAE83ZEqZXyYqz1mZujDeqyoQMjEnyZOQDvWx4Z85zyFGtqzO19V4HqazDpHibKtgeSRRNM1zxTKRPkTUCnfjLp30kE44VrVTRX3lNryCF+PSntEozHLdDM+QvWFQUZxBf81pWTZ1q9oE7p3a4G8RoN7VWBaoLifjupKsKZ8Lj0pAvaftra8mudm6pO0q5X5OXcO5fZmTG2uOMY8fBpLlbki4k1jyp+ksyvMYTAGxGKTnue35pq0T9B3o8o8G31fV+/fk639S2HKwiwgIUxnrQX8T/bD+/sAMijMQ5zTugfy9HqXc+dthhx12+LlgV6DvsMMOPzkYyUG1U06/LLuQzMo5+TM3afz7iMEbbRI9vIWRX0r7PRjPpTKWJFD3xq1XVk9D0pUc/JxwkxJ9o4DaCg3sB92kryeUICOIYeBWJXr5FrKeO8lv9KEUeY4Rl3jG43TAVFnKFtzSDb4HnAmYEcGclOngZPEx0TEJOJBcjkURhMyRMSEgZv1kAHPEFGOWXwIiwALhEpMl4kRByjHoKP7MeJ6tpQ0hiMXZ8+UFAOHpkO4kfrm85Pb4a68LtA3EIv1fTjD1aZoQmfFFLOb/dTJ3oqO05b/yXemOxkk7rCs0XbqzE4CJRfrT4yPAwMtLx9LIC66o7sMKJ2+JoWNChWA2fg/fxoK6CL+a2mwl9/bu5dwmKkisJKcd3NQCyCPbo2md90ZQqX2m85HLZy8Utgq6YXmV2Tjqgd2YxgzpU49qs0/bjYlWUGhRaBbvto2rtx69I5J+otxGxRLUjDF9LgSgTyctDc6W7ppWEy8cfPDjn2pVLtOh4JEF2UGEXFrWKEzrRqYsId9BW8UqKlU4/SDT81TeszAbQBBLbD4mV46McvBJ28IKrLVQW04zr3ROFmE0ZncwByjKBv1AyJZdWdA8Ykl8mbk9tWuLwq6cu5K6ZEVIqV550PrIHLM45jIHdMoOrg7JqOIv1aWqE0o7eJJhy65w03nB6Ge+xGPIt4vN/BbgxdfVtEuGrd2MyQUN1pQM7ru3ghttMnxxvTkxWH4X0T4E4BLT3+r8Wsv0GrgljUuem753MExpgPIXfyApYJPb44oeKypHM+6bfuFBX9xaD5fuhKQEvxbUjfsaHCjF7S17/jm/s5AAxzfBxvXzTeJ+NXHg0tQZVOHt2tvjN/wktTQnjYVMPqkoJ0tWATQ9AtMjwnQETUfgeARPR3A4JCttJkSmdPjSWl1LE0aKkiULzYst6wZtnygxOSlIdZ2t1jmG+rEi5qwXLi1U7gRmFgWrKlcZ4Cj11LuDTbvSHLLSFSGC9YARtEqUPGrlAwayjlZsRSj1Jl1TLU8QC/1i5YsCSFzeqAevyHOp84x6rW0ODBsEPuvaIhP3m1qn24Fj1+3enKBSRocFa8aa8ks6tPw40q63a3hv7WOAERARc7bpgUzdO/kb3GbowXDtFwLL4WOaDpJUBk0MZhykzImB4ifN0naLb2rvfFGBO9RaA7n1zuTl+YXML/fA5+36pym610YLaz5Ti0833+0wwLiCt3Aw7wOeeVt6R6J5wew1LZshfVm6n8pUVcX5dChKc0PriIHADJLxyZcZPEfwLDQtpjEcIXSuvHX+PNhB09sr+nYYwSj/HXbYYYe3w65A32GHHX4R6HHWojgD8k5SN4FjqyIL9gjwWpn3Bqtk8Th4Kci98RjlN9pSEO6Hz1IZo/K2pP8ZwLXb1Up0t4kapcnhnX5aclPc+3YHJXoK1g0aOSU6slA5VS99eJ1nHAIba/QW5wkAYcLFKTMCkvU5I4JoQnYZjyTkKCenCaApCTJMU5atZ3o6UFJYn5JfUWPpUeKXEBUuiCCIy2hWarMqvxf4Kwj/MZGISNR0eq+8ycwLpypFF9UEsXK37BDpjieHsFjLfKKAl0aY0qET2gBVfV1A132njTZotCa4JyF1byvkPrnW7EVqpE7oVMzM1SVYEPEsWfqIEJCy0LCzbqjwtztreJg/VxOxRY2Ca89ONMr/AKs0PAuRizA03b2n+bH5HfdrLt32WRYWaZtQ5xd1l9plp7ISN3Xy80gU4YQJjZvijL/P073b356wy/5lF4sG3yB9XrWrfRT+giVaxkgVCg8lbUYtUSzyxLoMQRSFc28eM7xA1o5I25zRWeySeCkhya90kSGmmaZpf9b1ruqT56NQdgp1NB3zHI1LeTMwurSTUBQSIx7SjDMtXQ51lAMvpS9SB5n8s+KipalF+T9AvQAAIABJREFU3qmrVVu+tnWeR9of2fKwyrJTDy5xyUTMShI3h9YWtpX17g2Rr4PBMKki5HnIqAW9oUNVO4eOPIRQ5uLa0tDDbUDyroMrygaAl1e5A73Q56shT1FGVh7Zj5UnIj8nXD5AcnN+bOdDNQ89nivD8io4cVKiz4aAaftssUL3cdQKXa+Q7VRtCJbEsfC1hEJ3dS31eVKbvso2H8oD1L14BVb5W39AUpy361Adx63pxjJaD2gREWh6BB1+QwgH0OEhKSGnAzgEzESI0NNhhHTvduF7QFGUoVzwZRhL67walDWMWA5zSLpg1glmUSrJvcAcAY55fQxECHp/OjMiR0RZKFWZPkeWu4ONIjt3BWXrew6iyDVW+VlZJvirnCMr3e2ahnTtlOacctfDBCWYKKQ/oWmEpNRNZwU4edLI88rOU4u7I1IPBJzJuGy3A3A0oA2PRgvxMuOhfWx4EyDhO1vqbGmD9nnxSFaXz6nVyPWJppPqa2qu0mrx5fho6k+AprLQEh9M+8fKAw2FGSGy9JPi4+qd97nJmxtnfqxH96wFsa0qtYdVdG4M6bvvezTvFYlh/9BJbvuG9RAH4PfWLRpjmtJGXoZ35DCug4a++pfBohBCUoQDheazjDZ2I1QP+aq3iRDSWhQaJjBxdjGCOILndMBVleiJJshc8bxis44vVXCwzjdwF8Znhx122OEq2BXoO+ywwy8MKtyiIgNllULcIu3ZYYcfCIub2MH3JVkWOTfuW8rplmGEhAzcrkQv31ieCcW1e7GmS8KRS4yYccan8NC1X1KbT8IBMwEzLgAzLnxO5WVBmYjrRAHIkTGBcBarzAMOopuqS3iSzWkW/8im9CE8IAmpkmBhFsHwPKtJihFdEPAyv+ZwMONR7kx/vdR3nz8cHkE2nFWJnuAvOAIE/M7navP6t2Oyyf/3+ZQSqbTHyqtV4eo3n6oo6AomnOBcN+mXGWDgv8/P/SRWMKMVsa8aVOGkcahK0mYzEMY1wfeUmjvIdewJATr4V+CFSp2IVlA0UMSr8MxaI5W8NGyAW7dALZM7yZKQkkXRWQnYuyguERf9zi6sRiF9sfHdo/9kx9LwgFAv0AgPbYUamRWJjsx8C4qAesJx88Vkn+eZwZd8A2q51Rg2f9bi3B8E2ApVG6hVejA4ILcj5fczVKlQpmcEcAQs7b4KgSvw5rMR2ImmiVVUPaOrmGug1ykaV/AfWWANSYnprA39kJe3yhKun91NdOtWUtcjFTdnfCUSjbB4SxrfbhvH0lBm68YkmddMXml9yN57y/FnkRNz4l9Ar8vxFPSucOsSfekMw2o7ujV5rR9PnE5vXgNnLtbrXomu58B7dMbPzVv2CB6+rnz/oSD7AzAwX8B4BQ4RYY7gcATCDOYJRBMCwZ3lEQtgRqIRQXkZM6HZloHCa1meS+NEM6DEAp05JhmDUYbLRVJZRU0xgi+X5FlF0kSOiX/iWK4raui/HPzVAwWyxrMexsUMsK7V6Tedx5qQr8kCwMHw28Iz5MNTCMmDlN7pbfntOVmes1Xyk37srdsaTsn6HAD+j3H93gXDK9ybXmrJQ15E2jVFqsOrvxLaxjHLjbar9VrThcLfEaUrBaAHGZWnBkH8v0tWyv0KAaianxymnkjU/PkQHw83sGY5adWcivMSY0HVp0XFeVPALwY3VY3q4cpmHMnnDHpoaKKkMCfIr+H71aMLJ06bOIKExule800DBDb9DjvssMPHhl2BvsMOO/wJQDaPzEaW9k67sx12uCdYK3RgfY/SE5CNhGYMJCU6UCvSZXPbLUM2S3e0RNe0JVjna4qsd5hzJQhIggmOwB98wmM4AuRV6AlUfpb0W6VMQladZyGX5h/NZk73ho3+qoH01f5rQ0MQGpRDXWoRaI27q1+yWqLnuri+KfWUcq3ytbKeBBpr8go5+6mDi6WtjaLPpGkasVNbcr+5URZ6oCpmVA90wt9h4z5Ec6msrThtkYLfE66R0N8LrOBRypRx1wyrK7KslWALgsKsFBsVsjBm9YXMPaugMrcMGSzK7h6OTtBJLr5X5Hs8/O9bwJEJ52C+4OMEdZkOWkHcShEeXU/PxhnI2tSzoPJ4doFq2qHKgWq9yytJnQ6M5Lv82PRzxm2pI/JQ55LdPafZW0mcp2db8+PhyyDeTyREzXN1MNHehVT69ums0z9KmfDuS8MjEF6B+Ajgdb28V2mHone6DWw5W+fmjL4SfYsVOgB8Culu+0zP/BrhcOst0Yt8v3nO4cuV2kyHvwcwg+MZIEKc0z3aNM9AOILpCN03hIDshpgRRaet65FVENlF2TxY5adtZ1UoyTeCKM9jLFbk+pyVoMnvFTEDl3POgzkmLyv2gKIbImx4EeaY9jrqVUava+EAUPrGJBbqmkY97wnq5XAfzN7NexMIhduKCSkG5OCAW62bsSYvqjifAPyn50ahYfDNu4/T+3ZnGO1tfNF2H2HSVHs7Y2GfveM0WevuMPG7TAEUOLlwD5wOPminTXN27c52TyeHQ0nipTMi5Oa5JQh+rKP/fi9gLV/fNxDQhod7C3wgunUXsGtB3hT0o462v5bHJRJrdTm4EQIwFW8WOSIzgCgeM9JBIIKhW9XkGG6AN0CHAO6www47fCDYFeg77LDDLwzKiKnQU9VkAWUj96sx1x8B3sI879CAV6LfAluEaW/9dqMS/auk/SIb/3y/rbrnlXyTkCoJGvzwep0v7l70AjrLH3HADOCMSzrpL3eiJ/mDKtSRDbSncABASSgGgKNRqxvSEeX7o9w9rp8v8dzIW4gIR0i8STKRDWgUl4iz3MGrBweeDk9Q8VVVbTPN/grCi9yNPsm3fxw/Jfyks/T9n+fnIvTxludbZFWqOFhTejRkwAjLvKwsN1SPdpBJynX6IX76bRCx0jNcQa9Gwue24IUsVdp1K5i0WRil7UKVsCrV0Vj9ZF+TvYp02r1bbnTfuWrrYhtDVar8nFHWL95NYM9UcKNAjVCEhfkZeb5aAWczfMn9eqVFJUxy3306Yw1OlCzQi2vwoVSrKqfGz1TA40JUTglZy/MsQN/O41iP7NsS6K+OK5g/9XgR6zbm0Xhrsy2+iz2ehWgobcyCZttwtqhRcT2vFtV3+VYp0T22nW9Vmoy4C4+1cNlkE3475Nf59VTHqXA15ZPwtXbsbyE1ZCMy/vb5c+6nf3/91knghabvAd+Lh3QEoCGDvdlA1U+RGds12tJZv74yzAKE4jFhg7ZX8ziLIuvQOTi4penupmjvMYP3gA7tiqpEXyjWW49mnd2V43Up6jVVtnzxWnlV3zo8rmniHu4VDXZ5vvdUvho8ssrziTc5RIDPQGQwXRDnA0AHgGaAZxCOKQ6OYn0dACZZihjpOpWltVH5DVVV6nzVcHFhLGtOvrtcFeYxApiNJbreny4K9HguSum8bukfmr5ILIDwBarw0rVdPN9wmMQanWCv6QHNyIeLCQCntshxknst4SFkEOo+KyZFfGYj1frd84zKV/5GwDdOivM/TAX+p7+OVzDce7xxYFaork3q6+hD6pf0QFQuFUpA9bljw5b2yxGOWa9CihJCSGOL5WBElKsJYmxZXaa0lOgYyPulAc9qq75S123Qiajj+/rMOrzOe8ES8/cea9sWWKu4x80z7tRkUR2kD0pLSKzPIYpz48odJGNP6Fv2rjGDeS4Hhuwes8sb9hjxD7Xg7LDDDjtshl2BvsMOO/zi0EoNknNlL3Qa7t52uAlu3XTs7d6FniX6kuynK1hcCvfu3FWQMirHKwI02AgLGbjGEv0rA19IVdklrxSNs1G8lUknHXMS9rzOFxxCwEPoszaEpFy+iEhMFdSUv6rAoqgAWYVnS+OZLHVptrRF1u4VYxrHCtUJIHHVV+57Vhw7G88ll+b51dvXw0pc6mefSQ7uzMssfF2gndQGNVKRJk43UadgG3UJv06eZgxtK9NEe2cXk+8Kb8a9028b37l50RBvleRTrMy/Kol2aku7zI2VeUZ18bag3xqX6DLpe4oREUpTkFsy9Z7Yzn2CJe+Cdl+h64Rl9lWFYJVlusO1V6kRXW8rZHBi/2U5dZ57XL+TmYAdZUFFQ6k3vctxovKNi8A4y/A6tNLDFuWWbUp1A5yRi2bdu6BsrYudfo2+4Lk47lIHcz1Su7mVsHsRpBvzUYtbRrLAbSd8H0bryy3wfG/+cWnu+DWzB35wm/cQnDWnL9OHc+lm++kSTb7tfPqucM9huATWrZAvr+eu/T3aZK2uIyv0EZxZ7m/vKaEG/I1nPEf1tLjmMfSDGRiiAb699bGuQCIZZ1HwBjBdgEvi7oEZTDMCovDQLDx1SMtOjMl9eyUC5e6jLsflZmv5GOfk0twqvq3yPCubjBIdUUg/Azwju0H369egD/NKQFTcx1t+IRxQKcWzIh2JP8j9fkA+qENTttCvyQ5DNLFgubs9vbq1y7KTn2VSfqZ0PuE3Wbi/1YvBe426TVP8bnTANAADIBYWwNTT8xWmjdO2rh5olPtS+iPAnLMNaZ8bAzBxoXt6uFuScBTeijXDMp7y/rOzrOTfzhawtwy1TeGJj5nb7DPeAJYHfkuf9eQT12fyBgTeAp02zY86mAxNAITOaTWpSVltd/PhGaEZk9yZHtJzEJoRM38mL3M6pJRomyrX5bunIQ38SOZkhx122OE+sCvQd9hhhz8BKBdOUAE7q6VOLYn+Qfjt8HHgA4+BayzRR8K9q8J1zgzSjNJ5JTq2v/eV6El4lOQC9b3o6VoGFRike9GBy6IS/QETUqxZJRlOCJJoxMzn0gQMudMc+IQpJRGcZ1HyB7H1jnI453N4AAM4yaYxilRX70SfRLoatAGnS/o+13f2npDcPT7QAwjA0+EJAPByeak3xK4vLvnWxUT/znEGM+OvRPiPF4JZIchQQGL6q/lu8moDOsLdjnTG9gWAfM9jT4ag5DvHVfwGguYubj00RlIjn4Y7adw7ZelD+7kKHkpMx4HUCWO4+mvH2sgL/djUfYBXtlKyuHTefd213fKLPhstSL601A7mzngCiqVOkRDW2esf+29kSjcCSy0/qPRSvleW3PqMftOq8hwhKdClLFLrMFsdQv1gcfDV7imKiAyO8hvMs7YRUz/PEbDSDC2nvwCQfstjSS2uah8ESquz4J07fzKftKRcemTw3JfgZoyy0lx/pazhFNbx0r/yo1PLGitLK4XyJ+8oKkS8CC5GkW4ON7AqTTN+fp7o+Of621Ao6fNZWrC3wB2EnFfTN0cU813FV9Tj2Yye78bGmfmm9Je2HAiSX+tKufrmn9GubQcAF3bjojNuhnCHfn4+Ab89vC2PW4arp6HCv90FetmMsl7DvadEX3LjHrlet0Zlex6iw/8tQkNoAfQcTbgk94Ue/xEBf7hd+9ZY05LET3sBJLfsYOA8A/GUjL8PAM8MOjAoTABNaR+hVujq5ryiw1QPLbEqJ8jd5uoR5XxJ95hny0x2inOUZ7BRNNlfKdOvW72msR2rLBKArCQHJat2VaAHCVcr0lkSZqtScdc8GVoxy3uMMjYEJyQlemkYx5N/Cen1K0Bg4O9PAF6d1bnFf0DvLO/WMskNtPdi2/UZpX0dbODwB2AYvjx/Ep7MlCzQHQqFR5F4tlpUmjhXWT1IiTd+Vv6KCBySRp1jTHfUsxCWGAs7obxqrhyVvlyCJZq3uJyM+Cy3jl2ruN5yqBG4Pt82gzem/xHgNh5ZeU51kDR7Nd51jFX3nlNRnss7EaUzRkKrOMq4i1Z5roeAZhSapof5enPzZ2zrHXbYYYcWdgX6Djvs8AvDiGkzG9UNG7UddvgwYJXoawKz0fdh+DeAPvcjD8sqG/w6mOuw7jtKpua9VaIjCQ4UDyTrcfbuqwXOMeIST0OX7jakctsOZCFssRYXhX3HbbxtkkZgUr1TE1JyALhK3dKiAw6IFHN5Zptcp6gKd99EiZOazyjRGwELGTQ6dNH2WVUNJznKQV7x5LPt1JncQ084PGqyNUW6k+t0O7X/0pbNPl5ngvS6tBEwDMoZLF0lj06+jeDJl0P9tKsFNwis5DGK0au3tofvuyWpnn2kbtNbSGcxRJFZyX/tQNK/chcoZUvgYMpxv5ViPAmmKBAoBPFyAblXcCrVJI+zpY0umCEWc+Z7b44QkC3OIMpspqK47xTVh4W+peoHaDxXpPT1KJE4fVNyl9RdU9ETxrHSzdEE8VJD/VRXfO1O34K7Tc+5/V1uKIJiVcycJeoRWVnPXOiwFT77/jR0uCFTm9jVBZp0C1TlX8Mvb6VtJiCe8Tb834ufJzPP0Okzj4NfDF0nkv0GM5eW+YFFZQYYd1Mkb4U1PvTeefTi3WmY3wRruKtick0p1Cel7XOPyVzq8tE3yz4v4vW9Gje1UXKX7uh4p4EDhcy6Jv10LPWZz8ng+4BkuTtBrNEngNVVNsCIVf3ttC5scFIEE3NRol8uwLncY56USZzjpqkoawFzOhiR3/WedLNI5fiuPQwmFetnNWMk7uiJkN21xwBMWrdQvjMBmIADF7yI5dwCA7PkkQ+hGV6nswNJbsKR8v4NwAPA51dz37mDxuuAG4Dd8WgDB3yvRrPv+Xv5LV6IennVY6zPX5jDbUq2odeL1Vn57Uq5JKyDGlFy7S9dRAxw5TVAFOgsHhciUt+pV6N8IEPHgZlDQMt7edbbh63CCm/ug7cuSVu3Fxv4yJSf5339HuNnhbxBkZ8goS1XCpjmlO1N+iXZl1C581wO3pCOR0QEZkS5+7wozK3y3CjOM7/e4XdqTDrfdthhhx1+DtgV6DvssMMvDiPmbMSp/0hJzK8C95Cm7TCEd1Wi98IlcKms3rdVpTkwvBedgS/gJFjQb1nAVvJu7kU3soMll+4BwJNYop/BYEToPbpEAao413vtiIEpBBAIL2KLTlFcNAdIfN3EpjRqR36Q8RwxIW1J0/slprvOD+FBWiD9O00HwZEQEXGa0/23LNYieuf6FAJmZjxNxSJdgQCcL5L/Qe5cpwkTMQ4h4fEPKe+f52cj2LLCqAGN7JJMar9nQb4VmnE9TlToMyzARW7SDtAcCUpGQjZb74b8dOpPo7i+sE0Savn1AsdO2iwkW8BvsWEY7Z3jo3x6UOZZmbcqLBG8KuGVGxdk4tYfTPkzsiAQHcFfRp/LuGUkAbDiZbNzaGhgLZZugYzgOR2ioYJXLsf0BSG/MyULdEg6nibjwp3q+HWhfYjcdmt+HuBjwy0szptB+UMg89cTmo0EZmsLVwc3713Bry9ad3JjlOHamdp2X0Kgikp1OBtleBVHxyaD6QzgoRFuVnEtjhIU/7iUfPMYM/3Lhl7EpYV5FH5nXndJRrqGThPpLfgNxvvg8yZ0tqTp8k3Adn/iPbq4FQyd/NW3MDP3XaN3jF0/LPSs0LfMm966tpZujc/fwqJ04T0bujdpGepWHAgITAAdABZFOpKbdkRRBsk15HkdmCYQEg/PTGDMIDbHaTntJ1T/CGYQZiQl+yUpz/XvMiclelYaxaIkZ+OyPFuUq9cR/dOwQXVNQLPcm2zruLLxmWKqQFTFejTr3VSvMzl5rNcQjqJMkzyrAcMABbnxS8KZQY+PwPkEfBXleY+/2ERMbxqMhg8d5/PmEStrfp1/ufs8K8jrH59BhWPFPxCMI4KSf+XeHUjtr55OdKw3U8bzz3rofAG20qCrYWOiG7t+nJ/jEW+CH7Wg9Aiz4V3LqX/z26MW5pNanqviPKC4cLd7CaVTsxz2se7a9aqKfFDIK891MN67M3fYYYcdPgbsCvQddtjhF4ceE9fd2Q3i7HAd3KPddsZ7Fd5Nif4N4M8DYTAtlOWUADnYbWAZ2Hov+lcAX1jvPieTXxJVpHvRrRIdorAAaKNLd7kxrORPQEBIJ66lsoRUTl80o2lrwXcblrPvhGpJ7OImcd+cS0zftTmPdMTR5DbRBBCygl0LbG0uCnYM4K8g/CcriqSPLS6Vu/1uBcx3q3CiNqwSPvXCtQAngLR5anor1xuRDH8woCrCJzJldQWUg6BGoFYV0ikHG8nkDXSwOTAwmvg35l9l4fJRa6Tcd64hq9eRoNPRAhUKN2X3k3jwwal5jLCoFykH+tkanBAT2UIdhGQxlJW4onBXF6skFui2QJO2KtbXhxnoeMCo0S1CtDetwHk+aZ+utP1CNkOohNBbMnO0wJZgLfE0b0uvqv7yZa7hwItRdChVuGV6Q0hKBMX5BMYRrQ2awyPjz4bkL+MBoHgoYBeWp6jmZ8a84nY0aV4T/v/++q2kWYNhHN4QZ/XjD4QBfci0Y2nhUfCCZMa6hfiIPsv7HJPF2FBIvbU9l/ZG18AJ4IfBWnMPUBo5WEc1WO8+X+MJ3gPWePCtVug2P6Ctxyh8FLaUt33+oxNvi8X8m2HUcIOxXwUFBJoQRSlOCGCdlyyKdArAnNbtdK1KSNaahOSSmIrlLjGJ8pxASruZQRwTT80XsFqUz2fQXBTonBXj3vJa56gqmWDi1TR7vDqxC0t1zLyMcW2flh0zzsS9O0F5EcUVxVs+M2gWy3VBL+djr4SxXqo+s1lfGXQMwL+fS92tpbkzzV5eCnqNMaJxo5xGY4eqOdKOOpLYLG/U+czSFPpN+5oz+vU1Nv3ya+t2brHOfCAXFjhQGtNgIIjyPGq+hHLYwdZO5wOKx7aRJboP0/SeD+jRnQbutBZ0x1Av3lbG9NpFwe8Bvif4ss2ehNr+Ta+u/+1hmSDvqjzXZ+vSHcg0ikV5zjynKzJ4dspzJSI8+FuDrfN3hx122OFjwa5A32GHHf5E4HcLXlptw3f488Kt/f+dGf93uxP9m4QP3LkvltMREm5WogN5M1gp0ZFcqKtIQ74XJXoSy2SBkuuHc5xxiXHo0v1R1OivctFwxAWcXe2WctVOXcsIId39d5TyLkbkwqatWO6CnkK9uX0ID2AwLjFZmB/CUb6m71FKmyb1uZaENep6+GV+ARCyBXoUN36TWJzPc7JAD5Lji1iyJ+ut5I4yMuNwPOJvAC7nc61It/0FRpgoX9HJ4Maw7stjqs+309mQUt/POUPUG39bliu//tCmrcrqR20ER8MyuXl8szS+KWcl4rUu1jsWMXXBK+m3IzjI2+JNnXeTLzGKCbk3GbRCX4hFVAcnj4IWqYMzuGTs4mlYroJ+CLXg13xnG4+AfNdkFl6avAhJkK+CKRB4CkiuVjWapA0lTamt71+u75Nf6ibf5fmAUSfuFvkVc33nhZlipN+5fEh6BC90ZdQNboXPfswO1pjNgk+qk6t3klvAu9mPgp9vH5Zyqir0y6xl01ma3onVk2y/ETy7uwbdMePHpslvNmFa4C2uUsMjEF87HwaIPw8XkT4MyePogxNGj3BhIB92WSx4DblOG1cPDMyzRN1q3f7ecJKx8HjdGLOwlm56AeZP2/O6ptx7wKZ6d3iQ0Vrlo7MLv3Ye91iqF/O+lt/dt8Uy1ofXzlge1MRjBsuaFoF0Zy+SYpyDWFjTlA6shQMQDiA6iPJ8KkXM6uFD8zXru1UQcVKeI16Q3blfZoSobo3njFOhd1z/qZJbaURvng+A3JP9t2JRlSfR9Sh76lGeJRT2Rl22R3HXTgGgC/L1NZq+4ukC8JlqXosBHAD+7wtIry7R/urB1nE7YlG7cU2bN7TXMCxgbDm4N+T2O+ysL6bhjyred5RMeBTdp4z4Au0G9oH+o4nEvRoZRNYOZub4PWR+1FrzZ4LeeB2HqdxC6ap2fz7MG6goz9Vte6a/OmZY7jy/AHNMnjf0zvN4QaGJ3nW7V6bffcHYYYcddvgQsCvQd9hhhz8ZKKNnNoX7RmCHCt7C+H/nsaRK9C37lVGcq8K5CGSG5XSEYj0luhWeZZmZFMrlWZXoWWmecVMlOpLwKgseqAgGCCBOd5gvuXQHkuX5jFnkGIk+qLCqskaXMP0qt7PDKs1XRO3uW0qd72N36Tj/25e25jRUh1uITVi6D1rtU1L7JWt0MJIivcoz1fZAhIkIkRlnZ/X4CAKD8M2lK0gawWjuf4tyb4zos/apyWMkTBoJhZYEU9x5GYV7sDjVH+owO8aXyMTSt5Fg3X9vcLM4jgrYSrv82Bh8V+mNx5lcu1TpqPM+aF/28Ray0uh2nDGSsIkI2XIt3xNq3V2a8CzkVLeH+gdxIS/5BAIHEg8ZBNBU0gAAlfvY7eQt9MUizmXsL1kFe1Jq/7XDcCjcHgh7S8PV0e3TQOK86jLUQ89t/5vBU9QEPTJQyZaRqHJJviZsNgO9R65xQjL3pn4y/9K1uG+TXwVNWhW2YqVuHp8b4vcjlR9+TcrzMikcfA+B7KAMP4TW+J8mvQqVgZpu+UJ4vZqHAFysd4NRfj8Qbh2na+mml4WPHwDsvCcX5r9P6F4TneMt5a/Pa0t5jyXR32eU+3ABNDy7h/fwMEBpzSOijU5Jyv4ggrMhblpP0929HA5AEOX5dABNE4JVnoOSMojOUO6dlFfJ7amKoQhGUh6xKtB5BsUIilG+p3VZ7wwu7rfdX/akkv7psXJN8wz5WDMMdOHyfCijctlMEo+YwAGiBI8gOWSXvObMEl8yZpWPkJxklrXtENJVCsTA/yRapDuY7i3jDT+xBr1IdvBaeur59RF/s1Z4J0/A0G5zENG7i7csce5md0HQaC5mnlICA9LhUctvEJD3QL01iAvfWjcPlT7LhyFs+Y7f6LAcw/fhAcAr4HssWYt8yJZZ+KNggQdyfcfNUxpPbDxiJZft+heM63aTp4wBjjP4InSPY/LWYehfo0CHet7YwpN8YL5lhx122GED7Ar0HXbY4U8I1a7E/Hr4HgK7HXa4E4yEZj5O73s3fMGd+xYlOuA1N62WwocxUCnRRaD8FbSoRAdgrNG1+DSvU27p+bzg0v0I4IgJFwAXpHsMWS1LJDs27pQjAdYl71GkFs/y/iDS0VnuPrYOnK345YBkyT4yaK4/AAAgAElEQVSrhXm+S53keA/ld9t66a70CRdc5L2+2/pxejSyFsrvM1KdJhwwU0TkZHH/6ZAs2Z8vL1mRDgYejg8AgN/jGYEIQZRcf8MBpnVwml/BzPjHQzrR8ccpCbvVoPg/1tthc1BCG9jQ4kbo1hF2dAVzRhjVkHUzQKgOrqV9XihnXhpBUovWIozmoAZ6qWkj1DL16xa8hBCjNim+Fqx0bmV9bOjRwOLcR2wUhxvWYdufowM8ue89XgOwwqUqUfojtdbKf3pnusQTq2RWK/MwlS5Wob8mNrL75InTC3Kt8DRLaFvhYCXTtTR66bb3NdjSB2Zu5D9Dwy19zwcBjLB3KXu/hqyh6gXIdp54obFBv6wTJrNK6Ex1+VU5LjMAWaBty+YzwIc+DgCKsNuUob+ZZvJ6d2wCqn5qPPzzAk3qJt46b9171/L8Wtg6wT30x8VywK0dMaLNN7TZ+gcX7c4C62cAPcPwjdXZDPMTMHXGx2j7tgZ3boYmX62/4jejnNce8h6d76P8fRw77XrrnKUrf9yLhtwLtsxZrVyqSPpvNl8ZwBGgmBTGE0ATpWU5AEwRzFSsxuMMvcc3N78qkLKyOwJ8BldKoxk8G7ftSHdfc7Yy14b2dwEv1zFz0pbf5DoGUcj0vxw4sOujCcqH/CRvFvf1YFCcc1wCQ6+PB4fkHjxSUrDFCHyZ0uHAr8JX/f0xRb68AN9m5ENvvboNWLyrYTjmuX7u8s4lsZ9a3PCaHaLApm9yQLNALgJbXNl5BFJ+UWlDDM5Fu/JK9rePblP9HG8Bx2ocDXik6nSLR36t/svXCjVHRt+LLt8EH4lI2nlmw2pg5Q+t8jxQqzyvrM9Rxgmz3H2eXLZztJbm9tdu6D2du6XdPlTH77DDDjsMYVeg77DDDn9iaHYxaJm4j8RA77BDB65x5Q6M9zfd8Dco0QGsWp7nck3hg/esRIfefW7zS2KsdWv04tL903TM7tAtHAAETDjhkgVOlZWDUUwZdX7dNiZsTcRQHMSzebOiQuQYBolOrrUQq41tsU33qwdMOFFscvEyFEJSnFNW+tW4pxf9nvoi62dCEvr9RdL83vEyUPpIhUyu1SqBsxkXXcRNwMhqNHR6pQqy9eqEv3Wvv6jE4O5jKp5QPKgsJF2cl28RcBhBSe+QTCuiRD1el+LacJOvV2Kan1V0JS+mJHjszfdteeh4pvJHKPepGlfs0Ksa8mke+WTvE0WaO8UC3rRSpSjVX9PnWofo2m/YrfUgWvayOhAiN9H8GK3TNDlsVXwrjpaG9UwTtyoBTXtnxfOQbEo/+PFs5YJb5n/2XpL6j60A2/6OvG3k9aYjWL4rO2pXGerXqdfOW5p+U/d8ZIEptdqIDUlq0mznCKM6KFYNxDWi7ceOCVP68FGAXwF6NO+4z5jtHRrp1V3vQf8o4JcuO+WW4m9pN08i1liKPyTCby7j97AsvwZ0OgyhQ7AJAOa0rksc5gOAWfhQTvrjwHKujeVKJFFexgsIZ1jr3KQXSspwHVfEEcAZHMWVsd5xHqO5PcHOY02rlplm3udxwAD7u8DNHM/TvKbJRJRwoCBKMvWco2kMf0DBjKPUwAzKrtup8WQzp/SBRXmOpDwPU6ozB+AzgEcA8Qz8t7/rvd9T3Y7dfMVFb+2xPKinn70kboK4di/eAvS3uwgOyi9Ark5trdmxDTYPXWskVe4DymMzx7NrgPJFOryEROYtjx2OK9iVjJYmoufdbXgvrcwh2Tv2vBH5/fPVHotW44++N4vJdeV+N6Dl7vIvnrlXbxL2/nNVnqsCXceYKsZnTq7boyrRhZ5FozyHG2S9uXgVf/eBeJgddthhhxXYFeg77LDDDo0Aa02gtcM63Np2OyP9ZniL0LKb9s5K9F6YbsascnSgRAeAL2JtnlUt8r1Yp3PRuxglOhMQxKX783weunQPAJ5wAAN4xSUr4ABFidOd4wBeRDj1SAEE4CiCL9WXTSJoOhnLXwYwxSTQoxDgXR8SgFe9s1ybR/59mpKA+owIAiNgyio5AJjFKmfO1jlJwKH5H+T3kgUchywAYgCPhycQgJf5FWDG6ZLw+MvhCQDj5fIKMPAMvUMy/fvb8VMWpTAYn4+fDNYAT+kIwG8S+s/TMyrFTe4vbhVfcHFGitdGOG0UIZ609ATwS8Ltm0EFm15oOQBuHsy3zlxaK3dRWm/jvTeQ+UPnVy22fDhc+ApU1uh1Mo6cFNlO8Uyg5sxGP29kgXQlsG7wJVdVHeck/8thE6rzYNZ5yoXmZPfxbhxvdaF5526uyWAtXE5yOBXGjXC5BRGpa56zo866z+QlvT9yaHnVlUy7TFTpYQchAzgDOPbk8CXfkTtVK6j/TdatuVhhInIZ8yqAjyZNMHnI+Pl0/JyKYMbz+Q/UwtEWvWVgdA883AXcQH6+T1+3QM1Uzr9rVet+34qnJ1ZLWSht2Jj1u0IH77vitdB+tx4g+N7bDOv0xS9xS8vzlnZUOjJa7vX9s9CDP7535d8D5AoDYoBmaYLkiSmRUAI4AJxcuyfFOYlSiJHcEM+FzkYGOIreu9B25gjCDEZxXUzgYoGeQXlP7Qzz5/hZAtIhOc/ndQ6lcU6RLndJq1KyLGd7QA9AdZ2M5qG8ChHA6c52PYunKLGsUcxBDgBxsoL+QsAUga8hKXX/FoDXiHRHk2ECdK2w/MoSbBl+N9GP0cAvr62C1sfpIGe9AXX3IiOoJ2ReUrv0igqLqJ3D1hJ9odF0GpSiQI6wbPM/ZGm4ptVxGup4trAt+cHyQju8P8icV8W5tUZXi/S8j+EyLiOLojyC9RlclOexQ9+6jOzdmYAddthhhw8DuwJ9hx12+JPCSPi6IDD9rnBNeT0pzL2Z16X8fNlvcRF8K95/cmb9D/lVS/S1/YuTRTffmvBvEv65jXwvJboPY6Cy2jLvQ5fuMIp1TiKoImNNVoERRcBwFleGhzBl62kLKvIy8i/7kPPPAjcTxTfxWL6ZNqBqvMb5lzvxyn3m6sSSTM5FRNfWgc2/Jb/aMTzB2ZUQVQY0WRCTi6xLLHWmqv6lpHLX+1/FUvc/kWFOO9Qb+059mg07+28+zIVXuA8E8Gwx9+X4MkY925kUVuA4ivNmWJLKKwyEHtfJxBbyNpErjSv67d2su706qJAWdT/mb8GlJdPUEj6S8dKo1bhkqX+mjkUwaeYFURWUi7Dp3XPG2A9HSxB6YNu0N03Gr4MPvs+ojcPm4obstnaUsfnGdXA9BPtzKN8Tz3pVh3ZeJ18rCDRWW6lNuTTuEmm5Kwi9s33qcdB3Xdt60xIad2uxSVlU5P59PnYozB4NlMXwEdIjqBaVMo4AVAr4UZ2fm8532a8RMg9molnlAJtJCqA9jDWgU/b56jHmJ66pa9VWvXm3pd6jOFvWjS35GZp5FVi+r5M3Nx8l2WANH+L3ncA2p0d7Dd2WoWrT9cJG5WlYT3k+Wo89v3u3ZmT3ViqZDxtRG6/FkIX/B1hcsSfX7KJ45BngIMbVQQwnxcIyXsCIIOZEdrNiXeeVzq10BzAgLtwV/2yNTq4fbAdUdxaVpYtQFKJ2bpuatc9c/6triGXWieEutUe+VqZaFw3ttWVbS+cvWo48PwD49yWVQQdXhtbPrrEj3g8DsAvfaBGUbzT4vjo+1+ilfh+sZdG0e4VPm6SPiqPjAOy+S1lHRjrgjUByT5jwEazXBqDuT9Ovedr0moibh7K+2b7vJV6l5evEnn00pVG+ObqNt9bAP4jGL8JWnBaY+8qzwYYFlYHsgULnvyrLQ6jfcwIdQzG5bmexNo9zCedYLNGbBcfjOJg/m8KWwrfCRxwLO+yww68EuwJ9hx12+BPDaKOmzOWEPtPakb6vSa9vgmvyuKck+Ja8PFO9tGMeSXxGuKxpD34VuFWAOYCeEG1rnC1pbeStSnS4eF5Ro2EEZMEPYIQ05f2rvH8BZ1eOWYBgFOtZeQJRLJAKQgjEhDNmXOaIx3DAFNrDH09ye/mpOIE0ygcdn4xzVm0XIAAHoSNHvRNdvl1C8jd6iScTm3EID9oQ3WZ8ndM9oA/TE4CAWco9YIKK0HIzOFwYyXLdYu6PDehbCEHaLOFxxjnV45DwO19O1TR/Pr9U+TwcH8AAJgQjbiNEEfQ8yZ3rIZ7wB4DTZS6lW2mL6kWzpEXCJxhBpGukhvxI7bfu77eSLV/mpum7Mrn00nieO98sPbRj0OffQ7KM1eV496JBnb6ppGi6/o5ofKy/UbQT3DSjxGH9rsJtnQlCG6wymCPy/aCTvGs+es8oKMdRS7eUJUP8w0LNuTgLqxU9Kn9s8oG/TbP0YRri9jvnOzAn12Js33Kb2LY2s1qbZyT38u3oBWJW8Molcb7zNdbhGj/RXvnHuh7NAn2Hj0VWHgMBFGbo3bXMdYL0bzT52TYBKNjjRRZM/zpgtvTdNoVKe6WvszI1unbSfNI/lfI8K8xNp9h8bTmY4buiq1vx1dK2WVAq2m/9e2AJlSI7z1uu4+SPlm5XD30klW5nszs7IJZ4vlHeI1p2JTCXfvV5ZY84th08CiJgXuSFlhYrHlRhFA4zsTs4bSp/LXxLPrbCt/hQ7/R5byzND+UedKWzgLicZvPcw9EVd69lbgQry3wFHh+ftoeretHufdP8ns1YvHq7ZOf/IPHV7t8NskY5xN2xq5Wwv5IHEyKhrK1iaU4cUraXCIoXIMS87k9gsFhhZwWRlGmNjOtDYVzeZVDpmkN23a1qZ+mY/JopWq3dVRZUP+fH0ASldDLIAwEQxVhZNJP7dXvdCwtXcAiIdp/jrVO/yLdDAB4fk4eTf0dD/zr0zc7V3C9oYTTnKkUhm25340LzXmLkc1vremraWWhlNSUM/WymnImfppodFyuV88tnr7+lTGUxgcRSstx1XvjKCMRLsRBWi+BZ7qlmThbDzGXPm4uxa6wi5OqRm8DR7pzk9nsxGIx5idj6cdKje6M1caHUfubfG4YDfhxmldvVMKc2XnabpRMmpKvWQsAcjkIDAjARMAXQJFc7kFxJEaOMoVmU57M497gAfMoW56xu2/M4iKgHzlvaeYmf22GHHXb4eLAr0HfYYYcdGlDmrRXC199tuP+1zOa94UdvCrbCiDH2kqIeLO2qtoT/rPDG+vQs0deyHQn6euH8DcAb3LmP4nmzUIYR2Cy/f0Vy6Z7kTyNrdM7yVrVGV7GdWka/xDOOPOEQJoSOYPCAgBmMGTGjkWMZBb5XM9RCtdKsYxluX5zYi1dvnhO1uphaeShYcoVXEeUY/LL7RxUiUpMXd19KYHI8yebdDslEWylM+MyMRzB+16+mqMNEuEQu+lTNIFAS+GTU5KER5jkkvTw217FXOZNB7tietFvzQV3+vehT46nB4NmD/N1G0MG/KJXagky/rFWQ9shL5NI6wLlPdZx4jwwFF41Lhi4ASbFqOpt8fxiBZlUlpUUOP+Ik3cyW7sofsPm1wmixAhHBdoU/S32McLMMG1dP5uwdg5GMkvruY2HGX8q7cCMENNazNgsS1JUyuVZqrGD1mbOSv13bhQJkYS3a39EANlb81dXRMHWvLvs02BraXN1n3ljIeYGliWfwKMOVDbqGztixUlWfm64s8amN72mVddtv45L50/waS8bav0ipmp9zVH+LTQf1KtAidBUNsK+vWxMWePb53ErHemBXQj+pTFtVY92NH78VaD6sAA9fRtPsx4N6BPhEAF6RLksWuGUZHK1vhHpO2O9HAJeWf/ihsFb3pX58S9o/3toOPRrVyYzR0s9ri6kzQ1vxwXqstF/u9dbtdjLEjul3ViV5+SOoi+Lo2lD41d78q9aZMedO8DS2Bs7/duLYdq540167zyUeGR6EGMCU1wSCqePnpDzjV7kH2bazPfAHAo4BOD4A8wX4H+F1VHFtDiA3h6KtJ6mqUcyrWyqTa28MIrDjh1zb5HGg73BhihMLC1c+kF0dOTZcT0rFGaXCwbX9x52nAaNV4Vq4Ollz9DAiK74QZbqExVlca7NRpMcqXT7YOPQww3UVrDK9hzYXfG+HGxes4VQb5ddDvuVpfwx43NzezO4doL+9PqGyb6jdG8m1UAGBJsQwgXFIyvMQ0lVxsn5mb056kGi+QC3PSf7S3loPcacBU4//3iJtafgtbbLDDjvs8PFhV6DvsMMOOwxBmcQ15nsk7dlhh58ERsO8Gy5K9F7kHH9F8vcmJbrkr5t+Mi7d0bFGl7As3KosCYswyFqjH8MBR2eNHgAEEI6YMAM4i6qaxaWx3vGmx2YCTbItZgQAZxCOkXEIKqRPJkQUHsBgXOYzGMBZ7j5XNB+mh1J9FGpzmk8AJhzlTvRimf4IAnBBEgoFd6WCWrwfwlHyZUQwQrYUT/8ehUW8yIEBFTdFYxns1IIFSFWKhNeLUZKYyJ+OT2AwJkwAAQ8PD/gM4JXPeAXjHCPOzLjMkkga5PPjIyIznk8nKcgIzKpGUkGEF7LxQLnx3pv5Owmh/DzZmq5Zz5oJuJLewwiHgaAoWw75aCNBo1pe6YyyeJvvVRovzCmP6Ws9ForcsNemVA8LRtGZN8r4DiqK9pQCVN5VBMMi/KJOC1RKXC1K6AaL0Fnz0AKt7oHHvbaI85Zv1kKvZwFpSba1Pi+BLpFX1BSIUaxf8tA3Co786/qBi5iPclt3aMQWsM0rfcCmDMqPRijt3dZ6yNb4rsK9aTOSUdpn9oErUNV/QL99GYuIXlOwTX5aiLeVtvRwWetcr+R5I12+incaZYBtVfOB13TFopvza2AtH1Of770lOlBRon9kWFpSF+eeCWP3bJfH3+gXuet8AVg8dIjHmLScMpgiKKZ7wglI7rBhPUelP2rm/8DzyHCBG8W3URfyqxTBned80KoziazVuKbLh/ZYDkIl7j9n8W1O3w+iHMvZhnoNfSDgzMB/XkRzTGbPhOXp73lvU91u3B4s8oXdiOW9ae+yTo9z4Gba5S9cfrmbv0DebFqe0/JwbL7rHkTbtJRB2SU72t/IhdfI6bbO8dEao3zRlra+lZi/kQ7dbd36KDCY0514uucuXJodU/KaD7qHJPsIBA7pV5XnSXjBstdglEMXqijnZIEe1etRRM1o1wfuty1UO+ywww6/JuwK9B122GGHTbAmbNsZyB0+EPyBYoUObNv/XiMI5m8pkH4bxF8rkM3mzwYzGiU6TFiehiZ/Ke8rSK7u042itTBordFrYU9tjX6KZzBPOMrd6B4mADOmpEwmVdSIoEmFLSKiY6jxNOFCynjVG1Dyyrq6pbrPNpS7b5y7biTGUzW4jZ1Uc6XO7Sa+37PZEKZK6Up2yFRWIFJuoIAnMB5CEirFmDSRv0usJxCYgGdvAWMrqwKt3C9WgKSRuG2YoVLLRxy16rWwtq5oNMG3mS897SuMjKYj9NuKdk/A+xY5Ws5jCwILhVhlMgLY9iNxLQy2urLI4PaGhuWyKmGwGUMrpK1SZmgYpyskAO3GgVBzlGVW4EoCoiIo93It0eyOsq5GL7VjyOhXO3lYAa5/l7CIpLjgUR0tPacclC3EshI8KSnKdDaN6+9b7bRnRckqgaP5HYFNSPradn6ysu8IFLuNX9dvHYHO3GUkgejXGcUth8CDIcJR+n8KJZvXC6pBycDL+T+lvKhCfaMwybgY/NF/HYOPOFKewzdvncfzTYVvhP+fvXfdjlvntQUnqCrn4qzv7D1Gj9Hv/4Ddp/dZiRO7JKJ/ECBBiJRU5XLiJJxrOSXxCt4pgABtxi7tfLVwJ89r9k6vxvF546fjOwOfgFzw1Zp8BXrxlo/AJNfF2PFvDYZVZtx30v9ZOFIH7H6Phn9i4NHuh2+g71egta3y/r6d8mKgAnRGOmSXfpkmMAU5ZCbrUGVyWNaW1v5mkz63y2alY6eAqzL2GnmPt2DGk87RBBQz9pI2F21xDvIVpGGANGaqQ22cfv4Rk+3/77O4sdsbyD7aLTmZRDte/T6sFD6TbPcp+QvDbjzWm3P5oYa/qWe7F/R+pjNl7fJVTlz2TrKnKW29Nf83aMqPXG+qrLvSp9rj8leeAejVA16ontOwaXX6pK2fjeo9/P5b4D1NhJ6W9viwCAgyf0H6JJVvuzwXyNiWAzQ8BdBE2Wx7Ep6bb3iOYJhrANSSQb7znEtfasLNHb9nxxgYGBi4GUOAPjAwMLCLa7kZ72nTPvDX4q2F6LvpHIjkTQBmN9QCjsyAsExCrt/B+CpxrDZ6zbeotdErTc6ONvopnPDQuBv9AQRgwg8wmJZMd6AJSYSe3GYVSVPSBok8JUFRCIhgnITTexEiT9MDgKKR/iIa6evv1FRvl+VSuaoG+9lpruvn7kO+Yz3hRTTSz+KuYRWTYfBZEsIp1cDz/Jx5OjbAD70TXaJ/OImm/CVppJc701OkT+dPYLBozDPOdEpxH9KH/ycJ/f3yA2Dgf50m/E+MxuxwqZbcryqmG1C00Tvc85/NVL8KpmXYjQ07hpThEncYs+weukP11knDZ7THKO5FT+FV6YrzARhCl5ubmcvCBCY2TF027UzGEjuXTGy5rOzQMkmVUUm223ghHMm0wsDCuQmZqWij668/gFIVKwnfc9fNcahOg03ZXF+m6olr648bsCznVdkrc6GO8ZavS7QVaGly7tVcLg+ifV7IdPW7YkqzYZzrASZtoFjXSavbsubrKsCUX5chhqtAP3ewUc+3hw2qOjdE5Ph2PFLVzzIigBBLGjnN1Smm9TivEuOGf4POe2mBNZM5OB983wvg+tOulY7OfLTqF9rX5TmYPACUjt5ZPLpVt1enjT6zirKRxt019w6m9x21EN1Gf82n0fQDiB/3w/0uWuhHwI1ncs9A0jj/xunX3nv+uyLPg2ZMl4kXea1hOUTEYr5cf2HWSkDcYokXKGlmrkzDo/HecGf7es2YB+qrOfxuG/15K6/7uidR+in9cgQWE5gAYDJ7AV2jJ6k7oeP/+gBgBl4i8P98R15Dmcy1SVzysYL4ii5UzVXfa65kyUmkaokzJ12soNmvk7p3X11r4ufJes0lE84fNa72k9qolSDahI/uPZfJr/Er4g0RpZJINX81rh4a1G8aQwersDPTJeklI2YmHUebdbdrSH5ubBZXRaSG289Ea4z2PtT8/lvd3vuEqGPLulDeatQ3juuYB6rDoCFdzcAhgKcJmCZgojTkNBokwUXmThWam189qKG753SI1dL6h6ytAwMDAzdiCNAHBgYGroLnXPTeBwbeAd5cE10y6IY/mOE9TLrnOKi00RlY3YWbspP7eauhmz7MUy7p+RIvmJnwMD00N01JB/aESDMIcmocySz66g5qMAJRNjM/OUZAueuYTIztqqtQVRe7oOUwQZttyKu8PQhI5UKpnyq9RsJZUbRbFjJPhaEThZLESCif86qtH0LAfwFYzD3o/wKl31i+kBWck7kX0t99LjVRkeYZpVuF3XDexkZDVsGUkdkIu27QxpgyAW25mkzb98F00n4cQFVPyT+Wu9NqF2YU8whcd8jMNKX6fVXHNi3bsUzcan7SGUQ1wJDurrS8PENSZlJ6a/XGS2uCM9PM9sd6fvNVoOMoV5JcN1GYy1vg+o8NR69iNOuvutvy9bGyUgHD0O7ySH0bU2OtcYx+55yeO/XWaPs8L9o5gyjPUn3mv6XX/TbvLzdxKjq4frYat1XZJM1W3cUXpMuiGXpkq87jAVm40sq2Cz8G7RzzAoQPN8yJO/msJlrT2Q5NXZ1NCxm/PF5tG7WY9A2ve6NrzeEd4vsz8OkD6rkV19VRq5xH458omaH+HepqD6113T8/cTHb/j6W7VfCNDR7d32Ue8CztQyZEPO6aDeedvxqvzhdP7dlHJkfO+NV55PuHpLcr1s30iXvZd0nlLuwAeQ6MKbt09Jo1gXdI39m0PwM/A/SvjjHI2NBhkr+jCSo03zzNohrehpWbVKRoty/rtVQbxBScraNXbt52LVGwpf9RGtNsmu0zamxx1lpdrs0Kxp3OhJzMqEt6evVMmTndJY+HEXbPAvG7V3nkPvPlUbUdFbFaLij8dtzuxteMSHl9m/t5fY+tOw4upWGnzCZ+m8vvYKO07cDsxpUsVemmfGnVzecpiRAn5IQHVO69zz1ec79i/O95xFYlvQXOf+SfIjkqy9yFe91otb7wMDAwJ+HIUAfGBgYOAy7md/i5IxN5MA7QkuIDtzx29Bn4PPijoDOBVQmT+Xs4jJQCc3zo2e4GW10IAvKyYTRe8vtc0sbXRl0L/MLaDpjcjQ+iBTjBRMWRETMot0eCjOIAeakHvJCqjGeRC8nSluxc5gApI3ZbNLPbAJ5OJ/OYADzbEPZ+kmPs9NMP08Pxpswi7rKB9E8f3Z3oy9C+wTD8AIw8wXMjA/hAwDCx1O6y1w10adTkepk89qU7mjfUoorGukJn85J2+yFL2COOIUzGJzdIxgcGB9DkE97xkckjfj/o8zEKJWS21RK0nwW7PFlXgvTp+6TnvxmnoZzWPl33A8X3E8gXalhI15LY1yT8WNf3XQMUW4zy0rKDM8sTeR60BBQtIElXBZcCnMpXVSOLHzUNDJJpR+vmKuq/QUAMSTTiauCyNxjLSMs+ih9MJp3JdVsNTibkW7UdCXTW7fj66Z6IWYlwIulLqwQPUfTgyp+r0TmX5uHSTcHpQ3i1TS5hG+ZUd+CN/1uTcJbYXiVHre9euk3Gb4E8AtAD3V/6M0JWQDEpl/4tmhEyuPcB7ogCdFd0ar0lM5uANQM1Ya3RXzuEdqIJB39eyP9JsFSb4c7+UZAO979YCMZoKoNmDW7bD86OqdvhDukOf6WC9Qr81L6n34Anxsa43462IINp6bb48djZtyPLGdvvdZ7HCl7a6h5PyswB1Kif/yd53B1x85R7PZXewENB9TWYwjg5faFkamdRz9CobM6BGni+TvPM22td+24S9ImrcLIIFDhq93vUEhXWEUG/ouB/4M0r1EUwa+Pw90AACAASURBVBmBOSLdH0/Qg3YVnRFlvOnexQrM7frkEcgs7+05Wz/lyp3jZq2rTMPbfR6bvUbJm3JESa87qKJ75/q5yqMVDlj3TVT+JGUhm5bZO3EWoHMRomv55whaUPxR4qVsOpOG37Ot9nC9srkwP0OQ/AdCD4Szc12P6TY4lj4mvcd9J1HWPEcISes8EOIUgKDa59q/RHAeF2O23bjJ4ROS07HFMkPJfb3/GxgYGPj7MAToAwMDA5vwm0TDBK0+LFrhBgbeCTZk3E0Yvtwx9w1NdKBmcm7m2wjXEqIDWAnNvQbiShs9fcpabXQrWO9po2ehFhg/lhcQET5NZ5ArbNKQDViwZGZYZuCIIJANs4KIEA0Tz7JAJtQg57+uDOfUqGtezVfCMEO7mfUGczvbAQBRWB+at0Ix42n16TMby2tRd6bOPMMSgWgSsanVTEfjX8b5dMZ/I+J/v1yUIFMoLm3bFaI7rnp+bXHbt4Rea+fD/ntoCVlW7e4EeKsodg2jui4asLzKVyG3eyeh5tUNmjdXwdamBVUYWVFsMjZMIEsHRaRR50dDa07x/naEsKG5ML4qWrqMSiHLzLElO8OgBtck1rFRmLPo1zFzQwbbeMoNrgxbGMYtl+eVAJ1d3nbh6FSAZwLnqt9aNyRQczy0ZjYlg+rfnJStdGm/FnNa1pJcP7pG6BqU1wxTjmpNsfkzivB8a1J0fWijmyYYjcQV5HCVarrldGynuGWgb803e9jbbBiT9Z6Rm8/OeL8ejb1+4enwbe8PALm8dI3Z7bM3oBnttQvJG0OF6N7C0F4V2XBwYcMVptzfgxZ6a6y2whyFCsp/d4F5cyvVWSfyPGnDN9YLa9alusalseYcOqjSwwTVdG6tn2s09iGr4K25n8ycRHUYhhzmQdq/UKjXMJN3OSzMwCcGPhHwvxfooYJyT7p+H6U/Zj2saEm09Wt+85q2URURYHv1iCl3lsnLPwRvct14asyVhnp7H5BT6lmcqvbJZl2vNkLsulFv7rd+htZcb1rtRmiuhxpiBHiRZ6WLs7CTNE4U2vLey9Bb7cdQ0mhVj6++RtV0y/tT4Ptya0+vaNFHLsyvwFb+1A2TeQXo1DxRuYpiMn9ZoI5iRcJYN1gJ0cUvabzrQZrocnb7raY7nNuvrveBgYGBt8EQoA8MDAx00frCt35jgzjwG+EWc+49NOM+GfeGtP61QnSgIfAwH2uF81KIE7evJEJ0AHr3uU3Ha6MXgbcRIxvN4e/LBZ/CuUrnJHRMcqv5BbMwb1KaH+kBTMAzvwifI9H+Ep8BIgRKYvMX0Qw/TUlLMN9xzgAFwrLMzc/W6XQCQFic5rmipZEOAM9yZ/qH6WElqJdaSJYD46XiJz1DNM6nRPeHU2Jqz6I/rxryp5NsNUkE6SExi7T8H85yN/pcayk+zUnD7OGU6NS72H3Xm+Vj/yxHGAgTIgL+74czIhj/3/KMy7LId7/2C+1PpsAWRy+IfktIfwAvzuOagUt1+axQkcWfUBihkjZp3BKwTvNqOtqkVQ971V0JNtmZO9f2YiO8dHOBWiMI2vYBKyFnfmZUGu35j5A1q7V91J1ccOLCuyc2/pZZm+grtZjorlrA8qPY1bfPcyXYduE0/626tv5sy24YtFnTzzJrudRdd+z4ehXiLLNX5tzcVa2wmW08Q6Mfx1tj1zL6bcNnYQuZOvDpCFuxlX4lA2/0q/yu5b3I70MRujYFSCqocJnZA18AwBeAPzhBVAOeF7rHg74WVRov5rkzVzy5iOTKvh6cdWZXT0GdCHZ8UuVQ/eQ9h84neoev9ie2/ctht35d41Tj8FACd1y3DqbDq4caTz+Az59evVwcRkvGslWUPf+fCTvdAg1N8z8Yvs16fhqE7DZNxiEDXN+NUgKKW2UGmV2Ch7FhSadZGCvIc4Uhp8me6TB7inzXOYpg1QpYc5mFNiKUdTbRyv99BngG/idKXS0iMJPvGo1jDxzYK0qUtmDe2dCXtV21uI36YSShXVU13AjLxR8ocxo1wlR7FBdeXXMfceHynK2BeJVUDspegO7o0Eefh3hUwn7bfqJVzirUXIpbJmbhLOykaA9iK72mDDZ7Nu+sBbbrir47940i/ny0JvReODTC/oxF5xqY/Wz+dsGKTEb/yGCOH5Kmebrv3AjQdVxB+40KzmdgmVdC9PR5EpG1zwFwuafJUbXVGf6CdWpgYOCvxxCgDwwMDFwFy9iz7+i4v7fN+8BfjWuF6FvduBeXAVBH5b0lCG/m22KqNNwrprYVWjjCmfGVgC8qhGW50bajjQ7mSoGlvk8xPT9x0kb/LIJohbKtJpywyL3oNT+I0j26hTsmeWfOExKjL7H6LPuAI+N0OoEBLLMRrOZieA37dRWWkIahA2o2taUoW5g2mVr9daV1DTL/pgcKQBQtihb/uhahaPqW7pJzQH2Lsrrp78N0QiDC82UugihtR1vqpnaKJ0gZiZboW+Z4ZUT04rJ7PpiHb/DDTGHKdVK6ku0f3Qw7z60sPC0d2uwcscFIL9Xv8rXavFWnzg1f8smabaZfWIZiDs8VL66qI8t81YMIhs+UFLQYZIX1nn5T1c0mYxldbt6oq9+UYxXXvmMdxjKRJY0iJI4lnrL1rBlRy3iu3Ex+Pi/4+YILXZJvFnTkOtd7WXPpS9K+HlqwFWsmozK/MIxEpj0xbaXv88hCCbi+JeHYhKtoMgVqZdWaoFWj/MeP5BhdG3z8KE3XoX1VkVfOaatkX1qhrkjM76NNP7PhwkZbvCZ/214VHXDv3KkqN2cfItPPY0fi/C4w8/E9PommH32/BcWYyJmSFvp7Rq+L/Sma5rdAT0+t1n8zN7cWAhIBuT9oJnMH2TlkU7N1DyX9coODrmutoOTys/N7Y27ROLKLze7pJGstPK/WLLe/0TQeIzC/AP8CwAL6auKqsK3SJLd7FUOf3rfsy8fIN1y4EjbDrmEOzNkUVvXj9xVlL6HPtApi9jF+b1Itvabe3IaJkYTntFr7W226sVbI/iibpxfBOKt28JIONuR2NocUSe8/lzy4pXlu66US2HfIMWStitMt56/A0UXDdyJyv78e9f6esiObV0XM9W789bBK1j6f6t+gARnpsK/0q6j3nevd59LXOAJZcM5mLPj9FnCgo+B+i/zAwMDA+8QQoA8MDAwchmcu3shsHBj4lVCNL5Vvv6Yb976VGEhCdJuRD7CT6RYTLTOYbH6GGMNQs25fhWn0RYMwFxPJEkYFKWSeVYDV0kZ/Wl5W2ugBQBKrn/ADDNCC55g0zykEkd0V5hgRI8ZFnoMUO4IAPExJYK7nwVWzezqdAUxY5jmZg48LiAghBKkmFuWbdKfsstR3ptca6dZcIuV/UwlTqdMd5MAck2n0EE6wH9kvosnu+ZrznPI5neRudaH/4yndof68PANgeQd+yF3qCtVM97PuZ9F4Z9RCdC1J0pyP+IQADgQ6Az/iAmBBpXnRM+V+lRZ6ox9vMAtL7V7LuL2OhCobbzkTnffcgFpHryXMMBYt8zXXbcvEtAlDXhNcCqTljVYw6ivBckglnp96Mr84AhyS8KUSyjtBNbl02NKl6VC6D10Z/VG5zKYoJngWqFYHPEp58n2YBLBq1PWmTtWUsvyv2AxY/rWaTJ4h6zmsWXOqMHdXjOlKYOA70FK6hI2RkyiuZP4FkhYXg9w9otoWvpCeeWomJhVMeGamPaDVZIRvDIbVvRaU+lMV3453Xd8ukvTZ0CAsU72Dll9S+VbTBReyWjIjxfcffb/FlnVH8G3rJDx05pJeGkc2Gm3B19qv1YF66fiVA3U9rrzNfJX93d7CHnjz/STa9kXpFz0ty+YaYN5XgpDOuFqNwR7utN5ck16+D93v2Q4kb8Po3ec+buvApW/jHpn3ro5eHr19ckvRD/h7NM8PQfZq9lXnhkpYriInmXfzQbg0XrOAqLXnyW108ENoN9jGvkbjE8w8o/OErguGfgayCWZrpeSRgCeVXAeTsME/SPuPmZO2abUkyWED3U/o2pM13mmdXjT7GJJvIhHA58NoupdZldnvW6geG6vGYawl4uWZV2s+u7a1c2Z7oBWDNGXet0cOkw6+7nsa+a2eW2OWQSKozIJvSY8XMdmeTWxb09plfc+fJq39V4scKUuHHOffCTfwRrB7+DQG7JlKBZvg2ZJG0F811T4l4TmJNrpGqPrTLMLzpRaex1j6t+QW8/PGnmRgYGDgL8YQoA8MDAxsosf085wZz4U7+BE+MPA7YKtbbzEHu0IeTW+Pi6qMLVo556/OKj+XXjOcN+lehBU2TNJAJ/OsvArHjWV0tdEBYAKDccJCyWRv4dGRSYmKAL5THVk32PxoXI4MClSHrkzh8q48uNyRXjd2Q/ywjRxBdeiVV1g06jU9QtGYL/rsJcRWnuonBipzGipMjwACQn7/HCYQEb4vqrlvyrrFYG8WkI/F2Q2jjIq99cIPwF6iVAe1WilHKjMzbW16po7ugatMDJdMy53TLgQjCZVTIEenOPSYiFbzasUM1XjKMPaJl7qtDp9QTMJzqx2r5mVtNqZvsDDTiEnKkke2zaaez7LZVC07Z1LJCMQZlj5fB1zFLYxZWz4dTeKkJuy1QF6zjsu8wVUaPu/2sw2atL6KR57iwYWOleaVSbfB/7d+5Ob8ytKINlDFxQS6DH3ArVMm89Y2MT/b/BrgF5OWG4tsErQmX22ZerSqW1djvxHWIj53Er0Vfmz15jyu22BVbb4NGjhMtg9o6n8l7JH3lvbrqn13JuN7Vut7Qes+9FuWvmtxJI+r1v870NGZ+/L7EJyjOQ6stQ6Wy4XYC47tnspUel7SuU7LZXmonxGwFqbaqVTzdgWwZFk3AOXaGENvplW0SG3ZHm2aJi8t13/JOJsBfGOAFuh+rr6/XStG61a1XRlYfZMEKbceUDB7EXtAAVSdRc0gM/y1DSuteZuXlKm5DDQqsOcu6aT7w6NJn0rdVVaA1IoB6rRiBMctAXrnXfuK3nWuAvpo0lST7VaQXu3HyByA5frPVE9uz8oaETe7YldD/V2hR9jGpu4dI3/rejIJeeTkIuRvExJtcwBQM+1UBOeBQGrKncgYXDDC86x1vhRBurn3PInN9eBIz3T7Ftj9DgwMDPy5GAL0gYGBgavR4ugc/fIeGHgnuOVO9F6YTfeOOffsfyDjo9royjDwDOtVOMZXAGttdBtHmG1eG12Z5A1z4N+WF3wIZ5xMOmdhNi10xkLAzJekhYAFjFiUT42AmQFcomiaY0r0hcQFmUIAgzEvMwDGSe4In+cLmBiigG403FO8ECYAhBjnpszEaqRbYf1DeMhuBOAsmujKKFuEszNNuqVsf3wzrOAaeJmTpmK6u52xyH2MH08fwACe5x8Vr5Hr5PD98qNq4tPpDOaIBzojlTyxBmYsiBxxohM+E4EfHvBjmYHZMMMs47Onhb7LZL+SC5+D7/T91V3orfXHpWvhSfJXUNtwLf6jfd8SSB5GS4qwBd8DlGEqzGYnWyxZmHmFCfkSAqvRrvVvpyDtFioAD5oHm7KbCJrXam4o7cSZUYV67OUiaR5aGBJet+SRhaOmvNW99ZITG3KMezbH7gXG+lsxa2tmcmaoeYYyN0yiyvybeYAoN85W5dUyGzrWF0AYxq/VpOIIzuZYDZ3ZvKmJ31QCTIxGcu1Oqu1dBW3t8ci9Sl14rNpZ5xIj2LFazPRi1pMI5gXNiTo3+cY8sKqLBnraab0y3BtNISG5NXyDIG8pgJx/NdHZiUvDNyZCMulVewqgNuvQqjsy4SzJWqaWCRAq4Vt7m/zs83oHuOogFAAw8PQ93Yf+Ft9KVgtdzbgDwAO9HzPuOp3qM9zzEJz3UdWXXV/t4m0Dh3rYb6Le9ze/NVzya+1nm47O69bLrN1+/6DfJlWeUZZeWdseJTE17PVNwtg5E5QE69rniYBvl/KNQgxw2hnXy7kI3yxBbOjNc6Den4481nT1dpJxUx2+T5MhV9c+IAvss6efR10y6y+D9XNrj9OKr3Ow2WOoQ3HSQwy+OC06PH0MEkE5270WczHJH2VyUOF5viYnhWcrQM/rz4EFfEwpvxxpWMgXc3OstyKRnKehYq5df6mYbKdpQggEpoDMPdC9eVxSP7Km262FA8R0LRJYtuOM1Z5+/WGFq791BwYGBv4gDAH6wMDAwCFsMCurMG/AGBoYeCv8TkL0ikmzEz8z4Wkn3PpudAArzcTEUyMxIQzz/eg+JBl45he8EOHT9OBIZZxAWDLjSe7VM0ykdE+yFTvJvb8Airn3qpAFKmuLSYieTLhb7RxbtvXHb82vV1OXKtQ3d2ODqjD9T2luPK1R33HOxsUJPFoJmWk58SUCIri6Az0iyAH+JMJ8pAmYgB/zS81Y3CPUUd13v4KxUAW/dv3oMY7RcHfZOnOoR7Ll1cOVqPrtFeXMY9myM5Mb6b/MdTtW6Vs37SgunPKMevG5xCt9k0velXkHZVTbfpvG0Yrn2SCD7JP6x1hPOfZPszTpWT59vm+zhZ7w3Gov5TqwRPc7wS6LLSfJ9W+VCGU/jnXYPE9w5/dKdC22Z2FApwB5KSJUwn8r3PGm+Y9TtelOdr5ivQ9V843tvK4RyP4S3uiB9f+m7fW1c80tyBPIlYmafrFSS9uJ7gfYVVeO/GJYYffR5UDD9cy4v4qeK8I2tiW7ae99NgJDeH5z8d1CCEI+iKaLYLf+Nxpma1yyb9RrOoXGZUOj+dUwMQIfCfimGqGhjm7XZi33fwdgIeCC1J9Ir20q+dl7vMsUImuIXa/yNVWu/H49M9nrVmkVtpHjui5ssJ05s/qFmfesLaCyDqvQOluv8WmxjVnW0upA3eIO7eX4rQ3dmj5WwWX2in3heZUN1276jdrqa9Yaj/2TGDX9+n7lN8tPRYu2ayb9ey0QbwEyw71BJwHF0lSoBeihaJ4HIrn2rXyXa/+lyMbCgQrV7cFX+csfC2y+Xbb6Ra/PDwwMDPz5GAL0gYGBgbvinlydgYGfgHsL0dHwY8kou39u+Bum6lbGLBmsZGSN+F0N9VqAaO9GT9FYsqgFI2rWnXO6hhdsvzkZeMIzPk4fsiLUJBE+4gQi4DsWMDjdfyeEJE3VpGF+Cg8muWSuMonsEiNtmgg9deIY9W736ITokI9tLoJrjtD70rU8mmIR5JcGL7wyNbmetNz1jvUwTY6eZGLemz9MmufljnRFOH0AAflOdKXgx+UZXRgG2LOE+3T+CCtwnbHgO0cE1TQNKHdTH+UBVDwFFZRuBroff4qSBYG1JrpHz91LCqn6OcQDbo57m54NwOtg5OMcRWteUO0rNXsqfdr03zo/N2C1I1secS6KZRBT7RfE3zasCvBzXELS1JIxGhkcbDoSz2pc5aQSfXnaEuavfa2rhlaOtSa6QVPAttGPrDZKi3ecqUpp6wyRqlQ07n3l5vJ4urVOHL1m3siCYjtmVTXL3uVawTuUBne3XDiGs49PIrg28yADrJdIeOa1jb5V7eyet+Ks6Oo1yhVzWiv6TehNIM79SZ99eD+mxNne69maBrp7hg4deaFraZB6xjA3vMS9Hlj9bFf5ezeJoPuA3vzK/tm1/67w/B6L0JF8dvLNWujNxeTnY7WP3Al7lOxWV+ql/6bCc7/AK94yz58FWj/qPokaYe4GbcytTZNZ4wE0D+cRkDXlAUAtqzCAhYFvxmrTt+ji23LJ8//mci/61qFkmb6SAZtyWBfmuyYnW61lVO5Ap04YX37rpxq1Nkh1JQqX/Ux3n9ma87xb47DiagDqGmnXTM6/zCzWIrQcsczRFqvrf1YZl30Mu7T0PnMYAafZ7+UsyKTTSn+Vd2Pty2sGSh7ZgtE1k+AtuPcYfAfrxt3QKYseAvLC8ykJy2kKoBBAFMo3vhwSSXJwvYpA+lSleQ6sD2BE1ObbtzatAwMDA38vhgB9YGBg4CrsfCjlr0lzl9kuWuF+543qkY+8Ldivc6BdP+/xA+q1NP3CNlezgCrXbvB6VthiJPb8crodjXSrubcJ+ShsCcw9o12ZJC3zxf5udHH7krNgSa4wHppm3f2JbQIQCT/iM2gifAwPqMXYybT7TGdEXERwnugmIxAr1UiIXN8Xnvz1HvV1fSVZE4ugHSi2Q2t98i0UVlTNaPEjNNd5pwuHQFhWfB2TnhNGsKFQ70Y/JlQqAWo2Y/o3UMBHEH4EwktgMZPs0yBUAtRNzb4eUbQRrFf3t8wfvYG6VVHOrPbhPEr82tsWbqMMwqxd15kIwj1j2WvLVL8pHa+44c/L1PNQi0YukdhoelEo+UckjQ9lQkalVca+/lVax8YdMTG/vCA+J6Ph1E3fDZ2qVJzLRcAk9Nj4kn4EZyF6YqDFQltL2GfvE/cmQlkroYpQKnyVmH0zTGiv4Z4LE7Fqmpw818r8hsFdvWvk5vbM9aPeWMxa91jTY5KvSMztZ9LQDlgNCzt/mkwYqKxfkLp7Qlp128KVjPBV/Zh0mkPaj91Dk3Ir0048Nn82j16UO++ZVGNxi3ns+mjltrspQqNP9Px9Js3O/fsi933arra9NM4EzGY+sGbcddN1JuDlQH1tdWe/BLX6wR6tLTcrPO/tM3r7Yb9ObOybq5Svqeu9If4aqwdXHfrwu06q3XNQPVhHZgzp2D0yhvwaudUhnF+1rrUqWWi1a7ztR7oOf+Z0b3lFYmPdJgL+m1Jf/1fy/3opeQRXf0xgLKXb5DXf0gazr0H5BUnVLml/ZDda9uDa7rcbraummhM1WVOXdn6trEXZvYAG0ety2O0bgPrQVNoXleo1Akf1zxrjum/ReFWGNc3Zz83dy2LqmpHNbFuLNezLw6YcnPfF/d0AG1p9Hybz3Irber8H/Li9Bn7P5N2vSefe2O/n1h5C+rF7+3qeWA1zAkBTEaBPJPefJyE6hQA6lcPD6XqAmA7kxwVYLsD8IlroM9Ikod84ehifTcZ2Hr21vtz+doWjbgMDAwPvF7d8+Q4MDAwM7CIgXcLX+4i2z60w9iTonwxfRsLrDx+8Btfk7fGaD0UgfeD8yjantUz7UHGowZg6GJ80w0bdWQbNJor5sjVd3qkRrpWPhPvi3FayBBhBrxVuU/rV+87SlWVnfFxdysu4AJgxI1pNSwAUklbjRCdEACeJO2POYcAEogkMxiL3852mcyUAUM3w9O1ORiNdBAXGVGFm1DTq/Swm6S9LulPxg9yNDiDrmgKEKP040cMIIWRqJpqwcKLnTOdUHp4Tb07oJ9E4DBTAHBFF6+M8pfyenSb66XwS2hNTgCNnk40MYDpN+DcuWBbDpALj08MDXuKC5SXdJV9/93M9FCtmlKuYzJzamesrRoXrB9x92Uhv7gfbirs3TeVu6JnDErmow8iPvnsNqXVfr/uWSZ8adVJnjGzKsMngMQwq6T9EOg6Tf1T/ijlsyyRxyZZR052AcK7jAkn7Q+Iz6XgP8M3OFIrAW9P1zGnUzxWfmFDTJvSSKUepFl734VgzowlljKAyLWrbBCjC7S2m66oVqqC8CLN4dWcsCbPX3rHOdSKZZ2zHro0vNLbmeiWI7Aug5mlz2wHKSpQ89I5XmPZAf41TxrsSrFjm9Z2p+QCAaKBVXFPD+GZhguZDGS5tmPpwJu4LE51dHPNa8XUb5bInU5pzhU97Z9/ytO29TtvUW2O6qOD9qeO+t5cguH7q10FXedQp/+EtoA/o6nSVtcuvuw71sLe37PXvo/GvTO/xk5v7duZ/hRZx+lG/Z3/jYJM8IkDvZXtttdqm7PmT/L5KgB5MvfX6oBF26nivDmy11lJyeVKnHNf2iVvQm9indp9pDYOq/Ghuwa6mZVV08XsE8M30Z9vHc71aAbQkpOa79a7zb5zS+urncEp//xWAGeku9MeQNNSz6Rmz8LkDeRQmBJpkX2IExnl/Z+L7/RJC2gv5gxtVXij+vt8G7td7bhu7T1Gn9BRz+bQudJ1T89RIJuqtcFrCsex7Ko1xZre3sHsn3ZsU8og5H0xer6+JNjUTz34tthroln6Nqz+tMeWF7N34Jj8lT4PYZc0K8uuMzHOjfW/GrfEbe5ifjh7t/TKttx52HAmPKfezRmyCjLMz6DQBpwA+UfqGOAXgFBCmgOkUAI7gZUGcZ8TLnNp2iQjPP0DzM9TCHKsZ97iu03Rm3/ZptwfbxDXt09o3/ur2HRgYGLgOQwN9YGBg4E3Q5FTu4LUfKb8jXlvm1ub7dWke1c7dSuEW6I2+vxRPQvs1mugarhVmLz6rWffHTpp7TGEJ2LobveXe1DyXfxoa6l+NWffChKEqHivDKWsfotSH/kZgwSVVLwd8ns4SkDCBEXDGM10yMyexn9TUegCZCk5KVqJ57jTSkUNJWNOfVDhe7ndPet6x+lD2TJrCzGLbyFw3eUA6/kGrBq+1nReec9pEJLwcz1QySVAym1zLzcw44RKJRWCuJutqVpDG4dwuBMKJApZUkahjeGz4N0xoN+NVSVA32GZe94JtvLtltcdo2siIuSsjyEGqJI7NsVQaeyfx0i9y/6qmHmWmBtQequZI6V55IiTT7YYGApg4aa5nM+/ybBnegYRnldLhHBalf7LMaSpMt1rtedzYzm8Yqb7+lUEco0m7xbx9BfvTM5pbDOSKEe0Yu64ozTRWAXvuVMZqMHMBjL99XJmD743LhvB81U8b8XJyrvz2t+JhU6fsjYQrrcKa1nW67SDHsRPhKuH5DQTcNH/ZRcbvMTyD11dQqx+YduaG82tIbI3bzXRvyfQX7TuPbO/24hxNI+C4TMDiFvr2/J8Y+Ew3m27XPVyZZtKOsSKg1W1z2Mb7fqb1+08Rnu+gR4Lfhtr9uHW/CnWnq3fcxu+by1P9RaDOvvPqGvjZEs4iiDdj/VEevjLwz5TuOQclgfs3PXwt65s1F18dwkqVwDoQdP3RfYX9ZiLAHg6lvJfXA2t+EaGSHghlCkZsXAAAIABJREFUr2TrTvdRDeh6pXTK9wGRvTLL7iP02VjPiUlQSGBjHh35l0n2Olq2ak9h9yL6jip+fvaa46uCaHxjlj02vrNsmlvvdo+wtV5rPTBWWawjtPLYwmsWs78PpTZ1/OuYcfv63rZSDwwHAqYpHagPEC10/QaACMflirQ4y4HKCPCcDmHavtjpGHV3u/b7s9Uv9iZmfX4Ha8jAwMDAlRgC9IGBgYE3gW4Oe5vLWzhAfwtes6ke9XgXXGXSXT/QvMDhILa6vzJkDpl0b+WvjCGXR1OQ3nb7KgydLbPugAjSlQklwg5GNkAOjvIpHSJ+xAs+hiRED5LOZzoDBHyLLxI+MVxmXAAwojCwQtBb1QPIqHOEkPJMGuDIGumKaToBSHeVt6qz1kQx9SeMsXm5CKXp38vyAhBwlrvaJ5Q70RmMB9FYf+EXqdYUTzXKX/gFmQ3MlP0fRLP9JT7nwwIgTvllfiLhdDoDYFzmC8CQ0/hO2M6pHucsJCzuT8/PdVm3ZCme+foevvtJtvCHNdFd++bydMaWChBVe1mZsjm49v9eZUQ0BiT6lec12G9EJ3kisYRg+zlpuUzjd3k/Ms/l9lcmr7nrPM9V5pqEik/k8rbutvhc0qnMfzOQBeSWbI0HrO/pbDFniQpzN1e337MorQRXiB1YZjmjb03HMqs73v7ZD26fn0+gOggk7xSQTNmql4vvzfGv6Nqoh4op3w/WjrsTp+VfClHn/Vp057hrme7XZqppmnRXWdDmaz9erw+2frfC9PrbtWjVZasNGwvPobJtub8lDoxnAPj2PWmhW/9bp/4FyeAXYOZOyPUbN6Z5FH563OtKKjR/9b3nlPdabYJMZWah+Z03L4cP9bwFrugsRw8J3JSXFyTLL5n3Kn8zhluazN/M8yOV9wlJaPYYykG7bwtAC4rE29LR2MwSkE03Z2edc/ycq2ulpiKWVsjEaxTbFM54J1qYe3sBG8/SrkJ72U2RrS+hWy2wZI1xp/2d61v9bXbqH+v3hpZ32YJwyW9VVqWXUQnPj46R9zSND9wM2/PbZtuLd3cfDwImAk8hWWVTE+76qaFbvhjBcQHHpVg5WNJv6oneykKP4tHJBgYGBo5gCNAHBgYGfgpam9PW7nngV+O6+4Et7sVYfUfwV5XvMTl7/quPQ+//BOBxw18S3uSDMZrC8kr41Ei3pVnT0FCvtdGln3QE6SSkqCzMjnWODA4RT/EFxIRPWRs9IYQpm10rMYuAuaSlAsokuLMm5BOTzLOjCtvMyoeaMqkOpATlXxe+sAiSZnuQ4wFeoR0AAgIiR5HhKZeuBMgauABIBV5k9Xe0fsgRojWmvCsvlHiD8bmphb4i7YDfL1gTegz/lecel89qHt1SBt+WR8OvwzLLuPAC0dVcYEZKa07IYXRgC1M1X98u924ylStYucTSMMlBJwYrMe+0tw4e27+i9m9H50YyfpBzxdh1zN5CtYTRuehoW1oB+g49LeY9+Xg+jE9wY92t7n43FeQsTlTDropv3Rxj3ZZD/ZTOrera1RA7iM34d5g/Xitz+mOx2bioKm5vv3R1vh33blP/Bt8Wdr49Wl8MYPlYzLi/RRGPttvRvN+qGVZrld+UUfsXWG/g7pL/vdH9KNiu00rTPvWxeqU4umHbC2v3H37vwEkI7eNHFKNbVmBuoz66cjMVrXMQ8CQm27OQvrUumnU278zd/FWtwf77KZ1AYZajwJUAWwK64pZ0nLA678M26tJOV9kqEOXil0zMepvpt3eKo+xpqv2DEeDntdqG0boytJu9B2d/G9buC7gI+f0eq6Tg4rt82L23wjbjuHKswg3cB1fMd+6qAx2uzeYgoJqjJwJO9S9NVG6G5JhafFkQlxlYlqRxHrm2xKDY/A7u7a0HBgYGBjyGAH1gYGDgl8Fzi1ob2oGfi9dwPC0j5TXxf1coY2JD0L1ZRU9S/f4idht5r24NDVU+PXcU5tLKDU6Qzvhq3LJGunwVV3IWlaCDax6cMoiWdJ8fBcKPOONjKNuxT5gAmjATcJG70amiKWbBIHPEiSYEBDAmgIALJ431aZqkqMFUO+E0nRIJy3xQeN6qu1QY+9mtxVSD8/pHwkBUod1pOiEiIsZySICzxLEIvj/IneeLSCSDHAyYJKeL3LU+nSak0/YprfP5AenUfboTfaIJj2B8m1/ErKPh0nlt3lzcewoebk3rJwk/Vow5I8xYBzbujrmcX33Ee8ypNgOPtgChjBE4prYtn459ZXiGZN472iiiVaTCbK2DfP9qaieWcUEcch1k6jlpPVfa3FZoBPFXJnNuehNO6VEunC+25Vfb+E1oOxJqTSlNyDF2NxnfXshg+kPmo8uD3+6saLR0AFhprLn+sGJOk6lXw0AH1e3FOn9x9tYHFTMAKJo7rUncM79XPEhXX9bfMzP989Fh/x63DFebbFc01lzj3KhgeXXhf7ngv9PuGT2h3DUNv5X+0fx+Et4q21b1Ae15Ua1y3GrGfS//Vhn9XPdqjfMGAb0rjjbHwI7A/d3g4F5/KyrJP1mILs5lCXhF/uKvgu5vzh0M1eCu6NV9xjcZ71ZQzgC+yLveff4oC6n2228L3AbFYKNO8neOrMX5+heuacxSPk1/QblSRivNzynGzVaufAuWqma0hdNUb3dXh4VRpkdis7Zb+nUPZ/6quBHgBVUd2Xi5jmxm5nW1d7F5mDrMe0mXtul/FbbW/l5zttbE1vLxXof2b4PXbSbS9OP3M6a/V4F1bIrfROnvHIATiRY6svY5OAILJ83zZU5/81L6pHwTF4sJmQBLTMNtYGBgYGALQ4A+MDAw8GbY4qqMDev7xWibV2OPObXlv+nX+fjsJbJKSxklPg35wNzTRs9uwFcUs+7Axv3oVpBu+U3KBwoLnpYIQq2NHsB4wGl1N3r+GCYCEZDExIxJBOV6t7hmosakWQhjea9lbHt9vtRBzQwjk2Idms0bCQOTGZjkvxd6SbTGOqb/pKecW4c7pMJzwyQgDc+pDR5Q+JVduLZZF8S81AXsu7U8t8Kt/DYTfR+wmtXpQT1MoDuUIWsGmXS7TOTWmOW6r1fmF0jKoQxPapCvY9gwZZXhxQRQoi3ds2kg/OrCZNZ5yeZjy2WY1zk/WpU1V7evg0ow34Bl8CpjOTNg7SDh6me/DRv+rOWx9Y91Xk3tqgZzLzOlW3lq+/VsNmu/MHlaoYC0P1dCF9T9wGv5SfmIe3ZrWuEbQVblugJs/t50f+nbY4/5+jrm88BfBD00BOzvHS3mj8DpB4CPwPLDmXFHO6GtZem1y21vfO/Gs8LJnr/xNnfnpiXIrQ1Yu6Hn9jtjszh2vr+23AfC2/Xhm+ZhhMiZBvPInDTPiVMcr2Vu8YWS5mnWOmcx2R5B1sqPzPucX1prgO4JOJl5JkI25F5N4z6+XwQDgNn0RyrrjhX+aRwzBln3PGTpdiD3sDo8aE2tw+z5dU9j93A+XMM/E+LDu4rRvZ7uGb3wvBmXa/paYNS0+HefXjeNttfAPXDrnGmucYI2q90nkvkkCKlvBbE0RwQ+TSI8RxampzOg8r27RMQ4gy8X4HJJwvNlLn0oxrqvdi0hHN3PDQwMDAwAQ4A+MDAw8JPhP+bHZvX94Ve1yTvtC6370HcZVzZcjynY83oqVUE2YxOxaaq9k0GV1k4aHc3ztVv656sp3xeWz2NxIxPOCtKTVqxh7ok2OqjWRvd3oz/xJWtxE5BOniMAYQEzsGAGiBDnxGSaTumo+sIXIT9IuhPSXepihp0S13mZL67+6so9nc4gpLvQAeAsGuIXea+bmnDOd7wnnXHlr73EdJf5g8TnwFh4QTSSdAYwxxlstFU+BNVIT9mcZQtreXkA8GN+TuWbkunJ+fICZuAfSedf1ULLjL8OQ88z03eZ63sBDnLnV8F24l19F/oeenlp3xbmbUvo+VOw1yh+UnAMTu2oeQiaCSLz2xksIzCZSk/HVLKWOICkxQWUS3YbplozIhD1jnQlyzKYTVxrblz6KBn6t7ugYcplprZnyB5kOnv0DkiQe1f/SCUfMuXWO0sL0T4j4891vhWNvXaP9StqSwElG0u3MMZzmQwtgNSrKUNFc+deV09iZdbVu105ln7a0NuYC562wt3CdDZCnm3pSp+mm/PGcUHEq2WQv2refDXhDnvzxI3xX4uqG3C9zzzSTY8s01t7BX0+LI/ozE+rDNz77j7cBrfr1l7av/o75N799M75qka4ml7/pnE78T9pOBP+MUo6vG72E4BZ0rwgearWuTS6FZdvY73Ostw7w9a9utLErLnVQWPfyX3y0o/t/iVv/DWMrqG9uaORD5XHdNjParCbgcb2vbGuVmttLKVYWQsy+yMyaVgLQav9r627TMx6LfNz48oSjd+rrR46/g33Xz2M/3LYrXgEAH/I0u7RiYAQQJMK0ANwCuAzifAc5vwGAxzBcQbPqnkuJtyXRaaU1Pc4+nHQW5TMuBkYGBgY2MQQoA8MDAy8GbaYvEfwqxgJvxq/chP/t9b5lTjKvNvjaR/xb/qJxy4dJoNVXtxxRxGmeDdyATOjhfAVcBrpVJJliFDOlUmfZaqYacGPCDAYn8K5ymaiExbMRhvdCtnkjkIuAnplsxGFJPwzjCkCZdPqVj+9gKrH60aFKXeqCXDlloRRmmsgQqATLnFOd6JLvClMSPrqhGKgvbCbG5QaN2V0yXuWj2muR7jkvbLx6nGd0Vb8A9mv/G+l985gAF7DWnFIE/0tCNJs9vMplKkmk7qaNrUM5OzN9XPuRwHlInR7p7kjMRjbwVajPDOoxSRrnhvs/EModhsTc4x91RJSWqrpTQAQiuUHWwbP+K1MnRua84NhhqMOdnXTWoZxiznMjfdKi4tXUfp5AdmqQHPc2bRs+1MjP6nTbDK5rkPuVYrXLvPEt5jnbN83ClpZEWi17WvQSqfHhLV1B6za8FV5vibcwG+F3r6opc1rMX8s8RYULXRnrCSjt5S28u5hy7/lfth8+/aE6i39HEqRyM1OKY2ezYzfB3v0+71er+6u/Sb34anhbedjyf/RkGLXGC9UfbGLOozw3IK3ye5uvcjQ5QPra9qfl7FnvpHALrjdo/j9n665hogArK249PZwVM8BDCQT7FXkeu2rBOiufE4Tl5w32XiNdMoZA0az/tiG50Y4EzY/uvpsdmmbZtt74K2wtVDseaW4bNvO8xAIqW9PAQgETJNooQdgCuCJ0pVSVKyscYzgZQYvMzBf0p/egc6cjTzE1b7e/3q30ZEGBgYGjmAI0AcGBgbeDD0OzhG8pdDhd8Cv2sxvMVr+crQ00RWbVaYMgA1JbJfhA4CfxL2hiX5IiO4yqPJy7v4DuGLgojAy7EcwkD+Mv4rbF+OWDZxnRowyzdjIW4VptTBmYsDdjU4APoAAOmMhYAZjjpecN5sP4BACkgH4xHRTTe1LUmsRzXUAITFTI88A653pnDXStV4W0TDXX3WvNM/zw7ohLMN2AeNBDga88AWtU/mX+CLlOAFgTJiyNr5Wo+Vfs6Q9CQvsw+lDJocBXKZ06CDoQYKX55rAaxjh98SOXKAdYSPwvTXRe2OysrlvGcr+1ydwhOF9hIBGPBVoV2NavR2DG+xMbkuPUiG0psHRsFmpMF/tIQyKKNrjXBi9HjEmJpnN03Zge5ctI6WZTZ6Leyj+WR6ucfNzKQfp/oORlMNymR1zd6X1ZBm/Wk4q9ahVEjl7iwOqAPaghbX4kMvYY9rZeZVQBPza17gdrde/shYZoX0Jsm1j66TtbOop0237pC+Hhi8agxVTPlctGzefxwFs8TzvIUh/qirDZOqJ6OHeE+g7YfCupjVxyFcnuHe4cJsJmzA+PZsn8BOr42BGV9Nzx322HZK2fVrP9r1Fws4y2/SzTeengrvffe5h1+Bb4OkjrNN8bR6/AnanuG5wvXxot+NWd5xz0SSXVKr9g53rH5UGE57hDNUQcEay1qKyYRVAf5uxXqtSIqtLkyrrOhbrvVe9k/ZhCcWyjtJi9lctcvLySeWXTX+x/mI0a0V3K9Gq++VNh43s1lS7n/GDsPh5+b3d62TNXSA/V9m5+i1LAOcwkL1jeW+gq2nep63t33jf2hcM3AF+rLXnRXb/cu6rVO/3A6W/UxAt9AAKqn0OmVJiSTXO6W9W0+2iga775NwHous/vc4xOszAwMDANRgC9IGBgYE3xa0b09+NWTGQ8Jd+iOSPwr1w2GDy9PyxZlr7CF3/jYSqvJQB4pg+AIrQzCfj3I3bV3H6Im56ry6ZcNmsuzUhrhL1BZinBU/LAqJQaaNPklIkyt/LlVZRvqcvpbeAKwF0uSKZ5L38alr9lqSNt31krXgo63E/hRZfvEVJqwskQSODkYShzIx/APx7kNr2eN5huh7gyd6e/ZHEe4PoLeCZycDaJL5nAm7RtiO5yEkcKx8bRiX5O9A3I/pgDYZnbopoB1WbKUyhuOfmEW56JSg3jOIcLoCpZvwW4Xkrv0QYI93NvaIrC3Ztebjk6QW9ax58/Z7DNQLkcnlwu55amXgzrKuMPeycbITvhCTUz+1Gph0Mw57sKOtJ4SxNRuAAU99w9Wi02kjmZ678sE6nqof6tTy7fv1mWui+7PLr232HsXx1tu8db3WvdKsdf7e6uRZ26VotYztrn52Tt4TnNjn/fEv99sblFdA9GK/Gf7tv5fAH0mbdv8rv7695fgO07GKhSd9vH7luF6oCsSw4R1oXdI9f0aL/SDvMVNYoDdAVnms0ylHyAdzsJw9k0jVXuXC1hkpc/x3kM2Sbvt87qJCdza8pty1+oHRYoC5Mp5wNafWuRq27I71ap/WvMWCtxnkmWY9X8Cq4+qkbSRpFSOrrqFW+DYecps3ftVkV1YT5C4f3m2Jvktjw51WTyVgMcue5CM1xnoAwgU4EUACHYIxOSX+SO815FtPt9i+K9jkAUi305kzf29Pd66N1YGBg4M/HEKAPDAwM/HT4jeoQlv9Z+MM/RJ7glMGVudJgmLRQ3avX8u+lIXejU0cTfTNuJ5MVn7LD/NnSKiMbsA67J0jf00aPRABFvNCMBypbtgDgE50BCvgOBvOCbLY9FgEZc9JI1xv/UvZBSjo3GWKLaLaHEMAATtPZ+K6ZjvNyqepANcwvks45nDNbilA058/hXPHuXsQ9xxeVnEUojEj3H3JMZt5VQ/0kNluN6FHiiQY+mTvlCeAz438x43+WOWnR5irwTAS+ka+wx42/Yr6/JX+S9trVRN9m0neLsRKQdSQW5Iztd+/G9Rn5d+tuGdctxmKPPgjzPLlzKx5McELqG0HSIRfAamOryfRoI5v8dbBHrpJI7rGkn8eiu0u90qBWBrhPR+lCVc8MyMEBNvE8kxnlPToz86WQ6PcXN2c65zLP2vbiOhk27s7DlqbNTO4hoj4sELRCkNXgNDudl1WoQmX+LCpzjfqSbNbaPh5cM+/ZvPv2BFZdeJX0Kg6v3a+FWpix7WYFPRV43Q3eDe61v96pS1491M93O8jwznFrMR8/3pUM4COAH+nRywW2usC13aO1LrbkEIyD2ud2XWvPsUQ+TBD3g9XvhOglHRu7VxE7+4RfBlrvx7eQhegad6NEjyQa5wC++U2YbQtNG6gE3gTgK0s6EvcfiTMBoAhcJJ1/ZQ/wiG3BeVUUs2/Ne29Lk7a1JQhmPfTlsXsOO2DY7I0bHb9aKzRf6+Y7KCVLPK29h0fv0LL+reK01iruerOaxWGltASgZqRytLh8Ftr1nFf7gJKOO5S8Ki7XbmadT73Pbwwa6C3VA/fFzpxjp1eWCTr3GkLROJ9CMtl+Sn8UQnoOMq8FRpDvXcgfx1iE5xcx367+QBKeKx3QfM2YySjPdR89uiYMDAwM/L0YAvSBgYGBn4oWc++9Mih+BX71F+Br8/9L2nAlRL8Se11+y7/JEDWOewzTQ3HEYSXPEYeW8GdDuF7dj07GBKPE3dRGB/Ayz7iEiHMIlSAdAB4QsFDAzC+GXBXKJe1rQsjJqjhI+W41m4eqT2vK/66R3Rve7RiGCXRgmCVajOm65hPnf6mUXHxTSE0haNk43SP3v6YzngLjcnlpklmeWwSLW68su2U0AQ7Wx6/DEeI6QjYAd5sT7TirmMPHE6h5rjqWzRwAlDEIZX5Z5mXNRF6zlDvruWp4r4KF2g1Uh2N5p1ALzqs4jWcDrvLmUo9WeEtKo2HkVgxrK4j2GTl3tu6uc6uTLSa5YG0+3xXYiZTrwwtg/Hqgfc0nYIjtMsLtemDcJH+dhyqNOmaTLKMcnLB0o64nHx/O7aah12qIlvte47zrSW3gd8BqX7azWLII0RuyvsNj4ZrlrjdEgDc03W7XFcghzEaQPC2/0TfJW6V7FTp17NfK6joEkv8J60N9UnFfrZtf93RNtnFjMfWu7vr+iNrse6T0p5rbLPG/7gvOcxla644Vcld7FVMGv6aon5ocp9bAaWTVcydfVy4wh3JIr/Lm9VhtjF3idIhW42yPMLMOArneuOGvR/Os4Hx1WI8j1gerlXapw9YanAvT+5i1pDT2FT6ZVYD168AdsWdZz3/2mzFIzMgHiSvh+VQJz9N7ABOBNQwiKEZgWdK1a4u8z3O68zwL1o32ufZF6PUU2mnsXw+jEw0MDAwcwRCgDwwMDPxy9D6uBq7Haz8CXtsWf1FbPplnK0zfrQLDEejJZPYy5s+NeE4AcijdLVqUmUHrfBhtgTmcuxGmVEJ0XKGNruWKERcAc7jgM9Um3ScAp/CAiHS3OAuziECIMQJYRGObsIhm9wmi6c0vkK99VEw4wRJrDfMTnaowD+EBLTxkzXOpFokz0VkOEVg/0UgHsIhPjEvSvJKszkh3u19C0kmPi+imTwAz4yKMuXSXOzCJZrrm83T5Lk2XmAxxibj0hJK57nt+q5cG9jrf4ZMELtgBJicA0AnbWugHB10+1LElLdD3BtN2N98e07UTLmvRqY3DDjPRM3Pz+LR0Nvq8jeaCUTbVatJXXjpZzXYzZ0RHX3WCJSamsoUX6rb491V4TTd0msAzzhoM3+pAh0w+ZITuBFT1b3F4yZU8rMlXYfZRFeZWtCrKNCJbib0wNtnmzHXf0DlehOgkjHv2delJsPN25l86xrgzGdsUilTd1Mf3YXtj9ACeWo69dPh1TXQI92bkXpPeFpPZt/tfznB+q+K35rBr+pzfWBxNZ6/ZW3FbS/g373BkH5DC0KZQek1Int5bS+WROtuzBuXoa3u/g++drb3JY3BznMy1TI70vJCu06iEoAx+BPBktbkpaaw/6rxPkO1nwn+knhc4BXNuOV4HW3Yi5MNhlQCt3lvlY7J+rcpiuFaHSmt3u7VTHsxUh68E+sm9voqmenHJ1XsyAkC8rHe/ebnm6r2572kOcq6ekh6uFaAX+miVqdaLuX+6ma9vB5e122I1SOuP84G3Q3Pqc5W+mv90bJnD6EHCBSoC89MJOAWQCtODCM/1m5cBWkRAPi9AXMBLBC0zMEfwsogAPfU/ynnb4yDb34q08h8damBgYGAPQ4A+MDAw8EthP65a7gMDvwGUQaWC9FuYnq3wXealZMifnZ9LaIv52ctoRYsKfZx7Sxtd3Tva6F8l8J42OjOJsA7VFMExgiLwLTA+TWervyriZeAiZogjK7PMEl4z6hjpTsjqHkVY8kv58l3p4hBR361uU+iJmDjn6uSIHbDTNFYmgd41yHXgRJeYsKfgBJMmjT6boOHrnap3FQT2ktrObSVou4KsQ9gVol+LnnTinnjDdS+P2QMTAwFF6K4MTnL9kfO/fWaty6u15PPqAStBemuuoc6v98+kKF3C/LcC3tbd9dn0r/HYYvK2UB1YuAE278N5yk91VzBhS8DMSHeTZ9a50z5ft3ErQ42njHUTx7aB7x7aBja3lQa6/3Xzzt9iMnzg98fjznzgp4zq/YrF0MuufLrb8oV2ej239zr8vPl2a3XktfiFwvNybzyv5uoEcVgdaIAIqdy6/LgRXqH3m+c11OBL4xtBMRFwMWs4A/j3mLn2FZoa6JD1Ijb6uxsvW9rRul5VY63KvEOUfhuYtbMZXtdCT08Dzr1Q2d4LELhhjeHoZqUM4rLO+/WXqtck0DcxtO5M/abqb008DTpba3m13bZhBm/ot4DKsPUg5hTSXefTBFIT7lNI2ueBVl2EYgQvomk+xyJE50UE56mv6ZEXPfwhu9kOQXk3DNvvi9v7XcoGBgYG3gOGAH1gYGDg3WBsWwf+IFQf/wfD98Jd5dfI2PHKdolYhVeGhhdisWFSWWfl6nhhPteCdHFTbXRA5U0s2hwq4HYc4BjxFF8QpjM+B3tHOfAJJ4CAZ2JELCJQRjIDl7MhvMRnAMBpegAIuCzJlHnS4Na8kjZL4rumdGa6CC+WEEE4i6rNXNlkBqYsaNcb2ENTFu2fJxHRc0iCyTlewGBMWdM9CdA1nWWewQBCIHDkXN4o5Xk4P4ABfDh/AIAs9P/2rIcwPIPRv6PGJoOuhYMM/6uF6LdK1Y+iMWgIKBpO1+JonBulGcqs8sjXe5qxmy0btBjvNn0zf7AO5/yQ8y3yCQYQMhOr5O/nB0d3J9vsYMvm55oes9sKCMhYulCN+J7QHapNpXeEEoq2fwMrrpvrN6a62lXt6TbziNZteS285lVi9VybFH6SoIQjwAiJwW4DpZnD8PUdsQHueITncFrmuMYTkwQckLXeM59SiO/dAevL5OvWp/Oa8a+H3gYvfqCFX30goyFzAoBdk7qtuFvhtt49dLivxqP5/Uxivv3eA4uMMO6a9EXQQgGw89tWeMnvEFX3FqLbe8MP5R/KQUvmFJ9R7jBvQurPkv4k7npXue71lZRvsYSx9f/FLFI2vRPSVmkBMLNoqAP4uqyt0lwNL3jX/GW9dtfckFmL82+1X6qJrw8GrrFu8fK9k6qsLcBTQV/evV89x9Trdz09cFVbqf1BAAAgAElEQVTm4+lYN7vv9+8o33pmr5O6nThErtPRb7fmfe5rp+5nbP7O7Jdo4J1Bvy9IBloggALoFBBOk2ieh2zOPeZuZfoQi4b5LNrmKkyPcpWBWEUIqAXo5fvDb/Lrjkfi1tp2/uLVf2BgYODdYgjQBwYGBn45DnzMVfCb4tZX1StMwq3SvJbL5OP/TmBATFwntMqxVe+axi3oSYCO4rWfPFt97iC8JrpNelW0Rj/eYhI0/Z4k3mOdVC/SISaECdTianS10dFglChDx9OQwn8Vhy9VllSUQQmFkQeqmHpEAXGZ8Y0Z0xTw0W3pziAsOOFCl8pUIsln9kN4wMxzli9a9hlsaMewVuG5suUWJE10b9xxWxbEq/Dtj/a12KoSHHGJk4XqbNNhxMzOU/2Yopn+Be66yy4hPZbCDqshe2+FM357nIsVH+SerI4DjHPP1Mvw6wVtJtNMepeZ6vzZjgcqY8//1uc6kI9QMJLWRyx9CaIFQoZJqs2XrqxWZmgZ10Qomk8UHOPM5L0aEISVYF3S07i5uStz61XwBqROvLA4cBKeK5M3p9e21FDm4yB/jcxaXYCsA4Ei0l2QZk5N41DLJOMyCxVMg0UG81JndLC7M0tKXGacNbG2rFovJqPIRehuLHDU85GKBIwlD69l7rIq+SG1E1nGezWpmXyMWzUH+owOjKMchdEVYjS1CC3d/eS3vPfA2u9uxmsit/ZgnXmxmQ3fXvBWHlfjDnu4n4FvbLR5N3Bov3YnHBlCrTAMWYuQBOeftf8eIdytVUfCVs8yd3T31uady/yb10ygPg9HsksiPw7s+qrvwOZQ7dah7Onc+pinoW87YygX3c7Etj5SOcr6x46WFJYXu/yaAPbzD3D7CDMXkMk7C60NKQtlQy8AkmD/64zVoaqrwa6/+IS4FCK3eWqsElLdW3FtkuuGqLcstv658e4jloPBXfK7ENFg8wCNmfd2tuOt+tIdQj2+G+uA3qOuTc02Ba4Pa5qfKn713qKjEc+7rcro02qAD4Z7d3jNAiD7zK30yLq5yrFjnNx7s4/buEnbHGqWPQTgFMATYTkRwimAzhMohKSczkAQ4TgvEZgv4MsPYEn3n1vhOccl333OYCyZIh3jvjzrRm/vFHwnu7Wz2InP5zowMDDwe2MI0AcGBgbeJbi7p08g9wfUEe7BSNv8Yttwf80Hz8/ilvVwpDxvydX7VXX3Exiv3WpzHlvV2+FlVybdV/5eALCRfiujVZ7ccQeagnRlXNgP9Rw3cS+/itsXAN6se+9u9KzjESPmyPgWIh6nch+5mnQ/0xlMwA+5G10FlTMuYAAz5qoQQTRo0y9wEr8XCU+qZcJReMcsPNiQ4wNF8zyIwFLvNp9EBDVXnErGSbakGk7fX3DJoSKA2NHe4cjNpr1cXnK7MENKofUP4BSEQdFnNrw9GsyYuyUtW33WeuwJiBQdDfO8vHiBa29Q+rtE2bl7eDoaC2BrXGfGoFkLVcPcCtMz494w76MeutDxyaDcY1Ny2q8yFdZkbIBodJMprsTV7q33H/bKLHRSzp/Mr5DBS7t32A5vm0FoS2UUr0UCrTTQN+pdGX9hKuGUN5arm0o6KwYjQEjXTsgJhEKgvqq7CoJz9urmtbir5A1TusHsbxaNUPXBFjPaPrvlA+QP/wRDK5KAgIH6jnmXppazIl3cW1p0qzvOG+kSGgXuwcbf2/N44Qjce5sN27std5eyO0yDfd3JIwimqJ21ppv8a+bxW/dve215Z7yZZnpnHLe6HtpBK0fmuuv631bW/rmVh5fH2HUHSIKTR1yhRe3it0KQH485843oZi5mF1+7iuwlNQ0iAoUpW4vmKim/pqr7QYs0rjr4kUBPKKbPda791ujH1bqitMhz1jiXOHqIN+ia7xqdqLQhsxzkoBI/IrWhRvlq6TFl/xJcU5gwDOBfKc8XSlrnJdNXDtNWZF+59iEbVhcYurkZqZ8eEUChQYGuT9opWoOI89mBm0AAw66pHRrsWlpFJ9grp2yd2KWzvpfdJ79U7k1KmkOh1+Zu/fbpVGWlftitOTGP9b1Od+v685Z4LU07a2L+TtihwVqsyodJzTqjWdn9MEhMtoc0F00kd6AH4ESIZ2A6BRBJv1wY4CQ853kBXy7gl5ckNFdN9MhJcK53n5vypadqY7xddlu+FV67xv+kvcjAwMDAL8AQoA8MDAwMDAzcF09Ya6EDXR7p1eFaTNCcMbC+G91FPEqHDVjl2XNXb8ZKaMbA6t7F7Jbev0LMupOyd1QbXbSCrHCFCZnTSQAi42t8RpgmfA719o4ATHTGQnM6wW7cE5+GMdGEhWvrCxXrLfMaau5bYZeVcqz/Xf/2P7B7DLi+6NXCxjxTMi9/4bnPP5r9afkdIcjKmw7KTQ4KV44Ee42c5hBsp+4Ott8fqk1uZVBIh0woqPnNjfj3agOxnqDXNRC9TgQIAJg+AHgW8+U3pFZpIAvzLvc76oR1fsK4ZaM1nX5qt0qLusdkv6lL2oFi2pms0IdRzywt6QJdPwS0SE7etX5xzEZ7T/G7wM+m5R7M24E/Cr3xfo+laUNu2A3XcnsyL1eYIH/P2N9m3LKuyO832SMzRHP/aMRXgvM/Lm2un7euCvjSWw/MOvKINI9XwvNfAC+EPXIFwla7Vt82Wwtcy/0Vbbg51k2+3Gu7/i5Ihea18NyH/jPG9MA1sAJpKzRXf3bvJsxEQDglgTmpAD3Ir1xUxhHMhMicNM0viwjQZ/BySc96EDOyCNPZHIjwgmr7TT7668DAwMBbYAjQBwYGBt4r2upTWxHeipKBgevxZJ53mWMdbDFNerya3biWSUL9+K3EVnwg/YBupNPVRkclNM8MPTm9noXoEq5oo3Mx6Q4GkWqTK/MvmVuPy4JvHDFNEz7K/eQAkHTTT1hC0sKOMeli653IEYyzaLATCJfluSrsB/HTu86JCrOQwPmO9OiYV4urXI0/yRbUV32MF6En4RzOmRmQ2ZBEmMIEgDHPM8BAOE3gGLOG+nSaMMeIEwecwwkvy1wy8UxUL5yzDNXDwvENr0NT861S8a6EzgU71+98aYdbpeUEivnV+h/RYmgJJo/k34PPV9575DSiy0jKB1AAiMUHbph+x/pQzBbdSv6CbBq+uCudhjnHhTfNtn9S8d/KLqevdD8/G3fDaLP3dlMrAZOn5htNGDJpWEY6uzQkT47Ih4CSMxt5OUMk/GgW0Jp+93lUTEtgt3tZpmdVv7Ystp1647HuYCza5wxzKCBrJbk0cr4u3V75d6Gd+Iq4T56Orbi3+h3x7+A1crK/Ygv8xoXcHT93wrcfwOPH4xn19nN5C/SjuB3tQ0e6t//1hlW+ukTenfC8Mb8fwZbVFE3Pzsd6d/i/rvxfTDqMtBaaPJiRtMhXG3qZS/8JZR6165Lm+40NSbo2uL2J3bM8Atnkus320SygOofbw0xfXH2o+0m01RfJS89mfZ1RCc7vdSjqNen01sijaTKQD+3WjhuJN9K4GQcGbG5Tdr4b+2s2loice5X8q9vwNYubwYrOzvPABuq9d55bWk1kNM5rs/0+vRRfLXnwaQJPYsY9a6EnjXTKh3cXcBSt83kBLwt4noH5Itrm8mHAsle21zBV+zcy//pFa2BgYGDgXhgC9IGBgYGBgYG3hddI7zFDWzgSdhVGMtzlHUrEQ/SYQKvwRmDi0+ndg54Zgjb5lM5X8Sja6Pbj3Wqjywe0FkPlQJExR8bTxFkbXUkOAB5A+EEEYq6qaIkXTOGc31uVQu4TPad8mDdUp7xqoqYGZod5KT5MQKCAGJDMXTOy2dNpj7Am86knONtgSGx5Z7+9SjKM4pt4HzdHPIhrBu7Pwl6lt+ktWt5ctzs7k6ee6b9JijJxV5NATcdKQypLgURmbOMro+0oDe6dGJXddeoFvCZRdXNzYosBnbXNpbaZUO4/5/LbzOoKGre6pgrie+ObGpEPjNkiPIcpoxPw7xWh1RX28FO01HvpD6bswC9Cb4z3lutr0t1K60h+fwDo0AGxDo60gRdax438umGo+djO3E/CZn32+3fyYTbStwK3hVAdlPrmBOetuL8K3BtA6r8TPwvPdwP2w7y6/Ft7EZjvqK0OWe832Ma1D34vcvOaS3X298QfOhfdDxvzR/O5Dk8uTLlnvJ0VhYAQAjBN4OkEnE7po3tKAvRkAV72+jGCYwTmGTxfkuB8WYB5AZY5/er3ib/qaJU1O+qHDvrAwMDAW2AI0AcGBgbeJewm+Wrp4cDA+0NLiG6x1YWPDIXVMDAq8M270V3EQ8PIENKkSRlMjkGnTKeVIN255TQTMUUbnSVLr42ufipQMYwrAuIy42tcEEIx6658wc90Bgj4zpciAEISogOJEQAAgSbYlJM/4SyC9kXuBTznO8wTTXoz+klUtjTcCSm9pVLxJUxQWeUEEBCEJaAKX8/xAjDjo2jC/xAN+dPpAQzGfKk1queXGQDjByI+hjM+TWd8X14ML9XUldcU3ZNDN/0bzLnjkR0OpNFN5iAdK430l078Tjorba+WGewqgw2/W7DHoFWBcT8cQXjC9o7pgDId0EZb6UDKjH7AqKcUD3t/oo23KoMJn+cRIN8rmoXzPi6V/PXVJqvaKmQK3eQtl3nQljsVxeRFlJNKnuWO8hVv3QrPc/jFMaKNxl81CbOkvbp0uC53ywtYH2LITEjvz+Uv3+/r5mOXjmVNFs1zw2CvzGvaP9TPW5pkLdgx1xKir8oErOvJXmLfg28Hk+YqWm+++UV70ntPM+8Gfxo7nIFv34HHT1dHy6jaeEdItdqPbYTz/q3hoNPSo8zPb6Z5/toOTeavn15feC7hH+Xu7MnvVeVZNfFVUzsgzUd6K5C+azZz2s/iWyzpA8b8EtdTz1eNW9b1dY07gZi+fqZiMp6CmTe5CFv/5dSWGuerznUkJtslzkk2BywbhajpYK11Dqzn6Ktx5361WqSvzWojUOW1tQe8ES3hYb0Z2Qln/Q1FR9Zhu3e4FnlvtVfvPf+deH/a0nA3VJvtNaq9oIx9Mw8SyndoPY/a/ZvZMwYCTQFEUxKcn07AeUp75olAgUBB4y6IzOBlAZZL+ZsXYInyu7g21n4drSMI9vZzqop2G0aHGhgYGOhhCNAHBgYG3i08k1Pf3wmjcmDgWvTuRj+Ka/j+rYy7/srgkNfdIWUCNtNktLXRgZW2Y3YzGZtwXwF8MW5FiJ7+YaNJXmQqOk+k8/Jq1v00nfDB3SQe6ISoXE6umZLkfls14MMGeVuQPuwZjOA+7wmFr6qpZS17ob35CX9QQ8rPki8tjSDRpvmCdPf8XbAhb11jJ+DKVKbN5Jb89uBt0/4hqIbbgf5jDqLomLot0x4NqOeZlbCGnbvMJd08OsJe7oRtbSMqBq4K0dNfJOT8MxWGmaxXN1RDTJl9jHJvY44dqzpeC51NIofua+3ACkl8XeQDM24stdBxz/emtvLdYrZbutop4PUD+64Tg+APmxcGfn/kIfxcuzs5alN+fE0erWeLd2e2/Y3wjZOp9t3imp2j1n0WoEv8Sd7/QefTNpS1EICdx0kWqCLYaqEzr2YZWKzDWOG5hTfdPlNdDnC65/w1a9V7wBHyGSg26hW+4Tprz1ELOltoboMa+4Zm/rqv2ijoWzWh9O+97A/T8Jt3td8D+p1N8g1AnR2bbJYDgDABIYCmCZhCut5hmkATxKy7fE+waJ7HGYgXYH4BLpekdR6j7JmX9LtCPW+p8LyiZ2BgYGDgzTAE6AMDAwPvEltM1R5zdAjSB34DqGK4F6TvCcePhnuVEF0f9VT5EWJ64ZXh5xhzynRrCtQMcSbc2qR7Sjd94Is2umo4ZA1WKkJYAhAZl3jBMhVtdAD4AAJwAihZo3zmixGOASyi7oswCB/Cg7CoEh0nuWf9Yk7FJ37pVFXJWQS0beOWjNiRAC5ZJJ9cnmPSIg/TCQBjmZMG/el8AoOxXJLZOwpSDRFYlkXuTLfYYPzZuqu89gRTG345qjbIHkf/IMetm8yVQjSSPpE10Xs4muatEos3QounCqDW2oXUdzTuZvza9ugyhLXvHBHWdxxzX2sE9Fw8z7jvCm7ln4j1qQAV+AYy2ixJwy4p56RDOmngx7pL5mFi72dE3W9zv1d3Xgswcn2l+cYcYegUaA928GoZudCiY7wK61DJCUiSKfNCFuBYDftKQC5lrA4QEKoDBDeVy9FdVRG5/CTMk/FfpbflLs+rZujV3WvH/Z32sb1i/W3YWF4OhXuz6fteDWOE534cENIY39svtn71WYep91eh+WquvjeyxNe8a8ZHGsfH69D6KEJhnSe+UF4TcrQvtNY0pxI/a7GrcJsBnEVz3d47bjEZjXA26+a/OqfWZSxTtqT1H7mDXC2tfGuU7QnAf9TGkaw9mq5uSO0hiEdKBwVUMEYAllBbeSEuGudZmL6B7rVEP3F/JI1CrhH4Gjq8taYqlc6e5W5z+laf36efmXdqfSONVzaT9lsSOjZxxGpBNwjv+P9t2OOXyfwq+1x1pzymq01g2fPZvZdon0NMt6d7zuV5Uj8CEYPA4Ch7wyWZb8c8J2H6sqR7z/P81OrvxY3y32jsgYGBgZ+FIUAfGBgYeNe4hgv4GmbzwMA7wNEuvDcsuv5vcTf6XngV1rSiuAg7bl/l/QsAa8Ky3I2O8l2vchRz8IYoaaN/jQtO0xkfqdZGT0pBSW+cNKrmIS991lldQM+u1VIV92Cqi8BdG9R1miwCyvVddJYCQgiEGCMepiQ4f4kXF7rkYvnCh9EkU4Wn18R5S/z0DN8nGlXA+bDJRnjS8dBPZwU/cO6CV7QhozD4W2RZ0/BqgUKeE29Q+pAIiRn2lw2fzwglrLCJjUMWiDiJVDVPtRiGtxa8Bzs7Gdr04EOl+biT+jUmetm95DbZmDN+OvbL/ub5DwzcikouwrX8eWtq6cn//C/wd2ict8qf6zZVKtn9qqyVIIApgIKsmwEihA+1AJ1Mmnq4iQAs+myummAbnuotVjQN+00CPsIJ0kVg1Zpb/Fz3aDe98rzYTkQAliTgr0wpb02ad5zfW4ffrkJvB9/xqjwa3zFbYSunO/AnunebH903tD7CNoLfEXcofZ3YNf5/wXTVhx271g1uLJH7M+g1nlqimChpn09JiM4nAk4BNBEwhRyMwKJhviSh+SJa58sCzOIe5SCqOyxyDVtk8AIHBgYG3g5DgD4wMDDwbnHkA9CG3T5bPTDwrvDk3lUjvcF/6WIvbNP/u/H/9BOF6ELIikmrAgu62a0y6y5m3ishkJJm+MnzfMG3AJymc2XW/ZNoo78AWDAbBl1iFurd5UFuN9f3omFOJnTdBBGJn8pY35jN+a50Tb/WPD+Fs7DJkgnJJSZN+WmaJCxJMeeU/5Lq/IIZ53ACTQGIcvrf1qcQmEy5k3G/Vfh8JJ7n3O8ld2BQdLO9shz0IGR5TfQO8zH3sd9k3SGAwUVbTsdlpTlcj9PqsAZVHvWz/gVAuqFBXMffrLKVTfRVOSqwfzBMwlzGRlrav/L5FSmrSCnyte5ZgB6zwCNrY7OkUQldDFO+EqzHBq05oJCUarymtFdZe5Nzo7zVg2GwioAmRyOgdciCN+kx6bNvay5/+t4dN1t+he56OdnaMx4dn25cX8uNJ+1IYTPYXvaNhO+c3ivwU6e6N8qsm+w1G7DX4sON8YzWeR6nxpsABLf/8ePAbmu49qqe/fL504TnB+aXzbWdXbgdfJP6+o8bt7ph06T+kXknL5OS/hOSoPw/BGICy52/nDXYdU01v19NW+jfIr8h7dfwKO9fOSXxT6IvHYCTOdK3yROJBrmpB3Lp+3t7tNyBsowcTHKHiSYQa61zhV3v8vpxzR7wShy5V6aZP2/4bbhX8f28rh8Xd+yL3ezLHqGdPkyb+3AN+q7ds952n0/uH6vs7mZOntePv8l2/G3hF4XGa27T4D1Q+hGZKUq/EUUqrqbbp6RxzicCh3SACAHZbDvpAdO4AMsMXmbwfCka6IvcfY4o1p4Ybc3yrYbVnWmxUjcwMDAwcF8MAfrAwMDAb4G9j8EhPB/4i6FM1Kv9v2NfiA5cZ9KdUPGLvP8dtNGzSXfjtr4bXemWj30161uZdads1n0KAR+MVvgDgAUnvNBcmT707AY/57TYES0et+dPl/QDyo3oaxZIrDi6ACNijgtO04Mrq0YiXOKMcJqwVDevOyEdJRP5NV/1SuGzybPLHFOBpSnBfno2zkYn7JJ7Yzn+QHjzmeU6bDtGNlOQ304gZdJ34xkcapYe07iBVd9yydg5oZud5MeUlLFV3h3FLwvNNRxXJJLMfzq2OJqwmZBW2RJdZMNou9yKZlOZmaiVdNbIvzHfauy/8b6s15RjuA/8FngG8PGGOA2obI/Mr7rbX7i1+Q3lnO8eDcskOgvnbaL85sNE1WaOivt/CHgiUDZfDBEkcRKiR0J1OOk7gDOV9SNyWiyIy1UghHQQQp85iYZUwAQgCc+/BBHG24JUi1KNsDNBZo1z04m+XgBuLuy/FxrbiVQbvNPX1fPIHejAKrGbD6S2aHBu1YdFb7/k6bkh+9fII/M8tJPxrVX0J89T94YXnm/s9cryYW4bDyo4Fwm5CM9xCuBpQgxJ+5wCQFhSFxXNc54v6e9yAS4zMC/J6said59HmeOOFoaNwLx9hHJgYGBg4H4YAvSBgYGBd4+W8Hxg4A+DWFfPaPFktvAqIbrm82kjMg4K0o3wpJmn4UiuJMrKDKJDbl9hhOhgsDACyLmR3JOe5WtGyEMExGVBjAvYmXWfUDTSv/OMLKBG0RTXO9BfMDfldx/kbu2LSdP+Kl44qeye6QRrLl7ZmBdj4v0EBocJrPlPwMvynHjogcAsvzEiLgxmQpyXXJWFl7fWdE2a6GjzBVtT8asZcQcTISr3S++l3RWi41heANaa6MqY7BxtWJlDvBU7AuruenhkAuA8hss10b4crbjGMWsVCyM5dMJZc7UnNiYZtB57Gro3lj9fskl1MHtwRj2sYNrenGCyKONY5ysjUQGMmUmVsIds0pcYIFa2fHTlbmSUp9VydUR6JkPHXn30+rdjkm5tpyzzPd+HeUVf1nm1+rWWBNwcrr+bY9KXy9w1rNWpc3meN016T720fb4+3NF9Z+vqjV8twR975Nuhfes3ZcW3hizbX7s/YzOGXBzVan6kn2yyvTXuVhtFrAr5KL9quvyfUIY4U3FXE+Uy0eYzmpPkEylNWxPV+7mcraT7FFMV/iepWBIF0H8l4TkFSuHk7l8QwM9O0HkmgJVGFqH5lIRJIRYh+hlJa/OfKEuFzG5PZnf4lUu5JleHWgf/WjeZmx8LfbqGwZf36wX/P3tftiU5jmN5Qck8Fo/M6qrpnof5/3+bM11dXV2Z7h7hZhIxDwRIkCIl2eJbBG+mh0ncRXETLgEurMdYAn+vSfXS/ZqNYS2UeaxZNyludbbeDs6N4bW2/irmu5fC1tIPiH09NuNL6v+KR2Atw2Y656wFKreLNmDjdayS53F9S7LRlo2XhHMIhHkkzg2BPgyACxrocATCHJITs+w8B/LcnyawkufTLGefsxDoId89XzM6uPFi0LIP2tHR0dFxS3QCvaOjo6Ojo+N9oCTRFVuc0t5wm/7fAdzKrPtWWK77mY/4PW4PoECiA5GM0o99Erc92ujEYtadgGEY8ZlyinukMZh0R/p4V9PWVsTbok4sXcjm3lfC2jQp3pPEIzETzzhksYIbESXT0upTFC4ro6kGhdbnQ/WJ9pJDKw1kIQfbmWY0x70z61eR++/tnK+R7q6OCUvaGvZWXgPl5Pci3da13KrJWlv3c1msc57pWjKykZcV5taEyZEk4GUcPQahMOEek2IRAargfMHCZBJfM75JiWtWOi4BxX/qiE2M2/WwO68leR42Ltn2URA72U2L9bugKFgawH9ZlHldm3cX/v4yePwB3Lc2LpbYoX2u97VfG96yaWvN9aOed14r9n2rX4V1BbnK+iLWaTkmC/msxPvogIFAcKBxCOuqwYGJwE8cJI4xPgM8AHBpU6BHIJCIRQOcAZ7DPbk4PzAIlK2FTaH2qG3e60YBFi1SeTZdkeq8Zonzm2LnGuXsZEvitDEms7muJ9T2qs6n5fO80PN9YLC13HPThC/0+1WxRp5nkLGGizGGIJuChkzrHM4B4yB+Ln0DzBMYM8AemD38NIEnJc/1z5tzz/N+lE9Ptf7MG/e9H3Z0dHTcGp1A7+jo6PhJsPvotY6O94wWiX4OVrk3FWS0SJotjfQN4qka1nyA7ymLCrmswGrF7UHK8S0Ll8htdeNC8zzIdAwNTuEjfpomPLkZX9whamocABxk2cgAfvAEBoMpmFR34jeo7EAeRTXLy2EpHhEtWY+iqT4Vp6ffYQABGOWZj3yKiR0BfHKBRr8b7iQWgwfgND1nfJax1Q0gnmQXn1tlsvH8eBhtdMW1XOYqbkDM787HYiNP1URXAc3ibPRGOq2+cXb9WTFSLc2ys7cYgGKCjBpkmi6tZKXPrkkR4uGG1uy7uqES/9PXIFz78RD8GrJ5Kp4x0wTPfRoJiLvuf/HIn636nnhZHpK0oqa5Rjcax5nMLgmJdX9CJvjL8i+EfSSkuX0G7bwLbDUgyq51/KoLIfU5KG1OyXbb2DGjlY8OMl6Cc/QKY68eORH+OHv+tWcp82z3+1KbLtee2hK87kXZQFrt8aWEti+d/s+CD/gB8PgDgFsheG3Y4vk0TmzWOtYV7UXdWl3jzYnyVv6N+Uw1zn/Ir2qYf5NxS88X/ybh/yIEsSWsgRCOEM4W90gbEXRM+UPC/6bZy0j6jYCRQH8GIp3+Gsy30yMBA0BCLLEDaCxP82WECWoIC0bmYMI4WuyQ9+QIeFCCieJ59Qy0Nc4VWu57Ag2QM87jIg/RwghLvRCBZw88CeFlSfraR3VcSm6NS61x+Aq0yPIWaWfrA7EAACAASURBVL4I1/DfcDbL54ZH635H2peitezbwqKu1scezgaOC8DNm0rY1lp6Z7y3HsreLdJ3Nsn3cXPzqIa33+aWIFfyfBwMga4HngMMD54nYJ6C6fbZg+c5aZ7PU7C24X0c18o2mK8VF4Us3HnZBa9uCH2t1dHR0VGiE+gdHR0dPw1WPlo7Oj4SnuS3JNLPbeJb4Tf9vzdIdPU35NlmQYB1Ir2SDgP7tNHDx3N+NjrnJHrhFrUkEUycZ9roCN/1T3wEkcOXIZlV1+ITOXA8kVxJ6RRqkKIyOXA8SNmg+NhPytVG4MgrVVa4qXg0yCI4+keZn3nE4CkaollKllgPzuFc9FJqaO5bvLdmuibEWHhvhN+b7hnJfSzc6GFsp7DXsaFs5XqGwBhIRLv3wPBJgh4bsrH8pYWotYAbdRH5zq3BqVV2RjTRXs2WE4HA8us5njGfZJBkzE/wstiUhrNbr14ssawj1AJNoj4LhHNLF5sUpWki1zBqZGMv3mw5d04/K8fFjo4LYc2mr/mXbveUxtJNEnHp9FOhtu/GcrhUcdd7h2TSvLYWjembRAhBc1210R0ZE8cUCaWUT8bShzHRS74s8b8S8Ec4cgfx/HQOacZ5yRZqBfG88zKs7jAzJPnjhLT1cweyOtkRTnHLYXKLPL/2zO3asvfS8r9Ev9tbnrV+/9LT1rVaDbvWKBr2uqx+Bei6MJLoTZjGFT56ASSz7TQMINVEdwN4QNikTgA8w88TMB+DifbZi8l2H8jziQH2af28GJg9DLNelKkgzmP5rHMnzzs6OjpeAp1A7+jo6PgwiFJYubeCAT0r9JJFb+vrfo+Q4qdjaCqo1c9Wndwqr5fI472i8uxPAEDLs9HPefxmeBUwbTA3WyT6FsvbynMR3nxIl9ycMswLN5tmCqda09+EuWEy9LcSXBVtdCshIxJinX2VSP8s9i9nBJEjy6noTnTFp3hGughTpQAnP4Uc5Kx1RhAinPypKEfAkcPp6XfuAAJwR4dqPT/PR1MNjGE8gCFCDCCQexBte06CkzjaUarH8izhbxLyoUoWGSIxQym5NuDyXZ6DM4TH1bZUCXNOYaJGukYpNdIXkpw8n1Yf2fM4q2FUkCSNKBumOc83K4MI9Fni6oDBACgRwoEEJlP9nMaW2A9ZhP0AwYU2pWk+q6pgTRia0g1Nw6Uia9pUCM6ys9jNQzEX/mziaxLlO7FlkufyNj9GYRjCXFi1QI1vCh/PZi/LnerArmxSVyrHZfPsGYnTYjGCtveyuRUuxIHUIWfKW+uftcYn9RrrtKjHcgjIstbBjitpVR4nzzUEkfCsrvEV+3BGcTVmKXxtdaq9HbJe0JezhLSjgi5ck5b1uF4/l2JveueM8+em/c5hifK9Wun3VLfq0ZrebqZxvpbOVtnDAMHsU9hijCCyZ9ya/B4pszyO3yTin9J+f1eNc/H/V1E5v4Xxlf8SrHSwDn+zWCp68KlIBPCTTHS/SRkfAQwMHlxYy/1JopFJ4RxgJdP1L84LozzDALBLptTjo/mgVT84KTwlUj1OOWTCC/6Q5/4NSVPUyzntdt5+IoAc6Iup6D9PAE+FFbdyvlEnXr5yLsOUnjdEWbbNsEXw7LpZ6Lpze7jfKIBCrV3dGLJWe1GcU+9npbnDb+01td7tpv9ryW6uGR9vBULcyLOwEKVjkwkejzsD4sYdhzCmDGRMuDtgHEFOzLjHUyDEasY8AaejXAuBPvtktr1p1n+jX7ae8ab4SdYSHR0dHTdGJ9A7Ojo6PhSMoCWivHeI5vGq8YHrhKYlXusj6C2w9kVae25Xcbsmrxpeqr6vSXevsN3+LomUZnmiRrpKuDbIuFbWW+Rd0/+7+LeIdJEs7RYwrYVn1LXRLTmj4WZEU5SWQJNwD0ja6IFEp0V6bK4X2uiQZJkAeDxNRxzciINzMa1BghzhonAsPJaLBFb5mFpahhY/nFuem6sOMawWaU0WlHxDirG48In/YBPWObD3Yq1eSSwV7bFNKriZuvgmpN5Dxg61BFHyHrhwW6DWYPT5a35q6nQpnMzLUom7KTPbClArz5K4DH/lWHi29PUCMBYEsh1mrAAtOeRxiFLcmcBO3mN5bmLV9KMEFYFuavuJ6VCOIF6buACEbKBcpqdnKtbIPTVBq2RslUCflsOttm+beUYQ2HQkUiTVi55ILKZ4Tb5K+Jda140pUsuR14n2x2LcM/W53q4qJ4FnAxGZZlBp9615hjRf/fMAqUA0vHVWa/4sz+EZ7G1YcY/vTdJ2No8VZE3BvhPJIx2SkUfakzaquvoVNMaoD3uOkNZd6fZSee3x/6h1eSMoOb5FeNf8VTN9T9irsHde39Or7JhnyPPF+KRrRDMfsfGLpBEXZJH8MgGOZa8Wy5TDcpSGru7kCAydNzULzcczyDGcQyDOR8APgB9mYPByLrqQS0zpOBD2gJ+lq5kxdDBjeVzXuhBn0HhIa1IdYG2hyKUzha15f9V6j05irn2eAEYxLXBW3XYWCSvhy5A2Zm58J9r3mg30el+bF2uJ8HK6bq4rUQasJ1laFGiisSbessKylf/FcTcXvxtoxN1MslyPAdtzZuFfW3ZV0aigZryXXo+vFWBv3mvtdSs/Qty8bdbt2bpJzQNZa3Icvl9p8CAw/ACwc8DBAcMI3I3AOIDHQ9hANLhgaEnOOoefQccT8HwETiew9/Ce4f0ctNE9bxDo+gy1Ntv4ztvVPvbipol1dHR0/FS4djXR0dHR0fHu4ADcoU5gNATg2XUpae/YBxXqX/WVvzPMe3o3ez+2WuEMkdX0K+6/WmEUn18dq+F3CIiaRHqDcGnC1McizkpaUXBm2htV6lDcvkWHwOpozSXJYaLWyRCMUVZmyHeS8J/ciNEtBYEnQHTRGQ4UNNCRDGOqafeTuLCeyemCECOS7hvaMaOcfa4l0PQcBjAY0yQa6Ua4ylEzluNRzpwCRYcoMI0/SyHmw6JYDWFIKfxcgFaEig33cvXO6lhl+jbKdFGASpRjXjDK1MpWyriR902+UjhlrQS1EgwAomnGCPGP5mxdOt9Qw3MRnyBWFdK527EDMRZkNaOUmdoymTGIWYqWt9F4Vqw3G0V00wiAxAAwwMYsbVSz0yxSP2MhepG5m/rYXD+YMmdkzk7U+hSV7cm8kxjJtKtFnTYQyQCtCKuBDkQNydZjkGrec3oX8Z4BR7KlKAhK2UMIJDHNGeuoMW5kxJd5VL2Ir9eQ8REz8HRqP/sq+MIVhswqL06e1wTK9rcMt/9JWN/NxfCV7MryttiQVnlL91cS27yqdKgcfz84qnPd2ns146te3svFI5uxwLyU3027t+Pcn4xs09O97R+UzrphBFL6aVmO+C8Z60Ey5aUShLGSxgHD5zvQnQOPBD8Cnhi4GyKBTjSEdd7sxVyRB3gIbHvcTcZpXmMOZ7zPQkidjObmrOOuEOtaogkhrXID0kzAMwFfjMfTCZh1fOQUnPOoeh3HNPnJjLMs5pj6eE7miksSess8d7Y+1TmkiGvnhixsER8EavS1XWP3tXvErxhXaKuetrK/Zm6Kczx2PENtDbtS9q30VonWHdjK/0XReul7v1cuWY2YMY3SueTVITiS6HkZHCgQ6I7hDwP8MAKHAzAegLsDcBiD6fZhkJWjB80TaJ6B0wScfgA//ggEOnsh0b2ssY0GevP5tzrLpX57cGVH7ejo6PiJ0TXQOzo6On5q9EVwx0+IJ7yQWXfjj5UwTbPuKmBRAm1PQSTgokzccAeqZ+K13EB4IDVDHgQxuUn38A9b+5VWG92UMyg+B7Oiz/6EZ0/4PBwwmHyDRrqLZ5HPEOt3KKvVkK0ARgxgAmZMZw1bSW4YhIoz+0RCgmOZwzVJqSyxKfXGwSfIhSle18hPgPCNShJdyLeaTISrN40w56LVmFsSoz35aYCStNm6t4m+07lHScs9wlgrlPbSHmSjR/TPD7mGWlMg6y5tayHHjNwGxTYb2polRYRAOVeImp0Ta94lG/+zBNJs/lbCaP1m2JnPIliq0zzALYTBJg2tnmr+EmBRXSQ+9fqgxdWe+ttJk9p3WK3vnxmvTCR3dLw5zISthHi2SYsq80MxmJXnyz9yINApD28pdIuMh7VxSLXUCeT0WtPlsFfIiea4PdoDSMei2Ax84ccu7bpUc0fMckSw+KtVj/QAIQE1A/JZBu/HKWicV8YO+2hby//sGVr+a8PTJeT5ucPdSw2PVxO5V0TXddWFcTt+PWQn8jD2GUCQMJ4Q1uIIG2hpGIDDCD6M0XS70/1FngE/g+cTeA7jDM0e7GexrlaMz9nGl3MFGB0dHR0db4VOoHd0dHT8lGgJa/tHZMdL4BoGcFNcVUc0635hMtnH7EaYmj9/N+4lmX4hkb4Iv5KOat9kZ6MrQZoFBBh4IKOJLpreyiPHuGLejrgg+8Sse5R/SmGIGD/mI0CEz27EQC6S5SFnwhGAh8cBLiv+ABdkovHcOJV9jmAKFqGBoFkeBRAGkw8aRM6NYDAOdIiPzgCe6Zilm6onCJtVBmrlFyqbTSS6eqLSxAOJDsAQ6Vf0gwUvpJLgRnrR65x+Q8tLSxK3wi7yqNzr2egxmZYG7Fb9FP4laXnpMGMbgQr39aiEhfxKiW9OJLlDTlIMNk4IG9oOxzZIkri2Iy603DOSlQlwFEzoWg010s0cKtWTfr9oc9pOuTL92/cuGsvOxXJpday3J5PgFrtrmZYt2WDZDhfm2l1+v9C422j/tMigUYASDMA3QtvKXTMTzwB7M3YVIbO+VylfTehfyywOYiwapW+xzrtNnvuJjrJOUzvJOZbasUdnlWinX9EPm0R/2Tm3ynZOe+14l7incGZ4BjK/lXeqzn9xab5SYpo5nWlujxeJkUx6j0WC5X1WnDK+rPtkrRa8TH6EYNJYNDHDucAMONUSl3KrVZPMjHaR/71JM1pCITHdLunoWOc9QKq9LvUwmC2aHCZnAsKGt6cTeD7l42Sjv9RdzYZKAJn1mVYihOVbtXMhNQJrGbmIZ+tzsVG2KHktjZvgBmleE182J16e95WF3x2dds7dLb/WOuEC/BTTwtq3SQ1FJ9Oua5eODCy1z5GNcQw9+3wA3AAaRtBwALsB5FxUbg/HUUyAP4GnI3iawNNR3GdjKKPIz44nHR0dHR0fAp1A7+jo6PjpEAS/bb819IV8x6XYQx62hMpvjC2Sp+UfZYHfsSTRTcS9snIbfkHoAfvORhe3UoLHjAdxy4j0TBtdKDVJT4n0dOQ2YallHXRmf8wTiIA7N2IU88qEsNAsz3wkJI30WpWoaDX4u5An5kjw5WdSUv6Y6k6BGlTBifKmSYuFTemFBmNDecqjRo1irZdMWBly/iZ18hAzrghluHpzHW6Y1I0Te38oG5sVyqvQPuszNgKnfqaa6JG/43TGq8y9wUoDdN+JsahbDATaOI32OZy0QSdtc1Xe33hnKhzUiEvVQXmOfIywYkcZCeJvPZPyugxXGZtqMKbuC4+lY20K4Yb7VtZltdj7Zlfg4q9eZI6jj74Dm4QhQ9SvOq5vlP+nxR4z6q0XtKhIbE/wa2murVmueUFl3F/2Zf/cuKf8eu/56wtT2TpOmPVFtLRjxplz21E2PltSOxgmZgaYdK4gZHOGE6KJnDm+ROLq0RKqAiprJBKNdfZO1oXyLI7No8j6k0S7XDyYZ4BHwE3ANEs5rCn3AbqyJCLQ0yTnDc+xjnTVtwf5myomyrXXWFuQRvfKGr6ZmJkn7HplDa2puFq4V8a1y8uzreYUca/K+1z/8pvsjPR+4mX4+bhgTAOw7ITh201HnOwYhhhFxjcnX6gD5G8AxgE0DHBDOJYirue9D8dBTEfw6Rl8OsKfTsDpBEwnGXtsXjp2mzWh/Tbo776jo6PjXaMT6B0dHR0/LfauxLvgruMaWAHzmmRpTRBt3c9sj9eac1/Ea5RjLV0GANVIr2mjkwm3Vb70sb8Mq2xc4b6ieV7VRrdEOieT5mTTMwQ018y6KzMYGcJQhud5gncOBzeAQBjMU9k/ddeTBe0Z6QBw5AkAcKARAGGSszi9nwwxBcxylqXGJ1FpH92dIbGAKRySCfYxZFB0mr3ciYCVELSAIYJjEfoqiR7I+LKdh3r4Ft9ZSPvRhnkpfnqrW12UWIk9icsDRha20EinIy7vnDady6K30yoEWc1NKmw4UwJmuSEKQjSngreQJjMVaRmSWMzcMpxs5gh+ViE+Kc6yIQgghIQRqBMjnom6OPOUi1dXvEcJb7na+Gt4mmbdRc1C69EgcsppIjqa8Fk6Gr4Y77gSJtNstGMhIZ2xW3YUTmHiM3ERtsaE2PqvlCU6BysfbN+HfY9ZOpzFC1n7PGmixSOun6F504HhFXEuU1F5r9VBYk891KTq5+K119Mf7f3+YoiEOdXJ89/T+B+JZr0G0vjwJ5vxsTJH/eaC18PamFBCiKIsGEFNn+sUFvJz+fniRMDgwGLJhMpkyWrOA+BAnOt/Md2/yrimc8kkaYjFl7AWc2B2AA8AT8AkmyrVbLvaPUrmg4DHE8AzKOaPuBbm2hjRGDa4cF8GWanvxquqxWo71H7N7oryfPRaFCnBcnqttMct/2vGm6uH1taiZG/+Nxrbt9I5t9o20/toc9Jro/J88VguM6QC+botrrXEyYVxjpwDDQ7kCDw64DCK9vkgRzj5MF6xB/sJmI7A6Rn+dAQreT5PgTxnv9HuuXLZ5/SOjo6O94pOoHd0dHT8lFhbgP/sH1Mdb4s9TOGN22CNRL8km614F/sXUrjN8pkAC8EeN9yB3droIll4ELdvct86G50kHbZlLkjkeD46GCc/Y/IeoyHSgSD2K3ULySZproWuj/d6DKbPYnLkzvIqVd0mMqEpPk8UbJLIYDU+UdC6lzS1DMHLCO/kWQuGC6VWwb0QcZFIj1E+GrlVIxJb4T7KMwkigalELaNJomdxjDBV48wUtNG1LSiBmkngozQ/+EtYii3XZqlnJ1qyoCi8agfG8tkGreXTvMsHrwkel7fLN2rSb77vFpGZe5Uhypa22ZoIEDXJSnFqwskiXtzYYMur/bVgIkpTm1nlSGkNiRGsWvjiQYqCZBszNETlycvyN4Xqu2rtA+OjjZ0dHSuIG304EdOAaeZcNPXqYB6G/b3a7Yu0IHm4dElm/WTXlE7Ia6dnmAwAuzRExmeRecklzfTwpLr+MmmrNRQ7HhNCuqDwcO4k5owCUU7swjE7LFZavKT1KOQVzHqW0lAdl2iUDbiV+X5ZRYuqyybrRpiK/3UjF9VHwI1hf/NTY5ffG4+55W6G8yLfsiQd7xHlt6/5jlt//RTJc4xinn0YgDHcY9RjKiRBH842917OO5+OwPQMnqZAnvsJmDfI88V6ruXR0dHR0fGe0An0jo6Ojp8O+iVdIXiiv73v6LgFShq09SG41e5qTMcOlGeil0md09yVVFPpW9W/leZ38f9SIazOLUxB3FDpXknuLG30ILh8gNVGD+FSVpxMumf3pmylOTpxO3mfEekAlScagxHEtlZTHQAONGQtaRbq/JMLS1dV0D36Ke0PYAb7EO7IJ+g7ZAbGIZyR7ucZDGAcw707DAiaoqE08zFoLaUqN+cuCvlOtm0oUaYPL2ScVgMYuJeneIz1gzYW/ntJ6QuFi2fxURWScW/6uCsd2lkAAJ73pX8Osr5h22xBJJT9LArgVsYmTdtLy3SUgiwk3Ubrj0P4EMQnP9vHS0GcMgGaCHEk7JNtSvlTDqJ6ziIv0o2WFrLNJ/kjLyzCU1EvsX5rUv0UOVQ7x/DV4bLFsMf6FsdMG17cHZuxsxgzbUY6NhZm0ykG1rRt3aYyhG02bCpGrjONQFsXZb2kcKz5lONqjYFZtCuIARQK82F1/vpZBLRvvX7t6+iOC/CXYnz/l8wX/2aIY/WO5oQ5aJgDFQ1zwYI8rw2cVNwSEoEf7qOFISaZiuTeQchzQpxU3BjMrFMavWMpogZ6yoMA4KuMs47k6BMZ/2eZeA8S3jshxqcwDo/OWH0R0l7NF4GB7ydgPsZ6C6mx0aBPdRrH61hWNkNyMY8UyIbj8pOnElaT1iVGZpFkC7s1k5dzkgWVhSvCnHeu+JXzxzXRM0szl+R9Veb59bla6LW5+hz/jgrseGbWq2pporHkW2xQ1HF2HED6N4RfHkeQc8F0OxiAh58Dce6nYyDP52Mw1z7POXneWOOVTss1ng3U1xcdHR0d7wmdQO/o6Oj4aVH7gmstxsn81oTeHR3n4kphx3vAWpdRf6yEafpLwrtl8Cb8gmWquQOtc9BDfiXxR3ig885G1/tg1l0eojgfXXm7SYj0T8MIJ2Y8lQAvz0KvVYWKX61Geu0MdSZCODbTVKyQdFGbXPlGaZ8Me02ZJn2sYRHcRQUY42+Z8iQ8DgI2ld1q/dxLiMfYNRovftF19vallyZ19pTjA/T7PfKpTDvZRMrIYQpEgRW+Mwc3beAMw4nbjMutJNpQirpbEN9FGEvUXoJVQa+g7JxKfJckRDX9MpzNytAuC8sZyjislDvKG7lST8jfW9UPicCJv7ac0Y6+ybCUgDJAHCxX5Ann70XrQQmU2F4Kf02i1Y2qj9MmTzpeCl2w/UvhXgjlP29Awq31bZ0WlH/RsdYORTeBEueG6C6PHFHVbp3jNKwbAOdANAJDOAM9DmtxkUSRpHfOZfu9IEkFG/HyfKSbymQrpVhcYXIgZ+ZVNwCOQeRB5MHf5axh+AXByqa+9RFTIYqxmfQBLNNdVlnGgudVmTKtIsXgNGdb0s+mL3mstbREerNNvF6OxTfAFQ3pLaeYmoWtc+JelXfpUK5XqoF2ptXRxo73vdEm7IjAhUskz10gzN1hhBvlzPPxAIyjnM7ECCbbPfx0Ak/PYrr9GM5A91PYPOs9AnmuFqNWduIs2mRvGB0dHR3vHZ1A7+jo6PgpUUpbatdG0LGQkPeFfMelKNvXtW3pTFLwqbhXjfSyGHvlMIVWYjVitYjfEc9Dr8qseHm5WiYl2cqwSp5Q4S5+jAo5xUXYEG55Njribn4bLzfrnkjqSAqLBmU6gzzU4bOY1rREeuuxdVTSx70Tl6NIlh0GeMz45EZLWeHkpzymD3fTfDT1xJimo8RJJBbLu3YDwQ13YPaYjyfxI5BsEIhaTSI0o0iiI+YbTcWrv+TNQCDSSZXGyic1FQDrvNGX4nnOVpr6HkmejfEgFtmeof6M5bNsPdvWuLOzjkrBaBlNNMhzAtfLPRU7PcxL1Xj6F9M1JKpeuJK01TTYvG+5tgRM9dk4r5qCL0h7YMwYYTsYEDaPuCLcLgGyJWhCpbA1X2+HMDmzgXQzjCrhe5NWVDGyhWysYUrvGulhx2mGqfc4QEgZuYgU6j4laUzvl5VXvj9Jd/FeyjKWyOrbpoXwEr9KXT+1Ev1513jnaVR+NLyzZyvb6Dsr3ib2lv9c8+i/q+kPgac0bDDEZLDJ8H9knfnNpbysv9vKf+t7T64tiUyiUa7EeSSITb7xUgfncDYwORfMGutZ6TGghjO/cVwn8B3CWHUy9eC1LACmOaQxSCRRNsc0BPKcATgPfJ+A4zEkMhDgdaKVclA2O2HxorPNUmYc1s1NreWWutt61LgW5TSe+VXG+8r53vlnB5ki2nG/nXeenzov81kpaUeGxrve47+6Pup1v47WF2LhUiPS116ZkueDi+ba6TDK9SgkuowrzGFjtp9Ey/wkpttPAFuT7WYtZsfbbAnPG+2ho6Ojo+O9ohPoHR0dHT8lrOAWyElyoP1BskHSdHRUsSaFfKdtKhOC7QiLHeEXaX6X3y+N/ArHzXxMgEV6nNzLNGra6Cp8q7g9EEVt9GDSmRbpqba2xona25Fh5igTDNaIpR0Q4XmeQATcuREDmXM3K49eEZMACKbgHYZleLLEvZQHZExphgKxOJCQeCHlIFBh74GBg0BGtckJwbwpIWrgQ90ABC3U4KiatYloT+FJ6gpg3Gd1Sums9PJxuXrTQI0hfG3cOu9PAI43TlOwt2+XEWJ7LtPRPqhCcmdeGUdn7QtJwqeFKAX9gJhMKIrByEy72zzXnoeLX73wKdmFIJLUX9M2AkB7neVrWQgq/Mow+jzGNTZ1SzwVpMMWuLix7zpWNaVnKLoXew7jRZZMLEwiuDJTujZc49z6RbgF47HRHjm/1vrXcf6cue3doVYfHR3vHUWHK4eE+KvjZGOerhH1VE4yl5SpQmwDyDTQ7VhWbrIkAlzYXEgDgQYH0ADvENdP9fKKOXW1XuQAnhDmTybJnwGeG49H4FhGH0y1H4/hWs9jZwDkAT+kdGwZiHKLSkAa15mXew71npDG1Ai+4SfNNQO1riXOLEjteXbF6bgYdn3UcQPs7DNNsYR4iOY5xgG4OwTy/DCEvyGQ5yTLQxCLifZTIM/nEzBPYTCbfSDXs40xlEzJx/zNAre3h46Ojo4PiU6gd3R0dPySWPtw/7CS1443RS40S6gwExfhbKYr4An5uei1JBV7CPKtcNWuJUQ6f6nEt4UwZNoeAmVRHuOwSCN92GfhF24AmPEAwrdYHBY5ZP5eI6Ec74WEJjGVp0Q6TDYq90Mg0gfnMJKLRLp9kloV3DUo9egfTYCGNNQS6uxPkrBovXIy0k5syHYfyHfVPA9EuGwWMNpJKitJVj21IjhtFogFJJGdcKwD7RNWpnPPFM5JLxvmgkSvhKmGPQOXyuhfGotyXTM/lYSCCrlo+7E5f59ZQ2jJo4nkTHSXBNeRENc+WkruKyT6ImFzr+1S07Ea2lkbtGmYXxXCUwporTKASPqKsgrGz5Kdc1nO8rlqz2DGisXTST3YqGuCfCVosjQaN5YgyarJjDoZn2QZFu34RXnIhrF+vHzsrBAN/2hWuBE1S1sLWunEXxv9JVpquXWHv3CezpK4skyXmvl9V3ijgfi9jf/vFbr7TQnve3F/lN+yHh/LzTQab5S+ZvKyDwAAIABJREFUaMYDANX+k5kQhwm3nNfin55jToVfPP9c4c06Lh//4wYuEq36+CsEOGbExZDROM/GNlkbMihojM8HgAfgn1Pw/IvEGyHa+pq2PK8/gf4UU+1OzLoPushT8+8+pGnnQ1MtaiMkFTFsemRm+fOiDY+0UI0bxMzYyrNJuDW+qzdX7u0EpIvIypovS75oF+VmssXUzguvFL9Wpg3calz4sEPzyns+e77aCt/y/7CVdwVa62Hsm+epcUMUNuCMA2gcQeMAHBz8OICcA41OltIMxgT24XxzniewnwA/y59+YXKRGSeX7CgfW5Y+2XZ0dHR8NHQCvaOjo6Ojo+MFUH4gvuEH4xqJblF+A6+Fw0rYpv8akV4UYFdZJNAirHFf5MNYmntXYWEuAHgQt7Y2Osv/lGS74mY1u62JZc1G5ZKz9/DwGFwg0ZVIt3TiXrTCkvkNaSqJHlwzDfQo+FDSUGXHDvA+nvFJ2WNxlIFy3CVQ6MATRFvdEmPJjL1W0z0DjzWh0aL7rPSnLpvZhbghpFLV1rFdldrP2BAU1luE49HMO5L03hKuWTkYQSvPjANlmtXf6hMaD81LydZS4g7jbx6FnTTxkuCpxG2FKTbHZH7NytVxysXb1XNpKzi7G1THUcj7K0gZLsOUpA0X5TXvqVZNtbLsdb+kr3+linn3jo6ONsyI8mjd7L1gb9d6ZDOGnTNiba2MdE4xawlyyM45Z8Qxi1iOHWHW5Yvh20UDnMJ550QOLDaAAint0nwW5zIdTMPGSnaBeCc3AOxBNJknpRg2ZDym8s0n4NGD5ilw9uyCOfvBpTmB5Jx2j8YclFcXA+EIIatl772s3XwKpHP64lOG6nNROaVmxJn11PVCqqMW2PwbXfwZq+JF0sUkt0b+9ukhodfFx0Rce5oXKOQ5DQ40jkHbfBjAwwgeHHh0gHNhQw17EM+geQLPR/B8FNPtE4K1C2MFKn4Upizj9tByUxJv9/2Ojo6OjveHTqB3dHR0/BJYo6KspKSj41pY6Vx5f4sPxjLdnWidjV5LfjVpk/9WUV7aPwaqlWWtnCLEK591YV40uJXa6FGD2qTHShhn4UiyVyGCYc4RCEw9z3HyHjM8yDl8ogFUmNy8BEq/zQDu3AFAUtBV7YKgmU5gr/Vh22gSlPKsgpJUnySC0MyMO5BpoyuRzkqyS/y0uUBLyrH+7sX9sexLiwp5jwKYC/vnFuhTSJP3mnJf5k+770rXklS23tr/uEhEO0LwJ0kjnV8q/irfc0jkhtV6I6S0m+S5IQwW/YazoAvwmieQzmo3xIL9jT2qLIvZFBDTsBG3Bj0Jo32LrT8hq3fd8iDOdu9BzIXIbAQosqsVJdMg52zcShFtv+SCJKk8U0GoJxsYRbiLYEidvV2vqZ1+izHl0jQq5NeHQa3ctbbwnp5vbb1WC3ct3tOzG+wqVmWwKDXRFY++CEvFbzlWmDFtFZSvzxbhxT+qWbs8WByr5HdOniTlUYs77GDSSeWOR9SAAkGlZLl+Rsbz2r2YSXbyR8A/TiDPoN/GMKT+m86DBGAEJq0TDiaSH+c4rumaUHkqdjLmeQIGFhKdU/w4GdixHDJHivUZ0T6HcyDvwcXat732qswjMU7l3l5LmapnNseglXimamogFJZ0eHGBbJ6oee/ApSPBO+35r4itGug1tEQ53rXBZbt25dil7mETkBuGcBTFEEy2s3Oy0UfieQ/wLFrnYrI9/p2SFrqOSnZjOgPR/tnitZZjf+u93/gbqqOjo6PjanQCvaOjo+OXwZpwpi/UO14L74T022PafW+32JJ7LtLTs9E/7Y+/WhaTwSKscaj5LbTRkUgpSuEeGPgmbkr7UBZXNK2NW0m2671qaSfFXSUgCfAeP+Dh3IA7cqtCxj1wSBxlQb3Jb7piMVVKGdFvaC5KsuIgf1bijkVOkt/HNDnlE6tDzcbH7pAE1CogvpfX+lj2mey20Z/eSTf7CMjpg4q/4RtqfEVEUxPd+JfwkHaPxHVIOioQZxuXbWHU3ZoHvtFcbsus2oXaTmP+9g+VXyDTeLy0DKWD1d5RMsJs4CHzngrq4LwuwaZeY5r2GQ1ZQoV7KyPW8jczvcjrpuja6R39m0CwUQ+1M8tfBGsTj9yTva6U247bbNd+aTwlIZ04kvBKWZskIjldFEfJdOHCgSGR6pMhmoQ8DpaIHJhFk90DgA/k1EMyk06yfiKNBwKTDyQ6SDafiWZ6nH+1jGSeV6uJQORQbmiKz2uJ7muOk2iQ4HEj5blpVP3N9Z4k+7D+JsiWiW9Wil8ROsaRcSE4F8YAorCxh3WDTyTdAcDLmedTGL+mSf5O4Y9r6+70HZdtwClfevZRYXGu8KGjo6Oj4zXRxWsdHR0dvxSsMIQq96hcK7hx3crnV0NZn9Z9T9xWnb5GXdbawFq4PX4VMmXh17pvlWmrjV4KWjfxvpoVVS+3sgv4jAUxupYQlTeuEZbMj/U3ppTLMyIzAax1Xjp+K8JSll/dLZKUZK4leYrX6VfDOOduQqQrThAiH8FE+yAk5STaAuxnOQ8T4T7yYXVBSC6DZRMkJ9HSudIMkxqsyb+lrJQyGUtpNTbvYpVxh6+os+YQv6fvotK+1tLcg6Kt79JELyvK+pSCtSA858yfUuyWoLpsl7HPFeOCnnke41TejdUcdKIhRwR2nLT6tJFkR+rmz0f2ueWMxtTelEjgROYyi+ae1sOyaAuUWvDNl6vvrTwDuDVfFOP+QgO9Fj+YvM8ORJDmv9nk9H2V7zR1fONe2yhgrmManOq1LK42JjbhgCWZUxJUNq51sG61/JpovzdtrlVsEOulFhhvto/KeMJlWzkHtFL4LVwrEqm8s13rn1vlfw4adfRqRSgH1Gvn91uvkxvp3VObNI990a7NtggRSmOQDSadMJDFkm5mtUbjklnW2W8Ql9wWQ4uOL2a+gc43QiiZa9XQxDAG0+mDA9wIjHfhHHLMIbuBgE8UfokB8oCfAM+gfx8wEAHuDsQM7wd4dsAPL8VbEuf50MqxexEDfpqCVSCY5/HFuMsmoWJoHGJdAOzD+efsfUyDs7ONC8xzINVgg2jeNr9yXpbf1abKpvjlYlP+tGjWnYp7e5PNEa3jVKpFeT+4dojYmoauSXNxv5bJW1TqNZVX6wNraZV+2lgr3yebbhSOfCCH0C+4UceNNZQL2uWkR0foueduABzBHeTs89GBR4J3cjoChbHWTc9w0xE8z+DpBH8S8+2nUxirsvWW+T6Ja8diDViWsXbET4a1vrrVjhpjV0dHR0fHVega6B0dHR2/FPYsqkcAB+TCn5f4+vzZUKubPR+tVmJ2jrB1La1zUfvAraXZ+hBfK2OVla3E3/OcL9H+pCy30Eg/JxwBSRP9SyN+kVDmvyYUkQwWr1WJiZqfCicKMmmhjQ48gPGt1DQHgIVbEt4GRVSWbIKAlYDFueBZLyDA+xk/5Iz0ww2I9BGAj8QoYYDKJAnxDEw17ekBPQk9nWie/gVgzj5PN5nWvZoflWdmRpYaxwNHIZrrpLUp8Vjqk3Av4R41/8WQkbF0i9uXQyEIotJNcc27MyraizzPTzfJ4czcxhV/QPIdcs9YtzvGbNtVlTzP2rHpJNp2gEBiOMnDc5ZQbqidipS4KJaxFlGX7ecww0RmvmHxUPrbmj/qZazfN9xLMqSqWanjCkd/bhapNX9pvUpkSnWZBVubo9fkoTELff8pn4WJ/owpaeSl17av2f7OVAm3D2urgcvQIsQrAuYzy3p7vMYad63tX5N/X59fhrUxrMCmxvkZBCWA7NuKZMDNpgguWoVdBJZzIBlnEy4SOZT7Rc4nZMbkABrk3gE0CuE0BvJcySeI2eNPgxDoAzCauvMs5o0ppEEA02d4R8B8Ak0EPwI8Cbk2T8DjZJ6jvJQVJhUt3OmjUHo2b+dKxLmh3E3lLcmFsO4iJoADiU52TrFvixA14uO8IwR8TK/YyESQM9d1XucFNW4y4PXWyKjvL4rNqEi5uj6h4i6/XxL3axPbK4HR3i8MNJ6ziH/NhlJgZe2wdh8jF78fCbXNj1vrvRbW4umgp9+RDjQcQCDpr+FM8sWmTbWQFJH6tpuB4eDgxgE4jPDDCB5GzIODHxzcYZD2PofNPvME4hnAjMPpB8bTEbP3mOcJ5CfM0yRjW+29c1a2ygrfOOzpR5f2tbI+Ojo6OjpuhU6gd3R0dHQUKD/drcDG3ndchqYE4FVLsQ/lh3Ltw3lLYLCFsn3txaXxVqDnpK9pozfLUXGqFi0RWUkg80N+DZFOlTjV9Neenxpl4XU/FUpS2+1BIn+zpshRkuYsyVNMQoXCgSgOpDEDIA5UNRMF4aUREBMBs5/hhUgfryDSRdwbccw0JHww6af5qpVPEczG8nNxerEIVbUGLBlG2dnLFJ8/I9JJq5hQRI+eGo4ZuJeX8Khkk4b9LE/2w2hxXYrFcH/m+FS+nyi4v6K/ZkPR3dJDtdIXRb0gz0V/ubzkvHKXu5kO6QsyRE3jAtL+5AxV8550s0bGn8T+aDfPaGNVcgHpfakWn8ZbM8Ee5XQrawMqLyrPmgfM019El7I1sowaz4vkDKECVNpn7s7W/GYto2Z/MO5lXrb5l5rnFYHqJrGxKMdKncbjBVoo024ELs9NfwlT77fpaK+f/zWJcfnuzk1m78O/FwLnvXxPnEts7Sn3OXVcGxepEoQLP8p+snVlNsR6Qyjrb0lY1cqkRL5D1K5UbVA9J3gcgIOxMEIUtDN5Bv4dIY27++B9fAIPDpjCBgN+9sBpDmecV58HafG1+OTgQObrIzFS/3FFXSxGUeNlq0OP78l2j3H2mmMc8xfIczuflhMSZMpNz7E4q7nyeG3PfMl3SULL+uCq/3K+eeu+ei2uXH9W01u7L/EWY2+53ro0/qWgynWlHrKNpWYsYA+Qk37JRZusjJNZcR08OTjnwOMAGka4wyEQ586F88+JQOyDBYp5BuYTmOfgNk3BItk8A97H37BGbhdDx42stTU79UZnfzfzdUdHR0cH0An0jo6Ojo4mSgFyR8cvgpY2+rnfsxsy8aX/d9RJ9EbGm+UxARZ5rfmJ44I8U8FBcn8A4xsARCJdyUaK6TLF08ENpyRkn5xdzHIOJ6l2ThSGGKkIAZOfMd+ASFc4OBnpgj561KbP6oPBjkBervXxRXveFjNxnImopHgPaL2TClU1BAEEFo18ivUTiXWtQfPK7iXTR830xwx8OeA/7j8DIPz98TF/jtXh/DWENVZ43yrDNcnfYZ9p97fGltAMiEQ3If+NIDALiQ7OjgXX6ACSsC+GKwnbkiE4o9ib8mMp1Dlc2a3l2y/apFfWSC2Bac2E5zXn7HZ0dJyJl57nagPPVp6E7fmxRqxrlsW4wprWKtOT3MiUwZJZtb9xBO7ErLtq3E9zIM4V432cczBNwN0XMDzw/AzwBDx4sZd8IciZxRDnmudqBCDOfbFi0o9ad/GAPW6mthReEN6SV+DLlUnn9U9mqqRTwctPBZdk0Oenj41r3t8t3v2efl6MOzF33QBU2ZySpW8/wCS+nGnunQM5BxoGuGEMG3+sxXV40SpX0+zhnucZ8zzDew8/z/AzI2rAb33bd3R0dHT8lOgEekdHR0dHBboLf+3jKRMxvGBZPjJqwqv3uqu4VVbrtiWMewu80Jfsk7m2ZPolVXAWkV6Q6NG9kfE5JHozzRWSvSDMk3sSvD6I27eCNA/eFJMhSmWJCjkklDULgUwhTqZJmhHpBBDfjEhPC+EQ/wQx2h7NAnp5CgYPDPYk8lYW/tyaY091GJ5NNwwYDXIlRoFQ5sycJyXZkWq5E8fjqpOwm+PrYxDuJYoS6X/3RwCE/7j/JiR6WZc1nMNyvhRq7/DM8tQ0089Ci4DfM27fbfjbpMo+ZaHv2b4T2zn171SYq0Vufj3+mjaWnU3PKbxsDkl9DUZgSSnLhenKotiWFFaBaJZlOcgYIp8ImZnVWlZU/LaKs3hdnHvoOyiG1Zzk4Mo7su9ijTGxUUwYKuu2VUZD6kRtePtnK6JWDm5cl/lciVIj3Sb5Etrp7xUv/agvLbD/JV7VS1SeHSPtOqq2dm7lbyfmPfOMhF+8s2K8Lpyy+2qa9pYCSf1Nzjw/BRPI8Tz0b2LC/c85kEr/5y8APHD8I8zBT8dwr8n6ZwAT8DibtUyy9rP6LNVnNWXWpADz6cpxjg2XujXSjOk+rCVT3XBch0Zt8vLcZUY8i3lBiDeGWTbF2cJNCfTqXPNevtsuwFrd8EYDv0W9br2c1bn9V8U57Y0W62IyloCy7ywA+ZBpiXe5diTnm4/h7zCADy4Obcwe4Bk8n+CnZ7Cecc7BVLxXDXTv4b2Yj9dNOXFTq5asHMd4OWzVjqvp6Ojo6PhQ6AR6R0dHR0cBBjAj//ApP4I+8Ef4q2OPQOy9oFbW0u0jPc+NcEuN9LXw0d+Q6OoOG7dIaFO4XgmQJVH418gnFRSUcTIiXbTRF0Q6RW5Nz/SWq0hGK7kcyGKWrCgzfZnLG4Lwc76xRvqAdB66nqlMxGDvYQqca85L3YTH4kx+ribf5akMsZ4C6HmaVkwkjwdr1j3JaFaI9B8nPAL465evmNjjr1+/4J9P31MFrpLoHYEEP5prIFSanA17C9j2XE1SPKrns4sfAcBB3E95ornUTn4qwrsyXMa5VhrJ5jmjhaA+9m0rWF6pw70sw9Uw9Wvz28UzMK7qQK8iXJfnWiXpXwFfaceZ0R0dr4Fbjyt70ttaO1fSICBtcmqRgj65mfXXdc9IKb6SWI6A4xA0NsdDMOHuRlmzeJAj4BuCaXYWYmv4Esadxwn4RACdAMfAn3rGuYyfNNRPeamh5kGVGyrd09qxerK4Y6ByLnasfS0qlDSXP++Xx4KvkekyD6bpj5bPvneYvGo4/ejfbbW5uqwQ2vDvePeQzhG+bTx0E3N0jK+0JpeSIyeIwjEPI4EPI/hwAI8jMKTvqUCOz/DzMZDnkUDnYMLdz/B+BnsOZdBvwLhJ1BSBi98SnTzv6Ojo+CnQCfSOjo6OjgK1LwH9UlhIKLAQSvzSaEl6Ssn8JuP5hqgJJFrlr4V/K7xwnbbORz+bRE8Ect1fvZT0/FIPlxE5LeK7FqcInxXFOFSrc5tIfyDg2yId1RoQwYglogs3ViI6EumWiCuKqXkURLojwkAOl8AhKTPNkUgHvBMtdO+NMFWeOyPNrUl6mHeiZ7uLkyEVQzT73IZEN3WuGu6pByYH0jAA7gEcv3/HY1XAhCSgr3bdon/XhvtXBZnfVuO+9a6AmiY5t7NvoRTy1+LXJOdq+lYj+CLvZJJA2t3BZKbtEggbAeTGCv2y4du6V8rCZVthLIjyVhwlYmpmy5vYSDuWQYOUAvOd5SQRyq6Vh3w93cX8V0tj7TnPDQ9cNK8toqzl8ULz5lcqrLnQx9JMf/OiNljGW72ud/F8a2P7pagRFrU8tvItK3xHv96tid4iVdZYmXK8qYx/e4ZQrXIufgnA4ECHEXBCmtMIfHbAnQMGD4wUtM8Pn4HTM+AdcPoBfOJASj974NMMuAn4wxDndipnrSYSX45XJTabaAxg55uCcFuccWIiM0O1ThNJHn4D0Sb+3s6jfpm3nZdi8oWDFONiwvyS/tqcIz8gFs+Q1tF1vOI3dtc830BNlkDIj4jIw1L8tuF8iZr1eQqkuRuEPHcgN4B1nLob4QcnH3YsG2Bm+OkInk+BPD/+AKYTME8gDluovZ/zjTPM9XdsxxtmJDMYNfQ20tHR0fGR0Qn0jo6Ojo4C+gFgpR0Q2UT+McpNocSvjJb0qiXAe4+oSWnL8vd3HnHuq90K3xKSN4Xn9gN+T1mKhBbpGodqnoxc88nEYQom3TeI9KRkxRKbMkFJIpQ5Es5qDj3mWzZBghDphMl5HMjBXUikA0HnGFB7HHJWuiMwPPzc0gJj2SMh4mBDdupmADHOHp5rJEBkzPG52dzHdAGSw9dZzLqrJ2dhNG4y7f77fbAL8H8fH8oEi4xshr1/J7RI0gLNfndO3wSSZnRFIB/9TdFKv4iDBPhRlMUSAbV4N0Jprn1PHjfVQrd9b+llWJxq1BBvg8HgdttYahm2nv/GdV99pEZbeg2UZt47Om6KG7evbPq7Iu04Ru9dO9cG9VfotAzgGwGnATSMkYgiUm1OBEL8zoGduA2fgWEMJPmXMWihzxPw/Aj8a0L4hrREEuXzwbWvbDEsm5emmy7jxgA2/sV7sMdj6LVP18QybkcSHVgSZFR5TVy9PBvvgRh+L3g1CzUdt0djo5SS35E8t2EITr6psrEjsxqhJPwQ/oYB5BxAA+jgwJ8OQQt9cHJKkWiWz6dAmJ9+hE1ApyMwTYCfEL6eZL1UPcqhgozZb8mAOjo6Ojo+OjqB3tHR0dHRQCaBQP5hUJDri3gdAeWHVFl/772uWuXX+/eICqt6SzwV96qR3iS3G9gjTGQA9N041M5GzwKfWZYLiPToXyOPc/cHBLlsWTY10V4S6VH7HICaBI1EtDk3PMhERSMhaigU7dMzjmAQ5mDe3Q24FJZIZ9FRp4HB8OB5FmUklv/VPKch0q2GugqJVLtpRiDNBwCTEOuU/BPdntoJyTVLnimcVIZxA4AnFoZe+VRVClsl0hsk+rsdumqN/UZ9f226Ozudoq/V6tkSACi9S1a2uKmairwr7hXPuVNLG37hbgnxPQ1BiY0ij1rURX7l+NJIe+vlWK34mvuiHI1nix25JTDV+Ne3vTrhbuvPXFu5cz7YpDiLzQDit3B+r3P7K+DdjGtb7XlfsEX4F8Olbeaagq3luTVRlURO6b9VrrW8a99Ja99OtTH7Qmy9BrIXDhhdMHV8FE1zDPInxPk0g5mAfw7AgYG7IRDnB9lkfefCIuzPh6Btzrqx0D5vY627sINecz8DVtNaso370DISXcjw2fx6+ZvTOcdhevNyfI8h1Kj17kybW5vfdz3eSiDe8G8hzr/nDhov/E21G7WNCoKFKf6NufND4Zpy712jvUTetbTM+Gc1z623sdSllikYenAFL+O7Qcy1j3DDCBocHA3wdw7zYYia54xwljnPJ2A+BXPt8wnws/kLYwLDy/eUaVcELA9gL59vj1tHR0dHx0dFJ9A7Ojo6OiowEgj7G4UQJZyJZ3878o/G2v17x0cv/wfAWpVmfpWz0Vskut5iJe1WwEW8in+FMI8wBPsDkyHRUxp6HnokyUUoaElzJdsD75iI9CDHEIq4RqRnWt/A5GfMPph3H644J12J9PD4BMYAHgb4wYPZg2efznBnivWg56VruVifhxM9znOqGwLw6dNn/Hh+BhANusOefR7iCpGumwvk31LGM39/BiOYdh+/fAbfMf54ejZPlqe7cP9Vx/NF37pBWgs5Ly/DqZA+9jMuuo8hmavkZ0lGtIhTIdbp2CYtrtX6svGrz3rj/F4cbP7kfmdxyYxhhUcjq402t2dcX+PpYjqVZ6iu8xSfKm7PFbcGrBn3r5+T+9OPeviOjogbjA320+ZFy0DmJ61xGgPfpYU5H18dcCRgHAEIAU5KNEnZjnMwgTyOADngcBeu78dgFpkc+OE7QDPwr6c0z2RWR6heVZW6Xxum9lCjC55e10ewa8OQMTMLae4DYc5yvrGS6CybH1UTvdRAZVRI9EYpdU2alfqKxrenmWzOJ3vbWi38287N5YbatZA5XrF/LTbp3SLRSxO5lkC/BcrOrmODK7yo6Bocvv8YYJZ+a8dQPed8cMAo2ufjCDcMcG4A7hz8gcL32DwHYnyeAmk+HwEvBPo8yQcYg7wH6SagWlOnxUUsa/7b0dHR0fEzohPoHR0dHR0VlCbcE+mVvnAIy4+ImmDoV8Ga2KcUQOxmNt8JWuVH4f4e8cJ1/YT8XPSzZU1G0KaC1kaQ4GU10u+3SfRF/B1l2UOk7/ZjPIgQsSTS03CilDQiaR5NuGsMTkR6iCLEswhplUivN88gRGE5J92Rg3OXn5NOyLXSHRyYHPyoWun2nPREpINJbllvY32ly3D/fHyOjl/vPuHp+TmvD3MTtPJTvScinbRCo9t8CkTX718DCbYg0pva6IXjHmLuo2Gtf2Rt9wIwBYKimYetW3lvmfZLY36x/a+U0Ue3SrmjvI8RTBOg8pqPSBpCfPnjL86BNffZeFkQ7fb5W9MrFwE2x7pzyANeln0hkDabGaxpXyJQHONq9V++79JvpZyV7pj5xaVZpZPOKNwa+ZAdYD6tVxsDiVQvA1pS3BDvXyWsrYevn0P4H28woLybMezMdcqbl/vadVXrW2IvzqgAm0Wc586twD3fOGbMtBkvxuIWCUOVICa9eEntqlO3L7Iu+EHpjOCjeHoHDAXRfTqJRucYnmEcgMMIfCbg2wgW5XTMAP1xAuALXlYLJ+nGR7LPFvx5ZZzjve9V8ozTMyOS5VSEiTeewdMs5DkDk2ihG+1zipqouo5DMW+Vc1r8p6iHvdgI27IC86sgVu1bDXhr/bYMWlm//NIw44H8xc2EAJrfqwx4GSdC99M1rxDnzgGDWsQY4YQ8pzGYc6cBcIxwlrmfRdv8ZLTOfVxr6fek9trYnReE+cpatqOjo6Pjp0cn0Ds6Ojo6GrBSEQJYyaZSMHSN8OtnRikM06+xtQ+u91yP2dckzhIo/OwoSXTFJplzZvjyFeB7cOAvRbxGQrvLUxP8lumfS7IHIv1bFNYmz6iNDiTtcC7uNVclzlUDXcloTdcQ60RqRh2x6wXhyAw/EzwxHBEGd/056WHLkWqlO3h4+GlOz5mR53Jtn8UKcDIT7sCTkOlf7z7L/Y9YHyqYDnsQirrTGtL6ZkTz7fN0xP3Xr/h8P+I/Hx/NEyl5m4qe+2HpsUbovUecPVwZ4uKCdIm1dbt2wIV8nHI3lejZxozyugKmZZgsuCWpy3TuTBoAcMojt957a5ypFdMSta0p8xqcGz+rA78c17i4z65TPZOIJsVvAAAgAElEQVS8q+DCy6Sbea6kH+ul7H8qWOZiSVakQQhN0LNw/RwkzDEdk0nlmN9Fsdb84nv9nBLjMlADVkO9dt/RkaHSNrb6fbUfb2Enea7pZqZgGPkGoTKtvYszTUuDr4WXDn+iYKqdKc0H2WYuDsQ5ObAbgkbnMAZy6jcHfD4A918BdvgG4OG/HgDnDPmlY7clz9cG77C+4dYxGfZRN0Fp2NPkGPKsoVwpG6N9PnlgmpPm+ewNgc5Im5h8e36zcxbW3IpnWXtlW89cttuLSNrFYuPMQnwEvOQzbNXfa+X7WnGB2yzEwqATv+lIv5kElX7GTAjHZpnxkZQ8H4NVjMMIdzjAHcaw8WdwgAvff46DafZ5UuL8CPAE+BnEQfOc2BzRQGGMjBs1mmu2TYeOjo6Ojp8QnUDv6Ojo6NiJUgJghR9kfvcImX5VlEKlvVKVjuuxV0B5IVok+iVYK+qaXHIR79pnLuJntw2/mr+5fBABY0mkR7qYlybbQ1SKSZGEA1Ah0iW0kOexPJmAV0YvnjETMDFhpOEqIt3G9CA4DPDjgHDu3mzMuxvyPGrTI14njjRpr+oTfj8+BxP2d8FldAdMz0fEM+Xj85KQtvbxCVa7nAA8PT3h/us97k3cxxgD+XvMhvQPxJi/5LC6mTblV7HN2jAbJEIMI6lYLZyYckPYV44VJSnaLK9JKEvjsMwgy/O4TKbZVMrKI8Tzz9fGuC3cknxvwr6zWqVzEPrq+z6LrGusnxaEuLob8lzDDZVk7DmjAMJZxWX6mg41i9FMt+ZX5Rmokq51EC31r8BZZuEvxQcYwt4G72E9esa3xNaaqJnOXvJwb33I2MCW9FkrWOMbIG6CKUj4VpGIkgOJZiZRIM+BMG+oyWRdaMADRx/cQUHTnAbg8wDcEfD7F2A84NtwwMOPI/CvH3gYneTlQWLBh9kBpERzthBZqYONeW/PlMhp3bdI0svasTDLDg7EOR2neAY6m7PPMzItLsZ2lK88z51N3EjIK1z+WgGsZsTW/4oBq2lJhpFv7jBF0uc46+z094iPPNAzsNVfNuO/JVZNLwU0+5Md1wA4kvPOB2A8AIdgtp0OI3hwwUIGhY2PxB6kJtuPz4CfggY6zyDMwDQB8wye59AFOJT1rWuro6Ojo+P9ohPoHR0dHR07UBOIGHJABD3dmlUNZX29R0FEVdK9Ee69PcM7wJP8lkT6pa+8FW/RBV/qbPRGhOy2UsiWv3F/AOMbUxEObSIdHM84z6OleInLUfKchJMrhYIyjuk1M040YWKCg8NhGHANclsdDs45eBeIdMw+mJu3AsviOphjN8/PyXAlEQFTeKZJCEsSIVOm8EbqjnhuvL4Hq5H++PQIAuH+/j7EfXyA1UdPwqua4LUQ6p7Bd3xI0OJiJ7QPyG9N2H5u0lk9275dvIC1tJtkZx6QGhGX8/1dfktHc23aytr52hkhuxIuE7BWA7Tj7kKN4NL7NZZYCTROY1nc4LBRJmp0oMVeg4Jos/1P/5wQ1QtzsjLulXuF1M1JAh7B3Hv2uJT9bKLF+Swe8wbkUMdPhJ0NrBrsJdrSrRZvZV9ci2vytX28lTQgWpkUTLOzGQxKIp4AHKdAljsnZ6FTiOMI+PYZh7sv+J0d/vF//xsPhwNwOASNzwV0jaXkbFGw1piGtvPSvzKAeKQ9Q5bnZgQT7czmrHMZj8UsO6YZ7uTFjLOYb5Z48GHAYyGO9TcdZYJo5j0vGy9vbRiW33Ij0+azr30AoDK+t7G+fOGlnyXPPwyJ/rPOIR+VPE+LDYpjkYDDd10MV/Yp1vg6Dip57iJ57g6BPKfRgV2wKhbSDGeZj9MJOD2HPz+FP5bFjffgaZK+7wF2kqcS/h75RsOtteAt8d77WUdHR8eviU6gd3R0dHRcAYbdXWwsEXd8OOwVjnwEIcoazmaPz0dNG3333oMKWb2rqPZs9C+VeJUC3IxIbzzcwj+P9yDuJZHOWdj87HO0iHRLmtu0jBtbErgi1w1Hls/w0wxHA0bnMhPy50I5Kg85J12JdHj4k7JTQn4zG/P15nmFVCfkG5SI9AxR4yYPxcWzUUnCAyg10r0Ig4iAe3FbEOlWkN8iwD7y0FCDPs8Nz7PM23MDFw+zNQKpkdMaoX52HjXc1Z2VWM+i19ISwuGSNYWSHjcTcO7efVAPt3Z+LpAvnmKbqxVDwtUUXB3SoMPIA1iNSDLx1c1R0Fx3n0Mi/hjieFOYW3OSi/RW2tVXUxm3MOf+btap723AfKvytPItCdlGsPwgbuuxM5+9/i+FkvBulEWdvgox9cMFk8XkQl/1koYzWp8cCCUQAc+zpENCnAtpRA742yf8r8/3eP5xxMPf/wv/GAcJY9Jg1Z52oGyFQ2bDkBM3jmuZNB7ZhUnxbLtJ5ZAuc7qObh5Clvt0VIX3Udsc4GC6fZ5BcyDHOJpt9yCvBJzkZy1y1MpsBzLWeoqFqz/De+vyHwi3nNE7XgOE5QbMWvfgZd+QcSZabFDt82EEjeGsc3cYQCOBXfieYagFiRmYZvDpCEyn8KcEOjyYZ7E6McdhKQwj5TFLrdbWIs/3ro07Ojo6Oj4iOoHe0dHR0bET+sFAxS9nSpTnpXcufhbJw9qH11viHBLd4j2U/Rq88sduxifvqLvWa2kS4KKR3vQvEryISG/FrxR2i0gH454AstpLlBPpZDRtFkS6BItEOgBwQaTH/IQ4ttxSzDumHMy784yBHEY33IRID7kH8+58GODhMU+TyJ+l9CyEdyF8DpcUhbSMuFUA8dFijZHUkxUEG9GOOV9dn//79yeAgfHLZ0zfn8HEFSLdCr/zOtSni35F8JugKpRuiVTNBoGzke3MsBfnxRekjR5ZrRdxCvJ0kedCsliNHm+4Fr72zmywej1yK9KiTxgyo1pOdT8U+U3iXcarlJeNf21DR+Oxd4OKd7RIt5JY1gQr/vpca7sLLcGd5VfJSAeUr59TnvOPFGxm5GqZZdEknbjJQJzoE0AjCC40H/ccNTJ37xdYBOL2e0gD0tINjOUGDDHp/hUNEr0Lr98nbAdpvaOVd7Y1/P5Ur3tl/aQgAo5DIL0HF0gfptSf44Rjzu8+zYjEulMLO2GdgL9+xf+++4L//P6If/zX/wv+gzmuQ8d0O35k05VdO6m/jjGUP9LqGGif0brreojzsD65cTTRznKmOQPskwa6Z9Ey5USeS3wSbXWK556HDNjmqWuxmH+l/XLNPa+f87Ej3s61aWuKKqNvb4J/iw5H2VVzTRJR87+23HvebauN/ArUf70dUrFZlCtXccxaVKWMUZnp9gGk2ueji2eeMzwwhzPPMc9Bu3wSAn2ewp8Q6MAsYe28dI7so3yiS78PW/F+9rbS0dHR8THxK8zmHR0dHR03Q03CS8g/Pg4Iqky1TybRAAjSj8Jvz4dMza8kJd5qWtvKd+sDy6qPXYpLP+Jaku29uKbsb/W+XlHY3jwbXdrzanVT9XLZ70p/IDPrXvVvZLz79a8E3CIfqe53TwXRaMjHPDRVqo6sl3EtCdHcjcwFWV9KeQ7OwZG76pz0gNDedPTz+ucn8OzFFKqQlpF3CwKaheXvUtrE1oVs0KVUVNM0YfUsdboLAnY+zcBsNx8wHmvER5PLuoR4W8OOhrnoI/Z6b8OmJZFaOu0pn8oEW/WjfaBlZj1OjVvzXhlhxWmN6H2JsTA2nnPSPqJq5t2OKVz1yF+Sq9Tb3mIQIxL7NguuPEv8mi78UsfZl3dW3PLAesnEDj+RQAcwP6cMZilH+fjluydz7wAMXzC4YM7Z+wk4/QAmBvgOeZ0b8cHimfL1HHPhlg1Z8ozeONoyVzuOkOhKoH+ldM3ZQ61j7V1cuow6C2UmtyB3zknjVR7ysryq65RWe1NcU3/X1EUr363vmOI+bmShPGp0ZyGKxHQEA0k7kwAyA4PdsDMJie7GEIZTut/+/Ss+uQP+cTwC/3xCJOTdCFLT7uMBrJro40HI9ZCnowHp3YjZc/hAZNlvPGLp6+ZQCz1r3H5G2ktHZmpkpHPEGfCA8wyagxt7/VNS3MunJi/JdD0D/SQmnG19xT5U3us7kUJGU+8WW+3TeMa0VgJfMz6tHn3iN8pYKcRN13AX4ib5vlbhbz22XlPuWzzzmtyn5m6dRzgawOBgAawsm/Y92ainXz/6HTbTGDbzOAccBuAwyt8QtdCDgroH+xP4dBSt8wk0TxjlnHM/T2Dvw7qGxTT7Yi2XDbwIZ9gU5d28XnOrodVWzp3POzo6OjpeA10DvaOjo6PjDGx9NBCC1tCIpRAiGDLOBCuZwEIEFdU019yqEuI3wC0+mt9KCPiawtT3kveGAOuWqJl0j6WgdtOXEBEmXLXkUTiqDmrW/UvDf+Gw6rwjw4pX4+EssWIEfo8M3Cuta8w3s9FeV7o3/E8miRg4cinhLXMqisbOtKRDqKxF2BsCZu8xw8PzbYh0ayjQgcDuAO8Azx5+8kHBOz5TIawSPypJcyJ5RmOGVGOS1EOsGEp+cl5zbIvPM3DnQIMDz2pCP5hHvBeB16MVNBGWZJfNJwq/r8VGGotmZsO7lfZcdKqzrQ3UifNm2MgiJLdqltoGa5676pPjy18GvzWBt5Z/kR8vLgrcSfDnPFgm66ylh/wd8ni76SUbGIo1hx3LYlsqCXBslyUjjtPRFUUB9iTQDmJJq7hJgWR59gzPYvrZG432NS3S6jS6sk5czD1cN0ev+cb6VXwC8JybdM/SXp1MO14Ea2upM94FNW82cGuS6Byck3drkK+QT3Hap6hhGT6TtE8w9ExgyuIzWDUrieTcckpj1N8+A6cT/u3uM/7n//0TDyQEvJZDTbUDiGbN2QVy3DNAQk47J0T58pkou5IHiWNNWqNl42ZcCup6gmSq5MRzGRLdzQjm1mcORPgcCPFIbrNYKJJz0Jm9mGxmwM9gNd2clckDi7GLERdjZmPCnuV6zZM13dr8sAd71iZ7tfy3M8t+3vZ8trfM+1y8p7Leai5spVPKYiiNWws3DVd+K8i4Iv1qSB7wYlwDo4yDooGOwYEHF7+RiD1onkDTCTgdwccjaJ7h/AzdSOO9HNHQbMc60LT8as99g3lvV34dHR0dHe8BnUDv6Ojo6LgxxDxWBKP+YZILfS7/YPhZPjSueY4uMD4f17S5C/BU3NfOSK++xgoxuUXQFVzOfiIducciXAsrAa2QlFphovQUgDEZzsGMuBLpUfho0okiSSFscyI90lDmKGVxMRquiUxXgWFJ2qRqn7wHweM0B6300Q2wmurnohSfDzTAH8bCvDtg6y02AWaw5s0Am7ohvc/yokyWnjyosLpOQQnYcThfkBmYU3yAcS/hH00akDJVH7LM89Y45wUsSN1rxk+qXlbDEIKBllMl/GYRan3SVGi1bss5tshnEadViBu/uLL+m4S6mPCmI+oN1yZDlba37Me7G2NpUn01Plf8z0TWFmRU0F02rhHu2ZDcVQK64RGnPs7T9gTwd4DuEmEV38FzIroZAH++LaGy4GA592t4nY03Wy6+lzXaS5Tjikotx4Jm91wduD4uam2bHDAKse0kkD4yMzAYwtvWxSRkkRtSGB3H/voJ+O+nYMr9n0/4HzwZbXad132Mk+2zif3cpzxjgFgw81c+UMMvW9foOo5lQ0BYcwTSXPw9A5iT2Z4JYPZpw4Axyx6LKJsAovn2mN4Z2FxzvyLelMTu+DWxhzyX+8V4xmDMlS5nPzgI1oKGjgBwDjQewONBiPMx/IkFjECMz9K/p2CyfZ6Cm/cAz/BCnjN7+buoAjo6Ojo6OgB0Ar2jo6Oj46ZgLAn0Whggl8YCFQnqjjTei1TjrfGeJDwdF2Pva9zb/BfpbRHpjYgNfv3sgqkgtKVFY89AliCPQNR6JhG4qllPAsAmraitZEjzJJhVwh1Gs1tlwCTFC0JhisQ758NScT17j9l7EAHjMGKgW2qlOwzjXTCIyjP8yS/qLSfSheBWjfR4H58sIvKNsRr0nTCIzRnzaoFVjllNVqUJRKGu70HmjHQsifTsnRYN6VWFWUog2y0LZUFK9qao7xapk0UzN0795XeUBA7h/m+fvuC/H7VPrpWairqqEeetyqSiXCb82viRJXcNsb4jTEXomkNJ3JNJskWkI/TnhQn4vfOjvjMu8jHusO4FMXSJhLYkz7kgtltxbtF/tE/rmEgEuGNYwnnxGI6BkBu+yPmiR9kEYsZI3KA8u1+RaKFrflYbvXo2esfL4YJ152qUjcZ0q3b/HhCHFpmTVNPcam8yQp+zpHiMzKJ9LST4cCjGEgB//Rzi//1fwe2f5lgK1hWEEuNDNualM8CLPyHPWbXgszGwQpgv1qE6ZjTmNUNycyTA5VeIdJ4Qfr0P5tvnORDoLPG9Gb+9+buFNZxrorfmrlfJXNG/FTvOxcZ6yo5ZmZeP3171pmvWyI5EgkRwRCBywOEAOgQCnYYRGB3YubDpWUhy8ASeJ9B8BE7hvHPCHMcHcNA+T8fJcKswHR0dHR0dq+gEekdHR0fHjVEj0Gnl137IMJZnf5boZHHHLfFGmzFaGunnNO89RV8wp8A+Ir0acWe+W0S6SbtKpqvwMwhjlKC9N8Q5SIheY04zamNH0jykkRHpIWDGtSWaklLWkTzfZocYwGmaMAFwopVOZ5sBT1AxOUPMu9MIf0fwYMzH0waRTulaEwMFTaxIpOtmgkBqJ8FSEN5TqoTw4ylVRawGihsa7s37XNdIL+ryGuLN1sFX8znzdCoDFr+LhBrX9r5WwFp6xo3kfFqLyYSRn7/dhz44ypEAf398xAKLMYEK9yJAKaSvProlL1bI6FWUBMhKeufAmi3P2o9P/rEtVgpKKiCttcFmpilPzUvJ8syMOpk6r6EgjmptaPfQcM574eKy6GNN3CGYm0Co3oOmYdIbAIxfcecOmJyHBwUC/aXITIr/IK9Li08APadb9f9Ky7m1Gv+iQr0DvJdy7IS+S2txp7pnqEHInNV3Fe+BHJFZvDZuK5wL84SQR+IowwwHbcrDIWhdxiWVjIknIcLdCLhDSJu9zDsEfAPALhHnzXHa53nqmBuJc48wAJTEuNFGj2mV/ta9VkUSv/wEBGIZVIOcvRBmPpxfzBOLhXkPjqbZfTxLORUlnI+eSHVvyPUPimvK/sGGj44PgNU2JZteGGmjkP5ly9bw7cGkBDmBhgF8dwc6HECjA7kBJOS59x7ee2CaAH8CpiN4PgLzCcQzMM8Az/DS98Nwokc0dAK9o6Ojo+MyvNSnb0dHR0fHL4sBS/UpqvwBdcHXjH1TU4N4+7Cw9XIJrtN+TWW4NO9b5P/asB/SbyFZIpDWW2nSfaM4iQjNCbnNiAvvLzvCbKS7WXVbAcpnaIQh4H6RIlWqgIow6S7nnqlabdXYhtQhE0nJ/DiiUQozulE0KWxaW2RsfRxgkPwBHoxpOsZjNKOJVSXNOVHl2Rnp2X2eZ3Y+uvob8iJcecm9/hgsGm1LCrglsG6M1+cM4wSA7H5gswGLRcjvOJindmXdasMp6rvUXrbkRRG1XiAEjcFFfFrmJVH+4+vnFETS+M/Hx8RjbJFE7ZeC9bmllk4jrbNhCJmL06y1nWO6JLeSrApqGVGzu4lK/RIvnWP3KISw2TPaOYXSu1kdVzknDX/7DLUFgR+GEbaP4O8aj/IjJc2f6mGa0HLmhf3rb7/F63/+8VCUh4trM25kdV5eNwTZWdZcvUx4Xvp9SAJ9bwHX+vFrrn931ocSw3GZIfffG+uuMlkPtOeJ1vOeWw/XrL1bG36FyM6mG0uWF/MQy9xAHDTGR6NN7gCAgeNJiurC2ebZvOCAzwPgJwAT8FScT26sxwToeKNEvxNCfxBN+AE4DCGfcQQOY7geXB42aqBLmot+LdexKJzyjmaYzZnrUUvcB/JcNMdZyXM1xT6Z84wzcp2LrDlP15dlM2idgV7i6q524fnnwMYcthOXbu58S/vX3fb2G6I2PpbfnoQoAyCkNuantA4nGedKWZCOiW4IR1e4IYwv4wD6/Bl0GOGGIe6bhPfw0wQ/HeFPz8B0DH/+CPgZxDMIonk++WJdcmnnXZtrXqJtXjFGdHR0dHS8GLoGekdHR0fHjaG2P+1HEoC43dih/UEG8W99PLSEsR2pfjsuQ0Og+1p4Qk6in1scS3xVCJAsXOZl1cG2NNJX0lzJctlXG2SgFQgv0gqC0UfxuDcCWZJ4Gp1E2MaAIa/FzZhyByVymeyZ6OKXXIzZ+MjDBU3toJW9rBtm4MRBS8w5h8MNtdIJBDd+AgOY/Ak8+aKGpTyMdLxp1Ei32uj2CUmiSCQJqw+TapFS3RWvlUQgv9RIj4UomkKjHWxwxYswbMzSWjKdnJlWJoCAv/32Df/9xwNibS7eia1pm1eLADWBsjLNgWAAlnnQ4gJ/f3qOQf+3kOn/5/63SKD/8fiQpwFCcDF1VrOWkGn9IPm3ps9K2XKsxG3BppnF3ZOQkEpZcCWOj0X6ZZK2PVXeX5PcNfeVYyXWham2QKWAeQW2jewZJlar7so5rDHUZ8S5zUpNUxTd5uZYvL/n3E/zVpPuTxe01c1MfzWc8/yUdriV8Uut82xMrOUhL84B2Yam0npNlVhbK/OtG2hrvSL4KptLjzBjsSmKl3GF5IgWJbChhK8HTj6EGQZEEt7LN9YnF6R5DxPwULHI0HbY/mSIPLMlnnwiyMi6I11naVbmJN0wYJ0twR3JcnGbPcj7nET3yM81t+bbY/ml/2em29/6u/Gt8+/oOA+5Xa/kan+a4+Bi6Ru+JXwZhyiQ5m4I550Lmc6jA426UQeI557PJ2A6CXn+HEy36+YhhK3GvOjz76H/d3R0dHR8ZLz0p25HR0dHxy8Nqvy5+EdFOFYBTfNDZ88O4o8s8Ly07DWS5DXz/xk00BWv2X6MBrpipyY6R89GgD1kbTNIoZW+CLdFBm1nvS8QbQSjSKRT4b6IarTEbbglX1gJl6VVXJGJU1xrSmTyd44qJt7L69pD5+5WJOQBzDzBn2ZRtuDiV4hxddNkfJCgp7YUAoc4BQlozB/mtGOLFM8J9oVW+qpGUcOv5Ce3QOOyakH4229fQAD+8fiEf79PmrX/9efjImyswMx9b/5AGhdd1sYSx1okaLL6Jr+/f/mazZYA8D9PfwIMPJQRCwJ5/HIHgDB9L03br82jWxsdKuGrt9o6t6JvEdJahtozAsmeeCX6JcN5jVhXTctIHJUZcB7v3Hyz7sbA/ReQ1l1NA50BcEsD3WwsaIW5pEwAmtYZFmSb3rY2Kays5bIsNsQUXCMNTQKP14o5Xms9oG1pq7yt8lxLDpz5nPe2jk30uH4x/tkevWJe+bExD+hmCH2PJUFas+6yuxrshHLpe9bxQZMi+VPz7MaTEPpPzFbH2cH4y3ucJvlcEjLJSfvgOWiaHygQyI8+kMdl+VkSXJjCLyZEkm8yJbDIAYMDuXDecNBAH8CH8IthEG1R0UAvM61VY5xDTRuN5Qom2YPhMXkWJc+9B0Xz7LMQ6JyIcyXSlSiz55vbrIRIT2e6A8tNWUUZtczW6kw51l0CLurhLdA10DvOAInSAxeu4cf+mnE0LoumMGbpty6Hq0BxG4scTqxcjPonY8+nYL7dsQyBfgKmE/j4DH96hj/+AE7HcNyFPwHMcMQgCgS6X7SbPWvNynOuxnuJttk10Ds6OjreI/Z8qXV0dHR0dFwJS5yna1qQ6/+fvTdds1xFsgWXgbYP4XEyKzMrM7uqbvf7P9f9qut2zueciPBpC6x/gIGBQNIePEZWfB5bYhZiki3MYHAi0IHlx8ma8EEEkJ+TAP1aIHV66bOfG/97ItCvjbU6bRDowJJEbySXSc+V9LXwdg+aQe9X/Hem3Q22mwndiEKFPJ8qv4VyZ0PrmMpb9VOl1gqo3ElFTgS6ikSRhLPGwJCBNXW/3Uega+hRcUYwbyjnfgY5cCa9mTkJ6rXVaW6kLZr2RS6KIFtQYw1NfBFGS9imefc6sV6YsxA/dawI+1V9G5/6yH8+/Aa67P/z4VeUz35ilgVpIqYtA6Hyvgi7ow+o9/Bv98vB4b8/fVABVXrMmO7j+bggzEdl+hwcz2QvMmlcq2fZgwUhoc7A3BN5Eb9VhgapAUIg0issiJK9z9KYGyjW74LgrcKxJl525Fd3fzCAmyyythVJnPrtBjl+jaVQcyiSOlVkYPGbhb+XE+ituEAy3b7IWxK4Jom+hsZ4tytcjUvLuHctc2GjeKjiJ3J8Yx1yt7E+fFbXd8jEOkMRzQqnmm9/T3HDGNQkpL4ZziUVKcznSTMcCEwPiwn3mIeM4anvmFwE6S5uzuXXJtzZhWnrXSSvP85R25Ly/FJvbJFnS0R1KrAquyLP4x+J+WRrM2FuhUA3mUAnQtig1qi35lDd6e+JFOdw7Vy4doFYJ8fRLYRjIdwljhDdhZY5ijGB4kVeoxQFqwrLZZg3IdC/MDk2CPSBE3BtAl3kFSxHQRgTSfNDJNFl3DHhGAmieK65B7ljIMyPr+DjK3gO554HAj2Ybhct9yBNaq3DVvr+4hkHgT4wMDAwkDEI9IGBgYGBz4QWga6IBSDKz/WHQ/1xUmun1wLZa5DI3youeXaqfs/JexDobZxBoAt6RHriLfZsGKkJn+3gS6xppF9K0J+SBq3eimNPK73eT9A2qb7vXPRlGBWClulkMl2FTlrpVmmlrxHo65CW7AE4eHjn4J2vCPSQVHFuugi1uDTrDh0n5eAXXaYchWuyQwmgKq8lmZ7DrWNvn1V5p2qNZEdBmohbwH++z1rp//Pxl3BxNwHPDYJ2kVftRHjPwLuH98np09NL49h1RUbWosokdFz6/k4R6gzgvx8/BYIBQB6TVWbWAQBubzL5+uKPOdVnnzPtks5bwkiBmq+LYBvveEG69tq+InILqPe0iEo7m48QKVyms5gqO6zKnqG5UbSQFAO0QqCn37I3um4AACAASURBVJtm1pehqm/S91FsQK8ADsH8dJ3/KRro1GobaNRxHRdoap4X7bWq/Dcj0bcI9L2N4Brl6xEDsRwL8+o97CzzGnmune52rE31EpIY+FA/Czfa2RZUmHeoJhxNrJxIoBda5jEdo8YiUt8ijHBPANjm7uWRiWAXx1w7BU8589w74N4AlgBy4Vxz78t5S3697rMi3lsh0Ek/t4mXmUBnG0gttpE0PwihHp87aaCbxqvt9Qk1Ngj57eN6QjTPnWtoobt0zVJnzPkoGkYmz+W69dqkFD1z7hTLWBPoi6a4Z42yBn8+IUyyjjz9W42vRUJ/UTL70rx/VPnA+ZBv1LLm1Xnn6V59axZnoLvKX6xzRJPt1mby/GDDOGiFXOcwTjqXtM9xjGeez9GMu3fhj4U851heBhfjvPzWMqbl0+WwtOIv7m/RHwaBPjAwMPA1QlbYAwMDAwMDbwz5GGmQ6IrZWn7k6w+UFoGuw//IBPo5Evs67rnxB4G+jR5Zu6PeGmbdOaV5xjtbjbJgjRUuNO2+O/iedNbKCTxEYc3SqyTSM8ndDYl2EFpmTQ0/KtMhRUiJEJSiIDtopVtYU5tG1Ynva68MIdIZnh14dolXlXPbWUhzDjHC+fDUIL3kDHhtHUQaIQNYlioT6a13yTvIdC5++k/Zy6MKV3QzefmiNai0Bysy5T8fHvA3/wiAcYz1919T6JD/78df29nF6O/jxXR3CynArZmgjeA/PYu57ZVnaNUjl6b0P6ZwRaSyQM10Adzm93owuaKOTs6YRSY8Fu9jre5F+7xBotZlbZW9K6hf6Qu6rqhj2r2HRZl8vq4Fw1RHqCqHsP5OW9AE+kEEwbTMZllY9LXRV9rB1lAizyibO5jwh9+EzSX/+PVDpzxlPbypBnot+07v/oprQCHeZVdWe9fPFXDpOqSuy1jeB3Vd4xwpUI80L+Y+5XdXhbUI7ekGgTyZw4aepHH+UvX9u6qva8103bZ+q/olI5gE9ww87plHaNlXU7aKcCZgqWkeEzZQ7Y9z/2cThkGKaXEcU2VsNRbJhDsQxxwfzk4nD3xySGSKHlOIZCKPv3o91JjL0vPrtUcgsfIjmuBuDdiYYLrdhl8cTNYKNUAgz0UDvSbO9GQrY3v1Xn0gwDmaZw/kOSsCndN55+QZLGF8PD3Zx/au1i9r5Hl+8jgmcYOgkvHuTQl0Sf+C/k705Qj0b5o8B35c+cAlaM2pyi19UJlqHEAitlP4pHVOYQyZbDomAoepJM8JIDeD/ZzPPHdzPu/cRXJexoVIoEuh8pGAuszAugyp99y9MBf25S4GgT4wMDDwNeKcT6eBgYGBgYEzIcIVdS4sjNK8BLQ2GS8+cjSB3hLAfqtELnD5dHypBvolgudvtd7f6uO3hVbd7iTQBYpID7LaC95ZN1pPMK5xJY30U8uylUAj+EP0aFsapSJOkAO18+yT6YocbxSpiEmorkmVQ18H0+7lWelbgpw+gkg+mDN08xwFyFmuHX6zSXfRSK8FrtzSnBIhfrNk+Qz2Polbxu3zU3uIkJW4i+FR12sgEv7XTz8BIPz3p1CKPz3c46+fnpPA++ae8PoUBFv/9RBalpiI/D/RjPq/P2Q1z+dPj0HYHTO3dze4NVPxRFPS5Anl+fCsDwze97zynj4uPbB/XJexkABmHO6NOnedUgjPjFlIIDGbW8v60vsOWziaWS3eZ+v9+oabQD9Tp5KYQLRmNaAPrk3tSjNPBFaDGKaqHKcMhfXjHEQY3CPQUTo2CfTWZ77KaOElDrHO6ABt5/8P7/+Qrj8rgU4vcYlBmdASgnSR7ZUJ9C6qPC7WcL/GOoQrLfMV4rz23mxjAB51nN6cq9YzdyrsFL0mOfc2ksZuDvfPLqQ1I5Doewj0VF4OBDqre4ed5HksXzHvU3wMyn6JQFfF0RYUKN7fzcDzTchftNS9j0QS8phsbZg7iUAgsIvP/2CBj6/RRDun4iSSqv5Nz1a1+0LDPIcp1zEWBSEvf5aiFrqYUaZgYtlSJLfkO+5QxgcAMkUerP/Tv55hPMN7H0gwx6GOZk2exzpzmSATTXOKv8X4Ui5gltDnwbOypFO0YVbvWG0YbM5ZZ+AaJtzPNcFelOFbw7XK/Dnmhu8NrTlVuZG+L7+pIBtdxM+qIyKsAU0TyIoJdws2JlhjiksXc3wG5ld4dwTmGXBy3nncaKTGhHRERyoLozqnCNk6h4xHLW10gf5o6LW/zhrmYgwCfWBgYOBrROvLemBgYGBg4I2gPrK0eVkSkYsB2EKmp30Euv7QsPg2iVzg8ul4EOin460+ftdQCzQvINBbAotLi7SW2MLrvhVqKWS/qDy7PJb+VdBNIl3FIeVTp0PLEIvnXWSh/EVDgnREyoJtIdBz2oSDnZRW+vntVUZLTwQPB+8c2Pmgeb7QREdWtEoCV4fiVj+cEjB3RU2rRedFmK6J95XbAqQCLYY3UoSoFgYS/tdP/5aSPcIlofdfPz13m+B/vHuHV87COiKD26RZSPj16RHvqvPLX9xL/hIj4MGW/h+On8BzaAv3d7cAgKfnF/TAAD42K5l2NJs1AWF46N/dB5L2GYw7oqwsijhbM8MxYxZTvIWAsyGIrMlXfa8JiyZx0XoRy2cI/eq4j0QrUhKWVgllKyKLUp5CdLGKv5UPV04qf+ZIREkYNUdYdY59L5N6042ftGcnkk4sau7ThCSA5gOWpvKxfIdXI9CFQD0C5hYgC5CBIYL3MzA/Aa+8TIbXnnEFvUH7GsuDXeT6uRnp9hTT2NI6b10nbeZGnEcognQtQeUm5LlsfLiL5smTGZSY0WPdBtbGoRX3KV5OCJPcL/Wz9EhVKaQikOXvBop/qfqnwDjgxgEvN3FDhw/kkD6TO2pNw0w5bQbAHuQpmGlHMNHOibStCJR6mZjGDH1Mh17/yNqwXm/qe1v6y9nmxoAtJSI9mFWOmuhpI0vUQE/WW/T6RddVMRrkcX0GjPfg+Feefx61SoUUk7oEL4j05jvZQ6B73/RKawUAYI/iSJqraXAPcux0XOs77dKPpR8RLdmAXjPr++qbySt3g0icB81zOliQtaApn4VeTOfewTw/go4vcKJx7maAZxRWOZKVJIkoeTLCAK7CaupjYQlC30saRvm18FYyhDFGDAwMDHyNULPIwMDAwMDAW0N/iJWkRXCxAERQmz+lwkQVdxwvyHM9jQ0C/TxUJNJZeX+L9f5WH79rqAWaZ9TbOyl1LTS9qGBLImc1nMYakX5BobpRt9Kk5u1D4UTNZLpkesW8U+mb72gtBCAC2tKsezkWSpvQZjoJBGssJmtwjvnOogREyGJ6hmcfyfQ43lYcR5BPMbTZ0+ZZ5wXpmZ42+0vMHWSu5uX2WU1eS5SRzqFNZYnlLerSlPdE+K/3v42khsejf0l08s/PDc1qhfcFyUr47f37wn+uyvs0P6U8U6krU7F3h9DPnuespc7OLPjlj/rdEGNh4jdF1rHWUH8u5us/v3uAg4dB1ljn+H+0eYCZPT74GfMxEtnMdTJlWZK7r4rXiLd4rt7zNDTRU9BWf6rXF/FlpjNoo6tooRblCU/eHqY04dlyBy4n0OW/mObJBHon3LUJ9HsVdlbPNd9k9/dh40jQyI3x3Es099zJVpdzbagkyv69JtCrll54HY+rsDqtLql+6npEJ17FfWgUcq3cGo91vHpCbCR2V9U7IWqcA7g5xHYt+cVMP87V8NJ5fsONR1Q3FqFNTHFc/5XLMHVdfELuz3Ieb+rj6nkXkGegQA7xMTzXJBr1keCVqVJMFmtSh+M55u8J9IuLZ3mHviJj50IzMpWpHmt02uJMWG4MC/+VBLpat8f0OWmgI5DmlqKZZRPeZTK/bACuCHTZCKi61cKajRR/9jCznGmOoIGvzbSLlrgQ6JJYOgNdNrZV70bnUUN3FckDeZ0VfvK4LZsZskX3K3wrXEygf+7vle8Nl34k/Yho1Vktb5AxQG5l7RHHGDLZgsVkQTcWNE0wkwFZG4Z2CmOgR+zj8wz7/Ah6fYFzM5gVeS6bFVOfJtkdjDwuOoR1XxUW4lRPKPWkLekA/X7XWiRcA4NAHxgYGPgaUa/EBwYGBgYG3hD1h5iSRhIBsCAcANYfLaKJrslzX/0KBoF+Hiph21l5f4v1/lYfv3sQ6vssAh2x1O867+xSGVEiYPaEA7oE+iL8hQVbRN+TXptMeUhOtFKFWfhMte+CT2hcLS8UKaaTym2ASPVjQhJ4U9JKZ4AIlgwma88j01WcMIKGUjl4eC/npZea6ICPAn5N6moyXKTO6T/kUMq/cj2JTMcplpIrwViPQE9FU2OgvidguruBCLT+ZINq5RNnTfB/PVVmIrEk0IPGXsBv7sr+IrNcCEqwIHyYw7nrreNSbw+hDC/zM9iZog6PNwV9iddXXj5vkfmeCq3eHbXPj72/vcEDWRgYWARrCxSN3MszOjBmeHz0M45ujtqGqizFa1MkWE2csarb5UMh12j9fDWR3qmXVlzNR9WkSwUPXxVtq5+qNOJLT2MFHbLfvUrnWcVZmKo/ID/bnjFCdwZpM8D0kOxwY/740o5S3JQNtiDQp9cy/GHKYedY/uPULi4ddbGwaBNFthvPWxPnmocU8p2R25+MBzqORsXVNsFVOIdqMNsSmO9pP40CtEj0XvpPxYC4EVyFuaPQFu/UWkbq9BDrrWc4Q04eeO1UYt3G3t+F9+Jew/0U26c7BgJWNlZ4FVHIcil3ep+Z+M2kcwuqXhhBCxIIZugNsrlxba7YBIsJqT/5SJr/xgC/zIkMNmrdLn2F02ZhlX9NTEl5LibQlT8hEOiiZS6kuRWTyxT+KM5nfIBYy5E8KZZJcpHlQHFOORg0exjngzK5aKE7n0l0BkpNc3GL9/5CAt3lDXCDQP+RcOnH0Y+I5oSMxbjTOgOdLQwf4qYcCtYsJgO6mUCHQJ7DGoR+xnB+BrtojWKecXh+Ao6vcH6G90cALqw/09CVBq5AnvtYjkSgx3lCP4b6fmkvIuIYV2w87fW7t5IhDAJ9YGBg4GuEfCUPDAwMDAx8IWipZCTQ08eX/NRE+SVCiGt9QG9Jaa6V3l7UH7OnlKX1MXwKvncCfSvMOfV2aZ2r+O9WgpwNOq35ANhHpJ+Q7u58Ty5outzSSqfqqpSxUyvJ9pUmfhbUXxZik2oTBTmehNOcBb5A1EqvifRTK5ggJy6HkTVogXjnwLOPfJ6cZ85Rjl2R5C3hcnLLQqgcqhRMcb7sQmJ/Kh13IBLoi7zVbaFdK4JAeS+KuaM8zv3uXdbsnSJB/rN/xR/Nu5TDJ/8E95Lj/fbuHr++iAZ5eKMPt3fp/uPLM35zm0lLL+7H8NRCnqd8YSGV8Mk9xnPQw/0fk0n48nn/8vSEP93rvsr469MTUtRTvw7TFK4iGcb94QYPZGBRUjdCbx/h8as7Bs10rWWYHyFfcH0dLqi4L8HNNYIQzVt9hMp0RdNciKgieiWghbTVlTbXKG15qwj0Iroi07tpEmAVoe4PjTD75jRNoAOaRG+TVem5qeXfElY3SLC1qqKGOf6CnNuxDpEh1iDsubRqvVk3me40TZ02qeLJ/CDEXzzVIGnOL3YDra1H9ozpqvA6+LuVuKJpfupGrPumTXG1FKRcv0TlZg+NLQK9xrvYlufX8Li3t4FoneMYoo4OT8k9IpqRJ+ClmuNvCDhS4/lVn2YAcyRczRTSEi1oOcMbCNrZegOctI/fWeBlBj4CxbnaAAjhzPA0M7KPV3VDzGNPjhy+mXJB429BoOuwdUNWo3LNFxlSmuc2mm+nqH2OkC8dVJoU9ybkRPKGAOQ+EPspOQ86BoKc2QfrN+yVBrqEVyS6TsPXmwxyNcXMS/dUPfHdeVf4ydqqOIZjj1n4LTTjDQL9y+FaHx+n4HO/s2s/Y0sLWw0WSV5jUG5GIhAdQAjnnpM1wMEEk+3yG+dh9h7MDm520VS7B9yM6fkZNB/hvIOXCTQR6DK/UibQWZfNIxDoPbQI9BhfjtlY+O1J5xoY/XxgYGDga8SpIpKBgYGBgYE3RPiaSiaNk2xSC3/agqDwN0MdWriSRw9aKNiaHlsfW6ekv4ZrEOj1fassa27nlv1bJtD3+G0Jts+pt65k/gRUVgd6RLrO8hzUgtvN9D+TRvpF6VLx87DwKQXttPStqiSnV+ZOKINqgkj8GuWl0iefmc7pOvzk89IDmT4lbfVGgmi3YyX0RuaRgqjfwzPDz3PgCYSnqgh1SXthsVk3UVbaxqh18ZWwvVfMhtenJYO3EaOBZvuuXqQpbpDM2SvN8pwWcLgj3B0dRBhnpykJ5H+KxPaH+TG8URfe10+ROP/15RkAcHsbyKJDJE2FWnGJVs9lsiA49Zx/fdU2mAMr/uebPED85eUx+f359gF/eXpCC3+6v8NfH5dp6WddQnlYF8wvK/xxknIw/vb4MSeb2Y8yOa7cCsK05de8qSDnfNdlbhBpDR68ODM3+akjDlgFPgvcHF72EeioCPSpHy7mlS+31gy9uhanOHo0h5szCPTeI3Klcc9A96iCGhJsQtSojXGFpEtTs27nshit0lfdoUifq79EnnPnTIoz139FO1SF4cp/McbVBecyfK8e71oPq+N3xoauJdw6Xvy9j+3cOdXZSJlDj3h9RGEa/hjTEK3zWwra7/L8N0hdvyiPzoMiYTvH8dtO2T9pm8v4L6QRMsFLAN7H8B8kbKuhtOb+ynKGnlAX0Q2omH8IDFUeYadW3qlsGlx0e6JIoFuYwwFmmkCULdWEfG4AMjBEqbuk4148K4s1igCX55qDhml61HTmeVx5pL4jJtvV3CBNZoXU5sJ0i4wp8R2IZns7ZjfNs9DUkr8kjyG2vQxv9M2ximu8M73pYmueu+YzmrDGTX03b1yhuLYFUbBWxSZa5bAAWRhYsLVga0DGRHPtkTg3DBgGswt/8ww/HyN57kDsQY7Dxqh5BkMsEerxcGvdJ+XtYU2eQ1haODwFo58ODAwMfI+Q5f7AwMDAwMBXg0ygJ0kmkjCoMFlY/jGOWN9x3MxNXSuTiwvUgo81QvVrQO8je+3j+9yyX06gN0nEHeA3Wca03vXa+z6n7LrtnouO2f43IdLp9Hj0mTXSF0nvSZgWlw/F7ZIQoOpqwU2oZypLUMdsxOs4Jw0pyPgIdS1keriezARjDKwxZSIA2u241Q4picrCOekunE/oELXFlgR6rbFVyrQYMC4T0UpOvoSKK5ogDYF37fKp+3znQrXNVltavESzqMb3UciYNf30u8tx393eFvF07XkQbpGJkhmMZ58J7xtzhxs1/r7C42f/XKT3OrcEiSGPP9/k7SOvcQPaCwOPz0f86f4uhfvrk2b+OuN9UU81IR5+/3h3l+5vlQa9pPi/P/2qwq+Q6b3rFLY3tjTaCMnGuw2CsEhD98eK+C0I9NYznIDuMFYT49S5viTz05JZmp/WEfbMqWuEoUZPE920ZeH6WpYrMhZV3HO/zzdIUP2KpQ3KtQfy2azcIc6Lwm9jUSeLAnTi7ZkLuR9uQZyrvDU52WuCMtZ1iUtJK/q/u4lkdGVmnKtJYz4C7PI84WLYjxzIc/kcKLpiTMDI+4zldkLgUjBZrsss5sWljuRPl+WBgsn6f4mJ9nr8az12q43thUFxBFCsK5bnSee6U36WIhthokmVg3NadgImi+lwAB0mBE15wLMPnLa5AcV/YnQgNP9Insc1Q0mAR8zx+A6Z27Wpds+VexxPlHWS1oolZ8HqLz8T6/trmGMH+v0llbU/bwz8KLj0fbfazNZ3/Np6vxVlLS0bZTEemkA3cUxhiht32EQLHROILIw5wB8seLIgQzCWYAyFTWscdpR5d4T3M3g+hrE8ap8TM4g92DmwthZRoO7naNzX4U9xHwT6wMDAwECJLI0bGBgYGBj4SrCPQIdyC/eMGdlE697pTX84DgL9PAwC/TxI+z0XO8+9v7aJ99V4PaJxp1Y6sFPYfwJ2p0eLy1PI9AWfqmN2iI8uH1KnCaAk7KCuqbhOmiEAJmMjmW6LNJaZ9ojDyEtAaaV7Dz+7qGUWQqRfAAV5zuIaheNJcL98J8uScTiTNabZLX7DeclVnTtOCBmx0oZ6skoC/v3hHeSdPD29hqRsOA+XXTgr1t6EI3zLuCoxtoD1maa36uxoADd0g8eXfMgwg/Hb29zpj/D4p3sM73HJKyCRfgq/u73Fv15ekMa+BQ9QdoL/uAs95f88a032Bnkg2p1yDaR3+//c/ZRCPifhJeOvnz4u06qJieY9tZrZokgh3Fb7qCstV2RJoOt2upW53fA/FT32UqPd99bRqJtuP7yEQBfyTu7XyMVjuxwtLfR6uSjmX1vFWB+Qy6Ism4KS6XMsS/SoB6RNfkParwTY05BVYltz3l7i9m5lfUMApljGuXIXiMn1x/i+7uPZ4ByJaqOIaqDst8zA8SWUVTYASdOSOLPPY9GrSieZho/PJo9nuHx2F7WRKZZLa8ozR5LXo0mYA8A9hTr61xzj7DXPfcK76kKoa1mXVAR6Is9J5aHbfSyDoRC3KIYBDhZkD5gOE8wkZ7pnAt1xOJyjsKYc02b26a8gw+W5nQta6KnfyLhZm2xX2uK7CPRex1TfCly6X4RBoA9s4tL33WozW9/xmxNMFaXXjgkU1ynJukxcu8kXTFijx4nVTIA5gOwEaybwzQH+9hCGGAqjE0iI8RnezWB3jBtqXtNGJWIEAt17tI/ikWfr9/d2+FPcB4E+MDAwMFCixxIMDAwMDAx8QVDjD5CPNOr4MxxKSV4tsG3l08qzFbYlAO6V/WtA7wN768P7HAwC/TyI4OFc7CTQgbc5J70Zd41oPIFE30N+nYtNgXVJDi7Nu6sravu1OSAhuvv5NYL3ShbTyu0vX1NxTnrWTLeYrAEtCtBqw+2xg2HwChdMujMHbXRgQaCHu3Cd7tiVvUjIEu3UyHWzj9fcaeXdV/zcM3bE8pmNNiOEj46TLkM/fw/g4eEhOlPxCwBP/ikQDhF+NiqRLBAlAuwhCDXn1xD+PmqwOwRtnZeXIz4CsFPw/0M0G/+L0kx/cT6lqX/KatHCyz75+h+379P1ETndvz+/qFAdAsO4xTD4H4f3kHH3AML/flRa6SkqN15h5VZrVlaXy3CNMC1SjKpA9T0aZFsOuAM6nM6n1rD+HJ/xGx1s4XkCgV5vXGgPnFW8ereJLlc1lhEyu7dW9b0lX+sXyKRteqy6LUb/xTnnpffm69s9B0p9Sryt8arTvrT/bWsCqua9Gwrv8IXbZRUC/SnaTb+Pm3/0MSNa07wu9/wawguBLsqIEu4Yy66bRCKHOZdVk9+sWPjW2eAcSXPGsjyMcKb8HQEvDvioN4Wdgmv02/g9JM9AkTyvCfTiOXURYhkMIWwg0EmbYL59mmCnCTTZZMKd2UeeK7yzoH0uM5lon/ugfZ7OPdf1xGEnl1MEuriHHXpYnHmuyytNrVmF6hiNBcGmn/tK4+Yg0Ac2cen7brWZre/4PRPMjm8sNjCQjTlyiJDPHTDNB9HUu5kAe4CxB1h7AN8e4G/DmE8cvgHgHdgdwbNT5HnUPvfBAgVx3kC5XP+3vs3X+tVe92v21dHHBwYGBr5H9FiCgYGBgYGBL4yaIJc/MVtIjXAOvBD4N1kBFVeje1Ajlh9TvenzrVi/U9H7wN768D4Hg0A/DzruOWmcQKDXuCahvsX6NuOcQqZXaV+7i62SDaXfQ7MI1PpJfm1OSEjvfn7L4KxuqfZsEujaXZdjMiael94gEBpPkd1yP2cAL/4YtEScr2TGrDTCEMZl9vkJErEeP0U2+M22+3rf7/n2OK1VbBHoANL5t3XdxTp+XzSQ8D5+epeJZwPgUR1BYmFw9K8pvXem7LQf53JrgHcGH1tPzYA5ePzZPhTOf/ePyf839qbw+8fxOUfeM+1F/OH2Tt0xLCz+qrXSNYmSS67adyDkAiEfwh1Uff5//hky6h+fXnWiFRkToTWNt4TJGty9UcGriik4yc7Y3GtGu9vkjoAXTYk12XRO/GsQ6HI/52HHRLJWy8s9CmKtJApVYguJR/2c1PZaFFkRE1t189jPbhPd4abjQVKftfueyVL6XbwtiPNqUpPq1ccjEGf3m3gkg1g84Uiy+Blp7iCKZ5kDeI0a5saGsC9xLPB1n5ai0tJNSPTCbDrUO5d3Jc9Sj89QZsa59Jfk3iGYZz+6MIEUm2pOWZBca73KqAl0LgjzWK5iY0JnjEsa6CouETAZGDOF888n8Wd4z+HIcgeAKe5Pyf1CCPTwDpUWpx6Dnc9nw6dPtPgOGPldtIjoGKZ1fryu36wxWwe7hBirMAj0gU1c+r5bbWbrO37PmEQbwUI6hm0cShmZRI9zt4wZsglnOoCmA6YpEOju7gB3M4HZAc4Hwvw4x7PNI3l+PIbjMZzYuWLErTqdmut9n+//cmi7t9I9F6OPDwwMDHyPWHxODgwMDAwMfB2oBaHypwn0SBzFX64EiMz1h1XrI7R135oa935cXZvdOxe9j+itD+9z8KMT6OdCE5LnpPOVEOhF3BMSuIREP9FrX9JbCWT/B2q5qjtq+1EVrL5pFyGPcO1M1RnbKwR6uOaqHARrLKydgm2P2tTr4tna/dwDeJlfwLPSGOHcP8NY7KIzK7k5t2XMy8tVtzWfrRGiS6jvJaNq0qY1r8S471E2nMW4R8Bv79/jNQr+ZUOYiWY0X/xzoE5MOP/aRdvvTwCOqhyEkuP595s7/P05k/P/eRcGgDmmX1JmFM9CD+n96rIW+cxcVOitDeV4mbXll4A/3cggw/jAR+h5+Ol5VveNedcEQervqrPhf0Im+j9hTm3on5/UZgJN1GxtjpFKWtNA1+F1AHbqfdfk5QVj82oZTpjvzpoaO8Tl7uhZc2yZLud30yV84+/kgMMBZA44GAsTNZaZGTM7OD8D/jkMKfqIVF5Zh/SOU37YswAAIABJREFUgdDkam+Jl67X1ogRjw23U+tz0XR2zHt6M0J7olnep9swL+C2FY7CaQN6anBQS0mV710kuKdDmQ+r+EKqA8DxVd1zNiDl5F2pTItmFS9eqjU+oQpXT8Tq/enz1FvV+14IJg/8wqpta5zax3c0hN2bHgwAm+ZsTs+q1pTJhHv5zVRIAE3lL8GsAYyFmSwoaqgn7XKPeN68Xnvkd8G1xnk1b8C76mz06J+Icx23eu7O0MH1mfOUy7Ooumt9NwwCfWAT13jf9YadjXXN1rifnNfHGgLB8AQC4OGRVvd605QxYfywgUC38W+yE44Hi/kAsPNBw/xVSPPXSKC7rHkOvXZYW/m3fvfIZnr+dXp70zklj4GBgYGB7wF6+TwwMDAwMPCVQUvssoCnJNArUkqESVxqQLY/knofj72Ptz0faZeyeNdC7yN77eP73LL/yAT6JWjV2yn1cAWSBngbMl0EsSdFOYdQj3md4LwvyRPIdHW7l0xvEaf6ost/NJ2piEBVmwqPYqIvF89WnJsOwFoLawwMWbRNvW/38zaZzmAh0NW4zBWBvpRtNwj2Cts9k1fuluiafN8Slnde2vueVmzjtp9vDvj+PmuSv/CxIKaeIWfUBmHnzIBVefzO3uHvc9YI/8/pJ/zP64dFef58eECgZMoC/sNndnCifIa3Z8aLyyT67w+3ABgTgvnOo7KxPMXNAH97imkdKlPyx1YbY9zdWXnMUEYTxouPmPGLIvn/YO9THK7emY9j+T8+fkRR+VTlWZM2C09NVjYIdE3KbmHRIOsOsSvSCenv9DxnyusS6DX5yOhpn9PDLQ7GgqJ2bajdoNnq2GH2M8AvIUnvy+wYSOegy2BSLP2oKhqpd8VluCZWCPRHzcZurA+3eFidDTU8WoTwWqLdpqji31HDPV7ex3trc3hGtsxBVIwVadx3x/Ce5ngfLbgnotxXZa7fjXZfbIhFJNA34mrPejKpgz3EudR44Gev8lzDXsJ7J1bXHjodA2BSRjYou1MsV4tA120nnY9OZb5CjMmfjI/JvDoBXn+DSbmCf642hpB/urtz0jitH6/uzFi+s4JAz34lga7H4zr+Fdfyg0Af2MQ13rduN1vf8L3v/pbzNoFueYol4EyhE8LYbyge92AAewBNFtM0wdgJk53wahhHw4EoF21z+XNzGAOSpQrZzCh9lysDEr3v8lOJ7719chDoAwMDAwMlBoE+MDAwMPAVo0Wgy70I7IySBxGIDJKGI2t6dS+BvvYxVX+8rZX5S2MQ6Oej96F+bXwlBDrwBiT6HuF9K9qVSfRT82/G38VylmelL6KcQ6bnmyAP7xEkOoVaSC6+mSgpzkdPgvOYRvIjRaarc1ZP7OcewPPxOWigiDSMc78tzk4Hg5UpZRnH0/2K4Htf72yH2t2za+38ijhfthIl8NRagd30t4vwsXa4MbizB9ynM34ZhgxsfE8+6g09Rk3r2c9FRpYMjpyJb10EV9X3gQh/stnk/Kykmx+qc6kfElPG+MU/laNpJEl+Z+/BxdjKcPD41/wMgHAbzUBLtTvvFE0TYv7f9icAwF/5OaXjler9XJnw9cz4w/QQc8vv50mF80l7MmT83sizEP7xUbZXqHL3CPRzpgxeXDRvVxw30n2LNKpAizPjlaCbajeFQ9A6DyQtodD4FWLNz6WiGnyRfH5vDQK9eIb6LHmNtY7YIWYL8rz2b6TXG8q3itDc1LSVWMtJTxAM3Ginej4iQKblaeqUh0uykCjcz3P4FY11GQaFO3VV/bTaf22aHQjEeRE2zmNFMF/e1/1T7h8omGf3HvjZVXntafRXJtAXydcFF1iUGugCk+MIeZ7mn0iuJ+Jc7lNmKl4kyCS9RArHevV5/ZkJdK7eVyDcAh/GKQcfDlGvHrT6RpP+W/dh5bysk3I+WaZ9ZQwCfWAT13jfp0wYrW/87iK1dKyHfg4m3KUETOEPNo4bU7BSQTZooFtjQMbAGANjCDN7HDlqmc8+m22f56h5DqQJPWm1x1/m8oiWXIrqulW/rYG/1Rdbv9fA6OMDAwMD3yMGgT4wMDAw8BWjJMzrD8MlgW4DgS6kjCJqMramvbUPsj0CmUGgn4NBoJ8b/4rtrUmi04VZ7BHm96K+AZl+Sv69iJvxFZnerL5SYLVKpi+DN26W4+SSL9GCbqq8TI6jSOKCUCfAmgkHe9PQTN8DhofHy/wKP5eCcyHGa76rcFceWW5e9snze2gvnQaRpL2YN5qCJtVM4311cA6Rrp9BNQd7mPAbMwWLAqBkhvOZGb+hbGb5Z/+M35jSXPov/lklmQvl2OHGlCaaf6IDjpEV+9mp89PhYZV298EcEhn66o/IBHr5Dn5jb/ECxm10/+heC/+f7C1+ds/F+J85G0XgttrqJgnJSFrM6TmAPxx+Um9Unc3eINBdrVkboQn9G9hmGAD4y8dfi+IUaBJHFUxFTjmlOWxV/bgz559m1kKcrZyB3iTQY1n1MCa/RXj1m87CVoNCSlJFTBtyVJlSGP2Lzn3tzu1wQqCnZNV53wCWmwqqdBea0XvH2Ko8O+YmAJWpdv1uGmOedjrE4NKcXoFiY5csSTiml5phTYLWBVWeC7PeCJrrhHzeOQDk4QlFO9DJ93inOwIsh/LOHvjY2vSxF3ve1Z7vjl7yvfS3CPRIgqfzzU0mxgnZfXEmvOo/2p8RyXEPcLR0U59NDtX/iyE11y8B8M5Fs81rzx/Tq8c70YDvhV+k+YaizkGgD2ziSxPouj9vZLMYlgmGw6DORGDROrc2kOiTgZkmkCEYE61cEUDxyAbnj5jdMWiaixl355TmuZp7TPzV84nzSyslizXjloynNxns+c4/92Nx9PGBgYGB7xG1xGBgYGBgYOArBKH8KNQkUf7AIZoQJG2AEOjxKrmtoy3ML/30fa+sXwN6RHnPHSvuWxgE+nn4ygh0oEGi99jbvViJtDe9tyLSTynDWuTVNLbI9DKdpVhMu2iSRo9+VLnXwjMdsiRag6vWJEMSoOdrVRayIEOwMDhM0wlkugjWQ/4eQTtlno+BKPexJxdketJdq8j0eFXI1guft8Hmo9YkmL4419IEN4OuEuh1PjVXaGIbkTpzjN/d3+NFxXp8Cmbe//QuaJz/4o8p+vPzS3IHgL8+5tL8+d17/OyF7Ga8PD8DB0VuOa35W8/L+RnsbTkXt+aH39hwHvo/Z03YN56/iQ5hyVBfx6YdVtySBYIYQWe1xQ21oATFN7f3MSrj6Kvz5V/knoPmbMpHZWRviih4fsll8ZfN1SkdwTtVhk8O+wj0Gd2KaS5RakKqQTx7eXn1WhFYknq1/1p/1Ol1yvxUtycTwmrT1920cQGB3k5u0/O2uicgD6hqPqnTsygJdE2QE/LyWyCm2xcEeo2NcBMAO4V69B54VYGe2mNkSlaT5vc3wPEZ+KU6NqJbnj04k0Dvabo3Ce0WLEhVuIyUpVl2k4nydB/95exz0nlIOJ2PGgflLHMOfFcw186FP8NXxnLknaYSBgK91SdUOJDKr6gjXiHQ9a9cv+G32iDQBzZxjfe9Rex2CHO535pPuu0Ysa+ZbKp9ssA0gSYLM1mYqI0elkE+HM/gGewc/HyEd8dgbcJz+HUe6SgIAEnj3MRr/awzN8aJnpymNZ7uGSfW5EODQB8YGBgYyBgE+sDAwMDAN4CWsLM8czHgEEn0gPJs3bWPLbnvfZih4f6GQpmrYBDo56P1rt8iHwJWtBC38QYEukZBpl+BCL9KfMLXp5muEthI40EF6Jp5l6ua3+hkqfteYa6dFgFRC5by/6SKn9NYmnvP7VUI9slYWGtgzVpbZii2pSgcI9BbR3ZgZvho9lcU2pJ4a0Gu5+cp5dRCxq8UZy9OahMiEGwlcm5f7T/ERx1mL3FWpPmWc1U9n3J21mHINMLX5aygil3zxHo+MNqUMUJbPso57cr9YKbinpMJd5PamBMSW5+VLibGEwmlCtLkSwm2a465Mpl/dNm/1hLXhJI6t9o0+l/inx7n2qfKfoMg7sV9Z4BHrd0tvbkVx6k6WnnXxeN2ytMipjzQX9+YFKwNKsNtog6vhPAv2r8i0hZkQGusbjrs8G443tbEylocXjr3eJrCPb7LxREjKs1olT81DdcjLeL9uzuACDYen+B+/VhkVeC510aAn/74Hh8+/grc3AH/emyHa+V/Evp9ej2rzrpyN4E+KQJdNpuRIsQrAj1eU9RAZxPML5fp6/UDlfe63OxhnAdFAp0RiXTRUFepFc8oc7j3jb5Q14leABQfc6pMvflia/2+9h10AgaBPrCJa7zvVvvt3V+bQEcYO6wFpgPocIC5OQTN88nCmEAnMHuwO4LnI9x8hD8egfkIcrMaG2R8UP2AKE6jeg6J/d6x6kO9NcOWbKe1/t37fT8I9IGBgYGBjHqf8MDAwMDAwDcAEWvXHyl+8d1CRGDmBUHLi6tTBMgDAz8AHtE/G13jUj5uS96xCP8Uw51KpG8U9NRytBLQaTSEUp9UgAclCA5kdDUqaS0rygXUlHYhXCadPa3zqiRjaFl86L21hCi8Uobfo2neECr8f3QzxCr7ZCdYq89N7yG/C9lGYsmCCfA3ExyCyXfvHNh5sM8lUyXMScX6kRoi7jxjrxjXQr3zITlen6x+Hwv/EdjxkFtEWi+eRGkIIRf9Rdpk8Pj9wwP0pol/ftLnh0sarrzXv2tC3Qj30n8WD1+lESIebi2cInmPzzW5DJSdiWHvJrjCNLyUL6bvFTl8NKVM1vjk57wqT1OLUuff8Sd18ZKfy9da3fX4oZ6n63ZQz2grcliPNULWf2rUXZMYlDRqclC5ExdBT8LeOIvBo/bcHbifxi1QmHPYg0U29eBdk5ht5+QgGyvEOMOdtOfeM9ZjBPpDhh7OxFR7PXfU6euz0oFmvwQDuJkAQ7ibwuENL+61JFq7y/To8fs7/G66ARj41/MTPvzll+D+6Wn5fO2Evn4Um9qg6p6q+YcW10TZctfyABJNtFGcv8sXn5udAYmGONQf+6Jthm+vPK7L8VoAL/Zb1EPRwmdBRvci1OHr8YiKn4GBHxabxHr8zwatc0wT6DCle6a4J4o5aJ47Bz/P4Fmbao9rwPqIB5njSK0lWY8pqAaFrbF6r3/vd2BgYGBgYB3nfBkODAwMDAx8AewhIQ4AbmLoKCbqfCCK1kQ5DcrHXWtqbIXtlfNrQK++1urx3LIPDfTzINThuXhjDfQa77Avv2sVqZnOSuJna6bvSHuH93rc9ciima65sWXmvOBnw6Wpwi0CoGeOOudaC5XFpxSgy3npKcRCQz3HnuwEawyMMTFYdS5zmWETPv45MDx7+DkQ6lkDXcby8GysBG5LsXqD9L0aFAHY8jt7fNxLGgQsTbvrMlyS3xrEXHWdh7y9jN+/uwPA+OenpyLc7x9y35Uz1AkM9+xw/y77PVA5Xv7LPcK9CKlbjtN3d7fgSNi+uJfsJwR3yKS+UPcmmJ8XrxflRSjzeneT7p8fX7uczQKd6v6/Hn5K3r4K9C+X625+aWiWt9JOX/wNkloxcX9499sitX+8fsiJPdXniLfAJeFZC8ATP9eYY6V8q0u96sVx/bx71okSXotBaOO3zv+MfvLIK+0t4j6614YZntvBcRd/k9Z7Nc68i8S53rjRfCYuvSWIqFp45DakCQ8rzxQ3icx1vbTJShv7+4HEJjxwR4SfHz8g7cZqLbfrZvMQCHNLBvCM59dXfPzHB+xHz7T+KThFnKbbayfOlgZ6mnMtgEk1YaGqhQhX2ucmnJWeSHEieCv+8gyZQJdwRFU/iGUmH88z9j5onoKjVjlyP148K0NrZpuq6kN3lO8yncYWgV6kUuXZe79mWa/nYGigD2ziGu+7M64275cbX7rtdI9mOplwfMbhADrcwBwOgUQ3apLyDjgeg8n2+RWYj8DxCPgjwHpjX6MupAiinV5swKN+vN1EuE7j1O/6c8eI0ccHBgYGvkcMAn1gYGBg4DvCLYRAD9QPxe/D/AsgmwJeCGtE4D8I9NMwCPTz8I0R6EDIb49Wegx67az3EfiXEOknFPrS52sIrx6yZ/5fEVx15prEDvc9slYJkZrkvKlCNh6OQnvVHBDVMXqEuiVM4JVz07cqk9Lo7MFw3sHNczhrUZl2Zy77bdZ4A/QV67sLujZJAquCyH0EersYa4VbL3hJpu9prBsVcWo9CbHWTEgntjbnArhhpPIf21mZW1JHiHM4I5mQ30udvK3KJeHEXDo33lnaICGfz5FMqs9A1xxyVe1/evdTuv7r06/th9mLLZk6kAmc4oufw/nHEbc3Ybz0YBw/PK7LqjfbSGWauSbQU1lbc2pFsu/CuQS6flnxnrX7GxDogDorvVNGIbwFPeJ8kYQmQPO4i5vec2iodyHVJ01flhieyyoRE+wT8rskhD1ShoL/QspEkXwn3L5/B8eMn8wEAoc+xIx//Bo1xmtrUnJ9e4vfHW5wM93AMGN2Dn97/Cfwy7mD+FdMoG8Q6ZTOQE+zUGzC8tKU6XZjQGRitw/txFmjSDCdZ/7LWVYrdO9B7gj20XSzEF8+lqS2QlFoqgPkw96LojcREhmfXblfT03o8Gvr9kGgD3wufMMEusmm2xHJc3M4gI2BWKBi2UwzH8HuNRDnbo4bbGaAj7n8i+xkEGAQM0y0WCHBKps6Oc7ieq2OB4E+MDAwMHAdDBPuAwMDAwPfEVrCyaVANZh1/1xlGhj4nsDBtHtLsFAT63sInhOzLvp4Lz1+Ku9PItRbA0NPSLovWD+rJSH+qSLLHwCI2eMWmc6VfxBE53SbZHhz7MsCrtJbkfOx/ksRFIG0cIwZzYqYPY7k0xnUBzutkOlt5G06BJgJ880UyHR28C5oLXI8kzVoxgUCIMmygVDW9ABUcma6HqrLFprRLmjjWsx3jRjv1fVCM527N9cDLzXQA5Rp9ZqYbbWH19ZmjirFl15nJDQn+/pc8VrTMq0bdHuo1xXAZt1V3tp0fPGsutvsHVda7gb5eU0OdGvvimAvc2ZmA3Eex8yF2fhTB7lYb8VYvRYt1jHvCdsqz6Wo55FKIL9qZv8MvFPtngj4xNkNCFrqUi4AkKnruXTOUA5UESU3OnCPrEUY2GXOOMT38RrjWMphEt/Aub3OKm0D4P4AIWwIhFs7qawIMztYGDz7GQTgX4+/BnK+VTwD4P4BvyWDg5lwMBbzMeyg+cs//xLqblEPb7WwvzTdtyrXvvapTbcXGy020sx7YTg1WQnBBDDlDWyLPg+0yWwuv8qkKdUri3adXWGiHRgY2AciYLLAZEGTBVkLMhZMBM8cxu7ZZcJ8doD34Q9A6sfF8qpeY4d0CAyDsKVcVmfB+lQPe8jzgYGBgYGB6+GULbMDAwMDAwNfOSYEM+5KPEMEitoGhKxtwax/gTAdzsjacC1hTkubQGNN+Lxnur2mUKgnINsnODsN19BAPw9LDfS1nfkt9DQk1+61+yXLqEvr7RQN9C1i5FSstKM1DfWrNXFqXq5HeWMT7xcGLyI24j4olo1U0DKwWQ3TJNSb9xtjR6H1rout3It8sxCNcmAAgUy3xoCMgekS6uuV+coMxzO895Ezze07yOhYketccqpKg71Gr5fQrlA69Pkj3N5c9mjhtM9Lv3As6JKfDQI9kSytubEm0atyLTQy8+V/Ks3u/3n8sOOVUOO6JsirciRjIZw1cAXWldGbZDuWz9AtX32d87uf7tLd+8qk/Sel/f2O8tzyj4+yhSLGdGWaudwdh+VOkzaSGdYqDarXVRX5mW49ukchNLOvw+6dE2kZtZltI9wlEMmLWABg5cYAnqqwrfi1R92Wb1ChVx+RIIfP1WZjYeS4gruYpuMQRppXMtVO+X0Rge5vQcQwMc+fzAFJw1yV5O/zS9BOfDnG+gBwe4t/myYQDG6MhQHBgHA8HvF0fMGHJ2Wa/VP9Us4k0HfvpF0Jt5o1Lfpvcq+1tFvxirGJqndtUOrCEAqz7freEArrNERgY1R30ZOzGvs64wGxB+YZYBcfI5JplaZ5r35F2zSPBnEOLurk1I7XynOtfs+dk1vzeSefxTu+9Jth4Mth652vvddqvrtqOcStN29GKxWpX1BswWpTDRHYmrApxobxAkSANfHs80CcG2NgyADs4Z2HdzNYTLbPr8GUu3dIlmi4ti6kyPTUzXN/ly9iCdLXQN9T94zl9/3oewMDAwMD52Nlth0YGBgYGPjWQAhSbsp/FD/J4i/J5xmXn2pBcHPE0ox7jzxXWSJ750/bEIc3hUFKEPlDEuh8Uc4LuT7Xz7eVssP5S6Ge6eG9UALNs2DQNn2/7Xa56fsd7fWzmHpvRD4lvYtJ9RMyPOs5tWA7v7OHIkHVCgrNsiUh2OJfyhTU2LlWnqbXsjVqDfOSUK/Cx3CTtZiM3SDT1+EBvPAcRmCWw3tz8Zk5EepetGVqzk/A1+gr+7BCc53kvmdMehMivUhKhJd7TLg33DuVMd0HdvB39rabtQGBwfiXe4op5lPEf2vv4sdvECh/5GARgYhwfM1lZTBubzM59ZM5LEoKAJ/Y4Xl+KV1zo4ZdmF0GDNkgvKYswmb1P8EUxPiv/rVI4zcmM6R/e6xsCyzOoEZV1WtETwenNIv0Crn6i22hJseTqXypp96cumVqW+JsmWbeGFM2n7UmFntEbgdCQptIzAsRLFromybbN9K/3TFmpiCcNcyF2JiVH9EyzkOwZDBRWHsYIoApjZGv82sgTUxI92AmGCL8FE2F//34CDgPTDf4vbEwRLAUSBlGsGcCz3DO4Xl+xa9yzEFdzYlAv3DM2iTQd/gX3wA1O9QjaoXQqtt7NWcnEl36COUgFPU1033U3aT8vZPncn0d0zYxCsp5ung6ddxVAe9Bfk6apjKnLjfPpJTKx6uPesgZNsvRTe+LQPRkVRlqTfuiOnnpP/CNIc/VGa3NET1IP899sAy99c3WWte3SORqXCQAdABgoM64gUE4AEI21TAReLLwBwNvLTBFEt1SINBNDMkM4z3gHOCO4OMr/PEFXgh0ruUn15Zr1M8J9Ot9XX99YGBgYGDgVAwCfWBgYGDgO0ItKBKBk1XuprguBdiuIejQmlMN4ccqgS7ky5rQZBDol+R8OYF+CQneslZwCt6CQN/3bjVhcx52tte9JLokeVY5LkjvKgT6qZmeHjRABHB1XFKEeiXoI32xfGc1gS2uJaF+QaELkjwT9S0yvVWeSwh1RhCfOXjMbl7UmXwFZe03D3Y+aqmXfouEG+7X+qBqPeWetHnlbg0f34JIv5RAF1wyJRpEgpAAQzBkwha6SFwTKJwNjPCeWXGGPpZbWiWlOMAtlIIuESxMLLnMZbnQ5fIgUPnPinxlAJ4ZR57hnQ8EuHRzaWd7jKS0HFdfI+8k1tfS6IRvEugOgUCvw9dzYG8+7hSEav9IoHPtv4iwnsXJPF6Vrn7xC2lLFfaRgXexDqRx3FVhXnhJjms3OcKgRaA3h/AYfoqesiQ+InCDczvu9P4diIJmuPSJOyY8cXi3z/MLwIzb6QAm4CczgeEjWVOuugNhDnjP8Ozxejzi55dfc/vpDROfznlRHVyDQE+ghjs1CHRSQXoEj3y7KAJc5sxkR11pmieSXZ17XhPo9drYEmjn8jNphqfH9SAXNE0TeQ7OJF1dr8WxMgTGt06gx4rrnXFOldsg0L9x6DUxd357kLVQSOd0Ar2eI3U5eiS6CCQIQQM9bAYkDk9iQKlLMiGcaW4DgY7DFDTP4x9ZGa8Y5BzIO+B4BLsZ7I7g4zFonbsjymN7upPwmdhb7+LeW38ODAwMDAych0GgDwwMDAx8R9AfmpowslGgpIRJcpou6fDImhaFKUK9q7r6eKtkZstPRRGt7/nYHgT6WbEvItAvEWhd4wP9mgT6mhCmdOOLnlunfcab+yya6b30diR6dVK9KMDZ3u33JQL0fP+g3gt1w5VpLNpRQ3O2vDrz5ZxIqNf3k7WwyZTkvjLoEdzDg8GY5xkUzVSmEsUD0wN/E7SW2btAqvsqQVTkeodU77uejlp828NXQaQz0NcAOoFAr7G72akXxpqIEmRTxjrdoImp3qz+Uu4VTZLVitSMZVlb6WiysJXHHpK7jrAr2Eagc9tCk0DPva9dJy0N9L3toF50bWmgb5Q9Xe8h2ml/p5Twvfw2G/aGvxgskO5mYr3Y0BDp/j52yciMy4D2JPcxnhDwN/fJyrwBYZ5fQphXX9Tv7cMDwMB7Y6vVgFebTjj+hc7kPcN5h+N8xM8vTwC/tvtZPaYuzLZfAd1+cCqR2+vs9Vyqaqmpga7DCHFekelpzCJFlssvkC1uydxGCBa3agIdu/sKc0WKsQd5XxLoiUgHSsK4zJaiP7fWzt8EgR6/KYFBoP8wqAn0xSTeQUVon0mgB33xVu5V/6qPUCAAdADoEEYTGZNVEEeANwTYcNY5DvFvko2rCP3ce/A8B/J8flVnns/RbLtLeVNMfGG54iLsrfdBoA8MDAwMvA2m7SADAwMDAwPfCkQgBZRkedQsT1oa8iEmRKIQNwcYonBWLjHybmoRPnXOdG3KoPTHXU+4hirMRTTyj4uusPvaDOy1cck7b6V1Sjgtsf7MeIy/W0R6TzZ9Lvamx08A7t+g+XQHi+yN9SDdSGonyScAol7ykMLFMa459DT0rLkk4AtCMbr0i7n2jCovVR26ZpgA4uyi/Y7zjCPmZHJWCPXJlmdB16WxCGmGs9gtpsnCgZOmsXdzItMpkhKGCGwsYMMGKGYOQkTvAceRGqoer3HTEpc2w29AN4+1eOf27Pexkj8WL/srm1t29REufkoCQ8ZcHUbWBsjU+d5z2LVM92xZbVXP3SpfeR8n8U4rgc96hlbZa+IgvoPNtRJ3Bilxi6KLlM5xGe4cMrtTlCJ4mjppuS9kY2hveu7ZnLHwFJLU5Vu9OURv5pB2TZrn02EJoDm33Pf/AAAgAElEQVRYaXiVdh/Sn+Ip5kKBz0kDuqxfA8Idaa3ysKqeYKO2I+CI4WeH1/mIf70+lW2Q4/EE9alJGm9BnF8NezY+9DZOkFq71iS73ggi3y1FI0Qi0+tjWxak+JK05U4/qS0acd1/k4eccSzuyr91jnmV1+c6FuXN0CTO9a8O940/60DErsG6Ef5SrKwg665O1XhCQLA+ATARfFrf5ojeUDTXboCDiebbTSDPARA7wHmwc8B8BM9HYJ7Dn3fxGAcuipNXU9cm0C/xHxgYGBgYuAyDQB8YGBgY+M5Qf0TJGbgcmRnk+0rTI2jMTCEO+0gRCXGuBfANdcQEqvxOITYvYex+1I/HXr3tcfvSdXYtAv2cNnZK21zDBSz3Y8e9JtbXutg52JXeU795XKSh3ts8sxFkJXgzYiTUP6U4NaEe/KmKltNnlWLOkOosGmVa0sqNQJJGErojbFpC0I4RXkGGa2bRYMx5EzKhDgIONnzW9Ah1QwQTNccYiDo9MZy1YOSRfo4EFQGRrDdBQd0gk+nMWUOdQ6HbFGfZ17TsvRaN7hmR9oRRb6x4k3tQEukdInlvAYrNTVccb5vDV5usWYZpBag/iVvE1lbal2w4oIp8XstDB+sNZmtE8ko5qY63VpYWoVBfK43yFjHe0oAloHgfq+P9TQ6T2msrQiTa5cxve1uW9/ga4jn1/DXBrd9PyqIirpvPgn41pmYmbbfqL4t44hDrx8914dQSlfNRzeyChzuG32dFwDvO8Z6DRvrMjwUZc3cb7JrwxCAi3CKMn6LRaOKf1P7sHdhH0vxYkebgTJzXTUgPjlchzvfPRevhTylL3QY7a9GivbbilN8ny3CaQK9S18cYAI2+VxHiOWIVLH7r1GEZYK/aXev9NdovpbXFl157vwW4etXf63P+yPjc5HlOjVTfDFMTL/trkm/oYuTjHJiCLZBwrA3yBizRQLcGMBZkTRzbGeQ4nHkuxLmbM4EelQxIpCUx/5I4v6Quzlx/DgwMDAwMvAEGgT4wMDAw8J1CCy+UECppNhJA+VxAIlZ+Jn6HejCLxo9oout0Y/hKWzLn2SpT7fejfxheg8T9HGn28rkkr2vEf4uwXxhbGuoXcPZXSe/qGuonFmAnv7Yk1IFP1djzsJC/USP9LBiuxzdSQbrFawWq80zeYkIdCJrxy5Mn80hbEg7HOZA/mlDvmXvvUBpJv/MAm0b6QKj7JBTMWuocz44UQt0DXsh0AMyRT1BzQyHzzE8kvEO5RWD5e85skYStJ+I9aW30c3JukbvXJNHPEWZLDVcbLNILoPL+tAJdMWgnQJdQrf22MljxP+k1tQK2iHXlVy9/CnJvahPtReHqOFs4BuIcAA534ddMZb+Q5FxlTrwrv6d2uFZZi8sWUd6KsiQsVx2kLAXHqvM3+ZcISYNdwsqeULHbHvvB3e0D7hFJciJ8jAENCBOZpKnuvYfzDq/zHLTMFwStjKSvSMRqr5l81RrnW6jXdKb/rgGQEFuFo/pekSNPSMyym9z05NODc2rhWwZl3XMktBbnkle/aM0Tun9oQjxmvDgbHaW7BE1T/Lf8biOa42xVTwu/7+C5f2iszXN73S/Jmxvm0FvzS7xJ4z+hONZMzxGW8lnnJv6SiWISD+fCMQ10DObavYvk+dEFQj328XxEB5Jb+HcN8+l76n30rYGBgYGBz4MrSzIGBgYGBga+Ziw1OigKqwgWQT9TNJoYgI9n/4kpMnWWJzfMua9C0zEt90vI1Fa6vfTW8jk3/0vOQJecz8t7uYhZS6f2672TU3K/ZBl1eb31QdV179nfMt8rY8vk+0lZnxB4d9D7M8pxDay8a+q4LwIEodtDEbYiyfXdIqltgrqb9YpHLRdMZdLX6j9qhBUcpgnTieentxAIdSTz75pDYwCe9dmwQRiZyPSCV4ikeIcc4ySMr4mo+mpvqc/jRT+ekRuaZdduPcHonnz2htGkxoRlP6nQ2qlRa3JeDTsS7QZZI9evKFxuRu2lL3Vdk0ac1lLhDPToT3EPP+e1WHDnFdK6ke/dBBDhYA8gEJjDms5zEOgbMuAo3GcAr0+/hPQP9wADxk4AGF7K/ekxd+SS1SyzlyIfDiHgFNeNXjS7yzOSrVlaxAiWLGI2T49RWT8+//0tAAaZQ/Cfo8a2m9cqJRaT80YBMclOBh4ML+XjsCHU2Ck8+8tjfkQzhfIbE/IzFr+f7nAgAwsCxzPMCcBfnj7EZXBnfcEA8IJEqjLCOy4IXrwBaX5iet3p4IR0WBKqxhnqrPFSU48EOsmdmn/jcSIkJt1J+wlRVQxYSlNVSDNS1d3ov3vmwvpMc3BoQ4vkosWJxVnoWNZxK9vPcQb6xecyq/FKylKMWTLeQTsOfOPoW1bSWFvbhFSksZSh1tbmZbzCTfqu/tVjBAjBbFIcg0TjfKJgql3OPDc2fopSHqe9j4T5c/h1M+B8mONcaOOUtM/zfC/k+dtvltla69T9cGBgYGBg4DIMDfSBgYGBgR8I8pFnIBrlouMYRKwOgEM2xMtBMx0iUw0fpMzxPEgmLM271/lpbJG7lzBvP7KQ5tR6++wMZwefoxx7pJbn4Au0t8+tmX5yulEznd+gDEVBBHsE3w036gTgSkNdaXmK6fdSW7xKh/TddtkWSqQp6ZIkJn0T71mIGFA8M11iLrfiCJd+nI844phTJOBmRUu9W24ABwB684tDINQdImlHBIpm3kkslzAiqR7dI89AMt2grNYljxifl0v/+mW0e2aewTZ7bhXgPYRE34nVDCri4STsIZ1rogfI8z2w0DxvJq9fxrkdeUu420j31BdT9d3TsRaJOkR25bjZZxihzoX0a+STiMI95RIcAQKsFf3ooGUr5KH05Zmrw8rtDWAMTCS0bVz72bhPYp4A2Clo2WlyUZqPFO0milBsIPCDKXUEzbwUkGBs0HT3zCGY9wCFMQIIUS0Ic9pLF+shlo/FRLsQ50UbVZs7inqlkmh3DvM0BUJE6uNwB1A4xOLGWLwaG54FHAnfUKe3h3vceg/rGC/HZ/z8+mtM9NB6KaqMDU3zovyxwJ8qMv2bxBrRtdI/CKCCjK1+5egQIcUpGUoO7Z1bZwxzd0NW3tCgy8BY05Av0kjkcJ2sTp8b+bRmtW8dvTbbbfAD3z225vxLsFd2QKE/U+UmJtuJguZ5Is+DyXbYGNp7sPOZKJ+PYfOWmyOx7tOZ5zV5zgWB/iXbfWsNODAwMDAwcDl2yVEGBgYGBga+P0TBlTaXiHegKBgkYTWSLCtMl2KqV4iQvMtZqB4tYO7tRtdoxT0VugyCXnpr+Zyb/5fUQN8SLLTc9Du6ZIf6nve7hlqT5dS8Nfa861b7PDfvz7V8XKmfLY30HUlcRaC7J4mLzk0X9Oq8fsetvrgxvlCvnZTpP1ThNh+9SZjtRCMode5I3yZNPvU/lXFK3i8T6sZa3JrpYi11AQNw8PDM8KmQDPZRQ8dHYWOhoa7M2Kt5hBUxUZLqKr+a5FiEaog2d3Tlj7vI672OvfHjFPKBO7enCE9bfYWw2VdW0ROia6KQ6gZ7GXm+cF4jdxrl6qKug3pMaKRXPJdaA4kWuq1IVYrmYw8TQAa35gBDSOZqkz5bvHfeYbFJIu1CUekafYY64UCBkJ45z/ehP8V75+J9TVRvtAOKgSW8aKLLki6WQwh+eKfWnJw11uPxE/DV+yjGNPWcdlIBOJIakn9sa95nzXWm/Mr0r8BaYLrBH+0dvHM4zjN+ff2ws0+r/pI0j1HeJ8d4/4lVM6nXrpfgnHSo8Zp3psP1WNEYO2qNcAUbNcuX61hxMyAyiUDX6Yd+UW0Q6eSzPMOcq2CtOmjE704eQpxr8lz55Sk2+7Tm129CA52wGG/SDTeuFwHx/Wwk+FGwtSV079pF99/avRU2/lJjXCn85YgOQtE+QQjseNz0X5Dn4czzdKoHAzzP4KOL55xHAt2/JNIcPvTxTJ6HJym1zt/623BtLdSZbwYGBgYGBq6AoYE+MDAwMPCDIp5pXgic5yjYQTIFStwSLLXJpXXsIb8G3hZvUdeXpnlJ/HPJj+8EWxrpAsVbvQn2pM9PVyLR9+AMYa2OskImfCq01TpnqK+mu5pRP652ok6APHgvhugFX1CUgZMA0c8zntT5wDeRqDpVS12nPsVza3UxyYQz1r0J4scZHj6eKxm00yOByEA4MqTUHi+IiCLh/EzJmQMdUz6xilabAmjUe9BCXyNt3wKtum50tiL/Vs2skNpoEVBr+WvN2408igOKq3afGnLNZvbal35rawJj7LjfCqfzrO+FCdt66fLsEl4E8NFbjnM+3GKiKWlkzzwHLe1kHppRmIpmBnDs5AcAt4ENiMS4sVPgkiH9SW9YjCRzZg82ZO69AQlIBKT3pR95AJSVfAuz1xwI9N5r0W7J7IQQlLGsNlpUEM13M+dnM5pUycUsx0YbtOdfjsDTC/6GD8s4Wx18tTmpdvtp7UG/NM5dHLSIrVaaawTZGhpnH6e9Crzc/7mYY5e3eWzqveOG++LVcZVX451+h0vOPtbI84HvG3vn0zNBKMfjbvLlBpt0beKfNSBrQJZABxvcCGEscD5s6pyPwHEO88nswvzkg30lmY+1xnkmzPW1yv6zdoPR5wYGBgYG3haffWobGBgYGBj4uiAfmwZBOB7NjYr5RDLqvF21e5yRzriF+ojMqO+3tGwumY65kX5PsLdX4HcKLtVAP1f/PHzOr6VbXtdhpd6+FEIbOw9rQrqFlBztZz+3zX0JAeEJLeSqZ6WfCmperqMi1rvx9hBd5/b7jTRocdG8f6jCdR/ldI+TgxYlIB2ctHMVRoWqnyVNFQZ39gAYwkSmoD+vhUDtMo7+COYgwGQvxAeUEl19L64tdy79OzxL0lGv/D923FcfouvRYwtXEt+V7zkk3RpzeSq26qj2oMaf9mvFbxA1C03fXn57ylTlTcCq6Xs4Vfwpx0nrI5/+bh7eQbSxmRkODJ/OQWeAXSSZo8B+ccZrnC9FczwR1rEXJqZaNMk3eqY8upCB5pDLof3r37Qm9OpelVPyXRCVkoZKkLEMU1lAWjQFMyFp3s9zSWy2CFAhYab7oF348hy0CU8auBrtJJW9k1CTND91bXwKzknHYKkNvTOdhQa6oNWPl3NqNNCeaKkyTnCn+C0CQrwP/swczyJuJ18VNP76fKu1WntxF9ygep+kA62P583a/ZY10Bd9rHfm+Z4128DXj96XZuu7v3UNLGQIC78aee6juBkqTx16TJG/OI6luSneTyaS5xbGGpgpWn2ROc+FTWvezeDX10CeO5fNuNMxlzZ1ew9ejNvVWGQoaaxfBnnWxWC0cT0ojoGBgYGB62JooA8MDAwM/ODQH1txp7UIYsmCmcAwyGcVyi8FN5KPWh/j1yR2IXHF+Kjr4S0FSmukn35HnxtrpOYebBAfm5sLvtO2+KXOSm/lsyuPeHa6joeVuHtf2+7n2yHkbckCGx5ZQz2414R6uutmuefhhJzqlUl7Z8Ff8TrqG6IYpj5FvdFPnMeTe0ny/ymec3yulnoLBGACYTJxU5eql5kZR8xgH0zBB6EmQ1mnTqVuERcMKMsq1bNxfv7EAcYw78Uh/iw00t96OFm8imtl2BoLe+T1BUk2oQXwLaH4nrbE7Xe5WYBT6m9FU1+WRQCShrRX6YfGDBibyPNXL2eqclxrGRRH4hSmoDWEAIxhWUyUi39en62Cq4u0DKxMuPdk8dxy1P5chev0yLocaWzTGddxOJfT57Ert7l4k+oXaqPBh07+W9gR8NNamLpDfC1rsGtga50lv413T/nkYHFSHxUAEZhj/cR+wjHeYu9nd73B2+11DxZEmPTBeNtZE6D2Xg31LWAvkTfwfWPvfLv7Q2AfFqKEOH8m8+1hDqToxoaC6fZo7YjZgaJJdvYe7Ob454DjMcwV3sfjRIQkLyYYaM3zxXPWy5c37xKtDEY/HBgYGBi4Pr71L5aBgYGBgYErQQu4FFFOFlnD2kZtkOBGKhzzDGa1Uzuh/tCsPzp1uHOhP3Rbz4Md7lhx38KlGujm7JzLWtvzvPqesdz0cA6+RL3teedbRMIl2vdfSnP/AkHUVc5Mv0Lks9NvtdN77HvnhKbGV7NQrTSoEa4Tveeobh/W0tJRTqqrfn7bsSiFpypjUh6kY1SbA/T9wVpYE7R2LyPVYz/fsbFgBnDkY9BUF0KdSxPAXBB74aLgCCtCL7jla5USWpcA8FEce+Rjcw5sCWRXcE3i76SwZ5DShfxcj5tUhjkZ50TaGcdUvzaarhfJAUcz6tMdcschWLKwZOCZ01nmRBxpc4ejj2eNy9nfIGQtXs7EuOabCxk9I2mX64olKZ9Rfsj+Jh7Xw5qAb9SJn1WZKj+dnkazfVcFTxsMRHchPsOTSoABvIu7DeZjJ+0ODcnIZHl388EenBDxk67jel11SvqycfXC8pyNSzTQZcNGC60NMWUeBhxJdNFAZ9Uf6m8SUu0b6Gu/186MYndVap95TdB7gjwdtAbzxjujMkx9dIjk4wHwN6uB3kwUpxHpVyRUBz4Dag30+l333n1rjKRFqP63KyAa6HkVVqdlIoEeNvoTGZDJBLqbGGxjOuEn9EvvAO/DuedCoLsZ5Csz7aS+kdMiUb4/G3VCFMUiFEh4/1Zj+J56HxgYGBgYuB6GBvrAwMDAwA+ATfEQyo8xEX7WZ6QTOJoyFTOKlIRaUTOkKUTUbmcK6gYGVnGOQO4SId43uAfzEftI9Ip7uTp2cDJvk+9Tx+N+Rzla73qFAKSGoxofP4nDIs/s8ICGrJual+1CtMinLv/FhYyQiqGakTXUwz1FEaOmN3R2x3nGEbOw8SAA09VI9TYmABMdsrVtG8o0g3F0YXMXy3zGiGQ6gZgXZ8TLbJjpFU5XYjo6cfHVY7yXmBzJ9FZbWKD3Yq44xhT9+ox06woClvufstp+2ThMHUFtftJLj2IN0SvmmXXS24TRWqoYdc8A3DH8TlMUjAMwE27sDcpjD4JQ38hDEYHhceQZzA7snSLzOGckxDiLYP6AoGU9IZD1ql7Tr1HPJKR6JdpI55vXBCADcMsBZkFKUodw4+bl0jH+yiPb47qcn4H8LK05VtJTv3WQVU3wLXxjc/o3Do5tkxeNokW+120xbOo9N2f5oZV5iAC1AWuj4VbJUOd6YODbxmfY5FGlw7V5IT0+RKLckIExBkQWMHGDPwHe+ECCc6TEnZDn0VS794lMJ+9h4JHpesbMjGRZppjX6vlJ1tcq7GefTsb8NTAwMDDwdvgGpZ8DAwMDAwN7QdWvRkso1IovWsITgrBqQjgb3cbz0cOub2YP51/RFzJx429vObYgQudaEt7b1b5XnLU33CWa1KeUZy2Nvf61ptQ1zt88t/zX0kC/xrs+N+9z41+KSyweVNirmS7YVaVvVe9beTXeOdVh1uI30qD7tvtqGnu9Gx7U9384Mdt2EOp5rKRRxglVSgt/UnVNdXiVvYSfbLBqMtkJRNQokvS160JSdWA4OHgXyMSCYC+I9uQcr3nZGkVA28ytvF+Yf0/hFKlcz5+JAOfTqmSViK/c6xdgteNG2BZWw7gqyYoklpsN/nbpXsXR3Vb4NhM1to0msAH411I2Lg3l9hYgE44pAMEaCwLw6ucQxM0xX4+l9nY83oaPsQASFhBzs6Cb4EZGxavbggvlZiAdmSPlFnd9rjMAvL6E35vbkIafUTerXEZFVFpVJ0DmtIuIVNbrzCpcJDtvqwaQCG9NkqK6rkl9ZML8w96G/7nFO3vn41a5Whron6v8ssavsTf/vRroaIRjUHzu9dw0ia4tLBBCw6vTjx2X1H09poCRrWgBXQ389NMj0dV9sUEnHQSSS6a8mVaeeVfVLwn73ThZA70O3+urvesWxpaCrxP990Zd/6ofNPsKgU/6TqPKW88XyjoeWYAIRBbGWBhrg2zCUNgYQ8CRjnCyOU3ONZ/nTJwzA55BcJE8z8/BYMzNs87X1kT1Ou4abX1tEXRKvxsYGBgYGDgfg0AfGBgYGBhYhSbRw5+Q5iKAIiJ4WHjYLBAG4ndkFCoryqL4pWie168J4trlyqGFtqil5mvPtC+PfW512fcQtysC45NxWr2V+V5jGfSlCHT5vca7PjXv74hAF1yVSP+KCPQiTCONmnRapCkQwd19w2+rXHuDdOLsCPewkeV2afYT60uz7kgkRPE/AdJXcrhy9K7vRVOdANAbaKrvgYyMR3gcjy+BRBdSPQbQZLr6id7c5ymoHrNKAejHRDDGv5a5bVb3q8NJS8jaKlPHrR5mulxZ5XHyK5Pn8IVTO2iDYK39JJkkc48Xk5g6jwSv5MvHospTmrHLH25/iqZfDYgIHLVmX+eXKh3Gkm3mHCahMmUv9SfEvibN0zUAE4l2X5k4XwxfByQz89qzyz+rhDg+ty6urTTb0xnkMdzMOSvd5G6onKLdyrwtRDnFcN+FJvkWuQyESjyXQL/G2vFcLW7BwgxFI8w6Mbf+FJpA1+n1iPk6rg6vcwubgNsox00u3Fvj8qm4Qvs8m0A/1eOc74RBoH99aNV5/Z7W+ula+9hyo6oP6TLlvk2tfm4AspynVzbhTwh0YwE7gQwFAt2G+VTMsMO9gucjmD28d2DnAY6a5yzHAwm9H93SsT2tDZFbuNbcc+l35sDAwMDAwHUxCPSBgYGBgYFNZBKdgCh0CpLlpGdBN/B0Fz5oUxyKGkccPlgTeT7HPxcJdA+wDX8LLKfppO2o3PybTOctUk1/6Evp6o/+LeJdh78WiX0OrpXvJQT6pYK0LyGI+04J9C1sEexvTqi/EYHejEONZFqMIrDPBHxdjlO9aUeYtufDiVVfa5tvh1eBi2qTGwdt8F2flU5FIpUGuiLWJxvmBmssQAjmOj8jsS6t5hUejn0QxjqH6XCD48szzM0N3Mtrpa2+0s97RY887EcZY7Tp0pYp4bWhRDQiJyFo5R3Fz18y4axpQiBASRVMmzDffIa6vbTmzU5avbO4Cyf13MX6AiAjR8pEUpvD2eLGTGBmTGQKqm0yeo2RxQAcyzKzhwfDxvRmqX+nzh1fcA6cCflo6pWEYDbRBDtNgXQmdZY6OHeGeCZ6KD+F52QX46s64IqcF0K9qCfE9ZZV4WNfNJOq1+IhageE9Zp6xjq8TIM6uib0Wdd81Wbl1jPw8foWJj4v8iqwjfX1IBcVeX7+56FHoPd2ZrTit+bWtXVtSaBtj+J1HrL21nm01t+9tYD4yYbfXtkazyD9loVA/4JixIsJ9DqB3vN84eccuBJI9bZ6wN56v5e//9KKg97QQqlsYnZdgjECeS4EuhcC3ZtAnNMUfqdAoJM1cZ6TTS4e9vgKHF/BnuHZwSfN8/gNF4tA5EHwcR2Bas67+m6VnXHdZqiBgYGBgYHPhXEG+sDAwMDAwIkI8mLOH7hESghYCa3SpVECJyGiGMGWYY+YkgTaH6G86jvw9ePSNze0WD4rHuNvj0jfK3P/VrCHrwcAPHXCt4j1OlCVWNe7Jk17hPqy0J+qQ7q3CHWO2jgLQXsnnqIgqzgyQci4HwhDkUtSzklRIiWhImP8cQ5E4JHmMoQBJrJvTqxLircwgXRRU9b9bTSsf3co4rDSXwo6puHOlFsMYtgcBwDeFymEf44Zj/A4egcn53e6tTGUQsIzhy9e0rNlTarXUVvujU0lZPp+yYdgYzjHWTU8KYGrNlu0JY2aaE9a/z4WtzTFbkNjgIkvSR8PEGTjoT06dmErlJzDHE2xezKKJJN0Z13IqnytciKYTAdFQtvEXwDW5udgJAL9/2fvXZdcx5EtzeWgIjOranq6e+b9n3Csbea0nZOVuUOEzw+4g04QvOgWkiLWty22JBIEARC8Ybk7al4yzvPTuG8JZWg80WeMwPDbvJDddGt9yET8eh5jXTBv866nvC3Meb7+Ju/y78izbpqP2O/RY3uJQKU7afbWHy1HXNZ26PbzVmH5uzwokffkmvP0HsQxgul7/2ySIGa70p3K1CtiBjCSplzUxiGyQs0AUfNY7No0WyShvmGiP3tN+/tuLzSEEELIbVBAJ4QQQg4RxW9djGfXcOwAJs/i1HilpZJOo1juorun6b2sz5frTmpCXpt79NwnDu78ubLchfWuCLwjHL8TNwnrrah+L0E9JFiUYy5UdLUrmc+vPk9Sfk1TvF4gqAMQFyfhXrptagm9eUdUV0BDCHQZgU+c8SmTp60AQBKcJCGlMsd6sr974XfD1uzL74D/+9//hRgX5fd//IFRM/6bfKCHp8uzupcQ8gDw//z5X5bogvMoJj1b6QSAKP7n7/8AIMi/nZAg0A8tbRQGswHgf41/AwJ8SDFQ+Pz8FXbrIjzwz+F3AMA/bA7vKDMJgL/sgcEFdP88o4RLrUZ4muf1rJ7dRXD+GIpH9pAGxHnof+Xgma2Kz/Pf9fvs8+P30DYKnH8VkVgGlIg4J8zEsfpokgAEMboKwyNqIi1tO2v3ZCu879U5y+0ZyRvI52IvHXza3iMEnGwO8/rg1TvunWvCVphp/ZzKAF2m7zpFN/vPzXb198o+f4xwfsn9+Zbr0i3C8b3oCc1H011S/oXVRme9NJ9Ouw87v3tRPXr79GcYjf37p/Rl8n24tM/e3sf7kXik+Qz703adlDED8TEEmYvnbhynWp41c4ZirAJ6ziMkZ2SLHDSJ50Ekb0T0Xi0IIYSQnw4FdEIIIWSXIJzXgalgEQ6BYkT1rrJ1IgqBvfgK7MX4BFWxF1mgiuqLAcd2sG1ddOSrLfl67jHo/c167p/oe6f/FEeOvcMpQLU+mKX9Z1i/o87v6qeNgLcQu1cGMxX4L/u15qEeRe75gu0DuzB9WpRPq8ZYxfcVT3XAhHyZhPfabFHHHLWIz0FYdz5iOHgAycTLIwJ7e+dru/aYRww1H3fZFfwBm68z5IFOHjMvaRRzgHmp+teN/5U+PekAACAASURBVOtf/8Jf6mFOFX//+9+N8RpQvZ3V81b8b834PyXhPzRjgOB/yDArx8dQBOWEVAaXUzAZUC2exXnEP07/gELxb81WhkkoTyL4zKNpTv2QpDoTYts+DLia+5mLEcBZT9ZOltYF9FYw72loCx1PbFDdDfzEQsB6AlkK43UMfphnqM2XalMYxbpQz8jCyx7Ts9OiEi0dYU/HZTss2rUtQ/vDDBhmwroeizj+Y8RyUjh6vHvpjj4k7Anu7fqt9O05uPF777wh5G245Ty9lfh00dtfeHaSNr19r+L5AJGE5ElVy/zmOKN4oY+2bDTv8zi/eTzX4zn+Dd/LCCGEkDvBuyQhhBByCOn8RU6A/IbJ6zxBZIAglfCqUqQAH4tVPUNzCWxrI+CoHuxxELh+7o3YPuplv/3tHoLRU69tj94AQbu+lUp+IluDKV+x/bXcesweccxfUJ3emzMdwKzcu1XYEZfr963zb0VA7p7rvXS3zj0f9r9a338eSLOyYrcNW0H9eL7/6q+J0vbKCgsDvV+q5a9WP2wWLOTlOugactoTIJtFH8OpLhrSsCmw+5l8tvqN5nU+5gxgrAYBp3RCuRtaXujouPUz/povaduxrf96K0/5xLyiQUD7OaWfYgD8ZVv/ked7+l+f/wk3xIAAGE4QCP4YPuqe4lThviyZoYR7fv1yz/FaxBWRefhAadeP2cu8QpFVoee/y0ILlT4Mc8//cWxCn7fCtwIz8TnZ72Qt44YE3if+tPx+L/1TZnMrK/BXsz+f1mA+pTs0hXmZvcFmBgWxfE3Y97355GdEo4rW6MDF/9ATLrld/deR+9sL3q+6HKn49BS4ZO9+tDzDL+MezxG9e9pRQdvTHOl7/X4xv4YdEddKOl3k18tn7dO/N+fpuqVJs/we7X7jOXDt5rXobQZr5+1Pfkf5TghkcRz3+vnt6OxastdpXSQPnyJlnnMkc0AvnudJUrUvEyhUXSg/I+to04YEwXxPQK/f2/Verutqfz02LkIIIYS8CPRAJ4QQQg7TvmjGl8oRZZ5OD9+uxeLbrMUF5QVYRCAiyPkEJJ+TTMv2C6ElvshGyYGDOYS8PHtzprccPa3fRXvZY9Ue4M+VNP8MdV8xBGgXL9pKZx9LQX093/9qFv2r2WIxOBtDUe8cM137NVsRxESpd5lZHXxObTdzUs+jJmnvW0t+nT9Dis9FUX47TWLskBKGlKoMk2SAQjEkgcLDmWsJk17zmXvUn5Fn6wHF3zriL2T8PZ7x3y0MPVAmBRAAf6DMIX5aMehY61ou8P9lYfV97m8XsXw/Hso9awZE8C9Jszw9OH2VzkYUUXgog9sfMtR7PQCcx7LnpIJpZnhgkBNEgL/zOcw9GivS/M42oJzMuzp94J8A/hMuntsAefVod0/45tlhL+R4K1hXj3Pvf1EUiIPtjUjgg/VpvhjJxIA8BqE/5PWXedS3Ef8X7YN9FoK41SH3NtZjebbQ2/wHc9TI4Lgxwv5Nfi+v9jrfu+63AlXvIsB+Tb4LR/vyvfv81rkcTfUa0byq4wmQUzFeM2P86nUOABhL2HYdgTyWTx2BNly7xntbfB5YfRDfWHcJvIYQQgj5HtzrzkgIIYT8EOIA8WxEGDCRfFpXwtZKKt7oSQbA/PAy1IzBfT71T0Ay5l5Q/vLbzlnWvvQ+6lbevvhPdacH+r24RQ1tVYmv4h6GHI/yLHgDdfmooL5ga6ArfveBuF6aFYG4e6730l3qgX6nc3tRnH+uLN/Z8Ej6zTTLlWsh3+MA50IYOdxN5+233Gy9fvXrZmh2mX87Wq5Gm4niOAT4vXo8l99tuPhSrIQxyMkK4FNH/Gcecc7WZq1XcL31li+/D79BAPy3VGzCR7uu/JlzucfG+ecBnFLCH56JAv/frz/n+bf1s3L/firzf7sXfrb0SdKiyRTTKe5C+58a6qmKz/HT2sa9rcu9/7+f/gAA/Mevv6bMgPljRbuzXrpaD6+rzvtB3O/st92Pq5daEJxjfp92fE7mQu5CeHgiAFCEcQn1jAXXcA8wD3X9aCpZRe6NIYsokCcA49x44JDWeATFVP9VwfzS693aCXfkWv9ILqlHc8xn9O4t89Qa/r+OW7Zty9fmdaS9j+w/TtM0z3++hyCk3bTX9h2l987S20f7XvFV7xZfSa8tgPX6/vR3lO/D0gO9Zevd5ro+O+Uk9X+tz5nh/twVzwWQD2D4rf6ui93w3oXzcYTqGVCF5hFlOhZtHv3bMYS1/t77vLb2z7q2E0IIIfeFHuiEEELIxWy9WNZJPy2JQnUApPUBESClGslU68tueNutL7zufe6DyFFQJ7dx60Dercfg2u1fQSi+pQy3bPvm/f7PnfVXC+wNR5vpFbrSHou6/LnU1GRrAnr/uSeoa7NJK3gvG7VoafOM/iVrzW++1719rC7SzreVJTr/Wva1YxQgIX2nLl3izUzjMGn58Vf2UOSNoUzwyvZ9D4PP510E+H+lhP+w3P57GqAA/rfP8V23S4BaCHRr03KnLHn/QxL+gkLNU/ofkvA3FP+w+7JCSzmGodx381juvaOX1/L5KHL7qBkKxb/PvwAF/vj4HVDFr/xZyq1mPGAe4uNpHrq9DN0rxs+/Metjgwn7w+/4F4D/yJ9l36139NjvTQvW7JJ+a1y5FwYDdkzccGHM1qCNgO4GEKMd8Y/GYqPmG5bPBu59eZ6XIYW0ns9sXvim3D3vcdMTwk6X64/Spv3zze85L8873ISupRWlL9nmHs+nRw0E9gS1e/OsY962CSHAsp/PHi7vsgeX0EUaKd8NzKo6Hv6GVAz5pDxFSD1Pi3iu+QzNJp5nC93eG6MQbe7Fa+e1P01tGK19CbznEkIIeS2efWckhBBCvgmC4oEeX7TNK10SJJ0gaYBggOAERYJWD2Ixy/FpTk/1UKwa50lH+B6FdOAxt/N20GDyjPk+HujHvH36PLvsbX97F+7hlfCuj693NByoevHauRXXzdxQOmXqnevtV8FxD/QvPj5rzdoV1Xc2PHSIdkTp2coR/5J+e6x7bTrW159xmkcPqe66Dqr4z+kH5gO4e5Vo1P+23rPNZfvSbfv6+PgdAPB/2Jyhf5oQ/tf5F2bzX1v6f34UD/A/RPAXgDGXe/KoGaMqfjNB/1f+LPrxcIKq4uz5pTLY/X+n32pRMhT/oSOyZgw2UD7+/e9utVfbY1G/JtmHCeTj2DyCDCERTCCXSQh3/v05//2H5ffr17wY//hjnu7XX3YcBtRnE22NREI/qI8xzXQ1vjpn7Hf21shlufoieukpmF/A9BS4ZO0knZZtt/Szj8N+X9xOESds6D23TNNHLPe3/Wx6vGW2jsGegN4R4u7CJc8Sj6DXJlsGBM/uh+Q2tq5R0/r1/n79e2Lcs/j7vgvlMf8oniNZyHYB0glIv0NEIfUea1PG5TPyOJpwbgJ6rx718b9vzNPGwfA+r7ti+5Ha89whhBDyPaAHOiGEEHIX2hdNQQ3dqwmaXQhRc4IcQroY+n161VbkxqurtQrfEsUIId+a1pP9Xp7rLfdyhnska85C2nH3n4nqnYHSNRuDdoezffYGIKfvvYjPW17q0y417Otasb/Pct9NI2o/VZv0v1YTRPEcWHg9r2UYhdc9cbnxZm/Xf45FqP5/e1mIAKdktmgjMHwgaxky/sty+Pv8y7Ir9fm7GraV359exmwGbaMCOeN/nQT/Iw1INjTtc5N7iPlZ+PJrWNtcx402A2oj5RjeXO3xIxosuOBuP/1x5fOvIpafTXCvxzQM3M+6fmcAvfarFbGuW/79frjJWjoK5eRhtGLVkb629my/dqF3g5OtG4Hv+5mCOSGvyto58KA99QwBIXYPTlh4oAuQJJvnebZ7/IicP6HZDO/z2e7pvQeDQw+03TRltGFt+okj8DpCCCHk+0APdEIIIeRu+ABVvLWm8iepDDzLAJETICeUUWkXzwVQQQ3sphmqGaouwkdP9OiFjvD9EV4ivfpNFuvaLO9v1y6jB/q0/bW4B88zvXiu5R7t9hMfX9fqPHM5xfb5tzaYJsA/j5zDa/3tguPxNG/q3vIrPNQPrJp7qDfethuZLOdTn67t+812TGDXzrfI6vTOF7PiBbWX/qL9y06+ncy28l/LK3b72fYdIb8uD4PZ7RzkW1za/rr40vyWSehu9bNYvtX8W+MG3bicROOPtXJ5nmsmHE0hr+mP30Ywb8v7ilZMvWPuXOuB/irH6VoP9Kl/l//baFHTuTltf5knujb5HCvzkf7Ta/trRbitctADnXwVa9eo1mBk4x56U3+VcKVovM19vnOkEhmmnQMdggEJ5RpSxgRUz0U8z5/mfT527uHhJr24Xy9bonc2l2vM1vPrHjxvCCGEfB/ogU4IIYTciclaOzKivPj6C7BODljiXxIEJ4gMqAPGQRdQjZ7odUNf+6DaEEJ+FC4u/fOWgfEDtJewr2Bt/L/noR5d+VdCry881Tc91MMA/KanOvBf7RztluZfogeu9BeKxb7P/SQH2RFeDt2qWhF9p6OIXn4LXBWLf3WOqYViH38ty/LMMeW9PGZFvcDbfbdsHSOHPduQvTwfYYP2dkI5+T4cOTn2DCNaYbwnlLfpj4rje97qR5YR8u6sieW9dPd8YFVAUxXHC25kn4IN7GSQr/kXoBlqAjr0HP4yyjhDEOgrW9eLiJvu81wnhBBC1qCATgghhMw4OurbQ/tbi3mjaW8QbLD1A8St1EVhk6SFP5QX7pnAwpfdnwuPPemxN9B+gDXx6Z93vPZcu/mdxzH7/Ll+G6ge682KnvDd1cI7wsksXW9Qtx8CHuh5rB/neuF85+CtekRfmM+R9Bdl8euK3f1qF3S4g7B+l8v5pcYKK4nvdWu5SYu7sExPE8x5H74Pt0QBeiW2Ov3auqMi+ZF9S5PnVrpbW/0ZlnCE3IOjzyaPuL7IlHX0RE9i4rkEcV1snnML1Q4Ty108r97hecq3F4Vq9tzZN9IkhBBCyDYU0AkhhJA7Em3AFVFXCV6Ia96QJqGrvTgvk7Uvvr4Xcj1rIUaPwva/Drb52/GnXcMe7aH+CmyJ65E1Qb0uatpq01M9ptv2VHcmYf3KY7JpL3brefZIJdZZEcW3tKjV+++1RTlQz6/wOn/Yjp+wizZPepSTl+dIH93zSN8PGb+d7hJP9CP7I+S7cfRect97jnTf6X2lLIXz+gyYS6h2n8ZNRwAmnuvYKe9xA5r5dvNtfDSCEEIIIQUK6IQQQsiMW14Y4wtyEMsX76oK4FyswiUDOgCSoNIkFIWIWhThBIVCVcqLdA3n7qHh44u076NnRd94tV+JLvLcYmv9reEk17Y/Wr9b2mLNS+GSfb+CK+5Xc2vZaTiyzyMGyC2vW8WsvWnHu2wYHwEHq3mHtljsvxcCHh1hvS1/KMump7pifi1vPdZXC7bDTnvOuLTdvkJ4/7WT7JL6XZBuc/tjRg8PLcetXOshfnuGmIdZeHZD7PFsj/fXu/+vt0jv+WhNxHm1475fHt0tu2A5jcJUd+0s2y5DfP6517PQNefzrft+9rFu979l3HDtMz55HXRVEN6Qtuu28Ryep+6FTG/7h3uFy7S6zn3uHuluTKnz03s8A/mXPRPm8LdifLnor0feo33Z2jX52ecqIYQQ8nwooBNCCCF3QpHWVnSYvwArMhSfgCSIJIgIUgIECZIEQIKqlFfnrEBWs0j3l9vzlCeyGa8rtL50+8txwvQyP2BdgL+ELRF6bx1W1h996QfQbfftAS6x9bcPC+zlEF0827bgwAT5anrnRS+yxQMHiF1zvlhIv8246SGs2RHN5lYPieSfzXK/BzRihMQvB0OEL7zW9zY4ku4OovBhdPPnROt1fmWZ7l6Vgxnea78POxSP6EcN3TkJKEr9DNYMO9tlX1mWR7P1rHspUV175L16S1C+lWcbQbYGDT+FW/vKO7+v+HtwyxEjbH+PbpcJFufhTBi3d20PRVcvAwIkmXJThWgu9vQ6Cf0KAPnvIqDXPrv20BlpjC6vCLEzleCdjzkhhBByPyigE0IIIXflkgGK+GJqArYmE+IF0IRpPnQXvgERgSYAeSh5aMYkIttrb13mn1FAb8v5iEG4nih3JN0aax43a2Xfzvc+QwK+7y3Po5iuLVdr8X/N/gnZ4ugg2qOvBx1WnLe77Intjxjju4fjdfQwAgD9d0isjae6bujVOx7ra/vvDYDKWuJ7N+JOA2r75UiD/8LF5Xz2+O+t+39K+dcEzSOeeg0XieWPruyzO8O9uOSceTQ9r8W13/s5fCXrpfvia+FL5rzHbc+v1275eKPXx/O8uj9/77dwW8nXDUKmq+maoUuvr7fiuWAZgr39HpLHvKtoruXd3X8rUOY6v1T8vxfPP+aEEELIq0ABnRBCCHkJ3LpdAR2hSNA8QCSbVzoszJxAkExTtzdxFSDHF2wXzBXr3tlxgPxdXpJ7YvUXiX0Xc9SAgBDyktxq3+J59KiX3z9Dwi1P9bWfTQG75W2um6uX+yu8Ag/roLfcY/4+luy7OK++3O14pUALYfzlCk4IIYTcyNb7XBTJMRfOYd7o0ntPLV7tVdzXbIbv5u2uan8jeG8lhBBCng8FdEIIIeQliGHWUbzPNUMlAZIAyVAMECmCeEIqXugmoKsO5qnu86M59uJd3909nNy7CbqXerAfqd8VgtGh/bTtu+epfq/9ErJGz/Dknvmtcad+uuatftV86hewVc1bqnZUWC8xPDvp2jnWd/KNK2de8b1+ccF1auFFfgsvKpQ/er8vOTYeCnVobvKXrETg1ct3Ld+1Xs+C7fk1vHs7P7v8z/Aifydj6xZtPvvtF+dIl+47HGYpluvbP88pmYiu099MLHfBfMRsajZV3Da9GiGEEELuBQV0Qggh5CWIArqgvDQLoAOggwnpAKDFG10EyV/KBch6gma3YHeL9eiJLnPhZDYO8m6DIkfCTe8NMMVQfdfWf2+7o2W4hp8uoD+z/u92vnxj/sTjRfQ17uGh3svzyD5qKPgW94L6Y2WdhQVdDCjvFWR9V9v8NU/8jFPn2afrs/e/Rje0euRowV+1goQQQuY86n3n1bml/IJ+NLe4vg3ZPm2XLIqce5tP85yPEFWojpN4Xj3O957RCCGEEPKVUEAnhBBC7sYtL7oxBHs7D5uakA5oOgEQSA0JZx7pkoAkyDkVQ3YARUjPB4r2DmJkb2663rJ23V5+t+Dtv+fdu1bORyhwP4F36K+vzqUe6S9c79251K/sL0eE+a+YlvIiL3hLvCqwt15kncwXefauuTvl6u53cyeXZ/EKvGKZnF2BfI3edl/lef6uHu6EEEJel0ueOeZpdfMdMxint3OdAxAoBNk82s3I3Q3dNQfx3L3Pgwf61eWfl54QQgght0MBnRBCCLkbt4bHa793XqB1LEHfVJAEEFUIBgvzLkgYkfOpRH5r81udl/ZWxedR4aBXhJvZsi0RfS2vS9Zt4eI5RXBCHs8Xn2fXerff67J6yb6OUqOQbGz4k8Zb36WuV4vhj+QVy0QIIYS0xOeeS98X1wy3o3hePkXaLS1Me/2u0Bq23f9MQF9MwbZWnkv5qVEHCCGEkPtBAZ0QQgh5Fbq6xvTyXSzWS0LNZ2RJNid6RhIxId209DyYiC4hj9aq3V76tYjA17yiP/71esube8sr/Wh+t5DR90B3joR4v7YFKdqTe7I2sHjrGX7vK8QTRPQ19sT1q8TtB6NxJ9H458Jw3e0o8eUFuWy3lR903XuqaH40vHtvsB+433HiAD65hEv7C/vXu3H7nef2Y37d29KzuU9ff28/6C1h/EjalXfN4G3uP8SnyrF37BK2PZe/6nmugJ6D5/na/ZQQQgghz4YCOiGEEPIKrE7J7eK3TJ96BjRBJZXQcjIA6YTkooYIUgIUp/Ci7tuP/X2/xujGCu2gxZbn+VcObPmceFshkW+dJ530YRh38mTuPf96Y9t0P9aMIm648PMUuI2X9Cg/yt49jvc0QsgWr2wc9Mo8+9r6rm3nwvat86Av3MttkQajimYfqshmwK5aBHQgep5HA/cm71h8QgghhDwVCuiEEELI3XjkW657j4/Td3Vr9QzNCVkGlBByZT70BEA1QVWgOpb3dC3ppzweWOTDrE0k3BPO4/drRfTOIMg1aK/cGv6k+b1TDnIQiueP49Xr95Xx0Q9wi4f6FmuzeEQuaoJ2cHfNE31vp5ek2SrHtdy5fy603yvL92WC+KP3c9TzvPm8NJDBzeUgBGA/IYQcZ//+vhldQJpnJekYT6t7ok/L1ec7hwbBPK+L57iXfv5qEaQIIYSQ94UCOiGEEHJXrn/h7I9BS2eNz5VmyzWXSHAYgJSQZEDCCZISBAnIiqyCrBmaz5ZNxxP9afQ82FbC57nAUUMRJ0ye4NuDI9KII7cPDfSEp/bPPf/vs0dCfi6XTNUQedJ5d28P9ZarquXX1nh9ir89zQ/hT16Tj9PxPP9BXYUQ8jrccum5sx/yl+z3Ffiudd8SzUXEZ04zWk9xNSf0uWhe39o1Q/UzGLz33hPb8kxa/X3eUwkhhBByKxTQCSGEkFdA4yu30/Owbj2bgUmgzQAGZFue9FRSmnAskorIXg3e+5bvX0vr0bY171zve0K/nZbZdGt6kwAggKZg3uDeBJF7hA4khMx5E7F3y0O9h+DOovvWkPczrku2v0vb5ct41X717PvHiuf5Yj1wrO3W6vPsepL3gP2EkK/lnc+5C6OSRaqdtHaSLj3QxUK9qf1W9anT8sp2sQxzI1GfR/2dW54QQgj5LlBAJ4QQQl4CF4P9+xa9Qewzykv6CVBFFoGqIIlAxLyvFZA0NNr5K3ii7w0PdAYWpCzTS3wieuF5ZWX5EVQhWZpwfckGTGYJQRGdEHKIR3uuL7yuO2FIb+bVBGhyPUc9z9uILIQQQl6Ln/ceIuH/7XTbRtjT59SGUudGcxN4hSKHJBauvfuu3Xm3XZShZ5hNCCGEkK+GAjohhBDyEsRQ5M6G0CHt+mxCsIVozwIVe+3WoYRy95fzlKYtVUpouYXo+yrI/E+bUO5PRWbFEDUJQQTanR/dudRbjxDyo3AP7dXLyKMGwWnoU2AbFC6dE52QR8J+9n141rF89z70rHeGH9xuslZ3tRe/yetcMP0uKVxA701V1v6WYIYmKwHeCSGEEPIMKKATQgghL0GcizYu67w+izaG62E+WwWg5yo0q4g5t7tde5kXXZJvlYth/EsK6G3I9rhsy1Pg2Fzotw5MVOd1m49dralVxebN82NCUYoQ8kymiSb20+ylIz+Do32AfYUQcgnPvGa8+/XqmUa3N7bd0yZQl+bXAW90aZ6HFnq3vXcHD/QpdHs24RxhXctWxJb4nvuK7+aEEELIz4MjuoQQQshLEEO4b4XYDckX87W6l7bPCz6UPxlK3pIAGTr6coJY6HeFlhDk6iHo3HK+nb8tvvzPw84de7DoiTVRGE+YDyLE9klh84/y1yb1gQ1Vq8u8VCKlxHkIwlJ3nEOCUi7hE/D2dc/zso/R9jeWP3hbuheCt6e3Xy9c39bvpmyboterPuI902uxNci4lGf6hPTarVePvUG5tXWXpruEtTZr97vFLQPHtxyzWyNGbPWZR4RPv4S9cvUGby8p5wVTbJAXIF5jjvTZ9vfe8X7VexJ5LX5CP2nPsbVnk7XzKWHpC3PkfjKd47L7zNh/VgsBrFf2scd7H98jAuwat81oHd+Drtv7Ldsu+8slW9/jmM/fO+fE99HlVuvbxPxK24rITEAXyUDK4R3ZxXMTyv1ds/u+vBa+vVf2eT2m0lNEJ4QQQp4NPdAJIYSQl8DE10uSz37EF/Bo+T6aoJ7KpwxQKWK62OCBpAEiv6Na0OsI5Azk0byno+iL6buU/QoEonMhV8P3OTE4nf+Oc5lvCcK51AN5SidlEFGSIGahOgJiwnUtvrWTAKI6DZC05oQzsd0F81TE82T7TD54+RvUPcyztRvOJY2mSUSHt6WX3+sQB8Pawc94XDW0npMWS/p5tMTjc60geCvPFKFvEfSeKQi2feJKFl2mrdMz6vjofd6a970E+C22ynht+fcGXrcMJRTLi+MaRwwkyHuwZyR0VOAjhGzTfz6e/94S0AdMFrHtebt1Hi+NSo8bzNyDd79mXFd+vcfz29V59N4h3oW2X/dE9CPGW2ttZ+93PpWaJMRX2kHG8iQkLporcg5COqKBdNxXW/aj9SOEEELIq0EBnRBCCPkW9DxZWm8ye9G3xSpF/Fa4yIvifV4F8phNHHRIZaGHLseWd0F/QGMusN9BEFz8mTCdASSrd9CSVDANkKyOV6wM0kgzUOMO6UmKcUIepjxFioiuMEHdhHNNnR1Hsao1JJgLWf0iHx08JeSd2D1Rv2D/7WDoew5DX85RAX0t3aXH7Ke067vCewp5BD+1X+1dX/eMqi6J4IKwL3/+/KntTn4eK8Yp0ZC6nhPjLL3CI4oV0Vw1l7+ZcN6+b7ffCSGEEPLOUEAnhBBCvg29F3UfoJtCzk0xxxNUFIIM1XPIwb3Lo1iUgsfKkUGB3mDeAwYSohO3zffu87vXMuRkaTzMngaP95hRTxyT5luybcuS6Z8ZJAgAGcKuJEyRZ0YHGr3QQ5u4hzysrB0v0PUWvKRtKVKRd+F+nunX5nKf0KNrPNs44AityLNW5qNiOyGEkMJWFJC97baiQfQ80nvfyftx/fG7/XnmGX3nnu8swTBaJoNoqQK6WVrrVNPJyFwtWnsrnq95nlNAJ4QQQr4LFNAJIYSQb0UrfANFPR5tuYdyH6s3tKqpzp5eAfFhlupt7W7rvcGAEX2Bpff9krB2BwhVlAQg2WAIMhQmnEsGsqAK1t06tGWNyzxEvUy2BQDEjA9EkjkvWKuZiK4Qm08+QfNgnui2f/Ww7k3bzYq21qZHoaBFXoU9kWDrmrGXxxFuPQ/ac+kST/TvAFMhxAAAIABJREFUcB7e6ol+lJ/m4f+qvHt/Je/BT+9nawL4muFYJ71ieijdTX90HXldnnXOvIIYvHVOHI3W4B7nYvp58EBXAMjBXLm8r2VkJIzF+xweun3N85zCOSGEEPIdoYBOCCGEfBcWjoH+Et/Og6smoqN4RGfYnN5hgEGBNAtXPsCGDix/afYxTtt2P+/ILEtTtG1+chGxupR1JSK9GQy4ht4b4FANiySsMv/y1rHHipHE21cAUfNF9/UJWVIR0UWLJ7zmSUSHQLIUTwZtB17admuXrQ289gSoew/kfAdBkDyHPVFAwt+9KOfOTZ5XUv/rrdjf/1ufLpdeS3h9IISQbbaMyjbuNS74zey5ZJFsTvNcyMvzD+ReB/1ZHujr58Vyae/9aJ6HYOaADn/3UntHUxPTYd7mGe2c5+17JIVzQggh5DtDAZ0QQgj51pi4W3EhdsRsEvBsowhVKEr259/LcrG5xRUeJz2K55dwicgSBj5aIasdV/FkkoponaQMemQUF/WUTcQ2kdzFbAl5hmKJt1FGaYZcPMxVgCwZSCNE02xz19+noRQzVkiNgJ4VIuahXl3bc2jXS7xvt9pyra1vFSmvHSii5xMBvrYf3MMD/ZLlbZrvMqi6sNLaSUcIIS3f5Xp4T7aMTu9xPT167Sbfm1sjxDyr/6yJ4nvpisSu9j5bHc5FQ0oLz45c/xANm2vIdqfnac7zihBCCPnOUEAnhBBCvgur7+++Iorp0dv8XBRh13lkKFsJive2DRKIREE9BUf3Txwf4Lt0IHAl/UyxVmiNq67mgC4lnLuJ0ZqkiN9ZzFgAJmJbeHfVSZyvAnbNvny4iG7bqigUIxTZipMgIlBIGFIJgzyCIuKbt7voiCn8vXulY/q9MH7YI4ruRz3RrxmY7eV96fYU2H4eR0Xoe/eN+wjYcmWxSrAJ6Syc5d5udd3OHsrateUVy0oIIa/P3H9WllfTeu+4ItrJamh38jN5V/G8984hG2uXz5R1qi3zNp9trdmiq41QtenNZtNrtXXP4HMPIYQQ8rOggE4IIYT8GGJ48PgJAOfJI11RBGkdALfSr6MNQ4gkWb5otnnVd+kLZWW+8lvE2I4XefVEB6ACQYKmkkaTmLO3QiUBYp4G7mAw2QzUPVRhPaMMSgoAZORRpvZALvlL3Ll5ws8KJObFLtP4ppiIX9zcm4Js1b2pcDcE/CME6+/kVUu+hjVvIVku0hfqr5tFOZJnb+D5Xc6dNWH/0eL5rUY65DoYgpaQr2PNizau3/q9xdq5zFDT5B3ZOlfsXbSzDCjTkSURe/WaJvMp02eNtiSbeG4Cen0P8xc/ni+EEELIT4YCOiGEEPLjWAs5F0QR9zzXk2lZYmJ6CTUuQRRWjfOnd7Lt7WJWHLle3qrzieealzZietGsBR62XbxuotBsXt5qIdSzVJFcclTRJ+OC+ilq4rsvCqI5ULzNRe3TSxMNDcS28fy8zRsFf1UUj59Tnk0DhWV73uhHiQYY18LBqJ9FtbrZXu/fL/K628O98l6oz9V5bNfK9ArC8VHx/B285wkh5NXoeJyHdQDschqNQ7ee43T+vXt/oXj+vtzjuH23Yy/L50oN60ISEX9zKeeGai5zntfQ7WPwPI/znBNCCCHkp0MBnRBCCPnx+EBB9GIO872phXQHwniEwEOMSwI0dwb1Lh53uNLbpnqPa/EkSKNVIVWHb6iXWScxvWrdNtBYRXEUIT3F5W19dNp3XKZxH16FbCJ6LUj9ClhI95h5XRd32mub6CHRrvPla4OtzxboOChFnEY8f3rfbHhEAIdDO428SpusieeP9kR/Vb76uLx6exBCjnPJzaWXrjcvc/y9tk8Kg+/LLcftnY/7JedJJ6qRhH6vCrVw7aplGq5yLlE8J4QQQkgfCuiEEEIIwXywwJXlM+KAgwvUIhqGFcwzPRUhWBd54uFjEIIMZAt9LoCOA4ARSArVVEPNl7TipTaxfECNo64KZPOuF9ic6Vq18KmJoqJun7WO3l5B/BYpnuoiqP+keMpr69leRX5FCSPYDAa5w7ruDbxqx1PpYJSAXe6hKD5LEOSA2GvReKbrhoB+bZe5Uzj4VWfxW9j1RH8ljornryL2E0LIu9J7zpLmcjuubNf77r/XoheR7829BOFbo1fdsvne9vb82E3n85wX8TxrDuL5CIrmhBBCCNmCAjohhBBCGgdrt8AXzAbobDxPPWR6de82WXp1cGNjQOLWsQpFEZ+SieiSTeNOwFCEaBWByBQ6XSCmV7kXunuLTwOLk8CuNbq7urA9E450Xo7Zd/8ttiuxMIJimntrcDCFGyzlaedAD2YLIpjmjY9Hb03caj0ylONE5GuR+KV3rZDHaK93igJ//f4X4StuKMCriNNf7Yn+qvy0+hJCvpat5+o1sbx3XeK1itzKE/vQ6qNPfJ7sJ1IoVM/lewjd/njx/Kc+FxFCCCHfDwrohBBCyI9hW+BeF9HDtlUYlvB3Kp7cvn5NSI8C873w8iiKeD6m4rk9KDCmKpAXJ1Sfq11NBxdgSCagu6A8hfkTD/OuOlW7zrk+T1s9vmN52k8BxLYVn5BvbeBH/L9GGJ95ureC45pneKfBVfrLD3EPQZD8SCReN7oJZh93GYD0c/1a8fnmrv7dzhWK54QQ8nhWDM0AoIadPnrdbQXCtJaQkA6vdH9fe1/qRGwAAGRkHQHNRUAHUOoTxfM7l2m27JXajhBCCCHXQAGdEEII+Qbc+preBvuevvmaJlSkpkmYcvF8kWlnQKGdM/xQydbFL0ERpWu085TL/OVI5XuCCekW3r2Gp/eNZfoLZRO4qK5AlupEqjPh2YR4ZNPNfYAym4e3CfEABIq5VzoA+SjifbdW62jn27QdB2rIq7InnD/Iu3p1cPUojNZwHA4YE0LIfVgziozr95a10YmO5k3IC3FDd1UL2770NN8Sz/tvxetp197l+CxECCGEfAcooBNCCCE/hmte5ONgwzgXiX11SjUk+qSZT57VWsXpvueidkdGwoBEd9DEt8lwQVyrp7eU+cuRUOOvS6rh19U96zUBgwCpeKYLBEgmnlfPcy3ZZwTv81IgUSn6twpUcnFCV4FmQFMu+efRvM7VShiPQUZ/fubobS613MvDFwdneoM9ulw021y218eFrTGErv7olC2mefaA7bUDWnGbZ9fhRvaO9SY31j0a0FRhu5d9G5nhUhFha7lnuRMpY1aovJ3XLjuDsXUu9JX1h7hloPbIIPIe8frOgWNCyKuzdY36ivv81j7W1s2f76S7bm2bXg5Htr83t+7nzZ/BbrrH39p2z7wv956tjtAzpA7vFNprFwnPmGP4i9uvGZvcCz4DEUIIId8FCuiEEELIN+DW1/S8OZARQ7nnSdh1RgA4o6jPxZu7zDmeTP9N0Q+70VaCGF8JgyU9kS2ERlcBNI1TekURpSWZJ7p7nM8HYFRSSaMDMA5ASqXMQ4IMMmWlgGYtgnzOpa62QqxuJTr0MFVKM5AzNGdokvJpc+55krJtRgpinWvpJfsoHEZxzTau7dbOkx7btf2M6ez4zNIf6EVeHB2KsYBGDw4TzgRIpYLI2dqjm8nWbvYG1q4bQNVFPS8ZkHy2x9YDvbRnrLXJLSFfFVAbvBTPpz0vwznfhnqfFcmNSnx1XLkyKJqvvELOpmzoJlj8Llec6Tjlxmxm/xgeFVXWZZCvY83rCuhf2wkh5F259z340vyOeMJektcriamX8M4C+q2Gbs8wsPsq1gwnWwG997xn7yIuppsRdFl9BvCJxz0zPftcIoQQQsijoYBOCCGEEOOIl2dvkMAHJgSqCaLm7S0Kd98uIjpMtI776+UbB0o64nn86kLaQmhWU6RdYJa5KKcKSAbONuCSBuipiOIYBizCugtqXYqYLiUsoITV4gYDJuCnEZIFWUZABZrFxGS1qeK1zok+r6sL+NJZF7/bfO+LQaUea0JXMIzYyyMkTzK1rVav2bJSqhGFQCQ3Ye+3S3SMW7aUnWGug4Ng7zh+Ozvvrs3g4LaLiAUupgqWhh8dYxE3fPFFeX5uLIw2uoYR/X633OesoNN20VBIevno7EOsDBIWiqztZ6dYzS6WCWL9tup5K1vH/B1PArLPvvnSGq2pCCHvwHp/b9fc75qnNb9b8uwZVG2l2Ut7dPvnc/1V6nncWmIN/z+P3YeUG/LdEtDj/hqjSc2Yh2PPk5BeDflozEcIIYSQ66GATgghhJA7MA1caPwJQGoMdBejZL7J5NbcybYnMHd266vrmIpi8tTubW8CWc51Qz0PbgYAwWnS0K28mgBVm1sdGZqBURvJz7xnBVKE9JSRVKBjBmREzql44mppp+x6YBX443fBPMR781177dYKiRIKGNp/kSyKcSUfaUTQGJ6/GAzoUhyvu9Pp0AmwGaq+S2+dhLX3HDw9YoAw3z+5Bu8cvcHQ2I+agVSRMs2Ci+iCMDi6Nodle6x6kRq2ridhnfhg7BEeKWYTQgghhPwE2nebNuJVXNYub/8IIYQQQq6HAjohhBBCbiR6l1b5dBK5xD1Ok3lp2rzo0ZPas+nmDayKl3V18Bitepx7nnva6E0eluXiIY4BKAYAp5LHMJgXtW3kxcyh7FmLmOtCu3j48iKkiSYgJ4gUb3Q5Z2sWn4vdZ4AXE96BEuLav8tkkBAEbK9b8eyPA0QuFMYNVtpu4UgineWTn9R0fCargeikX9PJfNslpXyXD2npA+TJVjxfE9Mpnt9E6BgiMutKE02ftSgHYlND6JCmdH5tUWDu3d7zRLdrUGvEcdReomuoMktg/0tINfdOf1z3OeKBeDSfRwwy06CAEEL63HJt1OZzK913uwa/e6yLa0v/3rWe03koWn13aI0se+L5mmj+Hfs/IYQQQr4aCuiEEEIIuREfyACmQQ4TcjVDMdjASDZvdJv72EQ1sd+TqHZksCMMvszS20DLzAN9RRSt8+NJcR3XDOgAqEJPCtWMdBogGCzcuhQvdEnINsf3PBK1IEsR0pKUWhXtL5c51scEYARGDwU/QnWs4ntx1HaxbvqbtMd5G0lWiyytVYxfDKqKt3NYnlHKvuV43TZpy2BCqOp8HCzsq0wfreH4HB3wXWcmTt4EBfGvJRiiLIgqs187AOtkZds0QCRNermH7My+QODXoBjadTLnEag0ITyrZcq8nP6/1N62F/a/VyPf872Hbt9xIPjac+0d60oIIZfwyOtcT4iM8Dnoa6GYu81W24xNmiiUt+8/7Xq2OSGEEEJugwI6IYQQQm5k7n1eBjrc69xdlF0kN2/Q6o06oAjtUkOEa90GWIZ27qHmJRq8FNw1ejaPua2rghumdTUWu8JitQODeXenDKQBdY5zCNIgRWvvRJBWAUYzEEhA2U6TeZiX+eFVM3D+NYtsP2UjJgJO3rgeTl2mRoJIsrb0rb0O1pY15roie0E1W9h6G3Ty+i/GmCxWQBAZZzp5aMJJciwLfU70vh3EvQaybvW2feLufyxR2N4SpYvn+fSZABmAdEL1PBexcyrbOZABLREuJHTmKmOL52VGHb68Xg+mPXvJ4hQG61MGKMKFCyGexH3YMnK5ez732lkvz2vhiUYI+a5EA89rtj2y/nbDxdfjnevyzmUHlu9jd3jamYe4WiEaQAZhfDbX+ZqITgghhBByGxTQCSGEEHIDcXAuek4DRUhvRGvJJnxhWocBM3FNeiJ6b5CmDekXRPT6M8/Es7boAq3R3xUKjLbfXMqpqiV09KCQISFhgKQiUGdYWGm1bWYerWLDPTaXuGv4p6K6iyqyZOCzGewJeraLc95Ukko468kOQKFpQHI1WwBJMgn9qZRLAWAckfNYwtVLBvRsdQQWSvdsfCwVGdMd2V0kl2TznzfHwwwZSlOseTvFY/VKHBUQ6bV1DTUoxHypfcbB2PCnqfRnDGUedD/P1KI4+Pzomk08781X3htc7Q+6ymybKPT35lDf+/1IeufPK55ThBBCvpZn3pu+inet07uW+yvptdE4LV9EHfPPjkUzIYQQQsgdoIBOCCGEkDviYlQrpLuwXTyw6089Val5JqJVJcu9Ozti7eyzVxQNmro24yoKn5PdpDgTm9Wc5wU4m/CvJxRR+IQ8KJIm8/42sdrFftWZmF6Gc8yXXFCEPkHxQleF6Ig6V7wL2apA1lkxp6nJi3AvNsd6TSVT/pISkn26B+0IBcYMzWfoeQTyGcgDZByKJzyCkN5q6TI14TSvfdlpWeYtGA7FTJS3flC9+9cP17TxI2mNPHyfrbi/V653FNFfYGDROlSVq6U5FvW3eZ5rAnKy+c+H0gfFep4KNCWImve5ZgAWFqKeg95zw5ypomZYY/3ZPy1V9R+PzdUq/72mDPr13Vu67W6rO9gxAjmUzzv2bUIIeUfufbfQzufaDYt8LS/wDHY3WuPHfdrXuprTzPg49FeJCVpxvO3Xa/2cEEIIIeR2KKATQggh5GYmv+NJbp2LlS6SZxPRzFtZzlAMmD+SpCJiVdEqCOoqSwfTLq5k+YZ5KYJBUeY3RxXRa9bZBDYA0DPcA1UxIGMoYt1wmhzbvT4uwJuI7Jp0EdGLqF1aRKCaJ09tVUBHCyVvAl+oStHl5y68mgA1j3MRAYaElAakYSje8mkw2wHFqCN0/EAez8jjCMkjTuMI1YyccylLtv1mb7/ylxUmStqxUAtoLQJ1g4gokvsxrvi66jqPWQz4tqJbx9Pzu4k1Y4x2WRyQ42DzTW2gpddr9emWYMcgnT/U64TqJKTXc1K0RHaHmoBux0qtD1t/rdMJiK+3fixDENHt2qDZyjjNYF6F/kX91y5CXzmAe8Tj/Nle6becNxwMJ4SQ47TXzK3ffKYhr4I/a/fCtMffW+sJIYQQQh4HBXRCCCGE3MQkL63NaxwFdftUmGgFlEGRMyaPVARP1OKNKkHSijMMq4u6m6y5hZbcsoWUdyF9Nizj84WPk6Csmos3OQDA5kb3IgexX6urbfR+DWLy6QQRgWYT/HICMAIyAmNajB0pFFkVyYR0VSk6f8pFRFct3ubmE56r67tAVCCSS/j5dMKQM06nDM0ZObuQrtAxQy0MtlZh34XH6bcmq2Sy5eJh+bXs2AVJD7Gdgniezeu9d5gWh1JXxsiuHTjbE+hbD97vNMj87LqYiN4eZ1mmqV7oHsJd/Xzw88fP2WIEU87L0k9VQ/+tKrr/pakfZ+uTta+mckXwzaxEZbehv61dc1avRQ8Y5N1xNJ8leNphv4ehCwfICSFkHz34GdM/+5ngGnhPeAc69sqYjGjjimpxjEVf1fB9ZuLMPkAIIYSQr4UCOiGEEEJuQDq/toR0/2zFcwvZDAHEZXIX0nRaZ+tn2R1muUG2uZNh+xMIkhTxu/g7mDf1GIQ4kSIgZy2idxpK6ZJYaHfLG1I0Ot97sBsofwNkGIporSN0NGH+nAA5W/6YRGsFso51HCpn1LKMkoChiOhqc6wPKF7vSFbDlJAkASnjpII/IMg5I48jsmr5HDIyRkDVPNNLG0WvXmRFDXudsx0WKSK5e/ViLN+TC+jWLjkDkm3+9eZ4LI7r2gEunsL3Y20/3RHAO+/7q3m2N3JoO7F+BAu9PkuXwqcL6H59QDiJQpaqUJiAXr3NgxFIFNM1A0kBHe3ELPOol0gVwXikGr80pjVuBLNozi8S0AkhhPxgtu4rPbH8O/Hd6nOU71RvXfkD5vX05R2jW0IIIYSQL4ICOiGEEELuwJHwxpHoVeCeBSaMahHNqnDlns06ead6kGWpIltJs9zzntiezV+75C9S9i8m5pap020AJ6PMi56klCWjeLGmAWqe1pJc5Ct5JZFpWMjqoSJQUSQJgvso5nlu7ThKEZpdbLaxI7V52mUmPptIPSZoUoxDQhoydBwhMgCDz1FuZVFF1oRPTSU/BTQLslo9TKSUNLV09vnhNQNZIXkEdLSw78V4oLicZPP8NU/fBGBIGFIRSHMq5QLOkyDfHq5ZV+p40Hqo/KuIg3Sh/Wbr22W95e8ooj978NWiIQiqscRUIq3rZx7oSIAO4XeIUCFpblcDYOp/weADZugRBXWkab3G7wLNYzi8oa/5SVwNPXoefL1+IUtjkUvY6mru5jXz1OplsLLu0ss2IYSQO3HPi24rPtJb9zX53sej9TwXW1AjAjXU96tZf90S1AkhhBBCvh4K6IQQQgi5iXlQdZjkesmAx4iqgqkJx+5tCvcCdQ91TOkgAAakms69xnv73hKXprmPVYsSl1RqrVRdv85FMK9av62QBDUva3URPQ3V+7sI1xLEqlKWLMUjvIRDt7zhHt0ZyCaoi5Q2qt7oJhJmH2CyNCkBaYRKwjgkYBiKsD0Mpe18IEsEZxVoHsxrN4iZKZW52pOUeriQrlrFd1WFfP4Czp9lbml173sxkV2h7kGfBGlISIN5GOeMjLNN8d56lKx5TWmz6lYBfexsfyTPdxTNXwkJV4q9tk7hr5zns/Pf10VdXWDpzCinepvDzqUQKlQtskROqF7osHSw+dFj/1wUN3iiL/rm6kaEEEKIcY97xNY9h/eg14LHo08rnsdw7ZfCKECEEEIIuT8U0AkhhBByByTKsNhxm2x+x5Dc7oEeUKBOTFwVs/JdkCCNB3qcL33KIH7GomgRllXNybzMMZ49oLvPIe71M8G4/MjAeLbw5AJNCTklyDBAkgKnoXjPShGYJy/0qWLZPVOlCNZF4/6AoAjhKmfgbPNG6zhVQ907PHjHjtl0QRPXz7mI88nmIg8ifq4ioTvWClQsaH5KVnc3ACh5FgMD8+ZNA2QAxLx6JQ0QKa2kOmJEMYSQISGlhHSyR85xLEYK5xHm9N8c6M7vhRd6x3P9MG4wsWVQ0SsLxfNb8ajnIrCeq9Oxnc1T7huUc10kmVGObWze55LEpgiQIKK31wiU/nq2nZsBShHfc4n64OeTLVaMZsxi6rhHPJh5eyN0iWjg0YtccEvfudPAby37Rn5HbRsIIYS8IfHizmca8jikdUVv0PZ5z5be9gBSLSm7eySEEEIIuRYK6IQQQgi5icuG4dZCY0dVygdREoq3MILSuhZC+6j6E/cn8/EWE5cywgzsWjynxdS/WdRmDwmdcxX1NEnx0B7UtD4XAZtqeBF0LhiKnJDg+ZnAPdgc5aplLnbjZGWMNfaQ7DmPwes9d5rrwzRCW2FzlSvE9EKB1Enbi+DpRgbF4zzZFNZFqBTzXHdPetEilEsaIKeENJxMiJdioJAGaNZQLJ3KOxMjg4FDxfZzFRxEex5u2iIunwMuoscTI36VYiRTBXRMBi2QZJ9m5JHK1AiTsY13VmlOEilTIOT609Zr8UhP7qWeguC+rAu8/LNl10Q2uBdfuS9CCLkUXp8IIZGegfOl14n4XkgBnRBCCCH3hwI6IYQQQnC95b90fCy3vHePePZ6CL92fYzVLHXf6vMptxp8FZDDoEqvii4MBxHffdkVk/d2TVLzaDzlkYsAN47z3ehQnF2TQH3O81pDnRVNIcgmvrvgrEjQ6JUvxatccxHwi75XtnZZsrEJmNqjtk8GMKLEZ687A2SAfCZITqUu4qK2z4FeBEUX2utc7Lm48KrPQS2lfdyAQLXkr9aIoh8QDKXEMi9eLbCGv2hgISEE+8wiYc/IwrM+QZAnDxifM7t6pvcG9Fqu9d661cPG81jbf295r42uoR2c7LVTPM/m566GzVViOPbohT6iuIsPKP3EDFEs3oJ7oas5mWsqXViTAEOJolD6c+wfCqQzoOPUTzWbgco4JcUJgrNfVax/mFt6F+8veapDD11dsfN7jc7xryf8yvW0NUo5tI+YMSGE/BQefd27n5inFz2nxOv/LXW8xzPMtUaQ9yrDO7J1zI60xy3b99YL2uM4CyoUdqmLYx6fH9u/S2nF9zVDbUIIIYSQ66CATgghhJAb0PD/dpr1dT2BysU0wWyO9BkCxYiMDyzEconzJ4ff4kKxZZF/YSHWu55cy1EVtnldJAHy0ZQr2xTbCs0KjBkyDGU+chmQ0lA2Q8L5dMaYMJVdpHiFe/lStqJZ+ROKp3hWIGeMJgjqaMKgFiFv8tf1IatQBxMeoQnIp6ntcwmJnT4TRAbIKCU0vQmho3m2+7zrejohe10EIcS7CdOC4pGuUpqkatVlv0ljy2opxuDHytt7BELdREvA/ix/Q3EOfSL2DVdWm2X+W6RG/FYdi4GEnqE4Q3Us+9RWSJ/3udu4RUCPA45bAvqaYL7lnXOERpwGMI8M0CuHn4MARDH3JPcw6/YnPpXDWP7UhHT9KHp6zC6VPoeTiecJpb/GBPG8kc8ioiNbxAg/1lXRRxHu7dVIYevL+ZFkMB16Ku/syicZU/j4ZjBXYSHhe1wzaL3GmsFIk89qF+AgMyHkEbzDteUSo7Sj9OrdPgM8Sqx/RH0itxzTnyye39r+K0Zyu6Jx+6zsaVqDikva1refC+PaJqlpbj3uR8oTPwkhhBBC7gMFdEIIIYTcyJagd4+8e7hQVbyeJ6Jg5/9FoQ5VrJ57ZXZ2KzuDnHV1Dr9NAM7JBGPzZVeFJIXoCBkTxMKllyexSUBHikKwL9ciDmYAKVtJUvH0Ri7in071KUej9cjoYSHoLUct0ddLa41S5jcP1gQSvdBHFC/ejDBlvXvtWp6SkZNC8wARBTSV9SOQGqFRgMl1ZZZPKH9tpgGQ32zVUkBXdaE39gWxtQJBLu0ziyywNbA4K+XzaeeWXO3HK+XdmZtyc9dru9wdr7TjLc2y+jsOxJY/0bBM0/yQ1OkEvB+F42zGMiJSphhQQFOCRkMd80RHNViRWV9SEevYGbH/WdiFoElL7UclTUdEV3TmA9VajUUzXYXMPua7iddnXY6Xr2S1eX08BAexydcjV/bXbU9e8jM40neuNYb6Cl7kGeWhvEI7P5s1EX0vTS99e8Pffqib1h4VqylqE0IIIeT9oYBOCCGEkCdzVIDvKT+KouY5ELWpAAAgAElEQVS6iOUh150ED8lcPFzTlItgJn4thne6QlNbzrwUmlQBn4vZQ56nAZoyJBWBT7ILeh4mXYqXbUYov5gTrYnjyUVhE+xd7a6qt1RB3P8vtZO5OFDrpZPApmptMxaPdUkQ85qVaGxQQ7afq3Y/bxIXG0vZNamF2LfKqYvxsdXL/iXEfvRjluGevZ5ekNIwhQDvCOglO1+W6jLPQ+QTMyFxwZ7xwSsOUh8Uz7+ElbJUg5Q4QNv785DoU9+YWYdEIT2bIUQK+dr5JJIgKP04J/MmTzbw66J5jEjhoeFDtILaS/088VOsW+db+spXDi6vlZUQQu4JrzOEvB48LwkhhBBCLoECOiGEEEJeiD33yDadAuoh3oEpfPektKlkiIvVsPnFzRu1eEZLyLUzsBQXif1XNcFp3vHqkQoX5dTCsKci9A1ic5nbXOgYyp/AwqUnyJDKNuajDUgRsEWhycXzVERpQYl2PYRCjjDP9K32bATM2pQZkAQV+3QBfyZQY76NCd7LNrP2dmOCaCShU2R6aEYNmZ5zMHYowmmK9gleb8t/5gVcCyN1ma7NPW1zbSt8znYUb3oN3sYLD/RXFM1bHi2ix34QPa3jZ9xviAAAYIowELZfbWKbnxwjICNEh2n6AC+Hn/ZJ7bv2s3YjFKRyiF2U12LMUvpatu8253kU+31agpq5nYcezl5jveOJEX212nNElptcJMBfIsy35fJVulhECCGEkJ/AUSF9ev5ZPsu0z8ptvhTrCSGEEPL+UEAnhBBCyJsxU2+bZf45mGDnXucKMfF5JvhJo+m13tp1P/apQPRw93Dg0xDSJOACUsRzKCBj2fdool0tgwIpQbKalm4e2imXOcRh+0upCHlDKptm88yWZBOMB7LNRa6ovuhSSzfz+8ZioEvzVH6b4Fzd8731NPcw2jM93oVDExizi3TRyMA1xxiu+1zFdKne+57ePfWzieZmhOAK+mJ8rpRhEthjqcsc8SpFLC9ztnsoe/9cO/4/nY4hxWxd/Ixzkce0jTFFZGZsoeW4mIguOkLyMD/LrZthNPE7Z2Dw6RowGVuIQAYpRjRSBPBiMOFGHhnQAVUcrxETQj/Wsam316udPqK9DsU2WWFXRO/RM4xZy3wt79YT/RU90285916tLoTcG/ZxQshRVp69Dm+7J5bH37w2EUIIIeT7QAGdEEIIIS9IKxD1BKPiSTwtj38j5t6X2ebGdg919+8+maAdhXTpDP30vHsVIjpzrFXo5JVdPeFNTMzBaxVSxHRIEYZTMm0vQ4YBkouQ5yK6mnAvUGhCWT7zzjZLgDOK0UAugqJaGcT9yEPF5nPHb4jGKmaIIMH2YGVwrIa9diFyLpzHtptWZPOaP1sbZW9Jc/AdAElWl6EInlGsdA/gGE8+GjE0ZJwxeThrEUdn3ue+bQrfO+3yLGoxL/VOfkTZZfaBxutfZl+mwVuxtLWHSFu+OFhbjFTqjAjBZiJ+743t1quGJMhgOnjSIp6rXQuS9aWcyjpo6Yc+vQIs/Hv12DbDD/V+Hs8jF+L3DAbCssW50aa710D0mie6/bc4Bs+G4jkhhBByP7YE7r1la88jbZpeXrwnE0IIIeR9oYBOCCGEkDcmClTtn62Ci7/mbRrnGEeaRGqY5tvoNjORui6Umk3UxAEXu2PZAJt8eUogUjxndSxzmysszHsRxmVAWV6LmiBi/uSCIjiLCcq1vlqe7EarsyuTqvNWMcFMkCe9U+t/oa6xXUP9Y73RbNJ4Hcts5eQZrrOWVUAzNGdAXdz2somFqxdrFBc/g2hZs5EdMdJ/W2jwKqK34nksr/+SsKtXGAjsGwf0l3+hKGrHrA37L7MyCESnvmBWEtGCJSR1AX1uj+EyvAJQFRPSe4K0mWIkO/9UUaNTqBTRXLSI4OKCuO/Adph0mms9LK5GJbUO/juK/50ChRoc60pbiTqCeJfWOGFvOSHk+fCcJITck7Vryp6x3p54flSQJ4QQQgh5PyigE0IIIeTJbAhMq57oa3lEBdwFLfMArwKXr08Azub97IKeS3PzoOeK6OoqAGxe5D3dalOrMk9XRfEWT+blmnQSyCUBKUGTlVFidmJatZd7KHklc9MdBiCPQJZmXvSmPFU8D23tc6y7eA2g9S7uVbHOD10xkVrieiu3WH3zAPF533OqodmnIns7uyFEnPM+lkDmTrarhfW65pXvr8olIuljUDfKKL82dtkaXlj/9fD7SJi8tYN5h1uI2LH0o5FR7EmiS7vY/yrTX5lyIFXjC9iyrJY2Wej/ZOL54GUYbEfTOeVTCszOKQDVQKT2JZ8T3Q072noD834VDQQa65uW2t737Jcr+R3V4r+UWwrzyucyIYQQ8kx6zyVH3rGO5sd7MCGEEEK+BxTQCSGEEPICrCnN1+YRfzee1FWUylAkW+pzfHu64vENIIRoL/nUOdLrCp1pUnG7WCMNCpUAZR7mmq2UuctFgUGLN7YMRbgbMlSThZpOpi0Gb/DkoqSYDmj7Gcci6gkwzfM9tc1kGtAMdFU9U2fNhljelRYv25ugqL4XCR7GWtYP7jkPQDJkTJBUPINV1QwCrFzuLSwKD9kfvd9ru0YtsmcwUDeIlgOteP4VA36PUCif5Xm+7QU/80RXD4lezi+thh9RPPcspu0U5ZAVp3Wp55enc393tW1UBNkF9WSierZekkJm1WDlNOnggKn1bthi/db6JtzTXINHe51SwET0en0Ihjh1yoPeILQ0n2j67yXHsZd204qnWd72/16/uoRbzqdb+++9DQ8IeTTsr4SQr2DreffS5b38eC0jhBBCyPeBAjohhBBCXowtYeeIqNKkreG+W6EqQXE2v+bGW11y9Zb1v+gQXbJR5CB0TSGkXUCTsE4x9+BuhLQq/BahW1Mysa+UQweUMNIpA0lMmE7zqcileNiWcvv+pIh6GdCss7ZYb8koPLXt3xyb1kqgzgftnuhjaLcEkcGyPAFDQrIQ+imdgHyGyhkpn5Hz2QwMzHs9CKrSDNSFQOBYHcCbjeUF8X7V6CLiRhOv5Jq7JZavfb+B2ixN36jzgi/3KPV/F8IHAAmCAdATqmLtIdRj+HQ5ARjqZ4YZnGgID68JkrM5cafSvy16g7aHqyjsZR8+B/rMaORkYnkC5AyMntauCzn0ORGbIz00TBTRgeY0SZhfgxTzKA39Ptca5tyfXubNOU0IIYSQN2fLwLhd3nsG2DIC3NqOEEIIIeT9oYBOCCGEkCfS83j05VtCbk8AXVOb4oCPLH6XYR+BaCpCunuyevqZkD4XZacw7o1QWYvZLp+8audV0CpcaQ1tnouXrM3BrIN5oGeY562Vz7xwiz7oRgBBkBwtH2jR8TSbM7jP417qpdBQ3Jq71XP2pa7vt3UU0cew/FQ+RSBJIGlAEjFH+wzkETmNwPgLMn4COkJ1RJ0H26wFBAro2O7Y6hAbX7EopMK8hFeEZa3/1Xou+82TqcYEa3VYE9cfX/4aWN3KOO3Z+i6SCen+FwRlOQcbllP4+wByKodcdDpEmss5q7n0cRFoTlCx6A06nVNTM7gwHgstZaoDkWAAksv5lxMwjDALFK9MOc9USj/MHtJ9TURX63P2XYGpAI0BwswgQa44ZHsGIVvXx96yVzIaIeS78SL3FELID2BLHL/Eezym5zWMEEIIId8fCuiEEEIIeVEe7fUbxV6BYoQiQTQVccy8YifvY/foNmHL5yhfE7skzbdbIH1tUzVUPc+FuDo3ugn8kupvF8NL6Gr3sDWhLvv84QqMxWCgpJgbFHj2GorS2gCUokeDAvubVdO8ijUIinKexFO14O5SRPQkCZozUsrI8gGRT+j4C9BPAGcT8scpL40KqM4+JoOETrln28Q/rxdWtnt0XzzKhnD+spRoCSrFAx34QBHPT6hzgKdcliU1AX2YxHOcgMH6tMgksiczflFATCxXNzpx8dxd0WsUA6CGbwfsvClRHSQrMI5QuxZAcvnLannKlB9GK4T388ZwZeZh3hgCzfpYPIc6v0U6BhGXcGRwe8UTnRBCCCHfhJ6AviWqr22/tg0hhBBCyPeEAjohhBBCnkwrHvl3X9cTc44M+Bzxosxo968ezl2HkE/CNL+xVNG6Cnp1e5l/l9QpahDi46KqQ9sXNe/3NNrvFBRtKV69AmAQSErzXcw80QfbZixhqtOkkIsJgpORgC6mX1atBQvVCz9WBWcEj96YaCxip3mDy3BCkhM0AVkzavhupKJTajB0MC9fCS7EtXxavPJL+QXzYxuL5m3YGwx8IU/zLlsC+prn+RfgbS5t+abzQJCqIK5yQhHSPXku/Txp+ZOhzE2Ok4np3odj1tYnUaInzETzbJEkVJtm8HNSi2gOhaQEyQqfxqF8E2geUY1OdJyEctUiqqvNeS5myIJoMBJDxEst57ydME/jdZq1662GG21/Xtnv6jJfTkGdkNt55XsLIeR7syagb/1ut+U1jBBCCCE/DwrohBBCCHkRniHUtANCiiLeAvNQ5PG7i8MwodrFL/MWFaDOP14T9kRFnetZ4btMenbRBLN5oqsLdiaii4Vdr3NImzinIUy1aJnTuYrqLgD2hDUrgIbvXfsFy8vmbJ97ccfCex7ebkNpSxMhi7N9AuRkQqbN8T6gzHmdB0DTzMu4NPUHgsWBCaUaPi3fmSdwLH9HXJ8ZQngdpF253O7HcbQtZP4nJojbX/FIt7yST1eQy/FL7oFePuU0QE6nevzV+p2K9YEhQZJFXxBYXiaWL049qcYWAkXKChlc9Hatu5iUZKCEaHdDGDcI8f3U8zz0+W47uOFN22aC+XkY2/er+9mrG48QQggh5LnwOYEQQgghPwsK6IQQQgh5IY56nF8i4q0JxcAy1HIUyiMmFgOTeCYdkXXNA7frnW4iblPEmkrLf2pzniNZOOm4H8EkEg6xPPbdvc1riOnRxHUFxmwSdKPeH8HDSs9sD1zYDysUMDfyIoZiLN68+QyV30xAlyKmJgvzrWKO5iOQPgE9m4ieIFrCvhchvojlolrsFqoQmaHmR6yIUQS8XaJ43ulXCwMIXN4+88a6U/pOm991v0c4ct71zl+BYLDjYcK4z4vuc4+LieeD9RVJJqInpI8PpN8/irBtodpVx3Ls3UBDSiQG9TzrpyyL5acOBCJqgnouevZZIcMJWqcOKOJ+sbnQSYQXuybEKBSzJhH72bumxRM+XgA6bXeRrn3tMd/biRvJvJon+jsO5L9+mfUNyrjGa5b9Fct0L55dt9uvSXo4qstyy6N7uD2PNV7tmhx5ZL2v5Sv3+4hjczTPLU/yveWveNwIIYQQQp4HBXRCCCGEPJlrBim3PD576dby6u07hh23cO5R/FYXpU/AMIZ1Pud5/AxiXpHravqq9zb6fp4VSSeBLYYdD56ves7QLMDZhPUQ2nqKel0EP00mVuaMbKGsS/hrE5Vz8IhdeMs2bVYr4HUM9fHf5g1e20xggvi/AWTo+YyMEZ/IAH6Dpg/k0wBNfwAfAzD+Bpx/Aee/gPMv6Pg3Rs1VmiylKcdJMKKEcM8l75oizJ3tHr91bmwPsS+TUUAVC6PYPmKqQArpLmWtr6/18XZb71vX7v8WfN/WNlLaOYYdV5T+V4RyCbUViBZPbqltbR7jmgAMxSbiY4D8lqAnKb+lHIN8EsiHQH27nKF5KJEZxlz3UeY0L/tIkHr6ZpsvHTK1Wra6ZLEzMyWb73yA5rHmL+eE4ZdC8xk5W2h3QTFCgQA62Bzp1h5ZzUjEozOk6VyZeZu3Inq73M8hMxapi9sLhzabheVe6XZ/N3mbv+IA+pHz56s5YmzyirxTWclrcEufuVVkvGX71lDuq3lmu91Kb/+veB3usRKZ6Cba9lhrn/Y+vJdPu27DGK+u1e5zguqIZd3f5ZgRQgghhDwPCuiEEEIIeSK3DALew/snliGWpfVM73gja/AIXwjmw7RfmydZ4nzGAlPKO2UTYLa/GBK9rZeiiHI55DtzwBWIWLBq8VwSMJTw79O80YIqhua27j3CQGA7H7pIU9TwQ02Mzr8AKDQBo2goYyrhu9MJQILk36DDLyB9APgbwAeQ/4Lqr9omKkVQF8tbMGLmVS8oIqTr3rkWFHMRvRGIoQDOmMRzN6Zwr/a1dvGm6xwz7bXn0QHMRlidlfVAeaaCbaTfwg1AdKqGe41LLJufC+4LOgnmdfYBL5m60ccApBKmPf1xgp4UOCmyjADOwJCgwzBpxTlBswLnEXVOc0X5ngQJNuc6AKgiISEHkbroyiUzlckco5w3AuRkYeKzOch/Qs4AMBZ9XEwYT6GN1Y0BxqDSu4jetLnaf+25XleGvqsS0kbjltC/2rne41zq9Wsr6PauKXvCejRWWFSow0ZfO3T5PnK+vKIAEO8ZR8rSOw7PYO96Qi7ja9tSrug3z/fY16vKPee67aeaP+p8W7ue3mLA5HTuK1+G2P8u164Yhq3yzD73yGvckeMR7qEX5yOY31vyhgQfn2PLb63PsoQQQggh5BIooBNCCCGE7NIbrNQiostMmcU0Z7ogCvFqg1kyGwA74IGyqq3EMs0FM4VAMqCphLxeZOPCe83TxT8NDtatB8tKmWah24+SAR2h4ycgCSp/TxnLB2Q4QURKBHoBdBigH6ciXI4ZOJu3LzKgCWpCep3H2sLtaxQa/ZB0K7MldgmWA5ch312OpGv3v9IvxIX8DTTu89ED7G3demJw+VMtYrdinIT1aukBQARJBElMmE6KlGyI2MP2u64sZb0OUjzBPVCAlDyLV3loSymD/SqNXNRqyr7M9WEtBiiljGM1RJkbCkxTAvjM6rOMFjtod67rh2phcLEltN5rYHyrvz5LsCGEEELenb1n/y3x/MgdWKFwwz0aRBFCCCGE3AMK6IQQQgghALbFS1/fikuKecjz4H0qjUBm86hr9SodlvvqeqSuFDP+6OroYqLxigA+80yNIrh5ZEtIpDuDcFsiervcxfucATkDZ/P89jDvQ/H8TcMASQmSBNAB+fSBbAIs9LMI/jrWTFWHqTrSaxIN2rOEevXE83bgsSeg+/KOgCzN71n+a6LzEcHbw/IfETKLMYG6t3M9lgc2PYy3o32XXht5ghGqRdbW2D5SjFDERO4U8lIRiGSonKDR819Mph6kGIi4jm15zua0Fa06vUI6fblz3nsbm7CPJFBNZoxiod5re07GCmVO9iiuAzWygwv8q+0fytGWUaZ9zNOGcq7VZW0ftRu22/Suc+36A7siT4SiyXNgu78njzhua/cZQpxLb56Tz3+PYh6Yq7Hu8pmWEEIIIYRcAwV0QgghhJDDNCKWzx0uJgAvlNuMKeS3uUDX+cuBmx7FeqK2615R0I67q2VrvF5jWo/17sYBqpOYXo0FekLyBovV1nZ5BPAJfGoRJcczcPoNcjoD+IDgA4BAhgTIByQNGHE2EX0sZbVpHVWKt7376VhQeN9bs/ueIN4TDltv4jWvoaOe6IsD0dnX1uYx/Oeap/N8Ixfci/h7y9yfK95MmjBNM7Al3J4BKLJmlH7vfbSIzaIlKkEeBTImyJBsCoIBow7IHhZ+NhXC5JVeI7ajsRkJ0xgItgMW15ytf0sSIJXw8apFiNczgJNavxtRDU60eH2lKp6X+mW/DgiCwUb7GUqwG+a/13fiunt6ovf23yvDPfd7L25R9l+tLpdAr0NCXgcK6d+fo8/Dl9yTlmndNHBmFLr5h853QgghhBByKRTQCSGEEEJm9Dwy298+jOWiuK+Pw1seUty8VmcibPGwlWZAa9IGg2fvbBwtevw2XsVrc4+7IC5Nuo4WLpIm8RwoHsNqYrdvCz2ml62K7CbIe56jAmksv9MZwBnQ34Bc5jIXOQHpBEkJwICE35AlQ/MIjDbvvH7WchUv42LYMPkiu3AaBcqe4NsbaGwU2n5ldxpEZh/LvGMRtkToMezFyq+xXHE22bnILpKhq3lfS2MQ0Bom1N25F7adMx5etPZHgXcznAGkAZoUSRPSSSzygJ1LMTSpC/CCqW9Caz3FQrp7uywNKXRZBXXjiylfTYOJ5lLenkZgijaRQ8YZZab4FPJVZD+xawj+Rjy3c754sOfQB9aEa6ysb9NsCN8al20ZcuyI5/Xy2OTz1LH6e/TzZ1ZgceEnLwWFKLKGNt/b3+R70T5Hbhs0Hlu2htrjjj/N+j1Y0fc+Z98jhBBCCLkHFNAJIYQQQi7GB6fi4JeHIvd1Lp7bPOkzz3PzUpUQltqXa/O7+3252UwwjwKZewdXAdyTNt6uC6FeIObKq5JQvc9XQ2DrxhjdTKWv5RVvn6xlfnM9Q3Qs4nnORdqzua5VElQGiJxwOv2OnD8nYbVoy5hchKUIkWUG7TCkKchVyN0SquftsKzLpcLlpfSEdV8VDTiASZBty9rW8RZBbmVQOPapWbom7Uw89/PC+p9KOf6jYhSFIEMwQPQEnBJUB+igwFCmQDCX7oLbpdSoCdNytRDwSQSapTuTwWQQIrW5BE0TiwCDTw8wQkY30pASXGK0DaQYePg5Lya+CwZItsHuKti7SD4J+NOVocSjnxc3WsCs9b14vIN1TE2+t90BA5A9Mb17rmzBQX1CfjZbguPR7V+Rteck8t6s9deekL62/VbeW/REcRfPp8/15wRCCCGEEHINFNAJIYQQ8sM5Kgr1BqTawSxX9Py3BsHQF/tA24eJvO2+w5/E/W+VvRFO22KJAimIaRqWBxG9eHzPxW7XGLWd072O0en0GYX8BfN2FPPAL163KMK5pjIMaCHmRxXIRzE20OEERcKQEkROSKMAckaGa/oyCam5hHf3Oa+jJ7rXa9mMe+WOIuOO4BjD4PsW4mHUm3yPGB0syhp/yHK1rq2XZWCAI3TLKJ313m/jYLK3uUdrCIO73vf0/2fvbbcbh3Gl3QKVnvXe/82ePdMWcX4AIEGKsp3Y6cRJPWulbUv8JiW7VQCoJoxfFKoVijczrtDNzFBEIduYtXfvmmFJ7KOOtmvB8Rm3YDQsmTosBSibpalh+JLSN3uZHaobpNahTVKKGaKoQqv2KREdp2fQsSPc/KSuz+2TaU3qokABjkYvq0pvGYbcuE+eaehXDVW+q/j1HaAA8n3gXHwuP+E+cBQ2zz9nfkLf/yXf4Vq8R0B/b/5VimNfdfgRlMXzSE8BnRBCCCHk2VBAJ4QQQsgv5kwU+mhZ4Q0cZYWIPgviAgtV7u81iY5NfMznughvoaU1PUhLAtj8zDb3K+qYPNQ1hDwFpPRdoruQLpCS94+W1FUPlx0i3aDenjzAS+GpBdak4sKfwkKzV/HduvP4KIA3F6EFQBEUvAGb+ZmrCFCKhdnGBQhP9vYwcbX/dwiR583tczGLjJPRwrLPH11PeQ0EtQvzoQTntXI1NP2j7cno8eOwZst0MtJX9DGMyAve7prF+B0QC0VaXfiVbcf2p5fQheWVIUR648YZ4bQ+XhJJnM7GIUPT1QT4bbM2ikDM5dzsYt5SGbsA2G0dRrvV+x3GFOLh3qsg9wZhfJLmsD8Qn4kxHh+kH0Xxea7n9Tobc8xlrLhTTP82PHo//wq+2xgS8pN59Hqb7zFzedc+Uzz/OB+dt8+4vz4inM/fnXpuN6sV2n439Dy9R6u+8fuEEEIIIeRRKKATQgghhAzMAumpa+WVvLH/ebwPj9UseO4Y9kZX+Gc/FmJ3C8MsLmqHjB3eJ2jhqfVU4J0OrxxUBOYhW7r/axfPcRArW1T38K4dCsoVLh7gSZe1pQmwXhQqtAqgF0AjzP1m7a7WR20htwXFvYMVglpjPAuw70D5C9QK1erjN3votEK7EcCxsVcGbhYlR+OAQ5KryPR+JaJvgM7rCYt0uU1ndbyDlm3V9yTey6od2gXktl529LHf+9jvFShvwEVtjcQlsO+QukNio/TpCbPOa655tvuLos/tMMwyTq/PcV4GAphhhhSI7rDd0SPEuvd3h4n+F/EFrW5QolDdWiME4gYnO6A+l23zd/VL52QM2/jO5MbO1/xsDBOHV/e4s/dYpMX58buf1+d71WdwzZDkFq8sOjyj7b9d2Hvl+Sf/Fp3e3/pMHucrx3FlmHbP/TKn0+nMtE6G3ySjEaJqxXFdncH1RgghhBDyDCigE0IIIYQ03iOWf6TcLE5dMD4pc+FXPUS0JjEYehDU7UEa0Ddsnqpq5HxJeJ2bpF5VhXmlR7P88Z5EIgHEyxMvIIJN6/xgT1shqTna2mFiOFo5zQs3vOu1AvsFKP9zkRJQLahaXCs0o4IiG/BHUOqGWjboZYOWC3BxsbLuUFXEvuj9wWR4dWsahxOReHi9JrTf48l7xplwHuvgDWOUA12km9Ep3TNFxWjXXO6ZABxNCdF476KvwowlorlVIPtfiCj08j/o3621oJQCSddKyzKPWzNYmdbkyTNvifWXumEbAJRuG+DnBd4e8WurXgAUNwCpJvZDLaQ7YOtKqnmfK9D2g692PWiI6XE9tybfWk/zOZner/Llcbm2Rs9E7jvF9F8rYn81j4zdbxfPCbmXa9fZfI73s59DuZ3kynff+K2av4N18bm/muHbZToXJeZXQgghhBDyTCigE0IIIeSXcss790yE6unkkHolfp7VWwH8nfK4B/qwb/qGcW/11B6FiW9NdDurP4vnKe9M1mYjmYZ4n89J0hLFPGtDGA8RMId2z/1WMaHUhfeaymujGN7tqgB2E9EFFpl9E9S6mWd8KRC8QbYCdVF9kw0VJqBX2TzvXyur7iaoh5DeHoTu09xkb9o87vd45077jA+ez9cEybwGFvPn4zxO//ygNd6vjgP3Pfg9Y2UY4X+DCH4lH/J5F5Tb2EdSX5t7HFDo//7PjDRKAUqBlA2yFWB/8/UWBh3SRe0h2sN94kVvfponQY94gDIMoUjpWwfUApTdDAPq7uu3ejf/euEClOrLTwBUYFMX0T39bB9x+DgP8mpNzuts/Bwe6UCwPSYAACAASURBVKMn+q373T2ifBxfLoSJe+ZkleZsrT+TZ5Y7l3VPn55ZHyHk87l2X+L1+Hy+akzlylfbbER4/D+F+O8bSe3XQ2Qk/zv8bsnh28dy+ytFdEIIIYSQZ0MBnRBCCCG/mKMofv34yCRLoYmcUylr8p7cs0eoogm8ChMa1TxhW3oXz9dieH7Il4XzqWErDRhTOn+I1wXyRd+yOByuuk0MnYTnltGEw+ipwAXJVpT3HRXQS9K4C7RUE8zrBmwFRSzENorVXf4U6L6ZUF/+QvcNWndALtM41Mk4wEXNQwdzR89EyjNW6VYPWmfjh/G9QCBSvDQzUgjfa3VvZ6sl1tU8yY94A0c5MVBz+1fvbyBp5qNYVWQvdN0VFQr9C0B3YCuQ7Q3Y3gB9A4raepCCCo/cIBtQbKzMECVGZqFGSx6bfhiCYWuB4RITM9ywRBVSYKHnqwBbsXVWw7O82qtUQCtUSlrscG/0aqK6+rkSeRbXS2trflDuYSOGc/Nc6HTuWVwT0/kgnxByi592r5jvhRTPn8/rGgnZN3H+bZZ/7+fjKVT7u7p6lvgnXWOEEEIIIf8WCuiEEEIIIQDuFc0jnTTBPB6KHcXPWcIayQ/MwvM4kwT1Fs7dhbAhNPXKW9mF64MId7VLC80tC+B+UPr+6Aey67UAPTz6dLx59FrYauulhWMXgYWIR2RTE08rTGzc3rw9m2mO1fenDtFUTDgXbNjExFWVDbpfoCLQWoHqxgktdHuMmU464ywOnw3UGSmd+r7ow5zEHOU5HQYqHXNvexE3aqiI/ed7SPTqRhbJq/tam+7mnoeyN8pt+6SnstTnNheRnx0XhapHDNALVN8gEeocCq3axHMtBSgmnkNLcuSXXvahL6uH011ol8Ppvi6lAILNRHDZXQDfoVUs0oFWE9J397JXsVcpNj0F1q+aruVYG22O86Bg2stcbT/1fC0etnN4z3qdxfBZcF+dX5XHB/WP84g49JrCEiFfwzOvF4rnZIGOH7pBX/y+nz63H0Gf1ghCCCGEEPIOKKATQgghhNwtno/MInpI6/eXM3sJ5+Obv29qov1piGShEC7iri+9mD+ApradaOaDSJkPYdTN+0kx4VF853TtKqWKuHAZx/2cKqBpz3gpLoILVHbstdhe6BHaXSLceYGF9bb3ugsq/kJVXFuUJOafMQvZywGYBmhV4Hs8gFdGEYCgQLBB3HvbPNHDuzm06R26rOszH6Cm9TZfSodhmw5EmP4w2ChvfSgjQoDAvM17qALgYiNQRQBstiY2NQF9ExOXRc1DfBW5vj20zk07WeCH24NAxVfW5l7utfbLMkR0qb5+ixs4bHa8iAvvUaekPqe5e8+SuZvZEGS8e328TDxYBhnhWBLyuTx63wNoMESOnP5QdlaCeRbOee8nhBBCCPlOUEAnhBBCyBN4hvjyWvRHr2tlWYd3Z32cRdf8QDfcVLPIVafPs1A+hXPWCkFZtPNkvmaH07ZvehL0BN3TNdJI9rYf35nImysJ0drztz5LC8HePHBVLZx19tRR2LFSgd29el0k102AWiCl9OJLgcgGreJew//xbrqHcHj3h0CfhfuzuVlZCGTH38PAxsm991XSuM7jjWnIAAAFWjbzskZor2GyUaG62x9264tWILy3k6FGBHof9W1N71x8Hpqf15Z0oblFOcjpV2vdy1ddnG/KsX92j3RVRAh2bGIO97GiVKGyQ7H1thUXp9/MoABbhZQCUY+Y0ET0MMLIhhPjddTHJM3VoX+53d3jPZzRragC6O5LqpqgLp4oxk12X8J+fUuMqQIq/jY+W5t0abQRQ3hcff3I9BC/zeOZIc/80D+OHW4UJ+lelXyPvYd70t1KQ9GEPIb+sjX0eH+fIaCv7n3z+1WeZ1lHfdWcyzT+q++Q77oe7/1uWqUr/Xfa6c/pODBv0+TGgodw7Tn9dx0zQgghhJDfCwV0QgghhDyBRwX0j4otn+U9dF976rD3cM6b/87KPRMTh02SUxqZ3m/oXuo5fWnlCDaYJDqWsRw1RRe1xdOuxHLAhO6kQ47C40n5kTjExBCoTdXudXiLNQTm/JxZYf1rOnTsV+6Cer1AS0HdzPMcIl04fSuA/se2cd//YyJrvZjoul+A+vdEeFaX520uagsNnsajtS3erFyevb0yjc4soufXNmbWl30rwPYHpRRI2VC20mZUa0XdL5D6P2j9n/UHf70vsff76O3UdF5VRAj5ioIdG/oai4kO0Td1M+ataaYhCqeOKGwsdX6YfJYnHjKbYC8QoG6QqjY/FahyMRFZ3PO82J+UPxD9C9k2iG4e0l+geIPqm6XzNScoaehj7ZYWJl2hfnX7HuV5VWuscm1LtP3rERYUG7D5/vQRMUG1h3ffL7YearH5EbFjJdVR7do1e5LY6x5pLMXXU3oAH571UW9bipE3Ji6J8iud/DBXUdecLoxKJiOTwQDlFYn76Opu9l4x/N4yZsMEQl6BR9bqtbyzGHt23X30d+AzBPSPtuMZIvpvFFvdYO6mUH82NpH/nt/+Mny3GxHSJq+d+LUwC+HTdyKA/uP1N84dIYQQQshrQgGdEEIIIV/MIwI68PEHUbfqfI+4fq0Nq/T39Pfo5RnStLaHgDuOgn3ki/Mh6M7uMlmoT3Vm7xo9EXSqujAX9em0P/NqRFaespNi3KpP6ryM56FbEvrjuAJafWtwhYp7H8P+UNDaV/78B1LeUOsFqhtwaRtSWz2xJ7fG+E17Uc77vA8ftLdtNcd5uA/2E3JMGw9wZdTqq/csQpcLAGwKkQ1lNzG51g2omxsFWMj8wZsf5o0u0DSONk5FgNrdqP2lTE1MQulZf5NAve7jdFwsk3gv+5juQN2aJqtxrvie4roBtUA3T+ufAQE23xfdxfG2pNCXoQ6tOLmWD9cDRvsO1bYtwGALUDzKQfGUIma4gTeMe9VfYCHeYxhMsJb2XF4BUTM+CcOENnxi46UeJWAWrw9r7mTuFKNIDoFMmTUyzYYgq/EaBut68u/Fe+/P10p4nwDfz1BAJ6/AZ63Te8Tzr76pPFr/4UfAL+HZv/dXFmDXfr/f+j9HfO91o7hefDIQbb9jFd0fP76wV17mcZwQQgghhLwSFNAJIYQQQv4Zz3xgmh/OhaAOf1/9TIG0B3mS0sWDvJwv8uZy49ii7qbBCQTVNTuXIFvIdzlkG6vR4/NQTeKc72Uu7qUsIlCYIKlIonLT0dWFYkBFLXi9WAtN1xbIm4V4L7Wg1gsqBCqe7+LlVbinsBWuSXA+ncITjfiYaE4Qc3DjoW48f93VxVr3SC7wMPXAJoK6bZD6BpH/oZY3aN27p73+Rcx9FqNDRLfpKihiYUprNmQ4dOWaYD6vzejnxwQHVbV+RBHhtb4X2xs9vK1VoaV62mLGBbVC3v6DssE3M7C9y6G1maSEKYEZT8jU/Ml7XnubWnOGHseDdDcEEHER3dtZgPGai4mN/5YJbE948yZXgRmFKAaP+SO5NfNYz61MYv4QASHnDWuWuayPzyMhhBDyfbn2OyyOx++BbIwYx7NYjukzvzcJIYQQQl4RCuiEEEIIIf+UWaAG1h40cXwlZGcBPKcr06u6iJ4fCuaHf6vyZXw/h1Gfm4UuoptEGaK4C3AhtJ4+k1yJ6DgItNIEXun15Pa0196vaFGuvMgG2QAtO8oeI5J2Bq9ie6uLuIjpQmYb8+w1PNUfHkurbgJdkM5Hm4PveK77+yZBs6oLumIR6DfBpoKqBaWYYFxEzeta3yD1goodVXYA/4N57/cQohZ4tHrLXPYVC1gfTdPksdxbmAwlzrybl9xjPLJ4gN3mAb1R4XVdfa2LK8zqxyJ8u27A5Q+kmKe6iEBKgXo4975kYs5TOyUejS/WaOv0+O+xOy6gA9a+CgBvgFSIuGAvAuxmIKD7Di123YlW6G5h/1V9/iOKwHQNStujvh9R6DiU7b0PpOraEKJ1XqDLOTuzIkmH9dZc54VDCPmtnN8B5t9KvFcQ4H2/MVZpzy0gx+2OVjXb7yVNR/rv8Vksp3hOCCGEEPIToIBOCCGEEPLPufUwbRaoVoLV2f7okX7laT4/HJzLFRzLEvSw5Ln52s+V4kLbFJ4y9taWJNYtn12GQHmtz/7ZuxJBNrP/T+9CpFUThKXLgNYV2zteNvFRUVQRaCmmL5digmbdTXAOYbb1cZ6/eOzqQrPMZ6OLWZDMhguLDC1FjIPvzd7C16tpqQXY3sxbvJTNhXSBaEUtFVJ3SN1R5T9Q/f/Q9ndX83JW7Nhhe7xLCMWhKktFcW/pm49/szjb1sd88uzB9VLl7SjQQ+sDbV94n2OLcy7mkV6LrzN/rRvw9sfylg2QzQTqzc97/SGsQwpU+tqqQIqosGrhODI9Kr2veS1d7Ba/BmJeRCBSgT3Wnl8rvl+6aoVIhdbajScEfT/1qLs1wfeN92HpKzWvudmAJs7nfoRIH+M8k/eAvSLA32UwQQghwSw2rsTHLKjzPkOuMa+Nsjh+7/pRAPv4e/Mgnp8dI4QQQgghrwoFdEIIIYR8MY88YPrKh1NHEfW5Zc0C5EpQ1ulcTmP+12ii7VzeSrgMz15giI++FNJCTUzid94/Pbc7N2tIk8qUODeL7NqiTKsqsIUxQBYHpXdnsBMwH+vwpJUI8918wV1oLX9QpEBrgRZBrTtQLiZU1t0FywrbT9w8kA5DOrVXXNxten4bjZXRw4lhwTxn4m2o1dqNHdU9s8umwOamE+UNwAbBZu+LQvY37BATY9UNA+oFgIV3V+y+v/bqQXAYKRysKE4+rx4c57lejQHa2ogxysELmoc8XDsOkV/zxIdxQKyJAtQK/e//oV52oGwmkrc/sVexzyrpnJioHqVGS8YWj/3sERK8re7RrtiacYJ446UIJNZXKRb5wI04mkBeQzz3kO7VDTuKeCj/Lqyr9hD8vUGz91uMUwjkOrR3mCud5lvOFvzKCCeKnY1FVpxeSISQH881cTxez+47q/yP1E2+P/ENfOs7ZT6Sf1uUQ5rzX+/aDegQv4Muw/n+Ov8RQgghhJCfAAV0QgghhHwxP+1B06o/7/FwmUXKlQg1i2IypZ9fBUeP9Xnv81zOvEfzJHiGN237HGJ9KN3SBbcsvM2e7K1Mf8AZ1SbhrT2ejE2gpZhXbhMrxbVSr1PEPIznsVIrY4cA+pZ6XEyLBmyv9VJQakWVzYTL/QKU6mI67Fj0tYm4isErKQTzaTp1GOd5zs7QGB0IdjMK0OoOyAXQiqoVqn+gqij6B3gTE4tdRC4iqCjYpEBrRdULtF4AuQD1LyB/fcw9RL26cK4wA4Q8133K3snKAGMhvC4+59W6ejzdw+v72oy50Wpj9N//QsuO3QVzKQVSNvNI32ysUApk82PFvNFFituGZCONtLav9cY/VBEP+OpzqBY7QVwwRzGjBtltrqQWN3JwgXzfTVxXtbUnAuw+T9XnTPsoDHYFA/P94uxBf053nIv1er21hlfp33OeEPJzObverxlp3XOc/Exu/QA5/y1x/O0L3F4/+bwb6Q3nZqNDQgghhBDyk6CATgghhBDyFLLwNHkO35VnPjaXtRKZsrC5EmVX53K5cx648qZoDxljX2hB90pt4nUqL0Kcn2j54ZGtOU9OmLVZ1wuHvjY3dPO27XlCpF8MUbh+t7JCmNyhYoK26aEuam4WAlykQopAd/dGdm9g7MXEy/DUbqK+i51ae3NTT9s7iYe3kqb2ZH0Mh00gNi/m2qdIBCakXqDYUeGe5Ni7QFw2iBbv33+gpZpIK5v9FfO8R32DhUm/oHmoh7e9TmtlqZdqPyZ5blcdOhPPx0Jb5PR0GYjPucS/g4HC4uG17m5ooLa3fSnAVqCyA9sGrSGqbxZCvWyQzcO4i41TeKTbvMm66WlcZDo/C+uiMC9yFVtvxdsuWxfpVX0twtpYK9q+73KxvsD2TTeBvYd1V48Kobld+V4yW3YAKXEW1+dk88U9FzBd/8ustw1GBLKeS0LIDycLkbPRICHBewy2+iEJA7vhiyq+bVZrbD7mv4mG81ybhBBCCCE/GQrohBBCCCFfwrWHbrPIdCZYzQ+YV0I6FnnLIn32TJ0F9oLr4ZgVkgS6UbgLgVsW2lquK7dTx8NX+x3e7zlJqJRTIQoTIlvVYmG2m+opwGb5pVq/ddssTLbC9s3+6wJzddG8Am1/bqCL69HSQfidhGNJCYaDZ31WjPHgxcRhbGYUoBfofkHVP5DtD6S+Qcrmf3+wlT9QtVDlWnaobtBaUGvPD93MK72KhXhvnViI3qLj59M1fSaYr/p71n9ZpkimHm3UFXkGCkT37qDuodB1KzZvHnXAwrf7+wjrLgDKG1D+mIgOXy8e7aBNaaqtb6ve04TBw6FnTU13YR87BBvaWEoF6gaJqAp7AXAB5A0mnoewvrsYr917/WA8AoxzdFvIXjMoEf1YEyYIIeQR5vsI7yvkXq59pwXz7+ZrIvjqd3Y9SUsIIYQQQn4iFNAJIYQQ8sU8+nD0ngdmn8WZh+2c5kzIzmlWAnkue+WNdS3PNULkHTYMn/5cZO/uzmhCs07tkdrPD+q5uM7axdaWc+qyukg77hGe/pXuJ9QKUPX9o6vvN+3iZrR79hY+uANnyVV6k1xUFRFAN9OoAdMs9S+w71AJobK62FztvU4e6piG5cy24cbUWZD4KDvmAiaetnGJ0N7VxPTyBtE3oBa8bbFvetQrENlsiLY32L6ef1DrBbpv0PrXBNsaIcQX857Ff0lrpSnLt4wD5MZrr6aGkUazi9Bm05HlffXsEm+gvu947I0Oe7+74UV4e0u16KylmOd+hGovMMMJuAd4cTFbpPlKp5VpurvA149faTJNs0Q+mCFG8/Lvc2NtslDyqGJRF0oF1MVzFJt7EatUd+tD5I390aPdw0jFPSmsCvKxoEzTcE1416mOK0S6g+FIS5BeKZwR8rM5E8vnV0KC+bth8bt6OqSHd6vf0ysxfWWwSQghhBBCfhMU0AkhhBDyDfjoQ9KvFM+BtZCdRar52K2yVoL4Spha1XHWtvl9Li+JsQfxPKfPolZB90jX3ozkiQuU5JHuEngklfSwUuUopA0e4cV1YjExG4DCwju3bBHaOtx/tYziZ/Yulyj/OE7qgqW12ERJKR7aPfpeAOhfqFSIVvP2FQ+pLXsXLaW6oAkXQtHH6vAA914FXVHV99/08OImiIsJ6/hrfY/w67IB+sfC0KNg/6MQeXMDgxgfC11uw/IfQCqk/oXuG/b9DXp5M2/0fQN29WfHK4HDBdsmnOeupX4OXTwT0xddRywTdaOGWHaLMROBRzBHrJYcHcGG0tfl7m3OBiCiJlSLh+8vsHDpyfPcvMW9rKGPNgV2mfjKEQCiHukAff21afdeqPqOAOrti+YUiGhb4n3+1N5XtWtAxeYo1mEYrexj+4ZBhRsGtAYJxntCzpvH8Nq9Ku4LuqyWEEJGVjcK3jx+No/8dr/n9/St/Ktj8Zu4LtLl84QQQggh5DdBAZ0QQggh5GFmgVqn11WaR5DpdXXujJXH1yyg5+MhFnp/mge0H6umZuoQq9z8hUPMFHTvZ9HcvsWY6OzNmoU799ytdnx2jjePdKB5otcuYJoY7+GuLU77NF7dIEBdsNc0HqbBF6D8gaBCVSFSocVCgpuIuVsbatp3W7NXU3oAO3ji5j6vxibY/A9NFh4QL39wpDIBXS8bqvwfmov0tnkZb5Bie34XF9MhBUUKqmzQ+gaUC8z9vu+z3bycDwKrnuurvaHXX8+0E5FmONGdpn3s3FDhcGVIrJMkVDehv3QjjraWvPGba8DZizuiGlSvs4nn6aF605/dUz3EZF+vkl77Kg+539+7sYCNcfRZIChdONfqkR0qtIjtYy8eql59PaL27QdaDXn9pbnSaHw2nrkmYt0jYujyrTfgznoIIT+X9kV1Z9oVj/6eIv+ej87Z/Jswiru3vOHH0fSaf6Ot1iW/pwghhBBCfiMU0AkhhBBCnsK9gtKzHvY+Us7sRZN3kZbFsVyn9nSaXofmdFVbpbiGXV08zKL8CTn0eWpS0ytbdeGHHEKgmHBYShI5wyM9wlXXqa3Ja7Z5Ic96r3umy4ay/acJyVp2SK22Z3YI521P6vAErl1I1xRu/djp62MS3vWp8YoIeD8/DK5JhHUBXf6LehGobLbPt27A9uaO+v9B8bmycOUbRAqk7EC9QMsFov+D/N0BMQ9pbZ5aWURPE7Ts16qP965jGZfnoNv3kYgTPWJB1o+n+mPdNvfumCeb4lLEw8e7sKyAhIANNGF+8FjL0Q+ax34Po95mrO2hnsqaUaCqpu3G3SjFDQDE51e0QveKWtC3Eygh+C/Gv7XZr4/o++CRHoP7AGHYkOteJ3ysHkLID4fiJUncLZivmIVyTK/zb5pHyYap9GAnhBBCCHk1KKATQgghhHwJszB9K11PI9Pn85zXHgLWVo42z9MskJ8JX+Zh3iuJh4PZg/xaK2Td9OYVPKfpoa1bMHUNIdL+RDzEu5hAPzjc5tDiocB76PO+YbX0V+TMqU9B2Vx0rBA1r3Zxb3MVsfDfVfxvhyK80xWoCtGaRvWOh7RNFxZA/qDvTW8PeVWmB7KS5yP5OWuF1r9Q7OYxv212TGwlKN58DAGRYvunw8LEi2woF7VuK6CoqChQ2a1dOoc8lcX7a8Yj0cZrgxBzlA8fvcQUTVpejIuOS1swKtfRxGpCuWiETu/rLi9NE9f9Tb5e1AX5IoBejmtwEM1zv2R4MaMB6fWnUyIFsf86Qivf/VqLS3QDZC/N4ES12nochPRcn05K/spiYWxq6siNPGdzfzbpFNUJ+X3cMriaj/M+8buQ8YtwNoqbWZ5fieeTIdwj7bvrGCGEEEIIeRUooBNCCCGEfBn3eqSfpZuFq/fUO6efha/4fBTwx4eNgvDOHdol2h5eqntPmxjpx+e9oA8CdlTlbWkhuL2+JIbHHukhdnYTgMibuxuet5u7GW++p/VC2NdxnBTmwW1abIWouoC+mfd5EWjdAbGQ6BCB1N1CbKtCsNt+2sN4XxEpBwogb4C+oXl+68Wz93aaBh6ibGkSekVFrX+9HAF0AzYbC01hwrHFWBbIVlC0ALJBth2yu3e2VqBWqAoqLn3O46F021N8GMwrfbsDuRG1IInOh6sl1lZ+mH7QabSP5aZNRIeZEQza9nBV+N7lrQxBV9orTDzXS68r74UuQDNcic9ZPIeYsUM009d4C6zQBHZAqkK30qdBYFEYymaGANP6bwYcEYa/GROkgbn39rLKi0VZz3TqI4T8Yla/Swi5xUo8B57jdX7yG5ZrlBBCCCHkpeGjDEIIIYT8cs4eeM3HV4Jgnc7lNDIdP0tz1oZrx4HuMR5tWXH9Z17PHe0bQ4T3z/N49L24j6VlMVCGzyblbhYqXJJwmPM1pXIcG5m7koRICU/yYvmbF3rbZ3zOl/oqMBHeVUmRXka0qYUH3wTY/vgnNwTwcNii6p7mte2HrruFctda3fv8YuG2PZ+28O61lTO5z6fRLTDbV3Gtdw6hPg6QRKj89py4QDWNednMiGD7Y39lM6/0skG2DaUUlGLjUSCoF7X9wKPtdUfd/5oov//te8Av2mW2Dns3qMhq9BDO/95r0Y/PHugtqfTl43Otg4Ce19xizRc7XkKpxtbWl4W2L6Fgt7UWhhtDewWA/hfQ/y3av+gmgK6Q+8HcZBFIMZMIKW7oAMBMRTy0fvV7kipw2aGX3Y0ebJ21NL69gGjMq61B0R4Mv7Z1iTTOmsY9/+U0/l7TevbQ+GvjnTGvIIxf5nC3c96VEVDmo8LFqj/X6jmmyzvcv6cM/sec/C7iu2LFtauBAvrjPHJ/nAXn+bfs6ndu/nz2+/rWb2K4YRuG7yY9fA+tPq/afute/xGujSvv8IQQQgghrwY90AkhhBDyy7nngdY9DxpXAnscjwd42XZxFu7e27b9znad0evvpcz1HR9sjzLXTBbE45A/LNUQGCuAPy6IS9qrOont6Ps8j5/9UekknKoLz1qjvuibi7PZe7kJ6OqiInx/9hC9XEAvnq+UpEH/gRYP1R6DoWLiNNQEVt+TGrWYoYAWYFcL7Y7NRUu4qB5C5t7DvIcwjzo8ZrbXvX3QEKM1xMY8Q3FkT0YEAujWx6UqIC5417/e1w0ob5A3/9vesG1vKNsG/c//g4r/10EV2C/A/j/g73+By3+BejEhHSGki/fVAsR3N+3Fg/W0XzkOvZZuZJBzytzvTKpHFcDeDDBaHbNXejOYUJszKGorxvaRh5pRAbBB3AChwEL6V7H51hRy3SpMxgRZTG6v/kC/Lb35Gkrh3yFQtegGJbZOkBDSxYT9rRu26LZj/7MD1cT1tt52X3v+J6JALRAFJEwBVN3mQfMU9fbOAnp43cf60zA+SP2W1Pdhrs7uKmVK1wrBcS3N6eb37+FM5D/j2n34TEiX6dgtwZ2Qn8i19X7ruvoO18qjRjqviH2nHpH0BxzHJn0u83H7jXgrrwC+Dc74fdMNkLIBH3D4nvon4/7Kc0sIIYQQQmYooBNCCCGEkHcyP0DNDz51PDYLpwJkz33N+ydLsYeoUky4E2lCe9Mek3jcygsxPsoMgVTRX4e254+9ve2MWBO1VHsVeBh6F7ol9VXtddA+awE2oIiiVrgoK31vdPG+FYFWseEovld6DRF9DFmuGsJ4PCjOlIUwmQasdQrjM26JkqJOE7/rXkxcVxNeS63Ytw21FDdNsP3QCwoEb9bUWuxPq4Wx1wrAxsu8os8Ej7xfeWpYE43nfuS+5T6krgBuZBGl9jUgUVTLm9dfKlhTYjfYEB8P66OJ1louADbz7BbthiAAmtc63mCi8iycR6NPwtO3RYW+uPy9ugd8REiQuS8AtBQTx0V9Sdn6ExRb2/vuWw2YKK5u3NEvYVnsrGADM86kTq8f47YUdY9o9l2EteA7tYUQWnlYpQAAIABJREFUQp7BygDIjfOWIvh87Jrx0+oenn/3VPRNSMKgCzhG4/kK8ZwQQgghhPw0KKATQgghhJB3Mj+MDBEwe4W6CJzF5na8puen8ab4cRfdxcOPS3gzpwevZ0qbezCJePrJG17jnxwCVEN71lS2h+iuChUXGYuXX6vvmd77NDgPQyCb9d10ce+PFuCSjA5UexsLgBCZQxCePK6hihoexHnYlpycdOG+N9jF1TBqUO+jXixk+2b7Z++lQvEGxYaIlm82CptHOC+2t7sW3xt9h6oJ51p32x9+97G7SVdsh6Ujszdy9kBbMBkU9KLE9663ozp4Tk9rdXBy9oUSIdCL2HKNpd8E+yz+m1d48fWivl96NwDRXu7Y+N6GkuYrDEPEtxjw8PHSXqdipJjxQPHoBtXHsVRINU923XdAfO5rN9Cwl4JSJsONwz7p0bhZTPmYWJGD0s9nUsNO6sgDQLGEEEI+j1kgz1v+5OPXPk+nDtusTMRWNwejrfjOXERHoXhOCCGEEEIegAI6IYQQQsivJESx+UHl6tj8eSWEzvlc4Bo8zCPZnkTEEBwrTESPB6zVPHx1FCRtL+vSy2uvUV8IkkkUdZHUjtTW/NDNu7NyhJ6uTWzW5L0MMa9dC38+Dc3iVbbU1iFUOPqD4KpA3cwjONru+1Obo3LyvJLL9Lw4vIujEz7eh2fFUTe6YN4V/1Ekhgv50YwIh3rZrLlFoLH/doj9IhY63MXkUUAP0f8vUKKNrQN9zhLSZsvTFXHP/Nyb+cH49DmtO83zgvAS78Oh0QetOWFvjWwAqqWrFS00uRRoUTMOKJsJ1RJzboKCuKGBFaW9Pgyy9DxhU5+Q5qq/ZvG8j1xueqwLXxNNSPfxLC7IRzj/WszYoaqJ7L4cbH/1ZLzRjGWyIUOar9agMGKJNtiYHYxDUm9/jgh+q+2zAEQIIa9AiOXzsfw9cO1VgNkQC8Ba7D7eJ+f9zrsXehybRXRCCCGEEEI+DgV0QgghhJBfyewxujq2ShPpViJYDt85C2txyAU2Sfm1dFEy6mp7SXv+tmf11o4JZHisGmK8uECrB8/iSKo9i6urw+PZ8FAWQXO5rvCHvr5veBahS5RfkJ8jC/oe79EHLaHeu3AcYdvV93GPPdGbd3y01evUfczv6awD+SGyVxkCfIjd3sewOdAQZC0xhrkNsRVi4qpUaNmgm+0NX7bShgjYoAhP68295aN/O8I7vY07QpDNInqXUPvMx3qRKQS6lXHw5h72Ps1zipgUNEOD4ZCtk6Pns6eVNMe+x30Tg9vatXFpBhuqECmQrbSion/eqquP+MfwtOhtaHPWRfShx3k+i/bVrS5iV4ssgH03I4DYlkCrRxJQYPdxL+rr0UX42g1QujiubjSQ1k0e6zZ20sfrZMuBxdX6A1kJRzM/fxQIIa/KSkDP7yUZwfVjQPz6WN3fdPqbj8/vs5iezx9/BxFCCCGEEPJRKKATQgghhPxq8sPHeLA5e5bODzTPxPW9vw9P8jmutAqAC7oXeZS1YxDgW2hoGYTuVl8Iqm3j8VBy3VP4EE508k5Kz127aBdSo3tIiZrQH4JlEeBy6XWGJ3A4bReBeNh6i0CfxGkApRRIhKYP0bio7z2t0CaklySMh0huYcMHj/YIyw3tom4W1YFusBCe5D5WWmKIfBDmeWrDF+dibhXQDdCKWr2vaTw0PLa30gXYWgH8sdcQysOjWWvrn2iIvdN6c7G4Cd1t/Fy0VX+QHqHyo98t/e59DDHc8mvzOB8f9fcl4ysjBORWboyDi8Gxfz2KjU0Rey+Cum9QuNGHxDJOe5a7oUVfxxkTA3SanraukoiOVF7vh63fLqzb+pDiBgUiwOZC+lY8GkLt87QrpCpU45yFf0fscT8YI1QztvA1PWzTEPPVrDaiweci+vxuMTnLvMd0H+URAeZaXj15JYS8Hq98/T7S9tX99doxGY+kn5zajOey5/j8PjObua1CuhNCCCGEEPIcKKATQgghhBDnHpF8FtPjXIjdfi6Hjh4Iz6U65tUIi53qal7nMuXPnu7FxGcJ7+ECQUHbO72FhQ+SF3R75hoPZEOI9wQ6iXXZ8zYLlsUFaXVRv3g7xfvv6qeI7YkddcaraDExt+gkgmsSnL09Wse2R4j06p7PdcqrMRfRgSz+a+9rG/P0V/y4hCC6pzaFF7FA85y0+SvdMz8E1ZL6UncXnaPMLqZLiP3tIbs08dd08DCScMFcPdZAE+OTeC7e77bnPNKYxBwXr0qPyz7ytXW6pzH0xLW6iL5ZH3f31vfIBc3Lf/BkD/G8NMFd8rqK9qhCpLWuz1F77YYcw7nIMWwdb0YErZwikNb2LJ77POzVRfTN97IX91r3vmTRIsYoxPdBJQHGdSYpzzqc+7Amh95fE8bvSXMPnyXCzPfOs3spIeTz+e1i66P3mjn/WXmr4+n3TxiKtfuhR/k5iOln/PZ5JIQQQgghnwkFdEIIIYQQklgJV1cegB7SZXVv9WAzC2YhuAsspLtgECtjr+VhH3X3VG9iaD2k19QWGcJJp3ZHmarDHuhA7Lue8/S0kNrbGB7N4QleBNjdg7xl68YANYdwz0WLALpBqjaRue9/7iJ4E3L9cxOiQ8D19+HxPXiiK1pY+OYtnueq970/sAagxcVbgRQX/1N+LWLiMPx18KDOxggFeMuGAe65vfm+29kbHdU8nrOAHuVJjEmBxv7x4VkOhXnGZwEdVk7dcPTuzpyt8Tit01pI5YeHf622/Kr2YwLTAmLv7xTJQMVDwIt5rksI27GuByFd+r/pkK4EdOT8yUsc2gX/rMRHyHkJb/oUhl12SPF97HeYgB7iee1GDm2bgBDrI4pCrNFog2YhpFkynI/7Tc7uMd+R1f3y7DNFdEL+Ha9yD3km/+oec2YkJOlcFsrjbxbPf+McEUIIIYSQ7wAFdEIIIYQQMrESc2bPybP0+dDiIa2Eh9F0zkOfd7E6CWyDB/nkWZ69e+FhtFO+JuwOZXQhUZIAmAU5bR70ZcpWzVPY+2fVhlDsr+EFXpJYrerbSG8t7bQ9unkEa4ilfc9vDRE89t/OHuaio3iu1UV8ANW9uvI+6gDaXu1trNN0zHuKi+00X4qJ6K3RpU9NTcWMZEOEFLoe4enshhMunrf930MMb6LrLPZXqBsw2BBEWP7oaxKJdTLCaG0I8gP8SYTOvcrj0iIL+JiKr5NafX1XDIJ2M1zwNV7F5qoAKi76l9rPe3ulresoSvIL2vrLe6MjDZcIhpDzU5egamusqoVwzxECFLbdwO4h24t07/NaXfi3eRM1IwWNy6/GtRhzhzSP8RLXF4BhboPZ63C+D63E89W96jswC0Crz/k9BXRC/g3f7V7xL/lo3yX95XLyvRnQ4bhC8vdrOt5bkcXzLJz/5jkihBBCCCFfDQV0QgghhBCyYFBVP5gfOIhBrdhZHJs8Y88enGqFoLrA7WlDSI+9w9u+5S7aDgJjhFYXd1zW8fmvPxduW4dnj3OYw25roovQPdJ7HrMK7O7hG6JriMXhte1tEint8XLbGxu+t3hqWm0h3P2BtCq0qOuUKZR7E6lDcPcmhCB/8DyPtqOJ/bGHtap5mgt273Ya67JBpNjW7AJUKdPDcPTxDs1eI6/XXODzZuK5Vvc+h0cS0BKdT23eLE2xdmuI1HPY+zaUb30cBqE95nxaZ+05v4xlHQT2bICgacnmumPBlFHYblELKiCbRT1AEtHFjD9EkqFFlF+ywJ/aOusTEB+r3Ieza9nXZypAi893Ecjeow3Y9bXHpNvalR0im8+p+n7oQ6P7dT8YaayE8DZ46fPifjF29krf3sszBOyztszHKQ4RQv41j9x3zu6P175jcmSgmkrIInldHOP9kRBCCCGEfC0U0AkhhBBCfh1XRLQPpftA9TIfyCdc6M7exy19MTG36d6eFiFAuprbvNOzl6uYmCqle52HgJ483iU10LJqLw+lF+mpmxdVhHOPvcXFvZJDkW/Cqgx/KgoJoTk80yUL6GFg4OHlQwwXb3+EbXcPaN20e0Mnj+wyOWprfkjdxGVvH0JEt7GsekFR39fb9+0WVYhsphEXbePW0qD6FtybO/JLH++2N73Phfpe6s1AIAneLbR9LBMf0xDVs2hec38ifxbCtZdR0+c22T5/ec0N0QsCmc5FWSmtAnDDg7aPfBggVDUhumy+XtzYohl/uJHFZuHnQ683nV2biB6rdW5WJwwqkMYl7Qk/7GUuqf8ANkCLeIQFMYMQwPdCB6B+LVb4/LsnOtQF9jCG8GvT14T1LXmYD+N77Z4zC+6reTncXL4Ynd7PnwkhX8tvvQ4/ep9cCdurz2cCuEKHrXzmMimeE0IIIYSQ7wMFdEIIIYQQ4twvPh2Eu4PH6PVysux4vS2zWDbuo2xaZxJ+tYuP437qgAl4ZdCLRcMvKguii7a7iF7dy1zcs9jE/KhTkxjoKnuI6dmrvu1zLe5xDPeoLwjvbBM5XVBPvlutbelFVVxQLV1Mj/eumEstKPCw8IomOmuI1TK1fZoK3Xfsu4fPl2Lh3DdFkQrZKrT6cUQ7bM/0UjegKC7YDm3v45KE3IgikEXwEqHdoz3ulV5qSut/YVSQH8ZLlIkxvUxhwmNRDGK4j8+B4xiNb2I9VatGzFO7CehinuddDC8WMaAZVvRw7hp52x7qxZsUeWP85nZ1kd2GMwwJ0hifXfNifoJmw1E8m8JC6/s41gotxUK4p+vGptX2VteoK7zu21yEkcV7hJKF2L9Mg3eU+a+4JTgRQv4tv1mofZaR0TXh/Gx85+9UGhURQgghhJDvCwV0QgghhJBfSX5QufIAnYWoWRwvi0ews6i+RoAhavZpnmWzQvQUF70nj19BF/Mi1HhLs0+fu8bdduJsQnLa+zy8kVPob0tfXBhFEgU9v6ayRN1rPcTqEI29PyFSFn8fHr/ePwUw7KmdX71sC2XuArJkT24X0N3rWcRCv9cQQFtZJ0JCdKvu6bRASwGqom6+B7bEWJiYL3VD2TbIVoH65sNZUtOTIJz703TvLHhXDHvRNy/z2D8dad/5OhhGDOHCQyDPInorx+erHc8DsBiTmwvd16gqSq3NZsL89MXE8/A81+Lvq3uhp7D/mkTy5pmuli7WWV5rQ8NKNzaAryQX2kXFvADbmKAL/DaAkaOL9q3v6mK6tjapC+bi7dDW1ig/30+m61bE5gBIxz8i8LyyeL66zxJCPpfvdq94HaR/sQBAN8YbBPKViL4ySPtM8nfKbzWYIIQQQgghH4UCOiGEEELIr+TE8/QuJgHsarpVvcdU548057pmz1lBDxPtnriCdD73M+0PngXbJAzbi4mqmgVfF8It9LZ7EBf3sJXS6woRs3lCJ1Fv6EoW3P2hcy3mie4h0MPz2PRmgbR9pKO5uWzxd15uiLB5r+/YrDzGoFj4dG0i6xXhWIp5wg8e39Ucw7W6gOqGB1WArUJRIdjaluUWQz4ZNwx98mD4B09+mzdp+6KjGTJILb0dpXoo+AKpIZaHgYCm7oQ4bOehCkle7xpzEfvMt3D0Vm8rbzFENk7TFGkXlU1yiPHzORL4WoKPnbcvCmlbAMhRxFagbRsAQYvEAKDtM7CfNBIhoreRb62zOqTPhaAbOxR0A48IMz8Ys6yu5jQozThhTnf9LkAIIeR7IO0fYPxNlqO6zEJ6fv1wre8sI//o4ncMIYQQQgh5PxTQCSGEEEKWnAk98/nV51nwPStnITS9i48+DLwn3/vErfXZ8zzHnqt7wK4Sj0K0xh7VCNET/XwL474ShT1sNtAFWpWm6UkLhW37kpuw7eGyQ9QMz1uIhdwu4b0cAn7qYHiXh6dwyeKtt2cOpx17gYdwCfGmFhOiw4M4z4kAqkn8jKfbIfoD5t1eTGy1fdR7vRKh3LMxQRawVSFSUFBtR++237gbEeyljw9C6I097H28tiwa26u0fbwj3Hd60N2qtxD2RSz8fLONQO1zUW0u2r72cVyla8oaQ5rHurT+mzjuocjzPuqqXbwPUTr6tLgsJP3rs5dE48jiBhjq8wqge2C3CW3jhDCQUNgctr3ESxfYwzZEei22vrYsi09tDGOFWE9ohQyXXMskfX5r7NUORBQGQXjXa2pL9Ce9j+v34JUe76+xukec3UefJZa8txw9jPnIiZEBxR3ykny3dfvd2vNdeWCc4neFZsF85XX+bG/ze++TWTSfv8i4PgghhBBCyP1QQCeEEEIIOaAn72feI3jPipSLp+8u61ni0HvbnvNdoEPb31fvIJQO5cZD1y5uH9rZPGPPmhriZzZcyHX8F9ALjp5JYsKyeGhsgYuXpQt9LZR2NDWH/g7RNwv5IXRG25CER3G/3dqEWR3a7EJplCkCvZRetrjgfxjLUYRuwmgRXLY8NJZXQiSus3c5XEhOTfd2HNde8iwHILpDXNjVulu490sSz2H7o0vZTEiX4q8ClQ3du9nEZvE9wqUZHyjUrAl8iSh0CyMAT5Pf19redy1bWxpVpHVTBwFdtUJ1H9dV3kd+YjYCqTIbTbi3dkQtiLXcLAMqmqe7CoAN0M2NL6oZCxSbz75/uo3nUJbAjUA0V41sQtDHcpT8+/gMHRvWogn5MgZ/KCmtlra2IkoAaojmPiZu0CHNKKGieehjG9syWqbkBmHu1WiucA2dXt/LyuTnunR+vE7n9izueYSQd3J2Fd772+5f8KrXeYXqBZi+SR6/n95iru9W2s9sCyGEEEII+S1QQCeEEEIIeYizh6DPeDj6WQ9YHyk3RJ6PehaFB+2ZF6bVEfLpfE4HYe1WO6cymuiZQrjn9sTe4ZJEc60QPx/7e3exPAupIa6ntonv3a1IwrO6eIpw3kXbv3xuehPRxcJt173XHfuNp73Sex4XqZPQrgh7BBnqUFWIugirCg3xGGrDkF2Rm+2AeP55/hThiwxVaLV1YhpuEs/D+7y82fFiIrqWEMndYEAifP2G7BHf9FZ40PFsSCDTQ/YTT3HTcH3cB6FX3YM90l08Km3t5cXrrOsu0EPUgeKGD83coLe9FeTivXvmNy/78PIPr3PEOrI0IsXX5xSVISPrhvYlJ+PBvJxjvSnciMWvhzq9RlSFauH029oWdU958Xnp17mkaAw6DGwak6FBfeB7EPkehH4dzWLV96mTp+nyOPQ0Y05r4/HMvffbbBDwquIa+V08JlD+W3nzPQLsv+IrrvPHDYeAy5PaQgghhBBCyPeGAjohhBBCCPkGrISsz6wr15cF9ZI+K4AC28u7ufX216ZZp2OaRHS1sk0kF8gmJhb7XtYlBGWEOYI2R+ehnVWSb60L3gr3MF6I5y42h8hpH2sS8bMImYVnF90xhRNvcdAXQqMejjSBtTUvxsrF7BYuvtZms9DsFYrXo+Z9rxDIRaFlDlE/NrE3YKGUQyCisyO4HVcP1w+YaH/wYt+6IUQW22Ov8tZpHMZCAPccnxsqvkRm44deRl9CWf2XSQC3gWuh5cU/t+q6yN7m+pZmoqkBzfDD8re9zkU8akC1iAExZ6V2b/9aIbL35VmLhfGvYagwdqttc6BuyNEE9XxtYs6UhOaQrd2A4EY3CSHk9/KIMQHvroQQQggh5PdAAZ0QQggh5FtwUPcwikVnaV+Nswe3s7i7yuevi9DZ9zN7n4fIOHoJuwpsr+Ht3fZD9/c5nHvynO7e0i44+l7k5sleokh7Bdre3nkr9MYQhttF4OUe0tEfoMXSDvVSPE2JtiOdn0ZdtIvFokmOvLWv88SJeB5jpepCfXRF4Z7eUYCHvhcPrV9nUR/jNObjEzF7h1PJdkCTV7jG5KjvBa5vOHigh1HB0K+xaCtLTUQ/tEDGdiPKmFrZpjaE+CSiT3Vqs16I4yWlfYdgInIUuYfmhJC+WRR2DwrRt0CoEI8eIFKhqlCZtwiow5a52q4ldRG9uIgei+N4DwyxXARmVPLS98URmgCQ14Ji7Mf4qv5TQCeEEEIIIeQeKKATQgghhHwbrgnIP42VccCZwcCU7yEBfa4nq7Ch4OY9vVMazXuiaxN4LXuI1aUV10Jeu+dvaMASod49THnfUltT07qo2vb+rrV5eLdKNNXRmMRmldFGIA9f02ItAHaowRqGAM0wQMc8ISA37/QTowhJmZr47wIqCrRWF4f92Cok/bBPeBLPQ3QdlOtp7cR5nY5PA3DU4HvZWgsUyQO9hijexekYgtbyJHwPu4wnrfwgqPeaj/1amwBMcxCf47V6SPWcXsfXzEq8z0spieqK8ELPWn1tAjhQrOpazPQi9pvfd9smQAWKCg0hPa9pxNRKGveazqdOept7NAZKz4T8Ox4RYn87Xzlu8839vXkJIYQQQgj5HVBAJ4QQQgj5ElYPnmcvSklp8+dX51a/Ac1i4s387yELcc1PePw8eG6LV2eiYP/LSmikFwA7LMS1HZO2VzmAiwKlmGgeaUIAHNoYoncEjrezWjF6PEfa7BF/8MJ2YbEJrCdrSCN8/Gpu8mu8jXak1xXNmzvWu3sU57DwydP/aNSwaEIT0kNMT0YMc/dSmddXjaTiJ+G6pIrV29mEZPWhaJYIA4qaxN/U1iviuA5pdEwu01/2OG/ieBo3SXW3NXDn9TMbXLR94tPxYc7CSkMhpXrYdtv+QGp4oAOQHbqj75u+NDBQFORrI9Zwavu0JcG4//mrijyv2m7ye+Ga/fc8w4jwo2VwvgkhhBBCyO+BAjohhBBCyJexEsvj+E8Ry+9h7u81g4FHH97OAnq8L1O6gkmp7OJhC6Ee2ed0gqWYXTbE3t6A7109iN+5aeJ7nyeRPTx8BwfzEPTVPYKLCZaTvl9DaD0qvP1VF8dPmcXtW+v1ZC5beO5kuHAt6yyWS8jdsrYNEACyQSHXNf5m1NAzmgwbAeBT4hCrk01ANqgYqlnWuRLPZ/E/+qnLpN2IITItJk9DoJ6TJNE9Ch6MIVKfwrgh+lrjjY4h45E0/JjWPHKCJuybAUkeqEnwXnVpYJzo0ef8lcXz4NXbT34XXK+vxxD2gxBCCCGEEHICBXRCCCGEkG/BNRHopqL0YmSB/Hq/jz1+xhjMrrUhEk6i8CCQA8Dm2qFgEIzjc+z3DTT/WdVJwBQXPQfv6bQve/Y+Lpau655Nmewip4c/l1LaNtniYqV4XoX6VuqLsbtbNJfjW52OX8udROZezVzhieGIpnNe52izIN3Rfc6uMX5nwqqflz7e2ZPdwo+f9DEbKaRjQ2oVtD3pW+JZQI+32aAjGW2EUD6ctvEQmUKW5zmWSUAfG9Hb0kRz8arURfB0Lv+lujSXFWvMDT0qFJI91j312qZgMp5Q81i/5iw/dHWogRDyb+D19jGe+TuGEEIIIYQQ8llQQCeEEEII+TasPLHvEyhfk7Wg2cl7kd/K9546Zw/3wZU4HZPxbRMDy2JqcjvFBEAxP+aVqDuqr0mQz165TWyNAqY9S8M7OPbjDgW9KCL4u4TgfCagH5DFR0H3FD9Pel6iQKKtzbM7i52hvp4UmsO/JyE+DBYEkk7JIW8X0Od2SxOiAQUqWlQAEUF1QfkooM8q+Xhq/CxHVX9W3JPxRO+DH6s72hYAU/dzCcNYDuXvi0aFy3hfc2GA0I0v0CL/N/uF6Eebj5g3E8y1erh6BaAVmsO2a0pbpzauOjUYPvRerg0hQsinoEQI+Q08er/jvZIQQgghhJB7oIBOCCGEEPJlzEJuPhbHD0rTD+Vav/Pxj4/C7UfG2TNXMYixLfOOJuy36ZMm5naxtHq2ubUFw/7frfyFKNuE9jhXF+7OCrhQKWJiug7h53OWOUz9imtGG9kLPOq/Zz7sYX/2Em4tGx2UsZwltT52r/1ef9uvPMT0VRSBWVMOwXYQbmXIFOKtKsyLW3O+LngP+Pk8PPfZwGTjgPGtlqTxt+My5T4KymbsIbAQ/4sxzYI51MZN+itUIKp5u/exJhsY+2te5/F++hva5JORQ+DnYRgamAcwf54znN0vXpmf1h9CyHPhPYIQQgghhJDPhgI6IYQQQsi344o39I/nmlHBs8bh3jLmB9Qrj/hJBA+ROsT0LKpLBXDpDsBelmnp4pp7iMSTKJidfoeuhOd5RZUC0QLUhVAum2mpJz3rXREMgfPVwoTXyDSLzhptvUYSzJuRQjZWOGuQ0zyb09g0EVtd0w5Pb120J4XIb1Unb+YkyJvnc+pfFd/3O6WZxd2c/5aocehvcv+G1W2fpv3DrxgqNLF9KVyPfR/nL+bD62/iuaUR9baoQrVCtUL8FbVCDwJ6EtLz2ET0AoXVoTUa3I0jDuP0HnFoNH54fehNTwi5Bu8RhBBCCCGE/AsooBNCCCGEfDnv9UTPx38SB3UYx7F5dJfjWQC/0pbVtAwhsb2sQVie5y2nuwznte2lLqmu/Hnykg6v4ly2VheRzdNYpeKwn7SXU656Lkvagjv5OWcX5EPXog1DsetZ1NxvT6XehjPP85whh3FXhXqY9VHMdjE67bttRXdP9SYXZ8OGQWBOntGRRktPkwXhPD5Rby5upXHMhgPevm7dYPt+2/71Hpo8dOjohRwHvIUwHwT07L2d+jMYDHid0uuOpHLxdaUmlIsqtO5oYdixex2TiN4sRMKoIc2PIn2eBivvly7h/Z7G9UAe6LN75yvy6u0nv4tH1+tP+x3zHr7iWuf9hRBCCCGEkHuhgE4IIYQQ8m25Jgz9hofOc//j2EcfAN8rnl9rT36dBdhwFV55w4YQnY7JKp/vFy4y6rAaYmRvy+ArXmsvK7uaRylJA74W4KA5yycRvrd41d8TsmAe7c9tVz0Rz6famm3Bsa4Q5UNczscykgRv05AliehDiePYtD2/a8ofwn00XQf7hyXzkj0sYXEjiG4QoLGfvVhizR7v3o4obC2ep7qaYUGI5806ANGFUdgP0wqFuEiu7llu3ui71+NietQ9WFoIimzWFwz+9J4kCeuDMUO+tgQWtcFYGlS2AAAgAElEQVQ/a0FsjbAeZELIv4XX3cd5ZOw47oQQQgghhPwLKKATQgghhHwbZmH2p3KPIcBnGAuYsDfrpiu5e9mUWX+fPY6zODmEEY8adxz2IVdgULfVBV7t4ri9enh2FPdIToJweCC3DFlM91etQE1lziJrFoHFw5i3JuVy0ATPOVL6oIXnva8hY7+beH5wz8aRNLiSP/f2hNjbch+KmcLSz8XnEOOiU/4C8TGPae3yuX/Ignrq41DJsOg0fT6o+L3s9l6nM1n8DuE7i9ipT00818EwYAzTn+aieYErKnZ3do/z1cPEVxfPXUSHnWvjCRsT1c3q0VTHcIsTSCmeXS2tX0PdKCCNXRbaZy/8dP3MBgKEEPLzeOT+9gxDQkIIIYQQQn4+FNAJIYQQQsg3IwuIz8VKLS4gfuRB8Jn0Pgt2WSmM9wWSPGi7njr1d9iHu+eF/EHbJVtGWVhca+zC+KxuW/jtrmsv+p7ET4gJ+e2zlqm7s9A8dT2LuYMIPgnnQ7ok8jZBVL3vEYB+FKubXjqq14Oar1n9xiC196omD+x8TkqBNA/xYYd0jKnnkq3tRXRs70yqU8I4wgXmOuS0+m25SGvzaDyB49hPy1OaxcRCfM/rY79gjBLgQvksosO90LOBiWxQVBut6umT0YRAUMSMMCSmuLUFqPWCXXeIFFvT4vUOVhura2z1mRBCyAhFdEIIIYQQQm5BAZ0QQggh5FN41gPGVTnh0XutjtXD0ed6cj+vrMyZP/hVCfJOQlg7CwN9g2uCcQjKQ/MnIW+xd/XwpuWXRV3VBe3Nzwu07ccegrt0UV20fR72VT8IrFnMjjbDldzwsEZXOVPakEIPnVqJ9OJh0Acv6Vy/Di8D0vsvh3TX1mGfb819G15lPHRA3eihu0EPgnUqw5zRJQ1j33v9IMwf9kIfFG4PE69J2w+jCc+k0zhrKjPOxxzmKmDHBWph4hVoAvgQ/l0B7EDdp/ZPYniOwpDnTiuAC9yqww+myAjeOwGA4p/Dw1zVDCb22rqhKGn5qed2w4RsCNAW+Y71pF67f7z/3nKe46P3qUe/N57xvfPRe/ur1/3qfI7R2efyaJu/ct6fca2+8n2CEEIIIYSQnw8FdEIIIYSQp3NNaX0GOabxveef/XD9sx7AngnnwWNeUyErj+Wtxumd9WjXJ4eDGdFDBPfTwg553fsYxfcTn/7EwruLCIqUdlySWKnN6CKE0KhGp3qiGSGinxk1rJjE6fhYI9T3veQ2+Wc5BmK3ppWh3TLNaa3uKR3GCW3YCqSIC8rSctqwdIFbXfi18OXiom4I7wWxX715qgMSe9CLpa0+xjp7fQ/9DEOIeFtt9qrPokiz0bB9yGvW27vNRcxprcAm9hf1uVGFStsx3tMqoBcvLO4bIUJfejvnqAUSE5DWh/ZXwcWz5fVsa1VFTCsX8R0MZLQh+GtGImZAICiqsD3QrR+SvO/NIb6iGQKsjENO3888ImrdU/5n5iXkFdnS+/n6u+d6eM81szD4eohHBPD9wbofhfcaQgghhBBCbkEBnRBCCCHk5ViJb/P5V/RG+wr6Q+Qunz7uFSeLMkLsO3BXsIDZszb+0v7pUPTIBN0zXTxd7DHdhNYoQlNlQ73WWAkRuaWb3Y1z/nH8YkxVT7z+r4yH5kRz6HdPaOHMqzv3T6J95FXAQo4LmgpdBECFVkHe4zzyNM9vUYta3tqjXScWPx9GBhVWh0YzTPguKO0wWrkFthd8bqPPT4156mVl4wFV9W3uW0WtKX3vcC+vhWbXsf95yYQYP3hwY/H+fK7agLSloa3+cbXo9El6e9tB7UVrVDGX0k1DrjfsWprr8A5KyGfTvoSmY8B91+1XiueEEEIIIYSQnw4FdEIIIYSQl4Qi+fOYx/JzxlazADx4esexK5kli/uKsY0bTL0tXehOXtUhokeVmupvIvHQzuETRsV41dAk6KfyQgA9iLCrY0OVU/kCE7kx7TEee8c3IdqMBNQ9wts+4S3ceRKPIyp7AbBXE9SzSB3li0DTTuRjO/tQqAggFSoFqNq8wrftD7Zic6BdDQ7TBBPDEcYV6lHOk6FFa9c0JkPo9OhIEsDDAmBX72x0GM1rvs9t+rsmKs0612m65Gm/LCT64P/oJKK7IYDkdMN+70lI17iuKIYR8trwGiaEEEIIIYR8LyigE0IIIYS8PPOD59mD68yj6zcK8Jpk2Hv7vxbXr+c+EQM0v5m9peU4ZYfw6XMC9+wOERJiYu4c5l3CZ1cgyUtcRJuO2V+ymBmjNQv4M8kTXsM3WDGpoL3phxDmmaMBg0htUciHPchbdvd0j75nEVfrKA6HJ7an1SJAnbzws1N00p4Psx57u4uPO+ogxBcFdIumzAYEo7gvTQzO41O8ranuLE4rTGRfGipoCp0/CetZQK9qId81xPaop6Yy192/5QCep7+treGM9q3RW1pvUwjnGletepvyMFA8H7nXyoGQ70C6N7XP9+RZvX607o/C64wQQgghhJCfDgV0QgghhJAfCcXzNTq9zyFk589zOkzprnF2PomoQ7jzszC297YdaCK2ds/zzhsUG2LPakle56HNavP0tT8dBIpJkD+0I6ugk0c6zOm55Yj9yJci+tH4Q2aho4nOnk5lSG+e3eGFD98vO/Un8reOm/gtvg/3wXlaF+0bBPU4dhyfmo0icpObouzmCX5MUiK1ArzIaX2E972Iic2luj6uXVhWSYJzmp/WzhDwtRsZaO1GG1pvrWIcO3cYlesltLmbjAJijkI8DzE/RxM4rIlZjCOEfH8WN8i78jx6vfM+QQghhBBCCLkOBXRCCCGEkB/NLVH21bhHvH5veR9JP4UTx7jr+eGshJC6CGEt/qqYPM5XQv48n5G+YC1ie04FqhZ3ehdzws4e8E2o7B6/rX0KoBSM+6sv1tWwR/rkXa/SnMK7yNsGIQnCc7naHKO73p7G4SCep7GLpme5t+0Jjj7eNbVV5nZnsT0zi+bpfRPmfVv0fR+zzgq99PyRVQBoCx8/qfqToC8QSI3+JlH8YByShqeV0xrZBfQU3UCl2trNhgOrORzGaKyze9VPYzAYHKwE9JrWZO7XQjQ7hHF/ZXHsUS/yn3CfJ7+HOQRF5kwg1xvn7+UV8xJCCCGEEEL+FRTQCSGEEEJ+PM8Wnb+aRx8+3xuH+jPqnpFpemYR8CyCQBybBOihbzKlDm9rmKDtaXq085D9s2AZuf80r/XjntMndTZdWyAoXqd2EX1o+zFPPqZDulkwv0V4dlu79VBf3y8e4R3fzifBvdW5Eu3RxfccQl+12xXM4dlDQC7ionkBiqCENzxM2+86dcxObr94IANpwnYzOoCXqaM5h7Q++dHqe6RXHeeiVC+rt6cbS+hxPjTOH9eq5vQxNmE4kgX6NEZmPJDGrAn8efwiz08TpB65X/+0sSA/l/m3ybx2r13bXymeP5qf1yghhBBCCCGvAAV0QgghhJCXZPUA9kxsXYlaj3o5fiWPGgNcE2DPxnUWb4/51NMuS9VZKLin+uR5LGf1J+H32prQlFYkHZLRoTmLokNx+1R9HsMzMb0fi/4PYeE1lTMXcejKybjL2VxqO9rk2Ryefs7WPKLnqlbtTGJycxmXfk5yIZ4/i+d5wNOe7SoVUEFtnugC3Szsvh7mQ8f6W/Ga0sa4Y+hD8+rOAlStqZ3pmO8V39b2MF1zm/xY2IQooFqTB3luR6zDWUiPYno0hCb2N/Hc8y+3AHh1nnVvI+RV0JP38fmagL7K8556eb0QQgghhBBCzqGATgghhBDya7j2oPpVeJZn5rVyztI99sBd0r9d8zwpT1fndKETh5h4rVaBhehOYbjz+XuGVMt8IJU/lzd7wo+7ex/6Noc0V0xi6o62l3cKd251lORdnuvLLZKWpouyU1sETUSXXMKs0TSB2VX+1lYBZAOgVl9zjg5BexKyszd2iOD+0cT08PpWC+V+CPse2fo49b3Pc5vzvOl4vn2eBqR5qFdAfE90kdausR95cKII8SWZyjlcOormiY7SxlPybGbDg1ZA/vzKRkCEkDWra/reY8+o6z08avBCCCGEEEII+c5QQCeEEEII+TGciZpnaV/x4e+jD7xv5V97Mt9ft/rIrse2hUHHJP/NQuSyGYsyh+atPPIiz4a212yPKZ48p1sDpwZH0gsUk4jeBPmUR3o49L7HuozR4GUax7nOmWFPb21liu/JnvRnRLjyLsNKe9WWd+U53T2h+5zoOATp3yEMe6uwQlAgqk1zrlqb9p9LiZDoOh03/dprkuhv9rZGF7PhIfH9/MEgIwvQgz3DrGZHm3pVGnmbmN5F9CHfuICjgW1MDh7wzf4gr/4KM4Sw/kSGvl+9Lto817n6/BsZVysh35uza/hewbyeHL+37q+6Tnh9EkIIIYQQ8gpQQCeEEEIIIS/GIw/M7+GaiP4IvZzZr/2+OiSJ33PRs6fuXGf2DE9ex03M7HWEuCvpeNUdqPvU+vxamve2QCHNg9pE95q8i+fxvaWfV1VoDRXaxXmJesa+dsk8S9Ol2x+EEHs2jO3NUcgZ/Z1j/ASQ4uerj0RpfRW143b+OK5WVayA8JDPIvjs+Q+rrySP8NbUaQ3lsrL4nYw1wlteUjWigFYb92b5EIYH88DNdaaxaVEHmniePNGbIA+fjuoCugxjksPuH4ZhUbPV9Ori1BzB4T2k6/1DeV997MjrcUssP1uT5/eGj9f7FWUQQgghhBBCvisU0AkhhBBCXpLVg9vZ+/DMG/HVQx8/4jl/9mB+lrTl5NxH6unlHEJxn1VxawrnxMP51fyGcHxDrIiw2uLvk2f3sY4siGs7FtKslVX9WGnpu34coc7H432IzowCvMtSl+OS9GHvkuWPEOdzgPdwmJ5KONaZkeM6suKryeVqBgRVL8mj3EV0H9dmUOBlido/Kmmsm/t6EsIViND14ceuqmsn7cgjaS6TAYW22ZrW/2E9dtOEVmZ+HTzNx3G5SpsTK6PbArjgno09VgxL9NXva18Nx4/8a85uWvceI4QQQgghhJDPgwI6IYQQQsjLciYAfyT/q/CIeJ45M0BYjenZOF1py+pUEyEXtd7jOKqCY2j4lXHE8Vzbj7qJtqeVoAnyQ3h3HZMMhYSnucQ24t7V8Ewvi/RHDbZ7Zru427yns6A7tUOG+OhJRJaUrC48y5dNSuWfjOvBAEEBVIQneojo3YigJhE89hD3WQxP/1aSDo7eISof21ybj3uYK4S3+Gig4a7lobRP4zt2La+VvF5yV71hae0MoehXe9kP9VwRaA8GANVd4efrsa+F2CJAkgHJK97Rjqyu88/n9T33yWtya92dnT8T3wkhhBBCCCHkOVBAJ4QQQgj5ddyj1v5UzowOFkLdId1KPJ3L8TPNUXcK1333A/+pTBezj7LuNUF97sd9goNq82se23JVdN8R4eV7fsCEUIHtwe7e3u4RLSF0y9gPbR0NIf1YubqYq0NI+/CGXrVvId7mPcZX49RE2Xx+JaxHQpeem1d2Lr81HOoGBnLwrJ7H3dfPtIakCLbSx02hKOKh7vOG62UDNhfR8xpuTQ4vdKBqnwHVmkLmnxuaiKQ9ywdbi37s6N4vqX7p7WhLMxLXSTwf29HC4af25OMUgwn5LfBaJ4QQQgghhHwOFNAJIYQQQggBMHhoLz/HsY+XfuRElV7owt2V+J6aZgEeiHDq9+XH2GDZTsJ653Rn3sUhcKYCSmlCevejnsuNo2USkfWY1hqJQShuacrRczy8rmVuWzYyeM9cp3yHNk24OH0ofXbJB1CKhYLPnuWliG+BHgYLscd8SP2p/WVzobuLzLWKe3dHK0yEN/1f0b3mzw0uxKX7ZiAyhIQ/GzdZX05R73jgpIwIXg/vV6+VEPLb4JVPCCGEEEII+TyuxNEjhBBCCCHfl+xVGrzHo/xR7/OvzP/RvLMwd1bOtfLfW/dSCf9A+TfyHkKQZ0IgvleAv7N+XX1YlZ/qDq/kCOs+eVcvnfzlzQT8FUcVel3/abdXom4Wc69dY7I4lstxA4E5dPrB8Xxl7GBveoh0Tc7sAilj7IEa4duzeC8bsG3m7d/KSH+5LdkrXa+J2Mnz+zB3k5At1v4s4He7BQFQgFpRVVH3/YbX+9jY7PkuiO5kEX+HGYzM+a8ZSCTvd9RWx1Gen8fmIwYXt3jkHvcoX/V44NHvlN/6WOMr+604XmfvoV7Jf6tfv3W+CSGEEEIIIf8KeqATQgghhLwsjwgOK3HwX/GIkPtq9Z55SH+kHL2d/ez8I1qDzoLh1cSLYy6YDyJ/7W91bvQsUleYwci66Nv13+CeLC3NPIdnc5pF83OB3F7OBeMsDANJ995vN9l05NnbXaf++oe6tFw4KTQ5r5/hWw4ILNy8yDhORQQFBbUA2Hd3fD8TtOfP2j3d5+60dFlAv1bumRCe6lgK5Gfvn8VvFQcfvT8/IuZ+NY9+n//LfDn/I2O+P6ENhBBCCCGEEPI5UEAnhBBCCCHkbp4hOJD7eY94/y+4py05yNcifP3Vsp63ZcAy72Hf9VCg9XD44brFgsrrbIChQBULI1+rQmvs3T6L0mfRFFavZ+lutPH0+JkX/q3P5DEeXe+vOB9fZciW+SoBnhBCCCGEEEK+LxTQCSGEEEJ+LR95+L3YY/qf5v8OPOJF/qBYcjZsLzGsc+MmD2w964QuhN9/Tez13f5BP3AWpl89VP2NXbOy1r48/8G+L6udhXJdHm4HPzzuEXp+R1Xft9zHTtU80KuIiefYvZ7syXpLQL+V7iztveW/qhj7yjx6f3zV+Yp+f5VxFtc6IYQQQgghhKyggE4IIYQQQt7BbxU5gO/hKXjCE7T5zyXP+7U482ee2vfELP8ktOBU/D8IX1MfFGmv8A9M0EMOuXoeHl6ndMs09QmGCwVaFbuMTalq+6Cr792uutqzfNmoG6/x/lq76UX+fXlyxIWX4RniOQV0QgghhBBCCHkmFNAJIYQQQsg7eYaI/q3V3hO+Q7uvuCvfo1F/RCh5SpdXAvR0TE68MPUr9zU+63zs6T3Nx+yhLsBxj/dVFbLougAojwV7OBXHTzzRh2MPCugKQCq0SI8U78eljYv6/utzyPTJk39Z+Cyar9Lck++edNdYpfvq+8Qr8luF3Gf0+ZGxq/j4PuZxHySEEEIIIYSQnwcFdEIIIYQQQv4JXykOfXHkgKtV32rXIwLPowiADdeFdEzn57Q3+jd4qU/5FLcF+GsFiwtrZ6Hcdfr8LFQBqeiGATKI8arS7Q80QsXnNszh3JeVnLx6fad53iO8fyQ8PAXFj/EMAf2Vx/6rvO8f9V4vD9ZNCCGEEEIIId8TCuiEEEIIIeQDPOIW+0j+r+S7tP3afrnZE3o+/FXtvlFvCKynYdKBLxPQNQvkJyL3oe1TCPdbAtPpdOrjAnqM26kOfGVuZm/6d9ft9Uf7D17v3vFTEf8RD/KzMX+GSHsm3H/1feEn8Kgn9KvOwaPr8itD37/qmBNCCCGEEELIdSigE0IIIYSQd/CMh+Wv6iX4CkLBmaf5V475mRAq0/uzdn+1B/qZMHeH93l4Vl8b/vDGXpX/sC52RZh7SCC/p/J6XsdwPIdtX3l/XxPWz9rv3u/rim8cm8PJ30q74hXuFd+NrxSBv5qv8iB/tO7I/6rf6YQQQgghhBByDgV0QgghhJBfx1eHEgde94H7I2LBs4wPrpVzto+4H/+qYR+GbSWc5s9Ix79aQC8ndd/ao/v+07FP+jw1uhTo34Pi+v7xNxq2DCv/jrqXwt4812dr4A7xXE6On0Y0uNbOW8fO2nbWvle9v30lv1XIvWaw8Z4yvpKvrp8QQgghhBBCng8FdEIIIYSQX8mjD7xfUaj4Djwy7o8Kml89Z2fi4rXQ7V8tzKQw6AOzx/yZB321Mk69zOHnzjzczzyp7+ErBUntAvxpmPhb7ftM7/j8/iMe7tc85b/6OiO/i2dsS0AIIYQQQgghZIYCOiGEEEII+QJe8YH/V+6Bfk/dd3inf1nTZ8FRzs8fPIi/cK3ImTg1CeZ6JqCXnv9sL/PW1ZPzH+7+FSH3Lo03tf1RFFc82m3sBOK13Vnnh/TqeT71aLxwU/CfPdDvDetOrvOo4cErC8lf1fZXHS9CCCGEEEII+XwooBNCCCGEEHIXX+nF/cIRA3QVOv7WWH43YWcVavz/b+9um9PGwTCM3mTy//9x6/0StrzZGMvwWNE5M7ttSowFmHR2LyRdjnEuoF/edv+Yro+Y7m6bbbmrze0r/8R0P57XTnv+sMbFhzaWZuHn0TM0O2V/5ug5S8uxP/p66YMbz2avzx3HOq2rbPRojyXcAQAA2JuADgDABh0H3SbVEX1tKHy0THrlazZ37gf3eTcjeClOv9ujuDU35kez6P/mdib39dH3qwJcr3xeteR/0rR8/OKM8+Q+l59+/n3KtPo9Nl398viQheXYHy6bP/O9q29ju5b3+civyciPHQAA4H0EdAAAXjBqOKfJ1TLtt3ucP78mKq+aafHDB2tGdrmH+tL+73N7qG/1NXOfrwTqre/3uXPf3n/yL6afLp7r+Vn7z7cquL3/pT8TH4/F3w8AAAAcg4AOANCtHuNP5QzuvVTOCl5r76Wl10bLmbFcLeM+3ewHvnRN9HytPP7AwLSwNPnVzu//f+hg4/M+u696y2u51s/s9btZ9JdL4Ofq99f7n08z37tguv3iyV7mTXvLH/Vn71HHtVbDz5gkbR84qWQJdwAAgKMR0AEAutTr/2zvOYj2ruWaabzervrQ7VLNK66JxeW2n5+6zdfrh7zYfs+mha9eH8PfhU3U17wPT9n02M+mP7mOzbfL1V9H9OkuTP958H2rT573xNTTza9zH1Sp/Pnc698Nyb/XfOuxvQZ0AAAAjkZABwDgBQJ4nxY3iv6Q23OvHcsH4vlHn5ZXHs+0fWxTFj54sGYMX9keJM/xfWEP8qdjagnBfxuPX3vs3BL5vK719RLPAQAA2I+ADgAAHFTvMbLn8beO/WcZ983nblnOuyWmVs8gBwAAAKoJ6AAA0I2tYW/jmuK7WZqp+zyyzq5E3qr6aVnUuld3pdYI3Xpsa4CvHD8AAABQTUAHAIBfrzLozcXzA2wHcJBh/D6Vs7jPM9BbA3qPeh03AAAAHIuADgAAQ6iqxa9Evb3Hd3vuB/c/Ldy8S4/sNWpWzwJvOfceS7i3rPZQ+amMXq+3FiM+ZgAAAN5JQAcAAN7sMkjOxcXTiu/hs1oC+J+G41vOfT62agn3r9Rdvz3Pnm8x4mMGAADgnQR0AAA4vNZAdITNvi/HcBnLk/t4vtc4X7yfaWmvdtar3kd8j4Bece5WowZ0AAAA2JeADgAAv97RNvu+nWm+NPN8zyi4tF773O0jB8mt10zlEu6X5686d8sS8rxu5PcoAAAA7yCgAwDAEKoj+lwkfyWmv2M8c+eaHnzfSFpWAqh+zkY/PwAAANBCQAcAAIo8iudHnCnfcnzLfZxSu592y7EiMgAAANAnAR0AAIZxlD3QL7/OzZ+fb7ucAf7OcS/NtK4O6D1rmcHe8qGB84cwWs496msGAAAAJAI6AABQbm4Z99vft9z3p489wvFVqse9x6z96scAAAAAVBHQAQCgC3sEvSMuj/7OMa15zp7thc52rTPJt56zZSuA1utSeAcAAIDeCegAANCF1jAnDjMKy7ADAAAA2wnoAAAU6DluVcyqPZ+3Yk/pPbxy/tvH+MlrpefrkmstM8hdBwAAADAyAR0AgA/rOU71FKJ71PO1wTWvJQAAANAnAR0AALrQezzvffxbjPiYAQAAAPr2VT0AAAAAAAAAADgCM9ABAIAPsKQ3AAAAAMdnBjoAAPBm4vlYvN4AAABAvwR0AAAAAAAAAIiADgAAAAAAAABJ7IEOAAB8hGW9AQAAADg+M9ABAAAAAAAAIAI6AAAAAAAAACQR0AEAAAAAAAAgiYAOAAAAAAAAAEmS7+oBAAAAv9lUPQDKnKoHAAAAAPAyAR0AAPgAIX0cwjkAAADQLwEdAKBbrUFS5Npm1BDccr2M+pyNaorrBQAAAOiVgA4A0CXxvMaoYa/1enG9jWWP17vqvTbqexwAAAA4E9ABAIA3Ot38Cs+I2AAAAECdr+oBAAAAAAAAAMARmIEOAAB8gFnFAAAAAByfGegAAAAAAAAAEAEdAAAAAAAAAJII6AAAAAAAAACQREAHAAAAAAAAgCQCOgAAAAAAAAAkSb6rBwAAAPxmU/UA6I5rBgAAAKgjoAMAAG8miAIAAADQB0u4AwAAAAAAAEAEdAAAAAAAAABIIqADAAAAAAAAQBIBHQAAAAAAAACSJN/VAwAAoMrUcOxpt1HQg5ZrBQAAAAD6IaADAAxJPOdVIjoAAAAAv58l3AEAeJGQCgAAAAD8TgI6AAAAAAAAAERABwAAAAAAAIAkAjoAAAAAAAAAJBHQAQAAAAAAACCJgA4AAAAAAAAASQR0AAAAAAAAAEgioAMAAAAAAABAEgEdAAAAAAAAAJII6AAAAAAAAACQREAHAAAAAAAAgCQCOgAAAAAAAAAkEdABAAAAAAAAIImADgAAAAAAAABJklOSqXoQAACM5PTzD8DepvhPXAAAAKCFGegAAAAAAAAAEAEdAAAAAAAAAJII6AAAAAAAAACQREAHAAAAAAAAgCQCOgAAAAAAAAAkEdABAAAAAAAAIImADgAAAAAAAABJBHQAAAAAAAAASCKgAwAAAAAAAEASAR0AAAAAAAAAkgjoAAAAAAAAAJBEQAcAAAAAAACAJAI6AAAAAAAAACQR0AEAAAAAAAAgSfJdPQAAAEY0FZ77VHhu4LnKnw8AAADA6AR0AAA+TDwHlgjoAAAAQB1LuAMAAAAAAABABHQAAAAAAAAASCKgAwAAAAAAAEASAR0AAAAAAAAAkgjoAAAAAAAAAJBEQAcAAAAAAACAJAI6AAAAAMz2YAQAAAG8SURBVAAAACQR0AEAAAAAAAAgiYAOAAAAAAAAAEkEdAAAAAAAAABIIqADAAAAAAAAQBIBHQAAAAAAAACSCOgAAAAAAAAAkERABwAAAAAAAIAkyXf1AAAA4HOm6gEUO1UPYDCjX28AAAAA/RHQAQAYzKhRUzz/vFGvNQAAAIB+WcIdAAAAAAAAACKgAwAAAAAAAEASAR0AAAAAAAAAkgjoAAAAAAAAAJBEQAcAAAAAAACAJAI6AAAAAAAAACQR0AEAAAAAAAAgiYAOAAAAAAAAAEkEdAAAAAAAAABIIqADAAAAAAAAQBIBHQAAAAAAAACSCOgAAAAAAAAAkERABwAAAAAAAIAkAjoAAAAAAAAAJElOSabqQQAAAAAAAABANTPQAQAAAAAAACACOgAAAAAAAAAkEdABAAAAAAAAIImADgAAAAAAAABJBHQAAAAAAAAASCKgAwAAAAAAAEASAR0AAAAAAAAAkgjoAAAAAAAAAJBEQAcAAAAAAACAJAI6AAAAAAAAACQR0AEAAAAAAAAgiYAOAAAAAAAAAEkEdAAAAAAAAABIIqADAAAAAAAAQBIBHQAAAAAAAACSJP8BUPZi9FUIXwYAAAAASUVORK5CYII=","consoleMessages":[{"text":"Unrecognized Content-Security-Policy directive 'prefetch-src'.","level":"error","timestamp":1723920091495},{"text":"[.WebGL-0x3c50013b6a00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels","level":"warning","timestamp":1723920106929},{"text":"[.WebGL-0x3c50013b6a00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels","level":"warning","timestamp":1723920106931},{"text":"[.WebGL-0x3c50013b6a00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels","level":"warning","timestamp":1723920111649},{"text":"[.WebGL-0x3c50013b6a00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)","level":"warning","timestamp":1723920117302}],"screenshotDelay":10000},"timestamp":1723920090846},"created_at":"2024-08-17T18:42:17.370+00:00","updated_at":"2024-08-17T18:42:17.371+00:00"}