[net.sources.mac] VI Mode for Microsoft Word

info-mac@uw-beaver (09/14/85)

From: Dan Winkler <daw%brown.csnet@CSNET-RELAY.arpa>

Here is Mark Stowe's VI Mode for Microsoft Word.  The first file in this letter
is vmode.doc, a description of the system, and the second is vmode.Hqx, a
binhex copy of the DRVR itself.

Dan.

::::::::::::::
vmode.doc
::::::::::::::

Using Vmode

Introduction

VMode is a desk accessory -- to start it, choose it from the 'Apple' menu while
in Microsoft Word (it will not work within other programs).  Vmode creates a
hybrid editing environment where you can use a large subset of the editing
commands of the editor 'vi', as well as the normal Word editing features.  When
you start VMode a new 'Mode' menu appears at the right.  By selecting the
'VMode' entry in this menu you can exit or reenter vi mode at any time.

While in vi mode, all the normal mouse/menu manipulations are
available.  There are only two Keyboard command differences -- in
insert mode,'CMD W' no longer closes windows, in non-insert mode 'CMD
D' no longer formats characters.  Word obeys vi rules only when you are
working in document windows: the usual rules apply at all other times
-- while working in a "find" window, in a desk accessory, etc.

Vmode reminds you of what mode you are in by 'inverting' the menubar
(white letters on a black background) when you are in non-insert mode.
Most users familiar with 'vi' and Word, should find the hybrid editing
environment easy to use.  There are however two features of this
environment which will probably require slight habit adjustments.  1)
While in non-insert mode, if you choose to make changes in text by
first selecting the text and then typing new text, you must remember to
type 'i' to get into insert mode before typing the new text.  2)
Backspace never has the "move left non-destructively" meaning it has in
non-insert mode in conventional 'vi' -- it always has the effect it
would have in the normal Word environment.  To move left
non-destructively in non-insert mode, use the conventional 'vi'
alternative 'h'.

The Commands

VMode supports most of the conventional vi commands but currently lacks
line operations such as 'dd', 'cc', and 'J'.  VMode works by
translating vi commands into Word commands -- so it lacks some commands
which require capabilities not possessed by Word (most sorely missed;
backwards searching commands, marking and returning commands).  The '`'
key serves as the escape key -- use it to get to non-insert mode from
insertmode, to abort the building of numbers, etc.

Non-insert mode

Movement commands

You may use preceeding numbers to multiply the effects of movement
commands.  (However, the use of numbered movement commands may be
prohibitively slow for numbers larger than 30 or so.)

'l', SPACE	move right 
'h'     	move left 
'j'     	move down 
'k' 		move up 
'RETURN'        beginning of line below 
'-'     	beginning of line above 
'w'     	word forward 
'b'     	word back 
')'     	sentence forward 
'('     	sentence back
'H'     	top left of visible screen
'L'     	bottom right of visible screen 
'0'     	start of line 
'$' 		end of line 
'G'     	by itself -- to end of file, 
		with number to the start of Nth page 
CMD plus 'd'    scroll down one page 
CMD plus 'u' 	scroll up one page 
CMD plus '-'    scroll up one line 
CMD plus '+' 	scroll down one line

The following movement commands work by opening up a search window (but
out of the way where you can't see it), and closing it after the search
is over.  This has two important consequences. 1) For these commands to
work smoothly, you must close every search window that you opened with
CMD 'f' or equivalent, after you are through searching.  (If you do not
-- for example if you make the text window the front window by clicking
on it -- your next use of one of these commands will not result in a
search -- it will merely result in the search window being closed for
you).  2) Should a search fail, there will be a multiple beep sound and
a 'search failed' type of window will appear.  You should close the
error window and the find window before doing anything else.

You can combine operators (see below) with 'f', 't' and ';' but not the
other movement commands in this section. (Note that you should only do
so when the letter being searched for is visible within the window and
on the same line as the current position -- if the letter is on another
line, or moving to the letter results in horizontal scrolling,
undesirable results will be obtained.)  Except when used with
operators, there are none of the conventional between-line movement
restrictions for 'f' etc.

'fx'    find and move to the letter 'x'.  
'tx'    find and move to the character before the letter 'x'.  
';'     repeats most recent 't' or 'f' search 
'e'     move to the end of the word 
'}'     move to the start of the next paragraph 
'/'     open search window -- equivalent to Command + 'f' 
	(does not take numbers) 
'n'     search for last pattern searched for in most recent 
	Command + 'f' (or equivalent) search

Insert mode

While in insert mode the following have special meanings: 

Command + 'w'   

	deletes backward one word (differs from the normal Word
	feature, Option + Backspace, in that it avoids deleting
	forwards when there is no space to the right of the current
	insertion point)

Command + Backspace       

	expand glossary abbreviation (is equivalent to Command +
	Backspace followed by Command + Shift + Space, so that text
	typed immediately after a glossary expansion is plain text)

