#!/bin/sh # MetaCard 2.4 stack # The following is not ASCII text, # so now would be a good time to q out of more exec mc $0 "$@" ''Tangram2ˆSon preOpenStack set loc of me to the screenLoc end preOpenStack function sign aNumber ---------------------------------------------------------------- -- Carl J. Manaster -- 08/17/97 -------------------- ---------------------------------------------------------------- switch case aNumber > 0 return 1 case aNumber < 0 return -1 case true return 0 end switch end sign on makeAproperty theProperty, theObject ---------------------------------------------------------------- -- Carl J. Manaster -- 08/17/97 -------------------- -- create the property if it doesn't exist ---------------------------------------------------------------- if theProperty is not in the userProperties of theObject then define theProperty of theObject end makeAproperty function arctan x, y switch case x=0 return sign(y)*pi/2 case x<0 and y<=0 return atan(y/x)-pi case x<0 and y>0 return atan(y/x)+pi case x>0 and y<=0 return atan(y/x) case x>0 and y>0 return atan(y/x) case true answer "Ooops! Didn't cover all the arctan cases." trace end switch end arctan on situatePolygon thePolygon ---------------------------------------------------------------- -- Carl J. Manaster -- 08/17/97 -------------------- -- prepare the polygon for dragging; set its current position -- to be its "home" position. -- set up its user properties: -- centroid (x,y) -- rotation -- polarPoints (r,theta pairs) ---------------------------------------------------------------- # makeAproperty "centroid", thePolygon # makeAproperty "rotation", thePolygon # makeAproperty "polarPoints", thePolygon put the points of grc thePolygon into thePoints put formatPoints(thePoints) into thePoints # set the centroid of grc thePolygon to \ # line 1 of polygonProperties(the points of grc thePolygon) set the centroid of grc thePolygon to \ line 1 of polygonProperties(thePoints) set the rotation of grc thePolygon to 0 # put the points of grc thePolygon into thePoints # put formatPoints(thePoints) into thePoints put item 1 of the centroid of grc thePolygon into xc put item 2 of the centroid of grc thePolygon into yc put empty into thePolarPoints repeat with i = 1 to (the number of items of thePoints)/2 put nthPoint(thePoints, i) into thePoint put (item 1 of thePoint) - xc into x put (item 2 of thePoint) - yc into y put sqrt(x^2+y^2) into r put arctan(x,y) into theta put r & comma & theta & comma after thePolarPoints end repeat delete last char of thePolarPoints set the polarPoints of grc thePolygon to thePolarPoints end situatePolygon on transformPolygon thePolygon ---------------------------------------------------------------- -- Carl J. Manaster -- 08/16/97 -------------------- -- use the properties set up in situatePolygon to recalculate -- the coordinates of all of the polygon's points -- centroid (x,y) -- rotation -- polarPoints (r,theta pairs) ---------------------------------------------------------------- put item 1 of the centroid of thePolygon into xc put item 2 of the centroid of thePolygon into yc put the rotation of thePolygon into theRotation put the polarPoints of thePolygon into thePolarPoints put empty into thePoints repeat with i = 1 to (the number of items of thePolarPoints)/2 put nthPoint(thePolarPoints, i) into thePoint put (item 1 of thePoint) into r put (item 2 of thePoint) into theta put xc + r * cos(theta+theRotation) into x put yc + r * sin(theta+theRotation) into y put round(x) & comma & round(y) & comma after thePoints end repeat delete last char of thePoints set the points of thePolygon to thePoints end transformPolygon function nthPoint thePoints, n ---------------------------------------------------------------- -- Carl J. Manaster -- 08/16/97 -------------------- -- takes a comma-separated list of coordinates:x1,y1,x2,y2,...xN,yN,x1,y1 -- and an index; returns the nth pair ---------------------------------------------------------------- return item 2*n-1 of thePoints & comma & item 2*n of thePoints end nthPoint function polygonProperties thePoints ---------------------------------------------------------------- -- Carl J. Manaster -- 08/16/97 -------------------- -- returns the centroid (x,y) and area of a polygon -- returned values may be non-integer; source points are expected to be integers -- takes a comma-separated list of coordinates:x1,y1,x2,y2,...xN,yN,x1,y1 -- assumes that the first point is duplicated at the end -- usage: put polygonProperties(the points of card graphic "test poly") ---------------------------------------------------------------- put 0 into centroidX put 0 into centroidY put 0 into totalArea repeat with i = 1 to (the number of items of thePoints)/2 - 1 -- add the area (which may be negative) and centroid for -- the trapezoid represented by the ith line segment and -- the x-axis; the trapezoid comprises a rectangle and a triangle put nthPoint(thePoints, i) into thePoint put item 1 of thePoint into x1 put item 2 of thePoint into y1 put nthPoint(thePoints, i+1) into thePoint put item 1 of thePoint into x2 put item 2 of thePoint into y2 if y2<>y1 then put (2*x1 + x2)/3 into triangleX put (2*y2 + y1)/3 into triangleY put (x1-x2) * (y2-y1) / 2 into triangleArea put x1/2 into rectangleX put (y1+y2)/2 into rectangleY put x1 * (y1-y2) into rectangleArea add triangleX*triangleArea + rectangleX*rectangleArea to centroidX add triangleY*triangleArea + rectangleY*rectangleArea to centroidY add triangleArea + rectangleArea to totalArea end if end repeat divide centroidX by totalArea divide centroidY by totalArea return centroidX & comma & centroidY & return & abs(totalArea) end polygonProperties function formatPoints somePoints repeat with L = 1 to number of lines of somePoints put line L of somePoints & "," after tNewList end repeat delete last char of tNewList return tNewList end formatPoints žžžžžžˆMíćŒuATI_OrigStyledtangramU helvetica U helveticaUMS Sans Serif UMS Sans SerifUArial UArial Uarial'cdbg101 Pďon mouseDown global oldMouseLoc, draggingFromCenter if the optionKey is "down" then exit mouseDown if the short name of the target contains "tangram" then set layer of the target to number of layers of this cd put the clickLoc into oldMouseLoc put (abs (item 1 of oldMouseLoc - item 1 of the centroid of the target)\ /the width of the target < 0.2) and\ (abs (item 2 of oldMouseLoc - item 2 of the centroid of the target)/\ the height of the target < 0.2) into draggingFromCenter set the uAllowDrag of me to true end if end mouseDown on mouseMove global oldMouseLoc, draggingFromCenter if not the uAllowDrag of me then exit mouseMove if the short name of the target contains "tangram" then put the mouseLoc into newMouseLoc put item 1 of the centroid of the target into xc put item 2 of the centroid of the target into yc put the rotation of the target into alpha put (item 1 of oldMouseLoc) - xc into x put (item 2 of oldMouseLoc) - yc into y put sqrt(x^2+y^2) into rOld put arctan(x,y) into thetaOld put (item 1 of newMouseLoc) - xc into x put (item 2 of newMouseLoc) - yc into y put sqrt(x^2+y^2) into rNew put arctan(x,y) into thetaNew if not draggingFromCenter then set the rotation of the target to alpha + thetaNew - thetaOld put item 1 of newMouseLoc - rOld * cos(thetaNew) into xc put item 2 of newMouseLoc - rOld * sin(thetaNew) into yc set the centroid of the target to xc & comma & yc transformPolygon (the name of the target) put newMouseLoc into oldMouseLoc end if end mouseMove on mouseUp set the uAllowDrag of me to empty end mouseUp on mouseRelease mouseUp end mouseRelease ffffffˆćŒ homeCentroid uAllowDrage'''''' ''''''''ResetŕEŤx4on mouseUp lock screen set the polarpoints of grc "tangram 3" to the origpolarpoints of grc "tangram 3" repeat with g = 1 to the number of grcs set the centroid of grc g to the homeCentroid of grc g set the rotation of card grc g to 0 transformPolygon("grc" && g) end repeat end mouseUp ˙˙˙˙˙˙H(ao ' centroids†h ˙˙˙˙˙˙H^Pwp ' 32,72.666667 73.666667,32 114.666667,112.666667 73,102.333333 42,123 94,72 119.413889,57.086111 ' `žw' Card ScriptŕEŤx1on mouseUp edit script of this cd end mouseUp ˙˙˙˙˙˙ (a ' Stack ScriptŕEŤx4on mouseUp edit script of this stack end mouseUp ˙˙˙˙˙˙p(a ' tangram 1JB˙˙3333Œ {> rotation0 centroid 73.666667,32 homeCentroid 73.666667,32 polarPointsN63.878357,-2.823142,63.561868,-0.320092,40.001389,1.562463,63.878357,-2.823142i † JH ' instructions˙˙˙˙˙˙White™ Gd ' OClick and drag a corner of each shape and watch how it responds as you drag... 6(Note: alt/option-click the parallelogram to flip it) ' copyright ˙˙˙˙˙˙WhiteVÎ- ' ;Tangram was built by Tactile Media -- www.tactilemedia.com ,Math routines were written by Carl Manaster' tangram 2JB33ff˙˙Œ >{ rotation0 centroid 32,72.666667 homeCentroid 32,72.666667 polarPointsM63.878357,-1.889247,40.001389,0.008333,63.561868,1.890889,63.878357,-1.889247h HI … ' tangram 4JBĚĚĚ̌I* < rotation0 centroid94,72 homeCentroid94,72 polarPointsF30.675723,1.238737,20,-3.141593,30.675723,-1.238737,30.675723,1.238737mheJHh+he' tangram 5JB˙˙™™Œ)G@? rotation0 centroid 73,102.333333 homeCentroid 73,102.333333 polarPointsa30.333333,-1.570796,31.001792,-0.010752,30.666667,1.570796,31.001792,-3.13084,30.333333,-1.570796kIHhfI…*fIH' tangram 6JBĚĚĚ̌ f<  rotation0 centroid42,123 homeCentroid42,123 polarPointsE30.675723,2.809533,20,-1.570796,30.675723,0.332059,30.675723,2.809533l …*gG… …' tangram 7JBˆˆŒIG?? rotation0 centroid114.666667,112.666667 homeCentroid114.666667,112.666667 polarPointsM45.466716,-1.107149,28.755675,0.785398,45.466716,2.677945,45.466716,-1.107149j‡H‡…J…‡H' tangram 3JR‘on mouseUp if the optionKey is "down" then put the points of me into tPoints put item 1 of line 4 of tPoints & "," & item 2 of line 2 of tPoints & cr after tNewPoints put item 1 of line 3 of tPoints & "," & item 2 of line 1 of tPoints & cr after tNewPoints put item 1 of line 2 of tPoints & "," & item 2 of line 4 of tPoints & cr after tNewPoints put item 1 of line 1 of tPoints & "," & item 2 of line 3 of tPoints & cr after tNewPoints put item 1 of line 4 of tPoints & "," & item 2 of line 2 of tPoints after tNewPoints set points of me to tNewPoints situatePolygon(short name of me) end if pass mouseUp end mouseUp Ý݌g !] centroid119.413889,57.086111 rotation0 homeCentroid119.413889,57.086111 polarPoints]48.43215,1.894687,21.568002,-2.366941,47.704133,-1.23796,20.893137,0.728773,48.43215,1.894687flippedfalseorigpolarpoints]48.43215,1.894687,21.568002,-2.366941,47.704133,-1.23796,20.893137,0.728773,48.43215,1.894687nhgh*‡ ‡GhgČbgbg100 iconswBlackŔŔŔŔŔŔffffff˙˙˙white€€€€€€ŠŠŠ darkgray§mćŚ5 @挽7 @€€ž9 @€€ż; @€€Ŕ= @€€Á? @€€ÂA @€€ĂC @€€ÄE @€€ĹG @€€ĆI @€€ÇK @€€ČM @€€ÉO @€€ĘQ @€€ËS @€€ĚU @€€ÍW @€€ÎY @€€Ď[ @€€Đ] @€€Ń_ @€€Ňa @€€Óc @€€Ôe @€€Őg @€€Öi @€€×k @€€Řm @€€Ůo @€€Úq @€€Űs @€€Üu @€€Ýw @€€Ţy @€€ß{ @€€ŕ} @€€á @€€â @€€ăƒ @€€ä… @€€ĺ‡ @€€ć‰ @€€ç‹ @€€č @€€é @€€ę‘ @€€ë“ @€€ě• @€€í— @€€î™ @€€ď› @€€đ @€€ńŸ @€€ňĄ @€€óŁ @€€ôĽ @€€ő§ @€€öŠ @€€÷Ť @€€ř­ @€€ůŻ @€€úą @€€űł @€€üľ @€€ýˇ @€€ţš @€€˙ť @€€˝ @€€ż @€€Á @€€Ă @€€Ĺ @€€Ç @€€˝ DĚĚĚĚĚĚwwwwww00 Šƒƒƒř‚ ƒ@Â.­ƒƒƒř‚?ř‚?ř‚ř‚ƒƒŽÁ@ƒ ƒř‚ƒƒŞ8Šƒƒƒř‚?ř‚ř‚ř‚?ř‚ř‚ƒƒŞž DĚĚĚĚĚĚwwwwww00 Ş€ƒ@ƒ ‚?ƒƒÁ.Ž€ƒŔƒŕ‚?đ‚?ř‚?ř‚?đƒŕƒŔƒ€­Âƒ‚?ƒ ƒ@ƒ€Š8Ş€ƒŔƒŕ‚?đ‚?ř‚?ü‚?ü‚?ř‚?đƒŕƒŔƒ€Šż DĚĚĚĚĚĚwwwwww00 ˘|†ƒƒƒ#€‚@ƒ€Â9Ś|ƒ|‚|‚ |‚|‚?ü‚ü‚ř‚?đ‚ƒ ƒŽÁ€‚@‚#đ‚ƒƒŞC˘|ƒ|‚|‚ |‚|‚?ü‚ü‚˙ü‚˙ü‚ř‚?đ‚ƒ ƒŞŔ DĚĚĚĚĚĚwwwwww00 Ľƒ€‚@‚ ‚‚‚ Ĺ3Šƒ€‚Ŕ‚ŕ‚đ‚Ŕ‚Ŕ‚Ŕ‚Ŕ‚Ŕą ˝‚8’Ŕ­=Ľƒ€‚Ŕ‚ŕ‚đ‚?ř‚?ř‚Ŕ‚Ŕ‚Ŕ‚Ŕ‚Ŕ­Á DĚĚĚĚĚĚwwwwww00 ŠŔ’‚8Á3­Ŕ‚Ŕ‚Ŕ‚Ŕ‚Ŕ‚đ‚ŕ‚Ŕ‚€‚ŽÁ ‚‚‚ ‚@‚€‚Ş=ŠŔ‚Ŕ‚Ŕ‚Ŕ‚Ŕ‚?ř‚?ř‚đ‚ŕ‚Ŕ‚€‚Ş DĚĚĚĚĚĚwwwwww00 Ąŕˆ@ƒ€‚ƒ?‚ƒÂDĽŕƒŕƒŕ@‚ŕŔ‚áŔ‚ă˙‚ç˙‚ç˙‚ă˙‚áŔ‚ŕŔ‚ŕ@‚ŕƒŕŚÁƒƒ?‚„€ƒ@†ŕ˘NĄŕƒŕƒŕ@‚ŕŔ‚áŔ‚ă˙‚ç˙‚ď˙‚ď˙‚ç˙‚ă˙‚áŔ‚ŕŔ‚ŕ@‚ŕƒŕ˘Ă DĚĚĚĚĚĚwwwwww00 ˘†ƒ„€‚ü@ƒ ƒÁDŚƒ‚‚‚‡‚˙ǂ˙ç‚˙ç‚˙ǂ‡‚‚ƒƒĽÂƒ ‚ü@ƒ€‚ƒˆĄN˘ƒ‚‚‚‡‚˙ǂ˙ç‚˙÷‚˙÷‚˙ç‚˙ǂ‡‚‚ƒƒĄÄ DĚĚĚĚĚĚwwwwww00 $ĄŔ‚ƒƒ?‚ ƒ@ƒ€‚ĂFĽŔ‚Ŕ‚Ŕ‚˙‚?˙‚˙‚‚˙‚‚˙‚˙‚?˙‚˙‚Ŕ‚Ŕ‚ŔĽ$Ŕ„€ƒ@ƒ ƒ?‚ƒƒŔĄPĄŔ‚Ŕ‚Ŕ‚˙‚?˙‚˙‚‚˙‚˙‚˙‚‚˙‚˙‚?˙‚˙‚Ŕ‚Ŕ‚ŔĄĹ DĚĚĚĚĚĚwwwwww00 $ĄŔƒ ƒ‚üƒƒƒ„€ŔFĽŔ‚ŕ‚đ‚˙ř‚˙ü‚˙ţ‚‚˙‚‚˙‚˙ţ‚˙ü‚˙ř‚đ‚ŕ‚ŔĽ$Ă€‚ƒƒ‚üƒƒ ‚ŔĄPĄŔ‚ŕ‚đ‚˙ř‚˙ü‚˙ţ‚‚˙‚‚˙€‚˙€‚˙‚˙ţ‚˙ü‚˙ř‚đ‚ŕ‚ŔĄĆ DĚĚĚĚĚĚwwwwww00 $Ą€‚€ƒ ƒ@`‚€‚ƒĂAĽ€‚Ÿ€Ÿ€?Ÿ€˙€‚˙€‚˙€‚˙€‚˙€˙€?˙€˙€€‚€Ľ#Ŕƒ„€ƒ@ƒ ƒ€ƒ€ĄKĄ€‚Ÿ€Ÿ€?Ÿ€˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€˙€?˙€˙€€‚€ĄÇ DĚĚĚĚĚĚwwwwww00 (ž€‚@‚ ‚‚‚‚‚ ‚@ĹQ˘€‚Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚˙‚˙‚˙‚ř‚ř‚ř‚ř‚ř‚řĄ Ép–ř[ž€‚Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚˙‚˙‚˙‚˙‚˙‚ř‚ř‚ř‚ř‚ř‚řČ DĚĚĚĚĚĚwwwwww00 Ąđ–ŕĹQĽđ‚đ‚đ‚đ‚đ‚đ‚˙ţ‚˙ţ‚˙ţ‚ü‚?ř‚đ‚ŕ‚Ŕ‚€‚ž(É€‚@‚ ‚‚‚ ‚@‚€‚š[Ąđ‚đ‚đ‚đ‚đ‚đ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚ü‚?ř‚đ‚ŕ‚Ŕ‚€‚šÉ DĚĚĚĚĚĚwwwwww00 &œ…đ‚ƒƒŔƒƒ ƒ@ÂB ƒ đđđ‚˙Ŕ˙Ŕ˙Ŕ?˙Ŕ?˙Ŕ˙Ŕ˙Ŕ‚ ˙ŔđđđĽ$Á@ƒ ƒƒƒŔƒ‚đĄJœƒ đđđ‚"˙Ŕ˙Ŕ˙Ŕ?˙Ŕ˙Ŕ˙Ŕ?˙Ŕ˙Ŕ˙Ŕ‚ ˙ŔđđđĄĘ DĚĚĚĚĚĚwwwwww00 $Ÿŕ„€ƒ@đ ƒƒƒƒÁ@Łŕŕ€ŕŔŕ˙‚ŕ˙đŕ˙řŕ˙üŕ˙üŕ˙řŕ˙đŕ˙‚ŕ Ŕŕ€ŕŕ¤$ƒƒƒđ ƒ@ƒ€‚ŕ HŸŕŕ€ŕŔŕ˙‚ŕ"˙đŕ˙řŕ˙üŕ˙ţŕ˙ţŕ˙üŕ˙řŕ˙đŕ˙‚ŕ Ŕŕ€ŕŕ Ë DĚĚĚĚĚĚwwwwww00 +™ŕ‚ƒƒƒ ƒ@ƒ€‚‚˙đƒĂVŕ‚Ŕ‚€‚ƒ>ƒ|ƒţ‚‚˙đ‚˙đ‚˙đ‚˙đüƒ~ƒ?ƒ€‚Ŕ‚ŕ‚ŕ@˘ ƒ@ƒ€‚ƒŽƒƒ˙đ€ƒ@ƒ ƒƒƒƒŕ™c™ŕ‚ŕ‚ŕ‚Ŕ‚?€‚ƒţ‚‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đţƒƒ?€‚Ŕ‚ŕ‚ŕ‚ŕ™Ě DĚĚĚĚĚĚwwwwww00 +™ŕƒƒƒƒƒ„€˙Ŕ@ƒ ƒŔUŕ‚đƒřƒ|ƒ>ƒƒ?€‚˙Ŕ‚˙ŕ‚˙ŕ‚˙Ŕ‚€‚?ƒ~ƒü‚ř‚đ‚ŕ?Ąƒ„€ƒ@ƒ ƒ ˙ŕ@ƒ€‚ƒƒƒƒ‚ŕ™b™ŕ‚đ‚ř‚üƒţƒƒ?€‚˙Ŕ‚˙ŕ‚˙đ‚˙đ‚˙ŕ‚˙Ŕ‚?€‚ƒţ‚ü‚ř‚đ‚ŕ™Í DĚĚĚĚĚĚwwwwww00 *™Áđƒƒ ƒ@ƒ€‚ƒţƒĂQÁđđđ>đ|đřđüđ‚˙đ‚˙đ‚˙đ‚˙ŕřƒüƒ~ƒ?ƒ€‚Ŕ‚Ŕ@˘@ƒ€‚ƒƒŽƒ‚˙ŕ„€ƒ@ƒ ƒƒƒŔ™\™ÁđÁđÁđ?đđţđüđ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙ŕüƒţƒƒ?€‚Ŕ‚Ŕ‚Ŕ™Î DĚĚĚĚĚĚwwwwww00 3’€‚@‚ ‚‚‚‚‚ ‚@‚€€‚@Čk–€‚Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚˙‚űď€óçŔ‚ă ŔĂáŔƒŕŔŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ•$ľ‚‚‚‚ ‚@€ŔĄŕ‘t’€‚Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚˙‚‚˙€‚˙ ŔűďŔóçŔ‚ă ŔĂáŔƒŕŔŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‘Ď DĚĚĚĚĚĚwwwwww00 $‘ीŔ@‚ ‚‚‚‚ľj•ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ ŕƒŕŔĂáŔ‚ă ŔóçŔűď€˙‚?ţ‚ü‚ř‚đ‚ŕ‚Ŕƒ€•2Č‚@€€@‚ ‚‚‚‚‚ ‚@ƒ€‘t‘ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ ŕƒŕŔĂáŔ‚ă ŔóçŔűďŔ‚˙Ŕ‚˙€˙‚?ţ‚ü‚ř‚đ‚ŕ‚Ŕƒ€‘Đ DĚĚĚĚĚĚwwwwww00 ,˜<ř‚ƒƒƒƒƒ ƒ@ü€‚ĂPœ<ř<đ<ŕ<Ŕ<€<‚ ƒƒƒƒšŠƒ˙Ŕ‚˙ŕĚ4ż@‚`‚`‚`‚`€˙ŕA˙đ"˙ŕƒƒƒ–d•ƒƒƒƒ?˙ŕ˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙ đ˙đ?˙ŕƒƒƒ–Ó DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 .–Ŕƒ ƒƒ ˙ƒ„€ƒ@ƒ ƒŔYšŔƒŕƒđƒř˙ź ~˙‚˙€‚˙Ŕ ‚˙ŕ ‚˙ŕ ‚˙Ŕ ‚˙€ ‚˙ţƒ|ƒ¸ƒđƒŕƒŔ™ Ş@˙€˙Î8źƒ‚‚ ‚@‚ €˙˙‚˙Dƒƒƒ ƒŔ•d–Ŕƒŕƒđƒ ř˙ü˙ţ‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙đ‚˙đ‚˙ŕ‚˙Ŕ‚˙€‚˙˙ţ˙üƒřƒđƒŕƒŔ•Ô DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 3–ŕ‚ … ƒƒ ƒ@ƒƒŔƒƒƒƒť]šŕ‚ 0‚0‚ ?Ŕ?Ŕ‚˙‚‚˙˙‚žƒ^˙€/ƒ€‚ @‚€‚ž>Ş€‚€‚ ˆ€€€ƒ€ƒ €€€A˙€!ƒ€‚@‚€‚˘JĽ€€π€?€˙€‚˙€‚˙€‚˙€‚˙€˙€?€‚Ŕ‚Ŕ‚€‚žÜ DĚĚĚĚĚĚwwwwww00 (˘€‚@‚ ‚‚‚‚‚ ‚@ÁGŚ€‚Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚9΂UՂ)ʂĂŔ‚Ŕ†ŕĄ$ÁF1‚‚*‚$‚ ‚ ‚ ‚ŕĽQ˘€‚Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚˙‚˙‚˙‚;î‚ä‚ŕ‚ŕ‚ŕ‚ŕĄÝ DĚĚĚĚĚĚwwwwww00 ĽŕŽ‚( ‚DÁFŠ ‚ ‚ ‚ ‚ ‚ ‚@‚ ‚‚‚‚‚ ‚@ƒ€ĄLŠŔ‚Ŕ‚Ŕ‚Ŕ‚Ă9΂?ţ‚_ý‚/ú‚ô‚ č‚Ђ ‚@ƒ€QĽŕ‚ŕ‚ŕ‚ŕ‚ä‚;î‚˙‚˙‚˙‚?ţ‚ü‚ř‚đ‚ŕ‚Ŕƒ€Ţ DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 ­€‚ƒƒŔĂ+Ž °‚`6Ŕƒ‚˙€ ƒöŔ` °€Ž#ą€ƒ€ƒ€?ŕ„‚˙ŕ€‚€ƒ€˛˛€‚  ƒ€´.­ € °€ŕ€?Ŕ‚˙ŕ‚˙€‚˙ŕ‚˙ Ŕ€ŕ€ °€Žß DĚĚĚĚĚĚ˙˙˙˙˙˙wwwwww00 0Ź °‚؂l€ƒŔ‚˙ŕƒ Đoţ Ř@ °€‚­Ž„€ƒ@ţ ƒŔ° ƒ‚ ś$˛ƒü…‚˙ ‚@‚€‚ą1Ź °ř€üŔ‚˙ŕ‚˙đ‚˙đ‚˙ ŕřŔ °€‚­ŕ DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 [š‚€‚Á€‚cƒŞ€‚ɀ‚kƒŞ€‚ɀ‚kƒ*ƒƒ‚ ‚`‚˙ř`‚Żř‚@ƒ ƒšž˘ƒ ƒ@ƒŕŻJ˘ƒƒƒƒƒƒƒƒ‚‚‚ƒ‚Ÿř‚Pƒ0ƒžŚAƒ"‡Aƒ"É\š‚€‚Հ‚wƒ˙€‚˙€‚ƒ˙€‚˙€‚ƒ>‚‚0‚p‚ ˙ü˙ü˙ü‚˙ř‚pƒ0ƒšá DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 /¨˙ŕŔƒ5‚ƒƒ‚ ƒ‚ †Ž0­?ŕţ ƒţ‚ě‚ ‚!ԃ%‚̓=‚¸­2ŻŔ‚ŔđŔ‚ŔâŔ‚"ŔÂŔ‚"ŔÂŔGŔřŔ¨ąŔ‚Š „š7¨ ˙ŕ˙řŔ‚˙Ŕ‚˙!Ŕ˙Ŕ?˙Ŕ?˙Ŕ˙Ŕ˙Ŕ˙Ŕ˙ŔřŔ¨â DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 -Š ˙€ŔŹ„€‚€‚€ƒH‚ƒ0‡@­4Źƒ‚@€H‚GřD‚CřD‚ Cđâ ŔŠ0­ü‚P€ƒ7č‚8‚+„‚¤ƒłČ‚źƒ€­ą€‚€p‹0‚ş5Š˙€˙Ŕ‚˙Ŕ‚˙ €˙ř˙ü˙ü˙ř˙ř˙đ˙ŕŔŠă DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 -¨˙đƒvŔ……@"@‚@ƒ‚Ž7­˙ŕü‚ţ‚/‚ _‚Aۂ ‚#×@‚'@ż@‚|Š7Ż8‚8ขp¸ ¸‚ ¸ข ¸Ŕ¸@¸ƒř‚|8¤ą€‚@ƒ@…„š:¨0˙đ˙ü8˙ţř˙ţř?˙ř?˙ř˙ř?˙ř?˙ř˙ř˙ř˙ř‚|8¤ä DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 *Š ˙ŕ8đnˆƒ D ƒ8‚„`­7Źƒ‚ŕ‚ř‚ř‚řÁŕ>Ś5­˙‚?ŕŔ‚ńô‚ú‚ۂ‚ ČëÄä‚ý€‚>ŞąŔ8‰8‚ş6Š1˙ŕ?˙đ˙đ˙ŕ˙ü˙ü˙ţ˙ü˙ü˙ř˙đ˙ŕ>Śĺ DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 5¤˙řƒ;`ƒ ˆ & ƒ ‚  ƒ‚ Š;Š˙đ˙ƒ˙‚˙€€`]€Aۀ‚ €?ۀÓ ‚7 Ż ‚<Ľ?Ť‚Ŕ\ \ p\ \‚ \?ŕ\‚ \‚ \Ŕ\@ÜĂ|‚< ŽŔ‚?… ƒ …ƒšD¤ ˙ř˙ţ‚˙|‚˙)|?˙ü?˙ü˙ü˙ü?˙ü?˙ü?˙ü˙ü˙ü˙|‚< ć DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 6Ľ ˙đpř܂……@‚dƒ ƒ08‚ƒ0Š?¨8ƒ8‚:đ:::ř:‚:ü:‚:‚:ř;>Ăđ8<˘;Š˙‚ ˙đ˙‚˙đńřşۂ؂ ŰüËŔě‚őŔ‚<Ś­„üƒˆ ‚ ş@Ľ˙đ8˙ř>‚˙ř>‚˙+đ?˙ü?˙ü?˙ţ?˙ţ?˙ü?˙ü?˙ü?˙ř?˙ř>˙đ8<˘ç DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 Kœ?˙ŕ~<ƒ€‚܂Ŕ‚0ƒƒƒ‚ƒ~‚‚‚ĽK  ˙Ŕ?˙ř˙ƒ?Ŕ˙ŕ?˙ä߇ŕ`_äßŕÝä‚ ;äŮä?Ůä‚ ;ěˇěżŒ‚~N¤@‚ ‚€@@ x ‚ € Ŕ‚ @ ?Ŕ @@sŸ‚~˜$Şŕ‚ ƒ‡€ƒp†ƒą\œ ?˙ŕ˙ü‚˙ƒ?‚˙ß‚˙ß‚˙‚˙ƒ˙ƒ˙ƒ˙ƒ˙‚˙ƒ˙‚˙?‚˙?‚˙‚˙˙Ÿ‚~˜č DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 F ˙ü<~ŕ‚;xƒ‚ ƒ ƒƒ ń@‚ƒ@~`ƒ ƒxĽJĄ ˙€˙ü€˙řü‚˙đ'˙üáű'ú€ű€'ťţ'܂ '›'›ü7܂7í€1ýđ‚~žK¤Ŕ‚Ŕ‚ČřČČČČřČ‚ ČČţČ‚ČČüČÎůđŔ~š"Š‚0ţ‡…† ƒ ˛X˙ü?˙ţÁ‚˙ţű‚˙üű‚˙ř‚˙ţ‚˙ţƒ˙ƒ˙€ƒ˙€ƒ˙‚˙ţƒ˙‚˙ţ‚˙ü‚˙ü‚˙řů˙đŔ~šé DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 o‚˙‚€‚@ „ ‚ @‚‚‚‚‚…š€QC‚(‚‚P‚ ƒ@ƒ@‚¤`‚‚@‚‚€‚@žy… üč/€‡Ŕ‚‹ŕ+Ťđ+Ťř<şťü|ŞŤţ|‚ŤJţ}şťţ|ŞŠţ}Ť¸>|żř^}˙@^}ޏŢ}×yž}Żóž}_˙>}ż˙~}żîţ}[žţ}żžţ=}üżýř űůđ}ăŕŔ‚˙€‚˙‰ˆ…€‚Ђ–?ƒ‚Ŕ  … ÝčÝ@ׅˆîŔ…ƒ`‚“?˜ƒƒˆÝŔÝ@ׅ€‡îćƒ‚`˙€Œţƒ…˙€‚˙€‚˙€‚˙€‚˙€‚]˙€?˙€˙Ŕ˙˙ŕ˙ƒ˙đ˙‡˙ř˙‡˙ř˙˙ü˙˙ü˙˙ü˙˙ü˙˙ü˙˙ü˙˙ü˙˙ü˙˙ü˙˙üţ˙üţ˙üţ˙řţ˙řţ˙đţ˙ŕţ˙€ţƒţƒţƒţƒë DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 i…Ŕ† ††† ‚@‚‚B‚@‚‚A‚ @@€@‚‚@@@ €€„‚„ ‚ @@€‡‰@‚Ŕ‚ ‚ŕ‚ Ђđ‚h‚8‚,4‚‚<‚\:‚|>‚ź=‚ ü?|>€ü?€ü?@ü?Ŕü? ţŕ ţĐ‚˙đţčü?ř/ü?ô?ü?ü_ţú@‚‚˙ţ„u‰€†@† †‚€‚ˆ‚€‚!„‚€‚A‚‚€‚‚‚€‚‚€€‚‚@„€ „‚€€@ €ˆ‚˙ţĄ€‚@ş€‚@?‚˙üˆ›…Ŕ‚Ŕ‚ŕ‚ŕ‚đ‚đ‚ř‚ř‚?ü‚?ü‚ţ‚ţ‚‚˙‚‚˙‚˙€‚˙€‚˙Ŕ‚˙Ŕ‚˙ŕ‚˙ŕ‚˙đ‚˙đ‚˙ř‚˙ř?‚˙ü?‚˙ü‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţě DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 „żűđƒƒđw…@‚@‚@‚ ‚@‚ ‚@‚@‚@‚P‘‚U…‚@„‚@„‚@„‚@„‚@„‚@„@‚?‚˙ř„ˆˆ%ę/đ•ÓřéĎü•ÓüéĎü•ÓüęŻü•SüęŻü‚˙ü‚˙ü‚˙ü‚˙ü~‚Şü}‚U|z‚Şź}‚U|z‚Şź}‚U|z‚Şź}‚U|z‚Şź}‚U|z‚Şź}‚U|z‚Şź}‚U|>‚Şřˆq‰‚*(‚‚*(‚‚*(‚‚*¨™‚Ş€‚U‚Ş€‚U‚Ş€‚U‚Ş€‚U‚Ş€‚U‚Ş€‚U‚Ş€‚U‰›„‚˙đ‚˙ř‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü?‚˙ř„í DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 aƒ€‚@‚ ‚‚‚ ‚@‚€‚€‚@‚ ‚ ‚@‚‚!‰€ƒƒ‡¤Š…ƒ€‚Ŕ‚ŕ‚đ‚?ř‚ü‚˙ţ‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙0đ?˙Ŕř˙ž|?˙žţĎÜú hń€pýÇđţ˙ř˙đŸř?ŕü‚ř‚đ‚ŕ‚Ŕƒ€…ş?ƒ@€‚€@ ƒ´FŔ@ƒ) 0Ŕ‡8€€`@÷ ‚‚‚ ‚@ƒ€–ƒ€‚Ŕ‚ŕ‚đ‚?ř‚ü‚˙ţ‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙đ?‚˙ř‚˙ü‚˙ţ‚˙ţ?‚˙ţ‚˙üƒ˙ƒ˙ƒ˙ƒ˙ƒ˙‚˙ ?ţüř‚đ‚ŕ‚Ŕƒ€î DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 „˙ţƒ„€ƒ@ƒ čŒˆ˙ţ˙ý˙ţ€˙ý@˙ü‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕˆŽ‡ƒŕÜ‚˙ŕ„’횄˙ţ‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ„ď DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 ^@‚ ‚‚‚‚‚ ‚@„€ƒ@€ †ü‚‚‚‚€ @ €Ŕ0ƒ‡˜‰€‚Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚?˙‚_˙€o˙Ŕ÷˙ŕűü‚ýůř~÷ţŸo˙çœ?€űŰßŔđ‚ŕ%@đ˙yßđ˙ž?đ˙ß˙đ˙đ?ó˙đ?đ˙ôĎp> ü‚ř‚đƒŕ†lœ@ƒ ƒƒƒƒƒƒ`€‚CŔ‚ ‚- ü † AŔ ˙đ @  0˙‹Á{ ‚‚ƒŕ‚Ä<ˆƒƒ¨~Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚˙‚˙€˙Ŕ‚˙ŕ‚˙ŕ‚˙ü‚˙ţƒ˙ƒ˙€ƒ˙Ŕƒ˙ŕƒ˙ď”˙ƒ˙?ƒ˙?ƒ˙˙ţ‚ü‚ř‚đƒŕ‚đ DĚĚĚĚĚĚwwwwww00 ;‚€‚@‚ ‚‚‚ ‚@‚€ ƒ0Ŕŕ ͋‚ƒ€‚Ŕ‚ŕ‚đ‚?ř‚ü‚8˙ü ˙ř;öřďîçóß˙ýż˙~ţbůüýçú{ŸôśőI˙ g˙ůŸ˙ő‚˙ƒżüĎü‚óř‚|ř‚?0‚Ŕ‚€‚…mŸ ƒđ‚ đ‚#@đbđđđ„`đ I€đ śđň˜ř`÷ ‚ €ů˙ţ@0‚ ‚ƒƒ@Ȃ 0‚@‚€‚k‚€‚Ŕ‚ŕ‚đ‚?ř‚ü‚ ˙ţ ˙ţ?˙ţ‚˙ţƒ˙÷§˙÷ƒ˙€‚˙ ţ˙ţ˙ü˙ü‚˙ř‚ř‚?đ‚Ŕ‚€‚ń DĚĚĚĚĚĚwwwwww00 ?@‚ ‚‚‚‚‚ ‚@‚€‚ƒ‚€‡@ Ť‚€‚Ŕ‚ŕ‚đ‚ř‚ü‚?ţ‚ţ‚˙ü˙ű˙÷˙ď€˙߀˙ż‚˙|€~ó€=π[?€¤˙€ł˙€Ď˙€‚˙€ƒßţ‚çţ‚yü‚>|‚˜‚ŕ‚Ŕ‚€…ožƒƒƒƒ @€ƒ Â0¤Ŕ[‚L‚0‚ƒ‚˙ ƒ†‚A€‚ d‚‚ ‚@‚€ŸŔ‚ŕ‚đ‚ř‚ü‚?ţ‚˙‚‚˙‚˙‚˙‚˙€‚˙€‚˙Ŕ‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙‚˙˙ţ‚˙ţ‚ü‚?ü‚ř‚ŕ‚Ŕ‚€ň DĚĚĚĚĚĚwwwwww00 HŽƒ ˙‘ƒ €‚Ŕ@ƒ ‚Ŕ‰D†ˆ„"‚D‡ˆ†D"†ˆˆ Ž‚˙e’ƒ ŞT?€ţ‚Iţ ţŕ2Lŕ2Lŕv]ŕv]ŕ2]ŕ2ŕvLŕvLŕ2]ŕ2]ŕvŕvaŕŽaŕŽaŕŽmŕŽmŕ‚ w˜U€Ťƒ˙Ŕ€‚€‚Íł‚‰˘‚‰˘‚˘‚̀‚‰€‚‰ł‚˘‚͢‚‰€‚‰€‚ž‚qž‚q’‚q’‚q’‚˙Ŕ‚đ‚˙‰„Žƒ ˙Ÿ˙ż€‚˙Ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙đ‚˙‰ó DĚĚĚĚĚĚwwwwww00 K‘ƒň€‚ @ƒ ƒƒ‚ „‚"B‚D!€@  @‚€‹”x•i•ƒó€‚ŸŔ‚–`‚”0‚‚‘Œ‚ŁĆ‚Çăń€řŔ!ü`aţ‚"á˙燀ç‡燀˙‡˙‡€˙‡˙‡€˙‡‚‚Ş€g`ƒi€‚kŔ‚f`‚L0‚‚‚0 ‚`‚Ŕž€ŕ€x‚x€‚xƒx€‚xƒx€‚x„€‚U‚˙€Œ‘ƒó€‚˙Ŕ‚˙ŕ‚˙đ‚˙ř‚˙ü‚˙ţ‚‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€Œô DĚĚĚĚĚĚwwwwww00 ZŽ€‚@‚ 䐂 H‚$‚$‚H ‚€ @@ ƒ` ‚H‚ ‚‘đ€…đ€ŕn’€‚@‚ ä)Čä'ňOů‚œ €<ž@|Ÿ ‚˙ ‚˙Č ‚˙č‚˙)đ8p p p püđ püđüđüđüđŒr–€‚@‚ ÄȐ ‚Ca‚ƒ`€‚@‚ ‚„‚ńǀóç€óç€ŕ‚ŕ‚ŕ‚ŕ‚ŕ‚ŕ…‚˙đˆ…Ž€‚Ŕ‚ŕçđďř˙ü˙ţ‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙đ‚˙ř‚˙ř‚˙ř‚˙ř‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đˆő DĚĚĚĚĚĚwwwwww00 IŽ0ƒȂ‚‚`‚Ŕ€ @ „€ƒ@ƒ ‚Ŕƒ0˛o’ ƒˆ‚ ‚ˆ‚‚"‚؈€*"ˆ€ " ‚ˆ˘$Hź‚1ŁÔŔ^Ź85TŹTŹTŹTŹČp<Ŕ—ƒx‰k’ƒp‚܂v‚݂w‚FĹÝŔăw`ńÝĐřwpü]Řţ7@˙(?PʨÇĺP÷ę¨÷ĺP÷ę¨÷ĺP÷ę¨÷ĺP7ę€ĺƒh„Ž0ƒř‚ü‚ţ‚˙‚‚˙€‚˙Ŕ‚˙ŕ‚˙đ‚˙ř‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙ü‚˙đ?˙Ŕ˙ƒx‰ö DĚĚĚĚĚĚwwwwww00 M‘ƒ€‚ @Č ‚"ˆ‚‚D‚ˆ"&Ȁ@@€ ႈ‚dxî’ ˙_•ƒ€‚ŔĚ`™03˜ĝŔ6ـpŔ đ`‚˙%†€ĐzîŕzîĐzîŕrĐrŕ{˙Đ{˙ŕ”`ƒ€‚D@‚ˆ ‚/č‚I$‚‰"á‚€‚&`y˙…$…… …˙ „„ „‚˙ŕu‘ƒ€‚ŔĎŕßđ˙ř˙ü˙ţ‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙đ‚˙ř‚˙ü‚˙ô‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙ŕ÷ DĚĚĚĚĚĚwwwwww00 2˜‚˙ŕ‚‘ ƒƒ!ƒ@€‚€@ƒ€”‚˙Ŕ ^œ‚˙ŕ‚˙đ‚˙đ‚˙.đđđ đ đp?0€0áŔ0áß°áß°áß°áß°‚0‚0‚˙đ‚˙đ‚˙ŕ”E­ř‚Óü‚áţ‚ Ŕ˙€€Ŕ?Ŕ @ @ @ @ @‚˙ŔŒ‚‚˙ŕs˜‚˙ŕ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙ŕř DĚĚĚĚĚĚwwwwww00 R”‚˙ŕ‚Š€‚@‚ ‚‚ ‚‚(‚‚P‚ƒŔ€† ‚€†>~_˜‚˙ŕ‚˙đ˙?đĆđÄđ‚ŔđŔŕđÁ‚đ-Âxđ†|đţpřpHpŇIđÖYđÖYđŔđÁđÁđ‚˙đ‚˙ŕ”\˘Ŕ‚9‚:ż‚=‚:‚4‚)ƒ‚Q‚ Ą€ŕ€-ś‚)Ś‚)Ś‚!†‚>~‚>~‰‚‚˙ŕx”‚˙ŕ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙ŕů DĚĚĚĚĚĚwwwwww00 *˜‚˙‚€ƒ‡>ř† ‡p†ü­Mœ‚˙‚˙€‚˙.€đ€ŕ€Č€€€€€˘‹€˘‹€Ş‹€Ş‹€€€€€‚˙€‚˙€‚˙Ą?Šŕ‚đ‚#ř‚ü‚A‚]t‚UT‚Ut‚U‚ü‚€‚˙b˜‚˙‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙€‚˙ú DĚĚĚĚĚĚwwwwww00 :’ƒa€€@ ƒ ƒ@ƒ€‚‡‡‡‡ Şi–ƒ €˙€˙`ţđđ>ŕ|Ŕřđ‚ŕ‚Ŕ‚Ŕ‚Ŕ‚ŕ‚đ‚ŕ‚܂ź‚x‚ř‚đƒŕ’WŸ@ƒ€‚ƒâ‚ Ŕ‚ƒ ƒ ƒ ‹ƒ ‚@ƒ„‚‚‚ƒŕŽq’ƒ(€˙Ŕ˙ŕ˙đ˙đ?˙đđţŕüŔřđ‚ŕ‚ŕ‚ŕ‚đ‚đ‚ü‚ü‚ü‚ü‚ü‚ř‚đƒŕŽű DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 ~Ŕ‚8<‚@ƒ€‚@‚0ƒƒƒ‚ „€ƒ@ƒ ƒ ƒƒƒƒ‚â‚‚m€‚Xƒ€ƒ@ƒ„ƒŒ„Ŕ‚/ü‚ţ‚m÷€6űŔđ ˝řŘü[~ąż‚Ŕ߀@oŔ‚7Ŕ‚ŕ‚ đ‚đ‚x‚‚î‚ţ‚ţm€~m˜ żśŘߜ̓o ĄˇÚւŰj‚´‚ „:ˆƒ ƒƒ„€ƒ@ƒ °ƒ„€ƒ@ƒ ƒƒ”wŒ`ƒƒHƒ$ƒ‚ ‚ „€N@1 ‚ ‚@Hƒ$ƒƒ ƒ€‚‹’’`I$ I2€ˇŇF@%!$‚äJ‚l‚đ”Ŕ‚?ü‚ţ‚˙€˙Ŕ˙đ?˙ř˙ü˙ţ‚˙‚˙ €ń˙Ŕŕ˙ŕ@ŕ‚?đ‚ř‚ř‚ü‚ţ‚ţ‚ ţm€ţ˙Ř‚˙ü‚˙ýƒ˙Ç˙ˇß‚˙‚˙˙ţ‚˙ţ‚ü‚đü DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 U…ƒ €‚‚@‚€ Š €‚ƒř’ř0‚Ŕ‰ ‚€ƒ@ ›0`Č ‰‚ ƒ@„‰ƒ*€‚Q@‚‚ ‚Ŕ`‚Ŕ`‚`Ŕ‚1 ‚‚đ  @ €‚ đ0ŕƒ‚@€‚ƒƒ?€‚`Ŕ€0€8€4€8`Ô żŞ‚U…‰ ƒƒ.€‚_@‚?€‚ƒŽ ‚‚@‚  ‚ P  @‚Ŕƒđ‚ŕ €‚@ €‚€ @ƒ  ‚@dÄŸ( @T@ ‚Ş€ĺƒ?€‚nŔ‚Žˆ…ƒ?€‚Ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ŕ‚˙ř?żř‚JđŕŔ˙đ˙đ˙đŕŔŔ€€?€ŔŔ`˙đ ˙ř0˙ü˙ü˙ü˙ţ0‚˙`‚˙Ŕý DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 'Ą?ü‚@‚‡á‚ƒ‹€‚€­KĽ?ü‚x‚đ‚ńǂóǂű‚˙‚ţ‚ţ˙‚ţ‚‚˙‚ţ‚ţ‚‚~‚?üĄ:­ŕ‚0‚ 8‚0ƒ`ƒ€‚ƒ€Š€‚‚‚@‚?üş@ĹJĄ?ü‚ţ‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚‚˙‚ţ‚?üţ DĚĚĚĚĚĚwwwwww00 5˜‚˙‚€Ŕ@0‚ ‹@‚€‚ƒ“ƒ€ĽSœ‚˙.ř?€ŕŔÇŔĂÇŔçÇŔ˙‡ŔţŔü?Ŕř˙Ŕů˙Ŕü˙Ŕ‚˙Ŕ‚˙Ŕü˙ŔřŔřŔü˙€‚˙™EĽŔ‚p‚<8‚8ƒ8ƒp‚Ŕ‚ƒƒƒ€@‚€‚˙•l˜‚˙‚˙€‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙Ŕ‚˙€‚˙•˙ DĚĚĚĚĚĚwwwwww00 =‚˙Ŕ‚ Ŕ‚0‚@‚€@ƒ€‚ƒƒ“ƒ€Ąb”‚˙ Ŕđ?ŕŔđ‚‡.đĂđĂđĂđĂđ˙‡đ˙đţđüđř˙đů˙đü˙đ‚˙đ‚˙đř˙đđđđđř˙ŕ‚˙Ŕ”UŔ‚8p‚p8‚ř<‚ř<‚p<ƒ8ƒpƒŕ‚€‚ƒƒƒ€‚ ‚˙Ŕ}‚˙Ŕ‚˙ŕ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙đ‚˙ŕ‚˙Ŕ DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 }…ƒ€‚@‚ ‚‚‚ ‚@‚€‚€€@@  ‚@‚ ƒ@ƒ€‚@‚Š‚‚‚ ‚@‚€‚Š„‰ƒ€‚Ŕ‚ `‚°‚7؂oě‚6Üv°` €ăŽŔ çĎ`˙°7˙Řoţě7ţ?Řü° ü˙ üţŔü€<ů‚œň‚Lä‚'Ȃ‚ ‚@‚€‚†€‘ƒ€‚@‚ ‚‚‚#ˆ‚O䂜r10€p@ŕ ŔH€‚$H  €@C€# ‚‚H$‚$H‚‚ ‚@‚€‚‚Ů€‚@‚ žš…ƒ€‚Ŕ‚ŕ‚đ‚?ř‚ü‚˙ţ‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙đ?‚˙ř‚˙ü‚˙ü‚˙ü?‚˙ř‚˙đ‚˙ŕ‚˙Ŕ‚˙€‚˙‚˙ţ‚ü‚?ř‚đ‚ŕ‚Ŕ‚€‚‚ DĚĚĚĚĚĚwwwwww00 f…ƒ€‚@‚ ‚‚‚ ‚@‚€‚ €€@@ ‚ x@‚‚ƒƒ ƒ@Š€’€‚Ž…‰ƒ€‚Ŕ‚ŕ‚đ‚?ř‚p‚ ŔŔ€€‚ƒ(Ŕ‡Ăŕ‡Ăđ?˙ƒřţü?üřřđř?ŕřŔř€ř‚˙ţ‚|ü‚8x‚p‚`‚Ŕ‚€‚†pĄŕ‚?ř‚?ř‚‚|‚x<‚x<ƒ<ƒ|‚ř@ŕ Ŕ€€ €@‚€‚ƒ‚G„‚'ˆ‚‚ ‚@‚€‚‚š…ƒ€‚Ŕ‚ŕ‚đ‚?ř‚ü‚˙ţ‚˙‚˙€‚˙Ŕ‚˙ŕ‚˙đ?‚˙ř‚˙ü‚˙ü‚˙ü?‚˙ř‚˙đ‚˙ŕ‚˙Ŕ‚˙€‚˙‚˙ţ‚ü‚?ř‚đ‚ŕ‚Ŕ‚€‚‚ DĚĚĚĚĚĚwwwwww00 ‘ŕ‚‚ ‚@ž€‚@d•ŕ‚x‚0|‚x>‚x>‚0>ƒ>ƒ|ƒxƒđ‚ŕ‚€‚ƒƒ€‚€‚‹€‚Ŕ‚Ŕ‚€‘>™€‚‹Hƒ0„ƒƒƒƒ`ƒ€Ž€‚“@‚€z‘ŕ‚ř‚?ü‚x~‚x>‚x>‚x>‚0>ƒ~ƒ|ƒř‚đ‚ŕ‚€‚ƒ€‚€‚€‚ƒ€‚Ŕ‚Ŕ‚Ŕ‚Ŕ‚€ DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙00 J…ŕ‚‚ ‚@‚€†€Œ@ƒ€‚ƒƒƒŒ –€‚@‚ •|‰  ‚č‚*´‚Tz‚¸=‚|‚x?‚4ƒ=ƒzƒô‚č‚Ђ ‚@‚€‚Ŕ‚  ‚@‚€Ž€‚@‚ŕ‚@‚€‰$‰@‚‚‚ ‚@Ęƒ€•c‘@‚ €‚@‚!‚†ƒJ!‚<ƒƒ ƒƒ(ƒPƒ ƒ@†@‚  ‚@‚€–  ‚@‚€…‘…ŕ‚ř‚?ü‚ţ‚‚˙‚ü‚ţ?‚ţ?‚~?‚<ƒ˙‚ţ‚ü‚ř‚đ‚ŕ‚Ŕ‚ŕ‚ŕ‚ŕ‚Ŕ‚€†€‚Ŕ‚ŕ‚ŕ‚ŕ‚Ŕ‚€… DĚĚĚĚĚĚwwwwww00 ˙ţŠ?xš?€’üĽRĄ˙ţ‚€‚€‚żz‚żz‚żz‚żz‚żz‚€z‚€z‚żú‚żú‚żú‚€‚€‚˙ţĄHĽü‚@„‚@„‚@„‚@„‚@„‚@„‚„‚@‚@‚@‚@‚üŠ˙ţ\˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ DĚĚĚĚĚĚwwwwww˙˙˙˙˙˙""""""00 /Š`‚˜‚‚‚ €``€‚ƒ`ƒ€†ĚsŽ`‚ř‚ţ‚˙€˙ŕ‚˙ř‚˙ü‚˙đ‚˙ȃ˙¸‚˙0v˙üĚ'˙ű¸y˙ćv~ÝĚŸ3¸'ćîp8ůŔ?s€ĚÎóź>xÍŕ‚sŔ‚ƒŽUŤ ƒ4ƒD€‚ˆ`2XD†ˆ€"2‚` LDXˆGb‚0ŔŒ@,31€# BÁ„2Œ ‚`Ŕ‚ƒŠ ¸€ƒ€ĂĘ€ľŠ`‚ř‚ţ‚˙€˙ŕ‚˙ř‚˙ü‚˙ü‚˙üƒ˙üƒ˙ţƒ˙ţƒ˙ţƒ˙üƒ˙ţƒ˙ţ‚˙ü‚˙ř‚˙đ?‚˙Ŕ?‚˙€?˙ţ˙ü˙ř˙ŕ‚Ŕ‚ƒŠ DĚĚĚĚĚĚwwwwww00 Œŕƒƒ‚ 8ü@ @Ýqŕ‚ř‚ü‚ ;üü{ţ?ţ;‚˙ ü{˙ţ;˙ü{‚˙ ţ;˙ü{˙ţ;‚˙ ü{˙ţ;˙ü{‚˙ ţ;˙ü{˙ţ;‚˙üxţ?çüű˙ţ?űüý˙ţ?ţü@ŒbœƒƒD‚ €D€ƒ D€€D‚ €D€ƒ D€€D‚ ŕ€@€‚@€‚@€?ţ˙üŒ„Œŕ‚ř‚ü‚ ?üüţ?ţ˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţ‚˙ţŒěDirectory of Tangram§function sign aNumber ---------------------------------------------------------------- -- Carl J. Manaster -- 08/17/97 -------------------- ---------------------------------------------------------------- switch case aNumber > 0 return 1 case aNumber < 0 return -1 case true return 0 end switch end sign on makeAproperty theProperty, theObject ---------------------------------------------------------------- -- Carl J. Manaster -- 08/17/97 -------------------- -- create the property if it doesn't exist ---------------------------------------------------------------- if theProperty is not in the userProperties of theObject then define theProperty of theObject end makeAproperty function arctan x, y switch case x=0 return sign(y)*pi/2 case x<0 and y<=0 return atan(y/x)-pi case x<0 and y>0 return atan(y/x)+pi case x>0 and y<=0 return atan(y/x) case x>0 and y>0 return atan(y/x) case true answer "Ooops! Didn't cover all the arctan cases." trace end switch end arctan on situatePolygon thePolygon ---------------------------------------------------------------- -- Carl J. Manaster -- 08/17/97 -------------------- -- prepare the polygon for dragging; set its current position -- to be its "home" position. -- set up its user properties: -- centroid (x,y) -- rotation -- polarPoints (r,theta pairs) ---------------------------------------------------------------- makeAproperty "centroid", thePolygon makeAproperty "rotation", thePolygon makeAproperty "polarPoints", thePolygon set the centroid of thePolygon to\ line 1 of polygonProperties(the points of thePolygon) set the rotation of thePolygon to 0 put the points of thePolygon into thePoints put item 1 of the centroid of thePolygon into xc put item 2 of the centroid of thePolygon into yc put empty into thePolarPoints repeat with i = 1 to (the number of items of thePoints)/2 put nthPoint(thePoints, i) into thePoint put (item 1 of thePoint) - xc into x put (item 2 of thePoint) - yc into y put sqrt(x^2+y^2) into r put arctan(x,y) into theta put r & comma & theta & comma after thePolarPoints end repeat delete last char of thePolarPoints set the polarPoints of thePolygon to thePolarPoints end situatePolygon on transformPolygon thePolygon ---------------------------------------------------------------- -- Carl J. Manaster -- 08/16/97 -------------------- -- use the properties set up in situatePolygon to recalculate -- the coordinates of all of the polygon's points -- centroid (x,y) -- rotation -- polarPoints (r,theta pairs) ---------------------------------------------------------------- put item 1 of the centroid of thePolygon into xc put item 2 of the centroid of thePolygon into yc put the rotation of thePolygon into theRotation put the polarPoints of thePolygon into thePolarPoints put empty into thePoints repeat with i = 1 to (the number of items of thePolarPoints)/2 put nthPoint(thePolarPoints, i) into thePoint put (item 1 of thePoint) into r put (item 2 of thePoint) into theta put xc + r * cos(theta+theRotation) into x put yc + r * sin(theta+theRotation) into y put round(x) & comma & round(y) & comma after thePoints end repeat delete last char of thePoints set the points of thePolygon to thePoints end transformPolygon function nthPoint thePoints, n ---------------------------------------------------------------- -- Carl J. Manaster -- 08/16/97 -------------------- -- takes a comma-separated list of coordinates:x1,y1,x2,y2,...xN,yN,x1,y1 -- and an index; returns the nth pair ---------------------------------------------------------------- return item 2*n-1 of thePoints & comma & item 2*n of thePoints end nthPoint function polygonProperties thePoints ---------------------------------------------------------------- -- Carl J. Manaster -- 08/16/97 -------------------- -- returns the centroid (x,y) and area of a polygon -- returned values may be non-integer; source points are expected to be integers -- takes a comma-separated list of coordinates:x1,y1,x2,y2,...xN,yN,x1,y1 -- assumes that the first point is duplicated at the end -- usage: put polygonProperties(the points of card graphic "test poly") ---------------------------------------------------------------- put 0 into centroidX put 0 into centroidY put 0 into totalArea repeat with i = 1 to (the number of items of thePoints)/2 - 1 -- add the area (which may be negative) and centroid for -- the trapezoid represented by the ith line segment and -- the x-axis; the trapezoid comprises a rectangle and a triangle put nthPoint(thePoints, i) into thePoint put item 1 of thePoint into x1 put item 2 of thePoint into y1 put nthPoint(thePoints, i+1) into thePoint put item 1 of thePoint into x2 put item 2 of thePoint into y2 if y2<>y1 then put (2*x1 + x2)/3 into triangleX put (2*y2 + y1)/3 into triangleY put (x1-x2) * (y2-y1) / 2 into triangleArea put x1/2 into rectangleX put (y1+y2)/2 into rectangleY put x1 * (y1-y2) into rectangleArea add triangleX*triangleArea + rectangleX*rectangleArea to centroidX add triangleY*triangleArea + rectangleY*rectangleArea to centroidY add triangleArea + rectangleArea to totalArea end if end repeat divide centroidX by totalArea divide centroidY by totalArea return centroidX & comma & centroidY & return & abs(totalArea) end polygonProperties €š@uATI_OpenModeDesign uATI_HasRuntrueuATI_DeploymentPlatformsMacOSuATI_ProjectClutsuATI_RunPlatformMacOS uATI_Blessedfalse ˙˙˙˙ęcdbg101 PÍon mouseDown global oldMouseLoc, draggingFromCenter if the short name of the target contains "tangram" then set the lockscreen to true choose select tool select the target bringFront choose browse tool set the lockscreen to false put the clickLoc into oldMouseLoc put (abs (item 1 of oldMouseLoc - item 1 of the centroid of the target)\ /the width of the target < 0.2) and\ (abs (item 2 of oldMouseLoc - item 2 of the centroid of the target)/\ the height of the target < 0.2) into draggingFromCenter grab the target with message end if end mouseDown on mouseStillDown global oldMouseLoc, draggingFromCenter if the short name of the target contains "tangram" then put the mouseLoc into newMouseLoc put item 1 of the centroid of the target into xc put item 2 of the centroid of the target into yc put the rotation of the target into alpha put (item 1 of oldMouseLoc) - xc into x put (item 2 of oldMouseLoc) - yc into y put sqrt(x^2+y^2) into rOld put arctan(x,y) into thetaOld put (item 1 of newMouseLoc) - xc into x put (item 2 of newMouseLoc) - yc into y put sqrt(x^2+y^2) into rNew put arctan(x,y) into thetaNew if not draggingFromCenter then set the rotation of the target to alpha + thetaNew - thetaOld put item 1 of newMouseLoc - rOld * cos(thetaNew) into xc put item 2 of newMouseLoc - rOld * sin(thetaNew) into yc set the centroid of the target to xc & comma & yc transformPolygon (the name of the target) put newMouseLoc into oldMouseLoc end if end mouseStillDown ˆ homeCentroideë ë† p\on mouseup get value(the clickline) if exists(stack it) then toplevel stack it end mouseup ââ ę ' bgbg100 bgbg100 iconsě aŕŕ