From d45204bcfd69ca532f147427993de27ed7c34494 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Thu, 19 Dec 2024 11:26:09 +0000 Subject: [PATCH] build based on bb1a90b --- dev/.documenter-siteinfo.json | 2 +- dev/90-contributing/index.html | 2 +- dev/91-developer/index.html | 2 +- dev/HowTo/custom_solvers/index.html | 2 +- dev/HowTo/lmm_pvalues/index.html | 2 +- dev/HowTo/multiple_events/index.html | 2 +- dev/HowTo/pymne/index.html | 2 +- dev/HowTo/standarderrors/index.html | 2 +- dev/explanations/basisfunctions/376552be.png | Bin 90335 -> 0 bytes dev/explanations/basisfunctions/df6fbd34.png | Bin 0 -> 107709 bytes dev/explanations/basisfunctions/index.html | 4 +- dev/explanations/development/index.html | 2 +- dev/generated/HowTo/FIRduration/index.html | 2 +- dev/generated/HowTo/contrasts/index.html | 2 +- dev/generated/HowTo/effects/index.html | 2 +- .../HowTo/juliacall_unfold/index.html | 2 +- dev/generated/HowTo/unfold_io/index.html | 2 +- .../explanations/nonlinear_effects/index.html | 2 +- dev/generated/explanations/predict/index.html | 2 +- .../explanations/window_length/index.html | 2 +- dev/generated/references/solver/index.html | 4 +- dev/index.html | 2 +- dev/installation/index.html | 2 +- dev/objects.inv | Bin 4783 -> 4783 bytes dev/references/benchmarks/index.html | 2 +- dev/references/extensions/index.html | 2 +- dev/references/functions/index.html | 54 +++++++++--------- dev/references/types/index.html | 2 +- dev/tutorials/lm_mu/index.html | 2 +- dev/tutorials/lm_overlap/index.html | 2 +- dev/tutorials/lmm_mu/index.html | 4 +- dev/tutorials/lmm_overlap/index.html | 2 +- 32 files changed, 58 insertions(+), 58 deletions(-) delete mode 100644 dev/explanations/basisfunctions/376552be.png create mode 100644 dev/explanations/basisfunctions/df6fbd34.png diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 3c6244f1..10ceb1a2 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.2","generation_timestamp":"2024-12-19T11:15:17","documenter_version":"1.8.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.2","generation_timestamp":"2024-12-19T11:26:00","documenter_version":"1.8.0"}} \ No newline at end of file diff --git a/dev/90-contributing/index.html b/dev/90-contributing/index.html index 778b6e3c..065f6e10 100644 --- a/dev/90-contributing/index.html +++ b/dev/90-contributing/index.html @@ -1,2 +1,2 @@ -Contributing guidelines · Unfold.jl Timeseries Analysis & Deconvolution

Contributing guidelines

First of all, thanks for the interest!

We welcome all kinds of contribution, including, but not limited to code, documentation, examples, configuration, issue creating, etc.

Be polite and respectful, and follow the code of conduct.

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

Working on an issue

If you found an issue that interests you, comment on that issue what your plans are. If the solution to the issue is clear, you can immediately create a pull request (see below). Otherwise, say what your proposed solution is and wait for a discussion around it.

Tip

Feel free to ping us after a few days if there are no responses.

If your solution involves code (or something that requires running the package locally), check the developer documentation. Otherwise, you can use the GitHub interface directly to create your pull request.

+Contributing guidelines · Unfold.jl Timeseries Analysis & Deconvolution

Contributing guidelines

First of all, thanks for the interest!

We welcome all kinds of contribution, including, but not limited to code, documentation, examples, configuration, issue creating, etc.

Be polite and respectful, and follow the code of conduct.

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

Working on an issue

If you found an issue that interests you, comment on that issue what your plans are. If the solution to the issue is clear, you can immediately create a pull request (see below). Otherwise, say what your proposed solution is and wait for a discussion around it.

Tip

Feel free to ping us after a few days if there are no responses.

If your solution involves code (or something that requires running the package locally), check the developer documentation. Otherwise, you can use the GitHub interface directly to create your pull request.

diff --git a/dev/91-developer/index.html b/dev/91-developer/index.html index e7a07d32..e1ad216a 100644 --- a/dev/91-developer/index.html +++ b/dev/91-developer/index.html @@ -7,4 +7,4 @@ pkg> test

Working on a new issue

We try to keep a linear history in this repo, so it is important to keep your branches up-to-date.

  1. Fetch from the remote and fast-forward your local main

    git fetch upstream
     git switch main
     git merge --ff-only upstream/main
  2. Branch from main to address the issue (see below for naming)

    git switch -c 42-add-answer-universe
  3. Push the new local branch to your personal remote repository

    git push -u origin 42-add-answer-universe
  4. Create a pull request to merge your remote branch into the org main.

Branch naming

Commit message

Before creating a pull request

Atomic git commits

Try to create "atomic git commits" (recommended reading: The Utopic Git History).

Building and viewing the documentation locally

Following the latest suggestions, we recommend using LiveServer to build the documentation. Here is how you do it:

  1. Run julia --project=docs to open Julia in the environment of the docs.
  2. If this is the first time building the docs
    1. Press ] to enter pkg mode
    2. Run pkg> dev . to use the development version of your package
    3. Press backspace to leave pkg mode
  3. Run julia> using LiveServer
  4. Run julia> servedocs()
