www.digitalmars.com         C & C++   DMDScript  

D - [BUG] bogus codegen with -inline (access violation)

reply "Kris" <someidiot earthlink.dot.dot.dot.net> writes:
Here's a binary-chop with an interesting codegen issue. It operates fine
with any compiler flags other than -inline which, when applied, will cause
an access violation.

Compiler flags for the code listing are -g -O -release -inline

Will post the standalone module if Walter needs it.

- Kris


156:          static int bsearch (short[] array, short size, short match)
0042DCB8   push        eax
0042DCB9   push        ebx
0042DCBA   mov         ebx,0FFFFFFFFh
161:                  u = size;
0042DCBF   push        ebp
0042DCC0   push        esi
0042DCC1   mov         si,word ptr [esp+14h]
162:                  while (l+1 != u)
0042DCC6   push        edi
0042DCC7   mov         edi,eax
157:          {
158:                  short l, u, m;
159:
160:                  l = -1;
0042DCC9   cmp         word ptr [esp+18h],0
0042DCCF   je          _D3dsc5cache6Primes6Primes7bsearchFAsssZi+5Bh
(0042dd13)
0042DCD1   mov         word ptr [esp+10h],bx
165:                        if (array[m] < match)
0042DCD6   mov         edx,dword ptr [esp+20h]
0042DCDA   mov         ebx,dword ptr [esp+1Ch]
0042DCDE   mov         ebp,edx
0042DCE0   mov         bx,word ptr [esp+10h]
163:                        {
164:                        m = (l + u) / 2;
0042DCE5   movsx       ecx,bx
0042DCE8   movsx       eax,si
0042DCEB   add         ecx,eax
0042DCED   test        ecx,ecx
0042DCEF   jns         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+3Ah
(0042dcf2)
0042DCF1   inc         ecx
0042DCF2   sar         ecx,1
0042DCF4   mov         edx,ecx
0042DCF6   movsx       ecx,cx
0042DCF9   cmp         word ptr l[ecx*2],di
0042DCFE   jge         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+57h
(0042dd0f)
166:                            l = m;
0042DD00   mov         ebx,edx
0042DD02   movsx       edx,bx
0042DD05   inc         edx
0042DD06   movsx       ecx,si
0042DD09   cmp         edx,ecx
0042DD0B   jne         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+2Dh
(0042dce5)
0042DD0D   jmp         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+5Bh
(0042dd13)
167:                        else
168:                           u = m;
0042DD0F   mov         esi,edx
0042DD11   jmp         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+4Ah
(0042dd02)
169:                        }
170:
171:                 if (u >= size || array[u] != match)
0042DD13   cmp         si,word ptr [esp+18h]
0042DD18   jge         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+73h
(0042dd2b)
0042DD1A   movsx       edx,si
0042DD1D   mov         ecx,dword ptr [esp+20h]
0042DD21   mov         eax,dword ptr [esp+1Ch]
0042DD25   cmp         word ptr [ecx+edx*2],di
0042DD29   je          _D3dsc5cache6Primes6Primes7bsearchFAsssZi+80h
(0042dd38)
172:                     return -u;
0042DD2B   pop         edi
0042DD2C   mov         eax,esi
0042DD2E   neg         eax
0042DD30   pop         esi
0042DD31   cwde
0042DD32   pop         ebp
0042DD33   pop         ebx
0042DD34   pop         ecx
0042DD35   ret         0Ch
173:                 return u;
0042DD38   movsx       eax,si
174:          }
0042DD3B   pop         edi
0042DD3C   pop         esi
0042DD3D   pop         ebp
0042DD3E   pop         ebx
0042DD3F   pop         ecx
0042DD40   ret         0Ch
Apr 20 2004
parent "Kris" <someidiot earthlink.dot.dot.dot.net> writes:
Wanted to bring this one up again, since -inline apparently causes static
array addresses to be passed incorrectly. Attached is the standalone example
(sans main)


