=:QvD@OCEeU4GݏVˮ+kIX;P*% <* bge ur_/5Hӧ 9TJ~i%p&O`G|UARp? /v^c˔3~FCGSߜ]FLnSuPTYk;cZ w9"~/Go7 oOR-NH'yV'D`l0MJ yfOFPl׭I0yvO%<㹽ol} ܦ*nm]mp[veNpA7Qtʶgw&ET C`=&pS)<Mum?I9ލ`f8/P1F5Y8W!+M(v ӏ,3hI'.()bgLIurQV4YWM]kNnSqTbKT׿Ju寚Sͯf@&V>^C3&I㩌V1 'JDCwRRr p+{~Mha`#F'Q?b4kpSUn~^9:(+`6OFW&Cf7FCJկhTJ\nY˟@fLdLG}B= g["ՕvkF*|yz-Z&m`"NVWap8 /o!6SHuwSz$4wЌv6dekX &1i =kV Ȝ9)"ʸ~UM#@(`e R`hhՕN >؜Nl'GCVy=WW0<":Ѳd9fK*\0#Iv|(eH«+ _O2. --t,xj0Ow];20ӑC6!)Ù #T?O鴺Л0=@& W9h.sdQaAC{0 "q5_PZ߬eabk޶a{?8]-Z-vWju:o66FIjy>{{{y N4Z뷨<#OڝV5@W0'O_guN` \5781Oށc:Y^TwW5d躷]J]MD+\aIKrQj>deɳ>+R;+etܚ]Oё@Ew~tQNRocX^/-}c2bFC":maִ65L"Sxݚhv se v۫kuk/PۦʏpC'0kA~mMI0[C8LR1apDIXb !kT,[h%[t1f)no J}kV{v [ ]@xfP\yѽAK"e`AxXoGŶ*C ,g!m_ap_ A&%1ݛa_;UUDKT_w:4.şwK{溻{pn' 8,R|&!q'! H7SHzÜjOH`+*こ%6>Je/en Y*TݨTa:pWmƙYawCc[R M@7tʆC{t;Fi0R-tz^8~vM ϰSlTd= 9ƣFQlQA ȲӴ:#B3G7IJg5Bq뻫yy,uWu>J}շ.a;O٪ k bz8j߲gte@E5htaUJ1F8 tZu+}}_NZM+2F\?M۳]8 )^{|8_@zbB$Eˣtu ZywHC%pPpez{I#ZP*#D̈/7|a0FәR)>zkDRȬM4J>\)@0j".i鎳K'WpLʻ\pwh|sN9p̿A2;UÔu[XXAtB٨e-<fpF,H^8nyr $% 9&c#;`P5I_%":az >sLSxO`|UZ}Gwڃ}d5`LGpLg-[+CjwsѧBbs26W FZHcxZDS3 gA!XЍ +07ms-WJ~'WK~+\+5 _ *:*-3 9%n/Eߋo%͒{`\kvU ; tj߉ALN||?;||/;|^^#dG:x ̎ʁ@p'pCh mC0 Vjg0p`A 38*1*qTcLSE2ODoBӂ}=ڃ-:s%; FknHLO %+R(ZS{ڢZ#?hM3ű"3Eqdfޞf4$eAszB7S]l$ >)~|F*rLǭv8]/` ZvѴg;)t8)L >d8,9Yd ;|33D2}V<*w >k^D~{Vc~:@cQn蘜 @ć*Q"~@#} ՕU*.> t\KWAv\ϸ@>-k8,̄S}v~|`arC$Shu%HCJIb񣃻 .|oy;v4cz|ۣW`h^H3@_՞?>>JG4&o:]­#03q)-4]iJy6F‹J)QuvY˨ *:8*sQٝ'TEeoN*CFe( u*8*ù 2`T@22 +le5h+laVpT5B4|wdefgZ%)SBr&Ʉ :x>KIBg!Rs:,*!;]YCLTD۲j[Ťk'k蔧X\V {ykdNYe0[Ťz'5tqE/Ab>cYH֬;Ѣ%ŷ4i^˼S5n%(kyfX.쬸gMMsϿ=0 &W4n++3_O8K'N4lKM^*F>7!WO5# O#<\0Z%:/#!Bu%S*4:_Ip`[Iģ.^5 {dss/(9<1*JXrZxrcx\ԢieHj=DUς(ڗk~fǣL| 24/QZ~{RJ?)8a*2(y߻4x$xz@ָO/Gt <}]LPODbqD6O@I/%LA bh%"0%tf%P# &pQd&2,욄>`|Fg_gDs2zt\Ž'<JP*$>xIqw$;,RR{F7ْF !骬ֈn&rp:;cz`Dgm%ϧ4!'MTE rXG-E9n,A<ѩF8fgADሣ8HN1bQJlKv棫(]z83]/Uk&iNW#jOgSޖ aY]1}icv=#<5zUըWNrF^DQ`He5Xl ыFdfFGb7Kّ[ޛEa_Y|%Ʒh o.`/1WvA̜zSP%kMF' gϘ'X.abm۟T1S}c)X&=aB;é ;[u&Wi=Z `{<(#;ˋbO(L 2-?2I%F#i4F@b,o@"V|{pv[֖N)[ֽhԲck u@wɰ!. VuJ03`W"r:^C?{F)y.U!\1XeK"U``Lw3悁SX ÏBxgO0ԐCO::xG29 @ш+N&M[!(Z=߭v =~f4R{1"XXvmyb?ۇnazgn~H@Љ)S6gx ѡ^b1X])v:+FE;~c}4!8`GveB1Fv |!I!\=O!1g5pw{3:Hꍄ= Xжx~tr[{^-'y<'yeo'.l3[ó*BuA:;x3cF8{TWQt ӑ7PQ6k謿ӁЦ~ *ww _?4xrD4;yVD7Эpo|m ZL$p/X.fh͘;5zXi Yx9~U5a6H"^>XUvfL3Դ{5ds6גl &AY)+i4`t,˕&W0W kOoc(|m `QȴG.jU~nK te}G)jZ=Gz'YikD4#5jۚޒ¸T6K!zS*^jl0| *1LG]I$Gؔ8BMvM r۲\&?mj>Vp7mIT vWHK,3 |CZo /ѕ>*r4ħr_s]3/}f?, |*'[.V7)-]ZB+eSΊ/\ E:DnJc?Џ `p=$PuӬt֒g}M Y9 o[^B3║IrqT=\h=>|]7d U2b3Yߒd3иM5}R-4?jA@jdod)Aҗ µvޅ wpc譖Pfh\~ڣS{ڣ8VӔM[܌frޢbPđȚcٳNbYUO 9ٖ"Ȉ=J!fƫfL1d*^JW&QKU'Rht "ޗ'G'Mtc%å A@c,ٍ+M+TJ^ZP.aZ@+<_V5WU pqLcW+rv3ef8rgK)n׭ɔ!^F.j+eo[}J͒Mq}S\;sݥvK~?E@ֿ֥oّMզd *t&*"}fy}&1+NVd}2-\ФW>D* I|jʧCEKyrփ:[my)892wn=,`n{:D!_(JD"BdU5ICRqSÜZD1Jl:ĚZCnvEau/Y;T[pU%YVUBI*eE}*s. ^яJͥU SOPp'{r '{r 'kϵ]"TU:0jldٗ(Q&H, FV,"YȱU>,cdr=J/؛`8o =9٧*S YR>T6JF_ G'ogtN[ ׺K m~߾@i zI50){~C #£GeZ(эXCsJ@x OJK#4[&Ӕi>} nwθ^e_kl/&i^%Ͳr2ZPq[2SLq\O )xaMs[0sK:N){ulpOe<؊qΠbh-:ǏthtbmE/}K_|)!j˧|O@2hS, fd2BlٺٲdJVFd֎Vyjddh=[- 5X f“58_TĽ9ɼ{ ĈG߀lEZf̼]%3fɛMd)Nk*/թEiE;vjA>oӍri)M%ʍZo 7 퓐FRUfcZ٬m։_-Wih[gB60!_o]z;U0Ҟ ]X=moͳ6'}=7o 'SNHq;"U6g<`9DNwWͬdԺ)0%4- &,ln'G}IHDn/j{4ػ")+P QN&Qtt;%f7ڭiH Օnڳ8͋ӋG/Ei+ ڛ]ڲi2\f#h4خhtw>|͉l^jN}3'R0Y8~"i:2 %]h*}ٗ/qtBN#z;_GY%/++|9=hi-ⅅŋEPY((@o_hXϏ2MHaxqt|@Nf!*:H՚GfaR@tyb"4.<|g"6Bf~+Jb~/*2bi 8:n>?3ѰTK_M$1<8}{b-,ƒuvő9d1?Fr$O5g.1FG}d#X8Zd,8X%ڈNcKZ6>?:ڮ^Bo7JLaB@tԜX%/댎٘ u~D]B[H^PH CdTKtx;cMkFn&`@%:f=6_r>ݖ fq[뀦'?=YG$iTO_B@S-\<}pV=~c|5bqTѺx#-A^.učqfDMeTD"X' Kvc/<;{楉XON_5M"F),_O6Jbo߾1TK_9E6f3TQS}^ci6/2d]6Fn9t2MG'RDD]G.dFoA􍅐99kZiM]v<ݍ0soPc:x|\U/55 lgmxK?'@sUn 0^=GsS>:9o#~e]^lB2M(RD4F}Oܸ |5_lvwrz荺T5 @8}{~7腅5z5_;|zX>$8WNܯy%hxY|-$subq/~zV)įO~|ya$8_4(6=>p=[\ئ:2Dz1oOu9L487tEx1\MdYjJ[$Qic,ے$ܖ$4X-fQ'ύ}_D k:Rռx(ot5>8xu~Zy%UBI %C GൡXWR-<}1t/_;T'::yB @S-t<}1tNqNt4}1t'd 5_;0B#XKgyȓmbRijW-d,y!\͓w66Lv a Kta[Hha.\ >ǁՁMI)/U j_;'goBӷt^Šf/n%/b0o`SKr^..Xc\qAo2_9G/<:s8==9VH((m jN|mH=;:7b SG1xhbg/4Vie|U}llU5JQ9q4Hi:&:_;*3૆9Ri )s?8}I: 8'DQ+Jmk0@is@6&0iNQùyp>9? Q$OKKɜVp!a:mUgQ/rщ_1 5ǜĜiƦUGu6a9g6&1i^gG:o͉1zZ9co=6{X3[ ai6Q_O.TRudQbΚt4Չωh\xot9Q⯚.}ت:Rże}8C*,ު%jD/dĪ:+'I&4:_qeRudQ|͹%~L_go ]>d%曰yty@s-%=Wo4 w_jINGGq9R\Y$8 } NW_!Ċ{3|f fkPB{܎GS;]]ϒ<%MK"ޓS@3왁Y]Cr ^r v|1!i&lSY]98=lgOJIdg0ҝngN7 彤}Fc9/_YUD;"'apљ<@(F /_VM3Pd)C 5)OR$Tʔhz{8igPdetUT5AcBY"*_G+ Ln4Ι ߏBi Od=<5Q&G{4 g(D%De.9S_]pYM)dB)]B*^eQ aMm1h!Osͼy;188Hw@J4+o~92K?}!.h]ͨV}e]}u*] F t* Q+:+o73lM 9+z/y?d"Td,ƺ 'ۑGj=;LG}:t9CNgF"EJ}6 hHW4ףp0929j־N@ =Ⱦ>I*dY6q3^1.h6$[4eÍ$ԪP@sUD}묆ls1),1SFG$62$xZqHm,(ЁDA)s f_Y^VWKg\I1eXm"b9@4DdmG3ۣv M"{ڞВ80FȾIv.Cnwow 3T+ fbI/yl 4d6i>|j9*AU`y:lr6NHͽ=hxh68V1>sš+-[Q.iT Pil02bv|]NJ7Fkgu"zVoLMan=B._5a nq'`;!`u+"XD1E\mkXHmب-i-%'E(#]ɋ3ŋ̷VcI}% aㄞ6QÃآ,h2{R|Aҹj\%ԂMbvGf@*_Ȃ? f|ՑB0Ȃ"OZJ H,$4{Qz>ed]KZK@Aa.l I+8Jo־ IʴxO7ht4!ݽb8UE t:X_UIt0҇T̾ᕎBjoo#*SeE E0$(G":v2Ng ]O/<;U,ViQBa?QFJb?Q۸t_x}][•M&X+?eEL:2:v孽MRN.ဒNoJ?/.diqƝwvp̡)Btn#әi"A@Kp-Zqk2po32E0-ʗKen ,9AVvb-@m-Hh"s' xF{8$YR]gcL-p~f7\-T`sG>r Wp:!Ѿ K6 Ȗ!/R$C/܈p~ڂ2M\\~VqQ] TPU x:J+Ou?ј1I|a.o%c`yоF֤kn }ϋG1T=[/Q'fs(D-Ϯlsytܼli12{%i=%(ĹnJes0Khh,ccfNRq3,:o9>5?#z&\̞,FV\}N&En74Tt(fS@^IV9*Yz<'/4oY`XvX9:GY6e=Dyk2ǔ+,62rco-v3(?_ %xG>j}^$O;*!ڶUruF@3_$̍kM=PD,?9?n/fI1,?kkn2cKYԚ3%( z!rKfu5~UIT' `=j̓0/Df@{hӺfߞ&g*6lnU ܕIO0P S?"$="8(JIJ'$Mgu`ƸĵpNf{-ew +?v8Kk/&ėy2乚2.ӛ4V&GJƪko+ҟjakA{6M|u&Wnv;"9I\}넜ҘۤZf0ogNX0]F%Sl3| e ȊT/4&<,jT 1*+Gr;Btʑ\DR=L0^_CMʑ\ηSX+SrvR#WNULJb6Vwǫ<\{#6YoAa LdVQ?Ïٜ}V0W.鯓*NU̐DA8?$vvB*@F fW -SREZ±/.,N$8n0к9޺--ʓǥ]w?n0T$F~~r 8 Lhm "aF 2$'aU:C]2ݔY~y?=1+8+AƭT\Q=|o@鸘S6 ܃&52<eSqXNXj1<Ɯb'q̘ 9c8Rv3FmUh/Jӻu40ٖ96z6ƭAF}zV27mlګm;`, qA"2fi jd-<0Fؼ$ s^&~c.to'8g} |Rq0 q_>SsY9^pԎ7`. vUɴMQez@8YKDl̬FZ"j|>?q/q엨v;O$3 ߃I)4p"rŝJa99ܦقm҄N‘ lmO*l 5(s{FQ'RIPyO?/G3kNq'N-󷕀4Hu'nW'kgr؊ԁ5~0.ށA==_;pu{w^ \utwh{Ͽܫ_8kѣx~TLFa{rogZnt.fI?0w,=0dTˢ ւgW|i(cZ\= @᪱|#XfI .*Z+&[<~7GzQy 2\f"!hF{ .VʘqGX}0ΨTP~JlۯJp} MiFه !ͿO$k7Wf7d6hn1Tn /0>GE̘x!FO#x2$%d O!G' &BiTdz9y6Pn5*R!uD|: |~P/0b̐w@'?I;c_vʐɜsAÍF##f`d_|8Gà Ⴭf̜k0叆 :^Q;mEo@D8lD6"L!!-ė?&b.~?8<}uOu j S1jեPGjQ`uqMx,y\f n7 iPa%*l0ƪiI#l;?Yxk=c5倱zp/q?qJFr;Gg$.q>ܸKv_j yW:bFghaş?=̔t3߄ >ՔjaNwz2tkGElqpyFCF{3ξ]mp=؊?&{-ia)ԃܜTufI2xk q)K6h:{}!#,,#,09{Cj!s5ƘyNQ<^73rYYYuPGjÍ:>Jƚ{;܇m.8 *uJYIכ#Kݽ.g?߻6DPJ65b9w-X5ub\r_jbŘ|"5q,&n0~Yve ҥ"e2d+Xji$VKlms1k2Db&ˡ6/--p5#-<,sQ3\<9g L3gg ex˼{R< 7_ܡM[2\s3ruNia3NI9Dzc.hőP-Vuwb z4D},ll/I~b$_a?o8MN=s'F8O XWWT3}ubB+"M~7]MD</F=ERKo4Wq-0WFVII$N+m%el$} W=M!Hdr YyZ ΟH=>ZDy6xrK.YΘ]Rqi!:XK: O#@GnisgYҀ+tJ]Ǔ/m#IxdeJe3cȲю,iu8;I$1VUW q)ّ }gl4S\YN6R lThXe KHadT%zr$7~+#S8qQh X1L!BHQEwMn͞ +ɧe@[ɔf!Gqv),ےԬf7ƜH nyZ3'j*S֐ G 'e%j/j.ޙqNoFIUbhKJJLKUʓT}iEA*ȩ9\sTA_$hL1~Ƭ '~cAsHSZħw65>ˉt혦Z)v;'1"@kk)jLǽ=Ml[ƩƩhk",SC%-=1k / R)!޽<5fC0E3[ EAZmQ6Q5Qj#iѦ&,kMI=}`@lf:an1ۤfL=Y/ ]ݫA*؆sTQUɳ@sleMm1mśQCtXC^A UAۮƸQTE 7Hg:Tp dWe&StO싰O뽐7⛳ŷxxzw3nr`.&w0OV*]> W>RT*E 7KgZTtkzoPтMY#6*'#ueX)^TEGJ&HRP&I9R5$kI޽=A`{5Ha*)yhR;0MRυ} F\QRwPOe0!O85YUJ:5YX7M(`)E*۴1WNL6\iH`Ad dz=YDM٤dS~Jﶝ@n64*5KKH&װ5,-+{Ȋ9OY)Ava)ۋҨ]Bx)q_]ɶ򒾓Z`kѰ$ҌWjEXb#6T.B9*%-s)!cg^|oĚgNS (K/^Nixַ?ݳo3?v뛄~pU/w_2/>PSyE!FkJReP1NZ.Cvc-I-I.I.I.Ki.jxR\R`"eE6lXFv22#Qcّw"?C¨_ ,˨2iu)_.:L^1om{}~9UzR]FOhj7yx$t!Q˖%ʨ~ET*Q6Tpr-PP);fT%Hz+^֔r4'I>[(_-NEl}&ިf ^kJD53uy>7)/@nM{ 7:};ĕwkt9a\N6#@r\y.pO_s%H6^hdM F-te(*:g%V|SKR,+\^< %$3TGܐ&%1---2BRb\(h|cEdQ.0, ӥ~\ȝP DȩIɲ;|+"Yfم +-տ~aSgqԵ2^:\NP(HY@7=҇Fo6h랴-Wuж}T:C{^QI3R6C4LMi4YM> lmEY&bPTjp9ꘞhᶧfYWe١f QpKtEZ{4%-K qf0>qf57B_Z=lNef* ܝ{qwDuMp{S#̎Wdzٞ&OpsEEZ% J֓`sJjkorlLMqfv*K3\ދs6'ct[ZAfu&-5bǵ, i%*g97) 97G ({D`C7"DFƤb f08f59b_1esf#SY:suʺszcsEVgǖ־oJ{2M;T4(4![njӟ_+YǏ.*!ŃW$||>@}T|/g,ҀP/Ur7J%zRS1Q@h1P=7U;rRVH]C7!Y^RT1 +m\odX"!s)EP]Qevic2ɽO9#Ǟe'-f&gPX)^UaMB8RD ]A@!d&U ~ Wb'y e1un)K9US|{R#8+}V&3 OݭZcйZU,56joȅ91 v5RjaF\6 b8q9_NXpB̨Ήe3š/+fXxQ6|?/bФZ̭/ x|ů\ωg{nԺ!G*閄9U9WSuK <'֎ggmr'i>O5&fa|I3;M˯;WڱopV;VI췓G8;ܨ3t[t^ce2F.(52LUC br-[:7O9T1$v}m^2+;X*i>IN,1+f"oDvG&+#M"?"O&,bo~ȁÝhoG]CdEe]U\\S3t”/3_P"<%@٬ײMlVUw!zX3nDIe*>8tO)FiE'_mܖf84BF5:ckYZO%eW55g-PW_=+j-,TUօN5?zp|v̋ z%;5LSWBuZgs/G Ul.只0P S択tWjiXuu/.yad[C?>(T"VtMcݲ^*r{!XQ6_QUYn:y^'Ӕk"+60^ l~9 zekRY*\ p:]Ҕ"k>b`j]Ңl!)ķ+e~C,kVެF{f< %N5?)e4_ɭh.6z @:ڣ͝.$ܴV7 5\\{*[CF_<\LpTGFzcMkϾ{ݣA>k"G$}615`WoIG{“ f7}Fln&j׽?_}}ݨݍ uDVEKJlptFlv+=3|/ ׍6[-N6rZnT&Z{j|7z4?y\?sjk=lqٗ`/9#\<OItZӛ.^,o.轃?! ox/֏Q:[?NRuZ۫ 9;?kޟ͇UwuDྍn8osυ߁V[ag຾I8ˍ//~/6ܘ&] +OĴ2?Rv[͑:a8 s$w${$$K455dr[/~3MOyE8ZR0U ~(+òa˲"/E~,+ڏtS,?h]&_b/^1eC߽ Q;ZUڱe TG|I5f`Ab C5-W:zI#kV3ly<\09"yܻ5q,- +~v;N<.1#$:B\ YH%izKs,+GIKǟH\g5/\omi8XߴM .U /Kᦫh9a]OMy"HI\{muӋDZ gʏq*U"`%pJ-׳6C; =uLD.0&be]CYF!|IpjQ!6yj%!owES>kH\y,S.Nפk+-,u};DJ2 "v]{\|-:-F!=[O/v^Ldcz]h_:?` z#/wKCaP>|-: }E4 ?K3E`i"%qRV]x`mp},QL> 1Ճ' ,x%b/ب2&ˤ26,l* ؅.u†ac1z(Nx1{w 'e o D3)Mfm 4@ %zIpk|2z}CͿQcYi5l"~\NZjhYmRӚ/\qRhLXbz,1A0+fl9[x՘T$3UV1h<Η3"e? ,WҙQc~e,Ahk(L%A& S A(&;a0 'rjz1iII:2d$EM6\#Kv@KvSbMКFv&ԕ)uAw=~7⊳Ӥ F9őY($XyǏ߽;x5 {2%j12[I=MX&e6$^NavThljj s_峔8, X˲Eqs? f/h\PDZ|@ peUTZ*8@]%exqw!Ћ-V t Z2b8mX8 ܇:EC|r ;3n/DM(l f{3hD(GȪ7SS+'GPuf ȴc(l_vp\r_<ʱ>r Us:T`.^ ރWQx>^FWcg*E|4͕y x5qrg 5Ln\Z'SVP9IZ ¯ӂ* 9ۄ P3y$ߔEҎv[%.lﬤ;!Wf#-cŻUAjѸ+WMp=i7^OxTyTEc,2!SW7VπyTzTwkѨn09rE#>9bp/W.G9rMoEHVٷ m=KR Gk ̓}lnYx&tFu:S+uw&PZrqʥ)a; ʌbSZW0pMX;[ʱ/ iiHF彩Zp}*iPr8g¶:9Exʉ_̀!=TiGľaI#[kT:<R:d(\O/ . Ird_c 6Ff3:r[o1Dw̔#).q JrJjQƽ5S#d$[(ʉ_41 z U%S9=C$>=m*G'%Y8q24(Qu/sgJAD|L,0dE:D3xjȐ UB*Ef$D-:!h2dm:=!U@%0M'ӓjԕQL 79NIpH2Cf/ln08N- RK~zX ;pX$˄|ZE5rV0mJ{88o[߅gr~*\Iֻ|=F~Z^?6ئV e[7 }t<^&K^j$=& .^/40*Ctrh鍙sk ]^v:S9sv6$XɹqtɭR8߹;#u5ORgJTr$y"9\:cP걧(U;qH1I2XﺢSo0U4 BQ&vy~T$γw2KuSPQ.]"m=[ z{G[(Gu΄`%~ukЛ-䔎qSr#:Wb?MNIX;9Uc#mχĴìsAyHj!_*YahrgG*'Y-!qx*XkRj"gjv"LM&+e@ՔZT&aহ4ٛTǹ^$pEMB+n`peI 7*ԔUN0M}HG[;{iC*b UʣзQ2O.Xe1z0y+Tz(yTu^e+z y*jx\RVTQ)QSCD T׊C=<)Ub\'I0*=Z+|P9[F?QJU+Ѯuyxvi(}RE]78S XOREkK_i)TzAW-1U.gPt.=Ϥ6S~sXOeJP+,U>]PNju_Yݠ@:=ԩr:~sѥs=7PLawMbIl' rߒJϜ]@ջe0Aj#|YH<&AUxX`_vD wS$y~I2VeF|/I:S9yuf%J!Iz) KQ(yTNDHR"uފ@eڭRJLy@ę&uHR"á[ґD*O9İC鷅3~r*OM>;r);#gV[r"TG웉&A3쏰pPEs wy/HC._K B& ȟucb=_[ƋwwoX_[{2Ǘ/SO[5xrssmڦ柌E 9YUglzV ß[ϓV*fG?B7򇽁e=ٽ1|qֳ@0C/ڎeVo]߂J0L/]ǀX,˸CՋAWⶋP[P͠m6= 8777`{jы#9x1̘W^@,xa/^ۧoVkgF#¬mѷ G^NNV.D^`a% e~Do P]a\5Ɲ!Bۼ3J½= + []=ڧZ|k !L2} Ioh9S x=r0dynTMW$`PMk"wƕ PTcF(MC{ID *^H7"PcJ8D(jC'z>F @uGPӉeqs {X~pa{iAZ@~mXas#cxh +tՋ$ Z*ד$&XՋ74M%=3] ֆ=l7#m[+=7vF/Z+- ?XBool3@h(8'}gm4Fմr)E.Ux#q Œh8[1}ҶRuN`˒hQXO*>O l B!@wcP-J'?t?mv. L_)+Irpc %BO 0o_ACO̊cˈ\ȓ|:ژDdL=z/'Ohg6 @s!QVCP*ؾ3e>fIfI+ypt \“',WF;'F%!^8Ã"\@)"X9^$x) :5rȼ<}H"&R]kSWnnڷHA5m;+8P vf _ԑ{ǿ %Q_!-LLF''Xn5 MX狞$vi3"WؒۿlyϟOƤe齶%\GIPX5K!=yh ?c{[)w+p8&kf: /"!f#;N:EBX=y+Lsw% mS?>ރaqΐO{#Á\MtP5P,\̊Qe?e,fS:<(#Rj|JF"ω{ |îd~[9zapڎusɻn?}YL/%L&`%kތ%]zOaӇOVH:Fi2e>Pa""|U%P; ];mD%>8r;o;'o_&>M҆,SڈMil@"aO])S8j41E uxd*-kaXwgoY'ɛ0k4shWzn?!rnHY R >F|qb,q@0~v{qoeM2eZOC^OON&`O@So/GRq[IH#.8⢱e1g0I{r?y0S$H@ m4w(CB'hY~zӧuFB5/O]& [;WI!^I=}7Ԓ\@C:YljumEwNK}C~$K*kh:jkJuC-m\YvBBi}UXtLx &Qig&6LF4H.-HF h6aM(,Ni6*'RjtDylCdf!df4>!! ihslf4g"Y#Z1,e@[:5!- `daxN{]gtg\-MxEH ~"r8Q,/M|Wk%jMY?A$xrBᢒbUí_n9w1L -(ƀ΃k xq<]Ǡq%ɤVu&RoX3鏒tIڥ#B`' (4 k+iƄ gEU<'2\E,:-}b_kUNd2Mk3L )Ӵ6TM2M[ZBl5ҕ 7v@fZ5z09Vq_۽4*++/n&N,dw@mNp+~TLO]ܵ"eE49$1dZq2C p(Z'9%OzW9$*!mZ@iItZZGERle9YB [G؁K+ߊthzE30:Z$ Qsy312ǾxnlCAp3u<ύy^܍Y+UeNܥm:U2 R +{ ^ąv j,4r&HٲxzNiЋ:0AGxF g!vW{X\'͛y5[9Wh7(`YAg;-%HT0UAYR,'Ј؅Pu{#^sz"0. AkAVcHe %¢$di(DŽ'A%bGV1Szɕ^ER5xs'2' v-\I0iJGB&^K72{V;%U?F4NJ#+MNܲߐg9oba3Y+Ih"?vɌ<Mx+dYm>gC=p=5#Fi}80$1f.|V=.Ip}dI(??%YQGQ%/VKb:*2[+/'Y G[7}ʎb &rl&H l.i"p|xKWXܧRPRҕ^ WPKy%e >*(+L6-:J(-LˆX@*(̘U / *Aa~6v%zq9+`AOh2tx;A{N4|i״o?ɒ'=T_B%9C=Ğ 0T7wwUba:xa8/x_떎V`trAm#e_F+}Y6Ld VVᵺfb=H:dXB7<6(_;ʼG<:lr9F:CKyGcd_)Yy&8k:B6ι}e- %5=7/x&ĢQ3@Bx0S~AVi6gj.AM5\nkHa.K֛ۗi!kBB0Uf[M!7+}iu]m+ɍC~OY*/иJi7V-5ziz?iW3:MFda)!9$R}˶P R_һL-Fz/>/M]sǢm @uW(&cFd`3WQdg& e/k-ERikLI8'ks{kOjKf<#^b\K7ƥ4. OR[08+&ᇞYFUck's6.z5hBtٰCK")Cl`-|+z]N*7%d3J'il"@ٓ%6Vj .E o9t,_ß .*􈆁;$1*Q*3{d6tCn|%_#1/PBDm=OܣUBS Sp€ Gis ̠{%H61h:.IW>V["9K]iˉԁQP=S$pKhf//KgDP`d:7\$+ ҚS=Pbaʓ~P:#pӎ^CeX#] / $Z{<]P%i,R6?x{vey﷾/}j?jn;XnP'2lJؾg4ɷ$)uIOYwf<ΘgTH u"oibΑ?mszcSSgķһJ k7lwXAavlOG^ȖϭJn*;+s׳5᝵[ ~guʎ؟c7_moc?Zj7%mq_)ߵn=5v ze7szQ+gpю<\ 6TUc״C5ZGG181@xJ̣3wn'=XD `Xim Wp V=LJ.n:{Eʪ|í2g,sVSNNjs ɢFwA?G h @dzmt/K?n=9]>xk8|c<ɟAk[ynKHKUݓBM-!DPhY&w&}08$A}VBNVgRd l g;\b6weNo &O?HBϻu"˗/{8' [o?Ï\Ae(h/ ܢ;=`ܴR;6|vae>#7tQl Gw'/Ln; 08o3Xa7|fAA4x\jߴ8߅^xވt8hlCs(x}~Dq0>^N'OE܉;D9%|A({}=zBoBO=1mS;]π#~^琟&?exy7wd>LW`0CxR15f ט3\ckp15f ט;B- =!c,g1]xZs|W(y5{32E ].|Z7MYզ)\զ)\զ)?EUB/KZ?m~FǕL?.eay 1D h$lB~0-y>?=N9_!`CuK'dLpR=k} H=bS1#fsl)) J`_.6n<2?NONM'MǦӓctzl:=i:=64NONMǦctz =GyOY~|6Od0Od0O&?M9ܔM9)G>eS|ʦnJҞ SXL 6cICrzPzl9=6LB8.?-x|r /?[p5Kry|ʚ5;53"yl/QpwAM+ yp+ yp+ ylo=[-<^ IP2l? ) d |ZMXz[Fu x5=Rx29v7"b!NsC:4z>Fr.LIA.'&v0SW\V5@$a  ӐT3"IiH$тGk.FIbWb,*! '(0sJ '$s^Fz7#;s㖓]RQw:0 H $ZK^Hb400Ć7'YS(D\,Cf*!r}$FLtk2n: tWRN

2>9C5N-qf+M)&f0Ť >i2P6MZʦI Iy2vRt 5@T Ξ^q<:ytxKq|INL A8NQyF#%y.%e@N;?qRFrLu2@Y-h|A 8KKfS#}rFLdf}r%YS3؊T:(_kuE@1'-&ZQ>iթ ykt3o NJ9be@v} W|p<E=)4<(b <8O"%eJ%%LUf;2N6Z+i}`yeV){N04"TPS)X$A)IJbb,DGHDҙ鉡Kg֦ crgxT#uniTq`$|L$i$E4Mq&)a@Y$m@vSfM yh7nMDZ_b'컪 Ib2JIPh5)KYGNIZqRF*&93TJk(2:dzL 52h*4XHSzNHDbjT$`H)#\nΞ%OnΞ%NnJΒ,7b6^sJK=qT#Bztd_)GXIZx*N25Utu$?`P+(]VG$~ό7=}FhK:tKQ^<Ӳ$9xSZ vs{@ !&C_ghl"R lT{MZP8_OwNez@xDlM!Uwi X}aH|pt>bwԧ#o[\ W,a=-~a5i=>>rMa->iwXQEN~;8U4vx[-rw?17Vys#Nƫp῿aQyJK2,Z} A{^ P{9MςR b*n@Y4PlN3k9p!UrVv,9!5x6@|{j(y\'niu=ýxN B@nF{}u[G20F nj%rNv`BNP$D/d=V<َXg ʦDqdIk,MbYB )@AO$KVch_mot{o?n`f|MAE n=0"4tܴ)yrO90i8j&~:bg'%n ~+^Ǯ.PW',ܐhtbu㍍T я"O yC.tި9bJ ms !!V0"G&\rxZ;TX[" KCnŸ${":f  .#"9un13MGF1 puԪq> rYqpoblq͑H8~[?]ǩ&}3M =k|i)1{dDNH]\KD-l#-=4貴jq,FTˀf SD㘘 pi~qZ p̲LkI!Z@i5g ,h )^W'v=t@@m;zN˺؟Kk7'@PǪޤ;þLm\CU*SȊsj|0J$f* د"JZK,/;J!IWt m[_V; ,|`B1l i %JUˌ}8U1 1qp7@!Gz޿cgJxsjŀ!)&Oq)\?v gXKu`o$w1kϗP README - Net::SSLeay Perl module for using OpenSSL 31.7.1999, Sampo Kellomaki Version: 1.05 1.05: fixed certificate gen at make test 1.04: overhaul for OpenSSL-0.9.3b (try http://www.openssl.org/) By popular demand... -------------------- perl -e 'use Net::SSLeay; \ ($p)=Net::SSLeay::get_https("www.openssl.org", 443, "/"); print $p' Prerequisites ------------- perl5.005 though anything starting from perl5.002 probably works. OpenSSL-0.9.3a (try http://www.openssl.org/) - nothing earlier works and I do not guarantee that anything later works either (but chances are good, if OpenSSL C API stabilizes at this version). If the newest version does not work, downgrade to OpenSSL-0.9.3a before asking questions. Or check if there is a newer version of this module available. Note: SSLeay is no loger supported. If you want to use Net::SSLeay with SSLeay or early versions of OpenSSL, use version 1.03. The support for SSLeay was dropped due to nobody maintaining it (all active work goes on with OpenSSL) and due to incompatible API changes in OpenSSL-0.9.2b. OpenSSL-0.9.1c support has also been dropped, version 1.03 was the last one to support that. Installing ---------- Unix: # build OpenSSL as per instructions in that package gunzip read README.Win32 You should also be able to use CPAN.pm to install this module if you like. For linking against RSAref add -rsaref flag like this: ./Makefile.PL -rsaref -t # builds and tests it, link against RSAref You must previously have built OpenSSL with RSAref support (which implies first building rsaref itself), I use the RSAglue method. File librsaref.a must be found in one of the locations searched by linker (-L switches). Usually this means that you have to rename rsaref.a to librsaref.a and copy it to suitable directory, e.g. /usr/local/ssl/lib. Problems (read this before sending mail) ---------------------------------------- If you send me a question or make a bug report, please remeber - Your platform and OS version (i386 Linux, Sparc Solaris, etc) (uname -a) - On Linux, please report glibc version as well) - Net::SSLeay version - OpenSSL version (/usr/local/ssl/bin/openssl version) - ANSI C compiler make and version (gcc -v) If build fails, - three compiler warnings are known to be emitted (due to lack of const in some places), one of them indicates a fatal bug in callback handling, but as I have not yet sorted it out, you'll simply have to ignore it - if you installed OpenSSL from some distribution, try getting a fresh copy from www.openssl.org and recompiling and installing it yourself - make sure you are not being confused by the fact that OpenSSL-0.9.3 changed the location of include files to /usr/local/ssl/include/openssl/* Consider deleting all bogus old headers - if using newer than supported OpenSSL, please downgrade to supported version - send full output of `make clean; perl Makefile.PL -t' If make test fails, please - one warning is known to be emitted between tests 4 and 5 (callback) - edit test.pl and set $trace=2 - send full output of `make clean; perl Makefile.PL -t' - send contents of sslecho.log If you have problems with a site, please - what site, what server software - does it reproduce with s_client (try with something like echo 'GET /' | /usr/local/ssl/bin/openssl s_client -connect www.bacus.pt:443 - does it reproduce with popular web browsers HP-UX is known to give some problems, please mail me or the mailing list so we can get these problems straightened. Hint: it has to do with dynamic loading. I have a report (schinder@pobox.com) of make test segfaulting on Linux-PPC. This still needs to be investigated. It seems perl5.004 (at least some versions) has bad xsub compiler which can make builds sometimes fail. Try upgrading to perl5.005 first. "Random number generator not seeded!!!" This warning indicates that randomize() was not able to read /dev/random or /dev/urandom, possibly because your system does not have them or they are differently named. You can still use SSL, but the encryption will not be as strong. Did you read the POD documentation (if you don't know what that is, just say `perldoc Net::SSLeay' or `more SSLeay.pm')? Are you sure you didn't confuse `Net::SSLeay' with `SSLeay' that comes with OpenSSL? My development environments are i686, Linux-2.0.37, gcc-2.7.2.1, perl5.005_03 i586, Linux-2.0.36, gcc-2.7.2.3, perl5.005_02 Unfortunately I do not have access to other systems so you are somewhat on your own. Everything compiles without a warning (except those mentioned above) on my systems. Check if there are any post release building hints in http://www.bacus.pt/Net_SSLeay/index.html Check that perl is finding your OpenSSL. If `make test' bombs, add following line to the test script that fails: $Net::SSLeay::trace = 2; and see what happens. You may also have to edit test.pl to make sure the debugging output gets printed. If `make test' prints lots of `connect: Connection refused...' errors, then sslecho.pl test server has died. It is supposed to be launched in the beginning of test.pl, but can fail if, e.g. port 1212 is taken or in TIMEWAIT state. Look also in ssleacho.log file for diagnostics. If you are really low on memory and the 1 MB tests fail, edit value of $mb variable in test.pl. If you get core dump, build your perl for debugging (add -g to ccflags, see INSTALL in perl distribution), build your SSLeay for debugging as well, add -g flag to Makefile.PL: make clean perl Makefile.PL -g make static make test_static gdb perl core # post mortem > bt # show stack trace gdb perl # run live with debugging # set break point in SSLeay.xs or in suspect function of OpenSSL > br XS_Net__SSLeay_connect > run yourscript.pl arg arg For gdb'ing make sure gdb finds all the relevant source code. This may mean that you must run perl and OpenSSL from the directories where the respective makefiles build them. You can also enable PR and PRN macros in SSLeay.xs and sprinkle even some more around the code to figure out what's happening. Some exotic configurations of perl may cause unstability: make sure OpenSSL uses the same malloc as perl. Recompile perl without threads. Try not using the PerlIO abstraction. If you need to tweak build for some platform, please let me know so I can fix it. Patches and gdb session dumps are also welcome. Recommended reading ------------------- ===> HTTP protocol specification. It applies 100% to HTTPS too and doing password authentication is explained there. <=== If you are newbie interested in grabbing web pages from https servers, please read HTTP documentation from http://www.w3c.org before asking trivial questions. That document also covers the basic-auth FAQ (URLs like http://user:pass@host). Do not ask questions about authentication before consulting the HTTP specification. HTTPS is just HTTP in SSL transport. If you are doing advanced stuff, and dont find documentation you need, please try to extrapolate from OpenSSL documentation (which unfortunately is quite sparse) and source code. If you run into build problems, especially regarding shared libraries, check your perl documentation, especially the perlxtut(1) man page, which gives excellent tutorial of the build process of XSUBs. perlxtut(1) perlxs(1) perlguts(1) perlcall(1) Say `perldoc Net::SSLeay' _NOW_! To download OpenSSL, try URL http://www.openssl.org Newer versions of this module can be found from CPAN/authors/id/SAMPO/, the home page is http://www.bacus.pt/Net_SSLeay/index.html Please send bug reports to the above address. General questions should be sent either to me or to the mailing list (subscribe by sending mail to openssl-users-request@openssl.org or using web interface at http://www.openssl.org/support/). --Sampo # CHECKSUMS file written on Fri Sep 10 14:17:14 1999 by mldistwatch (2.266) $cksum = { 'HTML-Summary-0.017.tar.gz' => { 'md5-ungz' => 'f28ac3a1da7e7d94a2f1f43b36d662ea', 'md5' => 'a7f29617a26a3f07b3f871751507d9ec', 'shortname' => 'html0017.tgz', 'size' => 21087 } }; HTML::Summary ============= Description ----------- The HTML::Summary module produces summaries from the textual content of web pages. It does so using the location heuristic, which determines the value of a given sentence based on its position and status within the document; for example, headings, section titles and opening paragraph sentences may be favoured over other textual content. A LENGTH option can be used to restrict the length of the summary produced. This distribution contains the HTML::Summary module, and some supporting modules. The full list of modules is: HTML::Summary Text::Sentence Lingua::JA::Jcode Lingua::JA::Jtruncate I have bundled these modules together because this is an early release, and I am still open to suggestions on changes to the structure / interface. The HTML::Summary module provides the ability to generate summaries of HTML pages. Copyright --------- Copyright (c) 1997 Canon Research Centre Europe (CRE). All rights reserved. Prerequisites ------------- HTML::TreeBuilder Installation ------------ > perl Makefile.PL > make ... and if you like > make test ... and then > make install > perldoc HTML::Summary Authors ------- Ave Wrigley Tony Rose Neil Bowers and the implementation is neither processing non-conforming SQL language nor processing conforming SQL language in a non-conforming manner, then an exception condition is raised: syntax error or access rule violation (if this situation occurs during dynamic ex- ecution of an SQL-statement, then the exception that is raised is syntax error or access rule violation in dynamic SQL statement; if the situation occurs during direct invocation of an SQL-statement, then the exception that is raised is syntax error or access rule violation in direct SQL statement). In the Access Rules, the term shall defines conditions that are required to be satisfied for the successful application of the General Rules. If any such condition is not satisfied when the General Rules are applied, then an exception condition is raised: syntax error or access rule violation (if this situation occurs during dynamic execution of an SQL-statement, then the exception that is raised is syntax error or access rule violation in dynamic SQL statement; if the situation occurs during direct invocation of an SQL-statement, then the exception that is raised is syntax error or access rule violation in direct SQL statement). In the Leveling Rules, the term shall defines conditions that are required to be true of SQL language for it to syntactically conform to the specified level of conformance. 3.3.4.4 Rule evaluation order A conforming implementation is not required to perform the exact sequence of actions defined in the General Rules, but shall achieve the same effect on SQL-data and schemas as that sequence. The term effectively is used to emphasize actions whose effect might be achieved in other ways by an implementation. The Syntax Rules and Access Rules for contained syntactic elements are effectively applied at the same time as the Syntax Rules and Access Rules for the containing syntactic elements. The General Rules for contained syntactic elements are effectively applied be- fore the General Rules for the containing syntactic elements. Where the precedence of operators is determined by the Formats of this International Standard or by parentheses, those operators are ef- fectively applied in the order specified by that precedence. Where the precedence is not determined by the Formats or by parentheses, effective evaluation of expressions is generally performed from 12 Database Language SQL X3H2-92-154/DBL CBR-002 3.3 Conventions left to right. However, it is implementation-dependent whether ex- pressions are actually evaluated left to right, particularly when operands or operators might cause conditions to be raised or if the results of the expressions can be determined without completely evaluating all parts of the expression. In general, if some syn- tactic element contains more than one other syntactic element, then the General Rules for contained elements that appear earlier in the production for the containing syntactic element are applied before the General Rules for contained elements that appear later. For example, in the production: ::= the Syntax Rules and Access Rules for , , and are ef- fectively applied simultaneously. The General Rules for are applied before the General Rules for , and the General Rules for are applied after the General Rules for both and . If the result of an expression or search condition can be deter- mined without completely evaluating all parts of the expression or search condition, then the parts of the expression or search condi- tion whose evaluation is not necessary are called the inessential parts. If the Access Rules pertaining to inessential parts are not satisfied, then the syntax error or access rule violation exception condition is raised regardless of whether or not the inessential parts are actually evaluated. If evaluation of the inessential parts would cause an exception condition to be raised, then it is implementation-dependent whether or not that exception condition is raised. 3.3.4.5 Conditional rules Conditional rules are specified with "If" or "Case" conventions. Rules specified with "Case" conventions include a list of con- ditional sub-rules using "If" conventions. The first such "If" sub-rule whose condition is true is the effective sub-rule of the "Case" rule. The last sub-rule of a "Case" rule may specify "Otherwise". Such a sub-rule is the effective sub-rule of the "Case" rule if no preceding "If" sub-rule in the "Case" rule has a true condition. 3.3.4.6 Syntactic substitution In the Syntax and General Rules, the phrase "X is implicit" indi- cates that the Syntax and General Rules are to be interpreted as if the element X had actually been specified. In the Syntax and General Rules, the phrase "the following is implicit: Y" indicates that the Syntax and General Rules are to be interpreted as if a syntactic element containing Y had actually been specified. Definitions, notations, and conventions 13 X3H2-92-154/DBL CBR-002 3.3 Conventions In the Syntax Rules and General Rules, the phrase "former is equiv- alent to latter" indicates that the Syntax Rules and General Rules are to be interpreted as if all instances of former in the element had been instances of latter. If a BNF nonterminal is referenced in a Subclause without speci- fying how it is contained in a BNF production that the Subclause defines, then Case: - If the BNF nonterminal is itself defined in the Subclause, then the reference shall be assumed to be the occurrence of that BNF nonterminal on the left side of the defining production. - Otherwise, the reference shall be assumed to be to a BNF pro- duction in which the particular BNF nonterminal is immediately contained. 3.3.4.7 Other terms Some Syntax Rules define terms, such as T1, to denote named or unnamed tables. Such terms are used as table names or correlation names. Where such a term is used as a correlation name, it does not imply that any new correlation name is actually defined for the denoted table, nor does it affect the scopes of any actual correlation names. An SQL-statement S1 is said to be executed as a direct result of executing an SQL-statement if S1 is the SQL-statement contained in a that has been executed, or if S1 is the value of an referenced by an contained in a that has been executed, or if S1 was the value of the that was associ- ated with an by a and that same is referenced by an contained in a that has been executed. 3.3.5 Descriptors A descriptor is a conceptual structured collection of data that defines the attributes of an instance of an object of a specified type. The concept of descriptor is used in specifying the seman- tics of SQL. It is not necessary that any descriptor exist in any particular form in any database or environment. Some SQL objects cannot exist except in the context of other SQL objects. For example, columns cannot exist except in tables. Those objects are independently described by descriptors, and the de- scriptors of enabling objects (e.g., tables) are said to include the descriptors of enabled objects (e.g., columns or table con- straints). Conversely, the descriptor of an enabled object is said to be included in the descriptor of an enabling object. 14 Database Language SQL X3H2-92-154/DBL CBR-002 3.3 Conventions In other cases, certain SQL objects cannot exist unless some other SQL object exists, even though there is not an inclusion relation- ship. For example, SQL does not permit an assertion to exist if the tables referenced by the assertion do not exist. Therefore, an as- sertion descriptor is dependent on or depends on zero or more table descriptors (equivalently, an assertion is dependent on or depends on zero or more tables). In general, a descriptor D1 can be said to depend on, or be dependent on, some descriptor D2. There are two ways of indicating dependency of one construct on another. In many cases, the descriptor of the dependent construct is said to "include the name of" the construct on which it is de- pendent. In this case "the name of" is to be understood as meaning "sufficient information to identify the descriptor of"; thus an implementor might choose to use a pointer or a concatenation of , , etc. Alternatively, the descrip- tor may be said to include text (e.g., , ). In such cases, whether the implementation includes ac- tual text (with defaults and implications made explicit) or its own style of parse tree is irrelevant; the validity of the descriptor is clearly "dependent on" the existence of descriptors for objects that are referred to in it. The statement that a column "is based on" a domain, is equivalent to a statement that a column "is dependent on" that domain. An attempt to destroy a descriptor may fail if other descriptors are dependent on it, depending on how the destruction is specified. Such an attempt may also fail if the descriptor to be destroyed is included in some other descriptor. Destruction of a descriptor results in the destruction of all descriptors included in it, but has no effect on descriptors on which it is dependent. 3.3.6 Index typography In the Index to this International Standard, the following conven- tions are used: - Index entries appearing in boldface indicate the page where the word, phrase, or BNF nonterminal was defined; - Index entries appearing in italics indicate a page where the BNF nonterminal was used in a Format; and - Index entries appearing in roman type indicate a page where the word, phrase, or BNF nonterminal was used in a heading, Function, Syntax Rule, Access Rule, General Rule, Leveling Rule, Table, or other descriptive text. Definitions, notations, and conventions 15 X3H2-92-154/DBL CBR-002 3.4 Object identifier for Database Language SQL 3.4 Object identifier for Database Language SQL Function The object identifier for Database Language SQL identifies the characteristics of an SQL-implementation to other entities in an open systems environment. Format ::= ::= ::= iso | 1 | iso 1 ::= standard | 0 | standard 0 ::= 9075 ::= ::= <1987> | <1989> | <1992> <1987> ::= 0 | edition1987 0 <1989> ::= <1989 base> <1989 package> <1989 base> ::= 1 | edition1989 1 <1989 package> ::= | ::= 0 | IntegrityNo 0 ::= 1 | IntegrityYes 1 <1992> ::= 2 | edition1992 2 ::= | | ::= 0 | Low 0 ::= 1 | Intermediate 1 ::= 2 | High 2 16 Database Language SQL X3H2-92-154/DBL CBR-002 3.4 Object identifier for Database Language SQL Syntax Rules 1) An of shall not be specified unless the is specified as <1992>. 2) The value of identifies the level at which conformance is claimed as follows: a) If specifies <1992>, then Case: i) , then Entry SQL level. ii) , then Intermediate SQL level. iii) , then Full SQL level. b) Otherwise: i) , then level 1. ii) , then level 2. 3) A specification of <1989 package> as implies that the integrity enhancement feature is not implemented. A specification of <1989 package> as implies that the integrity enhancement feature is implemented. Definitions, notations, and conventions 17 X3H2-92-154/DBL CBR-002 18 Database Language SQL X3H2-92-154/DBL CBR-002 4 Concepts 4.1 Data types A data type is a set of representable values. The logical represen- tation of a value is a . The physical representation of a value is implementation-dependent. A value is primitive in that it has no logical subdivision within this International Standard. A value is a null value or a non-null value. A null value is an implementation-dependent special value that is distinct from all non-null values of the associated data type. There is effectively only one null value and that value is a member of every SQL data type. There is no for a null value, although the keyword NULL is used in some places to indicate that a null value is desired. SQL defines distinct data types named by the following s: CHARACTER, CHARACTER VARYING, BIT, BIT VARYING, NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, DOUBLE PRECISION, DATE, TIME, TIMESTAMP, and INTERVAL. Subclause 6.1, "", describes the semantic properties of each data type. For reference purposes, the data types CHARACTER and CHARACTER VARYING are collectively referred to as character string types. The data types BIT and BIT VARYING are collectively referred to as bit string types. Character string types and bit string types are collectively referred to as string types and values of string types are referred to as strings. The data types NUMERIC, DECIMAL, INTEGER, and SMALLINT are collectively referred to as exact numeric types. The data types FLOAT, REAL, and DOUBLE PRECISION are col- lectively referred to as approximate numeric types. Exact numeric types and approximate numeric types are collectively referred to as numeric types. Values of numeric type are referred to as numbers. The data types DATE, TIME, and TIMESTAMP are collectively referred to as datetime types. Values of datetime types are referred to as datetimes. The data type INTERVAL is referred to as an interval type. Values of interval types are called intervals. Each data type has an associated data type descriptor. The contents of a data type descriptor are determined by the specific data type that it describes. A data type descriptor includes an identifica- tion of the data type and all information needed to characterize an instance of that data type. Concepts 19 X3H2-92-154/DBL CBR-002 4.1 Data types Each host language has its own data types, which are separate and distinct from SQL data types, even though similar names may be used to describe the data types. Mappings of SQL data types to data types in host languages are described in Subclause 12.3, "", and Subclause 19.1, "". Not every SQL data type has a corresponding data type in every host language. 4.2 Character strings A character string data type is described by a character string data type descriptor. A character string data type descriptor con- tains: - the name of the specific character string data type (CHARACTER or CHARACTER VARYING; NATIONAL CHARACTER and NATIONAL CHARACTER VARYING are represented as CHARACTER and CHARACTER VARYING, respectively); - the length or maximum length in characters of the character string data type; - the catalog name, schema name, and character set name of the character set of the character string data type; and - the catalog name, schema name, and collation name of the colla- tion of the character string data type. Character sets fall into three categories: those defined by na- tional or international standards, those provided by implemen- tations, and those defined by applications. All character sets, however defined, always contain the character. Character sets defined by applications can be defined to "reside" in any schema chosen by the application. Character sets defined by stan- dards or by implementations reside in the Information Schema (named INFORMATION_SCHEMA) in each catalog, as do collations defined by standards and collations and form-of-use conversions defined by implementations. The SQL_TEXT specifies the name of a character repertoire and implied form-of- use that can represent every character that is in and all other characters that are in character sets supported by the implementation. 4.2.1 Character strings and collating sequences A character string is a sequence of characters chosen from the same character repertoire. The character repertoire from which the characters of a particular string are chosen may be specified explicitly or implicitly. A character string has a length, which is the number of characters in the sequence. The length is 0 or a positive integer. 20 Database Language SQL X3H2-92-154/DBL CBR-002 4.2 Character strings All character strings of a given character repertoire are mutu- ally comparable, subject to the restrictions specified in Table 3, "Collating sequence usage for comparisons". A collating sequence, also known as a collation, is a set of rules determining comparison of character strings in a particular char- acter repertoire. There is a default collating sequence for each character repertoire, but additional collating sequences can be defined for any character repertoire. Note: A column may be defined as having a default collating se- quence. This default collating sequence for the column may be different from the default collating sequence for its character repertoire, e.g., if the is specified in the . It will be clear from context when the term "default collating sequence" is used whether it is meant for a column or for a character repertoire. Given a collating sequence, two character strings are identical if and only if they are equal in accordance with the comparison rules specified in Subclause 8.2, "". The collat- ing sequence used for a particular comparison is determined as in Subclause 4.2.3, "Rules determining collating sequence usage". The s NATIONAL CHARACTER are used to specify a character string data type with a particular implementation-defined character repertoire. Special syntax (N'string') is provided for representing literals in that character repertoire. A character set is described by a character set descriptor. A char- acter set descriptor includes: - the name of the character set or character repertoire, - if the character set is a character repertoire, then the name of the form-of-use, - an indication of what characters are in the character set, and - the name of the default collation of the character set. For every character set, there is at least one collation. A colla- tion is described by a collation descriptor. A collation descriptor includes: - the name of the collation, - the name of the character set on which the collation operates, - whether the collation has the NO PAD or the PAD SPACE attribute, and - an indication of how the collation is performed. Concepts 21 X3H2-92-154/DBL CBR-002 4.2 Character strings 4.2.2 Operations involving character strings 4.2.2.1 Operators that operate on character strings and return character strings is an operator, |, that returns the char- acter string made by joining its character string operands in the order given. is a triadic function, SUBSTRING, that returns a string extracted from a given string according to a given numeric starting position and a given numeric length. Truncation occurs when the implied starting and ending positions are not both within the given string. is a pair of functions for converting all the lower case characters in a given string to upper case (UPPER) or all the upper case ones to lower case (LOWER), useful only in connection with strings that may contain s. is a function that invokes an installation- supplied form-of-use conversion to return a character string S2 derived from a given character string S1. It is intended, though not enforced by this International Standard, that S2 be exactly the same sequence of characters as S1, but encoded according some dif- ferent form-of-use. A typical use might be to convert a character string from two-octet UCS to one-octet Latin1 or vice versa. is a function that returns its first string ar- gument with leading and/or trailing pad characters removed. The second argument indicates whether leading, or trailing, or both leading and trailing pad characters should be removed. The third argument specifies the pad character that is to be removed. is a function for changing each charac- ter of a given string according to some many-to-one or one-to-one mapping between two not necessarily distinct character sets. The mapping, rather than being specified as part of the function, is some external function identified by a . For any pair of character sets, there are zero or more translations that may be invoked by a . A translation is described by a translation descriptor. A translation descriptor includes: - the name of the translation, - the name of the character set from which it translates, - the name of the character set to which it translates, and - an indication of how the translation is performed. 22 Database Language SQL X3H2-92-154/DBL CBR-002 4.2 Character strings 4.2.2.2 Other operators involving character strings returns the length of a given character string, as an integer, in characters, octets, or bits according to the choice of function. determines the first position, if any, at which one string, S1, occurs within another, S2. If S1 is of length zero, then it occurs at position 1 for any value of S2. If S1 does not occur in S2, then zero is returned. uses the triadic operator LIKE (or the inverse, NOT LIKE), operating on three character strings and returning a Boolean. LIKE determines whether or not a character string "matches" a given "pattern" (also a character string). The char- acters '%' (percent) and '_' (underscore) have special meaning when they occur in the pattern. The optional third argument is a charac- ter string containing exactly one character, known as the "escape character", for use when a percent or underscore is required in the pattern without its special meaning. 4.2.3 Rules determining collating sequence usage The rules determining collating sequence usage for character strings are based on the following: - Expressions where no columns are involved (e.g., literals, host variables) are by default compared using the default collating sequence for their character repertoire. Note: The default collating sequence for a character repertoire is defined in Subclause 10.4, "", and Subclause 11.28, "". - When columns are involved (e.g., comparing two columns, or com- paring a column to a literal), by default the default collating sequence of the columns involved is used so long as the columns have the same default collating sequence. - When columns are involved having different default collating sequences, explicit specification of the collating sequence in the expression is required via the when the expression participates in a comparison. - Any explicit specification of collating sequence in an expres- sion overrides any default collating sequence. To formalize this, s effectively have a coercibility attribute. This attribute has the values Coercible, Implicit, No collating sequence, and Explicit. s with the Coercible, Implicit, or Explicit attributes have a collating sequence. Concepts 23 X3H2-92-154/DBL CBR-002 4.2 Character strings A consisting of a column reference has the Implicit attribute, with collating sequence as defined when the column was created. A consisting of a value other than a column (e.g., a host variable or a literal) has the Coercible attribute, with the default collation for its char- acter repertoire. A simply containing a has the Explicit attribute, with the collating sequence specified in the . Note: When the coercibility attribute is Coercible, the collating sequence is uniquely determined as specified in Subclause 8.2, "". The tables below define how the collating sequence and the co- ercibility attribute is determined for the result of any monadic or dyadic operation. Table 1, "Collating coercibility rules for monadic operators", shows the collating sequence and coercibility rules for monadic operators, and Table 2, "Collating coercibil- ity rules for dyadic operators", shows the collating sequence and coercibility rules for dyadic operators. Table 3, "Collating se- quence usage for comparisons", shows how the collating sequence is determined for a particular comparison. _____Table_1-Collating_coercibility_rules_for_monadic_operators____ Operand Coercibility Result Coercibility _____and_Collating_Sequence_____ _____and_Collating_Sequence___ | Collating | Collating | |_Coercibility______Sequence______|_Coercibility______Sequence_____| | | | | Coercible | default | Coercible | default | | | | | | | Implicit | X | Implicit | X | | | | | | | Explicit | X | Explicit | X | | | | | | |_______No_collati|g_sequence_____|______No_collatin|_sequence_____| | | | | | _____Table_2-Collating_coercibility_rules_for_dyadic_operators_____ Result Coercibility Operand 1 Coercibility Operand 2 Coercibility and Collating _and_Collating_Sequence _and_Collating_Sequence ___Sequence___ | Collating | Collating | Col|ating |_Coercibility_Sequence__|_Coercibility_Sequence__|__CoercibilitySe|uence | | | | | Coercible | default | Coercible | default | Coercible| def|ult | | | | | | | | Coercible | default | Implicit | Y | Implicit | Y | | | | | | | | | Coercible | default | No collati|g sequence | No colla|ing | sequence 24 Database Language SQL X3H2-92-154/DBL CBR-002 4.2 Character strings _Table_2-Collating_coercibility_rules_for_dyadic_operators_(Cont.)_ Result Coercibility Operand 1 Coercibility Operand 2 Coercibility and Collating _and_Collating_Sequence _and_Collating_Sequence ___Sequence___ | Collating | Collating | Col|ating |_Coercibility_Sequence__|_Coercibility_Sequence__|__CoercibilitySe|uence | | | | | Coercible | default | Explicit | Y | Explicit | Y | | | | | | | | | Implicit | X | Coercible | default | Implicit | X | | | | | | | | | Implicit | X | Implicit | X | Implicit | X | | | | | | | | | Implicit | X | Implicit | Y /= X | No colla|ing | sequence | Implicit | X | No collati|g sequence | No collating | | | | | | sequence | | | | | | | | Implicit | X | Explicit Y | Explicit Y | | | | | | | No collati|g sequence | Any, | Any | No colla|ing | except sequence Explicit | No collating sequence | Explicit | X | Explicit X | | | | | | | Explicit X | Coercible | default | Explicit | X | | | | | | | | Explicit | X | Implicit | Y | Explicit | X | | | | | | | | | Explicit | X | No collati|g sequence | Explicit | X | | | | | | | | | Explicit | X | Explicit X | Explicit | X | | | | | | | | Explicit | X | Explicit | Y /= X | Not permi|ted:| ____________________________________________________invalid_syntax_ |__________Ta|le_3-Collat|ng_sequence_|sage_for_co|parisons________| Comparand 1 Comparand 2 Coercibility and Coercibility and _Collating_Sequence _Collating_Sequence | | | Collating Sequence | | Collatin| Collatin| Used For The | |_CoercibilitSequence|_CoercibilitSequence|__Comparison____________| | | | | | Coercible| default | Coercible| default | default | | | | | | | | Coercible| default | Implicit | Y | Y | | | | | | | | Coercible| default | No co|lating | Not permitted: invalid| sequence syntax | Coercible| default | Explicit Y | Y | | | | | | Concepts 25 X3H2-92-154/DBL CBR-002 4.2 Character strings ______Table_3-Collating_sequence_usage_for_comparisons_(Cont.)_____ Comparand 1 Comparand 2 Coercibility and Coercibility and _Collating_Sequence _Collating_Sequence | | | Collating Sequence | | Collatin| Collatin| Used For The | |_CoercibilitSequence|_CoercibilitSequence|__Comparison____________| | | | | | Implicit | X | Coercible| default | X | | | | | | | | Implicit | X | Implicit | X | X | | | | | | | | Implicit | X | Implicit | Y /= X | Not permitted: invalid| syntax | Implicit | X | No co|lating | Not permitted: invalid| | | | seq|ence | syntax | | | | | | | | Implicit | X | Explicit Y | Y | | | | | | | No co|lating | Any | Any | Not permitted: invalid| sequence except syntax Explicit | No collating | Explicit | X | X | | sequence | | | | | | | | | | Explicit X | Coercible| default | X | | | | | | | Explicit | X | Implicit | Y | X | | | | | | | | Explicit | X | No co|lating | X | sequence | Explicit | X | Explicit X | X | | | | | | | Explicit | X | Explicit | Y /= X | Not permitted: invalid| ____________________________________________syntax_________________ |For n-adic|operation| (e.g., ) with operands X1, | X2, . . . , n , the collating sequence is effectively determined by considering X1 and X2, then combining this result with X3, and so on. 4.3 Bit strings A bit string is a sequence of bits, each having the value of 0 or 1. A bit string has a length, which is the number of bits in the string. The length is 0 or a positive integer. A bit string data type is described by a bit string data type de- scriptor. A bit string data type descriptor contains: - the name of the specific bit string data type (BIT or BIT VARYING); and 26 Database Language SQL X3H2-92-154/DBL CBR-002 4.3 Bit strings - the length of the bit string data type (in bits). 4.3.1 Bit string comparison and assignment All bit strings are mutually comparable. A bit string is identical to another bit string if and only if it is equal to that bit string in accordance with the comparison rules specified in Subclause 8.2, "". Assignment of a bit string to a bit string variable is performed from the most significant bit to the least significant bit in the source string to the most significant bit in the target string, one bit at a time. 4.3.2 Operations involving bit strings 4.3.2.1 Operators that operate on bit strings and return bit strings is an operator, |, that returns the bit string made by concatenating the two bit string operands in the order given. is a triadic function identical in syntax and semantics to except that the first argument and the returned value are both bit strings. 4.3.2.2 Other operators involving bit strings returns the length (as an integer number of octets or bits according to the choice of function) of a given bit string. determines the first position, if any, at which one string, S1, occurs within another, S2. If S1 is of length zero, then it occurs at position 1 for any value of S2. If S1 does not occur in S2, then zero is returned. 4.4 Numbers A number is either an exact numeric value or an approximate numeric value. Any two numbers are mutually comparable to each other. A numeric data type is described by a numeric data type descriptor. A numeric data type descriptor contains: - the name of the specific numeric data type (NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, or DOUBLE PRECISION); - the precision of the numeric data type; Concepts 27 X3H2-92-154/DBL CBR-002 4.4 Numbers - the scale of the numeric data type, if it is an exact numeric data type; and - an indication of whether the precision (and scale) are expressed in decimal or binary terms. 4.4.1 Characteristics of numbers An exact numeric value has a precision and a scale. The precision is a positive integer that determines the number of significant digits in a particular radix (binary or decimal). The scale is a non-negative integer. A scale of 0 indicates that the number is an integer. For a scale of S, the exact numeric value is the integer value of the significant digits multiplied by 10-S. An approximate numeric value consists of a mantissa and an expo- nent. The mantissa is a signed numeric value, and the exponent is a signed integer that specifies the magnitude of the mantissa. An approximate numeric value has a precision. The precision is a posi- tive integer that specifies the number of significant binary digits in the mantissa. The value of an approximate numeric value is the mantissa multiplied by 10exponent. Whenever an exact or approximate numeric value is assigned to a data item or parameter representing an exact numeric value, an approximation of its value that preserves leading significant dig- its after rounding or truncating is represented in the data type of the target. The value is converted to have the precision and scale of the target. The choice of whether to truncate or round is implementation-defined. An approximation obtained by truncation of a numerical value N for an T is a value V representable in T such that N is not closer to zero than the numerical value of V and such that the absolute value of the difference between N and the numer- ical value of V is less than the absolute value of the difference between two successive numerical values representable in T. An approximation obtained by rounding of a numerical value N for an T is a value V representable in T such that the absolute value of the difference between N and the nu- merical value of V is not greater than half the absolute value of the difference between two successive numerical values repre- sentable in T. If there are more than one such values V, then it is implementation-defined which one is taken. All numerical values between the smallest and the largest value, inclusive, representable in a given exact numeric type have an approximation obtained by rounding or truncation for that type; it is implementation-defined which other numerical values have such approximations. 28 Database Language SQL X3H2-92-154/DBL CBR-002 4.4 Numbers An approximation obtained by truncation or rounding of a numerical value N for an T is a value V repre- sentable in T such that there is no numerical value representable in T and distinct from that of V that lies between the numerical value of V and N, inclusive. If there are more than one such values V then it is implementation- defined which one is taken. It is implementation-defined which numerical values have approximations obtained by rounding or trun- cation for a given approximate numeric type. Whenever an exact or approximate numeric value is assigned to a data item or parameter representing an approximate numeric value, an approximation of its value is represented in the data type of the target. The value is converted to have the precision of the target. Operations on numbers are performed according to the normal rules of arithmetic, within implementation-defined limits, except as provided for in Subclause 6.12, "". 4.4.2 Operations involving numbers As well as the usual arithmetic operators, plus, minus, times, divide, unary plus, and unary minus, there are the following func- tions that return numbers: - (see Subclause 4.2.2, "Operations involv- ing character strings", and Subclause 4.3.2, "Operations involv- ing bit strings") takes two strings as arguments and returns an integer; - (see Subclause 4.2.2, "Operations involving character strings", and Subclause 4.3.2, "Operations involv- ing bit strings") operates on a string argument and returns an integer; - (see Subclause 4.5.3, "Operations involving datetimes and intervals") operates on a datetime or interval argument and returns an integer. 4.5 Datetimes and intervals A datetime data type is described by a datetime data type descrip- tor. An interval data type is described by an interval data type descriptor. A datetime data type descriptor contains: - the name of the specific datetime data type (DATE, TIME, TIMESTAMP, TIME WITH TIME ZONE, or TIMESTAMP WITH TIME ZONE); and Concepts 29 X3H2-92-154/DBL CBR-002 4.5 Datetimes and intervals - the value of the