From: nevin@dtint.dtint.com
Subject: Re: Coding Rules/Suggestions (RTF)
Reply-To: nevin@dtint.dtint.com
Organization: Digital Technology, International
Date: Wed, 18 Nov 92 21:15:36 GMT


Interesting stuff and a lot of good point, some of which end up being  
applicable only to the NeXT environment. Consider what kind of  
porting problems you may run into if you implement your standards.

It'll port easily to every NeXTSTEP supported platform and that's all  
I care about.  Other programmers may not be as lucky, though, and may  
not have that luxury.

More that a particular standard, it probably is important for a group  
of people to agree on a standard implementation. This includes  
subproject setup, object naming conventions, code outlining, file  
commenting and organization, method/function commenting, line or  
cluster commenting, etc.

I covered "object naming conventions" by requiring them to follow the  
panel/window example, the names of which must be logical from an  
end-user point of view.  Commenting was covered to the degree that I  
think it matters beyond that, let each developer decide.  I didn't  
cover subproject setup not that I overlooked it but that I'm not yet  
ready to voice my thoughts.

I've been the route of extremely strict conventions (see Charles  
Symoni, MIT/Microsoft on type naming calculus commonly referred to as  
"Hungarian"), and I find the middle ground more appealing (i.e. a  
'relaxed' but enforceable, democratic group of standards).

I'm against Hungarian notation.  I'm also not inclined to make any  
rules governing instance variable names, but class names are covered  
(see comment above).


> All panels and windows should be in a separate NIB file, one per  
NIB, with a separate Class object to control and manage each NIB.   
For example, for the Info NIB file, there should also be files Info.h  
and Info.m that manages the NIB file.  The panel or window in the NIB  
file should have the name of it's NIB file (and associated class  
files) as the name of the panel/window (this is setable via the  
Inspector panel of I.B. I'm talking about the name that will appear  
in the title bar of the panel/window, not the name as it might appear  
in the "Objects" part of the NIB).

This doesn't account for sub-panels or micro-panel management. Also,  
if you have a large collection of NIBs it means a propagation of  
objects/classes. Again, a standard method within the application may  
be what's really called for, not a standard approach to all  
applications.

Yes, you are right.  I have ammended the applicable part of this rule  
to read as follows:

All panels and windows that are instantiated in a NIB file should be  
in separate NIB files, one per NIB, with a separate Class object to  
control and manage each NIB.  For example, for the Info NIB file,  
there should also be files Info.h and Info.m that manages the NIB  
file.  The panel or window in the NIB file should have the name of  
it's NIB file (and associated class files) as the name of the  
panel/window (this is setable via the Inspector panel of I.B. I'm  
talking about the name that will appear in the title bar of the  
panel/window, not the name as it might appear in the "Objects" part  
of the NIB).  Note that this applies only to the NIB files associated  
with the Class creator's primary language (i.e., if you are French,  
you'll create French class names, and create the French NIB files to  
follow this rule.  The other language NIB files German, English,  
Swiss, etc. will be created based on the French NIB files, and those  
alternate language NIB's won't necessarily match your French class  
names). 

Notice that the rule now only applies to panels/windows that are  
already instantiated in the NIB (this is what I initially meant,  
anyway).  Alert panels, micro-panels, and the like are generally  
instantiated via program logic (via "NXRunAlterPanel()", as one  
possible example).

Also notice the clarification at the end of the paragraph regarding  
localized NIB's (I had one person email me in disagreement, arguing  
that they wanted localized NIB names instead).
 
>    
> Or, at the very least, the name of the NIB file (and therefore the  
associated class files) should be obvious to determine simply by  
looking at the panel (or window) name.  In this way, simply running  
the program will give another programmer a very good idea of the  
object structure of the program, since he can plainly see all of the  
panels and windows, and their names, while the program is running.

Again, many nibs don't show titles. Another (possible) consideration:  
information hiding. If you are distributing source for public  
consumption then is probably not what you want to do. If you are  
selling an application, you may wish to encode some things. Some  
venders do consider it appropriate.

I presume you mean: "some panels/windows in some NIB's don't have  
titles".  My question would then be: why doesn't the panel/window  
have a title?  What would it hurt to put a title in?  Note that the  
rule I gave does give you some discretion in the choice of the title:

Or, at the very least, the name of the NIB file (and therefore the  
associated class files) should be obvious to determine simply by  
looking at the panel (or window) name.  In this way, simply running  
the program (with the appropriate default language) will give another  
programmer a very good idea of the object structure of the program,  
since he can plainly see all of the panels and windows, and their  
names, while the program is running.

However, you make a good point about encoding.  It might be an issue  
on some projects.

> *****************************
> 
> When given a choice of fewer objects that do more, versus more  
objects that are smaller and do less, favor the use of smaller  
objects.  You'll find that your objects will grow larger during  
development anyway.

Generally I'd agree. However, if you're talking about managing say,  
1000 classes, you'll find a certain redundancy starts to creep in.  
OOP in general has to do with the management of information. Do you  
want to manage more or less things within a file? Do you want to  
manage more or less things among files?

An object can manage more and still be small in terms of the code it  
contains if it delegates it's work to other objects.  To use a  
house-construction metaphor: 4 boards and some nails might make a  
panel; 3 or 4 panels might make a wall, 4 walls and a floor might  
make a room, 3 rooms might make a floor, and 3 floors and a roof  
might make a house.  And, in each case, the object is small even the  
"house" object.

People are still enamored enough with OOP enough to not see the  
second situation:  objects allow a encapsulization of related code so  
we can avoid situations of tightly wrapped coding. Object systems  
still end up being tightly bound among sets of objects. OOP has not  
'solved' the problem, only pushed it further back, at which stage the  
problem becomes even bigger. Consider the impacts of favoring smaller  
objects when your objects become interdependent and abundant.

Is the "room" object tightly bound to the "house" object from my  
metaphor above?  No.

Is the "room" object tightly bound to the "board" object from my  
metaphor above?  No.  It's perfectly acceptable to build the walls of  
the room with another material (such as brick), as long as the room  
is still a room.  In other words, it's OK to improve the algorithm.

If you make a mistake and discover that your rooms built with boards  
are obsolete (maybe you used balsa wood?), and you no longer want  
rooms that way (but must keep your old balsa-wood rooms around  
because of some peculiar backwards compatability problem), just mark  
your "room" object as obsolete (and also it's support objects) so  
nobody will use it again for any new floor of any new house.   Then  
create a "brick-rooms" object (and it's support objects) for future  
use.  Then, keep both "room" objects (and their support objects) in  
your library.  All new code will use the new objects, and eventually  
the old objects will die a natural death.

Incidentally, I think this is one of the neat things of Objective-C  
(versus C++).  You can create new, logically-related object Classes,  
and polymorphically message them, without them all having to inherit  
from the same base class.  Thus, it's more forgiving of mistakes in  
your initial Class hierarchy design than C++ is.  With C++, if you  
poorly design your class hierarchy, you're screwed, since you'll  
probably now have to re-implement major parts of the Class hierarchy.

I'm neither for or against large/small objects; I'm for applying what  
best suits the big picture.

> 
> *****************************
> 	
> I have not, as yet, seen a single convincing situation where public  
instance variables were necessary or even desirable, although I am  
hesitant to say that there are none. ...
Unless otherwise convinced for special occassions, all instance  
variables should only be modifiable by a class method (i.e., NOT be  
public).  It should also not be modifiable by more than one class  
method.

It depends on how "purist" or theoretical vs. practical you want to  
get. Within the same module/class it may be acceptable to refer to  
the instance variable vs. the method, especially where speed is  
concerned.

If it's within the same instance of a class (i.e., the same "module"?  
what do you mean by a "module", anyway?), the instance variables of a  
given instance of a class are accessible to all methods of that  
instance anyway, regardless of the variables' classification (public,  
protected, or private) so in this case there would be no advantage to  
declaring any of them public.

But, if you are talking about different instances of the same class  
what relevance does the fact that they are of the same class have?  I  
guess if it executes faster, then we should all just go back to  
having global variables for everything (ala Windoze)?

I fully expect to eventually encounter some case where the instance  
variables need to be public for speed of execution reasons as you  
suggest.  I just haven't seen that case yet.  And, when it happens, I  
just think it should be suitably documented in the code (i.e.,  
explained why the public declarations were necessary and also in  
non-ambiguous, very specific terms) .  Otherwise, stay away from  
public declarations.