Command + '`' 

	inserts '`' 

To start insertion use the following commands: 

'i' 	insert starting at current position 
'a'     insert starting one char right of current position 
'I'     insert starting at beginning of line
'A'     insert starting at end of line 

Operators 

These commands combine with motion commands to effect all characters
from the current character to the movement destination.

'y'     ("yank") copies characters to clipboard 
'd'     ("delete") cuts characters to clipboard
'c'     ("change") cuts characters to clipboard and leaves in insert mode 
'Y'     selects characters.  

Simple changes 

'rX'    replace current character with 'X' 
'x'     delete N characters forward from current character 
's'     delete N characters and leave in insert mode
'X'     delete N characters backward from character before current character 
'D'     delete from current position to end of line 
'C' 	delete from current position to end of line and leave in insert mode

Miscellaneous 

'p'     paste contents of clipboard to right of current position 
'P'     paste contents of clipboard to left of current position 
'u'     undo 
'.'     redo 

(The following discussion assumes that you have edited Word with the
Resource Editor so that Command + 'l' is equivalent to Show Glossary
see above.)  Normally operators ('d', 'y', etc.) and the put commmands
('p', and 'P') cut, copy and paste text to and from the clipboard.  It
is possible to cut, copy and paste to and from 'named buffers' by
preceding the command with '"' (double quote) and a single letter.
Thus '"ad2w' deletes two words and puts them in buffer a, while '"bp'
pastes from buffer b.  (The named buffers are actually glossary entries
-- Oa for buffer a, etc.)

Installing Vmode

To install Vmode, you must use Resource Editor of creation date Jan.
25, 1985 or later.  You install vmode by copying the 'DRVR' type
resource in the file named 'vmode' and pasting it into your System
file.  (You may wonder why it is not more appropriate to add the driver
to Word itself -- while this is possible, the addition alerts part of
the copy-protection scheme and you will have to insert the master disk
every time you use the program).    You will probably also want to
modify Menu ID 258 of Word so that Command-key + 'l' (the letter 'el')
is equivalent to 'Show Glossary' -- this will allow you to use the
named buffers -- see below.

Past and Future

This program started as something I called MacMacros -- a desk
accessory for use in any program which makes it possible for any key to
be expanded into any arbitrary combination of key strokes.  I gave it a
mode that made Word obey vi rules.  For the moment I have decided not
to distribute MacMacros principally for two reasons.  1) The appearance
on the market (before completing MacMacros) of Assimilation Inc.'s
MacTracks.  For most people, and for most purposes, this program will
provide an adequate means of creating macros within programs.  (It is
compatible with VMode and can be used to create vi macros).  2) The
fact that I am a biologist and program as a sideline -- I don't have
time at the moment to make MacMacros as powerful and user-friendly as
I'd like.

However, there are certain features necessary for an optimally useful
macro program which MacTracks lacks.  These include a) the ability to
edit existing macros (so you don't have to type a long one in all over
again to correct one mistake) b) the ability to create macros that work
for a while in one application and then work for a while in another
(either with one program ending, and the other beginning, or in the
switcher environment) c) the ability to make a macro repeat itself a
set number of times or repeat itself indefinitely until some condition
is met d)  the ability to generate a number of null events to pad some
events -- for some programs (such as Word) which display certain bugs
when commands follow upon each other too quickly e) the ability to
manipulate windows independently of their current dimensions or
positions (eg. making it possible to include a command equivalent to
"click on the title bar of the window which is third from the front").
As MacMacros has most of these features, I may yet

For the near future my plans are to release desk accessories equivalent
to VMode which will make Word obey the syntax of other popular editors
(eg. WordStar).

In closing, I leave you with two tips for using the current version of
MacTracks.  1) When you are using the Switcher, you may start up the
desk accessory in one application (to make a new macro or whatever) but
if you start it in another, the system crashes.  It is possible to use
macros in more than one application but they have to have been created
ahead of time in all but one application.  2) Within Word, commands
tend to get lost after commands that opened, closed or manipulated a
window (particularly the find window).  Pad these commands by grabbing
a window, moving it slightly and then moving it back.  Also, it seems
to be safer to select a command from the menu rather than use the
keyboard equivalent.

Apple is a trademark of Apple Computer, Inc. Macintosh is a registered
trademark licensed to Apple Computer, Inc. Switcher is a registered
trademark of Apple Computer, Inc. Microsoft is a registered trademark
of Microsoft Corp. MacTracks is a trademark of Assimilation, Inc.
WordStar is a registered trademark of MicroPro International Corp.

::::::::::::::
vmode.Hqx
::::::::::::::

(This file must be converted with BinHex 4.0)

