(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 4.0, MathReader 4.0, or any compatible application. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 136327, 2345]*) (*NotebookOutlinePosition[ 138720, 2418]*) (* CellTagsIndexPosition[ 138477, 2407]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell[TextData[{ "Interactive Graphics Using ", StyleBox["MathLink", FontSlant->"Italic"] }], "H1"], Cell["Chikara Miyaji, University of Tsukuba, JAPAN", "Body"], Cell["\<\ Interactive graphics effectively expresses the dynamic structure of \ a model, and helps improve the intuitive understanding of concepts in the \ sciences. Also it can be used as a user interface tool. \ \>", "Text"], Cell[TextData[{ "Presently, ", StyleBox["Mathematica", FontSlant->"Italic"], " graphics are not interactive but instead are static and merely a \ side-effect of computation. It is not possible to select a part of a graphic \ using the mouse, nor can one make interactive dynamic relationships between \ graphical elements." }], "Text"], Cell[TextData[{ "The graphics system introduced here is a ", StyleBox["MathLink", FontSlant->"Italic"], " program for creating interactive graphical objects which the user can \ manipulate. In this program, " }], "Body"], Cell["\<\ all graphics \[LongDash] point, line, curve, and text \[LongDash] \ are represented as objects which can be manipulated by mouse;\ \>", "LI"], Cell["all graphics are manipulated by a kernel evaluation;", "LI"], Cell[TextData[{ "the relationship between objects can be defined as ", StyleBox["Mathematica", FontSlant->"Italic"], " functions." }], "LI"], Cell["\<\ This paper outlines the system and discusses its design and \ implementation.\ \>", "Text"], Cell[CellGroupData[{ Cell["1. Simple Example of Interactive Graphics", "H2"], Cell[TextData[{ "Interactive graphics is implemented using a template-based ", StyleBox["MathLink", FontSlant->"Italic"], " program (", StyleBox["draw.exe", "Output"], "). This program opens multiple windows, and creates various point, line, \ curve, and text objects in the window. For example, evaluation of the \ following expression, ", StyleBox["New[PointObject..]", "Input"], " creates a point object on the window object ", StyleBox["win1", "Input"], StyleBox[". It returns a symbol ", "Body"], StyleBox["self$10", "Input"], StyleBox[" (this is explained later), which is assigned to ", "Body"], StyleBox["point1", "Input"], StyleBox[".", "Body"] }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(point1 = New[PointObject, win1]\)], "Input", CellFrame->False, AspectRatioFixed->True], Cell[BoxData[ \(self$10\)], "Output"] }, Open ]], Cell[TextData[{ "The following expression sends a ", StyleBox["move", "Input"], " message to the object ", StyleBox["point1", "Input"], " and moves the object to the location ", StyleBox["{100,100}", "Input"], "." }], "Text"], Cell[BoxData[ \(\(point1[move, {100, 100}];\)\)], "Input"], Cell[TextData[{ "Similarly, a point object accepts ", StyleBox["dispose", "Input"], ", ", StyleBox["getposition", "Input"], ", and ", StyleBox["setposition", "Input"], " messages." }], "Text"], Cell[TextData[{ StyleBox["draw.exe", "Output"], " defines several ", StyleBox["MathLink", FontSlant->"Italic"], " external calls: ", StyleBox["GetMouse[]", "Input"], " returns the current mouse location. ", StyleBox["StillDown[]", "Input"], " returns the current mouse state; if the mouse is pressed, it returns ", StyleBox["True", "Input"], ", otherwise it returns ", StyleBox["False", "Input"], "." }], "Text"], Cell[TextData[{ "When the user clicks on the point object, an expression ", StyleBox["self$10[click,{x,y}]", "Input"], " is send to the kernel. Hence, ", StyleBox["{x,y}", "Input"], " is the location of the mouse and ", StyleBox["self$10", "Input"], " is the symbol of the object. Similarly, ", StyleBox["self$10[drag,{x,y}]", "Input"], " will be sent to the the kernel when the mouse drags that object." }], "Text"], Cell[TextData[{ "The ", StyleBox["drag", "Input"], " method is (pre-)defined as a kernel function." }], "Text"], Cell[BoxData[ \(self$10[drag, {x_, y_}] := While[StillDown[link], self$10[move, GetMouse[link]]]\)], "Input"], Cell[TextData[{ "This function moves the object ", StyleBox["self$10", "Input"], " to the mouse position while the mouse is pressed. By this definition, the \ point object follows the mouse movement during dragging. Using similar \ strategies, any reaction to mouse events can be defined in the kernel." }], "Text"], Cell[TextData[{ "Let's create a new point object and a line object on the window ", StyleBox["win1", "Input"], "." }], "Text"], Cell[BoxData[{ \(\(point2 = New[PointObject, win1];\)\), "\n", \(\(line1 = New[LineObject, win1];\)\)}], "Input"], Cell[TextData[{ "Define a kernel function, ", StyleBox["findline[", "Input"], Cell[BoxData[ \(TraditionalForm\`p\_1\)]], StyleBox[",", "Input"], Cell[BoxData[ \(TraditionalForm\`p\_2\)]], StyleBox["]", "Input"], ", which returns the coordinates of the perpendicular bisector of the two \ points ", Cell[BoxData[ \(TraditionalForm\`p\_1\)]], " and ", Cell[BoxData[ \(TraditionalForm\`p\_2\)]], ":" }], "Text", Evaluatable->False, AspectRatioFixed->True, CellTags->"findline"], Cell[BoxData[ \(findline[p1_, p2_] := \[IndentingNewLine]Module[ {p, x, y, sol}, \[IndentingNewLine]p = p1[getposition] - p2[getposition]; sol = Solve[{{x, y} . p \[Equal] 0.0, {x, y} . {x, y} \[Equal] len}, {x, y}]; \ {x, y} + midpoint[p1, p2] /. sol]\)], "Input"], Cell[BoxData[ \(\(len = LineLength[line1]^2/4;\)\)], "Input"], Cell[BoxData[ \(midpoint[p1_, p2_] := \((p1[getposition] + p2[getposition])\)/2.0\)], "Input"], Cell[TextData[{ Cell[BoxData[ \(TraditionalForm\`p = p\_1 - p\_2\)]], " is the vector from ", Cell[BoxData[ \(TraditionalForm\`p\_1\)]], " to ", Cell[BoxData[ \(TraditionalForm\`p\_2\)]], ". ", StyleBox["Solve", "Input"], " finds ", StyleBox["two", FontSlant->"Italic"], " vectors, ", Cell[BoxData[ \(TraditionalForm\`{x, y}\)]], ", of (squared) length, ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"l", StyleBox["en", FontSlant->"Italic"]}]], TraditionalForm]]], ", which are perpendicular to ", Cell[BoxData[ \(TraditionalForm\`p\)]], " by solving the equation ", Cell[BoxData[ \(TraditionalForm\`{x, y} . p \[Equal] 0\)]], ", subject to the constraint ", Cell[BoxData[ \(TraditionalForm\`{x, y} . {x, y} \[Equal] l\)]], StyleBox["en", FontSlant->"Italic"], ". Adding ", Cell[BoxData[ \(TraditionalForm\`{x, y}\)]], " to the mid-point of points ", Cell[BoxData[ \(TraditionalForm\`p\_1\)]], " and ", Cell[BoxData[ \(TraditionalForm\`p\_2\)]], " results in the perpendicular bisector coordinates." }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{ Cell[BoxData[ \(findline[pt1, pt2]\)], "Input"], Cell[BoxData[ \({{86.7157287525381`, 56.7157287525381`}, {143.2842712474619`, 113.2842712474619`}}\)], "Output"] }, Open ]], Cell[TextData[{ "Then, we define the ", StyleBox["move", "Input"], " method of ", StyleBox["point1", "Input"], " below:" }], "Text"], Cell[BoxData[ \(point1[move, {x_, y_}] := \[IndentingNewLine]\((line1[move, findline[point1, point2]]; point1[setposition, {x, y}])\)\)], "Input"], Cell[TextData[{ "This method defines that if ", StyleBox["point1", "Input"], " receives a ", StyleBox["move", "Input"], " message, it calculates the new perpendicular bisector position, moves the \ line to this location, and then sends ", StyleBox["setposition", "Input"], " to itself. Similarly, we define the method for ", StyleBox["point2", "Input"], "." }], "Text"], Cell[BoxData[ \(point2[move, {x_, y_}] := \[IndentingNewLine]\((line1[move, findline[point1, point2]]; point2[setposition, {x, y}])\)\)], "Input"], Cell[TextData[{ "With these definitions, if the user moves either point, the perpendicular \ bisector moves accordingly. This is executed by the following sequence: (1) \ when the mouse is dragged on the point object, a ", StyleBox["drag", "Input"], " message is sent to the kernel; (2) from the ", StyleBox["drag", "Input"], " definition, a ", StyleBox["move", "Input"], " message is sent to the point object while dragging; (3) from the new ", StyleBox["move", "Input"], " method definition, the ", StyleBox["line", "Input"], " is moved to the perpendicular bisector position as the ", StyleBox["point", "Input"], " object is dragged." }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgL`38CW<015:DE[EF]Dic 0P000Goo00000goo001oo`02Kg/00f]JKg]_N`38Kg/016]JKg]W>EJe0P000Goo00000goo001oo`02 Je[>Kg/00e:D00000001Ool00003Ool007oo009_N`03JeYoogoo0L`020001Ool00007Ool007ooJeY_NeJe0000b7oo00D007oo Kg]_NeJe0080005oo`0000=oo`00Ool00Vmk00=>L`00Ool0agoo00D007ooKg][FTic0080005oo`00 00Moo`00Oom_NfLiE[D00038Ool01@00Oom_NfmkDY@00P000Goo00000goo001oo`02Kg/00e:D001o o`37Ool01@00Oom[FV]JE[D00P000Goo00000goo001oo`02Kg/00e:D001oo`37Ool01@00Oom_Nfmk CW<00P000Goo00001goo001oofmkJeYBU0000L`020001Ool00007Ool007ooKg][FUJe0000b7oo00D007ooKg][FUJe0080 005oo`0000Moo`00Oom_Nf]JDY@00038Ool01@00Oom_NfmkDY@00P000Goo00000goo001oo`02Kg/0 0e:D001oo`37Ool01@00Oom_NfLiE[D00P000Goo00000goo001oo`02JeX00e:D001oo`37Ool01@00 Oom_NfmkCW<00P000Goo00000goo001oo`02Kg/00e:D001oo`37Ool01@00Oom_Nf]JE[D00P000Goo 00001goo001oofmkJeYF]@000L`020001Ool00007Ool007ooKg][FTic0000 b7oo00D007ooJeY[FU:D0080005oo`0000=oo`00Ool00Vmk00=F]@00Ool0agoo00D007ooKg]_NeJe 0080005oo`0000Moo`00Oom_Nf]JDY@00038Ool01@00Oom_Nf]JDY@00P000Goo00001goo001oofmk JeYF]@000L`020001Ool00003Ool007oo009_N`03CW<007oo0L`00Ool0CGoo00<007ooOol0 Egoo00@007ooOol000=oo`03001oogoo01Ioo`05001oofmkIcUF]@020001Ool00007Ool007ooKg]W >EJe0000;goo100000Aoo`00Ool000=oo`03001oogoo008000Aoo`<000Aoo`<00003Ool007oo009o o`8000=oo`8000=oo`03001oogoo009oo`04001oogoo0002Ool01000Oomoogoo0P000goo00<007oo Ool00Woo0P000goo0P001Woo0P0000=oo`00Ool00P000goo0P0017oo0P000Woo00<007ooOol00Woo 0`0000Aoo`00Ool000=oo`04001oogooOol40003Ool00`00Oomoo`0EOol01@00Oom_NfmkDY@00P00 0Goo00000goo001oo`02Kg/00eJe001oo`0^Ool00`00Oomoo`02Ool00`00Ool00003Ool00`00Ool0 0002Ool01000Oomoo`000goo00D007ooOomoo`00009oo`80009oo`06001oogoo001oo`000Woo00<0 07oo00001Goo00@007ooOol0009oo`04001oogoo0002Ool01000Oomoo`000goo00H007ooOol007oo 0002Ool00`00Oomoo`02Ool01P00Oomoo`00Ool0009oo`03001oo`00009oo`04001oogoo0002Ool0 0`00Ool00003Ool02000Oomoo`00Ool007oo0003Ool01000Oomoo`000Woo0P000goo00<007ooOol0 5Goo00D007ooKg]_Ndic0080005oo`0000=oo`00Ool00Vmk00=>L`00Ool0;Woo00<007ooOol00Woo 00<007oo00000goo00<007oo000017oo00<007ooOol00goo00@007ooOol0009oo`80009oo`03001o ogoo009oo`03001oogoo009oo`03001oogoo00=oo`04001oogoo0002Ool01000Oomoo`000Woo00D0 07oo001oo`00009oo`03001oogoo00Eoo`03001oogoo009oo`06001oogoo001oo`0017oo00<007oo Ool00goo00H007ooOol007oo0003Ool02000Oomoo`00Ool007oo0003Ool01000Oomoo`000Woo0P00 0Woo00<007oo00005Woo00D007ooJeY[FU:D0080005oo`0000=oo`00Ool00V]J00=F]@00Ool0;Woo 00<007ooOol00Woo00<007oo00000goo00<007oo00000`0000=oo`00Ool017oo00@007ooOol0009o o`80009oo`@00003Ool007oo00=oo`03001oogoo00=oo`04001oogoo0002Ool01000Oomoo`000Woo 00D007oo001oo`00009oo`@0009oo`8000Ioo`<00003Ool007oo00=oo`03001oogoo00=oo`06001o ogoo001oo`000goo00P007ooOol007oo001oo`000goo00@007ooOol0009oo`80009oo`03001oo`00 01Ioo`05001oofmkKg]F]@020001Ool00003Ool007oo009_N`03DY@007oo02ioo`03001oogoo009o o`04001oo`000002Ool00`00Ool00002Ool00`00Ool00005Ool01000Oomoo`000Woo0P000Woo00H0 07ooOol007oo0002Ool00`00Ool00005Ool200001Goo001oogoo00000Woo00<007ooOol00P000goo 00<007oo00000Woo00<007oo00000Woo00<007ooOol00Woo00H007ooOol007oo0002Ool00`00Ool0 0002Ool01000Oomoo`000Woo00@007oo0000009oo`07001oogoo001oo`00Ool00P000Woo00@007oo Ool0009oo`800003Ool007oo009oo`03001oogoo01=oo`05001oofmkJeY>L`020001Ool00007Ool0 07ooKg]W>EJe0000;goo00<007ooOol00Woo00@007oo001oo`8000=oo`80009oo`03001oogoo00=o o`03001oogoo00<00003Ool007oo009oo`8000=oo`80009oo`8000Aoo`04001oo`00Ool20004Ool2 00000goo001oo`02Ool00`00Oomoo`020003Ool20006Ool20003Ool20003Ool20004Ool20002Ool0 0`00Ool00002Ool300001Goo001oo`00Ool00P0017oo100000=oo`00Ool00Woo00<007ooOol04goo 00D007ooKg]_NeJe0080005oo`0000=oo`00Ool00Vmk00=>L`00Ool0;Woo00<007ooOol047oo00D0 07ooOomoo`0000=oo`03001oogoo00ioo`03001oogoo03moo`03001oogoo00aoo`03001oogoo01Uo o`05001oof]JKg]>L`020001Ool00003Ool007oo009_N`03E[D007oo02ioo`03001oogoo009oo`03 001oogoo00aoo`<000Aoo`05001oogooOol0000L`000 L`020001Ool00007Ool007ooKg][FUJe0000b7oo00D007ooKg]W>EJe0080005oo`0000Moo`00Oom_ Nf]JE[D00038Ool01@00Oom_NfmkDY@00P000Goo00000goo001oo`02Kg/00dic001oo`37Ool01@00 Oom[FV]JDY@00P000Goo00001goo001oof]JKg]F]@000EJe0000 b7oo00D007ooKg]_Ndic0080005oo`0000=oo`00Ool00Vmk00=BU000Ool0agoo00D007ooJeY[FUJe 0080005oo`0000=oo`00Ool00Vmk00=BU000Ool0agoo00D007ooKg]_Ne:D0080005oo`0000Moo`00 Oom_Nf]JDY@00038Ool01@00Oom_Nf]JDY@00P000Goo00001goo001oofmkJeYF]@000L`00Ool0agoo00D007ooKg]W>EJe0080005oo`0000Moo`00Oom[FVmkE[D00038 Ool01@00Oom_NfmkE[D00P000Goo00000goo001oo`02Kg/00dic001oo`1>Ool2001gOol01@00Oom_ Nf]JCW<00P000Goo00001goo001oofmkJeYF]@0004moo`8007Moo`05001oofmkJeYF]@020001Ool0 0007Ool007ooKg][FU:D0000Cgoo0P00Mgoo00D007ooKg]_Ne:D0080005oo`0000=oo`00Ool00Vmk 00=BU000Ool0CWoo0P00Mgoo00D007ooKg][FU:D0080005oo`0000=oo`00Ool00V]J00=BU000Ool0 CWoo0P00Mgoo00D007ooKg][FU:D0080005oo`0000=oo`00Ool00Vmk00=BU000Ool0CGoo0`00Mgoo 00D007ooKg][FU:D0080005oo`0000Moo`00Oom_Nf]JE[D0001>Ool2001hOol01@00Oom[FVmkDY@0 0P000Goo00001goo001oofmkJeY>L`0004ioo`8007Qoo`05001oof]JKg]>L`020001Ool00003Ool0 07oo009_N`03E[D007oo04eoo`8007Qoo`05001oofmkKg]F]@020001Ool00007Ool007ooKg][FU:D 0000CWoo0P00N7oo00D007ooKg][FTic0080005oo`0000Moo`00Oom_Nf]JE[D0001>Ool2001hOol0 1@00Oom_NfmkDY@00P000Goo00000goo001oo`02Kg/00dic001oo`0KOol2000VOol00be[:DYoo`07 Ool2001hOol01@00Oom[FV]JE[D00P000Goo00001goo001oof]JKg]F]@0001aoo`8002Ioo`8YBPMo o`<007Qoo`05001oofmkKg]>L`020001Ool00003Ool007oo009_N`03CW<007oo01Yoo`8002Moo`03 ;F/YBWoo00Ioo`8007Uoo`05001oofmkJeYF]@020001Ool00007Ool007ooKg]W>EJe00005goo00@0 07ooOomoo`8002Moo`03:DX]Jgoo00Ioo`8007Uoo`05001oofmkKg]>L`020001Ool00003Ool007oo 009_N`03E[D007oo01Ioo`800003Ool0000002Qoo`8YBPMoo`8007Uoo`05001oofmkJeYBU0020001 Ool00003Ool007oo009_N`03CW<007oo01Ioo`D002Qoo`03;F/YBRU:00Ioo`8007Uoo`05001oofmk JeYBU0020001Ool00003Ool007oo009[FP03E[D007oo01Ioo`P002Ioo`03;F/YBWoo00Eoo`8007Uo o`05001oofmkKg]F]@020001Ool00003Ool007oo009_N`03DY@007oo01Ioo`L002Moo`03:DX]Jgoo 00Eoo`8007Uoo`05001oofmkJeY>L`020001Ool00007Ool007ooKg]W>EJe00005goo1P00:7oo0RU: 1Woo0P00NGoo00D007ooKg][FUJe0080005oo`0000=oo`00Ool00Vmk00=>L`00Ool05Woo1@00:Goo 00EJe0080005oo`00 00Moo`00Oom_Nf]JCW<0000GOol3000UOol00dYBAS5oo`03Ool2:DX5Ool2001jOol01@00Oom_Nfmk CW<00P000Goo00001goo001oofmkJeYF]@0001Moo`8002Ioo`9:DPAoo`03;F/YBWoo00Aoo`8007Yo o`05001oofmkJeYF]@020001Ool00007Ool007ooKg][FUJe000057oo0P0000=oo`00Ool09Woo00=: DTHaBU800goo0RU:00<]JgooOol00Woo0P00NWoo00D007ooKg]_Ndic0080005oo`0000=oo`00Ool0 0Vmk00=>L`00Ool04goo0P00:Woo00=:DTHaOol00goo00<]JbU:Ool00goo0P00NWoo00D007ooJeY[ FU:D0080005oo`0000Moo`00Oom[FVmkE[D0000DOol4000XOol00dHaBU9oo`03Ool2:DX4Ool2001j Ool01@00Oom_NfmkE[D00P000Goo00000goo001oo`02Kg/00dic001oo`0COol4000XOol00dYBAS5: DP03Ool00be[:DYoo`03Ool2001jOol01@00Oom_Nf]JDY@00P000Goo00001goo001oofmkIcUF]@00 045oo`03BU96L`020001Ool00003Ool0 07oo009_N`03DY@007oo041oo`9:DP=oo`8YBP=oo`8007]oo`05001oof]JKg]F]@020001Ool00003 Ool007oo009_N`03DY@007oo041oo`03BU96L`020001Ool00007Ool007ooKg][FU:D0000>goo00=JeUJeOol017oo00E:DTHaOomoobe[008Y BP9oo`8007]oo`05001oofmkIcUF]@020001Ool00007Ool007ooKg][FUJe0000>goo0U[F1Goo00=6 L`00Ool0>goo0U[F1Goo0TYB0Woo00@YBRe[Oomoo`8007]oo`05001o of]JJeYBU0020001Ool00007Ool007ooJeY_NeJe0000?7oo0U[F00=F]GooOol00Woo0THa0Woo0RU: 00Aoo`00000007]oo`05001oofmkKg]F]@020001Ool00003Ool007oo009_N`03CW<007oo03aoo`03 E[EJeWoo00=oo`=:DP04OolYBRe[Ool2001lOol01@00Oom_Nf]JCW<00P000Goo00001goo001oofmk JeYF]@0003eoo`=JePAoo`06AS5:DWoo;F/YBWoo0P00O7oo00D007ooKg]_NeJe0080005oo`0000Mo o`00Oom_Nf]JDY@0000nOol00e[FE[EJeP03Ool00dYBAS5oo`02:DX00goo0000001lOol01@00Oom[ FVmkCW<00P000Goo00000goo001oo`02Kg/00e:D001oo`0nOol2F]H3Ool2BU8017oo;F/YBRU:0P00 O7oo00D007ooKg][FUJe0080005oo`0000=oo`00Ool00V]J00=BU000Ool077oo0RU:87oo00=JeUJe F]H00Woo00I:DTHaBU9oobU:;F/2000cOol40015Ool01@00Oom_NfmkCW<00P000Goo00000goo001o o`02Kg/00e:D001oo`0LOol00bU:;F]oo`0POol2F]H3Ool01DYBAS5oobe[:DX00P00EJe0080005oo`0000Moo`00Oom_Nf]JE[D0000LOol00bU:;F]oo`0LOol2Li`3Ool0 0e[FE[EJeP02Ool00dHaBU9oo`02:DX2000cOol40015Ool01@00Oom_NfmkDY@00P000Goo00001goo 001oofmkJeY>L`0001Qoo`06:DYoogooOol]JbU:7Goo0W>L17oo0U[F0Woo00A:DTHaBU8YBP<003=o o`@004Eoo`05001oof]JJeYBU0020001Ool00003Ool007oo009_N`03E[D007oo01Moo`03:DX]Jgoo 008YBQioo`=cW0=oo`03F]IF]E[F009oo`03BU96L0Woo0e[F00AoodYBBU8YBP8007eoo`05001oofmkKg]>L`020001Ool00003Ool007oo009_ N`03CW<007oo01Moo`03;F/YBRe[00L0Woo0U[F00=oodHaBU800P00OGoo00D007ooKg]_Ne:D0080005oo`0000=oo`00Ool00Vmk 00=>L`00Ool05goo00DYBRe[:DXYBRe[02=oo`9cW09oo`9JeP03E[E:DTHa008007eoo`05001oofmk JeYBU0020001Ool00007Ool007ooKg]W>EJe000067oo00@]JbU::DX]JbAoo`=cW09oo`03E[EJeWoo 00<007eoo`05001oof]JKg]BU0020001Ool00003Ool007oo009_N`03E[D007oo01Moo`8YBP03;F]o ogoo02Aoo`=cW004OomJeU[FF]H200000bU:Oomoo`1kOol01@00Oom_NfmkCW<00P000Goo00000goo 001oo`02Kg/00dic001oo`0GOol00bU:;F]oo`0WOol3Li`00gooF]IF]@0200000be[Oomoo`1kOol0 1@00Oom_NfLiE[D00P000Goo00000goo001oo`02JeX00eJe001oo`0DOol012e[:DYoobe[:Woo0W>L 00=_Ne[FF]H00P0000L00Iooe[F000002U:;F]lOol01@00Oom_Nf]JCW<00P000Goo00001goo 001oofmkIcUF]@0001Eoo`04;F/YBRU::DX[Ool3Li`00eJe00000002:DYlOol01@00Oom_Nf]JE[D0 0P000Goo00000goo001oo`02Kg/00dic001oo`0DOol012U:;F/YBRe[;7oo0g>L0P0000L0P000RU:O7oo 00D007ooKg][FU:D0080005oo`0000Moo`00Oom_Nf]JCW<00017Ool300000bU:;F]oo`1kOol01@00 Oom_Nf]JDY@00P000Goo00001goo001oofmkJeYF]@0004Moo`800004Li`YBRU:BU9kOol01@00Oom_ Nf]JDY@00P000Goo00001goo001oofmkJeYF]@0004Moo`800004Li`YBRU:BU9kOol01@00Oom[FVmk DY@00P000Goo00000goo001oo`02Kg/00dic001oo`16Ool2000017>L:DX]JdHaNgoo00D007ooJeY_ Ndic0080005oo`0000Moo`00Oom[FVmkE[D00017Ool200001Goo;F/YBRU:BU80NWoo00D007ooKg]_ NeJe0080005oo`0000=oo`00Ool00Vmk00=>L`00Ool0AWoo0P000Woo00L07Ioo`05001oofmkKg]>L`02 0001Ool00007Ool007ooKg][FUJe000077oo00A:DWooOomoo`9:DRAoo`8000=oo`8YBP06BU96LMGoo00D007ooKg][FU:D0080005oo`0000=oo`00Ool00Vmk00=>L`00Ool06goo00=6L Lgoo00D007ooKg]_NeJe0080005oo`0000=oo`00Ool00Vmk00=>L`00Ool06goo00Q6LKg/0LWoo00D007ooKg][FUJe0080005oo`0000Moo`00Oom_Nf]JDY@0000LOol01THaBU96 LKg]cW71oo`05001oofmkIcUF]@020001Ool00003Ool007oo009[FP03DY@007oo01]o o`04AS5:DTHaBU8UOol20005Ool2:DX2Ool2BU8017ooF]IF]E[F0g>LKgoo00D007ooKg]_Ndic0080 005oo`0000=oo`00Ool00Vmk00=BU000Ool06goo00=:DTHaBU809Woo0P001Goo00@]JbU::DYoo`96 <@9oo`03F]IF]Goo009cW6moo`05001oofmkJeYF]@020001Ool00007Ool007ooKg][FUJe000077oo 00=6L`020001Ool0 0007Ool007ooKg][FTic00006Woo00=:DWooBU80<7oo00H]JbU:OomoodHaBU82Ool2F]H017ooLiac W7>LKGoo00D007ooJeY[FU:D0080005oo`0000=oo`00Ool00Vmk00=F]@00Ool06Goo00A:DWooOom: DRmoo`8YBP9oo`08BU96L`020001Ool00003Ool007oo009_N`03CW<0 07oo02Uoo`9JeR5oo`03;F/YBRU:009oo`03BU96EJe0000:Goo00=F]E[FOol08Woo00LIgoo00D007ooKg]_Ne:D0080005oo`0000=oo`00Ool00Vmk00=F ]@00Ool097oo00AJeWooOomoo`9JeR=oo`8YBP=oo`9:DPAoo`9JeP04E[EoogooOol2Li`00fmkOomo o`1TOol01@00Oom_NfmkCW<00P000Goo00000goo001oo`02Kg/00dic001oo`0TOol2F]H00gooF]IJ eP0TOol00bU:;F]oo`02Ool00dYBAS56<@04Ool00eJeF]Ioo`03Ool3LiaUOol01@00Oom[FV]JDY@0 0P000Goo00000goo001oo`02JeX00eJe001oo`0TOol01E[FE[EJeUJeF]H097oo00<]JbU:Ool00goo 0TYB17oo0U[F00=F]GooOol00Woo0W>LIGoo00D007ooKg]_NeJe0080005oo`0000=oo`00Ool00Vmk 00=BU000Ool097oo00EF]E[FF]IJeUJe00=JeRMoo`03BU96L`020001Ool00007Ool007ooKg]W>EJe00009Goo00MJeUJeF]IF]E[FE[EJeP0XOol2BU80 0dHaOomoo`02Ool00e[FE[EJeP04Ool3LiaSOol01@00Oom_NfmkE[D00P000Goo00000goo001oo`02 Kg/00dic001oo`0TOol2F]H015JeF]IJeU[F:Woo00=6LHWoo00D007oo JeY_Ndic0080005oo`0000=oo`00Ool00Vmk00=F]@00Ool097oo00EJeUJeF]IF]E[F02]oo`03BU96 L`020001Ool00007Ool007ooKg][FUJe00009Goo00=JeUJeF]H0;Woo00=:DTHa Ool017oo0e[F1Goo0g>LH7oo00D007ooKg]W>EJe0080005oo`0000Moo`00Oom_Nf]JE[D0000UOol2 F]H_Ool2BU86Ool00e[FE[EJeP05Ool3LiaOOol01@00Oom_NfmkDY@00P000Goo00000goo001oo`02 Kg/00dic001oo`0QOol2F]H00gooF]Ioo`0hOol2F]H6Ool3LiaNOol01@00Oom[FV]JDY@00P000Goo 00001goo001oof]JKg]F]@00029oo`03E[EJeWoo03Yoo`03F]IF]E[F00Ioo`=cW5eoo`05001oofmk Kg]BU0020001Ool00003Ool007oo009_N`03CW<007oo025oo`04F]IF]E[FF]HjOol00e[FE[Eoo`06 Ool3LiaLOol01@00Oom_NfmkDY@00P000Goo00001goo001oofmkIcUF]@00029oo`AJeSYoo`=JePMo o`9cW5aoo`05001oofmkKg]>L`020001Ool00003Ool007oo009_N`03DY@007oo03Yoo`9cW2Aoo`9J eVEoo`05001oof]JJeYF]@020001Ool00003Ool007oo009_N`03DY@007oo03Yoo`9cW8]oo`05001o ofmkKg]BU0020001Ool00007Ool007ooKg][FU:D0000>Woo0W>LS7oo00D007ooKg][FU:D0080005o o`0000Moo`00Oom_Nf]JE[D0000fOol017>LOomoogoo0W>LS7oo00D007ooJeY_Ne:D0080005oo`00 00Moo`00Oom_Nf]JE[D0000fOol2Li`00gooLiacW02=Ool01@00Oom_NfmkCW<00P000Goo00000goo 001oo`02Kg/00dic001oo`0eOol01G>LKg]cW6mkLi`0SGoo00D007ooKg]W>EJe0080005oo`0000Mo o`00Oom[FVmkE[D0000fOol8Lib:Ool01@00Oom_NfmkE[D00P000Goo00000goo001oo`02Kg/00dic 001oo`0eOol2Li`00fmkLia_N`02Lib;Ool01@00Oom_Nf]JCW<00P000Goo00001goo001oofmkJeYF ]@0003Ioo`IcW8aoo`05001oofmkJeYF]@020001Ool00007Ool007ooKg][FU:D0000=Woo00=_Ng>L Kg/00W>LSGoo00D007ooKg]_Ne:D0080005oo`0000=oo`00Ool00Vmk00=BU000Ool0=Goo17>LSWoo 00D007ooKg][FU:D0080005oo`0000=oo`00Ool00V]J00=BU000Ool0=Goo0g>LSgoo00D007ooJeY_ Ne:D0080005oo`0000=oo`00Ool00Vmk00=BU000Ool0=Goo0W>LT7oo00D007ooKg][FU:D0080005o o`0000Moo`00Oom_Nf]JE[D0000cOol2Li`00gooLiaoo`2@Ool01@00Oom_Nf]JDY@00P000Goo0000 1goo001oofmkJeY>L`0003=oo`03Lia_Ngoo099oo`05001oof]JKg]>L`020001Ool00003Ool007oo 009_N`03E[D007oo039oo`AcW95oo`05001oofmkKg]F]@020001Ool00007Ool007ooKg][FU:D0000 LTGoo00D007ooKg]_Ndic0080005oo`0000Moo`00Oom_Nf]JE[D00038Ool01@00Oom[FVmk CW<00P000Goo00000goo001oo`02Kg/00dic001oo`37Ool01@00Oom[FVmkE[D00P000Goo00001goo 001oofmkJeYF]@000L`020001Ool00003Ool007oo009_N`03CW<007oo0L`000L`020001Ool00007Ool0 07ooKg][FUJe00007goo0P00:Goo00<007ooOol0Ngoo00D007ooKg][FUJe0080005oo`0000Moo`00 Oom_Nf]JE[D0000NOol01000Oomoo`00:7oo00<007ooOol0Ngoo00D007ooKg]_Ne:D0080005oo`00 00=oo`00Ool00Vmk00=>L`00Ool037oo10000goo00<007ooOol00Woo0P0000Aoo`00Oomoo`<000Ao o`03001oogoo00Eoo`80009oo`03001oo`0000=oo`03001oo`0000=oo`<000Aoo`<0009oo`04001o ogooOol20002Ool20003Ool00`00Oomoo`04Ool00`00Ool00002Ool01000Oomoo`000Woo00@007oo Ool000=oo`04001oogoo0002Ool00`00Oomoo`02Ool20003Ool00`00Ool00002Ool20004Ool2000k Ool01@00Oom_NfLiE[D00P000Goo00001goo001oofmkJeYF]@0000eoo`05001oogooOol00002Ool0 1@00Oomoogoo00000Woo00@007ooOol0009oo`03001oogoo009oo`03001oogoo00Aoo`08001oogoo 001oo`00Ool000=oo`8000=oo`05001oogooOol00003Ool01P00Oomoo`00Ool0009oo`03001oogoo 0080009oo`03001oo`0000Moo`03001oo`00009oo`03001oo`0000=oo`04001oogoo0003Ool01000 Oomoo`000Woo00D007ooOomoo`00009oo`04001oo`00Ool200001Goo001oogoo00000Woo00@007oo Ool003Yoo`05001oofmkKg]>L`020001Ool00003Ool007oo009_N`03CW<007oo00aoo`03001oogoo 009oo`03001oo`0000=oo`04001oogoo0002Ool01000Oomoo`0017oo00<007ooOol017oo00P007oo Ool007oo001oo`000goo0P000Woo00<007ooOol00goo00@007ooOol0009oo`03001oo`00009oo`05 001oogooOol00004Ool00`00Oomoo`04Ool02@00Ool007oo001oo`00Ool00003Ool01000Oomoo`00 0goo00@007ooOol0009oo`05001oogooOol00002Ool00`00Ool00002Ool00`00Oomoo`02Ool01000 Oomoo`00?Goo00D007ooKg][FUJe0080005oo`0000Moo`00Oom_Nf]JE[D0000=Ool00`00Oomoo`02 Ool00`00Ool00004Ool30002Ool01000Oomoo`0017oo10000goo00P007ooOol007oo001oo`000goo 0P000Woo00<007ooOol00goo00@007ooOol0009oo`03001oo`00009oo`D000Aoo`03001oogoo00Ao o`09001oo`00Ool007oo001oo`0000=oo`04001oogoo0003Ool01000Oomoo`000Woo00D007ooOomo o`00009oo`03001oo`00009oo`03001oogoo008000=oo`@003Yoo`05001oofmkKg]>L`020001Ool0 0007Ool007ooKg][FUJe00003Goo00<007ooOol00Woo00@007oo0000009oo`04001oogoo0002Ool0 1000Oomoo`0017oo00D007ooOomoo`00009oo`07001oogoo001oo`00Ool00P000Woo0P000Woo00<0 07ooOol00goo00@007ooOol0009oo`03001oo`00009oo`03001oogoo0080009oo`03001oo`0000Eo o`03001oogoo00=oo`800003Ool007oo009oo`800003Ool007oo009oo`800005Ool007ooOol00003 Ool01P00Oomoo`00Ool0009oo`03001oo`00009oo`04001oogoo0002Ool00`00Oomoo`0hOol01@00 Oom[FV]JDY@00P000Goo00000goo001oo`02Kg/00dic001oo`0goo00D007ooKg]_NeJe0080005oo`0000Moo`00Oom_Nf]JE[D0000= Ool01@00Oomoogoo000057oo00D007ooOomoo`0000ioo`05001oogooOol00003Ool01@00Oomoogoo 000047oo00<007ooOol037oo00D007ooOomoo`0005ioo`05001oofmkKg]>L`020001Ool00003Ool0 07oo009_N`03CW<007oo00aoo`@001Eoo`@000Qoo`03001oogoo00Aoo`03001oogoo009oo`<000Ao o`03001oogoo009oo`03001oogoo00Uoo`03001oogoo00Yoo`03001oo`0000=oo`03001oogoo05ao o`05001oof]JKg]>L`020001Ool00003Ool007oo009[FP03DY@007oo0L`020001Ool00003Ool007oo 009_N`03CW<007oo0EJe0000b7oo00D0 07ooKg][FU:D0080005oo`0000=oo`00Ool00Vmk00=F]@00Ool0agoo00D007ooKg][FU:D0080005o o`0000=oo`00Ool00V]J00=>L`00Ool0agoo00D007ooKg]_Ne:D0080005oo`0000=oo`00Ool00Vmk 00=F]@000000b00000AoofmkJeY>L`80005oo`0000=oo`00Ool00Vmk011>Le:DDYAF]DicE[E>LeJe CW=F]DicE[E>LeJeCW=F]@EBU00GE[E>Le:DCW=BU4icE[E>LeJeCW=BU5JeCW=BU5JeDYA>LeJeCW=F ]DicDYA>L`02E[D014icE[E>LeJe0Tic00MF]E:DDYABU5JeCW=F]@02CW<3DY@01dicE[E>LdicDYAF ]Dic00=BU00ACW=BU5:DDYAF]DicDYAF]DicDYA>LeJeCW=F]DicE[E>L`04DY@025JeCW=F]DicE[E> Le:DCW<2DY@014icE[EF]Dic0UJe0Tic00=F]E:DDY@00Tic0UJe00=>LeJeCW<00U:D00=F]E:DDY@0 0Tic00AF]DicCW=F]@9BU09>L`03DYAF]Dic009F]@04CW=F]DicE[D2DY@024icE[E>LdicDYAF]Dic E[D4DY@01EJeDYABU5JeCW<01U:D00MF]DicE[E>Le:DCW=F]@03DY@014icE[EF]Dic0UJe00=>LeJe DY@00e:D00YF]DicE[E>LeJeCW=F]DicE[EW>@9_N`03E[D00000005oo`0000Eoo`00Oom_Nf]J009_ N`][FP9_N`03IcU_Nfmk009_N`9[FP04Kg][FVmkJeX2Kg/2JeX01VmkJeY_NfmkJeY_N`9[FP9_N`04 JeY_Nf]JKg/2JeX2Kg/01V]JKg]_NfmkIcU_N`9[FP9_N`03JeY_Nfmk00A_N`08JeY_NfmkJeY_Nf]J Kg][FPE_N`03IcU_Nf]J00A_N`06JeY_Nf]JKg][FVmk1F]J0fmk0V]J0fmk00E[FVmkJeY[FVmk009[ FP9_N`9[FP9_N`03JeY_NfLi00=_N`9[FP03Kg][FVmk00I_N`03JeY_Nfmk009_N`08JeY_Nf]JJeY_ Nf]JKg]W>@=_N`04JeY_NfmkJeX2Kg/00fLiKg][FP02Kg/01FLiKg]_Nf]JKg/00V]J0Vmk00MW>Fmk JeY_Nf]JKg][FP02Kg/00f]JKg]_N`03JeX2Kg/01FLiKg][FV]JKg/02f]J00A_Nf]JJeYBU080005o o`0000Aoo`00Oom_N`=[FP]_N`03JeY_Nfmk009[FP03Kg]W>Fmk00=_N`9[FP05Kg][FVmkJeY_N`02 JeX00fmkJeY[FP02Kg/016]JKg][FV]J0Vmk00Q[FVmkKg][FVmkIcU_Nf]J0Vmk00A[FVmkJeY_N`9[ FP03Kg][FV]J009[FP03Kg]W>Fmk00=_N`04IcU_NfLiKg/3JeX2Kg/036]JKg]_NfLiKg][FVmkJeY_ Nf]JKg][FPE_N`07IcU_Nf]JKg][FVmkIcT016mk00=W>FmkKg/00f]J00=_NfLiKg/00fmk00=[FVmk JeX00Vmk0V]J00=_NfLiKg/00V]J00A_Nf]JKg]W>@=_N`06JeY_Nf]JJeY_Nf]J0Vmk00AW>FmkKg]_ N`9[FP03Kg][FV]J00=_N`9[FP03Kg][FVmk009[FP9_N`05IcU_NfmkKg][FP02Kg/00fLiKg]_N`02 Kg/00fLiKg][FP03Kg/00fLiKg]_N`02JeX00fmkJeY_N`0:Kg/00f]JKg]>L`020001Ool00004Ool0 07ooJeX?Kg/016LiKg][FV]J0fmk00=[FVmkJeX00fmk0V]J0fmk0V]J0Vmk0V]J00Q_Nf]JKg]_NfLi Kg][FVmk0V]J0fmk00A[FVmkJeY[FP9_N`04IcU_NfmkJeX6Kg/00fLiKg]W>@05Kg/01F]JKg]_Nf]J Kg/00f]J00M_Nf]JKg]_Nf]JKg][FP03Kg/016LiKg]_NfLi0fmk0V]J0Vmk0f]J0Vmk0V]J1Fmk0V]J 0Vmk0V]J00I_Nf]JJeY[FVmkJeX2Kg/2JeX00fmkJeY_N`02Kg/016LiKg]_NfLi0Vmk0V]J0fmk0V]J 00E_Nf]JJeY_Nf]J009_N`04IcU_Nf]JJeX2Kg/00f]JKg][FP03Kg/01V]JKg][FV]JKg]W>@=_N`03 IcU_Nfmk00=_N`03IcU_Nfmk009[FQ1_N`04JeYF]@000001Ool00006Ool007ooKg][FVmk37oo00=[ FVmkKg/00Vmk00E[FVmkJeY[FVmk009[FP0AKg][FVmkJeY_Nf]JKg/006]JKg][FVmkJeY_Nf]JKg][ FP02Kg/016]JKg][FVmk0V]J0Vmk00@006mkKg]W>@=_N`08JeY_Nf]JJeY_NfLiKg][FP=_N`03JeY_ Nf]J009[FP05Kg][FV]JKg][FP02Kg/00f]JKg]_N`02JeX00fmkJeY_N`03JeX00fmkJeY[FP02Kg/0 16]JKg][FV]J0Vmk00U[FVmkKg]W>FmkJeY_Nf]JKg/00V]J00=_Nf]JKg/00V]J00A_Nf]JKg][FPE_ N`04IcU_NfmkKg/4JeX00fmkJeY[FP03Kg/01F]JKg][FVmkJeX00Vmk00IW>FmkKg][FVmkJeX2Kg/0 16]JKg][FVmk0f]J0Vmk00=W>FmkJeX00fmk00A[FVmkKg]W>@9_N`04IcU_NfmkIcT2Kg/016LiKg]_ Nfmk0V]J00=_NgooOol02Woo0Vmk00=>L`0000000Goo00000goo001oo`02Kg/00dYB48@DY@0848@0 11BUOom_Nfmk0V]J00=_Nd8@>Lh00T8@00HicT8@@Q0icT8@>Lh3Kg/016Li001_Nf]J0fmk0f]J0Vmk 00EW>FmkKg]_Nf]J009_N`9[FP06001[FVmkKg][FVmk0V]J00I_Nf]JKg][FVmkJeX2Kg/2JeX01Fmk JeY_NfmkJeX00fmk00A[FVmkJeY_N`9[FPE_N`07JeY_NfmkJeY_Nf]JKg/00f]J16mk00=W>FmkJeX0 16mk0V]J00A_Nf]JJeY[FP9_N`9[FP9_N`9[FP04Kg]W>FmkIcT2Kg/00f]JKg][FP03Kg/016]JKg]_ Nfmk0V]J00=_Nf]JKg/00V]J00A_NfLiKg]_N`9[FP9_N`06JeY_NfmkJeY_Nf]J0fmk00I[FVmkJeY_ Nf]JKg/2JeX01VmkJeY_Nfmk@Q0icP924004>Li2448@>Lh2@Q001SW>Kg]_Nf]JKg]:DP<@Q0035:D@ Q12400D@Q004Oom[FV]JDY@20001Ool00008Ool007ooJeY_NdHa5:E[FPI:DP06CW=:DQ24Oom_NfLi 0Vmk2Woo0Vmk00=W>FmkKg/010000Vmk00=[FVmk00000P0000A_Nf]JJeX000=_N`03JeY_N`0000<0 009_N`03JeY_N`00008000=_N`08001W>FmkKg/006mkIcU_N`@00004JeY_Nf]J0002Kg/00fLiKg/0 0002000016mkJeY[FVmk0P0000M[FP00Kg]_Nf]J001[FP03Kg/400000fmkJeX00004Kg/2JeX2Kg/0 0f]J000000020003Kg/00f]J001_N`03JeX3000016mkJeY[FVmk0`0000AW>FmkKg]_N`<0009_N`9[ FP06Kg/00000Kg]W>Fmk0`000Vmk00=[FP00JeX00fmk00=[FVmkJeX02goo00a_Nf]JJeY_Nf]JBU8@ Q6mkBU96La24009[FP04 Kg]g_G>LNmh2Ool00dic48Aoo`02Kg/2JeX01Fmk@Q0mkcg_@Q000Sg_00Y243g_?Nlmkf]JKg][FVmk 001_N`9[FP05001[FVmk001_N`02JeX06000JeY_N`00JeY_NfLiKg][FP00Kg]W>Fmk001[FVmk001[ FVmkJeX006LiKg/0009_N`05JeX006]JKg/00002JeX01Vmk001_NfLiKg/000=_N`05001[FV]JJeX0 0002Kg/00`00Kg]_N`02000016mkJeY[FP000V]J00=_N`00Kg/00V]J00P006mkJeX006mkIcU_Nf]J 0Vmk0V]J00=_N`00JeX00Vmk01`006]JJeY[FP00Kg][FVmk001_NfLiKg/006mkJeX006mkJeY_N`00 Kg][FP00Kg][FVmk001_N`9[FP03001[FV]J009_N`0A001_NfLiKg/006]JKg/006]JKg][FVmkJeY_ Nf]JKg]24002?Nl0148@?Nlmkd8@0Sg_00=243W>Kg/00fmk00M6Fmk0002Kg/01@00Kg]_Nf]J00000Vmk00M[ FP00Kg]W>Fmk001[FP02Kg/2JeX02Vmk001[FVmkJeX006mkJeY_N`000Vmk00=W>@00Kg/00V]J00D0 06]JKg/006]J00=_N`9[FP9_N`06JeX006mkKg]W>@000fmk00<006mkJeX00Vmk00M[FVmkKg/006]J Kg/00002JeX2Kg/2JeX01P00JeY_NfLiKg][FP9_N`07001_NfmkIcU_N`00IcT00Vmk00/006]JJeX0 06mkJeY_Nf]JKg]W>Fmk00]oo`08Kg][FV]JKg][FTYB48A_N`9W>@03Kg]g_GNm009oo`03BU8@Q7oo 009_N`03CW<00000005oo`0000Qoo`00Oom[FVmkBU8@Q6mk0V@=_N`8mk`04@Q0mkcg_@Q02?Nl0148@>Li_NfLi0Vmk00D006]JJeY_N`00009_N`D0009_N`0;001[ FVmkJeY_Nf]J001[FVmkJeX00002Kg/50002Kg/02@00JeY_Nfmk001_Nf]J001_N`02JeX02@00JeY_ Nfmk001[FVmkJeX00003Kg/2JeX03fmk001[FV]JKg/006]JKg][FP00Kg][FVmk001W>@02Kg/02000 Kg]_N`00JeY_NfLiKg/2JeX01FmkJeY_N`00JeX00Vmk00H006]JJeY_N`00IcT3Kg/300000f]JKg]_ N`050002Kg/00`00JeY_N`02Kg/3JeX00`00Kg][FP02Kg/01@00Kg]_NfLi00000Vmk00D006mkJeY_ Nf]J00A_N`8mk`04@Q0mkcg_@Q02?Nl0248@?Nlmkf]JKg][FVmkCW<448@00aBU48@@Q00448@017oo JeY_NeJe0P000Goo00004Woo001oofmkJeY:DQ24Kg]JeVLiHaQ[FVmkLiag_DYB48Aoo`9_N`03IcU_ Ngoo00Uoo`A_N`06IcT006mkJeY_N`000Vmk018006]JJeY_N`00IcU_N`00JeY_Nf]JKg][FP00Kg]W >Fmk0002Kg/03000JeY[FVmk001W>Fmk001[FVmkJeX0009[FP0@001[FVmkKg/006]JKg][FP00JeY_ Nf]J001[FVmkIcT2Kg/01fLi001_Nf]JKg/006]J009_N`03001_Nf]J009_N`@0009[FP05001_Nf]J Kg][FP02Kg/016]JKg][FP000V]J00I_N`00JeY_Nf]J0002Kg/00fLi001_N`02JeX01FmkJeY[FP00 Kg/00V]J00H006mkKg/006mkIcT2Kg/01F]JKg]_N`00JeX00Vmk00IW>@00Kg][FVmk0002JeX01000 Kg][FVmk0V]J0Vmk2goo0Vmk0V]J00M_NdHa48A_NekgIcUS6002Kg/2Mkd00dYB5:Eoo`02Kg/00dic 00000001Ool0000COol007ooKg][FTYB48A_NekgF]IS66LiJeY_NgNmBU8DYGooJeX00Vmk00A[FVmk @Q0icP924008>Li2448@>Li243W>Kg][FP9_N`05001[FVmkKg/00002JeX01`00Kg]_Nf]J001_NfLi 0080009_N`03IcU_N`0000=_N`04001[FV]J0002Kg/016]J001_NfLi0P0000I_Nf]J001[FVmk0003 JeX02P00Kg][FV]J001_NfLiKg/006]J0Vmk00P006mkKg/006mkJeY_N`000Vmk00Y[FP00JeY_NfLi 001_Nf]JKg/0009_N`800003Kg][FVmk00=[FP9_N`06001_NfmkJeX006mk0V]J00H006mkIcU_N`00 JeX2Kg/01@00Kg][FP00JeX00Vmk00@006]JJeX0009_N`06JeX006]JKg]W>@000Vmk00MW>Fmk001_ Nf]JKg/00002Kg/200001FmkJeY_NfmkIcT00Vmk00A243g_?Nm2408mk`0:@Q0mkcg_@Q0icVmkJeY_ Nf]JCW<:48@01ABUOom_NfLiE[D00P000Goo00000goo001oo`02Kg/014Ha48A_Ndic0ekg00IW>F]J JeY:DQ24Ool2Kg/00f]JKg]oo`09Ool00fmkJeY_N`02JeX4000016mkJeY[FVmk0`000fmk00<006mk 00000P0000=_N`0000000P0000A_Nf]JJeY_N`<000=_N`04001_N`000003Kg/00f]J000000020000 16mkJeX0000016mk0`000V]J00]_N`00JeY[FVmk001_NfLiKg/006]J00=_N`<00005Kg][FV]J001_ N`030002Kg/3JeX40002Kg/00f]J00000004Kg/30002JeX2Kg/3000016mkJeY[FVmk0`000fmk0`00 00AW>FmkKg]_N`<00005Kg][FV]J001_N`0300000f]JKg][FP0;Ool02FmkJeY_Nf]JKg]6 L`03G_L01VLiJeY[FTYB48Aoo`9_N`03DY@00000005oo`0000Yoo`00Oom_Nf]JCW<@Q6mkE[E>L`9N m`06HaQW>FmkBU8DYGoo0Vmk00A[FVmkKg]2408mk`04@Q0mkcg_@Q03?Nl2JeX2Kg/00f]JKg]_N`02 JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX4Kg/0 1@00JeY_Nf]JKg/00f]J0Vmk0V]J0Vmk0V]J0Vmk0f]J0Vmk00<006mkJeX00V]J0Vmk0V]J0Vmk0V]J 0Vmk0V]J16mk00@006]JJeY[FP=_N`03JeY_Nf]J009[FP9_N`9[FP9_N`9[FP9_N`9[FP9_N`9[FP9_ N`=[FP03Kg/006mk009_N`9[FP9_N`9[FP9_N`9[FP9_N`9[FP03Kg][FVmk008mk`04@Q0mkcg_@Q02 ?Nl0348@?Nlmkf]JKg][FVmkBU8DYFmkE[E>L`9Nm`09HaQW>FmkBU8@Q7ooKg][FU:D0080005oo`00 00Yoo`00Oom[FVmkAS4@Q7ooJeY_N`9[FP0:Kg][FV]JKg/@Q7ooKg][FVmkJeX:Ool2Kg/2JeX2Kg/2 JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2 JeX2Kg/01P00JeY_Nfmk001[FP9_N`9[FP9_N`9[FP9_N`9[FP9_N`06JeY_N`00001_Nf]J0Vmk0V]J 0Vmk0V]J0Vmk0V]J0Vmk0V]J0Vmk00@006]JKg]_N`9[FP9_N`04001[FVmkKg/2JeX2Kg/2JeX2Kg/2 JeX2Kg/2JeX2Kg/2JeX2Kg/016]JKg/006mk0V]J0Vmk0V]J0Vmk0V]J0Vmk0V]J0Vmk00=[FVmkOol0 2Woo0Vmk00IW>FmkKg]:DQ24Ool2Kg/016LiKg]_NfLi0Vmk00D@Q7ooJeY_Ne:D0080005oo`0000=o o`00Ool00Vmk00E>La245:DDYA24008DY@0=48@DYABU48@DYGooKg][FVmkJeY_Nd8@>Lh00T8@00Hi cT8@@Q0icT8@>Lh3Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2 Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2 Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2 Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX2Kg/2JeX3Kg/0148@?Nlmkd8@ 0Sg_00E243g_?Nm243W>00=_N`04IcU>La246FmkIcU_N`0:OonDJeX;Ool01FmkIcU_NfLiKg/034Ha 0f]J00=F]@0000000Goo00000goo001oo`3@Kg/00dic00000001Ool00003Ool007oo0=1_N`03E[D0 0000005oo`0000=oo`00Ool0d7oo00=[FP00Mkd00Goo00000goo0000003B0001Li`1Ool00=Moo`00 \ \>"], "Body", Evaluatable->False, ImageSize->{215, 232}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}], Cell[TextData[{ "Figure 1. Moving either point", StyleBox[" ", "Text"], "causes the perpendicular bisector to move accordingly." }], "Text"], Cell["\<\ More complicated geometrical relationships are easily implemented \ by defining appropriate relationships between objects. Real-time \ implementation of such relationships is impossible with the current notebook \ front end or in existing interactive drawing applications.\ \>", "Text"] }, Open ]], Cell[CellGroupData[{ Cell["2. Structure of Interactive Graphics", "H2"], Cell[TextData[{ "This Interactive Graphics system consists of the kernel, notebook front \ end, and two ", StyleBox["MathLink", FontSlant->"Italic"], " programs, ", StyleBox["draw.exe", "Output"], " and ", StyleBox["serializer.exe", "Output"], ". The system is constructed using an Object Oriented Programming Style \ (OOPS). The structure of system is divided into four parts:" }], "Body"], Cell[TextData[{ "OOPS for ", StyleBox["Mathematica", FontSlant->"Italic"], ";" }], "LI"], Cell[TextData[{ "wrapping ", StyleBox["MathLink", FontSlant->"Italic"], " external calls as an object method;" }], "LI"], Cell["handling a user's event to the object;", "LI"], Cell[TextData[{ "the mechanism to send expressions from the ", StyleBox["MathLink", FontSlant->"Italic"], " program to the kernel." }], "LI"], Cell[CellGroupData[{ Cell[TextData[{ "2.1 Object Oriented Programming Style for ", StyleBox["Mathematica", FontSlant->"Italic"] }], "H3"], Cell[TextData[{ "Function closure is used to construct an OOPS in ", StyleBox["Mathematica", FontSlant->"Italic"], "[3]. The OOPS enables the creation of instance methods, class methods, and \ multiple inheritance. The expression" }], "Text"], Cell[BoxData[ \(New[PointObject, w]\)], "Input"], Cell[TextData[{ "creates a point object in window object ", StyleBox["w", "Input"], ", which is the parent of this object. This function is defined as below:" }], "Text"], Cell[BoxData[ \(New[PointObject, w_] := \[IndentingNewLine]Module[ {self, mypos = {10, 10}, oindex, super = w}, self[dispose] := DisposePointObject[oindex, super[port]]; \[IndentingNewLine]self[ setposition, {x_, y_}] := MovePointObject[mypos = {x, y}, oindex, super[port]]; \[IndentingNewLine]self[getposition] := mypos; \[IndentingNewLine]self[selector_, args___] := findmethod[PointObject[self, selector, args], super[selector, args]]; \[IndentingNewLine]oindex = NewPointObject[mypos, super[port], self]; \[IndentingNewLine]self] \)], "Input"], Cell[BoxData[ \(PointObject[self_, move, {x_, y_}] := self[setposition, {x, y}]\)], "Input"], Cell[TextData[{ StyleBox["New[PointObject,w]", "Input"], " returns ", StyleBox["self", "Input"], " which is defined in the ", StyleBox["Module[]", "Input"], ". In ", StyleBox["Mathematica", FontSlant->"Italic"], ", symbols in a ", StyleBox["Module", "Input"], ", like ", StyleBox["self", "Input"], ", are made unique by appending a number to the name, here ", StyleBox["self$10", "Input"], ". Therefore ", StyleBox["New", "Input"], " returns the function ", StyleBox["self$10", "Input"], " with message arguments ", StyleBox["dispose", "Input"], ", ", StyleBox["setposition", "Input"], ", and ", StyleBox["getposition", "Input"], ", and these are treated as the instance methods. If there is no pattern \ match with the instance method, ", StyleBox["self[selector_, args___]", "Input"], " will be invoked, and this will look for class methods, then a super \ method. In the above example a class method ", StyleBox["move", "Input"], " is defined for ", StyleBox["PointObject", "Input"], "s." }], "Text"], Cell["\<\ Using this idea, menus, windows, points, lines, curves, and text \ can be defined as objects.\ \>", "Text"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ "2.2 Wrapping ", StyleBox["MathLink", FontSlant->"Italic"], " External Functions as a Method" }], "H3"], Cell[TextData[{ "Although all objects are defined in the kernel, these objects call ", StyleBox["MathLink", FontSlant->"Italic"], " external functions as the action of the object internally. For example, ", StyleBox["New", "Input"], " calls the ", StyleBox["NewPointObject", "Input"], " function, the ", StyleBox["dispose", "Input"], " method calls the ", StyleBox["DisposePointObject", "Input"], " function, and the ", StyleBox["setposition", "Input"], " method calls the ", StyleBox["MovePointObject", "Input"], " function." }], "Text"], Cell[TextData[{ "These external functions are created from the ", StyleBox["MathLink", FontSlant->"Italic"], " template. A template is a file which defines the relation between \ external C functions and ", StyleBox["Mathematica", FontSlant->"Italic"], " functions. When the ", StyleBox["Mathematica", FontSlant->"Italic"], " function is invoked, the arguments are passed to the corresponding \ external C function in the ", StyleBox["MathLink", FontSlant->"Italic"], " program, that C function is executed, and then the value is returned. \ Below is a template which defines the relationship between ", StyleBox["NewPointObject", "Input"], " and the C function ", StyleBox["newpointobject", FontFamily->"Courier"], "." }], "Text"], Cell["\<\ :Begin: :Function:\t\tnewpointobject :Pattern:\t\tNewPointObject[{x0_,y0_}, windex_Integer, oSymbol_Symbol] :Arguments:\t\t{ x0,y0,windex,oSymbol } :ArgumentTypes:\t{ Integer,Integer,Integer,Manual } :ReturnType:\tInteger :End:\ \>", "Body", FontFamily->"Courier", FontSize->10], Cell[TextData[{ StyleBox["NewPointObject", "Input"], " sends ", StyleBox["oSymbol", FontFamily->"Courier"], " which is assigned to a module symbol such as ", StyleBox["self$10", "Input"], ". For this ", StyleBox["oSymbol", FontFamily->"Courier"], ", the ", StyleBox["MathLink", FontSlant->"Italic"], " program can send event expressions from this object such as ", StyleBox["self$10[drag,{x,y}]", "Input"], "." }], "Text"], Cell[TextData[{ "There are three basic methods for all graphical objects: ", StyleBox["create", "Input"], ", ", StyleBox["dispose", "Input"], ", and ", StyleBox["move", "Input"], ". ", StyleBox["create", "Input"], " sets up a new object's data; ", StyleBox["dispose", "Input"], " releases this data; and ", StyleBox["move", "Input"], " moves the object and draws the object in the new position." }], "Text"], Cell[TextData[{ "Although making a complete interactive graphics program in C is rather \ difficult, implementing these three operations is relatively straightforward. \ In ", StyleBox["draw.exe", "Output"], ", all the complicated relationships between objects and user events are \ defined in the kernel." }], "Text"] }, Open ]], Cell[CellGroupData[{ Cell["2.3 Handling User Events", "H3"], Cell[TextData[{ "Our ", StyleBox["MathLink", FontSlant->"Italic"], " program (", StyleBox["draw.exe", "Output"], ") sends user events to the kernel as expressions. Mouse operations such as \ click, drag or menu selection are captured by ", StyleBox["draw.exe", "Output"], " and sent to the kernel. The form of each expression is a message to the \ object which the user has selected. For example, if there is a point object \ (", StyleBox["self$10", "Input"], ") and the user drags the mouse on the object then" }], "Text"], Cell[BoxData[ \(self$10[drag, {x, y}]\)], "Input"], Cell[TextData[{ "is sent to the kernel. The reaction to the event depends on the definition \ of the method. We saw how the ", StyleBox["drag", "Input"], " method is defined in a previous example. And in that method a ", StyleBox["MathLink", FontSlant->"Italic"], " external function is called to perform the reaction using ", StyleBox["draw.exe", "Output"], " as shown in Figure 2." }], "Text"], Cell[GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgGoo 20000goo0P000goo0P0000=oo`0000000Woo0P0000Aoo`000000009oo`03001oogoo009oo`05001o o`00Ool00002Ool01000Oomoo`000goo00<007ooOol00goo00@007ooOomoo`<00003Ool00000009o o`06001oo`00001oo`000goo0P000Woo00<007ooOol00Woo00<007ooOol017oo0P000Woo00<007oo 00002Goo00<007ooOol0Lgoo1`00001;Ool00`00Oomoo`0GOol30002Ool00`00Oomoo`030002Ool0 1000Oomoo`000Woo0P000Woo00D007ooOol007oo00800005Ool007ooOol0000iOol80003Ool20003 Ool20005Ool01000Oomoo`0017oo00<007ooOol02Goo00<007ooOol017oo00<007ooOol027oo00<0 07ooOol04Goo00<007ooOol00goo00@007ooOol000Ioo`03001oo`0000Uoo`03001oogoo07=oo`L0 0000Bgoo00<007ooOol05Woo00<007ooOol00goo0P0000Aoo`00Ool0009oo`04001oogooOol20000 1Goo000007oo00000Woo00H007oo001oo`00Ool2000jOol80003Ool00`00Oomoo`03Ool00`00Oomo o`06Ool00`00Oomoo`02Ool00`00Oomoo`02Ool00`00Oomoo`04Ool00`00Oomoo`04Ool5000JOol0 0`00Oomoo`04Ool20007Ool00`00Ool00009Ool00`00Oomoo`1cOol7000004]oo`03001oogoo01Io o`07001oogooOol007oo00003Woo00<007ooOol0AGoo2000IGoo00<007ooOol0Lgoo1`00001;Ool0 0`00Oomoo`0GOol3001IOol8001UOol00`00Oomoo`1cOol7000004]oo`03001oogoo07=oo`P006Eo o`03001oogoo07=oo`L00000Bgoo00<007ooOol0Lgoo2000IGoo00<007ooOol0Lgoo1`00001;Ool0 0`00Oomoo`1cOol8001UOol00`00Oomoo`1cOol7000004]oo`03001oogoo07=oo`P006Eoo`03001o ogoo07=oo`L00000Bgoo00<007ooOol05goo0`000Woo0P0000Aoo`00Ool0009oo`800003Ool007oo 04Yoo`P006Eoo`03001oogoo07=oo`L00000Bgoo00<007ooOol05Woo00H007ooOol007oo0002Ool0 0`00Ool00002Ool01000Oomoo`00C7oo20004goo00<007ooOol0Cgoo00<007ooOol0Lgoo1`00001; Ool00`00Oomoo`0FOol01000Oomoo`000Woo0`0000=oo`00Ool00Woo0`00C7oo200047oo1000DGoo 00<007ooOol0Lgoo1`00001;Ool00`00Oomoo`0FOol01P00Oomoo`00Ool0009oo`03001oo`00009o o`04001oogoo001Ool7001@Ool00`00Oomoo`1cOol7000004]oo`03001oogoo01Moo`<0 009oo`80009oo`80009oo`8004eoo`P000]oo`X0051oo`03001oogoo07=oo`L00000Bgoo00<007oo Ool06Goo00<007ooOol017oo00<007ooOol057oo>@000goo200027oo3@00D7oo00<007ooOol0Lgoo 1`00001;Ool00`00Oomoo`0IOol00`00Oomoo`0KOoli0003Ool80006OomK0004Ool00`00Oomoo`1c Ool7000004]oo`03001oogoo03Moo`8003Yoo`P000QooeT000Aoo`04001oogooOolk000gOol70000 04]oo`03001oogoo03Moo`8003Yoo`P000]oo`X0051oo`04001oogooOolk000gOol7000004]oo`03 001oogoo02eoo`03001oogoo00Moo`8003Yoo`P000ioo`L0051oo`03001oogoo03Yoo`8003Moo`L0 0000Bgoo00<007ooOol0;Woo00<007ooOol01Woo0P00>Woo200047oo1@00D7oo00<007ooOol0>Woo 0P00=goo1`00001;Ool00`00Oomoo`0FOol01000Oomoo`000Woo00@007oo000000=oo`<0009oo`80 00Aoo`03001oogoo00Ioo`8003Yoo`P001=oo`03001oogoo04moo`03001oogoo03Yoo`8003Moo`L0 0000Bgoo00<007ooOol05Woo00@007ooOol0009oo`80009oo`03001oo`00009oo`03001oogoo0080 00=oo`03001oo`0000Moo`8003Yoo`P006Eoo`03001oogoo03Yoo`8003Moo`L00000Bgoo00<007oo Ool05Woo00H007oo001oo`00Ool20002Ool00`00Ool00002Ool00`00Oomoo`020003Ool00`00Ool0 0007Ool2000jOol8001UOol00`00Oomoo`0jOol2000gOol7000004]oo`03001oogoo01Ioo`06001o o`00Ool007oo0P000Woo00<007oo00000Woo00<007ooOol00P000Woo00D007ooOomoo`0000Ioo`80 03Yoo`P006Eoo`03001oogoo03Yoo`8003Moo`L00000Bgoo00<007ooOol05Woo0P000goo0P0000=o o`0000000goo0`000Woo0`0000=oo`00Ool00Woo00<007ooOol017oo0P00>Woo2000IGoo00<007oo Ool0>Woo0P00=goo1`00001;Ool00`00Oomoo`0FOol20003Ool20008Ool01@00Oomoogoo00003Goo 0P00>Woo2000IGoo00<007ooOol0>Woo0P00=goo1`00000?Ool30002Ool30003Ool300000goo001o o`03Ool30004Ool50003Ool00`00Oomoo`0300001Goo001oogoo00000Woo00<007ooOol02Goo00<0 07ooOol05Woo00<007ooOol00goo00<007ooOol01Woo00H007ooOol007oo000Ool0 0`00Oomoo`06Ool00`00Oomoo`0AOol00`00Oomoo`0:Ool00`00Oomoo`0cOol9000gOol8001UOol0 0`00Oomoo`0jOol2000gOol7000000ioo`05001oogooOol0000>Ool00`00Oomoo`06Ool5000LOol0 0`00Oomoo`0cOol9000gOol8001UOol00`00Oomoo`0jOol2000gOol7000004]oo`03001oogoo03Ao o`L003Qoo`P006Eoo`03001oogoo03Yoo`8003Moo`L00000Bgoo00<007ooOol0=7oo1`00>7oo2000 IGoo00<007ooOol0>Woo0P00=goo1`00001;Ool00`00Oomoo`0eOol5000iOol8001UOol00`00Oomo o`0jOol2000gOol7000004]oo`03001oogoo03Eoo`D003Uoo`P006Eoo`03001oogoo03Yoo`8003Mo o`L000003Woo00D007ooOomoo`00009oo`<000=oo`800003Ool007oo0080009oo`03001oo`00009o o`80009oo`04001oogoo0004Ool00`00Oomoo`02000AOol00`00Oomoo`0eOol5000iOol8001UOol0 0`00Oomoo`0jOol2000gOol7000000ioo`07001oogooOol007oo00001Goo00H007ooOol007oo0002 Ool20002Ool00`00Ool00002Ool00`00Ool00002Ool01@00Oomoogoo00000Woo00@007ooOol0011o o`03001oogoo03Ioo`<003Yoo`P006Eoo`03001oogoo03Yoo`8003Moo`L000003Woo00H007ooOomo o`00Ool40003Ool300000goo001oo`02Ool01P00Oomoo`00Ool0009oo`03001oo`00009oo`05001o ogooOol00002Ool01000Oomoo`0047oo00<007ooOol0=Woo0`00>Woo2000IGoo00<007ooOol0>Woo 0P00=goo1`00000>Ool40002Ool01000Oomoo`000Woo00H007ooOol007oo0002Ool20002Ool00`00 Ool00002Ool01P00Ool00000Ool000=oo`04001oogoo0002Ool00`00Oomoo`0>Ool00`00Oomoo`0f Ool3000jOol8001UOol00`00Oomoo`0jOol2000gOol7000000ioo`05001oogooOol00002Ool20004 Ool20003Ool200001Goo000007oo00000Woo0P000Woo00<007oo000017oo0P000Woo0P004Goo00<0 07ooOol0=goo00<007ooOol0>Goo2000IGoo00<007ooOol0>Woo0P00=goo1`00000>Ool01@00Oomo ogoo000047oo00<007ooOol03Woo00<007ooOol057oo00<007ooOol0=goo00<007ooOol0>Goo2000 IGoo00<007ooOol0>Woo0P00=goo1`00000>Ool4000DOol00`00Oomoo`0ROol00`00Oomoo`1cOol8 001UOol00`00Oomoo`0jOol2000gOol7000004]oo`03001oogoo07=oo`P006Eoo`03001oogoo03Yo o`8003Moo`L00000Bgoo00<007ooOol0Lgoo2000IGoo00<007ooOol05goo>`008Goo1`00001;Ool0 0`00Oomoo`1cOol8001UOol00`00Oomoo`0EOol2000kOol2000OOol7000004]oo`03001oogoo03=o ob4001moo`P006Eoo`03001oogoo01Aoo`800003Ool007oo009oo`05001oogooOol00003Ool01@00 Oomoogoo00000goo00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo00000goo 00D007ooOomoo`0000=oo`05001oogooOol00003Ool2000NOol7000004]oo`03001oogoo035oo`<0 01moo`<001eoo`P006Eoo`03001oogoo01=oo`8003moo`8001eoo`L00000Bgoo00<007ooOol0<7oo 0P000Woo00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo00000goo00D007oo Oomoo`0000=oo`<001aoo`P006Eoo`03001oogoo01=oo`03001oo`0000=oo`05001oogooOol00003 Ool01@00Oomoogoo00000goo00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo 00000goo00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo00007Goo1`00001; Ool00`00Oomoo`0_Ool00`00Oomoo`0UOol00`00Oomoo`0IOol8001UOol00`00Oomoo`0BOol00`00 Oomoo`11Ool00`00Oomoo`0JOol7000004]oo`03001oogoo02ioo`80009oo`03001oogoo025oo`<0 01Yoo`P006Eoo`03001oogoo019oo`8000=oo`03001oogoo025oo`03001oogoo015oo`05001oogoo Ool00002Ool00`00Oomoo`0JOol70000015oo`03001oogoo03Moo`03001oogoo02ioo`03001oogoo 01Aoo`03001oogoo011oo`03001oogoo01Qoo`P006Eoo`03001oogoo019oo`03001oogoo02Ioo`03 001oogoo01Qoo`03001oogoo01Yoo`L000003Woo1000>Goo00<007ooOol0;Goo0P0000=oo`00Ool0 0Woo10000goo0`0000Aoo`00Ool0009oo`8000Aoo`04001oogooOol20004Ool01000Oomoogoo0P00 6Goo2000IGoo00<007ooOol04Woo00@007ooOol000=oo`03001oo`0000Eoo`80009oo`03001oo`00 009oo`04001oogoo0003Ool20003Ool30002Ool00`00Oomoo`030002Ool20002Ool00`00Oomoo`07 Ool01000Oomoogoo0P0077oo1`000007oo00<007ooOol01Woo01d007oo001oo`00Ool007oo001oo`00Ool007oo 001oo`00Ool007oo001oo`00Ool007oo001oo`0000Yoo`8000=oo`03001oogoo00Yoo`05001oogoo 001oo`020004Ool01000Oomoogoo0P001Woo00@007ooOol001Uoo`P006Eoo`03001oogoo019oo`80 00=oo`04001oogooOol30007Ool00`00Oomoo`09Ool20003Ool00`00Oomoo`02Ool00`00Oomoo`0A Ool01@00Oomoogoo00000Woo00<007ooOol06Woo1`00000Ool01000Oomoogoo0P0077oo1`00001; Ool00`00Oomoo`0]Ool20007Ool30004Ool20004Ool01000Ool000000Woo00<007oo0000100027oo 0P006Goo2000IGoo00<007ooOol04Woo00<007ooOol01Goo00<007ooOol00goo00<007ooOol01Woo 00<007ooOol05Woo00<007ooOol04Goo00<007ooOol06Woo1`00001;Ool00`00Oomoo`0^Ool01@00 Oomoogoo00008goo00<007oo00006Woo2000IGoo00<007ooOol04Woo0P000goo00<007ooOol0=Goo 00D007ooOomoo`00009oo`03001oogoo01Yoo`L00000Bgoo00<007ooOol0;Woo0P009goo0P006Woo 2000IGoo00<007ooOol04Woo00<007ooOol0@Goo00<007ooOol06Woo1`00001;Ool00`00Oomoo`0_ Ool20003Ool01@00Oomoogoo00000goo00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00 Oomoogoo00000goo00@007ooOol001]oo`P006Eoo`03001oogoo019oo`04001oogoo0003Ool01@00 Oomoogoo00000goo00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo00000goo 00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo00000goo00@007ooOomoo`80 01aoo`L00000Bgoo00<007ooOol0<7oo0P008goo0P0077oo2000IGoo00<007ooOol04goo00<007oo Ool0?goo00<007ooOol06goo1`00001;Ool00`00Oomoo`0aOol30002Ool01@00Oomoogoo00000goo 00D007ooOomoo`0000=oo`05001oogooOol00003Ool01000Oomoogoo10007Goo2000IGoo00<007oo Ool04goo0P000Woo00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo00000goo 00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo00000goo00D007ooOomoo`00 00=oo`04001oogooOol3000MOol7000004]oo`03001oogoo03=oob4001moo`P006Eoo`03001oogoo 01Aoo`8003eoo`8001ioo`L00000Bgoo00<007ooOol0Lgoo2000IGoo00<007ooOol05Goo0P000Woo 00D007ooOomoo`0000=oo`05001oogooOol00003Ool01@00Oomoogoo00000goo00D007ooOomoo`00 00=oo`05001oogooOol00003Ool01@00Oomoogoo00000goo00D007ooOomoo`0000=oo`<001moo`L0 0000Bgoo00<007ooOol0Lgoo2000IGoo00<007ooOol05goo>`008Goo1`00001;Ool00`00Oomoo`1c Ool8001UOol00`00Oomoo`1cOol7000004]oo`03001oogoo03Ioo`03001oogoo01ioo`03001oogoo 01Uoo`P006Eoo`03001oogoo07=oo`L00000Bgoo00<007ooOol0=Woo00<007ooOol07Woo00<007oo Ool06Goo2000IGoo00<007ooOol08goo00<007ooOol057oo00<007ooOol0=Woo1`00001;Ool00`00 Oomoo`0YOol2000017oo001oo`000goo0P0000=oo`0000000P000Woo00H007ooOol007oo0002Ool2 0002Ool30003Ool20003Ool30002Ool00`00Oomoo`030002Ool20003Ool00`00Ool0000Woo0P00=goo1`00001;Ool00`00Oomoo`1cOol8001UOol0 0`00Oomoo`0jOol2000gOol7000004]oo`03001oogoo07=oo`P006Eoo`03001oogoo03Yoo`8003Mo o`L00000Bgoo00<007ooOol0Lgoo2000IGoo00<007ooOol0>Woo0P00=goo1`00001;Ool00`00Oomo o`1cOol8001UOol00`00Oomoo`0jOol2000gOol7000004]oo`03001oogoo07=oo`P006Eoo`03001o ogoo03Yoo`8003Moo`L00000Bgoo00<007ooOol0Lgoo2000IGoo00<007ooOol0>Woo0P00=goo1`00 001;Ool00`00Oomoo`1cOol8001UOol00`00Oomoo`0jOol2000gOol7000004]oo`03001oogoo07=o o`P006Eoo`03001oogoo03Yoo`8003Moo`L00000Bgoo00<007ooOol0I7oo00<007ooOol037oo2000 E7oo0`003Woo00<007ooOol0>Woo0P00=goo1`00000nOol3000:Ool00`00Oomoo`1SOol01@00Ool0 07oo00002goo2000Dgoo1P0037oo00<007ooOol0>Woo0P00=goo1`00000mOol60008Ool00`00Oomo o`1ROol02@00Ool007oo001oo`00Ool00008Ool8001COol90009Ool00`00Oomoo`0jOol2000gOol7 000003eoo`T000Eoo`03001oogoo06=oo`0;001oo`00Ool007oo001oo`00Ool00005Ool8001COol< 0006Ool00`00Oomoo`03Ooli000gOol7000003eoo``0009oo`03001oogoo00Aoo`1]001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo00000Woo20001WooG0000goo00<007ooOol00goo>@00 =goo1`000006Oom60007Ool0J@00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool00005Ool80006OomI 0006Ool00`00Oomoo`1cOol7000000Iood<0009oo`03001oogoo069oo`09001oo`00Ool007oo001o o`0000Qoo`P005=oo`T000Uoo`03001oogoo07=oo`L00000?Goo2@001Goo00<007ooOol0Hgoo00D0 07oo001oo`0000]oo`P005=oo`H000aoo`03001oogoo07=oo`L00000?Goo1P0027oo00<007ooOol0 HWoo00<007oo00003Woo2000Dgoo10003Woo00<007ooOol0Lgoo1`00000mOol4000:Ool00`00Oomo o`1cOol8001UOol00`00Oomoo`1cOol7000004]oo`03001oogoo07=oo`P006Eoo`03001oogoo07=o o`L00000Bgoo00<007ooOol0Lgoo2000;goo00<007ooOol0Ool00`00Oomoo`02Ool00`00Oomoo`0AOol00`00Oomo o`02Ool00`00Oomoo`07Ool01000Oomoo`0057oo00<007ooOol04Goo20002goo00<007ooOol00goo 00H007ooOomoo`00Ool20002Ool00`00Ool00002Ool20003Ool00`00Oomoo`03Ool01000Oomoogoo 0`000Woo00@007oo001oo`8000=oo`<0009oo`@0009oo`80009oo`03001oo`0001Ioo`03001oogoo 07=oo`L000002goo00D007ooOomoo`00009oo`<0009oo`80009oo`03001oo`0000=oo`<000=oo`03 001oogoo00=oo`04001oogooOol30002Ool00`00Ool00002Ool2000>Ool00`00Oomoo`0=Ool3000? Ool00`00Oomoo`02Ool5000NOol01@00Oomoogoo00004goo00<007ooOol04Goo20002goo00<007oo Ool04Woo00<007ooOol00Woo00<007ooOol0?Goo00<007ooOol0Lgoo1`00000;Ool01@00Oomoogoo 00003Woo00<007ooOol01Woo00<007ooOol04Goo00<007ooOol03Goo00<007ooOol0Lgoo20002goo 1@005Goo1@006goo00<007ooOol07Goo00<007ooOol0Lgoo1`00000;Ool01@00Oomoogoo00003Woo 00<007ooOol01Woo1@007goo00<007ooOol0Lgoo2000IGoo00<007ooOol0Lgoo1`00001;Ool00`00 Oomoo`1cOol8001UOol00`00Oomoo`1cOol7000004]oo`03001oogoo07=oo`P006Eoo`03001oogoo 07=oo`L00000Bgoo00<007ooOol0Lgoo2000IGoo00<007ooOol0Lgoo1`00001;Ool00`00Oomoo`1c Ool8001UOol00`00Oomoo`1cOol7000004]oo`03001oogoo07=oo`P006Eoo`03001oogoo07=oo`L0 0000Bgoo00<007ooOol0Lgoo2000IGoo00<007ooOol0Lgoo1`00001;Ool00`00Oomoo`1cOol8001U Ool00`00Oomoo`1cOol7000004]oo`03001oogoo07=oo`P006Eoo`03001oogoo07=oo`L00000Bgoo 00<007ooOol0Lgoo2000IGoo00<007ooOol0Lgoo1`00001;Ool00`00Oomoo`1cOol8001UOol00`00 Oomoo`1cOol7000004]oo`03001oogoo07=oo`P006Eoo`03001oogoo07=oo`L00000Bgoo00<007oo Ool0Lgoo2000IGoo00<007ooOol0Lgoo1`00001;Ool00`00Oomoo`1cOol8001UOol00`00Oomoo`1c Ool7000004]oo`03001oogoo07=oo`P006Eoo`03001oogoo07=oo`L00000Bgoo00<007ooOol0Lgoo 2000IGoo00<007ooOol0Lgoo1`00001;Ool00`00Oomoo`1cOol00`00Oomoo`1ZOol00`00Oomoo`1c Ool7000004]oo`03001oogoo07=oo`03001oogoo06Yoo`03001oogoo07=oo`L00000Bgoo00<007oo Ool0Lgoo00<007ooOol0JWoo00<007ooOol0Lgoo00<007ooOol017oo001;Ool00`00Oomoo`1cOol0 0`00Oomoo`1ZOol00`00Oomoo`1cOol00`00Oomoo`04Ool004]oogL006aoo`03001oogoo07=oo`03 001oogoo00Aoo`00ogoo;goo00<007ooOol0Lgoo00<007ooOol017oo003oOol_Ool00`00Oomoo`1c Ool00`00Oomoo`04Ool00?moobmoogL000Ioo`00ogoo[7oo003oOon/Ool00?moojaoo`00ogoo[7oo 003oOon/Ool00?moojaoo`00ogoo[7oo002:Ool2003oOolPOol008Uoo`04001oogoo003oOolOOol0 04eoo`04001oogoo0002Ool00`00Oomoo`0200001Goo001oogoo00000Woo00D007ooOol007oo00@0 0004Ool007oo0003Ool00`00Ool00002Ool00`00Oomoo`02Ool00`00Oomoo`03Ool00`00Oomoo`02 Ool20004Ool40004Ool200000goo00000002Ool01000Oomoo`00X7oo00@007ooOol0009oo`03001o ogoo00800005Ool007ooOol00002Ool01000Oomoo`000Woo0P000Woo00@007ooOol0009oo`03001o ogoo00800004Ool007ooOol20003Ool20003Ool200000goo001oo`03Ool01@00Oomoogoo00000goo 0P0000=oo`00Ool00Woo00D007ooOomoo`00009oo`80009oo`03001oogoo01Aoo`00CGoo00@007oo Ool0009oo`03001oo`00009oo`04001oogoo0003Ool01P00Oomoo`00Ool000Aoo`03001oo`0000=o o`05001oo`00Ool00005Ool00`00Oomoo`03Ool01@00Oomoogoo00000Woo00@007ooOol0009oo`80 00=oo`06001oogoo001oo`000Woo00@007ooOol00:1oo`04001oogoo0002Ool00`00Ool00002Ool0 1000Oomoo`000goo00H007ooOol007oo0002Ool00`00Ool00002Ool01P00Oomoo`00Ool0009oo`06 001oogoo001oo`000Woo00H007ooOol007oo0002Ool00`00Oomoo`03Ool01000Oomoo`000goo00<0 07ooOol00P000goo00L007ooOomoo`00Ool00002Ool00`00Ool0000FOol004eoo`09001oo`00Ool0 07oo001oo`00009oo`04001oogoo0003Ool01P00Oomoo`00Ool000Aoo`03001oo`0000=oo`04001o o`000006Ool00`00Oomoo`03Ool01@00Oomoogoo00000Woo00@007ooOol0009oo`8000=oo`06001o ogoo001oo`000Woo00@007ooOol00:1oo`09001oo`00Ool007oo001oo`00009oo`04001oogoo0003 Ool01P00Oomoo`00Ool000Aoo`04001oogoo0002Ool00`00Ool00002Ool01P00Oomoo`00Ool0009o o`03001oogoo009oo`04001oogoo0005Ool00`00Ool00004Ool01@00Oomoogoo00000goo00L007oo Oomoo`00Ool00004Ool00`00Oomoo`0DOol004eoo`07001oo`00Ool007oo00000Woo0`000Woo00D0 07ooOomoo`00009oo`03001oo`0000Aoo`03001oo`0000=oo`04001oo`000006Ool40002Ool01@00 Oomoogoo00000Woo00@007ooOol0009oo`8000Aoo`<00005Ool007ooOol00002Ool00`00Oomoo`2N Ool01`00Ool007oo001oo`00009oo`<0009oo`05001oogooOol00002Ool00`00Ool0000300001Goo 001oogoo00000Woo00<007ooOol00`000Woo00<007oo00000Woo00<007ooOol00goo0`001Goo0P00 1Goo1@000goo00H007ooOomoo`00Ool400000goo001oo`0EOol004eoo`8000=oo`800005Ool007oo Ool00002Ool01000Oomoogoo0P0000Aoo`00Ool000Aoo`04001oo`000002Ool01@00Ool007oo0000 1Goo00H007ooOomoo`00Ool20002Ool01000Oomoo`000Woo00<007ooOol00`000Woo00D007ooOol0 07oo00800005Ool007ooOol0002POol20003Ool200001Goo001oogoo00000Woo00@007ooOomoo`80 0004Ool007oo0002Ool01P00Ool00000Ool0009oo`03001oo`00009oo`06001oogoo001oo`000Woo 00H007ooOol007oo0002Ool00`00Oomoo`03Ool20005Ool00`00Oomoo`030002Ool20002Ool00`00 Ool00002Ool00`00Ool0000FOol004eoo`8000=oo`80009oo`8000=oo`80009oo`03001oo`00009o o`03001oogoo009oo`04001oo`00Ool20002Ool01000Oomoo`0017oo00T007ooOomoo`00Ool007oo 00000Woo0P0017oo100000Aoo`00Oomoo`80009oo`04001oo`00Ool2002QOol20003Ool20002Ool2 0003Ool20002Ool00`00Ool00003Ool20002Ool01000Ool007oo0P000goo0P000goo0`000goo0P00 0goo0P001Woo00<007oo00001Goo0P0000Moo`00Ool007oo001oo`020003Ool20002Ool00`00Oomo o`0DOol004eoo`03001oogoo00=oo`03001oogoo00Eoo`05001oogooOol00004Ool00`00Oomoo`0: Ool00`00Oomoo`05Ool01@00Oomoogoo0000_goo00<007ooOol00goo00<007ooOol01Goo00D007oo Oomoo`0001Moo`03001oogoo011oo`04001oogoo000FOol00`00Oomoo`0DOol004eoo`03001oogoo 00=oo`03001oogoo00Eoo`05001oogooOol00004Ool00`00Oomoo`02Ool00`00Oomoo`05Ool00`00 Oomoo`05Ool40030Ool00`00Oomoo`03Ool00`00Oomoo`05Ool01@00Oomoogoo00005goo00<007oo 000047oo00D007ooOomoo`0001Eoo`03001oogoo01Aoo`00ogoo[7oo003oOon/Ool00001\ \>"], "Body", Evaluatable->False, ImageSize->{427, 194}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}], Cell[TextData[{ "Figure 2. Flow of user events in ", StyleBox["draw.exe", "Output"], "." }], "Text"], Cell[TextData[{ "Because all reactions to events are defined in the kernel, the method \ definition is completely flexible. Methods can be defined during the \ execution of the ", StyleBox["MathLink", FontSlant->"Italic"], " program and, as shown in the previous example, making relationships \ between objects is very simple." }], "Text"], Cell[TextData[{ "Basically ", StyleBox["draw.exe", "Output"], " has two asynchronous inputs: one receives expressions from the kernel and \ the other receives user events. Although writing such multiple asynchronous \ input programs is not easy, our program uses the strategy of extending an \ existing program. The or", StyleBox["iginal source code of ", FontVariations->{"CompatibilityType"->0}], StyleBox["draw.exe", "Output"], " was generated from the ", StyleBox["MathLink", FontSlant->"Italic"], " template automatically and then the handling of user events was added to \ the source program. This simplifies the programming considerably." }], "Text"], Cell[TextData[{ "Currently, ", StyleBox["draw.exe", "Output"], " runs on Macintosh and Windows 95/NT4 environments. In general, it is \ difficult to write system independent graphics programs but using a QuickTime \ 3.0 layer for the graphics results in 90% of the source code being shared \ between Macintosh and Windows platforms." }], "Text"] }, Open ]], Cell[CellGroupData[{ Cell["2.4 Sending Expressions to the Kernel", "H3"], Cell[TextData[{ "The kernel evaluates expressions from ", StyleBox["$ParentLink", "Input"], ", which the front end uses. If the expressions from ", StyleBox["draw.exe", "Output"], " need to be evaluated, these expressions should be sent to ", StyleBox["$ParentLink", "Input"], ". For this reason, a relay program (", StyleBox["serializer.exe", "Output"], ") is created." }], "Text"], Cell[TextData[{ StyleBox["serializer.exe", "Output"], " relays all expressions between the front end and the kernel and is \ therefore transparent to the user. Furthermore ", StyleBox["serializer.exe", "Output"], " relays expressions from ", StyleBox["MathLink", FontSlant->"Italic"], " programs to the kernel. The kernel evaluates these expressions just as it \ does for expressions from the front end. Using ", StyleBox["serializer.exe", "Output"], " ", StyleBox["MathLink", FontSlant->"Italic"], " programs can send their expressions ", StyleBox["asynchronously", FontSlant->"Italic"], "." }], "Text"], Cell[GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgOol5000bOol20000?Goo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo00@002moo`03001oogoo04eoo`D0 005oo`0000=oo`00Ool0CWoo1@00Ool5000bOol20000?Goo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001o o`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001o o`00Ool007oo001oo`00Ool007oo00@002moo`03001oogoo04eoo`D0005oo`0000=oo`00Ool0CWoo 1@00Ool5000BOol00`00 Oomoo`0MOol20000?Goo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo00@002moo`03001oogoo04eoo`D0005oo`0000=oo`00Ool0CWoo1@003goo 10007goo03h007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo 001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo 001oo`00Ool007oo1@00;goo00<007ooOol0CGoo1@000Goo00000goo001oo`1>Ool5000Ool50007Ool=000NOol20000 ?Goo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo00@002moo`03001oogoo04eoo`D0005oo`0000=oo`00Ool0CWoo1@0017oo40007Woo03h007oo 001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo 001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo 1@00;goo00<007ooOol0CGoo1@000Goo00000goo001oo`1>Ool50002Oolb000017oo001oo`00Ool50001Ool00003Ool007oo04ioocP00004Ool007oo0005 Ool00`00Oomoo`05Ool200001Woo001oo`00Ool0009oo`80009oo`05001oogoo001oo`040003Ool2 000017oo001oo`0027oo00@007oo001ooc0000Aoo`03001oogoo04eoo`D0005oo`0000=oo`00Ool0 CWoo1@00Ool5000bOol0 1@00Ool007oo00001Woo0`002goo00<007ooOol017oo00@007ooOol001Ioo`04001oo`00Ool5000< Ool3000=Ool9000:Ool00`00Oomoo`08Ool01000Oomoo`000Woo00<007oo00000Woo00@007ooOol0 00=oo`06001oogoo001oo`000Woo00<007oo00000Woo00H007ooOol007oo0002Ool01P00Oomoo`00 Ool0009oo`06001oogoo001oo`000Woo00<007ooOol02goo1@000Goo00000goo001oo`09Ool01000 Oomoo`000Woo00<007ooOol00P0000Eoo`00Oomoo`00009oo`04001oogoo0002Ool20002Ool01000 Oomoo`000Woo00<007ooOol00P0000Aoo`00Oomoo`8000=oo`8000=oo`800003Ool007oo00]oo`D0 039oo`800004Ool007oo000cOol01P00Ool007oo001oo`@000aoo`H000Yoo`L000aoo`03001oogoo 00Qoo`09001oo`00Ool007oo001oo`00009oo`04001oogoo0003Ool01P00Oomoo`00Ool000Aoo`04 001oogoo0002Ool00`00Ool00002Ool01P00Oomoo`00Ool0009oo`03001oogoo009oo`04001oogoo 000=Ool50001Ool00003Ool007oo00Uoo`04001oogoo0002Ool00`00Ool00002Ool01000Oomoo`00 0goo00H007ooOol007oo0002Ool00`00Ool00002Ool01P00Oomoo`00Ool0009oo`06001oogoo001o o`000Woo00H007ooOol007oo0002Ool00`00Oomoo`0;Ool5000bOol01@00Ool007oo0000=Goo00@0 07oo001oo`D000]oo`T000Uoo`<000moo`03001oogoo00Qoo`07001oo`00Ool007oo00000Woo0`00 0Woo00D007ooOomoo`00009oo`03001oo`0000<00005Ool007ooOol00002Ool00`00Oomoo`030002 Ool00`00Ool00002Ool00`00Oomoo`03Ool3000=Ool50001Ool00003Ool007oo00Uoo`09001oo`00 Ool007oo001oo`00009oo`04001oogoo0003Ool01P00Oomoo`00Ool000Aoo`04001oogoo0002Ool0 0`00Ool00002Ool01P00Oomoo`00Ool0009oo`03001oogoo009oo`04001oogoo000=Ool5000bOol2 000017oo001oo`00Ool50001Ool00003Ool007oo00Uoo`8000=oo`800005Ool0 07ooOol00002Ool01000Oomoogoo0P0000Aoo`00Ool0009oo`06001oo`00001oo`000Woo00<007oo 00000Woo00H007ooOol007oo0002Ool01P00Oomoo`00Ool0009oo`03001oogoo00]oo`D0039oo`80 000YOol007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001o o`00Ool007oo001oo`00Ool007oo001oo`0e000BOol00`00Oomoo`08Ool00`00Oomoo`03Ool00`00 Oomoo`05Ool01@00Oomoogoo00005goo00<007ooOol067oo1@000Goo00000goo001oo`09Ool20003 Ool20002Ool20003Ool20002Ool00`00Ool00003Ool20002Ool01000Ool007oo0P000goo0P000goo 0`000goo0P000goo0P003Woo1@00Ool50015Ool5000?Ool3000@Ool3000eOol00`00 Oomoo`1=Ool00`00Oomoo`03Ool00003Ool007oo04ioo`D004Aoo`D000moo`@004Qoo`03001oogoo 04eoo`03001oogoo00=oo`0000=oo`00Ool0CWoo00<007ooOol0AGoo1@0047oo1000B7oo00<007oo Ool0CGoo00<007ooOol00goo00000goo001oo`1>Ool00`00Oomoo`14Ool5000AOol30019Ool00`00 Oomoo`1=Ool00`00Oomoo`03Ool00003Ool007oo04ioo`03001oogoo04=oo`D0015oo`@004Uoo`03 001oogoo04eoo`03001oogoo00=oo`0000=oo`00Ool0CWoo00<007ooOol0@Woo1@004Woo1000BGoo 00<007ooOol0CGoo00<007ooOol00goo00000goo001oo`1>Ool00`00Oomoo`11Ool5000BOol4001: Ool00`00Oomoo`1=Ool00`00Oomoo`03Ool00003Ool007oo04ioo`03001oogoo041oo`D001=oo`@0 04Yooe4000Eoo`0000=oo`00Ool0CWoo00<007ooOol0?goo1@0057oo0`00XGoo00000goo0000001? 0011Ool4000DOol4002QOol0099oo`@001Eoo`@00:5oo`00TGoo1@005Goo0`00XWoo002@Ool5000E Ool4002ROol008moo`D001Ioo`@00:9oo`00SWoo1@005Woo1000Xgoo002=Ool5000GOol4002SOol0 08aoo`D001Qoo`<00:Aoo`00Rgoo1@0067oo1000Y7oo002:Ool5000IOol4002TOol008Uoo`D001Uo o`@00:Eoo`00R7oo1@006Woo1000YGoo0027Ool5000KOol3002VOol008Ioo`D001]oo`@00:Ioo`00 QWoo100077oo1000YWoo0025Ool4000MOol3002WOol008Aoo`D001aoo`@00:Moo`00Pgoo1@007Goo 1000Ygoo0022Ool5000MOol4002XOol0085oo`D001ioo`@00:Qoo`00P7oo1@007goo0`00ZGoo001o Ool5000OOol4002YOol007ioo`D0021oo`@00:Uoo`00OGoo1@008Goo0`00ZWoo001lOol5000QOol4 002ZOol007]oo`D0029oo`@00:Yoo`00NWoo1@008Woo1000Zgoo001jOol4000SOol4002[Ool007Uo o`@002Aoo`<00:aoo`00N7oo1@008goo1000[7oo001gOol5000TOol4002/Ool007Ioo`D000Mood00 08ioo`00MGoo1@0027oo@000SWoo001dOol50009Oom0002>Ool007=oo`D000Yood0008ioo`00LWoo 1@002goo@000SWoo001aOol5000Ool0071oo`D000Yood<008ioo`00Kgoo1@002goo03h0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool007oo001oo`00Ool0 07oo1@00SWoo001^Ool5000Ool20000 2Woo001oo`00Ool007oo001oo`009goo00`007oo001oo`00Ool007oo001oo`00Ool4002>Ool006ao o`@000moo`0=001oo`00Ool007oo001oo`00Ool007oo000047oo0P005Goo00X007oo001oo`00Ool0 07oo001oo`D008ioo`00Jgoo1@003goo0P0000Yoo`00Ool007oo001oo`00Ool0011oo`04001oogoo 000COol03000Ool007oo001oo`00Ool007oo001oo`@008ioo`00JWoo1@0047oo00d007oo001oo`00 Ool007oo001oo`00Ool00002Ool00`00Oomoo`02Ool01000Oomoogoo0P000goo0`0000=oo`00Ool0 0Woo0P0000Eoo`00001oo`00009oo`03001oogoo00=oo`0:001oo`00Ool007oo001oo`00Ool5002> Ool006Uoo`D0015oo`80000:Ool007oo001oo`00Ool007oo0003Ool00`00Oomoo`02Ool01000Oomo o`000Woo00<007oo00000Woo00<007oo00000Woo00P007ooOol007oo001oo`000Woo00<007ooOol0 0Woo00`007oo001oo`00Ool007oo001oo`00Ool4002>Ool006Qoo`D0019oo`0=001oo`00Ool007oo 001oo`00Ool007oo00000Woo00<007ooOol00Woo00@007ooOol0009oo`03001oo`00009oo`03001o o`0000=oo`<00004Ool007oo0002Ool00`00Oomoo`03Ool02P00Ool007oo001oo`00Ool007oo1@00 SWoo001WOol5000COol200002Woo001oo`00Ool007oo001oo`000goo0`000Woo0P0000Moo`00Oomo o`00Ool00002Ool01P00Ool00000Ool0009oo`05001oo`00Ool00002Ool00`00Oomoo`02Ool03000 Ool007oo001oo`00Ool007oo001oo`@008ioo`00IWoo1@0057oo00d007oo001oo`00Ool007oo001o o`00Ool00002Ool02@00Oomoo`00Ool007oo001oo`020003Ool300001Goo001oo`00Ool00P000Woo 0P0000=oo`0000001Woo00X007oo001oo`00Ool007oo001oo`D008ioo`00IGoo1@005Goo0P0000Yo o`00Ool007oo001oo`00Ool000=oo`04001oogoo000POol03000Ool007oo001oo`00Ool007oo001o o`@008ioo`00I7oo1@005Woo00d007oo001oo`00Ool007oo001oo`00Ool00002Ool3000ROol02P00 Ool007oo001oo`00Ool007oo1@00SWoo001SOol5000GOol200002Woo001oo`00Ool007oo001oo`00 9goo00`007oo001oo`00Ool007oo001oo`00Ool4002>Ool003Aood0000]oo`0=001oo`00Ool007oo 001oo`00Ool007oo00009goo00X007oo001oo`00Ool007oo001oo`D008ioo`00=7oo@0002goo0P00 00Yoo`00Ool007oo001oo`00Ool0019oo`03001oogoo019oo`0<001oo`00Ool007oo001oo`00Ool0 07oo1000SWoo000dOom0000;Ool03@00Ool007oo001oo`00Ool007oo001oo`00015oo`03001oogoo 01=oo`0:001oo`00Ool007oo001oo`00Ool5002>Ool003Aood0000]oo`80000:Ool007oo001oo`00 Ool007oo0002Ool01000Oomoogoo0`000Woo00<007oo00000Woo00<007oo00000P000Woo00<007oo Ool00P0000Eoo`00Ool007oo00<000=oo`0<001oo`00Ool007oo001oo`00Ool007oo1000SWoo000d Oom0000;Ool03`00Ool007oo001oo`00Ool007oo001oo`00Ool00002Ool00`00Oomoo`03Ool00`00 Ool00002Ool00`00Ool00002Ool01@00Ool007oo00000Woo00D007oo001oo`0000Moo`0:001oo`00 Ool007oo001oo`00Ool5002>Ool003Aood0000]oo`80000:Ool007oo001oo`00Ool007oo0002Ool0 0`00Oomoo`040002Ool00`00Ool00002Ool00`00Ool00002Ool00`00Ool00002Ool300000goo001o o`040003Ool03000Ool007oo001oo`00Ool007oo001oo`@008ioo`00 Ool0035oo`0=001oo`00Ool007oo001oo`00Ool007oo00003goo00@007ooOol001Aoo`0:001oo`00 Ool007oo001oo`00Ool5000;Ool03@00Ool007oo001oo`00Ool007oo001oo`0002Moo`0:001oo`00 Ool007oo001oo`00Ool5002>Ool0035oo`80000:Ool007oo001oo`00Ool007oo0003Ool00`00Oomo o`02Ool01000Oomoogoo0P000goo0`0000=oo`00Ool00Woo0P0000Eoo`00001oo`00009oo`03001o ogoo009oo`0<001oo`00Ool007oo001oo`00Ool007oo10002goo0P0000Yoo`00Ool007oo001oo`00 Ool002Moo`0<001oo`00Ool007oo001oo`00Ool007oo1000SWoo000aOol03@00Ool007oo001oo`00 Ool007oo001oo`00009oo`03001oogoo009oo`04001oogoo0002Ool00`00Ool00002Ool00`00Ool0 0002Ool02000Oomoo`00Ool007oo0002Ool00`00Oomoo`03Ool02P00Ool007oo001oo`00Ool007oo 1@002goo00`007oo001oo`00Ool007oo001oo`00Ool20002Ool01@00Oomoo`00Ool00P0000Ioo`00 Ool007oo0002Ool00`00Ool00003000017oo001oo`000Woo00<007oo00000Woo00h007ooOomoo`00 Ool007oo001oo`00Ool007oo1@00SWoo000aOol200002Woo001oo`00Ool007oo001oo`000goo00<0 07ooOol00Woo00@007ooOol0009oo`03001oo`00009oo`03001oo`0000=oo`<00004Ool007oo0002 Ool00`00Oomoo`02Ool03000Ool007oo001oo`00Ool007oo001oo`@000]oo`80000 Ool0035oo`0=001oo`00Ool007oo001oo`00Ool007oo00000Woo0`000Woo0P0000Moo`00Oomoo`00 Ool00002Ool01P00Ool00000Ool0009oo`05001oo`00Ool00002Ool00`00Oomoo`03Ool02P00Ool0 07oo001oo`00Ool007oo1@002goo00`007oo001oo`00Ool007oo001oo`00Ool200001goo001oo`00 Ool007oo00<00005Ool007ooOol00002Ool00`00Ool00004Ool00`00Ool00002Ool01000Ool00000 1Goo00X007oo001oo`00Ool007oo001oo`D008ioo`00"], "Body", Evaluatable->False, ImageSize->{336, 161}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}], Cell[TextData[{ "Figure 3. The relationship between ", StyleBox["serializer.exe", "Output"], ", ", StyleBox["MathLink", FontSlant->"Italic"], " programs, the kernel, and the front end." }], "Body"], Cell[TextData[{ StyleBox["serializer.exe", "Output"], " is a ", StyleBox["MathLink", FontSlant->"Italic"], " program which does the following:" }], "Text"], Cell["send expressions from multiple links to the kernel;", "LI"], Cell["manages the expression between each link and the kernel;", "LI"], Cell["handles the interrupt and requests from the links.", "LI"], Cell[TextData[{ StyleBox["serializer.exe", "Output"], " enables the sharing of a kernel with multiple front ends. This makes it \ possible to use special front ends in conjunction with the notebook front \ end. For example, an image processing front end[4], an interactive graphics \ front end, or a combination of both, will work with the current front end and \ extend its capabilities." }], "Text"], Cell[TextData[{ "Also, connecting one ", StyleBox["serializer.exe", "Output"], " to another ", StyleBox["serializer.exe", "Output"], " makes it possible to exchange expressions between ", StyleBox["Mathematica", FontSlant->"Italic"], " sessions. This connection enables the exchange of notebook cells between \ two or more front ends which is useful for developing distance education \ tools[1,5]." }], "Text"], Cell[TextData[{ StyleBox["Note that ", "Body"], StyleBox["serializer.exe", "Output"], " does increase the time taken for data transfer. Transmission of packets \ from the kernel to the front end for a typical ", StyleBox["Mathematica", FontSlant->"Italic"], " 3D graphics (~760kbytes) took 10 seconds using a local kernel and 16 \ seconds with ", StyleBox["serializer.exe", "Output"], StyleBox[" \[LongDash]", "Body"], " a 60% increase. However, there is no significant slow down for most \ practical uses because, in general, packets are usually smaller than 3D \ output." }], "Text"], Cell[TextData[{ StyleBox["serializer.exe", "Output"], " was built by modifying a ", StyleBox["MathLink", FontSlant->"Italic"], " template program. Currently, Macintosh, Windows95/NT4, and HP-UX versions \ exist." }], "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["3. Application of draw.exe", "H2"], Cell[TextData[{ "One advantage of ", StyleBox["draw.exe", "Output"], " is the use of kernel evaluation for the reaction to the user events. Such \ event reaction can be modified ", StyleBox["dynamically", FontSlant->"Italic"], ". There are interactive geometry programs such as Cabri, but the ability \ of these programs to define new geometrical relationships is limited. In \ contrast, using ", StyleBox["draw.exe", "Output"], " one can define ", StyleBox["arbitrary", FontSlant->"Italic"], " relationships between geometrical objects as ", StyleBox["Mathematica", FontSlant->"Italic"], " functions. Hence ", StyleBox["draw.exe", "Output"], " is not restricted to geometry but has a wide range of applications. " }], "Text"], Cell[TextData[{ "In the following example we show dynamical curve fitting. ", StyleBox["data", FontFamily->"Courier", FontWeight->"Bold"], " is a list of 50 point objects which appear at random locations in the \ window ", StyleBox["win2", "Input"], ". And we create a text object, ", StyleBox["t", "Input"], ", for displaying the form of the function." }], "Text"], Cell[BoxData[ \(\(data\ = Table[New[PointObject, win2, PointObjectPosition \[Rule] {Random[Integer, {50, 350}], Random[Integer, {50, 350}]}], {50}];\)\)], "Input"], Cell[BoxData[ \(t = New[TextObject, win2, \ TextObjectFrame -> False, TextObjectRectangle -> {{10, 10}, {400, 50}}]\)], "Input"], Cell[TextData[{ StyleBox["fitpoints", "Input"], " finds the third-order polynomial best-fit curve using ", StyleBox["Fit", "Input"], ", displays the function in a text object, and returns a list of 100 points \ which lie on this curve." }], "Text", CellTags->{"fitpoints", "polynomial best-fit", "Fit"}], Cell[BoxData[ \(fitpoints[pts_] := \[IndentingNewLine]Module[ {f}, \[IndentingNewLine]f = Fit[Map[#[getposition] &, pts], {1, x, x\^2, x\^3}, x]; \[IndentingNewLine]t[settext, ToString[f]]; \[IndentingNewLine]Table[ {x, f} /. \[InvisibleSpace]x \[Rule] i, {i, 1, 400, 4}]]\)], "Input"], Cell[TextData[{ "We create a new curve object ", StyleBox["fitcurve", "Input"], ". The best-fit curve appears in the window." }], "Text"], Cell[BoxData[ \(fitcurve = New[CurveObject, win2, fitpoints[data]]\)], "Input"], Cell[TextData[{ "After defining the relationship between the data points, ", StyleBox["data", "Input"], ", and the ", StyleBox["fitcurve", "Input"], " by the following expression, " }], "Text", Evaluatable->False, AspectRatioFixed->True, CellTags->"relationship definition"], Cell[BoxData[ \(\(Map[ \((#[move, {x_, y_}] := \((fitcurve[setdata, fitpoints[data]]; #[setposition, {x, y}])\))\) &, data];\)\)], "Input"], Cell[TextData[{ "then moving ", StyleBox["any", FontSlant->"Italic"], " point causes the best-fit to be recalculated and displayed. ", StyleBox["Map", "Input"], " allows us to define this relationship for all point objects at once." }], "Text", Evaluatable->False, AspectRatioFixed->True, CellTags->"Map"], Cell[GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgFLiogoo>goo00=W>E[F00000@0000001000OomW>Dico`00>P0000=oofLiF]H00P000000 1@00OomW>Dic0000ogoo>7oo00@007ooIcUJeP80000000D007ooIcU>L`000?moocQoo`04001oofLi F]H200000005001oofLiCW<0003oOolhOol01000OomW>E[F0P0000001@00OomW>Dic0000ogoo>7oo 00@007ooIcUJeP80000000D007ooIcU>L`000?moocQoo`04001oofLiF]H200000005001oofLiCW<0 003oOolhOol01000OomW>E[F0P0000001@00OomW>Dic0000ogoo>7oo00@007ooIcUJeP80000000D0 07ooIcU>L`000?moocQoo`04001oofLiF]H200000005001oofLiCW<0003BOol0148@00000000HGoo 00@007ooIcUJeP80000000D007ooIcU>L`000=9oo`04@Q000000001QOol01000OomW>E[F0P000000 1@00OomW>Dic0000dWoo00A240000000065oo`04001oofLiF]H200000005001oofLiCW<0003BOol0 148@00000000HGoo00@007ooIcUJeP80000000D007ooIcU>L`00079oo`<00003@Q1oogoo06Qoo`<0 05Aoo`04001oofLiF]H200000005001oofLiCW<0001bOol300000d8@Oomoo`1XOol3001DOol01000 OomW>E[F0P0000001@00OomW>Dic0000L7oo1@0000=247ooOol0J7oo0`00E7oo00@007ooIcUJeP80 000000D007ooIcU>L`00071oo`<00E[F0P0000001@00OomW>Dic0000L7oo0`00a7oo00@007ooIcUJeP80000000D007oo IcU>L`000?moocQoo`04001oofLiF]H200000005001oofLiCW<0003oOolhOol01000OomW>E[F0P00 00001@00OomW>Dic0000ogoo>7oo00@007ooIcUJeP80000000D007ooIcU>L`0006ioo`<00E[F0P0000001@00OomW>Dic 0000KWoo0`00aWoo00@007ooIcUJeP80000000D007ooIcU>L`000?moocQoo`04001oofLiF]H20000 0005001oofLiCW<0003oOolhOol01000OomW>E[F0P0000001@00OomW>Dic0000ogoo>7oo00@007oo IcUJeP80000000D007ooIcU>L`000?moocQoo`04001oofLiF]H200000005001oofLiCW<0003oOolh Ool01000OomW>E[F0P0000001@00OomW>Dic0000P7oo00A24000000006Eoo`A244Yoo`04001oofLi F]H200000005001oofLiCW<00020Ool0148@00000000IGoo1000BWoo00@007ooIcUJeP80000000D0 07ooIcU>L`00081oo`04@Q000000001UOol4001:Ool01000OomW>E[F0P0000001@00OomW>Dic0000 jGoo1000BWoo00@007ooIcUJeP80000000D007ooIcU>L`000?Aoo`@003moo`04001oofLiF]H20000 0005001oofLiCW<0003dOol4000oOol01000OomW>E[F0P0000001@00OomW>Dic0000m7oo1000?goo 00@007ooIcUJeP80000000D007ooIcU>L`00089oo`@00;5oo`04001oofLiF]H200000005001oofLi CW<00022Ool4002aOol01000OomW>E[F0P0000001@00OomW>Dic0000PWoo1000/Goo00@007ooIcUJ eP80000000D007ooIcU>L`00089oo`@00;5oo`04001oofLiF]H200000005001oofLiCW<0002@Ool3 @Q2TOol01000OomW>E[F0P0000001@00OomW>Dic0000T7oo0`00Y7oo00@007ooIcUJeP80000000D0 07ooIcU>L`00091oo`<00:Aoo`04001oofLiF]H200000005001oofLiCW<0002@Ool3002TOol01000 OomW>E[F0P0000001@00OomW>Dic0000ogoo>7oo00@007ooIcUJeP80000000D007ooIcU>L`000?mo ocQoo`04001oofLiF]H200000005001oofLiCW<0002@Ool3002TOol01000OomW>E[F0P0000001@00 OomW>Dic0000T7oo0`00Y7oo00@007ooIcUJeP80000000D007ooIcU>L`00091oo`<00:Aoo`04001o ofLiF]H200000005001oofLiCW<0002@Ool3002TOol01000OomW>E[F0P0000001@00OomW>Dic0000 ogoo>7oo00@007ooIcUJeP80000000D007ooIcU>L`000?moocMoo`05@Q0007ooIcUJeP0200000005 001oofLiCW<0003oOolgOol200000gooIcUJeP0200000005001oofLiCW<0003oOolfOol01P00Ool0 07ooIcUJeP80000000D007ooIcU>L`000?moocEoo`07@Q1oogoo001oofLiF]H00P0000001@00OomW >Dic0000ogoo=Goo00M247ooOol007ooIcUJeP0200000005001oofLiCW<0003oOoldOol0248@HaQo ogoo001oofLiF]H200000005001oofLiCW<0003oOoldOol02000Oomoogoo001oofLiF]H200000005 001oofLiCW<0003oOolcOol00`00Oomoo`02Ool01000OomW>E[F0P0000001@00OomW>Dic0000ogoo L`000?mooc9oo`03001oogoo00=o o`04001oofLiF]H200000005001oofLiCW<0003oOol`Ool00fE[F0P00 00001@00OomW>Dic0000ogoo<7oo00=247ooOol01Goo00@007ooIcUJeP80000000D007ooIcU>L`00 0?moobmoo`03001oogoo00Ioo`04001oofLiF]H200000005001oofLiCW<0003oOol_Ool00`00Oomo o`06Ool01000OomW>E[F0P0000001@00OomW>Dic0000ogoo;Woo00<007ooOol01goo00@007ooIcUJ eP80000000D007ooIcU>L`000?moobeoo`03001oogoo00Qoo`04001oofLiF]H200000005001oofLi CW<0003oOol/Ool2@Q0:Ool01000OomW>E[F0P0000001@00OomW>Dic0000ogoo:goo00<007ooOol0 2Woo00@007ooIcUJeP80000000D007ooIcU>L`000?moobYoo`03@Q1oogoo00]oo`04001oofLiF]H2 00000005001oofLiCW<0003oOolZOol00d8@Oomoo`0;Ool01000OomW>E[F0P0000001@00OomW>Dic 0000ogoo:Goo00<007ooOol037oo00@007ooIcUJeP80000000D007ooIcU>L`000?moobQoo`03001o ogoo00eoo`04001oofLiF]H200000005001oofLiCW<00037Ool3001LOol00`00Oomoo`0>Ool01000 OomW>E[F0P0000001@00OomW>Dic0000agoo0`00Fgoo00<007ooOol03goo00@007ooIcUJeP800000 00D007ooIcU>L`000E[F0P0000001@00OomW>Dic0000ogoo97oo00<0 07ooOol04Goo00@007ooIcUJeP80000000D007ooIcU>L`000?moob9oo`9241Aoo`04001oofLiF]H2 00000005001oofLiCW<0003oOolQOol00`00Oomoo`0DOol01000OomW>E[F0P0000001@00OomW>Dic 0000IGoo00A2400000000;Ioo`03001oogoo01Eoo`04001oofLiF]H200000005001oofLiCW<0001U Ool0148@0000000027oo1000ZGoo00=247ooOol05Woo00@007ooIcUJeP80000000D007ooIcU>L`00 06Eoo`04@Q0000000008Ool4002YOol00d8@Oomoo`0FOol01000OomW>E[F0P0000001@00OomW>Dic 0000IGoo00AS648@@Q1240Qoo`@00:Moo`9240Eoo`=2415oo`04001oofLiF]H200000005001oofLi CW<0003oOolLOol00`00Oomoo`05Ool3000AOol01000OomW>E[F0P0000001@00OomW>Dic0000ogoo 6goo00<007ooOol01Woo0`004Goo00@007ooIcUJeP80000000D007ooIcU>L`000?mooaYoo`03001o ogoo00Moo`<0015oo`04001oofLiF]H200000005001oofLiCW<0003oOolIOol00`00Oomoo`0LOol0 1000OomW>E[F0P0000001@00OomW>Dic0000ogoo67oo00<007ooOol07Goo00@007ooIcUJeP800000 00D007ooIcU>L`000?mooaEoo`03HaQ2448@021oo`04001oofLiF]H200000005001oofLiCW<00020 Ool0148@00000000T7oo00=247ooOol087oo00@007ooIcUJeP80000000D007ooIcU>L`00081oo`04 @Q000000002>Ool2000SOol01000OomW>E[F0P0000001@00OomW>Dic0000P7oo00A24000000008eo o`03001oogoo02=oo`04001oofLiF]H200000005001oofLiCW<00020Ool0148@00000000S7oo00<0 07ooOol097oo00@007ooIcUJeP80000000D007ooIcU>L`000?moo`moo`9242Moo`04001oofLiF]H2 00000005001oofLiCW<0003oOol>Ool00`00Oomoo`0WOol01000OomW>E[F0P0000001@00OomW>Dic 0000ogoo37oo0P00:Woo00@007ooIcUJeP80000000D007ooIcU>L`000?moo`Yoo`03@Q0007oo02]o o`04001oofLiF]H200000005001oofLiCW<0002_Ool3001FOol00`00@Q1oo`0/Ool01000OomW>E[F 0P0000001@00OomW>Dic0000TGoo00AS648@@Q1241Yoo`<0059oo`A242moo`04001oofLiF]H20000 0005001oofLiCW<0001FOol4000gOol0148@000000006Woo0`00DGoo00<007ooOol0L`0005Ioo`@003Moo`04@Q000000000JOol3001?Ool2000dOol01000 OomW>E[F0P0000001@00OomW>Dic0000EWoo1000=goo00A24000000001Yoo`<004eoo`8003Ioo`04 001oofLiF]H200000005001oofLiCW<0001:Ool0148@0000000027oo1000EGoo0`00C7oo00<007oo Ool0=Woo00@007ooIcUJeP80000000D007ooIcU>L`0004Yoo`04@Q000000000mOol3000QOol3001: Ool2000iOol01000OomW>E[F0P0000001@00OomW>Dic0000=Goo10004Goo00A24000000003eoo`<0 06Uoo`E243]oo`04001oofLiF]H200000005001oofLiCW<0000eOol4001BOol3001WOol20010Ool0 1000OomW>E[F0P0000001@00OomW>Dic0000=Goo1000^Woo0P00@Woo00@007ooIcUJeP80000000D0 07ooIcU>L`000>moo`@004Aoo`04001oofLiF]H200000005001oofLiCW<0003XOol00d8@00000004 0018Ool01000OomW>E[F0P0000001@00OomW>Dic0000TGooL`0008Yoo`L003=ooaL005aoo`04001oofLiF]H200000005001o ofLiCW<00026Ool0148@00000000[Goo00@007ooIcUJeP80000000D007ooIcU>L`0008=oo`<00003 @Q1oogoo0:ioo`04001oofLiF]H200000005001oofLiCW<00020Ool3002dOol01000OomW>E[F0P00 00001@00OomW>Dic0000O7oo1000]goo00@007ooIcUJeP80000000D007ooIcU>L`0007Qoo`A24;]o o`04001oofLiF]H200000005001oofLiCW<0001fOol2002oOol01000OomW>E[F0P0000001@00OomW >Dic0000MGoo00<007ooOol0_goo00@007ooIcUJeP80000000D007ooIcU>L`00079oo`<00<9oo`04 001oofLiF]H200000005001oofLiCW<0001`Ool20035Ool01000OomW>E[F0P0000001@00OomW>Dic 0000KWoo0T8@17oo0`000T8@_Woo00@007ooIcUJeP80000000D007ooIcU>L`0006aoo`8000Ioo`D0 0;ioo`04001oofLiF]H200000005001oofLiCW<0001ZOol00d8@001oo`07Ool5002nOol01000OomW >E[F0P0000001@00OomW>Dic0000JGoo00<0048@Ool02Goo00A2400000000;ioo`04001oofLiF]H2 00000005001oofLiCW<0001WOol2003>Ool01000OomW>E[F0P0000001@00OomW>Dic0000IGoo00=2 4000Ool0cgoo00@007ooIcUJeP80000000D007ooIcU>L`0006Aoo`03@Q1S67oo0=1oo`04001oofLi F]H200000005001oofLiCW<0001ROol2003COol01000OomW>E[F0P0000001@00OomW>Dic0000HGoo 00<007ooOol0dgoo00@007ooIcUJeP80000000D007ooIcU>L`00061oo`03001oogoo0=Aoo`04001o ofLiF]H200000005001oofLiCW<0001OOol00`00Oomoo`3EOol01000OomW>E[F0P0000001@00OomW >Dic0000GGoo0T8@f7oo00@007ooIcUJeP80000000D007ooIcU>L`0005aoo`03001oogoo0=Qoo`04 001oofLiF]H200000005001oofLiCW<0001KOol00`00Oomoo`2XOol2000_Ool01000OomW>E[F0P00 00001@00OomW>Dic0000FWoo00=247ooOol00goo1000XWoo0P00;goo00@007ooIcUJeP80000000D0 07ooIcU>L`0005Yoo`03@Q1oogoo00=oo`@009ioo`03001oogoo0080031oo`04001oofLiF]H20000 0005001oofLiCW<0001IOol00`00Oomoo`04Ool4002NOol4000aOol01000OomW>E[F0P0000001@00 OomW>Dic0000>goo148@00=S67ooOol05Goo0T8@1goo148@D7oo0`0000=247ooOol0B7oo1000L`0003]oo`@00003@Q1oogoo01Aoo`03001oogoo05]oo`<0 0003@Q1oogoo04Qoo`L002ioo`04001oofLiF]H200000005001oofLiCW<0000kOol400000d8@Oomo o`0COol00d8@Oomoo`1LOol300000d8@Oomoo`18Ool6000_Ool01000OomW>E[F0P0000001@00OomW >Dic0000>goo100000=247ooOol04goo00=247ooOol0ZWoo1@00<7oo00@007ooIcUJeP80000000D0 07ooIcU>L`0005Aoo`03001oogoo0:]oo`@0035oo`04001oofLiF]H200000005001oofLiCW<0001B Ool2@Q1MOol016L`00055oo`03 001oogoo05eoo`04@Q000000001=Ool2000cOol01000OomW>E[F0P0000001@00OomW>Dic0000D7oo 00<007ooOol0GWoo00A24000000003Aoo`@001Eoo`03001oogoo039oo`04001oofLiF]H200000005 001oofLiCW<0001?Ool00d8@Oomoo`0ZOol4000VOol0148@000000001goo00A24000000003Aoo`@0 04Yoo`04001oofLiF]H200000005001oofLiCW<0001?Ool00d8@Oomoo`0ZOol4000VOol0148@0000 0000?goo10004goo0`0000=247ooOol0L`0004ioo`03 @Q1S67oo02]oo`@002Ioo`04@Q000000000oOol4@Q0COol300000d8@Oomoo`0aOol01000OomW>E[F 0P0000001@00OomW>Dic0000CGoo00<007ooOol0/7oo0`0000=247ooOol0L`0004aoo`03001oogoo09ioo`<004Moo`04001oofLiF]H200000005001oofLi CW<0001;Ool00`00Oomoo`2OOol30017Ool01000OomW>E[F0P0000001@00OomW>Dic0000Bgoo00<0 07ooOol0NWoo10008Goo0`00Agoo00@007ooIcUJeP80000000D007ooIcU>L`0004Yoo`03@Q1oogoo 07]oo`@0025oo`<004Moo`04001oofLiF]H200000005001oofLiCW<00019Ool00d8@HaQoo`1lOol4 001[Ool01000OomW>E[F0P0000001@00OomW>Dic0000B7oo00<007ooOol0k7oo00@007ooIcUJeP80 000000D007ooIcU>L`0004Qoo`03001oogoo0>aoo`04001oofLiF]H200000005001oofLiCW<00017 Ool00`00Oomoo`3]Ool01000OomW>E[F0P0000001@00OomW>Dic0000AWoo00<007ooOol0kWoo00@0 07ooIcUJeP80000000D007ooIcU>L`0004Aoo`03HaQ247oo0?1oo`04001oofLiF]H200000005001o ofLiCW<00014Ool00d8@Oomoo`3`Ool01000OomW>E[F0P0000001@00OomW>Dic0000A7oo00=247oo Ool0l7oo00@007ooIcUJeP80000000D007ooIcU>L`0004=oo`03001oogoo0?5oo`04001oofLiF]H2 00000005001oofLiCW<00013Ool00`00Oomoo`3aOol01000OomW>E[F0P0000001@00OomW>Dic0000 @Woo00<007ooOol0lWoo00@007ooIcUJeP80000000D007ooIcU>L`00045oo`03001oogoo0?=oo`04 001oofLiF]H200000005001oofLiCW<00010Ool00`00Oomoo`3dOol01000OomW>E[F0P0000001@00 OomW>Dic0000?goo00=247ooOol0mGoo00@007ooIcUJeP80000000D007ooIcU>L`0003moo`03@Q1o ogoo0?Eoo`04001oofLiF]H200000005001oofLiCW<0000nOol00`00Oomoo`3fOol01000OomW>E[F 0P0000001@00OomW>Dic0000?Goo0T8@n7oo00@007ooIcUJeP80000000D007ooIcU>L`0003eoo`03 001oogoo0?Moo`04001oofLiF]H200000005001oofLiCW<0000lOol00`00Oomoo`3hOol01000OomW >E[F0P0000001@00OomW>Dic0000>goo00<007ooOol0nGoo00@007ooIcUJeP80000000D007ooIcU> L`0003]oo`03001oogoo0?Uoo`04001oofLiF]H200000005001oofLiCW<0000jOol00`00Oomoo`3j Ool01000OomW>E[F0P0000001@00OomW>Dic0000>Goo00=S648@Ool0ngoo00@007ooIcUJeP800000 00D007ooIcU>L`0003Uoo`03@Q1oogoo0?]oo`04001oofLiF]H200000005001oofLiCW<0000iOol0 0d8@Oomoo`3kOol01000OomW>E[F0P0000001@00OomW>Dic0000>7oo00<007ooOol0o7oo00@007oo IcUJeP80000000D007ooIcU>L`0003Moo`03001oogoo0?eoo`04001oofLiF]H200000005001oofLi CW<0000fOol2@Q3oOol01000OomW>E[F0P0000001@00OomW>Dic0000=Woo00<007ooOol0oWoo00@0 07ooIcUJeP80000000D007ooIcU>L`0003Eoo`03001oogoo0?moo`04001oofLiF]H200000005001o ofLiCW<0000dOol00d8@Oomoo`3oOol1Ool01000OomW>E[F0P0000001@00OomW>Dic0000=7oo00=2 47ooOol0ogoo0Goo00@007ooIcUJeP80000000D007ooIcU>L`0003Aoo`03@Q1oogoo07Qoo`<008Eo o`04001oofLiF]H200000005001oofLiCW<0000cOol00`00Oomoo`1iOol30025Ool01000OomW>E[F 0P0000001@00OomW>Dic0000L`00039oo`03001oogoo0?moo`=oo`04001oofLiF]H200000005001oofLiCW<0000bOol00`00 Oomoo`1ROol4002LOol01000OomW>E[F0P0000001@00OomW>Dic0000L`00031oo`9246Eoo`@009aoo`04001oofLiF]H20000 0005001oofLiCW<0000`Ool00`00Oomoo`3oOol5Ool01000OomW>E[F0P0000001@00OomW>Dic0000 ;goo00<007ooOol0ogoo1Woo00@007ooIcUJeP80000000D007ooIcU>L`0002moo`03001oogoo0?mo o`Ioo`04001oofLiF]H200000005001oofLiCW<0000^Ool00d8@Oomoo`3oOol7Ool01000OomW>E[F 0P0000001@00OomW>Dic0000;Woo00=247ooOol09Woo0`0000=247ooOol0fWoo00@007ooIcUJeP80 000000D007ooIcU>L`0002eoo`03001oogoo02Moo`<00003@Q1oogoo0=Yoo`04001oofLiF]H20000 0005001oofLiCW<0000]Ool00`00Oomoo`0WOol300000d8@Oomoo`3JOol01000OomW>E[F0P000000 1@00OomW>Dic0000;7oo00<007ooOol03Woo0`00mgoo00@007ooIcUJeP80000000D007ooIcU>L`00 02aoo`03001oogoo00ioo`<00?Moo`04001oofLiF]H200000005001oofLiCW<0000[Ool00`00Oomo o`0?Ool3003gOol01000OomW>E[F0P0000001@00OomW>Dic0000:Woo0T8@4Goo0d8@00Eood8@@Q12 46E[F0P0000001@00OomW>Dic0000:Goo00=247oo Ool05Goo0`0000=247ooOol057oo10004Goo0`00;Woo0`00Tgoo00@007ooIcUJeP80000000D007oo IcU>L`0002Uoo`03@Q1oogoo01Eoo`<00003@Q1oogoo01Aoo`@0015oo`<002ioo`<009=oo`04001o ofLiF]H200000005001oofLiCW<0000YOol00d8@Oomoo`0_Ool4000AOol3000^Ool3002COol01000 OomW>E[F0P0000001@00OomW>Dic0000:7oo00=246L`0002Qoo`03001oogoo029oo`<000Uoo`<000Ioo`<00003 @Q1oogoo031oo`<00003@Q1oogoo09Uoo`04001oofLiF]H200000005001oofLiCW<0000XOol00`00 Oomoo`0ROol30009Ool30006Ool300000d8@Oomoo`0`Ool300000d8@Oomoo`2IOol01000OomW>E[F 0P0000001@00OomW>Dic00009goo00<007ooOol0;goo0`001Woo0`0000=247ooOol0<7oo0`0000=2 47ooOol0?goo0`00Egoo00@007ooIcUJeP80000000D007ooIcU>L`0002Moo`03001oogoo02moo`<0 00Ioo`<00003@Q1oogoo07Eoo`<005Moo`04001oofLiF]H200000005001oofLiCW<0000VOol00`00 Oomoo`2dOol3001GOol01000OomW>E[F0P0000001@00OomW>Dic00009Goo0T8@]Woo0d8@Egoo00@0 07ooIcUJeP80000000D007ooIcU>L`0002Eoo`03001oogoo0?mooa1oo`04001oofLiF]H200000005 001oofLiCW<0000TOol00`00Oomoo`0MOol3003`Ool01000OomW>E[F0P0000001@00OomW>Dic0000 97oo00<007ooOol07Goo0`00l7oo00@007ooIcUJeP80000000D007ooIcU>L`0002Aoo`03001oogoo 01eoo`<00?1oo`04001oofLiF]H200000005001oofLiCW<0000SOol00d8@Oomoo`0NOol3@Q3`Ool0 1000OomW>E[F0P0000001@00OomW>Dic00008goo00=247ooOol0ogoo4Woo00@007ooIcUJeP800000 00D007ooIcU>L`000?moocQoo`04001oofLiF]H200000005001oofLiCW<0003oOolhOol01000OomW >E[F0P0000001@00OomW>Dic0000ogoo>7oo00@007ooIcUJeP80000000D007ooIcU>L`000?moocQo o`04001oofLiF]H200000005001oofLiCW<0003oOolhOol01000OomW>E[F0P0000001@00OomW>Dic 0000ogoo>7oo00@007ooIcUJeP80000000D007ooIcU>L`000?moocQoo`04001oofLiF]H200000005 001oofLiCW<0003oOolhOol01000OomW>E[F0P0000001@00OomW>Dic0000ogoo>7oo00@007ooIcUJ eP80000000D007ooIcU>L`000?moocQoo`04001oofLiF]H200000005001oofLiCW<0003oOolhOol0 1000OomW>E[F0P0000001@00OomW>Dic0000ogoo>7oo00@007ooIcUJeP80000000D007ooIcU>L`00 0?moocQoo`04001oofLiF]H200000005001oofLiCW<0003oOolhOol01000OomW>E[F0P0000001@00 OomW>Dic00004Goo0T8@00=S67ooOol00d8@0goo00A247ooOomoo`=2409oo`=240=oo`=24003HaQ2 448@009240Moo`03@Q1oogoo00Moo`9240Aoo`03HaQoogoo009oo`9240=oo`03@Q1oogoo009oo`04 @Q1S67ooOol2@Q000fE[F0P0000001@00OomW>Dic 000047oo0`0000=247oo00000`001goo0`001Goo00D0048@Oomoo`0000Aoo`03001oogoo00Ioo`03 001oogoo00Moo`03@Q0007oo00Ioo`03001ood8@00Eoo`06@Q1oogoo001ood8@17oo00=247ooOol0 0`001goo00<007oo00004Goo00A247ooOol000Moo`03@Q1oo`0000=oo`03@Q1oogoo00<000=oo`03 001oo`0000=oo`04001oogooOol30005Ool00d8@Oomoo`04Ool00`00Ool0000=Ool00`00Oomoo`07 Ool00d8@Ool00007Ool00`00Ool00002Ool00`00Ool00002Ool00`00Ool00002Ool00`00Oom24004 Ool00d8@Ool00002Ool00`00Oomoo`02Ool00`00Oomoo`030002Ool40003Ool00`00Oomoo`05Ool0 0d8@Ool0000VOol01000OomW>E[F0P0000001@00OomW>Dic000047oo00<007ooOol00Woo00<007oo Ool01goo00D007ooOomood8@00@0009oo`05001oo`00Oom24003Ool00`00Oomoo`05Ool00`00Oomo o`09Ool00`00Oomoo`05Ool00`00@Q1oo`04Ool01d8@Oomoo`00Oom247oo00<00003@Q1oo`0000=o o`03@Q1oogoo00=oo`800003Ool00000011oo`04@Q1oogoo0007Ool00d8@Ool00003Ool0148@Oomo o`001Goo00<007oo00000goo00@007ooOol0009oo`03@Q1oo`0000<000Ioo`800003Ool0000000ao o`03001oogoo00Moo`03@Q1oo`0000Moo`03001oo`00009oo`03001oo`00009oo`03001oo`00009o o`05001ood8@Ool00002Ool0248@Oomoo`00Ool007oo0003Ool00d8@001oo`02Ool00`00@Q1oo`02 Ool00`00@Q1oo`02Ool00`00Oomoo`04Ool01000Ool000009Goo00@007ooIcUJeP80000000D007oo IcU>L`00015oo`03001oogoo009oo`03001oogoo00Ioo`06001oogooOom240001Woo0P0000=ood8@ Ool00Woo00<007ooOol03Woo00@007ooOol000Qoo`04001oogoo0002Ool0248@Oomoo`00Oom247oo 0004Ool01@00Oomoogoo@Q006Woo00A247ooOol000Moo`03@Q1oo`00009oo`03001247oo009oo`03 001oogoo009oo`03001oo`00009oo`80009oo`06001oogoo@Q1oo`0097oo00=247oo00001goo00<0 07oo00000Woo00<007oo00000Woo00<007oo00000Woo00D007oo@Q1oo`00009oo`04@Q1oogooOol2 00000goo001oo`02Ool00d8@001oo`02Ool00`00@Q1oo`02Ool00`00@Q1oo`02Ool00`00Oomoo`0] Ool01000OomW>E[F0P0000001@00OomW>Dic00004Woo00=246E[F0P0000001@00OomW>Dic0000ogoo>7oo00@0 07ooIcUJeP80000000D007ooIcU>L`000?moocQoo`04001oofLiF]H200000005001oofLiCW<0003o OolhOol01000OomW>E[F0P0000001@00OomW>Dic0000ogoo>7oo00@007ooIcUJeP80000000D007oo IcU>L`000;Moo`05HaP0048@@Q00001GOol4@Q0POol01000OomW>E[F0P0000001@00OomW>Dic0000 ^Goo00<007ooOol0FWoo00<007ooOol07Woo00@007ooIcUJeP80000000D007ooIcU>L`000;Yoo`03 001oogoo05Moo`03@Q0007oo021oo`04001oofLiF]H200000005001oofLiCW<0002gOol01D8@Oomo ogoo0000FWoo00<007ooOol07Woo00@007ooIcUJeP80000000D007ooIcU>L`000;Moo`05@Q1oogoo Ool0001GOol01000Oomoo`0087oo00@007ooIcUJeP80000000D007ooIcU>L`000;Qoo`<005Uoo`80 025oo`04001oofLiF]H200000005001oofLiCW<0003oOolhOol01000OomW>E[F0P0000001@00OomW >Dic0000ogoo>7oo00@007ooIcUJeP80000000D007ooIcU>L`000?moocQoo`04001oofLiF]H20000 0005001oofLiCW<0000EOol00`00Oomoo`3oOolPOol01000OomW>E[F0P0000001@00OomW>Dic0000 57oo00<007ooOol0ogoo8Goo00@007ooIcUJeP80000000D007ooIcU>L`0001Aoo`03001oogoo0?mo ob5oo`04001oofLiF]H200000005001oofLiCW<0000COol00d8@Oomoo`3oOolROol01000OomW>E[F 0P0000001@00OomW>Dic00004goo00=247ooOol0ogoo8Woo00@007ooIcUJeP80000000D007ooIcU> L`0001=oo`03@Q1oogoo0?moob9oo`04001oofLiF]H200000005001oofLiCW<0000COol00d8@Oomo o`3oOolROol01000OomW>E[F0P0000001@00OomW>Dic00004goo00=247ooOol0ogoo8Woo00@007oo IcUJeP80000000@007ooIcU>Lol003X00003OomW>E[F0080000000<007ooIcT0odic>dic0VLi0E[F 0@000@0000000`00OomW>@3oIcTmIcT1F]H1000100000003001oofLi0?mW>C