>  
> *****************************
>      
> Reality Checking in 'C' code (as well as all of the 'C' language  
derivatives, such as Objective-C) is accomplished with the assert()  
macro.  Brad Cox, the creator of Objective-C, recommends using  
asserts (p. 98 and 99 of his book, Object-Oriented Programming, An  
Evolutionary Approach, 2nd Edition) for Reality Checking (he calls it  
something else, though) and clustering the checks into two groups:  
(1) preconditions, and (2) postconditions.  The advantage of using  
assert() is that this debugging code can be turned off with a  
compile-time switch.
> 
> I don't entirely agree with this approach, for a couple of reasons:
>    
> A precondition assert should verify that the argument values and/or  
types are as they should be for the method to work properly.   
Interestingly enough, except possibly with really obscure code (and I  
can't even think of an example), the compiler and/or runtime system  
will do this for you, so why do you need an assert for this case?   
(Objective-C has a unique runtime system that almost no other  
language has).

You might be able to gain a fuller appreciation for preconditions by  
reading "Object Oriented Design" by Bertrand Meyer, which is where  
Brad Cox picked up the notion of preconditions and postconditions.

There are several things that your discussion misses. A compiler can  
check type information (is this an int, a const char*, the correct  
object), but it cannot guarantee the condition of that argument (is  
this int between values A and B, is the const char* a unique string,  
is this object initialized to the proper state). Furthermore,  
preconditions may extend to implicit arguments (global state, object  
state), which also needs to be verified. For example; are we  
currently printing? Is the associated nib for this object already  
loaded.

Postconditions are treated in a similar fashion (the method operates  
on state to produce a range of results; are the results in the  
expected range?).

A third checking that is left out (I'll have to re-read Cox, as I  
believe he misses this as well), is invarients. That is, what are  
those states which may effect outcome which have nothing to do with  
inputs. This includes environment conditions (memory, disk, threads,  
etc), globals and some local state.

Some very good points.  I need to study it some more.

I've been finding that the third checking you mention (invarients) is  
especially important with Distributed Objects.  These types of  
objects seem to either need state-machine logic inside of them, or  
else provide some sort of mutex-locking methods.  And in any case, to  
implement such mechanisms, the object must "remember" who sent each  
message so "state" information is quite common.

For example, suppose you message a remote object to load an NXImage,  
with the intent to message it afterwards to attach some additional  
information to the image, then finally message it to save the image  
and it's tagged data to a database.  Now suppose that before you send  
the message to save the data, some other remote object messages it to  
load a different NXImage.  Disaster....

The ability for any object on the network to message any other object  
on the network can lead to chaos if suitable precautions aren't  
taken.  And, as I said above, these precautions seem to always  
require some sort of "state" memory for the object.
..

protocols are cool, but not supported outside NeXT :-(


 So? :-) 


>  
> *****************************
> Methods must appear in both the implementation-module and  
interface-module in the same order that they appear in standard NeXT  
class documentation ...

Seeing as NeXT keeps tweaking their own definitions (witness 3.0  
docs), and knowing some of the shortcomings (like delegate method  
lookup) I'm not enamored with the suggestion. We break things into  
logical groupings (existence, accessor, i/o, etc) within the header  
and module files. This allows a programmer quick access to related  
regions (which we deem pretty important). In fact, I'd wager you'll  
encounter more production problems (i.e. bugs) by code that is spread  
out alphabetically that clustered into logical groups.

Your point here is well-taken.  In fact, I considered this approach  
for quite a while, and even initially wrote my code in the manner you  
suggest.  The problem was that it just wasn't that easy to categorize  
many of the methods, and what made sense to me for a category for a  
method didn't necessarily make sense to others, and visa-versa.  It  
seems that, for those gray areas where a method could actually be  
multiply-categorized, everyone has their own idea of where it  
belongs.  After awhile, chaos seems to ensue.

I still think it's better to alphabetize them within their respective  
groups, with Class methods at the top, instance methods in the  
middle, and delegate methods at the bottom.

However, those 3 groups should only be sub-groups of the bigger  
groups implied by interface objects across multiple (sub)projects.   
This will be a part of my "sub-projects" guidelines.

regards,

Kevin
--
Kevin Sven Berg               /    /    /    /  P /  a /  g /  e /  s
kevin@pages.com              /    /    /    /    /    /    /    / 
Pages Software Inc.         /    /    /    /    /    /    /    /   
619-492-9050  


--
Nevin Pratt, Digital Technology, Int'l    Orem, Ut
NeXTmail preferred, but ONLY at my REAL email address:  
nevin@dtint.dtint.com



-- NewsGrazer, a NeXTstep(tm) news reader, posting --
M>UQR=&8P7&%N<VE[7&9O;G1T8FQ<9C!<9G-W:7-S($AE;'9E=&EC83M<9C)<
M9FYI;"!4:6UE<RU2;VUA;CM<9C%<9FUO9&5R;B!#;W5R:65R.WT*7&UA<F=L
M,3(P"EQM87)G<C$R,`I[7&-O;&]R=&)L.UQR960P7&=R965N,%QB;'5E,#M]
M"EQP87)D7'1X-3(P7'1X,3`V,%QT>#$V,#!<='@R,3(P7'1X,C8V,%QT>#,R
M,#!<='@S-S(P7'1X-#(V,%QT>#0X,#!<='@U,S(P7&8P7&(P7&DP7'5L;F]N
M95QF<S(T7&9C,%QC9C`@7`I);G1E<F5S=&EN9R!S='5F9B!A;F0@82!L;W0@
M;V8@9V]O9"!P;VEN="P@<V]M92!O9B!W:&EC:"!E;F0@=7`@8F5I;F<@87!P
M;&EC86)L92!O;FQY('1O('1H92!.95A4(&5N=FER;VYM96YT+B!#;VYS:61E
M<B!W:&%T(&MI;F0@;V8@<&]R=&EN9R!P<F]B;&5M<R!Y;W4@;6%Y(')U;B!I
M;G1O(&EF('EO=2!I;7!L96UE;G0@>6]U<B!S=&%N9&%R9',N7`I<"@I<8B!)
M="=L;"!P;W)T(&5A<VEL>2!T;R!E=F5R>2!.95A44U1%4"!S=7!P;W)T960@
M<&QA=&9O<FW086YD('1H870G<R!A;&P@22!C87)E(&%B;W5T+B`@3W1H97(@
M<')O9W)A;6UE<G,@;6%Y(&YO="!B92!A<R!L=6-K>2P@=&AO=6=H+"!A;F0@
M;6%Y(&YO="!H879E('1H870@;'5X=7)Y+EP*"EQB,"!<"DUO<F4@=&AA="!A
M('!A<G1I8W5L87(@<W1A;F1A<F0L(&ET('!R;V)A8FQY(&ES(&EM<&]R=&%N
M="!F;W(@82!G<F]U<"!O9B!P96]P;&4@=&\@86=R964@;VX@82!S=&%N9&%R
M9"!I;7!L96UE;G1A=&EO;BX@5&AI<R!I;F-L=61E<R!S=6)P<F]J96-T('-E
M='5P+"!O8FIE8W0@;F%M:6YG(&-O;G9E;G1I;VYS+"!C;V1E(&]U=&QI;FEN
M9RP@9FEL92!C;VUM96YT:6YG(&%N9"!O<F=A;FEZ871I;VXL(&UE=&AO9"]F
M=6YC=&EO;B!C;VUM96YT:6YG+"!L:6YE(&]R(&-L=7-T97(@8V]M;65N=&EN
M9RP@971C+EP*7`H*7&(@22!C;W9E<F5D(")O8FIE8W0@;F%M:6YG(&-O;G9E
M;G1I;VYS(B!B>2!R97%U:7)I;F<@=&AE;2!T;R!F;VQL;W<@=&AE('!A;F5L
M+W=I;F1O=R!E>&%M<&QE+"!T:&4@;F%M97,@;V8@=VAI8V@@;75S="!B92!L
M;V=I8V%L(&9R;VT@86X@96YD+75S97(@<&]I;G0@;V8@=FEE=RX@($-O;6UE
M;G1I;F<@=V%S(&-O=F5R960@=&\@=&AE(&1E9W)E92!T:&%T($D@=&AI;FL@
M:70@;6%T=&5R<]!B97EO;F0@=&AA="P@;&5T(&5A8V@@9&5V96QO<&5R(&1E
M8VED92X@($D@9&ED;B=T(&-O=F5R('-U8G!R;VIE8W0@<V5T=7#0;F]T('1H
M870@22!O=F5R;&]O:V5D(&ETT&)U="!T:&%T($DG;2!N;W0@>65T(')E861Y
M('1O('9O:6-E(&UY('1H;W5G:'1S+EP*"EQB,"!<"DDG=F4@8F5E;B!T:&4@
M<F]U=&4@;V8@97AT<F5M96QY('-T<FEC="!C;VYV96YT:6]N<R`H<V5E($-H
M87)L97,@4WEM;VYI+"!-250O36EC<F]S;V9T(&]N('1Y<&4@;F%M:6YG(&-A
M;&-U;'5S(&-O;6UO;FQY(')E9F5R<F5D('1O(&%S(")(=6YG87)I86XB*2P@
M86YD($D@9FEN9"!T:&4@;6ED9&QE(&=R;W5N9"!M;W)E(&%P<&5A;&EN9R`H
M:2YE+B!A("=R96QA>&5D)R!B=70@96YF;W)C96%B;&4L(&1E;6]C<F%T:6,@
M9W)O=7`@;V8@<W1A;F1A<F1S*2Y<"EP*"EQB($DG;2!A9V%I;G-T($AU;F=A
M<FEA;B!N;W1A=&EO;BX@($DG;2!A;'-O(&YO="!I;F-L:6YE9"!T;R!M86ME
M(&%N>2!R=6QE<R!G;W9E<FYI;F<@:6YS=&%N8V4@=F%R:6%B;&4@;F%M97,L
M(&)U="!C;&%S<R!N86UE<R!A<F4@8V]V97)E9"`H<V5E(&-O;6UE;G0@86)O
M=F4I+EP*"EQB,"!<"EP*"EQI7&QI-30P7&9C,5QC9C$@/B!!;&P@<&%N96QS
M(&%N9"!W:6YD;W=S('-H;W5L9"!B92!I;B!A('-E<&%R871E($Y)0B!F:6QE
M+"!O;F4@<&5R($Y)0BP@=VET:"!A('-E<&%R871E($-L87-S(&]B:F5C="!T
M;R!C;VYT<F]L(&%N9"!M86YA9V4@96%C:"!.24(N("!&;W(@97AA;7!L92P@
M9F]R('1H92!);F9O($Y)0B!F:6QE+"!T:&5R92!S:&]U;&0@86QS;R!B92!F
M:6QE<R!);F9O+F@@86YD($EN9F\N;2!T:&%T(&UA;F%G97,@=&AE($Y)0B!F
M:6QE+B`@5&AE('!A;F5L(&]R('=I;F1O=R!I;B!T:&4@3DE"(&9I;&4@<VAO
M=6QD(&AA=F4@=&AE(&YA;64@;V8@:70G<R!.24(@9FEL92`H86YD(&%S<V]C
M:6%T960@8VQA<W,@9FEL97,I(&%S('1H92!N86UE(&]F('1H92!P86YE;"]W
M:6YD;W<@*'1H:7,@:7,@<V5T86)L92!V:6$@=&AE($EN<W!E8W1O<B!P86YE
M;"!O9B!)+D(NT$DG;2!T86QK:6YG(&%B;W5T('1H92!N86UE('1H870@=VEL
M;"!A<'!E87(@:6X@=&AE('1I=&QE(&)A<B!O9B!T:&4@<&%N96PO=VEN9&]W
M+"!N;W0@=&AE(&YA;64@87,@:70@;6EG:'0@87!P96%R(&EN('1H92`B3V)J
M96-T<R(@<&%R="!O9B!T:&4@3DE"*2Y<"@I<:3!<;&DP7&9C,%QC9C`@7`I4
M:&ES(&1O97-N)W0@86-C;W5N="!F;W(@<W5B+7!A;F5L<R!O<B!M:6-R;RUP
M86YE;"!M86YA9V5M96YT+B!!;'-O+"!I9B!Y;W4@:&%V92!A(&QA<F=E(&-O
M;&QE8W1I;VX@;V8@3DE"<R!I="!M96%N<R!A('!R;W!A9V%T:6]N(&]F(&]B
M:F5C=',O8VQA<W-E<RX@06=A:6XL(&$@<W1A;F1A<F0@;65T:&]D('=I=&AI
M;B!T:&4@87!P;&EC871I;VX@;6%Y(&)E('=H870G<R!R96%L;'D@8V%L;&5D
M(&9O<BP@;F]T(&$@<W1A;F1A<F0@87!P<F]A8V@@=&\@86QL(&%P<&QI8V%T
M:6]N<RY<"EP*"EQB(%EE<RP@>6]U(&%R92!R:6=H="X@($D@:&%V92!A;6UE
M;F1E9"!T:&4@87!P;&EC86)L92!P87)T(&]F('1H:7,@<G5L92!T;R!R96%D
M(&%S(&9O;&QO=W,Z7`H*7'!A<F1<='@U-C!<='@Q,3(P7'1X,38X,%QT>#(R
M-#!<='@R.#`P7'1X,S,V,%QT>#,Y,C!<='@T-#@P7'1X-3`T,%QT>#4V,#!<
M9C)<9G,R.%QF8S!<8V8P(%P*"EQL:3<V,"!!;&P@<&%N96QS(&%N9"!W:6YD
M;W=S('1H870@87)E(&EN<W1A;G1I871E9"!I;B!A($Y)0B!F:6QE('-H;W5L
M9"!B92!I;B!S"EQI(&5P87)A=&4*7&DP("!.24(@9FEL97,L(&]N92!P97(@
M3DE"+"!W:71H(&$@<V5P87)A=&4@0VQA<W,@;V)J96-T('1O(&-O;G1R;VP@
M86YD(&UA;F%G92!E86-H($Y)0BX@($9O<B!E>&%M<&QE+"!F;W(@=&AE($EN
M9F\@3DE"(&9I;&4L('1H97)E('-H;W5L9"!A;'-O(&)E(&9I;&5S(`I<:2!)
M;F9O+F@*7&DP("!A;F0@"EQI($EN9F\N;0I<:3`@('1H870@;6%N86=E<R!T
M:&4@3DE"(&9I;&4N("!4:&4@<&%N96P@;W(@=VEN9&]W(&EN('1H92!.24(@
M9FEL92!S:&]U;&0@:&%V92!T:&4@;F%M92!O9B!I="=S($Y)0B!F:6QE("AA
M;F0@87-S;V-I871E9"!C;&%S<R!F:6QE<RD@87,@=&AE(&YA;64@;V8@=&AE
M('!A;F5L+W=I;F1O=R`H=&AI<R!I<R!S971A8FQE('9I82!T:&4@26YS<&5C
M=&]R('!A;F5L(&]F($DN0B[022=M('1A;&MI;F<@86)O=70@=&AE(&YA;64@
M=&AA="!W:6QL(&%P<&5A<B!I;B!T:&4@=&ET;&4@8F%R(&]F('1H92!P86YE
M;"]W:6YD;W<L(&YO="!T:&4@;F%M92!A<R!I="!M:6=H="!A<'!E87(@:6X@
M=&AE(")/8FIE8W1S(B!P87)T(&]F('1H92!.24(I+B`@3F]T92!T:&%T('1H
M:7,@87!P;&EE<R!O;FQY('1O('1H92!.24(@9FEL97,@87-S;V-I871E9"!W
M:71H('1H92!#;&%S<R!C<F5A=&]R)W,@<')I;6%R>2!L86YG=6%G92`H:2YE
M+BP@:68@>6]U(&%R92!&<F5N8V@L('EO=2=L;"!C<F5A=&4@1G)E;F-H(&-L
M87-S(&YA;65S+"!A;F0@8W)E871E('1H92!&<F5N8V@@3DE"(&9I;&5S('1O
M(&9O;&QO=R!T:&ES(')U;&4N("!4:&4@;W1H97(@;&%N9W5A9V4@3DE"(&9I
M;&5ST$=E<FUA;BP@16YG;&ES:"P@4W=I<W,L(&5T8R[0=VEL;"!B92!C<F5A
M=&5D(&)A<V5D(&]N('1H92!&<F5N8V@@3DE"(&9I;&5S+"!A;F0@=&AO<V4@
M86QT97)N871E(&QA;F=U86=E($Y)0B=S('=O;B=T(&YE8V5S<V%R:6QY(&UA
M=&-H('EO=7(@1G)E;F-H(&-L87-S(&YA;65S*2X@"EQF,%QF<S(T(%P*"EQP
M87)D7'1X-3(P7'1X,3`V,%QT>#$V,#!<='@R,3(P7'1X,C8V,%QT>#,R,#!<
M='@S-S(P7'1X-#(V,%QT>#0X,#!<='@U,S(P7&(P7&9C,%QC9C`@7`H*7&(@
M3F]T:6-E('1H870@=&AE(')U;&4@;F]W(&]N;'D@87!P;&EE<R!T;R!P86YE
M;',O=VEN9&]W<R!T:&%T(&%R92!A;')E861Y(&EN<W1A;G1I871E9"!I;B!T
M:&4@3DE"("AT:&ES(&ES('=H870@22!I;FET:6%L;'D@;65A;G0L(&%N>7=A
M>2DN("!!;&5R="!P86YE;',L(&UI8W)O+7!A;F5L<RP@86YD('1H92!L:6ME
M(&%R92!G96YE<F%L;'D@:6YS=&%N=&EA=&5D('9I82!P<F]G<F%M(&QO9VEC
M("AV:6$@(DY84G5N06QT97)086YE;"@I(BP@87,@;VYE('!O<W-I8FQE(&5X
M86UP;&4I+EP*7`I!;'-O(&YO=&EC92!T:&4@8VQA<FEF:6-A=&EO;B!A="!T
M:&4@96YD(&]F('1H92!P87)A9W)A<&@@<F5G87)D:6YG(&QO8V%L:7IE9"!.
M24(G<R`H22!H860@;VYE('!E<G-O;B!E;6%I;"!M92!I;B!D:7-A9W)E96UE
M;G0L(&%R9W5I;F<@=&AA="!T:&5Y('=A;G1E9"!L;V-A;&EZ960@3DE"(&YA
M;65S(&EN<W1E860I+EP*(%P*"EQB,"`^("`@(%P*"EQI7&QI-30P7&9C,5QC
M9C$@/B!/<BP@870@=&AE('9E<GD@;&5A<W0L('1H92!N86UE(&]F('1H92!.
M24(@9FEL92`H86YD('1H97)E9F]R92!T:&4@87-S;V-I871E9"!C;&%S<R!F
M:6QE<RD@<VAO=6QD(&)E(&]B=FEO=7,@=&\@9&5T97)M:6YE('-I;7!L>2!B
M>2!L;V]K:6YG(&%T('1H92!P86YE;"`H;W(@=VEN9&]W*2!N86UE+B`@26X@
M=&AI<R!W87DL('-I;7!L>2!R=6YN:6YG('1H92!P<F]G<F%M('=I;&P@9VEV
M92!A;F]T:&5R('!R;V=R86UM97(@82!V97)Y(&=O;V0@:61E82!O9B!T:&4@
M;V)J96-T('-T<G5C='5R92!O9B!T:&4@<')O9W)A;2P@<VEN8V4@:&4@8V%N
M('!L86EN;'D@<V5E(&%L;"!O9B!T:&4@<&%N96QS(&%N9"!W:6YD;W=S+"!A
M;F0@=&AE:7(@;F%M97,L('=H:6QE('1H92!P<F]G<F%M(&ES(')U;FYI;F<N
M7`H*7&DP7&QI,%QF8S!<8V8P(%P*06=A:6XL(&UA;GD@;FEB<R!D;VXG="!S
M:&]W('1I=&QE<RX@06YO=&AE<B`H<&]S<VEB;&4I(&-O;G-I9&5R871I;VXZ
M(&EN9F]R;6%T:6]N(&AI9&EN9RX@268@>6]U(&%R92!D:7-T<FEB=71I;F<@
M<V]U<F-E(&9O<B!P=6)L:6,@8V]N<W5M<'1I;VX@=&AE;B!I<R!P<F]B86)L
M>2!N;W0@=VAA="!Y;W4@=V%N="!T;R!D;RX@268@>6]U(&%R92!S96QL:6YG
M(&%N(&%P<&QI8V%T:6]N+"!Y;W4@;6%Y('=I<V@@=&\@96YC;V1E('-O;64@
M=&AI;F=S+B!3;VUE('9E;F1E<G,@9&\@8V]N<VED97(@:70@87!P<F]P<FEA
M=&4N7`I<"@I<8B!)('!R97-U;64@>6]U(&UE86XZ(")S;VUE('!A;F5L<R]W
M:6YD;W=S(&EN('-O;64@3DE")W,@9&]N)W0@:&%V92!T:71L97,B+B`@37D@
M<75E<W1I;VX@=V]U;&0@=&AE;B!B93H@=VAY(&1O97-N)W0@=&AE('!A;F5L
M+W=I;F1O=R!H879E(&$@=&ET;&4_("!7:&%T('=O=6QD(&ET(&AU<G0@=&\@
M<'5T(&$@=&ET;&4@:6X_("!.;W1E('1H870@=&AE(')U;&4@22!G879E(&1O
M97,@9VEV92!Y;W4@<V]M92!D:7-C<F5T:6]N(&EN('1H92!C:&]I8V4@;V8@
M=&AE('1I=&QE.EP*7`H*7'!A<F1<='@U-C!<='@Q,3(P7'1X,38X,%QT>#(R
M-#!<='@R.#`P7'1X,S,V,%QT>#,Y,C!<='@T-#@P7'1X-3`T,%QT>#4V,#!<
M9C)<:5QF<S(X7&QI-S(P7&9C,%QC9C`@3W(L(&%T('1H92!V97)Y(&QE87-T
M+"!T:&4@;F%M92!O9B!T:&4@3DE"(&9I;&4@*&%N9"!T:&5R969O<F4@=&AE
M(&%S<V]C:6%T960@8VQA<W,@9FEL97,I('-H;W5L9"!B92!O8G9I;W5S('1O
M(&1E=&5R;6EN92!S:6UP;'D@8GD@;&]O:VEN9R!A="!T:&4@<&%N96P@*&]R
M('=I;F1O=RD@;F%M92X@($EN('1H:7,@=V%Y+"!S:6UP;'D@<G5N;FEN9R!T
M:&4@<')O9W)A;2`H=VET:"!T:&4@87!P<F]P<FEA=&4@9&5F875L="!L86YG
M=6%G92D@=VEL;"!G:79E(&%N;W1H97(@<')O9W)A;6UE<B!A('9E<GD@9V]O
M9"!I9&5A(&]F('1H92!O8FIE8W0@<W1R=6-T=7)E(&]F('1H92!P<F]G<F%M
M+"!S:6YC92!H92!C86X@<&QA:6YL>2!S964@86QL(&]F('1H92!P86YE;',@
M86YD('=I;F1O=W,L(&%N9"!T:&5I<B!N86UE<RP@=VAI;&4@=&AE('!R;V=R
M86T@:7,@<G5N;FEN9RX*7&DP(%P*"EQP87)D7'1X-3(P7'1X,3`V,%QT>#$V
M,#!<='@R,3(P7'1X,C8V,%QT>#,R,#!<='@S-S(P7'1X-#(V,%QT>#0X,#!<
M='@U,S(P7&8P7&9S,C1<9F,P7&-F,"!<"DAO=V5V97(L('EO=2!M86ME(&$@
M9V]O9"!P;VEN="!A8F]U="!E;F-O9&EN9RX@($ET(&UI9VAT(&)E(&%N(&ES
M<W5E(&]N('-O;64@<')O:F5C=',N7`H*7&(P(%P*/B`J*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*EP*/B!<"@I<:5QL:34T,%QF8S%<8V8Q(#X@5VAE
M;B!G:79E;B!A(&-H;VEC92!O9B!F97=E<B!O8FIE8W1S('1H870@9&\@;6]R
M92P@=F5R<W5S(&UO<F4@;V)J96-T<R!T:&%T(&%R92!S;6%L;&5R(&%N9"!D
M;R!L97-S+"!F879O<B!T:&4@=7-E(&]F('-M86QL97(@;V)J96-T<RX@(%EO
M=2=L;"!F:6YD('1H870@>6]U<B!O8FIE8W1S('=I;&P@9W)O=R!L87)G97(@
M9'5R:6YG(&1E=F5L;W!M96YT(&%N>7=A>2Y<"@I<:3!<;&DP7&9C,%QC9C`@
M7`I'96YE<F%L;'D@22=D(&%G<F5E+B!(;W=E=F5R+"!I9B!Y;W4G<F4@=&%L
M:VEN9R!A8F]U="!M86YA9VEN9R!S87DL(#$P,#`@8VQA<W-E<RP@>6]U)VQL
M(&9I;F0@82!C97)T86EN(')E9'5N9&%N8WD@<W1A<G1S('1O(&-R965P(&EN
M+B!/3U`@:6X@9V5N97)A;"!H87,@=&\@9&\@=VET:"!T:&4@;6%N86=E;65N
M="!O9B!I;F9O<FUA=&EO;BX@1&\@>6]U('=A;G0@=&\@;6%N86=E(&UO<F4@
M;W(@;&5S<R!T:&EN9W,@=VET:&EN(&$@9FEL93\@1&\@>6]U('=A;G0@=&\@
M;6%N86=E(&UO<F4@;W(@;&5S<R!T:&EN9W,@86UO;F<@9FEL97,_7`I<"@I<
M8B!!;B!O8FIE8W0@8V%N(&UA;F%G92!M;W)ET&%N9"!S=&EL;"!B92!S;6%L
M;"!I;B!T97)M<R!O9B!T:&4@8V]D92!I="!C;VYT86EN<]!I9B!I="!D96QE
M9V%T97,@:70G<R!W;W)K('1O(&]T:&5R(&]B:F5C=',N("!4;R!U<V4@82!H
M;W5S92UC;VYS=')U8W1I;VX@;65T87!H;W(Z(#0@8F]A<F1S(&%N9"!S;VUE
M(&YA:6QS(&UI9VAT(&UA:V4@82!P86YE;#L@,R!O<B`T('!A;F5L<R!M:6=H
M="!M86ME(&$@=V%L;"P@-"!W86QL<R!A;F0@82!F;&]O<B!M:6=H="!M86ME
M(&$@<F]O;2P@,R!R;V]M<R!M:6=H="!M86ME(&$@9FQO;W(L(&%N9"`S(&9L
M;V]R<R!A;F0@82!R;V]F(&UI9VAT(&UA:V4@82!H;W5S92X@($%N9"P@:6X@
M96%C:"!C87-E+"!T:&4@;V)J96-T(&ES('-M86QLT&5V96X@=&AE(")H;W5S
M92(@;V)J96-T+EP*"EQB,"!<"E!E;W!L92!A<F4@<W1I;&P@96YA;6]R960@
M96YO=6=H('=I=&@@3T]0(&5N;W5G:"!T;R!N;W0@<V5E('1H92!S96-O;F0@
M<VET=6%T:6]N.B`@;V)J96-T<R!A;&QO=R!A(&5N8V%P<W5L:7IA=&EO;B!O
M9B!R96QA=&5D(&-O9&4@<V\@=V4@8V%N(&%V;VED('-I='5A=&EO;G,@;V8@
M=&EG:'1L>2!W<F%P<&5D(&-O9&EN9RX@3V)J96-T('-Y<W1E;7,@<W1I;&P@
M96YD('5P(&)E:6YG('1I9VAT;'D@8F]U;F0@86UO;F<@<V5T<R!O9B!O8FIE
M8W1S+B!/3U`@:&%S(&YO="`G<V]L=F5D)R!T:&4@<')O8FQE;2P@;VYL>2!P
M=7-H960@:70@9G5R=&AE<B!B86-K+"!A="!W:&EC:"!S=&%G92!T:&4@<')O
M8FQE;2!B96-O;65S(&5V96X@8FEG9V5R+B!#;VYS:61E<B!T:&4@:6UP86-T
M<R!O9B!F879O<FEN9R!S;6%L;&5R(&]B:F5C=',@=VAE;B!Y;W5R(&]B:F5C
M=',@8F5C;VUE(&EN=&5R9&5P96YD96YT(&%N9"!A8G5N9&%N="Y<"EP*"EQB
M($ES('1H92`B<F]O;2(@;V)J96-T('1I9VAT;'D@8F]U;F0@=&\@=&AE(")H
M;W5S92(@;V)J96-T(&9R;VT@;7D@;65T87!H;W(@86)O=F4_("!.;RY<"EP*
M27,@=&AE(")R;V]M(B!O8FIE8W0@=&EG:'1L>2!B;W5N9"!T;R!T:&4@(F)O
M87)D(B!O8FIE8W0@9G)O;2!M>2!M971A<&AO<B!A8F]V93\@($YO+B`@270G
M<R!P97)F96-T;'D@86-C97!T86)L92!T;R!B=6EL9"!T:&4@=V%L;',@;V8@
M=&AE(')O;VT@=VET:"!A;F]T:&5R(&UA=&5R:6%L("AS=6-H(&%S(&)R:6-K
M*2P@87,@;&]N9R!A<R!T:&4@<F]O;2!I<R!S=&EL;"!A(')O;VTN("!);B!O
M=&AE<B!W;W)D<RP@:70G<R!/2R!T;R!I;7!R;W9E('1H92!A;&=O<FET:&TN
M7`I<"DEF('EO=2!M86ME(&$@;6ES=&%K92!A;F0@9&ES8V]V97(@=&AA="!Y
M;W5R(')O;VUS(&)U:6QT('=I=&@@8F]A<F1S(&%R92!O8G-O;&5T92`H;6%Y
M8F4@>6]U('5S960@8F%L<V$@=V]O9#\I+"!A;F0@>6]U(&YO(&QO;F=E<B!W
M86YT(')O;VUS('1H870@=V%Y("AB=70@;75S="!K965P('EO=7(@;VQD(&)A
M;'-A+7=O;V0@<F]O;7,@87)O=6YD(&)E8V%U<V4@;V8@<V]M92!P96-U;&EA
M<B!B86-K=V%R9',@8V]M<&%T86)I;&ET>2!P<F]B;&5M*2P@:G5S="!M87)K
M('EO=7(@(G)O;VTB(&]B:F5C="!A<R!O8G-O;&5T92`H86YD(&%L<V\@:70G
M<R!S=7!P;W)T(&]B:F5C=',I('-O(&YO8F]D>2!W:6QL('5S92!I="!A9V%I
M;B!F;W(@86YY(&YE=R!F;&]O<B!O9B!A;GD@;F5W(&AO=7-E+B`@(%1H96X@
M8W)E871E(&$@(F)R:6-K+7)O;VUS(B!O8FIE8W0@*&%N9"!I="=S('-U<'!O
M<G0@;V)J96-T<RD@9F]R(&9U='5R92!U<V4N("!4:&5N+"!K965P(&)O=&@@
M(G)O;VTB(&]B:F5C=',@*&%N9"!T:&5I<B!S=7!P;W)T(&]B:F5C=',I(&EN
M('EO=7(@;&EB<F%R>2X@($%L;"!N97<@8V]D92!W:6QL('5S92!T:&4@;F5W
M(&]B:F5C=',L(&%N9"!E=F5N='5A;&QY('1H92!O;&0@;V)J96-T<R!W:6QL
M(&1I92!A(&YA='5R86P@9&5A=&@N7`I<"DEN8VED96YT86QL>2P@22!T:&EN
M:R!T:&ES(&ES(&]N92!O9B!T:&4@;F5A="!T:&EN9W,@;V8@3V)J96-T:79E
M+4,@*'9E<G-U<R!#*RLI+B`@66]U(&-A;B!C<F5A=&4@;F5W+"!L;V=I8V%L
M;'DM<F5L871E9"!O8FIE8W0@0VQA<W-E<RP@86YD('!O;'EM;W)P:&EC86QL
M>2!M97-S86=E('1H96TL('=I=&AO=70@=&AE;2!A;&P@:&%V:6YG('1O(&EN
M:&5R:70@9G)O;2!T:&4@<V%M92!B87-E(&-L87-S+B`@5&AU<RP@:70G<R!M
M;W)E(&9O<F=I=FEN9R!O9B!M:7-T86ME<R!I;B!Y;W5R(&EN:71I86P@0VQA
M<W,@:&EE<F%R8VAY(&1E<VEG;B!T:&%N($,K*R!I<RX@(%=I=&@@0RLK+"!I
M9B!Y;W4@<&]O<FQY(&1E<VEG;B!Y;W5R(&-L87-S(&AI97)A<F-H>2P@>6]U
M)W)E('-C<F5W960L('-I;F-E('EO=2=L;"!P<F]B86)L>2!N;W<@:&%V92!T
M;R!R92UI;7!L96UE;G0@;6%J;W(@<&%R=',@;V8@=&AE($-L87-S(&AI97)A
M<F-H>2Y<"@I<8C`@7`I))VT@;F5I=&AE<B!F;W(@;W(@86=A:6YS="!L87)G
M92]S;6%L;"!O8FIE8W1S.R!))VT@9F]R(&%P<&QY:6YG('=H870@8F5S="!S
M=6ET<R!T:&4@8FEG('!I8W1U<F4N7`I<"CX@7`H^("HJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ7`H^(`E<"@I<:5QL:34T,%QF8S%<8V8Q(#X@22!H
M879E(&YO="P@87,@>65T+"!S965N(&$@<VEN9VQE(&-O;G9I;F-I;F<@<VET
M=6%T:6]N('=H97)E('!U8FQI8R!I;G-T86YC92!V87)I86)L97,@=V5R92!N
M96-E<W-A<GD@;W(@979E;B!D97-I<F%B;&4L(&%L=&AO=6=H($D@86T@:&5S
M:71A;G0@=&\@<V%Y('1H870@=&AE<F4@87)E(&YO;F4N("XN+EP*"EQF8S!<
M8V8P(%5N;&5S<R!O=&AE<G=I<V4@8V]N=FEN8V5D(&9O<B!S<&5C:6%L(&]C
M8V%S<VEO;G,L(&%L;"!I;G-T86YC92!V87)I86)L97,@<VAO=6QD(&]N;'D@
M8F4@;6]D:69I86)L92!B>2!A(&-L87-S(&UE=&AO9"`H:2YE+BP@3D]4(&)E
M('!U8FQI8RDN("!)="!S:&]U;&0@86QS;R!N;W0@8F4@;6]D:69I86)L92!B
M>2!M;W)E('1H86X@;VYE(&-L87-S(&UE=&AO9"Y<"@I<:3!<;&DP(%P*270@
M9&5P96YD<R!O;B!H;W<@(G!U<FES="(@;W(@=&AE;W)E=&EC86P@=G,N('!R
M86-T:6-A;"!Y;W4@=V%N="!T;R!G970N(%=I=&AI;B!T:&4@<V%M92!M;V1U
M;&4O8VQA<W,@:70@;6%Y(&)E(&%C8V5P=&%B;&4@=&\@<F5F97(@=&\@=&AE
M(&EN<W1A;F-E('9A<FEA8FQE('9S+B!T:&4@;65T:&]D+"!E<W!E8VEA;&QY
M('=H97)E('-P965D(&ES(&-O;F-E<FYE9"Y<"EP*"EQB($EF(&ET)W,@=VET
M:&EN('1H92!S86UE(&EN<W1A;F-E(&]F(&$@8VQA<W,@*&DN92XL('1H92!S
M86UE(")M;V1U;&4B/]!W:&%T(&1O('EO=2!M96%N(&)Y(&$@(FUO9'5L92(L
M(&%N>7=A>3\I+"!T:&4@:6YS=&%N8V4@=F%R:6%B;&5S(&]F(&$@9VEV96X@
M:6YS=&%N8V4@;V8@82!C;&%S<R!A<F4@86-C97-S:6)L92!T;R!A;&P@;65T
M:&]D<R!O9B!T:&%T(&EN<W1A;F-E(&%N>7=A>2P@<F5G87)D;&5S<R!O9B!T
M:&4@=F%R:6%B;&5S)R!C;&%S<VEF:6-A=&EO;B`H<'5B;&EC+"!P<F]T96-T
M960L(&]R('!R:79A=&4IT'-O(&EN('1H:7,@8V%S92!T:&5R92!W;W5L9"!B
M92!N;R!A9'9A;G1A9V4@=&\@9&5C;&%R:6YG(&%N>2!O9B!T:&5M('!U8FQI
M8RY<"EP*0G5T+"!I9B!Y;W4@87)E('1A;&MI;F<@86)O=70@9&EF9F5R96YT
M(&EN<W1A;F-E<R!O9B!T:&4@<V%M92!C;&%S<]!W:&%T(')E;&5V86YC92!D
M;V5S('1H92!F86-T('1H870@=&AE>2!A<F4@;V8@=&AE('-A;64@8VQA<W,@
M:&%V93\@($D@9W5E<W,@:68@:70@97AE8W5T97,@9F%S=&5R+"!T:&5N('=E
M('-H;W5L9"!A;&P@:G5S="!G;R!B86-K('1O(&AA=FEN9R!G;&]B86P@=F%R
M:6%B;&5S(&9O<B!E=F5R>71H:6YG("AA;&$@5VEN9&]Z92D_7`I<"DD@9G5L
M;'D@97AP96-T('1O(&5V96YT=6%L;'D@96YC;W5N=&5R('-O;64@8V%S92!W
M:&5R92!T:&4@:6YS=&%N8V4@=F%R:6%B;&5S(&YE960@=&\@8F4@<'5B;&EC
MT&9O<B!S<&5E9"!O9B!E>&5C=71I;VX@<F5A<V]N<R!A<R!Y;W4@<W5G9V5S
M="X@($D@:G5S="!H879E;B=T('-E96X@=&AA="!C87-E('EE="X@($%N9"P@
M=VAE;B!I="!H87!P96YS+"!)(&IU<W0@=&AI;FL@:70@<VAO=6QD(&)E('-U
M:71A8FQY(&1O8W5M96YT960@:6X@=&AE(&-O9&4@*&DN92XL(&5X<&QA:6YE
M9"!W:'D@=&AE('!U8FQI8R!D96-L87)A=&EO;G,@=V5R92!N96-E<W-A<GG0
M86YD(&%L<V\@:6X@;F]N+6%M8FEG=6]U<RP@=F5R>2!S<&5C:69I8R!T97)M
M<RD@+B`@3W1H97)W:7-E+"!S=&%Y(&%W87D@9G)O;2!P=6)L:6,@9&5C;&%R
M871I;VYS+EP*"EQB,"!<"CX@(%P*/B`J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*EP*/B`@("`@(%P*"EQI7&QI-30P7&9C,5QC9C$@/B!296%L:71Y
M($-H96-K:6YG(&EN("=#)R!C;V1E("AA<R!W96QL(&%S(&%L;"!O9B!T:&4@
M)T,G(&QA;F=U86=E(&1E<FEV871I=F5S+"!S=6-H(&%S($]B:F5C=&EV92U#
M*2!I<R!A8V-O;7!L:7-H960@=VET:"!T:&4@87-S97)T*"D@;6%C<F\N("!"
M<F%D($-O>"P@=&AE(&-R96%T;W(@;V8@3V)J96-T:79E+4,L(')E8V]M;65N
M9',@=7-I;F<@87-S97)T<R`H<"X@.3@@86YD(#DY(&]F(&AI<R!B;V]K+"!/
M8FIE8W0M3W)I96YT960@4')O9W)A;6UI;F<L($%N($5V;VQU=&EO;F%R>2!!
M<'!R;V%C:"P@,FYD($5D:71I;VXI(&9O<B!296%L:71Y($-H96-K:6YG("AH
M92!C86QL<R!I="!S;VUE=&AI;F<@96QS92P@=&AO=6=H*2!A;F0@8VQU<W1E
M<FEN9R!T:&4@8VAE8VMS(&EN=&\@='=O(&=R;W5P<SH@*#$I('!R96-O;F1I
M=&EO;G,L(&%N9"`H,BD@<&]S=&-O;F1I=&EO;G,N("!4:&4@861V86YT86=E
M(&]F('5S:6YG(&%S<V5R="@I(&ES('1H870@=&AI<R!D96)U9V=I;F<@8V]D
M92!C86X@8F4@='5R;F5D(&]F9B!W:71H(&$@8V]M<&EL92UT:6UE('-W:71C
M:"Y<"@I<:3!<;&DP7&9C,%QC9C`@/B!<"CX@22!D;VXG="!E;G1I<F5L>2!A
M9W)E92!W:71H('1H:7,@87!P<F]A8V@L(&9O<B!A(&-O=7!L92!O9B!R96%S
M;VYS.EP*/B`@("!<"CX@02!P<F5C;VYD:71I;VX@87-S97)T('-H;W5L9"!V
M97)I9GD@=&AA="!T:&4@87)G=6UE;G0@=F%L=65S(&%N9"]O<B!T>7!E<R!A
M<F4@87,@=&AE>2!S:&]U;&0@8F4@9F]R('1H92!M971H;V0@=&\@=V]R:R!P
M<F]P97)L>2X@($EN=&5R97-T:6YG;'D@96YO=6=H+"!E>&-E<'0@<&]S<VEB
M;'D@=VET:"!R96%L;'D@;V)S8W5R92!C;V1E("AA;F0@22!C86XG="!E=F5N
M('1H:6YK(&]F(&%N(&5X86UP;&4I+"!T:&4@8V]M<&EL97(@86YD+V]R(')U
M;G1I;64@<WES=&5M('=I;&P@9&\@=&AI<R!F;W(@>6]U+"!S;R!W:'D@9&\@
M>6]U(&YE960@86X@87-S97)T(&9O<B!T:&ES(&-A<V4_("`H3V)J96-T:79E
M+4,@:&%S(&$@=6YI<75E(')U;G1I;64@<WES=&5M('1H870@86QM;W-T(&YO
M(&]T:&5R(&QA;F=U86=E(&AA<RDN7`I<"EEO=2!M:6=H="!B92!A8FQE('1O
M(&=A:6X@82!F=6QL97(@87!P<F5C:6%T:6]N(&9O<B!P<F5C;VYD:71I;VYS
M(&)Y(')E861I;F<@(D]B:F5C="!/<FEE;G1E9"!$97-I9VXB(&)Y($)E<G1R
M86YD($UE>65R+"!W:&EC:"!I<R!W:&5R92!"<F%D($-O>"!P:6-K960@=7`@
M=&AE(&YO=&EO;B!O9B!P<F5C;VYD:71I;VYS(&%N9"!P;W-T8V]N9&ET:6]N
M<RY<"EP*5&AE<F4@87)E('-E=F5R86P@=&AI;F=S('1H870@>6]U<B!D:7-C
M=7-S:6]N(&UI<W-E<RX@02!C;VUP:6QE<B!C86X@8VAE8VL@='EP92!I;F9O
M<FUA=&EO;B`H:7,@=&AI<R!A;B!I;G0L(&$@8V]N<W0@8VAA<BHL('1H92!C
M;W)R96-T(&]B:F5C="DL(&)U="!I="!C86YN;W0@9W5A<F%N=&5E('1H92!C
M;VYD:71I;VX@;V8@=&AA="!A<F=U;65N="`H:7,@=&AI<R!I;G0@8F5T=V5E
M;B!V86QU97,@02!A;F0@0BP@:7,@=&AE(&-O;G-T(&-H87(J(&$@=6YI<75E
M('-T<FEN9RP@:7,@=&AI<R!O8FIE8W0@:6YI=&EA;&EZ960@=&\@=&AE('!R
M;W!E<B!S=&%T92DN($9U<G1H97)M;W)E+"!P<F5C;VYD:71I;VYS(&UA>2!E
M>'1E;F0@=&\@:6UP;&EC:70@87)G=6UE;G1S("AG;&]B86P@<W1A=&4L(&]B
M:F5C="!S=&%T92DL('=H:6-H(&%L<V\@;F5E9',@=&\@8F4@=F5R:69I960N
M($9O<B!E>&%M<&QE.R!A<F4@=V4@8W5R<F5N=&QY('!R:6YT:6YG/R!)<R!T
M:&4@87-S;V-I871E9"!N:6(@9F]R('1H:7,@;V)J96-T(&%L<F5A9'D@;&]A
M9&5D+EP*7`I0;W-T8V]N9&ET:6]N<R!A<F4@=')E871E9"!I;B!A('-I;6EL
M87(@9F%S:&EO;B`H=&AE(&UE=&AO9"!O<&5R871E<R!O;B!S=&%T92!T;R!P
M<F]D=6-E(&$@<F%N9V4@;V8@<F5S=6QT<SL@87)E('1H92!R97-U;'1S(&EN
M('1H92!E>'!E8W1E9"!R86YG93\I+EP*7`I!('1H:7)D(&-H96-K:6YG('1H
M870@:7,@;&5F="!O=70@*$DG;&P@:&%V92!T;R!R92UR96%D($-O>"P@87,@
M22!B96QI979E(&AE(&UI<W-E<R!T:&ES(&%S('=E;&PI+"!I<R!I;G9A<FEE
M;G1S+B!4:&%T(&ES+"!W:&%T(&%R92!T:&]S92!S=&%T97,@=VAI8V@@;6%Y
M(&5F9F5C="!O=71C;VUE('=H:6-H(&AA=F4@;F]T:&EN9R!T;R!D;R!W:71H
M(&EN<'5T<RX@5&AI<R!I;F-L=61E<R!E;G9I<F]N;65N="!C;VYD:71I;VYS
M("AM96UO<GDL(&1I<VLL('1H<F5A9',L(&5T8RDL(&=L;V)A;',@86YD('-O
M;64@;&]C86P@<W1A=&4N7`I<"@I<8B!3;VUE('9E<GD@9V]O9"!P;VEN=',N
M("!)(&YE960@=&\@<W1U9'D@:70@<V]M92!M;W)E+EP*7`I))W9E(&)E96X@
M9FEN9&EN9R!T:&%T('1H92!T:&ER9"!C:&5C:VEN9R!Y;W4@;65N=&EO;B`H
M:6YV87)I96YT<RD@:7,@97-P96-I86QL>2!I;7!O<G1A;G0@=VET:"!$:7-T
M<FEB=71E9"!/8FIE8W1S+B`@5&AE<V4@='EP97,@;V8@;V)J96-T<R!S965M
M('1O(&5I=&AE<B!N965D('-T871E+6UA8VAI;F4@;&]G:6,@:6YS:61E(&]F
M('1H96TL(&]R(&5L<V4@<')O=FED92!S;VUE('-O<G0@;V8@;75T97@M;&]C
M:VEN9R!M971H;V1S+B`@06YD(&EN(&%N>2!C87-E+"!T;R!I;7!L96UE;G0@
M<W5C:"!M96-H86YI<VUS+"!T:&4@;V)J96-T(&UU<W0@(G)E;65M8F5R(B!W
M:&\@<V5N="!E86-H(&UE<W-A9V70<V\@(G-T871E(B!I;F9O<FUA=&EO;B!I
M<R!Q=6ET92!C;VUM;VXN7`I<"D9O<B!E>&%M<&QE+"!S=7!P;W-E('EO=2!M
M97-S86=E(&$@<F5M;W1E(&]B:F5C="!T;R!L;V%D(&%N($Y826UA9V4L('=I
M=&@@=&AE(&EN=&5N="!T;R!M97-S86=E(&ET(&%F=&5R=V%R9',@=&\@871T
M86-H('-O;64@861D:71I;VYA;"!I;F9O<FUA=&EO;B!T;R!T:&4@:6UA9V4L
M('1H96X@9FEN86QL>2!M97-S86=E(&ET('1O('-A=F4@=&AE(&EM86=E(&%N
M9"!I="=S('1A9V=E9"!D871A('1O(&$@9&%T86)A<V4N("!.;W<@<W5P<&]S
M92!T:&%T(&)E9F]R92!Y;W4@<V5N9"!T:&4@;65S<V%G92!T;R!S879E('1H
M92!D871A+"!S;VUE(&]T:&5R(')E;6]T92!O8FIE8W0@;65S<V%G97,@:70@
M=&\@;&]A9"!A(&1I9F9E<F5N="!.6$EM86=E+B`@1&ES87-T97(N+BXN7`I<
M"E1H92!A8FEL:71Y(&9O<B!A;GD@;V)J96-T(&]N('1H92!N971W;W)K('1O
M(&UE<W-A9V4@86YY(&]T:&5R(&]B:F5C="!O;B!T:&4@;F5T=V]R:R!C86X@
M;&5A9"!T;R!C:&%O<R!I9B!S=6ET86)L92!P<F5C875T:6]N<R!A<F5N)W0@
M=&%K96XN("!!;F0L(&%S($D@<V%I9"!A8F]V92P@=&AE<V4@<')E8V%U=&EO
M;G,@<V5E;2!T;R!A;'=A>7,@<F5Q=6ER92!S;VUE('-O<G0@;V8@(G-T871E
M(B!M96UO<GD@9F]R('1H92!O8FIE8W0N7`H*7&(P("XN+EP*7`IP<F]T;V-O
M;',@87)E(&-O;VPL(&)U="!N;W0@<W5P<&]R=&5D(&]U='-I9&4@3F585"`Z
M+2A<"EP*7`H*7&(@(%-O/R`Z+2D@7`H*7&(P(%P*7`H^("!<"CX@*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BI<"@I<:5QL:34T,%QF8S%<8V8Q(#X@
M365T:&]D<R!M=7-T(&%P<&5A<B!I;B!B;W1H('1H92!I;7!L96UE;G1A=&EO
M;BUM;V1U;&4@86YD(&EN=&5R9F%C92UM;V1U;&4@:6X@=&AE('-A;64@;W)D
M97(@=&AA="!T:&5Y(&%P<&5A<B!I;B!S=&%N9&%R9"!.95A4(&-L87-S(&1O
M8W5M96YT871I;VX@+BXN7`H*7&DP7&QI,%QF8S!<8V8P(%P*4V5E:6YG(&%S
M($YE6%0@:V5E<',@='=E86MI;F<@=&AE:7(@;W=N(&1E9FEN:71I;VYS("AW
M:71N97-S(#,N,"!D;V-S*2P@86YD(&MN;W=I;F<@<V]M92!O9B!T:&4@<VAO
M<G1C;VUI;F=S("AL:6ME(&1E;&5G871E(&UE=&AO9"!L;V]K=7`I($DG;2!N
M;W0@96YA;6]R960@=VET:"!T:&4@<W5G9V5S=&EO;BX@5V4@8G)E86L@=&AI
M;F=S(&EN=&\@;&]G:6-A;"!G<F]U<&EN9W,@*&5X:7-T96YC92P@86-C97-S
M;W(L(&DO;RP@971C*2!W:71H:6X@=&AE(&AE861E<B!A;F0@;6]D=6QE(&9I
M;&5S+B!4:&ES(&%L;&]W<R!A('!R;V=R86UM97(@<75I8VL@86-C97-S('1O
M(')E;&%T960@<F5G:6]N<R`H=VAI8V@@=V4@9&5E;2!P<F5T='D@:6UP;W)T
M86YT*2X@26X@9F%C="P@22=D('=A9V5R('EO=2=L;"!E;F-O=6YT97(@;6]R
M92!P<F]D=6-T:6]N('!R;V)L96US("AI+F4N(&)U9W,I(&)Y(&-O9&4@=&AA
M="!I<R!S<')E860@;W5T(&%L<&AA8F5T:6-A;&QY('1H870@8VQU<W1E<F5D
M(&EN=&\@;&]G:6-A;"!G<F]U<',N7`I<"@I<<&%R9%QT>#4V,%QT>#$Q,C!<
M='@Q-C@P7'1X,C(T,%QT>#(X,#!<='@S,S8P7'1X,SDR,%QT>#0T.#!<='@U
M,#0P7'1X-38P,%QF,EQB7&9S,CA<9F,P7&-F,"!9;W5R('!O:6YT(&AE<F4@
M:7,@=V5L;"UT86ME;BX@($EN(&9A8W0L($D@8V]N<VED97)E9"!T:&ES(&%P
M<')O86-H(&9O<B!Q=6ET92!A('=H:6QE+"!A;F0@979E;B!I;FET:6%L;'D@
M=W)O=&4@;7D@8V]D92!I;B!T:&4@;6%N;F5R('EO=2!S=6=G97-T+B`@5&AE
M('!R;V)L96T@=V%S('1H870@:70@:G5S="!W87-N)W0@=&AA="!E87-Y('1O
M(&-A=&5G;W)I>F4@;6%N>2!O9B!T:&4@;65T:&]D<RP@86YD('=H870@;6%D
M92!S96YS92!T;R!M92!F;W(@82!C871E9V]R>2!F;W(@82!M971H;V0@9&ED
M;B=T(&YE8V5S<V%R:6QY(&UA:V4@<V5N<V4@=&\@;W1H97)S+"!A;F0@=FES
M82UV97)S82X@($ET('-E96US('1H870L(&9O<B!T:&]S92!G<F%Y(&%R96%S
M('=H97)E(&$@;65T:&]D(&-O=6QD(&%C='5A;&QY(&)E(&UU;'1I<&QY+6-A
M=&5G;W)I>F5D+"!E=F5R>6]N92!H87,@=&AE:7(@;W=N(&ED96$@;V8@=VAE
M<F4@:70@8F5L;VYG<RX@($%F=&5R(&%W:&EL92P@8VAA;W,@<V5E;7,@=&\@
M96YS=64N7`H*7'!A<F1<='@U,C!<='@Q,#8P7'1X,38P,%QT>#(Q,C!<='@R
M-C8P7'1X,S(P,%QT>#,W,C!<='@T,C8P7'1X-#@P,%QT>#4S,C!<9C!<8C!<
M9G,R-%QF8S!<8V8P(%P*"EQP87)D7'1X-38P7'1X,3$R,%QT>#$V.#!<='@R
M,C0P7'1X,C@P,%QT>#,S-C!<='@S.3(P7'1X-#0X,%QT>#4P-#!<='@U-C`P
M7&8R7&)<9G,R.%QF8S!<8V8P($D@<W1I;&P@=&AI;FL@:70G<R!B971T97(@
M=&\@86QP:&%B971I>F4@=&AE;2!W:71H:6X@=&AE:7(@<F5S<&5C=&EV92!G
M<F]U<',L('=I=&@@0VQA<W,@;65T:&]D<R!A="!T:&4@=&]P+"!I;G-T86YC
M92!M971H;V1S(&EN('1H92!M:61D;&4L(&%N9"!D96QE9V%T92!M971H;V1S
M(&%T('1H92!B;W1T;VTN7`I<"DAO=V5V97(L('1H;W-E(#,@9W)O=7!S('-H
M;W5L9"!O;FQY(&)E('-U8BUG<F]U<',@;V8@=&AE(&)I9V=E<B!G<F]U<',@
M:6UP;&EE9"!B>2!I;G1E<F9A8V4@;V)J96-T<R!A8W)O<W,@;75L=&EP;&4@
M*'-U8BEP<F]J96-T<RX@(%1H:7,@=VEL;"!B92!A('!A<G0@;V8@;7D@(G-U
M8BUP<F]J96-T<R(@9W5I9&5L:6YE<RY<"@I<<&%R9%QT>#4R,%QT>#$P-C!<
M='@Q-C`P7'1X,C$R,%QT>#(V-C!<='@S,C`P7'1X,S<R,%QT>#0R-C!<='@T
M.#`P7'1X-3,R,%QF,%QB,%QF<S(T7&9C,%QC9C`@7`IR96=A<F1S+%P*7`I+
M979I;EP*+2U<"@I<9C$@2V5V:6X@4W9E;B!"97)G("`@("`@("`@("`@("`@
M+R`@("`O("`@("\@("`@+R`@4"`O("!A("\@(&<@+R`@92`O("!S7`IK979I
M;D!P86=E<RYC;VT@("`@("`@("`@("`@("\@("`@+R`@("`O("`@("\@("`@
M+R`@("`O("`@("\@("`@+R!<"E!A9V5S(%-O9G1W87)E($EN8RX@("`@("`@
M("`O("`@("\@("`@+R`@("`O("`@("\@("`@+R`@("`O("`@("\@("!<"C8Q
M.2TT.3(M.3`U,"`@7`H*7'!A<F1<='@Q,34R7'1X,C,P-%QT>#,T-39<='@T
M-C`X7'1X-3<V,%QT>#8Y,3)<='@X,#8T7'1X.3(Q-EQT>#$P,S8X7'1X,3$U
M,C!<9F,P7&-F,"!<"EP*+2U<"DYE=FEN(%!R871T+"!$:6=I=&%L(%1E8VAN
M;VQO9WDL($EN="=L("`@($]R96TL(%5T7`I.95A4;6%I;"!P<F5F97)R960L
M(&)U="!/3DQ9(&%T(&UY(%)%04P@96UA:6P@861D<F5S<SH@;F5V:6Y`9'1I
3;G0N9'1I;G0N8V]M7`I<"@I]"DP@
`
-- 
---
root	                               root@dtint.dtint.com
Digital Technology Int.                (801)226-2984	
500 W. 1200 South, Orem UT, 84057      FAX (801) 226-8438
Newsgroups: comp.sys.next.programmer