:"ACYEf4P!%459P*0B@ji!*!))jF9%3#3"!%!N!-MAJ!!)Pi!N!-j!*$b)PTN!!!
m!!$p#aq5!F3"c!(%!@3!!%Rk)N3T52lB+8Rqh%je)'cqf%je!9)"r!'F!ba19J!
!*'cr@N*5!+`!N!2rrej1ANje6PB!!%MR!""&l2mh*JSQ3aDZ!!N[2!#3!`SQ#e+
$,`-[,J!+6VSAd0lm!!a-h`J!6Pj1G8j@rra#V[rm$+i!N!-+rraX*LBZrra5Jq1
$4HcrDL3Zrr`LEJ!)%M%S!%L"ld%eJ6J!8Ulrr'$36Pj1G8j@!!")j`!34Hcr)LB
+*N-@VJ!*,c`!N!-+*JY5Jbm$,bi!#Nkk&f$Hr!!-60m)!%jH6R919J!!51F)!$P
m!!AqiMPm!!Aqi%KXrZ#SF8*R2bcqiMmXrZ#SC6!I1!"+E2jbC`4+4'Bq3UHT*#!
I*%!-DJ!)!'aQ%KBXre*)JlCm!!&R"NTXrRTQ"MBm!!&J!N*$5N4R"M3m!!&J!N*
#YN*Q"%*RU8a-h`!36Pj1G8j@!!")j`!36VVqTLCXrY`[+`!HU44#U`!H2ccp#kN
fU6G1ZK`56VSErNkk(%T1ZKa@6VSF)Nkk(#j1ZKaD6VSFGNkk('*1ZK[q3QcqHNk
krcC1Z[jUF!"-h`J!6Pj1G8j@!!"1ANje6PB!!%MR#""1Z[iq&Lcqp8L$YR`!"'B
5*'cqh#9Xr[!!(N)Xr[9J!!&F*'cqh%UU!"jR!!&36VSGF%T!C`!"4L4XrY`[+J!
HU(-NE2lB-#S!'Q!!!4`NE2lB)QS!(!a4!!CQ1#4XrYJLDJ!F,bN!!UNL5(S"(NA
k!6SQ#NAk!43N#TD#,`0)E2jL3QHTcL4XrYJLDJ!F,bN!!UNMB!!!jNkkrR`3,2l
e5)"J3#mXrZ`r2!"i2c`!Y%*RU4Y#Ccmmrrp1ZKiB@%pJ,LmXr["#TkNKB#3[,2l
`2c`!"$mm!#Jr2!%!U4Y#CkNiB!a63'Hm8d"ReP0!Cpa#,2leB!!!KL4XrYJ`+J!
H1!"J9JTX!3$qHLmXrZ3r2!!"2bcqHUP&B%K1ZJ'S*N![#kKc5(S!K%Ak!CNQ#NA
k!(SN#TD#,`0)E2jL3QHTcN*R2c`!#NKXreUTF$!I5N"Q!Q$X,`ZT&'!)8d"RTP0
!ClK#CkNiB"53!(`!3'F!rZ"63'F!rb493'F!rhj1Z[c3F!"-h`J36Pj1G80XEh0
P)(4SDA-JGfPZC'ph)'&ZC#"4G@Pd)'&RB@PZ9Lia$94SC5"cG@0MCA0c)'pQ)(0
SBA*PGf&bC5"NCA"PEQ4c)'pZ)(P[GA)JD'pZCA0dH3e8D'pcC5"hD'mJCQPZC#"
dD'9YFf9XGQ9c)'CbCA&eC@jdE(NJGA0TEQF0G'KTFb"`FQpRFQ&Y)(0SEh9XC#"
cC@jN)#3a-#"dEcS065iJ5biJ8h4[Gf8J-cB`)%aXEhPN)%&fC5iJ8(*[GQPNC@j
MC5"555!`-MNf-!e*)'&Y)'%JG'PYC5eXD@eTG'9N,#"eEQ4PFQCeEQ4PC#"LD@p
XEfGTFh3Z)!e'GA*dD'9b)'4PGQ9XEh"YC@jd)'pQ)(4SDA-JF(*[Ch*KE5"NCA"
PEQ4c)'pZ)(P[GA)JFh9`F'pbG#i!6PB!!%MR!""#Td+R5'cq9NKXrR`r2!%!2c`
!"#mmrj!%2c`"!%+RU4-J(bC!3QX!4%*V!%T#D`"))!Y-h`J!6Pj1G8MRIha*qKe
i+8Mr@LP!rf*K!!-F)#crANcI2[j1G@%!'*iJE2pD)#crBU!a+8$rAQ%!'LC1G8j
@!!")ja!J,`a*qKdm6VSBQ%kk'Nj+3'GU5LcrhfGD&LcrhNL$5N0Q8"BXrq")JlC
m!!&Q4#4Z!!JL8LPT!$lr"#mm!*!$(%KXrT!!*'cr"#B58B-[!dkk%Y,Hr!!-$'`
!(2k5Ea3jI!!FrT)@,2k3!%L$aRcrm"P$rT!!5Lcri'F%8bcri#mZ!!LTd%kk'63
SAdcI"!K1AL"I@%p1d%j@rra)ja!J,`a*qKbJ6VSB$%kk'E*+3'F85Lcri@F14IV
k@#B+,8-!'N)Xrq&#TbmZ!"i[,J!D,bi!&MmZ!"3r,J!5,bi!$MmZ!!`[,J!)U4-
J(be!!"j1ZKPX5N"R"%kkqYT1ZKM-+&mJ,J!H60m%#%jH)&rHr!!D,S"1d%j@!!"
)jaJJ,`a*qK`L6VSARN+R,bi!#+Np)"mS!%kk'5K+3'F3Z,`!!J!+CJKi!"Pm!!2
qp8kk')SSAb!%60m%'%jH)&pB6bk!6Y"19J!!51F3)#m-5ISEeNkk&f*+,2qNC`4
6,2qN3Lcri#mZ!!LTfNkk'&`SAdcI"!K1AL"I@%p1d%j@!!")ja!J,`a*qKZH6VS
A1Nkk',"+3'F'5'crm+LD2bi!#MmZ!!LSNNkk'%SSAdcI"!K1AL"I@%p1d%j@!!"
)ja``1#i!$#CZ!!J[$%Rk'eT1ZKF'3QFr"#m,UA!`(cS!5Lcrb'F@$&-!#'B36VS
B9%T!C`K#8hS!8bcrb%kk&qJSAc!&60m-1%jH)&pF6ck!6Y"19J!!51F3)#m-5IS
E#NSXrmKR'Nkk'"T+3'F55Qi!#'F'3Qi!#'!'2AcrB!!)6VS@TLmZ!!Sr,J!)U4a
1ZKH)+&p-h`3)6PiJAea26Y"19J!!51F3)#m-5ISD[%kk&JJ[,J!-2bi!#MmZ!!L
SXdSXrp*R"&-Xrp*1ZKF'+&p-h`3)6PiJAe"26Y"19J!!5QcqF'FB5QcqJ'F)6VV
p'N*XrS"1ZK3HB3T1ANje6VVp#'$f6PB!!%SXrmTR#&-Xrm*1ANjeB2T19[rk5Qc
qG'F-*LcrBXDm!*!$$fB)6VVmf%jH6R9+E2jbCbT1ZK%)B93p32rk5QlrqQF55Qc
qJQF-BBK#E2k#6VS3l'%i*'cr[&-5B-a1Z[pd5QcqFQB8*'cr@NT5CJ*JZ%kk!m*
+3'B#B+j1ZJ$16VS3['%)*'cr[&-5B*a19J!!51F-!%SXrpeR#L4XreSeI!#!!!j
+E2pQCLSr2!!"UFJr2!!#UFJr2!!"UFK+,2qQC`i[,2lS3QHT("Pm!!(qp8kk$qj
6E2pQ*'cr@MJ55N4R8,Km!!&Q$#BXrf,'[!#3!`*R*,Km!!*Q$#BXrf,'[!#3!`4
R%VKm!!0Q*LBXrf,'[!#3!`KQ'NAXrm%Q#L3XrlbdJdkkp`j`!%cI!$"1ANjeF!&
Jp%(Xrda+%'F)2c`!!DRZ6R9`!8je6PErr"Pm!%Er`6Pm!!(qFMPm!PMrCKBXre0
)JdT$CKK+,2rBC`T&l2rS3qcrm#6C'A`!!IqRB&BCI!!"rp&+,2r+C`JCE2rArkG
J+NSXrmGR#''B'8$rTf!%3LcrTaBXre0)JlCm!!*Q$"BXrkG)Jq0$'82rTdSXrpC
Q$"BXrpK)JlCm!!&Q"KPXrkIred)XrpC1ANje6PB!!%MR$"!3,J!*5)"J!!%F*'c
r@L9m!*!$-!!#B"!NE2pD&Lcr$%L$5--P3`!#*'cr@M9m!)!!$R!!60m)-%jH6R9
J!!#%6VS1[NT!C`*JkKBXrk9)JlCm!!*Q%KPm!!Vr`4PXrS[rT"Pm!!2rT8SXrk4
R$%AXrm%Q#LP$rlaJ5"BXrk9)JlCm!!0Q-N+RU53J(l#XrZKR*L4XreSPI!#3!bi
!!L4XreSeI!'!!!j&l2r"*JST3rqmF!"J!2pq3LcrT4PXrSrr`8kkpBK`!@!!rfT
+,2r"C`a&l2r"*JST3rqmB13jE2r`rZ!f,2rU8N-j3rlL5'cqi+K`*'cr@YAm!*!
$#N2XrZ!Nf54XreSeI!)!!!jJ+(!!B!$r)2q@rpVr#[l8rZ,rf[m'N!"m!"1`I!!
(C1,M3$!l!141q`!!*'cr@M5m!!&`!@!!r["19J!!51F-!$BXrT*)`e+$&#cqN!"
)JX4m!!p)`TD#8B-k!lTm!"0[!RS6'8Ar)KPm!!Rr)hJ"Z%9X-MB%8N0&l2mL5-8
L48(XrTFN#02#5-56a"@4-!!f"&*$5-2MJdAXrfSe[!#!1!"54'$+60m!-%jH6R9
19J!!'@crh[rI'@i!#IrH6Pj1G8j@!!!@,2p-5)1fI!!$E3BCI!!#rda5,2p-&Lc
r6%L$5-0&l2p-&Di!#6J!6Pj1G3-"N!3$!a-A!`F$!4FJ#-B6`[X9qrX9`K8C'@'
r`VkrXVll##!`)-)9Geir#'E#qm+qqll#[ljLBhTf,RBA&QclmAT`AJKQ`[YMqhE
#6PErmNMR!""1ZK-k5N"Q#R!!60m)!%jH6R8NE2pD$&)!!fF+*'cr@Ja5!!9Q+L4
XreSQ+J!#5)1fI!"aCKSNE2pD$'S"J!!1CJiCI!!$r[91Z[1ZF!"JZNTXrRTR%%+
RU53J(b4!$'S!#!"XC`4`!'#J3UHT*#!I*N!NE2pD$&)!!fF-*'cr@Ja5!!9Q!!#
%*'cr@LBU!!*)JlCm!'CQFL4XreS-DJ'!!!jQCKPm!!(r)KPm!'Er)cPm!B$rE"P
m!!(r8cmm!!&1Z[kN9%p+,2rIC`C`!@!!rcT#,2r(6VVq'P)Xrb)@,2mL5)0)`dA
Xrb)9[!"Q1!!@,2mL5)0)`q1$4HcrDM@m!B!i!(!"B!$r!L4XreS`%Q!!#Z!NE2p
D*LS!!NL$YR`!B'Bb*'cr@JaU!)!!$QBQ3Lcrc%)Xrme#,2p63Lcr6%)Xre*#,2r
B3QcqFNkkmf4`!@!!rVB3,2p55)"J!!Tq*'cr@JaU!B!!$QCi*'cr@L!U!!*)J'"
F3LcradKkrMSr2!!#6VVbq&a25(Vq+%kkmV*B6aPm!!(r8h!"B!$qE%)XrmG)H[i
62c`!!NkkmY"F6dKkrJ*1Z[++@%mCI!!"re0`!@!!rN3NE2pD0A`!J!!1B""43'H
JN!"m!&KRkT!!I!!ACla`!'!!rL*1Z[,'*'cr@JaU!B!!$QB!!+JNE2pD)#S!!NL
!B(!@,2r-5)0+3fB'F!"J!2hd3Lcrad)Xrb)CI!!)rcFNE2pD'@S!"Imr6VS+-KP
m!!(r8h!"B!$pc#4XreSPI!#3!p)!!Q"1*'cr@L9m!*!$eJ!#B%!NE2pD*A`!N!1
j!!*J-L4XreSPI!#3!l-!!Q!NN!"m!#eR`T!!I!!3CmU3!(`!*QF!rhj63'IDN!"
m!"&RaPG!C`$rER!!B!$pDL4XreSf+J!1aR`"!'B!#+K#,2p6*'cr@L!U!!*)J'!
!!GKJ!!L53Lcrf"Pm!!2rcdKkr33r2!!#6VVaSPa25(VmcNkkm9aB6aPm!!,ri"P
m!!(ri4Pm!!(rT8SXrpKR!!#-&Lcr0dL$YR`!#@B''A`!!Ir-'A`!"[mh,c`!N!-
&5'cr1NKkr*01ZJMBh[`!$%SXrmjR'"BXrmp)JlCm!!&Q$"Pm!2[r1aPm!-,r2%S
XrmaR0Lmm!*!$"NKXrd&)E2mi6VS)RYlm!!`[2!#3!`G)E2mi5(VmE%kk#)MHr!!
-'A`!$rmh3Lcrc'"-5LcrcQFF&LcrcdL$YR`!!@B35(Vm(6mm!!01Z["NA%pJ+KB
Xrmp)JlCm!!4Q%%Kkr!3r2!!$6VV`5&a2B!j)H[[b2c`!!Nkkm$KF6aPm!!hracP
m!)$rD"Pm!!,rb"Pm!!(rTN*R6VVlF&423UHT*#!I+8$qk"Pm!!(r8h!"B!$lr'!
!r*)CI!!$re*`!@!!qq`CI!!"re0#,2p-3LcradKkqlXr2!!$6VV`4Pa25(VlFdk
km!"B6h!"B!$l`%kk#dSCI!!"rp"`!@!!ql!CI!!#rpK)H[YJ2c`!!Nkklk*F6h!
"B!$lPKPm!!,rf%Kkqh8r2!!#6VV[L&a25Lcrc'F%6VS(T(!"B!$lFP&!C`$q*T!
!I!!DC`$rET!!I!!-Cjj63'F!rek3!(`!+QHLN!"m!"9R!2i)Ad"R!2pD@8"RUL4
XreSGDJ!&rrF@,[rh5)1fI!!aE3`@,[rh5)1fI!!jEaB@,[rh5)1fI!!`CL)@,2p
-5)0+3fFB*'cr@LBU!!*)Jcm$6VVkD&42F!&J!2V`1A`*J2pS&LcrbNL$5N0Q&KB
XrpK)JlCm!!&Q#L4XreSCDJ!&rm0+,2rBC`BjI!Z!rfJCI!!"re-NE2pD)#S!!NL
!B!!!k"Pm!2[rah!"B!$kRKPm!-,rah!"B!$kNKPm!,rrah!"B!$kKKPm!,,rah!
"B!$kHKPm!-Erah!"B!$kEKPm!-Rrah!"B!$kBNKkqN)r2!!&6VVZbPa25(VjmNk
klS4B6d)XrpJCI!!%rmpJ!2dF5(Vk!Mmm!!C1ZZkNA%p)H[R,6VVZAPK2'A`!![r
2B!$mqKPm!!(rcQ!%3LcrcKBXrpK)JlCm!!&Q"KPm!$[r`aPm!!Ar8N)Xre0`!@!
!qHa)H[R02c`!"%kklP4F6dKkqAe1ZZi1@%mCE2ldrb-CI!!"rmpJ!2bNN!"m!#"
R!2mJN!"m!"YRbT!!I!!RC`$r0PG!C`$rEP0!Cj*93'F!r[C93'F!ra463'F!r`*
63'F!r["43'F!rfjA3'F!ra4G3'F!raSCI!!#re-NE2pD)#S!!NL!B!!"!KBXrda
)JdT$CJ`CI!#crmG`!@!!q9"#,2rC6VVf1%M!X,`!N!-"CJ`CI!#jrmG`!@!!q6)
@,2p-5)083ce$rr`CE[rprb)CI!!0rb-pI!!"rri@,2p-5)-d,[rqY%0Z0MBZrrb
@E[rq4Hcr)M3Zrrj$l2p-&E%J!$!!0Llrr*CZrrj)`q1$4HcrDM@m!)!i!&*Zrrj
J[$BZrra&l2mL&E`!Cc!!0Llrr%M$ii0&l2pU0E`"J$J!3Lcrf%)XrmG`!@!!q+)
CI!$'rmG`!@!!q*BCI!$*rmG`!@!!q)SCI!$lrmF-E!!*rr*X"%)XrmG`!@!!q()
CI!$#rmG`!@!!q'D3!(`!*'IZ@8"RZP0!Cm*I3'I+N!"m!"GR!2lS'A`!!Ip62A`
!!Irq$'i!#rrqE"Jf,[rq5-2MJdAXrfSeV2pS1!"5E[rqB1!NE2pD)#S!!NL!B'4
#,2r(5(VhbMmm!!91ZZaiA%p`!@!!pra#,2r(5(Vhacmm!!91ZZaJA%p`!@!!pq3
CI!#brmGJ"KPm!,rradKkpimr2!!$6VVX2Pa2$'`!#IrbE!4#,2mL'A`!!IrEF!&
J!2H`N!"m!!eRaT!!I!!JCmL3!(`!'fHL@8"RKN)XrpJ@,2r-5)0+3fB''A`!![r
C'A`!!Ir@*'cr@KPU!!Ara$Pm#i$rD#4XreSJ+J!#5)"J!!$13LcraaPm!!(r)KP
m!2(r)cPm!i$rE"Pm!!,r8R!"B!$h3%kk"ZiCI!$armG+,2r+C`C`!@!!pbTJ$KP
m!2$raf!''A`!mIr(5(VflMmm!!*1ZZX5A%p+,2r-C`41ZJ-ZF!&J!2Em6VS'UNS
XrmTQ'%KkpXBr2!!#6VVUkPa25Lcrc'F%6VS$"Mem!!(rrJaZ!![rrQ`B0LlrrNM
$ii0&l2pU0E`$J$J!8QlrrQ$J5(VfJ$mm!!01ZZXFA%p#,2r('A`!!Ip6F!&J!2D
@N!"m!%0RP&0!CjU3!(`!&'F!rek3!(`!'QF!raa63'F!rcKE3'F!re)pI!!"rri
-EJ!+rrjX'$BZrrj)`q1$4HcrDM@m!B!i!&*ZrrjJi%)Xre-jI!Q!rfJNE2pD)#S
!!NL!B%41ZJAL3Lcr0f!!rhC1ZJA@'A`!![p6B!$pNNkk"FJCI!!"re0#,2r('A`
!!ImL'A`!`[mMF!&J!2Ak6VS&U(!"B!$em*!!I!""ClC43'HqN!"m!"KRaP&!Cq*
#,2r('A`!!Ip6*'cr@LBU!!*)JlCm!("Q5NKkpDNr2!!$6VVU+Pa25Lcrc'FX'A`
!"2rC5(VeCcmm!!C1ZZS3A%mCE2m-rb8jI!#!rh!jI!#!rh)jI!#!rh4#,2r-F!&
J!29i*'cr@LBU!!*)JlCm!&"Q3"Pm!!(r)KPm!(Er)dSXrmaR*"Pm!!6rf8Kkp4!
r2!!%6VVTZ&a25(VdhNkkkA*B6aPXr`cr*%)Xrma`!@!!p5K#,2p6'A`!!IrB3Lc
reN)XrmG)H[6U2c`!!Nkkk3jF6dSXrmaR"%kk!5SNE2pD)#S!!NL!B#SCI!!"rme
+,2r+Ca*)H[5G2c`!!Nkkk0jF6d)Xrme`!@!!p-j`!@!!p-L3!(`!BfI38d"Rm%k
k"%K`!@!!p,41ZJ3qF!"J!25U3Lcr8L4XreSCDJ!&r[4J!2UZ3Lcr8N)Xre-NE2p
D'@S!"Im-'A`!!Ir-3Lcr6(!"B!$dGN)Xre)CI!!"re0#,2r('A`!![mL*'cr@KP
U!!Ar*#4XreSjDJ!1rfiCI!$lrb-jI!Q!rfa`!@!!p$cf!29frkcrLJ!#rhL`I!!
'C!VM3$!l!1T1q`!!F!"J!23D9d"R!28H98"R!28BB1aJ!23)6PErr%+Zrr`Q,[r
mYUi!%'`F*Llrr#4Z!!`N,[rm)Qi!#"@a+!!i!&+ZrraJfNjH6R919J!!'A`!"2r
C'A`!)[r''@cr$2r&'A`!#Imh'@cr1Ip!'@cr12mrB341ANje6PB!!%)Xrm`[2!#
3!`G)E2mi5(VcE'')h[`!$%jH6R919J!!3Lcri8)Xrk9#,2rJ3LcrTN)XrmK#,2r
(3QcqFN)Xrp&1ANje6PB!!%KXrj5TGNUXrj4Q3!bX!)#!!2qBCMC+V2qFCM"+V2q
JCLSCI!!$rk9#,2qN'A`!!Imh'A`!&Imi4Hcr`5B++82r[%kk!k4`!8jH6R9`!'$
i6PB!!%MR#""&l2qR*JST3rqm*'cr@M5m!!-#V2q3!`$rAKBXre0)JdT$CM41ZZE
+5LcrTfF)60m)%%jH6R9+,2r3CaC#,2r3'A`!!Ir+1A`!!Ij`'@crfIr#6VVr+'$
@5Lcr)QG+&Lcr)NL$5-0&l2mL'$)i!#4XreT)K%M%*83!!L4XreS@,2mL5)0)`q1
$3qcrDM9a1!!!$NAXrb)Q#LP$rla)K$m%6VV[qP42B)B@,2qP5)1fI!!"CJ!!S%+
RU53J(l#XrZKQ&N)Xrk4&l2r"*JST3rqm6VVQ(Q!!reK+,2qNC`*JjNSXrq&R%%)
XrmG#,2rK'A`!![qPB0"#TkNN)"mT32lX'A`!![qP'@crTrr5&LcrTdL$eR`!#KP
$rkFCI!#mrm%@,2r25)1fI!!$CJi@,2rI5)0+3fB%6VV`XP)Xrb)@,2mL5)0)`dA
Xrb)9[!!C1!"J!2m'5LcrTfF!!+JNE2pD&LcradL$5--P3`!#&Lcr8dL$YR`!!QB
H&LcrTdL$5-1(r!!#5%0+3fB-*'cr@L9m!*!$[J!#*'cr@M9XrfJ!$NAXrkFQ#LP
$rla+,2qQCdj1Z[hb5N"Q'KBXrkG)JlCm!!TZ1Nkkj5S@,2r55)0+3fB53LcrTdA
Xrm%Q#LP$rlaJ!2j-&LcrTdL$YR`!!@B1&LcrdNL$eR`!#KP$rkGJ!2iZ5LcrffF
H3Lcrf`aX!!VrmQm55(V`[cmm!!01ZZ9BA%pJ!2id5Lcr0fFq&Lcr0dL$5-0&l2m
h'$)i!#4XreT)K%M%*83!!L4XreSeI!'!!!j&l2mh*JST3rqm5)3r"%kklMT86f!
!rFC#,2qQ&Lcrc8L$YR`!!@B#B6K#,2r03Lcrc%)Xrda#,2rBB!$pPNj@!!"#,2m
L3Lcr0d)XrmG#,2r03Lcrc%)Xrda#,2rB6Pj1G8j@!!!CI!!"re*1ZZ6U6Pj1G8j
@!!")j`m3*'cr@M5m!!-#V2q3!`$rAL4XreSeI!#!!!j+,2r+C`!!K"BXrm*)JdT
$CL"#,2p56VVNUN)XrmT#E2j`3QcrYNkkiq"-h`M`6Pj1G54XreS@,2r#5)0)`d2
Xrm)8-6J!5)*)`L9#!!)@,2r#5)1fI!!"CLi@,2p55)0+3fFB*'cr@L9m!*!$B3!
#*'cr@M9m!B!!$Q#Z&Lcrf%L$5N0RS'#LB+"JRNMRIha*qJ@J+8Mr@LP!rf*K1#!
Xrej-hclq6R9K!!#i)'cr@L!Xrf+J-#P!rejK!!(56R919J!!5QcqF'F)6VVr%Nj
H6R9Ke'$i6PB!!%TXrR4R$#BXrf,'[!#3!`pQ"Q'k6Pj1G8TXrR*R#Nkkr"C1ZZY
LB1aK[%TXrR*Q&#4XreT+8QB#B0T1ZZlb5N"Q!Q$36VVVrNkkqq`jI!!"rS*1ZZX
bB,`!N$""q[r5)&!J2!!!S$#J4dje3IVr[L"3)$`!!+!aS%G1G8(krlBJ8#!m!!#
SXk"(6R9"q[qU)&!J2!!!UG#J4dje3IVrRL"3)$`!!+N6S%G1G8(krj)J8#!m!!#
T2D"(6R9"q[q')&!J2!!!UGUJ4dje3IVrHL"3)$`!!+L5S%G1G8(krfiJ8#!m!!#
TF+"(6R9"q[pL)&!J2!!!U4bJ4dje51F!J+&')!K-h`%!))"1G5!m!!#J-%(kraa
Kj#!m!!#J-8(kr`aKf#!m!!#SXd(kr`KKc#!m!!#Td%(kr`"K`#!m!!#T%d(kr[K
KY#!m!!#T28(kr["KU#!m!!#TfN(krZKKR#!m!!#SNN(krZ"KN!!J2!!!UA""q[l
BBB3J2!!!U4a"q[l36VVrH%je)$`!!+!`3IVppU"(6R8J2!!!U,0"qZM'S%G1G5!
m!!#Td%(kjMLJ4dje)$`!!+N63IVQaU"(6R8J2!!!U6e"qZFfS%G1G5!m!!#TfN(
kjh5J4dje)$`!!+NF3IVS-U"(6R8J2!!!UA""qZI-S%G1G5!m!!#SNN(kji+J4dj
e)$`!!+!a3IVPS+"(6R919J!!6VVqmQ(S6VVrD%kkrja1Z[qQ6VVrH%kkri*1Z[r
%6VVrT%kkrkj1Z[p@6Pj1G8j@!!"#Td+R,c`!!!N35'cqY8kk!1cHr!!36Pj1G8j
@rra)j``36VVJH#JXrYaKd%T!CKiN4%UU!"jR$"Pm!!6qp54%3US!(Mmm!!@Tb'!
!!+)N4%UU!"jR#"Pm!!,qp@$Q3UHT*#!I+8$qk%kkrf!jI!%!rRSN4#m+6VVNU#C
!*&mP3!!H+8[qm#4%0fS!'!"X*'cqm#*U!(BN895+3qcq9L6C*0P#Tcmmr3Y)E2l
&U6%J(bP!rZ3[,2lN5'cqbkNc,bcqj%*RU6@T0bmXrZ3r2!!"2bcqHUP&,`Xr2!&
U2c`"r%*RU4Y1ZZ#-'A`!![le6VVIZR!!60m)-%jH6R9&l`!%)&SL@R!!%"K)3"!
C5LS!!QF-5K*R"+BmB!kL2'!+5K*R"+3mB!+J2!S!!!(K3%je)#m!"+!b6R8!+!!
%!2%"q`!&!!8!N!A+!IJ!N!8#!*!&!3#3"!%!N!`"!*!$!`#3!`'%!!!-!*!%BC!
F!!j0D@0bEh0[CR3J9fpbC!!%E@pNC3!+9Ne[C'8l5@jQE`#3r`#3,3%!N!-MAJ!
!)Pi!N!-j!!$-(!!q!*!$(!!b!!"%8PC5!*!$#J!2!!"3!*!%!3p5"J"@6@pNCBm
[!: