From e68109fdb2a9d49d90dc48cef6d0d4e5f033fd60 Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Fri, 17 Sep 2010 02:52:29 +0100 Subject: [PATCH] - Clean up --- README.md | 50 +- assets/examples/00_floor.png | Bin 1025 -> 0 bytes assets/examples/01_waves.png | Bin 3174 -> 0 bytes assets/examples/02_random.png | Bin 7231 -> 0 bytes assets/examples/03_cube.png | Bin 1627 -> 0 bytes assets/examples/04_vr.png | Bin 11877 -> 0 bytes assets/examples/05_video.png | Bin 9988 -> 0 bytes assets/examples/06_terrain.png | Bin 15692 -> 0 bytes assets/examples/07_earth.png | Bin 8635 -> 0 bytes assets/projects/00_jsflowfield4d.png | Bin 1335 -> 0 bytes assets/projects/01_ddd.png | Bin 4712 -> 0 bytes assets/projects/02_spacecannon.png | Bin 5434 -> 0 bytes assets/projects/03_spikeball.png | Bin 6406 -> 0 bytes assets/projects/04_alocasia.png | Bin 11693 -> 0 bytes assets/projects/05_failure.png | Bin 13703 -> 0 bytes assets/projects/06_rat.png | Bin 3835 -> 0 bytes assets/projects/07_orsotheysay.png | Bin 7948 -> 0 bytes build/Three.js | 4 +- build/ThreeDebug.js | 4 +- examples/camera_free.html | 4 +- examples/geometry/Bird.js | 38 ++ examples/{objects => geometry}/Qrcode.js | 0 examples/{ => geometry}/primitives/Cube.js | 0 .../{ => geometry}/primitives/Cylinder.js | 0 examples/{ => geometry}/primitives/Plane.js | 0 examples/{ => geometry}/primitives/Sphere.js | 0 examples/geometry_birds.html | 431 ++++++++++++++++++ examples/geometry_cube.html | 4 +- examples/geometry_cube_webgl.html | 181 -------- examples/geometry_earth.html | 6 +- examples/geometry_terrain.html | 2 +- examples/geometry_vr.html | 2 +- examples/materials_video.html | 2 +- examples/test.html | 14 +- src/core/Color.js | 11 +- src/materials/ParticleDOMMaterial.js | 15 + src/objects/Line.js | 3 +- src/objects/Mesh.js | 3 +- src/objects/Object3D.js | 2 - src/objects/Particle.js | 3 +- src/renderers/DOMRenderer.js | 58 +++ utils/Builder.py | 79 ++++ utils/BuilderCanvas.py | 75 +++ utils/BuilderDOM.py | 59 +++ utils/{builder_debug.py => BuilderDebug.py} | 21 +- utils/{builder.py => BuilderSVG.py} | 19 +- utils/BuilderWebGL.py | 70 +++ utils/REVISION | 1 + utils/build.sh | 19 + .../export_threejs_2.53b.py} | 0 .../export_threejs_2.5a2.py} | 0 51 files changed, 935 insertions(+), 245 deletions(-) delete mode 100644 assets/examples/00_floor.png delete mode 100644 assets/examples/01_waves.png delete mode 100644 assets/examples/02_random.png delete mode 100644 assets/examples/03_cube.png delete mode 100644 assets/examples/04_vr.png delete mode 100644 assets/examples/05_video.png delete mode 100644 assets/examples/06_terrain.png delete mode 100644 assets/examples/07_earth.png delete mode 100644 assets/projects/00_jsflowfield4d.png delete mode 100644 assets/projects/01_ddd.png delete mode 100644 assets/projects/02_spacecannon.png delete mode 100644 assets/projects/03_spikeball.png delete mode 100644 assets/projects/04_alocasia.png delete mode 100644 assets/projects/05_failure.png delete mode 100644 assets/projects/06_rat.png delete mode 100644 assets/projects/07_orsotheysay.png create mode 100644 examples/geometry/Bird.js rename examples/{objects => geometry}/Qrcode.js (100%) rename examples/{ => geometry}/primitives/Cube.js (100%) rename examples/{ => geometry}/primitives/Cylinder.js (100%) rename examples/{ => geometry}/primitives/Plane.js (100%) rename examples/{ => geometry}/primitives/Sphere.js (100%) create mode 100644 examples/geometry_birds.html delete mode 100644 examples/geometry_cube_webgl.html create mode 100644 src/materials/ParticleDOMMaterial.js create mode 100644 src/renderers/DOMRenderer.js create mode 100644 utils/Builder.py create mode 100644 utils/BuilderCanvas.py create mode 100644 utils/BuilderDOM.py rename utils/{builder_debug.py => BuilderDebug.py} (81%) rename utils/{builder.py => BuilderSVG.py} (83%) create mode 100644 utils/BuilderWebGL.py create mode 100644 utils/REVISION create mode 100755 utils/build.sh rename utils/{export_threejs_25b.py => exporters/export_threejs_2.53b.py} (100%) rename utils/{export_threejs_25a2.py => exporters/export_threejs_2.5a2.py} (100%) diff --git a/README.md b/README.md index a0e6007e..18714150 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ three.js The aim of this project is to create a lightweight 3D engine with a very low level of abstraction (aka for dummies). Currently there is no documentation available but feel free to use the examples as a reference and/or read the source code. However, be aware that the API may change from revision to revision breaking compatibility. -The engine can render using <canvas> and <svg> and WebGL. +The engine can render using <canvas>, <svg> and WebGL. [More info...](http://mrdoob.com/blog/post/693) @@ -15,29 +15,32 @@ Other similar projects: [pre3d](http://deanm.github.com/pre3d/), [pvjs](http://c ### Examples ### -[![geometry_earth](http://github.com/mrdoob/three.js/raw/master/assets/examples/07_earth.png)](http://mrdoob.com/projects/three.js/examples/geometry_earth.html) -[![geometry_terrain](http://github.com/mrdoob/three.js/raw/master/assets/examples/06_terrain.png)](http://mrdoob.com/projects/three.js/examples/geometry_terrain.html) -[![materials_video](http://github.com/mrdoob/three.js/raw/master/assets/examples/05_video.png)](http://mrdoob.com/projects/three.js/examples/materials_video.html) -[![geometry_vr](http://github.com/mrdoob/three.js/raw/master/assets/examples/04_vr.png)](http://mrdoob.com/projects/three.js/examples/geometry_vr.html) -[![geometry_cube](http://github.com/mrdoob/three.js/raw/master/assets/examples/03_cube.png)](http://mrdoob.com/projects/three.js/examples/geometry_cube.html) -[![particles_random](http://github.com/mrdoob/three.js/raw/master/assets/examples/02_random.png)](http://mrdoob.com/projects/three.js/examples/particles_random.html) -[![particles_wave](http://github.com/mrdoob/three.js/raw/master/assets/examples/01_waves.png)](http://mrdoob.com/projects/three.js/examples/particles_waves.html) -[![particles_floor](http://github.com/mrdoob/three.js/raw/master/assets/examples/00_floor.png)](http://mrdoob.com/projects/three.js/examples/particles_floor.html) +[![geometry_birds](http://mrdoob.github.com/three.js/assets/examples/08_birds.png)](http://mrdoob.github.com/three.js/examples/geometry_birds.html) +[![geometry_earth](http://mrdoob.github.com/three.js/assets/examples/07_earth.png)](http://mrdoob.github.com/three.js/examples/geometry_earth.html) +[![geometry_terrain](http://mrdoob.github.com/three.js/assets/examples/06_terrain.png)](http://mrdoob.github.com/three.js/examples/geometry_terrain.html) +[![materials_video](http://mrdoob.github.com/three.js/assets/examples/05_video.png)](http://mrdoob.github.com/three.js/examples/materials_video.html) +[![geometry_vr](http://mrdoob.github.com/three.js/assets/examples/04_vr.png)](http://mrdoob.github.com/three.js/examples/geometry_vr.html) +[![geometry_cube](http://mrdoob.github.com/three.js/assets/examples/03_cube.png)](http://mrdoob.github.com/three.js/examples/geometry_cube.html) +[![particles_random](http://mrdoob.github.com/three.js/assets/examples/02_random.png)](http://mrdoob.github.com/three.js/examples/particles_random.html) +[![particles_wave](http://mrdoob.github.com/three.js/assets/examples/01_waves.png)](http://mrdoob.github.com/three.js/examples/particles_waves.html) +[![particles_floor](http://mrdoob.github.com/three.js/assets/examples/00_floor.png)](http://mrdoob.github.com/three.js/examples/particles_floor.html) ### Featured projects ### -[![Or so they say...](http://github.com/mrdoob/three.js/raw/master/assets/projects/07_orsotheysay.png)](http://xplsv.com/prods/demos/online/xplsv_orsotheysay/) -[![Rat](http://github.com/mrdoob/three.js/raw/master/assets/projects/06_rat.png)](http://tech.lab212.org/2010/07/export-textured-models-from-blender2-5-to-three-js/) -[![Failure](http://github.com/mrdoob/three.js/raw/master/assets/projects/05_failure.png)](http://www.is-real.net/experiments/three/failure/) -[![Space Cannon 3D](http://github.com/mrdoob/three.js/raw/master/assets/projects/02_spacecannon.png)](http://labs.brian-stoner.com/spacecannon/) -[![Alocasia](http://github.com/mrdoob/three.js/raw/master/assets/projects/04_alocasia.png)](http://arithmetric.com/projects/alocasia/) -[![DDD](http://github.com/mrdoob/three.js/raw/master/assets/projects/01_ddd.png)](http://the389.com/works/three/) -[![jsflowfield4d](http://github.com/mrdoob/three.js/raw/master/assets/projects/00_jsflowfield4d.png)](http://test.sjeiti.com/jsflowfield4d/) -[![spikeball](http://github.com/mrdoob/three.js/raw/master/assets/projects/03_spikeball.png)](http://kile.stravaganza.org/lab/js/spikeball/) +[![The Wilderness Downtown](http://mrdoob.github.com/three.js/assets/projects/08_wutw.png)](http://thewildernessdowntown.com/) +[![CloudSCAD](http://mrdoob.github.com/three.js/assets/projects/08_cloudscad.png)](http://cloudscad.com/stl_viewer/) +[![Or so they say...](http://mrdoob.github.com/three.js/assets/projects/07_orsotheysay.png)](http://xplsv.com/prods/demos/online/xplsv_orsotheysay/) +[![Rat](http://mrdoob.github.com/three.js/assets/projects/06_rat.png)](http://tech.lab212.org/2010/07/export-textured-models-from-blender2-5-to-three-js/) +[![Failure](http://mrdoob.github.com/three.js/assets/projects/05_failure.png)](http://www.is-real.net/experiments/three/failure/) +[![Space Cannon 3D](http://mrdoob.github.com/three.js/assets/projects/02_spacecannon.png)](http://labs.brian-stoner.com/spacecannon/) +[![Alocasia](http://mrdoob.github.com/three.js/assets/projects/04_alocasia.png)](http://arithmetric.com/projects/alocasia/) +[![DDD](http://mrdoob.github.com/three.js/assets/projects/01_ddd.png)](http://the389.com/works/three/) +[![jsflowfield4d](http://mrdoob.github.com/three.js/assets/projects/00_jsflowfield4d.png)](http://test.sjeiti.com/jsflowfield4d/) +[![spikeball](http://mrdoob.github.com/three.js/assets/projects/03_spikeball.png)](http://kile.stravaganza.org/lab/js/spikeball/) ### Usage ### -Download the [minified library](http://github.com/mrdoob/three.js/raw/master/build/Three.js) and include it in your html. +Download the [minified library](http://mrdoob.github.com/three.js/build/Three.js) and include it in your html. @@ -102,6 +105,9 @@ For creating a customised version of the library, including the source files in + + + @@ -125,11 +131,17 @@ For creating a customised version of the library, including the source files in Thanks to the power of the internets (and github <3) these people have kindly helped out with the project. -[Paul Brunt](http://github.com/supereggbert), [Fernando Serrano](http://kile.stravaganza.org/), [kikko](http://github.com/kikko). +[philogb](http://github.com/philogb), [supereggbert](http://github.com/supereggbert), [kikko](http://github.com/kikko), [kile](http://kile.stravaganza.org/), ... ### Change Log ### +2010 09 17 - **r17** (39.005 kb) + +* Added `Light`, `AmbientLight` and `DirectionalLight` ([philogb](http://github.com/philogb)) +* `WebGLRenderer` basic lighting support ([philogb](http://github.com/philogb)) + + 2010 08 21 - **r16** (35.592 kb) * Workaround for Opera bug (clearRect not working with context with negative scale) diff --git a/assets/examples/00_floor.png b/assets/examples/00_floor.png deleted file mode 100644 index cc0d7d99cc0ca654a2f3e9ac2c67495fb8328d88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 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 N002ovPDHLkV1nmd*Np%G diff --git a/assets/examples/03_cube.png b/assets/examples/03_cube.png deleted file mode 100644 index a0bf1c84590e9d53440e2cb8c9e6ab569736f129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1627 zcmb7E`#0MMAO5OELM2re4PEQr(J*(JP;aVHi4Lg>60|+4QH@JgBhDm#u zS<7+TL`WG{t)|6fn@i+U%%w$?(73l@+1c42@Se|kKF|3)KRxI9ob%)od_18V`WgTL zK=C-NpOV9sI0sQv?relHS4k@IexB|?GyjW4<)IdK&Jzpl|2;5JXP1CX*D zs|RL*GZWr#)8{HG%OuAybiDg^NDO~?Rb=dO-ZVq+*E!%o_EXNexNr2t>kXRP6`r{t^=XKI7y6RTcf=4lGjKjW&AHsxI@KNr z;yK)jwWmy+jJ@;d(I+XLR<|}<2l-{n?Hzvak@X1Jb?Cm$z@OinXc>MW*}snIyI7Km zNY<_S-7C(`YI|qQZ1(ZXt_sV<9g5Fe)!Z>e6G0k^(QX)5o4;~^!s)#XY&Hvj{!6w2oZ)E;^6Ej-*R)*{smdKW)hNdHNHf zgWB>*qFa`+glUATp}E*TAm#&T5Ak*MXK8tm71Bi z_0Yb_FGQ==2enkLtaZZxmwPVzV}=&EoSx*qb@;!MAR{0fYn3L8F^_GV9& zY!MR0hJhUKptDcYRK$tUoly{qCk*l-PIuQfm+@?Ph~YlF0n5ktQwk@knZ64HvQY6d zR1GKj^cdMrn*jCH*TWd(O&%F~^W&Cc314(MzZY>=(3u=EUKnHk>^BSc#kY}vgZO^hTP4L>o4&9DNTg%9~id+sz z?3}aJ(^@z7eTwA9u1v)2Cl6k8c#epV?p<%)^&tnO8!xY%7-ZA8?%kG*w=>e2`J|yN zt><7Al-^VKquBrF;UZHbe9_A7gRhdO#!C07DS4XG@hl?b%;KU;V^23V;Y!m`8@RV8 zI>kJrA>oI%6W$kw9bS@MgfC{Q(7`|ICR3y7X9-?3(MU{i;31mgLh2M#a2g?{xKF%H zPa2JR5a=s!+TbLVnD)2DXTL%3Xa;agE$GWSgHwGGQdCEQF$Q}8`%mXi)bFWUN-y;Y T(@74><_GW|KGPyA07*naRCwC0y-klKNs^}bh^U&GdqiYZb@z1l%q~dmPvwaR0t5(xXI^;bfdD~( zH~s;h7CewVkc-`!?a!*p%m{ZkQxy>&M9thIyU^gybQYo_Gr~X2R8&P?dF2&x`M>_R z|2hCf1Q9?$7=KX^0ukZzM7)7rz*cHRAfgCD;Q2TS0zpF&%?mu%;4sj`&&Hx5F}^@VAp#X0 zxBg%(2@oZY*VDAW3XInmJ>D=EdN<&{cv4`0O#YG}jU)mgGOj^DCWzkx-{)h;pK+JR zYu>-&pJ@~sue<+U5$tZH-Czf~;JLto zpqdx0s$;RoYY4|KFM3~aSH@!RJA5~63?s?$6_RI^;K4BYmDgJcm2r}FtfP+i*L;2` zFcIhVGX72(r&Gq>x; z)60qJG~?pnFwZlW&$qFV5HS`n#?BsVrYgvI3@9-!WH+|t)s64Ncs%U>W24Fk7a8Mc z`>Dx8sSjW2szTD}!36vY_}AmaM;b|dT#bBlD*je~_LH#m8ixDRyqVx`96rR4e1kaLRvJ6v1o9i;6{3!xLx_La$B*voumAZ^ zb78p}maaw?;EKebL4G8B%6J)X1eNd$(%wJ|uu%7%5*X7gbnk%D8{kF|Xf2ef^74xX z5qSCjndP|v%G-}u=5wWYC)S2&8H;;&MUOjvKNY(H_BhPr3Hav3$N>uE{#YH4kGtDS z7j(*45wCSdsLM>5D%10vmuAA(-~EuT zLFA(+ene$Ea*{`v$HQXZPl6n~?ZXRu#TD&n$e>!r$Vj4yi8a$++f>`-aHq~ zg)%i%!OSRAL5t$yuq^0O5mic6>eE8I+!EaYXx!IoM^29rn?3&I3Gm~G55fJx&By*4 zp26FZw9i0S!Gv%oWEsXt#5dr_9R&Q$c?kLl^?Vawe$IIMP5ha^IW>_63IlzIh=F2T zqN@lbEL}IiJVBj7ggPxS)rzXnH={MDcf&21=EAlb(~`fxU038LoR%3W!saWJ8)cb^ z3C=Gk)E%aRH3RcK`m)2OefP&OLOcX*;f|_ecUvElo;cPpAP9I`Hd}9=Oa9{E>PHulpKLWT&C%hxE4!Em?d%kDYu?2$gMpXfK z$K7eoXj@?BxCaq}yVD!kZ!6oToS$Y&i344gQYhhc4vn{%BU_#a>~1IyBR*tM-?Q@i7w#zy6Mr?=`0Hrw z4fp}!Yr@)rWMf>sL?nw5cc73^-Kf1e>kYPM<5W1MDDHmH9Ei}n^ZxaQma%g+m?lTH z@E(oRR?#Ay&NCE6!S>G=pPCY$=8KR1tAHhCGqL>aukA3<9g^d^$ z@ep>ULHu3rxcHJcFB1||8X%oDP=;G7KzYbX^Z~y8^E36pATEf!jhHl0XE>rpL`lex zk84Z=Aq5EPD@=>9rPZkkh?3ORHZk^E%HSXiV8L*3JY;;4N&NtG0zi3u)IE{ z&om=E(794SJrM}?^*h3PLag_9q;JDTDZYnRH9`hYwNnnq&boV0H3E;N=2klZ`Y1l5H7gezWH(& z31~5-IkkYhBvmzxWdpN<(JWef86`Dd(LCc-1a&YEt!X8emfZY%ea38KZkg9oN1nTYP8E6Liclc#_a0@_D=;D+j zloD7GiUm;xI;be3k*>^~CeC^j>UBk*GLgHd=LRh?c*r$lj!x;GI1d_OMW){n6oMZa~pUB*ip#-iU?5z zDTUC66d~k-OGWAeF#!dYPasPse)6w}pI(6r5if`sSw`5|)%z*BGp;die!Ay5A99Po zg^@Ob9}yWRB-%iE=`{|bQOHeqDo2ecsJNb}dDzlOK4lFj(D0ou&7e1Q0u5YxZ#m#%zYrWlEK+<)-7SV zp9^|3w2bOvWGtFa6&a^PNYFqX@3TzEQqg%umJ6cafldTxgcpRFpd&I7oQU|8UY8wAQG#P!QI&;qK#r z6m)CMZ6eMc?G2tf!i?zaJ%GndpvfD__Yg0Lza`Nq^@t|HZBQ?#hsvY=jZVmLFMHzm zSeZKbxygW(tzLV?$N0c zig{2XaMeQvQYHQQG-VPsp9=3+Cp^UvQo(s#IZaYwxIjHkQ-#V8|N40_nQi7t2sI$yUDN2OXyI@;K1Ex}`b3sd@ zv&+}qDNjqqT`-64hOWWstcN%v%#lfvvKNSqke<6!40z9ClLx|ykS9c*iFigR1Q$eJ z4+36@|HKm$ALJ6k0{k5jFSs-c4dg2lf5=S}`{`W~*1<9dGWbJ@j!>wR$j}JXR3-`3 z;;0DMiw|BYk=D~$nWo_VYv&KQyrA>Ba9-ei3Qn`|@;qVQ(V}z?6r(~Fuuw3PEZo#%lNlQ5OEvu z*nv+7(}&&t|F5PVcl8J>a2+BBq3qN@r|;hhj8!VpjMdpx7jF*>Y2 zQE%)176zf*MCcZ54$XpYg7w^iEu3b+Uc3rW&6@mNovA3VXXW{%OeM1LWs3BK!&(KZ zQ#4Drwgsyh1Z>yHEdNQEo;0OL=P420(@-cb1?EbW>5f{cBaW?vU%~re>WA<_${{{T zBm2l*8WQgrT)7f_LU6RqQ|Q?ILHW`i*HQ9Dm@fFsN`w|7Lagm5!u+Z;-e?pt_Tgy*HQR5&m2 z=?s&SN(vXG2s#bn+)$bf0+?DWB1WxBnV}ZNwyfnlMiF6ts+3t^se^OtxW6HT(9A?V z2=@%!D#TPXiBy3oW1(Y6a_mF$CWB1PxH4t2OJ;~Eli$!((O@5VvOG~M!InmkLbwt> zg0}?LjWEHjV!ff|3vJ!NHoQ079Nqc=BtmVLs=29vxl>A^PWuI<&y%49G;cf$*vWt_ zNKFdMWGq#fsxTE9`38p=Zkl8ygF&4#ew3&jVJJvhi4MBN&dS>lHaT_n|xC`|c-=7An z8_6k^DPfovq$sq0ARCcqR0Fln+B!vrc@n1SX)s(yA-HYM*ACC8pcJr>EDn`mS_&Re ztI|TCBn7i9g?Y}HA$3TDR0#tQ$1Z{W7(>H6sQ;2+QzxY?`CT>hB#9LFfr6%=*O)SI z!L#nJ9i$Iv+K8y>0x2L95t<1&Ni7Ku?u0;yA#MaW!mos{c)JV{gCp}q81&Yu(}}4X zc55_JZPI$*lOmBCevrJQtQp2KNOr zW%W`9BfYEWW0ZKq0(!$t2sgqDN=KxiQw42kse}|nYPu@P#Ljxw!h1Lpj@bp@1sdY0 z_hfW^L&7N5=)Kd|jTnh9Tc>r;lMzWIx;a$~MFbx-(xo@n4eEElc)9}zO~x@5{WB8a zmIW3M$G3b#l{oZy-7^?hK+ki!INfO%a`z3*uO9+x#YH$TxyV%`tI-~42(6O|=%^no zr;3Cil4=->U>dTOaBz<-eD!!>p961(hvg~jniWrkNlPL%pO9iH+}1k$>@DH3W=ZuB zCD;b-jfprEEJ5ZFDrGPbLeT=#iEcuf3MQShR9ag>D|)-JURKr?oFr(QaN9cPxeyKN z>vw;Lsi4}i?SlKl4}batpa1knWGOtICYEL9^!kaXPp=se=b2)L-QE#Z+IHi#DE(^G z<;*+<+nVLzzBU{ooD8sf7b#i`y1+&!La~s{M@lfs&YhLPmO5oOLU``@N6h0{D3czr z4nyEf)07HJ&DMknM_Q*yqC1PEE!?3;8byjQF9nHHUh~kQc%7lIux&}F>zv5Ou_5RGncm;pMQGem%o1H<I`MK=UOrW%Oo@EL>F#VT=mus=h^MAdgfiL`s-zpzK}b5CB8o;H@r*IarBO!d ztq$71?9diUnc3Ec8JIpR!C&ukZ`Fmq{!mYJ`s^QSK>@{j-f ze-|`EigLX)Zktm{n*4Ix&?$MXc@j>l#GJ*J^)2;A=c%&Zpiud;ZrnQj@Oi_5^GW&7 ze*MIxa9tZuPleO0EX$0R6e_Id^ew0*;q+~7v@X0p>*30x3|Q)d)&XmWlK!-0Nx3%% z6^bfR;Cc-#ve9QQ3g>53;P&|o7Q%o0!;QcD&3AnF{WI@B{m6g#-3?KvPH>uq^UD*< z%bC+udHT(NPJ91~y?wz@`sUQ9CrWF~rx^_+wl~~5KmBRt)>fJY=eaPyoH@+}?85ri zSk5!&d7@n!?LGLi8ke;bz|;ART>stw5V5V?uEtM4e4#bLY(opwd8TUNd`eAKofoFM z5tkdcH7L=DXowfEO6x&y@ZRCed*jwS*Y`IF#ikh{xZE1gHLGXcI#ny@v$Ectsle;& znfI$Ol^ef!no$v&2X%s9oD@oM>lw^HJy#-9vVq31#W4_XFoo(B&Z6lg6EhoPG{wt*@TW@^+Y2_dO)iXLxy#D=f zh|7DKX3=2BR@bDoqIN^{FxX3z$o z*M@4rqjH*@n^)S}I4!|>s!XG#x%N&iN)UXSNn@z;G{b30^(1PkMHJ=QocGjFAVpZ_ znmLsRFR#x`%ZVxmD*Xv57^He5IbEOAdH|I<1 z{9>uBW~|$WQiu{fl_?2BZFDoCABocmJ%5L-Z@hoKBF)&=8^8Yy|Nc+! zoR$jKnV9+78n0D2PsT4_PW*WJ!k;d}>XlDZK}z9=|MQK@b>q`B{F`5$S$pM&uNT%h z@zZ;7*;Z~Yv=+R*t&}44U%sHL(LcY@dPn}>|MkC$r_;pg)0y?U;s#%CS4t_oOoc@& zKi%NgHr(ND&3eVnmG`alel;ektnN%=oEN1T)JgGPn2Ymts=Q1>cw;l+x&=+(Gzl+7 zX!s#lz1dK=NTr3dZ7HLNvH^?DKfYV=#vlQA1I`QE5!`%x!ai_#9l;q)5(F;rBmX`Md_ddYXCPj4v1C^rUEW-mi@>H{TnhM(r-@VRko8v>^y;P+&;nHqd&Q)ceCgk7#FaJ%vT{eFA zx%2t$#w5bO`TJMC-ki`*TN{7+{FZfCuRNV6ss``3Ou!_J?_Zy|T^dq_wL4;Py)`JL zAVT05OJzA%uDud2SOm=)wFsvoSoomLn>PxDD)9PT`Q<0& zX%=RQk;E#uaKbCyI#W$CTJMfK+_sK;)={2n<+rcG%L%$<$Lk+H3xE9D_;Pb1oR?E& z>&DxAuysi{z67rYesy-HDdXp#Z^4&$L#LU!W|m(>`NtnS9>%g%+>LpzxGND2+d8i= z6Wt28ts(#OfB#>^r(g-|D<_s%4W1^m;GR}`U6h0ArLM`u1wJWVxejsZn$O|sH0=$=KfQU2(n0m0TC$C(fc zgElCdEUq?+7cK^uo72rXp9Y+s3px^{tvj^@lPH@R%^^%_mXyi!oZ{%so%QCJLtTRB zT8S`z{k;%Yxwd_07tTde+C^}h;JgT}2ey$6^*{Glrpi|MsLE}Q`{91DQqZ;HHVR~nN~W^*W1d=yl@gBtl?}dlXB7% zoyJd>l_E3d##AJCKEipL@O9<zB?~t(<3tDEzeE64zTW zSLHk_D#mw9l#uxXd>!lE*tu6VJvF>U#;G_zSRo<}8vf z;{BElJl?bM(|zN-D7^*KTxqSdxnn)Cdh~);V=0BTcP=f(5O256Rm6!B0>q}YK9GdO+QzNw5>?T9SoM);_|XIa^z;RK>V^yKE6JL}C@PRgfcMishc?$b>9cYprE>v_SW zFiqJPZcY-4LZOPAYig-NKI)Nxg%&cYfCUp7l=s&}?^lx-=P8j~7Tl%*D)W~E3$%M(zC zi%5Oe*GpsF8k-eD;JP(LmEIc9%S5e0+lE!*G7_RO!vJP`*E(Xgyi-s!D4{H<&ee zJyqt@#O=0mwG@A}&2cI}ytU-SLa4R{Z(aGrk6$>SYHIl+a96rJ&EdMOt#N5R+aiZR+r8l!)yt?B3R1H%$J~>zYmMd|AB$Sl>77Jho)mTO zjd17fx{ZN05G@naA{Ed~ZYAApJcz^tXDNkRvXtJJ@GOBKR zG;L-e-7J~j(eudjBy=iQ>-4^|HMq7;+n~EM?;Mr~-Qs8{I?buodcSRay=8eRhLX@C zP_pf=C@Eu8m?Swb6=4eDEh0~T2(<`EXV&D$v?|}7B)elRvVLLNIJ5;wcV-1c=v!wS zP`XFvN0dON@ZKBJv$^x-3BJBxd9RgH1-jEcH41g_1YK%2C3k14MaKDLeadDNp&25XVS>>?lh&2l_54pX&Ai+izkX{-m#V{mljSTm?O}kr1#0$ znsMDWwhkV{|Jvy0t-?~3I%xB@kLw^CjVxfZY>}Qy*7#c_E#sqRGZjgCCNfskngL(5 zfCpc0**S13%BLmcO!r{xiJF=V*FIt*N!y%GN|j&{2n#;dK}<`c$X~xMTvx%wd7Xu= zC(^9{@O{C3;%&WgUE!y;4s?;~6P4s@)-^FXA$JXM7~MMNP*5gSqz295?dJ5i6;yE2 z{ox=(gpFk4H&dY+TNqeyT^n1^qSES}aFQeIMzbW=-2xj;_pu4rRw>0se~MD4LK#q2 z#XwRfWM*RwSS|#fg&C8~-ksob^DKsq_QQfuC#6-mh%l94QQ7Nx)B=+VRfNmtyf^0> z&@ZWb771!C%mSxb(IVWMQ7qSR5~WVcspf{Q-IcGmH3L^OZi2UIY5)KZ6G=otR4(*3 z3Wzo6E!(BtvUj|AR?HU3S~sKtns0O;qbaO#ZJr7#%L?BX1+k!%atOHHooN!DrpjE0 zU`{KlPV0esx*fL|aMbAC=$7)F6n@uadBsz6rQkN^qae7{p}dVz=*pIh6mevuYO#in zdd#ds(HJ$1EV*iUZu?SjhxhT^K&h_G5-5Y_7ueh%P@ZtRC2sh9Z9L7HSTCw9RhY}D zydqScs6Smgm(6Hh2$}eL+i1;4k!M$nWJ9PA<%oOmdEj>+0s!+oJ%rP-4A$Lg-D%cS zXz!8opIs5Iimvd5y$2;#ePNkZdn8iI_7oj%Z%i+ev9KOPMmnbc#6Au0KDKFZWR3Bf z5#Xbz4_6!;a?k8rtj9E?ppJU|T$E}J9mCfw6qD3l)e!@CLG`S{+WHXE4aPWx7O>uo zY0J%5XPAo+Uf8-ZX`}x5wsLLRSkrpPMr&IRge#-(a2LG=w$mAw_ihoGSx$c#j|&NU z&lusOHs0CBggHiiJo^s41R4*M8ho@aj7fL<=sCM-Chi5!&HSMmJW^ z*E08Gy5XTJJfs#ZFU+A(9Gg@|TF^ZwSUAF5>d-L<=P6I8h~ciZZ5tEgawB>s z_#nd8j4WyjJ=@o)t#vlb-5)BE3W+{Y-%(ksNn_G_Gh~%bxKtgk;Tei2E z`Qa*LXanV8{^H(jxeqauY$8F$@lZ5|Fu}*nlcJe>c%I_ywTL0!&U(7;t<~tgoow&& zQ)O%IVFI2Ep~2vrh9t+`$8eYtDI&YY-0q$27Ab6#qIgR;9@g2cQcEJNy|2)Hbm5LU zlrgjc5s@<8NUz`))UTIzw3zkYGYP}Sg62+iz`M~bhXq*V@B0YYKBPE4lDN#cbD+)M z3U|zWJQ_sDD7<~D>E3NLAn!iUQ8nGrR4bEID1k{KQ_mqs)$E1OQ&9(SkYlo4h~VDG z7^uDVJB=~asCT#QftzCi?mcBizQ-Pa=o_>l5lVRy&54+>=p(r-R3$rv_W_|{#|qf! z%QTPdSRQLsZ|jD+=jrfH94;X>M{dwOgKaK+!qAKvY3XC=fTv@UUCR_Bks=aevdc?% zpP#=MvP7(^6i=c}hJW@5G*Z8%HOsd|<~iZnBB$sOp6M7yaHytmPw4Kx)9;mV$2`Sy zG43fh(7r&CGNPWq#v+XpjMrd~g*%K7+R$j3mqdw7Aboh%F)ax>66AeEt;PO+xf$y= zDuH{Scg}4ZzAh|{umvrGK9H7K`tvw;zKmm+jg)&AL_!xo`o=}}d5k)qmrvS*bVO#r zKBkgH0Or}-KH9VQVQyJVm(g65@uHM6CYR<-TelHsM$_u!lvV~4VM(a=o)V=PE_>e$ zG7L#%uZ)l6S0vkhYO;}prAyx1;h~M*$7BkG)R~Qp=wahzptoqrW##d_!&&Pwj?)m2 zS&Ud=iNHd}7awNj?%k$2#m)bsr(&P&8~cd2c$kH?54aHh(9XXjnAjzl9vP^Q;hCx5 z%DD$)POlCnqofA+=)q@q4K{jG(_q~bmfHX>`}@T1)QAX8_8|sww8F8E%|)n}Tk2jjQ%%=(>v#6vq`NQ_mEcxYSmaVMi7=aExWbKGDyIuSA^C_S|Pj3IC$g70&)!ted^ zVmV5A0G4{YjqV;~kc>U^1|O2m@L|kMZgihUJ@mP?)SPo7_a1aa5EFW2@@SDHBa$^{ zdGMof$MUgj4o5EJ!$0ldAm^QQO1Y1XHFtFMpzMjFl7eO*$`uVzEvbAY*engud#Cl5 zdBP(I*(V8(;Wlv~MHz#H9upxsP?SWHnHnt9xv z9ER2-f5{u2O2W$Bov7|0BH?;YC@ihaQG$5^QM0SzO8jR5a~i{q}y zn4F|>chNdv{T^T4f*5?6NN%D!*D(x!z`yi)19FmWXtn65AC!kF)C1M%kpBCA6MEzi zr4)MCtOIDG7tDr?KRyI)$a=tTBtLf3L!Mwp51`g;g+nM~JVwalG>g$s>tK-+=iIh5 z#@fb-umeqf`#wjWB=@1i`-c$hlPdNR=|_x`WG8YmyXTyU(BVCXE^N2rE*clj{OE|i zLTxPu3MqMH2irLh9;rM8;A7DJ9>~YYjU1k@$HrvP4yBai23u=KAP$cY!}q(}Xq)3> z%-HAoKIAkKey{+gDEEO<`4y>wI9eCnJSS5$p{>K0re6TTUk`IoMeu zAFBi2g(M_(^Mf_m=@McO#{L0br(t4DdecWA_0T1K9|(Ayo`-n@p>jWECAS0m&80A-4O7SrzP{NB;>NXV}s`4f$GrI2gf}>NP(IjQ|glb z9#HYvk@6SrJP3D#wl zVt1w?yQBuyGZMd2>Hr3n*4jsd#8^OKH2d%ILO#ItgYJJ|q@C;-$djT2#Oy<(N5kqj z9^f8BGv-uBlSlFKIUjl-hM)PN^BDK!!C&4#?dFcMd?Y=z!5Ew6P1{2N-*2qj5g)$w z-H#{Z(Z_!ni9b$Aw=wgvl#y)R*~~p=-50^fM`onq_Bi(#;CBVc?upF(2*~@j+&@Kt z4?8~BZIm0v*pOo_cY129*CW#0(QwTM{k^U1Zt>#+BX|0TJR`L|Iap>~gpe9z1+ z(TojZGW@96?H97+f8Z~Su=7=q3%37k|Mw0j#Tg`I>bi7{merls(L16$j5$u=Bk-_s zqK{Y-aZJ;D{4|GSVx#0Zsy#o+&6s(bBV&BV&ex5ybD2JTuGa@tr%*lOF42jc`_2P* zw4gSgN436F!6l)=Br0d+Y(5nxAYJ8u^5A7WtyLlQJ( zOtGJ`dyW+%IsXKu7S)5b&BD~rxR1yM+Ksp0)P6Hn%jmzz#oGAp7X6C_iCcK51J$)c<=o{Vt1pL!xNYp+qNApN<|Z}gwU}Z$m6>kPq(gP zKFBDoKYScUCVs{!Zs`N%BDtYWQYYqGGN&WPpo5&^nl5X6I)e2WY-b!h`S6$D7~n%N zit))C4~z8Zj~`FSw}$w+SaBejhxa%T*5k)cJi4vjZHC+@DU4a__pCZ2LKYUMkr}5e zzFw~*_6T^VwKfp$W5zxP=Ep##`uGt`_vt~0G}Yw*DLdm39++l(ofI9P^q2J+M)kAq z=))d%@ZsaXIogjd}U*~c0_n++x{TMqQ z1Np%kkH=2a#57Gx4}97l%y&}n_#7;PX__Al57U$pW1eTWtsn6Zx${m( zLM!+6kz=&raCM{s_i=B>VA1{K@WgYj{wTWbc~pKP)^M?dwy$P(+}Qs8(W)O#!#619 z+W;NkK-foW;#;@msXP1dyKj+4DTR5Sd4784>G=t3on{%I_E-fu;^}y=L7A&Qo(^G} z=3#81l*;Y4j;^e9chg*ROx2hW6dzdTdqzflvspC}ruw~lYGY>Zks1uN<$KlA?jJg2 fNcM>gX8->Kgswh>^T)Gg00000NkvXXu0mjfa8Ve3 diff --git a/assets/examples/05_video.png b/assets/examples/05_video.png deleted file mode 100644 index fbc849a9f487036eef14f22aaf5f7cfbbb7e64ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9988 zcmV+fC;QlmP)PyA07*naRCwC$yxEgwS$5|2TYK*_+^1>i5 zt``P*VUQQs3xm8c$cyWRL0%Z-#r47@`7suO`3le)(DYd2*eQBt*%LN zq^>HKONW`i48}d@4*Apvdj3nwYd+`d{zTu`?22V=1(SMEzyDQ<8_<;RMgxQnNRXzl zHxN4{#T?AlgWsYG7DeNLgloFT*IfVbg4KIZxbt%rx4(XeWD~}W{NT^7_(#A07VAFH zg-BIf&W;`b;lKZNPX6vcAR-9**EfiYAe!=xqM)%XfRwM(GYcb{@=qrlYC?;LiR6Wn zvN(!CM3FQeyvFoi#dv8%G@=?oBbqvdq1;3MTS*J9clqM|g6MkDl9Kehu@| zErJN5k`0m!Bt=R25wxUHJut53zUHlq z9gjAFNB`#soc_fF`V@Kl!J2ok602Q8oMHqP!E*1k=G}LmaPJod`Du2DYJ$+CV-Klp z`2ZRt8nfplO&H?{!C){bkq`pb)wp?!T1%1vBMG$zk`SE`N}RWQoPn3vC zHijxU&X7{RzZAeno?LW1ezfJHdynAZ@?ymoXAQTzh&Ki#BG|GEibItDiZ^82q{C#c z2$2{^2#{3qo#Xyf<%d@z53f76A9{?n1fzs#2(e~JW6nd8cSV;P9z2+Fr`u8;HJ_PF zKRaZ_guhrboIhqa1bnA-+kvk4BoaO(hH*rsBKU+Ai}wLzgu1dUPUf86KBHYU)Q!!M zPz9vqmjVe5icy0~4j0xM>bgb^B$On!>?0-RKhMEAC5VAAM*j4j3*P^5MHFQW8D4Ix zij!Af#?=;6jG9s;Y2ME|-A>G*iloJZrG#cdNhDP?DJdztKJjoBc(Chvu#ied zVjH0k5mnh+Jrz$jMscFlbxl)O%;#->SOrNjhcjz%&Qe>8vo$dUl!&crl19`RtTj|s zMdO6Z8JrmEx*;S5W9UcEM^CQ!qjw*(8HAt^Nf=Fx_pfk&{3BjEIl@>W29L8ghgIjW zRfS+MVzA^8Q=%_Y!dg-#X(GnN=p$o_Jl^%3?*<-kdV&hASezBCL{yZR08y-3k_vUx zaQoFe*vfteV*Ff#zbU-AcUlQ-_nr1 zoxVfq5M7~3i6}{@Z~)eTErB&ga#B?Ys-&0~$%@c8Lv6vSVCsf$7{ORJT}M#ZB#21~ zswEXA&bOX_{3mbo((#X-NVln5|a?b5rr?gdtkyH$k!2?D}F%e=SCK!Co z_b9L$JY7`!l;5jL3G1pH?UEK?0-`yuMpdr5Kur46B=!8dyD>3hc;W-G8`z~p+dATy zu*OhV6|ox$fKQrHWQu5#l86(r8*9yppEb9>S9S5Gfc$?p-aIx2a>FMMOcY3s3~B;9WhG$m3} zQt|1epd^N9c-ke#1WnV@_Z>zu;F<0xO|=jS9}`cvo)12}B1HY1D&%ue))+iKctY@W zF>&2RtPy_nbj$TN=Hxgge8_P*AV`FWxePO%*uiVVhDt&?0i7Q5K_Vz zgNP-Bh%ttgA|jEQ2$G=po|Kes81XUE)Q-v+9EMq4Gx!0oniDdLt!wTqkGX$-fiK*V z7@;u^u$(OC^xpH~YQ-2Mqc_A*jOdkJKXAHeAb}qOADpjvv{kOIt~puEv685r<<995 zU-{CjY`51KfvRaS!@ys?{XS3Ek=}d6n2f_xscj_hB2`7D0F|V?{^~2d{L5mi~Xvl8|qU{MVvw!>z(r79$~!(dJ3k`_(P#r2ADjF{T(5uI3rlgR0!<<4?W z-@vZ(3|{&E!)q?Lp00by%Xg2tbIW1{gpu=gp!0@)bIGk+CxmcKtv$c^^)K?)|N8$> z&1P6*i78>LDi^#lGYu&wutE%q6XDTE=M1}!r%x`p_xcwLw0;hQBu#X~zz_?CV6w%1 z3PeqafCoZ|gc#8T##nsJu~!Vl-~quJ+4D_FgxxR{?;;~AO*F<5ld|q}j=1UvY7yqG zWxX4ys+xr1V!dMXbj4zEL_42zJq~>I^dZhUs=A_IZ!ta)rJ^;7kFKuy@BZ*@HiJh@ zMZjPy%bi;%__*fu$TDjjL*F3+);V@QasKwhjK0oCL_N+V+N!5*<|I)j2$N#Up{}GL zHJNmrGG!kut8OHwoI{>_hqP72!db3G2q{~BO3pDUY9iwhkz`O+Rw-bZjFrPl(7dZE zTN6tR)#+m*Ni}=YYp17NcUzux*&vZbD~{j#m2dEmzV&Ckx7rc05R@mE9YYl6C~Z5( zM&Wwh^Wnu4OyyX21M^wKQEm9)hnG~wQ5j)2tNG@aUm=CSt>XnpM{`n0_%H&>=mUww z(W1>oY|IXnsCat4M$?8q1X2>efx8imk`h?sSj<`$wNN{YHKx=!`g{$lloD^g z{tEy0zxi*loH?8kQq){4=(MB;E$AX4gp?RHCt7QT+6a}v@vOxnkaBU?8koB(qn89J z3S&~xz$>@UFn~pvnTjDQs+N0qP8mZEm&2y#dY1?o#*|pEH~7KxFWfufKl$xn=2yRR zm%Gaal_Zh~uYch#UwZu|zV^j?{LH;uTyNLx#(<(Yf%&ZF*69h$<0ZGwZgG5kO!5IM zLhTHdQEGw87}~{*T?qJ~3?b%^7&9uwl41rlDJj8^ct4U-psp&6G3ayW5E0gw7yQyU zzDECBzsc|ZxBmlzkfKG5VGJWdz`BgA`j|)vGo$?c8+ZA+pM8V+I(=8Kl2Sq&+1dA(w{>vJ#Vc?@EV z;l2A0c<@htpMUi?f1U6D#b5BzhnGCrj`Th2(*TYCq;mLZ<^?Jv0dCZfb+%=B#$4_{&+A^QlJi5H%dcC8r z93nzpTdXz2G3E-MjN+Vg`@9g-$k2N#XKAXM^>)q0)fzQ9s2E9^1D)y?1Ro=!%AL~_ zmTiq6J3d-%7^1;hhmZPs?E7cu5DWb2AN?iY`R?1i|Kx(*ZpX=d$-P@AeD$^4ym9A@ z<9WsWx|WIho-=C zIisFcxws1nXDxMAV=6<80Z~ZKGDKzY5${Ku%2Cx#rcg95b~lXdx`C&g9guT@b%K$E zGnu|mSjLc;Im6vMC#=>R*4r(|%?xKO#tD^k^xX!YcZZ~;eC5?6e*4$&@elv^?{WWw zC%nJ%EZj9`$4~ehU%JB=&*r@L>T6tX-r@VhmdDqZND?;vz|+mZ#r2xA+jp7GkNAyW z`&;ZD{1t!v{kM7hswc&XLOCQHm3d_uqGwcxOM$=fg)@Hh=fA@H=TG_5hmW}K6TWU) z4FO`HscX7jkE<%yeNWpqjDBF&)Ev!PwD3`4EHNg!p~uI7F^<|ftSD`5aHe7yJTWAk zGgNg22ApxISWfGPz8hF?I{fHyPVgec2-YfC%WAdd?&*TXyy4;F756_{@#@`{(`7^L z9M_lUg(G_ogDBt@HDCILJN*5{m-y8;&-kytbDw|w_9YL_J$>I1hDbLEPc|J7o^Ck5 zUK6^=y<1Bzt~UJTyCYTO_;-$vdF5xm&Ts#{f0yz1exLWh{TFm$%td3NBvdj;`10u; zcD~~Wmsf~bj+VFh-9P*;=R;)hLQuol^&}ONTIP*ozOZb%k=16)>B%XI!`a*l(3oqV z-2GFGvsA|BwwMvxx+4036N`1Ov<@u8I82ljWAL1N=icFFZ>m1&lrrXOOGQUQ0448Q*RT^_EKA3j;}bmRHX4?pCC zrz3#~uHotCDIq|*?hpbmFX#NjZ@ta+<$uG!_IH1SZ~mQM=gl|Xp#EonPFH$SMsm2S zs+#q-oWf~$ZEXEGEP0h5HfndLSwP*)Yn)vUXo;62HEnzqKd zsw{pYr9|>Y9U>58+(!dzY=-oO$1=v|PNs!s*5=-(L@a`_7BRW&X*AJT%McPOLVY~j z7r+ov^3Lpi;OhGNr%37|Ja~A)55IMv?SmCRc)a4B^DWn-r)g@&abPoeuI@i#xtxO; zGZ|gJR<%t|CHm?6MVN}*;=+^B!*Pz2g7dXLE-hYJItDz!H=v5 zPc*spYRH9`q+GK|WpejWGEx&`FsjU|8k(AZ95Y!tsYDbiYe9v_(4Brj4GPIqkXK3r|E#$@JHp{^@tb%oKytgaaR$Pgk%Bo|uug#3*dm9j`2Fe&Z{5xw!VcbGc;~6MuEy(R+xZ z^f7y?b1wI>ld`O9jO2=Uwd%NacE;Q}K{svX)bhGIOq7hP3YFFb!;5sUAEM^$h-1RewrV=)N!c>ZB z+Pokp@yeYezHoXe*VMG{0 z;Cj1bR@HRF7Bvli3|wwDEM_gUrhyT}!u5KMkIG`Pph}68Gpu!D=|bRY7ZGD=3{;h4jENycypN3IE;q4M8KOrFbX}jjm_yIg z>m94jz;eFh~%yjtF|McAp z&`4dks4BK7PqxFr)p~{Zk*@d5+a{|4k0Q==bbZHcF=MmqF;#{7$k_EfS#L2`c=Psc zZZ$$vSsG_}xZctENZ$>-e)kTeA2?}hzH#ps*Xu2hS3CM~6?M}x2G6dG7$Y1lYD6s|D7)?M`N>5^vBpq2OA^?HMBO-& zDzkP*H1N0&991oIo4D1$Qj{c)#caXxqUChyc2kU{x z8oq!2gs;AGhubG}`ZORY)(E1RG1#uQ1RtpDn)PO2)paaThU-98)w%hz&9#Uo;r#N7 z%2+TKiSX9rCsbmv7SO8dKJ>Mn8~JMMP=mEyL)s){-=LQWveGt%dDw$MtrLG4THV_c7K!Z-Yu0hk?HDhy}o1 z_X9=+YuX$q{m7LSj#@`k30?0ADUhCC(ll8IHH5%7uECnu8B@mo26*dxPkC^;<=0+Y z@~!iZw;pduqfptRPC>EGvRbY2nw6u;z^S9zLQQ#!RsObwie_?p52{-HtJYEYl&=$Id9j zxM8FriJ+R;4xX!>XV(Wr43!g%tFWSI-|=_8dXL^jjIq=ae(=W^{LcUQJ$~u6Grs)N zfa^Y6Jr9IjF%YufpO@GDbaNiV=CIF z%5YQT{$GIP73+i$eb((-%b?2I3n@3E;kwH$2$aUv%$kbZr%O(cj_@V}h!~3u$_OF` zBMvbJ9~0Yt#G+iSuGkF&#u%D*_PP3I_i6Hi72kaG3?#xf@n_#X=Rf`Lf510hKIY&0l`rt;_pb>_@l$ja zsI7qn+ik~u=9n*Pe6;L#TQp{Ul{HG#M8XoI5>liem8Q*v< zhzXyRMh&hgCxef8pTp!NamC~U(i_KWh{zau|LGP(!U)vP(NvCko9P)eVO2>fVntc6 zHiVGqgVK#k+d6`N(((5j;Lsq4-<-S?AcjN?StuqLM1-~X^f90+ESni|>=7$$yOHH` zmZ7SFuJ73PBmcoK-^F>)#gDdp`%j+md;j-G{LNQS`TM`}8fLEelxu;ys!&y2d7m+k znNd|`+jYb^^C)K2s2q<0)oRmnWPg z-dxQ2gKuB(?RTE=?)jEqd-I6j`sFjK#uIzE-g?$P<)A2%i>(wHhXDf&K7k5N-O@A- zV@!-=4`WXFuCgRmj^-`STKv#aSvB=w6f^W5fraL$|Y~E1I%?8R2^HtcMXUo@Uy5B3;gWa zoWJ)sU*Z>k=9uG!A@m(XANb&MU=x&>5^d9BD6b=l6v;*wVGI$)Bi2$?HS?y)0t$g7 zO4|sFS;JjoHV9A4h@)48pu^z?d6>dWl3IH_E4mEGe4L z5CSoz^1ZUPHPKdvW;Ww;(`PlidIZILPwgrOABhS>GOUB;Kl|5Q&H=&Kc^u zDpO7wwntT5Rk4`O*mgUT4>X1%q=s=+hGE22k>lko!)?(FlWmp`IWuJ0sWn*FkTk0* z4Thuv)Rb8eB^D`=Ns1fwwtFS|v}=va1l|y`jA+)j1r=uU&YIj6j49#@vFOK<7(I8-j=1-QGrSMQa z4E>H?At-z4kg?f&V+aJFwPuhzUw<;j2z#wSle*4Xxa5^cDs>~gyrIhu^*@^ z!{yZq>m2{}JBi50gxDB`NI@OAJ|PH*I|}*#TnAVhRq5-4MclI?EIo8bSdh2}1CMkmo7;z6Z$^ ze@KyCH{OiE6{%DRAxoYrLyU>d^%YfJv)**fW;H|KG4wsC^4c3e!#E5-CL(=ohlmJ$ z-_tbB%`Zs4Y1#jd+0(}{X?b{47Dr1vwh%9JLo{m{2-O=TO>JQ5gxV-J=U;lwT|HIB zhd7Ob9?Ub{%$-Vk4vm{lJ z{jSXSMuC_4{_~hamVRm~BM2pDn$i)Ro{133v{n8UnYxA3IApnpX?9Wg@nh~fttekUd zn?-jr8N3Km&}SEQTJZhIb#a)|g*|u{-K#ueQ5Q~w!$wRV?krn3rid}_W=gjhMashK zv{;8Z;IQ3vctXP=T_sA28L8&`NS~<$`mreM29lYN<(6kZzmc`*&DSMfiR3AwX(~z3 zT%Satb>+eB-pz5g@JU(*k){AJd8d&Qg5u5dPxrcy44UJ<@C>AME*EkkPNSY>C#4*! zs;bln#_U&Gtldw9?IkGBtoMOKbFDz+2_BP7iROcbJ7K!84T*BAT~)om=uo3=PSB3Sb;E18VKf zJYGgkvOkyM=1H>3BE-1A>9%#$wPn?Lwm~r#X2#^hTu{VjrrwGn#JHc`v&K^FM4ATs zi`*2l+HhLjDFN^Ej43%o6>&FJu^gbmn^SxaL(&b#6TMNCn1j$ZNsJ2Y$ddrEOeV_B zfi;<^kz}&h^k67tOp=Qey8pTU0D& zHLGrthLw=9)-h&ilHNJYisEHuv1kC9Z^IcF#%((K@8`w?kl zY&qyGeIo20hAd<95Rvl@()pK`?Cr*c`JK1C(W8b@8Ica8aEf;i34 zX(}fi97JuQcy3XE%gxVCiSsEbbyb70c<)JM&6KL*Y$-%T!W@JJ*&hZo)jK!HNXwh( zp2m=868T}pKOv(%n$nNK+sTVdbeNzm2OQlqO(kvpZO)C8 zxg&YL2`b&A4+F{E9Qjw8K1e<;BdalPh_$NB@QvQ@cf!P+PT{()9aU8!*5Q3%2x&hI ztc3-j>@t&XfWTygd~-J^CrqPfpU_d;a+cb;tehw~UX2!DFfph?RaY46 z@MA3EWZ8R`0F@EOG7oPZxN=0to_aTj$MW4A4ws%e>*~gMhrAOy9hmkR?8H9I>VYBT z*@H_bqm)!*_9q-2PMc4MC&)e@|0I|D{Ifu%RH>!fOfagFFd2nNhI3Uphbrd{Q@nTj zxhZu*Zg{CeH}s6&(=_cfwXrYM`{Yx`7}|1J%tQ=Isk%AvNHZxqFxhPjr6YTa=@5p0 zEDRnPc&ZZRnf&*$!cq=SBa|sWethi?a_Uqfl(78QXM3k3iISpmKO>u)H09x@maZ*{ z_vS39gAip5)<`ypnGU)Xh9S2-y${T0@(Dgk59k}8as$g6LuGYu^yy$7J!qUwuyg-< zDmUK#DdM#KdKNE!rm=Lu-cH`F2TpouEcry$eLzN{&w`6j>CFD*XPuN&^lqB2g$gOW zQQEgr590VlqsYwzq!Mc>C$puLaL#dhdV0`L;ZwuH;jy)esW)=-a7pzOoVO`8)3iMf zbH1wOu<5A;1d-e<;sP;}Dz1pB(8aOY}?-7*DP3Yyhr@pGHG^+Ht!FK(vhLMTrKStItdBA^9NP+JVoKh~I zi4*DPOt>ZCx4nb%H+fIUW52Lx@7ik=+aCm;hs}uiyo(nbT)U(Bxpwb%Q?S-vDDg^e zN=LBkzQkkM_e9!yj_d8u>&JE6k~I$PSLBKc_e#MC!u!xLA|ic~Lg^z{Tm$S#r?Wkr zNS=XSe8bO@vGJ@t>4%y=cU(G$POe?InO%3MgZCrYgi;^v1FufF_Oa#dHRu1PiA2oG zgjM`@i1T4FtIO4%Yo4|Kb4jeog~RU}w!X%H&oJ}?mx&QFK*+ZZUsG9?wU=3`3%+5q z`Uys!z8JidnYI95oZ&Y$U7gRNIta4`FY&j0y9RlXHz&g{;3&_Cuier;9`29^$klx2 zN>HpiN%Sm9=x=S2`ADdgnV`MKeSw>Z?DdQ7eT=qtRyF+bM-~ngVP9xq2j%6W&h=^V zCGzxf=_ID>gvrq=jQ|@E@<_iLbp2n(!N=^iqXl1bq=991ssdqha=x=j&$y1WSn ziWm=k?ZzHTj&0{mFHYA4HVg~JuuX$Mz>~K93Takr+Fe?1_MUzpSx!hyGy$GwgEJ5k zPqtwhPr+TBX9wX5IKKfN_i<0z0#B&m$cG2~l&eD+RB2gcEW42*an&=xa}YJ}=5W+^ zuoA-frt4w&mE8`bAJnj)S)j&DhxyGwAyMv;e4cSUyMQ>P-2(mejT z%Y;>}RZ{9}g3i0)YR}VuNaDWI$Om}>yk7aUd!4|sr_#vIhZZ8NK6w%MDJCp0*i6S` zrohv`Pu+oM8G%pBUEM~(cgQ@g&{v^mGVadQ1Eo8idy=2{Zf@XC5N%_~3!}D(_pite zBjzGlwJ4Y9xAK}q)E!AuEK1VBl(_up<*qkrT&fW+mi7L;_dg-370J_+`%Lf=8k_lpg?dRYC`^P(Hs6xXB&}g7XHYDnw$RM=czV-7@ovqGIW|B zPTgvQFJ2JN^Xxm?k(1Pa?e@FKBwQ``3w%&Am%R}??!2ld-NrrDsr5M5`TEd>n0-3Q zIjjDP!u9^-KL0xK@)lZO_B$=CM|x>EPcu{)_bq#@T;k3P2Kj)o#r$q*4K7cDj;)?W zC?o4Ze{wN$Xgbr5l5!yAYo@M#VhPn%B#UkK%sI>7m3mN>V7IQSuF{nJ-XLn!TC zJbVlW31JAnSL(d(`Ls3c)6@Cu&sc~{dSWpbina#T*WV;(Q~J8v)$O`_jU`qI#%J^? z@b~`yi|zh|=9^!^6rU=dp0i!I{(b26+F-y$&iWRYCyXn?d07X0^a<%OaG7f=xK01F zqpYd7o^NPhq`OWfl+SI7&*|{P|DD7d(YEB-I0}s2oVt0Dk~Jl5Sws3QYsw^r4VN95 zR-w$LoK7LyJ4BmH&mQ((vmTS_Ew%aDir`{5!ezKATkhYNpn*@1J%l$kk6{&UB|1O8 zZ@s`c)!F1{!Yb6)bQwc+T^!tBciq;HUR4jDVYrAYo4c=R-;eK1xTC%|L3yXzJD2rR zUtHJ#Q^+XRKO2#rXciPLB1?tC=csbzgNN+}%!&Vwrk8{Lo;+2|)<^hI3k3t@V&X%W z+3m|h{t4XkSV-n4=^&qrxZ^R^9SR<~z%#5JS;Qe%U6>Co2>NCQP;bWHA~ScmoNX;p z1A5;u(|2_GA0)apXNsgDl!K68(o0sKd&yGKX-snB9MRWr_l+>L73nc9vP5+Na7@mN z-6$`2szBkCrUk9fK4b&lRFJd9I+&u8BVxcS^ieR||q=WvF{&K|7U-|i0{e!Z(cJF9+T+no4{ zd4uRuxkPpKAfE=RS$^gDJy9U+r1_$64HC)|#1CG`VI{L}JQ~;YYC!Z4m&j!T+6lc1 zY-`Awu;#G$J4>ikuwd_Ak=v?63!51!4>ea3nxCb3#-c`jY86VusD9ohF|t z&oempm?Ji+ebqM*71(o?V}8cNAZMp%+uq)?6Tr}^A#>i|T*@WfU&o0)khA_V3mqFP z>O#lW#MbbYu{R9C7n#*^H&O}lpH9XDBZGE~PDU6N6&_BphgE-Mc(*T1yU&YCGVB&d zIbKp0>{Z$}K--G90_(Rs9b1+dBpX=Dm9?h7}0nn}2PN#+SpkB)d#MZ(j`~h9UFE zFr(m|YC#I8vwBq=s-pDmr=u+6Cvyn!qDYndul$UxohcQ(jSL*B0yKi zAmtb>v${WWb1`^3W9LQJ`DP~e0bYvT{ce4A^Iv|yrwyfXBaO$+tKcYmBcuCs zI7Mdl+AtoQf~uWTsHnxn=K*51nA|0ndZ;BgbtuL^=P zr&^}jM>r1L`U%-FxHAck$Gg^@7xX{B^T|DCC#m%NQk$1S8|hl8Mk43u6_rdfEc>@Ja)LTIL3D*SqG|0SITV?k;8&nVsS}%VXE-N#^*SK$QW7qakigH+#x>7 zO(sBHVL1Bv#YqyucfrL^`-6o8C&S1m{@}f?d(ZZpVK1{2>E5@M(0+Sj5*l z(+VR$j8E-fUm5WBh3DPlN3bs#Ow<8onfqrHTIgIy-2gzHmhOUU{n zFF9=+K@n>~mXr_XfwJ<4_o7X1&5s>xnSkaLWY*jpYw{tj?Uvs?hLDI8|Npp$Ut3Dr%z_8=^dXD66I{8_UXW z=@q{SwqwA-7|Gw;7QM7bd0k4{AGK9IkBC_iLNbdEPwOZSR`Jg zTzF^0N9(gF;fGi8gYh}Rw-`)-4DPK!vq=J|lFaGjR6rTs>MIZ2-+tou$uhM=MhPbR=_$Jp@IABLdj>)p!*_fGSvcw&DOBrcAM zOp3kK!{+tnDgFj&y@TL8q9OSVVcxo*@3@7 z0s@C>X^1{)$Ui42(K=GH$h5Dz3J804QE7OlmtMrWl-r(rMHH>yewG1wo6 zfjsL^goP#^4kpp>&Ja6If9IhtsYxZUVJW%bdIU1~GE~Rh)U#2LHyVqno5im~e!YEt z^7Z}FRcHU==eVnEUjYHfNTDxT;O()M_%W-Ve9nKxU$U_?@K+@Bbb>sLB&Pm7J7e9b zs%lxBRXg}j9seGS^&85V!5t^Qw{OQtCO#-(j@zV;gL5fX#M@0sCFGA+N>MudEqHr- zVRD)ChaW5de;l_wk*?pnuExaVaBhdKl4EtuJM!qU!(!D&UpW+~PgJ|MNHsvfZJWN{|-C8;s z|CY=;8+dj`j-*YPz|$`PKW#`M&CGLuS?U=A!0tWeZ2^!E_xD>otHJ00xdDPk9OzVN zTraU>wbPU=((LURKxJSqxbJyF1KeU z>h+9*Ja&Z82;s%aKfNZ}aSP@N13(M$D;-H`yeIEbtolLig%F+DG zuWDlT86A;9SF20+E_q?_PgRW-d{*FZOUhk#IP*laOrxnQd7(POv;oVNKvgav)&e0u?9pYi5w&6*1{MF65=0&`Xzz5!YrEE+j4rv?sr~4lKyVqqPrT)di@0w~E2xJp9l0PKb zNC)Ny8B#^sSv6$4)|ghz1LWkfOVep-mqLE{1_a^+-fTy=9;h{J2euTBcw&VF8KCT% zFrV9+3yz7*08)ymjwDIG&wcaGp0xtX#)dKOvd2L1Wbgh{JzJcm;fKCim*OEYr}cM* zkuxbc^-K2IdC}VOe|YgT%#oIgT|)*0nf97vdha|!l}y#M3s?bQgnBgkQBbaEb}W-7 zHq68Vg?+T(K`X*K(0b*8e*dUs7=?r?L==rDF|(npLidjp0w5ch@>dlRP17Ua3i21e zE8SW%bqu_YWj7~Np)Tq5Zqg?Ne3muYCH6e@72L5Trbm~oCaBqikL1cdH{4qbKKEyl z2_Ui;Sy_$)Kha+tVl8v#_t6TnfgXWz96Gv7Cug@XC7GJCFT&O*t216MVS703SFhzR zQvq63hq1DJ??ui>S4EnsWJg7!=G02T-T@O^KHtcuV*Oh|C;JOuJgxR0$c&A+l(W|{ z-rGKxOSFHnGMQo@p(KO;^f~iq*^5C-MWC|0D*4w#^vV1!9hp4UK%y=rwIIO~qd651 zZO>36#Z;U=$275HHJjiNs0JBPWo#wSN5WiTL-mkF@TGSz^MqQMZT-js6c^<@+`u@) z_2b|LlVtqSkPXM-Ys2h<)Zd)_@MW3RmIY?4_C?>n^fYpT_lel$Vo2HM&FY6^9m-;y zCjoIbaIzjD=9S9?GVq?N>%1r6esj@tq+J0oBr*BEZ?t65`Y4Q!gMHq>PHIK6mY0Vp zdU4`9S2uWDMn^tbUC&PH0j-h43_;oFoNvppTHcb=M^Im~I9f$?|*FOIyFTHxZTSvL-GXYv})sHjcTWJy%EgJHhpw<%1VF+iC z{uQ*90R*KYY;-a|rdIq9f!BHSr z9w;~>-@zc9m|Iv(VaHwGN;U*#C7S=9t+Gt>r*{^oZG#;#?`$l-+`;sgpTuWrlfGPm zA4M2~gj%SWSXTs-*&>J(c$8s<*C`JBf%gG}RoG1K&tE#}JYGRZ4q)zGg%(Jp5TPq@no$_&;Y$XvR>MJN6sy7S_k zX9E%-$-KZsZvMs(uvG#-op(CDnyFm$IhBjPdT?QrFSVc<&|t$>|Pr+#>r zJv4nI>xhKqMYWp`C0%p%M+gMawdm}5k)RFJ>e=M~%ORdnhIhlQs!=S=g5v(oa#z?|wKs$La4**w# z)CKq|P6TENS@wUrZZwd=Hky5XE25|S$MM5s98_%dQU&-pJ>O=Nxiz%Sl@zehb5f9C zQ>C6$c&T$xWdd=g>!(eRVJ+3U~h6Z>*6m-4tOkJq*d=?{=aXL6gE+o9Y3${$M8+KOi%6) z`?GaEt(1JMN-9n_u82%0~B#V!^Z-AjaK@3DgQkiacs1w6n z;%f3idE7^@u1Z}$MVOSbvKRA66rq@VtXhFtiKPsy;e8eV@E;Ll*ygsbK`}LpWfl$O z+1^IG=Jhz@)rS_QXF3xT3u1f^l1!;KAZXypb@JGk;fWlxskjhde)Yoh!27d!+a%pW zDaZW9Uv#VAl0&W6QaD~#z8J@jevj%w4AL&q7yXOskP)Y}M)UmZ>wcQd9JK8z3}^gL z`t5r8O8h7*4wvzVH@&npcZZnz1KdT+!_48TYQ#m6q9r-@OW?v^1i^I_sngf%N$Q?W zYo3iJ$!sK*tWh`E<|Cqm)1gFvg3t;SJ^D?Z=W(#q)uTn(fcdtI+R&bHNeKfRAYj~* z{h2yX>y*9?%n?>V&T7%fQmP+#y-sV7X%=jgWLp^Z`zNdT=R{$rb+zow93~=Oc(P9>dMfe)9c~vyK8)A%Yq%1M;b7x@P!6xcj=922 ziD^7ETbcBd^_JH!tnI{I@9_tIW{w)J<5g!=LDRa+5XU-J6YGZJWB*X1_sa2@#|O}( zd<7>Zd4h&szkdw4rTSP{^;dt66kJ)0KJev*@^9(Seg8aJlcE$c#iw2iS1ix+sIVeW-g z?47Nxb~P}C^|52P*TZULr4sGMazukJsUhWOCq(u;$R_+!l{1Z}7=JY;Oc!^e$ zMO;z9d~8d)l&sZ!J_?L+uqMe}EGiKeruQ*oF^OI8ccNm=BpwS}&qRaIx(6E&Duv)Q z{_(>i6L|j*f6XuOZMNMXGo5T(9Ja+-{P{b&amQ(! zf!pr?OUYXW$#mx!jLfU%XK(xHFVB0}aynWE!a0$jj;P0fP#tjZERNyB8+Y1}9q`%% zHLc%kPv-{oIax_<3#21}WO*5xu(T52xCBV)Jzoz=9mqfiS;&|B4FwG1!2ma zi)FAisT&gcVB6DL;c%BN4F7o+E3Cm;7xs<|5V9_-kGJGub4gFrJ)Z68bC^MXK-WuV z>Apg!_PqREl7CD#2Z{WdO_ILagl&3$?Gv2wp*wvS&nr3w$_;ZP?{ zvz*r^@OPfeGe7^@9%*WqQu*qTUazm>?AxpO;oN3htT{~ z$foqI#)Xe?;Sn~`R4rzR9(9oz6V|xrm@>N~L4Z2`PE0g1_=Mju+rwA#Y;}uG8S2q! zo}aq80)I9Bq1?eSJ2A_ffXh3qch&RocK4K!@L zEc>Uu6R8%*sP#T}v56OuNLz7x&4czY8S%e})fxwi7*cje88OuYkiTdhCqrk_1 z`1Xe5zN#NjBtQYvnjdy-7$18(K!We~M>zL>y!TDos^uL{(&;5QF023Nm zC&v`-*ras>JEJc5_9R-AHK?9+J#Fsz?cns(^S>eo57^Z{!)l6rxnqYF+Im2wIF)ee zb^4;?7dkvFW;m%w2+!Z|%McPNqP8+*9$VZx2GMMD3Rl3*ElFRWT&m#LCYZh#e~!5@ z%+c!d`GMW|yge-p+J;E7)%!n_1!!^2ye?%`h9;G8>5Na@EY{o8wq=(P($`eeO!rM6 z5su37-{+6Ev?8S%u?t0G#f7~q?G;YXd?w1?`>|eK^!1K~GS|OPXVO8RN?RDlisTdl z=FWi_eTaC35~+^bVKq7mOe~U0$x8b>ns=l&llH-J5XX+hdbc>qT3+|%BtPT#2SbL_x(KMBEwt1b+=wtz9AHM5;qJXd>-)GVNiU8g3%!|Wd16k)9>OX zFqa`RZQz97iEnx9%q8fkB&ziQsCB>cedq^)%PYkir_Zq;0MarnIKY*Q!=-qoWvd2h zk8e~+`)u<}z3rC_SUH`oEII}dO%VAW&rB>ociz5&r~!S@hV%Tu(g4Wuf-*LS?-YE4&h{L>^ptm>FQrJr1a ztFNBST0}EA10-s&*2&&-sN|}TU4968_&T`ZzG<`?93~WPN69FeZEBiG-TS$gQAY$l z?$~we)6~d9&6Wih(;Jbv%qQ3Pv|N2acTY5Y4BmB@m7$SuQL3yxmqztW6qC3>wBwg4 zlAxkIT41&PE$-Xwckk*s^H=sWcTW4I=AshIxwxMLnUo(eLoN$3?=6unj-ICn{-e{78?G%-g{6>ihArYUE))!1^hqOU3>mYs6 ze}91@@8Wbgqi$Ie#2FS-K!pthx5g6<;vQS=*m)=2W5?a_avoSCd(z1RVGf$A^cJ8z z%~wrP7WI}OGR<*iqZ-besUM&8wyBKTWWlg$e3to0%u=Dh3;}Y1=g$hne0=`DS+Xw% z8|EBbnyYET$V%#%YB?ljC$f7?s(b=Wog!7 z58P}fGA^S0Ip29hcDzRr`$PEVhPdM4Cf0|{SG2A1qCy;8!|44RR{2g8RP%VWEj*C< zdsAfpe9@j^HWV!%r?EUn=$9AKqECgYFd5JKwMoWLE_`dz)Z+9EB`qgDiAa{}YPY?8 z7Gb~fvd~Wt19zNkdg^(Fn_t@EdR{W@4kX#n%gBK*B6@Dq#%8IRzCX62IE(ylEtF;k z)h5cgCpn<|dCOb{Z#DzUiW86ewB$3R4-DL_LN;iIAjBYLlwaEKOw#Tf-Iujx#9hGCFpS{raRB zEWuEZUuy-aDl|%Nd^w-!sGK1SN+%HT$d>fTj<(1c_FQBqz`<(%gD)N7%re@gev z`dlgprEO}Ol?jabBd;2!uZd2WPG+jBh_QqV7R6YWx1y&^_VY?|XnS`Z2fH_|797sod$PptH;TX@+K7{st zR3)@W$Fq0|qHe>zACt1|!^loUHAU`PiyWyxL@`UiTpOlnO@36AsqHpIxy~Ql(OnI) zL>42QTXMP8%~$^B7yf%t{qe^PLOT9|M?dAuq4XIm|6Il$Is)h|IC@!x-zGgySWQg^Arpf@uj5COQ>!V+XSyglS$FG-%FvC(I?w6dg z@zA&O+J7E~@`pgFj_))u$d$+Q_V!A;MJL{a)D3OW8GRkEkV@AtmIlaclqOCHk=5vX z4R7vL#v-d4Pv^h-bxzFx$kemEsu%7neSf;S!V_*ie)|tfwn;)9Rq0*S85xW03^(5^ zE2i&EWv9ZF=Fi%4IycM9KX%@nCm(%zn_c`Kti5vK$IxtCt!FZ&1GS!4{RtQ_K?de> zTdk$(^dL6KWJacAiy0Or@IlGK3wuY}KNR)tq#~;j3*OG;uc~}hM*#hIyNhaEl*Lhi zF(SpYnQHS%EztE&q_@(3QWZ$NjLcFyquWCOkfa5$LvuvVAr7I-@(*JbT5n{|nk> zs6cg9X*6x$eBObdPyrK5?Reg=c%K@fut|}C!Jw6QKfiZ_CxTXVZKgmPv73|L5U_Ue z7qPe~lCNO{xNUa1qojv`nOL!=NP1$dj54${5jrr8_S5E+!=&1Fy|MC`|3Rj9TBKe} zR{QzkVb29IJnsgk?3YA|YOw&aRTPbNH(#K*PODOT{3kYP+gkIux#tY~%iG#gtkVW- zV~CiO%$!b>&f-VZ8f^#eehB4V{aOkL_$l?tMFGcr<>>m~n3xHA>_jfJfs%<cNC|-sXiI_GZ;_IO zb(Q1}l`X4CP%2vXCc(m5kE|Ba+@AuS2IA`vSoHL_{+o;i0Ls&Xa*zFw53+4jCts5m zc$1ZG5BF0IP#zx)HF6vXnbesB zg3L?{^U1^^vTiNu;cOWb-BJDxN@*!DUr=cDa|B&CqL7@xN|d)@BE6OgX<>541q( z+gm%DG+>?L%*e7gJIZ!B~EYy#EY?B#-k#(IxPyju&Pn{jHLOiS@ze zG(=L#lR2UuwUC1QvolyPu%SYIqveuvJw>)T)l_Jn@)+=d?A`i9Vl;{VL?tYrR(JFCJpX3(W+g` zzo@8rEugYQ|9?^5^i=P7xg25n?=!!SB*(V3s^IjXJ0h3Ho&l0|yk82VUuwEp|I{9m ze{j?P^wtXy;4aCBP;_L{s z?{WjR2mb=CV8WW@Y&tPi>z$=s(_~1x$i}U}U(%0a2Ml-nXnaQTao4 zelu7WYmMiKp%fIhLjff_^T?kF*GzOn$9`VI4@)J(;16~?A-YXLtcU+}>l0ZrA7oay zYzZJ98iEgi?b7URtn>k)K9nrsMiCTEO{3!mn^aozx^JZFuOQ$aT8zQ33V6!dwtr{w zue?c>@NJ{sM@)e`+grELy)u15OvmJPNh!M%D92%j`0c6m2zfnm;~zEPN`}3!8;d#F3kz$ga$u2Byq>zJ{JuNj#iiY3$!s!Wz%;= z$EdYOl!v1yzp&is>V^>7H|MiFBfLsZZ)l3%bAYAxf%@tMW)ly!d83~6W~S(juIdus zRxelUk4v(sZKf>$OEB6qI8W)9ny@iz5I%Y*KNefR<=-_34xavIwW*I2@&TPR4JBha z*^?`WVDEqJCeGgsQaAZpIYeC`B`UN?kC5f+bxsnN_MhQ;%3#I4v$JT>Q#FBZi;j}I zzpZhTi51ry*n3GrH^>;8sL4;T(oBSO70bF^5|#0%Q5{Sn6}VZNq~2-vC{8KVw~O2sCN3To-0ZiB1Z-9=&Jpimg=mz>Q2LV_tM5@YH8^v=>l~xn z-ZAq{2-oONR$mQmKzY?-wLEJY{JvD>BedDb`|6C<*4KGbz0Mr+m*Ha{?iY3y1R#tE z=_EWxu!FdVJE-n=2J_h1l}2r;JF*{WtCiWWHFB0xR>rk+;p{W{%jgfhLmb@6wiOr9 zsV-S|-=&QXPm^hfD5*l8I#5Hx6F;K?$pr>y?mmxy(ohch-z9UYBHdn_IDNgJ)o6^_ zjR-oug~nXK{;;~qS0pD33#^Kl+kJN^r+>L*sZj0^|B7|S8F73{jF3>8Xstkdlxj>* z31#EfEwwgn`8-G7f}&gIzU>?r3e&m_d6U5xZlCi*mJE$3-u~Cz%%Am=12or3 zgSU?1(-xK6jlAt+B5MK^jbuobL$fvOtV4+=ZMaTAWU0Q2aPoU!57N#aObNkYo)vu+0h?=At(HGgPiwgMb%ec?9w+ux|dh7=H zC~-{w1?dANS=gi*7zn+zjK=pcjlmdQaldFeC}-L z=F8fi{z#htiS<+grvp_7g_uQOjHDtI&gSGB&h z5!@TDkk2spaa`H@HAL*>s?+P#N6NR3?cVLC6a+y66+W~5cZ~%X_)b4--h38UKCG#w ze(E#j_~OL-0!cS-%T_$G0q+w5E{mdlm) zbl((wUjfNSWv?&}=XCK`LrndakdEz$FKxsIknu8gE>kDc9&gz7^@*;dlQJTcF`6-A zk55Hfpy5(-?Dv_EtP@1mCdTUXP z@44y!F!cYBuF8L7-dm4m%^^@NZpAY#iE;#e7n+vlc|QiG-C~+ZpV|6db- z7oGFi#eS<$G|8R5Bk-fC4dNL4MjfQFG7S}(@qWh>e#BS1^q&dRV=hX5PA0xhR-I;* z{W%6_-hm!Wj5k&2SLPs1aKP8!?|(#;LVCT;Pd>Q*C-&0mb!EcU2x=g}gB2r=B3y)m zdp6IhP9tr1AOK2a+{F2(Ra~+%%w7cAJE>9CUiMu>&Gg5cB7CRsn;6ozt_L3|`qbwA zTZ^}rZ+^?m1wn=_UJJ23N@nG9&heez=!udC?JCQ6{&l6jrMG^~WlPNwS1{PQ(|gJY z)!;ymPU5Zbnz6^!{8$yK4$=6vOkuIxf8^Jq)$VlVFt!Xxc?B^Q{LtE11!opMYpi9P z+L-4|ybo+!8C%9v<__0y9&9XyZ@o9DQkt(l2vCewbo>a1VS&S?xe}uG* z--@Z|>bp?Zp9Hj!b#|GxjK#e7&sC0Z9zRdrs+l`G_$1(WVBFN*fVZDN^pe3E;w$ZZ zKasPhcJUy@e(ImKo7re z3Bo)j>G1cqTD9-pTUKfYEMi+`NYtY+W%DN04RL-h=Ksw{x!5d*@&;P6%#+@(+Si5a zDrfgqz0s04_%1Xh#y9=L?l`+9tx$GWCds&oC`xKd9Nz@KT5s6<_B&MzS^9vKD?IeW z?UTcK+QPotYtUal1hWJfH-xXdPUY+M_0WYlss5(q`LAWRMD^`P=U5bXnVlv884!Z_ zs7SH-kPDHCcFfvD7Tems%8P$)G%OfJdVhL0(&=>V{+C$)UlWo;8xdzM|DMdIOq<_L zeI&dI{LiaHxDwuxCqiN9ZJQ^a=}Bpg?j@lsL8*?}jxPwmxRwcl-`4=^7!wi=lMq6+)gZ ze5M2813>HE_A1UwW2FsgKG9WT>uq7}zuT!qm!t&r(z5$seA>H^$~k>CzcU$?-brvQ6c90WvUNH%7|9a;+mZGlEjhiTXy`_IPLJhe zk{V7eQEd4Acc;`@Dsr2TDBf2CYj zS?C0r9y4W}CHb~oHxgMXnrj=NI@6RDc)iuprJ?&?PncUtIjg7}{d;YlMJ|CaC}GPa zYE+qTY<%e5OpB9DSu5?d;Iw!;ciCbJu~CGBvaN2^Wcszz4fyk5D~FHtS2C@|EjiBi zuhpHt2DhBRo6w-1XLIc@?Mdk`CoA_o-fHW4@ZTfbJ7vj|%%c2VGn!A<7FAsiYmKAJ zcx2mU5*qM^d>4~1#kV=aP2l`m?XQDbSi<3VUogUB`p6YEXIUDPzF5WySNA)ywR9Te zG0l^kx$yilXx6NEpvI}0Qa8fas)Lq|^doo?fOnuW!XPx@n^_CJj92PK>HR~@)CrGA z1XuMYz+HftJ1%vtI>;0HgQ z6PMt(HCnG-@ruz{HuTUKN&UQ<%6lO#JpuPaT+QHyLp^Z*Lc@tzet58kb$3!wd>sl; z^kgGRb#8hwUI59$H;eI%K%>Ms3&?t}E#B0V@|h4kzp1Zp&%eB2Va@HCIw|)}i*rI3|Q%!AuH=?TK0$<5`Sh==8&TRe+ z{wdhflfN)oP<>4~g)cguug6zFR!7L=BL!K}?FY67M1>@UhIiQRm0&`CV-@fRqV2Nk z7h|jU^8RYBRL2SyF?edW1iU@zebu_K)7zP?5;C*gs>dDoJbJ#Ivb+OzC2mmkrqvBj%p}t9v3*KfLm{auK9O`%KV)^<0e$aOh*| zN{XO8B{ym6cSC%lM?uZz41Q|QWY&t#iOage~-#8YutY}&Oy#r^jnKq zA#DMlb}?GdY(J_Q(;ZNzvWI6fIVs16`qTS6P!IZL=z1rdjZYg7E_*cBfzlNPEpRLCi{-BdK76_OLT*{do@#cdf{E@MorLh9v%4AZ+*|5NH)my zKh1Gi?8zK~3ef-?*Ldb_!kT@*a}chJH^e{K;BtR+ z=KrK2yWBcStz?ZK#6oi|gY?RvFmXB^AX2n^6_rzrsF0Uc+8=c5NB3<4B$d{&>T+`=fOK2-;T z1OMGLQ;;g+EPPJFdJCKfZx0eOAQd~V6kEC22tScmCWrnz*h_74EI>gSvI!IhID-UK z#0O3enke+SHi;IG%Ez$7g<#*1yEIZ#Rc=6}Y;R;j?xshavK;C?-p&E%n{ckv zGxiNiH~b=2Y9}O6sK8=g`Z+CE9;6}D75EQ#iL>;E%##2NN@17sfDn||J z9I*mh67jD7UNj7M{p*NB-%)+i`Ckkl8mT>(=?<3d8Sd(md zXsHRu#|$I#P~W$fr+xWFTN4#JqoBPDS(JdzakW~mJ9bg<{2}LB5(Ix!_DT2G6QaJX z?8hfC(A)8lSdZQEZXdB3UdIO@eT|JQKWo6LnTuQ}&a{5qQv4y)__e}QDV4x-SH*&g zU+b5qI!Gn&@Y|A9%l%@sLMJaLZ$Ks%RkY|$S0Vu%GmB$7J!qC;M4 ze*T2?HZMeUa2C6;4Gc|+ht*gPN!m`TpSu68pUaF9f`QGY2>6yLp^1XrN?ZV>NyGoc zYby&F#e1NrjVUlt^4v>%Bqt{#!g{UVm8OdIanFt6`qFAi wfUFs)bEbK^SQa=8&>0R_aS^Hg;qDAQc00kUFG5`Po diff --git a/assets/examples/07_earth.png b/assets/examples/07_earth.png deleted file mode 100644 index 46d2de751d17c1887540e1b3e39e5ebf7e66194c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8635 zcmV;sAw=GZP)PyA07*naRCwC$op+EV*L~kVohOH#nVs1jZ})B&mvDEu0}hD?5P=j)hyfCVD2k$0 zlIgM~m1$MUmQBm5l3kW*=CU%3-y1T-PI$>7l!O5J{46IK|vhK-LUn zniknyiEM5K*YknvFgVzSqKM=Q3p8|xwuql7aBZ!bm_Yew(P-G2J zlri)gO{2-PFMXFoM_y$2&U@K3vW-Nnoee{q5d`6efpXn}tT%+`dE{~xzVyGIWPUNv z@L&h2WRyofw3|vL$Csbj528&+tU*`0pI9u0DyyhInWgMJrAnS?I8G=KCYxO%l}s}} zdMmOlBg+bS@bZCY`0H={7w+6~AE{&qpsz_f;3qE~pyK8`s zbT8FviCV3MqWaj-zln0S$SeDwrq-;oZR;HzI{GrY(PZzAeeAmR9^%pDbydrC1+w~}dmmBa5ePy!)t-<~9&JIma{B(kECPIj_)*8`*y zon#A3=*=3#17m1ffD4l+35R1;YelAJ&$75Y!~q7OiZ02S6Zg8YXk8}lDVZR zCTGqPjilJIWe=HD_jQ9JUvC(dYLkX{Kf_;JOwk&mBfL>Ija-^6~;kt4TSR zB`Eornm$9aqn}gtL+su803!oqWLIXHoSDX_szkyu0>037fg)co5T568;?xxT51r%8 zsR@ppy@b|YW5c*Yd+8~*ZodN%dG^Jx5c2!+a9ONPvwO$=6pBl{dgv*pX3v8QgMFLG z<(3%g9>p;07%d&qwy_&k2D&yNHY^%a4N(+%;=6x=U-Z#a%%i4~7_BCadYO801+y~C z`HOY@lES7$*Jm;xSI0ny0SE@djE(FeS6JrNH@=UD zz?QMw7#rDzqR7n5oIsC-d`oVG>u+bLG=eQjT)_%j%8UWf<#aj zF)a(%wW(E0)LRBVEx_3Jdx>Rw@N0e&p%8_I3zUr(f@2epCg|R{hwknT*HkI;^-#x& zlM_7s%PcUDx2ucF8 zMU!f1fcNjbn~B+zEM7WGhcApHD@@hf=#^LKi3*5-;@3#WlGN)ameq!?TeJcZ0zrjD zEQwDG(LXSXWa~JKvjl=6G^@zYBira%Nipw+VY?)P4yS#NRX{14f_ z-6Pj%QqMUYzfi{#juMKsQ_L;V*)LP6m+0>u$1*A$Jh#LXKXMsL>PYQDf>NEu>@-1t z7|bST5`8?g(7|@E!MeeYPM%lP2NGPPD8zqjOarogAH9W)NR6#*EDEZ7E3Dys*N%Y$3Y8(i3NislAZV@NQY%&ApymwVYGD4 zFD@WDI-=+iPmki)l&h{3`C6$Xn=SISuRcY*ErMWkrcySZB(l={?HWJK$S|OMmU@xxnUd4dXC_j#qp^q zub(P1dvTV|h(J`8vCRgRW{qSrz*40^Z`UZj-DB9TI-)4yc_wysnNriDQg0ECXNXqI zoR}`q6Ra@5w16mf5)B1!ZXjzT>alPCgmdSn7#iwk>v)FuKYSl%;UaExn)yd0UOSTG zFaBbeEfYH{oM_*GTOHHjf}b1OXl_;bw6X8Dzm?&8xQ*hnO-;Atr&Uznjy zLp<~9bJUxYOw3xijzhf;uO4WiDNwD8eB)aUOv__s{t||p;FAxwbNf&?p64P31ZH#K ziD5pyJHkNwEXVR1M~}S9`?lYLW17f{M?e

n%)2$JA|RXHF2yY@k*x6Y%+PTo1(; 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 N002ovPDHLkV1g}Kru+Z^ diff --git a/assets/projects/00_jsflowfield4d.png b/assets/projects/00_jsflowfield4d.png deleted file mode 100644 index c1b6a1a5701136921983f4535ad174dfa15f862b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1335 zcmV-71<3k|P)Px(@kvBMRCwC$Ts=$tFdQ!aK{Du(v18<*Q{X(~U?&R-UFvX)oes3iEnRLAoE;qf z2Et8;pTR|3ocscU;3hg9PE{QK!w*8~n`xWAq}Shc*XxDk$&=s9leC&v&Mq!4wBCBF z#4yGf;~s~6h7ihiUAbA@kciar@o`=pE4B0U^OKX4mNJV{%0WR0xvtx6e{@~fb-krv z5keM=MPmP&T8VP)pTxFStJTNH$Km1O_xJbL*VpgwFaPQ2=;-zJwRh{u9txbRTtXR! zQN~4x1cY`)#xlkjljzRk7cI-`iQal6gorS|H}xVQLP*3RZdBKUgM))yOoZ+>0&x%o zw`II=0i(uK@c4Z>+)i8`!jjEJ`FF)-;5X8R{LIAbT&(HCA%mvc8 zQW{@tlv0eblEf)SG=6>pw0s^JP1A&5ITrB`i^YO5wnkNFqShYqZjg=vC>Udj^1Nbs z*7Nf-{|sz`B?$mA#z5y8jYh-aP}8*C-Cg)gI6I@15<=EX=ZFtD?5aG^3*S&iI8?IG z2@hV^bw1|#e4aLb?xeuSag-B*R?-spe&BRM;^~)+734S$v}W73=XnUBo12?XF{_Hf zV2pj==Z?Q40HqBk?;sIE;VKd#Lz^6vzS%TQ z4kD!#P_}J5KGKZrUntLt6eSsUb#*0WY;SLGiDVJ+bh@rnN*QBe9t{SA!C(NNx3{;0 zAUHieJv%$&e}U2sA+))4_jEH+8gp?0H7-I=Lve`|DIQRkuU7CDaT|}mo#*fd*0So5A zFbv=K%eyVxwj zq|TqxMW$t0Rpgw$@2iJJcIpe1Z;^JqhE-wl+HhxQN7FRNae93tmHeh@f-n?`;(u~p zx#zMFLZyVv$z&4W92XpR;th?*knEgOPKdx5^W%MC6qMUBFD5+X$lcSPcry&+{{Fs& tAtI5~l^??e;uM$-CEj!~o6SUS`wzON2h6m}3!VS~002ovPDHLkV1o9Iibwze diff --git a/assets/projects/01_ddd.png b/assets/projects/01_ddd.png deleted file mode 100644 index f571e1c87ed2ff4fe99d825ce9bb2638eace91d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4712 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 diff --git a/assets/projects/02_spacecannon.png b/assets/projects/02_spacecannon.png deleted file mode 100644 index ca196244b4089b7c25519fe54c053361588ad2b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5434 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 diff --git a/assets/projects/03_spikeball.png b/assets/projects/03_spikeball.png deleted file mode 100644 index 3d1ff7baa8e3b861e6939f6ce4369dd944ecc463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6406 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 U19%#QO#lD@07*qoM6N<$f)1c_)&Kwi diff --git a/assets/projects/04_alocasia.png b/assets/projects/04_alocasia.png deleted file mode 100644 index e4c37913391ee4ddaeb7b7888123dc389da55821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11693 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 diff --git a/assets/projects/06_rat.png b/assets/projects/06_rat.png deleted file mode 100644 index d7f880faa05f8884d0a8df6644f44be5988e1325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3835 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 diff --git a/assets/projects/07_orsotheysay.png b/assets/projects/07_orsotheysay.png deleted file mode 100644 index af9153b354fb666c711af4f25ae7d0d312f3412a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7948 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 diff --git a/build/Three.js b/build/Three.js index bf3bccc7..a4edbe9c 100644 --- a/build/Three.js +++ b/build/Three.js @@ -1,2 +1,2 @@ -// three.js r16 - http://github.com/mrdoob/three.js -var THREE=THREE||{};THREE.Color=function(a){this.__styleString="rgba(0, 0, 0, 1)";this.setHex=function(b){this.hex=b;this.updateRGBA();this.updateStyleString()};this.setRGBA=function(f,e,c,d){this.r=f;this.g=e;this.b=c;this.a=d;this.updateHex();this.updateStyleString()};this.updateHex=function(){this.hex=Math.floor(this.a*255)<<24|Math.floor(this.r*255)<<16|Math.floor(this.g*255)<<8|Math.floor(this.b*255)};this.updateRGBA=function(){this.a=(this.hex>>24&255)/255;this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255};this.updateStyleString=function(){this.__styleString="rgba("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+","+this.a+")"};this.toString=function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", a: "+this.a+", hex: "+this.hex+" )"};this.setHex(a)};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={set:function(a,b){this.x=a;this.y=b},copy:function(a){this.x=a.x;this.y=a.y},addSelf:function(a){this.x+=a.x;this.y+=a.y},add:function(b,a){this.x=b.x+a.x;this.y=b.y+a.y},subSelf:function(a){this.x-=a.x;this.y-=a.y},sub:function(b,a){this.x=b.x-a.x;this.y=b.y-a.y},multiplyScalar:function(a){this.x*=a;this.y*=a},unit:function(){this.multiplyScalar(1/this.length())},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,b){this.x=a||0;this.y=c||0;this.z=b||0};THREE.Vector3.prototype={set:function(a,c,b){this.x=a;this.y=c;this.z=b},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z},add:function(b,a){this.x=b.x+a.x;this.y=b.y+a.y;this.z=b.z+a.z},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a},sub:function(b,a){this.x=b.x-a.x;this.y=b.y-a.y;this.z=b.z-a.z},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z},cross:function(b,a){this.x=b.y*a.z-b.z*a.y;this.y=b.z*a.x-b.x*a.z;this.z=b.x*a.y-b.y*a.x},crossSelf:function(c){var b=this.x,a=this.y,d=this.z;this.x=a*c.z-d*c.y;this.y=d*c.x-b*c.z;this.z=b*c.y-a*c.x},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(d){var c=this.x-d.x,b=this.y-d.y,a=this.z-d.z;return c*c+b*b+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z},normalize:function(){if(this.length()>0){this.multiplyScalar(1/this.length())}else{this.multiplyScalar(0)}},isZero:function(){var a=0.0001;return(Math.abs(this.x)=0&&Math.min(g,i.getY2())-Math.max(h,i.getY1())>=0};this.empty=function(){e=true;f=0;h=0;d=0;g=0;b()};this.isEmpty=function(){return e};this.toString=function(){return"THREE.Rectangle (x1: "+f+", y1: "+g+", x2: "+d+", y1: "+h+", width: "+a+", height: "+c+")"}};THREE.Matrix4=function(){this._x=new THREE.Vector3();this._y=new THREE.Vector3();this._z=new THREE.Vector3()};THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n12=0;this.n13=0;this.n14=0;this.n21=0;this.n22=1;this.n23=0;this.n24=0;this.n31=0;this.n32=0;this.n33=1;this.n34=0;this.n41=0;this.n42=0;this.n43=0;this.n44=1},lookAt:function(d,c,b){var a=this._x,f=this._y,e=this._z;e.sub(d,c);e.normalize();a.cross(b,e);a.normalize();f.cross(e,a);f.normalize();this.n11=a.x;this.n12=a.y;this.n13=a.z;this.n14=-a.dot(d);this.n21=f.x;this.n22=f.y;this.n23=f.z;this.n24=-f.dot(d);this.n31=e.x;this.n32=e.y;this.n33=e.z;this.n34=-e.dot(d)},transform:function(a){var d=a.x,c=a.y,b=a.z,e=a.w?a.w:1;a.x=this.n11*d+this.n12*c+this.n13*b+this.n14*e;a.y=this.n21*d+this.n22*c+this.n23*b+this.n24*e;a.z=this.n31*d+this.n32*c+this.n33*b+this.n34*e;e=this.n41*d+this.n42*c+this.n43*b+this.n44*e;if(a.w){a.w=e}else{a.x=a.x/e;a.y=a.y/e;a.z=a.z/e}},crossVector:function(b){var c=new THREE.Vector4();c.x=this.n11*b.x+this.n12*b.y+this.n13*b.z+this.n14*b.w;c.y=this.n21*b.x+this.n22*b.y+this.n23*b.z+this.n24*b.w;c.z=this.n31*b.x+this.n32*b.y+this.n33*b.z+this.n34*b.w;c.w=(b.w)?this.n41*b.x+this.n42*b.y+this.n43*b.z+this.n44*b.w:1;return c},multiply:function(d,c){this.n11=d.n11*c.n11+d.n12*c.n21+d.n13*c.n31+d.n14*c.n41;this.n12=d.n11*c.n12+d.n12*c.n22+d.n13*c.n32+d.n14*c.n42;this.n13=d.n11*c.n13+d.n12*c.n23+d.n13*c.n33+d.n14*c.n43;this.n14=d.n11*c.n14+d.n12*c.n24+d.n13*c.n34+d.n14*c.n44;this.n21=d.n21*c.n11+d.n22*c.n21+d.n23*c.n31+d.n24*c.n41;this.n22=d.n21*c.n12+d.n22*c.n22+d.n23*c.n32+d.n24*c.n42;this.n23=d.n21*c.n13+d.n22*c.n23+d.n23*c.n33+d.n24*c.n43;this.n24=d.n21*c.n14+d.n22*c.n24+d.n23*c.n34+d.n24*c.n44;this.n31=d.n31*c.n11+d.n32*c.n21+d.n33*c.n31+d.n34*c.n41;this.n32=d.n31*c.n12+d.n32*c.n22+d.n33*c.n32+d.n34*c.n42;this.n33=d.n31*c.n13+d.n32*c.n23+d.n33*c.n33+d.n34*c.n43;this.n34=d.n31*c.n14+d.n32*c.n24+d.n33*c.n34+d.n34*c.n44;this.n41=d.n41*c.n11+d.n42*c.n21+d.n43*c.n31+d.n44*c.n41;this.n42=d.n41*c.n12+d.n42*c.n22+d.n43*c.n32+d.n44*c.n42;this.n43=d.n41*c.n13+d.n42*c.n23+d.n43*c.n33+d.n44*c.n43;this.n44=d.n41*c.n14+d.n42*c.n24+d.n43*c.n34+d.n44*c.n44},multiplySelf:function(c){var o=this.n11,n=this.n12,k=this.n13,i=this.n14,f=this.n21,e=this.n22,d=this.n23,b=this.n24,a=this.n31,r=this.n32,q=this.n33,p=this.n34,l=this.n41,j=this.n42,h=this.n43,g=this.n44;this.n11=o*c.n11+n*c.n21+k*c.n31+i*c.n41;this.n12=o*c.n12+n*c.n22+k*c.n32+i*c.n42;this.n13=o*c.n13+n*c.n23+k*c.n33+i*c.n43;this.n14=o*c.n14+n*c.n24+k*c.n34+i*c.n44;this.n21=f*c.n11+e*c.n21+d*c.n31+b*c.n41;this.n22=f*c.n12+e*c.n22+d*c.n32+b*c.n42;this.n23=f*c.n13+e*c.n23+d*c.n33+b*c.n43;this.n24=f*c.n14+e*c.n24+d*c.n34+b*c.n44;this.n31=a*c.n11+r*c.n21+q*c.n31+p*c.n41;this.n32=a*c.n12+r*c.n22+q*c.n32+p*c.n42;this.n33=a*c.n13+r*c.n23+q*c.n33+p*c.n43;this.n34=a*c.n14+r*c.n24+q*c.n34+p*c.n44;this.n41=l*c.n11+j*c.n21+h*c.n31+g*c.n41;this.n42=l*c.n12+j*c.n22+h*c.n32+g*c.n42;this.n43=l*c.n13+j*c.n23+h*c.n33+g*c.n43;this.n44=l*c.n14+j*c.n24+h*c.n34+g*c.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a},determinant:function(){return(this.n14*this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-this.n12*this.n24*this.n31*this.n43-this.n14*this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44)},clone:function(){var a=new THREE.Matrix4();a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(b,d,c){var a=new THREE.Matrix4();a.n14=b;a.n24=d;a.n34=c;return a};THREE.Matrix4.scaleMatrix=function(b,d,c){var a=new THREE.Matrix4();a.n11=b;a.n22=d;a.n33=c;return a};THREE.Matrix4.rotationXMatrix=function(b){var a=new THREE.Matrix4();a.n22=a.n33=Math.cos(b);a.n32=Math.sin(b);a.n23=-a.n32;return a};THREE.Matrix4.rotationYMatrix=function(b){var a=new THREE.Matrix4();a.n11=a.n33=Math.cos(b);a.n13=Math.sin(b);a.n31=-a.n13;return a};THREE.Matrix4.rotationZMatrix=function(b){var a=new THREE.Matrix4();a.n11=a.n22=Math.cos(b);a.n21=Math.sin(b);a.n12=-a.n21;return a};THREE.Matrix4.makeInvert=function(b){var a=new THREE.Matrix4();a.n11=b.n23*b.n34*b.n42-b.n24*b.n33*b.n42+b.n24*b.n32*b.n43-b.n22*b.n34*b.n43-b.n23*b.n32*b.n44+b.n22*b.n33*b.n44;a.n12=b.n14*b.n33*b.n42-b.n13*b.n34*b.n42-b.n14*b.n32*b.n43+b.n12*b.n34*b.n43+b.n13*b.n32*b.n44-b.n12*b.n33*b.n44;a.n13=b.n13*b.n24*b.n42-b.n14*b.n23*b.n42+b.n14*b.n22*b.n43-b.n12*b.n24*b.n43-b.n13*b.n22*b.n44+b.n12*b.n23*b.n44;a.n14=b.n14*b.n23*b.n32-b.n13*b.n24*b.n32-b.n14*b.n22*b.n33+b.n12*b.n24*b.n33+b.n13*b.n22*b.n34-b.n12*b.n23*b.n34;a.n21=b.n24*b.n33*b.n41-b.n23*b.n34*b.n41-b.n24*b.n31*b.n43+b.n21*b.n34*b.n43+b.n23*b.n31*b.n44-b.n21*b.n33*b.n44;a.n22=b.n13*b.n34*b.n41-b.n14*b.n33*b.n41+b.n14*b.n31*b.n43-b.n11*b.n34*b.n43-b.n13*b.n31*b.n44+b.n11*b.n33*b.n44;a.n23=b.n14*b.n23*b.n41-b.n13*b.n24*b.n41-b.n14*b.n21*b.n43+b.n11*b.n24*b.n43+b.n13*b.n21*b.n44-b.n11*b.n23*b.n44;a.n24=b.n13*b.n24*b.n31-b.n14*b.n23*b.n31+b.n14*b.n21*b.n33-b.n11*b.n24*b.n33-b.n13*b.n21*b.n34+b.n11*b.n23*b.n34;a.n31=b.n22*b.n34*b.n41-b.n24*b.n32*b.n41+b.n24*b.n31*b.n42-b.n21*b.n34*b.n42-b.n22*b.n31*b.n44+b.n21*b.n32*b.n44;a.n32=b.n14*b.n32*b.n41-b.n12*b.n34*b.n41-b.n14*b.n31*b.n42+b.n11*b.n34*b.n42+b.n12*b.n31*b.n44-b.n11*b.n32*b.n44;a.n33=b.n13*b.n24*b.n41-b.n14*b.n22*b.n41+b.n14*b.n21*b.n42-b.n11*b.n24*b.n42-b.n12*b.n21*b.n44+b.n11*b.n22*b.n44;a.n34=b.n14*b.n22*b.n31-b.n12*b.n24*b.n31-b.n14*b.n21*b.n32+b.n11*b.n24*b.n32+b.n12*b.n21*b.n34-b.n11*b.n22*b.n34;a.n41=b.n23*b.n32*b.n41-b.n22*b.n33*b.n41-b.n23*b.n31*b.n42+b.n21*b.n33*b.n42+b.n22*b.n31*b.n43-b.n21*b.n32*b.n43;a.n42=b.n12*b.n33*b.n41-b.n13*b.n32*b.n41+b.n13*b.n31*b.n42-b.n11*b.n33*b.n42-b.n12*b.n31*b.n43+b.n11*b.n32*b.n43;a.n43=b.n13*b.n22*b.n41-b.n12*b.n23*b.n41-b.n13*b.n21*b.n42+b.n11*b.n23*b.n42+b.n12*b.n21*b.n43-b.n11*b.n22*b.n43;a.n44=b.n12*b.n23*b.n31-b.n13*b.n22*b.n31+b.n13*b.n21*b.n32-b.n11*b.n23*b.n32-b.n12*b.n21*b.n33+b.n11*b.n22*b.n33;a.scale(1/b.determinant());return a};THREE.Matrix4.makeFrustum=function(f,r,e,o,i,h){var g,q,n,p,l,k,j;g=new THREE.Matrix4();q=2*i/(r-f);n=2*i/(o-e);p=(r+f)/(r-f);l=(o+e)/(o-e);k=-(h+i)/(h-i);j=-2*h*i/(h-i);g.n11=q;g.n12=0;g.n13=p;g.n14=0;g.n21=0;g.n22=n;g.n23=l;g.n24=0;g.n31=0;g.n32=0;g.n33=k;g.n34=j;g.n41=0;g.n42=0;g.n43=-1;g.n44=0;return g};THREE.Matrix4.makePerspective=function(e,c,g,b){var a,f,h,d;a=g*Math.tan(e*Math.PI/360);f=-a;h=f*c;d=a*c;return THREE.Matrix4.makeFrustum(h,d,f,a,g,b)};THREE.Matrix4.makeOrtho=function(c,o,k,a,g,f){var d,l,j,i,n,e,b;d=new THREE.Matrix4();n=o-c;e=a-k;b=f-g;l=(o+c)/n;j=(a+k)/e;i=(f+g)/b;d.n11=2/n;d.n12=0;d.n13=0;d.n14=-l;d.n21=0;d.n22=2/e;d.n23=0;d.n24=-j;d.n31=0;d.n32=0;d.n33=-2/b;d.n34=-i;d.n41=0;d.n42=0;d.n43=0;d.n44=1;return d};THREE.Vertex=function(a,b){this.position=a||new THREE.Vector3();this.normal=b||new THREE.Vector3();this.screen=new THREE.Vector3();this.__visible=true;this.toString=function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};THREE.Face3=function(e,d,h,g,f){this.a=e;this.b=d;this.c=h;this.normal=g||new THREE.Vector3();this.screen=new THREE.Vector3();this.color=f||new THREE.Color(0);this.toString=function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};THREE.Face4=function(f,e,j,i,h,g){this.a=f;this.b=e;this.c=j;this.d=i;this.normal=h||new THREE.Vector3();this.screen=new THREE.Vector3();this.color=g||new THREE.Color(0);this.toString=function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(b,a){this.u=b||0;this.v=a||0};THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[];this.computeNormals=function(){var b,h,e,d,c,a,g,i;for(b=0;b=0?(b*255)<<24:4278190080)|c);this.toString=function(){return"THREE.LineColorMaterial ( color: "+this.color+", lineWidth: "+this.lineWidth+" )"}};THREE.MeshBitmapUVMappingMaterial=function(a){this.bitmap=a;this.toString=function(){return"THREE.MeshBitmapUVMappingMaterial ( bitmap: "+this.bitmap+" )"}};THREE.MeshColorFillMaterial=function(b,a){this.color=new THREE.Color((a>=0?(a*255)<<24:4278190080)|b);this.toString=function(){return"THREE.MeshColorFillMaterial ( color: "+this.color+" )"}};THREE.MeshColorStrokeMaterial=function(c,b,a){this.lineWidth=a||1;this.color=new THREE.Color((b>=0?(b*255)<<24:4278190080)|c);this.toString=function(){return"THREE.MeshColorStrokeMaterial ( lineWidth: "+this.lineWidth+", color: "+this.color+" )"}};THREE.MeshFaceColorFillMaterial=function(){this.toString=function(){return"THREE.MeshFaceColorFillMaterial ( )"}};THREE.MeshFaceColorStrokeMaterial=function(a){this.lineWidth=a||1;this.toString=function(){return"THREE.MeshFaceColorStrokeMaterial ( lineWidth: "+this.lineWidth+" )"}};THREE.ParticleBitmapMaterial=function(a){this.bitmap=a;this.offset=new THREE.Vector2();this.toString=function(){return"THREE.ParticleBitmapMaterial ( bitmap: "+this.bitmap+" )"}};THREE.ParticleCircleMaterial=function(b,a){this.color=new THREE.Color((a>=0?(a*255)<<24:4278190080)|b);this.toString=function(){return"THREE.ParticleCircleMaterial ( color: "+this.color+" )"}};THREE.Scene=function(){this.objects=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(b){for(var c=0,a=this.objects.length;c0&&y.screen.z<1}for(z=0,m=C.geometry.faces.length;z0&&y.screen.z<1;if(p>0){n=C.geometry.vertices[p-1];if(y.__visible&&n.__visible){if(!e[t]){e[t]=new THREE.RenderableLine()}e[t].v1.copy(y.screen);e[t].v2.copy(n.screen);e[t].z=Math.max(y.screen.z,n.screen.z);e[t].material=C.material;this.renderList.push(e[t]);t++}}}}else{if(C instanceof THREE.Particle){b.set(C.position.x,C.position.y,C.position.z,1);x.matrix.transform(b);x.projectionMatrix.transform(b);C.screen.set(b.x/b.w,b.y/b.w,b.z/b.w);if(C.screen.z>0&&C.screen.z<1){if(!a[u]){a[u]=new THREE.RenderableParticle()}a[u].x=C.screen.x;a[u].y=C.screen.y;a[u].z=C.screen.z;a[u].rotation=C.rotation.z;a[u].scale.x=C.scale.x*Math.abs(b.x/b.w-(b.x+x.projectionMatrix.n11)/(b.w+x.projectionMatrix.n14));a[u].scale.y=C.scale.y*Math.abs(b.y/b.w-(b.y+x.projectionMatrix.n22)/(b.w+x.projectionMatrix.n24));a[u].material=C.material;a[u].color=C.color;this.renderList.push(a[u]);u++}}}}}this.renderList.sort(g)}};THREE.CanvasRenderer=function(){THREE.Renderer.call(this);var i=document.createElement("canvas"),j=i.getContext("2d"),f,r,h,c,q=new THREE.Rectangle(),g=new THREE.Rectangle(),l=new THREE.Rectangle(),e=new THREE.Vector2(),d=new THREE.Vector2(),a=new THREE.Vector2(),p=new THREE.UV(),o=new THREE.UV(),n=new THREE.UV(),m=new THREE.UV();this.domElement=i;this.autoClear=true;this.setSize=function(t,s){f=t;r=s;h=f/2;c=r/2;i.width=f;i.height=r;q.set(-h,-c,h,c)};this.clear=function(){if(!g.isEmpty()){g.inflate(1);g.minSelf(q);j.setTransform(1,0,0,1,h,c);j.clearRect(g.getX(),-(g.getHeight()+g.getY()),g.getWidth(),g.getHeight());g.empty()}};this.render=function(S,N){var R,v,H,O,x,D,F=Math.PI*2,z,y,L,J,u,s,B,A,M,K,w,t,G,E,U,T,Q,P,V,C,I;this.project(S,N);if(this.autoClear){this.clear()}j.setTransform(1,0,0,-1,h,c);for(R=0,v=this.renderList.length;R0){g.removeChild(g.childNodes[0])}};this.render=function(G,D){var F,p,A,E,q,w,z=0,r=0,x,u,s,C,B,o,n,v,t,y;if(this.autoClear){this.clear()}this.project(G,D);for(F=0,p=this.renderList.length;F>24&255)/255;this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255};this.updateStyleString=function(){this.__styleString="rgba("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+","+this.a+")"};this.toString=function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", a: "+this.a+", hex: "+this.hex+" )"};this.setHex(a)};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={set:function(a,b){this.x=a;this.y=b},copy:function(a){this.x=a.x;this.y=a.y},addSelf:function(a){this.x+=a.x;this.y+=a.y},add:function(b,a){this.x=b.x+a.x;this.y=b.y+a.y},subSelf:function(a){this.x-=a.x;this.y-=a.y},sub:function(b,a){this.x=b.x-a.x;this.y=b.y-a.y},multiplyScalar:function(a){this.x*=a;this.y*=a},unit:function(){this.multiplyScalar(1/this.length())},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,b){this.x=a||0;this.y=c||0;this.z=b||0};THREE.Vector3.prototype={set:function(a,c,b){this.x=a;this.y=c;this.z=b},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z},add:function(b,a){this.x=b.x+a.x;this.y=b.y+a.y;this.z=b.z+a.z},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a},sub:function(b,a){this.x=b.x-a.x;this.y=b.y-a.y;this.z=b.z-a.z},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z},cross:function(b,a){this.x=b.y*a.z-b.z*a.y;this.y=b.z*a.x-b.x*a.z;this.z=b.x*a.y-b.y*a.x},crossSelf:function(c){var b=this.x,a=this.y,d=this.z;this.x=a*c.z-d*c.y;this.y=d*c.x-b*c.z;this.z=b*c.y-a*c.x},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(d){var c=this.x-d.x,b=this.y-d.y,a=this.z-d.z;return c*c+b*b+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z},normalize:function(){if(this.length()>0){this.multiplyScalar(1/this.length())}else{this.multiplyScalar(0)}},isZero:function(){var a=0.0001;return(Math.abs(this.x)=0&&Math.min(g,i.getY2())-Math.max(h,i.getY1())>=0};this.empty=function(){e=true;f=0;h=0;d=0;g=0;b()};this.isEmpty=function(){return e};this.toString=function(){return"THREE.Rectangle (x1: "+f+", y1: "+g+", x2: "+d+", y1: "+h+", width: "+a+", height: "+c+")"}};THREE.Matrix4=function(){this._x=new THREE.Vector3();this._y=new THREE.Vector3();this._z=new THREE.Vector3()};THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n12=0;this.n13=0;this.n14=0;this.n21=0;this.n22=1;this.n23=0;this.n24=0;this.n31=0;this.n32=0;this.n33=1;this.n34=0;this.n41=0;this.n42=0;this.n43=0;this.n44=1},lookAt:function(d,c,b){var a=this._x,f=this._y,e=this._z;e.sub(d,c);e.normalize();a.cross(b,e);a.normalize();f.cross(e,a);f.normalize();this.n11=a.x;this.n12=a.y;this.n13=a.z;this.n14=-a.dot(d);this.n21=f.x;this.n22=f.y;this.n23=f.z;this.n24=-f.dot(d);this.n31=e.x;this.n32=e.y;this.n33=e.z;this.n34=-e.dot(d)},transform:function(a){var d=a.x,c=a.y,b=a.z,e=a.w?a.w:1;a.x=this.n11*d+this.n12*c+this.n13*b+this.n14*e;a.y=this.n21*d+this.n22*c+this.n23*b+this.n24*e;a.z=this.n31*d+this.n32*c+this.n33*b+this.n34*e;e=this.n41*d+this.n42*c+this.n43*b+this.n44*e;if(a.w){a.w=e}else{a.x=a.x/e;a.y=a.y/e;a.z=a.z/e}},crossVector:function(b){var c=new THREE.Vector4();c.x=this.n11*b.x+this.n12*b.y+this.n13*b.z+this.n14*b.w;c.y=this.n21*b.x+this.n22*b.y+this.n23*b.z+this.n24*b.w;c.z=this.n31*b.x+this.n32*b.y+this.n33*b.z+this.n34*b.w;c.w=(b.w)?this.n41*b.x+this.n42*b.y+this.n43*b.z+this.n44*b.w:1;return c},multiply:function(d,c){this.n11=d.n11*c.n11+d.n12*c.n21+d.n13*c.n31+d.n14*c.n41;this.n12=d.n11*c.n12+d.n12*c.n22+d.n13*c.n32+d.n14*c.n42;this.n13=d.n11*c.n13+d.n12*c.n23+d.n13*c.n33+d.n14*c.n43;this.n14=d.n11*c.n14+d.n12*c.n24+d.n13*c.n34+d.n14*c.n44;this.n21=d.n21*c.n11+d.n22*c.n21+d.n23*c.n31+d.n24*c.n41;this.n22=d.n21*c.n12+d.n22*c.n22+d.n23*c.n32+d.n24*c.n42;this.n23=d.n21*c.n13+d.n22*c.n23+d.n23*c.n33+d.n24*c.n43;this.n24=d.n21*c.n14+d.n22*c.n24+d.n23*c.n34+d.n24*c.n44;this.n31=d.n31*c.n11+d.n32*c.n21+d.n33*c.n31+d.n34*c.n41;this.n32=d.n31*c.n12+d.n32*c.n22+d.n33*c.n32+d.n34*c.n42;this.n33=d.n31*c.n13+d.n32*c.n23+d.n33*c.n33+d.n34*c.n43;this.n34=d.n31*c.n14+d.n32*c.n24+d.n33*c.n34+d.n34*c.n44;this.n41=d.n41*c.n11+d.n42*c.n21+d.n43*c.n31+d.n44*c.n41;this.n42=d.n41*c.n12+d.n42*c.n22+d.n43*c.n32+d.n44*c.n42;this.n43=d.n41*c.n13+d.n42*c.n23+d.n43*c.n33+d.n44*c.n43;this.n44=d.n41*c.n14+d.n42*c.n24+d.n43*c.n34+d.n44*c.n44},multiplySelf:function(c){var o=this.n11,n=this.n12,k=this.n13,i=this.n14,f=this.n21,e=this.n22,d=this.n23,b=this.n24,a=this.n31,r=this.n32,q=this.n33,p=this.n34,l=this.n41,j=this.n42,h=this.n43,g=this.n44;this.n11=o*c.n11+n*c.n21+k*c.n31+i*c.n41;this.n12=o*c.n12+n*c.n22+k*c.n32+i*c.n42;this.n13=o*c.n13+n*c.n23+k*c.n33+i*c.n43;this.n14=o*c.n14+n*c.n24+k*c.n34+i*c.n44;this.n21=f*c.n11+e*c.n21+d*c.n31+b*c.n41;this.n22=f*c.n12+e*c.n22+d*c.n32+b*c.n42;this.n23=f*c.n13+e*c.n23+d*c.n33+b*c.n43;this.n24=f*c.n14+e*c.n24+d*c.n34+b*c.n44;this.n31=a*c.n11+r*c.n21+q*c.n31+p*c.n41;this.n32=a*c.n12+r*c.n22+q*c.n32+p*c.n42;this.n33=a*c.n13+r*c.n23+q*c.n33+p*c.n43;this.n34=a*c.n14+r*c.n24+q*c.n34+p*c.n44;this.n41=l*c.n11+j*c.n21+h*c.n31+g*c.n41;this.n42=l*c.n12+j*c.n22+h*c.n32+g*c.n42;this.n43=l*c.n13+j*c.n23+h*c.n33+g*c.n43;this.n44=l*c.n14+j*c.n24+h*c.n34+g*c.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a},determinant:function(){return(this.n14*this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-this.n12*this.n24*this.n31*this.n43-this.n14*this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44)},transpose:function(){function a(d,e,c){var b=d[e];d[e]=d[c];d[c]=b}a(this,"n21","n12");a(this,"n31","n13");a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4();a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,this.n43,this.n14,this.n24,this.n34,this.n44]},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(b,d,c){var a=new THREE.Matrix4();a.n14=b;a.n24=d;a.n34=c;return a};THREE.Matrix4.scaleMatrix=function(b,d,c){var a=new THREE.Matrix4();a.n11=b;a.n22=d;a.n33=c;return a};THREE.Matrix4.rotationXMatrix=function(b){var a=new THREE.Matrix4();a.n22=a.n33=Math.cos(b);a.n32=Math.sin(b);a.n23=-a.n32;return a};THREE.Matrix4.rotationYMatrix=function(b){var a=new THREE.Matrix4();a.n11=a.n33=Math.cos(b);a.n13=Math.sin(b);a.n31=-a.n13;return a};THREE.Matrix4.rotationZMatrix=function(b){var a=new THREE.Matrix4();a.n11=a.n22=Math.cos(b);a.n21=Math.sin(b);a.n12=-a.n21;return a};THREE.Matrix4.makeInvert=function(b){var a=new THREE.Matrix4();a.n11=b.n23*b.n34*b.n42-b.n24*b.n33*b.n42+b.n24*b.n32*b.n43-b.n22*b.n34*b.n43-b.n23*b.n32*b.n44+b.n22*b.n33*b.n44;a.n12=b.n14*b.n33*b.n42-b.n13*b.n34*b.n42-b.n14*b.n32*b.n43+b.n12*b.n34*b.n43+b.n13*b.n32*b.n44-b.n12*b.n33*b.n44;a.n13=b.n13*b.n24*b.n42-b.n14*b.n23*b.n42+b.n14*b.n22*b.n43-b.n12*b.n24*b.n43-b.n13*b.n22*b.n44+b.n12*b.n23*b.n44;a.n14=b.n14*b.n23*b.n32-b.n13*b.n24*b.n32-b.n14*b.n22*b.n33+b.n12*b.n24*b.n33+b.n13*b.n22*b.n34-b.n12*b.n23*b.n34;a.n21=b.n24*b.n33*b.n41-b.n23*b.n34*b.n41-b.n24*b.n31*b.n43+b.n21*b.n34*b.n43+b.n23*b.n31*b.n44-b.n21*b.n33*b.n44;a.n22=b.n13*b.n34*b.n41-b.n14*b.n33*b.n41+b.n14*b.n31*b.n43-b.n11*b.n34*b.n43-b.n13*b.n31*b.n44+b.n11*b.n33*b.n44;a.n23=b.n14*b.n23*b.n41-b.n13*b.n24*b.n41-b.n14*b.n21*b.n43+b.n11*b.n24*b.n43+b.n13*b.n21*b.n44-b.n11*b.n23*b.n44;a.n24=b.n13*b.n24*b.n31-b.n14*b.n23*b.n31+b.n14*b.n21*b.n33-b.n11*b.n24*b.n33-b.n13*b.n21*b.n34+b.n11*b.n23*b.n34;a.n31=b.n22*b.n34*b.n41-b.n24*b.n32*b.n41+b.n24*b.n31*b.n42-b.n21*b.n34*b.n42-b.n22*b.n31*b.n44+b.n21*b.n32*b.n44;a.n32=b.n14*b.n32*b.n41-b.n12*b.n34*b.n41-b.n14*b.n31*b.n42+b.n11*b.n34*b.n42+b.n12*b.n31*b.n44-b.n11*b.n32*b.n44;a.n33=b.n13*b.n24*b.n41-b.n14*b.n22*b.n41+b.n14*b.n21*b.n42-b.n11*b.n24*b.n42-b.n12*b.n21*b.n44+b.n11*b.n22*b.n44;a.n34=b.n14*b.n22*b.n31-b.n12*b.n24*b.n31-b.n14*b.n21*b.n32+b.n11*b.n24*b.n32+b.n12*b.n21*b.n34-b.n11*b.n22*b.n34;a.n41=b.n23*b.n32*b.n41-b.n22*b.n33*b.n41-b.n23*b.n31*b.n42+b.n21*b.n33*b.n42+b.n22*b.n31*b.n43-b.n21*b.n32*b.n43;a.n42=b.n12*b.n33*b.n41-b.n13*b.n32*b.n41+b.n13*b.n31*b.n42-b.n11*b.n33*b.n42-b.n12*b.n31*b.n43+b.n11*b.n32*b.n43;a.n43=b.n13*b.n22*b.n41-b.n12*b.n23*b.n41-b.n13*b.n21*b.n42+b.n11*b.n23*b.n42+b.n12*b.n21*b.n43-b.n11*b.n22*b.n43;a.n44=b.n12*b.n23*b.n31-b.n13*b.n22*b.n31+b.n13*b.n21*b.n32-b.n11*b.n23*b.n32-b.n12*b.n21*b.n33+b.n11*b.n22*b.n33;a.multiplyScalar(1/b.determinant());return a};THREE.Matrix4.makeFrustum=function(f,r,e,o,i,h){var g,q,n,p,l,k,j;g=new THREE.Matrix4();q=2*i/(r-f);n=2*i/(o-e);p=(r+f)/(r-f);l=(o+e)/(o-e);k=-(h+i)/(h-i);j=-2*h*i/(h-i);g.n11=q;g.n12=0;g.n13=p;g.n14=0;g.n21=0;g.n22=n;g.n23=l;g.n24=0;g.n31=0;g.n32=0;g.n33=k;g.n34=j;g.n41=0;g.n42=0;g.n43=-1;g.n44=0;return g};THREE.Matrix4.makePerspective=function(e,c,g,b){var a,f,h,d;a=g*Math.tan(e*Math.PI/360);f=-a;h=f*c;d=a*c;return THREE.Matrix4.makeFrustum(h,d,f,a,g,b)};THREE.Matrix4.makeOrtho=function(c,o,k,a,g,f){var d,l,j,i,n,e,b;d=new THREE.Matrix4();n=o-c;e=a-k;b=f-g;l=(o+c)/n;j=(a+k)/e;i=(f+g)/b;d.n11=2/n;d.n12=0;d.n13=0;d.n14=-l;d.n21=0;d.n22=2/e;d.n23=0;d.n24=-j;d.n31=0;d.n32=0;d.n33=-2/b;d.n34=-i;d.n41=0;d.n42=0;d.n43=0;d.n44=1;return d};THREE.Vertex=function(a,b){this.position=a||new THREE.Vector3();this.normal=b||new THREE.Vector3();this.screen=new THREE.Vector3();this.__visible=true;this.toString=function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};THREE.Face3=function(e,d,h,g,f){this.a=e;this.b=d;this.c=h;this.normal=g||new THREE.Vector3();this.screen=new THREE.Vector3();this.color=f||new THREE.Color(0);this.toString=function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};THREE.Face4=function(f,e,j,i,h,g){this.a=f;this.b=e;this.c=j;this.d=i;this.normal=h||new THREE.Vector3();this.screen=new THREE.Vector3();this.color=g||new THREE.Color(0);this.toString=function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(b,a){this.u=b||0;this.v=a||0};THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[];this.computeNormals=function(){var b,h,e,d,c,a,g;for(b=0;b=0?(b*255)<<24:4278190080)|c);this.toString=function(){return"THREE.LineColorMaterial ( color: "+this.color+", lineWidth: "+this.lineWidth+" )"}};THREE.MeshBitmapUVMappingMaterial=function(a){this.bitmap=a;this.toString=function(){return"THREE.MeshBitmapUVMappingMaterial ( bitmap: "+this.bitmap+" )"}};THREE.MeshColorFillMaterial=function(b,a){this.color=new THREE.Color((a>=0?(a*255)<<24:4278190080)|b);this.toString=function(){return"THREE.MeshColorFillMaterial ( color: "+this.color+" )"}};THREE.MeshColorStrokeMaterial=function(c,b,a){this.lineWidth=a||1;this.color=new THREE.Color((b>=0?(b*255)<<24:4278190080)|c);this.toString=function(){return"THREE.MeshColorStrokeMaterial ( lineWidth: "+this.lineWidth+", color: "+this.color+" )"}};THREE.MeshFaceColorFillMaterial=function(){this.toString=function(){return"THREE.MeshFaceColorFillMaterial ( )"}};THREE.MeshFaceColorStrokeMaterial=function(a){this.lineWidth=a||1;this.toString=function(){return"THREE.MeshFaceColorStrokeMaterial ( lineWidth: "+this.lineWidth+" )"}};THREE.ParticleBitmapMaterial=function(a){this.bitmap=a;this.offset=new THREE.Vector2();this.toString=function(){return"THREE.ParticleBitmapMaterial ( bitmap: "+this.bitmap+" )"}};THREE.ParticleCircleMaterial=function(b,a){this.color=new THREE.Color((a>=0?(a*255)<<24:4278190080)|b);this.toString=function(){return"THREE.ParticleCircleMaterial ( color: "+this.color+" )"}};THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(b){for(var c=0,a=this.objects.length;c0&&y.screen.z<1}for(z=0,m=C.geometry.faces.length;z0&&y.screen.z<1;if(p>0){n=C.geometry.vertices[p-1];if(y.__visible&&n.__visible){if(!e[t]){e[t]=new THREE.RenderableLine()}e[t].v1.copy(y.screen);e[t].v2.copy(n.screen);e[t].z=Math.max(y.screen.z,n.screen.z);e[t].material=C.material;this.renderList.push(e[t]);t++}}}}else{if(C instanceof THREE.Particle){b.set(C.position.x,C.position.y,C.position.z,1);x.matrix.transform(b);x.projectionMatrix.transform(b);C.screen.set(b.x/b.w,b.y/b.w,b.z/b.w);if(C.screen.z>0&&C.screen.z<1){if(!a[u]){a[u]=new THREE.RenderableParticle()}a[u].x=C.screen.x;a[u].y=C.screen.y;a[u].z=C.screen.z;a[u].rotation=C.rotation.z;a[u].scale.x=C.scale.x*Math.abs(b.x/b.w-(b.x+x.projectionMatrix.n11)/(b.w+x.projectionMatrix.n14));a[u].scale.y=C.scale.y*Math.abs(b.y/b.w-(b.y+x.projectionMatrix.n22)/(b.w+x.projectionMatrix.n24));a[u].material=C.material;a[u].color=C.color;this.renderList.push(a[u]);u++}}}}}this.renderList.sort(g)}};THREE.DOMRenderer=function(){THREE.Renderer.call(this);var b=document.createElement("div"),a,c,e,d;this.domElement=b;this.setSize=function(g,f){a=g;c=f;e=a/2;d=c/2};this.render=function(n,p){var o,f,g,k,l,q,j,i,h;this.project(n,p);for(o=0,f=this.renderList.length;o0){g.removeChild(g.childNodes[0])}};this.render=function(G,D){var F,p,A,E,q,w,z=0,r=0,x,u,s,C,B,o,n,v,t,y;if(this.autoClear){this.clear()}this.project(G,D);for(F=0,p=this.renderList.length;F>24&255)/255;this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255};this.updateStyleString=function(){this.__styleString="rgba("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+","+this.a+")"};this.toString=function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", a: "+this.a+", hex: "+this.hex+" )"};this.setHex(a)};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={set:function(a,b){this.x=a;this.y=b},copy:function(a){this.x=a.x;this.y=a.y},addSelf:function(a){this.x+=a.x;this.y+=a.y},add:function(b,a){this.x=b.x+a.x;this.y=b.y+a.y},subSelf:function(a){this.x-=a.x;this.y-=a.y},sub:function(b,a){this.x=b.x-a.x;this.y=b.y-a.y},multiplyScalar:function(a){this.x*=a;this.y*=a},unit:function(){this.multiplyScalar(1/this.length())},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,b){this.x=a||0;this.y=c||0;this.z=b||0};THREE.Vector3.prototype={set:function(a,c,b){this.x=a;this.y=c;this.z=b},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z},add:function(b,a){this.x=b.x+a.x;this.y=b.y+a.y;this.z=b.z+a.z},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a},sub:function(b,a){this.x=b.x-a.x;this.y=b.y-a.y;this.z=b.z-a.z},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z},cross:function(b,a){this.x=b.y*a.z-b.z*a.y;this.y=b.z*a.x-b.x*a.z;this.z=b.x*a.y-b.y*a.x},crossSelf:function(c){var b=this.x,a=this.y,d=this.z;this.x=a*c.z-d*c.y;this.y=d*c.x-b*c.z;this.z=b*c.y-a*c.x},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(d){var c=this.x-d.x,b=this.y-d.y,a=this.z-d.z;return c*c+b*b+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z},normalize:function(){if(this.length()>0){this.multiplyScalar(1/this.length())}else{this.multiplyScalar(0)}},isZero:function(){var a=0.0001;return(Math.abs(this.x)=0&&Math.min(g,i.getY2())-Math.max(h,i.getY1())>=0};this.empty=function(){e=true;f=0;h=0;d=0;g=0;b()};this.isEmpty=function(){return e};this.toString=function(){return"THREE.Rectangle (x1: "+f+", y1: "+g+", x2: "+d+", y1: "+h+", width: "+a+", height: "+c+")"}};THREE.Matrix4=function(){this._x=new THREE.Vector3();this._y=new THREE.Vector3();this._z=new THREE.Vector3()};THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n12=0;this.n13=0;this.n14=0;this.n21=0;this.n22=1;this.n23=0;this.n24=0;this.n31=0;this.n32=0;this.n33=1;this.n34=0;this.n41=0;this.n42=0;this.n43=0;this.n44=1},lookAt:function(d,c,b){var a=this._x,f=this._y,e=this._z;e.sub(d,c);e.normalize();a.cross(b,e);a.normalize();f.cross(e,a);f.normalize();this.n11=a.x;this.n12=a.y;this.n13=a.z;this.n14=-a.dot(d);this.n21=f.x;this.n22=f.y;this.n23=f.z;this.n24=-f.dot(d);this.n31=e.x;this.n32=e.y;this.n33=e.z;this.n34=-e.dot(d)},transform:function(a){var d=a.x,c=a.y,b=a.z,e=a.w?a.w:1;a.x=this.n11*d+this.n12*c+this.n13*b+this.n14*e;a.y=this.n21*d+this.n22*c+this.n23*b+this.n24*e;a.z=this.n31*d+this.n32*c+this.n33*b+this.n34*e;e=this.n41*d+this.n42*c+this.n43*b+this.n44*e;if(a.w){a.w=e}else{a.x=a.x/e;a.y=a.y/e;a.z=a.z/e}},crossVector:function(b){var c=new THREE.Vector4();c.x=this.n11*b.x+this.n12*b.y+this.n13*b.z+this.n14*b.w;c.y=this.n21*b.x+this.n22*b.y+this.n23*b.z+this.n24*b.w;c.z=this.n31*b.x+this.n32*b.y+this.n33*b.z+this.n34*b.w;c.w=(b.w)?this.n41*b.x+this.n42*b.y+this.n43*b.z+this.n44*b.w:1;return c},multiply:function(d,c){this.n11=d.n11*c.n11+d.n12*c.n21+d.n13*c.n31+d.n14*c.n41;this.n12=d.n11*c.n12+d.n12*c.n22+d.n13*c.n32+d.n14*c.n42;this.n13=d.n11*c.n13+d.n12*c.n23+d.n13*c.n33+d.n14*c.n43;this.n14=d.n11*c.n14+d.n12*c.n24+d.n13*c.n34+d.n14*c.n44;this.n21=d.n21*c.n11+d.n22*c.n21+d.n23*c.n31+d.n24*c.n41;this.n22=d.n21*c.n12+d.n22*c.n22+d.n23*c.n32+d.n24*c.n42;this.n23=d.n21*c.n13+d.n22*c.n23+d.n23*c.n33+d.n24*c.n43;this.n24=d.n21*c.n14+d.n22*c.n24+d.n23*c.n34+d.n24*c.n44;this.n31=d.n31*c.n11+d.n32*c.n21+d.n33*c.n31+d.n34*c.n41;this.n32=d.n31*c.n12+d.n32*c.n22+d.n33*c.n32+d.n34*c.n42;this.n33=d.n31*c.n13+d.n32*c.n23+d.n33*c.n33+d.n34*c.n43;this.n34=d.n31*c.n14+d.n32*c.n24+d.n33*c.n34+d.n34*c.n44;this.n41=d.n41*c.n11+d.n42*c.n21+d.n43*c.n31+d.n44*c.n41;this.n42=d.n41*c.n12+d.n42*c.n22+d.n43*c.n32+d.n44*c.n42;this.n43=d.n41*c.n13+d.n42*c.n23+d.n43*c.n33+d.n44*c.n43;this.n44=d.n41*c.n14+d.n42*c.n24+d.n43*c.n34+d.n44*c.n44},multiplySelf:function(c){var o=this.n11,n=this.n12,k=this.n13,i=this.n14,f=this.n21,e=this.n22,d=this.n23,b=this.n24,a=this.n31,r=this.n32,q=this.n33,p=this.n34,l=this.n41,j=this.n42,h=this.n43,g=this.n44;this.n11=o*c.n11+n*c.n21+k*c.n31+i*c.n41;this.n12=o*c.n12+n*c.n22+k*c.n32+i*c.n42;this.n13=o*c.n13+n*c.n23+k*c.n33+i*c.n43;this.n14=o*c.n14+n*c.n24+k*c.n34+i*c.n44;this.n21=f*c.n11+e*c.n21+d*c.n31+b*c.n41;this.n22=f*c.n12+e*c.n22+d*c.n32+b*c.n42;this.n23=f*c.n13+e*c.n23+d*c.n33+b*c.n43;this.n24=f*c.n14+e*c.n24+d*c.n34+b*c.n44;this.n31=a*c.n11+r*c.n21+q*c.n31+p*c.n41;this.n32=a*c.n12+r*c.n22+q*c.n32+p*c.n42;this.n33=a*c.n13+r*c.n23+q*c.n33+p*c.n43;this.n34=a*c.n14+r*c.n24+q*c.n34+p*c.n44;this.n41=l*c.n11+j*c.n21+h*c.n31+g*c.n41;this.n42=l*c.n12+j*c.n22+h*c.n32+g*c.n42;this.n43=l*c.n13+j*c.n23+h*c.n33+g*c.n43;this.n44=l*c.n14+j*c.n24+h*c.n34+g*c.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a},determinant:function(){return(this.n14*this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-this.n12*this.n24*this.n31*this.n43-this.n14*this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44)},clone:function(){var a=new THREE.Matrix4();a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(b,d,c){var a=new THREE.Matrix4();a.n14=b;a.n24=d;a.n34=c;return a};THREE.Matrix4.scaleMatrix=function(b,d,c){var a=new THREE.Matrix4();a.n11=b;a.n22=d;a.n33=c;return a};THREE.Matrix4.rotationXMatrix=function(b){var a=new THREE.Matrix4();a.n22=a.n33=Math.cos(b);a.n32=Math.sin(b);a.n23=-a.n32;return a};THREE.Matrix4.rotationYMatrix=function(b){var a=new THREE.Matrix4();a.n11=a.n33=Math.cos(b);a.n13=Math.sin(b);a.n31=-a.n13;return a};THREE.Matrix4.rotationZMatrix=function(b){var a=new THREE.Matrix4();a.n11=a.n22=Math.cos(b);a.n21=Math.sin(b);a.n12=-a.n21;return a};THREE.Matrix4.makeInvert=function(b){var a=new THREE.Matrix4();a.n11=b.n23*b.n34*b.n42-b.n24*b.n33*b.n42+b.n24*b.n32*b.n43-b.n22*b.n34*b.n43-b.n23*b.n32*b.n44+b.n22*b.n33*b.n44;a.n12=b.n14*b.n33*b.n42-b.n13*b.n34*b.n42-b.n14*b.n32*b.n43+b.n12*b.n34*b.n43+b.n13*b.n32*b.n44-b.n12*b.n33*b.n44;a.n13=b.n13*b.n24*b.n42-b.n14*b.n23*b.n42+b.n14*b.n22*b.n43-b.n12*b.n24*b.n43-b.n13*b.n22*b.n44+b.n12*b.n23*b.n44;a.n14=b.n14*b.n23*b.n32-b.n13*b.n24*b.n32-b.n14*b.n22*b.n33+b.n12*b.n24*b.n33+b.n13*b.n22*b.n34-b.n12*b.n23*b.n34;a.n21=b.n24*b.n33*b.n41-b.n23*b.n34*b.n41-b.n24*b.n31*b.n43+b.n21*b.n34*b.n43+b.n23*b.n31*b.n44-b.n21*b.n33*b.n44;a.n22=b.n13*b.n34*b.n41-b.n14*b.n33*b.n41+b.n14*b.n31*b.n43-b.n11*b.n34*b.n43-b.n13*b.n31*b.n44+b.n11*b.n33*b.n44;a.n23=b.n14*b.n23*b.n41-b.n13*b.n24*b.n41-b.n14*b.n21*b.n43+b.n11*b.n24*b.n43+b.n13*b.n21*b.n44-b.n11*b.n23*b.n44;a.n24=b.n13*b.n24*b.n31-b.n14*b.n23*b.n31+b.n14*b.n21*b.n33-b.n11*b.n24*b.n33-b.n13*b.n21*b.n34+b.n11*b.n23*b.n34;a.n31=b.n22*b.n34*b.n41-b.n24*b.n32*b.n41+b.n24*b.n31*b.n42-b.n21*b.n34*b.n42-b.n22*b.n31*b.n44+b.n21*b.n32*b.n44;a.n32=b.n14*b.n32*b.n41-b.n12*b.n34*b.n41-b.n14*b.n31*b.n42+b.n11*b.n34*b.n42+b.n12*b.n31*b.n44-b.n11*b.n32*b.n44;a.n33=b.n13*b.n24*b.n41-b.n14*b.n22*b.n41+b.n14*b.n21*b.n42-b.n11*b.n24*b.n42-b.n12*b.n21*b.n44+b.n11*b.n22*b.n44;a.n34=b.n14*b.n22*b.n31-b.n12*b.n24*b.n31-b.n14*b.n21*b.n32+b.n11*b.n24*b.n32+b.n12*b.n21*b.n34-b.n11*b.n22*b.n34;a.n41=b.n23*b.n32*b.n41-b.n22*b.n33*b.n41-b.n23*b.n31*b.n42+b.n21*b.n33*b.n42+b.n22*b.n31*b.n43-b.n21*b.n32*b.n43;a.n42=b.n12*b.n33*b.n41-b.n13*b.n32*b.n41+b.n13*b.n31*b.n42-b.n11*b.n33*b.n42-b.n12*b.n31*b.n43+b.n11*b.n32*b.n43;a.n43=b.n13*b.n22*b.n41-b.n12*b.n23*b.n41-b.n13*b.n21*b.n42+b.n11*b.n23*b.n42+b.n12*b.n21*b.n43-b.n11*b.n22*b.n43;a.n44=b.n12*b.n23*b.n31-b.n13*b.n22*b.n31+b.n13*b.n21*b.n32-b.n11*b.n23*b.n32-b.n12*b.n21*b.n33+b.n11*b.n22*b.n33;a.scale(1/b.determinant());return a};THREE.Matrix4.makeFrustum=function(f,r,e,o,i,h){var g,q,n,p,l,k,j;g=new THREE.Matrix4();q=2*i/(r-f);n=2*i/(o-e);p=(r+f)/(r-f);l=(o+e)/(o-e);k=-(h+i)/(h-i);j=-2*h*i/(h-i);g.n11=q;g.n12=0;g.n13=p;g.n14=0;g.n21=0;g.n22=n;g.n23=l;g.n24=0;g.n31=0;g.n32=0;g.n33=k;g.n34=j;g.n41=0;g.n42=0;g.n43=-1;g.n44=0;return g};THREE.Matrix4.makePerspective=function(e,c,g,b){var a,f,h,d;a=g*Math.tan(e*Math.PI/360);f=-a;h=f*c;d=a*c;return THREE.Matrix4.makeFrustum(h,d,f,a,g,b)};THREE.Matrix4.makeOrtho=function(c,o,k,a,g,f){var d,l,j,i,n,e,b;d=new THREE.Matrix4();n=o-c;e=a-k;b=f-g;l=(o+c)/n;j=(a+k)/e;i=(f+g)/b;d.n11=2/n;d.n12=0;d.n13=0;d.n14=-l;d.n21=0;d.n22=2/e;d.n23=0;d.n24=-j;d.n31=0;d.n32=0;d.n33=-2/b;d.n34=-i;d.n41=0;d.n42=0;d.n43=0;d.n44=1;return d};THREE.Vertex=function(a,b){this.position=a||new THREE.Vector3();this.normal=b||new THREE.Vector3();this.screen=new THREE.Vector3();this.__visible=true;this.toString=function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};THREE.Face3=function(e,d,h,g,f){this.a=e;this.b=d;this.c=h;this.normal=g||new THREE.Vector3();this.screen=new THREE.Vector3();this.color=f||new THREE.Color(0);this.toString=function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};THREE.Face4=function(f,e,j,i,h,g){this.a=f;this.b=e;this.c=j;this.d=i;this.normal=h||new THREE.Vector3();this.screen=new THREE.Vector3();this.color=g||new THREE.Color(0);this.toString=function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(b,a){this.u=b||0;this.v=a||0};THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[];this.computeNormals=function(){var b,h,e,d,c,a,g,i;for(b=0;b=0?(b*255)<<24:4278190080)|c);this.toString=function(){return"THREE.LineColorMaterial ( color: "+this.color+", lineWidth: "+this.lineWidth+" )"}};THREE.MeshBitmapUVMappingMaterial=function(a){this.bitmap=a;this.toString=function(){return"THREE.MeshBitmapUVMappingMaterial ( bitmap: "+this.bitmap+" )"}};THREE.MeshColorFillMaterial=function(b,a){this.color=new THREE.Color((a>=0?(a*255)<<24:4278190080)|b);this.toString=function(){return"THREE.MeshColorFillMaterial ( color: "+this.color+" )"}};THREE.MeshColorStrokeMaterial=function(c,b,a){this.lineWidth=a||1;this.color=new THREE.Color((b>=0?(b*255)<<24:4278190080)|c);this.toString=function(){return"THREE.MeshColorStrokeMaterial ( lineWidth: "+this.lineWidth+", color: "+this.color+" )"}};THREE.MeshFaceColorFillMaterial=function(){this.toString=function(){return"THREE.MeshFaceColorFillMaterial ( )"}};THREE.MeshFaceColorStrokeMaterial=function(a){this.lineWidth=a||1;this.toString=function(){return"THREE.MeshFaceColorStrokeMaterial ( lineWidth: "+this.lineWidth+" )"}};THREE.ParticleBitmapMaterial=function(a){this.bitmap=a;this.offset=new THREE.Vector2();this.toString=function(){return"THREE.ParticleBitmapMaterial ( bitmap: "+this.bitmap+" )"}};THREE.ParticleCircleMaterial=function(b,a){this.color=new THREE.Color((a>=0?(a*255)<<24:4278190080)|b);this.toString=function(){return"THREE.ParticleCircleMaterial ( color: "+this.color+" )"}};THREE.Scene=function(){this.objects=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(b){for(var c=0,a=this.objects.length;c0&&y.screen.z<1}for(z=0,m=C.geometry.faces.length;z0&&y.screen.z<1;if(p>0){n=C.geometry.vertices[p-1];if(y.__visible&&n.__visible){if(!e[t]){e[t]=new THREE.RenderableLine()}e[t].v1.copy(y.screen);e[t].v2.copy(n.screen);e[t].z=Math.max(y.screen.z,n.screen.z);e[t].material=C.material;this.renderList.push(e[t]);t++}}}}else{if(C instanceof THREE.Particle){b.set(C.position.x,C.position.y,C.position.z,1);x.matrix.transform(b);x.projectionMatrix.transform(b);C.screen.set(b.x/b.w,b.y/b.w,b.z/b.w);if(C.screen.z>0&&C.screen.z<1){if(!a[u]){a[u]=new THREE.RenderableParticle()}a[u].x=C.screen.x;a[u].y=C.screen.y;a[u].z=C.screen.z;a[u].rotation=C.rotation.z;a[u].scale.x=C.scale.x*Math.abs(b.x/b.w-(b.x+x.projectionMatrix.n11)/(b.w+x.projectionMatrix.n14));a[u].scale.y=C.scale.y*Math.abs(b.y/b.w-(b.y+x.projectionMatrix.n22)/(b.w+x.projectionMatrix.n24));a[u].material=C.material;a[u].color=C.color;this.renderList.push(a[u]);u++}}}}}this.renderList.sort(g)}};THREE.CanvasRenderer=function(){THREE.Renderer.call(this);var i=document.createElement("canvas"),j=i.getContext("2d"),f,r,h,c,q=new THREE.Rectangle(),g=new THREE.Rectangle(),l=new THREE.Rectangle(),e=new THREE.Vector2(),d=new THREE.Vector2(),a=new THREE.Vector2(),p=new THREE.UV(),o=new THREE.UV(),n=new THREE.UV(),m=new THREE.UV();this.domElement=i;this.autoClear=true;this.setSize=function(t,s){f=t;r=s;h=f/2;c=r/2;i.width=f;i.height=r;q.set(-h,-c,h,c)};this.clear=function(){if(!g.isEmpty()){g.inflate(1);g.minSelf(q);j.setTransform(1,0,0,1,h,c);j.clearRect(g.getX(),-(g.getHeight()+g.getY()),g.getWidth(),g.getHeight());g.empty()}};this.render=function(S,N){var R,v,H,O,x,D,F=Math.PI*2,z,y,L,J,u,s,B,A,M,K,w,t,G,E,U,T,Q,P,V,C,I;this.project(S,N);if(this.autoClear){this.clear()}j.setTransform(1,0,0,-1,h,c);j.fillStyle="rgba(0, 255, 255, 0.5)";j.fillRect(q.getX(),q.getY(),q.getWidth(),q.getHeight());for(R=0,v=this.renderList.length;R0){g.removeChild(g.childNodes[0])}};this.render=function(G,D){var F,p,A,E,q,w,z=0,r=0,x,u,s,C,B,o,n,v,t,y;if(this.autoClear){this.clear()}this.project(G,D);for(F=0,p=this.renderList.length;F>24&255)/255;this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255};this.updateStyleString=function(){this.__styleString="rgba("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+","+this.a+")"};this.toString=function(){return"THREE.Color ( r: "+this.r+", g: "+this.g+", b: "+this.b+", a: "+this.a+", hex: "+this.hex+" )"};this.setHex(a)};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={set:function(a,b){this.x=a;this.y=b},copy:function(a){this.x=a.x;this.y=a.y},addSelf:function(a){this.x+=a.x;this.y+=a.y},add:function(b,a){this.x=b.x+a.x;this.y=b.y+a.y},subSelf:function(a){this.x-=a.x;this.y-=a.y},sub:function(b,a){this.x=b.x-a.x;this.y=b.y-a.y},multiplyScalar:function(a){this.x*=a;this.y*=a},unit:function(){this.multiplyScalar(1/this.length())},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthSq:function(){return this.x*this.x+this.y*this.y},negate:function(){this.x=-this.x;this.y=-this.y},clone:function(){return new THREE.Vector2(this.x,this.y)},toString:function(){return"THREE.Vector2 ("+this.x+", "+this.y+")"}};THREE.Vector3=function(a,c,b){this.x=a||0;this.y=c||0;this.z=b||0};THREE.Vector3.prototype={set:function(a,c,b){this.x=a;this.y=c;this.z=b},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z},add:function(b,a){this.x=b.x+a.x;this.y=b.y+a.y;this.z=b.z+a.z},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a},sub:function(b,a){this.x=b.x-a.x;this.y=b.y-a.y;this.z=b.z-a.z},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z},cross:function(b,a){this.x=b.y*a.z-b.z*a.y;this.y=b.z*a.x-b.x*a.z;this.z=b.x*a.y-b.y*a.x},crossSelf:function(c){var b=this.x,a=this.y,d=this.z;this.x=a*c.z-d*c.y;this.y=d*c.x-b*c.z;this.z=b*c.y-a*c.x},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a},divideScalar:function(a){this.x/=a;this.y/=a;this.z/=a},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(d){var c=this.x-d.x,b=this.y-d.y,a=this.z-d.z;return c*c+b*b+a*a},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z},normalize:function(){if(this.length()>0){this.multiplyScalar(1/this.length())}else{this.multiplyScalar(0)}},isZero:function(){var a=0.0001;return(Math.abs(this.x)=0&&Math.min(g,i.getY2())-Math.max(h,i.getY1())>=0};this.empty=function(){e=true;f=0;h=0;d=0;g=0;b()};this.isEmpty=function(){return e};this.toString=function(){return"THREE.Rectangle (x1: "+f+", y1: "+g+", x2: "+d+", y1: "+h+", width: "+a+", height: "+c+")"}};THREE.Matrix4=function(){this._x=new THREE.Vector3();this._y=new THREE.Vector3();this._z=new THREE.Vector3()};THREE.Matrix4.prototype={n11:1,n12:0,n13:0,n14:0,n21:0,n22:1,n23:0,n24:0,n31:0,n32:0,n33:1,n34:0,n41:0,n42:0,n43:0,n44:1,identity:function(){this.n11=1;this.n12=0;this.n13=0;this.n14=0;this.n21=0;this.n22=1;this.n23=0;this.n24=0;this.n31=0;this.n32=0;this.n33=1;this.n34=0;this.n41=0;this.n42=0;this.n43=0;this.n44=1},lookAt:function(d,c,b){var a=this._x,f=this._y,e=this._z;e.sub(d,c);e.normalize();a.cross(b,e);a.normalize();f.cross(e,a);f.normalize();this.n11=a.x;this.n12=a.y;this.n13=a.z;this.n14=-a.dot(d);this.n21=f.x;this.n22=f.y;this.n23=f.z;this.n24=-f.dot(d);this.n31=e.x;this.n32=e.y;this.n33=e.z;this.n34=-e.dot(d)},transform:function(a){var d=a.x,c=a.y,b=a.z,e=a.w?a.w:1;a.x=this.n11*d+this.n12*c+this.n13*b+this.n14*e;a.y=this.n21*d+this.n22*c+this.n23*b+this.n24*e;a.z=this.n31*d+this.n32*c+this.n33*b+this.n34*e;e=this.n41*d+this.n42*c+this.n43*b+this.n44*e;if(a.w){a.w=e}else{a.x=a.x/e;a.y=a.y/e;a.z=a.z/e}},crossVector:function(b){var c=new THREE.Vector4();c.x=this.n11*b.x+this.n12*b.y+this.n13*b.z+this.n14*b.w;c.y=this.n21*b.x+this.n22*b.y+this.n23*b.z+this.n24*b.w;c.z=this.n31*b.x+this.n32*b.y+this.n33*b.z+this.n34*b.w;c.w=(b.w)?this.n41*b.x+this.n42*b.y+this.n43*b.z+this.n44*b.w:1;return c},multiply:function(d,c){this.n11=d.n11*c.n11+d.n12*c.n21+d.n13*c.n31+d.n14*c.n41;this.n12=d.n11*c.n12+d.n12*c.n22+d.n13*c.n32+d.n14*c.n42;this.n13=d.n11*c.n13+d.n12*c.n23+d.n13*c.n33+d.n14*c.n43;this.n14=d.n11*c.n14+d.n12*c.n24+d.n13*c.n34+d.n14*c.n44;this.n21=d.n21*c.n11+d.n22*c.n21+d.n23*c.n31+d.n24*c.n41;this.n22=d.n21*c.n12+d.n22*c.n22+d.n23*c.n32+d.n24*c.n42;this.n23=d.n21*c.n13+d.n22*c.n23+d.n23*c.n33+d.n24*c.n43;this.n24=d.n21*c.n14+d.n22*c.n24+d.n23*c.n34+d.n24*c.n44;this.n31=d.n31*c.n11+d.n32*c.n21+d.n33*c.n31+d.n34*c.n41;this.n32=d.n31*c.n12+d.n32*c.n22+d.n33*c.n32+d.n34*c.n42;this.n33=d.n31*c.n13+d.n32*c.n23+d.n33*c.n33+d.n34*c.n43;this.n34=d.n31*c.n14+d.n32*c.n24+d.n33*c.n34+d.n34*c.n44;this.n41=d.n41*c.n11+d.n42*c.n21+d.n43*c.n31+d.n44*c.n41;this.n42=d.n41*c.n12+d.n42*c.n22+d.n43*c.n32+d.n44*c.n42;this.n43=d.n41*c.n13+d.n42*c.n23+d.n43*c.n33+d.n44*c.n43;this.n44=d.n41*c.n14+d.n42*c.n24+d.n43*c.n34+d.n44*c.n44},multiplySelf:function(c){var o=this.n11,n=this.n12,k=this.n13,i=this.n14,f=this.n21,e=this.n22,d=this.n23,b=this.n24,a=this.n31,r=this.n32,q=this.n33,p=this.n34,l=this.n41,j=this.n42,h=this.n43,g=this.n44;this.n11=o*c.n11+n*c.n21+k*c.n31+i*c.n41;this.n12=o*c.n12+n*c.n22+k*c.n32+i*c.n42;this.n13=o*c.n13+n*c.n23+k*c.n33+i*c.n43;this.n14=o*c.n14+n*c.n24+k*c.n34+i*c.n44;this.n21=f*c.n11+e*c.n21+d*c.n31+b*c.n41;this.n22=f*c.n12+e*c.n22+d*c.n32+b*c.n42;this.n23=f*c.n13+e*c.n23+d*c.n33+b*c.n43;this.n24=f*c.n14+e*c.n24+d*c.n34+b*c.n44;this.n31=a*c.n11+r*c.n21+q*c.n31+p*c.n41;this.n32=a*c.n12+r*c.n22+q*c.n32+p*c.n42;this.n33=a*c.n13+r*c.n23+q*c.n33+p*c.n43;this.n34=a*c.n14+r*c.n24+q*c.n34+p*c.n44;this.n41=l*c.n11+j*c.n21+h*c.n31+g*c.n41;this.n42=l*c.n12+j*c.n22+h*c.n32+g*c.n42;this.n43=l*c.n13+j*c.n23+h*c.n33+g*c.n43;this.n44=l*c.n14+j*c.n24+h*c.n34+g*c.n44},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a},determinant:function(){return(this.n14*this.n23*this.n32*this.n41-this.n13*this.n24*this.n32*this.n41-this.n14*this.n22*this.n33*this.n41+this.n12*this.n24*this.n33*this.n41+this.n13*this.n22*this.n34*this.n41-this.n12*this.n23*this.n34*this.n41-this.n14*this.n23*this.n31*this.n42+this.n13*this.n24*this.n31*this.n42+this.n14*this.n21*this.n33*this.n42-this.n11*this.n24*this.n33*this.n42-this.n13*this.n21*this.n34*this.n42+this.n11*this.n23*this.n34*this.n42+this.n14*this.n22*this.n31*this.n43-this.n12*this.n24*this.n31*this.n43-this.n14*this.n21*this.n32*this.n43+this.n11*this.n24*this.n32*this.n43+this.n12*this.n21*this.n34*this.n43-this.n11*this.n22*this.n34*this.n43-this.n13*this.n22*this.n31*this.n44+this.n12*this.n23*this.n31*this.n44+this.n13*this.n21*this.n32*this.n44-this.n11*this.n23*this.n32*this.n44-this.n12*this.n21*this.n33*this.n44+this.n11*this.n22*this.n33*this.n44)},transpose:function(){function a(d,e,c){var b=d[e];d[e]=d[c];d[c]=b}a(this,"n21","n12");a(this,"n31","n13");a(this,"n32","n23");a(this,"n41","n14");a(this,"n42","n24");a(this,"n43","n34");return this},clone:function(){var a=new THREE.Matrix4();a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){return[this.n11,this.n21,this.n31,this.n41,this.n12,this.n22,this.n32,this.n42,this.n13,this.n23,this.n33,this.n43,this.n14,this.n24,this.n34,this.n44]},toString:function(){return"| "+this.n11+" "+this.n12+" "+this.n13+" "+this.n14+" |\n| "+this.n21+" "+this.n22+" "+this.n23+" "+this.n24+" |\n| "+this.n31+" "+this.n32+" "+this.n33+" "+this.n34+" |\n| "+this.n41+" "+this.n42+" "+this.n43+" "+this.n44+" |"}};THREE.Matrix4.translationMatrix=function(b,d,c){var a=new THREE.Matrix4();a.n14=b;a.n24=d;a.n34=c;return a};THREE.Matrix4.scaleMatrix=function(b,d,c){var a=new THREE.Matrix4();a.n11=b;a.n22=d;a.n33=c;return a};THREE.Matrix4.rotationXMatrix=function(b){var a=new THREE.Matrix4();a.n22=a.n33=Math.cos(b);a.n32=Math.sin(b);a.n23=-a.n32;return a};THREE.Matrix4.rotationYMatrix=function(b){var a=new THREE.Matrix4();a.n11=a.n33=Math.cos(b);a.n13=Math.sin(b);a.n31=-a.n13;return a};THREE.Matrix4.rotationZMatrix=function(b){var a=new THREE.Matrix4();a.n11=a.n22=Math.cos(b);a.n21=Math.sin(b);a.n12=-a.n21;return a};THREE.Matrix4.makeInvert=function(b){var a=new THREE.Matrix4();a.n11=b.n23*b.n34*b.n42-b.n24*b.n33*b.n42+b.n24*b.n32*b.n43-b.n22*b.n34*b.n43-b.n23*b.n32*b.n44+b.n22*b.n33*b.n44;a.n12=b.n14*b.n33*b.n42-b.n13*b.n34*b.n42-b.n14*b.n32*b.n43+b.n12*b.n34*b.n43+b.n13*b.n32*b.n44-b.n12*b.n33*b.n44;a.n13=b.n13*b.n24*b.n42-b.n14*b.n23*b.n42+b.n14*b.n22*b.n43-b.n12*b.n24*b.n43-b.n13*b.n22*b.n44+b.n12*b.n23*b.n44;a.n14=b.n14*b.n23*b.n32-b.n13*b.n24*b.n32-b.n14*b.n22*b.n33+b.n12*b.n24*b.n33+b.n13*b.n22*b.n34-b.n12*b.n23*b.n34;a.n21=b.n24*b.n33*b.n41-b.n23*b.n34*b.n41-b.n24*b.n31*b.n43+b.n21*b.n34*b.n43+b.n23*b.n31*b.n44-b.n21*b.n33*b.n44;a.n22=b.n13*b.n34*b.n41-b.n14*b.n33*b.n41+b.n14*b.n31*b.n43-b.n11*b.n34*b.n43-b.n13*b.n31*b.n44+b.n11*b.n33*b.n44;a.n23=b.n14*b.n23*b.n41-b.n13*b.n24*b.n41-b.n14*b.n21*b.n43+b.n11*b.n24*b.n43+b.n13*b.n21*b.n44-b.n11*b.n23*b.n44;a.n24=b.n13*b.n24*b.n31-b.n14*b.n23*b.n31+b.n14*b.n21*b.n33-b.n11*b.n24*b.n33-b.n13*b.n21*b.n34+b.n11*b.n23*b.n34;a.n31=b.n22*b.n34*b.n41-b.n24*b.n32*b.n41+b.n24*b.n31*b.n42-b.n21*b.n34*b.n42-b.n22*b.n31*b.n44+b.n21*b.n32*b.n44;a.n32=b.n14*b.n32*b.n41-b.n12*b.n34*b.n41-b.n14*b.n31*b.n42+b.n11*b.n34*b.n42+b.n12*b.n31*b.n44-b.n11*b.n32*b.n44;a.n33=b.n13*b.n24*b.n41-b.n14*b.n22*b.n41+b.n14*b.n21*b.n42-b.n11*b.n24*b.n42-b.n12*b.n21*b.n44+b.n11*b.n22*b.n44;a.n34=b.n14*b.n22*b.n31-b.n12*b.n24*b.n31-b.n14*b.n21*b.n32+b.n11*b.n24*b.n32+b.n12*b.n21*b.n34-b.n11*b.n22*b.n34;a.n41=b.n23*b.n32*b.n41-b.n22*b.n33*b.n41-b.n23*b.n31*b.n42+b.n21*b.n33*b.n42+b.n22*b.n31*b.n43-b.n21*b.n32*b.n43;a.n42=b.n12*b.n33*b.n41-b.n13*b.n32*b.n41+b.n13*b.n31*b.n42-b.n11*b.n33*b.n42-b.n12*b.n31*b.n43+b.n11*b.n32*b.n43;a.n43=b.n13*b.n22*b.n41-b.n12*b.n23*b.n41-b.n13*b.n21*b.n42+b.n11*b.n23*b.n42+b.n12*b.n21*b.n43-b.n11*b.n22*b.n43;a.n44=b.n12*b.n23*b.n31-b.n13*b.n22*b.n31+b.n13*b.n21*b.n32-b.n11*b.n23*b.n32-b.n12*b.n21*b.n33+b.n11*b.n22*b.n33;a.multiplyScalar(1/b.determinant());return a};THREE.Matrix4.makeFrustum=function(f,r,e,o,i,h){var g,q,n,p,l,k,j;g=new THREE.Matrix4();q=2*i/(r-f);n=2*i/(o-e);p=(r+f)/(r-f);l=(o+e)/(o-e);k=-(h+i)/(h-i);j=-2*h*i/(h-i);g.n11=q;g.n12=0;g.n13=p;g.n14=0;g.n21=0;g.n22=n;g.n23=l;g.n24=0;g.n31=0;g.n32=0;g.n33=k;g.n34=j;g.n41=0;g.n42=0;g.n43=-1;g.n44=0;return g};THREE.Matrix4.makePerspective=function(e,c,g,b){var a,f,h,d;a=g*Math.tan(e*Math.PI/360);f=-a;h=f*c;d=a*c;return THREE.Matrix4.makeFrustum(h,d,f,a,g,b)};THREE.Matrix4.makeOrtho=function(c,o,k,a,g,f){var d,l,j,i,n,e,b;d=new THREE.Matrix4();n=o-c;e=a-k;b=f-g;l=(o+c)/n;j=(a+k)/e;i=(f+g)/b;d.n11=2/n;d.n12=0;d.n13=0;d.n14=-l;d.n21=0;d.n22=2/e;d.n23=0;d.n24=-j;d.n31=0;d.n32=0;d.n33=-2/b;d.n34=-i;d.n41=0;d.n42=0;d.n43=0;d.n44=1;return d};THREE.Vertex=function(a,b){this.position=a||new THREE.Vector3();this.normal=b||new THREE.Vector3();this.screen=new THREE.Vector3();this.__visible=true;this.toString=function(){return"THREE.Vertex ( position: "+this.position+", normal: "+this.normal+" )"}};THREE.Face3=function(e,d,h,g,f){this.a=e;this.b=d;this.c=h;this.normal=g||new THREE.Vector3();this.screen=new THREE.Vector3();this.color=f||new THREE.Color(0);this.toString=function(){return"THREE.Face3 ( "+this.a+", "+this.b+", "+this.c+" )"}};THREE.Face4=function(f,e,j,i,h,g){this.a=f;this.b=e;this.c=j;this.d=i;this.normal=h||new THREE.Vector3();this.screen=new THREE.Vector3();this.color=g||new THREE.Color(0);this.toString=function(){return"THREE.Face4 ( "+this.a+", "+this.b+", "+this.c+" "+this.d+" )"}};THREE.UV=function(b,a){this.u=b||0;this.v=a||0};THREE.UV.prototype={copy:function(a){this.u=a.u;this.v=a.v},toString:function(){return"THREE.UV ("+this.u+", "+this.v+")"}};THREE.Geometry=function(){this.vertices=[];this.faces=[];this.uvs=[];this.computeNormals=function(){var b,h,e,d,c,a,g;for(b=0;b=0?(b*255)<<24:4278190080)|c);this.toString=function(){return"THREE.LineColorMaterial ( color: "+this.color+", lineWidth: "+this.lineWidth+" )"}};THREE.MeshBitmapUVMappingMaterial=function(a){this.bitmap=a;this.toString=function(){return"THREE.MeshBitmapUVMappingMaterial ( bitmap: "+this.bitmap+" )"}};THREE.MeshColorFillMaterial=function(b,a){this.color=new THREE.Color((a>=0?(a*255)<<24:4278190080)|b);this.toString=function(){return"THREE.MeshColorFillMaterial ( color: "+this.color+" )"}};THREE.MeshColorStrokeMaterial=function(c,b,a){this.lineWidth=a||1;this.color=new THREE.Color((b>=0?(b*255)<<24:4278190080)|c);this.toString=function(){return"THREE.MeshColorStrokeMaterial ( lineWidth: "+this.lineWidth+", color: "+this.color+" )"}};THREE.MeshFaceColorFillMaterial=function(){this.toString=function(){return"THREE.MeshFaceColorFillMaterial ( )"}};THREE.MeshFaceColorStrokeMaterial=function(a){this.lineWidth=a||1;this.toString=function(){return"THREE.MeshFaceColorStrokeMaterial ( lineWidth: "+this.lineWidth+" )"}};THREE.ParticleBitmapMaterial=function(a){this.bitmap=a;this.offset=new THREE.Vector2();this.toString=function(){return"THREE.ParticleBitmapMaterial ( bitmap: "+this.bitmap+" )"}};THREE.ParticleCircleMaterial=function(b,a){this.color=new THREE.Color((a>=0?(a*255)<<24:4278190080)|b);this.toString=function(){return"THREE.ParticleCircleMaterial ( color: "+this.color+" )"}};THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function(){return"THREE.ParticleDOMMaterial ( domElement: "+this.domElement+" )"}};THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(b){for(var c=0,a=this.objects.length;c0&&y.screen.z<1}for(z=0,m=C.geometry.faces.length;z0&&y.screen.z<1;if(p>0){n=C.geometry.vertices[p-1];if(y.__visible&&n.__visible){if(!e[t]){e[t]=new THREE.RenderableLine()}e[t].v1.copy(y.screen);e[t].v2.copy(n.screen);e[t].z=Math.max(y.screen.z,n.screen.z);e[t].material=C.material;this.renderList.push(e[t]);t++}}}}else{if(C instanceof THREE.Particle){b.set(C.position.x,C.position.y,C.position.z,1);x.matrix.transform(b);x.projectionMatrix.transform(b);C.screen.set(b.x/b.w,b.y/b.w,b.z/b.w);if(C.screen.z>0&&C.screen.z<1){if(!a[u]){a[u]=new THREE.RenderableParticle()}a[u].x=C.screen.x;a[u].y=C.screen.y;a[u].z=C.screen.z;a[u].rotation=C.rotation.z;a[u].scale.x=C.scale.x*Math.abs(b.x/b.w-(b.x+x.projectionMatrix.n11)/(b.w+x.projectionMatrix.n14));a[u].scale.y=C.scale.y*Math.abs(b.y/b.w-(b.y+x.projectionMatrix.n22)/(b.w+x.projectionMatrix.n24));a[u].material=C.material;a[u].color=C.color;this.renderList.push(a[u]);u++}}}}}this.renderList.sort(g)}};THREE.DOMRenderer=function(){THREE.Renderer.call(this);var b=document.createElement("div"),a,c,e,d;this.domElement=b;this.setSize=function(g,f){a=g;c=f;e=a/2;d=c/2};this.render=function(n,p){var o,f,g,k,l,q,j,i,h;this.project(n,p);for(o=0,f=this.renderList.length;o0){g.removeChild(g.childNodes[0])}};this.render=function(G,D){var F,p,A,E,q,w,z=0,r=0,x,u,s,C,B,o,n,v,t,y;if(this.autoClear){this.clear()}this.project(G,D);for(F=0,p=this.renderList.length;F - - + + diff --git a/examples/geometry/Bird.js b/examples/geometry/Bird.js new file mode 100644 index 00000000..120ebd1f --- /dev/null +++ b/examples/geometry/Bird.js @@ -0,0 +1,38 @@ +var Bird = function () { + + var scope = this; + + THREE.Geometry.call(this); + + v( 5, 0, 0 ); + v( - 5, - 2, 1 ); + v( - 5, 0, 0 ); + v( - 5, - 2, - 1 ); + + v( 0, 2, - 6 ); + v( 0, 2, 6 ); + v( 2, 0, 0 ); + v( - 3, 0, 0 ); + + f3( 0, 2, 1 ); + // f3( 0, 3, 2 ); + + f3( 4, 7, 6 ); + f3( 5, 6, 7 ); + + function v( x, y, z ) { + + scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) ); + + } + + function f3( a, b, c ) { + + scope.faces.push( new THREE.Face3( a, b, c ) ); + + } + +} + +Bird.prototype = new THREE.Geometry(); +Bird.prototype.constructor = Bird; diff --git a/examples/objects/Qrcode.js b/examples/geometry/Qrcode.js similarity index 100% rename from examples/objects/Qrcode.js rename to examples/geometry/Qrcode.js diff --git a/examples/primitives/Cube.js b/examples/geometry/primitives/Cube.js similarity index 100% rename from examples/primitives/Cube.js rename to examples/geometry/primitives/Cube.js diff --git a/examples/primitives/Cylinder.js b/examples/geometry/primitives/Cylinder.js similarity index 100% rename from examples/primitives/Cylinder.js rename to examples/geometry/primitives/Cylinder.js diff --git a/examples/primitives/Plane.js b/examples/geometry/primitives/Plane.js similarity index 100% rename from examples/primitives/Plane.js rename to examples/geometry/primitives/Plane.js diff --git a/examples/primitives/Sphere.js b/examples/geometry/primitives/Sphere.js similarity index 100% rename from examples/primitives/Sphere.js rename to examples/geometry/primitives/Sphere.js diff --git a/examples/geometry_birds.html b/examples/geometry_birds.html new file mode 100644 index 00000000..81fe4a41 --- /dev/null +++ b/examples/geometry_birds.html @@ -0,0 +1,431 @@ + + + + three.js - geometry - birds + + + +

+
three.js - birds demo
+ + + + + + + + + + + + diff --git a/examples/geometry_cube.html b/examples/geometry_cube.html index b65153de..9ed0b43e 100644 --- a/examples/geometry_cube.html +++ b/examples/geometry_cube.html @@ -17,8 +17,8 @@ - - + + diff --git a/examples/geometry_cube_webgl.html b/examples/geometry_cube_webgl.html deleted file mode 100644 index 0b7981e7..00000000 --- a/examples/geometry_cube_webgl.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - three.js - geometry - cube - - - - - - - - - - - - - - - - - - - - diff --git a/examples/geometry_earth.html b/examples/geometry_earth.html index bd1ae2b9..8ea91dc0 100644 --- a/examples/geometry_earth.html +++ b/examples/geometry_earth.html @@ -31,14 +31,14 @@
-
three.js - earth demo
+
three.js - earth demo
- - + + - + - + - +