ELF>@@@8@@@@@@@@@@ttxxWxW `WW@@ Ptdp_p_Gp_G44Qtd/lib64/ld-linux-x86-64.so.2GNU%.*,!- %#"&('$+    )2VOK#f btXX6XfR!:m{D%K9LDLQ, .1=X 7_r _Jv_RegisterClasses__gmon_start__libc.so.6putcharstrcpystdoutungetcfscanffgetsmemcpysystemmallocfflushfclose__sysv_signalfprintfstrcatstdinstrstrstrncmpstrncpyunlinkrealloc_IO_getcsscanfmemsetgetchartimestrcmpsprintfstderrfputc__ctype_b_locfwriteexitatoi_IO_putcfopen__libc_start_mainstrchrfputsfree__xstatGLIBC_2.3GLIBC_2.2.5$ii ^ui h0W-X X X(PWXW`WhWpWxWWWW W W WWWWȸWиWظWWWWWWWWW W(W0W8W @W!HW"PW#XW$`W%hW&pW'xW*W+W,H*H5%%h%h% h%h%h%h%h%hp%کh`%ҩh P%ʩh @%©h 0%h %h %h%h%h%h%h%h%zh%rh%jh%bhp%Zh`%RhP%Jh@%Bh0%:h %2h%*h%"h%h %h!% h"%h#%h$%h%%h&%h'p1I^HHPTICH`CHû@WHHIHtHÐ=UHt$HHHHHuffffffffUH=OHtHt WIAÐUHHHXH`HhLpLxH@H@HHDž@@H)@HEH@)x)p)h)`)X)P)H)@HHHHxUHH@jE}u E+}'~ EQHE }'~E'H>HHLHH)HHEH6HtEHH4H=!HEEHH<HEHEHEH}u EHEHޙEHHHEHHܙHtEHH4H=Ù&HEEHH<^HEHMHMH}u EPHEHEHHHEH3EEHHHH8HHHEEUHSHјHHu56HΘHHؘHEHfEH`CE}ynqy EH`CE}_E}} EHDЋ/9HHїH9rB5H×HHHEHCEEfHHHHyHHSEȉ=EHCE}tHgE}x9} 0EHDЋ?9uEHCEnӖuB!D֖ΖHH`CE}E}} EHDf=u}HRH;H9r3H-HH"HEHCEEfHHHHH HPHՕHH9(3HHHHHHΕ2EHCE+EHHHHNHHHX}0EH#Do0HH8#hyHH8HHH@H-H&HϔHHHBPRJdD05ȉ-K(0O!Dr0HpHHHbHHHDHHPHHP HBH(H0H4H@HHxIDHEHHPHHHHPH@EGHړHHHtHǓHH@EEH}uHEHHPH@;Em!Dt$HiH@HHPHWHPHHBPH..H4H-@..ɰHH@s.Hc..膰HH@0..SHHHeHH@BHQHH@=-t!Du!D-.H H@HHHH@@ fu$HؑHHH@H0!D讬X-HHHH@H@Pf=.t$HHHH@H0!Dk-HHjHHH@H@P@B,HIHH@H,H/HHP H=qAHEHHHHtHHH@EEH}кu m!DHJ,HHH@HH1HtH5%!DiHtHH@HH+HWHHP HIHHHxAHn+HHH@HTHHtH5!DժHHH@HHw}uY+HHHP HHHHxA}H*ȉ"+HHtHVHH@H0!D8H;HH@H*H!HH8H*HHH *HHHpm*HɎHH@H0 "D諪M*F>:*HHH0HH HHxYȉ*H^HHpHPHHHx3ff)HHHpH HHHx3fRKfv)HҍHHPHčHHHpHHHHxF3ff5#)HHHPHqHHHpH_HHHxT3ff(ɗBXHE؋ȉĪHHHEHBfvd(]UWHE<ȉ4HEf@ NHHHEHBf'ߖ`WHEƖȉHHHEHBHEH81Qfv'og'@芩H%A'H1HC ''HHH'HpH8'H\HH&HIH8&HI&H%HHpHH8utH&"D&;"DϦq&H͊HHۊ[&HH0HHH8H2&H"&H~HH &HhHHv%HRHH`%H<HHH.HHpHH8|nHHH%HHHHHHHpH؉H85^HÉH8H̉L%HH H@=tX"D~HHH8?tHnH(HHtH[H(HH@H0n"D1HH$"D$HH,ڦH$HHHHH,触H߈_$HψO$HHH9$HHHH80RH $HfHH\HHHNHH80HN#H*H8/H$#HHHHH8/蹥Hq#H͇HHۇHHHX.uHCPHHH@H@P@#HsHHHPHaHHBPHSHHH]H>H0H4HH8Vg֑"HHHHPHHHBPHHHHr"HΆH(H@tHHH8EUUEM9M}uu}=H_HH@HUHNH/H(H@B!HHH@@HHH!HHHHPHمH@BHɅH@?v0HHHH@H0"D荠HH@?HHHH@@HnHHHx HTHHHPHBHH@BH.HHH8 5HH81H HH81谢Hh HX HHHHH H81iH! .&HoHH@@ f=HSHH@H@`H1H5HHH?H8HHHB8H HHt4HHHH@@ f=tHHHH@f@ yȉqkuDMu:HHHH@@ fuHHHH@H0"DaHlHHt!H]HHp0HOHH8!H(H@HH.ޠHHHHH܂HHa"D裝M>6:+ȉ#fHxHHnHHH`HH8r(H`HAH8Reȉff]HHHHHHځHH8s袟HځHӁ@HH8SSeHH8H$HHH8>HvHoHPHHH@(HB(H=R]HHH8ݞHHHHHH@(HB(H=l菞HǀHgHC7HH8UHHnHH@@ ft3HWHH@@ f=tH?HH@H0"DH$HH@f@ H HHHH8:ĝHHHHH@@ ft;HHHH@@ f=tHHHH@H0"D|HHHH@f@ HjHH`HHHRHH89HRH3H0H)HH8K_HH0H HH8H~HH8m.補H~H~@H ~H~HH+jH~H ~H|~HHHn~HH896Hn~HO~HH0HA~HH8c^H.~HH8H~HHH@@ f@"D.讛H}H}@H }H}HH-uH}H }H}HHHy}HH89AHy}HZ}HH0HL}HH8n]H9}HH8H&}HHH@@ f@ #DH|HHH|HH8蘚H|ډFH|HH`H|Ht|HH2Hj|HF|HH@|H!|H8MH|HH|tȉl5f,H{HH{HHH{HH8rqH{f*H{@Hs{H8R_ׅȉυfH${HHH{H(HH{H(H8rИH{H{@HzHH8R}^]NFJ;ȉ3fHzHHHzzH(HHlzH(H8r4HlzHez@fH6zHH8R]ȉWfNHyHHyHHHyHH8s蓗HyfJHy@HyH8S;]H|yH8@ HhyHc*HbyH=[y$@H1yHxH(H8輖HxHxiHǾpHC(HxH@(H8:3x&HxH(H8@HxxHqxHǾHC(HOxH@(H8 ͕HxHwzHǾHC(cXPPHwHH0HwH HHx= ȉHtwHHwHvwHWwHHx HC(HNwH/wHHp(H!wHHHx HC(蹔HvHvfHC \HvHHvFHvHHv0HvHHHvHrvHHhvHH++HcvH?vHH5vHH-H0vH vHHvHH*œHu}HuHHuHH/蒓HuJHuHHuHH%_HuHsuHHiuHH&,HduH@uHH6uHH^H1uH uHHuHH|ƒHt~HtHHtHHB蓒HtKHtHHtHHC`HtHttHHjtHHD-HetHAtHH7tHHEH2tHtHHtHH@ǑHsHsHHsHHA蔑HsLHsHHsHH?aHsHusHHksHH>.HfsHBsHH8sHHFH3sHsHHsHHGȐHsHrH~螐HrVHrHJtHr,HrH!JHrH^rHHHPrHH>HKrH DrH%rH(H?H r ||H>Hu$#DЍH#HHEHDžx@#DHDžpHuHxHp(' ~  |ȉ|HfqHHHXqH(H8 HSqH5LqHuH)qHHtHqH@EEEH}GHpH(H0HpHH8ATH=pRd HpHHHpHH8 uHp- HpHH GHpf zz zȉzfHpHHH pH(HHoH(H8RƍHo~ ozgzk \zȉTzfHoHHHoH(HHoH(H8RUHofH}o@ HRoHH`oHAoH8G#D蹋 H(oHH6o .ٌHoH oHnH@fBHnHnH@Ba 脌Hn< !_Hnf  HcnHH !HYnf H%nHHPHnHH0H nH(HHx趏H n HmHHH0HmHHPHmHH0HmH(HHxeHm= HmHHPHmHHHx3Hm HcmHHH0HUmHHPHGmHHHxHCmH3mHmHHmHlHHmHlHHlqHlaHlHH8`uN#D茇Hl+HlHHHlHlf#DHHNlHH\lH8lHHHBlHlHHlHH?׉HlHkHHkHH?褉Hk\HkHHkHH>qHk)HkHH{kHH>>HvkHRkHHHkHH? HCkHkHHkHH>؈HkHjHHHjHH8*衈HjYHjHHHjHH8,jHj"H~jHHHpjHH8+3HkjHGjHHH9jHH8-H4jH(jH@HjHiH@BHj@{#DŅgHiHiHH@HBHi@;HiHpHiH8QHi HeiHH[iHHpHJiHH8HJiH:iHiHH$iHiHhHHh~HhHHhhHhHHf,u-HhHH0HhHH8Hh$HhHHHrhHH,5HmhHIhHf,uH6hHHDhH hH,HhHgHHf,u)HgH0HgHH8$HgZHgHHgHH,oHg'HgHHgHrgH0HhgH8GHYgH8#DуH@gHH H6gHgHH8#D苃.HfHfHfH@fBHfHfH@BI.lHfHfH~fH@؉B HgfHf,uHTfHHbfH>fH,H8fHfHHf,u)HeH0HeHH8BHexHeHHeHH,荃HeEHeHHf,u-HeHH0H|eHH8˹HeH]eHHHOeHH,HJeH&eHHH0eH eH81΂HeHd,謂HdgHdH81腂HdHdHHHd,ZHdHqdHHH{dHddHcEHHH)HHMdHFdEH0dHcEHHH)HHdEHCE}}EHcHHcHcfHcHHcHcHcHcy<ccy ccEHCE}t;}}}x/} &EHD;EuEHCEEHCEH cHbH9rguGHbHHbHbEfHbHHbHbHbH #DmEEEHĈ[UH}}"t} t EEEUHH}0HEHHHu}_u EEEUHH}HEHHH%UHH}HEHHH%UHH0}HuEMEHcYHEYEHcEYHE}\u=EE؋nyH=iE.EHcEUވYHETnyH=miEEE߈E}HEЅkEHƀY nyH5%i}DUHH0}uUmyH=hDE{E܋E܉EE;EuEE&myH5h}REEEUHHPH}uHUHMLEHEHHEH}HHHȍx|HEHuH}.HHEpHEHH0HEH8KuJHEHH0*DzHUHEHPHUHEHBHUEB(HBhHEHP0HEH@@HEH}uH{HEHUHEHHUHEHPHUHEHBHEtHHEHHEH}HHHȍx!{HHEHP HEHx Hu&HUEB(HgHEHP0HHEHP@HEHUHH0H}؋+g-HMغ *DHMغ*DHMغ*DnfHgHEHEH@ ftHEH@ fXHEHHH}ؾ+D;HEH@HEHEHHE< tHE< tHE<\tHuؿ"EHEEԃ}"t}%t"} t1IHMغ+D肿BH}ؾ+D蝿-HMغ+DSHEHuHEHHEHEt }^HEtHMغ+DHuؿ"HMغ+DоHEH@@HEH}kHMغ#+D衾HMغ8+D艾UHH H}HHE,HEHH0H}軾u EHEH@@HEH}uEEUHH HkHtVHkEHBHpk}u]H_k hHcH@XEHHcH@X( hHcH@XEHHcH@X}umhHHŠX@,hhHHŠXH@8HcqhȉihchyH=|cϽEEEEEEEUHHjHtHxjHHnj hHcH@XHPHcH@XUHH H}HתHE#HEHH0H}tHEH@@HEH}uH}uHu@+DXvHEUHH0H}HuHUؿ ]vHEHUHEHHUHEHBHUHEHBHiHEHPHEHhUHH0H}HuHUؿ uHEHUHEHHUHEHBHUHEHBHhHEHPHEHhH}t~HEH8e+DuHEH@[HEH8o+Dt=HEH8{+D̻t(HEH8+D跻tHEH0+Dt fcUHH H}HEHEHEHHE< tHE< tHEHHE< tHE< uHEHHE< tHE< tHEHHE<*tHEHHE< tHE< tHEuHu迸+DNtH}[ZHt+H}{GHuHu+DsHEHEHEHEUHH`H}HMغ+DHfHEHEH@HHEH@HHEHE,DHEHuH}HM(HEH@HHE2HE<"uHE HE<\uHE HEHHEHHEuHEHH8HEH}HEH@HHUH}ؾ,DDHEH@HHEHE(,DHEHuH}HM(HEH@HHE2HE<"uHE HE<\uHE HEHHEHHEuHEHH88HEH}t"HEH@HHUH}ؾ1,DpHEH@HEH}1HMغ<,DUHHpH}ȉuHUEUH}Ⱦ?,DHdHEHEH@HHEH@HHEHEX,DHEHuH}HM(rHEH@HHEHE<"uHE HEHHEuHEHH8HEHEH@HHHEHEHHE< tHE< tHEHHEH}HHHpHEHuH}HEHHEH}HHHHEHHEHEHEHHE< tHE< tHuH}迶uT}tHMȺ_,D=EH}t(HEH@HHMUH}Ix,D7HEH@HEH}!HMȺ<,DصUHpHbHtZHbHEHEH@HHEHE,DHEHuH}HM(HEH@HHEHE(,DHEHuH}HM(tMHEH@HHEHEX,DHEHuH}HM(t tHEH@HEH}UHHH}EHtaHuHpaHu EHPaHEjHEH@HHEHE,DHEHuH}HM(uHEHHH}输,DtHEH< EBE}}}"t1D)R}J@xTCyH=m>"E "E}t2DQYHHEиH}HHHHYf"YH]>ByH==? E r E}uUHH H}EByH==E.EEEEHEHEHEE}[t}]t } t뫋2B*BHEHE}HEHHEUHHpHHEHHE`HEH@0HtGHEH@0f=1tHH0*2DkPHEH@0HPHEH@0H@@ BHEH@8HEH}uHurKPH :PHHH@A6AHH8A2DuH.HHPpHf@  Hf@ HHEƅ@yH=;= qE܋M܉  } t tAR[t{tf t5H@ fu6H`-@%@MuܿJ2DΕHH0_2DN?EH@ ftD ;t(HO;H?Hn2D2H&H;H?H2DԕHHHHHHHHHEHEE+?yH=D:藔 E܋E܉HEHEHHUHHH)HH=~2DM}܉#C#O N : 4   t) {t(}t03>+>EHEHEHEHE}HEH@ fuHEHHEHHHuHI5}t0Ht&HHH9Hu俨2D5HH,}uHEH}EHE HUHSHH#=yH=<8菒EEЋEЉEE0 0} }̃}$EH3D<<W:u}낋}J@<yH=7"E 7"E׀}tY2D KYHHEH}HHHHYf"9LH.H.Y HCE5;yH=6DE{E܋E܉E}\uc;yH=6ELE}}}nu E +}ru E }tu E }fuE F;yH=_6貐'E 'E}t8uY2DI8~KH-H-EBE.}t\}J@78hKHm-Hf-Y,CE.S}u}_u>}@J@P7Y%E}EE}!}}[EH4D/*E}W7*/E}`*7^::E8-I-h¾>WE +H+;ECE=¾F<EBD=¾G>E9@=E|:;!¾A=ER<=?E9&?&iE |>|PEE5HH+EE؋EHH[UHSH8H}йsHH*EEHHHH)HWH}ߌH *EHHHH)ЋWAEHHHH)HWHt/H4*EHHHH)HWHCEHHHH)ЋWEHEEHHHH)HWHH)H}-CCtH)f@E._H}о|8DNju҆fɆa6H8HC6HHŠXH@HEEHEH@0H@H0H}Ya5HHŠXHPEHHHH0H}$,5HHŠXH@HEHEH@0H@H05HHŠXHPEHHHH8NJHEH@0H@H5Z58D I5HHŠXHH08DCH$(HEH@0fH(HEH@0H@H8HCE1HEH@8HEH}%4HHŠXHPEHHHHH 7EzHEH@8HEHEH}bH|'H}CHCH}@^t E23H}v|t E3H}t E4E1EH8[UHH 5t5E5E5=u1}t(}tE55En5}us}#tj}8ta}6tX}tO}tF}t=}}t7}t.}t%}tE55ED}uMH>vHt HΏ44}t 4=u4E4E4108DYu&L0D0>0HH ƀX8DYɇuS/4'4!4u/K5V/HH HXHǾY28DYcu@3ȉ33/HH HXHǾY褈}.uM$<'uBH$P8DY;/HH HXHǾYNE-E}3UEH8Dfn$::i$3fY$;%fK$--F$f6$++1$f!$<<$f $>>$f#<=#f#<f#>=#f#>f#==#yf#=nf#!=#\f#??}#Jfp#??fe#!!`#-fS#!"fH#&&C#f6#||1#-HH HXHǾYEEEÐUHH H}HuH}uH}u E5H}tH}u EHEH0HEH8EEUHH}E1HEHEHEHHE EtHEHEuEUHH@H}H}EEHH XHE]HEH8HuEu=H5 rHEHxpt%H5HEHxht HEHEHEH@xHEH}uHqHtlEHH XHERHEH8Huƒu2HEH@pHu%H5HEHxhit H}H}4HEH@xHEH}u=HEHEHHEȸH}HHHȍx<HHEHHEH8HuHE@|HEPHpHEHPpHgHEHPh+EHH XHEHPxEHcHEH XO<HEHUHEHHpHuHEHbpH[pH|pHspHUHPHEH`pHEHEHEUHH}HuHEH@HEH}HEE܁}.td}1tHEH@@ fHE@ƒHEPHEH@@ fHE@ƒHEPnHE@t HE@tHE@ƒHEPHE@xHE@=~*HE@ƒHEPHE@ƒ HEPUHHH}H oHUx<HoUHHpH}uEHnHE HEH@0HEHEHPHEH@pH9HEH@0HEEE;EHEH@0E}.u9HEH@0@E}t }tHE}x }~jHEa}1u2HEH@0H@@ E}tHE@ H} HEHHEH}HHHȉE EHDHEEHD< tHuH}tHH}HEHHEH@pH0HU:DTHEHHu:D:UHH0H}HuUHEHEE~HEH@0Ht_HEH@0H@HtNHEH@0H@@ f@u8H}tHEH@HEHEHEH@0HxM܋UHu8HEH@8HEHEH}wUHHpH}uHU؋(EEnHEH@@ ftSHEH@@u:HE@j(HEH@H#HEH@H0:D6E=(HEHPEfB %t:HEHPHEH@@B}@uHEHxUF7}ucHEH@@xHEH@@~HEH@H0:Dv6HEH@@uDHEH@@:DA5$HEH@@~HEH@H0 ;D5H}7HEH@HHEHEK;DHEHuH}HM(u>HEHPHEH@@B}HEH@H0X;D5HEH@HHEHE{;DHEHuH}HM(uHEHPHEH@@B[HEH@HHEHE;DHEHuH}HM(uHEHPHEH@@@B}@u!HEHP7i/i)iBfHEH@@HEH@H@PHtFHEH@H@Pf@u1HEH@H8!HE@%HEH@H0;DT4HEH@@:HE@r%HEH@H HEH@H0;D 3EE%HEH@8HEHEH}UHHH}uHE@0 UHEP0}t }EHUHHD8HtfHgH0EHUHHD8H8 zt@HgHEHUHHD8H0Hʿ;DJzHEH0;D72EH gHUHHL8UHH H}uHEHEwHEH@0HEVHEH@@ f=uHEH@HxXu"HEH@@ f@uHEHxuHEH@8HEH}uHEH@8HEH}uUHH0H}؉uf#tHfHu+HE؋@#HEH@H2HEHE@P2HEHUEԉBHEHP0HEHP0H\fHEHPHmfHEHP8HEHZfHEH@0HEHEH@@ f=uHEH@HxXugHEH@@ f@uHEHxuC"EHE@"HEH@H%HEH@H02D,oHEH@HHEHEPEHHW9u|HEHH0DnHE@tHEp>DnHE}~'>DnHEH@HEH}SHE}}u HE*>DHEG>DH}nUHHH[HEHEHH@hHHEH@ lltkl ltYltPltGRl@tlt-l t$/A!HEH8>HEH@u>HEHH@pHu. hfu"tHEHHEH@BgfHH0H>DlHEH@ HpHEHH@pHtHEHH@pH0\>Dlh>DlHEHHHpp>DtlHEH@HEH}=ÐUHHH}HEH@HEHEHHEHEȘ>DHEHuH}HM(u>D#E"HEHHEHE>DHEHuH}HM(u-HdHtHd@ EEuuHEHHEHE>DHEHuH}HM(uAH7dHt#H+dH@HtHdH@@ EEuu:HEHHEHE>DHDžxHuH}Hx(u6HcHu EHcP c)ƉuHEHHpHDžh>DHDž`HpHhH`(uWcUc)Ɖu]HEH@pHtHE@ ftH}ijE5HE@ fuHEH8HEHUHEHBH}E܋EUHHH}uHEH@H@pHt"HEH@@ ftuH}E;HEH@@ fuHEH@H8kHHEHPuH}dEEUHHH}HuH}HEf=1HEH0HEH@H8hHEH@H@pHu HEH@pHtAHEH@H@pHtsHEH@pHtfHEH@pH0HEH@H@pH8&huCHE@HEH@H>HEH0>Dc HEf.HE@"HEHp0H}HEHp8H}UHSH(H}u܋UEH HEuH}Ku EHE@ fuHEH0>DHEf@ HEH@ HHE@HH HHEHP EuHE@ f@t7HEHpPH}/HEHP EHHHHEHxPn* u HEHP EHHHH}KHEHE@;E{E<HEH EEH([UHH H}HEH@HEHEHx0EHE@ fuKH_Ht?H_H0H}WE}tHEH0?DhfEEqHE@ f=uHuH}?ELuH}t5HEHHEHP EHHH0HE@ EEEUHH@}̉uȉUEfEE}t } t}@uEȉEu}u EfEf}t }u EEL}uEE8}u2}u1?DYUĸ )ЉE!ЉEEUE;Et6EEME̋UH}AI?DeHuпX?DEEEUHSH(H}uHEH@@ f=uHEHpMH}U?rHEHx0EHEHxuXtNHEH@HP EHHHHEH@PHEH@@ uZHEHPl]BH([UHH0H}uHUEhEH{QHE-HEH@H8Huqcu EHEH@8HEH}ũ}EvhHM{?DbHQHEHEH@H8Hucf^HEHP0H}A?D?D7f]HEPH}辚?D}bf]HEHP0H}A?D?Df]HUH}辪?D3bHEH@8HEH}6HM?DaEcgUHSH8H)XHu7.TH¾1=HWHOHEHEHHEHE@ fHEH@pHHEH@hHHE@ f=#vHE@ fdHE@ fRHE@ f@HE@ f=uHEH8bHE@ f=uHEH0H}jJEHE@ f@uuH}?ct5u%HEPHZ9}8Z9kHVHEHBHVHP0EBH=qVEHEH0?D`HE@~u쿿?D`?D`HE@ f=H=u)b ;aHE@nTuCuHEH?DZ`HEH?DZ`HE@ f=}s`HE@uPEHEP 6EgfffE)É]ԋEЉ)‰UԋEHE@ЋXȉEu}ZWAuZ?D_HEH0Z?D^5)XU?D^@D_HEH0?D^HE@~u쿿?D^Z>@D^HEHE@;EHEH@HEH}#H8[UHSH8H}H}HEH@0HEHSHu7.H¾1HSHEHEHE@ f=uHEH0HUH}F\E@HE@ f@uHUЋuH}_t5u%HEPV9}0V9HRHEHBHRHP0EBHEHHEЋP HEHH0E@D]HE@~u?D\?D\HE@ f=H=eR`H=?l^ ~]HHE@Puku1HEH0HEЋH HEHHIQ@DZ\/HEH0HEЋH HEHHI`@DZ\HE@ f=H=Qlj\HE@uPS HEP D EgfffE)É]̋EЉ)‰ŰE HE@ЋTȉEu}Ze=uZ?D%[HEHHEЋP HEHH0AZm@DZ5%TU?DZ@D[HEHHEЋP HEHH0E@DZHE@~u?DZZ>@DxZHEHE@;EHEH@xHEH}fH8[UHH}Pu(Rt YZZtGu=u3u)OuS~5O@DYkt8mu t$}tu@DY @D7Z}YUHH0HHH59 HXE\HHHHHHHHHf EHH4ŀYHYHEN9E~HHHHI@DOYHYtFHXt HXH @DWt HXUHH HHHADXHEHADXHEH}tH}u9HHADWHuHXHUH#WHuH}VHEUH@AD1XhAD'XADXADXAD XBDW8BDWpBDWBDWBDWBDWCDW2CDWHCDVpCDWCDWCDWCD}W DDsWPDDiWzDDVDDPWDDFWDD7JDHEHEf@ 9JDHEHEf@ UH}MD> HMMDG> HMMD*>r HMMD >U HMMD=8 HMMD= HM MD=HMMD=HMMD|=H}0WMD=Hu@l>HMMD/=wH};WMDB=ZH}0WND%==H}0WND= H}PW ND<H};WND<H};WND<H};W&ND<H};W/NDw<H};W8NDZEL>E?E2L>E?EL>E?EL>EL>EHHH!M'Ht?E?E?EH?'HtE?E?Er?E?EE能MHHUHPdD&#E܅U܋19EHHHHHHHtsEHHHHHHHHHHHHPHHHHHHHH9wOEHHHHHHHHHHHHȍxHEHHHHHH8H$E, xЙxAA)ЍЉEUM||||||DH `D#H #`D#H `D#H *aD# =xЙx)ЍЉH=P+aDY#H=:HVdD<#H aD"HĈ[UHH0E*k2=k2*x^3+ZZH=bD"*E E^EE,ȉEQEHHHHAHHHt,EHHHH"HH}ܺHE}y_]9|SȉGEEHHHHHfu#EHHHHHHHEHm9| H gdD;!EHHHHdHfEEEHHHH9HEeEљETE‰EUHE)UHE)EHHHHHEHHHHHHHHHHf9ukE;EucEHHHHHDMA EHHHHdHMAWWuDosEHHHH-HHHHH HDȋEHHHHHMuAWW|uD9E-EHHHHHHHHHH‹EfEHHHHqHfEHHHHOH؉EEEpEљE_E‰EUHE)UHE)EHHHHHDȋEHHHHHHHHHHMuAWW@tDEHHHHHHHtmEHHHHfHHEHHHH=HUܾEHHHH#HH8ZE܉EHE@9EH dDUHH} 9|0H=dDdDHHHHjH‹Ef{9E~ EmUHH0}HuHEHHEظH}HHHȍxHEHuH}u"EHHHHHHEH}9}9|+H=dDdDJHHHHZH‹HHHHAH‹HHHH8HHEHh_UHHPH}HuHEHEHEeDHEHuH}HM(u EEuԉuu*H4HtH(@ EE}܉}  E؋M؉MluEHHHu}U_u5eDE eDHEE;E~HuH}H}\ÐUHH H}EHEHEH}1HEHEH@8HEH}u܋EUHH0H}HEH@PHu E;= ~5HEH@P@?HEH@PH@HHEH0eDtc=~%eDHEH@Pf@tHEHxP{E8HE HEfHEH@PPHEPHEH@PHx8HEP jHEPHE@EЃ}}EEЉEHE@ EHH%HHEHP HE@ HHHHEHPEHHHHEHP(HEH@PH@8HEEqHEH@Ht2HEf=u%HEHxHHEHxuE&HEHPEHHHHEHEHEH@8HEH}uHHEHP0HEHHEHcHEHՠYHEEԋEUHH H}HEHx0yȉE} E}x?EHHŠYHt-EHHŠYPEHHŠY@9EEEUHH H}HEHx0qyȉE} -}x'EHHŠYHtEHHŠY@EEEUHH H}HEHx0yȉE} 5}x/EHHŠYHtEHHŠY@EEEUHH H}HEHx0xȉE}u@eDEE} x}xrEHHŠYHt`EHHŠY`BEHHŠY@~EHH<ŠYHuGE"EHH<ŠYHu EEEUHH`H}؉uHEHx0wȉE}4HEH@HHEH@HHEHEheDHEHuH}HM(Tt E$HEH@8HEWHEH@0f=.t+HEH@0f= tEHEHx0u2neDHEH@8HEH}uEEHEH@HtHEH@HHEHEȃeDHuȿeDEE\} L}xFEHHŠYHt4EHHŠYtBEHH<ŠYUHuEEEUHH0H}HuEEHEH@8HEHEHx0uHEHPEHHH8EHEHP HE؋@ EEHHHEE;EtE;E1E;E|?HEH@8HEHEH}tHE؋@ ;EgHEHE؋@;E9HE؋@ȉEEHEHH UHE؋@ EHHHHEHP HE؋@ EEHHH}u2HEHP(EHHHHHHEHP(EHHHHEHE؋@ ;EkHEE;EMHE؋@ EUHHHtw;ti@t @uWH},H}HEHMHHIeDgHeDUHSH8H}HuHEЋPHEЋ@ ‰EEHEЋ@~ HEЋPHEЋ@9|ME Pt EHEȋ@tHuH} EHEHH(HEЋP EәHHH= HEH@8HEHEHx0 sEHEHP EEHHHHEHPEHHH8u輫&t3 `9|#HEЋUuH}IAйeDeDHEHx07HEHPEHHH8eDHEH@8HEHEH}tHEЋ@ ;E& 9||EE+HEЋUH}IAйeDeDHEHEЋ@ ;EHEЋ@ ;E~5 eDH}t5 fDhHEЋ@PHEЉPEEH8[UHSHXH}HuȉUEHEЋ@u EHEH@8HEEHEH@0f=.u1HEHP HEЋ@ EEHHHHEH@0@9uHHEH@0f= upHEHP HEЋ@ EEHHHHEH@0Hx0p9t9HEȋ@t"HEȋ@tHEHEЋ@9E1EHEH@8HEHEH}tHEЋ@ ;EZMt E|t?HEЋ@ ;E~58fDH}t5hfDtHEH6HEH3HEHP(EHHHEHEH@8HEEót }dztcuu]9|e}tHEȋ@ HEfDHEfDHEHP HEЋ@ EEHHH0HEЋUH}IAйfDHU }?H}HEH@0f=.tpHEH@0f= t_HEHP HEЋ@ EEHHH0HEHx0蒣HEHx0&HEHPEHHH8fDHEȋ@EEHEHP HEЋ@ EEHHH4HEHH UHEЋ@ EHHH}u2HEHP(EHHH HEHP(EHHHHHEHEЋ@;EhHEH@8HEHEH}tHEЋ@ ;Et }t|NurH9|bEEN}tHEȋ@ HEfDHEfDHEЋUH}IAйfDHU HEHEЋ@ ;Eu.}t(uU9|5}=}tHEȋ@HEЋ@PHEЉPEEHX[UHSHXH}HuHHEEHEH@8HEHEHP EHHHHEHx0lHEHPEHHH8ԤHEHx0HEHPEHHH8fD1HEH@8HEHEH}tHEЋ@ ;E`HE@mJuHE@EHtHE@EHEHP(A%9HEH@8HEHHEHEHEAHEHx0jHEЋUH}IAйeDfDHEH@8HEHEH}t HEЋ@ ;EEE+HEЋUH}IAйeDfDkHEHEЋ@ ;EHEЋ@ ;E~5GfD H}t5)fDHEHHbHt H^HugDH;H@8HEEHEH@0f=1uEHEH@0H@HHEHE'gDHEHuH}HM(tHEHx0IiEEt)HH=EuIAfDfDHEH@8HEHEH}tHEЋ@ ;E/8tEEE1H?H=0EIAfDfDHEHEЋ@ ;EËˬu5=HHEEHX[UHH HHH@@ f@uHH@H0ZHH@@ f=1u%HH@H8H0ZHH@@ f=HH@HEHEH@pHt H}!OHEH}HEH0eD?HHHx0HHuHZ)gDZHH@0H@0Ht=HH@0Hx0fH¾+gDSHZUHH`H}HuU܉MLEЃ}ulH}RHEHEHE0gDHEHuH}HM(t HE4gDHE6gDHuZ&8gDZHE<[u:gDZHEHPEHHH=}mHEЋ@ ;Eup}t  E4HHtHP )ƉuE}̉}HE<[ugDEuBgDHE ));Eǿ |}HEGgDHHt;EKgDqHEHdP )Ɖ;EοPgD?xH}HEHEHE0gDHEHuH}HM(t E?E!U̾ZTgD ,HE<[u [HEHPEHHH=H=u@HEЋ@ ;EuHE<[u ]9 /UHH }gHEHUEH$HEHPHEHUH}HHE HE;Eu EHEH@HEH}uEEUHHH}uHUHMDELMHEHx0b4tIuHEMUHuH}IHEMUHuH}I٦u/HE<[t$HEHx0#bH}¾YgD"HEHx0aH}¾ogDeHEHEHE0gDHDžxHuH}Hx(uH}6gDH}4gDw HuH}}u1qKHEH@HHEpHM}gD# ,HEHPEHHH=H=~uHE@ ;Euvzt&HEH@H0HEH8ou#HE@ UHEPHEH@@ EHEH@ HEH}uEEUHHP趘HEUKH}mDH}gZHEHUHEHH HEHPHEHUHHHumDHHUHH H}uHEHpHEH8UHEH@HEHEHE}|A}~ }t-HEHH@(H8u=HEH@0H8uv(HE@ ƒHEP HE@ ƒHEP UHHPH}HuЉUHHEgEHEHEHE@ ‹E ЃHEP HEHE}}}t ;}tk} 4}t HEmDHEmDHEHH@HHEHpHMmD[`ۂu }uJHEHH@HHEHpmD}t #nD mDgHEHfHEHH@(HEHEHHpHEHH8Uv-}t'HEHH@HHEHp8nDHEH@0HE)HEHHpHEHH8UHEH@HEH}uHEH;EtHEH@HHEHEHEeUHHHHEYHEH@Ht@HEHH<:t/HEH@HHEH@P HEHH0nnDHEH@ HEH}uUHH0H}uU@返HEHEHHEHHE@ HEP )HEP AjĀut HEP HEHH0nDHEH@Hu2HEHHtHEHHHEHEؙnDHuؿnDɓHEH@H@ HEH@H8oHHEHPHEHPHEHP HEH@H@Ht"HEH@HPHEH@H@@ @B HOHEHP8HEHPHEHP(HUEB}t H};TEKHEHUHHPH}HuHUȉMLE0HEHUHEHHUHEHBHUHEHBHUHEHB HEfP AEĉHEfP"HHEHP(HEHzHEHEE3HEH@0HEHEHEH@8HEH}uHEH@8HEH}uƋyUUEE9E}UUEYHUHH}HHE.HEHH;EuHEHPBEB$HEH@(HEH}uˋ\EQEUHHHEHEH@HEHEH@HEhHEH@0HEGHEf,tHEHPEBHEHEH@0HPEBHEHEH@8HEH}uHEH@8HEH}uHEH@(HEH}TUHHH}$}f }uZHHHHP )¾nDZHcP )ǾZ_H>HHH1P _)HʿnD|||[|uH}tHunD !HHHHP )HʿnDiHj@~H[pnDA UHH0H}HEH@HEHEH@0HEHE؋@ HE@H HEHEHH0HEH8e)=~oDyHE؋pH}H=HUHuBH=pHdP )‰UHEH@(HEH}>EEUHH@}HuHEH@HEEH HEHEHH0HEH8eHEH@0Ht$HEH@0@~HEH@0H@HdzHEH@HE3HEH@0HEHEHEH@8HEH}uHEH@8HEH}uƋE;Et=Uu̿0oD7VoDWoD&HEH@(HEH}$UHH0}HEH HEGHE@ ;Eu-HEHH8roD[uH}+HEH@(HEH}uoDEfxoD|H`HE`HEHH8roDt}x.Hu述oDHEP uoD HE@ EHEH@8HEH}uEUHH }Uwwt$wu_wu pD' w"9vEnl)w)o4)pDvvmnEvvvvpv gvHHH=HH@8HHHu֋E$v>vu t HE9pDHEVoD)4HUu HMH HDžHHEEĉEHEH}9E}tHEEĉE̋ pu}touHEsuHE}pD)H"Hxd}tpDpDHEH0H=rqKpD~HEH@HEH}H}UԋEЉ)ыU؋E)9|9EȉE̋uȿ}pD|HuHxpD 7HEuȿ}pDCH<Hx~pDHH@8HH HHHUЋE)Ѓ'uEEbntuοpD9EЋUĉ)ȃpD57nuοpDg nu.EЋUĉ)ȃuu̿qD:ẺEH=oHqD}EHHHH tHEHEHP EHHHHEPHE@ uO"HEPH([UHH}HŭH}t5XsD衴^sD蒴˭ftH@ udsDi%H`P )ƿgsDBH;HH0ksD&UHHH}YuYtFHEHx6 輴^Yt1QLYt H}YUUHH0H}uEH}tHEHHt HEH@EftQHgHtEH[@ u7g;Et,H}t%XtursD&Ef}>H}HE@ EHEHHtHEHH@HHEHE؃sDHEHHtHEH@EEMHU؋u࿅sD蝲?Xu7HE@ uH}HtsD\UHH H}HE@\HEH@HWHEH@@ ftEHEH@@ f=t3HEH@@ sDHEH@H0sDjHE@ xHEH@H0sDjHEH@0HpHEHxnE}uHEH@H0tDjEUHH@H}EHEȋ@[HEH@HWHEH@0H@0HuHEH@0H@H8E/HEH@0Hx06EGHE7E܃}y EN)ȉEHͩHESHEE;E5HEH@0H@H0HEHH8t>U܋Eԉ)щHEH@0H@H0 tD^HEHH0JtDHhHEH@H8htDůu,HEH@HtHEH@@ E~ErHHEHEHHEH@0HEHEHP8HEHP0HEH@HEHEHxyHHEHPH}NCEHUHEHBHUHEHB0HEHE؉EHEH@8HEH}U܋Eԉ)щHEH@0H@H0ktD4HEH@H0tDgtDů75)ȉEHHEPHEH@0H@H0HEHH8cuHEHHuؿtD賮HEH@8HEHEH}uEEÐUH}EHKbUHSH =bEyEAHEHHHH?HH)H]HiEHH)HUHiuAH aEyEAHEHHHH?HH)HHi HH)HHaHaHHaHHaHa[UHH H}H}u HE5HEHxHEH}t HEHEHEHH8 HEHEUHHHHHHuHDžX HHf=ufJtHDžX HHHH8HEHEH0HH8HEHXB HHf=u"HH@0HH8-HX HH@0H_HEHEEEQ{u|uruhH@ uP=Q9|@tD tD般)Ѓ~ tDkHH@0HEEwHEQWƯIإ;Υ-H@ xQ9HEHHHPu'PuHEHH8HEHHHf=u?uHEHHH@HH` HDž`H`HEE؉EduؿtD自HEHH8utDeHEHEHHH0H=Q+ HEH@HEH}~}uH}tutDuON#O9:;,H@  ߭9OtuؿtD{uؿuDgH=P+HuD赩@HHHH tHE1HEHXHHf=tHHf=uxHHH@(HHHEHHH@(HH@HEHHPHHEHPHH};HEH}uHDžX HEHXHHf=uYHHH@(HHHEHHH@(HH@HEHHPHHEHPHH}HXHHf.u=uHH@HHX\HHxH`HX@H@  HH@8HIEuDaHH0H=J$MuD7HH@8HE[HEHHHEHEHf=tHEHf=uHEHH@(HHHEHEH0H=XJi$_uD询HEH@HEH}u nHtWHHx8HEH}Gt buDȉHEHXHH@8HE^HEHH8HEH}t8vGt buD芢8ȉ0HEHXHHEH@HEH}uȉHH.}bctYc|^rwP@ t4 t( t9tHH+t?H|tHH@HH HDžHHX@HH8tHH@HH HDžHHXHXUHH0H}H}t HEHHEHEHEHEH}t&HEfruHE@ H} u EHEHH}EEUHH H}'t EHEH@8- E}$w,HcMHHHH!Hu EHEHx8U|EHEHx0E|NjupuDHEHx8kHEHx0y5EEUHH H(HE,HEHxZHt EHEH@8HEH}uEEUHSH8H}H}}HE@HHEH@HoDHE!EЁ})EHvDHE@E/HEHx0EHEHx0iډUHEHx0P҉UHEHx07HEHx8(Ẻؙ}̉E̋ỦUHEHx0HEHx8ЉUHEHx0HEHx8)‰U\HEHx0HEHx8É]6HEHx0HEHx8~Ẻؙ}̉U HEHx0`HEHx8Q9EHEHx04HEHx8%9EHEHx0HEHx8!‰UHEHx0HEHx81‰UaHEHx0HEHx8 ‰U9HEHx0HEHx89E HEHx0dHEHx8U9EHEHx08HEHx8)9EHEHx0 HEHx89EHEHx0uHEHx8t EEE؉ELHEHx0tHEHx8t EEU܉UHEHx0fHEHx8WEHEHx0HH=9F"H=#aH _FˌHHEENHH9Et HEFHE蜊DH=MHUF諌HEH@(HEHEH}uH=ۑUFyH ‘F.H _FH=wH 8  FH  FыHHE5ʅHIHE@ HEHH8%HEH@(HEH}uċH 5" F%H=]X 1tBH=t^X H=YH=MbX H=2bX H#DlH=bH & F蟊H Џ< F脊H D Fi H=H F}0tUHHE0H ^ FEH=rUp FHE 9E|H=HcXd PH=$PoXE H=`dX* ftQH ( FSH ܎ F8H  Fc'HHE$HE@ H}(HEH@(HEH}uՋF/_Hft6H D( F蠈H ) F腈UH=u`oX.u!hPH=ҍPoXGH=PoXH= pXUHH H}H݁HE*HEHHHE@ H}HEH@(HEH}uUHH .E}tH}t}V.H.P5?.H=mXH=֌ mX.H=mX,-pH=mX:H=} mXPH=YmXzHHE#HE@ HEH8AHEH@(HEH}u֋,E}tH}t}5-'-P5-H=ˋnX-H=nX&,pH=nXH y !F,H=X!FH=:nX[H=$ nX@+uπu P5H=nXP5H=snX7P.pH=PnXH 3!FH=l`WH=QWmH=6`WR~H=@oX6H C!FkH G!FPH ɉM!F5D~EH a!Ft!FH qE݃?}PH=M0oXnH 70!F裃H !F舃UHH=tXUHHHXTW.EH)HE)9Tu))9Ttt)uH|HE EEHHxXHcЋEHHHxXHEHH8葂HXH0HEH@H8zHEH@p EHHHxXH=TA!F}EHHxX}}EHHxXn}e}HEH@@ t(EHHHxXH`!FBL}HEH@@ EHHHxXH`"FHEH@H@,HEH@HH@H'H'HtH'HHH HDžH("F5:,H`HH0"F݁HEEHHxXHEH@ HEH}HZzHE_HE@tHHXH0HEHH@pH8u'HEH@H H=TZ"F詀HEH@ HEH}uEm+HEH&UHH@H}uUHMEqEE[EHHHELUMu}LUED$E$AAȉLL׸Hu HEE;E|HEEHHHEHHvUHH H}r"FZH}t[HEH@pHtHEH@pH@PHE HEH@PHEHEHEH}t!HEH@HHEp"FUHHHHH@H@oHH@ ft'HH@ ftHH@ f t7HH@EHxHE5HEHHHtHEHH0H@~tHEH@(HEH}uH}HEH@HErHEH@0HEQHEH@Ht2HHH0HEH@H8m~uuHHDeHEH@8HEHEH}uHEH@8HEH}u4HH@#HH@ HPxHPHH8H8HHHȉE EHƄPHEEHP< tHHsHHH@pHtH@"F}"F}HHHHHHHP"F}"HH@ f HH@"HH@ HPQHPHH0H0HHHȉE EHƄPHEEHP< tHHLHHH@pHtH@"F|"F|HHHHHHHP"F`|UHHHHLEHiHEHEHHEHEH@pHHEH@hHHEH@pH0HZ{urHH}HE@uGH}"F(|HMHUHH$ #FA #FADHEHEH@HEH}/QE;EHhHEHEHHEHEH@pHHEH@hHHE@ ЋEH`xX9}u HE@t}HE@zHEH@pH0Hz[|||tHE@ f@uHHH}#FzH #FzH); H HMHuLHH$IIH񺜊DLEMH}"F2zHMHUHH$ #FA #FADHEH,#Fxu+HEHH4#F,yHEH@HEH}HE}HE}EUHH HHYqHu;HP#FwH.p#FwH#FwH#FwH #FhwH+#FMwH$FgwH :$FwHE$FwHI$FvH[$FvH$pHEPHEHv$FvHEH$FwHH$FvH$FCvEfHEHPEHHH=u"MHH$F,v MHH$F vHEHE@ ;EH$%FuH6%FuH;%FwuHEH@0HEH}HE$FEuHC%F*uUHH@HHHH@ ,5@t tkHHHU%FtHHHHr%FuHHHD\H@ H H@uFHHHH0HHHIIHx%Fs9H %FsHPH%FsH%F`sHHHH0HHHIIH%FOsH &FsHE$FrgH@HHH&FrHHHH0HHHIIH@&FrHHHHU&FyrEHHMHp&FErHHHHH}LLED$H$IALҾ&FL߸qHHEHHA&FqHEH@;EEUHH H}HEHH8,#FqHEHH8&FqHEHH8&FqHL_HEHEHHEHEH@pHtqHE@ ftdHEHH0HEH@pH8,quFHEH@hHu9HE@u'HE@ f=uHEH8$u EHEH@HEH}`EEUHH`H}HuHEHH8,#FpHEHH8&FpHEHH8&FcpH,^HEHEHHEHEH@pHHE@ fHEHH0HEH@pH8pulHEH@hHu_HE@uMHE@ f=uHEH8u/HE@ H}&FpHUHuH} HEH@HEH}2UHH@H}HMȺ$&FnHMȺ'FnH]HEsHEHHEHEH@pHuOHEH@hHuBHE@u0HE@ f=uHEH8uHUH}Ⱦ9'FCHEH@HEH}uHMȺ:E@nHMȺ.@'F(nHMȺo'FnHgHEHE@ H}Ⱦ~'FnHEHHH}Ⱦ'FmH}At,HEHHH}Ⱦ'FmHuH}/HMȺ 'FtmHMȺ 'F\mHEH@(HEH}EHMȺ'F-mHMȺ'FmHMȺ'FlHN[HEE7HEH@0H@HUH}Ⱦ(FlHEH@8HEHEH}t}uH}Ⱦ((FlHMȺE$FzlHMȺ:EblUHHPH}؉uEEHoZHEdHEHHEHEH@pH<HEH@hH+HE@ ЋEH`xX9 EH`xX=uHEH8XEԉEă}}t }tfHE@ f@uHE@H=pHEHMuH$M(FAE(FIDcH}HEHE@t HEȜDHE9'FH=zpHMuH$ #FA #FADHU>HEH@HEH}HE}qEUHH EHXHEHEHHEHE@HE@ ЋEH`xX9unHEH@pHu HEH@hHtHEH0Q(F#HE@ f@uHEH0n(F#H 1o(FiH}HEH@HEH}?HE}H n/(FiUHHPH}uHUHMLELMEE}t}t/}t)HE@H}bHE@ f=ucHO^@ EЃ}}}t7}}tX}@}t}} ^PHH=g&)FbH]@u.]PHH=g&)FtbkH sgo*F'bNH Vgv*F b1H 9g}*FaH,]H0*FH g*FaH([UHH[EH=fU*FaH=fU*FaH=fU*FaH=fU*FpaH=qfU+FWaH=fU.+F>atuH=|fUC+FagH=afMUX+F`H=EfUv+F`H=,fU+F`H=fU+F`H e 'Ff`UHHPH}HEH@HHEHEHHEHEH@HEHE@ E9EuduYHEHH=eU+F `H=ieUC+F`H Pe 'F_}9EtuHE@ H}غ'@ EH=dMU+F_(9EuH=dU+Fn_9EuH=ddU,FJ_HEHH=dU+F*_H=sdMUX+F_H=WdMU,F^H=;dMU6,F^'ZfHEHH=dUI,F^HEH@HtOH c_,FN^HEHpH=c_H cd,F^H c j,F]HEH@HtH {c 'F]H Pcu,F]HEHEEUHEH@0HE-HEf,uHEH@0HEHEHEHEHEHEH@@t1HEЋ@_HEH@HHEH@H0,FH=bU,FB]HEH@@ f=uTHEHPH=qbHuй>tJHEЋ@HEH@H[HEH@H0,FH5%bHEH@H8]H=bU,F\HEH@8HEHEH}HEH@8HEH}H a,F-\HEHH=aMID|E}~YH zaa!F[HEHH=XaMIt!F5H EHHHEH0EMUH}A?UHu !VHEE;E|HEEHHHEHHuUHH}H5Y U}H YDTA}H Y.FpTH Y .FSTH Y.F8TUHH@EH=Y@fXFOft(_MuUMH=Y(.FT7MH=YP.FSMPH=X`.FSLPH=Xs.FSHLHE"HE@;E~ HE@EHEH@0HEH}uHLHEHEEH=XMU.F>SHEH H=XU.FSHE@} DžH=GXU.FRH (X.FRH=WU.FR}H W.FXRH W .F=REHEHPEHHHt1tj@t\tP t}HE@ t6H V /FQH=VU/FQ`H=VU/FQEH=VU./F~Q*H=}VU>/FcQDL/F HEHE@ ;EHE@} DžH=V]/FQHEH=Uo/FPHEH@0HEH}dH U$x/F~P}H U /F[PH U/F@PH=UfXKfH FU /FOE!H "U /FOHE:9E|H TM(FOH #U/FOE"H=TMU/FOHE9E|H T*F>OH T /F#OH T/FOH T0FNH fT,0FNH KT%@0FNH 0Th0FNH T*0FNH S0FfNH S0FKNEVH=SU0FYNH=SMU0F=NH S 0FMHEV9E|H ZS1FMH ?SE$FMH $S 1FMH S:EuMH R 1FZMH R(1F?MEH=RUH1FMMHE9E|H R*FLH=jRgXH/FHEHEH$FNHE@t HDžD HDžT1FHEH=QH`1FLHE@uH Qm1F6LGf(HEH=Q1F6LH=QH1FLH bQ1FKHEH1FMErH=QEHUA2FKH=PEHUA(2FKHEH=P>2FiKHEHE@ ;EH P &F KHEH={PN2FKHEH$F9E|H )H*FBÐUHH H}H<HE1HEHH8Hu CuHE@ E(HEH@(HEH}uHuwFOEEUHHH}H}t*HEHx8HEPH=GF`BUHH=KGF4BH=%GFBH _GFA)uH 9G$FAH G0FAH G 1FeAH F?FJAH FZF/AH FrFAUHH FF@H |FF@H aF'F@H FFF@H +F&F@H FFl@H E&(FQ@H EOF6@H E&hF@UHH0wHH<ŠXFAHpEHiEHFHH<ŸXFfAHDHDHHH<еXF5AHEHEHtZHHH CF>H CF}>H CFb>H CMFG>H xCF,>H ]CF>H BCMF=H 'CMF=H CF=H BF=H BMF=H B Fo=H B-FT=H BMF9=H jBHF=H OBXF=H 4BMF<Nu^HVHuRHE HEHEHhFHEHHHUH}AUctF=F=H AF75ft 25H=>F9KtH >Ft94ft 4H=>.Fx9H y>EF-9ftH R>WF9y4ftH +>jF8^4ft R4H==F844ft (4H==F83ft 3H==F83ft 3H=v=F_83fu$3fu3fu z3ftQH 0=F7H =F7H <MF7%3ft 3H=<F7tH <F]7H <#0FB72fuH g<TF7!1H=F<fF/7H 0<xF6H <MF6HBHH=2sH ;%F6RH=;fF66H=;F6H ;MF96HHtwH=IH=F;F/6H=*;F6HdH(H -wF#(H -F(H -F'H f-F'H K-F'H 0-MF'H -F'H ,Ff'H , FK'H ,)F0'H ,EF'H ,aF&H s,}F&H X,F&H =,F&H ",F&H , Fs&H +FX&H +MF=&H + F"&aH +F&›H v++F%H [+/F%H @+<8F%H %+@xF%H +Fv%H *F[%H *F@%H *F%%H *F %H *'F$H h*8F$:tH=B*yX^tH=*|H=*yUHH}H}t;H[HE'HEHH;EuHE@ EHEH@(HEH}uEEUHH H}HuUMDE}~H ) NF#H=q)HUZF$HE@uCHEH@pHtH=8)U^F#H )nF#H5)HEH8$}~H=(UsF#H5()f$UHH}u}t\ft(H5(EHcHHHHXHx .$|H5u(EHcHHHH XHx $TSft%H5A(EHcHHHHX##H5(EHcHHHH X#UHH H}HuHE@EHE@EH='UxFq"E?H 'F"}H 'F!E}~H Y' NF!}tHEHH=*'HU辝F!}~H= 'UsF!H5&)"HEE;EoH &F:!}H &F!H &F HE}H e&F UHH H}uUH=6&UxF EHH &F} },H %FU ftNE7HED@EHcHHHHXHp MUH}HEHE@;ELE7HED@EHcHHHH XHp MUH}HEHE@;EH (%F}H %FsH $FVHE}H $F+UHHEH H$FH -$FH $FH #FH #FH #(FuH #=FZH #OF?H p#^F$H #qF H #vFH g# FH L#Ft HDžXF HDžXFH=#HXFH "F^H "FCH " )F(H "7F H "0HFH k"MFH P"yFH 5"FH HEHEHHEHEH@hHHEHxpEHE@ f@u+HE@;EHE@EUuH}_sHE@ f=ueH`HE@u9HEH@pHtUH`^FLH`now.@HuH`HEH@HEH}H !+FH !FlH FQH +F6H  FH sPFUHHH}HE@ { HE@"Xf 9&C H=FHEHH0HEH@H H=IFH=0FuH=pJFYHEH@H@HtHEH@H@@ EEH=(MhFH= FhO}9t,u!4H=0F,HEH@HffHEHH0HEH@HH=~IFd9uH=OF8̿9uH=#F HEH@H@H _H=hFHEHHH=(FHEHHH=FHEHHH=F{H=F_HEH@PH=0F>Ҿ9u6H /PFH \mFHEHx?-Cu9u6H FH Fk5HEH@xDUH}}~YEEHLY;Et?HE4U9E|ދ )U)HcЋELYAUUHH H}H}t}HEHHEiHEH8=Ta=TVHEH@0HEHEH8HEH@HEH}uHEH@H;EtHEH@HHEH}uUHHH}WTYTSTH};4T~1T +TUHHH}H}BHEE}c}cp}+2}*}!}!E%}/}/}-}?}^}-4}*}H}~tt}~ }|tw}tZ} tx}>|o}G~L}Jt4[ S)HcHEHհLYAR)HEHx0HEHx0HEHx8RUHH H}HEH@HtFHEH@@ f=u4HEH@8Ht'HEH@8H@0HtHEH@8Hx0E^HEH@HtHEH@@u4HEH@HtHEH@HHEHEFHuFHEH@@EEUHH H}EHEE} } }rtS}stW}@tqv}+t2}+ }*tY},t)}-tEHEHEHEHEHx0HEE E EUHHH}/Q)QH}QHPHPHPHEfcu(HEHx0~!P PGHEHPHPHtH=|PPHrPHtH=fPwPUHH0H}HEH@8HXHEHf.DHEH@8HEEHE@ HEHH8茷@ EHE؋H 5nH=_EUAAЉFDH=5MFHEH@HEHEH}nHEH@8HEEcHE@ HEHH8H H=UFVHEH8&HEH@HEHEH}uH FUHH@H}؉uԉUHEHH@(HHEHEH}%+HEHx DwHEH8dHEHE@ EHEHf=tHEHf=uH}?.t H},HEHPHEH@HHBHH}HEHf=HE@ EҶȶH=uFHEHH@H0HEHHHE؋P H=@IFHEH0H=  H 8FsHEH@Hf=u8HEH@@ HEH@HxHݴH,@ HE؋P HEHHHEH@HH=HuAAȹHH _)@FH D)pFH )MFHEHH8qH=¾Ft.HEHHfsuH F.H FPH=3F$HE؋P H=FH F H  F HEH@HHt%HE@ HEHxH@ EE־u:HEHpHEHH@HPH=AFT HE؋H H=F1 ϳPƳHu HE؋xLkE$AA(FL׸ HE؋P HEH0H=4HEH@ ƒH=?F JJH=GF H}HE؋H H=QFP HEHf=u EEHE؋PH=MȾhF HE؋P HEH0H=[AHE@ x HE@ yHEHHEH@ B HEH@ ƒH= EЋMA|F H5 p u.HEHHHEHH@HH=FH H  F HEHf=u EEHE؋PH=_EAM̾F HE؋P HEH0H=2HEH@ ƒH=?F HEHf=uyH=MЋUԾFu H5 T u.HEHHHEHH@HH=F, UЋuH}{ HGH=eF H5O #u.HEHHHEHH@HH=F G5GH}UHHH}HuH}uH}uH}tH}u EH}u EHEHEf9uxHEPHE@f9ucHEPHE@9uQHEP HE@ 9u?HEHPHEH@H9u*HEHP HEH@ H9uHEHP(HEH@(H9t EHHEHp0HEHx0 t"HEHp8HEHx8t EEEEEUHH}HuHEHEHEHEHHEHPHEH@H9uHEPHE@9t EJHEH@HEHEH@HEH}tH}uH}uH}u EEE܉E؋EUHH H}HEHf=u4HEH8"HEHE@ H}HE HEH@HHEHEUHH0H}uHEHE}t_JH}vHEHEHEԁ}}}}.t }t HEHEH}t HE@ ;EuHEHEUHH@H}HuHE؋@t HE؋@E HE؋@EHEЋ@t HEЋ@E HEЋ@E}u}u EduH}HEuH}HEH}uH}u E-H}tH}tHEH0HEH8EEEUHH0H}uHEHEԃ}st1}s}ct.}rtA}t/}9t-E+E"EEEEEHHZHEhHEH0HEHxtDHEHp(HEHx t+HEHxHuZtHE@;Eu HEHEHEH@(HEH}uHEHEUHH0H}uUMHEHE؃}st1}s}ct.}rtA}t/}9t-E+E"EEEE0>HEHUE܉BHUEHUEBHUHEHBHEHHEHPHEHP(HEHP EHHZHEHP(EHcHEHZUHH}EHEHEЃ}rt}9thHE`HEH@~HEHEHH@8HE4HEH@0f=.tHEH@0f= tHEHEH@8HEH}uHEH@(HEhHE@Eԃ}tF}tDHEHf=9u&HEHH@8f=.uHEHH@8@tHEHEHEH@HEH}uEUHH0H}HEHEEHE؋@t HE؋@E HE؋@EH}HEHEHf=uHHEH8HEHE@ ;Eu HEHE)HE@ UH}货HE HEH@HHEH}HE@HE@HE@ ;EHEH HEHpHEHH@HH=(AȉFHEH0H=HEpHExHEHHUAAFHǸmH}tHE@ ;EEUHE?t2;?H=F%???UHH0H}HuHEP HEH0H}#HEHf=t:>t0HM8FHM(XFlޱ|flHEH@(HEPHEH@HHEPH}辁FHHE@E܃}}tHEHf=9u*HEHH@8f=.uHEHH@8@HEHfrtzHEH@HhHMFHMFpHM FXH}AF` YCF\<#=HEHHHcHH Y =Hc` YPHcf` Y4t1%PH}F HMF<HHH YH}AFCFB[HMFcHMFKHM F3!<HHH YH}AFCFZ;;HEH@HEH}HMFUHHH}uHEH8u/;H` Yfu;ȉ~;Ed;uDH=UFHEP H=y$Fj$;;f ;Hc` YPHcf` Y:ȉ::y6F觶:H=PF:HHH YH=A]FCFMY~-ȉPH=oFA:H` YfHEHf.t.H OF HEp HEH8~}ft9ȉ9EEUHH0}HuUHEHEHEHf=uHHEH8HEHE@ ;Eu HEHE)HE@ UH}HE HEH@HHEH}t?HE@ ;Et3HE@u HE@uUHu}HuH}BUHH@H}HuH}о HEEH}HHEEuH}HEH}藴HEHEHHHEȸH}HHHȍxdHHEH 8HEHHEH8uFHEH@pHYHuH}HEHE }IHEH+}t)'8=8tzF袳UHHĀH}uEEEHEHE@ EHE@fHE@fHEHf.HEHf=tHEH H=FHH FHEP HEH0H=x^{H l FEHEH GH=8FEEE1HEH H=Fک"995H}>HEH}HE؋@EHE؋EEHEHH@H0HEHHHEP H=XIFHEH0H=8!zHEH@@HEH@D@HEH@DHHE@DHEHHEPH=EЉt$DD$D $AEоFiHEHH@LHEHPHEH ٝH=MAЉFHEH0H=aJyHE@u HE@tH}E H}EEEHE@HEHHEpH=EAAF}~8FHEHfrt;9t+9tH ZF&4u  4tjF误}~ E3 ` Y33~3J9H %F[HEP H=FnHEP H=FQH=F;HEP H=0FHEP H=h_FH RtFH 7FH  FHEH  H=FH=HupHE@t HE@E HE@E}HEHEHEHf=uHHEH8HEHE@ ;Eu HEHE)HE@ UH}iHE HEH@HHEH}1HE@ ;E!HE@u0HE@u%HEP H=MFH  FCHEH0H=uHEH HEPH=EAF1HEH H=uF00HuH}HE@ EH=3HuHE@fxHE@PHEfP`HEH8UH=¾Ft+HEHfsuH F0H=F3)0/}tUHu} uH}H FHE@u HE@tc/uFH=UоFHEP H= FG/?/$H5v;\H5c;IH RF}}~#}tEHE؋x UHE؋x TEHE؋H H=FJHE@ HE؋pH=EUAAЉsFXHEHH@0f=.u+HEHH@0@uEHE؋x QTauH}E}HE@ t EHEH8 E̋ẺEHE؋P HEH0H=oH=U?FO}tH=MЋUԾF-.HEH8 + +H=lFHE؋@t HE؋@;EuHE؋@tWHE؋@;EtKHE؋HHE؋@H=UAȉFH=M쾠FH5 c}~>u4HEHpHEHH@HH=UAF/H}UHH0H}HuHEH@8HEHEH@8HE+HEHHEHH9u&HEH@HEHEH@HEH}tH}uH}u H} HEHf=HEHf.HEH@0H@HHEHHtHEH@EEHEHHtHEHH@HHEHEشFUHuؿFFXFNFDF:F0+F&FF5F@FZFUHH@H}؉uԉUHEHHEHE@ HE@ ƒHEP HEH@t H}QHEHf=uHEH@0H8UЋuw=HEH@0HHEH ^H=OkFHE@ HEPH="hFHEP HEH0H=kHE@ yHE@ ƒHEP HE@ ƒH=EЋMA|FGH5 &tu.HEHHHEHH@HH=mFHEH@0HEHEHHx YOHEHH8vHEHEH@8Ht HuH}HE@ EHEHfcHEHH@0f=.HEHH@0@HEH@8Hu}H F EUtRHEHH@HtHEHH@HHEHECFHEHpHUȿFzEHEH@HtH FyH F\HE@ HEPH=EAFYHEP HEH0H=iHE@ yHEHHHEHH@ B HEHH@ ƒH=UEЋMA|FH56  u.HEHHHEHH@HH=F}tH MFCHEH@HEH}oHEH@0HEHEH8UЋuHEH@HEH}uPHEHf=t HEHf=tHEHf=uUЋuH}UЋuH}HEH@H;EtHEH@HHEH}2UHH0H}HEHHE0HEHHHEHf=HEH8HEHEH0HEH8HE@ t:HE@ u(HE@ ƒHEP HE@ ƒHEP HE@ tiHE@ tWHE@ ƒHEP HE@ ƒHEP -HEH@0HEHEH8HEH@HEH}uHEH@H;EtHEH@HHEH}UHHH}HEHHEHE@ ƒHEP HEHf=t HEHf=tHEHf=uHEHH@(H8HEH@0HEHEH8sHEH@HEH}uHEH@H;EtHEH@HHEH}WUHH0H}H}u HEHEV! H!tFHEHE}t }t9oHEH8oHEHEH0HEH8H}dHE@HEH@HHt+HE@ HEHxH7H,HEHEHEHEHEHEUHHH}H}u HEHE9HEH@SHEHH@HɈC H}HEHEUHH0H}HEHHEHE@ xHEH8?t EHEHf=u)HEHPH=? FEfHEH@0HE%HEH8it E?HEH@HEH}uHEH@H;EtHEH@HHEH}@EEUHH H}EHEH@8HE^HEH@0f=.tAHEH@0f= uHEH@0Hx07HEHEHx0 HEHEH@8HEH}uEUHH0H}H}u E(ft EHE!EЁ})EH0FHEH@(H8EEHE@EH}uHEH@@0t EEE؉ExH}uHEH@@0t EEM܉M=H}buHEH@@0t EEEEHEH@@0EHEH@@0EHEH@@0EHEH@@0EHEH@@0EgHEH@H@pHuKHEH@@u2HEH@H8$FtHEH@H8)Fu EEO)щMHEH@H8?EEEHEHx0XEHEHx0CuHEHx82t EEEE]HEH@0HE&HEHx0t E5HEH@8HEH}uEHEHx0EEEUHHH}HusuHUH}FTJTt)BHHŀZHMH}F!HUH}FUHHH}HuUH}uHu0k9HE@HEH@H"HE!||)8|HPGHEPH}Fm8HMF HEHp0UH}6Hu)8HMFHEHp0UH}Hu)8HMFHEHp0UH}Hu)@8Hu(HEHp0UH}Hu/kHEHp8UH}aHu)I7Hu(6HEHp0UH},Hu*HEHp8UH} Hu)7Hu(HEHp0UH}Hu-HEHp8UH}Hu);7Hu(HEHp0UH}~Hu+fHEHp8UH}\Hu)D6Hu(1HEHp0UH}'H}FHEHp8UH}Hu)6Hu(HEHp0UH}Hu&HEHp8UH}Hu)16Hu(~HEHp0UH}tHu^\HEHp8UH}RHu):5Hu('HEHp0UH}Hu|HEHp8UH}Hu)5Hu(HEHp0UH}Hu<HEHp8UH}Hu),5Hu(yHEHp0UH}oHu>WHEHp8UH}MHu)54Hu("HEHp0UH}HMFHEHp8UH}Hu)t4Hu(HEHp0UH}HMFuHEHp8UH}Hu)s4Hu(`HEHp0UH}VHMFHEHp8UH}*Hu)3Hu(HEHp0UH}HMFHEHp8UH}Hu)Q3Hu(HEHp0UH}HMFRHEHp8UH}hHu)P2Hu(=HEHp0UH}3HMFHEHp8UH}Hu)2Hu(HEHp0UH}HMFHEHp8UH}Hu).2Hu({HEHp0UH}qHMF/HEHp8UH}EHu)-1n{uHM FHMF15Fxh1H}Ht,H5}HEH@H8uH5|/FAH|Ht,H5|HEH@H8uH5|HF athFHEH@H82H}¾F%HEH@0HEE>HMFHEHp0UH}HEH@8HEHEH}uHu}B9E~Mu쿠F/HM FHEHp0UH}Hu)/@yuHMFw/HM%FZ/HM >F}HEHp0UH}HM LFQ/frfHMXFHEHP0MH}AkFtF.HEHP0MH}ACFF.HM FHEHP0MH}AFtFX.HEHP0MH}AFF9.HM FZHEHP0MH}AFF.-f\fHMXFHEHP0MH}AkFtF-HEHP0MH}ACFFy-HM FHEHP0MH}AFtFB-HEHP0MH}AFF#-HM FDHEHP0MH}AFF,,fFfHMXFHEHP0MH}AkFtF,HEHP0MH}ACFFc,HM FHEHP0MH}AFtF,,HEHP0MH}AFF ,HM F.HEHP0MH}AFF++uf0uzmftnHMXFHEHP0MH}AFtFt+HEHP0MH}AFFU+HM FvHEHP0MH}AFF++fx uzftnHMXFHEHP0MH}AkFtF*HEHP0MH}AFF*HM FHEHP0MH}AFFf*_*,^t9HM&FnHEHP0MH}ACFF*HEH@8HEEHEH@0f=.tHEH@0f= HM-FHEHP0MH}AFCF)HEHP0MH}AHMF~HEHp0UH}HEH@8HEHEH}up9EfHEHP0H=pMAFF${frjpuFCFF证HMFHE#p9E|Hu)HMFztHEHP0MH}AFF$HEHP0MH}ACF$F#`tHM 0FHMQFm#HMUF#_m9uHM&`FHEHP0MH}ACFFI#HEH@8HEEHEH@0f=.tHEH@0f= HM-F,HEHP0MH}AFCF"UH}F'HEH@0f=.uHEHp0UH}HEH@0Hp0UH}HEH@8HEHEH}1HMMFHM PFkHEHP0H=MAF\F" "zHMFTtHMFHEHP0MH}AFF!tJHE@>HEHP0MH}AFFo!HEHP0MH}AFFP!Hu)HE@tHE@eHEH@8HEEEE7HEH@0f=.u~HMFHEHp0UH}/HMFHEHP0MH}AFF UH}FHEH@0f= uHMFHEH@0Hp0UH}HMFZHEHP0MH}AFF UH}FUHEHEH@8HEHEH}?HM FHEHP0MH}ACFCFHEH@8HEEHEH@0f=.u.HMFHEHp0UH}[HEH@0f= u2HMFDHEH@0Hp0UH}VHMFHEH@8HEHEH}IHMFHE?j9E|Hu)Hu)n&ftnHMXFHEHP0MH}AFzF-HEHP0MH}AFFHM F/eHE@KtOHMFHEHP0MH}AFFHMFHM FHM F»tHM+FfHMZFNHMF1ku!HEHP0MH}A=F@F|HEHP0MH}AFFHMHFϿHEHP0MH}A=FCFwH}YFMHMgF芿H}F'tHMyFZHEHP0MH}A~FFH}CFHEH@8HEE4HEH@0f=.tHEH@0f= tHEHEH@8HEH}uHM FžHE@tHE@HEH@8HEEHEH@0f=.HMFeHMFMHEHp0UH}cHMF!HEHP0MH}AFFUH}FH}CFHEH@0f= HMF謽HMF蔽HEH@0Hp0UH}HMFdHEHP0MH}AFF UH}F_H}CFHEH@8HEHEH}rHMFHEHP0MH}ACFCFHEH@8HEEHEH@0f=.u.HMF臼HEHp0UH}[HEH@0f= u2HMFHHEH@0Hp0UH}ZHMFHEH@8HEHEH}IHMF߻HECd9E|HMF趻H}CFSHMF萻t1bPH}F蕻HMF=HMF%ftHMF}u)HE@~HMF׺EHMF襺}upHE@ueHMF|HEHP0MH}AFCF$UH}FwHM-F/HEH@8HE4HEH@0f=.tHEH@0f= tHEHEH@8HEH}uŃ}HEH@8HEExHEH@0f=.QHEH@0f= <Ծt1lžPH}Fߺ,HE(trp@t+1)@->bu@ p.ov@al =f@ HEH@0H@HtfHEH@0H@H8)FiuIHuH}#HEHP0MH}ACFFUH}FF^Af8HuH}ʸHEHp0UH}HMFnfHEH@8HEHEH}}} HEH@8HEHEH@0f=.HEH@0f= HEH@0H@HHEH@0H@@ f=HEH@0H@@utHEH@0H@H8)FtWHEH@8HEBHEH@0HPHEH@0H@H9uHEH@0H@H0`F.qHEH@8HEH}uHEH@8HEH}HEH@8HEEHEH@0f=.tHEH@0f= uHEH@8HHMF˶HEH@0f=.HEH@0f= t{HEH@0H@H8)Ft^ffHEHp0UH}fױfHMF*HEHP0MH}AFFUH}F%HEH@8HuHE@ EEH}UFHEH@0f=.kHEH@0f= VHEH@0H@H8)Fӵ5HEH@0f=1uHEH@0H@@ f@ HMF(HM Ffwpfkdf{pfgHEHp0UH}f.'f"f2HMF芴HEHp0UH}fHM FNHMF6HEH@8HEHEH}HMFHMFHMFѳHM,F蹳HEHP0MH}AAFFafHEH@8HEEHEH@0f= tAH}bF~HEHp0UH}dHM|F"CH}bF=HEH@0Hp0UH}HM|FݲHEH@8HtHMF踲HEH@8HEHEH}) fHMFsHM F[HEHP0MH}AFFHMFHMFHM FHMFαHM5F趱HM%PF螱HM xF膱HM FnHMFVHMF>HMMF&HM FH}F+H} FHM%PFаHMMF踰HMvF蠰HMF舰HMMFpHMFX fyfHMXF HEHP0MH}AkFtF HM F֯HEHP0MH}AFCF~ HEHP0MH}AFtF_ HEHP0MH}AFF@ HM Fa~HEHP0MH}AFF HEH@8HEEEE:HEH@0f=.tHEH@0f= tHEHEH@8HEHEH}uHE@t E;EHEHP0MH}AFFm HEH@8HEEHEH@0f=.tHEH@0f= HMFPHEHP0MH}AFCF UH}FKHEH@0f=.uHEHp0UH} HEH@0Hp0UH}HEH@8HEHEH}1Hu)Ѯq HEHP0MH}ACFFT HEH@8HEEHEH@0f=.u.HMFLHEHp0UH}b[HEH@0f= u2HMF HEH@0Hp0UH}HMF۬HEH@8HEHEH}IHMF褬HEU9E|Hu)襭E HEHp0H}5 HMFWHEHp0UH}mHMF+H}CFFuPtRuHMFHMFѫH}CFnHM  G覫fHEH@0HtDHMG|HEHp0UH}HMGPHEH@8HHu(QHEH@8Hp0UH}CHM!GHu(HEH@8Hp8UH}HM&Gê1ftHM*G蚪ftoNPH}FHuH}aHEHp0UH}GHMFDHMFHEHp0UH}HMF迩f&HEHp0UH}f HMF聩fHEHp8UH}HEH@@ f@uOHMF%HM F ftmfhafxmfdHEHp0UH}f+$ff/HMF臨HEHp0UH}fHM FKHMF3ftHM*G HEH@HH}DGHEH@0HE8HMFƧHEHp0UH}HEH@8HEH}uHu)豨QftHM*GhHMNGPHEH@0Ht1HEH@0@ft HEH@0PH}FDHEHp0UH}(Hu)Tfu;HEH@Ht.H}| MHUH}AFVGpiMHUH}ACFCFPIUHuH}4ڡftHEH@H8HuH}H}¾F\Hu(9HEH@H0H}Hu)HEH@HH}]GGftHM*G谥uHM iG莥HEH@H0H},Hu yHM(xGAHM)pF)HMMFftHM*GHMGФHEHp0UH}HMF褤f fHu"蟥HEHp0UH}HM GSffɩJ9uHMG} J9uHMGڣHft0HMG豣HMG虣HMG聣H}CF6HEPHE(G!H=ҨIUHH@H}HuHU؉MLEHEH@HEHE؋@NHEH@HIH}u G\HEH@pHt&HHtHE@ ft H}@HEH}u.HEH@HHEHUH}I G譢HE@ fuHEH8?HEHE@ fu-H}ྐྵ G蠢tHEH0 GZHEf@ HE@ f=#uHEH0 G[HuH} [fHEH@hHVfHEH@pHu*HEH8 GtHEH8$FuH}^F螡eHEH8)F軡EHE@u}tHMnF(}ufu GZft=HEH@pHt0H}ྐྵ G@tHEH@pHH} GEftHEH8HuѡHE@ft-( GDYX G G GءߛfuH} Gh8fuCfHMFHEHp0UH}fvNfuLHEH@0Ht'HEH@0f=.uHEH@0PHE@9|HEH@0Hu=HE@~2Hu[蝠HEHp0UH}Hu]{^HM GAHEHp0UH}WHMFHEPH} G+HE@ f=uAHEH@8Ht4HEH@8H@0Ht#HEH@8HP0MH}ACF GsHuH}ʞUHH0H}HuUEfHEH@0H@H8Hu膟HEH@0H@0Ht4Hu[WHEH@0Hp0UH}IHu]1HEH@HH} G#H}{EHMVGHEH@0H@H8ZEUH} GĝHEH@0H@0Ht2HM GkHEH@0Hp0UH}}UH} GkHEH@HH} GMHEH@8Ht0Hu["HEHp8UH}Hu]}tHu)UHHH}HEE}rt}r}ct.K}st} t:E8E/E&HEHx0 t EEEUHHH}uH}u EVHE;Eu E>HEHx0uuHEHx8ut EEEEEUHHH}uH}tzHE= t}t}tHEf= t EEHEHx0uHEHx8upUHHH}d^TH}>@~CF GT&u~CFH GTUHHH}H}~CFx GVTÐUHH} u%H  G=H=dU GJUHH}HuHjHtH^H;Eu}uQHKHt1Uʋ H4HH=AH¾ GݙHEH EUHH}HHt, jHHH=EA G脙UHH }HHEHE@;EtHHEH@HEH}u߿SHEEHEfPHOHEHPHEH<UH}HEH$HEUHE@;Eu3H H9EuHH@H-HEHPHEHPHEHEHEH@HEH}uUHH H}H}HEHHuHEH@EHE@ EHrHElHE@;EuRHE;EuHEHPHEHH@H9HEH@HHEЋu G莘gHEH@HEH}uQHEEHEfEHEfPHEHHPHEHPHHEHPHEHUHH0}܉uH=vUؾ G\E{HEH_HEVHE@;Eu4mH}tHEHPHEHP,HEH@HHEHEHEH@HEH}uH}u HEE;EkH  Gf,=9EuH=Uؾ Gr =9EuH=hUؾ8 GNHkUHH0}܉uH=4UؾY GE9fHEHHE3HE@;EuHE)HEHEHEH@HEH}uH}u HEE;E~H  GNHHq GH=iUؾu GOEnHEHJHE\HE@;Eu:HEHp}H}tHEHPHEHP,HEH@HHEHEHEH@HEH}uH}u } MYeHEE;Eb}H  GH;9EuH=nUؾ GT:9EuH=JUؾ G0HEu؋}UHH0H}HuEHE@ftSHHE?HE@;Eu!HEH@0H@H8HuÔE HEH@8HEHEH}uEEUHH`HHHuH0KH!)HGH@HpH`@H G謒HHp0H*H)螓H G^HHp0HH)PH GHHp0HH)VH(HHp0HJH/辒HHp8HH)萒H(zHHp0HH*LHHp8HH)rH(HHp0HfH-ڑHHp8H8H)謑H(薑HHp0HH+hHHp8HH):H($HHp0HH GHHp8HOH)ÐH(譐HHp0H H&HHp8HH)QH(;HHp0HH^ HHp8HkH)ߏ3H(ɏHHp0H'H|蛏HHp8HH)mH(WHHp0HH GHHp8H}H)EH(ێHHp0H9H G胍HHp8HH)uH(_HHp0HH>1HHp8HH)WH(HHp0HKH<迍HHp8HH)葍H({HHp0HH G#HHp8HH)iH(HHp0H]H G觋HHp8H%H)虌 H(背HHp0HH G+HHp8HH)q H(HHp0HeH G诊HHp8H-H)衋 H(苋HHp0HH G3HHp8HH)%y H(HHp0HmH G跉HHp8H5H)詊 HH@HH G萉HH@0HEdHH@0H;EuHEHp0H+H,1HEHp0HHEH@8HEH}uH)G HHP0HA G Gm HHP0HA G G@ HHP0HA GG HHP0HA G G HHP0HA GGf H@t HDžG HDžGHHP0HLGeHH@8HEEfHH@8H;EtH,脈HEHp0HhuHEHp0HHEH@8HEHEH}u HHP0HAGGH@tUtt(AH?Ç.H<谇H GsHH@8HEEfHH@8H;EtH,YHEHp0H=uHEHp0HHEH@8HEHEH}uH@TH>>H@t HDž#G HDž'GHHP0HLG=HH@8HEEfHH@8H;EtH,\HEHp0H@uHEHp0HHEH@8HEHEH}uH]TH*GHHp0H>H)貅H3GrHHp0HH)dH9G$H =GHHp0HH)JH(HHp0H>H)貄HH@0HtSHGGbHHp0HHKG*HH@8HH(%HH@8Hp0HHQGɂH(؃HH@8Hp8H2HVG|HHp0HHZG?HHp8HHH@H0HEEEpHH@HEHHEEHcE}\uHEEHcE}"u EHƄ'}tHEHE}~Hf=uH^GKHeG.HHnGAHH@0HE7H,HEHp0HpHEH@8HEH}uH)с%HrG葀HHp0HH)胁HHAGGHHHH@H8H-qHH@HHzGHHGHHp0H2H)覀HGfHH@HHGmHGHG~qHG~QHG~1HG~H G}~HG]~HG=~HG~HG}tHHHHt%HHG}#HHG}UHH H}HuUfxxfxUHuH}fxxfxÐUHHpH}؉uH}uH5C0)~KHE؋@(HEH@H#HE!Eȁ})EHGH=UHu՟H ρ0G|J#9$#tH  IGM|HEHP0H=nMAWGYGm"9YHEH@8HEEEE:HEH@0f=.tHEH@0f= tHEHEH@8HEHEH}u}uHE؋@EHEH@8HE4HEH@0f=.tHEH@0f= tHEHEH@8HEH}uHE؋@uuHEx+EȉEH YfG{O~H=4UzG"{HEH Gz)H  Gz+EȉEHE؋@FHEH@8HEE#HEH@0É} t}.tH G;zHEHP0H=\MAGGH=BUG0zHEH@0f= uHEH@0Hx0uHEHx0u}H=~Gy7H ~GyHEHP0H=~MAGG.H=~UG~yHEH@0H@HHEH@0H@HHEHEGHEHuH}HM(u@H ~Gx~~2H=}UzGxHEHp0H=}UǛ}H=}Gx}~HEHEH@8HEHEH}}+EȉEHE؋@up}~HEHEH@8HEE)HEH@0EЁ} }.HEH@0H@HtIHEH@0H@HHEHEGHEHuH}HM(frHEHp0H=|U蓚frH |GEw|~H=d|UzGRwH K|GwA|~HEHEH@8HEHEH}|+E | H {Gvf rHEHp0H={U谙fqH {Gbv{~-{ȉ{{PH=j{zG[vHEHx8u~`HEHx0ulNH 0{ Gu1uH}A#HEGvEUHHH}H}u EHEE}}}=}.tJ}ctK}t9E-w5*HEHx0 -E#H} EEEEUHHH}uH}u EVHE;Eu E>HEHx0uuHEHx8ut EEEEEUHHH}uH}taHEf@t HEf= u'H yGRtuH}HEHx0uHEHx8uUHH H=y@qXHWmHE[HEH=]y`"GsGof0HEHk"GuH y"GsH x"GhsH x"GMsHEH=x"G]sH x"GsE9H=xEHMHAIH"GsHEHE@ ;EH =x#GrH "x#GrHEH#GsE&H=wMH:#GurHEHE@ ;EHE@uSH wG#G rH w`#GqH kw #GqH Nw#GqH 3w #GqHEH@0HEH}H=wqXHjHEHEHk"GrHEH=v`"GMqHE@u H v#GpHE@HE@PH=Qv#GpH ;v#GpH v#GpEFH=uMH#GpH=uMH$GspHEHE@ ;EH u%$GpHHHHHHHHH[slo@t].ff@ld@ H @u,$GoE&H=uMH;$GoHEHE@ ;EH t#GVoHE@ u"H=tHP$G]oH to$G oE?H=}tHU$GoH=]tU$GnHEHE@ ;EH 2t#GnH t #GnHEH@0HEH}H=s@rXUHH0H}H}u E3HEE}|}|}-}-3}&}%}!E*}R}R}/t}?j}^[}cQ}-Z}*} } }~} tgB} } #}G(}>}.}1t}JfchHEH@HHEHEؤ$GHEHuH}HM(u EHEH@H@pHEwfgEeHEHx0ESHEHx0EAHEHx0tHEHx8t EEuuEEUHHq9}(mqתHH%H[q%HHHBqHHѸHqHE,HEHHHHpHHEHHEH@8HEH}uUHH@}HuЃ}u E EHHHHpHHHEH}u!uܿ$Gk$G$HE@t EHE@HEH@(HEEJEHUHHDHE)HEHPHEH@H9uEEYHEH@HEH}uHE}~HE8Huu EHEH@ HEH}tEEUHEFEHHHHoHHHt!EHHHHkoHH@HE9E|UHH}HuHE@E}tG}thHEHf=9uXHEHH@8f=.uDHEHH@8@u2E0HEHfctHEHfrt EEEUHH0H}HEHEH}t HEH@HEH}tHEH@HHEH}HEH@ HHEH@8HHE@ HEf=HEf=HEf=HEf=HEf=t{H}CHuhHEf=t[HEf=tNHEf=tAHEf=t4HEf@t'HEfctHEfrt HEfsu E[HE@ uBHE@ t EHEH8ΆEԋEԉE}t EEEUHH H}HEH@HEHEH@HHEH}t&HEH@ HuHEH@8Hu HE@ y EGHE@ u.HE@ uHEH8t EEEUHH H}HHE"HEHH;Eu ExHEH@HEH}uHiHtH]HEHRH@HG* HEHUHEHHHEHPHEH EEUHHHHu$GHԤHEHɤH@HHHEHPHEHUHH@H}HEH@HEHE؋EH}u EHEH@@tHEH@@EH}9u EH}u EkEHHHHjHHHEHEHx(PEHEH@HEȃ}uEEUUԋUHEȉPHEH@@EċEUHH0H}H2jHEHEH@(HEHEH@HHEHPHE@fBHEH@@HEH@HHEHEfctuHEfrthHEfst[H}tNHEHHHHiHHHEHEHx(uHEHPHEB H}HEH@ HEH}!HEH@8HEH}HiHESHEH@(HE+HEH@HHEH@@HEH@HHEHEfct,HEfrtHEfs9^H}HEHHHH~hHHHEH}tzHEH@(HtmHEH@(H@Ht\HEH@(H@@tHEHPHEH@(H@@B-HEH@(H@@tHEHPHEH@(H@@BHEH@ HEH}HEH@8HEH}UHH0HgHEHEH@(HEEEHUHHDHEeHEH@H@pHtHHEH@@ f@t6HEH@@ f=t$HE؋8HuTt UHEPHEH@HEH}uHE}pHEH@ HEH}MHEH@8HEH}%u+HfHEHEH@(HEEEHUHHDHEHEHE@twHEH@HEH}uEHMHcHEHD HUHEHBHEHxHut$HEH@HP(HEHPHEHPHEHB(HEHEHEHEHEH@HEH}_HE}0HEH@ HEH} HEH@8HEH}UHHH}H}t>HEHxHEH@HE@H^eHEHPHEHKeUHHH}H}t]HEHx HEHxHEHxsHEH@HEHPHEHPH4HEHP HEH!UHHH}H}t@HEHx8HEHx(aHEH@(HםHEHP8HEHĝUHH=_dHOdUHH }H;dHEHE;EtHEH@8HEH}uH}H]Ht9HQHEHEHHHH,H@8H!@HEHUEHEH@(HcHEHP8HEHc9E~ EHEUHH }HHtJHHEHEHH@H@H@H@ H|H@ Hq(dHEHUEHEUHH }uHU}HE}\HEHUHEHBHEHP(HEHP HUHEHB(}KHEHE@PHEP9t4}HEHUHEHBHEHP0HEHP HUHEHB0HEH@HtHEH@H0H}LUHHpH}HuUH}*H}HEH@Hu HEH@H<_HEH@HHEHE$GHEHuH}HM(HEH@HHEHE$GHEHuH}HM(mHEH@HHEHE$GHEHuH}HM(u'EHUHHDHEHEHE%HEHPHEH@H9HEH@HEH}uHEH@0HutH`HtH`HEH`H@H` HEHEHPHEHPEHUHHTHEHPEHMHcHEHDHEHp0H}JHEH@@ f=u6HEH@8Ht)HEH@8H@0HtHEH@8Hp0UH}UHH0H}HuUH}H}uHE!E؁})EH@%GHEHp0H}HEHp0H}{HEHp8H}eHEHp0H}JHEHp8H}4QHEH@0HE"HEHp0H} HEH@8HEH}uHEH@0HHEH@0@fHEHp0H}HEHp0H}HEH@8HE"HEHp0H}xHEH@8HEH}uHEHp0H}JHEH@8HEmHEH@0f= uHEH@0Hp0H}4HEH@0f=.t#HEfRtHEHp0H}HEH@8HEH}uHEHp0H}HEH@8HHEH@8Hp0H}HEH@8Hp8H}hUHuH} sHEH@0Hp0H}7HuH}HEHp8H}/HEPHE%GW4%GUHH }uHPHEHE@ Ћ9HE@ Ћ9HEHxHEH@HHE}t}t.HEHH8HE@ H}f@t%HE@ H}p H}iaHEH@(HEH}#HOHEHE@ uhDtX.GVHEHPHEHH@H0.G|VHEH0H= :WHE@ ƒHEP HEH@@HEH}[t脃VUHH0H}HuNH}辳.GKUHM.GUH|NHEHEHHHEHE؃}rt }tlHEPH}.GTPHEHH@(HHEHEHHE܁}t}t}rt/G.HEH@@HEH}LHM"/G'T HM%/GTHM=/GSHM Z/GSHM+h/GSHM/GSHM$/GSHM$/GqSHM)0GYSHM#00GASHMT0G)SHM X0GSHM"/GRUHH@H}HEHHEHE@ HE@ ƒHEP HE@ EHEHf=uHEH@0H8HEH@0HHEH@0HE{HEHH8.HEHE@ EHEHfcu3HEHH@0f=.uHEHH@0@u HEH@8HtHUu}HEH@HEH}zHEH@0HEHEH8HEH@HEH}uHEHf=t HEHf=tHEHf=u]HEHH@(HHEHEH87HEHEHPHEH@HHBHHE@ EHUu}H},%HEHf=u>HEH8lHEHE@ H}HEHE@ EAHEH@HHt-HE@ HEHxHIHEHE@ EEHUu}.HEH@8HtzHEHf=tjHEHf.tZHEH@8HEEHEHH8HEHE@ Eu}HEH8HEH@HEH}uHEH@H;EtHEH@HHEH}ÐUHH }HIHE3HE@ ;EuHEHH0h0GcPHEH@8HEH}uUHH@HHHpHy DžIHH}y Dž&HUH8H9} Dž DžUHHH`HHEQHEHHt9HEHf=t HEHf=tHEHf=u H}oHEH@@HEH}uUHHftH9HHtH-H@ t EEEUHSHt( HHHn0GuO HHHy0GSOH0GrOHHHyHHH H HHHHƄH0GOHHHHH8.6NHEH}HEt( HHHn0GpN HHHy0GNNHE.H0GfNHHHuqHHHHHHHHƄH0G NHHHu0GMu:HH8Ht HH0H0GLE]Eu=QxBEu.EuEuH=0G/H=0G/~4NE9|$0GL51GK#EftPqHwDHEHEЋPE9tHEH@@HEH}uH}u-MċPD)‹5D(1GqKhDD)DEHEHf@$Uʋ!P9H*DH@8HD=D5D_uH=sL1G4.w Dft$Ou5CS1GJGOC)‹5Cj1GJdO5C1GVJHEHȋ}ċ0OyC)ƋUAȉ1GJHCH C#HEN9EtHBH@8HBHBHuHBHu<NC)‹5B1GIuĿ1GIHBHEHBHEH@HEHH@H(HEHf=HEHEH}ۛHEH}^B9u$NtdH}HEHf=uHEHH@(HHHE1GHHEH0H=*1G%Itt H=MAt IHEHEH}tHEH@HH;EH AHH@H(H}tH}H0 HUH0H0H(HGmHEЋ@t HEЋ@E HEЋ@EH@HtGH|@H}HCHh@H@Ht#HX@HQ@HxU̾HCn@9u$uh^H}о'HEHf=uHEHH@(HHHEп1GFHEH0H=%6]aG}thtXHd?Ht&HX?H@HtHH?H@@ < Dž~t FH>Ht0H>H@Hu H>HEHB1GCFE}tCH>Ht7Hs>H@Ht'Hc>H@@ ;EtHP>H@HE|>fH,>HH>@ H}HEHHHEHP*9HEH@8u/H@1GGEH@&752GDHEH0H=1G EH=HEIpZY'2GCs5_=82GDTrH[UHH2UuY2GC}=Uul2GCH=HEHUHMHuIIH2GyBtqUHH H}<<)ȉEH}胤EH\<HE*HEE;EuHEH@@ EHEH@8HEH}uEEÐUHH }uEEHNY;Et\HEL9E|ދA=~2G%HcЋEnY HcыENYAUHH }EEHNY;Et~HEɀ9E|EEH^Y;EtSHE9E|ދ=~2G {HcыE^YAe_UHH0H}EE"EHNYEH^Y9tHE 9E|Ӌ9EuhEH^Yr9u%uH^H}ؾ2G@-EH^YH}2GAHu2G"HE9EBEO(3GJ@Hu*3GUHHH}HEHE}}}%}@to}ct}t{}tb~HEHHx0 ;tH}/3G5HEHHx0pt>H}F3G.H}a3GH}u3GH}3GUHH0H}HuUHEH@0HEHEHH8HEH}HEHE؃}r}r#}RH}c}.p}}}sK}t8}t4HEHH@(HH0UH}$HE UHuH}HEHEH@HHf=HEHpHUH}HE}HEtHM3G<B?9tHM3GW<^HM3G:EHP@~-HPHEHXH`Ag8GHPHP(EHHHHHE{HEH@0HEZHEH@@ f=uHEHpH`&HEH@@ f@uHEHpH`HEH@8HEH}uHEH@8HEH}zHEHP@;EUHHHXTHHH@L8L0H@H@@u'H@HHHH`a8GEGH@@~-H@HEHHH`Ag8GvH@HP(EHHHHHEHEH@0HEHEH@@ f=uIHEHHH0H8H`DTLXHEH$IIHDLGHEHHH0H8H`DTLXHEH$IIHDL藮HEH@8HEH}GHEH@8HEH}HEH@@;EUHH@HHHHEaHHP(EHHHHHE,HEH@0HEHHH@~dHHHHHHHHƄUHq8GvHHHEH@@ f=uEHEH@H0HHy8GHEHPHHHEHPHHYHEH@8HEH}HEH@8HEH}HEH@;EUHH@HHHH$EHH@~"MHH{8GAHHHHP(EHHHHHEHEH@0HEHEH@@ f=u[HHHy8G1HEH@H0HHEHxHH.EHEH@@ f@uHEHxHu8GHt&HP HHH08GqHEH@HH8GPHEH@@~u-8G.8GHEH@@ f=HEH@HP EHHH0H=w HEHEH@@;EHEH@8HEH}NHEH@8HEH}&HEH@;EUHSHHH}ЉủUHMDEẺEHEHExHEH@0HEPHEH@@ f=HEH@HHXEUȋuH}AE}H}:HEHEH.HHEHP8HUHEHEEE;EusH}HHEHHEH.*HC0HEHHP0EB}t HEHEfETHEHEHEH@@;EeHEH@8HEH}HEH@8HEH}}EEEHH[UHHH}H}u EHEH@Hu8G}HEH@@ f=t EHEH@8Hu EsHEH@8f.tNHE@eHEH@H޷HEH@88GHEH@H08GHEH@8Hx0!EEUHH0H}uHE}uKHEHEPH}CHEH}tHuH}HEHEHEH@8HEH}uHEHEHEUHH@H}؉uԉUHEHEH@@ f=u H}gt HEHEmHEH@8HHEH@8f.HEH@8H@0HHEH@8H@0H@HHEH@8H@0H@@ f=HEH@8Hx0UЋu1HEHEHE[H}عHEHEHP0."HHEHP8HUHEHB0HEH@8HEH}uHEHEg}tHEH@H@XHuZt HEHE98GH=NHuغ[8GVHEH@H08GHEH@HxXOEEȉEHM,AHEHEH@HHXH}H0EЋUAx'u8GHEH@H09GH}عLHEHEHP0.HHEHP8HUHEHB0HE}3HEHEHEUHH H}HuHEHE(HEf,t$9GeHEH@8HEHEH@8HuHUHEHB8HEUHH H}H|HEAHEHH0HEH@H8 uHEH@H0?9GJHEH@HEH}uHEHEHPHEHH7|HEHPHEH$|UHH H}H|HE,HEHH0H} u EHEH@HEH}uEEÐUHH H}H}t HEH@Hu ElHEH@HEHE@ f@uHEH@Pf@E8HE@ f=u#HEH@8HtHEH@8Hx0wEEEUHH H}HuUH}}tEHEH@pHt)HE@ ftHEH@pH0X9GN _9G= HEH0b9G' HE@ f=uUH}tNHEH@8HtAHEH@8H@0Ht0: HEH@8H@0HpHEH@8Hx0UHHH}uH}tbHEH@HuSHEH@@tHEHx0uHEH@@ f=u!HEH@8HtHEH@8Hx0uUHH H}uH}OEttHyH@HtdHyH@HHtQHyH@HctHEHPHEH@@BHEHPHEH@@BHYyH@HE5HEH0H}tHE@;EHEH@HEH}uHDHtH8HEH-H@H" ]HEHUHEHHUEBHxHPHEHPHxHEHBEƃH}UHH H}uH}HE!E})EHh9GuHEHx0u HEHx0vuHEHx0yuHEHx8fKuHEHx0NuHEHx8; uH}uH}H}HEH@0HEHEHx0HEH@8HEH}uu HEHx0HEH@8HEuHEHx0HEH@8HEH}ulu HEHx0oHEH@8HESHEH@0f= uHEHx0u@$HEH@0f=.tuHEHx0HEH@8HEH}uu HEHx0HEH@8HE-HEH@0f= uHEHx0uHEH@8HEH}uuHEHx0HEH@8HtrHEH@8Hx0utHEH@8Hx8u`HHEH@0HEuHEHx0=HEH@8HEH}uHEHx0UHH H}uHuH@HETHEH8Hut/HE@#EEHE@ UHEP}E_HEH@HEH}u 蛿HEHUHEHHUEBH$uHPHEHPHuHEHBEEUHH0H}HuHU؉MH}HEf= udHEH@H8Huru|HEH@0HEE.E;EuHEHx0KHEH@8HEHEH}u0HEHP0MHuH}UHEHP8MHuH}=UHH0H}؉uHtHEHEH@ HE^HEH@(HE=HEH@Ht$HEH@HHEHHH8MHuHEH@ HEH}uHEH@8HEH}uHEH@(HEH}vUHH0H}H HEHEHHEH}HEH@pHHEHH0HEH@pH8unHE@xcHE@ f@uUHEH@Pf=1uDHEHUHEHBH}KHEHxPHEH@HEH}6UHH@H}EH}HEH@HEHEH@0HEHEf,t HEHE HEH@0HEHEH}C@uS 耼HEHUHEHHrHEHPHEHrHrHqHEHH8uHEH@8HEH}_HEH@8HEH}7UHHH}H}t8H}@uH}HEHx8HEHx0UHH}EHEH@8HEHEHEH@8HEH}uEUHH}HuEHEH@8HE3HEHEHPHEH@0H@H9uEEHEH@8HEH}uEEUHH0H}HuUH}uH}u EH}tH}u EHEH@HEHEH@HEH}tH}u E}t!HEHPpHEH@pH9t EHEP HE@ f9t EvHEH0HEH8t EVHE@ f=uAHEH@8Ht4HEH@8Ht'HEH@8Hp0HEH@8Hx0EEEUHH H}H}oHE2HEH8Hut HEHKoTHEH@HEH}uǿ 胹HEHUHEHHoHEHPHEH oHoHnUHH@H}HEH@ HEHEH@(HEwHEH@HEOHEH8@.HE@HEH8HEH@HEă}rt'}9tHEH@HHx8HGnHEHEH8EHEH@H8EE;EuKHEHpHEH8EHEH0HEH@H8EE;EuHEHxHEH@HEH}t/HEH@HBGBG藶HEH@HEH}HEH@ HEH}~HEH@8HEH}VUHH H#mHEvBG+HEHHpHEH8iBGHEH@HE HEHH@HuBGHEHHpHEH8 <HE@tCGHE@t CGlHE@tCGLHEH8t HECGHECGHu CG>HEH@Ht%CGHEH@HEH} HEH@HEH} UHH0H}HuHUHMHE@ukwkukHEfPHEf@ߡHEH@Ht~Huп(CG)HEH@H0H=}Huؿ3CGH}t+JCGHEHHpHEH8" HEH@HEHEH;EtmHE@ t_tHYUHH H}HEH@ HEHEH@(HEoHEHxYHEHxHEHxHEH@HEHPHEHPHEH@HtHEH@H8HEH@ HEH}uHEH@8HEH}eHXUHHH}uXt[EtOEtEDGHEHpH}?uEGuH}]UHH H}u.+H} HE!E})EHHEGu HEHx0uHEHx8uHEHx0pEƃHEHx0SuH}HEH@@vuHEHx0^u HEHx0HEH@8HEHEHx0uHEH@8HEH}uuHEHx0HEH@8HHEH@8Hx0uHEH@8Hx8uuH}uHEHx0XuHEHx8EH}HEH@0HEuHEHx0HEH@8HEH}uAu HEHx0HEH@8HEuHEHx0HEH@8HEH}uu HEHx0HEH@8HE;UUuHEHx0kUȉUHEH@8HEH}uHEH@0HEuHEHx0$HEH@8HEH}uWHEHx0CuHEH@0Hx0HEH@0HxHE EGoUHHpEtfNGH5UHE< HEHHpHEH8k HEH@HEH}uEHTHEHEHH@@HEH@HEH}uHHEHEHHEHE@HE@ f=uHEH@Pf=.tkHE@ f=t]HE@ f=#tOHEH@hHuBHE@ H}^ot*}uENG H}FqHEH@HEH}EEEEUHH@EEH+HEHEHHEHE@<uqHE@ ft*HE@ ftHE@ f tHE@ f=u9}u ENGONG H}vpHEH@HEH}aHRHEEHEH@ HEHEH@(HEHEH@HHEH@HEā}}/}rtt}r}.tz}@tti}stQE-wV]}tT}E-w5<}t3}|!E-wHEHE HE.HEH@ HEH}"HEH@8HEH}}t}uC}u HEOGHEOGHEHHH0HUȿ(OGUHE )}u#HEHHH0POG|HEHEH@(HEH}SEtxOGOGEtxOGOGEt PGUHH HPHE~HE@ ft|HEH@HEHPHE(HEH0HEH8uHEH@HEH}uH}uHPHUHBHEHtPHEHEH}wHEHNPUHH H}uH6PHE3HEH8HuBtHE@;Et]HEH@HEH}uƿ+HEHUHEHEHEfPHEf@ HOHEHPHEHOUHHHOHEzHEf@ tHFPG|HEHHpHEH8HEH87ƿ]PGCHEH8HEH@HEH}{UHH(H}uEHHHHHHHEHEH@(HE HE@t EHEH@HHEH@HHtHEH@H-E܃}HcMܸH%HuHE0H}6toINHEfPHE@ƒHEfPE_HE0H}t.NHEfPHE@ƒHEfPEHEH@ HEH}EEUHH H}uEHHHHwHHHEHEH@(HEHE@HEH@Ht}HEH@HHtmHEH@H-E}w'HcMH%HuHE0H}IMHEfPHE@ƒHEfP4HE0H}LHEfPHE@ƒHEfPHEH@ HEH}UHH H}HsLHE.HEH8Huwt E\HEH@HEH}uH)LHE.HEH8Hu5t EHEH@HEH}uEEUHHH}H}u EOH}谹@u E8HEHx0uHEHx8t EEEEEUHH H}H}t!HEH@HtHEH@H8`u EAHEH@HE%HEH8t EHEH@HEH}uEEUHH H}uEHHHHHHHEHEH@(HEHEH@HHEH@HHHEH@H-E}w)HcMH%HuHE0H}WhHEH@H8H}tFhPG#HEH@H0H=\ HE0H}HEH@ HEH}UHH H}uEHHHHHHHEHE@HE@HE@ HEH@(HEHE@uHE0H}~t]HE@ tYHE@PGHEH@H0H=[ HEH@ HEH}iHE@ UHH0H}؋FtHEHHH0PGHEH@ HE HE@HEH@(HEHEH@HHEH@HHHEH@HEԃ}s}r}}ct u}tjHHEfPHE@ƒHEfPg~t5PGHEH@H0H=DUZ HEH@ HEH}'HEH@8HEH}HEH@ HE7HEHHHH.HHEHHE@HEH@8HEH}uHEH@ HEHE0H}3HEH@(HExHE@tZHE@ƒHEfPK}t5PGHEH@H0H=(9Y dHEH@ HEH}uHEH@8HEH}EHEH@ HEvEHEH@(HEHEH@HtcHEH@HHtSHEH@H-EЃ}wNHcMиH%Hu6HE0H}t#EHE0H}tE}uHEH@ HEH}Y}HEH@(HEmEHEfPHE@ƒHEfP{t5PG+HEH@H0H=}W HE0H}=HEH@ HEH}pHEH@8HEH}HEH@ HEPHEH@(HE/HE@tHE0H}HEH@ HEH}uHEH@8HEH}uUHHH"DHEfHEHHH8CGt?HEHHH8CGt$HEHHH8CGt H}"HEH@(HEH}uUHH HCHEHEHHH8CG>HEHHH8CGHEHHH8CGHEH@ HEsHEH@(HERHEH@Ht9HEH@HHt)HEH@Hf=uHE@ƒHEfPHEH@ HEH}uHEH@8HEH}uHEH@(HEH}UHBBWB.ytyB5wBPGdbBZBH?BHt DBuUHHHAHEH}HEH@(HEH}uHAHEHEH8$HEH@(HEH}uHAHEH}HEH@(HEH}u5xtLUHHEHvAHuPGpEH/AHEH}RHEH@(HEH}uIQb}twt`EH@HE,H}HE@tEHEH@(HEH}uZu}t QGc0wtPUHH H}uHEHH8CGHEHH8CGtoHEHH8CGtW0aHEHUHEHHUEBHE@HHEHP H?HEHP(HEH?HUHH H}Hu(HEHEHEf@HEH@HEH@HEHPHEHPHEH#?H}H}zH>H ?HEHP HEH>UHH0H}HuHU؉MH}HEf= ucHEH@H8Hu}u{HEH@0HEE-E;EuHEHp0H}KHEH@8HEHEH}u0HEHp0MHUH}VHEHp8MHUH}>UHH@H}HuЉUH">HEvHEH@ HEUHEH@(HE4HEH@HtHEH@H0MHUH}HEH@ HEH}uHEH@8HEH}uHEH@(HEH}uUHH@H=HEHEHHH8CG.HEHHH8CGHEHHH8CGHEHHH8+DGEHEHH@HEwHEH@0HEVHEHEf,uHEH@0HEHEHEHEHEHEHHH8UHu]HEH@8HEH}uHEH@8HEH}uHEH@(HEH}UHH HHEHEHHEH}HEH@pHHE@ f=#twHEH@PHtjHE@ f=uHEH@Pf=.tKHEH@Pf@t:/ЇHEHUHEHBHEHpPH}HEH@HEH}=Hx;HEIHEHHH8CGHEHHH8CGHEHHH8CGHHEHEHHEH}HEH@pHHEHHH0HEH@pH8~uqHE@xfHE@ f=tXHEH@PHtKHEH@Pf@t:/胆HEHUHEHBHEHpPH}HEH@HEH}0HEH@(HEH}UHH0QQGH9HE!HEHEHEH@HHE@ft HEaQGHEcQGHuпb9GHE@eQGHEH@HEMiQGHEHHpHEH8޽HEplQGnHEH@HEH}u 1HEH@ HEH} sQGH8H9Eu H8HEHEHEHEH}vQGUHH8H8H8>H8Hz8Hw8UHH H}uHE@tHE@t E HE@t EHE@ƒHEPntHEHHE0UzQGHE@tAntHE0QGHE@ƒHEPE\HE;EtJHEH@(HE5HEHHHHyHH8uuHEH@ HEH}uEEUHH H}uHE;EtvHE@tkHE@tYHE@ƒHEPHEH@(HE1HEHHHHHH8uHEH@ HEH}uUHH0H}HuUHEH@HE%HEHH;Eu HE@;EtRHEH@HEH}uԿ譀HEHUHEHHUE܉BHEHPHEHPHUHEHBUHH H}HEH@HEltHEHHEpQGHEpHEH8;uBfltHEHHEpQGHEpHEH8;HEH@HEH}aUHH@H}HuЉŰEHHHHCHHHEHEЋHHEHEЋ?EHEH@ HEktCEHHHEHMHH!HHEHEЋ0QGEHHHEHMHH!HtHEЋHuH}UHH0H}HEH@ HEHE@zHEH@0HEE2HEHHHH.HHPHEHEH@ HEH}uǃ}"EHE;EEHHHHHH@EHHEE?EHEHPEHHHHMHH!HEHHHHiHHH@(HEE2HEHHHH;HHPHEHEH@ HEH}uǃ}~HEH@ HtUHuH}HEHE؋@ ;EHEH@8HEH}`UHH H}HEH@ HEHE@HEH@8HEH}uHEpH}UHH(H}HEH@(HEHEH@HHEH@HHHEH@H-E} wgHcMHHHUHE%HuHE؃Hu8EMHEHHHHHH8Et EHEH@ HEH}>EEUHH H}HEH@0HEHEHHHHYHHHEHE@t|HEH@HtoHEH@HHt_HEH@HE}t#} }t.E-w! E4H}Ht EHEH@ HEH}AEEUHH@H}ȋ:gtHEHHH0QGHEH@ HEHE؋@HE؋@oEEEEEEEHEH@(HEHEHHHHHHHEHE@ƒHE HEPHEHEH@HtfHEH@HHtVHEH@HEă}s}r}/}ct).}t }tH}HE EHEH@ HEH}4}u}u}u }~a}u[H}uNHE؋@ƒHE؉Pet+HE؋8EUMuAAЉQGHEH@8HEH}YUHH0H}HEH@ HEHE@HE؋@HHxHHEHPHEHE؋@9uEHE؋@HHEHE؋@?EHEHPEHHH‹MHHJE"HEHPEHHHHHEHE؋@;EHE؋@ H?HtlHE؋@ ?EWHEHPHE؋@HHHHpHEHPHE؋@HHHHHMHH!HHE}?~E}EHHHHAHH@uVEHHEE?EHEHPEHHH4HEHPEHHHHMHH!HHEHE؋@ ;EsHEH@8HEH}UHH0H}HuEHE؋PN,9~'HE؋@=,7,HHvH',E$EHHHH ,HHHEHE؋@;EHEH@0HEHEHHHHHHHEHE@tjEUEHHHH+H4EHHHH~+HHHEHPEHHHHH!HHEHE؋@;EHEH@ HEH}SHEЋHHEHEЋ?EEHHHH+H4EHHHH*HHMHH HEuHEHPEHHHHEHHHH*HHH9t8HEHEHPEHHH EHHHHd*HHHHEHE؋@;E{EUHH H}H}EHEH@ HE=HE@t&HEHE@9tHuH}vHEHEH@8HEH}u}uHE@HHHHHH0H}.UHH )H)HEgHE@ HEH@ HEHHE@ PHEP HEHHHHsHHEHHE@HEH@8HEH}uECEHHHH/HHHuEHHHHHH~YHEHE@ ;EHE@ HH?HHEP{_t]HEPHEHHH0RGƹHE@ ƒ?HEH=HEp AA@RG茹H}H}H}HEH@ HEPHEH@0HEHEHP(HEHP0HUHEHB(HEHPHEHP HEH@HEH@8HEH}uHE@EH۽H@t HE@H}FH}/H}HEH@ HE4HEH@0HEHEHP(HEHP0HUHEHB(HEH@8HEH}uHUEBHEH@(HEH}wH%'HE\HEH@ HE?HEHHHHHHEHHE@ƒHEPHEH@8HEH}uECEHHHHHHHuEHHHHHH~YHEHE@ ;EH}HEH@ HE4HEH@0HEHEHP(HEHP0HUHEHB(HEH@8HEH}uH}HEH@ HE4HEH@0HEHEHP(HEHP0HUHEHB(HEH@8HEH}uHEH@(HEH}ÐUHHEERGHE]9E|UHHH}HEHE}t,}t }t"IRGRRG [RG]]HEHH@(H8n]ȉf]9^RG迶UHH0H}HEHHE,H}5HEH}tHEH0bRGµHEHf=uWgRGXHEHH@(H8vRG6HEHH@(H@H8bRG|HEH@0H-HEHEЁ}t*}tHEHf=t HEHf=tHEHf=uH}7HEHf.HEHf@HEHf=HEHf=u0RGHEHH@H0H=ZHEHfcuMHEHH@0f=u9RG+HEHH@0H@H0H=ZRG賳"HEH0H=Z4RG菳HEH@H;EtHEH@HHEH}UHHH}H}HEH@(Ht HEHx(HE@"ft DPHEHH0RGWHEH@Ht(RG;HEHpH=Y3RGȲHEHxRG豲UHH= 7ÐUHH HE>!E}Z}%}}}(tHB} } }tR} }  HE )t RG  H(HE y  HHEHPH}h_HE L HEHEf=tHEf= cHEf= u!HEH@f=AHEH@HElHHU lHE3 aHEHEf= Hu BlHE y HEHEf= HEf=HEf= uHEH@f= trHEf= u HEH@HE kHHU kHE.HHEO HmHE7 H}u RGHEUHSH(H}H} HE-E܃}  EHSGHEH@f= t"HEH@f=tHEH@f=uHEH@HEZ HEHpHEHxAotHEH@HE0 HEH@f= u6HEHpHEH@HxotHEH@HPHEHPHEH@f= u&HEH@H@f= uHEH@HEHEH@f= HEH@f= HEH@HPHEH@Hp iHƺ iHEKHEH@f=t"HEH@f= tHEH@f= uHEH@HEHEHpHEHxmtHEH@HEHEH@f=u*HEH@f= uHEH@HPHEHPHEH@f= HEH@H@f=thHHEHPHEH@HPHEHP<HEHpHEHx#mt hHEHEHXHEHpfhHZHHڿNhHEH}HYHZHEHEHpHEHxlt hHE{HEHxhHHEHxhHHڿgHXHYHEHEHpgHYHHEHpgHYHHڿhgHgXH-YHEHUHuBgHEH}HEH@f= u-HEH@HpHEH@Hx ft HEH@HEHEH([UHH }HE}yMHE}HEEyEUHHcHHЋXb9uPS}HEUHHcHHЋu'z]H^EV}-tHSG \E}>u'0]HE SG u!u}[EHŰSG/\7E\/E&&Em||ET[]E;->E"EE E E }\H}}EHX[UHH0H}H}EEHHYHE-HEH8Hu?u HEHEHEH@HEH}u̿HHEHEHHEظH}HHHȍxmHHHEHHEH8Hu臞EHHYHEHPEHcHEHYHEHEHEUHH H}HHEHEHHEHHEUHnd9}!^Hc@YEBE=5EEUHHEE4EH@Y<(uHEEH@Y<)uHEHE9E|}tVGUHH5@YYUH~ȉUHH5fVG违5y%VG誝-Y5JUHH0}HuC %C)ЉHEHHHE܃}ft9}f }dt.}n}v+HEHEHEnHEHHEHH< t6HEHHEHH<"tHEHHEHH< uHEHHEHH HEHEHHEHH;EoHEHH0@Y訛@YHHEиH}HHHȉA1%HEHHHVG4HEHEH}~HEHH<-UZu(VG\WGR0WGHutUHHH}H}_HEE}}D}}}}t}} } } y} O} &} uH5(ҚHEHxH ~RWG芙HEHxH5V)茚JH5@(vHEHxH "WWG.HEHxH5)0H5(HEHxZH Ơ\WGҘHEHx2H5)ԙH5(辙HEHxH j`WGvHEHxH5B)x6H5,XbH dWG'HEHxH5))H5ݟ!H ̟dWGؗHEHx8H5)ژH gWG蚗{H qmWG}^HEH@HH=IrWG芗;H 1wWG={WGHEUHH}EE}}Q}}};j}i}}-}  } }}} } } WGWGWGۖWGǖWG賖WG蟖|WG莖k!b_UVSVJGX>;mWGM*gWG<WG+}UHH H}Hu࿷WGH}tHuH}H}ו9t..t$WG賕='~@YWG芕E-WHE 9E|WG H=<   UHHH}H}UHHH}HuHuH}}UHH H}WGHEH@(HE$H}gWG軔HEH@ HEH}uտWG虔HEH@0HE$H}WGsHEH@ HEH}uտWGQHEH@@HE$H}WG+HEH@ HEH}uտXG HEH@8HE$H}WGHEH@ HEH}uտ 覔UHH H}H}HHEHHEHp tYHEHH0 XGmHEH@HE"HEH0XGIHEH@HEH}uH}1 9~ UHHHEH}tHEHHȉHEUH"XGY=YUHH@}HuHUHEEȁ}t}tPHEHPHu}t!HEHPHu}t EEEЉEHEHPHu}luHEHPHu}Tt EEEԉERHEH@8HE6H}>HEHUHu؋}Ut EHEH@ HEH}uEEUHH H}H}>HEH/HErHEH@HtVHUHut@HE@HUHcLjVHEHEHHEH}uHEf= uHEH@HE\UHH H}H}=HEHpHEHEH@Ht}HUHutgHE<>v&XG*HE@!HUHcLjLHVHEHEHHEH}\UHHH}H}tpHE-E} wZEH8XGHEHx>~H}HEHx HEHxHEHx}UHH H}H)HE0HEHH8HuȎu HEHEsHEHHEH}uHHE.HEH8Hu臎uHEH@HE.HEH@HEH}uHu还XG迎HEHEUHH H}HuH}4HEH}t1H}HzHEHEHPHEHPHUHEHBUHHH}HEE}t} t }t CEAHEHxtHEHxt EEEEEEUHH0H}HuU܋E܉EH}u EE9H}JHEH}:H;HEHEf= tHEf=t HEf=u6}uH fXGrH}EHEf=(}uH XG+H XGHEHxHuE}uH ʓXG֋8HEHx=t'H XG訋EHEHxHuE}tHE9E.UHH0H}HEHEHEhHEHE#HEH0HEH8tHEH@HEH}uH}u!H}HEHUHEHBHEHEHEH@HEH}uHEUHH@H}HuHEHEHEHEHE_HEH0HEH8t HEHE2HEH@HEH}2H}tHUHEHBHEHEHEH@HEH}uHEH@HEH}qH}u HEHEkH}u HEHEZHEH@HuHUHEHBHEHE7HEHE HEH@HEHEH@HuHUHEHBHEHEHEUHH0H}HE(YGaHA(HEH HEHHUHEHB0HEHP0HEHP8HEH H HEcHEH@HE3HEH@HEHEH0HEHH8H}x0HEHEH}uHEH@HEHHEH}uUHH0H}HEHEHE@H}+AHEH}tHUHuL@HEHEHEHEH@ HEH}uH}u HEHEH}1H1HEHEHEHEUHH0H}HEHEHEHEFH}@HEH}tHEHUHP HEHEHEHEHEHEHEH@ HEH}uHEUHH@H}HuHUHMLEȿW,HEH}t HUHEHYH,HHEHH}tH}HHEHPH}tH}nHHEHP(H}tH}HHEHP0H}tH}8HHEHP@H}UHHH}HE-E} EHHYGHEH@H0Y]2YGYI14YGY8 6YGY'8YGYHEHxdHEHxWS:YGYYGYɂ @YGY踂BYGY观UHHH}H}u HE9HEf= uHEH@HE H}YYHEHEUHH`H}HEHx0HEHEHP0HEHP8HUHEHB0HEHx0^HHEHPHEHx@hHEH}9HHEHP Et H}2t9HEH@HtHEH@HHEHEYGHuYGmt9HEH@ HtHEH@ HHEHEYGHuYG*HHEtHEHH0YGyt9HEH@HtHEH@HHEHEYGHuYG6tHEHH0YGt9HEH@ HtHEH@ HHEHEYGHuYGNHEHPHEH@H9uHEHP HEH@ H9t(t ZGHEHHE~t ZGHEH@Ht HEHpHEHx/HHEHPHEH@8HEnHEH@8HEHuH},?uHEH@ HEH}uH}u)H}J;HEHEHP8HEHP HUHEHB8HEH@ HEH}uJ'HEHEHHHEHHUHEHBHHEHPHEHHEH@8HE"HEH@ HEHu9HEHEH}uHEH@0HE"HEH@ HEHuN9HEHEH}uHEH@@HE"HEH@ HEHu9HEHEH}uEH}t tHEHH0ZG}HEH@0HE8tt H}|atWG|HEH@ HEH}u5t5*ZG|t jbHCHEHHEH-EEUHSHHH}HEH@(HtHEHH03ZG|t H}H}tjyAZG|jHEH@@HY<tMZG{HEH@@HE8t H}tWGg{HEH@ HEH}ut YZG{HEHX@HEH8*HAHڿHEHH0[ZGzHEH@HE"HEH0XGzHEH@HEH}u׿mZGz!tHEH@(H}}HEH@(f=HEH@(H@ Ht?HEH@(H@HE HEH@ HEHEH@ HuHEH@(HP HEHP HEH@(H@HEHEHE HEH@ HEHEH@ HuHEH@(HPHEHP HEHp(u5HUHEHB(H}@EHEH@(HEHEH@(HP HEHP(HEH@ HEf= thHEH@0HtOHEH@0HE&HuH}9t E3HEH@ HEHEH@ HuHUHEHB HUHEHB0HE-E}~EHŐZGH}cHuȿp4H}G}tHuȿN4H}%HEH@H@ HtHE{xZG3HEH@H@ HtHELxZGHEH@HEHEHP(HEHP }t HEHE H}[4HEHEHP@HEHP HEH@HEHEHx.4HHEHP HEHP HEH@(HB H}+HHEHP(H}HEHH0HEHpHEHUIHEH@H@ HtHEUxZG HEH@H@ HtHE&xZGHEH@HEЃ}t HEHE H}E3HEHEHP@HEHP HEH@HEHEHP(HEHP HEHxz3HEHEHP@HEHP HUHEHB@}tHuȿ!2H}HEH@H@ HtHENxZGHEH@H@ HtHExZGHEH@HEHEH@@HEHEH@HEHEHP(HEHP HEHP(HEHP HEHH0HEHpHEHUI1H}HHEHP(}tHuȿ$1H}HH[UHSH8H}H}u HEHEHE-Eԃ} w{HcMԸHHHUHE%AHuHE% Hu4JHEHxHHEHPHEHxsHHEHPHEHxYHHEHPHEf=HEH@f= HEH@H@f=uxHEH@f= ugHEH@H@f=uRHEH@HPHEH@HpB0Hú+0HHڿ 0HEHEf=HEH@f= HEH@H@f= uuHEH@f= udHEH@H@f= uOHEH@HPHEH@Hp/Hú x/HHڿ h/HEHEHEHEHEHEH8[UHH H}H}mt^H}HEyu st?H y ZGqH}\H yZGq*H}l/HE(YGHuHHUAHEHH'H}HHEH}uӋu|H}H}HtSZGr5ZGq5[Gq5=[GqQ[GVrUHH H}HuHEHH0HEHH8 qt EHEHpHEHx1EEUHH H}H}sHE-E} YHcMHHHUHE% Hu!HEHHE@HuHEHE HEHxsHHEHPHEH@HuHEHpT,HEHEHx/HHEHPHEH@HuHEHp,HEHUHUHEHxHHEHPHEH@HuHEHxHESHEHxHHEHPHEH@HuHEH@HE HEHEHus+HEHEUHHĀH}HHE0HEHH8Huou HEHEHEH@ HEH}uH}X[GnHEHEHEc[GHEHuH}HM(tgEEHHE<_t HE}?~}?~Huj[GEHHHUH}{[GSoH}HEHEHEUHH H}H}HE@tHE@HE@tHEHH0[GAnHEH@HEZHE@uCHEHH8nH{Su"HEHH8X[Gmu -HEH@ HEH}uUHH0H}HuH}HE5tHUHuؿ[GmHHEpHEHH8Humu HE@CHEH@HE.HEHH8Hulu HUHEHHEH@ HEH}uHEH@ HEH}uUHH H}HEE}t9}}E- HEHEHxHHEHPHEHxHHEHPHEH@Ht HEH@Hu r(HEHEHEHEHx&HHEHPHEHxHHEHPHEH@Hu%HEH@Hu HE'HEH@HEHEH@Hu HEH@HEHEHEHEHEHEUHH0H}HuH}HEH}zHEt:[GikH}[GQkH} lH}tH}u 9'HEHUHu!'HEt"[GjH}{ kHEUHHPH}HuHEHEHEH@HtgHEf=u HEH@Hu HEHEHEH@f= tcHEH@f= tRHEH@f=tAHEHEHEf= t'HEf= tHEf=t HEHEcHEH@HEH}AHEHE,HEH@HtHEH@HEHEHEHEf=HEH@f= HEH@H@HEHEHEHEH;EHEH@HtHEH@HEHEHEHEf= ueHEH0HEH@H8huJt&Hu[G iH} i$HE6HEH@HEH}FHEH@HEH}HEHEHEUHHHHEHEH@HErHEHH0HEHxHHEHPHEH@Ht7HEH@f=u&HEH@H;Eu HEH@ Ht HE@HEH@ HEH}uHEH@ HEH}bUHH H}HEH@HEtHEHHtHEHHHEHE[GHu[GgHEHx'HEHHEPHEp[GfgHEH@ HEH}uUHH0EH{HEHE@HEH@HEHE@HEH@ HEyHE@^HEHH0HEHH8Yf=CtnHEHHHEHH0[GfH}\G|fHEHx "\G`fHEHx )gHEH@Hu,HEHp! 3"HERHEH@Hu,HEHp! !HEHEHpHEHxHEH}HHHEHPHE@HE@HEHEH@ HEH}|HEH@ HEH}EHEH@ HEH} EUHH0H}HuEHEPHE@8HEH@HEyHE@ubEHEH@HEHEt#HEHHHEHH0(\G3`HE@tPHE@uDHEHH8;\G_uHEHEHEHEHE@"HEHEHEHEHEHEHEHEHEHH0HEHH8HEHHHEHEc[GHDžxHuH}Hx(uW&uMHEHHHPH}C\G_HEHH0H}ZHEH@ HEH}vHEH@ HEH}.}t } EUHHĀ}ESt EEHEHHE}tHE@^HE@NHEH@ HE2}tHE@HE@HuH}HEtBHEHHHEHHuH\G]H}f\G^H}HEHH0HEHH8HEHHHEHEc[GHEHuH}HM(uW?uMHEHHHPH}C\G]HEHH0H}sHEH@ HEH}HEH@ HEH}u}t } HuΉuEUHHH}H}HEHx HE@t ItxH ci\G[HEHpHEHxtH5c1\HEHHH=rco\G[UHH H}H}uHE@ugHE@HEHHH=c}\GI[ktGH b\GZHEH@Hx8PH b\GZHEHHHEHEc[GHEHuH}HM(u.u$HEHHHPH=Ib\GZH 3b\G?ZQHEHx>uH a \GZH a\GYzrUHHPH}HuHUHMп(HEH}菺HHEHH}EH HHEHPtQHu࿩\G6ZH}ʾ\GZHEHx设HEHH0\GYHEH@Ht HEHxHHHEHPHHEDHEHH8Hu;Yu!HEHPHEHP HUHEHBHEH@ HEH}u(HEH}rHHEHHUHEHBHUHEHBHEHEHEc[GHEHuH}HM(uHE@H1HUHB HEHUHHHEHE@HEH@ HEH}uUHHEt;\GHE6uHE@y;\GHEH W_\GcW H 7_\GCW2H}oEErtUu\GW}H}"H}t'HE@tH ^ \GVH}u)HHuH ^\GV2H}HHEH}HEH@ HEH}ujtH '^\G3VH ^ ]GVÐUHSHH}ԋEHHHHEH}O~fHHH/tHu]GVHEHHHEHEHHHHHEHYH\HEHEHEH`YHEHEH`YHtHEH`YHEHEHEHEHUH`YHUH`YHEH}~HEH`YH`YHEHEHEHHYHHUHcHYH]HEHHEHHYHUHEHHHHHHEHYHEHHHEHHE(HEHHHUHEHHEHHHEH)HEHYH;EvHEHEHH`YHPHcH`YHEHYHEHUHEHHYHUHUHEHHEHUHEHHHHEHHEH;E|HEHHEEHcHEHHѸHEHH[UHH H}HEHEHEH(HEH%H=Ut-]G˾HEHHHEHHEHHEH}O~HHHFHEHEHHYHPHcHYHEHYHEHHUHEHYUHH D]G TEkEHHYHEEHH`YHEEHHYHEHEH EH EHt!HEHMHUuI_]GRHE}O~ÐUHH H}H}u HEHEHEf=t?HEf=uV0HEH@HEHEHPHEHPHUHEHBHEHEHEH@HtHEH@HEf9tHEHxcHHEHPHEHxKHHEHPHEHEHEUHH H}H}u HEHE[H} HEH}t HEHE=HEHxHHEHPHEHxHHEHPH}& HEHEUHH H}HEf=tHE}x]G5HEH@-E} $EH^Gt ]GQHEHp HEH@HEfpt ]GQHEHp HEH@HEf 0t ]GJQHEH@H@HEHEHp2 HEH@Hu HEHE:t ]GPHEf t ]GPHEf t ]GPHEf HEH@fHEHxFHHEHPHt ]GbPHEf)t ]GCPHEfHEH@H@HEHEH@H@Hut HHHEHPHEH@fHEH@HEH}HHEHPH}2HUHHP}HuHEH}HE;Eu%HEHp}HEHp}H} HEH|HuHEHlVH}HEHS;Et HE`YHEH.HEHEHxHEHEH0HEH8ME}}y4H}uHHu} HHEHHE>HEHEHEH@HEHE;EuHEH@HcHEHHEHEH8HEHEH0HEH8 ME}tB}yHEHHu}w HHEHHEH0HU}X HHEHUHH}HuHE;EtHEHpHEH@HEfUHHH}HEH}uHEHPHEE}t}tHEHPhHdHu}tHu$}hH6HEHEf=uHEH@HX HEHXHXHEHEf= u(Huȿ HE>HEf=u1H5HBHEf=uHEH@H` HDž`H`HEH}H@HEWH0HEHEH;EHEfHEfHEf=uHEH@Hh HEHhHhHEHEf=uHEH@Hp HEHpHpHEHuH}< tHuпa$HUHuؿtHuп;HEf=uHEH@Hx HDžxHxHEH}HEf=uHEH@HEHEHEHEH}};HHEHEf=uHEH@HEHEHEHEHEHEf=u(HuȿcHE>HEf= u1H5D cHHEf=uHEH@HEHEHEHEH},HHE<HHEHEH;EHEfHEfHEf=uHEH@HEHEHEHEHEHEf=uHEH@HEHEHEHEHEHuH}tHuп$HUHuؿk tHuпHEf=uHEH@HEHEHEHEH}HEf=uHEH@HEHEHEHEH}HHEHE&HEfHEH@HEHuȿ$H}u"H<H@H1H*HEHUHEHBHEH@HEHEH@HHEH@HHEf=t HEf=u~HEH@HEHEH@HEfHEH@HPHEHPHEH@HPHEHPHEH@HPHEHPHuؿ?HEHEHEH@HEH}H=Hu#H}ux^GHHEHPHHPHPÐUHH H}EHHEsHEH8HutMHHHHE@tHEH0H}t HEHE4HEHxHE!HEH@HEHEH}uHEHEUHH H}H}u HEHEH}/HEH}t HEHEHHH 4HEH}HHEHH}HHEHPHEHpHEH8t,HE@HEHprHEHHEHPHHEHPHEHwHEHxaHEHEUHH5]^G^DH5O^GHDUHH}HuH}tK}tEEUHH H}HuH}uH}u EH}tH}u EHEHEf9t EHEH@Ht8HEH@Ht+HEH@H0HEH@H8G@t E<HE-E} EH^GE HEH@Ht HEH@Hu^GQHEH@H0HEH@H8?EHEHpHEHxEHEHpHEHxu EvHEHpHEHx}u ETEKHEHUHuE/HE^G?^GxEEUHH H}HuH}uH}u EH}tH}uEH}uHEf= u%EHEf= u EEHEHEf9t EHEH@Ht5HEH@Ht(HEH@H0HEH@H8%>t EKHEHpHEHx t"HEHpHEHxt EHuH}EEUHH H}HuH}uH}u EH}tH}u EHEHEf9t EHEH@Ht5HEH@Ht(HEH@H0HEH@H80=t EBHEHpHEHxFt"HEHpHEHx-t EEEUHH H}HuH}u E_HEf=uBHEHpH}uHEHpH}t EEEEHuH}jEEUHH H}HuH}u E_HEf=uBHEHxHutHEHxHut EEEEHuH}EEUHH H}HuH}u E_HEf=uBHEHpH}uHEHpH}t EEEEHuH}bEEUHH }HuHUH}u ElEE}t}t}t&6HuH}E:HuH}E(HuH}EX_G>EEÐLd$Ll$ILt$L|$IH\$Hl$H8Ax9HHH)IIu&H\$Hl$Ld$Ll$ Lt$(L|$0H8ff1HHLLDHL9rfÐHH09UHSHHXHtxWfffHCHHuH[ÐH;H$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $   !""""""&&&&''$$((+++.,,,*1214033%%85:55<5555666>66666@6A6B6C666D6E6F6GH6;;JI ##KK-----------------------L---M-N-----------??OOOOOOOOPPPPQQQ//==99RRSSSS7777)))  )* 89: #$ !,<=>'(+OS`u^|z1k/WXtMGJ"javx2-[rdeCN?ATf]43b06Vih_E.\sZmR}{gwyoq~K{,K9V6(&'1R$aE|b}H~=>c?@efQ I`8"!#  zgRfLg,fXaq{{s779Nuy7`>  oO     , |, Rg S> >                      t + $ q h , , , , ,./ B -  66**67 H ;@BK>   ;< V V : ? lh pyt+(|v LN 29  }~E P 7Fc, 7DIOZdxxm R xKxx xg+7(oPNxxxm R+5anRRVU  (VQ* ? Llhe7PYOYNJlc@lFT"nM#PPPPPPPPPP]^AEP5abcLDBUiXlQmjkQ;PP=> 7~7;@%')+UU<UUUUUUZU*+PP[ JJU%-.Q!Q324[/7UU7c0c5cc  8c:;vqUUD{BCF5G5I55NOPDDDDYLnFlPPP[PPYMY[PPPFPlPPlnPPPPPPPpPPPPPPPPPPPPPPPPPPPPPPU-7UU7UU,.5/U%U69:U<U?UU@UAFUUUUUU7BG7DUUSUUUUUUUUUUUUUUUUUUUUUW_deghoprtuwx}y;)7CFKFFFFFFFFFFFFFFFFFFFFF%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&f `^L_LLLSTUVWXYZ[\]LLLLLLLLLLLLLLLLLLLLLLLHHHHIIIHHHHHHHHHHHHHHHHHHHHHHIPPPPPPPIIIIIIIIIIIQPIIIIIIIIIIIPP 0PPPP1PPPPdPPPPPPPPPPPPPPPPPPPPPPP\d$&(*24yd^HHd3Ysdd|_STUVWXYrstuZ[\]y^z_y^zy_^hijSTUVWklmnopqyXY^ rstuZvw\xz_]y^hijSTUVzW_klmnopqXY rstuZvw\x`]^z_hijSTUVWklmnopqXY rstuZ\x_]hijSTUVWklmnopqXYrstuZ\x]hijSTUVWmpqXYrstuZ[\x]STUVWXYZ[\]'h[((,(--%)y{*+9-(/})-)"1V:4%&()*+,-./}56:.[@:}p<=;=>[}[)5/O2.%SDU(*[O,}/#$[]^}  %&'/jk21}%&9()*+,-:/#$|}@153:[)9:;<=/>?2D1HI9;<=..(115/]^2HI#$5{(11%&)()*+,-_/Z|}{f5:5]].{,9}(..1  C}(((1)]^(({ {((((1..111:|}]).1.C>?"#$%&'.[FG1C/>?25,6789:;<=>?@ABCDEFGHI(]/2))([)[))))#$))}"#$%&'/)}2:/2CC6789:;<=>?@ABCDEFGHI?,)}>?(.{)1}])])}}))})"#$%&'BB))}{/),2){)678}){}>?@ABCDEFGz%&()*+,-/:]}}"#$%&'}]^/2%678*+-&/()+,-|}:]^>>&()+,-"#$%&'|}:/2678]^)>>|}%*+-/B"#$%&'/2678>?@ABCDEFG}"#$%&'/2678)>?@ABCDEFG%*+-/"#$%&'&(),/2678:>?@ABCDEFG}]^&(),"#$%&'|}:/2)678@ABCDEFG]^&(),|}%&(:*+,-/%&})*+-/%&]^*+-/^|}^|"#$%&'BCDEFG/|2678>?@ABCDEFG"#$%&'/2678>?@ABCDEFG"#$%&'&(),/2678:>?@ABCDE>?@ABCDEFG]^>?@ABCDEFG&(),@ABCDEFG|}:]^"%&'&(),678|}:]^&(),|}:"#$%&'/]^2678>?@ABCDE|}(-"#$%&'/2678>?@ABCDE~),"#$%&'/2678>?@ABCDE"#$%&'&()},/2678:>?@A]^    &(), !|}:.13:]^(),:|}"#$%&'/]^26789|}(),"#$%&':/2678>?@A]),"#$%&'|}/2678>?(),"#$%&':/}2678>?](),:}]"#$%&'),/2678}>?"#$%&'/2678}"#$%&'/2678>?H"#$%&'%&/*+2-./678v>[^"#$%&'/2678|}%&*+,-/%&*+-/%&)*+-/%&)*+-/  ^ ^"^|56^%&|})*+D-/|OSU|EPjk]^_`^z9:;<=>?@ABCDEFGHIy%&|*+-/:^%&*+-/|>?@ABCDEFG>?@ABCDEFG^>?@ABCDEFG>?@ABCDEFG%&(*+--/%&*+-/%&.)*+-/%&)*+-/>?@ABCDEFG]^%&*+-/]^\_^fg%&|~*+^-/%&|*+-/%&|*+^-/%&|*+-/>?@ABCDEFG^|^^|^||@ABCDEFG|    (- !*+,-.13:>?@ABCDEFG>?@ABCDEFG>?@ABCDEFG>?@ABCDEFG{(}~->?@ABCDEFG>?@ABCDEFG?@ABCDEFG?@ABCDEFG@ABCDEFG{~(-     !%&'*+,-./01234{(~:-    ( !-%&'*+,-.0134{~:(-   { ~ !%&'*+,-.0134(:-{~    [ !%&'*+,-.0134~:     !*+,-.134:     !*+,-.134:     !.13:syntax errorinitializer in parameter list:root:max nr of processes is 255 undeclared variable %sneed constant initializer for %s claim %s redefinedtrace %s redefinedtypedef %s must be globalinvalid use of '%s'label preceding declaration,label predecing xr/xs claim,malformed declarationcannot %s mtype (ignored)mtype declaration must be globalwidth-field %s too largeundeclared variable: %snot an eventbad label-name %sarithmetic on chanarithmetic on chan id'sused 'run' outside proctype:init:varrefinvalid PROVIDED clauseusage: provided ( ..expr.. )unsigned cannot be used as mesg typerargeval rargyacc stack overflow-H@j@-H@-H@-H@-H@-H@-H@-H@-H@-H@-H@-H@-H@v@@@T@@@@@h@@@Z@@2@w@@'@h@@@@@-H@-H@+@q@@ @]@@? @ @ @ @!@-!@T!@d!@!@!@!@!@!@ "@!"@7"@-H@-H@M"@"@"@q#@#@#@#@#@#$@_$@$@$@%@w%@%@s&@&@5'@u'@'@'@'@ (@T(@])@m)@)@)@)@)@f*@y*@ +@`+@j+@+@+@~,@-@-@.@/@/@/@0@C0@0@0@0@41@G1@1@1@u2@2@!3@W3@|3@3@3@4@t4@4@4@4@5@+5@S5@5@5@-H@-H@-H@-H@5@5@5@6@J6@}6@6@6@7@I7@|7@7@7@8@H8@{8@8@8@9@G9@z9@9@9@:@+:@:@;@;@<@><@Q<@<@<@7=@a=@w=@=@=@&>@d>@>@>@&?@j?@z?@?@?@?@?@@@;@@Q@@k@@@@@@A@7A@jA@A@A@ B@BB@yB@B@-H@B@$C@cC@sC@C@C@C@C@@D@D@E@IE@E@E@"F@uF@F@cG@}G@G@H@procedure name %s redefinedstruct { char *c; char *t; } code_lookup[] = { { "%s", \"%%\n... }, { (char *) 0, "" } }; cannot happen, missing inline def %s"Matched""UnMatched""unMatched""StackOnly"expecting '[Un]Matched', saw %sc_state format (%s)array initialization error, c_state (%s)void globinit(void) { Global now.%s = %s; Hidden %s = %s; } void locinit%d(int h) { Local uchar *this = pptr(h); ((P%d *)this)->%s = %s; %s; uchar c_state[+%ssizeof(%s)%s%s]; uchar c_stack[WS"Hidden"%s; /* Hidden */ #if defined(C_States) && defined(HAS_TRACK) dereferencing state object: %sextern %s %s; #endif void c_stack(uchar *p_t_r) { #ifdef VERBOSE printf("c_stack %%u\n", p_t_r); if(%s) memcpy(p_t_r, %s, %s); else memset(p_t_r, 0, %s); p_t_r += %s; } void c_update(uchar *p_t_r) { printf("c_update %%u\n", p_t_r); memcpy(p_t_r, &%s, sizeof(%s)); p_t_r += sizeof(%s); void c_unstack(uchar *p_t_r) { printf("c_unstack %%u\n", p_t_r); memcpy(%s, p_t_r, %s); void c_revert(uchar *p_t_r) { printf("c_revert %%u\n", p_t_r); memcpy(&%s, p_t_r, sizeof(%s)); /* start of %s */ \#%s /* end of %s */ #define C_States 1 #undef C_States P%s->spin: in proctype %s, ref to object in proctype %s invalid variable ref in '%s'if (!(%s)) { if (!readtrail) { depth++; trpt++; trpt->pr = II; trpt->o_t = t;trpt->st = tt; Uerror("%s"); } else { printf("pan: precondition false: %s\n"); _m = 3; goto P999; } } now.{ _m = 3; goto P999; } } } ++--c_expr %s has side-effectsinline fcts too deeply nestedwrong nr of params on call of '%s'cyclic inline attempt on: %s#identmalformed preprocessor directive - # .malformed preprocessor directive - # .linenomalformed preprocessor directive - .fnamemalformed preprocessor directive - fname.bad param to inline %sc_code%dspin: saw char '%c' bad inline: %s /* line %d %s */ #line %d %s {inline text too long%3d: %s, warning: empty inline definition (%s) string not terminatedcharacter quote missing: %s|@|@ @|@|@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @|@ @}@}@ @ @ @}@@@@@@X@@@@@@@Y@@@@@@@@@@@@@=@@@@π@?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@q@activeassertatomicbitboolbreakbytec_codec_declc_exprc_statec_trackD_proctypedochanelseemptyenabledevalfalsefifullgotohidden:hide:ifinit:init:intlenlocal:local:mtypenemptynever:never:nfullnotrace:notrace:np_odofpc_valuepidprintfprintmpriorityproctypeprovidedrund_stepinlineshortskiptimeouttrace:trace:trueshow:show:typedefunlessunsignedxrxs_lastspin: line %d replacement value: %s formal par of %s matches replacement value,()'%c'~@@@@@i@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@r@g@U@@@&@C@@@@@@ˈ@@@bitbyteproctype %s, '%s %s' could be declared '%s %s' redeclaration of '%s'(%s) has invalid width-fieldunsigned without width-field(%s) only an unsigned can have width-field:hide:bit variable (%s) cannot be hidden:show::local:chan initializer for non-channel %sbad array size for '%s'error: x[rs] claims from %s and %s conflicting claims on chan '%s'non-local x[rs] assertionxr or xs of non-chan '%s'bad mtype definitionname %s appears twice in mtype declarationtoo many mtype elements (>255)%s%s.[%d] %d %s <:struct-field:> <:global:> <%s> %d struct %schan %s-exported as run parameterimported as proctype parameterused as l-value in asgnmntused as r-value in asgnmntpolled in receive stmntused as parameter in receive stmntused as parameter in send stmntreceived fromsent to %s by: to %s par %d, never used under this namespin: warning, %s, proctype %sglobal, '%s%s' variable is never used _attempt to read value of '_'_last_p_pid_nr_prself-reference initializing '%s'undecl var %s (assuming int)findlab through getglobal on %s cannot happen, cast_val%d->%d (%d)value (%s) truncated in assignment#ifndef XUSAFE setq_claim(, %d, ", h, ""%s"); #endif %s[%d] = ~G%s = %s = %s MSC: ~G %s %s %3d: proc %3d (TRACK) line 1 "var" (state 0) [printf('MSC: globvar\\n')] = %s %s(%d):%s~G%s(%d):%s = %s(%d):%s = MSC: ~G %s(%d):%s %s (state 0) [printf('MSC: locvar\\n')]/lib/cppseed used: %d spin: %d error(s) - aborting Exit-Status 0%s %s > %sspin: preprocessing failed rwspin: cannot cp %s to %s use: spin [-option] ... [-option] file Note: file must always be the last argument -A apply slicing algorithm -a generate a verifier in pan.c -B no final state details in simulations -b don't execute printfs in simulation -C print channel access info (combine with -g etc.) -c columnated -s -r simulation output -d produce symbol-table information -Dyyy pass -Dyyy to the preprocessor -Eyyy pass yyy to the preprocessor -f "..formula.." translate LTL into never claim -F file like -f, but with the LTL formula stored in a 1-line file -g print all global variables -h at end of run, print value of seed for random nr generator used -i interactive (random simulation) -I show result of inlining and preprocessing -J reverse eval order of nested unlesses -jN skip the first N steps in simulation trail -l print all local variables -M print msc-flow in Postscript -m lose msgs sent to full queues -N file use never claim stored in file -nN seed for random nr generator -o1 turn off dataflow-optimizations in verifier -o2 don't hide write-only variables in verifier -o3 turn off statement merging in verifier -Pxxx use xxx for preprocessing -p print all statements -qN suppress io for queue N in printouts -r print receive events -S1 and -S2 separate pan source for claim and model -s print send events -T do not indent printf output -t[N] follow [Nth] simulation trail -Uyyy pass -Uyyy to the preprocessor -uN stop a simulation run after N steps -v verbose, more warnings -w very verbose (when combined with -l or -g) -[XYZ] reserved for use by xspin interface -V print version number and exitonoffspin: dataflow optimizations turned %s spin: dead variable elimination turned %s spin: statement merging turned %s spin: rendezvous optimization turned %s spin: case caching turned %s spin: bad or missing parameter on -o@P@@@^@Spin Version 4.3.0 -- 22 June 2007spin: warning -o[123] option ignored in simulationsspin: cannot open %s progressaccept_%sspin: missing argument to -freading input from stdin:spin: -c precludes all flags except -t__p_pid_last_nr_pr@@@Ҽ@@I@@@̽@۽@@@ @>@@@@@[@t@@M@@t@@@@@@@@@x@@ü@@@t@@@@@@ @/@i@@پ@@L@`@@@<@c@nofilenamespin: line %3d %s, Error: saw ' near '%s'not enough memoryspin: Warning, never claim has side-effectnever claim contains i/o stmntsspin: warning, make sure that the S1 model also polls channel '%s' in its claim spin: never, saw incompatible with separate compilationenabled()pc_value()spin: Warning, using %s outside never claim spin: Error, using np_ outside never claim '%c' = '%d'\b\t\f\n\rconditionsendrecvrecv poll %s(x->y:z)%sactive%s&&%s=%sassert%satomic%sbreak%sc_code%sc_decl%sc_expr%sc_state%sc_track%snevera constant%s--%sd_step%sd_proctype%sdo%selse%sempty%senabled%s==%seval%sfi%sfull%s>=%sgoto%s>%shidden%sif%s++inline name%sinline%sinit%slocala label-name%s<=%slen%s<<%s<%smtypean identifier%s!=%s! (not)%snempty%snfullsub-sequence%snp_%sod%sof%s||%s!!%spc_valueprocess name%sprintf%sprintm%spriority%sproctype%sprovided%s?%s??%s>>%sruntoken: ::%sshow%s!a string%strace%stimeoutdata typename%stypedef%sx[rs]%s- (unary minus)a typename%sunlessQ@n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@i@V@@@@@@@@@@@@@@@@@@9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4@Q@n@@@@@@@`@}@@@s@ @n@@@@@@V@@@@@@@C@@@@9@@@V@@@4@@@x@@`@@!@@}@@ @@&@9@@@C@+@H@&@@@>@@@Q@@@e@@@@[@s@%%%%Pages: (atend)%%%%PageOrder: Ascend%%%%DocumentData: Clean7Bit%%%%Orientation: Portrait%%%%DocumentNeededResources: font Courier-Bold%%%%EndComments%%%%BeginProlog50 dict begin/baseline 0 def/height 0 def/justify 0 def/lineLength 0 def/spacing 0 def/stipple 0 def/strings 0 def/xoffset 0 def/yoffset 0 def/ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end /Temporary exch definefont} bind def/AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if/DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate justify lineLength mul baseline neg translate dup stringwidth pop justify neg mul 0 moveto stipple { gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate%%%%EndProlog%%%%BeginSetup/CL 2 def%%%%IncludeResource: font Courier-Bold%%%%EndSetupgsave /Courier-Bold findfont 8 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor %d %d [ Spin Version 4.3.0 -- 22 June 2007 (%s -- %s -- MSC -- %d) ] 10 -0.5 0.5 0 false DrawText grestore %%%%Page: %d %d save 10 %d moveto %d %d lineto 10 %d lineto closepath clip newpath %f %f translate %f %f scale ?msc%s.pswcannot create file '%s'%%!PS-Adobe-2.0 %%%%Creator: %s --%%%%Title: MSC %s %%%%BoundingBox: 119 154 494 638 %s%d.trail%s.trailrcannot open trail file%%%%Trailer end %%%%Pages: %d %%%%EOF spin: wrote %d pages into '%s.ps' %d %d moveto %d setlinewidth 0 setlinecap 1 setlinejoin %f %f %f setrgbcolor AdjustColor stroke grestore closepath fill ?>/Courier-Bold findfont 6 scalefont (%d) ] 10 -0.5 0.5 0 1 setlinewidth 0 setlinecap 1 setlinejoin 0.92 0.92 0.92 setrgbcolor AdjustColor stroke %d:%s (%s) ] 10 -0.5 0.5 0 ,@?showpage restore C?max length of %d steps exceeded postscript file truncatedmax nr of %d steps exceeded abortingMSC: too many queues (%s)too many channel typesError: sending to an uninitialized chanSTDINinvalid use of STDINError: receiving from an uninitialized chan %s type-clash in %s, (%s<-> %s)%s->Send send%3d: warning: missing params in send %3d: warning: too many params in send %3d: warning: missing params in next recv %3d: warning: too many params in next recv Recv [Recv] <-recvrv-sendSent %3d: warning: missing params in rv-send %3d: warning: too many params in rv-send cannot happen, s_snd_-[%d]Sen?!,[]q\p %3d%3d . %s%c(state -) [values: %d(state -) [%dline %3d %s %s %s queue %d (%s) mtype name %s too long%d queue %d (%s(%d):%s[%d]): %s): invalid asgn to chaninvalid use of chan name_nr_pr_pattempt to assign value to system variable %sjump into d_step sequencespin: line %d %s, redundant skip -error: (%s:%d) label %s placed incorrectly =====> stmnt unless Label: stmntsorry, cannot jump to the guard of anescape (it is not a unique state)=====> instead of "Label: stmnt unless stmnt"=====> always use "Label: { stmnt unless stmnt }""atomic { Label: statement ... }""Label: atomic { statement ... }""d_step { Label: statement ... }""Label: d_step { statement ... }""{ Label: statement ... }""Label: { statement ... }"=====>instead of do (or if) :: ... :: Label: statement od (of fi)=====>always useLabel: do (or if) :: statement od (or fi)cannot happen - labelsnon_local jump in d_step sequencesequence must have at least one statementoAA&A]AAAAeAunexpected: loose endsduplicate `else'cannot happen - if_seqdubious use of 'else' combined with i/o,%A4&A%A4&A4&A&A&A&A%Aunexpected unless structurelabel %s redeclaredundefined label %sacceptendprogresscannot happen - mov_lab %sspin: label '%s' (proctype %s) unknown label '%s'spin: cannot remote ref a label inside the same proctypefix_dest error (%s)cannot reference label inside atomic or d_step (%s):b%dmisplaced break statementd_stepatomicspin: warning, line %3d %s, atomic inside %s (ignored) spin: warning, line %3d %s, d_step inside d_step (ignored)spin: error, line %3d %s, unless in d_step (ignored) label %s %d <%s> Starting %s with pid %d --parsing error, no sequence %s%d:%sproc %d = %s 0: proc - (%s) creates proc %2d (%s) priority %dspin: too many processes (%d max) spin: saw %d parameters, expected %d wrong number of parameters:never:spin: couldn't find claim (ignored)0::never:spin: remote ref to proctype %s, has more than one match: %d and %d ------------- final state: -------------#processes: %d es%d process%s created cannot happen - weightsSelect a statement choice %d: unexecutable, [ + Escape] [else] unexecutable, [else]Make Selection %d no executable choicesSelect [1-%d]: %d %s choice is outside rangespin: error, cannot use 'enabled()' in models with synchronous channels.warning: never claim not used in random simulationwarning: trace assertion not used in random simulation-------------depth-limit (-u%d steps) reached <> [stmnt in d_step blocksterminates timeout rv-attempt in d_step sequencesaw preinitialized struct %ssetlocals: cannot happen '%s'missing actual parameters: '%s'array in parameter list, %stype-clash in params of %s(..), (%s<-> %s)spin: indexing %s[%d] - size is %d indexing array '%s'%3d: proc -%2d (%s) MSC: ~G line %d -line %3d %s (state %d) spin: error, type: %d not a labelname: '%s'remote ref to label '%s' inside d_stepunknown labelname: %sspin: remote reference error on '%s[%d]' refers to wrong proctype '%s'_premote ref: %s[%d] %s not foundhave only: %d %s Select stmnt () choice 0: other process choice %d: unexecutable, choice %d: (else) Make Selection %d Select [0-%d]: %s choice outside range unexecutableStmnt [] has escape(s): ] Escape takenassignment%s: assertion violatedspin: text of failed assertion: assert(spin: bad node type %d (run) spin: trail file doesn't match spec?abortingqAwAwAwA rArAwAwAwAqAqAwAqAwAaqAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAtAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAtAwAwAwAwAwAwAwAwAwAwAwArAwAwAwAwACvAwAwAwAwAwAwAwAwAwAwAwAwAtAtA-vAvAwAwAwAwAwAwAwAwArAwAHqAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwATwAXvAvAvAwA wAwAwAuAuAquAuAuAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAwAuAuAwAwAwAwAwAwAwAwAuA&uA?uAXuAqAwAwAuAwAwAwAwAwAwAwAvAwAwAwAwAsAsAsA`sAdrA8rA4sAsA2tA\tAwAwA/qAtoo few print args %s%c%d%o%u%xbad print cmd: '%s'printf string too longzA{A0{A{A{A{A{A{A{A{A{A{A|{A{A{A{A{A{A{A{A{A{Aused: enabled(pid=thisproc) [%s]#if defined(VERI) && !defined(NOREDUCE) && !defined(NP) if (!state_tables#ifdef HAS_CODE && !readtrail#endif ) { printf("warning: for p.o. reduction to be valid "); printf("the never claim must be stutter-invariant\n"); printf("(never claims generated from LTL "); printf("formulae are stutter-invariant)\n"); } UnBlock; /* disable rendez-vous */#ifdef BITSTATE if (udmem) { udmem *= 1024L*1024L; SS = (uchar *) emalloc(udmem); bstore = bstore_mod; } else SS = (uchar *) emalloc(1L<<(ssize-3));#else hinit();#if defined(FULLSTACK) && defined(BITSTATE) onstack_init();#if defined(CNTRSTACK) && !defined(BFS) LL = (uchar *) emalloc(1L<<(ssize-3)); stack = ( Stack *) emalloc(sizeof(Stack)); svtack = (Svtack *) emalloc(sizeof(Svtack)); /* a place to point for Pptr of non-running procs: */ noptr = (uchar *) emalloc(Maxbody * sizeof(char));#ifdef SVDUMP if (vprefix > 0) write(svfd, (uchar *) &vprefix, sizeof(int));#ifdef VERI Addproc(VERI); /* never - pid = 0 */ active_procs(); /* started after never */#ifdef EVENT_TRACE now._event = start_event; reached[EVENT_TRACE][start_event] = 1; globinit();go_again: do_the_search(); if (--Nrun > 0 && HASH_CONST[++HASH_NR]) { printf("Run %%d:\n", HASH_NR); wrap_stats(); printf("\n"); memset(SS, 0, 1L<<(ssize-3));#if defined(CNTRSTACK) memset(LL, 0, 1L<<(ssize-3));#if defined(FULLSTACK) memset((uchar *) S_Tab, 0, maxdepth*sizeof(struct H_el *)); nstates=nlinks=truncs=truncs2=ngrabs = 0; nlost=nShadow=hcmp = 0; Fa=Fh=Zh=Zn = 0; PUT=PROBE=ZAPS=Ccheck=Cholds = 0; goto go_again;}#ifdef HAS_PROVIDEDint provided(int, uchar, int, Trans *);intPrintf(const char *fmt, ...){ /* Make sure the args to Printf * are always evaluated (e.g., they * could contain a run stmnt) * but do not generate the output * during verification runs * unless explicitly wanted * If this fails on your system * compile SPIN itself -DPRINTF * and this code is not generated */ if (readtrail) { va_list args; va_start(args, fmt); vprintf(fmt, args); va_end(args); return 1;#ifdef PRINTF va_list args; va_start(args, fmt); vprintf(fmt, args); va_end(args); return 1;extern void printm(int);#ifndef SC#define getframe(i) &trail[i];static long HHH, DDD, hiwater;static long CNT1, CNT2;static int stackwrite;static int stackread;static Trail frameptr;Trail *getframe(int d){ if (CNT1 == CNT2) return &trail[d]; if (d >= (CNT1-CNT2)*DDD) return &trail[d - (CNT1-CNT2)*DDD]; if (!stackread && (stackread = open(stackfile, 0)) < 0) { printf("getframe: cannot open %%s\n", stackfile); wrapup(); if (lseek(stackread, d* (off_t) sizeof(Trail), SEEK_SET) == -1 || read(stackread, &frameptr, sizeof(Trail)) != sizeof(Trail)) { printf("getframe: frame read error\n"); return &frameptr;#if !defined(SAFETY) && !defined(BITSTATE)#if !defined(FULLSTACK) || defined(MA)#define depth_of(x) A_depth /* an estimate */depth_of(struct H_el *s){ Trail *t; int d; for (d = 0; d <= A_depth; d++) { t = getframe(d); if (s == t->ostate) return d; printf("pan: cannot happen, depth_of\n"); return depthfound;voidpan_exit(int val){ if (signoff) printf("--end of output--\n"); exit(val);char *transmognify(char *s){ char *v, *w; static char buf[2][2048]; int i, toggle = 0; if (!s || strlen(s) > 2047) return s; memset(buf[0], 0, 2048); memset(buf[1], 0, 2048); strcpy(buf[toggle], s); while ((v = strstr(buf[toggle], "{c_code"))) { *v = '\0'; v++; strcpy(buf[1-toggle], buf[toggle]); for (w = v; *w != '}' && *w != '\0'; w++) /* skip */; if (*w != '}') return s; *w = '\0'; w++; for (i = 0; code_lookup[i].c; i++) if (strcmp(v, code_lookup[i].c) == 0 && strlen(v) == strlen(code_lookup[i].c)) { if (strlen(buf[1-toggle]) + strlen(code_lookup[i].t) + strlen(w) > 2047) return s; strcat(buf[1-toggle], code_lookup[i].t); break; } strcat(buf[1-toggle], w); toggle = 1 - toggle; buf[toggle][2047] = '\0'; return buf[toggle];char * transmognify(char *s) { return s; }add_src_txt(int ot, int tt){ Trans *t; char *q; for (t = trans[ot][tt]; t; t = t->nxt) { printf("\t\t"); q = transmognify(t->tp); for ( ; q && *q; q++) if (*q == '\n') printf("\\n"); else putchar(*q);wrap_trail(void){ static int wrap_in_progress = 0; int i; short II; P0 *z; if (wrap_in_progress++) return; printf("spin: trail ends after %%ld steps\n", depth); if (onlyproc >= 0) { if (onlyproc >= now._nr_pr) pan_exit(0); II = onlyproc; z = (P0 *)pptr(II); printf("%%3ld: proc %%d (%%s) ", depth, II, procname[z->_t]); for (i = 0; src_all[i].src; i++) if (src_all[i].tp == (int) z->_t) { printf(" line %%3d", src_all[i].src[z->_p]); printf(" (state %%2d)", z->_p); if (!stopstate[z->_t][z->_p]) printf(" (invalid end state)"); add_src_txt(z->_t, z->_p); pan_exit(0); printf("#processes %%d:\n", now._nr_pr); if (depth < 0) depth = 0; for (II = 0; II < now._nr_pr; II++) { z = (P0 *)pptr(II); c_globals(); c_locals(II, z->_t);#ifdef ON_EXIT ON_EXIT; pan_exit(0);FILE *findtrail(void){ FILE *fd; char fnm[512], *q; char MyFile[512]; strcpy(MyFile, TrailFile); if (whichtrail) { sprintf(fnm, "%%s%%d.%%s", MyFile, whichtrail, tprefix); fd = fopen(fnm, "r"); if (fd == NULL && (q = strchr(MyFile, '.'))) { *q = '\0'; sprintf(fnm, "%%s%%d.%%s", MyFile, whichtrail, tprefix); *q = '.'; fd = fopen(fnm, "r"); if (fd == NULL) { printf("pan: cannot find %%s%%d.%%s or %%s\n", MyFile, whichtrail, tprefix, fnm); pan_exit(1); } } { sprintf(fnm, "%%s.%%s", MyFile, tprefix); sprintf(fnm, "%%s.%%s", MyFile, tprefix); { printf("pan: cannot find %%s.%%s or %%s\n", MyFile, tprefix, fnm); } } } if (fd == NULL) { printf("pan: cannot find trailfile %%s\n", fnm); pan_exit(1); return fd;uchar do_transit(Trans *, short);getrail(void) int i, t_id, lastnever=-1; short II; Trans *t; fd = findtrail(); /* exits if unsuccessful */ while (fscanf(fd, "%%ld:%%d:%%d\n", &depth, &i, &t_id) == 3) { if (depth == -1) printf("<<<<>>>>\n"); if (depth < 0) continue; if (i > now._nr_pr) { printf("pan: Error, proc %%d invalid pid ", i); printf("transition %%d\n", t_id); break; } II = i; for (t = trans[z->_t][z->_p]; t; t = t->nxt) if (t->t_id == t_id) if (!t) { for (i = 0; i < NrStates[z->_t]; i++) { t = trans[z->_t][i]; if (t && t->t_id == t_id) { printf(" Recovered at state %%d\n", i); z->_p = i; goto recovered; } } printf("pan: Error, proc %%d type %%d state %%d: ", II, z->_t, z->_p); printf("transition %%d not found\n", t_id); for (t = trans[z->_t][z->_p]; t; t = t->nxt) printf(" t_id %%d -- case %%d, [%%s]\n", t->t_id, t->forw, t->tp); break; /* pan_exit(1); */recovered: if (gui) simvals[0] = '\0'; this = pptr(II); trpt->tau |= 1; if (!do_transit(t, II)) { if (onlyproc >= 0 && II != onlyproc) goto moveon; printf("pan: error, next transition UNEXECUTABLE on replay\n"); printf(" most likely causes: missing c_track statements\n"); printf(" or illegal side-effects in c_expr statements\n"); if (onlyproc >= 0 && II != onlyproc) goto moveon; if (verbose) { printf("depth: %%3ld proc: %%3d trans: %%3d (%%d procs) ", depth, II, t_id, now._nr_pr); printf("forw=%%3d [%%s]\n", t->forw, q); c_globals(); for (i = 0; i < now._nr_pr; i++) { c_locals(i, ((P0 *)pptr(i))->_t); } else if (strcmp(procname[z->_t], ":never:") == 0) { if (lastnever != (int) z->_p) { for (i = 0; src_all[i].src; i++) if (src_all[i].tp == (int) z->_t) { printf("MSC: ~G %%d\n", src_all[i].src[z->_p]); break; } if (!src_all[i].src) printf("MSC: ~R %%d\n", z->_p); lastnever = z->_p; goto sameas; if (strcmp(procname[z->_t], ":np_:") != 0) {sameas: if (no_rck) goto moveon; if (coltrace) { printf("%%ld: ", depth); for (i = 0; i < II; i++) printf("\t\t"); printf("%%s(%%d):", procname[z->_t], II); printf("[%%s]\n", q?q:""); } else if (!silent) { if (strlen(simvals) > 0) { printf("%%3ld: proc %%2d (%%s)", depth, II, procname[z->_t]); for (i = 0; src_all[i].src; i++) { printf(" line %%3d \"pan_in\" ", printf("(state %%d) [values: %%s]\n", z->_p, simvals); } printf("(state %%d) [%%s]\n", z->_p, q?q:""); printf("\n");moveon: z->_p = t->st; wrap_trail();f_pid(int pt){ int i; for (i = 0; i < now._nr_pr; i++) { z = (P0 *)pptr(i); if (z->_t == (unsigned) pt) return BASE+z->_pid; return -1;void check_claim(int);bstore_mod(char *v, int n) /* hasharray size not a power of two */{ unsigned long x, y; unsigned int i = 1; d_hash((uchar *) v, n); /* sets j3, j4, K1, K2 */ x = K2; y = j3; for (;;) { if (!(SS[x%%udmem]&(1< RANDSTOR) return 0; { SS[x%%udmem] |= (1< 0) sprintf(fnm, "%%s%%d.%%s", MyFile, Nr_Trails-1, tprefix); else sprintf(fnm, "%%s.%%s", MyFile, tprefix); if ((fd = creat(fnm, TMODE)) < 0) { if ((q = strchr(MyFile, '.'))) if (iterative == 0 && Nr_Trails-1 > 0) sprintf(fnm, "%%s%%d.%%s", MyFile, Nr_Trails-1, tprefix); sprintf(fnm, "%%s.%%s", MyFile, tprefix); fd = creat(fnm, TMODE); } } if (fd < 0) { printf("pan: cannot create %%s\n", fnm); perror("cause"); { printf("pan: wrote %%s\n", fnm);#ifdef BFS#define Q_PROVISO#ifndef INLINE_REV#define INLINE_REVtypedef struct SV_Hold { State *sv; int sz; struct SV_Hold *nxt;} SV_Hold;typedef struct EV_Hold { char *sv; int nrpr; int nrqs;#if VECTORSZ>32000 int *po; short *po; int *qo; uchar *ps, *qs; struct EV_Hold *nxt;} EV_Hold;typedef struct BFS_Trail { Trail *frame; SV_Hold *onow; EV_Hold *omask;#ifdef Q_PROVISO struct H_el *lstate; short boq; struct BFS_Trail *nxt;} BFS_Trail;BFS_Trail *bfs_trail, *bfs_bot, *bfs_free;SV_Hold *svhold, *svfree;uchar do_reverse(Trans *, short, uchar);void snapshot(void);SV_Hold *getsv(int n){ SV_Hold *h = (SV_Hold *) 0, *oh; oh = (SV_Hold *) 0; for (h = svfree; h; oh = h, h = h->nxt) { if (n == h->sz) { if (!oh) svfree = h->nxt; oh->nxt = h->nxt; h->nxt = (SV_Hold *) 0; if (n < h->sz) { h = (SV_Hold *) 0; /* else continue */ if (!h) { h = (SV_Hold *) emalloc(sizeof(SV_Hold)); h->sz = n; h->sv = (State *) emalloc(sizeof(State) - VECTORSZ + n); return h;EV_Hold *getsv_mask(int n){ EV_Hold *h; static EV_Hold *kept = (EV_Hold *) 0; for (h = kept; h; h = h->nxt) if (n == h->sz && (memcmp((char *) Mask, (char *) h->sv, n) == 0) && (now._nr_pr == h->nrpr) && (now._nr_qs == h->nrqs) && (memcmp((char *) proc_offset, (char *) h->po, now._nr_pr * sizeof(int)) == 0) && (memcmp((char *) q_offset, (char *) h->qo, now._nr_qs * sizeof(int)) == 0) && (memcmp((char *) proc_offset, (char *) h->po, now._nr_pr * sizeof(short)) == 0) && (memcmp((char *) q_offset, (char *) h->qo, now._nr_qs * sizeof(short)) == 0) && (memcmp((char *) proc_skip, (char *) h->ps, now._nr_pr * sizeof(uchar)) == 0) && (memcmp((char *) q_skip, (char *) h->qs, now._nr_qs * sizeof(uchar)) == 0)) { h = (EV_Hold *) emalloc(sizeof(EV_Hold)); h->nrpr = now._nr_pr; h->nrqs = now._nr_qs; h->sv = (char *) emalloc(n * sizeof(char)); memcpy((char *) h->sv, (char *) Mask, n); if (now._nr_pr > 0) { h->po = (int *) emalloc(now._nr_pr * sizeof(int)); h->ps = (int *) emalloc(now._nr_pr * sizeof(int)); memcpy((char *) h->po, (char *) proc_offset, now._nr_pr * sizeof(int)); memcpy((char *) h->po, (char *) proc_offset, now._nr_pr * sizeof(short)); memcpy((char *) h->ps, (char *) proc_skip, now._nr_pr * sizeof(uchar)); if (now._nr_qs > 0) { h->qo = (int *) emalloc(now._nr_qs * sizeof(int)); h->qs = (int *) emalloc(now._nr_qs * sizeof(int)); memcpy((char *) h->qo, (char *) q_offset, now._nr_qs * sizeof(int)); memcpy((char *) h->qo, (char *) q_offset, now._nr_qs * sizeof(short)); memcpy((char *) h->qs, (char *) q_skip, now._nr_qs * sizeof(uchar)); h->nxt = kept; kept = h;freesv(SV_Hold *p){ SV_Hold *h, *oh; if (h->sz >= p->sz) if (!oh) { p->nxt = svfree; svfree = p; { p->nxt = h; oh->nxt = p;BFS_Trail *get_bfs_frame(void){ BFS_Trail *t; if (bfs_free) { t = bfs_free; bfs_free = bfs_free->nxt; t->nxt = (BFS_Trail *) 0; { t = (BFS_Trail *) emalloc(sizeof(BFS_Trail)); t->frame = (Trail *) emalloc(sizeof(Trail)); return t;push_bfs(Trail *f, int d) t = get_bfs_frame(); memcpy((char *)t->frame, (char *)f, sizeof(Trail)); t->frame->o_tt = d; /* depth */ t->boq = boq; t->onow = getsv(vsize); memcpy((char *)t->onow->sv, (char *)&now, vsize); t->omask = getsv_mask(vsize);#if defined(FULLSTACK) && defined(Q_PROVISO) t->lstate = Lstate; if (!bfs_bot) { bfs_bot = bfs_trail = t; { bfs_bot->nxt = t; bfs_bot = t;#ifdef CHECK printf("PUSH %%u (%%d)\n", t->frame, d);pop_bfs(void) if (!bfs_trail) return (Trail *) 0; t = bfs_trail; bfs_trail = t->nxt; bfs_bot = (BFS_Trail *) 0;#if defined(Q_PROVISO) && !defined(BITSTATE) && !defined(NOREDUCE) if (t->lstate) t->lstate->tagged = 0; t->nxt = bfs_free; bfs_free = t; vsize = t->onow->sz; boq = t->boq; memcpy((uchar *) &now, (uchar *) t->onow->sv, vsize); memcpy((uchar *) Mask, (uchar *) t->omask->sv, vsize); if (now._nr_pr > 0) { memcpy((char *)proc_offset, (char *)t->omask->po, now._nr_pr * sizeof(int)); { memcpy((char *)proc_offset, (char *)t->omask->po, now._nr_pr * sizeof(short)); memcpy((char *)proc_skip, (char *)t->omask->ps, now._nr_pr * sizeof(uchar)); if (now._nr_qs > 0) { memcpy((uchar *)q_offset, (uchar *)t->omask->qo, now._nr_qs * sizeof(int)); { memcpy((uchar *)q_offset, (uchar *)t->omask->qo, now._nr_qs * sizeof(short)); memcpy((uchar *)q_skip, (uchar *)t->omask->qs, now._nr_qs * sizeof(uchar)); freesv(t->onow); /* omask not freed */ printf("POP %%u (%%d)\n", t->frame, t->frame->o_tt); return t->frame;store_state(Trail *ntrpt, int shortcut, short oboq) Trans *t2 = (Trans *) 0; uchar ot; int tt, E_state; uchar o_opm = trpt->o_pm, *othis = this; if (shortcut) {#ifdef VERBOSE printf("claim: shortcut\n"); goto store_it; /* no claim move */ this = (((uchar *)&now)+proc_offset[0]); /* 0 = never claim */ trpt->o_pm = 0; tt = (int) ((P0 *)this)->_p; ot = (uchar) ((P0 *)this)->_t;#ifdef HAS_UNLESS E_state = 0; for (t2 = trans[ot][tt]; t2; t2 = t2?t2->nxt:(Trans *)0) if (E_state > 0 && E_state != t2->e_trans) if (do_transit(t2, 0)) if (!reached[ot][t2->st]) printf("depth: %%d -- claim move from %%d -> %%d\n", trpt->o_tt, ((P0 *)this)->_p, t2->st); E_state = t2->e_trans; if (t2->st > 0) { ((P0 *)this)->_p = t2->st; reached[ot][t2->st] = 1;#ifndef NOCLAIM check_claim(t2->st); if (now._nr_pr == 0) /* claim terminated */ uerror("end state in claim reached");#ifdef PEG peg[t2->forw]++; trpt->o_pm |= 1; if (t2->atom&2) Uerror("atomic in claim not supported in BFS mode");store_it: if (!bstore((char *)&now, vsize))#ifdef MA if (!gstore((char *)&now, vsize, 0)) if (!hstore((char *)&now, vsize)) { nstates++;#ifndef NOREDUCE trpt->tau |= 64;#if SYNC if (boq != -1) midrv++; else if (oboq != -1) { Trail *x; x = (Trail *) trpt->ostate; /* pre-rv state */ if (x) x->o_pm |= 4; /* mark success */ push_bfs(ntrpt, trpt->o_tt+1); } else { truncs++;#if !defined(NOREDUCE) && defined(FULLSTACK) && defined(Q_PROVISO)#if !defined(QLIST) && !defined(BITSTATE) if (Lstate && Lstate->tagged) trpt->tau |= 64; if (trpt->tau&32) { BFS_Trail *tprov; for (tprov = bfs_trail; tprov; tprov = tprov->nxt) if (!memcmp((uchar *)&now, (uchar *)tprov->onow->sv, vsize)) { trpt->tau |= 64; break; /* state is in queue */ } } ((P0 *)this)->_p = tt; /* reset claim */ if (t2) do_reverse(t2, 0, 0); this = othis; trpt->o_pm = o_opm;Trail *ntrpt;bfs(void){ Trans *t; Trail *otrpt, *x; uchar _n, _m, ot, nps = 0; int tt, E_state; short II, From = (short) (now._nr_pr-1), To = BASE; short oboq = boq; ntrpt = (Trail *) emalloc(sizeof(Trail)); trpt->ostate = (struct H_el *) 0; trpt->tau = 0; trpt->o_tt = -1; store_state(ntrpt, 0, oboq); /* initial state */ while ((otrpt = pop_bfs())) /* also restores now */ { memcpy((char *) trpt, (char *) otrpt, sizeof(Trail));#if defined(C_States) && (HAS_TRACK==1) c_revert((uchar *) &(now.c_state[0])); if (trpt->o_pm & 4) printf("Revisit of atomic not needed (%%d)\n", trpt->o_pm); nps = 0; if (trpt->o_pm == 8) { revrv++; if (trpt->tau&8) { printf("Break atomic (pm:%%d,tau:%%d)\n", trpt->o_pm, trpt->tau); trpt->tau &= ~8; else if (trpt->tau&32) printf("Void preselection (pm:%%d,tau:%%d)\n", trpt->tau &= ~32; nps = 1; /* no preselection in repeat */ trpt->o_pm &= ~(4|8); if (trpt->o_tt > mreached) { mreached = trpt->o_tt; if (mreached%%10 == 0) { printf("Depth= %%7d States= %%7g ", mreached, nstates); printf("Transitions= %%7g ", nstates+truncs); printf("Nodes= %%7d ", nr_states); printf("Memory= %%-6.3f\n", memcnt/1000000.); fflush(stdout); depth = trpt->o_tt; if (depth >= maxdepth) Trail *x; if (boq != -1) { x = (Trail *) trpt->ostate; if (x) x->o_pm |= 4; /* not failing */ truncs++; if (!warned) { warned = 1; printf("error: max search depth too small\n"); if (bounded) uerror("depth limit reached"); if (boq == -1 && !(trpt->tau&8) && nps == 0) for (II = now._nr_pr-1; II >= BASE; II -= 1)Pickup: this = pptr(II); tt = (int) ((P0 *)this)->_p; ot = (uchar) ((P0 *)this)->_t; if (trans[ot][tt]->atom & 8) { t = trans[ot][tt]; if (t->qu[0] != 0) { Ccheck++; if (!q_cond(II, t)) continue; Cholds++; From = To = II; trpt->tau |= 32; /* preselect marker */ printf("%%3d: proc %%d PreSelected (tau=%%d)\n", depth, II, trpt->tau); goto MainLoop; trpt->tau &= ~32;Repeat: if (trpt->tau&8) /* atomic */ { From = To = (short ) trpt->pr; nlinks++; { From = now._nr_pr-1; To = BASE;MainLoop: _n = _m = 0; for (II = From; II >= To; II -= 1) this = (((uchar *)&now)+proc_offset[II]); /* no rendezvous with same proc */ if (boq != -1 && trpt->pr == II) continue; ntrpt->pr = (uchar) II; ntrpt->st = tt; trpt->o_pm &= ~1; /* no move yet */ trpt->o_event = now._event; if (!provided(II, ot, tt, t)) continue; E_state = 0; for (t = trans[ot][tt]; t; t = t->nxt) if (E_state > 0 && E_state != t->e_trans) break; ntrpt->o_t = t; oboq = boq; if (!(_m = do_transit(t, II))) continue; trpt->o_pm |= 1; /* we moved */ (trpt+1)->o_m = _m; /* for unsend */ peg[t->forw]++; printf("%%3d: proc %%d exec %%d, ", depth, II, t->forw); printf("%%d to %%d, %%s %%s %%s", tt, t->st, t->tp, (t->atom&2)?"atomic":"", (boq != -1)?"rendez-vous":""); if (t->e_trans) printf(" (escapes to state %%d)", t->st); printf(" %%saccepting [tau=%%d]\n", (trpt->o_pm&2)?"":"non-", trpt->tau); E_state = t->e_trans;#if SYNC>0 if (t->e_trans > 0 && (boq != -1 /* || oboq != -1 */)) { fprintf(efd, "error: the use of rendezvous stmnt in the escape clause\n"); fprintf(efd, " of an unless stmnt is not compatible with -DBFS\n"); pan_exit(1); if (t->st > 0) ((P0 *)this)->_p = t->st; /* ptr to pred: */ ntrpt->ostate = (struct H_el *) otrpt; ntrpt->st = tt; if (boq == -1 && (t->atom&2)) /* atomic */ ntrpt->tau = 8; /* record for next move */ else ntrpt->tau = 0; store_state(ntrpt, (boq != -1 || (t->atom&2)), oboq); now._event = trpt->o_event; /* undo move and continue */ trpt++; /* this is where ovals and ipt are set */ do_reverse(t, II, _m); /* restore now. */ trpt--; printf("%%3d: proc %%d ", depth, II); printf("reverses %%d, %%d to %%d,", t->forw, tt, t->st); printf(" %%s [abit=%%d,adepth=%%d,", t->tp, now._a_t, A_depth); printf("tau=%%d,%%d]\n", trpt->tau, (trpt-1)->tau); reached[ot][t->st] = 1; reached[ot][tt] = 1; ((P0 *)this)->_p = tt; _n |= _m; /* preselected - no succ definitely outside stack */ if ((trpt->tau&32) && !(trpt->tau&64)) { From = now._nr_pr-1; To = BASE; printf("%%3d: proc %%d UnSelected (_n=%%d, tau=%%d)\n", depth, II+1, (int) _n, trpt->tau); _n = 0; trpt->tau &= ~32; if (II >= BASE) goto Pickup; goto MainLoop; trpt->tau &= ~(32|64); if (_n != 0) printf("%%3d: no move [II=%%d, tau=%%d, boq=%%d, _nr_pr=%%d]\n", depth, II, trpt->tau, boq, now._nr_pr); if (boq != -1) { failedrv++; x = (Trail *) trpt->ostate; /* pre-rv state */ if (!x) continue; /* root state */ if ((x->tau&8) || (x->tau&32)) /* break atomic or preselect at parent */ { x->o_pm |= 8; /* mark failure */ this = (((uchar *)&now)+proc_offset[otrpt->pr]); printf("\treset state of %%d from %%d to %%d\n", otrpt->pr, ((P0 *)this)->_p, otrpt->st); ((P0 *)this)->_p = otrpt->st; unsend(boq); /* retract rv offer */ boq = -1; push_bfs(x, x->o_tt); printf("failed rv, repush with %%d\n", x->o_pm); else printf("failed rv, tau at parent: %%d\n", x->tau); } else if (now._nr_pr > 0) if ((trpt->tau&8)) /* atomic */ { trpt->tau &= ~(1|8); /* 1=timeout, 8=atomic */ printf("%%3d: atomic step proc %%d blocks\n", depth, II+1); goto Repeat; if (!(trpt->tau&1)) /* didn't try timeout yet */ { trpt->tau |= 1; printf("%%d: timeout\n", depth);#ifndef VERI if (!noends && !a_cycles && !endstate()) uerror("invalid end state");putter(Trail *trpt, int fd){ long j; if (!trpt) return; if (trpt != (Trail *) trpt->ostate) putter((Trail *) trpt->ostate, fd); if (trpt->o_t) { sprintf(snap, "%%d:%%d:%%d\n", trcnt++, trpt->pr, trpt->o_t->t_id); j = strlen(snap); if (write(fd, snap, j) != j) { printf("pan: error writing %%s\n", fnm); pan_exit(1);nuerror(char *str){ int fd = make_trail(); int j; if (fd < 0) return; sprintf(snap, "-2:%%d:-2\n", VERI); write(fd, snap, strlen(snap));#ifdef MERGED sprintf(snap, "-4:-4:-4\n"); trcnt = 1; putter(trpt, fd); if (ntrpt->o_t) trcnt++, ntrpt->pr, ntrpt->o_t->t_id); close(fd); if (errors >= upto && upto != 0)do_the_search(void) depth = mreached = 0; trpt = &trail[0]; trpt->tau |= 4; /* the claim moves first */ for (i = 0; i < (int) now._nr_pr; i++) { P0 *ptr = (P0 *) pptr(i);#ifndef NP if (!(trpt->o_pm&2) && accpstate[ptr->_t][ptr->_p]) { trpt->o_pm |= 2; if (!(trpt->o_pm&4) && progstate[ptr->_t][ptr->_p]) { trpt->o_pm |= 4; if (accpstate[EVENT_TRACE][now._event]) { trpt->o_pm |= 2; if (progstate[EVENT_TRACE][now._event]) { trpt->o_pm |= 4;#ifndef NOCOMP Mask[0] = Mask[1] = 1; /* _nr_pr, _nr_qs */ if (!a_cycles) { i = &(now._a_t) - (uchar *) &now; Mask[i] = 1; /* _a_t */#ifndef NOFAIR if (!fairness) { int j = 0; i = &(now._cnt[0]) - (uchar *) &now; while (j++ < NFAIR) Mask[i++] = 1; /* _cnt[] */ if (fairness && (a_cycles && (trpt->o_pm&2))) { now._a_t = 2; /* set the A-bit */ now._cnt[0] = now._nr_pr + 1; printf("%%3d: fairness Rule 1, cnt=%%d, _a_t=%%d\n", depth, now._cnt[now._a_t&1], now._a_t); /* capture initial state of tracked C objects */ c_update((uchar *) &(now.c_state[0])); if (readtrail) getrail(); /* no return */ bfs();#if defined(C_States) && defined(HAS_STACK) && (HAS_TRACK==1) /* initial state of tracked & unmatched objects */ c_stack((uchar *) &(svtack->c_stack[0]));#ifdef RANDOMIZE srand(123); new_state(); /* start 1st DFS */#ifdef INLINE_REVuchardo_reverse(Trans *t, short II, uchar M){ uchar _m = M; int tt = (int) ((P0 *)this)->_p;#include REVERSE_MOVESR999: return _m;#ifndef INLINEstatic char _tp = 'n'; static int _qid = 0;do_transit(Trans *t, short II){ uchar _m = 0;#ifdef M_LOSS uchar delta_m = 0; uchar ot = (uchar) ((P0 *)this)->_t; if (ot == EVENT_TRACE) boq = -1;#define continue { boq = oboq; return 0; }#define continue return 0#ifdef SEPARATE#include FORWARD_MOVESP999: if (ot == EVENT_TRACE) boq = oboq; return _m;#undef continuerequire(char tp, int qid) _tp = tp; _qid = qid; if (now._event != endevent) for (t = trans[EVENT_TRACE][now._event]; t; t = t->nxt) { if (do_transit(t, EVENT_TRACE)) { now._event = t->st; reached[EVENT_TRACE][t->st] = 1; printf(" event_trace move to -> %%d\n", t->st);#ifndef BFS if (accpstate[EVENT_TRACE][now._event]) (trpt+1)->o_pm |= 2; if (progstate[EVENT_TRACE][now._event]) (trpt+1)->o_pm |= 4;#ifdef NEGATED_TRACE if (now._event == endevent) depth++; trpt++; uerror("event_trace error (all events matched)"); trpt--; depth--; for (t = t->nxt; t; t = t->nxt) { if (do_transit(t, EVENT_TRACE)) Uerror("non-determinism in event-trace"); return; else printf(" event_trace miss '%%c' -- %%d, %%d, %%d\n", tp, qid, now._event, t->forw); now._event = endevent; /* only 1st try will count -- fixed 4.2.6 */ depth++; trpt++; uerror("event_trace error (no matching event)"); trpt--; depth--;enabled(int iam, int pid){ Trans *t; uchar *othis = this; int res = 0; int tt; uchar ot; /* if (pid > 0) */ pid++; if (pid == iam) Uerror("used: enabled(pid=thisproc)"); if (pid < 0 || pid >= (int) now._nr_pr) return 0; this = pptr(pid); TstOnly = 1; tt = (int) ((P0 *)this)->_p; ot = (uchar) ((P0 *)this)->_t; if (do_transit(t, (short) pid)) { res = 1; TstOnly = 0; return res;snapshot(void){ static long sdone = (long) 0; long ndone = (unsigned long) nstates/1000000; if (ndone == sdone) return; sdone = ndone; printf("Depth= %%7d States= %%7g ", mreached, nstates); printf("Transitions= %%7g ", nstates+truncs); printf("Nodes= %%7d ", nr_states); printf("Memory= %%-6.3f\n", memcnt/1000000.); fflush(stdout);#ifdef SCstack2disk(void) if (!stackwrite && (stackwrite = creat(stackfile, TMODE)) < 0) Uerror("cannot create stackfile"); if (write(stackwrite, trail, DDD*sizeof(Trail)) != DDD*sizeof(Trail)) Uerror("stackfile write error -- disk is full?"); memmove(trail, &trail[DDD], (HHH-DDD+2)*sizeof(Trail)); memset(&trail[HHH-DDD+2], 0, (omaxdepth - HHH + DDD - 2)*sizeof(Trail)); CNT1++;disk2stack(void){ long have; CNT2++; memmove(&trail[DDD], trail, (HHH-DDD+2)*sizeof(Trail)); || lseek(stackwrite, -DDD* (off_t) sizeof(Trail), SEEK_CUR) == -1) Uerror("disk2stack lseek error"); Uerror("cannot open stackfile"); if (lseek(stackread, (CNT1-CNT2)*DDD* (off_t) sizeof(Trail), SEEK_SET) == -1) have = read(stackread, trail, DDD*sizeof(Trail)); if (have != DDD*sizeof(Trail)) Uerror("stackfile read error");uchar *Pptr(int x){ if (x < 0 || x >= MAXPROC || !proc_offset[x]) return noptr; return (uchar *) pptr(x);int qs_empty(void);/* * new_state() is the main DFS search routine in the verifier * it has a lot of code ifdef-ed together to support * different search modes, which makes it quite unreadable. * if you are studying the code, first use the C preprocessor * to generate a specific version from the pan.c source, * e.g. by saying: * gcc -E -DNOREDUCE -DBITSTATE pan.c > ppan.c * and then study the resulting file, rather than this one */#if !defined(BFS) && (!defined(BITSTATE) || !defined(MA))new_state(void) uchar _n, _m, ot; short ooi, eoi; short II, JJ = 0, kk; int tt; short From = now._nr_pr-1, To = BASE;Down: printf("%%d: Down - %%s", depth, (trpt->tau&4)?"claim":"program"); printf(" %%saccepting [pids %%d-%%d]\n", (trpt->o_pm&2)?"":"non-", From, To); if (depth > hiwater) { stack2disk(); maxdepth += DDD; hiwater += DDD; trpt -= DDD; if(verbose) printf("zap %%d: %%d (maxdepth now %%d)\n", CNT1, hiwater, maxdepth); trpt->tau &= ~(16|32|64); /* make sure these are off */#if defined(FULLSTACK) && defined(MA) trpt->proviso = 0; if (depth >= maxdepth) { truncs++; (trpt+1)->o_n = 1; /* not a deadlock */ if (!warned) { warned = 1; printf("error: max search depth too small\n"); if (bounded) uerror("depth limit reached"); (trpt-1)->tau |= 16; /* worstcase guess */ goto Up;AllOver:#if defined(FULLSTACK) && !defined(MA) /* if atomic or rv move, carry forward previous state */ trpt->ostate = (trpt-1)->ostate; if ((trpt->tau&4) || ((trpt-1)->tau&128)) if (boq == -1) { /* if not mid-rv */#ifndef SAFETY /* this check should now be redundant * because the seed state also appears * on the 1st dfs stack and would be * matched in hstore below */ if ((now._a_t&1) && depth > A_depth) { if (!memcmp((char *)&A_Root, (char *)&now, vsize)) depthfound = A_depth; printf("matches seed\n");#ifdef NP uerror("non-progress cycle"); uerror("acceptance cycle"); goto Up; printf("not seed\n"); if (!(trpt->tau&8)) /* if no atomic move */#ifdef CNTRSTACK II = bstore((char *)&now, vsize); trpt->j6 = j1; trpt->j7 = j2; JJ = LL[j1] && LL[j2];#ifdef FULLSTACK JJ = onstack_now(); JJ = II; /* worstcase guess for p.o. */ II = gstore((char *)&now, vsize, 0);#ifndef FULLSTACK JJ = II; JJ = (II == 2)?1:0; II = hstore((char *)&now, vsize); kk = (II == 1 || II == 2); if (!fairness && a_cycles) if (II == 2 && ((trpt->o_pm&2) || ((trpt-1)->o_pm&2))) { II = 3; /* Schwoon & Esparza 2005, Gastin&Moro 2004 */ printf("state match on dfs stack\n"); goto same_case; if (!JJ && (now._a_t&1) && depth > A_depth) { int oj1 = j1; uchar o_a_t = now._a_t; now._a_t &= ~(1|16|32); if (onstack_now()) { II = 3; printf("state match on 1st dfs stack\n"); now._a_t = o_a_t; j1 = oj1; if (II == 3 && a_cycles && (now._a_t&1)) if (fairness && now._cnt[1] > 1) /* was != 0 */ { printf(" fairness count non-zero\n"); II = 0; } else#ifndef BITSTATE nShadow--;same_case: if (Lstate) depthfound = Lstate->D; uerror("non-progress cycle"); uerror("acceptance cycle"); goto Up; } if ((II && JJ) || (II == 3)) { /* marker for liveness proviso */ (trpt-1)->tau |= 16; truncs2++; if (!II || !JJ) { /* successor outside stack */ (trpt-1)->tau |= 64; if (II) if (!kk) if ((unsigned long) nstates%%1000000 == 0) snapshot(); if (vprefix > 0) if (write(svfd, (uchar *) &now, vprefix) != vprefix) { fprintf(efd, "writing %%s.svd failed\n", Source); wrapup();#if defined(MA) && defined(W_XPT) if ((unsigned long) nstates%%W_XPT == 0) { void w_xpoint(void); w_xpoint();#if defined(FULLSTACK) || defined(CNTRSTACK) onstack_put();#ifdef DEBUG2 printf("%%d: putting %%u (%%d)\n", depth, trpt->ostate, (trpt->ostate)?trpt->ostate->tagged:0); printf("%%d: putting\n", depth); if (depth > mreached) mreached = depth; if (trpt->tau&4) trpt->tau &= ~(1|2); /* timeout and -request off */ _n = 0; (trpt+1)->o_n = 0; if (now._nr_pr == 0) /* claim terminated */ uerror("end state in claim reached"); check_claim(((P0 *)pptr(0))->_p);Stutter: if (trpt->tau&4) /* must make a claimmove */ if ((now._a_t&2) /* A-bit set */ && now._cnt[now._a_t&1] == 1) { now._a_t &= ~2; now._cnt[now._a_t&1] = 0; trpt->o_pm |= 16; printf("%%3d: fairness Rule 3.: _a_t = %%d\n", depth, now._a_t); II = 0; /* never */ goto Veri0; /* Look for a process with only safe transitions */ /* (special rules apply in the 2nd dfs) */#ifdef SAFETY if (boq == -1 && From != To)/* implied: #ifdef FULLSTACK */ if (boq == -1 && From != To && (!(now._a_t&1) || (a_cycles && !((trpt-1)->proviso)) !(trpt->proviso)) (trpt-1)->ostate && !(((char *)&((trpt-1)->ostate->state))[0] & 128)) !(((char *)&(trpt->ostate->state))[0] & 128)) (trpt-1)->ostate && (trpt-1)->ostate->proviso == 0) trpt->ostate->proviso == 0) ))/* #endif */ for (II = From; II >= To; II -= 1)Resume: /* pick up here if preselect fails */ tt = (int) ((P0 *)this)->_p; ot = (uchar) ((P0 *)this)->_t; if (trans[ot][tt]->atom & 8) { t = trans[ot][tt]; if (t->qu[0] != 0) { Ccheck++; if (!q_cond(II, t)) Cholds++; From = To = II;#ifdef NIBIS t->om = 0; trpt->tau |= 32; /* preselect marker */ printf("%%3d: proc %%d Pre", depth, II); printf("Selected (om=%%d, tau=%%d)\n", t->om, trpt->tau); printf("%%3d: proc %%d PreSelected (tau=%%d)\n", depth, II, trpt->tau); goto Again; trpt->tau &= ~32;#if !defined(NOREDUCE) || (defined(ETIM) && !defined(VERI))Again: /* The Main Expansion Loop over Processes */ trpt->o_pm &= ~(8|16|32|64); /* fairness-marks */ if (fairness && boq == -1 && (!(trpt->tau&4) && !((trpt-1)->tau&128)) && !(trpt->tau&8)) { /* A_bit = 1; Cnt = N in acc states with A_bit 0 */ if (!(now._a_t&2)) if (a_cycles && (trpt->o_pm&2)) { /* Accepting state */ now._a_t |= 2; now._cnt[now._a_t&1] = now._nr_pr + 1; trpt->o_pm |= 8; printf("%%3d: fairness Rule 1: cnt=%%d, _a_t=%%d\n", depth, now._cnt[now._a_t&1], now._a_t); { /* A_bit = 0 when Cnt 0 */ if (now._cnt[now._a_t&1] == 1) { now._a_t &= ~2; now._cnt[now._a_t&1] = 0; trpt->o_pm |= 16; printf("%%3d: fairness Rule 3: _a_t = %%d\n", /* no rendezvous with same proc */ if (boq != -1 && trpt->pr == II) continue;Veri0: /* don't repeat a previous preselected expansion */ /* could hit this if reduction proviso was false */ t = trans[ot][tt]; if (!(trpt->tau&4) && !(trpt->tau&1) && !(trpt->tau&32) && (t->atom & 8) && boq == -1 && From != To) { if (t->qu[0] == 0 || q_cond(II, t)) { _m = t->om; if (_m>_n||(_n>3&&_m!=0)) _n=_m; continue; /* did it before */ trpt->o_pm &= ~1; /* no move in this pid yet */ (trpt+1)->o_event = now._event; /* Fairness: Cnt++ when Cnt == II */ trpt->o_pm &= ~64; /* didn't apply rule 2 */ if (fairness && !(trpt->o_pm&32) && (now._a_t&2) && now._cnt[now._a_t&1] == II+2) { now._cnt[now._a_t&1] -= 1; /* claim need not participate */ if (II == 1) now._cnt[now._a_t&1] = 1; printf("%%3d: proc %%d fairness ", depth, II); printf("Rule 2: --cnt to %%d (%%d)\n", now._cnt[now._a_t&1], now._a_t); trpt->o_pm |= (32|64); if (!provided(II, ot, tt, t)) continue; /* check all trans of proc II - escapes first */ trpt->e_state = 0; (trpt+1)->pr = (uchar) II; (trpt+1)->st = tt; for (ooi = eoi = 0, t = trans[ot][tt]; t; t = t->nxt, ooi++) if (strcmp(t->tp, "else") == 0) eoi++; if (eoi) printf("randomizer: suppressed, saw else\n"); { eoi = rand()%%ooi; printf("randomizer: skip %%d in %%d\n", eoi, ooi); if (eoi-- <= 0) break;DOMORE: for ( ; t && ooi > 0; t = t->nxt, ooi--) for (t = trans[ot][tt]; t; t = t->nxt) /* exploring all transitions from * a single escape state suffices */ if (trpt->e_state > 0 && trpt->e_state != t->e_trans) printf("skip 2nd escape %%d (did %%d before)\n", t->e_trans, trpt->e_state); (trpt+1)->o_t = t;#ifdef INLINEP999: /* jumps here when move succeeds */ if (!(_m = do_transit(t, II))) continue; if (boq == -1)#ifdef CTL /* for branching-time, can accept reduction only if */ /* the persistent set contains just 1 transition */ { if ((trpt->tau&32) && (trpt->o_pm&1)) trpt->tau |= 16; trpt->o_pm |= 1; /* we moved */ peg[t->forw]++;#if defined(VERBOSE) || defined(CHECK)#if defined(SVDUMP) printf("%%3d: proc %%d exec %%d \n", depth, II, t->t_id); printf("%%3d: proc %%d exec %%d, ", depth, II, t->forw); printf("%%d to %%d, %%s %%s %%s", tt, t->st, t->tp, (t->atom&2)?"atomic":"", (boq != -1)?"rendez-vous":""); if (t->e_trans) printf(" (escapes to state %%d)", t->st); printf(" %%saccepting [tau=%%d]\n", (trpt->o_pm&2)?"":"non-", trpt->tau); printf(" randomizer %%d\n", ooi);#ifdef HAS_LAST if (II != 0) now._last = II - BASE; trpt->e_state = t->e_trans; depth++; trpt++; trpt->pr = (uchar) II; trpt->st = tt; trpt->o_pm &= ~(2|4); if (t->st > 0) { ((P0 *)this)->_p = t->st;/* moved down reached[ot][t->st] = 1; */ if (a_cycles)#if (ACCEPT_LAB>0 && !defined(NP)) || (PROG_LAB>0 && defined(HAS_NP)) int ii;#define P__Q ((P0 *)pptr(ii))#if ACCEPT_LAB>0 /* state 1 of np_ claim is accepting */ if (((P0 *)pptr(0))->_p == 1) trpt->o_pm |= 2; for (ii = 0; ii < (int) now._nr_pr; ii++) { if (accpstate[P__Q->_t][P__Q->_p]) { trpt->o_pm |= 2; } }#if defined(HAS_NP) && PROG_LAB>0 { if (progstate[P__Q->_t][P__Q->_p]) { trpt->o_pm |= 4;#undef P__Q trpt->o_t = t; trpt->o_n = _n; trpt->o_ot = ot; trpt->o_tt = tt; trpt->o_To = To; trpt->o_m = _m; trpt->tau = 0; trpt->oo_i = ooi; if (boq != -1 || (t->atom&2)) { trpt->tau |= 8; /* atomic sequence in claim */ if((trpt-1)->tau&4) trpt->tau |= 4; trpt->tau &= ~4; { if ((trpt-1)->tau&4) /* if claim allowed timeout, so */ /* does the next program-step: */ if (((trpt-1)->tau&1) && !(trpt->tau&4)) trpt->tau |= 1; if (boq == -1 && (t->atom&2)) { From = To = II; nlinks++; { From = now._nr_pr-1; To = BASE; goto Down; /* pseudo-recursion */Up: printf("%%d: Up - %%s\n", depth, (trpt->tau&4)?"claim":"program"); if (depth <= 0) return; /* e.g., if first state is old, after a restart */ if (CNT1 > CNT2 && depth < hiwater - (HHH-DDD) + 2) trpt += DDD; disk2stack(); maxdepth -= DDD; hiwater -= DDD;if(verbose)printf("unzap %%d: %%d\n", CNT2, hiwater); if (trpt->o_pm&128) /* fairness alg */ { now._cnt[now._a_t&1] = trpt->bup.oval; _n = 1; trpt->o_pm &= ~128; depth--; trpt--; printf("%%3d: reversed fairness default move\n", depth); goto Q999; { int d; Trail *trl; now._last = 0; for (d = 1; d < depth; d++) { trl = getframe(depth-d); /* was (trpt-d) */ if (trl->pr != 0) { now._last = trl->pr - BASE; break; } } } now._last = (depth<1)?0:(trpt-1)->pr; now._event = trpt->o_event; if ((now._a_t&1) && depth <= A_depth) return; /* to checkcycles() */ t = trpt->o_t; _n = trpt->o_n; ot = trpt->o_ot; II = trpt->pr; tt = trpt->o_tt; this = pptr(II); To = trpt->o_To; _m = trpt->o_m; ooi = trpt->oo_i; _m = do_reverse(t, II, _m);R999: /* jumps here when done */ printf("%%3d: proc %%d ", depth, II); printf("reverses %%d, %%d to %%d,", t->forw, tt, t->st); printf(" %%s [abit=%%d,adepth=%%d,", t->tp, now._a_t, A_depth); printf("tau=%%d,%%d]\n", trpt->tau, (trpt-1)->tau); /* pass the proviso tags */ if ((trpt->tau&8) /* rv or atomic */ && (trpt->tau&16)) && (trpt->tau&64)) depth--; trpt--; (trans[ot][tt])->om = _m; /* head of list */ /* i.e., not set if rv fails */ if (_m)#if defined(VERI) && !defined(NP) if (II == 0 && verbose && !reached[ot][t->st]) { printf("depth %%d: Claim reached state %%d (line %%d)\n", depth, t->st, src_claim [t->st]); fflush(stdout); else trpt->e_state = 0; /* undo */ if (_m>_n||(_n>3&&_m!=0)) _n=_m; ((P0 *)this)->_p = tt; } /* all options */ if (!t && ooi > 0) printf("randomizer: continue for %%d more\n", ooi); goto DOMORE; else printf("randomizer: done\n"); /* Fairness: undo Rule 2 */ if ((trpt->o_pm&32) && (trpt->o_pm&64)) { if (trpt->o_pm&1) if (now._cnt[now._a_t&1] == 1) now._cnt[now._a_t&1] = 2; now._cnt[now._a_t&1] += 1; printf("undo Rule 2, cnt=%%d, _a_t=%%d\n", trpt->o_pm &= ~(32|64); { if (_n > 0) trpt->o_pm &= ~64; II = From+1; } } } if (II == 0) break; /* never claim */ } /* all processes */ /* Fairness: undo Rule 2 */ if (trpt->o_pm&32) /* remains if proc blocked */ if (now._cnt[now._a_t&1] == 1) now._cnt[now._a_t&1] = 2; now._cnt[now._a_t&1] += 1; printf("%%3d: proc -- fairness ", depth); trpt->o_pm &= ~32; && _n == 0 /* nobody moved */ && !(trpt->tau&4) /* in program move */ && !(trpt->tau&8) /* not an atomic one */#ifdef OTIM && ((trpt->tau&1) || endstate())#ifdef ETIM && (trpt->tau&1) /* already tried timeout */ /* see below */ && !((trpt->tau&32) && (_n == 0 || (trpt->tau&16))) && now._cnt[now._a_t&1] > 0) /* needed more procs */ { depth++; trpt++; trpt->o_pm |= 128 | ((trpt-1)->o_pm&(2|4)); trpt->bup.oval = now._cnt[now._a_t&1]; now._cnt[now._a_t&1] = 1; trpt->tau = 4; trpt->tau = 0; From = now._nr_pr-1; To = BASE; printf("%%3d: fairness default move ", depth); printf("(all procs block)\n"); goto Down;Q999: /* returns here with _n>0 when done */; if (trpt->o_pm&8) { now._a_t &= ~2; now._cnt[now._a_t&1] = 0; trpt->o_pm &= ~8; printf("%%3d: fairness undo Rule 1, _a_t=%%d\n", depth, now._a_t); if (trpt->o_pm&16) { now._a_t |= 2; trpt->o_pm &= ~16; printf("%%3d: fairness undo Rule 3, _a_t=%%d\n", /* preselected move - no successors outside stack */ if ((trpt->tau&32) && !(trpt->tau&64)) { From = now._nr_pr-1; To = BASE; printf("%%3d: proc %%d UnSelected (_n=%%d, tau=%%d)\n", depth, II+1, _n, trpt->tau); _n = 0; trpt->tau &= ~(16|32|64); if (II >= BASE) /* II already decremented */ goto Resume; else /* at least one move that was preselected at this */ /* level, blocked or truncated at the next level */ if ((trpt->tau&32) && (_n == 0 || (trpt->tau&16))) depth, II+1, (int) _n, trpt->tau); if (a_cycles && (trpt->tau&16)) { if (!(now._a_t&1)) printf("%%3d: setting proviso bit\n", depth); (trpt-1)->proviso = 1; trpt->proviso = 1; if ((trpt-1)->ostate) ((char *)&((trpt-1)->ostate->state))[0] |= 128; ((char *)&(trpt->ostate->state))[0] |= 128; (trpt-1)->ostate->proviso = 1; trpt->ostate->proviso = 1; From = now._nr_pr-1; To = BASE; _n = 0; trpt->tau &= ~(16|32|64); goto Again; /* do full search */ } /* else accept reduction */ _n = 0; trpt->tau &= ~(16|32|64); if (II >= BASE) /* already decremented */ goto Resume; goto Again; if (_n == 0 || ((trpt->tau&4) && (trpt->tau&2))) printf("%%3d: no move [II=%%d, tau=%%d, boq=%%d]\n", depth, II, trpt->tau, boq); /* ok if a rendez-vous fails: */ if (boq != -1) goto Done; /* ok if no procs or we're at maxdepth */ if ((now._nr_pr == 0 && (!strict || qs_empty())) || endstate() || depth >= maxdepth-1) goto Done; if ((trpt->tau&8) && !(trpt->tau&4)) { trpt->tau &= ~(1|8); /* 1=timeout, 8=atomic */ From = now._nr_pr-1; To = BASE; printf("%%3d: atomic step proc %%d ", depth, II+1); printf("unexecutable\n"); trpt->tau |= 4; /* switch to claim */ goto AllOver; if (!(trpt->tau&1)) /* didn't try timeout yet */ if (trpt->tau&4)#ifndef NTIM if (trpt->tau&2) /* requested */ { trpt->tau |= 1; trpt->tau &= ~2; goto Stutter; { /* only claim can enable timeout */ if ((trpt->tau&8) && !((trpt-1)->tau&4))/* blocks inside an atomic */ goto BreakOut; printf("%%d: req timeout\n", depth); (trpt-1)->tau |= 2; /* request */ printf("%%d: timeout\n", depth); trpt->tau |= 1;BreakOut:#ifndef NOSTUTTER if (!(trpt->tau&4)) { trpt->tau |= 4; /* claim stuttering */ trpt->tau |= 128; /* stutter mark */ printf("%%d: claim stutter\n", depth); goto Stutter; ; if (!noends && !a_cycles && !endstate()) { depth--; trpt--; /* new 4.2.3 */ uerror("invalid end state"); else if (a_cycles && (trpt->o_pm&2)) /* new 4.2.4 */ { depth--; trpt--; uerror("accept stutter");Done: if (!(trpt->tau&8)) /* not in atomic seqs */ if (_n != 0 /* --after-- a program-step, i.e., */ /* after backtracking a claim-step */ && (trpt->tau&4) /* with at least one running process */ /* unless in a stuttered accept state */ && ((now._nr_pr > 1) || (trpt->o_pm&2)) && !(now._a_t&1)) if (fairness) printf("Consider check %%d %%d...\n", now._a_t, now._cnt[0]); if ((now._a_t&2) /* A-bit */ && (now._cnt[0] == 1)) checkcycles(); checkcycles();#ifndef MA if (boq == -1 && (((trpt->tau&4) && !(trpt->tau&128)) || ( (trpt-1)->tau&128))) if (boq == -1) printf("%%d: zapping %%u (%%d)\n", depth, trpt->ostate, (trpt->ostate)?trpt->ostate->tagged:0); onstack_zap(); printf("%%d: zapping\n", depth); if (trpt->proviso) gstore((char *) &now, vsize, 1); if (depth > 0) goto Up;} void new_state(void) { /* place holder */ }assert(int a, char *s, int ii, int tt, Trans *t) if (!a && !noasserts) { char bad[1024]; strcpy(bad, "assertion violated "); if (strlen(s) > 1000) { strncpy(&bad[19], (const char *) s, 1000); bad[1019] = '\0'; strcpy(&bad[19], s); uerror(bad);#ifndef NOBOUNDCHECKBoundcheck(int x, int y, int a1, int a2, Trans *a3) assert((x >= 0 && x < y), "- invalid array index", a1, a2, a3); return x;wrap_stats(void) if (nShadow>0) printf("%%8g states, stored (%%g visited)\n", nstates - nShadow, nstates); printf("%%8g states, stored\n", nstates); printf(" %%8g nominal states (- rv and atomic)\n", nstates-midrv-nlinks+revrv); printf(" %%8g rvs succeeded\n", midrv-failedrv); printf(" %%8g nominal states (stored-atomic)\n", nstates-nlinks); printf(" %%8g midrv\n", midrv); printf(" %%8g failedrv\n", failedrv); printf(" %%8g revrv\n", revrv); printf("%%8g states, matched\n", truncs); printf("%%8g matches within stack\n",truncs2); printf("%%8g transitions (= visited+matched)\n", nstates+truncs); printf("%%8g transitions (= stored+matched)\n", printf("%%8g atomic steps\n", nlinks); if (nlost) printf("%%g lost messages\n", (double) nlost); printf("hash conflicts: %%g (resolved)\n", hcmp); printf("%%8g states allocated for dfs stack\n", ngrabs); printf("\nhash factor: %%4g (best if > 100.)\n\n", (double)(1<<(ssize-8)) / (double) nstates * 256.0); printf("bits set per state: %%u (-k%%u)\n", hfns, hfns);#if 0 printf("total bits available: %%8g (-M%%ld)\n", ((double) udmem) * 8.0, udmem/(1024L*1024L)); printf("total bits available: %%8g (-w%%d)\n", ((double) (1L << (ssize-4)) * 16.0), ssize);#ifdef COVEST /* this code requires compilation with -lm on some systems */ { double pow(double, double); double log(double); unsigned int best_k; double i, n = 30000.0L; double f, p, q, m, c, est = 0.0L, k = (double)hfns; c = (double) nstates / n; m = (double) (1<<(ssize-8)) * 256.0L / c; p = 1.0L - (k / m); q = 1.0L; for (i = 0.0L; i - est < n; i += 1.0L) { q *= p; est += pow(1.0L - q, k); f = m/i; est *= c; i *= c; /* account for loss from enhanced double hashing */ if (hfns > 2) est += i * pow(0.5, (double) ssize * 2.0); if (f < 1.134) best_k = 1; else if (f < 2.348) best_k = 2; else if (f < 3.644) best_k = 3; else best_k = (unsigned int) (pow(3.8L,1.0L/(f+4.2L))*f*.69315L + 0.99999999L); if (best_k != hfns && best_k > ssize) best_k = (unsigned int) 1.0 + ssize/log((double)best_k / (double)ssize + 3.0); if (best_k > 32) best_k = 1 + (unsigned int) (32.0/log((double)best_k/35.0)); if (est * (double) nstates < 1.0) { printf("prob. of omissions: negligible\n"); return; /* no hints needed */ if (best_k != hfns) { printf("hint: repeating the search with -k%%u ", best_k); printf("may increase accuracy\n"); { printf("hint: the current setting for -k (-k%%d) ", hfns); printf("is likely to be optimal for -w%%d\n", ssize); if (ssize < 32) { printf("hint: increasing -w above -w%%d ", ssize); printf("will increase accuracy (max is -w34)\n"); printf("(in xspin, increase Estimated State Space Size)\n");wrapup(void)#if defined(BITSTATE) || !defined(NOCOMP) double nr1, nr2, nr3 = 0.0, nr4, nr5 = 0.0;#if !defined(MA) && (defined(MEMCNT) || defined(MEMLIM)) int mverbose = 1; int mverbose = verbose; signal(SIGINT, SIG_DFL); printf("(%%s)\n", Version); if (!done) printf("Warning: Search not completed\n"); (void) unlink((const char *)stackfile); printf(" + Using Breadth-First Search\n"); printf(" + Partial Order Reduction\n");#ifdef COLLAPSE printf(" + Compression\n"); printf(" + Graph Encoding (-DMA=%%d)\n", MA);#ifdef R_XPT printf(" Restarted from checkpoint %%s.xpt\n", Source); printf(" + FullStack Matching\n"); printf(" + CntrStack Matching\n"); printf("\nBit statespace search for:\n");#ifdef HC printf("\nHash-Compact %%d search for:\n", HC); printf("\nFull statespace search for:\n"); printf(" notrace assertion +\n"); printf(" trace assertion +\n"); printf(" never claim +\n"); printf(" assertion violations "); if (noasserts) printf("- (disabled by -A flag)\n"); printf("+ (if within scope of claim)\n");#ifdef NOCLAIM printf(" never claim - (not selected)\n"); printf(" never claim - (none specified)\n"); printf("+\n"); printf(" non-progress cycles "); printf(" acceptance cycles "); if (a_cycles) printf("+ (fairness %%sabled)\n", fairness?"en":"dis"); else printf("- (not selected)\n"); printf(" cycle checks - (disabled by -DSAFETY)\n"); printf(" invalid end states - "); printf("(disabled by "); if (noends) printf("-E flag)\n\n"); printf("never claim)\n\n"); printf(" invalid end states "); printf("- (disabled by -E flag)\n\n"); printf("+\n\n"); printf("State-vector %%d byte, depth reached %%d", hmax, mreached); printf(", errors: %%d\n", errors); if (done) { extern void dfa_stats(void); if (maxgs+a_cycles+2 < MA) printf("MA stats: -DMA=%%d is sufficient\n", maxgs+a_cycles+2); dfa_stats(); wrap_stats(); printf("stackframes: %%d/%%d\n\n", smax, svmax); printf("stats: fa %%d, fh %%d, zh %%d, zn %%d - ", Fa, Fh, Zh, Zn); printf("check %%d holds %%d\n", Ccheck, Cholds); printf("stack stats: puts %%d, probes %%d, zaps %%d\n", PUT, PROBE, ZAPS); printf("\n"); nr1 = (nstates-nShadow)* (double)(hmax+sizeof(struct H_el)-sizeof(unsigned)); nr2 = 0.0; nr2 = (double) ((maxdepth+3)*sizeof(Trail));#if !defined(MA) || defined(COLLAPSE) nr3 = (double) (1L< 0.0) printf("%%-6.3f memory used for bit stack\n", nr5/1000000.); remainder = remainder - nr3 - nr5; printf("%%-6.3f actual memory usage for states", tmp_nr/1000000.); remainder = remainder - tmp_nr; printf(" ("); if (tmp_nr > 0.) { if (tmp_nr > nr1) printf("unsuccessful "); printf("compression: %%.2f%%%%)\n", (100.0*tmp_nr)/nr1); printf("less than 1k)\n"); { printf(" State-vector as stored = %%.0f byte", (tmp_nr)/(nstates-nShadow) - (double) (sizeof(struct H_el) - sizeof(unsigned))); printf(" + %%ld byte overhead\n", sizeof(struct H_el)-sizeof(unsigned)); printf("%%-6.3f memory used for hash table (-w%%d)\n", remainder = remainder - nr3; printf("%%-6.3f memory used for DFS stack (-m%%ld)\n", nr2/1000000., maxdepth); remainder = remainder - nr2; if (remainder - fragment > 0.0) printf("%%-6.3f other (proc and chan stacks)\n", (remainder-fragment)/1000000.); if (fragment > 0.0) printf("%%-6.3f memory lost to fragmentation\n", fragment/1000000.); printf("%%-6.3f total actual memory usage\n\n", memcnt/1000000.); printf("%%-6.3f memory usage (Mbyte)\n\n", printf("nr of templates: [ globals chans procs ]\n"); printf("collapse counts: [ "); { int i; for (i = 0; i < 256+2; i++) if (ncomps[i] != 0) printf("%%d ", ncomps[i]); printf("]\n"); if ((done || verbose) && !no_rck) do_reach(); { int i; printf("\nPeg Counts (transitions executed):\n"); for (i = 1; i < NTRANS; i++) { if (peg[i]) putpeg(i, peg[i]); } }#ifdef VAR_RANGES dumpranges(); if (vprefix > 0) close(svfd);stopped(int arg){ printf("Interrupted\n"); wrapup(); * based on Bob Jenkins hash-function from 1996 * see: http://www.burtleburtle.net/bob/#if defined(HASH64) || defined(WIN64)#define mix(a,b,c) \{ a -= b; a -= c; a ^= (c>>43); \ b -= c; b -= a; b ^= (a<<9); \ c -= a; c -= b; c ^= (b>>8); \ a -= b; a -= c; a ^= (c>>38); \ b -= c; b -= a; b ^= (a<<23); \ c -= a; c -= b; c ^= (b>>5); \ a -= b; a -= c; a ^= (c>>35); \ b -= c; b -= a; b ^= (a<<49); \ c -= a; c -= b; c ^= (b>>11); \ a -= b; a -= c; a ^= (c>>12); \ b -= c; b -= a; b ^= (a<<18); \ c -= a; c -= b; c ^= (b>>22); \{ a -= b; a -= c; a ^= (c>>13); \ b -= c; b -= a; b ^= (a<<8); \ c -= a; c -= b; c ^= (b>>13); \ b -= c; b -= a; b ^= (a<<16); \ a -= b; a -= c; a ^= (c>>3); \ b -= c; b -= a; b ^= (a<<10); \ c -= a; c -= b; c ^= (b>>15); \d_hash(uchar *Cp, int Om) /* double bit hash - Jenkins */{ unsigned long a = 0x9e3779b9, b, c = 0, len, length; unsigned long *k = (unsigned long *) Cp; length = len = (unsigned long) ((unsigned long) Om + WS-1)/WS; b = HASH_CONST[HASH_NR]; while (len >= 3) { a += k[0]; b += k[1]; c += k[2]; mix(a,b,c); k += 3; len -= 3; c += length; switch (len) { case 2: b += k[1]; case 1: a += k[0]; mix(a,b,c); j1 = c&nmask; j3 = a&7; j2 = b&nmask; j4 = (a>>3)&7; K1 = c; K2 = b;s_hash(uchar *cp, int om){ d_hash(cp, om); /* sets K1 and K2 */ if (S_Tab == H_tab) j1 = K1 %% omaxdepth; if (ssize < 8*WS) j1 = K1&mask; j1 = K1;#ifndef RANDSTORint *prerand;inirand(void) srand(123); /* fixed startpoint */ prerand = (int *) emalloc((omaxdepth+3)*sizeof(int)); for (i = 0; i < omaxdepth+3; i++) prerand[i] = rand();pan_rand(void){ if (!prerand) inirand(); return prerand[depth];main(int argc, char *argv[]){ void to_compile(void); efd = stderr; /* default */ bstore = bstore_reg; /* default */ while (argc > 1 && argv[1][0] == '-') { switch (argv[1][1]) { case 'a': fprintf(efd, "error: -a disabled"); usage(efd); break; case 'a': a_cycles = 1; break; case 'A': noasserts = 1; break; case 'b': bounded = 1; break; case 'c': upto = atoi(&argv[1][2]); break; case 'd': state_tables++; break; case 'e': every_error = 1; Nr_Trails = 1; break; case 'E': noends = 1; break; case 'F': if (strlen(argv[1]) > 2) stackfile = &argv[1][2]; break;#if !defined(SAFETY) && !defined(NOFAIR) case 'f': fairness = 1; break; case 'h': if (!argv[1][2]) usage(efd); else HASH_NR = atoi(&argv[1][2])%%33; break; case 'I': iterative = 2; every_error = 1; break; case 'i': iterative = 1; every_error = 1; break; case 'J': like_java = 1; break; /* Klaus Havelund */ case 'k': hfns = atoi(&argv[1][2]); break; case 'l': a_cycles = 1; break; case 'l': fprintf(efd, "error: -l disabled"); case 'M': udmem = atoi(&argv[1][2]); break; case 'G': udmem = atoi(&argv[1][2]); udmem *= 1024; break; case 'M': case 'G': fprintf(stderr, "-M and -G affect only -DBITSTATE\n"); case 'm': maxdepth = atoi(&argv[1][2]); break; case 'n': no_rck = 1; break; case 'p': vprefix = atoi(&argv[1][2]); break; case 'q': strict = 1; break; case 'r':samething: readtrail = 1; if (isdigit(argv[1][2])) whichtrail = atoi(&argv[1][2]); case 'P': readtrail = 1; onlyproc = atoi(&argv[1][2]); break; case 'C': coltrace = 1; goto samething; case 'g': gui = 1; goto samething; case 'S': silent = 1; break; case 'R': Nrun = atoi(&argv[1][2]); break; case 's': hfns = 1; break; case 'T': TMODE = 0444; break; case 't': if (argv[1][2]) tprefix = &argv[1][2]; break; case 'V': printf("Generated by %%s\n", Version); to_compile(); pan_exit(0); break; case 'v': verbose = 1; break; case 'w': ssize = atoi(&argv[1][2]); break; case 'Y': signoff = 1; break; case 'X': efd = stdout; break; default : fprintf(efd, "saw option -%%c\n", argv[1][1]); usage(efd); break; argc--; argv++; if (iterative && TMODE != 0666) { TMODE = 0666; fprintf(efd, "warning: -T ignored when -i or -I is used\n");#if defined(WIN32) || defined(WIN64) if (TMODE == 0666) TMODE = _S_IWRITE | _S_IREAD; TMODE = _S_IREAD;#ifdef OHASH fprintf(efd, "warning: -DOHASH no longer supported (directive ignored)\n");#ifdef JHASH fprintf(efd, "warning: -DJHASH no longer supported (directive ignored)\n");#ifdef HYBRID_HASH fprintf(efd, "warning: -DHYBRID_HASH no longer supported (directive ignored)\n");#ifdef NOCOVEST fprintf(efd, "warning: -DNOCOVEST no longer supported (directive ignored)\n");#ifdef BCOMP fprintf(efd, "warning: -DBCOMP no longer supported (directive ignored)\n"); if (hfns <= 0) { hfns = 1; fprintf(efd, "warning: using -k%%d as minimal usable value\n", hfns); omaxdepth = maxdepth; if (WS == 4 && ssize > 34) { ssize = 34; fprintf(efd, "warning: using -w%%d as max usable value\n", ssize); * -w35 would not work: 35-3 = 32 but 1^31 is the largest * power of 2 that can be represented in an unsigned long if (WS == 4 && ssize > 27) { ssize = 27; * for emalloc, the lookup table size multiplies by 4 for the pointers * the largest power of 2 that can be represented in a ulong is 1^31 * hence the largest number of lookup table slots is 31-4 = 27 hiwater = HHH = maxdepth-10; DDD = HHH/2; if (!stackfile) { stackfile = (char *) emalloc(strlen(Source)+4+1); sprintf(stackfile, "%%s._s_", Source); if (iterative) { fprintf(efd, "error: cannot use -i or -I with -DSC\n");#if (defined(R_XPT) || defined(W_XPT)) && !defined(MA) fprintf(efd, "error: -D?_XPT requires -DMA\n"); exit(1); if (iterative && a_cycles) fprintf(efd, "warning: -i or -I work for safety properties only\n");#if defined(SC) fprintf(efd, "error: -DBFS not compatible with -DSC\n");#if defined(HAS_LAST) fprintf(efd, "error: -DBFS not compatible with _last\n");#if defined(REACH) fprintf(efd, "warning: -DREACH redundant when -DBFS is used\n");#if defined(HAS_STACK) fprintf(efd, "error: cannot use UnMatched qualifier on c_track with BFS\n");#if defined(MERGED) && defined(PEG) fprintf(efd, "error: to allow -DPEG use: spin -o3 -a %%s\n", Source); fprintf(efd, " to turn off transition merge optimization\n"); pan_exit(1);#ifdef NOCOMP fprintf(efd, "error: cannot combine -DHC and -DNOCOMP\n"); fprintf(efd, "error: cannot combine -DHC and -DBITSTATE\n");#if defined(SAFETY) && defined(NP) fprintf(efd, "error: cannot combine -DNP and -DSAFETY\n"); fprintf(efd, "error: cannot combine -DMA and -DBITSTATE\n"); if (MA <= 0) { fprintf(efd, "usage: -DMA=N with N > 0 and < VECTORSZ\n");#if defined(BITSTATE) fprintf(efd, "error: cannot combine -DBITSTATE and -DCOLLAPSE\n");#if defined(NOCOMP) fprintf(efd, "error: cannot combine -DNOCOMP and -DCOLLAPSE\n"); if (maxdepth <= 0 || ssize <= 1) usage(efd);#if SYNC>0 && !defined(NOREDUCE) if (a_cycles && fairness) { fprintf(efd, "error: p.o. reduction not compatible with "); fprintf(efd, "fairness (-f) in models\n"); fprintf(efd, " with rendezvous operations: "); fprintf(efd, "recompile with -DNOREDUCE\n"); pan_exit(1);#if defined(REM_VARS) && !defined(NOREDUCE) { fprintf(efd, "warning: p.o. reduction not compatible with "); fprintf(efd, "remote varrefs (use -DNOREDUCE)\n");#if defined(NOCOMP) && !defined(BITSTATE) { fprintf(efd, "error: -DNOCOMP voids -l and -a\n");#ifdef MEMLIM memlim = (double) MEMLIM * (double) (1<<20); /* size in Mbyte */#ifdef MEMCNT#if MEMCNT<31 memlim = (double) (1< 1) HASH_NR = Nrun - 1; if (Nrun < 1 || Nrun > 32) { fprintf(efd, "error: invalid arg for -R\n"); usage(efd); if (fairness && !a_cycles) { fprintf(efd, "error: -f requires -a or -l\n");#if ACCEPT_LAB==0 { fprintf(efd, "error: no accept labels defined "); fprintf(efd, "in model (for option -a)\n"); { fprintf(efd, "warning: no explicit accept labels "); fprintf(efd, "defined in model (for -a)\n");#if !defined(NOREDUCE)#if defined(HAS_ENABLED) fprintf(efd, "error: reduced search precludes "); fprintf(efd, "use of 'enabled()'\n");#if defined(HAS_PCVALUE) fprintf(efd, "use of 'pcvalue()'\n");#if defined(HAS_BADELSE) fprintf(efd, "using 'else' combined with i/o stmnts\n"); fprintf(efd, "use of _last\n"); fprintf(efd, "warning: use of a rendezvous stmnts in the escape\n"); fprintf(efd, " of an unless clause, if present, could make p.o. reduction\n"); fprintf(efd, " invalid (use -DNOREDUCE to avoid this)\n"); fprintf(efd, " (this type of rv is also not compatible with -DBFS)\n");#if SYNC>0 && defined(BFS) fprintf(efd, "warning: use of rendezvous in BFS mode "); fprintf(efd, "does not preserve all invalid endstates\n");#if !defined(REACH) && !defined(BITSTATE) if (iterative != 0 && a_cycles == 0) fprintf(efd, "warning: -i and -I need -DREACH to work accurately\n");#if defined(BITSTATE) && defined(REACH) fprintf(efd, "warning: -DREACH voided by -DBITSTATE\n");#if defined(MA) && defined(REACH) fprintf(efd, "warning: -DREACH voided by -DMA\n");#if defined(FULLSTACK) && defined(CNTRSTACK) fprintf(efd, "error: cannot combine"); fprintf(efd, " -DFULLSTACK and -DCNTRSTACK\n");#if defined(VERI) if (!a_cycles && !state_tables) { fprintf(efd, "warning: never claim + accept labels "); fprintf(efd, "requires -a flag to fully verify\n"); if ( !readtrail { fprintf(efd, "warning: verification in BFS mode "); fprintf(efd, "is restricted to safety properties\n"); && !state_tables) { fprintf(efd, "hint: this search is more efficient "); fprintf(efd, "if pan.c is compiled -DSAFETY\n"); S_A = 0; { if (!fairness) S_A = 1; /* _a_t */ else /* _a_t and _cnt[NFAIR] */ S_A = (&(now._cnt[0]) - (uchar *) &now) + NFAIR - 2; /* -2 because first two uchars in now are masked */ signal(SIGINT, stopped); if (WS == 4 && ssize >= 32) { mask = 0xffffffff; switch (ssize) { case 34: nmask = (mask>>1); break; case 33: nmask = (mask>>2); break; default: nmask = (mask>>3); break; nmask = mask; } else if (WS == 8) { mask = ((1L<>3; } else if (WS != 4) { fprintf(stderr, "pan: wordsize %%ld not supported\n", WS); exit(1); } else /* WS == 4 and ssize < 32 */ nmask = (mask>>3); trail = (Trail *) emalloc(6*sizeof(Trail)); trail += 3; trail = (Trail *) emalloc((maxdepth+3)*sizeof(Trail)); trail++; /* protect trpt-1 refs at depth 0 */ { char nm[64]; sprintf(nm, "%%s.svd", Source); if ((svfd = creat(nm, 0666)) < 0) { fprintf(efd, "couldn't create %%s\n", nm); vprefix = 0;#if SYNC>0 && ASYNC==0 set_recvs(); run(); done = 1;usage(FILE *fd) fprintf(fd, "Valid Options are:\n"); fprintf(fd, " -a -> is disabled by -DNP "); fprintf(fd, "(-DNP compiles for -l only)\n"); fprintf(fd, " -a find acceptance cycles\n"); fprintf(fd, " -a,-l,-f -> are disabled by -DSAFETY\n"); fprintf(fd, " -A ignore assert() violations\n"); fprintf(fd, " -b consider it an error to exceed the depth-limit\n"); fprintf(fd, " -cN stop at Nth error "); fprintf(fd, "(defaults to -c1)\n"); fprintf(fd, " -d print state tables and stop\n"); fprintf(fd, " -e create trails for all errors\n"); fprintf(fd, " -E ignore invalid end states\n"); fprintf(fd, " -Ffile use 'file' to store disk-stack\n"); fprintf(fd, " -f add weak fairness (to -a or -l)\n"); fprintf(fd, " -hN use different hash-seed N:1..32\n"); fprintf(fd, " -i search for shortest path to error\n"); fprintf(fd, " -I like -i, but approximate and faster\n"); fprintf(fd, " -J reverse eval order of nested unlesses\n"); fprintf(fd, " -kN set N bits per state (defaults to 3)\n"); fprintf(fd, " -l find non-progress cycles\n"); fprintf(fd, " -l find non-progress cycles -> "); fprintf(fd, "disabled, requires "); fprintf(fd, "compilation with -DNP\n"); fprintf(fd, " -MN use N Megabytes for bitstate hash array\n"); fprintf(fd, " -GN use N Gigabytes for bitstate hash array\n"); fprintf(fd, " -mN max depth N steps (default=10k)\n"); fprintf(fd, " -n no listing of unreached states\n"); fprintf(fd, " -pN create svfile (save N bytes per state)\n"); fprintf(fd, " -q require empty chans in valid end states\n"); fprintf(fd, " -r read and execute trail - can add -v,-n,-PN,-g,-C\n"); fprintf(fd, " -rN read and execute N-th error trail\n"); fprintf(fd, " -C read and execute trail - columnated output (can add -v,-n)\n"); fprintf(fd, " -PN read and execute trail - restrict trail output to proc N\n"); fprintf(fd, " -g read and execute trail + msc gui support\n"); fprintf(fd, " -S silent replay: only user defined printfs show\n"); fprintf(fd, " -RN repeat run Nx with N "); fprintf(fd, "[1..32] independent hash functions\n"); fprintf(fd, " -s same as -k1 (single bit per state)\n"); fprintf(fd, " -T create trail files in read-only mode\n"); fprintf(fd, " -tsuf replace .trail with .suf on trailfiles\n"); fprintf(fd, " -V print SPIN version number\n"); fprintf(fd, " -v verbose -- filenames in unreached state listing\n"); fprintf(fd, " -wN hashtable of 2^N entries "); fprintf(fd, "(defaults to -w%%d)\n", ssize);Malloc(unsigned long n){ char *tmp;#if defined(MEMCNT) || defined(MEMLIM) if (memcnt+ (double) n > memlim) goto err;#if 1 tmp = (char *) malloc(n); if (!tmp) tmp = (char *) sbrk(n); if (tmp == (char *) -1L)err: printf("pan: out of memory\n"); printf(" %%g bytes used\n", memcnt); printf(" %%g bytes more needed\n", (double) n); printf(" %%g bytes limit\n", memlim); printf("hint: to reduce memory, recompile with\n"); printf(" -DMA=%%d # better/slower compression, or\n", hmax); printf(" -DBITSTATE # supertrace, approximation\n");#ifndef HC printf(" -DCOLLAPSE # good, fast compression, or\n"); printf(" -DHC # hash-compaction, approximation\n"); memcnt += (double) n; return tmp;#define CHUNK (100*VECTORSZ)emalloc(unsigned long n) /* never released or reallocated */ if (n == 0) return (char *) NULL; if (n&(sizeof(void *)-1)) /* for proper alignment */ n += sizeof(void *)-(n&(sizeof(void *)-1)); if ((unsigned long) left < n) { grow = (n < CHUNK) ? CHUNK : n; have = Malloc(grow); fragment += (double) left; left = grow; tmp = have; have += (long) n; left -= (long) n; memset(tmp, 0, n);Uerror(char *str){ /* always fatal */ uerror(str);#if defined(MA) && !defined(SAFETY)Unwind(void){ Trans *t; uchar ot, _m; int tt; short II; int i; uchar oat = now._a_t; now._a_t &= ~(1|16|32); memcpy((char *) &comp_now, (char *) &now, vsize); now._a_t = oat; trpt = getframe(depth); printf("%%d State: ", depth); for (i = 0; i < vsize; i++) printf("%%d%%s,", ((char *)&now)[i], Mask[i]?"*":""); if (trpt->o_pm&128) /* fairness alg */ { now._cnt[now._a_t&1] = trpt->bup.oval; depth--; trpt = getframe(depth); trpt--; goto Q999; { int d; Trail *trl; now._last = 0; for (d = 1; d < depth; d++) { trl = getframe(depth-d); /* was trl = (trpt-d); */ if (trl->pr != 0) { now._last = trl->pr - BASE; break; } } } now._last = (depth<1)?0:(trpt-1)->pr; now._event = trpt->o_event; if ((now._a_t&1) && depth <= A_depth) { now._a_t &= ~(1|16|32); if (fairness) now._a_t |= 2; /* ? */ A_depth = 0; goto CameFromHere; /* checkcycles() */ t = trpt->o_t; ot = trpt->o_ot; II = trpt->pr; tt = trpt->o_tt; this = pptr(II); _m = do_reverse(t, II, trpt->o_m); printf("%%3d: proc %%d ", depth, II); printf("reverses %%d, %%d to %%d,", t->forw, tt, t->st); printf(" %%s [abit=%%d,adepth=%%d,", t->tp, now._a_t, A_depth); printf("tau=%%d,%%d] \n", trpt->tau, (trpt-1)->tau); depth--; trpt--; /* reached[ot][t->st] = 1; 3.4.13 */ ((P0 *)this)->_p = tt; if ((trpt->o_pm&32)) if (now._cnt[now._a_t&1] == 0) now._cnt[now._a_t&1] = 1;Q999: now._a_t |= 2;CameFromHere: if (memcmp((char *) &now, (char *) &comp_now, vsize) == 0) return depth;static char unwinding;uerror(char *str){ static char laststr[256]; int is_cycle; if (unwinding) return; /* 1.4.2 */ if (strncmp(str, laststr, 254)) printf("pan: %%s (at depth %%ld)\n", str, (depthfound==-1)?depth:depthfound); strncpy(laststr, str, 254); errors++; if (readtrail) { wrap_trail(); return; } is_cycle = (strstr(str, " cycle") != (char *) 0); if (!is_cycle) if ((every_error != 0) || errors == upto) if (is_cycle) { int od = depth; unwinding = 1; depthfound = Unwind(); unwinding = 0; depth = od; if (depth > 1) trpt--; nuerror(str); if (depth > 1) trpt++; putrail(); if (strstr(str, " cycle")) { if (every_error) printf("sorry: MA writes 1 trail max\n"); wrapup(); /* no recovery from unwind */ { depth--; trpt--; /* undo */ if (iterative != 0 && maxdepth > 0) { maxdepth = (iterative == 1)?(depth-1):(depth/2); warned = 1; printf("pan: reducing search depth to %%ld\n", maxdepth); depthfound = -1;xrefsrc(int lno, S_F_MAP *mp, int M, int i){ Trans *T; int j, retval=1; for (T = trans[M][i]; T; T = T->nxt) if (T && T->tp) { if (strcmp(T->tp, ".(goto)") == 0 || strncmp(T->tp, "goto :", 6) == 0) return 1; /* not reported */ printf("\tline %%d", lno); for (j = 0; j < sizeof(mp); j++) if (i >= mp[j].from && i <= mp[j].upto) { printf(", \"%%s\"", mp[j].fnm); printf(", state %%d", i); if (strcmp(T->tp, "") != 0) { char *q; q = transmognify(T->tp); printf(", \"%%s\"", q?q:""); } else if (stopstate[M][i]) printf(", -end state-"); retval = 0; /* reported */ return retval;r_ck(uchar *which, int N, int M, short *src, S_F_MAP *mp){ int i, m=0; if (M == VERI && !verbose) return; printf("unreached in proctype %%s\n", procname[M]); for (i = 1; i < N; i++) if (which[i] == 0 && (mapstate[M][i] == 0 || which[mapstate[M][i]] == 0)) m += xrefsrc((int) src[i], mp, M, i); else m++; printf(" (%%d of %%d states)\n", N-1-m, N-1);putrail(void){ int fd; long i, j; Trail *trl;#if defined VERI || defined(MERGED) char snap[64]; fd = make_trail(); for (i = 1; i <= depth; i++) { if (i == depthfound+1) write(fd, "-1:-1:-1\n", 9); trl = getframe(i); if (!trl->o_t) continue; if (trl->o_pm&128) continue; sprintf(snap, "%%ld:%%d:%%d\n", i, trl->pr, trl->o_t->t_id); { printf("pan: error writing trailfile\n"); close(fd); wrapup();sv_save(void) /* push state vector onto save stack */{ if (!svtack->nxt) { svtack->nxt = (Svtack *) emalloc(sizeof(Svtack)); svtack->nxt->body = emalloc(vsize*sizeof(char)); svtack->nxt->lst = svtack; svtack->nxt->m_delta = vsize; svmax++; } else if (vsize > svtack->nxt->m_delta) { svtack->nxt->body = emalloc(vsize*sizeof(char)); svtack = svtack->nxt; svtack->o_boq = boq; svtack->o_delta = vsize; /* don't compress */ memcpy((char *)(svtack->body), (char *) &now, vsize); printf("%%d: sv_save\n", depth);sv_restor(void) /* pop state vector from save stack */ memcpy((char *)&now, svtack->body, svtack->o_delta); boq = svtack->o_boq;#ifdef HAS_STACK c_unstack((uchar *) &(svtack->c_stack[0])); c_revert((uchar *) &(now.c_state[0])); if (vsize != svtack->o_delta) Uerror("sv_restor"); if (!svtack->lst) Uerror("error: v_restor"); svtack = svtack->lst; printf(" sv_restor\n");p_restor(int h){ int i; char *z = (char *) &now; proc_offset[h] = stack->o_offset; proc_skip[h] = (uchar) stack->o_skip;#ifndef XUSAFE p_name[h] = stack->o_name; for (i = vsize + stack->o_skip; i > vsize; i--) Mask[i-1] = 1; /* align */ vsize += stack->o_skip; memcpy(z+vsize, stack->body, stack->o_delta); vsize += stack->o_delta;#ifndef NOVSZ now._vsz = vsize; for (i = 1; i <= Air[((P0 *)pptr(h))->_t]; i++) Mask[vsize - i] = 1; /* pad */ Mask[proc_offset[h]] = 1; /* _pid */ if (BASE > 0 && h > 0) ((P0 *)pptr(h))->_pid = h-BASE; ((P0 *)pptr(h))->_pid = h; i = stack->o_delqs; now._nr_pr += 1; if (!stack->lst) /* debugging */ Uerror("error: p_restor"); stack = stack->lst; this = pptr(h); while (i-- > 0) q_restor();q_restor(void){ char *z = (char *) &now; int k, k_end; q_offset[now._nr_qs] = stack->o_offset; q_skip[now._nr_qs] = (uchar) stack->o_skip; q_name[now._nr_qs] = stack->o_name; now._nr_qs += 1; k_end = stack->o_offset; k = k_end - stack->o_skip; if (q_zero(now._nr_qs)) k_end += stack->o_delta; for ( ; k < k_end; k++) Mask[k] = 1; Uerror("error: q_restor");typedef struct IntChunks { int *ptr; struct IntChunks *nxt;} IntChunks;IntChunks *filled_chunks[512];IntChunks *empty_chunks[512];int *grab_ints(int nr){ IntChunks *z; if (nr >= 512) Uerror("cannot happen grab_int"); if (filled_chunks[nr]) { z = filled_chunks[nr]; filled_chunks[nr] = filled_chunks[nr]->nxt; } else { z = (IntChunks *) emalloc(sizeof(IntChunks)); z->ptr = (int *) emalloc(nr * sizeof(int)); z->nxt = empty_chunks[nr]; empty_chunks[nr] = z; return z->ptr;ungrab_ints(int *p, int nr) if (!empty_chunks[nr]) Uerror("cannot happen ungrab_int"); z = empty_chunks[nr]; empty_chunks[nr] = empty_chunks[nr]->nxt; z->ptr = p; z->nxt = filled_chunks[nr]; filled_chunks[nr] = z;delproc(int sav, int h){ int d, i=0; int o_vsize = vsize; if (h+1 != (int) now._nr_pr) return 0; while (now._nr_qs && q_offset[now._nr_qs-1] > proc_offset[h]) { delq(sav); d = vsize - proc_offset[h]; if (sav) { if (!stack->nxt) { stack->nxt = (Stack *) emalloc(sizeof(Stack)); stack->nxt->body = emalloc(Maxbody*sizeof(char)); stack->nxt->lst = stack; smax++; stack = stack->nxt; stack->o_offset = proc_offset[h]; stack->o_skip = (int) proc_skip[h]; stack->o_skip = (short) proc_skip[h]; stack->o_name = p_name[h]; stack->o_delta = d; stack->o_delqs = i; memcpy(stack->body, (char *)pptr(h), d); vsize = proc_offset[h]; now._nr_pr = now._nr_pr - 1; memset((char *)pptr(h), 0, d); vsize -= (int) proc_skip[h]; for (i = vsize; i < o_vsize; i++) Mask[i] = 0; /* reset */delq(int sav){ int h = now._nr_qs - 1; int d = vsize - q_offset[now._nr_qs - 1]; int k, o_vsize = vsize; stack->o_offset = q_offset[h]; stack->o_skip = (int) q_skip[h]; stack->o_skip = (short) q_skip[h]; stack->o_name = q_name[h]; memcpy(stack->body, (char *)qptr(h), d); vsize = q_offset[h]; now._nr_qs = now._nr_qs - 1; memset((char *)qptr(h), 0, d); vsize -= (int) q_skip[h]; for (k = vsize; k < o_vsize; k++) Mask[k] = 0; /* reset */qs_empty(void) for (i = 0; i < (int) now._nr_qs; i++) { if (q_sz(i) > 0) return 0;endstate(void){ int i; P0 *ptr; for (i = BASE; i < (int) now._nr_pr; i++) { ptr = (P0 *) pptr(i); if (!stopstate[ptr->_t][ptr->_p]) if (strict) return qs_empty();#if defined(EVENT_TRACE) && !defined(OTIM) if (!stopstate[EVENT_TRACE][now._event] && !a_cycles) { printf("pan: event_trace not completed\n");checkcycles(void){ uchar o_a_t = now._a_t; uchar o_cnt = now._cnt[1]; struct H_el *sv = trpt->ostate; /* save */ uchar prov = trpt->proviso; /* save */ { int i; uchar *v = (uchar *) &now; printf(" set Seed state "); if (fairness) printf("(cnt = %%d:%%d, nrpr=%%d) ", now._cnt[0], now._cnt[1], now._nr_pr); /* for (i = 0; i < n; i++) printf("%%d,", v[i]); */ printf("\n"); printf("%%d: cycle check starts\n", depth); now._a_t |= (1|16|32); /* 1 = 2nd DFS; (16|32) to help hasher */ now._cnt[1] = now._cnt[0]; memcpy((char *)&A_Root, (char *)&now, vsize); A_depth = depthfound = depth; new_state(); /* start 2nd DFS */ now._a_t = o_a_t; now._cnt[1] = o_cnt; A_depth = 0; depthfound = -1; printf("%%d: cycle check returns\n", depth); trpt->ostate = sv; /* restore */ trpt->proviso = prov;#endif struct H_el *Free_list = (struct H_el *) 0;onstack_init(void) /* to store stack states in a bitstate search */{ S_Tab = (struct H_el **) emalloc(maxdepth*sizeof(struct H_el *));struct H_el *grab_state(int n){ struct H_el *v, *last = 0; if (H_tab == S_Tab) { for (v = Free_list; v && ((int) v->tagged >= n); v=v->nxt) { if ((int) v->tagged == n) { if (last) last->nxt = v->nxt;gotcha: Free_list = v->nxt; v->tagged = 0; v->nxt = 0; v->ln = 0; return v; Fh++; last=v; /* new: second try */ v = Free_list; if (v && ((int) v->tagged >= n)) goto gotcha; ngrabs++; return (struct H_el *) emalloc(sizeof(struct H_el)+n-sizeof(unsigned));#define grab_state(n) (struct H_el *) \ emalloc(sizeof(struct H_el)+n-sizeof(unsigned));unsigned longordinal(char *v, long n, short tp){ struct H_el *tmp, *ntmp; long m; struct H_el *olst = (struct H_el *) 0; s_hash((uchar *)v, n); tmp = H_tab[j1]; { tmp = grab_state(n); H_tab[j1] = tmp; for ( ;; olst = tmp, tmp = tmp->nxt) { m = memcmp(((char *)&(tmp->state)), v, n); if (n == tmp->ln) if (m == 0) goto done; if (m < 0)Insert: ntmp = grab_state(n); ntmp->nxt = tmp; if (!olst) H_tab[j1] = ntmp; olst->nxt = ntmp; tmp = ntmp; } else if (!tmp->nxt)Append: tmp->nxt = grab_state(n); tmp = tmp->nxt; if (n < tmp->ln) goto Insert; else if (!tmp->nxt) goto Append; m = ++ncomps[tp]; tmp->tagged = m; tmp->st_id = m; memcpy(((char *)&(tmp->state)), v, n); tmp->ln = n;done: return tmp->tagged; return tmp->st_id;compress(char *vin, int nin) /* collapse compression */{ char *w, *v = (char *) &comp_now; int i, j; unsigned long n; static char *x; static uchar nbytes[513]; /* 1 + 256 + 256 */ static unsigned short nbytelen; long col_q(int, char *); long col_p(int, char *); *v++ = now._a_t; if (fairness) for (i = 0; i < NFAIR; i++) *v++ = now._cnt[i]; nbytelen = 0;#ifndef JOINPROCS { n = col_p(i, (char *) 0);#ifdef NOFIX nbytes[nbytelen] = 0; nbytes[nbytelen] = 1; *v++ = ((P0 *) pptr(i))->_t; *v++ = n&255; if (n >= (1<<8)) { nbytes[nbytelen]++; *v++ = (n>>8)&255; if (n >= (1<<16)) *v++ = (n>>16)&255; if (n >= (1<<24)) *v++ = (n>>24)&255; nbytelen++; x = scratch; x += col_p(i, x); n = ordinal(scratch, x-scratch, 2); /* procs */ *v++ = n&255; nbytes[nbytelen] = 0; if (n >= (1<<8)) { nbytes[nbytelen]++; *v++ = (n>>8)&255; if (n >= (1<<16)) *v++ = (n>>16)&255; if (n >= (1<<24)) *v++ = (n>>24)&255; nbytelen++;#ifdef SEPQS { n = col_q(i, (char *) 0);#ifdef NOVSZ /* 3 = _a_t, _nr_pr, _nr_qs */ w = (char *) &now + 3 * sizeof(uchar); w += NFAIR;#if VECTORSZ<65536 w = (char *) &(now._vsz) + sizeof(unsigned short); w = (char *) &(now._vsz) + sizeof(unsigned long); *x++ = now._nr_pr; *x++ = now._nr_qs; if (now._nr_qs > 0 && qptr(0) < pptr(0)) n = qptr(0) - (uchar *) w; n = pptr(0) - (uchar *) w; j = w - (char *) &now; for (i = 0; i < (int) n; i++, w++) if (!Mask[j++]) *x++ = *w;#ifndef SEPQS x += col_q(i, x); x--; for (i = 0, j = 6; i < nbytelen; i++) { if (j == 6) { j = 0; *(++x) = 0; j += 2; *x |= (nbytes[i] << j); x++; for (j = 0; j < WS-1; j++) *x++ = 0; x -= j; j = 0; n = ordinal(scratch, x-scratch, 0); /* globals */ if (n >= (1<< 8)) { *v++ = (n>> 8)&255; j++; } if (n >= (1<<16)) { *v++ = (n>>16)&255; j++; } if (n >= (1<<24)) { *v++ = (n>>24)&255; j++; } *v++ = j; /* add last count as a byte */ for (i = 0; i < WS-1; i++) *v++ = 0; v -= i; printf("collapse %%d -> %%d\n", vsize, v - (char *)&comp_now); return v - (char *)&comp_now;#if !defined(NOCOMP)compress(char *vin, int n) /* default compression */ int delta = 0; s_hash((uchar *)vin, n); /* sets K1 and K2 */ if (S_A) { delta++; /* _a_t */ if (S_A > NFAIR) delta += NFAIR; /* _cnt[] */ memcpy((char *) &comp_now + delta, (char *) &K1, WS); delta += WS;#if HC>0 memcpy((char *) &comp_now + delta, (char *) &K2, HC); delta += HC; return delta; char *vv = vin; char *v = (char *) &comp_now; for (i = 0; i < n; i++, vv++) if (!Mask[i]) *v++ = *vv; printf("compress %%d -> %%d\n", n, v - (char *)&comp_now);#if defined(MA)#if !defined(onstack_now)int onstack_now(void) {}#if !defined(onstack_put)void onstack_put(void) {}#if !defined(onstack_zap)void onstack_zap(void) {}onstack_zap(void){ struct H_el *v, *w, *last = 0; struct H_el **tmp = H_tab; char *nv; int n, m; H_tab = S_Tab; nv = (char *) &comp_now; n = compress((char *)&now, vsize);#if defined(BITSTATE) && defined(LC) n = compact_stack((char *)&now, vsize); nv = (char *) &now; n = vsize;#if !defined(HC) && !(defined(BITSTATE) && defined(LC)) s_hash((uchar *)nv, n); H_tab = tmp; for (v = S_Tab[j1]; v; Zh++, last=v, v=v->nxt) { m = memcmp(&(v->state), nv, n); if (m == 0) goto Found; if (m < 0)/* NotFound: */ Uerror("stack out of wack - zap"); return;Found: ZAPS++; if (last) last->nxt = v->nxt; S_Tab[j1] = v->nxt; v->tagged = (unsigned) n;#if !defined(NOREDUCE) && !defined(SAFETY) v->proviso = 0; v->nxt = last = (struct H_el *) 0; for (w = Free_list; w; Fa++, last=w, w = w->nxt) { if ((int) w->tagged <= n) { if (last) { v->nxt = w; /* was: v->nxt = w->nxt; */ last->nxt = v; { v->nxt = Free_list; Free_list = v; if (!w->nxt) { w->nxt = v; Free_list = v;onstack_put(void){ struct H_el **tmp = H_tab; if (hstore((char *)&now, vsize) != 0) printf("pan: warning, double stack entry\n"); Uerror("cannot happen - unstack_put"); trpt->ostate = Lstate; PUT++;onstack_now(void){ struct H_el *tmp; struct H_el **tmp2 = H_tab; char *v; int n, m = 1; v = (char *) &comp_now; v = (char *) &now; H_tab = tmp2; for (tmp = S_Tab[j1]; tmp; Zn++, tmp = tmp->nxt) { m = memcmp(((char *)&(tmp->state)),v,n); if (m <= 0) { Lstate = (struct H_el *) tmp; PROBE++; return (m == 0);hinit(void) { void r_xpoint(void); r_xpoint(); dfa_init((unsigned short) (MA+a_cycles)); H_tab = (struct H_el **) emalloc((1L<= MA) { printf("pan: error, MA too small, recompile pan.c"); printf(" with -DMA=N with N>%%d\n", n); Uerror("aborting"); if (n > (int) maxgs) maxgs = (unsigned int) n; for (i = 0; i < n; i++) Info[i] = v[i]; for ( ; i < MA-1; i++) Info[i] = 0; Info[MA-1] = pbit; if (a_cycles) /* place _a_t at the end */ { Info[MA] = Info[0]; Info[0] = 0; } if (!dfa_store(Info)) { if (pbit == 0 && (now._a_t&1) && depth > A_depth) { Info[MA] &= ~(1|16|32); /* _a_t */ if (dfa_member(MA)) { Info[MA-1] = 4; /* off-stack bit */ nShadow++; if (!dfa_member(MA-1)) printf("intersected 1st dfs stack\n"); return 3; printf("new state\n"); return 0; /* new state */ if (pbit == 0) { Info[MA-1] = 1; /* proviso bit */ trpt->proviso = dfa_member(MA-1); Info[MA-1] = 4; /* off-stack bit */ if (dfa_member(MA-1)) { printf("old state\n"); return 1; /* off-stack */ } else { printf("on-stack\n"); return 2; /* on-stack */ printf("old state\n"); return 1; /* old state */compact_stack(char *vin, int n){ int delta = 0; delta++; /* room for state[0] |= 128 */ memcpy((char *) &comp_now + delta, (char *) &K2, WS); delta += WS; /* use all available bits */hstore(char *vin, int nin) /* hash table storage */{ struct H_el *tmp, *ntmp, *olst = (struct H_el *) 0; char *v; int n, m=0; uchar rem_a; { v = (char *) &comp_now; n = compact_stack(vin, nin); { v = vin; n = nin; v = vin; n = nin; #ifdef HC rem_a = now._a_t; now._a_t = 0; #endif now._a_t = rem_a; { v[0] = 0; /* _a_t */ for (m = 0; m < NFAIR; m++) v[m+1] = 0; /* _cnt[] */ m = 0; { tmp = grab_state(n); H_tab[j1] = tmp; { for (;; hcmp++, olst = tmp, tmp = tmp->nxt) { /* skip the _a_t and the _cnt bytes */ if (tmp->ln != 0) { if (!tmp->nxt) goto Append; m = memcmp(((char *)&(tmp->state)) + S_A, v + S_A, n - S_A); if (m == 0) {#define wasnew 0 int wasnew = 0; if (S_A) { if ((((char *)&(tmp->state))[0] & V_A) != V_A) { wasnew = 1; nShadow++; ((char *)&(tmp->state))[0] |= V_A; } if (S_A > NFAIR) { /* 0 <= now._cnt[now._a_t&1] < MAXPROC */ unsigned ci, bp; /* index, bit pos */ ci = (now._cnt[now._a_t&1] / 8); bp = (now._cnt[now._a_t&1] - 8*ci); if (now._a_t&1) /* use tail-bits in _cnt */ { ci = (NFAIR - 1) - ci; bp = 7 - bp; /* bp = 0..7 */ ci++; /* skip over _a_t */ bp = 1 << bp; /* the bit mask */ if ((((char *)&(tmp->state))[ci] & bp)==0) { if (!wasnew) { wasnew = 1; nShadow++; ((char *)&(tmp->state))[ci] |= bp; } /* else: wasnew == 0, i.e., old state */ if (wasnew) tmp->tagged |= V_A; if ((now._a_t&1) && (tmp->tagged&A_V) && depth > A_depth)intersect: printf("1st dfs-stack intersected on state %%d+\n", (int) tmp->st_id); return 3; printf(" New state %%d+\n", (int) tmp->st_id); dumpstate(1, (char *)&(tmp->state),n,tmp->tagged); if ((S_A)?(tmp->tagged&V_A):tmp->tagged) /* already on current dfs stack */ /* but may also be on 1st dfs stack */ && depth > A_depth && (!fairness || now._cnt[1] <= 1) ) goto intersect; printf(" Stack state %%d\n", (int) tmp->st_id); dumpstate(0, (char *)&(tmp->state),n,tmp->tagged); return 2; /* match on stack */ dumpstate(1, (char *)&(tmp->state), n, 0); printf(" Old state %%d\n", (int) tmp->st_id); dumpstate(0, (char *)&(tmp->state), n, 0);#ifdef REACH if (tmp->D > depth) { tmp->D = depth; printf(" ReVisiting (from smaller depth)\n"); nstates--;#if defined(BFS) && defined(Q_PROVISO) Lstate = (struct H_el *) tmp; return 1; /* match outside stack */ } else if (m < 0) { /* insert state before tmp */ ntmp = grab_state(n); ntmp->nxt = tmp; if (!olst) H_tab[j1] = ntmp; olst->nxt = ntmp; tmp = ntmp; } else if (!tmp->nxt) { /* append after tmp */Append: tmp->nxt = grab_state(n); tmp = tmp->nxt; } } tmp->st_id = (unsigned) nstates; printf(" Push state %%d\n", ((int) nstates) - 1); printf(" New state %%d\n", (int) nstates);#if !defined(SAFETY) || defined(REACH) tmp->D = depth; { v[0] = V_A; { unsigned ci, bp; /* as above */ if (now._a_t&1) v[1+ci] = 1 << bp; tmp->tagged = (S_A)?V_A:(depth+1); dumpstate(-1, v, n, tmp->tagged); Lstate = (struct H_el *) tmp; dumpstate(-1, v, n, 0);#include TRANSITIONSdo_reach(void)#if defined(BFS) && defined(REACH)#undef REACH#define BASE 1#define BASE 0typedef struct Trans { short atom; /* if &2 = atomic trans; if &8 local */ short escp[HAS_UNLESS]; /* lists the escape states */ short e_trans; /* if set, this is an escp-trans */ short tpe[2]; /* class of operation (for reduction) */ short qu[6]; /* for conditional selections: qid's */ uchar ty[6]; /* ditto: type's */ short om; /* completion status of preselects */ char *tp; /* src txt of statement */ int st; /* the nextstate */ int t_id; /* transition id, unique within proc */ int forw; /* index forward transition */ int back; /* index return transition */ struct Trans *nxt;} Trans; #define qptr(x) (((uchar *)&now)+(int)q_offset[x])#define pptr(x) (((uchar *)&now)+(int)proc_offset[x])extern uchar *Pptr(int);#define q_sz(x) (((Q0 *)qptr(x))->Qlen) #ifndef VECTORSZ#define VECTORSZ 1024 /* sv size in bytes */#ifndef CHECK#define CHECK#ifndef DEBUG#define DEBUG#define NOFAIR#ifdef NOREDUCE#define XUSAFE#if !defined(SAFETY) && !defined(MA)#define FULLSTACK#ifdef SAFETY && !defined(HASH64)#define CNTRSTACK#define NOCOMP#if !defined(LC) && defined(SC)#define LC#if defined(COLLAPSE2) || defined(COLLAPSE3) || defined(COLLAPSE4)/* accept the above for backward compatibility */#define COLLAPSE#undef HC#define HC4#ifdef HC0#define HC 0#ifdef HC1#define HC 1#ifdef HC2#define HC 2#ifdef HC3#define HC 3#ifdef HC4#define HC 4unsigned long ncomps[256+2];#define MAXQ 255#define MAXPROC 255#define WS sizeof(long) /* word size in bytes */typedef struct Stack { /* for queues and processes */ int o_delta; int o_offset; int o_skip; int o_delqs; short o_delta; short o_offset; short o_skip; short o_delqs; short o_boq; char *o_name; char *body; struct Stack *nxt; struct Stack *lst;} Stack; typedef struct Svtack { /* for complete state vector */ int m_delta; short o_delta; /* current size of frame */ short m_delta; /* maximum size of frame */ struct Svtack *nxt; struct Svtack *lst;} Svtack; Trans ***trans; /* 1 ptr per state per proctype */ #if defined(FULLSTACK) || defined(BFS)struct H_el *Lstate;int depthfound = -1; /* loop detection */int proc_offset[MAXPROC];int q_offset[MAXQ];short proc_offset[MAXPROC];short q_offset[MAXQ];uchar proc_skip[MAXPROC];uchar q_skip[MAXQ];unsigned long vsize; /* vector size in bytes */int vprefix=0, svfd; /* runtime option -pN */char *tprefix = "trail"; /* runtime option -tsuffix */short boq = -1; /* blocked_on_queue status */typedef struct State { uchar _nr_pr; uchar _nr_qs; uchar _a_t; /* cycle detection */ uchar _cnt[NFAIR]; /* counters, weak fairness */ unsigned short _vsz; unsigned long _vsz; uchar _last; /* pid executed in last step */#if nstates_event<256 uchar _event; unsigned short _event;){ int j, h = now._nr_pr; int k; uchar *o_this = this; if (TstOnly) return (h < MAXPROC);/* redefine Index only within this procedure */#undef Index#define Index(x, y) Boundcheck(x, y, 0, 0, 0) if (h >= MAXPROC) Uerror("too many processes"); switch (n) { case 0: j = sizeof(P0); break; default: Uerror("bad proc - addproc"); if (vsize%%WS) proc_skip[h] = WS-(vsize%%WS); proc_skip[h] = 0; for (k = vsize + (int) proc_skip[h]; k > vsize; k--) Mask[k-1] = 1; /* align */ vsize += (int) proc_skip[h]; proc_offset[h] = vsize; { int dummy = 0; write(svfd, (uchar *) &dummy, sizeof(int)); /* mark */ write(svfd, (uchar *) &h, sizeof(int)); write(svfd, (uchar *) &n, sizeof(int)); write(svfd, (uchar *) &proc_offset[h], sizeof(int)); write(svfd, (uchar *) &proc_offset[h], sizeof(short)); write(svfd, (uchar *) &now, vprefix-4*sizeof(int)); /* padd */ if (fairness && ((int) now._nr_pr + 1 >= (8*NFAIR)/2)) { printf("pan: error: too many processes -- current"); printf(" max is %%d procs (-DNFAIR=%%d)\n", (8*NFAIR)/2 - 2, NFAIR); printf("\trecompile with -DNFAIR=%%d\n", NFAIR+1); vsize += j; for (k = 1; k <= Air[n]; k++) Mask[vsize - k] = 1; /* pad */ Mask[vsize-j] = 1; /* _pid */ hmax = max(hmax, vsize); if (vsize >= VECTORSZ) { printf("pan: error, VECTORSZ too small, recompile pan.c"); printf(" with -DVECTORSZ=N with N>%%d\n", vsize); memset((char *)pptr(h), 0, j); ((P0 *)this)->_pid = h-BASE; ((P0 *)this)->_pid = h;addqueue(int n, int is_rv){ int j=0, i = now._nr_qs; if (i >= MAXQ) Uerror("too many queues"); default: Uerror("bad queue - addqueue"); q_skip[i] = WS-(vsize%%WS); q_skip[i] = 0; k = vsize; if (is_rv) k += j; for (k += (int) q_skip[i]; k > vsize; k--) Mask[k-1] = 1; vsize += (int) q_skip[i]; q_offset[i] = vsize; Uerror("VECTORSZ is too small, edit pan.h"); memset((char *)qptr(i), 0, j); ((Q0 *)qptr(i))->_t = n; return i+1;{ int j; uchar *z; #ifdef HAS_SORTED if (!into--) uerror("ref to uninitialized chan name (sending)"); if (into >= (int) now._nr_qs || into < 0) Uerror("qsend bad queue#"); z = qptr(into); j = ((Q0 *)qptr(into))->Qlen; switch (((Q0 *)qptr(into))->_t) { case 0: printf("queue %%d was deleted\n", into+1); default: Uerror("bad queue - qsend"); if (in_s_scope(into+1)) require('s', into);q_zero(int from){ if (!from--) { uerror("ref to uninitialized chan name (q_zero)"); switch(((Q0 *)qptr(from))->_t) { case 0: printf("queue %%d was deleted\n", from+1); Uerror("bad queue q-zero");not_RV(int from){ if (q_zero(from)) { printf("==>> a test of the contents of a rv "); printf("channel always returns FALSE\n"); uerror("error to poll rendezvous channel");setq_claim(int x, int m, char *s, int y, char *p){ if (x == 0) uerror("x[rs] claim on uninitialized channel"); if (x < 0 || x > MAXQ) Uerror("cannot happen setq_claim"); q_claim[x] |= m; p_name[y] = p; q_name[x] = s; if (m&2) q_S_check(x, y); if (m&1) q_R_check(x, y);short q_sender[MAXQ+1];q_S_check(int x, int who){ if (!q_sender[x]) { q_sender[x] = who+1; if (q_zero(x)) { printf("chan %%s (%%d), ", q_name[x], x-1); printf("sndr proc %%s (%%d)\n", p_name[who], who); uerror("xs chans cannot be used for rv"); if (q_sender[x] != who+1) { printf("pan: xs assertion violated: "); printf("access to chan <%%s> (%%d)\npan: by ", q_name[x], x-1); if (q_sender[x] > 0 && p_name[q_sender[x]-1]) printf("%%s (proc %%d) and by ", p_name[q_sender[x]-1], q_sender[x]-1); printf("%%s (proc %%d)\n", p_name[who], who); uerror("error, partial order reduction invalid");short q_recver[MAXQ+1];q_R_check(int x, int who){ if (!q_recver[x]) { q_recver[x] = who+1; printf("recv proc %%s (%%d)\n", uerror("xr chans cannot be used for rv"); if (q_recver[x] != who+1) { printf("pan: xr assertion violated: "); printf("access to chan %%s (%%d)\npan: ", if (q_recver[x] > 0 && p_name[q_recver[x]-1]) printf("by %%s (proc %%d) and ", p_name[q_recver[x]-1], q_recver[x]-1); printf("by %%s (proc %%d)\n",q_len(int x){ if (!x--) uerror("ref to uninitialized chan name (len)"); return ((Q0 *)qptr(x))->Qlen;q_full(int from) uerror("ref to uninitialized chan name (qfull)"); Uerror("bad queue - q_full");q_e_f(int from){ /* empty or full */ return !q_len(from) || q_full(from);#if NQS>0qrecv(int from, int slot, int fld, int done){ uchar *z; int j, k, r=0; if (!from--) uerror("ref to uninitialized chan name (receiving)"); if (from >= (int) now._nr_qs || from < 0) Uerror("qrecv bad queue#"); z = qptr(from); if (done && (in_r_scope(from+1))) require('r', from); switch (((Q0 *)qptr(from))->_t) { default: Uerror("bad queue - qrecv"); return r;longcol_q(int i, char *z){ int j=0, k; char *x, *y; Q0 *ptr = (Q0 *) qptr(i); switch (ptr->_t) {run(void){ /* int i; */ memset((char *)&now, 0, sizeof(State)); vsize = (unsigned long) (sizeof(State) - VECTORSZ);/* optional provisioning statements, e.g. to *//* set hidden variables, used as constants */#ifdef PROV#include PROV settable(); Maxbody = max(Maxbody, sizeof(P%d)); reached[%d] = reached%d; accpstate[%d] = (uchar *) emalloc(nstates%d); progstate[%d] = (uchar *) emalloc(nstates%d); stopstate[%d] = (uchar *) emalloc(nstates%d); visstate[%d] = (uchar *) emalloc(nstates%d); mapstate[%d] = (short *) emalloc(nstates%d * sizeof(short)); NrStates[%d] = nstates%d; stopstate[%d][endstate%d] = 1; retrans(%d, nstates%d, start%d, src_ln%d, reached%d); if (state_tables) { printf("\nTransition Type: "); printf("A=atomic; D=d_step; L=local; G=global\n"); printf("Source-State Labels: "); printf("p=progress; e=end; a=accept;\n"); printf("Note: statement merging was used. Only the first\n"); printf(" stmnt executed in each merge sequence is shown\n"); printf(" (use spin -a -o3 to disable statement merging)\n"); pan_exit(0);#define ACCEPT_LAB 1 /* at least 1 in np_ */#define ACCEPT_LAB %d /* user-defined accept labels */#define PROG_LAB %d /* progress labels */uchar *accpstate[%d];uchar *progstate[%d];uchar *reached[%d];uchar *stopstate[%d];uchar *visstate[%d];short *mapstate[%d];int NrStates[%d]; Maxbody = max(Maxbody, sizeof(Q%d)); r_ck(reached%d, nstates%d, %d, src_ln%d, src_file%d); case %d: j = sizeof(P%d); break; this = o_this; return h-BASE;#define Index(x, y) Boundcheck(x, y, II, tt, t)#if defined(BITSTATE) && defined(COLLAPSE)/* just to allow compilation, to generate the error */long col_p(int i, char *z) { return 0; }long col_q(int i, char *z) { return 0; }col_p(int i, char *z){ int j, k; unsigned long ordinal(char *, long, short); P0 *ptr = (P0 *) pptr(i); default: Uerror("bad proctype - collapse"); if (z) x = z; else x = scratch; y = (char *) ptr; k = proc_offset[i]; for ( ; j > 0; j--, y++) if (!Mask[k++]) *x++ = *y; x -= j; if (z) return (long) (x - z); return ordinal(scratch, x-scratch, (short) (2+ptr->_t)); default: Uerror("bad qtype - collapse"); y = (char *) ptr; k = q_offset[i]; /* no need to store the empty slots at the end */ j -= (q_max[ptr->_t] - ptr->Qlen) * ((j - 2)/q_max[ptr->_t]); return ordinal(scratch, x-scratch, 1); /* chan */ case %d: r = ((Q%d *)z)->contents[slot].fld%d; break;int unsend(int into){ int _m=0, j; uchar *z; uerror("ref to uninitialized chan (unsend)"); j = ((Q0 *)z)->Qlen; ((Q0 *)z)->Qlen = --j; default: Uerror("bad queue - unsend");unrecv(int from, int slot, int fld, int fldvar, int strt) uerror("ref to uninitialized chan (unrecv)"); if (strt) ((Q0 *)z)->Qlen = j+1;/** function prototypes **/char *emalloc(unsigned long);char *Malloc(unsigned long);int Boundcheck(int, int, int, int, Trans *);int addqueue(int, int);/* int atoi(char *); *//* int abort(void); */int close(int);int delproc(int, int);int endstate(void);int hstore(char *, int);int gstore(char *, int, uchar);int q_cond(short, Trans *);int q_full(int);int q_len(int);int q_zero(int);int qrecv(int, int, int, int);int unsend(int);/* void *sbrk(int); */void Uerror(char *);void assert(int, char *, int, int, Trans *);void c_chandump(int);void c_globals(void);void c_locals(int, int);void checkcycles(void);void crack(int, int, Trans *, short *);void d_hash(uchar *, int);void s_hash(uchar *, int);void r_hash(uchar *, int);void delq(int);void do_reach(void);void pan_exit(int);void exit(int);void hinit(void);void imed(Trans *, int, int, int);void new_state(void);void p_restor(int);void putpeg(int, int);void putrail(void);void q_restor(void);void retrans(int, int, int, short *, uchar *);void settable(void);void setq_claim(int, int, char *, int, char *);void sv_restor(void);void sv_save(void);void tagtable(int, int, int, short *, uchar *);void uerror(char *);void unrecv(int, int, int, int, int);void usage(FILE *);void wrap_stats(void);int onstack_now(void);void onstack_init(void);void onstack_put(void);void onstack_zap(void);int q_S_check(int, int);int q_R_check(int, int);uchar q_claim[MAXQ+1];char *q_name[MAXQ+1];char *p_name[MAXPROC+1];to_compile(void){ char ctd[1024], carg[64]; strcpy(ctd, "-DBITSTATE "); strcpy(ctd, ""); strcat(ctd, "-DNOVSZ "); sprintf(carg, "-DMEMLIM=%%d ", MEMLIM); strcat(ctd, carg); sprintf(carg, "-DMEMCNT=%%d ", MEMCNT); strcat(ctd, "-DNOCLAIM "); strcat(ctd, "-DSAFETY ");#ifdef NOFAIR strcat(ctd, "-DNOFAIR ");#ifdef NFAIR if (NFAIR != 2) { sprintf(carg, "-DNFAIR=%%d ", NFAIR); strcat(ctd, carg); strcat(ctd, "-DNOREDUCE ");#ifdef XUSAFE strcat(ctd, "-DXUSAFE "); strcat(ctd, "-DNP "); strcat(ctd, "-DPEG "); strcat(ctd, "-DVAR_RANGES "); strcat(ctd, "-DHC0 "); strcat(ctd, "-DHC1 "); strcat(ctd, "-DHC2 "); strcat(ctd, "-DHC3 "); strcat(ctd, "-DHC4 "); strcat(ctd, "-DCHECK "); strcat(ctd, "-DCTL "); strcat(ctd, "-DNIBIS ");#ifdef NOBOUNDCHECK strcat(ctd, "-DNOBOUNDCHECK ");#ifdef NOSTUTTER strcat(ctd, "-DNOSTUTTER "); strcat(ctd, "-DREACH "); strcat(ctd, "-DPRINTF "); strcat(ctd, "-DOTIM "); strcat(ctd, "-DCOLLAPSE "); sprintf(carg, "-DMA=%%d ", MA); strcat(ctd, "-DSVDUMP ");#ifdef VECTORSZ if (VECTORSZ != 1024) { sprintf(carg, "-DVECTORSZ=%%d ", VECTORSZ); strcat(ctd, "-DVERBOSE "); strcat(ctd, "-DSDUMP "); strcat(ctd, "-DCOVEST "); printf("Compiled as: cc -o pan %%span.c\n", ctd); "%s", #define SYNC %d #define ASYNC %d short Air[] = { ,%s (short) Air%d, (short) Air%d }; char *procname[] = { ":np_:", }; np_ uchar sv[VECTORSZ]; } State; #define HAS_TRACK %d int addproc(int n, int par%d int provided(int II, unsigned char ot, int tt, Trans *t) { switch(ot) { default: return 1; /* e.g., a claim */ } return 0; } if (state_tables) ini_claim(%d, 0); iniglobals(); } void iniglobals(void) { #ifdef VAR_RANGES logval(" Maxbody = max(Maxbody, sizeof(State)-VECTORSZ); } endstopstateprogressprogstateacceptaccpstate %s[%d][%d] = 1; %s label inside d_step%s label inside atomic-spin: %3d:%s, warning, %s - is invisible visstate[%d][%d] = 1; spin: warning, line %3d %s, proctype %s:global '%s %s' could be declared 'bit %s' '%s %s' could be declared 'byte %s' ((P%d *)pptr(h))-> = ; %s%s:", ((P%d *)pptr(h))->:never:error: %s defines local %s void c_chandump(int unused) { unused = unused++; /* avoid complaints */ } void c_chandump(int from) { uchar *z; int slot; from--; if (from >= (int) now._nr_qs || from < 0) { printf("pan: bad qid %%d\n", from+1); return; } z = qptr(from); switch (((Q0 *)z)->_t) { case %d: ((Q%d *)z)->for (slot = 0; slot < %sQlen; slot++) { printf(" ["); printm(%scontents[slot].fld%d); printf("%%d,", %scontents[slot].fld%d); printf("],"); } break; printf("\n"); } printf(" (struct %s)\n"); %s%s. printf(" %s %s: %%d\n", %s%s); { int l_in; for (l_in = 0; l_in < %d; l_in++) { printf(" %s %s[%%d]: %%d\n", l_in, %s%s[l_in]); } printf(" chan %s (=%%d): len %%d:\t", %s%s, q_len(%s%s)); c_chandump(%s%s); printf(" chan %s[%d] (=%%d): len %%d:\t", %s%s[%d], q_len(%s%s[%d])); c_chandump(%s%s[%d]); :trace::notrace:((P%d *)pptr(pid))->void c_globals(void) { /* int i; */ printf("global vars:\n"); now.void c_locals(int pid, int tp) { /* int i; */ switch(tp) { case %d: printf("local vars proc %%d (%s):\n", pid); /* none */ break; } } void printm(int x) { switch (x) { case %d: Printf("%s"); break; default: Printf("%%d", x); ", now.); cannot hide non-globals (%s)cannot hide channels (%s)/* hidden variable: */int _; /* a predefined write-only variable */ %s%s%s%s%s%s %s%s%s[%d]%s%s%s[%d] %s%s%s[l_in]%s%s%s[l_in]addqueue(%d, %d)%d:init:#define Pinit ((P%d *)this) _:never_template:_#define P%s ((P%d *)this) typedef struct P%d { /* %s */ unsigned _pid : 8; /* 0..255 */ unsigned _t : %d; /* proctype */ unsigned _p : %d; /* state */ } P%d; #define Air%d 0 #define Air%d (sizeof(P%d) - Offsetof(P%d, %s) - %d*sizeof(uchar)short)int)cannot happen Air %s) #define _NP_ %d uchar reached%d[3]; /* np_ */ #define nstates%d 3 /* np_ */ #define endstate%d 2 /* np_ */ #define start%d 0 /* np_ */ case %d: /* np_ */ ini_claim(%d, h); ((P%d *)pptr(h))->_t = %d; ((P%d *)pptr(h))->_p = 0; reached%d[0] = 1; accpstate[%d][1] = 1; case %d: /* %s */ #define start%d %d #define start_claim %d #define start_event %d ((P%d *)pptr(h))->_p = %d; reached%d[%d]=1; case %d: /* %s */ if () return 1; /* params: */ array in parameter list, %s ((P%d *)pptr(h))->hidden array in parameter %s = par%d; /* locals: */ #ifdef HAS_CODE locinit%d(h); confusing control structure uchar %s; unsigned %s : %d unsigned %s : 1spin: warning: bit-array %s[%d] mapped to byte-array uchar %s short %s int %sundeclared structure element %s struct %s %svariable %s undeclared[%d]ushortuint Qlen; /* q_size */ #define NQS 1 /* nqs=%d, but has_io */ #define NQS %d short q_flds[%d]; short q_max[%d]; case %d: j = sizeof(Q%d); q_flds[%d] = %d; q_max[%d] = %d; break; typedef struct Q%d { uchar _t; /* q_type */ struct { unsigned fld%d : 1; uchar fld%d; short fld%d; int fld%d; bad channel spec } contents[%d]; } Q%d; typedef struct Q0 { /* generic q */ uchar _t; } Q0; int Q_has(int, int, intint Q_has(int into, int want%d, int fld%d{ int i; if (!into--) uerror("ref to unknown chan (recv-poll)"); if (into >= now._nr_qs || into < 0) Uerror("qrecv bad queue#"); for (i = 0; i < ((Q0 *)qptr(into))->Qlen; i++) { if (want%d && qrecv(into+1, i, %d, 0) != fld%d) continue; return i+1; return 0; #if NQS>0 void qsend(int into, int sorted, int fld%d /* =rv= */ case %d:%s (trpt+2)->o_m = 0; if (!sorted) goto append%d; for (j = 0; j < %sQlen; j++) { /* find insertion point */ ((Q%d *)z)->contents[j].fld if (fld%d > %s%d) continue; if (fld%d < %s%d) goto found%d; found%d: for (k = %sQlen - 1; k >= j; k--) { /* shift up */ %scontents[k+1].fld%d = %scontents[k].fld%d; append%d: /* insert in slot j */ #ifdef HAS_SORTED (trpt+1)->ipt = j; %sQlen = %sQlen + 1; %s%d = fld%d; case %d: return %d; case %d: return (q_sz(from) == %d); case %d:%s if (fld == 0) r = %scontents[slot].fld0; switch (fld) { default: Uerror("too many fields in recv"); if (done) { j = %sQlen - 1; %sQlen = 0; ((Q%d *)z)->contents { j = %sQlen; %sQlen = --j; for (k=slot; k#include #include #include #include #include #include #if defined(WIN32) || defined(WIN64)#include #else#include #include #include #include #include #define Offsetof(X, Y) ((unsigned long)(&(((X *)0)->Y)))#ifndef max#define max(a,b) (((a)<(b)) ? (b) : (a))#ifndef PRINTFint Printf(const char *fmt, ...); /* prototype only */#ifdef CNTRSTACK#define onstack_now() (LL[trpt->j6] && LL[trpt->j7])#define onstack_put() LL[trpt->j6]++; LL[trpt->j7]++#define onstack_zap() LL[trpt->j6]--; LL[trpt->j7]--#if !defined(SAFETY) && !defined(NOCOMP)#define V_A (((now._a_t&1)?2:1) << (now._a_t&2))#define A_V (((now._a_t&1)?1:2) << (now._a_t&2))int S_A = 0;#define V_A 0#define A_V 0#define S_A 0#ifdef MA#undef onstack_now#undef onstack_put#undef onstack_zap#define onstack_put() ;#define onstack_zap() gstore((char *) &now, vsize, 4)#if defined(FULLSTACK) && !defined(BITSTATE)#define onstack_put() trpt->ostate = Lstate#define onstack_zap() { \ if (trpt->ostate) \ trpt->ostate->tagged = \ (S_A)? (trpt->ostate->tagged&~V_A) : 0; \ }struct H_el { struct H_el *nxt;#ifdef FULLSTACK unsigned int tagged;#if defined(BITSTATE) && !defined(NOREDUCE) && !defined(SAFETY) unsigned int proviso;#if defined(CHECK) || (defined(COLLAPSE) && !defined(FULLSTACK)) unsigned long st_id;#ifdef COLLAPSE#if VECTORSZ<65536 unsigned short ln; unsigned long ln;#if !defined(SAFETY) || defined(REACH) unsigned int D; unsigned state;} **H_tab, **S_Tab; typedef struct Trail { int st; /* current state */ uchar pr; /* process id */ uchar tau; /* 8 bit-flags */ uchar o_pm; /* 8 more bit-flags */#if 0 Meaning of bit-flags: tau&1 -> timeout enabled tau&2 -> request to enable timeout 1 level up (in claim) tau&4 -> current transition is a claim move tau&8 -> current transition is an atomic move tau&16 -> last move was truncated on stack tau&32 -> current transition is a preselected move tau&64 -> at least one next state is not on the stack tau&128 -> current transition is a stutter move o_pm&1 -> the current pid moved -- implements else o_pm&2 -> this is an acceptance state o_pm&4 -> this is a progress state o_pm&8 -> fairness alg rule 1 undo mark o_pm&16 -> fairness alg rule 3 undo mark o_pm&32 -> fairness alg rule 2 undo mark o_pm&64 -> the current proc applied rule2 o_pm&128 -> a fairness, dummy move - all procs blocked#if defined(FULLSTACK) && defined(MA) && !defined(BFS) uchar proviso;#ifndef BFS uchar o_n, o_ot; /* to save locals */ uchar o_m;#ifdef EVENT_TRACE#if nstates_event<256 uchar o_event; unsigned short o_event; int o_tt; short o_To;#ifdef RANDOMIZE short oo_i;#if defined(HAS_UNLESS) && !defined(BFS) int e_state; /* if escape trans - state of origin */#if (defined(FULLSTACK) && !defined(MA)) || defined(BFS) struct H_el *ostate; /* pointer to stored state */#if defined(CNTRSTACK) && !defined(BFS) long j6, j7; Trans *o_t;#ifdef HAS_SORTED short ipt; union { int oval; int *ovals; } bup;} Trail;Trail *trail, *trpt;FILE *efd;uchar *this;long maxdepth=10000;long omaxdepth=10000;char *stackfile;uchar *SS, *LL;uchar HASH_NR = 0;double memcnt = (double) 0;double memlim = (double) (1<<30);/* for emalloc: */static char *have;static long left = 0L;static double fragment = (double) 0;static unsigned long grow;unsigned int HASH_CONST[] = { /* asuming 4 bytes per int */ 0x88888EEF, 0x00400007, 0x04c11db7, 0x100d4e63, 0x0fc22f87, 0x3ff0c3ff, 0x38e84cd7, 0x02b148e9, 0x98b2e49d, 0xb616d379, 0xa5247fd9, 0xbae92a15, 0xb91c8bc5, 0x8e5880f3, 0xacd7c069, 0xb4c44bb3, 0x2ead1fb7, 0x8e428171, 0xdbebd459, 0x828ae611, 0x6cb25933, 0x86cdd651, 0x9e8f5f21, 0xd5f8d8e7, 0x9c4e956f, 0xb5cf2c71, 0x2e805a6d, 0x33fc3a55, 0xaf203ed1, 0xe31f5909, 0x5276db35, 0x0c565ef7, 0x273d1aa5, 0x8923b1dd, 0};int mreached=0, done=0, errors=0, Nrun=1;double nstates=0, nlinks=0, truncs=0, truncs2=0;double nlost=0, nShadow=0, hcmp=0, ngrabs=0;#ifdef BFSdouble midrv=0, failedrv=0, revrv=0;unsigned long nr_states=0; /* nodes in DFA */long Fa=0, Fh=0, Zh=0, Zn=0;long PUT=0, PROBE=0, ZAPS=0;long Ccheck=0, Cholds=0;int a_cycles=0, upto=1, strict=0, verbose = 0, signoff = 0;#ifdef HAS_CODEint gui = 0, coltrace = 0, readtrail = 0, whichtrail = 0, onlyproc = -1, silent = 0;int state_tables=0, fairness=0, no_rck=0, Nr_Trails=0;char simvals[128];#ifndef INLINEint TstOnly=0;unsigned long mask, nmask;#ifdef BITSTATEint ssize=23; /* 1 Mb */int ssize=19; /* 512K slots */int hmax=0, svmax=0, smax=0;int Maxbody=0, XX;uchar *noptr; /* used by macro Pptr(x) */#ifdef VAR_RANGESvoid logval(char *, int);void dumpranges(void);#define INLINE_REVextern void dfa_init(unsigned short);extern int dfa_member(unsigned long);extern int dfa_store(uchar *);unsigned int maxgs = 0;State comp_now; /* compressed state vector */State comp_msk;uchar *Mask = (uchar *) &comp_msk;State comp_tmp;static char *scratch = (char *) &comp_tmp;Stack *stack; /* for queues, processes */Svtack *svtack; /* for old state vectors */static unsigned hfns = 3; /* new default */static unsigned long j1;static unsigned long K1, K2;static unsigned long j2, j3, j4;static long udmem;static long A_depth = 0;long depth = 0;static uchar warned = 0, iterative = 0, like_java = 0, every_error = 0;static uchar noasserts = 0, noends = 0, bounded = 0;#if SYNC>0 && ASYNC==0void set_recvs(void);int no_recvs(int);#if SYNC#define IfNotBlocked if (boq != -1) continue;#define UnBlock boq = -1#define IfNotBlocked /* cannot block */#define UnBlock /* don't bother */#endif int (*bstore)(char *, int);int bstore_reg(char *, int);int bstore_mod(char *, int);void active_procs(void);void cleanup(void);void do_the_search(void);void find_shorter(int);void iniglobals(void);void stopped(int);void wrapup(void);int *grab_ints(int);void ungrab_ints(int *, int);Trans *settr( int t_id, int a, int b, int c, int d, char *t, int g, int tpe0, int tpe1){ Trans *tmp = (Trans *) emalloc(sizeof(Trans)); tmp->atom = a&(6|32); /* only (2|8|32) have meaning */ if (!g) tmp->atom |= 8; /* no global references */ tmp->st = b; tmp->tpe[0] = tpe0; tmp->tpe[1] = tpe1; tmp->tp = t; tmp->t_id = t_id; tmp->forw = c; tmp->back = d; return tmp;} cpytr(Trans *a) int i; tmp->atom = a->atom; tmp->st = a->st;#ifdef HAS_UNLESS tmp->e_trans = a->e_trans; for (i = 0; i < HAS_UNLESS; i++) tmp->escp[i] = a->escp[i]; tmp->tpe[0] = a->tpe[0]; tmp->tpe[1] = a->tpe[1]; for (i = 0; i < 6; i++) { tmp->qu[i] = a->qu[i]; tmp->ty[i] = a->ty[i]; tmp->tp = (char *) emalloc(strlen(a->tp)+1); strcpy(tmp->tp, a->tp); tmp->t_id = a->t_id; tmp->forw = a->forw; tmp->back = a->back;#ifndef NOREDUCEintsrinc_set(int n){ if (n <= 2) return LOCAL; if (n <= 2+ DELTA) return Q_FULL_F; /* 's' or nfull */ if (n <= 2+2*DELTA) return Q_EMPT_F; /* 'r' or nempty */ if (n <= 2+3*DELTA) return Q_EMPT_T; /* empty */ if (n <= 2+4*DELTA) return Q_FULL_T; /* full */ if (n == 5*DELTA) return GLOBAL; if (n == 6*DELTA) return TIMEOUT_F; if (n == 7*DELTA) return ALPHA_F; Uerror("cannot happen srinc_class"); return BAD;srunc(int n, int m){ switch(m) { case Q_FULL_F: return n-2; case Q_EMPT_F: return n-2-DELTA; case Q_EMPT_T: return n-2-2*DELTA; case Q_FULL_T: return n-2-3*DELTA; case ALPHA_F: case TIMEOUT_F: return 257; /* non-zero, and > MAXQ */ Uerror("cannot happen srunc"); return 0;int cnt;isthere(Trans *a, int b){ Trans *t; for (t = a; t; t = t->nxt) if (t->t_id == b) return 1;mark_safety(Trans *t) /* for conditional safety */{ int g = 0, i, j, k; if (!t) return 0; if (t->qu[0]) return (t->qu[1])?2:1; /* marked */ for (i = 0; i < 2; i++) { j = srinc_set(t->tpe[i]); if (j >= GLOBAL && j != ALPHA_F) return -1; if (j != LOCAL) { k = srunc(t->tpe[i], j); if (g == 0 || t->qu[0] != k || t->ty[0] != j) { t->qu[g] = k; t->ty[g] = j; g++; } } } return g;retrans(int n, int m, int is, short srcln[], uchar reach[]) /* process n, with m states, is=initial state */{ Trans *T0, *T1, *T2, *T3; int i, k; int g, h, j, aa; int p; if (state_tables >= 4) { printf("STEP 1 proctype %%s\n", procname[n]); for (i = 1; i < m; i++) for (T0 = trans[n][i]; T0; T0 = T0->nxt) crack(n, i, T0, srcln); return; do { for (i = 1, cnt = 0; i < m; i++) { T2 = trans[n][i]; T1 = T2?T2->nxt:(Trans *)0;/* prescan: */ for (T0 = T1; T0; T0 = T0->nxt)/* choice in choice */ { if (T0->st && trans[n][T0->st] && trans[n][T0->st]->nxt) break; } if (T0) printf("\tstate %%d / %%d: choice in choice\n", i, T0->st); if (T0) for (T0 = T1; T0; T0 = T0->nxt) { T3 = trans[n][T0->st]; if (!T3->nxt) { T2->nxt = cpytr(T0); T2 = T2->nxt; imed(T2, T0->st, n, i); continue; } do { T3 = T3->nxt; T2->nxt = cpytr(T3); } while (T3->nxt); cnt++; } } while (cnt); if (state_tables >= 3) { printf("STEP 2 proctype %%s\n", for (i = 1; i < m; i++) { if (trans[n][i] && trans[n][i]->nxt) /* optimize */ { T1 = trans[n][i]->nxt; printf("\t\tpull %%d (%%d) to %%d\n", T1->st, T1->forw, i); if (!trans[n][T1->st]) continue; T0 = cpytr(trans[n][T1->st]); trans[n][i] = T0; reach[T1->st] = 1; imed(T0, T1->st, n, i); for (T1 = T1->nxt; T1; T1 = T1->nxt) { T1->st, T1->forw, i); if (!trans[n][T1->st]) continue; T0->nxt = cpytr(trans[n][T1->st]); T0 = T0->nxt; reach[T1->st] = 1; imed(T0, T1->st, n, i); if (state_tables >= 2) { printf("STEP 3 proctype %%s\n", { if (!trans[n][i]) continue; /* check for each state i if an * escape to some state p is defined * if so, copy and mark p's transitions * and prepend them to the transition- * list of state i */ if (!like_java) /* the default */ { for (T0 = trans[n][i]; T0; T0 = T0->nxt) for (k = HAS_UNLESS-1; k >= 0; k--) { if (p = T0->escp[k]) for (T1 = trans[n][p]; T1; T1 = T1->nxt) { if (isthere(trans[n][i], T1->t_id)) T2 = cpytr(T1); T2->e_trans = p; T2->nxt = trans[n][i]; trans[n][i] = T2; } } } else /* outermost unless checked first */ { Trans *T4; T4 = T3 = (Trans *) 0; T2->nxt = (Trans *) 0; if (T3) T3->nxt = T2; else T4 = T2; T3 = T2; if (T4) { T3->nxt = trans[n][i]; trans[n][i] = T4; } { if (a_cycles) { /* moves through these states are visible */#if PROG_LAB>0 && defined(HAS_NP) if (progstate[n][i]) goto degrade; for (T1 = trans[n][i]; T1; T1 = T1->nxt) if (progstate[n][T1->st]) goto degrade; if (accpstate[n][i] || visstate[n][i]) if (accpstate[n][T1->st]) T1 = trans[n][i]; if (!T1) continue; g = mark_safety(T1); /* V3.3.1 */ if (g < 0) goto degrade; /* global */ /* check if mixing of guards preserves reduction */ if (T1->nxt) { k = 0; { if (!(T0->atom&8)) for (aa = 0; aa < 2; aa++) { j = srinc_set(T0->tpe[aa]); if (j >= GLOBAL && j != ALPHA_F) goto degrade; if (T0->tpe[aa] && T0->tpe[aa] != T1->tpe[0]) k = 1; } } /* g = 0; V3.3.1 */ if (k) /* non-uniform selection */ for (aa = 0; aa < 2; aa++) { j = srinc_set(T0->tpe[aa]); if (j != LOCAL) { k = srunc(T0->tpe[aa], j); for (h = 0; h < 6; h++) if (T1->qu[h] == k && T1->ty[h] == j) break; if (h >= 6) { T1->qu[g%%6] = k; T1->ty[g%%6] = j; g++; } } } if (g > 6) { T1->qu[0] = 0; /* turn it off */ printf("pan: warning, line %%d, ", srcln[i]); printf("too many stmnt types (%%d)", g); printf(" in selection\n"); goto degrade; /* mark all options global if >=1 is global */ for (T1 = trans[n][i]; T1; T1 = T1->nxt) if (!(T1->atom&8)) break; if (T1)degrade: for (T1 = trans[n][i]; T1; T1 = T1->nxt) T1->atom &= ~8; /* mark as unsafe */ /* can only mix 'r's or 's's if on same chan */ /* and not mixed with other local operations */ if (!T1 || T1->qu[0]) continue; j = T1->tpe[0]; if (T1->nxt && T1->atom&8) { if (j == 5*DELTA) { printf("warning: line %%d ", srcln[i]); printf("mixed condition "); printf("(defeats reduction)\n"); goto degrade; } for (T0 = T1; T0; T0 = T0->nxt) for (aa = 0; aa < 2; aa++) if (T0->tpe[aa] && T0->tpe[aa] != j) printf("[%%d-%%d] mixed %%stion ", T0->tpe[aa], j, (j==5*DELTA)?"condi":"selec"); printf(" '%%s' <-> '%%s'\n", T1->tp, T0->tp); } } { T2 = trans[n][i]; if (!T2 || T2->nxt || strncmp(T2->tp, ".(goto)", 7) || !stopstate[n][i]) continue; stopstate[n][T2->st] = 1; if (state_tables) { printf("proctype "); if (!strcmp(procname[n], ":init:")) printf("init\n"); else printf("%%s\n", procname[n]); reach[i] = 1; tagtable(n, m, is, srcln, reach); } else { int nrelse; if (strcmp(procname[n], ":never:") != 0) { for (T0 = trans[n][i]; T0; T0 = T0->nxt) { if (T0->st == i && strcmp(T0->tp, "(1)") == 0) { printf("error: proctype '%%s' ", procname[n]); printf("line %%d, state %%d: has un", srcln[i], i); printf("conditional self-loop\n"); pan_exit(1); } } } nrelse = 0; { if (strcmp(T0->tp, "else") == 0) nrelse++; if (nrelse > 1) { printf("error: proctype '%%s' state", procname[n]); printf(" %%d, inherits %%d", i, nrelse); printf(" 'else' stmnts\n"); pan_exit(1); } } if (!state_tables && strcmp(procname[n], ":never:") == 0) { int h = 0; if (T0->forw > h) h = T0->forw; h++; frm_st0 = (short *) emalloc(h * sizeof(short)); frm_st0[T0->forw] = i;imed(Trans *T, int v, int n, int j) /* set intermediate state */{ progstate[n][T->st] |= progstate[n][v]; accpstate[n][T->st] |= accpstate[n][v]; stopstate[n][T->st] |= stopstate[n][v]; mapstate[n][j] = T->st;tagtable(int n, int m, int is, short srcln[], uchar reach[]){ Trans *z; if (is >= m || !trans[n][is] || is <= 0 || reach[is] == 0) reach[is] = 0; for (z = trans[n][is]; z; z = z->nxt) crack(n, is, z, srcln); int i, j; tagtable(n, m, z->st, srcln, reach); for (i = 0; i < HAS_UNLESS; i++) { j = trans[n][is]->escp[i]; if (!j) break; tagtable(n, m, j, srcln, reach);crack(int n, int j, Trans *z, short srcln[]){ int i; if (!z) return; printf(" state %%3d -(tr %%3d)-> state %%3d ", j, z->forw, z->st); printf("[id %%3d tp %%3d", z->t_id, z->tpe[0]); if (z->tpe[1]) printf(",%%d", z->tpe[1]); if (z->e_trans) printf(" org %%3d", z->e_trans); else if (state_tables >= 2) { if (!z->escp[i]) break; printf(" esc %%d", z->escp[i]); printf("]"); printf(" [%%s%%s%%s%%s%%s] line %%d => ", z->atom&6?"A":z->atom&32?"D":"-", accpstate[n][j]?"a" :"-", stopstate[n][j]?"e" : "-", progstate[n][j]?"p" : "-", z->atom & 8 ?"L":"G", srcln[j]); for (i = 0; z->tp[i]; i++) if (z->tp[i] == '\n') printf("\\n"); putchar(z->tp[i]); if (z->qu[0]) { printf("\t["); for (i = 0; i < 6; i++) if (z->qu[i]) printf("(%%d,%%d)", z->qu[i], z->ty[i]); printf("]"); printf("\n"); fflush(stdout);#define BYTESIZE 32 /* 2^8 : 2^3 = 256:8 = 32 */typedef struct Vr_Ptr { char *nm; uchar vals[BYTESIZE]; struct Vr_Ptr *nxt;} Vr_Ptr;Vr_Ptr *ranges = (Vr_Ptr *) 0;logval(char *s, int v){ Vr_Ptr *tmp; if (v<0 || v > 255) return; for (tmp = ranges; tmp; tmp = tmp->nxt) if (!strcmp(tmp->nm, s)) goto found; tmp = (Vr_Ptr *) emalloc(sizeof(Vr_Ptr)); tmp->nxt = ranges; ranges = tmp; tmp->nm = s;found: tmp->vals[(v)/8] |= 1<<((v)%%8);dumpval(uchar X[], int range){ int w, x, i, j = -1; for (w = i = 0; w < range; w++) for (x = 0; x < 8; x++, i++)from: if ((X[w] & (1<= 0 && j != 255) printf("-255");dumpranges(void) printf("\nValues assigned within "); printf("interval [0..255]:\n"); { printf("\t%%s\t: ", tmp->nm); dumpval(tmp->vals, BYTESIZE); printf("\n");/*#define uchar unsigned char*/#define ulong unsigned long#define ushort unsigned short#define TWIDTH 256#define HASH(y,n) (n)*(((long)y))#define INRANGE(e,h) ((h>=e->From && h<=e->To)||(e->s==1 && e->S==h))extern char *emalloc(unsigned long); /* imported routine */extern void dfa_init(ushort); /* 4 exported routines */extern int dfa_member(ulong);extern int dfa_store(uchar *);extern void dfa_stats(void);typedef struct Edge { uchar From, To; /* max range 0..255 */ uchar s, S; /* if s=1, S is singleton */ struct Vertex *Dst; struct Edge *Nxt;} Edge;typedef struct Vertex { ulong key, num; /* key for splay tree, nr incoming edges */ uchar from[2], to[2]; /* in-node predefined edge info */ struct Vertex *dst[2];/* most nodes have 2 or more edges */ struct Edge *Succ; /* in case there are more edges */ struct Vertex *lnk, *left, *right; /* splay tree plumbing */} Vertex;static Edge *free_edges;static Vertex *free_vertices;static Vertex **layers; /* one splay tree of nodes per layer */static Vertex **path; /* run of word in the DFA */static Vertex *R, *F, *NF; /* Root, Final, Not-Final */static uchar *word, *lastword;/* string, and last string inserted */static int dfa_depth, iv=0, nv=0, pfrst=0, Tally;static void insert_it(Vertex *, int); /* splay-tree code */static void delete_it(Vertex *, int);static Vertex *find_it(Vertex *, Vertex *, uchar, int);static voidrecyc_edges(Edge *e) if (!e) return; recyc_edges(e->Nxt); e->Nxt = free_edges; free_edges = e;static Edge *new_edge(Vertex *dst){ Edge *e; if (free_edges) { e = free_edges; free_edges = e->Nxt; e->From = e->To = e->s = e->S = 0; e->Nxt = (Edge *) 0; e = (Edge *) emalloc(sizeof(Edge)); e->Dst = dst; return e;recyc_vertex(Vertex *v) recyc_edges(v->Succ); v->Succ = (Edge *) free_vertices; free_vertices = v; nr_states--;static Vertex *new_vertex(void){ Vertex *v; if (free_vertices) { v = free_vertices; free_vertices = (Vertex *) v->Succ; v->Succ = (Edge *) 0; v->num = 0; v = (Vertex *) emalloc(sizeof(Vertex)); nr_states++; return v; allDelta(Vertex *v, int n){ Vertex *dst = new_vertex(); v->from[0] = 0; v->to[0] = 255; v->dst[0] = dst; dst->num = 256; insert_it(v, n); return dst;insert_edge(Vertex *v, Edge *e){ /* put new edge first */ if (!v->dst[0]) { v->dst[0] = e->Dst; v->from[0] = e->From; v->to[0] = e->To; recyc_edges(e); if (!v->dst[1]) { v->from[1] = v->from[0]; v->from[0] = e->From; v->to[1] = v->to[0]; v->to[0] = e->To; v->dst[1] = v->dst[0]; v->dst[0] = e->Dst; } /* shift */ { int f = v->from[1]; int t = v->to[1]; Vertex *d = v->dst[1]; v->from[1] = v->from[0]; v->from[0] = e->From; e->From = f; e->To = t; e->Dst = d; e->Nxt = v->Succ; v->Succ = e;copyRecursive(Vertex *v, Edge *e){ Edge *f; if (e->Nxt) copyRecursive(v, e->Nxt); f = new_edge(e->Dst); f->From = e->From; f->To = e->To; f->s = e->s; f->S = e->S; f->Nxt = v->Succ; v->Succ = f;copyEdges(Vertex *to, Vertex *from){ int i; { to->from[i] = from->from[i]; to->to[i] = from->to[i]; to->dst[i] = from->dst[i]; if (from->Succ) copyRecursive(to, from->Succ);cacheDelta(Vertex *v, int h, int first){ static Edge *ov, tmp; int i; if (!first && INRANGE(ov,h)) return ov; /* intercepts about 10%% */ if (v->dst[i] && h >= v->from[i] && h <= v->to[i]) { tmp.From = v->from[i]; tmp.To = v->to[i]; tmp.Dst = v->dst[i]; tmp.s = tmp.S = 0; ov = &tmp; return ov; for (ov = v->Succ; ov; ov = ov->Nxt) if (INRANGE(ov,h)) return ov; Uerror("cannot get here, cacheDelta"); return (Edge *) 0;Delta(Vertex *v, int h) /* v->delta[h] */ if (v->dst[0] && h >= v->from[0] && h <= v->to[0]) return v->dst[0]; /* oldest edge */ if (v->dst[1] && h >= v->from[1] && h <= v->to[1]) return v->dst[1]; for (e = v->Succ; e; e = e->Nxt) if (INRANGE(e,h)) return e->Dst; Uerror("cannot happen Delta"); return (Vertex *) 0;numDelta(Vertex *v, int d) ulong cnt; if (v->dst[i]) { cnt = v->dst[i]->num + d*(1 + v->to[i] - v->from[i]); if (d == 1 && cnt < v->dst[i]->num) goto bad; v->dst[i]->num = cnt; { cnt = e->Dst->num + d*(1 + e->To - e->From + e->s); if (d == 1 && cnt < e->Dst->num)bad: Uerror("too many incoming edges"); e->Dst->num = cnt;setDelta(Vertex *v, int h, Vertex *newdst) /* v->delta[h] = newdst; */{ Edge *e, *f = (Edge *) 0, *g; /* remove the old entry, if there */ { if (h == v->from[i]) { if (h == v->to[i]) { v->dst[i] = (Vertex *) 0; v->from[i] = v->to[i] = 0; } else v->from[i]++; } else if (h == v->to[i]) { v->to[i]--; } else { g = new_edge(v->dst[i]);/* same dst */ g->From = v->from[i]; g->To = h-1; /* left half */ v->from[i] = h+1; /* right half */ insert_edge(v, g); goto part2; for (e = v->Succ; e; f = e, e = e->Nxt) { if (e->s == 1 && e->S == h) { e->s = e->S = 0; goto rem_tst; if (h >= e->From && h <= e->To) { if (h == e->From) { if (h == e->To) { if (e->s) { e->From = e->To = e->S; e->s = 0; break; } else goto rem_do; e->From++; } else if (h == e->To) { e->To--; } else /* split */ { g = new_edge(e->Dst); /* same dst */ g->From = e->From; g->To = h-1; /* g=left half */ e->From = h+1; /* e=right half */ g->Nxt = e->Nxt; /* insert g */ e->Nxt = g; /* behind e */ break; /* done */rem_tst: if (e->From > e->To) { if (e->s == 0) {rem_do: if (f) f->Nxt = e->Nxt; else v->Succ = e->Nxt; e->Nxt = (Edge *) 0; recyc_edges(e); { e->From = e->To = e->S; e->s = 0; break;part2: /* check if newdst is already there */ if (v->dst[i] == newdst) { if (h+1 == (int) v->from[i]) { v->from[i] = h; return; if (h == (int) v->to[i]+1) { v->to[i] = h; { if (e->Dst == newdst) { if (h+1 == (int) e->From) { e->From = h; if (e->s == 1 && e->S+1 == e->From) { e->From = e->S; e->s = e->S = 0; if (h == (int) e->To+1) { e->To = h; if (e->s == 1 && e->S == e->To+1) { e->To = e->S; if (e->s == 0) { e->s = 1; e->S = h; /* add as a new edge */ e = new_edge(newdst); e->From = e->To = h; insert_edge(v, e);static ulongcheap_key(Vertex *v){ ulong vk2 = 0; if (v->dst[0]) { vk2 = (ulong) v->dst[0]; if ((ulong) v->dst[1] > vk2) vk2 = (ulong) v->dst[1]; } else if (v->dst[1]) vk2 = (ulong) v->dst[1]; if (v->Succ) { Edge *e; for (e = v->Succ; e; e = e->Nxt) if ((ulong) e->Dst > vk2) vk2 = (ulong) e->Dst; Tally = (vk2>>2)&(TWIDTH-1); return v->key;mk_key(Vertex *v) /* not sensitive to order */{ ulong m = 0, vk2 = 0; Edge *e; { m += HASH(v->dst[0], v->to[0] - v->from[0] + 1); vk2 = (ulong) v->dst[0]; if (v->dst[1]) { m += HASH(v->dst[1], v->to[1] - v->from[1] + 1); if ((ulong) v->dst[1] > vk2) vk2 = (ulong) v->dst[1]; { m += HASH(e->Dst, e->To - e->From + 1 + e->s); if ((ulong) e->Dst > vk2) vk2 = (ulong) e->Dst; return m;mk_special(int sigma, Vertex *n, Vertex *v) Edge *f; if (v->dst[i]) { if (sigma >= v->from[i] && sigma <= v->to[i]) { m += HASH(v->dst[i], v->to[i]-v->from[i]); if ((ulong) v->dst[i] > vk2 && v->to[i] > v->from[i]) vk2 = (ulong) v->dst[i]; { m += HASH(v->dst[i], v->to[i]-v->from[i]+1); if ((ulong) v->dst[i] > vk2) for (f = v->Succ; f; f = f->Nxt) { if (sigma >= f->From && sigma <= f->To) { m += HASH(f->Dst, f->To - f->From + f->s); if ((ulong) f->Dst > vk2 && f->To - f->From + f->s > 0) vk2 = (ulong) f->Dst; } else if (f->s == 1 && sigma == f->S) { m += HASH(f->Dst, f->To - f->From + 1); if ((ulong) f->Dst > vk2) vk2 = (ulong) f->Dst; } else { m += HASH(f->Dst, f->To - f->From + 1 + f->s); if ((ulong) n > vk2) vk2 = (ulong) n; m += HASH(n, 1);void dfa_init(ushort nr_layers){ int i; Vertex *r, *t; dfa_depth = nr_layers; /* one byte per layer */ path = (Vertex **) emalloc((dfa_depth+1)*sizeof(Vertex *)); layers = (Vertex **) emalloc(TWIDTH*(dfa_depth+1)*sizeof(Vertex *)); lastword = (uchar *) emalloc((dfa_depth+1)*sizeof(uchar)); lastword[dfa_depth] = lastword[0] = 255; path[0] = R = new_vertex(); F = new_vertex(); for (i = 1, r = R; i < dfa_depth; i++, r = t) t = allDelta(r, i-1); NF = allDelta(r, i-1);static void complement_dfa(void) { Vertex *tmp = F; F = NF; NF = tmp; }doubletree_stats(Vertex *t){ Edge *e; double cnt=0.0; if (!t->key) return 0; t->key = 0; /* precaution */ if (t->dst[0]) cnt++; if (t->dst[1]) cnt++; for (e = t->Succ; e; e = e->Nxt) cnt++; cnt += tree_stats(t->lnk); cnt += tree_stats(t->left); cnt += tree_stats(t->right); return cnt;dfa_stats(void){ int i, j; double cnt = 0.0; for (j = 0; j < TWIDTH; j++) for (i = 0; i < dfa_depth+1; i++) cnt += tree_stats(layers[i*TWIDTH+j]); printf("Minimized Automaton: %%6d nodes and %%6g edges\n", nr_states, cnt);dfa_member(ulong n){ Vertex **p, **q; uchar *w = &word[n]; p = &path[n]; q = (p+1); for (i = n; i < dfa_depth; i++) *q++ = Delta(*p++, *w++); return (*p == F);dfa_store(uchar *sv){ Vertex **p, **q, *s, *y, *old, *new = F; uchar *w, *u = lastword; int i, j, k; w = word = sv; while (*w++ == *u++) /* find first byte that differs */ ; pfrst = (int) (u - lastword) - 1; memcpy(&lastword[pfrst], &sv[pfrst], dfa_depth-pfrst); if (pfrst > iv) pfrst = iv; if (pfrst > nv) pfrst = nv;/* phase1: */ p = &path[pfrst]; q = (p+1); w = &word[pfrst]; for (i = pfrst; i < dfa_depth; i++) *q++ = Delta(*p++, *w++); /* (*p)->delta[*w++]; */ if (*p == F) return 1; /* it's already there *//* phase2: */ iv = dfa_depth; do { iv--; old = new; new = find_it(path[iv], old, word[iv], iv); } while (new && iv > 0);/* phase3: */ nv = k = 0; s = path[0]; for (j = 1; j <= iv; ++j) if (path[j]->num > 1) { y = new_vertex(); copyEdges(y, path[j]); insert_it(y, j); numDelta(y, 1); delete_it(s, j-1); setDelta(s, word[j-1], y); insert_it(s, j-1); y->num = 1; /* initial value 1 */ s = y; path[j]->num--; /* only 1 moved from j to y */ k = 1; { s = path[j]; if (!k) nv = j; y = Delta(s, word[iv]); y->num--; delete_it(s, iv); setDelta(s, word[iv], old); insert_it(s, iv); old->num++; for (j = iv+1; j < dfa_depth; j++) if (path[j]->num == 0) { numDelta(path[j], -1); delete_it(path[j], j); recyc_vertex(path[j]);splay(ulong i, Vertex *t){ Vertex N, *l, *r, *y; if (!t) return t; N.left = N.right = (Vertex *) 0; l = r = &N; for (;;) { if (i < t->key) { if (!t->left) break; if (i < t->left->key) { y = t->left; t->left = y->right; y->right = t; t = y; if (!t->left) break; r->left = t; r = t; t = t->left; } else if (i > t->key) { if (!t->right) break; if (i > t->right->key) { y = t->right; t->right = y->left; y->left = t; if (!t->right) break; l->right = t; l = t; t = t->right; l->right = t->left; r->left = t->right; t->left = N.right; t->right = N.left; return t;insert_it(Vertex *v, int L){ Vertex *new, *t; ulong i; int nr; i = mk_key(v); nr = ((L*TWIDTH)+Tally); t = layers[nr]; v->key = i; if (!t) { layers[nr] = v; t = splay(i, t); if (i < t->key) { new = v; new->left = t->left; new->right = t; t->left = (Vertex *) 0; } else if (i > t->key) new->right = t->right; new->left = t; t->right = (Vertex *) 0; } else /* it's already there */ { v->lnk = t->lnk; /* put in linked list off v */ t->lnk = v; new = t; layers[nr] = new;static intcheckit(Vertex *h, Vertex *v, Vertex *n, uchar sigma){ Edge *g, *f; int i, k, j = 1; for (k = 0; k < 2; k++) if (h->dst[k]) { if (sigma >= h->from[k] && sigma <= h->to[k]) { if (h->dst[k] != n) goto no_match; for (i = h->from[k]; i <= h->to[k]; i++) { if (i == sigma) continue; g = cacheDelta(v, i, j); j = 0; if (h->dst[k] != g->Dst) goto no_match; if (g->s == 0 || g->S != i) i = g->To; for (f = h->Succ; f; f = f->Nxt) { if (INRANGE(f,sigma)) { if (f->Dst != n) goto no_match; for (i = f->From; i <= f->To; i++) { if (i == sigma) continue; g = cacheDelta(v, i, j); j = 0; if (f->Dst != g->Dst) goto no_match; if (g->s == 1 && i == g->S) continue; i = g->To; if (f->s && f->S != sigma) { g = cacheDelta(v, f->S, 1); if (h->Succ || h->dst[0] || h->dst[1]) return 1;no_match:find_it(Vertex *v, Vertex *n, uchar sigma, int L){ Vertex *z, *t; i = mk_special(sigma,n,v); if (!t) return (Vertex *) 0; layers[nr] = t = splay(i, t); if (i == t->key) for (z = t; z; z = z->lnk) if (checkit(z, v, n, sigma)) return z;delete_it(Vertex *v, int L){ Vertex *x, *t; i = cheap_key(v); if (!t) return; { Vertex *z, *y = (Vertex *) 0; for (z = t; z && z != v; y = z, z = z->lnk) ; if (z != v) goto bad; if (y) { y->lnk = z->lnk; z->lnk = (Vertex *) 0; layers[nr] = t; return; } else if (z->lnk) /* z == t == v */ { y = z->lnk; y->left = t->left; y->right = t->right; t->left = t->right = t->lnk = (Vertex *) 0; layers[nr] = y; /* delete the node itself */ if (!t->left) { x = t->right; { x = splay(i, t->left); x->right = t->right; t->left = t->right = t->lnk = (Vertex *) 0; layers[nr] = x;bad: Uerror("cannot happen delete");#if defined(MA) && (defined(W_XPT) || defined(R_XPT))static Vertex **temptree;static char wbuf[4096];static int WCNT = 4096, wcnt=0;static uchar stacker[MA+1];static ulong stackcnt = 0;extern double nstates, nlinks, truncs, truncs2;xwrite(int fd, char *b, int n) if (wcnt+n >= 4096) { write(fd, wbuf, wcnt); wcnt = 0; memcpy(&wbuf[wcnt], b, n); wcnt += n;wclose(fd) if (wcnt > 0) write(fd, wbuf, wcnt); wcnt = 0; close(fd);w_vertex(int fd, Vertex *v){ char t[3]; int i; Edge *e; xwrite(fd, (char *) &v, sizeof(Vertex *)); t[0] = 0; { t[1] = v->from[i], t[2] = v->to[i]; xwrite(fd, t, 3); xwrite(fd, (char *) &(v->dst[i]), sizeof(Vertex *)); { t[1] = e->From, t[2] = e->To; xwrite(fd, t, 3); xwrite(fd, (char *) &(e->Dst), sizeof(Vertex *)); if (e->s) { t[1] = t[2] = e->S; xwrite(fd, (char *) &(e->Dst), sizeof(Vertex *));w_layer(int fd, Vertex *v){ uchar c=1; if (!v) return; xwrite(fd, (char *) &c, 1); w_vertex(fd, v); w_layer(fd, v->lnk); w_layer(fd, v->left); w_layer(fd, v->right);w_xpoint(void){ int fd; char nm[64]; int i, j; uchar c; static uchar xwarned = 0; sprintf(nm, "%%s.xpt", Source); if ((fd = creat(nm, 0666)) <= 0) if (!xwarned) { xwarned = 1; printf("cannot creat checkpoint file\n"); xwrite(fd, (char *) &nstates, sizeof(double)); xwrite(fd, (char *) &truncs, sizeof(double)); xwrite(fd, (char *) &truncs2, sizeof(double)); xwrite(fd, (char *) &nlinks, sizeof(double)); xwrite(fd, (char *) &dfa_depth, sizeof(int)); xwrite(fd, (char *) &R, sizeof(Vertex *)); xwrite(fd, (char *) &F, sizeof(Vertex *)); xwrite(fd, (char *) &NF, sizeof(Vertex *)); { w_layer(fd, layers[i*TWIDTH+j]); c = 2; xwrite(fd, (char *) &c, 1); wclose(fd);xread(int fd, char *b, int n){ int m = wcnt; int delta = 0; if (m < n) { if (m > 0) memcpy(b, &wbuf[WCNT-m], m); delta = m; WCNT = wcnt = read(fd, wbuf, 4096); if (wcnt < n-m) Uerror("xread failed -- insufficient data"); n -= m; memcpy(&b[delta], &wbuf[WCNT-wcnt], n); wcnt -= n;x_cleanup(Vertex *c){ Edge *e; /* remove the tree and edges from c */ if (!c) return; for (e = c->Succ; e; e = e->Nxt) x_cleanup(e->Dst); recyc_vertex(c);x_remove(void){ Vertex *tmp; int i, s; int r, j; /* double-check: */ stacker[dfa_depth-1] = 0; r = dfa_store(stacker); stacker[dfa_depth-1] = 4; j = dfa_member(dfa_depth-1); if (r != 1 || j != 0) { printf("%%d: ", stackcnt); for (i = 0; i < dfa_depth; i++) printf("%%d,", stacker[i]); printf(" -- not a stackstate \n", r, j); stacker[dfa_depth-1] = 1; s = dfa_member(dfa_depth-1); { tmp = F; F = NF; NF = tmp; } /* complement */ if (s) dfa_store(stacker); stacker[dfa_depth-1] = 0; dfa_store(stacker); stackcnt++; { tmp = F; F = NF; NF = tmp; }x_rm_stack(Vertex *t, int k){ int j; Edge *e; if (k == 0) { x_remove(); if (t) { for (j = e->From; j <= (int) e->To; j++) { stacker[k] = (uchar) j; x_rm_stack(e->Dst, k-1); { stacker[k] = e->S;insert_withkey(Vertex *v, int L){ Vertex *new, *t = temptree[L]; if (!t) { temptree[L] = v; return v; } t = splay(v->key, t); if (v->key < t->key) } else if (v->key > t->key) { if (t != R && t != F && t != NF) Uerror("double insert, bad checkpoint data"); { recyc_vertex(v); new = t; temptree[L] = new; return new;find_withkey(Vertex *v, int L){ Vertex *t = temptree[L]; { temptree[L] = t = splay((ulong) v, t); if (t->key == (ulong) v) return t; Uerror("not found error, bad checkpoint data");r_layer(int fd, int n) char c, t[2]; { xread(fd, &c, 1); if (c == 2) break; if (c == 1) { v = new_vertex(); xread(fd, (char *) &(v->key), sizeof(Vertex *)); v = insert_withkey(v, n); } else /* c == 0 */ { e = new_edge((Vertex *) 0); xread(fd, t, 2); e->From = t[0]; e->To = t[1]; xread(fd, (char *) &(e->Dst), sizeof(Vertex *)); insert_edge(v, e);v_fix(Vertex *t, int nr){ int i; Edge *e; if (t->dst[i]) t->dst[i] = find_withkey(t->dst[i], nr); e->Dst = find_withkey(e->Dst, nr); v_fix(t->left, nr); v_fix(t->right, nr);v_insert(Vertex *t, int nr){ Edge *e; int i; v_insert(t->left, nr); v_insert(t->right, nr); /* remove only leafs from temptree */ t->left = t->right = t->lnk = (Vertex *) 0; insert_it(t, nr); /* into layers */ if (t->dst[i]) t->dst[i]->num += (t->to[i] - t->from[i] + 1); e->Dst->num += (e->To - e->From + 1 + e->s);x_fixup(void) for (i = 0; i < dfa_depth; i++) v_fix(temptree[i], (i+1)); for (i = dfa_depth; i >= 0; i--) v_insert(temptree[i], i);x_tail(Vertex *t, ulong want){ int i, yes, no; Edge *e; Vertex *v = (Vertex *) 0; if (!t) return v; yes = no = 0; if ((ulong) t->dst[i] == want) { /* was t->from[i] <= 0 && t->to[i] >= 0 */ /* but from and to are uchar */ if (t->from[i] == 0) yes = 1; if (t->from[i] <= 4 && t->to[i] >= 4) no = 1; if ((ulong) e->Dst == want) { /* was INRANGE(e,0) but From and To are uchar */ if ((e->From == 0) || (e->s==1 && e->S==0)) else if (INRANGE(e, 4)) if (yes && !no) return t; v = x_tail(t->left, want); if (v) return v; v = x_tail(t->right, want); if (v) return v;x_anytail(Vertex *t, Vertex *c, int nr){ int i; Edge *e, *f; Vertex *v; if ((ulong) t->dst[i] == c->key) { v = new_vertex(); v->key = t->key; f = new_edge(v); f->From = t->from[i]; f->To = t->to[i]; f->Nxt = c->Succ; c->Succ = f; if (nr > 0) x_anytail(temptree[nr-1], v, nr-1); if ((ulong) e->Dst == c->key) f->From = e->From; f->To = e->To; f->s = e->s; f->S = e->S; x_anytail(t->left, c, nr); x_anytail(t->right, c, nr);x_cpy_rev(void){ Vertex *c, *v; /* find 0 and !4 predecessor of F */ v = x_tail(temptree[dfa_depth-1], F->key); if (!v) return (Vertex *) 0; c = new_vertex(); c->key = v->key; /* every node on dfa_depth-2 that has v->key as succ */ /* make copy and let c point to these (reversing ptrs) */ x_anytail(temptree[dfa_depth-2], c, dfa_depth-2); return c;r_xpoint(void){ int fd; char nm[64]; Vertex *d; int i, j; if ((fd = open(nm, 0)) < 0) /* O_RDONLY */ Uerror("cannot open checkpoint file"); xread(fd, (char *) &nstates, sizeof(double)); xread(fd, (char *) &truncs, sizeof(double)); xread(fd, (char *) &truncs2, sizeof(double)); xread(fd, (char *) &nlinks, sizeof(double)); xread(fd, (char *) &dfa_depth, sizeof(int)); if (dfa_depth != MA+a_cycles) Uerror("bad dfa_depth in checkpoint file"); path = (Vertex **) emalloc((dfa_depth+1)*sizeof(Vertex *)); layers = (Vertex **) emalloc(TWIDTH*(dfa_depth+1)*sizeof(Vertex *)); temptree = (Vertex **) emalloc((dfa_depth+2)*sizeof(Vertex *)); lastword = (uchar *) emalloc((dfa_depth+1)*sizeof(uchar)); lastword[dfa_depth] = lastword[0] = 255; path[0] = R = new_vertex(); xread(fd, (char *) &R->key, sizeof(Vertex *)); R = insert_withkey(R, 0); F = new_vertex(); xread(fd, (char *) &F->key, sizeof(Vertex *)); F = insert_withkey(F, dfa_depth); NF = new_vertex(); xread(fd, (char *) &NF->key, sizeof(Vertex *)); NF = insert_withkey(NF, dfa_depth); r_layer(fd, i); if (wcnt != 0) Uerror("bad count in checkpoint file"); d = x_cpy_rev(); x_fixup(); stacker[dfa_depth-1] = 0; x_rm_stack(d, dfa_depth-2); x_cleanup(d); printf("pan: removed %%d stackstates\n", stackcnt); nstates -= (double) stackcnt;proctype %s not found Addproc(%d); #define _T5 %d #define _T2 %d case _T5: /* np_ */ if (!((!(o_pm&4) && !(tau&128)))) if (!((!(trpt->o_pm&4) && !(trpt->tau&128)))) continue; /* else fall through */ case _T2: /* true */ _m = 3; goto P999; /* np_ demon: */ trans[_NP_] = (Trans **) emalloc(2*sizeof(Trans *)); T = trans[_NP_][0] = settr(9997,0,1,_T5,0,"(np_)", 1,2,0); T->nxt = settr(9998,0,0,_T2,0,"(1)", 0,2,0); T = trans[_NP_][1] = settr(9999,0,1,_T5,0,"(np_)", 1,2,0); pan.cpan_s.cpan_t.cpan.hpan_s.hpan_t.hpan.tpan_s.tpan_t.tpan.mpan_s.mpan_t.mpan.bpan_s.bpan_t.bwspin: cannot create pan.[chtmfb]Spin Version 4.3.0 -- 22 June 2007#define Version "%s" #define Source "%s" char *TrailFile = Source; /* default */ #if defined(BFS) #ifndef SAFETY #define SAFETY #ifndef XUSAFE #define XUSAFE #ifndef uchar #define uchar unsigned char #ifndef uint #define uint unsigned int #ifndef HASH32 #define HASH64 _:never_template:_spin: warning, make sure that the S1 model includes the same remote references#ifndef NFAIR #define NFAIR 2 /* must be >= 2 */ #define HAS_LAST %d #define DELTA %d #ifdef MA #if MA==1 #undef MA #define MA 100 #endif #endif #ifdef W_XPT #if W_XPT==1 #undef W_XPT #define W_XPT 1000000 #define NTIM %d #define ETIM %d #define REM_VARS 1 #define REM_REFS %d #define HAS_SORTED %d #define M_LOSS #define HAS_RANDOM %d #define HAS_CODE #define HAS_STACK #define HAS_ENABLED 1 #define HAS_UNLESS %d #define HAS_PROVIDED %d #define HAS_PCVALUE %d #define HAS_BADELSE %d #ifndef NOREDUCE #define NOREDUCE 1 #define HAS_NP %d #define MERGED 1 #ifdef NP /* includes np_ demon */ #define HAS_NP 2 #define VERI %d #define endclaim 3 /* none */ #if !defined(NOCLAIM) && !defined NP #define endclaim endstate%d #define EVENT_TRACE %d #define endevent endstate%d #define NEGATED_TRACE 1 typedef struct S_F_MAP { char *fnm; int from; int upto; } S_F_MAP; /*** Generated by %s ***/ /*** From source: %s ***/ #include "pan.h" #include "pan_s.h" #include "pan_t.h" State A_Root; /* seed-state for cycles */ State now; /* the full state-vector */ extern int verbose; extern long depth; #ifndef NOBOUNDCHECK #define Index(x, y) Boundcheck(x, y, II, tt, t) #else #define Index(x, y) x #ifdef PEG struct T_SRC { char *fl; int ln; } T_SRC[NTRANS]; void tr_2_src(int m, char *file, int ln) { T_SRC[m].fl = file; T_SRC[m].ln = ln; } void putpeg(int n, int m) { printf("%%5d trans %%4d ", m, n); printf("file %%s line %%3d\n", T_SRC[n].fl, T_SRC[n].ln); #define tr_2_src(m,f,l) #endif void settable(void) { Trans *T; Trans *settr(int, int, int, int, int, char *, int, int, int); trans = (Trans ***) emalloc(%d*sizeof(Trans **)); if (II == 0) { _m = step_claim(trpt->o_pm, trpt->tau, tt, ot, t); if (_m) goto P999; else continue; } else #define rand pan_rand #if defined(HAS_CODE) && defined(VERBOSE) printf("Pr: %%d Tr: %%d\n", II, t->forw); switch (t->forw) { #ifndef PEG void set_claim(void) { Trans *T; extern Trans ***trans; extern Trans *settr(int, int, int, int, int, printf("Pr: %%d Tr: %%d\n", II, forw); switch (forw) { default: Uerror("bad forward move"); case 0: /* if without executable clauses */ continue; case 1: /* generic 'goto' or 'skip' */ IfNotBlocked case 2: /* generic 'else' */ if (o_pm&1) continue; if (trpt->o_pm&1) continue; if (II == 0) goto R999; switch (t->back) { default: Uerror("bad return move"); case 0: goto R999; /* nothing to undo */ struct { int tp; short *src; } src_all[] = { { %d, &src_ln%d[0] }, { 0, (short *) 0 } }; short *frm_st0; extern short *frm_st0; #undef rand } #define FORWARD_MOVES "pan_s.m" #define REVERSE_MOVES "pan_s.b" #define SEPARATE #define TRANSITIONS "pan_s.t" extern void ini_claim(int, int); #define FORWARD_MOVES "pan.m" #define REVERSE_MOVES "pan.b" #define TRANSITIONS "pan.t" no runable processvoid active_procs(void) { #define NTRANS %d long peg[NTRANS]; #define FORWARD_MOVES "pan_t.m" #define REVERSE_MOVES "pan_t.b" #define TRANSITIONS "pan_t.t" extern int Maxbody; #if VECTORSZ>32000 extern int proc_offset[]; extern short proc_offset[]; extern uchar proc_skip[]; extern uchar *reached[]; extern uchar *accpstate[]; extern uchar *progstate[]; extern uchar *stopstate[]; extern uchar *visstate[]; extern short *mapstate[]; void ini_claim(int n, int h) { extern State now; extern void set_claim(void); #ifdef PROV #include PROV set_claim(); switch (n) { } } int step_claim(int o_pm, int tau, int tt, int ot, Trans *t) { int forw = t->forw; int _m = 0; extern char *noptr; int II=0; #define continue return 0 #include "pan_t.m" P999: return _m; } #undef continue int rev_claim(int backw) { return 0; } #include TRANSITIONS || %s(((P%d *)this)->now.[%d] case %d: if ( (t->ty[i] == && ((%s%s)) || ) return 0; break; #define LOCAL 1 #define Q_FULL_F 2 #define Q_EMPT_F 3 #define Q_EMPT_T 4 #define Q_FULL_T 5 #define TIMEOUT_F 6 #define GLOBAL 7 #define BAD 8 #define ALPHA_F 9 int q_cond(short II, Trans *t) { int i = 0; for (i = 0; i < 6; i++) (!(trpt->tau&1))1 { if (t->ty[i] == TIMEOUT_F) return %s; if (t->ty[i] == ALPHA_F) #ifdef GLOB_ALPHA return 0; #else return (II+1 == (short) now._nr_pr && II+1 < MAXPROC); switch (t->qu[i]) { case 0: break; default: Uerror("unknown qid - q_cond"); return 0; } return 1; extern uchar reached%d[]; #define nstates%d %d /* %s */ extern short src_ln%d[]; extern S_F_MAP src_file%d[]; #define endstate%d %d #define src_claim src_ln%d #define nstates_claim nstates%d #define nstates_event nstates%d /* PROC %s */ /* proctype %d: %s */ trans[%d] = (Trans **) emalloc(%d*sizeof(Trans *)); #define in_s_scope(x_y3_) 0 #define in_r_scope(x_y3_) 0 no namebad channel name '%s' trans[%d][%d]->escp[%d] = %d; reached%d[%d] = 1; /* escape #%d: %d */ /* end-escapes */ case %d: /* STATE %d - line %d %s - [] */ #if defined(C_States) && (HAS_TRACK==1) c_update((uchar *) &(now.c_state[0])); _m = %d+delta_m; delta_m = 0; goto P999; /* STATE %d */ sv_restor(); goto R999; tr_2_src(%d, %s, %d); /*->*/ trans[%d][%d] = settr(%d,%d,%d,%d,%d,"", %d, %d, %d); T = trans[ %d][%d] = settr(%d,%d,0,0,0,"", %d, %d, %d); /* %s:%d */ T->nxt = settr(%d,%d,%d,0,0,"%d, %d); bad hop %s:%d -- at %d, <> looking for %d -- merge %d:%d:%d (trpt+1)->bup.ovals = grab_ints(%d); ; if (trpt->o_pm&1) uerror("non-determinism in D_proctype"); /* dead %d: %s */ #ifdef HAS_CODE if (!readtrail) #endif = 0(trpt+1)->bup.ovals[%d] = (trpt+1)->bup.oval = ; #ifdef HAS_CODE ; case %d: /* STATE %d */ cannot happen, dobackward; /* %d */ = trpt->bup.ovals[%d]%s%dmodifier overflow error trans[%d][%d] = settr(0,0,0,0,0,"",0,0,0); ] (%d:%d - %d) same as %d (%d:%d - %d) */ case %d: /* STATE %d - line %d %s - [] (%d:%d:%d - %d) */ merge requires more than 256 bupsIfNotBlocked cannot happen, case_cache #if defined(VERI) && !defined(NP) { static int reported%d = 0; if (verbose && !reported%d) { printf("depth %%d: Claim reached state %%d (line %%d)\n", depth, frm_st0[t->forw], src_claim[%d]); reported%d = 1; fflush(stdout); } } #endif reached[%d][%d] = 1; /* stop at bad hop %d, %d */ /* merge: (%d, %d, %d) */ _m = %d; goto P999; /* %d */ /* STATE %d */ ungrab_ints(trpt->bup.ovals, %d); goto R999; /* c */ %ssettr(%d,%d,%d,%d,%d,"settr(%d,%d,%d,%d,0," /* m: %d -> %d,%d */ reached%d[%d] = 1;-error: (%s:%d) saw 'unless' on a guard: =====>instead of do (or if) :: ... :: stmnt1 unless stmnt2 od (of fi)=====>use :: stmnt1 od (or fi) unless stmnt2=====>or rewrite T = trans[%d][%d] = #if 0 /* dead link: */ spin: line %3d %s, Warning: condition is always false T = T->nxt = T->nxt = cycle of goto jumps /* mark-down line %d */ _pid_0BO1BO1BO1B0B0BO1BO1BO1B0B0BO1B0B.B0BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1B0B0BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1B/BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1B0BO1BO1BO1BO1B0BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1B0B0B.B.BO1BO1BO1BO1BO1BO1BO1BO1B0BO1B0BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1BO1B0B0B=1Bz0BO1Bz0BO1BO1Bc0B/B0BO1B0BO1BO1BO1BO1BO1B.B.B.BO1BO1BO1BO1BO1BO1Bp.Bp.Bp.BO1B0B0BO1BO1BO1BO1BO1BO1BO1BO1B/B/Bs/BT/B.BO1BO1B/BO1BO1BO1BO1BO1BO1BO1B0BO1BO1BO1BO1B0B0B0B0B0B0B0B0B0B0BO1BO1B0Bcontinue%s%s%sUerror("block in step seq")%s%d !( -( ~(%%<=>=!===||&&<<>>((tau)&1)((trpt->tau)&1)spin: line %3d, warning: 'timeout' in d_step sequence claim %s, (not runnable)eventmap %s, (not runnable)'run' in d_step sequence (use atomic)addproc(%d, %d parameters used, max %d expected too many parameters in run %s(...), 0enabled(II, (!(o_pm&4) && !(tau&128))(!(trpt->o_pm&4) && !(trpt->tau&128))((P0 *) Pptr(+BASE))->_p #ifndef XUSAFE ]&1) || (!(q_claim[q_R_check(, II)) && ]&2) || , II)) &&q_S_check( #endif )q_len(q_full()==0)(q_len())(!q_full()>0)if ((ot == EVENT_TRACE && _tp != 's') || _qid+1 != \ || qrecv()-1, %d, 0) != ) continue || (x_y3_ == !q_full(]&2) if (q_claim[, II);lenfullif (q_%s)) ( { nlost++; delta_m = 1; } else { ; if (TstOnly) return 1; if (no_recvs(II)) continue; if (readtrail && gui) { char simtmp[32]; ); sprintf(simvals, "%%d!", sprintf(simtmp, "%%d", ); strcat(simvals, simtmp); strcat(simvals, ","); qsend(, %d channel name: %d msg parameters sent, %d expected too many pars in send)) if (q_zero({ boq = ; Uerror("rv-attempt in d_step"); }; } if ((ot == EVENT_TRACE && _tp != 'r') 0, %d, 0) != (((boq == -1 && && ) || (boq == q_zero( && ( == qrecv(0, %d, 0)) && Q_has(, 1, , 0, 0]&1) if ( { uerror("polling rv chan"); continue; } ) boq != { if (boq != ; } else { if (boq != -1) } ) == 0) if (q_len(; XX=1 != 0, %d, 0)) ; if (!(XX = Q_has())) XX; if (TstOnly) return 1if (q_flds[((Q0 *)qptr(-1))->_t] != %d) Uerror("wrong nr of msg fields in rcv"); , XX-1, %d, 0); cannot use var ('%s') in multiple msg fields = XX-1, %d, %d); #ifdef VAR_RANGES logval("", ); #endif sprintf(simvals, "%%d?", { boq = -1; #ifndef NOFAIR if (fairness && !(trpt->o_pm&32) && (now._a_t&2) && now._cnt[now._a_t&1] == II+2) { now._cnt[now._a_t&1] -= 1; #ifdef VERI if (II == 1) now._cnt[now._a_t&1] = 1; #ifdef DEBUG printf("%%3d: proc %%d fairness ", depth, II); printf("Rule 2: --cnt to %%d (%%d)\n", now._cnt[now._a_t&1], now._a_t); trpt->o_pm |= (32|64); } }) && \ not_RV() > 0 \ && qrecv(0, %d, 0) == Q_has(if (!()) if (o_pm&1) if (trpt->o_pm&1) /* else */( () ? ) : ) )if (TstOnly) return 1; Printf(%sprintm(((int)/* %s */ sv_save(); #if defined(C_States) && (HAS_TRACK==1) assert(", II, tt, t)Uerror("cannot get here")return 0if (TstOnly) return (II+1 == now._nr_pr); if (!delproc(1, II)) spin: bad node type %d (.m) - line %d x2B?kB?kB?kB4B4B?kB?kB?kB3B:4B?kB3ByjB53B?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kBcBjB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB]^B?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kBD5B?kB?kB?kB?kB0bB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB,hBAhBGBAB?kB?kB?kB?kB?kB?kB?kB?kB5B?kB2B?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kB?kBiBfB$gBhB?kBhB?kB?kB :BdB?B^@BY2B?kB?kBgB?kB?kB?kB?kB?kB?kB?kBcB?kB?kB?kB?kB$8B8B7Bb7BI6B5B7B6B8BG9B?kB?kB2Bno name - putname%s%s%s.undeclared variable '%s'proctype-name '%s' used as array-name_pattempt to read value of '_'%s:ref to array element invalid in this context hint: instead of, e.g., x[rs] qu[3], use chan nm_3 = qu[3]; x[rs] nm_3; and use nm_3 in sends/recvs instead of qu[3][%%d][ Index(%d) ].%s((P%d *)Pptr(BASE+f_pid(%d)))->%smore than one run operator in expressionuse of run operator in compound expressionrun operator used in invalid context %3d, { %s, %d, %d }, { %s, %d, %d } putsrc mismatch %d - %d, file %s uchar reached%d [] = { }; #define reached_claim reached%d #define reached_event reached%d short src_ln%d [] = { "-"S_F_MAP src_file%d [] = { #define src_claim src_ln%d #define src_event src_ln%d !(-(~(%%<=>=!===||&&<<>>run %s()len(full(empty(nfull(nempty(!!!??<??[?[enabled(eval(np_pc_value(( () -> ) : ) ) = printfannotate(%sprintm({%s}assert(.(goto)goto %sbreakelse-end-D_STEPATOMICsub-sequenceIFDOunlesstimeout'%c'%d{BBBB~BBBBBE}B)~BB}B/B|BBBBBBBBBBBBBBBB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBߊBBBBBBBBBBBBB{BBBÆBBBBBBBBBBB|BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,BBՉB#BBBBBBBOBxBBB8BBXBBBBB؏BxBBqBBBBBBBBBBbup.ovals[%d]; XX = 1; unrecv, XX-1, (%d, , %d); _trpt->bup.oval = trpt->bup.ovalp_restor(II); sv_restor(); spin: bad node type %d (.b) BԘBԘBԘBBBԘBԘBԘBBBԘBBBBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBBBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBBԘBԘBԘBԘBBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBB*BԘBԘBԘBԘBԘBԘBԘBԘBBԘBBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBƘBƘBBBԘBBԘBԘB BBBԘBBԘBԘBԘBԘBԘBBBBԘBԘBԘBԘBԘBԘBԘBԘBԘBԘBBBԘBԘBԘBԘBԘBԘBԘBԘBBBBBBԘBԘBBԘBԘBԘBԘBԘBԘBԘB BԘBԘBԘBԘBBBBBBBBBBBԘBԘBB case %d: ((Q%d *)z)->contents#ifdef HAS_SORTED j = trpt->ipt; #endif for (k = j; k < ((Q%d *)z)->Qlen; k++) { %s[k].fld%d = %s[k+1].fld%d; } j = ((Q0 *)z)->Qlen; ((Q%d *)z)->contents[j].fld %s%d = 0; _m = (trpt+1)->o_m; if (_m) (trpt-1)->o_pm |= 1; UnBlock; _m = trpt->o_m; break; if (strt) boq = from+1; if (strt && slot<%d) { for (j--; j>=slot; j--) { %s[j+1].fld%d = %s[j].fld%d; } } if (strt) { %s%d = 0; if (fld == 0) %s0 = fldvar; switch (fld) { case %d: %s%d = fldvar; break; _pidcannot find state %d fsm_dfs: cannot happen cannot happen, popbuild__pid_lastspin: bad node type %d line %d (ana_stmnt) abortingѴBpBpBpBBBpBpBpBBBpBBBBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBBBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBBpBpBpBpBpBpBpBpBpBpBpBBpBpBpBpBѴBpBpBpBpBpBpBpBpBpBpBpBpB,BBB˵BpBpBpBpBpBpBpBpBBpBѴBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBpBѴBNBBBpBBpBpBNBѴBѴBpBѴBpBpBpBpBpBBBBpBBpBBpBpBBBBpBBBpBpBpBpBpBpBpBpBѴBѴBѴBѴBBpBpBBpBpBpBpBpBpBpBBpBpBpBpBBBBBBBBBBBpBpBѴBunreachable code: %s, line %3d: unsigned char Is_Recv[%d]; void set_recvs(void) { Is_Recv[%d] = 1; unexpected: do at start of d_step} int no_recvs(int me) { int h; uchar ot; short tt; Trans *t; for (h = BASE; h < (int) now._nr_pr; h++) { if (h == me) continue; tt = (short) ((P0 *)pptr(h))->_p; ot = (uchar) ((P0 *)pptr(h))->_t; for (t = trans[ot][tt]; t; t = t->nxt) if (Is_Recv[t->t_id]) return 0; } return 1; (%s) %s%d.trail%s.trailrspin: cannot find trail filespin: warning, "%s" is newer than %s CYCLE> <<<<>>>> -------------depth-limit (-u%d steps) reached %3d: proc %d, no matching stmnt %d %3d: claim terminates %3d: proc %d terminates %3d: stop error, proc %d (i=%d) trans %d, %c %3d: no process %d (state %d) [] transition failed#%dNever claim moves to line %d [%d:%d:%d spin: trail ends after %d steps step %d: proc %d (state %d) - d %d %d:%d:%d:%d d_step sequence too longS_%.3d_0: /* break-dest */ S_%.3d_0goto %s breaks from d_step seqcannot happen (dstep.c)illegal operator in 'd_step:' '''%s'run operator in d_stepremote reference in d_stepprocess terminationnested d_step sequencenested atomic sequence || (boq == -1 /* else */)(1 /* else */)(boq == -1) && (boq == -1 && continue'unless' inside d_step - ignoredif (!()) continue;if ((boq != -1) || !(boq == -1 && if (boq != -1 || (trpt->o_pm&1)) continue;IfNotBlocked sv_save(); reached[%d][%d] = 1; reached[%d][t->st] = 1; reached[%d][tt] = 1; Uerror("block in d_step seq, line %d")S_%.3d_0: /* 1 */ goto S_%.3d_0; S_%.3d_0: /* 2 */ goto S_%.3d_0; /* 'break' */ goto S_%.3d_0; /* NEXT */ cannot interpret d_step/* 'goto' */ /* '.' */ ; goto S_%.3d_0; /* ';' */ goto S_%.3d_%d%s: /* 3 */ Uerror("blocking sel in d_step (nr.%d, near line %d)"); typename %s was defined beforeillegal reference inside typedefstruct %s { /* user defined type */ }; %s is not a typenameredeclaration of '%s'(%s) only an unsigned can have width-field:hide::show::local:bad array size for '%s'spin: indexing %s[%d] - size is %d indexing error '%s'no subfields %sbad subfield type %d bad subfield entry %d cannot locate subfield %snon-zero 'rgt' on non-structurearray of structures in param list, %scannot happen cpnn.%s[%d]no field '%s' defined in structure '%s' %s%s.%s%s[%d].[ %d ]..%s[%d] %s(%d):%s.%s = unexpected - no symbolntyp %d unexpected %s, no '.'spin: saw ''incomplete structure ref '%s'cannot retrieve field %d bad structure %sunexpected type - tail_addproctype %s redefined:%s:L:G:%sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC!CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCEC{CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmCC~CCCCCCCCBCCCCCCCCCCCCCCCCCCtype = %d unexpected chan def type possible aliases of no valid name RUN ASGN RCV InitzdName[%s], DR %s [[ ]] fully relevant %s due to uses(%d): (exact match)(alias match)<>:params::vars::never::trace::notrace:proctype %s relevant, due to symbol cannot find proctype %scannot happen, missing proc in ast:init::run:spin: redundant in proctype %s (for given property): - line %3d %s (state %d) [] *%3d +%3d #%3d ? %d -> %d Unless <:%d>AST_START %s from %d spin: error: DEF and USE of same var in rcv stmnt: -- %d AST_track, NOT EXPECTED ntyp: %d F&C(C(C(C3&C3&C(C(C(C3&C3&C(C3&C)C3&C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C&C)C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C&C(C(C(C(C(C(C(C(C(C(C(C3&C(C(C(C(CF&C(C(C(C(C(C(C(C(C(C(C(C(C(C)C(C'C(C(C(C(C(C(C(C(C3&C(CF&C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(CF&C(C(C)C(C)C(C(C'C&CF&C^&C)C(C(C(C(C(C)C)C)C(C)C(C)C(C(C)C)C)C)C)C)C(C(C(C(C(C(C(C(C&C&C&C&C)CM'C(C{&C(C(C(C(C(C(C(C^'C(C(C(C(C3&C3&C3&C3&C3&C3&C3&C3&C3&C3&C(C(CF&CRelevant variables:spin: redundant vars (for given property):spin: consider using predicate abstraction to replace:sourcesinkspin: proctype %s defines a %s process spin: proctype %s mimics a buffer to reduce complexity, consider merging the code of each source process into the code of its target each sink process into the code of its source to reduce complexity, avoid buffer processesspin: slice criterion type=%d spin: possibly redundant parameters in: critical(%d) CTL -- %s premark nomark liftmark ROUND %d -- changes %d no slice criteria (or no claim) specifiedspin: no redundancies found (for given property) Explicit List:* %3d <:%d>, ==EndX[%d:%d:%d] bad scratch: %d inspect pair %d %d subgraph: %d .. %d possible pair %d %d -- %d Curtail %s: scratch %d -- %d %d %d %d %s (%d): states=%d (max %d), words = %d, bpw %d, overflow %d d_step {atomic { { };%s: /* normal */ {} unless {}; /* end unless */doif::od;fi;c_code c_expr { } ->;proctype %s() provided {}expected ')'expected predicateydCmcCjCjCbCjCgCjCjC`CaCsyntax errorformula: expected '%c'truefalseexpected '<>' or '<->'expected '<->'KoCmoCmoCmoCmoCnCmoCmoCmoCmoCmoCmoC2oCmoCnCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCToC]oCmoCfoCmoCmoCoCnCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCmoCoCparentheses not balancedtotal memory used: %9ld largest stack sze: %9d spin -f: saw '-%c' usage: spin [-v] [-n] -f formula -v verbose translation -n normalize tl formula and exit || && U V (falsetrue(%s) D Unknown token: []<>-><->predicate||&&end of formulatl_spin: , saw ' tl_spin: %s ---------^ new: , old: nxt: other: Push %s, from %s, S%dtoo many UntilsCCCCCCCCCCCCwarning: node %s not found && (() || (1))))T%daccept_all%s_%smaxred=%d, count=%d, curnm=%s, nwnm=%s (greencnt=%d,%d, redcnt=%d,%d) initT%d_UV|&X!TF?kCڍCڍCɍCڍCCZCCC8CICCtrue formula-old: [%s] formula-nxt: [%s] compare old to: %s [%s] compare nxt to: %s => different => match New Node %s [] nr %d Done with %s Is Not New Has Next [] Expand %s, from handle: : assertion failed CCؖC'CؖCC CCؘC /* Normlzd: */ /* * %d states in Streett automaton * %d Streett acceptance conditions * %d Buchi states */accept_allacceptname too long %saccept%s/* redundant state %s */ replace %s with %s nonxtA: nonxtB: combo: BINGO %s: -%s %d %d %d === state %s, trans to %s redundant conditions <-> %s bucky match %s T0_initT0%s%d: state %s equals state %s == :: () -> goto %s %s: /* */ T0%s: if :: false fi; %s << >> %s never { /* /* >>%d,%d<< */ accept_init: 0 /* false */; accept_all: skip } tl_spin: memalloc %ld bytes releasing a free block size pool allocs frees%5d %6ld %6ld %6ld : assertion failed !true => false!false => true!!p => p!(p V q) => (!p U !q)!(p U q) => (!p V !q)!X -> X!!(p && q) => !p || !q!(p || q) => !p && !qCiCiCCiCҾCٿCiCRCQC/CsCcannot happen, Canonicalcache stores : %9ld cache hits : %9ld sameform...type: %d cannot happen, sameformCCCCC`CC CC}C}C`Ccannot happen, anywhere;4%Pp#Fr8eXxo!f8%X x1j8'XPx %8X_xj[L  @`"h4&l** +N-[.0.P0p1*556798>:X;xT<>??AC8RFXFxG0I&J0KK(wMHQpUVWXXZS\8hXhxi?ii/jjn8oXlpxz{}8Z`6Y-(kHhΔ3 sA(Hh\ʟ٤ p ϫ@ í`  H Ա ! !@!`! !!,!9!" "H@"`""ҿ" ""O# #@#`##?##(#$ $@$b`$$L$$w$%(%H%h%d%%(%%J&(&H&h&&V&&&'W0'*X'a'5'r''(` (@(`(9((`(()()H)Xp)))'))5*8*pX*:x*+* *!*!+% +8'@+'`+++++.+/+0,3 ,.7@,:`,=,>,%@,B,D-E -H@-VI`-I-M-N-T-T.eV(.YH.jZh. [.hl.l.m..n/'o(/H/ h//Œ/q//B0(0UH0h0;00^0#01f(1ڥH1h1111_1p2v(2H2!h2c2x2r282v3b(3LH3h33333,4(4H4h4j4 44v45t(5H5wh55(555^6(6H6/h6X66162697):(7:H7;h7@7HC7D7FE7E8>F(8GH8Hh8JI8I8J8.M8\O9O(9!PH9vPh9P9pQ9Q9R9 U:1X(:YH:I\h:p_:_:Q`:`:`; l0;lP;mp;m;+n;o;5p;p<Yq0<huP<{p<<Z< <*<=8=X=x==ߋ==y=X>r@>`>>ǒ>>|>Z? ?@?^h?E?ž?{?ܡ?v@Т(@jH@Nh@Ȥ@3@@@AX(A@HA8hAAA'A`AB(BcHBhBeBUBBMBȺC:(CHChCCCrCCD(D;HDhDDYDD0D E(EVHEhEWEEEEF=(F@HFhF3FIFFtFyG8(GHGhGCGGG!GcH(H;HHhHHkH*HyHdIL(I>HIBhIyII0IcIJX(JHJ$hJJ J J J K 0K PK pK&KK<KKL8L7XLrxLL%LLLM8MLXMxMKMzMMXM' N 8N_!XN!xN9"N$N%N6&N'O(8Oy)XO*xO+O6,O,O{-O{.P.8P3XP:PP>Pe@QzA(Q@BHQChQdDQBEQpGQ(HQHRJ(RULHROhR-QRSRSRhUR4WSlW(S,YHS[pS\S4]S^S^S aTb0T&cPTipTjTkTkT-lTxlUl0UWmPUmpUynUnUpUqUrVHs0VsPVPtpVtVuVuVx h@AC <@AC $\@6AC HJ@(AC @J@JAC J@,AC J@,AC J@AC $K@uAC DJL@AC dM@JAC )P@XAC P@AC Q@EAC Q@^AC 4R@aAC $R@AC D{S@ AC dT@AC V@9AC X@%AC Y@8AC 7^@IAC _@AC $`@)AC Da@ AC d[l@AC rm@#AC m@AC Sn@AC :o@<AC vo@AC $np@aAC Dp@ AC dq@AC $r@8AC Eu@AC w@AC w@AC $ |@@AC E$4Ё@AC E\@7AC |܉@aAC =@SAC @.AC @ AC ˍ@/AC @NAC <H@AC \@AC |@AC `@AC @aAC $Z@AC EE@iAC $@AC Do@UAC dě@AC R@6AC @AC 5@AC E@AC (@AC $¥@AC DD@AC $dU@KAC E@AC @ AC $@AC E[@AC $ @@AC E$< '@AC Ed <@AC  @=AC  >@AC  @AC  ȹ@AC  û@ AC $ s@ AC D ~@AC d @)AC  @fAC  @AC  @AC  i@AC  M@AC $ I@AC D @# AC d @AC  @AC  @YAC  T@AC  @iAC $ @CAC E, @AC L R@TAC l @AC $ V@sAC H @UAC  @AC  @>AC  @AC 4 @FAC T >@eAC t @xAC  @`AC  {@hAC  @AC  @AC q@AC 4%@AC $T@nAC E$|:@AC E$IAAC EbA~AC  A_AC  ? AAC ,3 A>AC Lq AGAC l AtAC ,AAC DA9AC }AAC wAAC  AAC ,0AJAC LzAAC lAAC A AC A]AC ArAC xA@AC  AvAC ,.AAC LAKAC lBA;AC }AAC E AzAC  A^AC "AAC  $A9AC ,6&AMAC L&A,AC l'ARAC (AAC (AtAC  )ApAC |)AAC  ;*AAC ,*AYAC L+,AAC $l,AAC EP/AAC /AmAC T0A+AC 0AAC 51A(AC 4]3AwAC T3AAC t5AAC 6A`AC 6AAC 7AAC K9AAC c:AAC 4s;AAC T9=AAC t=AAC _?AAC @AAC $AAAC H$HAAC E$$OA7AC ELRAAC lTA=AC UAqAC SWAAC ?XAAC XAwAC  GYAAC $,YAAC ETZAAC t\[AtAC [AVAC &]AAC ^AAC `AAC $aAAC A<aAXAC \ bA AC |oAAC oAAC QpATAC $pAAC EKxAAC $xAAC D|AAC $d~AAC E`AAC  ABAC bAAC uA3AC  ALAC ,A6AC L*A!AC lKAAC `AAC  AAC AAC "A|AC  AAC ,AAC L5AAC lQADAC AAC PAAC AAC AAC  AAC ,ƨA2AC $LAAC EtAQAC LA>AC AAC SAAC յAxAC MAAC 4ڹAAC TzA[AC tAkAC CA?AC AAC AAC AAC 'AVAC 4}AAC TlAAC t2AAC AAC A+AC AAC ]AhAC AAC 4WATAC TAaAC t AAC AAC AAC _AwAC AtAC  JB,AC 4 vBAC T BbAC t uBAC  BAC  BAC  BAC  BAC ! BAC 4! BBAC T! BAC t!BAC !BAC !B>AC !B AC !BAC ""BAC 4">$BAC T"0)BYAC t"*BAC "P+BAC "@,B\AC ",BAC "-BAC #.BLAC 4#[1BAC T#1B9AC t#wkBAC #pBAC #qBAC #jrBzAC #rBAC $vsBqAC 4$sBKAC T$4tBdAC t$tBAC $uBEAC $^uBpAC $uBzAC $HvBAC %]wBBAC 4%xB)AC T%zBAC t%K{BAC %+BSAC %ByAC %BAC %BzAC &ByAC 4&BAC T&aBWAC t&BAC &B2AC &B`AC &BAC &BAC 'eBAC 4'BAC T'B\AC t'BAC ' BAC 'B.AC '̮BSAC 'BrAC (BUAC 4(BAC T(BAC t(B~AC (^BAC (3BJAC (}B$AC (BAC )lBMAC 4)B%AC T)BTAC t)4BAC )BoAC )0B?AC $)oB AC H)|B|AC *BwAC <*pBAC \*BAC |*BAC *MBXAC *BQAC *BAC *BAC +BIAC $<+!BAC Hd+ BAC +BAC +|BAC +BXAC +BsAC ,eBAC $,B0AC D,,BAC d,0BAC ,OBAC ,cBAC ,BAC $,BAC E -BAC ,-iBAC L-nBAC l-7BPAC -BeAC -BAC -BAC -xBAC $ . BAC E4.BAC T.B}AC t.2BAC .CaAC .LCAC .CXAC .@CAC /CAC 4/CzAC T/8CkAC t/CAC /CAC /[ CAC / CAC / CAC 0 CAC 40 CMAC T0 C;AC t00 CgAC 0 C9AC 0CAC 0eCAC 0.CAC 1CAC 41cCrAC T1CAC t1CZAC 1CAC 1C{AC 18CrAC 1C{AC 2%CAC 42CAC T2C|AC t2C_AC 2 CAC 2p!CAC 2"C<AC 2N#C]AC 3#CAC 43$CAC T3G%CAC t3%CJAC 3)CAC 3*CAC 3y-CAC 3$.CAC 4.CAC 44g/C`AC T40C+AC t41CAC 42CpAC 42CAC 43C,AC 44CAC 55CoAC 45:CAC T5:CAC t5;CAC 5BCAC 6P?CAC 46@CAC T6@CCAC t6ACAAC 67DCZAC 6ECBAC 6ECFAC 6GCAC 7GCAC 479HCAC T7HCAC t7ICAC 7KCOAC 7KCAC 7LCAC 7MCAC 8OCAC 48QC7AC T8SCAC t8TCAC 8XC3AC 8XCAC 8sYCUAC 8\CAC 9]CAC 49]CAC $T9A`C AC E|9)jCAC 9kCAC 9 kClAC 9kCnAC 9kCaAC :[lCAC $<:plC&AC Ed:oCAC :~pC.AC :pCOAC :pCwAC :rqCAC ;qCAC $;qC;AC D;qC;AC d;tCxAC ;wCAC ;ayCAC ;@zCAC ;\zC'AC <zC8AC $<{CAC D<|C<AC d<|C/AC <|CAC < ~CAC <~CAC <CAC =CAC $=πCWAC D=&CAC d=CiAC =CAC =CAC =CAC =TCAC >VCAC $>C.AC D>CAC d> CAC >CyAC >CAC >CAC >C\AC ?GCAC $$?7CAC E$L?&C0AC Et?VCAC ?ܝCSAC ?/CAC ?՟CAC ?CAC @CAC 4@tC`AC T@ԣCAC t@C.AC @CAC @CAC @/CAC @FCAC AūCAC 4ACAC TACAC tACAC A=CAC AشCAC AC8AC AܶCAC $BCAC EDoperator: keyword: function-name: @DZDZDZDZDZD[D[D [D0[D[D>[DN[D\[Dk[D}[D[D[D[D[D[D[D[D[D(\DI\DV\D`\D\D[D\D\D\D\D\D\D\D\D\D[D\D\D]D)]D?]DU]Dk]D]D]D]D]D]D]D^D0^DX^D^D^D^D^D_D]D2_DG_Da_Dl_Dw_D_D_D_D_D_D_D_D`D`D%`D3`DD`D]D\D]`Dk`Dz`D`D`DXX ?DDӀDDDDD8DxDD؁DDDDD D@DaDxDDDDDDDDD DDHDxDDDD"D8DDhDxDDD˄DބDDDӀD(DDD5DD?DDXDDDDЅDDDD(D?D`DDDDΆDD D؁DDDD8DD`DdDDD؇DDD8DXDDDˈDӀDЈDDDDD.D؁DD:DHDWDmDDDDDDDDDDDD.DDD[DcDsDuDDDDDDފDD DUD؁DhDDDUD؁DDDD(DXDDD`DDnjDDDD*D؁D8DcDDDDwD|DDDDӀDʍDэDDDD(DODiDDDΎDDDHDcDxDDȏDDD9DSDhDDDDD؁DؐDDDDDDӀDwD3DOD[DDhDDDD֑DDDDD؁DDwDD(DKD]DDhDDDǒDD DD8D`DDD͓DDDDD0DPDDsDD؁DDʔDD D8D`DDD͓DDDDD0DPDDsD؁D$DD D2D؁DIDXDDbDDpDwDDDDDDD֕DD$D@DoDDDɖDDD0DXDiDxDpD$D@DoDDDɖDDЗDDXDD%D8DlD؁D{DDDDDwDDD[DDޘD]DDD D^DxDDDDؙDD5D?DCDDDPDDDDDҚDDD>DNDcDpDDDD DPDoD?DDDDDȜDڜDD!D8DDȝD?DD7DGDXDDDDDD(DDODXDDD؟DD D?DLDSDpDDDDODDDDD+DIDfDDDϡDDD0DXD؟DD D?DLDDDD0DXD؟DD D?DLDD"DiD4D؁DKDDD`DZDhD]DxDDDΣD؁DDDhDDDDD`DDSDiDDDDĤDФDD DDD3D?D@DTDhD؁DoDDDĤDD¥D@DTDhD؁D DڥDDDD؁DDD`D DSDiDDpDDĤDDD DDD3D?DϦDTDhD؁DoDDDĤDD¥DϦDTDhD؁D DڥDDDD؁DDDDDDGDTDD`DmD~D[DDDDDاDDD@D`DDDDDDoDD8DXDDDDDɩDΩDD DxD D؁D{DDDDODaDtDDDDDDD̪DDתDDDDDD$DD.DD:DDDUDkDDvDDDDDҫDDDD DD DDKDDhDDDDDDDDD!D4DADDVDlD5D?DDD5D?DD؁DDŭDЭDDD؁DKDDDVD`DrDDDDǮDخDD,DDPDDDDXDDDD5DŭD`DDDDDDDDD8DpDDDDDDHD?DDDDD DDhDDD?DDDD؁DKDDDwDD2DDDDED5DD[DeDyDxDDD؁DDDDDŵDDյDDDDxD0D؁DhDDDDwDDŵDDDضDDD1D@D`DDDDDD DxD%D:D؁DIDXDDDD[DDŵDDDDDDǸDDܸDDHDDDoDDDDDDDD(DD@DDDDD؁D9DDPDDDDD؁DHDIDpDDDDDwDDsDhDDD(DDRDaDdDxDDD؁DDDDDD@DDcDuDDDaDcD¾DԾD5DDDDdD D(D`DDcDDDDDؿDDDDD DPDDzDDDDDDDDDDDDD-D8DD`DDDDDDDDDDDDDHDDDxDDDDD0DDcDyDDDD8D]DDDDhDhDDDDDɩDDDDDDDDwDDDD/DHD}DDDDDDDDD@DxDDDD DDdD DRDDD?DDcDDnDDDDdDDDDDDDDDdD0DDDcDDDD?DDDDDDXD-DDDDDiDDDDD-D:DPDxDDDDDDDD D DD?DDHDxDDDDDD0DHD_DoDDDDDD DD&DDBDiDUDDiDxDDDODDD?DDDDD8DDDDhDDDDDD˄DDDD8DDcDcDDxDDcDDDDDDDDDD+DD@DhDzDDDIDDDDD-DPDcDtDDDDDDcD D%D0DpDDDDDD(DDXDDDDDDD(D˄DhDDDDDDDID(DXDDDDDDD0DLDDeDDiDDDDD D D`DDDDDD?DDDDD DDPDD{DDDDDPDxDdDDDDD@DhDvDdDDDDdDDDDD DHD DDDDDDDD D D(DDBDDMD`DDDɩDDDwDDDDDDDDD>DPDxDDDD DɩDDDwDD.DGDDODhDhDDDDDDDDDDPDDDDD DɩD:DHDaDUD؁DDDwDjDhD~DDhDDDDDD(D@DcD?DDxDDD?DD؁D˄DDDD؁DDD1D؁DDDEDXDDDD؁DDDDD/DHD؁DDDDgDxDDDdDD DD؁DDDPDDDӀDDDDDDDD(D`DDDDDDDDDDDD(DKDbDDDsD˄DDDDDD(DDDD˄D}DD8D`DDDDDDDDD˄DDDDDD˄DwDDOD2DDIDhDDDDdDDDADDPD{DDDDDDDDDADDD0DADfDDDDDDDDDD?DdD DDPDD؁DDxDDADDDDADDDDDD`DD0DXDhDxDDDDDD D D.DPDhDpDD5D?DDDDDDwDDDDD