<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>RE: Forwarder</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>mmmm, I also have a headache... although for more reasons than just this complicated topic.</FONT>
</P>

<P><FONT SIZE=2>Perhaps I can optionally instantiate the Forwarder with a Manager which understands the previous methods.&nbsp; In the send primitive, we can check for the manager (in slot 2 of the forwarder) and send the before and after methods to it, if it is installed.&nbsp; That may really slow down the rest of the image so maybe it is a bad idea.&nbsp; The great thing is I have your footprints to follow in my exploration.&nbsp; I can just try it myself!</FONT></P>

<P><FONT SIZE=2>cheers,</FONT>
<BR><FONT SIZE=2>Rob</FONT>
</P>

<P><FONT SIZE=2>&gt; -----Original Message-----</FONT>
<BR><FONT SIZE=2>&gt; From: Stephen Pair [<A HREF="mailto:spair@advantive.com">mailto:spair@advantive.com</A>]</FONT>
<BR><FONT SIZE=2>&gt; Sent: Wednesday, July 25, 2001 9:44 PM</FONT>
<BR><FONT SIZE=2>&gt; To: squeak-dev@lists.squeakfoundation.org</FONT>
<BR><FONT SIZE=2>&gt; Subject: RE: Forwarder</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; Ah...now I get what you're after...</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; The trampoline is probably the cleanest way without getting </FONT>
<BR><FONT SIZE=2>&gt; into the VM.</FONT>
<BR><FONT SIZE=2>&gt; Method wrappers allow you to add behavior before and after methods</FONT>
<BR><FONT SIZE=2>&gt; without needing to touch the source, but I don't think they would do</FONT>
<BR><FONT SIZE=2>&gt; what you're after.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; The trampolin allows you to write:</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anObject asend someMessage -or-</FONT>
<BR><FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anObject aqsend someMessage, etc</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; Similarly, we could do:</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anObject delegate someMessage</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; These forms are really dictating the manner in which a </FONT>
<BR><FONT SIZE=2>&gt; message is sent.</FONT>
<BR><FONT SIZE=2>&gt; To be consistent, we could allow:</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anObject supersend someMessage&nbsp; &quot;this is probably breaking</FONT>
<BR><FONT SIZE=2>&gt; encapsulation in this case&quot;</FONT>
<BR><FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (anObject sendAt: SomeAncestorClass) someMessage</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; The special variable 'super' only instructs the compiler to use a</FONT>
<BR><FONT SIZE=2>&gt; different send bytecode (it's still pushing self on the stack).</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; So, the most efficiate solution in these cases might be to </FONT>
<BR><FONT SIZE=2>&gt; add new send</FONT>
<BR><FONT SIZE=2>&gt; bytecodes, and modify the compiler to generate them when it sees this</FONT>
<BR><FONT SIZE=2>&gt; special syntax.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt;:-) I don't know if that is a word, but I have the wrong idea of a</FONT>
<BR><FONT SIZE=2>&gt; Delegator.&nbsp; Are you saying that</FONT>
<BR><FONT SIZE=2>&gt; &gt; it delegates method lookup? </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; Not exactly...messages sent to the forwarder, actually create </FONT>
<BR><FONT SIZE=2>&gt; a context</FONT>
<BR><FONT SIZE=2>&gt; that looks just like a context created for the forwardee (in </FONT>
<BR><FONT SIZE=2>&gt; fact, there</FONT>
<BR><FONT SIZE=2>&gt; is only one message lookup, just as if the message were sent </FONT>
<BR><FONT SIZE=2>&gt; directly to</FONT>
<BR><FONT SIZE=2>&gt; the forwardee), with the exception of an additional pointer </FONT>
<BR><FONT SIZE=2>&gt; back to the</FONT>
<BR><FONT SIZE=2>&gt; forwarder.&nbsp; Bytecodes that push self have been modified such that they</FONT>
<BR><FONT SIZE=2>&gt; push this special pointer.&nbsp; Regular message sends just fill </FONT>
<BR><FONT SIZE=2>&gt; this slot in</FONT>
<BR><FONT SIZE=2>&gt; the context with the receiver.&nbsp; It's very efficient.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt;More interesting to me are transparent proxies that </FONT>
<BR><FONT SIZE=2>&gt; maintains identity</FONT>
<BR><FONT SIZE=2>&gt; under self reference, </FONT>
<BR><FONT SIZE=2>&gt; &gt;forward all messages, and allows me to do management of the message</FONT>
<BR><FONT SIZE=2>&gt; send in a :before and </FONT>
<BR><FONT SIZE=2>&gt; &gt;:after sense.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; I think that adding a delegated send bytecode (and compiler </FONT>
<BR><FONT SIZE=2>&gt; to generate</FONT>
<BR><FONT SIZE=2>&gt; the bytecode) and supporting a customizable message lookup </FONT>
<BR><FONT SIZE=2>&gt; (don't really</FONT>
<BR><FONT SIZE=2>&gt; know how difficult this part would be) will do what you want.&nbsp; Without</FONT>
<BR><FONT SIZE=2>&gt; the customizable message lookup, you can approximate a custom lookup</FONT>
<BR><FONT SIZE=2>&gt; using DNU in the delegator (the DNU method would only need to delegate</FONT>
<BR><FONT SIZE=2>&gt; everything it receives to the delegatee).&nbsp; Then, any method </FONT>
<BR><FONT SIZE=2>&gt; added to the</FONT>
<BR><FONT SIZE=2>&gt; delegator will shadow the same method in the delegatee.&nbsp; You </FONT>
<BR><FONT SIZE=2>&gt; can then do</FONT>
<BR><FONT SIZE=2>&gt; something before, make the delegated send, and do something after.&nbsp; If</FONT>
<BR><FONT SIZE=2>&gt; you subclass nil, your class would only have the instance methods that</FONT>
<BR><FONT SIZE=2>&gt; you want to override (and DNU if you don't have the </FONT>
<BR><FONT SIZE=2>&gt; customizable message</FONT>
<BR><FONT SIZE=2>&gt; lookup).</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; MethodWrappers would allow you to add before and after code, </FONT>
<BR><FONT SIZE=2>&gt; but not for</FONT>
<BR><FONT SIZE=2>&gt; single instances (unless you create a special subclass and change the</FONT>
<BR><FONT SIZE=2>&gt; instance(s) to that new subclass).</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; I've got a headache...</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; - Stephen</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; -----Original Message-----</FONT>
<BR><FONT SIZE=2>&gt; From: squeak-dev-admin@lists.squeakfoundation.org</FONT>
<BR><FONT SIZE=2>&gt; [<A HREF="mailto:squeak-dev-admin@lists.squeakfoundation.org">mailto:squeak-dev-admin@lists.squeakfoundation.org</A>] On Behalf Of</FONT>
<BR><FONT SIZE=2>&gt; Withers, Robert</FONT>
<BR><FONT SIZE=2>&gt; Sent: Wednesday, July 25, 2001 8:16 PM</FONT>
<BR><FONT SIZE=2>&gt; To: 'squeak-dev@lists.squeakfoundation.org'</FONT>
<BR><FONT SIZE=2>&gt; Subject: RE: Forwarder</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; Stephen Pair wrote: </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;Great stuff!&nbsp; I'm very excited by your work, especially as a </FONT>
<BR><FONT SIZE=2>&gt; &gt; mechanism </FONT>
<BR><FONT SIZE=2>&gt; &gt; for delegation.&nbsp; I am </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;currently using the Trampoline object, that I think you originally </FONT>
<BR><FONT SIZE=2>&gt; &gt; developed, Stephen.&nbsp; I am unsure </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;of how the delegation mechanism would work with this forwarder, so </FONT>
<BR><FONT SIZE=2>&gt; &gt; please continue the ramblings at </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;the bottom. </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; Thanks!&nbsp; No, I didn't do the trampoline...someone else did (can't </FONT>
<BR><FONT SIZE=2>&gt; &gt; remember)...but, I incorporated into a little asynchronous </FONT>
<BR><FONT SIZE=2>&gt; messaging </FONT>
<BR><FONT SIZE=2>&gt; &gt; demo that I did. </FONT>
<BR><FONT SIZE=2>&gt; Ah yes, so I did get that from you.&nbsp; I also have been working on an</FONT>
<BR><FONT SIZE=2>&gt; asynchronous messaging framework, so I did get the Trampoline idea and</FONT>
<BR><FONT SIZE=2>&gt; the asend protocol from you.&nbsp; I extended the contract somewhat.&nbsp; I</FONT>
<BR><FONT SIZE=2>&gt; wanted to allow asynchronous message sends, with the further </FONT>
<BR><FONT SIZE=2>&gt; constraint</FONT>
<BR><FONT SIZE=2>&gt; that returns or exceptions from that send must return to the sending</FONT>
<BR><FONT SIZE=2>&gt; Process.&nbsp; Thus I have the Trampoline with an </FONT>
<BR><FONT SIZE=2>&gt; AsyncMessageGenerator which</FONT>
<BR><FONT SIZE=2>&gt; creates a QueuedPromise and passes that with the AsyncMessageSend</FONT>
<BR><FONT SIZE=2>&gt; object.&nbsp; Both the send and the return go through the respective queues</FONT>
<BR><FONT SIZE=2>&gt; of the Objects communicating.&nbsp; This is done with secretaries, both a</FONT>
<BR><FONT SIZE=2>&gt; global and background Secretaries.&nbsp; I want to embed all of </FONT>
<BR><FONT SIZE=2>&gt; this into the</FONT>
<BR><FONT SIZE=2>&gt; VM, along the lines of ConcurrentSmalltalk.</FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;[rob - delegation hooks] </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;This is where I am a bit confused about how this may work in </FONT>
<BR><FONT SIZE=2>&gt; &gt; practice. </FONT>
<BR><FONT SIZE=2>&gt; &gt; I believe your usage was to </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;coalesce the reference to a changable object, which would be </FONT>
<BR><FONT SIZE=2>&gt; &gt; polymorphic in protocol, to avoid the </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;cost of a #become:.&nbsp; Is this right?&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; Yes, roughly...I wouldn't think of it as coalescing...there </FONT>
<BR><FONT SIZE=2>&gt; are still </FONT>
<BR><FONT SIZE=2>&gt; &gt; two distinct objects, one just delgates everything it </FONT>
<BR><FONT SIZE=2>&gt; receives to the </FONT>
<BR><FONT SIZE=2>&gt; &gt; other. </FONT>
<BR><FONT SIZE=2>&gt; Ok, but you maintain the same reference externally, even while the</FONT>
<BR><FONT SIZE=2>&gt; implementation of the Forwardee mutates.&nbsp; This is extremely </FONT>
<BR><FONT SIZE=2>&gt; interesting.</FONT>
<BR><FONT SIZE=2>&gt;&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;If I were to use a delegation model, or a managed object </FONT>
<BR><FONT SIZE=2>&gt; &gt; &gt;model, then I think the forwardee is the delegator or manager.&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; Actually, this is the opposite of the way I would describe </FONT>
<BR><FONT SIZE=2>&gt; &gt; it.&nbsp; I would </FONT>
<BR><FONT SIZE=2>&gt; &gt; describe the Forwarder as the delegator, and the forwardee as the </FONT>
<BR><FONT SIZE=2>&gt; &gt; delegatee (is that a word?)...I don't really remember what (if any) </FONT>
<BR><FONT SIZE=2>&gt; &gt; standard terminology has been established regarding delegation. </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; :-) I don't know if that is a word, but I have the wrong idea of a</FONT>
<BR><FONT SIZE=2>&gt; Delegator.&nbsp; Are you saying that it delegates method lookup?&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; More interesting to me are transparent proxies that maintains identity</FONT>
<BR><FONT SIZE=2>&gt; under self reference, forward all messages, and allows me to do</FONT>
<BR><FONT SIZE=2>&gt; management of the message send in a :before and :after sense.&nbsp; I don't</FONT>
<BR><FONT SIZE=2>&gt; want to have duplicate all of the protocol in a surrogate </FONT>
<BR><FONT SIZE=2>&gt; class for the</FONT>
<BR><FONT SIZE=2>&gt; proxied object.&nbsp; This is what I was thinking with the term Managed</FONT>
<BR><FONT SIZE=2>&gt; Objects.&nbsp; This management may include Security checks, faulting, async</FONT>
<BR><FONT SIZE=2>&gt; sending/remote sending and future management.</FONT>
<BR><FONT SIZE=2>&gt; The Trampoline object subclasses from ProtoObject and so there is an</FONT>
<BR><FONT SIZE=2>&gt; identity problem, as well as not always forwarding all message sends.</FONT>
<BR><FONT SIZE=2>&gt; It does this with DNU, so that is the point at which I can do the</FONT>
<BR><FONT SIZE=2>&gt; :before and :after work.&nbsp;&nbsp; It isn't clear to me where I can </FONT>
<BR><FONT SIZE=2>&gt; do this with</FONT>
<BR><FONT SIZE=2>&gt; the Forwarder.&nbsp; I would like to configure the Forwarder with </FONT>
<BR><FONT SIZE=2>&gt; a manager,</FONT>
<BR><FONT SIZE=2>&gt; which could intercept the message send and transform it into </FONT>
<BR><FONT SIZE=2>&gt; a different</FONT>
<BR><FONT SIZE=2>&gt; type of send.&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; The possible solutions I know about are: </FONT>
<BR><FONT SIZE=2>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Trampoline with a DNU, but the current version </FONT>
<BR><FONT SIZE=2>&gt; doesn't reroute</FONT>
<BR><FONT SIZE=2>&gt; all message sends. </FONT>
<BR><FONT SIZE=2>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - MethodWrappers, I really haven't looked at these, but it</FONT>
<BR><FONT SIZE=2>&gt; doesn't present a new, managed reference. </FONT>
<BR><FONT SIZE=2>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Forwarder, but I don't see how to activate the Manager </FONT>
<BR><FONT SIZE=2>&gt; Perhaps it is a delegator model I am looking for, with your ability to</FONT>
<BR><FONT SIZE=2>&gt; install custom lookup.&nbsp; This may be the managed sending that </FONT>
<BR><FONT SIZE=2>&gt; I want.&nbsp; I</FONT>
<BR><FONT SIZE=2>&gt; will have to read the Self papers and more about AOP.&nbsp; I can </FONT>
<BR><FONT SIZE=2>&gt; sense that</FONT>
<BR><FONT SIZE=2>&gt; maintenance of self and identity would be interesting in this </FONT>
<BR><FONT SIZE=2>&gt; Delegative</FONT>
<BR><FONT SIZE=2>&gt; model.</FONT>
<BR><FONT SIZE=2>&gt; &lt;snip&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; I think you've lost me...also the Forwarder would not be used </FONT>
<BR><FONT SIZE=2>&gt; &gt; at all in </FONT>
<BR><FONT SIZE=2>&gt; &gt; delegation (it can't because because no method will ever be </FONT>
<BR><FONT SIZE=2>&gt; activated </FONT>
<BR><FONT SIZE=2>&gt; &gt; for any of its instances)...in my mind delegation requires </FONT>
<BR><FONT SIZE=2>&gt; that you be</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; able to send a message to an object, and receive any </FONT>
<BR><FONT SIZE=2>&gt; messages that are</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; sent to self in the target method.&nbsp; It's kind of like dynamically </FONT>
<BR><FONT SIZE=2>&gt; &gt; subclassing the target object, but it only affects the instances </FONT>
<BR><FONT SIZE=2>&gt; &gt; involved, it is only in effect for the duration of the </FONT>
<BR><FONT SIZE=2>&gt; &gt; delegated message </FONT>
<BR><FONT SIZE=2>&gt; &gt; send, and the two objects remain distinct (having separate </FONT>
<BR><FONT SIZE=2>&gt; &gt; state...unlike subclassing, in which instances reflect a </FONT>
<BR><FONT SIZE=2>&gt; union of all </FONT>
<BR><FONT SIZE=2>&gt; &gt; instance variable in the class and its superclasses). </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; DNU comes into play when a delegated method context sends a </FONT>
<BR><FONT SIZE=2>&gt; message to</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; self, which would get routed back to the delegator...which may not </FONT>
<BR><FONT SIZE=2>&gt; &gt; natively understand the message and desires to once again </FONT>
<BR><FONT SIZE=2>&gt; &gt; delegate (this </FONT>
<BR><FONT SIZE=2>&gt; &gt; is analogous to the the lookup of a method in the </FONT>
<BR><FONT SIZE=2>&gt; superclass chain). </FONT>
<BR><FONT SIZE=2>&gt; &gt; Alternatively, the delegator may implement the method, and </FONT>
<BR><FONT SIZE=2>&gt; choose to </FONT>
<BR><FONT SIZE=2>&gt; &gt; delegate it, optionally adding behavior of its own (this is </FONT>
<BR><FONT SIZE=2>&gt; &gt; analogous to </FONT>
<BR><FONT SIZE=2>&gt; &gt; a super send). </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; Of course, you would need to support additional syntax to </FONT>
<BR><FONT SIZE=2>&gt; generate a </FONT>
<BR><FONT SIZE=2>&gt; &gt; &quot;delegated send&quot; bytecode. </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; So, having a mechanism to define a custom lookup could be </FONT>
<BR><FONT SIZE=2>&gt; beneficial. </FONT>
<BR><FONT SIZE=2>&gt; &gt; You could choose to first do a normal lookup, then try one </FONT>
<BR><FONT SIZE=2>&gt; of several </FONT>
<BR><FONT SIZE=2>&gt; &gt; instance variables for potential delegation, or any number of </FONT>
<BR><FONT SIZE=2>&gt; &gt; possibilites.&nbsp; I don't think calling back into Smalltalk for </FONT>
<BR><FONT SIZE=2>&gt; &gt; that would </FONT>
<BR><FONT SIZE=2>&gt; &gt; be an issue...the default case of a normal lookup has to be handled </FONT>
<BR><FONT SIZE=2>&gt; &gt; efficiently though.&nbsp; And, you have to be careful not to melt </FONT>
<BR><FONT SIZE=2>&gt; &gt; down into a </FONT>
<BR><FONT SIZE=2>&gt; &gt; infinte recursion trying to lookup the method lookup method lookup </FONT>
<BR><FONT SIZE=2>&gt; &gt; method lookup method lookup method lookup....you get the </FONT>
<BR><FONT SIZE=2>&gt; idea.&nbsp; But, I</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; think if you want the real deal...you have to go all the </FONT>
<BR><FONT SIZE=2>&gt; way to Self. </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; I haven't experimented with the delegation aspect...so, </FONT>
<BR><FONT SIZE=2>&gt; there may be </FONT>
<BR><FONT SIZE=2>&gt; &gt; something in there that blows apart my whole notion of how it might </FONT>
<BR><FONT SIZE=2>&gt; &gt; work.&nbsp; I'm going to play around with the forwarding </FONT>
<BR><FONT SIZE=2>&gt; capability for a </FONT>
<BR><FONT SIZE=2>&gt; &gt; while first. </FONT>
<BR><FONT SIZE=2>&gt; &gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt; - Stephen </FONT>
<BR><FONT SIZE=2>&gt; &gt;&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; - Rob </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
</P>

</BODY>
</HTML>