+git rebase upstream/main BRANCH_NAME
  • Then you can open a pull request and work with the reviewer to address any issues.

  • Building and viewing the documentation locally

    Following the latest suggestions, we recommend using LiveServer to build the documentation. Here is how you do it:

    1. Run julia --project=docs to open Julia in the environment of the docs.
    2. If this is the first time building the docs
      1. Press ] to enter pkg mode
      2. Run pkg> dev . to use the development version of your package
      3. Press backspace to leave pkg mode
    3. Run julia> using LiveServer
    4. Run julia> servedocs()
    diff --git a/dev/HowTo/custom_solvers/index.html b/dev/HowTo/custom_solvers/index.html index e53107c8..8459f570 100644 --- a/dev/HowTo/custom_solvers/index.html +++ b/dev/HowTo/custom_solvers/index.html @@ -18,4 +18,4 @@ m = Unfold.fit(UnfoldModel, designDict, evts, dat_3d; solver = b2b_solver) results = coeftable(m) -plot_erp(results)

    These are the decoding results for conditionA while considering conditionB, and vice versa.

    +plot_erp(results)

    These are the decoding results for conditionA while considering conditionB, and vice versa.

    diff --git a/dev/HowTo/lmm_pvalues/index.html b/dev/HowTo/lmm_pvalues/index.html index 6106b6e6..b3be4e86 100644 --- a/dev/HowTo/lmm_pvalues/index.html +++ b/dev/HowTo/lmm_pvalues/index.html @@ -89,4 +89,4 @@ scatter(f[2,1],times,df.walds,axis=(;title="walds-t pvalue",xlabel="time")) scatter(f[2,2],times,df.lrt,axis=(;title="lrt pvalue",xlabel="time")) -fExample block output

    Look pretty similar! Note that the Walds-T is typically too liberal (LRT also, but to a lesser exted). Best is to use the forthcoming MixedModelsPermutations.jl or go the route via R and use KenwardRoger (data not yet published)

    +fExample block output

    Look pretty similar! Note that the Walds-T is typically too liberal (LRT also, but to a lesser exted). Best is to use the forthcoming MixedModelsPermutations.jl or go the route via R and use KenwardRoger (data not yet published)

    diff --git a/dev/HowTo/multiple_events/index.html b/dev/HowTo/multiple_events/index.html index dcad944d..747d365e 100644 --- a/dev/HowTo/multiple_events/index.html +++ b/dev/HowTo/multiple_events/index.html @@ -23,4 +23,4 @@ eventcolumn = "type", ) results = coeftable(m) -plot_erp(results; stderror = true, mapping = (; col = :eventname))Example block output +plot_erp(results; stderror = true, mapping = (; col = :eventname))Example block output diff --git a/dev/HowTo/pymne/index.html b/dev/HowTo/pymne/index.html index 06fe51ab..d9fdda02 100644 --- a/dev/HowTo/pymne/index.html +++ b/dev/HowTo/pymne/index.html @@ -17,4 +17,4 @@ rename!(events,2=>:coherence) # negative signs in formulas are not good ;) events.face = string.(events.face) # ugly names, but fast

    Next fit an Unfold Model

    uf = fit(UnfoldModel,[Any=>(@formula(0~face+coherence),Float64.(limo_epochs.times))],events,data)
    -results = coeftable(uf)
    plot_results(results)

    Read some of your own data

    We can make use of all PyMNE importer functions to load the data. Try it for your own data! Get starting with Unfold in no-time!

    #eeglabdata = PyMNE.io.read_raw_eeglab("pathToEEGLabSet.set")

    Contribute?

    Some extra conversions are needed to import the data from PyMNE to Unfold (as shown above). We could try putting these in a wrapper function - do you want to tackle this challenge? Would be a great first contribution to the toolbox :-)

    +results = coeftable(uf)
    plot_results(results)

    Read some of your own data

    We can make use of all PyMNE importer functions to load the data. Try it for your own data! Get starting with Unfold in no-time!

    #eeglabdata = PyMNE.io.read_raw_eeglab("pathToEEGLabSet.set")

    Contribute?

    Some extra conversions are needed to import the data from PyMNE to Unfold (as shown above). We could try putting these in a wrapper function - do you want to tackle this challenge? Would be a great first contribution to the toolbox :-)

    diff --git a/dev/HowTo/standarderrors/index.html b/dev/HowTo/standarderrors/index.html index c51fece1..2077cb89 100644 --- a/dev/HowTo/standarderrors/index.html +++ b/dev/HowTo/standarderrors/index.html @@ -8,4 +8,4 @@ designDict = Dict(Any => (f, range(0, 1, length = size(dat, 1))))

    It is possible to specify a solver that calculates the standard errors of the estimates for a single subject as it possible for custom solvers.

    se_solver = (x, y) -> Unfold.solver_default(x, y, stderror = true)
     m = Unfold.fit(UnfoldModel, designDict, evts, dat, solver = se_solver)
     results = coeftable(m)
    -plot_erp(results; stderror = true)
    Warning

    In case of overlap-correction: Use single-subject standard errors on your own risk. EEG data is autocorrelated, which means that standard errors are typically too small.

    +plot_erp(results; stderror = true)
    Warning

    In case of overlap-correction: Use single-subject standard errors on your own risk. EEG data is autocorrelated, which means that standard errors are typically too small.

    diff --git a/dev/explanations/basisfunctions/376552be.png b/dev/explanations/basisfunctions/376552be.png deleted file mode 100644 index 90163e9723a37fb1f9a75a9ee1a70e81f8f0eeb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90335 zcmeFZWmuG3_%DnKI`kkp^oU3*rKEt&=%927NP`Taq@<+6z$hWo4G!HUAp#;HNP~nl z(k;>r?;7^`pL4#xpWl~#ac%axo@YJxy7PC(+V9m= z1p~PZR%9rR3&FpxnkmXZBsjqY6|HLzPHafOTsR5msy}&k{z~d~ciWV}QJCgn)z(~{nCim5 zSI@CbvFWoIKpOaYbJUk}MEKv|pBSN-|Ngp1BnP?pOHK3t>r0tWcZs#$m@+&~#mf{h zj4lQp?dHIY`0u|GG~}_pSz5^~Kce|`T4pyV+@>a84DNGL5_B|7Ui=KLY7f+EM+}WPM$zk@LbqM@y?ELJWvFFr?SvMvA z>lPIH#{@3ZVyR#E_9*Wk;eXFm4clMmOgEPsleJj<-NuXmP5T4r<$-|k^qHgCC+b)P z6u-!S7lL^6RWLz!kF@4gfbzMM2R9)ctba%NvlHf!{u+{k&AUNZY~QovY11_a7Ug1U zPM0-<%HoH0<=?&pRzD%|t8&Zm&f5^KsE~_oui&?3e`-L*nT}}(&k*omto)J0R1?8* z!uXYrOMcK#cgTYIVYk=R@C#~i{7Y(9ZQK+WBnZF3lc3OM_0|dU1V#j&&^5XE5=<&w z@rSZfN4Wz8|NWRtgzyK3YFGOgH5@f`N&chX?}Gla&0^UUUG037s*U9?T*MH17H3gad9G6te`3-?nxW> z|5-|5Z8YFX7r*deikI2aQk2cmJuy z^^0AzXSQ~s9yBH?UX1u}<|6kbA3%R#E>CdVETeyiQTMp+0@y6aj(|}D))a8IhT=u0jEt0_eU(BaF zu&MLn`5(n4#(!DOs{MayWkhcth&c}+a61CFP ztMhe=W&VA?LMd}#l7H{FCF#d&&#=!DkV^uv_1O!h97vIHfv|b+^cA126i<$hdh{nw z?sQF^bWzHl{2Lt|b@SbKo2q^Nc}4RIH_Xdn-w-8A%zvp|HzaWpbW4D zAooSQl$`tN(XLzFs$rJ(q~}H*+v$=#pkMaud)gj2*>C?dv=IpJHn+N z<)&UooXi`a&0mu}Xb9@L{>dt1U6diQ>5Y3wkKiAu#)WASIB`MPUe8g%o5#Qo_+x!L z->sWEuCwe;qC$8rh@|HJ=_F`>n7rqsi|Dn|ZMPaygHiuyV^87)-M*3^(U?NVoa6# z?z4MFm8uOUbA9=({_32mw{ntBPfz{*{ihwo8OZWv=n38!gtX4;SJ~Z5RMxgqL(=_8 zla-MrY4F+%I#U?Lp9bL?#=_9tD| z`RUMK$NH&_80V9U%2FvR#Jltc!LjV`I^LsfiAsLCT;ORz24_i@DWZRS#-7vhiCiy} zTYOKLiqC?ibn+#o2?)Fah%phg5>33{_bITmg1?l1)t~L;PtDZn-&kXxXOPX&-{1D| zD@>FB0-Jpg`oetfE}V~^O$U(D2T7`W-->K=zyHl)8hBu@@*1)ERSWyNf2*HIQWD$~ z>-Ow?Z(yukbUxR03?C&OwT3_I$|mN`9$R;nOz!IHDlELcyHWpTe`nI9Of2rMw&)!L zas9#NO9V?ItYPbncTxaj7Ib3n?+$2AZA(vWzgP7_KuW)UJt_jWV0;qn+qeE=@tlz8i(m!^bYbGo{kF4%OF@Kt90=*{0LK}-!`{Pg~_Jz*PcE%7Px=@>q8Paf= zN`ZomvYJFCa(H!jfYiiHPb@5(sE0bet>O{^X@mRyzpgcf+QBt+10N-#Ic4{qWcR(N z_Ps0J&XcDOlh3z|&pK*0zSXQmUgi!jeYQ9JJ~w1+Nkw)y9*J(b<-ZJ%SWlmBu0{xR zjeywxy)#Z;?%*w@*PrAKuWa-)<4s!Q&28E9ZR5je<7d0DOHm)>p?ksfn5_e*iLBF^ zn=d7ohR2XrdP7!bm5JN;259nTT5wE)P9b>zALqGXN4{_AyJtDIYdD2|HdN(3R^`2- znTjAsD62*4QDA?NHsWSyZTCj^g3q|qKZ`lHs1%fEk6w?2-qhI}zaJP`@S6eHRcA;w zHAeO@QdWXBZ0cX2nAZ}LO+ks8NS9GT0OrDi$Tq(l86+EXaA~7L>14A zW2gz?O4Wh*1L$%uC_-iShMz~aJ%ntAoo~v@(055q9d_sS&;Y+h8NDfm8KGO%(5+-d zRRtg+KD88Z`m2DAwIarM#)AdES=A4ZjRhZ;0h5YPqWHe{(N7uTD9AmjL;M8Rl`)gy zU@OL?0kyD`$IM^B`yG=~;C2rFHBp}bqda$*iLLwVQk>Y(M$mbE5PqLO6Duh0dLuYU zQxW9|fxqL0gkkXk{>^Lr@${#ThN`~p7CucSdO#GSoQW;zj8Gpz#+8~6Nc6Zixj?Q_ z51k6mkG@S1ZVv#+N^ql7hZ6q4b~7fV+g#8)O9C^E6Bft(aj;Fj;Mt?gau7lK&O2IJ zvH4gv;%FQedIAEPo$t-_$9TZ={RG7LIMRVqYX4FRUXPFdQm!|Q+jFk-A}Qeq)vkgi zi4I`B?*@OU zF#$bU0x#AuRaht%dOwF814seL1ah&Baj4a_Ek@&Kp-VznplN-&YQPJY)<|JqBwBah zA37ON{eM4PkJK$^XXedJkrpGnwd-L>(h>6u3CJHlAcQ;NfyDwF{*!_t*pdlBkM-Qo zvA7ol>u?)}9jIT}stop{o*Ce8^));z4v^@pkM#Jm(D5;x7(uc=8wS2#BZ~D#IvOaZ zj1WIc1R7{69R+?rwHIwUW|X2B=r4F@i4m99RkJTXf?DUpZ1LJFqEEqNaXbKbR6iiO zotQ?1vthrBfgXB5np#xYA#xBZ2Z(YiqIb9A|NR8=i@cjb3g3wev2d_QnQoI&Vc4UtHcE-r*_`3WQEK?{n{(Mm!YoMZqD#&#w&oO&;0ODetV}5Z#Kn!3+jRM-$zHu2tiXK`u-|> z=(`1YB&Z0$@}liQi1^25Mt?sp!j{yMB0^DFR&5QtgHFe=#4} z064Xm!tuFgmypWLhlrHv0ebwU_6TVFn_YRJebSQ z?;%(RP8*wz?UfkR#_#tjE94@@pd$jHb@yi}b>c*f;ot~cV)}Q7#!kWor~>w5DYY6| z7TT7LJOCO9zf(ZX3%F7u2sAuTp30_0&r*`5{CgX<56C8RLUKPOv!iLU#w8g?VmIRl zRjLL}1VKRjo`%m1SeK!diJ_r?ojDCndUFy8IR;o8cQRA*DsO6Cz4chyROy#5c6GFR>V28u4-d?6RY~X9@eg8zj)Ul0RNsA^aFHu5!dajEnBBjWhm!Q( z+!3x7Zs2lf_BkP(pZ}WwX7-)G5I9+r`>Ow9o(v1Yn=+6CX@%+is-BFdFg4{{o*rI> zR({?;I~=8wQYM5$;LR1@Fy4M@O#63@f8%?7VkbLX0Z_^meb2uW#>TtL1O!n;oaqFE zv&7Ln>Db+i~`{K#>_C0;*yq=<%Ig5ZPCTvx&?_4AiW8ZUc7rk zIU{^3B3i^g4)`2{DRrtD6R?9o3BEI5s8D8Wk8Z3Jq=P}qvBoxDCCOk1Zj|Qt06Br6JziZbGsH3T5Clj%^@S5S(E}_>0^BenI0pKg^6K7j zIO(dP=XGLfObKC*pF_QD-ajP*0tI|NDE%CSh>$4tXN$lV#SQm4Agdw8Z`If#raT{y zjr|N@1iCLSWeDX)taDSP}#?Lih21hW4N24{WOLWxv>Q(Ct)^%)$zOMh=?^N{io=z(Bx* zOK`$B2^WTr51=;A*?h}sdl|DDD9t-V6U4BPWC9@TR*r24K{~{aUTC3_{+V<-#I$dd zEUOi~I)5SSpmhrfT-4(ioL>QYnMVN%Y*3M}nWZ+L`yQNRCR4+k&)v_TfjSWlKHnashD7t!n%^zM3O;Sm zF<`Ao`lXo(ELT^vGAx@j{aXbO5O(r=Jz+^PoNx_Szbdn%GJzTm{_u_g+D%YIffR5L znY+*;^A)&r04D`p+(0%iCS-D%9s^v9*({S%G0jKqmge#~6#U2V|9UlidZE%^=L=Gt zOdK=faqb0tCYM%V<`ZQ{B>DymLX^}5uHLE=7vrL(w&ujTcT{u-olis%1dxlG^k+Vp zEzKPCDu$E7)VA7jNgNZ-lg_ViihtwXA%t;40@nT;R22Rrax>c5E{cwKb`LnePB>Xi z3MeZ5&SW2lq#_?@Q}c5JAQBfQ+GxnR7Ntr@KtqI&TV52?9@7*!{Rmz~>CBIcv(T0c zZC2!0v|$UtwimcMKuk;H73IVuia`bJ6E|KG9Ew8v^E=S10Ew92)oHg1i|F(CJjOQ0 zl9#PLx@A@Z&>q+Ld%km6od~Xfn?MbE!O12)i$UaY$H3IQl&T!1>H3IF zicy-|)dgH15)%Aj3ZCT8iWr2O|8E{VFWwft0zzu;z5u@#isFl9pRqg?Q_>6|7+%{r zFLe6bWNqUj^lIxPb7fd48NjC{DPQ~?J}({{13c1FMoSmfm$VQ4kSEJVpi6;2gJvF5 zTg%Vl3eX?ni1Li>qPssEc_Zkqo2qwj?L02ya4@h zIn)=i3|Cr&di1Li;e;zJkHznsX+e3f1cw!49asscDS)b}UB;gk=IME2AgB8<8;)bRiaHmVE*(K8c0*{brd?eZJHi{NEXF|ANDV#9!VcQ(vC|F?@&^o$tpQOF;> z`)Oo}B1?7lZsRW~H7~~^w9F=eh?5<%XtPELs;4xB7gF@=6>Rpfd~uz1!Do(39J9Ot zZGZh z2YU+U#yaYK=HVBY-lXBTJ0?#0O*EX{Kj{grieIWLXfpW2N% z&X-9>&!P-+$nYQT^t`A8<4@A~dS@%;HpHHpB2OlEULHm&M61PA7c)$q_Kv|{4XYN9 zjI$Q3)9@a(y+?5s0TE(Iyrixs)b##vy0v(?co7aYYhy?pQo*P13@wK)=NsSpZSFDw zgG5m~+34Ly%cg0cw9(t0r%!n(KsKZIZBEz5rqp(qACP#_9v}Nl@WFlnHwh$y5XUwx zuf$KB!k{+WnhL0G(#C(Rh$d(Z=T&N;G`K2lwm@seWs+{wqE7jgZ;oT{8#>P;3E9NL zXetgi^;pykOe0fF{wywkf{pxeg!sSm4Oawt@ ze^+WuR6cU_h3TSVdxlx0ro}Noh(ZG;F@Zv~uPSd1NcRZZO7zI3vmFJ;&aX!HHUFj} zl&JO*EH@snhS`z#qqu1lu`hxHnv8|@Dv&v&{(c~7;|9qG#%b=pHMc_iB{^#QbRCl% zrFTKp3c;~HgE>jDOUrPZo?Q0(3?aVzPQT~bZg;h;rql70^9^hZSHR3w?pt9zSP zoiWV_c-4vx?*@E)ml%=KePPEC)4M|RGb#6W$QZ6&{Z=d$eoC|h4a^nCl~b+Mh~Y+G z*|9WExzFU;UrQEkGy@@m7Sr%foe4!n0(VVHL-&{2NyrN6Ld=yhT_!f#iJAPxoQdzP zyT%OZ3Fv45;h%yY1ZlLll=Ih6<(o2)H*G*;w1j!1KB=F!QRA>HqVtXms~YO7k8CNZ zFac@em}x(U!RnS3FDCVllS(QK>7(Ah!l9ev|c3ZYB?fN&grq=V|)y6Qf-w(yyXg1<%q4H1y)0ss-DJ(k*p(lOa z8d<6zK-w54UFE$X9aet6yy3I%d(hu3Fe$Z3ieT*}P=nkH_4arF5ar^OT(xKEPh(SP z@x)KC5pL7Q+UP}L%GVKcTy_}US~N^047xh7{_8sX$7$~ZmDH-k=Rlp37kFbh#qUCEoGoG4F){G#o<&pcE9eI-OEn2G^_F&-&|IpXRYUq@4lpc1;K;2f1n7+%GX18 zOs>YA*%H?J8$_nVCLXxJcB@#AucH-IqeyXi#Yp3$HT3b1DeqZnB2=Yc5I-#RFZ?EY zpnpFA`9(J*`F4p&K1g%SdY7usX43c1ms&RtrezO?x5Zp0&6dWsTnMMT-=Du+IRPH) zvK;s#RvaU8vpmCTqE8U(Un_e)E#3}ST3>7PO8AhCb@;1*GXCPS6Cdju08O@--KahL zyZcw`NI0lOH-o)4II7Rej;$uxow@M`LK0KNt~9DO>U#HFZNrD#KCvn}H$`ZTPyzM& z!IcMab_kr%WkTtZ!bsF4(kgHty7vnx*kGYkobXYDym6(Dw(o2OeRn}6txG67|8+5~ zTcC3Q(AlH=6w_unNaKgo8|u)>S3C6xSofs&`z ztP8jSp${&n0KGT!#3_fgdrq%1LL`+67|EC61*=@71VJD)!QGh=DPo+|2?I0Q5({*g zSB5jI@J%WYqG|l8l zkj~~4ymSzvve^hqoE(D)6lZK8LO4X%374}dhhW>Jaa9J}WEPbc#EGu~_ ztq8b5qYLwC4_bEVndm&W{pKz->oF{pO-j8Ed9b-?|E=~nJz~6K zXv4N<%B&vy7j3g{B#&Xq`>c(W61!YvNom#mE-Xp`E>ddc0i zG_@Mqn=f*d27Z4OW=x`Xm^I;EXNj{M7$xU{?2`zCOzb$XQQ zHE{|O?fgBjPd41J0I1ihMUaL9n#Q8${Y)U|&xniCb>1D&)7rj1DjXC z(f(i6h@-_B@mGo{4l%lAcr6RVJs*FAcp^C$$h~~B`#k9h(ij-w^b4#iT~z4Tf1Y#k zOtdM)ouEC7`LoKD@uFO7PNuvkaBxkpPu%BmSen{#O?fO0?oh1VpPC$o%KoUk;inphOIwD+cnzqN&B>?w4}sRMiw3twgDJk(Y(@LY|9}?j_~!=-0*A zjAyp7DIn^sednwRr?>psF;I#+l8<)+G#r_>YblJ>`?trV`cMzsb6orS?ql0eVzcds zx&AHaq-@bv6+{Z_U6#*XfDS!{wo6>vN-*DQPJ@mj83Z8qS(MRzsYq@ydX>WRLvy*2 z9Mbypy_v#MyOqIf_+yPZ&xLF9+O_BWhC6!~dQsrWZbLfZ{O*F@6*%Fs51U(q#ggmC z#(4MMOdf5z_V8|5=LU{+b&r&}@sS)YW;I#6Ne~0YHkDdG8uGJv414<7()F0*FiQ^M z2^lF0h)^5T48ums`fR!ea9t500M6@x1`?K}q0Wpjro=fzoK8>DJs|VL#NL(y12$0< zrWIF)<|-eRWEPIS7>-$RFcT&!;*M(A!L&boHI@ta3grN8Y^P_r|;!6Bc4?-@DLSk9*r+mqnp@`E$tO^D|nTV8oG(T)OK}0|{ z;{-vAD`zTF9~xp9wO3UFo~i(AX~nc#u^X~H6AnUt;SQ<2-JjS^G2zopK2px_(*EwR ziAS+rNG@aad~3Fjf!yO$iYUxRRw%oH2XOm-s?e>UJhaPDQF8k>tKzr_^~{_1YO!j* zVb5Uk;%?HIt(uQhu|da88KEWYbGD{%1ls5Heg4#rNUGQIHCFE_t~=dZ-e~C0*c4El z61*iNx3tiXQB4_^U{#LtQ(c$9eDzcN@L*iex}(K##qHBgFH(O?J7%BhJ;$ejyKf{g zf4FqD-5xGJjei&&LKhthTZdZ2AsJrfZHfCoiT?e51{w%KaN@AR)ePeieM=IU?f&JR zwqU9H^R-H7V|l^GX@XAIf-+ZDg)9RxJb`@n5)kwAHF^wjwQyA}2TB;z{!UkJDX@Kq zmo)k?l&e^#-uouzAm;Z3&zPAh53!M6*nOv2Hm|Pyd~y0XA_(Fiwav%xaQ)tNUMBs>vL+Y zc`U``=RqX&j@YZP-R{u875;CbGvSs1#3_<-rvKskVpink=37l%F@dqvMSN3>fATOV zWb8P06uwrD0EDf>qsHj+O*NtB0knQ4+|CGe0(sM9U|gJbg`*6;Th_ix9kZ28 zq$5IPjy`qI&%^Wj0!-#6^2Q#oz;~=Ax*B$_tVi^Xm0=wQm0`(_LX`$&ABSsqeopO9 z9c|UD(X;vb)Qs91bAz#i1L6-jOF{2kjEX1yqnMCDHd#$d)1SD7W_So?w7LhRIxbj_ zOAFPhJh+q@#EdxpksBQYEn?4j;S7iDfKsoZm+JIT_~M4kwf@8uf#7PH{iDIykoGgb zq<%-!J!VQSF^X#flae1&GnakpoUFY^l9^m@4fQ!}aT%K&H2(tSMA-%=Y0mV_>&e1; zy(S)@-kYX?a`CNi68zjpiy8co%+RtAm85{L#`*O+LVkG7wSySrBJV#TnUc&NRr=9V z8}z(D9q>48OoS%$Bg}Zc#lnq|m%0L3wSF5m$RZ^)v<`P(gceom2kpyrB#XaJL?^mW zAIR6A4zS3cT*D(n-)WIp=Wj-@Geo~F-=kmqU4PF1EM1Y*4|<{|EcrZ*xpvo1DDrwB z6=$wpPDmw^A54{FkFRt7Td_d{;f zmd`#>Ono+(V^8Gk)3pq5h8qxi(QdsLGfzD&X(Bv@~>nSnwpRQV6joe~q^o zoklP6iG~^sSN*;3ddtx6G7n7>gzFF; zMfL8d>NHLH$v+fT`~4lL(daIuF}{N8h#64@<_-EDeV4@w@}NOu z`|Ixhf>&fx4x=IPv47;V?0(KGK9RSLDw|?1oCwHRcJSo z64wJyGHhFF+X+3vqsZVl_2zd01+uO;&@A7&8cdkK7FJTzU_^R0?%h_LoaU*}6`!N{ z5k9%00@O1A>N^2Iyzg0-g~@e(I^g1*dQ&Hf?uZkqpzqtaWN~)Typ$P1wR|{cZcI}u zG<`^kQ+tKJ$|#rqyubWqOwuHho(FPI>_-Q?k6_&z{QgaNE@V!%hJG0RPl!?)LvQct z39)<{;V_mc+zwKiMjid|IN=p)OoABl@IY#vyG||Ap|zB)r$D7%>91E;0Yi;OGMMKCvB{^<7pAfDPxh0ydV#dIk% z^Y80`Whkv2C9C!v>t|JApEE+*$s1}!J@WbPqQsewcxUfr z_2RnB7TMEuMUXR}{7jau_TqUipeCJl##{@!fkJVUf0-5p_^`}?X%YBg>x%s-xmivOR&8nScmknvRLibCgQ6d zCy~5bsJt(rXXg5-j>c2yao?~t3jg$4KSao|C=~3Hd?h35kyCTh=p< zzyJ1$_{KwQJ7yd?cc-bkLZx*?Sh0YSh1WJ{(ToKlhAyXvVxpr!oAeH2E;FJ-gG)lW zcyZTmwRpm<<*Xj~?Ix}mauC(R`4-}Lp({5N_=SWJFYDfY>YLV;#0X`kNJ?YEXZa+b zk~SVZgsJzcUcdP&(u&hT{qSc$l3P>q__>HvQL+tt?fyW}shKDR&iWZ}P0%z`2K^5) z4qU3teJJsbgTL;{7ERwwKisl#pw_%flx)1(E@eLRh)+4uE23+3pY!`)ayU2L5XY)b)>$q= zzgD?*?w~XD$%g`|I3(Wb{XI?9vmVP7c(tI5+eiy+ zAJB)QFzuk_;`s<56?jz51elHOPOH!J`ZO2O_hA)UR-DXMZSWY3+G-A0y3H8v zsW(kse{HQp(x`m=qcHs$NJ^>FyGe{7j;z=cjSqqN45qv7G1uh*dR~qwrdK5|b}FUl z8gIjt`F+&gM&>HQ)r42f$GCaYMLgad?Kv;C8u8EVVN}|3$e>%&8pdvmfrc+iorI5e zI0IGrY4JSX*jiN~^y4SOT{ z7EL99pJf)6xNptOFGw5jbEa3(@(FCq{|WAfHj0hcp*PTLyA?YRR5I##uC)>m!ZWZX zB;QtbSf#d8y z+pJ-FuA9?Ln+ZLp=B4fr*bJpq{)}RK9aGSk37RB6bA~>J{RU1kzXPU@2DOX6#)hDz zFv2Z=*!f!?Z2#%L`??9@?3t;j5i+{~&El56?eEjc)-$G+{W%x(3rDd zkI)o8S`pzZJAaXVVi0da@(wz4k}wMeMJtlIP_qp6^;<8A6S@mUZdqv!!BY*Dsdzcu zRwcUvvyj}aD%`4zu!&x;iu;nM!>6Uyv4dm9w4iu*z7S?~ke7Ni>-%q2HEM@$%S_}p zUnxId))GoP)CZqIYPw3SP5)&kkv`iDRFXS0?#Di~IVz+@Jk*H| zh*=#&7`o63A_pA?_80zw($s3Go+36WqE9D9&vC50-JXLi>kWjtF)zHsAUPz>q|{r9 z5?6qfN#sRqNn#2Ku@1j^Qd1(;V7T95-mmxP6wd}*&v#o>7K@mAKp|7$EOP2_+)`kp zZiAZse8ShaG^C1wS9LKx!&qLauS=ipzNG*cYh7)Xr{AbCD_+$nzx?S+!@%Cwro9(IKs+ey@l zOVOp&#GpoFx`wfbeM;ZlJDvsR;3>1!8GEuCR=*!+#E!j1vP*SRbiUzqo@uq+RbEg! z6U1dC!ZrIC>yZEZtW4_n`g0lY(~{nP46hv24|_ITzQLGmk=}1p5ThN1Xv=w6Y<_pv z>Fy-lSrg@=fSTB32$#k@jjwB<`YJ~PTY-oMaq643FWK2)|IMuDN+0C)^C1B16F3AK zOHplBHtkkQZB|lU%m|6NZ>5vABbjtu>Fp9_kvi|DYmzpmZ4Ign|T486H!;kj*f zpz6EmgvZwBspn@z$)~N;%>#!lx5-zGR+`Jdot}H|wB;XjvKU(#h-^L*E3Pgvt#@Cz z>gVwK0ic~jOg)PSqwB<+*SOEl1B-69s=Ta#O2;w>4e+E3Nn^HWp(s*>CH%+S`x9m~ zar6^!+ni*d5t+-euG#N}i|bf8k}&nOf$UpEmD_gSpkJ4G@THm!;$Bq>x*wU(2`I zWH*0o0R5Ueus?S{onU+IbDZ zDuOMms4yMK{1xgqhcms(QP%H;YiMfm6Y~g+Bt~QvK9GQ9c%9QugxlItpoqpLa>~j- zL!f_2VHC2pE7f2Un14?#K^1qfl=>HZT!vXM2C{HpF82#gSdTM3+^^T|o?grs@1$I; z!wkM6(&6b1Z|+LRty_-~Vxd923MlXPZMEl5*?rXjlYQU)N(O`|p|Gu|MN(b{pSz>bLo~`==xH`^U4vQe0D8q^XC+=l@=M zJV~^ZJjjcs)^X-4eI%v<1<{xq%+|>jMXwJ!y$)mEeWtO^+Q@*5mc5qQ%i0*%u+zU? z&<#)eW^a=NQs4mi%b&YQv~Xzh&sFGGzkfRbE5?BG#9WU!uNI^fbeVonJ0OnCh`2e^ z0VmR2mq1bHSoGV-OP2)l*I4FT6O@_k<@*EOg#p(>1HX2CW|N}gh7GR3%Z+R2-+oR# zUo<}NpV~XB5%b)e^4i?nls(zysy`P?JyK15z5G7^xZ!eNXG3G~J7>swd!2s$(T94o z4LPr^nQkeW9r^&WZsm1o3rQokTZ#hi=kOjVIxLO+TTi+{sudzh>n7p=$(+|e)iTzzxNe|DVT@ZxTCMtmg7}Zn4&-Ubh2L}=s}y+)^YpM$*xL%zfJ9SzVYs% z@7eCgX(DB+@y5ZoGE)X1$TPPo_nsyj=2+zZ>U z@tNNQDhhqJ|Avm{5K?(8?(?U3V!t!AY2SM$4LWmv$ub-p=OG;7M4{#yC= zAp>LsZj-$Pcc%VzWmJQtvH5y#M6XbRMLoa=KS_nNP`__E<#ZbP+VK9+7->-f_&py1 zZl)MRc{$Tr<=j&~^{ssD_*)u?-`&A% z5jJ0N-6#h-1L~p1U%bKO{z41TR*6sMH20ZbBhf<^zmVde$-56Tw6KB}KXH#Gu0N2_ z0;5g}*pdX}%&|+w>Y&CL$MyrRdBTU43e77}=Wnsil^zY~r zzPWe;dJjJ%)GcYIspQf{(1N1#bWM++XS}U7qDGQ=jA-8Nl^3=QyR6|&S;9|+f z+rN)(&v*>mC2nMx+t)3Q=qt@m)WVN?0edShtI+nfS>R{h9elisZGY%uT07JgE%DRI zOi&gSAN(bwjkr5j)6>R^C>$Xy3pdbOFV`@Z>oXE6o<<0?Gk)&z5LA}IFo0+M_p)E> z^lR=!rh!wVU_i$6$$3zr(Pz_lR@br|_+KWFSu^;^xldAMicvT~EQ7wTXWnydJWPmj z0yS;U^vV3qtYWNMV0(r#Oj*P=ZBTH{_nuJU$hf-*7za^AQL6_^4^^2DEDR_dPx)-e zjubnc1$lc?19MN?(`9?br8;0G`STU1Mo^Zix5f&4Xyj~*B*d*u6fQ_(gqD**j$8Lp z8m3&Pyd0XlO*5j2I^8FKcH`;DFmWL(qPpfSduQ-??~^q+&9i*al1CU{!9i!n^;#?W z?Aa(u+x`Zd`3fe)#X!x{$F^*D42HkM3$7Nk4{*cC_n;_o%nB3{o`>y)UG3eC30cVq z35u_xx~hOubcBc{F}Wx!qU!F^m)SnFB;^Q{Gg*0l@_RKZWK2I>cK7&7h#x_kl>6`~CaBQFJ|DNG%gxE-EUqVs`x z%=K6ReE-01BgV9v4Cu4b%T$pF)@vaB0Uyu8I#lM287;S{{EX;(=lQenv0U5`oDAH9 zNk(#87~NY*Me2S)a;F>YuR5p4&|CH#L;CAuW}YzdMjkvy(@bvx{78Amida0^= zO3rT7PNRRvmqu$0Jx}`vPkmCH{3XC`G1fE>NO0lfP3y!2Fs5UcFX?nOl;WNz1LfM$I;S1yft z^2Gpef@J6AIz9RGH+PTAl}8U6I5}?BY0kMqW(O^JEd}nN2X4a(Tf7tpkvX4B$%TGS zpp!k+!+*VtS-X1jw)_^3ALbp+3$eU@mr+xA1wSIa0zbtj^@nNsD{`Ul-u=sW*J?lv zt424-b!Wz#Gkrq4Y4Q@YvQkBcM7u*wYQcy&CVl~`Qcnt_jeNY`s^Sjj!ZV{nRhCi3z7);ni2zzR5^B_O5GVwk<#3MwcD#{Sz21sQX)9leD@2fOqxQtrLqB4+zJG zHB&WK(l4~^b-^xS8y#NI+IhP&Y&SIdu`{I33G(P+@6w0o;_}fU-M6%E^&;a=UPp=PSF^>wqrvR* zz@ElFn6Pkfvzk zj-5mtA?X?qFwk|2rVm|laWMko*AU=lLWPDC38I3+ECb9|)zpv=!gnYimGGk}reDZs zjIe92{No_Pp{sSyV#E?MGp?to%?&d&L0vQ5eQjDSjrUvog*S}y`-t;>i8BLn!cA?? zFLTDW=%+iVZb_sT$|&Ak61Z`CAdS5l_L#ruaXz0MVl89o^Y*UZUyGQ6YEm%_H`)d@pHCW=u#B<6?VA`l_HU zsN5M)m=0Vmv@um3m~+w>mSjk*>=?BcMTDv`HL11a^rGVYIo5M`L`OUz=sUsAWE#Yc zV3>tTOe;$Xf6IiJ3bRPesN58NYR24nf)hsYjDY$OuNaIt@`jehTD@$IU+)P2yJdM7 zw%&OuOdk5Co8OEtM;ZC6&-r5yxWO<_;BE2S`FG||ahl7va}}|1x=gAo5}3b5#$X8L zd_2K>!e~@F{;fPY8XuD6?SA+w<~Tt}Ps^{-yH+IM$AP&bg{&ObM(&1cP%I#>pQ%m; z794BcH1{6yn2k5G3!YST3yoUxkqyXp6XI7#fq|BIOgn}cu?)3~eNEBP&|IEja|g_u zy5)q_!jBmt0j+Q)vS={G8P1t*C;K9Voqr0hl`lB7n>EY2lYMTUo;~)!ii7Fi{x7dN zdU`a(6g1>`v~Df?_3?bQz87-bQ%C~mSG->p`sB+$;CGsEZu(XgBI_yQFj^QPqgT*C zCDwsiO5AAf1LA$|c6m63so5Xws~iSwiQiPZ3Tr~BMJ9E#Q_?8B^Exlby+J-zWm-c8 zY%dkYQhTu84T)}Fn+kr`OzJ{2eTl;KGH6DP-NgI29q7?U4*7G&6AL}< zlp(h%BDUf=mo>S>-v+}a#=WR7gn-LG%ElLiY_4;2wDKR&(>~~FVvD7tWYb6rFJuuGnjF6RAnc{LedAABBFvNhDI$j;1N63s=k5C7lt0E-Bo0)EA{wgyK&_~g$3at)MA^}=nKbbD#^EcpKw zu<~+r@zo=_$Ic}s7N9AVkjA)|xfyZ|xE#*(QE7|{n1N?)G^#_Oul9jv1MEqJJoIX! z#d9CGBiq9=?7!;u^n^~xGc%yMGu=sQc2j(u<%J!#k4E&=rXu>9L9Jn+edlNFY6`g8 z0jzxl9+GI%cbl8+_LbHnoUlis05r_NyX9s?zWEYdD}7HSZVvPx_UMb<^cxx|(N$Ee z6s@lW4VSQw?i^J)LLwnxQe3tgT(o(HL|>M2-il=)yBH1GNR_)LWwG|~DQEguY0QVD zF|x!KnE%O9f;fh&lr#MZS0O~Wf6MG|%MoX~e%+p7qV%y<8TS?ZMCF&q$yr6)?cA_v zBF`;iy|GeioGmYJwIXU)69uXZi1K`c-cF;jRoS{%V1A^F41peq=pegwnE5WAS`<*& zQt-$2jv!VoF#^oVVB2jlVARdeLE5D~2Mo-J4LZGKsc~4?+x%H+;Ck#7E}Zwb##*Jd zD@mB~1TG-<>aj^Jd*|m7#*?a23Y;B%AiI?_zEBXXFFdNQh^h!eYQU>#(W6Fb(iH_u zu^|>LQsE9>AhXtJvs%k-H)V>i4QjC8aGT}s52S&hmC#-2VngM=ZRI}n`gWcxq)r;6H!>^X0ZC@t z`a}n6L({C2NZofx2KPH`VK-zIjtm(Pw3y#im|$@C&A@ypnDM${3+tTR1L%+_T8r45 z*jV3f-ohyhE9cN1P5FC7alCVg50<>his%}me+LTA{I=j)oB7?kVkTOl7aaZUAPKTp z?BKS6;Qk+)&O4CGH-7(p3LTs{RvaNGo2+Bc;?yBzXJzlbw-AomvF9=4Sji|WTO>PM z$j(f5cFOne`}=+W=wCh0bMEK9-`D&7x~}KT`ElGltM`hlfNtnMXaJs#Zq$dvXunFO zlFE-)SKg%-j})jt(di<&tI#vs9CvM;c4%5&?7unP@Nmc(UX-qmzf5o@Ush2@i+plK zp2D0b?pp~5r8qZ7%^Y<90=y_H4fxRMSbXpz${4E2t`$RLK zVm#$^tg@at<%!W2UzW?^BNf6!17fXEyt?(8h={|U&?$_Y3t!iuG2lP6pQN!vvO4`? zU$+P-&0=nNAbq532k11vGGu!TmY9Z;TtLF7XuHKMgIg$B!<)&OCouLj?E3xB(1_b- zn|7x#`(o_S!nRil^CmDv2LGw;8boTZ585k;GBet~3ITfO1lD$;LMVgzz?cJnhUA_w z#D$&rrzYkO+8BSUkXHD+*4nn`ayWr5OJD4&rEG6jk9-FN`>nY5c8ug4fX2?BbEL{@ zi&%lN0hjGB(8O!4YDp8-A}c0GH}Z*bC zBlc6rj(g0$nJ73NA1^RV%U~X>NhUpS`8ogfzE;gfGU(u_j>qM}K1Jiq0@F5OTcrh~-sqRZy34^W6mk^M;+b)fu5RsjAL|M(Ts(|;Mfh?clM2|E? za6ld2SOKf~aPI+Ew1ks9-=E*eK=gyB=T@Dc%#aC%f#{_1awai)zC z&?X{r7*3YKhzZ61_hRc?hjKFqV5O*ZPf+cqQ_*N?#(9+Zhh&b4dmq(IzP;I3!N7D+ z|B#t!Sa3YjRL~jJ$uSV&z5`j~3sYz8>{5r%tT3*_79^Q=bFte_A1jOpAag!8fXMYX zEBDTH@GrWJ1338?C3F!pl*aThB+KkS=0x4hI8;Viq&iHv=|1=k*906FJeLC!ZdPtP zZcXv<@x+AD@=ar^7qjI=n`O8uLbYN_yUs%@y<=~s65ncXY?%rMz$E}H)=59aoHE4K z-C+V+4dQ&Dx22AokincBe&$7t_og=1dYD(`o4lWNh;TAq-A1HTVATw7(PE_N+3>$4 zvKFePA1n{IXuI9X$I_)ElJ$AvUKR+8JcnYd8I%HjM1H^O zBm(P`1$0YU#W$ptFmUaz&Y}C0Mk|h-K9R=0IAaHnvqEg{m@8!5JDLTOenS)8@tAi# zC0PHAsW2ty&b&@|tc{2K_a)zaOoojw6YB}g`5s-&1y@D(inc8 z{fxlu5|XU*$yV$RK3YPsVz~<&lf*|LV*AKO^1#*n+wYbfYZlK1f9TsCAbYV-fBOEz ziM1bm9(zr6LU2_TAh8C+gsG6_tCnKH$*TVmK|tGh-n8omA!SmjLQfsp^Fye>8Z43F zKUT9VoJW-kdfx-c%Rm6fP&0LVa)rs_J$^@jh>(yV?{D2X0c_>M_1Y=>X(PQ)(QhOo zW%>~lTyQTN)ofxrW@-Q^ivqz=lb~GRkCJ2 z8y=kW#(kwNn298fPZUoPI%Ua-s?_iri81gi6KK5oT=OHtLOPV1Rw-2b!*(F)Y zi(P)C{bDEpt!i=Ra`tW!8jzVd|&Zh4#-%K3_W`k?PwP7ao#Cj-SA<)hBMES;Ha zpVZx~-2~lkMEtvYV?uXn_tWKC@ak1t9)V7@x7%M*v3TnTQFQ<8etdup3s;krbSE@R zP8of#rA7U1+cKHMzh_57WeYKwh1{wSi(pXb?n$SJujGeFeTis2q0iEBn$_`0;!ZS7 z>hBS!Q}Ox+3gTcs%?h&As8LtBX-B&HAz@ygiSMsEe6Hs=BAb;S*-yAxhA+o9x{3S!e28+K>raqZdNxw9;Go?dw;a?b%}QX-B}&k{IMOE1piLTpWrs z_+_h34Iq9uq_ZQ!?xxa1SqeBncjhEYR_HG8X&=AFDrdg57f8zXzfExR*OwayM zj+F+@Uxqd>dwaz=~&5N zTuG$*w^2~;uj^!kG754q;#U&;ZcAU}{QU3Yi>;lzzDL0qKh(bRz90iXt^zTcnVbhC z)hBVFYi5``gUa%=LFtb5_&_2ua~jW?_b{60_)IId${{BemGJ_l%*M;y>n0j0@TK}$ zoKpgyoMfachchHU*1WUu?erYE=gfKAlCSuC!Ud&fc+;Yb1>LyEyK-tLOwXsjp+4IU zOKnYuyt#^GBJ1!*B&ah_NY0Lwo|Bvnh6?za(0@+Dsvh}6P#Z83udw@-kpeA{b~CyY zohYklT9>CjVyiYCJy1sZc-tqAEM15R4l}U*$zVc~M)9_F$zKuFN_UpW#mJDk-{)RW zA0GG5KZ1oSKO$c~@>&K=n+!&T22*X%2|9j31*p!0WPj@8x85rpdR?nG=4F}stPJ7p zo7#!CKmA!!5izwWh?C}*;&hGQ)i+&ge)=MxyeTfWGFtda3cSK|0cEtuR=cawctbWk z;4KAshq<3}Xmqc)jH65WA&bEGHw;h`p*_FV*5ISi^#@PF4ZE($P29Ur8ggf4%j_TX zQCaOSY_Bb*gI{_EWtEZwVo-dC7Ez@dNO}rxJk!(LOW|=juzrrWj*;q&QV3zntRIL8 z1=*PuEi@^ZrPFE-DsVZGgE@nU4?qXrdsxLqQ2h>T{AQO%KPweE@v}MHm+X@kTA4KU zM{UaGpuhgFq%(aoQNIX}203qvo^-pr2RH9#rM2!liC{-K6IDG+2bERT(t9o4+3!`U zFb>-r#c5aSizsSd zUHtr|vtRsOe}5r%xQe&GWTl-Gl{ZS)Bq~jtC}nAHmJ)3;37U%d$A~`&wyVOPDm_Z0 znQNU)mem7YCm<HCYu_AiK8_Lbf>@a)8JDVT zou*}`cenDM{Dh(t{XN*0X^X7WXcb>1eSNqSE^4sfKBXWwYcyT-D zjuG500GWAqU;k;S*znn!mtiTkrm(Gg>civtva!FW$$Z-EuO-%w{U*;5kBn4-mHPOk zkuA+Y9a*LZbfs~m`aJDd!C5UYv+0(TI5sZ$ya!7M45O}l-{InsAaq!B*bDNCBvm7q z3R--ZJvJQXzrz{b6YmK*W)Egf%kBT~w8QGFvQ*%?e}bC?twIwh#4b7=FH|tz^c+b* zcmi4sDci^A8VN&l^h1U@JHY@gWUY$dc0%U7fDwqJLc5d8FPdA`t6%(THb^?l+^tr{ z0*1dTeG=H-VH)Uf2*_AKU|UxD-X1)*Iqk3^CuwDd`3M9KT-`o=dFYJWgrz-*9055G z!mq_kPj9oHTaOZUy zh*2cGs$47o=-Iz2$2$V zG!*-$ePbY1gQ$m10^{(*A5z5#Eo_?BVV|IhYI=UUt}97q_P7!0zK;2WAHtC{fd3S* zy-nUIgPZ9&uXY@nRYi+2#u6dDK_Ra@vHc%1p7w8=I({1nQ}t+KQoQuyWaPv#$Zz~k zJ-)82(t^scQJC&-9W#i?MQu`CWwxw$M*K0)?-_5t1IK0W{L6#XT6L0XIH=N&z3uAY zt&EoX;v8q*yY}&xSUeBhOOjUzSjgBrATH!)Sf6x5B)!u~zob}}xrbHCBX~vgjDL=3 z?!XdfU_i9u9ne61cJZDn8uXTjDy?=9+UC03v~5Wme{QXl-T_AFI$GTnEs-*SM(j<$ zdvHJf^di;q+{9}EB*#>$)5EJp_(5tw*RD(4d_&boQ~#dBq*+UwFtYqCC_EWS@27Q( z>D@QbtJp5Q^kPT@&BNB4wFGCBhJn=2k!3Yu%)#?-oDY$NHi_U^W&I3casIH zwHAggG|_9ck7)M3Sf{xNSXo-jV7wIJsl#3BU{vL?BIA^^;`2P#yTM&z zFr|@Ad0_k4>FvtcT)P1lWt`y(U$tc|UF67H=>X?DW{iYpZ^-fuj;SSiI?*;y@+r8f zxF9AcU$ba-V8uVZ^-3ZI?g~LtXNUoZDutPin`Kvc8=16-nA@&fbUiKpWAG*Q3Bd2Z zB92HplNjX@kHY2fX>65%SEt%w=%Q+A{H);FC60NUQ|w~0?YQJqp|vjN8318HSvi`| ztNb>BOVA8Xl@a9VkH7spo@&M>HD@4;tHfM*Fr!Km7^;VVZ$zIpzvjf~@D? zXDqiL$pTiUa7H^R-Vzwa7DmPCuq(;~R%)gK8>ltMuM!w%GMf*_7tIWErL`2r#HqO4 zd~MkS!xQ38kN}g4d&m^IFT}qy)KGA>K00FjIoH_kH+%kFt8e{W0@`TE`{j92V8?Z2 zYD|kf+k`CW%KmneKfKlN*(S;@r@_stTnYZUb`>QM%St1 zd~ElLhE~6Id`pPJXK`MT{*v*X-lszy_u_fYUom=rhRzJn{=>5sT9?4H10LY4=pP86 z**WjN5ZAxkcjazcccP&e?Mpvx?NTqU-)*yj1oA%Qqwaev=;2$-BMm51S zN~9H`=SJNH=fe0^|x$8`C9`# zF5V8F(<%LgbuS*gQ0p`OWd9t$rwpgv4JQ4xf5g^psQjkh07-@PF32*SUWcaY+le`8 z1R^sny}NH;*GEzTPNg&-2?kW4H6S2IH!hPB1?^Xw&5{9-(SP4}uM-X-qz}KoB3WbC zD|e$F4hl9V$Tuc8>n<~R8ad*$f^~y@Az1$A6fuiU_qhRva3r0z`N#{uR9H+4aSBLp zU=%eWjf}H!9oG*hP(BOg1arK)fsmJmb?Uoj_aP=e_!O+4^;K5<*&Ht4?vkovfsEh$r#J5m-1_t`pwxKp z7X42A)91b*-;8nKLe?o#U2^9%*T8RoP8-d>-Y>n|l?RBH?;E?!gJXWQPF z=wCzmwp4~O=dSanNV0eQv(LAF8URb^2|!Tgo!n}Sfyao84L^oRx#ce84uS@gN)Qh& zpXFP8_p<6Q?S_5;b8vqdOj}0vyJRRW#@#oQf!f%u6l>UX|5*&S?f+N+N2o!aB@gEq zmvX%ZJw)b}Bcp>ZP9k3enb{V(Zz@pl)D-JHu&}f*fl+F;t-ePi-(o=0$r`C16ld(` z|5$X372NfSyW*uCb^iMVkZk5{ zhPdm&Wbl@cMF5T#zLp3ej9@J;?jkK4uZA5*p1%@*_1vx0 zKG2ZGzB-hm!#>NwHJsDbMFsyWocOKvMYbd{2rm50I*3o|WXMM<-LkO_tVXIx`w6tx zQau~0cnh$PHQ}t3(btNuB`-0pE<<1dmt_Q!&?dvBi^lTg`farV_}{-NFwgSr^SqUm zL9fZosOz_PP2cR$@OovHoi?+mPBDJtqKA%?m=5U9gCe3WQh*a@9MIDg zIMeR?+qV5dT(ub9_ZatV*6xMfDXVc_Z`5dj+Hu>_Wz(OF^BsJK@)>~Dw`g)3%Hj;V zbSZ`Xt=h{$?x8=KSqrmv@FRB{xgz}X7Iv=V2&6C8E=&LVmrcs)u!mas0E<-jrr`g8 z%9uu#QmIqNe}8=E-Y9}$%?%U3;N>MS>jMs*sm+bM1Z-L*GrpUhP5%x?6Jx0;$#YK7 z+R7=A5Uo%Skv0Y%@-}maHPAJZJ;yIUA}L|6x8v&50dX~kI2>Ut;LUd<`oUIV_<7;5 zn6UBsaNTRi0kY)A!`TS{iO7Al}$vj#~W z1+2V)9o5b8fME~+?19RP_eu7`jk50W!mFdq4GqlV)pNBRzhM@egwI4JHjHU?v4EpSBQsy`w%pLCR%~TszmsH&yT4(Y2?Q6UE6NDSAeHXE* z$NhwPle$7CNtYa_cf-D#UI2%?c@WB~*k#I|?&MbRcY>HQYAvKeG9Vk>W@0xH6OC!# z;g1Tjz)NLGi`f|C@cKgI<;)D?*%BDgr?ASD5fo=0m9vaxe^<(2>1?c&owa6q232Xb>*hfC$ z*hX7tF&;H*xsQLq%L^tY=M|p^0q!HuSGa|kXd~u~Ufpf%dp*igwKMQL+PW00&aT$A z(GPqEB{~?*myAL&>Q7TB3}i6wT?IB2?ceNzfR$SwGF}b*Gqi{Nuhy-4PEu}R3SOpY z1edCeF?2Ra<(7HK|4dGuaia%VAsb%M0|LCUK~>RqskArl7|_DT(RwPSSdYs;=d+DG z32k?#lhu**CeN6{9%vV{>~#~K!g7tBX5%iLgQ?q>k$INWqt5|qBkW7*KBTdM)(w8%OVz?Wdho`Xqvc^^ry7q5D06ha1gOH=Zz|4_gBU0g0 zbgSl%dU|i;IIOL|vy`-McWrq|rJoX7#2@nKJr8A(y(heEvD{4mcNfp<#Etebe<~f;1FbaG52Tf=+hTA5jO~x zGCJ(bxt)f$7&LK$fc5SOd>saGoVH_qo#W;mQ9v-YAFNLPWBk?HU8N3QS)FGLQP2FZ z<|4aso|hz#vbtP}PQl%zIf5~fa|r!3f<7+!!vCwZTVtE7_R(Jw^C0Sj-)n6?i5px_ zu>oooDTSBg#aNO_2a;E)(%WwugomH7KPeo&1S-F_C(G@*g{F!!G74WStp#rZ&?YTDpE%9c`rqRsW^^aquAiZRhK1e8Qx zOxK#-2~#boIaEf`zhB$p0m=FE+AS1CSMpUfrNq*}#n*qx!G-BT-!>Z#jt9>4V>7a4&%>?~z|HzkQeb?X%gD^y z-cyCB;|L-J5Zde=h?GE+_he?-%qLcOUPXcj>J06b1EAKCZ# zKjnv+>NxD<40pO>nI+Z*#Gn?E8zcVV>%VNK!Kanj%Y!ZLP>d+y1PEeLk$|oSE0L5d zChpzS)vi&4A5Z3O=VE!NF)Xo~gA5iN!W%I55^OOv7009yi%#jUSdzf}_#m_)q1_Fv zdtQ)vmt|Lh#&^d3`cDe)W`SBFyMIvc>C{gPY5tef|Jb5eQJGRcTR6d7(~1%OL0t*5lKFHD}8yj-D;P?s_Vyh_ITA8ryro} zqg!SFW;Apn2_|3t@jBF+CgXkLtwE8tVQDCn_3qihXN&bvnYI%Plf5>k-v@R4(zJKT z54+F4nGz7yKwouOC&J|I^DEfu{HrS2-XeKE=&koepMAINlHeGUph(0SrS4U2ZIv6c z3`;DYwk`fPhb#x3K+USBLC={ae(JCosUn%#A4k=t8l_^z9X{vMcHrM3^a$Fa8==pt zuK7xZq;sAfzP1L-j7Su^HS5MWRmY$^$7ov6Ba~{^jQy^Hzl|!*-OJ?KZ$W6iF8lUq zPe6qgPj&5@cx8#05ET8~mb(?+$(*s!KCJo3CPPI2CjR(@Go2Tg$-A|{6|nIaSIn7< zfZ8AWMtVwU!S6#_Rj-yCmALM3`%0NYtaOFsECN=i$w=hiY@n&4uYX9bWgemElGhY! z>DDmnK5R;V@oJRqhdW^pWNLNdsq`!j14~y;PRpCYzy3Ie7MDBx?N^Ab+$Gv`(Tc%lyfv7u#YrF!|;I+nOJ1DpsMH`dmsf;^SQn zSS0}rrE_UV^kQ{~a?vSS^-b&kL)m1d&C(A-KRXF3Mho!w;kVjEq_^%rW`*-7t_qe) zw5o4E8vLQ&rxEc`Bql*}olIJcf#p$ej~<+eA?LJTI@kUP%GTO#5))|E=Ck0D(h(}) zolhlz5t#G!w}jaB*&=Li2TDDCmMS;w9Ys)^Ae0!HIEb)}IsaKCy_-y0?#6=K7B4eP z-((df(1I5uO-!ex!F`AI`>yhpQ7@N2gOL$sM@>$3*nGj+QClDsbLn0onP&N9W}}^I z4!!e?LZ8Tq|95TRXE-_&m@T}%>>Hu)nDuS`TLAI{!qDow4bFpe%8(R`r<&;+FAU`b z0u_<|jgu_T=T#cj`PbG0*;5m`w9&|KW*O>M5R?!GC(S|fABygMZcI2dez|GkRM5VV zLJHL|rk#xKd^uVQAdVH81jHlG#I_GsX z@55xK%Fvs=^cke|(1pH%YN0tZ5!9lztb&Qyd%fFt)yH2dEg>;>J*pqiaQ!1+@Om^q z`D`FQcopwZ&Uc@Bgrim6+9_6HWKI$9D6An0`mhtW&>#Q3&JgR%T&QC>_ePTSMUgYO z^WhJ+#=kEqz+=YJ{HSl)et{KRC#6X4uWb&(tnWUaj_K;|MMd0O*!J%hIM$T)gjJ=w zNBmbw`lWKG3HIeWgcU!=(xFYA&w%Qsc-H1>l5;k`&Cok1Uq^3f$s@N&&6TmAMk?AYk2-2*ZeuF%P-6zd2$!`56&$a9_q^7SYxB-SP(}Y4q{qna5vWD`@k5@K*@bwPE*VnrbGXig3Mt?WGP(zE|)1VX<7l z=&cIXvygkK9H}v~!hM_KNQ|3Ch-4cwX_B2AMPMMS9EyO-^a-UHQ?L3e-r5#O*SNgh zi^NQPmc}IZvLqZggP8*5Ti*=8gN| zE_)H8igWK5IYNtoN7F zg5`-AOvk-i4AmJ~YnsYG=0d2uzEJt8*vqy&548qA*@QA%K`J{tIZwPTxrSTs&s#VST3 zxkX537H*(&u-|dN9tCNlGw7qDM$zpdGsPoaTU4wzci7Wv=hh@J$)R99Y;pEEII6ML zT*k@5L{Q?FrWYaU?_|v*)ca4_-fe0xYp_{xShA+{!ulJqNgQxX)xk75z8!TMnc4R* zsvzfRS#O!{FIFi*Hio+Pmg&}zNC{MFK6?@lF}E3o7Vqk#YM9y6NWc~gfe!(R?NqG{ zmqil0i3XOw4;63IVXG#1^STx5S_81@`y&!OgdJ$aC! ze!-khKKeD|e}&c%CoV#T`^D7Jhql&SMC|Lv0x=b(rY`Y?h*rJlpMy`q-r-&SZl0_g_lvpH#Y zXnsTP=!!;wJJjrB#zD9q($Zq{NiN*8^W%w4OzMLj8pM^ZZya2#&vsLq!=eZV(m}5z zZr#%$%Lku{QxMM}%%9e^{+x%H5KK+9wO$!Bqr+P4ei;xttKmjPC5_rl)#Gag);NXK znV*p~uKl3AcI0$368hgq@3~}JnOCD(Cu%o7mIpUblzRo{Ve$jTQ4L<4gorgxD!%Qy znjdcYoV0^49@Z-&G5&=44^X`&o}uv06csCE5_XKK;;6YJ87o<-%zbNIK)8@V*gLEW zn_@{#Dqk@#BwS%|^gv<24Yhc^=UAJ&*es?$>Ui+WtsCwd=};1XLNk-f8%D{S z%>!5#^RRKT)PvSTn`(2&aTl-G{FB0R3V$2Rtw}j896|syli9zNo~W<2e6vTIk%$j} zn52;kT}x~CRH1Pny|?`6dY^4;3P(w4+?wh4>!EgnO0IKv4GROUa`o&I_da*vkd4ow z`nSuyY|XVde)qI(zTV>zV(8mcNkObOWkgXZqJK#kc9 zw8A93!7inReBP`qylJKhQ++ssy>ly*+jh4rES^%e=%!IKwbP^1REl-jm@4o0&tlpR zPvnCl5~MG@^X_<-eu9Y-kyZPRGxylex_wp<^b`0pVxe(IR|_5+>goX;k(H{1s>~ja zMzl>qEJhz+6iG^8xS?jI*}al{44@gRqh#@ybw4#4OF=>+Z%w`I^GDI2mG|Hab#@ux zh{d)m64x$fj(6(B1BjeVpR|}T!=JTG++@YOujoa?EPf+beAn#iTnn1SzwcXPFFppeSr!0PVVoZ##m-;3jFfMwQ+&olcgrZ(ZoTm zqP)VNL^Tg@UaAIfbwK355R8K$ZnfBumtbVuUc)|LEbzIeLE5 zr~1N4i`>#H#PhIOCw>+f`i*D{(je+(`)OnfPD$;fFn!>3e4)aaJ6ayetp&U7z8?F# z>=kHy(O`?h5}aG#xD&HjuiRsL#(P_bp7BHMPnM zf~Ropb*;ysslTFKgg^pTQ+hSwsg652n9(Qd!%y zdLyTTdcS~Mc{+wu&gGKPYjmX>=6rfHS8aQIc6X-suOFoNO`kajE2vAEcr6eGtoY?l zqT_a+H!IY zePZfGZa@F4>b+F8F4HiEAbQUcLUJIrMF`_xj6Bb%9{0Mz7-Wz%inWF`CXL=}u1QP7 zL${OQoo3XS>ZDN&j*7ryjR)Te^PifoOvUbwN&1Gu4DJhZ#Clponz7ya#&7Vq9IqRR zJa{~0%#w{r;h!!Y^a(#TS@_IXzm)D*c9d*sz*4X;!s{m>v(J2`+u||UOJNSNAnhEv z6|wK02_J@45;lIsHjz1`Zc5b@8eWd+@1WP2!!+XD3rA!f(rA;3 zY{xq{b|H*gF;a0SV$ZB7{5HNCJov*ccKZl{KWJ_?I3p*7aq97p;||3T&*SgfL&DdV z8jnTKRV(WKyHbiYd-GpYv*EAL=d2=_0HW(9=|#*!l+h4VwS&)_c46z(){2!Vas1%i3RmhM~7#H54QJkQ|Wie%q8? zSv9caGyZ8PMd817b&@yYJGrGuC4@Gln8}wtRUa#F++drGYKlM9(DfI>BuQW%l5ed4(}0B_C}@Dd~VBfVM>u&B`^L#eaurUf{r8l z+xUO?OkH6`q48NLwej5~o5IJ>_JaP8c-B=qKT1_9%kKy#{p}7s&c1r~Igu`;C#-OA zZ+#6urs8+0$@6M&2-Jmq@t`jJmZP$SRN8=*3I1E=Fj^WI3sN?TFy%PkhJq*NVyd^RVudNjf&Wf2mw9qp4ZHUZGnsf6!#ga(ntSQ1TQC``42*~ zO$VZj$EZ>w6)DF$@V)ZoHtQK25fN{&^e9dv*M1>PXpqDo)?or1Rf?sjv^B)cum_R~ zKJEt85^%pgmb(6DT1oi>bBc}_vF4BDl@Z5qPp2Ulugy~h(|<=9&_0LmRQD2(2#^w( zq{uV(g%;;GMAzbe%DxEFa#faLW~8s93ny5x_T?<6p0I%=(_-%HlyJ;fyb4$8w4rn* zm4EQ8V6tYDVosY4f6$8MVVp;Ft1dCcx-Y6&LwY8)i7+BtUE0>*th&Z5gv#hn3%mJs z1Q%wVR=a0N+2PY>m~ddwOMM8CQ8}+ee}qB%RKk9Q#E_WMVz|O#o$Bz;kP>?!6~>Hwmh!bMAvU2* zBXnN7nwTAhPgxO&>Eh(um_s3qog%uYUz@%5Er~Xss&BK9Is4j6$=eT0G3xk66@geZS44savmC46J$iY_H6c0R(u#m_ zn&9@bzq~|1BW=aUa1F7Td>< zS^Y|Ape94aBz%I!S=Z#NSecW`=lqarxzbwpl8N z`dMo7`Hx;yfif1$4bD?8)+{qT@p?Z=Ykjy^RjfO>_Fqo{B4-%p9f&aGN?y4xf~M1p zkR2Y*W`50z=N)jn+dNHh?bFMw%RyqrXGjuZl&?4Hh4L+CR7Rzxr)h+`CeofGCg-KN z&ds}w(T|+4_7O0mZb(=as}g$L64H#{$gF;-+o?fBRLQoMmbcc>H6rRlZ)-c?aBqLw zlWGQ@OEmtz1hUuVV4Uyb;y^1*CsW!}P zbn-Z0j_(R~76L`b4AJ;oUMsp6NQ{7wAExZjw7JNIS>MEmJm1w$+PtRn4mRggM(ION78+zr@Ct8!gre+9)FGe zR6}#2!a^g3U}O&(IE0=bsTtcA^BvOaVdbv_ook)?i+$&c>+E(R0#3vG?GX3yJ>7Sx z+1VRp-RY)aa>1LyAuGrY!I~v&UtX|e6SWH`Wm>9|>ecSVz8(;MkC$f|{av}lrLJ)rUtrvd=)6VSWTBBu?T}*s zeuFCcYdiC=HsZw$FcutO`$q;}zZQJj`s-@=!|--RdeC;)-@EO8=QrcOD5v>6xsU$O zv~1}QO%>zIM>1OcB%MfE2^8I1=l&+R@krYaZexk#He@v+kp~5^Y@XjS9`Vy5z5)wcH56$ zf4VDzqC4hFF^BlPwe>>|SZ~zC=tcv;w)~CTW9-_z5;a=2LgYXRdBm?>VOv@Kig`xWHV}9pRY_pqrWqM3Lo60tK2!UIr_tFS zc^*f5AtU(8S5vka)YWKuyKaZR;s00wy||yqpTR}Meb32w|C({;LiCyz4KE z44&x0x|PvC)L19sos3K>YHA-yoYT6%bXt%^Gig+tu9G6zUL#I!KLy-xw54aL5$UX3 zAGawzkqga;^Ov#LzP)nkqh?5q+;-O{8~)G74-cD|YiSmOi*+#3z7gu3=7^>uMutL> zYSLm|A9(9^Ylx6J1ZB0__+{vB&@nFk&*)U#<+qK+-_Z)~ZvOLYy_-pT*v^MiFaP|g zA{7E9ufbrldGTb8E!&9qF#D7fmrI$B!{JtOxeWvlHCyzK!i))HZzO8_6I}FP2CG#h z-IXWIx1(E?kg6Q`iRAne*t+>p2aVqd1nta$&6G+@VMsB5#zT?b3n22UP5ob61(mOn z-IeqsL#S^A6dBK^=bi9ncrBB0>RID*9{HWS-6yd4By}UjQhQ7rt-m#_(lR)qU2HIz zs9ZGvL5R^IKAaL2<=6pE2h-C~)uIgzf;ZR-F$w8ax{Q8ovnBNt?Z*)?;EELjvI=o; z6_e;M5Jq7=6TPN8|2C2lAtWXCkefe>l?X(StBPomZ>5ADV6pK9!l>Ola~kX=UB~ zVJa8pUQHE7h)}n{NKbOM{=C>2|AhTw~!&%_&xe;S&5m6k3?EU*Ul}1$}s=Q>O#MY`oQ2*Tl5(HS{@>l2R>#dfSI++=)WeDC8IgX8HQMu&huVm z&wDK4((kb?1#LdEQhUfU^6D_)6IV0VofVJjLll~GT!zi}lE{1Ym41gJble0NkEWA# z)Sn+ZOl>0Rld#21DtYo`%i@g4S__U8P2mLAs~oX;*OT<1Gt#~D5T8Xq%S7&?O@@|` zlJs&vh5+l&8paDyg!;W&-mPo&n~xpr{WY%X9V&lM)rnV#rL;7HU4KlOYv2&_2!i;J zK9+Jq>HKZrF_$^}kgfKU^+>|yPa9%dDw1}d7pwGdZ+i@iHEQ-ICbn0uMWI;a9~Qif zqAum^y#LgS)#l&eQ_i7y#S#B&V(sIw&O^%nL0EmY8N{sQEm{hni*R&f#cLUaeUB16 zNbUGVxwYyCUG6fcW+z-G5P*^Q%8(EgBkia$hFUnR5qdT-tGpytzA{5->t=Di8u6(Ewu;Jj=LXJ9@0blwjxoq2jZD^I zTsOH<%~?l)TK3i2)a8kcSi<7UoB@RRsg4S2C|8G`2xbhroNJIcQ93L0`*(Wg`w!_|jS-6cN)PMU zY1$giv~Z?PE}l@cCc=D4RMZi3$UA0gMKm0079)gtcqcY)+#u&RXN0;T>;haiiTveK zC)h)iH0bV_z$fl4fBnd#&T#|tPrP3X%0aWx^l|P|Ed#mt1P!*(1P_a0YUH!qa!-^6 z?^P+q9DD5bHDJ+ye~vI@Aygb9T%S*^V`iqABnswlzbBwpraszCPsS3lO8iB-&{wrs zhg@R46d`hQrCvh=I3kHe@ydY~>>8asS~M_0sfrJLwyf1_uZr(N#e$k~00F)rBBmwL zAw)sXBE1s~i`;kwT^4x-+6cS@&~#ciIa?{d^Lwi*sOoPeV-PK^*aBlu+yeoLqRC8X zs<1f3>DQCxRl1mgadm{L(w6W8^2FE{0?b_g^uc`0RB2d?=* z_kU6LsH)$yv69cVv!pi^2#c)LHbk2_zOdTgk=f+ul8$g~-T9L%*3ow7-{YanK&;NQ z)1+(633YZH*->ua79NC&cHNiu&924#Mcs4YQ0%O&Sau{Ye^= z-qyV0me@o~VgC%O9zg|o=X7H4&cd}Ps#ml+j3teP`92%pzE~X4KXUp)l@-PqfeF@|I9mM`+Y+Jt&Sw{0Ki8#4~&dk3J zX)DNW3OVkEpq}_6XO8SL`=e|iS|X{5i?2UH5m!rmy@+!3VSs_mtJ0{qpQZW7P{i8Q z%Va57B_Yh4Vc13H>kdYNRIt}p|FBqjfh5dLKbcTkh1Jd1;F{Gw!gjw768}?uA74^p z1BTvGyFZGU*i}f9T^re*E&R*1_C-AqDV(k$4NWXwQ7L+;`XDy0=r}V;{_kLZ`XIu@ z^{e?)tJPg@%T#aEebaO~fmUlWM6xZt#J*FM&kH_cP$)Q1n{%Ow^Mi4uM-? zO!U(44dWNUj%#mwc^yA`L?>TMH{YXF#9_M5&~@D>?eH~d)cNMrSqk?O(1!zSh|Xzr z>g_*wLM(-kc1NR{Jh<%QtzN$E7)rx-gFo^G3lkVGQD38IGSwt5zWFkIOE05;#D%|1 z4=2K%s`LOXjp@%zMRFqo*w+??3Y4M}{u;0Aan67v4%vILAl!S<={=W7O+*jP&$Ofl zKR$!}GBkgup^!8|=$2cQMC)5#?N|Bz2vOgMG~bGm7Q4t8HYF(N{c5x`V?|Pl6IX?y zES%CAWuut)RM!L@AYZw!_i>I#$o4@I*IrMSJw(Qkr+*bpCzeHlsTV=NZnrQtOAm@j zeLBnynKXLne9VR?&zV9ztAZV7@oBBp(9J|7->^5>rohulTS6qs9zQ zM<-_XV>abrw=v+@6`@qg+r5TR?>}J#5!)6>(2qFC7A044Lrz%}HK+Lu zodo&3`n9c3yKB_Il%&uQ9pa+QMl4;1R@3(PSGhJ;9R#CGWt(fWW+qbMIZvXF4L3VGq^wJWKU4|r7NM?&+~QD!kaX?}&~@T}X%#LXUZR^_q(F}&0ep*Spn>qPwlV0#Ny&w>`t%HC09rGJSQi}*OFv&V)`r;Q*QH>JJ(*C`I1s+`sP>Y zLh64e`3tzvHytxm|GLMLP_AMHy5g58i9SxT3??@Gn^$iSGO2xfD%I6Hjyk8KwOR3$ zeE1*3u((LeTEkvm0&bmd$-CRKK#vkM!>4Dd#QxrR&du9u@)3n*Dw4jRKKhdBp#7Hz zOYA-H?Xc@_O#NHo@-qzb){90#w-ZI_W65Oy-(wM|6c{)ogT8K z5cn|QT6dNPd2be*c)dvUyP<^aZzwo&zwRuvq>*S>L{b07TXs*BUI?>k|9mLG(PSHH z=HANLwE??uTRs=Ih5%Ks2Wwj=4Co~XlTbj9?)M}%S*Bzn81QwHyaYlRpmOik>qFxP zIMtA4TusDs<--j0rT$sw5dGHp=mE}a+s4kG*9n;Jedh6%H^G_aMP*AIA!&q}O(6=J zuzn$5e;1A6_N!@jPcZ)Wupail4+>#b#kPVD%j?a|gM(I{3ac*QrB zF!_(3^XV!zCOY&7BJQ4XdIA>tKQw)HRFm%;_vjJAC}D`e6r^jkl%z-_Ly?p&>2AR> zI;0z9G*a@VyBnk=C8SHb>wWya@4It2hqFI8=P-3U zIV+D>`241Q_J?-CBao!m#65kpRqHY?pENMz@-L?SW9Z^=UKL#qYI7g4Tl7BpaZ7*v z*%lK+^xM~vC#4n+PgjGW=j5UTZLi$Y`^@+gDE1T$Cav*}@@BpF#vgm4%3J-mSEKbn zpIux2Q){D<6Adj=n}>V962(Q3%Z9<$9Op23%KtMS8A?N~*ZIzG&l6|98jp<#D=Ghm zA&y`VS_ri78TzilEP~`Q0(~13cMuJA4(1q%`|ow>Nvl72y_OM`bgq zL0;M`p#W1C8(=#8N{$q00|bsc+f%5U3yI8wVl}MWbXVf!P>1b&Px>=6f}^@tw4d|5 zh>5&%S4z2bW<<~OAw7PK_6GeNc=ZN;y{=h;g!}fde9+62%ZK}XF!?yW=Pw24Ns#)o z@D#A)5lkSJ127ro5@HGLI4#vdGZ!Kiv&TVf?@}lho<`%#2nQ4*&|i7ND*F4=K@D>n z)4l9QdTd(V}URNg@&i}=FRboMco3_2igc%O&3RE{o9qQBH za8-V5J!>1<4>m^&Df|h3*O!vlG+RwecAu$E7e}y_p`G8>`B%OA%k6n}Ylpe#BI_l8BqMnR}1Y?)rP~<*xXA!1HN5CBT%T z^>}r>Nr}{Bqo2pE!`#qHGl(1nF^_!&K*(ZJTDBlT}dSCIIoRV|tFHJyk-7s1VX>LLH^*ygh#alUTs0r^IX! z;?%4xu*EIT|4hmPZ3Y%d7P?CPAh227qm~)t4&@vih76?Z9Kv;1l->Gi>2biZ%sri! z@rx0TBkwHPI%6XS8Y6y0*+>cAd5NYn#Q?J<;hF&=2&PRoO9k~54FmS)6sG{al+w)M z)eKBxPLqCsMHJ#f-SHy?Hp!R3OH^kjqB3RK`vGOdsWJ3X*?4Oj%g>8uz{z+;LGLy%bd!_+r} z#uOl;=i2?#@`6R1g3xZZhZgdu03VgVvKeVDWed17enKd=I=0i*94(QPW+Wm zlPrLJUTiWfefb3(k4^JRQLs!{#O&0Z?~`5+4$K9_Zu{?5 zOJiq`spwOS9y?cRo*K{h7fDC`Jf0V~?^g9kRgm2e957;Yp`ApKFWXOP1JwB2nMyIF z1La`Pg=jxU7p0GO<4go^hPuK2b#6I*9yC_#5P8o&CmtQay_wLDqO{%S&$+vi0W8u* z7ltONm|IAKx=z%d{x=pEqhf0DSMhlk;BA|TUdW4u=Curw;4cACX*pCyGGBisStq_H zq*wLxPfPy#L6-9f$@AaN-yWp9Q$3K+i|Lh;71bbVV!Xf<>+Z~H%aYn`PC$Jq#T4UU zUeyI-X~#OTks1&prBL*M%{UGOoWN-Ls6v-5=TsXRBk*f-WqKkAoi6CJ(<0-6+q6@% zKf8hXqvv~qLPp>Oz@%P|=EL*kO!qvwH1M0AV>C6MA=HaQgv-qsE+Y(7mOqnWlS43o z7ZQ{)Nih~e{YIaa3(e!u)Q5z9KiH=P-5{=Y5s&aOm5O%s6!<+!xxfGe`vUWkO@iUTl3c_fFET6fKdXZy3Gtzw-SKUa0xpU z$YGv?(LKVK11^OJEuSkF{?4u)eqdeeLhO(9{PkTYXV7utL;mX#_OJzs(Oq9zGC1TS z42i#C0xho2`@i}f8?~l*IuQ0}4`PnIW{;65nC|U_)-V&XRa`{|Ysf4${?_%o5rla* zxtix%h=J;No)^^5fgUQgH>lG&;o)lJ`P!!8ZSTQ^cz|m?X%z79H+qxxTZ+jPu6GvU zDQAK{Tk|s07035-NQSAWP1V~K$@u7!6GodeXo;S9SiIr{^`-UbzuxTQ-ZUoYpq>+q-%gd|5x077=gMhBbrgn-sNzzu zB&Q)V60#I08iB~)ri`0|<@mfiF|_Q{Cf3D72n8D7DZJ+EPiOeobg3Jwiu4!K$xufW z$)(9J7kl_!@_&#Eb0b7~658 zoc#HUzKNfp<9fL=BDl>gUULRa-GLC>k~l23=~FyzOX&d?T6}Iz;`ao`Eo+10JF{!M zikvlA5#&vIR6@0`On38Ma1G&0%Bnr{@--0%3Cmlvc&s&Cz=;!p*o ztH+H3=|zJq5kN!3#TrBl`q*Y)D4(GnK?aaq@lBsRSm8`mnS;j=FFFG&HlyEDI=`S3 zmKT*NblGFU1Mo$hZ*wX6J?_8bN7Y;Ie(t3i)*Vc7&vYsiV_R8~|GtkFNEkB%_s$^X zrJ1_f!QJxc%3gtD23jzggI*Hk67{vvzsbMhwzc_`=3B&SPLCkP5TrP5V2z9d$y86YI(7=7W5z7T7MbHrw^}wDc6TPQ4lB7ml*Lw*=#%^B5K6U z<#0c*2aLycR`_uHw+k3kGHADV;}~_&N{0on;Z9i4hz2ZqUbBep%;0~xP*qpU{5b+M zO&(C-LrS{dd{etstM&g|aBy2&OK-fG&9TW+0@N-%ZpHx8$EukEd_j)B?8NzaEk#3a zqbFS%Y+YV|dX|05n^0n#2N_GZX~AOdP_c*}Hb$8!QN*5XK458?D4kAI0+> zPBEWP7kisRb5xfad0uVjWpxZgDe@z=(AxD+J*4dkf|rmng;5uM`Q8o$Dl7w}*iG|{ zlQ~ucAg9*NkJUbX`wxxF2Ba zXxp$iM6iuQoS@QgI^SXpNNwZ-%}b*_UwHbyX(N>x8{cDni|b`AR*#N8x227|2qf_l zFdz}1hw1vkERI|D#QIqhxB8zKKQ8IcYQCWc?t$cuuxG%NaUvs@IFs(^4B)Vl7@E+Y z*}Q{Rd(R1l`(qO+U}%Dbkg4~RYXC6OiacJENq`2DBugn?jPzy0QA`(Lww4f@1yjyr zIK5A_!s-#t-<2}YHmNfCnj>yO!`&EW3=Yyj67V7Q31bDQJlg2&OenV1L5EKaJ$_u@ ztI^+2jkd0~;7v4Juu;J_;6GpBd()D|!k{YL!H^yRw^jc-82&8%|2`(aiTe>=)LT+J z@wS*+WHgbcG@??oR@iE7JWVHgyHTGR5yw9|LmfV#ei{+Vc|cMJa+m90zk-7MMvfUTSD*gZyPl|0u+q zLKFibCCuje;C^S`o0Me$49`RCzhn1*^oq%@_FR4=k6wK;Nf+N?(TiS1h5mHUqLK?) z@X#SPc+Ub<3U&aLPBZ=F*Uz1wkScCE z5$bakIrYhL`k~I?UUw8k+btF5U;)134!)qw))+`L%^q=EI7w?CW3KOJiA-@?0S*H2 zIC_7-eN?u-Y{YK>SL8+3tj0Dk@Dn*21X2Hic5omZFejBf_e|+k)!;A5>mrEtV5OOI zFGNbZn|k^d5WMcDWtgDERSD1fyt`Az){&P08+(hFehp$i0EtQ}BHEGTbqIWw3X8~q z{a52#Qoy=&%Sx%Pfkc0eFqYb?`}^>uUtIf7wduf*po|>Q3q^XN} z@&BGBn8+)z74AeZeIG#WM%3G(0P0UHwSW%aUPl{&IoOO5U7Qc!!hZf90?Y}D@A)y8 zOJcHM*Z|=5^SN$*Ak7PDymD}ZT0o@mV~@hDgW%8;l><`s^odmLL*%NKCe7q=z9upO7%Gxu>0 zFq4WI!&lSE%^W;n3qxu)P)hfI=uvusG|1_3?eLuW}DO!A>%RI(ljVCkmuZpm%F;{6~PXiepdHiK|kBU$|n z%3sf8H}uXPXi%GlxC>Z}{y;66pbU(4M&<7znN2g3zHUE)H2~tAaLn!iE`yvBz%p3- zp2s>0fdfyG8Q_KbK7Y2FPPhsKly7vqT#0kt3TPp5({113tSD4%(>GVh35B*?-CpzA z%v=5Tgou*XhEoRRS7SOrJHWGoOUOVR>0y*UgEf4$YdG|@T&x0mZGS-F#eKK<2Ect|xh(<{{BsaG4M zCRXJW{3x?AiY}cMtF3;R*otpm<+&RyXDJ1N3%>JSmM67yGn*ZB#Emv@7i|CUZwZ>9 zgY&mV!Ox{oT91WFY( zROm`p*!3C)z5AQ38@t^$N#kdK5_MUt6(nY`FX?+!MK8{iA(!=o5?XXRGbB!L?=+My6$jJSg+WlIbnuN&C zW;GUU=~69LW+uX$;>}4vqb2qxU8bqaB_Hy~mEWtzh=H$#0CeqhBazpkMb!WC`lrSL z+2GFe(wWf8uMxy97Ttg$#pwBFi<9iGLPpAE?3myUI|P%@(^ynINkdk|-fwxTcYA3F zK~S0U_*67b5&W<1ci_WX?OJ&*+P_73;fb??raC3;uoMQCAD|le0mMtMzfjGRF;trr zpuP;lkiz(C5Mjqpyr+hamE@It$N)i@P5+hxbw{u->@@P;H8aurzunS5%jJKbg>W-t zc$_@!^h6qBSM=B47)9qVy=d_|l0C z7+d0%^WVPuG81Z$LuW&QR>|DDRGe~JwAtezVslg?JjyBG&`(x6lN_)VN#N?*t4OVSb7sP5EMq| zd`K9|A)XIO(84{7H{twcZXzP%&|Tt)$f%GYEXq~tA5;wxCW`I5EwU|Vk|M0Em*K^B zY;o5_Fe#YD{ht!U&kymuo@m03gm(l*r`X;$M>s2#wj!_AAwW**|Bz8+{CBI#g8#ZJ zY=ipS?QN_zg%Ptcn`Q`K!W%PG1q2Ysn4w}MCn|qewcg$0f~awCm$T7CL_Els13sx0 zj~)pY1ZfACDhFVsxj)VDUVY@(P{&9^iam-QyT%N_A zm%uS84ixat^3XU6zQ5fNfhk@kM1X?K;`r>E58yccn%mPph1Kvb8Zd7I2iWj=6~qG*(#-nx3YFmIKBq-)4pMS}DA}8&2g;8oI6D z_7@Hjtxyg_R4JXi(`TzP+?M|85OdWR(f+ZY(S2A$Q^5kp3Voz&*<|{Fy82|Z?vE2# zst@A#H*|0<_`U3D4z_bbM^Gsj=+l2U-|lrjEk*uiG)F-GT$J&iTCz-rFaGC0$FqDk z%{?4X7^(WuKUj)4!VmPQacd)uqy$Q!PkY6ikRNwFXena=$5D-hhw(JzQsWM(QT7wG z&h6}Ho#(G(p&Z^qq9`R!Qh>s@#PDuscGls3JZOY7r3v$AqlbnECqU{WY4-J2OIiNAo}kO!gLD;bh#Mw>k}-;>To>ZR zgkFGl6iL6NU$Rs&lLna2;aaT>3+G&};|$M*;);gcd3tuc-5Y=R()-hb{?@HVZ9TO7 zbuE7`DRz6~rWRYpr zkVsBR$aK-y;$@_`mv_3qDP(YO*m7?|e$0+9~v+8Iy8#32JQfz z>TDx2;;V*AE5aN20CwSb*P^C|wSIDfd^irrKVU6_R+>&GIZ%NvT%6+pQZ(_U?P5-( zbrz=LWDL?VB>BPE@@N+5`c;im&jfEk`#_Rz^M2;A zXvHyg$5&v39fi(7`{~ZFYys6D3SsT1QY|5eUx?#}n4-HHC-;IR>ed>kWh5`0KtO02 zs}!8Oi*#!p+qVC&RKCFf_|Gr;yOXLl*!^Gc%>zl#qowA(E$;h6!nZ^OB(PH_gaz2f zM~wmdfF07kQcoa;1)xyIBrN)x&__S>;1VUs_R|VNWwXy!zw$bEAZU$V*U+&-l=BN$ zVO0^(8;EH8AWT^fP5}BJBXQJ?&HS*zD=f+o9+E0gb~~}ko@?hht98=EUH*U1_E2U- z4?e&Kmb~O1Z9ce<13CCqUU%L2vvl|33}|d14IwQ%mw$|_J?f{t{m^&S7Sjf9S~Iz? z=>YyjcN;?98O4KuBp$zj0?*B2jKa>WG$C3b!HAPJe)Q2}B4>JiOn72myyeqFT$vWOhI@nggPK+P+4ICn^G5a)v9$R`=H0oYEDkA=16vXHCuxHTAE&Kc zo1XtL>0hKIL9MoiMQ#1=X|M0(%Zp3m00}q$sB9IhAT=J_Iu|{~D-L+p_7*=;Q3Uir z*6R0HpL^~m&Cu(7lwRzh&TiE0{v=85ZdOR`;U?+nmEnO{a-ybK1Oy z+n!!u&xsr91eFKE^@e+e-0J%3ZdzYG8_z70_Q?9l3suj9&WR+N;SE}KLb)g%7M;>} zB~t^NC-n=5#j+E}EftZf7xu&c`#3_|XOcRTVT-Qb zM!r=d2m4YsDhE@P?TW`c#G{Fs`Ul!kH$R<|4C-q0uQwwTYm3$wk_$9I2kEtAp9aN@ z#5P_wt5(h8efFF7?$4mR!LqGxwhz1g)9+U-^5whflQfmI@#XI~o2$kn3cF!{nmI2d zy)thP2TII6qqR=dIyR?kQ-|5^3{?wBO0B?)jDt z`7gm{QI6Cj=C_?^5=$!Gd}N6k%_D9TG|HKMX}JM)KUzL;uSarxDYF$wa|Hpe4u|(8rUqk!-cAwkrDm)>BmC?2%onrY7X1`jT`BOt zE-;}d3?DTzHZkd}*?(IUp9}PEq6(Pb`D@5pVqE=k+#B|18rf(T2b_#teM^fSZX5Qd zKjr^6kqq#T1e*p!lO88qX7V`aFbevDb0*Op)eG+JxME$w6&5cy`?|Uyd zdc4@Vv9Xal|9EL;$3vjaoc%ry^YccHd+?pz>tojhJSz;V& z@n4pAxaoBSrlKnC+1$xMAXR;BQG=&5IqEKRi`Lqur=^Aipw`)P-Xx0Ih9f$?F1JF~CXG*g(eG$7dAKd`sBD?+?Jk~9 z2UR7#EBWpw@uGZYe`AiOvjC6R@Gx@-xRY!5Py94Y-D{6XYis_!XnQNauk@EXw%E8f zsuf1-jD51TV@wLyA~Y{KIQ_IaOUTYQdDJ|1{*Jlew~p=;LNy(6#BI*S-g;!U$U&0! zj_4$FNr25p*l3wMXj!*_>n}G8dzWD9;xm&A<6rC(=YRE_ZaT4!&Nt*o`9axL`}?o= zxx9y$PDg|8xK`(xNnC*Ku0Q6o2n6paTN#G(+$nfJEy(D4WJT@z9kG@N-2V}OaZq{K zAza%~Un8i#^64hmu%Ny=(S)1EbE1M4DEg9aWkDu%R=5 zy^*4FyXm|1(pSsu!;J>Vpfx{DyxFV>Nc|oM%#*?s;9Fx|ru@UR_!94)=2v`(lAQ@9(dZIICZd*ueUR zUu_-I@A@7Ylh7XkYYK24lrB4URO*9LXorEF?B9Vfn#-W~fuw1fvya&arf=w1C#)IS zT+$$E1qzBCUp?2e$H^+uO7_?0ytzncFKl@>Pn7@e*R{w-R(UO_ljBr)y_fGYt^jDs zXOuO*;0J@hheKQANP*3i&H`l8WlFLZx;IT7`1RyG!dmXUv*Q)9kYVmaSKsu&PQ^P&PZEH4ej)?K6E1=%K7=f!*QK``f`KoHK5H| z4<8k;TEzXVx%<03bAQ3rwTV7oOmA8f^9e4;&@Yuv?bI`zkBPuN^(wmv9h&~4miunV z_TnkXfzWJY{lBS`mi?Q}g6^`8-g6K7iM*PNEnoj-AEO3T^pB(?Yu-A;%fxE zYr%^3$!p?LUkxhZa)u%{iM7c|1aHIZiOh=)p8U=c48a=}n4WtK+AE1 z)!(-jy7g)B6RG6UT-Cn?Xb^8)8y3zNXT&F1%kd}HZ_TH1L869b8rO$6YWg{wd z-b~h|u>lSiy|~2H*dTzfI&pR=|ABLZ+g=y+kz!DD3jS9rylSGT&W7IQZgw(C{Pub6 z*9*7GBI646y^N!m^(up+0jEUe)){J6^z}}>1~^95J64o0Gl)-cf7>OsKuPFtm+^o* zNzifS>APMl_%b8P?8C{)$s2->*MgYc-{aU{0GD!lzVe)NXn3^uyG@mr{X9ouPBYxiB z>DDag?&!yL?nq_cJT*MLZnl`C*RDx0JZTeazx}BivjPJoZxwb=&iBx?qkmLkF(T?W zCm-ehUf*A~=G_3jULlqq_UA<1Z2M>veNCLdcex>14L0}t?s|88{ttb459=Zz?Sm)V z5|)hzQ*C+a^>q~>5T5g5TE%a7bo3OTY8?If@bL13>ie)H9bZu2`<;`M6}fRIJ-A*x zU!;t8{cD-PU6KtD9oA<;&hQ2Q>7)CP2e%wt6!m%|{KF~#Ub1%H#mQWoR`e%%4aYg{ zUH2&jtl-A_fV0wVs`20pPJ=NGq*9f@vF#5hCZB*UZs(6yetrh6wZ}Q=`NK0l(4lhY zuS;Rt6OrT2XBN?~_EOGXey;ft;>(b3&8|tkA{`J(bmf?<1Jgy`BFUp2lfKc@_m7z|7neh7fBMgXK(Cw5wHVKVm+fJY@PMW z2KQ{dTWr-5!A%8v2~tllR+}m@C1Kli4pfrE*PLK!{js^R5lp$V1~WWoYu>i5$fRFf z^*z&xxoWw7h}s0*a~BZJVIuFvu7h0 zvdQc+i?8XD)$D@MNc(qdm`$LQGW3YQ0f06{nY)o_Rp2KLKU~8r(^y>uxu8@?$w<5Q zlh)sihf54FLBn6BwAYUG7J3hXzXMZZ%P27VnXz4je|j`r!c019Z`~>s8U-3Hvr80p!@0Y*nNJ z&WU~bGKSF8+&9hkfuSq^jag1R9pbc%7^Xk$v{O7=#m{++4ypaU!!-GDcfn;D%sgm# z0->_$|8l8_u430D0obDeXJcA^)D7EH0UBWSCu}SvV9?Uy4}8a{iJ+sTyd^b6E(;jF zY&`&zskqS5)!t~5o0LfM5!|=u6ngR|STIX)j(ztG!N5q}M=#w@Gk$GLRcAu!udRPL z{6&W-6#F4^-5EHIlOqnI{`fFGlB97VpzaQFki)Eg@*TE9de%$z;Bhf-k<5#^( z4N~gKSdu3Dy29+Qy*UkM=M7lqxqq|-HZf#G;gdJv)U*29(lWU)yrxlJ4sa5gZUpM@ zCYc$3!|V~^wv!J`e50-F>0Bu|ygs z;;@EXm8uQ>_6hsAAI?`!<|t_%P3OsgI|)LPXfv5GN`b#*(c=H+0LByXo-LWKoGIZw zvmiWA_qN|8Jz4wEIWss*tbLD$TRuYVD0Os1`c|>sgA$pbxSncLhVdDX&V%8)^>Xlu zeUoFMn$3`dUmO>hoDZo}NnRXe>Cm+aM_Qj!J!)WBgCo-+(t#gF+>!<2qn?^|2SU=8 zj#VrT`s@%3!YssGpQCs z;?^{1X(OHu@h2Nlej8`vL^;?$<*otPHCNg1pZy5W0Db;9G4;U#arF8c%gug|{!m{@ zuVD7Xn2tb$zdbrbT_J?>vwKLdzxh|05bmoJHG>!2hvza?e-8QS%|ehF79*0+9Z9KSi2@)lI-B zeS#Jp5cB`?xMYp#P^jhoJZOhC5|+LOxuz};gn$fg=B6>*HYG0V4Y+;I7W^OXKsU!_{F^tYBll7JRJz@$frGg(_q-q3XaVo53_|@+-{Ljq5d~ zTp`fUQlM$ZB6zt~c8%&shGEKXVu1mIH4&!#t-XdV?{QZ<)}y0YjqRId_Xyslich(G zS&vRyj>`_IH}Rnb>5)h+1XGzln}499?EUcP4#Z!$g* zvNQu?BmT^zDnI>Gnr{Xamw>I|>SM;AFTdPqaCksd^^aaGR8X-%Hw}H6 zai+E|M!csFL+|#C`mzoQJJck+q|{0%f4Y;|Q&B3H$H=g#Hqm|rSEY1>DDnrR%KYEv z%#MAAE%aPIi;vbnV)v1b(3iR#ac?09y?g&&=0o7-Xx2mDYY9xyfk&?>L6E+FZ$Tdf z;Q0J_4$Lv(e^WKv6Vc~&!@~V60y2e772|IfhRY};f8nIk83_ag;)k89oBc)5>o6rt zR6#pF!}fro$|QkwJ6>d(O=+@jG4N)@DW@?2J@F()?HYu1B{5^1ENfjvf6)EfLQ0@ag!-w!p-d5u zs2F1~B_let%q`QDpB%*lUwKedTlUe{liJFflW8n4UE<88>C15?Go85Eo%v$%#DeB2 zNc;O^KqQF=vcLG>vGHDY(FnZia~o=~df?yw{GZo3GktUR5#;x07=i^nMJ-L(D=tf9 zR6@mr+^)GT#QZcfd#a4-Rujvt|69I5t!0B81>wCe6-Un7x88BudlG_fZ$}?)gC%cQ z?3<$0TW0sSS!eVOybFfW16wuEob3o4q=L8?Ley&=3vjpIYD+>8& zLIc;W%FPwt3xrt+U$281v-biky2>{35jWYv=FI{tSCMXw2bWR|BIav%F}zO&6W(~E zVs<2Wrt06bm_N@bcOmR};)6O|!!ZLkeED$2L@0jpFDw8a(Fu5h6pDutS}oV>B944< zt7fq9On2o|-eGK~b53h6U?U>M!VGiM7etk~-koPkYa#x3i*o=)A0zvB zt>k@(YLGk@9$1aTxzv5hE&P4peI$Uyb>>ufEbA*7e?05+0e@fP10?w0Oyl#2c^;Yg z6@x%!yW&iGM9erV0IUK!{MX1&8~XbeOn6Q=E>_po2@45bj3>36w&T%rJP!B2O7izS zTyEEpY$yHV236^UJe#ev*V&QHJAjA9YD6VjJwrJhUJlYer>MPp4Y175I9XU}Dy<7+ zi_^oT`)}omQb=e>9?otrq0;)k#;T$xPr9lN z85th-JxN>gIq+U;tf=_-;n%NU?e{Jt??Gr|BulH3gnjG z@UGDNTws&k>=K&8#4LQeZQ;$Wurl@^gLr9I0QRmFSGwd3k45E=y-t11Z|TyfNJrm=zBy(AsFJ)+@c{~F zKZNr3e!hY$>RT0?i>*cg&Uw+(05lRu9XXKo8r|vC(Mb75o)eJGW>AvsHcRxHAy722 z*uOrR+RE+@PG5Tx8S^ye!~%3s(h($#W93yf4ya&yo+QHt^orGfoIDob9f0aFB`>-L zy0MGz-vLI*fTn6q1&i4P-9{-h8m0OMuJaS{K)9J5=e&<-@LO$zpvo3w%7i+?&dx~Epi*`s=j5{pm4M`wBV5H5)w>b*2`|mZp zlJ!-gSNjVW=^-tGwLc4c+A|e1Z}Q<2d6*(x_O6`sjsey!xqw(XtiEKU0MzER&`TL9 zzpi2yZw?my&gcG#7{)bHA8*Vo9bVJ(*_{LP%5cfux_7PYiNXyD@(+9ZwY z55lJ4QNfp&AtukDc{X#3FlO?U=UAQD5%PEDv#M}_0DtgvwPEor=DMWO$T0HO;q90u z!T_!VaHLhLXocK(l>sVZ#mCO&UonE!%xku%ud2lVF(eHxA9?Ry%02#K#a}EWlN@SF z(P;9Nun?m|=q5*{YkuO8##eYm1C@gb;mF_^8DYD8IFCBoO*B!) z?%hC|44ouYCc;&!PKigCHO9;x{oB4PB{e;oRwk}cp8L`Vom&)PK>SUaTqh0oAFU9@ z$2L=N(F}fmQN%?TiVZ5K6|0w^)t8dnxKx|h00IOlWlteRWpx=sB5I_!W zfontFRB{jfe=fjZAQxpz_&SN_j`;6Hk~WkTAccsEJlQ;_Som(9Jkfm|4MU9X83h8+ zf6e6}LrlcEEm3+*E?&SYJD&ugr}+(_KBZ-6c?It=+IW^#CPA?FW}yS-yTEeE#&g<1 zBURk^ZWd8z%=VMjuTn{r@x54fE!O#P<9?Pi@c|ZX1rDgMo9)d-tJBUzv_3%bljBh_ z`&c2Lu_b2(kZmj5NDVV68~uV9(QP8PZ=N|o6HLHoK<72Ye-DaPHW1ky>EzDhlVLFh zzvh)GblgyX8)@DS$#?Pzz56aRoBRpoAY17HHJjku)tw5AX=oO9lRmFQEp%M?4k9a! zz+Z+%ONa0S^Il~&VL_!s_**@WO>DQIk!~DmEFdK(uA1XwjSZne9x+(+?vJW%Ac?N@ zsG5Fc(>x5-oOc{^kaPMBF=j%evtUGw=qz8KpuNwvbjhLeJ=}=!a?f@;kb}N&EKddX zIui1X#a!zHS?F&9z`b!^5L`C6ND;e61T$>2X|d)`&;{^%Sy=yw=fdL zSHlT_P_endrG6@n0?7~1!L*lwQvGVBzB)OOXU8@f36pJcY%MN|2s3qI=R!hQzPi8H zfQNmxInl&%iWQ#U61MZ`j*rZsHYSGUbt1UIOtR1a1^)7bOaN#me{8`x6(VGhjQs;_dd1OR(Mww3ZWh|XS+ zbh_BLcnJGvSz@D97}w>Qj~5Wb6QuwCH93j(ALRH1IHbzBLhpiKt8>%j z?azQAmxnV7Q0!2AYbc6P(IULyZaJq$Hf?`JmQTEYmVeB;{0COm2O4?obtU%m%Ic5qpJ(JwS!B_q`8^Q8tw8u~ zGH|@IYh>K5UQ#WFJx1W(Jccg8cW4veIjSysJTSiBT99}DhxL_{v}l%*ADC?^!(3Kb zfW#K>8IdWt{U%@HIaTtoq8@HT`zhd@vG4aTb_~$I(9D)*KAq!zxJs$E@X6aUhx^OE zFg9Vvg?40AG%*8wY+AxX1^LdrD8SRlLKN9Gnuc1VjWQsH#dbKR5*PKz4P zw+BMu*Eyb<%}gYE#p|cAGmD~pLdHZ%H?7eJK+UD{!@5un2fQIC^2x!5#|@Kvgz~YB zu<6JE52mkcSh0q=yC6-o97I&6&k?F+4qOW#<8HoJbWi$Ox*_>G5IA*5h86^sYFGpq zw#lQ5odi5lG4IE*HU2TAN}(OvC?4^C7TL!#R~XXS)MO16UpdIEXO-j&!ZPJN8|}%< zwts$Fe;l={R2u*KSp5s5SpA<2dgHU4m`^D6esOl*wp!Kw;(sk;(;}3 zb7eUJO<0|CE`7KNn@A~n!z0gzv$vTSioufdh3(5n%0nqz`0ki500Q7t>MF7JS$2a! zf}a~e+qT@|-#Nj+VoorkpQ!4~w@}=$rtOIas?mISgn-fWc0k8OWbzg=&h5jR2a!Hl zbZaP5w){3I4Jk3=FJ^;gyiJCkM%Q1dONF$+p>SjXX&(a#>*Hgq=Lpr-bDdcXX+RV& zH(Hh2Ttp)>z18N}?Bl1vh&Z3F%tIiCP?BS5n%NSEBM#F|8$X=ydW>3r+KZ z_>!w%S!ZX=OW8052H4D!IjsUFsm&o~E9{+nU90uhns4Dc=2S5}3bBLq)5Ncdc6&`x z4sB-q?3&O6W6j82YUd$bPrJuJX3K8L1xuG(@vvd{JjVIKd3WF6*G_*sfbN8_V+KQ7;RVzT zWqKTgfYUq?{hFfoWa9nCeH@jH1!q2$4w;Mai!vYuygt1lGyZn~QA2?K1b{NRmW)Tb zs&q6jbX|-zZ9m6k4?y|Ivso?JWEy<+2Q?Vz@y-eXZ$dgY@T#0)CpQ>NEA}+yIpi1M zWa4E(6P7?AvGiZmYixii@3)6tFZiz3+ru`3%?$WSVIrMYdXcI)U8o;#vO4|e zH;gyOI=tLj)sZxxx{|w8mlGKIb0qxcRn`&fb@ zAiG0oM;w)z1$auu%#;Z&Rv-l!4r*#b<0FXEV2JT>X&;_uZTQPR$d3-cxG#VEn$G9M zE9EG>BJZzivy$u=tG&*hAC2l_@FB3XsioIv@DbO23i5os2}bo1<{~m%&2lBBi;@y< z_<*{Rg-Y`xVMT;!Q~8UJb<}RA&RN(4z6=;}7*_sB)6+f+2i0+p+lv6X<+}#2#dv~kb2_OE^>=;ymak8RrB;DtEz93HTX}!SOqbvj&-|-F zR@rg?t%`hG`Vc}s0Jb)a4kINOZ6AOsH}@)bi+R|OEs42AiB$ro==!Z|_-VkIwVSJ- z?#ofK<6B}-p6ox30A#RSF-Hj^R9(1<$;we=2+eJL{v0qCO5I}vDAE(&9$;P3jsi1V+)httXYiBfdQ(C6LwJ0T7Il11xeXK;B-RJI+f*go z2TVVcVYh|lRCoRJ#JK3=qQ}Vpk&FO}NGf z0J71ZyeH$~WPpHfMXeeqc1)SNV|jf!S8v*BOHEG^KKJO2d;+IDKJlaL0Yp^_F%A1q z6Qn4IGbZlw0^oBjLoQdZ{bx z7yK2Y1~jle$I4fyUh|H>`JQB$5YlZIZ@^Q}P5DS@EQmj4^|r{>px^9j5WyZJUn-+P z2x8c(7Lr3AKZj_=BY7bAv8dFrJyBEt+1nPIGtkEpn}p*%RV}Mi#ppk$Y zFE?36_$`WOs`d`p4B&Z@@%r@s7thC320im&I_{UJycb4Ma5WfD?_TEr2#7)fC?24C^T`!Wws7N8u*Z# zg`u)nt>b_*utq?Rj8=9qqCcO6xOZJl9f>P0KhuUS*rM!%jMWGNWYei18nK?*Hse)= zunwz-T7Xk9S1n&IfK|-Q*>R4!0D-6u8`a`1F0f?jm2USagza2PhUlC2Su@`&!%vYJ zl+s|p8f5k;YpcicI1tdCJl|Wx2qLQVePi(EOTwaq6SyAGuqn!u8*@F2`)X+J=v;2` z;#nQQ=><4=M1u9HWrzSy|a5N=8O@WJ_dx z?|#4E_xk3bf=UT>hWpE$z zc;QBPh_QSTftCR&aV%wTn6=o5<-UGbrBtx%!%7gD1ft$M#!#igH=6}@<+PNa(nudXz?i6 zMY&8ERAKsYrCmC2VfEZWJ`$S%s0Y}`z%^Up#Xj~eNMK#9pcM)eO$av{T; z*0Zg09O0L0)chy?3&%*r6D|+Nt}8wJYl`;JnIMSJ2GB{mNL+vJJG){+Ie*6b9+j2r z2*Au>$rS1ut0Bz$9gBV1--!m2_7Fuo2rSQp)sHPceHQUDCMc_fJhclWlm|tQzQF#V zvi1hqiBS~LuRd9h1$wpVGd$46LkJmp@CgS99*}}pCI7XhKZ~J{{_9(Zi19!^AEi@G zG>n~)01V>5NS4asicc!P@A#KavPEHD2q1HFjHHj*etmz#Gv!T*5Udzj2!!)l-Q{;* zQ`Jws)w|$MEwdX-6i}AakB;0hB;Qvj9qZr@IR2rK;Ux_DZvilefl!ox|6nA1pVM%z zX>R)x!)g<58y<2MjvR3^dKv{S{SSJw9Q*Lz%;<~!Zk&w89wJzx{-b>m2x5*(}0aA;LH=0{4cR01zrr9E#DG@qaMim3PuY`Vse}Ggn(ejT&@LR7a`@J&1gumwR_7soOe>9gfcn zg0L4=?Z3{(?%ne_lWhO9rz-qnUdh#G0h+GFxMn6@px;{Xu^hMmrD4 zUDc-3&0jp4433JT!b{>?RSr4vdt&I0$3gFQ^Ley@WEr3Lfj{wtA2{KH zjX)*S4}B#7qnl{Zmrls6DZfc%BU4R7uz5UMV6#OMmHYzhC)pwu*6O1}7H}#(zI&@r zu-~$HnONf+U!9dYf%U1Iu7zoTV4zD(z>qk5qx(sNY4Yu;amUB+RM@)HOt?U; zcQ&V>1H8N*LUBIw@ux&-rC#xLv(j6Af$naAowfaM1A+Kih6sMVA`0sm4IjI2>}MY( zn$NlR-UJXA(6Z3XY3vc#Y7Q=I^Cpsn2>7{)R30gkD)_+z!6@9ZZ?)+|ZluYW&ri&7!Zg!mRs2*4km@2F6Hq z+=$zQ@xTxRGJ~aNFbh9s4sdV#ww1Gt59_L=Cw=zE@onxFgBT z_iq`6UBsq?hRmO{)p#&2^ylxC#v;8{=$X7fi+P)`;*o+9rk1m-Z$pa~V@bxnY{!#% zsYQA?IL92lX7#ot?(&VJJwHbpc378={My^2dns7ztz2#Qn`|Zsjj(S!chDab*PCBX zH@<&404*>7R(8a@$``k^k@;ER~PXHqCiX4zH`3Sx^>~$@^k9(C+ ze-{lrHn-4k21sR8QID6++;ns>dIgMyyUcv*U> z7e3*qp+mgg!FgC|bnBo;z9w!qNdfP(Wa{_tYCy61PyvD{Eqsv>eSY3!Mo@$*EO1_k z<814@>G$Q}o_{fF^ktIiSq5OB-J#avN$MgXz-N;YL~qjQ&J^q^nGKK&b_op}h9`6x z-MC@=h9>I&ox=L)wFv5A**8Ygi4llV&@27`?Rn(7pU4+eAsneK!-TbU?|g>W8uSk{ zc|B5+(0-a3*H2bhU#9giPOD5eno4T~n|G!Er(LmhP}Dyul&R*Vw@CvX_If5Xv!9JT zri)EyPHgCQBbkltoM~*dl8@C<%WXiP_@7w#4!6&y&Z9DTd z^WTt8TS&Tk>pQ?)-G6-QM6swBx#1ESJs}SWS_D1p?yGllmfVwlO+z{_wh@qxl=Tmx zxn*SdnP%;jWk%K?uM>9ySLvCAPY#!Jp4dQ)I$C>?z1_k9}M%cx(Dc2-{KkXnaY%R zGfA8I39bDw`S#{2`L=!~_c%Ms79cGue9JQp)01O|ri#|h-^sF`W_DBb!XrApvdp0M zit%tJ9mUd*(0$uP{3wp|!FR^e77Y-%ds6}{lSkn42#DnJvC@SVwxa}(czZ>)*Eg2m zU)4%GSRFelYtn#MR0N$pCxat9v5u}(ZDa_3|46bNDe`!gU(W}7B<9o2d12kKj$QsV z+kJkK*{ew#`&*;XXF_9j%tA0OwJ{Ot!*=zn4e#TEw$QD>)nOPVo~x9(;%M2QGbqn1 z15075Hr=rm;)Sen6Tz>5MwnOR{kx2SND_C;PzZ7@NN>!Rb|Tma6d*ffo)fPwN*O_K zWYKt)Uty|%CE8CIj3k0aL>@38Wr12&aN@>IAY1-Ig+L2bjEz9ArfV0>nyU1m zXw!@Ch@q);+0>xOMwe<@P{6#UV9FcS2e4mV&dmMuNsyjxTv;gxHdD0;4Z z;?Lz&@By#p=bFKtghmU8xty$Yv-G-SgD(jaPwFP96Gp#Q*gWidT=?8UMfB{B3=S*8Wz4w9K_kX@tbhkkx0DI2ftR2eOWUVYXN*h@1HLm&M1$xXS+W*#mc~ z3l8_zz3z){zoozKa_`@}qvo0e#SrdY$6+IX6-GixI<`n`aJaGDoZ0WVjkAos3GWNP zr7esLV!&#p;GuAiFxO}ppLO2-z?(i z+gWG6yPL+zyC1Y3@bs`nA~ORY4Q--g!uQamM8~pdOBGE}Q)=>&s}nrF#y3Zk-hU*H zoyt#f8~=shD;kF4bbt*NQ#B1LyMIt0j>X6EA~XA!uN3&yL1~c%W9yogS&LI&Smu@F zlzOoQM3az;dd!^#&SLvUM2abdv;jLDR<`EBI^}mGP}vD4H2#Y}kxAucTi1shm+@;2 zH|Ro81fwU{(v_;@EpC$Y%(2JDCgnjNsiZ%F3B7@GL-JqeyObIYI1PyB)>WZqLekK8 z%x8bUg4AM#AHtax$oUN*D-D8}kQgQso2~d7NGf1D%uNYav%M;nc%O18?{)F^UVjC? zn&hv$d9r_$sNaXX6bd%w1MoL19&P4|`^qYYuvu8F9<&^|P%RolIPSKck=R(N!uo-3 zTxNVQ02po&5crtxy_b`I!lR#PHhVq-AF+1&=!HrFj4 zfofD*Xu9S@HcYgj%4eUW165xW!$rhvqJcbI&5~&D!xSCo6teM0x*fEAaBNHHF&!`D zwG&MHu5eVD76UE%$zmPW{Vz#J#u*$6MnFjDQc?lc_}BNd)-`xnS0ebqDREh%&9%Y8u+7 zpO$}<6a7tofY+x}se1}nb)Yj9G&5JJk&zlSpAuBr``=jrPnn8u+sls!oGQf7T-p5) z5*ut88Epr&-!h4jq5-S0@_{kUI6L1^9yqkkxYj? ziSVoxL+`u1#OOl;LvPLLCdB7SO%=dcW))a`Foq>%T7g1%VxmHu!C|+Vd}bI0C$>hK zn9}`MhY>eN32>1_3eg9-89s{i&hgq%YsRv4OZsuQ2Q&{j*$%ABX`y=kKaugFN$Rnc z0T^;xWS}>eYSk%q+a5SOZH$oAVZVCn>=WU5mg7@{j29!`PD+Sb2Hs+LLpkwdd&tQU z_VuufTlXa8{K^)>Tn$K95!vQC%bu_!E!0_eWQKP5U#Ce!$QKgANcGmb`s85hRWY;` ze$q+9*2*^U@01r&A!=sWl#C<55kbDRtZ{sLFuuZA*{Aa5+%F}+ z!DfG`oESe0a>hM7bK)9G*H07to%_XW-|uh$Q^faSO)(^eo`-3{1?BKzD~*ecM__!w z#2PWP_gp6zb0;09WBBve!KUU;;J78N%vEiNv2CB`n(A3Iizl+u&u5~SwEbr`y7gAC zgDnwKmW<3CM~O!wdB0;=8>DW9q8`Gvevy33^rx^{MQU2X2lJHFI)rQpP~0zsMh6MU zZah<>Lwq$|{Tj_TM&GI(O7+nZ7xDCs`a#3*^ogJAD;q9c*9GoaHUM z{Aa(ZXggdpqpH8`?DtIlV3w?Ads7KF@h*iIP+s96rqCKEL{nZyT9F`XP|2X8*~*e?unV7fi}8Hi9p= zRcbgwu9-krbS9)c_gM8HOH3%H#*`h*OihwfTbouyl~&<$EWXP*`oo8Fg@%cq*(QKQ zJ|3KB2C8Q<+sSoy3{)nD%l#?IVtKd-N8-}fHX|)UDKTs%;8*qS9YlY>C)HHJ2F4L0 z;M5^PT8$D{?f(3*Yl-{B+PfCJnh7U6`y|Sr*}uEuR5Hlak@k%kdZWN+W!Lu59o$Ik zkJh*KgVuwN{9@VWl9Z~-6A}p(ijqes|H;5k5^R>d-rHKD|R)YpEYB$>Y3qoWt7g6|XZ`LXR>jwj<%p)W!iu~egc_XY!2 zzaz3sp{rsddvafXSj+VpaTlU$jSOK{@sw>i{ik#tG~2OWn^0jqtoM%6`jL45&2dL} zSo#y4TQ|jjI>Ri5=TW{4ms2;rc>U$CzHzTc26TTp96r6<7FPK!7TiNx0BZue;hjNo zIn&2OugxX*0biMRZd_YvW}&t4CzQP83AZ{rHtki!qaF{L#AjyuRMmGV+&3xH>YRn} zaLiki@V7p%Yjj7`ZHX2aziE%foIdS(9-I{+Drb(xjWPYPP@%6#&aXjchD7t1Li=m6 zQ5MA15gP+}dk3^gfmuZPEZHJK7p|yFv+P^*SKccCdq8KSqm$)S;M?RvA5YeKk3nGSY+=EnHMC0^MRS+5~tsS>&zJ@FDeQ=}g&~lYT z+!(tU+D#9Z>EeK{1V$54YlA};vT)<5&a}^o~k!W@H7=82z?dGSAnGP z6{R0V%Y%J7G_WczG}Xz53w|+`ZpD~mv`x)oS+HxT!E#!<}Vctc+GUQ?i`_t)?U{XmQ$L2Bta1oEZ4GY;HJ2h!?mQhno!p)3+2QwTpya^N9rwT4XKO;U+kG$U1Lx zglvDMB9;)9t665-SiH3`J@;lpx+Pl`?wS?l)0x@75fFjQ40{*Yj-a;0dx7Z9-}MhE zQrZo~$`y~`gUJzPm)6A zh5x$Ri(|xt41KGIltqb2N{?BTl5f&il$X&iLvQi82HaL}Zwtx7>9@C{MQDjhY?`Fe z#6ozIRcLn9N0XUcQ!Lk0{w6Kds~cy^9XB5IVOzbDUWp};UKH17bq2Oe{R>4ECCZ@%CO0r9IHES@gzrRJk$KQr)@$BZdpa`BTk?FXRX%SfkgJhvI5D#4E-0wMxIav4|}C8 zfM==)F3VayJ$--buL~W!JZP9q;tFd?x)*jtdHFm0;Lj(PCSOEaeDZyTl_4LPb{{;A z`8yfSw;+0R3js=kt^}Afo@PA!bKRscW#er6h1mT+pNID>!}QHxfK~jp|2q!WbVZ0k zwtABe-8k*|xXkUM=UCyJTaKoi*!Y?`X~@UJ^z@b}MS<^MFFb8$d_}W+e%UfPHdt^r z;l|K>QXh>RbfnQ%ioBD(ru2e-UgSv;qUm7`U)-|rWlzQP``<7TaKC2p+8mMS^t*=w zE(1;p4HI=%e^)=o#P~(0E^q!SxL0#NF{H#ER(^-CB+Uh;8&UeAm0Qsx_rwJ;7 zQM(;MZ~Iawx1+s>b8&9gGptl8Hp}Aah1j`IctMtQP47fLioW=z5CY=3z^rZO@LA07 z=+t{B`vYYomu(`Ji=TAeSo_Z)+y(nRL^ji)Mmjch<#~mFpaomtbyc%@j}$qu4|zL+ zm{Ck|s#Ju24l~k@XQ|PX2oj7a$K}cGowE{3%aF;)HO*Q>gX`7uG)AeDUP4!|-qd{X!$PH#$fn-)^!81THG_9epNHhb)BFBP8A3cn2s$yGfnFgF zbvzf!Ctr5`?|FU=+^v4!^x|x=ZE;!m{ZG0C-8re`Gb)OcG)eXOJcJ!jxgNyM8zPSp zbx_f9T{g6tKRq)ai`W$%nh7;tFYaTIy#p^|_Gi2$hJKcngjD;%tWjPq*2&Y18dixB znn~Q`Rdf{MsTJ&M zE$;r97DiS0KfhJkzn!*VKG&B$Ax&)-v{cvWcIB|Vndqtt}yKnY zok{Jhxd#hNN!FzPG_fIPdoH%dIAi!=mJ)9n6h|+6r|iR3xI2)ZAWJ(C07HDhts5{k zb?5zlwv^I3O9A>pYr~hIEkg*si0psM4x?@ds1g}N*bB}4UisbBkiVJ|xP{kdD?<1} z?(m&_-a9IH!XIvUi(=D=#TVEZ5(pM)H5$2Pwj1_tu%S$)(hIW1q0T!E*LEv}$PhgH z&m)W3^O23AzHT1tAy;%LgKWmd`d;!x8E(YWqF>m#Qe^SdC`xIBqdt1wIpy~&5gq4x zPkIq0tMllQHG5IcO}wtcQ?bP?*5E-NxI&;E3(?{WSH<4MyHl1b@>5fNa6vJ`lwwTY z?)fdjj3fLivadj{P+9SzRF1;kt@!Q_ZA-DDlDC5uMEuQ%F+T!qwFNDlU>GFCf#F8m z>g@DNsz8QrrBSvHpPhKNF8uI)K-aGwUVXIsdb?dql{a9v{VlQbPzyAjpk7pyk1qCm zO|hhY{utwFp#dLsy~D3yhKSblJ}OpGl#&f<*+a2VN&7@m$nF)}QFOB07fshsCEe6? z8_#_B`%By6c;&XQ0w_XwM;@`ay2=;$KT8g|aHX!M$)fGh62j*%*&aryh%=IpJm|7v zI9zubKG!V>%8pU^{q4*9@SU>W66Qq0<;6~AymjDDhkD#th-Du5iXGCgF?TVw|EpOz zGvM4Ebs4y>Cj@{tTBK0)Okj|NJiH(qww$B!biK^8bpR)`%awb6S&C4 zuLpVlVeN9DVQ8_W7p=r8?#JC(;hw^A*k>Um*Tl>c0>zD?hN1hz(|TTpu=mJ^Em<|f zu7Zx)aQn$rK{2#LR9gV`E#fw1<`?%=y%MB-9)J0MRcDy+9+-*|7cWt1p}e0bHOJKs znYG|iGvOz*f|qOvu88jH6xI?G&zhJ&Qn8pUepyKPbstBzJ4(EV{wqchj$@^^yZ$Pe(E+%i z5+jWfv+OQST_)V9kV=VE!o=a2J8L?z#U{GvOPt2_zNwuIQ8m^VZk% zEiI-+<#JrCA@}B5k@s?q3KfYE{)DbW%fu8$*RkHZuV%nZ-@P2Gb|!WwAUk)U)UI?f*`8nQd6^cA9+aQNF*|hC ztbq;t`LI>C2t?}XZAE2=X=6Y64eegNvWruCS4Q^l=3Xz>JGUNuam@YnTv0JBnCadh zU90f96Gfccy}WKyhg{9BREc!HiF8hP@ido?Z8o)!Cw4qW56g0WzXy4+CQzeZ54qQ}EUdSZqWX(eFkoVNs)tV>cbF@Ncfih5Q&0kjafoXmxf!MYtL~SZAw>SI3Jrasks+#q-`u$pxBEPYo{?GRNr>M^GvxPwR=Cz5f zq@!20RapA%46mV&cWYiDGpkTW-zE#*zA!7|VVNho7Vb1RIm(rpPXes52;Dk*6ENX2 z=&3ep6hX3@Fo;9B8)k*|li9q`7?mJ*KJFtL*&VTK+lE`PZ)`+eI)b6;4fETQpg210)% zak4w%o8N~&XWeY)+Nc`}_nhCjJkS)O8vDf35_FkmeDO8l$$87CDw!nazgfXLzw^TT z1<*8!nBIWm#CTuI_OR+o9*=!T@gd30%t3<*Fz5F~+EH^RA(x`2ePW|tYpu)h)$Lac z!07JE7xR$@<;~i`Wfc1DjLdgtZy+xD{dn#TH@A}1GSJz&!{l{nY^Dhtk34&DT$Pyu z{qSYRXDfNs!NMBLU7$#NkSr7}YOR=w+ISF=l#(5r!M?ShthcJ~X9zng)-V1*t*GBY zvUt)3>rk8jbtSmdEOAPs!Px$#no~U=5WtO-*_0#IlrK+%tx`{AyufK!#S=&J9&l^XsYl_8zoG|Ijw_N%xtuerO?z5`B$6^dTPclWz`NX%6*^S1M;H&YRG z^*6qQ^Fy5(^Y)=cTN-k`YQ;cPcC2ry{x#I$SN4sUQhn_r6ipT?sUG3c)E8~ThTMi0 zXS>E=<0pdelUH4kZPQX0h4dxJ%GJ3sqVv-8L+=jRD`=4{XW&VM2Hvw6;2oaRDh8sL5h0VM=`d3v2e&3>%xtRb9|Dr&iZMo0_>Zdv!Vhp ziUXybC$>BY@+MUFS9k>pvhN!)sH@1;CEB7vmv{LZ*gv>w!o&aaVTb1Wk|kQzG^T!< zZyC78{ywzL;V&3);uAv?nfRXBk||ydXP4w)2pC3@bbGw=(t z$V*`p^|pNE3}2O%9>N;zYH~g7=Z4#wXugF-(72^o(kjhBUh26p6>~xf(^iVsw)XlP zF*J%7y>fHBL90_bUT|i$|M&eOR9ei%p36wvv5gf9ZI7k!p z3t&Vx4yWI72RG%Jv<)qC_sN@{niH1P6{=k|ZFkH#FrJ}P-@D}E+VmdQht62L&L@_& z6+&0Ro3oS(jIc%UsI6y%aOTz%*ilGr#bJc!`d6X4LFldJ7FMZETGvN6FXl2@!}RY6 zv%BmoyH6#QbPD9bnf^FH1Y-3mH1oE|QXVZ{?&fTt_TCHn6+O3C9xYs%@h8mNaMVbJ zJKA%UycSCk91AFjaWOiKk1$sQf2cYkxgZSW^ki~2%>+9_oxwfar07K zHYpOAO8>hJLEFn@CfStoHlH$y5*X4QW^C0U{U1h@et+t)$xXDAql_3LjV`~WvLGzZ z9+%*lof)+*{zFFRNnu1i=z}`-4}-4vdWbWcb{y5zVsRzVeybOPGoXj1-I+Xfesl^S zH&;21HgvpQHt*(0;x`gUBdDm%8obqSE$6>^GNY>OTRtDUysy6JY_;E2pN7nwDSKd` zEc9)SPk556D7vp^@l}&Ibi+oEKv=S>!tjUoIL6#uc})U)gC= z)ZEc(yyLR8dJscEagco-41^QpS5{*sS6Ie74V2+boGn-#dq9>2Tkf~=A=2gt5^#=4 zMM2M?GWUkfawsY)kW29EDS{7u(z>!b7-TMS?pHdPNGdcK8gM)DhNHUO9zEKN#HJEA z7Ew*(HU*$tJr#Nuc`IDOEUA(x^JADlyES3(`U z{Swe40y@W3+E{iiZB2YKXXf-J3hS64Oo^nknt_=RR(-ef3~aO@a*eXW$Wo2Hpt+ zMpQb6@5%uE+GKpUPGg;7d6|~Uq+Jy&!tL0FA`w9roFHR96}vLr(C9_0>4DF-W7f2c>DDiGI(qsO-mLYl4KvTA=ZGsVf};|xE@g8riDss z9!phU#RpMf93V6nDqLEqfGAO@tUmaE>wX(kzGcnkM>+iqpWz?{VidHzy1eZ?h`XBC zu=R#$ZXH__M+_clF=)H}%Tvz6V411*2zy`4#lXj|QjH;o_ zUr%Law{fX2JGTPuLT+oi!BDEOzP*}W5bm!gOMl#DDD0HoxkqzLP9*=KcV*M$ade-e z3`Kf9_LeEc48LR+^SLGGk47651WTbPa4*+hybRg8ehn<{2&YpzK5Co+bo&8@iJ-&N zbK;X$0lg6{^G;%TkTrauw8+Ci(VG`-7R-2%)z2GDh<#HG8vP_l3Hj*<15Ra+cT}A( zmcsXN%RHbBH{lKr_{2?zi22pJwnD=@`7DPd&2PK9B{6+fP(ph4fe~cqUd?I$c%+E+ zy#K|Cd|{YAJ7{%&UhSW^oaZSjac5Bo2opNF8&8i`7sA6fcSYZfRcmVSxo}Vw{+XNs zwmGPAQ%0?wb9!F%OYR%r>uWk@ShXMg)re*vvMjmTW;Mg4^X7H%C-4MHZnh88pL~mz z&gx%ZLNr(ZaD#QCjPes!ro1$P9OseBzb#9#e4RfITMqFXNfbEvhB^cnLT@z-2geOL z1@8A-00q+* zB?ay2N9k>_j{956Wdy``6VFQ{5GMI%B{G3E58Rd{CN1qj?tt?3GYYJryDj@s2>)%k z_o@l;^!QG_HGzui7iCGw&1&72<~0W$TAws{VY6l%XF|!;qofr}m9;V`^%!OABE_0y z)7rAe?0$!4eli2cn{P&hS{PC%L^$+UM|4VjxbXhpFAe`?3=o;ZL+(TaUb^VHcgYtC zas@|&m3EzhM^AEoL_>t|FNIHIRqzjNd1BTpG9>OD9ZFDzo@V{J?-5>ZsmX_pg;Ko^^9 z9}kWEyxLWE`%mx}hdCnE0EW7d41E#54r2)D zyA28dSewM_sWb1{bEAOB_USHz28~aw8cyZev(10kos;#^e6mv& zdRgozFtwpBcooHD`%Z=asvcEjmyl**wb)2Wm|c_4{KkJ&2_;`03*P?3yrVW4uT1*v{dxv-8C2zChS%z zRiQZYT_O9SpEr?l7sR*BP3FNTPumI=HD%w^X8EJJ3pXR{tBbqI9 z)2+-c-)B-@_D@fFqSEHyP+EpDP9w~+CZBY}i)Un7 znw6E8%8o*&1;5W*`Te$^baL(d6(debze>}yaADlrN7qp}(9&DB+hoGkbE zg_%-5RVOzIc3blZ70u?RcP&d)_3EYEB0Kn+`*d*#s*=_J7C%@P)-Vs&?oj8RFLm}9 zgRan8yxTZ$Ta9z|*pl*p!~tSxzG|A9r$47U!1z_hD<+{W`KHRTP%d({);k@y`RvdS zzA}}yBfy*B;~Y1pmxTkfqHsf$k#(SOzGo=P5AmnJ_tj_FxBTCBH11xB*!jOcYqz1bAjE8fIeI;TB~m$@CN; zt`YEw_zaRzHo2*tedeKhjvEy5)&`96EIcG?&*-;_NebP@kIt#6U^nt&w-AHKD9z8D zK08H|>X}aBKl#x7W$MSd-l;tGhCPr^RujgFu#Sm{x9enZjD0hE9f}hifKI8V$<+w=F4pV_6_xYMv{0}aFBP$#=4!!spne^&C;rBxnhasFC*e$LQGbKtuI{MtgS-&v3zetzOG((rPW z%%+Z{@G-v~Rf^jP3qusH-S2^g%J`GVxIdhA3VY5BY}fCy^P<66=7nx(ql>RpHIrt7 z`v7)^JT@m3xP|AVy*`e0ebs6BFYDXGZ5c}H9tiV$Gj;@au;lqmf} z4olI@IXmHp)crkSN{fbl-22P|dX_rHB6A`dSz4%f7A0s5UM;|_&`7bD#OBHVb$YaP zQEBV-_nDQ`{InhAmMTe)bZd+KG^YY8uQ#H^Efl3vEXf^(AUE41^a@8HPK=RVvPOy- z`q2$m)1E8g|{TGzdbo?W+pq*AqA-R(3Mrr-aimd!d#jUP?YjD7JEN^lt0B@rZT zg?03ML!1-E(8FQ*5z_2gy&2jf^CF*^5rMSGSDzzKlR;ASHg9C_u)v!X88(I1H3_~D zL*H_M&@+J>pWE6-&0pV}SUvob!4g(KXfWfeK>LYC;A{rO6reAZCifiLF}o1poFrOE z^&0BE+BMa24NY6Hc020cmwg4(cfxp3s6EboF+>n~q4Gsjlb!zoJU3^cl!MCY7q5~s z{p5F8$9FkU+7rgVf%f->{wSa%ftRK%!;m{1dXIV5pVEKLqwK9|NMwp$;~<_7Y$s@+ zNg~?Aa3)X^(=DcB<(E_ll0~m+Uze*9iu&1~T3qHU#=a^=jIEP@M5UpbKfk?}FzCpt zTr?DW^#?R!!;Y?F)BT~J7nrbQNcbt&i-!_wvE>ZShyD{(PW30@nLn#=deoIVgu=R1!hF}kk;7X%1JOOjd= zPKJbivPB0yIMxH!ov*3#*5{4905u65L~IBphPAKE+^XVFs=B}EY#nU}AO^BFn&fZ% z^mO)FsjAwd9y64r%&T~#M$)bGY6ZGKU)=kVm><2;f;|n2tgB~u+W5Bp(0}qccD*|f zuiYf>7>L;&^7m*x*(N`cj07wsNT0&D{XT&{xe(_A-S7=+?Oz1(^9-nQwzbE)lB@QPyUU?;L+^D6?reAl=lxx`XBooZ?0yVVvDB((6U z-&zoRfkP??Lqd?t_MbZyQkb_Lk56M)wEg(%(}^`ek2wlAX7$_WWlbYc7~ld6BX$X| z8)b+VgU-Z~+J@NN!n_`Q06TWa@AjAEB~Q2T`X&P)e~@A?I2)7`!cz<5pHM($W_>;< zuxlNr^SxVLNKXYQA28Ho+>AY?L#78k6Z6{Za>ecvZA9$q$@sAg*b3ae{q8@}@K<&` zBo!)iA(K%)38$L^EwZ2NvNGIMV}-~hucuFZz1@73pbl_rKD~;w9rrY*};4VW>nKyBg`SOU%3Z0 zK?*mjYTMmcSI4})Kj0+$Kv_r?{$|#w$Ml3$4Bc!ZLjN_67tLiIR|viOfPs_ZZrT@w z%zB-5a9BbN0e4P6GKUK^bB`>5)KJcTo=O}N8N^CH6}g2zU6;6@Pfm={WAGl>M)0>W zS1o1rpsb_<*_RQFRZw93BJ%HmE`j1U5at_P>OH75kVP`nuf^6PAHGBx1x3B>U9f)1 z+z^4&w_XW<>6s!DJBr}X0chMOQe+O0=j?|xbjZSnnsvIUP9Cs`>anKe*5h4F9iKtV zHW!{7KtM1GjX#&O5)C!jQoh(w5bazvcFVO5@5J^fxCcw9w^C9?*8&RwuE68^Wp_be_VDP2psX z*zL_KsJFy9X~UOn_#-7n$WJ>EKhd-6v)XCQ(k$NT(3P(fDu$}mVNDF7Adz?9@MNR$ z1~cZhSdEhVo8J(Oqv!4{iOiexL+O?HnFBEzAIQ`1k1GGq>r(aZr=hZ(XEm?aRxUaH zZUU2R(sB8!DOT+|pfgRN-V!dhP?^~f!UHSRxwfVsZ#b=HY4p%ca#|P zAT?`T+%$u5CU3>k%?D>!RjK$#5i+|g&>|G=gnEZ|d6#^Os_+O&$NPZoTk{;$q#c2L zXtxW+`ox5g`}yS-|FC#}N}PNNdvU^|N(>BaoQs5dSuz3ii5<&rio}fHhv@T3uZg=q zrmeEhizptkXi=x~fE7b5gntqRm8sQUN~9T3wx2m1^mE;ODOL93NL3A7S`~D)S5u3y zHoT4{e4TjLgfg--gn_ZTVM0byUa!XcnN=!YTJ%e+AFGUl!6s}l72<)f2QHeRLJuAL z=yY0;Kjqh+`IgsJb%lpcJtl!;+DN4UC6nw}H|aP0`h1boTVADTz$t~PgG6r5g~tkh zNDh6mkanvW3dW#$rgM4O{`)v7i+u4TV)yW6ZNysv{rVJ9d){z$>Or0*3zg`fJvz`a z`4R^^G;uou^GL-|8`b}9nc~KHMg{c6JzM4D$3g7VjJ|mXXR9B17q{qACwo z>!^+jtGD7P4M&W^g4iX~^U=bLS)p9rHjhcaT1)>{Ol zH_e}zIka}u`MOa?V1(~Iq0Ai48NT=aiZq&FlWUO^+Qr$T^4bt&c$8u5w=e(5d;Dug z%Is)lT$w;VqP5u&8s8G|`O>z@)rtsqH&#&MWq7{sbo3u0W%{mpms+0~uLdb$(h#1@ z47hHXWDAvysU&fQOco*=6<^EX|ESu(v#9W)O=m5Zn(97(#iRtkwn67ugJC^zE=@H| z2tq{M2=r+1@QNKF@w3ENiEQX3>BjT{AV+`SgTD`RwBqQ&Of?oS`{}qD>2)>875Ap!Jy5>yC)FDSv zOw0Y09%x@NJ?MkgO$Ei|z*`rGq3%bH7L{(}4>#&5RL5gctce8MWRItzlBATv>hV`@ zi*bXm9W`?OL-6aqP*UmaTaBHn<1pk47nl$Mx(|=5%u+?YaYk0ttjrtz@dy>q7k*Yo z2GV|Sl0|*g$HOb7N{=Yx+0xT|F7A2yx%qTU-pSE})~}U7gM6%IeoC;>luaEXOMF*- zJ{$z-dcaWkEZl}`fqwXH8Cf@vF0FJc`OQx*R13|#h?9o62)$Zu&46j%;2qm1KV^iJ z2Y5wf;~KGqo8$Bk$KRTzD8&wNsJK!(VDvU4^m+*yaqMq~QM6Z{GJxdaOFfqHM%#vP zfm-Hc{?5rcbs+*GChwu10a(T3Q_hrzSyzClWBIn!p@&#t84F_-*AvAY8Y0dGKD2({ zd(+nd`FEf&Jl3)vSkz?A>LiO_+NP#!wJ>^qQKAQ2v64>{Qyn0d7(MmBU7#ZE zGbNM%(9|zFWdsbl16d9TW#Hke?*HavtN+}42*K?Bh&7`vw3i4i28WgtA+IO2-!vK=*|El%azMsJ+1r-hIn3iHS+eV{)X0)5r2L_P8 zlFmoWVa>@P-q%LxO{2sQSd5?4DMfHqXN#egefiw5qyIzQTSi6sMUA6F4Al*nw-!uH)_x|t4dp};*av?L%bIv~d z?7h$K1Lzh=XIF*VCF?dUZ*!^guXy>~CczFYm1s6z#A~+a6w9xnz{&iGem3ipBZs_p zo5NL?Xs(>&nrAo3YbOmlll=VI6Ln(yM1g02{S`H)xmmiWt+28vy7C7GI(P{zWG27a zIX=DkR%~s1hk>kZE)xOlg4Ew`?C6f9RFbGfBiqVU+N1uzF)k0kd<7!lg@Lq;d_zPG zvNU3XJK6h1?u7hvNzR=(BUl2zTKoROxf>hiXtC~cpM#Hg&sm(o-2L~;O%pfQ1Ig%L9GR|B%o5@T||Ls^n5b+uFnq_2%pBG^ee+of}W zgGjg7#H}jdi;IC_lxvX8hU9JoUvX&K?~z zaX0l_VgDepDN`>RVEs^@<44&x7ZsWt8{!YKvOf1&CQu^mzq0KunQ)Lo|oHNJhY<<{uZkZq}w0# zse_)7P;aFn(1$5J{MdzDII_`w=&^*ZU@yPEj?wugzTksJ)fCOlm0J6lW`0ynzIL3qYaa9^s-7-U8{;w^smL)?34Ba{6FaW9ns1zuJi zSsu4}*41BpRntD^M4T0HyPD=>M^%J)0n)MJRDR-voz#s@Lc*S$>w z>bV&{7pyNbVyP94K)+b7l5SCj(jE?aqMC>|`6<1xnu}d@^GrV2jk;M+J$uOJ&&v+g zo*Q6HhcB;)f4{2+au`jS%GP3tsY|8k2gg!EzrO3Utiv(^scY1pzaD?%YZ;?P9P==R zc5|)o4uFI!o*IUFX(p_IjWd`O3sT!asTSO_ie<{QI?7#Cr0_wAV!}KJ`a}Xsg>HY; zpKq=a^U2tw#=Np|N4h*8<2e$4NVoLQ(fz&XM<0Kgwp(3K;>OTUjyUORszNO$@V*vz z^y7jWy+HOH>ci0cHqRX7bTM^$o)Zkrxvz*nWzPYwrz!F_Lz~yZAoMHXvwIb~9o2z8OoUw>%AP&r6p3jbcETk=tC3hi!!@Dg`qJJw z?xB-mjVKv1Phirmv0604?U6SdFx(WMx2BHxVXNyMu7*R{U)M~xC@kFb zHI3VD)ZrO@euD5FJ2Atlm44iD3uq!JADMbNU6L?DjE5M8f?$+Ghyd-x)a$3 zEtD&M#0DHn<>f*R7c#F$DU#q1o^(8Lj2KpjRtb!9f9ge6N-|I>v0JE(StUI@M?A$$ z0|pZg=PaWs(}{a zZRjF59#tECUP$gd)T;T(!I$^QFZCoVSWj5|^rVX?O)=h=C9Sja9FesN<$J6AY|ZkE zb&o9D?TX9H{UJp+D*(XjMvPWXu>gtNRDyx$)b&WfvfIH3+Pn5onOZ z(9^*YPzdskzCS;Wd(JIK%|6(nNk4G}c&(=FTZ^A`gnLo`N|+u@a_3F&tm}XNT?3mJ zsodwp@shOfZVHw40;yGqWLvqWPwOLTEQgc~!}>ejKX9WM6m2O73Sr4F@D|H-%&ZN{ z_%Iu!$`G|HM5DW|dV_1H4!kQvoZL+BGe=P#7(B$nHEUm>g_h^aBi?TPn70(jp68zF zg%Q&o?OJd9EXzAT*Gd5Ab0U$n0Ad?y%%o)RaEyHg=% z8Bdv9i4wM$C7LfRZN)$7VIIDQGU`doc+^IK=_fUU1>+PM^?2AxfjQu8zpkiZf2Y3V zzSIxnXzEqILZr5TxEjpRp$i(@APx2{86z5J58saMIJx(O>hVEjiLN@ONw8|Ew8#hC zQhFi0`70UqzPbz7!}|2@PGvVVCV{6+@3t}RuRL3id_WFd&+JoOdy4wq-!YZYPr-{N zkL_kEI39?@*?_^Z3?i{L5gt59wLET#IYsl6K)fuAC&{Ps15-!-$#s(9YJc<5waUG4 z`JCB+CQNJ)cb~DO$%xReE~^&NJ+W-9WR9dnG$m}%lj7!a&yId-hy}gEq=)=SqtZU8 zL7SKn6TxDkN5dO6TA0+|uuNc8H!S?UaRx9v^}miokHz8C;L@K>Qx;ND2_3HiVr?Fy zsg=nd5=C>Vpt5A+^A1}|bE71RH%y=awV4Xr_zl#Rxs~KY&7lp|KiqJ3>gCv>o9CN(_|LNvmyeA!^&ca{&qQTRse<2e{&pv9>Z}*j zdZuOi4jOJB(EV8~+QPeV?8%{0?ie-&a!_7HHaB`-GV~Mt$1@u=2TffVgMCeQp<{>0!WcQ3|U;Lfk$WHA&1TgTrpUG1v&j(MJ&r5}b(*7lQ|iTR$OT2>!(g)yGV zTk-C>xo$WnK9P}PoHgZ2AJv3^tm*ZTBj&R)RT#%JP!H3p;SqCxl5%s3Q@%~-_wKC&AH#>DM*pQF*@(egLUV z3)B>4J)#azGP)64Ze}P2X7k)RS=&_+S(`FzQ}`UdQ}3i_yL!h*MjgX#ckbN0LyUW{LqN~v<+|%vKUudMOQ5DG+Q-y+y;V*%n`i3&nk&=Bzx&SX*Ut049bU3{?f44upq1+&c zD;^C*dIg`ju=CC2sY%Jy6A-r^k$>t{wbUlNn-e|&s>2T6g6c2~GaAFfgi~r5S=;2! zzw$xHMAM`i?{4;-Rv3cBj0us)Euhs_1*9VVzI-xyTl>h^)YF&NDNG5BA_`Lb(wuBb zlx?>8Q>@k4%F$Z`fg_|7C+G{H3B6|#XHE_O`+a)U!U;{{5d2lP7Wm(JBYws*6@y>j zHTAAq3Lk(7h79R4EFce-4rk+tCu7PsuVe`VnI3oAcnQ|-8qXXRXL!k9Y8}+QeDaHX z_j!FygaDCCG!sx{NNheADw=XN`Lww0{QkfW1x}U0RDM12Q)4%?r;57@F($+9iOjsRDX^ArUE88UnXn8MGz5oB4v zxr@$|2*kwy<#?~-{i(809@f{Bz5>3JoTr&IHB#HGf3voH zmEpwFTL~jo>4KE})C&%Lqh_yB`rEx9%mF@Yc%h%^th?*#`C=c**W7#fTs?`w6XdxA zgC^hpy-|%_>5^tk(}#+U(hK0Q3QY@Dg&IvS_T%1J77zJfbm74%kgCwuwo#%xPYcSN zQc?;Pf4?Zrd4s`yFa%uA#Y107MnF4^n|&su#Zo#7!aO54^(4)#{y)0suj2X&5>5A5 zkhY@T>H1NBXM0XeK+R;GZHOv#Bot+ zy&DuSt50phI{cdnebwbSVL;Zy+Z*>UqK7!Txvi45rG z9RT|*wafQWD3ak20<#nCvyr>>mFWdLi2iNr!$h19haVq4(-Qc|*Hdj(;-o9dTV>nTd=JkArFCNt zwcC+tK#M~^$ErbPI3NJBxuD<(yP#0dp!op zY7aA?&|bAfSnF#ZVTIU=uZQSM*U<}UOZ63iEU7Yw(YBdg+$drXysW>4M}&HYf00b2 zk>OVPWX=kobgOf4Q-alk9_bS=Y3kwU(7SWg_mFbVM%`m1d$B>WS%Xba;#kmXg`sYu zg7oBlq{)hGoy5HYswCf*LK?~%PwlGFzldEbC*>~Yq_Ke3-Gp-z%i(2xFjcWue6)p+ z;xNnZsr$;QI9G3q-#a!$Arb5G!tOP??h*U3Dg&L+I=B`E1_?Z6ULD%iL5{Ew9wtYg zhA1Qc{K_m=6OD0G*Vhl?%BCmNYM;I=hjc5=@TNXY2AxQ?x%qbVdl^iss1! zo(oS|s)qClf(d?^Y6U7R zU`<2lqV>aT21BkU?rN zyB{i!AXo84@UXKc$0OtS6fgs({~KdGD_R`7XGUiVGv6 zwCFPVTaE@Vo{PX+5bJL^A|4&g9FQ7%Z@A`tIhpqV5Ecv6&l1?Y$Xl|u^HP@c?5-lJ z?%};^X_>pkGz3gw1C=ncOjNsg(+mpA&82n`xaFj0oO03n0%r<0i*gL-%jz?q&9*UF zk*0l?jzL^w+#sE0OQ0&^+yY8bLZ6z{`v7%nic8#c!eGy7WO`vnxR^@TMyM-|HUf&F z{{605n6OES)}QxUU-D?C_^1xG$S;q|j~ zL>3FV_P?w4f6boLwj)n5t{oH3G@CFoBU7#9&#vM^3A}xlQ2)B%9J#Azc?6+JRUWs$ zff^Yya)qg7XA7?xA=B0>z6EB~-8sW+`vC$q-%NgS3l#ctzcd0uFQnO+*JIp{UWlha zo>Trfo-)xF$@Zi7^L(rHo^6?M1Zc8ai=@-@vxFjK*IqYjhpv2;EsRwQZac@d5 z0g7*^zjc_ZwV)iq_BcgOV|i#Z&kL+ERffh z$DQ7{zH5sw#u?<`ZvmB~W}Lm_5?NFRjKlOY(#clYq{*-keaw4iTK5%8^WR`-7%wWB zGwZ`1fkrCsdED(`D{i_@dSCmnx&sn`T7^`iI$g_#<>lqPoi=P$_{o?!=XRc7UBv^+ zTsk}7hJ@OtyrJ$dauP8$PwoX_7XfmlX-*4=uev+Qw+&65I~ZIlpw`Wg&e%JTdy%@W zju|NcE=87t3c`a%TIi1+h_`1B#Ot7{9);5B-(}PDTZd!pwd@ix36*Q9ftWo-vPr+D zoGKJQ?R5#vXSGgGnF_u^s;Hu7kfYuJ5-an~fD0OUfq|bwTB`XQIXpokd_w5)y-4g> zCYT~oaxg4mOYvfVQwb}`!KH@9$1&=`@13j-Zkhr}h60e4yMSPJ_pM9Q%7R}7IjmVm z^oIplx&xy@2QG9^skENmdYl|-;#&=Aqt(n3+^Va}^;9_yTL=D>&TfYnk>A{UNZ~*AaMr{uH;*s9wZPGa*fKA$={jhJPFCqoSXDNDJ z%bzHk`%Qm-X7O?8r-}l*uKw?b{JkHzBx(gy%W?>+Ump7BRP&c1{w)obAGYe~S!?qp z#!q(-Y8NkgYS_PPkfw}$k27RBR^`L~aI^Rt&g6Hpqt?Ma=K&#@1JpBK|=ix^yg9QPWG`(feXS8V%0)ad=D|LPwXvQw%;POACB4UQ;yN%O{_e{go`|wM0Sq zOP?rf)0BzT)ZNjHN!F6m`)_A!^M@iyYt*UE}6lb3L|EOT(_N=WSEnuzq#FZ4p=dp_$lrP)}=T2BbT1*k2@3zy@EH|L{6 zmvhJ74Bza|ebDklwmMADzr3Kf|{%HotP-&6|$vISc$ zUjq>%rfse~+s_>Uk^ZY8-|K$+%Z_(^v$1G39K$ehGAugrJF{?ZRt>yWC{=X2nn~Vf zR`<9O0GZukN7EGn4!mKHp$asUNut?^+9XRBi2#I~x4nyYP@$rT!`R&rhrO4%>9Hp5 zyO0uC!rw(+0*`+`*}M>(LHo<{HRe>3mEQbs~GuBQ#7JWbPjF3A{kq2zBlhhl?Q@(@YD&o+Gz{vbn^2^CB zHu7D?nZF)XpFb{6W)6b6jti|Ci@exe^YbBTUL#CRO`b7n=HuPO` z?{>RJ9t?QlLd3qFp1;WdIiP)}K=Q^%?`nSGrwFkBbJ+wZK?_5~4(Rp_8EEaH0;Pv` zDQ{>a(l~$Fz!pww=Hp{v_i+`?#lk)d@H;GMX%CHSm)eP(E%<~V)@D4@Y#slzd%*UI z7N}`r;!r|6qez7cQ-$grQkXROD|I~O5Q#h6iF z-s?#N#`(LiWu*1PrIA!kRx(&^`g>GwC`JgO0?5kiSju1>Fv%Sysj4l)Zv$zjDwwPd zr_wU$J*1s!zV8A^xeDI<54J2k){~ny-jsMI&rzTSFIJS5 z)(fpa!XEYH8Sq%mPUzEWX-iP!69^y70eK*qT+|80vVF`$c!Q?Rea{ePx_PZquN$_< zJcoH>XsF$ebM0F!AN}%x2f;woQp+D3KdFB_X{!SX;sBX^qY>}=Z77>|DQqLcLo|Zds0_7o=#O4QE%LZEt0H0?SjTvALD~z`lOu)G{;(2BW+Yf4ILr`FV4cun z(4s-f+{sm#BN0RgK=umOC=SI7*<2h*0fEIRKAuSvd(Jy>!$mp$4`E`mcF^v}meQ^} zsrs(GKIqaKEuG3SV3Lk!@~u$O*~Ly^DXEtlD9gC3t7t*PTwD@Rh-z{HB?6?UtOaY@ ziLWcG@V-hSEMlC}kVb)0!Wp7uzE9kT0e~6V3j;YZ&tRYume($tg)$x9Xqb&y=Y-ar zH$D0nh6XvxrOSf-0@v+5M@AuZG=b_xNO$LDUf|~MfuQb5T$g04?oFF76NLTCAXAKv z-x@y%v_oh@bbA)7VJ&_x+VG-zKE5ZwfnGz{McT(qW6iIRU7iJf zsn^2d$h=H3jU^*{P)A=f$fo`B*VWV!7#jy*qIKp$3hP`^1J*y?c0M)Y-B*^fqX-sI z3EEmPJBb^D-<=A96x>c#;}?a`r(N|{ zJEuv=+DI&WH-5t05N3qe46~;s?sBF3vF?GNJ)!< zOWvVJFeE_@;x~;c?Om`-i6H63>QXO$0h;oqnMI(JJpe72-HS^Aif~G&;p? zDW67QUoEW!-(E}{!4Ryu(sNsg znLm$V*Wd2gbHIua4Pq%D*Jn8g4wTN>$-lbNGvxZp!ij47#o|vMD48cS#)aX*v7zrq z<3_RKq9!U~AaHG^PvOa(3VaxYCG>0su=n0FYZGuHAV-*hM&`SX^khuwSAwH>AETTU zO)?0Efvjuw$9OI`pHsxUs4Y`#esq3aVqTev0M5%)sZ~sfn7f88CHZT*ymybG<#Kp< zZEHUr1n&4wR2cfCI3EnH-<)!vKEgLJ#bzA}ki#GwIC9CemccKZOKZOr@tLZ<{7KBe^#D7AcOC6s$|2E96 zdrBMI{QJ9qs?&03vg4tdTf}fyroFhzq_yZRB@<%CFoF8yAmejT#g3wx?5*eg^dTRZ z`6Zx1Tue&O4a7D;LtxWwNweg;FHCaOLIUuzOx#8}*KW@pf4@@2ohyT8I@?u;c+NhGSLG!ox4_x;7>x``&y=>zae~W= zRGP|>UpXpjF|Tweyad{ujc0q{$Pviv#WKQ!Kvw-Md5hXAiCnECSl>`yRcqUN&#+d@ z`@S3&1D#Y-Ml-5rt(^5Lt`4TVVvez};N4*p;Od|qHF5YWbUc%Tjb72qEWW#5SP;l3 zCg2R)xypXf|5hdM*ALS~wb^RFdRdP~K6zF>J?jPjdmpK^$(5{zH_&@KxL(f`RPRVV z=JHCj9;DS|@uzHKd6tC+5iJhj*`CjRrJDH5z%#^b_@#j;^NT1jL&8;o5unA zSo8vEDUid;Xb>fds(`Y&003jeo6Dc!Amd8Gj6)0!i-7%-1CZ{$f9$ACbf$=wPtc8n`yGc9rh8YFtkEH`drW2z04YM(J+D z#@O$Hmoacd4Tdfps*wI~Df}zK4Gj<8Eq#?}mdP1_xVOOlzEjr!3!0)i1TrAS8?OdO zOsBws`8^!+CayHX&J%BOi$e^KIrUwWXc^TlMNit%f_xIOjS0zYWpmYKKmC~xf~Won z=#jskbXP*nxyQ+`#Vqj&QFMfL_ zx%NGcHVx456o9B??24@hzhvkObcjQnYKXE3vQ-F#m*^y3 ztzDzDA^aec01K{~DjV%;;s?9RrsrXXiu-_wT3D(1ShdB&Y?JQ-9Wpb#%52W5U7&ar z!utVSV%~PXM+h1;6u^GnbV6k5zlnl=F`#=KcVIDXcl4(y7N4}6sV7Ppn$dK$j6YEH z?hgzA$-aVyCu@E1A8%+>?{m5UPk82o=?xV$`rvL37m{-+ctFr|;dSqo6^u62D<3b< z8w?xX@fzxF&icMqJ@q7xO9*=k+^55s_QxwMNWrc@z-A>;E47<l2U;vX z1^};mcmB@T%t|?F&+VZ@Abxxt{OQwXpC6(r?Xz9Y#-8A(cQ9i^#c3VJG0wu?Q66(M zP4l-xAP{CedmCktUyEV4Plj+kKJG}I4S)fn!uqvEFRH(X^%nY3o(KXCHi0id=_Nyo zS)mt~j*NLMZHj>6&Zd(~>$E)rOMKMRz#2)$)<>OL;CbgC#^*g`<)q-ITppx~KDcgC ze}22P;bj-(75bL*2Rf5zmfzf))e%e8;9wBbylg#6xR7Ft^!tg4hbT27!$8t=)^7S= z?jK2|g8X4M0BJ7?jbe0yTIMq}oDfd;yEy<~%4LQ)XL4ykGh+r1m>*O{WYc3N!!)2q z$Q%M@JQPsiGOHHzF|gZqWwD@u*r z9JOH0*9>5Pe5RdS&@!Jm;(^N(Yqh?YqVyp4@LXJTn1~O_3>;KIK$o~b>A5y!@ z?qNxN_n=t@l`H>YVf;yiF;=LCN2bWU%jJ*j>|$6mAr_n&f14|MPvJL5qxr z9mN(AK(eeHs+g(5^rDS2PpeJ!rOU@r3o}8l*oDF|H`|L#OXq|fXoW&$JyZ!wCIBm! zugV<}m=J;ddkBQ=5k0PpDhz#PaXir`DjYmRhI$52|5qYG6n6tlmF80~WNtmUUcv|` z2u6khv;ojf^juFGWJ&`19`-lo&}i|-gjUN@({H{kzzrx)n7?4!WjGxm*rCSCVg7hfw7@esee zNL}gjXj}~@9aPm7nRG|Mes4VMp7)-o==DMLp|;4)*^uv14&BvR#?2X#*KZ8bV|CH- zH^u*|Q{=jM^AeOK&9dl^bfrH6OBn1%z-{};zfLprFFn33H2wMUHWIab7A-B&eGJk4 zFcq(WP+IrpkFL#!X={UNo=ag&K3g?DTbtv>beF$z>}IZigFbgC z*@K@6L*Id!F&RI>lNSdgScn`_GMq>4{fml^kN;k?+juy5vD*+GDsoykG`>G5MkeG9 zr;3dF4{11{_fM@I+PHWhGc!$C6r#CYLx*O!?=I*dTEPRBo;k*AGo!gLptU7_nTzDF|ZW7A!nm>&OvfjP^ zPxf+cf4wYW1+5^h=hfS*^JA^zpa2*zY`ib#!0qy5wAZqQ?}TG6iDC8F5gQt(GxSH>%WO%mS$#u5`E7S7p`_)`z~ejJtErW zDr(&hOds2Gljd0|KZ-qE8{&*W@ay99eh5Nn)&zs@OKpc8b|u(#0k(& zG{03;jP9LIpniyvSWYWHHtn+S&x=lI*}SCnn@&=ElxI~vvjYa3xH5!%;u}wR$k}xC zBGss%oAY{!vl;L$Y0I~UhKuXdmK#@}HP_IBnH|)p7d=2YsOKwd9!rZG3V@;&8pSn0 zxT^Pn%!7!n2#mktmh+CXn^_VCxLP==t`WZe_eb(*Jtx}dUprm1)5Z(UJt8tjZWq(- zPGwA8N5DCdTxf^#?`kZFCH44S=eL_sjfFn?UitBZJ}v-lyeRh~5EHPVcKKlJARCe$ww z%KAV3KJwrN{6`wK}dp2EHBjVSfi=nMuA`>SPUP~ zuh@a~hGaSx?Z#qT&%A;A4t7me-i@mjyx%M ze5)NkSj8BLL%P@Bp85s!?%+(A?kOW32DyW&;G!B@hUj+5p;0si1E}8rp$vZEAylEw@!z=k ztAW=F^?U#iaO{&AeaROcr+Jx0ERj%cnMKoF({g|ffEHBJb|ix z%)9y!zfOOAI%Z65Z$^-9Vn=CbmVrX=PkI;d4A4ms`}3Rp%iPngA}Ent{bB$||1DXotDQ>4SNQ?)#Dtmf0_vq%7+Tk`4)%(mhcd4@IUJkqDp;xoT3&D^7BcYP(7N# zq8)Gd81=LpURK9*q%BKe1wIP+Ow?(Hf(3-+Ys|+?!F5tv08nNn=1;U+3=pwD;GiZ0 zgUuzVF{3t{H!Be6cw&EAV`#|QfOblT_#YHKL)kKsIH)}UQS&$V{|BMWNSa%#7l*?u z6E^2EX+9R2CidqJ3PHeb1*bASX3)CiG7NMS27lmy6f_9rc3;fn{@|RU1#F;zA$$w= z7Xox6B!%Fj%ljzMOeoa=3=#K;Owd07#S5qvtb>CXEU6mw(&PH!yL3xBwfn$E!ZRr| z2MR6<%Q9@}sFTN%{y)T-beogaXo4?#8Rx&C$itEzXdG|>aK-GC+hgvWUb!&`MG-I* zP}6xPRM^By>@(l&0&W%AFP0K03+Fy4Yi8E}_uL?7RuIJr5WjOLMc@}tLlL;cB8C*M zQ)C<1b%>wzzCp=~D>W9xFWB#)AhY~LDJ<&IEcg4{&DeCvz(1D)!4(uG$9*+|1N~s8 zwgN?6G+!}*NdZa51sfX|C7J^ABwHVV0U;}k4fn7Cb_OsfL{#HGAl3(A)s8LzTdFjr z=47jrV9Ee65#EBl3@MXKfB~>0QEH{Y><}ozhlue2Yxh0qu{sGV1^$EZZ{;n5o&f}9 zL-Bx0P6k8*m`n@gKIFc5D?0!HawDTv>r02?}HyuB~jW=!Bv2lLYc zKi0*k|C#?i&Nk=MS_|(-1g5lm>^RC=sFNyYOrH! z0Vv+cK1HGa?=9as00u*?>uHs3Uv*f4ITictOB9I_y+(-;96)0L)M;={^DS38K{#^2 zRs{yY$Z{DgBRmR^K&Kcm14aNM6vdQbzo&6f=yS6MUJq1U46^RWCjmu4#@Jd!gMv(& z)H4Ex02tJ5b$vo02wVxcT05D{Y}irk;q1~4leb93poukODq}{6@Dl4^h^f^h2!Wx4 z8cpgxkOF?M12qMi-!Eujv*&<;oB-}on54QLNJKp;EJYreTi_c3ze!w(Si9B46}I1r zlT^?!;+9I&?j23v@1p?;LMCdM5KD&I6aQ={;8E)-q2GpwpvaZ*au~!Ev-sv;o;H9# zr@y0M=UJB_1z$(9hMXy6pP{P);H z=KpLM@VS^X3hk0CNT51_Kd*02c15ede!Ir__wK^RDdNs-C%WzU7h6J__9y6_Cf$gB z>_7(k{X`9@oCM$QW2bzI znl@LN{#EV#yhdKljpTx!g7g5Ofd3W~zha)G2!$V=SVSM6Nb%92PIIs%WrDY!?`b#O zSz%gu00Py&8aqGeYpjn3(q{>>>;biBj^QG~Ct^oRw-8bnxtOY+xzKM%a(LZNcsm5X zLxejKQfI~Mgmmu(7;Z7c3{E|O6iSz ziGmiF9!3(_reyvfSj@9w;){9Q|4px2ON#oY_ZBQn7z!Aw|2F@2=CW|bT$I8hmkGwh zcn$r3JQkN}0Jxo=_;z0TGUI4UKp?!2!Qk-vyK&F%l^9$9I&k*5 zn9ThDAdmn&Rp4=PAHj)QW#Dw0TVvC!$~FaXc=lwvFwxe~D^{g}Nyi@M1zgnBd`qS6m9 z&;j-Q|LzOT2p1e_rAM)pI~-s^5sy%k4e~g?=XFKSTnJg+ejC1?u5NNlij9qpOamvR z{Tp!kXclXEUu_wo+&`A5SjIZKy1E>V`)$+H)2pkiBfIz!y#I~z{~bI3&5Hv-koHG0 zvR@nt;2+2fd3r#0vXA`%57Xyj{=fO6$h1=M1B2)3uAQA7J11wxQ=4BAlswW6f{=rm z7T=rsCeLW<=P%UN-}O99e8rtKvP=BI5LmcB(}g|nvg8uHj(|U1 z(HT4zgUda!A=h2a2c7ph8}|_w7Hf5D>4Nt2jhmaBI-YkJ*<%M@%QO(}`KSmVk0mxA zJa%3C+sAnW%w*q<+{7r;QiyVXON;O3SfQ}6aK25MNqex(*SbeH%6fWw-riTG zzE@kbzFOAS)>@^8-lIx<l(2QG_z}~??#|^z zi_|-9{Jg%thPA!4NONBL5oXpE6$I;ypsWD@!NR`_$N~+os;WvUL&Q52JB81_dAEM+ zt#5T@rM_bad0JW;9QpqJ`-(wX!!Xj<>nhJ~w5?H1j!d31uY*;%g zeJZM7B`--0RFZi&_7~gLT2Go!oA#oCPec5Xkk92mO>Kkmu`#l%=k9-(196C?C!C#~ zqlHg&UM8uO%Rb6=;8Q=5KjHoua zn4J4cymoeYsrQbJE5Yj3p0BUZMarA{!itKDl9FxU`+x6kZbD`BMJ%&0SR=sw3v3hhan!tx*v2< zyyGLH5#V*%o`khkO&HEhOe8k=E_Z)CJ6sEa4T9ySr>8SqaWJ#+AUmpn#|(xrFfeHS zIh?DI`0LlNVA$IpSf-OC53=I*fCp1#j{olLyP>OI?dBL?-_`ykzF7we=pt~r40+pQ zs0wXOl(wACd*4=PBp{AI7#Y9D$Ae%lyR(JL=<-VM z-o1ln85^u`T(0u9;KJE-D=mMg9ZcjdOCgDO);554aEjPmQWi$-?E0@m4XU>~r zMBeKXaOBQR4MkENPs;$S1_Po{vTh7Nz-`+o1adLItTWAp_cs?8iGxRxIVQ{6S z*LNP*>{HflbUOegmkf4oNZi15%)5~WXBgUJKEwXI!h7y2aU^$~9>js#=Yp!Lr}b`o zo(qEeR=cki6#6+8$wb#+qHa@EP#JTg8W@5%eR|5L+meQ|ktdG^wm z8?VaBN=b@9LMK4=q8Hm04fXYJ2O#p|yuE;h2+nz_h6(9JX2-{!0lBSB6A27Uox1ML z+hsClfvXBe?%OvK8%RpX`OgjjSJndK1e4#*^0>B9q%yr1aF5qFG;lWmTS7U<5{-P$ zC@oSQFaI3~?lm4J+kEZu&fqx`OKh;u#E_Tgb-5$#5Y$*+4E%qh)qKMrRnbj|rReCi zwX_I5IFtYbI~}a1*hg8`K!W20-n!x-B9&s{V%G&D3dkB^S-t-EP+ zOXx_}nb{Fi^KEc-LFBU^*xA`>sojL$a=F4O0bNUTHGEUP z9`jHE0Tp!FUfz&gY%EhEtGJ{SLYayt$IQuX%@^ zU0v;Gs=s7jF-8lK7>tdNlb5!u3T4YWvKuuEA@}n|udG0v;Ow*ooI+JKHEUFmxG2CG zPmsgY(;gQ)H55W1d=rwrw6WW;H#m2Bxh6_ySMy=UgZJmy*ipFAB?GbyNZV{zs^2YY z1_n()+{4{YZ6h-ZOdlLXXt&Upfy#P3c4$2K2- zu@8dX<@~=EX9JAHiLdOAtgLx@YAUd`RlXTC?FIC0#n-Fh+jDLfeR*+lWAgERe?FZC z7P9YwGgq5$zBy}t9~eOOm0Nyu6m&&yPP6_0=QFU)5D&`H_J6-z-n(}%JD<#reYL;M z_y0V*;$7s1goCx;?@qs+Pzx-Uj`zt{Kbx5jY&z_mHf@?=^0AWA(zWsX>yCDby7$Y? z1vZjEZf>;JWflnq&h7mA`r4Tz{>LG4P{q;6`|RxO?ZEcRx^?T$&NfdsnhC6am(Q=; zwQ=LePW5>lifbY_KRYb{uV7uF+T@jM*VY1q@!!|=^}x1JaA;`gOrNyR&(41R`c+p~ z_v+QF(&l+{j8ac^{I%)`RGWRauT1{lQ!6VgP_PuV{#xYPZI*v;j`dHG1tq`&S3h#o z6QHXlf4tZ{|L>bwrofvrp3nI+`|sbsr>E)O-jL|*_!!vu%)Pzs>>SI@9kr|yXMj^M zyIZ-%+XR4hap}#}>AbhnfU|(tW6SRzY-azQpJp`E`rVGlz;KYfQ3tGsfwe2^?+ZQB z=I=o1o~z^t`)^=jb!lU>=aZ_(RwDnA@#|Nm+Fei_@UEz6cYn+%*M{Pgs+ z>>1Xcu5H`4$^ZXx{NWelmWj;le4rNHN%i?T`T6qpb$|Z+{0y856xWF;*!2zA)I0>V z2v`$V{`l|^*j&(w+3{goblyz6+A703rXC(ht2hTVKR84?A!wbc#jPg5J{E(3r;B3< c!cTwYC(qmTq-|%~Z=f85r>mdKI;Vst0Kuh@QUCw| diff --git a/dev/explanations/basisfunctions/df6fbd34.png b/dev/explanations/basisfunctions/df6fbd34.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b48f2ecc96f50e772952afdc7b849d34576277 GIT binary patch literal 107709 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 X}6VH6t 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�R?kFyfo49|w*N;U%@R_596!_sWqoWd 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

    b5^fgcmoXQ58^^d9!E;?p7Q8 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 i;s4Kl(0|+m-Ux2G^B}XDhNR!8#$ZrEsI<-i literal 0 HcmV?d00001 diff --git a/dev/explanations/basisfunctions/index.html b/dev/explanations/basisfunctions/index.html index 062fd1d5..3d3a5f84 100644 --- a/dev/explanations/basisfunctions/index.html +++ b/dev/explanations/basisfunctions/index.html @@ -12,7 +12,7 @@ y_conv = conv(y, bold_kernel(0)) # convolve! lines(y_conv[:,1])Example block output

    Next, we would add some noise:

    using Random
     y_conv += randn(size(y_conv))
    -lines(y_conv[:,1])
    Example block output

    🎉 - we did it, we simulated fMRI data.

    Now you can see that the conditions overlap in time. To get back to the original amplitude values, we need to specify a basis function and use Unfold to deconvolve the signals.

    Note

    Events can fall between TR (the sampling rate). Some packages subsample the time signal, but in Unfold we can call the bold.kernel function directly at a given event time, which allows us to use non-TR multiples.

    FIR Basis Function

    Okay, let's have a look at a different basis function: The FIR basisfunction. FIR stands for Finite-Impulse-Response and is a term taken from the filtering literature.

    basisfunction = firbasis(τ=(-0.4,.8), sfreq=50, name="myFIRbasis")
    +lines(y_conv[:,1])
    Example block output

    🎉 - we did it, we simulated fMRI data.

    Now you can see that the conditions overlap in time. To get back to the original amplitude values, we need to specify a basis function and use Unfold to deconvolve the signals.

    Note

    Events can fall between TR (the sampling rate). Some packages subsample the time signal, but in Unfold we can call the bold.kernel function directly at a given event time, which allows us to use non-TR multiples.

    FIR Basis Function

    Okay, let's have a look at a different basis function: The FIR basisfunction. FIR stands for Finite-Impulse-Response and is a term taken from the filtering literature.

    basisfunction = firbasis(τ=(-0.4,.8), sfreq=50, name="myFIRbasis")
     fir_kernel = e -> Unfold.kernel(basisfunction, e)
     m = fir_kernel(0)
     f = Figure()
    @@ -30,4 +30,4 @@
      ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  1  ⋅  ⋅  ⋅
      ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  1  ⋅  ⋅
      ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  1  ⋅
    - ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  1

    (all . are 0's)

    The FIR basis set consists of multiple basis functions. That is, each event is now time-expanded to multiple predictors, each with a certain time delay to the event onset. This allows us to model any linear overlap shape, and doesn't force us to make assumptions about the convolution kernel, as we had to do in the BOLD case.

    + ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 1

    (all . are 0's)

    The FIR basis set consists of multiple basis functions. That is, each event is now time-expanded to multiple predictors, each with a certain time delay to the event onset. This allows us to model any linear overlap shape, and doesn't force us to make assumptions about the convolution kernel, as we had to do in the BOLD case.

    diff --git a/dev/explanations/development/index.html b/dev/explanations/development/index.html index b4131db7..7c81d269 100644 --- a/dev/explanations/development/index.html +++ b/dev/explanations/development/index.html @@ -1,3 +1,3 @@ - · Unfold.jl Timeseries Analysis & Deconvolution

    Install a dev-version of Unfold

    In order to see and change the tutorials, you have to install a local dev-version of Unfold via:

    ]dev --local Unfold

    This clones the git#main into ./dev/Unfold

    Instantiating the documentation environment

    To generate documentation, we recommend to install LiveServer.jl - then you can do:

    using LiveServer
    -servedocs(skip_dirs=joinpath("docs","src","generated"),literate_dir=joinpath("docs","literate"))

    If you prefer a one-off:

    • activate the ./docs folder (be sure to ]instantiate the first time!)
    • run include("docs/make.jl")
    +servedocs(skip_dirs=joinpath("docs","src","generated"),literate_dir=joinpath("docs","literate"))

    If you prefer a one-off:

    • activate the ./docs folder (be sure to ]instantiate the first time!)
    • run include("docs/make.jl")
    diff --git a/dev/generated/HowTo/FIRduration/index.html b/dev/generated/HowTo/FIRduration/index.html index 1a799af7..c6b0c3c5 100644 --- a/dev/generated/HowTo/FIRduration/index.html +++ b/dev/generated/HowTo/FIRduration/index.html @@ -71,4 +71,4 @@ heatmap(Matrix(modelmatrix(m))')Example block output

    as one can see, now the designmatrix is not stretched - but rather "block"-ed

    p = predict(m; overlap = false)[1]
    -heatmap(p[1, :, :])
    Example block output

    This page was generated using Literate.jl.

    +heatmap(p[1, :, :])Example block output

    This page was generated using Literate.jl.

    diff --git a/dev/generated/HowTo/contrasts/index.html b/dev/generated/HowTo/contrasts/index.html index 22cac0fa..90e85e72 100644 --- a/dev/generated/HowTo/contrasts/index.html +++ b/dev/generated/HowTo/contrasts/index.html @@ -31,4 +31,4 @@ c_e.group .= "Effects Coding" c = vcat(c_d, c_e) -plot_erp(c; mapping = (; color = :coefname, col = :group))Example block output

    As expected, the effects-coding slope of condition: face is half the size of the dummy-coding one (because -1/1 coding was used).


    This page was generated using Literate.jl.

    +plot_erp(c; mapping = (; color = :coefname, col = :group))Example block output

    As expected, the effects-coding slope of condition: face is half the size of the dummy-coding one (because -1/1 coding was used).


    This page was generated using Literate.jl.

    diff --git a/dev/generated/HowTo/effects/index.html b/dev/generated/HowTo/effects/index.html index 7882c00d..e5ac0d7e 100644 --- a/dev/generated/HowTo/effects/index.html +++ b/dev/generated/HowTo/effects/index.html @@ -24,4 +24,4 @@ eff = effects(Dict(:condition => ["car", "face"]), m) eff.typical .= :mean # mean is the default -plot_erp(vcat(eff, eff_max); mapping = (; color = :condition, col = :typical))Example block output

    This page was generated using Literate.jl.

    +plot_erp(vcat(eff, eff_max); mapping = (; color = :condition, col = :typical))Example block output

    This page was generated using Literate.jl.

    diff --git a/dev/generated/HowTo/juliacall_unfold/index.html b/dev/generated/HowTo/juliacall_unfold/index.html index eff5368e..e60c62ef 100644 --- a/dev/generated/HowTo/juliacall_unfold/index.html +++ b/dev/generated/HowTo/juliacall_unfold/index.html @@ -13,4 +13,4 @@ # The function seval() can be used to evaluate a piece of Julia code given as a string jl.seval("using Unfold") Unfold = jl.Unfold # simplify name

    Now you can use all Unfold functions as for example

    dummy_model = Unfold.UnfoldLinearModel(jl.Dict())

    Example: Unfold model fitting from Python

    In this notebook, you can find a more detailed example of how to use Unfold from Python to load data, fit an Unfold model and visualise the results in Python.

    Important limitations

    Python doesnt not offer the full expressions that are available in Julia. So there are some things you need to give special attention:

    @formula: we havent found a way to call macros yet, even though we think it should be possible. For now please use f = jl.seval("@formula(0~1+my+cool+design)"). Later versions might support something like f = @formula("0~1+my+cool+design)" directly

    Specifying the design: Since Unfold 0.7 we officially switched to the

    ["eventtypeA"=>(formula,basisfunction),
    -"eventtypeB"=>(otherformula,otherbasisfunction)]

    Array-based syntax, from a Dict-based syntax. Unfortunately, => (a pair) is not supported in Python and one needs to do some rewriting:

    jl.convert(jl.Pair,(formula,basisfunction))

    which makes the code less readable. We are thinking of ways to remedy this - but right now there is now way around. For now, it is also possible to use the old syntax e.g. in python

    {"eventtypeA"=>(formula,basisfunction),"eventtypeB"=>(otherformula,otherbasisfunction)}

    which is clearly easier to read :)

    UnfoldSim.design: we need a Dict with a Symbol , one has to do something like condition_dict_jl = {convert(jl.Symbol,"condA"):["car", "face"]} to do so. We will [try to allow strings}(https://github.com/unfoldtoolbox/UnfoldSim.jl/issues/96) here as well, removing this constraint.

    When preprocessing your raw data through MNE Python, take the following into consideration: The Raw object contains the first_samp attribute which is an integer representing the number of time samples that passed between the onset of the hardware acquisition system and the time when data recording started. The Raw data doesn't include these time samples, meaning that the first sample is the beginning of the data aquisition. From the Raw object you can obtain an events array from the annotations through mne.eventsfromannotations(). The events array, however, does include firstsamp, meaning that the annotated events in events array don't match the Raw object anymore. Alternatively, it might be easier to convert the annotations to a pandas dataframe directly (`todataframe()`), or even better, load the "*events.tsv" from a BIDS dataset. In the latter case, all columns will be preserved, which MNE's read_annotation drops.


    This page was generated using Literate.jl.

    +"eventtypeB"=>(otherformula,otherbasisfunction)]

    Array-based syntax, from a Dict-based syntax. Unfortunately, => (a pair) is not supported in Python and one needs to do some rewriting:

    jl.convert(jl.Pair,(formula,basisfunction))

    which makes the code less readable. We are thinking of ways to remedy this - but right now there is now way around. For now, it is also possible to use the old syntax e.g. in python

    {"eventtypeA"=>(formula,basisfunction),"eventtypeB"=>(otherformula,otherbasisfunction)}

    which is clearly easier to read :)

    UnfoldSim.design: we need a Dict with a Symbol , one has to do something like condition_dict_jl = {convert(jl.Symbol,"condA"):["car", "face"]} to do so. We will [try to allow strings}(https://github.com/unfoldtoolbox/UnfoldSim.jl/issues/96) here as well, removing this constraint.

    When preprocessing your raw data through MNE Python, take the following into consideration: The Raw object contains the first_samp attribute which is an integer representing the number of time samples that passed between the onset of the hardware acquisition system and the time when data recording started. The Raw data doesn't include these time samples, meaning that the first sample is the beginning of the data aquisition. From the Raw object you can obtain an events array from the annotations through mne.eventsfromannotations(). The events array, however, does include firstsamp, meaning that the annotated events in events array don't match the Raw object anymore. Alternatively, it might be easier to convert the annotations to a pandas dataframe directly (`todataframe()`), or even better, load the "*events.tsv" from a BIDS dataset. In the latter case, all columns will be preserved, which MNE's read_annotation drops.


    This page was generated using Literate.jl.

    diff --git a/dev/generated/HowTo/unfold_io/index.html b/dev/generated/HowTo/unfold_io/index.html index 960095ae..3f3dcca0 100644 --- a/dev/generated/HowTo/unfold_io/index.html +++ b/dev/generated/HowTo/unfold_io/index.html @@ -8,4 +8,4 @@ bfDict = Dict(Any => (f, basisfunction)) m = fit(UnfoldModel, bfDict, events, data);
    ┌ Warning: using `Dict(:A=>(@formula,times/basisfunction))` is deprecated, please use `[:A=>(@formula,times/basisfunction)]` from now on
     └ @ Unfold ~/work/Unfold.jl/Unfold.jl/src/fit.jl:74

    Save and load the fitted Unfold model

    The following code saves the model in a compressed .jld2 file. The default option of the save function is compress=false. For memory efficiency the designmatrix is set to missing. If needed, it can be reconstructed when loading the model.

    save_path = mktempdir(; cleanup = false) # create a temporary directory for the example
    -save(joinpath(save_path, "m_compressed.jld2"), m; compress = true);

    The load function allows to retrieve the model again. By default, the designmatrix is reconstructed. If it is not needed set generate_Xs=false` which improves time-efficiency.

    m_loaded = load(joinpath(save_path, "m_compressed.jld2"), UnfoldModel, generate_Xs = true);

    This page was generated using Literate.jl.

    +save(joinpath(save_path, "m_compressed.jld2"), m; compress = true);

    The load function allows to retrieve the model again. By default, the designmatrix is reconstructed. If it is not needed set generate_Xs=false` which improves time-efficiency.

    m_loaded = load(joinpath(save_path, "m_compressed.jld2"), UnfoldModel, generate_Xs = true);

    This page was generated using Literate.jl.

    diff --git a/dev/generated/explanations/nonlinear_effects/index.html b/dev/generated/explanations/nonlinear_effects/index.html index 235a75d3..9e7ad03e 100644 --- a/dev/generated/explanations/nonlinear_effects/index.html +++ b/dev/generated/explanations/nonlinear_effects/index.html @@ -73,4 +73,4 @@ [lines!(weighted[k, :]) for k = 1:10] current_figure()Example block output

    Now sum them up.

    lines(sum(weighted, dims = 1)[1, :])
     plot!(X * β, color = "gray") #(same as matrixproduct X*β directly!)
    -current_figure()
    Example block output

    And this is how you can think about splines.


    This page was generated using Literate.jl.

    +current_figure()Example block output

    And this is how you can think about splines.


    This page was generated using Literate.jl.

    diff --git a/dev/generated/explanations/predict/index.html b/dev/generated/explanations/predict/index.html index d1e900d5..57dbdc48 100644 --- a/dev/generated/explanations/predict/index.html +++ b/dev/generated/explanations/predict/index.html @@ -19,4 +19,4 @@ p_face = predict(m, exclude_basis = ["car"], eventcolumn = :condition) # same as keep_basis=["face"] f = lines(p_car[1, 1:1000]) lines!(p_face[1, 1:1000]) -fExample block output

    In the plot, we see the two partial predictions for car and face. They are respectively "0" outside the basisfunction windows

    Note

    The above options can be combined as well, e.g. to get an epoch_to, exclude_basis version. epoch_timewindow can be specified as well.


    This page was generated using Literate.jl.

    +fExample block output

    In the plot, we see the two partial predictions for car and face. They are respectively "0" outside the basisfunction windows

    Note

    The above options can be combined as well, e.g. to get an epoch_to, exclude_basis version. epoch_timewindow can be specified as well.


    This page was generated using Literate.jl.

    diff --git a/dev/generated/explanations/window_length/index.html b/dev/generated/explanations/window_length/index.html index 8c9df207..4a2a8d2e 100644 --- a/dev/generated/explanations/window_length/index.html +++ b/dev/generated/explanations/window_length/index.html @@ -80,4 +80,4 @@ x -> draw(x, axis = (; xlabel = "time [s]", ylabel = "estimate [a.u.]"));

    Add zero grid lines

    h1 = hlines!(current_axis(), [0], color = Colors.Gray(0.8));
     h2 = vlines!(current_axis(), [0], color = Colors.Gray(0.8));
     translate!(h1, 0, 0, -1);
    -translate!(h2, 0, 0, -1);

    Plot figure

    current_figure()
    Example block output

    This page was generated using Literate.jl.

    +translate!(h2, 0, 0, -1);

    Plot figure

    current_figure()
    Example block output

    This page was generated using Literate.jl.

    diff --git a/dev/generated/references/solver/index.html b/dev/generated/references/solver/index.html index b4d7bf64..e813ef62 100644 --- a/dev/generated/references/solver/index.html +++ b/dev/generated/references/solver/index.html @@ -28,7 +28,7 @@ Useful functions: `design(uf)`, `designmatrix(uf)`, `coef(uf)`, `coeftable(uf)`

    Remember from this table the time for one solve (~700ms on my test-computer) this is the time per channel.

    series(coef(m))
    Example block output

    Cholesky Example

    Note

    the following function is already implemented in Unfold.jl as well. See ?Unfold.solver_predefined

    Given that the prepare function returns all necessary ingredients, this is a bit simple. So let's make it more complex

    for nicety, we need some unpacking wrappers

    _prepare_cholesky(all::Tuple) = _prepare_cholesky(all...)
     _prepare_cholesky(Ĥ, data, all::Tuple) = _prepare_cholesky(Ĥ, data, all...)
    _prepare_cholesky (generic function with 2 methods)

    this function effectively only pre-calculates the cholesky decomposition

    _prepare_cholesky(Ĥ, data, Xt, R_xx, R_xy) = (Ĥ, data, (Xt, cholesky(R_xx), R_xy))
    _prepare_cholesky (generic function with 3 methods)

    now we have everything to put together our solver-pipeline

    _my_prepare =
    -    (x, y) -> Unfold.prepare(collect(x), y) |> Unfold.prepare_XTX |> _prepare_cholesky
    #4 (generic function with 1 method)

    let's test (note we have to reshape the data)

    @time _my_prepare(modelmatrix(m), reshape(data, 1, :))
    ([0.0 0.0 … 0.0 0.0], [0.31631798033146774; 0.40338935529989906; … ; -0.22230944464885682; -0.01320095208877194;;], ([0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 1.0 0.0; 0.0 0.0 … 0.0 1.0], LinearAlgebra.Cholesky{Float64, Matrix{Float64}}([44.721359549995796 0.0 … 1.1627553482998907 0.9167878707749137; 0.0 44.721359549995796 … 0.9391485505499116 1.1627553482998907; … ; 52.0 42.0 … 22.354427580020936 0.0008355409821590546; 41.0 52.0 … 0.0 22.354385443812227], 'U', 0), [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0  …  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]))

    finally, we need a solver this is how we solve the single-channel equation

    function _my_cholesky!(beta, data, Xt, XtX_cholesky, R_xy)
    +    (x, y) -> Unfold.prepare(collect(x), y) |> Unfold.prepare_XTX |> _prepare_cholesky
    #4 (generic function with 1 method)

    let's test (note we have to reshape the data)

    @time _my_prepare(modelmatrix(m), reshape(data, 1, :))
    ([0.0 0.0 … 0.0 0.0], [0.31631798033146774; 0.40338935529989906; … ; -0.22230944464885682; -0.01320095208877194;;], ([0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 1.0 0.0; 0.0 0.0 … 0.0 1.0], LinearAlgebra.Cholesky{Float64, Matrix{Float64}}([44.721359549995796 0.0 … 1.1627553482998907 0.9167878707749137; 0.0 44.721359549995796 … 0.9391485505499116 1.1627553482998907; … ; 52.0 42.0 … 22.354427580020936 0.0008355409821590546; 41.0 52.0 … 0.0 22.354385443812227], 'U', 0), [0.0, 0.0, 5.0e-324, 5.0e-324, 5.0e-324, 5.0e-324, 1.0e-323, 0.0, 0.0, 1.0e-323  …  5.0e-324, 5.0e-324, 0.0, 0.0, 0.0, 5.0e-324, 0.0, 8.4e-323, 6.4e-323, 5.4e-323]))

    finally, we need a solver this is how we solve the single-channel equation

    function _my_cholesky!(beta, data, Xt, XtX_cholesky, R_xy)
         @time Unfold.calc_Rxy!(R_xy, Xt, data)
         @time beta .= XtX_cholesky \ R_xy
     end
    @@ -51,4 +51,4 @@
      
     ✔ model is fit.  size(coefs) (1, 122) 
      
    -Useful functions: `design(uf)`, `designmatrix(uf)`, `coef(uf)`, `coeftable(uf)`

    This (on my test-computer) took only 97ms per channel, so it is ~7x faster per channel.

    series(coef(m))
    Example block output

    This page was generated using Literate.jl.

    +Useful functions: `design(uf)`, `designmatrix(uf)`, `coef(uf)`, `coeftable(uf)`

    This (on my test-computer) took only 97ms per channel, so it is ~7x faster per channel.

    series(coef(m))
    Example block output

    This page was generated using Literate.jl.

    diff --git a/dev/index.html b/dev/index.html index da8eae61..07ab72f3 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,4 +1,4 @@ Unfold Documentation · Unfold.jl Timeseries Analysis & Deconvolution

    Unfold Documentation

    If you want to follow the tutorials, best to start with the mass-univariate approach, which should be familiar to you if you did ERPs before. Then the overlap-correction tutorial, mixed mass univariate, mixed overlap (tricky!). If you are then not satisfied, check out more advanced topics: effects-interface (aka what to do after fitting), or non-linear effects.

    In case you want to understand the tools better, check out our explanations.

    Once you are familiar with the tools, check out further how-to guides for specific applications.

    In case you want to understand the toolbox better, we plan to offer technical references. This includes Benchmarks & Explorations.

    Quick start

    There are four main model types

    1. Timeexpansion No, Mixed No : fit(UnfoldModel, [Any=>(f, -0.1:0.01:0.5)], evts, data_epoch)
    2. Timeexpansion Yes, Mixed No : fit(UnfoldModel, [Any=>(f, basisfunction)], evts, data)
    3. Timeexpansion No, Mixed Yes : fit(UnfoldModel, [Any=>(fLMM, -0.1:0.01:0.5)], evts, data_epoch)
    4. Timeexpansion Yes, Mixed Yes: fit(UnfoldModel, [Any=>(fLMM, basisfunction)], evts, data)
    f = @formula 0 ~ 1 + condition
     fLMM = @formula 0 ~ 1 + condition + (1|subject) + (1|item)
    -basisfunction = firbasis(τ = (-0.1,0.5), sfreq = 100))
    +basisfunction = firbasis(τ = (-0.1,0.5), sfreq = 100))
    diff --git a/dev/installation/index.html b/dev/installation/index.html index e6165ead..28cda85a 100644 --- a/dev/installation/index.html +++ b/dev/installation/index.html @@ -1,2 +1,2 @@ -Installing Julia + Unfold.jl · Unfold.jl Timeseries Analysis & Deconvolution

    Installation

    Installing Julia

    The easiest way to install julia is using juliaup

    TLDR;

    • Windows: winget install julia -s msstore
    • Mac/Linux: curl -fsSL https://install.julialang.org | sh

    We further recommend to use VSCode. Make sure to install the Julia-Plugin, and install Revise.jl - a tutorial with screenshots can be found here

    Installing Unfold.jl

    You can enter the package manager (similar to conda) using ] in the REPL ("julia-commandline").

    This should result in (currentFolder) pkg> (with currentFolder being the project you currently work in)

    Hint

    if you see (@v1.9) pkg> instead, you still have to activate your environment. This can be done using:

    cd("/path/to/your/project") and ]activate .

    or alternatively ]activate /path/to/your/project/

    Now you can do pkg> add Unfold

    and after some installation:

    julia> using Unfold in the REPL

    +Installing Julia + Unfold.jl · Unfold.jl Timeseries Analysis & Deconvolution

    Installation

    Installing Julia

    The easiest way to install julia is using juliaup

    TLDR;

    • Windows: winget install julia -s msstore
    • Mac/Linux: curl -fsSL https://install.julialang.org | sh

    We further recommend to use VSCode. Make sure to install the Julia-Plugin, and install Revise.jl - a tutorial with screenshots can be found here

    Installing Unfold.jl

    You can enter the package manager (similar to conda) using ] in the REPL ("julia-commandline").

    This should result in (currentFolder) pkg> (with currentFolder being the project you currently work in)

    Hint

    if you see (@v1.9) pkg> instead, you still have to activate your environment. This can be done using:

    cd("/path/to/your/project") and ]activate .

    or alternatively ]activate /path/to/your/project/

    Now you can do pkg> add Unfold

    and after some installation:

    julia> using Unfold in the REPL

    diff --git a/dev/objects.inv b/dev/objects.inv index 6c9075c028852c6cc20508d97fa79e985d47729f..7f698cfce978f39ce742efe0da547b265376fed2 100644 GIT binary patch delta 12 TcmZ3lx?XicDx<~5G*2M_9`yuC delta 12 TcmZ3lx?XicDx>+vG*2M_9`FQ6 diff --git a/dev/references/benchmarks/index.html b/dev/references/benchmarks/index.html index 10e46ecf..248d1e85 100644 --- a/dev/references/benchmarks/index.html +++ b/dev/references/benchmarks/index.html @@ -8,4 +8,4 @@ n_repeats = 200;

    Float64

    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat640.0068(239522, 1210)128(0.2, 0.2)PosDefException(-1)
    trueqrFloat640.380.250.0068(239522, 1210)128(0.2, 0.2)
    truepinvFloat640.420.260.0068(239522, 1210)128(0.2, 0.2)
    trueinternFloat640.70.250.0068(239522, 1210)128(0.2, 0.2)
    truecgFloat641.20.320.0068(239522, 1210)128(0.2, 0.2)
    falsecholeskyFloat641.50.310.0068(239522, 1210)128(0.2, 0.2)
    falseqrFloat641.70.310.0068(239522, 1210)128(0.2, 0.2)
    falsecgFloat642.00.30.0068(239522, 1210)128(0.2, 0.2)
    falsepinvFloat642.10.380.0068(239522, 1210)128(0.2, 0.2)
    truekrylov_gpuFloat645.90.40.0068(239522, 1210)128(0.2, 0.2)
    falsedefault_multiFloat6413.01.20.0068(239522, 1210)128(0.2, 0.2)
    falseinternFloat6413.01.70.0068(239522, 1210)128(0.2, 0.2)

    Float32

    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat320.0068(239522, 1210)128(0.2, 0.2)PosDefException(-1)
    truekrylov_gpuFloat320.0068(239522, 1210)128(0.2, 0.2)
    truepinvFloat320.390.250.0068(239522, 1210)128(0.2, 0.2)
    trueqrFloat320.620.240.0068(239522, 1210)128(0.2, 0.2)
    trueinternFloat320.690.240.0068(239522, 1210)128(0.2, 0.2)
    truecgFloat321.20.310.0068(239522, 1210)128(0.2, 0.2)
    falsecholeskyFloat321.20.170.0068(239522, 1210)128(0.2, 0.2)
    falsecgFloat321.30.160.0068(239522, 1210)128(0.2, 0.2)
    falseqrFloat321.40.170.0068(239522, 1210)128(0.2, 0.2)
    falsepinvFloat321.60.210.0068(239522, 1210)128(0.2, 0.2)
    falseinternFloat3213.00.860.0068(239522, 1210)128(0.2, 0.2)
    falsedefault_multiFloat3213.00.970.0068(239522, 1210)128(0.2, 0.2)

    large, realistic model

        n_channels = 128,
         sfreq = 500,
         n_splines = (4, 4),
    -    n_repeats = 500,
    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat640.0015(3001479, 9616)128(0.2, 0.2)PosDefException(-1)
    falsecholeskyFloat640.0015(3001479, 9616)128(0.2, 0.2)PosDefException(2760)
    falseinternFloat640.0015(3001479, 9616)128(0.2, 0.2)SingularException(9599)
    truecgFloat649.33.60.0015(3001479, 9616)128(0.2, 0.2)
    trueqrFloat6411.03.50.0015(3001479, 9616)128(0.2, 0.2)
    trueinternFloat6413.03.50.0015(3001479, 9616)128(0.2, 0.2)
    falseqrFloat6480.06.30.0015(3001479, 9616)128(0.2, 0.2)
    truepinvFloat6480.04.20.0015(3001479, 9616)128(0.2, 0.2)
    truekrylov_gpuFloat64107.03.90.0015(3001479, 9616)128(0.2, 0.2)
    falsedefault_multiFloat64500.015.00.0015(3001479, 9616)128(0.2, 0.2)
    falsepinvFloat64520.011.00.0015(3001479, 9616)128(0.2, 0.2)
    falsecgFloat64939.05.70.0015(3001479, 9616)128(0.2, 0.2)
    + n_repeats = 500,
    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat640.0015(3001479, 9616)128(0.2, 0.2)PosDefException(-1)
    falsecholeskyFloat640.0015(3001479, 9616)128(0.2, 0.2)PosDefException(2760)
    falseinternFloat640.0015(3001479, 9616)128(0.2, 0.2)SingularException(9599)
    truecgFloat649.33.60.0015(3001479, 9616)128(0.2, 0.2)
    trueqrFloat6411.03.50.0015(3001479, 9616)128(0.2, 0.2)
    trueinternFloat6413.03.50.0015(3001479, 9616)128(0.2, 0.2)
    falseqrFloat6480.06.30.0015(3001479, 9616)128(0.2, 0.2)
    truepinvFloat6480.04.20.0015(3001479, 9616)128(0.2, 0.2)
    truekrylov_gpuFloat64107.03.90.0015(3001479, 9616)128(0.2, 0.2)
    falsedefault_multiFloat64500.015.00.0015(3001479, 9616)128(0.2, 0.2)
    falsepinvFloat64520.011.00.0015(3001479, 9616)128(0.2, 0.2)
    falsecgFloat64939.05.70.0015(3001479, 9616)128(0.2, 0.2)
    diff --git a/dev/references/extensions/index.html b/dev/references/extensions/index.html index f22eb8da..73ebb345 100644 --- a/dev/references/extensions/index.html +++ b/dev/references/extensions/index.html @@ -3,4 +3,4 @@ using Unfold

    GPU: Krylov,CUDA

    To use gpu support as described in @Ref(custom_solvers) you have to:

    using Krylov,CUDA
     using Unfold

    RobustSolvers.jl

    To use robust (outlier-"safe") solvers support as described in @Ref(custom_solvers) you have to:

    using RobustSolvers
     using Unfold

    Non-linear effects: BSplineKit.jl

    Finally to use non-linear effects/splines like in @formula 0~1+spl(continuous,5) you have to use:

    using BSplineKit
    -using Unfold
    Note

    In principle you should be able to load the package after loading Unfold. But sometimes this doesnt work, a Base.retry_load_extensions() call might help in these situations.

    +using Unfold
    Note

    In principle you should be able to load the package after loading Unfold. But sometimes this doesnt work, a Base.retry_load_extensions() call might help in these situations.

    diff --git a/dev/references/functions/index.html b/dev/references/functions/index.html index c3ca2ed3..43de5102 100644 --- a/dev/references/functions/index.html +++ b/dev/references/functions/index.html @@ -2,8 +2,8 @@ API: Functions · Unfold.jl Timeseries Analysis & Deconvolution
    Effects.effectsMethod
    effects(design::AbstractDict, model::UnfoldModel; typical = mean)

    Calculates marginal effects for all term combinations in design.

    Implementation based on Effects.jl package; likely could repackage in UnfoldEffects.jl; somebody wants to do it? This would make it easier to cross-maintain it to changes/bug fixes in the Effects.jl package. design is a dictionary containing those predictors (as keys) with levels (as values), that you want to evaluate. The typical refers to the value, which other predictors that are not specified in the dictionary, should take on.

    For MixedModels, the returned effects are based on the "typical" subject, i.e. all random effects are put to 0.

    Example

     julia> f = @formula 0 ~ categoricalA + continuousA + continuousB
      julia> uf = fit(UnfoldModel, (Any => (f, times)), data, events)
      julia> d = Dict(:categorical => ["levelA", "levelB"], :continuous => [-2, 0, 2])
    - julia> effects(d, uf)

    will result in 6 predicted values: A/-2, A/0, A/2, B/-2, B/0, B/2.

    source
    FileIO.loadMethod
    FileIO.load(file, ::Type{<:UnfoldModel}; generate_Xs=true)

    Load UnfoldModel from a .jld2 file.

    By default, the designmatrix is reconstructed. If it is not needed set generate_Xs=false which improves time-efficiency.

    source
    FileIO.saveMethod
    FileIO.save(file, uf::T; compress=false) where {T<:UnfoldModel}

    Save UnfoldModel in a (by default uncompressed) .jld2 file.

    For memory efficiency the designmatrix is set to missing. If needed, it can be reconstructed when loading the model.

    source
    StatsAPI.coefnamesMethod
    coefnames(term)
    -

    coefnames of a TimeExpandedTerm concatenates the basis-function name with the kronecker product of the term name and the basis-function colnames. Separator is ' : ' Some examples for a firbasis: basis313 : (Intercept) : 0.1 basis313 : (Intercept) : 0.2 basis_313 : (Intercept) : 0.3 ...

    source
    StatsAPI.fitMethod
    fit(type::UnfoldModel,d::Vector{Pair},tbl::AbstractDataFrame,data::Array)
    + julia> effects(d, uf)

    will result in 6 predicted values: A/-2, A/0, A/2, B/-2, B/0, B/2.

    source
    FileIO.loadMethod
    FileIO.load(file, ::Type{<:UnfoldModel}; generate_Xs=true)

    Load UnfoldModel from a .jld2 file.

    By default, the designmatrix is reconstructed. If it is not needed set generate_Xs=false which improves time-efficiency.

    source
    FileIO.saveMethod
    FileIO.save(file, uf::T; compress=false) where {T<:UnfoldModel}

    Save UnfoldModel in a (by default uncompressed) .jld2 file.

    For memory efficiency the designmatrix is set to missing. If needed, it can be reconstructed when loading the model.

    source
    StatsAPI.coefnamesMethod
    coefnames(term)
    +

    coefnames of a TimeExpandedTerm concatenates the basis-function name with the kronecker product of the term name and the basis-function colnames. Separator is ' : ' Some examples for a firbasis: basis313 : (Intercept) : 0.1 basis313 : (Intercept) : 0.2 basis_313 : (Intercept) : 0.3 ...

    source
    StatsAPI.fitMethod
    fit(type::UnfoldModel,d::Vector{Pair},tbl::AbstractDataFrame,data::Array)
     fit(type::UnfoldModel,f::FormulaTerm,tbl::AbstractDataFrame,data::Array{T,3},times)
     fit(type::UnfoldModel,f::FormulaTerm,tbl::AbstractDataFrame,data::Array{T,2},basisfunction::BasisFunction)

    Generates Designmatrix & fits model, either mass-univariate (one model per epoched-timepoint) or time-expanded (modeling linear overlap).

    keyword arguments

    • fit::Bool (default: true) - fit the model after constructing the designmatrix. Setting this to false is sometimes helpful if you only want to inspect the designmatrix.
    • contrasts::Dict: (default: Dict()) contrast to be applied to formula. Example: Dict(:my_condition=>EffectsCoding()). More information here: https://juliastats.org/StatsModels.jl/stable/contrasts/
    • eventcolumn::Union{Symbol,String} (default :event) - the column in tbl to differentiate the basisfunctions as defined in d::Vector{Pair}
    • solver::function: (default: solver_default). The solver used for y=Xb, e.g. (X,y;kwargs...) -> solver_default(X,y;kwargs...). There are faster & alternative solvers available, see solver_predefined for a list of options, see solver benchmark in the online documentation. To use the GPU, you can provide the data as a CuArray after using CUDA. Please change the solver to e.g. solver_predef(X,y;solver=:qr) as lsmr+cuda => crash typically. It's worth though, speed increases >100x possible
    • show_progress::Bool (default true) - show progress via ProgressMeter - passed to solver
    • eventfields::Array: (optional, default[:latency]) Array of symbols, representing column names intbl`, which are passed to basisfunction event-wise. First field of array always defines eventonset in samples.

    If a Vector[Pairs] is provided, it has to have one of the following structures: For deconvolution analyses (use Any=>(f,bf) to match all rows of tbl in one basis functions). Assumes data is a continuous EEG stream, either a Vector or a ch x time Matrix

    f1 = @formula(0~1+my_condition)
     [
    @@ -22,20 +22,20 @@
     julia> model = fit(UnfoldModel,[Any=>(f,times)],evts,data_e)

    Timexpanded Univariate Linear

    julia> basisfunction = firbasis(τ=(-1,1),sfreq=10)
     julia> model = fit(UnfoldModel,f,evts,data,basisfunction)
     # or
    -julia> model = fit(UnfoldModel,[Any=>(f,basisfunction],evts,data)
    source
    StatsAPI.modelmatrixFunction
    StatsModels.modelmatrix(uf::UnfoldLinearModelContinuousTime, basisfunction = true)

    Setting the optional second args to false, will return the modelmatrix without the timeexpansion / basisfunction applied.

    source
    StatsAPI.modelmatrixMethod
    modelmatrix(uf::UnfoldLinearModel)

    returns the modelmatrix of the model. Concatenates them, except in the MassUnivariate cases, where a vector of modelmatrices is return

    Compare with modelmatrices which returns a vector of modelmatrices, one per event

    source
    StatsAPI.predictMethod
    function predict(
    +julia> model = fit(UnfoldModel,[Any=>(f,basisfunction],evts,data)
    source
    StatsAPI.modelmatrixFunction
    StatsModels.modelmatrix(uf::UnfoldLinearModelContinuousTime, basisfunction = true)

    Setting the optional second args to false, will return the modelmatrix without the timeexpansion / basisfunction applied.

    source
    StatsAPI.modelmatrixMethod
    modelmatrix(uf::UnfoldLinearModel)

    returns the modelmatrix of the model. Concatenates them, except in the MassUnivariate cases, where a vector of modelmatrices is return

    Compare with modelmatrices which returns a vector of modelmatrices, one per event

    source
    StatsAPI.predictMethod
    function predict(
         uf::UnfoldModel,
         f::Vector{<:FormulaTerm},
         evts::Vector{<:DataFrame};
         overlap::Bool = true,
         kwargs...
    -)

    Returns a predicted ("y_hat = X*b") Array.

    • uf is an <:UnfoldModel
    • f is a (vector of) formulas, typically Unfold.formulas(uf), but formulas can be modified e.g. by effects.
    • evts is a (vector of) events, can be Unfold.events(uf) to return the (possibly continuous-time) predictions of the model. Can be a custom even

    kwargs:

    if overlap = true (default), overlap based on the latency column of evts will be simulated, or in the case of !ContinuousTimeTrait just X*coef is returned.

    if overlap = false, returns predictions without overlap (models with ContinuousTimeTrait (=> with basisfunction / deconvolution) only), via predict_no_overlap

    if keep_basis or exclude_basis is defined, then predict_partial_overlap is called, which allows to selective introduce overlap based on specified (or excluded respective) events/basisfunctions

    epoch_to and epoch_timewindow: calculate (partial) overlap controlled predictions, but returns them at the specified epoch_at event, with the times epoch_timewindow (default is taken from the basisfunction) in samples.

    eventcolumn can be specified as well if different from the default event.

    Hint: all kwargs can be Vector, or if e.g. string types are provided, will be put into a length==1 vector.

    Output

    • If overlap=false, returns a 3D-Array
    • If overlap=true and epoch_to = nothing (default), returns a 2D-array
    • If overlap=true and epoch_to != nothing, returns a 3D array
    source
    StatsModels.modelcolsMethod
    modelcols(term, tbl)
    -

    calculates the actual designmatrix for a timeexpandedterm. Multiple dispatch on StatsModels.modelcols

    source
    Unfold._modelcolsMethod
    _modelcols(forms::Vector,events::Vector)

    A wrapper around StatsModels.modelcols that is only needed for easy multiple dispatch

    source
    Unfold.apply_basisfunctionMethod
    apply_basisfunction(
    +)

    Returns a predicted ("y_hat = X*b") Array.

    • uf is an <:UnfoldModel
    • f is a (vector of) formulas, typically Unfold.formulas(uf), but formulas can be modified e.g. by effects.
    • evts is a (vector of) events, can be Unfold.events(uf) to return the (possibly continuous-time) predictions of the model. Can be a custom even

    kwargs:

    if overlap = true (default), overlap based on the latency column of evts will be simulated, or in the case of !ContinuousTimeTrait just X*coef is returned.

    if overlap = false, returns predictions without overlap (models with ContinuousTimeTrait (=> with basisfunction / deconvolution) only), via predict_no_overlap

    if keep_basis or exclude_basis is defined, then predict_partial_overlap is called, which allows to selective introduce overlap based on specified (or excluded respective) events/basisfunctions

    epoch_to and epoch_timewindow: calculate (partial) overlap controlled predictions, but returns them at the specified epoch_at event, with the times epoch_timewindow (default is taken from the basisfunction) in samples.

    eventcolumn can be specified as well if different from the default event.

    Hint: all kwargs can be Vector, or if e.g. string types are provided, will be put into a length==1 vector.

    Output

    • If overlap=false, returns a 3D-Array
    • If overlap=true and epoch_to = nothing (default), returns a 2D-array
    • If overlap=true and epoch_to != nothing, returns a 3D array
    source
    StatsModels.modelcolsMethod
    modelcols(term, tbl)
    +

    calculates the actual designmatrix for a timeexpandedterm. Multiple dispatch on StatsModels.modelcols

    source
    Unfold._modelcolsMethod
    _modelcols(forms::Vector,events::Vector)

    A wrapper around StatsModels.modelcols that is only needed for easy multiple dispatch

    source
    Unfold.apply_basisfunctionMethod
    apply_basisfunction(
         form,
         basisfunction,
         eventfields,
         eventname
     )
    -

    timeexpand the rhs-term of the formula with the basisfunction

    source
    Unfold.combine_yhat!Method
    combine_yhat(list,single)

    combines single into list, if either list or single contains missing, automatically casts the respective counter-part to allow missings as well

    source
    Unfold.designmatrixMethod
    designmatrix(type, f, tbl; kwargs...)

    call without basis function, continue with basisfunction = nothing

    source
    Unfold.combine_yhat!Method
    combine_yhat(list,single)

    combines single into list, if either list or single contains missing, automatically casts the respective counter-part to allow missings as well

    source
    Unfold.designmatrixMethod
    designmatrix(type, f, tbl; kwargs...)

    call without basis function, continue with basisfunction = nothing

    source
    Unfold.designmatrixMethod
    designmatrix(
         unfoldmodeltype,
         f,
         tbl,
    @@ -44,36 +44,36 @@
         eventname,
         kwargs...
     )
    -

    designmatrix(type, f, tbl; kwargs...) Return a DesignMatrix used to fit the models.

    Arguments

    • type::UnfoldModel
    • f::FormulaTerm: Formula to be used in this designmatrix
    • tbl: Events (usually a data frame) to be modelled
    • basisfunction::BasisFunction: basisfunction to be used in modeling (if specified)
    • contrasts::Dict: (optional) contrast to be applied to formula
    • eventfields::Array: (optional) Array of symbols which are passed to basisfunction event-wise.

    First field of array always defines eventonset in samples. Default is [:latency]

    Examples

    julia>  designmatrix(UnfoldLinearModelContinuousTime,Dict(Any=>(f,basisfunction1),tbl)
    source
    Unfold.designmatrixMethod
    designmatrix(
    +

    designmatrix(type, f, tbl; kwargs...) Return a DesignMatrix used to fit the models.

    Arguments

    • type::UnfoldModel
    • f::FormulaTerm: Formula to be used in this designmatrix
    • tbl: Events (usually a data frame) to be modelled
    • basisfunction::BasisFunction: basisfunction to be used in modeling (if specified)
    • contrasts::Dict: (optional) contrast to be applied to formula
    • eventfields::Array: (optional) Array of symbols which are passed to basisfunction event-wise.

    First field of array always defines eventonset in samples. Default is [:latency]

    Examples

    julia>  designmatrix(UnfoldLinearModelContinuousTime,Dict(Any=>(f,basisfunction1),tbl)
    source
    Unfold.designmatrixMethod
    designmatrix(
         T::Type{<:UnfoldModel},
         design_array::Vector{<:Pair},
         tbl;
         eventcolumn = :event,
         contrasts = Dict{Symbol,Any}(),
    -    kwargs...,

    iteratively calls designmatrix for each event in the design_array, and returns a list of <:AbstractDesignMatrix

    source
    Unfold.designmatrixMethod
    designmatrix(
    +    kwargs...,

    iteratively calls designmatrix for each event in the design_array, and returns a list of <:AbstractDesignMatrix

    source
    Unfold.designmatrixMethod
    designmatrix(
         uf::UnfoldModel,
         tbl;
         eventcolumn = :event,
         contrasts = Dict{Symbol,Any}(),
    -    kwargs...,

    Main function called from fit(UnfoldModel...), generates the designmatrix, returns a list of <:AbstractDesignMatrix

    source
    Unfold.drop_missing_epochsMethod
    [X,y] = drop_missing_epochs(X, y::Array)

    Helper function to remove epochs of y that contain missings. Drops them from both X and y. Often used in combination with Unfold.epoch

    X can be anything that has two dimensions (Matrix, DataFrame etc)

    source
    Unfold.epochMethod
    epoch(data::Array{T,1},evts::DataFrame,τ::Tuple/Vector,sfreq;kwargs...,

    Basic function to epoch data; all input also available as kwargs.

    Additional kwarg: eventtime=:latency, which defines the column in evts that is used to cut the data (in samples). For uneven sample-times we use round()`

    source
    Unfold.equalize_sizeMethod
    equalize_size(X, data)
    -

    Equates the length of data and designmatrix by cutting the shorter one

    The reason we need this is because when generating the designmatrix, we do not know how long the data actually are. We only assume that event-latencies are synchronized with the data

    source
    Unfold.firbasisFunction
    firbasis(τ, sfreq; ...)
    +    kwargs...,

    Main function called from fit(UnfoldModel...), generates the designmatrix, returns a list of <:AbstractDesignMatrix

    source
    Unfold.drop_missing_epochsMethod
    [X,y] = drop_missing_epochs(X, y::Array)

    Helper function to remove epochs of y that contain missings. Drops them from both X and y. Often used in combination with Unfold.epoch

    X can be anything that has two dimensions (Matrix, DataFrame etc)

    source
    Unfold.epochMethod
    epoch(data::Array{T,1},evts::DataFrame,τ::Tuple/Vector,sfreq;kwargs...,

    Basic function to epoch data; all input also available as kwargs.

    Additional kwarg: eventtime=:latency, which defines the column in evts that is used to cut the data (in samples). For uneven sample-times we use round()`

    source
    Unfold.equalize_sizeMethod
    equalize_size(X, data)
    +

    Equates the length of data and designmatrix by cutting the shorter one

    The reason we need this is because when generating the designmatrix, we do not know how long the data actually are. We only assume that event-latencies are synchronized with the data

    source
    Unfold.firbasisFunction
    firbasis(τ, sfreq; ...)
     firbasis(τ, sfreq, name; interpolate, scale_duration)
    -

    Generate a sparse FIR basis around the τ timevector at sampling rate sfreq. This is useful if you cannot make any assumptions on the shape of the event responses. If unrounded events are supplied, they are split between samples. E.g. event-latency = 1.2 will result in a "0.8" and a "0.2" entry.

    Advanced: second input can be duration in samples - careful: times(firbasis) always assumes duration = 1. Therefore, issues with LMM and predict will appear!

    keyword arguments

    interpolate (Bool, default false): if true, interpolates events between samples linearly. This results in predict functions to return a trailling 0scale_duration(Union{Bool,Interpolations-Interpolator}, default false): if true, scales the response by the fit-kwargseventfieldssecond entry. That is, the FIR becomes a stepfunction instead of a impulse response. if Interpolations.interpolator, e.g.Interpolations.Linear()- uses the fit-kwargseventfieldssecond entry to stretch the FIR kernel based onimresize`. This implements Hassall

    Examples

    Generate a FIR basis function from -0.1s to 0.3s at 100Hz

    julia>  f = firbasis([-0.1,0.3],100)

    Evaluate at an event occuring at sample 103.3

    julia>  f(103.3)
    source
    Unfold.firkernelMethod
    firkernel(ev, times; interpolate, scale_duration)
    +

    Generate a sparse FIR basis around the τ timevector at sampling rate sfreq. This is useful if you cannot make any assumptions on the shape of the event responses. If unrounded events are supplied, they are split between samples. E.g. event-latency = 1.2 will result in a "0.8" and a "0.2" entry.

    Advanced: second input can be duration in samples - careful: times(firbasis) always assumes duration = 1. Therefore, issues with LMM and predict will appear!

    keyword arguments

    interpolate (Bool, default false): if true, interpolates events between samples linearly. This results in predict functions to return a trailling 0scale_duration(Union{Bool,Interpolations-Interpolator}, default false): if true, scales the response by the fit-kwargseventfieldssecond entry. That is, the FIR becomes a stepfunction instead of a impulse response. if Interpolations.interpolator, e.g.Interpolations.Linear()- uses the fit-kwargseventfieldssecond entry to stretch the FIR kernel based onimresize`. This implements Hassall

    Examples

    Generate a FIR basis function from -0.1s to 0.3s at 100Hz

    julia>  f = firbasis([-0.1,0.3],100)

    Evaluate at an event occuring at sample 103.3

    julia>  f(103.3)
    source
    Unfold.firkernelMethod
    firkernel(ev, times; interpolate, scale_duration)
     

    Calculate a sparse firbasis

    second input can be duration in samples - careful: times(firbasis) always assumes duration = 1. Therefore, issues with LMM and predict will appear!

    Examples

    julia>  f = firkernel(103.3,range(-0.1,step=0.01,stop=0.31))
    -julia>  f_dur = firkernel([103.3 4],range(-0.1,step=0.01,stop=0.31))
    source
    Unfold.formulasMethod
    formulas(design::Vector{<:Pair})

    returns vector of formulas, no schema has been applied (those formulas never saw the data). Also no timeexpansion has been applied (in the case of timecontinuous models)

    source
    Unfold.get_basis_indicesMethod
    get_basis_indices(uf, basisnames::Vector)

    returns a boolean vector with length spanning all coefficients, which coefficient is defined by basisnames (vector of names)

    source
    Unfold.get_basis_namesMethod
    get_basisnames(model::UnfoldModel)

    Return the basisnames for all predictor terms as a vector.

    The returned vector contains the name of the event type/basis, repeated by their actual coefficient number (after StatsModels.apply_schema / timeexpansion). If a model has more than one event type (e.g. stimulus and fixation), the vectors are concatenated.

    source
    Unfold.hrfbasisMethod
    hrfbasis(TR; parameters, name)
    +julia>  f_dur = firkernel([103.3 4],range(-0.1,step=0.01,stop=0.31))
    source
    Unfold.formulasMethod
    formulas(design::Vector{<:Pair})

    returns vector of formulas, no schema has been applied (those formulas never saw the data). Also no timeexpansion has been applied (in the case of timecontinuous models)

    source
    Unfold.get_basis_indicesMethod
    get_basis_indices(uf, basisnames::Vector)

    returns a boolean vector with length spanning all coefficients, which coefficient is defined by basisnames (vector of names)

    source
    Unfold.get_basis_namesMethod
    get_basisnames(model::UnfoldModel)

    Return the basisnames for all predictor terms as a vector.

    The returned vector contains the name of the event type/basis, repeated by their actual coefficient number (after StatsModels.apply_schema / timeexpansion). If a model has more than one event type (e.g. stimulus and fixation), the vectors are concatenated.

    source
    Unfold.hrfbasisMethod
    hrfbasis(TR; parameters, name)
     

    Generate a Hemodynamic-Response-Functio (HRF) basis with inverse-samplingrate "TR" (=1/FS)

    Optional Parameters p: defaults {seconds} p(1) - delay of response (relative to onset) 6 p(2) - delay of undershoot (relative to onset) 16 p(3) - dispersion of response 1 p(4) - dispersion of undershoot 1 p(5) - ratio of response to undershoot 6 p(6) - onset {seconds} 0 p(7) - length of kernel {seconds} 32

    Examples

    Generate a HRF basis function object with Sampling rate 1/TR. And evaluate it at an event occuring at TR 103.3 with duration of 4.1 TRs

    julia>  f = hrfbasis(2.3)
     julia>  f(103.3,4.1)
    -
    source
    Unfold.hrfkernelMethod
    hrfkernel(e, TR, p)
    -

    Calculate a HRF kernel. Input e can be [onset duration]

    Examples

    julia>  f = hrfkernel(103.3,2.3,[6. 16. 1. 1. 6. 0. 32.])
    source
    Unfold.linearizeMethod
    linearize(x)
    -

    Flatten a 1D array from of a 2D/3D array. Also drops the empty dimension

    source
    Unfold.hrfkernelMethod
    hrfkernel(e, TR, p)
    +

    Calculate a HRF kernel. Input e can be [onset duration]

    Examples

    julia>  f = hrfkernel(103.3,2.3,[6. 16. 1. 1. 6. 0. 32.])
    source
    Unfold.linearizeMethod
    linearize(x)
    +

    Flatten a 1D array from of a 2D/3D array. Also drops the empty dimension

    source
    Unfold.modelmatricesMethod
    modelmatrices(X::AbstractDesignMatrix)
     modelmatrices(X::Vector{<:AbstractDesignMatrix})
    -modelmatrices(modelmatrix::AbstractMatrix)

    Returns the modelmatrices (also called designmatrices) separately for the events. This is similar to StatsModels.modelcols, but merely access the precomputed designmatrix. If the designmatrix needs to be computed, please use modelcols

    Compare to modelmatrix which further concatenates the designmatrices (in the ContinuousTime case).

    source
    Unfold.predict_no_overlapMethod
    predict_no_overlap(, uf, coefs, f, evts)
    -

    in ContinuousTime case (typically the deconvolution model), we return idealized predictions without overlap between events.

    in the Not-ContinuousTime case (typically the MassUnivariate model), we return predictions for each event independently. In that case, the function is unfortunately a missnomer, as overlap cannot be removed from mass-univariate models.

    source
    Unfold.predict_partial_overlapMethod
    predict_partial_overlap(, uf, args; kwargs...)
    -

    Returns predicted time-continuous values, but only for a subset of events. This is achieved by excluding the part of the designmatrix that belongs to the basisfunctions/events you do not want to have in your model.

    Typically called via predict, for configuration, keyword-arguments and usage see there.

    One difference is, that we require the coefs(uf::UnfoldModel) already exctracted.

    Due to the time-continuous nature, running it with a model not containing the ContinuousTimeTrait it will throw an error.

    source
    Unfold.predicttableFunction
    predicttable(model<:UnfoldModel,events=Unfold.events(model),args...;kwargs...)

    Shortcut to call efficiently call (pseudocode) result_to_table(predict(...)).

    Returns a tidy DataFrame with the predicted results. Loops all input to predict, but really only makes sense to use if you specify either:

    overlap = false (the default) or epoch_to = "eventname".

    source
    Unfold.prepareMethod
    prepare(X, data)
    -

    convert and permutedim input to follow the following output:

    Ĥ, Y, X = prepare(X, data)

    where is used to save the beta, Y is the data in format ch x repeat x time (with size(time) = 1 if data is a Matrix), and X.

    • if data is a CuArray, everything is transformed to CuArrays as well (via UnfoldCUDAExt.jl, CUDA needs to be loaded)
    • same datatype between X and data is enforced
    source
    Unfold.prepare_XTXMethod
    prepare_XTX(all)
    -

    instead of solving y = Xb, we solve X'Xb = X'y. This function calculates X'X and instantiates X'y to be used in the solver-step, to facilitate X'y calculations later, X' is also calculated.

    source
    Unfold.prepare_pinvMethod
    prepare_pinv(all)
    -

    calculates pinv of the designmatrix for later use in the solver-step. This is helpful in case you have many chanels

    source
    Unfold.result_to_tableMethod
    result_to_table(model<:UnfoldModel, eff::AbstractArray, events::Vector{<:DataFrame})
    +modelmatrices(modelmatrix::AbstractMatrix)

    Returns the modelmatrices (also called designmatrices) separately for the events. This is similar to StatsModels.modelcols, but merely access the precomputed designmatrix. If the designmatrix needs to be computed, please use modelcols

    Compare to modelmatrix which further concatenates the designmatrices (in the ContinuousTime case).

    source
    Unfold.predict_no_overlapMethod
    predict_no_overlap(, uf, coefs, f, evts)
    +

    in ContinuousTime case (typically the deconvolution model), we return idealized predictions without overlap between events.

    in the Not-ContinuousTime case (typically the MassUnivariate model), we return predictions for each event independently. In that case, the function is unfortunately a missnomer, as overlap cannot be removed from mass-univariate models.

    source
    Unfold.predict_partial_overlapMethod
    predict_partial_overlap(, uf, args; kwargs...)
    +

    Returns predicted time-continuous values, but only for a subset of events. This is achieved by excluding the part of the designmatrix that belongs to the basisfunctions/events you do not want to have in your model.

    Typically called via predict, for configuration, keyword-arguments and usage see there.

    One difference is, that we require the coefs(uf::UnfoldModel) already exctracted.

    Due to the time-continuous nature, running it with a model not containing the ContinuousTimeTrait it will throw an error.

    source
    Unfold.predicttableFunction
    predicttable(model<:UnfoldModel,events=Unfold.events(model),args...;kwargs...)

    Shortcut to call efficiently call (pseudocode) result_to_table(predict(...)).

    Returns a tidy DataFrame with the predicted results. Loops all input to predict, but really only makes sense to use if you specify either:

    overlap = false (the default) or epoch_to = "eventname".

    source
    Unfold.prepareMethod
    prepare(X, data)
    +

    convert and permutedim input to follow the following output:

    Ĥ, Y, X = prepare(X, data)

    where is used to save the beta, Y is the data in format ch x repeat x time (with size(time) = 1 if data is a Matrix), and X.

    • if data is a CuArray, everything is transformed to CuArrays as well (via UnfoldCUDAExt.jl, CUDA needs to be loaded)
    • same datatype between X and data is enforced
    source
    Unfold.prepare_XTXMethod
    prepare_XTX(all)
    +

    instead of solving y = Xb, we solve X'Xb = X'y. This function calculates X'X and instantiates X'y to be used in the solver-step, to facilitate X'y calculations later, X' is also calculated.

    source
    Unfold.prepare_pinvMethod
    prepare_pinv(all)
    +

    calculates pinv of the designmatrix for later use in the solver-step. This is helpful in case you have many chanels

    source
    Unfold.result_to_tableMethod
    result_to_table(model<:UnfoldModel, eff::AbstractArray, events::Vector{<:DataFrame})
     result_to_table(
         eff::AbstractArray,
         events::Vector{<:DataFrame},
    @@ -84,8 +84,8 @@
         events::Vector{<:DataFrame},
         times::Vector,
         eventnames::Vector,
    -)

    Converts an array-result (prediction or coefficient) together with the events, to a tidy dataframe.

    To support multi-event models, we expect everything to be put into Vectors - this should be refactored at some point to be compatible with broadcasting, but it is not right now.

    args

    eff: Contains the array(s) to be converted to a tidy dataframe. Should be 3D, with channel x time x predictor events: A vector of event-dataframes, each need to match size(eff,3) times: A vector of time-vectors, each need to match size(eff,2) eventnames: A vector of eventnames, either symbols or strings, should be a single entry per event

    source
    Unfold.solver_defaultMethod
    solver_default(X, y; kwargs...)
    -

    default solvers.

    • If data is continuous (2D), we solve Xb = y via lsmr
    • If data is epoched (3D) we solve Xb = y via pinv

    We highly recommend to check out solver_predefined for faster options by rather solving X'Xb = X'y via QR, cholesky, pinv or ``-solver. A benchmark is available in the online documentation.

    Please see ?solver_main for keyword arguments of the solver (like stderror, multithreading, show_time, show_progress)

    source
    Unfold.solver_predefinedMethod
    solver_predefined(X, y_in; solver, kwargs...)
    -

    helper function that returns solver with appropriate prepare-pipelines and fitting solver-functions. X is a (typically sparse) designmatrix, y is a 2D or 3D array.

    solver : one of :cg, :pinv, :intern, :qr, :cholesky, :lsmr (default)

    Only lsmr solves Xb = y via an iterative solver and should be more accurate in principle.

    The other predefined-solvers solve X'Xb = X'y which is often computationally much cheaper, and because X'X can be precalculated, it should be cheaper to apply.

    Testing this empirically is somewhat complicated, as depending on your sparsity structure (≈ your design) and the size of your data (sfreq & minutes) the best solver and the reached accuracy can change quite a bit.

    GPU

    All solvers except :lsmr support GPU calculations. For lsmr on the GPU try solver_krylov instead

    source
    Unfold.spdiagm_diagMethod

    Speed improved version of spdiagm, takes a single float value instead of a vector, like a version of spdiagm that takes in a UniformScaling

    e.g.

    sz = 5 ix = [1,3,10] spdiagm_diag(sz,(.-ix.=>1)...)

    source
    Unfold.timeexpand_colsMethod
    timeexpand_cols(basisfunction, bases, ncolsBasis, ncolsX)
    -

    calculates in which rows the individual event-basisfunctions should go in Xdc

    see also timeexpandrows timeexpandvals

    source
    Unfold.timeexpand_rowsMethod
    timeexpand_rows(onsets, bases, shift, ncolsX)
    -

    calculates in which rows the individual event-basisfunctions should go in Xdc

    timeexpandrows timeexpandvals

    source
    Unfold.timesMethod
    times(model<:UnfoldModel)

    returns arrays of time-vectors, one for each basisfunction / parallel-fitted-model (MassUnivarite case)

    source
    Unfold.unfold_apply_schemaMethod

    wrapper to make apply_schema mixed models as extension possible

    Note: type is not necessary here, but for LMM it is for multiple dispatch reasons!

    source
    +)

    Converts an array-result (prediction or coefficient) together with the events, to a tidy dataframe.

    To support multi-event models, we expect everything to be put into Vectors - this should be refactored at some point to be compatible with broadcasting, but it is not right now.

    args

    eff: Contains the array(s) to be converted to a tidy dataframe. Should be 3D, with channel x time x predictor events: A vector of event-dataframes, each need to match size(eff,3) times: A vector of time-vectors, each need to match size(eff,2) eventnames: A vector of eventnames, either symbols or strings, should be a single entry per event

    source
    Unfold.solver_defaultMethod
    solver_default(X, y; kwargs...)
    +

    default solvers.

    • If data is continuous (2D), we solve Xb = y via lsmr
    • If data is epoched (3D) we solve Xb = y via pinv

    We highly recommend to check out solver_predefined for faster options by rather solving X'Xb = X'y via QR, cholesky, pinv or ``-solver. A benchmark is available in the online documentation.

    Please see ?solver_main for keyword arguments of the solver (like stderror, multithreading, show_time, show_progress)

    source
    Unfold.solver_predefinedMethod
    solver_predefined(X, y_in; solver, kwargs...)
    +

    helper function that returns solver with appropriate prepare-pipelines and fitting solver-functions. X is a (typically sparse) designmatrix, y is a 2D or 3D array.

    solver : one of :cg, :pinv, :intern, :qr, :cholesky, :lsmr (default)

    Only lsmr solves Xb = y via an iterative solver and should be more accurate in principle.

    The other predefined-solvers solve X'Xb = X'y which is often computationally much cheaper, and because X'X can be precalculated, it should be cheaper to apply.

    Testing this empirically is somewhat complicated, as depending on your sparsity structure (≈ your design) and the size of your data (sfreq & minutes) the best solver and the reached accuracy can change quite a bit.

    GPU

    All solvers except :lsmr support GPU calculations. For lsmr on the GPU try solver_krylov instead

    source
    Unfold.spdiagm_diagMethod

    Speed improved version of spdiagm, takes a single float value instead of a vector, like a version of spdiagm that takes in a UniformScaling

    e.g.

    sz = 5 ix = [1,3,10] spdiagm_diag(sz,(.-ix.=>1)...)

    source
    Unfold.timeexpand_colsMethod
    timeexpand_cols(basisfunction, bases, ncolsBasis, ncolsX)
    +

    calculates in which rows the individual event-basisfunctions should go in Xdc

    see also timeexpandrows timeexpandvals

    source
    Unfold.timeexpand_rowsMethod
    timeexpand_rows(onsets, bases, shift, ncolsX)
    +

    calculates in which rows the individual event-basisfunctions should go in Xdc

    timeexpandrows timeexpandvals

    source
    Unfold.timesMethod
    times(model<:UnfoldModel)

    returns arrays of time-vectors, one for each basisfunction / parallel-fitted-model (MassUnivarite case)

    source
    Unfold.unfold_apply_schemaMethod

    wrapper to make apply_schema mixed models as extension possible

    Note: type is not necessary here, but for LMM it is for multiple dispatch reasons!

    source
    diff --git a/dev/references/types/index.html b/dev/references/types/index.html index 200ad4cd..c848e0d6 100644 --- a/dev/references/types/index.html +++ b/dev/references/types/index.html @@ -1,2 +1,2 @@ -API: Types · Unfold.jl Timeseries Analysis & Deconvolution
    Unfold.BasisFunctionType

    See FIRBasis for an examples

    a BasisFunction should implement:

    • kernel() # kernel(b::BasisFunction,sample) => returns the designmatrix for that event

    • height() # number of samples in continuous time, NaN if not defined

    • width() # number of coefficient columns (e.g. HRF 1 to 3, FIR=height(),except if interpolate=true )

    • colnames() # unique names of expanded columns

    • times() # vector of times along expanded columns, length = height()

    • name() # name of basisfunction

    • collabel() [default "colname_basis"] # name for coeftable

    • shift_onset() [default 0]

    source
    Unfold.DesignMatrixLinearModelType
    DesignMatrix

    Type that keeps an Array of formulas, designmatrices modelmatrix (Array or Array of Arrays in case of MixedModel) and events-dataframe

    source
    Unfold.FIRBasisType

    Defines a FIRBasisfunction which can be called for each event, defining the time-expanded basis kernel

    mutable struct FIRBasis <: Unfold.BasisFunction
    • times: vector of times along rows of kernel-output (in seconds)

    • name: name of the event, should be the actual eventName in eventcolumn of the dataframes later

    • shift_onset: by how many samples do we need to shift the event onsets? This number is determined by how many 'negative' timepoints the basisfunction defines

    • interpolate: should we linearly interpolate events not on full samples?

    • scale_duration: should we scale kernel to the duration? If yes, with which method

    (tipp: most users would you want to call firbasis, not generate it manually)

    Examples

    julia>  b = FIRBasis(range(0,1,length=10),"basisA",-1)
    source
    Unfold.TimeExpandedTermType

    Object with a term and an applicable BasisFunction and a eventfield that are later passed to the basisfunction.

    struct TimeExpandedTerm{T<:StatsModels.AbstractTerm} <: StatsModels.AbstractTerm
    • term: Term that the basis function is applied to. This is regularly called in other functions to get e.g. term-coefnames and timeexpand those

    • basisfunction: Kernel that determines what should happen to the designmatrix of the term

    • eventfields: Which fields of the event-table should be passed to the basisfunction.Important: The first entry has to be the event-latency in samples!

    Examples

    julia>  b = TimeExpandedTerm(term,kernel,[:latencyTR,:durationTR])
    source
    Unfold.UnfoldLinearModelType

    Concrete type to implement an Mass-Univariate LinearModel. .design contains the formula + times dict .designmatrix contains a DesignMatrix modelfit is a Any container for the model results

    source
    Unfold.UnfoldLinearModelContinuousTimeType

    Concrete type to implement an deconvolution LinearModel. .design contains the formula + times dict .designmatrix contains a DesignMatrix modelfit is a Any container for the model results

    source
    Unfold.UnfoldModelType

    using Base: @deprecate_binding The main abstract model-type of the toolbox. E.g. UnfoldLinearModel is a concrete type of this

    source
    +API: Types · Unfold.jl Timeseries Analysis & Deconvolution
    Unfold.BasisFunctionType

    See FIRBasis for an examples

    a BasisFunction should implement:

    • kernel() # kernel(b::BasisFunction,sample) => returns the designmatrix for that event

    • height() # number of samples in continuous time, NaN if not defined

    • width() # number of coefficient columns (e.g. HRF 1 to 3, FIR=height(),except if interpolate=true )

    • colnames() # unique names of expanded columns

    • times() # vector of times along expanded columns, length = height()

    • name() # name of basisfunction

    • collabel() [default "colname_basis"] # name for coeftable

    • shift_onset() [default 0]

    source
    Unfold.DesignMatrixLinearModelType
    DesignMatrix

    Type that keeps an Array of formulas, designmatrices modelmatrix (Array or Array of Arrays in case of MixedModel) and events-dataframe

    source
    Unfold.FIRBasisType

    Defines a FIRBasisfunction which can be called for each event, defining the time-expanded basis kernel

    mutable struct FIRBasis <: Unfold.BasisFunction
    • times: vector of times along rows of kernel-output (in seconds)

    • name: name of the event, should be the actual eventName in eventcolumn of the dataframes later

    • shift_onset: by how many samples do we need to shift the event onsets? This number is determined by how many 'negative' timepoints the basisfunction defines

    • interpolate: should we linearly interpolate events not on full samples?

    • scale_duration: should we scale kernel to the duration? If yes, with which method

    (tipp: most users would you want to call firbasis, not generate it manually)

    Examples

    julia>  b = FIRBasis(range(0,1,length=10),"basisA",-1)
    source
    Unfold.TimeExpandedTermType

    Object with a term and an applicable BasisFunction and a eventfield that are later passed to the basisfunction.

    struct TimeExpandedTerm{T<:StatsModels.AbstractTerm} <: StatsModels.AbstractTerm
    • term: Term that the basis function is applied to. This is regularly called in other functions to get e.g. term-coefnames and timeexpand those

    • basisfunction: Kernel that determines what should happen to the designmatrix of the term

    • eventfields: Which fields of the event-table should be passed to the basisfunction.Important: The first entry has to be the event-latency in samples!

    Examples

    julia>  b = TimeExpandedTerm(term,kernel,[:latencyTR,:durationTR])
    source
    Unfold.UnfoldLinearModelType

    Concrete type to implement an Mass-Univariate LinearModel. .design contains the formula + times dict .designmatrix contains a DesignMatrix modelfit is a Any container for the model results

    source
    Unfold.UnfoldLinearModelContinuousTimeType

    Concrete type to implement an deconvolution LinearModel. .design contains the formula + times dict .designmatrix contains a DesignMatrix modelfit is a Any container for the model results

    source
    Unfold.UnfoldModelType

    using Base: @deprecate_binding The main abstract model-type of the toolbox. E.g. UnfoldLinearModel is a concrete type of this

    source
    diff --git a/dev/tutorials/lm_mu/index.html b/dev/tutorials/lm_mu/index.html index 33cb36c9..01ea96c9 100644 --- a/dev/tutorials/lm_mu/index.html +++ b/dev/tutorials/lm_mu/index.html @@ -24,4 +24,4 @@ size(data_epochs)
    (1, 121, 2000)
    • τ specifies the epoch size.
    • sfreq - sampling rate, converts τ to samples.
    typeof(data_epochs)
    Array{Union{Missing, Float64}, 3}
    Note

    In julia, missing is supported throughout the ecosystem. Thus, we can have partial trials and they will be incorporated / ignored at the respective functions. Helpful functions are the julia-base disallowmissing and the internal Unfold.drop_missing_epochs functions

    2. Specify a formula

    Define a formula to be applied to each time point (and each channel) relative to the event. condition and continuous are the names of the event-describing columns in evts that we want to use for modelling.

    f = @formula 0 ~ 1 + condition + continuous # note the formulas left side is `0 ~ ` for technical reasons`

    3. Fit a linear model to each time point & channel

    Fit the "UnfoldModel" (the fit syntax is used throughout the Julia ecosystem, with the first element indicating what kind of model to fit)

    m = fit(UnfoldModel, f, evts, data_epochs, times);
    ┌ Warning: Missings in data - we remove any trial from data and designmatrix
     └ @ Unfold ~/work/Unfold.jl/Unfold.jl/src/solver/prepare.jl:19

    Alternative way to call this model is below. This syntax allows you to fit multiple events at once. For example, replacing Any with :fixation =>... will fit this model specifically to the fixation event type.

    m = fit(UnfoldModel, [Any=>(f, times)], evts, data_epochs);
    ┌ Warning: Missings in data - we remove any trial from data and designmatrix
     └ @ Unfold ~/work/Unfold.jl/Unfold.jl/src/solver/prepare.jl:19

    Inspect the fitted model:

    m

    Note these functions to discover the model: design, designmatrix, modelfit and most importantly, coeftable.

    Info
    There are of course further methods, e.g. `coef`, `ranef`, `Unfold.formula`, `modelmatrix` which might be helpful at some point, but not important now.

    Using coeftable, we can get a tidy DataFrames, very useful for your further analysis.

    first(coeftable(m), 6)
    6×7 DataFrame
    Rowchannelcoefnameestimateeventnamegroupstderrortime
    Int64StringFloat64DataTypeNothingNothingFloat64
    11(Intercept)0.923324Any-0.4
    21(Intercept)0.978652Any-0.39
    31(Intercept)1.11101Any-0.38
    41(Intercept)1.33857Any-0.37
    51(Intercept)1.6288Any-0.36
    61(Intercept)1.93554Any-0.35

    4. Visualize the results

    Tidy DataFrames are easy to visualize using e.g. AlgebraOfGraphics.jl. Function plot_erp from UnfoldMakiemakes it even easier.

    results = coeftable(m)
    -plot_erp(results)
    Example block output

    As you can see, there is a lot going on, even in the baseline period! This is because the signal was simulated with overlapping events. In the next tutorial you will learn how to fix this.

    +plot_erp(results)Example block output

    As you can see, there is a lot going on, even in the baseline period! This is because the signal was simulated with overlapping events. In the next tutorial you will learn how to fix this.

    diff --git a/dev/tutorials/lm_overlap/index.html b/dev/tutorials/lm_overlap/index.html index 308f252f..7a8abc1a 100644 --- a/dev/tutorials/lm_overlap/index.html +++ b/dev/tutorials/lm_overlap/index.html @@ -5,4 +5,4 @@ using DataFrames data, evts = UnfoldSim.predef_eeg()

    Overlap Correction

    For an overlap correction analysis we will do one additional step: define a temporal basisfunction. The steps are as following:

    1. specify a temporal basisfunction
    2. specify a formula
    3. fit a linear model for each channel (one for all timepoints!)
    4. visualize the results.

    Timeexpanded / Deconvolved ModelFit

    1. specify a temporal basisfunction

    By default, we would want to use a FIR basisfunction. See Basis Functions for more details.

    basisfunction = firbasis(τ=(-0.4,.8),sfreq=100)

    2. specify a formula

    We specify the same formula as before

    f  = @formula 0~1+condition+continuous

    3. fit the linear model

    The formula and basisfunction is not enough on their own. We also need to specify which event and which formula matches - this is important in cases where there are multiple events with different formulas

    bf_vec = [Any=>(f,basisfunction)]
    Note

    The Any means to use all rows in evts. In case you have multiple events, you'd want to specify multiple basisfunctions e.g. bfDict = ["stimulus"=>(f1,basisfunction1), "response"=>(f2,basisfunction2)] You likely have to specify a further argument to fit: eventcolumn="type" with type being the column in evts that codes for the event (stimulus / response in this case)

    Now we are ready to fit a UnfoldLinearModel. Not that instead of times as in the mass-univariate case, we have to provide the BasisFunction type now.

    m = fit(UnfoldModel,bf_vec,evts,data);

    4. Visualize the model

    Similarly to the previous tutorial, we can visualize the model

    results = coeftable(m)
    -plot_erp(results)
    Example block output

    Cool! All overlapping activity has been removed and we recovered the simulated underlying signal.

    +plot_erp(results)Example block output

    Cool! All overlapping activity has been removed and we recovered the simulated underlying signal.

    diff --git a/dev/tutorials/lmm_mu/index.html b/dev/tutorials/lmm_mu/index.html index 198eee4f..17185287 100644 --- a/dev/tutorials/lmm_mu/index.html +++ b/dev/tutorials/lmm_mu/index.html @@ -7,7 +7,7 @@ using CategoricalArrays
    Important

    You have to run using MixedModels before or after loading Unfold to activate the MixedModels abilities!

    This notebook is similar to the Mass Univariate Linear Models (no overlap correction) tutorial, but fits mass-univariate mixed models - that is, one model over all subjects, instead of one model per subject. This allows to include item effects, for example.

    Mass Univariate Mixed Models

    Again we have 4 steps:

    1. Split data into epochs
    2. Specify a formula
    3. Fit a linear model to each time point & channel
    4. Visualize the results.

    1. Epoching

    data, evts = UnfoldSim.predef_eeg(10; return_epoched = true) # simulate 10 subjects
     data = reshape(data, 1, size(data, 1), :) # concatenate the data into a long EEG dataset
     times = range(0, length = size(data, 2), step = 1 / 100)
    -transform!(evts, :subject => categorical => :subject); # :subject must be categorical, otherwise MixedModels.jl complains

    The events dataFrame has an additional column (besides being much taller): subject

    first(evts, 6)
    6×5 DataFrame
    Rowsubjectitemcontinuousconditionlatency
    Cat…StringFloat64StringInt64
    1S01I0382.77778face62
    2S01I0671.66667car132
    3S01I032-3.88889face196
    4S01I013-2.77778face249
    5S01I0582.77778face303
    6S01I094-1.66667face366

    2. Formula specification

    We define the formula. Importantly, we need to specify a random effect. We use zerocorr to speed up the calculation.

    f = @formula 0 ~ 1 + condition * continuous + zerocorr(1 + condition * continuous | subject);

    3. Model fitting

    We can now run the LinearMixedModel at each time point.

    m = fit(UnfoldModel, f, evts, data, times)
    
    Progress:   4%|█▉                                       |  ETA: 0:00:13
    +transform!(evts, :subject => categorical => :subject); # :subject must be categorical, otherwise MixedModels.jl complains

    The events dataFrame has an additional column (besides being much taller): subject

    first(evts, 6)
    6×5 DataFrame
    Rowsubjectitemcontinuousconditionlatency
    Cat…StringFloat64StringInt64
    1S01I0382.77778face62
    2S01I0671.66667car132
    3S01I032-3.88889face196
    4S01I013-2.77778face249
    5S01I0582.77778face303
    6S01I094-1.66667face366

    2. Formula specification

    We define the formula. Importantly, we need to specify a random effect. We use zerocorr to speed up the calculation.

    f = @formula 0 ~ 1 + condition * continuous + zerocorr(1 + condition * continuous | subject);

    3. Model fitting

    We can now run the LinearMixedModel at each time point.

    m = fit(UnfoldModel, f, evts, data, times)
    
    Progress:   4%|█▉                                       |  ETA: 0:00:12
       channel:  1
       time:     2
    
     
    @@ -17,4 +17,4 @@
     
     res_fixef = results[isnothing.(results.group), :]
     plot_erp(res_fixef)
    Example block output

    And now comes the random effect:

    res_ranef = results[results.group .== :subject, :]
    -plot_erp(res_ranef)
    Example block output

    Statistics

    Check out the LMM p-value tutorial

    +plot_erp(res_ranef)Example block output

    Statistics

    Check out the LMM p-value tutorial

    diff --git a/dev/tutorials/lmm_overlap/index.html b/dev/tutorials/lmm_overlap/index.html index a98c52be..41f5b181 100644 --- a/dev/tutorials/lmm_overlap/index.html +++ b/dev/tutorials/lmm_overlap/index.html @@ -25,4 +25,4 @@ m = fit(UnfoldModel, bfDict, evts, dat) results = coeftable(m) -first(results, 6)
    6×7 DataFrame
    Rowchannelcoefnameestimateeventnamegroupstderrortime
    Int64StringFloat64Union…Union…NothingFloat64
    11(Intercept)0.0728554Any-0.4
    21(Intercept)0.0941947Any-0.35
    31(Intercept)0.0694752Any-0.3
    41(Intercept)0.00866136Any-0.25
    51(Intercept)-0.0422579Any-0.2
    61(Intercept)-0.0524441Any-0.15

    4. Visualize results

    plot_erp(results; mapping=(; col = :group))
    Example block output +first(results, 6)
    6×7 DataFrame
    Rowchannelcoefnameestimateeventnamegroupstderrortime
    Int64StringFloat64Union…Union…NothingFloat64
    11(Intercept)0.0728554Any-0.4
    21(Intercept)0.0941947Any-0.35
    31(Intercept)0.0694752Any-0.3
    41(Intercept)0.00866136Any-0.25
    51(Intercept)-0.0422579Any-0.2
    61(Intercept)-0.0524441Any-0.15

    4. Visualize results

    plot_erp(results; mapping=(; col = :group))
    Example block output