RaschSampler/0000755000175100001440000000000012554164221012656 5ustar hornikusersRaschSampler/src/0000755000175100001440000000000011774617732013462 5ustar hornikusersRaschSampler/src/RaschSampler.f900000744000175100001440000004663511774617732016405 0ustar hornikuserssubroutine sampler(n,k,inputmat,tfixed,burn_in,n_eff,step,seed,outputvec,ier) ! sample binary matrices with given marginals. ! input: n = number of rows (integer*4) ! k = number of columns (integer*4) ! inputmat: input binary matrix (n*k) (integer*4) ! tfixed: main diagonal is fixed if true; has only effect if n.eq.k ! step: if the matrix #i is an effective matrix, then the next effective matrix is #(i+step) ! burn_in: number of burn_in matrices in units of step ! n_eff: number of effective matrices, to be written in the output vector ! I/O seed (integer*4). Seed of the random generator ! if seed <> 0: seed is unaltered and |seed| is used as the seed of the random generator. ! if seed.eq.0: a seed is generated from the system clock, and its value is returned. ! ATTENTION: currently seed.eq.0 is deactivated and only seed<>0 is allowed ! (see lines 103-113) (rh 2006-10-25) ! output:outputvec (integer*4 vector): n_eff binary matrices, stored bitwise in the following way: ! if(k<=32) one row of a matrix is stored in one position (number) of four bytes, the first element ! is bit 0, the second is bit 1, etc. ! if(32 nmax = 1024 = 2**10 !!!!!! changed to 2**12 in 0.8-3 ! 2: k > kmax = 64 = 2**6 !!!!!! changed to 2**7 in 0.8-3 ! 4: n_eff > n_effmax = 8191 = 2**13 - 1 ! 8: burn_in < 0 ! 16: step <= 0 ! 1-31: sums of the foregoing codes ! 32: input matrix contains values other than one or zero ! 64: the input matrix has a Guttman form ! if tfixed and n.eq.k, the main diagonal is condidered as fixed. ! if tfixed and n!=k, the case is treated as a rectangular matrix without constraints ! the Markov chain transition matrix used is Q**step integer(kind=4), dimension(n*(k+31)/32*(n_eff+1)),intent(out)::outputvec integer(kind=4), intent(out) :: ier integer(kind=4), intent(in) :: n,k,burn_in,n_eff,step integer(kind=4), dimension(n,k),intent(in) :: inputmat integer(kind=4) :: seed logical(kind=4), intent(in) :: tfixed character(len=10) :: timevec !integer(kind=4),parameter :: nmax=1024,kmax=64,n_effmax=8191 !!!!!! kmax changed to 2**7 nmax changed to 2**12 integer(kind=4),parameter :: nmax=4096,kmax=128,n_effmax=8191 integer(kind=4), allocatable :: a(:),b(:),aold(:),bold(:),a_kol(:),b_kol(:),iwork(:) integer(kind=4) :: i,j,m,kk2,kk3,it,krand,k2,k3,nhex,k2old,k3old,nhexold integer(kind=4) :: x1,x2 ! x1 and x2 are reserved for the random generator integer(kind=4) :: words_per_row, offset integer(kind=4),allocatable :: hexmat(:,:),hexmatold(:,:) real(kind=4) :: tijd logical(kind=1),parameter :: t=.true.,f=.false. logical(kind=1),allocatable :: t_in(:,:) logical(kind=1),dimension(3,3) :: hexa,hexb logical(kind=1),allocatable :: twa(:),twb(:),tw(:),tng(:),tngold(:),col1(:),col2(:) !tng = non-guttman pair logical(kind=1) :: t_eff,tfixnow data hexa/f,f,t,t,f,f,f,t,f/,hexb/f,t,f,f,f,t,t,f,f/ !check error codes 1, 2 4, 8 and 16 ier=0 if(n.le.0 .or. n.gt.nmax)ier=ier+1 if(k.le.0 .or. k.gt.kmax)ier=ier+2 if(n_eff.le.0 .or. n_eff.gt.n_effmax)ier=ier+4 if(burn_in.lt.0)ier=ier+8 if(step.le.0)ier=ier+16 if(ier.ne.0)return ! allocate the necessary arrays kk2=k*(k-1)/2 allocate(t_in(n,k)) allocate(a(kk2),b(kk2),aold(kk2),bold(kk2),a_kol(kk2),b_kol(kk2)) allocate(twa(n),twb(n),tw(n),tng(kk2),tngold(kk2),col1(n),col2(n)) allocate (iwork(n)) tfixnow=tfixed if(n.ne.k)tfixnow=.false. if(tfixnow)then kk3=kk2*(k-2)/3 allocate(hexmat(3,kk3),hexmatold(3,kk3)) endif ! check error code 32 ier=count(inputmat.gt.1)+count(inputmat.lt.0) if(ier.ne.0)then ier=32 return endif ! copy input matrix to t_in !!!t_in=inputmat !!!replaced by t_in=btest(inputmat,0) if(tfixnow) then forall (i=1:n) t_in(i,i)=f endif ! !select seed for random number generation ! if(seed.eq.0)then ! call date_and_time(TIME=timevec) ! read(timevec,'(f10.3)')tijd ! x1=tijd*1000. ! x1=0. ! x1=x1+536870911 ! =x1 + 2**29 - 1 ! seed=x1 ! else ! x1=abs(seed) ! endif x1=abs(seed) ! added from upper else clause (to be removed if random seed enabled) x2=x1 call rand1(x1) krand=1+mod(k,25) ! KRAND selects a random generator (used in RAND_INTEGER42) !fill the arrays a_kol, b_kol, a, b, and b_pairs for the input matrices t_in !determine the weight k2 (= #neighbour column pairs of the input matrix) it=0 do i=2,k do j=1,i-1 it=it+1 a_kol(it)=i b_kol(it)=j call findab(t_in(1:n,i),t_in(1:n,j),i,j,a(it),b(it)) tng(it)=a(it)*b(it).gt.0 end do end do k2=count(tng(1:kk2)) k3=k2 if(tfixnow)then call hexagon if(nhex.gt.0)k3=k2+1 endif ! check on the Guttman condition (error code 64) if(k3.eq.0)then ier=64 return endif ! pack the input matrix and put it in the outputvector offset=0 ! offset is the number of words defined until now words_per_row=(k+31)/32 call pack_matrix(outputvec) ! offset is updated within the subroutine ! compute the total number of matrices to be computed n_tot=burn_in+n_eff ! do the sampling do i=1,n_tot t_eff=i.gt.burn_in do j=1,step ! generate step matrices before computing the statistic call rand_integer42(it,k3,x1,x2,krand) !{*** from here to ***} only applies to alternating hexagons if(k3.gt.k2.and.it.eq.k3)then ! there are restrictions on the main diagonal ! and there exists at least one alternating hexagon (k3>k2) ! an alternating hexagon has to be changed (it=k3) ! first save necessary elements for Metropolis-Hastings k2old=k2 k3old=k3 aold=a bold=b nhexold=nhex hexmatold(:,1:nhex)=hexmat(:,1:nhex) tngold=tng ! make a new matrix by switching one alternating hexagon call rand_integer42(it,nhex,x1,x2,krand) call make_matrix3(it) call update_pairs3(hexmat(1,it),hexmat(2,it),hexmat(3,it)) call update_pairs3(hexmat(2,it),hexmat(1,it),hexmat(3,it)) call update_pairs3(hexmat(3,it),hexmat(1,it),hexmat(2,it)) call hexagon k2=count(tng(1:kk2)) k3=k2+1 ! there is at least one alternating hexagon, vz, the one that just changed into its complement if(k3old.lt.k3) then ! check if process possibly remains in the same state (Metropolis-Hastings) call rand_integer42(m,k3,x1,x2,krand) if(m.gt.k3old)then ! process remains in the same state call make_matrix3(it) ! this restores the matrix k3=k3old k2=k2old a=aold b=bold nhex=nhexold hexmat(:,1:nhex)=hexmatold(:,1:nhex) tng=tngold endif endif cycle endif !***} call pick_a_pair(it) col1=t_in(1:n,a_kol(it)) col2=t_in(1:n,b_kol(it)) k2old=k2 k3old=k3 aold=a bold=b tngold=tng if(tfixnow)then nhexold=nhex hexmatold(:,1:nhex)=hexmat(:,1:nhex) endif call make_matrix(it) call update_pairs(a_kol(it),b_kol(it)) call update_pairs(b_kol(it),a_kol(it)) k2=count(tng(1:kk2)) k3=k2 if(tfixnow)then call hexagon if(nhex.gt.0)k3=k3+1 endif if(k3old.lt.k3)then ! apply Metropolis-Hastings call rand_integer42(m,k3,x1,x2,krand) if(m.gt.k3old)then ! process remains in the current state t_in(1:n,a_kol(it))=col1(1:n) t_in(1:n,b_kol(it))=col2(1:n) k2=k2old k3=k3old a=aold b=bold tng=tngold if(tfixnow)then nhex=nhexold hexmat(:,1:nhex)=hexmatold(:,1:nhex) endif endif endif end do ! if this is an 'effective' sample, pack it and store it in outputvec if(t_eff)call pack_matrix(outputvec) end do ! here ends the sampling procedure deallocate(a,b,aold,bold,a_kol,b_kol,iwork,twa,twb,tw,tng,tngold,col1,col2,t_in) if(tfixnow) deallocate(hexmat,hexmatold) contains subroutine pack_matrix(vec) integer(kind=4) vec(*) integer(kind=4) :: i,j,ib,ie,it,iw do i=1,n ib=1 do iw=1,words_per_row offset=offset+1 vec(offset)=0 ie=min(ib+31,k) it=-1 do j=ib,ie it=it+1 if(.not.t_in(i,j))cycle vec(offset)=ibset(vec(offset),it) end do ib=ie+1 end do end do end subroutine pack_matrix subroutine findab(ta,tb,i,j,a,b) !!!!! logical(kind=1):: ta(n),tb(n) logical(kind=1):: ta(n),tb(n),test(n) integer(kind=4)::a,b,i,j tw=(ta.neqv.tb) if(tfixnow)then tw(i)=.false. tw(j)=.false. endif test=ta.and.tw a=count(test) test=tb.and.tw b=count(test) !!!!! a=count(ta.and.tw) !!!!! b=count(tb.and.tw) end subroutine findab subroutine pick_a_pair(it) integer(kind=4),intent(out)::it integer(kind=4) ::i,m call rand_integer42(it,k2,x1,x2,krand) m=count(tng(1:it)) if(m.eq.it)return do i=it+1,kk2 if(.not.tng(i))cycle m=m+1 if(m.eq.it)then it=i return endif end do end subroutine pick_a_pair subroutine make_matrix(it) integer(kind=4),intent(in)::it integer(kind=4) ::m,i,j,ii,jj !!!!! logical(kind=1),allocatable :: test(:) logical(kind=1) :: test(n) ii=a_kol(it) jj=b_kol(it) if(a(it)*b(it).eq.1)then ! columns ii and jj contain a single tetrad. ! no sampling is necessary: the tetrad is complemented j=0 do i=1,n if(tfixnow)then if(i.eq.ii)cycle if(i.eq.jj)cycle endif if(t_in(i,ii).eqv.t_in(i,jj))cycle j=j+1 t_in(i,ii)=t_in(i,jj) t_in(i,jj)=.not.t_in(i,ii) if(j.eq.2)return end do endif do ! a random binomial operation is applied ! copy the two selected colums in the logical vectors twa and twb twa(1:n)=t_in(1:n,ii) twb(1:n)=t_in(1:n,jj) m=a(it)+b(it) call combine(m,a(it),iwork,tw) ! generate the random combination of a(it) objets out of m ! insert the combination into the vectors twa and twb j=0 do i=1,n if(tfixnow)then if(i.eq.ii)cycle if(i.eq.jj)cycle endif if(twa(i).eqv.twb(i))cycle j=j+1 if(tw(j))then twa(i)=.true. twb(i)=.false. else twa(i)=.false. twb(i)=.true. endif if(j.eq.m)exit end do ! check whether matrix has changed !!!!! !!!!! test=twa test=twa(1:n).eqv.t_in(1:n,ii) m=count(test) !!!!! m=count(twa(1:n).eqv.t_in(1:n,ii)) if(m.ne.n)exit ! the matrix has changed end do ! the matrix has not changed; a new combination is tried. ! the changes are inserted in the matrix t_in t_in(1:n,ii)=twa(1:n) t_in(1:n,jj)=twb(1:n) end subroutine make_matrix subroutine make_matrix3(it) integer(kind=4), intent(in)::it integer(kind=4) ::i,j,ii,jj do i=1,2 ii=hexmat(i,it) do j=i+1,3 jj=hexmat(j,it) t_in(ii,jj)=.not.t_in(ii,jj) t_in(jj,ii)=.not.t_in(jj,ii) end do end do end subroutine make_matrix3 subroutine combine(n,k,ix,tx) ! generate a random combination of k objects out of n ! the result is stored in the logical n-vector tx ! ix is a working array integer(kind=4) ::n,k,kk,ii,iu,nnu integer(kind=4) ::ix(n) logical(kind=1) ::tx(n) ix(1:n)=(/(ii,ii=1,n)/) tx(1:n)=.false. nnu=n kk=min(k,n-k) do ii=1,kk call rand_integer42(iu,nnu,x1,x2,krand) tx(ix(iu))=.true. if(iu.lt.nnu)ix(iu:nnu-1)=ix(iu+1:nnu) nnu=nnu-1 end do if(kk.lt.k)tx=.not.tx end subroutine combine subroutine update_pairs(i,j) integer(kind=4),intent(in) :: i,j integer(kind=4):: jt,m do m=1,i-1 if(m.eq.j)cycle jt=(i-1)*(i-2)/2+m call findab(t_in(1:n,i),t_in(1:n,m),i,m,a(jt),b(jt)) tng(jt)=a(jt)*b(jt).gt.0 end do do m=i+1,k if(m.eq.j)cycle jt=(m-1)*(m-2)/2+i call findab(t_in(1:n,m),t_in(1:n,i),m,i,a(jt),b(jt)) tng(jt)=a(jt)*b(jt).gt.0 end do end subroutine update_pairs subroutine update_pairs3(i,j,l) integer(kind=4),intent(in) :: i,j,l integer(kind=4):: jt,m do m=1,i-1 if(m.eq.j)cycle if(m.eq.l)cycle jt=(i-1)*(i-2)/2+m call findab(t_in(1:n,i),t_in(1:n,m),i,m,a(jt),b(jt)) tng(jt)=a(jt)*b(jt).gt.0 end do do m=i+1,k if(m.eq.j)cycle if(m.eq.l)cycle jt=(m-1)*(m-2)/2+i call findab(t_in(1:n,m),t_in(1:n,i),m,i,a(jt),b(jt)) tng(jt)=a(jt)*b(jt).gt.0 end do end subroutine update_pairs3 subroutine hexagon logical(kind=1),dimension(3,3):: c integer(kind=4),dimension(3) :: v integer(kind=4) :: i,j,m nhex=0 do i=1,n-2 v(1)=i do j=i+1,n-1 if(t_in(i,j).eqv.t_in(j,i))cycle v(2)=j do m=j+1,n v(3)=m c=t_in(v,v) if(all(c.eqv.hexa).or.all(c.eqv.hexb))then nhex=nhex+1 hexmat(1:3,nhex)=v endif end do end do end do end subroutine hexagon subroutine rand1(x) ! see Ripley, B.D., Stochastic Simulation. New-York:Wiley, 1987, pp. 37-39. (generator 4) integer(kind=4) x,p,q,r,a,b,c data a,b,c,p/127773,16807,2836,2147483647/ ! generator 4 q=x/a r=mod(x,a) x=b*r-c*q if(x.lt.0)x=x+p end subroutine rand1 subroutine rand_integer42(iu,a,x1,x2,k) ! draw a uniformly distributed integer from {1, 2, ..., A} ! the rejection rate is (P - BOUND)/P ! where P equals 2**31-2 (= the number of different values RAND1 can take) ! and BOUND equals A*(P/A) ! example: for A = 1000, the rejection rate is 3.008E-7 ! Notice that zero as result of the draw leads to rejection (see !***) ! The routine calls RAND2 with the K-th set of coefficients integer(kind=4) iu,a,x1,x2,bound,k integer(kind=4),parameter :: p = 2147483646 ! P is the number of values X can take: 2**31 - 2, ! because 0 is excluded bound=(p/a)*a do call rand2(x1,x2,k) if(x2.eq.0)cycle if(x2.le.bound)exit !*** LE not LT end do iu=1+mod(x2,a) end subroutine rand_integer42 subroutine rand2(x1,x2,k) ! Random number generators MRG (multiple recursive generator) ! Lih-Yuan Deng and Dennis K.J. Lin (2000).Random Number Generation for the New Century, ! The American Statistician, vol 54, no. 2, pp. 145-150 ! To compute the formulae, the method in the referenced article is used. B(K) is the table as published ! A(K)=P/B(K) and C(K)=P-A(K)*B(K), P = 2**31 -1 integer (kind=4)::k integer (kind=4)::x1,x2,p,q,r,y integer (kind=4), dimension(25)::b,c,a data b/26403,33236,36673,40851,43693,27149,33986,36848,40961, & 44314,29812,34601,37097,42174,44530,30229,36098,37877, & 42457,45670,31332,36181,39613,43199,46338/ data a/81334,64613,58557,52568,49149,79099,63187,58279,52427, & 48460,72034,62064,57888,50919,48225,71040,59490,56696, & 50580,47021,68539,59353,54211,49711,46343/ data c/22045, 5979,22786,28279,16390,24896,10265,19055,21300, & 27207, 6039, 7183,12511,25741,24397,15487,13627, 9255, & 8587,34577,19699,32754,23304,18158,41713/ data p/2147483647/ q=x1/a(k) r=mod(x1,a(k)) y=b(k)*r-c(k)*q if(y.ge.x2-p)then y=y-x2 else y=y+(p-x2) endif if(y.lt.0)y=y+p x1=x2 x2=y end subroutine rand2 end subroutine sampler subroutine unpack(vec,words_per_row,t_out,n,k) integer(kind=4) offset,words_per_row,n,k integer(kind=4),dimension(n*words_per_row)::vec integer(kind=4) i,j,it,ib,ie,ioff ! matrix t_in is not needed !logical(kind=1),dimension(n,k) :: t_in integer(kind=4),dimension(n,k) :: t_out t_out=0 ! intialize t_out ioff=0 do i=1,n ib=1 do iw=1,words_per_row ioff=ioff+1 ie=min(ib+31,k) it=-1 do j=ib,ie it=it+1 !t_in(i,j)=btest(vec(ioff),it) !replace the preceding statement by if(btest(vec(ioff),it)) t_out(i,j)=1 end do ib=ie+1 end do end do end subroutine unpack RaschSampler/NAMESPACE0000744000175100001440000000034612435114000014065 0ustar hornikusersuseDynLib(RaschSampler) import("stats") export(rsampler) export(rstats) export(rsctrl) export(rsextrobj) export(rsextrmat) export(phi.range) S3method(summary, RSctr) S3method(summary, RSmpl) S3method(summary, RSmplext) RaschSampler/data/0000755000175100001440000000000011774617732013604 5ustar hornikusersRaschSampler/data/xmpl.rda0000744000175100001440000000624711774617732015266 0ustar hornikusers W= l8@s'N8а?'/pиԀ.7J̧+>W,FLj`]#=+9v**W-wu0x|O ~a/9''VavC-{8+~;U|3.j=*^ҋ] .VNOĖq +DĆW컱+;UXݸ<pzHUĽ֠=M^jJn,Fěq`׸vsΫ|))ܕ8U~UL#3|Ͼ;bVfĽF1߷QdbyDy8=0.5Tz 3ʽz:JT/,(~T>feae6kxUOE^7V9)1,relfWqaY}Ƈ9fxYMYJFvn/cD1]G՝5bfXW8)wjouzJ-y 8*<~+5UfENYn]l.S0+>~r,~S2'/}+.}fޫfw[)}U_fŜ[UFΕ{WQd[ZGq<ڰ̮ʩx(Sfuq~өG ?d՜̇aseޫ;aR03h3~8G">ҳ]fag<{U~Y^Je:9ވ8fR.eDgٺuf*V1X.Jv(?3~Y.N?]`dxf3T33*9dkԠc܅2+7c<֛LU~bW=2U.Iw%G%h}3.7ï)bU,G6']`w7lbW3g\X3U?EfUDeJȖŨz;+};nSw̯jƽ/Gh[UqS$ÌV1*>C;ÍV3~Uh<3 VCSMjfU:Q(F7Y5w]Vs>=3jJ\ 'V T~Ul/|^f1:wdxٜF:x̫ =Wv2G"*,~Ʒ)NOYR;j?{X(FdSpcw\~OEuCJG#evl/˾3leTʜw{CeFYWVq]}wU}ի+F[5~=^tgΞνDUU{bxZ#Vg j-gϕYjV%ݳ8d[ƥ}lů|g9eOw&8)L#cDq]Ə6;WzEloG ‹8 +R-PgS*ltg~^wguzLՂN5Q{^嗶~~~|q)0_zfz57\v|.k\K?;i<%n6w%^1{gx$OA;^&r[XV˴Z}_{]Z7gi14^5Z\1{0iO}ډg;'cf7ny7Nivk|fj:шۍ3=Yb~cgN_h^9,,#]>V]tpkͦ_nj%5.4L" K[|Zݵs_OZ}V׭ΉӋR]^C{#m] ӛAs:bo߸KMtxTRLKx-ݵ{zlrhNj 7͇fxXV{;&_z_=4vNk|.%n[L;k'FxJv~kxbٝ4ƒ/X~#FOK󆃙-K5z'_Qg5>\floVFz8ązY3I^Hkn!ƚijМM i+ݿb%N4{Xd +oC§YTq-7ձS7DQn~Ӌn e[{npRO{tgItF~-V%_hח+O3V羯%˟}Yn/=}O|ZXf1:5KggR﫦I7ΖέW(0[̚5O{4x6߸osZgV ͆0[-hܛΌRM;_R|t8&lSkVq{YJGre_p[~¸8 /rmI{d~¶ .V.ĥ5s1~{o4g}gǦݧviwZkfcN$ 1I>HbէK^fuD|VŽj;!O5V[5~&ƅxxbV]g~f_~/ݷtn4dy[ˁSMo+eS܍1}_^z/ͭw$ŋ~u =yͻyٵ=KkO;W)6S<=4| jO=n}֞ٚIy+`=xf{lXJ0H}ΪqLwcyf8ڄmigk40S?PV;q9>c./~Dc_|£~ղZ_8353ktſ Ci ٴjP:ߔCwvל ^ts1Zheni[M,>M흼F_書Vbo<Ǎ31zۏ١fʱZMfF{hd]'$u'q_W%|>.:3fFM֗oͫqzXʥo[Uޙ: jZmot~nm۴~'Y#oW~_8ěpZ~yg뗵':˅0}O)z9#N͏bf_L\bZ}-ZNR]&TziigvLS;{_=-[-S4 c& GG ql,W1O-_Ը:|ҭ/OS4/U3k4ǵhmA1gI]fFWN볝L~^͘Ω}߄C1mnYZI׮{HCrj}I_J$-Z'͹S+qi>$tf|G:x_8T}%--}cvjzح߬e}scwnW>;cfw[ir^wv˿9/[|W]kbݜ7yhΦ5jqf:{cK{\ӥwÿ=䣆AxTz !zkgT?ͷ7.k v|b>&ayf}W1׊֦o`ߧtfj϶/pn틿x^w7kgikMuK|7YNF? udt߆TWΛ&wO8Ro/l94׋c۽+K=c-q>Z[÷vOgoGK->ȻfTrMToѴgz%?/_//>O84cysL]7KꐟRܚGI\[<;q$n_n1T;aѷIgYϓl73o\ byS hsͫimqz'FZ_j9^9>I+xQ?&j6L:O34}gj|_Ҍ^'>iek% qٷghE#k/\֬nqlwğ̭/Vj|^xQ'i}afi4MyK+z;`z^MoZjor wiiͨݥU7ݯݤ'yij0u;`_eiRk9k)bFz_9/̖8fs]mzK)qkXK;zǥ}.q%z3gir\7=WO4. _N47sYHf?Y{2ޤ~.VNX/~ݧ:աމ7&%xEknvEN&S)\;n1fi~ n^p)L_ܧ5c7ڃu۝A°XGʣ϶G1m_ԇj4[7t~iƘ~(wyqn/ԟbW}~)pm{Oyosy%&'MG߇.k8PK҃=[Vͷ! sK8 /}k~]m G{g?ko)r\gّ=/$}e˽̣ n&ݿ2ԟoK j.wf^W½?ms/jqi6]ȷ-\7c|A\Ifj6Vgkwqݬ 'ݵˍffqn ar[岸[PV/չw/qzYM1ǽkj:#iti⮾ϔ2yG1ZkܨB.+7aoSt@KFs /$ĵh3ь(6gե_4C»VR{y)11=/|r{\ZHk..Zyľ^VN!)a/7_vJ3[M-/|hǭFr_fNxƫKKM:7ŬC9-q#;;Tge4>܈kڗeաz+ny6mM%գٵa%? ΍z7uI{m)Vk kZ)&\ޡ;OrSuq /ӳvhgLhVo_n%'ջv0noXi6ƛk/|L_SluK_vkyx6q0x+/]>nӥjЌƘYs幼|13ibӸ6kG/z3x bGݯ9s/}ʱ]XڼW/;Bk:yj=}. 'T巀f`xUnU؞ѥ;+}X^IK3'Y_WSk_41~=/fZskK-eSKKY׼}Qxpo8š%/o=߄$\Tĥߺ:o{n.7qh^j΋RƗ3m &:zFrJ}-=ᷳn{;}^!'ͽI=otF#}_:iv3{45֋=Vsic嵇sǿgm>7w huV? a^C/F5zYmy_`w.Ǻ'ݺ}V۴yS:\]ZQ^O|ѨA<ҝуuucLI;j/=4g%v%ƑS`Q}c] =mclz߁/ͻvH|_:aܞWhwm_iGMF3~Տ 7a&,·;# #f-=Gj:-5-v8^lvp[/!=kfίо^Hoą0 Ju1~~X={7wqZ\ >ohy(sY]týؤ1kfiVVS]M>kcm$vG\i!=wnF!x^,ihJ_zxrKz&%Žޯ#kwv7pVm͜fĵš7c6}銹}rg˽8ֿ)/YvʹۗYz4|{YslC1xitvbV㙸P_&kn'_shmG}K)zX4_w.V گmvcpIk^S_>Om7䷛vjŤĶS~㑸{K/>[rzMם/~8Lw ,=]윉fl[8o~HkOWf_7j<;TG[Ni^li0ȣK;Hv?/[5/?}=/ %.31uGֳutf8[;zfIK7v_ovwtڽp-mx/~l3υkڰKZle|V5k|՞oʽqV߆wI2R_T%[cijr^Zߋg_iNwvtrWO۽XI䛛.S}LW6?.ԃ̜v' 7vv~'a$#=-i~'wO/u7# 4,NK1nW-.goy$a'KI$~Kƫf>o7X)Wvd|my]cgEXjӳD}]^ 'Wmj7Z]Z^xݚ)E9)w޿Uk4G˿ͮ^fb0C~0uR-]<<_3a ͟;.\lڝѣE§z1|n^vEziRFk/OPѿ,j_fIIxro͌̚W_lCbxxmEc+mrM)A:X=w3LXv rJdcV Hi+m^NOl\_=u W=ܸU#+9qH/iVv_VnO?;+zK|}W~]ƘX{)&\ ϦwsW%߻ʼnCnu[O_ivcäli+VzHo?6x!}yY/![>vGIܭW^}_n4m Mk7΍IFkT;/ZZ<;W0E x#^[guAm>Mu/.kiy'յ3)WW}Y4ޘRs$~3׍%^7oiR6ͣ0Ŵj,;_5ɣKOp/~O+uy%&VG^q5 xgu|;ktpRybWl7]]cj㗿=8ܼc_h W^{ڋڟIbn܍MR/˃,{. S/Tw=4glgTx5-}VM-k#NKYxE^gv˻MkNi+5Ks7U׋a}a%,[8-|e/&L|sGx|aÿu.",߸S<աܵOZvzlӳj^f6^We}j5KKN˷nҷv~o>ť<_ 3"5n_|e~OZV3ݑگA⵼of~{kɡm /xKհg+3h4|n!2aQ{W-E̽>+o6u_zi,څoܗ7RPN%)qgTcovifj5UgMySxQg-.d|c7āx7No[4hOv0s_;0 }6_wHxf{z5_#-ⰰnک̡R3q^5x\áͅj.CLu^ŤtM]}=[Rܗ_;;{gfB}/.}L`QmS햳v]Ӽ)_75l.axaQ-ë?_/}_Zi 瞿xi5 756vK)pY:h֬9ӼHT'4}|)ޜ[h~ޑh΍t1^4O ~q__nƓkK/ou6yH/Z _L[73vT3Ŵ[7e~TcqN|fxP=kpi7{8սkM<۽] 'q;=&i>!kIgMxq1RPΪ׸LWN_yڍ:oe:5Ӌaccb % S.ͭcսg-~rcl)/=&<ӳ4egw.kflgr-i\/.=ҳvf_[-w\ZMCcvw1lSxa&克޿4⦺kf,6kg!h)jNI%ngU{Wx~nyQi^1WOb 5WʣߏxMMovmV =k|ѐM}:ēfڌF,VH?l-z獏^ߚֻ-Էl؆}^q[4m/vofS'4<&6,WCsIgW⛰l_e來ݥi+h~34 o9Ƌ4G\ cզ ?v3CͰqnM헹)vŵ0Ng/w1^R>/#Y6~k^^1 K濆ŖO׽C1a͞k4 s#)lſry4cKu7ն5S}^^-^L3Y߫n^nS;kZkX-nů]oǯ><:[|~᜴mF'𷝽T;tWTbhsݿ-&@XF_+F[oI=[Mg7ÑvNu^ꧾ_ o:7}Og_ kq/5 S\zO|SNy-[_^%/.Fm*9-'mfW_z.5o3åOosF1ˇmtv\ ߯FvNw N{h.)tdsɥ:T1g~#('xֵ{}~0ʵ\i)|xnďҷտ/դ⮿V_KTs=/{\O8T]2[1 OYjoҢ1oSˣaJy,S=ShhY5-΋qcό[nvK}oڦggA WѾݬ>ֻ059 #=v75&ݭ.I c&ޖs7j-C^jtОʼn|I9& B8tjo^/1sYsZ,ē]k_xSˣgIVwekm1<ϗQneqLpcvN;a,:F|{%a(k֭gbX14Y.v4WU5RmaŦ:iqX~1h=]^K->Gw!n#q~j02/tful9'>kVFۗ{M{?;=)jq7)b.,㑔r>q'Z}\,qkvCZ_)'q&)5տag~k{7a,L0Y=Sxbt׽ iX8g3e4G{p~꬇b[܍?vIE=,.xM9n8}w^ם$lG\7W [ hƿWoI0=qO%y Y:ԏOWniV: F0'ȿ#>ToўHK)5g4۞nލWXOŭ9oҲGvd_4ff`(Vrj^W l=/S5zo|ﻙs!^in/sn~sFʥ+q;tOV^4/s#[QWpYif~#L/Fĥa5̥˗d4Cs^;Jߩ͠i|F{ tntp֮>nX:[=oOK9=[kmK,}~1h?q_=]q2T' ߻fL;J>̼(Ř]³7|r֫w{M[DZ^R\ðm֫'ça)z +6j5H/99hNTn|;'.nz^olиܘ0UwJK%O,=:p.ޫ]3x0?qb^tc)fab۬SK:OfEA19Ti@35쿱k{L._F[[|԰}oVOuR~3k7 .YZU/qZhz:Hc$RݕDV/;n/V#a33go|aZT?tGL[/FWKjqK~?q]sZ~Y8>ҳvt|6{Bgk!~DRZc:q"sͼ칩/Ң:FG4Vħp_9iYsmu_zO5ŷ؆bc=֡oWo9ߎtIk/5~IwORjž wl奿ŝz/(h&žq!4ΗꙺWvl]cxcH˷ z^}Q/ >/ޱH\RlytY$ agv.ϵgc>KW)!,Iz2s:k.&j/izk_8:k_|p3ř#4h+{K8+߉i6s5>T^50;mړzZ:=Z{fbnHߩ0s?95F/_^u_Mv^ƒr޿jx5ݧ53tnS /aZ-ѾIS?G#m7~/n=Sk|tj\9}bKZK?kAu}8܆8ݧd{:fFnƗrc<soi/kXęj;❞h|}㍧ E\m[d瞵wV+/ 03mVK^ug{23jά/$>gF{_}1a|72R][?qY;l>TKzXڜ[N,=' ƭ8+ՠ5M k͇W.'>a6'ofN$vf|D8չo~3'-j/9å/gY3+qI8W5)j,=\n8]6ߒvne˅hK-[Az8KZM,McaO~Hi/%}},Ѻn w Zݵ87>,^xÝr;j\n ;\q j4~3~iHˆK>奘e48M>%=ܥXt% x7~k~mG 8~ jV9TcX'q=-9}jᴺ`.~C[~N'.nK[/cpڝ̭aIN{[[E^mfmVLZ37~=HmHϚ5/LXy<|۳tx뷘O_k66u/7l܌nn|Uwպ^5}|rIf|ݸإ]9Xړ h/~#xFf/^z^ZZI\[mk}u.&̆qKKķ'2xg86k7a#qX${ofvo-^?{aw~w$o5tjX/3N}3|VϚ[J17}Y&=ֻ~fx/4nY=S 6Wҳtb8&,Ѡw̆z|*Z4}~#m;5UECFS5̆ў{iƬKmG]Zn=^_jK7K_!NoΆvjxW򦹻gSXƿC̿iXI[K<Ǜ֌Ɵ_ gqZ0x 7,zR[>[6;i9)r\"ֹ {5KUr|Ҥ^}=K/KW_5.XS?ᥜďZL#L3g;BO7l!\oooyQ%.,4m0=jΒrZ='c0i./:htr m귇^lnNEz~k'NfCI/nI{s5zX:M5/>Omuhŷ6&ՠ_j,RNxP~hFvNW4+ݙ&{ոykæs״}kzJKStfk~ٚ ܭ? vO򠙷.iy7h[3ތFVpL}jtz7}>[M3MƑiO4/Po ־搰wvD܍6nNta4[/$N˿.^%w_#?⧻>ݯZďzJ\5:k9/ӳd;dz='̥O5?ᶽS Kw`'yz {ywmO i.q"[rl͎Vie/eKS%X8w] ?߇ڽK9i,=k_7}'̥5昽cS[=oj| z2˚lzVf_<~{QVJ0q;'o/ޘ[#}/;ƭY-߄O94ߥKBO[ٴCQd&qYغkv֏׹Z^͞ /q1z+vkq7&4aS E[ll/׽&>ToVGIW/OuR}yx֧\wK%54[6ߋcVh(-0aQ5vNn4~ƪ\wco4Zk߯^>W_Z!yZ)gyj%O}ޜmEjОwqvf^Z/6e7?]9M\E:k n'peA }_|{i=.i=Tjfi!kI54Mk-7qj}],>o4wݚyidtpi8~Z]U4v^~ ?H|bnSr@;Ћ^_4?M7يmѳ[1g&7s7%.֠]l=30,O]Yç&/介2CW홺Ƒ8ݺҾYiՠ9kiKǩ' ezی^1;ݑ^nrVzVϫfYXi䞿iG[VU˛KkKö'l wyCom^k8ŵ2mXm& -W~(qzo ms^~/6ų:aP_,S}, ^.7 0F_c]\Z-;j>n=Q݄yk'܆q\c4H~jſgĕ0W]{ͬX¸^PzLOrHqk kgF[q{ityvnni85.Y3j܍_u4'wktj}C].vK+v1}&47oGіc߾YK<_j/-a޽KN|V¤yY޼Ɠ0..UM7Ni]9')1>n[Y5%j|EOg)x>.}΍]]qfC'Ӌnqz67xѥToa]Rʻ\ vwqZnbv4jQsk~wK7#4וZ5Rw3깝5'z'Xމ_͵>zрn|3obی0^_'^ܼTJT՗['Jm^f׭COuokWo;-/E5{ҕٓ\;T^n_ &&Eԋ147.8/> ԱZ1#ŵ?5y&uyozl_"=3wtŷ=fIC; +4lH9)fFy&zhl3'&w9ᷚoy|b4/W/7.ᷘqWlfjCV/G37oY7~YXn:|9[lthg>h7Ɨv.¢zrij|$x/nap'j݇x]MuiXM8-yڄc|i;1D3NmFKO? ԼZ_)Q5vf{U)w/YҪGs[HOwr5ӗ$;3˹//=i}YF{f?3\k4pH;Wĉ|/]oW-pcff&~UⴳVsyWnz.s:Zvnfotbft/qF/=}9,O%Gsjlͼwü1_:O{"^AY_壗߀4gꐷ^4j%/~hXCX'>ZƗ W0CmvO7'/]c=mXO/4祻O_^5N6R/z_Ɠl,vz0^Ot{2~Kxą7^fmFmGzѻݪ}>NKhj-ǥg8f/^lgOJW=º5[ҍmf+>AĻqm/g0^#͏i͋k=gy5~Yqrݙytڹh[>km?v_rɥYjI^Hu.FƦ[J7e{ŭy&Hͯaw4[]RNX=~h&c۸Y5솵]7wzȷ 7guN:~ߥŃZ|lK~)>ZkGr_f4ltҸwYWe|gq'OꤺFH Yo7#5K柾g&5f'+0OuY6r -[/"~=%'}'>S8kf'fvK-z[gKǦ/[{ixY&Vm^1wF˼ٚ]g(Qe7nauNoF߆po.hߦV7?^nZߤ˯qomo|fCfK;2jg9 wq,M&.Z+վ礹b,y!nXO~.'ƭL|쮈˺[??6-.trvӜJc4ϴu} teW-%1TWNwe& vk'[o&Ӹ)^ݒNVat8~RDp)y'Vv7yշ6-XIyۚi{Y>q5{[4_xk7k~z(m+qZ%ĉ_>Ea=f=5MzfMyv.4ߗo~wsRݧaŠj4.˳ ce7ŧ/=_r[_:'hکnk<[~ie4I/}>r'}L.۴wIaLkE;qToibW=wߺt2h˟~/~ʹj-qOn]O<jaܭE3̳aؔx7q5/gOu<'=Xnm1I1; nޗL[̚հXW<4liX}%վϗ,nWj77j?_xz=s3]: /,qk'N&7#=g_=|WͶ{b֌ =#<9a糧7yim߭VMvO唸__PK%m0stT2=ӽǪ8^wsy#aYkv諾OH_skw-/76=/:|wmfr/g,<1mgtx,=r[ ׺o a% ᘚ'nI;{k~ej5V궼a[J'˯#c3~^ cxٽ[;7K/m_H$I7- =E+ypmYq!~kVΌN.w:3>)tun^jYtg9.~0S.հMwmOfTqcw9j&AzZuiFvv_w\g4Sovfsr~EHgFsfig6ZnefbixpH huMn {n?>q0/QJz35tbHi9>'𺷆jx=ő.Ļ:m;>h6V.vp~RN.y雼a}n||O>mD>!|qmu?¤:~q61Q}\U4#Y}ZVۉپѣ1S:Kk-&qƃ#6ƓDXmy#jgW}mW8RfK+ҿV?ؔw -wsa/^xKI1`8Sup4sc֋նg5w1L^d},}sH13K;R=k7m ^wmf3܇Gj_Si`gqRl8RG4~kuco&qJwv')p2YiT{, ]ˑtLy'7yZ_oD%M%~Zg<@Zi.Vzȯn5CZM=0|W=Lۙgz_f?/ƫs7=4cS͍ޭcuYZ1K5S~Kq;}}\Lg{Vb%h-ޓW9~l=~4KgKl,?nn2k܍0imgCwy{ʣ=$Ɨ/Qgg}o=4 h}n5ig=ZYsL/>O|fS7 q^z7uVߺKo8_w8W4nP[4~R q߉[#goqI1Tr,{o4F5_Խw-ލC8@Ii%N˞M{. WH34)yrlOMX _z6yKyѡOFc 8zhohb\ArR85Ͼ솼ashZk57Tb]NnSj\n 3GM}ƭFɿKNbf4G|W{VM[ ;=/m^Ήx/ħ4>iyg!+/ W_IR&.^=ro_cq=,kƫm6ھ955tfͣݵ:vkxwH-_սxl=Kz=7/čr[='v6iF-~E{ꅴ@cGo}8~I>_¡ZύS}{輻uGX#mo ŃVaHTkи.t~{K57ES nO_;ν坥vgmk7[ҴF:_w3P675 ˼֬S=ƴvG7;l4+tX:٭zpgt&,[G⠿tc\i;fӴXMn״Ĺ|n])ܿwC;痾Y7O7zذ V ^Φ߸o=FGʧbWnL^zVK 4]1;ܸ)8^u}Ikko.~oqGK=՗_fŴ3=k^{zagxɿmzFK:׽5;Ծ6ʱ4Ksb e).f=[I/8C34/mk)%~a _{㓾vּK;b׳TW7S7ճr_gb zC5}elgk=LZ_t]Y^t>U]vO?zay?՚t|"G;_ICôHzS|LR=TY~Xܴ1qvkޤaMmˇF}|̈́0ytX]a]&]W 1{Eu&JJ{0 2zI[}q=՚=Xc@ةۯݸUw1;׾SAimgt.C{S{,mPi^p5=5K`Y/ 'eSMoY4=0un,겾f꫙_sMh|{͐ >\hzp4Sg)?ݽCN 𞙘ij ֆ_wfjVteڭˆz|W̋>Ϳjj!{޸_\ƍ_5ƋKڅy]$lSӊog4AZZ4LM-ߛ=xYII[zHË⯦-דanަ%Ah礁ꠚ{Ӳog=v߯F;_Lz1{pɷWKr/vf4Pvm+=;zsKnYK^9Wnj/zk{3˄nۏus+/}7^X}lIK¾w9e4UKX{%i:ϗR|r?z~i1fb{w4{cd^~ wƱn1-ځ?SISdvfiLIS:#=J^H;gջvƥџp'mO}y#]K^ޥHx+)lS 4z'a:y{h&䓵/ fG8RCz'eսrhoo\7[.qHWMI{·~$W[øqvNnw^ӛﴚGCş^|olϚC4׳;b6=oqI9c|Rҝ35koN^~>kw\MWMO&v͹z[MT;0cw b{uQ^zhOq|y'>$foXݱn]+k6}a0)6eέT7;KIߤ%}ӓ_Kz.\̵)>`[xOT+uiOvb i;7^N4x=ˇl:~jxG;oAcWgy9_8lo¿/rn3 cfnf&ƻb-Ϭ}b73=hy_|or>:kƆA֮5Isq\mfro~ܗݺ[ ;iKokhտWM_ĕpo<$Rܪ|;ٴ$mw vx͚w⻏ٓVGzⴺ;񭞴{Rt,._x#ݶ4$\mǾ7Ns7[F~_t,ajZs7zӴZ4caQo"zEJ|>a4}-'-W#o|mڗ#7,S.5 >= _뙉5;/<㞥70[?mĵX=tO5&ޥwiu5R/'đg1s2QlҒZ/6^'76cg54x}'ez_wι<½x+kߚ_Z /Ro{75%#ajM[=qyuϩ洛gp=A:V'tGў剿Xkθc WQ2>W֔e Րi&n5ܤE4TnЌm=6S˔C:'-_/~\g|fmzC4{Ss﫭6X}^T4 w'kʣ9oy=\̛v4$e|ޭÄE# i˻mߗ9_4?奸W_57zk{pSM5OF|$'k/oZNa勞:/yiX#\-j]ZL MϪye{~5MriV? cJn3i^5ٰ\?I´4,U[ÿkӗj5$~iL類/֞rSκKXfN5x{㚶C\-=2^HHá2{iL_C}"SG'/iLN+7iX/^:_n:V~{ڞwZH˛Wۤ;c[%O>J>4-)1&yUýKj|b?V/o]h8vncfظ|T9i"]OIwz^oq{u%ZZ=k:kfT m}/\<[{ogqi^#i6 x)s18͂TKw1mކm_v8\;Q7 \||bwⴽ:Wi$n[xJqIC;K-4}ޚ>I˿O_bw3;Oڻ!_,̢x7 bR-/ZnZrc[^hߗ,Lޗ.]I=dfp.+VSl3 U$jIzg[%DҞ(i%WI窇rƹtxҰte^~>㣖C>]MsY|L7X6ͯ>?t-/-oZ/ikVݍikyƳ4KWŭݤ5{7Eoi.ML:oS+˛.l0mkҐ,?&]+weCY֗tF1KCw748zpok:#Fi! 畏zcQ?v\h\M`4֫~9^bkN%̆v5+;G{ݼowҴz7VG&;@u,{ݼC$.`+94. hM^y2$Mc6Dm߅ue>mmrO)DⰽYMgƐ~4 {C}8>-7j_fv"~ӗOtգ˳I?i4zW 嶙>y޵/3x/39'Kh2/ΓH9INJs{ya^m?wc:?wUSҟtlA}hxԒ΍_ s1YZzA\5,ܿgw ]+/ۻ$S:k\3}{N--2i5K |ؼSnæ}Zw/17ha{'.grivv{󛱼8Kh6 ]Zi3Z.em-7!޸T{MŻ<~ .K`qwyh23xo5o߸94_қb{Ozm-kW}FǪ9q.˽'֧POڱOZ>WlJ:n|]v}/ c ܛjxk+tΦzwT-,O^}+=zbI[ҙrˮ-Ʀ亮 .Mknp c~ gW-~Q KOӟ[?)b^}77xu9^ݟr_x㓆u1͞UoJh[ |4MN\<}ݻPm4[Ι~#ڹ}X9rZb݋ vN8tx9=kW664$W7')ΒK^4zӯ{Ozϛ6z(=fw_5.,O,ntY;s1n/s+ųMͯ5݄|W-kҚ4Z/g{bRܚҞjL4398Gf.Kl&MˋGƥj^}4-kgi^vp;׆8_3ZuhdgB zhI4go\:3:^thoJihL>Œ^E^o͎!܄}%l[zOyk_{G)8V}}LzE^Zk+|jiq__7xpbѷٯ.MIǍ]33va[ m1}\x eKcM9s.=vۏuN1z'WMB7O{|5KXo+.,a|7<䱅i<8 .t=Y: L^8c׫'}lI<馘Wt|G xXIw]W/^x/lܩ=_vun&;W-swZ skHgלxmvKS\ϗ}[tFkwZk477hO ?qސZNbA7 )aٿ4Ǥj]h{:av4ťٛܵ+X߮ntO1MF./r۷MgbRM55;s DM/]ON^uf_vk۲zdݜCߋt]-0]C=GiZO//fw -?|hR'5wqiFI{t~ٝ5ځ5W]k[^[sm: Hk;ycVHcӱdk0}y勯=2Zȣkgv_={a gy7xdKSՅ󗻝/M霴P?-[܋GO 'ޤaIӸ+:½vv[|b{0~g|4{0_H׋ޅro_zҽMXZf;va+i6AqKkۓ/tpV/Vvq |ۋx|q%4)̀<!QV[s2{KΗ#vgw;K|͵^kXkqHW:7M8ڥV`uoC r߉sKTKܯYٝE]Z&qGh6_fRZ^¡H M$ vh5-'[YhgpiN5lq by}S/~]}n:ZO514bLm=[/{Ը ɗ/ihMo@ZvP|X&Yoi>fy2VO%.%=sҹ֏aE!IkN+_N$IjwMwv!' .x}{_uP]K]fY{ΦEӫϮV[ս_5f+y4.TyOFyd5iov64>/te;i.kvk-MMM_/{5WߚZ /Ϫyq6#y'a6K)ݵ45o{z%ևC/X\iwɫG-|xun ˞Ўx͟;7ҹpy"œV}5H8_|OkwKim.i]t}ݳJ)%5U}Z/{F5,>W_kWҚbalyuc^[M_owcg~úS]F皁6xy_H7yr߾6GkWڹ}5C_I[oFx]"|5Y[Z- ///%0^g|DOV;=0!n 'N֫ ڕb(.ouL?yi]ml/i1Cuqx_ 7}yL.Vo>Τž$A'/9KcD[u֓tgwzh(:3*a_A{{ybwttܵfVk}!Άb?_TIGjf~LKiG~H긏r^f uҚL/f|j0LiV,6$]Zaָ^ճ~>Io[iL9˿ee7_?ݷs54mQ`v& _`FK֔[ړTӚŷzo@)i ];rz ʹq,]vh b4]}k/M8vw׷akOrOfhm7wտfI}nw~L=F^YgvMWDkfWi>'3Ϥgt5 /]~1߽[7sxx٥xt3qN^YXoq'53W)E;zL,XLML{15ߖC}hokp_N!a,QjPL]~'ƽ8nG;yiq[M -`|µxk~ 8f龽L_;ݼBwjJgfv&o՝4Zl˾-0M B)ܶ[.4.ŋIW`b&ڞUC#]TKY5gjlWNś߄i77K皏՛Mo}'LTOks崙_~P-)5DŽuqi7|ozbǴ'.}\Em?άY=>6iHG¸_t4]}_{gsw"{NNg-&k;=fnlñ{M=g +iοښ]&k/uckH3~V/i$d7sMFOjMOxe;7oˤxҹ>]ps&R/x{ZG]NN|۴tnt'}kv'ޗ'n^=75'/}ոH.ړ ◇k y5ao}g}^vzF>h_//'fƔO59z̼yMqożԕ0\߉%ܤ|7-bRm76mf'S9~O[mҬ`6MղW j#]3#9Lj>aq7^'= +j޶j{OSΓc=_JMo'%,tN[~k_}^=wP:ʹg䙶USO(j9ӄ[v:/%35oSgzlazwbS g颼0$,w_r(wRRt[~@÷ڬ.å?Uts5;#?I',%ޤ+.v߾IOgMۚK]uQ4rdxIytt5}󵽧.L[ aI!ևԧ}_/#}wýO2}l:C/5u Vo#՚?0_k c3 KٛcwvY&̈́^VK=3״S]{֞0̞߂V^//q%̦ŵ9kkv]>6JRn o,%ڣ^3㇥9qM\1ˏWsͣ&k~,僦3= ezv'{z'-oi'^3گaIځoVw[1mS<[o[/?%M+]뽄s}Bym> Ɠބi[nYpo_x}ҾjXWS{:72y CxbyٹCu׽^P[|tұYzٰj\>hk)7iWRnة׸R.ͨi$֓鱻Aԓtfp_GޡZKo|R|5{v^$/{x(Ap.'a77kIM{gq^wxr+b-,O_}x>/ym_u_ƙroyiދiM;IӪ#4ܔs9xk5}ғoݪ?'{S>y:[<sWZky1G~ikԏI߶Wy.ӌ{nvKv'8.oi3^OW՗>'= +q4,Ů-Wm[;E;t획曷iwՓrZkּV̚zs6Ǧ}ղvekƧ[6n㉗,_X¤zVZ}Ew_u,?ۇNKߍ#q߃ڽ%ܔphFĵ_vVCpҹ1qK{^\{,Qzhhf7]l$ﯙK֗1N7kgӸqy7|ҟ0Z/έ}Xx_~WOgv_o.q.4!a=O]iH=|i}^>qH/n鎰f'R^:_4>GZ]JY3a<hĹm1ҷՑ5aqWhMzL8Fj4}o1IQH/5z^ !Ox~ݿ{D|Iw5[:M̓ޅN+"iU~c 13w񤸖K܉cm␇ }/ܛZO;eu.O%}^"Ӽ.7]]XYߤa~՘ڙ_yifE#εM߳YXqflVDq.aeK^1\\+IGҚtsjƋl&8SXR_vj4ؤhX=NſjOWҕܳOzf{Ҷ"JivMK[XT_KɿX,$:aa/gk}!-kY{u~;H-egOg vĵ߉ io֟on7mG͇['a5mMts+i}\ 6ڥYCޠIg4/^,mV_5>돵ͷ޵Ւ>Q7Zlku߃zb׹3T/ĥ3jk?/,IL}7{vړ7v|9aR^;yzbQifIQ}LmK |.o_6} [ywc3x)?[L0~ TW񭦆}%>B55,>Y^3>~H ;.ow(ŷaC53:Y~⧦& /}jkN/5a547~H/^ZvyKғbٝ+ j]3 4btz kYu1zSºO}OIi9LOGag/+7iK37=5ܧ^yi\m|L;8kW[-԰jHܫf>zjfjmkF-nհbWH@}3?;tn9-4e05ibfN_-~J5SOsO7Kk)q`О$mԓpI͗hڨ'Sc0;?/}\3=w;W[xԇ6CհMi7I8q5_wbzszMK>=O:Vn6=Z﫣q/7߭=ܯhO6QIhsӓxY'ř6 EO>Gs}oy/>;ojX;E1k^7q'Mj q6noz^gkZ<ͧydžZAy$k/Iתyi~xj2|봧yhhy;%iKNv_^~?WNR-WՑW vtO%ĕp_g՚/|_^hG53Ypz_v9iizVå˛cfeVVycn|\.i9 瞵)oiON'&3X1nyw46/}k /A7f8oj}Ŵ>z7hN3ᐶGuj76Ai\k/;KZa\MkGO,;4+کk-=j|y$i$W _MkKzW_)wi!>m##_ކOupwwR\fuw{O=Nf+;/;M4S gjhZH;%)i<xRl/:Ug[z3/}Hwa8Gx-Ƽ'=8/&a' 3vL]&cUS¹gMŦ]$\r^8rWSI܍bmz+k&xmm?/6vvuY>]XX^~1;I/|f%ijr~yз=[Z/fsڻֳٰD;KC^jr z}5ݯ^/Y5?ϒV#'I/ k?T{2h}zٛZ?'~f^[| ao~Cs$%<=1mſzͭ|2xfaX7>#wcK}IX/>0֮إě6yz'/[ t^%#I9TOIڍ{;a4\\mSHa]3\{9T}ayym͍Ǽ_7Ӟ,߅MOܞ?=h;yt,zo|#%l^KKһ?~_ؔ|}33k^wuhV>T1uڼX4=nC6;đLݤGϋյfygq/oΙ,;f^ګ4sY[p[Oz#K =nWM5r[fF> 5[ӳV}R={@0R,E{75Yo?楜o&nCJkgm/;jfw4ni3/XˇfޞW?}驝c듙 gZ}^w,aėvzHOդQMTĿĦ)p^[7̄O=t47n|Cv򗶄e~aCo Qj56TwW]wO䅦/S)4{e땟xU}'M7Τp.SN9˛΄m,ͦߴomnO-wḯx_x!ܳ^6ܗoQ}5ž̟t&/ߓUËZlL_u?\vhG÷p΍O9ՔǤp\ I1/yMoM>wKϚ7i^\&4h>''f歆/~2]]TSt{avҳdy6ُK+7qK9_ɇ/>4K}]\q7-/_~0} jR~wÛZ:5'o긺Ybo;/ߦl/:[IvVKF{ՒpxIC7Zg^zmq]X;t-/i#ם = 'ŵ6gt}=]qvoewΚF' =kO˽z87bwz_{@=2{ڇkc֒b7oS}^cFbK7v=m7,엹=ny SH1iMo1뷧za<-q|okOE@̎ο԰ڻ\m&/iטIҿnq,咎b6IQmXsp.fm9En=7=Fy4oL뮯~x;ܷwmYz^4kX:n[Ϛ7r&ME.>i% 9iM:Hg4.^6Aӗ}>$-k劻Iԝ[L򗷌ڻѹ=q,±=Ɠ4l)UiƷq^'K3QsKˎj{0fs|7zƹ04\X{hJ3 cgFZMcR~5^m߂nֿ&~p򨇯!_--qi$ K榼Ľp}|y}M|(-߷\z*n'%,)P,}O˃+v1]i%cfwq>Q}4;sf|su<3cӻ?3ckҿm4PoG IqqI~y$ npzO|Iݯ}\W?Φz4^ h>Hܸœax۝0O{8ҽ}OĮ|}QkX{/{xkgKS]> 5:O5}[5XN/f]Ӱzd55M:o,L76XM׫yX;ڕ%la|ripśF}6~\^\;K31}jz[͡&VVyO֗/s23Y ΋ja0[L!~ynJ{l 'S=X 랿j8tgΒΥ=-43V=K˟xi.fƴ?K_=xq'Nu6:o;ev$?] ¹/;S\{s\S^ҟMqoA>SlyogfxڻڪݞtOZo[^3Xw/=Yn_,-xkwTqIӴU݇K߬LZZLo_fhsSmIko/j%f'74z_Vz8KMc!/4 knڡ_'N{\7kRNü/)/i=j18;{kNpfN8vԻk%}Ww;3_=lڗvIga75XU+iZoՖ񋧾4_f==MS^{.' άVuaFVC ػ5/oxFYw/AS⻸ pךpɳ7?i[u1ZtoXK^7'l[xC7M-}ݤصW8hf{=Z?͆M3~CzO$77xhf֗г~Rav1S/͎؞Pť0HqV߽3X|q~\i͏t:GKVy]vKWrJZMi_^b.yհ|O5\MWPҶ46|bRMǍi|˯qiwb3Kҗӽ-!n^ؚݗ8ҹ;CW}~XNze||BO8xbix jJSk5˗0pW)46KNMw7-1$|6iYF{`̒g:oӫ$]/sKI{xF}ܴԑtۺWl{|~IlIO4jX/iƘ^~\)>'̖W/8qOo<.M/i3O~'IzZlO}=voa8ҝnW5&4/=umO#IڿrYÿmqhzJ:k4ĵOmzE8WOӵ[L[kI>g:U<--OFKq%kztߚy<,֗4TG2>lqxٿĿI77q7|ݛm uWpLlks^^NOg/\̄;WihOܷ&ivW߆]ٝt^}N9'aݳhK˛M'ExἜӎԺ-Nr9[-{y=;@zSd1~TC3=g⦻gwE9+5O5s;K7?5lO=y)i6-fz:)/[ݛ偦sa^ijVKMI7K4%\!=]SS^{O67r7}Y8~SnOw -zh}h9hIh-}-ni^Cj#?錼fbg%,a7DŽp Y} a|]^͇ #K=m||N>ihlvi'˛I&m4W}>nZH#7ŮY&͍3$a{Ӑ^mkyzkwܓlk& ;CLLI[zO'/mzcx_u$Ճƹf,o~.ufx_z+#k';iKwv4,{fcIߪьjW:.FZŐWvWl-ֿ4y_Z zx>J/{7i1Hw #o1eM獇|FߤY`0lK답[cfJ9-xΗVu15j!U[2X\MۊIzN8\z⥗z~'>Ր/Vq7R~_m`WNf_ o#-Icҵ/hgVoHsK^0+.PDyN8 |l|tL΄jX/x/n4l7&w/Ln㣿+⥼6Ky^僚.$|4!K3o:[x]ҳzgGVS'ۤ4 ?9[avzl5h|t~i'm_="-%pƽG97ŋ)wL8m/gӞG^q QM5=)[-T[=Tsçْf^f?IcgڃtG3jޠӽsao| i# TO{_V_znymhx=A+'I x/#X^#ěi/p4mKK{8iw+&q.ӰcfL)U!IY /^nzL_ީ>͜|գù~3VMw"/iٽo:Ӯzwlh{L|ҟfYN.WS1RҼ|c|iju4OU߅E|4˔Kjm|O~M{b椯=k_x-4^+jgz~h7٫/iu4 1f`G=^^0I^oqiz'0?7eݗOiW)/}7|1OuX7 Ό[,q'mԑZI7aͳaonyMn~if_L-r}I3'5'-eO/#/~Rlj4s.G KM~Y55hk_0i7[eiNҖxq1u9a'S-&zuO;:'=닷,H9_-_MݧUq"0.i{uΚ4>w֮ѻٵtYܖj7shLIxK>o=$=zo^Ҝ[7v7XX}ti}Xܭb_ө?iݞ|0W5m[=Kq4G7`q.p_$kG^Bu,ҹM\;#=kOb=buo۵ a-!ܔK=2kZ_ew{ߪtY5}~5Mo4- 򯾄hF{}کUK:̌Wn4b\)8hn&t0x>o fV_:O/Num43m5U&ik;IV-d}//V{L[Mma-O'Wo6\E-^| BznΚɚi&5om4fⒾY1\Mӯ`P-Εgfx^vrnOZn^ l_Z[ǗOZm=aK\vvy;i1EOӑ4'SziZΌEI6!ޯ^>{;ًמ9w1|_esy`S ˟_ZL}Vcby{n"/KvFƟTgCI֞U_|Ѱ<0ڷGO5ߘ蘭|c갿 3/=/E1KIӪ!i kE?qs[qӖyjo5_5ά'LzI_pq?7~S~z7+h^[{L2DvqkS1SGgH5.-k֚d˷_a<{]+:7xa}֞w;׵a'LS_g۾ߎ5|3[!>%_ZZf%ڿ5?拿_<$l?8K1ev7)gՓj] u4Ƴ|0zy/ΘzFv7KxG±{vf"MNWM-jXZL] 5϶77'ݷ=Ny7^G^+'p7pΗ.ߤey_/N6gi5}1R]K[CF퍝`K9K M٪5ŷ8~67MT+aګv0/F!oGgM˫?$_zhWҞbLժޚV)e펙_NZlհ;˦-ahǔCIdf0z[rtؤ13#zZ?Rkµޢ5{8R~;{݃mvZkv/4 )/ejԋTKfT^i\-"O$mkᮝ[ŧܔO:K Vʣ絯oq:W}313Jf_v{[}_~zّ)aѼ}ZqhngkM%(0oZ齖kz8S)i󂑼veix$KOӽZ5I5jwnK~yc|$,ogKHfaftPyOf水lԾ|4y{T'ձ4PNM-.a6/vf of͔Im.|m/ޢZEҙ-o1i,ѿ~ ZWwK▖曆rYy5[/Ҳvn-/o_ZՋ-M|u!grRmzo1_rAƯqcm~ʣXY}mZnZA{VKʳn~냝}a'xb&=f񵙱فtTK\!ߧ=1Z%wfxՐrW_wKvNY#?x}=׸L/%>zԼfffH;zqɓVOۃ6|LOkIk^~:ٚ`k2T5XVӽ3YӘ5fF2gk{jH7 &q_rISұvzvԽHX=3V)n3NjiWO.Ͽ4Y/OqM忘Se_/ak/k)ϞS̨p^poQlgK06<{0t|yb-%V5="a]]IZ_k'#7лոvb94T796zޙ>Ԗ)//3{km~,OeJ}3wg+6uv;=ևfvTi[lC_HڽmϪoœNmf6zug0͌愿D-y͵`v-ih3tf^5ĻݸojuIf˿V7ygi.?3q;K:Vo㫟SoA| 'i7>b/,} ޑVK {5ӄmy,fv7՗x)n>R͆4Rm<%]a]ދ۔bf}=iM8{x0>̫i6뗝\37rK03-$i\X)ř_=zŤa;imgtgm~η]s\x~lpo غ⽜桽5 ˻ɱz,VMq(vzO/M5?nK7e)qټTo`s=yQNo/5s0;JkwV{:ك坋wӴybW^s53g/Cv6-έ^R-oso5^]k>[$鞼BI\5_{|t6Ly@olmw/yLCÿ1!vtxYđ~c3/=4ۋj!lڋ&M 5-4t?¥-f0R,@~M9I/i1}kx-{t_{NyMҳ|rZ OqOkgb7_e ܟ<'oj3cꋵwɗY;fMm`[7 Wޘf/KSnzh^kK1aW[NŚ!i^>vz4P1^4\6z꠽I 6eҺ8)jhwMg_8_uZ}poe1^4xL9T[˯mK%o:^2mk5/^3: gM׺K>H\ԧk'䗫Ji/.}1lv2R^w|8f7H}YӓsړٽV˪jZ\|a[_Vxqw{t\57G}jo&kͱ{z/L_+n,n{_]yHӔi{}xDM[ i^\3{ѱL 'O/hy }vM>a55۵_9 w0qn*͎YYXMˎ/UKbIt1|3?ax'q$_]=y}¢:ni\1OƙtZz)%Υs/iz>-G_:I qZH<򳍧ӧ_!^I`j(,:WGk:_Yʹko/k O_{[]Ic{4۹5~>\/ QC;V[ƳӤ49/\w0-^&wVGҒݩ-ձpF˼;Oܤ3^AkM:[|}ny_tuw+^0iKIgĕ̞1ő/Z}ۋ]\åZ] :ov.i'+o͂Lcwno+=/_7ofb_4zUsJ bnj\Mqҳv_h=ķjȋayYW%ikSey1mh~Y޳sⰽj^Hq7o 7is /zm|bIٯ5G\|Җ_tZ}ڍijzO~±3m^Z/PiwNʻyM`ZHŦ9&?X۝j|A j)7yTSιA=O=i[=6d>-/-Ϋ̱W6qv_gh@1T[zmK3B.Oy5tH(7W+4I`>!·sxnqgfŠpYz('7w{ph?MKi[k^_e%Wӓ44mtvkQ=5^ihm5,~ ܆ep67}jksV=%ټjY̧$qcwyvXgWMqr-ӫAM+L_zoNsj{0tcKp7+HhS9Oq͌f0IO;xzGُ_s>=4czx/ёh־>OWMEMc㤞6=k6&qtj^ZS!|1z-_$G;iIQG_tߜob^aR l9SÞߘ}LZ^Mi|۰I7Zi~Kb[?Mkշs6|ToIX-nylyb-ّGks7i\l#~SnӾ|x^;t|NdzN{͚r.ՙ$ii3hu/7>ۣvo_Xh6_~{O[7e;ۋoIش/4Tū״,>}ٰia/ܵ[/dxљhN,]clŚ޴XM;rvkjk:7qoM'_LʡhXjgK9 /õ/N.UiyMwӹ'7Ɛ7֝{ґ/k'oNұfG/Ga^~r saZkn~3(4:ҳ|oKW_I}ia%~I0{D\kݑ{t,/ޚȋ)ݷ4-T'Άx׾xhE?nz."Q! vxqٹ(6q_zb|JھTӿx;a^eG)竆VO_3yv}y6m:[ 4\[rTG;ks6MMc~^=zo'/ vS?hVMTWzHC]m2kgM=-Ʒ:ҳv^;Aݭd/X5TCҐb^M9aSmzrzeiZ-@OMw⽕o͓49I1Mhv6廤i͗4%'k6.9xf/)gqSh.Mcӽjh}^%.tVey8^JX6e_CkWuO؄{#Në/ڗ/CsĹⓖ%mvpu~'g|a\7?a&U#\Y)o//ؾ{ґ4~=2~ H>)OwKk{ iv/3yӚfonHaxn<`<қ6K4unfO-3vq֗sçe4P<㋖n}Eq{]s76i5SL/ήݰ)osmMҰ|exGEޡ·vz.oMWlzlߚUc'Io4-4q6 e^ۦ곸Og-w4f^fnT[%NM9xZL'ѻXkv/<&''ݯ']mv4 RGg~iZm'[F 9wKG^YÕ8mՑbKv_t3k4-.Iq+~͎xVN{nGLz.&kKvaw'߸׋$=8}z?tyK}nޘ5?ϬF'-7S/i$m_0:VoFifY{OwLKjnqyh45[}7~'i^zqҾH8][J[o⩯Ig#O]{OClNz,/q9h@zzjj-< ˮyؗݲJy_|c{aRܽKbSaq'=?/|Y\}]ռ7)ݑgoBҺvyA=2ZV]>'M/;N>"^ꋙ[{NauRߛN?-eW[zO\Wߛ}yŻ3}gI1D_zn}%=MvSk[zx`ͥq^ݛ,ݧsO=vfft[^;K 4E?ozҴoڣ$5]9T b~5]|]}=拳|f}b|GI՗j23ZHqzNgtFI7lw8Z{ty|i^y+i>o}_\ {/L嗕G/z[on>Ost4oӴyQlzL?>3g3'aYgocQ>WxWl|-gݛI]ʥi< +i&ާy(]x /~ ;׽Ncgz@LyՑ4.-7;ח܆tQ^sڱ.._u_|m_IX\;@ ؽonj3s0<_~ѓ_vgt\OYC@Xik3ys~:[^igÕ^󘝽MuQ mi!>cK_M/inmhxV kG_P#Ough?i"M+r-~;/^w -عkͣᬞ5M/3^~z_;K~Mq[yuWW7RihZo7_iEWyh\j$W_-/&un7xC>~5~G9}ɡ:cfA{ٳ4,z_~k,Օlk33M7<7_[l1{>5f^15>PfӚorҾxAZ b'扤q;ҚbS{7ݥz3Ƥ4N,_n}Oq\HɛZGӾ-OoH0Zo=!uΗMqy4E<_kV^J303ZIKi}`w|NZ7/|_ Ҷ5KZ7ypoًgx̓[޵cwj^jL+w顇rkp =3!OJӾf47}-0}y$mi 5-q4s(fioHvIpWӔ8ˎY{UH߫Ez윗vFuvTjzԚ)6+k&K_zw|W/Nj/}C39RZַh/s;k| -wIxcg}XZ׮.$]EK5_{oJ?V XU{~˳d5>^:3F-̚Iߪqq&?q$ oaO3z%tFz=f7>sE;[^2ݩ卖k^tҎ_M_ͼXZ,w}S7YsO gѬފ_~O {,'{մzD3xїnx~txr盧#3yx!/gKj' :V[1^Y[>o-#Ou#=m^7=o5 [-Y=2Η>/ߌ|aeކ?a{B3hs^'#˟5Xsrٚ8mھ̗f@ro[|#p5P¦~kl:k!'̯7Kms2Y>iZ(frK>Ց4ܥe{Zv,.\5PKYg)z,kgKWMamWXӓ_hs/TagF~!߼lr6,1il14 ,'֓eo4Mom=[߀{r^-Ӝ/gzO:imsi/;ޓw% u5b^h=m=k>dx=ډkĮYӞsK#7{`g/OǭF7}mZ۰<ꓤל׋u},Vw:ŗbS3<]YմwfD-)h0\'<{c5_x_C{]htnsZ{B.TϚzl4ߋchXܒ55|J\ rX4-+>5=\$MKz%=t-=f οny*ae4+Ŀ~ibL}ҿbwb-/oQnt߀gq1.%~c֎Yy+Ŷ{N=JmM3X:HO:ͮ&o{EG2{FV/HߚN87M4TwкhZ_bV|LWSLl.MIwMu,`gl)gy i&a[ qˤ}a^~/uxh޷hOm=j2߁5Ψ獟mq[\ڰ63K潿8kdߗ5&>´#=?ㅦeq&-IOm68^sN5Xʹ{)_kijb?=f7Z>Kl[ثUK%̵ F{Y;v9Mű[}KC5w>oP/Z]-ݤik_I[iqޯ/Nw/5ކHiYn=g|8L-toze5väcfp7_k/tOڗUsãz /5ŤZl˃)//{ۦ,Y /6cfDئM?sûj<-{fFk9{tikMru'T7~#ˋIsju8e6kQ~{~>="ӳ慆װySMwY]_vlMz̞X]g{D%?'Ƴ5osFc&wטv_~4ˋg齱vGVM#͵aO5 3)j9SnLm8կ5^+&=v|gvj-} ,WN[ ݹl[C¦7Ga=4NϤxkyIK ii.LJکII ݥ:oq5}"aN3k5;㗙2V¡V?7j -8|VX<;a3H;jK.-i3{o|ͭ7ކr '٥G~gok?S=_UG3lg-&N8IӚۺ3Oq|[fVsvC843B=%NWq)'/./Ff=_g_hu=%}G{UժkaRmkV_/cvw_>3pͻY_BoeҷM+/iu%~Jmt'MWGO凤]lEɚiZۻv4Y/9:(vi <Û8hwc$=_[^i$I}/mX~Xџb/W/]pfxg˳Nbh|_zȯk< f]XֿgoVGza-4 VӭLwƓ/>l9NZ<Oie^wsyLn/<Ou-:n@rȗ[]ԔnYH}_n/ľ]@.jI:WS x.^æ{h{bvcy/Mc}^w<վfu~.?igq7-4u~S]x/y^3H/s%-}Mך-ЌRL1^3\#\ihܶM Mo/~hoZn%GXK\Xߐ{0ku/ +Ʈ9}GVJZ_o=zV \{oڒVG q.ޜ/]zGKV)0Li/yM:zFb08K?rٞ5ڙSl&xmg7 ϫ|osݙ]lX7rS_Wߴ={y #^<$G&]$Y7}0gp{9[Iݸm4P!sa]k^7ni{][}F3tg^-˗^7Yۏc˃:TKzLN7ĵ`9W-bo\K7)yݸwO!ky.sbZ>y`_ EK=kx){{ҳ8 |_lhwҷYsq_^5e΋cynqǜoDxWh_o/͙S}֐_b}C>|4g3qЋ^=(wQOfi.5۝v{h[ZT˧:f4L[M˹٥vojkj#݇vvI 3єrGz[w涇v-HI' {4klyix֬SiYH)&q/5=f[}]%{_ni^ѻًNwS3j8C9֛ &=h5]S- ^NO,󲟍wBZn+v4S- jJ̃j?}پs'ԧ[l|2CҸ_:[~[}3Y;gw|0oa}&}֓wӵΨ!<1k KO ;ŤnYTxݟs5.)ܭ>6{Gs0iq_ Ŧg-mQ44է쥦wb־6iX{װg+FnQѼuk"ƝWVl|m2A=C;_kby.۹]EZZ5eW[tS %?I=x-NzNӹj0F[MMI}ӵ8l1wH7KFҗrV>q]4{bMODytcv뎒Vj8-.y[Nnrc;6w/(i_0W0nNjߤ(c0f_;KoMm6oyB/ֱbt~i%u1QŻih3NiN_MK +MOa,}㖗Li5m6AsMq-\ۼaN߭c%]s\s-;#i2{SLyy7oO|ljLRLڡpxO~mvьRڵo>4+'ͫf̵hO}Iguo;/ŭҲX3ixKK[֬`Ntܛc!|n=KV{%o}l8sy%-?flSY1SI^zrmG~q'fbnk8!WQIձ'~Ƥcݿ+͚|'- j5^9i箮~[ۚCH:'鴵5} /V?ڞ7=ƒNvf4|t&k뉅g}vŦ^ aRzhMK0rq7RXƮ?97{|ްɥz̍tj||v)^hFbVoZ/{i+S;WҘ8G:kgiZ{gv`xk;=e|K;s-8t۽}/9[accDŽIYzݟ˱xo'K:g#-c[i_{57MvҟxVCҝ/:|b̎5U='}N\x?q&.{4~ٽR G3Jx}!ij:i?ƴշgkv 3}_unfeCO=~O14/5ܳr%M?ƫtFiM\rä=iyr'~hoz7{Syhz-iK1xVω'mhihf'5|fnt/yƛf1fbRiJŵSkl~ݧVǽ4뗹6vfrWwӑIk"sPb ۻŦSJV[ߐUʹ}x.q NԼkgM &c0q`3y_ZEH:W b[qN^_܄47ކL ֟ _xMq/5Q^l5c|+>,퉯fXjܯ~oi[xIPŢ]n:456k3Uk˕biI{0nzN:{%>OE'˦QOu _z7)έ3ڨzjTG3RYzO 8L?_|Oߦ~ڛg13\hkiK wa\3Mwr6۩##IG7ھk:/&'\n5о{2ikOS ٯt_˳Tk y޷0=g_ZCx`7ߦF剦Y߼W}oxK_4_ƶ37LoS[Aªi[-俄AR-7tf 9 w=O^4<0Fc iY#ICˆfj .iowc}hԋE[ˋoEzoƗ|i{i|ݸeӽj1{v3!LW[:b[oҰpiw/Ϛ?ogeOSܚ/鶹)?iYW,ڳ6{/6XF7ݭXMkl FfmIioRͼ_5۽J\vo/^ӴvulV_Eέ^ۃ-ҳB=HN1:h .RMWf.ƕz-I5{.^}K>[s!^I63{v,ի4mvogҰ%=ǤOMMp)Jz_~?^=1^wuKc'cfE{2wUˌo+4Yso۸ދtz'ձxoICO"N{ޤf|jh5ę7/LӇ0޸ ˃7|GI!M=Oui=YfH=&cy`y]Uӗ$ﯞ'LCHck M\{LV򪹳^<ڝ=wr.5.zCoNy! Yk靾&UJX }K7?y߉5I᧚zbpM_g>ىfƳ޷o"ck53۸~ZzI}1||§xlq}9f!7?q'ΤpcC3No0fvƱv/ڣt}zO\ {ٵWjXIw{gG}#4ΕvmenH}yĕxN~Zn_3"o6PɃ/zn=}'tE%F4ZG{^ +iH㙖<4^0^>Xoaᦘ}9W^}ғvNl7͹wY>I4w];kt׭_Gy0 w.=m^J:m%{_|8yq:O/}##CL9GiW!POhS|˳[n=$ˤrƗPN٪5K;֛wϚWsҜ׎2吮}77e_[?Zߖ>k]^y=oߞvffiWmMVA}־5_ܘnIљh'対/s5=l |:/%0˾K5PoW ۾_|j_ޘKx-4}}ճf4wy~ɹ\Kc{ɣGH؍cyiyuo h4ٕz+KOIo58?ZiIO5= ]I']txl4C1Tœ5n\K狏7qҙozgֵK7K7ŚNk7}7kWWqޚ,ջվ_j0[".¢&]Lw1.nscjMYw}S6;g}M'~'ïw 3qoi1wK!zyZn$;^};t5#kfGq{22;' op̌ ;o^z>^ bofYou]ҋ5}v Ҙ/ToyVO֌&Y/.6} u _t\vN;3jZhn~m\ai&װgcb:5/~ޠ5C¤ߌ/;s3++KM3qv3=%-ɳ gKKL;U{ڌZ- oJon7rwb=ӳt85Τi- n7R{;yHkɓ龽gNN9j&;3va)n7qK ձpzӴ4'7հbW}&v._= =lq_j}jju,H˚P}cnZt\ȳͿƣ)!w{_ƕIZi7[/N3_xOVvZ~қ86"q ix7=^YsMx_d7C3MywWcѺ3/l)n9sI;ar _[^J_&-]Yk?=H-M^o/>JIoqzıxIGڭE\M뫷G;K:IuIIg8)d/=şM[=f~]~{޴vҞh6˳v/}派/o;k'^zmaeoe O.M:hh z'Mg[=$?bW?˪jZ9g`ڴ]JvX˹pLy˚y:޻-7QV__̨Q+4K;zgķ4|g3;A[κ37t]\ܯgI[{N;rڳGuM'[^˵Z_pދ4t4k3U;ձ0ל.`}M4SMO y,ӗjSҰڹw_x[>$Kٹ׸_j t9RoKr;a&wyaxд-̦mq7=f?I'$<ҝ.͍4^I5{IwIgybמL-ޗ7yG;vۓ8_<0=#%Lԏolj5_|lvؽmu,Ϝ_z#&~ͧOZz=_樂kG/a^$-}7>i«]s [k涴߳ѱ#TK[~[s#TGiL]ˤ?>5^.0mtv y5MKz֬I_]LIOz ڬߗ6M>;'ۻ瞭ڹ5]Iq·GG[{[I>8-?>򷞴X%f#ɫ.^ʣ>՘8CJWcoqsVyٹxH˺?oj{ҸvziҺz۴%E3H_r[}q敾M.>]N0Sk?Z.qK8Mꅝ!iZu%mj4o3V(#ݦMڍ`4= $][Is4x5'ڡnt-e#緡G#}h)DժZM 5K5$L;#ަkvaz/=x{XKkMkIhgcWCi"ߧݷ;/MWGIʽj8v+>iZ|k4GwCʻcŴ>/_6mb^v#q5%}^zAk_Hc;3tF /߻e}V-?iFJ#/;g44ջkq7`x%.&m_wb&%o杸ig$>lsX}5ݸg0~wxR7JO}{ځ#a$yeVOV9uo|zb aA]Uwܼo=4,&ۜUb,-֫kĵKLgvͧ75zlo{4؝$}qvߗkoZ|)suL}&ڇmuUo}WL5پ/&=&=[A^]6x_3lΤK8&IP!yʿ-kMĹp[ wS\{E@ooz}1 /&YgOmփ 46[;3a4Tk{oV3B{J {E~zݱVo;olng_>SmF\;rI [6ztX^}Vyyz{oږ;iM>}ٽŵՇ6gtP7&,{F54Ŀ|EXv?iΉSo^Iq4>]^0>^~}9\x-_m!ݫAzivl\-=_;.-?[VOiyj1k[/6-#.ض3M#导]7oܧ}܆4ْn//h\sg?qRq3׼pF#qxӝ0X cCKKXM?xȳ/ZLݻՐ%l}&- ]1W[/w[jY~ OWbV|}^Ezҿv`yeGMi?}Y;@s#4 >/G¢Ĺzx>wkI Low._4+lEy4՗GZL;aZOٙ~Gc@=[GX iE/穞uN;a~{֧vxM#MZM۸Fۇƹ8i/^w>w)q{ڌp쨿ˋWOtӎ%f͟-',^&?MCd/ͭՐS6Ҝt44avwjϗY'L}$e{yհnݸXiۯ^Hm4ZH^3Z>L/mYKM[k'͜K.WN>7I׊F;k9xjXWKz+M[1=Z3C<5ov-|Ko['+xqt^ oIӒpo{.qg~۝Z8oyN+4oƻ\{D-nպr9ۜ`psHOlmF#,>#ݵ'=caSM2:iO[ 4ؽ=Hu>F±')5ߋE:,=fM[ӛ4.Ż!^gݷe^vorM o֬%V ߀oGF _\1{:mbe Ofۮ6O^Hf3XKagypWkҒ~_}lX?vC)lq#ھ؝13]wj#Y^h1G˦s?^X{ts(|zN-.- k2;O 'Ɨp4ƽfox}xgSi_׼t>7M7vhz'Īx՜/_ĝifn)X+'I/[-}/ vϙ~s׎x?3a] u^8ڼMx' r:H=o:JZ(={}so~{F=h_!턛݄i4zFMZi4SoGnMa^i#˹x׹8S^9ŴNVE=7sHx/{f' ڃ߉my ,1g tpYFE17fD3۹0vZ)o'߷9'}W;kpV׭4z&vƉ;XMWvN]v_i qoZL[Iڧa,ښGAu^3{0΃iW~0/'\ogi^x-gyya]1=\iufHSMϦ&n4Vzձvgaٞ_N:7_ǽ[>!慯I|)'[Sn&M3;ZI8iK8Mgw;y˳DfNՓ{#=h 4צ'i1>Hs;{]龜0sjuP-jxIh<-+ԗuלiڳt{ͯi =gypXO:Ӕcꦽs޽imgh~3H\]"ORƫ=o vFz/>q~NY߬UÚ!]ґ򒦤'ݤ_~%w֯f =)-/uf,1=KqMKmVK;K9 o͸eͳŧo/ŷ5wtfՐ򓞵cUo2^}x9hlC^mkSېb[FX/_ ?"]R_zA^w-!$l_m㵻tW]wՏ/ eG-V!)Iݩcum,5O+s}ݙh'iLx7>'݄aIz _=3c[q$\ؤ]on½M?=|!)/qy퓝_~՟/y+6=iv b9񷇼xw%?/}2NM4;ߍvzzW~;^x?/= /=!/wl/b`Yؙ4M/Touy>4le!~klLҷ|Ayyol~OWƵs+x?oW^]zOӳzM~5߶WFٽsiXI;r^{rg_J/k%S|wꙙ]΁z3τ8/mVa4V-_˷v#qMquԼL7ah[дߐtj_84/K.ܻ-\gWmJS 6;ߋ.ӿ^{hbַڇ?:v,K>q>/nSri7ssי1b~1vt&vzK;O:j2N8-O.>/qVGmXL:HҾYƴ%ei3 xR^:7gv>/hvלR?qchͯ7vwO_soky-x=fFvR=Lv6Mc{B3snlʳ}¢y>6 =۴$^]!1A4w]YHqOizZp_Y>賈oou]IQz:O6;/ӳxhTCzh_l1jIo:>{bUËC~Lv.b^})}ŷX x|`v˳z)V7SI=:[dms^ݽtC܄2}@:#O׼Zlz֌OE=M]LwOz7K#ii7}ftߜ?Qifڏ:W/^ztı4~4RIs4'54gOf EؚMbweo&sҚ˹իxx?.[453QB:&{cg֜nlYzWꙙs%k:ͮ4 Sٛoez@͜Z_YY^^>kp^g|gu6_R-Y333Z~] ]3 xnX 㞭wSGoN˟IݻT/jKw&XU+rȣKozl[yͪ6_YӃ˦7~^g-~OIK_i]lŘzuL_W-WmQ_R{L̮}l|fߴ6--0i~Ӿܖ׸Vo56tםsM/\_HM56uqY.uڼ:K3ikh{Nu, ]<|=qOV{vٴ$cz&-/7ni1vnIoZºFo~Y_;s7iHn.ŘِΏv%M_|b1Դ:iFXPmj%m5BX2}[ -}k^Oytb^wNZ:/s~̌8/;K{~N]gk'hMhqͼ麼AڒpU뗽\iC4zZ='4!}pIwҳzsۇtf6k ]=y3mVvWêdzgxWKŋm74|w]:7GWMK2kwv_HWk'\[M՛N5}޺xBIsYif6'ő^3#ⲿ_~mڮ_[^Okh7k,y,žhO W{ɏ& ڡvN=7XՑhFğ?=K\ ͓e^kF_rW^\ZVA=MWb.Q ocWf1xz//AzG_xks 3䥥7vvC}!_jl9)7a4PY^\767 ntgJ+zyS ?֟v,O!tZǗ?:f_NXıΚvF\ԟW^ߋMiiʙWg440k7e5\mᷞkxSXϬ}y_OVM_'7r-e .?Pͱ{vp}Z}-w6n=~hK>b_ta5|L:k_rg2?y-fi&mk?VoGf?[ӻ{cJ/tzYivp=O<Ļ[=;rin:^׬{k^K.KwV1~n6ސƥ5,bv|4|+m|/=%-pcS՘6'ԃj Τ;l9q} nL7izIˬl ¼&&q~^-o~Ti32;ٰI+/߭ߏ-m\k׮'Wo嘽qWIQS]vj3^weWMԾt7N5+zYyٗU|⵱Fk&r(|fjv$a>x공/7J9KwN4V.Hy{>>֬[ ?5˗nz.uKM߮N󴞐=}[̵+Eǵ+ߋtΈu>Ƥ? 'ҸG>]j/8~V- mq^^%GIo} _McnKCʥ>55xjZhwI{g0׎ߜF?վbY^3HsnooڻVڷo$MT򳭍洴/Y߸'=/;N ׾]a{8_}5Ǧhj8 sY'={w3t~_wF⦹-7&ٗMf6eoZ˦ai}K_gٴn^OңgÔvXPIgk|~7}t5r[VŠ^_}HqհMc_{n3uwlcy]`kMoY\fn2 ze!޵O)į%mf7CH/Fg8tbk}]S܋-̕aS]zW7)e_fS^!S_@C^Q/)faߎUcٚy._fk>sҳ4Gص3]HKYҒq>n>鴞&N{lL巕V-tG{@W'cy54O w|ԋ^zc?.iكp5ߍu/^5o\ӯ剗ZCH8m-4=tK~hH55ooۺk:W 'WyB쾯gq_#տU{Km:{M]\~Ik_m7$aZoX.u{n)C:oI󞙏6bO%/^9>7C:IWkډ7c$˫~pllO:oJZ5gIy17鱵՗jIu?h#i_Bf^5yb>=xk|bfzO~՚k͡]z~tfxco+}_{hΓN;ᾜ'q՜/i qٙ^>|z7xh'ε7e/6M{x^^ ^ڑO[3Kyp(fęږV.q,^!GIOo/Nmi0MĮZ<%6z&l7|:S]MC 96-kG͞mfx_ͣkzjY4X_֪'I+j2Ҽ[ NjpͷݳVOz^~ߦqųap'?ؽLxY;xΤSxlMY>O'oO#-h1wyܛ㻯hȯ-t~5]7/aw/RW={o?_ܛOy+9iM5%>ihf׮Xߤ>P /WMAmpm4oՃđbL=} XMwax4?ЬX}j4kOH6;a&k?&;EzVxya.嵆l:;⮆Ҽ-\τ»bn7{έٙnycҾO7yy=Z /3oN=ڬO[n·x|fnmx)ݽD:3ebiYmg?˞'Cų/K;i^{c~ZlӗΗ7Ny&/ uR̪m3:Cr.7Fmw ɛ2#GWM|MIĚUY>nY{>۞W㿸憓8W}2a--C2Z\fVfO6]jX=kN<)omLVñ9ӾSXpK^9!7ViO5OLo97 m ֿ|}-4~7nոsZ -ůF?HҰv%ijwzHot[M]_t^4XꇝkՔ՛7.gfViԚs^1#̪s-~c4^h-!@w zyݗlvs}Z9z_S"~U¿wV」S ~a=i^ƿ/05V_;3D}X\v>vghnӾ[4+gpg#a>ع&I#aգ_8I!a/mLMO⭆М7!\̤uŧi<)?^8l(:RΪen5+ `v5qKy/KrS]kL V(gfjM$ ům/L8քO7,i7^]skmx #=vkk!\O/ղvi_ukޗ9ۚsOiM!I^NBMtO9FE!k7ߍkotN:5=fVMMғi8`gJm_v]3\y`i!UՖRO_xFӿ5sձfдG_>#ݯsXIy)̵ՑrRk^ʡm5R쬭WOk:o!= 鵯/I{wveEA]Xy~5]IRLrHCwyt\._NkQ٧͜|^w1o%ݯҳ=;mM c:i4z=7_\un֎Q/vX:N{Z7/y_zI:N3(rUO!oĬVv+q䝔j^fvO.45,ӸWR-kMb?ٹmM1 p|3i"ş|Һ=1I՗ 7- Yzn֚텩05녽fuϒl▶?qb `ͻ~jf[FCoMf}2j3y MZMwv΁zJzq4㯗4E3[=0_9',&mna/7J 5=4^||MO~ߘ7׫әŵ{'kO3q6:;-܋ewz-q4&\ޯ;[ۺkz v]Lh._:nIT#)KXƐkZ'];OangyaX.~#ot[Sd|1(jϚQr54-_jk+bғI3FK-~5Tk]V|k@x/jjTC;7{uM.P]6wbJo}jwx.G;_;JlC=4;lvKmͮŐO,͋;̗jmI3U}ˡ=jio'x3>3f0y I#Ζ~/&ϘY/ijpH=bt_\jw}85|+~oIe5%-=uvNDfh/۽o_xq{jXq~i0|?>Z^|inӸ[Li՛հً6~xQ-KJ eaxͯ-iy^|Au_ztYҘ_@xC1mJ1+jk8ֿÍljkg}_5׵sͽveՐbε-y>a5ܤjh7WR ,M YYVm7),}k/3=i-Iړj[kKKµq- 6JYH8>A/~kotz+ih3x7y[M Žuٽ/~\}#>f^}4-|:aEkL/3܋4܄Ζ֌]iS᧸H:oy۟MYWVm?3\jq޵/FS¡۞?j)yf6ߘw w Xh/_ftu>{ŒNj&|OqF'&ܔcMxΒnfiw4qwニCW~73H4/Q-%7'MwӋj{nJ=NXmniZ/1͢/)a-$Δt/-kj/8sc政浼CnگM28lƐ]gK[0Wz.X jmW?;:oZ9l/;86իvtqz%iJ:]& w}bo4K-ךּ[-|^:ik87ο"_-<]WjUұ5״Ӟl%I{4ޮ>/}OwԟCxWٳ/8_=g}ю}m-/aг4~;a, [NzS1/Iwz_w]n+fvgPJu}_x/&-p&qĽś',WAfZϑNg]3뛅zO^Ovpr?_27ſ u_zGl堾>5<һYY=i^8qKs㉫qޯޒvFثFC1[~Y{t\#k/NLq h;{Ԕn DMf{)eYTW{7a}ӶxRN}k9U];mRI ^έmV=-CiŵfG._7lX9&ܵZl)gr_fcvpfhqnLµn46M7%l5񮹷k7ӷk1rg ĭ]i,]/~3I8֏ igkW~6|6)fc~'ճtavՑRҒW_<ٵάߚi'O$m̖0գ˗et¼Hw}!&Mf_=KI/}o"/\)?a/w׾$>v)_|ix묖; ӃĽ~cZ~5߇KK9,q՗o+_}]{ҸffΓ3jHڍyo5w7{ͤyi?44̊rY34{jӾߒ4zţ9߀| @ƄzC;M_$lSVK+~Q=ixmZoM+vK/Gzo#i%4 jMI ť:Aմ{uNa{7Y߯vfv%_ q7m7M±m/sMG_?雰.q)[shf~OOjXsI1 3k&x඼agaxF1sn5{rwʹŮI/-ҷvG}}Jgvg^pcvq${ݑvfzo\ ]kّ֋M_wh8i}]XWựjy᡼c^|o{t/V0 ro`p߉y:ojxmlKnZ^&=Zo/Ŷo'=vƵ8nr/n3}'-/}?Ikz=aZĽ·}ms"ߴ\<{fG=0)Jfl-Fc#o06/in_rs/߮"7Y4^3Ih/= %/5o'̅MS4Ҍ>fN3j0OAzĽ^˧73}h<_0eWG=N<F_X\ڋa{rQi7Ks²Gzh?ƥqɫk^N?FI}5әO)Oۧ5NIղf^|v?efN/s9q%fscRzuJwk/-qj8/fZN{/͹X ^#q\Ҵ|Ȼ&g~'׫-qa'M/n!O~EG:oKCIEX:?pެ^_?'I%MkH7q)歺Wڥgvh8 tOs^e'inM3#m gZKof<}{յfHiS=/^N5,N؉#,kZ˞Ψgf1a;VZMNҴbZ 8.~62ڌ{uY_&-ݻ(=7`>lWﯝZn~zyX2q7fxzC;A\>y&Tf|kfW1L vʹO1B;_ަ%CM=l>/otwm(f[lۯu5mm_^Hўg_p?h9i4u\:.}Z?;hh5l}%Timy4']fCOgV͡ in>홝1V agyyմVքfnV_=Dߧy0mw;ko>;4 4OzgIK5R>O sii\/sJi } ^:#_=XR<$̗x7SLü1 ;Sd|5lg'RKk%mC}kk{/77i^$v8i]q1/s_,=6>']Y~5}/޷'q<}oZ/n}^wMz #ǯ3}.~~$Lii!/\LjjXMui$|걹T}zZ!mOz.}h_xY5 䋗womM'q6l)\WWMvWfv5魯ř.C=[-W_p,=_펒M޽Om-o>Y|ڟ.-4=kvMGn}Mz7qPbN4^S߉b6/wejXAMgfgkapRqts/ˋ~YxɻR g%aﮙR5gi>{c^:~ҵaך_;XrڙŸy1Iws VCsHϨ^;UwjZ|Vyղzgm˽[>X9RzKIcz7 syUkvg>ں.qN5UdgհO{6cij_|4>}jy㰹7i^luѼVLz>|e7hz{~^m52>H4%~G55zjk~!o9V7xoS-g #~M~ U^&[]sjI:I[i8'>4o~_RsʡX`7^iX z.7l3禧yqx/Ճc~_HKZT'4] j2&L+yk>YG^[o?x_ziȃe^K^r̮4cGF{Ntx G/}֎$2=/ZYzP]k>/mz '_inC4\q4:3egA3n:tt$}4[O^9Mk8×hI}Nw+f$o^Hl]MQ'm 頾S87շf2oKzh->}VW"vi%|Z{7q7}؆կFc망]35jzÖ۳Z }Xl)UWk- /zIzwt-/Ѹ5|sY&zk4Oy-2,>/~4cf4P͞!oOKK߁K )7l2O{Fs[^#oiѾ#/~k`g>zSi6=7fv76z|S 3/Y|7Ӈf^_NMJ|/yvڷƗx±}[;BWs]/]/ޅaQ]x!imoSӲzqq ;omfv)>,>foվ}6^9m7Ұ0[56 R>qiz n1Ѱ[m7xWն4;.|nǕzl1٬}nW4ƳK=Z_1_uy$K^x)*=f.5~I/ lߖovk#)Ca3 iM:LSn g􋿗?oΚ-pbco<}c)oih=MMǍ7 -f/=1;j!>voW_-T+x}7zD^nM\+-yߴO3^j /=4?멞5tF3kѮٴ,v1wĽڃę4NӸzvcX 4ȟ7e^Oӣ;kOi_ի?,ʿ=ӥp~¸q/9K ;ۙ6>/=vדig7뎬=MM{z&E~1kkCzhݥNޤ<z͂~O 2ڥ實vrRw1kwN[;kopco\`߫wIs( +zOM5Po[ovF{ˣ;rzL/;17~Τ/]j8cTH߫7w U٥ϓnI5Ny{|CECmo~1[#gx\ \ wݥ5oKwKs:3Qinws&bzM =Ր.ƪaYyky5HczOV c83b g ˋ׼K306w,iIk&kk6~z榳qRza&NܸrIj=Gk2^] 0/.,$c4^4^~ ^h5qM项XKZ'w a^,M7'q}L&sj1=4wikL _2{zr/sc-|^|ճvWN{tWll3ަI/AI~&W5y%m+vgۯAK!X;c8_j͵i8vu4}_gb_l/_;j[9MgӿrS'kmTc`,yhxo ݿS_krk-e5HOH±lozDsk{sn__)ޒAmyr^ݼ{ҷhgL-4Y0Zon>D_z9-42/W_soXtN02zѿj}]>0F{O獛^nC\MgIg { 1^3ߩ6,Y,=k4_9-KyFi#1.MѴ>BfF錴/Kqv/>KƬ9}/OIΒ~ڸyC^%~;WVuq_|[Mb&0 r_r^[O>gzefNIғf_|3itN,oS]8KՖ_{K=JV^^ӥ-=ԋu͝ sq'Uc5s><鿍}7r }H\OM{\bnһzR󪷽K#SǽYӳ{OJ53\/]y%p6:_=r_ޗwb8aY/,~ogwfKw[=Ҽޜxa/a=4֧=c|`vnqߜVON,o$ &GΨㅏ0Wڷ؝mxS-MߋΖ8WϭXMOҟr-3M}g>~Qmf.ձ|xVmW8[Jqԯ^vi56{^&1!ϑ?v},Hӯuv1IZysVRn{KK8)f0k.=s\1竧/~{ZyIs'&a^5l[{ ny9_AlNkn;A}KxviFW/8=Zoz^vg*Sߔjh^fE^j4ğ[7JfW֎Yo^5-};ZIG\[z57ݶ հ|ޗXs\r٪gi3iH $_z@qtN8-tҗ}IN7~ڇѴ&>]3LҰj1 vF¸/7,ISO'&__=cve܋W|{j^j/x_j]pwK1z).=z)R ><{G'inq-4ƗynLI sb iTKҲj4ͧ{@V>aa7mFW߁mO;w;>!r4<}qI/nuϚK-i sKKJ4/7pw#MfE{o.ŭ% 杞Uõc4ύ/hZ ½Kؾ5ein88㖏ڝ5>ٵ{z@u4 cyڻigtoz斻jZk6Q_k"ea{ڭKo ƿz$iB\kQMKz4aoύhfFۙb4S{K/W~#3m4.6^4nY×0V;{|O]'-LMIgӔyݓKH/c}1~hI:hGIg"TO&H;fg~6mv׌ޔGgIs8^,ů}{ԚYf|b[\$p\Is/jwMO#yr_Gx?[}IgӝN-Z4^L}wG6h0-셛/wK-x ҳ2/h&)#a,oF{4>oDҶBƿK3&$>Km^j5W#aܛ/5xW]&/ ֶ4^%4:NFҺ4'LI/{IqKy8,FjqQ^׸R_5=7}MGKIw⟵M؄w xL|ٍ%偄Fӿ'cYlMMa˱tޚm÷8=ݥ:kIڟ&G;^%W-mva'壆jMY,]fWk5PwfO<)i05YK'a/Ϸ}7uݴg 7m}֔wϚNO:.jZWOWg'k~yT=ַ0I#7_tZ{/FI3c;#/ 쟈Ŀ@/g/Zv[zE%8Zܿ􉴑?67cq}lsX = 65viXmVМ[g4- IGi{ղ8{_qMX/܋7Y6,mwK5EC3CJ_wE_I Z'i<[^KVKi妺W/ennn3好J 不fgHg~u4{؞9}/ Os/^xz^vwΨV[uV}ȧuu&n$гF~H/|)Թvݷub_g{`Hēօ}W83,qcC{n%/Xw];+fw̮o|_͉.ǒ.Ұfvq7oxyj KMvmio_t[{fjhvƳ'fl} ۴.N)n=If糧uvyyI/-Vٙ7GdGvLwx֛K)G=$%'SWrSMY}4{Ylo>k/GZ!tO ƑHcƭ4z:a6=Z.YlxmR i\/^6{I".k>cwE#5I['x=ߢA6 ctakvO.4yiYOXOkV7aO¤Dl4OskNfsՔ0'i#4{hܯ]Y)a4̵C}Oë4{\Gjuܻ8M_VL3w4zs̎$# 0H>7-Ƒ/̮%gm'ŏaQj;㵤aZ}4Lq43K9vZ/LMl>lIÚѱx)څٗUK^Es Zn3%\g6n5WMygn4M5P/p̾6oYä&wZw߬0:W_ɋfg8Ws;{kow~uٹ'mxb.._ߚҎI8ڴy:OK{hCk_\/Ӟ'-KG!, Һ֜^f}r8OO=2]I=KV3_GXWR¦CJ/sY>0oj]EՕxozO-7 {?Sh󓆄^e'Inr<;T'yxljM4|~H1-z._;o)xպnq7{hjZ7cqy0 kljsW'iዳ4}mq^W ISOߗߛcΗY'}/xS,^;roe83CpqqϵTiz9tfLuQoV57덳;t{⟥efpm,.N3 uNICc-VռhvhkG; iG=I1 |_4#ܥhjMheOŚOIKn4,U+e.N39i~;ka[v=)~~=4y/)uN.NCgC{f!65Ůr]cm~ӕ4ƷgqQ\^iKw:N}oOKW㱞2=hvy!o3{ѳ}^v޼HΥ졼uzavWe]Fb0ŕ𮆤޵ bn; No9Iq#N»wiz toHoԿ{v-%O+2h5:Һvq~$/Z矌OT/=3iKkNҞ֎I%et}搟&,[ܫͶiߩnÙx6m[s'w'&rn4ղSk.׉0VkN~nQ^ӵ~;v_:gl60 I=ZIZWO۾tz!__,&/0lmA&oP a5<:?/^ItX%14?.kDm_ չ0>p`xjr&XkS}!'LkƴWV[%)K^oz#-z\/^NM oI/fioW+~kJ8-/7 6,oyV͌ܓvRC]{7ahk]Ƶ4V_ů#$ /hzrM)oi^ykw]{ϫVz8KCܤ ;qwM5VzW]5czq'xEZ_|D|r~^ĹvE59ճ|bfukM+޽!ݛZؿosI 'm^a$ݛ^|2gjN_u6fbNZ=MǍ=M1fר/8&b.N^X6} ˱;dffzN3&|֎GW6ΕC^j^oLޖZ_W\=k/7fD^[5jTs]1uˮ6K՛8Z+i_}gúM񦆵?m1{Nxh/x[ŽhYmzY¦{yypwұzgpZ^vg&x3etklvg7{Mw1}X;3!o[~Io؋S1;fzD>Y 05;2ϽOߍOV|c~#/4/v_R'΀/?>pcfp__jsdk^ovkw2Y&-ݻ/wvfI߉}_+/q?%vl׼_{M}jjZ]oZZ_ĵfb^zq-_Z3OtSw}ʡWwxLmIjZY zxzq˓AIzb۬~y﫮6x4C_f<:'j57 fްēVGokN4uwM {ϗ>^5jJڿ$To#47⤝&܅Oz]|H1oTҼfaw}''~}$?sOxħkfzһJ)~-T1vuƏIKq g͠ղ߰_0a-Fz͎ٷ QN°~\\x E[]:ZZ4=>ɣh)b4x5mun,q^V3J}iӼ'ܤ'a}٥c9~Zí5,ksR~K5.;V4uvk֞|/i2zZ94Z}uq|O9Nt4^}MkhfGF;q}_LK;$kMOfwhk#4㗹γi3s3],/vojko&ҟttƄEԓ}H֋e3^6ޣ\!\tZ.+&|r1֎ŤKG7mf<ִ~ߖGwƿKѤcr{Fh=9[5n+¤Ɨ}moipRѱI:^v37JpמZ־ݜ=4=Z=mo՗˵zOL ҽ4kg5q嬷TK?ɯ䟦+[>M+'Í1skJzV]vw3^SE+g4{6|-΍_!&9P=knfNZZ\yat3~N+nq߹99Ք嫿FO1;G1ZO/Bsze7ܫ#[Ҙb&q,m-r%HNo1MwK|f 5iw`=2}4/UWZʷ~k\K?p%wݍUzwӟ//<3ؙ_fk4oę`H144yxzf3=\f/uĘ:׎,_y' IڟKy&n(iq7_ynzoֳ״گwݴ.,ᴺb\mkf˿ثg[mi[ Ko^47݄t6o#s勇<8zҸ('>'i)$4[ҷx!AM=:G޾-Żl c5~0$siITҗ.륟fV/uZLUsY>w4/6\s㻱}G1 ^_+izOh^Nj 66zNZh^yk3=lwkf}ZV.\,:xeb⶞Mw?L M a211K$wcu&ĵ'kIkysҷ4}ݣ~^~nO/=Z3o$R4Y6m/={W i~$/oqP^O1 qI1_X, ڛ{^-/i%OϦ7W=e[yο 6G7ճ7IX]u.uZ(/SMwBe{}xz顼}nYKb/--.y[똝Xfg7+fk>V鐗޽7{vZJEnoڬ6>c>mMO{k\o/>aXz)gHz :knƃi|ڿ[CM7PLl:kh'^|r߻XO$>R!I܆OuQa-N +\mzo+i[:/-/W&-OmƫsIڗ'V}no:hnro[sM/}[՗T{}_;hNp vHy4gz7k8T͋/[m^}}HZ "iZ OW:4'HC{`=i0a r6{aM[N5uQ Kc|!KFOäixToش7aQ\"' پzߩ o7m$ܵӛGw+a4>Zlw!a%MTZGJIzkZwO1f&ܯ G5C~Hz֗߉#ʹ/mOQM D\U۫v7'a}}YFަzoŴ+Oaڝ[PO;&ix yDezb[Og=m쮵cԹ|My9@"_uz_w$IKL 9zX85wd͝mbni5KWzou^ΆMۗUݥ8ұ)$/\ H|Ncb'W{zZN|1^w<żN~ޖ'ұkvcy.Gl>{|zKikpo5^ڭմ&ݴcCwvY jnyF}_>4ސqu--@ E5 z!fv aP:f)0nq7~V=)vhm2I a;O~sY/^=J5W/j\˃mxp ̮̓RN{3<m[ܽ'=~5ҷjKmhw^fGf Ǥigo9)}_fߴ6ߥ?yVo}n8RduRl#&~/8h#,ՏIٕ'KMj[9鼟ɿ/;hkc4/]y˧Vsi\oՒϫ5ϔt!>% k\>^,[/VEsMZoKc9Z^M5aPMw9Ut~YƷfOZmyb$\3_Y[ȏ%Z'M/ŐU3{k;}54-K楸œ>ךźo4/?ıv:y+~f[חi;Ɨ:UKzOfwwIM7ojl{Cxg⾱oolnw'/Pϖ._j%4ı?5-:^mo#-eºz1IQixe86t{=4g;GMhS zݴ_?w3>Z\RwM%_VΗ 㱵7axXhln3T_;?.MWvv0K/^Kk&}L.'Ŭ:M4?]ͣ%fcB4M +;Kv'Uhotޥ iipKHͤ}~顝%VƵoKh}|@zKV GT/$-ajoX=TzߚΦyyjX>M5ql{S[I]]{NbhOcj nII\+_-,ʵK_KZO>e^-`v(nW)@sY'=V_C =6X{܌wU q;C@6gx-f_ڱװv|K94:Ho_sntquW _-k'nt^/_|'`>[ꩤ9iHx/Z_nW]>&싳b[K.X{Ѹ1{O -mf&ғ4n\SM^$-Mۺ_X4_ˤq|8tZ -u[c5PGW֮ڹ-lӃ2 z_{Zm?}r=˧IC!lo+iJ1s;H;E~XKުx_|D)aِ/μ>B&-KKMo xfj1tjmy+y;D>MZם7$kfgƧӟiI;KWòzE{T\.7hFn4͡ŕ47-kF:f'.^Wl_>jh{0ݩTngkfrۡlܤ>Sl՝xo,ܯXk6;L5^=j.oh m`.?ϺosNZW[{zzjmbwq~Mf7RNk[yA:L]yؚLW!쫍>Hg}3r^ғcO;G kW5صl4M4~I# -nq"{O:i/om3oۦM Hy4ZmO/(u_ZF{#0N4Yzi%.,ݽC{KثnGh/=M9+uffx,vF7yx٫ӸK3[zՐjiw~& sz,qlg7w״_,ڑGZ/qž ̝FGzYz V¼w)v1^'MKɳktuo[MV'mth[L<kz. K3i1=mM_;Iڥbל̇vC>&4ao.T[ߛV{w?_?Ctʍ] RaschSampler/R/0000755000175100001440000000000011774617732013074 5ustar hornikusersRaschSampler/R/summary.RSctr.R0000744000175100001440000000055211774617732015753 0ustar hornikusers"summary.RSctr" <- function(object,...) { cat("\nCurrent sampler control specifications in ",deparse(substitute(object)),":\n", sep="") cat("\tburn_in =",object$burn_in,"\n") cat("\tn_eff =",object$n_eff,"\n") cat("\tstep =",object$step,"\n") cat("\tseed =",object$seed,"\n") cat("\ttfixed =",object$tfixed,"\n\n") invisible(object) } RaschSampler/R/rsunpack.R0000744000175100001440000000220011774617732015040 0ustar hornikusers"rsunpack" <- function(x,n,k,nwords,userfunc,...){ # check for NAs (-2^31 not defined in R) in simulated matrices # set value to 0 nas<-FALSE if (k>=32) { idx<-(1:length(x))[is.na(x)] # indexvector for NAs nas<-(length(idx)>0) x[idx]<-0 } t<-vector(length=n*k) # calls unpacking routine out<-.Fortran("unpack", as.integer(x), as.integer(nwords), mat=as.integer(t), as.integer(n), as.integer(k) ) m<-matrix(out$mat,nrow=n) # replace NAs with bitpattern corresponding to -2^31, # i.e., 0 0 0.... 0 1 if (nas) { idx1 <- ceiling(idx/nwords) # index for rows targetbyte <- idx%%nwords # which byte in row is affected last <- k%%32 # last column in targetbyte idx2 <- (targetbyte - 1*(last!=0))*32 + last # index for column m[idx1,idx2]<-1 } # calls user function to calculate statistic(s) RET<-userfunc(m,...) RET } RaschSampler/R/rsextrmat.R0000744000175100001440000000106311774617732015251 0ustar hornikusers"rsextrmat" <- function(RSobj, mat.no = 1) { obj.name <- deparse(substitute(RSobj)) if (!(class(RSobj)=="RSmpl" || class(RSobj)=="RSmplext")){ err.text<-paste(obj.name," is not a sample object - see help(\"rsextrobj\")",sep ="",collapse="") stop(err.text) } if(mat.no > RSobj$n_tot) stop("\n\tElement ",mat.no," not available (",obj.name," has ", RSobj$n_tot, " elements).") obj<-rsextrobj(RSobj, start = mat.no, end = mat.no) RET<-rstats(obj, function(x) matrix(x, nrow = obj$n))[[1]] RET } RaschSampler/R/rsampler.R0000744000175100001440000000260311774617732015046 0ustar hornikusers"rsampler" <- function(inpmat,controls=rsctrl()){ if (!(class(controls)=="RSctr")) stop("controls is not a control object - see help(\"rsctrl\")") n <- dim(inpmat)[1] k <- dim(inpmat)[2] burn_in <- controls$burn_in n_eff <- controls$n_eff step <- controls$step seed <- controls$seed tfixed <- controls$tfixed if (seed == 0) { # generates random seed in the range [536870911,772830910] seed <- as.integer(as.double(format(Sys.time(), "%H%M%OS3"))*1000) + 2**29 - 1 } # allocation of memory for simulated matrices vec<-vector( length = (n_eff+1)*n*trunc((k+31)/32) ) ier<-0 # calls the external Fortran subroutine sampler # simulated matrices are returned in vec RET<-.Fortran("sampler", n=as.integer(n), k=as.integer(k), inpmat=as.integer(inpmat), tfixed=as.logical(tfixed), burn_in=as.integer(burn_in), n_eff=as.integer(n_eff), step=as.integer(step), seed=as.integer(seed), outvec=as.integer(vec), ier=as.integer(ier) ) n_tot <- n_eff+1 if (RET$ier>0) { rserror(RET$ier) } else { RET<-c(RET[1:8],n_tot=n_eff+1,RET[9:10]) class(RET)<-"RSmpl" RET } } RaschSampler/R/summary.RSmplext.R0000744000175100001440000000075011774617732016474 0ustar hornikusers"summary.RSmplext" <- function(object,...) { cat("\nStatus of extracted object ",deparse(substitute(object)),":\n", sep="") cat("\tn =",object$n,"\n") cat("\tk =",object$k,"\n") cat("\tburn_in =",object$burn_in,"\n") cat("\tn_eff =",object$n_eff,"\n") cat("\tstep =",object$step,"\n") cat("\tseed =",object$seed,"\n") cat("\ttfixed =",object$tfixed,"\n") cat("\tn_tot =",object$n_tot,"\n") cat("\toutvec contains",length(object$outvec),"elements\n\n") } RaschSampler/R/phi.range.R0000744000175100001440000000023111774617732015067 0ustar hornikusers"phi.range" <- function(mat){ cmat<-cor(mat)+diag(NA,ncol(mat)) ma<-max(cmat,na.rm=TRUE) mi<-min(cmat,na.rm=TRUE) RET <- ma-mi RET } RaschSampler/R/rsctrl.R0000744000175100001440000000074611774617732014540 0ustar hornikusers"rsctrl" <- function(burn_in=100, n_eff=100, step=16, seed=0, tfixed=FALSE) { ier <- 0 if(n_eff < 0 | n_eff > 8191) ier <- ier + 4 if(burn_in < 0) ier <- ier + 8 if(step <= 0) ier <- ier + 16 if(seed < 0 | seed > (2**31-2)) ier <- ier + 128 if (ier>0) rserror(ier) RET<-list(burn_in=burn_in, n_eff=n_eff, step=step, seed=seed, tfixed=tfixed) class(RET)<-"RSctr" RET } RaschSampler/R/rserror.R0000744000175100001440000000162511774617732014722 0ustar hornikusers"rserror" <- function(err) { bin2int<-function(x){ r<-vector(mode="integer",length=0) while(x>1){ r<-c(x%%2,r) x<-floor(x/2) } r<-c(1,r) rev(r) } errortxt<-c("\tn < 0 or n > 4096\n", "\tk < 0 or k > 128\n", "\tn_eff < 0 or n_eff > 8191\n", "\tburn_in < 0\n", "\tstep <= 0\n", "\tone or more entries in the input matrix are different from 1 or 0\n", "\tthe input matrix is of Guttman form; the sample space has only one element\n", "\tseed < 0 or seed > 2147483646\n" ) if (err == 0) { cat("\nno error\n") } else { x <- bin2int(err) errstring <- paste("\n",paste(errortxt[(1:length(x))*x],sep="",collapse="")) stop(errstring, call.=FALSE) } invisible(err) } RaschSampler/R/rstats.R0000744000175100001440000000141511774617732014541 0ustar hornikusers"rstats" <- function(RSobj,userfunc,...) { obj.name <- deparse(substitute(RSobj)) if (!(class(RSobj)=="RSmpl" || class(RSobj)=="RSmplext")){ err.text<-paste(obj.name," is not a sample object - see help(\"rsextrobj\")",sep ="",collapse="") stop(err.text) } # extracts simulated matrices into three dimensional array sim n_tot <- RSobj$n_tot n <- RSobj$n k <- RSobj$k nwords <- c(trunc((k+31)/32)) # store coded simulated matrices in list with n_eff+1 elements sim<-split(RSobj$outvec,gl(n_tot,n*nwords)) # decode simulated matrices and apply user function #RET<-unlist(lapply(sim,rsunpack,n,k,nwords,userfunc)) RET<-lapply(sim,rsunpack,n,k,nwords,userfunc,...) RET } RaschSampler/R/rsextrobj.R0000744000175100001440000000144411774617732015245 0ustar hornikusers"rsextrobj" <- function(RSobj,start=1,end=8192) { obj.name <- deparse(substitute(RSobj)) if (!(class(RSobj)=="RSmpl" || class(RSobj)=="RSmplext")){ err.text<-paste(obj.name,"not a sample object - see help(\"rsextrobj\")",sep ="",collapse="") stop(err.text) } n_tot <- RSobj$n_tot if (end>n_tot) end<-n_tot n <- RSobj$n k <- RSobj$k nwords <- c(trunc((k+31)/32)) objnew <- RSobj l_one_mat <- n*nwords b <- (start-1)*l_one_mat+1 e <- end*l_one_mat objnew$outvec <- RSobj$outvec[b:e] objnew$n_tot <- end-start+1 if (start==1) { objnew$n_eff <- objnew$n_tot - 1 } else { objnew$n_eff <- objnew$n_tot } class(objnew)="RSmplext" RET<-objnew RET } RaschSampler/R/summary.RSmpl.R0000744000175100001440000000075211774617732015755 0ustar hornikusers"summary.RSmpl" <- function(object,...) { cat("\nStatus of object",deparse(substitute(object)),"after call to RSampler:\n") cat("\tn =",object$n,"\n") cat("\tk =",object$k,"\n") cat("\tburn_in =",object$burn_in,"\n") cat("\tn_eff =",object$n_eff,"\n") cat("\tstep =",object$step,"\n") cat("\tseed =",object$seed,"\n") cat("\ttfixed =",object$tfixed,"\n") cat("\tn_tot =",object$n_tot,"\n") cat("\toutvec contains",length(object$outvec),"elements\n\n") } RaschSampler/MD50000644000175100001440000000255412554164221013174 0ustar hornikusers0f3a11ff77d31df178fcc6dc3d1918f3 *DESCRIPTION b0e4b24c80fcfc422df602bafcf89ecb *NAMESPACE 37383b86a5a2d72e3c196556e3eaf09c *R/phi.range.R da2aaf90411032f77c125a1802a17c9f *R/rsampler.R 58c7acdcb60e5fef2d4bad8ff79f3751 *R/rsctrl.R 96f255d9169d2c9b8b0121c457df43de *R/rserror.R 84af75ad5133358a996b4f1334328453 *R/rsextrmat.R 7b5ffeb67fffbae19d8cea59e7d000e3 *R/rsextrobj.R f5999b30f71b9b9e1635a2167d217c9d *R/rstats.R e1414590f20a4138cd04abda1c5066f4 *R/rsunpack.R ad5211ab843e04ee7e0564032f0a5f1e *R/summary.RSctr.R bb58a9a1c07452f36f935b101a61e52a *R/summary.RSmpl.R c164f97f003fe597393346ebc34ed98f *R/summary.RSmplext.R bac1d538a1aef726f38615aa18f3d48a *data/xmpl.rda 1fc251a885b608884a2e4b3240d92259 *data/xmplbig.rda d3482a367fc1f9aaa27ec2e1618115c4 *man/RSctr.Rd a0bfdc2c3a0156ea4cd2bcbdee7dd8e8 *man/RSmpl.Rd 8ce58747a871df82a3bade4e57805245 *man/RaschSampler-package.Rd 37b00ccd880232d2f889b84dc84c5dc8 *man/phi.range.Rd ade46dd1d3d391419c9bfc573620a3d0 *man/rsampler.Rd 61388178ae969add6843305c46c1d72a *man/rsctrl.Rd be376726ca2bda6d77acd30bef8d8461 *man/rsextrmat.Rd 7e389f288d5df3a16b605b283b7b36af *man/rsextrobj.Rd 9b4c576feee94237ec6a42cc8842f30e *man/rstats.Rd afa498436f176dffc611229bd827ecb1 *man/summary.RSctr.Rd 158cee36a240d52bde1e3d9a6f90e53f *man/summary.RSmpl.Rd 3f44b380fea685a7662ffd351a4fe6ac *man/xmpl.Rd fd59ab36845ad7023f529dbd04660c40 *src/RaschSampler.f90 RaschSampler/DESCRIPTION0000744000175100001440000000142212554164221014364 0ustar hornikusersPackage: RaschSampler Type: Package Title: Rasch Sampler Version: 0.8-8 Date: 2015-07-23 Authors@R: c(person(given="Patrick", family="Mair", email="mair@fas.harvard.edu", role=c("cre","aut")), person(given="Reinhold", family="Hatzinger", role=c("aut")), person(given=c("Norman", "D."), family="Verhelst", email="norman.verhelst@cito.nl", role=c("aut"))) Imports: stats Depends: R (>= 3.0.0) Description: MCMC based sampling of binary matrices with fixed margins as used in exact Rasch model tests. License: GPL-2 NeedsCompilation: yes Packaged: 2015-07-23 12:32:11 UTC; patrick Author: Patrick Mair [cre, aut], Reinhold Hatzinger [aut], Norman D. Verhelst [aut] Maintainer: Patrick Mair Repository: CRAN Date/Publication: 2015-07-23 15:13:53 RaschSampler/man/0000755000175100001440000000000012554157173013441 5ustar hornikusersRaschSampler/man/rsextrmat.Rd0000744000175100001440000000146111774617732015771 0ustar hornikusers\name{rsextrmat} \alias{rsextrmat} \title{Extracting a Matrix} \description{ Convenience function to extract a matrix. } \usage{ rsextrmat(RSobj, mat.no = 1) } \arguments{ \item{RSobj}{object as obtained from using \code{rsampler} or \code{rsextrobj}} \item{mat.no}{number of the matrix to extract from the sample object.} } \value{ One of the matrices (either the original or a sampled matrix) } \seealso{\code{\link{rsampler}}, \code{\link{rsextrobj}},\code{\link{rstats}},} \examples{ ctr <- rsctrl(burn_in = 10, n_eff = 3, step=10, seed = 0, tfixed = FALSE) mat <- matrix(sample(c(0,1), 50, replace = TRUE), nr = 10) all_m <- rsampler(mat, ctr) summary(all_m) # extract the third sampled matrix (here the fourth) third_m <- rsextrmat(all_m, 4) head(third_m) } \keyword{misc} RaschSampler/man/rsctrl.Rd0000744000175100001440000000655711774617732015264 0ustar hornikusers\name{rsctrl} \alias{rsctrl} \title{Controls for the Sampling Function} \description{ Various parameters that control aspects of the random generation of binary matrices. } \usage{ rsctrl(burn_in = 100, n_eff = 100, step = 16, seed = 0, tfixed = FALSE) } \arguments{ \item{burn_in}{ the number of sampled matrices to come close to a stationary distribution. The default is \code{burn_in = 100}. (The actual number is \code{2 * burn_in * step}.) } \item{n_eff}{ the number of effective matrices, i.e., the number of matrices to be generated by the sampling function \code{\link{rsampler}}. \code{n_eff} must be positive and not larger than 8191 (2\eqn{\mbox{\textasciicircum}}{^}13-1). The default is \code{n_eff = 100}. } \item{step}{controls the number number of void matrices generated in the the burn in process and when effective matrices are generated (see note below). The default is \code{step = 16}. } \item{seed}{ is the indicator for the seed of the random number generator. Its value must be in the range 0 and 2147483646 (2**31-2). If the value of seed equals zero, a seed is generated by the sampling function \code{\link{rsampler}} (dependent on the system's clock) and its value is returned in the output. If seed is not equal to zero, its value is used as the seed of the random number generator. In that case its value is unaltered at output. The default is \code{seed = 0}. } \item{tfixed}{logical, -- specifies if in case of a quadratic input matrix the diagonal is considered fixed (see note below). The default is \code{tfixed = FALSE}. } } \value{ A list of class \code{RSctr} with components \code{burn_in}, \code{n_eff}, \code{step}, \code{seed}, \code{tfixed}., } \note{ If one of the components is incorrectly specified the error function \code{rserror} is called and some informations are printed. The ouput object will not be defined.\cr\cr The specification of \code{step} controls the sampling algorithm as follows: If , e.g., \code{burn_in = 10}, \code{n_eff = 5}, and \code{step = 2}, then during the burn in period \code{step * burn_in = 2 * 10} matrices are generated. After that, \code{n_eff * step = 5 * 2} matrices are generated and every second matrix of these last ten is returned from \code{link{rsampler}}.\cr\cr \code{tfixed} has no effect if the input matrix is not quadratic, i.e., all matrix elements are considered free (unrestricted). If the input matrix is quadratic, and \code{tfixed = TRUE}, the main diagonal of the matrix is considered as fixed. On return from \code{link{rsampler}} all diagonal elements of the generated matrices are set to zero. This specification applies, e.g., to analyzing square incidence matrices representing binary asymmetric relation in social network theory.\cr\cr The summary method (\code{\link{summary.RSctr}}) prints the current definitions. \cr } \seealso{\code{\link{rsampler}} } \examples{ ctr <- rsctrl(n_eff = 1, seed = 987654321) # specify new controls summary(ctr) \dontrun{ ctr2 <- rsctrl(step = -3, n_eff = 10000) # incorrect specifications } } \keyword{misc} RaschSampler/man/xmpl.Rd0000744000175100001440000000112211774617732014712 0ustar hornikusers\name{xmpl} \alias{xmpl} \alias{xmplbig} \docType{data} \title{Example Data} \description{ Ficitious data sets - matrices with binary responses } \usage{data(xmpl)} \format{ The format of \code{xmpl} is:\cr 300 rows (referring to subjects) \cr 30 columns (referring to items) \cr The format of \code{xmplbig} is:\cr 4096 rows (referring to subjects) \cr 128 columns (referring to items) \cr \code{xmplbig} has the maximum dimensions that the RaschSampler package can handle currently. } \examples{ data(xmpl) print(head(xmpl)) } \keyword{datasets} RaschSampler/man/rsampler.Rd0000744000175100001440000000526711774617732015575 0ustar hornikusers\name{rsampler} \alias{rsampler} \title{Sampling Binary Matrices} \description{ The function implements an MCMC algorithm for sampling of binary matrices with fixed margins complying to the Rasch model. Its stationary distribution is uniform. The algorithm also allows for square matrices with fixed diagonal. } \usage{ rsampler(inpmat, controls = rsctrl()) } \arguments{ \item{inpmat}{ A binary (data) matrix with \eqn{n} rows and \eqn{k} columns.} \item{controls}{An object of class \code{\link{RSctr}}. If not specified, the default parameters as returned by function \code{\link{rsctrl}} are used.} } \details{ \code{rsampler} is a wrapper function for a Fortran routine to generate binary random matrices based on an input matrix. On output the generated binary matrices are integer encoded. For further processing of the generated matrices use the function \code{\link{rstats}}. } \value{ A list of class \code{\link{RSmpl}} with components \item{n}{number of rows of the input matrix} \item{k}{number of columns of the input matrix} \item{inpmat}{the input matrix} \item{tfixed}{\code{TRUE}, if diagonals of \code{inpmat} are fixed} \item{burn_in}{length of the burn in process} \item{n_eff}{number of generated matrices (effective matrices)} \item{step}{controls the number number of void matrices generated in the the burn in process and when effective matrices are generated (see note in \code{\link{rsctrl}}). } \item{seed}{starting value for the random number generator} \item{n_tot}{number of matrices in \code{outvec}, \code{n_tot = n_eff + 1}} \item{outvec}{vector of encoded random matrices} \item{ier}{error code} } \references{Verhelst, N. D. (2008) An Efficient MCMC Algorithm to Sample Binary Matrices with Fixed Marginals. Psychometrika, Volume 73, Number 4} \author{Reinhold Hatzinger, Norman Verhelst} \note{ An element of \code{outvec} is a four byte (or 32 bits) integer. The matrices to be output are stored bitwise (some bits are unused, since a integer is used for every row of a matrix. So the number of integers per row needed equals (k+31)/32 (integer division), which is one to four in the present implementation since the number of columns and rows must not exceed 128 and 4096, respectively.\cr The summary method (\code{\link{summary.RSmpl}}) prints information on the content of the output object. } \seealso{\code{\link{rsctrl}}, \code{\link{rstats}} } \examples{ data(xmpl) ctr<-rsctrl(burn_in=10, n_eff=5, step=10, seed=0, tfixed=FALSE) res<-rsampler(xmpl,ctr) summary(res) } \keyword{misc} RaschSampler/man/summary.RSmpl.Rd0000744000175100001440000000154111774617732016470 0ustar hornikusers\name{summary.RSmpl} \alias{summary.RSmpl} \alias{summary.RSmplext} \title{Summary Methods for Sample Objects} \description{ Prints a summary list for sample objects of class \code{\link{RSmpl}} and \code{\link{RSmplext}}. } \usage{ \method{summary}{RSmpl}(object, ...) \method{summary}{RSmplext}(object, ...) } \arguments{ \item{object}{object as obtained from \code{rsampler} or \code{rsextrobj} } \item{\dots}{ potential further arguments (ignored) } } \details{ Describes the status of an sample object. } \seealso{\code{\link{rsampler}}, \code{\link{rsextrobj}} } \examples{ ctr <- rsctrl(burn_in = 10, n_eff = 3, step=10, seed = 0, tfixed = FALSE) mat <- matrix(sample(c(0,1), 50, replace = TRUE), nr = 10) all_m <- rsampler(mat, ctr) summary(all_m) some_m <- rsextrobj(all_m, 1, 2) summary(some_m) } \keyword{misc} RaschSampler/man/phi.range.Rd0000744000175100001440000000115211774617732015610 0ustar hornikusers\name{phi.range} \alias{phi.range} \title{ Example User Function } \description{ Calculates the \eqn{R_\phi} statistic, i.e., the range of the inter-column correlations (\eqn{\phi}-coefficients) for a binary matrix. } \usage{ phi.range(mat) } \arguments{ \item{mat}{ a binary matrix } } \value{ the range of the inter-column correlations } \examples{ ctr <- rsctrl(burn_in = 10, n_eff = 5, step=10, seed = 123, tfixed = FALSE) mat <- matrix(sample(c(0,1), 50, replace = TRUE), nr = 10) rso <- rsampler(mat, ctr) rso_st <- rstats(rso,phi.range) print(unlist(rso_st)) } \keyword{misc} RaschSampler/man/RSctr.Rd0000744000175100001440000000306111774617732014773 0ustar hornikusers\name{RSctr} \alias{RSctr} \title{Control Object} \description{ The object of class \code{RSctr} represents the control parameter specification for the sampling function \code{\link{rsampler}}. } \value{ A legitimate \code{\link{RSctr}} object is a list with components \item{burn_in}{ the number of matrices to be sampled to come close to a stationary distribution. } \item{n_eff}{ the number of effective matrices, i.e., the number of matrices to be generated by the sampling function \code{\link{rsampler}}. } \item{step}{ controls the number number of void matrices generated in the the burn in process and when effective matrices are generated (see note in \code{\link{rsctrl}}). } \item{seed}{ is the indicator for the seed of the random number generator. If the value of seed at equals zero, a seed is generated by the sampling function \code{\link{rsampler}} } \item{tfixed}{ \code{TRUE} or \code{FALSE}. \code{tfixed = TRUE} has no effect if the input matrix is not quadratic, i.e., all matrix elements are considered free (unrestricted). If the input matrix is quadratic, and \code{tfixed = TRUE}, the main diagonal of the matrix is considered as fixed. } } \section{Generation}{ This object is returned from function \code{rsctrl}. } \section{Methods}{ This class has a method for the generic \code{summary} function. } \seealso{\code{\link{rsctrl}} } \keyword{misc} RaschSampler/man/RSmpl.Rd0000744000175100001440000000361411774617732014777 0ustar hornikusers\name{RSmpl} \alias{RSmpl} \alias{RSmplext} \title{Sample Objects} \description{ The objects of class \code{RSmpl} and \code{RSmplext} contain the original input matrix, the generated (encoded) random matrices, and some information about the sampling process. } \value{ A list of class \code{RSmpl} or \code{RSmplext} with components \item{n}{number of rows of the input matrix} \item{k}{number of columns of the input matrix} \item{inpmat}{the input matrix} \item{tfixed}{\code{TRUE}, if diagonals of \code{inpmat} are fixed} \item{burn_in}{length of the burn in process} \item{n_eff}{number of generated matrices (effective matrices)} \item{step}{controls the number number of void matrices generated in the the burn in process and when effective matrices are generated (see note in \code{\link{rsctrl}}). } \item{seed}{starting value for the random number generator} \item{n_tot}{number of matrices in \code{outvec}.} \item{outvec}{vector of encoded random matrices} \item{ier}{error code (see below)} } \note{By default, all generated matrices plus the original matrix (in position 1) are contained in \code{outvec}, thus \code{n_tot = n_eff + 1}. If the original matrix is not in \code{outvec} then \code{n_tot = n_eff}.\cr\cr If \code{ier} is 0, no error was detected. Otherwise use the error function \code{rserror(ier)} to obtain some informations.\cr\cr For saving and loading objects of class \code{RSmpl} or \code{RSmplext} see the example in \code{\link{rsextrobj}}. } \section{Generation}{ These classes of objects are returned from \code{rsampler} and \code{rsextrobj}. } \section{Methods}{ Both classes have methods for the generic \code{summary} function. } \seealso{\code{\link{rsampler}}, \code{\link{rsextrobj}} } \keyword{misc} RaschSampler/man/rstats.Rd0000744000175100001440000000457611774617732015272 0ustar hornikusers\name{rstats} \alias{rstats} \title{Calculating Statistics for the Sampled Matrices} \description{ This function is used to calculate user defined statistics for the (original and) sampled matrices. A user defined function has to be provided. } \usage{ rstats(RSobj, userfunc, ...) } \arguments{ \item{RSobj}{object as obtained from using \code{\link{rsampler}} or \code{\link{rsextrobj}} } \item{userfunc}{a user defined function which performs operations on the (original and) sampled matrices. The first argument in the definition of the user function must be an object of type matrix.} \item{...}{further arguments, that are passed to the user function} } \value{ A list of objects as specified in the user supplied function } \note{The encoded matrices that are contained in the input object \code{RSobj} are decoded and passed to the user function in turn. If \code{RSobj} is not an object obtained from either \code{\link{rsampler}} or \code{\link{rsextrobj}} or no user function is specified an error message is printed. A simple user function, \code{\link{phi.range}}, is included in the RaschSampler package for demonstration purposes.\cr \code{rstats} can be used to obtain the 0/1 values for any of the sampled matrices (see second example below). Please note, that the output from the user function is stored in a list where the number of components corresponds to the number of matrices passed to the user function (see third example). } \seealso{\code{\link{rsampler}}, \code{\link{rsextrobj}} } \examples{ ctr <- rsctrl(burn_in = 10, n_eff = 5, step=10, seed = 12345678, tfixed = FALSE) mat <- matrix(sample(c(0,1), 50, replace = TRUE), nr = 10) rso <- rsampler(mat, ctr) rso_st <- rstats(rso,phi.range) unlist(rso_st) # extract the third generated matrix # (here, the first is the input matrix) # and decode it into rsmat rso2 <- rsextrobj(rso,4,4) summary(rso2) rsmat <- rstats(rso2, function(x) matrix(x, nr = rso2$n)) print(rsmat[[1]]) # extract only the first r rows of the third generated matrix mat<-function(x, nr = nr, r = 3){ m <- matrix(x, nr = nr) m[1:r,] } rsmat2 <- rstats(rso2, mat, nr=rso$n, r = 3) print(rsmat2[[1]]) # apply a user function to the decoded object print(phi.range(rsmat[[1]])) } \keyword{misc} RaschSampler/man/RaschSampler-package.Rd0000744000175100001440000001023012554157173017702 0ustar hornikusers\name{RaschSampler-package} \alias{RaschSampler} \docType{package} \title{Rasch Sampler Package} \description{ The package implements an MCMC algorithm for sampling of binary matrices with fixed margins complying to the Rasch model. Its stationary distribution is uniform. The algorithm also allows for square matrices with fixed diagonal.\cr Parameter estimates in the Rasch model only depend on the marginal totals of the data matrix that is used for the estimation. From this it follows that, if the model is valid, all binary matrices with the same marginals as the observed one are equally likely. For any statistic of the data matrix, one can approximate the null distribution, i.e., the distribution if the Rasch model is valid, by taking a random sample from the collection of equally likely data matrices and constructing the observed distribution of the statistic. One can then simply determine the exceedence probability of the statistic in the observed sample, and thus construct a non-parametric test of the Rasch model. The main purpose of this package is the implementation of a methodology to build nonparametric tests for the Rasch model. \cr In the context of social network theories, where the structure of binary asymmetric relations is studied, for example, person \eqn{a} esteems person \eqn{b}, which correponds to a 1 in cell \eqn{(a, b)} of the associated adjacency matrix. If one wants to study the distribution of a statistic defined on the adjacency matrix and conditional on the marginal totals, one has to exclude the diagonal cells from consideration, i.e., by keeping the diagonal cells fixed at an arbitrary value. The \code{RaschSampler} package has implemented an appropriate option, thus it can be also used for sampling random adjacency matrices with given marginal totals. } \details{ \tabular{ll}{% Package:\tab RaschSampler\cr Type: \tab Package\cr Version:\tab 0.8-8\cr Date: \tab 2015-07-23\cr License:\tab GNU GPL 2, June 1991\cr% } The user has to supply a binary input matrix. After defining appropriate control parameters using \code{\link{rsctrl}} the sampling function \code{\link{rsampler}} may be called to obtain an object of class \code{\link{RSmpl}} which contains the generated random matrices in encoded form. After defining an appropriate function to operate on a binary matrix (e.g., calculate a statistic such as \code{\link{phi.range}}) the application of this function to the sampled matrices is performed using \code{\link{rstats}}. Prior to applying the user defined function, \code{\link{rstats}} decodes the matrices packed in the \code{\link{RSmpl}}-object.\cr The package also defines a utility function \code{\link{rsextrobj}} for extracting certains parts from the \code{\link{RSmpl}}-object resulting in an object of class \code{\link{RSmplext}}. Both types of objects can be saved and reloaded for later use.\cr Summary methods are available to print information on these objects, as well as on the control object \code{\link{RSctr}} which is obtained from using \code{\link{rsctrl}} containing the specification for the sampling routine. } \author{Reinhold Hatzinger, Patrick Mair, Norman D. Verhelst Maintainer: } \references{ Verhelst, N. D. (2008) An Efficient MCMC Algorithm to Sample Binary Matrices with Fixed Marginals. Psychometrika, Volume 73, Number 4\cr Verhelst, N. D., Hatzinger, R., and Mair, P. (2007) The Rasch Sampler. Journal of Statistical Software, Vol. 20, Issue 4, Feb 2007 } \note{The current implementation allows for data matrices up to 4096 rows and 128 columns. This can be changed by setting \code{nmax} and \code{kmax} in \code{RaschSampler.f90} to values which are a power of 2. These values should also be changed in \code{rserror.R}. For convenience, we reuse the Fortran code of package version 0.8-1 which cicumvents the compiler bug in Linux distributions of GCC 4.3. In case of compilation errors (due to a bug in Linux distributions of GCC 4.3) please use \code{RaschSampler.f90} from package version 0.8-1 and change \code{nmax} and \code{kmax} accordingly (or use GCC 4.4).} \keyword{package} RaschSampler/man/rsextrobj.Rd0000744000175100001440000000501411774617732015760 0ustar hornikusers\name{rsextrobj} \alias{rsextrobj} \title{Extracting Encoded Sample Matrices} \description{ Utility function to extract some of the generated matrices, still in encoded form. } \usage{ rsextrobj(RSobj, start = 1, end = 8192) } \arguments{ \item{RSobj}{object as obtained from using \code{rsampler}} \item{start}{number of the matrix to start with. When specifying 1 (the default value) the original input matrix is included in the output object. } \item{end}{last matrix to be extracted. If \code{end} is not specified, all matrices from \code{RSobj} are extracted (the maximal value is 8192, see \code{rsctrl}). If \code{end} is larger than the number of matrices stored in \code{RSobj}, \code{end} is set to the highest possible value (i.e., \code{n_tot}). } } \value{ A list of class \code{\link{RSmpl}} with components \item{n}{number of rows of the input matrix} \item{k}{number of columns of the input matrix} \item{inpmat}{the input matrix} \item{tfixed}{\code{TRUE}, if diagonals of \code{inpmat} are fixed} \item{burn_in}{length of the burn in process} \item{n_eff}{number of generated matrices (effective matrices)} \item{step}{controls the number number of void matrices generated in the burn in process and when effective matrices are generated (see note in \code{\link{rsctrl}}). } \item{seed}{starting value for the random number generator} \item{n_tot}{number of matrices in \code{outvec}.} \item{outvec}{vector of encoded random matrices} \item{ier}{error code} } \note{By default, all generated matrices plus the original matrix (in position 1) are contained in \code{outvec}, thus \code{n_tot = n_eff + 1}. If the original matrix is not in \code{outvec} then \code{n_tot = n_eff}.\cr For saving and loading objects of class \code{RSobj} see the example below. For extracting a decoded (directly usable) matrix use \code{\link{rsextrmat}}. } \seealso{\code{\link{rsampler}}, \code{\link{rsextrmat}} } \examples{ ctr <- rsctrl(burn_in = 10, n_eff = 3, step=10, seed = 0, tfixed = FALSE) mat <- matrix(sample(c(0,1), 50, replace = TRUE), nr = 10) all_m <- rsampler(mat, ctr) summary(all_m) some_m <- rsextrobj(all_m, 1, 2) summary(some_m) \dontrun{ save(some_m, file = "some.RSobj") some_new <- load("some.RSobj") summary(some_new) } } \keyword{misc} RaschSampler/man/summary.RSctr.Rd0000744000175100001440000000101711774617732016466 0ustar hornikusers\name{summary.RSctr} \alias{summary.RSctr} \title{Summary Method for Control Objects} \description{ Prints the current definitions for the sampling function. } \usage{ \method{summary}{RSctr}(object, ...) } \arguments{ \item{object}{ object of class \code{RSctr} as obtained from \code{\link{rsctrl}} } \item{\dots}{ potential further arguments (ignored) } } \seealso{ \code{\link{rsctrl}} } \examples{ ctr <- rsctrl(n_eff = 1, seed = 123123123) # specify controls summary(ctr) } \keyword{misc}