$ od -c -N 50000 [Indigo]<AltoSource>GRAPEVINESOURCES.DM!3 0000000 377 \0 \0 G r a p e v i n e . d e c 0000020 l \0 373 230 \t 322 315 \0 \0 376 001 \0 377 y / / 0000040 G r a p e v i n e . d e c l 0000060 - - d e f i n i t i o n s f 0000100 o r c l i e n t s o f G r 0000120 a p e v i n e p a c k a g e \r 0000140 / / C o p y r i g h t X e r 0000160 o x C o r p o r a t i o n 1 0000200 9 8 1 \r / / L a s t m o d i 0000220 f i e d O c t o b e r 3 0 , 0000240 1 9 8 1 2 : 0 9 P M b 0000260 y T a f t \r \r / / - - - - - - 0000300 - - - - - - - - - - - - - - - - * 0000400 - - - - - - \r s t r u c t u r e 0000420 R N a m e : / / R e 376 001 0000440 \0 & 200 g i s t e r e d N a m e 0000460 - - r e a l l y j u s t 0000500 a S t r i n g \r / / - - - - - 0000520 - - - - - - - - - - - - - - - - * 0000620 - - - - - - - \r [ l e n 0000640 g t h b y t e ; c h a r ^ 1 0000660 , 1 b y t e ] \r m a n i f e 0000700 s t m a x R N a m e L e n g t 0000720 h = 6 4 \r \r / / - - - - - - 0000740 - - - - - - - - - - - - - - - - * 0001040 - - - 376 001 \0 236 E - - - \r s t r u 0001060 c t u r e P a s s w o r d ^ 0 0001100 , 7 : b y t e / / R e p 0001120 r e s e n t a t i o n o f i 0001140 n d i v i d u a l ' s e n c r 0001160 y p t i o n k e y \r / / - - - 0001200 - - - - - - - - - - - - - - - - * 0001300 - - - - - - - - - \r m a n i f e 0001320 s t l e n P a s s w o r d = 0001340 s i z e P a s s w o r d / 1 0001360 6 \r \r / / - - - - - - - - - - - 0001400 - - - - - - - - - - - - - - - - * 0001440 - - - - - - - - 376 001 \0 B 243 - - - 0001460 - - - - - - - - - - - - - - - - 0001500 - - - - - - \r s t r u c t u r e 0001520 T i m e S t a m p : / / 0001540 G r a p e v i n e t i m e s 0001560 t a m p \r / / - - - - - - - - - 0001600 - - - - - - - - - - - - - - - - * 0001700 - - - \r [ \r n e t b y t e \r h 0001720 o s t b y t e \r t i m e w o 0001740 r d 2 \r ] \r m a n i f e s t 0001760 l e n T i m e S t a m p = s 0002000 i z e T i m e S t a m p / 1 6 0002020 \r \r / / - - - - - - - - - - - - 0002040 - - - - - - - - - - - - - 376 001 \0 0002060 203 K - - - - - - - - - - - - - - 0002100 - - - - - - - - - - - - - - - - * 0002140 - - - - - \r s t r u c t u r e 0002160 R L i s t : / / L i s t 0002200 o f R N a m e s - - h e a 0002220 d e r w o r d \r / / - - - - - 0002240 - - - - - - - - - - - - - - - - * 0002340 - - - - - - - \r [ \r s t a m p 0002360 @ T i m e S t a m p \r q u e u e 0002400 : \t \t / / q u e u e o f R 0002420 I t e m s \r [ h e a d w 0002440 o r d ; t a i l w o r d ] 0002460 \r ] 376 001 \0 C 252 \r m a n i f e s t 0002500 l e n R L i s t = s i z e 0002520 R L i s t / 1 6 \r \r / / - - - 0002540 - - - - - - - - - - - - - - - - * 0002640 - - - - - - - - - \r s t r u c t 0002660 u r e R I t e m : / / R 0002700 N a m e I t e m \r / / - - - - 0002720 - - - - - - - - - - - - - - - - * 0003020 - - - - - - - - \r [ \r n e x t 0003040 w o r d \t / / - > n e x t 0003060 R I t e m , 376 001 \0 307 236 o r z 0003100 e r o t o e n d l i s t \r 0003120 r N a m e @ R N a m e \t / / 0003140 R N a m e \r ] \r \r m a n i f e s 0003160 t \r [ \r / / R e s u l t / e r 0003200 r o r c o d e s r e t u r n 0003220 e d b y G r a p e v i n e N 0003240 a m e I n f o p r o c e d u r 0003260 e s . \r / / N o t a l l c 0003300 o d e s c a n b e r e t u 0003320 r n e d b y a l l p r o c 0003340 e d u r e s ; s e e i n d i 0003360 v i d u a l \r / / d e s c r i 0003400 p t i o n s . \r e c N o C h a n 0003420 g e = 2 2 7 0 \t / / u n c 0003440 h a n g e d f r o m p r e v 0003460 i o u s l o o k u p 376 001 \0 265 0003500 203 ( c a n o n l y a r i s e 0003520 \r \t \t \t / / w h e n a n e 0003540 x p l i c i t s t a m p w a 0003560 s p a s s e d i n ) \r e c G 0003600 r o u p = 2 2 7 1 \t \t / / 0003620 R N a m e i s a g r o u p 0003640 \r e c I n d i v i d u a l = 0003660 2 2 7 2 \t / / R N a m e i s 0003700 a n i n d i v i d u a l \r e 0003720 c B a d R N a m e = 2 2 7 3 0003740 \t / / R N a m e d o e s n 0003760 o t e x i s t \r e c A l l D o 0004000 w n = 2 2 7 4 \t / / c a n 0004020 ' t c o n t a c t a n y R 0004040 - S e r v e r f o r r e g i 0004060 s t r y \r e c B a d P a s s w o 0004100 r 376 \0 214 267 r d = 2 2 7 5 \t / 0004120 / b a d p a s s w o r d \r e 0004140 c I s M e m b e r = 2 2 7 6 0004160 \t / / i n d i v i d u a l i 0004200 s a m e m b e r o f g r 0004220 o u p \r e c I s N o t M e m b e 0004240 r = 2 2 7 7 \t / / i n d i 0004260 v i d u a l i s n o t a 0004300 m e m b e r o f g r o u p \r 0004320 ] \r 377 \0 \0 G r a p e v i n e I n 0004340 t e r n a l . d e c l \0 373 230 c O 0004360 5 \0 \0 376 001 \0 l E / / G r a p e 0004400 v i n e I n t e r n a l . d e c 0004420 l \r / / C o p y r i g h t X 0004440 e r o x C o r p o r a t i o n 0004460 1 9 8 1 \r / / L a s t m o 0004500 d i f i e d J a n u a r y 6 0004520 , 1 9 8 2 1 1 : 1 2 A M 0004540 b y T a f t \r \r \r s t r u c 0004560 t u r e G U S : / / G r 0004600 a p e v i n e U s e r S t a 0004620 t e \r [ \r s t r e a m w o r d 0004640 \t \t / / B S P s t r e a m 0004660 t o r e g i s t r a t i o n 0004700 s e r v e r \r i n U s e w o r 0004720 d \t \t / / n o n z e r o i f 0004740 s t r e a m i n u s e \r z 0004760 o n e w o r d 376 001 \0 s 006 \t \t / 0005000 / z o n e f o r G r a p e 0005020 v i n e p a c k a g e s t o 0005040 r a g e a l l o c a t i o n \r 0005060 s o c k e t H i g h w o r d \t 0005100 \t / / h i g h w o r d t o 0005120 u s e f o r R S e r v e r 0005140 s o c k e t n u m b e r s \r 0005160 ] \r m a n i f e s t l e n G U 0005200 S = s i z e G U S / 1 6 \r 0005220 \r m a n i f e s t \r [ \r / / I 0005240 n t e r n a l e r r o r c o 0005260 d e s - - c l i e n t s s 0005300 h o u l d n e v e r s e e 0005320 t h e s e \r e c B a d P r o t o 0005340 c o l = 2 2 8 5 \t / / p r 0005360 o t o c o l e r r o r , 376 001 \0 0005400 254 374 c a l l e d w i t h E 0005420 r r o r s o n s t r e a m \r 0005440 \r / / R e t u r n C o d e f 0005460 o r B S P s t r e a m f a 0005500 i l u r e - - n o t i n 0005520 s e t a c t u a l l y r e t 0005540 u r n e d b y G V \r r c S t 0005560 r e a m F a i l e d = 3 7 7 0005600 B \r r n S t r e a m F a i l e d 0005620 = 3 7 7 B \r \r / / T i m e 0005640 o u t s \r i n i t i a l T i m e 0005660 o u t = 1 5 0 0 \t / / 1 5 0005700 s e c o n d s f o r i n i 0005720 t i a l R F C t o R - S e 0005740 r v e r \r d a t a T i m e o u t 0005760 = 1 2 0 0 0 \t / / 2 m i 0006000 n u 376 \0 ^ 247 034 t e s f o r r 0006020 e q u e s t / r e s p o n s e 0006040 t o c o m p l e t e \r c l o s 0006060 e T i m e o u t = 1 0 0 0 \t 0006100 / / 1 0 s e c o n d s t 0006120 o c l o s e c o n n e c t i 0006140 o n \r ] \r 377 \0 \0 G r a p e v i n 0006160 e P r o t o c o l . d e c l \0 373 0006200 230 ` 303 307 \0 \0 376 001 \0 \a ^ / / G r 0006220 a p e v i n e P r o t o c o l . 0006240 d e c l \r / / C o p y r i g h 0006260 t X e r o x C o r p o r a t 0006300 i o n 1 9 8 1 , 1 9 8 2 \r / 0006320 / L a s t m o d i f i e d 0006340 J a n u a r y 4 , 1 9 8 2 0006360 1 2 : 3 2 P M b y T a f 0006400 t \r \r / / A t t h e m o m 0006420 e n t , t h i s f i l e c 0006440 o n t a i n s o n l y t h o 0006460 s e d e f i n i t i o n s h 0006500 a v i n g t o d o \r / / w 0006520 i t h R - S e r v e r l o c 0006540 a t i o n , a u t h e n t i c 0006560 a t i o n , a n d g r o u p 0006600 m e m b e r s h i p 376 001 \0 356 n 0006620 . \r \r m a n i f e s t \r [ \r / / 0006640 E c h o p r o t o c o l - 0006660 - f o r p o l l i n g G r 0006700 a p e v i n e s e r v e r s 0006720 o n s o c R e g S e r v e r P 0006740 o l l i n g \r p t E c h o M e 0006760 = 1 \r p t I m A n E c h o = 0007000 2 \r \r / / G r a p e v i n e 0007020 s e r v e r s o c k e t s \r 0007040 s o c R e g S e r v e r E n q u 0007060 i r y = 5 0 B \r s o c R e g 0007100 S e r v e r S p a r e = 5 1 0007120 B \r s o c R e g S e r v e r P o 0007140 l l i n g = 5 2 B \r \r / / 0007160 R e t u r n c o d e s \r r c D 0007200 o n e = 0 \t \t / / o p e r 0007220 376 001 \0 336 374 a t i o n s u c c e 0007240 e d e d \r r c N o C h a n g e 0007260 = 1 \t \t / / e n q u i r y : 0007300 g i v e n s t a m p w a s 0007320 s t i l l v a l i d \r r c B 0007340 a d O p e r a t i o n = 4 \t 0007360 / / b a d o p e r a t i o n 0007400 n u m b e r \r r c B a d P r o 0007420 t o c o l = 5 \t / / p r o 0007440 t o c o l v i o l a t i o n \r 0007460 r c B a d R N a m e = 6 \t \t 0007500 / / R N a m e d o e s n o 0007520 t e x i s t o r h a s w 0007540 r o n g t y p e \r r c B a d P 0007560 a s s w o r d = 7 \t / / w 0007600 h a t i t s a y s \r r c W r 0007620 o n g S e 376 001 \0 016 @ r v e r = 0007640 8 \t / / t h e R N a m e ' 0007660 s r e g i s t r y i s n o 0007700 t i n t h i s R - S e r v 0007720 e r \r r c A l l D o w n = 9 0007740 \t \t / / r e m o t e R - S e 0007760 r v e r w a s d o w n f o 0010000 r A C L e n q u i r y \r \r / 0010020 / R N a m e t y p e s \r r n 0010040 G r o u p = 0 \t \t / / g r 0010060 o u p o f n a m e s \r r n I 0010100 n d i v i d u a l = 1 \t / / 0010120 p e r s o n o r m a c h i 0010140 n e \r r n N o t F o u n d = 0010160 2 \t \t / / t h e R N a m e 0010200 d o e s n o t e x i s t \r r 0010220 n D e a d = 3 \t 376 001 \0 X 304 \t 0010240 / / t h e R N a m e h a s 0010260 b e e n d e l e t e d f r 0010300 o m t h e d a t a b a s e 0010320 \r ] \r \r s t r u c t u r e R e 0010340 t u r n C o d e : / / R e 0010360 t u r n e d f r o m a l l 0010400 R - S e r v e r o p e r a t i 0010420 o n s \r [ c o d e b y 0010440 t e ; t y p e b y t e ] \r 0010460 \f \r m a n i f e s t / / R 0010500 - S e r v e r o p e r a t i o 0010520 n c o d e s \r [ \r / / O p e 0010540 r a t i o n s \t \t a r g u m e n 0010560 t s \t \t r e s u l t s \r \r o p N 0010600 o O p = 0 \t / / \t n o n e \t 0010620 \t \t n o n e \r \r o p R e a d M 376 0010640 001 \0 7 223 e m b e r s = 2 0010660 / / \t R N a m e , s t a m p \t 0010700 \t c o d e = d o n e , s t a m 0010720 p , R - L i s t \r \t \t / / \t \t 0010740 \t \t c o d e = n o C h a n g e \r 0010760 \t \t / / \t \t \t \t c o d e = b a d 0011000 R N a m e ( # g r o u p ) \r \t 0011020 \t / / \t \t \t \t c o d e = w r o n 0011040 g S e r v e r \r \r o p R e a d O 0011060 w n e r s = 3 / / \t R N 0011100 a m e , s t a m p \t \t c o d e 0011120 = d o n e , s t a m p , R - 0011140 L i s t \r \t \t / / \t \t \t \t c o d 0011160 e = n o C h a n g e \r \t \t / / \t 0011200 \t \t \t c o d e = b a d R N a m e 0011220 ( # g r o u p ) \r \t \t / / \t \t 0011240 \t \t c o 376 001 \0 \n 305 d e = w r o n 0011260 g S e r v e r \r \r o p R e a d F 0011300 r i e n d s = 4 / / \t R 0011320 N a m e , s t a m p \t \t c o d 0011340 e = d o n e , s t a m p , R 0011360 - L i s t \r \t \t / / \t \t \t \t c o 0011400 d e = n o C h a n g e \r \t \t / / 0011420 \t \t \t \t c o d e = b a d R N a m 0011440 e ( # g r o u p ) \r \t \t / / \t 0011460 \t \t \t c o d e = w r o n g S e r 0011500 v e r \r \r o p R e a d C o n n e 0011520 c t = 7 / / \t R N a m e 0011540 \t \t \t c o d e = d o n e , c o 0011560 n n e c t \r \t \t / / \t \t \t \t c o 0011600 d e = b a d R N a m e ( # i n 0011620 d i v i d u a l ) \r \t \t / / \t \t 0011640 \t \t c o d e = w r 376 001 \0 \0 363 o n 0011660 g S e r v e r \r \r o p R e a d R 0011700 e m a r k = 8 / / \t R N 0011720 a m e \t \t \t c o d e = d o n e , 0011740 r e m a r k \r \t \t / / \t \t \t \t 0011760 c o d e = b a d R N a m e ( # 0012000 g r o u p ) \r \t \t / / \t \t \t \t c 0012020 o d e = w r o n g S e r v e r \r 0012040 \r o p A u t h e n t i c a t e 0012060 = 9 / / \t R N a m e , P a 0012100 s s w o r d \t \t c o d e = d o n 0012120 e \r \t \t / / \t \t \t \t c o d e = b 0012140 a d P a s s w o r d \r \t \t / / \t 0012160 \t \t \t c o d e = b a d R N a m e 0012200 ( # i n d i v i d u a l ) \r \t 0012220 \t / / \t \t \t \t c o d e = w r o n 0012240 g S e r v e r \r \r o p I s I 376 001 0012260 \0 l 352 n L i s t = 4 6 / / 0012300 G r o u p , M e m b e r , 0012320 w h o , l i s t , c o v e r 0012340 a g e \r \t \t / / \t \t \t \t c o d e 0012360 = d o n e , m e m b e r s h i 0012400 p \r \t \t / / \t \t \t \t c o d e = b 0012420 a d R N a m e ( # g r o u p ) 0012440 \r \t \t / / \t \t \t \t c o d e = w r 0012460 o n g S e r v e r \r \t / / G r 0012500 o u p a n d M e m b e r a 0012520 r e R N a m e s . \r \t / / w 0012540 h o , l i s t , a n d c o 0012560 v e r a g e a r e s e n t 0012600 a s 8 - b i t b y t e s . \r 0012620 \t / / T h e f o l l o w i n 0012640 g d e f i n i t i o n s a r 0012660 e f 376 001 \0 277 C o r c o n s t 0012700 r u c t i n g I s I n A C L ' 0012720 s \r \t / / " d e s c r i p t o 0012740 r " a r g u m e n t , w h i 0012760 c h c o n s i s t s o f w 0013000 h o , l i s t , a n d c o 0013020 v e r a g e \r \t / / p a c k e 0013040 d i n t o o n e w o r d . 0013060 \r \t d I t s e l f = 0 l s 0013100 h i f t 8 ; d I t s R e g i 0013120 s t r y = 1 l s h i f t 0013140 8 \t \t \t / / w h o \r \t d M e m 0013160 b e r = 0 l s h i f t 4 0013200 ; d O w n e r = 1 l s h 0013220 i f t 4 ; d F r i e n d = 0013240 2 l s h i f t 4 \t / / l 0013260 i s t \r \t d D i 376 \0 202 230 031 r e c 0013300 t = 0 ; d C l o s u r e 0013320 = 1 ; d U p A r r o w = 0013340 2 \t \t \t \t / / c o v e r a g e 0013360 \r ] \r \r s t r u c t u r e L i 0013400 s t D e s c : [ b l a n k 0013420 b i t 4 ; w h o b i t 4 0013440 ; l i s t b i t 4 ; c o 0013460 v e r a g e b i t 4 ] \r 377 0013500 \0 \0 G r a p e v i n e E n q u i 0013520 r e . b c p l \0 373 233 225 340 226 \0 \0 376 0013540 001 \0 264 + / / G r a p e v i n e 0013560 E n q u i r e . b c p l \r / / 0013600 C o p y r i g h t X e r o x 0013620 C o r p o r a t i o n 1 9 8 1 0013640 , 1 9 8 3 \r / / L a s t m 0013660 o d i f i e d S e p t e m b e 0013700 r 1 9 , 1 9 8 3 9 : 4 1 0013720 A M b y T a f t \r \r g e t 0013740 " G r a p e v i n e . d e c l 0013760 " \r g e t " G r a p e v i n e 0014000 P r o t o c o l . d e c l " \r g 0014020 e t " G r a p e v i n e I n t 0014040 e r n a l . d e c l " \r g e t 0014060 " S t r e a m s . d " \r \r e x t 0014100 e r n a l \r [ \r / / o u t g o 0014120 i n g p r o c e d u r e s \r E 0014140 n q u i 376 001 \0 376 224 r e ; E n q 0014160 u i r e W i t h S t a m p \r \r / 0014200 / i n c o m i n g p r o c e 0014220 d u r e s \r S e n d W o r d ; 0014240 S e n d R N a m e ; R e c e i 0014260 v e W o r d ; F i n d S e r v 0014300 e r ; G V C r e a t e S t r e 0014320 a m \r G V C l a i m S t r e a m 0014340 ; G V R e l e a s e S t r e a 0014360 m ; B S P W r i t e B l o c k 0014400 ; B S P F o r c e O u t p u t 0014420 \r E x t r a c t S u b s t r i n 0014440 g ; C o n c a t e n a t e S t 0014460 r i n g s \r D e f a u l t A r g 0014500 s ; B l o c k ; M y F r a m 0014520 e ; F r e e \r \r / / i n c o 0014540 m i n g s t a t 376 001 \0 335 002 i c 0014560 s \r @ g u s ; o f f s e t B S 0014600 P S t r \r ] \r \r / / - - - - - - 0014620 - - - - - - - - - - - - - - - - * 0014720 - - - - - - \r l e t E n q u i 0014740 r e W i t h S t a m p ( s t r e 0014760 a m , o p , n a m e , s t 0015000 a m p ; n u m a r g s n a ) 0015020 = v a l o f \r / / - - - - - 0015040 - - - - - - - - - - - - - - - - * 0015140 - - - - - - - \r / / S e n 376 001 0015160 \0 264 245 d s a n e n q u i r y 0015200 o f t h e f o r m [ o p 0015220 , n a m e , s t a m p ] a 0015240 n d r e t u r n s t h e \r / 0015260 / r e s u l t i n g r e t u 0015300 r n C o d e . T h e d e f 0015320 a u l t s t a m p u s e d 0015340 i s n u l l . \r [ \r l e t d 0015360 e f a u l t S t a m p = t a 0015400 b l e [ 0 ; 0 ; 0 ] \r 0015420 D e f a u l t A r g s ( l v n 0015440 a , - 3 , d e f a u l t S t 0015460 a m p ) \r S e n d W o r d ( s t 0015500 r e a m , o p ) / / o p 0015520 \r S e n d R N a m e ( s t r e a 0015540 m , n a m e ) / / n a m 0015560 e \r B 376 001 \0 351 @ S P W r i t e B 0015600 l o c k ( s t r e a m , s t a 0015620 m p , 0 , 2 * l e n T i m e 0015640 S t a m p ) / / s t a m p 0015660 \r B S P F o r c e O u t p u t ( 0015700 s t r e a m - o f f s e t B S P 0015720 S t r , t r u e ) \r r e s u l 0015740 t i s R e c e i v e W o r d ( 0015760 s t r e a m ) / / r e t u 0016000 r n C o d e \r ] \r \f \r / / - - - 0016020 - - - - - - - - - - - - - - - - * 0016120 - - - - - - - - - \r a n d E n 0016140 q u i r e ( n a m e , p r o c 0016160 , a r g ) = 376 001 \0 ' } v a 0016200 l o f \r / / - - - - - - - - - - 0016220 - - - - - - - - - - - - - - - - * 0016320 - - \r / / O p e n s a B S 0016340 P s t r e a m t o a r e 0016360 g i s t r a t i o n s e r v e 0016400 r t h a t h a s a c o p 0016420 y o f t h e r e g i s t r 0016440 y \r / / f o r n a m e ( a 0016460 n R N a m e ) , a n d t h 0016500 e n c a l l s P r o c ( s t 0016520 r e a m , n a m e , a r g ) 0016540 . \r / / P r o c s h o u l d 0016560 r e t u r n a R e t 376 001 \0 0016600 307 : u r n C o d e d e s c r i 0016620 b i n g t h e o u t c o m e 0016640 ; a n y a d d i t i o n a l 0016660 \r / / r e s u l t s m a y 0016700 b e c o m m u n i c a t e d 0016720 v i a s t o r a g e p o i n 0016740 t e d t o b y a r g . \r / 0016760 / N o t e t h a t p r o c 0017000 m a y b e c a l l e d m 0017020 o r e t h a n o n c e , s 0017040 i n c e t h e f i r s t r 0017060 e g i s t r a t i o n \r / / s 0017100 e r v e r w e t a l k t o 0017120 m a y n o t h a v e t h 0017140 e r e q u i r e d i n f o r 0017160 m a t i o n , o r t h e c 0017200 o n 376 001 \0 5 360 n e c t i o n \r / 0017220 / m a y f a i l i n t h 0017240 e m i d d l e . A l s o , 0017260 a n y s t r e a m e r r o 0017300 r s o n s t r e a m c a u 0017320 s e c o n t r o l \r / / t o 0017340 b e r i p p e d a w a y 0017360 f r o m p r o c , s o p r 0017400 o c m u s t n o t a c q u 0017420 i r e a n y r e s o u r c e 0017440 s n o t \r / / k n o w n t 0017460 o t h e c a l l e r o f 0017500 E n q u i r e . \r / / R e t u 0017520 r n s t h e R e t u r n C o 0017540 d e r e t u r n e d b y p 0017560 r o c i f p r o c w a s 0017600 c a l l e d 376 001 \0 316 D s u c c 0017620 e s s f u l l y , \r / / o r 0017640 a l o c a l l y - m a n u f a 0017660 c t u r e d R e t u r n C o d 0017700 e o t h e r w i s e . \r [ \r l 0017720 e t d o t = 0 \r f o r i 0017740 = 1 t o n a m e > > R N 0017760 a m e . l e n g t h d o \r 0020000 i f n a m e > > R N a m e . 0020020 c h a r ^ i e q $ . t h e 0020040 n d o t = i \r i f d o t 0020060 e q 0 r e s u l t i s r 0020100 c B a d R N a m e l s h i f t 0020120 8 / / m i s s i n g " 0020140 . " i n R N a m e \r \r / / 0020160 f o r r e g i s t r y N A , 0020200 t h e g r o u p n 376 001 \0 4 0020220 z a m e d N A . G V e n u m 0020240 e r a t e s i t s R - S e r 0020260 v e r s \r l e t z o n e = 0020300 g u s > > G U S . z o n e \r l e 0020320 t r e g i s t r y = C o n 0020340 c a t e n a t e S t r i n g s ( 0020360 E x t r a c t S u b s t r i n g 0020400 ( n a m e , d o t + 1 , 0 , 0020420 z o n e ) , \r " . G V " , 0020440 t r u e , f a l s e , z o n 0020460 e ) \r \r / / I f w e a l r 0020500 e a d y h a v e a s t r e 0020520 a m o p e n , t r y i t 0020540 f i r s t . T h a t i s , 0020560 a s k t h e R - S e r v e 0020600 r \r / / w e a r e c u r r 0020620 e 376 001 \0 313 ( n t l y c o n n e 0020640 c t e d t o t o p e r f o 0020660 r m t h e e n q u i r y . 0020700 I f t h a t s u c c e e d 0020720 s , \r / / w e a r e d o n 0020740 e ; i f n o t , w e m u 0020760 s t g o t h r o u g h t h 0021000 e R - S e r v e r l o c a t 0021020 i o n a l g o r i t h m . \r l 0021040 e t r e t u r n C o d e = 0021060 n i l \r G V C l a i m S t r e a 0021100 m ( ) \r i f g u s > > G U S . 0021120 s t r e a m n e 0 t h e n 0021140 \r [ \r g u s > > G U 0021160 S . s t r e a m > > S T . p a r 0021200 1 = M y F r a m e ( ) \r 0021220 r e t u r 376 001 \0 024 321 n C o d e 0021240 = p r o c ( g u s > > G U S 0021260 . s t r e a m , n a m e , a 0021300 r g ) \r ] \r G V R e l e a 0021320 s e S t r e a m ( ) \r \f \r / / 0021340 E n q u i r e ( c o n t ' d ) 0021360 \r \r / / T h e e n q u i r y 0021400 p r o c e s s c o n s i s t 0021420 s o f t w o m a i n s t 0021440 a g e s : \r / / s t a g e 0 0021460 : F i n d A N Y R - S e r 0021500 v e r a n d a s k i t t 0021520 o l o o k u p n a m e ; 0021540 i f t h i s s u c c e e d s 0021560 \r / / \t t h e n w e 0021600 a r e d o n e . \r / / s t 0021620 a g e 1 : f i n d 376 001 \0 216 q 0021640 t h e R - S e r v e r f o 0021660 r N A . G V a n d a s k 0021700 i t t o l o o k u p n a 0021720 m e . \r / / F i n d S e r v e 0021740 r w o u l d d o t h e c 0021760 o m p l e t e r e g i s t r y 0022000 l o c a t i o n p r o t o c 0022020 o l i f w e \r / / s i m p 0022040 l y p a s s e d i t N A . 0022060 G V . H o w e v e r , w e 0022100 e m p l o y t h e f o l l 0022120 o w i n g o p t i m i z a t i 0022140 o n : \r / / i f w e d o n 0022160 ' t c u r r e n t l y h a v 0022200 e a n o p e n s t r e a m 0022220 , w e f i r s t a s k \r / 0022240 376 001 \0 ; 233 / F i n d S e r v e 0022260 r t o o p e n a s t r e 0022300 a m t o A N Y R - S e r v 0022320 e r , a n d w e p r e s e 0022340 n t n a m e \r / / t o t h 0022360 a t s e r v e r i n t h e 0022400 h o p e t h a t t h e s 0022420 e r v e r h a s a c o p y 0022440 o f n a m e ' s \r / / r e 0022460 g i s t r y . O n l y i f 0022500 t h i s f a i l s d o w 0022520 e a s k F i n d S e r v e r 0022540 t o g o t h r o u g h \r / 0022560 / t h e c o m p l e t e p 0022600 r o t o c o l f o r l o c a 0022620 t i n g r e g i s t r y - - 0022640 b u t 376 001 \0 356 257 b y t h i 0022660 s t i m e w e \r / / h a v 0022700 e a l r e a d y e s t a b l 0022720 i s h e d a s t r e a m t 0022740 o S O M E R - S e r v e r , 0022760 s o t h e f i r s t p a 0023000 r t \r / / o f t h e R - S 0023020 e r v e r l o c a t i o n p 0023040 r o t o c o l w i l l n o t 0023060 n e e d t o b e r e p e 0023100 a t e d . \r \r / / N o t e : 0023120 i f t h e r e w a s a c 0023140 a c h e d s t r e a m , a n 0023160 d t h e s t r e a m i s 0023200 s t i l l a l i v e , a n d 0023220 \r / / p r o c d i d N O T 0023240 r e t u r n W r 376 001 \0 274 266 o 0023260 n g S e r v e r , t h e n w 0023300 e a r e a l r e a d y c o 0023320 n n e c t e d t o t h e \r / 0023340 / c o r r e c t s e r v e r 0023360 a n d r e c e i v e d t h 0023400 e r e s p o n s e w e d e 0023420 s e r v e d ; f i r s t S t a 0023440 g e = 2 \r / / b y p a s s e s 0023460 a l l t h e R - S e r v e 0023500 r l o c a t i o n p r o t o 0023520 c o l i n t h i s c a s e 0023540 . \r l e t f i r s t S t a g e 0023560 = g u s > > G U S . s t r e 0023600 a m e q 0 ? 0 , \r r e t 0023620 u r n C o d e < < R e t u r n C 0023640 o d e . c o d e e q r c W 376 0023660 001 \0 336 377 r o n g S e r v e r ? 0023700 1 , 2 \r f o r s t a g e = 0023720 f i r s t S t a g e t o 1 0023740 d o \r [ \r / / S 0023760 t a g e 0 : t r y t o f 0024000 i n d A N Y R - S e r v e r 0024020 , a n d o p e n a s t r 0024040 e a m t o i t . \r / / 0024060 S t a g e 1 : t r y t o 0024100 f i n d t h e c o r r e c 0024120 t R - S e r v e r , a n d 0024140 o p e n a s t r e a m t o 0024160 i t . \r / / I n s t 0024200 a g e 0 , t h e c a l l 0024220 o f F i n d S e r v e r d o 0024240 e s n ' t c a l l u s b a 0024260 c k \r 376 001 \0 356 t / / r e 0024300 c u r s i v e l y , b e c a u 0024320 s e F i n d S e r v e r l o 0024340 c a t e s r e g i s t r y G 0024360 V b y \r / / c o n s u 0024400 l t i n g a N a m e L o o 0024420 k u p S e r v e r o r b y 0024440 b r o a d c a s t i n g . \r 0024460 / / I n s t a g e 1 , 0024500 F i n d S e r v e r m a y 0024520 c a l l u s b a c k r e c 0024540 u r s i v e l y w h i l e \r 0024560 / / e x p a n d i n g N 0024600 A . G V a n d o b t a i n i 0024620 n g c o n n e c t s i t e s 0024640 . \r l e t e c = F i 0024660 n d S e r v e r ( 376 001 \0 236 K ( s 0024700 t a g e e q 0 ? " G r a p 0024720 e v i n e R S e r v e r " , r 0024740 e g i s t r y ) , \r s o 0024760 c R e g S e r v e r P o l l i n 0025000 g , G V C r e a t e S t r e a 0025020 m ) \r t e s t e c n e 0025040 0 \r i f s o \r 0025060 [ \r \t / / u n 0025100 a b l e t o c o n t a c t 0025120 a n y r e g i s t r a t i o n 0025140 s e r v e r ( s t a g e 0 0025160 ) \r \t / / o r a n y s e 0025200 r v e r f o r r e g i s t r 0025220 y ( s t a g e 1 ) . I n 0025240 b o t h c a s e s t h i s 0025260 i s f a t a l . \r 376 001 0025300 \0 253 305 r e t u r n C 0025320 o d e < < R e t u r n C o d e . 0025340 c o d e = e c e q e c B 0025360 a d R N a m e ? r c B a d R N 0025400 a m e , r c A l l D o w n \r \t 0025420 b r e a k \r \t ] \r 0025440 i f n o t \r 0025460 [ \r \t / / s u c c e s s f u 0025500 l l y o p e n e d a s t r 0025520 e a m t o s o m e R - S e 0025540 r v e r ( s t a g e 0 ) o 0025560 r t o s o m e \r 0025600 / / R - S e r v e r f 0025620 o r r e g i s t r y ( s t a 0025640 g e 1 ) . N o w a t t e 0025660 m p t t o p e r f o r m t 0025700 h e 376 001 \0 ) 005 e n q u i r y . 0025720 \r G V C l a i 0025740 m S t r e a m ( ) \r \t g u s > 0025760 > G U S . s t r e a m > > S T . 0026000 p a r 1 = M y F r a m e ( ) 0026020 \r \t r e t u r n C o d e = 0026040 p r o c ( g u s > > G U S . s t 0026060 r e a m , n a m e , a r g ) 0026100 \r G V R e l e 0026120 a s e S t r e a m ( ) \r \t \r \t 0026140 / / I f t h e s e r v e 0026160 r d o e s n o t k n o w 0026200 a b o u t n a m e a n d t 0026220 h i s i s s t a g e 0 , \r 0026240 \t / / g o a r o u n d a 0026260 g a i n . I n a l l o t 0026300 h e r c a s e 376 001 \0 240 243 s w 0026320 e a r e f i n i s h e d . \r 0026340 \t / / A W r o n g S e r v 0026360 e r e r r o r i n s t a g 0026400 e 1 i n d i c a t e s a n 0026420 i n c o n s i s t e n c y \r \t 0026440 / / i n t h e d a t a 0026460 b a s e ; c o n v e r t t h 0026500 i s t o B a d N a m e . \r \t 0026520 t e s t r e t u r n C o d e 0026540 < < R e t u r n C o d e . c o d 0026560 e e q r c W r o n g S e r v 0026600 e r \r \t i f s o r e t 0026620 u r n C o d e < < R e t u r n C 0026640 o d e . c o d e = r c B a d 0026660 R N a m e \r \t i f n o t 0026700 b r e a k \r \t ] \r 376 \0 / 0026720 221 276 ] \r \r F r e e ( z o n e , 0026740 r e g i s t r y ) \r r e s u l 0026760 t i s r e t u r n C o d e \r ] 0027000 \r 377 \0 \0 G r a p e v i n e L o c 0027020 a t e . b c p l \0 373 233 225 337 D \0 \0 0027040 376 001 \0 \f 364 / / G r a p e v i n 0027060 e L o c a t e . b c p l \r / / 0027100 C o p y r i g h t X e r o x 0027120 C o r p o r a t i o n 1 9 8 1 0027140 , 1 9 8 2 , 1 9 8 3 \r / / 0027160 L a s t m o d i f i e d S e 0027200 p t e m b e r 1 9 , 1 9 8 3 0027220 9 : 3 7 A M b y T a f 0027240 t \r \r g e t " P u p 0 . d e c 0027260 l " \r g e t " P u p 1 . d e c 0027300 l " \r g e t " G r a p e v i n 0027320 e . d e c l " \r g e t " G r a 0027340 p e v i n e P r o t o c o l . d 0027360 e c l " \r g e t " G r a p e v 0027400 i n e I n t e r n a l . d e c l 0027420 " \r \r e x t e r n a l \r [ \r / / 0027440 o u t g 376 001 \0 035 [ o i n g p 0027460 r o c e d u r e s \r F i n d S e 0027500 r v e r \r \r / / i n c o m i n 0027520 g p r o c e d u r e s \r R e a 0027540 d R L i s t ; D e s t r o y R 0027560 L i s t ; R e a d R S t r i n 0027600 g ; G V C r e a t e S t r e a 0027620 m \r O p e n L e v e l 1 S o c k 0027640 e t ; C l o s e L e v e l 1 S 0027660 o c k e t ; C o m p l e t e P 0027700 u p \r G e t P B I ; R e l e a 0027720 s e P B I ; S e t P u p D P o 0027740 r t ; L o c a t e N e t \r E n 0027760 u m e r a t e P u p A d d r e s 0030000 s e s \r I n i t i a l i z e C o 0030020 n t e x t ; E n q u e u e ; 0030040 D e q u e u e ; U 376 001 \0 346 x n 0030060 q u e u e ; Q u e u e L e n g 0030100 t h \r S t r i n g C o m p a r e 0030120 \r B l o c k ; D i s m i s s ; 0030140 S e t T i m e r ; T i m e r 0030160 H a s E x p i r e d \r A l l o c 0030200 a t e ; F r e e ; M o v e B 0030220 l o c k ; Z e r o \r \r / / i 0030240 n c o m i n g s t a t i c s \r 0030260 @ g u s ; p u p C t x Q ; n 0030300 d b Q \r ] \r \r s t r u c t u r e 0030320 A R e c : \t / / A T a b l e 0030340 r e c o r d f o r R - S e 0030360 r v e r p r o b i n g \r [ \r r 0030400 e q u e s t P o r t @ P o r t 0030420 / / p o r t t o p r o d 0030440 \r h o p s w o r d \t / / d 376 0030460 001 \0 023 006 i s t a n c e f r o m 0030500 h e r e ; z e r o i f p 0030520 r e S o r t e d \r / / T h e 0030540 r e p l y P o r t d o e s n ' 0030560 t h a v e a n y t h i n g 0030600 t o d o w i t h t h e c 0030620 o r r e s p o n d i n g r e q 0030640 u e s t P o r t . \r / / T h e 0030660 y a r e k e p t i n t h 0030700 e s a m e d a t a s t r u 0030720 c t u r e i n o r d e r t 0030740 o a v o i d h a v i n g t 0030760 w o s e p a r a t e \r / / t 0031000 a b l e s . ( T h e n u m 0031020 b e r o f p o t e n t i a l 0031040 r e p l i e s i s e s s e 0031060 n t i a 376 001 \0 236 026 l l y t h e 0031100 s a m e a s \r / / t h e 0031120 n u m b e r o f r e q u e s 0031140 t s . ) \r r e p l y P o r t @ 0031160 P o r t \r ] \r m a n i f e s t 0031200 l e n A R e c = s i z e A 0031220 R e c / 1 6 \r \r s t r u c t u r 0031240 e A T a b l e : / / A d d 0031260 r e s s t a b l e f o r R 0031300 - S e r v e r p r o b i n g \r 0031320 [ \r c o u n t w o r d \t / / 0031340 n u m b e r o f A R e c s \r 0031360 m a x C o u n t w o r d \t / / 0031400 m a x i m u m n u m b e r 0031420 o f A R e c s t h a t w i 0031440 l l f i t i n A T a b l e 0031460 \r p r e S o r t e 376 001 \0 c O d 0031500 w o r d \t / / t r u e i f f 0031520 A R e c s a r e a l r e a 0031540 d y s o r t e d b y h o p 0031560 c o u n t \r n R e p l i e s 0031600 w o r d \t / / n u m b e r o 0031620 f r e p l i e s r e c e i v 0031640 e d \r r e c ^ 0 , 0 @ A R e c 0031660 \r ] \r m a n i f e s t l e n A 0031700 T a b l e H e a d e r = o f 0031720 f s e t A T a b l e . r e c / 0031740 1 6 \r \f \r / / - - - - - - - - - 0031760 - - - - - - - - - - - - - - - - * 0032060 - - - \r l e t F i n d S e 376 001 0032100 \0 5 241 r v e r ( s e r v i c e N 0032120 a m e , p o l l i n g S o c k 0032140 e t , p r o c , a r g ) = 0032160 v a l o f \r / / - - - - - - - 0032200 - - - - - - - - - - - - - - - - * 0032300 - - - - - \r / / A t t e m p t 0032320 s t o f i n d a n i n s 0032340 t a n c e o f t h e s e r 0032360 v i c e w i t h t h e s p 0032400 e c i f i e d n a m e . \r / / 0032420 I f s e r v i c e N a m e 0032440 c o n t a i n s a " . " , 0032460 t r e a t s i t a s a n 0032500 R N a 376 001 \0 H 345 m e ( w h i c 0032520 h m u s t b e \r / / a G 0032540 r a p e v i n e g r o u p ) 0032560 a n d a t t e m p t s t o 0032600 l o c a t e t h e n e a r e 0032620 s t f u n c t i o n i n g i 0032640 n s t a n c e \r / / o f t h 0032660 e s e r v i c e a m o n g 0032700 t h e g r o u p ' s m e m b 0032720 e r s ( w h i c h m u s t 0032740 b e i n d i v i d u a l s \r / 0032760 / w h o s e c o n n e c t 0033000 s i t e s a r e v a l i d 0033020 P u p a d d r e s s c o n s 0033040 t a n t s ) . \r / / I f s e 0033060 r v i c e N a m e d o e s n 0033100 o t c o n t a 376 001 \0 A 225 i n 0033120 a " . " , t r e a t s i t 0033140 a s a n N L S n a m e 0033160 a n d \r / / a t t e m p t s 0033200 t o l o c a t e t h e n e 0033220 a r e s t f u n c t i o n i n 0033240 g i n s t a n c e o f t h 0033260 e s e r v i c e w i t h o u 0033300 t \r / / c o n s u l t i n g 0033320 G r a p e v i n e ( a l o c 0033340 a l b r o a d c a s t i s 0033360 a l s o i s s u e d ) . \r / / 0033400 I n e i t h e r c a s e , 0033420 f o r e a c h p o t e n t 0033440 i a l i n s t a n c e o f 0033460 t h e s e r v i c e , c a l 0033500 l s p r o c ( p o r t , 376 001 \0 0033520 _ p a r g ) , \r / / w h i c 0033540 h s h o u l d a t t e m p t 0033560 t o o p e n a c o n n e 0033600 c t i o n t o t h e g i v 0033620 e n p o r t a n d r e t u 0033640 r n t r u e \r / / i f s u 0033660 c c e s s f u l a n d f a l 0033700 s e i f n o t ( a r g m 0033720 a y b e u s e d t o c o 0033740 m m u n i c a t e a d d i t i 0033760 o n a l \r / / p a r a m e t e 0034000 r s a n d / o r r e s u l t 0034020 s ) . P r o c s h o u l d 0034040 a t l e a s t d e f a u l 0034060 t a n d p e r h a p s \r / / 0034100 u n c o n d i t i o n a l l y 0034120 s 376 001 \0 371 350 e t t h e p o 0034140 r t ' s s o c k e t f i e l 0034160 d t o t h e a p p r o p r 0034200 i a t e w e l l - k n o w n \r 0034220 / / s o c k e t n u m b e r 0034240 b e f o r e u s i n g i t 0034260 , s i n c e i n g e n e r 0034300 a l t h e s e r v i c e s 0034320 o c k e t i s d i s t i n c 0034340 t \r / / f r o m t h e p o 0034360 l l i n g s o c k e t . N 0034400 o t e t h a t p r o c w i 0034420 l l b e c a l l e d r e p 0034440 e a t e d l y u n t i l e i 0034460 t h e r \r / / i t r e t u r 0034500 n s t r u e o r t h e l 0034520 i s t o f 376 001 \0 370 & p o t e 0034540 n t i a l i n s t a n c e s 0034560 i s e x h a u s t e d . \r \r / 0034600 / I f F i n d S e r v e r 0034620 i s s u c c e s s f u l , i 0034640 t r e t u r n s z e r o ; 0034660 i f u n s u c c e s s f u l , 0034700 i t r e t u r n s o n e 0034720 o f \r / / e c B a d R N a m e 0034740 ( t h e r e i s n o s u 0034760 c h s e r v i c e ) o r e 0035000 c A l l D o w n ( c a n ' t 0035020 c o n t a c t a n y i n s t 0035040 a n c e o f \r / / t h e s 0035060 e r v i c e ) . \r \r / / T h e 0035100 s e r v i c e t o b e l 0035120 o c a t e d m u s t 376 001 \0 312 0035140 204 r e s p o n d t o E c h o 0035160 M e r e q u e s t s o n a 0035200 w e l l - k n o w n \r / / s 0035220 o c k e t , t h e l o w 1 0035240 6 b i t s o f w h i c h 0035260 a r e g i v e n a s p o l 0035300 l i n g S o c k e t a n d t 0035320 h e \r / / h i g h 1 6 b i 0035340 t s o f w h i c h a r e 0035360 g u s > > G U S . s o c k e t H 0035400 i g h ( z e r o e x c e p t 0035420 w h e n t e s t i n g ) . 0035440 A n y \r / / s e r v i c e 0035460 ( G r a p e v i n e o r n o 0035500 n - G r a p e v i n e ) o b e 0035520 y i n g t h i s c o n v e n 0035540 t 376 001 \0 l 033 i o n m a y b e 0035560 l o c a t e d , \r / / r e g 0035600 a r d l e s s o f w h e t h 0035620 e r i t i s n a m e d b 0035640 y a n R N a m e o r a n 0035660 N L S n a m e . \r \r / / T 0035700 h e c a l l e r i s a s s 0035720 u m e d N O T t o h a v e 0035740 d o n e a G V C l a i m S 0035760 t r e a m ( ) , s i n c e F 0036000 i n d S e r v e r m a y \r / / 0036020 c a l l t h e G r a p e v 0036040 i n e p a c k a g e r e c u 0036060 r s i v e l y t o r e a d 0036100 g r o u p m e m b e r s h i p 0036120 s a n d s u c h . \r / / I 0036140 f p r o c 376 001 \0 = @ m a n i 0036160 p u l a t e s t h e s t r e 0036200 a m t h e n i t m u s t 0036220 c a l l G V C l a i m S t r e 0036240 a m i n t e r n a l l y . \r [ 0036260 \r l e t z o n e = g u s > 0036300 > G U S . z o n e \r l e t e c 0036320 = e c A l l D o w n \r \r / / 0036340 s e e w h a t k i n d o 0036360 f n a m e , a n d s e t 0036400 u p s o m e d e f a u l t s 0036420 \r i f S t r i n g C o m p a r 0036440 e ( s e r v i c e N a m e , " 0036460 G V . G V " ) e q 0 t h e 0036500 n \r / / p r e v e n t 0036520 i n f i n i t e r e c u r s i 0036540 o n i n t h e G 376 001 \0 204 242 0036560 r a p e v i n e n a m e s p 0036600 a c e . ( T h i s s h o u 0036620 l d \r / / n o t a c t 0036640 u a l l y h a p p e n , b u 0036660 t t h i s t e s t i s h 0036700 e r e a n y w a y f o r s 0036720 a f e t y . ) \r s e r v i 0036740 c e N a m e = " G r a p e v 0036760 i n e R S e r v e r " \r l e t 0037000 h a v e R N a m e = f a l s 0037020 e \r f o r i = 1 t o s 0037040 e r v i c e N a m e > > S t r i 0037060 n g . l e n g t h d o \r 0037100 i f s e r v i c e N a m e > > 0037120 S t r i n g . c h a r ^ i e q 0037140 $ . t h e n [ h a v e R 0037160 376 001 \0 227 004 N a m e = t r u e 0037200 ; b r e a k ] \r \f \r / / F 0037220 i n d S e r v e r ( c o n t ' 0037240 d ) \r \r / / o b t a i n t a 0037260 b l e o f c o n n e c t p 0037300 o r t s f o r s e r v i c e 0037320 \r l e t a T a b l e = 0 \r 0037340 t e s t h a v e R N a m e \r 0037360 i f n o t \r [ 0037400 / / O b t a i n l i s t o 0037420 f a d d r e s s e s b y l 0037440 o o k i n g u p s e r v i c 0037460 e N a m e a s a n N L S - 0037500 n a m e , \r / / a 0037520 n d a l s o b y b r o a d 0037540 c a s t i n g . \r m 0037560 a n i f e 376 001 \0 361 377 s t m a x 0037600 A d d r s = 1 0 / / w 0037620 e ' l l t a k e t h e 1 0 0037640 c l o s e s t \r m 0037660 a n i f e s t l e n A T a b l 0037700 e = l e n A T a b l e H e a 0037720 d e r + m a x A d d r s * l 0037740 e n A R e c \r a T a 0037760 b l e = A l l o c a t e ( z 0040000 o n e , l e n A T a b l e ) ; 0040020 Z e r o ( a T a b l e , l e 0040040 n A T a b l e ) \r a 0040060 T a b l e > > A T a b l e . m a 0040100 x C o u n t = m a x A d d r 0040120 s \r / / F i r s t 0040140 r e q u e s t w i l l b e 0040160 a l o c a l b 376 001 \0 . 003 r 0040200 o a d c a s t . \r / 0040220 / R e m a i n i n g r e q u 0040240 e s t s w i l l b e t o 0040260 p o r t s r e g i s t e r e d 0040300 i n N L S . \r / 0040320 / N o t e t h a t E n u m 0040340 e r a t e P u p A d d r e s s e 0040360 s g i v e s t h e m c l o 0040400 s e s t f i r s t . \r 0040420 a T a b l e > > A T a b l e 0040440 . p r e S o r t e d = t r u 0040460 e \r A c c u m u l a 0040500 t e G V P o r t ( t a b l e [ 0040520 0 ; 0 ; 0 ] , a T a b 0040540 l e ) \r E n u m e r 0040560 a t e P u p A d d r e s s e s 376 0040600 001 \0 020 a ( s e r v i c e N a m e 0040620 , A c c u m u l a t e G V P o 0040640 r t , a T a b l e ) \r 0040660 ] \r i f s o \r 0040700 [ / / o b t a i n t h 0040720 e l i s t b y e n u m e r 0040740 a t i n g s e r v i c e N a m 0040760 e a s a G r a p e v i n e 0041000 g r o u p \r / / 0041020 a n d t h e n o b t a i n i 0041040 n g t h e c o n n e c t s 0041060 i t e f o r e a c h m e m 0041100 b e r . \r l e t r 0041120 L i s t = R e a d R L i s t 0041140 ( s e r v i c e N a m e , o p 0041160 R e a d M e m b e r s , l v 0041200 e c ) \r 376 001 \0 246 224 i 0041220 f r L i s t n e 0 t h e 0041240 n \r [ \r 0041260 l e t c o u n t 0041300 = Q u e u e L e n g t h ( l v 0041320 r L i s t > > R L i s t . q u 0041340 e u e ) \r l e 0041360 t l e n A T a b l e = l e 0041400 n A T a b l e H e a d e r + 0041420 c o u n t * l e n A R e c \r 0041440 a T a b l e = 0041460 A l l o c a t e ( z o n e , l 0041500 e n A T a b l e ) ; Z e r o ( 0041520 a T a b l e , l e n A T a b l 0041540 e ) \r a T a b 0041560 l e > > A T a b l e . m a x C o 0041600 u n t = c o u 376 001 \0 226 @ n t 0041620 \r l e t r I 0041640 t e m = r L i s t > > R L i 0041660 s t . q u e u e . h e a d \r 0041700 w h i l e r I t 0041720 e m n e 0 d o \r 0041740 [ / / g e t 0041760 c o n n e c t s i t e s t r 0042000 i n g f o r m e m b e r a 0042020 n d c o n v e r t t o a d 0042040 d r e s s \r \t l e t c 0042060 o n n e c t = R e a d R S t 0042100 r i n g ( l v r I t e m > > R 0042120 I t e m . r N a m e , o p R e 0042140 a d C o n n e c t ) \r \t 0042160 i f c o n n e c t n e 0 0042200 t h e n \r \t [ 376 001 0042220 \0 5 321 \r 0042240 / / s u p p r e s s u 0042260 s u a l r e a c h a b i l i t 0042300 y c h e c k , s i n c e w 0042320 e w i l l d o o u r o w 0042340 n \r 0042360 / / c o m p u t a t i o n 0042400 b a s e d o n h o p c o u 0042420 n t s l a t e r o n . \r \t 0042440 l e t p o r t = 0042460 v e c l e n P o r t \r \t 0042500 i f E n u m e r a t 0042520 e P u p A d d r e s s e s ( c o 0042540 n n e c t , 0 , p o r t , 0042560 t r u e ) e q 0 t h e n \r 0042600 \t A c c u m 0042620 u l a 376 001 \0 365 ( t e G V P o r t 0042640 ( p o r t , a T a b l e , n 0042660 i l ) \r \t F r e e 0042700 ( z o n e , c o n n e c t ) \r 0042720 \t ] \r \t r 0042740 I t e m = r I t e m > > R I 0042760 t e m . n e x t \r \t ] \r 0043000 D e s t r o y 0043020 R L i s t ( r L i s t ) \r 0043040 ] \r ] \r 0043060 \r i f a T a b l e e q 0 0043100 r e s u l t i s e c / / 0043120 e c B a d R N a m e o r e c 0043140 A l l D o w n \r \f \r / / F i n 0043160 d S e r v e r ( c o n t ' d ) 0043200 \r \r / / N o w t h i n g s 0043220 s t a r t t o 376 001 \0 & i g e 0043240 t t r i c k y . . . \r / / S 0043260 e n d E c h o p a c k e t s 0043300 t o e a c h s o c k e t 0043320 i n a T a b l e , i n o r 0043340 d e r o f h o p c o u n t 0043360 s o a s \r / / t o b i a 0043400 s t h e c h o i c e t o 0043420 n e a r b y s e r v e r s . 0043440 A s r e p l i e s c o m e 0043460 b a c k f r o m e a c h \r 0043500 / / s e r v e r , a t t e m 0043520 p t t o e s t a b l i s h 0043540 a b y t e s t r e a m t o 0043560 t h a t s e r v e r ; a n 0043600 d t e r m i n a t e \r / / t 0043620 h e p o l l i n g p r 376 001 \0 0043640 : 266 o c e s s a s s o o n 0043660 a s t h i s i s s u c c e 0043700 s s f u l . \r / / T h i s i 0043720 s d o n e b y t h r e e 0043740 p r o c e s s e s i n o r d 0043760 e r t o p r e v e n t d e 0044000 a d l o c k s d u e t o \r / 0044020 / h o g g i n g P B I s . 0044040 T h e P r o d d e r s e n 0044060 d s o u t E c h o M e P u 0044100 p s t o t h e a d d r e s 0044120 s e s i n \r / / t h e t a 0044140 b l e . T h e S l u r p e 0044160 r r e c e i v e s t h e I 0044200 A m E c h o r e s p o n s e s 0044220 , a n d m a r k s t h e \r 0044240 / / 376 001 \0 252 \a t a b l e . 0044260 M e a n w h i l e , t h e o 0044300 r i g i n a l p r o c e s s 0044320 r e a d s t h e t a b l e 0044340 a n d a t t e m p t s t o \r 0044360 / / e s t a b l i s h c o n 0044400 n e c t i o n s t o t h e 0044420 m a r k e d a d d r e s s e s 0044440 . \r \r l e t s o c = v e c 0044460 l e n P u p S o c \r O p e n L 0044500 e v e l 1 S o c k e t ( s o c , 0044520 0 , 0 , t r u e ) / / 0044540 t r a n s i e n t d e f a u 0044560 l t l o c a l s o c k e t \r 0044600 l e t n R o u t e s F o u n d 0044620 = 0 \r \r f o r t r y = 0044640 1 t o 4 376 001 \0 004 274 d o 0044660 / / t r y t h e w h o l e 0044700 p r o c e s s u p t o 4 0044720 t i m e s \r [ \r u 0044740 n l e s s n R o u t e s F o u 0044760 n d e q a T a b l e > > A T 0045000 a b l e . c o u n t % a T a 0045020 b l e > > A T a b l e . p r e S 0045040 o r t e d d o \r / 0045060 / t r y t o g e t a l l 0045100 t h e h o p c o u n t s . 0045120 N o t e : h o p c o u n 0045140 t s w e r e i n i t i a l i 0045160 z e d \r / / t o 0045200 z e r o i f p r e S o r t e 0045220 d , m a x H o p s + 1 o t h 0045240 e r w i s e . \r 376 001 \0 373 0045260 Z f o r r o u t e T r y 0045300 = 0 t o 1 0 d o \r 0045320 [ \r 0045340 l e t d o n t P r o b e = 0045360 ( r o u t e T r y & 1 ) 0045400 e q 0 \r f o 0045420 r i = 0 t o a T a b l 0045440 e > > A T a b l e . c o u n t - 0045460 1 d o \r 0045500 [ \r l 0045520 e t a R e c = l v a T a 0045540 b l e > > A T a b l e . r e c ^ 0045560 i \r i f 0045600 a R e c > > A R e c . h o p s 0045620 g r m a x H o p s t h e n 0045640 \r 0045660 [ 376 001 \0 021 b \r 0045700 l e t r t e = 0045720 L o c a t e N e t ( a R e c > > 0045740 A R e c . r e q u e s t P o r t 0045760 . n e t , d o n t P r o b e ) 0046000 \r 0046020 i f r t e n e 0 t h e n 0046040 \r \t [ \r \t 0046060 a R e c > > A 0046100 R e c . h o p s = r t e > > 0046120 R T E . h o p s \r \t 0046140 i f a R e c > > A R e 0046160 c . h o p s l e m a x H o p 0046200 s t h e n n R o u t e s F o 0046220 u n d = n R o u t e s F o u 0046240 n d + 1 \r \t 0046260 ] \r \t 376 001 \0 255 ; ] 0046300 \r ] \r 0046320 i f n R o u t 0046340 e s F o u n d e q a T a b l 0046360 e > > A T a b l e . c o u n t 0046400 % \r \t n R o u t e s F o u n 0046420 d g r 0 & r o u t e T r 0046440 y g e 2 t h e n b r e a 0046460 k \r u n l e s 0046500 s d o n t P r o b e d o D 0046520 i s m i s s ( 1 0 0 ) \r 0046540 ] \r \r a T a b l 0046560 e > > A T a b l e . n R e p l i 0046600 e s = 0 / / n o r e 0046620 p l i e s y e t \r l e t 0046640 n e x t R e p l y T o E x a m 0046660 i n e = 0 \r \r 376 001 \0 \n } 0046700 / / c r e a t e P r o d d 0046720 e r & S l u r p e r p r o 0046740 c e s s e s \r l e t c t 0046760 x T a b l e = v e c 1 \r 0047000 f o r i = 0 t o 1 0047020 d o \r [ \r 0047040 l e t c t x = I n i t 0047060 i a l i z e C o n t e x t ( A l 0047100 l o c a t e ( z o n e , 1 5 0 0047120 ) , 1 5 0 , \r ( 0047140 i e q 0 ? P r o d d e r , 0047160 S l u r p e r ) , 3 ) \r 0047200 c t x ! 3 = a T a b 0047220 l e ; c t x ! 4 = s o c 0047240 / / a r g s n e e d e d 0047260 b y P r o d d e r & S l u 0047300 376 001 \0 362 210 r p e r \r 0047320 c t x ! 5 = p o l l i n g S 0047340 o c k e t / / a r g n e 0047360 e d e d b y P r o d d e r 0047400 o n l y \r E n q u e 0047420 u e ( p u p C t x Q , c t x ) 0047440 \r c t x T a b l e ! 0047460 i = c t x \r ] \r 0047500 \f \r / / F i n d S e r v e r 0047520 ( c o n t ' d ) \r \r / / 0047540 c o l l e c t r e s p o n s e 0047560 s p r o d u c e d b y P r 0047600 o d d e r & S l u r p e r \r 0047620 [ / / r e p e a 0047640 t \r / / w a i t 0047660 f o r r e p l y t o b e 0047700 r e t u r 376 001 \0 307 T n e d b y 0047720 S l u r p e r \r l 0047740 e t t i m e r = n i l ; 0047760 S e t T i m e r ( l v t i m e 0050000 r , 1 5 0 ) / / 1 . 5 0050020 s e c o n d s \r D i 0050040 s m i s s ( 1 ) r e p e a t u 0050060 n t i l a T a b l e > > A T a 0050100 b l e . n R e p l i e s g r 0050120 n e x t R e p l y T o E x a m i 0050140 n e % \r T i m e 0050160 r H a s E x p i r e d ( l v t 0050200 i m e r ) \r i f a 0050220 T a b l e > > A T a b l e . n R 0050240 e p l i e s e q n e x t R e 0050260 p l y T o E x a m i n e t h e 0050300 n b r e a k / 376 001 \0 034 273 / 0050320 t i m e d o u t \r \r 0050340 / / h a v e a c a n d 0050360 i d a t e s e r v e r ; t r 0050400 y t o a c c e s s i t . \r 0050420 l e t p o r t = 0050440 l v a T a b l e > > A T a b 0050460 l e . r e c ^ n e x t R e p l y 0050500 T o E x a m i n e . r e p l y P 0050520 o r t \r n e x t R e 0050540 p l y T o E x a m i n e = n 0050560 e x t R e p l y T o E x a m i n 0050600 e + 1 \r i f p r o 0050620 c ( p o r t , a r g ) t h e 0050640 n [ e c = 0 ; b r e a 0050660 k ] / / s u c c e s s f 0050700 u l l y a c c e s s e d s 376 0050720 001 \0 351 ! e r v i c e \r 0050740 ] r e p e a t \r \r / / 0050760 d e s t r o y P r o d d e r 0051000 & S l u r p e r p r o c e 0051020 s s e s \r f o r i = 0051040 0 t o 1 d o \r 0051060 [ U n q u e u e ( p u p C t x 0051100 Q , c t x T a b l e ! i ) ; 0051120 F r e e ( z o n e , c t x T a 0051140 b l e ! i ) ] \r \r i f 0051160 e c e q 0 t h e n b r e 0051200 a k / / s u c c e s s f u 0051220 l l y o p e n e d s t r e a 0051240 m \r ] \r \r C l o s e L e v 0051260 e l 1 S o c k e t ( s o c ) \r F 0051300 r e e ( z o n e , a T a b l e 0051320 ) \r \r r 376 001 \0 6 242 e s u l t i s 0051340 e c / / z e r o ( s u 0051360 c c e s s f u l ) o r e c A 0051400 l l D o w n \r ] \r \r / / - - - - 0051420 - - - - - - - - - - - - - - - - * 0051520 - - - - - - - - \r a n d A c c 0051540 u m u l a t e G V P o r t ( p o 0051560 r t , a T a b l e , n i l ; 0051600 n u m a r g s n a ) = v 0051620 a l o f \r / / - - - - - - - - - 0051640 - - - - - - - - - - - - - - - - * 0051720 - - - - - - - - - 376 001 \0 i Q - - 0051740 - - - - - - - - \r / / 2 - a r 0051760 g u m e n t c a l l i s f 0052000 r o m N L S e x p a n s i o 0052020 n : d o n ' t a c c u m u l 0052040 a t e s p e c i f i c a d d 0052060 r e s s e s o n \r / / t h e 0052100 d i r e c t l y - c o n n e c 0052120 t e d n e t w o r k , s i n 0052140 c e t h e y w i l l b e 0052160 r e a c h e d b y t h e i 0052200 n i t i a l b r o a d c a s t 0052220 . \r / / 3 - a r g u m e n t 0052240 c a l l i s f r o m R - N 0052260 a m e e x p a n s i o n : s 0052300 e t h o p s f i e l d t o 0052320 m a x H o p s + 1 . \r [ \r 376 001 0052340 \0 323 g l e t c o u n t = a 0052360 T a b l e > > A T a b l e . c o 0052400 u n t \r i f c o u n t e q 0052420 a T a b l e > > A T a b l e . m 0052440 a x C o u n t r e s u l t i s 0052460 t r u e \r l e t a R e c = 0052500 l v a T a b l e > > A T a b 0052520 l e . r e c ^ c o u n t \r t e s 0052540 t n a e q 2 \r i f s 0052560 o i f p o r t > > P o r t . 0052600 n e t e q ( n d b Q ! 0 ) > 0052620 > N D B . l o c a l N e t & \r 0052640 p o r t > > P o r 0052660 t . h o s t n e 0 t h e n 0052700 r e s u l t i s f a l s e \r 0052720 i f n o t a R e c > > A 0052740 R e c 376 001 \0 252 022 . h o p s = 0052760 m a x H o p s + 1 \r M o v e B l 0053000 o c k ( l v a R e c > > A R e 0053020 c . r e q u e s t P o r t , p 0053040 o r t , l e n P o r t ) \r a T 0053060 a b l e > > A T a b l e . c o u 0053100 n t = c o u n t + 1 \r r e s 0053120 u l t i s f a l s e \r ] \r \f \r 0053140 / / P r o d d e r a n d S 0053160 l u r p e r n e e d n o t 0053200 b e O E P s , b e c a u s e 0053220 t h e p r o c e s s e s t 0053240 h a t e x e c u t e \r / / t 0053260 h e m e x i s t o n l y d 0053300 u r i n g t h e l i f e t i 0053320 m e o f F i n d S e r v e r 0053340 , w h i c h 376 001 \0 211 K i s 0053360 i n t h e \r / / s a m e m 0053400 o d u l e a s t h e s e . \r 0053420 \r / / - - - - - - - - - - - - - 0053440 - - - - - - - - - - - - - - - - * 0053520 - - - - - - - - - - - - - - - \r 0053540 a n d P r o d d e r ( c t x ) 0053560 b e \r / / - - - - - - - - - - 0053600 - - - - - - - - - - - - - - - - * 0053700 - - \r [ \r l e t a T a b l e 0053720 = c t x ! 3 \r l e t s o c 0053740 = c t x ! 4 \r l e t p 376 001 \0 0053760 035 331 o l l i n g S o c k e t = 0054000 c t x ! 5 \r \r m a n i f e s t 0054020 l a s t H o p s = 3 / 0054040 / t r e a t > 3 h o p s 0054060 a s e q u i v a l e n t t o 0054100 3 \r f o r h o p s = 0 0054120 t o l a s t H o p s d o \r 0054140 f o r i = 0 t o a 0054160 T a b l e > > A T a b l e . c o 0054200 u n t - 1 d o \r [ 0054220 \r l e t a R e c 0054240 = l v a T a b l e > > A T a 0054260 b l e . r e c ^ i \r 0054300 i f a R e c > > A R e c . h o 0054320 p s e q h o p s % \r 0054340 ( h o p s e q l a s 0054360 t H 376 001 \0 250 q o p s & a R e 0054400 c > > A R e c . h o p s g r 0054420 h o p s \r & a 0054440 R e c > > A R e c . h o p s l 0054460 e m a x H o p s ) t h e n \r 0054500 [ \r \t l e t 0054520 p b i = G e t P B I ( s o 0054540 c ) \r \t S e t P u p D P o r t 0054560 ( p b i , l v a R e c > > A 0054600 R e c . r e q u e s t P o r t ) 0054620 \r \t p b i > > P B I . p u p . 0054640 d P o r t . s o c k e t ^ 1 = 0054660 g u s > > G U S . s o c k e t 0054700 H i g h \r \t p b i > > P B I . 0054720 p u p . d P o r t . s o c k e t 0054740 ^ 2 = p o l l i n g S o c k 0054760 e t \r \t C o 376 001 \0 347 L m p l e 0055000 t e P u p ( p b i , p t E c h 0055020 o M e , p u p O v B y t e s ) 0055040 \r \t / / s p a c e r e q u 0055060 e s t s 1 0 0 m s a p a r 0055100 t s o a s t o f a v o r 0055120 e a r l i e r \r \t / / r e 0055140 q u e s t s a n d a v o i d 0055160 h o g g i n g P B I s . \r \t 0055200 D i s m i s s ( 1 0 ) \r \t ] 0055220 \r ] \r \r B l o c k ( 0055240 ) r e p e a t \r ] \r \r / / - - 0055260 - - - - - - - - - - - - - - - - * 0055360 - - - - - - - - - - \r a 376 001 \0 027 0055400 223 n d S l u r p e r ( c t x ) 0055420 b e \r / / - - - - - - - - - - 0055440 - - - - - - - - - - - - - - - - * 0055540 - - \r [ \r l e t a T a b l e 0055560 = c t x ! 3 \r l e t s o c 0055600 = c t x ! 4 \r \r [ / / 0055620 r e p e a t \r B l o c k 0055640 ( ) r e p e a t u n t i l s 0055660 o c > > P u p S o c . i Q . h e 0055700 a d n e 0 \r l e t p 0055720 b i = D e q u e u e ( l v 0055740 s o c > > P u p S o c . i Q ) \r 0055760 i f p b i > > P B I . p 0056000 u 376 001 \0 h 257 p . t y p e e q 0056020 p t I m A n E c h o t h e n \r 0056040 [ \r l e 0056060 t i = a T a b l e > > A T 0056100 a b l e . n R e p l i e s \r 0056120 i f i u l s a T a 0056140 b l e > > A T a b l e . c o u n 0056160 t t h e n \r 0056200 [ \r \t l e t a R e c = l 0056220 v a T a b l e > > A T a b l e 0056240 . r e c ^ i \r \t M o v e B l o 0056260 c k ( l v a R e c > > A R e c 0056300 . r e p l y P o r t , l v p 0056320 b i > > P B I . p u p . s P o r 0056340 t , l e n P o r t ) \r 0056360 a T a b l e > > A T a 0056400 b l e . n R 376 \0 : 344 V e p l i e 0056420 s = i + 1 \r \t ] \r 0056440 ] \r R e l e a s e P B 0056460 I ( p b i ) \r ] r e p e 0056500 a t \r ] \r 377 \0 \0 G r a p e v i n 0056520 e N a m e I n f o . b c p l \0 373 0056540 230 ` 306 s \0 \0 376 001 \0 257 367 / / G r 0056560 a p e v i n e N a m e I n f o . 0056600 b c p l \r / / C o p y r i g h 0056620 t X e r o x C o r p o r a t 0056640 i o n 1 9 8 1 \r / / L a s t 0056660 m o d i f i e d J a n u a r 0056700 y 4 , 1 9 8 2 1 2 : 5 2 0056720 P M b y T a f t \r \r g e t 0056740 " G r a p e v i n e . d e c l 0056760 " \r g e t " G r a p e v i n e 0057000 P r o t o c o l . d e c l " \r g 0057020 e t " G r a p e v i n e I n t 0057040 e r n a l . d e c l " \r \r e x t 0057060 e r n a l \r [ \r / / o u t g o 0057100 i n g p r o c e d u r e s \r I 0057120 s M e m b e r C l o s u r e ; 0057140 I s I n A C L ; R e 376 001 \0 207 : 0057160 a d R L i s t ; R e a d R S t 0057200 r i n g ; A u t h e n t i c a 0057220 t e \r \r / / i n c o m i n g 0057240 p r o c e d u r e s \r S e n d W 0057260 o r d ; S e n d R N a m e ; 0057300 R e c e i v e W o r d ; R e c 0057320 e i v e R N a m e ; R e c e i 0057340 v e R L i s t \r E n q u i r e ; 0057360 E n q u i r e W i t h S t a m 0057400 p \r B S P W r i t e B l o c k ; 0057420 B S P F o r c e O u t p u t \r 0057440 G e t s ; P u t s ; D e f a 0057460 u l t A r g s ; F r e e \r \r / 0057500 / i n c o m i n g s t a t i 0057520 c s \r o f f s e t B S P S t r \r 0057540 ] \r \r / / - - - - - - - - - - - 0057560 376 001 \0 273 \b - - - - - - - - - - - 0057600 - - - - - - - - - - - - - - - - * 0057660 - - - - - - \r l e t I s M e m 0057700 b e r C l o s u r e ( g r o u p 0057720 , m e m b e r ) = \r / / - - 0057740 - - - - - - - - - - - - - - - - * 0060040 - - - - - - - - - - \r / / D e 0060060 t e r m i n e s w h e t h e r 0060100 m e m b e r a p p e a r s 0060120 a n y w h e r e i n t h e 0060140 t r e e t h a t r e s u l t 0060160 s f r o 376 001 \0 l } m \r / / e 0060200 x p a n d i n g g r o u p ; 0060220 s e e I s I n A C L f o r 0060240 d e t a i l s . \r I s I n 0060260 A C L ( g r o u p , m e m b e 0060300 r , d I t s e l f + d M e m b 0060320 e r + d C l o s u r e ) \r \r / / 0060340 - - - - - - - - - - - - - - - - * 0060440 - - - - - - - - - - - - \r a n d 0060460 I s I n A C L ( n a m e , m 0060500 e m b e r , d e s c r i p t o 0060520 r ) = v a l o f \r / / - - - 0060540 - - - - - - - - - - - - - - - - 0060560 - - - - - - - - - - 376 001 \0 o 324 - 0060600 - - - - - - - - - - - - - - - - * 0060640 - - - - - - - - - - - - - - \r / 0060660 / D e t e r m i n e s m e m 0060700 b e r s h i p i n a n A C 0060720 L , a s s p e c i f i e d 0060740 b y d e s c r i p t o r , w 0060760 h i c h i s a n y \r / / c 0061000 o m b i n a t i o n o f : { 0061020 d I t s e l f | d I t s R e g i 0061040 s t r y } + { d M e m b e r 0061060 | d O w n e r | d F r i e n d } 0061100 + \r / / { d D i r e c t 0061120 | d C l o s u r e | d U p A r r 0061140 o w } \r / / n a m e i d e n 0061160 t i f i e s t h e A C L ; 376 0061200 001 \0 215 030 m e m b e r i s t 0061220 h e n a m e b e i n g t e 0061240 s t e d f o r m e m b e r s 0061260 h i p ; \r / / b o t h a r e 0061300 R N a m e s . R e t u r n 0061320 s o n e o f t h e f o l 0061340 l o w i n g : \r / / e c I s M 0061360 e m b e r \t \t m e m b e r i s 0061400 i n t h e A C L \r / / e 0061420 c I s N o t M e m b e r \t m e m 0061440 b e r i s n o t i n t h 0061460 e A C L \r / / e c B a d R N 0061500 a m e \t \t n a m e d o e s n 0061520 o t e x i s t o r i s o 0061540 f w r o n g t y p e f o r 0061560 o p \r / / e c A l l D o w n 0061600 \t \t c a 376 001 \0 253 341 n ' t c o n 0061620 t a c t a n y R - S e r v e 0061640 r f o r n a m e ' s r e g 0061660 i s t r y \r [ \r l e t r e s 0061700 = n i l / / m e m b e r 0061720 , d e s c r i p t o r , a n 0061740 d r e s m u s t b e c o 0061760 n s e c u t i v e i n f r a 0062000 m e \r l e t r e t u r n C o d 0062020 e = E n q u i r e ( n a m e 0062040 , I s I n A C L W o r k , l 0062060 v m e m b e r ) \r r e s u l t 0062100 i s s e l e c t o n r e t u 0062120 r n C o d e < < R e t u r n C o 0062140 d e . c o d e i n t o \r 0062160 [ \r c a s e r c D o n e 0062200 : r e s e q 376 001 \0 W 006 0 ? 0062220 e c I s N o t M e m b e r , 0062240 e c I s M e m b e r \r c a 0062260 s e r c B a d R N a m e : e 0062300 c B a d R N a m e \r d e f 0062320 a u l t : e c A l l D o w n \r 0062340 ] \r ] \r \r / / - - - - - - 0062360 - - - - - - - - - - - - - - - - * 0062460 - - - - - - \r a n d I s I n A 0062500 C L W o r k ( s t r e a m , g 0062520 r o u p , l v M e m b e r ) 0062540 = v a l o f \r / / - - - - - - 0062560 - - - - - - - - - - - - - - - - 0062600 - - - - - - - - - - - - - - 376 001 0062620 \0 ^ 236 - - - - - - - - - - - - - 0062640 - - - - - - - - - - - - - - - - 0062660 - - - - - - - - - - - \r / / L 0062700 o c a l p r o c e d u r e u 0062720 s e d b y I s I n A C L . \r 0062740 [ \r S e n d W o r d ( s t r e a 0062760 m , o p I s I n L i s t ) 0063000 / / o p \r S e n d R N a m e ( 0063020 s t r e a m , g r o u p ) 0063040 / / g r o u p \r S e n d R N a 0063060 m e ( s t r e a m , l v M e m 0063100 b e r ! 0 ) / / m e m b e 0063120 r \r l e t d e s c r i p t o r 0063140 = l v M e m b e r ! 1 \r P u 0063160 t s ( s t r e a m , d e s c r 0063200 i p t o r < < L i s t D e s c . 0063220 w h o 376 001 \0 a 323 ) \r P u t s ( s 0063240 t r e a m , d e s c r i p t o 0063260 r < < L i s t D e s c . l i s t 0063300 ) \r P u t s ( s t r e a m , d 0063320 e s c r i p t o r < < L i s t D 0063340 e s c . c o v e r a g e ) \r B S 0063360 P F o r c e O u t p u t ( s t r 0063400 e a m - o f f s e t B S P S t r 0063420 , t r u e ) \r l e t r e t u 0063440 r n C o d e = R e c e i v e 0063460 W o r d ( s t r e a m ) \r i f 0063500 r e t u r n C o d e < < R e t u 0063520 r n C o d e . c o d e e q r 0063540 c D o n e t h e n \r l v 0063560 M e m b e r ! 2 = G e t s ( 0063600 s t r e a m , d a t a T i m e 0063620 o u t ) \r r e s 376 001 \0 O 373 u l t 0063640 i s r e t u r n C o d e \r ] \r 0063660 \f \r / / - - - - - - - - - - - - 0063700 - - - - - - - - - - - - - - - - * 0064000 \r a n d R e a d R L i s t ( n 0064020 a m e , o p , l v E C ; n 0064040 u m a r g s n a ) = v a l 0064060 o f \r / / - - - - - - - - - - - 0064100 - - - - - - - - - - - - - - - - * 0064200 - \r / / R e a d s a l i s 0064220 t a s s o c i a t e d 376 001 \0 0064240 254 027 w i t h n a m e ( a n 0064260 R N a m e ) a s s p e c i f 0064300 i e d b y o p , w h i c h 0064320 \r / / m a y b e o n e o 0064340 f o p R e a d { M e m b e r s 0064360 | O w n e r s | F r i e n d s } 0064400 . I f s u c c e s s f u l 0064420 , r e t u r n s \r / / a n 0064440 R L i s t , w h i c h t h e 0064460 c a l l e r m u s t d e s 0064500 t r o y ( b y c a l l i n g 0064520 D e s t r o y R L i s t ) w 0064540 h e n \r / / d o n e w i t h 0064560 i t . I f u n s u c c e 0064600 s s f u l , s t o r e s a n 0064620 e r r o r c o d e i n @ 0064640 l v 376 001 \0 210 L E C ( i f \r / / 0064660 s u p p l i e d ) a n d r 0064700 e t u r n s z e r o . T h 0064720 e e r r o r c o d e s a r 0064740 e : \r / / e c B a d R N a m e 0064760 \t \t n a m e d o e s n o t 0065000 e x i s t o r i s o f w 0065020 r o n g t y p e f o r o p 0065040 \r / / e c A l l D o w n \t \t c 0065060 a n ' t c o n t a c t a n y 0065100 R - S e r v e r f o r n a 0065120 m e ' s r e g i s t r y \r [ \r 0065140 D e f a u l t A r g s ( l v n 0065160 a , - 2 , l v n a ) \r l e 0065200 t r L i s t = 0 / / 0065220 a t o p + 3 i n f r a m e 0065240 \r l e t r e 376 001 \0 x 266 t u r n 0065260 C o d e = E n q u i r e ( n 0065300 a m e , R e a d R L i s t W o 0065320 r k , l v o p ) \r i f r L 0065340 i s t e q 0 t h e n \r 0065360 @ l v E C = r e t u r n C 0065400 o d e < < R e t u r n C o d e . 0065420 c o d e e q r c B a d R N a 0065440 m e ? e c B a d R N a m e , 0065460 e c A l l D o w n \r r e s u l t 0065500 i s r L i s t \r ] \r \r / / - - 0065520 - - - - - - - - - - - - - - - - * 0065620 - - - - - - - - - - \r a n d R 0065640 e a d R L i s t W o r k 376 001 \0 032 0065660 236 ( s t r e a m , n a m e , 0065700 l v O p ) = v a l o f \r / / 0065720 - - - - - - - - - - - - - - - - * 0066020 - - - - - - - - - - - - \r / / 0066040 L o c a l p r o c e d u r e 0066060 u s e d b y R e a d R L i s 0066100 t . \r [ \r l e t r e t u r n C 0066120 o d e = E n q u i r e W i t 0066140 h S t a m p ( s t r e a m , l 0066160 v O p ! 0 , n a m e ) \r i f 0066200 r e t u r n C o d e < < R e t u 0066220 r n C o d e . c o d e e q r 0066240 c D o n e t h e n l v O p ! 0066260 3 376 001 \0 316 w = R e c e i v e 0066300 R L i s t ( s t r e a m ) \r r e 0066320 s u l t i s r e t u r n C o d 0066340 e \r ] \r \r / / - - - - - - - - - 0066360 - - - - - - - - - - - - - - - - * 0066460 - - - \r a n d R e a d R S t r 0066500 i n g ( n a m e , o p , l v 0066520 E C ; n u m a r g s n a ) 0066540 = v a l o f \r / / - - - - - - 0066560 - - - - - - - - - - - - - - - - * 0066660 - - - - - - 376 001 \0 036 355 \r / / R 0066700 e a d s a s t r i n g a s 0066720 s o c i a t e d w i t h n a 0066740 m e ( a n R N a m e ) a s 0066760 s p e c i f i e d b y o p 0067000 , w h i c h \r / / m a y b 0067020 e o p R e a d C o n n e c t 0067040 o r o p R e a d R e m a r k . 0067060 I f s u c c e s s f u l , 0067100 r e t u r n s \r / / a s t 0067120 r i n g , w h i c h t h e 0067140 c a l l e r m u s t f r e e 0067160 t o g u s > > G U S . z o n 0067200 e w h e n \r / / d o n e w 0067220 i t h i t . I f u n s u 0067240 c c e s s f u l , s t o r e s 0067260 a n e r r o r c 376 001 \0 v j 0067300 o d e i n @ l v E C ( i f 0067320 \r / / s u p p l i e d ) a n 0067340 d r e t u r n s z e r o . 0067360 T h e e r r o r c o d e s 0067400 a r e : \r / / e c B a d R N 0067420 a m e \t \t n a m e d o e s n 0067440 o t e x i s t o r i s o 0067460 f w r o n g t y p e f o r 0067500 o p \r / / e c A l l D o w n 0067520 \t \t c a n ' t c o n t a c t 0067540 a n y R - S e r v e r f o r 0067560 n a m e ' s r e g i s t r y 0067600 \r [ \r D e f a u l t A r g s ( l 0067620 v n a , - 2 , l v n a ) 0067640 \r l e t s t r i n g = 0 0067660 / / a t o p + 3 i n f 0067700 376 001 \0 311 256 r a m e \r l e t r e 0067720 t u r n C o d e = E n q u i 0067740 r e ( n a m e , R e a d R S t 0067760 r i n g W o r k , l v o p ) 0070000 \r i f s t r i n g e q 0 0070020 t h e n \r @ l v E C = 0070040 r e t u r n C o d e < < R e t u 0070060 r n C o d e . c o d e e q r 0070100 c B a d R N a m e ? e c B a d 0070120 R N a m e , e c A l l D o w n 0070140 \r r e s u l t i s s t r i n g 0070160 \r ] \r \r / / - - - - - - - - - - 0070200 - - - - - - - - - - - - - - - - * 0070300 - - \r a n 376 001 \0 I W d R e a d 0070320 R S t r i n g W o r k ( s t r e 0070340 a m , n a m e , l v O p ) 0070360 = v a l o f \r / / - - - - - - 0070400 - - - - - - - - - - - - - - - - * 0070500 - - - - - - \r / / L o c a l 0070520 p r o c e d u r e u s e d b 0070540 y R e a d R S t r i n g . \r [ 0070560 \r l e t r e t u r n C o d e 0070600 = E n q u i r e W i t h S t a 0070620 m p ( s t r e a m , l v O p ! 0070640 0 , n a m e ) \r i f r e t u 0070660 r n C o d e < < R e t u r n C o 0070700 d e . c o d e e q 376 001 \0 [ 314 0070720 r c D o n e t h e n l v O p 0070740 ! 3 = R e c e i v e R N a m 0070760 e ( s t r e a m , 0 ) \r r e s 0071000 u l t i s r e t u r n C o d e 0071020 \r ] \r \f \r / / - - - - - - - - - 0071040 - - - - - - - - - - - - - - - - * 0071140 - - - \r a n d A u t h e n t i 0071160 c a t e ( n a m e , p a s s w 0071200 o r d ) = v a l o f \r / / - 0071220 - - - - - - - - - - - - - - - - * 0071300 - - - - - - - - - - - - - - - 376 0071320 001 \0 001 240 - - - - - - - - - - - - 0071340 \r / / C h e c k s n a m e 0071360 ( a n R N a m e ) a n d p 0071400 a s s w o r d ( a 6 4 - b i 0071420 t k e y , d e r i v e d f 0071440 r o m a p a s s w o r d \r / 0071460 / s t r i n g b y c a l l 0071500 i n g M a k e K e y ) . R 0071520 e t u r n s o n e o f t h 0071540 e f o l l o w i n g : \r / / 0071560 e c I n d i v i d u a l \t \t s u 0071600 c c e s s f u l l y a u t h e 0071620 n t i c a t e d i n d i v i d 0071640 u a l \r / / e c B a d P a s s 0071660 w o r d \t i n c o r r e c t p 0071700 a s s w o r d \r / / e c B a d 0071720 R N a m 376 001 \0 021 020 e \t \t n a m e 0071740 d o e s n o t e x i s t 0071760 o r i s n o t a n i n d 0072000 i v i d u a l \r / / e c A l l 0072020 D o w n \t \t c a n ' t c o n t 0072040 a c t a n y R - S e r v e r 0072060 f o r n a m e ' s r e g i 0072100 s t r y \r [ \r l e t r e t u r 0072120 n C o d e = E n q u i r e ( 0072140 n a m e , A u t h e n t i c a 0072160 t e W o r k , p a s s w o r d 0072200 ) \r r e s u l t i s s e l e c 0072220 t o n r e t u r n C o d e < < 0072240 R e t u r n C o d e . c o d e 0072260 i n t o \r [ \r c a s 0072300 e r c D o n e : e c I n d i 0072320 v i d u a l \r 376 001 \0 177 ) c 0072340 a s e r c B a d P a s s w o r 0072360 d : e c B a d P a s s w o r d 0072400 \r c a s e r c B a d R N 0072420 a m e : e c B a d R N a m e \r 0072440 d e f a u l t : e c A l 0072460 l D o w n \r ] \r ] \r \r / / 0072500 - - - - - - - - - - - - - - - - * 0072600 - - - - - - - - - - - - \r a n d 0072620 A u t h e n t i c a t e W o r 0072640 k ( s t r e a m , n a m e , 0072660 p a s s w o r d ) = v a l o 0072700 f \r / / - - - - - - - - - - - - 0072720 - - - - - - - - - - - - - - 376 001 0072740 \0 373 224 - - - - - - - - - - - - - 0072760 - - - - - - - - - - - - - - - - * 0073020 - - - - - \r / / L o c a l p 0073040 r o c e d u r e u s e d b y 0073060 A u t h e n t i c a t e . \r [ 0073100 \r S e n d W o r d ( s t r e a m 0073120 , o p A u t h e n t i c a t e 0073140 ) \r S e n d R N a m e ( s t r e 0073160 a m , n a m e ) \r B S P W r i 0073200 t e B l o c k ( s t r e a m , 0073220 p a s s w o r d , 0 , 2 * l 0073240 e n P a s s w o r d ) \r B S P F 0073260 o r c e O u t p u t ( s t r e a 0073300 m - o f f s e t B S P S t r , 0073320 t r u e ) \r r e s u l t i s R 0073340 e c e 376 \0 022 o 331 i v e W o r d ( 0073360 s t r e a m ) \r ] \r 377 \0 \0 G r a 0073400 p e v i n e P r o t o c o l . b 0073420 c p l \0 373 233 225 345 9 \0 \0 376 001 \0 373 200 0073440 / / G r a p e v i n e P r o t 0073460 o c o l . b c p l \r / / C o p 0073500 y r i g h t X e r o x C o r 0073520 p o r a t i o n 1 9 8 1 , 1 0073540 9 8 3 \r / / L a s t m o d i 0073560 f i e d S e p t e m b e r 1 0073600 9 , 1 9 8 3 9 : 3 4 A M 0073620 b y T a f t \r \r g e t " P 0073640 u p 0 . d e c l " \r g e t " P 0073660 u p 1 . d e c l " \r g e t " G 0073700 r a p e v i n e . d e c l " \r g 0073720 e t " G r a p e v i n e P r o 0073740 t o c o l . d e c l " \r g e t 0073760 " G r a p e v i n e I n t e r n 0074000 a l . d e c l " \r g e t " S t 0074020 r e a m s . d " \r \r e x t e r n 0074040 376 001 \0 232 034 a l \r [ \r / / o u t 0074060 g o i n g p r o c e d u r e s 0074100 \r I n i t G r a p e v i n e ; 0074120 M a k e K e y \r G V C r e a t e 0074140 S t r e a m ; G V D e s t r o 0074160 y S t r e a m ; G V C l a i m 0074200 S t r e a m ; G V R e l e a s 0074220 e S t r e a m \r R e c e i v e W 0074240 o r d ; S e n d W o r d ; R 0074260 e c e i v e R N a m e ; S e n 0074300 d R N a m e \r R e c e i v e R L 0074320 i s t ; D e s t r o y R L i s 0074340 t \r \r / / f o r O E P d e 0074360 c l a r a t i o n o n l y : \r 0074400 G V S t r e a m E r r o r \r \r / 0074420 / i n c o m i n g p r o c e 0074440 d u r e s 376 001 \0 317 346 \r O p e n L 0074460 e v e l 1 S o c k e t ; C l o 0074500 s e L e v e l 1 S o c k e t \r O 0074520 p e n R T P S o c k e t ; C r 0074540 e a t e B S P S t r e a m ; C 0074560 l o s e B S P S o c k e t \r B S 0074600 P R e a d B l o c k ; B S P W 0074620 r i t e B l o c k \r E n q u e u 0074640 e ; D e q u e u e ; B l o c 0074660 k \r G e t s ; P u t s ; E r 0074700 r o r s \r A l l o c a t e ; F 0074720 r e e ; Z e r o ; M o v e B 0074740 l o c k ; M y F r a m e ; G 0074760 o t o F r a m e \r \r / / o u t 0075000 g o i n g s t a t i c s \r @ g 0075020 u s \r \r / / i n c o m i n g 0075040 s t a t i c s \r o f 376 001 \0 334 - f 0075060 s e t B S P S t r ; l B S P S 0075100 o c ; C t x R u n n i n g \r ] 0075120 \r \r s t a t i c @ g u s = 0075140 0 / / G r a p e v i n e 0075160 U s e r S t a t e \r \r / / - - 0075200 - - - - - - - - - - - - - - - - * 0075300 - - - - - - - - - - \r l e t I 0075320 n i t G r a p e v i n e ( z o n 0075340 e , t e s t i n g ; n u m a 0075360 r g s n a ) b e \r / / - - - 0075400 - - - - - - - - - - - - - - - - * 0075440 - - - - - - - - - - - - - - - 376 0075460 001 \0 210 226 - - - - - - - - - - - - 0075500 - - - - - - - - - - - - - - \r / 0075520 / I f t e s t i n g t h e 0075540 n u s e t h e R - S e r v 0075560 e r t e s t i n g s o c k e 0075600 t s ( 1 i n t h e h i g 0075620 h w o r d ) \r / / r a t h e 0075640 r t h a n t h e n o r m a 0075660 l s o c k e t s . \r / / M a 0075700 y b e c a l l e d m u l t 0075720 i p l e t i m e s t o c h 0075740 a n g e t h e t e s t i n g 0075760 m o d e . \r [ \r i f g u s 0076000 e q 0 t h e n \r [ \r 0076020 g u s = A l l o c a t e 0076040 ( z o n e , l e n G U S ) ; 0076060 Z e r o 376 001 \0 353 241 ( g u s , l 0076100 e n G U S ) \r g u s > > G 0076120 U S . z o n e = z o n e \r 0076140 ] \r g u s > > G U S . s o c 0076160 k e t H i g h = n a g r 0076200 1 & t e s t i n g ? 1 , 0076220 0 \r G V D e s t r o y S t r e a 0076240 m ( ) / / i n c a s e 0076260 c h a n g e d t e s t i n g 0076300 m o d e \r ] \r \r / / - - - - - - 0076320 - - - - - - - - - - - - - - - - * 0076420 - - - - - - \r a n d M a k e K 0076440 e y ( s t r i n g , k e y ) 0076460 b e \r / / - - - - 376 001 \0 8 374 - - 0076500 - - - - - - - - - - - - - - - - * 0076600 - - - - - - \r / / C o n v e r 0076620 t s p a s s w o r d s t r i 0076640 n g t o 6 4 - b i t e n c 0076660 r y p t i o n k e y . \r [ \r s 0076700 t r u c t u r e P S t r i n g 0076720 : [ l e n g t h b y t e ; 0076740 c h a r ^ 0 , 0 b y t e ] 0076760 / / z e r o - o r i g i n 0077000 s t r i n g \r Z e r o ( k e y 0077020 , l e n P a s s w o r d ) \r f 0077040 o r i = 0 t o s t r i 0077060 n g > > P S t r i n g . l e 376 001 0077100 \0 a 031 n g t h - 1 d o \r 0077120 [ \r l e t j = i r 0077140 e m 8 \r l e t c = 0077160 s t r i n g > > P S t r i n g . 0077200 c h a r ^ i \r i f c g 0077220 e $ A & c l e $ Z t 0077240 h e n c = c + ( $ a - $ A 0077260 ) \r k e y > > P a s s w o 0077300 r d ^ j = k e y > > P a s s 0077320 w o r d ^ j x o r ( c l s 0077340 h i f t 1 ) \r ] \r ] \r \f 0077360 \r / / - - - - - - - - - - - - - 0077400 - - - - - - - - - - - - - - - - * 0077460 - - - - - - - - - - - - - - - \r 0077500 a n d 376 001 \0 340 204 G V C r e a t 0077520 e S t r e a m ( p o r t ) = 0077540 v a l o f \r / / - - - - - - - - 0077560 - - - - - - - - - - - - - - - - * 0077660 - - - - \r / / F i r s t c l 0077700 o s e s c u r r e n t l y - o 0077720 p e n s t r e a m i f t h 0077740 e r e i s o n e . \r / / T 0077760 h e n a t t e m p t s t o 0100000 o p e n a s t r e a m t o 0100020 p o r t . I f s u c c e 0100040 s s f u l , p u t s s t r e 0100060 a m i n \r / / g u s > > G U 0100100 S . s t r e a m 376 001 \0 370 222 . 0100120 R e t u r n s t r u e i f f 0100140 s u c c e s s f u l . \r / / 0100160 T h e s o c k e t p o r t i 0100200 o n o f p o r t i s i g 0100220 n o r e d ; t h e r e g i s 0100240 t r a t i o n s e r v e r e 0100260 n q u i r y \r / / s o c k e t 0100300 i s a l w a y s u s e d 0100320 ( a n d i s s t o r e d i 0100340 n t o t h e p o r t t h a 0100360 t w a s p a s s e d i n ) 0100400 . \r [ \r G V D e s t r o y S t r 0100420 e a m ( ) \r G V C l a i m S t r 0100440 e a m ( ) \r l e t s o c = 0100460 A l l o c a t e ( g u s > > G U 0100500 S . z o n e , l B S P S 376 001 \0 0100520 321 254 o c ) \r p o r t > > P o r t 0100540 . s o c k e t ^ 1 = g u s > 0100560 > G U S . s o c k e t H i g h 0100600 / / z e r o e x c e p t 0100620 w h e n t e s t i n g \r p o r 0100640 t > > P o r t . s o c k e t ^ 2 0100660 = s o c R e g S e r v e r E 0100700 n q u i r y \r O p e n L e v e l 0100720 1 S o c k e t ( s o c , 0 , 0100740 p o r t ) \r l e t r e s u l t 0100760 = O p e n R T P S o c k e t 0101000 ( s o c , 0 , 0 , 0 , 0 0101020 , i n i t i a l T i m e o u t 0101040 ) \r t e s t r e s u l t \r 0101060 i f s o \r [ \r 0101100 g u s > > G U S . s t r 0101120 e a 376 001 \0 200 W m = C r e a t 0101140 e B S P S t r e a m ( s o c ) \r 0101160 g u s > > G U S . s 0101200 t r e a m > > S T . e r r o r 0101220 = G V S t r e a m E r r o r \r 0101240 ] \r i f n o t 0101260 \r [ C l o s e L e 0101300 v e l 1 S o c k e t ( s o c ) ; 0101320 F r e e ( g u s > > G U S . z 0101340 o n e , s o c ) ] \r G V R e 0101360 l e a s e S t r e a m ( ) \r r e 0101400 s u l t i s r e s u l t \r ] \r 0101420 \r / / - - - - - - - - - - - - - 0101440 - - - - - - - - - - - - - - - - * 0101520 - - - - - - - 376 001 \0 [ 342 - - - - 0101540 - - - - \r a n d G V D e s t r 0101560 o y S t r e a m ( ) b e \r / / 0101600 - - - - - - - - - - - - - - - - * 0101700 - - - - - - - - - - - - \r / / 0101720 C l o s e s a n d d e s t r 0101740 o y s t h e c u r r e n t l 0101760 y - o p e n s t r e a m i f 0102000 t h e r e i s o n e . \r [ 0102020 \r G V C l a i m S t r e a m ( ) 0102040 \r i f g u s > > G U S . s t r 0102060 e a m n e 0 t h e n \r 0102100 [ \r l e t s o c = 0102120 g u s > > G U S . s t r 376 001 \0 t 0102140 A e a m - o f f s e t B S P S t 0102160 r \r C l o s e B S P S o c 0102200 k e t ( s o c , c l o s e T i 0102220 m e o u t ) \r F r e e ( g 0102240 u s > > G U S . z o n e , s o 0102260 c ) \r ] \r g u s > > G U S 0102300 . s t r e a m = 0 \r G V R e 0102320 l e a s e S t r e a m ( ) \r ] \r 0102340 \r / / - - - - - - - - - - - - - 0102360 - - - - - - - - - - - - - - - - * 0102440 - - - - - - - - - - - - - - - \r 0102460 a n d G V C l a i m S t r e a 0102500 m ( ) b e \r / / - - - - - - - 0102520 - - - - - - - - - - - - - - - - 0102540 - 376 001 \0 347 365 - - - - - - - - - - 0102560 - - - - - - - - - - - - - - - - * 0102620 - - - - - - - - - - \r / / O b 0102640 t a i n s a l o c k o n 0102660 t h e s t r e a m - - m u 0102700 s t b e d o n e p r i o r 0102720 t o a n y s t r e a m o 0102740 p e r a t i o n . \r [ \r w h i l 0102760 e g u s > > G U S . i n U s e 0103000 d o B l o c k ( ) \r g u s > 0103020 > G U S . i n U s e = C t x 0103040 R u n n i n g \r ] \r \r / / - - - 0103060 - - - - - - - - - - - - - - - - * 0103140 - - - - - - 376 001 \0 V z - - - - - 0103160 - - - - - - - - - - - - - - \r a 0103200 n d G V R e l e a s e S t r e 0103220 a m ( ) b e g u s > > G U S 0103240 . i n U s e = 0 \r / / - - - 0103260 - - - - - - - - - - - - - - - - * 0103360 - - - - - - - - - \r / / R e l 0103400 e a s e s t h e l o c k o 0103420 n t h e s t r e a m . \r \f \r 0103440 / / - - - - - - - - - - - - - - 0103460 - - - - - - - - - - - - - - - - * 0103540 - - - - - - - - - - - 376 001 \0 271 253 0103560 - - - \r a n d G V S t r e a m 0103600 E r r o r ( s t r e a m , e c 0103620 ) b e \r / / - - - - - - - - - 0103640 - - - - - - - - - - - - - - - - * 0103740 - - - \r / / T h e s t r e a 0103760 m e r r o r r o u t i n e 0104000 c a l l e d o n t h e B S 0104020 P s t r e a m t o t h e 0104040 G r a p e v i n e s e r v e r 0104060 . \r / / D e s t r o y s t h 0104100 e s t r e a m a n d r e t 0104120 u r n s t o t h e f r a m 0104140 e s p e c i f i e d i n S 0104160 376 001 \0 370 ? T . p a r 1 , \r / / 0104200 w h i c h h a d b e t t e r 0104220 b e o n t h e c a l l 0104240 s t a c k ! T h e v a l u 0104260 e - 1 i s r e t u r n e d 0104300 ; t h i s \r / / m u s t b 0104320 e d i s t i n g u i s h a b l 0104340 e a s a n e x c e p t i o 0104360 n a l r e s u l t b y t h 0104400 e c o d e f o r t h e \r / 0104420 / f r a m e t h a t i s 0104440 r e t u r n e d t o . \r [ \r l 0104460 e t f r a m e = s t r e a 0104500 m > > S T . p a r 1 \r l e t s 0104520 o c = g u s > > G U S . s t 0104540 r e a m - o f f s e t B S P S t 0104560 r \r C l o 376 001 \0 235 : s e B S P S 0104600 o c k e t ( s o c , 0 ) / 0104620 / a b o r t i t \r F r e e ( 0104640 g u s > > G U S . z o n e , s 0104660 o c ) \r g u s > > G U S . s t r 0104700 e a m = 0 \r G o t o F r a m 0104720 e ( f r a m e , - 1 ) / / 0104740 c o d e = r c S t r e a m 0104760 F a i l e d , t y p e = r 0105000 n S t r e a m F a i l e d \r ] \r 0105020 \r / / - - - - - - - - - - - - - 0105040 - - - - - - - - - - - - - - - - * 0105120 - - - - - - - - - - - - - - - \r 0105140 a n d R e c e i v e W o r d ( 0105160 s t r e a m ) = 376 001 \0 025 230 v 0105200 a l o f \r / / - - - - - - - - - 0105220 - - - - - - - - - - - - - - - - * 0105320 - - - \r [ \r l e t l = G e 0105340 t s ( s t r e a m , d a t a T 0105360 i m e o u t ) \r r e s u l t i s 0105400 l l s h i f t 8 + G e 0105420 t s ( s t r e a m , d a t a T 0105440 i m e o u t ) \r ] \r \r / / - - - 0105460 - - - - - - - - - - - - - - - - * 0105560 - - - - - - - - - \r a n d S 376 0105600 001 \0 0 i e n d W o r d ( s t r e 0105620 a m , w ) b e \r / / - - - - 0105640 - - - - - - - - - - - - - - - - * 0105740 - - - - - - - - \r [ \r P u t s ( 0105760 s t r e a m , w r s h i f t 0106000 8 , d a t a T i m e o u t ) 0106020 \r P u t s ( s t r e a m , w , 0106040 d a t a T i m e o u t ) \r ] \r 0106060 \r / / - - - - - - - - - - - - - 0106100 - - - - - - - - - - - - - - - - * 0106160 - - - - - - - - - - - - - - - \r 0106200 a n d 376 001 \0 352 V R e c e i v e 0106220 R N a m e ( s t r e a m , o v 0106240 e r h e a d W o r d s ) = v 0106260 a l o f \r / / - - - - - - - - - 0106300 - - - - - - - - - - - - - - - - * 0106400 - - - \r / / R e a d s a M 0106420 e s a s t r i n g f r o m 0106440 s t r e a m , a n d r e t u 0106460 r n s t h e r e s u l t a 0106500 s \r / / e i t h e r a n R 0106520 N a m e ( o v e r h e a d W o 0106540 r d s = 0 ) o r a n R 0106560 I t e m ( o v e r h e a d W o 0106600 r d s = 1 ) . 376 001 \0 275 243 \r / 0106620 / C a l l s E r r o r s ( s 0106640 t r e a m , e c B a d P r o t 0106660 o c o l ) i f a n y t h i n 0106700 g b a d h a p p e n s . \r [ 0106720 \r l e t l e n g t h = R e 0106740 c e i v e W o r d ( s t r e a m 0106760 ) / / l e n g t h \r i f 0107000 l e n g t h u g r m a x R N 0107020 a m e L e n g t h t h e n E 0107040 r r o r s ( s t r e a m , e c 0107060 B a d P r o t o c o l ) \r R e c 0107100 e i v e W o r d ( s t r e a m ) 0107120 / / m a x L e n g t h ( 0107140 i g n o r e d ) \r \r l e t s a 0107160 v e d E r r o r P o i n t = 0107200 s t r e a m > > S T . p a r 376 001 0107220 \0 c Q 1 \r s t r e a m > > S T . 0107240 p a r 1 = M y F r a m e ( ) 0107260 \r \r / / G r a p e v i n e a 0107300 l w a y s s e n d s a n e 0107320 v e n n u m b e r o f b y 0107340 t e s , e v e n i f t h e 0107360 s t r i n g \r / / l e n g t 0107400 h i s o d d . M a k e 0107420 t h e R N a m e o n e w o 0107440 r d t o o l o n g t o a 0107460 c c o m o d a t e i t . \r l e 0107500 t r I t e m = A l l o c a 0107520 t e ( g u s > > G U S . z o n e 0107540 , o v e r h e a d W o r d s 0107560 + ( l e n g t h + 3 ) r s h 0107600 i f t 1 ) \r l e t r N a m e 0107620 = 376 001 \0 350 245 r I t e m + o v 0107640 e r h e a d W o r d s \r r N a m 0107660 e > > R N a m e . l e n g t h 0107700 = l e n g t h \r i f B S P R 0107720 e a d B l o c k ( s t r e a m , 0107740 r N a m e , 1 , ( l e n g 0107760 t h + 1 ) & - 2 , d a t a T i 0110000 m e o u t ) e q - 1 t h e 0110020 n \r [ F r e e ( g u s > 0110040 > G U S . z o n e , r I t e m 0110060 ) ; G o t o F r a m e ( s a v 0110100 e d E r r o r P o i n t , - 1 0110120 ) ] \r \r s t r e a m > > S T . 0110140 p a r 1 = s a v e d E r r o 0110160 r P o i n t \r r e s u l t i s 0110200 r I t e m \r ] \r \f \r / / - - - - 0110220 - - - - - - - - 376 001 \0 377 204 - - - 0110240 - - - - - - - - - - - - - - - - * 0110320 - - - - - - - - - - - - - \r a n 0110340 d S e n d R N a m e ( s t r e 0110360 a m , r N a m e ) b e \r / / 0110400 - - - - - - - - - - - - - - - - * 0110500 - - - - - - - - - - - - \r / / 0110520 W r i t e s r N a m e ( a 0110540 B C P L s t r i n g ) a s 0110560 a M e s a s t r i n g o n 0110600 s t r e a m . \r [ \r S e n d W 0110620 o r d ( s t r e a m , r 376 001 \0 0110640 303 270 N a m e > > R N a m e . l e 0110660 n g t h ) / / l e n g t h 0110700 \r S e n d W o r d ( s t r e a m 0110720 , 0 ) / / m a x L e n g 0110740 t h ( i g n o r e d ) \r B S P 0110760 W r i t e B l o c k ( s t r e a 0111000 m , r N a m e , 1 , ( r N 0111020 a m e > > R N a m e . l e n g t 0111040 h + 1 ) & - 2 , / / t e x t 0111060 & p a d d i n g \r d a t a 0111100 T i m e o u t ) \r ] \r \r / / - - 0111120 - - - - - - - - - - - - - - - - * 0111220 - - - - - - - - - - \r a n d R 0111240 e c 376 001 \0 035 216 e i v e R L i s t 0111260 ( s t r e a m ) = v a l o f 0111300 \r / / - - - - - - - - - - - - - 0111320 - - - - - - - - - - - - - - - - * 0111400 - - - - - - - - - - - - - - - \r 0111420 [ \r l e t s t a m p = v e 0111440 c l e n T i m e S t a m p \r B 0111460 S P R e a d B l o c k ( s t r e 0111500 a m , s t a m p , 0 , 2 * 0111520 l e n T i m e S t a m p , d a 0111540 t a T i m e o u t ) \r l e t w 0111560 o r d s = R e c e i v e W o 0111600 r d ( s t r e a m ) \r \r l e t 0111620 s a v e d E r r o r P o i n t 0111640 = s t r e a 376 001 \0 345 : m > > S 0111660 T . p a r 1 \r s t r e a m > > S 0111700 T . p a r 1 = M y F r a m e 0111720 ( ) \r \r l e t r L i s t = 0111740 A l l o c a t e ( g u s > > G U 0111760 S . z o n e , l e n R L i s t 0112000 ) \r Z e r o ( r L i s t , l e 0112020 n R L i s t ) \r M o v e B l o c 0112040 k ( l v r L i s t > > R L i s 0112060 t . s t a m p , s t a m p , 0112100 l e n T i m e S t a m p ) \r \r w 0112120 h i l e w o r d s u g r 0 0112140 d o \r [ \r l e t 0112160 r I t e m = R e c e i v e R 0112200 N a m e ( s t r e a m , 1 ) \r 0112220 i f r I t e m e q - 0112240 1 t h e n \r 376 001 \0 ; 0112260 374 [ D e s t r o y R L i s t 0112300 ( r L i s t ) ; G o t o F r a 0112320 m e ( s a v e d E r r o r P o i 0112340 n t , - 1 ) ] \r E n q 0112360 u e u e ( l v r L i s t > > R 0112400 L i s t . q u e u e , r I t e 0112420 m ) \r w o r d s = w o 0112440 r d s - ( r I t e m > > R I 0112460 t e m . r N a m e . l e n g t h 0112500 + 5 ) r s h i f t 1 \r 0112520 ] \r \r s t r e a m > > S T . p a 0112540 r 1 = s a v e d E r r o r P 0112560 o i n t \r r e s u l t i s r L 0112600 i s t \r ] \r \r / / - - - - - - - 0112620 - - - - - - - - - - - - - - - - * 0112660 - 376 001 \0 k 7 - - - - - - - - - - 0112700 - - - - - - - - - - - - - - - - 0112720 - - - - - - - - - - \r a n d D 0112740 e s t r o y R L i s t ( r L i s 0112760 t ) b e \r / / - - - - - - - - 0113000 - - - - - - - - - - - - - - - - * 0113100 - - - - \r [ \r w h i l e r L i 0113120 s t > > R L i s t . q u e u e . 0113140 h e a d n e 0 d o \r 0113160 F r e e ( g u s > > G U S . z o 0113200 n e , D e q u e u e ( l v r 0113220 L i s t > > R L i s t . q u e u 0113240 e ) ) \r F r e e ( g u s > > G U 0113260 S . z o n e 376 \0 \v 211 p , r L i 0113300 s t ) \r ] \r 377 \0 \0 G r a p e v i 0113320 n e O E P . b c p l \0 373 233 225 332 V 0113340 \0 \0 376 001 \0 \f 311 / / G r a p e v 0113360 i n e O E P . b c p l - - O 0113400 v e r l a y E n t r y P o i 0113420 n t s f o r G r a p e v i n 0113440 e p a c k a g e \r / / C o p 0113460 y r i g h t X e r o x C o r 0113500 p o r a t i o n 1 9 8 1 , 1 0113520 9 8 3 \r / / L a s t m o d i 0113540 f i e d S e p t e m b e r 1 0113560 9 , 1 9 8 3 9 : 2 0 A M 0113600 b y T a f t \r \r e x t e r n 0113620 a l \r [ \r / / o u t g o i n g 0113640 p r o c e d u r e s \r I n i t 0113660 G r a p e v i n e O E P \r \r / / 0113700 i n c o m i n g p r o c e d 0113720 u r e s \r D e c l a r e O E P ; 0113740 G V S t r e 376 001 \0 355 247 a m E r 0113760 r o r ; G V C r e a t e S t r 0114000 e a m \r ] \r \r \r / / - - - - - - 0114020 - - - - - - - - - - - - - - - - * 0114120 - - - - - - \r l e t I n i t G 0114140 r a p e v i n e O E P ( o e v ) 0114160 b e \r / / - - - - - - - - - - 0114200 - - - - - - - - - - - - - - - - * 0114300 - - \r [ \r D e c l a r e O E P ( 0114320 o e v , l v G V S t r e a m 0114340 E r r o r , l v G V 376 \0 020 312 0114360 250 C r e a t e S t r e a m ) \r ] 0114400 \r 377 \0 \0 G r a p e v i n e T e s 0114420 t . b c p l \0 373 233 227 ` X \0 \0 376 001 0114440 \0 027 l / / G r a p e v i n e T 0114460 e s t . b c p l \r / / L a s t 0114500 m o d i f i e d S e p t e m 0114520 b e r 2 0 , 1 9 8 3 1 : 0114540 0 4 P M b y T a f t \r \r g 0114560 e t " G r a p e v i n e . d e 0114600 c l " \r g e t " G r a p e v i 0114620 n e P r o t o c o l . d e c l " 0114640 \r g e t " P u p 0 . d e c l " 0114660 \r g e t " S t r e a m s . d " 0114700 \r \r e x t e r n a l \r [ \r I n i 0114720 t P u p L e v e l 1 ; I n i t 0114740 G r a p e v i n e ; G V D e s 0114760 t r o y S t r e a m \r I s I n A 0115000 C L ; A u t h e n t i c a t e 0115020 ; R e a d R L i s t ; D e s 0115040 t r o 376 001 \0 ` 355 y R L i s t ; 0115060 M a k e K e y ; F i n d S e r 0115100 v e r \r I n i t i a l i z e C o 0115120 n t e x t ; C a l l C o n t e 0115140 x t L i s t \r I n i t C m d ; 0115160 G e t S t r i n g ; C r e a t 0115200 e K e y w o r d T a b l e ; I 0115220 n s e r t K e y w o r d ; G e 0115240 t K e y w o r d ; G e t N u m 0115260 b e r ; C o n f i r m \r D e s 0115300 t r o y K e y w o r d T a b l e 0115320 ; E n a b l e C a t c h ; E 0115340 n d C a t c h ; D i s a b l e 0115360 C a t c h ; D e f a u l t P h 0115400 r a s e \r C r e a t e D i s p l 0115420 a y S t r e a m ; S h o w D i 0115440 s p l a y S t r 376 001 \0 355 337 e a m 0115460 \r I n i t i a l i z e Z o n e ; 0115500 A l l o c a t e ; F r e e \r 0115520 P u t s ; C l o s e s ; W s 0115540 ; W s s ; P u t T e m p l a 0115560 t e ; E n q u e u e ; Q u e 0115600 u e L e n g t h ; E x t r a c 0115620 t S u b s t r i n g \r S y s E r 0115640 r ; F a l s e P r e d i c a t 0115660 e ; B l o c k ; I d l e \r d 0115700 s p ; s y s Z o n e ; l v S 0115720 y s Z o n e ; l v I d l e \r ] 0115740 \r \r s t a t i c \r [ \r c t x Q ; 0115760 u n d e r l y i n g Z o n e ; 0116000 d e f a u l t G r o u p ; d 0116020 e f a u l t M e m b e r ; d e 0116040 f a u l t S e r v e r \r t 376 001 \0 0116060 210 3 e s t i n g = f a l s e 0116100 \r ] \r \r s t r u c t u r e M y 0116120 Z o n e : \r [ \r @ Z N \r u n d e 0116140 r l y i n g Z o n e w o r d \r 0116160 b l o c k s A l l o c a t e d 0116200 w o r d \r ] \r m a n i f e s t 0116220 l e n M y Z o n e = s i z e 0116240 M y Z o n e / 1 6 \r \r / / - - 0116260 - - - - - - - - - - - - - - - - * 0116360 - - - - - - - - - \r l e t T e 0116400 s t ( ) b e \r / / - - - - - - 0116420 - - - - - - - - - - - - - - - - * 0116460 - - 376 001 \0 362 245 - - - - - - - - - 0116500 - - - - - - - - - - - - - - - - 0116520 - - - - - - - - - - \r [ \r W s ( 0116540 " * n G r a p e v i n e T e s t 0116560 o f S e p t e m b e r 2 0 0116600 , 1 9 8 3 " ) \r l e t v = 0116620 v e c 1 0 0 0 0 \r l e t m 0116640 y Z o n e = v e c l e n M 0116660 y Z o n e \r m y Z o n e > > M y 0116700 Z o n e . A l l o c a t e = 0116720 M y A l l o c a t e ; m y Z o 0116740 n e > > M y Z o n e . F r e e 0116760 = M y F r e e \r m y Z o n e > 0117000 > M y Z o n e . u n d e r l y i 0117020 n g Z o n e = I n i t i a l 0117040 i z e Z o n e ( v , 1 0 0 0 0 0117060 , S y s E r 376 001 \0 c 324 r , 0 0117100 ) \r m y Z o n e > > M y Z o n e 0117120 . b l o c k s A l l o c a t e d 0117140 = 0 \r s y s Z o n e = m 0117160 y Z o n e ; @ l v S y s Z o n 0117200 e = m y Z o n e \r l e t v 0117220 = v e c 1 ; c t x Q = 0117240 v ; c t x Q ! 0 = 0 \r \r 0117260 l e t v = v e c 2 0 0 0 0117300 0 \r d s p = C r e a t e D i 0117320 s p l a y S t r e a m ( 4 0 , 0117340 v , 2 0 0 0 0 ) \r S h o w D i 0117360 s p l a y S t r e a m ( d s p ) 0117400 \r \r I n i t P u p L e v e l 1 ( 0117420 s y s Z o n e , c t x Q , 1 0117440 0 ) \r \r E n q u e u e ( c t x Q 0117460 , I n i t i a l i z e 376 001 \0 307 0117500 320 C o n t e x t ( A l l o c a t 0117520 e ( s y s Z o n e , 1 0 0 0 ) 0117540 , 1 0 0 0 , M a i n ) ) \r \r 0117560 @ l v I d l e = B l o c k \r 0117600 \r C a l l C o n t e x t L i s t 0117620 ( c t x Q ! 0 ) r e p e a t \r 0117640 ] \r \r / / - - - - - - - - - - - 0117660 - - - - - - - - - - - - - - - - * 0117760 \r a n d M a i n ( c t x ) b 0120000 e \r / / - - - - - - - - - - - - 0120020 - - - - - - - - - - - - - - - - * 0120100 - 376 001 \0 374 B - - - - - - - - - - 0120120 - - - - \r [ \r I n i t G r a p e 0120140 v i n e ( s y s Z o n e ) \r l e 0120160 t k t = C r e a t e K e y 0120200 w o r d T a b l e ( 1 0 ) \r I n 0120220 s e r t K e y w o r d ( k t , 0120240 " I s " ) ! 0 = I s C m d \r 0120260 I n s e r t K e y w o r d ( k t 0120300 , " R e g i s t r y " ) ! 0 0120320 = R e g i s t r y C m d \r I n 0120340 s e r t K e y w o r d ( k t , 0120360 " A u t h e n t i c a t e " ) ! 0120400 0 = A u t h e n t i c a t e 0120420 C m d \r I n s e r t K e y w o r 0120440 d ( k t , " R e a d " ) ! 0 0120460 = R e a d C m d \r I n s e r t 0120500 K e y w o r 376 001 \0 & 357 d ( k t , 0120520 " F i n d " ) ! 0 = F i n 0120540 d C m d \r I n s e r t K e y w o 0120560 r d ( k t , " Q u i t " ) ! 0 0120600 = Q u i t \r I n s e r t K e 0120620 y w o r d ( k t , " Z o n e C 0120640 o u n t " ) ! 0 = Z o n e C 0120660 o u n t C m d \r I n s e r t K e 0120700 y w o r d ( k t , " T e s t i 0120720 n g " ) ! 0 = T e s t i n g 0120740 C m d \r I n s e r t K e y w o r 0120760 d ( k t , " C l o s e " ) ! 0 0121000 = G V D e s t r o y S t r e 0121020 a m \r \r d e f a u l t G r o u p 0121040 = E x t r a c t S u b s t r 0121060 i n g ( " " ) \r d e f a u l t M 0121100 e m b e r = E x t 376 001 \0 314 204 0121120 r a c t S u b s t r i n g ( " " 0121140 ) \r d e f a u l t S e r v e r 0121160 = E x t r a c t S u b s t r i 0121200 n g ( " " ) \r \r [ / / 0121220 r e p e a t \r l e t c s 0121240 = I n i t C m d ( 1 0 0 , 0121260 1 0 ) \r i f c s n e 0121300 0 t h e n \r [ \r 0121320 W s s ( c s , " * n 0121340 > " ) \r l e t p 0121360 r o c = G e t K e y w o r d 0121400 ( c s , k t ) ! 0 \r 0121420 p r o c ( c s ) \r 0121440 C l o s e s ( c s ) \r 0121460 ] \r ] r e p e a t \r ] 0121500 \r \r / / - - - - - - - - - - - - 0121520 376 001 \0 n & - - - - - - - - - - - 0121540 - - - - - - - - - - - - - - - - * 0121620 - - - - \r a n d Q u i t ( c s 0121640 ) b e \r / / - - - - - - - - - 0121660 - - - - - - - - - - - - - - - - * 0121760 - - \r [ \r C l o s e s ( d s p ) 0122000 \r G V D e s t r o y S t r e a m 0122020 ( ) \r @ l v I d l e = I d l 0122040 e \r f i n i s h \r ] \r \r / / - - 0122060 - - - - - - - - - - - - - - - - * 0122120 - - - - - 376 001 \0 004 [ - - - - - - 0122140 - - - - - - - - - - - - - - - - 0122160 - - - - - - - - - - - - - - \r a 0122200 n d T e s t i n g C m d ( c s 0122220 ) b e \r / / - - - - - - - - - 0122240 - - - - - - - - - - - - - - - - * 0122340 - - \r [ \r W s s ( c s , ( t e 0122360 s t i n g ? " d i s a b l e 0122400 " , " e n a b l e " ) ) \r i 0122420 f C o n f i r m ( c s ) t h 0122440 e n t e s t i n g = n o t 0122460 t e s t i n g \r I n i t G r a 0122500 p e v i n e ( n i l , t e s t 0122520 i n g ) \r ] \r \r / / 376 001 \0 271 3 - 0122540 - - - - - - - - - - - - - - - - * 0122640 - - - - - - - - - - \r a n d Z 0122660 o n e C o u n t C m d ( c s ) 0122700 b e \r / / - - - - - - - - - - - 0122720 - - - - - - - - - - - - - - - - * 0123020 \r P u t T e m p l a t e ( 0123040 d s p , " = $ U D b l o 0123060 c k s a l l o c a t e d " , 0123100 s y s Z o n e > > M y Z o n e . 0123120 b l o c k s A l l o c a t e d 376 0123140 001 \0 021 362 ) \r \r / / - - - - - - - 0123160 - - - - - - - - - - - - - - - - * 0123260 - - - - \r a n d I s C m d ( c 0123300 s , n i l ; n u m a r g s 0123320 n a ) b e \r / / - - - - - - - 0123340 - - - - - - - - - - - - - - - - * 0123440 - - - - \r [ \r l e t d e s c 0123460 = n a e q 1 ? d I t s e 0123500 l f , d I t s R e g i s t r y 0123520 \r d e s c = d e s c % ( 0123540 t a b l 376 001 \0 v 374 e [ d M e 0123560 m b e r ; d O w n e r ; d F 0123600 r i e n d ] ) ! \r ( 0123620 S e l e c t K e y w o r d ( c s 0123640 , " M e m b e r " , " O w n 0123660 e r " , " F r i e n d " ) - 1 0123700 ) \r d e s c = d e s c % 0123720 ( t a b l e [ d D i r e c t 0123740 ; d C l o s u r e ; d U p A 0123760 r r o w ] ) ! \r ( S 0124000 e l e c t K e y w o r d ( c s , 0124020 " D i r e c t " , " C l o s 0124040 u r e " , " U p A r r o w " ) 0124060 - 1 ) \r W s s ( c s , " ( g 0124100 r o u p ) " ) \r l e t g r o 0124120 u p = G e t D e f a u l t e 0124140 d S t r i n g ( c 376 001 \0 240 302 s , 0124160 l v d e f a u l t G r o u p 0124200 ) \r W s s ( c s , " ( m e m 0124220 b e r ) " ) \r l e t m e m b 0124240 e r = G e t D e f a u l t e 0124260 d S t r i n g ( c s , l v d 0124300 e f a u l t M e m b e r ) \r l e 0124320 t e c = I s I n A C L ( g 0124340 r o u p , m e m b e r , d e 0124360 s c ) \r D i s p l a y G r a p e 0124400 v i n e E C ( e c ) \r F r e e ( 0124420 s y s Z o n e , g r o u p ) \r 0124440 F r e e ( s y s Z o n e , m e 0124460 m b e r ) \r ] \r \r / / - - - - - 0124500 - - - - - - - - - - - - - - - - * 0124540 - - - - - - - - - - - - - - 376 001 0124560 \0 235 200 - - - - - - - - - - - - - 0124600 - - - - - - - - - - - \r a n d 0124620 R e g i s t r y C m d ( c s ) 0124640 b e I s C m d ( c s , n i l 0124660 ) \r / / - - - - - - - - - - - - 0124700 - - - - - - - - - - - - - - - - * 0124760 - - - - - - - - - - - - - - - \r 0125000 \r / / - - - - - - - - - - - - - 0125020 - - - - - - - - - - - - - - - - * 0125100 - - - - - - - - - - - - - - \r a 0125120 n d A u t h e n t i c a t e C 0125140 m d ( c s ) b e \r / / - - - - 0125160 - - - 376 001 \0 \f 345 - - - - - - - - 0125200 - - - - - - - - - - - - - - - - * 0125260 - - - - - - - - - - - - \r [ \r W 0125300 s s ( c s , " ( n a m e ) 0125320 " ) \r l e t n a m e = G e 0125340 t D e f a u l t e d S t r i n g 0125360 ( c s , l v d e f a u l t M 0125400 e m b e r ) \r W s s ( c s , " 0125420 ( p a s s w o r d ) " ) \r l 0125440 e t p a s s w o r d = G e 0125460 t S t r i n g ( c s , 0 , 0 0125500 , 0 , F a l s e P r e d i c 0125520 a t e ) \r l e t k e y = v 0125540 e c l e n P a s s w o r d \r M 0125560 a k e K e y ( p 376 001 \0 213 ~ a s s 0125600 w o r d , k e y ) \r l e t e 0125620 c = A u t h e n t i c a t e 0125640 ( n a m e , k e y ) \r D i s p 0125660 l a y G r a p e v i n e E C ( e 0125700 c ) \r F r e e ( s y s Z o n e , 0125720 n a m e ) \r F r e e ( s y s Z 0125740 o n e , p a s s w o r d ) \r ] 0125760 \r \r / / - - - - - - - - - - - - 0126000 - - - - - - - - - - - - - - - - * 0126060 - - - - - - - - - - - - - - - \r 0126100 a n d R e a d C m d ( c s ) 0126120 b e \r / / - - - - - - - - - - - 0126140 - - - - - - - - - - - - - - - - 0126160 - - - - - - - - - - - - - 376 001 \0 0126200 375 271 - - - - - - - - - - - - - - 0126220 - - - - - - - - - - - - - - - - 0126240 - - - - - \r [ \r l e t o p = 0126260 ( t a b l e [ o p R e a d 0126300 M e m b e r s ; o p R e a d O 0126320 w n e r s ; o p R e a d F r i 0126340 e n d s ] ) ! \r ( S 0126360 e l e c t K e y w o r d ( c s , 0126400 " M e m b e r s " , " O w n 0126420 e r s " , " F r i e n d s " ) 0126440 - 1 ) \r W s s ( c s , " ( o 0126460 f g r o u p ) " ) \r l e t 0126500 g r o u p = G e t D e f a u 0126520 l t e d S t r i n g ( c s , l 0126540 v d e f a u l t G r o u p ) \r 0126560 l e t e c = n i l \r l e t 0126600 r 376 001 \0 221 303 L i s t = R e 0126620 a d R L i s t ( g r o u p , o 0126640 p , l v e c ) \r t e s t r 0126660 L i s t n e 0 \r i f s 0126700 o \r [ \r 0126720 P u t T e m p l a t e ( d s p , 0126740 " = ( $ D ) " , Q u e 0126760 u e L e n g t h ( l v r L i s 0127000 t > > R L i s t . q u e u e ) ) 0127020 \r l e t r I t e m 0127040 = r L i s t > > R L i s t . 0127060 q u e u e . h e a d \r 0127100 w h i l e r I t e m n e 0127120 0 d o \r [ 0127140 P u t T e m p l a t e ( d s p , 0127160 " $ S " , l v r I t e m 0127200 > > R I t e m 376 001 \0 _ 271 . r N a 0127220 m e ) ; r I t e m = r I t 0127240 e m > > R I t e m . n e x t ] 0127260 \r D e s t r o y R L 0127300 i s t ( r L i s t ) \r 0127320 ] \r i f n o t D i s p 0127340 l a y G r a p e v i n e E C ( e 0127360 c ) \r F r e e ( s y s Z o n e , 0127400 g r o u p ) \r ] \r \r / / - - - 0127420 - - - - - - - - - - - - - - - - * 0127520 - - - - - - - - \r a n d F i n 0127540 d C m d ( c s ) b e \r / / - - 0127560 - - - - - - - - - - - - - - - - 0127600 - - - - - - - - - - - - 376 001 \0 365 0127620 222 - - - - - - - - - - - - - - - 0127640 - - - - - - - - - - - - - - - - 0127660 - - - - - - - - - - - - - - \r [ 0127700 \r W s s ( c s , " ( s e r v 0127720 e r n a m e ) " ) \r l e t 0127740 n a m e = G e t D e f a u l 0127760 t e d S t r i n g ( c s , l v 0130000 d e f a u l t S e r v e r ) \r 0130020 W s s ( c s , " ( p o l l i 0130040 n g s o c k e t n u m b e r 0130060 ) " ) \r l e t p o l l i n g 0130100 S o c k e t = G e t N u m b 0130120 e r ( c s , 8 ) \r l e t e c 0130140 = F i n d S e r v e r ( n a 0130160 m e , p o l l i n g S o c k e 0130200 t , P r i n t P o r t ) \r i f 0130220 376 001 \0 365 | e c n e 0 t h 0130240 e n D i s p l a y G r a p e v 0130260 i n e E C ( e c ) \r ] \r \r / / - 0130300 - - - - - - - - - - - - - - - - * 0130400 - - - - - - - - - - \r a n d P 0130420 r i n t P o r t ( p o r t ) = 0130440 v a l o f \r / / - - - - - - - 0130460 - - - - - - - - - - - - - - - - * 0130560 - - - - \r [ \r P u t T e m p l a 0130600 t e ( d s p , " [ $ O # $ O 0130620 # $ U E O ] 376 001 \0 361 Y " , p o 0130640 r t > > P o r t . n e t , p o 0130660 r t > > P o r t . h o s t , l 0130700 v p o r t > > P o r t . s o c 0130720 k e t ) \r r e s u l t i s t r 0130740 u e / / s t o p a t f 0130760 i r s t s e r v e r e n u m 0131000 e r a t e d \r ] \r \r / / - - - - 0131020 - - - - - - - - - - - - - - - - * 0131120 - - - - - - - \r a n d D i s p 0131140 l a y G r a p e v i n e E C ( e 0131160 c ) b e \r / / - - - - - - - - 0131200 - - - - - - - - - - - - - - - - 0131220 - - - - - - - - - - - 376 001 \0 273 252 0131240 - - - - - - - - - - - - - - - - * 0131300 - - - - - - - - \r [ \r P u t T e 0131320 m p l a t e ( d s p , " - - 0131340 $ S " , s e l e c t o n e 0131360 c i n t o \r [ \r c 0131400 a s e e c N o C h a n g e : 0131420 " N o C h a n g e " \r c a 0131440 s e e c G r o u p : " G r o 0131460 u p " \r c a s e e c I n 0131500 d i v i d u a l : " I n d i v 0131520 i d u a l " \r c a s e e 0131540 c B a d R N a m e : " B a d R 0131560 N a m e " \r c a s e e c 0131600 A l l D o w n : " A l l D o w 0131620 n " \r c a s e e c B a d 0131640 376 001 \0 274 m P a s s w o r d : " 0131660 B a d P a s s w o r d " \r 0131700 c a s e e c I s M e m b e r : 0131720 " I s M e m b e r " \r c 0131740 a s e e c I s N o t M e m b e 0131760 r : " I s N o t M e m b e r " 0132000 \r d e f a u l t : " u n 0132020 k n o w n e r r o r c o d e 0132040 " \r ] ) \r ] \r \r / / - - - 0132060 - - - - - - - - - - - - - - - - * 0132160 - - - - - - - - \r a n d M y A 0132200 l l o c a t e ( z o n e , w o 0132220 r d s ) = v a l o f \r / / - 0132240 - - - - - 376 001 \0 323 217 - - - - - - 0132260 - - - - - - - - - - - - - - - - * 0132340 - - - - - - - - - - - - - - - \r 0132360 [ \r z o n e > > M y Z o n e . b 0132400 l o c k s A l l o c a t e d = 0132420 z o n e > > M y Z o n e . b l 0132440 o c k s A l l o c a t e d + 1 \r 0132460 r e s u l t i s A l l o c a t 0132500 e ( z o n e > > M y Z o n e . u 0132520 n d e r l y i n g Z o n e , w 0132540 o r d s ) \r ] \r \r / / - - - - - 0132560 - - - - - - - - - - - - - - - - * 0132640 - - - - - - - - - - 376 001 \0 s 305 - 0132660 - - - - - - - - - - - \r a n d 0132700 M y F r e e ( z o n e , b l o 0132720 c k ) = v a l o f \r / / - - 0132740 - - - - - - - - - - - - - - - - * 0133040 - - - - - - - - - \r [ \r z o n e 0133060 > > M y Z o n e . b l o c k s A 0133100 l l o c a t e d = z o n e > 0133120 > M y Z o n e . b l o c k s A l 0133140 l o c a t e d - 1 \r r e s u l t 0133160 i s F r e e ( z o n e > > M y 0133200 Z o n e . u n d e r l y i n g Z 0133220 o n e , b l o c k ) \r ] \r \r / 0133240 / - - - - - - - - - - - - - - 376 0133260 001 \0 321 x - - - - - - - - - - - - 0133300 - - - - - - - - - - - - - - - - * 0133360 - \r a n d S e l e c t K e y w 0133400 o r d ( c s , k e y 1 , n i 0133420 l , n i l , n i l , n i l 0133440 , n i l , n i l , n i l , 0133460 n i l , n i l ; \r n 0133500 u m a r g s n a ) = v a l 0133520 o f \r / / - - - - - - - - - - - 0133540 - - - - - - - - - - - - - - - - * 0133640 \r / / T a k e s a l i s t 0133660 o f 376 001 \0 Y I u p t o 1 0133700 0 k e y w o r d s , c a l l 0133720 s G e t K e y w o r d w i t 0133740 h t h a t l i s t , \r / / 0133760 a n d r e t u r n s t h e 0134000 i n d e x ( 1 - 1 0 ) o f 0134020 t h e o n e m a t c h i n 0134040 g t h e w o r d t y p e d 0134060 i n . \r / / K e y w o r d 0134100 a r g u m e n t s m a y b e 0134120 o m i t t e d b y s u p p 0134140 l y i n g z e r o i n s o 0134160 m e a r g u m e n t \r / / 0134200 p o s i t i o n s ; t h i s 0134220 p e r m i t s k e y w o r d s 0134240 t o b e i n c l u d e d 0134260 c o n d i t i o n 376 001 \0 326 311 a l 0134300 l y . \r [ \r P u t s ( c s , $ 0134320 * s ) \r l e t k t = n i l 0134340 \r i f E n a b l e C a t c h ( 0134360 c s ) t h e n [ D e s t r 0134400 o y K e y w o r d T a b l e ( k 0134420 t ) ; E n d C a t c h ( c s ) 0134440 ] \r k t = C r e a t e K e 0134460 y w o r d T a b l e ( 1 0 ) \r f 0134500 o r i = 1 t o n a - 1 0134520 d o i f ( l v c s ) ! i 0134540 n e 0 t h e n I n s e r 0134560 t K e y w o r d ( k t , ( l v 0134600 c s ) ! i ) ! 0 = i \r l e 0134620 t w h i c h = G e t K e y 0134640 w o r d ( c s , k t ) ! 0 \r D 0134660 e s t r o y K e y w o r d T 376 001 0134700 \0 034 301 a b l e ( k t ) \r D i s a 0134720 b l e C a t c h ( c s ) \r r e s 0134740 u l t i s w h i c h \r ] \r \r / 0134760 / - - - - - - - - - - - - - - - 0135000 - - - - - - - - - - - - - - - - * 0135060 - - - - - - - - - - - - \r a n d 0135100 G e t D e f a u l t e d S t r 0135120 i n g ( c s , l v D e f a u l 0135140 t S t r i n g ) = v a l o f 0135160 \r / / - - - - - - - - - - - - - 0135200 - - - - - - - - - - - - - - - - * 0135260 - - - - - - - - - - - - - - \r [ 0135300 \r D e 376 \0 233 226 g f a u l t P h r 0135320 a s e ( c s , @ l v D e f a u 0135340 l t S t r i n g ) \r l e t r e 0135360 s u l t = G e t S t r i n g 0135400 ( c s ) \r F r e e ( s y s Z o n 0135420 e , @ l v D e f a u l t S t r 0135440 i n g ) \r @ l v D e f a u l t S 0135460 t r i n g = E x t r a c t S 0135500 u b s t r i n g ( r e s u l t ) 0135520 \r r e s u l t i s r e s u l t 0135540 \r ] \r 377 \0 \0 C o m p i l e G r a 0135560 p e v i n e . c m \0 373 233 224 341 > \0 0135600 \0 376 \0 206 ( } B c p l / f o G r 0135620 a p e v i n e E n q u i r e . b 0135640 c p l G r a p e v i n e L o c 0135660 a t e . b c p l G r a p e v i 0135700 n e N a m e I n f o . b c p l 0135720 G r a p e v i n e P r o t o c o 0135740 l . b c p l G r a p e v i n e 0135760 O E P . b c p l G r a p e v i 0136000 n e T e s t . b c p l \r 377 \0 \0 L 0136020 o a d G r a p e v i n e T e s t 0136040 . c m \0 373 233 224 341 035 \0 \0 376 001 \0 371 250 0136060 B l d r 6 0 0 / W G r a p e 0136100 v i n e T e s t G r a p e v i 0136120 n e E n q u i r e G r a p e v 0136140 i n e L o c a t e G r a p e v 0136160 i n e N a m e I n f o G r a p 0136200 e v i n e P r o t o c o l P u 0136220 p B S P O p e n C l o s e P u 0136240 p B S P P r o t P u p B S P S 0136260 t r e a m s P u p B S P B l o 0136300 c k P u p B S P a P u p R T 0136320 P O p e n C l o s e P u p R T 0136340 P P u p N e t D i r L o o k u 0136360 p P u p 1 O p e n C l o s e 0136400 P u p 1 b P u p A l 1 a P u 0136420 p R o u t e P u p A l E t h b 0136440 P u p A l E t h a C o n t e 0136460 376 \0 300 340 x t C o n t e x t I 0136500 n i t I n t e r r u p t A l 0136520 t o Q u e u e A l t o T i m e 0136540 r C m d S c a n C m d S c a 0136560 n E d i t C m d S c a n A u x 0136600 C m d S c a n D i s p l a y 0136620 K e y w o r d K e y w o r d I 0136640 n i t S t r i n g U t i l A 0136660 l t o B y t e B l t T e m p l 0136700 a t e P u p 1 I n i t P u p 0136720 D u m m y G a t e P u p A l E 0136740 t h I n i t I n t e r r u p t 0136760 I n i t \r 377 \0 \0 R e l e a s e G 0137000 r a p e v i n e . c m \0 373 233 224 341 0137020 202 \0 \0 376 \0 342 C x F T P M a x c 0137040 ^ \r c o n n e c t / c A l 0137060 t o d u m p / c G r a p e v 0137100 i n e . d m @ G r a p e v i n 0137120 e B R s @ ^ \r c o n n e c t 0137140 / c A l t o S o u r c e d u 0137160 m p / c G r a p e v i n e S o 0137200 u r c e s . d m @ G r a p e v 0137220 i n e @ \r \r F T P I n d i g o 0137240 c o n n e c t / c G r a p e 0137260 v i n e d i r / c G r a p e 0137300 v i n e > t e s t ^ \r s t o 0137320 r e / c G r a p e v i n e T e 0137340 s t . r u n G r a p e v i n e 0137360 T e s t . s y m s \r 377 \0 \0 G r a 0137400 p e v i n e B R s . c m \0 373 230 \t 0137420 265 251 \0 \0 376 \0 p 357 ` G r a p e v i 0137440 n e . d e c l G r a p e v i n 0137460 e E n q u i r e . b r G r a p 0137500 e v i n e L o c a t e . b r G 0137520 r a p e v i n e N a m e I n f o 0137540 . b r G r a p e v i n e P r o 0137560 t o c o l . b r G r a p e v i 0137600 n e O E P . b r 377 \0 \0 G r a p 0137620 e v i n e . c m \0 373 233 224 341 210 \0 \0 0137640 376 001 \0 s y G r a p e v i n e . d 0137660 e c l G r a p e v i n e I n t 0137700 e r n a l . d e c l G r a p e 0137720 v i n e P r o t o c o l . d e c 0137740 l G r a p e v i n e E n q u i 0137760 r e . b c p l G r a p e v i n 0140000 e L o c a t e . b c p l G r a 0140020 p e v i n e N a m e I n f o . b 0140040 c p l G r a p e v i n e P r o 0140060 t o c o l . b c p l G r a p e 0140100 v i n e O E P . b c p l G r a 0140120 p e v i n e T e s t . b c p l 0140140 C o m p i l e G r a p e v i n e 0140160 . c m L o a d G r a p e v i n 0140200 e T e s t . c m R e l e a s e 0140220 G r a p e v i n e . c m G r a 0140240 p e v i n 376 \0 025 223 256 e B R s . c 0140260 m G r a p e v i n e . c m 374 0140300