From c5251fac37b64d4cb573ee64cbd2bd57b69b90ac Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Thu, 23 Feb 2012 18:34:44 +0100 Subject: [PATCH] Decided to write the documentation "system" in plain HTML. No markup learning, no compilation process. Just simple HTML. Still, working on it. --- docs/{ => _old}/Makefile | 0 docs/_old/_build/doctrees/api/THREE.doctree | Bin 0 -> 4078 bytes .../doctrees/api/cameras/Camera.doctree | Bin 0 -> 11762 bytes .../api/cameras/OrthographicCamera.doctree | Bin 0 -> 21402 bytes .../api/cameras/PerspectiveCamera.doctree | Bin 0 -> 38030 bytes .../_build/doctrees/api/cameras/index.doctree | Bin 0 -> 2840 bytes .../_build/doctrees/api/core/Clock.doctree | Bin 0 -> 15608 bytes .../_build/doctrees/api/core/Color.doctree | Bin 0 -> 48678 bytes .../_build/doctrees/api/core/Edge.doctree | Bin 0 -> 11513 bytes .../_build/doctrees/api/core/Face3.doctree | Bin 0 -> 25170 bytes .../_build/doctrees/api/core/Face4.doctree | Bin 0 -> 26683 bytes .../_build/doctrees/api/core/Geometry.doctree | Bin 0 -> 47937 bytes .../_build/doctrees/api/core/Math.doctree | Bin 0 -> 27307 bytes .../_build/doctrees/api/core/Matrix3.doctree | Bin 0 -> 11982 bytes .../_build/doctrees/api/core/Matrix4.doctree | Bin 0 -> 210147 bytes .../_build/doctrees/api/core/Object3D.doctree | Bin 0 -> 69476 bytes .../doctrees/api/core/Projector.doctree | Bin 0 -> 4380 bytes .../doctrees/api/core/Quaternion.doctree | Bin 0 -> 62404 bytes .../_old/_build/doctrees/api/core/Ray.doctree | Bin 0 -> 4212 bytes .../doctrees/api/core/Rectangle.doctree | Bin 0 -> 4235 bytes .../_build/doctrees/api/core/Spline.doctree | Bin 0 -> 4169 bytes docs/_old/_build/doctrees/api/core/UV.doctree | Bin 0 -> 13187 bytes .../_build/doctrees/api/core/Vector2.doctree | Bin 0 -> 65204 bytes .../_build/doctrees/api/core/Vector3.doctree | Bin 0 -> 98672 bytes .../_build/doctrees/api/core/Vector4.doctree | Bin 0 -> 67517 bytes .../_build/doctrees/api/core/Vertex.doctree | Bin 0 -> 4218 bytes .../_build/doctrees/api/core/index.doctree | Bin 0 -> 3267 bytes .../doctrees/api/extras/core/Curve.doctree | Bin 0 -> 4192 bytes .../api/extras/core/CurvePath.doctree | Bin 0 -> 4283 bytes .../doctrees/api/extras/core/Path.doctree | Bin 0 -> 4257 bytes .../doctrees/api/extras/core/Shape.doctree | Bin 0 -> 4216 bytes .../doctrees/api/extras/core/TextPath.doctree | Bin 0 -> 4276 bytes .../doctrees/api/extras/core/index.doctree | Bin 0 -> 3074 bytes .../_build/doctrees/api/extras/index.doctree | Bin 0 -> 2968 bytes .../doctrees/api/lights/AmbientLight.doctree | Bin 0 -> 11298 bytes .../api/lights/DirectionalLight.doctree | Bin 0 -> 37705 bytes .../_build/doctrees/api/lights/Light.doctree | Bin 0 -> 8638 bytes .../doctrees/api/lights/PointLight.doctree | Bin 0 -> 16726 bytes .../doctrees/api/lights/SpotLight.doctree | Bin 0 -> 34294 bytes .../_build/doctrees/api/lights/index.doctree | Bin 0 -> 2891 bytes docs/_old/_build/doctrees/changelog.doctree | Bin 0 -> 331389 bytes docs/_old/_build/doctrees/environment.pickle | Bin 0 -> 95242 bytes docs/_old/_build/doctrees/index.doctree | Bin 0 -> 8733 bytes .../doctrees/tutorials/FirstSteps.doctree | Bin 0 -> 11108 bytes .../_build/doctrees/tutorials/index.doctree | Bin 0 -> 2970 bytes docs/_old/_build/html/.buildinfo | 4 + docs/_old/_build/html/_sources/api/THREE.txt | 12 + .../html/_sources/api/cameras/Camera.txt | 39 + .../api/cameras/OrthographicCamera.txt | 69 + .../api/cameras/PerspectiveCamera.txt | 125 + .../html/_sources/api/cameras/index.txt} | 0 .../_build/html/_sources/api/core/Clock.txt | 55 + .../_build/html/_sources/api/core/Color.txt | 144 + .../_build/html/_sources/api/core/Edge.txt | 31 + .../_build/html/_sources/api/core/Face3.txt | 86 + .../_build/html/_sources/api/core/Face4.txt | 90 + .../html/_sources/api/core/Geometry.txt | 198 + .../_build/html/_sources/api/core/Math.txt | 60 + .../_build/html/_sources/api/core/Matrix3.txt | 38 + .../_build/html/_sources/api/core/Matrix4.txt | 476 + .../html/_sources/api/core/Object3D.txt | 239 + .../html/_sources/api/core/Projector.txt | 14 + .../html/_sources/api/core/Quaternion.txt | 169 + .../_build/html/_sources/api/core/Ray.txt | 14 + .../html/_sources/api/core/Rectangle.txt | 14 + .../_build/html/_sources/api/core/Spline.txt | 14 + .../_old/_build/html/_sources/api/core/UV.txt | 37 + .../_build/html/_sources/api/core/Vector2.txt | 184 + .../_build/html/_sources/api/core/Vector3.txt | 261 + .../_build/html/_sources/api/core/Vector4.txt | 179 + .../_build/html/_sources/api/core/Vertex.txt | 14 + .../_build/html/_sources/api/core/index.txt | 25 + .../html/_sources/api/extras/core/Curve.txt | 15 + .../_sources/api/extras/core/CurvePath.txt | 14 + .../html/_sources/api/extras/core/Path.txt | 14 + .../html/_sources/api/extras/core/Shape.txt | 14 + .../_sources/api/extras/core/TextPath.txt | 14 + .../html/_sources/api/extras/core/index.txt | 9 + .../_build/html/_sources/api/extras/index.txt | 5 + .../html/_sources/api/lights/AmbientLight.txt | 37 + .../_sources/api/lights/DirectionalLight.txt | 145 + .../_build/html/_sources/api/lights/Light.txt | 23 + .../html/_sources/api/lights/PointLight.txt | 56 + .../html/_sources/api/lights/SpotLight.txt | 140 + .../_build/html/_sources/api/lights/index.txt | 10 + .../_build/html/_sources/changelog.txt} | 0 .../_build/html/_sources/index.txt} | 0 .../html/_sources/tutorials/FirstSteps.txt} | 0 .../_build/html/_sources/tutorials/index.txt} | 0 docs/_old/_build/html/_static/basic.css | 528 + docs/_old/_build/html/_static/doctools.js | 247 + docs/_old/_build/html/_static/file.png | Bin 0 -> 312 bytes docs/_old/_build/html/_static/jquery.js | 8981 +++++++++++++++++ docs/_old/_build/html/_static/minus.png | Bin 0 -> 118 bytes .../_build/html/_static}/nature.css | 0 docs/_old/_build/html/_static/plus.png | Bin 0 -> 118 bytes docs/_old/_build/html/_static/pygments.css | 62 + docs/_old/_build/html/_static/searchtools.js | 518 + docs/_old/_build/html/_static/underscore.js | 807 ++ docs/_old/_build/html/api/THREE.html | 94 + docs/_old/_build/html/api/cameras/Camera.html | 145 + .../html/api/cameras/OrthographicCamera.html | 185 + .../html/api/cameras/PerspectiveCamera.html | 285 + docs/_old/_build/html/api/cameras/index.html | 115 + docs/_old/_build/html/api/core/Clock.html | 201 + docs/_old/_build/html/api/core/Color.html | 386 + docs/_old/_build/html/api/core/Edge.html | 157 + docs/_old/_build/html/api/core/Face3.html | 207 + docs/_old/_build/html/api/core/Face4.html | 213 + docs/_old/_build/html/api/core/Geometry.html | 323 + docs/_old/_build/html/api/core/Math.html | 250 + docs/_old/_build/html/api/core/Matrix3.html | 159 + docs/_old/_build/html/api/core/Matrix4.html | 1249 +++ docs/_old/_build/html/api/core/Object3D.html | 454 + docs/_old/_build/html/api/core/Projector.html | 121 + .../_old/_build/html/api/core/Quaternion.html | 442 + docs/_old/_build/html/api/core/Ray.html | 121 + docs/_old/_build/html/api/core/Rectangle.html | 121 + docs/_old/_build/html/api/core/Spline.html | 121 + docs/_old/_build/html/api/core/UV.html | 161 + docs/_old/_build/html/api/core/Vector2.html | 509 + docs/_old/_build/html/api/core/Vector3.html | 725 ++ docs/_old/_build/html/api/core/Vector4.html | 490 + docs/_old/_build/html/api/core/Vertex.html | 121 + docs/_old/_build/html/api/core/index.html | 132 + .../_build/html/api/extras/core/Curve.html | 98 + .../html/api/extras/core/CurvePath.html | 98 + .../_build/html/api/extras/core/Path.html | 98 + .../_build/html/api/extras/core/Shape.html | 98 + .../_build/html/api/extras/core/TextPath.html | 98 + .../_build/html/api/extras/core/index.html | 88 + docs/_old/_build/html/api/extras/index.html | 88 + .../_build/html/api/lights/AmbientLight.html | 144 + .../html/api/lights/DirectionalLight.html | 267 + docs/_old/_build/html/api/lights/Light.html | 137 + .../_build/html/api/lights/PointLight.html | 168 + .../_build/html/api/lights/SpotLight.html | 247 + docs/_old/_build/html/api/lights/index.html | 117 + docs/_old/_build/html/changelog.html | 807 ++ docs/_old/_build/html/genindex.html | 585 ++ docs/_old/_build/html/index.html | 180 + docs/_old/_build/html/objects.inv | Bin 0 -> 3093 bytes docs/_old/_build/html/search.html | 95 + docs/_old/_build/html/searchindex.js | 1 + .../_build/html/tutorials/FirstSteps.html | 173 + docs/_old/_build/html/tutorials/index.html | 108 + docs/_old/changelog.rst | 620 ++ docs/{ => _old}/conf.py | 0 docs/_old/index.rst | 35 + docs/{ => _old}/make.bat | 0 docs/_old/static/nature.css | 406 + docs/_old/tutorials/FirstSteps.rst | 103 + docs/_old/tutorials/index.rst | 4 + docs/api/cameras/Camera.html | 11 + docs/index.html | 64 + docs/styles.css | 3 + 156 files changed, 26658 insertions(+) rename docs/{ => _old}/Makefile (100%) create mode 100644 docs/_old/_build/doctrees/api/THREE.doctree create mode 100644 docs/_old/_build/doctrees/api/cameras/Camera.doctree create mode 100644 docs/_old/_build/doctrees/api/cameras/OrthographicCamera.doctree create mode 100644 docs/_old/_build/doctrees/api/cameras/PerspectiveCamera.doctree create mode 100644 docs/_old/_build/doctrees/api/cameras/index.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Clock.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Color.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Edge.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Face3.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Face4.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Geometry.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Math.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Matrix3.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Matrix4.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Object3D.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Projector.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Quaternion.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Ray.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Rectangle.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Spline.doctree create mode 100644 docs/_old/_build/doctrees/api/core/UV.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Vector2.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Vector3.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Vector4.doctree create mode 100644 docs/_old/_build/doctrees/api/core/Vertex.doctree create mode 100644 docs/_old/_build/doctrees/api/core/index.doctree create mode 100644 docs/_old/_build/doctrees/api/extras/core/Curve.doctree create mode 100644 docs/_old/_build/doctrees/api/extras/core/CurvePath.doctree create mode 100644 docs/_old/_build/doctrees/api/extras/core/Path.doctree create mode 100644 docs/_old/_build/doctrees/api/extras/core/Shape.doctree create mode 100644 docs/_old/_build/doctrees/api/extras/core/TextPath.doctree create mode 100644 docs/_old/_build/doctrees/api/extras/core/index.doctree create mode 100644 docs/_old/_build/doctrees/api/extras/index.doctree create mode 100644 docs/_old/_build/doctrees/api/lights/AmbientLight.doctree create mode 100644 docs/_old/_build/doctrees/api/lights/DirectionalLight.doctree create mode 100644 docs/_old/_build/doctrees/api/lights/Light.doctree create mode 100644 docs/_old/_build/doctrees/api/lights/PointLight.doctree create mode 100644 docs/_old/_build/doctrees/api/lights/SpotLight.doctree create mode 100644 docs/_old/_build/doctrees/api/lights/index.doctree create mode 100644 docs/_old/_build/doctrees/changelog.doctree create mode 100644 docs/_old/_build/doctrees/environment.pickle create mode 100644 docs/_old/_build/doctrees/index.doctree create mode 100644 docs/_old/_build/doctrees/tutorials/FirstSteps.doctree create mode 100644 docs/_old/_build/doctrees/tutorials/index.doctree create mode 100644 docs/_old/_build/html/.buildinfo create mode 100644 docs/_old/_build/html/_sources/api/THREE.txt create mode 100644 docs/_old/_build/html/_sources/api/cameras/Camera.txt create mode 100644 docs/_old/_build/html/_sources/api/cameras/OrthographicCamera.txt create mode 100644 docs/_old/_build/html/_sources/api/cameras/PerspectiveCamera.txt rename docs/{api/cameras/index.rst => _old/_build/html/_sources/api/cameras/index.txt} (100%) create mode 100644 docs/_old/_build/html/_sources/api/core/Clock.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Color.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Edge.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Face3.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Face4.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Geometry.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Math.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Matrix3.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Matrix4.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Object3D.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Projector.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Quaternion.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Ray.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Rectangle.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Spline.txt create mode 100644 docs/_old/_build/html/_sources/api/core/UV.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Vector2.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Vector3.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Vector4.txt create mode 100644 docs/_old/_build/html/_sources/api/core/Vertex.txt create mode 100644 docs/_old/_build/html/_sources/api/core/index.txt create mode 100644 docs/_old/_build/html/_sources/api/extras/core/Curve.txt create mode 100644 docs/_old/_build/html/_sources/api/extras/core/CurvePath.txt create mode 100644 docs/_old/_build/html/_sources/api/extras/core/Path.txt create mode 100644 docs/_old/_build/html/_sources/api/extras/core/Shape.txt create mode 100644 docs/_old/_build/html/_sources/api/extras/core/TextPath.txt create mode 100644 docs/_old/_build/html/_sources/api/extras/core/index.txt create mode 100644 docs/_old/_build/html/_sources/api/extras/index.txt create mode 100644 docs/_old/_build/html/_sources/api/lights/AmbientLight.txt create mode 100644 docs/_old/_build/html/_sources/api/lights/DirectionalLight.txt create mode 100644 docs/_old/_build/html/_sources/api/lights/Light.txt create mode 100644 docs/_old/_build/html/_sources/api/lights/PointLight.txt create mode 100644 docs/_old/_build/html/_sources/api/lights/SpotLight.txt create mode 100644 docs/_old/_build/html/_sources/api/lights/index.txt rename docs/{changelog.rst => _old/_build/html/_sources/changelog.txt} (100%) rename docs/{index.rst => _old/_build/html/_sources/index.txt} (100%) rename docs/{tutorials/FirstSteps.rst => _old/_build/html/_sources/tutorials/FirstSteps.txt} (100%) rename docs/{tutorials/index.rst => _old/_build/html/_sources/tutorials/index.txt} (100%) create mode 100644 docs/_old/_build/html/_static/basic.css create mode 100644 docs/_old/_build/html/_static/doctools.js create mode 100644 docs/_old/_build/html/_static/file.png create mode 100644 docs/_old/_build/html/_static/jquery.js create mode 100644 docs/_old/_build/html/_static/minus.png rename docs/{static => _old/_build/html/_static}/nature.css (100%) create mode 100644 docs/_old/_build/html/_static/plus.png create mode 100644 docs/_old/_build/html/_static/pygments.css create mode 100644 docs/_old/_build/html/_static/searchtools.js create mode 100644 docs/_old/_build/html/_static/underscore.js create mode 100644 docs/_old/_build/html/api/THREE.html create mode 100644 docs/_old/_build/html/api/cameras/Camera.html create mode 100644 docs/_old/_build/html/api/cameras/OrthographicCamera.html create mode 100644 docs/_old/_build/html/api/cameras/PerspectiveCamera.html create mode 100644 docs/_old/_build/html/api/cameras/index.html create mode 100644 docs/_old/_build/html/api/core/Clock.html create mode 100644 docs/_old/_build/html/api/core/Color.html create mode 100644 docs/_old/_build/html/api/core/Edge.html create mode 100644 docs/_old/_build/html/api/core/Face3.html create mode 100644 docs/_old/_build/html/api/core/Face4.html create mode 100644 docs/_old/_build/html/api/core/Geometry.html create mode 100644 docs/_old/_build/html/api/core/Math.html create mode 100644 docs/_old/_build/html/api/core/Matrix3.html create mode 100644 docs/_old/_build/html/api/core/Matrix4.html create mode 100644 docs/_old/_build/html/api/core/Object3D.html create mode 100644 docs/_old/_build/html/api/core/Projector.html create mode 100644 docs/_old/_build/html/api/core/Quaternion.html create mode 100644 docs/_old/_build/html/api/core/Ray.html create mode 100644 docs/_old/_build/html/api/core/Rectangle.html create mode 100644 docs/_old/_build/html/api/core/Spline.html create mode 100644 docs/_old/_build/html/api/core/UV.html create mode 100644 docs/_old/_build/html/api/core/Vector2.html create mode 100644 docs/_old/_build/html/api/core/Vector3.html create mode 100644 docs/_old/_build/html/api/core/Vector4.html create mode 100644 docs/_old/_build/html/api/core/Vertex.html create mode 100644 docs/_old/_build/html/api/core/index.html create mode 100644 docs/_old/_build/html/api/extras/core/Curve.html create mode 100644 docs/_old/_build/html/api/extras/core/CurvePath.html create mode 100644 docs/_old/_build/html/api/extras/core/Path.html create mode 100644 docs/_old/_build/html/api/extras/core/Shape.html create mode 100644 docs/_old/_build/html/api/extras/core/TextPath.html create mode 100644 docs/_old/_build/html/api/extras/core/index.html create mode 100644 docs/_old/_build/html/api/extras/index.html create mode 100644 docs/_old/_build/html/api/lights/AmbientLight.html create mode 100644 docs/_old/_build/html/api/lights/DirectionalLight.html create mode 100644 docs/_old/_build/html/api/lights/Light.html create mode 100644 docs/_old/_build/html/api/lights/PointLight.html create mode 100644 docs/_old/_build/html/api/lights/SpotLight.html create mode 100644 docs/_old/_build/html/api/lights/index.html create mode 100644 docs/_old/_build/html/changelog.html create mode 100644 docs/_old/_build/html/genindex.html create mode 100644 docs/_old/_build/html/index.html create mode 100644 docs/_old/_build/html/objects.inv create mode 100644 docs/_old/_build/html/search.html create mode 100644 docs/_old/_build/html/searchindex.js create mode 100644 docs/_old/_build/html/tutorials/FirstSteps.html create mode 100644 docs/_old/_build/html/tutorials/index.html create mode 100644 docs/_old/changelog.rst rename docs/{ => _old}/conf.py (100%) create mode 100644 docs/_old/index.rst rename docs/{ => _old}/make.bat (100%) create mode 100644 docs/_old/static/nature.css create mode 100644 docs/_old/tutorials/FirstSteps.rst create mode 100644 docs/_old/tutorials/index.rst create mode 100644 docs/api/cameras/Camera.html create mode 100644 docs/index.html create mode 100644 docs/styles.css diff --git a/docs/Makefile b/docs/_old/Makefile similarity index 100% rename from docs/Makefile rename to docs/_old/Makefile diff --git a/docs/_old/_build/doctrees/api/THREE.doctree b/docs/_old/_build/doctrees/api/THREE.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a035448fe144a7dd33379449181eab76ed2912de GIT binary patch literal 4078 zcmcgv_kSEm6}M%bPIs1MS+Nt0?f9@sI0tlRLx7+VY8(tA7jQg@fGnH2-MO2!_ICH} z%&GtjF%XF8z4zXG3BC8;d++Uk;5&1-vUGL={DMFJLAU#6-uHdq_m#bA#Pee>(?O^j zQS1vUszcj{ zVX0N6MX#`_(geUw<}?LxDPLA`mcr!@wuO!1GQg+lvu+Tc@mr;xI69Nld36bUIW0%n z*x>xG;WMd7(ku!*FjJ-73r7)8Q^q~f?4^Djx0~0;>0+}R=w=ar6ZEMjPlBe6yOAnQ z=ihvqF39N)ZC2L2YY3t}tgQNQ=#H$)wN8U}rV;wyoc7h(xSu7KNZRkPvKMlt@a{r~ zjkmeCm>S{^IBZ+sE2=qkC$`_ZpEa47?f-d7&7R4`LC#A3>kc_|XF0|*HW~(zpo`{5 z;A@a@x)@B1dol=p5J-1%s9qoD1IY`)#9=UaNlteKgH{SQR!HIM+mOQD!19dTB`=VB zSjpZ&vl5{;>T>-yHUSQmjChNB%39M?w1CbGip0O5^^L ztj)8wrxF=ND-G`ZeYFRXFIK8_DFV7@PWLJ#u@2V0r+XW)m(>kMAnijwgv>x^X&{tC z_o+ieLDUTe%`F@%R9~xi!??}E+7eF#-VQ}APHSEqDa|8&Se9j3)8!m7w+11f10YJ$ ztI~ae?~0u6H;ix8yr%mbcn_$vauoORK5&hV`LU4$J!oMBa89YSu*dCFrlRS=3!^ab zx#n~w#DM$k<74v54Z!HC`dQQ&Q&$BLw9Zn9;vv9zJg0{m#>-&*ib2AsHXG8z4BB}R z1_Y=9dN_&@D!y8l`9^lBg$HcBlZBxznQLU3l{$ebs7I_BolF!udE~jFnNw9d0aVxK zbh1Eoe1NKAQQ4cB0d(EDq`2tLwRJ9eStrQ2whi?$z;Z)Q zPI0baXkw!oJ=VZ+Zx_yu!}ot+kq^UyeFrBE!1aDH1~ zyG55q7eU8B`Pm*eKgvdpU|H$di4)hHpq`ONrI1Ecmxhlxr=(9h?xwQ?o0gNN;iL%4 z1!c$56f9w?9n`U>G35@{{2(>`dP&SxqqxS?uAPypmWZ?$Xf6E9YweIni#5|%YpI|N z2mD%FfNx=H-Y5VjvA5VD1!8ngS)qd%#K=7ooDAnR475mj=-Pu-T0$(#Ijxx7-Uy(L zMs0v_ZmwFxKM$HuxoX-rV1`fsDKHE@3WKiH!**z|n-7~*tYX5h^uoFRP=6d7Pg0>o zx+LiFLp>!!jxCQ*0FVCLv+H1$5TUaW3mP5~GJ2#=Qr=R1{ zbJ?yTbJxClo3Pmq)=!Hi9Y@!I)j`|lNx^;xb8l~vP4!y*{O5zksqnEbW zc;F8re;Fd5+=xZd%N=?Jn=G950lYG&SFvd*&X$M^(z-$`dbLBZVdF|@jk&1kwHtPc zPHOAHuU^N)3@azSE~eM#^oBZ{DX4JGq66TIirxqq=b`%I)W^=42u$qA!_=iWwb(@3 z@nDMOF-t>wGutb*PUf0T9miN`1ED*OIPEs2?uAWy3#)(uPnfIet+;h65s8UGKouS? zd|Qi6DNOXl_2Qn{ffc# zy@cLlAX;)=+so*^*tjMT2G(HAO(VPaL4}fsdSLMW`4XEPfEet3A85(h7TYIGS8{%ogYQV1sfRAw*nH{UzGLS6{B$a7}(q4XT8K-*Oa1JHHa%wBJ&YPFQhLS`c{${DhtrZ(};(PzKnV@oZyqjF0_M)zp}=*_uGqW)JtCl zOry~aD*GB-3=vOXXQfPcW-p^}uk`J}a@4SHblUSh?toKV(P$_s^Uk zu}W7&7(XT#KL&EEk28$@1hrrizh16CWd{c3y1cyHNLICsBU`S%SZcyjHR)$;-{$y- zWdCz{E1NPc$~_bFFW5-n(=Xv4!`pnX3{vx}HMX~3SRxd*y1|N;Zt;2bYsh!Nq7|p2 z-#GMJcD@yA5Mk!o&sGr`x_$Z`w7nglo~WMwgWu!9q>XvK>HVRVwb}0Bw%wmAf1Kaa z|APBdPJgarqRe2X9M7PtjUUPVY4Mkw{)z?RVl$8bX4e<{B{IAbWvo*4Pep%s=pSs% P$N+QepE><2Yd8K4bxg$( literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/cameras/Camera.doctree b/docs/_old/_build/doctrees/api/cameras/Camera.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b6f7fd2a4ab63cc3df1942b005b1cd1e3196135a GIT binary patch literal 11762 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 L&x-$5_O|{5?g<`t literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Clock.doctree b/docs/_old/_build/doctrees/api/core/Clock.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8168c794d47dce4846f53eb60833d3f84e77bd5d GIT binary patch literal 15608 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Color.doctree b/docs/_old/_build/doctrees/api/core/Color.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5c3bac0130ba397b4ffdfb8fd42c98413571a1af GIT binary patch literal 48678 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Edge.doctree b/docs/_old/_build/doctrees/api/core/Edge.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b5ed3b9244e8d34ce6ec71d3a553793a344c20c8 GIT binary patch literal 11513 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 R@CpIljDe=@_^jo|{|}q|qmcjr literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Face3.doctree b/docs/_old/_build/doctrees/api/core/Face3.doctree new file mode 100644 index 0000000000000000000000000000000000000000..51e0f368e79fb546809e04befa9e3c637068b00b GIT binary patch literal 25170 zcmcg#2Yeev)=xqb+e+*d2rUF;)9jGgfk5B_0YV@YgK1GP#n`g6_DYc@?^`LcfdN7f zz4zXG@4a`peq7@U*N-b);qJJ`_kVA8q}|opkni{9!})1;=GA%g-kaUo+2Q1IsdOP# zDrRzSYrc@S+!$8}tb8%%jBQ!%j8o2f&562va=UO5w*JJ%mGX3WxL%9`K0 z(xRd@)KQ>;WX^RawvX+c9)c|?J7y-qApPdbxO zp8@lQOb7_pG=PFsDhGhI3BCmIHmbHy+-?Rxw*;BN~4 zrs8j!J*||eP1%`T8VWg^bvd)buHafJ)+**~4o}!ZIdOObC0BW>Hzvj;CZdn%jnib0 zOHB0Iw+yo(YmiF$ObYH5bGGVS03){9g#oK=fYOCRZ`%l5BzIrAh*yR zZ~?8|n5HMCi@LB<<{>}M}p7iv2D!)ga8ryXWUjDga7MOuwYy_8AC zoC9IBgOt<3M&mrOq>y)uR7w?*Cl2;?d7>t84&fdj8a2`rOvesG$HJ@*hf>Rwli;Cb zwg-t)HV@fy6d>TI@`+EIg2V{|`q9SzD+=>O5mImQgiay=;SpqHgU6gMnB`dIbQ^3$TL%Z5fSn#5f@E{Zw-PlxH)Slh%js=KR?G18;-osKnB?Ew z5^t7F(!zmmM>`4vTG6((}jU# zChx5190$o+*U42WTIkL4tn3WPJS93gd88?@l=gz1_o?O#Hb?5#?PicmizPzha-bzC z$7MfiEq6GcoD=Vz6Hm>F>uD30Jpav!2PVvT3;eOq%V!O&M1`|cC03D+s-dLyBiCEPHggd05xy^wH|a&9&f zt`iBi;dqO3ZZ#ZJ%<;AnIo|GZOo8Ja%DK~Uyd}u-F6G?K9NC|AWHH-&Mr3<0*j8|z z`@sEvTAdp}1vPxZ<%6XH8z7-`j zX7bqEo=JlI-hoNpRnB{mW;5^CU=lbsEAhT^zRF5$0@F8Rw#cL`H!jZ!@jfaH#E-M6 z(BgcpqL3|Gd_78w$wrHBK#S2CeiIsfOF7?WjhOlSqEYxBvM*!h(%m|A9FwcQe_Yxuof48u>fK$yjg+9;X=`RLZMylzj_=dY7sOZAVkk1xs!@F(*)E{UriH* zuEt0ASwylKv=C$Y{_Y_>Eyk!8*e$E6PDo>A(%Fh8aV1d$EWY|@=P&Z{+g0^z4 zkxm(1ng;2ybg)BIQ@EQR^`hq;mZnodlU8pMu05t&)T@VJerSRHH^Fj)P1-F(; zl?82%2igWe4hh;;2%G(cEzyKomcg{M1&&al?Qo@Nj?{HP@a+rDm4+(GS(e2NTDjCQ zf%_P0Lsii{A(EKLGGFO!HXIJy0|JsAgk-*tgn5^Gv!2iIDDa)ia45BaD`lV0j^^z< z163m7%X)jcXS;wh>-qIpaII(|i-lh^PqxjjQm?iRYs|LUjmw~4FG3UgygLd-d*Ijj zHA~QDDtmLb%76D1vc*0!Z7RPD?*%9%ED_YbqfmWbyqD+2`)H!2LbR_Y@_Vtt+YcbS zNlfH-o+oe)vC+)olGE4T}gM_fdPk3-NVU}gEfe#Tld+(vRQgoQq zwfFL^G94}rRg$wTiy18AQhP7%nJIy)qUA!Qy_fk$d+!l|fP`lQMMwHbn0Li{j}rLN zWjK^NhAUsrd%J+TcHV1xb}T53_jco2Q4foS_cBkmO;YOBwqcFgHoaU1y*Gs>^f`?} zk%eF5y)5Aiy|+)u`h8^DRDSQZ0fmH&pk|{`ecrpo^WGJjC?`Y%n#k|H1}_f~yjM%D zq+!4J7KF#3=ApgUkxG@FwD%ITWbbu_u;?c&MH6OO1{-*#z}b6O;Y!hv)I*PDG%T%E z;`t>IETvr*@4G{H>g zpip!!evO$}!WTO8c|vx+k4&4&@5~nf3JDhq>P1ng+u(+RUzB(YT=4?MlSIkkc%d)u z-9YFEbeAsH%q|gTmuhC6Ye9b*NZ|Zh%V_7nTzFrhd28ptQYuw;)y{tvvt;MLS_rT4 z6J8rlm}MC}AlC_;o&S1VDY`-G!BqpgQ5vhHXIUOIxrs~P@&Vn923Y(S6pC)euNhMo z67Bl8X_DK8< zuK$44tBu4OvymR;GU)mbp$TSs7=@xo@N3M(628#&9~H94d}P{Ge%F5-P)K+}P@jxK z-O9MWtPw?dz5rZ$O0#-eSUsazb$)5;XF&kB*BVB<{d2j5vZ;3a7nvoy z{YyglvY+skXu>SZ;K6uR;OzFV;Y!i#QjcEHqBjIsrA3zIGP5_ij9A&Cw*Y|k-$tS6 z9sHW{Wuehw@UA9#Pe|VPk+85z7<^UWUn|4me_!Xy=wV2hH)Avv)`aXV*nOMRXhQSYn?1w%wZ7P2l zdYrc@)BFpCqJN7rdZgGA+AdwN%YOv^-wM3!Z#~?L z&jk>C*(LMg_uNr9K6G|6ilMi=$#&{<|=Co^gEixPe*&Tk&69yrjb0fnL| zOn@Z9?~}ACp%5$Uy~WUPPdr+h$^d9MO{l8lrmV+wM$}J1nk%i37C6QRC=|^QdhHmj zhjt9S5~U3VzLAD^!VU0V(65lqFGXo%fsZ186Cgmo&_n8`!gZ$Rid%}NEXxt8oKx}Y zh&B_HSw0lsu<%TIFaQ^LZNu1YrvtFjjL^=0 zDk7+`%d(vliV8ZYvH~AP{t6&?LB&hnIpI2>xk^y6 zoIp_J1*PCa@tInJYEWRK2z7uUK}EvL)x7*cW!7kmjMj<%jag3&s}l~Y;{@?|jaVI2CkSA~pi%-(b#7k1ztIbL5s`&$(M38D z_z{tH5}FmAEX*PzYqbE@BC<{a0V0bFe`K91d^oaB!ol|ScLd&QGhL5%bdM$aW9q|zD0&RP2*9j#9i4q#>S9xRg0Bhg=m?4SQ+>UmZNGsJ?VMfgy#tDaz59f7XSmF z7f~pB3BQ~}c<;Io$s0(lVR{{YS+HO6uz7!V*u~KQR|OpQDbFX+t=9ne6!N(zy^dxm z^act=Zwe3HF%~Kv%j*8%xk&$$r=zz7|LqEX@agCs0gO23yer^T=PYzZKmF=8_39-G ze0@`-_kbQT<-Ct(MPC(OqH|dXS)%xw0M=s4`8o(N<#6Gja=syac*^-Et`vPs>Uz|C z%45`6A^(i?ZNbzt&UY9#EjZ(R;I$3oBO^WIY;O|4cbU}8INw7B>%H6*o^e>E(2Vl~ z!3#UW{Pr^MA2Ll~#`zE}aDpG9Q1oM=*G|Babr$5Mho1=iry5?_1B;$l)X)>oM}jko z4nG3|bSUqmrJth#D*OV4qF)NRR)K|z3T7SRSAz0uABxZJGT;10V53O?tsrn>|5%v) zPBW8LOqn3W9qIRIM(0?df4cdDU{|wmHG}s@CeUl5K5n0&6+QeD3Ppbw9*tQ~1goL# z%u4-5Q2we>I-3wAX0}vkj z8x%^P0R(HXa=tm{pG*)j$7E${$;y0^y&p(2)}nvJ6!I@-D(PZ`DJ08NN7hUg^Eglc zn_C{i4=nZ{6pH?fU!D>~Q>4Vtr7i}bG3#+(Winu4!O37OfWgUtt-(UZ0fM3AFE2%R zOa<$q3F9~(g`x@gHB$jA;m?@7=w3YoOw{BxLSC!MBW3_Lb7cmo6YQ9W&3kKmdd$G1 zqmu*>9%*l^(2L1{d(kFTRF4Mqp#cR}IE7kA8w>LHA(-{23jVYTemUdHn%Hy!jF|P; z7jUXG4)wjn$zKrR>(+>84ScUzqzyn3k@#nz8JjGHT}0yFNC0b*_%{Xt53_Ccz6k!u<9!?=6`oko&hn3tVAq6pFSHdhH4S;HlI%%{od zd_@zT{#yiX6g6f80c!9anPEfQp$&@6L4jSI!a*y-qD2ui1GEZCn-9fjeVGB~32YPv zwig6WwmS&3`I?!0bfI&$=bE%5Am}2?^iKji2|=}l9nB~%U;_QFJIHWn0MO4}P+;j( z*feH6DXfgPIjgo%P{R(UsJRITy?qw*p~F!RCgB76@|c;r*Zo&dr$tfp^9 zSj;3}YDVC!I`U)1Ud;B(&j|}ST`vKRnG^QLwW57k8_Wr!D^lfBsf!V4U%u9J0t*Yy z3HzZXI47`0Sjhfdh93|PKqE%A9fhI;@oQ!UR>PlBqi2PKG1dEeOcTeTSy7kpjF={l6~J0d6Wt)d zG{J>`n&=TeJWV8Vg@sqCH~NlC2y_Ag!;1Omij+|3xgyQ5iNU$T^4f-RmVurt7MYOk zV^T9$^rNE4=BDsm!K#Jkij3fe9b<$gtn(Jn6?uUd zG+a_@*a8)G^n@`exTEOe0KvgZJ`-k#RU3uvyqvf2qg6X zBotVF6_$-zPa-R+M}<{hEhwjG6uH5#ELa`gB~K7x6;Bo9Y87`gDxM|?dLlR6=yWtf zr87`q->YCWN^Uh6Fa|4ANn~dU>KYG~-?aDih)PJ|b)DBXjKf!S(pqA?=6WVIN$Unw6y3;8;iScyg_71yf*1CN`R!%iH#1Ej zY2AVrxWug}6x}BD+9gj8m{qQrxO!14c(Fnd@t>)aSxRcDoyoIym7 z00}*2@&1hUsL)mm+tUo}V@$AUbl#5x2fcp+g`y{gV`J76$SPJ6)>DG=v_^?eSYZvH z5#(wO_c9tjD+r;4^&A?Z((@=3y&xD>35%7fB&-(&^(7BAn6O@!*02suS?0hA>lH4` z3F}qVAp12G*j$TWbKl4!Mow672>zQD{9wX*O8_G#thWW6lHK_Jgk{cvibz>F7O6<@ zfG#3sy^Cf=?+Me0l=Z#<)*@wn6$D6GT=-Mg*MtwJtgqur(Kn>tIO0iG@L<-=pR~Ry zBsyt*i(&P_r1fpDZ5W3@>7=#4@tp54sYzNNprYuz+!Rh)tXn8)eNXVh9x=bY%=`OH z6G&P=KnvXBhbR<%DD*lBzX)=*j{6xM|0)Qf^D7PZ52eOFVH6G1a#uc6sxoe^T)*^S+fB?CR3xDpa6+WE1>TsnfCUyTqVxSW= z32?YEYv<2jlZ8y@uX=_}3FfZ`uWcBI*XjIquyLL#OltDiR8+7@m7Bu(i}efTujzsp zc8dA!W!~#EO(1`5fEIYh3=~+Y6?&a2SaKzQZ6xrGHN5)76Ih_4j!s{j2<|AlYzhSE zQgwO?%>)1{ZH7Y8EMcQnVkH9EYjZ)_!iVA;2gzP>fsLX?qabkhY7%B!YG$3gB6}U= zot~(_o`^RO;w-D88!r~(3wgiv!k&FCocdR!;a1}lZjb)Tu7$P&A6SJo^ryG2g?+U? z2b$5}Mi6v<8(BVW3pCiM8HJ)2p=p$yI5G{i;VvS*)M7I+Iy_s5xAPH?+%1{|G>?OC z32`nHSC$Y_8^e~Vey7A|XjWS*;ssMH%aN4wrCu-{$hoc!G-fez9m z=?+pCv(tRO){BWOOkNpf-MOqc?TCipS|S^XW$eV|B6;en?guRZ6vMGI3Pro%*W_1L z$Dd#Iq9U)S8b|qxCS53`yJ}L=$wMd)8!wNrpYA4@i#$vYAM?20(=)H9hjs@f!t?eJ zf@;q*2h-4=f)JXt7NZdz+Y5!FC4x~kX|Y0;No#LG-N!@a_r{_YZ*y5HjbRm#|l>%u6$?#Nd}M~kTFF*@9I z=@=lbqcQ3NYnbL(6pFe<89hd939-uvyQsQ*bA{B381(=ThD!>AUd^C0jj+Pk=5j`G zd{I1at%@((@34LLX_bdWc|EZGocInn-mnZYTcmiq8({O|Eq`H*H>C1gYRW$gzGINX|OSkP-TX?+|s9fvwjWUlus>(cQ;dIFQy8$Gm!3T=u` zWXM!Lu#K>{vRm&%bm=4^JDGvCu2n4JfCiUVqv|^^3+KA=S$FB!@?@@rGrH*%zzcLL zeifa@xQXe;p51(~F?zYerPBd{p6f$ifzmjdnh#~N@+q8cN@oDpk(f+JsJX zOtd9t+Qs7F!nU?zp@1{NGgh&$wLtxCc5xurMrSbwK10A}Q#n6*jh4_bXbo~#EgS}o z)9C1IVcvk#w=#p>-Vwhpog=OF#R7{oI-biMC-6(@VLFem>vMSIE#bs$5T-3UpWDV+ zdAfiv>e9H!#94O(gLEP4+yNP+?wqyK%F#t=!#T~9(N&ztjWbPgdNo}vh%q~v!%=C1 zb_t_RNYs1!=|iFEQpU3vb|f~#kQb;MT`9=HU%F~1^J&ZhbQ#bRQ@H~!2ytTdU=G%x z%ei?%+UhO!(-q7qG1VIAwb*5bbCzpcxbeLb?Q0UV3Z>#;sW=k1wXj z^8wfS(m?kR#~odRHjL_&bZKC)yX?X)U5j=^Ble?a@_hvl`8ti&xV1^t*BT8@d92zX3p;y=)E6-Fn`RX}XcC)2yKk4lPG?m0Zt?H!3p3sELDwp!(aV7x-673Wab#Knj?AC9Qyz!W)1A^jovnu> z+U0z0&nkBb&q?~ga-5%+UqN>Zas$VM&ynwu)+wP8qkGYum{2PA&E19WCQ#Xmvs|7w7HLgIu4|ozA$)UJQU|#D|2o4w(i=U-xB(=wU|VkW2PS!~{z77kUR{`KQzrV#FTYbdWtn*+Uy+HMw|is<^N(Rj`LCdw648)u2IxX2%n$X;YH+h?c=^ z%arT$QdCSWXw6e^JX^4<02}Xv&57rFz`tNu131nHoR!b!sbJRtG_njzaHAbT+i=rn zk3?-OYTc|wbaK=##gkF4*rQrq>UG(*K&+^nuz1#)~OR$Ftkz zlBosu7{Kbv1PQ24`E=4A>){)>$F&SD#l{v&U4>%02!rNx9m!O8!Cpq$<70JwaVn%b zdQ*i$ya!fXw%uMXR+lIdfn7%-Um_^Jd}}O{OeOLZXKH(e*4VgsshIE1=Zm>~G1XBh z#;Itp*fKa)#p97q7VMRjy>g>90)JKbtHxgq{v!AriN8^?(PEy-Y@EqroC#Jf{_5~I z8h>N(Hx_^6tZ}7Sb;3$#lTgT>*lw@lcZ)(Q!CFP^RpAv;Wv>RWp!j@8_4?SL*a-9y zy|EjtA+Zro`|5r+lzY+0$BvfSD5~_6F7v3l`h3(cf42K^DE-2nO3&*_$+4_2RM81$gW( zWsjY1HCRz=b!#oFDK=cF>`g7`{Fg>+a=SI9-D+;PrnXz_wU;c2wj6<*`Q^lrAOJ8PnBT|wbQIgrV+_K zuT`77I5r}g?~SK(cD8K@BxeeCZ$Qy}SB7V1J13K)=w#=Sp1@Mt`>ec6HQR0s)vcqD zMh-2O2nmazWkK0R_M>&n9gfB)MY|?N6O*FJNl`s*qQ*1xq^M`Yj5fg~dz^Gu$9hzl z+a>PgJeU+}V@9#(BdU;W7g!_X?%1{$q9In@UCL%9voEqn#)fyNIq&bcn6uz=#>e*W zr$6x==1iGLBep_^4p8=A+3X|4LQ(rbC|Pin94$&#DC~n+%Y(z>vMl#+@a+*Wj>GN{ zxa6VAKFo~l0pTtwg1AQ!`*0|Agt8Zd0xnchrlyQzAIWMQHJ}Hk3 zX^_}97?zYsJUz&@!8)Gj*E7&lK|>$URQ6d$(Nob!gtKB?=8SdA3 zx!&RC4DXw~yzf-@UCg@{ygg}!W!&AbjC&v> zKw{quS@$XXek1G7vaD383;)AYVIrR^BK=3~2jD*sD*GWrZj#z4i3tbIewa0TB&eAy zNj)04H)Kccp?IGau^)q!$CdpA_qqnXuG|+siL~&blcQ?N6!udr@aZst5t9|4fjPXq zo`or%Q}*+aVlm&xVG4u@3x7e`FS76zA-oY&Pdbq*MCHpyw43t1(M2iBH`y;$l(9sE zm%}s|Wi)sN8VtF6CJd;N% zIQE-to3}zVGjp^3cBq7i{SKJFtL*nQb8vY-$fd!0om0^Vf#K8|=*0dZ7=5JdkIRfc z31jpwGy2pSrkT_u-?0+ukV*d<2zbO0HGN0eV z_XxgH1r8Xdj}5rgL4sQ++7MMm z8wrsP66Px%&iI34V?aQ%iI7ZpkudL4SH^MwO$Gj!G8{^6#+9=BX9jZo89x^JLp>DfOUjSYx)$EH1tNy%n0!=dDpFnvJV*NS2_@RQBpj zz>l{PvTa>t+Ei{o-VRVm*j`Xu!cYT#yn`m$QAk=fNzjjX0swxjC06`6<8t1eg~KkI zgLd9sr4q1_cHZ5XC1?FPLKt%s?jBB%18>q0e(sD9Yk$oR=m1q4V|%Syl!UvtpTyFe-d8)@fV$Sm1; z7YX5hZo>V;2{SB%jjI@Loc91!6#Z35wDa=!Ksrzw0>U#aj(Hr!rFLF?A*6#*RrEI@ z($33#!=3jKKtOV+kR0YBVcr$zJzU^Nl;KcnF<1Va^BxJ*C39ZWv!g(1ocCyaR`hok z3+H8?Y@1`G9<&W>%(gj}ORw`DhbHv-cod3Gz|}Y}OZY?QJyFO`a*=6Mxt;f9Kq282 zK|M7LHQ>CbX_C{00VHs@P3mI;l_aamjT`VNNB?tP4v<5WDuuNuj3777*2f7q3FyUn=6kU$186*}H z?#owbk}HMepDq%XQt{=h1b%fH4kx;XD+BxTyf`hy{Wx6<)Fty})5q&TX?*#5d{%S= zi-j*UPxj>-r5>~rYs^;q7nj31+$(g`!(~3Lpk7m}k1oZcU1pcqJ z4EO*0g!lcLxAy-Bq!O^J_WuW&CHwzFLin(o@R4xB49nmFd6ePC{~tp|(c?nmT@<4y zq%ojChD9=;C%JU3j?q(SfYF~uq39W0&9JhNaPNOslRPIR&$~!iNX7eK5crE_INa_f zuKYRge;KGt=KZFNuYl5c|Eu_{=-(_B-p@SQ`~M^LppjT(HqvWcdcFU3G{H=7piuNC zuEtC(;Sat4Eg^f`MW#*V_WpMOg@ktn^}R6E)s6Sd5@?w73!p&nYgQi!s}D7+wm(h% z5eVSy zYZ(p~{EaIEM}k>K`5mZB773=SgRmlGB4IE-D;k0;M*{QYNEj;hps`qEHr6n}ok%e1 z3`Y~pGy;X9Dxuf6ek|b+BcWQzYFuR6RPIQK0162s1$9&yD({XlYxT~$NUbKS6Qa?Y zNOsZq@WucH@77WS-i?OXNY|nyjRm@N%B+a;nkS8uRz}7%LM#{4G8#?R__55-PsV9H z+7vB|D=fY=_6lGL+u6h+&&O#w5f%Q3e0gV?oR$X?jJ*_gSkMY!jd5EMg`$;28SNQt z2^bM}!F~l=S>O{iye)#EoLSyDLle>L>KE@6 zs9t!~XEgr|>!3B_k!lc>)iuh}FpaB6ypw^}5K-YHwUX)8nm}4gBefP-!!(U36g7!5 zdZgGA+Ai3{Kx+$poeI3{Z~W+#CJDg1N2aomfhG$$DGz1zE~zdP@wgN z4>lptG<;IDfz<0=oA~0$7_5wbG-mOh0@_fp=C?v9ZN#u~o(%=GvD3B)UDR6$Rxu;H z36q9D3go>c{Is5?0|y#yibBy}m;gzHpO|V>LLpYxc~+;N4?48883Ul<4513fO<9l4 z8Bu>1(p+f^w7@ZDqQFw4&}+wFJ+xzB8v)G{_*NR;hPeXI(%lMKype#m7We@2X9EH9 zg&tD35w6>6uDGjc$gmud$~hGeM`=4j+1`cX8Ww&oN-Y8#K`KPP@<_f(IDwbRcs;t0! zHC%#%dtFgM2USks1IW(L3BTgDMdcRM_uaq=SJP5>$Ufv!X+UPe@Q5Du5*js>48lpyI+E zREG;64yq&Y39G15cL!Ahtz@dVWgXu+tTh(ggxLa&30C0By#WPzWe;SyBb>xv3G zs7@950P;@*f)iBy(B^dEdWPmILB(=BL3O5}oaI7snOcJCY=I3R^c)~aP@OBh&eOcy zK{d+>s`DAMA;U7=L3M#p1SPCthU`Kn@C23Nco87z=*1`${X_WFXB;uCjz6d_5yVS1 zVlb#K6F|Q~b-94uL6r;%D!g@2q$_|L5>!{BSPDw+5nij%LAACSp?@){396e=QFJpm z`Gbnp@dec_f)^b9GVfcN#uHSxp#`IUI|@a22)zy}mRt#{I|Y81hD%U!uPZ9(pt@V& z1IWJz2u@J(!=!tK>wTK51QpBi1l9e5@_-A)Woikk2L(2O(1(B^LG`fkdPMVb2h~m>m!L1euQ0z?)U?#OyY z_;6&siceUxm3qBAn9^TPoNc8I8P>=hUjGqP9bT_7Y_vDLUU%9S;RPfeUQ^9jy}_g= zyxv4b(OcZ)4=>iq7hZ1*UeFK9yx(COPk6nH7L5OUC=|Uf^g6s)awWVz5cr20?%E{_ zXRPRcqvCrGW$nu8MN!Rjn8>HdA4;l^>y`Iv~e!bWTY~#Z_ zX*2?uu{!Syb5w;!gm+6buOe5Y;@{4f#a>N{XCqVtAO<3WLeWTE5qufxIyyT_>S9x> z<}S{_%=j+uZudgpR}zrlpEMip(#n8C8GhB&aZ8$jCMYry1(r>PUU!IvNry7JA6Q_}|7DqB zRl$!|@V(0ns|ldrd8S^#$+n45L}zOKd@8ushu1`l)ByC5X=ZgaV_{TyiOyvmWUX&a z0W85Zvla+2&2ZtKW*UVLPcu#Uq-bra>(O#4kI`a<+_TI&f~jYjNeqj4XPL=P+akOR zt7n-FP2f*qQZvgmqk=_EZt~AEtdeh*Sy%A*YGwJ_(mFDd0hfMuc)CXnT-W!039{~0(2<9azWG402MYxfyGN9*DA13QNb+e zZ6+u)TqrKP%N(=0zy^@Mg&=S;pDE0?)Xd~@fJ_SFjx-C+=o|}lPcd5wc98x0X7ILV z0{w8o#ceiP(Zg*}DB4zd)Mp$KtcJETE47`VY_Cz;>JcO+(a+*{*}U`1d<$t&W*5Jn zEy5tE=LSa49T>sPE<1|QR!1m5F7pbdodAM0SUK0+vNIEupGsEdmW)g(8JR~i!+<0p z(LZGB*oB!&y69)>$ncbrF;m0_oXmFRmKt1OvE5K$c@$Tk3Pe++!`n)pr=-qKGw|qWTmb%&cE$?5=mOk{Hld;f8qkL%3PmZQ*3rg-+W{Eso!q&f1X<_)0>j37bAQokTZE$x zbnc&S!m`AqCil-nMbUh2^5=fm%9r~W2%g^&rnQuLFJu}|?q7r!xWaxY6zwnc+7(!` z&Pkm6mB0_saETss$^<%J(L|^JzY5v_Y8(gzsKIw)h7BErHYjp13TzM+4q6cwEsB^K z;1EGM)P>@*zRUoJ32Xob4hMpKr$0h?E!Mo2>~5abaL)@z3X`DFP0YX^#Rw+f9*qii zj0#PCTj<^VF#y84tfDL99?K+uD&z8fUjMi2$1&SKpK~|iba*^yOwK(4pB0_R+92nO zu1G~ENnMOUC-Y~Wb6J=-=bnNVZ_Z_lu#i)^^xt@&hDLbD=_nMPfvd^7tcE*dg=gI} zHThXWezqnL$+~RnO4dC`u+Md2`|h{T6Oezzoe@J%&IcSlao=xWfF|_gLKKQF5_;|B zEX>^xIJ@hy-o=9dj|#pw^Ijr=elzc-0#3HAQO>-2>tm}v0w*N>;;5D)T?Vp{^m{p) z6zgGz#PQO><6ZXMMz20>Oj;9j{6jscggRd0|orAAq zSd}*iU+=Un!nrg$2XA3Q^#&$2Irv6Y6#a{v{5hCa^X1^11kdjj(^|^BZ)O@#4!#8~ zaEe<|D7sDPwNtQU@dJx<@a+P>L&N1&V!s6{>gYs#r{E5t%UwW#F8o@uhZo%q093jM zg`#_fjaG@3D7z*&+D#Sr)o0+kFj0yCczx^|R97yQ@6DSltDJ<(Vjzm^cj|!{&l%PDVQRL>J zviP%iyWE-kReVN}gDP%rRD4zt^aN?R(Q{~oO3$NE^nzg2OHMTyFa|4ANnkGu>PrqP zZw2Y>6qS&uUzS$C4w?gJ;a32Mm3VDu?{<0>HOT%q3T%cIQtb{b0=B^XG+sV=Zx~+_ z{MRe^-n8|G0QyZ^Zwfdm`%v`_m-bP)6EB2hEgURWq_;p7lC|DOv!Zu|Wk}X~R{%?p zwcY~(vKANato6R|;jHxmJ}LT8>h=8`B8CxTz1&IbBO%a9>tlx1c$3yAPTL|JqNS78 zY~wYbGO0;gpP{1Yb8hk{E!NDJw7w8Lzc);4Df9l4X*@~mE408RzD9xlwL-65f+bgy z);9wGR>NH{jp#vy0V>+)ob{cc4xq~SK!7Thw^TGM`T^}w=tmTaeiANPAy&bYvVInn zUtB1zQIM4NtH1_O;x|Fy`2Ss)4Z<6`Z0HpbFTt#mkR#)0Fp$t=7VpkjLxeUcY?c|= zp-eYpVBW)kgWeBEftSdIV|~UE$SPJ6R+XSsYn1SW<=3!Akb@d-Z8VGsf-hl>L?cuh zg+fuSU<48tD^p2Wb%HwDLG>oAG1BVSp&`Q@IAM+DvYfESp$6H@pind(S98C}BKl8Q z%L@K-6?|{PT3!JCCae_%oRqH-?u2EI6AVdNI1jH#D}pX0Wvzr}MJo%_kd!q+085av zCV~Jdiwk$kT1EJ9%32kl6h)<8-|wM_@L<-=owQaH5}mZ_8CLC0S`ALyBAouGlhzK# zb5>_kleE@AMbVnv!?$}|H3%J9mXml;h31WK)oLeYA{M=Ql@coNt8f-=p8 z;u;A_TpI{%05vug1WsHV3A2qgv$mB&6IanW2$MDe8hXtNxKr13p$>}M&J6FSOfch* zxc>!Mu)t<0unARo)@K}%tY#&7Z7wKVXq52e<=1hhAP049F*~fL+8#B?Zb6}F2V70^ViEl(uN?)y zwSw7;paC$7x%H!$@`h z+RZpmJCmCHwJ$1)I=IQ7zgRzC{^}Gwzf(+WDf5mqjVFI~p#`3iK%pop^g30rOfQaiWcVIHRywh!*qF>AazTdgnGNoZ?!fg;R`U z7drLJpiM;J1FNux?(|j=_CbAiGNWG<1fAddmro_2!AA2?U@=!{>Ln-kPXleZi%2h{ zvD+OTULeE^UBvx&ixvUR;ow?2+>ePXONXcpV#@@d)$ozWL2HFPxY?iONJ{xr4{mni zT&F-|77-7?XB;YkD*`4XTI0Lvfl?Q<(?R@MFCwxqSxn0mCbQmjFdDpTh-@U5@i#7K z$hWRwKj;uZF&u}YP;?lsCcm;e?)<736M6m4ILhIg^avqctVu;D2cbM{yjabCdZb_; z1aSgJn!#95cIrVjOQIA2);?{STv$z$DvSkykG<-Emo*9X`LXb zCpxJ7JXX}=Z6ha1qhE!F3^QOGpUkCx7h@`fo`R~PQ-w$;0OswsW@T-FU!gip@K4wH z{~xbVogt#aU!j^~%z7q}(5a>IvfEi;4LhBULeV**jJ6Y7Lg#LN+3j3`pQqvCT3auO z_x5E|bUxZ#FLcP8ZWjoie~_lN#7u`SWFox=ZTMV-CMa?-3hdMs2H2^~cnukru65xt zx}Ar9K)Lr0U5-Q(F3euaUa20TyC;Hv0Z#*K|L_Uz!}>e0)& z1$qt;=(!B!_9uBPV!YmJSf?gR+%;{zqi(hF#dt!x#Gebbwpi}^f$ z^&y=qc2CJuPqS6*%{J4EjDeM2Y~Peq@n6ys>iSZB+|?A0_{Z^}^s+Fo!7)MX zZN{@UZH-O9kmsobUCGN?i@IvXb4knu^bXKsW4Hqa5aM?T`m(SFz01wRlc}y!5532n zVq;RhT`6{%h1pcWO5yhReY7u*P0W{yeWhZ5{6Anud|YHYQKS#KQp-PEkSq0eEa14K zkI;ru9i1%o_H~q9xIiDH9npwgp6Oh7-a-CEBiHd>Q$9Bmd{gmW`c!b2YKdA)M-ijoU3C~3)1*03Pe|_;8^hsW<4B7X6JL==^px0Sjw2g zyXU0~Y3#_QucUR^L^dCv+mXU)<=GCr`HDmP@#6~gHGoINCZemo<#bSSqYgRbpZ*J^ z#j&BO+&ub5nCXu96;h=ndfA($Z>4z*PN~epk@@HY%Hiil=sRg2$JWCSZ^$nvI9B;y zc#hORLxBTLb93njL9XL?a5?gi(mL8VV)PT5W5Y|u?#Ua|&-^*!u;M8CMRQ8$+=EQN zGFpw0OvY*I^c&YlcO=t=cozo1G2-t+TZ2r4A2#StFQ7rVFGSj{DaN}x=BJbR-HX9! zX{nCYd7YGoFyipooY_!mD1WYUemI1Nac#r@-S247a3-$7FS20&FOTO4)LU_!Hv3-1 z(pA!mGdBAw$)uVoS9Oxf{Q2{z^erq}`J5z^WNKbBkPFRJ!&no%w(9T(Tm&c?34}UM zxE&SajAY^==_HNf4|VW-_aN7zadB*A9ptHOihsGH03#Ny4%vVV2do1MLdLPaghGKv zqp>}f; z%P`R(`9TpHkIy)L0$2Q8i+(q!DkD#ntMzJUjeb@$0n17ez2$Qx&Zi%zUn{TG@154^ zH|0j__YTJBb%wFBL#PxR=lSUwJt;3IQkTaSXO3>bHz+HJ2Dqiw-z%NpX~8d#;8#ZQ ilNzxaGszTaMWEtN+|6cO=x*-0TeN4!ma+r6+S*F4>Tc<|Bip;S z9x-CX@wqZGWoW%@%Ha5mUSt`zwtgOh@s_s}ocd(&8{XDCTHsEZRfU_i9T7hD!?l>Ss#ILT* zmrjI?y{O&zW}uU;hLjTkoNTl1TMND9d)V33nK$~i#4PlUi;~ppNOl+SbMz$f4~OhwZaHz*B7SssOS>Gok9y@K$Z^2yjH3+Ulq0@+%ye z#7+QCw7Dv6)!ljFX7$XJYQ3jg%h%9F%BAkUTz}Qw#dA}ciIuEWbKL{EYBjq8$h$6c zcgsxdt&70Qx~t{7^yb{%7iZe~a=m5ADz&@E;>^@+y;klomusbRE!SPGWu@lsxp1@0 zXzgLz1NQRVz1y8p_#2JCG58yczc&1h!{2!PO~Bto{7u5&Wc*FR-&Fig3K? z=I+z%E2_C(tyr78FI>e;&z%KVA=%Y_?bDeNnNd&^6ykO`n`cJ(`LmnZNUkFFQoa}d zr_J53>o7D$hXd!*F(7^Aa!<$UWm(y=B46vMIg-nz3)K!dscJ{IlJ9_Sa~;PAo=B=S zcmKf)-2*)Lz@E(LT6Tr1)jcRP+LzQlIMbG`!Bh3X?Nr@EJonJ{%$UAoGk2MLgwvkQj5PR1E_07^w#n8rTNd-BoO|@b&B4s~ zpYAcv<_?rLuf4gtu%;p^Iv+Ya)^iuMJ85>)pcd$+^M>rE$2lF&OlP)pfOAl0BpJEK zJE+D9?apD#oH@&!!a!@ntx%S%f9IHE{5q!!LIsw0e@~E`qR*%5ZGG zCtL4nW{WOuLdRm%?PSkAMeBAlnlt_1{bwm*v|pzCHdVu^Fu*kf#W~dqda!$1W=utL z)ts!#xl2?nP>#`((a)BFelkwyrV!Iz3ay>)xm{30W(0&jIZKhqXXIdH&LUkK>Z!h%?FLrYZ|3maq^`#>1AA%KJM4Ufy93$=rS>M{%8b?#4Z`X&x7-fDhw)D_=T;)2v3*9WoxWy#pYEY-@FaXY(NBd7gW|no=8h z2A-{b2F$JMd#{OFK!eJ?KxMxW+JZa?EAB<;F>tpRJ6mV%e(Syi8JRKt^hvZC_Vdmm1kIKZdl``1+)E+pde6N~)j5h)Pq~*v$n$(5CsD`-g?oic zd1X?c3(LIC>XjG^Hl_j+aS^Ho_j|?8mMO~C5j-scdBT2 zwGyq~lN-XmyL-!}8oExKdpAnF$8+xuN(`)KJWKS^-21ew`&*UeJ`fAPD((u&R-88X z-6-Wfp8Ft5;e*N0arYs#!#%!Hj14)s532z0O%k9jFvCaC4*JkDH1GGJVIK9|#~_8H z<-Er@WEJjl&walNcM2FRDD`G5)p`*l>S_wZCAXeS!3CJ@x+n zoTN-Qssbf7hn78O`RTcy<4-y@2gfEkS>C9T!)iQ{RE_aLH9pXeddzuCVz?hfMW6KC z4{43w8Y{^Dc!CX8P&fG6?ll;+wYeXL0-y5Sk7#lFOp&Yx_i1H@;naAW+Wn}u?8o3r z!Ajj=!#Of*byiC5$Jb}Z7OHc6hxN>241R&khgJ94t_dhIqH%(aH}-w8`w8QXGvh#* zTT?0Kd-JvR;TR<|3fUM>y3b{%#0IL*`(t_GsyVbP=ky~fmweY725=YxZi+c zzUjH&3Ka8#>C-yId(m^ht@YQ)cueD2h;bLV=`xL*H{!A7T~_(taDzm2VuW&cXW{Ts^|Veo3&{w2yOpc6RRAKs{YvST(npR zQ-5-{iVmj!tQmul-;ABM4VvgLLyesG~w*7&s7StcBqgF%UmB7C$34^*v#5g9{3i$cc& z!9i%3HZmG#7yljg3gU9Y7$7Gl*vdunZg3n1;2c)09AvD0M!oqnM@_(RtAv~!R~FcH388F@y4@~ zY(sFRYldx5!9*k`kdr$f=E-WZElA`2Po^Q;lkLdYv}PcW_ClFX!0weqc%P2WI9e4!>#1Z`AC;X+!fq8v{k?Yb*T z(IaIyTzRrP?_>S4ptAWzYG;%^h!;1Qknx^M(9|VmFJ!_b_D14KJ6TY(1uZ=6o-%{* zeGHrqDq4R_81~kEiP=J!nLvOr>gp^`G7H%dCym6D4l*&~r~r|kJDVu`StwQ;u=DOu zSPK~rAcFSZ1Ig?l!>nsOgqr8Sgh=(2*T}&DppmsmyNez|{CEM=gQh%G2|DBa4nsa_ zIR}X+hm%XX;1{Bzu%bhZ0=s*P<=&NTG8cG|{0QL(|3u6^pc*BdGP53ec=R2an_n78{3M_f($j%{h3wgSM0D1Ih}A9lKC4WuioxpIEv7lT zEy?!f>(x1_{$e>>qep7UTL@f`OCHHCXwN`w0TRR>UO7?)HfmBs;z^zSO{=NYL8}E0 zW)-nkH?X1(W(@&DI+(QtS2%HnWg55A z5wztXN!6`ff-6tn$@{olQORt#aw+lRwjDBFuLR9*K$aLFKUB%dKP* zFLg%Hwzm<%v_V*k+>TsS{0=0Z+({JE+#w3eQZez&f+<3|i->poh`L0frJ!;TFntcr zL5|K7%DqaQFjeS$e7*C`V&_>-umyFEPXo$*%96c4G81@dI1}hR=Wx1j1}5X=e#OSj zo;-jHPu{JCJLv-Df-vvlJ=G=;@_Iu-3y93}$wSDAO!O6056b>wO^s5+mXh}(6H0vq zi6`&Fum40|P#IuN&_p=b$H&`8iTRkp>~f*iOf}b+TAi;ssR6v`FIH1Ji;p)`n6OO^ z)Qh!zrI^DA(_b&5^VZpvd2`ly25u*P1?yL4VJ$$pzQPHuYEiE0=)#&n&CBt!DP~fS zQ=Ygk6r6P6;Oe5oH}W`NrgTVDkH_O+KyIYVse&g(n|VAz<>94<`R{ z-W!vDhSwVkT0qp~pG8j8exm3fnn4K>wqkH;7e*W`KT3 z(A0k-sSeQpj4Mz6!u$9DU8S-I=zk?%yn}>{UsHnS0s7yNiPrx+5>Ng?7N+&JaMSua zK>sJ<|1xmC`eoyx=9U;7od26REyVZ_5Fm!GtsxJ29T^Z|1l~K~B?W$iaH54$1of%< zu3>YcY+<2Tdgs7=OTt=|J`xBFHlxUEwBgm&0cpbFuy2>aFyJ@@p#zrB3#*JlBb6!2Z#W~BgLNn|Rk3xXvK1~o*;-4+NQFYdt#8A7s!X=! z^@f5L5FM#ZLr!$0qP14`+iBX_H9C+N!;|UAf*!X=;>iy94eUuJfIWpnbI>7Y#LSfJ zh!i9{A@O8q{DQ=XMU}k^F;YH8v$79dF1rHMr0m@kdpOEIFhSY7E5BhYdk@7{W$%d# zPxjK1p==5TW$(>nl_YuAe6l?vY@${NIaQ^-$216hhsrw(&*~e>$BO!+|OXfU!Uzyz>q=b0D>!g=njKUus}XJ?qI!l zO%4QILfknB*`6FsrU`N95CS$L?i>mN#2roSxN{i!Xxy2DE4?=m7qEF z9E(ht&H^N!97h%=^l0HU1I`T{PxuK2PD>4%5S6ziVe~nXXe}h^1Og<{g@6GYS%^Fc zauO0x7LkJyM2imXQ3KFoqMU4@SlVX*I)$(n0=$g~`nYo{nVn{saby&RgusIbBBtgp zJtXZncS z19506Hm(H*kb1g6#-{r(K7bd4oCZ z$It@sq1a{{SV=Z<8<-o|KvC(2|Fk;*bkwGV#FH|arwe}BDtOQtmAz;Y2O>#ONFwX^xKJToV2H~Nl_<#o}V{}Jx#_*F9=%le3Gh@z5rKvdBFR) zlUA{8Cw&p|;wBO@zE}yGo%B192}2k};>jgsVSJ+&-f+_IB>YkXH>S`>c`5!69n zOJ>&@W}FHLU86c?OhyGB(6`mO+>Ll7o)s`{i;ZHK$n_U5WlMdjvS6KYur675?_q6N zK?Sy*`SmOvt%>;kfmq)$iV^*y`5r!i6VyYsqly6bf$r9^O-T zaxbqp6tsY-TfYxEQMazuSN8X78Zo>FkOO_b8wuVc;5TsUDuC_OLDr6H4!7auLBseV zGJe=F-Y5=X0|w#by=3)>&uTt|;rj(^wfia9Tbb`I=1yB%t>p%+2ilXcS8sVrO*Cls zQ}aDN<kaQVXv>iT8jOTp}UBDk$2yI3_14xthKdZ>Cw7(^|D0PC)Kd0=5 zt@90vtvdfaEib(ndeKLkWa-=Qk@9W8nl%0$ zMQ^2XjiiP?LFeC9hQrqR_Y_-o{(W3{@&hdzI;T|7`44$-bp8^rHx#shsLp?coT$#V z-m3E-YieAF5g1zk3G$%zpCa+(XZQ`Yt|ByPU1u25K>j(Ae_@b0!=SFrIGDg;{*pMq z@^O|}y4F`-*g-T`(<7Is>Np~xl9O3FEjSA|v&#Lm{4nar{Tvo3_x0gzZeL!oIIyT| zlT(VG7~+4;BI6$P*uaDSh6ws9{9F$uQwF5fT&UY1vycp(8??O zziMhaqN%mKh8(o=-;j9ncl-t>p#n6S#F41wTWdo3hbiu#Ebd>XxURR(*Ke<2FHrC( z^=}sQA5%>HQR;O9*f!y62y4msh%Hnbm99Ne?QqUZO%aDaBtJ{xxP+Q)2C{@_sm+n? z$rj|9@GP|@0UPlwH4+4PmeRz2mKsGq`YbgXSJ*Vbdoyxvt^~BEQrQnvV~K7arrH!X zCHgQm&d(df!4T$Qsx#A>GH;7mU*_)A#7u}h;pR^)>_!lSi4e&xXdR6 zRj(?ZJbU;!QPfy9$N$uIpD_@U)hfBx`zFLK@6=c+pZf?*kyBJIfc@q<_} zLs47B0yvcsnWYJlU>{``j|A~y@CoXw_f>3-1T%4g_W@cgA^{~rBuMj~ikA*vZzyO1 z(MT{GInhX<^;P!!Y1-MPfh)5VLxcTs4<#Rf#FGQ@8^i%Ez9|mu0ixm9iyUN_9!#c( z7^a+=8V+^XPUu0_dyGTL>@dSD?$hTGFr-gEoZw2=zNkXP9WLc8#E_mH2iMeOE{GF6 z`w__Y1_YrNxZm=2pKO_f@c4I5;9?r zi;#G-m@JHA)xsP8{ba&VF>r2+R#z1^CNyA)Lofd};ny{os|u+?U+<5c|Lfjf`Rb%v zWazDRvOWLVlqg<IKCIR{Lj^KK+~_dt&6x5N<^p&IqQf0lfEe7?=z zzZdyFe&GH46!lGc|C}-#j`v@r?zvyF)%&l&g(r>{3-3>f;QjNwr}Cx1>kS1hAnN^B zA}8wowZ6)}sHx@s2XGHHmyqBc1%3nXuf;cc|Ji8I*8V$gKTe#P+WgFJ;aN2}b{Ro<0F|p5`CmGDmI#4=6;Xvwi!` zWF42~)S%sOQG(95RP?Q20o~n(#FN`uV7lPTqZOq3f=ya?5bI8Z)wM9%4&0%o=K#z} z?PhAe7&p7kII#V#S^9T{&XAtB5 z{!s#k^!JYu+;kWKy9r;e4KcfegD`9II7k!R{ri#a$rI$8;O;*_z(%iG`*jqG_W1@9PrgYJ z(*?fBNGNH=H5vh`e|{VvDck*rR-?@sX?Y0+Cm7j}C{NtT`T~9ZSm`?d_wxP( zk@=b_TFB7m4k?MCKK%~;dj#RIZk4CEBO!2& zka)5=euIa36(BHAMyf4{vZaM$wE-j5NWxmkFbW8qry5OOV+^k@eFq%QQ>k#=io4nz zik@l@=Ge{oFW3Px+|@oX6BXJHM`KxJTtp`@hBhK}^0@pKGRZjLL2u)c;KVBurQe7M z@@U2V>7eszNQjhD@;|6!6TG%x5ok{(v%U6Ak{GW&OJU=qUOVmQ4dQbH#%q^?j@m&|_1d#><;i}$k9%#E z&Gy>+6EE%oLdFLuL9^FB5Sg&bgOFe=3RxJht%Wzd_928HYT%)-ZPecqhF<$HVzv-w z4iGG_?Q@dDkqvR?BJt!1GBM()01>Z!BvFpCP^>nf*FKuC7BUlAu$4#&^zj?#?G8UEmWLFL>`5YiYyPH59=>}_Payb%g#i209X{aWQ z57UDJdI;||a4wiUu9#g>l|JNHRpQ|QIby{-W+kXjzY>{E$A-%aWIzZ93EoVRJY6uX z3tF;~L))i7l$8c$Qz*o$3=ae-vZ&!(JenN z;nIMI+wgfHK$Uu`m`!g${_+OR4D53G{eqYaNFX0&mh!X`vV8|V9ZgZQwK z8Evcyn*9Qj>S*IaTzPU4@8hElmCYV)Tui)p2MHO!LkXHk8-vJ%C0v382ZfP^u>>vL zSb{zyUP}0S1LtTXT7OFzjy5hMW(#312LgoAXGDvWT!Czeb0rc_t|Aj7jtW3=bpAru zGF(lRcUdS_8*sF74Ph;0xRwYy*K{43U2m9iu4{?ZaV$-L;}|ALiRnr6LA7-1G@X>h zR|fj)rQSKq!*{d(_q~G8r!9wNsGRly;|3NIm#QAL|BXcGGy}V}=$bG!tP|yOnf)d{ZP(kH>WJE_Lsu<<| zfTo>Yx;=KNhR4I@yMcu^c@Gj#9>i}jOi`I&$>GDL8noKrL&SX8U~((?^5yvUS{BEI zVWD}knp?hH-V11gO+7-QxJ|7NZ0dbVrwVx#7oI#u{B(irppeHC={pK4lGgbBnwq6Y z5sBmp08q&fAi=R-_zfzl#0HINg{u!fgCz<29*yJFl119ir}Wj&;CaVlLHFA z8&{K$fGi=PJdJEmK1!Ym0p()^Y(zl$I0z6>G_eE9GvuQIXQJ{Nfb zSrFr^NU({A42&3Ba3qL)ohaY1P%PauhD((nS2jx z2^W0pus7ExKLi?-@De%w$mgWnl1%M&eD-7JHcMzqP&e}vz|oZW9ibYNpW+I_{S1jG zKgVz2U9=E-m&~LlIph}vfy-QQc`GWHUxE`#{}mEXevMz0{+79h`lL7h4SE08=dA}b zgbl6wdYOQs_4PZzQB&QAM)QzYkO7f@j|6WvNNo&X3kuyaNc3!sz?9?{fm#<3uc*85nl!6yIMWFkAo+C)=Em*VoEj9YfT4=RW#@r3; z8o1`uO;ytodU7colZlUTVJkJP3j9j!LC2qxNy}eRUV`1fMlqVTbo4?mu=~F$U1!(- zO3c5bI5fgPkl?Kgg-aKF*;R4I530lX7g7FgP=<*3{{b|i(yx;!Ug`6LN{@h5(8e~y z1zxw{7xr5qJDAoMylG~xi!m`RCp0m$E?&(=AFsy{ zd8|SHUp!v7v8d$7>x%*njRO*@xGAPT#)CDKGyw_r8&MdeB-Mmzf1UoAMEGO_r`KJS zt2yPqs!TziHD|yHkg3FLZnC2nUK~_tDau7vLMJdNbnAY4AKR|yr88US+tF& z5oJ4rvMH2eRfkg`(^*t<8x00k+8#)osEu|2Yp7;NB=~pHia7r@u4O4{`!og-!YcG6=hvP6MM+oPF^}>oq;P)_Thax z`ax{FD!Ld0Uqesn5yUE{J%HVp#AX0HQ(>c`1K3%9-XJP(2C$b07LX>X4q!WQ<;iT` z#|N+~r9FV%k9hIk5;ERj37QA62OtwhaUc>;4k8O<6k5133Y`r(nD9dkoO2kKCQyG% z7!G0&C1wj@4g&&&(b*7-lgvRj#5o*^Cv(Zfh@%1+aqyW+IfC#bEx09sew$K`BCLe~ zM*|`G8>f}vvzTpi43JRVJS5oWLzZct;bNLz3p$p$%>`k<5ArpxEYQ?!^fg3s9CA>{ zclG z9hc?Oz~)a?0<((w%@%zcSU{^wkYG;`3rrV$d9;Ewp5~9|^yhQMzHWa0RF(n>$~c`2 zbch)=i>VDfV5Y5sFJ}Nl+y6{r#_F~>sM=Y8Cl=c#X9I*1mm%@w9P&|P2h(oeG&Aie zsBmgj%N3r;wOf~8w@DTVVBLenlU~KE#1og?e60#^;;dB)t$Gz{Gi$YtZhUBSpiOE3gK-@Rj^e^^DD!IG#2Kp$ z%6N^Y+SAtJ!jp4}?hCb!H*s1mMrq%!@Mfv7khEM{(Iy^%V0#`CPtI3NJhAB`Xv05U zz}z^06-D`9sAyZVO+cL`yK*921l-HwAglN1?68LGw40`WB1YSE!jgNX?p+l3M{qLAMe0 z_9Rq&q2BD% z3CMlS1ta~mH~g^NZ_t9XBRF^Z0P^tl3;g6(R_2g6RB!8cH; z*K+gq>+R)yUo~+|I>s4OlZQZ_FeZH%+1MLF-W;8TGI3D)2m#ih^bN+N?*l%@qng;` z(MQQf$D@zo3RBj+H!CVy)CDc1^4WvY_mk2LMxRjFnCM{i1AgA1GsYi`UL8cQ50X>| zqfg?>lMnGeJ{VOI?ZN1WiPzjwj$Rlteo6_N2csWBCQSHgB$%Tn3+lI^g~P7UCv-6S zF~UD?;I!4|CWR6#i8vyChUhIMdKL(fNIOY0JNX1)5bQZ5*a1OKMlcn{2&Ti*PZ9oU z3vNllVd?XP4J}1ug!dWp`mDvvYF3W$KKBN^WCIWwc0NyDUogD*vD^8k4`6mG=mjZ^ z@KRY!&2j~~d{JpT3Mz#?lKT>Q#O1##FqkhZLFe$w_zG~L)fbR>@>Oz97yN=%WGdD= zaNui1{JKGmF9rMt0YmzNZxUSLsp!r9=Qu2vUyKnhUOFXugUQb1ntTfk61>5S$i|l( z$UVUue20MHdxP%+AKpL{+Z%k3Y}6ZkA6J;U=6$+Lzhu<1HfThZ(DnyEB(3oWFDYzt z)F1rF&l_|m`~Kj%pm~2xQuPNv!4*EO!27sAP$6x9@H67Y?IvXWb0ui@2fsij4CI$c zJoyz_m~N+qH~hh`3IC0O^ZPD-2ez6OYOrLYNBAuXTFCS=5FpdkhDWd%%I^S$aIYZ2 zcNECW2&dvSe8Q`Q|G|P=a?mIIk+7lVX!wLbk=LIsURKl6C;a6Nc*$RZK%ej$dHv1s z;x6UTC#VNVl}vY#zbipUL5sE>!9PeC7y8=3QvRs~oh=yu3kcBPzma(IAF@jq{L)mo z=HCB05l3Kjn>Z5KjDR6~|K*k^(Ch)WLMDu4Yb01APZp+=Y2ghI zur1-!44fZi_B}wPX`u*9D*Ax!NYX;8=|F%~TQ___gr#f`I0W1Q30BmTn-Ne&YIuR2 z2;bR)TawTV>_XVkk~F+PioABUcv;O$FR_O*5$cxlIHgg#_rT$ICG>b|t3 z!62cU9poFY=FLGhXDeOjn=f}i(4(UJBk|+_mX5V3}9qAZeU4t|o_qI>AXEhHOvfkadESJe+{xJIT4ghm+LAc9KVs zjXKFAafL}>-lyMS;S!ou#k2k6(Ihnf@fd}Ti~7fTe%_!n&i9Y^1dTnPr0O4!#g!)u zcpvwVDxvKkk0V~(ibBT6D?zh=JOP<7jT4c0(n%J^{b=D0|G1FwlMI}vxi>W^bYKZY z*SLt-Ed*K&1PG)Dx;Al>lL3NQry#+acrr3#sUQuncq-wiS#V1Tdc`G#4J|~&D`v=R zsm04`RC>kJ-+-6s%vn1JM`w`PnTA=HuH2g+JTUoQF<2NWX8{S?)8cL4cQ$F`g5Mt4 z$ucGAY|Z-|;6RPtNO0y7IpTW{O4w0Q5gQ&ZOOzgiLWeppt6$4!MxK9|=AiK@`&g zLKKvxBF9(RSnF#XAfOxN$)(_P(Oqf7u92(+mCoB0l{zyD%QX;%&}s9-)B{1AuP3R7smpMMDR|z;!;}hXhp8)w7dNJm@s&!@9Hy>9CJf|iBsiXl zEKEGm!i^WxiM?wGzt+I*=Wa_8P=h5CBh_^zXd%<}K!8lvgS^F1ZU7X*-H61Ko5;%u zr{WmlbaL-z!f&zQmK+RLw-PqA9F1Ug8+qMs@v@qh!Rn4T;3angfwAf?^19pb;unU) zSk+Umm$>Szr@ThL(ScJV!sY!lQ}s$;mc!jSx=7Pn(;twb6X6RAfaQBIU#=@KRc<@V z-NRDjHNHPEvwMlq$phv#RxG&>#AulNk$Ca|Ii=qeCrGYZ@?Su`oBZD6^V<>bwv__p zK_L1Jf~EcsDQ)<^ipw`uP2p01eOe4$c-qot!ZQDdl{;PC5O1!6FC^cuq3OMft*hD} z!393it#aV?6h%asdzANV4tb2%8wy$g-<@HZzX~ajBO|)ZUlpR<-><28)=iRLo&X%} z@c|@Q`;Olr#;G)nagE*My0F8t9eL8weu%UmHnd#*VIhUhgiv8k`#wdQj~JSGw0N3; zA*01d39fKV6xIskAAJQBc!AR@I8Fs0Lr4f1)0}BF`51U41dNX(+mmNlKtjNHmVn_0 zj86a`0YeizU_3`Q8ZbVID}365_i0YCzfpytQ5DjT8J{M(i5br;Y+5vCe8$fkbf)<+ zgGd_naoV~>Rc+5~a?U?a-;>Ep0$oLCN&>Sf`N0oF|l!>2}>-7jjxiXg;-w$0>s(|rku!Az77P4_zfgD>4@x%h$>Vga(s*M z7cICY3M0q22^(6JM&$Sod41R7Wi>D($M@cVmwX=xj2u58uOAv-UCU6-xQni`YrKiz zVfs{4{7~ub`0*0Uj@SFaz~p{JgwC!5-kfmqW6-08eu4xqE66PUW|_f+RAYV=`59UM z+-IrNutP-=UlZ~R;QBm*K=Ml^ZxKlJBSB#w4+4qdmk>*Sr3DNpmOQB5{@04FvE(@e~=*=QIUft^G6CN+Mca85vk zCWf_Jc12`!Ai-o+LOX_RL0S_-wp5huqcLQppEu}i@5hiwgAP54q#8p;;|gEJ;C(!X zsE~FH8B4slrwAFhDM51#8HY@m*mxv3NQf+qgVw?uF=Qg)lMI~ajYkv#4OrqZc1$L2 z3vs3Z0pjS{hO zpo|&YzX31V0SJs4JCfH7q@lEWPQ&MHVpL91j3l3gfJTp5o9c9&9u z&i@Mn?}~!a-n$|3WOs_0F8H-jWwOcr(XMVw*n^0B8pQv_wuHS{RPwfj#{%{34J4>< zQ*0e+2Wu#31`;f~r!b~Ns3uH@(5)l;5@$IsXj&RNa6P7h6h2`W}wwbDw z^H^Hk1~9gKVqz96kFWwMXByRDMn4NUqpfWf4pA-PSkV1u zr70wv?vsJ(9swkn?*BKJL>v2m)?DOBv^)IDQAj*FnwDbxinha+#0c%ot?oPK2r)%ghCuIk~!apr>5y4ydYf9I}_m z@d})ht=Gx{#PBQZFcM~v=gCrqOx82k^h1u_{*lviI>|JYX2w)=HJu8s${Dz|wj1T6q?E!J~b9)Bj_WjPDKo}8_?nW>@Hda}JMQOlK8Sq2E?+zRDkb5M6*t^yv|HJ?XC z&jD<4X1w(GcK6^NWp`bQ(v7^#4*uJ=TDc6*o6pty(`8xFp|2)8WVvGCBOe$WYB7>E zB}}a3Dq2;uC%-B^WIhqw6Y`aAcqy}erI)!AYGo}lkg-oWj@0F^YbB@G6N)&CppM1> zAwFu|uX&s2O0q&P#$v8KhejBvh=Y5r02`^hm|K-AN*;L&(b%Y}E+L^QNP&oLPPT~F zC)!Fy8=0Bl%U8@+tI$YM@torqXLdxBm!%tuD(kd;x4G5DCm80)0MIg%wE|TTIw-#g zZAeM8NA~4<>MNwIoHCR7=}wr;T5M5wa)^!<GR~hNfj(jhsiS=ee z750Ktrn}c5iVjE>d1%#1ef5D#cWA;@sUaV|v9H{lFZGvwC(;w+>=03DE3 z#N9@ltv_F6>vv;!4XOfrUkzYp3}CbNoPA)QtkK&kSd~*#^RLybz82Ri>yepJz2#DW zeubP%mTYra_o_TX8@Al9W9~M+2;M8Za|79Yu{+z>hn@JU@wWqbX$D6#=LbS}&@iL! zYDE?60cm|^i(F}yoJVG+;+1Ny-iKNa6yr%a+)ZLe_W_!>8z7p4yb}T#%20H!uHFBAvX_w3Pbg$0$)f~AT zISa>RCPs}^u2960nI*?Tq$~A$bhnX7uF|{1IvfnpItHY#T<+;Oy(}v`R^)3P;Frs# z3)K!-O|>Ii$zwf&6LtTySpaK9LPBh~yG%D#rVYudL;|2lXd?xm6uNu6D?EinU`@T}^%NdY}~87bdFD?QZDj1|{A+-zPWf#Y9xY zZs(hjxjwUl>E}4#fqn>jtU2Aiey_h7DCjkQ1F$z#M-v%lQ)4{3ElYZ%Dmo_*`_&gnK*KX5{<}gf!!~1C$2rY3%~8oD6^4w zbYVvf+?_FI6UA8bnVvTD-gTT=C^WvXj~<*bp|DPqi3OfwGpTScHi9{m%~Ip)qc!b}2Px}7=^h&Oe literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Math.doctree b/docs/_old/_build/doctrees/api/core/Math.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b74e7a7e35383112eaa82a89f8c3ae43195adac4 GIT binary patch literal 27307 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 QTD*V^Hresn(=y@z0Ozt*a{vGU literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Projector.doctree b/docs/_old/_build/doctrees/api/core/Projector.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b60f1ff07779f7fe77de20a480f10b6655cf0096 GIT binary patch literal 4380 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 b%sW7xZ2p9+PDr!9?;_)y_i*i-I{yCw0qrO$ literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Ray.doctree b/docs/_old/_build/doctrees/api/core/Ray.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5b4ed5153b27a24d85da074f516a8ef7f53033fa GIT binary patch literal 4212 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Rectangle.doctree b/docs/_old/_build/doctrees/api/core/Rectangle.doctree new file mode 100644 index 0000000000000000000000000000000000000000..286abeceb8b51c3ccb284b482fc011984f9e0042 GIT binary patch literal 4235 zcmbtXcYGX26_#b+>F#97mK`TCE)j8zPk?mB31Cc31tM|~<4HtWmc84#o3-|K_sz^& z60jr&5-e)yq4(Z<@4XXx@4fflzS-M7oi4I}KYsjkzuVoJ_rCYN@4b0*^>EV-o3ZwM zH4}s`R~7Tv;eoEux~bzdoY49zD+f-8>!pY*+K^D8I=6RdXh`y=c7nFgC#NSRk0e*v zr6!%p11_GkZ&a+$m9hA6@5RXMx|mIQY_DLmhWW7=ZT)eEt9oGG@6?P90c z%?ha{+Ak2tt*YW|OYE`4IhNRKiG5Zq07qmX4h&*A!WW_LbN>g&=YiK-Cv+RY6$Zp~ z+;HN?pj{a^q}Qy_Z4unTgl=bo8%07d3yBp~CCWbq#6+;;0zJ(5fB0JdOSudmfjper z_BF`MwFx~ED1`BIRhk!w1S|>D7*8a$Y#>$u@%)w3=uudkwRVyA!$+?LWHblz7yuct z@K|_$TtbgGo{hB=spr(^bqPJe_%uqsjB63P^u$4bPg=|0Snlu1Ssi4%p8{V`P3URH zm$7u+im&SvdU_t;#fwfS@_AKF(K819J##I8Tq}BuMQ>## z#kIzvrRZ&alSoUZh3QtVaQqk(FTFjacO>-AD%+A%VVmg(z~>dc3oy3AbSPa6su9O= z8Z>bv(!1+yqii*?6ccMKeR>buA+(MT)oMBnF;9D3w`M}wt_j`oYxG`L1_MoQOw;>d zbv)vciGgEGY{KCC>uel@f*0A%uwzDWMIS&Sb!dF#a6ZTi=1g9q53w;H<9CcX8S7n6 zA7;atRX@VYu7mkbLwfX412HAn_W3dH)5kESZA2KDy>Z5w>G|UrriJ6{Y{4gH3v4U{ zkqv{Ntc(41wv$U4N*hQ+7mV87N8tpnkHme7Z8i`UwqQ<;e1u7#W(Aiw;x>Jz&NlN- zgPX)I`CJLkHGOuO?FwTZ#rkA6KZk(>Y~c930g#Z}Anw?UM&a~%u(!#LJCWVfl%g+y zD-57s&3GrYGvKh2u0IcgM)(U(~XAEx*2KhLGFunE5C z;l=@3$13CItKg=HZr$?Q^tCKkP~0(3d1kcxIxIK+(3!V6<`mz?1cp128K=K-g6%>i zonED_WZhPg;p&^qY&{Q-(YNYZT#@3ji#R$yecRBt7==)ohXX|hj<4uDs3*e-?osI= zoJIWIWj5NqYS>1-^gX~d8tqfr_u*oIc=`b=#JV+okbcN2*>)r7A7Qr_^rwh^%*yG? zX-rA<6Sm2AJ>@h&WyZ@->#U3l#?jOA7U^ebOl9pf>;=!&f_^?*V&kiIM89AKcH|Pc z{v{j9FL=LVhyIUC(63p!%>$0xA(HYNgpdklg}UFOD2xJnb^AMZR#vwQ3kx&R5)OzU zty`BLt6`<8(eK&L)kF;F{}18@Hg0;Ay%PK%*|6u*pWr{lRT0;oEJuG{W;?nS#(kca zIq1>C&M#kofsQjeQBbb0>x!|Y3709-KD=n2M v<9~XRr5A_%o{JkAZezHIv2xx~m0XXdmfV0}Ry6W(l`P;PkwyH*jhX)fAI1CE literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Spline.doctree b/docs/_old/_build/doctrees/api/core/Spline.doctree new file mode 100644 index 0000000000000000000000000000000000000000..62fd30d762f723bd4bd0c529387932e4f3e1f92a GIT binary patch literal 4169 zcmbVP2Xx!U8J1;}A}LFj>^RFKY7*CUTZwLy)^0kJG-(?(Y!mwub)YB+9C@%n0RP>= zlG>t)+orKP)1B_U_uhN&rhD(b_a6BU1SFb~-S_(V9v=bT{onV0|G59I9(KLRO|&1V znK1IWs+q?w4|R>!?KwijDXp)wYUp&iUW&P*4JnoCbLF9-p#yQ?hn&i@>*luOQDu)) z(^Hbik}FtHQ_fWHEsZo2HmQ=9(!K^*6xtqdE2^YaW#h3U6}P)wDW?O3nnj~*+)bo} z4O>NtbUAHovYN-;NIGUWjWyY3C(%(migXxhZY%9bP2;oc*ofikdx|!tG*K62d`8&m zJs#7m+@_uBoZDo=Dz5MY4|ufMqAi1pDDE228l40|wx)D41d+}{&g>L6#L931Wa(5f z%*y%u(+15L>?HJEs9dAd=k`IfhKRbn(Uo2lwHjAOa=y{=bwdlu`OG2JKqyqhiTwur z=8XfHz%x>5+IGzm+Md#m78}t{$2d$o*+|Zl&R{i1Yw5QV4LPS$x>=o7yd*a36rE|Y z5jSv@!tb*zR%tozyfnc$+hXgDZo4eHxtMfVskeT&MRhUaBy2+#?me@^FqY>C-9iit zNOsHmptFc`05@+1#imo5sf$yxBDyZK{oO2UXcLu4uq;yw9%9!2X zBc)>Dhl?|g=k==84?VtEqw_)Pf|M@AYBtnIqLlqlcQYI=svFgyT~EZ_h(B^w`dnFb zaUJ>Uhn;}a-RCA&in_jMs-ES@9#cP>?%_c4W=|6nkCf4R7nN)Jdsj#m^@o{&bA)9AGWia~=?k_C9OENSuMx$j1yM%mP85r|7EJ-9$Da%N+Om@lJ;7_5h$2#eCePGi`1q!Wu8Jq#dM zrF1nw=C&YSYqiTGkbf!9h3d*)dbmM;#9GLeBKsZ*`HyGy8pPsJDP0R>VGyp$Vu7rH zGQ#x0qbV&LS~bu*fAyGoG}h+LTV$>8F>6s6Ehsz|6b39j4#MdZrKBZ?A{#~@_bmM^6 z)gF50Al|dq!W%E}o}K&GXW==(d~Qn5GnmHO^%*8)bxiYSqgpzlYDcomB|X2%##UyV z>~wxXN-ty;{Op~|FG}gfY(gz{TTx&aD;2%OqL;GCV3X5LJ zs;=K_JBnUq(W{LYY-2HkW#|5DFmbIgTpiY4YticrtvHgXNqT*gReUd>#@>KwY^s8kpaDz zZ4+9@=QSESiZBrST(@T;*=Y#f4I1=5R)qpCH>T}XYq>cLMu#`e%OxkWnVHPFE}zZgkg(2 zUHWp9Z8f^L{UD2)tvPBGiqThC1%FKM+Iy}?UuBbg(Z}@xX`QHCo3BBeGCFkI@6gxt zSRvyM`^q;{+&5s^4I*dW=9o$X8^abZGG9ZLPdxb14d^>YzQs5~miahDWatEnzKeP?n&48Djk>wV-&}B=nE5+YkFgL_cBGY~?g&BKj%YWP84HT97i=I#-_wGAFm8wC1VB3#XVIcYc zC~jcmrcv3ep8tsr`yTxn_z`Y@xXk1M`pYug)+;X_@T|t6jTUw`Q6W|SiX_gp%u-a* z-z@q&J2^{NKU7?1*IynQ(LMSHGJF)5Nz_p9#Xs?4Ec1D#_5G`vwAj|c=H0vT{(E+) zcWe7kO8>2kNu0rD!4l+F|7ANnGvv^^p`lc+!?)Op4nLL3Vf@aHvFw6STwQSi!(|KC fELJVrsgmol)RG(U&B`V>JS9tbNM#w{No(dt#l7Vn literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/UV.doctree b/docs/_old/_build/doctrees/api/core/UV.doctree new file mode 100644 index 0000000000000000000000000000000000000000..38e32b37d59a1e16d7effdca22a9a1aa86aae146 GIT binary patch literal 13187 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Vector2.doctree b/docs/_old/_build/doctrees/api/core/Vector2.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6d62b20b9caa12db2915ed3af170accb52cf5f7d GIT binary patch literal 65204 zcmch=2b>$l`95xn+qq(@v4Nx8aB`zJ)4_0Hia9unIm>slb@JWmG}5`jQcW?v_ufK> zPy>YCOCYpR0t7-YfdoQJDF5eqW_LBaD+!a|m%q=Sot?MOJMDdESJGjNx3=Y5drIvc z#W7v^woI{()y_;;sjjft=)(((dxa%NHTCaGcV8|zc`6WZ!+r7&o6L~(m@ zzl_Nj27_aeBdWC{-<2s00dyG$+SWe1y)84PHQkXmg`q&Y%`EmzFDwPv5QhPljlb+)@vZ1M0 zQy+K(?JlIUi#PT0;bY=rOs3oPbhWo)X4VzPHgAm17@N&^X2y1!wtRm2*nRS5*4UZt zrLm=~$z;alieoW-i(}K>?PKA>%-FsCIckcf!nmUjFO2sJ6Q(!yEv0ADd4=_w`uc_z z)^DmymrAC6dQS;mvw>IGa8y&jww`X%6$=|pZR*?FkuDZ-zwy+je$&&fvkW_Slc`Nh zun#t!TG%YRR=TOTrQdvNVTpY>+`oHe=3=3nR8`GR@Y&8@p%JEJsdAg1>FJ*7aVf3&PP=060?T*x z3X^I1Zs@Bq|F{2~Huv>)7ItH+cgN_O+u5;cu{(_^v`16FZj&iy%6@LH2s*c)zW>II{Bt>`t=Gu^be))n@F)0(})zH}Owu5I&O#ggga z=2FuRSP}rX>KA=)R_YN916%C7vIuJ&+c!g=~N{VfkQCW6b+AB=|&ATkCo@yPH z-6LD6Q~CzBxBW()l0o}tc!ilkr(hg&C>Oi4?Ok)nV4twte|uM3W^P>}3%9g;gHO7*h96k))kI{xyO2ig>-5kwZFb_9E|jQBZtVy zGDqQfT6sdHc^B$E5o5Pc;LiHONf>e`dxcYieml1Ekdq>|sIG7-j5^ILoDL2Qkg_rT zLz==FG~>*gW}F2x+*tE$*l~_mI5)84v>J9`SB52}jOjpFTUR&_2A%H}E(lly?+lYc z5#qvywCtjqmR($>V?sf7g-f9EQm=3sG&U~=U(Th}%ac-5+4H%JUV*lX3~jv9D_j*A zdMVn732TR1D8BH!p6OX?xY{dR6KI%64cAuHaGkGV9yDC<6>bPLTrCY*NX+PeGvcAJ>?ai4h20^NzkJd^e5jbTbr3m7mI~w;gsjR!k>dCK4nLs-$bog z&nIIitA2XEZC+jB1*m_~E4&n{f4Qpqzrk4l`&YNE0tx(S2D#>}3a^B8z=)L0={vHy)TZ#Bh62F&FiijuQHM6ep zK7@SW6+VQJ^6dYplAw1e=woO0f8rHBwYpQ;53KL|Sh0oAFzY92FRUL`_y_vwbFc74 zK>JRGeYZQ))rRf6WiEpJy23wU)W5vKmto7k!gdP`H_E0ZXY_Qn7XFR&27t7gnJH;U zozam`mkM7CY-D0A*%wcSn0`dugE)nWnO8(>L+1&2)BW)5Z2;UEy08@|{=s z9)@JU=5+Z_CC~hep7}2t%$?oZ@dMiYqgVJTX!Cd0Km7vHg`X{8pxbcM3k$0}#|3uu zQHPtwaO0W9aSa5)c~G<@@b#%wy;%Y%&@Cyt-U&LM0L)Fb=JN*LMXGQ5So*%A?`P?C zPT*2ufq|M#cD?K$td;%4A!_=A2PR;knmP#?V1*!p*uXObRf#7=sVqmV83ZH;tr;xF zAui+4%8WVcAn#JbW3ZZGxbw`?s@oyU?Zhl2Ktgklx+q{-mUidDzG9X`)icYBNjXD~ za@E?bJ9y0s0E2$G=vQ>;DHx8xP&Ffj92p{E&PuF=V>VlPw3?Mc^{WPK*ql|snZ@Wd z^|W{Y^`mnxf*N8G`hvm+Fvw`qX0Mw_t^ zVMnvSL2wH&;{+u!0$c2!X1pZ}VhpBhW&&WISr1ou<+n&+G2#5P1to1}eW|LPw+->5 z1hWB%(1*W4+HW?5Xmr;`C_J;VjIoo1o`4fE?vX^BO@!an;+yNxgIk9uI%YF~opv#a zHk*qyJ}f6T4h`D01(_zrMNI@0=4^?=Gh0bUL(a<2(FSV~dunTuY-34&3)eU;VtQ@1 zm8!};H7sb=b|CtVdTM)!hHG{};h7y}jO{6U!ukc7wV5RRPGx*J-k4dNorQ=V+?11R z(&Gm*#+d$G&_rg+UyFjXC_OQJ*El9JTq#un-Dz< zvq26W%b>G!6%&Wb%w&d;%M5@)lAd%rb&VwBDBR05oEz8E&Ozg_d`L~ zq%8Ab(<*!o3)(;c3vlf<7g{s8@yrZyS*_F~tw`ds$kEJ9kz^ebr)!v=nRel7D9wRD zk;N>@>aen!mxU1u$8eI1rvhm_Y^a|$ZQQhJ@HMsi-Or57bc!dbW7(jSyF@TakALDq zO&&#QXp&W$3l@SC zL>V6f6B|S6Cz2<&5S#=U#>2@dJadX9*eOZv<%Qr>;ZL)8O=PybY=m71P8Yt01!sW3 zAB7CK&y>`&tW=Fc>Iugi7lN}za*jjdxLXUsxx&>@dL9V05S%Yr7g$*}7XoT^7lI4L zlhiRh=(vkSP-P*w7)Z4C5)_`fRFqX00@~O!J?BsO%fxcI&k~vNR|pt4DV3uDPWUTX z+BKIG{wh>G^E)xw4yJ5P_*{IRGibV6^w(JW|38AJYo)4k&@>`&^K~FXqkfC<_Iikh zpKd_mnHyz{^%Ff|Cj!IUn}omF;&r~eYo?UVw-wFr0dpcj#kRMIF5XEK8%G8Wx|K}! zoH&qk8$dARb`+kuLjoFdR(Ouutu5@MJ4NybOY&Pd#c7TL+q-{YHIs z4@AQ?e?;M#du5F6BYML6g?rR}!rx!UbC1G7XI63T1AU9-Kw7PVGGbwyH%|jbn~Cc8f;b1 zqT-q72uf~Mv@Et&{aKXBc@au~o;IJ~i`!AyK%uAABd!O2E?=xn7S@^$Ly#HJc zZ_%LjWkc+C^@?a}Sn(nSZO!UIz2m zs>C&?a@0fSZ&=#pe9sIX$aWRYw*aBt-=Xl#_qbw)s8JM;Mx#-9Ad$sW2lF4%{5Pb5 z!XH$ruJA|T72EtI-k)9GUU=+W;bb~TH8gfH;9=~VSY{??=G3?2g$KStSC4ngx=QVM zyR5#Hj|_~(!GNYLfxy4iVTjg4poH+FuCq0+v8? z(x%Id1jWLp{<-3&_O$`C5&)B(=P+hv0Ne-R&e^vAVuV=*B=%&d%43O zuD}L`G3yKNgfV6VK$53)kyvI!lFZMsaATQ`B#W`k#<=s$CaOo?z8k{^gs-yXXqy|( zY$^^L&TK~9fM__gxer@_H!^KFGbUIrwjgT|&P+tbGg}gr3}?n#FHcSEmZ15$R zolu4Pol$tEQOs67684V)m>k zA(f+U&ax>i%g2X%q3W3?F?Pq43mCAcm_mp!weLjnJJMCIbS10(hEstZ0729?M>KOo8mOG7N_Ca$-hhtFH{k9&iN>VZPkogFf9AZb}#xn~>g5+i%t8T@0;r1uj$>J##>b=TnG?ihr!nPP-$tIcp9nDe;v~_Z z?9fv%<{yKZQ-nMSb^5dVR@UJ1EE%vV}wJ14JFCFz-9oc<1Y zjnk{edyUI`Z53Xsp;xaHp5yd-+`7 zZiR7r3&5biRrI$x^c3um)7yo-BSd19+{wx>j?+JY>Q|4`phb6qS>yC>+<4|5YQ#9D zOpen(s-AQRjip2GW$BL7`v5>o??>U82XGC>DdpE5rw@wfA&1BJjx$al1{UHU5$U6q zNE0uHJZ4!Q7t0ftrP7NbR#{@4G6Nl}4AhCnqgm;b68)4FZAbCbswDlE1)P3+MtE*Z zf5M$-o>kpnZl6;n$xJ-Jz%dPy`dhcxKrzo=4O z;VZyv&b=z$*IeG$tMF0{jr}W2`)P;0oRg$C0EWSDqQH?Ct}s|1iExOpoKm4Rzt*w9 z-z4R2D@7rO{2V5U&*#`F5007M`EjKVX$kVgf5Of%HSi<;Lj24=j$Sr!rG)XM9Z5WH$$zogJz z&8s+hJwM1rf1@*J_l!BJIY5ic)+q8ZNaZ5+j`k_8-0X{Wp)A|jA>An6CX~J`d17h(a)4o!ERVu7D@cNk8mJwk1c3n4`r*Q_ zXz_Y=mma`kShmCF^&>=5!-$a}fDwHAmmjtH4Z_v1JtYFJons_ytQFS02Hd!9z8jw(E9cwOrp=x`MZ19cBWMaKd^hJhQ$i?PI(+B{b9I@=F36h-E{c#l9o} zgV_Tc2^crY3SbXx47}3=n@G~8R+6?@%2p5fOB;y!sj`?e%w`~i@tcc(3(H@LFtnZL zCOkKoD2^>HhcsHRhUW%b2^DWa_-Q?}weUPQ*hZqZ4Mm~(+f`&v<*1d--(GkI13Taj z?@Fr9u?OZ!s>C&?a@0fSomj@t4R!_)j%Y;TnO$%V_6RDlLpcc1b`{O!kOnGuQ>D7f z-GSG+!5-q>)8(B~g_mk*?p`c;Y|w-o&+IL7zp4AElGIBz5)D86wdKSysZ>CVFh(e4Nj;gU(IJ%G+a&gM*+=IWQ|Bn}r+CbWkTE z7|P_(>r_4I5}Hewbg_(ly3phSLTkHG;QR~MVBk@M^-i^;10$ZI!{d9%Ny$pULVS-% zXICQS*H+js5D1$jt*(i)5oZiv^G$9 zEby9n3&ne!%X@qkUaFz7C$LN=WhVj*gHJ-?nUisa!4;A+DzxU;O3F@=lvAw~t>5x< zG$}hx=y)S1Hf|7XjHio$eR786ooVGold`iaN=fBt0-Jj_%Scjo4j^dhxhOny9G#U;4G`+g#C$cY`V=MgLSWc7;iWkScL z(Kl$)iS3Ax1ythdil|_@X8vuzWWo$gXaU;ukQg#!7=;NDF;E)d2ppR*W`gl>3 zvRfqL*0P8oA5v0wo8VQGvfG7@K5WH{`jv7re2+`X+yVLuIoX{6d*%-krp+y|K{?r7 zg1b4{-GKZ;PIeDT=I25q{o zmX|#a7zWA{DDaw`B-rqQ+A&c4yzD9ApSF0$J-y%s>``SiY+Ck=C~Da7ClJ5}UxIlS zH&Fi^3eWr**I=Adp;gbU?0Ml|aPW>|Wo0i4S3~hjBH%;NmnG~kR#-C*DSFKw&lT*I ziXu`uD(6Idm8Jcp?(FgAHPm4F>nQNf8?J%n6mM72;Hm2yqIuKOScMa)@GU{&HkTFt z4fsIe1oJj(Q1}iC&-`7iwx=jQROmc>eOHw4Ih4*wRXX^-aB%}BHijeS0}*i5{!qd` zvch!8qKB`}3vx_;kP?osUl$WYpBte8?xOy&xRdHO35NeCBABFa^{OP^d6B z1{8HeRcZ`RT3yZvKNs5RYZAXxMj3LFoL z-}VZXsaO1kHc0Kh7Uee%rFB!7+I=fj+=y~&_nq)e?Y@_&|AeB@g8x=zPUWbTE%-rr zh7>>I&NDx$PK&|(vnp}TsT}o?xfc#o(0qQ~Liv&KVgSMci=*(&61WEQfC}ue3{tx# zMbkT^fyzFrR9D#-c%^pz#M|HHt*gRIH8gjC@XYN7;tuC)s{3sntV&Wb^^kc8OAh>@ zxbe(VBKLWRsgmTS8uBhJJafBcaOat2Rc~;Xn&kvZN}w`ISe|9L)U1FSTs#~F-b}+a za52SO7e`XO5te?W=vQ*+Dc(=CiV&L|W(Cc`!G4mDWsR7>&J5zo2~ zkMAKT#cKc-;!`3WQ;C!(Kat$6e!LlLxyFfWyyeo#PmIv_Otojk6U4us<+qb`eN~bk z3I^^5z-!=cDBg`+-i@p9QVqSkiSQh_o8rzho2l*(Ty0sK3zF1MWt6Z5OMl=_FcVRO z@3usN4<#O zPhcT_ib(gWM4BA96HJrk+FM-vSgr~KcLD~kRhc-SScHehJeBv%zE-*&*88cF^k1-X z?Jqnxt^>q8)nz`g3N!W4`7JD?=M&Qaf_Ks=aBPNa;Cza=&JVV&R?)PDH0bS&DoJYt zg)@NHB%CSUtjpV8g_mk*Y>s8}d}0>BFt`H+PQq}7!4=LYsL+~U>wKb1Qu0=c&L`yO z==nsq(D6o2Y@8T`YXuRoPmJUht-R>@M5&^bRE{RFxjif+=M%F5K}+YL@XTCXgRY^L zXxGdW&3sE!`F!FaAUQz~7E!!4Wjj35al=0ZH=a3EwiC=IErEy{d_`(9u1!0eBv0~%GiBlxv)Ut@+ zY(VD|rwLy5eByMWyP8+S7Vf0?{6^nOXB7C}*^)T}JQdC;&IB0mx=ElifWQu&QJgKf zdq!~%Air=%aV|;b=UBLB6z546&nV8voo6mk-R42@M);48X`FjRaiLi35yeHsEgLBZ?h^Nq-4hgCmMdQSr=W1SO9sXkF}x;&M?Yr%fpR3i8B`D6RwyW92Fo z_^7TV$iX>k$5`=?D6SU%8jDwsh9e60B(|!uDfXD+T2a-o<2n$)4rY436mva5FyjUk z_#~_ZSTm^Dn!%%rn}omF!8^)zRPlS^YAC-21bTpct7P3~WtATw-(FEbDo53vad)sR zKN`9dRh*uQ$y!Xgb|H;EK)y?qcRQ5Mz|o1pJ;K$n{f{ExI(n~!-DidAjq0u2+KN0P zsPxpBs@(c2Si|Bzms6|ARy?VhfsLtVWAteo(hdoK#R(!0gs68QHM^Z zaj$qxz_@ZNfDV2fc*ns{NYay5l6F(dc2_YFS9(7D6v$xl)8c=|@>e1ZZ4V9+{v?iP zEr&E(|AmJL&j}T8LHQ8j&%*N%;dzOAAryt?zgUqum7`WR|0UtM@4t*Yyh5ishZdM$ zQ6;V!hgyJ>`Bj$jLxk4=gd<)@fx|RhgYAF{>_`owu{T8XW=I2-Z>dsU<==qUA;R0@ zeaGefdlg=)p}Fs}+|-wr(m z`#IRxLVgn>(FfnM5{5C=4-dWrotuM|x4{~R2SJ;@2eWdp|KJ9PUDSzSg)%wxeo#H> z5}Hew{KztzgZ%^$TKh8!yu5~&M1p}w4c0r=4i6RsHQrWpczh2zIoJ}wLi~~@P)ewL@=^I@wlk$)}1^WpxIU1w$6X*)obr0;?`KTvqi`9WeH>@p9j!c0AM z{7{zB{A($I;F)14@a`F|f#WGYI^&lS&9Wg4dU`oklGX+amj_-mZw2uVcX?N=!b>$Y zb_C00{xuR{7`ze+&#a6q46cxWQK2=zR{ph$q|{p}TEFGzX#TaT(D6o2Y}_H(0#_3O z`($;=Tf@rJo)>1YQaPHy=B~vul7FoY2wFM{1rF434Z4O}qFu9&Xx6nfmGiF# zAUQcxB8s=BY{wYVaj_hW8_$drc|%U@c&Ut7=lSq>q2to%8#HMGiJ5<`ha0>#CfZOG zL7mwcy>xBl9fb~mKhMbE!v=tkfP@~@3?j}Ld!8Z2pn*EUsM?KGS5-sWFa z7R|pl2PB$*vGMfA7A)iW*F*r($6KPn$sDdhAJYu=@uKEmTT8??Wf4K%qx@@I!K>z9 z+X)?gK8znIsg!%+H$X~ed(c+N0)f1b1g&zmpgRDXF zwI?e0&OU;Y$rsIwC0~1qGC5~L=}qK`C0~03hJmsV3eRwM1OtWIF;M*EYhU5_vv@t- zg%=REmd&t<*Z!iYVZ#9+fDL$d)C&^KR8*nnTQkCtMgo_(6u`wJm zJtE+$JzK)&SYfrF52u3X!!*EM)aQyjscz?B!<#398qbI4g8)7_2nA03L|yawFs&|U zgr3+A@!7)X!@j-P!wwZHZeS`$F&qJhv9xgxo)44H91ajHIsyew0&xw70hOs&V$X*c zi1H|h(z+>3?T!{IZbUh?I|g`tVaTzPv@n!}1{_zB7vES%9yH*1;Tch!fIH8es5*xc zm`_qAt~iyW9x|WIGM?F;0wCIdDhhn|6xX2rRA5JCklCFsnlnNgs611Z>MG9yUYXt5 z;yuUZJ+}%k)zIAYglB4ZKJIXgrn=wO3sp%frXDh1#FFFwV%&J<5|R77m#UKFr5f^H zCOlKS%W>zKD^zzM4__%rQUaAx!c{E8mF9P-!Npgj@XR&11}>&}>*7d;cdezrPW0D1 z^c3%BcsB@nV~9jw+{8*4C{@q!ZU&v3;gvVr8W~>DvfqPQ8Qv|p@yxB%iExNAIRtN0 zJ?R*lOUK;KGMeGt0T8@%Ckh;b;Tm{{8mxD!Wq5aq=Wd6`_mGp}-2*Jd|52p(Rw7M4 zWgBnqvt0L!>jBGE;VIjA^B{28My=jNs;7gAha}`-E5y#!M^s6=DHy$vQYuI9W8!_> z<$aQ@lTVUlQ`=5Q&lV7giQw^u7YRUp;z*mc0sQjo#OA195$5xhjm_3Faf9mn4~=W8r2R zUr81-jep|~-?658^eIo!2>&S$jdK%?Z^U8~jc|VzL%fu3aLcPkDxk za%qRs890jjml3Xp?aPXQJIHbpw!9UlZwH;yGreTet@vgh`>1Dz$#=Tn&4Z4j1#aNK zg4mP#_6UaKa1q!aJ1EOHD*}wp8iB$yBSq7oA4DkAKpRag2l*?Bcx9g$V~a0=+K&aU zB4FGMD}Wxa2j21cs*<#tm83&F%9h9dm>$IZZP)s^3(V>ugyCyQ!kSh>Wzx|8;L*=o z;#u4BNUQZ`m>-N1D&C56elS{iKKfZlqSg&XVT)?0$ehYiD_xKho(aMj+<9iK>VDum zPL;T39Nqy==J71!3Bm*b;fnQ8;HVDQVBS-K9lk+=uz_ec3~6BRMyga-xiRoc5H=C- zrY`ShRd}g}=5EfC`N0;r@ytY#`%T?am84#(A@5c!IX||>jc2wIxzD?;DoI|dA@6p= zGs4;)cX+)`b?4E~jsheFP!|PEVp(1pc0v^|tcl6443ukK8%Ycr0Y+EsBKln&dJ6VK ztI0y{79!CHyR)(gq17Isb3?20-dH0s2->tKm=#)0!3}$Yw!|{|=%)u@ z7(5$=XXfAvgDX7xp+akZtw%p|C1swKqV-#Tjz0RCFLb<-6C0a?4e=lmuul$_JkQE& z=6)7F`Z=VclvIu;u(^k_j6C`|3=p*Ra1@?70@t8xs3qDpM~Y^FrK$Yr=O`dKIgb`m zyftMzjv*Zv%VTllnS~;6$cY`_Dn_jH=;t`0zcB ziP&)AlJEYfM?WW1?4m#Vk)fx6CwTO8D(-POMr*L71ztN{b+yx+!F&7YhsvUle$E6W z`sjy^r#H@G8GrP1Hh}2kb5MBZTwH@brWxwvMSb*hoNjx!UIfbCjE1D!7}QT?WW6D4Jo7V#0Qp@OL|S z#|9;A_Xt$2%zSc~e}2eS!+?Fbxv3cSZAFNCTDct5RL%2f!;a`%t_exx61&;iVdy`w2@X zW}o85GoOjvZ|Xl(N$RB<@_x>e^WY2I;1i!B_j&)NN|Kjq$or-6Ow7K*9X{@n%QUG;Pz&9+*E5Ns?dgePZ*%g3tt!pER+4lgWEB+(;|2p&(>?dYF2>D}(L?8Ub zN*LcnpV)9t=%?At&!BSCvhucABP|PB)C+G&D=k|LH#nEWl`#xua^NkYdeR{@mJV5x z?Cw`+_67hg?SlfxZ{oI|p?vF^YDrl?@$`3ieD63(SskztKR~1dE0MymUUu0tgDml2 z5f8D%%?^GjKv;RKmj5LeTS}6LS;=;$F0D$^VZk(CMtDy1WyQRl%e;IQX6m80S6~^< z#fAd}hpdPKKWl(%Fv%%CI>|?hW~Gn@-Mg|XNoxazs{pUbRxjRFUEbBI@KOzpU7ckz z7h3~h7`!G5e3KfkjCc5`-udoKvo?A0g=#2l8)_wFqaj)ih>BPpV z!B)4f2-qV> z?E#4;F^LbfA-=;KK!JhKz7K_Al$_3@%6WIIblV_8Iy0VyHdMewQ#*{(u& zHLs1y6eMJA?X&T-H&YY_R!YZ)W`~x{WH44p$94l4hl7%;H9RmzTjd^tyXn}Tfc!!_ zHiabfb1d9+Y%j@TI@W|ce2JUt4f@PU#g_QV7%g;@v3(&00vJZkG!&jmOM=}gsU4%n zPsXMT-)iyt>Swo4u}GHfv8h;_NNX6A0RfERcTKyZ%nZO`&`cEgx;RO(2GIm-5EHR> z;d2h&u|SE~Ea7Tc&;bG^Vx5xJWo4BUv3x}VsT@^v7Iw2NhhYU&@p}kjvKCXWU0kDy zSW%QEhte5BO2m4Et6}?W5pZptBVlu`u;$g_&h0eYBELFTAq%4s?(#cN5|S#@!PuNH zf=T+to7yVOK_EpR9*n{>p77}e=ZQ^QI@iK6#R*=knz8C&we+}sQPgY_2cSCj?XsU9J4wCN+ zM0ue@X?rwGzAq9gZbLcwzF2rB-;ecyU;7j9h4PpW+uuD^rd|xM;>q8o-yg`-fDsKc{$@fj- zz1ijceHC7+p}DuPWb%D0ZtzB)$o;0?u1Zob)sXiNmYl11;s&R6BKLXkQYFbtHRQcp zcqZTX;10jept_TM-zz{;0CiEoeJsnX{{5)pR~p1*#}?&U*G7`>2LVP`JS6&u9eN7( zlkZ1_d^AL&4<2JBjAg4O-;aaJO}@)PP>tj}Xweg3R`UHMZani8H6mW6Ob)!KRZlvE z#?m3ruym8}KLLQ2K8pgsT8e8h=qTTMrdsm-XYoAm@c7dm`cfrQC%Jyv z68}ZSuUKL?`F<53EJRkz|B`&aCdsc`$#$mxRh6W}f@%JS@SNsviuo;<`EOO2sfXTv zn`Jcleg_~pec1YVQvBk_Lh@_tf9mq(t?O zilTfc`R+q(xM2P7$#-9hUG(HzhV}zbkbL*Yy=UrZP0(z3ZGh@(ry0n5n|xDQH2EF` zNHqCo@wD+qlI6`;mSF(~lXo%pR0RBMf3c0Eq`@ebb6t?YV&aMg9| zwQK!&<9d>{z9Y-&MrFGj{DLgAp$NE`Z6skETVc&hBS+Y&Yj(!qEm7wyM9n6^!(Y_w zE^?cSEot+tU{GvEhDlY$ZVoh@w*?Bk$0uP8IbRnIv;N}`FKj82tt^T5BWp{TM{F%r z!j$k6aoY&bJYrjk+Ab7@MQrN|R&(YXof1%@zoY>eE46Or1 zz&@EOc?Vi~(b%G;q7;0EKj3WcG?tOrA`J*yIvs^)T5%1!hFYRs(CvNatq@oQ)QN9yf zBdi1^;|f|9iz`kPWpbv3 z(oZ5!EUq{iFbt1VP~c=v66}^v?HC?@TydK4r(3)}7!L!>0 z(RxTQXQ2x9XQS}UIbyczsnDutL~*Y0=Q(&su_B7|g{z_X0uboD{zA#R$jT~z(&gfc z0#Z4u=H$ABr9HXf4`N-4D$eA@WG$v#yJkku>n|7O6%M5{U=+bzDO?TPuMz>5%->1a z)mB(@3SQhc-`U+$!fR7-XMMNHxAnA^Vn0M(pYCeINi#oSlFHE>cYVD^vXaV8Fea}R z!KCIC(n<#I0D6RLxKink*-IL>`o zG>?QdQ23}S)fGMlyms}+#ruTI`(zbfs-dw@v9y7hGm6dA0K?#CP~crWT)7T15Oaty zPN>kDUn>xMR#Kj`Qq=46b2Je9v(WKIPHgN6Cd2b0V4u7oc`sUd(Ln5_ic(TJn!x71 z%rX*){RI%T^c57Ic@@{7Yp5mKHLr>0bxR|?_6@4P0>XjuhA{Cal$F0pIxZz|;RYY) z6?sEW?5P~3yQ{<7LdT`iA!x@tBzDhk{|*3}@h%F_yeHOBGS#6aYD{jNe$N-vEc~D4 z2W;OL;|G?JeH4i>J`}uagz=HkU3!Qa?9v^Xu9>Cml)|Xd^`m@PeP^bW&9{xt4$KZL znUBF#AlAH@j;T5Y{tA`tPCc@ zq+g?H2sq&4p(t>mDftaKUp>vYUglZHFp(^6Nwh3m^TI858KDx^g=Zbh3ePQeIf+_6 z6otibg^JAh>@VP4!G;UZ<$Oil;pIcs{VjH+Dsj#DBrf1&UWsLNi(MHYw0jj4_$doq zgP}$7TKdAXj#WjoT1W$HS68LF!Zm=`(!Hj5*K&E+uEI+-G)1A@kGfC6tI;u>@iwM08;BhhSZX`GFA6F|7pZYoT?31#J* zk&g3qbKKyiLy_aekKj~}(%nfoQRuidIt1<5lEm&tyA=Rv#?~nCilA6S$yBHL#Sdau z*=V;F<93!YvC(cXc-4(|2ce^n3G9MXX`3CH9a%Cvf~CSXI|*Q%DN0^)o84LPMc-x{ zL62>gg}cq}A~D=%cg3A&CaWHOOyHZZO_oNvo9u3)x0~$l#Epz@vU~Wj1=*4QCc7XQ z#Cwu8*kq@mg3k;Sl-y)#T5OYT5@m8kgwppWPi&Lj2QUl_{yY*sPb>*`lcjcz3T?9c z3BSL^>oI}#00w5+61&A7Afg&(Oa*~I$*d4_ARsWJ1%+p(iQgJQwblr3uxa6^J9tO8 zHrQ6-s_QOqux*l+ab!8&s10_;FUT@8MZgK0m9TazOmCir8?0?%d}Gal6t1HY?wp<_ z2}$!03&uwW8SFc8zo4NLlyGSm3VixlavO5KTAFLU$_=$!Bn3;N<=2`OZm346gjL~& zS`?leYDuDcLQz=sW>;iR<*1b_)g0luY|q7=XXdHyZ>aNCiEB>fsE5o4v5ao02Lpt5 zdni0}2(H0;P4Q@ScD-;zJybM@g*34Ca8;@+JOX$v(MO7Rfy;YT6<(^Lu}8DCdy7Bp zj{yX>9*Y8>AI6pQoNtqabBk)M(X}?v<0RmCD?mLc??yM!6NHX8ZDQk*!Pq)c1nh~E zB=2M^FS>!AQc+4OM-$k{Q&~nf(9-}xBTq-+nKN(=I)qxH9df2<&ayPl26{Fi+(6F} zCfJWtK6qfnF|n)eZCtp}U&bz}N^9y{^3JOn0=;ulT6FE?ZYJSAwg;9(onP z_(ckdOzxpq3%=-k=ry3n9?HVqL$8$>?xEM=4xjN=J^DRR8~uaucUgQhie8};upN|*u{-JAqN`!aJs^N35jp0MsKS(cQQ*`M z*I>d?xiy8G>HWe#;NTtg+Dso5uDbg2X8Mq1J?zMGI#ZkJBflWaJSqZC-p3^DaVxBO zIrwODFw~=u-Jbvnyhi2jyna%gNwbd$M#ocRm{d#h)1ZJ0pFx3hM9FK&`RZt%^&&UV zXGQXyCDGDr%?UTpKMR$xCfq!q7oMBv3ljBWC<+VSOBI=MGzU0Wsh5T4lKmIl;a4nF z_cza1Rf%g(<*0|uud$47p05LhcK;Ox&ING|h7QG}(az@irfA*@X<+T&RH?4;ZQ!*$ zza!qiyS(pK;iVcH`yR{WllS)lhQS}8@XUv}a*D^Eyqk~6o61qEZ9}cS^ka$o#EMdf z%GuGq^i!eZEuGkSTrk8w69GHsACmXEl^5Mhzo;lBm7@u4^FLWe_R@a=g64jS!ZTmt z8uSmfMEmF8qWRj=RDS&a4UpVczZFruHDx=#BOPbv_qf3;g(7dri5*{GN37gqe*^u$ zLdT`iH)zriBMQBji)#I0)q}lE!fpZjW+!NL?8D@ zf%ge<4f>d7sE-%*@%sRY7+4k&oJs5P`yj!qh8%;1?rL7MY}}Z(_F^gB)tcEWUny@N zksVPoL%>!c<`@bv&h;cS8FLI1e9>c$r9qFFgM}M&EF&?DIhMs8er`kchUVofH^F}x zPt)A6V|j7euww<{MnuDo;XZ6Zc7z{xoEFUb70DWe9V1Y|*ZUEa3_ECGEbLfGl*xG$ zN?(~gv9Mzmz%W?qQFvxmNw8rDwPUdO593!8eszo2R}GfC5-Vfb8XI@4A;KD_tO){` zf-62u7mNwB7V0o&Z4`Lp5Z7SjQoS{XfyZd!*KzQUegz)u3Rgpa0|@kJJ|$UWtgP~* z`LPuRq;gcvi8qdA`O*A%RPi}wF|>+cy*em(z_T zY-1~|c{H3E=JbJAW9J6`kCp4OJWX-e-AyDXsraN|bZ#nwNlGFXMUmMI4Cv3zQQ$OE z+zpG&jbX+1l^@4Xl$b4jF_FjdTL~C9-3nlLZ4JEBUE4^~wpNn1Xv%h%#^7=McB0(g zp|oBLqq7}^ifb-Ej^9yuMrV^GYNt>Xc7UBLGN*FXO0yeV9-KS(Uiv zRE~Pcyc^4CbhbM{=#M>6cxF#rgZV}AcC-eMzwa&T}H z%#6MAK}-BdgciDy$l+qPk;oCm^@&CzNBXb@**< zED||Jl*y42NGpRq43P{l3=$|YS(Dd0muo$pJ?&=?%;$wunv@svH{6S zqOW1m$smA5{MzD#JaY<=Fzr+n_`X7kvZm1(YZ~K{(}h37!8>LsE;&=U8fKgY0>vd~ zOV&A7Ryi&?x1xYlj;c8g&tqAROU_3XzwjX@Ycb_&-ese4$%Uf4$f0xwlj4$#g{xuv zB_iN*a;bz}W`#A6cjJ=ynq4D4p-JxgbGhUt4LCCxvsZ{MzUb$N0uJOf1;+1O!j5oy!U^iX|ywi=>OVSNilJ+agw#(aFb2(o5z3_}zZjq>4Ls8gIZmYf z;DPxMs>C&?a@0fSyI4l!mAe5#zubcYAAH6&*a|7$j^ZF*xmPszg)~rjzbe%gJ^;LS zzX!$pkjwjU6<(^Lv5&B<60bZ89ISo}g=ZeewOYJlo}iRej{0qDY6UG%O5Rgeo(6&3 z9t~Qa7CPSMiH+w3bL1Hju#5gAdCyvT(V*qIic(TJn!wionPntsc^(k7`2`gC9bH_5 zo}!j$PrW3Xmo1GGwEP7Sj+0k}i8rCF{8iF%m3a*}_<}%@H{`^Q?*$~*30nRtbX*!8 zf_A(?VmD}c696>hEfhG76l*A%>d+E3rdrVQwiw^BjESJ-?}AqiTHX~p`i!QSDea;c z3M&OG!?VLn<~?v#2v*()7@w7vNUi)q_@vhfKNNh?gO!g!k6?v`8?1aRF$`8d!5!XS zRJ}n5<3X@eZb5yAp3=}VH%R$ROg2dQ2XVurLCWVoY(aLoAEaCo4CXJ$8U!i-LW2!4yE;C7?g|UaXiaf6&Gy&*3d@q1W&hi!9C6lMP<>aTe|}ieY(ZQ z(;IuRj6dDl6F~Iw6cl*15!axPX@2xl%{5Ql!>D+rMP?1xtlUZ9jlLv%lmeBeeqrU-U?AD(DfZv2Y``10{x$S_|&* zilpk%4}SRO`)5fs%MH`g;;>=bbmIC)!?ac(wjkTz57T}Z%=R|224PwT70=8dC>f^F zxLBArQnARbDr^V~NIqL(ghGk1^jMgQh z8fN4{;IBqji0K9dMifxsYZk?Cji6d<1Ov39@FfTD=vIK%BU}yLvq7K$ZH{EkwX({m zM)N8PNad)S6Ky`r@~P25sN!dY#bhm}T+O9efaZzv5QowkHVV)V6|RQuhlzm8=iw4| zgca7j9#4(3nbujw`WbmsUo4q+e9Ba=Z79~-$JH>FYTihHCaCQZ0J7@rG7FsXUW zuU2V}0xSCXXcV3~Msgbd2RRsUY<)RQJ5~Z0`T`?oN5=^mZ;lnf&O9D?r!!BGq!Xq2ij$VcMy}GfX>8qD~J*VHZ84B6BK7tu*^g;TaN~ zg*$wCqUs!eU_M8cxaL%jddPe(%V?N(9zf`s^HJag6xU#%pm;l$gD~wv(OeYLK;gxz zR9AQj@Y?e)74Ky(@8wl^sfNa0A^ar$YD&rUWcbaK&X>X1FqyxmnRcDzv% zZgM23^P{oj%|gemn%H<%Fk62w0uGd0B=1%$FB&`ER#6I0DgkHPZf6;Z9q#}H-o6tB z&MI*Y#tXGX$ID%!x!ck-h_d>7NyjzsKHT7>QsfOe zvEzqRh;`1e9uPV%jV?h;9wf0H`hgV>0feSJjKVXIh&hx^g=mfKwkma*fv{+d5iYSv~B9#6rd17JFYk*;3yp96D$}9Tr! zx5A?Lg{!W+{C4pNlJ%h@%jrgiDIfiUEc3AlIAuSPuurY9=IzQc1D5fMpVg^vFV@d# z#|qz7U&IUd9rc;+VtYrvtA5n9Y2(I>8#iwJv}vQwXAlSn(^Plv|3i9`jl4D(MW2gc zQu8MNFNT;eAO)TBPZT&qmB@zwH<4%yJyqU`zLe~*eAze}#J42}&F7l=Z(-sswNkjy zeGR-nk}R9~1`rtiEeiacjM(i+qAI(>*$4-0cuLl5G>E?!@qa9_g@%>}Fa7*iG(T7x zg-o_r!a(Rpq2i{N1EHUUXCU;mMD@a#THEae?OaTiI5WQC5~OVB;=*%(TLO1DU3Hmz zS7D|eGWP)vB+{On|3fY9)MC_K|&{MJhpFE53kXQ~s;fRF~(4pb#+ZJ=-v@Y=}+ zi+702JG2Tf)zH|bSXPgNFm2{z+c3jGh6XH+!ZXX@$`z77IaetT@|n=5G{`ouR!p+2 zq%LQrs;|`#(U@d;q2o@N*my%Q30DvS`)s)6t!U*%W0DaSrQqdB!0C>WEF&?=N`Ro{ zE2F?UC$2$ELM_p*s~63xmL?LDtOgk8*XqK>8&Ouj2I;uKt%)1_#*D}ta$-;ADBoR| z))qQ0jV?h;Mv*uglZ*xkO<4y8KJqQ*P&O5!HEK|$Cu_UFs0J~nEMxO-=>0MOxBqOE zlO2y3b~n0fj8yHB-81%0p*#Y+Dd_jHAVNcb19Qwch=#+)qrj=HjIq;}o{+b)`@k>j z3BSI@tKYYuo9^uH$e0ZPa~icj8?~Y6lD&3w(4dXTWP2`Z2_o8m`$21&)bjjO`*lt+VRPHlTy!wv~YGtbpb;2KQ|I{9w9%i~6q2 zocg^c?YaH-WBli-`hA1(^`kedBgyp2B;)mS51ZAArVTV{_sx57joz&6%BDdPqs;a& zgJWd}nN!)hw+GJMk;Ie!|1sH2f-<;!Clq*hR_0lE(|>X|cJOo-u%-belkO_w;HWcW zOe4^fn+DCu=SyArQl`aZW)#gXlCmqVP5l7qN_S?8X0m|05jeCsuXB37qb1-fn%x1$ zp)`?8rF%;G0AuCtDeM$tmx-}jg1to0M1uaU?WJ_7J>OL{dkeY`u5@YBz}6mPGF_#X zj`psM;g8KsZWMFK)rFXra`W; zMKe{b2a zBh%H2r>`ap+~lT#W=3nv^mH-P(qlSIJ77&CvZYe@renvJka`!#v}Z~)#^lY+vDs2* z$5@ji1&-X)tr@B@v#f@}-I;DSH3Jv7LU@OS59ZlocS~!&vlE^#nodCnmGV>>*w{sh zy@5CLOrH0HI?`P;d(atRY|EH#!WPeTnF4S6x8WPC(FvX1#-PpysFPYcGP5%srU+Og zIvY(b!jT#ZrX<3;Y`O!zFR~tz^==yE+t-mU7Gd;k(q*@w+%ytho;NLMO1=%f(PFDv z9ED=_H*-MNG?Wb}f-wvI9q@*kOK|VD%=Dg_W*#Lq4b5~;&v3}h>&O(dnM}#d2Yg}E zO8K4=zUHr*{DUZ{k3E((2eUG$i1E_Z)7dhY^UipHp;w2r^>lW(ghRM!4gnmq5es8` z*NnVRe5fTJJST0s*cQmmq&v-FqFt8VHlw{mz28#GV0(jm&EY^c^#d-o=D79S%n__E zm6_XK;_xr^6n!rqNzuKV`n2Y|X0*>V3nWr~j?q24z1UvL8*`MP%eHpp)3aJKo$2Y6lJd9e3-E{0RAX?b8M5b%DIab1K!@G-_o;I|yv%@SD zcxYyBcOC<|9W%vr;dzlcPViy$Ua@C-sl9}TS{EKKnFEUX9@CoPk}%7hAmYKC56(b7 zQP3f=9y2Ea+|;|LG$XaKIhpr$z9`P3Q>>)+F1M4-sU+(!mQ)e$I*s)qEqEt3Jso!W zPCQ+_{jt(?!;1E~<_wZ?%B82b%xP~cWzCs@H1=y6937;`{d26u`}CCV<9h-8IvoH#i%KcO?S7C#Y&MG8@yv=FkH?h zd;ggkESqWe=y|A5ZW^r7SN8S!f)3<>3YU`$$hnHYoXnXsXH54zd|g|YmXo&3?6Dv& zjx`sOYGl+~u_<>ENOGDAgSq6kl-+YNnHO(wGnepYFk0bu^Q8bTY#L#wd8Q+yWe9F8 zWn1(CKn%glK!Qo*`(KlxXf6kEYSVI>8SPy~e5*LN6wFulRGYa1Sj@ixCOs#FU1?#1 zsy=Sh$byT*GeapJ9{YKW|_O+(|_Q_eD z{V4iC`}Ju9avS5}adxmhJ{ppH0@-+WsQn4HrE_iq+U=LX_?TC@GKUUnJ# z_3_K*&d1L)WtYqCNv7p<3s{V>pEz3~cQ2_|w7;vp7S0Dp>dRz$nucK}VQDQP_JT|7 z=6xnAu+IBcJO_pu`pIl#tKvzt%tY3d(rRz-6INT-?`ac%0uArD{N Ogo*}g|@42^b>8t=!hxv5n~*zhiURv`sF}39flOt}*SM9j&F_ zDD|~;bei$a?QK(AOMO6@&*N`yX&KhqKDIO$%IEgV$8=7ZQkolui+hDFZC&N&jxnvn zJBO9Jn@wv=X`YlAjNGF%Z?>?hG+(xG_tN|*oXb-HYf1~CY(cNAqO`OiNb`E6cI&x? zP`t2L+|o9&t)+F?nCA9oQ(8EsqNTH3S_EbDdjb|`SgF)E#oX0By0j?D5*{|4U0tQc zQ0jYl3`^z7#X;%ofsgNQFSku-pAy-#1jvheWUG6}=8j@>8O|*&3A*nRc(k+>%KUnF zw2o^ox0aShac>W5YH68N$&}KvsglX1I+UdP)h?ao=2X904qSdefhSbE=~7>n}#v16HIqU+Zaq$eM;*! zt%r6TRO}qzI%vFU>FgXmXtz$Y&!BN_A=CbPd9M)-|YkLfas?xpmO4(WGU% z%BA%WJ*c!nSlV!OW3O`aI6AnrQDd*j(9*_@ebAjv+vx5xns1Y^v}wP_Ia|6Xkguz> z*@(toW7?a$x^Tbwh{icbH;>uJu<^GT(Ks91Y0D9%t%`%18|Se6TaPGhQ(U3ByK(mR zHq35=8)gMqG}D&0EzVkm&$jEAt}XgiJL$y7?3&pjI z>lQaCZqzu3Pqo32im-|Ms6(=U$P{QWI;vJ9^jT z@$DOQO=!k2+oN&L38uBH)l6(H?MW}d7uG4(9kV-k>{T54zc8~j0$$rYERBR48hgO# zU30x=x<{L~F?~v-;I!tjG@4H1Ji29PM_1W&bG0pv@v7X@3Y1z{K z>6%b%>zF(c>$u$ywRN<#PVQ4G!7U~%bvbT~wILj8BA3c+g6@8)zSYDN!43^QWD1O#8kY7=88bVn zrTu72*bhrar!{W>BO80RbdGOs>nI)2G%Gq(&{aAxV`}HK}~ajMK+ZV#v}zu zl}{@k?3q?Nq+hOWBfHu#la{*;rmaI^V}myW`C!Bl#5u~)M{YD>qUpmENz-R&_f+)Sp3aeVrPI*a zP7h0GxE4Dhzq3gZYt*N7CX6~OES(Jrbd8EJyb$d{3`#JUE}>L zWzcweSh~V#be(2yX^hxPS5ntiwRDxP&aA97cbsXSQ0!B>23oESOV>e*x@l!iy&i7A zJn93zV~NrYRCr^a!alCo-2}I@%U7^&hU0GuOSeKxk+|1d$ESj?v2CsGEhDYJZ-ZU8 zhow7Q?O_RLoIVwv(w(&At{h9;3{tu~y);X@Pw5_j-y4?hv*19vKZ{Z*-p*~w0~zO8 z3v4%i5I_%wrH5mnNAiH~CD5ahQ#Lo_6k&Fi9)nXJ4@*zDDn10KRH~?v{bY7`VbzcB zY?;!h^c2)T9hRPn)jwNR{c~wojK=KIT8_N^Jb+#ZOE1PiFXaI}&3gPh;}AC3$hLCp z_&%kVf%8gOdNsy*Ef41f;=EpD*Lx!@y%{sVmB;)FncvPR#h#$EV_cuoI{Mj)DwZ89ZVM`xjD=<{6MP0wr$Kd@WEPd*D z-^dxd6Iwf3u)vL+jBRkA(q}O0^RV4tYcD*V_%T(iB;B1{dp}lQPTlq+D?^Y6srq?rve(2Qd`jZ*|YOI*UWHh`wl+ zz)fhDq`G2#KtOt9Ddn@?pr!Q2(oDVHX_i3&s<|wZ(A41?^`n6J)-ASw785LFo*RSf?{!aColPLA z?zt&$LbDmwp?eaL-q>9EtT$*Wy|D#Tzk6U!!|&BZ0x5K;##% zdu|IVu(uQI_Ia%Ao>Tqq*kjRc!MBUTpLie=FDidkcJyFm&m$zFmLja*#xZM~x zBW5R+k{O{0_Hkxs%ciX^cDoF%%}|tuW*1!HlK;hF0~Ukm97qAS875WvG4}k?e$@;I z6B_V;a71Go0gdL`6-j7zlQDLL&=YVX{DK1y!#zo8cDMAVK4`(sWHfb`t;T@qf7DVffQD;Yk%VTfjIk|6PguX;6vT`Zy;z~g{f(y}rcH$8AzS4j!~`Nw zN}S(MuIuNHG~*-J{ycjwn|;8ZJQ6A5@WZsDI5gvhB^zTKc=};FMA-kxqC4+Mopuxt zQgjw8Go279P79cLha6^taBz-cO1KM+Q9f~+F>o^G4Vq))#3BzcOqckM8UnSZOj=#y z^ulyUWz$hfdtR}qYu||!%|BY zF3iEA*RWt37+`_qq4f~lgyv95S*_F~t(;wPT3`+n%i$i2*EBpRFh_`1L+O!V(6-_z zVI6I;nifGN6d2&t9Zz|h@kp$0)TlK^jY7q!HEMpI4VYsjlhx7JHS%;Z4Am37G^jZi zMAY^;B%wK8ob|b!&`cY%0dhM+QPbSs$D9B%ymF$TPKuxy;#kXJ>d7ihn`(i%vY!Ha z)C6n5s8fY>nnl7Mtq>3!O@KwOSESaQt|BxE=5{s=Cyg^CcxFW~9Hlp2ZJVpJA`$o#i}_GP^&)? z+$EW;jwM{f-7SVH6Tv+oqPF)U3C(@ttU3|U#_rKUG~n--$ODl`V!%JB!n8?+fB+ou z4>7fKE(iR>$cE+-3E2iFwg!BVH_jgw|6>*Y^Ogk zv}Kax{NGX8bUcH%<9u1yU0$ZB8|SYe6Pj09lpW_ZDK*Yt6KA^R2RFp%uTv&9&fh>8 zy1|=BLi3goY&W3x$~b>p^mi;>iGxMK7N7CfMKYYW?G zcCpN1S^gJJ@v5T$wx?9(x6ul&O1;4JKWd{n0S(vmMiQDnGRC$MJz@RAz35z`&t0K& zjl!d~qPC**sJ!YDHLu8%n(ELbF5J=^i+qyrqF6jNMVt5Mt660;A0%>CsrgZi6K%oC zN@s;4*acNybCF`e#|J5Vt;#F}eymYU{55J}!ElXQ1b3n7tGu0ElGfMZseC}2{H1D9 zvD>9;G17V`m#W31vgxR)U8+`f&AbFf-BPtAGC1UBQFf`KWvQiVX>n%9MU1`-Wl~Gk zvM59A*C7ebaze1JPwlq#8JjLI`U;jFz3YG%PEq@cA$GZ1Q9L!QSP2ZUg7dDrfLR#@ zFkuxWq3I`aYXX&86Yvz>^cQ_qkM61FqjR&GXw_BQz=|8))rB>{!}1zY3*f*RV3|Q; z;Dequ1h%FH(<`i7@@3qvx^l6tD|*w+tOYW>MaBLaxVEISCa>&z#5xohS`D=xRJg8y zBsA*^t3HTS(JbpdJQFwTiDiAuqFsSCg(H{`#LWgGWh`;e#Lb4H;|aLgNKhNcP!QfE zSGW*RE7#3UMaNTbvl;GiG_E{b8NypAlh#}asE5K^GPTqBF0FV;rlZSjg(B2@Yb2rB z23L#_Rf_PaG%AHh;6*&=HiN~pZOj9O+bL6B;r5_wZ_^;z9emjxtH@FfjUB>tXwypQ z-9uU@)wSUzG`=}qhZmDO%58Wxxvt!q=omXe09Dx;Noa=R%E3O<;^SVqiP&D!kn+o(8kwQ);3# z<)RbJ`Ui~xCzY|vDXI@F9cNNkJJ{C(`fV!s?nBrVSiNHues>Hn4AVnE(YtyvP1#9~AiSCwWh==zF}W zX4;Y3tl64lUWt5k9 zOc(DPXXh&ori}Z5#^^*e=o+BLGTkU?^sl}*Q6@OC@1j+-uy zqNv->9E}W4d0CX*&d|Qpc4oRbvjZ+hKbA77?aXl~Lr*y#NoY9X$n$0=F|K zihh!%H_e9jgc~rIR?M)QnUlp)!-iA902?9%b1Je>e;Sg|oGxLjo(ipcZe`98{Y;PU zDb`lzEYWHxKAQ~rPdwt63j3IIzy*EhBEcE1Fe|S+nSZGut)vjpJdVZlnO2@8T!3t7 zE|ie16>&BE8togYv1W6TC_$wEVo6?NC3VoDw^=S#L3RC?fgb7S0p{gGxx%7o2_vo@ z{z-jTit{SV86B)(lDb+2)%9HidZdpBDc1_+I*THG#P#)IR^i0L9p&|6zQJSm#*ucE zH;R_lKDZ(7&o_yI3)0O3yTyX(lUT!A%h*abw|BSJb&gH!A8rK~dM@?*%hhcX&T1Rr z#^&u57&-&+JHP}_+=(PKcL}mSh&0kj+oid`yjv{ySQa_US`_au?-eOyP`tmqPjqfo z?ibVpF%(+v!Cc`&K&|Yl4~fow$-}tA(W~<8q!4~onY89YKs^+GjHz96;+HJV<0wSU zpFk3tCvkO44i%^m#5>HV#Pf8_1C`GxQ(fh=pckKqxz9=Vd0+O0Dza2Vb6*slucp0( zyU_ew`KYchE0a}BJrsV0DZALKxCzZ`Vvl5BS0*b`GmOEw~4pY-a|3k;(hUd;PDd}O4q1??-$@rj z0cyH1lF%%ItLvo1uhB{SN?=h>Aaae@Nf!eZ*o%vGi9FWKTa-&$k)Dza2Vm#!o_JL$@}3(YFZdoNPVw!ZLoRfMUB9^am6@>H$?MexfGNJ6tCuFmI#w?22L zazn(kQ_O=V-dUNfwNBws&^6$8k?b&Ec6b$8s-dxsOznp`hkJ*zyP_Bd?}h}&R=C1o zed5z&!fH>2*8Ey0Y`Y6(4~wFeLVix3uwx{`w%)^^+Sy~Mya86mvAEnf13ZDcM= zA)pDY?kJ{-6SiiQpr)gd;G_#z*EH0UY?>DFv|6706SlD+a#W5JQ@S=4JBsAvZnF(H zp$WuZA4t3qP>~<9>?3j-jlMyZ+R4m~-gw;LT}AQ6P{em9Y@H;kN+2CJ<9+K~*+_!FYfK9k}qIOjed4;||IU?(tG1t-(a*Tvk?Il{DSF56VQL zvg8rjM3f|t$XIi_ViMEz5!qxEqJgI%3C&boT?5k$HSo+Hk?kvp{VEXdcuGfPp~|Zs zk?k+?q^4z)M`TTTXJq)Qg|ayS0y$@72ckGM2MJ9pnlnOYWCyFulk{O(l9YU6A z0Tcg>>`-CxjO;Mnh30VO>-~=#^D9`Ia7d=(F}ZM6kE2ZLcB>Ksgu1{al1DFXbcG&Z=Q^Zokh*QA;BlrO>LYUK#hXJP}3C$Ujwgyn8 zHGl_XXNrE7NB1=Afb4A1YG^(O4DS5tT)~}Z;dCCvkNcT_L$;FE)w&_9<$eRbRKkxXfJgaYA*B!5-z|a}OUkx@i;WbF`5~D!tgGeV0wXMiAq3gtQy=Bpg zXl;tmgl-TiV^Vx3bff4z6S_%IH^)$Dy<2jH3jwvV^==iNE9q^x3(f7yv*93ohcao+ zg@Ae}d?(ZNnb2J*M9uF;5}JE(b#p8gs2{{`_%8S0<~MYAE{zQ}(haaTA)S#2(2$txQ&yYAE}R=nQ0@ z#a(EgQ{FogdR_%t0O}&Z3rs6R>_ucl^OA(@5F@U2ZQ@Ai-zY{?ye$4#JbnU4fy}ES zz7`YF2Cp*{?+vOQ3B3U>Kai;`E>(5{JQ8v>dK1D5WZuF}Xx^qqtpCJh$9qTltV3ul z9r7+yKalwk3Q*Jckc8%aTwSLlzV%G*ki&@IpT6vWtH@Ff zjs1&hHk#>yRTc)%f&}MYxWeFcG-GB%Ia-EVZ5?WbG_wn84hy9TT+U90G(AO5*K}~h zhHhQyB?dOkoWkpE@sc4;pInqeKoeN!xtJzGnz>Pe>du1%AB@J;wGXu<+h;!U%x`(} zLz)FZ{y6=oGll|4UWIWULQ!j5Kxi7=JpjijYi*~N{f=2AWQ4QozUEYCC@(yV|&H1LW@LbDRCu7PQW8hBmn1H z^;nb*X=qw1q*-5_+0hcCZ$Oz;NV6fz&`UN#5}J*LV0RAGj$RUlG@FRNsinJkWOvMj z6+3K5vzb_G7_m7RU<9rVX?8bT;0^|Ci6k^z;p)06RayfW(rhjIHXhy6tdM4~Xf-r% z3kDa`Y$v$wEnMZ1dP6QoA)s~+v>lk*{T82Y?1*e=hDgYIjktDfWkQ;r#Jsb|>~$Q4 zG($zJQG;E?!0B_Cz=m6}O3X1OKcr~{AKHo*_|xmI63^<})OE+*DBy)ORp8l}@W$>) zLbHcJ>w`!q4YjSvkY-P@>}6TBB3hf`kY1PjjwtA)r>a z-e}Rel8(V$Xj+tK!$G)JnY89YKs^*5%QPL*j6)%6UPOWqA>-;gFBPaC#34-}o_%5- zsBBlJy2|mOE2Qa=Y^N_fp^7Zk(A*MJhBO8@I7btERMoOFS-n(4*>0xnWfO4|nn_}h zWG5?=m8BZWP7$3U%~ags6TixP4-ofLK^B0z2oN%@46*%@#ixEHWQQ1Wt!on@&4DOJ zQye7zgFSu%MJU~3ziku>mQ>{qe14OGV^K51&qM6eKeY%CVqxB4BvQBeD{Y=q0)X$Re*}m{O zRfMUB9zU09GMYILMexhNkc8%ZT%FGepB(5Hi08tX2TgpDGFfY#!iz!IfV)Jpm-@1o zRgt9{8hbg@Y&3HPied1TNJ4WJt}r+q&0tBOLTi4lK;~+pTw_r*ZOhNeK;~MJ)0G_D zu%%l~t`h^>rQ%vdFRP4Bme4Hci#tn|M#9kjrybw^4ztY|-avF`kL6z#s>M{ti9!)OgAGUu|#lvgFqi03L0E{0Gb^SsKd1~M;* zoC#$1$O~lfRoG?oA_Q^*nU_$E*Up5d70nr;K;~tY`+>|WD49VZ^D0@U1x)-v<~3n4 zka-<S&8G6ZwNJ8_G5bS<|+R;m*K;~o7Ke6;CB#c7# zz)V=N!v->+ilv4TpMe2JI0*AO?qI+dNJ8@^uCAL>r8R(o%vYj+?a@8W3S_%z;T^8Sf`3YH^(n-jAjktDfWdfOB#Qdwr>~$Ok zGQWvdqXxf=fz#(70{hc~RRWo*`GL%T!H2e@1^)El}rRp4g< z8@w?q5`4@RS59w{P8w=kk%7$YVwuCTXhpO(#eqyukuoO5flM#a8OY2jsNOLY7N0)3 z!Z<}kIa_Zo(Ycb&jXQkNq4I1v2+ylbS~I=|59Jh|k7+uPnIDCy`2t9Ah=;4|yi}lm z5C<{~iD%)M2Pzj)rn<_$pevABRI-ctvWr)dr5c*M1XBhwOX3Ef=M;NX)uolm>ZKaW zF2j_)Y+2mkD+|RQ$u6f%R+efgyS(TOWLCgkXjW9-d&z7i6=VUZivTM#tqieMkj3XS zC1i&fajk0;flPlCqbXJu|7spTfulfXbrA=|M6|&`X5zg;wLoSNxcoq-vbfX;WL%Bb zfUp9YHF1M;F>1sBAtpQC+RA4gLSyNWb(s2rOg#!v(*hEF{1R8!>4A-p{;p7!JM$2j-OMJWU{fz=(sG!e+`jS|#!Boci35?9wW z)RJtPX7P-+Jo$ml7!WxsTf~%YGG|9C`8Y?8#SPv`6MKCi@j^gF{z_XEIgLi&ph|6I zW*`&bCN%qqH-;j<3uM|!iYF^MPM>W2yDyoIC+5rtGP1G*GA@wm#C>Qc&>Bo+&SfR# zRY_xbZvz=BO9nDsC`kq~tT|m#W||IUx>1M*o`?jeYPh-vrWtDBnGIwn3t~zI!o?5@ zWTvXTY9O<($jLy4zgv|T$l$kq%4Rua2J|GlurgSszKdEJ&~bhejszG_-!C_7-@4S1DV64vg!CGBl|>V zxEt$7P}Bu7MKYv1cM7?&Jx_&7EXc8L{4Aly zt{q#MK<0cgU*Iu&9Y=x8g`(A{!9`-=^m(zsF0o)uE5eyuc22<0uv9*FIBL|yQKM4d zUx4pR{t*1xgWS2 zcQ_1Go;8Q?y~?CD7Xs>`@O@0v;n@8sgd-k6f=_Sa>Q)LWkR#)8>>=?y9P>csBg#}) z`6%cL#~zdHxo#EI^xWoCG@-`gPMDel;vH;XYfLEASCW=>)#RoVgWcw&_t!oqE*y|`p zQ@kPmH$8p=N8#98BEB6H(FX4@6Yp@6;h6W^IObjO`2ksFk*pDrxjOv^!V1XV!wp_< zqfYE&h{>+^f$~|G&|JFYL#8%7h`x`(e1sy@_G2WW`2<(j@ueAW|J*EH0UY?=kdvykP<56Tt>kt1^vF{Nu$v7;~fI8!c)o6syK z_WD5Lg@B6u9mC=xr_tyeRA~t^GbmdUH#k2NZwy6z7nChcQaokJasMbNTZWi3AC$?; zWg+8&vO3)3%hYHMCNt-<<&{?@%?iA?K^c`LgR&J-k_^gNbGl+Brs<$;WfY=;S3!c~ zIb2->(+oB6%m!us1+i)c!o@=h%2rc()u3#3k&|DJgKtmIi^=fYs%0|({5dh%Koo~& zkifL8IU5v{t)X&1CR-CFGl);L_IaR)1Ut#LL-G>#Zo4Drc zbraW8Tt@5sxU3)<8<(w1+5*YAY`v&#I(|*o#$_Yia9^LIE-u>unb2&=qHJ77^HOoy zM&is4m>7Ly%B145O;Co8vMCb$Scwqq#(~<=QKGnPbJ4f3^d`I~+yh>~0#z}?hGkod zqlOJzfdMu|2xeLKB*$p|UV5XFeoqeMWd+t@lkddx&{YkJ;4S% zyz}7AXfVJHW02rHP~7!ZxzSZ=btNurmDt!wj5`6}UbM+Lk&+Io{*6Zi)lE4w2GER06zC(HY=P5L79KLJdr= zFn(eK<*Y%M=-gYBaTl6ytYYe+@L^2Z z@ejuhe)mG`k?fJmWM!#_vPX%|2=8dz;j7M+ulMGh=_<)0P#F=9Wg5>p#~}w7ACCmz zWrnMBG2yL?6M^1|mj5L2pX~7yJ___s5%JWRh_*P5nRwS!J=?R~hxCpf7Sy_T5lwGSwtbqvj=V;*Fh?6nV}2;O-Z368mNb>5+d8ol;W2|VTr zMDFo=?c<;V`w6i=na7&#wQHHDtklzzdd5oS^xC!1Ypu#muSLO(KF;^7(4VvDwogB= zOxAgB$$CL_E?F;1_$6QX-&KUEhn|0#Y4V8T6%@fcuOh**8LrOrgtwk|UrzG6c;1M4 z(9~}#leN|~6Gs$Z zq69Vl3Q1_b#?>_qwIrM78}WQ=dGe1az5|h?^LsI+Yg4h~2l8>L{}DH#`AO{cfy4^| z75SUkpG8ii(Ko2lFJ$Hs#jm)*XFtUoLlNH{QT$F)JZ=5+BZ@zWIrB#pvhq*JxFd@H z;yyHg(Hcx>&SgEY#f@GZFthO99#K$P@`z$q5R*p~tT|mV8z^Yq#4p#I*-?lFo&yO^ z+i-OaOf%HLGkZkQOAvEbAl&hQjwpJoyy_7}ACV_DEsw?9i|~iFwvWv_rkJZZSJ})3 znVe&axlxSQ)&!`Hzq3Qf6!WUwKc<)uB{Mjtn4c`u0w(@3#R9_OF~x$o3(Z2x+wdn{ ziRkGujq^__7M6%TrC5Ztxss<8eWSAJ#krzWidHw`7p15>rC1CZd`^``*;5KympY|b zLY&z#6QeIlnbax8QYb@TSsDpGYAOUdIG}d)mFSdWS<&k(U7;CHDcF*j5-X72qE=$GM44zi3Ecz-Q-BYg9ihiQiP~IO5?$lsa z!L4TDD$kHt&&4PN)XqUSfNAB?&_HByh9)8FJL1}LmU)J}hM3p%n7!_!wuXz)> zUbCvm=nJ%{aul$k_%`zR;zz_At1zwH0?@~sfbRKtQz30;k+h%^+n>w8ocD-$bFjhU zEhN9CmCs|0ZFi4|x01xxRze!B|KbybZA41fpmKsRSahBsY%8ekVkoSZ+vf@w0%~RT z8${>QzXR^@BAxP4WIRNfv}PP?p`5}yF-@N!?2JM!=JRY4Yjx(G0qX=NT5hb(?^KtgsNAg*<7 z;^d$W#b}B^{QG$P1dd{`b`i(NMEJ3TnRqi({p6q%e0~g8Sqy8O9Jo47fUsh)5^iwP zMV;8P5R<#SF6FZ>p}BNPnQ1Zx>qZf3I}r)qV#C#SJZiAs$vrukEP*MWK;#}T2Ac{h zu=f?~etE3fN5r9(*o_;yr-{x1e~5$+ z^@R_sB1}E>`r%BI@z)V3f@h9If;Z4`bzUcYa=0HYo?~JjH1l+2ver6<$AYe5cbsI8 z_hnD0B1<(i_C%)H`0FGT!{C#Vgys}nVQ^0TMTOSlF(WM=$z z1#a-xn0R9-;=B0kDw5(U>z~J8R}*vQ<1blx4P;#WbuI2ga~-Y0WaeCUz4EH0xquHpsqdbEoG|vjbZXBo`9VH6Bo)i6f zOVodapYQ0CqpNjc2kJ;``41rsw=vo@QoO1JR<%U3~}zo{6S(rMq=?J;>cbsWF?BTL`F>6_{0Y zZY^fRU1(OUuv(DW99?U+=c`p5BIAMwl;^T6J@ zmC4%cRL%ps;=6ezJD)E*e-&A(p}7l)&H!&g+~G(~c^U`B3oDaVOg$7{gem)dU)+Rd zQL#s|iz$YECQ7gVQHrEl(P(SaPhK8@ZnHgT^A#~ zb#WrjTh8(?Fa8xge!@p_-ijiw6cgc+m6?e*P1WPPRlw)Rd6k8?Mx5tr)(^sp^ZMf^ zG^bye@);qaz-Wn2E(-Vl?b2X8*bo!ZV|HL>CVK6T;QQOX*41nXgw<+|gQb9&Zoaz2OxFJS2lt~2{T_{5@EF;02XhN_X18PSPkAjSeqEE8)ChRmA zB1BJkDyG;#W3sqv*f9kR(Ljq(%v2P?jD3-WW>T42XmF#VqUuw;hPiP~o%={uM)EfjU1|xDZe)U2uWu3=1yA9S-%BXP1NU#mb~L7Xs>` z@Fh&sVZo&+gexvX5}M0#b?X}y$eD3iaD{lTjCr8)DrKsxyc%?c1=mRST3`0MDza2V zbFXL0sNe?Ngyu%EM^(K^nXF!_q3q2}IX-T|4bIra9?9OOOjed^D0{o;++W>+JA7JG zdGE2$T`I@|P!|F2W?GpX?m-qG+mw)<9EfXOn+ON)Lou4-e(^ux@e?@OSUo7>LopF; z@Gvtov9WpteE!C&vO?Af2V9*Vg|IeOkKraXk5eZ$R>Wl2dqVlFOK2`#@+8yb#_A~) zp|(#W!MCvC>N*}ZSnuS91J6p}IZq&RkGHXU9#mkzAl4W2ShJ6PUa~U(mdwjmCik(A zRhQXR&BSA$SA_kl#kOPiHD$7na|8Z$(K+DXkno$n@LN@csfS*Fo2m8sF0JKm)6r$# zK@mLjE)txI;p)6j_~dYZPdx9(JZR<*l*wA_6n+T0hTTV!{n(fNq>3!n(AZCzW*_@} zhGH1}ITHMUC$2C!=dlkJTJvi?_W4pMUs)7Q-tu$uvCr2crz<(Qq06m?--v;2@~!Z` zvv|qJKHuk};Die0tnLp?6OVm~&wh%%K9D%R7>!i#vCm&3r_tyeRH+9Job=dd7Tn;Yptzz64vP5h zvCnKI#Z%Tlf9x|mHO~BFA6YpEWZYw)p12Q9FIwXah0EqtUX?Vxd2b*4P+1cy(Ie;@ zpwBUyJ}5~(_F>KGin*AkAN$OWLNxF^Nbs#{xVi?W8EW8}ee5%zAm*j|%SR#{aSubs<_EGWc*Qi?SgajZB4T%ZoER zf@1U)D3c1&Rzw+k&Pqsd{3isvlc09=oG3(FMf84_-ZU@TH`%V(%vLP2ky?K-*Dz;Q zFuMVy4J(Zsc5FcYw?C+77%X0J0TVB0{n8a3EZ44h^+ z64=HTtZ8Mm(T;ZP@vB|@&+(0(QrD%?h&ZlGALOGQ{$#v~K(bmVxsJN27=|`2H#1ty zX5fZvHb)YgEhJh$bE4>1tX3t++fo=?MHn{7V;#^?TdOc_v;|;8Z3DX3P=kfEtwqv` zO>BR%bb;A+;@sZjwEl_%vj&mUnk#|X4x%$K+fh(MVknrsQ?76!pjMi_v*_Ft48?dyX2h zlOZNM-el#o4xzDh$P}jjH)u{p0cyH05*)(e>N*|qt!HwBvQPs1djgSbyrAp=P=S4* zSP#l$#itK?*g4M}Y?-Ht`4G$8RH0+Wu?qf47DpB6xPp9~7q7$(&eg}Ah&l6Nn5?`JGA<0e3HPD7nbu(PaxS|?c~#Qf%6l7z zQCTt!yA37DFpM>)D{g0+4#Vz1AsYBjB%!$rSJ%KaLk&E$Vc6Y*xTgZ);vR)z_o}>V z7l4vx)ZkMwaC-erV4qvCrWN4Stu*Fl6noJKe+K?S2w9Z} zxE}hY7=|`2GeZ^TE3l#^zeW<8ZzNYg6LRQGtW72A`c?qnMF5GY>w6WZ&9wk*pC3T? z+UG|h{bZ4}Koi@a8yR)cpFfN97t7hS8Y+u#jETN%&wdq6zq&P6*Z;cy_|RF~ScbE8 z8*f~ZUw;)++R(ub2RXm~CI)*TkyK@V2MK=s14(H96koj#E|Prk8?CPR?Y|QE zD-z%<7o$cctmXpV1J6FQU*c_{=)qY)hX?ttq9^jng?dV;mlcYs8T029TknVs3Cxc@49ok7l6Gmu^0`2Vc5SZJFlKI)!0369;Gk0C z)@Z8ojdrp3eBzwn$KDHwl(wM~doL(DWAB9owQvlD3M`TzYA8EEbjIETafkQ!l=ouqHB^uVpe_Qe$+WTptc5Io;Xy*SZxPqJHW7QTgJLvA zz4!|rKY^pzdtDLNi-~B1^_hvcw$)c`%jp#U}A90|_faCM!I_|`MIvGC@oxWeF^*qaKi`L$y2W}%F>C|cU(=Va_XM&xuQ2R9t*R^b*g zuuWQpH`d}MWAAafDEJKsl(V`;ris|Q4JD{)fCOLThO28DYDqRtyLiT1p8VLm14NF* zPBEoxQ?X+L`8Y3@aD$JuioHINIKH!uR4?}K5;=`V-=IomGBft>#tpv8O}sG_@m=ga ziKKXf`scCtWMa;I>@6#&K*q)1Q*n=9Ri!nUyqwGSQ(l!cA@6PMO=Zd0dw-N9V{g`+ zt~h{cI`%#gg=pY|kc8%7TwMdx3^nk~#@^EeaYzNig}aKq4^?^9*!wV%C+X>iia z$2FH*^B#RJU0k|s4u?oi)O`es@e{1V(>mtNP}F^t%Dt$21_Afc;77pC#1FWS5ex(F z>A1shv?`zcxr)eqJ?o@VexQAv_-&wlJZVcO1ML%{vgyU8qdDgv zVu=m0&lXb+GtL1+G!a=4b1q6?#Cb^Y5nRbzBdFFI!QlFQ(J%1mo^A!#7m8M0x8Aib zUIwg-gmtlpS_m=0b{!L24PFZM9x<9LK!?Am*`MLA zlvvj0BVDJsiULEc!d?wBoOcb9&|E99`XJIp!>s@KGYi*=<$BAa#mL$c#|<}#lrbg# z)w>%-XWVd;pl*(#Fz?@zD_jVul{3_>qH__u4R@irU3s=Mgzr!$t+^0T4~6e!n%r32 zg(B4ZZY20TEUs>HBfKWJIBK|8Jom*sPl(NCHs&s`*0Oms-dxuFwJf( z9z`(>ehdjt@o?p^W&}ID*oNO3X&qDUH0U2xXw9#+v3No#Pg)eUrTm=SSUe?ix{`w% zj&WVI`J5ZOmw6;rx46+2!dABW@XxWOTv*y{s{7Xm8shuxbZr_tyeROu};b7S!~Zt!am z;*Ft*?=}|ilJtMDvG@-$XMSTLE8l~R+gQAhd%Q77Yp}6!F8felvG_s|UsfR8imr{tS1PZ%vG`i# znBr0w(^};wNEo zYwg` zKas)9hb+qOENEG3XYrRfvtuPj?}2FyorJIJxoVhMP=-D-D-!$~E3U4OP&@iaw6mC9 z^f@eDpM{45c@H{H8gi4 zraZ{q7&kaA6nj+FO_j;&r5eg^#*~9&bKKypQ0$THmda#hsfMy!iOz%Et#OAB{3`E# zx@E8mvH;XYfNhypW`^yM#n;tI$j%JJwXRJZF+#W_*g^kUyAq&VAkW5AMM&_npb+dLNbTww#WUfHOGLla(iN1rM#NCB*ka>~ z%fwd0kjudk8RB5f6)1xtS0cgNgF>)|P_;FL!Nt|0U*pj|?Fufg6|K7V%7Nu|!n)qW z@|sfH{2OL~Wo{G$2kuP*yV-*2V-fK-zpK>UY+76DY+X}3eRB&$;6xhZkMUcDl&!|; zuCLrifuVm#)9sLei|;^!4+RUqK8V!QeCuT%Yu+W6yDf{RWour%i@rysjCJv`=DnhG z7k!_g?vJ4`89tCJTnMO@GuVTob2@(rcldm;^6U)|engqH=0ZR{6n>Oxa*2HmMX2}V zNbo^lT-`iQcujrr9{Ne~JQedm;nT`gSNII*n!2Br>~p^C^HpT2hQ_|Y)V>Oo>?Gzz zP+;>*Nbu9HxN;8QXPA^n$8^DeHgfv6?fK>rcXdzQyrXx~Q(yT=Ej zq^nR-{vr7|UO&Q3Xg(HueIW5dKy-f)ej;)jjSfLQJ|(li(0+yjRO53b_@u8yV`Qq+ z_~NImt1Pr%O7JTym|1AQR(aKh_8XCtPXz6Rlef$+R9vWRzJ*B6GW#8h@s)SN%PzA& zsC?#^*&o5rV>=}NGW(NYbZmz^9NQ_Md?FZ`uSJ$d`HSqY;*ZYlNLwhm$o?LcO)oAK zEwUH7PW%T&-6H!ZGB~$mQFf92nILwEOvT=a{p&ArW_v`8-UIKsqE{r(?NEk}F)I?B z+u`c^H?^x*Xpx;=^f@eDA&&I`26@Gj=;%&NHO%M*hG>vk5HlxAU_@^uIK7j+U0|u! z8o>p2F45=q=$>wSdM8?S-IWD)USZAWVR_A{1$O=!V3`HPzyZ6Uz!tJ#db>1UU~LW4 z3+uvQh3ja9Kc*KELe~8AT>t1x0sG$T3^XhXPPlY2BzR9xxcGTiiWdT!YrV<^bqTR7 zX<0P=TC?H>bt#cDR>ceI(xP)gT}DvL#!%>#b-BX$tSrhoQ!OVtr|so&7n&86j~3Jw zl}T$Z1k^*}m6#?M)Rj?$dar^6zYvS7>(7KorST-k{q#|P@vIv2z}nT6sjhH!&^1L5 zknBKTc2E^rs-dxKFtuw-)a}p30~L3mE)Yp3-Q>Z8f$c|1#}$&)LQ_xpuC%0 zKno(Lt2Vgd0@t_J6$4vhJ>jiy@sbPZ2DvEsFaKzCGm)dh5j$dj5@t(?h4k?M}k9mVEy zxw#{6C0(+(WZCQl*_@ShXB6W*`vja_Nq15C%&(-wz>k%biNBH#7YtX@M%;yFSLN%Q zmZ(t=EvdB5Us89Ipj}e=X^rBN$t897sBC(1$!JNv%602KDC(BfJ(0nWT(Bs+q|(OJ zk~%`1**+4Z?@gK1k~$J)=qjU--~+ruu&WuhtDk5|9WDA8OV@V{+F>6zDQ4=5Np@{* z5qAxHTEPH&_?~?V&5Q*JW{pFFAIcDrHH(H=v$)8%i5_@#&j>BD`-oQEh{__{F0An$ zme;UaWIJYnWje*cK|MiWB@32(`V+gXN*rq-1aHzDe+K9hR<MWVIi|bZ*4{O+qqC*8tB+|N z+iF@n#OzbC`q<_k?V-$J?1BM9TOl-p(8;I=3@N z3F_z=3iUrGSGW*RE2}(RbS|RD;tn4_RzBL!9Is4Tb0MG}3ZK9?jjpww`Ii9Bw*cDC$h*ny%mpH+t2VgdO4rLT6a!o0BH>+Z@sit_OL9>P z0Zm{fFJ+q8&Rm8PRPu5pp}7KA*C5oAY>+F(bCu=swli0wgxi^GL`henqWoI&aiX{m zH=(&+?Dc`f3jxvn$?OJ^(`a-E>Tx5P{q4+6C_puCMuKaor zQ%G>iC_VA3(-S4AX)h%BPC$vjQ}w0xI%H-uxn`(dZjgX#q0xo#6#>gP+w9Zwy6z_s;ObB*ib;Xdj?&I1Jim?a|}N zAi#Acn(k#Jy`_3?xCEpod5+%uZhFNpEVkxHScZQcnAsToYBzR>HS2y-(h8lQg z-x;nG#Bvn~_h?=33@@+ps#}c}M4r^N61tvyMBdWYg#(i@t;0L>4owy;E?71zLM&&m zu@Z{$9f87BcXg)dDgP=e_x2j5A4+EMsJ}m1rUgv=4acg&;)Y{2+~Ms$DR7fbJ1$(-vSKoec~+zx0Qvf zyidG!E(T6CQO*Il4b#e7gM*O`&9)MBRbbng)F zA|+pa zQ6{aq5Ks?=TbZWcAs&lDw8%IlIF!WIEfZ8A2gF;nHt_^84^-}>Om&s*pz9st@sjQE zWjm|LQVq?Wz?AP0mvDm*E{i>?YL_xuy;MWlGE)wSZrtFL%3_aXCn=Mar5egk7M<@9 zPr+SirYi5fL%gpFvH;XYfc=%!RPI2g38)hWjn)@L|3Q7Agp(Y564Ytj-XC#Vu;DEcck)J zm(X0g#Hi$L>=4ce5w#OjBFYe;%IvzDx@8rHie5?eH^8_OIc<&G&4=S)v5bKF~ ztlm4sCt2o`#e9lo)=qh%`-q@b@K4?$K2@NnSx`GlPgf@EDmTQ>5S>H(ObMUm3!hy@ zn0n~vbC@P$uyauaUz~>oFAU=9{7m@d06$+m7sNbh*b9}(TI&>E1iA*=#ge_mm%X%# zEY;B1%a{&TK;d3oa*LF?95h&c1rq$kF0QaTmlJ)Is%=GTMPpY9>S_z6DPA5=Mq}5A zoUZQRhCAGfcdZ!MI@byBdW)Al)Vv`Vr4Y~rR{Tb$iD>L5l%TpdBf)7PuC9@&CD}-~ zisv@V;~i?=juH;VJ48uWp`!dw@^Nas3pY5o6MKCi@j^g!e+zJr$Z0e>1ogO=%>JR~ zeJDUR?niAC%xjR*-Gvw)cuO9#(nPNaGQaCpE2}yF(vl-?PjM zIOZwNQ#Ox6Iw#JfU(w;CK=xGYB}IBFnUZi63x0Ei48c&)^Q< z_@})6sLAJD!uUjXRzvZJuP@@j_HKy*N)4cRc8N_=^;EamP!@;1xp_ zW#bOonTk7J7H77*#OSY3CKY$QiZb+?*N}wfbs^YwlG@c}bk_NX=x$a|u{@6kOo6oq^s zS`9Nk1cQr0J`&u=7OoP7e3FY%2&kRI@l&RieaC0W;?u$svPKivj=xM4@`aec^q9Ra zr6}Yp(Q4G-YcX(U`9@&hTCk=y{U{_o(btGZXp%n_eJ8xE0r$9``@I;3Y66I(k(p3v zet;la`9~!9@m-eT(^atmY{}n1_geCIA^l;Iv~&^M zw&dyVa~XQ}`lmSm>v38y#?i@NBBeD~qLUtYjkuqF)^`@%;b%^iXZOL=Y6VVAV z*>6`@KI;;iOP35_nv6~cq6oDegd{X;;OaUaHCXTDMki}ZU@cD|a*r3CtPLu#*AZ)d z9;+9f6fE<)VqVWOC!-Uq;GaY%>kD)P3u=e>hRS4J<%al1qH~CEEa6Rj;Z3UuQxE;T z8PjBRvN?+2i!G3ZW=mY1p9!BF;9H4j>zD@(yNxngYn{TuplhIQE7|RQ+3l;yQVor5 zU|Jds-eZI@t>)9Eu}E zNmrqwd~fn`Y8;6hoQH|MK9D$$!AO-)iZ>9gS>!Yt9fEp{CbJ)%j6nga(SiiO%^}ek znd(pzRi;{WGFF1)tRUOS#R7^>iYl)fowSLZeC496wY-Bq?wA*q^epx)n*dTdQOQ0i z#s`80sY%;eqNrrN%Dt#$1_4P2_z{pW@dJ`h!7w11fVPDiE10&TP+!(Wg)* z6^Kkl89K23Z{GNyr*aTsyQffyc38KF(wIx{v~o<3+1cgA>HSN#jI;on*lj zc;vt8p>I%$em#u8Ox0Gd!w*u88r80^RG~@!EOWB(vIacjdg>`+uz|pcn?PFLFOhP}2vH;P*gqbxlJp z$)Pl}vIqi;~9 zr^w9rR-VQUej8Z4F%FtUGWOj^m{9>q7V)I8WNla;_4chX82PNH)}Ru zbl&ZD#+c5ouDre4V#USE<{e1n?A6{yG0qMJ zr`6C|p}pFBD);tk=6#gRV8iwSS*8U{{0-ZO!s3SQBi!Nh%gWa`E#e)B+bYyGuUNoanRxHW-FtqI(x{U-YF9^F%|ecB(Q)lmH>8Qezgzry>=;%TGS z%xSC#K6aFSnXnL0JqO$@pu>C|8TM#~)w3dtQ#}b;tBGsJl-;N~eY1;m4$CR|(bU&d z1!ixHw(rFfi1e~=H5_~D4#Or5X9KD*At?ULD5l-I-$LmPvDoh)10oYv@1KsN` ziwkK9i=^fwwrxJU8;pjAJZ6>z5%pL~QcGJYjU16Pb}l2nWj(%8qv&(kS*OD4b}k3H z*Ugp}(h3$yb`smS)4j~IqBvLbIBomJyVjLON^7p{T2~RByVib!>K{YF>{WAx3jwv# zy{n1N9n$K!!>`@F1q?efywkOSg<>)PU3 zC+305dS$AsEP$@#@^vM-xC_lz%G>jD&6!)PAPYcU1lWdYWzHOoEZ*&tkexG$ zYkiwIFW(NuXp8N|-{A2RI65!iLBt(nA{t=`Gx4Uc`rAA^fzLlLuWTD?oR_;g?F?a^ zmk-4ae$JOVv9%*6``$3+vo4{zbjfh0$@B6?6rr}eBEj$Z;_7-HHCXTDo|p53vN%)p z1S0o%=jD5V3hX__x>p{ncV0fiGVd+sk(N1mUTzg+&dc>MXOzU6t(YB%qm{`z!*$Lv zpsRDXNVe6N9a}|~YUs#uqO)@rafjdhRo-?^EwF(KvdXE80Q)etos$b}JF@uAUkTaH zN!*;y*@0s4cZz?4$4}s>bCyIj|F5{~0F$dK+X*4brfeDn2nn!(1QUVX1lR=vNDToO z0s#hAFivK7?`CE)JF}jdNdZT}P=z49h#*Z+P>~`CNEHDE6i|9EA{~+5|Mz{*y?1Vz z*~F;NpC`|pd%k|YQ|^7w-r_ScFp8|K!r&}H?%y7qUYp8L*5F)>1MKcQ{7!yPf#VUOg~gUk!5(>WCcjb#Yrge;4OZ=Jkz|*v-j$clO=PCFN2OfRh9Y< zPXk{Q?R4p$5!5}ijxOCW*t1y1w@uCl83CVz0x$E!F9NQyZ9<1O{QkC0&XtuPTPwQk zP@covCg+JAZRDKxhrH{>^CiGO`HAdZVD0I`$$#AE!kSj_y2O-woNVu1ueY< z1-8@h>vaviguCWa$y{b-YHyqT3{1|&pGzp(nra-EQ;sL@D{z1}_emVzz$F>q{bdpO zYtAplj#^`G(4=2cnA;{-;sASWlJ!l|zPD|16`cSM_n9n`PpbstIqyLfa;{ie7iy5>G)Y>|kke+~#{z9w9 z*2x_pW0OxNbvpAR(bmbGq6fE5{s78KwodM%2tN9YBDi&Ow`_6iO}TV9s&*H<*z94RIe=9D+YSUc)>*g-|hLZ_>Wk={zm1e0W-K7jNLzZ zRC4`9@)!i%q3hc*kAsL%o>%LKWZom68pbcI|wN{jKX|3I8J?92i2{ z(s)I@ep>LV1h}NWCS$K#V;!xlx}}jR6)_XtJq`QV55o$s!*9rDJcviU(fXzY=5@?i z4X5TUC?j!iqrmroWvO+wEMfdH2i2X9cVzNkuF231ckhZAZIU&>UVRVzK(D?pOCMNE zI+fFQa254-5I&UTM*&HjO@9aBW3i&1t2+pvh|e8_Pi5*e-xLPp=QWk_#y`**_7~#w zV&O|1VgGN8x9&rEpej+%ZCU!E@*3c~b8#25u-uEcLln&*5YanpqNtd`vS5cb9Vh|* z4#E)04E1H;vO$&lE{B1y9faZ19TC(WSx1*{7;Ym=ZXk@p0UjNeIAep~F{;G<(hYUT zvgD*0hXXt-EOA$NZB^pBbVJ?o;uE8-gClI3sUEoDZaop=2Iz|hCa|oo80({2F%zX^ zQ%k!xwV@4!Ng$&uHjw;=0eKpBG1^9AHu+5CVlpfKVNZ zpx~w_fYG)97q*)v+EPn2fYD}H;h7TN(h7$$nspGvXhdc!!Dw5_=+@S#9lEWm#8c%> z@iy@}#kZ02wn63X>L}9>^E``X7^7_u5^}Kv3VhWUzh0hcK0Lv{CYhal8FcKGx9 z9PR?XCfcsj-7ToQdmUZ6VX(7V#xdF+AS2*8D6sE_UtSc&|FlhqHvIlD+Fr8qb!$Zn zyYd{yXzgN08#$-_3Ge*3w*=TH`^es0YcGt^_N{59Ez1zt-2GUFFxos&(9-=;U=I$z zUf0k|xN8oSOv1|4#%KqD$+>v2grcpf#zAd$**9=dF^5RJH7oVDEFA@}4GtAMYK^%; zlfFq|Vzl`VUtkx){c!=+N7pl{oR|P2C>^x z8L-%G8F>w1>~@$-Taj*XvD=H@YH&DJJ?!=!R4S%IQXIQ6)(Cd{t|a60$+!MJ>O`>H z5ujll9f<p$OBRC|*CItbl-r=}wZlA6j$5biG^xPp)YL zul)m^ll2sq_6n^RL7$3h#hfN38#L|O`5D7>r%U*ZfN)@F3Dcb^UOz23O9H$+JzK`k zvBo-P)q+>f(vnGal`{E-O?~c!ZR){{ZR*vOZ2~u6?7<7J%#UCOeairYEBLvx9uMak zZ#@5)3iJL`@8`h^a(O-qyo*piTeEIRY^EIpeC5>z61mWd=$vdr_94_oV#Ol%UwL)0 z_=HfG$kb1LQ|S9kYbv*8>6LwdnfN@H{|rai(o~(@4&}>LiF(F2g+ZtC6)dBFg#87G zX!$Qu;1z@T^;UU0&?xdD)RmI?wJ!sgSE*9p<<;N|LR}->YlFJKsiR9b4EH*ggizPx z0QU(>+->R&s>J=$4Rvp1$uW8p4zR;0aaZ?dRpPpIL)}}%Cxp5cM-_9M>J~z2g5EAd z+yH&iz#S~B6ZH3}R?MAJvJ;ecZE8ah>JK2JEAEo~-2r(Tb|KU~V*b%*q7VMWihp$y zhfwzHxV5<#azO}HJ)iXhp}aQT2W3I1`*DE#0O=FgAhgM$_ZQXUDPg!w$pb9yrM(x< zgCL=`523*AdieDQ9zEFX)PzuflfuIR1vfnb2=xfKu>Gh+AFCxw2xZqG^SBj$Lc&j4 zVL>RD{}f1AnXH%9!BJ1k@-x=5ovP2O63>@6&z}>Y^Za=!zYtV@v5qqRFxfA$4CAQ3 zgM@^my#KPC%~B!R0hn_ zeYUd}xL3yu%s?c<= z4Kg(>Y>M_hFg2Vkf4N$HFg1cUR~<|#%8}6Vz*HlS@z5=!!9wPxY_#f1nHj@l3#RBS z45r3{5(ZOjIa4u?WfV-U1tL0lZ4`L?7QbExGYoa`s)DI?WMbW_2@kdiOsyw+T`)C4 z>=>BZzfel898674PcE7DVW9??nh0{mOpmHQ1D@9+>(H zD)@#7NpUd6SR-I+x+J5sb56T&{j1c8fT_(u!#LU;1#ZEU1$#|F?-)lem}(Zk#qvGi z6Hf^i&uU;6OwEu^KT*wu0HSiiRNSW75&{TuD-`(7uguvH8I%o?V5(L8wg5j6ion!1 z;`I~Cwh-{Z)OIpA%bKf#sqJgpXv@+&C+iL@tJi8fqKX&zNy!FHyLNuYz|>9>-Z>x~ z7+L~TyNK6M3wD(Nm*CxGYP~fX53ZOOX#>WKM(LtEiE|I;hh|bnFejjG-BUUVY zA7;%JpD=4*ncB}cg%jhvn#yfidgZ9tUwoeB55N&VLaaIm1e6o1L_Oo7V9=?25X&gc zIv7N>oG)&{4TSjh)_*$C`0`=aA(A=Nmx0S~s#4$OeDDRcz9rpcP%cB>NiOE=VYSaS6C;Gkj_O5D{=s}k3x8|r4nC(O#?2ruVTJpi+EBE${Q z7Y+2XtWMoLs`!eql}#(P%+Es6IUm+$)R_c>hY8?T&Co3mSLFn9gxu43JSc|55L~P zqX(OvnlS5oQaB=@;HD=4vyKE8w!bgY<+VfuFzYBQe6)m*vBCkEg%!#=SRI6Qtc)IK zjoMjyyejcjc~krc;&Y0hAmtN-$}8$9(+~4}63Z~c`XNZj#mOit<`n#Td8YaB1V2?W zr};AI*wa;sN9#E}1AI-iGo^c0Q1|RQx^%-}&tVxySU&<80iTPaVt$NY1ROcg=ACgakO2GSLfN~>+6#lLi)&hG%Q6Hu_Y#&N zaP?DA(9%m$RLo`g^}2>$!d>$-$^6{P)CO0VgUPvgg@mH5smAdO%5iP{B@VE)Ch^v+ z)Z4Oj6g(SWDR$HvbAu-Rn!*HESK**yu9mECiuOHlbq!hmBDMP9>RQ@db#SF9e*+y4 zTwRCbin*TAVEOV=_FL7}NOJ>^Ex4kyFu1xAlrXqr%bALsSVqCs??6Nc-;APSZo#kD z!3;wkysF^pR++f1YQlpt0#~<-UKd>5A$It?r4C-?m#g^{=G64mlKDMUYM`k*LB_{| zWl!faFASlnyF?G7sk=d037WcxBFnQZf@tcGvPCrYCmdDGy{d=55$?9Zy^oNw1>w_u z(y;L9e)6V<;nSa8+KTj47e2k~&G)}h)q_tDpi(gpk`#we3@!qn9+G5y#`xC%N}ULN z`Wt8%DG#Hlm`7y6UMtW$Mv4oc9u@yF%hyTD<^bzqH4=-L9+yx*VLSl=cRjL3%#)xX zh^J6g%+u1hLC~!Yf&l3m@t+Ow1HJ{2o)fPh-_Jw914u8(+>6#+^$x<9YT9Va(mN;I z-&xwLEZ#x*GOE}?l#&gacI_OC0i;(X{AxfrFn9!zUK6jM7Q8M2E~9VA*qhc^$5sGH zyQQ73Ma3rk`KYOgKLB@?nv~#7X<76=efF71d;cJV3a-3w$znW&x4cpMwgl#NH2>Q! z%|D@vq`iXzyO^@mx*B#c?AZG1y@T({;CrsY(7l82ix_Q=HNgJ-0Q^9Ieke;HSxY)` z({^yp^zI$}SdyOvByA>rME0pzQP0(T2R{>^i0pHj`ocGbv+0*LmD{rP%CHBFkc0kjC65u1U2FVQb zW#DqSD)n8C0AGk~q;wmDx})mo(hb`>nk5n07#vj0Sc$t$9j8j%FWpdgEtZ@vYvTYr zjS_ct*HI;|OE=VAS9~I}^>BnY{izdp_Jhd0Hcf@H5ZR_U zzzYKD6PGl!$)Pt*^>|7cE>kj{r9}!}I9~+`t=$X-UiODy?`nk}Y<6lQvMr?098hr6 z6F_7w;KKF{iO#Gg8n}0GODnvUgtxZBfqMr{D@a&+te4e+Wo@#&jkRp2>b9!H^X1L+ z?ZoFipC#q(gUUP9QKlazdquVW%srIIN-O_`piQaV#?TC5kj+jAK<_x6GuTJUug z71J)I)|Dxt*BDXtgt51@_i?pDCycow#@k2(jB{U>)k(b{s@Oo2lAYAFtxUQX*@2Pb zzUn0W=->Xba6rI1UOI*lD&hiy)ahnsA;7w%MjSMZ?Ftu z#X~?rwhu*tZ8!XSCJ7oBhXvwA8&P$iq8u0NP8?wC zP2#OtskdcmKX{?iEq2rzQ-YQ_6t+X(i=qc4G-V+Qd@DoBzHK^0YizgGc_B?kidn13 zO9Kyt2n#I|y)G8Yi51I`OWSg23*02W#a z4Ei?Y0fSfsVUUp-!k{9KDyF1*YX>eM{F@Hl@O48Tg9?J6vg9oYT1?)QFbG=W(pIFW zxFF~gZy+zFst1CWp@MBblHwqUp+!K@;gXDx3E%p6s1pG}70@s+zKa51?3D#Olj&Wf zLJw0NA^wq;uk(V<02Y^OBo+jHUqbzau^a;KM6*WBQJ^4*qfu1MG19j|(5(%EAm~`} zj|=bvz6FAg7q7nW>USD{AX_H{Yz4YeaOA|5*fJ|5z$tr@jQ!9W>)5@D4X}*cPiaR% z2$uFG8LaU6rXoIFnrm|UikVy?-!yH(f*H*-X3UtmV8L{AG7KWY3^h3SPm!N^BR}v) z(Ww%c*RkDy5{NksR?sP@qo|lOWU}=?Gl{k^Q`IxknX-MBYnz|Zsy3f%=Go#zTWYOv zp*shBcO==YnID0IpwC5tjZCTAkwjN^g*)3mcy7;P(;jh&NIk&w6Ukg) zWdx0EulRuHLb0NuRsqjN;uG*(EK`^GrqIrx)>Otz0zqdxFBPBXx65#ZmjtTLhC%t~ zszg2GC4rz*`Er)w3!y7OLc@Q70xt=~uXkdjd1c9mJHL|5mA(ud{#up#4zB`VXR@oM zdreUH+B&*)!(e~Ivi@}trp;kEZJ6sIh6Y@Z0yhKVmn&qwizinJeae7r^ZMJrzCl)R zv{u#E>WA<($xUKMlQ5_KV{a1vP6F(+n`Q47YcG6Fa%)X1czGY_Ovi03L)Rp?gMyad zfdbDLZ*cOVO8 z#lF(`Ua_Orm=d()J_?7gN$v*;P5Cnl+%za<-!>hhHEK|;ml`J!)B{p{&?H%b^Ea4A!X8F}4NC=M7dK`? z*-9@!ULF-V=kNW6Em_}+|LV<^?6^!j8 zWMnGZOPO4;IbY~@iowP?6`8FEP6KV;w)YoOyW4DQ7#+~m=; zV^iK)(sbaS`_G=;>~11VYnr)v(+vD?n!f#TN_Ezjf(QjEC9$rWV&HZ)>k0R1?z7>d@siugE)UQ?Vkv%b&3fnM5Qr}Vu4=f;>f5CwYZO%xULmIAju#FVRtaMDku zK}(GAA4zbGc^mAxiN>Bnp_DI_oTPDjisqlP@(z9z4It!Gy-v~mOT>3c98+A@+gZpZ zJ*}d759ImgeKN)7pGGw$GhnR& z1KI~B8iTh5;23r_OSXzkJ7Mj6Q8$xCS9>3wk zAVo72)oImffoDSUB`4oK{Ge2>j0s{Iz%Q6#_{Cl;WfSB4taYZk7NM1kie>~jh;uFY zE12$Nx6=n3PQD9o$u=Xwo0}MEdb*OGsiKoCo1AF`Eio}&D)r53X(<7%7n?Iqsi(PM z7Ph2Iy}1@MiW0;4(27GhX0-J%s?X_TQyrwZ3&zLD_$dC_p)c80=(Ufdj}^7CRG>>Q z#&NVb7(HW_nYDP_n8STrWpoAF?wozUB7)p_qpM9I|01kvzED=`1fa8_-f>jMLlcaL6pfU1({?DVYsH zKR&TRpKFZptBa;Y8#nhY9xb#!;Rw=d}r;iB0Xbj(Jq zrI~zB!4=-b3XfWnGI_QIcAZqOnIhTo?6#gvPQ9NjIXELCy=E$yi3aetm^x$YZnG(? zW1Xd$5{G}OTy(Se6`CHL7}8b9_hc5DX)>uk$LL<1!Sja&W2TEbzAINqElN7QsZ1`J z>h3m}Zpipo!8|Up0Y*u$zZ_JDQL@;_#BK(m;}e6N{9?1YjM;|w6`gW7TG^X3TZlZy zS&C<1tzrbP``FOLZbHH;LOw zcNkWhK17jOYPO{qr(CKtxg^tFN}KIKX>Ul33J+2ah!z}mJg z=|Zp5(rda4h0d0P3uaNv!c3_J_8g}DBP-;>* zTahWZD@3xI3ZuB>CadY$jmm3ey3Ou97==~@yLmQ<$0sJ*Y3}44Ekj6SDV@|a0T_aN zKm?P<&A%o?(aZsHeqtTXj7+}h7~cGi`O2Q^HhY4L`8UF(miV;2EUi&l@mKM$(|EZv zF+O_UvZs-DDh)^s%5)da-Z-w9eegRiJ;Z)?q6Is7L(|8k8|)LE!?NS?E&BBE?Cm2_ zjL41~iehATId-eljrL1Q6oLhe#?8U?1y;VKD~DK z9{jm4JwE#(wiwduWX~aS-R$pab3OYeJc#0kRQx7}aK<2&2cUv`Qt?~vZ2muk CI;wC0 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Vector4.doctree b/docs/_old/_build/doctrees/api/core/Vector4.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4a453496fb0cc7e28e5176812e116c4ce4353ddd GIT binary patch literal 67517 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/Vertex.doctree b/docs/_old/_build/doctrees/api/core/Vertex.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1485502f1932f08144713b66005ef5d0cc5e98b9 GIT binary patch literal 4218 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/core/index.doctree b/docs/_old/_build/doctrees/api/core/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f4fc26de4d4760475f65d0504d1acee07f3d7da7 GIT binary patch literal 3267 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 LB(jLVadY;6{)`W# literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/extras/core/Path.doctree b/docs/_old/_build/doctrees/api/extras/core/Path.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0d6beb35383a609f27e80942ceaad18bfab21c13 GIT binary patch literal 4257 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/extras/index.doctree b/docs/_old/_build/doctrees/api/extras/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5c2f99c3e3d0e6f5cb0745559141ed0bac7a49a6 GIT binary patch literal 2968 zcmbVO`Fk8k5p`s*q+RQ@V`H!#uLS`a;@toNgu)fT;Sg-VxDs;=L+?!Q_C#}4caIKW zAPxi~?)$#)`-Z=d*E6%Sw1MyAL!W-oYP+jmy?XVkpPC86EGTRgn_ilQ(sbO%M5eaG z_guTfGbNu~r*w!_*BWQ+p{N5oRE7~3&XPmL#w738XH-J$x=U*Bg1ng&(l&a zw2^)yjS*wqZF}6APG|OwmC58xhfgEvLdlCrs>QC!3LQvZq7yWWV1UKT&xs%dm$$MnRSKpYFW+DY;*tY^c^j8U8GTfiaUJo?G4n^S6L$ai4L=D*nc9^+x>B5`&MZw zdrz7^Xfb_}NBz3)ew2oCucwXWbI;u2^CdrTNOM+<9aDUP=1h%>pHCfOt&WC;1p_ZA z`Qkdwhehtr8NTGvTo4Om@b_hp=7%EK){ejXJUSVLhOcmck}$u9+ARZDNwEqxidTUBS( zd3AwW)lq&x0r~ZHb;(ngJ$0X_u6SzAD-;qdq*F-Jn@(~Is5{(08u>v`_41NmfrQFs zxmFBC_1k1yI<5wOrAzyeOG~X-?#OuSq{|F)n$7|v@T_??4_l|`lv63SZrr^2*iC+w z1K64XeD(S?LMTd%wa8V6Ujr&ON`7sv9c0~nZn4X1!4>+j>fiPum>XJWx*Mh4HJb$% zGFj_}k#=q0k(-?~>k2)tCdqVjsguZB89v+{#vE47IIDn^Ijgt8tf`OU7wSAeo#CF zH#=SY1W0^W%Z~21VDk2oc+=zpllNAd&$TpC??}E;bKi)-wZCEHQ84m9MCZ4mqPLg) zj!8w2)DU>`sxE7e~{WiWUB%Uf5>CciIWy4l~%+2 zVH9?VaAJ&xeUCrlVC9)ci&+e4J_?(nhbVgSC>Fzk$003FlGOlY$s<~Ub5%0+!Pi(? z!()#X%^PWLl#UHYN9JUtD@}%-$3q-!_~8##u~2rbBFj zT*4yLAcD1}16t6d07tP73LSGs7nQa7X1{N<467%ScGS!CxUXyy_c^CF7zm^b&5Wo^ zxy)S+5`qX2P!DLyz*TcU$P%}$3>!2O+CBouQVZYceJ*GbQ#UTKgm6BTyhAf^#$9TM z0~1hqmrEXMrF0jmY+JH%UNOb z!v43Ici@L$Be485Ai;vtBJuZ}!ueBRZ#gWI+&|Qm;ZK7rtcxfeWzDf?9Lc*vrw%Y; zNs;hp26WExK8oV1Yd#h=@LI{Ag)7MX`uz_+6!NpQD)%BxDP&!khMNO$GYdZ(MPvS4 z)2qPxJCTWOrup-T9K@N}_GKcX*cTyIRkZ}a@GM)=YUv~8EX+tE#hxeyE=K@fQ0YRvL8l93_)eX%XbIV#stG& zN6{XC560BCV(9Nip;i3-Ej*u&>xh3qExPq6QvZUtSUZqzCR3#A)TA{?s~8MaqC3=BKuRxe^yu3s)4GG wK6~qJ@t2bSsxH9Qu}S|{Jt6+%d!?ZE#6J!H-Q$1Itdjv&);~-BS267U8>~7&ApigX literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/lights/AmbientLight.doctree b/docs/_old/_build/doctrees/api/lights/AmbientLight.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d4028bd7ee72e120ee4f0c192a49d382aa2cb137 GIT binary patch literal 11298 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/lights/Light.doctree b/docs/_old/_build/doctrees/api/lights/Light.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e7f9be8b18352edea4d32afef82ea0f820faa903 GIT binary patch literal 8638 zcmcIq37i~dm7h#9S7&B28Iq6zLRvZO0cRQ{YKWpn5XHdYLBWW&o$BuD{;E@5)!(bC zWTF-l6=77o#S6s?ZxQ5DQSrumSKZa!b#>jtRrYZ2!`*dv|L=WOJv}|0c>E0ES6%hK z_r34`j_-Kin`;NFwV)bDt{2YxLCpzs{MmB+D5uxW9?^q|USF`re7ogDhuco5Hzazf zu()wxVBk`>p`!U};02_I_pMtT%4m87UuWXWV~+e>-mZiZ+0`gtu|p?c_3SXr*8|E+ zd#FbjVrz34gUOA6B=E~MrylCDMCYu@woRc^ZaHCSH!%Fhk{-7vt1%HEmct;Xs-q_s ztX$2h24r(@J-J{_+i?`sgCO#Q$SH@BO_AQTZ=E&5inz5I2>y*)rwf+3 z4Cx#rofD*UKsuKqosO;1s&c&=M%O2l^p;-Zg-(?r%s9>{)7kagY+db$x2b0Ywx>!)#C3-{!M98~UA}=sm38c_Al9*Y=UYI%FYwvD-Rfi>DDCv@nb zqaVkHfq9IbjDyoZRPq)^LDLf_6FClIZHWx1M*aeG)p4hTRun=i;(Gs{bI zq@QhL!Y-tWV_NlM!Cr;yv{ml?_a0#^ONK(m*v;abqLU0+ug2QhLp z)YUaWgG!V4I$e`3O)zN(3mHTTy{?=tXu478i>(~GSZ$-2u(TK|<~5Nnjv2|!(w=og{~qGJWjScgYn%P@`{6UK`GW95|cVxV|Q zqOZ$PTyqQ**tCHoa>#Q-Y!fd9oa+;PL)JC3&9uN-#jKYZ*UOHH>*f6es3Rw*Ux5K{ zO!O-;;Np515|P7VU$s{3jJlq8*;hl=lu^G1ioQ0{uglQh2t_enO|*3e(XSW%ouf>( zay9THITpSFSZ+%68#8fP^p1=2DVu&1<9qX3d|lD_mNh2<2GbzBt#bOU80F?fzl}9M z6&nAFQ^4C16gQ<2I@S@RZ($Vg=!YVg&53uyQoqIk?}8EEo#^)fkK(~@7HcVnd26EI z%P@BW<|V#z$c=EmrJ$AHBLTl>|K&1&&%0>9e%}gCCE(uQ58QYL?gIs&n_MGTe-LOs zl;{uhuxpz!#;twa*mnFHmfi9aj&M2s5g@-U(H~_In=!&#thciq1j=}KM|}sI^kZ05 zA%&O2l|@oWhivlooy*o(Gu)FdTX!ws5DaFU8cw9|UL3_}nMI_t&Qm8 zEVVti>PE|*Gm13~GR~CxUTdoNysJOXtKB%q|0jBnVV;ZGYkN8UN$7oFqCdrsyq$IV zbm{^9nS!-}ZKLm3_Xx;lXi@D_=}XHusr{ zHj<95ztovwd?@b9x$3Ut)yigV`7-c5km#>uLJ-xwx#m`Q^j8`7*ZKrbwq5G4_o^?w zbNU+){>?;x%Ls>*-&-qXMm@m#{r;NSX%LtN`P&fmokV}PBj^wM3Hl}r`a>9M42IfE z4M{9R{XN*}`-%ReOvUdQJEbbh9`?s;57K7%N>DqT(|>~De~{=u?F|3JqYnS0UQ<-C zPdZU*?LUK{A1C_HJA(eApP(PG9)H;@i2YSYShaHcuOQ|piT>-3n4k6&^J5nCGg&hp zO!VJ$nE$pP^G}%h@76d0r{BPDv7e|1S=2wl4cU(H&v3xM zB>Go2K0W+VE@&*0x;Qfz8|7XVgAR2k?_(h`stE0hxudD~whI;H* z_5XCu`Na{4av)3$5?;_`~UWu-f6X!9lBvo|KIEp8dx_lkkC3j z0Z9E4cA!D|=uH4;)GuHPT8~C3*oBHVfOOpv8p2OP!_ryiaFb;l>x^cD(nv;AcZj9% zIWUXfqj*VZ49{+3?ONQxmYkc*Qw~kw+bDeFYxp=Tk^DU`w< zHawx`@yHROPMXn6UPLF#Q2kS*&FNN2+rb2<9*4}DW*{1FI|)Atoh)EXaIhs{TLb~} zR60f4cbInB8}@dtR_IiayY%8bm39hiZ;+m~Z#vT{&z;OR(|irq#p1beud@fM}Rz7C#A{C18xF*b>Gr zNM7k|X@B@idnevFd8IjNSbaCLlE2ctG+({A1JhMfS91xPFUUu}bDuWL_lpq~!M-|| zRmfWD9FP+_S7e#vLKgF!w$dY{!CqEbqS}+Ds+w%7ox$ilbWrss|8!-iv`ge50i{Rc zEulxrx4BH|0#AdwH+LO}S(A6ZHCuVMb40r9H z+3fqSRj3)my zQt64HAWAO8PeK<-e-kB)!$b)ZPI{8GUu@dVF_$m9SAkNTcG8oD=NK5C0tR5<I zi^BD+l#BD4EGbEWU5%!+3-&tBMCjSf-6t7QcP^{D7S!EhbLrl7?nqM&dJfBzd47}= zh`LuvPH`e18%oTL^nsp>mxRhZvfADhP(ZR@zQsIb%lrLJ9$-}}K^0I|WfM)-n#EW7 z*PKcOZ(){dAi;VLeiEwVnVu_}i~vyrBXn{K>_TRbwmJK-HlpI|dAv^)^fi_rp{Ct$pQYAAnk z#_jl3T$j>I(6(TWQ@x4~D22u3(RH9%C#xuG?bG;d1vhB24RR=YwDumx4!Y6U=ciXt(kxE5K%R-%q0vE--B z;n{v8MpX_SYYx4FX@ibWH}cC^%|<~fvRiF>CB9h!aZ=fH4muva3N#dl#-S>zez+z@ z(TrX#j5%d{$j*fAHOw|-O{Dm^a0t+^Wj=N8f^`a99#9#o1ah%qK9%j)JiNXRY}OPj z5TYXrWo-}Epw}~bsOD7S2EBnLSyN7{;&8|u_MA{TPDD3>zHIFX;;0=*N0a|X7Q`u& zTaD;V{4v2*H9u~Zmw4XMn?ZwDH`U@+yW9!kklq41W+UzZT)!Tq%x^W!lYD=|mo$*; z*e$wQc(=0K>aHi=FC*iGDv0;Dp%LXAr#*MZIlF4~cK+P#EV(F*Vs^!0YQr$wcRE&eVv-eB#3s;$m)uo6aP zsVvdE!L)3xcl?9&9uZ~~Z--7?gO)9iZWZzrE_DI~GAD%O+g?cT75X$=4`pDf;iXo2 zpUB*3>ZC~7{R8xVVV>mq&=trZ5bCBLkI@G~wua)UKDV1b#P7LO6wjg$8%eI;?PU50 zvyDlYIb7k>ZT!8dTysOa0tci<{HXLD!%Bl{THRfu+nJ50oLwm&a%(8e-T}(KQEPH_ zkkZGPamc#jVnDi+-$&9iHr>TvyMNn4FWt@E#~KcnO`AP>555<0%gfQXV(WW_iYvYL z%5w5??zuBvP7WP9G~YfPslb=zq~;tff;lYGCz$J$)z&Jno^qcAOH-!8Brmz;74zK3 zod?|-eTrWu5&PY4{xpco*2!j?JD$S@(-3BiR9S9N5rUrq3noo!f0+y+-49~P+9or@ z^-D z@t)9^@Wh`FnA7P9Y9rHXTWn3Q`XdIjp?+ETAHWlv_1S!4`HJ+#Il&w}(mw(~{Tj7u i)L^Z#Y=a2tt6(kB*YK2UPgLCL>-b3M8+gW*`Tqy}!h_xb literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/lights/PointLight.doctree b/docs/_old/_build/doctrees/api/lights/PointLight.doctree new file mode 100644 index 0000000000000000000000000000000000000000..798855f63c611902af94ec18abb4c69b0c8faa71 GIT binary patch literal 16726 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/api/lights/index.doctree b/docs/_old/_build/doctrees/api/lights/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a2ef609e293999af56e972d5f27782df01cf6a52 GIT binary patch literal 2891 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

g%tIYD&biByUpru? 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�?luzPMV;=Z$=5Z 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

') + .appendTo($('.sidebar .this-page-menu')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('.sidebar .this-page-menu li.highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/docs/_old/_build/html/_static/file.png b/docs/_old/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6c7e7768fedd6d181e4eab4f3c32233834d64e GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}et=JiE0At%Y@9lE>dculfn-K; zOJ+%1Ze@RN)ug;?Aevk>|2$AZThElvDT_L1tnHk+u4~r%Svzj5ICSQ~l_NlK^ytxJ z$BrF8e*D#|SFc~ce)Hzd+qX~O0>Q^?@7}$8|Ni}l4<9~${P^k9r~m)|Gpnp!4z!ZB zB*-tAA#BB(Ev7f_r2_?uJzX3_DsH8ozbMqCAkg~o>?MV3bT=tNLidL7U|-MXU1#p6}SKop4!C?^5-@3;&&-a!shJabLT& z;bGbP->Vz8?Vd9`>a1kM(`ig^_V6dh3BCDW)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Check for digits + rdigit = /\d/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z])/ig, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.6.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.done( fn ); + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).unbind( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery._Deferred(); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNaN: function( obj ) { + return obj == null || !rdigit.test( obj ) || isNaN( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return (new Function( "return " + data ))(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + // (xml & tmp used internally) + parseXML: function( data , xml , tmp ) { + + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + + tmp = xml.documentElement; + + if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { + jQuery.error( "Invalid XML: " + data ); + } + + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Converts a dashed string to camelCased string; + // Used by both the css and data modules + camelCase: function( string ) { + return string.replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + + if ( indexOf ) { + return indexOf.call( array, elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return (new Date()).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +var // Promise methods + promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ), + // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + // Create a simple deferred (one callbacks list) + _Deferred: function() { + var // callbacks list + callbacks = [], + // stored [ context , args ] + fired, + // to avoid firing when already doing so + firing, + // flag to know if the deferred has been cancelled + cancelled, + // the deferred itself + deferred = { + + // done( f1, f2, ...) + done: function() { + if ( !cancelled ) { + var args = arguments, + i, + length, + elem, + type, + _fired; + if ( fired ) { + _fired = fired; + fired = 0; + } + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + deferred.done.apply( deferred, elem ); + } else if ( type === "function" ) { + callbacks.push( elem ); + } + } + if ( _fired ) { + deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); + } + } + return this; + }, + + // resolve with given context and args + resolveWith: function( context, args ) { + if ( !cancelled && !fired && !firing ) { + // make sure args are available (#8421) + args = args || []; + firing = 1; + try { + while( callbacks[ 0 ] ) { + callbacks.shift().apply( context, args ); + } + } + finally { + fired = [ context, args ]; + firing = 0; + } + } + return this; + }, + + // resolve with this as context and given arguments + resolve: function() { + deferred.resolveWith( this, arguments ); + return this; + }, + + // Has this deferred been resolved? + isResolved: function() { + return !!( firing || fired ); + }, + + // Cancel + cancel: function() { + cancelled = 1; + callbacks = []; + return this; + } + }; + + return deferred; + }, + + // Full fledged deferred (two callbacks list) + Deferred: function( func ) { + var deferred = jQuery._Deferred(), + failDeferred = jQuery._Deferred(), + promise; + // Add errorDeferred methods, then and promise + jQuery.extend( deferred, { + then: function( doneCallbacks, failCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ); + return this; + }, + always: function() { + return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments ); + }, + fail: failDeferred.done, + rejectWith: failDeferred.resolveWith, + reject: failDeferred.resolve, + isRejected: failDeferred.isResolved, + pipe: function( fnDone, fnFail ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject ); + } else { + newDefer[ action ]( returned ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + if ( promise ) { + return promise; + } + promise = obj = {}; + } + var i = promiseMethods.length; + while( i-- ) { + obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; + } + return obj; + } + }); + // Make sure only one callback list will be used + deferred.done( failDeferred.cancel ).fail( deferred.cancel ); + // Unexpose cancel + delete deferred.cancel; + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = arguments, + i = 0, + length = args.length, + count = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + // Strange bug in FF4: + // Values changed onto the arguments object sometimes end up as undefined values + // outside the $.when method. Cloning the object into a fresh array solves the issue + deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) ); + } + }; + } + if ( length > 1 ) { + for( ; i < length; i++ ) { + if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return deferred.promise(); + } +}); + + + +jQuery.support = (function() { + + var div = document.createElement( "div" ), + documentElement = document.documentElement, + all, + a, + select, + opt, + input, + marginDiv, + support, + fragment, + body, + testElementParent, + testElement, + testElementStyle, + tds, + events, + eventName, + i, + isSupported; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName( "tbody" ).length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName( "link" ).length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains it's value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + div.innerHTML = ""; + + // Figure out if the W3C box model works as expected + div.style.width = div.style.paddingLeft = "1px"; + + body = document.getElementsByTagName( "body" )[ 0 ]; + // We use our own, invisible, body unless the body is already present + // in which case we use a div (#9239) + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0 + }; + if ( body ) { + jQuery.extend( testElementStyle, { + position: "absolute", + left: -1000, + top: -1000 + }); + } + for ( i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; + } + testElement.appendChild( div ); + testElementParent = body || documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + support.boxModel = div.offsetWidth === 2; + + if ( "zoom" in div.style ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } + + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE < 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( document.defaultView && document.defaultView.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Remove the body element we added + testElement.innerHTML = ""; + testElementParent.removeChild( testElement ); + + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + } ) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + // Null connected elements to avoid leaks in IE + testElement = fragment = select = opt = body = marginDiv = div = input = null; + + return support; +})(); + +// Keep track of boxModel +jQuery.boxModel = jQuery.support.boxModel; + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([a-z])([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ jQuery.expando ] = id = ++jQuery.uuid; + } else { + id = jQuery.expando; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery + // metadata on plain JS objects when the object is serialized using + // JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); + } else { + cache[ id ] = jQuery.extend(cache[ id ], name); + } + } + + thisCache = cache[ id ]; + + // Internal jQuery data is stored in a separate object inside the object's data + // cache in order to avoid key collisions between internal data and user-defined + // data + if ( pvt ) { + if ( !thisCache[ internalKey ] ) { + thisCache[ internalKey ] = {}; + } + + thisCache = thisCache[ internalKey ]; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should + // not attempt to inspect the internal events object using jQuery.data, as this + // internal data object is undocumented and subject to change. + if ( name === "events" && !thisCache[name] ) { + return thisCache[ internalKey ] && thisCache[ internalKey ].events; + } + + return getByName ? + // Check for both converted-to-camel and non-converted data property names + thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] : + thisCache; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; + + if ( thisCache ) { + delete thisCache[ name ]; + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !isEmptyDataObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( pvt ) { + delete cache[ id ][ internalKey ]; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + var internalCache = cache[ id ][ internalKey ]; + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + if ( jQuery.support.deleteExpando || cache != window ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the entire user cache at once because it's faster than + // iterating through each key, but we need to continue to persist internal + // data if it existed + if ( internalCache ) { + cache[ id ] = {}; + // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery + // metadata on plain JS objects when the object is serialized using + // JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + + cache[ id ][ internalKey ] = internalCache; + + // Otherwise, we need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + } else if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } else { + elem[ jQuery.expando ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 ) { + var attr = this[0].attributes, name; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( this[0], name, data[ name ] ); + } + } + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var $this = jQuery( this ), + args = [ parts[0], value ]; + + $this.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + $this.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + !jQuery.isNaN( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON +// property to be considered empty objects; this property always exists in +// order to make sure JSON.stringify does not expose internal metadata +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery.data( elem, deferDataKey, undefined, true ); + if ( defer && + ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) && + ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery.data( elem, queueDataKey, undefined, true ) && + !jQuery.data( elem, markDataKey, undefined, true ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.resolve(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = (type || "fx") + "mark"; + jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 ); + if ( count ) { + jQuery.data( elem, key, count, true ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + if ( elem ) { + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type, undefined, true ); + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery.data( elem, type, jQuery.makeArray(data), true ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + defer; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) { + count++; + tmp.done( resolve ); + } + } + resolve(); + return defer.promise(); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + rinvalidChar = /\:|^on/, + formHook, boolHook; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = (value || "").split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return undefined; + } + + var isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attrFix: { + // Always normalize to ensure hook usage + tabindex: "tabIndex" + }, + + attr: function( elem, name, value, pass ) { + var nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( !("getAttribute" in elem) ) { + return jQuery.prop( elem, name, value ); + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // Normalize the name if needed + if ( notxml ) { + name = jQuery.attrFix[ name ] || name; + + hooks = jQuery.attrHooks[ name ]; + + if ( !hooks ) { + // Use boolHook for boolean attributes + if ( rboolean.test( name ) ) { + + hooks = boolHook; + + // Use formHook for forms and if the name contains certain characters + } else if ( formHook && name !== "className" && + (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { + + hooks = formHook; + } + } + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return undefined; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, name ) { + var propName; + if ( elem.nodeType === 1 ) { + name = jQuery.attrFix[ name ] || name; + + if ( jQuery.support.getSetAttribute ) { + // Use removeAttribute in browsers that support it + elem.removeAttribute( name ); + } else { + jQuery.attr( elem, name, "" ); + elem.removeAttributeNode( elem.getAttributeNode( name ) ); + } + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { + elem[ propName ] = false; + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabIndex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + }, + // Use the value property for back compat + // Use the formHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( formHook && jQuery.nodeName( elem, "button" ) ) { + return formHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( formHook && jQuery.nodeName( elem, "button" ) ) { + return formHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return (elem[ name ] = value); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: {} +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + return jQuery.prop( elem, name ) ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !jQuery.support.getSetAttribute ) { + + // propFix is more comprehensive and contains all fixes + jQuery.attrFix = jQuery.propFix; + + // Use this for any attribute on a form in IE6/7 + formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + // Return undefined if nodeValue is empty string + return ret && ret.nodeValue !== "" ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Check form objects in IE (multiple bugs related) + // Only use nodeValue if the attribute node exists on the form + var ret = elem.getAttributeNode( name ); + if ( ret ) { + ret.nodeValue = value; + return value; + } + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return (elem.style.cssText = "" + value); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }); +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0); + } + } + }); +}); + + + + +var rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspaces = / /g, + rescape = /[^\w\s.|`]/g, + fcleanup = function( nm ) { + return nm.replace(rescape, "\\$&"); + }; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + if ( handler === false ) { + handler = returnFalse; + } else if ( !handler ) { + // Fixes bug #7229. Fix recommended by jdalton + return; + } + + var handleObjIn, handleObj; + + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure + var elemData = jQuery._data( elem ); + + // If no elemData is found then we must be trying to bind to one of the + // banned noData elements + if ( !elemData ) { + return; + } + + var events = elemData.events, + eventHandle = elemData.handle; + + if ( !events ) { + elemData.events = events = {}; + } + + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native events in IE. + eventHandle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split(" "); + + var type, i = 0, namespaces; + + while ( (type = types[ i++ ]) ) { + handleObj = handleObjIn ? + jQuery.extend({}, handleObjIn) : + { handler: handler, data: data }; + + // Namespaced event handlers + if ( type.indexOf(".") > -1 ) { + namespaces = type.split("."); + type = namespaces.shift(); + handleObj.namespace = namespaces.slice(0).sort().join("."); + + } else { + namespaces = []; + handleObj.namespace = ""; + } + + handleObj.type = type; + if ( !handleObj.guid ) { + handleObj.guid = handler.guid; + } + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = jQuery.event.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = []; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add the function to the element's handler list + handlers.push( handleObj ); + + // Keep track of which events have been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, pos ) { + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + if ( handler === false ) { + handler = returnFalse; + } + + var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + events = elemData && elemData.events; + + if ( !elemData || !events ) { + return; + } + + // types is actually an event object here + if ( types && types.type ) { + handler = types.handler; + types = types.type; + } + + // Unbind all events for the element + if ( !types || typeof types === "string" && types.charAt(0) === "." ) { + types = types || ""; + + for ( type in events ) { + jQuery.event.remove( elem, type + types ); + } + + return; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(" "); + + while ( (type = types[ i++ ]) ) { + origType = type; + handleObj = null; + all = type.indexOf(".") < 0; + namespaces = []; + + if ( !all ) { + // Namespaced event handlers + namespaces = type.split("."); + type = namespaces.shift(); + + namespace = new RegExp("(^|\\.)" + + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + eventType = events[ type ]; + + if ( !eventType ) { + continue; + } + + if ( !handler ) { + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( all || namespace.test( handleObj.namespace ) ) { + jQuery.event.remove( elem, origType, handleObj.handler, j ); + eventType.splice( j--, 1 ); + } + } + + continue; + } + + special = jQuery.event.special[ type ] || {}; + + for ( j = pos || 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( handler.guid === handleObj.guid ) { + // remove the given handler for the given type + if ( all || namespace.test( handleObj.namespace ) ) { + if ( pos == null ) { + eventType.splice( j--, 1 ); + } + + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + + if ( pos != null ) { + break; + } + } + } + + // remove generic event handler if no more handlers exist + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + ret = null; + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + var handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + delete elemData.events; + delete elemData.handle; + + if ( jQuery.isEmptyObject( elemData ) ) { + jQuery.removeData( elem, undefined, true ); + } + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Event object or event type + var type = event.type || event, + namespaces = [], + exclusive; + + if ( type.indexOf("!") >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.exclusive = exclusive; + event.namespace = namespaces.join("."); + event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); + + // triggerHandler() and global events don't bubble or run the default action + if ( onlyHandlers || !elem ) { + event.preventDefault(); + event.stopPropagation(); + } + + // Handle a global trigger + if ( !elem ) { + // TODO: Stop taunting the data cache; remove global events and always attach to document + jQuery.each( jQuery.cache, function() { + // internalKey variable is just used to make it easier to find + // and potentially change this stuff later; currently it just + // points to jQuery.expando + var internalKey = jQuery.expando, + internalCache = this[ internalKey ]; + if ( internalCache && internalCache.events && internalCache.events[ type ] ) { + jQuery.event.trigger( event, data, internalCache.handle.elem ); + } + }); + return; + } + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + event.target = elem; + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + var cur = elem, + // IE doesn't like method names with a colon (#3533, #8272) + ontype = type.indexOf(":") < 0 ? "on" + type : ""; + + // Fire event on the current element, then bubble up the DOM tree + do { + var handle = jQuery._data( cur, "handle" ); + + event.currentTarget = cur; + if ( handle ) { + handle.apply( cur, data ); + } + + // Trigger an inline bound script + if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) { + event.result = false; + event.preventDefault(); + } + + // Bubble up to document, then to window + cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window; + } while ( cur && !event.isPropagationStopped() ); + + // If nobody prevented the default action, do it now + if ( !event.isDefaultPrevented() ) { + var old, + special = jQuery.event.special[ type ] || {}; + + if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction)() check here because IE6/7 fails that test. + // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch. + try { + if ( ontype && elem[ type ] ) { + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + jQuery.event.triggered = type; + elem[ type ](); + } + } catch ( ieError ) {} + + if ( old ) { + elem[ ontype ] = old; + } + + jQuery.event.triggered = undefined; + } + } + + return event.result; + }, + + handle: function( event ) { + event = jQuery.event.fix( event || window.event ); + // Snapshot the handlers list since a called handler may add/remove events. + var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0), + run_all = !event.exclusive && !event.namespace, + args = Array.prototype.slice.call( arguments, 0 ); + + // Use the fix-ed Event rather than the (read-only) native event + args[0] = event; + event.currentTarget = this; + + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; + + // Triggered event must 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event. + if ( run_all || event.namespace_re.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; + + var ret = handleObj.handler.apply( this, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + // Fixes #1925 where srcElement might not be defined either + event.target = event.srcElement || document; + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var eventDocument = event.target.ownerDocument || document, + doc = eventDocument.documentElement, + body = eventDocument.body; + + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { + event.which = event.charCode != null ? event.charCode : event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( handleObj ) { + jQuery.event.add( this, + liveConvert( handleObj.origType, handleObj.selector ), + jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); + }, + + remove: function( handleObj ) { + jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); + } + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + + // Check if mouse(over|out) are still within the same parent element + var related = event.relatedTarget, + inside = false, + eventType = event.type; + + event.type = event.data; + + if ( related !== this ) { + + if ( related ) { + inside = jQuery.contains( this, related ); + } + + if ( !inside ) { + + jQuery.event.handle.apply( this, arguments ); + + event.type = eventType; + } + } +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function( data, namespaces ) { + if ( !jQuery.nodeName( this, "form" ) ) { + jQuery.event.add(this, "click.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialSubmit" ); + } + }; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + + var changeFilters, + + getVal = function( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( jQuery.nodeName( elem, "select" ) ) { + val = elem.selectedIndex; + } + + return val; + }, + + testChange = function testChange( e ) { + var elem = e.target, data, val; + + if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery._data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery._data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + e.liveFired = undefined; + jQuery.event.trigger( e, arguments[1], elem ); + } + }; + + jQuery.event.special.change = { + filters: { + focusout: testChange, + + beforedeactivate: testChange, + + click: function( e ) { + var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; + + if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) { + testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; + + if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information + beforeactivate: function( e ) { + var elem = e.target; + jQuery._data( elem, "_change_data", getVal(elem) ); + } + }, + + setup: function( data, namespaces ) { + if ( this.type === "file" ) { + return false; + } + + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + } + + return rformElems.test( this.nodeName ); + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialChange" ); + + return rformElems.test( this.nodeName ); + } + }; + + changeFilters = jQuery.event.special.change.filters; + + // Handle when the input is .focus()'d + changeFilters.focus = changeFilters.beforeactivate; +} + +function trigger( type, elem, args ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + // Don't pass args or remember liveFired; they apply to the donor event. + var event = jQuery.extend( {}, args[ 0 ] ); + event.type = type; + event.originalEvent = {}; + event.liveFired = undefined; + jQuery.event.handle.call( elem, event ); + if ( event.isDefaultPrevented() ) { + args[ 0 ].preventDefault(); + } +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + + function handler( donor ) { + // Donor event is always a native one; fix it and switch its type. + // Let focusin/out handler cancel the donor focus/blur event. + var e = jQuery.event.fix( donor ); + e.type = fix; + e.originalEvent = {}; + jQuery.event.trigger( e, null, e.target ); + if ( e.isDefaultPrevented() ) { + donor.preventDefault(); + } + } + }); +} + +jQuery.each(["bind", "one"], function( i, name ) { + jQuery.fn[ name ] = function( type, data, fn ) { + var handler; + + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ name ](key, data, type[key], fn); + } + return this; + } + + if ( arguments.length === 2 || data === false ) { + fn = data; + data = undefined; + } + + if ( name === "one" ) { + handler = function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }; + handler.guid = fn.guid || jQuery.guid++; + } else { + handler = fn; + } + + if ( type === "unload" && name !== "one" ) { + this.one( type, data, fn ); + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.add( this[i], type, handler, data ); + } + } + + return this; + }; +}); + +jQuery.fn.extend({ + unbind: function( type, fn ) { + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.remove( this[i], type, fn ); + } + } + + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.live( types, data, fn, selector ); + }, + + undelegate: function( selector, types, fn ) { + if ( arguments.length === 0 ) { + return this.unbind( "live" ); + + } else { + return this.die( types, null, fn, selector ); + } + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + +jQuery.each(["live", "die"], function( i, name ) { + jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { + var type, i = 0, match, namespaces, preType, + selector = origSelector || this.selector, + context = origSelector ? this : jQuery( this.context ); + + if ( typeof types === "object" && !types.preventDefault ) { + for ( var key in types ) { + context[ name ]( key, data, types[key], selector ); + } + + return this; + } + + if ( name === "die" && !types && + origSelector && origSelector.charAt(0) === "." ) { + + context.unbind( origSelector ); + + return this; + } + + if ( data === false || jQuery.isFunction( data ) ) { + fn = data || returnFalse; + data = undefined; + } + + types = (types || "").split(" "); + + while ( (type = types[ i++ ]) != null ) { + match = rnamespaces.exec( type ); + namespaces = ""; + + if ( match ) { + namespaces = match[0]; + type = type.replace( rnamespaces, "" ); + } + + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } + + preType = type; + + if ( liveMap[ type ] ) { + types.push( liveMap[ type ] + namespaces ); + type = type + namespaces; + + } else { + type = (liveMap[ type ] || type) + namespaces; + } + + if ( name === "live" ) { + // bind live handler + for ( var j = 0, l = context.length; j < l; j++ ) { + jQuery.event.add( context[j], "live." + liveConvert( type, selector ), + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); + } + + } else { + // unbind live handler + context.unbind( "live." + liveConvert( type, selector ), fn ); + } + } + + return this; + }; +}); + +function liveHandler( event ) { + var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, + elems = [], + selectors = [], + events = jQuery._data( this, "events" ); + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) + if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { + return; + } + + if ( event.namespace ) { + namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + event.liveFired = this; + + var live = events.live.slice(0); + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { + selectors.push( handleObj.selector ); + + } else { + live.splice( j--, 1 ); + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + close = match[i]; + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { + elem = close.elem; + related = null; + + // Those two events require additional checking + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + event.type = handleObj.preType; + related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + + // Make sure not to accidentally match a child element with the same selector + if ( related && jQuery.contains( elem, related ) ) { + related = elem; + } + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, handleObj: handleObj, level: close.level }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + + if ( maxLevel && match.level > maxLevel ) { + break; + } + + event.currentTarget = match.elem; + event.data = match.handleObj.data; + event.handleObj = match.handleObj; + + ret = match.handleObj.origHandler.apply( match.elem, arguments ); + + if ( ret === false || event.isPropagationStopped() ) { + maxLevel = match.level; + + if ( ret === false ) { + stop = false; + } + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&"); +} + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.bind( name, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var match, + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var found, item, + filter = Expr.filter[ type ], + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + var first = match[2], + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +Sizzle.getText = function( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += Sizzle.getText( elem.childNodes ); + } + } + + return ret; +}; + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( typeof selector === "string" ? + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array + if ( jQuery.isArray( selectors ) ) { + var match, selector, + matches = {}, + level = 1; + + if ( cur && selectors.length ) { + for ( i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[ selector ] ) { + matches[ selector ] = POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[ selector ]; + + if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) { + ret.push({ selector: selector, elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ), + // The variable 'args' was introduced in + // https://github.com/jquery/jquery/commit/52a0238 + // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. + // http://code.google.com/p/v8/issues/detail?id=1050 + args = slice.call(arguments); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, args.join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +} + + + + +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + + + + + + +
+
+
+
+ +
+

THREE - Main three.js namespace

+
+
+THREE
+

Main namespace for three.js

+
+ +
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/cameras/Camera.html b/docs/_old/_build/html/api/cameras/Camera.html new file mode 100644 index 0000000000..179871c41c --- /dev/null +++ b/docs/_old/_build/html/api/cameras/Camera.html @@ -0,0 +1,145 @@ + + + + + + + + Camera - Abstract base class for cameras — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Camera - Abstract base class for cameras

+

Constructor

+
+
+class Camera()
+

Abstract base class for cameras

+

Inherits from Object3D()

+
+ +

Attributes

+
+
+Camera.matrixWorldInverse
+

Matrix4()

+
+ +
+
+Camera.projectionMatrix
+

Matrix4()

+
+ +
+
+Camera.projectionMatrixInverse
+

Matrix4()

+
+ +

Methods

+
+
+Camera.lookAt(vector)
+

Orient camera to look at Vector3()

+
+ +
+ + +
+
+
+
+
+

Previous topic

+

Cameras

+

Next topic

+

OrthographicCamera - Camera with orthographic projection

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/cameras/OrthographicCamera.html b/docs/_old/_build/html/api/cameras/OrthographicCamera.html new file mode 100644 index 0000000000..79c540c44d --- /dev/null +++ b/docs/_old/_build/html/api/cameras/OrthographicCamera.html @@ -0,0 +1,185 @@ + + + + + + + + OrthographicCamera - Camera with orthographic projection — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

OrthographicCamera - Camera with orthographic projection

+

Constructor

+
+
+class OrthographicCamera(left, right, top, bottom, near, far)
+

Camera with orthographic projection

+

Part of scene graph

+

Inherits from Object3D() Camera()

+ +++ + + + +
Arguments:
    +
  • left (float) – left
  • +
  • right (float) – right
  • +
  • top (float) – top
  • +
  • bottom (float) – bottom
  • +
  • near (float) – near
  • +
  • far (float) – far
  • +
+
+
+ +

Attributes

+
+
+OrthographicCamera.left
+

Camera frustum left plane

+
+ +
+
+OrthographicCamera.right
+

Camera frustum right plane

+
+ +
+
+OrthographicCamera.top
+

Camera frustum top plane

+
+ +
+
+OrthographicCamera.bottom
+

Camera frustum bottom plane

+
+ +
+
+OrthographicCamera.near
+

Camera frustum near plane

+
+ +
+
+OrthographicCamera.far
+

Camera frustum far plane

+
+ +

Method

+
+
+OrthographicCamera.updateProjectionMatrix()
+

Updates camera’s projection matrix. Must be called after change of parameters.

+
+ +

Example

+
var camera = new THREE.OrthographicCamera(  window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 1000 );
+scene.add( camera );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Camera - Abstract base class for cameras

+

Next topic

+

PerspectiveCamera - Camera with perspective projection

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/cameras/PerspectiveCamera.html b/docs/_old/_build/html/api/cameras/PerspectiveCamera.html new file mode 100644 index 0000000000..d279281a2b --- /dev/null +++ b/docs/_old/_build/html/api/cameras/PerspectiveCamera.html @@ -0,0 +1,285 @@ + + + + + + + + PerspectiveCamera - Camera with perspective projection — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

PerspectiveCamera - Camera with perspective projection

+

Constructor

+
+
+class PerspectiveCamera(fov, aspect, near, far)
+

Camera with perspective projection

+

Part of scene graph

+

Inherits from Object3D() Camera()

+ +++ + + + +
Arguments:
    +
  • fov (float) – field of view
  • +
  • aspect (float) – aspect ratio
  • +
  • near (float) – near
  • +
  • far (float) – far
  • +
+
+
+ +

Attributes

+
+
+PerspectiveCamera.fov
+

Camera frustum vertical field of view

+
+ +
+
+PerspectiveCamera.aspect
+

Camera frustum aspect ratio

+
+ +
+
+PerspectiveCamera.near
+

Camera frustum near plane

+
+ +
+
+PerspectiveCamera.far
+

Camera frustum far plane

+
+ +

Multi-view attributes

+
+
+PerspectiveCamera.fullWidth
+
+ +
+
+PerspectiveCamera.fullHeight
+
+ +
+
+PerspectiveCamera.x
+
+ +
+
+PerspectiveCamera.y
+
+ +
+
+PerspectiveCamera.width
+
+ +
+
+PerspectiveCamera.height
+
+ +

Methods

+
+
+PerspectiveCamera.updateProjectionMatrix()
+

Updates camera’s projection matrix. Must be called after change of parameters.

+
+ +
+
+PerspectiveCamera.setLens (focalLength, frameSize)
+

Uses focal length (in mm) to estimate and set FOV +35mm (fullframe) camera is used if frame size is not specified.

+

Formula based on http://www.bobatkins.com/photography/technical/field_of_view.html

+ +++ + + + +
Arguments:
    +
  • focalLength (float) – focal length
  • +
  • frameSize (float) – frame size
  • +
+
+
+ +
+
+PerspectiveCamera.setViewOffset (fullWidth, fullHeight, x, y, width, height)
+

Sets an offset in a larger frustum. This is useful for multi-window or +multi-monitor/multi-machine setups.

+

For example, if you have 3x2 monitors and each monitor is 1920x1080 and +the monitors are in grid like this:

+ +++++ + + + + + + + + + + +
ABC
DEF
+

then for each monitor you would call it like this:

+
var w = 1920;
+var h = 1080;
+var fullWidth = w * 3;
+var fullHeight = h * 2;
+
+// --A--
+camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );
+//--B--
+camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );
+//--C--
+camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );
+//--D--
+camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );
+//--E--
+camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );
+//--F--
+camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );
+
+
+

Note there is no reason monitors have to be the same size or in a grid.

+ +++ + + + +
Arguments:
    +
  • fullWidth (float) – full width of multi-view setup
  • +
  • fullHeight (float) – full height of multi-view setup
  • +
  • x (float) – x-offset of subcamera
  • +
  • y (float) – y-offset of subcamera
  • +
  • width (float) – width of subcamera
  • +
  • height (float) – height of subcamera
  • +
+
+
+ +

Example

+
var camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 1000 );
+scene.add( camera );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

OrthographicCamera - Camera with orthographic projection

+

Next topic

+

Core

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/cameras/index.html b/docs/_old/_build/html/api/cameras/index.html new file mode 100644 index 0000000000..1eae4a52c0 --- /dev/null +++ b/docs/_old/_build/html/api/cameras/index.html @@ -0,0 +1,115 @@ + + + + + + + + Cameras — three.js v48dev documentation + + + + + + + + + + + + + +
+ +
+
+

Previous topic

+

Tutorials

+

Next topic

+

Camera - Abstract base class for cameras

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Clock.html b/docs/_old/_build/html/api/core/Clock.html new file mode 100644 index 0000000000..61f5350b3a --- /dev/null +++ b/docs/_old/_build/html/api/core/Clock.html @@ -0,0 +1,201 @@ + + + + + + + + Clock - Keeps track of time — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Clock - Keeps track of time

+

Constructor

+
+
+class Clock(autoStart)
+
+ +

//todo:description

+

Attributes

+
+
+Clock.autoStart
+
+ +

//todo:description

+
+
+Clock.startTime
+
+ +

//todo:description

+
+
+Clock.oldTime
+
+ +

//todo:description

+
+
+Clock.elapsedTime
+
+ +

//todo:description

+
+
+Clock.running
+
+ +

//todo:description

+

Methods

+
+
+Clock.start()
+
+ +

//todo:description

+
+
+Clock.stop()
+
+ +

//todo:description

+
+
+Clock.getElapsedTime()
+
+ +
+
//todo:description
+
+++ + + + + + +
returns://todo
rtype://todo
+
+
+
+
+Clock.getDelta()
+
+ +
+
//todo:description
+
+++ + + + + + +
returns://todo
rtype://todo
+
+
+

Example

+
+ + +
+
+
+
+
+

Previous topic

+

Core

+

Next topic

+

Color - Represents a color

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Color.html b/docs/_old/_build/html/api/core/Color.html new file mode 100644 index 0000000000..ee05d46bf3 --- /dev/null +++ b/docs/_old/_build/html/api/core/Color.html @@ -0,0 +1,386 @@ + + + + + + + + Color - Represents a color — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Color - Represents a color

+

Constructor

+
+
+class Color(hex)
+

Represents a color

+

See also ColorUtils()

+ +++ + + + +
Arguments:
    +
  • hex (integer) – Hex value to intialize the color
  • +
+
+
+ +

Attributes

+
+
+Color.r
+

Red channel (float between 0 and 1) (default 1)

+
+ +
+
+Color.g
+

Green channel (float between 0 and 1) (default 1)

+
+ +
+
+Color.b
+

Blue channel (float between 0 and 1) (default 1)

+
+ +

Methods

+
+
+Color.clone()
+

Clones this color

+ +++ + + + + + +
Returns:New instance identical to this color
Rtype :Color()
+
+ +
+
+Color.copy(color)
+

Copies given color into this color

+ +++ + + + + + + + +
Arguments:
    +
  • color (Color) – Color to copy
  • +
+
Returns:

This color

+
Rtype :

Color()

+
+
+ +
+
+Color.copyGammaToLinear(color)
+

Copies given color into this color, making conversion from gamma to linear color space

+ +++ + + + + + + + +
Arguments:
    +
  • color (Color) – Color to copy
  • +
+
Returns:

This color

+
Rtype :

Color()

+
+
+ +
+
+Color.copyLinearToGamma(color)
+

Copies given color into this color, making conversion from linear to gamma color space

+ +++ + + + + + + + +
Arguments:
    +
  • color (Color) – Color to copy
  • +
+
Returns:

This color

+
Rtype :

Color()

+
+
+ +
+
+Color.convertGammaToLinear()
+

Converts this color from gamma to linear color space

+ +++ + + + + + +
Returns:This color
Rtype :Color()
+
+ +
+
+Color.convertLinearToGamma()
+

Converts this color from linear to gamma color space

+ +++ + + + + + +
Returns:This color
Rtype :Color()
+
+ +
+
+Color.setRGB(r, g, b)
+

Sets this color from RGB values

+ +++ + + + + + + + +
Arguments:
    +
  • r (float) – Red channel value (between 0 and 1)
  • +
  • g (float) – Green channel value (between 0 and 1)
  • +
  • b (float) – Blue channel value (between 0 and 1)
  • +
+
Returns:

This color

+
Rtype :

Color()

+
+
+ +
+
+Color.setHSV(h, s, v)
+

Sets this color from HSV values.

+

Based on MochiKit implementation by Bob Ippolito.

+ +++ + + + + + + + +
Arguments:
    +
  • h (float) – Hue channel (between 0 and 1)
  • +
  • s (float) – Saturation channel (between 0 and 1)
  • +
  • v (float) – Value channel (between 0 and 1)
  • +
+
Returns:

This color

+
Rtype :

Color()

+
+
+ +
+
+Color.setHex(hex)
+

Sets this color from a hex value

+ +++ + + + + + + + +
Arguments:
    +
  • hex (integer) – Value of the color in hex (between 0x000000 and 0xffffff)
  • +
+
Returns:

This color

+
Rtype :

Color()

+
+
+ +
+
+Color.getHex()
+

Gets the value of this color in hex

+ +++ + + + + + +
Returns:Color value in hex
Rtype :integer
+
+ +
+
+Color.getContextStyle()
+

Returns the value of this color in CSS context style.

+

Example: rgb( r, g, b )

+ +++ + + + + + +
Returns:CSS-formatted color value
Rtype :string
+
+ +

Example

+
var colors = [];
+
+for ( i = 0; i < 5000; i ++ ) {
+
+    x = 2000 * Math.random() - 1000;
+    colors[ i ] = new THREE.Color( 0xffffff );
+    colors[ i ].setHSV( ( x + 1000 ) / 2000, 1.0, 1.0 );
+
+}
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Clock - Keeps track of time

+

Next topic

+

Edge - Edge between two vertices

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Edge.html b/docs/_old/_build/html/api/core/Edge.html new file mode 100644 index 0000000000..b40db952d1 --- /dev/null +++ b/docs/_old/_build/html/api/core/Edge.html @@ -0,0 +1,157 @@ + + + + + + + + Edge - Edge between two vertices — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Edge - Edge between two vertices

+

Constructor

+
+
+class Edge(v1, v2, vi1, vi2)
+

//todo:description

+ +++ + + + +
Arguments:
    +
  • v1 (?) – //todo
  • +
  • v2 (?) – //todo
  • +
  • vi1 (?) – //todo
  • +
  • vi2 (?) – //todo
  • +
+
+
+ +

Attributes

+
+
+Edge.vertices
+

//todo:description

+
+ +
+
+Edge.vertexIndices
+

//todo:description

+
+ +
+
+Edge.faces
+

//todo:description

+
+ +
+
+Edge.faceIndices
+

//todo:description

+
+ +
+ + +
+
+
+
+
+

Previous topic

+

Color - Represents a color

+

Next topic

+

Face3 - Triangle face

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Face3.html b/docs/_old/_build/html/api/core/Face3.html new file mode 100644 index 0000000000..a47c860377 --- /dev/null +++ b/docs/_old/_build/html/api/core/Face3.html @@ -0,0 +1,207 @@ + + + + + + + + Face3 - Triangle face — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Face3 - Triangle face

+

Constructor

+
+
+class Face3(a, b, c, normal, color, materialIndex)
+

Triangle face

+

(indices start from zero)

+ +++ + + + +
Arguments:
    +
  • a (integer) – vertex A index
  • +
  • b (integer) – vertex B index
  • +
  • c (integer) – vertex C index
  • +
  • normal (varying) – face normal or array of vertex normals
  • +
  • color (varying) – face color or array of vertex colors
  • +
  • materialIndex (integer) – material index
  • +
+
+
+ +

Attributes

+
+
+Face3.a
+

Vertex A index

+
+ +
+
+Face3.b
+

Vertex B index

+
+ +
+
+Face3.c
+

Vertex C index

+
+ +
+
+Face3.normal
+

Face normal

+

Vector3() - default ( 0, 0, 0 )

+
+ +
+
+Face3.color
+

Face color

+

Color() - default white

+
+ +
+
+Face3.centroid
+

Face centroid

+

Vector3() - default ( 0, 0, 0 )

+
+ +
+
+Face3.vertexNormals
+

Array of 3 vertex normals

+

default []

+
+ +
+
+Face3.vertexColors
+

Array of 3 vertex colors

+

default []

+
+ +
+
+Face3.vertexTangents
+

Array of 3 vertex tangents

+

default []

+
+ +
+
+Face3.materialIndex
+

Material index (points to Geometry.materials array)

+

default 0

+
+ +

Example

+
var face = new THREE.Face3( 0, 1, 2, new THREE.Vector3( 0, 1, 0 ), new THREE.Color( 0xffaa00 ), 0 );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Edge - Edge between two vertices

+

Next topic

+

Face4 - Quad face

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Face4.html b/docs/_old/_build/html/api/core/Face4.html new file mode 100644 index 0000000000..a5038417db --- /dev/null +++ b/docs/_old/_build/html/api/core/Face4.html @@ -0,0 +1,213 @@ + + + + + + + + Face4 - Quad face — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Face4 - Quad face

+

Constructor

+
+
+class Face4(a, b, c, d, normal, color, materialIndex)
+

Quad face

+

(indices start from zero)

+ +++ + + + +
Arguments:
    +
  • a (integer) – vertex index
  • +
  • b (integer) – vertex index
  • +
  • c (integer) – vertex index
  • +
  • d (integer) – vertex index
  • +
  • normal (varying) – face normal or array of vertex normals
  • +
  • color (varying) – face color or array of vertex colors
  • +
  • materialIndex (integer) – material index
  • +
+
+
+ +

Attributes

+
+
+Face4.a
+

Vertex A index

+
+ +
+
+Face4.b
+

Vertex B index

+
+ +
+
+Face4.c
+

Vertex C index

+
+ +
+
+Face4.d
+

Vertex D index

+
+ +
+
+Face4.normal
+

Face normal

+

Vector3() - default (0,0,0)

+
+ +
+
+Face4.color
+

Face color

+

Color() - default white

+
+ +
+
+Face4.centroid
+

Vector3() - default (0,0,0)

+
+ +
+
+Face4.vertexNormals
+

Array of 4 vertex normals

+

default []

+
+ +
+
+Face4.vertexColors
+

Array of 4 vertex colors

+

default []

+
+ +
+
+Face4.vertexTangents
+

Array of 4 vertex tangents

+

default []

+
+ +
+
+Face4.materialIndex
+

Material index (points to Geometry.materials array)

+

default 0

+
+ +

Example

+
var face = new THREE.Face4( 0, 1, 2, 3, new THREE.Vector3( 0, 1, 0 ), new THREE.Color( 0xffaa00 ), 0 );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Face3 - Triangle face

+

Next topic

+

Geometry - Base class for geometries

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Geometry.html b/docs/_old/_build/html/api/core/Geometry.html new file mode 100644 index 0000000000..54df016edc --- /dev/null +++ b/docs/_old/_build/html/api/core/Geometry.html @@ -0,0 +1,323 @@ + + + + + + + + Geometry - Base class for geometries — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Geometry - Base class for geometries

+

Constructor

+
+
+class Geometry()
+

Base class for geometries

+

Encapsulates unique instances of vertex buffer objects in WebGLRenderer()

+
+ +

Attributes

+
+
+Geometry.id
+

Unique number of this geometry instance

+
+ +
+
+Geometry.boundingBox
+

Bounding box

+
boundingBox = { min: new THREE.Vector3(), max: new THREE.Vector3() }
+
+
+
+ +
+
+Geometry.boundingSphere
+

Bounding sphere

+
boundingSphere = { radius: float }
+
+
+
+ +
+
+Geometry.materials
+

Array of materials

+

Used with models containing multiple materials in a single geometry (with pass-through MeshFaceMaterial())

+

Face indices index into this array.

+
+ +

Attribute buffers

+
+
+Geometry.faces
+

Array of faces (Face3(), Face4())

+
+ +
+
+Geometry.vertices
+

Array of vertices

+

Face indices index into this array.

+
+ +
+
+Geometry.colors
+

Array of vertex colors, matching number and order of vertices.

+

Used in ParticleSystem(), Line() and Ribbon().

+

Meshes use per-face-use-of-vertex colors embedded directly in faces.

+
+ +
+
+Geometry.faceUvs
+

Array of face UV layers. +Each UV layer is an array of UV() matching order and number of faces.

+
+ +
+
+Geometry.faceVertexUvs
+

Array of vertex UV layers. +Each UV layer is an array of UV() matching order and number of vertices in faces.

+
+ +
+
+Geometry.morphTargets
+

Array of morph targets. +Each morph target is JS object:

+
morphTarget = { name: "targetName", vertices: [ new THREE.Vertex(), ... ] }
+
+
+

Morph vertices match number and order of primary vertices.

+
+ +
+
+Geometry.morphColors
+

Array of morph colors. +Morph colors have similar structure as morph targets, each color set is JS object:

+
morphColor = { name: "colorName", colors: [ new THREE.Color(), ... ] }
+
+
+

Morph colors can match either number and order of faces (face colors) or number of vertices (vertex colors).

+
+ +
+
+Geometry.skinWeights
+

Array of skinning weights (Vector4()), matching number and order of vertices.

+
+ +
+
+Geometry.skinIndices
+

Array of skinning indices (Vector4()), matching number and order of vertices.

+
+ +

Flags

+
+
+Geometry.hasTangents
+

True if geometry has tangents. Set in Geometry.computeTangents()

+

default false

+
+ +
+
+Geometry.dynamic
+

Set to true if attribute buffers will need to change in runtime (using dirty flags).

+

Unless set to true internal typed arrays corresponding to buffers will be deleted once sent to GPU.

+

default false

+
+ +

Methods

+
+
+Geometry.applyMatrix(matrix)
+

Bakes matrix transform directly into vertex coordinates

+ +++ + + + +
Arguments:
    +
  • matrix (Matrix4) – matrix transform
  • +
+
+
+ +
+
+Geometry.computeCentroids()
+

Computes centroids for all faces

+
+ +
+
+Geometry.computeFaceNormals()
+

Computes face normals

+
+ +
+
+Geometry.computeVertexNormals()
+

Computes vertex normals by averaging face normals.

+

Face normals must be existing / computed beforehand.

+
+ +
+
+Geometry.computeTangents()
+

Computes vertex tangents

+

Based on http://www.terathon.com/code/tangent.html

+

Geometry must have vertex UVs (layer 0 will be used).

+
+ +
+
+Geometry.computeBoundingBox()
+

Computes bounding box of the geometry, updating Geometry.boundingBox attribute.

+
+ +
+
+Geometry.computeBoundingSphere()
+

Computes bounding sphere of the geometry, updating Geometry.boundingSphere attribute.

+
+ +
+
+Geometry.mergeVertices()
+

Checks for duplicate vertices using hashmap. +Duplicated vertices are removed and faces’ vertices are updated.

+
+ +

Example

+
// geometry with random points
+// (useful for example with ParticleSystem)
+
+var n = 10000;
+var geometry = new THREE.Geometry()
+for ( var i = 0; i < n; i ++ ) {
+
+    var x = THREE.MathUtils.randFloatSpread( 1000 );
+    var y = THREE.MathUtils.randFloatSpread( 1000 );
+    var z = THREE.MathUtils.randFloatSpread( 1000 );
+    var position = new THREE.Vector3( x, y, z );
+    var vertex = new THREE.Vertex( position );
+
+    geometry.vertices.push( vertex );
+
+}
+
+geometry.computeBoundingSphere();
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Face4 - Quad face

+

Next topic

+

Math - Math utility functions

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Math.html b/docs/_old/_build/html/api/core/Math.html new file mode 100644 index 0000000000..b5aee6bfb1 --- /dev/null +++ b/docs/_old/_build/html/api/core/Math.html @@ -0,0 +1,250 @@ + + + + + + + + Math - Math utility functions — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Math - Math utility functions

+

Methods

+
+
+Math.clamp(x, a, b)
+

Clamps the x to be between a and b

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – value to be clamped
  • +
  • a (float) – minimum value
  • +
  • b (float) – maximum value
  • +
+
Returns:

Clamped value

+
Rtype :

float

+
+
+ +
+
+Math.clampBottom(x, a)
+

Clamps the x to be larger than a

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – value to be clamped
  • +
  • a (float) – minimum value
  • +
+
Returns:

Clamped value

+
Rtype :

float

+
+
+ +
+
+Math.mapLinear(x, a1, a2, b1, b2)
+

Linear mapping of x from range <a1, a2> to range <b1, b2>

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – value to be mapped
  • +
  • a1 (float) – minimum value for range A
  • +
  • a2 (float) – maximum value for range A
  • +
  • b1 (float) – minimum value for range B
  • +
  • b2 (float) – maximum value for range B
  • +
+
Returns:

mapped value

+
Rtype :

float

+
+
+ +
+
+Math.random16()
+

Random float from <0, 1> with 16 bits of randomness +(standard Math.random() creates repetitive patterns when applied over larger space)

+ +++ + + + + + +
Returns:Random float from <0, 1> with 16 bits of randomness
Rtype :float
+
+ +
+
+Math.randInt(low, high)
+
+++ + + + + + +
Returns:Random integer from low to high interval
Rtype :integer
+
+ +
+
+Math.randFloat(low, high)
+
+++ + + + + + +
Returns:Random float from low to high interval
Rtype :float
+
+ +
+
+Math.randFloatSpread(range)
+
+++ + + + + + +
Returns:Random float from -range/2 to range/2 interval
Rtype :float
+
+ +
+ + +
+
+
+
+
+

Previous topic

+

Geometry - Base class for geometries

+

Next topic

+

Matrix3 - A 3x3 matrix

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Matrix3.html b/docs/_old/_build/html/api/core/Matrix3.html new file mode 100644 index 0000000000..39cead0561 --- /dev/null +++ b/docs/_old/_build/html/api/core/Matrix3.html @@ -0,0 +1,159 @@ + + + + + + + + Matrix3 - A 3x3 matrix — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Matrix3 - A 3x3 matrix

+

Constructor

+
+
+class Matrix3()
+

A 3x3 matrix

+
+ +

Attributes

+
+
+Matrix3.m
+

Array with matrix values

+
+ +

Methods

+
+
+Matrix3.transpose()
+

Transposes this matrix in place

+ +++ + + + + + +
Returns:This matrix
Rtype :Matrix3()
+
+ +
+
+Matrix3.transposeIntoArray(r)
+

Transposes this matrix into supplied array r

+

This matrix is unmodified

+ +++ + + + + + +
Returns:This matrix
Rtype :Matrix3()
+
+ +
+ + +
+
+
+
+
+

Previous topic

+

Math - Math utility functions

+

Next topic

+

Matrix4 - A 4x4 Matrix

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Matrix4.html b/docs/_old/_build/html/api/core/Matrix4.html new file mode 100644 index 0000000000..fa29aee51c --- /dev/null +++ b/docs/_old/_build/html/api/core/Matrix4.html @@ -0,0 +1,1249 @@ + + + + + + + + Matrix4 - A 4x4 Matrix — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Matrix4 - A 4x4 Matrix

+

Constructor

+
+
+class Matrix4(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44)
+

A 4x4 Matrix

+
+ +

Attributes

+
+
+Matrix4.n11
+
+ +
+
+Matrix4.n12
+
+ +
+
+Matrix4.n13
+
+ +
+
+Matrix4.n14
+
+ +
+
+Matrix4.n21
+
+ +
+
+Matrix4.n22
+
+ +
+
+Matrix4.n23
+
+ +
+
+Matrix4.n24
+
+ +
+
+Matrix4.n31
+
+ +
+
+Matrix4.n32
+
+ +
+
+Matrix4.n33
+
+ +
+
+Matrix4.n34
+
+ +
+
+Matrix4.n41
+
+ +
+
+Matrix4.n42
+
+ +
+
+Matrix4.n43
+
+ +
+
+Matrix4.n44
+
+ +

Methods

+
+
+Matrix4.clone()
+

Clones this matrix

+ +++ + + + + + +
Returns:New instance identical to this matrix
Rtype :Matrix4()
+
+ +
+
+Matrix4.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44)
+

Sets all fields of this matrix

+ +++ + + + + + +
Returns:This matrix
Rtype :Matrix4()
+
+ +
+
+Matrix4.identity()
+

Resets this matrix to identity

+ +++ + + + + + +
Returns:This matrix
Rtype :Matrix4()
+
+ +
+
+Matrix4.copy(m)
+

Copies a matrix m into this matrix

+ +++ + + + + + + + +
Arguments:
    +
  • m (Matrix4) – Matrix to be copied
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.lookAt(eye, center, up)
+

Constructs rotation matrix, looking from eye towards center with defined up vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.multiply(a, b)
+

Sets this matrix to a * b

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.multiplyToArray(a, b, r)
+

Sets this matrix to a * b and sets result into flat array r

+

Destination array can be regular JS array or Typed Array

+ +++ + + + + + + + +
Arguments:
    +
  • a (Matrix4) – source matrix A
  • +
  • b (Matrix4) – source matrix B
  • +
  • r (array) – destination array
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.multiplySelf(a)
+

Multiplies this matrix by a

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.multiplyScalar(s)
+

Multiplies this matrix by s

+ +++ + + + + + + + +
Arguments:
    +
  • a (float) – number
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.multiplyVector3(v)
+

Applies this matrix to a Vector3()

+ +++ + + + + + + + +
Arguments: +
Returns:

Multiplied vector

+
Rtype :

Vector3()

+
+
+ +
+
+Matrix4.multiplyVector4(v)
+

Applies this matrix to a Vector4()

+ +++ + + + + + + + +
Arguments: +
Returns:

Multiplied vector

+
Rtype :

Vector4()

+
+
+ +
+
+Matrix4.rotateAxis(v)
+

Applies rotation submatrix of this matrix to vector v and then normalizes it

+ +++ + + + + + + + +
Arguments: +
Returns:

Rotated vector

+
Rtype :

Vector3()

+
+
+ +
+
+Matrix4.crossVector(a)
+

//todo:description

+ +++ + + + + + +
Arguments: +
Rtype :

Vector4()

+
+
+ +
+
+Matrix4.determinant()
+

Computes determinant of this matrix

+

Based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm

+ +++ + + + + + +
Returns:Determinant
Rtype :float
+
+ +
+
+Matrix4.transpose()
+

Transposes this matrix

+ +++ + + + + + +
Returns:This matrix
Rtype :Matrix4()
+
+ +
+
+Matrix4.flatten()
+

Flattens this matrix into internal Matrix4.flat array

+ +++ + + + + + +
Returns:Flat array with this matrix values
Rtype :array
+
+ +
+
+Matrix4.flattenToArray(flat)
+

Flattens this matrix into supplied flat array

+ +++ + + + + + + + +
Arguments:
    +
  • flat (array) – array
  • +
+
Returns:

Flat array with this matrix values

+
Rtype :

array

+
+
+ +
+
+Matrix4.flattenToArrayOffset(flat, offset)
+

Flattens this matrix into supplied flat array starting from offset position in the array

+ +++ + + + + + + + +
Arguments:
    +
  • flat (array) – array
  • +
  • offset (integer) – offset
  • +
+
Returns:

Flat array with this matrix values

+
Rtype :

array

+
+
+ +
+
+Matrix4.setTranslation(x, y, z)
+

Sets this matrix as translation transform

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – x-translation
  • +
  • y (float) – y-translation
  • +
  • z (float) – z-translation
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.setScale(x, y, z)
+

Sets this matrix as scale transform

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – x-scale
  • +
  • y (float) – y-scale
  • +
  • z (float) – z-scale
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.setRotationX(theta)
+

Sets this matrix as rotation transform around x-axis by theta radians

+ +++ + + + + + + + +
Arguments:
    +
  • theta (float) – Rotation angle in radians
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.setRotationY(theta)
+

Sets this matrix as rotation transform around y-axis by theta radians

+ +++ + + + + + + + +
Arguments:
    +
  • theta (float) – Rotation angle in radians
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.setRotationZ(theta)
+

Sets this matrix as rotation transform around z-axis by theta radians

+ +++ + + + + + + + +
Arguments:
    +
  • theta (float) – Rotation angle in radians
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.setRotationAxis(axis, angle)
+

Sets this matrix as rotation transform around axis by angle radians

+

Based on http://www.gamedev.net/reference/articles/article1199.asp

+ +++ + + + + + + + +
Arguments:
    +
  • axis (Vector3) – Rotation axis
  • +
  • angle (float) – Rotation angle in radians
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.setPosition(v)
+

Sets just position component for this matrix from vector v

+ +++ + + + + + + + +
Arguments:
    +
  • v (Vector3) – position vector
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.getPosition()
+

Returns position component from this matrix

+

Note: this method returns a reference to internal class vector, make copy or clone if you don’t use it right away.

+ +++ + + + + + +
Returns:Vector with position
Rtype :Vector3()
+
+ +
+
+Matrix4.getColumnX()
+

Returns x-column component from this matrix

+

Note: this method returns a reference to internal class vector, make copy or clone if you don’t use it right away.

+ +++ + + + + + +
Returns:Vector with x-column
Rtype :Vector3()
+
+ +
+
+Matrix4.getColumnY()
+

Returns y-column component from this matrix

+

Note: this method returns a reference to internal class vector, make copy or clone if you don’t use it right away.

+ +++ + + + + + +
Returns:Vector with y-column
Rtype :Vector3()
+
+ +
+
+Matrix4.getColumnZ()
+

Returns z-column component from this matrix

+

Note: this method returns a reference to internal class vector, make copy or clone if you don’t use it right away.

+ +++ + + + + + +
Returns:Vector with z-column
Rtype :Vector3()
+
+ +
+
+Matrix4.getInverse(m)
+

Sets this matrix to inverse of matrix m

+

Based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.setRotationFromEuler(v, order)
+

Sets rotation submatrix of this matrix to rotation specified by Euler angles

+

Default order XYZ

+ +++ + + + + + + + +
Arguments:
    +
  • v (Vector3) – Vector3 with all the rotations
  • +
  • order (string) – The order of rotations eg. ‘XYZ’
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.setRotationFromQuaternion(q)
+

Sets rotation submatrix of this matrix to rotation specified by quaternion

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.scale(v)
+

Multiplies columns of this matrix by vector v

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.compose(translation, rotation, scale)
+

Sets this matrix to transform composed of translation, rotation and scale

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.decompose(translation, rotation, scale)
+

Decomposes this matrix into translation`, rotation and scale components

+

If parameters are not supplied, new instances will be created

+ +++ + + + + + + + +
Arguments:
    +
  • translation (Vector3) – destination translation vector
  • +
  • rotation (Quaternion) – destination rotation quaternion
  • +
  • scale (Vector3) – destination scale vector
  • +
+
Returns:

Array [ translation, rotation, scale ]

+
Rtype :

Array

+
+
+ +
+
+Matrix4.extractPosition(m)
+

Copies translation component of supplied matrix m into this matrix translation

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.extractRotation(m)
+

Copies rotation component of supplied matrix m into this matrix rotation

+ +++ + + + + + + + +
Arguments: +
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.rotateByAxis(axis, angle)
+

Rotates this matrix around supplied axis by angle

+ +++ + + + + + + + +
Arguments:
    +
  • axis (Vector3) – rotation axis
  • +
  • angle (float) – rotation angle in radians
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.rotateX(angle)
+

Rotates this matrix around x-axis by angle

+ +++ + + + + + + + +
Arguments:
    +
  • angle (float) – rotation angle in radians
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.rotateY(angle)
+

Rotates this matrix around y-axis by angle

+ +++ + + + + + + + +
Arguments:
    +
  • angle (float) – rotation angle in radians
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.rotateZ(angle)
+

Rotates this matrix around z-axis by angle

+ +++ + + + + + + + +
Arguments:
    +
  • angle (float) – rotation angle in radians
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.translate(v)
+

Translates this matrix by vector v

+ +++ + + + + + + + +
Arguments:
    +
  • v (Vector3) – translation vector
  • +
+
Returns:

This matrix

+
Rtype :

Matrix4()

+
+
+ +

Static methods

+
+
+Matrix4.makeInvert3x3(m)
+

Inverts just rotation submatrix of matrix m

+

Note: this method returns a reference to internal 3x3 matrix, make copy or clone if you don’t use it right away.

+

Based on http://code.google.com/p/webgl-mjs/

+ +++ + + + + + + + +
Arguments: +
Returns:

inverted submatrix

+
Rtype :

Matrix3()

+
+
+ +
+
+Matrix4.makeFrustum(left, right, bottom, top, near, far)
+

Creates frustum matrix

+ +++ + + + + + + + +
Arguments:
    +
  • left (float) – left
  • +
  • right (float) – right
  • +
  • bottom (float) – bottom
  • +
  • top (float) – top
  • +
  • near (float) – near
  • +
  • far (float) – far
  • +
+
Returns:

New instance of frustum matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.makePerspective(fov, aspect, near, far)
+

Creates perspective projection matrix

+ +++ + + + + + + + +
Arguments:
    +
  • fov (float) – vertical field of view in degrees
  • +
  • aspect (float) – aspect ratio
  • +
  • near (float) – near plane
  • +
  • far (float) – far plane
  • +
+
Returns:

New instance of projection matrix

+
Rtype :

Matrix4()

+
+
+ +
+
+Matrix4.makeOrtho(left, right, top, bottom, near, far)
+

Creates orthographic projection matrix

+ +++ + + + + + + + +
Arguments:
    +
  • left (float) – left
  • +
  • right (float) – right
  • +
  • top (float) – top
  • +
  • bottom (float) – bottom
  • +
  • near (float) – near plane
  • +
  • far (float) – far plane
  • +
+
Returns:

New instance of projection matrix

+
Rtype :

Matrix4()

+
+
+ +

Example

+
// simple rig for rotation around 3 axes
+
+var m = new THREE.Matrix4();
+
+var m1 = new THREE.Matrix4();
+var m2 = new THREE.Matrix4();
+var m3 = new THREE.Matrix4();
+
+var alpha = 0;
+var beta = Math.PI;
+var gamma = Math.PI/2;
+
+m1.setRotationX( alpha );
+m2.setRotationY( beta );
+m3.setRotationZ( gamma );
+
+m.multiply( m1, m2 );
+m.multiplySelf( m3 );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Matrix3 - A 3x3 matrix

+

Next topic

+

Object3D - Base class for scene graph objects

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Object3D.html b/docs/_old/_build/html/api/core/Object3D.html new file mode 100644 index 0000000000..6c0a579ef2 --- /dev/null +++ b/docs/_old/_build/html/api/core/Object3D.html @@ -0,0 +1,454 @@ + + + + + + + + Object3D - Base class for scene graph objects — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Object3D - Base class for scene graph objects

+

Constructor

+
+
+class Object3D()
+

Base class for scene graph objects

+
+ +

Attributes

+
+
+Object3D.id
+

Unique number of this object instance

+
+ +
+
+Object3D.name
+

Optional name of the object (doesn’t have to be unique)

+
+ +

Scene graph attributes

+
+
+Object3D.parent
+

Object’s parent in scene graph

+
+ +
+
+Object3D.children
+

Array with object’s children

+
+ +

Transform attributes

+
+
+Object3D.position
+

Object’s local position

+

Vector3() - default ( 0, 0, 0 )

+
+ +
+
+Object3D.rotation
+

Object’s local rotation (Euler angles)

+

Vector3() - default ( 0, 0, 0 )

+
+ +
+
+Object3D.eulerOrder
+

Order of axis for Euler angles

+

string - default XYZ

+
+ +
+
+Object3D.scale
+

Object’s local scale

+

Vector3() - default ( 1, 1, 1 )

+
+ +
+
+Object3D.up
+

Up direction

+

Vector3() - default ( 0, 1, 0 )

+
+ +
+
+Object3D.matrix
+

Local transform

+

Matrix4()

+
+ +
+
+Object3D.matrixWorld
+

Global transform

+

Matrix4()

+
+ +
+
+Object3D.matrixRotationWorld
+

Global rotation

+

Matrix4()

+
+ +
+
+Object3D.quaternion
+

Rotation quaternion

+

Quaternion()

+
+ +
+
+Object3D.useQuaternion
+

Use quaternion instead of Euler angles for specifying local rotation

+

boolean - default false

+
+ +
+
+Object3D.boundRadius
+

float - default 0.0

+
+ +
+
+Object3D.boundRadiusScale
+

Maximum scale from X, Y, Z scale components

+

float - default 1.0

+
+ +
+
+Object3D.renderDepth
+

Override depth-sorting order if non null

+

float - default null

+
+ +

Appearance flags

+
+
+Object3D.visible
+

Object gets rendered if true

+

boolean - default true

+
+ +
+
+Object3D.doubleSided
+

Both sides of faces visible if true

+

default false

+
+ +
+
+Object3D.flipSided
+

Backside of face visible

+

default false

+
+ +
+
+Object3D.castShadow
+

Gets rendered into shadow map

+

boolean - default false

+
+ +
+
+Object3D.receiveShadow
+

Material gets baked in shadow receiving

+

boolean - default false

+
+ +

Scene graph flags

+
+
+Object3D.frustumCulled
+

boolean - default true

+
+ +
+
+Object3D.matrixAutoUpdate
+

boolean - default true

+
+ +
+
+Object3D.matrixWorldNeedsUpdate
+

boolean - default true

+
+ +
+
+Object3D.rotationAutoUpdate
+

boolean - default true

+
+ +

Methods

+
+
+Object3D.translate (distance, axis)
+

Translates object along arbitrary axis by distance

+ +++ + + + +
Arguments:
    +
  • distance (float) – distance
  • +
  • axis (Vector3) – translation direction
  • +
+
+
+ +
+
+Object3D.translateX (distance)
+

Translates object along X-axis by distance

+ +++ + + + +
Arguments:
    +
  • distance (float) – distance
  • +
+
+
+ +
+
+Object3D.translateY (distance)
+

Translates object along Y-axis by distance

+ +++ + + + +
Arguments:
    +
  • distance (float) – distance
  • +
+
+
+ +
+
+Object3D.translateZ (distance)
+

Translates object along Z-axis by distance

+ +++ + + + +
Arguments:
    +
  • distance (float) – distance
  • +
+
+
+ +
+
+Object3D.lookAt (vector)
+

Rotates object to face point in space

+ +++ + + + +
Arguments: +
+
+ +
+
+Object3D.add (object)
+

Adds child object to this object

+ +++ + + + +
Arguments: +
+
+ +
+
+Object3D.remove (object)
+

Removes child object from this object

+ +++ + + + +
Arguments: +
+
+ +
+
+Object3D.getChildByName (name, doRecurse)
+

Gets first child with name matching the argument (searches whole subgraph recursively if flag is set).

+ +++ + + + + + + + +
Arguments:
    +
  • name (string) – child name
  • +
  • doRecurse (boolean) – recurse flag
  • +
+
Returns:

child with matching name or undefined

+
Rtype :

Object3D()

+
+
+ +
+
+Object3D.updateMatrix ()
+

Updates local transform

+
+ +
+
+Object3D.updateMatrixWorld (force)
+

Updates global transform of the object and its children

+
+ +

Example

+
+ + +
+
+
+
+
+

Previous topic

+

Matrix4 - A 4x4 Matrix

+

Next topic

+

Projector - Utilities for projecting primitives between spaces

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Projector.html b/docs/_old/_build/html/api/core/Projector.html new file mode 100644 index 0000000000..6adeda5ddc --- /dev/null +++ b/docs/_old/_build/html/api/core/Projector.html @@ -0,0 +1,121 @@ + + + + + + + + Projector - Utilities for projecting primitives between spaces — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Projector - Utilities for projecting primitives between spaces

+

Constructor

+
+
+class Projector()
+

Utilities for projecting primitives between spaces

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

Previous topic

+

Object3D - Base class for scene graph objects

+

Next topic

+

Quaternion - Implementation of a quaternion

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Quaternion.html b/docs/_old/_build/html/api/core/Quaternion.html new file mode 100644 index 0000000000..abefc236ba --- /dev/null +++ b/docs/_old/_build/html/api/core/Quaternion.html @@ -0,0 +1,442 @@ + + + + + + + + Quaternion - Implementation of a quaternion — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Quaternion - Implementation of a quaternion

+

Constructor

+
+
+class Quaternion(x, y, z, w)
+

Implementation of a quaternion

+ +++ + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
  • y (float) – y-coordinate
  • +
  • z (float) – z-coordinate
  • +
  • w (float) – w-coordinate
  • +
+
+
+ +

Attributes

+
+
+Quaternion.x
+

float - default 0

+
+ +
+
+Quaternion.y
+

float - default 0

+
+ +
+
+Quaternion.z
+

float - default 0

+
+ +
+
+Quaternion.w
+

float - default 1

+
+ +

Methods

+
+
+Quaternion.clone()
+

Clones this quaternion

+ +++ + + + + + +
Returns:New instance identical to this quaternion
Rtype :Quaternion()
+
+ +
+
+Quaternion.set(x, y, z, w)
+

Sets value of this vector

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
  • y (float) – y-coordinate
  • +
  • z (float) – z-coordinate
  • +
  • w (float) – w-coordinate
  • +
+
Returns:

This quaternion

+
Rtype :

Quaternion()

+
+
+ +
+
+Quaternion.copy(q)
+

Copies value of q to this quaternion

+ +++ + + + + + + + +
Arguments: +
Returns:

This quaternion

+
Rtype :

Quaternion()

+
+
+ +
+
+Quaternion.setFromEuler (vec3)
+

Sets this quaternion from rotation specified by Euler angles

+

Angles are in degrees

+ +++ + + + + + + + +
Arguments:
    +
  • vec3 (Vector3) – Euler angles vector
  • +
+
Returns:

This quaternion

+
Rtype :

Quaternion()

+
+
+ +
+
+Quaternion.setFromAxisAngle (axis, angle)
+

Sets this quaternion from rotation specified by axis and angle

+

Adapted from: http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm

+

Axis have to be normalized, angle is in radians

+ +++ + + + + + + + +
Arguments:
    +
  • axis (Vector3) – axis vector
  • +
  • angle (float) – angle
  • +
+
Returns:

This quaternion

+
Rtype :

Quaternion()

+
+
+ +
+
+Quaternion.setFromRotationMatrix (m)
+

Sets this quaternion from rotation specified by matrix

+

Adapted from: http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm

+ +++ + + + + + + + +
Arguments:
    +
  • m (Matrix4) – rotation matrix
  • +
+
Returns:

This quaternion

+
Rtype :

Quaternion()

+
+
+ +
+
+Quaternion.calculateW()
+

Calculates w component of this quaternion

+ +++ + + + + + +
Returns:This quaternion
Rtype :Quaternion()
+
+ +
+
+Quaternion.inverse()
+

Inverts this quaternion

+ +++ + + + + + +
Returns:This quaternion
Rtype :Quaternion()
+
+ +
+
+Quaternion.length()
+

Computes length of this quaternion

+ +++ + + + + + +
Returns:length
Rtype :float
+
+ +
+
+Quaternion.normalize()
+

Normalizes this quaternion

+ +++ + + + + + +
Returns:This vector
Rtype :Quaternion()
+
+ +
+
+Quaternion.multiplySelf(quat2)
+

Multiplies this quaternion by quat2

+ +++ + + + + + + + +
Arguments: +
Returns:

This quaternion

+
Rtype :

Quaternion()

+
+
+ +
+
+Quaternion.multiply(q1, q2)
+

Sets this quaternion to q1 * q2

+

Adapted from: http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm

+ +++ + + + + + + + +
Arguments: +
Returns:

This quaternion

+
Rtype :

Quaternion()

+
+
+ +
+
+Quaternion.multiplyVector3(vec, dest)
+

Rotates vec by this quaternion into dest

+

If dest is not specified, result goes to vec

+ +++ + + + + + + + +
Arguments:
    +
  • vec (Vector3) – source vector
  • +
  • dest (Vector3) – destination vector
  • +
+
Returns:

Rotated vector

+
Rtype :

Vector3()

+
+
+ +

Example

+
var q = new THREE.Quaternion();
+q.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 );
+
+var v = new THREE.Vector3( 1, 0, 0 );
+q.multiplyVector3( v );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Projector - Utilities for projecting primitives between spaces

+

Next topic

+

Ray - Representation of a ray in space

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Ray.html b/docs/_old/_build/html/api/core/Ray.html new file mode 100644 index 0000000000..952cf6f9bf --- /dev/null +++ b/docs/_old/_build/html/api/core/Ray.html @@ -0,0 +1,121 @@ + + + + + + + + Ray - Representation of a ray in space — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Ray - Representation of a ray in space

+

Constructor

+
+
+class Ray()
+

Representation of a ray in space

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

Previous topic

+

Quaternion - Implementation of a quaternion

+

Next topic

+

Rectangle - Represents a 2D rectangle

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Rectangle.html b/docs/_old/_build/html/api/core/Rectangle.html new file mode 100644 index 0000000000..f7efc30f4a --- /dev/null +++ b/docs/_old/_build/html/api/core/Rectangle.html @@ -0,0 +1,121 @@ + + + + + + + + Rectangle - Represents a 2D rectangle — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Rectangle - Represents a 2D rectangle

+

Constructor

+
+
+class Rectangle()
+

Represents a 2D rectangle

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

Previous topic

+

Ray - Representation of a ray in space

+

Next topic

+

Spline - Represents a spline

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Spline.html b/docs/_old/_build/html/api/core/Spline.html new file mode 100644 index 0000000000..5be47dffa4 --- /dev/null +++ b/docs/_old/_build/html/api/core/Spline.html @@ -0,0 +1,121 @@ + + + + + + + + Spline - Represents a spline — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Spline - Represents a spline

+

Constructor

+
+
+class Spline()
+

Represents a spline

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

Previous topic

+

Rectangle - Represents a 2D rectangle

+

Next topic

+

UV - A texture coordinate

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/UV.html b/docs/_old/_build/html/api/core/UV.html new file mode 100644 index 0000000000..b61d8cd599 --- /dev/null +++ b/docs/_old/_build/html/api/core/UV.html @@ -0,0 +1,161 @@ + + + + + + + + UV - A texture coordinate — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

UV - A texture coordinate

+

Constructor

+
+
+class UV(u, v)
+

A texture coordinate

+ +++ + + + +
Arguments:
    +
  • u (float) – u coordinate
  • +
  • v (float) – v coordinate
  • +
+
+
+ +

Attributes

+
+
+UV.u
+
+ +
+
+UV.v
+
+ +

Method

+
+
+UV.set(u, v)
+
+ +
+
+UV.copy(uv)
+
+ +
+
+UV.clone()
+
+ +

Example

+
var uv = new THREE.UV( 0, 1 );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Spline - Represents a spline

+

Next topic

+

Vector2 - 2D vector

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Vector2.html b/docs/_old/_build/html/api/core/Vector2.html new file mode 100644 index 0000000000..88253a26ef --- /dev/null +++ b/docs/_old/_build/html/api/core/Vector2.html @@ -0,0 +1,509 @@ + + + + + + + + Vector2 - 2D vector — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Vector2 - 2D vector

+

Constructor

+
+
+class Vector2(x, y)
+

2D vector

+ +++ + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
  • y (float) – y-coordinate
  • +
+
+
+ +

Attributes

+
+
+Vector2.x
+

float - default 0

+
+ +
+
+Vector2.y
+

float - default 0

+
+ +

Methods

+
+
+Vector2.clone()
+

Clones this vector

+ +++ + + + + + +
Returns:New instance identical to this vector
Rtype :Vector2()
+
+ +
+
+Vector2.set(x, y)
+

Sets value of this vector

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
  • y (float) – y-coordinate
  • +
+
Returns:

This vector

+
Rtype :

Vector2()

+
+
+ +
+
+Vector2.copy(v)
+

Copies value of v to this vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector2()

+
+
+ +
+
+Vector2.add(v1, v2)
+

Sets this vector to v1 + v2

+ +++ + + + + + + + +
Arguments:
    +
  • v1 (Vector2) – source vector 1
  • +
  • v2 (Vector2) – source vector 2
  • +
+
Returns:

This vector

+
Rtype :

Vector2()

+
+
+ +
+
+Vector2.addSelf(v)
+

Adds v to this vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector2()

+
+
+ +
+
+Vector2.sub(v1, v2)
+

Sets this vector to v1 - v2

+ +++ + + + +
Arguments:
    +
  • v1 (Vector2) – source vector 1
  • +
  • v2 (Vector2) – source vector 2
  • +
+
+
+ +
+
+Vector2.subSelf(v)
+

Subtracts v from this vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector2()

+
+
+ +
+
+Vector2.multiplyScalar(s)
+

Multiplies this vector by scalar s

+ +++ + + + + + + + +
Arguments:
    +
  • s (float) – scalar
  • +
+
Returns:

This vector

+
Rtype :

Vector2()

+
+
+ +
+
+Vector2.divideScalar(s)
+

Divides this vector by scalar s

+

Set vector to ( 0, 0 ) if s == 0

+ +++ + + + + + + + +
Arguments:
    +
  • s (float) – scalar
  • +
+
Returns:

This vector

+
Rtype :

Vector2()

+
+
+ +
+
+Vector2.negate()
+

Inverts this vector

+ +++ + + + + + +
Returns:This vector
Rtype :Vector2()
+
+ +
+
+Vector2.dot(v)
+

Computes dot product of this vector and v

+ +++ + + + + + +
Returns:dot product
Rtype :float
+
+ +
+
+Vector2.lengthSq()
+

Computes squared length of this vector

+ +++ + + + + + +
Returns:squared length
Rtype :float
+
+ +
+
+Vector2.length()
+

Computes length of this vector

+ +++ + + + + + +
Returns:length
Rtype :float
+
+ +
+
+Vector2.normalize()
+

Normalizes this vector

+ +++ + + + + + +
Returns:This vector
Rtype :Vector2()
+
+ +
+
+Vector2.distanceTo(v)
+

Computes distance of this vector to v

+ +++ + + + + + +
Returns:squared distance
Rtype :float
+
+ +
+
+Vector2.distanceToSquared(v)
+

Computes squared distance of this vector to v

+ +++ + + + + + +
Returns:squared distance
Rtype :float
+
+ +
+
+Vector2.setLength(l)
+

Normalizes this vector and multiplies it by l

+ +++ + + + + + +
Returns:This vector
Rtype :Vector2()
+
+ +
+
+Vector2.equals(v)
+

Checks for strict equality of this vector and v

+ +++ + + + + + +
Returns:true if this vector equals v
Rtype :boolean
+
+ +
+
+Vector2.isZero()
+

Checks if length of this vector is within small epsilon (0.0001)

+ +++ + + + + + +
Returns:true if this vector is zero
Rtype :boolean
+
+ +

Example

+
var a = new THREE.Vector2( 0, 1 );
+var b = new THREE.Vector2( 1, 0 );
+
+var d = a.distanceTo( b );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

UV - A texture coordinate

+

Next topic

+

Vector3 - 3D vector

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Vector3.html b/docs/_old/_build/html/api/core/Vector3.html new file mode 100644 index 0000000000..dc84f3ae24 --- /dev/null +++ b/docs/_old/_build/html/api/core/Vector3.html @@ -0,0 +1,725 @@ + + + + + + + + Vector3 - 3D vector — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Vector3 - 3D vector

+

Constructor

+
+
+class Vector3()
+

3D vector

+ +++ + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
  • y (float) – y-coordinate
  • +
  • z (float) – z-coordinate
  • +
+
+
+ +

Attributes

+
+
+Vector3.x
+

float - default 0

+
+ +
+
+Vector3.y
+

float - default 0

+
+ +
+
+Vector3.z
+

float - default 0

+
+ +

Methods

+
+
+Vector3.clone()
+

Clones this vector

+ +++ + + + + + +
Returns:New instance identical to this vector
Rtype :Vector3()
+
+ +
+
+Vector3.set(x, y, z)
+

Sets value of this vector

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
  • y (float) – y-coordinate
  • +
  • z (float) – z-coordinate
  • +
+
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.setX(x)
+

Sets x-value of this vector

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
+
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.setY(y)
+

Sets y-value of this vector

+ +++ + + + + + + + +
Arguments:
    +
  • y (float) – y-coordinate
  • +
+
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.setZ(z)
+

Sets z-value of this vector

+ +++ + + + + + + + +
Arguments:
    +
  • z (float) – z-coordinate
  • +
+
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.copy(v)
+

Copies value of v to this vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.add(v1, v2)
+

Sets this vector to v1 + v2

+ +++ + + + + + + + +
Arguments:
    +
  • v1 (Vector3) – source vector 1
  • +
  • v2 (Vector3) – source vector 2
  • +
+
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.addSelf(v)
+

Adds v to this vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.sub(v1, v2)
+

Sets this vector to v1 - v2

+ +++ + + + +
Arguments:
    +
  • v1 (Vector3) – source vector 1
  • +
  • v2 (Vector3) – source vector 2
  • +
+
+
+ +
+
+Vector3.subSelf(v)
+

Subtracts v from this vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.multiplyScalar(s)
+

Multiplies this vector by scalar s

+ +++ + + + + + + + +
Arguments:
    +
  • s (float) – scalar
  • +
+
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.divideScalar(s)
+

Divides this vector by scalar s

+

Set vector to ( 0, 0, 0 ) if s == 0

+ +++ + + + + + + + +
Arguments:
    +
  • s (float) – scalar
  • +
+
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.negate()
+

Inverts this vector

+ +++ + + + + + +
Returns:This vector
Rtype :Vector3()
+
+ +
+
+Vector3.dot(v)
+

Computes dot product of this vector and v

+ +++ + + + + + + + +
Arguments: +
Returns:

dot product

+
Rtype :

float

+
+
+ +
+
+Vector3.lengthSq()
+

Computes squared length of this vector

+ +++ + + + + + +
Returns:squared length
Rtype :float
+
+ +
+
+Vector3.length()
+

Computes length of this vector

+ +++ + + + + + +
Returns:length
Rtype :float
+
+ +
+
+Vector3.lengthManhattan()
+

Computes Manhattan length of this vector

+

http://en.wikipedia.org/wiki/Taxicab_geometry

+ +++ + + + + + +
Returns:length
Rtype :float
+
+ +
+
+Vector3.normalize()
+

Normalizes this vector

+ +++ + + + + + +
Returns:This vector
Rtype :Vector3()
+
+ +
+
+Vector3.distanceTo(v)
+

Computes distance of this vector to v

+ +++ + + + + + + + +
Arguments: +
Returns:

squared distance

+
Rtype :

float

+
+
+ +
+
+Vector3.distanceToSquared(v)
+

Computes squared distance of this vector to v

+ +++ + + + + + + + +
Arguments: +
Returns:

squared distance

+
Rtype :

float

+
+
+ +
+
+Vector3.setLength(l)
+

Normalizes this vector and multiplies it by l

+ +++ + + + + + +
Returns:This vector
Rtype :Vector3()
+
+ +
+
+Vector3.cross(a, b)
+

Sets this vector to cross product of a and b

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.crossSelf(v)
+

Sets this vector to cross product of itself and v

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.setPositionFromMatrix(m)
+

Sets this vector extracting position from matrix transform

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.setRotationFromMatrix(m)
+

Sets this vector extracting Euler angles rotation from matrix transform

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector3()

+
+
+ +
+
+Vector3.equals(v)
+

Checks for strict equality of this vector and v

+ +++ + + + + + + + +
Arguments: +
Returns:

true if this vector equals v

+
Rtype :

boolean

+
+
+ +
+
+Vector3.isZero()
+

Checks if length of this vector is within small epsilon (0.0001)

+ +++ + + + + + +
Returns:true if this vector is zero
Rtype :boolean
+
+ +

Example

+
var a = new THREE.Vector3( 1, 0, 0 );
+var b = new THREE.Vector3( 0, 1, 0 );
+
+var c = new THREE.Vector3();
+c.cross( a, b );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Vector2 - 2D vector

+

Next topic

+

Vector4 - 4D vector

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Vector4.html b/docs/_old/_build/html/api/core/Vector4.html new file mode 100644 index 0000000000..e0fa7181ba --- /dev/null +++ b/docs/_old/_build/html/api/core/Vector4.html @@ -0,0 +1,490 @@ + + + + + + + + Vector4 - 4D vector — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Vector4 - 4D vector

+

Constructor

+
+
+class Vector4(x, y, z, w)
+

4D vector

+ +++ + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
  • y (float) – y-coordinate
  • +
  • z (float) – z-coordinate
  • +
  • w (float) – w-coordinate
  • +
+
+
+ +

Attributes

+
+
+Vector4.x
+

float - default 0

+
+ +
+
+Vector4.y
+

float - default 0

+
+ +
+
+Vector4.z
+

float - default 0

+
+ +
+
+Vector4.w
+

float - default 1

+
+ +

Methods

+
+
+Vector4.clone()
+

Clones this vector

+ +++ + + + + + +
Returns:New instance identical to this vector
Rtype :Vector4()
+
+ +
+
+Vector4.set(x, y, z, w)
+

Sets value of this vector

+ +++ + + + + + + + +
Arguments:
    +
  • x (float) – x-coordinate
  • +
  • y (float) – y-coordinate
  • +
  • z (float) – z-coordinate
  • +
  • w (float) – w-coordinate
  • +
+
Returns:

This vector

+
Rtype :

Vector4()

+
+
+ +
+
+Vector4.copy(v)
+

Copies value of v to this vector

+

Sets w to 1 if v.w is undefined

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector4()

+
+
+ +
+
+Vector4.add(v1, v2)
+

Sets this vector to v1 + v2

+ +++ + + + + + + + +
Arguments:
    +
  • v1 (Vector4) – source vector 1
  • +
  • v2 (Vector4) – source vector 2
  • +
+
Returns:

This vector

+
Rtype :

Vector4()

+
+
+ +
+
+Vector4.addSelf(v)
+

Adds v to this vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector4()

+
+
+ +
+
+Vector4.sub(v1, v2)
+

Sets this vector to v1 - v2

+ +++ + + + +
Arguments:
    +
  • v1 (Vector4) – source vector 1
  • +
  • v2 (Vector4) – source vector 2
  • +
+
+
+ +
+
+Vector4.subSelf(v)
+

Subtracts v from this vector

+ +++ + + + + + + + +
Arguments: +
Returns:

This vector

+
Rtype :

Vector4()

+
+
+ +
+
+Vector4.multiplyScalar(s)
+

Multiplies this vector by scalar s

+ +++ + + + + + + + +
Arguments:
    +
  • s (float) – scalar
  • +
+
Returns:

This vector

+
Rtype :

Vector4()

+
+
+ +
+
+Vector4.divideScalar(s)
+

Divides this vector by scalar s

+

Set vector to ( 0, 0, 0, 1 ) if s == 0

+ +++ + + + + + + + +
Arguments:
    +
  • s (float) – scalar
  • +
+
Returns:

This vector

+
Rtype :

Vector4()

+
+
+ +
+
+Vector4.negate()
+

Inverts this vector

+ +++ + + + + + +
Returns:This vector
Rtype :Vector4()
+
+ +
+
+Vector4.dot(v)
+

Computes dot product of this vector and v

+ +++ + + + + + + + +
Arguments: +
Returns:

dot product

+
Rtype :

float

+
+
+ +
+
+Vector4.lengthSq()
+

Computes squared length of this vector

+ +++ + + + + + +
Returns:squared length
Rtype :float
+
+ +
+
+Vector4.length()
+

Computes length of this vector

+ +++ + + + + + +
Returns:length
Rtype :float
+
+ +
+
+Vector4.normalize()
+

Normalizes this vector

+ +++ + + + + + +
Returns:This vector
Rtype :Vector4()
+
+ +
+
+Vector4.setLength(l)
+

Normalizes this vector and multiplies it by l

+ +++ + + + + + +
Returns:This vector
Rtype :Vector4()
+
+ +
+
+Vector4.lerpSelf(v, alpha)
+

Linearly interpolate between this vector and v with alpha factor

+ +++ + + + + + + + +
Arguments:
    +
  • v (Vector4) – vector
  • +
  • alpha (float) – interpolation factor
  • +
+
Returns:

This vector

+
Rtype :

Vector4()

+
+
+ +

Example

+
var a = new THREE.Vector4( 1, 0, 0, 0 );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Vector3 - 3D vector

+

Next topic

+

Vertex - Represents a vertex in space

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/Vertex.html b/docs/_old/_build/html/api/core/Vertex.html new file mode 100644 index 0000000000..8b19c3adcb --- /dev/null +++ b/docs/_old/_build/html/api/core/Vertex.html @@ -0,0 +1,121 @@ + + + + + + + + Vertex - Represents a vertex in space — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Vertex - Represents a vertex in space

+

Constructor

+
+
+class Vertex()
+

Represents a vertex in space

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

Previous topic

+

Vector4 - 4D vector

+

Next topic

+

Lights

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/core/index.html b/docs/_old/_build/html/api/core/index.html new file mode 100644 index 0000000000..ecddbf4536 --- /dev/null +++ b/docs/_old/_build/html/api/core/index.html @@ -0,0 +1,132 @@ + + + + + + + + Core — three.js v48dev documentation + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/extras/core/Curve.html b/docs/_old/_build/html/api/extras/core/Curve.html new file mode 100644 index 0000000000..96f41c877b --- /dev/null +++ b/docs/_old/_build/html/api/extras/core/Curve.html @@ -0,0 +1,98 @@ + + + + + + + + Curve - Extensible curve object — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ +
+

Curve - Extensible curve object

+

Constructor

+
+
+class Curve()
+

Extensible curve object

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/extras/core/CurvePath.html b/docs/_old/_build/html/api/extras/core/CurvePath.html new file mode 100644 index 0000000000..34b04a8a03 --- /dev/null +++ b/docs/_old/_build/html/api/extras/core/CurvePath.html @@ -0,0 +1,98 @@ + + + + + + + + CurvePath - Path with connected curves — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ +
+

CurvePath - Path with connected curves

+

Constructor

+
+
+class CurvePath()
+

A Path made with connected set of curves

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/extras/core/Path.html b/docs/_old/_build/html/api/extras/core/Path.html new file mode 100644 index 0000000000..b3057a3816 --- /dev/null +++ b/docs/_old/_build/html/api/extras/core/Path.html @@ -0,0 +1,98 @@ + + + + + + + + Path - A CurvePath with a Drawing API — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ +
+

Path - A CurvePath with a Drawing API

+

Constructor

+
+
+class Path()
+

A CurvePath with convenience Drawing methods

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/extras/core/Shape.html b/docs/_old/_build/html/api/extras/core/Shape.html new file mode 100644 index 0000000000..95dd09d241 --- /dev/null +++ b/docs/_old/_build/html/api/extras/core/Shape.html @@ -0,0 +1,98 @@ + + + + + + + + Shape - A closed 2d path with holes — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ +
+

Shape - A closed 2d path with holes

+

Constructor

+
+
+class Shape()
+

A closed 2d Path with holes

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/extras/core/TextPath.html b/docs/_old/_build/html/api/extras/core/TextPath.html new file mode 100644 index 0000000000..2c99f11ccd --- /dev/null +++ b/docs/_old/_build/html/api/extras/core/TextPath.html @@ -0,0 +1,98 @@ + + + + + + + + TextPath - Class for turning Text to Shapes — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ +
+

TextPath - Class for turning Text to Shapes

+

Constructor

+
+
+class TextPath()
+

Class for turning Text to Shapes

+
+ +

Attributes

+

Method

+

Example(s)

+
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/extras/core/index.html b/docs/_old/_build/html/api/extras/core/index.html new file mode 100644 index 0000000000..108451ed79 --- /dev/null +++ b/docs/_old/_build/html/api/extras/core/index.html @@ -0,0 +1,88 @@ + + + + + + + + Core Extras — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ +
+

Core Extras

+
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/extras/index.html b/docs/_old/_build/html/api/extras/index.html new file mode 100644 index 0000000000..d99cfe6bf2 --- /dev/null +++ b/docs/_old/_build/html/api/extras/index.html @@ -0,0 +1,88 @@ + + + + + + + + Extras — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ +
+

Extras

+
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/lights/AmbientLight.html b/docs/_old/_build/html/api/lights/AmbientLight.html new file mode 100644 index 0000000000..45b85ae635 --- /dev/null +++ b/docs/_old/_build/html/api/lights/AmbientLight.html @@ -0,0 +1,144 @@ + + + + + + + + AmbientLight - An ambient light — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

AmbientLight - An ambient light

+

Constructor

+
+
+class AmbientLight(hex)
+

An ambient light

+

Inherits from Light() Object3D()

+

Affects MeshLambertMaterial() and MeshPhongMaterial()

+ +++ + + + +
Arguments:
    +
  • hex (integer) – light color
  • +
+
+
+ +

Attributes

+
+
+AmbientLight.color
+

Light Color()

+

Material’s ambient color gets multiplied by this color.

+
+ +

Example

+
var ambientLight = new THREE.AmbientLight( 0x333333 );
+scene.add( ambientLight );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Light - Abstract base class for lights

+

Next topic

+

DirectionalLight - A directional light

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/lights/DirectionalLight.html b/docs/_old/_build/html/api/lights/DirectionalLight.html new file mode 100644 index 0000000000..d7ee3babae --- /dev/null +++ b/docs/_old/_build/html/api/lights/DirectionalLight.html @@ -0,0 +1,267 @@ + + + + + + + + DirectionalLight - A directional light — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

DirectionalLight - A directional light

+

Constructor

+
+
+class DirectionalLight(hex, intensity, distance)
+

A directional light

+

Part of scene graph

+

Inherits from Light() Object3D()

+

Affects MeshLambertMaterial() and MeshPhongMaterial()

+ +++ + + + +
Arguments:
    +
  • hex (integer) – light color
  • +
  • intensity (float) – light intensity
  • +
  • distance (float) – distance affected by light
  • +
+
+
+ +

Attributes

+
+
+DirectionalLight.color
+

Light Color()

+
+ +
+
+DirectionalLight.intensity
+

Light intensity

+

default 1.0

+
+ +
+
+DirectionalLight.position
+

Direction of the light is normalized vector from position to (0,0,0).

+
+ +
+
+DirectionalLight.distance
+

Modulating directional light by distance not implemented in WebGLRenderer()

+
+ +

Shadow attributes

+
+
+DirectionalLight.castShadow
+

If set to true light will cast dynamic shadows

+

Warning: this is expensive and requires tweaking to get shadows looking right.

+

default false

+
+ +
+
+DirectionalLight.onlyShadow
+

If set to true light will only cast shadow but not contribute any lighting (as if intensity was 0 but cheaper to compute)

+

default false

+
+ +
+
+DirectionalLight.target
+

Object3D() target used for shadow camera orientation

+
+ +
+
+DirectionalLight.shadowCameraNear
+

Orthographic shadow camera frustum parameter

+

default 50

+
+ +
+
+DirectionalLight.shadowCameraFar
+

Orthographic shadow camera frustum parameter

+

default 5000

+
+ +
+
+DirectionalLight.shadowCameraLeft
+

Orthographic shadow camera frustum parameter

+

default -500

+
+ +
+
+DirectionalLight.shadowCameraRight
+

Orthographic shadow camera frustum parameter

+

default 500

+
+ +
+
+DirectionalLight.shadowCameraTop
+

Orthographic shadow camera frustum parameter

+

default 500

+
+ +
+
+DirectionalLight.shadowCameraBottom
+

Orthographic shadow camera frustum parameter

+

default -500

+
+ +
+
+DirectionalLight.shadowCameraVisible
+

Show debug shadow camera frustum

+

default false

+
+ +
+
+DirectionalLight.shadowBias
+

Shadow map bias

+

default 0

+
+ +
+
+DirectionalLight.shadowDarkness
+

Darkness of shadow casted by this light (float from 0 to 1)

+

default 0.5

+
+ +
+
+DirectionalLight.shadowMapWidth
+

Shadow map texture width in pixels

+

default 512

+
+ +
+
+DirectionalLight.shadowMapHeight
+

Shadow map texture height in pixels

+

default 512

+
+ +

Example

+
// white directional light at half intensity shining from the top
+
+var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
+directionalLight.position.set( 0, 1, 0 );
+scene.add( directionalLight );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

AmbientLight - An ambient light

+

Next topic

+

PointLight - A point light

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/lights/Light.html b/docs/_old/_build/html/api/lights/Light.html new file mode 100644 index 0000000000..91b137307a --- /dev/null +++ b/docs/_old/_build/html/api/lights/Light.html @@ -0,0 +1,137 @@ + + + + + + + + Light - Abstract base class for lights — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Light - Abstract base class for lights

+

Constructor

+
+
+class Light(hex)
+

Abstract base class for lights

+

Inherits from Object3D()

+ +++ + + + +
Arguments:
    +
  • hex (integer) – light color
  • +
+
+
+ +

Attributes

+
+
+Light.color
+

Light Color()

+
+ +
+ + +
+
+
+
+
+

Previous topic

+

Lights

+

Next topic

+

AmbientLight - An ambient light

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/lights/PointLight.html b/docs/_old/_build/html/api/lights/PointLight.html new file mode 100644 index 0000000000..d8bcffcec9 --- /dev/null +++ b/docs/_old/_build/html/api/lights/PointLight.html @@ -0,0 +1,168 @@ + + + + + + + + PointLight - A point light — three.js v48dev documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

PointLight - A point light

+

Constructor

+
+
+class PointLight(hex, intensity, distance)
+

A point light

+

Part of scene graph

+

Inherits from Light() Object3D()

+

Affects MeshLambertMaterial() and MeshPhongMaterial()

+ +++ + + + +
Arguments:
    +
  • hex (integer) – light color
  • +
  • intensity (float) – light intensity
  • +
  • distance (float) – distance affected by light
  • +
+
+
+ +

Attributes

+
+
+PointLight.color
+

Light Color()

+
+ +
+
+PointLight.intensity
+

Light intensity

+

default 1.0

+
+ +
+
+PointLight.position
+

Position of the light

+
+ +
+
+PointLight.distance
+

If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance

+
+ +

Example

+
// red point light shining from the front
+
+var pointLight = new THREE.PointLight( 0xff0000 );
+pointLight.position.set( 0, 0, 10 );
+scene.add( pointLight );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

DirectionalLight - A directional light

+

Next topic

+

SpotLight - A spotlight

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/lights/SpotLight.html b/docs/_old/_build/html/api/lights/SpotLight.html new file mode 100644 index 0000000000..8eb7d02613 --- /dev/null +++ b/docs/_old/_build/html/api/lights/SpotLight.html @@ -0,0 +1,247 @@ + + + + + + + + SpotLight - A spotlight — three.js v48dev documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

SpotLight - A spotlight

+

Constructor

+
+
+class SpotLight(hex, intensity, distance, castShadow)
+

A point light that can cast shadow in one direction

+

Part of scene graph

+

Inherits from Light() Object3D()

+

Affects MeshLambertMaterial() and MeshPhongMaterial()

+ +++ + + + +
Arguments:
    +
  • hex (integer) – light color
  • +
  • intensity (float) – light intensity
  • +
  • distance (float) – distance affected by light
  • +
  • castShadow (bool) – shadow casting
  • +
+
+
+ +

Attributes

+
+
+SpotLight.color
+

Light Color()

+
+ +
+
+SpotLight.intensity
+

Light intensity

+

default 1.0

+
+ +
+
+SpotLight.position
+

Position of the light

+
+ +
+
+SpotLight.distance
+

If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance

+
+ +

Shadow attributes

+
+
+SpotLight.castShadow
+

If set to true light will cast dynamic shadows

+

Warning: this is expensive and requires tweaking to get shadows looking right.

+

default false

+
+ +
+
+SpotLight.onlyShadow
+

If set to true light will only cast shadow but not contribute any lighting (as if intensity was 0 but cheaper to compute)

+

default false

+
+ +
+
+SpotLight.target
+

Object3D() target used for shadow camera orientation

+
+ +
+
+SpotLight.shadowCameraNear
+

Perspective shadow camera frustum near

+

default 50

+
+ +
+
+SpotLight.shadowCameraFar
+

Perspective shadow camera frustum far

+

default 5000

+
+ +
+
+SpotLight.shadowCameraFov
+

Perspective shadow camera frustum field-of-view

+

default 50

+
+ +
+
+SpotLight.shadowCameraVisible
+

Show debug shadow camera frustum

+

default false

+
+ +
+
+SpotLight.shadowBias
+

Shadow map bias

+

default 0

+
+ +
+
+SpotLight.shadowDarkness
+

Darkness of shadow casted by this light (float from 0 to 1)

+

default 0.5

+
+ +
+
+SpotLight.shadowMapWidth
+

Shadow map texture width in pixels

+

default 512

+
+ +
+
+SpotLight.shadowMapHeight
+

Shadow map texture height in pixels

+

default 512

+
+ +

Example

+
// white spotlight shining from the side, casting shadow
+
+var spotLight = new THREE.SpotLight( 0xffffff );
+spotLight.position.set( 100, 1000, 100 );
+
+spotLight.castShadow = true;
+
+spotLight.shadowMapWidth = 1024;
+spotLight.shadowMapHeight = 1024;
+
+spotLight.shadowCameraNear = 500;
+spotLight.shadowCameraFar = 4000;
+spotLight.shadowCameraFov = 30;
+
+scene.add( spotLight );
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

PointLight - A point light

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/api/lights/index.html b/docs/_old/_build/html/api/lights/index.html new file mode 100644 index 0000000000..edf6fe304b --- /dev/null +++ b/docs/_old/_build/html/api/lights/index.html @@ -0,0 +1,117 @@ + + + + + + + + Lights — three.js v48dev documentation + + + + + + + + + + + + + +
+ +
+
+

Previous topic

+

Vertex - Represents a vertex in space

+

Next topic

+

Light - Abstract base class for lights

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/changelog.html b/docs/_old/_build/html/changelog.html new file mode 100644 index 0000000000..9ff4a6c60c --- /dev/null +++ b/docs/_old/_build/html/changelog.html @@ -0,0 +1,807 @@ + + + + + + + + Changelog — three.js v48dev documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

Changelog

+
+

2011 11 17 - r46 (343.383 KB, gzip: 87.468 KB)

+
    +
  • Added reflections to Normal Mapping. +(alteredq)
  • +
  • Ray now checks also object children. +(mrdoob)
  • +
  • *Loader.load( parameters ) to +*Loader( url, callback, texturePath ). +(mrdoob and +alteredq)
  • +
  • Reworked scene graph setup. (mrdoob and +alteredq)
  • +
  • Fixed CanvasRenderer‘s SphericalReflectionMapping rendering. +(mrdoob)
  • +
  • Improved SubdivisionModifier. (zz85)
  • +
  • Refactored *Controls to use externally supplied time delta. +(alteredq)
  • +
  • Improvements to CombinedCamera. +(zz85)
  • +
  • ColladaLoader doesn’t create extra Object3D. +(mrdoob)
  • +
  • Improvements to Lambert and Phong materials. +(alteredq)
  • +
  • Removed multi-materials for simplicity reasons. (Multi-materials will +come back with MeshLayerMaterial hopefully soon) +(alteredq)
  • +
  • Fixed Ray not considering edges. +(mrdoob)
  • +
  • Massive cleanup to WebGLRenderer. +(alteredq)
  • +
  • Ray optimisations. (mrdoob and +alteredq)
  • +
  • JSON file format is now worker-less (this was crashing Chrome/Firefox +with dealing with many assets). +(alteredq)
  • +
  • Improved CubeGeometry, PlaneGeometry, IcosahedronGeometry +and SphereGeometry. (mrdoob)
  • +
  • Improvements to Curve. (zz85)
  • +
  • Removed Collisions code and focusing on Ray. +(mrdoob)
  • +
  • Added cloneObject() method to SceneUtils. +(alteredq)
  • +
+
+
+

2011 10 06 - r45 (340.863 KB, gzip: 86.568 KB)

+
    +
  • Object/Scene.add*() and Object/Scene.remove*() are now +Object/Scene.add() and Object/Scene.remove(). +(mrdoob)
  • +
  • LOD.add() is now LOD.addLevel(). +(mrdoob)
  • +
  • Reworked CylinderGeometry. (mrdoob)
  • +
  • Added .depthWrite and .fog to Material. +(alteredq)
  • +
  • Added .applyMatrix to Geometry. +(mrdoob)
  • +
  • Improved postprocessing stack in /examples/js/postprocessing. +(alteredq)
  • +
  • Added a realistic skin shading example. +(alteredq)
  • +
  • Started of a GUI for composing scenes and autogenerate code. +(mrdoob)
  • +
  • Added .center() to GeometryUtils. +(alteredq)
  • +
  • Fixed buggy scenegraph manipulation (adding/removing objects). +(jsermeno, +alteredq and +skython)
  • +
  • Renamed MeshShaderMaterial to ShaderMaterial. +(alteredq)
  • +
  • Fixed CanvasRenderer ignoring color of SmoothShading``ed +``MeshLambertMaterial. (mrdoob)
  • +
  • Renamed renderer.data to renderer.info. +(mrdoob)
  • +
  • Fixed ShadowMap aspect ratio. (kig and +alteredq)
  • +
  • Fixed Loader‘s extractUrlbase() incorrect output for short +urls. (rectalogic and +alteredq)
  • +
  • Added .color and .visible support to Sprite. +(alteredq)
  • +
  • Added Face4, Vertex Colors and Maya support to ColladaLoader. +(mrdoob)
  • +
  • Rewrite of lighting shader code. +(alteredq)
  • +
  • Improved internal array concatenation approach. +(pyrotechnick)
  • +
  • WebGLRenderer performance improvements. +(alteredq)
  • +
  • Added lower level immediate rendering support to WebGLRenderer. +(NINE78 and +alteredq)
  • +
  • Added CubeCamera for rendering cubemaps. +(alteredq)
  • +
  • Improved GeometryUtils‘s .mergeVertices() performance. +(zz85)
  • +
  • Removed Camera‘s .target. +(mrdoob)
  • +
  • WebGLRenderer‘s .clear() is now +.clear( color, depth, stencil ). +(mrdoob)
  • +
  • Added .autoClearColor, .autoClearDepth and +.autoClearStencil to WebGLRenderer. +(mrdoob and +alteredq)
  • +
  • Added OctahedronGeometry. +(clockworkgeek)
  • +
  • Splitted Camera into PerspectiveCamera and +OrthographicCamera. (mrdoob and +alteredq)
  • +
  • Special cameras are now *Controls. +(alteredq and +mrdoob)
  • +
  • Added SubdivisionModifier. (zz85)
  • +
  • Projector‘s unprojectVector() now also works with +OrthographicCamera. (jsermeno)
  • +
  • Added .setLens() method to PerspectiveCamera. +(zz85)
  • +
  • Added Shadow Maps, Texture‘s .offset and .repeat and +reflections support to Normal Map shader. +(alteredq)
  • +
+
+
+

2011 09 04 - r44 (330.356 KB, gzip: 84.039 KB)

+
    +
  • Added ColladaLoader. (timknip2)
  • +
  • Improved ExtrudeGeometry. (zz85)
  • +
  • Fixed CylinderGeometry normals. +(alteredq)
  • +
  • Fixed issue with WebGLRenderer.setTexture +(rectalogic)
  • +
  • Fixed TorusGeometry normals. +(mrdoob)
  • +
  • Fixed Ray behind-ray intersects. +(mrdoob)
  • +
  • Added OrthoCamera. (alteredq)
  • +
  • Refactored postprocessing effects used in some examples. +(alteredq)
  • +
  • Added .deallocateObject() and .deallocateTexture() methods to +WebGLRenderer. (mrdoob)
  • +
  • Fixed a glitch in normal and phong shader. +(evanw and +alteredq)
  • +
  • Added .frustumCulled property to Object3D. +(alteredq and +mrdoob)
  • +
+
+
+

2011 08 14 - r43 (298.199 KB, gzip: 74.805 KB)

+
    +
  • Improved Blender exporter - 2.58 (and 2.59) support, normals maps, +specular, ao maps... (alteredq)
  • +
  • Added CORS to ImageUtils. +(mrdoob)
  • +
  • Refactored TextGeometry and added Shape, Curve, Path, +ExtrudeGeometry, TextPath. (zz85 +and alteredq)
  • +
  • Added handling of custom attributes for ParticleSystems. +(alteredq)
  • +
  • Fixed CanvasRenderer.setClearColor. +(mrdoob, +StephenHopkins and +sebleedelisle)
  • +
  • Improved uniform handling in WebGLRenderer. +(alteredq)
  • +
  • Implemented Shadow Mapping in WebGLRenderer. +(alteredq)
  • +
  • Added Spotlight light type. +(alteredq)
  • +
  • Fixed constructor-less prototypes. +(pushmatrix)
  • +
  • Added DataTexture. (alteredq)
  • +
  • WebGLRenderer opaque pass now renders from front to back. +(alteredq)
  • +
  • Simplified Color. (mrdoob)
  • +
  • Added preserveDrawingBuffer option to WebGLRenderer. +(jeromeetienne)
  • +
  • Added UTF8Loader for loading the new, uber compressed, UTF8 +format. +(alteredq)
  • +
  • CanvasRenderer now supports RepeatWrapping, +texture.offset and texture.repeat. +(mrdoob)
  • +
  • Removed Stencil Shadows and Lensflare code. +(mrdoob)
  • +
+
+
+

2011 07 06 - r42 (277.852 KB, gzip: 69.469 KB)

+
    +
  • Added AnaglypWebGLRenderer and CrosseyedWebGLRenderer. +(mrdoob, +alteredq and +marklundin)
  • +
  • Added TextGeometry. (zz85 and +alteredq)
  • +
  • Added setViewOffset method to Camera. +(greggman)
  • +
  • Renamed geometries to *Geometry. +(mrdoob)
  • +
  • Improved Blender exporter. (alteredq, +sweetfish and +Jhonnyg)
  • +
  • Added Blender 2.58 exporter. (georgik)
  • +
  • Fixed Matrix4.multiply(). (thanks +lukem1)
  • +
  • Added support for additional Euler rotation orders in Matrix4. +(rectalogic)
  • +
  • Renamed QuakeCamera to FirstPersonCamera. +(chriskillpack)
  • +
  • Improved Normal Map Shader. +(alteredq)
  • +
  • Collision now supports Object3D.flipSided and +Object3D.doubleSided. (NINE78)
  • +
  • Removed most of SceneUtils methods. +(mrdoob)
  • +
  • Removed Sound object and SoundRenderer. +(mrdoob)
  • +
+
+
+

2011 05 31 - r41/ROME (265.317 KB, gzip: 64.849 KB)

+

(Up to this point, some RO.ME specific features +managed to get in the lib. The aim is to clean this up in next +revisions.)

+
    +
  • Improved Blender Object and Scene exporters. +(alteredq)
  • +
  • Fixes on WebGL attributes. (alteredq +and empaempa)
  • +
  • Reduced overall memory footprint. +(mrdoob)
  • +
  • Added Face4 support to CollisionSystem. +(NINE78)
  • +
  • Added Blender 2.57 exporter. (remoe)
  • +
  • Added Particle support to Ray. +(mrdoob and +jaycrossler)
  • +
  • Improved Ray.intersectObject performance by checking +boundingSphere first. (mrdoob)
  • +
  • Added TrackballCamera. +(egraether)
  • +
  • Added repeat and offset properties to Texture. +(mrdoob and +alteredq)
  • +
  • Cleaned up Vector2, Vector3 and Vector4. +(egraether)
  • +
+
+
+

2011 04 24 - r40 (263.774 KB, gzip: 64.320 KB)

+
    +
  • Fixed Object3D.lookAt. (mrdoob)
  • +
  • More and more Blender exporter goodness. +(alteredq and +mrdoob)
  • +
  • Improved CollisionSystem. +(drojdjou and +alteredq)
  • +
  • Fixes on WebGLRenderer. (empaempa)
  • +
  • Added Trident object. +(sroucheray)
  • +
  • Added data object to Renderers for getting number of +vertices/faces/callDraws from last render. +(mrdoob)
  • +
  • Fixed Projector handling Particles with hierarchies. +(mrdoob)
  • +
+
+
+

2011 04 09 - r39 (249.048 KB, gzip: 61.020 KB)

+
    +
  • Improved WebGLRenderer program cache. +(alteredq)
  • +
  • Added support for pre-computed edges in loaders and exporters. +(alteredq)
  • +
  • Added Collisions classes. +(drojdjou)
  • +
  • Added Sprite object. (empaempa)
  • +
  • Fixed *Loader issue where Workers were kept alive and next loads +were delayed. (alteredq)
  • +
  • Added THREE namespace to all the classes that missed it. +(mrdoob)
  • +
+
+
+

2011 03 31 - r38 (225.442 KB, gzip: 55.908 KB)

+
    +
  • Added LensFlare light. (empaempa)
  • +
  • Added ShadowVolume object (stencil shadows). +(empaempa)
  • +
  • Improved Blender Exporter plus added Scene support. +(alteredq)
  • +
  • Blender Importer for loading JSON files. +(alteredq)
  • +
  • Added load/complete callbacks to Loader +(mrdoob)
  • +
  • Minor WebGL blend mode clean up. +(mrdoob)
  • +
  • *Materials now extend Material +(mrdoob)
  • +
  • material.transparent define whether material is transparent or +not (before we were guessing). (mrdoob)
  • +
  • Added internal program cache to WebGLRenderer (reuse already +available programs). (mrdoob)
  • +
+
+
+

2011 03 22 - r37 (208.495 KB, gzip: 51.376 KB)

+
    +
  • Changed JSON file format. (Re-exporting of models required) +(alteredq and +mrdoob)
  • +
  • Updated Blender and 3DSMAX exporters for new format. +(alteredq)
  • +
  • Vertex colors are now per-face +(alteredq)
  • +
  • Geometry.uvs is now a multidimensional array (allowing infinite +uv sets) (alteredq)
  • +
  • CanvasRenderer renders Face4 again (without spliting to 2 +Face3) (mrdoob)
  • +
  • ParticleCircleMaterial > ParticleCanvasMaterial. Allowing +injecting any canvas.context code! +(mrdoob)
  • +
+
+
+

2011 03 14 - r36 (194.547 KB, gzip: 48.608 KB)

+
    +
  • Added 3DSMAX exporter. (alteredq)
  • +
  • Fixed WebGLRenderer aspect ratio bug when scene had only one +material. (mrdoob)
  • +
  • Added sizeAttenuation property to ParticleBasicMaterial. +(mrdoob)
  • +
  • Added PathCamera. (alteredq)
  • +
  • Fixed WebGLRenderer bug when Camera has a parent. +Camera``Camera.updateMatrix`` method. +(empaempa)
  • +
  • Fixed Camera.updateMatrix method and Object3D.updateMatrix. +(mrdoob)
  • +
+
+
+

2011 03 06 - r35 (187.875 KB, gzip: 46.433 KB)

+
    +
  • Added methods translate, translateX, translateY, +translateZ and lookAt methods to Object3D. +(mrdoob)
  • +
  • Added methods setViewport and setScissor to +WebGLRenderer. (alteredq)
  • +
  • Added support for non-po2 textures. +(mrdoob and +alteredq)
  • +
  • Minor API clean up. (mrdoob)
  • +
+
+
+

2011 03 02 - r34 (186.045 KB, gzip: 45.953 KB)

+
    +
  • Now using camera.matrixWorldInverse instead of camera.matrixWorld for +projecting. (empaempa and +mrdoob)
  • +
  • Camel cased properties and object json format (Re-exporting of +models required) (alteredq)
  • +
  • Added QuakeCamera for easy fly-bys +(alteredq)
  • +
  • Added LOD example (alteredq)
  • +
+
+
+

2011 02 26 - r33 (184.483 KB, gzip: 45.580 KB)

+
    +
  • Changed build setup (build/Three.js now also include extras) +(mrdoob)
  • +
  • Added ParticleSystem object to WebGLRenderer +(alteredq)
  • +
  • Added Line support to WebGLRenderer +(alteredq)
  • +
  • Added vertex colors support to WebGLRenderer +(alteredq)
  • +
  • Added Ribbon object. (alteredq)
  • +
  • Added updateable textures support to WebGLRenderer +(alteredq)
  • +
  • Added Sound object and SoundRenderer. +(empaempa)
  • +
  • LOD, Bone, SkinnedMesh objects and hierarchy being +developed. (empaempa)
  • +
  • Added hierarchies examples (mrdoob)
  • +
+
+
+

2010 12 31 - r32 (89.301 KB, gzip: 21.351 KB)

+
    +
  • Scene now supports Fog and FogExp2. WebGLRenderer +only right now. (alteredq)
  • +
  • Added setClearColor( hex, opacity ) to WebGLRenderer and +CanvasRenderer (alteredq & +mrdoob)
  • +
  • WebGLRenderer shader system refactored improving performance. +(alteredq)
  • +
  • Projector now does frustum culling of all the objects using their +sphereBoundingBox. (thx errynp)
  • +
  • material property changed to materials globaly.
  • +
+
+
+

2010 12 06 - r31 (79.479 KB, gzip: 18.788 KB)

+
    +
  • Minor Materials API change (mappings). +(alteredq & +mrdoob)
  • +
  • Added Filters to WebGLRenderer
  • +
  • python build.py --includes generates includes string
  • +
+
+
+

2010 11 30 - r30 (77.809 KB, gzip: 18.336 KB)

+
    +
  • Reflection and Refraction materials support in WebGLRenderer +(alteredq)
  • +
  • SmoothShading support on +CanvasRenderer/MeshLambertMaterial
  • +
  • MeshShaderMaterial for WebGLRenderer +(alteredq)
  • +
  • Removed RenderableFace4 from Projector/CanvasRenderer +(maybe just temporary).
  • +
  • Added extras folder with GeometryUtils, ImageUtils, +SceneUtils and ShaderUtils +(alteredq & +mrdoob)
  • +
  • Blender 2.5x Slim now the default exporter (old exporter removed).
  • +
+
+
+

2010 11 17 - r29 (69.563 KB)

+
    +
  • New materials API Still work in progress, but mostly there. +(alteredq & +mrdoob)
  • +
  • Line clipping in CanvasRenderer +(julianwa)
  • +
  • Refactored CanvasRenderer and SVGRenderer. +(mrdoob)
  • +
  • Switched to Closure compiler.
  • +
+
+
+

2010 11 04 - r28 (62.802 KB)

+
    +
  • Loader class allows load geometry asynchronously at runtime. +(alteredq)
  • +
  • MeshPhongMaterial working with WebGLRenderer. +(alteredq)
  • +
  • Support for huge objects. Max 500k polys and counting. +(alteredq)
  • +
  • Projector.unprojectVector and Ray class to check +intersections with faces (based on +mindlapse work)
  • +
  • Fixed Projector z-sorting (not as jumpy anymore).
  • +
  • Fixed Orthographic projection (was y-inverted).
  • +
  • Hmmm.. lib file size starting to get too big...
  • +
+
+
+

2010 10 28 - r25 (54.480 KB)

+
    +
  • WebGLRenderer now up to date with other renderers! +(alteredq)
  • +
  • .obj to .js python converter +(alteredq)
  • +
  • Blender 2.54 exporter
  • +
  • Added MeshFaceMaterial (multipass per face)
  • +
  • Reworked CanvasRenderer and SVGRenderer material handling
  • +
+
+
+

2010 10 06 - r18 (44.420 KB)

+
    +
  • Added PointLight
  • +
  • CanvasRenderer and SVGRenderer basic lighting support +(ColorStroke/ColorFill only)
  • +
  • Renderer > Projector. CanvasRenderer, SVGRenderer and +DOMRenderer do not extend anymore
  • +
  • Added computeCentroids method to Geometry
  • +
+
+
+

2010 09 17 - r17 (39.487 KB)

+
    +
  • Added Light, AmbientLight and DirectionalLight +(philogb)
  • +
  • WebGLRenderer basic lighting support +(philogb)
  • +
  • Memory optimisations
  • +
+
+
+

2010 08 21 - r16 (35.592 KB)

+
    +
  • Workaround for Opera bug (clearRect not working with context with +negative scale)
  • +
  • Additional Matrix4 and Vector3 methods
  • +
+
+
+

2010 07 23 - r15 (32.440 KB)

+
    +
  • Using new object UV instead of Vector2 where it should be +used
  • +
  • Added Mesh.flipSided boolean (false by default)
  • +
  • CanvasRenderer was handling UVs at 1,1 as bitmapWidth, +bitmapHeight (instead of bitmapWidth - 1, bitmapHeight - 1)
  • +
  • ParticleBitmapMaterial.offset added
  • +
  • Fixed gap when rendering Face4 with +MeshBitmapUVMappingMaterial
  • +
+
+
+

2010 07 17 - r14 (32.144 KB)

+
    +
  • Refactored CanvasRenderer (more duplicated code, but easier to +handle)
  • +
  • Face4 now supports MeshBitmapUVMappingMaterial
  • +
  • Changed order of *StrokeMaterial parameters. Now it’s color, +opacity, lineWidth.
  • +
  • BitmapUVMappingMaterial > MeshBitmapUVMappingMaterial
  • +
  • ColorFillMaterial > MeshColorFillMaterial
  • +
  • ColorStrokeMaterial > MeshColorStrokeMaterial
  • +
  • FaceColorFillMaterial > MeshFaceColorFillMaterial
  • +
  • FaceColorStrokeMaterial > MeshFaceColorStrokeMaterial
  • +
  • ColorStrokeMaterial > LineColorMaterial
  • +
  • Rectangle.instersects returned false with rectangles with 0px +witdh or height
  • +
+
+
+

2010 07 12 - r13 (29.492 KB)

+
    +
  • Added ParticleCircleMaterial and ParticleBitmapMaterial
  • +
  • Particle now use ParticleCircleMaterial instead of +ColorFillMaterial
  • +
  • Particle.size > Particle.scale.x and Particle.scale.y
  • +
  • Particle.rotation.z for rotating the particle
  • +
  • SVGRenderer currently out of sync
  • +
+
+
+

2010 07 07 - r12 (28.494 KB)

+
    +
  • First version of the WebGLRenderer (ColorFillMaterial and +FaceColorFillMaterial by now)
  • +
  • Matrix4.lookAt fix (CanvasRenderer and SVGRenderer now +handle the -Y)
  • +
  • Color now using 0-1 floats instead of 0-255 integers
  • +
+
+
+

2010 07 03 - r11 (23.541 KB)

+
    +
  • Blender 2.5 exporter (utils/export_threejs.py) now exports UV and +normals (Thx kikko)
  • +
  • Scene.add > Scene.addObject
  • +
  • Enabled Scene.removeObject
  • +
+
+
+

2010 06 22 - r10 (23.959 KB)

+
    +
  • Changed Camera system. (Thx Paul +Brunt)
  • +
  • Object3D.overdraw = true to enable CanvasRenderer screen space +point expansion hack.
  • +
+
+
+

2010 06 20 - r9 (23.753 KB)

+
    +
  • JSLinted.
  • +
  • autoClear property for renderers.
  • +
  • Removed SVG rgba() workaround for WebKit. (WebKit now supports it)
  • +
  • Fixed matrix bug. (transformed objects outside the x axis would get +infinitely tall :S)
  • +
+
+
+

2010 06 06 - r8 (23.496 KB)

+
    +
  • Moved UVs to Geometry.
  • +
  • CanvasRenderer expands screen space points (workaround for +antialias gaps).
  • +
  • CanvasRenderer supports BitmapUVMappingMaterial.
  • +
+
+
+

2010 06 05 - r7 (22.387 KB)

+
    +
  • Added Line Object.
  • +
  • Workaround for WebKit not supporting rgba() in SVG yet.
  • +
  • No need to call updateMatrix(). Use .autoUpdateMatrix = false if +needed. (Thx Gregory Athons).
  • +
+
+
+

2010 05 17 - r6 (21.003 KB)

+
    +
  • 2d clipping on CanvasRenderer and SVGRenderer
  • +
  • clearRect optimisations on CanvasRenderer
  • +
+
+
+

2010 05 16 - r5 (19.026 KB)

+
    +
  • Removed Class.js dependency
  • +
  • Added THREE namespace
  • +
  • Camera.x -> Camera.position.x
  • +
  • Camera.target.x > Camera.target.position.x
  • +
  • ColorMaterial > ColorFillMaterial
  • +
  • FaceColorMaterial > FaceColorFillMaterial
  • +
  • Materials are now multipass (use array)
  • +
  • Added ColorStrokeMaterial and FaceColorStrokeMaterial
  • +
  • geometry.faces.a are now indexes instead of references
  • +
+
+
+

2010 04 26 - r4 (16.274 KB)

+
    +
  • SVGRenderer Particle rendering
  • +
  • CanvasRenderer uses context.setTransform to avoid extra +calculations
  • +
+
+
+

2010 04 24 - r3 (16.392 KB)

+
    +
  • Fixed incorrect rotation matrix transforms
  • +
  • Added Plane and Cube primitives
  • +
+
+
+

2010 04 24 - r2 (15.724 KB)

+
    +
  • Improved Color handling
  • +
+
+
+

2010 04 24 - r1 (15.25 KB)

+
    +
  • First alpha release
  • +
+
+
+ + +
+
+
+
+
+

Table Of Contents

+ + +

Previous topic

+

three.js - JavaScript 3D library

+

Next topic

+

Tutorials

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/genindex.html b/docs/_old/_build/html/genindex.html new file mode 100644 index 0000000000..7f77c3b2e5 --- /dev/null +++ b/docs/_old/_build/html/genindex.html @@ -0,0 +1,585 @@ + + + + + + + + Index — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ + +

Index

+ +
+ A | C | D | E | F | G | L | M | O | P | Q | R | S | T | U | V +
+

A

+ + + +
+
AmbientLight() (class)
+
+
AmbientLight.color (AmbientLight attribute)
+
+ +

C

+ + + +
+
Camera() (class)
+
Camera.lookAt() (Camera method)
+
Camera.matrixWorldInverse (Camera attribute)
+
Camera.projectionMatrix (Camera attribute)
+
Camera.projectionMatrixInverse (Camera attribute)
+
Clock() (class)
+
Clock.autoStart (Clock attribute)
+
Clock.elapsedTime (Clock attribute)
+
Clock.getDelta() (Clock method)
+
Clock.getElapsedTime() (Clock method)
+
Clock.oldTime (Clock attribute)
+
Clock.running (Clock attribute)
+
Clock.start() (Clock method)
+
Clock.startTime (Clock attribute)
+
Clock.stop() (Clock method)
+
Color() (class)
+
+
Color.b (Color attribute)
+
Color.clone() (Color method)
+
Color.convertGammaToLinear() (Color method)
+
Color.convertLinearToGamma() (Color method)
+
Color.copy() (Color method)
+
Color.copyGammaToLinear() (Color method)
+
Color.copyLinearToGamma() (Color method)
+
Color.g (Color attribute)
+
Color.getContextStyle() (Color method)
+
Color.getHex() (Color method)
+
Color.r (Color attribute)
+
Color.setHex() (Color method)
+
Color.setHSV() (Color method)
+
Color.setRGB() (Color method)
+
Curve() (class)
+
CurvePath() (class)
+
+ +

D

+ + + +
+
DirectionalLight() (class)
+
DirectionalLight.castShadow (DirectionalLight attribute)
+
DirectionalLight.color (DirectionalLight attribute)
+
DirectionalLight.distance (DirectionalLight attribute)
+
DirectionalLight.intensity (DirectionalLight attribute)
+
DirectionalLight.onlyShadow (DirectionalLight attribute)
+
DirectionalLight.position (DirectionalLight attribute)
+
DirectionalLight.shadowBias (DirectionalLight attribute)
+
DirectionalLight.shadowCameraBottom (DirectionalLight attribute)
+
DirectionalLight.shadowCameraFar (DirectionalLight attribute)
+
+
DirectionalLight.shadowCameraLeft (DirectionalLight attribute)
+
DirectionalLight.shadowCameraNear (DirectionalLight attribute)
+
DirectionalLight.shadowCameraRight (DirectionalLight attribute)
+
DirectionalLight.shadowCameraTop (DirectionalLight attribute)
+
DirectionalLight.shadowCameraVisible (DirectionalLight attribute)
+
DirectionalLight.shadowDarkness (DirectionalLight attribute)
+
DirectionalLight.shadowMapHeight (DirectionalLight attribute)
+
DirectionalLight.shadowMapWidth (DirectionalLight attribute)
+
DirectionalLight.target (DirectionalLight attribute)
+
+ +

E

+ + + +
+
Edge() (class)
+
Edge.faceIndices (Edge attribute)
+
Edge.faces (Edge attribute)
+
+
Edge.vertexIndices (Edge attribute)
+
Edge.vertices (Edge attribute)
+
+ +

F

+ + + +
+
Face3() (class)
+
Face3.a (Face3 attribute)
+
Face3.b (Face3 attribute)
+
Face3.c (Face3 attribute)
+
Face3.centroid (Face3 attribute)
+
Face3.color (Face3 attribute)
+
Face3.materialIndex (Face3 attribute)
+
Face3.normal (Face3 attribute)
+
Face3.vertexColors (Face3 attribute)
+
Face3.vertexNormals (Face3 attribute)
+
Face3.vertexTangents (Face3 attribute)
+
Face4() (class)
+
+
Face4.a (Face4 attribute)
+
Face4.b (Face4 attribute)
+
Face4.c (Face4 attribute)
+
Face4.centroid (Face4 attribute)
+
Face4.color (Face4 attribute)
+
Face4.d (Face4 attribute)
+
Face4.materialIndex (Face4 attribute)
+
Face4.normal (Face4 attribute)
+
Face4.vertexColors (Face4 attribute)
+
Face4.vertexNormals (Face4 attribute)
+
Face4.vertexTangents (Face4 attribute)
+
+ +

G

+ + + +
+
Geometry() (class)
+
Geometry.applyMatrix() (Geometry method)
+
Geometry.boundingBox (Geometry attribute)
+
Geometry.boundingSphere (Geometry attribute)
+
Geometry.colors (Geometry attribute)
+
Geometry.computeBoundingBox() (Geometry method)
+
Geometry.computeBoundingSphere() (Geometry method)
+
Geometry.computeCentroids() (Geometry method)
+
Geometry.computeFaceNormals() (Geometry method)
+
Geometry.computeTangents() (Geometry method)
+
Geometry.computeVertexNormals() (Geometry method)
+
Geometry.dynamic (Geometry attribute)
+
+
Geometry.faces (Geometry attribute)
+
Geometry.faceUvs (Geometry attribute)
+
Geometry.faceVertexUvs (Geometry attribute)
+
Geometry.hasTangents (Geometry attribute)
+
Geometry.id (Geometry attribute)
+
Geometry.materials (Geometry attribute)
+
Geometry.mergeVertices() (Geometry method)
+
Geometry.morphColors (Geometry attribute)
+
Geometry.morphTargets (Geometry attribute)
+
Geometry.skinIndices (Geometry attribute)
+
Geometry.skinWeights (Geometry attribute)
+
Geometry.vertices (Geometry attribute)
+
+ +

L

+ + + +
+
Light() (class)
+
+
Light.color (Light attribute)
+
+ +

M

+ + + +
+
Math.clamp() (Math method)
+
Math.clampBottom() (Math method)
+
Math.mapLinear() (Math method)
+
Math.randFloat() (Math method)
+
Math.randFloatSpread() (Math method)
+
Math.randInt() (Math method)
+
Math.random16() (Math method)
+
Matrix3() (class)
+
Matrix3.m (Matrix3 attribute)
+
Matrix3.transpose() (Matrix3 method)
+
Matrix3.transposeIntoArray() (Matrix3 method)
+
Matrix4() (class)
+
Matrix4.clone() (Matrix4 method)
+
Matrix4.compose() (Matrix4 method)
+
Matrix4.copy() (Matrix4 method)
+
Matrix4.crossVector() (Matrix4 method)
+
Matrix4.decompose() (Matrix4 method)
+
Matrix4.determinant() (Matrix4 method)
+
Matrix4.extractPosition() (Matrix4 method)
+
Matrix4.extractRotation() (Matrix4 method)
+
Matrix4.flatten() (Matrix4 method)
+
Matrix4.flattenToArray() (Matrix4 method)
+
Matrix4.flattenToArrayOffset() (Matrix4 method)
+
Matrix4.getColumnX() (Matrix4 method)
+
Matrix4.getColumnY() (Matrix4 method)
+
Matrix4.getColumnZ() (Matrix4 method)
+
Matrix4.getInverse() (Matrix4 method)
+
Matrix4.getPosition() (Matrix4 method)
+
Matrix4.identity() (Matrix4 method)
+
Matrix4.lookAt() (Matrix4 method)
+
Matrix4.makeFrustum() (Matrix4 method)
+
Matrix4.makeInvert3x3() (Matrix4 method)
+
Matrix4.makeOrtho() (Matrix4 method)
+
Matrix4.makePerspective() (Matrix4 method)
+
Matrix4.multiply() (Matrix4 method)
+
Matrix4.multiplyScalar() (Matrix4 method)
+
Matrix4.multiplySelf() (Matrix4 method)
+
+
Matrix4.multiplyToArray() (Matrix4 method)
+
Matrix4.multiplyVector3() (Matrix4 method)
+
Matrix4.multiplyVector4() (Matrix4 method)
+
Matrix4.n11 (Matrix4 attribute)
+
Matrix4.n12 (Matrix4 attribute)
+
Matrix4.n13 (Matrix4 attribute)
+
Matrix4.n14 (Matrix4 attribute)
+
Matrix4.n21 (Matrix4 attribute)
+
Matrix4.n22 (Matrix4 attribute)
+
Matrix4.n23 (Matrix4 attribute)
+
Matrix4.n24 (Matrix4 attribute)
+
Matrix4.n31 (Matrix4 attribute)
+
Matrix4.n32 (Matrix4 attribute)
+
Matrix4.n33 (Matrix4 attribute)
+
Matrix4.n34 (Matrix4 attribute)
+
Matrix4.n41 (Matrix4 attribute)
+
Matrix4.n42 (Matrix4 attribute)
+
Matrix4.n43 (Matrix4 attribute)
+
Matrix4.n44 (Matrix4 attribute)
+
Matrix4.rotateAxis() (Matrix4 method)
+
Matrix4.rotateByAxis() (Matrix4 method)
+
Matrix4.rotateX() (Matrix4 method)
+
Matrix4.rotateY() (Matrix4 method)
+
Matrix4.rotateZ() (Matrix4 method)
+
Matrix4.scale() (Matrix4 method)
+
Matrix4.set() (Matrix4 method)
+
Matrix4.setPosition() (Matrix4 method)
+
Matrix4.setRotationAxis() (Matrix4 method)
+
Matrix4.setRotationFromEuler() (Matrix4 method)
+
Matrix4.setRotationFromQuaternion() (Matrix4 method)
+
Matrix4.setRotationX() (Matrix4 method)
+
Matrix4.setRotationY() (Matrix4 method)
+
Matrix4.setRotationZ() (Matrix4 method)
+
Matrix4.setScale() (Matrix4 method)
+
Matrix4.setTranslation() (Matrix4 method)
+
Matrix4.translate() (Matrix4 method)
+
Matrix4.transpose() (Matrix4 method)
+
+ +

O

+ + + +
+
Object3D() (class)
+
Object3D.add () (Object3D method)
+
Object3D.boundRadius (Object3D attribute)
+
Object3D.boundRadiusScale (Object3D attribute)
+
Object3D.castShadow (Object3D attribute)
+
Object3D.children (Object3D attribute)
+
Object3D.doubleSided (Object3D attribute)
+
Object3D.eulerOrder (Object3D attribute)
+
Object3D.flipSided (Object3D attribute)
+
Object3D.frustumCulled (Object3D attribute)
+
Object3D.getChildByName () (Object3D method)
+
Object3D.id (Object3D attribute)
+
Object3D.lookAt () (Object3D method)
+
Object3D.matrix (Object3D attribute)
+
Object3D.matrixAutoUpdate (Object3D attribute)
+
Object3D.matrixRotationWorld (Object3D attribute)
+
Object3D.matrixWorld (Object3D attribute)
+
Object3D.matrixWorldNeedsUpdate (Object3D attribute)
+
Object3D.name (Object3D attribute)
+
Object3D.parent (Object3D attribute)
+
Object3D.position (Object3D attribute)
+
Object3D.quaternion (Object3D attribute)
+
Object3D.receiveShadow (Object3D attribute)
+
+
Object3D.remove () (Object3D method)
+
Object3D.renderDepth (Object3D attribute)
+
Object3D.rotation (Object3D attribute)
+
Object3D.rotationAutoUpdate (Object3D attribute)
+
Object3D.scale (Object3D attribute)
+
Object3D.translate () (Object3D method)
+
Object3D.translateX () (Object3D method)
+
Object3D.translateY () (Object3D method)
+
Object3D.translateZ () (Object3D method)
+
Object3D.up (Object3D attribute)
+
Object3D.updateMatrix () (Object3D method)
+
Object3D.updateMatrixWorld () (Object3D method)
+
Object3D.useQuaternion (Object3D attribute)
+
Object3D.visible (Object3D attribute)
+
OrthographicCamera() (class)
+
OrthographicCamera.bottom (OrthographicCamera attribute)
+
OrthographicCamera.far (OrthographicCamera attribute)
+
OrthographicCamera.left (OrthographicCamera attribute)
+
OrthographicCamera.near (OrthographicCamera attribute)
+
OrthographicCamera.right (OrthographicCamera attribute)
+
OrthographicCamera.top (OrthographicCamera attribute)
+
OrthographicCamera.updateProjectionMatrix() (OrthographicCamera method)
+
+ +

P

+ + + +
+
Path() (class)
+
PerspectiveCamera() (class)
+
PerspectiveCamera.aspect (PerspectiveCamera attribute)
+
PerspectiveCamera.far (PerspectiveCamera attribute)
+
PerspectiveCamera.fov (PerspectiveCamera attribute)
+
PerspectiveCamera.fullHeight (PerspectiveCamera attribute)
+
PerspectiveCamera.fullWidth (PerspectiveCamera attribute)
+
PerspectiveCamera.height (PerspectiveCamera attribute)
+
PerspectiveCamera.near (PerspectiveCamera attribute)
+
PerspectiveCamera.setLens () (PerspectiveCamera method)
+
PerspectiveCamera.setViewOffset () (PerspectiveCamera method)
+
+
PerspectiveCamera.updateProjectionMatrix() (PerspectiveCamera method)
+
PerspectiveCamera.width (PerspectiveCamera attribute)
+
PerspectiveCamera.x (PerspectiveCamera attribute)
+
PerspectiveCamera.y (PerspectiveCamera attribute)
+
PointLight() (class)
+
PointLight.color (PointLight attribute)
+
PointLight.distance (PointLight attribute)
+
PointLight.intensity (PointLight attribute)
+
PointLight.position (PointLight attribute)
+
Projector() (class)
+
+ +

Q

+ + + +
+
Quaternion() (class)
+
Quaternion.calculateW() (Quaternion method)
+
Quaternion.clone() (Quaternion method)
+
Quaternion.copy() (Quaternion method)
+
Quaternion.inverse() (Quaternion method)
+
Quaternion.length() (Quaternion method)
+
Quaternion.multiply() (Quaternion method)
+
Quaternion.multiplySelf() (Quaternion method)
+
Quaternion.multiplyVector3() (Quaternion method)
+
+
Quaternion.normalize() (Quaternion method)
+
Quaternion.set() (Quaternion method)
+
Quaternion.setFromAxisAngle () (Quaternion method)
+
Quaternion.setFromEuler () (Quaternion method)
+
Quaternion.setFromRotationMatrix () (Quaternion method)
+
Quaternion.w (Quaternion attribute)
+
Quaternion.x (Quaternion attribute)
+
Quaternion.y (Quaternion attribute)
+
Quaternion.z (Quaternion attribute)
+
+ +

R

+ + + +
+
Ray() (class)
+
+
Rectangle() (class)
+
+ +

S

+ + + +
+
Shape() (class)
+
Spline() (class)
+
SpotLight() (class)
+
SpotLight.castShadow (SpotLight attribute)
+
SpotLight.color (SpotLight attribute)
+
SpotLight.distance (SpotLight attribute)
+
SpotLight.intensity (SpotLight attribute)
+
SpotLight.onlyShadow (SpotLight attribute)
+
SpotLight.position (SpotLight attribute)
+
+
SpotLight.shadowBias (SpotLight attribute)
+
SpotLight.shadowCameraFar (SpotLight attribute)
+
SpotLight.shadowCameraFov (SpotLight attribute)
+
SpotLight.shadowCameraNear (SpotLight attribute)
+
SpotLight.shadowCameraVisible (SpotLight attribute)
+
SpotLight.shadowDarkness (SpotLight attribute)
+
SpotLight.shadowMapHeight (SpotLight attribute)
+
SpotLight.shadowMapWidth (SpotLight attribute)
+
SpotLight.target (SpotLight attribute)
+
+ +

T

+ + + +
+
TextPath() (class)
+
+
THREE (global variable or constant)
+
+ +

U

+ + + +
+
UV() (class)
+
UV.clone() (UV method)
+
UV.copy() (UV method)
+
+
UV.set() (UV method)
+
UV.u (UV attribute)
+
UV.v (UV attribute)
+
+ +

V

+ + + +
+
Vector2() (class)
+
Vector2.add() (Vector2 method)
+
Vector2.addSelf() (Vector2 method)
+
Vector2.clone() (Vector2 method)
+
Vector2.copy() (Vector2 method)
+
Vector2.distanceTo() (Vector2 method)
+
Vector2.distanceToSquared() (Vector2 method)
+
Vector2.divideScalar() (Vector2 method)
+
Vector2.dot() (Vector2 method)
+
Vector2.equals() (Vector2 method)
+
Vector2.isZero() (Vector2 method)
+
Vector2.length() (Vector2 method)
+
Vector2.lengthSq() (Vector2 method)
+
Vector2.multiplyScalar() (Vector2 method)
+
Vector2.negate() (Vector2 method)
+
Vector2.normalize() (Vector2 method)
+
Vector2.set() (Vector2 method)
+
Vector2.setLength() (Vector2 method)
+
Vector2.sub() (Vector2 method)
+
Vector2.subSelf() (Vector2 method)
+
Vector2.x (Vector2 attribute)
+
Vector2.y (Vector2 attribute)
+
Vector3() (class)
+
Vector3.add() (Vector3 method)
+
Vector3.addSelf() (Vector3 method)
+
Vector3.clone() (Vector3 method)
+
Vector3.copy() (Vector3 method)
+
Vector3.cross() (Vector3 method)
+
Vector3.crossSelf() (Vector3 method)
+
Vector3.distanceTo() (Vector3 method)
+
Vector3.distanceToSquared() (Vector3 method)
+
Vector3.divideScalar() (Vector3 method)
+
Vector3.dot() (Vector3 method)
+
Vector3.equals() (Vector3 method)
+
Vector3.isZero() (Vector3 method)
+
Vector3.length() (Vector3 method)
+
Vector3.lengthManhattan() (Vector3 method)
+
Vector3.lengthSq() (Vector3 method)
+
+
Vector3.multiplyScalar() (Vector3 method)
+
Vector3.negate() (Vector3 method)
+
Vector3.normalize() (Vector3 method)
+
Vector3.set() (Vector3 method)
+
Vector3.setLength() (Vector3 method)
+
Vector3.setPositionFromMatrix() (Vector3 method)
+
Vector3.setRotationFromMatrix() (Vector3 method)
+
Vector3.setX() (Vector3 method)
+
Vector3.setY() (Vector3 method)
+
Vector3.setZ() (Vector3 method)
+
Vector3.sub() (Vector3 method)
+
Vector3.subSelf() (Vector3 method)
+
Vector3.x (Vector3 attribute)
+
Vector3.y (Vector3 attribute)
+
Vector3.z (Vector3 attribute)
+
Vector4() (class)
+
Vector4.add() (Vector4 method)
+
Vector4.addSelf() (Vector4 method)
+
Vector4.clone() (Vector4 method)
+
Vector4.copy() (Vector4 method)
+
Vector4.divideScalar() (Vector4 method)
+
Vector4.dot() (Vector4 method)
+
Vector4.length() (Vector4 method)
+
Vector4.lengthSq() (Vector4 method)
+
Vector4.lerpSelf() (Vector4 method)
+
Vector4.multiplyScalar() (Vector4 method)
+
Vector4.negate() (Vector4 method)
+
Vector4.normalize() (Vector4 method)
+
Vector4.set() (Vector4 method)
+
Vector4.setLength() (Vector4 method)
+
Vector4.sub() (Vector4 method)
+
Vector4.subSelf() (Vector4 method)
+
Vector4.w (Vector4 attribute)
+
Vector4.x (Vector4 attribute)
+
Vector4.y (Vector4 attribute)
+
Vector4.z (Vector4 attribute)
+
Vertex() (class)
+
+ + + +
+
+
+
+
+ + + + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/index.html b/docs/_old/_build/html/index.html new file mode 100644 index 0000000000..bc5eb23975 --- /dev/null +++ b/docs/_old/_build/html/index.html @@ -0,0 +1,180 @@ + + + + + + + + three.js - JavaScript 3D library — three.js v48dev documentation + + + + + + + + + + + + +
+ +
+
+

Table Of Contents

+ + +

Next topic

+

Changelog

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/objects.inv b/docs/_old/_build/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..095287251bb8265fc7c634232699b68eef2d96e6 GIT binary patch literal 3093 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/html/search.html b/docs/_old/_build/html/search.html new file mode 100644 index 0000000000..d5bb275d33 --- /dev/null +++ b/docs/_old/_build/html/search.html @@ -0,0 +1,95 @@ + + + + + + + + Search — three.js v48dev documentation + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/searchindex.js b/docs/_old/_build/html/searchindex.js new file mode 100644 index 0000000000..02d7802eb0 --- /dev/null +++ b/docs/_old/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({objects:{"":{Projector:[25,2,1],Clock:[31,2,1],Vector2:[9,2,1],Vector3:[10,2,1],Vector4:[11,2,1],THREE:[0,3,1],Face4:[15,2,1],Camera:[8,2,1],Face3:[17,2,1],Rectangle:[18,2,1],TextPath:[19,2,1],Vertex:[24,2,1],Quaternion:[2,2,1],Path:[28,2,1],OrthographicCamera:[1,2,1],Geometry:[29,2,1],Light:[36,2,1],Curve:[5,2,1],Edge:[13,2,1],PointLight:[40,2,1],CurvePath:[35,2,1],DirectionalLight:[37,2,1],Spline:[39,2,1],Object3D:[34,2,1],PerspectiveCamera:[12,2,1],Color:[41,2,1],UV:[3,2,1],Matrix3:[23,2,1],AmbientLight:[26,2,1],Shape:[38,2,1],Matrix4:[21,2,1],SpotLight:[30,2,1],Ray:[22,2,1]},Clock:{startTime:[31,1,1],getDelta:[31,0,1],start:[31,0,1],stop:[31,0,1],elapsedTime:[31,1,1],getElapsedTime:[31,0,1],running:[31,1,1],autoStart:[31,1,1],oldTime:[31,1,1]},Vector2:{normalize:[9,0,1],multiplyScalar:[9,0,1],copy:[9,0,1],sub:[9,0,1],distanceTo:[9,0,1],addSelf:[9,0,1],clone:[9,0,1],equals:[9,0,1],isZero:[9,0,1],divideScalar:[9,0,1],distanceToSquared:[9,0,1],y:[9,1,1],add:[9,0,1],set:[9,0,1],lengthSq:[9,0,1],x:[9,1,1],negate:[9,0,1],length:[9,0,1],subSelf:[9,0,1],setLength:[9,0,1],dot:[9,0,1]},Vector3:{set:[10,0,1],divideScalar:[10,0,1],setPositionFromMatrix:[10,0,1],lengthSq:[10,0,1],lengthManhattan:[10,0,1],negate:[10,0,1],normalize:[10,0,1],subSelf:[10,0,1],sub:[10,0,1],addSelf:[10,0,1],cross:[10,0,1],setLength:[10,0,1],distanceToSquared:[10,0,1],add:[10,0,1],isZero:[10,0,1],clone:[10,0,1],multiplyScalar:[10,0,1],equals:[10,0,1],copy:[10,0,1],setX:[10,0,1],setY:[10,0,1],setZ:[10,0,1],setRotationFromMatrix:[10,0,1],crossSelf:[10,0,1],distanceTo:[10,0,1],length:[10,0,1],y:[10,1,1],x:[10,1,1],z:[10,1,1],dot:[10,0,1]},Vector4:{normalize:[11,0,1],clone:[11,0,1],z:[11,1,1],sub:[11,0,1],subSelf:[11,0,1],addSelf:[11,0,1],lerpSelf:[11,0,1],multiplyScalar:[11,0,1],length:[11,0,1],divideScalar:[11,0,1],negate:[11,0,1],add:[11,0,1],set:[11,0,1],lengthSq:[11,0,1],w:[11,1,1],y:[11,1,1],x:[11,1,1],copy:[11,0,1],setLength:[11,0,1],dot:[11,0,1]},Object3D:{"updateMatrix ":[34,0,1],"translateY ":[34,0,1],boundRadius:[34,1,1],matrixRotationWorld:[34,1,1],rotationAutoUpdate:[34,1,1],matrixWorldNeedsUpdate:[34,1,1],matrixWorld:[34,1,1],"lookAt ":[34,0,1],doubleSided:[34,1,1],useQuaternion:[34,1,1],children:[34,1,1],"remove ":[34,0,1],scale:[34,1,1],matrix:[34,1,1],id:[34,1,1],castShadow:[34,1,1],matrixAutoUpdate:[34,1,1],"translate ":[34,0,1],"translateX ":[34,0,1],parent:[34,1,1],eulerOrder:[34,1,1],flipSided:[34,1,1],"translateZ ":[34,0,1],quaternion:[34,1,1],"getChildByName ":[34,0,1],rotation:[34,1,1],renderDepth:[34,1,1],name:[34,1,1],visible:[34,1,1],up:[34,1,1],boundRadiusScale:[34,1,1],receiveShadow:[34,1,1],"add ":[34,0,1],frustumCulled:[34,1,1],position:[34,1,1],"updateMatrixWorld ":[34,0,1]},Camera:{matrixWorldInverse:[8,1,1],projectionMatrix:[8,1,1],lookAt:[8,0,1],projectionMatrixInverse:[8,1,1]},Face3:{a:[17,1,1],c:[17,1,1],b:[17,1,1],normal:[17,1,1],color:[17,1,1],vertexColors:[17,1,1],vertexNormals:[17,1,1],centroid:[17,1,1],materialIndex:[17,1,1],vertexTangents:[17,1,1]},Math:{randFloat:[6,0,1],clamp:[6,0,1],clampBottom:[6,0,1],randInt:[6,0,1],mapLinear:[6,0,1],randFloatSpread:[6,0,1],random16:[6,0,1]},Quaternion:{normalize:[2,0,1],inverse:[2,0,1],copy:[2,0,1],set:[2,0,1],multiplySelf:[2,0,1],clone:[2,0,1],"setFromAxisAngle ":[2,0,1],multiply:[2,0,1],length:[2,0,1],multiplyVector3:[2,0,1],"setFromRotationMatrix ":[2,0,1],w:[2,1,1],calculateW:[2,0,1],y:[2,1,1],x:[2,1,1],z:[2,1,1],"setFromEuler ":[2,0,1]},OrthographicCamera:{right:[1,1,1],bottom:[1,1,1],far:[1,1,1],top:[1,1,1],near:[1,1,1],updateProjectionMatrix:[1,0,1],left:[1,1,1]},Geometry:{computeTangents:[29,0,1],dynamic:[29,1,1],colors:[29,1,1],mergeVertices:[29,0,1],boundingSphere:[29,1,1],id:[29,1,1],morphColors:[29,1,1],hasTangents:[29,1,1],computeCentroids:[29,0,1],faceVertexUvs:[29,1,1],computeVertexNormals:[29,0,1],computeBoundingSphere:[29,0,1],morphTargets:[29,1,1],computeFaceNormals:[29,0,1],boundingBox:[29,1,1],skinIndices:[29,1,1],computeBoundingBox:[29,0,1],faceUvs:[29,1,1],vertices:[29,1,1],materials:[29,1,1],applyMatrix:[29,0,1],skinWeights:[29,1,1],faces:[29,1,1]},Light:{color:[36,1,1]},Edge:{faceIndices:[13,1,1],vertexIndices:[13,1,1],vertices:[13,1,1],faces:[13,1,1]},PointLight:{color:[40,1,1],distance:[40,1,1],intensity:[40,1,1],position:[40,1,1]},DirectionalLight:{shadowCameraTop:[37,1,1],position:[37,1,1],onlyShadow:[37,1,1],target:[37,1,1],distance:[37,1,1],color:[37,1,1],shadowMapHeight:[37,1,1],shadowCameraNear:[37,1,1],shadowMapWidth:[37,1,1],shadowCameraVisible:[37,1,1],shadowDarkness:[37,1,1],intensity:[37,1,1],shadowCameraBottom:[37,1,1],castShadow:[37,1,1],shadowCameraFar:[37,1,1],shadowBias:[37,1,1],shadowCameraRight:[37,1,1],shadowCameraLeft:[37,1,1]},Face4:{a:[15,1,1],c:[15,1,1],b:[15,1,1],d:[15,1,1],normal:[15,1,1],color:[15,1,1],vertexColors:[15,1,1],vertexNormals:[15,1,1],centroid:[15,1,1],materialIndex:[15,1,1],vertexTangents:[15,1,1]},PerspectiveCamera:{fov:[12,1,1],far:[12,1,1],fullHeight:[12,1,1],fullWidth:[12,1,1],height:[12,1,1],"setViewOffset ":[12,0,1],width:[12,1,1],near:[12,1,1],"setLens ":[12,0,1],aspect:[12,1,1],x:[12,1,1],y:[12,1,1],updateProjectionMatrix:[12,0,1]},Color:{convertLinearToGamma:[41,0,1],r:[41,1,1],b:[41,1,1],getHex:[41,0,1],g:[41,1,1],setHex:[41,0,1],clone:[41,0,1],copyGammaToLinear:[41,0,1],setHSV:[41,0,1],copyLinearToGamma:[41,0,1],setRGB:[41,0,1],copy:[41,0,1],convertGammaToLinear:[41,0,1],getContextStyle:[41,0,1]},UV:{clone:[3,0,1],set:[3,0,1],u:[3,1,1],copy:[3,0,1],v:[3,1,1]},SpotLight:{distance:[30,1,1],position:[30,1,1],onlyShadow:[30,1,1],castShadow:[30,1,1],color:[30,1,1],shadowMapHeight:[30,1,1],shadowCameraFar:[30,1,1],shadowMapWidth:[30,1,1],shadowCameraVisible:[30,1,1],shadowDarkness:[30,1,1],shadowBias:[30,1,1],intensity:[30,1,1],shadowCameraNear:[30,1,1],shadowCameraFov:[30,1,1],target:[30,1,1]},AmbientLight:{color:[26,1,1]},Matrix4:{n12:[21,1,1],n13:[21,1,1],n11:[21,1,1],rotateAxis:[21,0,1],makeFrustum:[21,0,1],n14:[21,1,1],determinant:[21,0,1],setScale:[21,0,1],n23:[21,1,1],set:[21,0,1],lookAt:[21,0,1],flatten:[21,0,1],n31:[21,1,1],n32:[21,1,1],n33:[21,1,1],n34:[21,1,1],n21:[21,1,1],makeOrtho:[21,0,1],compose:[21,0,1],setRotationAxis:[21,0,1],rotateByAxis:[21,0,1],rotateX:[21,0,1],rotateY:[21,0,1],rotateZ:[21,0,1],identity:[21,0,1],setRotationFromQuaternion:[21,0,1],multiplyToArray:[21,0,1],getInverse:[21,0,1],translate:[21,0,1],clone:[21,0,1],makeInvert3x3:[21,0,1],setRotationZ:[21,0,1],setRotationX:[21,0,1],setRotationY:[21,0,1],flattenToArrayOffset:[21,0,1],crossVector:[21,0,1],n41:[21,1,1],getColumnX:[21,0,1],n43:[21,1,1],n42:[21,1,1],transpose:[21,0,1],extractPosition:[21,0,1],getColumnZ:[21,0,1],n44:[21,1,1],scale:[21,0,1],extractRotation:[21,0,1],multiply:[21,0,1],n22:[21,1,1],setPosition:[21,0,1],copy:[21,0,1],getPosition:[21,0,1],n24:[21,1,1],setRotationFromEuler:[21,0,1],makePerspective:[21,0,1],getColumnY:[21,0,1],flattenToArray:[21,0,1],multiplySelf:[21,0,1],multiplyVector3:[21,0,1],multiplyVector4:[21,0,1],multiplyScalar:[21,0,1],setTranslation:[21,0,1],decompose:[21,0,1]},Matrix3:{transposeIntoArray:[23,0,1],transpose:[23,0,1],m:[23,1,1]}},terms:{represent:[14,22,7],all:[29,21,33],code:[29,2,33,21,4],edg:[14,33,7,13],control:33,global:34,getcolumnx:21,focus:33,getcolumnz:21,scalar:[9,10,11],updatematrixworld:34,meshlambertmateri:[40,33,26,4,37,30],n31:21,n32:21,n33:21,n34:21,getcolumni:21,hashmap:29,instanc:[41,2,34,29,21,10,11,9],depend:33,frustumcul:[34,33],graph:[40,1,14,33,34,37,7,30,12],focal:12,articl:21,program:33,vec:2,autostart:31,lengthmanhattan:10,ippolito:41,sent:29,r16:33,r17:33,r14:33,sourc:[2,4,21,10,11,9],r12:33,string:[41,21,34,33],r10:33,setviewoffset:[12,33],far:[1,21,30,12,4],setlen:[12,33],sethex:41,r18:33,util:[14,6,33,7,25],radiu:29,fall:4,veri:[14,4],affect:[40,26,37,30],export_threej:33,chriskillpack:33,doesn:[34,33],level:[14,33],meshphongmateri:[40,26,37,30,33],gui:33,"3x2":12,random:[29,41,6],vector:[14,2,34,37,7,8,9,10,11,21],red:[41,40],georgik:33,small:[9,10],refer:[21,33],setrotationfromeul:21,taxicab_geometri:10,properti:33,repres:[24,14,41,18,7,39],intial:41,matrixrotationworld:34,htm:[2,21],skin:[29,33],direct:[14,34,37,42,30],getposit:21,zero:[40,15,17,9,10,30],asp:21,shaderutil:33,follow:4,"500k":33,run:31,colorfil:33,"4x4":[14,21,7],ribbon:[29,33],blue:41,index:[14,33,15,2,17,29,21],r13:33,gethex:41,clock:[14,31,7],multiplytoarrai:21,vector2:[14,9,7,33],vector3:[14,33,15,2,34,17,29,7,8,21,10],vector4:[14,33,29,7,21,11],calcul:[2,33,4],children:[34,33],current:33,delet:29,version:33,gamedev:21,intersect:33,shadowcameranear:[37,30],"new":[40,1,33,15,30,2,26,41,4,29,37,3,17,9,10,11,21,12],net:[14,21],hmmm:33,method:[1,2,8,5,6,3,9,10,11,12,41,18,19,21,22,23,24,25,28,29,33,34,35,39,31,38],colladaload:33,cull:33,full:12,autogener:33,gener:33,unmodifi:23,onli:[33,37,30,4],lensflar:33,closur:33,multiplyvector3:[2,21],tangent:[15,29,17],path:[35,38,28,33],along:34,vertic:[14,33,29,7,21,12,13],blend:33,setviewport:33,valu:[2,23,41,6,9,10,11,21],box:29,shadowcameratop:37,perspectivecamera:[14,32,12,33],computeboundingspher:29,convers:[41,2],anymor:33,larger:[6,12],autoclearstencil:33,innerheight:[1,12],setlength:[9,10,11],setposit:21,targetnam:29,implement:[14,33,2,41,37,7],trackballcamera:33,pixel:[37,30,4],setrotationz:21,"800x400":4,firefox:33,extra:[16,20,33],appli:[6,21],modul:37,offset:[21,12,33],getchildbynam:34,linearli:[40,11,30],glitch:33,"boolean":[9,10,34,33],applymatrix:[29,33],visibl:[34,33],unit:4,sphereboundingbox:33,addchild:4,from:[40,1,34,33,15,30,2,26,4,41,36,6,37,8,17,9,10,11,21,12],flattentoarrayoffset:21,would:[12,33],memori:33,facevertexuv:29,multiplyscalar:[9,10,11,21],two:[14,7,13],dividescalar:[9,10,11],few:4,getelapsedtim:31,call:[1,12,33],asset:33,cylindergeometri:33,shadowcamerafov:30,com:[29,2,21,12],type:[29,21,33,4],curvepath:[35,28],minor:33,more:33,sort:[34,33],flat:21,shadowdark:[37,30],computecentroid:[29,33],fullfram:12,factor:11,vi2:13,flag:[29,34],vi1:13,prototyp:33,webkit:33,removeobject:33,hole:38,given:41,cach:33,must:[29,1,12],fly:33,word:14,dest:2,setup:[33,12,4],work:[33,4],uniqu:[29,34],warn:[37,30],autoupdatematrix:33,setrotationi:21,bake:[29,34],can:[29,21,30],rework:33,meshfacecolorstrokemateri:33,gregori:33,aliv:33,colorstrokemateri:33,setrotationx:21,encapsul:29,slim:33,collisionsystem:33,indic:[15,14,29,17],high:6,sphere:29,mergevertic:[29,33],minimum:6,setpositionfrommatrix:10,r29:33,r28:33,r25:33,skython:33,particlebasicmateri:33,delai:33,huge:33,multipl:29,divid:[9,10,11,4],colorutil:41,r11:33,"0xffffff":[41,37,30],length:[2,10,11,9,12],how:4,clockworkgeek:33,oldtim:31,fourth:4,instead:[34,33],bit:6,simpl:[21,4],css:41,updat:[29,1,34,12,33],convertlineartogamma:41,product:[9,10,11],rectalog:33,computefacenorm:29,algebra:[2,21],computetang:29,max:[29,33],clone:[14,2,41,3,21,10,11,9],after:[1,12],shadowmapwidth:[37,30],reflect:33,befor:33,mesh:[29,33,4],contribut:[37,30],attenu:[40,30],materialindex:[15,17],crossself:10,data:33,averag:29,elapsedtim:31,"short":33,third:4,ani:[37,30,33],light:[40,14,33,26,4,36,37,42,30],shadowmap:33,fullheight:12,correspond:29,issu:[14,33],callback:33,"switch":33,green:41,flattentoarrai:21,shade:33,tall:[33,4],clampbottom:6,extractposit:21,order:[29,21,34,33],utf8:33,rotat:[2,10,34,21,33],greggman:33,shadowbia:[37,30],over:6,move:33,rang:[6,4],through:[29,4],vec3:2,hierarchi:33,still:33,vari:[15,17],dynam:[29,37,30],paramet:[1,33,4,37,21,12],style:41,monitor:12,distancetosquar:[9,10],fix:33,window:[1,12,4],html:[29,12,4],soundrender:33,main:0,orthographiccamera:[1,33,32,14],setrotationfrommatrix:10,non:[40,34,30,33],good:33,"return":[31,33,2,34,23,41,6,9,10,11,21],mochikit:41,drojdjou:33,lambert:[33,4],overal:33,settextur:33,rectangl:[14,18,7,33],number:[29,21,34,33],field_of_view:12,half:37,front:[40,33],unprojectvector:33,now:33,facecolormateri:33,quat2:2,r15:33,name:[29,34],changelog:[14,33],opera:33,perspect:[14,21,30,12,32],splite:33,matrixworld:[34,33],alteredq:33,jeromeetienn:33,radian:[2,21],each:[29,12],debug:[37,30],boundradiu:34,egraeth:33,side:[34,30],bone:33,texturepath:33,clamp:6,reset:21,soon:33,weight:29,map:[34,6,37,30,33],smoothshad:33,witdh:33,"static":21,connect:35,our:4,todo:[21,31,13],extracturlbas:33,special:33,frustum:[1,33,37,21,30,12],matrix:[1,14,2,33,34,29,7,21,10,23,12],space:[24,14,25,33,34,41,6,7,22],goe:2,setsiz:4,content:14,rewrit:33,lengthsq:[9,10,11],adapt:2,meshfacecolorfillmateri:33,formula:12,get:[33,34,26,4,41,37,30],math:[14,2,41,6,7,21],model:[29,33],makefrustum:21,n11:21,linear:[41,6],focallength:12,manipul:33,setclearcolor:33,standard:6,reason:[12,33],base:[14,32,33,34,41,29,36,7,8,21,12,42],shadowcamerabottom:37,releas:33,org:10,repeat:33,angl:[2,10,34,21],where:33,keep:[14,31,7],filter:33,jaycrossl:33,domel:4,specular:33,place:23,outsid:33,geometri:[14,33,15,2,17,29,7],mrdoob:33,renderdepth:34,calldraw:33,first:[33,34,4],n12:21,matrixtoquaternion:2,rotationautoupd:34,instersect:33,onc:29,arrai:[33,15,34,17,29,21,23],scene:[40,14,1,34,33,26,4,37,7,30,12],footprint:33,colorstrok:33,alreadi:33,construct:[21,4],massiv:33,miss:33,primari:29,receiveshadow:34,size:[12,33],"0x000000":41,differ:4,stencil:33,onlyshadow:[37,30],dorecurs:34,workaround:33,script:4,top:[1,21,37],system:33,getinvers:21,too:33,fogexp2:33,boundingbox:29,gpu:29,white:[15,17,37,30,4],subself:[9,10,11],"final":4,low:[14,6],hue:41,overdraw:33,option:[34,33],ratio:[21,33,12,4],namespac:[0,33],article1199:21,n43:21,copi:[2,41,3,21,10,11,9],n44:21,plane:[1,21,12,33],sync:33,part:[40,1,37,30,12],mostli:33,addlevel:33,quad:[15,14,7],than:6,wide:4,either:29,conveni:28,target:[29,37,30,33],morph:29,provid:14,remov:[29,34,33],second:4,structur:29,exampl:[40,1,2,4,5,3,9,10,11,12,41,15,17,18,19,21,22,24,25,26,28,29,30,33,34,35,37,39,31,38],project:[1,25,14,33,7,21,12,32],makeperspect:21,angletoquaternion:2,orthograph:[1,32,33,14,37,21],opaqu:33,posit:[40,33,34,4,29,37,21,10,30],toward:21,pre:33,"function":[14,6,21,7,4],comput:[33,2,30,29,37,21,10,11,9],clip:33,distanceto:[9,10],pass:[29,33,4],beforehand:29,argument:[40,1,34,15,30,2,26,41,17,29,36,6,37,3,9,10,11,21,12,13],rai:[14,22,7,33],eulerord:34,have:[29,2,34,12],tabl:14,need:[29,33],turn:19,octahedrongeometri:33,optimis:33,seti:10,stephenhopkin:33,date:33,squar:[9,10,11],lib:33,randint:6,canvasrender:33,faceuv:29,cloneobject:33,mindlaps:33,note:[21,12],also:[41,33],without:33,build:33,which:4,particlecirclemateri:33,channel:41,simplifi:33,textur:[14,33,37,7,3,30],colornam:29,unless:29,allow:33,appendchild:4,buffer:29,object:[14,33,34,4,29,5,7],compress:33,undefin:[34,11],render:[14,33,34,4],regular:21,pointlight:[40,14,33,42,4],specifi:[2,34,21,12,4],morphtarget:29,setoffset:12,alpha:[21,11,33],r36:33,r37:33,r30:33,r31:33,r32:33,appear:34,simplic:33,don:21,boundradiusscal:34,refract:33,computeboundingbox:29,projectionmatrixinvers:8,clear:33,doe:[33,4],dummi:14,copylineartogamma:41,runtim:[29,33],determin:[21,4],neg:33,calculatew:2,axi:[2,34,21,33],shadowcameraright:37,dot:[9,10,11],shadermateri:33,show:[37,30],text:[19,4],autoclearcolor:33,sphericalreflectionmap:33,n41:21,directli:29,"3x3":[14,21,7,23],doublesid:[34,33],hack:33,uniform:33,blender:33,preservedrawingbuff:33,ambient:[14,26,42],materi:[33,15,34,26,17,29,4],less:33,start:[33,15,4,17,21,31],should:33,n14:21,templat:4,repeatwrap:33,meshshadermateri:33,folder:33,local:34,meshlayermateri:33,info:33,cube:[33,4],rgba:33,addobject:33,convert:[41,33],setrgb:41,stop:31,cheaper:[37,30],setrotationaxi:21,sethsv:41,made:35,copygammatolinear:41,theta:21,report:14,photographi:12,bitmapuvmappingmateri:33,requir:[33,37,30,4],makeinvert3x3:21,rotatex:21,extract:10,enabl:33,textpath:[33,19],textgeometri:33,n42:21,rotatez:21,subdivisionmodifi:33,yellow:4,trident:33,contain:29,colormateri:33,shadowcamerafar:[37,30],view:[21,30,12,4],wiki:10,n13:21,renderableface4:33,set:[40,29,33,30,2,34,41,4,35,37,3,9,10,11,21,12],n23:21,setscal:21,"float":[40,1,33,2,34,41,30,29,6,37,3,9,10,11,21,12],frame:12,decompos:21,maximum:[40,6,34,30],orthocamera:33,see:41,result:[2,21],setrotationfromquaternion:21,close:38,vertexindic:13,improv:33,quakecamera:33,particl:33,transpos:[21,23],infinit:33,linewidth:33,iszero:[9,10],parent:[34,33],crossvector:21,hopefulli:33,pattern:6,wikipedia:10,jhonnyg:33,brunt:33,face4:[15,14,29,7,33],behind:33,reus:33,crosseyedwebglrender:33,sceneutil:33,face3:[29,14,33,7,17],geometryutil:33,"import":33,awai:21,irc:14,approach:33,zz85:33,attribut:[40,1,2,8,5,3,9,10,11,12,13,41,15,17,18,19,21,22,23,24,25,26,28,29,30,33,34,35,36,37,39,31,38],nine78:33,anaglypwebglrender:33,extend:33,screen:33,javascript:[14,4],timknip2:33,add:[40,1,33,34,26,4,37,9,10,11,30,12],setfromaxisangl:2,spheregeometri:33,come:33,addit:33,both:34,cor:33,last:[33,4],opac:33,datatextur:33,extens:5,euclideanspac:[2,21],extractrot:21,equal:[9,10],tutori:[14,27],icosahedrongeometri:33,context:[41,33],multiplyvector4:21,whole:34,colorfillmateri:33,load:33,curv:[35,5,33],technic:12,point:[40,14,33,15,34,17,29,42,4,30],color:[40,14,33,15,26,41,17,29,36,37,7,4,30],globali:33,format:[41,33],projectionmatrix:8,torusgeometri:33,height:[33,37,30,12,4],r45:33,r44:33,clearrect:33,r46:33,r41:33,r40:33,r43:33,suppli:[21,23,33],gitgub:14,kikko:33,poli:33,duplic:[29,33],three:[0,1,40,14,15,30,2,33,26,41,4,29,37,3,17,9,10,11,21,12],meshbitmapuvmappingmateri:33,chrome:33,invert:[33,2,21,10,11,9],invers:[2,21],compon:[2,34,21],json:33,basic:33,faceindic:13,multipli:[33,2,26,21,10,11,9],sizeattenu:33,sprite:33,worker:33,search:[14,34],gap:33,coordin:[14,2,4,29,7,3,9,10,11],"35mm":12,athon:33,setfromrotationmatrix:2,linecolormateri:33,child:34,repetit:6,sweetfish:33,deallocateobject:33,fourd:21,"case":33,multi:[12,33],ident:[2,41,21,10,11,9],look:[21,37,30,8],philogb:33,lukem1:33,rtype:[31,2,34,23,41,6,9,10,11,21],facecolorfillmateri:33,easier:33,aim:[14,33],defin:[21,33,4],pathcamera:33,overrid:34,vertextang:[15,17],match:[29,34],remo:33,spotlight:[14,33,42,30],matrixworldinvers:[33,8],layer:29,lookat:[21,33,34,8],submatrix:21,utf8load:33,destin:[2,21],jsermeno:33,rotateaxi:21,lightweight:14,meshcolorfillmateri:33,crash:33,revis:33,primit:[14,33,7,25],svgrender:33,"null":34,develop:33,minim:4,perform:33,getcontextstyl:41,webgl:[14,21,33,4],transpar:33,cross:10,same:12,addlight:4,vertexcolor:[15,17],python:33,complex:14,split:33,mathutil:29,document:4,random16:6,pyrotechnick:33,shadowcameraleft:37,complet:33,incorrect:33,http:[29,2,10,21,12],addself:[9,10,11],expans:33,webglrender:[29,33,37,4],effect:33,innerwidth:[1,12],jslint:33,"0xffff00":4,temporari:33,initi:4,mani:33,canva:[14,33,4],n22:21,n21:21,kig:33,stack:33,expand:33,n24:21,lower:33,kept:33,center:[21,33],thx:33,convertgammatolinear:41,min:29,itself:10,domrender:33,inherit:[40,1,26,36,37,8,30,12],autoclear:33,off:4,rome:33,expens:[37,30],thi:[41,34,33,30,2,26,23,29,37,9,10,11,21,12],interpol:11,gzip:33,grid:12,everyth:4,cubemap:33,setx:10,setz:10,left:[1,21],rotatei:21,distanc:[40,34,4,37,9,10,30],custom:33,just:[21,33],camel:33,sound:33,bitmapheight:33,shape:[38,33,19],aspect:[21,33,12,4],paul:33,subcamera:12,progress:33,yet:33,settransl:21,onload:4,cut:4,easi:[33,4],field:[21,30,12,4],cubegeometri:[33,4],had:33,empaempa:33,rgb:41,other:[14,33],strokemateri:33,lerpself:11,bool:30,euler:[2,10,34,21,33],sub:[9,10,11],maya:33,around:21,mayb:33,handl:33,big:33,bia:[37,30],dark:[37,30],were:33,extrudegeometri:33,castshadow:[34,37,30],shadow:[34,37,30,33],loader:33,recurs:34,scenegraph:33,autocleardepth:33,translatex:[34,33],like:12,specif:33,arbitrari:34,realist:33,negat:[9,10,11],integ:[40,33,15,26,17,41,36,6,37,21,30],evanw:33,api:[14,28,33],singl:29,updatematrix:[34,33],usequaternion:34,page:14,www:[29,2,21,12],right:[1,21,37,30,33],old:33,deal:33,interv:6,r42:33,some:33,back:33,depthwrit:33,imageutil:33,"export":33,flatten:21,respect:4,matrixworldneedsupd:34,updateprojectionmatrix:[1,12],matrix4:[14,33,2,34,29,7,8,21,10],guess:33,matrix3:[14,21,7,23],librari:14,skinweight:29,fov:[21,12],scale:[21,34,33],bottom:[1,21],settransform:33,avoid:33,normal:[33,15,2,17,29,37,9,10,11,21],thank:33,per:[29,33],cast:[37,30],ambientlight:[14,26,42,33],track:[14,31,7],fog:33,centroid:[15,29,17],inject:33,particlebitmapmateri:33,particlesystem:[29,33],"1920x1080":12,planegeometri:33,machin:12,core:[14,20,7],plu:33,marklundin:33,deallocatetextur:33,shadowmapheight:[37,30],jumpi:33,step:4,hsv:41,starttim:31,output:33,vertexnorm:[15,17],bobatkin:12,"0px":33,subtract:[9,10,11],between:[14,25,4,41,6,7,11,13],shadowcameravis:[37,30],projector:[14,33,7,25],shine:[40,37,30],src:4,obj:33,most:33,column:21,computevertexnorm:29,beta:21,firstpersoncamera:33,degre:[2,21],hastang:29,estim:12,constructor:[40,1,2,8,5,3,9,10,11,12,13,41,15,17,18,19,21,22,23,24,25,26,28,29,30,33,34,35,36,37,39,31,38],fals:[29,34,37,30,33],r38:33,setscissor:33,gamma:[41,21],r39:33,compil:33,combinedcamera:33,"0xffaa00":[15,17],"0xff0000":[40,4],xyz:[21,34,4],within:[9,10],bound:29,particlecanvasmateri:33,compos:[21,33],down:[40,30],r34:33,skinindic:29,shadowvolum:33,r35:33,frames:12,chang:[29,1,12,33],next:33,object3d:[40,14,1,34,33,26,36,37,7,8,30,12],spline:[14,7,39],manag:33,triangl:[14,7,17],lod:33,area:4,support:33,maplinear:6,hex:[40,33,26,41,36,37,30],transform:[29,21,10,34,33],"class":[40,1,2,8,5,7,3,9,10,11,12,13,14,15,17,18,19,21,22,23,24,25,26,41,28,29,30,32,33,34,35,36,37,38,39,31,42],avail:33,width:[37,30,12,4],camera:[1,32,14,33,4,37,8,30,12],includ:33,"var":[40,1,15,30,2,26,41,4,29,37,3,17,9,10,11,21,12],r33:33,strict:[9,10],skinnedmesh:33,randfloat:6,head:4,doctyp:4,postprocess:33,subgraph:34,antialia:33,forc:34,epsilon:[9,10],sebleedelisl:33,multipass:33,bodi:4,satur:41,translat:[21,34,33],intern:[29,21,33],delta:33,directionallight:[14,37,42,33],renam:33,line:[29,33,4],buggi:33,"true":[33,34,29,37,9,10,30],bug:33,freenod:14,count:33,concaten:33,immedi:33,dirti:29,getdelta:31,whether:33,fullwidth:12,displai:4,"0x333333":26,translatei:[34,33],asynchron:33,url:33,errynp:33,bitmapwidth:33,embed:29,similar:29,realnormedalgebra:2,uber:33,featur:33,creat:[14,6,33,21,4],facecolorstrokemateri:33,"abstract":[14,36,32,42,8],deep:4,mode:33,backsid:34,shader:33,exist:29,file:33,morphcolor:29,bob:41,face:[14,33,15,34,17,29,7,13],check:[29,9,10,33],rig:21,again:33,googl:21,titl:4,when:[6,33],refactor:33,orient:[37,30,8],"default":[40,41,33,15,30,2,34,17,29,37,9,10,11,21],cleanup:33,collis:33,make:[41,21,4],matrixautoupd:34,rotatebyaxi:21,you:[21,12],out:33,manhattan:10,terathon:29,draw:28,sroucherai:33,extern:33,clean:33,multidimension:33,tweak:[37,30],setfromeul:2,po2:33,vertex:[24,14,33,15,17,29,7],translatez:[34,33],push:29,intens:[40,37,30],consid:33,intersectobject:33,quaternion:[14,2,21,34,7],randfloatspread:[29,6],makeortho:21,reduc:33,cubecamera:33,receiv:34,pushmatrix:33,transposeintoarrai:23,svg:[14,33],julianwa:33,descript:[21,31,13],multiplyself:[2,21],flipsid:[34,33],depth:[34,33],phong:33,ignor:33,meshcolorstrokemateri:33,meshfacemateri:[29,33],time:[14,31,7,33],"3dsmax":33,boundingspher:[29,33],togeth:4},objtypes:{"0":"js:function","1":"js:attribute","2":"js:class","3":"js:data"},titles:["THREE - Main three.js namespace","OrthographicCamera - Camera with orthographic projection","Quaternion - Implementation of a quaternion","UV - A texture coordinate","First Steps","Curve - Extensible curve object","Math - Math utility functions","Core","Camera - Abstract base class for cameras","Vector2 - 2D vector","Vector3 - 3D vector","Vector4 - 4D vector","PerspectiveCamera - Camera with perspective projection","Edge - Edge between two vertices","three.js - JavaScript 3D library","Face4 - Quad face","Extras","Face3 - Triangle face","Rectangle - Represents a 2D rectangle","TextPath - Class for turning Text to Shapes","Core Extras","Matrix4 - A 4x4 Matrix","Ray - Representation of a ray in space","Matrix3 - A 3x3 matrix","Vertex - Represents a vertex in space","Projector - Utilities for projecting primitives between spaces","AmbientLight - An ambient light","Tutorials","Path - A CurvePath with a Drawing API","Geometry - Base class for geometries","SpotLight - A spotlight","Clock - Keeps track of time","Cameras","Changelog","Object3D - Base class for scene graph objects","CurvePath - Path with connected curves","Light - Abstract base class for lights","DirectionalLight - A directional light","Shape - A closed 2d path with holes","Spline - Represents a spline","PointLight - A point light","Color - Represents a color","Lights"],objnames:{"0":"JavaScript function","1":"JavaScript attribute","2":"JavaScript class","3":"JavaScript data"},filenames:["api/THREE","api/cameras/OrthographicCamera","api/core/Quaternion","api/core/UV","tutorials/FirstSteps","api/extras/core/Curve","api/core/Math","api/core/index","api/cameras/Camera","api/core/Vector2","api/core/Vector3","api/core/Vector4","api/cameras/PerspectiveCamera","api/core/Edge","index","api/core/Face4","api/extras/index","api/core/Face3","api/core/Rectangle","api/extras/core/TextPath","api/extras/core/index","api/core/Matrix4","api/core/Ray","api/core/Matrix3","api/core/Vertex","api/core/Projector","api/lights/AmbientLight","tutorials/index","api/extras/core/Path","api/core/Geometry","api/lights/SpotLight","api/core/Clock","api/cameras/index","changelog","api/core/Object3D","api/extras/core/CurvePath","api/lights/Light","api/lights/DirectionalLight","api/extras/core/Shape","api/core/Spline","api/lights/PointLight","api/core/Color","api/lights/index"]}) \ No newline at end of file diff --git a/docs/_old/_build/html/tutorials/FirstSteps.html b/docs/_old/_build/html/tutorials/FirstSteps.html new file mode 100644 index 0000000000..47cbfc2f01 --- /dev/null +++ b/docs/_old/_build/html/tutorials/FirstSteps.html @@ -0,0 +1,173 @@ + + + + + + + + First Steps — three.js v48dev documentation + + + + + + + + + + + +
+
+
+
+ +
+

First Steps

+

Three.js scenes are very easy to setup and only require a few lines of code to initialize. Scenes are constructed using a few different types of objects: cameras, lights, and meshes.

+

The first step in rendering a three.js scene is creating the WebGL renderer object. The following code creates an HTML canvas object 800x400 pixels, adds it to the document’s body, and initializes a three.js scene.

+
var renderer = new THREE.WebGLRenderer();
+renderer.setSize( 800, 640 );
+document.body.appendChild( renderer.domElement );
+
+var scene = new THREE.Scene();
+
+
+

The second step is to define a camera which the renderer object will use in rendering.

+
var camera = new THREE.Camera(
+        35,                     // Field of view
+        800 / 640,      // Aspect ratio
+        .1,                     // Near
+        10000           // Far
+);
+camera.position.set( -15, 10, 15 );
+
+
+

The first parameter passed determines how wide the field of view is. The second parameter is the aspect ratio which is calculated by dividing the viewing area’s width by its height. The third and fourth parameters specify cut-off points for objects in the camera’s view. If an object’s distance from the camera does not fall in the range between NEAR and FAR then that object is not rendered. The last line sets the camera’s XYZ coordinates to -15, 10, and 15 respectively.

+

Step three creates a white cube that is 5 units wide, tall and deep, adds the Lambert material, and adds it to the scene.

+
var cube = new THREE.Mesh(
+        new THREE.CubeGeometry( 5, 5, 5 ),
+        new THREE.MeshLambertMaterial( { color: 0xFF0000 } )
+);
+scene.addChild( cube );
+
+
+

For the last step in setting up a scene we create a yellow light source and add it to the scene.

+
var light = new THREE.PointLight( 0xFFFF00 );
+light.position.set( 10, 0, 10 );
+scene.addLight( light );
+
+
+

Finally we render the scene which displays our scene through the camera’s eye.

+
renderer.render(scene, camera);
+
+
+

Everything together in a working example with a minimal HTML template:

+
<!DOCTYPE html>
+
+<html>
+
+<head>
+        <title>Getting Started with Three.js</title>
+
+        <script type="text/javascript" src="Three.js"></script>
+        <script type="text/javascript">
+        window.onload = function() {
+
+                        var renderer = new THREE.WebGLRenderer();
+                        renderer.setSize( 800, 400 );
+                        document.body.appendChild( renderer.domElement );
+
+                        var scene = new THREE.Scene();
+
+                        var camera = new THREE.Camera(
+                                35,             // Field of view
+                                800 / 400,      // Aspect ratio
+                                .1,             // Near
+                                10000           // Far
+                        );
+                        camera.position.set( -15, 10, 15 );
+
+                        var cube = new THREE.Mesh(
+                                new THREE.CubeGeometry( 5, 5, 5 ),
+                                new THREE.MeshLambertMaterial( { color: 0xFF0000 } )
+                        );
+                        scene.addChild( cube );
+
+                        var light = new THREE.PointLight( 0xFFFF00 );
+                        light.position.set( 10, 0, 10 );
+                        scene.addLight( light );
+
+                        renderer.render(scene, camera);
+
+        };
+        </script>
+</head>
+
+<body></body>
+
+</html>
+
+

That’s how simple and easy three.js makes WebGL. Only 20 lines of Javascript to initialize and render a scene.

+
+ + +
+
+
+
+
+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/_build/html/tutorials/index.html b/docs/_old/_build/html/tutorials/index.html new file mode 100644 index 0000000000..2c06efc76b --- /dev/null +++ b/docs/_old/_build/html/tutorials/index.html @@ -0,0 +1,108 @@ + + + + + + + + Tutorials — three.js v48dev documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

Tutorials

+
+ + +
+
+
+
+
+

Previous topic

+

Changelog

+

Next topic

+

Cameras

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_old/changelog.rst b/docs/_old/changelog.rst new file mode 100644 index 0000000000..7a2573f375 --- /dev/null +++ b/docs/_old/changelog.rst @@ -0,0 +1,620 @@ +Changelog +========= + +2011 11 17 - **r46** (343.383 KB, gzip: 87.468 KB) +-------------------------------------------------- + +- Added reflections to Normal Mapping. + (`alteredq `_) +- ``Ray`` now checks also object children. + (`mrdoob `_) +- ``*Loader.load( parameters )`` to + ``*Loader( url, callback, texturePath )``. + (`mrdoob `_ and + `alteredq `_) +- Reworked scene graph setup. (`mrdoob `_ and + `alteredq `_) +- Fixed ``CanvasRenderer``'s ``SphericalReflectionMapping`` rendering. + (`mrdoob `_) +- Improved ``SubdivisionModifier``. (`zz85 `_) +- Refactored ``*Controls`` to use externally supplied time delta. + (`alteredq `_) +- Improvements to ``CombinedCamera``. + (`zz85 `_) +- ``ColladaLoader`` doesn't create extra ``Object3D``. + (`mrdoob `_) +- Improvements to Lambert and Phong materials. + (`alteredq `_) +- Removed multi-materials for simplicity reasons. (Multi-materials will + come back with MeshLayerMaterial hopefully soon) + (`alteredq `_) +- Fixed ``Ray`` not considering edges. + (`mrdoob `_) +- Massive cleanup to ``WebGLRenderer``. + (`alteredq `_) +- ``Ray`` optimisations. (`mrdoob `_ and + `alteredq `_) +- JSON file format is now worker-less (this was crashing Chrome/Firefox + with dealing with many assets). + (`alteredq `_) +- Improved ``CubeGeometry``, ``PlaneGeometry``, ``IcosahedronGeometry`` + and ``SphereGeometry``. (`mrdoob `_) +- Improvements to ``Curve``. (`zz85 `_) +- Removed ``Collisions`` code and focusing on ``Ray``. + (`mrdoob `_) +- Added ``cloneObject()`` method to ``SceneUtils``. + (`alteredq `_) + +2011 10 06 - **r45** (340.863 KB, gzip: 86.568 KB) +-------------------------------------------------- + +- ``Object/Scene.add*()`` and ``Object/Scene.remove*()`` are now + ``Object/Scene.add()`` and ``Object/Scene.remove()``. + (`mrdoob `_) +- ``LOD.add()`` is now ``LOD.addLevel()``. + (`mrdoob `_) +- Reworked ``CylinderGeometry``. (`mrdoob `_) +- Added ``.depthWrite`` and ``.fog`` to ``Material``. + (`alteredq `_) +- Added ``.applyMatrix`` to ``Geometry``. + (`mrdoob `_) +- Improved postprocessing stack in ``/examples/js/postprocessing``. + (`alteredq `_) +- Added a realistic skin shading example. + (`alteredq `_) +- Started of a GUI for composing scenes and autogenerate code. + (`mrdoob `_) +- Added ``.center()`` to ``GeometryUtils``. + (`alteredq `_) +- Fixed buggy scenegraph manipulation (adding/removing objects). + (`jsermeno `_, + `alteredq `_ and + `skython `_) +- Renamed ``MeshShaderMaterial`` to ``ShaderMaterial``. + (`alteredq `_) +- Fixed ``CanvasRenderer`` ignoring color of ``SmoothShading``ed + ``MeshLambertMaterial``. (`mrdoob `_) +- Renamed ``renderer.data`` to ``renderer.info``. + (`mrdoob `_) +- Fixed ShadowMap aspect ratio. (`kig `_ and + `alteredq `_) +- Fixed ``Loader``'s ``extractUrlbase()`` incorrect output for short + urls. (`rectalogic `_ and + `alteredq `_) +- Added ``.color`` and ``.visible`` support to ``Sprite``. + (`alteredq `_) +- Added ``Face4``, Vertex Colors and Maya support to ``ColladaLoader``. + (`mrdoob `_) +- Rewrite of lighting shader code. + (`alteredq `_) +- Improved internal array concatenation approach. + (`pyrotechnick `_) +- ``WebGLRenderer`` performance improvements. + (`alteredq `_) +- Added lower level immediate rendering support to ``WebGLRenderer``. + (`NINE78 `_ and + `alteredq `_) +- Added ``CubeCamera`` for rendering cubemaps. + (`alteredq `_) +- Improved ``GeometryUtils``'s ``.mergeVertices()`` performance. + (`zz85 `_) +- Removed ``Camera``'s ``.target``. + (`mrdoob `_) +- ``WebGLRenderer``'s ``.clear()`` is now + ``.clear( color, depth, stencil )``. + (`mrdoob `_) +- Added ``.autoClearColor``, ``.autoClearDepth`` and + ``.autoClearStencil`` to ``WebGLRenderer``. + (`mrdoob `_ and + `alteredq `_) +- Added ``OctahedronGeometry``. + (`clockworkgeek `_) +- Splitted ``Camera`` into ``PerspectiveCamera`` and + ``OrthographicCamera``. (`mrdoob `_ and + `alteredq `_) +- Special cameras are now ``*Controls``. + (`alteredq `_ and + `mrdoob `_) +- Added ``SubdivisionModifier``. (`zz85 `_) +- ``Projector``'s ``unprojectVector()`` now also works with + ``OrthographicCamera``. (`jsermeno `_) +- Added ``.setLens()`` method to ``PerspectiveCamera``. + (`zz85 `_) +- Added Shadow Maps, ``Texture``'s ``.offset`` and ``.repeat`` and + reflections support to Normal Map shader. + (`alteredq `_) + +2011 09 04 - **r44** (330.356 KB, gzip: 84.039 KB) +-------------------------------------------------- + +- Added ``ColladaLoader``. (`timknip2 `_) +- Improved ``ExtrudeGeometry``. (`zz85 `_) +- Fixed ``CylinderGeometry`` normals. + (`alteredq `_) +- Fixed issue with ``WebGLRenderer.setTexture`` + (`rectalogic `_) +- Fixed ``TorusGeometry`` normals. + (`mrdoob `_) +- Fixed ``Ray`` behind-ray intersects. + (`mrdoob `_) +- Added ``OrthoCamera``. (`alteredq `_) +- Refactored postprocessing effects used in some examples. + (`alteredq `_) +- Added ``.deallocateObject()`` and ``.deallocateTexture()`` methods to + ``WebGLRenderer``. (`mrdoob `_) +- Fixed a glitch in normal and phong shader. + (`evanw `_ and + `alteredq `_) +- Added ``.frustumCulled`` property to ``Object3D``. + (`alteredq `_ and + `mrdoob `_) + +2011 08 14 - **r43** (298.199 KB, gzip: 74.805 KB) +-------------------------------------------------- + +- Improved Blender exporter - 2.58 (and 2.59) support, normals maps, + specular, ao maps... (`alteredq `_) +- Added `CORS `_ to ``ImageUtils``. + (`mrdoob `_) +- Refactored ``TextGeometry`` and added ``Shape``, ``Curve``, ``Path``, + ``ExtrudeGeometry``, ``TextPath``. (`zz85 `_ + and `alteredq `_) +- Added handling of custom attributes for ``ParticleSystems``. + (`alteredq `_) +- Fixed ``CanvasRenderer.setClearColor``. + (`mrdoob `_, + `StephenHopkins `_ and + `sebleedelisle `_) +- Improved uniform handling in ``WebGLRenderer``. + (`alteredq `_) +- Implemented Shadow Mapping in ``WebGLRenderer``. + (`alteredq `_) +- Added ``Spotlight`` light type. + (`alteredq `_) +- Fixed constructor-less prototypes. + (`pushmatrix `_) +- Added ``DataTexture``. (`alteredq `_) +- ``WebGLRenderer`` opaque pass now renders from front to back. + (`alteredq `_) +- Simplified ``Color``. (`mrdoob `_) +- Added ``preserveDrawingBuffer`` option to ``WebGLRenderer``. + (`jeromeetienne `_) +- Added ``UTF8Loader`` for loading the new, uber compressed, `UTF8 + format `_. + (`alteredq `_) +- ``CanvasRenderer`` now supports ``RepeatWrapping``, + ``texture.offset`` and ``texture.repeat``. + (`mrdoob `_) +- Removed Stencil Shadows and Lensflare code. + (`mrdoob `_) + +2011 07 06 - **r42** (277.852 KB, gzip: 69.469 KB) +-------------------------------------------------- + +- Added ``AnaglypWebGLRenderer`` and ``CrosseyedWebGLRenderer``. + (`mrdoob `_, + `alteredq `_ and + `marklundin `_) +- Added ``TextGeometry``. (`zz85 `_ and + `alteredq `_) +- Added ``setViewOffset`` method to ``Camera``. + (`greggman `_) +- Renamed geometries to ``*Geometry``. + (`mrdoob `_) +- Improved Blender exporter. (`alteredq `_, + `sweetfish `_ and + `Jhonnyg `_) +- Added Blender 2.58 exporter. (`georgik `_) +- Fixed ``Matrix4.multiply()``. (thanks + `lukem1 `_) +- Added support for additional Euler rotation orders in ``Matrix4``. + (`rectalogic `_) +- Renamed ``QuakeCamera`` to ``FirstPersonCamera``. + (`chriskillpack `_) +- Improved Normal Map Shader. + (`alteredq `_) +- ``Collision`` now supports ``Object3D.flipSided`` and + ``Object3D.doubleSided``. (`NINE78 `_) +- Removed most of ``SceneUtils`` methods. + (`mrdoob `_) +- Removed ``Sound`` object and ``SoundRenderer``. + (`mrdoob `_) + +2011 05 31 - **r41/ROME** (265.317 KB, gzip: 64.849 KB) +------------------------------------------------------- + +(Up to this point, some `RO.ME `_ specific features +managed to get in the lib. The aim is to clean this up in next +revisions.) + +- Improved Blender Object and Scene exporters. + (`alteredq `_) +- Fixes on WebGL attributes. (`alteredq `_ + and `empaempa `_) +- Reduced overall memory footprint. + (`mrdoob `_) +- Added ``Face4`` support to ``CollisionSystem``. + (`NINE78 `_) +- Added Blender 2.57 exporter. (`remoe `_) +- Added ``Particle`` support to ``Ray``. + (`mrdoob `_ and + `jaycrossler `_) +- Improved ``Ray.intersectObject`` performance by checking + boundingSphere first. (`mrdoob `_) +- Added ``TrackballCamera``. + (`egraether `_) +- Added ``repeat`` and ``offset`` properties to ``Texture``. + (`mrdoob `_ and + `alteredq `_) +- Cleaned up ``Vector2``, ``Vector3`` and ``Vector4``. + (`egraether `_) + +2011 04 24 - **r40** (263.774 KB, gzip: 64.320 KB) +-------------------------------------------------- + +- Fixed ``Object3D.lookAt``. (`mrdoob `_) +- More and more Blender exporter goodness. + (`alteredq `_ and + `mrdoob `_) +- Improved ``CollisionSystem``. + (`drojdjou `_ and + `alteredq `_) +- Fixes on WebGLRenderer. (`empaempa `_) +- Added ``Trident`` object. + (`sroucheray `_) +- Added ``data`` object to Renderers for getting number of + vertices/faces/callDraws from last render. + (`mrdoob `_) +- Fixed ``Projector`` handling Particles with hierarchies. + (`mrdoob `_) + +2011 04 09 - **r39** (249.048 KB, gzip: 61.020 KB) +-------------------------------------------------- + +- Improved WebGLRenderer program cache. + (`alteredq `_) +- Added support for pre-computed edges in loaders and exporters. + (`alteredq `_) +- Added ``Collisions`` classes. + (`drojdjou `_) +- Added ``Sprite`` object. (`empaempa `_) +- Fixed ``*Loader`` issue where Workers were kept alive and next loads + were delayed. (`alteredq `_) +- Added ``THREE`` namespace to all the classes that missed it. + (`mrdoob `_) + +2011 03 31 - **r38** (225.442 KB, gzip: 55.908 KB) +-------------------------------------------------- + +- Added ``LensFlare`` light. (`empaempa `_) +- Added ``ShadowVolume`` object (stencil shadows). + (`empaempa `_) +- Improved Blender Exporter plus added Scene support. + (`alteredq `_) +- Blender Importer for loading JSON files. + (`alteredq `_) +- Added load/complete callbacks to ``Loader`` + (`mrdoob `_) +- Minor WebGL blend mode clean up. + (`mrdoob `_) +- \*Materials now extend Material + (`mrdoob `_) +- ``material.transparent`` define whether material is transparent or + not (before we were guessing). (`mrdoob `_) +- Added internal program cache to WebGLRenderer (reuse already + available programs). (`mrdoob `_) + +2011 03 22 - **r37** (208.495 KB, gzip: 51.376 KB) +-------------------------------------------------- + +- Changed JSON file format. (**Re-exporting of models required**) + (`alteredq `_ and + `mrdoob `_) +- Updated Blender and 3DSMAX exporters for new format. + (`alteredq `_) +- Vertex colors are now per-face + (`alteredq `_) +- ``Geometry.uvs`` is now a multidimensional array (allowing infinite + uv sets) (`alteredq `_) +- ``CanvasRenderer`` renders ``Face4`` again (without spliting to 2 + ``Face3``) (`mrdoob `_) +- ``ParticleCircleMaterial`` > ``ParticleCanvasMaterial``. Allowing + injecting any ``canvas.context`` code! + (`mrdoob `_) + +2011 03 14 - **r36** (194.547 KB, gzip: 48.608 KB) +-------------------------------------------------- + +- Added 3DSMAX exporter. (`alteredq `_) +- Fixed ``WebGLRenderer`` aspect ratio bug when scene had only one + material. (`mrdoob `_) +- Added ``sizeAttenuation`` property to ``ParticleBasicMaterial``. + (`mrdoob `_) +- Added ``PathCamera``. (`alteredq `_) +- Fixed ``WebGLRenderer`` bug when Camera has a parent. + Camera``Camera.updateMatrix`` method. + (`empaempa `_) +- Fixed ``Camera.updateMatrix`` method and ``Object3D.updateMatrix``. + (`mrdoob `_) + +2011 03 06 - **r35** (187.875 KB, gzip: 46.433 KB) +-------------------------------------------------- + +- Added methods ``translate``, ``translateX``, ``translateY``, + ``translateZ`` and ``lookAt`` methods to ``Object3D``. + (`mrdoob `_) +- Added methods ``setViewport`` and ``setScissor`` to + ``WebGLRenderer``. (`alteredq `_) +- Added support for non-po2 textures. + (`mrdoob `_ and + `alteredq `_) +- Minor API clean up. (`mrdoob `_) + +2011 03 02 - **r34** (186.045 KB, gzip: 45.953 KB) +-------------------------------------------------- + +- Now using camera.matrixWorldInverse instead of camera.matrixWorld for + projecting. (`empaempa `_ and + `mrdoob `_) +- Camel cased properties and object json format (**Re-exporting of + models required**) (`alteredq `_) +- Added ``QuakeCamera`` for easy fly-bys + (`alteredq `_) +- Added ``LOD`` example (`alteredq `_) + +2011 02 26 - **r33** (184.483 KB, gzip: 45.580 KB) +-------------------------------------------------- + +- Changed build setup (**build/Three.js now also include extras**) + (`mrdoob `_) +- Added ``ParticleSystem`` object to ``WebGLRenderer`` + (`alteredq `_) +- Added ``Line`` support to ``WebGLRenderer`` + (`alteredq `_) +- Added vertex colors support to ``WebGLRenderer`` + (`alteredq `_) +- Added ``Ribbon`` object. (`alteredq `_) +- Added updateable textures support to ``WebGLRenderer`` + (`alteredq `_) +- Added ``Sound`` object and ``SoundRenderer``. + (`empaempa `_) +- ``LOD``, ``Bone``, ``SkinnedMesh`` objects and hierarchy being + developed. (`empaempa `_) +- Added hierarchies examples (`mrdoob `_) + +2010 12 31 - **r32** (89.301 KB, gzip: 21.351 KB) +------------------------------------------------- + +- ``Scene`` now supports ``Fog`` and ``FogExp2``. ``WebGLRenderer`` + only right now. (`alteredq `_) +- Added ``setClearColor( hex, opacity )`` to ``WebGLRenderer`` and + ``CanvasRenderer`` (`alteredq `_ & + `mrdoob `_) +- ``WebGLRenderer`` shader system refactored improving performance. + (`alteredq `_) +- ``Projector`` now does frustum culling of all the objects using their + sphereBoundingBox. (thx `errynp `_) +- ``material`` property changed to ``materials`` globaly. + +2010 12 06 - **r31** (79.479 KB, gzip: 18.788 KB) +------------------------------------------------- + +- Minor Materials API change (mappings). + (`alteredq `_ & + `mrdoob `_) +- Added Filters to ``WebGLRenderer`` +- ``python build.py --includes`` generates includes string + +2010 11 30 - **r30** (77.809 KB, gzip: 18.336 KB) +------------------------------------------------- + +- Reflection and Refraction materials support in ``WebGLRenderer`` + (`alteredq `_) +- ``SmoothShading`` support on + ``CanvasRenderer``/``MeshLambertMaterial`` +- ``MeshShaderMaterial`` for ``WebGLRenderer`` + (`alteredq `_) +- Removed ``RenderableFace4`` from ``Projector``/``CanvasRenderer`` + (maybe just temporary). +- Added extras folder with ``GeometryUtils``, ``ImageUtils``, + ``SceneUtils`` and ``ShaderUtils`` + (`alteredq `_ & + `mrdoob `_) +- Blender 2.5x Slim now the default exporter (old exporter removed). + +2010 11 17 - **r29** (69.563 KB) +-------------------------------- + +- **New materials API** Still work in progress, but mostly there. + (`alteredq `_ & + `mrdoob `_) +- Line clipping in ``CanvasRenderer`` + (`julianwa `_) +- Refactored ``CanvasRenderer`` and ``SVGRenderer``. + (`mrdoob `_) +- Switched to Closure compiler. + +2010 11 04 - **r28** (62.802 KB) +-------------------------------- + +- ``Loader`` class allows load geometry asynchronously at runtime. + (`alteredq `_) +- ``MeshPhongMaterial`` working with ``WebGLRenderer``. + (`alteredq `_) +- Support for *huge* objects. Max 500k polys and counting. + (`alteredq `_) +- ``Projector.unprojectVector`` and ``Ray`` class to check + intersections with faces (based on + `mindlapse `_ work) +- Fixed ``Projector`` z-sorting (not as jumpy anymore). +- Fixed Orthographic projection (was y-inverted). +- Hmmm.. lib file size starting to get too big... + +2010 10 28 - **r25** (54.480 KB) +-------------------------------- + +- ``WebGLRenderer`` now up to date with other renderers! + (`alteredq `_) +- .obj to .js python converter + (`alteredq `_) +- Blender 2.54 exporter +- Added ``MeshFaceMaterial`` (multipass per face) +- Reworked ``CanvasRenderer`` and ``SVGRenderer`` material handling + +2010 10 06 - **r18** (44.420 KB) +-------------------------------- + +- Added ``PointLight`` +- ``CanvasRenderer`` and ``SVGRenderer`` basic lighting support + (ColorStroke/ColorFill only) +- ``Renderer`` > ``Projector``. ``CanvasRenderer``, ``SVGRenderer`` and + ``DOMRenderer`` do not extend anymore +- Added ``computeCentroids`` method to ``Geometry`` + +2010 09 17 - **r17** (39.487 KB) +-------------------------------- + +- Added ``Light``, ``AmbientLight`` and ``DirectionalLight`` + (`philogb `_) +- ``WebGLRenderer`` basic lighting support + (`philogb `_) +- Memory optimisations + +2010 08 21 - **r16** (35.592 KB) +-------------------------------- + +- Workaround for Opera bug (clearRect not working with context with + negative scale) +- Additional ``Matrix4`` and ``Vector3`` methods + +2010 07 23 - **r15** (32.440 KB) +-------------------------------- + +- Using new object ``UV`` instead of ``Vector2`` where it should be + used +- Added ``Mesh.flipSided`` boolean (false by default) +- ``CanvasRenderer`` was handling UVs at 1,1 as bitmapWidth, + bitmapHeight (instead of bitmapWidth - 1, bitmapHeight - 1) +- ``ParticleBitmapMaterial.offset`` added +- Fixed gap when rendering ``Face4`` with + ``MeshBitmapUVMappingMaterial`` + +2010 07 17 - **r14** (32.144 KB) +-------------------------------- + +- Refactored ``CanvasRenderer`` (more duplicated code, but easier to + handle) +- ``Face4`` now supports ``MeshBitmapUVMappingMaterial`` +- Changed order of ``*StrokeMaterial`` parameters. Now it's ``color``, + ``opacity``, ``lineWidth``. +- ``BitmapUVMappingMaterial`` > ``MeshBitmapUVMappingMaterial`` +- ``ColorFillMaterial`` > ``MeshColorFillMaterial`` +- ``ColorStrokeMaterial`` > ``MeshColorStrokeMaterial`` +- ``FaceColorFillMaterial`` > ``MeshFaceColorFillMaterial`` +- ``FaceColorStrokeMaterial`` > ``MeshFaceColorStrokeMaterial`` +- ``ColorStrokeMaterial`` > ``LineColorMaterial`` +- ``Rectangle.instersects`` returned false with rectangles with 0px + witdh or height + +2010 07 12 - **r13** (29.492 KB) +-------------------------------- + +- Added ``ParticleCircleMaterial`` and ``ParticleBitmapMaterial`` +- ``Particle`` now use ``ParticleCircleMaterial`` instead of + ``ColorFillMaterial`` +- ``Particle.size`` > ``Particle.scale.x`` and ``Particle.scale.y`` +- ``Particle.rotation.z`` for rotating the particle +- ``SVGRenderer`` currently out of sync + +2010 07 07 - **r12** (28.494 KB) +-------------------------------- + +- First version of the ``WebGLRenderer`` (``ColorFillMaterial`` and + ``FaceColorFillMaterial`` by now) +- ``Matrix4.lookAt`` fix (``CanvasRenderer`` and ``SVGRenderer`` now + handle the -Y) +- ``Color`` now using 0-1 floats instead of 0-255 integers + +2010 07 03 - **r11** (23.541 KB) +-------------------------------- + +- Blender 2.5 exporter (utils/export\_threejs.py) now exports UV and + normals (Thx `kikko `_) +- ``Scene.add`` > ``Scene.addObject`` +- Enabled ``Scene.removeObject`` + +2010 06 22 - **r10** (23.959 KB) +-------------------------------- + +- Changed Camera system. (Thx `Paul + Brunt `_) +- ``Object3D.overdraw = true`` to enable CanvasRenderer screen space + point expansion hack. + +2010 06 20 - **r9** (23.753 KB) +------------------------------- + +- JSLinted. +- ``autoClear`` property for renderers. +- Removed SVG rgba() workaround for WebKit. (WebKit now supports it) +- Fixed matrix bug. (transformed objects outside the x axis would get + infinitely tall :S) + +2010 06 06 - **r8** (23.496 KB) +------------------------------- + +- Moved UVs to ``Geometry``. +- ``CanvasRenderer`` expands screen space points (workaround for + antialias gaps). +- ``CanvasRenderer`` supports ``BitmapUVMappingMaterial``. + +2010 06 05 - **r7** (22.387 KB) +------------------------------- + +- Added Line Object. +- Workaround for WebKit not supporting rgba() in SVG yet. +- No need to call updateMatrix(). Use .autoUpdateMatrix = false if + needed. (Thx `Gregory Athons `_). + +2010 05 17 - **r6** (21.003 KB) +------------------------------- + +- 2d clipping on ``CanvasRenderer`` and ``SVGRenderer`` +- ``clearRect`` optimisations on ``CanvasRenderer`` + +2010 05 16 - **r5** (19.026 KB) +------------------------------- + +- Removed Class.js dependency +- Added ``THREE`` namespace +- ``Camera.x`` -> ``Camera.position.x`` +- ``Camera.target.x`` > ``Camera.target.position.x`` +- ``ColorMaterial`` > ``ColorFillMaterial`` +- ``FaceColorMaterial`` > ``FaceColorFillMaterial`` +- Materials are now multipass (use array) +- Added ``ColorStrokeMaterial`` and ``FaceColorStrokeMaterial`` +- ``geometry.faces.a`` are now indexes instead of references + +2010 04 26 - **r4** (16.274 KB) +------------------------------- + +- ``SVGRenderer`` Particle rendering +- ``CanvasRenderer`` uses ``context.setTransform`` to avoid extra + calculations + +2010 04 24 - **r3** (16.392 KB) +------------------------------- + +- Fixed incorrect rotation matrix transforms +- Added ``Plane`` and ``Cube`` primitives + +2010 04 24 - **r2** (15.724 KB) +------------------------------- + +- Improved ``Color`` handling + +2010 04 24 - **r1** (15.25 KB) +------------------------------ + +- First alpha release + diff --git a/docs/conf.py b/docs/_old/conf.py similarity index 100% rename from docs/conf.py rename to docs/_old/conf.py diff --git a/docs/_old/index.rst b/docs/_old/index.rst new file mode 100644 index 0000000000..383e16a40a --- /dev/null +++ b/docs/_old/index.rst @@ -0,0 +1,35 @@ +three.js - JavaScript 3D library +=============================== + +The aim of the project is to create a lightweight 3D library with a very low +level of complexity — in other words, for dummies. The library provides +, and WebGL renderers. + +* `Clone on GitGub `_ +* `Report an Issue `_ +* IRC: ``#three.js`` on ``irc.freenode.net`` + +Contents +-------- + +.. toctree:: + :maxdepth: 1 + + changelog.rst + tutorials/index.rst + +API +--- + +.. toctree:: + + api/cameras/index.rst + api/core/index.rst + api/lights/index.rst + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` + diff --git a/docs/make.bat b/docs/_old/make.bat similarity index 100% rename from docs/make.bat rename to docs/_old/make.bat diff --git a/docs/_old/static/nature.css b/docs/_old/static/nature.css new file mode 100644 index 0000000000..6ee0830ebd --- /dev/null +++ b/docs/_old/static/nature.css @@ -0,0 +1,406 @@ +/* + * nature.css_t + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- nature theme. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Arial, sans-serif; + font-size: 100%; + background-color: #111; + color: #555; + margin: 0; + padding: 0; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.document { + background-color: #eee; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 30px 30px; + font-size: 0.9em; +} + +div.footer { + color: #555; + width: 100%; + padding: 13px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: #444; + text-decoration: underline; +} + +div.related { + background-color: #6BA81E; + line-height: 32px; + color: #fff; + text-shadow: 0px 1px 0 #444; + font-size: 0.9em; +} + +div.related a { + color: #E2F3CC; +} + +div.sphinxsidebar { + font-size: 0.75em; + line-height: 1.5em; +} + +div.sphinxsidebarwrapper{ + padding: 20px 0; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Arial, sans-serif; + color: #222; + font-size: 1.2em; + font-weight: normal; + margin: 0; + padding: 5px 10px; + background-color: #ddd; + text-shadow: 1px 1px 0 white +} + +div.sphinxsidebar h4{ + font-size: 1.1em; +} + +div.sphinxsidebar h3 a { + color: #444; +} + + +div.sphinxsidebar p { + color: #888; + padding: 5px 20px; +} + +div.sphinxsidebar p.topless { +} + +div.sphinxsidebar ul { + margin: 10px 20px; + padding: 0; + color: #000; +} + +div.sphinxsidebar a { + color: #444; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar input[type=text]{ + margin-left: 20px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #005B81; + text-decoration: none; +} + +a:hover { + color: #E32E00; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Arial, sans-serif; + background-color: #BED4EB; + font-weight: normal; + color: #212224; + margin: 30px 0px 10px 0px; + padding: 5px 0 5px 10px; + text-shadow: 0px 1px 0 white +} + +div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 150%; background-color: #C8D5E3; } +div.body h3 { font-size: 120%; background-color: #D8DEE3; } +div.body h4 { font-size: 110%; background-color: #D8DEE3; } +div.body h5 { font-size: 100%; background-color: #D8DEE3; } +div.body h6 { font-size: 100%; background-color: #D8DEE3; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: white; +} + +div.body p, div.body dd, div.body li { + line-height: 1.5em; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.highlight{ + background-color: white; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 10px; + background-color: White; + color: #222; + line-height: 1.2em; + border: 1px solid #C6C9CB; + font-size: 1.1em; + margin: 1.5em 0 1.5em 0; + -webkit-box-shadow: 1px 1px 1px #d8d8d8; + -moz-box-shadow: 1px 1px 1px #d8d8d8; +} + +tt { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ + font-size: 1.1em; + font-family: monospace; +} + +.viewcode-back { + font-family: Arial, sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +/* -- custom styles override --------------------------------------------------------- */ + +/* turn off text shadows */ + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + text-shadow: 0px 0px 0 white; +} + +div.related { + text-shadow: 0px 0px 0 #444; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + text-shadow: 0px 0px 0 white; +} + +/* set top header color */ + +div.related { + background-color: #444; + color: #aaa; +} + +div.related a { + color: #fff; +} + +/* turn off italics for "class" and parameters */ + +em { + font-style: normal; + color: #2194ce; + padding: 0 0.2em; +} + +/* unify fonts for method signatures */ + +tt.descname, tt.descclassname { + font-family: tahoma; + font-size: 1.5em; + font-weight: bold; +} + +tt.descclassname { + color: #777; +} + +tt.descname { + color: #000; +} + +big, dt em { + font-size: 1.5em; +} + +/* fix parameters parenthesis spacing */ + +big { + padding: 0 0.2em; +} + +/* use smaller padding */ + +div.body { + padding: 2em; +} + +/* restyle top header */ + +div.body h1 { + border-top: 0; + font-weight: bold; + margin-bottom: 1em; + padding: 0; + background-color: transparent; +} + +/* restyle sub headers */ + +div.body h2 { + padding: 0; + background-color: transparent; +} + + +/* restyle constructor / attributes / methods headers */ + +.rubric { + color: orange; + background-color: #fff; + font-size: 1.5em; +} + +p.rubric { + padding: 0em 0em; + margin: 1em 0 0em; + margin-left: 0em; +} + +/* use stronger black for body text */ + +div.body { + color: #111; +} + +/* Restyle fields */ + +th.field-name { + font-weight: normal; + color: #666; +} + +dl.function { + border-left: 0px solid #aaa; + border-top: 0px solid #aaa; + padding: 0.25em 0 1em; +} + +dl.function dt { +} + +table.field-list { + padding: 1em; + background-color: #eee; + border: 5px solid #eee; + color: #000; + box-shadow: 1px 1px 4px #ccc; +} + +/* fix arguments list styling */ + +.field-body li { + list-style-type: none; + margin: 0; + +} + +.field-body ul { + padding: 0; +} + + +dd { + margin: 1em 0 0 0.25em; +} + +/* cross-reference link style */ + +tt.xref { + font-family: arial; + font-weight: normal; + font-size: 1em; + color: #005B81; +} \ No newline at end of file diff --git a/docs/_old/tutorials/FirstSteps.rst b/docs/_old/tutorials/FirstSteps.rst new file mode 100644 index 0000000000..59cb2392e4 --- /dev/null +++ b/docs/_old/tutorials/FirstSteps.rst @@ -0,0 +1,103 @@ +First Steps +==================== + +Three.js scenes are very easy to setup and only require a few lines of code to initialize. Scenes are constructed using a few different types of objects: cameras, lights, and meshes. + +The first step in rendering a three.js scene is creating the WebGL renderer object. The following code creates an HTML canvas object 800x400 pixels, adds it to the document's body, and initializes a three.js scene. + +:: + + var renderer = new THREE.WebGLRenderer(); + renderer.setSize( 800, 640 ); + document.body.appendChild( renderer.domElement ); + + var scene = new THREE.Scene(); + +The second step is to define a camera which the renderer object will use in rendering. + +:: + + var camera = new THREE.Camera( + 35, // Field of view + 800 / 640, // Aspect ratio + .1, // Near + 10000 // Far + ); + camera.position.set( -15, 10, 15 ); + +The first parameter passed determines how wide the field of view is. The second parameter is the aspect ratio which is calculated by dividing the viewing area's width by its height. The third and fourth parameters specify cut-off points for objects in the camera's view. If an object's distance from the camera does not fall in the range between NEAR and FAR then that object is not rendered. The last line sets the camera's XYZ coordinates to -15, 10, and 15 respectively. + +Step three creates a white cube that is 5 units wide, tall and deep, adds the Lambert material, and adds it to the scene. + +:: + + var cube = new THREE.Mesh( + new THREE.CubeGeometry( 5, 5, 5 ), + new THREE.MeshLambertMaterial( { color: 0xFF0000 } ) + ); + scene.addChild( cube ); + +For the last step in setting up a scene we create a yellow light source and add it to the scene. + +:: + + var light = new THREE.PointLight( 0xFFFF00 ); + light.position.set( 10, 0, 10 ); + scene.addLight( light ); + +Finally we render the scene which displays our scene through the camera's eye. + +:: + + renderer.render(scene, camera); + +Everything together in a working example with a minimal HTML template: + +:: + + + + + + + Getting Started with Three.js + + + + + + + + + +That's how simple and easy three.js makes WebGL. Only 20 lines of Javascript to initialize and render a scene. \ No newline at end of file diff --git a/docs/_old/tutorials/index.rst b/docs/_old/tutorials/index.rst new file mode 100644 index 0000000000..3be337710b --- /dev/null +++ b/docs/_old/tutorials/index.rst @@ -0,0 +1,4 @@ +Tutorials +=============== +.. toctree:: + FirstSteps diff --git a/docs/api/cameras/Camera.html b/docs/api/cameras/Camera.html new file mode 100644 index 0000000000..b7a4df45e8 --- /dev/null +++ b/docs/api/cameras/Camera.html @@ -0,0 +1,11 @@ + + + + + +

Camera

+ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ullamcorper, nibh vel semper bibendum, lacus ante sodales nibh, vel pharetra orci orci ut eros. Donec vehicula, nibh eget auctor aliquet, nulla tellus consequat ipsum, id blandit nisl lectus nec justo. Nunc tincidunt pretium vulputate. Suspendisse sollicitudin dui id turpis egestas non gravida arcu suscipit. Vestibulum mi quam, laoreet quis venenatis a, pharetra id nulla. Vestibulum sit amet orci purus. In blandit sapien lacus. Phasellus cursus consequat lectus, nec ultrices lorem molestie a. Ut in feugiat lectus. Phasellus auctor ultrices metus, accumsan convallis tellus pulvinar sed. Sed fringilla urna et urna auctor sit amet rutrum est tempor. + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000000..df0f774343 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,64 @@ + + + three.js - documentation + + + +
+ + Cameras + + +
+ + + + + + diff --git a/docs/styles.css b/docs/styles.css new file mode 100644 index 0000000000..c10b9ef113 --- /dev/null +++ b/docs/styles.css @@ -0,0 +1,3 @@ +h1 { + color: #ff0000; +} -- GitLab

|2?MxC}x^~ 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 N@>RQe>fHLu{{!Q6jC%k8 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/index.doctree b/docs/_old/_build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c0148b545a8782ed2e62d9955b9e8c9b5f151eb3 GIT binary patch literal 8733 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 literal 0 HcmV?d00001 diff --git a/docs/_old/_build/doctrees/tutorials/index.doctree b/docs/_old/_build/doctrees/tutorials/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bf9ae05508079dc50de6b628726ce869f48c1f00 GIT binary patch literal 2970 zcmbVO`Fk8k5p^W5q+RQ@V`H!#uLS`a;@toN8-*(Yn?tYx$Ca347-naBw>z4vx_fj0 z192cE;=b?uzHj*Zcs)D2mNxM5edyB<(r$Oxt5>gH)zdR!l!b*=vFW5)BuvZwn~2o5 z_@2vmc&6mp4Qi%ABJ6%H3?DDKal3i!*fCq!OsgO^Jl8X{W{SSC3LmO0^&>GbJYVtx zE$4wY!cT-T!4TJ*9=E0=ntfwMGCtGd6NtN5@)F|eVAo`Y4h1jMF`C0;K*lRCctM0N zZi`oOb*+ucM9S)6d@FGbO*MPxCeyIkV5zP!U;@&*H)3OJmX15YQser~n~&Y( z*Ex*G#~5F~F%1&R3Whq!Ws9$ZkZUEsVWc5M-F#ubD{|50`mpTY_92|>T4%bg()PN| zLJPU9wE6v)09#&0d+PTn)vQ|V7xBGFBZns_S+FEdd3sJi-2ALM^FiS0z zjw4yP-QhQatT&bX=CQ1=fhiQFIYG^DDf-hX#mWjD#D4Wgi{Fa09x3@zSLbuU-08Gy zu$!B$Hhyj>X!&s~a^t9e8@g{Vi8oCip!?oV3%M3X=pDh=N4(b>aMiEbxB)i)$IJW< zWb)3E-!;zUkx?c~N5JyCi@v}Yv>X=Nb-Z6U@m7yokq9##xOV6F^yp*&xel_-rkNGK zv4OVy-mQCR-nEEppI*t2$vJt+xO%-$t_98+=!DflYCv@&G{3(`OOq$6-n&`yK$JY7RajRg zPak{@g*80%Ski(K)~a-9SRLw*fv&U|wVnv#0`q~N%6Plvc!N%ksqmd?0rC3M@cz!1XuNbnBL zz!!I^83nLq8zedJIfxaxe&sN{4@X@@8W?QpNO2#70A&!{`oPDx8nje{s6G4>J^4V7 z&I{)VK9FV+81+a0${>wm6t1LImzKd5%$7WM9rj6TM512|`BObw6-i&X!tTeyNFgjg zeLxqo!sdnjZ*Sg#4}y)*@-u)0>q(2m-*XD*PlLUcs7P{uqAA0l0aq9nDjj6?v1c90 zyMay}V7w)Qgg@J((~kFnimR&m7}UUP1wRKz5c!q+AABg{=V?vsDRe1hU6`7i18_43 z9~-D4f3B`oX#E{!6cz{mJYEjtEZFu%5~$b@A`Gf(3Vz{vx`0fQNvGYdx<7KGFCNgW zNO$;4y*jVlh$2EBNz7k%^zG#tRHopeI&~Y$SI|$66D%p!9IG?_>H(b?Ig9Vq%U=Ub zr_n8OtQ2h^ZjHxT-VG(R@QAJNtScX9bKHHRX_ zlyDXK3Gi1cxy##6(GjlvlcxO{U96jScXzjw?^~IrRntadr;C%O%Ri^{M_HH>|1ab- zwCs$^znl3lX+}l-E5yh6bZbdnpkE)*xlwzGSX4a@Zmjgj3)62P;+o4!qK1F#(V0rD zD#f&_mQj&9$|L?A^nC&gB|2#I!SC_GQkC(<`2Nr<`gD5Qx<_N>k6Xt^8`+;q{` + + Used with models containing multiple materials in a single geometry (with pass-through :class:`MeshFaceMaterial`) + + Face indices index into this array. + + +.. ............................................................................... +.. rubric:: Attribute buffers +.. ............................................................................... + +.. attribute:: Geometry.faces + + Array of faces (:class:`Face3`, :class:`Face4`) + +.. attribute:: Geometry.vertices + + Array of :class:`vertices ` + + Face indices index into this array. + +.. attribute:: Geometry.colors + + Array of vertex :class:`colors `, matching number and order of vertices. + + Used in :class:`ParticleSystem`, :class:`Line` and :class:`Ribbon`. + + :class:`Meshes ` use per-face-use-of-vertex colors embedded directly in faces. + +.. attribute:: Geometry.faceUvs + + Array of face UV layers. + Each UV layer is an array of :class:`UV` matching order and number of faces. + +.. attribute:: Geometry.faceVertexUvs + + Array of vertex UV layers. + Each UV layer is an array of :class:`UV` matching order and number of vertices in faces. + +.. attribute:: Geometry.morphTargets + + Array of morph targets. + Each morph target is JS object: + + :: + + morphTarget = { name: "targetName", vertices: [ new THREE.Vertex(), ... ] } + + Morph vertices match number and order of primary vertices. + +.. attribute:: Geometry.morphColors + + Array of morph colors. + Morph colors have similar structure as morph targets, each color set is JS object: + + :: + + morphColor = { name: "colorName", colors: [ new THREE.Color(), ... ] } + + Morph colors can match either number and order of faces (face colors) or number of vertices (vertex colors). + +.. attribute:: Geometry.skinWeights + + Array of skinning weights (:class:`Vector4`), matching number and order of vertices. + +.. attribute:: Geometry.skinIndices + + Array of skinning indices (:class:`Vector4`), matching number and order of vertices. + + +.. ............................................................................... +.. rubric:: Flags +.. ............................................................................... + +.. attribute:: Geometry.hasTangents + + True if geometry has tangents. Set in :func:`Geometry.computeTangents` + + ``default false`` + +.. attribute:: Geometry.dynamic + + Set to `true` if attribute buffers will need to change in runtime (using ``dirty`` flags). + + Unless set to true internal typed arrays corresponding to buffers will be deleted once sent to GPU. + + ``default false`` + + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Geometry.applyMatrix( matrix ) + + Bakes matrix transform directly into vertex coordinates + + :param Matrix4 matrix: matrix transform + +.. function:: Geometry.computeCentroids() + + Computes centroids for all faces + +.. function:: Geometry.computeFaceNormals() + + Computes face normals + +.. function:: Geometry.computeVertexNormals() + + Computes vertex normals by averaging face normals. + + Face normals must be existing / computed beforehand. + +.. function:: Geometry.computeTangents() + + Computes vertex tangents + + Based on http://www.terathon.com/code/tangent.html + + Geometry must have vertex UVs (layer 0 will be used). + +.. function:: Geometry.computeBoundingBox() + + Computes bounding box of the geometry, updating :attr:`Geometry.boundingBox` attribute. + +.. function:: Geometry.computeBoundingSphere() + + Computes bounding sphere of the geometry, updating :attr:`Geometry.boundingSphere` attribute. + +.. function:: Geometry.mergeVertices() + + Checks for duplicate vertices using hashmap. + Duplicated vertices are removed and faces' vertices are updated. + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + // geometry with random points + // (useful for example with ParticleSystem) + + var n = 10000; + var geometry = new THREE.Geometry() + for ( var i = 0; i < n; i ++ ) { + + var x = THREE.MathUtils.randFloatSpread( 1000 ); + var y = THREE.MathUtils.randFloatSpread( 1000 ); + var z = THREE.MathUtils.randFloatSpread( 1000 ); + var position = new THREE.Vector3( x, y, z ); + var vertex = new THREE.Vertex( position ); + + geometry.vertices.push( vertex ); + + } + + geometry.computeBoundingSphere(); diff --git a/docs/_old/_build/html/_sources/api/core/Math.txt b/docs/_old/_build/html/_sources/api/core/Math.txt new file mode 100644 index 0000000000..bad6bbc4a0 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Math.txt @@ -0,0 +1,60 @@ +Math - Math utility functions +----------------------------- + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Math.clamp( x, a, b ) + + Clamps the x to be between a and b + + :param float x: value to be clamped + :param float a: minimum value + :param float b: maximum value + :returns: Clamped value + :rtype: float + +.. function:: Math.clampBottom( x, a ) + + Clamps the x to be larger than a + + :param float x: value to be clamped + :param float a: minimum value + :returns: Clamped value + :rtype: float + +.. function:: Math.mapLinear( x, a1, a2, b1, b2 ) + + Linear mapping of x from range to range + + :param float x: value to be mapped + :param float a1: minimum value for range A + :param float a2: maximum value for range A + :param float b1: minimum value for range B + :param float b2: maximum value for range B + :returns: mapped value + :rtype: float + +.. function:: Math.random16() + + Random float from <0, 1> with 16 bits of randomness + (standard Math.random() creates repetitive patterns when applied over larger space) + + :returns: Random float from <0, 1> with 16 bits of randomness + :rtype: float + +.. function:: Math.randInt( low, high ) + + :returns: Random integer from *low* to *high* interval + :rtype: integer + +.. function:: Math.randFloat( low, high ) + + :returns: Random float from *low* to *high* interval + :rtype: float + +.. function:: Math.randFloatSpread( range ) + + :returns: Random float from -range/2 to range/2 interval + :rtype: float diff --git a/docs/_old/_build/html/_sources/api/core/Matrix3.txt b/docs/_old/_build/html/_sources/api/core/Matrix3.txt new file mode 100644 index 0000000000..71c8c823d0 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Matrix3.txt @@ -0,0 +1,38 @@ +Matrix3 - A 3x3 matrix +---------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: Matrix3() + + A 3x3 matrix + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: Matrix3.m + + Array with matrix values + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Matrix3.transpose() + + Transposes this matrix in place + + :returns: This matrix + :rtype: :class:`Matrix3` + +.. function:: Matrix3.transposeIntoArray( r ) + + Transposes this matrix into supplied array ``r`` + + This matrix is unmodified + + :returns: This matrix + :rtype: :class:`Matrix3` diff --git a/docs/_old/_build/html/_sources/api/core/Matrix4.txt b/docs/_old/_build/html/_sources/api/core/Matrix4.txt new file mode 100644 index 0000000000..bc8a501557 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Matrix4.txt @@ -0,0 +1,476 @@ +Matrix4 - A 4x4 Matrix +---------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: Matrix4( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) + + A 4x4 Matrix + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: Matrix4.n11 +.. attribute:: Matrix4.n12 +.. attribute:: Matrix4.n13 +.. attribute:: Matrix4.n14 +.. attribute:: Matrix4.n21 +.. attribute:: Matrix4.n22 +.. attribute:: Matrix4.n23 +.. attribute:: Matrix4.n24 +.. attribute:: Matrix4.n31 +.. attribute:: Matrix4.n32 +.. attribute:: Matrix4.n33 +.. attribute:: Matrix4.n34 +.. attribute:: Matrix4.n41 +.. attribute:: Matrix4.n42 +.. attribute:: Matrix4.n43 +.. attribute:: Matrix4.n44 + + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Matrix4.clone( ) + + Clones this matrix + + :returns: New instance identical to this matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) + + Sets all fields of this matrix + + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.identity() + + Resets this matrix to identity + + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.copy( m ) + + Copies a matrix ``m`` into this matrix + + :param Matrix4 m: Matrix to be copied + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.lookAt( eye, center, up ) + + Constructs rotation matrix, looking from ``eye`` towards ``center`` with defined ``up`` vector + + :param Vector3 eye: vector + :param Vector3 center: vector + :param Vector3 up: vector + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.multiply( a, b ) + + Sets this matrix to ``a * b`` + + :param Matrix4 a: source matrix A + :param Matrix4 b: source matrix B + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.multiplyToArray( a, b, r ) + + Sets this matrix to ``a * b`` and sets result into flat array ``r`` + + Destination array can be regular JS array or Typed Array + + :param Matrix4 a: source matrix A + :param Matrix4 b: source matrix B + :param array r: destination array + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.multiplySelf( a ) + + Multiplies this matrix by ``a`` + + :param Matrix4 a: matrix + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.multiplyScalar( s ) + + Multiplies this matrix by ``s`` + + :param float a: number + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.multiplyVector3( v ) + + Applies this matrix to a :class:`Vector3` + + :param Vector3 v: vector + :returns: Multiplied vector + :rtype: :class:`Vector3` + +.. function:: Matrix4.multiplyVector4( v ) + + Applies this matrix to a :class:`Vector4` + + :param Vector4 v: vector + :returns: Multiplied vector + :rtype: :class:`Vector4` + +.. function:: Matrix4.rotateAxis( v ) + + Applies rotation submatrix of this matrix to vector ``v`` and then normalizes it + + :param Vector3 v: vector + :returns: Rotated vector + :rtype: :class:`Vector3` + +.. function:: Matrix4.crossVector( a ) + + //todo:description + + :param Vector4 a: vector + :rtype: :class:`Vector4` + +.. function:: Matrix4.determinant() + + Computes determinant of this matrix + + Based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm + + :returns: Determinant + :rtype: float + +.. function:: Matrix4.transpose() + + Transposes this matrix + + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.flatten() + + Flattens this matrix into internal :attr:`Matrix4.flat` array + + :returns: Flat array with this matrix values + :rtype: array + +.. function:: Matrix4.flattenToArray( flat ) + + Flattens this matrix into supplied ``flat`` array + + :param array flat: array + :returns: Flat array with this matrix values + :rtype: array + +.. function:: Matrix4.flattenToArrayOffset( flat, offset ) + + Flattens this matrix into supplied ``flat`` array starting from ``offset`` position in the array + + :param array flat: array + :param integer offset: offset + :returns: Flat array with this matrix values + :rtype: array + +.. function:: Matrix4.setTranslation( x, y, z ) + + Sets this matrix as translation transform + + :param float x: x-translation + :param float y: y-translation + :param float z: z-translation + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.setScale( x, y, z ) + + Sets this matrix as scale transform + + :param float x: x-scale + :param float y: y-scale + :param float z: z-scale + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.setRotationX( theta ) + + Sets this matrix as rotation transform around x-axis by ``theta`` radians + + :param float theta: Rotation angle in radians + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.setRotationY( theta ) + + Sets this matrix as rotation transform around y-axis by ``theta`` radians + + :param float theta: Rotation angle in radians + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.setRotationZ( theta ) + + Sets this matrix as rotation transform around z-axis by ``theta`` radians + + :param float theta: Rotation angle in radians + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.setRotationAxis( axis, angle ) + + Sets this matrix as rotation transform around ``axis`` by ``angle`` radians + + Based on http://www.gamedev.net/reference/articles/article1199.asp + + :param Vector3 axis: Rotation axis + :param float angle: Rotation angle in radians + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.setPosition( v ) + + Sets just position component for this matrix from vector ``v`` + + :param Vector3 v: position vector + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.getPosition() + + Returns position component from this matrix + + Note: this method returns a reference to internal class vector, make copy or clone if you don't use it right away. + + :returns: Vector with position + :rtype: :class:`Vector3` + +.. function:: Matrix4.getColumnX() + + Returns x-column component from this matrix + + Note: this method returns a reference to internal class vector, make copy or clone if you don't use it right away. + + :returns: Vector with x-column + :rtype: :class:`Vector3` + +.. function:: Matrix4.getColumnY() + + Returns y-column component from this matrix + + Note: this method returns a reference to internal class vector, make copy or clone if you don't use it right away. + + :returns: Vector with y-column + :rtype: :class:`Vector3` + +.. function:: Matrix4.getColumnZ() + + Returns z-column component from this matrix + + Note: this method returns a reference to internal class vector, make copy or clone if you don't use it right away. + + :returns: Vector with z-column + :rtype: :class:`Vector3` + +.. function:: Matrix4.getInverse( m ) + + Sets this matrix to inverse of matrix ``m`` + + Based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm + + :param Matrix4 m: source matrix + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.setRotationFromEuler( v, order ) + + Sets rotation submatrix of this matrix to rotation specified by Euler angles + + Default order ``XYZ`` + + :param Vector3 v: Vector3 with all the rotations + :param string order: The order of rotations eg. 'XYZ' + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.setRotationFromQuaternion( q ) + + Sets rotation submatrix of this matrix to rotation specified by quaternion + + :param Quaternion q: rotation + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.scale( v ) + + Multiplies columns of this matrix by vector ``v`` + + :param Vector3 v: scale vector + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.compose( translation, rotation, scale ) + + Sets this matrix to transform composed of ``translation``, ``rotation`` and ``scale`` + + :param Vector3 translation: vector + :param Quaternion rotation: quaternion + :param Vector3 scale: vector + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.decompose( translation, rotation, scale ) + + Decomposes this matrix into `translation``, ``rotation`` and ``scale`` components + + If parameters are not supplied, new instances will be created + + :param Vector3 translation: destination translation vector + :param Quaternion rotation: destination rotation quaternion + :param Vector3 scale: destination scale vector + :returns: Array [ translation, rotation, scale ] + :rtype: Array + +.. function:: Matrix4.extractPosition( m ) + + Copies translation component of supplied matrix ``m`` into this matrix translation + + :param Matrix4 m: source matrix + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.extractRotation( m ) + + Copies rotation component of supplied matrix ``m`` into this matrix rotation + + :param Matrix4 m: source matrix + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.rotateByAxis( axis, angle ) + + Rotates this matrix around supplied ``axis`` by ``angle`` + + :param Vector3 axis: rotation axis + :param float angle: rotation angle in radians + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.rotateX( angle ) + + Rotates this matrix around x-axis by ``angle`` + + :param float angle: rotation angle in radians + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.rotateY( angle ) + + Rotates this matrix around y-axis by ``angle`` + + :param float angle: rotation angle in radians + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.rotateZ( angle ) + + Rotates this matrix around z-axis by ``angle`` + + :param float angle: rotation angle in radians + :returns: This matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.translate( v ) + + Translates this matrix by vector ``v`` + + :param Vector3 v: translation vector + :returns: This matrix + :rtype: :class:`Matrix4` + +.. ............................................................................... +.. rubric:: Static methods +.. ............................................................................... + +.. function:: Matrix4.makeInvert3x3( m ) + + Inverts just rotation submatrix of matrix ``m`` + + Note: this method returns a reference to internal 3x3 matrix, make copy or clone if you don't use it right away. + + Based on http://code.google.com/p/webgl-mjs/ + + :param Matrix4 m: source matrix + :returns: inverted submatrix + :rtype: :class:`Matrix3` + +.. function:: Matrix4.makeFrustum( left, right, bottom, top, near, far ) + + Creates frustum matrix + + :param float left: left + :param float right: right + :param float bottom: bottom + :param float top: top + :param float near: near + :param float far: far + :returns: New instance of frustum matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.makePerspective( fov, aspect, near, far ) + + Creates perspective projection matrix + + :param float fov: vertical field of view in degrees + :param float aspect: aspect ratio + :param float near: near plane + :param float far: far plane + :returns: New instance of projection matrix + :rtype: :class:`Matrix4` + +.. function:: Matrix4.makeOrtho( left, right, top, bottom, near, far ) + + Creates orthographic projection matrix + + :param float left: left + :param float right: right + :param float top: top + :param float bottom: bottom + :param float near: near plane + :param float far: far plane + :returns: New instance of projection matrix + :rtype: :class:`Matrix4` + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + // simple rig for rotation around 3 axes + + var m = new THREE.Matrix4(); + + var m1 = new THREE.Matrix4(); + var m2 = new THREE.Matrix4(); + var m3 = new THREE.Matrix4(); + + var alpha = 0; + var beta = Math.PI; + var gamma = Math.PI/2; + + m1.setRotationX( alpha ); + m2.setRotationY( beta ); + m3.setRotationZ( gamma ); + + m.multiply( m1, m2 ); + m.multiplySelf( m3 ); diff --git a/docs/_old/_build/html/_sources/api/core/Object3D.txt b/docs/_old/_build/html/_sources/api/core/Object3D.txt new file mode 100644 index 0000000000..14c819286a --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Object3D.txt @@ -0,0 +1,239 @@ +Object3D - Base class for scene graph objects +--------------------------------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: Object3D() + + Base class for scene graph objects + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: Object3D.id + + Unique number of this object instance + +.. attribute:: Object3D.name + + Optional name of the object (doesn't have to be unique) + +.. ............................................................................... +.. rubric:: Scene graph attributes +.. ............................................................................... + +.. attribute:: Object3D.parent + + Object's parent in scene graph + +.. attribute:: Object3D.children + + Array with object's children + +.. ............................................................................... +.. rubric:: Transform attributes +.. ............................................................................... + +.. attribute:: Object3D.position + + Object's local position + + :class:`Vector3` - default ``( 0, 0, 0 )`` + +.. attribute:: Object3D.rotation + + Object's local rotation (Euler angles) + + :class:`Vector3` - default ``( 0, 0, 0 )`` + +.. attribute:: Object3D.eulerOrder + + Order of axis for Euler angles + + ``string`` - default ``XYZ`` + +.. attribute:: Object3D.scale + + Object's local scale + + :class:`Vector3` - default ``( 1, 1, 1 )`` + +.. attribute:: Object3D.up + + Up direction + + :class:`Vector3` - default ``( 0, 1, 0 )`` + +.. attribute:: Object3D.matrix + + Local transform + + :class:`Matrix4` + +.. attribute:: Object3D.matrixWorld + + Global transform + + :class:`Matrix4` + +.. attribute:: Object3D.matrixRotationWorld + + Global rotation + + :class:`Matrix4` + +.. attribute:: Object3D.quaternion + + Rotation quaternion + + :class:`Quaternion` + +.. attribute:: Object3D.useQuaternion + + Use quaternion instead of Euler angles for specifying local rotation + + boolean - default ``false`` + +.. attribute:: Object3D.boundRadius + + ``float`` - default ``0.0`` + +.. attribute:: Object3D.boundRadiusScale + + Maximum scale from X, Y, Z scale components + + ``float`` - default ``1.0`` + +.. attribute:: Object3D.renderDepth + + Override depth-sorting order if non ``null`` + + ``float`` - default ``null`` + +.. ............................................................................... +.. rubric:: Appearance flags +.. ............................................................................... + +.. attribute:: Object3D.visible + + Object gets rendered if ``true`` + + ``boolean`` - default ``true`` + +.. attribute:: Object3D.doubleSided + + Both sides of faces visible if ``true`` + + default ``false`` + +.. attribute:: Object3D.flipSided + + Backside of face visible + + default ``false`` + +.. attribute:: Object3D.castShadow + + Gets rendered into shadow map + + ``boolean`` - default ``false`` + +.. attribute:: Object3D.receiveShadow + + Material gets baked in shadow receiving + + ``boolean`` - default ``false`` + + +.. ............................................................................... +.. rubric:: Scene graph flags +.. ............................................................................... + +.. attribute:: Object3D.frustumCulled + + ``boolean`` - default ``true`` + +.. attribute:: Object3D.matrixAutoUpdate + + ``boolean`` - default ``true`` + +.. attribute:: Object3D.matrixWorldNeedsUpdate + + ``boolean`` - default ``true`` + +.. attribute:: Object3D.rotationAutoUpdate + + ``boolean`` - default ``true`` + + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Object3D.translate ( distance, axis ) + + Translates object along arbitrary axis by distance + + :param float distance: distance + :param Vector3 axis: translation direction + +.. function:: Object3D.translateX ( distance ) + + Translates object along X-axis by distance + + :param float distance: distance + +.. function:: Object3D.translateY ( distance ) + + Translates object along Y-axis by distance + + :param float distance: distance + +.. function:: Object3D.translateZ ( distance ) + + Translates object along Z-axis by distance + + :param float distance: distance + +.. function:: Object3D.lookAt ( vector ) + + Rotates object to face point in space + + :param Vector3 vector: vector + +.. function:: Object3D.add ( object ) + + Adds child object to this object + + :param Object3D object: child + +.. function:: Object3D.remove ( object ) + + Removes child object from this object + + :param Object3D object: child + +.. function:: Object3D.getChildByName ( name, doRecurse ) + + Gets first child with name matching the argument (searches whole subgraph recursively if flag is set). + + :param string name: child name + :param boolean doRecurse: recurse flag + :returns: child with matching name or ``undefined`` + :rtype: :class:`Object3D` + +.. function:: Object3D.updateMatrix ( ) + + Updates local transform + +.. function:: Object3D.updateMatrixWorld ( force ) + + Updates global transform of the object and its children + + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... diff --git a/docs/_old/_build/html/_sources/api/core/Projector.txt b/docs/_old/_build/html/_sources/api/core/Projector.txt new file mode 100644 index 0000000000..901d416efb --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Projector.txt @@ -0,0 +1,14 @@ +Projector - Utilities for projecting primitives between spaces +-------------------------------------------------------------- + +.. rubric:: Constructor + +.. class:: Projector() + + Utilities for projecting primitives between spaces + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/core/Quaternion.txt b/docs/_old/_build/html/_sources/api/core/Quaternion.txt new file mode 100644 index 0000000000..3a8955dbc7 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Quaternion.txt @@ -0,0 +1,169 @@ +Quaternion - Implementation of a quaternion +------------------------------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: Quaternion( x, y, z, w ) + + Implementation of a quaternion + + :param float x: x-coordinate + :param float y: y-coordinate + :param float z: z-coordinate + :param float w: w-coordinate + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: Quaternion.x + + float - default ``0`` + +.. attribute:: Quaternion.y + + float - default ``0`` + +.. attribute:: Quaternion.z + + float - default ``0`` + +.. attribute:: Quaternion.w + + float - default ``1`` + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Quaternion.clone( ) + + Clones this quaternion + + :returns: New instance identical to this quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.set( x, y, z, w ) + + Sets value of this vector + + :param float x: x-coordinate + :param float y: y-coordinate + :param float z: z-coordinate + :param float w: w-coordinate + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.copy( q ) + + Copies value of ``q`` to this quaternion + + :param Quaternion v: source quaternion + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.setFromEuler ( vec3 ) + + Sets this quaternion from rotation specified by Euler angles + + Angles are in degrees + + :param Vector3 vec3: Euler angles vector + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.setFromAxisAngle ( axis, angle ) + + Sets this quaternion from rotation specified by axis and angle + + Adapted from: http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm + + Axis have to be normalized, angle is in radians + + :param Vector3 axis: axis vector + :param float angle: angle + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.setFromRotationMatrix ( m ) + + Sets this quaternion from rotation specified by matrix + + Adapted from: http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm + + :param Matrix4 m: rotation matrix + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.calculateW( ) + + Calculates ``w`` component of this quaternion + + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.inverse( ) + + Inverts this quaternion + + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.length( ) + + Computes length of this quaternion + + :returns: length + :rtype: float + +.. function:: Quaternion.normalize( ) + + Normalizes this quaternion + + :returns: This vector + :rtype: :class:`Quaternion` + +.. function:: Quaternion.multiplySelf( quat2 ) + + Multiplies this quaternion by ``quat2`` + + :param Quaternion quat2: quaternion + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.multiply( q1, q2 ) + + Sets this quaternion to ``q1 * q2`` + + Adapted from: http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm + + :param Quaternion q1: quaternion 1 + :param Quaternion q2: quaternion 2 + :returns: This quaternion + :rtype: :class:`Quaternion` + +.. function:: Quaternion.multiplyVector3( vec, dest ) + + Rotates ``vec`` by this quaternion into ``dest`` + + If ``dest`` is not specified, result goes to ``vec`` + + :param Vector3 vec: source vector + :param Vector3 dest: destination vector + :returns: Rotated vector + :rtype: :class:`Vector3` + + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + var q = new THREE.Quaternion(); + q.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 ); + + var v = new THREE.Vector3( 1, 0, 0 ); + q.multiplyVector3( v ); diff --git a/docs/_old/_build/html/_sources/api/core/Ray.txt b/docs/_old/_build/html/_sources/api/core/Ray.txt new file mode 100644 index 0000000000..43e98e1c2f --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Ray.txt @@ -0,0 +1,14 @@ +Ray - Representation of a ray in space +-------------------------------------- + +.. rubric:: Constructor + +.. class:: Ray() + + Representation of a ray in space + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/core/Rectangle.txt b/docs/_old/_build/html/_sources/api/core/Rectangle.txt new file mode 100644 index 0000000000..9ecb96b18c --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Rectangle.txt @@ -0,0 +1,14 @@ +Rectangle - Represents a 2D rectangle +------------------------------------- + +.. rubric:: Constructor + +.. class:: Rectangle() + + Represents a 2D rectangle + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/core/Spline.txt b/docs/_old/_build/html/_sources/api/core/Spline.txt new file mode 100644 index 0000000000..e99ee33b53 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Spline.txt @@ -0,0 +1,14 @@ +Spline - Represents a spline +---------------------------- + +.. rubric:: Constructor + +.. class:: Spline() + + Represents a spline + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/core/UV.txt b/docs/_old/_build/html/_sources/api/core/UV.txt new file mode 100644 index 0000000000..86428c96c4 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/UV.txt @@ -0,0 +1,37 @@ +UV - A texture coordinate +------------------------------------ + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: UV( u, v ) + + A texture coordinate + + :param float u: u coordinate + :param float v: v coordinate + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: UV.u +.. attribute:: UV.v + +.. ............................................................................... +.. rubric:: Method +.. ............................................................................... + +.. function:: UV.set( u, v ) +.. function:: UV.copy( uv ) +.. function:: UV.clone( ) + + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + var uv = new THREE.UV( 0, 1 ); \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/core/Vector2.txt b/docs/_old/_build/html/_sources/api/core/Vector2.txt new file mode 100644 index 0000000000..90f70fa1d4 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Vector2.txt @@ -0,0 +1,184 @@ +Vector2 - 2D vector +------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: Vector2( x, y ) + + 2D vector + + :param float x: x-coordinate + :param float y: y-coordinate + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: Vector2.x + + float - default ``0`` + +.. attribute:: Vector2.y + + float - default ``0`` + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Vector2.clone( ) + + Clones this vector + + :returns: New instance identical to this vector + :rtype: :class:`Vector2` + +.. function:: Vector2.set( x, y ) + + Sets value of this vector + + :param float x: x-coordinate + :param float y: y-coordinate + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.copy( v ) + + Copies value of ``v`` to this vector + + :param Vector2 v: source vector + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.add( v1, v2 ) + + Sets this vector to ``v1 + v2`` + + :param Vector2 v1: source vector 1 + :param Vector2 v2: source vector 2 + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.addSelf( v ) + + Adds ``v`` to this vector + + :param Vector2 v: source vector + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.sub( v1, v2 ) + + Sets this vector to ``v1 - v2`` + + :param Vector2 v1: source vector 1 + :param Vector2 v2: source vector 2 + +.. function:: Vector2.subSelf( v ) + + Subtracts ``v`` from this vector + + :param Vector2 v: source vector + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.multiplyScalar( s ) + + Multiplies this vector by scalar ``s`` + + :param float s: scalar + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.divideScalar( s ) + + Divides this vector by scalar ``s`` + + Set vector to ``( 0, 0 )`` if ``s == 0`` + + :param float s: scalar + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.negate( ) + + Inverts this vector + + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.dot( v ) + + Computes dot product of this vector and ``v`` + + :returns: dot product + :rtype: float + +.. function:: Vector2.lengthSq( ) + + Computes squared length of this vector + + :returns: squared length + :rtype: float + +.. function:: Vector2.length( ) + + Computes length of this vector + + :returns: length + :rtype: float + +.. function:: Vector2.normalize( ) + + Normalizes this vector + + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.distanceTo( v ) + + Computes distance of this vector to ``v`` + + :returns: squared distance + :rtype: float + +.. function:: Vector2.distanceToSquared( v ) + + Computes squared distance of this vector to ``v`` + + :returns: squared distance + :rtype: float + +.. function:: Vector2.setLength( l ) + + Normalizes this vector and multiplies it by ``l`` + + :returns: This vector + :rtype: :class:`Vector2` + +.. function:: Vector2.equals( v ) + + Checks for strict equality of this vector and ``v`` + + :returns: true if this vector equals ``v`` + :rtype: boolean + +.. function:: Vector2.isZero( ) + + Checks if length of this vector is within small epsilon (``0.0001``) + + :returns: true if this vector is zero + :rtype: boolean + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + var a = new THREE.Vector2( 0, 1 ); + var b = new THREE.Vector2( 1, 0 ); + + var d = a.distanceTo( b ); diff --git a/docs/_old/_build/html/_sources/api/core/Vector3.txt b/docs/_old/_build/html/_sources/api/core/Vector3.txt new file mode 100644 index 0000000000..5829edf3d5 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Vector3.txt @@ -0,0 +1,261 @@ +Vector3 - 3D vector +------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: Vector3() + + 3D vector + + :param float x: x-coordinate + :param float y: y-coordinate + :param float z: z-coordinate + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: Vector3.x + + float - default ``0`` + +.. attribute:: Vector3.y + + float - default ``0`` + +.. attribute:: Vector3.z + + float - default ``0`` + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Vector3.clone( ) + + Clones this vector + + :returns: New instance identical to this vector + :rtype: :class:`Vector3` + +.. function:: Vector3.set( x, y, z ) + + Sets value of this vector + + :param float x: x-coordinate + :param float y: y-coordinate + :param float z: z-coordinate + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.setX( x ) + + Sets x-value of this vector + + :param float x: x-coordinate + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.setY( y ) + + Sets y-value of this vector + + :param float y: y-coordinate + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.setZ( z ) + + Sets z-value of this vector + + :param float z: z-coordinate + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.copy( v ) + + Copies value of ``v`` to this vector + + :param Vector3 v: source vector + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.add( v1, v2 ) + + Sets this vector to ``v1 + v2`` + + :param Vector3 v1: source vector 1 + :param Vector3 v2: source vector 2 + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.addSelf( v ) + + Adds ``v`` to this vector + + :param Vector3 v: source vector + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.sub( v1, v2 ) + + Sets this vector to ``v1 - v2`` + + :param Vector3 v1: source vector 1 + :param Vector3 v2: source vector 2 + +.. function:: Vector3.subSelf( v ) + + Subtracts ``v`` from this vector + + :param Vector3 v: source vector + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.multiplyScalar( s ) + + Multiplies this vector by scalar ``s`` + + :param float s: scalar + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.divideScalar( s ) + + Divides this vector by scalar ``s`` + + Set vector to ``( 0, 0, 0 )`` if ``s == 0`` + + :param float s: scalar + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.negate( ) + + Inverts this vector + + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.dot( v ) + + Computes dot product of this vector and ``v`` + + :param Vector3 v: vector + :returns: dot product + :rtype: float + +.. function:: Vector3.lengthSq( ) + + Computes squared length of this vector + + :returns: squared length + :rtype: float + +.. function:: Vector3.length( ) + + Computes length of this vector + + :returns: length + :rtype: float + +.. function:: Vector3.lengthManhattan( ) + + Computes Manhattan length of this vector + + http://en.wikipedia.org/wiki/Taxicab_geometry + + :returns: length + :rtype: float + +.. function:: Vector3.normalize( ) + + Normalizes this vector + + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.distanceTo( v ) + + Computes distance of this vector to ``v`` + + :param Vector3 v: vector + :returns: squared distance + :rtype: float + +.. function:: Vector3.distanceToSquared( v ) + + Computes squared distance of this vector to ``v`` + + :param Vector3 v: vector + :returns: squared distance + :rtype: float + +.. function:: Vector3.setLength( l ) + + Normalizes this vector and multiplies it by ``l`` + + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.cross( a, b ) + + Sets this vector to cross product of ``a`` and ``b`` + + :param Vector3 a: vector + :param Vector3 b: vector + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.crossSelf( v ) + + Sets this vector to cross product of itself and ``v`` + + :param Vector3 v: vector + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.setPositionFromMatrix( m ) + + Sets this vector extracting position from matrix transform + + :param Matrix4 m: matrix + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.setRotationFromMatrix( m ) + + Sets this vector extracting Euler angles rotation from matrix transform + + :param Matrix4 m: matrix + :returns: This vector + :rtype: :class:`Vector3` + +.. function:: Vector3.equals( v ) + + Checks for strict equality of this vector and ``v`` + + :param Vector3 v: vector + :returns: true if this vector equals ``v`` + :rtype: boolean + +.. function:: Vector3.isZero( ) + + Checks if length of this vector is within small epsilon (``0.0001``) + + :returns: true if this vector is zero + :rtype: boolean + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + var a = new THREE.Vector3( 1, 0, 0 ); + var b = new THREE.Vector3( 0, 1, 0 ); + + var c = new THREE.Vector3(); + c.cross( a, b ); diff --git a/docs/_old/_build/html/_sources/api/core/Vector4.txt b/docs/_old/_build/html/_sources/api/core/Vector4.txt new file mode 100644 index 0000000000..164e636f88 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Vector4.txt @@ -0,0 +1,179 @@ +Vector4 - 4D vector +------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: Vector4( x, y, z, w ) + + 4D vector + + :param float x: x-coordinate + :param float y: y-coordinate + :param float z: z-coordinate + :param float w: w-coordinate + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: Vector4.x + + float - default ``0`` + +.. attribute:: Vector4.y + + float - default ``0`` + +.. attribute:: Vector4.z + + float - default ``0`` + +.. attribute:: Vector4.w + + float - default ``1`` + + +.. ............................................................................... +.. rubric:: Methods +.. ............................................................................... + +.. function:: Vector4.clone( ) + + Clones this vector + + :returns: New instance identical to this vector + :rtype: :class:`Vector4` + +.. function:: Vector4.set( x, y, z, w ) + + Sets value of this vector + + :param float x: x-coordinate + :param float y: y-coordinate + :param float z: z-coordinate + :param float w: w-coordinate + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.copy( v ) + + Copies value of ``v`` to this vector + + Sets ``w`` to 1 if ``v.w`` is undefined + + :param Vector4 v: source vector + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.add( v1, v2 ) + + Sets this vector to ``v1 + v2`` + + :param Vector4 v1: source vector 1 + :param Vector4 v2: source vector 2 + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.addSelf( v ) + + Adds ``v`` to this vector + + :param Vector4 v: source vector + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.sub( v1, v2 ) + + Sets this vector to ``v1 - v2`` + + :param Vector4 v1: source vector 1 + :param Vector4 v2: source vector 2 + +.. function:: Vector4.subSelf( v ) + + Subtracts ``v`` from this vector + + :param Vector4 v: source vector + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.multiplyScalar( s ) + + Multiplies this vector by scalar ``s`` + + :param float s: scalar + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.divideScalar( s ) + + Divides this vector by scalar ``s`` + + Set vector to ``( 0, 0, 0, 1 )`` if ``s == 0`` + + :param float s: scalar + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.negate( ) + + Inverts this vector + + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.dot( v ) + + Computes dot product of this vector and ``v`` + + :param Vector4 v: vector + :returns: dot product + :rtype: float + +.. function:: Vector4.lengthSq( ) + + Computes squared length of this vector + + :returns: squared length + :rtype: float + +.. function:: Vector4.length( ) + + Computes length of this vector + + :returns: length + :rtype: float + +.. function:: Vector4.normalize( ) + + Normalizes this vector + + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.setLength( l ) + + Normalizes this vector and multiplies it by ``l`` + + :returns: This vector + :rtype: :class:`Vector4` + +.. function:: Vector4.lerpSelf( v, alpha ) + + Linearly interpolate between this vector and ``v`` with ``alpha`` factor + + :param Vector4 v: vector + :param float alpha: interpolation factor + :returns: This vector + :rtype: :class:`Vector4` + + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + var a = new THREE.Vector4( 1, 0, 0, 0 ); \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/core/Vertex.txt b/docs/_old/_build/html/_sources/api/core/Vertex.txt new file mode 100644 index 0000000000..1eb503fed8 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/Vertex.txt @@ -0,0 +1,14 @@ +Vertex - Represents a vertex in space +------------------------------------- + +.. rubric:: Constructor + +.. class:: Vertex() + + Represents a vertex in space + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/core/index.txt b/docs/_old/_build/html/_sources/api/core/index.txt new file mode 100644 index 0000000000..c35433b244 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/core/index.txt @@ -0,0 +1,25 @@ +Core +==== + +.. toctree:: + + Clock + Color + Edge + Face3 + Face4 + Geometry + Math + Matrix3 + Matrix4 + Object3D + Projector + Quaternion + Ray + Rectangle + Spline + UV + Vector2 + Vector3 + Vector4 + Vertex diff --git a/docs/_old/_build/html/_sources/api/extras/core/Curve.txt b/docs/_old/_build/html/_sources/api/extras/core/Curve.txt new file mode 100644 index 0000000000..9aa6ac5597 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/extras/core/Curve.txt @@ -0,0 +1,15 @@ +Curve - Extensible curve object +-------------------------------------- + +.. rubric:: Constructor + +.. class:: Curve() + + Extensible curve object + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) + \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/extras/core/CurvePath.txt b/docs/_old/_build/html/_sources/api/extras/core/CurvePath.txt new file mode 100644 index 0000000000..b5c2a2c7f4 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/extras/core/CurvePath.txt @@ -0,0 +1,14 @@ +CurvePath - Path with connected curves +------------------------------------------- + +.. rubric:: Constructor + +.. class:: CurvePath() + + A Path made with connected set of curves + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/extras/core/Path.txt b/docs/_old/_build/html/_sources/api/extras/core/Path.txt new file mode 100644 index 0000000000..1ee4b87053 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/extras/core/Path.txt @@ -0,0 +1,14 @@ +Path - A CurvePath with a Drawing API +------------------------------------------- + +.. rubric:: Constructor + +.. class:: Path() + + A CurvePath with convenience Drawing methods + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/extras/core/Shape.txt b/docs/_old/_build/html/_sources/api/extras/core/Shape.txt new file mode 100644 index 0000000000..639a3864a1 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/extras/core/Shape.txt @@ -0,0 +1,14 @@ +Shape - A closed 2d path with holes +---------------------------------------- + +.. rubric:: Constructor + +.. class:: Shape() + + A closed 2d Path with holes + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/extras/core/TextPath.txt b/docs/_old/_build/html/_sources/api/extras/core/TextPath.txt new file mode 100644 index 0000000000..b07d462365 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/extras/core/TextPath.txt @@ -0,0 +1,14 @@ +TextPath - Class for turning Text to Shapes +---------------------------------------------- + +.. rubric:: Constructor + +.. class:: TextPath() + + Class for turning Text to Shapes + +.. rubric:: Attributes + +.. rubric:: Method + +.. rubric:: Example(s) \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/extras/core/index.txt b/docs/_old/_build/html/_sources/api/extras/core/index.txt new file mode 100644 index 0000000000..9a9a3f880c --- /dev/null +++ b/docs/_old/_build/html/_sources/api/extras/core/index.txt @@ -0,0 +1,9 @@ +Core Extras +============= + +.. toctree:: + Curve + CurvePath + Path + Shape + TextPath \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/extras/index.txt b/docs/_old/_build/html/_sources/api/extras/index.txt new file mode 100644 index 0000000000..a7db3a4e49 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/extras/index.txt @@ -0,0 +1,5 @@ +Extras +============ + +.. toctree:: + core/index.rst \ No newline at end of file diff --git a/docs/_old/_build/html/_sources/api/lights/AmbientLight.txt b/docs/_old/_build/html/_sources/api/lights/AmbientLight.txt new file mode 100644 index 0000000000..5ca65e7610 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/lights/AmbientLight.txt @@ -0,0 +1,37 @@ +AmbientLight - An ambient light +------------------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: AmbientLight( hex ) + + An ambient light + + Inherits from :class:`Light` :class:`Object3D` + + Affects :class:`MeshLambertMaterial` and :class:`MeshPhongMaterial` + + :param integer hex: light color + + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: AmbientLight.color + + Light :class:`Color` + + Material's ambient color gets multiplied by this color. + + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + var ambientLight = new THREE.AmbientLight( 0x333333 ); + scene.add( ambientLight ); diff --git a/docs/_old/_build/html/_sources/api/lights/DirectionalLight.txt b/docs/_old/_build/html/_sources/api/lights/DirectionalLight.txt new file mode 100644 index 0000000000..1364642112 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/lights/DirectionalLight.txt @@ -0,0 +1,145 @@ +DirectionalLight - A directional light +-------------------------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: DirectionalLight( hex, intensity, distance ) + + A directional light + + Part of scene graph + + Inherits from :class:`Light` :class:`Object3D` + + Affects :class:`MeshLambertMaterial` and :class:`MeshPhongMaterial` + + :param integer hex: light color + :param float intensity: light intensity + :param float distance: distance affected by light + + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: DirectionalLight.color + + Light :class:`Color` + +.. attribute:: DirectionalLight.intensity + + Light intensity + + ``default 1.0`` + +.. attribute:: DirectionalLight.position + + Direction of the light is normalized vector from ``position`` to ``(0,0,0)``. + +.. attribute:: DirectionalLight.distance + + Modulating directional light by distance not implemented in :class:`WebGLRenderer` + + +.. ............................................................................... +.. rubric:: Shadow attributes +.. ............................................................................... + +.. attribute:: DirectionalLight.castShadow + + If set to `true` light will cast dynamic shadows + + Warning: this is expensive and requires tweaking to get shadows looking right. + + ``default false`` + +.. attribute:: DirectionalLight.onlyShadow + + If set to `true` light will only cast shadow but not contribute any lighting (as if intensity was 0 but cheaper to compute) + + ``default false`` + +.. attribute:: DirectionalLight.target + + :class:`Object3D` target used for shadow camera orientation + +.. attribute:: DirectionalLight.shadowCameraNear + + Orthographic shadow camera frustum parameter + + ``default 50`` + +.. attribute:: DirectionalLight.shadowCameraFar + + Orthographic shadow camera frustum parameter + + ``default 5000`` + +.. attribute:: DirectionalLight.shadowCameraLeft + + Orthographic shadow camera frustum parameter + + ``default -500`` + +.. attribute:: DirectionalLight.shadowCameraRight + + Orthographic shadow camera frustum parameter + + ``default 500`` + +.. attribute:: DirectionalLight.shadowCameraTop + + Orthographic shadow camera frustum parameter + + ``default 500`` + +.. attribute:: DirectionalLight.shadowCameraBottom + + Orthographic shadow camera frustum parameter + + ``default -500`` + +.. attribute:: DirectionalLight.shadowCameraVisible + + Show debug shadow camera frustum + + ``default false`` + +.. attribute:: DirectionalLight.shadowBias + + Shadow map bias + + ``default 0`` + +.. attribute:: DirectionalLight.shadowDarkness + + Darkness of shadow casted by this light (``float`` from 0 to 1) + + ``default 0.5`` + +.. attribute:: DirectionalLight.shadowMapWidth + + Shadow map texture width in pixels + + ``default 512`` + +.. attribute:: DirectionalLight.shadowMapHeight + + Shadow map texture height in pixels + + ``default 512`` + + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + // white directional light at half intensity shining from the top + + var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 ); + directionalLight.position.set( 0, 1, 0 ); + scene.add( directionalLight ); diff --git a/docs/_old/_build/html/_sources/api/lights/Light.txt b/docs/_old/_build/html/_sources/api/lights/Light.txt new file mode 100644 index 0000000000..da3632d4bf --- /dev/null +++ b/docs/_old/_build/html/_sources/api/lights/Light.txt @@ -0,0 +1,23 @@ +Light - Abstract base class for lights +-------------------------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: Light( hex ) + + Abstract base class for lights + + Inherits from :class:`Object3D` + + :param integer hex: light color + + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: Light.color + + Light :class:`Color` diff --git a/docs/_old/_build/html/_sources/api/lights/PointLight.txt b/docs/_old/_build/html/_sources/api/lights/PointLight.txt new file mode 100644 index 0000000000..17c43c0eee --- /dev/null +++ b/docs/_old/_build/html/_sources/api/lights/PointLight.txt @@ -0,0 +1,56 @@ +PointLight - A point light +-------------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: PointLight( hex, intensity, distance ) + + A point light + + Part of scene graph + + Inherits from :class:`Light` :class:`Object3D` + + Affects :class:`MeshLambertMaterial` and :class:`MeshPhongMaterial` + + :param integer hex: light color + :param float intensity: light intensity + :param float distance: distance affected by light + + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: PointLight.color + + Light :class:`Color` + +.. attribute:: PointLight.intensity + + Light intensity + + ``default 1.0`` + +.. attribute:: PointLight.position + + Position of the light + +.. attribute:: PointLight.distance + + If non-zero, light will attenuate linearly from maximum intensity at light ``position`` down to zero at ``distance`` + + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + // red point light shining from the front + + var pointLight = new THREE.PointLight( 0xff0000 ); + pointLight.position.set( 0, 0, 10 ); + scene.add( pointLight ); diff --git a/docs/_old/_build/html/_sources/api/lights/SpotLight.txt b/docs/_old/_build/html/_sources/api/lights/SpotLight.txt new file mode 100644 index 0000000000..2949f1d892 --- /dev/null +++ b/docs/_old/_build/html/_sources/api/lights/SpotLight.txt @@ -0,0 +1,140 @@ +SpotLight - A spotlight +----------------------- + +.. ............................................................................... +.. rubric:: Constructor +.. ............................................................................... + +.. class:: SpotLight( hex, intensity, distance, castShadow ) + + A point light that can cast shadow in one direction + + Part of scene graph + + Inherits from :class:`Light` :class:`Object3D` + + Affects :class:`MeshLambertMaterial` and :class:`MeshPhongMaterial` + + :param integer hex: light color + :param float intensity: light intensity + :param float distance: distance affected by light + :param bool castShadow: shadow casting + + + +.. ............................................................................... +.. rubric:: Attributes +.. ............................................................................... + +.. attribute:: SpotLight.color + + Light :class:`Color` + +.. attribute:: SpotLight.intensity + + Light intensity + + ``default 1.0`` + +.. attribute:: SpotLight.position + + Position of the light + +.. attribute:: SpotLight.distance + + If non-zero, light will attenuate linearly from maximum intensity at light ``position`` down to zero at ``distance`` + + + +.. ............................................................................... +.. rubric:: Shadow attributes +.. ............................................................................... + +.. attribute:: SpotLight.castShadow + + If set to `true` light will cast dynamic shadows + + Warning: this is expensive and requires tweaking to get shadows looking right. + + ``default false`` + +.. attribute:: SpotLight.onlyShadow + + If set to `true` light will only cast shadow but not contribute any lighting (as if intensity was 0 but cheaper to compute) + + ``default false`` + +.. attribute:: SpotLight.target + + :class:`Object3D` target used for shadow camera orientation + +.. attribute:: SpotLight.shadowCameraNear + + Perspective shadow camera frustum ``near`` + + ``default 50`` + +.. attribute:: SpotLight.shadowCameraFar + + Perspective shadow camera frustum ``far`` + + ``default 5000`` + +.. attribute:: SpotLight.shadowCameraFov + + Perspective shadow camera frustum ``field-of-view`` + + ``default 50`` + +.. attribute:: SpotLight.shadowCameraVisible + + Show debug shadow camera frustum + + ``default false`` + +.. attribute:: SpotLight.shadowBias + + Shadow map bias + + ``default 0`` + +.. attribute:: SpotLight.shadowDarkness + + Darkness of shadow casted by this light (``float`` from 0 to 1) + + ``default 0.5`` + +.. attribute:: SpotLight.shadowMapWidth + + Shadow map texture width in pixels + + ``default 512`` + +.. attribute:: SpotLight.shadowMapHeight + + Shadow map texture height in pixels + + ``default 512`` + + +.. ............................................................................... +.. rubric:: Example +.. ............................................................................... + +:: + + // white spotlight shining from the side, casting shadow + + var spotLight = new THREE.SpotLight( 0xffffff ); + spotLight.position.set( 100, 1000, 100 ); + + spotLight.castShadow = true; + + spotLight.shadowMapWidth = 1024; + spotLight.shadowMapHeight = 1024; + + spotLight.shadowCameraNear = 500; + spotLight.shadowCameraFar = 4000; + spotLight.shadowCameraFov = 30; + + scene.add( spotLight ); diff --git a/docs/_old/_build/html/_sources/api/lights/index.txt b/docs/_old/_build/html/_sources/api/lights/index.txt new file mode 100644 index 0000000000..a4398fb46b --- /dev/null +++ b/docs/_old/_build/html/_sources/api/lights/index.txt @@ -0,0 +1,10 @@ +Lights +====== + +.. toctree:: + + Light + AmbientLight + DirectionalLight + PointLight + SpotLight diff --git a/docs/changelog.rst b/docs/_old/_build/html/_sources/changelog.txt similarity index 100% rename from docs/changelog.rst rename to docs/_old/_build/html/_sources/changelog.txt diff --git a/docs/index.rst b/docs/_old/_build/html/_sources/index.txt similarity index 100% rename from docs/index.rst rename to docs/_old/_build/html/_sources/index.txt diff --git a/docs/tutorials/FirstSteps.rst b/docs/_old/_build/html/_sources/tutorials/FirstSteps.txt similarity index 100% rename from docs/tutorials/FirstSteps.rst rename to docs/_old/_build/html/_sources/tutorials/FirstSteps.txt diff --git a/docs/tutorials/index.rst b/docs/_old/_build/html/_sources/tutorials/index.txt similarity index 100% rename from docs/tutorials/index.rst rename to docs/_old/_build/html/_sources/tutorials/index.txt diff --git a/docs/_old/_build/html/_static/basic.css b/docs/_old/_build/html/_static/basic.css new file mode 100644 index 0000000000..32630d54c9 --- /dev/null +++ b/docs/_old/_build/html/_static/basic.css @@ -0,0 +1,528 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +img { + border: 0; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + clear: both; + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.refcount { + color: #060; +} + +.optional { + font-size: 1.3em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +tt.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +tt.descclassname { + background-color: transparent; +} + +tt.xref, a tt { + background-color: transparent; + font-weight: bold; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} diff --git a/docs/_old/_build/html/_static/doctools.js b/docs/_old/_build/html/_static/doctools.js new file mode 100644 index 0000000000..8b9bd2c0e9 --- /dev/null +++ b/docs/_old/_build/html/_static/doctools.js @@ -0,0 +1,247 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilties for all documentation. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +} + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s == 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * small function to check if an array contains + * a given item. + */ +jQuery.contains = function(arr, item) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] == item) + return true; + } + return false; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node) { + if (node.nodeType == 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('