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