BLENDER_V242REND PSceneGLOB P 4@ .0DSRx֠SR1-Animationh 0.0?@DATAhDATAhDATA(@DATA(h@DATAh(DATAh@DATA(DATA(hXDATAh(@XDATAhXDATA0DATA0xhDATAx0DATAxhDATAPhDATAPDATAPh(DATA((hDATA(p(DATAp(hDATAph(DATAHDATAHhDATAH(hDATAh(DATA  Xh(h(@W@=W@< A=DATA(Link and MaterialsEditing>DATA(8MeshEditingF>DATA8H(Anim settingsObject>DATAHX8DrawObjectF>DATAXhHConstraintsObject>DATAhxXEffectsObjectDATAxhHooksObjectF>HDATAxParticle InteractionObject>XDATASoftbodyObject>XDATAzx ?333x?DzDz?kBGB*CŊ1A=11=DzDz=BH DATA x|?333xDATAux?333xD#Ch DI:ChCB(DC??zYDATAhw?333x/9DATA X P h@@@A DATA P0 X(h=G=$lxo?YYst h H XDATA H XTransform PropertiesView3d>DATA X H3D Viewport propertiesView3d>"DATA hp?333?M L-?|?>p:.u?k>ŔA2$?,??M ?嚽.L->q?k?|:>Ŕ" o@?= $M#e<֥<[;?B`R3=R? /vo?AAACr_wXBAǽA+ &BC6f'," o@?=G=$lxo??M L-?|?>p:.u?k>ŔA2$?,?K1?#=>CJ>xAJ=IB ??=|=CA" n@" n@  DATAhw h?333/9DATA0 Ph??P@Y@Ys@t8((DATA(Transform PropertiesIpo!>DATA(8t?333q@??@@rr<# <# Fj`Dz OB@?DATAx8?333Db@hDb@a@2f@;??uDATA,SC%.0DATA uggDATAg.0ji`.4       !"#      !"#.4 .4 .4 .4 .4 .4       !"#.4 .4 .4 .4 .4 .4 .4       !"#      !"#      !"#.4 .4 .4       !"#ji` H8.4 .4 .4 .4 .4 .4       !"#      !"#.4 .4 .4       !"#.4 .4 .4 ji`.4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 DATA |`?333DATA`z0 ?333?DzDzBD71A11DzDz=BH DATAx0{` ?33326 >jDATAp0?333??? ????A ???PAA ?O!?jG}CBH?A IB ?<# C DATAhw?333/9SRx֠\ SR2-Model HHXߠKX.0DATAH׈DATA׈HDATA׈DATAHDATAH؈DATA؈HDATA؈DATAHDATAHوDATAوHDATAوDATADATAHڐ׈DATAڐHHHDATA ڐ؈DATA h׈DATAh۰ DATA۰hDATA@۰HDATA@܈HوDATA܈@HDATA܈وDATA`DATA`ݨ؈DATAݨ`DATA8ݨ؈HDATA8ހH؈DATAހ8HDATAހوDATAXHHDATAXوDATAߠ׈DATAߠH؈> GB>)"DATAView PropertiesView3d>>"DATATransform PropertiesView3d8>"?DATAPaintImage>"DATAPropertiesImage" >"DATApx?333???߿L??3??@?L@?> GB>)#?@@v U@?L@?> GB>)$y@*ADATAxp{H ?333и$ ?kDATAhwp?333Export 3DSPLUGIN PATH/Users/mat/Documents/Archi/Siveton/SivetonBlends//Siveton.3dsjpgjpgDATAG0HH؈?@P@HE?8DATAPreviewLamp>DATALampLampF>DATASpotLamp>DATATexture and InputLamp>DATAMap ToLamp>DATAPreviewMaterial>DATAMaterialMaterialF>DATA(PreviewWorld>DATA(8WorldWorldF>DATA8H(Mist Stars PhysicsWorld>DATAHX8Texture and InputWorld>DATAXhHMap ToWorld>HDATAhxXOutputRender>DATAxhRenderRenderF>DATAxAnimRender>DATAFormatRender>DATALink and MaterialsEditing>DATAMeshEditingF>DATAMesh ToolsEditing>DATAMesh Tools 1Editing4>DATACameraEditingF>DATA ShadersMaterial>DATA  TextureMaterial>DATA  ( Anim settingsObject>DATA ( 8 DrawObject>DATA 8 H (ConstraintsObject>DATA HX 8ScriptlinksScript>DATAXh HEffectsObject 8DATAhxXMap InputMaterialz>DATAxhMap ToMaterial^>DATAxAnimAnim>DATASoundSound>DATAListenerSoundF>DATASequencerSound>DATACurve and SurfaceEditingF>DATACurve ToolsEditing>DATACurve Tools1Editing>DATAShadow and SpotLamp>DATAPreviewTexture>DATA(TextureTextureF>#DATA(8Radio RenderRadio>DATA8H(Radio ToolRadioF>DATAHX8Mist / Stars / PhysicsWorld>XDATAX hHAmb OccWorld>DATA h!xXRampsMaterialF>DATA!x" hMirror TranspMaterial>DATA"#!xParticle InteractionObject> 8DATA#$"ColorsTextureF>DATA$%#ImageTexture>DATA%&$Anim and MovieTexture>DATA&'%VoronoiTexture>DATA'(&LaticeEditingF>DATA()'HooksObjectF> (DATA)+(FontEditingDATA+,)Yafray DoFEditingF>DATA,-(+YafRayRenderF>xDATA-(.8,YafRay GIRenderF>xDATA.8/H-(Texture faceEditing>DATA/H0X.8UV CalculationEditing>.8DATA0X1h/HSoftbodyObject> 8DATA1h2x0XCloudsTexture>DATA2x31hLatticeEditingF>DATA342xModifiersEditing>DATA453ShapesEditing>3DATA564PaintEditing>DATA675Object and LinksObjectF>DATA786Links and PipelineMaterialF>DATA897Render LayersRender>hDATA9:8WoodTexture>DATA:<9CharEditing>)DATA<=:PluginTexture>DATA=>(<MagicTexture>DATA>(?8=MultiresEditing>DATA?8>(BakeRender>DATA@HuA@?333ҨE HChD6fvCd*CB(DC??zmDATAA@xBh@H?333Ҩ1AAzÎ-lB*B_DaA @CC<# @aDATABhpEA@?333Ҩ??? ????A ??@PAA ?j>3cG}CBH?A IB ?<# C DATAhEwBh?333ҨSave PNGTABLOCK/Users/mat/Desktop//Archi/Siveton/SolutionsImages/Sol2/ionsImages/ol2/ffice/SistaniHouseBlend/Sivetonclassombre.pngble2.pngsol2Etage1.pngite23SdB.pngpng ODATAG0KXو=> Co?HH(H(DATAH(p?333)(???J.I??3.I3J??@.I@J@?o=ͤ C> C!oD-~ Co????J.I??A ?IB ??=y<# C.IJ???? DATAKXG0HوH?e?=V>8{ AMHPZLPODATALPM`Transform PropertiesView3d>5DATAM`NpLPBackground ImageView3d>"DATANpOM`View PropertiesView3d>"TDATAONpPreviewView3dH\$<"DATAPpT(?333-Pi;0?Yޡ?Yq@?kq'_ZNJYޡ?&={gUkq8{ AMHi;0?Yޡ?Yq@?kqKP`ªBr:A7IS B ??;(h=C<=g3zn!@<@,&@P ???? DATA<So@aG,AVbB8 => DATA T(|TxP?333-PDATATx~U`T(?333-P D@ DaDD^(z??FF??H(z? DATAU`xVTx?333-PDwŁpDw5/Ľ^66{M??6DATAVWhU` ?333-P?DzDzBDFDz<# BH DATA(WhtXV?333-P ?A'!m 5DRAX<# <# Fj`Dz OB?A'!mDATAXzYWh ?333-P?DzDzKBCpppDzDz=BH DATAYuZX?333-PDCdC8Dnf CCB(DC??zDATAhZwY?333-PLoad Library PICTURE/home/mat/Documents/Archi/Diplôme/StructureBlend/projetBureaux.blend/Object/ject//\SabatHouseBlend\bonarbreD.blend.3dsblend.blender.blendpgdher q|4SRx\ ֠SR3-Materialodel Sing\``Hf0fx.0 ? pDATA\]DATA]]H\pDATA]H]] pDATA]]]H DATA]^]VDATA^^H] VDATA^H^^lDATA^^^H lDATA^_^DATA__H^ DATA_H__DATA___HDATA_`_lDATA`_VDATA`H`]]HDATA```H]]DATA`a `]H^DATAa ah`]^DATAahaa ]^HDATAaaah^^DATAab@a^H^DATAb@ba\^DATAbbb@^H^DATAbcb^_DATAcc`b]_DATAc`cc^_DATAccc`\_HDATAcd8c]_HDATAd8dc^_DATAddd8__DATAded_H_DATAeeXd^H_DATAeXee^_DATAeeeX]`DATAef0e^`DATAf0e_`DATAfxgp]]]H^ Wp Wq ppDATAgpfx_H__]<=ͦo?   IzxhhyhDATAhhixOutputRender>DATAixjhhRender LayersRender>hhDATAjkixRenderRenderF>DATAkljAnimRender>DATAlmkFormatRender>DATAmnlPreviewMaterial>DATAnomLinks and PipelineMaterial>DATAopnMaterialMaterial8>DATApqoRampsMaterial8>oDATAqspShadersMaterialT>DATAstqMirror TranspMaterialp>DATAtu(sTextureMaterial>DATAu(v8tPreviewTexture>DATAv8wHu(TextureTextureF>DATAwHxXv8ColorsTextureF>v8DATAxXyhwHMap InputMaterial>DATAyhxXMap ToMaterial>DATAzxu{p?333lPDChB .DR/ChCB(DC??zIDATA{pp~zx?333lP?'b;jt?8?AF>j-˷?r.2>ujbϔh>"??'b?A=˷FjX>j?r.&?8{ >uvc@@n.?<}=<ȷj-˷?r.2>ujbϔh>"?>?V%>>ӍBԇ?I B ??=,y=C?cn/d???? DATA(~t{p?333lPCz A Cz A <# <# Fj`Dz OBDATAhw~?333lP SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATAgp_`^^@\5@fAMH mU m U)DATAPreviewView3d@D"DATAp?333l@?$ uf?7?[;>YX*=?Z ?- R???$?[?=un>Y`?Z?7 0?-A*A?@` !g޿8*;7@%?s^>>*>T@<qY-LT@BB=-=HD<$N=$S>$z B;¤t8`C :B#@*I@\5@fAMH?$ uf?7?[;>YX*=?Z ?- R????vھ^ H\AC?IUB ??: Y=C?cn/d???? DATAu?333l@DCdC9>D,eCCB(DC??zDATA(t?333l@Cz A Cz A <# <# Fj`Dz OBDATAhw?333l@ SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA^^H^_<=ͦo? k  kxDATAOutputRender>DATARender LayersRender>DATARenderRender@>DATAAnimRender>DATAFormatRender>DATAPreviewMaterial>DATALinks and PipelineMaterialF>DATA(MaterialMaterial>DATA(8RampsMaterial>DATA8H(ShadersMaterial>DATAHX8Mirror TranspMaterial>DATAXhHTextureMaterial^>DATAhxXMap InputMaterial>DATAxhMap ToMaterial^>XDATAu?333l0E CDClCB(DC??z%DATAp?333l0?'b;jt?8?AF>j-˷?r.2>ujbϔh>"??'b?A=˷FjX>j?r.&?8{ >uvc@@n.?<}=<ȷj-˷?r.2>ujbϔh>"?>?V%>>ӍBԇ?I B ??=,y=C?cn/d???? DATA(t?333l0Cz A Cz A <# <# Fj`Dz OBDATAhw?333l0 SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA\^__H<=ͦo?XDATAOutputRender>DATARender LayersRender>DATARenderRenderF>DATAAnimRender>DATAFormatRender>DATAPreviewMaterial>DATALinks and PipelineMaterialF>DATAMaterialMaterial>DATA(RampsMaterial>DATA(8ShadersMaterial>DATA8H(Mirror TranspMaterial>DATAHX8TextureMaterial^>DATAXhHPreviewTexture>DATAhxXTextureTextureF>DATAxhColorsTexture>DATAxMarbleTexture>DATAWoodTexture>DATAImageTexture>DATAAnim and MovieTexture>DATACloudsTexture>DATAu?333lDClD\CjXCB(DC??zDATAp?333l?'b;jt?8?AF>j-˷?r.2>ujbϔh>"??'b?A=˷FjX>j?r.&?8{ >uvc@@n.?<}=<ȷj-˷?r.2>ujbϔh>"?>?V%>>ӍBԇ?I B ??=,y=C?cn/d???? DATA(tX?333lCz A Cz A <# <# Fj`Dz OBDATAhXw?333l SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA^H]`_=m=o?mUmUhDATAp?333l?=.?6`?+> ,=Ng?P?eɿD??=,?+=Nf>?P|?6` ,?d@@n.?=|R5t n=rW=Jv;$;\= lҷG;?A 7@oo?mYp@Q|@(Ckhd@@n/?=m=o??=.?6`?+> ,=Ng?P?eɿD?S.#>߁> >A4!?I B ??<=C?cn/d???? DATAu?333lDCdC9>D,eCCB(DC??zDATA(th?333lCz A Cz A <# <# Fj`Dz OBDATAhhw?333l SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendSRx\ SR3Kloputils-Model .0Ǩ(X8.0 ? pDATAǨDATA(ǨpDATA(h pDATAhȨ( DATAȨhDATA(Ȩ DATA(hLDATAhɨ( LDATAɨhDATA(ɨLDATA(hTDATAhʨ(TDATAʨhDATAʨ DATA(p(DATAp˸(ǨȨDATA˸phDATAH˸(DATAH̐(hDATA̐H(hDATA ̐Ȩ(DATA hȨɨDATAhͰ (DATAͰhhDATA@ͰɨDATA@ΈɨDATAΈ@Ǩ(DATAΈh(DATA`ȨhDATA`ϨhDATAϨ`(hDATA8ϨɨʨDATA8ЀʨDATAЀ8hDATAЀDATAʨDATAXP((h Mp Mg hp DATAPi0XȨ(ɨ>h>o?KKDxgHhDATAHXTransform PropertiesView3d>"5DATAXhHBackground ImageView3d>"DATAhXView PropertiesView3d>"TDATAxp?333l?R-?<ϔ?TF>fbx_x?\?u>\>hA??S?TF_->f?\?<ϖb?u>:kxھ0?>G'#3}AW>E> a:k>=T>":m??@*Gxn;?Kv)@YN8bB3>:kxھ0?>h>o??R-?<ϔ?TF>fbx_x?\?u>\>hA??E6 F@6I٨(B ??;m1=C:kw>>03L̳ ???? DATA<٨o@aG,AVbB8 => DATAxcHx?333lB QBQ”B.lBffA @CC<# @fxxDATA xx S S8DATA8 S.0ji`.4       !"#      !"#.4 .4 .4 .4 .4 .4       !"#.4 .4 .4 .4 .4 .4 .4 .4       !"#      !"#      !"#.4 .4 .4       !"#ji`.4 .4 .4 .4 .4 .4       !"#      !"#.4 .4 .4       !"#.4 .4 ji`.4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 DATA cH|c?333lDATAcdxcH ?333l?DzDzBDFDz<# BH DATA(dxtec?333l ?A'!m 5DRAX<# <# Fj`Dz OB?A'!mDATAezfdx ?333l?DzDzKBCpppDzDz=BH DATAfuge?333lDCdC8Dnf CCB(DC??zDATAhgwf?333l Save AsraryF PICTURE/Users/mat/Documents/Archi/Montellier/BlendsMontelier/AREOAK.BLEND/Material/d/World/\SabatHouseBlend\Montellierentreemodif.blender.blendpgdherique.jpghinglaDATAi00P(hh?@PU U U tHj(8DATAj(k8PreviewLamp>DATAk8lHj(LampLampF>DATAlHmXk8SpotLamp>DATAmXnhlHTexture and InputLamp>DATAnhoxmXMap ToLamp>mXDATAoxpnhPreviewMaterial>DATApqoxMaterialMaterialF>DATAqrpPreviewWorld>DATArsqWorldWorldF>DATAstrMist Stars PhysicsWorld>DATAtusTexture and InputWorld>DATAuvtMap ToWorld>tDATAvwuOutputRender>DATAwyvRenderRenderF>DATAyzwAnimRender>DATAz{(yFormatRender>DATA{(|8zLink and MaterialsEditing>DATA|8}H{(MeshEditingF>DATA}H~X|8Mesh ToolsEditing>DATA~Xh}HMesh Tools 1Editing>DATAhx~XCameraEditingF>DATAxhShadersMaterial>DATAxTextureMaterial>DATAAnim settingsObject>DATADrawObject>DATAConstraintsObject>DATAScriptlinksScript>DATAEffectsObjectDATAMap InputMaterial^>DATAMap ToMaterial>DATAAnimAnim>DATA(SoundSound>DATA(8ListenerSoundF>DATA8H(SequencerSound>DATAHX8Curve and SurfaceEditingF>DATAXhHCurve ToolsEditing>DATAhxXCurve Tools1Editing>DATAxhShadow and SpotLamp>DATAxPreviewTexture>DATATextureTextureF>DATARadio RenderRadio>DATARadio ToolRadioF>DATAMist / Stars / PhysicsWorld>DATAAmb OccWorld>DATARampsMaterialF>pDATAMirror TranspMaterial>xDATAParticle InteractionObject>DATA(ColorsTextureF>DATA(8ImageTexture>DATA8H(Anim and MovieTexture>DATAHX8VoronoiTexture>DATAXhHLaticeEditingF>DATAhxXHooksObjectF>DATAxhFontEditing>DATAxYafray DoFEditingF>hDATAYafRayRenderF>wDATAYafRay GIRenderF>wDATATexture faceEditing>DATAUV CalculationEditing>DATASoftbodyObject>DATACloudsTexture>DATALatticeEditingF>DATAModifiersEditing>DATA(ShapesEditing>DATA(8PaintEditing>DATA8(Object and LinksObjectF>DATAHu@?333lpDChADR[,I(CjēCB(DC??zmDATA@xhH?333lp1AAzÎ-lB*B_DaA @CC<# @aDATAhp@?333lp??? ????A ??@PAA ?j>3cG}CBH?A IB ?<# C DATAhwh?333lp SELECT DATABLOCKMaterial//Documents/Archi/Montellier/images/Plans/ucturesimages/CH Office/SistaniHouseBlend/planchersans.jpgachSSisolate.jpgem[DATA0Hi0ɨʨ> >_7f?   5xx(hDATA(8Background ImageView3d>"DATA8H(View PropertiesView3d>>"DATAHX8Transform PropertiesView3d>"?DATAXhHPaintImage>"DATAhXPropertiesImage" >"DATA x|?333mG@DATAp`x?333mG@?3?3??3?3?> 2<7e>_;?@E4(@UB VĪ?> >_7f??3?3??55@UIB ??<=BUo@vfh???? DATA<o.2&@~*B4 =? mDATAh`w?333mG@ Save JPEGPLUGIN PATH/Users/mat/Documents/Archi/Montellier/images/Plans/planRdCsans.jpgjpg DATAx `?333mG@By6jB.k A0C, EA @CC<# @EDATA yH?333mG@DD5?⪾?E.4 ?>$y@*ADATAxH{ ?333mG@и$ ?kDATA(tH?333mG@@?@@<# <# Fj`F@ OB@?DATAH80ǨȨh(?@PSSSTL P@ @DATA@PPreviewLamp>DATAP`@LampLampF>DATA`pPSpotLamp>DATAp̀`Texture and InputLamp>DATÀ͐pMap ToLamp>pDATA͐Π̀PreviewMaterial>DATAΠϰ͐MaterialMaterialF>DATAϰΠPreviewWorld>DATAϰWorldWorldF>DATAMist Stars PhysicsWorld>DATATexture and InputWorld>DATAMap ToWorld>DATAOutputRender>DATA RenderRenderF>DATA 0AnimRender>DATA0@ FormatRender>DATA@P0Link and MaterialsEditing>DATAP`@MeshEditingF>DATA`pPMesh ToolsEditing>DATAp݀`Mesh Tools 1Editing>DATA݀ސpCameraEditingF>DATAސߠ݀ShadersMaterial>DATAߠސTextureMaterial>DATAߠAnim settingsObject>DATADrawObjectF>DATAConstraintsObject>DATAScriptlinksScript>DATAEffectsObjectDATAMap InputMaterial^>DATA Map ToMaterial>DATA 0AnimAnim>DATA0@ SoundSound>DATA@P0ListenerSoundF>DATAP`@SequencerSound>DATA`pPCurve and SurfaceEditingF>DATAp`Curve ToolsEditing>DATApCurve Tools1Editing>DATAShadow and SpotLamp>DATAPreviewTexture>DATATextureTextureF>DATARadio RenderRadio>DATARadio ToolRadioF>DATAMist / Stars / PhysicsWorld>DATAAmb OccWorld>DATARampsMaterialF>ΠDATA Mirror TranspMaterial>ސDATA 0Particle InteractionObject>DATA0@ ColorsTextureF>DATA@P0ImageTexture>DATAP`@Anim and MovieTexture>DATA`pPVoronoiTexture>DATAp`LaticeEditingF>DATApHooksObjectF>DATAFontEditing>DATAYafray DoFEditingF>݀DATAYafRayRenderF>DATAYafRay GIRenderF>DATATexture faceEditing>DATAUV CalculationEditing>DATASoftbodyObject>DATA CloudsTexture>DATA  LatticeEditingF>DATA  0 ModifiersEditing>DATA 0 @ ShapesEditing> DATA @ 0PaintEditing>DATA PuH?333mTDChB<,Dz=>CeCB(DC??zTmDATAHxp P?333mT1AAzÎ-lB*B_DaA @CC<# @aDATAppH?333mT??? ????A ??@PAA ?j>3cG}CBH?A IB ?<# C DATAhwp?333mT SELECT DATABLOCKMaterial//Documents/Archi/Montellier/images/Plans/ucturesimages/CH Office/SistaniHouseBlend/planchersans.jpgachSSisolate.jpgem[DATA8Hʨh>_?37f? K  K50pDATA0@Background ImageView3d>"DATA@P0View PropertiesView3d>>"DATAP`@Transform PropertiesView3d>"?DATA`pPPaintImage>"DATAp`PropertiesImage" >"DATAp?333m?3?3??3?3?>_2h<7e?3;?@U3Qi?U7B Vī?>_?37f??3?3??55@UIB ??<=BUo@vfh???? DATA<o.2&@~*B4 =? mDATA |h?333mDATAhhw ?333m Save JPEGPLUGIN PATH/Users/mat/Documents/Archi/Montellier/images/Plans/planRdCsans.jpgjpg DATA xh?333mBy6jB.k A0C, EA @CC<# @E!(!mDATA,!(!IMB@A=q.4 DATA,!!(SCB(ff.0DATA m!DATA!.0ji`      !"#      !"#      !"#.4 .4 .4 .4 .4 .4 ji`.4 .4 .4 .4 .4 .4 .4 .4       !"#      !"#      !"#.4 .4 .4       !"#.4 .4 .4 .4 .4 .4 .4       !"#      !"#.4 .4 .4       !"#.4 .4 .4 ji`.4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4  H8DATAy ?333mDD5?⪾?E.4 ?>$y@*ADATAx{ ?333mи$ ?kDATA(t?333m@?@@<# <# Fj`F@ OB@?SRx SR4-Sequencepx.0 ? pDATADATA0pDATA0p pDATAp0 DATAp DATA0  DATA0pLDATAp0 LDATApDATA0 DATA0pDATAp0LDATA0DATA@pDATA@DATA@pDATADATA`0DATA`0pDATA`0pDATA8DATA80DATA8pDATADATAXDATAX0DATAX0DATA00pDATA0xppDATAx00pDATAp   DATAOutputRender>DATARenderRenderF>DATAAnimRender>DATAFormatRender>DATARender LayersRender>DATABakeRender>DATAu?333mDCh؎DChCB(DC??zDATAhw?333m/9DATA00p Mp Mg hp DATA@=8>iιo? ! !; < DATAvx?333mCzACzAA @FB=A DATAxp?333m????????=8>iιo?Afff@&D??AfffIB ?<# C DATAhwx?333mAVE TARGA/t1.blend9DATA@0pp=8>Ho? K  Ke{ 8HDATA8v?333mCzACzA1||1A @FB=A DATApH8?333m????????=8>Ho?Afff@*??AfffIB ?<# C DATAhHw?333mAVE TARGA/t1.blend9DATA@0p0=8>o?KK` `DATA(t0?333mĀB?B?`bb`<# <# Fj`Dz SQB?DATA0p `?333mĀ????????=8>o?Afff@ϒ??AfffIB ?<# C DATAh `w0?333mĀOAD FILE/9SRx SRNodes `.0 DATA  DATA   DATA  ` DATA `  DATA   `DATA   DATA  ` DATA `  DATA   `DATA   DATA ` DATA` DATA  DATA0  DATA0x ` DATAx0  DATAx  `DATAP  `DATAP  DATAP  DATA(  DATA(p  DATAp( ``DATAp `DATAH `DATAH  DATAH  DATA   `DATA h  DATAh   DATAh ` DATA    `((DATA%  ` >B{>ݎ7f?P8#p(DATABackground ImageView3d>"DATAView PropertiesView3d>>"DATATransform PropertiesView3d8>"?DATA(PaintImage>"DATA(PropertiesImage" >"DATA8y`?333DDa>1?>ˉ?VuP.7`@m(DATA`p8?333???5/k ????A5/@k@ ?>B{>ݎ7f3ܿJ=n'?@:@x UA5/@k@ ?>B{>ݎ7f????5/k ??@:?IB ??<2=BU>@Z,5/k @b?|}AW"???? DATA<o.2&@~*B4 =? mDATA | H`?333DATA( Ht!?333@??@@||<# <# Fj`F@ OB@?DATA!x" H?333By6jB.k A0C, EA @CC<# @EDATAx"{#p! ?333и$ ?kDATAh#pw"?333Export 3DSPLUGIN PATH/Users/mat/Documents/Archi/Siveton/SivetonBlends//Siveton.3dsjpgjpgDATA%{    `?@P tybJb&sDATA&'PreviewLamp>DATA'( &LampLampF>DATA( )0'SpotLamp>DATA)0*@( Texture and InputLamp>DATA*@+P)0Map ToLamp>)0DATA+P,`*@PreviewMaterial>DATA,`-p+PMaterialMaterialF>DATA-p.,`PreviewWorld>DATA./-pWorldWorldF>DATA/0.Mist Stars PhysicsWorld>DATA01/Texture and InputWorld>DATA120Map ToWorld>0DATA231OutputRender>DATA342RenderRenderF>DATA453AnimRender>DATA574FormatRender>DATA785Link and MaterialsEditing>DATA89 7MeshEditingF>DATA9 :08Mesh ToolsEditing>DATA:0;@9 Mesh Tools 1Editing^>DATA;@DATADATA=`>pDATA>p?=`Anim settingsObject>DATA?@>pDrawObject>DATA@A?ConstraintsObject>DATAAB@ScriptlinksScript>DATABCAEffectsObject@DATACDBMap InputMaterialz>DATADECMap ToMaterial^>DATAEFDAnimAnim>DATAFHESoundSound>DATAHIFListenerSoundF>DATAIJ HSequencerSound>DATAJ K0ICurve and SurfaceEditingF>DATAK0L@J Curve ToolsEditing>DATAL@MPK0Curve Tools1Editing>DATAMPN`L@Shadow and SpotLamp>DATAN`OpMPPreviewTexture> DATAOpPN`TextureTextureF> WDATAPQOpRadio RenderRadio>DATAQRPRadio ToolRadioF>DATARSQMist / Stars / PhysicsWorld>SDATASTRAmb OccWorld>DATATUSRampsMaterialF>,`DATAUVTMirror TranspMaterial>@DATAWYVColorsTextureF> DATAYZWImageTexture>DATAZ[ YAnim and MovieTexture>DATA[ \0ZVoronoiTexture>DATA\0]@[ LaticeEditingF>DATA]@^P\0HooksObjectF>?DATA^P_`]@FontEditingDATA_``p^PYafray DoFEditingF>;@DATA`pa_`YafRayRenderF>3DATAab`pYafRay GIRenderF>3DATAbcaTexture faceEditing>DATAcdbUV CalculationEditing>bDATAdecSoftbodyObject>@DATAefdCloudsTexture>DATAfgeLatticeEditingF>DATAghfModifiersEditing>DATAhjgShapesEditing>gDATAjkhPaintEditing>DATAkl jObject and LinksObjectF>DATAl m0kLinks and PipelineMaterial>DATAm0n@l Render LayersRender>2DATAn@oPm0WoodTexture> DATAoPp`n@CharEditing>^PDATAp`qpoPPluginTexture>DATAqprp`MagicTexture>DATArsqpMultiresEditing>DATAsrBakeRender>4DATAtuu?333%mˠE ChDՌ'cCCB(DC??z.0mDATAuxvt?333%1AAzÎ-lB*B_DaA @CC<# @aDATAvpyu?333%??? ????A ??@PAA ?j>3cG}CBH?A IB ?<# C DATAhywv?333%Save JPEG(Menu)/home/mat/Desktop/tutovira/tut_images//tut_images/_images/Images/ol2/ffice/SistaniHouseBlend/Edgefin.jpgssairayivetonclassombre.pnge2loft2.pn  ^O"sDATA{%   ``?e?HAMH P8 Pcc|DATA|}Transform PropertiesView3dHD> /DATA}~|Background ImageView3d>" DATA~}View PropertiesView3d>" dDATA~OutputRender>DATARenderRender>DATAAnimRender>DATAFormatRender>DATAp?334{i;0?Yޡ?Yq@?kqKP`ªBm&AѨI  B ??;|=Czo,[2@*F<_ ???? DATA< o.5?R3@ .B(?!KDATA |?333{DATA(t0?333{A?A@88<# <# Fj`Dz OBA?DATA0u(?333{DCCEDU@pxtCCB(DC??z DATA(xP0?333{:@AB ?AA @CC<# @DATAhPw(?333{Select Image PICTURES/Users/mat/Desktop/in-Juillet04/Plans ICH Office/SistaniHouseBlend/lend\cadastre_1.jpgse.blend  DATA{    @?;@Q='>CAMH B @XXzMDATAzMc`Transform PropertiesView3d>5DATAc`zMBackground ImageView3d>"DATAc`View PropertiesView3d>"TDATAPreviewView3dH\$<"DATA ~?333 D@ DaBvDO7C^D>??FF??H.0%?)x..DATAp ?333?$ uh?7?[;>Y[*=?Z?- R???$?[@=uk>Y^?Z?7 0?-A*A??,u ҿ8*;7?>m>>*>5@ >qY-~BB>>QG= zKA.=->n B;l¤sEC 9 B@)/@?;@Q='>CAMH?$ uh?7?[;>Y[*=?Z?- R????vپ^ H\AdBI8B ??:uw=C<=gh:kٳ@b?|}AW" ???? DATA<8o@aG,AVbB8 => DATA |?333DATAx@?333DwŁpDw5/Ľ^66{M??6xbDATA,pOB"A=pHDATA,pIPAff.=0DATA, pOBR@IDATA, xMEXA|I^DATA,x MAXAffI%DATA b[[DATA(D[.0ji`                                H.:.=0    II^I%I%I%I%            DATA@  ?333?DzDzBDFDz<# BH DATA( tx@?333 ?A'!m 5DRAX<# <# Fj`Dz OB?A'!mDATAxzH ?333?DzDzKBCpppDzDz=BH DATAHu@x?333DCdC8Dnf CCB(DC??zDATAh@wH?333Save AsGP FILE PATH/home/mat/Documents/Archi/tut_images//tut_images/_images/erPermis.blend/Object//\SabatHouseBlend\Tutodbut.blend3dsblend.blender.blendpgq!SC.0nSCSceneDLtageaIji`D.D@PY<@DL>s>ި/>s>ި/>s>ި/?..`..0dd??< KXdd M# ???GF?0/>:?2..????:o?=L/Users/mat/Documents/Archi/Montellier/textures/IMG_3002.jpg/Users/mat/Desktop/SIVclassique//ftype@&#@^@&^#D  8DATADaBI@DATABaPDzHDATAPayBdIDATAya.PI DATA.a.@y.IDATA.@a...IDATA.a..@.HDATA.a..bIDATA.a. r}HDATA(.``,d'=A@DATAL.k?LB ?:o ??8ѷ=DATA.0c.Codec: AnimationDATA.seanvide"sptlrle  tprl $dratcflgDcmfrapplclutversDATA@.f.Edges RenderLayerDATA@.f.Shadows RenderLayercDATAl. CU8.//CUsurfaceArc.003.0h.0h=u@@ ˴%@CX-?^7'Ŭd????DATA8.0h, .2 .0DATA .0+NkH>`48??NkI@Ka3]8??>@R,??D@z~(??>@zV??@I#h@??@T r@Ka{D??@TR>`*??DATA4.2 ?@@@@@@@AAA A0OCK!IMt.2.4 IMptitcoupeNS.jpg//ptitcoupeNS.jpgXDATAX0mhDATA0mhJFIFExifII* (12i,Oce 9400 Adobe Photoshop 7.02004:06:25 22:48:460210765 mz(HHJFIFHH Adobe_CMAdobed            M"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?61cCִ@hI%)$IJI$RI$I%)$IJI$RI$TI%)$IJI$)tHJBJC~Bxr||2_Ci0FUmm9 MJ˨PTm,mt])gPV]` {z5 ,#];ܒI)I$JTI%)PUcӳi4n}}S³,4VX=,%ksY%0~> nR&,v?]ez42 ?7 ӐL25#ۏqh7QVgnn$Tea][Ռ5mP¿{q a>'oPlo3}7Y[ls mm7/ҡ?%4\PZOnzĔV*6lsZw=>EV"o)ŕfoXyɸX7l umӔ-ݍV]x?Q%$H'fq#p KvήI%1NITgc@RĢKGKZI"7{w;fzJlI)I$JTI%)$IJI$R$I%)$IJI$RI$TI%)$IJI$RI$I%)$IJI$RI$ TPhotoshop 3.08BIM%8BIMgg8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIM5-8BIM8BIM8BIM8BIM@@8BIM8BIMKm ptitcoupeNS mnullboundsObjcRct1Top longLeftlongBtomlongmRghtlong slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongmRghtlong urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM8BIM8BIM MsJFIFHH Adobe_CMAdobed            M"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?61cCִ@hI%)$IJI$RI$I%)$IJI$RI$TI%)$IJI$)tHJBJC~Bxr||2_Ci0FUmm9 MJ˨PTm,mt])gPV]` {z5 ,#];ܒI)I$JTI%)PUcӳi4n}}S³,4VX=,%ksY%0~> nR&,v?]ez42 ?7 ӐL25#ۏqh7QVgnn$Tea][Ռ5mP¿{q a>'oPlo3}7Y[ls mm7/ҡ?%4\PZOnzĔV*6lsZw=>EV"o)ŕfoXyɸX7l umӔ-ݍV]x?Q%$H'fq#p KvήI%1NITgc@RĢKGKZI"7{w;fzJlI)I$JTI%)$IJI$R$I%)$IJI$RI$TI%)$IJI$RI$I%)$IJI$RI$8BIM!UAdobe PhotoshopAdobe Photoshop 7.08BIMphttp://ns.adobe.com/xap/1.0/ 0210 4294967295 1033 621 Oce 9400 1 488/1 488/1 2 1 2004-06-25T20:12:11+03:30 2004-06-25T20:17:46+03:30 2004-06-25T20:17:46+03:30 Adobe Photoshop CS Windows uuid:125b4a44-c67e-11d8-8a0c-d84ad8102526 adobe:docid:photoshop:125b4a42-c67e-11d8-8a0c-d84ad8102526 adobe:docid:photoshop:3b6f6f71-c6d3-11d8-bf86-bd7ecfd79362 image/jpeg AdobedC m     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyz?߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽wH#E,ʪ{ >~~~~~~~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽p6nIC3gn.SPnչ:> Wfʇ vv܇ MY [xSTtG H&S''}ķRbxWUՔuiZwIJO%<$`N\H.u:ҵV t{s&1X=яT`U,RVŇff#%MN`"2 #(.xޝ'5ݵ,*4vx(|4Կhᬑb%z!fPުLt5Tf(`;GhU+GW3Dj"z8 n{|3iY bZn Ԇ_~VL5R4ȫb-b'ze|v5b=_6MٲmN lFs-ݻ14/j`R)~~~~~~~~~~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽Uu(]J ,Ue`lAۯ?Wt| /CιA؝}mq3zK>rƴAS11"L&7,ˇ7eZ}lvB橫wF6ELp"6>,XT3?EL=vg[Oh7m,6{r]w_aٻoigA&S/hNSUv/%?w݃;onW;k1v~;B|{*]%nϐܻ !# 9 ;;8Ol-Ͻ;Cd{.s!>ٻ6>y- vS3SQCqW5h2?NʬrP|'Ƶ&[MN҆1;3Af*i̒ď$z$/a{z/MF[wuNפ8*lfj~>O'Y[O@5(B/0~~~~~~~~~~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽ZH6667>~~~x˪O'F }Z4 $ؒ׵Ǽ|Oy96yӘ*)mm;_qmm:p w Kl: %L4kOLA 1'IllgN_:XL~6սQ'oe;+MUܿn+U/$EC_)z4y/9cս)>iofsr52ew~,lVJ/ =Bvb龮]n_7xuZv&UwU._18]U9?u3T .q!_JښziwY#['QtFm#qvv#-NZ&{:KǦ[c"fxT,2I fCVy<&~~~~YbNIxRWC"EauK{Z6ۛ_8D(AоS dcWguB~G߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽TD-Uuw(, Ͼ~j8^&OO{Q,r+G5/StiT$xvdcf`n}_r7 e n  ˦گ+޿pC!kQHzY%m7veVp̂]6}iV2ߤ/;v$ 'dip#D0G錭ɻ[߾/WGLch!5pEU M[L6DQ Rt'IFʌ;D^ 1 k6dqPͲ טgL]:$fXuh$}>_{{{{~~~~~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽O^c~sb<)NT(jmyuOq '\G0`u?}l=EPo/X<0᦮jstΔ'V~㼱n!SCWIUI IX4TtEH'S&`&d?1h̅Uz*h>hqURǎC]ϑ _D$[ن몥JOSt'Ź X5;3yd \:Po|O Ee\XHeMr Lkx#~~~~~derso]7'U-{afm.Ww6ϭ*,efSG,š@ 3;3|1ݘ޷}veh?vFy)uɌ<0Sur,{{~T%=>Ah2#b`~~~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߆F7_8劦*?7wob `>Zyʬ n~ؐv0S9)>HcSq֐O+)6Q{,&Zy_9TEYȻҧF^(!zoɎZ#CؙMvqZn婖.֬3#Qm/ (YچQ['|e;o'm*;in=6C%[+)vQV'5 f1" =f`,K;#|zDk'C ZapmڐIksE:6&(|)3UO}FؑbO{{{{{{!8O?#9P+O8mԼa<{:m7=ׄn]Y  l9RE屵MI_QHث>qladC~'Vjݡb~P|Mm<9 ǵd-n4SBz6wu펰vz*,76w%Lnf)x䆦DeuR"{{{{{{{{{{{{{{{{{{{{߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽^\MaIDN{ߟtqWoH_ƒK8iJaOowp"VxjcaS$gCkeg>qÚa88)஧z[>venjC RX+w¢ʿ#)' JV!gRyKԴLbܵcւ/~~b3@G3'G+W{#rR|$H@VqTYchjh{=rO$߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽))'8`9&yc]rK,BGqYIX/`Kvj??Z #Κ/2Sy`T\'ŏ9_;~>3/q; ۗhxoynVF MMSe%5m>A$hUf(#i/ %u0N=l[gbWZ;* ƥrJ"Uo:h/pfaײ]~Q nbj볷GUG{p'tW$l:=AיI.``zٶ+VfY13$k HR6:wʮ[Cu}oq col^K њA3}CIgTN&Ek?pV/Gj_W1:iWcu¦"$A[L+!\g߽߽DY#5gI,h 3 .Id{?WC3;bn鎐[:soJZ1Ԙ뜤AXQѸ`=)?DU߅78V|KKid;DPA2c}+B;hmo5f ?˦}Й)dq8Bi3_k-c%X:WיO]7fg*)e2w^w`*֛5WȅD2|/=ݫ7Ž|}&k=i+?u.BI-Rf#0Y&cb-Mn'7J9nbd&L!nȯ-[dH=JHW\soqog߽! =)ĂD1a@0E,c6="߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽kymbn#mvƊCnL]V1ETrWLjՒGDu`zY~F^|_1|Mӹ-ƇmQ FinQnSӦU^*xa_Rݛ7=%?M٘sdm17FvM͈qou>ވfNsҁ=~*A 0+!6w//ܹuʮnz/CWHm!V9>@N8RD r'氝/5W?MIɻ ;\Lsǃm׆(OQD*{'.;om٭lء}cz6ި}`2+_B)JCz<6D%Kvjw;y .g[^[J^2lE'UVQ$m++jVtjCl:>xj̦% ۹f`|lM$;{aŽ֎׼;Sqn^]7mvޝ۹wKP-qwGhcY^ޘ­Nٔ9daBnno;'Kڟafk,bGt~¾=C] ֮{?s dX?Ə3Qł#&{K{J >uy}*|TbγIb,$TG.պ>W|H7Ȯݫڕ/&rnm.þ4!l+]AOMS=,~ F^4&|b]M}-cw?hb0XLwx-@v:{mt˔Ѥ㚌ޞHv%W|x,V6%FiR%8FǖGrۮMvQSSjYnͨn {꩛![R|}!̥L44Qi5VblVg￀#p+mS*o޸D5x}UɔVJ`t|M\f#l}UTVľ+sy|PQW M~mIdo[fbx**kdmHJb0g>dn 6.ڙL^;F氛'`2X#'j24R#4,K=`׾嬥>tb2iޡd*%Or̗[O?{{{{{{{{{{{{{{{{{{{߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽HݎwTYZsVhܤ3},n,ynͲIbŵ?7[ܻq)¸$W+B`ʦbkӐf*[%Z9'팎iEmLJVwb+Vf,@}I##ؗP_,OT^/cm_ 6)koMąݛhqdM_^ӯɀ`c"Xoo]Oݻfֿ=V9v1mp̒y0$'eqZU̥I5 }ӷ*ePa%*Sz?$So-L*7Vۂ@ 6s.Mŀ|x'dDuCh3xg6dQUv{g;m6ֺsF–%H-‚'9mFd-p`#{z[|;lQ͜> UamDd:0:_6N#ǿ6[`7N j{ۏy \}Rr@ ԥ[?eČ`l?XMׁb%o>-@aV$ ~ăs)olϏ]y]W qu>}nôMEo,EȯOKuV|c_Ŷ'VlG'v ]*M/4$cXb 4Mr f:<ĸU5OiibτL\4 7NV ݘj{S|ft Y9k=*G%vE 8*i(( Nogr6쿈ʫRL_cUX]"}ۤZjը=kF6z;{bmoߝwػeC-D[.}^<駦cO)IT(_>iPOkp_:=N|2~:E/֟e3)j7cet7Ul} 1~H|<`vczIW_@DsԸ{5tyCqu+K-S`mDU6ꭗ1dr5ª/}lF*1Ԕe3IMEO)FM ("kǰ[,|fjN= do>G"-2R[ALrʇ#hiGTuU_:E2! EǕ~¾/_ }Pibbm벛6g7jRWb奩;322k-.'ʱtz?o ?α]*f$ܹܻ#FA;'-]KdOU,!&Xf?;>onSsv?;wz>1m/p8nY _YJ"\ f|a:wP(Wdr,ԦTVvdG@$ˈfe d07;'kOA\qwn] eLnC9^ ZY$ MYLIM%Dq~f|^q,m}{wmϙ#C@gɰq||ۗqg6 ֶc2̡/;=Kݹ{KOcu vXEAY%;4Ue9 BJob7{{{{{{{{{{{{{{{{{{{߽߽߽߽߽߽߽߽߽߽߽߽߽߽5U՚& 0VUX9FGp\+o`0峙̍&+uVdruSQRB$}׎Sg*v<mUxo=imQcσ4 ȍ7Tr\KbU^+.:jUXlRNԟ6-3P!]]ە6)auU\3O 6jw[_{&3oy6׃?uڣ%]nF(4X*?;0[K~B.y+:q͐N~̾>jr((gI]Lde Ins[pm_=ǁ}!I0LN9cBIqVө_{=}{.?1'RGMUS|rU&QRթSISOP1 ~=?B7GRULO@K4kdndk[G55IfiT ٘$xXnhG]Q(<ML^*tE՟Hmΰ*^ Li]H/F/d CB썭\fbaOB.xګ> xmu*>/<}QJtfXXHԌ̐4\ EV#OMVǶا]IW"R@$STEŸZ9yj:5C-C;mO)@n#5p@!QRD.}MNY?Q~*}IbO41ȤKQ-IFK>$Γ$0Ό=cDNGYlxz|k!N­4hg >] }ϤImG$A>%`":V ?^o.?0ߍᮻO`]Ҫ_Oo~9TL|^hGmR,û01$5GD AEU՟xu] -q +zM:#}J4UR=mA Gv?{H/T",.ȳ${W#2ֲ~C(l_zZrJnfgL O]'ZQI:tLK6jy)SWL<ɮB ,. _X0ꟊ؋$@F.]|>~Di:WQjuJkME0G_}3*k:|UU1 GGRC[K)6={BO剺7gbTf2x]&> VjBj"6pש7=k񠤯\.Vb[0ٚ^eSTbVOskh)?OA_H; |Km^z_K9ٻnnX^V$x,tS"UN|yȺ[1G>;*ެ,_o1gFO,S.ϲwW-:?*~@^鏌oϸ6Iۿybg>.`n,lϏZ{ncp=GojU6|vkRaO4oKA>5е.ޏ K3SɊגTA'٥{$’K+qD$H#4Gw"I&d932K*7n>jLn}c[˽rmz-×B-_aTVa錾) z4i)d0v& \,4+;> *C*qCM:+ٛ*C_y|e3h\ ʌbhդnUnb ]#avn{|maGV |V|vFlbi3fTedR} 'cNӼTJiʢ8@_~~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽߽\~<96L{ lz{g|9\Ş읳9^+5ϑ]h6ƠzI2$ۇȬ˜%$Ro>E]Eט,Zhjwl.uT vupSRl}3De1ei4j]S)?/|^ד)+2vu'Se.^ ;OMUVڪpPh2)g| fgXOSAt(9 X|n-ʋV4:Z `iFQMA#GQUe$X,۟`Wȿ:7jd|w@e1#][W?vf,ge~]sXl^[g:A p_nc;?|N\=߻ʗg꿺{}тkf, q(<;e{fb7,U6Ol\X~8=)V (j$'rMWGus-9֖JEAnzhbycNMQ%$(UH(..r>ϋ~.U[wǞ9~/C?ğ2B)ђ@",/{! ++J YAo@'qu4K:E;!!58!F@X{'$*t v]Н;vǹnj< \_ıC D`V (Ʊ"kXKuf(GY- c_%EtFFUE1t8BN`ERg7IntLhD뽧geňEULؚӤA#}~-fG9~ؚa12Hg_ŃD~6t/7y1[" )#~Mybz(72%vG u`{X}SKTPg9If鮹)}\77rO;r]Æy:c;0puWI1b RN[IhB!Il+: PʖLnƏֲuTvw,ى{vfe?*vaϖDiMZуCZ'Şd=/ud'T&^۽ͽq{b][bx>2Mǘj" g =Gtc)($D_s$J\> pF#D4DKͿv?%]wF-ꨪrt}hVv/l\\Q: P!ipS7PnO]/{_/awlO]՝c};+nSbtɠo!kja&fg w=8,]~e|.푍;;Gt;T&b)a#*$ &ZP^h=];F`\ո_sؘU&xi{atP5ΆHB$RL.3ml&#m-4|Ehi-=3"4E@={ٿr{w^z\auhM+cL zp|굢돝v&w>-dvefvduۺ}+ޱGWCVUQSVH "x|~>όiT7lPޮ|^G:ݛY{drsɕɭT*_0ݛ=6f`#^kwubnl.A[ii!NΨ `:7eW"?̃{/7sm`[x͵L ,\Q7tFy*iiL*y| ~T +}XںiTI9j6߽߽߽߽߽߽߽߽߽߽߽߽߽KK> u5ow|Ƴ[vms1;Wd">C9UT i5,,%ixvf%ҟ1Kj,]UB\=uȎg2uÍC{#|YQ;505~Hb5v٘\;m|x秴<5}e{cˬO-iRlu Jz~J^&ۣqf IܙUښxC8wM.+; y|\g,K14Hf]m`r uUhGv,I?v'Z_pۛe= x|zT 1[n*\,sE =@gR߽۟;Cz?{lIۓu|Rn9j*ųlWTGSE=V˓ ;'[ؽ.L+KWޣj_;>1h6A<;&R{Qiih ]X=O.>> :KQm ]Rmؔ'v*)6e09haSA#`7]4U;ɶ򫯫)0ŸbuGsvIT'۝-`|7㉤ =UB(sme…co* U.6:MJ[,?&vǤwpnѻWjc1X]ŵIRYQ+)^#iˠ1?Z9J)v.}+]L{}߽߽2*_T>HZ̿ȩZcEӓ#C%u: [ނ3dhBcF_;{h *GFO`Ht#_6\_zvG`']A;-(#tTX]bR!kj!Nl>C"n^nߓٚ:OϏsͽMLbd7f puPŷhokkb޳ݥjP.;4š o4HTdky$Gy$?gl2쬽k}Bocww\g+!U>x.';wXe'win[Rsu_bg/-+l<_{"ڙVZaU5tsu{MyiY[rTU8]ճN"f2)cj\ n>(`7GaW2/j>/X ioWv) dr)VgTu<"{1јX*ɤ؁G{{{Y[Tѽ[=ן{kvkfc;G`wVm۹^Df6y5U2Bu?hPJ;m޿an7b!u*3MUYI'EY#B{gUcW88?'oe'⩣9O_f%k=D "Ή҉xj]QӸ\6 dm9;G]GC>SE30TǴzf%fCIhI';Lgm?{}ڵFÇZ~魷41Q`jj̥BRl=߽߽=y޻-k*a %`4.fnxr_wm58 Ԣ˗KbudUܛ'|MKMCA߻CoEl肍bwȒf(HsZEm%Q3ZNv[G7@ېsxk mں9Cjf0X<zcHXK4=Zgػsqe7'6.4t5uu2c.z&pNՔTIOVd b[%k3R6.GJ{=Ms{{{{{{{{{{{{{{{{{{߽߽߽߽߽߽߽߽߽߽߽߽߽;* lXxk>'!>:Ö3d& RU-3UTo؄?ͥ݀aQdfvWkn?V<zMώ{Gm2xIqo_HԮBYUU/]>n~HR9u/R}߻z`*7m쭃SWN;U\x)r//u!_+ O~鷰_'btټgZ}M# Zڦc7{{{u49Z^N!RTPd(+` Zy$ԫAުw;?O^}wOޭtϸiӛp[sśoUb.n)k%Y *&xY.O[m)񛚇:ڻcTe_۩&/9GݹoHۥkqKuUW9m7~Uz|MvPm}!RGZ'B!nܿϖCE,ͳvm=}ml`dzw=٘^[7e\NO W4deWQPgS5UˡU,ZMT31H=߽%v, qQ-^Mԝ9sݧۛ`2`vVݒ7J§)F؟:wb 񞛪!l͞ٻ?m)-^8Le őge]ܸ-:G]tOm1={7gHq}cصlzANWqcs2GE#aǽutH(E1dyQew tW$1r{$? i;-"j>nw@uix6zz̒3!4T(+Fngu[m;?qɓΪ폢x1)#+Qo Y1K$PQG=}]<,ߌoѫ;۴xmϹ1b16:7:hMWK}3$ÌjUV2zo)3u}m>oϕ?$QV,uu <@`:}oJK1+tuԪh66\췚uHy;&O_sv1u4A_jEםaZjs,-G =](g^[hnͱ~,?-ݢj/yleM5u+MS8 'wc$B,?qbu:`y]ηu=ϱ~9|B= @|0xýwܟ$*k8#wTGIHI$۽+/:/7jdg5Oo|q2MmNڠV+1Mg{+po!DWn?ɝ YtԸu9]úCjjb2Kg>c?3b/7(*XId$l$@afUVBnWKI'߽߽߽_ :# n؀:Ǵ6͐'49jR<W[> |}cc]ԝC޽]G {[s2e'EENxMωS%[-{#F1a^N+eVZ[ơ(UYI7/jlEL8tX:] c #=uEI9,jQ4t:I7m aytW\F#p#˽K6Rm=K;6SUR-DrP)'G!]?fG9ܳ'6 `m{{{{{{{{{{{{{{{{{{{߽߽߽߽߽߽߽߽߽߽߽߽߽57S'P͏0t[mvx ؛G^Ę7gofݴ#;6;p~m {7{Vm͵b\f {o%_ʍVf[c]|U91{KkbichC"2VV(G۳Tb~,p msi6v__{-s:-J>뮺?_5>(v ~WI$O/ZVKO50OӞ:Y]7T!mXWOy1+IcMe_䤙D,r}Wcz=~緎֛f,O}mMSߋZХN*)&bvw5ieݛj~P<+òO"RGB#q{Kmzgnޙz\o9VrQvUfsZPe:P7]_?sퟑz 65~rej9V\ŭ.F]Zyo:#ap^w]nn-O^Z\MKWKSO4U)I,Jxkq*I"H_{g=/Y]-8Yv~*73[J83qµDQdn߽^n]S7u{mOvݙ e ݁GcSEq[KQ5L}uGE3cijI+eAVj*vd\b'*u/7v7ľ2ϼ2 {;"7bӖ=KϴiW 'Rϒ ϊ?&񽛌S`:S~ە ,x\ܕ-&#;/M I6(ݽe̬afߒ;%r5_!U|66R:$M\T!x`/(hTt u]5~> 9⪣'Z]^9H##l|7aU:g.Miw/ȽɵznTWOcziS Xdpޯ%4-,!7svN)0u~{!:NR-E~gpXaPPp9łm{O?3X|3ɍ6jhdzj^/ 4R݊FKvgw[/i?bpXzZSDݳfqQ,[,%wU/87M'Es\Ebp<C%7_STPQ>vϷ4Ooך"MX }~~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽;lVnÈ|Ͼ;Q>0.Gm)jhJ:9厢d3ݣ1۲LMoPm qR;_sSVVu͈[omŀ=ozG|ĴX>?PGRht~wƽڿ%{ݒvޢ;C klۙAˑROV{4QԒ9|4 cVs{)2@oŬ߽߽߽G$dw។nϜj!k}:RtP9mJ uzG°]CٽG뭹Ù_5#%ycjuk:˸1jT1en.@vi2ꘄ_𩐬;gD/(2y]9K_Iu6[{>ݙK|Ε:e5fO;Y)˱v= lQ{dˆRn,lR Jx)ia(X(8Pw۵?< 3b)O6Y퓲5 4k1sepKm1qk_~L_{5UM){;wLFJ Ur{_g.=&GwDeMVSs;ҞgZ*fYzJDVfUʨCO+I<{?-`|:֛}?~Cvsv&'1FOI<9*FʁI*j~ia6)~7x:GZ|Ypp_>>U66i$[Z@qw>D9XO=-9SM_iHI3m@dS};J4Yh䧜B΍{:phK%:ȷ u }~~(zƽ7nϓGߝ3l? n(==^QKO]- K,P2 M;?>;KuUN}[nd~q;`2ǎݹ3pTM u] ih*/:+EY䱹J :$FHYuO~7|τxCWm/2Wu}o]ղw(gIRg-$O̡ŪjZ] ς =͚8˼9:TTծ1]ZjZdPӧ l?~~~~G?_VQw')SN{ haxZ3O۴C*7__wO_UJj?XwOȌJ6> ܲ)EA击QGk[NXC]IAonIB ]>%j|35Aw[> SIL~e%DŽ30ںVi21^zQQ ˮ2Du\?G_7g_ w#FC{;߽߽߽߽߽߽߽߽߽߽߽߽߽76("?O<ONz>?;|EDR[s93?EQ8.Ȩj>ѿ6:eQ>+6^|f'p %R䩀hWvb7|>v|@__gʮTY,u^~d&IM,g{~A?yn>m63t|J{c~ۯ=wm]eؙdD \$QARÒzeu7_ } F/eMؕWyWiud2=Ejڍ?-KISʴM$m2Pw;#n_v#6Ps ܸ.OpldjZ)~=Dm",:9ErَeuIߐƺֿK_i<)kwigC7[3 Kove4Օ\dη!,4PL1:z?vt"y"ٵ9*O5U%6R%aie: x=y읻؛]d67&WL5EOevRP䨪(#/ϞV]ϲ~Fm混[~uo|ژo!o=_ 4Rl,L72u [tFB7*ebEȷPٹ-;glt:2U7鬆{lW.1eAcE]s~iPy>1|Ѕ}+|s:eLXkY]#6OLv7[?;eMJF|vcn\MLxOKP-U4 ,ro :!`lh"a eBZ!BKI&.ě}#IUS=51Z?}wWV*UԁM5B;* .{tX}u&ۮʤ\1 $ ycۻogU<.kzx؅Y&J $b@\Q!&."ti|M3)9ۗ rDSy)?K*:Gʎ讑ioڛ~]n=ҝ+wl19UAK5ڛJ--bYA>[bJM{'WXmš1[+w|꽯I]xc`c1TlRkͶlP+۾;U>8}ٻoTc"ƘN&uxUIQݒ{V?hKl%T??r_1_`XKi(2: bϮE7ۿ?7.'3v=ga7S\Ef~MATxk$ʙJNB)QIOdVeiM5=/M"^ F"ie_v*kæeYU.YJw=jf"{uFK:3:%[W%y>AQ/a֑54r9#z-c'PvXJ?"옍!Y%٥SSS2z-`ɽou0KH*#ue([Hml.HgI:;zH 5GS2a`H/I?N,'$0*}r0z}J syٞOĨ0dC+)[K)_#,atW=O Wsᔯ1)*  ȻO r8Wt.OEak~P$;~E3¯m 䣩[* z:ÔȚZm#z!D!J bв:12\퇰]Tؕ;l>56j~H~dmpF5od=GLw3xđ# [d#PV`K/n?E]iIxnJܝ{o?9*o5- R2q׹!W[g߽os?*4q,PސҔS V0;[b?˟GORT.⣏=e!ڝu^o|wmG+ ~Ȥݧ ]9j\&Y["I\f>Ot|m}w<^ml5GdzWm']uNM:jd1&g{wƮ3vwOL|'[6pl*5=.֫6nSDH=@ht,L\Elߕk4Λݽ{ۙ~God}_vΡm*l ZqYlv:zRTU{5S? ֳ݄G(cw2Y\cgUmGaKJ-N5_eۧGl/&~FNf|<ٹ>ۭ]wݕG񳪶7eWˆL/N>^yK!B#1#Gim,ޤA7?[;F-?{F=ScwV1 lXGr~O}3y!Jcfň+ PO:'d7?dl/I 꺈$,Bx}nt'c t_W3dHcLL#QĄ/py߽U ?H$eDOW50#X@O{ڟou7L]N2|MǭMe.uVp1w${s?OTjV:4|^ܞ/ˊ}).(j()h32v|Ǵ\eqTL#L FoX-?0K=D4bSKBP߽߽߽߽߽߽߽߽߽߽߽߽߽44'?MU$%BH:_@?RwhuO;_7{?ܮj͋}5gΈJHS1iqe.0e*b(n>ꑼS|]Q t*Wi[n}=S ~nߒϵalyv6mjP9Ѽ޿pQffI8܂=7T$?~HU;Eؿ&yҖ?JX{Ӽ順ݎ{bĉ7 &$-A"]ѮR(\Uw..j|$UkRSW_PG&rBk 5MJy~w[0Ъ %w,dWE=>gzhɺrӬ< * )LRDHH?*AFk NգOғRocO$ؔ So}b)&rVTa/]WU$PȭJ-hmDKhWcjXqR!b1ЦYRW&z; R]A:V 6lڛk͍>`TovqγY=43, lf/EĿm'{{پ1O;3 IrG/:ŏWG$ HY4+?Q4SG[~sⷮ޲i#\y6O^'cRAIƋ5\4$CwM:|)Nkh%ihvYwc4F4@T2 -L'W*?)M DiVYpĭRI|$Kлp2{ wdg&vE?mHԴD>LĜ=ۿؙ{?q}ڴ;/Gf^(ꡦ]&3)A?4?Uw7blwB6sv^üp^جM>\mI1, {kf/p#͑uGqc7N-6lݡ2Іhtne@p}>7L\_y~;r{Mdom%V*n |9S;{/CfÞ>2IA\N[dn} MYwW`i2Uݢ$JSWv|1bol%4T1ƴo0 w!iw9__!xcw;+@|mf+*RM ^G߽J?~El远kQQOIru+tѵ&Gfxl={Ÿ)?[a/P=; WȚjt)!Rnu{~~O(=-c?=@c(`DPA[giu^펋{"M[OespwVV-$ttٜj|V_Bo}@/'HH|m]kNjuܻz^l>3zo]O7巚JhalX|Q(2mgZvQl}/ϐC=7wIk][]{gjUGGmO$e=vW8j>El>i>=(i%KwDҬК$Mzگh|ՑQi;3i>YwHO{Lq̀i.X6WԤJO:=m*|GFbM. sv[g5$ナKǭǝ=.%ӣrJ9Cd>E? zCb7_'H6PmuAX?u|]n{Fun[{orclmxh Vd1 Ee[uHǷ8M,¿1q%9ľvjIEB+!r{pn>%(w *̦S?Po)?ݹ皣A[OW=e Trүf&#1{ O) jGϟ{{{{{{{{{{{{{{{{{{{߽߽߽߽߽߽߽߽߽߽߽߽߽&5\/K#=&> fuV*:W_K #4J$.̠6fbq\/h-uozZҞ%z_' }C`Rvc:3z=ڛjr6%3ê[ rr eXx'ȭ/OEJ9>cBSzl~S:!{b[cmN+q7}s84.Id3 @&:j#:(Yi~SUC>g#ݔOOfz=^+y H?"*=PپO2O3L/z /]A@@hqgqvIih@1%UBܞ=~mm÷^ؽŴ4;kiFvsἔGc =DJ@ܣ)siܿ:@/C1b9"F @~rDʁ{EVd* v&cv<¾cSt6>JY2uK'{JLĠ؃pV>\wɚϔ 2y̧̿[w]W{%UZ8wol0F 1(5g6.k->Nnn nǸ-PF zjj #/Yf2|`[_~|XLro_3X_ZఱIZdҒ4j~G$?(~`3_;oV'^wZgrm>榎 v.: Ej p4!>db9cx6[I鎼nzHr{UudRk.&_eh/dn"X7n1TTډ\~-#?P4E2ISDZjb tBC(fD_R$Z b:o3UY#5&{K½?&ډfe{z6iIȷ uQdU zVě{O~~(_` 7ۆ(з}%>S*FZ28n$[a)˴PvHΟ GϬV2Aaa{5ڟj*_sTAS+]3" ӈuԛg߽ΏqȅT|L٢2nM1A'=?d:UڦErMWݽu^T1y+ZBbPx>O{{mՖ[: ~N'̵BԚLnW7]%4r53!R}_( (c?4ǿs{ rPͻ{#xz Qb6v;'&mjTp ~Da67voΌ\{k5)7Enz۟2{kM'ژȗruBlYymRLnlOQW[t͉g7Fzsyrte^eVO H[׿{!?G2+Ii̬E)PMdKyQ Ioq"1jK,N|겾H4y_OВ= 9w7#);6cX$YҐK]|R?鿻륷_lEٻ`y$-5mu2Y f^ A:@՟7Nicf>ia<$H2?_zAڽiQWXal.ߕc7wÊseq{j3{ޯ yJz\R|d#9:-F-S5}fy:'^i>sld{Jr'jeki鑨(mB'K~geWdA]3+魛7^OxoM+ 6U\TxzlkcJ#+\B"2y4=Zҗi{*EyDIdUްn!`U[J, DzY2oY{]Oߓi-67D[36W 5Ue6Y*4c%(|Ȯ ޲nͧ>w#;SvWM6[(T"e`9I$1K3BI|?Z^A"'wv,yMKU>KރmVgYRIP3o]Ī>~,/%o}6~v[c;uZ]>eTCsƉZY*@u7gSߌQSxL%.u=!S!k%ǙqM hdu:'=||ޓ|yvÔ숩7ncqC[`__?Tj #J(\)ƆOK K,+ >wm-$sAQ 3zVO-rl-=|J3T Qc?FF.^X }/~I&S};7?7u+:?ye|jdX`ij?_wij喧/',۴K2-Lѷyѝ.B~~7(E1J*=K|IJK%1kjH&'4UO%F +!{A} Yљ $:0_/&0IH>hk<)ZP ҤU%{ӓt,gHDpG%;nLe]{a'6/pmYUG-$gBdqW-5'A{7bjl3SKQU5 ADk4Ow@;_`8Ͽ{{{{{{{{{{{{{{{{{{{߽߽߽߽߽߽߽߽߽߽߽߽߽%3,3 $g*Q|i uX"G%M’,p+=y]Pf6vM3{ ͸Fr:ʌ._jVT㱓IG$/!TjC6kwK!ۻ9P)'MRY#hXr6qڳiWI@RDa$`@7&~ueeHr>9d0+iV \ D?1Ik=dуa&>׿{Qn/[3SuKCTcgF7`\R D:+ dVMUA_~u| >^"&2WOUp(G)SfgS$Z`@#k6Gl=MKIG[>Vl=&j9)kfJx$9>O~N9zz_#osywwtJ(k#l5o^AzZӐR"I[*Yf0m>3=yc31Tf Sffe_}hY7{|}{s|M];# SuCqۏtet5EPK~FJyex܋E|Z/QT9|X>7-z c/OUil P "?+s?[WZuvgyBZcCvܰ Gfh(ĩ$;pԟ2,0?Nj+2Ž~@?̒|aq!mPbwhsr}e\X[pu ߒGJ[h=_ӟg߽߽w:|3P4B ʴ:n<FdhJȷx-l~y* p}7͢){|c䙩dm(FVf\nfoMǷsqٸߋ)'q7]6' ՛/&2mˁif-KSGYD~ L +_/:I.p ~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽?;o|&yz6x<?9ݫ{%.鞂 䆮H除J;잢%{ -_Gp] sٽۛz\etWƔ9JYjhf_0Gn鿔gF}ӴRhhz v.wmdJ %VKC$fp#P?w=ٽMlc;ukv5_bcZJ*땂g?D|ܿ#7<:yu13umwVo_Sv.);r˰WOMr?,,]SZ((r,(v )*fr"gWp!W'`l7DìFKin TI>NMQ=6clWS}KM:2bohtQ/ܹ6߰_mM߮gq /STj}Qb8>i;n-VQ%>kߌ#-hk8~WN'FyiʅO`TbWv)N%ܘ.ۑbڼPoGHcKVӆȁ=>uFgapjܟqwgÓ=HR';zfT%UV醚Mi,1̓n =M'nMMK_ܕI wplFvlT yf#2k~ki7]OjMWş_$VD0CI$o,cӏeK;zuO{|Qjo<%gWAqCYLhFSfyz|{jF2͌Eg˿ԕpqԙ*xe\XF#e kn=Ŭa3UtU}.C*[gX`86j+EX%#2X{t]d?Oml̷ľ+;GoFazg<{TEIR b|^D|{r{f5TFnc\үBc1ʆ^+_Ԟ#砞>֭>HnIdSMN HP  ,A%WtR3G?2#)^hʥ/sܿ3{q;|KP`fpu?vq7Lb&9䖦/6V8X"};>tu ,z CevdvN9C`]$XMISzt#:X+1ʓ`,9?叕';W/6z>;ln=2`$!vSoxonwֻ1rsvWtm|F%M޸0RbDqT}/1 /6ш vofڦ0^+"4]|M{9|0jv{vJ:M I =_;5!8/EH+|)啐9BB }5ivېS,͏y+^bMuŎIEФ#1$Ekπ?*~u},n덹Qe' W Yw o5FXE%C#W`ra]c{g;_fAݧ_:%FY ێ$4\Gmj jX|}je)檒r QhT+%jnq|SO)>~옒m%/,\{$ە['kzhoR4lL;'zj=Fa}WgZjikQRmyQATB5,r%({gw3o]!l-}_ ᔤvid tt(!Ƙ2ʭͬ+Z|`][e %v^#ye>nIۋېn|prb)@虾0AQRSe ~-S`/!($f*1CedY)dS%ڋ9_jQoQb법)q$,y?paTu+5ϴ]J)k:n^I1_;Xj1YS&ӨYZ)ڕ"f%k؟kfkGgsk>338bMC 0ca'jC+rRASN zz7؟.Blv>\-=RjI2TTuM]IGjZZ)^$(̊[O~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽Z:*L}4Tt454AݤqEi$+߽}`o=˶n4;5%/zv'EJ d#&)̋#ldewe2UneŴ[lsEjp՜ݹlG!%6Ne ID%״F `[ 43ɛ!Q)aK娂lVt u E`H+|lmk#&,W=U.*PUAUC=-m%e},S,R$Ms8\nٌO=l~& 3fONZ;9$6[w->yL5F6Ϋ⩲sST55]MEmdN b2#Xc%VU}ǃ_淓:ڹb0µqv)rY:Eq4#!8+\)bUMR@,Aԛ t.ݓ]hf>.in?>??\R,nZtTeq<45^zY F?$Q: ~T|y|MɕzQ>?t׳4OK뭺tu6GU^UxJ 7|t}fIܽSTˣhNWǘm^UMb1]u=ofOK~d}ׯn*س?VTvԞ~$i zc%C:&ΙR0(,߻V%HV| OҤ4]UIcTj$X,3\xbw7ONgҨFd$sl<ʧXov_>~|n홛E_՘ۈ44ziҠKY,/KVa(%$X Ø"A L0q+_$%ϼ2vO]9wˍmn5^ }cM>HWc%BoFGh%z],97.Eͯlu`fC{:?[sR@_? vbtob?K}S7o&ɡr^,,m>'o4C AML݀?ATi!&wgYydGrl.^@1b[`ɨ)r1.X ALAa=t@2{mm ; 7?_|SEv2FM]cb@r2),m]'!nyjx ~;n4Ie\Hgc@>RwRE(^눧$ m$!$??c8$ֺn\=֔չl`lNo0|Cx`)?̓zW}NEC2TDTSҙ4&% jPA/gu$(x|Kp>s_/'~a\5Rf. ETReUe)ID;__̓ٿj]ǔ-Ѕ_M 0,?1,S4"m$A_M+ FcvlmSen54yߘVmݷ?(xjHe 5S1V:QS::HR[E1=݃FF)KUvͺ0CILVbSKWM_}"EJ]B%MoQ:X!U (bEDEHER5HBP {gܛ_mEvupdqm&S]RMAh&xfFRD =q}Y6ɛ`lf,2>}͕Q,mN , |F'7w Uq7I\R_tM}2ln'J!Nީu] e4m[>/S3/8VETWef4nr^{Y3<VV!i9ij^9{-łm|yUf 5Vb2\$NC?q-=6@# ;߶0x a[z sL,:U؊SW ru"Y*omrfRs3c<8|f%p;^*L}x"L*f`Q\wY(%k0|4Qcr4R%<TSJ: 50m3cVHiETQSQU3,BIڄ߰{'XVGheڛ-3nMr9-+ujJ}Y|t}ac?Rdz_n/ս& Kr¶JGdEVȳ*>(wGq|l>_U.{߹6Cfu͔:ϸ)b7 .i*%Kz$L&wy> tmǸjd;K' MO޹?Ph*꫃hJUiY)>w7 >=7&ஓn|%ma1w&G}Okv9!faK]Q NwM?_tu螿5MK6:cSe&-:%(xEELIA/\~&ã~=_l]Gۛ5Y{uXZh ݸ:JLj Ud*S^t'O6muuk"ХU55QmN14ٮ5A{c0)wLhܗy,&4K5QTkw?g<0edXRm`nFΪ޽|lnQ;qu_a7nEwVwrn]1URTReV O@zQ@ +IwlFg31lVu,!c$)7ݺ$ǹv;cu\VoTn:߻ܔ4SIOf(H%َzf?k{?N:-ve;1AUm~:VRF5e% j GۘKbMSVHqj͌42T0#IcUV#mf[j&ܿ˟67mQQ||2h'`&d1e>ů3ΩC)><3̮6jzdN8SK6cmf0#ŌA3m]|v ߈?0mE]EU&:(jZe(s5 ZmP) #>GvN<ۏgu[c7>|8ciݹmalMp 3nŜ`qrUUkJQEZԣD35Qs=z]z쭵W?n|d?{ &=vӪѫ3U`G.w^٭Y_MY3Dqڼ]0V}Mg8zJhf>~{S{{{{{{{{{{{{{{{{{{{{{{{{{{{{߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽$/NJYa>c A )$]PRJ\^{{{{{{ {3mښ³uS'Og=ݑQOm̓öv<|83GUOUO H taQWe>%u]}om_nVn̖u*,fai316 togWf-NG6Tg7mNDSdnDb:C[JW{5{>qu6vkczeuGN_pYN܏M&W1#ǥ;CfݣJ<3 WeټeƢٖo؉,>'9JYU7KHv./~ [xnwG`|}oFT ef/ɓgE. sM#Uj`[nu;xW۲qs}yгw';O|]bWe59#!X׎i $vݵjLen{Qd1TaFc'OkDd*xbv. mu>xmŋvjdT[>=]T#FG v qFqo 7f7&7|tb1YܪүlܷÚɸ*r҃k#&2Fc*T&cs8,^tavăloӘ ُ|6nNb+l63oOMSOF04MSnn,;'ە̓ۏ&ݍ|mη1n?x<[1⥏>$ pzK?yLjmJpnٛkkbv^lV[c's@1]7WG$:Ȩ9)x:W&{c~YWtf ->n泔^c7zmZbVcbʳ;vǙؿ[򗯨J ɻջo9٘bƾJwVn קON=TL!LhE؍Át(>C03j.G*sxt- B-1~e9f=jݛkbGٙ6 2o-Nj{ԝM;+$Xe)KFk a5\~:567U|ֻcqv;;?M?`;?aoNs+䧏mMqc۳J<-.+3|J*fXݙSػ=CE]Z #u4l3&zϗu}ϖژ|7n\bXv\Ҵ.묗?U\'F_cڛ~-l>b)qӡ*ccu^FnM}2o ]OLme>֞ ̒;cq~B|@vGXf6.QI_$ݼVEOS ^ǟn?m>aN'\uFا0*^9 ]xB oB|[szwt6_u72Y~=wIan(gTo )|ۛ4;.V)lv&Xnvwد9M i%8jcuW3Jyd?̨Vgdi$#Vc~nc|H^_&~<1 }dlo?m\BxݼW)%$RVNRbSA~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~߽߽߽߽߽߽߽߽߽߽߽߽߽߽9#IQpJ:k3!ِ)?7y<߽߽߽߽߽߽߽߽߽߽V}횻o`rL&o%vw+YAKSϓ[4OS!hY 9G{y|tɰ @'`I^Q!zJj,*=4M<1,ܯlnm;:qG36HP <9OO^1td_P>4(`Ue E"|QQUUUUB*Uݻ!g6/b%3LYo5th"koo^߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽߽IMt.4 .5.2IMmurcutout.jpg/Users/mat/Documents/Archi/Montellier/images/murcutout.jpgxEDATAxYhDATA\hJFIF}ExifII* (12>?Hi`CanonCanon EOS 300D DIGITALAdobe Photoshop CS Macintosh2005:11:22 22:23:519I@d!ddGddd+Kr'0221 " *2  :B0100dJRZd? 2005:01:16 16:14:502005:01:16 16:14:50ԤO^.|@S R030100 ({HHJFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?RI%*I$I%)$IJI$RI$I%)$IJI$RI$RI%*I$I%)$IJI$RI$I%)$IJI$RI$RI%*I$I%)$IJI$RI$I%)$IJI$RI$RI%*I$I%)$IJI$RI$I%)$IJI$RI$RI%*I$I%)$IJI$RI$I%)$IJI$RI$RI%*I$I%)$IJI$RI$I%)$IJI$RI$y$ L^cY'5*~FS2?]؏V4cۻ%flm{}[kŕka{σu>O*Ξʋ>eXDo{rù6I;1{߻4Z;f;ezsx$letTYmMq'MSI:"ĩ:;ȩk ȕC^kSm>ޗ{Fnʥ{+հ\݂?ejTep{?*!X%u1i-'t1R骝5;IzTt {Ĭڬ{UKe{>nDSMmd7 7]c?TZ:z'=.nun&*clkwj[bgOPqjw5\R\ku{Sk#˟0t'Nӭ9(Qȳ,05m_#S0m{q`w6mc}IZ:&;&&{zìfn1,VElo?k=ߥP1/C.ol X'G\=~H3o16}lo}UnP4ۺiCpvuo7ߡZxֳUV]N5cÎ ՛V6Lk->ր˷Ӱ%VA3%?ѩ2:1,kLĹm$,cg:YbP GmMA^Ŝq-Ȣlp`3UOm]x!?u_K"7Mx`ŖolAwG]~ mh۹uz _OѫLmWc:Z+osZޕ^ֱoޟUC 繐Zb>{*P6ѽps/bWk?ĵI_3Kii^eN}=ަg4m{`q&cY}̻r=ϲֹCYߡj>@Ck5ĻVm7mE_TcʫP1&l/gvukٿ'㋫.pl^mbIv NgZ+. 4=7~7?Xc%<5گĖݱo5ROm!P{=64Ƶ} {,UlW%%_mZG*%klGYkl]ߡ4_sn/c^\kWg*ImqkqnCP3eOʾ]w[uw͕/%n9FEmk"59cFM[EޟU[;)I1o+@lusI_WםuX9osxֽn}MBVZ6:_5:=@smru!ulqvH~vbf}6VDH?:vnQ~UW`a\qK\7rUkCCZFvu*!; ߣmrr m ׆:n-e=!~ nͿ[Ruk{Cl5Fnc{}*nRig$[.)&ʀ^չݻҶIJzM2vYvUloZmޛweH?x;s\#ok y%^ݾͿ?6ĕlhȺ繮U#Oa;F/k}VDy/.qoMίsX1ɚ\{ 'C^̪n#ݍV3k2 9ְZ>ݞ=Ob FC`57.{X{gƷҰo\;ڃM?-amlʬ5YDŴ"v j{=gJje9{=+Z0Osv?sgԭ~O:s\=pcwe=h?c}=bb\,i4[:1yږ6i[XE՗ppښ2Zɨ;պ4{v8\%;!W6.m>CXֽxn"7m9V@ iL}ҷڍ(S7:.7qdpoUg}Ɔնָlc[}? veV?$>ֺ:n[ئ],ckl{HN6J%m:]nc-sk>߳}4::ZY0sv8w%_RoW{X"HƟҺbGeښuϳRĨ*χзn-אlY-գ;={>8'3!Y;N_K ]G[]ոV+pi3 <ǻhOLܿl!Z L?NݟMPΦ r_XA{fzNP-u "6-o%T7fUSX1`1րKoQ^^͂}?}k<;O*Ξʋ>eXDo{rù6I;1{߻4Z;f;ezsx$letTYmMq'MSI:"ĩ:;ȩk ȕC^kSm>ޗ{Fnʥ{+հ\݂?ejTep{?*!X%u1i-'t1R骝5;IzTt {Ĭڬ{UKe{>nDSMmd7 7]c?TZ:z'=.nun&*clkwj[bgOPqjw5\R\ku{Sk#˟0t'Nӭ9(Qȳ,05m_#S0m{q`w6mc}IZ:&;&&{zìfn1,VElo?k=ߥP1/C.ol X'G\=~H3o16}lo}UnP4ۺiCpvuo7ߡZxֳUV]N5cÎ ՛V6Lk->ր˷Ӱ%VA3%?ѩ2:1,kLĹm$,cg:YbP GmMA^Ŝq-Ȣlp`3UOm]x!?u_K"7Mx`ŖolAwG]~ mh۹uz _OѫLmWc:Z+osZޕ^ֱoޟUC 繐Zb>{*P6ѽps/bWk?ĵI_3Kii^eN}=ަg4m{`q&cY}̻r=ϲֹCYߡj>@Ck5ĻVm7mE_TcʫP1&l/gvukٿ'㋫.pl^mbIv NgZ+. 4=7~7?Xc%<5گĖݱo5ROm!P{=64Ƶ} {,UlW%%_mZG*%klGYkl]ߡ4_sn/c^\kWg*ImqkqnCP3eOʾ]w[uw͕/%n9FEmk"59cFM[EޟU[;)I1o+@lusI_WםuX9osxֽn}MBVZ6:_5:=@smru!ulqvH~vbf}6VDH?:vnQ~UW`a\qK\7rUkCCZFvu*!; ߣmrr m ׆:n-e=!~ nͿ[Ruk{Cl5Fnc{}*nRig$[.)&ʀ^չݻҶIJzM2vYvUloZmޛweH?x;s\#ok y%^ݾͿ?6ĕlhȺ繮U#Oa;F/k}VDy/.qoMίsX1ɚ\{ 'C^̪n#ݍV3k2 9ְZ>ݞ=Ob FC`57.{X{gƷҰo\;ڃM?-amlʬ5YDŴ"v j{=gJje9{=+Z0Osv?sgԭ~O:s\=pcwe=h?c}=bb\,i4[:1yږ6i[XE՗ppښ2Zɨ;պ4{v8\%;!W6.m>CXֽxn"7m9V@ iL}ҷڍ(S7:.7qdpoUg}Ɔնָlc[}? veV?$>ֺ:n[ئ],ckl{HN6J%m:]nc-sk>߳}4::ZY0sv8w%_RoW{X"HƟҺbGeښuϳRĨ*χзn-אlY-գ;={>8'3!Y;N_K ]G[]ոV+pi3 <ǻhOLܿl!Z L?NݟMPΦ r_XA{fzNP-u "6-o%T7fUSX1`1րKoQ^^͂}?}k<; 1/100 63/10 0221 2005-01-16T16:14:50+01:00 2005-01-16T16:14:50+01:00 3/1 435412/65536 348042/65536 0/3 236894/65536 5 18/1 0100 4294967295 512 512 3072000/892 2048000/595 2 2 3 0 0 0 0 200 False 0 0 False False Canon Canon EOS 300D DIGITAL 1 180/1 180/1 2 1 313/1000 329/1000 64/100 33/100 21/100 71/100 15/100 6/100 299/1000 587/1000 114/1000 2005-11-22T22:23:51+01:00 2005-11-22T22:23:51+01:00 2005-11-22T22:23:51+01:00 Adobe Photoshop CS Macintosh uuid:377eaebe-5d33-11da-a6fd-d7de23a8f371 adobe:docid:photoshop:377eaebd-5d33-11da-a6fd-d7de23a8f371 adobe:docid:photoshop:c271b230-5d33-11da-a6fd-d7de23a8f371 image/jpeg @ICC_PROFILE0ADBEmntrRGB XYZ acspAPPLnone-ADBE cprt2desc0kwtptbkptrTRCgTRCbTRCrXYZgXYZbXYZtextCopyright 1999 Adobe Systems IncorporateddescAdobe RGB (1998)XYZ QXYZ curv3curv3curv3XYZ OXYZ 4,XYZ &1/Adobed@@ !1"A2#QaB3$ q%RC&!1AQaq"2B#R3brCSc$4 ? ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0 ` 0` 0` 0` 0` 0` 0` 0` 0sƹsX"rZ֧UDkQ?*AƧb8X9\V5{׆0mWr9sr9ʢ"'*興쓃 Qфc/^aKJ٫1ŕ)Z搯c,)SDŽU_$W5'}P9Qȍ{Qg**y'*skwTǐhE:0D#J UcQ %UsKUZ"XRy%$ؤC+ln'&y7#l/*1U|l9NbLd8vQ.!LG#*/Wj|G8390D|9\6Tg=|Ȝz^y8ǯ>/q8_ysDO|NY[W f8+WwZƹQy3O.ʯ^utIfH7O&9XV1D^4V3if! 0LOT'Uy^ƪ9W0i7]%Iady` UN^6fM-~W'*O\2\ƁtH7w)9BQpELoPڒdMx&A//.+DM#y=](H?svZdlҤR'<?pl'TF~mGx#9-NRg "(T01,؜ʫg嬭`rIQH'!8g w.TL%-!gZI[tnoAC0,s dD{}/2Pq;=aA+ GHus< V pcyOTδr"I ,EQl]kaͤ,pcș6O@1HH$X ojyA5VۗTze{m'}nHMlؾ*_WpzfJI퓣UŀD׽HǓI˛'Q߿;9\%"YiejVS8M*W 7bapM-5 i #^?uG6ErGw*_ϯqu<"N^O^_&(k#oR9b4o{ϧwr,"7h=O1zgKJ=!̾s&:eb%A N"ЈJ_)/QZrpW=\?eqn({*SGA>]ř& e7-{RP5 D""?Nr>补>-g$뷻h&Uh* -|y/*)¦bvj=kѧG,K%q0c^d3FXpRhNr")jꉙD/7U74%B+7Wi!E`fI)#ZDŽ*pO$TDDT\n2/fiŨ㎯'خfkgR笺RdVYW. \ěc7HZ5jpջ٧"+^w$~J ]LKݎGեHTGXE7??^r[,ZUFmDr'Z S&|p9wJyxc\z1pyQw _Z<*`KE5IaY%B ,&Ej!PoG;jz+[w/m ;/ز1ZѨ{G57l^yU8?O3حMrd_]枮 ;ZɝbmU:-WHa̴p+wwgWzxIk{[U;gnti $B+"|cE!sϸWLͪgˁf_QkisMq8I&Z|9ZpbxmnO@TVodR-ޣsyk}yNsެ]IޛPt$[ȒP?,@GȯA(6DTb;D֍AWnz"ƪ QoX(&DVcĈ4TR|r;Nhew[60$biC9fOqbkl- ˜OR-"lnm4@JhB/ Q|1s礞X< :ȼiWA"ăpxcrcEU /m WQeÒ]t9dud3PC{~"RLUOE Qk:rv4J7t|tr{JG$8^$f&1qo +UȦkhUD__E\CJa38t|2bRXω4p!ᔮUlҔqx^9!^֪MOC']s2 EXbkdQ.GϢlvS:v[Ʃ2ap*~l"dRGW0D_|yDr6{Tƅd,A*n uYT /C{+Gz"`W*z)_+Yan![ B,J%{H6cj'2DJW-$J|W:;f<UUVLuO/o#BL ^;'8ƼWΓa`HhdlIMsSETUOׅɼ9kCC>t 4eښbÑbS_.UKp!-nǵ&is}?2+#va=rII^O9Z&H櫹NUq;ZKUxZDvF3l\:2ʴHUBȋ"Θys%Fa}OىN۹U=WPǏZQZcÞi0_27Y!j(&"QssKeW%k cd]j64}hQFv$©"#yƯ9cĊN{^J|H)c=nvk!l=rVE"O?m/W}u.APɠ^daEpHGVntu!Bܔu܋:OWmc0mv54صW"8,^r±\o+evp ֓5xqD)\?~OΔS;PH C72B QqcG2F9z)9'aJS- Op;1(flՌ+R10B;NqQsјîbxK|Om;d v M+_!c**lG'򪿪~rvk;kf@G+nq>FMUVcduFDWWsʞnT]ᩐ V@'Ոf+?Mcb D5j/j/ E\9 kw] ƽS.$*]ʹPB(DwŞ' :ʧy;9m+ܔu<;eJocFcUfܵ3\P<8EV=Uxl|&WFM~y. g}c#h%O!^׿kֹY /Uì)oO&vqYo/Z}?^^I9c(2P6+9*;k\i.6yqChUOZg@BNgmuv:ـFί≏Aj7rD厔Wߵ?$Ys=aN27N+c\OXIJ21Wyo PW~C_c8QP;Jr!\H:30̗ $ϗ9=r =֮ [KjS,WL_[WWi_7fICIQɝ\o" F9<2cժX]^OVV? 붏7PQWlG-I=۰ۖ: tG6f5PJ\5.DDkǻ׎0kDōnk_׾㋰N׷LQ~#$>,]L2$sxXR['fT׃&]M趖v %Eeq[\J{iϘs%rejb w߽UVS߮Qd[){ǶxwKq-G4KSf~D_D1/Z{$x-x7s Lj5ܧw0RcuZ|*t%=ūo5pt95;-ś'I|֐ROQlJA6DPf >Wv,.Ze)M_:'ֿ;T [iI/n-VLecJH^Zr>Jfmj?dUNY'Ԟ"͸y;0:{ N8sDw\YAH|v*pƵ<LYD!Sc>otii"Dj,1:C_d"\=芾ǂ4S''k-YU(36 QX,Qͭi?DkoKrqr`z}c¾3St]_=CT6+O%qYILq ý?ЪN[Ñ{Nٯԝ%nO}N1YW{*97jo N\{/*=wqvm𮿙[Zx&%(3}u0'G2EV=*@Us2 Ѹ75|D_zK4ujV2;SΓjnCՌDVձ̚zk]TVv죌+\e{ڙ7:DM*yV[M/E]GiVuk4{̚yc|jG@46GМ|yLՋ=r;Y-YC=6GfSƗ} gkU/c% ɤE091X"+F"eF̟_$n`O٦lk/ȗ__pf?Ҏ?wNWOleRagX~4^,2mһk`p#Hi|7e0lXkYjɞc~R׻N_l ]ؤI4PLʋ9Norɗ:$1cZ|*sƼӪkBxV|)SWQ@h*U=2vNVIhߣsw6k/᤼`6ͥm=@d=ƒg'>>NSXcȯ|ۨ:eevxO5{k-a5qCnHqN%}Ⱂ$P} ȿ9;6Vy>L}ݭI8j%wVf\u$̳ L)k@!|AƍW9W4Jzp^UUsf*W$%ŷ12峽GF~)2:^Nb2ξƼ wLKdذJI# 6ݪeyrvh15vk]Iĸ|9Go=2CME=GeSsSW-$ӤNJwv~/-Ƚ?EC[PgY}|i1R^TP5SלS?Ϲݱցlr-z$ ǪOgaVt毃j*xWn[oHpS^sjNS}SR0mj-lJkolTֵ}\I=] we[RnҬ5ڕ A2\B*cg,nQ9dUGb'\cf{Fڭ.< Wl\+NeLG78Ff #7N}Q2-g+کUD|mo[곩zN#EҋT|; HW6LUkW&EvIXZpM˶.Gw>ȤjWD=G4cciz9 \chv<+g辨}sg1Zr~Qѻ!$ ъFrdN`Buӗ}BoӮ劐b8%q" C4N8^hўoT_dmtvKh޻=]˝7`FRB}A~節SOC#LoL{O"ӎ zҍ;)mYs%{ caҲSdJd|^NBc%rm޺@(L#8 jVʜfkv;cInTYv޶nD{ZavI@D .OGj5ֱO^?Vs/T_ww5%p= h.!q8hPrzlsUjk%w ܛˑsimivv=7gL,?쿣YaO5,IHCW/qsg D+<VYwj]9O?mҿs^wՇ$!Ƃ=t#bn"NS\+n[-9̓3 5[.1? Ի3:h=Cq/#1 B$yC{ըNxz?Y/]Jiq_ܴkt?aH=Wi>p}Ի)Ru[ x2#dR~:qmU^MioޝiqS5o}QKKa.xuMJil&ԍM#b'3qSnT:۾ַqsUجubZ_1\|6p9s27TixƳǩwE|j2Qe'uL\DžMxb{b֭ə/])d#;V[$~q,"L8%{ak\S֢5Ca#?`2ʡwjqR"GcA39o\yodW0Q|?]2I֭Bk}k5[9qiEp몗D(|-\[Rͪ3OyݥK^٢C! 1p܏ ֪6V7_=a&ho{ut-jPQûާ1dqHx+Wrۢi%oDZYpFN)+nY^͖s^J8q8e2Đ!(ZyWp3ɼttЁ MZ=$P:r8aۈQcotv6ս{.Ik'[KmudXS=_ UDhQ \Ջ /k_Cq,y]hZQ:g.wֶ̳lՅ-`KrB,Dd0xsOJsbXښ5:~< X+Vo^cAs[W=_UQlm"Hc pg$CE#PF*gǏk{z%ЇgQSuuD ; M$2-@% ܒHO$Z;^]Zh)>ؑiZBjfG=Zp!Q3Xs!b{L_EoY5rQj13tLh.SF"í^֯ͧ ]S;5Wj5}6Ѷk.Rx9gvSWש߰ZliO ZO=5Z ޱ'H#]ªf~Oonο.fװ\|F?Rֻc]>RӡǕb]yMk œIEvpW<;5?D^Q3{L~la}>^h4[dI>9%6<`+Ek3#U,umPڎKjt?N'ٻZc\Z>9K{E!=+PGXoQE>ε[RviKY]h?v{n]{J-jHK]eفU_[]:kz1Eryb뒘Y)1~^ó;փWlZkG۠V[hmH2 Ocd$:/^"awWB2{-Mcxa?BS뽭vIۉcK&F0I5}0LbFpcW+^74H_<=y[w˷:yܺu J 2%fY&%Fh4syNS?1_tTn1?[W~[[u@fɰ%\RxUnMR1jR=xg DTLy[,E)uFk̲![i4ŕ36}KVd'ADF/*G&6i|J}>lՔhê'g]ҲC~ؖ@ M]v0V#lNT^"qWSOZ[s:[w8}wޝִj*ٲdUʢ;Er l@4SoOUr7p;~Ş:JF"9~aJ] ~}D=2M7q%ʋb097"+UUU1 )^ixgݍ'Vd ֽ gYҼ_ όǺR=bw$Om-"7CJY+d;l_QfZ6P$(&q ~s&6UK/{W=8k#H4S&a J5G/ ~gnY_z$q/-;UU!SyXG)5i sYʪr6Ӹ ǎ=]Uc't3Jmkjłg{KS!hQQ{mV;rxWԞok 8ā?e[]2ө*5>MdaGQp(_-o5EO5Dn]{lJa}Y$JFڽ^:؅iӂSQ#?[wU2vyӢ%p;]b8+*#1bȉ"X8˕說+#ql2O}lߑ^N5E$sbS xE&y F]_-K_gFOBiwt"0S@w;ܪdϒG+ޭx%Ӯ+K#<99UNW%׳]ܿ=܈9 hZl[QFPD~TnS9sVTbx"NX9=;ӫ:HqǙv&P[4m1Y@p=Ɋjq֎Jo3?ط$k {E&Dgug>ZɰZ~#kiXw[VqWo r5Qk@qƓW)DUyYqc#9U */$l^#Yt4Ƣ=2VmO`[6 I"4wA4Z ]⾙m?NLTUUI_\G[ڪM-,&ƋZWyd 4X3LsBx^3M;vvc<&+J5hC.IWf_e2#ix\vLh#Ď?o WpڎWȕp=ߎ3u]>W 0ďT(Qv"2Q4z*Q=(/kv*|{쟢Vv;a{lÞ:HpdC-8q *1ѨEξ.NֻW/3=ʨ̾C$ :j. aM E0 d9GΪ8KU j5sY6姟ly17m&,_ʃ_LY"G:fmUhSS:K&)DhYy'©Jj j)$ 1Im!oϔ{ym]kSKOi8Jо?Y >i6U%GA&ʂ(OkFFz93kLt:8|Wv>Х݄B+sh*D%aI|I44Eikrfɓվ\בn\ʗUW8Jl ,;c}u"4v wisIV -"zq_k̃By*r6bsnҬrqV}/E<vK,GĒjǔ@/jL ӝ|5FĒYSs># Tr~}rch/>]mQ /L?):O&\6z|x?m:‚OlZ_a[-ed.)t!Q)kE*skUQaq]:N`-O}{2N^sTwËwGG$aY>;d j/7ػq꫎RkÆ {\U4ߎsYv[kW{牠, K)(Kͅo/TI<.~WjoGذRi_e zJa \{jtBZJ4ߪ^o)(dؒ#f`@k͔(V?ɥ ZO:n-_:qnXFB(ɯ-Xp6ݯ%޲TV JK/kI%Wy3vhEbNyڧ_ԛ,K/܀~,M~&<@JBJ&[RQbcy^<4פ3WԳkn`b-ɉ]ugȉlT;AgËL{WZG/kjCmkg]'@ίڪ*f02 [*`:9րV_QTh~?5l|fr} 0lQI^d _}q-l f$f*%ml|?E{({}ɻepOoW= fKG0'8 [ aUs5kN:{z2J)̈a%29 蓡1W\A5ms~ĿumN;XiídXb+cFeh -Ajs%\z͇Un?UY9d` FTTOΚ4d\x=2`QXVЛrT6E* ֑1UQ#*.N>%{nmgF‘W])V9I% < TYeM'}Xva?Y-b~_G4_  "nQ5Sd}kLEU+qSwaS2 9Y%P,P#"|W:]Ǒ w]ֶ#o; v9hq܆3V4X)F+^8+DoqT#Zl ]{cе9J9miumϕ|qP@RJtGF7{oѨk[Z"5[W9ap픾$WEx|9;\/UvNq@HHr9sL `_.Uz-pV+Mפ{}3c뛘ZUV*N}|Pe yzm"VZ˅”jo؜"dFԝ2b715ke{z6zRU OkSa(Bu>;9ryL?9LUUt_m̫ZO@NbK۪av!XoY\ɩv=et `e.{i"~ʣT~:Si_kz$$GUVDت9\qV(j =;{a}!q:tbdY,bj1W\F*:[M$Um<C W@/"$mQ5յI2GX*+¾=?_ª{+tIeZw}8[igűft]ci*kږ%2wjڹ-.u/EC}e {NꄢV 2=uc lr'#yL~CmkaVt_#!+cɓV {r-PUFxo"w+JsDlI^&En:]Q ]T@N'(j,`h&9wJ_uӇi JW[9ZrIxIS,=£;ScYTP-l3ö.c;xɾLkan6EEϡ+}~4Z6ިc_pȴ M4Lbޢ9G"t(JsFGW(;y,;jE>Cqm.}K><$yk=#Eί& 5QFy5mv>W zҦ_ 2eWƐHB5ֱZ~/'mU+V:޹|M>mӶ8Y6-ԎĒmQ]1؀sWkÓ<W<=S=:wvZ>C;lc1&G}udȲYUk9_ >%v?&tM7G0V %׶G_cɕc1#Щڼ7;٨E)| ])i&PSS[9 iB Vzprx<;ۼ.< s=N *mW٫O֪mz_X s:hc>==ޭDL[_O!*um:ߵg4у*r42G{Zi3U+?">>W.N%*EuyH $IhpFd Vcrߒ=sJUyu&]wa\ʽ2_yTػ6ؗAyX5,g9 E!lTnu_MK+qAVU& BGp%}c!Z)\Kx2+}׵ʯ|/˜;5jCkz5RA $7d؅R?n^.^)i;jMMFŀ}V3^4+eK$zPk%c^OR'3}Ft)"`ߤC?rkd_ںaXE&A⧃jo,/&Do~IA_,fk1C ؑc [)q$dQb5S?VZӬK<|w2:CRȭ`UBے!9|_$s\6KK]-jAiJFζ/;ݢ5gIu9Q=jvMWsO(*T=z4$'X5|2/$.ǎǻ\ʞ|KWQ co]W%}5ċnSMmM-"G15U؈$&qF+o^ qׁb.&UKύ_N(Νaݵ8 >_csAxVO'S{wJ+.;ˮBh. -b8; t Al`ðz#Vsʮ_UIK}dnomhei{uk5 m<I[{f9lj0I&;/6*7/}-^{EYKڋz?OF}XD ʚe +$=CYf9Gs*tU?_w{bpIGd8fTb{`&EDdJnU|U?ض@bjIveO`L{*ZJ dF#ۆHFȢi+8T_^3U2bi7a1YLJ&?`;u{*Vj&:dB1 XW;uٶ[7wh$;u{;ש/̆Isďal 4"zd{U:ğʪzDwihQua(Ny y qxՍ%TVXFn\яGt{u-6*;j|47K 7WyVONUl6Yi1s-Ln9A"#t"ՑVrGpqexU=#^:ݫc-.l<<0Uͱcb8#I.XkZC7'"蓵5%Վ:P,2wصFXQø{)\u[㏌^$k=N81ZN!VLh""rJM(qT"Ե/gNuˬ̶2 ca/4+Siz2g zSڶX5kMp潉Z k2x~^\eڸTE L⫋<];[̫[8{PqMاD586EG"9ʋ&K&]JBYVe1]EIm~KeVA+K*a ~ZU𨈹*c^aB\|t;v__ThnLu^j5,:1i3,"|%_s{P7DkM׽ipKVWTbt'L :Sc֌_w򞊜l~*յJNZU`Kؚr @epkKUnHӥ,y100s_.N\jRdSݚeu>(u* J[;n.+e94ooh+ZTj'3˦k۸-*q\KevQnkmZoUWXH+W|"|By'|~tm)3*Zm$;˯NCTIigH)I C H4oO.jZ_moFeEm ߚvA Tt-21$5k{aU-NL=׷iJ?H78*ږl%,2G>;b!oN@)·[S/ZWT&2}5xl.`%G-D#lZFUUZ[M|-k^ZoݓtVA@{ *q$1<+Or{m/C^&D6?ݤ9t;XZK8OU_cRHQHzlV(*Ɩ]m/nV?i{CJZ!fPdDiHYXU>]V9*njałk\Ja,o 28RfHJ؏Wo(UXU\֦SETRVf7NMsa}^ %8e$bIzt1#2[YVVY&:'/ÙJ띅oH-%Ŵj M2Owg"' mEe|TUt_mޘ2}=&$#>2ZnŬj9UUj"2,UnuznZHv5'| }ŏf<+Mg(C'y3>L[O f\Dcj[~ft4gwro7fd9p$Mag sQkb9y#|I-x$y߹NJa_Fjz$S`qt6G#z3LYH#HFǦ?P k7xU~ RpFoiOXu[Bd U6#K&{j.*+U-tǖY.e8gۡS^hIR!h;oXj!Zb5b*SLu"勍`]fJfWo,}|Ss%-h\g*5/qr)UzޡA}֑"?)(ŏ$:}o/l(Z眷-rV|):֫}Eo[фy`ݚCIDؤBC=^9_\nn>`f۪͊Z{`,L{&m#<3,hTQc8w'y-2^: 5?W~IQX^ LlB/Eutm娕^5sDW$kYoHejչzNE=].Af샖+o!{1Iy׽?rܡ|߇{wM2meWc%AE\D{^*UD֋SU;g/~}z < YbL1+[|$UoɾK뒣ڵk z7|?Cwmp5Kj纴Ű-BŠƓٔzU=4rUtV2w\.й١L-BVȵy'V^jQ}WҰj۽b wcumu[\k!B(rs"QGT,w棚_$Ӯ|S{id\z \|:-FEaB %SʌͱV.j<]JaB ljSA+2Lª'53~,;|MQ7tW&l{%tחShw~M~7^O&l j&-$dv2p׫F'+깖fKl҇׆~4?{x.Ñ>cWĉ7Ao6Ѿʩ{/nRXV(^F׎Qc^ݖ߳Ň%r'5|rsН}%FKeyX%-@Ǒe jz5SE{*vݒxm[J{rWKl XAK4H5pT\FS^=w-fkh\HѻkPuSp-I8֮h6Ds7yQS.䯦WO%/l7Rr]+ߌ\]ZAqW֊+Z$9k*l@K>a]ڎx9xEE\ۃ /ڬ2wVkgFzEzgm*/ K)zXH\Olr,Qy"WQU睗&,i|fL 9uXZ@uM;|9YŻ \Ƈ2R;Ɏ^;Ý z%vΫ].;\p ҫg H_嫚G+/sF/jIoOMHFѷ쇅X5=#^CFXlQ SS*|ӈ=GT=sWgr̓ڝӴteRd#)u-&ۇ&<b#թz9Xڒژ&voE&7z ڨA`sN:?Zk^9r$S [VQ:_}6~l gJt Zn2A${|yW5?T;ė$X_%dzt3ӽwM}il~]C*9dI tv'10QxV]]mh#ҭSu:f{/1V>V'X-; "?Z,mxUuǂ[:"컂i)]/sʡҜjziY6#ѱ~s͇7pvYY-M^j[E\]K8fZ!M٭URl獮sB6Dna+J?c~ߟyҭr'=y+5TIpeNʻ9hP5upzJFώ%_zL;D_,pdr^=~,q^h}VV!r|72J =Kunkg\aDijD"7{~׸o|n$ZK/2×] {KZJrP"@Y(:3# 9,YFU\EvF[TO$[wk)uiKu\:J[]zڂƧbH,Oa^BD<1jt'o+.ij)PT{~dvN f8z}$J8q3oDG#ǔɬuƣ:^TCnwduNg^M)-Q֪e>wX%KkڶJZB(YIdkw? '۾ypK6lUVU}Kޢߩq ڟ*hdtro$3g^F w:z7M{#l'ؠǁ 4K2ֺLwKccR,QyEEϑ;cWJ%)IJ?!7vDzbjmd|zk6x=V# E~K%eOY[kƓ|5ז]'[y4R5r'{1ziDeyV弣٥U**oSsl{ڎi=SdqʊI|l R56= Lwɒqe\㵟^ [Etr2mv[].LE2>4B8CDkb-xJs]mx7v]:N Jm->je|V $#{o;St/ok32VqEu6 k:vZ-C"˪["|?(r='jmeqөVv۬xiQ;:)U.vN<=}֣cW`9Uw-9rrz{lUޯ,mUڸ.Ԑu:U4fzěJC6Ǖ\漾i?er|%YE\EԼI ,E dSj5窻򈾩;=j,wUW_ȹWϱuVSFwMcrȍm-ԕseuL n,'hը6"\e6jg ;ħhZIĞ<Or~潔DU˟% %WXMPN҃n"́y&c01břN1Ov3\0hEE_L`gz:-*i ߾J\B9z"Tj1s[<%d*Y hWkD|OkznodUQ0pmuE,iS|3*5ǟmDmaYRL|SdHlcih{ȭz!1Yd mv*VcŐ&V"+Ր$LV;Ip;ɼhv.Fevo tqƶu&ke>:%3y$ 竑|"/[GB0Z'7w2v!ItlxrZVzr\̖ F MWF;zfIt Zğ4^Dh[ܾ"pv'_]d)!Wʃr9#E9IWSZjwѦWZ,<3b0qlDė\|"sڞ.S;N|4!nڲM:$1+acyd>=N5+nMvk2$\_k{m|OPΧ%T6G4MDV^xľ66m0OrugI; ”JEl4v$1'3=8=ImUtvէؐSlkgɨֳl؆ ㌃H{N5J앓ʱVCQ g\$yĎoa6͜⪿"FyIg?}_>Y,/QR9&S'JuC5;O&x9U.)a'CAzˌUo9+!VqE#ܯky*6ȏJk?I {R+6jJFR֤gH^}uO"o-7Qhb.wK[{V_Hj]_|?D<r^2JKjq_Mg#6JkeI|V0lyPaTcזQsVj4[WsZ}RKzPԊhdg*ͬ2ڞjr9^5В{ 6@{t+*h^M.~™Z&OiSMLFS§r7oW[p#|u]kdı(!I|=ѮɭjdMƤ^>vv{g t&1KgW$h&Qx^֏ōV򈊫:4,US::G|vA&me\DZ54vJ$D1F!<>?N?bevr=(럱pߥ$sN!k6*Zb2abϐ!|kJ`Ed0ը#+W2d[kow̵ׄt0[+WXٓ:wem4h!0G9FOW<<]Q7?6}q,s|:5[[j-S$k8IQb6tut/%KrkNmX|b>% QfW9ʌ-sUdƷ*5x~Hn,9(F֕l,#D*Ҹkӏ_ce"6/%LNOۼu*+yU˳RO aaY1ec W\b \q)/7߭;b:Nl]%u*;ϳsʛ'Se ^}U+kKKMYŞs[V޻-!8xݍ}FYlnmj'[8U0ݱɋ#c6,i'g!9G~rݖm5wÏu:롫N4=ױ=:D-T!H< 2"L1_湋V-<&t,ˇo7fXmN\.پ,Oa՝weU Mk9Zg*seM,A$z2Vw p`vq;N Ⲫ2M#IB'a:Uz {N]'Œ՘~,ֻkEN @>tH Yq?8TfkڴLw U+>Rb_g۶~?X>%pov&K^L{ȇgH^Y5ύ573ih! B*U*~Mo&H̒i_g3v̠6ޔH+8 < .tP VZsxF"-J=ذ ijxKuư"MOFbGMrIԋ!Pk8͸)iڻ'ZZ:ONΛn]ocEW4asI8Dr+QF/*bݵ:[으\{NӶXnƪm}lArEʯY,EXovkj2߲qd_nO3%o3D8xZTku F0- Gy'^Yk>VX KdUeA<9$G3svkWv\;w1[>m6[H[TXTsTXU4c#8l 8W+ZW}8.;*ﵨש7ccdVЏi?L;|:lZrrVlWG]6M{<G/7j"g^ԭUOymȱj~0:6m| Yک;I\LzȐ"|PLTs/z"1UҮVqդs̐^ s2]H,w>81!Q9z<9_KUi>~U<9xu+}zOyDI Qs)' 'U2 o*N^SSuwX\߆\MjxER]40D%IBG7Ճcřpꮭhoak[ڭBp#dXfǏI0D)MB2Sh "~Yw8ꖦi>peRw $XV%x`{7I{P(|BWqL-B)]}ZrfU7mҮtHU-5 .ӕc! T )E_JxF/VٞțO^Lvgk#Flx_MMba%ъbBW_[cR㪏2>wi0ĆSw1܈' r'/mtPSƕ{ᾣT eLgx-GX#TtwHWkwۆ9ӮW}'`Fd4߻!ѣ6vb?_TDkY?m|6(duOgXQ;^OBZ4S 㹾ms$Nnų?^jG5\<|:D_/\tQWSoVb݅8pϏ dbx5k }8Qlٶjug•_5p"k[Q>]ZW9 m㣩ώy 9T)edvʲ}>$6*VεjOgZr{K-`ݒM} !"\ol7 #U;R-ܤ{iOoDTp,Q.@fȽc{4SVqS8Ǻ]7Ա2,k6 +gL*0(dEi>d{| To h䈮-xE:&j KX^FkcIbXDE^,4S.{y/uJI5W=shv 2^:@UCp{f (Z\׽Db𨸕R}_wjq}ϫP'KyrIkoZB 1ĞRi=?$Z(sI-V=NcuMk6-v#aVfvI}2 =s{.a|N"EvNjmiԩe[zk r\=w]iisn]k#i6tV܉Z3d{j+ڼdyr:mI7K'.NlJk mf/kA2\dsXW֫F{ª*ڹ,k>&r`vxY\ ^^q &bG9еdXW_&ʠDs`{NW;b6/{V5rҵ} ޗVm-K $ I(RfnDV{rDEEsW*+Nտr*U_{eIz'e["oeG2;#-o`Q^U-Ѻ5ԧ'ܻwqW' 'rTXkO :D(4 \4b^MD_EgpltS^_sF6pr]LK{q&ݝMA$"d w 0K 34ksZ"CMs#:b)zB+Wg>ӝY!'Tuȵ,P7q '  pba Zƴ^,rVn[d.zխ[]կ{dF< =?Fie&L)sʻpuojfV]抭moxr۪)RyU}Dr6+bx,$M 5]*/@WӴGؽ'=H{zXEj?5v Q[B-_SAjh5Y뜵7,Yč6mb)r'=*? 3֘Uwd*Mrηע~ڦ$1.U!Q&O.5^=%v֬W|rWȍm=Zn~1ǃd_242@LfkTVb1/㶫Y+ C tڳU̍W}AْQ1&ܚڭ_mgx34 +4pQW磏nIpit塃/]ͬ]iX,0 ,mnRQ jDŰrH2Xz^0d/V,j'2-"pkFzV/v驶ɛ>;cЇWM%9bUT-5qkw/;l5OV57]2⑺w^&Tm5/U_],ch櫹D]ݽ{+My9$)[vUwc:3R6gvKV2d&O5 sWDEV+djuI^yź޺'MpUjْnlu_c`ujHxˋ'ue*-p}4$e+#zƽսG+eYŷőJY粓miAbPiS+UV/R'oDJ:6Adm_Juջ *d+Hܟ"%jⱤ ^kVͶ0dSEt밍Y<[VwieMd?|2sX((WSgfo+lsa:DZNl;ίרv,ʈv[SZ4է$J=Ԑw\~\J[V/>e˦~u޿Iq; -K۷#m8 _"d(΅TEL̗i4‚_ _"z3B"sKCUc˵!A$nI('+CW!TDW+Sօg{YlQqZ'}4;aW@׶vkF.|ǫ H@^TD%幫UKȵw1qIl Qk`Ip#eɐU_uj}hYjyJY5pSQ^r=9D^rkaKͨu@zobeΕ *ɡW&9ƀej/'Q519IwwzmLh6Kv%d[VRAU|@ YQ+c'gm< Se)  +Mك#wE)0 aďF#^EO%DU_O\9KZuqd#"vJöwcjg-J"P|T*2UFNk)bmڨHD`QDWsj* NU66iڢлuZGf!eާa{G%D To\l6 ;4꺙%{V4QlW_U%l RcK}!9_Y5H Ѱ"=9L%j=;'ƥDp饫4 f}P#r|Dz{^[qjWv]zd2ǐ0etf|Urk/(d"O%U`>oVft,ۺ53]m""kP3I֑Twǻ_EsN?.'øzYdZ?=RjȂ,9-HkI Ցz9ȼz>fiZ6F^=]իjɩJʒUPJUD͒xmԉ<MPno`l5 MTAeK4?pX񧃓"8kQU+TYk͚ţ)zcW].ʓLza_k!|iFsHT,RZG"q97YѢc-D:8z !ll颸476#M{h8u4f9HE_Vtk'kYkˁ~{@1liG-kgdh* F9#jq;_}ýN5>He[G>/A{lmEoALJ"YT2`%'Dw qqgLJ/<5kEr8_am;i5 G|R1Q cy{JfG\]]&pK^x$W;Bg)EG>䶻oX r "=| B'_DvJ9ǩ8gGOJS:(%mM,"2ڠ >"C-fqp1#Ew*_DIiQVUuj_vweݛVh,hu5 òW\(o",w\Qj?FomiءZw7=&lDU{FbB|O9WT%ڶ!zcӡ_kg\ITR\{k@ h2oȾq=uOܛt},Pۻ'TlRY⍭ܫiXӑi06J`Aa[=wf5Qr[r?RQ='wwk9ڴh&6l}ӋB +$o|qx*V7 Qu"i$xRMV &pVG1UUYmQ [`8!227#5B#xʹh\v[GcIlam7*ڡIͶe|64RZ7Ј*Yy{s**q~f=DTM!‘٬RV/iV? ͎]OYu[os?ZߗgqsK{ ITVDw(2gè +7t9vieaKcl%~bi_$pVy9|WUQM&$N#y֯5(bmO dqRgډi$-({mVWp]:;c:'LWMT>%7FAb$w¥ yጌy *X2y#Ѫ*ɚ֣J߇L5O{E9e+֏S֗ش=nD==s"*UW'nӋluvV;e:eyF3jXF?'wGS^}S;%% 3Sm֮bn5|Vꁼoi(Bo7.o *YP¦:?nzf@ն8!M`2[cBewG2+ 23|`dǕm5ᦪO;2p5d ︺7mõv}h?T<͜+ KO2N$tr BTNU=s[#C\tә_p:浚jW,;a|}ښYĜAbQ<+_5N[&E.:~jkbC-V+K|᜽ suީjEUQ_]{q(i5QC%YHF( ^ qKUfv;mHM&˓{u>ߞ-#Ejc㫬lUTqI䈜m]:sݧij%,k Y3,!EUȂB<33'ysyS)V#Kl+=ֿW݂o"ʖ*X( bv+uˊ:#"y^Z=2mSVE[6__s?S#X $]X6M'aCeX ĸq^D%CȭGҿh:y/5>j85Lʏ{Hh;*2>Kjo^”e/y+W\FTl$2JT#\ )<ڍ{#K}Ѫ?Ih㡱sXN,q!D: \XT z }QW=ilj7ݡǗgu^춓l2ԛW|6c&?F EL"zx/Ɠzn/*Vr?ҵ݃ p-/L:2Ei#`YA"dE.|7dGfV?-N>Z ^o&J`3Z9yU8oV6=fu]ERl)X2&|9v.!,I-BC49Tr5}S:OGlQ|t-c$ɋ_ r4-""B*;*׋zVU%u >GUφPrSN$Eʸu3l EFhb-B1&AI9'iBi%i367k-A(zfRlRG9:7bG+# `Y8}2J]kE9Jڞ B7jNwi&L 142rХJ9-ymj%σ^_U2R}6Ctr~XZrVHG/eIS~=kEWβ_o| b=X Fj,IP7UrJǫ*[ۺ,(̲^rO$>3_l6l Yµ(4"5*3On4I#)t--χqP*\WZ8B#s9Q{>\JMlת9lUE]Fm)9!X''7McxW(GϢf][:`'^#ɕ_%ώLXaD~ ږ[/u&$$4bJ4`"#zM:(Gm2+TlTQ-odsl-KUu$ly Fj5Qzd=ȊQtDDռyn CS0"#+SJ׌VGOɉχ5O`WΐBw juWfv6m)DP,q-DB5ޜ]=ejɷӤS/u֖|o5G%. &Ơv"C4qR9ʎH+\DE3kz'˧Sҭ4Rgݵ>k@đ%}'DO׌ȳ_m?MNFѫJ.z::Q(WJW͎+U9U$HaFتUTv{{F[wZϧS6GKdoZ^?tZ;FOl(ܛcтG'&8=1F(G#QUW/gܿ-vK%cz;wotM?w~t}__Np ]g"VXMf)  EbQ޾+}{xnsĭ6q#s kl*jjOZ- U0G7C)xVYOU>{e+,rMuH a隄u)v˳$TRLlȄliH%z(?F_GE?;RkE6떟7]\s4U>uqЭ8N;^)DEV&e}q,zXrZGM{'8­v\>o[>/Rm_5fVS0v8)V4*$/_/꾞^n{2q}<_?jfkY{:ɗUxV*kH4[*9FQyrk^3uvErl^biy uΧ=gI]Jѱ!AkꪩeԆ@{,XYO"y{{ؾnUs-/z1JM$ Z__wj&%ܭK)rLAֵZCrD(T{<Տ'jMylj/QcZВZFhz; '1c1?b#AH {n =Q:uu!aPwWNz^Ԉ1湪cUr5Ǫg?b˗&6ky'|%*c_uW=&Ifl]_ɶh gJ%H&s#("NJU*xv<i|x[Dە-Gv{seK=5\Zdžխ$jTnuWR8b̢sy[jR7{]}YxljRiIWyXC_ϔ5e:{Uf,Ì( TgQYfڨ"3IR=rcʭl*jsѮ)۾$= kkR tlwwDdתQnp>2&Vbdz2y]N ,65@E5MY=kX?+GY]:ֿsU u"iWpUE7d* *13ʫ9T<Q.02.U׉uŖ[[l57[[F H#ѾF{n&oeV4݇rKq֎+]?ص͂,+zQd!f6| (19W?L?ܲw +vՄK~1աRf=MrRVH'[ÛAhH6J6>Ov[{ˆyvM,mx5\TB<4Te, V0j[vn} ITE<ۓAuqlNJmֻB #%F90щsЯs\W.EӜٻ~q^I'kYo.:Tv2Dc+SfE BCwj˓{$eq8-JO1:_u.*\/y%L7X haf5ʕ.ab EWS;loIXգI3AחTNXu+`xL[ysbK-ˢ }vTRH3ýP0&s S! 8Vm"v5ӡ {oR )]*I ȋ&3K蜵w2㉜MI2eQZmD⇳uig_Yڶ /Di #'cW#Wǔ\魵ix37fu}וF6T|7gR=`$Ǣ:ޛ^;uKTwcM 03+%2f9%kxO%EUh[E.J'Zޫtۺ=d(/4jVMnZ6X-%[K{[,$4n(2tw!U8o"g]n{XxIm~A&,ጱ H^j9f9mVId|`޼'+Zur} nTs2Ƽ?EVzSrqGmmϥ"F**mTjJ' *"H5b=,CB31QdH_ikrN; GX6#էbpV=q;ε]mtU# "8֞T7Qs]DO\Cv+_b \?x#(ծ{kZ~־BӻހI0v=>&G'xdpڮxO-+oV T}Ѻj ͕iUv kU6-bFFB!8lDD {J/ OjrDA+_bE D{>c7GE@FdY#1V9UsHz7 qڵz֏[w{sPOLqI(gW+)1FF$WXҤ@OE\[Qfv<~}ju$-rņҥ DɂG^r\ߵj;;嬊yiwlL=mmoT,O{O_[ieT-f‘ůtY1Q^{D)>]p942[*;}_u]cbX%K JEuj!u;V*nզ 1WLUo>VOD|Jߩ݈f_),; klb'|Iʞw\ vkj}>޵vf}#$5/@Z4H1Z?#986jlOU.[5i{VzپLrc^۾&)ҩ'8t=E$(; 1*|X=_=|jyzgITߊϚy{keliSuI`-ks=g}r `_N?u㪪ʒ|'I=^T yOO:ts(5ȅ!܍c m^֭64TdE% v{TEUQ' +L g/]1aF9QbEkמuXi0Q[..@$M?Fr*zfW͒ٳJnzGf[z\:Y1dPK,j&# &j^7RrjEE>]t^J׳Pם޺DlC̡+I?Ke_Xg Q4jUےdmq w1v YGa[ɍ%|V{aԣ8sQ×%Z*䵮Tn5[?YӪ^5ة-`@:ʲ!^k; 2I9c|QDƧ R^| G. }tHo596s)KiKRqXHh"4(r#_qF/ dw ˔]Yח Ke>Қp`j`ʁ&dxb(FVGT"/ )|ބd^:\M^uգ&"8%!`yf +Xǵs∹=]/Vk{/:>O}c^[lE[\Mzf@9HkykyN9)͗oKdɗkj]|Ok]_.H85 2ɃsaYUc\%V9}=2ָae5'R)lU&7kڍ=c\d6Bk6D Es_Wz.E+6ڻ^&䊪'%t}oF meـOVy+ JG#swϙiZ+}O<9)~QOs}vut"ͣQoLR(dDG?7+"U猍rcOSVV`"WS[e Q 'ω (aCTBON1;TڮRK!uRuXH00eP¤lH|Z*'>֐λ9fۥfՄMe,^ϺB(Fq_~$`ՍOmQ_ó^ beII6Pk[?G҂Dz8.Tkι:1V/UrF,Vu ꟩V7oW/z-sCRQ(lj]깝k/6U~T,)6Odh}yͻ!Zf|8R?(b5$!L)yi|Uc֫v`˃4s:̉w:iFݗ\s`~{mBF6 Eo092UjϏ{dj?'s9K,?e1j!J; ;t{$RL#bOß⨫7NV:>J}\t.{oOI]6.f QjnmDIt嘪IlYC B5||SlmVJ>:$BA_smMZeݾfãW.uY`PҬ{68&RǎN"<wUɎmO߁~<5g~GS[urc:K&y:6"Dɔsԑ%k7彬8$|痪gZmXeQ:۟t=E?]w@ʞ]j3:S(XٓM"Q?%lSPwFWtqd`6"6)PɗCZ3=F&*coǓ,$V^ufӷ:g@6E*QGD%LV]zy]Q7U_$HWٍ-Է#]e L2SѭL4@`}LaX|Yrb}.^S9lM&+-e׭k7o`9=zN,:y[zD$JLp:3Z!;?}_oSv|y]ޱcz5iZYϡ.3)`Q?ݴϦI_3!<΄AEy"5֦y+e\=eG_JsM֟_R̺S\ V$IHk_&*x}qN>+ghN~H|[뷭 , K+cļ9̴`eƔ4-hcDG^\ꞕJ͛/Yּ<>n96,?`$sQNß4Ճvg xj&ղXA>ok=N?+_ϓ5bnp>dhZ޺l[-誗|*rﮉ1ʔ?qꊉ{}l<ᩋ'FsV5E(0!Ɨ2gNX,Ҝ0Q`QV*K8rօ-ޔ" =^2&ejk, %3Gk㐊kU=s`:Or@ڶ%l+Xp#BiA.cdѤAQ#|yR=Q? <)꾋6]Qw\-uMH\)H;y^}2n|?r k/vafjwޥ2)+-TFHDgL4ګ"(Иg'**f}r&ǯu}^VT)YY5ZФa$c4My#\$ SZۦ=FCy#l2@lCɌ%sWŮ;c5]Z\yB,=rUΟoS (u(~diQBV UiWS_蹗»JˏLk);6߰ujI)!ahGZ:|(b3ӏL% 4<8|Hw=ɑZXk.׭26k`ښls!!$TrNQS8ج՞a9ifA{D4RĐkrhЁ0c";_dwq6j]fW4Rȵį;Mo0GZp4ODL&ƌletᢅ;CfyR|b!9H萆L|5F5VԢJLW\0׻ ,2ÎqH""4_qV?,"ihm~PDՍ[!16R챈缍s-^k]c6]zVQ2(g/zpWzg3U֊Oq"PB׻'i4MեX$ȮRkSEk9jf}wmK}}Cv)ݍON~KZVGټP2EjFi!5W1/+iFyq=tiL-_Iͺe&T릙w Vpj^IT̕vwe;}`Ɏ1VGrb7y"#T);:(_#lzcmU:v:i6cKI"8>#QRFѿeGK:>=.2|JSRqG`mEmh_a yJWQz5fJ_[:D0ͺRTK O<"9lZ2I)Mq#425l˖V{ފk|DŽDʦ۟45.ϳU*7} s#%Uҡj JHs[1D^ҵV"s'G=cS"ĩkQeWѓjoQ@yNQ ^,sw57Sq6 I%l$ CgDW露M({ -߰7 lJh !f',Æ4_U込K0;,uzsCٝ6 Қ,IϒXtes9'/?Sd/]M?]#MnlZ)#h DXίAC0#hzBœRҲN uc9dT9F1hީ' L= k{z30ᠳq^'0kAȌaN76CWyʉs&M"nj̽u.;46$tVtZŝ[(EьdhkK!Qy\\pm?9]ioqm(cv̆~i%`<@*1G+Uq?B)DjΙ\G3vڽ/JwQeV&DrKts`[T+U$aD1y(To /tMR{^ܳK?"?U]֥0*lZpȍ}:Ͱ&5eECӚZ=`|@S/⋞>olβa^53p8r_?ojZ]HAf POWXe6BXeC4!`ѭUW/9߸vkVqfe-6 ^g= 5'.<&:]ѽTڣuΫXlubİqI]sR2u]aRY3B:3.ylxVa>.TIgh̒nݢ!L:0Qhl RQ`/pyϖβWoj^<Xaږv3/clq*6)S])&dD){TnϏ<""hg[#O3eLUjGȤ?{mt3P;JoyP(“ȤkZ؝){_&NG+Ӂֽi`X!ٮ4j@B4s׹]?nU{_ ?>gmZcK+t}N ۶ڋeq4FSTa:LDJѾNcBz+\T#\[inzUϡ6hU},dF6^ "/עe)UW%/\Шmf5"1d82D^ Sy4DTWprҮkՒY4&\o62aNڶ,j% K !O&k}XF*5kX GHǁݵKnfk<쮗gQgOh}1\g5LʴJչGOL٭LWknZIksIQXOd`}dfɓ8Q j{hqd_wLJMۥw zӪH.AثR5IWSzVXDZ𕪭zx*eY}r_+Zj&}k/kt h87R$dZ@!$5{d>aTbgܨԝXoֻfh9RXϧbKhW?/hgWj|UWxwx:%>ݶj\X:窻';+zXhh8cpMG$9j+U9{WF) bwZ]οeb2x`<~M""' =rMVRNplc g<3%ݎf3Tjr&[-mr3 а{' MsQʎy&9ʨqNyq5GrY`X4ǑR(ʧPmW#Sׄ^?9Ind|X8AEF5 ֧o/9vHULqgnadBXo#*OmTq#WZjrzljsg'j.i8cX#>Lb+c*jh(kV/sSЎLJ)t?c4{^*ߓVcv6U#I"ɨ^(W%?u?#n{%l+ 1;+:w|Rl ; OFlE%G|4K9Zor0^-Vydnꖕ% 4]#Fm >a. ^S˄OUS'5P#kkRMoGuM`>/4}Njuuc±YfR6Ҽ6bKJU"Ñ^/q)<^ RM4ɴ#c VV$8! "exOgՎilj|U}xU^rڞe9H[lvTB-Pet,ř)hQ^VuLl}ը̨=K+l|;;><)pO};$B7ůQSM;|]Ԣ* )][)Yk^FM,j9m+^@g9\_{I評d;[~dY'jOxi>)rRH1 IG}g E)r=go&=uJZ>>7I sեm6A)dF5AËIUOUlj /qy%Ye9ޤrZcC65~Bll,j r@4^QĊEEE3sLALʴ]ZDs^XHs'Z4Ҏ=ֳρ>w$ Mqh\JkOIv1+\:T{2b{o*7s=WOd>UhlݫiJL_;5ɩªY',ha(sc#8kW԰伪'z7Kٮ~so6aku֑)k&T@ř# g?!U )#dVi1֫%7FDl>'v0t#u lGD1nBn"Pj=6Vs1iMۓ#eL޶4+n.2}()%L$׌ՋlёI+δml8Z\Wf5[ ǶqNWMbXѲ++fC%焎"VN9DT&;|P$Mi]{p;wYsGWt=\se_m-WD|Kcם&rdg׏!R+2\W'bc7ybΕ)[7<|UDϽv64UnH֡- <'XJsㅠ4t2,'$s扩S=ORz#ii̚G]-D=q*ePH;_Xx Bc]m޸l5}V,gn.lQ`Cp )@XG+~){nUoX+MچEH=kQd(G5ynK ^EY5s(Ej9g: WgC(tөU $yiMR͌H%{=o(&W>:(5N=Ti=91G!T45D!W>e'G"Z~lYͦeб^YD%c4c|Knexk,Å )-kP\?rʋLVOgJզpM~j1;\Qr[VT0Dubø'VoZ9K/Ӣpʖ,Q*5=+Tr/ıˉjmԪk(V̕ZZT= Bcd j cuJQES=e*\1F;1gv`qi fJcΝ[mÍMqlӅ*{6̚f #΂sd!"x/=QyO#ei9%MjEkJ#"-N'C6Z+"Ѣ*=hz*֫-~[YJw]咖"cI$ 6m#UʈW\Xi~ 뫫j3 VɴjyVU|8+>}d҅uH׀zG2"x!NAj9{_ʱ˱Jv}`!Ɯ;^r sb{j|&B@G5ʪ5y~ժ9 ~Mf\~:ǯ0• W2"IWVTOEzK1I#Wfe1㮼UKdƥ;mKI6ZX!-j>ScQ6=]{X4`p©/41Wj<[&YRUĩeP#$8 9U#N9_\UMZu#cR7[޴$5oѧsDOUT&V4'$8NԹIBl˫::>|](f{8XQ܈/59N=$.:{h@ dtlFF\J'w?O\CNTCwL;7PF7Vi!%r0?}}?"crE_}G?cmCT$q/^$8mET_վݶsgT>6HTk: nqdҫYxڎTJ]tS)+;^ӵK[k[a2$4kA5C9}=Q9/\KV14=tցcM<΅ nc9\EEQvtq-j4i2s}To]>"dẄ^{ ETr*ѯK5?w6;j[ D˟"-koUQ D8_콾-jDŽTrՄ!7:M縵V[ ՞_Y+dWQR+;_z%-tZtrgbդt2f?U*fɑKυģԒ´s$ZRbp#Qp+ճWN>ܒ^#csuq_w1&(g4:JX7G,___\{YWQQp}Eݸ4ɄaY(ƒ*=$pэEU_Dצ7uMZxQdm jnX>aLJFE`DQbĔpA^%XU^RF{Qˌ.EXQHB>AJ"HXUpqWRU :d lf#1,AA%l^#ױ֪/ z(j!M%ԝgܝm(2- @Ǻ=d"eKjA09TZ,\kjClY ~+c@HrN ɓ%z _QnlܐvZƴni]"nҺZ$7DjZɖ"xJ;X jj_EV9S׋>n)K-~}QO_߫IUSn9NmaJ5uX+-`]$jUzjLKPFn6-{"$Q) #W@#W+svرU*S"gŐ5;MM)#:M/' /jGGVy-7w =YY_%Ԯ]-9J7Tzrg?e2u Sh$cQGT彻- _Ȓk c؏Oe2L*A%|P̐xY>9(N|s[f[mZU"-t`3:5H͈?ĆDy"TFaӑܤb Y5.rqQR5aFǾAU+wi $9dRcǕr.lk ­|Iu{ Cqs=NsFUMLRĠհѥ tlsc5dBgs5w(ȶq?PNAI q@ˌH|DexFG#DG"/:=ZIKg#պfY7+7,/%Ά@s\%QxUW}զ;7}ʩ#DU#+]{a|H$F{6xͽQp2NDl4;qjlEdY%y"bEp4`ƮF7QrӋnM; ;X3zYhe[(̰xJ'}D,r5=/vsdɟKYsyseQ1n&Խ]HaejO:ô@34)qx82ױqwet4G;,tٲUnMUoM:l#ť& sH{uTxVUU]>F_iG\m٣ZWݺwZ|>*7m{b^)d܎#|diUmͼfHևjT$Y.4RbX PO{Uj'숙>빮g5*%)=/g 9 ~E?Fjc )# gDi\1>Ox#䪈z'[-yii&M(Z6ڦ̑lEH4iQb5aUD*̓ś®61Un,LVY]^ؔ t8tNH#$6sTWj U깃RvN>8ݻXչ3}mg;n_'xF+`Ɇw^I!*Ua#L#vSNA9{"=,k+~~ g|*G֭fjܶ*_5hgQK hR lJՋx-ӵ[iG~KcrZUe{t泬ⳈB3F~c<ϒ#֛Uڴx4%Knڲޒݎ]jt%q+)n, (%0Pq 3w9.kiDvIŴ6OzU2H3VIR[D"1Uܣ|92BI7жj%biU%Z澱F)5O`j"8Tsgj}}.#5Gk[ݪ,ElUuUq}b=ZBF̗vQk ~eו uOeNvM%>m3iV )æ‍Wnr#r*ņUw_F2Mjt|I> ,u BP^ZM_TE29[ ֘۔}ݪ:d}oSt@rVL8p+i˞N3UJ^)i7UqDc4`dE۵ڻ ԺXD +Ȯ *Z0s`z cV,c0KŬ)l#)cD5L$x}}nMͅ{I6kܤ2W֖| ak~wXME/HauaVis]cKZ< _4oR'\;;:B>ɢ#Cxm *J*B3GN!rgVLտ˾ˍ5׺tuT]_JTtv/u21QANaD5|tv>m޺f:aG"DW2[~HUEkr'YIbm%8Ѥi]?Xtk@|Icoy˄gJcrб~}A{ W|;~t ݚ@AB?u7Kii:RbKet 9!,wBv99cƎ8TTn{z:n%kح5n:AIi1["K2"ő^qr_8ScmKY;/+ 5ΰn:\U1'A,J3<f疿 rݬzI;8"{XRW$}cG3/֒[%T!F9msXFS)U;e$!g?]kv/Rn i- xn` a+E%SbI-' W^2/)Bi &״l b+֖ma)Y0ժR$V,N\yEU\&*p?+ZgT9dD|).1㑲a!_r F򙞛DZW_E$][`Pv.X[N襑FZњ33Xx#(Q'}¦3ŗse3UZnNIm]G4[2^ac]J2W9ey>3\ rx(ۺuoLlje NqAq#6@wM[-4#[claZ NQ/u>Z%qBcllMP7r-aM٥2\vOd#\!`dp"+5TOǢ.-й{USvYUg`A)j[E).oh Xp3\qS(۫6ZOLm(5gŲZQԏFƑBG\&].-b}TgtXI@i7j1s%Q=Ȋ*kRnDc7 ]F <$A7$R rVEc\ZK-m.I^E-S?96հhA"0I*$ȧZT#4V</oZ蛎E{˜&PQoѯj=z5/cQxE,M5)?AߟcSϫ?xa}tu7:ă1^CWs"1HN[rJiY=YnMo}Dۙi0/ok5p!5xf19i"͗`H 97][l-6zR8ȪE.v7ʓ,:!g$w5r<)DɌ!4qK a!sL5^ vN:cCu.5 XehFwď%!KOʧ8^ jGd4sC\N8>W&',mtԯuB "UYԃWSŊWj$;CmYR6@eVk;%Nu4uShF&(Q'?H_N}3&YVTyjK&lv s84g}}!wx+!OZERϾڵmJ׆ǍZUZDnú&f[$^>{c1ѯsFj+Wq[L-\n)\[kug҂GmMQG&^s520%E;˝(N* yZ^Z-RƓ +KbdHUF1Guj֗yTI^ sYo%Am,6ke4@aŨoVMuĨԶeK67s["c|UZEt1tAoזpJtpE^";Dj+Q-fXAQ5gH$G*8:.[.!&Ud:m=SKdip #$ёcqTSy9exk,z-m}kekd30m8ވF5zyF,D9U]hҐ!b7hZkQe-ֈ2kT䯯0D^<ڌsUvp[$Yd3_^̽ 7kՒe_%kd^ZVȐkbR|PgO=sj׫_\4M^F>f bGUkd}<̓cֶU 8\#-eTsKX5JO#Å_Mݚ[{Ӛ~&L(b}֝c=yMaaZKQD89tRZ2^pdJn^ךV ,gυ2a_^\,ΘW-ho I(#V]AX8jz+%J~㢪T$l CHmmIilKHcCpU\!JlHEA{[Nƪ,uOFQ֑otX.7PxpSW\bZXI D1 b˹_\ۏɲO}?R)jݯkǁM۩[޿kQV8{3BI i:}lj<'?\&="~wd8ھw#AG*E,5*ʹG2 HqL]Ϛ9_ycmh:]gj,9(U #‹ D3ؿ`}"qkh+d%jj I:T" RN$#9kc,TQ*j/8MZyM'6]hm75nA* ϖ/OE9gH"(9+2 =#ٶjmNljɴֲ 4S(IE"UVmyWge[ڂu\TR$r5Hsj/ .U 1o'Gbq~4Š; a7]#bK46ȋ*/rDc9p'y1O;>bOq$"}C Ƴ*"´a80c)<3H͍E'>L'aZeGhXUG 4p4 ,D`TF a\nɶΥ RĬ9`^T!8DX# z$0HTAkoF}Z)C+,bApĨrqq\aSGkR{+X=LZXvjTr BT,_mxBp-X֞I I~d)"FB:)ij9 U?fުd6jY՞V7%4v ,p D`|xHyMcެN$r~rToMC2MА4^X#Fyoه#ēu*p5.e;;i2g% Ob㐏t%XOw-#HutjۛzP%0A&tb W|SNCǹw_YWLWHsX΁xA.Do詘{)jhܾlKxYcl7?'q\yk}Z6SgůӭZdq*K6{'h1XSG"/){&ɳI}!څi5^R]w4 e%aJzz*5Uy8Wj#-/}uKhd>÷C)cls'Z0"++_6;87T)*wM[IʟQS~i#Xq_lW c w^S<#vbUu*z2̍*u!a "2kbOeW ?r/*2h3BY7wl6qckd[rxՂG#%'5j[ŝW__Lwn<Ұ%ΧR{~PIlhlY `i'aZ+XDS><|mC–Ĺ|~-ގeRgju.C/Or1[(ٌ! ֢SoxoOz͆sicCiB!FX.,Qۆ)TDG jz.]^ '$5< nK/^]j:}tupl``%ɏ#5D__NQ1xz5[b1%KKzِo؟$GB'pBGsQ+WMazkdU&׮K;_AfӭCl[WB|gUTTDDDL˗WUmr,F\Ml'=d+V͕gCj ek%Lv+S+!|y_kʉ锬-ov~++ j56DzY-BuhǑ5#^sv>;zE93Zvm*ΗV[\ "$t)UQQȼDҦK77߁uMhW;k:oFifxᤑcaU8gk5>#IY A:-]XXiͯg X" |ҁ9Dw9Ԗ]ٺvsUKt-N mH68bHmpqr.cl+W￸ի;z:n69l.Q5i`- mu,u Aw)gnRp LK ɤ\_g3 =„7*\rr=S;+}mq94'8!uOjk't("y+-5xQ*yRX|izxrtȱ䫾4t~A]5[CDz7iF}) i"U$11Õ䞩gun׫jQrĎyUU~Z5h#'_EiŅ ;)n|ăR)UqUNr.yp.k"Kuq]}j/Xk@'Yl F9rrVSI,k+^]Jdew3&j#Myjpcp8jrY1n^Z3Zot̶{D^_*evU5RV~9jmaYǑZw%|jY)C/5OE&[i ܲ0Z!4w=+q.pܜiV9? \r|-^۷j(;E +` A'4̎)D>kU?^R,IYeԴƹJrehFc|cH{Lyc3#_e;^75]R#T:TWVKI%|s< ,P^ӚCUN|sFaj=S&^٦wvXtv)i##%(s{8N9 ziUui5˩ިYuH1My|1juL28$".etnu?ƧwMǶtb|yk6UrC \ѺBn9>J%F*eUxv\[_Z>ҜIUQ͗k/©{|HjBzɫ)[{uDDY_ȡ |_>bWZb\dZ&47SEuKD}MZx{ؐX `GΒ1 p\&kuk;Zʼ[fPu%cUу&޼3yrk )Z#>Uc$V !!9fF23Ȟ?p֝bx9]XJs/%s6=]뒇ё݋jkEǶ&51CS&tb⣏VWF*#xwl? X<5þlE$<8Ϗ**+9gsrq1wmoRe VJ e#(ЧE "A3zK| o+"u[f$v:Fe\2grDYs!FxȈ\Qo:E_r_i4 ~ӕ66D)(!GZXg|VS2cβ%z%N2{lNn_. rٔR,g4 C)U^V򊉛Me~WK}HCBvrH dO+~?}檣UY7nq6|ѷqUAܻ.X+]5[8CTI"kQr1riƓXq]No%=n۸ӿԕsI4Ӣk30veI'aF{oj~s)Uwvl!{\{U.`Ib~q3%d@ ٨Q<`ED9R n*=3ƫ_ UQQ|jq|#Ry^^&We$6)[H/WhBN5{`X CȔɎ5"{W6'Q]K儥!F(K$H7h5sQ<]rdә Ѷ f%Eخ@ߏatVTu5խb1]֫wTZ 'm)e3C!BPV}Wr)*8VH۰zh5em ")#aX#|wokUW+M κ*̕5D;+B.Kܗ2ǬvX)*)!FcsƢ/ ,ۯFjQd2־vM>ڟZMO 7|e! 6u_62"==^ⵦjF9_0WӒD/{:Vՙ?YVYGS=2➵lǒdp,a\"ܯ|>ثzO^=k9u4S6>=vh bsc#Y͍!" ͭ_^yO'qnn||~'Lxr,wڥ-< ?M֧~"* 2T&E;#WʂF=^E{)v_%G1^j05x=:3aHlHH|P}$烼ˏ5jZy+K-|~ҿVl3؊v,*$2Q牬3#lw" z5Q9=r+]W}ҍ4s|*lmQeu4Eq90@Q*6Ec} #Tg>k"'2Ն=\M*hW[؞j:Z%a2;i젞8(uV$V o+j/M^ws\xL?'m<8=QiնR%Mk,k)d@0M,! r xQZ'9F;9keׁ;UZSRNڏ96LafH 2xLR;Ąq\UxYúma)zվHGM욐C%ssy@3\r?ѩyV¶M95dIC. 3d8 xAR5TjXS/[> K\([_nһ+^mA H+cz1ڍ4'Yލ{[E2uͬ-ɓj:M "kUs܌k**"zs9z|呮ҕvVo"Mi9HTø˰ҭ9~G6S6l+*t7(Z:R >|&,!Y/UW*R#wͶH7jju4GZ:`cL{ kUZEw(ֵxc V%zѹ9&kLVW ,PAc9Z Cz)q5*wD0rե̹˺n5H5OiF9,B DX!߃\UW tuf+]]zƠOhk' .48^ʹYAXX*1~HGB/5dn'ko"Uɒ'FAJɽ\AV鑙V]Q`"1|"J2C}[۷/O&LN]뛫IYQa Dlh^ƍp^O[Qy93Ş=_3O{2sh]gTQK(kK)$ɖZy?s \[$Җ⑵V]'[ jͶ嚶, iErA!ƝIEUD6w=_{|`k7}|B讳ڮ͸MQaf,bȒ02AT31FN9E'ɛۯW-nJ1b9=ԝk40$_@` x,qCUE+L[i&k4ZТE 뷤e!UNӚ!F\;D l)bXG?0X9$WN\1*pފ(Կ~KZg`BSIlfZrkSU_l\L$2 /HqW]>"yUWqU'$.#}n?ZjKNp\@ 2|VZ_/+S1w ,\uۑݱ3vWHWSji&]Am5bIgjPFױ/ʞ/Oj1gBDHv A "v2W(Ė6(y2(?n3ѥ jKRKgp:r^aW̓4T\81YcYw.SsqDz%[ѿ_O콇gO`l(hGZ2c|O__eP-GJ6Ka-`c 2/7O,RW&kw1eƬAdQe>!!K8B9{TUW"qljI ^J~պTY~dƑ.T' -%7 !kMJ⢽дӏ?-+ưXSrZQZSU9l+%wZ#Jco-q*ɷ DHp94hɱ0i"b|5|}rz7uݦ.۸/iӹnM+ b\a-g ǏwqFDpU*/?ӓzҳq]s_,P`ge?;ͫ㑵gm՗:dm%|m2M?e#]ZZ"SgΧh(y*+Zj$:'Ь,Tv7KFO9=XW"|6"<מ9EՏ5ZTʴ妆lf/j6n%k>c;tSf8=O`^xo ""26:bv*nS4uw{ƭdw͒*ףV:F G(5aaz0' %V/ϟ*^Ţ^i"! <7Z.]lˉ+SՋ"oziVmO"8ӪX2 ' /9\ʝz5= ֭mSS+.lh%BA_b"+<O&/:#&Vt8+nuJ|N`jaðY<ضD`U:*#q~/T^Q}.Ls4̖reǒ078ѯοSuY \ +1S.{C)7yp?69Bed>ǥzu,T.B3|=?da*YƱ7s'l~nDm O㤘 #D&@{Qȭr' KjTI6I&X댺Hu|? ]t5, (7 cՈi8}| }qvn:if6")(ؠMqH99L;m\+4W0V۩KE3]3"iAubp,Ome}ZcAj5OחQnDeLqZik"VfR=ZW7Ⱥ͓aCQȱ0@$PT Z)z;c1N'/l+JD?`v]۩5f."VIlI s i{U/n;}ܺ:4)2]K)%z[U\2afE٬ъ[9c45=U2W>nٹx/xKZɍdRl\쐛X<լn\|y_2G3qFNWTfwZ\rf]V r,ޭofHu:ɱ㬐BiH`|An_6qۚNenu^^>&[UV/TEwzss\ ջ faBSp6Dfp5"Hb5UFqª"崋V/Y;bN { Ok``-Wk 5:酞HEF5sX%k>'E{T6=P}",8}6AUUFz&v-hRRitMV}SsDrS<%d,HbE&9#^N}3JJp ;ӡ>4I46SetB{2z5/njj gS-Tڿ)˱+*-[9tCUYɎ3l=UhS'nLigxt6c^ώV-uZnmF0c>J*Kّ7O9xr٭ҕ&ykL׃Fb϶`oN3bc@3OZ#UjD1S9ȒPe::}5[aOkA" KXI;p9PoFrLݳ2T9#l8u{c[?"?Z&k? {Ct(vzb8,zmW3ʦrQzhzq#t`'k&ɡ$5[.};:FCf|F+ޖMĜ䎆 7ݠGqh?:y b+JQZ'>nGRƲ'y)[`\YSu0)sx,蔖}L ä[(3 IsQ21c^x{FV5jDTe}ׯo 7Q@dRHxQ(r*o쨉鐵+dPvk}'~sMfz.k6İgQa*Qq b+Q\EnU9ľ=`;[,vS ¶땗 0guRi@/Uil%ȎݦI{s<= "ZsICg8gQ{Q9ZUҵxxmZk wE)V iSdڦز/Z4Ԏ1;9'J5V8L2RDwg,r=S¦fYs9DyK?bkeBHbDWْRlj L!YmǢro(=ܫ}NNnhڎMGNSԧV0[0wřVY*Xx$hRH$yC/+UjrjpuW:<?Lp&R~kbT{_e8e@I ali!N蠐ָ>+戜ީie1>\8\L:eL)pB_=O.RֵW*zi|q>5kY{Z,굃L{;=PV3VC#CxX;& |w:QSϤێ7[cVi*[3`O=kh[V/d 'J{,FOy19TXwoua’Tu~d~e-ft%l&1wHҾ!%1Bs}"2f_(7*76UPޥ~'eע 9Y=IcUyU*e{ZRضzlȏW< 8;3bA`Calb$v"E0Zk+_^۷j*;3>Jbnrvm|Ze+7jU +%jb2_/( pQ|>. ǚ֬s˷wޒ fVD鬝[d`Z٧- + Z6y9F9ֻ_˪ZRSr*,:|EhU@t:+-T2y}/)V}WkƖo5-UN.m=cWaa[M^mK=;T6y)Z5xDD ϢUlk\hsOTg.FH)~[nѨQ`pWW͗Qqk_4pG/}US{V5!'\,ݒ`h~tZԷ{)\Iu葢B#ViQq´+ʢ/+x칷~d̓Yc?Չg7+ "99ȍ\d8]b4EN/lxž\x| JUȪ߂6?^[F[I[:zݨdPUU$ȫ`ɭC4UG5N9a%s[nKtmWVO6bD\QDH6Qirk$ޚS`h9Ҁ/_b)-:Y9YQ;GupSkln} `dE DiYWÅZ몎= -"5ԏ2֍A8tRb= d41cQWOTʹWqw8ڭeڥӤ۸.jZ[e%=ڮn<͘B&"z hS=#w^T(Ê\{+;.雔=]͉ !Dl(1Fy<4UU(w݋m`i}O\/j@'_*dU HaCFUs{FVQU]~E L.Ŭ '胲D&x|,X~[DDT_LʾzN".ݿ3Q.O7|SMܓSHlAԮb2;ľ~jF;oV_4X_bR>>&QuKf"d;(aILL ÑŮHjUœ&+|xԈa*)Y&&Ų[l6WIt>,=,Z/r/nn"hƭ fwŔoes?"ď O+FQȫCRKZ%dz"=]_:Ibqo78' 2XYL,ngjMq}j81(&Fجڊhr+:V PW V/WA>=2XOJR^:W%7΍|4'̲f}غsdGe~h5찛2‚ب1=.N9UqkU^w&T̯fO7H(זk뮦Wd㌀ djkJ8c)TSw hVywK?_0yRI7FӸۊY6(T$ʌ0,aGRأODSmvꖅgnRbcpԱ#uZmh/gMx7v6U̝؍4PC<HT^UyL.ֲFJcKME߲$ aēdaa*al8_.$NJgs"ENyKr}VxKlSZ7YN/$,9Hi@0qSz.y-wZ9M* ]]PON,(kcmqߓ9^UgL,Ͷ'ֵ~ܔ67[pW[.$c9>,$|D^UUU'Çjt% 9>GzU":XkOa2{]) /F*7aUq{yr{ڔU-<9*5u}mfDZ5<+ AKe[+4wEg}1'"Fr=s,Ȅ4Z1ћujMu`MkO,Y`UbQV+E%u~ĨE606$Xv 4#fG-cCDr据Qx+uuuݧRI,z²aTC@BWQ}  F3 h?Q{eGk#Vix ~_Oӂ3 8#9##Q۹٥4^dՔlv Ql/5C]t9UtRSR6dp*/zޕ|,E^׆Y-&4IoFI$Eb#\sz~*w.hV}VKݴǶD f'dV $$YWa{4o+fn[vVz8]֤^>n=>z ZҎuvP$ũ5{`I|)-Gkh򜫗b]UZvSPW -՛{]'Zʁu[&i#kގW~.USmTŹ9)=Q׭ˍG2RV,F DjX{\ɓ#,kVdw Vְ՗G]44xcJȝ̕(j+<LNәZɞ[ KjW=l nz+P(+<Oqs啵iUYk;3Xe$}tM)Xr@ F)ytW4lO¯u,8$e4q4͙OKd ~r$YmTnحHyzyz_L]J_{2%7]JWi%Q; %G0$H+a}*pw}>pJ*mWi CB7FdXoWY5J,cK0frjp ?tqY.GbR.+J32*\r(x.utvZNT]eV^_u`?u@evk{2 AJw>mc˕[bKqڽZs5[/id km]dʋoZWDDuzp׹Q},-ˮjzI;ldzy _]\HE%G$ǜjWyzrT2r634Q(}"1\!x'qYVu|I;L{-uSF| R%Jl>Ht#y5?9M;~޹m^㏄h:"X]]-<'W_r,)8p0a#" N((pڎrWǏSM=%=tMhokTP6+A:aq-V(c1SpbV9c98jDMɤOIRWѬk-;w.z/|L5/&ё438lgi5==9+%+G+v<^m%x'%Sw ,_檦A᧧FM-u,~n5 f83+#D_ G 2cFEDE^=28\y=U[VeIvJQXi[- @ IGSO{3J]JwJʍC_lGVKC**p&̖R 1*ypg\>â.$)egiz@Dmn"K05ak9 xmsT_^sE>OᅥϋJVXWv$[U 68Ȱ}bQv@f#k\+{6k, J&c{λc{%Wm5Lgƈ<}8ty3cw &klu_#_rfVkPJCaH8(Y3Ub=8U_TrWtyd5ax${` k@.4D|2G?$s T^"()ۓN9yr,U㉀זoHO٦NH+M?sO/iW"YNh{& κOz{LD ЬL&F#XB"9Uzh▲GCs'[\jK`s"İbMQL#?ՊT{nqJM57ZֳVƪ%SĿ-6lbpcWB9HFу=cQzJj|'V(%y+kYhftf"lUV{* j@%؅"dkWi?ѯE=D1#L$j6{栽{$.X#q?xH2\ k3Gm$EPǽz~J[>fبr$G;íyo@$Lv̷;ZƱe<)p0qj^IVUzcY{`(Bѐ q4pG(ռjw&-ͼ?^xiu812Wj쨅U$Vv{*}&EGG@i4녙OA q\ nlW֮_}B1޵4m]'gGѺsy4Sw*X]AA)#[ [e'_ 9Y'?xG&=DŽ|9ʲ64;f=[>@U]ҷ<cJxHn㿭ZcM (8e2)o .u)0~VG%-ncT\0u<@MxT׉i4ᅲU'=8zuOݭ`wDpp{t!:w7g3430d<`.`y+xp(ݐaT~u:tf( =~`t#C(JqWVӴ;'@'8{\~ȶޤmXGy]5dѴL*=]/@n%bH}Y&08ijM(b1o/\<:둎;Wh*ӼAs-Gq F$x."vV4hhc$gC@qjzi[1.!Uڽs-^]ˠ?F4릸ӬnX¶=͕粏j,ly5@dvcrD>-?/cdmg[9Vʣi_z=7dG5ږܳ$ [(#B;p'Qgٵ K/p;;JѶs3F\ո[ԏ:hQFWsp\w?9>O-ks*S9h@Xd䴽y %ޝrzF.>Ն\gOcxOf@um吱?c[jvqi2:#sºv>IPa&|>er07t)H!7%%:"I$ęh~+:,}j"kr\|Tv4ln/#fҵ3[6{ ȌyW:smx#%S/rH.ڽ<9b ӭ<=c\uCRV 1ݛ۸y8eF ԚI}gtk)\g yc([7L.Xv7soَ::*_Hmu/""Y8Mpcp9[=t^Xif+8u'sq ? tNgԵkZ9 i)n-3F 4 'GSXTY,KEsή?SC^iЉ=K7'P2F=~jxSB$tӡQN ?{ Ě梾؋뛐2-"=[VzlVVQ1&'lRQ 08UQ\qj[þ [>$7 uKu]L{Z,Er?OR>YAciK(DD j|0)H084R ZL{G;hԴ V:41?;HVߧ޷>{ohJYc;6A `J[G<{WlW'i귺$g2q+{8WB=hut*}J"5{cPp ^{EaHቤaL頊6TWF* !x"I-&Ik{y^O&;€8Ě%:XH=(Ӝa[> Kk[qmHzN/- wˁhw`8p8"|7tnzmRiKsp&06(=&6zŵ/[=v'.F4ﵻ /;8P:J4 HWoS裹x[GHkέxwNGS裥\΃b\y1.L翰]JYDžtYS2SV]9`#7ĥ]U n/i-=e,zPZit66Q,PDUGA-!H 4.)(ڌR4()&dY#qVDZ["Zrz==ZVqk2ʄuA#u{ _Hqfc :~(\@'y& 7oM"4 ~[Q>7]qqhQF+h4/7w !1]hh N QEQE4aRpOUڸ)qZ\vڔ n29hC{uK6-8;"Q@>9ui^"|,H7 nsrA(PEPEPEPEPIEhQ@ EPEPEPEPEPEPEP AppleMark C  !"$"$C"?!1A"Qaq#23BR$b%C4rD ?\AAAAAAAA raB91KY93$7stGH ĤcBs3 q(I۝I$>T=͔ p{@8$2i$(̕gA8  !X#VctY=̷Ir}SWSh\sXh6:H dF|mr@F5h d,{ԽnܭOq. :PNsqX_]ksQKm aO6PzZ֛jfࡱ{њH"vR?psƣ8bʼ%$**g$',>9U=J8rH;;!89%8NsC' #,1$`0*P҅`r;c4ax%$<PRBx  ɀ Q]qBS H>wD@sJfZp+k,sT>*PB0 @Nq 2|Ks(;g49Y)Ǜ8 @~cF|΅a$ %C= **8'$'鈍i!*$ÁH֜R3 AAc!\zXwIi #~ 퍱 .MNymaҬlBp(uKqdo&vsDvJV| i`'x tͪ*r5x.흏E5/X>;9+օ.f\x.eBӂ=bt9EMl $IBՁ|HbޢA 9W6/Y-;yЫHκ}Mӝ>߶P~p@ a:l92 g;bwI#·0ĵ9'hs{µ pz=m8sNc!}_QT`I\Lio<) 3O%y v‘}U$&~ۯJ9& >7!D {č`޷tƙDy ":)j PPQu'ei#V 5v.{]E̥T*P |IkGPZu&hNOs`ߤ_@6I?8 :f*Wݧn 3ܣCHJϿ7 RveIm-@$Fw@5JIQH^oX/^vᙕn+&q%OO/#mgsS NRt(X 2HzfԽff[) *R `p`/>^wQ)@id9LRMLѸ'%_}c=dN R:A=GyT SII,&d|`C2h-))?k5/K}XARB$D`$#o io$J=jrN238!@ hsx#q q2|p*h@27 h"qȀo׼d\RYVmqU1Z! X^ԲN "m9±1u7v(RD*QZqX$g(&ZU&Z p@yIqF}` x;.5/hS&e+8“VRwǼU7D).ۖbM!29}+sj[Q,ZW+U@̜q0RO8(N4)qJr=A@;tǧ<ړOT.Ĝӌ2u(-XPΣ\vRM,*(H# O<!R+0X²W*vg]rXLĠPj5Pҷpt6'YEmp9Ӯ`DxZj$B4߄RC ^y*' kRTeBco7w>B0>gP\A{46ï(W]Z(HR җY*-GZu%H_o2,澭V:}ou>O j M?0B$) 죐xh/*8U7+L% )N]u,eVLl!M/8`|#o'.JGV.Zq™i&KA#ʕ ctOk QMN<" '3w9 #EsR-P>S#p{@nH*`@lT!?g|!$dIL?>}Ǽbx8m ReF6pgu'`sI7ߴ;_ca܈.YV}7T_WmtƄ[mE&S%+nI±z@Yw5EiUkY:l aT7HtPp8N'oTn[=Uz]Q[2ȧ!Hsii H`K-%NO!SZ7WYveN}$q&}D*|b="nZ &=MS]N6a@%;hƵFS(#{iTTN]vHW Dnϐΐ;r"ұ/+~A74+i}дҡlg'TUAܵAwLjsK&^:0FOqk+OQrV6k$aҿԕgpN}x 6M]cSk-;/M(!XKAvCxZ׭Mtͪ}d>wsӎw=q9̦ny)T8xӥbNY-JFnv^@7iPHlCV N#B[G "_-0&iG?h-UAXfqJ+dNGH [m8 RPְv#cD6@$$m-hX\̲$) =.Ȓ38bn{~ZU>4rqFI9vңO8r>]oC !p9:U9'0-C9Q\Z{A%IJpKmp]Fꍱe PL@qe91XToJ ݡg42@Hh򦒼31toX]fzPban֤J̓P'ju)DPh)q uIc-B١tSml:Pi^iI#"DcnuIB{B i@'gpS. Hv=5IʆF 𣱌qjSohx}lca%$rG0IÏIJ<}suҒe+MK*b@" <ٵΰZ! !)MCMR5$ G#sO}gO^`iLPSC+dcx%`#G}<3Ɲ@ڟH*4|sZ4?>Ѷz_O,<IP oϴA> $vj%SdOnKBJ>SfL&$;i3,-lo\vu QP$81_ElU_=B |Eu/ KzARTIMY 8NcW=rvu76ӔY a)v)IYW=;:WkSVHIqV'f[<(4F\n?Hߤ"='17gnKoR-S$b+\2ԎUIo(j[6 ˬ%)Wn# 2kt{eJ4jjUY- l*#8ei=6 촁N>ѳWӹڗ() k-#uF E]+)M.~jeѪFbjYdcJTImۑr9u ;m&f k9 d\"t;+1jon WWkVԬ$$\fa%A)mNvtVIymVCJIқ{jo'@pe)'=}0Sy8[}yۿ1ʄSsE%E^oLN2L NLG'ۙ[) ͟3dbIX$9 6 GاI@rx'NB q)fҩRq)ă qWgb6y%↊nJ%޷$$㍲xD)'p3{v;l4O[bC㺰|x7STs}JFafWZ?c3ltnY>*7-)S- ϙĝš%D,1xWd9T_BSY,;G0nc 7KnO pdyUFdteۿkڎP? un}K WR/'5 N^֨8GHfil+MG,9)u=UK6.CH%HVAE#مu1J,B~q>vFsK;b#e)Tꬫ %40\FfAoeԻ0ѨHRJ<_H*e9xKTZRJr%$I;SNlWnI۱u!:k2`8xj3)[Nx(?10F#M]RsiK2e;ؓFzuڳdfdʯLp@q`jk~UM7<X8%N5 ghܘ2xHVjN@pUΫLzcH;;5q-43{mX )u Sᗒ}3P76tHΓ/11&\oJI'9)n"jY"?tcR .ĸKONg+g~6F.i ҰF=F\PIJ#X c?FM>)Z[}A/;e!I w6;ш)r@})!I#9'hOM%(˨iVP B@ܓCR:S骥vĻVm*u%Y۝s6ENowJJ)}Bb}*J՜\U6I%Q-'( % R>[S]Wn+$\aq&ԕyw99M*_w$Y2JLHt@*sv@;zf=-YQm 2l}s\:SZT$IKNG.&ֺ]RȩYy:IK'^'?wNagRM/JY{RnZUrIwAcm8$r6GWT(IDòɛJNUd `,52I&t梿A'>.c3DCTf&Xd`iqdmsu;S+inrA N$v#BS_e ʖ R Gd^ZvU`%:LN,RdS,d4厧tj4i),R06?mƽwQr6W%:~\J H8H2]nLMR:{ęm$+'8eٝoLRtB4,:xC=m9.]RCe)N4s˜%WEDT?,va"I)Cp)9$m?X}GV'giLjUSS4}܂G8ؕX]RMJ0_wCh7SkM:6-}:kzr^v2jQaL7&RcBҐJ8،$d*}E]$%)dK,C()i'׶{c/+FڧԑTHMm.#6%W @s bAվݿXd%mਧ84m)r S>#8q$qfp@qa3i-Q*᥼ef*ӝRF#@VoxvNmhJeiJH@1 lNwǬ.@Vsh o6~$o~'j͠N~rOR,ՙvGpR2I{pq)b|F;K U4RҁSV8I;S7X<-99F2fFmq!yj5 n:zޗH~ZmM.$c?]X+͸u KL'+L:^Vu,9ґr][iLO;NJ\#bGd1!ԛޓc[nժx”A˓/@$ͩU]~j~Gܰ-AK-H0}g-iuex ~BXHIVvvNs;vպvtߧ˖cjuHe9e ]_g>[bME^tڀ d"*Cte)JG?SeJz%U2'JJK)JI`bZLh=[W m8A!q:$_J(*Dž*YP+$k V@Ϧ;@wV15V.,ZB^ {/'89]ʲۉǪ p'q>m-XI'71B0̋bid̢uN#QvEd2g$ I\.wpJ6̲K2,2ޒq$ <kFmR,H.$f̴(3H$<)6lrFHb2K(`% Q7US,tt)MMwu\jFRp7Lq Y~|RO .pupt;of fꥳ2I)П恍F"ߝRd$i򒦿6!>PB3[mvN,5:Q[bf] N`rIL6Ͱ[^v~Q%rfj8AsrTAYTq0v# l2I=Hzc:W-k/=UeeI|oTp5E)MtI73^y jd>F]Y9TekjOԊl,HJ)aѤ'}cViU5_?][I#섃ʏh>uVà73ʂ^"ˎv :AƯD:|J1Y}vV'\AG $ NqrE._)MMAJ1'F/&S N(@G|0)3@۸x ra0 cq ]'X"Ęǯ8I3F Qd@pm^ :Lq<nrv5$iFK/ =y'>vM !U]8)'mIy)Ȍ +9 Z^M*rȗ RL0Z\mi JrJrn;b5''Ԫm_Acta'q6tȩ,͊k/,?,Z9 툏gM4[@*Є1 q*H (09􆁎 0hSa`!؂I(Qc'by=UPҒTXw*@w0*6%IN74= f1u0>)$(QJ.Jz]xamCw7n\+~4ClܲNpGep'!9H 9>}H>f2(l ʻ$"yhWEQUha3-y?~a/Q\ ^RɢyRһsD|0Ypa cb1=$wH7}anj+J\bzeB^(U0J'"z-dP;IxZO`03)65-E4rbd07Zܓ;q '@.ybsNH=1ezw۴f0!`@ABhUv:ph;nG0c?Hkh d@5#'Y8?X]QQ>䃃 D*l86hL{o V΢7JSG)Ի|Pͪ6R|ҳM쳝v1¤7En:vPO;6$ Y:Pr>V}hôk]nJI$|ܲldx-pZl\ oKu'$s`6}Q8~TtP4$JҪML>BO c)#j0HnnYRˊX8EДV}EӺr^oO૲̻rh夶rUaۄ@=!@,AAAA4/9M@(L=BB @?CA.;P.:CACamera.006>L=BB @?LA.<$LALamp ?????AB4>???B B4?@@???IPT.=0jb IPObIpo.=j[X>A>° B OBDATAT.=1.>0j[?@A^A`sOBA(DATAT.>01.>.=j\?@B5OBAwLDATAT.>1.?0.>0j]?@AQUA"OB@*DATAT.?01.?.>j^`?@@x@ uOBA8DATAT.?1.@0.?0j_8?@bOBDATAT.@01jZX.?j`?@@$@WOB ABDATATjZX1jZ.@0j`OB ?DATATjZ1j[XjZXjaPOB?DATATj[X1jZjaOB?DATAj[*?qvAĀ?A?A?AA@A(@_A@?&qk@@k@@ُkDATAj\*?{7*?*?*?&AwL@AwL@ AwL@?'B`&@@`&@@ؾ`&DATAj]*?xiÀ?A?LA?<@*@@*@$@*@'@*@@@*@X@*DATAj^`*?ab@Br?@Br?N@Br??A m@A8@ `AGm@(ͨAA@@AA@W2XAADATAj_8*? <Հ?<? <?Χ@@?@'Հ@@@XtDATAj`*?p)@Ԁ?@?(@?`AB@AB@OAB@>bPU9@@PU9@APU9DATA8j`*??????DATA8jaP*??????DATA8ja*??????IPTjb .=0IPObIpo.001jbje ?@@OBDATATjb1jc jeOBAʇDATATjc 1jcjbjf@OB $uDATATjc1jd jc jfOBADATATjd 1jdjcjgOB@LTDATATjd1je jd jh OB?ȲDATATje 1jdjhOB @Km:DATApje*? Aʇ?Aʇ?Aʇ?Aʇ@Aʇ@AʇDATApjf@*? $u? $u? $u? $u@ $u@ $uDATApjf*? A?A?A?A@A@ADATApjg*? @LT?@LT?@LT?@LT@@LT@@LTDATApjh *? ?Ȳ??Ȳ??Ȳ??Ȳ@?Ȳ@?ȲDATApjh*?qxV?xV?xV?Z@Km:@@Km:@S@Km:WO(ji`_WOWorldexterieur???===>+d??A@Ap@@b@"?x=LTXhjjjTXCity05.py.001jkPjkjjkjk1DATA0jkP/Applications/BlenderThings/Scripts/City05.pyDATAjkjkjH¸ DATAjkjl@jkjDATAjl@jljkQDATAjljljl@jDATAjljmjl3|%lDATAjmjm`jlj |AudDATAjm`jmjmjXrcntDATAjmjmjm`jDATAjmjn8jmjsoftDATAjn8jnjmj0¸ DATAjnjnjn8jprlgoDATAjnjojnOr-- DATAjojoXjn.@#r-- DATAjoXjojobr-- DATAjojojoXjgrilDATAjojp0jojnichDATAjp0jpxjojH$e 1 DATAjpxjpjp0j#EclaDATAjpjqjpxj$EclaDATAjqjqPjpjH$EclaDATAjqPjqjqEclaDATAjqjqjqPj$QDATAjqjr(jqj$QDATAjr(jrpjqjP$QDATAjrpjrjr(j#QDATAjrjsjrp8QDATAjsjsHjrj DATAjsHjsjsj86r-- DATAjsjsjsHbtBurDATAjsjt jszI QDATAjt jthjsjFREEDATAjthjtjt jDATAjtjtjthj0FREEDATAjtju@jtjx$.jpgDATAju@jujtjrandDATAjujuju@tureDATAjujvjub QDATAjvjv`ju(QHDATAjv`jvjvj r-- DATAjvjvjv`jhr-- DATAjvjw8jvjr-- DATAjw8jwjvj$QDATAjwjwjw8jPQDATAjwjxjw8QDATAjxjxXjwjFREEDATAjxXjxjxjepinDATAjxjxjxXj0DwDATAjxjy0jxjx$hDATAjy0jyxjxjDATAjyxjyjy00rsdnDATAjyjzjyxj DATAjzjzPjyjhlocaDATAjzPjzjzjQHDATAjzjzjzPj$FREEDATAjzj{(jzjPDATAj{(j{pjzbFREEDATAj{pj{j{(j)DATAj{j|j{pjFREEDATAj|j|Hj{j0DATAj|Hj|j|jx$QHDATAj|j|j|HjQHDATAj|j} j|bQHDATAj} j}hj|{ QHDATAj}hj}j} j QHDATAj}j}j}hjhQHDATAj}j~@j}jQHDATAj~@j~j}j$DATAj~j~j~@jP DATAj~jj~zN.DATAjj`j~jAudDATAj`jjjN.DATAjjj`j0N.DATAjj8jjpDATAj8jjj DATAjjj8jDATAjjjj QDATAjjXjjhFREEDATAjXjjjøDATAjjjXjDATAjj0jjX;DATAj0jxjjFREEDATAjxjj0jFREEDATAjjjxj@DATAjjPjjŐDATAjPjjjDATAjjjPj0QDATAjj(jj`QDATAj(jpjjưFREEDATAjpjj(jDATAjjjpjP;DATAjjHjjǸQDATAjHjjjQDATAjjjHj8FREEDATAjj jjȈDATAj jhjjDATAjhjj j(rDATAjjjhjXzDATAjj@jjɨQDATAj@jjjFREEDATAjjj@jH;DATAjjjjʰDATAjj`jjDATAj`jjj0QDATAjjj`jˀFREEDATAjj8jjDATAj8jjj DATAjjj8jPDATAjjjj̠DATAjjXjjQDATAjXjjj@;FREEDATAjjjXjͨDATAjj0jjDATAj0jxjj(>DATAjxjj0jxQDATAjjjxjFREEDATAjjPjjDATAjPjjjHDATAjjjPk6HQDATAjj(jjψ'DATAj(jpjjDATAjpjj(j QDATAjjjpjpFREEDATAjjHjjа-DATAjHjjj!DATAjjjHj`"DATAjj jjѰQDATAj jhjj"DATAjhjj jPDATAjjjhjҀDATAjj@jj ?DATAj@jjj!DATAjjj@j@ DATAjjjjӀDATAjj`jjӰ?DATAj`jjj?DATAjjj`jHDATAjj8jjxteriDATAj8jjjDATAjjj8jDATAjjjjP?DATAjjXjjՀ?DATAjXjjj"ateDATAjjjXj"=DATAjj0jjh'!DATAj0jxjj=DATAjxjj0jDATAjjjxj@DATAjjPjjא.DATAjPjjjDATAjjjPj08DATAjj(jjؘDATAj(jpjj"DATAjpjj(j(DATAjjjpjp"DATAjjHjj(DATAjHjjj5{DATAjjjHj`=DATAjj jjڠ0DATAj jhjjIDATAjhjj jDATAjjjhjHDATAjj@jjۈ!DATAj@jjjIDATAjjj@j DATAjjjjhDATAjj`jjܰ&QDATAj`jjDATAjjj` DATAjj8jjDATAj8jjjH DATAjjj8j݈WLDATAjjjjWDATAjXjjjH+DATAjjjXjވDATAjj0jb DATAj0jxjj޸?yDATAjxjj0j?332DATAjjjxjHDATAjjPjjߐDATAjPjjj+DATAjjjPjDATAjj(jjXDATAj(jpjjDATAjpjj(j11DATAjjjpjDATAjjHjuk =B;DATAjHjjjH-QDATAjjjHj12DATAjj jj#DATAj jhjj( DATAjhjj jxDATAjjjhj-13DATAjj@jj-DATAj@jjjh?DATAjjj@jDATAjjjj DATAjj`jj(14DATAj`jjjxQDATAjjj`jDATA11812>XervaDATA1811( QDATA11182>MQDATA1112?MU@lDATA11X12?MDATA1X112@FREEDATA111X2@8ler DATA11012@"QDATA101x12@)UE,DATA1x1102A0DATA111x2A"UG,DATA11P12A#QDATA1P112B /FREEDATA111P2BQDATA11(12BientDATA1(1p12C DATA1p1¸1(2CpQDATA1¸11p2CDATA11H1¸2DDATA1H1Ð12DXDATA1Ð11HxH QDATA11 1Ð2DH- X2DATA1 1h12EDATA1h1İ1 2E0QDATA1İ11h2E!gTG,DATA11@1İ2E&=0:DATA1@1ň12F(/DATA1ň11@2FUUDATA111ň2F DATA11`12G( s.apDATA1`1ƨ12Gx e poDATA1ƨ11`2G DATA1181ƨ2Hr poDATA181ǀ12H`QDATA1ǀ1182H la DATA111ǀ2HDATA11X12I !DATA1X1Ƞ12Ip% surDATA1Ƞ11X2I/DATA1101Ƞ2J(U_DATA101x12Jx[n0]DATA1x1102J DATA111x2K DATA11P12Kh DATA1P1ʘ12KUd\DATA1ʘ11P2LQDATA11(1ʘ2L0 DATA1(1p12L"DATA1p1˸1(2L3QDATA1˸11p2M0UhDATA11H1˸2M" DATA1H1̐12M#QDATA1̐11H2N /)DATA11 1̐2NFREEDATA1 1h12NDATA1h1Ͱ1 2O FREEDATA1Ͱ11h2Op FREEDATA11@1Ͱ2ODATA1@1Έ12PFREEDATA1Έ11@2PXSFREEDATA111Έ2Pn_loDATA11`12QFREEDATA1`1Ϩ12QX"QDATA1Ϩ11`2Q3FREEDATA1181Ϩ2RFREEDATA181Ѐ12RX"DATA1Ѐ1182R# DATA111Ѐ2R/ DATA11X12SXFREEDATA1X1Ѡ12SQDATA1Ѡ11X2S FREEDATA1101Ѡ2TH FREEDATA101x12T 1.v.DATA1x1102T DATA111x2U0W DATA11P12UFREEDATA1P1Ә12UYDATA1Ә11P2VpDATA11(1Ә2V"UDATA1(1p12W$ DATA1p1Ը1(2WhFREEDATA1Ը11p2W"FREEDATA11H1Ը2XU|DATA1H1Ր12XX/me.nDATA1Ր11H2XU\DATA11 1Ր2Y():DATA1 1h12YX UDATA1h1ְ1 2Y UDATA1ְ11h2YDATA11@1ְ2ZHFREEDATA1@1׈12Z0")DATA1׈11@2ZDATA111׈2ZFsseuDATA11`12[hQDATA1`1ب12[FREEDATA1ب11`2[TADATA1181ب2\']['EDATA181ـ12\hDATA1ـ1182\sterDATA111ـ2\ZQDATA11X12]pQDATA1X1ڠ12]FREEDATA1ڠ11X2]$DATA1101ڠ2^(DATA101x12^XQDATA1x1102^"evt=DATA111x2^-FREEDATA11P12_PDATA1P1ܘ12_0FREEDATA1ܘ11P2_0UVLDATAch#!BPYDATAj DATA41""" Registrationsinformationen fuer Blender-MenuesDATA1pName: 'PointAlign'DATA1Blender: 235DATA1Group: 'Mesh'ODATA 10Tip: 'Align selected vertices'DATA1"""DATA$1__author__ = "Thomas Buschhardt" DATA82__url__ = ["Script Site,www.buschhardt.de/pointalign"]DATA 2h__version__ = "0.7 20050117"23DATA82__email__ = ["Thomas Buschhardt, thomas:buschhardt*de"]DATA2 __bpydoc__ = """\DATA42`This script implements vertex alignment in Blender.DATA2FDATAwUsage:DATA2PDATAP2 Select the mesh you want to work on, enter Edit Mode and select the verticesDATA82to alignment. Set the 3D-Cursor on a target position. DATA<2Then run this script from the 3d View's Mesh->Scripts menu.DATA2ptDATA<2You can control the alignment on the global X,Y and Z axis.DATA(2To quit the script press 'ESC' or 'Q'.DATA2`inDATAT2Notes: You can undo and redo your steps just like with normal mesh operations inh-DATA xBlender.DATA2"""DATA2@##DATA2p# Hauptmodule einladenDATA2##DATA2import BlenderDATA2(idDATA2X##DATA2# globale VariablenDATA2##DATA2EREIGNIS_KEIN = 1EDATA28EREIGNIS_ZEICHNEN = 2 DATA2EREIGNIS_BEENDEN = 3x DATA2EREIGNIS_EINGABE = 4DATA2EREIGNIS_CURSOR = 5DATA2PEREIGNIS_LOKAL = 6DATA2EREIGNIS_GLOBAL = 7DATA2EREIGNIS_VIEWPORT = 8kDATA2 EREIGNIS_OBJEKT = 9DATA$2 XAENDERE_X = Blender.Draw.Create(0)DATA$2 AENDERE_Y = Blender.Draw.Create(0)DATA$2 AENDERE_Z = Blender.Draw.Create(0)DATA2 HORIGINALWERTE=[]t DATA2 ORIGINALOBJEKT=0hDATA2 ORIGINALINDEX=[]EEDATA 2 XX = Blender.Draw.Create("") TDATA 2 XYY = Blender.Draw.Create("")19DATA 2 ZZ = Blender.Draw.Create("")10DATA02 XX.val = str(Blender.Window.GetCursorPos()[0])DATA02 XYY.val = str(Blender.Window.GetCursorPos()[1])DATA02 ZZ.val = str(Blender.Window.GetCursorPos()[2])DATA 2 LOK_X=Blender.Draw.Create(0) DATA 2 hLOK_Y=Blender.Draw.Create(0)EEDATA 2 LOK_Z=Blender.Draw.Create(0)EEDATA 2GLO_X=Blender.Draw.Create(0)DATA 2XGLO_Y=Blender.Draw.Create(0).DATA 2GLO_Z=Blender.Draw.Create(0)EEDATA 2DIR_X = Blender.Draw.Create(0)DATA 2HDIR_Y = Blender.Draw.Create(0)DATA 2DIR_Z = Blender.Draw.Create(0)DATA 2ZIEL = Blender.Draw.Create(0)EDATA 28QUELLE = Blender.Draw.Create(0)DATA$2RICHTUNG = Blender.Draw.Create(0)nDATA2DATA2##DATA28# HilfsfunktionenDATA2x##DATA2DATA 2# Umwandlungsfunktion VektorDATA2(def mulmatvec4x3(a, b):DATA2p # a is vector, b is matrixDATA2 r = [0, 0, 0]DATA82 r[0] = a[0]*b[0][0]+a[1]*b[1][0]+a[2]*b[2][0]+b[3][0]DATA82` r[1] = a[0]*b[0][1]+a[1]*b[1][1]+a[2]*b[2][1]+b[3][1]DATA82 r[2] = a[0]*b[0][2]+a[1]*b[1][2]+a[2]*b[2][2]+b[3][2]DATA  return rDATA20DATA(2`# Originalwerte des Objektes speichernDATA2def original():DATA2 global ORIGINALWERTEDATA2@ global ORIGINALOBJEKTDATA2 global ORIGINALINDEXDATA2 ORIGINALWERTE=[]\DATA2 ORIGINALINDEX=[]DATA02P Ausgangszustand = Blender.Window.EditMode()DATA42 if Ausgangszustand==1:Blender.Window.EditMode(0)DATA,2 Objekt = Blender.Object.GetSelected()[0]DATA2h ORIGINALOBJEKT=ObjektDATA<2 if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-ObjektDATA2 Gitter = Objekt.getData()DATA2` for i in Gitter.verts:DATA<2 if i.sel:ORIGINALWERTE.append([i.co[0],i.co[1],i.co[2]])DATA,2 if i.sel:ORIGINALINDEX.append(i.index)DATA2h ORIGINALINDEX.sort()DATA,2 Blender.Window.EditMode(Ausgangszustand)ADATA2DATA428# Testet ob gespeichertes Objekt noch aktuell istuDATA2def oritest():DATA2 global ORIGINALWERTEDATA2  global ORIGINALOBJEKTDATA2h global ORIGINALINDEX DATA2 anzahlPunkte=0DATA2 indexliste=[]DATA020 Ausgangszustand = Blender.Window.EditMode()RDATA42 if Ausgangszustand==1:Blender.Window.EditMode(0),DATA,2 Objekt = Blender.Object.GetSelected()[0]EDATA<2H if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-ObjektDATA2 Gitter = Objekt.getData()DATA2 for i in Gitter.verts:DATA2@ if i.sel:DATA 2 indexliste.append(i.index)DATA2 anzahlPunkte+=1DATA2 indexliste.sort()DATAh2P if len(ORIGINALWERTE)!=anzahlPunkte or indexliste!=ORIGINALINDEX or ORIGINALOBJEKT!=Objekt:original()DATA,2 Blender.Window.EditMode(Ausgangszustand)ADATA2 @DATA2 pDATA 2 # Loeschen aller AenderungenEEDATA2 def undochange(Gitter):DATA2!8 Zaehler = 0KDATA2!x for i in Gitter.verts:DATA c# if i.sel:DATA(2! i.co[0]=ORIGINALWERTE[Zaehler][0]lDATA(2" i.co[1]=ORIGINALWERTE[Zaehler][1] DATA(2"p i.co[2]=ORIGINALWERTE[Zaehler][2]EEDATA2" Zaehler+=1DATA2# Gitter.update()DATA2#HDATA2#x# sucht die ObjektgrenzenEDATA 2#def limitfind(Objekt,lokal=1):DATA02$ if lokal==1:hilf=Objekt.getData().verts[0].coDATAL2$p else:hilf=mulmatvec4x3(Objekt.getData().verts[0].co,Objekt.getMatrix())DATA@2$ grenzen=[hilf[0],hilf[0],hilf[1],hilf[1],hilf[2],hilf[2]] DATA$2%X for i in Objekt.getData().verts:\DATA2% if lokal==1:a=i.coDATA02% else:a=mulmatvec4x3(i.co,Objekt.getMatrix())DATA(2&P if a[0]grenzen[1]:grenzen[1]=a[0]EEDATA(2' if a[1]grenzen[3]:grenzen[3]=a[1]DATA(2' if a[2]grenzen[5]:grenzen[5]=a[2]DATA2(` return grenzenDATA2(DATA2(DATA,2)# Angleichen des Objektes an den 3D-View8DATA2)Xdef alignview():j\DATA(2) for i in Blender.Object.GetSelected():DATA82) if i.getType()=="Mesh":#Vorpruefung auf Mesh-ObjektDATA(2*X sm=Blender.Window.GetViewMatrix()EEDATA2* m=Blender.Mathutils.Matrix([sm[0][0],sm[1][0],sm[2][0]],[sm[0][1],sm[1][1],sm[2][1]],[sm[0][2],sm[1][2],sm[2][2]]).toEuler()DATA2+` pi2=180/3.1415926DATA,2+ i.setEuler(m[0]/pi2,m[1]/pi2,m[2]/pi2)DATAb+` returnDATA2, $DATA2,0##DATA2,`# grafische OberflaecheDATA2,##DATA2,def fenster():DATAd2- global EREIGNIS_ZEICHNEN,EREIGNIS_BEENDEN,EREIGNIS_EINGABE,AENDERE_X,AENDERE_Y,AENDERE_Z,XX,YY,ZZDATA`2- global EREIGNIS_LOKAL,EREIGNIS_GLOBAL,GLO_X,GLO_Y,GLO_Z,LOK_X,LOK_Y,LOK_Z,EREIGNIS_VIEWPORTDATAP2.8 global DIR_X,DIR_Y,DIR_Z,EREIGNIS_OBJEKT,EREIGNIS_KEIN,ZIEL,QUELLE,RICHTUNGDATA2.DATA 2. Blender.BGL.glColor3f(1,1,1)DATA$2/8 Blender.BGL.glRasterPos2i(175,120)DATA(2/ Blender.Draw.Text("PointAlign 0.7")ԌDATA$2/ Blender.BGL.glRasterPos2i(175,105)DATA,200 Blender.Draw.Text("by Thomas Buschhardt")DATA20wDATA20###3D CursorDATAh20 AENDERE_X=Blender.Draw.Toggle("X",EREIGNIS_ZEICHNEN,10,50,50,15,AENDERE_X.val,"an X-Achse angleichen")DATAh21 AENDERE_Y=Blender.Draw.Toggle("Y",EREIGNIS_ZEICHNEN,10,30,50,15,AENDERE_Y.val,"an Y-Achse angleichen")DATAh22( AENDERE_Z=Blender.Draw.Toggle("Z",EREIGNIS_ZEICHNEN,10,10,50,15,AENDERE_Z.val,"an Z-Achse angleichen")DATA22DATAL22 XX=Blender.Draw.String("",EREIGNIS_EINGABE,70,50,90,15,XX.val,30,"tool") DATAL23h YY=Blender.Draw.String("",EREIGNIS_EINGABE,70,30,90,15,YY.val,30,"tool") DATAL23 ZZ=Blender.Draw.String("",EREIGNIS_EINGABE,70,10,90,15,ZZ.val,30,"tool") DATA24X##DATAH24 Blender.Draw.PushButton("Refresh",EREIGNIS_CURSOR,70,70,90,15,"tool")DATA25 DATA 250 Blender.BGL.glColor3f(0,0,0)EDATA$25 Blender.BGL.glRasterPos2i(8,87)DATA 25 Blender.Draw.Text("3D-Cursor")DATA026  Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA 26 Blender.BGL.glVertex2i(5,90) DATA 26 Blender.BGL.glVertex2i(5,5)4DATA 27  Blender.BGL.glVertex2i(165,5)DATA 27p Blender.BGL.glVertex2i(165,90)DATA 27 Blender.BGL.glVertex2i(70,90)DATA28 Blender.BGL.glEnd()DATA28X EDATA ###lokaleDATAP28 LOK_X=Blender.Draw.Slider(" X ",EREIGNIS_LOKAL,175,50,90,15,LOK_X.val,-1,1)t DATAP29 LOK_Y=Blender.Draw.Slider(" Y ",EREIGNIS_LOKAL,175,30,90,15,LOK_Y.val,-1,1)0DATAP29 LOK_Z=Blender.Draw.Slider(" Z ",EREIGNIS_LOKAL,175,10,90,15,LOK_Z.val,-1,1)DATA2:ecDATA 2:8 Blender.BGL.glColor3f(1,1,1)EDATA$2: Blender.BGL.glRasterPos2i(175,70)DATA,2: Blender.Draw.Text("-1=min 1=max") DATA 2;0 Blender.BGL.glColor3f(0,0,0) DATA$2; Blender.BGL.glRasterPos2i(172,87)DATA$2; Blender.Draw.Text("local Limits")DATA02<  Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA 2< Blender.BGL.glVertex2i(170,90)DATA 2< Blender.BGL.glVertex2i(170,5)DATA 2=  Blender.BGL.glVertex2i(270,5)DATA 2=p Blender.BGL.glVertex2i(270,90)DATA 2= Blender.BGL.glVertex2i(235,90)DATA2> Blender.BGL.glEnd()DATA2>X"YDATA (###globaleDATAP2> GLO_X=Blender.Draw.Slider(" X ",EREIGNIS_GLOBAL,280,50,90,15,GLO_X.val,-1,1)EDATAP2? GLO_Y=Blender.Draw.Slider(" Y ",EREIGNIS_GLOBAL,280,30,90,15,GLO_Y.val,-1,1)eDATAP2? GLO_Z=Blender.Draw.Slider(" Z ",EREIGNIS_GLOBAL,280,10,90,15,GLO_Z.val,-1,1)DATA2@\DATA 2@8 Blender.BGL.glColor3f(1,1,1) DATA$2@ Blender.BGL.glRasterPos2i(280,70)DATA,2@ Blender.Draw.Text("-1=min 1=max") DATA 2A0 Blender.BGL.glColor3f(0,0,0)DATA$2A Blender.BGL.glRasterPos2i(277,87)DATA$2A Blender.Draw.Text("global Limits")DATA02B  Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA 2B Blender.BGL.glVertex2i(275,90)DATA 2B Blender.BGL.glVertex2i(275,5)DATA 2C  Blender.BGL.glVertex2i(375,5)DATA 2Cp Blender.BGL.glVertex2i(375,90)DATA 2C Blender.BGL.glVertex2i(350,90)DATA2D Blender.BGL.glEnd()DATA2DXPDATA xH###ViewportDATAL2D Blender.Draw.PushButton("Align",EREIGNIS_VIEWPORT,10,105,150,15,"tool")(YDATA2EDATA 2E0 Blender.BGL.glColor3f(0,0,0):DATA$2E Blender.BGL.glRasterPos2i(8,127)DATA(2E Blender.Draw.Text("Align to 3D-view")DATA02F( Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA 2F Blender.BGL.glVertex2i(5,130)DATA 2F Blender.BGL.glVertex2i(5,100)DATA$2G( Blender.BGL.glVertex2i(165,100)DATA$2Gx Blender.BGL.glVertex2i(165,130)YDATA$2G Blender.BGL.glVertex2i(107,130)ZDATA2H Blender.BGL.glEnd()EEDATA2H` DATA2H###ObjektangleichDATA 2H Blender.BGL.glColor3f(0,0,0)DATA$2I  Blender.BGL.glRasterPos2i(8,332)DATA(2Ip Blender.Draw.Text("Align to Object")DATA02I Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA 2J( Blender.BGL.glVertex2i(5,335)DATA 2Jx Blender.BGL.glVertex2i(5,140)DATA$2J Blender.BGL.glVertex2i(210,140)$DATA$2K Blender.BGL.glVertex2i(210,335)0=Գ4DATA>0>x=ԴHDATA>x>>0ԴDATA>?>xԴDATA??P>Դ DATA?P??Ե0#DATA???PԵDATA?@(?ԵDATA@(@p?Զ DATA@p@@(ԶPDATA@A@pԶ DATAAAH@Զ DATAAHAAԷ DATAAAAHԷPDATAAB AԷ DATAB BhAԷDATABhBB ԷDATABBBhԸ DATABC@BԸX#DATAC@CBԸDATACCC@ԸDATACDCԹHDATADD`CԹxDATAD`DDԹ DATADDD`ԺDATADE8DԺ@DATAE8EDԺp DATAEEE8ԺDATAEFEԺ DATAFFXEԻ(DATAFXFFԻXDATAFFFXԻDATAFG0FԻDATAG0GxFԼ0DATAGxGG0Լ`DATAGHGxԼDATAHGԼ$DATA4HP################################################DATA4H# #ttDATA4I# Rusty Knife :Blender mesh knife script #DATA0Ip# ver 2002,6,11 #DATA4I# #gnDATA4J0# kyk: kyk@3dgang.net #DATA4J# #XDATA4J################################################DATAKPDATAK# 8.28 first releaseitDATAK# 8.28 bug fixDATA(L# 2002 6 11 supported multi directionDATAL`20DATALimport BlenderDATALfrom Blender.BGL import *NDATAMfrom Blender.Draw import *DATAM` rDATAMppDATAMNMESH = Blender.NMeshaDATAN20DATAN8CurrentMesh = NoneDATANx iDATAN rDATA Ndebug = 0@DATAOldDATAO@def swap(a,b):DATA O return b,aDATAO rDATAOclass SubVex:DATA$P( def __init__( self, sharevid ):anDATAPx self.left = sharevid[0]DATAP self.right = sharevid[1]DATAQ self.index = -1DATAQH self.subdivided = NoneDATAQ DATAQ def __repr__( self ):DATA@R return "Share("+str( self.left )+","+ str( self.right )+")"0DATARx EDATAR DATAR def share( self):DATA S return self.left, self.rightDATASh DATAS (DATAS def create( self ):DATAT global CurrentMesh,NMESHDATATX if self.index != -1:DATAT return self.indexDATAT DATA(U vl= CurrentMesh.verts[ self.left].coDATA(Up vr= CurrentMesh.verts[ self.right].coDATA$U self.subdivided = NMESH.Vert()DATAVEEDATA8VH self.subdivided.co.x = vl.x + ( vr.x - vl.x ) * 0.5DATA8V self.subdivided.co.y = vl.y + ( vr.y - vl.y ) * 0.5DATA8W self.subdivided.co.z = vl.z + ( vr.z - vl.z ) * 0.5DATAWDATA0W CurrentMesh.verts.append( self.subdivided )EDATA,X self.index = len(CurrentMesh.verts) -1DATAXh return self.indexDATAX EDATAX def move( self, x, y, z ):DATAY  self.create()DATAY` self.subdivided.co.x = xDATAY self.subdivided.co.y = yDATAY self.subdivided.co.z = zDATAZ8DATA Zhmaxshr = 4DATAZDATAZDATA[class SFace:DATA [@ def __init__( self, bface ):`DATA[ self.face = bfaceDATA[ self.vertex_index = []DATA\ DATA\H for v in bface.v:DATA(\ self.vertex_index.append( v.index )DATA\ DATA] self.share_vertices= []DATA]X self.subfunc=[ [None,None],[ self.share1t, self.share1q],[ self.share2t, self.share2q],[self.share3t, self.share3q],[None, self.share4q] ]EEDATA^ DATA ^H def isShared( self, other ):EDATA^ global debug,maxshrDATA^ share_count = 0,DATA_  share_bvertex = []DATA_h DATA _ if debug:DATA@_ print "Share Check: ", self.vertex_index, other.vertex_indexDATA`@ DATA(`p for other_vid in other.vertex_index:DATA,` if self.vertex_index.count( other_vid ):DATAa  share_count += 1DATA(ah share_bvertex.append( other_vid )DATAa DATAa if share_count != 2:DATA b8 return 0DATAbp DATAXb if ( len( self.share_vertices ) > maxshr) or ( len( other.share_vertices ) > maxshr):DATA c( return 0DATAc` DATA(c sub_vertex = SubVex( share_bvertex )DATAc DATA d if debug:DATAdP print sub_vertexDATAd DATA,d self.share_vertices.append( sub_vertex )DATA,e other.share_vertices.append( sub_vertex )DATA ep return 1DATAe EDATAe def numshare( self ):DATA$f  return len( self.share_vertices )DATAfp EDATAf def subdiv( self, mode ):DATA$f global CurrentMesh,maxshr,debugXDATAg8 DATAgh DATA,g num_share = len( self.share_vertices )DATA,g if num_share < 1 or num_share > maxshr:DATA hH returnDATAh DATA(h numv = len( self.vertex_index) - 3DATAi if numv > 1:DATA iH returnDATA,i pfsub = self.subfunc[ num_share ][ numv ]DATAi if not pfsub:DATA0j print "Error: Not Support Type of Subdivide"DATA jx returnDATA j self.cface( pfsub( mode ) )DATAkEEDATAk0 def getid( self, index):DATA0kx s1, s2 = self.share_vertices[ index ].share()DATADk i1, i2 = self.vertex_index.index(s1), self.vertex_index.index(s2)DATAlH if i1 > i2:DATAl i1,i2 = swap(i1,i2)DATA4l if i1 == 0 and i2 == (len(self.vertex_index)-1):DATAm0 i1,i2 = swap(i1,i2)DATAmx DATAm return i1,i2DATAm DATAn def share1t( self, mode ):DATAn` global debugDATA n if debug:DATA$n print "Geo: Triangle , Share: 1"DATAo( id1, id2 = self.getid(0)DATAop id3 = (id2+1)%3IDATA,o new_pid = self.share_vertices[0].create()DATAp VID = self.vertex_indexDATApP DATAHp return [[ VID[id1],new_pid,VID[id3] ],[ new_pid,VID[id2],VID[id3] ] ]DATApDATAq( def share2t( self, mode ):DATAqp global debugDATA q if debug:DATA$q print "Geo: Triangle , Share: 2"DATA r8 id00, id01 = self.getid(0)DATA r id10, id11 = self.getid(1)DATAr DATA0s new_pid0 = self.share_vertices[0].create()EEDATA0sh new_pid1 = self.share_vertices[1].create()DATAs DATAs if id01 == id10:DATA$t8 idlist = [ id00, id01, id11 ]DATAt DATAt elif id11 == id00:DATA$u idlist = [ id10, id11, id01 ]DATA4uP new_pid0,new_pid1 = swap( new_pid0, new_pid1 )lDATAu DATAu else:DATAv print "?"`DATA vX returnDATAv DATAv VID = self.vertex_index@DATADw face1 = [ VID[idlist[0]], new_pid0, new_pid1, VID[idlist[2]] ]DATA4wx face2 = [ new_pid0, VID[idlist[1]], new_pid1 ]DATAw return [ face1, face2 ]DATAx  DATAxP def share3t( self, mode ):DATAx global debugDATA x id00, id01 = self.getid(0)DATA y( id10, id11 = self.getid(1)EEDATA yx id20, id21 = self.getid(2)DATA y if debug:DATA$z print "Geo: Triangle , Share: 3"DATA zP print "\t1st ",id00,",",id01DATA z print "\t2nd ",id10,",",id11DATA z print "\t3rd ",id20,",",id21DATA{@ DATA0{p new_pid0 = self.share_vertices[0].create()DATA0{ new_pid1 = self.share_vertices[1].create()DATA0|0 new_pid2 = self.share_vertices[2].create()orDATA| DATAD| slist=[ [id00, new_pid0], [id10, new_pid1], [id20, new_pid2] ]DATA}0 slist.sort()DATA}p DATA} VID = self.vertex_indexDATA} DATA~ va, vb, vc = .0, .0, .0DATA~` for vex in self.face:DATA~ va += vex.co[0]DATA~ vb += vex.co[1]DATA( vc += vex.co[2]DATA,h center = SubVex( [ new_pid0, new_pid1 ] )DATA$ center.move( va/3, vb/3, vc/3 )DATA Ԁ new_pid3 = center.create()DATAԀ` DATADԀ face1 = [ VID[slist[0][0]], slist[0][1], new_pid3, slist[2][1] ]DATADԁ face2 = [ VID[slist[1][0]], slist[1][1], new_pid3, slist[0][1] ]DATADԁp face3 = [ VID[slist[2][0]], slist[2][1], new_pid3, slist[1][1] ]DATA ԁ return [face1,face2,face3]DATAԂ0 DATAԂ` def share1q( self, mode ):DATAԂ global debugDATAԂ id1, id2 = self.getid(0)DATA ԃ0 if debug:DATA ԃh print "Geo: Quad , Share 1"DATA ԃ print "\t1st ",id1,",",id2DATAԄ id3 = (id2+1)%4DATAԄH id4 = (id3+1)%4DATAԄDATA0Ԅ new_pid0 = self.share_vertices[0].create()DATAԅ VID = self.vertex_indexDATAԅ` DATAԅ if mode == 0:DATA\ԅ return [ [VID[id1], new_pid0, VID[id4] ], [new_pid0, VID[id2], VID[id3], VID[id4] ] ]DATAԆX DATAԆ if mode == 1:DATA,Ԇ qmv = SubVex( [ VID[id3],VID[id4] ] )DATAԇ  new_pid1 = qmv.create()DATA`ԇh return [ [VID[id1],new_pid0,new_pid1,VID[id4]],[ new_pid0, VID[id2], VID[id3], new_pid1] ]DATAԇ DATAԈ(DATAԈX def share2q( self, mode):DATAԈ global debugDATA Ԉ id00, id01 = self.getid(0)DATA ԉ0 id10, id11 = self.getid(1)DATA ԉ if debug:DATA ԉ print "Geo: Quad , Share 2"DATA Ԋ print "\t1st ",id00,",",id01DATA ԊX print "\t2nd ",id10,",",id11DATAԊ DATA0Ԋ new_pid0 = self.share_vertices[0].create()DATA0ԋ8 new_pid1 = self.share_vertices[1].create()DATAԋ VID = self.vertex_indexDATAԋ DATAԌ if id01 == id10:DATAԌP id3 = (id11+1)%4DATA0Ԍ face1 = [ VID[id01], new_pid1, new_pid0 ]DATA8Ԍ face2 = [ VID[id00], new_pid0, new_pid1, VID[id11] ]DATA0ԍX face3 = [ VID[id00], VID[id11], VID[id3] ]DATA$ԍ return [ face1, face2, face3 ]DATAԎ elif id11 == id00:DATAԎP id3 = (id01+1)%4DATA0Ԏ face1 = [ VID[id11], new_pid0, new_pid1 ]DATA8Ԏ face2 = [ VID[id10], new_pid1, new_pid0, VID[id01] ]DATA0ԏX face3 = [ VID[id10], VID[id01], VID[id3] ]DATA$ԏ return [ face1, face2, face3 ]DATAԐ else:DATA8Ԑ@ face1 = [ VID[id00], new_pid0, new_pid1, VID[id11] ]DATA8Ԑ face2 = [ VID[id01], VID[id10], new_pid1, new_pid0 ]DATAԑ return [ face1, face2 ]DATAԑX DATAԑ def share3q( self, mode ):DATAԑ global debugDATA Ԓ id00, id01 = self.getid(0)DATA Ԓ` id10, id11 = self.getid(1)DATA Ԓ id20, id21 = self.getid(2)DATA ԓ if debug:DATA ԓ8 print "Geo: Quad , Share 3"DATA ԓ print "\t1st ",id00,",",id01DATA ԓ print "\t2nd ",id10,",",id11DATA Ԕ( print "\t3rd ",id20,",",id21DATAԔx DATA0Ԕ new_pid0 = self.share_vertices[0].create()DATA0ԕ new_pid1 = self.share_vertices[1].create()DATA0ԕh new_pid2 = self.share_vertices[2].create()DATAԕ DATADԕ slist = [ [id00, new_pid0], [id10, new_pid1], [id20, new_pid2] ]DATAԖh slist.sort()DATA(Ԗ if (slist[1][0] - slist[0][0]) == 2:DATA,ԗ slist = [ slist[1],slist[2],slist[0] ]DATA,ԗX elif (slist[2][0] - slist[1][0]) == 2:DATA,ԗ slist = [ slist[2],slist[0],slist[1] ]DATAԘ id4 = (slist[2][0] + 1)%4DATAԘPDATAԘ VID = self.vertex_indexDATADԘ face1 = [ VID[slist[0][0]], slist[0][1], slist[2][1], VID[id4] ]DATA<ԙ8 face2 = [ slist[0][1], VID[slist[1][0]], slist[1][1] ]DATA<ԙ face3 = [ slist[1][1], VID[slist[2][0]], slist[2][1] ]DATA4Ԛ face4 = [ slist[0][1], slist[1][1], slist[2][1] ]DATA(Ԛh return [ face1, face2, face3, face4 ]DATAԚ DATAԚ def share4q( self, mode ):DATAԛ8 global debugDATA ԛx id00, id01 = self.getid(0)DATA ԛ id10, id11 = self.getid(1)DATA Ԝ id20, id21 = self.getid(2)DATA Ԝh id30, id31 = self.getid(3)DATA Ԝ if debug:DATA Ԝ print "Geo: Quad , Share 4"DATA ԝ@ print "\t1st ",id00,",",id01DATA ԝ print "\t2nd ",id10,",",id11DATA ԝ print "\t3rd ",id20,",",id21DATA Ԟ0 print "\t4th ",id30,",",id31DATAԞ DATA0Ԟ new_pid0 = self.share_vertices[0].create()DATA0ԟ new_pid1 = self.share_vertices[1].create()DATA0ԟp new_pid2 = self.share_vertices[2].create()DATA0ԟ new_pid3 = self.share_vertices[3].create()DATAԠ0 DATAXԠ` slist = [ [id00, new_pid0], [id10, new_pid1], [id20, new_pid2], [id30, new_pid3] ]DATAԠ slist.sort()DATAԡ( VID = self.vertex_indexDATAԡp va, vb, vc = .0, .0, .0DATAԡ for vex in self.face:DATAԢ va += vex.co[0]DATAԢ@ vb += vex.co[1]DATAԢ vc += vex.co[2]DATA4Ԣ center = SubVex( [ slist[0][1], slist[2][1] ] )DATA$ԣ  center.move( va/4, vb/4, vc/4 )DATA ԣp new_pid4 = center.create()DATAԣ DATADԣ face1 = [ VID[slist[0][0]], slist[0][1], new_pid4, slist[3][1] ]DATADԤ` face2 = [ VID[slist[1][0]], slist[1][1], new_pid4, slist[0][1] ]DATADԤ face3 = [ VID[slist[2][0]], slist[2][1], new_pid4, slist[1][1] ]DATADԥ@ face4 = [ VID[slist[3][0]], slist[3][1], new_pid4, slist[2][1] ]DATA(ԥ return [face1, face2, face3, face4]DATAԦ DATAԦ8 def cface( self, faces ):DATA$Ԧ global CurrentMesh,NMESH,debugDATA Ԧ if debug:DATA ԧ print "Create Face:",facesDATAԧX DATA(ԧ CurrentMesh.faces.remove( self.face )DATAԧ for sl in faces:DATAԨ  bface = NMESH.Face()DATAԨh for vi in sl:DATA,Ԩ bface.v.append( CurrentMesh.verts[vi] )DATAԩ DATA(ԩ0 CurrentMesh.faces.append( bface )DATAԩ DATAԩclass Knife:DATAԩ def __init__( self ):DATAԪ@ self.cutting_face = []DATAԪ DATAԪ def set( self ,name):DATAԫ global CurrentMesh,NMESHDATA ԫH mesh = NMESH.GetRaw( name )DATAԫ DATAԫ if not mesh:DATA Ԭ return 0,"Error: Not Mesh"DATAԬX DATA,Ԭ selected_faces = mesh.getSelectedFaces()DATAԬ DATA ԭ if len( selected_faces ) < 2:DATA,ԭ` return 0,"Error: Required two or more"DATAԭ DATAԭ tmp_faces =[]DATAԮ( for fc in selected_faces:DATA$Ԯp tmp_faces.append( SFace( fc ))DATAԮ DATA(Ԯ for sid in range( len(tmp_faces) ):DATA,ԯH for eid in range( sid, len(tmp_faces) ):DATA0ԯ tmp_faces[sid].isShared( tmp_faces[eid] )DATA԰ DATA԰0 for fc in tmp_faces:DATA԰x if fc.numshare():DATA$԰ self.cutting_face.append(fc)DATAԱ DATAԱ@ CurrentMesh = meshDATA4Ա rm = str(len( self.cutting_face )) + " selected"DATAԱ return 1,rmDATAԲ( DATAԲX def do( self, mode ):DATAԲ global CurrentMesh,NMESHDATAԲ DATA Գ for fc in self.cutting_face:DATAԳh fc.subdiv( mode )DATAԳ DATA8Գ NMESH.PutRaw( CurrentMesh , CurrentMesh.name , 1 )DATAԴH CurrentMesh = NoneDATAԴDATAԴDATAԴdef cuting():DATA$Ե0 obj = Blender.Object.GetSelected()DATAԵ mesh = obj[0].dataDATA Ե if mesh.block_type == "NMesh":DATAԶ k = Knife()DATA ԶP r1,r2 = k.set( mesh.name )DATA Զ #print r2DATAԶ if not r1:DATA Է returnDATAԷP DATA Է k.do(1)DATAԷ del kDATAԷDATA Ը def draw():DATA$ԸX glClearColor ( 0.6, 0.6, 0.6, 1.0)DATA Ը glClear (GL_COLOR_BUFFER_BIT)DATA Ը Button("cut",10,20,20,100,20)DATAԹH DATAԹxdef event(ev,val):DATA$Թ if ( ev == ESCKEY and not val):DATA Ժ Exit()DATAԺ@DATAԺpdef proc(ev):DATAԺ if ( ev == 10 ):DATA Ժ cuting()DATAԻ(DATAԻXif __name__ == '__main__':DATA Ի Register(draw, event, proc)DATAԻ Blender.Redraw()DATAԼ0DATAԼ`DATAԼDATA(Լ#### Is Fine Knife?............ ####TXhH|TXtesselate8_1.py.0014@@@xDATA4/Applications/BlenderThings/Scripts/tesselate8_1.pyDATA@ˆS+DATAˆ@(DATAˆx#DATA`DATA`èew %DATAè`XWindDATA8è3%lDATA8ĀswupDATAĀ80N.DATAĀxDATAXN.DATAXŠN.DATAŠXPDATA0ŠN.DATA0x"DATAx0FN.DATAxVDATAPPQHDATAPǘ`QHDATAǘP8VDATA(ǘ"QHDATA(p`0VDATApȸ(!VDATAȸp gQHDATAHȸ 9QHDATAHɐ!F5{DATAɐH!6DATA ɐ!6W\+DATA h"XV DATAhʰ "V+DATAʰh"V+DATA@ʰ#"V+DATA@ˈ#h:V+DATAˈ@#!V+DATAˈ$ ?5{DATA`$5{DATA`̨$.DATĄ`%8&DATA8̨%7DATA8̀%!DATÀ8&HOVDATÀ&2FREEDATAX'(9FREEDATAXΠ'DATAΠX'1FREEDATA0Π(@FREEDATA0x(GDATAx0)DATAx)0 DATAP)hDATAPИ)DATAИP)FREEDATA(И*(!DATA(p*xV DATApѸ(*QHDATAѸp*&DATAHѸ+H'DATAHҐ+DATAҐH+DATA Ґ,(DATA h,X%DATAhӰ , QHDATAӰh,QHDATA@Ӱ-0QHDATA@Ԉ-`%FREEDATAԈ@-(QHDATAԈ.(QHDATA`.hQHDATA`ը.QHDATAը`.%DATA8ը/0#QHDATA8ր/FREEDATAր8/QHDATAր/%DATAX0P"QHDATAXנ0DATAנX0QDATA0נ1(FREEDATA0x1X"DATAx01FREEDATAx1VSDATAP2%DATAP٘2pV] DATA٘P2FREEDATA(٘2V\DATA(p3(%DATApڸ(3 V^ DATAڸp3FREEDATAHڸ3VYDATAHې4(/DATAېH4-DATA ې4 DATA h5 DATAhܰ 5`DATAܰh5FREEDATA@ܰ5VG DATA@݈6DATA݈@68FREEDATA݈6pDATA`6VADATA`ި6DATAި`7FREEDATA8ި70DATA8߀7`VB DATA߀87DATA߀7DATAX8VL DATAX8HFREEDATAX8DATA08DATA0x9DATAx09XDATAx9DATAP9DATAP:DATAP:XDATA(:DATA(p:DATAp(;9DATAp;:FREEDATAH;9DATAHXV DATA@>DATA@>FREEDATA?@3DATA`?DATA`?$DATA`@@FREEDATA8@pDATA8@'FREEDATA8AFREEDATAA`$VDATAXA DATAXA?DATAXBh&FREEDATA0B&2i(8DATA0xC DATAx0CXDDATAxCV DATAPD DATAPD`+DATAPD*DATA(E!DATA(pE`#VDATAp(EDATApE V DATAHF0HDATAHF DATAHF@V DATA Gh0DATA hGSDATAh HH,DATAhH<DATA@I4VDATA@IVDATA@IDATAI1V DATA`JX,V DATA`J2V DATA`KV DATA8KX"FREEDATA8KDATA8K5VDATAL`&VDATAXLNQDATAXM8FREEDATAXMKQHDATA0MQHDATA0xN@'QHDATAx0NQHDATAxNL.DraDATAPOH VDATAPO9QHDATAPP9205,DATA(Ph)QHDATA(pP0QHDATAp(Q WQHDATApQDATAHQQHDATAHR0.BGLDATAHRh'DATA R(QDATA hSQDATAh S`RICHDATAhSOQHDATA@TQHDATA@T`FREEDATA@T(QHDATAT)QHDATA`U@&QHDATA`U3FREEDATA`U8FREEDATA8V`$DATA8V FREEDATA8V4V DATAW`&V DATAXW;FREEDATAXX ,QHDATAXX+QHDATA0X-QHDATA0xY8<QHDATAx0Y:gszuDATAxZQHDATAPZX QHDATAPZ(e=liDATAP[QDATA([H,QHDATA(p[QHDATAp([4DATAp\@%VDATAH\+QHDATAH\'QHDATAH]H>QHDATA ]=DATA h^(QHDATAh ^p'QHDATAh^QHDATA@^*l=aDATA@_P QDATA@_DATA_'QHDATA``0QHDATA``ADATA``QHDATA8a0&QHDATA8a;FREEDATA8a$DATAbHFREEDATAXbxDATAXb$DATAXc)VŋDATA0chVċDATA0xcFREEDATAx0c$DATAxdHV DATAPdFREEDATAPd VDATAPeFREEDATA(eHV DATA(peFREEDATAp(eV͋DATApf&FREEDATAHf`VDATAHf QHDATAHf\QHDATA gXFREEDATA  hg QHDATA h  g))[0DATA   hhHQHDATA  @ hObjeDATA @  h*QHDATA   @iQHDATA   iHFREEDATA  ` i+QHDATA `  iQHDATA   `j(@QHDATA  8 jgDATA 8  k0\2DATA   8kZQHDATA   lHQDATA  X lxhQHDATA X  mfQHDATA   XmFREEDATA 0 mMDATA0x nXDATAx0nFREEDATAxnDATAPo DATAPoPW& DATAPoDATA(oDATA(ppQHDATAp(pPaQDATAppQHDATAHqDATAHqX%FREEDATAHq"DATA r,W/DATA hr`W.DATAh rDATAhr'W( DATA@s0W+ DATA@s`DATA@sDATAsFREEDATA`t0W DATA`tpFREEDATA`tDATA8tDATA8u0#W DATA8u)DATAuDATAXv #baciDATAXvpQHDATAXvQHDATA0vDATA0xw0QHDATAx0wDATAxwQHDATAPxQDATAPx0QHDATAPx`FREEDATA######################DATA (# wire and tesselate projectDATA$x# jean-michel soler january/octoberDATA# 2000DATA######################DATAXimport BlenderDATAfrom Blender import ObjectDATA from Blender.Object import *DATA0from Blender import NMesh DATAxfrom Blender.NMesh import *DATAfrom Blender.Draw import *DATAfrom Blender.BGL import *DATAPBlDATAfr= { 'Lang':'Eng',DATA$ 'EpXY':"Epaisseur XY : ",DATAH 'EpXY_doc':"Etablit l'epaisseur a partir du bord de la face",DATA  'EpZ':"Epaisseur Z",DATAT 'EpZ_doc':"indique s'il faut calculer lepaisseur a partir de la face" ,HDATA` 'NgZ':"Active -Z",DATA< 'NgZ_doc':"inverse la direction de la normale",HDATA$ 'FintTG':"FaceinterneTG",DATA4` 'FintTG_doc':"Ajoute une face interne",HDATA$ 'EpQZ':"Epaisseur Z : ",DATAh  'EpQZ_doc':"Etablit l'epaisseur a partir de la surface de la face dans le sens de la normale",DATA<  'FrgT':"Fragmentation totale, face pour face ",DATAH! 'FrgT_doc':"Effectue l'equivalent de split sur tout le mesh",DATA8! 'T1':"Fragmention : explose l'objet courant",DATA8! 'T2':"sans effectuer les autres operations.",DATA"X 'Act':"Action"}DATA" DATA"ang={ 'Lang':'Fra',DATA$# 'EpXY':"XY Thickness : ",DATA<#h 'EpXY_doc':"Set thickness from the Face border.",DATA$# 'EpZ':"Set Z Thickness",DATA@$  'EpZ_doc':"Set if script use or not the Z thickness.",DATA$ 'NgZ':"Neg Z",DATA0$ 'NgZ_doc':"reverse normal direction",DATA(%8 'FintTG':"Unset Intern Face",DATA8% 'FintTG_doc':"Add (or not) an internal face.",DATA$% 'EpQZ':"Z Thickness : ",EDATAP&H 'EpQZ_doc':"Set thickness from the the face in the normal direction.",DATA4& 'FrgT':"Set Total Fragmentation by Face",DATA<'( 'FrgT_doc':"Eqivalent to split on all the mesh",DATA ' 'T1':"Split All Mesh",DATA4' 'T2':"without doing the others actions",|DATA(@ 'Act':"Make it",`DATAH( 'iteration':"loop upon number. Reset to non at the end of " }DATA) dDATA )0lg=[fr,ang]DATA)hlang=Create(0)DATA)HDATA )#epaisseur/largeur de la bandeDATA$*(#laissee en bordure de la facetteEDATA*xepaisseur=Create(0.95)DATA*DATA(*#distance au plan de la face originaleDATA(+H#modifie les coordonees des sommets quiDATA+#limitent la bandeDATA+distance=Create(0.95)DATA,(TDATA(,X#bouton toggle/booleen pour l'option EDATA ,#"distance"DATA,DistanceTG=Create(0)HDATA-0EEDATA(-`#bouton toggle/booleen pour l'option EDATA,-#d'inversion de la distance, en standard@DATA,.#orientee vers l'exterieur de la facetteTADATA.hDistNegTG=Create(0)DATA.DATA(.#bouton toggle/booleen pour l'option DATA$/0#de conservation de la face interneDATA/FaceinterneTG=Create(0)DATA/ټDATA(/#bouton toggle/booleen pour l'option EDATA$0P#d'eclatement du reseau de facetteDATA0#en facette separeeDATA0SplitTotalTG=Create(0)DATA1(EEDATA$1X#bouton pour le niveau d'iterationDATA1Iteration=Create(1)DATA1EEDATA(2#accumulateur pour calculer le centreDATA2p#du reseau de facetteEDATA2accu1=[0.0,0.0,0.0]DATA2EEDATA(3(#accumulateur pour calculer le centreEDATA 3#la facetteDATA3accu2=[0.0,0.0,0.0]DATA3EEDATA04(#table pour la position courante de la derniereDATA04#facette et du dernier point dans leur liste DATA 4#respectiveDATA5 dern_long=[0,0]DATA5`HDATA5n=[0.0,0.0,0.0]DATA5EEDATA6n0=0HDATA68p0=0EEDATA6psDATA6a=0DATA6b=0DATA7c=0DATA70d=0DATA7`EEDATA7locZ=[0.0,0.0,0.0]DATA7x8DATA8#coefficients du planEDATA 8Hdef EquationPlan (v1,v2,v3):DATA8 global a,b,c,dDATA8 X1 =v1.co[0] DATA9 Y1 =v1.co[1]|DATA9X Z1 =v1.co[2]}DATA9 X2 =v2.co[0]~LDATA9 Y2 =v2.co[1] DATA: Z2 =v2.co[2] DATA:X X3 =v3.co[0] DATA: Y3 =v3.co[1]LDATA: Z3 =v3.co[2] DATA<; a = Y1 * (Z2 - Z3) + Y2 * (Z3 - Z1) + Y3 * (Z1 - Z2)DATA<; b = -X1 * (Z2 - Z3) + X2 * (Z1 - Z3) - X3 * (Z1 - Z2)DATA<; c = X1 * (Y2 - Y3) - X2 * (Y1 - Y3) + X3 * (Y1 - Y2)DATA@X me2=Blender.NMesh.GetRaw()DATA> if SplitTotalTG.val==0:DATA > for v in me.verts:DATA4?@ v1= Blender.NMesh.Vert(0.0,0.0,0.0)DATA? v1=vDATA(? me2.verts.append(v1)DATA@@EEDATA @p for f in me.faces:DATA(@ f1=Blender.NMesh.Face()DATAA f1=f DATA(A` me2.faces.append(f1)HDATAA EEDATA@A #reperer la fin des listes de points et de facettesDATA(Bh dern_long[0]=len(me.faces)DATA(B dern_long[1]=len(me.verts)DATAC EEDATAHCX #accumulateur pour trouver le centre geometrique du meshHDATA C lgf=len(me.faces)DATAD  EEDATA,D` #boucler sur la liste des facesDATA,D for n1 in range(dern_long[0]):DATA$E face=me.faces[n1]EDATA$E` accu2=[0.0,0.0,0.0]DATAE8DATA$E lgf1=len(face.v)HDATALF0 #boucler sur la liste des vertices>points de chaque faceHDATA$F for v in face.v:EEDATADF #boucler sur les coordonnees de chaque pointEEDATA4Gh for n0 in range(len(accu1)):EEDATATG #additionner les valeurs pour trouver le centre geometriqueDATA0HH n[n0]=n[n0]+v.co[n0]$DATA@H #meme operation sur la face actuelle8DATA8I accu2[n0]=accu2[n0]+v.co[n0]DATAI n0=0DATAI8DATA4I #centre geometrique de la facetteDATA0JX for n0 in range(len(accu2)):EEDATA4J accu2[n0]=accu2[n0]/(lgf1*1.0)DATAK DATA$KX if DistanceTG.val:DATA K dv=face.vDATA8K EquationPlan (dv[0],dv[1],dv[2])DATA(L` if DistNegTG.val:DATAPL locZ=[-a*distance.val,-b*distance.val,-c*distance.val]DATAM8 else:DATALM locZ=[a*distance.val,b*distance.val,c*distance.val]DATAM else:HDATA(N@ locZ=[0.0,0.0,0.0]DATAN@DATAPN #creation de nouveaux points l'interieur de la facette leDATA$OH for v in face.v:`DATA<O #appel de la methode d'ajout de point@DATA<P v1= Blender.NMesh.Vert(0.0, 0.0, 0.0)HDATA,Ph #calculer la positionDATA4P for n0 in range(len(accu2)):EEDATAXQ  v1.co[n0]=(v.co[n0]-accu2[n0])*epaisseur.val+accu2[n0]+locZ[n0]DATAQDATAQDATA4R #ajouter le point la liste8DATA(Rh me.verts.append(v1)DATA,R me2.verts.append(v1)DATAS n0=0EEDATAS`ŌDATAPS #ne pas depasser la fin de la liste des points de cette facetteDATA T n2=len(face.v)DATAT`LDATA,T f1= Blender.NMesh.Face()@DATA,T f1.v.append(face.v[n2-1])ADATA(U@ f1.v.append(face.v[0])DATA4U f1.v.append(me.verts[dern_long[1]])DATA<U f1.v.append(me.verts[dern_long[1]+n2-1]) DATA(V` me2.faces.append(f1)EEDATAV g=DATA8V #boucler sur les points de cette facetteDATA(W` for n3 in range(n2-1):DATA<W #creation des facettes supplmentaires DATA0X  f1= Blender.NMesh.Face()EEDATA,X f1.v.append(face.v[n3])DATA0X f1.v.append(face.v[n3+1])DATA@Y8 f1.v.append(me.verts[dern_long[1]+n3+1])EDATA<Y f1.v.append(me.verts[dern_long[1]+n3])DATAZ HDATA$ZX if (n3==0): DATA,Z me2.faces[n1]=f1DATA[ else:rDATA0[H me2.faces.append(f1)DATA[]DATA8[ #boucler sur les points de cette facetteHDATA(\@ if FaceinterneTG.val:EDATA,\ f1= Blender.NMesh.Face()DATA(\ for n3 in range(n2):DATA@]H #creation des facettes supplmentaires DATA@] f1.v.append(me.verts[dern_long[1]+n3])EDATA^( HDATA(^p me2.faces.append(f1)DATA^coDATA,^ dern_long[1]=len(me.verts)DATA _P else:aDATA _ for f in me.faces: DATA(_ f1=Blender.NMesh.Face()DATA `0 for v in f.v:EDATAD` v1= Blender.NMesh.Vert(v.co[0],v.co[1],v.co[2])LDATA` DATA(a0 me2.verts.append(v1)DATA<a f1.v.append(me2.verts[len(me2.verts)-1]) DATA(a me2.faces.append(f1)DATAbHEEDATAbx #me2.has_col= 0DATA(b #me2.has_uvco= 0 |DATA,c Blender.NMesh.PutRaw(me2,nom) HDATA ch HDATA cdef testselect(test,epaisseur):DATA(c ob= Blender.Object.GetSelected()((DATAdH if len(ob)<1:DATAd returnDATAd ob=ob[0]DATAe me=ob.dataDATAeH nom=me.nameDATAe if (me==None):DATAe returnDATA(f tesselate(me,ob.loc,nom,epaisseur)DATAf`DATA fdef draw():DATA`f global lang,epaisseur,distance,DistanceTG,FaceinterneTG,DistNegTG,SplitTotalTG,IterationEEDATA gX glColor3f(0.7, 0.7, 0.7)X.DATA$g glClear(GL_COLOR_BUFFER_BIT)DATA g glColor3f(0.1, 0.1, 0.15)PDATAhH glRasterPos2f(20, 210)DATAh DATA,h Text("Script Python de Tessalisation")DATAi DATAiH glRasterPos2f(20, 190)DATA,i Text("Jean-michel Soler, Octobre 2000")DATAi l=int(lang.val)DATADj( lang = Toggle(lg[l]['Lang'], 2, 220, 200, 60, 18, lang.val ) DATAhj epaisseur=Slider(lg[l]['EpXY'], 2, 20, 160, 260, 18, epaisseur.val, 0.0, 0.99, 0,lg[l]['EpXY_doc'])DATA`k0 DistanceTG = Toggle(lg[l]['EpZ'], 2, 20, 120, 180, 18, DistanceTG.val, lg[l]['EpZ_doc'])>DATA\k DistNegTG = Toggle(lg[l]['NgZ'], 2, 200, 120, 80, 18, DistNegTG.val, lg[l]['NgZ_doc'])DATAlH LDATAllx FaceinterneTG = Toggle(lg[l]['FintTG'], 4, 20, 100, 260, 18, FaceinterneTG.val, lg[l]['FintTG_doc']) DATAhm distance=Slider(lg[l]['EpQZ'], 2, 20, 140, 260, 18, distance.val, 0.001, 1.99,0,lg[l]['EpQZ_doc'])DATAmEEDATAPm Iteration = Number("Iteration: ", 2, 20, 35, 260, 18, Iteration.val,0,8 )EDATAnX HDATAn glRasterPos2f(20, 89)pDATAn Text(lg[l]['T1'])DATAo 8DATAoP glRasterPos2f(20, 77)DATAo Text(lg[l]['T2'])DATAo DATAp DATAdpP SplitTotalTG = Toggle(lg[l]['FrgT'], 4, 20, 55, 260, 18, SplitTotalTG.val, lg[l]['FrgT_doc'])DATApDATAq #boutons de sortieDATA(qX Button("Exit", 1, 40, 10, 80, 19)HDATA$q #bouton de cration de la formeDATA0r Button(lg[l]['Act'], 3, 140, 10, 80, 19)EEDATAr`EEDATArdef event(evt, val): DATA(r if (evt== QKEY and not val): Exit()DATAs0EEDATAs`def bevent(evt):LDATA s global epaisseur,IterationDATAs if (evt== 1):DATAt0 Exit()DATAtpEEDATAt elif (evt== 3):DATA t while Iteration.val!=0:DATA$u0 testselect(0,epaisseur)DATA,u Iteration.val=Iteration.val-1 DATAu Iteration.val=1DATA$v  Blender.Window.Redraw() DATAvp DATAv DATA v elif (evt==5) or (evt==2):DATA w0 Blender.Window.Redraw()DATAw+LDATA wRegister(draw, event, bevent)EDATAx,DATAx0ABDATAx`. TXh|иHTXWall01Beta.py}X}:p}}дXDATA4}X/Applications/BlenderThings/Scripts/Wall01Beta.pyDATA}~:#68 oDATA~~H};#gnDATA~H~~;XDATA~~~H;DATA~ ~;gnDATA h~< DATAh <`DATAh<|DATAՀ@<DATAՀ@Հ= DATAՀՀՀ@=`!eDATAՀՁՀ=#DATAՁՁ`Հ>ADATAՁ`ՁՁ>0BpDATAՁՁՁ`>`D ViDATAՁՂ8Ձ> or %DATAՂ8ՂՁ>owseDATAՂՂՂ8? gnDATAՂՃՂ?@ 2DATAՃՃXՂ?3DATAՃXՃՃ? ;sDATAՃՃՃX@$ CDATAՃՄ0Ճ@pXDATAՄ0ՄxՃ@ (DATAՄxՄՄ0AEEDATAՄՅՄxA802 FDATAՅՅPՄApFREEDATAՅPՅՅA'4 19DATAՅՅՅPB%|DATAՅՆ(ՅBX2DATAՆ(ՆpՅB rDATAՆpՆՆ(B02 IDATAՆՇՆpC rDATAՇՇHՆCH<}DATAՇHՇՇC rDATAՇՇՇHCEEDATAՇՈ ՇDDATAՈ ՈhՇD` DATAՈhՈՈ DDATAՈՈՈhDyer.DATAՈՉ@ՈE rDATAՉ@ՉՈEP rDATAՉՉՉ@E rDATAՉՊՉEDATAՊՊ`ՉFappDATAՊ`ՊՊFP0DATAՊՊՊ`F02 VDATAՊՋ8ՊF 0 .DATAՋ8ՋՊGDATAՋՋՋ8GPDATAՋՌՋGLDATAՌՌXՋG2DATAՌXՌՌH 4DATAՌՌՌXHPDATAՌՍ0ՌH 2DATAՍ0ՍxՌHDATAՍxՍՍ0I@DATAՍՎՍxIHDATAՎՎPՍIFREEDATAՎPՎՎIFREEDATAՎՎՎPJFREEDATAՎՏ(ՎJHFREEDATAՏ(ՏpՎJDATAՏpՏՏ(JDATAՏՐՏpK, DATAՐՐHՏKH"uDATAՐHՐՐKDATAՐՐՐHK, DATAՐՑ ՐL"uDATAՑ ՑhՐL@DATAՑhՑՑ LDATAՑՑՑhL"uDATAՑՒ@ՑMDATAՒ@ՒՑMXDATAՒՒՒ@M8DATAՒՓՒMDATAՓՓ`ՒN,DATAՓ`ՓՓN`DATAՓՓՓ`NDATAՓՔ8ՓNDATAՔ8ՔՓO DATAՔՔՔ8O` DATAՔՕՔODATAՕՕXՔO DATAՕXՕՕP(DATAՕՕՕXPpDATAՕՖ0ՕPDATAՖ0ՖxՕQDATAՖxՖՖ0Q0DATAՖ՗ՖxQpDATA՗՗PՖQɭDATA՗P՗՗RDATA՗՗՗PR06l8DATA՗՘(՗RDATA՘(՘p՗RDATA՘p՘՘(SDATA՘ՙ՘pSPDATAՙՙH՘S*DATAՙHՙՙS,DATAՙՙՙHT wDATAՙ՚ ՙT`DATA՚ ՚hՙTDATA՚h՚՚ TDATA՚՚՚hUDATA՚՛@՚UXDATA՛@՛՚UDATA՛՛՛@U,DATA՛՜՛V1DATA՜՜`՛Vx11 DATA՜`՜՜V1DATA՜՜՜`W81DATA՜՝8՜W1DATA՝8՝՜W1DATA՝՝՝8XX1DATA՝՞՝X1DATA՞՞X՝YDATA՞X՞՞YHDATA՞՞՞XYDATA՞՟0՞Y?DATA՟0՟x՞ZPDATA՟x՟՟0Z%DATA՟ՠ՟xZDATAՠՠP՟[ DATAՠPՠՠ[pDATAՠՠՠP[#DATAՠա(ՠ\DATAա(աpՠ\PDATAաpաա(\DATAաբաp\DATAբբHա]DATAբHբբ]`#DATAբբբH]DATAբգ բ]DATAգ գhբ^(DATAգhգգ ^pDATAգգգh^DATAգդ@գ_#DATAդ@դգ_XDATAդդդ@_DATAդեդ_DATAեե`դ`DATAե`եե`hDATAեեե``#DATAեզ8եaDATAզ8զեaHDATAզզզ8axDATAզէզaDATAէէXզbDATAէXէէbX#DATAէէէXbDATAէը0էbDATAը0ըxէc DATAըxըը0chDATAըթըxcDATAթթPըd#DATAթPթթdPDATAթթթPdDATAթժ(թdDATAժ(ժpթeDATAժpժժ(ePADATAժիժpeADATAիիHժf0ADATAիHիիfADATAիիիHgADATAիլ իgADATAլ լhիgADATAլhլլ h`ADATAլլլhhDATAլխ@լiADATAխ@խլipADATAխխխ@iADATAխծխjPADATAծծ`խjADATAծ`ծծk0ADATAծծծ`kADATAծկ8ծlADATAկ8կծlDATAկկկ8lADATAկհկm ADATAհհXկmADATAհXհհnADATAհհհXnpADATAհձ0հnADATAձ0ձxհoPADATAձxձձ0oADATAձղձxp0DATAղղPձp`DATAղPղղpDATAղղղPp?DATAղճ(ղqhDATAճ(ճpղq%DATAճpճճ(qDATAճմճpr8DATAմմHճrDATAմHմմr#DATAմմմHs DATAմյ մshDATAյ յhմsDATAյhյյ sDATAյյյht0DATAյն@յtx#DATAն@նյtDATAննն@uDATAնշնu@DATAշշ`նuDATAշ`շշuDATAշշշ`v #DATAշո8շvpDATAո8ոշvDATAոոո8vDATAոչոw0 DATAչչXոwDATAչXչչw#DATAչչչXxDATAչպ0չx`DATAպ0պxչxDATAպxպպ0x DATAպջպxy(DATAջջPպyp#DATAջPջջyDATAջջջPzDATAջռ(ջz8DATAռ(ռpջz DATAռpռռ(zDATAռսռp{#DATAսսHռ{hDATAսHսս{DATAսսսH{DATAսվ ս|(DATAվ վhս|xDATAվhվվ |#DATAվվվh}DATAվտ@վ}XDATAտ@տվ}DATAտտտ@}DATAտտ~DATA`տ~`#DATA`~DATA`~DATA8(DATA8pDATA8DATAր#DATAXրXDATAX րDATA XրDATA0 ցDATA0xց`DATAx0ց#DATAxցDATAPւ@DATAPĘւpDATAĘPւDATA(ĘփDATA(pփP#DATApŸ(փDATAŸpփDATAHŸքDATAHƐք`DATAƐHքDATA Ɛք#DATA hօ@DATAhǰ օDATAǰhօDATA@ǰֆDATA@ȈֆPDATAȈ@ֆ#DATAȈֆDATA`և0DATA`ɨև`DATAɨ`ևDATA8ɨևDATA8ʀֈ8#DATAʀ8ֈDATAʀֈDATAX։DATAXˠ։HDATAˠX։DATA0ˠ։#DATA0x֊0DATAx0֊xDATAx֊DATAP֊DATAP͘֋@DATA͘P֋#DATA(͘֋DATA(p֌ DATApθ(֌PDATAθp֌DATAHθ֌DATAHϐ֍0#DATAϐH֍DATA ϐ֍DATA h֍DATAhа ֎@DATAаh֎DATA@а֎#DATA@ш֏(DATAш@֏pDATAш֏DATA`֏DATA`Ҩ֐0DATAҨ`֐x#DATA8Ҩ֐DATA8Ӏ֑DATAӀ8֑@DATAӀ֑DATAX֑DATAXԠ֒ #DATAԠX֒pDATA0Ԡ֒DATA0x֒DATAx0֓0DATAx֓xDATAP֓#DATAP֘֔DATA֘P֔XDATA(֘֔DATA(p֔ DATAp׸(֕ DATA׸p֕h#DATAH׸֕DATAH֖ؐDATAؐH֖0DATA ֖ؐxDATA h֖DATAhٰ ֗#DATAٰh֗XDATA@ٰ֗DATA@ڈ֗DATAڈ@֘DATAڈ֘hDATA`֘#DATA`ۨ֙DATAۨ`֙HDATA8ۨ֙xDATA8܀֙DATA܀8֚DATA܀֚P#DATAX֚DATAXݠ֚DATAݠX֛DATA0ݠ֛` DATA0x֛DATAx0֛#DATAx֜HDATAP֜DATAPߘ֜ DATAߘP֝DATA(ߘ֝0DATA(p֝DATAp(֝DATAp֞)DATAH֞`DATAH֞)DATAH֟,DATA ֟`DATA h֟*DATAh ֟,DATAh֠PDATA@֠DATA@֠*DATA@֡DATA֡P%DATA`֡DATA`֡DATA`֢ DATA8֢P'DATA8p/DATA8DATA]DATAX֢)DATAXPDATAX(QDATA0ODATA0x(3DATAx00DATAx-DATAPHDATAPKDATAP<DATA(pPDATA(pQDATAp(pODATAp3DATAHP0DATAH-DATAHDATA HDATA hx3DATAh DATAh(7DATA@8DATA@)DATA@P+DATA*DATA`DATA`0DATA`DATA8DATA8DATA8HDATADATAXDATAXDATAXPDATA0DATA0xDATAx0DATAxXDATAP˜DATAP'DATAP 'DATA(x'DATA(p"DATAp( /DATApĀ.DATAH.DATAH@.DATAHŠDATA 'DATA h((DATAh ƀDATAhư$DATA@DATA@XDATA@LjDATADATA`DATA``DATA`ȰHDATA8(MDATA8ɨDATA8HDATA`IDATAX8DATAX@/DATAXˠDATA0DATA0x86DATAx0̠DATAxDATAP@ DATAPxDATAP?DATA(8LDATA(pθKDATAp(0DATApp?DATAHIDATAHXKDATAH8DATA 8DATA hр0DATAh DATAh0!DATA@ҀDATA@DATA@ DATAPDATA`ӈDATA`DATA`(DATA8p+DATA8+DATA8 DATApDATAX7DATAX(,DATAXֈDATA07DATA0x0-DATAx0א!DATAx%DATAP83DATAPؘ,DATAPDATA(@DATA(ppDATAp(ٸDATApDATAHH(DATAHڠ'DATAHDATA @DATA hۈ2DATAh DATAh8?DATA@ܨDATA@2DATA@H8DATAݰDATA` DATA`P+DATA`ިDATA 8 DATA 8 2DATA   8p8DATA   DATA  X ( DATA X  xDATA   X?DATA  0 8DATA 0 x x2DATA x  0-DATA   x8DATA  P hDATA P  DATA   PDATA  ( 0DATA ( p DATA p  (DATA  pDATAH @DATAHЃDATAHЃ DATA ЄBDATA hЄxEDATAh ЄGDATAhЅh8DATA@ЅDATA@ІDATA@ІP#DATAІDATA`ІDATA`Ї0DATA`Ї`DATA8ЇDATA8ЇDATA8Ј(DATAЈpDATAXЈPDATAXЉ8KDATAXЉHDATA0Њ(DDATA0xЊHDATAx0ЋXDATAxЋQDATAPЌ DATAPЌhTDATAPЌDATA(Ѝ(TDATA(pЍDATAp(ЍFDATApЎXLDATAHЎIDATAHЏPDATAHЏ+DATA ЏDATA hАDATAh АXDATAhАDATA@АDATA@БDATA@БHNDATAБDATA`БDATA`В@ DATA`В DATA8ВDATA8Г(%DATA8Г%DATAГ$DATAXД0DATAXДhDATAXД DATA0Е DATA0xЕP%DATAx0Е%DATAxЖ#DATAPЖPDATAPЖDATAPЖDATA(З DATA(pЗ`IDATAp(ЗUDATA pИ`DATA  HИ%DATA H  И'DATA   HЙ@&DATA !  ЙDATA! !h ЙDATA!h!! КDATA!!!hКHDATA!"@!КDATA"@"!К%DATA"""@Л'DATA"#"Лh&DATA##`"ЛDATA#`##ЛDATA###`М8DATA#$8#МDATA$8$#МDATA$$$8Н DATA$%$НhDATA%%X$НDATA%X%%НDATA%%%XО(DATA%&0%ОXRDATA&0&x%О[DATA&x&&0П`_DATA&'&xП^DATA''P&Р`DATA'P''СDATA'''PС@YDATA'(('СXDATA(((p'ТPZDATA(p(((ТDATA()(pУDATA))H(УH?DATA)H))УDATA)))HУ$DATA)* )Ф@ DATA* *h)ФDATA*h** Ф7DATA***hХ0DATA*+@*Хp<DATA+@+*ХDATA+++@ЦDATA+,+Ц`DATA,,`+Ц DATA,`,,Ц DATA,,,`Ч8DATA,-8,ЧhDATA-8-,ЧDATA---8ЧDATA-.-Ш( DATA..X-Ш`DATA.X..Ш DATA...XШDATA./0.ЩDATA/0/x.ЩPDATA/x//0Щ&DATA/0/xЩDATA00P/Ъ8DATA0P00ЪhDATA000PЪDATA01(0ЪDATA1(1p0Ы@DATA1p11(Ы DATA121pЫDATA22H1Ь#DATA2H22ЬXDATA222HЬDATA23 2ЬDATA3 3h2ЭDATA3h33 Э` DATA333hЭDATA34@3Э#DATA4@43Ю0DATA444@Ю` DATA454ЮDATA55`4ЮDATA5`55ЯHDATA555`Я DATA5685ЯDATA6865а#DATA6668а`DATA676аDATA77X6аDATA7X77б(DATA777Xбx DATA7807бDATA808x7б#DATA8x880вHDATA898xвxDATA99P8вDATA9P99вDATA999Pг8#DATA9:(9гDATA:(:p9г DATA:p:(дDATA$:# Walls & Tiles by Johan BadenhorstDATA$;# ---------------------------------DATA;X# Version 1.0 BetaDATA;# ----------------- DATA;#lDATA$<# Uses Random.py from Python 2.2pDATA <`# Created using Blender 2.28aDATA<#DATA<#DATA$=# Feel free to use this script, DATA$=`# just give me credit and let me DATA$=# know if it helped you in any way.DATA>#DATA>0# DATA>`# DATA># Features: %DATA># DATA?# Completed:gnDATA?@# ----------DATA4?# - Bevel ( Not really a bevel just a rounder edge)DATA ?# - GroutDATA(@# - Random brick dimesion variationscaDATA@p# - Random colour variationDATA$@# - Horizontal / Verticle optionDATAA#DATAA8# NOTE:DATAAp# -----DATA(A# Remember to recalc wall normals afterDATA(B# it is created so that they show up DATA BX# correctly in faceselect modeDATAB DATAB DATACimport BlenderDATACHfrom Blender import NMeshDATACfrom math import *DATACfrom Blender.Draw import *DATADfrom Blender.BGL import *DATAD`import randomDATADfrom random import *DATAD09DATA E # EventsDATAEPPCreateWall = 10 DATAESlide = 11 rDATAETIsBricks = 13DATAFTIsTiles = 14DATAFPTHasGrout = 15acDATAFTHasMaterials = 16DATAFTColVar = 17DATAGTHor = 18DATAGPTVert = 19DATAGDATAG # Current ScenegnDATA$Hsce = Blender.Scene.getCurrent()XDATAHPDATAH # Wall typeDATAHIsBricks = Create(1)wnDATAIIsTiles = Create(0)DATAIHHasGrout = Create(0)DATAIHasMaterials = Create(1)DATAIEEDATAJ # Wall dimensionsDATAJHLength = Create(20.0)DATAJHeight = Create(10.0)DATAJeDATAK # Wall ColourDATAKHRed = Create(0.5)DATAKGreen = Create (0.1) DATAKBlue = Create(0.05)DATALDATAL@ # Brick dimensionsDATALBrickLength = Create(1.5)DATALBrickHeight = Create(0.5)DATAMBrickBreadth = Create(0.6)DATAMXBrickBevel = Create(0.0)DATAMDATAM # Brick dimesion variancesDATANLengthVar = Create(0.05)DATAN`HeightVar = Create(0.05)DATANBreadthVar = Create(0.25)DATANDATAO  # Colour settingsDATAO`HasColVar = Create(1)DATA OColourVar = Create(0.1)DATAODATAP( # Horizontal or VerticalDATAPpIsVertical = Create(1)DATAPIsHorizontal = Create(0)DATAQDATAQ0 # Grout variablesDATAQpSpacing = Create(0.1)DATAQGroutColour = 1, 1, 1DATARDATA8R0def MakeBrick(x, y, z, l, b, h, bev, grout, vertical):DATARDATAR # BrickMeshDATAS me = NMesh.GetRaw()DATASPDATA,S # Adjust Brick size to allow for groutDATAS if vertical == 1:yDATAT  l = l - groutDATAT` h = h - groutDATA T else:@DATAT l = l - groutDATAU b = b - groutDATAUXDATAU if bev <= 0: DATA U # Vertice coordinatesDATA4V verts = ([x + l / 2, y + h / 2, z + b / 2],DATA4Vx [x - l / 2, y + h / 2, z + b / 2],DATA4V [x - l / 2, y - h / 2, z + b / 2],DATA4W8 [x + l / 2, y - h / 2, z + b / 2],DATA4W [x + l / 2, y + h / 2, z - b / 2],DATA4W [x - l / 2, y + h / 2, z - b / 2],DATA4XX [x - l / 2, y - h / 2, z - b / 2],DATA4X [x + l / 2, y - h / 2, z - b / 2])DATAY0DATA YH # Add vertices to meshDATAY for vert in verts:DATA@Y me.verts.append(NMesh.Vert(vert[0], vert[2], vert[1]))DATAZPDATA(Z # Create and add faces to meshDATAZ face = NMesh.Face()DATA [  faceVerts = 0, 1, 2, 3DATA[p for i in faceVerts:DATA$[ face.v.append(me.verts[i])DATA\ me.faces.append(face)DATA\PDATA\ face = NMesh.Face()DATA \ faceVerts = 4, 5, 6, 7 DATA] for i in range(4,8):DATA$]` face.v.append(me.verts[i])DATA] me.faces.append(face)DATA]DATA^( face = NMesh.Face()DATA ^p faceVerts = 1, 0, 4, 5DATA^ for i in faceVerts:DATA$_ face.v.append(me.verts[i])DATA_X me.faces.append(face)DATA_DATA_ face = NMesh.Face()DATA ` faceVerts = 2, 6, 7, 3DATA`h for i in faceVerts:DATA$` face.v.append(me.verts[i])DATAa me.faces.append(face)DATAaHDATAax face = NMesh.Face()DATA a faceVerts = 3, 7, 4, 0DATAb for i in faceVerts:DATA$bX face.v.append(me.verts[i])DATAb me.faces.append(face)DATAbDATAc  face = NMesh.Face()DATA ch faceVerts = 5, 1, 2, 6DATAc for i in faceVerts:DATA$d face.v.append(me.verts[i])DATAdP me.faces.append(face)DATA d else:DATAd DATA e # Vertice coordinatesDATADeP verts = ([(x + l / 2) - bev, (y + h / 2) - bev, z + b / 2],DATADe [(x - l / 2) + bev, (y + h / 2) - bev, z + b / 2],DATADf0 [(x - l / 2) + bev, (y - h / 2) + bev, z + b / 2],DATADf [(x + l / 2) - bev, (y - h / 2) + bev, z + b / 2],DATADg [(x + l / 2) - bev, (y + h / 2) - bev, z - b / 2],DATADg [(x - l / 2) + bev, (y + h / 2) - bev, z - b / 2],DATADg [(x - l / 2) + bev, (y - h / 2) + bev, z - b / 2],DATADh` [(x + l / 2) - bev, (y - h / 2) + bev, z - b / 2],DATAhDATADi [(x + l / 2) - bev, y + h / 2, (z + b / 2) - bev],DATADip [(x - l / 2) + bev, y + h / 2, (z + b / 2) - bev],DATADi [(x - l / 2) + bev, y - h / 2, (z + b / 2) - bev],DATADjP [(x + l / 2) - bev, y - h / 2, (z + b / 2) - bev],DATADj [(x + l / 2) - bev, y + h / 2, (z - b / 2) + bev],DATADk0 [(x - l / 2) + bev, y + h / 2, (z - b / 2) + bev],DATADk [(x - l / 2) + bev, y - h / 2, (z - b / 2) + bev],DATADl [(x + l / 2) - bev, y - h / 2, (z - b / 2) + bev],DATAlDATADl [x + l / 2, (y + h / 2) - bev, (z + b / 2) - bev],DATADm  [x - l / 2, (y + h / 2) - bev, (z + b / 2) - bev],DATADm [x - l / 2, (y - h / 2) + bev, (z + b / 2) - bev],DATADn [x + l / 2, (y - h / 2) + bev, (z + b / 2) - bev],DATADnp [x + l / 2, (y + h / 2) - bev, (z - b / 2) + bev],DATADn [x - l / 2, (y + h / 2) - bev, (z - b / 2) + bev],DATADoP [x - l / 2, (y - h / 2) + bev, (z - b / 2) + bev],DATADo [x + l / 2, (y - h / 2) + bev, (z - b / 2) + bev])DATAp0DATA p` # Add vertices to meshDATAp for vert in verts:DATA@p me.verts.append(NMesh.Vert(vert[0], vert[2], vert[1]))DATAqh DATA(q # Create and add faces to meshDATAq face = NMesh.Face()DATA r8 faceVerts = 0, 3, 2, 1DATAr for i in faceVerts:DATA$r face.v.append(me.verts[i])DATAs  me.faces.append(face)DATAshDATAs face = NMesh.Face()DATA s faceVerts = 4, 5, 6, 7DATAt0 for i in faceVerts:DATA$tx face.v.append(me.verts[i])DATAt me.faces.append(face)DATAuDATAu@ face = NMesh.Face()DATA u faceVerts = 12, 8, 9, 13DATAu for i in faceVerts:DATA$v  face.v.append(me.verts[i])DATAvp me.faces.append(face)DATAvDATAv face = NMesh.Face()DATA$w0 faceVerts = 14, 10, 11, 15DATAw for i in faceVerts:DATA$w face.v.append(me.verts[i])DATAx me.faces.append(face)DATAx`DATAx face = NMesh.Face()DATA$x faceVerts = 20, 23, 19, 16DATAy( for i in faceVerts:DATA$yp face.v.append(me.verts[i])DATAy me.faces.append(face)DATAzDATAz8 face = NMesh.Face()DATA$z faceVerts = 21, 17, 18, 22DATAz for i in faceVerts:DATA${ face.v.append(me.verts[i])DATA{h me.faces.append(face)DATA{DATA{ face = NMesh.Face()DATA |( faceVerts = 9, 17, 21, 13DATA|x for i in faceVerts:DATA$| face.v.append(me.verts[i])DATA} me.faces.append(face)DATA}XDATA} face = NMesh.Face()DATA} faceVerts = 13, 21, 5DATA~ for i in faceVerts:DATA$~` face.v.append(me.verts[i])DATA~ me.faces.append(face)DATA~DATA( face = NMesh.Face()DATA p faceVerts = 13, 5, 4, 12DATA for i in faceVerts:DATA$ր face.v.append(me.verts[i])DATAրX me.faces.append(face)DATAրDATAր face = NMesh.Face()DATAց faceVerts = 12, 4, 20DATAց` for i in faceVerts:DATA$ց face.v.append(me.verts[i])DATAց me.faces.append(face)DATAւ@DATAւp face = NMesh.Face()DATA ւ faceVerts = 12, 20, 16, 8DATAփ for i in faceVerts:DATA$փP face.v.append(me.verts[i])DATAփ me.faces.append(face)DATAփDATAք face = NMesh.Face()DATAք` faceVerts = 8, 16, 0DATAք for i in faceVerts:DATA$ք face.v.append(me.verts[i])DATAօ@ me.faces.append(face)DATAօDATAօ face = NMesh.Face()DATA ֆ faceVerts = 8, 0, 1, 9DATAֆP for i in faceVerts:DATA$ֆ face.v.append(me.verts[i])DATAֆ me.faces.append(face)DATAև0DATAև` face = NMesh.Face()DATAև faceVerts = 9, 1, 17DATAև for i in faceVerts:DATA$ֈ8 face.v.append(me.verts[i])DATAֈ me.faces.append(face)DATAֈDATA։ face = NMesh.Face()DATA ։H faceVerts = 1, 2, 18, 17DATA։ for i in faceVerts:DATA$։ face.v.append(me.verts[i])DATA֊0 me.faces.append(face)DATA֊xDATA֊ face = NMesh.Face()DATA ֊ faceVerts = 21, 22, 6, 5DATA֋@ for i in faceVerts:DATA$֋ face.v.append(me.verts[i])DATA֋ me.faces.append(face)DATA֌ DATA֌P face = NMesh.Face()DATA ֌ faceVerts = 4, 7, 23, 20DATA֌ for i in faceVerts:DATA$֍0 face.v.append(me.verts[i])DATA֍ me.faces.append(face)DATA֍DATA֍ face = NMesh.Face()DATA ֎@ faceVerts = 16, 19, 3, 0DATA֎ for i in faceVerts:DATA$֎ face.v.append(me.verts[i])DATA֏( me.faces.append(face)DATA֏pDATA֏ face = NMesh.Face()DATA֏ faceVerts = 19, 11, 3DATA֐0 for i in faceVerts:DATA$֐x face.v.append(me.verts[i])DATA֐ me.faces.append(face)DATA֑DATA֑@ face = NMesh.Face()DATA ֑ faceVerts = 3, 11, 10, 2DATA֑ for i in faceVerts:DATA$֒  face.v.append(me.verts[i])DATA֒p me.faces.append(face)DATA֒DATA֒ face = NMesh.Face()DATA֓0 faceVerts = 2, 10, 18DATA֓x for i in faceVerts:DATA$֓ face.v.append(me.verts[i])DATA֔ me.faces.append(face)DATA֔XDATA֔ face = NMesh.Face()DATA$֔ faceVerts = 18, 10, 14, 22DATA֕  for i in faceVerts:DATA$֕h face.v.append(me.verts[i])DATA֕ me.faces.append(face)DATA֖DATA֖0 face = NMesh.Face()DATA֖x faceVerts = 22, 14, 6DATA֖ for i in faceVerts:DATA$֗ face.v.append(me.verts[i])DATA֗X me.faces.append(face)DATA֗DATA֗ face = NMesh.Face()DATA ֘ faceVerts = 6, 14, 15, 7DATA֘h for i in faceVerts:DATA$֘ face.v.append(me.verts[i])DATA֙ me.faces.append(face)DATA֙HDATA֙x face = NMesh.Face()DATA֙ faceVerts = 7, 15, 23DATA֚ for i in faceVerts:DATA$֚P face.v.append(me.verts[i])DATA֚ me.faces.append(face)DATA֚DATA֛ face = NMesh.Face()DATA$֛` faceVerts = 23, 15, 11, 19DATA֛ for i in faceVerts:DATA$֛ face.v.append(me.verts[i])DATA֜H me.faces.append(face)DATA֜DATA֜ return meDATA֝DATA ֝0def MakeWall(Name, Vertical):DATA ֝ WallMesh = NMesh.GetRaw()DATA֝ DATA,֞ # Calculate Number of rows and columsDATA֞` if Vertical == 1:DATA,֞ Rows = Height.val / BrickHeight.valDATA0֟ Columns = Length.val / BrickLength.valDATA ֟` else:DATA,֟ Rows = Height.val / BrickBreadth.valDATA0֟ Columns = Length.val / BrickLength.valDATA֠PDATA֠DATA,֠ # Set offset for zig-zagging of bricksDATA֡ if IsBricks.val == 1:DATA(֡P RowOffset = BrickLength.val / 4DATA ֡ else:DATA֡ RowOffset = 0DATA֢ DATA(֢P for r in range(-Rows / 2, Rows / 2):DATA0p for c in range(-Columns / 2, Columns/ 2):DATA if Vertical == 1:DATA` CurrentMesh = MakeBrick(c * (BrickLength.val) + RowOffset, r * (BrickHeight.val),DATA,֢ 0.0, DATAT BrickLength.val + random() * LengthVar.val, DATAT( BrickBreadth.val + random() * BreadthVar.val,DATAP BrickHeight.val + random() * HeightVar.val,DATA4( BrickBevel.val,DATA4 Spacing.val,DATA0 Vertical)DATAH else:DATAL CurrentMesh = MakeBrick(c * (BrickLength.val) + RowOffset, 0.0,DATA@ r * (BrickBreadth.val), DATATp BrickLength.val + random() * LengthVar.val, DATAT BrickBreadth.val + random() * BreadthVar.val,DATAPp BrickHeight.val + random() * HeightVar.val,DATA4 BrickBevel.val,DATA4P Spacing.val,DATA0 Vertical)DATA DATAHDATA4x # Add brick vertices and face to wall andDATA  # set brick colourDATA8( ThisVar = (random() * 255.0) * (ColourVar.val)DATA< ThisVar = ThisVar - (0.5 * ColourVar.val * 255)DATA, R = int(Red.val * 255) + ThisVarDATA,P G = int(Green.val * 255) + ThisVarDATA, B = int(Blue.val * 255) + ThisVarDATA DATA 0 # Keep within limitsDATA if R > 255:DATA R = 255DATA if R < 1:DATAH R = 1DATA if G > 255:DATA G = 255DATA if G < 1:DATAP G = 1DATA if B > 255:DATA B = 255DATA if B < 1:DATAX B = 1DATA˜DATA( for vert in CurrentMesh.verts:DATA(  WallMesh.verts.append(vert)DATA(x for face in CurrentMesh.faces:DATA$ if HasColVar.val == 1:DATA0  face.col = [NMesh.Col(R, G, B), DATA0Ā NMesh.Col(R, G, B),DATA0 NMesh.Col(R, G, B),DATA0@ NMesh.Col(R, G, B)]DATAŠDATA( WallMesh.faces.append(face)DATA,( CurrentMesh.hasVertexColours(1)DATAƀDATA(ư # Flip row offset for zig zagDATA  RowOffset = -RowOffsetDATAXDATALj # Create groutDATA if HasGrout.val == 1:DATA  if IsVertical.val == 1:DATA ` if IsBricks.val == 1:DATALȰ GroutHeight = BrickHeight.val * Rows + (BrickHeight.val / 4)DATAP( GroutLength = BrickLength.val * Columns - (BrickLength.val / 2) DATAɨ else:DATAL GroutHeight = BrickHeight.val * Rows + (BrickHeight.val / 4)DATAL` GroutLength = BrickLength.val * Columns - (BrickLength.val) DATA< Grout = MakeBrick(0.0 - (BrickLength.val / 2), DATA0@ 0.0 - (BrickHeight.val / 2), DATAˠ 0.0, DATA  GroutLength, DATA88 BrickBreadth.val - BreadthVar.val, DATA ̠ GroutHeight, DATA  0.0, 0.0, 0)DATA @ else:DATA x if IsBricks.val == 1:DATA@ GroutHeight = BrickHeight.val - (2 * HeightVar.val)DATAP8 GroutLength = BrickLength.val * Columns - (BrickLength.val / 2) DATALθ GroutBreadth = BrickBreadth.val * Rows + (BrickBreadth.val / 2)DATA0 else:DATA@p GroutHeight = BrickHeight.val - (2 * HeightVar.val)DATAL GroutLength = BrickLength.val * Columns - (BrickLength.val) DATALX GroutBreadth = BrickBreadth.val * Rows + (BrickBreadth.val / 2)DATA< Grout = MakeBrick(0.0 - (BrickLength.val / 2), DATA8 0.0, DATA4р 0.0 - (BrickBreadth.val / 2), DATA  GroutLength, DATA$0 GroutBreadth, DATA Ҁ GroutHeight, DATA  0.0, 0.0, 0)DATA  DATAP DATA ӈ # Create grout materialDATA  if HasMaterials.val == 1:DATA( HasGroutMat = 0DATA,p for mat in Blender.Material.Get():DATA, if mat.getName() == "GroutMat":DATA   HasGroutMat = 1DATA p if HasGroutMat == 1:DATA8 GroutMat = Blender.Material.Get("GroutMat")DATA0( Grout.materials.append(GroutMat)DATAֈ else: DATA8 GroutMat = Blender.Material.New("GroutMat")DATA00 GroutMat.setRGBCol(0.5, 0.5, 0.5)DATA$א GroutMat.setSpec(0.1)DATA( GroutMat.setHardness(20) DATA48 GroutMat.setMode('Shadow', 'Traceable')DATA0ؘ Grout.materials.append(GroutMat)DATA NMesh.PutRaw(Grout)DATA@DATAp # Create MaterialDATAٸ HasWallMat = 0DATA  if HasMaterials.val == 1:DATA,H for mat in Blender.Material.Get():DATA(ڠ if mat.getName() == "WallMat":DATA HasWallMat = 1DATA@ if HasWallMat == 1:DATA4ۈ WallMat = Blender.Material.Get("WallMat")DATA  if HasColVar.val == 1:DATA@8 WallMat.setMode('VColPaint', 'Shadow', 'Traceable')DATAܨ else:DATA4 WallMat.setMode('Shadow', 'Traceable')DATA<H WallMat.setRGBCol(Red.val, Green.val, Blue.val)DATA ݰ WallMat.setSpec(0.1)DATA$ WallMat.setHardness(20)DATA,P WallMesh.materials.append(WallMat)DATAިDATA  else:DATA4 WallMat = Blender.Material.New("WallMat")DATA<p WallMat.setRGBCol(Red.val, Green.val, Blue.val)DATA  WallMat.setSpec(0.1)DATA$( WallMat.setHardness(20)DATA x if HasColVar.val == 1:DATA@ WallMat.setMode('VColPaint', 'Shadow', 'Traceable')DATA8 else:DATA4x WallMat.setMode('Shadow', 'Traceable')DATA0 WallMesh.materials.append(WallMat) DATA8 DATAh # Set Brick ColoursDATA  WallMesh.hasVertexColours(1)DATADATA 0 # Add Wall To Scene DATA NMesh.PutRaw(WallMesh)DATA WallMesh.update(1)DATADATA @ DATAЃ # ------ GUI ------DATA Ѓdef draw():DATADЄ global Length, Height, IsBricks, IsTiles, HasGrout, BrickLengthDATAHЄx global BrickBreadth, BrickHeight, BreadthVar, HeightVar, LengthVarDATAHЄ global BrickBevel, Spacing, MaxBevel, HasMaterials, Red, Green, BlueDATA<Ѕh global ColourVar, HasColVar, IsHorizontal, IsVerticalDATAЅDATA І # ------ Clear Color ------DATA$ІP glClearColor(0.8, 0.8, 0.8, 1.0)DATAІ glColor3f(0,0,0)DATA І glClear(GL_COLOR_BUFFER_BIT)DATAЇ0DATAЇ`DATA Ї # ------ Create GUI ------DATAЇ # Surface settingsDATAЈ( glRasterPos2f(120, 480)DATAЈp Text("Surface Settings")DATATЈ IsHorizontal = Toggle("Horizontal", THor, 180, 445, 70, 20, IsHorizontal.val)DATALЉ8 IsVertical = Toggle("Vertical", TVert, 260, 445, 70, 20, IsVertical.val)DATALЉ IsBricks = Toggle("Bricks", TIsBricks, 20, 410, 50, 20, IsBricks.val)DATAHЊ( IsTiles = Toggle("Tiles", TIsTiles, 80, 410, 50, 20, IsTiles.val)DATALЊ HasGrout = Toggle("Grout", THasGrout, 280, 410, 50, 20, HasGrout.val)DATA\Ћ HasMaterials = Toggle("Materials", THasMaterials, 210, 410, 60, 20, HasMaterials.val)DATATЋ Length = Slider("Length ", Slide, 20, 375, 310, 20, Length.val, 1.0, 100.0, 0)DATAЌ  if IsVertical.val == 1:DATAXЌh Height = Slider("Height ", Slide, 20, 350, 310, 20, Height.val, 1.0, 100.0, 0)DATA Ќ else:DATAXЍ( Height = Slider("Bredth ", Slide, 20, 350, 310, 20, Height.val, 1.0, 100.0, 0)DATAЍDATAHЍ Red = Slider("Red ", Slide, 20, 320, 230, 20, Red.val, 0.0, 1.0, 0)DATAPЎX Green = Slider("Green ", Slide, 20, 295, 230, 20, Green.val, 0.0, 1.0, 0)DATALЎ Blue = Slider("Blue ", Slide, 20, 270, 230, 20, Blue.val, 0.0, 1.0, 0)DATAЏPDATA,Џ glColor3f(Red.val, Green.val, Blue.val) DATAЏDATA А glRectf(260, 270, 330, 340)DATAАX DATAА glColor3i(1,1,1) DATAАDATAБ # Set slider maxesDATAPБH MaxBevel = ((BrickHeight.val + BrickLength.val + BrickBreadth.val) / 3) / 5DATAБDATAБ if IsVertical.val == 1:DATA$В@ MaxHeight = Height.val / 3DATA$В MaxLength = Length.val / 3DATAВ MaxBredth = 3.0DATA(Г( MaxLVar = Spacing.val / 2 DATA(Г MaxHVar = Spacing.val / 2 DATA(Г MaxBVar = BrickBreadth.val / 2DATA Д0 else:DATAДh MaxHeight = 3.0DATA$Д MaxLength = Length.val / 3DATA$Е MaxBredth = Height.val / 3DATA(ЕP MaxLVar = Spacing.val / 2 DATA(Е MaxBVar = Spacing.val / 2 DATA$Ж MaxHVar = BrickHeight.val / 2DATAЖPDATAЖ # Brick / Tile SettingsDATAЖ glRasterPos2f(115, 235)DATA$З Text("Brick / Tile Settings")DATALЗ` HasColVar = Toggle("Col Var", TColVar, 20, 205, 50, 20, HasColVar.val)DATAXЗ ColourVar = Slider("Col Var ", Slide, 75, 205, 250, 20,ColourVar.val, 0.0, 1.0, 0)DATAИ`DATA(И lr = Red.val - (ColourVar.val / 2)DATA(И lg = Green.val - (ColourVar.val / 2)DATA(Й@ lb = Blue.val - (ColourVar.val / 2)DATAЙDATAЙ mr = Red.valDATAК mg = Green.val DATAКH mb = Blue.valDATAКDATA(К hr = Red.val + (ColourVar.val / 2)DATA(Л hg = Green.val + (ColourVar.val / 2)DATA(Лh hb = Blue.val + (ColourVar.val / 2)DATAЛDATAЛ glColor3f(lr, lg, lb)DATA М8 glRectf(20, 180, 120, 200)DATAМ glColor3f(mr, mg, mb)DATA М glRectf(125, 180, 225, 200)DATAН  glColor3f(hr, hg, hb)DATA Нh glRectf(230, 180, 330, 200)DATAНDATAН glColor3f(0,0,0)DATAО(DATATОX Spacing = Slider("Spacing ", Slide, 20, 155, 310, 20, Spacing.val, 0.0, 1.0, 0)DATA\О BrickBevel = Slider("Bevel ", Slide, 20, 130, 310, 20, BrickBevel.val, 0.0, MaxBevel, 0)DATA`П` BrickLength = Slider("Length ", Slide, 20, 100, 150, 20, BrickLength.val, 0.1, MaxLength, 0)DATA`П BrickHeight = Slider("Height ", Slide, 20, 75, 150, 20, BrickHeight.val, 0.1, MaxHeight, 0)DATAdР BrickBreadth = Slider("Bredth ", Slide, 20, 50, 150, 20, BrickBreadth.val, 0.1, MaxBredth, 0)DATAСDATA\С@ LengthVar = Slider("L Var ", Slide, 180, 100, 150, 20, LengthVar.val, 0.0, MaxLVar, 0)DATA\С HeightVar = Slider("H Var ", Slide, 180, 75, 150, 20, HeightVar.val, 0.0, MaxHVar, 0)DATA\ТP BreadthVar = Slider("B Var ", Slide, 180, 50, 150, 20, BreadthVar.val, 0.0, MaxBVar, 0)DATAТDATAУ # Create ButtonDATA@УH Button("Create", PCreateWall, 25, 20, 50, 20, "Create Wall")DATAУDATA(У # ------ Other GUI Stuff ------ DATAФ@ # CreditsDATAФ glRasterPos2f(20, 500)DATA8Ф Text("Walls & Tiles 0.6 Alpha by Johan Badenhorst")DATAХ0 # Exit ButtonDATA@Хp Button("Exit", 1, 275, 20, 50, 20, "Close Walls & Tiles")DATAХDATA Ц # ------ Events ------ DATAЦ`def event(evt, val):DATA$Ц if (evt == QKEY and not val):DATAЦ Exit()DATAЧ8DATA Чh # ------ Button Events ------DATAЧdef bevent(evt):DATAЧDATA Ш( # ExitDATAШ` if (evt == 1):DATAШ Exit()DATAШDATAЩ # Create WallDATAЩP elif evt == PCreateWall:DATA(Щ MakeWall("Wall", IsVertical.val)DATAЩ Blender.Redraw()DATAЪ8 DATAЪh # Toggle Surface TypeDATAЪ elif evt == TIsBricks:DATAЪ if IsBricks.val == 1:DATAЫ@ IsTiles.val = 0DATA Ы else:DATAЫ IsTiles.val = 1DATA$Ь Register(draw, event, bevent)DATAЬXDATAЬ elif evt == TIsTiles:DATAЬ if IsTiles.val == 1:DATAЭ IsBricks.val = 0DATA Э` else:DATAЭ IsBricks.val = 1DATA$Э Register(draw, event, bevent)DATAЮ0DATA$Ю` # Toggle surface orientationDATAЮ elif evt == THor:DATA Ю if IsHorizontal.val == 1:DATAЯH IsVertical.val = 0DATA Я else:DATAЯ IsVertical.val = 1DATA$а Register(draw, event, bevent)DATAа`DATAа elif evt == TVert:DATA а if IsVertical.val == 1:DATA б( IsHorizontal.val = 0DATA бx else:DATAб IsVertical.val = 1DATA$б Register(draw, event, bevent)DATAвH DATAвxDATAв # Update slider valuesDATAв elif evt == Slide:DATA$г8 Register(draw, event, bevent)DATAгDATA$г # ------ Register Events ------DATA дRegister(draw, event, bevent)TXhиJ|TXCity05.pyй йййFPDATA0й /Applications/BlenderThings/Scripts/City05.pyDATAййDATAйкй`2DATAккXйADATAкXккDATAкккX D ViDATAкл0кP %x1DATAл0лxкButtDATAлxлл0DATAлмлx D @DATAммPлhDATAмPммDATAмммPDATAмн(м #|DATAн(нpмp2DATAнpнн(gnDATAнонp@DATAооHн0$|DATAоHоо#lDATAоооH$[8DATAоп о0$XDATAп пhоDATAпhпп $DATAпппh$4DATAп@пh$DATA@п#,DATA@pDATA@3 07DATA`64 20DATA`.appDATA` 5 18DATA8P4 20DATA8€ DATA€84 18DATA€ ($ rDATAX 4 18DATAXà DATAàX eDATA0à 8appDATA0x h4 20DATAx0 4 09DATAx 4 18DATAP @$4 18DATAPŘ 02 SDATAŘP 36 TDATA(Ř 20 UDATA(p `0CacDATApƸ( dDATAƸp $88 cDATAHƸ H/AppDATAHǐ LDATAǐH 2DATA ǐpDATA hX|DATAhȰ $DATAȰhDATA@ȰHDATA@ɈxDATAɈ@DATAɈDATA`P$DATA`ʨ&DATAʨ`DATA8ʨ( DATA8ˀ`#DATAˀ8|DATAˀDATAX8$DATAX̠8DATA̠XDATA0̠DATA0xXDATAx0 DATAx DATAP!DATAPΘ`DATAΘP`DATA(ΘDATA(p(DATApϸ(xDATAϸp;DATAHϸ0DATAHА`*@DATAАHP DATA АDATA hPDATAhѰ DATAۈ@"pDATAۈ"X-8DATA`"DATA`ܨ#"DATAܨ`#XDATA8ܨ#"DATA8݀#DATA݀8$(s0DATA݀$h tDATAX$DATAXޠ$ qDATAޠX%(tDATA0ޠ%XPDATA0x%DATAx0%ѠDATAx& DATAP&hDATAP&wXDATAP&zDATA('(DATA(p'p"@DATAp('"DATAp('DATAH(hDATAH(DATAH(`DATA )8.DATA h) DATAh )8DATAh*@DATA@*p"DATA@*(|DATA@+"`DATA+h(@DATA`+DATA`,DATA`,H6@DATA8,xDATA8, DATA8,DATA-0!;DATAX-hDATAX-DATAX.DATA0.X&pDATA0x.WXDATAx0. XDATAx/ DATAP/`0DATAP/DATAP/XDATA(0  DATA(p0`Q DATAp(0S DATAp0 DATAH1\DATAH1PDATAH18DATA 1 DATA h2(DATAh 2hDATAh2DATA@2 DATA@3(P`DATA@3hDATA3 `DATA`3-DATA`40DATA`4`#DATA84DATA85DATA850-YDATA5-_DATAX5XDATAX6 XDATAX6hDATA06 DATA0x7DATAx070DATAx7x3@DATAP7VDATAP8,\DATAP8pFDATA(8DxDATA(p9`(DATAp(9U`DATAp9DATAH: DATAH:h-@DATAH:B@DATA ;8CDATA h;chDATAh ;DATAh< [ DATA@(,(gDATA8>DATA8? DATA8?XDATA?>DATAX?ӠDATAX@ DATAX@PDATA0@(DATA0x@DATAx0AW DATAxAH&@DATAPADATAPADATAPB.DATA(BxD`DATA(pBנDATAp(C DATApC` `DATAHCDATAHC8DATAHD"7XDATA D``DATA hDDATAh D"@DATAhE(DATA@EXDATA@EXDATA@E<(DATAFDATA # City Block GeneratorDATA` # by Johan BadenhorstDATA # GPLDATA # Version 0.5 BetaDATA riDATAPimport randommDATAfrom random import *inDATAfrom Blender.BGL import *DATA from Blender.Draw import *DATAhimport BlenderDATAfrom Blender import NMeshDATADATA$ def MakeBuilding(X, Y, Z, L, W, H):DATApDATA BMesh = NMesh.GetRaw()DATA # Building verticesDATA(0 BVerts = ([X - L/2, Y - W/2, Z], 5{DATA$ [X + L/2, Y - W/2, Z],DATA( [X + L/2, Y + W/2, Z], caDATA(0 [X - L/2, Y + W/2, Z], ftDATAgnDATA( [X - L/2, Y - W/2, H], DATA( [X + L/2, Y - W/2, H], stDATA(h [X + L/2, Y + W/2, H], 5{DATA$ [X - L/2, Y + W/2, H])DATA GDATA@ for V in BVerts:DATA8 BMesh.verts.append(NMesh.Vert(V[0], V[1], V[2]))DATA20DATA  # RoofDATAP BFace = NMesh.Face()DATA FaceVerts = 3, 2, 1, 0SDATA for i in FaceVerts:DATA( ( BFace.v.append(BMesh.verts[i])0 DATA   BMesh.faces.append(BFace)-0DATA DATA   # SidesDATA 8 PDATA h BFace = NMesh.Face()DATA  FaceVerts = 0, 1, 5, 4DDATA  for i in FaceVerts:DATA( @ BFace.v.append(BMesh.verts[i])ckDATA   BMesh.faces.append(BFace) 1DATA DATA  BFace = NMesh.Face()DATA ` FaceVerts = 2, 3, 7, 6DATA  for i in FaceVerts:DATA(  BFace.v.append(BMesh.verts[i])jDATA  H BMesh.faces.append(BFace)DATA DATA  BFace = NMesh.Face()DATA FaceVerts = 4, 7, 3, 0 DATAX for i in FaceVerts:DATA( BFace.v.append(BMesh.verts[i])DATA  BMesh.faces.append(BFace)DATAHDATAx BFace = NMesh.Face()DATA FaceVerts = 1, 2, 6, 5DATA for i in FaceVerts:DATA(P BFace.v.append(BMesh.verts[i])ΘDATA  BMesh.faces.append(BFace)hDATADATA ( # FloorDATA` BFace = NMesh.Face()DATA FaceVerts = 4, 5, 6, 7DATA for i in FaceVerts:DATA(8 BFace.v.append(BMesh.verts[i])5{DATA  BMesh.faces.append(BFace)cDATADATA BMesh.hasFaceUV(1)DATAX BMesh.update(1) +DATA return BMeshDATA DATA def MakeCluster(X, Y, Z, CHt):DATA`DATA CMesh = NMesh.GetRaw()DATA  BW = random() * 0.25 + 0.25DATA ( BL = random() * 0.25 + 0.25DATA x BH = random() * 0.5 + CHt DATA< BMesh = MakeBuilding(X - 0.25, Y - 0.25, Z, BL, BW, BH) DATA00DATA ` for vert in BMesh.verts: DATA  CMesh.verts.append(vert)DATA  for face in BMesh.faces: DATA P CMesh.faces.append(face)DATADATA  BW = random() * 0.25 + 0.25DATA   BL = random() * 0.25 + 0.25DATA p BH = random() * 0.5 + CHt DATA< BMesh = MakeBuilding(X - 0.25, Y + 0.25, Z, BL, BW, BH) DATA((DATA X for vert in BMesh.verts: DATA  CMesh.verts.append(vert)DATA  for face in BMesh.faces: DATA H CMesh.faces.append(face)DATA&DATA  BW = random() * 0.25 + 0.25DATA  BL = random() * 0.25 + 0.25DATA h BH = random() * 0.5 + CHt DATA< BMesh = MakeBuilding(X + 0.25, Y + 0.25, Z, BL, BW, BH) DATA ^DATA P for vert in BMesh.verts: DATA  CMesh.verts.append(vert)DATA  for face in BMesh.faces: DATA @ CMesh.faces.append(face)DATA1DATA  BW = random() * 0.25 + 0.25DATA  BL = random() * 0.25 + 0.25DATA ` BH = random() * 0.5 + CHt DATA< BMesh = MakeBuilding(X + 0.25, Y - 0.25, Z, BL, BW, BH) DATA( Button("Create", PCreate, 200, 5, 50, 20)DATA,> Button("Exit", PExit, 260, 5, 50, 20)DATA>DATA?def Event(evt, val):VDATA?X if not val:DATA? if evt == QKEY:{DATA? Exit()DATA@ DATA@P if evt == ESCKEY:DATA@ Exit()DATA@8DATAAdef BEvent(evt):l(DATA(AH global HasClust, CF, BL, BW, BH, CHDATAADATAA if evt == PCreate:`DATA0B ClustFreq = float(HasClust.val * CF.val)DATAHBx MakeBlock(BL.val, BW.val, 3.0, 0.1, ClustFreq, CH.val, BH.val)5{DATAB DATAC  if evt == PExit:DATAC` Exit() DATAC4DATAC if evt == Slide:DATA$D Register(GUI, Event, BEvent)DATAD`V@DATAD if evt == TClust:5{DATA$D Register(GUI, Event, BEvent)DATAE(DATAEX DATA ERegister(GUI, Event, BEvent)p DATAEDATAFBlender.Redraw() TXhJиTXtesselate8_1.pyK4KxѡKxKxDATA4K/Applications/BlenderThings/Scripts/tesselate8_1.pyDATAKxKѢADATAKLKxѢ`DATALLPKѢ#e EdDATALPLLѣser DATALLLPѣHDATALM(LѣDATAM(MpLѣDATAMpMM(ѤDATAMNMpѤhDATANNHMѤDATANHNNѤ6/DATANNNHѥ@DATANO NѥDATAO OhNѥDATAOhOO Ѧ" DATAOOOhѦPF DATAOP@OѦDATAP@POѧPDATAPPP@ѧDATAPQPѧ8DATAQQ`PѨH"02 CDATAQ`QQѨ0esEDATAQQQ`Ѩ!4 22DATAQR8QѩHg4 23DATAR8RQѩ902 FDATARRR8ѪHF4 18DATARSRѪ6DATASSXRѫ(64 00DATASXSSѫ90 IDATASSSXѫDATAST0SѬ3 23DATAT0TxSѬP" rDATATxTT0Ѭ: rDATATUTxѭ!.appDATAUUPTѭX?GoldDATAUPUUѭ3 17DATAUUUPѮ.DATAUV(UѮp&FRDATAV(VpUѮ7DATAVpVV(ѯ0! rDATAVWVpѯO2 00DATAWWHVѰ2 rDATAWHWWѰ`95 14DATAWWWHѰ DATAWX Wѱ16HDATAX XhWѱx DATAXhXX ѱGse.aDATAXXXhѲ8zXDATAXY@XѲh 4DATAY@YXѲ4DATAYYY@Ѳ7KDATAYZYѳFREEDATAZZ`Yѳ`!FREEDATAZ`ZZѳ7DATAZZZ`ѳxDATAZ[8ZѴ(&7DATA[8[ZѴ'DATA[[[8Ѵ7DATA[\[ѵ7|DATA\\X[ѵ`7DATA\X\\ѵ%7DATA\\\Xѵ 7DATA\]0\Ѷ z DATA]0]x\ѶhDATA]x]]0Ѷ%7DATA]^]xѶ(FREEDATA^^P]ѷH($DATA^P^^ѷ7DATAщщXш=LDATAщXщщ`FREEDATAщщщX'DATAщъ0щ7DATAъ0ъxщ0*DATAъxъъ0 DATAъыъxDATAыыPъ'DATAыPыыhDATAыыыPADATAыь(ы(DATAь(ьpыh&FREEDATAьpьь(;DATAьэьp($DATAээHьDATAэHээDATAэээH$DATAэю эH)DATAю юhэ7DATAюhюю DATAюююh($points de chaque faceDATA$ for v in face.v:DATAD0 #boucler sur les coordonnees de chaque pointDATA4Р for n0 in range(len(accu1)):geDATAT #additionner les valeurs pour trouver le centre geometriqueDATA0р n[n0]=n[n0]+v.co[n0]DATA@ #meme operation sur la face actuelleDATA8P accu2[n0]=accu2[n0]+v.co[n0]ZDATAҸ n0=0DATA\DATA40 #centre geometrique de la facetteEDATA0Ӑ for n0 in range(len(accu2)):DATA4 accu2[n0]=accu2[n0]/(lgf1*1.0)DATAP DATA$Ԑ if DistanceTG.val:DATA  dv=face.vDATA80 EquationPlan (dv[0],dv[1],dv[2])DATA(՘ if DistNegTG.val:DATAP locZ=[-a*distance.val,-b*distance.val,-c*distance.val]DATAp else:DATALָ locZ=[a*distance.val,b*distance.val,c*distance.val]DATA0 else:DATA(x locZ=[0.0,0.0,0.0]DATADATAP #creation de nouveaux points l'interieur de la facette EEDATA$؀ for v in face.v:DATA< #appel de la methode d'ajout de pointDATA<8 v1= Blender.NMesh.Vert(0.0, 0.0, 0.0)DATA,٠ #calculer la positionDATA4 for n0 in range(len(accu2)):DATAXX v1.co[n0]=(v.co[n0]-accu2[n0])*epaisseur.val+accu2[n0]+locZ[n0]DATADATADATA4@ #ajouter le point la listeEEDATA(۠ me.verts.append(v1)DATA, me2.verts.append(v1)DATAP n0=0DATAܘ DATAP #ne pas depasser la fin de la liste des points de cette facetteDATA H n2=len(face.v)DATAݘLDATA, f1= Blender.NMesh.Face()DATA,  f1.v.append(face.v[n2-1])DATA(x f1.v.append(face.v[0])DATA4 f1.v.append(me.verts[dern_long[1]])DATA<0 f1.v.append(me.verts[dern_long[1]+n2-1])DATA(ߘ me2.faces.append(f1)`DATA DATA80 #boucler sur les points de cette facetteimDATA( for n3 in range(n2-1):DATA< #creation des facettes supplmentaires DATA0X f1= Blender.NMesh.Face()DATA, f1.v.append(face.v[n3])DATA0 f1.v.append(face.v[n3+1])DATA@p f1.v.append(me.verts[dern_long[1]+n3+1])DATA< f1.v.append(me.verts[dern_long[1]+n3])DATAH DATA$ if (n3==0): lDATA, me2.faces[n1]=f1DATA8 else:DATA0 me2.faces.append(f1)EEDATADATA8 #boucler sur les points de cette facetteimDATA(x if FaceinterneTG.val:DATA, f1= Blender.NMesh.Face()DATA(( for n3 in range(n2):DATA@ #creation des facettes supplmentaires DATA@ f1.v.append(me.verts[dern_long[1]+n3])DATA` ZDATA( me2.faces.append(f1)DATADATA,0 dern_long[1]=len(me.verts)DATA  else:DATA  for f in me.faces:EDATA( f1=Blender.NMesh.Face()DATA h for v in f.v:DATAD v1= Blender.NMesh.Vert(v.co[0],v.co[1],v.co[2])DATA( DATA(h me2.verts.append(v1)DATA< f1.v.append(me2.verts[len(me2.verts)-1]) DATA(( me2.faces.append(f1)DATADATA #me2.has_col= 0DATA( #me2.has_uvco= 0 ZDATA,H Blender.NMesh.PutRaw(me2,nom) DATA  DATA def testselect(test,epaisseur):DATA(( ob= Blender.Object.GetSelected()DATA if len(ob)<1:lDATA returnDATA ob=ob[0]DATA@ me=ob.dataDATA nom=me.nameDATA if (me==None):DATA returnDATA(@ tesselate(me,ob.loc,nom,epaisseur)DATADATA def draw():DATA` global lang,epaisseur,distance,DistanceTG,FaceinterneTG,DistNegTG,SplitTotalTG,IterationDATA  glColor3f(0.7, 0.7, 0.7)DATA$ glClear(GL_COLOR_BUFFER_BIT)EDATA 0 glColor3f(0.1, 0.1, 0.15)DATA glRasterPos2f(20, 210)DATADATA, Text("Script Python de Tessalisation")DATAPDATA glRasterPos2f(20, 190)DATA, Text("Jean-michel Soler, Octobre 2000")DATA  l=int(lang.val)DATAD` lang = Toggle(lg[l]['Lang'], 2, 220, 200, 60, 18, lang.val )DATAh epaisseur=Slider(lg[l]['EpXY'], 2, 20, 160, 260, 18, epaisseur.val, 0.0, 0.99, 0,lg[l]['EpXY_doc'])DATA`h DistanceTG = Toggle(lg[l]['EpZ'], 2, 20, 120, 180, 18, DistanceTG.val, lg[l]['EpZ_doc'])EEDATA\ DistNegTG = Toggle(lg[l]['NgZ'], 2, 200, 120, 80, 18, DistNegTG.val, lg[l]['NgZ_doc'])DATADATAl FaceinterneTG = Toggle(lg[l]['FintTG'], 4, 20, 100, 260, 18, FaceinterneTG.val, lg[l]['FintTG_doc'])TADATAhH distance=Slider(lg[l]['EpQZ'], 2, 20, 140, 260, 18, distance.val, 0.001, 1.99,0,lg[l]['EpQZ_doc'])DATADATAP Iteration = Number("Iteration: ", 2, 20, 35, 260, 18, Iteration.val,0,8 )DATA DATA glRasterPos2f(20, 89)DATA Text(lg[l]['T1'])DATAXDATA glRasterPos2f(20, 77) DATA Text(lg[l]['T2'])DATA DATAP DATAd SplitTotalTG = Toggle(lg[l]['FrgT'], 4, 20, 55, 260, 18, SplitTotalTG.val, lg[l]['FrgT_doc'])EDATA8DATAH #boutons de sortieDATA( Button("Exit", 1, 40, 10, 80, 19)DATA$ #bouton de cration de la formeDATA08 Button(lg[l]['Act'], 3, 140, 10, 80, 19)DATADATAdef event(evt, val): DATA( if (evt== QKEY and not val): Exit()DATAhDATAdef bevent(evt): DATA  global epaisseur,IterationDATA( if (evt== 1):DATAh Exit()DATA\DATA elif (evt== 3):DATA  while Iteration.val!=0:DATA$h testselect(0,epaisseur)DATA, Iteration.val=Iteration.val-1ADATA Iteration.val=1DATA$X Blender.Window.Redraw() DATA DATA DATA  elif (evt==5) or (evt==2):DATA h Blender.Window.Redraw()DATA!DATA Register(draw, event, bevent)DATA8DATAhEEDATA!,TXhJTXpointalign.py҂ DATA4/Applications/BlenderThings/Scripts/pointalign.pyDATA8҃@headDATA8҃x;ODATA8҃2ADATA҄equeDATAX҄H DATAX҄ AudDATAX҄NhDATA 0҅FREEDATA 0 x҅H /DATA x  0҅6DATA   x҆FREEDATA  P ҆P7logoDATA P  ҆08-JDATA   P҆3 DATA  ( ҇X DATA ( p ҇ DATA p  (҇nterDATA   p҇LerThDATA  H ҈p5 DATA H  ҈;NhDATA   H҉@18-SDATA   ҉p;irrDATA  h ҉& DATA h  Ҋ0DATA   hҊ`Prwx DATA @ Ҋ11-DDATA@ ҋQLDATA@ҋHlateDATAҋxQLDATA`ҋ DATA`ҋ18-SDATA`Ҍ0QLDATA8Ҍ` DATA8Ҍ DATA8ҌQ DATAҍr-x DATAXҍ@ DATAXҍnal DATAXҍ10-DDATA0Ҏr-x DATA0xҎXDATAx0ҎiseDATAxҎ DATAPҏ rwx DATAPҏ`"DATAPҏ"KDATA(Ґ"P5{DATA(pҐPQLDATAp(ҐQ DATApҐ DATAHґQDATAHґ`ner DATAHґexitDATA Ғ.DATA hҒ`.NtDATAh Ғ.DATAhғ P5{DATA@ғp]DATA@ғDATA@ҔQ DATAҔ`_DATA`ҔFREEDATA`ҕDATA`ҕPDATA8ҕDATA8ҕDATA8Җ@CDATAҖ!DATAXҖDATAXҗDATAXҗ@DATA0җDATA0xҗ5YlDATAx0җDATAxҘ0SDATAPҘxRendDATAPҘDATAPҙ6AnimDATA(ҙh6DATA(pҙ6MateDATAp(Қ8 DATApҚpDATAHҚ& DATAHҚDATAHқ8ZDATA қDATA hқDATAh ҜKDATAhҜPDATA @Ҝ,/homDATA @ Ҝ1DATA   @ҝP)DATA ! ҝDATA!!` ҝ9A DATA!`!!ҞXDATA!!!`ҞDATA!"8!Ҟ;DATA"8"!ҟP)DATA"""8ҟA DATA"#"ҟ)Q DATA##X"ҠHDATA#X##Ҡx1Q DATA###XҠFREEDATA#$0#ҡCDATA$0$x#ҡ`DATA$x$$0ҡFREEDATA$%$xҡDATA%%P$Ң0DATA%P%%Ңp,DATA%%%PҢ1&DATA%&(%ң0)FREEDATA&(&p%ң9DATA&p&&(ңDATA&'&pҤ8FREEDATA''H&Ҥ +DATA'H''Ҥ,|DATA'''Hҥ5,DATA'( 'ҥP5,DATA( (h'ҥf5DATA(h(( Ҧ()]DATA(((hҦQ DATA()@(ҦDATA)@)(ҦOutpDATA)))@ҧ0^DATA)*)ҧx 3DATA**`)ҧQ DATA*`**Ҩ DATA***`Ҩ8$DATA*+8*Ҩ$DATA+8+*Ҩ$DATA+++8ҩ@ DATA+,+ҩ_DATA,,X+ҩ5DATA,X,,ҩDATA,,,XҪ8DATA,-0,Ҫ.DATA-0-x,ҪHqDATA-x--0ҫ`=DATA-.-xҫ!DATA..P-Ҭ DATA.P..Ҭh.FREEDATA...PҬ$DATA./(.ҭ $DATA/(/p.ҭx$Q DATA/p//(ҭ$Q DATA/0/pҮ($\DATA00H/Ү$Q DATA0H00ҮQ DATA000HүQ DATA01 0үHQ DATA1 1h0үx(\DATA1h11 үQ DATA111hҰ'Q DATA12@1Ұh5Q DATA2@21Ұ$]DATA222@ұ(Q DATA232ұQ DATA33`2Ҳ )Q DATA3`33ҲxQ DATA333`ҲQ DATA3483ҲDATA4843ҳSDATA4448ҳXQ DATA454ҳDATA55X4ҳbLampDATA5X55ҴX\FREEDATA555XҴLDATA5605ҵhFDATA606x5ҵDATA6x660ҵ#DATA676xҶ8$csDATA77P6Ҷ#TextDATA7P77Ҷ*^DATA777Pҷ8OutpDATA78(7ҷh ks/PDATA8(8p7ҷgDATA8p88(Ҹ@gDATA898pҸgFREEDATA99H8ҹpEditDATA9H99ҹK^DATA999HҺKEditDATA9: 9ҺKDATA: :h9һ^DATA:h:: һ8FDATA:::hһkLDATA:;@:һDATA;@;:Ҽ0 DATA;;;@ҼDATA;<;Ҽ/DATA<<`;ҽ0DATA<`<<ҽDATA<<<`ҽSounDATA<=8<Ҿ DATA=8=<ҾpDATA===8ҾeDATA=>=ҿtDATA>>X=ҿ8 DATA>X>>ҿpLDATA>>>XҿLwDATA>?0>pLTextDATA?0?x>DATA?x??0 RadiDATA?@?xp"^DATA@@P?)|,DATA@P@@^DATA@@@Ph"~ DATA@A(@¸"Q DATAA(Ap@/FREEDATAApAA(hQ DATAABApøFREEDATABBHAFREEDATABHBBXDATABBBHĨFDATABC BDATAC ChB@EditDATAChCC p ^DATACCChŨMFREEDATACD@C(MDATAD@DCƨMDATADDD@(@DATADEDXDATAEE`DǨ"geDATAE`EE)DATAEEE`PDATAEF8EȠ"^DATAF8FE#Ȑ,DATAFFF8@/Q DATAFGFɠVDATAGGXFDATAGXGG@DATAGGGXʐQ DATAGH0GDATAH0HxG0DATAHxHH0xDATAHIHx˨ DATAIIPHHQ DATAIPIIXDATAIIIP̈Q DATAIJ(I!FREEDATAJ(JpI(&BDATAJpJJ(̀/DATAJKJpQDATAKKHJ0ȞDATAKHKK΀ DATAKKKH /d/DATAKL K FREEDATAL LhKpDATALhLL ϸDATALLLhBackDATALM@L(Q DATAM@MLx!FREEDATAMMM@%DATAMNM /DATANN`MрDATAN`NNDATANNN` DATANO8Np Q DATAO8ONDATAOOO8DATAOPOXDATAPPXOӈDATAPXPP"_DATAPPPX(3FREEDATAPQ0PԈQ DATAQ0QxP"FREEDATAQxQQ0(#DATAQRQxx/DATARRPQDATARPRR(DATARRRPx FDATARS(R DATAS(SpRDATASpSS(hDATASTSpװSDATATTHS0DATATHTT`DATATTTHذ"DATATU T3AnimDATAU UhT`DATAUhUU ٰ"LinkDATAUUUh#^DATAUV@UP/DATAV@VUڰ^DATAVVV@œDATAVWVP Q DATAWW`V۠ FREEDATAW`WW DATAWWW`@DATAWX8W܈WDATAX8XWDATA҃@#!BPYXDATA҃xriDATA4҃""" Registrationsinformationen fuer Blender-MenuesDATA҄Name: 'PointAlign'DATA҄HBlender: 2353DATA҄Group: 'Mesh'ODATA ҄Tip: 'Align selected vertices'DATA҅"""DATA$҅H__author__ = "Thomas Buschhardt" DATA8҅__url__ = ["Script Site,www.buschhardt.de/pointalign"]DATA ҆__version__ = "0.7 20050117"DATA8҆P__email__ = ["Thomas Buschhardt, thomas:buschhardt*de"]DATA҆__bpydoc__ = """\ DATA4҆This script implements vertex alignment in Blender.DATA҇XDATA҇Usage:DATA҇teDATAP҇Select the mesh you want to work on, enter Edit Mode and select the verticestDATA8҈pto alignment. Set the 3D-Cursor on a target position.MDATA<҈Then run this script from the 3d View's Mesh->Scripts menu.DATA҉@EEDATA<҉pYou can control the alignment on the global X,Y and Z axis.DATA(҉To quit the script press 'ESC' or 'Q'.DATAҊ0x DATATҊ`Notes: You can undo and redo your steps just like with normal mesh operations in1 DATA ҊBlender.EEDATAҋ"""DATAҋH##DATAҋx# Hauptmodule einladenDATAҋ##DATAҋimport BlenderDATAҌ07 DATAҌ`##DATAҌ# globale VariablenDATAҌ##DATAҍEREIGNIS_KEIN = 1EDATAҍ@EREIGNIS_ZEICHNEN = 2 DATAҍEREIGNIS_BEENDEN = 3x DATAҍEREIGNIS_EINGABE = 4 DATAҎEREIGNIS_CURSOR = 5DATAҎXEREIGNIS_LOKAL = 6DATAҎEREIGNIS_GLOBAL = 7DATAҎEREIGNIS_VIEWPORT = 8LDATAҏ EREIGNIS_OBJEKT = 9DATA$ҏ`AENDERE_X = Blender.Draw.Create(0)DATA$ҏAENDERE_Y = Blender.Draw.Create(0)DATA$ҐAENDERE_Z = Blender.Draw.Create(0)DATAҐPORIGINALWERTE=[]_SDATAҐORIGINALOBJEKT=0t DATAҐORIGINALINDEX=[]EEDATA ґXX = Blender.Draw.Create("")EEDATA ґ`YY = Blender.Draw.Create("")tsDATA ґZZ = Blender.Draw.Create("")DATA0ҒXX.val = str(Blender.Window.GetCursorPos()[0])DATA0Ғ`YY.val = str(Blender.Window.GetCursorPos()[1])DATA0ҒZZ.val = str(Blender.Window.GetCursorPos()[2])DATA ғ LOK_X=Blender.Draw.Create(0)DATA ғpLOK_Y=Blender.Draw.Create(0)EEDATA ғLOK_Z=Blender.Draw.Create(0)`lDATA ҔGLO_X=Blender.Draw.Create(0)DATA Ҕ`GLO_Y=Blender.Draw.Create(0)DATA ҔGLO_Z=Blender.Draw.Create(0)DATA ҕDIR_X = Blender.Draw.Create(0)DATA ҕPDIR_Y = Blender.Draw.Create(0)DATA ҕDIR_Z = Blender.Draw.Create(0)DATA ҕZIEL = Blender.Draw.Create(0)hDATA Җ@QUELLE = Blender.Draw.Create(0)DATA$ҖRICHTUNG = Blender.Draw.Create(0)DATAҖDATAҗ##DATAҗ@# HilfsfunktionenDATAҗ##DATAҗDATA җ# Umwandlungsfunktion VektorEEDATAҘ0def mulmatvec4x3(a, b):DATAҘx # a is vector, b is matrixDATAҘ r = [0, 0, 0]DATA8ҙ r[0] = a[0]*b[0][0]+a[1]*b[1][0]+a[2]*b[2][0]+b[3][0]DATA8ҙh r[1] = a[0]*b[0][1]+a[1]*b[1][1]+a[2]*b[2][1]+b[3][1]DATA8ҙ r[2] = a[0]*b[0][2]+a[1]*b[1][2]+a[2]*b[2][2]+b[3][2]DATA Қ8 return rDATAҚpDATA(Қ# Originalwerte des Objektes speichernDATAҚdef original():DATAқ8 global ORIGINALWERTE^DATAқ global ORIGINALOBJEKTDATAқ global ORIGINALINDEXDATAҜ ORIGINALWERTE=[]DATAҜP ORIGINALINDEX=[]%DATA0Ҝ Ausgangszustand = Blender.Window.EditMode()DATA4Ҝ if Ausgangszustand==1:Blender.Window.EditMode(0)DATA,ҝP Objekt = Blender.Object.GetSelected()[0]ADATAҝ ORIGINALOBJEKT=ObjektDATA<ҝ if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-ObjektDATAҞX Gitter = Objekt.getData()DATAҞ for i in Gitter.verts:DATA<Ҟ if i.sel:ORIGINALWERTE.append([i.co[0],i.co[1],i.co[2]])DATA,ҟP if i.sel:ORIGINALINDEX.append(i.index)DATAҟ ORIGINALINDEX.sort()DATA,ҟ Blender.Window.EditMode(Ausgangszustand)EDATAҠHDATA4Ҡx# Testet ob gespeichertes Objekt noch aktuell istDATAҠdef oritest():DATAҡ global ORIGINALWERTEDATAҡ` global ORIGINALOBJEKTDATAҡ global ORIGINALINDEXDATAҡ anzahlPunkte=0DATAҢ0 indexliste=[]DATA0Ңp Ausgangszustand = Blender.Window.EditMode()DATA4Ң if Ausgangszustand==1:Blender.Window.EditMode(0)DATA,ң0 Objekt = Blender.Object.GetSelected()[0]DATA<ң if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-ObjektpDATAң Gitter = Objekt.getData()DATAҤ8 for i in Gitter.verts:lDATAҤ if i.sel:DATA Ҥ indexliste.append(i.index)DATAҥ anzahlPunkte+=1DATAҥP indexliste.sort()DATAhҥ if len(ORIGINALWERTE)!=anzahlPunkte or indexliste!=ORIGINALINDEX or ORIGINALOBJEKT!=Objekt:original()DATA,Ҧ( Blender.Window.EditMode(Ausgangszustand)ADATAҦDATAҦDATA Ҧ# Loeschen aller AenderungenDATAҧ0def undochange(Gitter):DATAҧx Zaehler = 0DATAҧ for i in Gitter.verts:DATA Ҩ if i.sel:DATA(Ҩ8 i.co[0]=ORIGINALWERTE[Zaehler][0]DATA(Ҩ i.co[1]=ORIGINALWERTE[Zaehler][1]DATA(Ҩ i.co[2]=ORIGINALWERTE[Zaehler][2] DATAҩ@ Zaehler+=1DATAҩ Gitter.update()DATAҩNDATAҩ# sucht die ObjektgrenzenDATA Ҫ8def limitfind(Objekt,lokal=1):DATA0Ҫ if lokal==1:hilf=Objekt.getData().verts[0].coDATALҪ else:hilf=mulmatvec4x3(Objekt.getData().verts[0].co,Objekt.getMatrix())DATA@ҫ` grenzen=[hilf[0],hilf[0],hilf[1],hilf[1],hilf[2],hilf[2]] DATA$ҫ for i in Objekt.getData().verts:DATAҬ  if lokal==1:a=i.coDATA0Ҭh else:a=mulmatvec4x3(i.co,Objekt.getMatrix())DATA(Ҭ if a[0]grenzen[1]:grenzen[1]=a[0]DATA(ҭx if a[1]grenzen[3]:grenzen[3]=a[1]EEDATA(Ү( if a[2]grenzen[5]:grenzen[5]=a[2]DATAҮ return grenzenDATAүDATAүHJDATA,үx# Angleichen des Objektes an den 3D-ViewTADATAүdef alignview():DATA(Ұ for i in Blender.Object.GetSelected():DATA8Ұh if i.getType()=="Mesh":#Vorpruefung auf Mesh-Objekt DATA(Ұ sm=Blender.Window.GetViewMatrix()N|DATAұ( m=Blender.Mathutils.Matrix([sm[0][0],sm[1][0],sm[2][0]],[sm[0][1],sm[1][1],sm[2][1]],[sm[0][2],sm[1][2],sm[2][2]]).toEuler()DATAұ pi2=180/3.1415926 DATA,Ҳ  i.setEuler(m[0]/pi2,m[1]/pi2,m[2]/pi2)8DATAҲx returnDATAҲ DATAҲ##DATAҳ# grafische OberflaecheDATAҳX##DATAҳdef fenster():DATAdҳ global EREIGNIS_ZEICHNEN,EREIGNIS_BEENDEN,EREIGNIS_EINGABE,AENDERE_X,AENDERE_Y,AENDERE_Z,XX,YY,ZZDATA`ҴX global EREIGNIS_LOKAL,EREIGNIS_GLOBAL,GLO_X,GLO_Y,GLO_Z,LOK_X,LOK_Y,LOK_Z,EREIGNIS_VIEWPORTDATAPҴ global DIR_X,DIR_Y,DIR_Z,EREIGNIS_OBJEKT,EREIGNIS_KEIN,ZIEL,QUELLE,RICHTUNGDATAҵhIDATA ҵ Blender.BGL.glColor3f(1,1,1)DATA$ҵ Blender.BGL.glRasterPos2i(175,120)DATA(Ҷ8 Blender.Draw.Text("PointAlign 0.7")DATA$Ҷ Blender.BGL.glRasterPos2i(175,105)DATA,Ҷ Blender.Draw.Text("by Thomas Buschhardt")DATAҷ8DATAҷh###3D CursorDATAhҷ AENDERE_X=Blender.Draw.Toggle("X",EREIGNIS_ZEICHNEN,10,50,50,15,AENDERE_X.val,"an X-Achse angleichen")DATAhҸ@ AENDERE_Y=Blender.Draw.Toggle("Y",EREIGNIS_ZEICHNEN,10,30,50,15,AENDERE_Y.val,"an Y-Achse angleichen")DATAhҸ AENDERE_Z=Blender.Draw.Toggle("Z",EREIGNIS_ZEICHNEN,10,10,50,15,AENDERE_Z.val,"an Z-Achse angleichen")DATAҹpDATALҹ XX=Blender.Draw.String("",EREIGNIS_EINGABE,70,50,90,15,XX.val,30,"tool") DATALҺ YY=Blender.Draw.String("",EREIGNIS_EINGABE,70,30,90,15,YY.val,30,"tool") DATALҺ ZZ=Blender.Draw.String("",EREIGNIS_EINGABE,70,10,90,15,ZZ.val,30,"tool") DATAһDATAHһ8 Blender.Draw.PushButton("Refresh",EREIGNIS_CURSOR,70,70,90,15,"tool")DATAһ DATA һ Blender.BGL.glColor3f(0,0,0)EDATA$Ҽ0 Blender.BGL.glRasterPos2i(8,87)NDATA Ҽ Blender.Draw.Text("3D-Cursor")DATA0Ҽ Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA ҽ0 Blender.BGL.glVertex2i(5,90)lDATA ҽ Blender.BGL.glVertex2i(5,5)DATA ҽ Blender.BGL.glVertex2i(165,5)DATA Ҿ  Blender.BGL.glVertex2i(165,90)DATA Ҿp Blender.BGL.glVertex2i(70,90)DATAҾ Blender.BGL.glEnd()DATAҿ DATA ҿ8###lokaleDATAPҿp LOK_X=Blender.Draw.Slider(" X ",EREIGNIS_LOKAL,175,50,90,15,LOK_X.val,-1,1)EEDATAPҿ LOK_Y=Blender.Draw.Slider(" Y ",EREIGNIS_LOKAL,175,30,90,15,LOK_Y.val,-1,1)DATAPp LOK_Z=Blender.Draw.Slider(" Z ",EREIGNIS_LOKAL,175,10,90,15,LOK_Z.val,-1,1)DATADATA   Blender.BGL.glColor3f(1,1,1)DATA$p Blender.BGL.glRasterPos2i(175,70)DATA, Blender.Draw.Text("-1=min 1=max") DATA  Blender.BGL.glColor3f(0,0,0)DATA$h Blender.BGL.glRasterPos2i(172,87)DATA$¸ Blender.Draw.Text("local Limits")DATA0 Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA h Blender.BGL.glVertex2i(170,90)DATA ø Blender.BGL.glVertex2i(170,5)DATA  Blender.BGL.glVertex2i(270,5)DATA X Blender.BGL.glVertex2i(270,90)DATA Ĩ Blender.BGL.glVertex2i(235,90)DATA Blender.BGL.glEnd()EEDATA@DATA p###globaleDATAPŨ GLO_X=Blender.Draw.Slider(" X ",EREIGNIS_GLOBAL,280,50,90,15,GLO_X.val,-1,1)DATAP( GLO_Y=Blender.Draw.Slider(" Y ",EREIGNIS_GLOBAL,280,30,90,15,GLO_Y.val,-1,1)DATAPƨ GLO_Z=Blender.Draw.Slider(" Z ",EREIGNIS_GLOBAL,280,10,90,15,GLO_Z.val,-1,1)\DATA(DATA X Blender.BGL.glColor3f(1,1,1)oDATA$Ǩ Blender.BGL.glRasterPos2i(280,70)DATA, Blender.Draw.Text("-1=min 1=max") DATA P Blender.BGL.glColor3f(0,0,0)DATA$Ƞ Blender.BGL.glRasterPos2i(277,87)DATA$ Blender.Draw.Text("global Limits")DATA0@ Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA ɠ Blender.BGL.glVertex2i(275,90)DATA  Blender.BGL.glVertex2i(275,5)DATA @ Blender.BGL.glVertex2i(375,5)DATA ʐ Blender.BGL.glVertex2i(375,90)DATA  Blender.BGL.glVertex2i(350,90)DATA0 Blender.BGL.glEnd()DATAxEEDATA ˨###ViewportDATAL Blender.Draw.PushButton("Align",EREIGNIS_VIEWPORT,10,105,150,15,"tool")DATAXDATA ̈ Blender.BGL.glColor3f(0,0,0)DATA$ Blender.BGL.glRasterPos2i(8,127)DATA(( Blender.Draw.Text("Align to 3D-view")DATA0̀ Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA  Blender.BGL.glVertex2i(5,130)DATA 0 Blender.BGL.glVertex2i(5,100)DATA$΀ Blender.BGL.glVertex2i(165,100),DATA$ Blender.BGL.glVertex2i(165,130)DATA$  Blender.BGL.glVertex2i(107,130)|DATAp Blender.BGL.glEnd() DATAϸDATA###ObjektangleichDATA ( Blender.BGL.glColor3f(0,0,0)DATA$x Blender.BGL.glRasterPos2i(8,332)DATA( Blender.Draw.Text("Align to Object")dDATA0  Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA р Blender.BGL.glVertex2i(5,335)DATA  Blender.BGL.glVertex2i(5,140)DATA$  Blender.BGL.glVertex2i(210,140)DATA$p Blender.BGL.glVertex2i(210,335)DATA  Blender.BGL.glVertex2i(95,335)DATA Blender.BGL.glEnd()DATAXseDATA ӈ Blender.BGL.glColor3f(1,1,1)DATA$ Blender.BGL.glRasterPos2i(15,192)DATA4( Blender.Draw.Text("0=min 1=max 2=mid 3=pivot") DATA Ԉ Blender.BGL.glColor3f(0,0,0)DATA$ Blender.BGL.glRasterPos2i(12,207)DATA$( Blender.Draw.Text("Target-Object")DATA0x Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA  Blender.BGL.glVertex2i(10,210)DATA ( Blender.BGL.glVertex2i(10,165)DATA$x Blender.BGL.glVertex2i(205,165)LDATA$ Blender.BGL.glVertex2i(205,210)NDATA  Blender.BGL.glVertex2i(95,210)DATAh Blender.BGL.glEnd()DATATװ ZIEL=Blender.Draw.Slider(" Objectvalue ",EREIGNIS_KEIN,15,170,185,15,ZIEL.val,0,3)DATA0EEDATA ` Blender.BGL.glColor3f(1,1,1)DATA$ذ Blender.BGL.glRasterPos2i(15,249)DATA4 Blender.Draw.Text("0=min 1=max 2=mid 3=pivot") DATA ` Blender.BGL.glColor3f(0,0,0)DATA$ٰ Blender.BGL.glRasterPos2i(12,262)DATA$ Blender.Draw.Text("Source-Object")DATA0P Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA ڰ Blender.BGL.glVertex2i(10,265)DATA  Blender.BGL.glVertex2i(10,220)DATA$P Blender.BGL.glVertex2i(205,220)DATA$۠ Blender.BGL.glVertex2i(205,265)DATA$ Blender.BGL.glVertex2i(100,265) DATA@ Blender.BGL.glEnd()\DATAX܈ QUELLE=Blender.Draw.Slider(" Objectvalue ",EREIGNIS_KEIN,15,225,185,15,QUELLE.val,0,3)DATADATA\@ RICHTUNG=Blender.Draw.Slider(" Direction ",EREIGNIS_KEIN,15,280,185,15,RICHTUNG.val,0,2)DATA  Blender.BGL.glColor3f(1,1,1)DATA$ Blender.BGL.glRasterPos2i(15,302)DATA(h Blender.Draw.Text("0=X 1=Y 2=Z") DATA  Blender.BGL.glColor3f(0,0,0)DATA$ Blender.BGL.glRasterPos2i(12,317)DATA ` Blender.Draw.Text("Direction")DATA0߰ Blender.BGL.glBegin(Blender.BGL.GL_LINE_STRIP)DATA  Blender.BGL.glVertex2i(10,320)DATA ` Blender.BGL.glVertex2i(10,275)DATA$ Blender.BGL.glVertex2i(205,275)lDATA$ Blender.BGL.glVertex2i(205,320)NDATA P Blender.BGL.glVertex2i(65,320)DATA Blender.BGL.glEnd()DATA DATA DATAHH Blender.Draw.PushButton("Align",EREIGNIS_OBJEKT,10,145,195,15,"tool")DATA Blender.Draw.Redraw(1)DATADATA8##DATA(h# Auswerten von allgemeinen EreignissenDATA##DATA def allg_ereignis(erg,wert):DATA\@ if erg==Blender.Draw.ESCKEY or erg==Blender.Draw.QKEY:schalter_ereignis(EREIGNIS_BEENDEN)DATADATA##DATA((# Auswerten von Schalter-Ereignissen DATA##DATAdef schalter_ereignis(erg):DATA$ global XX,YY,ZZ,LOK_X,LOK_Y,LOK_ZDATA0H if erg==EREIGNIS_BEENDEN:Blender.Draw.Exit()DATA elif erg==EREIGNIS_CURSOR:DATA4 XX.val = str(Blender.Window.GetCursorPos()[0])DATA4P YY.val = str(Blender.Window.GetCursorPos()[1])DATA4 ZZ.val = str(Blender.Window.GetCursorPos()[2])DATA elif erg==EREIGNIS_LOKAL:DATAX GLO_X.val=0lDATA GLO_Y.val=0rDATA GLO_Z.val=0DATA AENDERE_X.val=0EDATAX AENDERE_Y.val=0EDATA AENDERE_Z.val=0EDATA0 Ausgangszustand = Blender.Window.EditMode()xDATA48 if Ausgangszustand==1:Blender.Window.EditMode(0)DATA, Objekt = Blender.Object.GetSelected()[0]DATA< if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-ObjektDATA X Gitter = Objekt.getData()DATA undochange(Gitter) DATA  grenze=limitfind(Objekt,1)EDATA@ for i in Gitter.verts:DATA if i.sel: DATA( if LOK_X.val==-1:i.co[0]=grenze[0]DATA(  if LOK_X.val==1:i.co[0]=grenze[1]DATA(x if LOK_Y.val==-1:i.co[1]=grenze[2]DATA( if LOK_Y.val==1:i.co[1]=grenze[3]DATA(( if LOK_Z.val==-1:i.co[2]=grenze[4]DATA( if LOK_Z.val==1:i.co[2]=grenze[5]DATA Gitter.update() DATA,  Blender.Window.EditMode(Ausgangszustand)DATAx DATA elif erg==EREIGNIS_GLOBAL:DATA LOK_X.val=0DATA0 LOK_Y.val=0DATAp LOK_Z.val=0EDATA AENDERE_X.val=0EDATA AENDERE_Y.val=0DATA0 AENDERE_Z.val=0DATA0p Ausgangszustand = Blender.Window.EditMode()DATA4 if Ausgangszustand==1:Blender.Window.EditMode(0)DATA,0 Objekt = Blender.Object.GetSelected()[0]DATA< if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-ObjektDATA  Gitter = Objekt.getData()DATA@ undochange(Gitter)DATA  grenze=limitfind(Objekt,0)DATA for i in Gitter.verts:DATA  if i.sel:1DATA0` a=mulmatvec4x3(i.co,Objekt.getMatrix())GDATA  ziel=aDATA( if GLO_X.val==-1:ziel[0]=grenze[0]DATA(P if GLO_X.val==1:ziel[0]=grenze[1]DATA( if GLO_Y.val==-1:ziel[2]=grenze[4]DATA( if GLO_Y.val==1:ziel[2]=grenze[5]DATA(X if GLO_Z.val==-1:ziel[1]=grenze[2]DATA( if GLO_Z.val==1:ziel[1]=grenze[3]DATAD objektmatrix = mulmatvec4x3(ziel,Objekt.getInverseMatrix())DATA x i.co[0] = objektmatrix[0]DATA  i.co[1] = objektmatrix[1]DATA  i.co[2] = objektmatrix[2] DATAh Gitter.update()DATA, Blender.Window.EditMode(Ausgangszustand)DATA'DATA 0 elif erg==EREIGNIS_VIEWPORT:DATA alignview()DATA Blender.Redraw()DATA elif erg==EREIGNIS_OBJEKT:DATA(H ix=[0,2,1][RICHTUNG.val]#0:x,1:y,2:zDATA0 or_wert=QUELLE.val#0:min,1:max,2:mid,3:pivotDATA ed_wert=ZIEL.val#DATA8@ erst_lim=limitfind(Blender.Object.GetSelected()[0],0)DATA< erst_loc=Blender.Object.GetSelected()[0].getLocation()DATA8 for i in range(1,len(Blender.Object.GetSelected())):DATA(x ob=Blender.Object.GetSelected()[i]DATA ob_lim=limitfind(ob,0)lDATA ob_loc=ob.getLocation()DATA(` Wert=[ob_loc[0],ob_loc[1],ob_loc[2]]DATA\ if or_wert==2:teil1=(erst_lim[1+2*ix]-erst_lim[2*ix])/2.0+erst_lim[2*ix]+erst_loc[ix]DATA(@ elif or_wert==3:teil1=erst_loc[ix]EDATA( else:teil1=erst_lim[or_wert+2*ix]EEDATA0 if ed_wert==0:teil2=-ob_lim[2*ix]+ob_loc[ix]DATA4P elif ed_wert==1:teil2=-ob_lim[1+2*ix]+ob_loc[ix]DATAX elif ed_wert==2:teil2=-((ob_lim[1+2*ix]-ob_lim[2*ix])/2.0+ob_lim[2*ix])+ob_loc[ix]LDATA8 else:teil2=0DATAx Wert[ix]=teil1+teil2DATA ob.setLocation(Wert)DATA Blender.Redraw()DATA H elif erg==EREIGNIS_ZEICHNEN:DATA GLO_X.val=0MDATA GLO_Y.val=0EDATA GLO_Z.val=0DATAX LOK_X.val=0DATA LOK_Y.val=0DATA LOK_Z.val=0DATA  oritest()DATAP try:DATA0 Ausgangszustand = Blender.Window.EditMode()DATA4 if Ausgangszustand==1:Blender.Window.EditMode(0)DATA0H Objekt = Blender.Object.GetSelected()[0]DATA< if Objekt.getType()=="Mesh":#Vorpruefung auf Mesh-ObjektDATA  Gitter = Objekt.getData()EDATA` undochange(Gitter) DATA ##DATA$ # Punktkoordinaten veraendernDATA0 ##DATA8h if AENDERE_X.val+AENDERE_Y.val+AENDERE_Z.val!=0:DATA8 ziel=[float(XX.val),float(YY.val),float(ZZ.val)]lDATA8 for i in Gitter.verts:DATA if i.sel: DATAP if AENDERE_X.val==0:ziel[0] = mulmatvec4x3(i.co,Objekt.getMatrix())[0]DATAP@ if AENDERE_Y.val==0:ziel[2] = mulmatvec4x3(i.co,Objekt.getMatrix())[2]DATAT if AENDERE_Z.val==0:ziel[1] = mulmatvec4x3(i.co,Objekt.getMatrix())[1] DATAD @ objektmatrix = mulmatvec4x3(ziel,Objekt.getInverseMatrix())DATA$  i.co[0] = objektmatrix[0]DATA$  i.co[1] = objektmatrix[1]NDATA$ P i.co[2] = objektmatrix[2]DATA  Gitter.update()DATA  Blender.Redraw()DATA, 0 Blender.Window.EditMode(Ausgangszustand)DATA  except:passDATA DATA  original()DATA 0 DATA@ `Blender.Draw.Register(fenster,allg_ereignis,schalter_ereignis)TXhDTXmesure.pyJD&DDATA0/Applications/BlenderThings/Scripts/mesure.pyDATA@#S˫DATA@DheadDATA@D@DATADpDATA`D |AudDATA`D N08DATA`D09DATA8Dx8TDATA8D.dow DATA8D(.XDATAD.DATAXDDATAXD(XDATAXDxDATA0D 0:DATA$Ep object = Object.GetSelected()[0][ DATA E if object.getType() == 'Mesh':DATA,E mesh = Object.GetSelected()[0].getData()DATAEh else:DATA E error('please select a mesh')DATAEelse:DATA(E( error('no mesh object selected') .DATAE[gDATAEif mesh != None:DATAE # The Main function.DATAE8 wireMesh(mesh)DATAEx mesh.update()EDATAE # object.makeDisplayList()DATAE # object.makeDisplayList()DATAEHDATAExif is_editmode:DATAE Window.EditMode(1)TXhE(H8DTXbeast0_5_3Alpha.pyEE (FE (E (HDATA8E/Applications/BlenderThings/Scripts/beast0_5_3Alpha.py DATAE (E pF8lendDATAE pE E (Fp5{DATAE E!E pF:DATAE!E!HE F DATAE!HE!E!F headDATAE!E!E!HFP DATAE!E" E!F4XٹDATAE" E"hE!FexitDATAE"hE"E" F0rsdnDATAE"E"E"hF`DATAE"E#@E"FsoftDATAE#@E#E"F3|%lDATAE#E#E#@F( DATAE#E$E#F`AudDATAE$E$`E#FY=DATAE$`E$E$FrsdnDATAE$E$E$`FDATAE$E%8E$Fhx9|%DATAE%8E%E$FDATAE%E%E%8F5{DATAE%E&E%F MFREEDATAE&E&XE%FsoftDATAE&XE&E&FequeDATAE&E&E&XF DATAE&E'0E&F`&DATAE'0E'xE&F$DATAE'xE'E'0F'logoDATAE'E(E'xFh([DATAE(E(PE'F)DATAE(PE(E(F KnifDATAE(E(E(PFX11-MDATAE(E)(E(FshutDATAE)(E)pE(F DATAE)pE)E)(F-exitDATAE)E*E)pFh%DATAE*E*HE)FDATAE*HE*E*FDATAE*E*E*HF8Y6+DATAE*E+ E*F&Y6+DATAE+ E+hE*F,Y6+DATAE+hE+E+ F8Y6+DATAE+E+E+hFY6+DATAE+E,@E+FY6+DATAE,@E,E+FY6+DATAE,E,E,@F0MY6+DATAE,E-E,FY6+DATAE-E-`E,F Y6+DATAE-`E-E-F( 5{DATAE-E-E-`Fh5{DATAE-E.8E-F Y2KDATAE.8E.E-FDATAE.E.E.8F0 ¸ DATAE.E/E.FpYDATAE/E/XE.FDATAE/XE/E/FlocaDATAE/E/E/XF@¸ DATAE/E00E/FdockDATAE00E0xE/FsoftDATAE0xE0E00FDATAE0E1E0xF@QDATAE1E1PE0FxQDATAE1PE1E1F.DATAE1E1E1PFFREEDATAE1E2(E1FHDATAE2(E2pE1F€QDATAE2pE2E2(FFREEDATAE2E3E2pFFREEDATAE3E3HE2F0MFREEDATAE3HE3E3Fð;DATAE3E3E3HFDATAE3E4 E3F`DATAE4 E4hE3FİFREEDATAE4hE4E4 FFREEDATAE4E4E4hF(YDATAE4E5@E4FxFREEDATAE5@E5E4FŨMFREEDATAE5E5E5@F(,FREEDATAE5E6E5Fƈ-QDATAE6E6`E5F YDATAE6`E6E6F(DATAE6E6E6`Fp.DATAE6E78E6FǠ.DATAE78E7E6FY"DATAE7E7E78F8QDATAE7E8E7FȀ.DATAE8E8XE7FFREEDATAE8XE8E8FQDATAE8E8E8XFXDATAE8E90E8FɨDATAE90E9xE8FY(DATAE9xE9E90F(QDATAE9E:E9xFpDATAE:E:PE9FʰQDATAE:PE:E:FFREEDATAE:E:E:PF@*DATAE:E;(E:F˘FREEDATAE;(E;pE:F-.DATAE;pE;E;(F@2DATAE;E<E;pF̠ DATAE<EFREEDATAE<E= E<F1.DATAE= E=hE<F DATAE=hE=E= F`QDATAE=E=E=hFΨ/DATAE=E>@E=F/DATAE>@E>E=Fh#.DATAE>E>E>@FϸFREEDATAE>E?E>FDATAE?E?`E>F(QDATAE?`E?E?Fh/Y;|DATAE?E?E?`FFREEDATAE?E@8E?F FREEDATAE@8E@E?F8FREEDATAE@E@E@8FxQDATAE@EAE@FѸ Y?lDATAEAEAXE@F+DATAEAXEAEAFH .DATAEAEAEAXFҀ.DATAEAEB0EAFҰQDATAEB0EBxEAFYCLDATAEBxEBEB0F@DATAEBECEBxFӈFREEDATAECECPEBFYEDATAECPECECFYFLDATAECECECPF@DATAECED(ECFԈDATAED(EDpECF&DATAEDpEDED(F .DATAEDEEEDpFXFREEDATAEEEEHEDFՈDATAEEHEEEEFFREEDATAEEEEEEHF .DATAEEEF EEFhQDATAEF EFhEEFְFREEDATAEFhEFEF FDATAEFEFEFhF(DATAEFEG@EFFp.YPDATAEG@EGEFF.DATAEGEGEG@FFREEDATAEGEHEGFX YS DATAEHEH`EGFؘ0DATAEH`EHEHFFREEDATAEHEHEH`F8 YUDATAEHEI8EHFpDATAEI8EIEHF٠MDATAEIEIEI8F 6DATAEIEJEIFڈQDATAEJEJXEIFFREEDATAEJXEJEJF;YZDATAEJEJEJXFx;Y[DATAEJEK0EJF;DATAEK0EKxEJFHQDATAEKxEKEK0FܐDATAEKELEKxFMDATAELELPEKF@5Y`DATAELPELELFݨ.DATAELELELPFYbDATAELEM(ELF(QDATAEM(EMpELFh.DATAEMpEMEM(FިFREEDATAEMENEMpFYeDATAENENHEMF YfLDATAENHENENFXDATAENENENHFߠ.YgDATAENEO ENF(.DATAEO EOhENFX(DATAEOhEOEO F(FREEDATAEOEOEOhFQDATAEOEP@EOFH.DATAEP@EPEOFx;.DATAEPEPEP@FQDATAEPEQEPFMQDATAEQEQ`EPF6QDATAEQ`EQEQF.DATAEQEQEQ`FHYr,DATAEQER8EQFxYrDATAER8EREQF DATAERERER8FQDATAERESERF84DATAESESXERFFREEDATAESXESESFYvDATAESESESXF@FREEDATAESET0ESF DATAET0ETxESFDATAETxETET0F+DATAETEUETxFHDATAEUEUPETF@aGDATAEUPEUEUFDATAEUEUEUPFDATAEUEV(EUFPY},DATAEV(EVpEUFDATAEVpEVEV(FDATAEVEWEVpF(DATAEWEWHEVFX+DATAEWHEWEWF!DATAEWEWEWHF DATAEWEX EWF(-YDATAEX EXhEWF$?DATAEXhEXEX FLDATAEXEXEXhF DATAEXEY@EXFhDATAEY@EYEXFNFREEDATAEYEYEY@FN1φDATAEYEZEYFNDATAEZEZ`EYF DATAEZ`EZEZFHNDATAEZEZEZ`FN.001DATAEZE[8EZFHNhDATAE[8E[EZFDATAE[E[E[8F$FREEDATAEEEhG>`jDATAEE@EG>̷@1DATAEpEE(>?DATAEEEp?4DATAEEHE?x4DATAEHEE?4DATAEEEH@H0DATAEE E@0DATAE EhEA0QDATAEhEE AhDATAF%pF%F%(ЂDATAF%F&F%pЃ DATAF&F&HF%H&&DATAF&HF&F&H'@ DATAF&F&F&HH'x+^DATAF&F' F&H'"TextDATAF' F'hF&H( ^DATAF'hF'F' H(hDATAF'F'F'hH(QDATAF'F(@F'H).FREEDATAF(@F(F'H)`+QDATAF(F(F(@H)4lDATAF(F)F(H* 8^DATAF)F)`F(H*%DATAF)`F)F)H* DATAF)F)F)`H+&,DATAF)F*8F)H+p"DATAF*8F*F)H+QDATAF*F*F*8H,\DATAF*F+F*H,PDATAF+F+XF*H,.DATAF+XF+F+H-+DATAF+F+F+XH-X4DATAF+F,0F+H-*FREEDATAF,0F,xF+H.%QDATAF,xF,F,0H.p FREEDATAF,F-F,xH.&DATAF-F-PF,H/"DATAF-PF-F-H/PDATAF-F-F-PH/MDATAF-F.(F-H0DATAF.(F.pF-H0PDATAF.pF.F.(H0/TextDATAF.F/F.pH0DATAF/F/HF.H18/DATAF/HF/F/H1"DATAF/F/F/HH1DATAF/F0 F/H20>DATAF0 F0hF/H2ObjeDATAF0hF0F0 H21DATAF0F0F0hH3@ODATAF0F1@F0H3"FREEDATAF1@F1F0H3MDATAF1F1F1@H4`2DATAF1F2F1H4DATAF2F2`F1H4FREEDATAF2`F2F2H5@DATAF2F2F2`H5#wDATAF2F38F2H5"FREEDATAF38F3F2H6 DATAF3F3F38H6h&"0DATAF:@F:F9H>P<DATAF:F:F:@H>2DATAF:F;F:H? 3DATAF;F;`F:H?X.3DATAF;`F;F;H?RFREEDATAF;F;F;`H@8"6DATAF;F<8F;H@<DATAF<8F<F;H@2DATAF<F<F<8HAX9DATAF<F=F<HAMFREEDATAF=F=XF<HB':DATAF=XF=F=HB`FREEDATAF=F=F=XHB=0F=HC=DATAF>0F>xF=HCHLFREEDATAF>xF>F>0HC?DATAF>F?F>xHD@DATAF?F?PF>HDXDATAF?PF?F?HDFREEDATAF?F?F?PHDDATAF?F@(F?HEFREEDATAF@(F@pF?HEXFREEDATAF@pF@F@(HEFREEDATAF@FAF@pHEDATAFAFAHF@HF FREEDATAFAHFAFAHF`FREEDATAFAFAFAHHFDATAFAFB FAHF DATAFB FBhFAHGIDATAFBhFBFB HGPDATAFBFBFBhHG/KDATAFBFC@FBHGFREEDATAFC@FCFBHH8"LDATAFCFCFC@HHDATAFCFDFCHH8N|DATAFDFD`FCHI ;ODATAFD`FDFDHIPDATAFDFDFD`HI/FREEDATAFDFE8FDHJ%DATAFE8FEFDHJpFREEDATAFEFEFE8HJ)DATAFEFFFEHJ@TDATAFFFFXFEHKhUDATAFFXFFFFHK%FREEDATAFFFFFFXHKIW|DATAFFFG0FFHLh:DATAFG0FGxFFHL)DATAFGxFGFG0HM((ZDATAFGFHFGxHM.FREEDATAFHFHPFGHM)DATAFHPFHFHHN8.]DATAFHFHFHPHNBFREEDATAFHFI(FHHO3FREEDATAFI(FIpFHHOh%@DATAFIpFIFI(HO$FREEDATAFIFJFIpHP(bDATAFJFJHFIHPpFREEDATAFJHFJFJHP+FREEDATAFJFJFJHHQDATAFJFK FJHQ`FREEDATAFK FKhFJHQ)FREEDATAFKhFKFK HR@DATAFKFKFKhHRPFREEDATAFKFL@FKHR/.DATAFL@FLFKHR#>DATAFLFLFL@HS8%-^DATAFLFMFLHS*QDATAFMFM`FLHS,DATAFM`FMFMHTR>DATAFMFMFM`HT.-VDATAFMFN8FMHT>DATAFN8FNFMHU(2QDATAFNFNFN8HU7+DATAFNFOFNHU-DATAFOFOXFNHV %>DATAFOXFOFOHVx-+DATAFOFOFOXHV)>DATAFOFP0FOHW0(QDATAFP0FPxFOHW--RDATAFPxFPFP0HW>DATAFPFQFPxHX0(.DATAFQFQPFPHX>DATAFQPFQFQHX9.2DATAFQFQFQPHY8(.DATAFQFR(FQHY>DATAFR(FRpFQHY6.DATAFRpFRFR(HZH@DATAFRFSFRpHZx$DATAFSFSHFRHZ#@DATAFSHFSFSH[ FREEDATAFSFSFSHH[X#FREEDATAFSFT FSH[&ʃ\DATAFT FThFSH\).NDATAFThFTFT H\X(>DATAFTFTFThH\)QDATAFTFU@FTH](+DATAFU@FUFTH]`)>DATAFUFUFU@H]QDATAFUFVFUH].DATAFVFV`FUH^H?>DATAFV`FVFVH^>DATAFVFVFV`H^&QDATAFVFW8FVH_@*DATAFW8FWFVH_/ʎDATAFWFWFW8H_"FREEDATAFWFXFWH`H#ʐ|DATAFXFXXFWH`DATAFXXFXFXH`ʑDATAFXFXFXXHa"DATAFXFY0FXHa`'FREEDATAFY0FYxFXHanDATAFYxFYFY0HbXDATAFYFZFYxHbYFREEDATAFZFZPFYHc(%DATAFZPFZFZHcFREEDATAFZFZFZPHc5DATAFZF[(FZHd9ʚDATAF[(F[pFZHd=ʜDATAF[pF[F[(Hd8ʝDATAF\HF\F\Hf0 QDATAF\F\F\HHfpQDATAF\F] F\Hf">DATAF] F]hF\Hg$-DATAF]hF]F] Hg`*QDATAF]F]F]hHg1-JDATAF]F^@F]Hh >DATAF^@F^F]Hhh).DATAF^F^F^@Hh >DATAF^F_F^Hh>DATAF_F_`F^Hi@!'DATAF_`F_F_Hi!DATAF_F_F_`Hi!DATAF_F`8F_Hj01DATAF`8F`F_Hj9'DATAF`F`F`8Hj0.0: r = (acos(v[2]) / sqrt(r)) / piDATAF˘ u, v = v[0]*r, v[1]*rDATA0F theta, phi = atan2(v, u), pi*sqrt(u*u + v*v)DATA4F@ mtx = makeRotMtx3D(phi+0.5*pi, 0.5*pi-theta, 0.0)DATA F̠ return mtxDATAFDATAFdef mat2euler_rot(mat): (DATA@FP mtx = [list(mat[0][:3]), list(mat[1][:3]), list(mat[2][:3])] DATA4F angle_y = -asin(max(min(mtx[0][2], 1.0), -1.0)) DATAF  C = cos(angle_y) DATAF` if C!=0.0: C = 1.0/C DATA0FΨ angle_x = atan2(mtx[1][2] * C, mtx[2][2] * C) DATA0F angle_z = atan2(mtx[0][1] * C, mtx[0][0] * C) DATA$Fh return [angle_x, angle_y, angle_z]DATAFϸDATAFdef VDot(v1, v2):|DATAF( # dot productDATA0Fh return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]DATAF5DATAFdef VNorm(v):DATAF8 # normalize vectorDATAFx d = VDot(v, v)DATA FѸ if d>0.0:DATA,F d = 1./sqrt(d); v[0]*=d; v[1]*=d; v[2]*=dDATA FH return v8DATAFҀbDATAFҰdef MtxIdentity3x3():DATAF return [[ 1.0, 0.0, 0.0],DATAF@ [ 0.0, 1.0, 0.0],.DATAFӈ [ 0.0, 0.0, 1.0]]DATAFbDATAFdef transp3x3(m):DATAF@ r = MtxIdentity3x3() 0 and j < 100:DATA(F rn = int(random() * nverts)EEDATAF j += 1DATAF  vertns.append(rn)DATAFhDATAPF pone[0] = ((1 - rone) * tvert[vertns[0]][0]) + (rone * tvert[vertns[1]][0])DATAPF pone[1] = ((1 - rone) * tvert[vertns[0]][1]) + (rone * tvert[vertns[1]][1])DATAPF pone[2] = ((1 - rone) * tvert[vertns[0]][2]) + (rone * tvert[vertns[1]][2])DATAFDATAPFH ptwo[0] = ((1 - rtwo) * tvert[vertns[2]][0]) + (rtwo * tvert[vertns[3]][0])DATAPF ptwo[1] = ((1 - rtwo) * tvert[vertns[2]][1]) + (rtwo * tvert[vertns[3]][1])DATAPFH ptwo[2] = ((1 - rtwo) * tvert[vertns[2]][2]) + (rtwo * tvert[vertns[3]][2])DATAFDATA@F pthree[0] = ((1 - rthree) * ptwo[0]) + (rthree * pone[0])DATA@Fh pthree[1] = ((1 - rthree) * ptwo[1]) + (rthree * pone[1])DATA@F pthree[2] = ((1 - rthree) * ptwo[2]) + (rthree * pone[2])DATAFHDATAFx return pthreeEEDATAF DATAPF # ------------------------------------------------------------------------ #DATAHFh # --- Use theeth's super cool functions to get face orientation ---cDATA$Fdef GetFaceOrientation(obj, face):DATAF0DATA F` # Get True Direction VectorDATA0F n = GetLoc(face.normal, obj.getMatrix()) DATAFDATA$F@ # Normalize Direction VectorEEDATAF VNorm(n) DATAFEEDATA4F # Invert To Avoid Spawning to inside of ObjectDATAF` n[0] = -n[0] DATAF n[1] = -n[1]DATAF n[2] = -n[2]DATAF  DATA FP # Return Face OrientationDATA0F return mat2euler_rot(makeRotMtx_fromVec(n))DATAFDATAPF0 # ------------------------------------------------------------------------ #EDATA(F # --- Make a Copy of An Object --- DATAFdef MakeCopy(obj):DATA4FH msh = Blender.NMesh.GetRawFromObject(obj.name)DATA(F newobj = Blender.NMesh.PutRaw(msh)DATAF newobj.SizeX = obj.SizeXDATAFH newobj.SizeY = obj.SizeYDATAF newobj.SizeZ = obj.SizeZDATAF newobj.RotX -= obj.RotXDATAF  newobj.RotY -= obj.RotYDATAFh newobj.RotZ += obj.RotZDATAF newobj.colbits = 1DATAF return newobjDATAF8DATAPFh # ------------------------------------------------------------------------ #DATA(F # --- Make a Copy of An Object --- DATAF@def MakeCopyNoAdd(obj):DATA(F newobj = Blender.Object.New("Mesh")DATA4F msh = Blender.NMesh.GetRawFromObject(obj.name)DATAF@ newobj.SizeX = obj.SizeXDATAF newobj.SizeY = obj.SizeYDATAF newobj.SizeZ = obj.SizeZDATAF newobj.RotX -= obj.RotXDATAF` newobj.RotY -= obj.RotYDATAF newobj.RotZ += obj.RotZDATAF newobj.colbits = 1EDATAF8 return newobjDATAFxcXDATAPF # ------------------------------------------------------------------------ #lDATA,F( # --- Join Objects in an object list ---3DATAFDATAFdef GetPos(vertco, obmat):DATAF x, y, z = vertcoDATALF8 tx = x * obmat[0][0] + y * obmat[1][0] + z * obmat[2][0] + obmat[3][0]DATALF ty = x * obmat[0][1] + y * obmat[1][1] + z * obmat[2][1] + obmat[3][1]DATALG( tz = x * obmat[0][2] + y * obmat[1][2] + z * obmat[2][2] + obmat[3][2]DATAG return [tx, ty, tz]DATAG DATAGdef MyJoin(objlist):DATAG`deDATA(G # New Object To Hold Combined DataDATA(G newobj = Blender.Object.New("Mesh")DATA G@ newmsh = Blender.NMesh.New()DATAGEEDATA G on = 0DATAG count = 0'DATAG8'\DATAGh for obj in objlist:DATAG msh = obj.getData()DATA G for vert in msh.verts:DATA4GH truevert = GetPos(vert, obj.getMatrix())DATAXG newmsh.verts.append(Blender.NMesh.Vert(truevert[0], truevert[1], truevert[2]))DATA0G0 toadd = len(objlist[on].getData().verts) DATA G for face in msh.faces:EEDATA(G newface = Blender.NMesh.Face()DATAG8 for v in face.v:DATA<G newface.v.append(newmsh.verts[count + v.index])DATA(G newmsh.faces.append(newface) DATAG@DATA0Gp toadd = len(objlist[on].getData().verts)DATAG count += toadd DATAG on += 1DATA GX # Link, Update and ReturnDATAG newmsh.update()DATAG newobj.link(newmsh)DATAG 0 return newobj&DATAG pDATAPG  # ------------------------------------------------------------------------ #DATA@G  # --- Move Object Up So That It's Center is At It's Base ---DATAG def MoveUp(obj):bDATAG DATA$G  # Get Mesh of Object To MoveDATAG P msh = obj.getData()DATAG :LDATAG  # Get Lowest VerticeDATAG  lowest = 10000DATAG P for vert in msh.verts:DATA0G  truevert = GetLoc(vert, obj.getMatrix())DATA G  if vert.loc[2] < lowest:DATA G H lowest = vert.loc[2]DATAG  lowest = abs(lowest)DATAG DATAG # Move Mesh UpDATAGP for vert in msh.verts:DATAG vert.loc[2] += lowestDATAG msh.update()DATAG DATAPGP # ------------------------------------------------------------------------ #DATA,G # --- Get Average Intensity of Face --- DATAG(def GetFaceIntensity(face):DATAGp imDATAG # Initialize VaraiblesDATAG totr = 0.0DATAG0 totg = 0.0DATAGp totb = 0.0DATAG nverts = 0DATAGDATAG  # Get Total IntensityDATAGh for col in face.col:DATAG totr += col.rDATAG totg += col.gDATAG0 totb += col.bDATAGp nverts += 1DATAG DATA$G # Check To Avoid Zero DivisionDATAG0 if nverts < 1: DATAGp nverts = 1DATAGQ DATA(G # Calcualate Average Face IntensityDATA4G8 return (((totr + totg + totb) / nverts) / 765)|DATAGDATAPG # ------------------------------------------------------------------------ #DATA0GH # --- Determine Density based on Intensity ---DATAGdef GetFaceDensity(face):DATAG i = GetFaceIntensityDATA G8 d = 0DATAGp if i > 0.2:DATA G d = 1DATAG if i > 0.4:DATA G( d = 2DATAG` if i > 0.6:DATA G d = 3DATAG if i > 0.8:DATA G d = 4DATAGP if i > 0.9:DATA G d = 5DATA G return dDATAG KDATAPG8 # ------------------------------------------------------------------------ #DATA0G # --- Create a Card for Hair Alpha --- DATA8Gdef MakePatch(stacks, size, height, rand, material):DATAG |DATAG # Stack HeightDATA,G stackheight = float(height / stacks) DATAGHDATAGx # Layer OffsetDATAG loffset = [0.0, 0.0]DATAGDATAG0 # Current Layer HeightDATAGx curheight = 0.0DATAGDATAG radius = float(size / 2)DATAG0 # --- Vertices ---DATA Gx pverts = [[0.0, radius] , DATAG [0.0, -radius],DATAG [radius, 0.0],DATAGX [-radius, 0.0]]DATAGDATA,G patchobj = Blender.Object.New("Mesh")DATA$G ( patchmesh = Blender.NMesh.New()DATAG x patchmesh.hasVertexUV(1)DATAG DATA(G  # --- Create Vertices and Faces---DATA$G!H for i in xrange(0, stacks + 1):DATAG! if rand > 0.0:DATA4G! loffset[0] = (random() * rand) - rand / 2DATA4G"@ loffset[1] = (random() * rand) - rand / 2DATAG"stDATAG"DATA G# # --- Add Vertices ---DATAG#P for vert in pverts:DATA8G# v = Blender.NMesh.Vert(vert[0] + loffset[0], DATA8G$ vert[1] + loffset[1], DATA,G$h curheight) DATA$G$ patchmesh.verts.append(v)DATA G% DATAG%H ,DATA G%x curheight += stackheightDATAG% # --- Create Faces ---DATA G& j = 0DATA0G&H uvstack = float(height / stacks) / height DATAG& curheight = 0.0DATAG& next = FalseDATA(G'( for i in xrange(0, stacks + stacks):DATAG'DATA(G' nextheight = curheight + uvstackDATA(G( newface = Blender.NMesh.Face()(DATA,G(` newface.v.append(patchmesh.verts[j])DATA,G( newface.uv.append((0.0, curheight))ADATAG)DATA0G)@ newface.v.append(patchmesh.verts[j + 1])DATA,G) newface.uv.append((1.0, curheight))DATAG)DATA0G*( newface.v.append(patchmesh.verts[j + 5])DATA,G* newface.uv.append((1.0, nextheight))DATAG*DATA0G+ newface.v.append(patchmesh.verts[j + 4])DATA,G+p newface.uv.append((0.0, nextheight))DATAG+DATAG+ newface.smooth = 1DATAG,@ DATA(G,x patchmesh.faces.append(newface)iDATAG, if next == True:DATA G- curheight += uvstack DATAG-h next = FalseDATA G- else:DATAG- next = True^DATAG.0 j += 2DATAG.pDATA(G. # --- Update Patch And Link Mesh---DATAG. patchobj.link(patchmesh)DATAG/@ patchmesh.update(1)DATAG/,DATAG/ # --- Add Materials ---DATA8G0 # --- For Some Reason It Only Works This Way ---DATA4G0h newobj = Blender.Object.Get(patchobj.getName())DATA$G0 newobj.setMaterials([material])DATAG1 newobj.colbits = 1EDATAG1`DATA$G1 # --- Return Patch Object ---DATAG1 return patchobjDATAG2 GDATAPG2P # ------------------------------------------------------------------------ #EDATA,G2 # --- Spawn Objects on Surface --- DATAHG3(def MakeCombedPatch(stacks, size, height, maxheight, rand, material):DATAG3DATAG3 # Stack HeightDATA,G4 stackheight = float(height / stacks) DATAG4h bendheight = 0 DATAG4DATAG4 # Layer OffsetDATAG5 loffset = [0.0, 0.0]DATAG5`Q maxheight: DATA(G:0 theta = asin(maxheight / height)DATA$G: topx = height * cos(theta)DATAG: DATA(G; # Radius of side vertices at topDATAG;` sider = radiusalDATA(G; # Angle of side vertices at topDATA$G< sidea = 90/pi * 180 +thetaDATAG 0.0:DATA4G= loffset[0] = (random() * rand) - rand / 2DATA4G=x loffset[1] = (random() * rand) - rand / 2DATAG=DATA(G> # --- Calculate pushdown --- DATA G>` if height > maxheight: (DATAG> if i == 0:DATAG> x = 0DATA G?0 sideonex = radiusDATAG? sideoney = 0DATA G? sidetwox = -radiusDATAG@ sidetwoy = 0TADATAG@` else:DATA@G@ angle = (90.0 / float(stacks)) * float(curstack) DATA(GA angle = (angle * pi)/180DATAGAh cr = topxDATA<GA x = topx - abs(cr * cos(angle)) - (topx - cr)DATADGB curangle = -curstack / stacks * (Radians(90) - theta)DATA GB DATA4GB sideonex = x + (sider * cos(curangle))DATA<GC  sideoney = bendheight + (sider * sin(curangle))DATA4GC sidetwox = x - (sider * cos(curangle))DATA<GC sidetwoy = bendheight - (sider * sin(curangle))DATAGDPDATA GD # --- Add Vertices ---,DATAGD vertnr = 0DATAGE if sideoney < 0:DATAGEX sideoney = 0DATA$GE sideonex = size / 2.0,DATA GE for vert in pverts:EEDATA,GF@ if vertnr == 0 or vertnr == 1:DATADGF v = Blender.NMesh.Vert(vert[0] + loffset[0] + x, DATA@GG vert[1] + loffset[1], DATA4GGx bendheight) DATA,GG patchmesh.verts.append(v)DATA GH0 elif vertnr == 2:DATA@GH v = Blender.NMesh.Vert(loffset[0] + sideonex, DATA@GH vert[1] + loffset[1], DATA4GI` sideoney) DATA,GI patchmesh.verts.append(v)enDATA GJ elif vertnr == 3:DATA@GJh v = Blender.NMesh.Vert(loffset[0] + sidetwox, DATA@GJ vert[1] + loffset[1], DATA4GKH sidetwoy) DATA,GK patchmesh.verts.append(v)DATAGL DATA(GL0 vertnr += 1 DATAGLDATA GL else:DATAGLDATA0GM  # --- Out of range for pushdown ---DATA GM for vert in pverts:DATA<GM v = Blender.NMesh.Vert(vert[0] + loffset[0], DATA<GN8 vert[1] + loffset[1], DATA0GN curheight) DATA(GO patchmesh.verts.append(v) DATA GOX eDATA(GO bendheight += maxheight / stacks DATA GO curheight += stackheightDATAGP8 curstack += 1DATAGPx # --- Create Faces ---DATA GP j = 00DATA0GP uvstack = float(height / stacks) / height DATAGQX curheight = 0.0DATAGQ next = FalseDATA(GQ for i in xrange(0, stacks + stacks):DATAGR0DATA(GR` nextheight = curheight + uvstackDATA(GR newface = Blender.NMesh.Face()DATA,GS newface.v.append(patchmesh.verts[j])DATA,GSh newface.uv.append((0.0, curheight))EDATAGSDATA0GS newface.v.append(patchmesh.verts[j + 1])DATA,GTP newface.uv.append((1.0, curheight))DATAGTDATA0GT newface.v.append(patchmesh.verts[j + 5])DATA,GU8 newface.uv.append((1.0, nextheight))DATAGUDATA0GU newface.v.append(patchmesh.verts[j + 4])DATA,GV  newface.uv.append((0.0, nextheight))DATAGVxpDATAGV newface.smooth = 1DATAGV DATA(GW( patchmesh.faces.append(newface){DATAGW if next == True:DATA GW curheight += uvstack DATAGX next = FalseDATA GX` else:DATAGX next = TrueDATAGX j += 2DATAGY DATA(GYP # --- Update Patch And Link Mesh---DATAGY patchobj.link(patchmesh)DATAGY patchmesh.update(1)DATAGZ8DATAGZh # --- Add Materials ---DATA8GZ # --- For Some Reason It Only Works This Way ---\DATA4G[ newobj = Blender.Object.Get(patchobj.getName())DATA$G[x newobj.setMaterials([material])DATAG[ newobj.colbits = 1DATAG\ DATA$G\@ # --- Return Patch Object ---DATAG\ return patchobjDATAG\DATAG]\DATAPG]0 # ------------------------------------------------------------------------ #DATA,G] # --- Spawn Objects on Surface --- DATA(G^def Spawn(surface, surffaces, objects, DATA0G^` density, colsize, colheight, max, hDATA(G^ randrot, randsize, share):DATAG_DATA$G_H # Initiate Master for SharingLDATAG_ if share == 1:DATA$G_ master = MakeCopy(objects[0])DATA4G`( master.loc = Blender.Window.GetCursorPos()DATA$G` master.RotZ = -180/(180/pi)DATAG` lDATA Ga # Start up the progress barDATA4GaX Blender.Window.DrawProgressBar(0.0, "Starting")DATAGaEEDATAGa nfaces = len(surffaces)DATAGb0DATA,Gb` # Initialize List of Spawned ObjectsDATAGb newobjects = []DATAGbDATAGc( # Get surface meshDATA$Gcp surfacemesh = surface.getData()DATAGcDATA,Gc # Loop Through Spawn Activated FacesDATAGdH count = 0.0DATAGd for face in surffaces:ADATAGdDATA Ge # Place Face Object(s)DATA$GeP for i in range (0, density):DATAGeDATA0Ge # Choose Random Object From SelectedDATA,Gf0 ro = int(random() * len(objects))DATAGfDATA(#X # Set Object Location On FaceDATA# if density > 1:TADATA0# pos = GetRandFacePos(surface, face)DATA$X else:DATA0$ pos = GetFaceCenter(surface, face)DATA$EEDATA %( # Calculate RotationDATA8%x facerot = GetFaceOrientation(surface, face)DATA% # Random RotationDATA &( rot = [0.0, 0.0, 0.0]DATAD&x rot[0] += (1 - (2 * random())) * (randrot[0] / 180 * pi)DATAD& rot[1] += (1 - (2 * random())) * (randrot[1] / 180 * pi)EDATAD'X rot[2] += (1 - (2 * random())) * (randrot[2] / 180 * pi)DATA'DATA' # Copy ObjectDATA((@ curobj = MakeCopy(objects[ro])DATA( DATA$( # Place and Rotate ObjectDATA ) curobj.LocX += pos[0]DATA )h curobj.LocY += pos[1]DATA ) curobj.LocZ += pos[2]DATA$* curobj.RotX += facerot[0]DATA$*X curobj.RotY += facerot[1]DATA$* curobj.RotZ += facerot[2]DATA* DATA +0 # Rotation MatrixesDATAL+ objrotmat = makeRotMtx3D(curobj.RotX, curobj.RotY, curobj.RotZ) DATA0+ invobjrotmat = transp3x3(objrotmat)EEDATA<,X randrotmat = makeRotMtx3D(rot[0], rot[1], rot[2])DATA , DATA0, # Three steps to local axis rotationDATAL-X if randrot[0] <> 0.0 or randrot[1] <> 0.0 or randrot[2] <> 0.0:DATA<- firstmat = mulmat(objrotmat, invobjrotmat, 3)DATA8.8 secmat = mulmat(firstmat, randrotmat, 3)DATA<. thirdmat = mulmat(secmat, objrotmat, 3) DATA0/ frandrot = mat2euler_rot(thirdmat)DATA/hEEDATA(/ curobj.RotX = frandrot[0]DATA(/ curobj.RotY = frandrot[1]DATA(0H curobj.RotZ = frandrot[2]DATA0 DATA0=DATA 1 # Apply Random Size,DATAD1P curobj.SizeX += curobj.SizeX * (random() * randsize[0])DATAD1 curobj.SizeY += curobj.SizeY * (random() * randsize[1])DATAD20 curobj.SizeZ += curobj.SizeZ * (random() * randsize[2])DATA2 oDATA82 # Apply Size According to Average Face ColourDATA 3@ if colsize == True:DATA(3 if colheight == True: DATAT3 curobj.SizeZ = curobj.SizeZ * (1 + ( max * GetFaceIntensity(face)))DATA4h else:DATAT4 curobj.SizeX = curobj.SizeX * (1 + ( max * GetFaceIntensity(face)))DATAT5( curobj.SizeY = curobj.SizeY * (1 + ( max * GetFaceIntensity(face)))DATAT5 curobj.SizeZ = curobj.SizeZ * (1 + ( max * GetFaceIntensity(face)))DATA 6( DATA6` # Move Object UpDATA6 MoveUp(curobj)DATA$6 curobj.makeDisplayList()DATA,7@ surface.makeParent([curobj], 0, 1)DATA$7 newobjects.append(curobj)DATA7DATA8 if share == 1:DATA(8` curobj.getData().update()DATA(8 curobj.shareFrom(master)^DATA9 EEDATA9H count += 1.0DATA9 DATA 9 # Set the progress barDATA(: progress = float(count / nfaces)DATAd:` Blender.Window.DrawProgressBar(progress, "Duplicating: " + str(int(progress * 100)) + "%")DATA:DATA;  return newobjects\)DATA0;h Blender.Window.DrawProgressBar(1.0, "Done")DATA;DATA;DATAP<( # ------------------------------------------------------------------------ #DATA$< # --- GUI and Event Handlers ---sDATA<DATA=( # --- Controls ---DATA8=hsettings = Create(1) # Toggle For Settings TabDATA@=fileman = Create(0) # Toggle For File Management TabDATA4>@optset = Create(1) # Toggle For OptionsDATA@>randset = Create(0) # Toggle For Randomization OptionsDATA8?randx = Create(0.0) # Slider For X RotationEEDATA8?xrandy = Create(0.0) # Slider For Y RotationDATA8?randz = Create(0.0) # Slider For Z Rotation,\DATA4@Hrandsx = Create(0.0) # Slider For X Size_DATA4@randsy = Create(0.0) # Slider For Y Size_DATA4Arandsz = Create(0.0) # Slider For Z SizepuDATA@Ahobjfile = Create(0.0) # File in Which Oject is StoredDATAPAcoldens = Create(0.0) # Toggle For Letting Face Colour Affect DensityDATATBXcolsize = Create(0.0) # Toggle For Letting Face Colour Affect Object SizeDATATBcolheight = Create(0.0) # Toggle For Constraining Face Colour Effect To HeightDATADCXmaxvar = Create(1) # Number For Setting Max Size VarianceDATA@Cbeastmode = Create(2) # Menu For Selecting Beast ModeDATADD8colmode = Create(5) # Menu For Selecting Base Colour ModeDATA<Dcolset = Create(0) # Toggle For Base Colour TabDATA<Ecolr = Create(0.5) # Slider For Setting Red ValueDATA@Excolg = Create(0.3) # Slider For Setting Green ValueDATA@Ecolb = Create(0.1) # Slider For Setting Blue ValueDATAHFXdensvar = Create(1) # Number For Density (Objects Per Face) DATA4Fcardset = Create(0) # Toggle For Card Tab DATA8G0alphaset = Create(0) # Toggle For Alpha Tab DATA@Galphamaps = Create(0) # Menu For Displaying Alpha MapsDATADHnstacks = Create(2) # Number For Setting Hair Card StacksDATADHxhheight = Create(0.8) # Number For Setting Hair Card HeightDATAHHcurl = Create (0.1) # Slider For Setting Hair Card CurlinessDATADI`hsize = Create(0.5) # Slider For Setting Hair Card WidthDATAPIshare = Create(0) # Toggle button for setting shrefrom functionlityDATATJPiscombed = Create(0.0) # Toggle button to comb(flatten hair against scalpDATAJmaxheight = Create(0.5)DATAKDATAKH # --- Variables ---DATAKsurfacename = "None"DATAKfacecount = 0DATA Lnobjs = 0EDATALPobjects = []DATA Lfaces = []DATALhassurface = FalseDATAMcolone = [0.5, 0.3, 0.1]DATAMPcoltwo = [0.8, 0.5, 0.2]TADATAMalphastr = "Alpha Maps %t"DATAMalphalist = []DATADN baseimg = "" # Stores comlete base image filenameyDATAHNbaseimgtxt = "None" # Stores formatted base image filenameDATA Onmats = 0DATAO@DATA$Op # --- Button event identifiers ---DATAOpexit = 101DATAPtsettings = 102DATAP@tfileman = 103DATAPtrandset = 104DATAPtoptset = 106DATAQpasurf = 107DATAQ@pafaces = 108DATAQpafacesall= 109DATAQpcreate = 110DATARpaobjs = 113DATAR@papobjs = 114DATARtcoldens = 115DATARtcolset = 116DATASmodeswitch= 117DATAS@pacolone = 118DATASpacoltwo = 119DATAStcardset = 120DATATpaddalpha = 121DATAT@pclearalpha = 122DATATpcardpreview = 123DATATpselbaseimg = 124DATAUtalphaset = 125DATAU@tcombed = 126 20:DATAY cutoff = 16,DATA YX else:DATA Y cutoff = len(filename)DATAYDATA$Z # Append To Alpha Menu StringDATA<Z` alphastr += "|..." + filename[len(filename) - cutoff:] DATA$Z alphamaps.val = len(alphalist)DATA [ Register(GUI, Event, BEvent)DATA[hDATAP[ # ------------------------------------------------------------------------ #DATA0\ # --- Select Base Image Callback Function ---DATA\xdef SelBaseImg(filename):DATA \ global baseimg, baseimgtxtDATA] baseimg = filenameDATA]XDATA] # Set CutoffDATA] length = len(baseimg)DATA^ if length > 30:DATA^P cutoff = 26DATA ^ else:TADATA^ cutoff = len(baseimg)DATA_DATA<_@ baseimgtxt = "..." + baseimg[len(baseimg) - cutoff:] DATA_ DATA _ Register(GUI, Event, BEvent)DATA`(DATAP`X # ------------------------------------------------------------------------ #DATA(` # --- Keyboard and mouse events ---DATAa0def Event(evt, val):DATAax if evt == QKEY:DATAa Exit()DATAa returnDATAb8DATAPbh # ------------------------------------------------------------------------ #DATAb # --- Button Events ---DATAc0def BEvent(evt):DATA(cp global surfacename, facecount, facesDATA0c global nobjs, objects, hassurface, alphamapsDATA(d( global alphalist, alphastr, baseimgDATA d global iscombed, maxheightDATAdlDATAPe # ------------------------------------------------------------------------ #DATAe # --- Exit ---DATAe if evt == pexit:DATAf Exit()DATAf@ returnDATAf elif evt == pexit:tDATAf Exit()ovDATAg returnEEDATAPgH # ------------------------------------------------------------------------ #DATAg # --- Slide ---DATAh elif evt == slide:DATA$hP Register(GUI, Event, BEvent)DATAhDATAPh # ------------------------------------------------------------------------ #DATA$iP # --- Switch Beast Modes ---DATAi elif evt == modeswitch:DATAi optset.val = 1DATAj0 randset.val = 0DATAjx colset.val = 0DATAj cardset.val = 0DATAk objects = []DATAkH faces = []DATAk surface = ""DATAk surfacename = "None"DATAl facecount = 0 EEDATAlX nobjs = 0DATA$l Register(GUI, Event, BEvent)DATAl DATAPm # ------------------------------------------------------------------------ #DATA<m # --- Toggle between settings and file management ---DATAn elif evt == tsettings:DATAnH if settings.val == 1:DATAn fileman.val = 0DATA n else:DATAo settings.val = 1DATA$oX Register(GUI, Event, BEvent)DATAo elif evt == tfileman:DATAo if fileman.val == 1:DATAp8 settings.val = 0DATA p else:DATAp fileman.val = 1DATA$q Register(GUI, Event, BEvent)DATAqPDATAPq # ------------------------------------------------------------------------ #DATA4r # --- Sub setting tabs togle functionality---DATAr` elif evt == trandset:DATAr if randset.val == 1:DATAr optset.val = 0DATAs8 colset.val = 0DATAs cardset.val = 0DATAs alphaset.val = 0DATAt else: DATAtP randset.val = 1TADATA$t Register(GUI, Event, BEvent)DATAt elif evt == toptset:DATAu0 if optset.val == 1:@DATAux randset.val = 0DATAu colset.val = 0DATAv cardset.val = 0DATAvP alphaset.val = 0DATAv else: DATAv optset.val = 1DATA$w  Register(GUI, Event, BEvent)DATAwp elif evt == tcolset:DATAw if colset.val == 1:DATAx randset.val = 0TADATAxH optset.val = 0DATAx cardset.val = 0DATAx alphaset.val = 0DATAy  else: DATAy` colset.val = 1DATA$y Register(GUI, Event, BEvent)DATAy elif evt == tcardset:eDATAz@ if cardset.val == 1:DATAz colset.val = 0DATAz randset.val = 0DATA{ optset.val = 0DATA{` alphaset.val = 0DATA{ else: DATA{ cardset.val = 1DATA$|0 Register(GUI, Event, BEvent)DATA| elif evt == talphaset:DATA| if alphaset.val == 1:DATA} colset.val = 0DATA}X randset.val = 0DATA} optset.val = 0DATA} cardset.val = 0e DATA~0 else: DATA~p alphaset.val = 1DATA$~ Register(GUI, Event, BEvent)DATADATAP8 # ------------------------------------------------------------------------ #DATA  # --- Surface Settings ---DATAЀ elif evt == pasurf:DATA0ЀP if len(Blender.Object.GetSelected()) > 0:DATAЀ facecount = 0DATAЀ faces = []DATA<Ё8 surfacename = Blender.Object.GetSelected()[0].nameDATA8Ё surfaceobj = Blender.Object.Get(surfacename)DATA,Ђ if surfaceobj.getType() == "Mesh":DATA@Ђ` surfacename = Blender.Object.GetSelected()[0].nameDATA Ђ hassurface = TrueDATAЃ  else:DATA(H& surfacename = "Not a Mesh"DATA H'@ else:DATA,H'x surfacename = "Nothing Selected" DATA$H' Register(GUI, Event, BEvent)DATAH(  # Assign Selected FacesDATAH(h elif evt == pafaces:DATA H( if surfacename <> "None":DATA0H) if surfacename <> "Nothing Selected":DATA,H)` if surfacename <> "Not a Mesh":DATA8H) obj = Blender.Object.Get(surfacename)teDATA<H*  faces = obj.getData().getSelectedFaces(0)DATA(H* facecount = len(faces)DATA H* else:DATA(H+ print "Assign surface first" DATA$H+p Register(GUI, Event, BEvent)DATAH+ # Assign All FacesDATAH, elif evt == pafacesall:DATA H,P if surfacename <> "None":DATA0H, if surfacename <> "Nothing Selected":DATA,H- if surfacename <> "Not a Mesh":DATA8H-X obj = Blender.Object.Get(surfacename)DATA,H- faces = obj.getData().facesDATA(H. facecount = len(faces)DATA H.p else:DATA(H. print "Assign surface first" DATA$H/ Register(GUI, Event, BEvent)DATAH/PEEDATAPH/ # ------------------------------------------------------------------------ # 0:DATA0H18 objects = Blender.Object.GetSelected()DATA$H1 Register(GUI, Event, BEvent)DATAH1 elif evt == papobjs:DATA@H20 nobjs = len(objects) + len(Blender.Object.GetSelected())DATAH2 if nobjs > 0:DATA4H2 for obj in Blender.Object.GetSelected():DATA H3@ objects.append(obj)DATA$H3 Register(GUI, Event, BEvent)DATAPH3 # ------------------------------------------------------------------------ #DATA H4` # --- Assign Colours ---DATAH4 elif evt == pacolone:TADATAH4 colone[0] = colr.valDATAH5@ colone[1] = colg.valDATAH5 colone[2] = colb.valDATA$H5 Register(GUI, Event, BEvent)DATAH6  elif evt == pacoltwo:DATAH6h coltwo[0] = colr.valDATAH6 coltwo[1] = colg.valDATAH6 coltwo[2] = colb.valDATA$H7@ Register(GUI, Event, BEvent)DATAH7DATAPH7 # ------------------------------------------------------------------------ #DATAH8@ # --- Add Alpha Map ---DATAH8 elif evt == paddalpha:DATA<H8 Blender.Window.FileSelector(AddAlpha, "Select Image")DATAH98DATAPH9h # ------------------------------------------------------------------------ #EDATA$H9 # --- Clear Alpha Map List ---DATAH:8 elif evt == pclearalpha:DATA$H: alphastr = "Alpha Maps %t"DDATAH: alphalist = []DATA$H; Register(GUI, Event, BEvent)DATAH;h DATAPH; # ------------------------------------------------------------------------ #EDATA,H< # --- Create Card Preview At Cursor ---DATA H prevcard.name = "Preview"DATA@H>P prevcard.setLocation(Blender.Window.GetCursorPos())DATA4H> Blender.Scene.getCurrent().link(prevcard)DATA H?  else:DATA0H?X mat = Blender.Material.New("PrevMat")DATATH? prevcard = MakePatch(nstacks.val, hsize.val, hheight.val, curl.val, mat) DATA$H@8 prevcard.name = "Preview"DATA@H@ prevcard.setLocation(Blender.Window.GetCursorPos())DATA4H@ Blender.Scene.getCurrent().link(prevcard)DATAHAXDATAPHA # ------------------------------------------------------------------------ #EDATA(HB # --- Select Base Image Texture ---DATAHB` elif evt == pselbaseimg:DATA@HB Blender.Window.FileSelector(SelBaseImg, "Select Image")DATAHCDATAPHCH# ------------------------------------------------------------------------ #EEDATAHC # --- Create --- EDATAHD elif evt == pcreate:DATAHDX starttime = time()TADATAHDjlDATAHD # Initiate VariablesDATAHE nmats = 0DATAHEX matlist = [] DATAHElDATA HE if beastmode.val == 2:DATAHF  nobjs = 1DATAHF`nDATAHF if nobjs > 0:DATAHFDATA HG if hassurface == True:DATAHGP DATA0HG # Add Colour And Alpha if Beast isDATA HG # in Fur/Hair modeDATA$HH8 if beastmode.val == 2:DATAHHDATA<HH # --- Create Material --- TADATA<HI  basemat = Blender.Material.New("HairColour")DATAHIDATA0HI # --- Create Alpha Textures ---DATA(HJ if len(alphalist) > 0:>DATAHJpx|DATA,HJ for alpha in alphalist:DATADHJ curmat = Blender.Material.New("HairColour")z DATAHKh{DATA(HK # Alpha TextureDATALHK image = Blender.Image.Load(alpha) DATA<HLh atx = Blender.Texture.New("AlphaTex")DATA,HL atx.setType("Image")DATA,HM( atx.setImage(image)DATA0HM curmat.setTexture(1, atx)DATA,HM curmat.setAlpha(0.0)DATA0HN8 curmat.setSpecTransp(0.0)DATADHN curmat.mode |= Blender.Material.Modes.ZTRANSPDATA4HO matx = curmat.getTextures()[1]DATA(HOh matx.mapto = 128>DATA(HO matx.texco = 16:DATA,HP matx.tex.extend = 2DATAHPp @DATA,HP matlist.append(curmat)DATA HQ nmats += 1DATAHQ` else:@DATA,HQ matlist.append(basemat)EDATA HR nmats += 1DATAHRP DATA0HR # --- Set Base Solid Colour ---DATA$HR if colmode.val == 5:DATA(HS8 for mat in matlist:@DATA,HS mat.setRGBCol(colone)DATAHSn\DATATHT # --- Create Base Texture For Colour Variation --- DATA0HT if colmode.val in (1, 2, 3, 4):DATAHT.MDATA4HU( # Create Texture DATA8HU tx = Blender.Texture.New("ColourTex")DATAHU DATA(HV  # Set Texture TypeDATA0HVx if colmode.val in(1, 2, 3):DATA,HV tx.setType("Clouds")ADATA,HW0 for mat in matlist:8DATA0HW mat.setRGBCol(colone)DATAHW else:DATA,HX0 tx.setType("Image")DATAHX try:DATA<HX txi = Blender.Image.Load(baseimg)EDATA,HY8 tx.setImage(txi)pDATA HY except:EEDATA8HY print "Not a valid base image"DATAHZHDATA(HZx # Set Noise DepthDATA$HZ tx.noiseDepth = 6DATA H[  DATA$H[X # Set Noise SizeDATA(H[ if colmode.val == 1:DATA,H\ tx.noiseSize = 0.100DATA,H\X elif colmode.val == 2:TADATA,H\ tx.noiseSize = 0.5008DATA,H] elif colmode.val == 3:DATA,H]` tx.noiseSize = 1.000ADATAH],DATA0H] # Setup the Colour TextureDATA@H^H tx.rgbCol = [coltwo[0], coltwo[1], coltwo[2]]DATAH^0 DATA(H^ for mat in matlist: DATA,H_@ mat.setTexture(0, tx)DATA0H_ mtx = mat.getTextures()[0]DATA$H_ mtx.mapto = 1DATA$H`H mtx.texco = 32DATAH`DATAH` objects = []DATA$Ha for mat in matlist:DATA(Ha` if iscombed.val == 1:DATApHa obj = MakeCombedPatch(nstacks.val, hsize.val, hheight.val, maxheight.val, curl.val, mat) DATAHbX else:DATA\Hb obj = MakePatch(nstacks.val, hsize.val, hheight.val, curl.val, mat) ADATA(Hc( objects.append(obj)>DATAHcDATA8Hc surface = Blender.Object.Get(surfacename)DATA<Hd randomrot = [randx.val, randy.val, randz.val]ADATA@Hd randomsize = [randsx.val, randsy.val, randsz.val]DATA<Hd newobjects = Spawn(surface, faces, objects, TADATAHHeX densvar.val, colsize.val, colheight.val, maxvar.val,DATA4He randomrot, randomsize, share.val)DATAHf0 DATAHfp # Set colbitsDATA$Hf if beastmode.val == 2:DATA(Hg for ob in newobjects:DATA,Hg` ob.setMaterials(matlist)DATA4Hg randmat = int(random() * nmats)`DATA$Hh ob.colbits = 1DATA,Hhh Blender.Window.RedrawAll()DATA Hh DATAHh # Print ReportDATA$Hi@ print "-------------"\DATA$Hi print "Beast Report:"DATA$Hi print "-------------"DATA4Hj0 print "Surface: " + str(surface.name)DATA<Hj print "Number of Objects: " + str(len(faces))DATA@Hj print "Number of Alphas: " + str(len(alphalist))xDATA Hkh endtime = time()DATALHk print "Ellapsed Time: " + str(endtime - starttime) + " seconds"DATA$Hl0 print "-------------\n"DATAHlDATAPHl # ------------------------------------------------------------------------ #DATAHm0 # --- Default ---DATA Hmx else:DATA$Hm Register(GUI, Event, BEvent)DATAHnDATAPHn0 # ------------------------------------------------------------------------ #DATAHn#def LoadImg(filename):DATA$Hn# img = PIL.Image.open(filename)DATAHoH# img.load()DATAHo# bb = img.getbbox()DATAHo# imgw = bb[2] + bb[0]DATAHp# imgh = bb[3] + bb[1]DATA(Hp`# print str(imgw) + " " + str(imgh)DATA,Hp# buf = Buffer(GL_BYTE, (imgh, imgw, 4))DATAHq# DATA HqH# for y in xrange(0, imgh):DATA$Hq# for x in xrange(0, imgw):inDATA0Hq# d = img.getpixel((x, imgh - y - 1))DATA HrH# buf[y][x][0] = d[0]EDATA Hr# buf[y][x][1] = d[1]DATA Hr# buf[y][x][2] = d[2]DATAHs8# return imgw, imgh, bufDATAHsnjDATAPHs # ------------------------------------------------------------------------ #bDATAHt0 # --- Draw an image ---DATA(Htxdef DrawImg(buf, imgw, imgh, px, py):DATAHt glRasterPos2f(px, py)DATA<Hu glDrawPixels(imgw, imgh, GL_RGBA, GL_UNSIGNED_BYTE, buf)DATAHu DATAPHu # ------------------------------------------------------------------------ #DATAHv0 # --- Draw a group box ---DATA$Hvxdef GroupBox(x,y, w, h, r, g, b): DATAHv glColor3f(0.0, 0.0, 0.0)DATAHw glRecti(x, y, w, h)DATAHwX glColor3f(r, g, b)DATA(Hw glRecti(x + 1, y + 1, w - 1, h - 1)DATAHw DATAPHx( # ------------------------------------------------------------------------ #DATAHx # --- GUI ---DATA Hxdef GUI():DATA(Hy  global beastmode, colset, colmodeLDATA4Hyx global settings, randset, randx, randy, randzDATA,Hy global randsx, randsy, randsz, filemanADATA0Hz0 global optset, surfacename, objass, objfileDATA0Hz global coldens, colsize, colheight, maxvarDATA0Hz global colr, colg, colb, densvar, cardsetDATA0H{P global alphamaps, alphastr, nstacks, hheightDATA$H{ global curl, hsize, baseimgtxt|DATA0H| global logobuf, alphaset, share, maxheightDATAH|` global iscombedDATAH|DATAPH| # ------------------------------------------------------------------------ #DATA$H}P glClearColor(0.4, 0.4, 0.4, 1.0)DATA H} glClear(GL_COLOR_BUFFER_BIT)DATAH} top = 390DATAH~0 curpos = topDATAH~p line = 25 WDATAH~ longline = 305DATAH~ verylongline = 35EEDATAH8nsDATAPHh # ------------------------------------------------------------------------ #EDATAxH beastmode = Menu("Beast Modes %t|General %x1|Hair and Fur %x2", modeswitch, 15, top + 65, 120, 25, beastmode.val)EEDATAHeDATAPH # ------------------------------------------------------------------------ #EDATAH@ # --- Assign Options ---8DATAHDATAH # White BG group boxesDATA@H# GroupBox(10,curpos - 147, 375, curpos + 20, 0.9, 0.9, 0.9) DATA8Hp# GroupBox(10, 40, 375, curpos - 150, 0.9, 0.9, 0.9) DATAHDATA0H GroupBox(25, 105, 220, 165, 0.8, 0.8, 0.8)EDATA@Hh GroupBox(15,curpos - 10, 370, curpos - 140, 0.6, 0.6, 0.6)DATAH,DATAH glColor3f(0.9, 0.9, 0.9)DATA HP glRasterPos2f(175, curpos)5DATAH Text("Assign:")DATAH curpos -= verylongline8DATAH( glColor3f(0.0, 0.0, 0.0)DATA Hp glRasterPos2i(30, curpos)CDATA H Text("Surface :")DATA H glRasterPos2i(130, curpos)DATAH` Text(surfacename)\DATA\H Button("Assign", pasurf, 235, curpos - 7, 125, 20, "Make selected object the surface")DATAH0 DATAH` curpos -= longlineDATAH glColor3f(0.0, 0.0, 0.0)DATA H glRasterPos2f(30, curpos)DATA H@ Text("Faces :")xDATA H glRasterPos2f(130, curpos)aDATAH Text(str(facecount))DATA\H( Button("All", pafacesall, 300, curpos - 7, 60, 20, "Activate all faces for spawning")TADATA`H Button("Assign", pafaces, 235, curpos - 7, 60, 20, "Activate selected faces for spawning")sDATAH@7DATAHp if beastmode.val == 1: DATAH curpos -= (line + 20)DATADH# GroupBox(25, curpos - 10, 220, curpos + 19, 0.8, 0.8, 0.8)DATA Hp glColor3f(0.0, 0.0, 0.0)DATA$H glRasterPos2f(30, curpos) DATA$H Text("Objects :")7DATA$H` glRasterPos2f(130, curpos)EEDATAH Text(str(nobjs))DATAlH Button("Append", papobjs, 235, curpos - 7, 60, 20, "Append Selected Objects To Be Copied To Surface")DATAlH Button("Assign", paobjs, 300, curpos - 7, 60, 20, "Assign Selected Objects To Be Copied To Surface")DATAH(DATAHX curpos = 210DATAHarDATAH8sDATAPH # ------------------------------------------------------------------------ #aDATA4Hx GroupBox(15,45, 370, curpos - 5, 0.6, 0.6, 0.6) DATAlH settings = Toggle("Settings", tsettings, 45, curpos + 2, 135, 20, settings.val, "Beast Settings") PDATAtHp fileman = Toggle("File Management", tfileman, 200, curpos + 2, 135, 20, fileman.val, "Manage Beast Files") DATA0H Button("X", pexit, 350, 11, 20, 20, "Exit")DATA\Hp Button("Unleash Beast!", pcreate, 140, 11, 100, 23, "Make selected object the surface")DATAH DATAPH( # ------------------------------------------------------------------------ #oDATAH curpos -= verylongline_DATAH if settings.val == 1:8DATA8H8 GroupBox(20,50, 365, curpos -5, 0.9, 0.9, 0.9) DATAdH optset = Toggle("Options", toptset, 25, curpos, 60, 20, optset.val, "Objects Settings") DATAH0 randset = Toggle("Random", trandset, 90, curpos, 60, 20, randset.val, "Objects Size and Orientation Randomization") DATA H if beastmode.val == 2: DATAxH0 colset = Toggle("Colour", tcolset, 285, curpos, 60, 20, colset.val, "Texture for Hair Colour Variation") DATAdH cardset = Toggle("Card", tcardset, 155, curpos, 60, 20, cardset.val, "Card Settings") DATAlHh alphaset = Toggle("Alpha", talphaset, 220, curpos, 60, 20, alphaset.val, "Alpha Settings") DATAHDATAPH0 # ------------------------------------------------------------------------ #DATAH # --- Other Options ---DATAH if optset.val == 1:8DATA$H@ curpos -= verylongline - 3DATA$H glColor3f(0.0, 0.0, 0.0).DATA(H glRasterPos2f(30, curpos + 5)DATAH8 Text("Density :")DATApH densvar = Number("Density: ", -1, 110, curpos, 90, 20, densvar.val, 1, 100, "Set Objects Per Face") DATAH \DATA4HP # Option to share data with master mesh|DATA$H glColor3f(0.0, 0.0, 0.0)DATAH@ colheight = Toggle("Height", tcoldens, 190, curpos - 5, 70, 20, colheight.val, "Limit Size Effect to Height") DATAdH maxvar = Number("Max: ", -1, 270, curpos - 5, 90, 20, maxvar.val, 1, 5, "Maximum") DATAHBDATAH;mDATAH DATAPH # ------------------------------------------------------------------------ #DATA$H # --- Randomization Options ---;DATA H elif randset.val == 1:EEDATA$H0 # Randomization optionsDATAH curpos -= lineDATA$H glColor3f(0.0, 0.0, 0.0)\DATA$H glRasterPos2f(85, curpos)DATAHh Text("Rotation")EDATA$H glRasterPos2f(265, curpos)DATAH Text("Size")DATAHHM|DATAHx curpos -= longlineDATApH randx = Slider("x-rot: ", slide, 25, curpos, 160, 20, randx.val, 0.0, 90.0, 0,"Set Maximum Variation")DATAxH` randsx = Slider("x-siz: ", slide, 200, curpos, 160, 20, randsx.val, 0.0, 5.0, 0, "Set Maximum Variation") DATAH curpos -= longlineDATAtHP randy = Slider("y-rot: ", slide, 25, curpos, 160, 20, randy.val, 0.0, 90.0, 0, "Set Maximum Variation")DATAxH randsy = Slider("y-siz: ", slide, 200, curpos, 160, 20, randsy.val, 0.0, 5.0, 0, "Set Maximum Variation") DATAH curpos -= longlineDATAtH randz = Slider("z-rot: ", slide, 25, curpos, 160, 20, randz.val, 0.0, 180.0, 0, "Set Maximum Variation")DATAxH randsz = Slider("z-siz: ", slide, 200, curpos, 160, 20, randsz.val, 0.0, 5.0, 0, "Set Maximum Variation") DATAH(V>V>V??>V>V>V@E?6T@ ??????< <8ʵ@?}?;^ALAr>2R?DOBdɖ8?=# ?>=??@???=ړ$hJ 0DATAHDATADH8ESubsurf OBHYHHOBbonarbre.001IlH H HAA4~@ >V>V>V@??Mq>۰*۰*Mq>VAA4~@ ?????@4>y-<޿g9/@>x7;^(qb`*>2W?DOBdɖ8?=# ?>=??@???=XDATAHDATADH ESubsurf OBHYIHOBCameraGenerale.002 .=0.:A(AwL@*????Q`@q??i?Yp=??@???OBIYIHOBCAMERAPERSP .=0.;PA(AwL@*????Q`@q??i?Yp=??@???OBIYIIOBMursRdC2.015I^IP&???@I??4"!i"!i?&??????iڿYj=??@???b(b8DATAIPOBIYI IOBLamp jb .<Aʇ $uA????;>????Qq?޾^)$??\?1>Aʇ $uA?????еM>*c <*?Zq >?v\>wV=e|AlQP?DOBd@?=# ?>=??@???OBI YIIOBCubeI?@*@m,@]ߓ????????@*@m,@]ߓ?????i?Yn=??@???b`OBIYI@I OBPlaneI@N@h =@???????R4?FQFQ?R4?@N@h =@?????=bD?<=??@???c pOBI@YIOBPlane.001IfI>s>ި/????ڀ???3!i?3!i>s>ި/?????i=??@??? DATAIMAI&IhMAMursHachureurs.001?????????=d?>VX@???????2 ????????@?=?==? ??II@?DATAxII1(AAA?????>LDATAxI@I5??????????>LMAI&IXIMAnarbre>F?Wj>T??????=d?=2??????2 ????????@?=?==?I ??IIx?DATAxII9BpBpBpLDATAxIxI,??????????>LDATAI ??>?0?0?0?>Ic ????>|E????330???????????????????????????????????????????????????????MAIX&I%IMAnarbre.tronc>>=x??????=d?=2??????2 ????????@?=?==? I"??I!@I!?DATAxI!@I9BpBpBpLDATAxI!I(X??????????>LDATAI" ??>?0?0?0?>Ic ????>|E????330???????????????????????????????????????????????????????MAI%&IXMAtoitureurs.001?/>a`??????????>LTEI(X"I,TEdegrademarron>@???????@@?????@  ??<I)DATAI) ?!:>8>H?pN>΁>M>o>t???????????????????????????????????????????????????????????????????TEI,"I1(I(XTEdegradevert>@???????@@?????@  ??<I-DATAI- ???>:?>H??4 >M>o>t??????????????????????????????????????????????????????????????TEI1("I5I,TEhachureex?m?& ???????@@?????@  ??=\)I2XDATAI2X  >>??=????=%????>\B>K>}>#?>S>|a>YU>?>i????>????>>|a>YU>??\)>|a>YU>??(?????: ?????^R > e>9*??? ????????????????????TEI5"I9I1(TEpoilachure.001??T,>??????ţK>>?=>>?>?=O????>*>K>}>#?>S>|a>YU>?>i????>>>??>,>>??>( ????> >|a>YU>??\) >|a>YU>??/ ?????+! ?????A> e>9*???Q>>-? C??]?????i6?????y,_> e>9*???TEI9"I>`I5TEhachures>}B???????@@?????@  ??=@sI;(DATAI;( >??DD???????????????????????????????????????????????????????????????????TEI>`"I9TETex>@???????@@?????@ ??<MEI?2I^MECube.001bIVpIBIKI@IJP IU@hf` |@@mq@4DATAI@IBDATA IB8h?|@g[WII?|s8WIs8W@gaWI?܄@gU?XC;X9??rs8?XC;?s8?Xŧ?@g[?XX9??| WI޽W?{ @\X(ὸ@4X(?|@,MWZ?|?WZ?|?VRxWZ?|7]WZ?|=WZ?|GWII7YW4W߿GW@,M"W?W?VRW?܂@,M?ZCU?܀?? ZCU?}?VRZ?ZCU?t7h?ZU?vP? ZU?yG?ZU@,M?CU?? ԥCU?VR?CU7Y?U5? ԥU⿂G?U?zs8HZ?ws8JZ?ts8TZ?~@gZHZZ?܀@gXJZZ?܂@gVTZZs8Hs8Js8T@g`HZ@g^JZ@g\TZ?|`RZ?| |u.Y?{?\߽Rླྀ |ླྀ?\܀?|?VRpU?|?VRi3 r,4%?}?VRb?"Qvaٰ?}?6?~?᳿Z\u.&??>ϐPqV.R?~@,M ?@,M?܀@,M>4 ?{GUZZ?zGȿ3 r,4x?zG?"Q?zB6?yFv%?xK>?!s_?z7` ?x7bp0#?v7e>4 s&t7Y 7Y΀7Y>4 464Z\5>ϐPῂG?"Q࿂G3 ࿂GU?VRU?VR3 ?VR?"Q?6?Z\?>ϐP@,M! @,M ΀@,M>4 ?\DROţN?\7aCWN@?\I>?J.?\7d>4IJuc?Fp?VRe?"QP=P?Ft?>ϐPD_?Fn?VRl3 F3QEE?Fr?ᵿZ\N?qM6?&D} |N?q?&DyGƿ3 F3Q?&D{GUZZ?&D}GWIII?&D}ARZ?&D}WIIDATAIJPIKDATA IK5"""" " " " """"" """ """" """" """" """ " "!"!""#""# "         # " ! $"$%"%&"&"'"'("()")"*"*+"+,","-".-"./"/"0"01"12 2 3 34 45 5 6 67 78"8 9 9: :;"; < <= => > ?"?@"@A A B BC CD"D E EF FG"G H HI IJ J! K KL LM M" #N NO OP P Q QR RS S T TU UV V W WX XY Y $* %+ &, /) .( '- 06 17 28 69 7:"8;"9< := ;> <' =( >) 2A 1@"AD @C ?B DG"CF"BE G& F% E$ J, I+ H* JM IL HK MN LO KP 5N 4O 3P 5S 4R 3Q SV RU QT VY UX TW /Y .X W- CZ"[Z"F["G]"\]"\D"]["\Z"8^"_^";_":a"a`"7`"_a"^`"@c"bc#1b"?d dc#e"de#fb#0f fg#g"ge#df!DATAIU@IVpDATAIVp4f        # #""!!$*$%+*%&,+&,)/)(./('-.'-60671078218 2 969:76;8 <9 <=:9=>;:>;'< '(=<()>=)>A2 A@12DADC@ACB?@B?GDFEBCEB&G&%FG%$EF$E!J,JI+,IH*+H*"MJ!MLIJLKHIKH#NM"NOLMOPKLPK 5N#54ON43PO3 P S5 SR45RQ34Q 3VS VURSUTQRTQYVYXUVXWTUWT/Y/.XY.-WX-WFCZ[DG]\GF[]CD\Z][Z\;8^_7:a`:;_a87`^a_^`1@cb@?dc?ed01bf0fggedegfcdfbMEI^2IfI?MEMursRdC2.015I_IeIa8IcI`IbX Id  8 i@|M@9(@7?SDATAI_I%DATAI`Ia8DATAIa88 @ S7N<@ G7N>֞@ SN<Ž>ֹ@ HN<Ži@v)Wi@v)]Wi@܏]*<Ži@܏*<Ž>ֹ@q>֞@qB<@qY @qBY DATAIbXIcDATAIc5"""""##!## # # " " " " " ""DATAIdIeDATAIe4        MEIf2IlI^MEPlane.001XIhIlIipIk Ih@Ii Ik3'??7'ŬDATAIhIDATAIh@IipDATAPIip8?>2@"?@#@!?2@'DATAIiIk DATA0Ik 5####DATAIkIlDATAIl4MEIl2IIfMESphere In0IŀIoI InhI IP@?ܿ~|ME@K#@Z/@DATAIn0IIXDATAInhIoDATA#(Io8½Ǿ`O(U$ z; <ȶ@R5~f Ub"F nrǾ~̆[G?n1J/U@nV(a憧Uiy~̊"Fb"FG*c@R5` h&$G"5) uFҿX H a9U pob(?`a?1J,Ux?[P1R``-?h\ƿ({R ?m Ŀ@R:~"?h\Wyvu?[Jl?fE}?G-yv' ?/e~+ƿP?yv?j?l6Uţ>X"Wjړ>,@R*+>X0(쿂ڑ/,?&lO?-ῄ(yU W?/zxPx~?G@-꿆4xt>nB%Hޟy4 1>q@HlhGF>ƿ>Iz.;>[YHޟte1>ŦnXHlMJs>m8vG p> r~FKj<@h+F0E n[EÝ5j[JkEʨ "]eʎ5D֊}{"%^&Eʌ-w!alENg1F0٪Yq=0 #FϟuV> z%G~<?&=T62Ku=kݖ"gd|>y  ģfuKr?-g b[W<>>cJa~)h3&f> =KW|)IݖhIq>(-̿ ㅿBrܡ .*4S |<`[=h$X4܎7={83!n@R1?>Q Za¿sX6bP܏N6>Sp#ܡ*~K.*&yb>¿gVЋ XhYh>vLa݀@ѿH}fF]jSgd-?g6g=]Zȿ~LģU١k?-bp \>u>bTt[_?;ȿZsQ'MqC8>+]@R7zh?@l@R9I){@ >xꤿ}?;˿&1 'Mu&m*7Lz>zZ?aː@hZY>oLBv >c&ЈAr&yQX{>K'Hv/k(ۿ.?ف>3#/?ؿƿTHp > G (۾^yd?b[ʒoӬvG>׻6|0r?#p ΚsrVm7ݢ:q?;LEB5,tm i({?R W\=eoJ>z b}>=DT}>J 1-xqz=ۙP>,|lE>пRۿ)~=lIpfd=\(p6 X3࿂hAW7p@.>ՐF906$ª3Ä~^>: 4nOJ਄Z ,sr[pDXQ2}=q R۪qtrJ-Ff7ho CRPt7 -|Vܿ#bpC7> A̒@ @!PQʢW h CW7*& 1uP>T(( &yd ?">ܿ U>^n?a_$$je%J~>PnG[V:>&Zu$V?Im~a @=\@i*&/lEjr#:>ұ>iygmV@+FġnoN e"Pb>a8:$zYYϾbE^ c+ '6=tvjKeHAkFDʎ3y~Ψ*)${Ľ=P¸(ӈ&aҿ)ӥDƄ4!=6qHGK!ܦ> II4R?gDh/"j>hi!rVe>|fb1A ?f $S4BE9gQ<>3Juz%&ePh!>x8XQϊ0bs~E<Ð?>ế&=>@uտ$ޓ=LnjFE>)m]% ? #->;.sfGc|Z>¿t&$|IК?!wB6m>!rAG+? Nu""(p+f?4#:dbo$>nbd[H0_z ?Lg'jtS2c?>\ϿLkF>hKqHCxO|?%!s(nں??, 2u'J>b&9Ip|)?5P{dTg2Gg>?6PHp98>?NJ0)S_?a6㿽z ?kܿ:.}e?]`Tdiuѱv?Z&Xb2Th-?.b;9*?0|X6}?\ܿyV#T >AĿfƄjc>9̿V-JZ> 2`ƿ,?>f &E5d0>΄ U&W_q? ƿu|X K?NԾE%?;,m/6s=oHk}Z>SNppfLrh̔l_|RnAhk kX+.ij=NÅXh!1AsjkZWw nfDjB dzn) !di9j^Hek2aJ=k"U>trV7W>v^lu%>k^RDNmi}>k޿Dl~ j>6Zo6p^㌿+o.yۗ>T OZ@jo6RLH> }I9nU8̾pXnT_w?F?/ B;X[?/I s3t?/$ͮt >n 6pz4>@@뿳W>&>.\< 2>JZ) i>Qֿcڿc>CuaupތQ J?~/#?/\~ÿsˆ' 7?F?#ua{:O*@?WcEr ?a=LOx2?a=3#v+u?W+\&Wvt?. #%Njp2)? Y-%jt!Q?hMS%j[D?(eK%Njkjl>eu%$8 π5>{)$. >cw#fF(>l"ݴۙ+=uP\\"7hxD!𬡌c8C(!<-@%"7XM?=J"^o{(>P@3#fFbn&>`$#u%>Bָ$9V]8<L`T| O4tC'@z|C)z1eE "4sPH ,vʿ/lI Q7I bpos ᘈ*?{Vv'@E@wO&eF*?!(h=?p?MPc3@/?3 >EFSPV@9U>&wdx?t²>(jT^&!Adv<-h ? ]eƍ0vrK@vah!?j)O?@HT>@@o2Z?{P:=]C?zjH3 V>?*^Ț9kg?7?iQH|?P?K8?lAmD ?e?69?p;V0^?r@ l=+t`2?튆${< ? 2{K??h?Դ1pm?w ?U?m4>o' @AI?U7?q?Si"=f??IGj @׽:P?B`oq@=6=`? (>gxF(=^?-d?`?qL?+~ ^U?,?ڑ( ul?8?ln)?$T8p,?c?`9+_?s?8n~{U>?_?F)xr?N?tBzF>j?&@}T`*O?_*`u#>p&F!@!}a?6c{ ??Nj?VC?2D>䂭_?v33_GTO;F?3mX'@mZp?xto)@XAzF?P9D@@@L]}?N>]@"S;#~.?`H?!ǤY?P(?g>ٔ4!qn?Ğ?eh@J`k>njv?ar]:9?ԍA?Iľg>?Ť?11=kr/9X??I?% ='k]??ݼ> P_]~B?>ݹǗEx@92c0> ?+o>V|)%?⻾ى `{=޽3?]C}}S~ ?>G~^z?Nx?Y~38'翦?в 󆾔ݔt`?pr>Ȧ;U >ݔrx3 3;)]Ϗ_|'}>d?*O "EɆ?Ǽ B?T*>I9xS*3jϧyr>e͊ǿw!2 ;`C<>Ȫ'1G ?9ݡhR@P2?Dl K@+M !n?Qƿ2? P>)(@"tZ%')BQ{B@#~e>XQ7p #@gI?f.zv4@V֫s?XթߠP]H?+Mm@j ?mW?CMm\64߸>?].']|SI?g`?6}(?ډ@ Mxlhd?MsIP><?K;'bF*r!?# W?+=55J`nJΨ lqw ZʾN/7̿ˤYϵ˫ fǯ!E%sLa Or Rw?"m$ ?o36 ~^?? BވS1|>͖,.S-?J? bѿd]G?AϿ"/8xr@>M\LԦ@',[2I}t>c/T@/gՈh';9>ɿ_Avi?VK>>^_?]v?h?f()R?}>x?Eۿ&d$R?OR?A2%1C=õ[?tkDD_58&b5ef^'e>]SFy?s(D >󠉿`9ɿ_Av qQ> 嗂'e]٦mi󠉿z݂{cR"W4>婾^_? ?}rMd/X?O=%Z?> +}3# eS?JA1g >xEۿ&փ0=õ[t&6?E _■e*ԗDATAII DATA0I 5P"n"p"P"R"r"R"T"t"T"V"v"V"X"x"X"Z"z"Z"\"|"\"^"~"^"`"" `" b" " b" d" " d" f" " f" h" " h" j" "j"l""l"n""Q"o""Q"S""S"U""U"W""W"Y""Y"[""["]" ]"_""_"a""a"c""c"e""e"g""g"i""i"k""k"m""m"o"" " " " "!"!"!"! """"""""#"#"#"#"$"$"$"$"%"%"%"%"&"&"&"&"'"'"'"'"( ("("(")")")")"*"*"*"*"+ +"+"+",",",","-"-"-"-"."."."."/"/"/"/"0"0"0"0"1"1"1"1"2p"2q"2"2"3"3"3"3"4 4"4"4"5"5"5"5"6"6"6"6"7"7"7"7"8"8"8"8"9"9"9"9":":":":";";";";"<"<"<"<"="="="=">">">">"?"?"?"?"@"@"@"@"A"A"A"A"B"B"B"B"C}"C~"C"C"D"D"D"D E{"E|"E}"E"Fy"Fz"F{"F"G"G"G"G"Hw"Hx"Hy"H"I"I"I"I"Ju"Jv"Jw"J"K"K"K"K"Ls"Lt Lu"L"M"M"M"M"Nq"Nr"Ns"N"O"O"O"O"P"Q"R"S"T"U"V"W"X"Y Z"["\"]"^ _"`"a"b"c"d"e"f"g"h"i"j"k"l"m"n"o"p p"q"q"r"r"s"s"t"t"u"u"v"v"w"w"x"x"y"y"z"z"{"{"|"|"}"}"~"~ """ """"""""""""""" "" """"""""""""""""""" """""" " "" " " " "  "" " " "" "" " " "" "" "" "" "" "" """"""""""""""""""" "" " """" """"""""""" """""""""""""""""""" """ """"""""""""" """"""""""""" """""""""""""""""" " " " " "!"!"!"!"!"""""""""""#|"#~"#"#"#"$u"$w"$"$"$"%n"%p"%"%"%"&a"&d"&i"&"&"'["']"'b"'{"'"(S"(U"(Z"(t"(}")J")L )T")m")v"*K"*N"*h"*o"*"+M"+O"+V"+\"+c ,",",",", ,"-"-"-"-"-"-". . ."."."."/"/"/"/"/"/"0"0"0"0"0"0"1"1"1"1"1"1"2"2"2"2"2"2"3"3"3"3"3"3"4"4"4"4"4"4"5"5"5 5"5"5"6o"6p"6q"6r"6"6"7"7"7"7"7"7"8"8"8"8"8"8"9"9"9"9"9"9":":":":":":";{";|";";";";"<}"<~"<"<"<"<"=t"=u"=x"=z"="=">v">w">x >y">"> ?m"?n"?q"?s"?"?"@h"@i"@j"@l"@"@"Aa"Ab"Ae"Ag"A A"BZ"B["B^"B`"B"B"CS"CT"CW CY"Cy"Cz"DJ"DK"DP"DR"Dr"Ds"EN"EO"EQ"ER Ej"Ek"Fc"Fd"Fe"Ff"Fk"Fl"G\"G]"G^"G_"Gf"Gg"HU"HV"HW"HX H_"H` IL"IM"IP"IQ"IX IY"JL"JP"Jm"Js"KN"KR"Ko"Kr"LP"LT"LY"MO"MQ MV"MX"NR"Nh"Nj"OQ"Oc"Ok"PQ"PR"QR"SU"SW"St"Sz"TY Tv"Ty"UW UZ"U`"VX"V\"V_"WX"WY"XY"Z`"Z}"Z"[]"[^"[{"["\_"\c"\f"]^"]b"]g"^_"^`"_`"ad"ae"a"a"bg"b"b"cf"ck"de"di dl ef"eg fg"hj"h"h"il"i"i"jk"jl"kl"ms"mv"m"np"nq"n"n"or"o"o"pq"p"p"qr"qs"rs"tz"t}"t"uw"ux"u u"vy"v"wx"w"w"xy"xz"yz"{"{"{"|~"|"|"|"} }"~"~"~"""""""""""""""""" """" """"""""""""""""" """"""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""" """DATAIPIŀDATA-Iŀ4@pPrRtTvVxXzZ|\~^` b d f h jl2p/.- , + * ) ('&%$#" !3OMKIGDB@><:86401579;=?ACE}F{HyJwLuNs2q! Nq "Ls"#Ju#$Hw$%Fy%&E{&'C}'(A()?)*=*+;+,9,-7-.5./1/!2oo3mm0kk4ii6gg8ee:cc<aa>__@]]B[[DYYGWWIUUKSSMQQO3O OM"MK#KI$IG%GD&DB'B@(@>)> < * < : + : 8 , 8 6 - 6 4 . 40/03!npn151l75j97 h;9 f=; d?= bA? `C~A^E}|C~}\~F{zE|{Z|HyxFzyXzJwvHxwVxLutJvuTvNsrLtsRt2qpNrqPrxzyqsrjklefg^_`WXYPQRLPJOQMKRNUWSMXVTYL]^[V_\Z`Udea\fcbg]NjhckOildpnqKormJswuxTvytSz~|Z}{[baihwmvn~t}u{|po,.!.-"-, ,0!0/%/, -2"21#1- 14#43$31 35$5/%/3 07!76o*o6p0%p.9"98&8.!2;|#|;{:'{:2"4=u$u=t<}(t}<~4#~5?n%n?m>v)mv>w5$w7@h*h@i8&i87!9Aa&aAb:'b:9";{B['[{BZ<}(}Z<~;|#|~=tzCzS(StCTy>yv)vT>wx=xu$uw?msDsJ)JmDKr6ro*oK6pq?qn%np@liFdl&idFkcEOk+cOEjN@hj*NhAgbG]g'b]Gf\Fcf+\cFedAae&daB`ZHU`(ZUH_VG\_+V\G^]B[^'][CYTILY)TLIXMHVX+MVHWUCSW(USDRKENR*KNEQOIMQ+OMIPLDJP)LJIQPERQDPRHXWIYXCWYG_^H`_B^`FfeGgfAegEkjFlk@jl6qrDrs?sq>xyCyz=zx<B;:A98@7>?5<=4:;289.670/5334112-/0,-.,MEI2IlMEPlaneII III Ix6BjBJPBJPBjDATAII DATAxI 8BJNBJMBJNJPJQJNZZJLBJQZZJQJNBjJLBJQBjDATAIIDATATI5"""""#"DATAIxIDATA(I4DNA1l#SDNANAME'*next*prev*first*lastxyzwxminxmaxyminymax*pointergroupvalpadname[32]typesubtypeflagdatalentotallensaved*newid*libname[24]usicon_id*propertiesid*idblock*filedataname[240]filename[240]tot*parentcurvecurblocktypeshowkeyposcurvaladrcodetotelem*data*weightsvgroup[32]sliderminslidermax*refkeyelemstr[32]elemsizeblock*ipo*fromtotkeyslurph**scripts*flagactscripttotscript*line*formatblen*nameflagsnlineslines*curl*sellcurcselc*undo_bufundo_posundo_len*compiledsizeseekpassepartalphapad1clipstaclipendlensortho_scaledrawsizeshiftxshiftyYF_dofdistYF_apertureYF_bkhtypeYF_bkhbiasYF_bkhrotscriptlinkh*rectframenrframesoffsetsfrafie_imacyclokmulti_indexlayerpassmenunribufs*anim*rrsourcelastframetpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfile*previewlastupdatelastusedanimspeedgen_xgen_ygen_type*vnodetexcomaptomaptonegblendtype*object*texuvname[32]projxprojyprojzmappingofs[3]size[3]texflagcolormodelrgbkdef_varcolfacnorfacvarfacdispfacwarpfacname[160]*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*instance_init)()(*callback)()versionaipotype*ima*cube[6]imat[4][4]obimat[3][3]stypeviewscalenotlaycuberesdepthrecalclastsizenoisesizeturbulbrightcontrastrfacgfacbfacfiltersizemg_Hmg_lacunaritymg_octavesmg_offsetmg_gaindist_amountns_outscalevn_w1vn_w2vn_w3vn_w4vn_mexpvn_distmvn_coltypenoisedepthnoisetypenoisebasisnoisebasis2imaflagcropxmincropymincropxmaxcropymaxxrepeatyrepeatextendcheckerdistnablaiuser*plugin*coba*envloc[3]rot[3]mat[4][4]min[3]max[3]*obmodetotexenergydistspotsizespotblendhaintatt1att2shadspotsizebiassoftbufsizesampbuffersfiltertypebufflagbuftyperay_sampray_sampyray_sampzray_samp_typearea_shapearea_sizearea_sizeyarea_sizeztexactshadhalostepYF_numphotonsYF_numsearchYF_phdepthYF_useqmcYF_bufsizeYF_padYF_causticblurYF_ltradiusYF_glowintYF_glowofsYF_glowtypeYF_pad2*mtex[10]specrspecgspecbmirrmirgmirbambrambbambgambemitangspectraray_mirroralpharefspeczoffsaddtranslucencyfresnel_mirfresnel_mir_ifresnel_trafresnel_tra_ifiltertx_limittx_falloffray_depthray_depth_traharseed1seed2mode_lflarecstarclinecringchasizeflaresizesubsizeflarebooststrand_stastrand_endstrand_easesbiasshad_alphapadfrgbselpr_typeuse_nodespr_backpr_lampseptexml_flagdiff_shaderspec_shaderroughnessrefracparam[4]rmsdarkness*ramp_col*ramp_specrampin_colrampin_specrampblend_colrampblend_specramp_showpad3rampfac_colrampfac_spec*nodetree*groupfrictionfhreflectfhdistxyfrictdynamodepad2YF_arYF_agYF_abYF_dscaleYF_dpwrYF_dsmpYF_presetYF_djitname[256]scale*bbi1j1k1i2j2k2selcol1selcol2quat[4]expxexpyexpzradrad2s*mat*imatelemsdisp**mattotcolwiresizerendersizethreshvec[3][3]alfaweightradiush1h2f1f2f3hidevec[4]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsv*bp*beztcharidxkernnurb*bevobj*taperobj*textoncurve*path*keybevpathlenbevresolwidthext1ext2resolu_renresolv_renspacemodespacinglinedistshearfsizewordspaceulposulheightxofyoflinewidth*strfamily[24]*vfont*vfontb*vfonti*vfontbisepchartotboxactbox*tbselstartselend*strinfocurinfoname[128]maxrcttotrctvartypetotvertipoextraprtbitmask*drivereffect*mface*mtface*tface*mvert*medge*dvert*mcol*msticky*texcomesh*mselect*oc*sumohandlevdataedatafdatatotedgetotfacetotselectcubemapsizesmoothreshsubdivsubdivrsubsurftype*mr*pv*tpageuv[4][2]col[4]transptileunwrapv1v2v3v4edcodecreasedef_nr*dwtotweightco[3]no[3]co[2]indexv[4]midchildrenstartpad[2]v[2]*verts*faces*colfaces*edges*vert_edge_map*vert_face_map*map_memlevelslevel_countcurrentnewlvledgelvlpinlvlrenderlvluse_col*edge_flags*edge_creases*vert_map*edge_map*old_faces*old_edges*errormodifiersubdivTyperenderLevels*emCache*mCachedefaxispad[6]startlengthrandomizeseed*curve_ob*offset_oboffset[3]scale[3]merge_distfit_typeoffset_typecountaxistolerancesplit_angle*texturestrengthdirectiondefgrp_name[32]midleveltexmapping*map_object*projectors[10]*imagenum_projectorsaspectxaspectypercentfaceCount*objectcenterstartxstartyheightnarrowspeeddamptimeoffslifetimedeformflagparentinv[4][4]cent[3]falloff*indexartotindexforceoperationpntswopntsuopntsvopntswtypeutypevtypewfufvfwdudvdw*defvec[8][3]dvec[3]max**obpartypepar1par2par3parsubstr[32]*pardata*track*proxy*proxy_group*proxy_from*action*poseconstraintChannelsnetworkdefbasemodifiersdloc[3]orig[3]dsize[3]drot[3]dquat[4]obmat[4][4]laycolbitstransflagipoflagtrackflagupflagnlaflagprotectflagipowinscaflagscavisflagboundtypedupondupoffdupstadupendsfctimemassdampinginertiaformfactorsofttimerdampingsizefacdtdtxactcolempty_drawtypepad1[3]empty_drawsizepropsensorscontrollersactuatorsbbsize[3]actdefgameflaggameflag2softflaganisotropicFriction[3]constraintsnlastripshooks*pd*soft*dup_groupfluidsimFlagrestrictflagshapenrshapeflagpad4*fluidsimSettings*derivedDeform*derivedFinallastDataMaskcurindexactivedeflectforcefieldpdef_damppdef_rdamppdef_permf_strengthf_powermaxdistpdef_sbdamppdef_sbiftpdef_sbofttotpointtotspring*bpoint*bspringnodemassgravmediafrictrklimitphysics_speedgoalspringgoalfrictmingoalmaxgoaldefgoalvertgroupfuzzynessinspringinfrictefraintervallocalsolverflags**keystotpointkeysecondspringcolballballdampballstiffsbc_modeaeroedgeminloopsmaxloopschokepad5*scratchshow_advancedoptionsresolutionxyzpreviewresxyzrealsizeguiDisplayModerenderDisplayModeviscosityValueviscosityModeviscosityExponentgravxgravygravzanimStartanimEndgstarmaxRefineiniVelxiniVelyiniVelz*orgMesh*meshSurface*meshBBsurfdataPath[240]bbStart[3]bbSize[3]typeFlagsdomainNovecgenvolumeInitTypepartSlipValuegenerateTracersgenerateParticlessurfaceSmoothingsurfaceSubdivsunusedDNADummyparticleInfSizeparticleInfAlphafarFieldSize*meshSurfNormalsmistypehorrhorghorbhorkzenrzengzenbzenkambkfastcolexposureexprangelinfaclogfacgravityactivityBoxRadiusskytypephysicsEnginemisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxaodistaodistfacaoenergyaobiasaomodeaosampaomixaocolor*aosphere*aotableshemiresmaxiterdrawtypesubshootpsubshootenodelimmaxsublamppamapamielmaelmimaxnodeconvergenceradfacgammaselcolsxsy*lpFormat*lpParmscbFormatcbParmsfccTypefccHandlerdwKeyFrameEverydwQualitydwBytesPerSeconddwFlagsdwInterleaveEveryavicodecname[128]*cdParms*padcdSizeqtcodecname[128]codecaudio_codecvideo_bitrateaudio_bitrategop_sizerc_min_raterc_max_raterc_buffer_sizemux_packet_sizemux_ratemixratemainpad[3]*mat_override*light_overridelayflagpassflagpass_xor*avicodecdata*qtcodecdataffcodecdatacfraimagesframaptothreadsframelenblurfacedgeRedgeGedgeBfullscreenxplayyplayfreqplayattribrt1rt2stereomodedimensionspresetmaximsizexschyschxaspyaspxpartsypartswinposplanesimtypesubimtypequalityscemoderendererocresrpad[2]alphamodeosafrs_secedgeintsafetyborderdisprectlayersactlaygaussdither_intensitybake_osabake_filterbake_modebake_flagGIqualityGIcacheGImethodGIphotonsGIdirectYF_AAYFexportxmlYF_nobumpYF_clamprgbyfpad1GIdepthGIcausdepthGIpixelspersampleGIphotoncountGImixphotonsGIphotonradiusYF_numprocsYF_raydepthYF_AApassesYF_AAsamplesGIshadowqualityGIrefinementGIpowerGIindirpowerYF_gammaYF_exposureYF_raybiasYF_AApixelsizeYF_AAthresholdbackbuf[160]pic[160]ftype[160]col[3]framename[64]*brushtoolcornertypeeditbutflagjointrilimitdegrstepturnextr_offsdoublimitsegmentsringsverticesunwrapperuvcalc_radiusuvcalc_cubesizeuvcalc_mapdiruvcalc_mapalignuvcalc_flagselect_threshimapaintclean_threshretopo_modeline_divellipse_divretopo_hotspotdirairbrushview*sessiondrawbrushsmoothbrushpinchbrushinflatebrushgrabbrushlayerbrushbrush_typetexnrtexrepttexfadetexsepaveragingdraw_flagtablet_sizetablet_strengthsymm*camera*world*setbase*basactcursor[3]twcent[3]twmin[3]twmax[3]editbutsizeselectmodeproportionalprop_mode*ed*radioframing*toolsettingsaudiomarkersjumpframe*theDagdagisvaliddagflagssculptdatazoomblendximyimspacetypeblockscale*areablockhandler[8]viewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]winmat1[4][4]viewmat1[4][4]viewquat[4]zfacpad0persp*ob_centre*bgpic*localvd*ri*retopo_view_data*depthsob_centre_bone[32]localviewlayactscenelockaroundcamzoompivot_lastgridgridviewpixsizenearfarcamdxcamdygridlinesviewbutgridflagmodeselecttwtypetwmodetwflagtwdrawflagtwmat[4][4]clip[4][4]*clipbbafterdrawzbufxrayflag2gridsubdivsnap_target*properties_storageverthormaskmin[2]max[2]minzoommaxzoomscrollkeeptotkeepaspectkeepzoomoldwinxoldwinyrowbutv2d*editipoipokeyactname[32]constname[32]totipopinbutofschannellockmedian[3]cursenscuractaligntabomainbmainbo*lockpointexfromshowgroupmodeltypescriptblockre_alignoldkeypresstab[7]chanshown*filelisttotfiletitle[24]dir[160]file[80]ofssortmaxnamelencollums*libfiledataretvalmenuact(*returnfunc)()(*returnfunc_event)()(*returnfunc_args)()*arg1*arg2*menup*pupmenuoopsvisiflagtree*treestoresearch_string[32]search_tsesearch_flagsdo_outlinevisstoreflagdeps_flags*cumapimanrcurtileimtypenrshowsparecentxcenty*info_str*info_spare*spare*texttopviewlinesfont_idlheightleftshowlinenrstabnumbercurrtab_setshowsyntaxunused_paddpix_per_linetxtscrolltxtbar*scriptredraws*idaspect*curfont*edittreetreetypetitle[28]fasesubfasemouse_move_redrawimafasemxmydirslidirsli_linesdirsli_sxdirsli_eydirsli_exdirsli_himaslifileselmenuitemimasli_sximasli_eyimasli_eximasli_hdssxdssydsexdseydesxdesydeexdeeyfssxfssyfsexfseydsdhfsdhfesxfesyfeexfeeyinfsxinfsyinfexinfeydnsxdnsydnwdnhfnsxfnsyfnwfnhfole[128]dor[128]file[128]dir[128]*firstdir*firstfiletopdirtotaldirshilitetopfiletotalfilesimage_sliderslider_heightslider_spacetopimatotalimacurimaxcurimay*first_sel_ima*hilite_imatotal_selectedima_redraw*cmapoutline[4]neutral[4]action[4]setting[4]setting1[4]setting2[4]num[4]textfield[4]textfield_hi[4]popup[4]text[4]text_hi[4]menu_back[4]menu_item[4]menu_hilite[4]menu_text[4]menu_text_hi[4]but_drawtypeiconfile[80]back[4]header[4]panel[4]shade1[4]shade2[4]hilite[4]grid[4]wire[4]select[4]lamp[4]active[4]group[4]group_active[4]transform[4]vertex[4]vertex_select[4]edge[4]edge_select[4]edge_seam[4]edge_sharp[4]edge_facesel[4]face[4]face_select[4]face_dot[4]normal[4]bone_solid[4]bone_pose[4]strip[4]strip_select[4]vertex_sizefacedot_sizebpad[2]syntaxl[4]syntaxn[4]syntaxb[4]syntaxv[4]syntaxc[4]movie[4]image[4]scene[4]audio[4]effect[4]plugin[4]transition[4]meta[4]bpad1[4]tuitbutstv3dtfiletipotinfotsndtacttnlatseqtimatimaseltexttoopsttimetnodebpad[4]spec[4]dupflagsavetimetempdir[160]fontdir[160]renderdir[160]textudir[160]plugtexdir[160]plugseqdir[160]pythondir[160]sounddir[160]yfexportdir[160]versionsvrmlflaggameflagswheellinescrolluiflaglanguageuserprefviewzoomconsole_bufferconsole_outmixbufsizefontsizeencodingtransoptsmenuthreshold1menuthreshold2fontname[256]themesundostepscurssizetb_leftmousetb_rightmouselight[3]tw_hotspottw_flagtw_handlesizetw_sizetextimeouttexcollectratememcachelimitframeserverportpad_rot_angleobcenter_diarvisizervibrightversemaster[160]verseuser[160]vertbaseedgebaseareabase*sceneendxendysizexsizeyscenenrscreennrfullmainwinwinakthandler[8]*newvvec*v1*v2panelname[64]tabname[64]drawname[64]ofsxofsycontrolsnapold_ofsxold_ofsysortcounter*paneltab*v3*v4*fullwinmat[4][4]headrctwinrctheadwinwinheadertypebutspacetypewinxwinyhead_swaphead_equalwin_swapwin_equalheadbutlenheadbutofscursorspacedatauiblockspanelssubvstr[4]subversionpadsminversionminsubversiondisplaymode*curscreen*curscenefileflagsglobalfname[80]*ibuf*se1*se2*se3nrdone*stripdataorxory*instance_private_data**current_private_data*newseqstartofsendofsstartstillendstillmachinestartdispenddispmulhandsize*strip*curelemfacf0facf1*seq1*seq2*seq3seqbase*sound*hdaudiolevelpancurposstrobe*effectdataanim_preseek*oldbasep*parseq*seqbasepmetastackedgeWidthangleforwardwipetypefMinifClampfBoostdDistdQualitybNoCompScalexIniScaleyIniScalexFinScaleyFinxInixFinyIniyFinrotInirotFin*frameMapglobalSpeedbuttypeuserjitstaendtotpartnormfacobfacrandfactexfacrandlifeforce[3]vectsizemaxlendefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstepomattimetexspeedtexflag2negvertgroup_vvgroupname[32]vgroupname_v[32]*keysminfacusedusedelemdxdylinkotypeold*poin*oldpoinresetdistlastval*makeyqualqual2targetName[32]toggleName[32]value[32]maxvalue[32]materialName[32]damptimerdelaypropname[32]matname[32]axisflag*fromObjectsubject[32]body[32]pulsefreqtotlinks**linksinvertfreq2axisfbuttonbuttonfhathatfprecisionstr[128]*mynewinputstotslinks**slinksvalotime*actblendinprioritystrideaxisstridelengthsndnrpad1[2]makecopycopymadepad2[1]trackvolume*melinVelocity[3]localflagforceloc[3]forcerot[3]linearvelocity[3]angularvelocity[3]butstabutendminfacvisifacslowminloc[3]maxloc[3]minrot[3]maxrot[3]distributionint_arg_1int_arg_2float_arg_1float_arg_2toPropName[32]*toObjectbodyTypefilename[64]loadaniname[64]goaccellerationmaxspeedmaxrotspeedmaxtiltspeedrotdamptiltdampspeeddamp*sample*stream*newpackedfile*snd_soundpanningattenuationpitchmin_gainmax_gaindistancestreamlenchannelshighpriopad[10]gaindopplerfactordopplervelocitynumsoundsblendernumsoundsgameengine*lamprengobjectchildbaserollhead[3]tail[3]bone_mat[3][3]arm_head[3]arm_tail[3]arm_mat[4][4]xwidthzwidthease1ease2rad_headrad_tailbonebasechainbasepathflaglayer_protectedghostepghostsizeghosttypepathsizeghostsfghostefpathsfpathefconstflagikflagselectflag*bone*childiktree*b_bone_matschan_mat[4][4]pose_mat[4][4]pose_head[3]pose_tail[3]limitmin[3]limitmax[3]stiffness[3]ikstretch*customchanbaseproxy_layerstride_offset[3]cyclic_offset[3]reserved1autosnapactnractwidthtimeslidename[30]enforce*tariterationsrootbonesubtarget[32]orientweightgrabtarget[3]reserved2minmaxflagstickystuckcache[3]lockflagfollowflagzminzmaxvolmodeplaneorglengthbulgepivXpivYpivZaxXaxYaxZminLimit[6]maxLimit[6]extraFzchannel[32]no_rot_axisstride_axiscurmodactstartactendactoffsstridelenrepeatblendoutstridechannel[32]offs_bone[32]hasinputhasoutputdatatypesockettypenslimitstack_indexinternstack_index_extlocxlocyown_indexto_index*tosock*link*new_nodelastyoutputs*storageminiwidthcustom1custom2need_execexectotrbutrprvr*typeinfo*fromnode*tonode*fromsocknodeslinks**stackinitstacksizecur_index**alltypes*owntype(*timecursor)()(*stats_draw)()(*test_break)()cyclicmoviesamplesminspeedbokehhuesatt1t2t3fstrengthfalphakey[4]colname[32]bktyperotationpreviewgamcono_zbuffstopmaxblurbthreshshortymintablemaxtableext_in[2]ext_out[2]*curve*table*premultablecurrcliprcm[4]black[3]white[3]bwmul[3]offset[2]innerradiusratergb[3]clone*layerstotlayermaxlayertotsizeTYPEcharucharshortushortintlongulongfloatdoublevoidLinkListBasevec2svec2ivec2fvec2dvec3ivec3fvec3dvec4ivec4fvec4drctirctfIDPropertyDataIDPropertyIDLibraryFileDataIpoKeyBlockKeyScriptLinkTextLineTextPackedFileCameraPreviewImageImageUserImageanimRenderResultMTexObjectTexPluginTexCBDataColorBandEnvMapImBufTexMappingLampWaveMaterialbNodeTreeGroupVFontVFontDataMetaElemBoundBoxMetaBallBezTripleBPointNurbCharInfoTextBoxCurvePathIpoDriverIpoCurveMeshMFaceMTFaceTFaceMVertMEdgeMDeformVertMColMStickyMSelectOcInfoCustomDataMultiresPartialVisibilityMDeformWeightMultiresColMultiresColFaceMultiresFaceMultiresEdgeMultiresLevelMultiresMapNodeModifierDataSubsurfModifierDataLatticeModifierDataCurveModifierDataBuildModifierDataArrayModifierDataMirrorModifierDataEdgeSplitModifierDataDisplaceModifierDataUVProjectModifierDataDecimateModifierDataWaveModifierDataArmatureModifierDataHookModifierDataSoftbodyModifierDataBooleanModifierDataLatticebDeformGroupLBufbActionbPosePartDeflectSoftBodyFluidsimSettingsDerivedMeshObHookSBVertexBodyPointBodySpringSBScratchWorldRadioBaseAviCodecDataQuicktimeCodecDataFFMpegCodecDataAudioDataSceneRenderLayerRenderDataGameFramingTimeMarkerImagePaintSettingsBrushToolSettingsBrushDataSculptDataSculptSessionSceneDagForestBGpicView3DSpaceLinkScrAreaRenderInfoRetopoViewDataViewDepthsView2DSpaceInfoSpaceIpoSpaceButsSpaceSeqSpaceFiledirentryBlendHandleSpaceOopsTreeStoreTreeStoreElemSpaceImageCurveMappingSpaceNlaSpaceTextSpaceScriptScriptSpaceTimeSpaceNodeSpaceImaSelImaDirOneSelectableImaThemeUIThemeSpacebThemeSolidLightUserDefbScreenScrVertScrEdgePanelFileGlobalStripElemStripPluginSeqSequencebSoundhdaudioMetaStackEditingWipeVarsGlowVarsTransformVarsSolidColorVarsSpeedControlVarsEffectBuildEffPartEffParticleWaveEffOopsbPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbMessageSensorbSensorbControllerbJoystickSensorbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorbSoundActuatorbCDActuatorbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorbGameActuatorbVisibilityActuatorFreeCamerabSamplebSoundListenerSpaceSoundGroupObjectBonebArmaturebPoseChannelbActionChannelSpaceActionbConstraintChannelbConstraintbKinematicConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbMinMaxConstraintbSizeLikeConstraintbActionConstraintbLockTrackConstraintbFollowPathConstraintbDistanceLimitConstraintbRotationConstraintbStretchToConstraintbLocLimitConstraintbRotLimitConstraintbSizeLimitConstraintbRigidBodyJointConstraintbActionModifierbActionStripbNodeStackbNodeSocketbNodeLinkbNodebNodePreviewbNodeTypeNodeImageAnimNodeBlurDataNodeHueSatNodeImageFileNodeChromaNodeGeometryNodeVertexColNodeDefocusCurveMapPointCurveMapBrushCloneCustomDataLayerTLEN  L4(Thxh txT8lDDlh8$88T,< @ @ 44DX`Dl<<lp<``4@t( <(,((0@@P Ll<$x$(h x  8x h (88,@0,HhH,(lDLP@< <@Lh48<8l(DlP<,4D4,,D,@,<4`4$t (@  ,4STRC                 !"#$ %&'( )*+, -./01 234* 56789 :;<=!!!>?@" ABC D!E!FGHIJK L#MNB -$OPQRSTUVWXYZ[\6 ]%^_& `abcdefghij'! k(l)mfnPopqrstuvw#x%yz{|}~ *+,-   .)&/#&.0+'1QRfo,4dabc&6'-/02+34QR  * 6 ]465e   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH/I/JKLMNOPQR* 6S67TUVWXYZ[\]^_`abc ]8de9-#x:::;fghijklmnopqrstuvw<;f x y65z{|}~= >???>=@[A^B9;f  y+++6C5z {[D)8888A@@D+'+EEE>='+  *DF);f 65zGHIJKLMNFOP QQQ[{RS I GKTLTJMNOH'UVUWXY YYJWVX  ZR   QQ  S GK[[[\[B  ][+^[+_[` [++ !"#B$a[%&b['Bc[,()*+,-+.d[+/'0B123e[45f [+6789:;<=>g[?P[++h [+@ABCDEi[j[+FkGHIJ[KLMNOPQRS>T6Llll;UPVm#W+X+hYZ[\] ^+$+_+`+a+b6C;fncod - e  f y g h5zijklomn@opqrstuvwxyz{|}~{ ]        pq7rss ttt+$@ABCDEp uq(vwcu8Pxr(FFF6Jy9      !"#$%&'()*6* ]z+,-./0123456789{{{o:;<+| = >?@ABCDEFGH} I JK[L~ MNOPQBRSTUVWXY 5Z7[o\]^_|_}`~abccdefghijklmnopqrsMtuvwxyz{|}~ [P[PP[M)* %+y' {o=6S z  ] P[P '&MD     ++-oPS !"#$%j&'()*+;, -./012[ 3#&456789:;<=>?@A[B C D67EFGHIJ('jKL#MNOPBQjHR STUVWxXYZBQ[[\]^_`abcdefgh i j k l mnoB pHq S rstuvwxyzB'0&{j|}~K[1 jKB"Bj [BjBB7j 6S6Q[1 i lY0      !"#$%&'()*+,-./0123"4256789:;<=>?@ABCDEFGHIJKLMNOP QRSTUVWXYZ[\]^_`abcd e f gh7i8jklmnopqrs tuvwxyz{kl|}~uv ]    {  1f _ d     ) c6h(l       Bc->8<0y7T789:;<=>,-       P[5   <[ % P+P[ -+ ! %"#$%&'(")*+[P -,-.+ n/0123 4567849: .+F;<=h++ >?il@A P&BC+9DWE%F<GHIJK Y&BC7TLMNOPQ+RSP[TU )V -+ WXYZ[\]^ _#x#` a6:bcdefgBhijklmnopB4K[+ q7 rh$ stuvwxyz{|}~h  -?h v[$  o+o 6 en BncHK6 - ++B++ +bP[+ +DWn/+s+bst+P[g   +   0   P   P++P[+6n/+:0 hDW -Pj *   y 6        ac klXPE9[ d}~Mc      e   &:'0 M !* "b -Q#$%&ENDB