begin 666 Primes.d
M+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BH-" T*("  ("  
M("!#;W!Y<FEG:'0 *$,I(#(P,#0 2W)I<R!"96QL#0H ("  ("  ( T*("  
M("  ("!4:&ES('-O9G1W87)E(&ES('!R;W9I9&5D("=A<RUI<R<L('=I=&AO
M=70 86YY(&5X<')E<W, ;W( :6UP;&EE9 T*("  ("  ("!W87)R86YT>2X 
M26X ;F\ 979E;G0 =VEL;"!T:&4 875T:&]R<R!B92!H96QD(&QI86)L92!F
M;W( 9&%M86=E<PT*("  ("  ("!O9B!A;GD :VEN9"!A<FES:6YG(&9R;VT 
M=&AE('5S92!O9B!T:&ES('-O9G1W87)E+ T*("  ("  (" -"B  ("  ("  
M4&5R;6ES<VEO;B!I<R!H97)E8GD 9W)A;G1E9"!T;R!A;GEO;F4 =&\ =7-E
M('1H:7, <V]F='=A<F4 9F]R(&%N>2 -"B  ("  ("  <'5R<&]S92P :6YC
M;'5D:6YG(&-O;6UE<F-I86P 87!P;&EC871I;VYS+"!A;F0 =&\ 86QT97( 
M:70 86YD+V]R( T*("  ("  ("!R961I<W1R:6)U=&4 :70 9G)E96QY+"!S
M=6)J96-T('1O('1H92!F;VQL;W=I;F< <F5S=')I8W1I;VYS. T*("  ("  
M(" -"B  ("  ("  ,2X 5&AE(&]R:6=I;B!O9B!T:&ES('-O9G1W87)E(&UU
M<W0 ;F]T(&)E(&UI<W)E<')E<V5N=&5D.R!Y;W4 ;75S=" -"B  ("  ("  
M("  ;F]T(&-L86EM('1H870 >6]U('=R;W1E('1H92!O<FEG:6YA;"!S;V9T
M=V%R92X 268 >6]U('5S92!T:&ES( T*("  ("  ("  ("!S;V9T=V%R92!I
M;B!A('!R;V1U8W0L(&%N(&%C:VYO=VQE9&=M96YT('=I=&AI;B!D;V-U;65N
M=&%T:6]N(&]F( T*("  ("  ("  ("!S86ED('!R;V1U8W0 =V]U;&0 8F4 
M87!P<F5C:6%T960 8G5T(&ES(&YO="!R97%U:7)E9"X-" T*("  ("  (" R
M+B!!;'1E<F5D('-O=7)C92!V97)S:6]N<R!M=7-T(&)E('!L86EN;'D ;6%R
M:V5D(&%S('-U8V L(&%N9"!M=7-T( T*("  ("  ("  ("!N;W0 8F4 ;6ES
M<F5P<F5S96YT960 87, 8F5I;F< =&AE(&]R:6=I;F%L('-O9G1W87)E+ T*
M#0H ("  ("  (#,N(%1H:7, ;F]T:6-E(&UA>2!N;W0 8F4 <F5M;W9E9"!O
M<B!A;'1E<F5D(&9R;VT 86YY(&1I<W1R:6)U=&EO; T*("  ("  ("  ("!O
M9B!T:&4 <V]U<F-E+ T*#0H-"B  ("  ("  ("  ("  ("  ("  ("  ('Y^
M?GY^?GY^?GY^?GY^?GY^?GY^?GY^?GY^?GY^? T*#0H-"B  ("  ("  4')I
M;65S+F0-"B  ("  ("  #0H ("  ("  ( T*("  ("  ("!!<')I;" R,# T
M("  ("  26YI=&EA;"!V97)S:6]N#0H ("  ("  ("  ("  ("  ("  ("  
M(" N+BX-"B  ("  ( T*#0H ("  ("  ($%U=&AO<G,Z("  ("  ("!+<FES
M($)E;&P-"B  ("  ("  ("  ("  ("  ("  ("  ("XN+ T*#0H-"BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHO#0H-"FUO9'5L92!D<V,N
M8V%C:&4N4')I;65S.PT*#0IC;&%S<R!0<FEM97,-"GL-"B  ("  ("  <')I
M=F%T92!S=&%T:6, 8V]N<W0 <VAO<G0 <')I;65S6UT /0T*("  ("  ("!;
M#0H ("  ("  ("  (#(L("  (#,L("  (#4L("  (#<L("  ,3$L("  ,3,L
M("  ,3<L("  ,3DL("  ,C,L("  ,CDL#0H ("  ("  ("  ,S$L("  ,S<L
M("  -#$L("  -#,L("  -#<L("  -3,L("  -3DL("  -C$L("  -C<L("  
M-S$L#0H ("  ("  ("  -S,L("  -SDL("  .#,L("  .#DL("  .3<L(" Q
M,#$L(" Q,#,L(" Q,#<L(" Q,#DL(" Q,3,L#0H ("  ("  (" Q,C<L(" Q
M,S$L(" Q,S<L(" Q,SDL(" Q-#DL(" Q-3$L(" Q-3<L(" Q-C,L(" Q-C<L
M(" Q-S,L#0H ("  ("  (" Q-SDL(" Q.#$L(" Q.3$L(" Q.3,L(" Q.3<L
M(" Q.3DL(" R,3$L(" R,C,L(" R,C<L(" R,CDL#0H ("  ("  (" R,S,L
M(" R,SDL(" R-#$L(" R-3$L(" R-3<L(" R-C,L(" R-CDL(" R-S$L(" R
M-S<L(" R.#$L#0H ("  ("  (" R.#,L(" R.3,L(" S,#<L(" S,3$L(" S
M,3,L(" S,3<L(" S,S$L(" S,S<L(" S-#<L(" S-#DL#0H ("  ("  (" S
M-3,L(" S-3DL(" S-C<L(" S-S,L(" S-SDL(" S.#,L(" S.#DL(" S.3<L
M(" T,#$L(" T,#DL#0H ("  ("  (" T,3DL(" T,C$L(" T,S$L(" T,S,L
M(" T,SDL(" T-#,L(" T-#DL(" T-3<L(" T-C$L(" T-C,L#0H ("  ("  
M(" T-C<L(" T-SDL(" T.#<L(" T.3$L(" T.3DL(" U,#,L(" U,#DL(" U
M,C$L(" U,C,L(" U-#$L#0H ("  ("  (" U-#<L(" U-3<L(" U-C,L(" U
M-CDL(" U-S$L(" U-S<L(" U.#<L(" U.3,L(" U.3DL(" V,#$L#0H ("  
M("  (" V,#<L(" V,3,L(" V,3<L(" V,3DL(" V,S$L(" V-#$L(" V-#,L
M(" V-#<L(" V-3,L(" V-3DL#0H ("  ("  (" V-C$L(" V-S,L(" V-S<L
M(" V.#,L(" V.3$L(" W,#$L(" W,#DL(" W,3DL(" W,C<L(" W,S,L#0H 
M("  ("  (" W,SDL(" W-#,L(" W-3$L(" W-3<L(" W-C$L(" W-CDL(" W
M-S,L(" W.#<L(" W.3<L(" X,#DL#0H ("  ("  (" X,3$L(" X,C$L(" X
M,C,L(" X,C<L(" X,CDL(" X,SDL(" X-3,L(" X-3<L(" X-3DL(" X-C,L
M#0H ("  ("  (" X-S<L(" X.#$L(" X.#,L(" X.#<L(" Y,#<L(" Y,3$L
M(" Y,3DL(" Y,CDL(" Y,S<L(" Y-#$L#0H ("  ("  (" Y-#<L(" Y-3,L
M(" Y-C<L(" Y-S$L(" Y-S<L(" Y.#,L(" Y.3$L(" Y.3<L(#$P,#DL(#$P
M,3,L#0H ("  ("  (#$P,3DL(#$P,C$L(#$P,S$L(#$P,S,L(#$P,SDL(#$P
M-#DL(#$P-3$L(#$P-C$L(#$P-C,L(#$P-CDL#0H ("  ("  (#$P.#<L(#$P
M.3$L(#$P.3,L(#$P.3<L(#$Q,#,L(#$Q,#DL(#$Q,3<L(#$Q,C,L(#$Q,CDL
M(#$Q-3$L#0H ("  ("  (#$Q-3,L(#$Q-C,L(#$Q-S$L(#$Q.#$L(#$Q.#<L
M(#$Q.3,L(#$R,#$L(#$R,3,L(#$R,3<L(#$R,C,L#0H ("  ("  (#$R,CDL
M(#$R,S$L(#$R,S<L(#$R-#DL(#$R-3DL(#$R-S<L(#$R-SDL(#$R.#,L(#$R
M.#DL(#$R.3$L#0H ("  ("  (#$R.3<L(#$S,#$L(#$S,#,L(#$S,#<L(#$S
M,3DL(#$S,C$L(#$S,C<L(#$S-C$L(#$S-C<L(#$S-S,L#0H ("  ("  (#$S
M.#$L(#$S.3DL(#$T,#DL(#$T,C,L(#$T,C<L(#$T,CDL(#$T,S,L(#$T,SDL
M(#$T-#<L(#$T-3$L#0H ("  ("  (#$T-3,L(#$T-3DL(#$T-S$L(#$T.#$L
M(#$T.#,L(#$T.#<L(#$T.#DL(#$T.3,L(#$T.3DL(#$U,3$L#0H ("  ("  
M(#$U,C,L(#$U,S$L(#$U-#,L(#$U-#DL(#$U-3,L(#$U-3DL(#$U-C<L(#$U
M-S$L(#$U-SDL(#$U.#,L#0H ("  ("  (#$U.3<L(#$V,#$L(#$V,#<L(#$V
M,#DL(#$V,3,L(#$V,3DL(#$V,C$L(#$V,C<L(#$V,S<L(#$V-3<L#0H ("  
M("  (#$V-C,L(#$V-C<L(#$V-CDL(#$V.3,L(#$V.3<L(#$V.3DL(#$W,#DL
M(#$W,C$L(#$W,C,L(#$W,S,L#0H ("  ("  (#$W-#$L(#$W-#<L(#$W-3,L
M(#$W-3DL(#$W-S<L(#$W.#,L(#$W.#<L(#$W.#DL(#$X,#$L(#$X,3$L#0H 
M("  ("  (#$X,C,L(#$X,S$L(#$X-#<L(#$X-C$L(#$X-C<L(#$X-S$L(#$X
M-S,L(#$X-S<L(#$X-SDL(#$X.#DL#0H ("  ("  (#$Y,#$L(#$Y,#<L(#$Y
M,3,L(#$Y,S$L(#$Y,S,L(#$Y-#DL(#$Y-3$L(#$Y-S,L(#$Y-SDL(#$Y.#<L
M#0H ("  ("  (#$Y.3,L(#$Y.3<L(#$Y.3DL(#(P,#,L(#(P,3$L(#(P,3<L
M(#(P,C<L(#(P,CDL(#(P,SDL(#(P-3,L#0H ("  ("  (#(P-C,L(#(P-CDL
M(#(P.#$L(#(P.#,L(#(P.#<L(#(P.#DL(#(P.3DL(#(Q,3$L(#(Q,3,L(#(Q
M,CDL#0H ("  ("  (#(Q,S$L(#(Q,S<L(#(Q-#$L(#(Q-#,L(#(Q-3,L(#(Q
M-C$L(#(Q-SDL(#(R,#,L(#(R,#<L(#(R,3,L#0H ("  ("  (#(R,C$L(#(R
M,S<L(#(R,SDL(#(R-#,L(#(R-3$L(#(R-C<L(#(R-CDL(#(R-S,L(#(R.#$L
M(#(R.#<L#0H ("  ("  (#(R.3,L(#(R.3<L(#(S,#DL(#(S,3$L(#(S,S,L
M(#(S,SDL(#(S-#$L(#(S-#<L(#(S-3$L(#(S-3<L#0H ("  ("  (#(S-S$L
M(#(S-S<L(#(S.#$L(#(S.#,L(#(S.#DL(#(S.3,L(#(S.3DL(#(T,3$L(#(T
M,3<L(#(T,C,L#0H ("  ("  (#(T,S<L(#(T-#$L(#(T-#<L(#(T-3DL(#(T
M-C<L(#(T-S,L(#(T-S<L(#(U,#,L(#(U,C$L(#(U,S$L#0H ("  ("  (#(U
M,SDL(#(U-#,L(#(U-#DL(#(U-3$L(#(U-3<L(#(U-SDL(#(U.3$L(#(U.3,L
M(#(V,#DL(#(V,3<L#0H ("  ("  (#(V,C$L(#(V,S,L(#(V-#<L(#(V-3<L
M(#(V-3DL(#(V-C,L(#(V-S$L(#(V-S<L(#(V.#,L(#(V.#<L#0H ("  ("  
M(#(V.#DL(#(V.3,L(#(V.3DL(#(W,#<L(#(W,3$L(#(W,3,L(#(W,3DL(#(W
M,CDL(#(W,S$L(#(W-#$L#0H ("  ("  (#(W-#DL(#(W-3,L(#(W-C<L(#(W
M-S<L(#(W.#DL(#(W.3$L(#(W.3<L(#(X,#$L(#(X,#,L(#(X,3DL#0H ("  
M("  (#(X,S,L(#(X,S<L(#(X-#,L(#(X-3$L(#(X-3<L(#(X-C$L(#(X-SDL
M(#(X.#<L(#(X.3<L(#(Y,#,L#0H ("  ("  (#(Y,#DL(#(Y,3<L(#(Y,C<L
M(#(Y,SDL(#(Y-3,L(#(Y-3<L(#(Y-C,L(#(Y-CDL(#(Y-S$L(#(Y.3DL#0H 
M("  ("  (#,P,#$L(#,P,3$L(#,P,3DL(#,P,C,L(#,P,S<L(#,P-#$L(#,P
M-#DL(#,P-C$L(#,P-C<L(#,P-SDL#0H ("  ("  (#,P.#,L(#,P.#DL(#,Q
M,#DL(#,Q,3DL(#,Q,C$L(#,Q,S<L(#,Q-C,L(#,Q-C<L(#,Q-CDL(#,Q.#$L
M#0H ("  ("  (#,Q.#<L(#,Q.3$L(#,R,#,L(#,R,#DL(#,R,3<L(#,R,C$L
M(#,R,CDL(#,R-3$L(#,R-3,L(#,R-3<L#0H ("  ("  (#,R-3DL(#,R-S$L
M(#,R.3DL(#,S,#$L(#,S,#<L(#,S,3,L(#,S,3DL(#,S,C,L(#,S,CDL(#,S
M,S$L#0H ("  ("  (#,S-#,L(#,S-#<L(#,S-3DL(#,S-C$L(#,S-S$L(#,S
M-S,L(#,S.#DL(#,S.3$L(#,T,#<L(#,T,3,L#0H ("  ("  (#,T,S,L(#,T
M-#DL(#,T-3<L(#,T-C$L(#,T-C,L(#,T-C<L(#,T-CDL(#,T.3$L(#,T.3DL
M(#,U,3$L#0H ("  ("  (#,U,3<L(#,U,C<L(#,U,CDL(#,U,S,L(#,U,SDL
M(#,U-#$L(#,U-#<L(#,U-3<L(#,U-3DL(#,U-S$L#0H ("  ("  (#,U.#$L
M(#,U.#,L(#,U.3,L(#,V,#<L(#,V,3,L(#,V,3<L(#,V,C,L(#,V,S$L(#,V
M,S<L(#,V-#,L#0H ("  ("  (#,V-3DL(#,V-S$L(#,V-S,L(#,V-S<L(#,V
M.3$L(#,V.3<L(#,W,#$L(#,W,#DL(#,W,3DL(#,W,C<L#0H ("  ("  (#,W
M,S,L(#,W,SDL(#,W-C$L(#,W-C<L(#,W-CDL(#,W-SDL(#,W.3,L(#,W.3<L
M(#,X,#,L(#,X,C$L#0H ("  ("  (#,X,C,L(#,X,S,L(#,X-#<L(#,X-3$L
M(#,X-3,L(#,X-C,L(#,X-S<L(#,X.#$L(#,X.#DL(#,Y,#<L#0H ("  ("  
M(#,Y,3$L(#,Y,3<L(#,Y,3DL(#,Y,C,L(#,Y,CDL(#,Y,S$L(#,Y-#,L(#,Y
M-#<L(#,Y-C<L(#,Y.#DL#0H ("  ("  (#0P,#$L(#0P,#,L(#0P,#<L(#0P
M,3,L(#0P,3DL(#0P,C$L(#0P,C<L(#0P-#DL(#0P-3$L(#0P-3<L#0H ("  
M("  (#0P-S,L(#0P-SDL(#0P.3$L(#0P.3,L(#0P.3DL(#0Q,3$L(#0Q,C<L
M(#0Q,CDL(#0Q,S,L(#0Q,SDL#0H ("  ("  (#0Q-3,L(#0Q-3<L(#0Q-3DL
M(#0Q-S<L(#0R,#$L(#0R,3$L(#0R,3<L(#0R,3DL(#0R,CDL(#0R,S$L#0H 
M("  ("  (#0R-#$L(#0R-#,L(#0R-3,L(#0R-3DL(#0R-C$L(#0R-S$L(#0R
M-S,L(#0R.#,L(#0R.#DL(#0R.3<L#0H ("  ("  (#0S,C<L(#0S,S<L(#0S
M,SDL(#0S-#DL(#0S-3<L(#0S-C,L(#0S-S,L(#0S.3$L(#0S.3<L(#0T,#DL
M#0H ("  ("  (#0T,C$L(#0T,C,L(#0T-#$L(#0T-#<L(#0T-3$L(#0T-3<L
M(#0T-C,L(#0T.#$L(#0T.#,L(#0T.3,L#0H ("  ("  (#0U,#<L(#0U,3,L
M(#0U,3<L(#0U,3DL(#0U,C,L(#0U-#<L(#0U-#DL(#0U-C$L(#0U-C<L(#0U
M.#,L#0H ("  ("  (#0U.3$L(#0U.3<L(#0V,#,L(#0V,C$L(#0V,S<L(#0V
M,SDL(#0V-#,L(#0V-#DL(#0V-3$L(#0V-3<L#0H ("  ("  (#0V-C,L(#0V
M-S,L(#0V-SDL(#0V.3$L(#0W,#,L(#0W,C$L(#0W,C,L(#0W,CDL(#0W,S,L
M(#0W-3$L#0H ("  ("  (#0W-3DL(#0W.#,L(#0W.#<L(#0W.#DL(#0W.3,L
M(#0W.3DL(#0X,#$L(#0X,3,L(#0X,3<L(#0X,S$L#0H ("  ("  (#0X-C$L
M(#0X-S$L(#0X-S<L(#0X.#DL(#0Y,#,L(#0Y,#DL(#0Y,3DL(#0Y,S$L(#0Y
M,S,L(#0Y,S<L#0H ("  ("  (#0Y-#,L(#0Y-3$L(#0Y-3<L(#0Y-C<L(#0Y
M-CDL(#0Y-S,L(#0Y.#<L(#0Y.3,L(#0Y.3DL(#4P,#,L#0H ("  ("  (#4P
M,#DL(#4P,3$L(#4P,C$L(#4P,C,L(#4P,SDL(#4P-3$L(#4P-3DL(#4P-S<L
M(#4P.#$L(#4P.#<L#0H ("  ("  (#4P.3DL(#4Q,#$L(#4Q,#<L(#4Q,3,L
M(#4Q,3DL(#4Q-#<L(#4Q-3,L(#4Q-C<L(#4Q-S$L(#4Q-SDL#0H ("  ("  
M(#4Q.#DL(#4Q.3<L(#4R,#DL(#4R,C<L(#4R,S$L(#4R,S,L(#4R,S<L(#4R
M-C$L(#4R-S,L(#4R-SDL#0H ("  ("  (#4R.#$L(#4R.3<L(#4S,#,L(#4S
M,#DL(#4S,C,L(#4S,S,L(#4S-#<L(#4S-3$L(#4S.#$L(#4S.#<L#0H ("  
M("  (#4S.3,L(#4S.3DL(#4T,#<L(#4T,3,L(#4T,3<L(#4T,3DL(#4T,S$L
M(#4T,S<L(#4T-#$L(#4T-#,L#0H ("  ("  (#4T-#DL(#4T-S$L(#4T-S<L
M(#4T-SDL(#4T.#,L(#4U,#$L(#4U,#,L(#4U,#<L(#4U,3DL(#4U,C$L#0H 
M("  ("  (#4U,C<L(#4U,S$L(#4U-3<L(#4U-C,L(#4U-CDL(#4U-S,L(#4U
M.#$L(#4U.3$L(#4V,C,L(#4V,SDL#0H ("  ("  (#4V-#$L(#4V-#<L(#4V
M-3$L(#4V-3,L(#4V-3<L(#4V-3DL(#4V-CDL(#4V.#,L(#4V.#DL(#4V.3,L
M#0H ("  ("  (#4W,#$L(#4W,3$L(#4W,3<L(#4W,S<L(#4W-#$L(#4W-#,L
M(#4W-#DL(#4W-SDL(#4W.#,L(#4W.3$L#0H ("  ("  (#4X,#$L(#4X,#<L
M(#4X,3,L(#4X,C$L(#4X,C<L(#4X,SDL(#4X-#,L(#4X-#DL(#4X-3$L(#4X
M-3<L#0H ("  ("  (#4X-C$L(#4X-C<L(#4X-CDL(#4X-SDL(#4X.#$L(#4X
M.3<L(#4Y,#,L(#4Y,C,L(#4Y,C<L(#4Y,SDL#0H ("  ("  (#4Y-3,L(#4Y
M.#$L(#4Y.#<L(#8P,#<L(#8P,3$L(#8P,CDL(#8P,S<L(#8P-#,L(#8P-#<L
M(#8P-3,L#0H ("  ("  (#8P-C<L(#8P-S,L(#8P-SDL(#8P.#DL(#8P.3$L
M(#8Q,#$L(#8Q,3,L(#8Q,C$L(#8Q,S$L(#8Q,S,L#0H ("  ("  (#8Q-#,L
M(#8Q-3$L(#8Q-C,L(#8Q-S,L(#8Q.3<L(#8Q.3DL(#8R,#,L(#8R,3$L(#8R
M,3<L(#8R,C$L#0H ("  ("  (#8R,CDL(#8R-#<L(#8R-3<L(#8R-C,L(#8R
M-CDL(#8R-S$L(#8R-S<L(#8R.#<L(#8R.3DL(#8S,#$L#0H ("  ("  (#8S
M,3$L(#8S,3<L(#8S,C,L(#8S,CDL(#8S,S<L(#8S-#,L(#8S-3,L(#8S-3DL
M(#8S-C$L(#8S-C<L#0H ("  ("  (#8S-S,L(#8S-SDL(#8S.#DL(#8S.3<L
M(#8T,C$L(#8T,C<L(#8T-#DL(#8T-3$L(#8T-CDL(#8T-S,L#0H ("  ("  
M(#8T.#$L(#8T.3$L(#8U,C$L(#8U,CDL(#8U-#<L(#8U-3$L(#8U-3,L(#8U
M-C,L(#8U-CDL(#8U-S$L#0H ("  ("  (#8U-S<L(#8U.#$L(#8U.3DL(#8V
M,#<L(#8V,3DL(#8V,S<L(#8V-3,L(#8V-3DL(#8V-C$L(#8V-S,L#0H ("  
M("  (#8V-SDL(#8V.#DL(#8V.3$L(#8W,#$L(#8W,#,L(#8W,#DL(#8W,3DL
M(#8W,S,L(#8W,S<L(#8W-C$L#0H ("  ("  (#8W-C,L(#8W-SDL(#8W.#$L
M(#8W.3$L(#8W.3,L(#8X,#,L(#8X,C,L(#8X,C<L(#8X,CDL(#8X,S,L#0H 
M("  ("  (#8X-#$L(#8X-3<L(#8X-C,L(#8X-CDL(#8X-S$L(#8X.#,L(#8X
M.3DL(#8Y,#<L(#8Y,3$L(#8Y,3<L#0H ("  ("  (#8Y-#<L(#8Y-#DL(#8Y
M-3DL(#8Y-C$L(#8Y-C<L(#8Y-S$L(#8Y-S<L(#8Y.#,L(#8Y.3$L(#8Y.3<L
M#0H ("  ("  (#<P,#$L(#<P,3,L(#<P,3DL(#<P,C<L(#<P,SDL(#<P-#,L
M(#<P-3<L(#<P-CDL(#<P-SDL(#<Q,#,L#0H ("  ("  (#<Q,#DL(#<Q,C$L
M(#<Q,C<L(#<Q,CDL(#<Q-3$L(#<Q-3DL(#<Q-S<L(#<Q.#<L(#<Q.3,L(#<R
M,#<L#0H ("  ("  (#<R,3$L(#<R,3,L(#<R,3DL(#<R,CDL(#<R,S<L(#<R
M-#,L(#<R-#<L(#<R-3,L(#<R.#,L(#<R.3<L#0H ("  ("  (#<S,#<L(#<S
M,#DL(#<S,C$L(#<S,S$L(#<S,S,L(#<S-#DL(#<S-3$L(#<S-CDL(#<S.3,L
M(#<T,3$L#0H ("  ("  (#<T,3<L(#<T,S,L(#<T-3$L(#<T-3<L(#<T-3DL
M(#<T-S<L(#<T.#$L(#<T.#<L(#<T.#DL(#<T.3DL#0H ("  ("  (#<U,#<L
M(#<U,3<L(#<U,C,L(#<U,CDL(#<U,S<L(#<U-#$L(#<U-#<L(#<U-#DL(#<U
M-3DL(#<U-C$L#0H ("  ("  (#<U-S,L(#<U-S<L(#<U.#,L(#<U.#DL(#<U
M.3$L(#<V,#,L(#<V,#<L(#<V,C$L(#<V,SDL(#<V-#,L#0H ("  ("  (#<V
M-#DL(#<V-CDL(#<V-S,L(#<V.#$L(#<V.#<L(#<V.3$L(#<V.3DL(#<W,#,L
M(#<W,3<L(#<W,C,L#0H ("  ("  (#<W,C<L(#<W-#$L(#<W-3,L(#<W-3<L
M(#<W-3DL(#<W.#DL(#<W.3,L(#<X,3<L(#<X,C,L(#<X,CDL#0H ("  ("  
M(#<X-#$L(#<X-3,L(#<X-C<L(#<X-S,L(#<X-S<L(#<X-SDL(#<X.#,L(#<Y
M,#$L(#<Y,#<L(#<Y,3D-"B  ("  ("  73L-" T*("  ("  (" O*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ#0H-" T*("  ("  ("  ("  ("  ($)I;F%R
M>2UC:&]P('-E87)C:"!O;B!S;W)T960 9&%T82X-" T*("  ("  (" J*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHO#0H-"B  ("  ("  <')I=F%T92!S=&%T
M:6, :6YT(&)S96%R8V  *'-H;W)T6UT 87)R87DL('-H;W)T(&UA=&-H*0T*
M("  ("  ("![#0H ("  ("  ("  ("  ("  <VEZ95]T(&PL('4L(&T[#0H 
M("  ("  ("  ("  ("  #0H ("  ("  ("  ("  ("  ;" ]("TQ.PT*("  
M("  ("  ("  ("  ('4 /2!A<G)A>2YL96YG=& [#0H-"B  ("  ("  ("  
M("  ("!W:&EL92 H;"LQ("$]('4I( T*("  ("  ("  ("  ("  ("  ("  
M('L-"B  ("  ("  ("  ("  ("  ("  ("!P<FEN=&8 *"(E9"P )60L("5D
M7&XB+"!L+"!U+"!M*3L-"B  ("  ("  ("  ("  ("  ("  ("!M(#T *&P 
M*R!U*2 O(#([#0H ("  ("  ("  ("  ("  ("  ("  :68 *&%R<F%Y6VU=
M(#P ;6%T8V I#0H ("  ("  ("  ("  ("  ("  ("  ("  (&P /2!M.PT*
M("  ("  ("  ("  ("  ("  ("  (&5L<V4-"B  ("  ("  ("  ("  ("  
M("  ("  ("!U(#T ;3L-"B  ("  ("  ("  ("  ("  ("  ("!]#0H-"B  
M("  ("  ("  ("  (&EF("AU(#X](&%R<F%Y+FQE;F=T:"!\?"!A<G)A>5MU
M72 A/2!M871C:"D-"B  ("  ("  ("  ("  ("  ("!R971U<FX +74[#0H 
M("  ("  ("  ("  ("!R971U<FX =3L-"B  ("  ("  ?0T*#0H ("  ("  
M("\J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ#0H-"B  ("  ("  ("  ("  
M("!R971U<FX 82!P<FEM92!N=6UB97( 8F5T=V5E;B R(&%N9" W.3$Y("AI
M;F-L=7-I=F4I('1H870-"B  ("  ("  ("  ("  ("!I<R!E<75A;"!T;R!O
M<B!L87)G97( =&AA;B!T:&4 9VEV96X )W1A<F=E="< ;G5M8F5R+B -" T*
M("  ("  (" J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ+PT*#0H ("  ("  
M('-T871I8R!I;G0 ;&]O:W5P("AS:&]R="!T87)G970I#0H ("  ("  ('L-
M"B  ("  ("  ("  ("  ("!S:&]R="!I;F1E>" ](&)S96%R8V  *'!R:6UE
M<RP =&%R9V5T*3L-"B  ("  ("  ("  ("  ("!I9B H:6YD97  /" P*0T*
M("  ("  ("  ("  ("  ("  ("!I;F1E>" ]("UI;F1E>#L-" T*("  ("  
M("  ("  ("  (&EF("AI;F1E>" ^/2!P<FEM97,N;&5N9W1H*0T*("  ("  
M("  ("  ("  ("  ("!I;F1E>" ]('!R:6UE<RYL96YG=&  +2 Q.PT*#0H 
M("  ("  ("  ("  ("  <F5T=7)N('!R:6UE<UMI;F1E>%T[#0H ("  ("  
'('T-"GT-" ``
`
end
Apr 23 2004