From 1ea1e1f3555816f470e671efb498faa63276b291 Mon Sep 17 00:00:00 2001 From: yuliasidi Date: Fri, 5 Jan 2024 09:34:04 -0500 Subject: [PATCH 1/5] initial --- vignettes/meta_forestly.Rmd | 82 +++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 vignettes/meta_forestly.Rmd diff --git a/vignettes/meta_forestly.Rmd b/vignettes/meta_forestly.Rmd new file mode 100644 index 0000000..8aa38f0 --- /dev/null +++ b/vignettes/meta_forestly.Rmd @@ -0,0 +1,82 @@ +--- +title: "Closer look at `meta_forestly()`" +output: + rmarkdown::html_document: + self_contained: no + number_sections: yes + code_folding: hide +vignette: | + %\VignetteIndexEntry{Controlling Layout} + %\VignetteEncoding{UTF-8} + %\VignetteEngine{knitr::rmarkdown} +editor_options: + chunk_output_type: console +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + message = FALSE, + warning = FALSE, + eval = TRUE, + echo = TRUE +) +``` + +```{r} +library(forestly) +library(metalite) +``` + +# Overview + +`meta_forestly()` is the first step in the Interactive Forest Plot generation workflow and is a wrapper of several functions from [metalite](https://merck.github.io/metalite/). In essence, it defines a metadata including adam datesets, population, observations and parameters to be used for a forest plot. Since the requirement for the parameters of interest might differ from deliverable to deliverable, `parameter_term` argument in `meta_forestly` includes several options as outlined in this [vignette](https://merck.github.io/forestly/articles/forestly.html#define-metadata) + +# `parameter_term` examples + +Prior to turning to the examples, just a reminder that the treatment group variable in the adam datasets should be set as a factor, otherwise a warning will be generated: +```{r} +forestly_adsl$TRTA <- factor( + forestly_adsl$TRT01A, + levels = c("Xanomeline Low Dose", "Placebo"), + labels = c("Low Dose", "Placebo") + ) + +forestly_adae$TRTA <- factor( + forestly_adae$TRTA, + levels = c("Xanomeline Low Dose", "Placebo"), + labels = c("Low Dose", "Placebo") + ) +``` + + +If the deliverable requires a forest plot of any adverse events and serious adverse events, the following code could be used: + +```{r} +meta_forestly( + dataset_adsl = forestly_adsl, + dataset_adae = forestly_adae, + population_term = "apat", + observation_term = "wk12", + parameter_term = "any;ser" +) |> + prepare_ae_forestly() |> + format_ae_forestly() |> + ae_forestly() +``` + +If, however, serious drug-related adverse events need to be plotted as well, then this could be done using: + +```{r} +meta_forestly( + dataset_adsl = forestly_adsl, + dataset_adae = forestly_adae, + population_term = "apat", + observation_term = "wk12", + parameter_term = "any;ser;ser0rel" +) |> + prepare_ae_forestly() |> + format_ae_forestly() |> + ae_forestly() +``` From f2ce71bce05ef6d3bc1bf6d2f7212cff9352d03d Mon Sep 17 00:00:00 2001 From: yuliasidi Date: Fri, 5 Jan 2024 10:28:13 -0500 Subject: [PATCH 2/5] ATOXGRN varaible added and AEACN populated to be used in examples for `meta_forestly()` vignette --- data/forestly_adae.rda | Bin 18256 -> 27617 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/forestly_adae.rda b/data/forestly_adae.rda index d9fb5da91170392002baf81970803ebe0af651fe..70a1715f4100d643bd5cde1577a0376cfeb311f1 100644 GIT binary patch literal 27617 zcmbrlXH=74@G$sOP^wfZ3KE(kf`Ee3iGVZ_5Rl$PL_~U#P9jKep(q_flOnyhK$I4G zC<4+60YZlmAc2su{NJ;C&hDOfKka;)GtWG8?=v&^&fK~40Ai{C`(JQ#uY)FCaKH$V zYh+fKGn=uPGdrtYuJ$O5Db}>|yj1C?R%v@jmP0%t?ru|6^-=)I7~x@AVq7V+f2T&yfdSDjzU2M&dP0n$*XXsS(>Ceg-AOn9 z9WEgDnV!N)&m2?(Y(n$NLp&Nx>Nyk{HK=!cgLgtf1|FS z%?a|aeY+Xejq8$sRD95Jv=aW?_R5&6@>X5)v$?jWmg$qpkBj{SZCb{4OF`2jAMWos z){BWJUGa99RSuPOwY{45ykfpvSH^yWTai(Q@a3*?@V$vmjkC$nmU~>s@Nv zh48DihPuxQfB#8nwAJ+&+1pGt#S2P&?I_X-X=wW(C^_QxA*;1?xIvG zehYTA))X1(DZhF-XDOcE0BdNFC|VcU(ByKuuC?3nx9Ep`{xOY~NmxOu-sk@?qHMY< z@rDeJ_Lc7@jywfSCSu+oU|Qwx?+Iw`yw_(KpKSU!;gzZ zj1wuvUaOm1u}{SCKchU=(PTLjxl>llUt}b)6;o2|mM*|&^n}&XOO{!yB2m-a+FUrj zp-xn4G&Ch~u9Z+U(io~$u6>HT@#CC+|m#jPjkB9sLJbjYYIHMYuLJ zQBw;#s4m1=(P-wFs5yh9m8ePQm8DepobOk~eCx`R z9?%luFRK+4gbEGF%hN2MjPq4my!afo{z{#8nfg(*x0(rD<)hGsI>CluO2l6~Un|Ln1&i(`@&ms*N(kBX>VS?$B3sm8{v(A#9)z0^Nk zP`|xNz0QHpnDrgKpyMp1?Ja2#K?7)Y(7EMuGM%+_B;}tp(-mm;wDZ$(Qrdm%p1?IV z>*s!EPl;nv4p}n=(rBH2x6=G*jiI12;}g-nM@q!L*$S2PphppD)^)>%*(1#jbsNKD;9?e&#|q zXAXgporNRIj@BN#aa4ls!Tt~kY%t@w^*HY1oL@2Fr!%N2=Te8XZd9$dM`hI3bQJ!0 z&&oK!5vO-o+~vFpM=D6Qz*p}Eh<$FCbp`~L12fhk9xFX)l(B-+c6u+?__>1j@QTQ- zpOS6NeHxOh|Ac9pO%=H%Wm@thiwREN0zC35A4*5kq`PD?!}OnxO8EFIAVe9MwvS56 zJWJ=i(k0;el=Xud*jqZ@1_d8m)oJvbZ6Z@72K$7?BdfB(-YgIh9Oqec(I(n)t&m6p z3&bf3#YM8-ki$mpNJ@l(Nc5<8B3uuClm}arAM5jt(0xJNweUY+x?e9aaJ_%6(t|j?#XCHnBlbIQa<$rMLj83c(e7mcv?H! zBbgzRo=R8t;bxXaKxro9+aTU`2vZPK&%Zbu|RfNO3^$$ki}h7y<`6cB+H=Ng*( zyC5b8p;7R|DIgrD`11i~m+j{iu{Nl!_zzMl#Y2luaPi98|E>E%1)bOQe`p!r= zbgU6Bx5J`1l0=euM| zd;9~)FZq96F^{y$Lm?$wq_-^wQ4Tu&JA8U&i%gKp0;Rq)^I zdB_9r9f+{8zp1Ab`(r01+qp%7289KWMgh!O$U@Ufm#*(`f~Us2QrslJAr8`e(7v(* zhi*dVn>f~PG?GqWgY~{^eZZnUI|R&t$`T47&_x`U{Ez5oPLXK{G*(=8oZyl2+VAMP z1|#tP{VLstLqcTsOTVYNo3zawR=-vv?_8(D~5JEMj^{^P~6Thxt4un~+>u4Y%r+9%F{#^Rk;k(e-`!T{Bm zll<6<#ii}^KjMsNtefL%^J^8qBW7Jrp(}PW{083)g+1Zk?BNvQ_ zlwe5vUhycbQiui3#YXrkj0Gtwkb_kTlDbNS`;rQ+MvM@~t69@cqObtXHzwdUf=-I2 z!ddo*hr4d1e}e3K(>bQMHxPPI!LF3c(S^(_-9{|0^`JE*dvNuS37^B<(gnLY?si$A z_1pGIbTs6zX1AvsA6aIuedFN1(p`Oc9{TUE!|JZ*eMs18ydJFAV!(!;$*EFk>0D|B zI3hg)&NgC4VY71l6mol3X_ghF!w_y+AG*V`)CYBbF544C?qG9Ln6||dC@(^^g#A1L zLzjU7n*oK(Y+6~ z-#3vnk6O>8)l-_GL0dmpApZ!$uGzd^#Xh{pbD6{%Ed-4?WWC?dVa5s2jzl;=dC&{b z>RBBy;S1`!S`5`X$A*ODW;X;6cxh*Psl#RUYTW4BoQ`IO&<$o8vy?77W zKWJzaBE>7knebTmDJ+d|m59DfrPu3}jjQu;Kl&5FH1NZ&sjT$n)P3IJnanJIaxo9E zLCx>zhps5k3M-{5ZUyp`7Iou^P!W`tke1@@*E_D-%ct}H z;C*qF6I>uzIz)`DfVBB1-}f8M3-d6*de|aiY)_GX_PzqJLr=Z`EW6s_ z@>#cd)=L3++*k4P1fg+n(Ch)48T3pg$e)r3255^1Md1=0V3*B7i_-%Rb)I$?=USZh zX_@0nYgoOj+(TTFbR-z3C-IVWii30OAkz3r?u3c8nb)gH2y|LUjnXi_zB9S?QnCBs zOIQDV)`3tz!@3Mvz)1s!JQ2{9S|v3v+YuN=Z9ry8_{(P9t|-Qn55)C)5>Xbq5VGKR zc~;*YB`yzzy=PGemEjASJjsC+sye}#HHvJB&ZxAM9|#Q4SXZG_26R(JH_b|k7##6h z4;={>@_k*fNO(#B=v?g#k0LfFa9Y4P@)=bOL`?aN)Q2Y)_2UNsFZ=Oltwh_1p*SU5 zKMJ%U4;Cao1J6v+#AEd&FU0A=H~5xqKBhr+b6>ayIYts~=nCDVcM*3$^4b`l2)s@K zcAoRdqwO99;cT->Xy+syn4Lo;opGL$(r(~{i#jPd{cmxH3x-0wj;!!NB%sb6$ms)Z z5mjja9ti8&thU><$$YV|2Mz1?0$8CXdX9okYai)E{+OT z6!X0dX|~|J;Xia1g^V=S?fizq)DbSJ_-q&lH{&jYKVbC9om2qe#RNak<$?a#8HimQ zv&Ls^P1YZqXUIs1E!xU2jMyE?Ab?i(@HVry+a+p4%q4cy< z3B>AEj|E-i=yJ~5AEtnZChX4p24*DBpU@$QS`qN!F4A4qs*?9|%NiG7mJ+D_TYws_ zN^V%3tMc~jCB(0ImbC+J>;WAo57Fx=NG|;VWnIN8uIU$FOprecwrt@<={>g>@5|8KtQO?%+ zb(h}_z9pf{w?bhP!5-EO39y_)GPd1}0DsYsNdnrP8D}%S+FA}xJV;R-?FuFf#>Igy z)TrU1eC=^tLyr^upxHM3;AGTJ*FKcQ$`0AOLvB3)@Jkn8%6fUV;-vdW@Q5>i0UXfG z{-l>AREWdPK|h!}pqA2F&tQjnJtLTA#?+M;A)*UUb~qA*+-&<1RK!yJ+G5HlJVru# zxw&iKO@pwQBJo}h3J1JsS?l3X11pj56iRlUVA!-;Qig^{FeS_1TP{<>eX~DF&-jw* zTj7yYXc#M``O3qGk4*sZq;Na*lE#uv&~nO1w^Gi5K;GHfntj};SS)m*YgLjohiJdE zBuUfyGtI*u|8zDWst|57f{`~SqitUH@ALxSyYjCAo}q^hb_-1b@Jzn*(vvVe?lLl*Jhjm6oTm|h`}RyGEzWlV z%1{t{>n`_{a14f;+rJgqM-z!Au5#R2V(mlgrSP6dja+WVR@=2GoyW4sL4^o%12mJt zAk2DNjsuQ_O}mPZ=R+)Q?V{uqmbD|)QEZK!ov6`e)9?n zHZX_?rc=8ycxTTxdTboljvk73ozxK7kYOH9-%#56uu;Ld>JP_Hy36Cp`4;2-UCS+W zwr(t1_#xbXDwfbR{vLAR_&OdU?ic)ohac9-7Vo6XdGAIQud{9!fnVK*0Uht#DVyBc z2v7%d7q}_vLo|32(pZ}Vb5Py%)e;IX`iUtelQ});PwYp1xEv-|7o7r+tC&~LNh&jw z0|Afk@VJI2r9shclxZI~aRW-8=+o}KlODl1ao;Y&Ly?0>mvF4(1~9YLZP@jjU|(g9 z7N_hb#1s@{Y59SWN9oJtd0tHE4~{eSmjS>x)QjdZfP`)>YKMIObEiNSb)^J3>a?y+ z{QM*Yx%o6`G0=fKsN{-?0esO| z1nJ50p+`S98sYHoqpO&Z&4WKC65OM-F+>VMwxYSq zx(XcuoOggrg!F6WHi~PY8A(wkG?5GXr%Gg6AEe!{_yU#I<*l%Mj^qA(P=uoF{FnQ( z-M;QK3h3WN!-bTQp}E8~=1G#`M` zG$A-Dbo2~b(!IW=N)Mf*MXUCMg9PHLudtnM$)LY90teM4+3qsgh13V{ zJH9mo02s>zDdwY#)?5N7Epq2^iU2p2C^uBvza4kv?%zXzTd)$OgE0svUc25N8HmdCFJPE`PTvjFjS*6K}ya~@Kln{Pvmxhs5zOm za=+lieAXLF>8Nrho;*TzM%ZMqH;X!qyy_VuFfCt8p7~+hvP32%R!~Sl&v1`0NE2Dx z@8j6E9ghf#jmtSicmI}O=c?ydh)o5M&tJ4c6~NH$7IZ7nItq!%23p4~q>rwz3RG}g zt)0$~(-3jwKWGzm@Og*i+EK{RGbP4DkF%%IS=HJ^mbIXJ}{irsXK^6y^OK zxZvj%9McK=GLbK(lxE0%rU1@q1vsEuI)9HHfW>S+5XJp2R((*Uh7k`I^-ePANL_~8 z20nBudDybv5_b4S)Jh5J-Vr_I_!<**Mj4A=n~B(R`*}r_{ z0DO8Eq;w-Ps{{kgdP*~;;inW1ZaQP*%f@hlrd8EU_&`ec9bx`w%LCiJKnm1;HDkU4 znTM{KgGT)5dxQbc7(Ermg%FwNEVzORI3(axN$75V+8$;6IP!S2n+-P zMUZ%nREHgchJFY5d-x^h-w_h1ii(2jDI-_2cO%?$N9Q?n&~c0yvg8eygf!;&my9o4 zx)Q;oT~Hkq^yCm3{REWCs;+x!MRSBPBw*Aw%{;=+@bZ|;JH@(@qzA{?~vuP((Y6=3v!^owZxHCm9BSDAN-yGH~B7q z;oo9PKEw$ZT+U})>eZi<-t;RXF~(~kMG@&s(F2UYBJL0fVDP;t`#26}$H*bH8nPmZ z-?cbXl%QQ;kl+qZSh{QPTdp3>CYvZ(lKS$c@?~Hc;p{ef;U-vVT``jrwDDq1yU%0- zV`#k^RvUh3{-N#2<4}eDAiR{M6gB?j>Z6o~$GhxKWgn?lXpAnRFn@;!yeVkSnf%)uSWrkQ~%VDOey&&wtRT=hgDIYsi9k^gu}^JlbhP-#^@VF)m2=&Zug<`_=)n{I=ODb4GY?0@LQhZQMfaMa` z9o;kMnAcU@U{$FcMQ~LnzzA6qb%t^&Trqr0#uLlAc-TRa`U-L*{v3cpwMw@LYzt=N}E7>zxJ-E`Xc(o?Pie4Ryqe z&mINquKawcNTx5MH&ZxvuI}U+UC*M2bN$$%((fSD3p-~+YtEM4BJsC+)6%{vUPehc zwp6A#AP))6oa8Fjb=^nRYG*m8XWut54|)Tz7z5DrY`EU#t<)u($Tzt>V6pob&Vvh= zx&H__cVPHx?O8_tKMkTn=WpRHPe6*C6Ipd-a(v~KzvJoV8Q(uV2Xj9HXq-AnLl`67d7wZ*!upbiW|vjW zW4GZJ2dwOsB|*`AGkV}BnPM3TiC}V2%(1`6?OfouF3cD5@WYbw1t@nk?zsC(v+Ee- zKbYVgfFzo-3AhXzQ~+E!$L>p_b&r)~fgH9N`cPmYd^JPj)maZ*NQtJo(A_4RPY#Yo z*`M8i9Qj7fTd8W~@`6kQ7wTHv>}-)DipAU$tZf>~P&Fyc`)#6x|S|!red3;^G$bOS41_ur?FLQwFc+|bc6!kDpW^(jU z223oXw}RcPhun204R7v7dWhG#Uw|m#HnGghDJ$MV*8NG5XgseCoGrE$FW*+3D3?>| z9`t7f*>OhV@&;IDkk#081%M7bnhOuXN#br{L(*@;(g<{zF+JU`t=ATUPQn1O7CFhm`#9ES(a0kD2W^NdK6>}nvRS<bTxsw)flc@89-!$mWtE))RkCWKsgcFK8o*fpe)y_6SHbFAc@j{#OGo}ilW%hR2 zOJ_+rx67o^s#t=&Rvd$>C_?HWR%9OcXVZN!aFssX&rU0Vt1hU?G=QEB-y2RK@NiBF z1cTR7n<(5gA`Su~S^;27x}RHcYXh))TCjBKV=xZ`0^zE>E*ir-tdS%^>VcC%q2saFg9&${isYy8F@B=qz2zIuZ4?!&yp;DRF#pQ=jS9@9^$%>t_NfGBDyTFTV!%g!G&oxQ{S~!hm6i}czN$$0v-_N>stdPGq}^7$y3`e=b*lbm1r-S{XskI z+&ajy6`#uqgckrkze&F ztPlbpD2G0k<=0`{o7^6yBew(*K%eDvo*iohv zI5N}tCEB765T;3g7HGFP}46F`TxZApZ`yiK$Q1Xum=F@1WgF4!{@`v~ZtBoUTMh z`a2e0#jQP;tF_*p$_nj#3;wZ5VYVaiow0g`W%TkYEFTjHzt79V#B^+$AV~Z=w@_Hw zIwN`Cf`2)v^*6j3addsLnz=8j$m$D5Cj&ml_{r*_l@O21NSDn^6xLr#od@ZmQo2ZX zz6|b!hb@=_dvSc?j0aRo(7ZEcs{}4la6(GIU!8mBlDPxnU4w-g!$51?ehdEWMcp#* z8u8z>D7UMdF6KnL1u6im_GJDU_(Z7_P?fOyMEc6lEU?}|4Esdw%?VHJ@f%Rr+1^kR z*Eq>m7DRutGpVWHNPXVT}9S z5!E8yG2+&;gGFqKHd2~-5h7mJ{HFTe_v%ZKE9`2w+ka;Fc0>|H-VDBzk)50)`D-m1 z$^b6O5_mNeeJQKcJf*-=IiS+}QZp6ybXIEoYLn<(q%OfmFnCuKfI7K>={#pmc=&q&vd*D))*5vQf|=cRt^1fbu% zC9cqQP)6M|*KYR!U>9TXXR!X+xfzYXKYn$+oUgZF;LJ+lV_nt35Nn2wvjXao+8zce z{mCG9VKw2jfS*Ij-)N?V--K~NLmNe0hD7a>-ZrZ4W}#J5&a-PbhD8MpMR#I(Hs{XP z##QY-K2;q}1c|SShSWDS`hRZ9i)-g|;NRJ;CJikM zNwJd#5T5=ttGjT?8ZIC1Q*Qx~l82Ew0!NtNr zm6KDefjv^Hjleqa_I8c*EUfg4$9I#HX z@cH9*P?Pi1wDR=uziixwZ2cr~VcsDjkPmKcC@1H7hx^w245`UDtaD81^Nhw!9#F1B zQCQBycOS(dQ54?J20B9~Wq_XOqwr5Ti zA8k&Pj28`O-dO{8{e|oAWHIWbTlIC5-@ygwo*2D&0sU{lkJ9R`n=Af2Z^=8wKT8CW zqxy*@ag;c6stmYWxP@%+gi@-$d(KDw!6SZZEB>6yOW01`M(3%zZ=OzDp{9v#xF*w@ z?xBlrYcr5quPS=>!T`Q_{mdwGEay*WbMeyy+v2)VrPu{Ik^S3-*J$0#5g8=c7mO^z z&EJft06uvy^L3pX?b|y3B4B>+{?Z)8@8DtL%vuI;Kiq_xlYq3OZgWD4d!K@z{&EAtZUB7Yu)rTYCos3fkd8x+# zKXY++%#!lF;cth}GYY*J>m6TTUmJx_3;=A;yMtcIG9|g~Kd|7jQAvGRT)?#RI}Puo znuxIdeV(R3h}w-#is{hcCT-Tu(w5^Id1V&m_BY%iyg$tFqs7RMs%B3YI!W|B6I;J8 z;reVQX={~!ps@p=EQmJ)X7IeSeQ|>z@z9dxM%Ub`Jsbmkw^n%udxTB>&sJiy3Benr z9+{J)EAml3Cw!-To9*hz)XkGocszWXirp zrBqhJ)y=h;mt^fX!<2T|r3|5f>P|D%K+xag@7BH0bGp5osErD|O7VGD)JfB$?V7hIspY>3BT@N5 z#5~|#WK)?rFC~33pUCo_L?G;_hAI^O`9+kPA(k36{V7Oh(`%z0@W3}cPBAstHT(}@ zzDyb+aUa-a*fEFw$L*cpjT#fLmPmVKGNVEt!X&?g2(Zpb2f% zHdRyL<6rD-BWGXw+F3u%N4sjVVirJP%gEU!DC~Q6PQ^ONh3;z>O*E_?%n$3V*y=DD^z< z7C|FIwt#|3DPOc@LNKwk=bZm`e@XlQc`qju`n_9BnQWRM7@d4k3LJGR)*Nke?l7Wy ztunl0>^4*YoZDh-;SGM*zPPh{!fUxK&rD(OD#uFSHgZ-cti|b_7u-3u1pFL+D#b52 z)j>k}0TYXJ@r%Tz)#@35cjgI+tPJ<{9+Mtym=NyLTuoefE(+2(p>VT~VW%*E+TByT z?^20E@la#BLq0(GpdvgfI7hK!9dByu{pF`ui{M34`L+2)pY~^rfMh+tL-@Pr53&|D z-i@8dwr|LMb}X@eU#6N3FM)4<`HBqgE=6Gm5kFscRDv`38$oC{D>L%oiJdpqqU z*Pe*7rwA!6L@_g3sNLWjV+sqm*ok>0Uq*%%RrTKU_C@NzP-X#nsct%?*W}3d%5W@A z?W-C=E*e==s(}sJyDj*UraRT&#GZ2p-sfzThumWbHrDv_Q{|E*SfbdTgZjj+v`Z5m z+VAvOxC-3ozEUYqavic*kve+`P*NV=u3m6d#XGzw5}#Ul?E5rDCTi4R_MvKXWe3mY ztv30=udUV}?<@*#;(5bY`l>&p4^my;eD5QZ9g}hIqg%9_81n?;yu12nity2#$U+Uq zEUNsy1=46<=T6S3GWtAtX8$JgN3J5LjvMU>BDiU2G24a6-79$Xd(&OQ`6eR5Pd!aA zu8%X;N#-x=2{%5`TW5?i|Jpz^EP@`1Y-x9MQk4xK;tpI?`t;E2K{Wjr_TqomZ-goD zOi@NGM>f8xUxJDg1+(#%`8tI@8OJTMW|=e_kojT^OTFv%uKTIMeeOFuoo8gbHMT@; zi5uLZpG^FEh2hh-N zqD*&d*u(cgxyTkEm#1iSb9<8Y^@bVL|8(AvJ=;1L(B#`5IWx|Ox@V%ic<5u$Wy0YW z&Jej9x{xjP?xohq?mc0D(H1MabRdO!eEZ8cp*rF45zVa*ACjG}q7llH_^t*lMGMkk*SB71 z83AM{}S| zu2c7`{5umF>U$x+J55uk<}VGDid;ofZTicEk35!;il2Ps13Mmso%|(s;yd0W=EG-Y z@8Ve@2Or7=;oGH5;sdM`KP)yASsPD!g(VYUR>xz>y6Psup1%gD+x{fUpPTLt+xiN5 zusF;sx?wax-W&$wqunigC#vL6Yp;r-lz1rr1Us#OmSWH|Wo^Txq2K{)0J#A@+^D1p zc^K*Zz}3gru^#OpI4|0p=G{F?FnW8TD7{#mXth^yW9sm$RVLG%>FraUq{|xz#h-Az z4YmR~#>1BGdY(TmVGkZoOVui9zbO_S(CF!?k#B!H1Czs~dH+m2t21d0l1sBt-}%{$m*16!JuthU z`|S4EtekUJ88tgfhXlJ)__0Y2y|zq#sL8`2e% z{p%WfLU+fPhw^PZ0|o2=YCG`umi^`GiS|F@5iHOs02t#>wQP3_tQDYFV_pwIf7|Z8 zxRVe7ZeDUZxbq$zWvxItJ-AYx1~kCFon3tVQF>;?J9kN@e!g?N{&Q%gwED?-BZ%WA zJ4OnNiWe5PY?sfd?_2~N%;2*+rZxYhKCoVCQHxDM{(kSF5aU@2UuV3bhu`SC2lGBz zd?3oyrXO4eP{eb{9Px1cI{qo{_OQ1KoR^5&yJfVupKXIU>|yhcuWmm-k6vyjl2HF* zcfuEVZt~1W1$CEu_kFrZ;d*t0a#;xLW4pRw%9pdWMpNNCwQXywEGUN%z{t(eF316h-&MZG`wT9YZ*(A`X7b!+>3g?w?;7<2YeBVb5FJZzE4l`0+uhlAZzWBqG4w)pyaEq>sK=sq< z>vuKxUGWn9Z%5ig%M;?W>r9mcdAq-!@B@XjKX2_dfuVfeL{>llj2bmDk00-R|ACGr z@@}^TjwGpbqPA#!QYv`-LPOJd&%UwxMgX#@E#*&@{Aqc%BXb;JuLc-%^HTtnU2Aven`!!*Un2@STT8LM$EpA+tu2 z3U80}xS86|qJQkRUl@YmU!NMQN#w4m4ahTa_}qjL1X83`*R+`iR0oeH{3Tac_s7~- z|5on6?lBWS59sA6-qnY8@bP6eyd6^If+qZnxIe3T)TP>B(^Vp1APC#k(|G6MSzf{% z`Et=J-;G)>@VAqq*sbIPL8_9Oe^mUd*K?sAwAaiUQoidpehjXXreKsO*)9%GGU0WF zxVA)?Xx(sGo&j9S%~&e_K4MNsk$m{ZQpB6bpZ8q?(w2$4EIDJ^v~EUBViqYY_I;wmhO|K#)8;p4JDaN8A@2;t!#q>fHxJN%;ZwP0`_#!X-Bjmsh zw&blh4|q~ywqKX!u0teW#tG$MvrZ}w7LH|a4*VX?^mC@`trV|+=8}sPT^Qe0dKzqT z?bY9;&Qhk@L(Lkgj176k@q;4i;EdqLF{cidEflTl*Az zIyS#Ify1j>bU|2*dKIU6*mGTOlyQGz<9JZz(C{GO7_*|E%zJeG+o_IH?2_s4=FzpZ z`)ee!-H8E*CCg#=*W`|TxE4n6x;P8GzACIY~5^QzjzrP)6>%(6- z47)ob3zUVk@5#8g{==riB>)K>{?c$0Hdp+Eg|as{Z~X;4|D%}I&fDqxBNLLm)oJ#! zrO4y`eR8E?Dy=~-~4`)V_H{HZ9hrq%Yc9gx3$M7LH^aD5H%5#p83;7VQkI$3({NL!y*{%z% zHiqH^4zhZ3Naq();#*F%_#+LLgs%_T4T40KCuw*!B}nT}$7ja)Fe}7Y{VaVWCokE)efL zwggzy&Y5;xX)J$>V(%U>NW|Ib_;^I8xYXZ??gI1xp!dUds!<919Ns1 z-YL7@TV^GSSV-6aWW;(o1?b!3{2D1->#`(KZT{G=% zx`q$Yg00s%;LbXUp#??Hkn$3l-yC>b*xYEqso%1HA+AZazfGeUhJSPiaZN|f%%Q&q z$pg0!61ojvX==57@%y)P&p+*0&}Oa#JpSUfT!93;lB2upd5rSm690pKgE=>!h%au+ zgWWpFxA96Y?j>M^qZ{M&=}2o!Dlt9aaAmh&MDuHR(){0UDm*1Xsg!7AGWe0xP!BNN z6iab8`^BFWtDeIDv^rr%d%-_nJ>#FYTAABN>f+`$4RN=_6B#S2r2PZtpXHZbD1>qD z;=duw7w!e^=PkO}+&X;`ieV6=dOpC!XeF~7(%{k*N@81R>6Ga(A3kUvg{#EIIPmZ8 z<$68=Qz*~vnpGphNJ!j{cu0@ozE-FemR@0p(zq0OPJS zF&N50+&gf_5p$16xm_yoKfcvwK+RbHR)FS(5|sB%jQ`Gx&q3ukUj?)udTWQ8=6?rz zta2!6uoofZ-qh9wogmykZFg%~*Gqw9>M8^F7fDVhxEvD;K&Rcr77K&0c0bb2h5y`H z{Oxs!ugL#dj;jHbZuypsF)UXk23r-8t={#fQ9gn9RL0$f6>@`^#8*j2XR5#Z(&vWF z0!}^i$`2+?LZ*N(fq|Y1-C4f}X)rctN=M`nukF%xy15_ACy!l6~xIeeU_~i|e-*e{z5as)B>50yJ*F4lRCE z)fWzZp?&zdc0(`cL12VT+RJeKXJTD*Q24VV-;B$e#X!+VHERxG=&LSTN-fGg6%WeL zw;vbfvy>!Zk#R%0Fg7IP`JyW>Nq2>+*6l=TU7nsc?PW-qMiK>tuMpBLj;%(UpR6GT zY#4x$1$r3sQ!9Z63dUd>%Bh=b7tK%beelEzS&0HT;?>EAI_GhYOZlH#J%(%I12KQX z0CPs*j-Tx&w|_YG?Umftvi=UUy0|KoFq8l;n@aRTL$39?snf4-`X=cV@rgi3=Lh{L z5uIgM!&vqi=5+kDbkGwS+Avt(p6k>2F-y^vQP=8Alt;YAQFH*g2>^)Vp9+RXMy}qI~YinNC(^ku_@$WA*DS&C||RFkoz_ zJhPKc7JPM7NS3M2;Fq1RJ2Ac|LGwf$D~q9On(r93hQMd(2N%2_aC&Fq>4-&q(Whwo) z$iu@R7)XC+iDk;v^LpY^pz0a?@cc&oli6LR>))nr7M>yWwdGG(wC}B69H)PfP@=tf z@%GT_(+{94ee_LHqK*bhM+z3uDnq;=pS!}jYHfcFKhc?}b?hMwRQ+A)E~1RoCiHIZ z%K06}$K)ygiF$%J@UCFVCf9x%*zmU&SJT!F3>9Bc|Gz2<=EuejHIoth$evTY{TaFg zkL2Gwq{`pHr4{(w9X02FP&y&_*ru_TKdla{^x>5;gn`N7H#2n=uAbuBr zFHktsYvY|%hwxtjepXC6KwRz-vmH`R2w>-ND^gA&0?m_LMU%-Z#e0@IlZZOI| zXMJeyyQjz^an0pFfG`FdtJ{E3U2chjqK~Hu-(fZGNDZL;Hdn%yVX^3o|Hp~m3#{Mv zHMU@2-?F&n!`ru`nz;kh{)8u6AO3hlBEk_xm~S1UJkcAHkmDzgj^E`2_WqEW*r8~W zuGf-^zO)~ImchTc?@LZIz>U9#Y+?AH0zvl+cohKfz)g=%UmDdCIq?`=ay9c&slr%Z~b46P^3Y5F`FU8puGBf>qoYL-nqeh=eylZv=~aj>5t1%b}iBJf(dYB^sVmcE8P4pZcA} zTa|j^gYRS84XE)>;$+wYws>A$y^NnsJYzkySoiHsw9W~SLL0$i|h+S$3{0+*h1V8wmJZOkAiHp@NxQ-lkB;;*jiitujfyV$L=E+-u0 z{$*n$;qVizqS85!Y!Nd8rh%mO(cZN|kxkXfEeiiCe^sx*V+gl?xY=2`DcFJLeqV$v zbP*QEh8eLXua>r(7&jnSdF)sSEm;LekqM!c&Rm{;&J51SmhJQ%S+Mb>QO#6`%zNFy zUw*EzU;}?~c{UwSbh!0Xe3Q=Pcmwc+bYj}<8t`w?)GB%p@XL>*VgtHUgM4?Za^{XSW=96z$T>Nts9H&X3)yFU#Mmd)l#72+y?2)9=N zvEGCnB~k70yj0No(`B{Bk@(hYdT|&pY0lNH~W!$(RMUgu2m$P zAk-b?WU@-C?QDpciS<(~yY#`2CTo-(;Qi|GYF&rj zR>`;bfiN-z3h)R}Io~k_svMPv;Psx{k!oR|9f9Icb&wtLncjoR{ z^X|2uz25b%wUU{=XZCs@M(vC>jtdvS7G_KSYGTcJtNN-s@^G!*+=t)(%X?cd8B80yvN)kZ({v|m_a@hzE-IMMf=>KD z-Aof4C@cd`)($M%+O$G}hsx=UoRtf)lX%L*`&&F^e5J<@u06|F&N7`cSD`0qduP9i z^^irEp@+iz=cF4V%0)Ndp$Fo$jGX@IS=Q~$b(OM4%lp{}+F8kc7Y<*}O?(+Kf|I+B zKFpV#NjLkL!eeNOsb9|;v;-4hwqbG&+-#)v_xo_=c7j)Zb5DvKegUxY^a;CQ%u)+K z8aTfvg^ZY2dpkIG#I?V}H_136ZKKn%d?CKS=yYQyQo+Z|DAoBU^TgyV_SetO>cDBd zVL=1w^qW-KPMxT%N&u88UAm0poFq$a;esLZO1;gvGv`Sx%k{aQ&xO!8U!rZT+1N3A z|B<~Q{iaT;`ONOCmi*IwreD%}eOtSp&`NP*_(sHmsGq;C7`F3l?Xi#XJJMJWlgs4` zaM4xO^@o$;sy6j?vl0wQ(^qq?vUK>gL#0h(U`xAgj(W1Q`>fLxTeG$MCl6mhANps> zG$9KJW3NOe@1HE+-}08oBE~%YQK+T0bVBZUQMq`K^{N~%nR>uJUO)%#_a6$w|a)lhRPHOL83p$%!@BKPtAjWR&{2#|6 zhy3G9hN0%G-z)Cv_WkB?wj*i0WvkN@&^-mKQ-utP5Py+Cj~?;g1m>2N!j4fU zLE;}*N6h7Dxk&Guno|O=h%4wvwFtj=)f-NCH47za%m%bNn;FWfdwdq}?T?SFs%a@9 zto8zE`rAF%B+H(dcs&^^Y^ddyFRnz)K$*K>!udj17uChq7jJK+`8wvzjUaQFc*y-4 z{`9f!lP#7zOh*(w%;=M6K1RlUJRkZB1%QDYN!pIyg!mH2+LyPf49{SnSY8KK)qRMHd1?)%DkVP0cM}T{Q(_8N%4Fi5^A3Xg z%<}z6v+Y|itF;xCV1_`*r}fQ}Zx=yi!3y^oNJ-0lDv6x$s8I)Ha)(e5c5|~+OeTe7 z#}E#C>he(ZT9IlSXY>nLC?7d%y+1l4m9W}Sc->eG;uHztI47PA{!GWx9l|PP68VI# z$ypZ8B8=Gk{3u-NSID;y#6ez)Wk!_tWu=iFL6)+C333g+v}Imxgs2i4c3G4L_)}AQ zU#&vq6BZyR5pHGabHY26)rOHoI{f#X@8%FPzi?Oo@RAu4D)VH8<%Mp4ZCI*FZw^WK ztuXanQIZg5-@c+~v;&X=1aE4Z4B)7xzVH^V(Ckbm;<+YD&sQT&o4&(| z;6&?t^^2g+)mn z6Xt9Ln_SMO&^U958JUUyD<)fR63%kxP6|x%GYZtbM%b65@o(Xm1;26y}Zyyj;VeAjUjf1#!U)Q{i7O137XfcfTi#^A6`25 z78CRPS4{(fO?kK&vwo@{6gde0N%sBp4D?rRu{7ea>P=Q|)`-Y8KAq=q@0d*r4q=VH zb|(|@yA7{GC}8;^2`t%?EUN7w|0g2Ml!R73{;!^d{bcC=L679?&dZNsv7aW91GMaW*D8gpfkZno9u%*#SFW5Kd0`Duc?1b$(IR7{E7jExXJM#&+!RzO zKCT!~U_`aB=>VZpWh!!bSFoOZ|22M4)s%?;?i1+u{a;MK#fYEc=Fk@Dy)RK~4|&n& z#O0b_^*kqi@&yjp2MR4r69mRYeP=$L!X3YN=8h~SCzae0PC?80rppmQ#|vhPUg5rY z)t?p=vfMtQ-S=CAIljfQM!D(b-3T$YrSeRGLLobgVEf7Db74N!ulXelb& zHyIyB;2RveEehdK;*%W^9?p^fj|Tu2`0E)kr)E|;YeSwk>s2baNv^-MSTwg?zd14~ zQ#eKQF>J)CaK1EFeA(T%aNfpEV(sg*Ul%8-6gk+or^^o zHOF7u^%r5e=S_mN4;utObkvQ}H;9j9L=P5mWs~ivt2#8c3)-bxb!55-*%QnRsaqY% zCigvnPAc*pDu3Ad{sk{|hdh>{B=+Q@2d!#pNqhB$^on`o+vo4LcD4AIDK^JF4O4nX zdp*oTzxH0*?gjUJA2n%|_R5>Ji`9j^&&|}{F5S69#bt9x-QZ%mfF3R8Vi>gIV8a*@ z%q&(-L34hI_u%WymA$1ah;-&DJ$c~~g5pPJL|^8&J{9ps4=-&=s`tnTrNHj+J}MCW ztBTn7)yKtesNdi1^G#|((mfC5DYVhCjR1{jG;QRehLqPu*4Z8evwGqo4Y#xBKF(Cqb0)? z%y-hA7I9!TDqXcSfzo4d5a5@t}>RYUxFO2MIDX1D;C|kfAEOMKApFcI-m`=d)j;)&hEPXbQckA;$hK(8_(aoI=u@Nqnk|gi} zk@`KF>}!qwXRq@=n#o75)^O+#l@`Q#RMq&5)_uKQ$$r4MaP?Tw*z@zXut|qxzPE)Y z?2?P~Wn7p$$uY0xkXsp=I6wRq_1QfYMdMzJ*QB-+y+Hnojf{u-e8E38koc*=Xp_%+ zZ@In^Nj|@5pK=RaNkBePjBuCKBl7@kj zFDUi7pxd(FVUQqS>syph$(2VsrS%Pcw_a zt02)n!_Q6FDQ6j!KM#3WuY#KRtx@wjX>$UFtdAqp)&!!)6>OH0oO>;|Hu$fCJZ&4l z^M$9q6FvtxVPz(UP)RD;s0cYWB$ZfbOkrG9E!)YISx)_X5HnNL-)FL`~he zJrHZx^3LfT*+|XLiwyxsuf6=CM*kTxRu^W}?>uR=AAHuyWWQWI&oUZ^%_XJL2b(8$ zeY=hp*=##96>LZ|*uDgkB~+~X_S3@xV~Rhq9#Tb@i%|)V3*)CWwu;&V8v$4H!d%Pb#e8_C02Gc=fLv?UyLcF>$C07%kn}LELFE0 zK-e(!TP1R^-tyE0v1UB8&-1WeR&r&q;iwz@Rq%a);-9|Q&8z?M%TRY`)SQ&)3`gZd*A^bq3skUQsibYpOzL8M|1fK1-Nrjo z%NEI+ag^(|+_c+}eT@-x&+GNoClP;1oAHim28)L#Q9o$Sqr2s3vxR@Eyj%ro&j=`N zoc6^IS5>w(u%8O-I*JTOTPV|v9j07+*1#FGTUX5bQd9KY;~mhf_T%W!bLx}I*N0>l$@7C z@o?xj))i`E(ofx&t+FpZ8f$!FA>C6L2uS{F6Y!kjmf%vGK*Rm6|Gq;!py=*dh%v&0l9_i_p zN{=ntx}@1=tw6&ZvNgT_Gx^Wo>_Fx^G22i2Wp&rn!~UBo=uzFL61jin4ua~KYU$Te zuwu!Ca%#Sbk^cuyq5mcw8aCDYXPjClz}Fl0kxh;Y#Y~ zDfG*(em3y*pGqiF{b%)m3g_Rd)MNLg*2JDZIBravnQiF3Dl@@0?PgvaE9AyV)U7kR zPkCKs#uz4M+Fx4@C)YEaAI0oaUAaf>PMm%#u%;RXk0#dpVYh+*_7{|hZzHohomqi> zW1QMJe_ZO*_1lwyH(6ms>0sMTe0zwKZ%JPEjFm4&`S60@SoeL7$cS^tXgFA;5S9Ud zHR`ti>vN|?jyA4uqoTdy@4|$N;3@>PmC&kileKnQPwLG;dT&e`bS0N>ridS|C|4$g zsQX|Q5pS2M^ZAjQG%|m}LuI3H5Iw;1NYf|AeO=J2IAzx9yVcz>FPl00TAth~8w<A7C5u71YI9e)-d&qtl)hS|e$mhjU+D$cx^4%$c#ZYrPq-(0|RN z=iWTzo;ER*VD0E$FJn}LFc5pSW@~W;ah?-sHX3Q@nD{n6ufpwQ(5ZdQaI}z&>S%I@ubU z^X4D3&~-N*`F)T&OTs@GtLwg3Q*U`*hxqN8x;=0?DsnIrHtau=Fkgfy0HkFN)JF6A z5SP8plyG>NSN!^vdVQz;x@nI7PD@6{GsKL3Pfz=K{itUr*w$!S`z2q)d9M3xR8{T# z_D;Qi)WA?0SChlco_5#%!LKpTpJ_KMKVUi)0*F zB&QCJO)Qmt6?mkgsqp(z@*VM2q>cPo;u*>Xk?ULAKb4X33Sn-Mr+19v@aEbWtwWh> zXWFHzyjdTmJIBP%5sq)UwWD~p?wAIh#2+iWj~M2XI@@B(c0L)tNnNNd+l{brm@rsLmnTVEFc+L| zV+Wcua9A|`LY&DQyCk!C$c!9niWS4Y#T_KjL$}OzPY7#}JWwa=;{=6rXY={zgLVbT zEg@z`)#2Ss<F)xyH;MDKk{H$Kh>T5o{qYcb!7;A0vfl@phOg3jR;u+goV5AF z4DkiMJQdsQX*@vS`rWq4qSg7EA%&>nlkMK#5>bp*ZlGX<&mobD zJ-CW7Zk`Mlcof3+_?lg71cgjFpxF_dW9B*BX7B6()jzj?M-FbBJ@k2JE!D^u`4lkB ziNv(PlYObOjEBx<-|}3Ox%;j0oxOznXfdFW?+;K;$clX`e=ies*{>K%N>=gwK=8{3 zO^Zyk`SJ4M%VR>7^#NTqeU)u6%<8qErP$fW6_%+UcKf&$7glwf7>-xkLj1pLl9-TG z5h*kB$I$~zyZUQxc-6>o^j#R)t&A6T4&NNmvcr0Y9l0ET0Oy{NAKht zYa55#ANxjCVJvfWeE6ig($D-Psr_wKI~!Lk!n_eN0u7({$ey(KpVhFs$z*GMTqEamYdmX6|g&*LW|uHiWnD_|hJ9 z>dG5w7z{MedP7dBkfLLqJYkC{nxS=l;K-@NY~P;L2XauEppR4!5T=OKfO?7-44Wxm zd3rmve_9N_W8AyP{DC|S1D@?r9OK}e&pUg^ zGr27hxs7^gGHYqutEc{J`D^c1V{_2o+a?=zFIv}+^d^tFynP2TV4hvOu};h+UhU?Z z;+E#2=Lnai{^V`li-GYLu}Y_o`d-JBMdF@`b?4RkOmMsO=ab7ccS*~r4!vK?=w&GXc?HPk5h@~WU`@8C~_{Ww?qfq*gH{>oj z2i=Em0!eQ-@ezeOo~1KmLuYcY(reuBj?>3U4qm2aH`T08v7SYcM|q91f0#^W+BoB# ztxJ)bKisjNf2D2^@dL?*X8rv5MQg z+jfvZ(MLLfJK=m0lGy%6{bQuz8MppDt7EXU4N=A{wb^WvISJ?O?3A2MG%d$OhxUQ# zeU9uquXqP9hSv9nWVn>xc1XBYu}~-J_U7TRD@}~c({S~iB64%zOc?h(PT=P9L?g^; zN2O?J7H;R-eKMQCz{-9&rGNK1c>k%5z&;bBl==m55`MifZ0-&c;G$->`cW4aVe+Zj zetO$B$L3%apY@E60?r}IluS|FDv_XM8dR)8=FG}nFu!&deu&6Ly~^DR12M_fXfP`T zrmDydveX{xcfOagb^ZC^QwTJ?np<hl~cBXeAV z#QE-1nqm!JCHcX~=LH*&==j!#9BCdPT}f7cDSZG$#nq%d^cbWZH2G<6Er9n!L@wXu z?he7Uga{c}l9-f=Wu9Zw(GU}VAXl#w+3T!c`wF1}Z8T5%?f}UgYVA0CdGIT&#N>+0 z$>#nOM?rI|_{uw_K33fY6!)RSj)D>?V|iIddj;Rh1W1p$&uC~bq{0TR#;ah) z(VVn#P>Zzj@Np4=;ScS{ z6LRco@~kx$ri);(C$8{F=!@4qg>)^^s{gJ-;61QF3MJb9l5X)YN~wPt3W=;(4W3OC zK7RB+4+$0QB-{@o-F%JHJ;CUv`JG)i_syNsojK3EW9NgI@)G%$XrBF{b^(hP%l&DI zEHBH2zCOF5Ut%-QxROvMXRaM8;5vf_9(ziZ(B?rmeN+{bk1jjjPa*lClms61JZ@yt z#pi}E2Bt2kgS#&IjW*REEqm~vbx+8e=*iw4dL5|RNvs~tVjE%Ypeup`W%Jr6a3h5D z$|{_vQ@#p(sP|?Kgk{@Sc3bqCPCi*xdS&yXU-qX5GD`Dx?49Gp-)y&m5pQWJ(F67Qjk@-L zug0X@m2{Y0Es~@2U-~Xi1Kms9P=rf`FK*tYk(i{H{=P~!GH&pw`ZDF|!0OnNKw^7o z!CGv}Jd$X=uk3181CnvPs4cz)6ttj@WVN$y`oZoqqc=h=RbQ=2{juVb z#76G+Pf&ic9%B@+n7S5n9o#1jHE!Up)_>aInaNd&RBNaAy$crtWXm~9jx)g-U~5t7 z!2MyI$kGtaO4b*mq_ip4pVaUMrwm8B#pBW(R~y3MtMDzlJHWn5nC0jfq2Q~*EehLU z2nytnKf@tvALJ9YW%!Yh5^MxAUaW#U6U>OMhYjdf`37wO&Zgz|ZDMr#7n(@=Ne=8B zFY$+6*(s!d@>;52H!%kJ(w6~~0Pw?VZbCF2{R~_p_-b1|FZ7H{i9umd+@KSZ32#|! zh}wM1JyVr_r=KK=&6-S%GLA2XE|E9WEXR}er^D-Ish=@A6{b=|4U%YpgmCa;klAgd z1KhO=5ia1#z1R$1XZ-xJMtA^2p9J@mSZu}{PGnMpcsWKZ?29EW!aEX2O2PMepHw1QzCN;{?Y~@_;{UjNs^5i9&e9A;= zT?-PVx`U?cvSnb>t1rLYGx<8KbRS9U)^9iOHoUm*c#+sqE6fm+Cc%%K zGb3wkoP19A)J$RY>+kUvY$8M^OU=NR03Gi3*aoXDk*y#mgw8-{? znAtB=al7wNaO1l8Pplr2dCLrBXBl|^Vqie9y0w~hDrK4#f;}3rYyp!JOOW40cTa-v zp5WchS`|BKT0^A_p8!tWJHg_#BX4PsJkT70tgzuCU-0^aQOtv#)Akj)nT?ZUv~ILs z#%q_S6iwhca(pb89RZGIW9heUJ@aBx(nk)L8Bz% zHn}m%bZ3aJ77ZI3u*Dn&Z6bMP+A`M#$fZjq} z1VDLVYk|eVP-77CHpUNPbPIh2Z=*om4uE2ZAn08fIWC3*1`LKiKqz-{2kH{k;#yE4 za2^!px!|MuL5##`O^6XGx~Hp+0I>|oyoGrLn+k#wBgP;`x6wzCxm)NSxDP%o79S%I zVg#Ub;cY~SG`PAJ*+c?6#!A%6D|YJq1~AZZfxTGu7Ehyh{* zF1YB%u1gP4Cn?&a%hUI~72-#ZxVeRqhF|i5I?2(d^RA=k8s`G7Nh zkpFG;P0-m*AUJ@JvkOSI5JkKv2RO~a^?5BuLhzu(nG1%21gLR#J*HYnAl_44WqI(| z8E~41>+=Rjs`yrx#y{Qu2V8WEQ6qqyv+Fk1LNM{34B+$&u8(>%E;<P642A??ppa`G7#}WXx66kg#)pH~_8Mod2)jUl2xk`^)xyUi?cg&n z(EKg5bikQAXdVas6z&6r?Gj)lAss-(N#L0us7sA%p^$j*E#R~m_fiALujH1rW%X=M4bi55NdQ0tz|1-cl_T6YpsNJWFsTG|vE_PC|5Y z*QE%k^A1|O>yi^@jEA`iJaYqe;-E#~x5%{uZgX`7Q!T)W_aFezDqIO29EP&LVN0ro zTH-xjz-bw-kJkR__AdMq59W`LQG;Bka1b-4l|YJd$+ZG+mv#kfF2FhWAXJ`J#1c9H zhO+;HGhgBTL;VjHU6z^)wVZppRHtRcK3V|iTL8`9Vi%x`S4(DrhhTrO(8sxFO66Hi z+@=FCD#PW|3IvvR*=R1*bMEO;d6p9&6#c76Xah1!agmyVYb9MSnhVXGdj?dV6~zC5 z=gH6sa35lr8URBEq6B3TpvT}o1TcRbv>@Dv`oY2o=biYL)R^&R-k2RSM7uYK1K!7L4#-vIMV{n6A+x%5?|^9I?8a3wE`cPb|q*o zRC4ZVQ=OI)UupubOK|-)13OE)jQ_vjAnwv@9GEmdrW1a77j}b3@E^UOBVT>TpK}gO zHdtT-dJY1N{_m=Zy~}^e76kGS6${7|G&7AEe6r%*OC@PTLDo8({=0A0f+Z|MsD{cY?eJQ_|P)J%+~eE@rG zxS$L?{Q>B34dnYTH5B>-kg|^J-_n)EyH`kZx$*B*f$vzG?zVNmdk+@0fu|DyKes?* z!~aiJroV;B%mZ=hrfVL&uuHq= zL3-LsaA}Bl{r}))8aR62RgGQ6&8DJg{(PL$!FOqK%9p!nbK(3k@=`h_ctq*V1HxPX E3+7Z&H+ooF0004LBHlIv03iV!0000G&sfaovQ&2UKVgRpfklJ zI5l8H!9}8_dlVOLNjREHb^~sUG$qCSlk!38Brg zO)j=xc$oXks<-|kzq?PpOca7n`TFA)YMFL`Er`IsMCL{KMM@708K?~Bp>$Fo_2369 zx0ZGToP%w$f~$vIhs>ra{EL3bLIUyC6q&WRJUnN#oBuP9A$BU2e$ zJ;F=4H-dS`EG&-yt1BEAo}2Xo9cjFHX$GX6GxpFt9NM_DfeHhwV!9E2!);+6Yv0qK zTpd-sVMXn$rF#X35P{`?1JVUb4riBI}c>JX2fs#RNZIy@OOWPrTl%!Y9k zsZYJ6V)L{Ttk~t%GMT}yKK=F&9r0{Hl{ykQd_K$n!69(#56cd~SjSSw$&8}G(fFQb zwQ5N4i?nH{tNAQn?>$=v>b{HB5;};~CnbcO(V_Ed_&}h$47ZTBWV!@%eQox*GGt{P z#xlD)vweypcgO$$*M+{BAs+13jVf%S;rE$#&nr~1jiqcW^9grM_1`EA&|IM0;EE@# z*&dXOE7IP=t12H^e6ZX>AUDE<7nLj}d&J5|Z1F>^^BoXwXlTamhN=-{(DzZ6`4F%n zrz_s&%{{e7%CR^7ia0`wfs~Fx0HwwV65*YS$y<~2z#f306z%Ni8YpJlb(hhA z;W2CJ`xFH^n8*DY4^#TMywWPE6o~n>|JPcjXwah%byI8ROPG}tr&1NMb%BXX(`Ld}Zga8|>TECdNza}QuTXN8;J%`oKS zgqm+8?;%I*en3mks~I{XOP=GH(+X}^6CpMik~YR|JWTqt3Wj<67ZgE4{nR*1eQy(u zJ6-bM*Kq4nd!r7fV+MM%>GV|Dm;I?-!fi4Q3X|@8&dZ3yZ-}=&vDtCY29`>QT23f- z@dvpsLyqRV6GXE9dp%f0Q)ogJfj! zsH=agAv{}nY;goOVZ-yQfR;EHOv_lSS}}ayf=B2vVjgZbl$$GRd7ZHcX>tu)OC%JB zyY63PEJS=$vXcFPqvG9Z1`ck3@1i7&|4WEC7+Ev0GOn(gWl4&YQ$eSFgiSw%6Ao&* zyum2fIi?N`z65;lUZZ)DC3Jk*qL~prWM%Gh2J&*?;o%M6cCGmgMs(z=-M7}58dcSG zA~{e6=pWAPKwy*z?vwIk7q<9auKT_wk1PyUxZ-&HlEnSkuNeo&BktVUB(ci)9c&Nh z5zI~$wQoZ|G%))V9^riEt4*MZUu|>2W*)!oi7yzVK`Yfj z$D5>@kJobq&}eC=7-Q=U6+*TwGe-8C(;Nug0eS?WOOpUGeRfFB@Q$01b9iP4t%!I; zqxh`RMM}s=<9ADkR2n4jX(Xfqorl~t1=>fI2Wr|lgMLJEGO&S?q4#R~ervo(Ye+jU z2&m6PV)-|SD-J6BlA?AjM@(&^{_E6 z@yCkA+)0@QK_^gb07s?9RSGqifejwVN)&?8OWXH8%Rd?w6Aib$KE@r4cO;R}@Y*d6 z={#T3zkDz*% zohR5r?__5TKqCfLYc1RE@{!G7KYUMefkPdb;4w#w)?e|8zGraNpKvt+braoW8ig`5 z*V85G57z{k^0Rlh%o)sQzQTd>E$al|rv){ffj5JH-KI`8LLRtI6yL-^inKaOb+dfX zf96lY_TdRg;K-0zD1HsURT77)9R5Cq;mon@P%DQMEkK)vR15e++V2aIm7{F`=@}I? znL1|whRUwZ(@QMvu6jLWuJrzJ&lzI*twy4@O7grB$AyqgkXvOF;OO5&p8?CIyTde83}qBllxEvWy22-ptb0r7I3blBuCWmFq!ivWqQpXJ)YA5B{FNn2E{`&) ze1iIN0=&~yz1P6)Wn_;~mdK)ID9a<^c6T8~N-7CUvb#MK@Ra-ev)GrjV3xNijQ3<= z5l!IknrH0A-8BkhjVldV-Ej@v26ur!HO1yZyxeaAQENe@6$b^cu5pJxuGdlyYF>&VN>ZMUQR~Z6ZyQ2a3I~Pi<%Cb>*5el5UtmwNA2@&de!H7L& zJnnN%syGE_p_H7TzOCo6qS6vgs4T$Vt%m%TBNgelnlL*UKF`ooIDuQ2xt%$G++D69l7q^^|NvOH5z) z!&_)AaTnF%nps=*Qp7m|t>_xhgJ|jI0c%e^pw65k@OM)6-KLfO(ng+!gv?Z;Y*zDC zDCS|D4Mq2Ii=%y0avH%O@d_H1{E*Q@gNVSY!IO$&{`|J$i#a=<2BRQt`8Ra424A;T z^NUFtgaNe@Q*H7Lfg1XlkwCHbnS=>`4FX|kBp$hP0d7FWf&m$~>B@eZL8<~tjl67l zA`$6csLU*Mx+N5InXUrEXg_t2Asw0QG3FfsU#g>K2fz{Ab~7>g`Cd6JY`QaP;>JEc`7US^MrVUWF_P<(RWPG z9-2iv{T%b$C#b~ujjmQ*te>^9ascZ~65Cq3jvT*zASoJA^67eiS5NUxu&Iq%IfMFZ zE&$z?8bYWc6%H@EHHb%-*?dewdzSKKnTI&;+hYN# zK@}NY{*I0s1akm0x|D2vXVY+myw19cD+~)QIt} zk7?4Zk>B-qJWablxM&$Bj0o5+4uH@gBx(g5_X2?FRC#Dy<`!7iHNdA*yE+D2)yG=+B_ zOZqx1H^sqEG6y&J0rRWOu4~mTTWvJdqYwt}poow`nh~L52c10GNj`KK+u&kQq$9%x zp_YA|*i`=-8l=a|I;|b*u`T=;VJdl8dw!KNWLojF5iDbu(;KU=!E~-|q6J%3>!UK* zNKGJqhaxdt z1Ve{<*s~$PdtUB*J=KhoJEtqDI;yT|Aa;Dx&t@P!SE_~bGRlnb2UMNip+?fi9n zv|$~84^yF)w!kbX1{OOJZN7mkaRWzCmRjICw_vc5GlNcwi>q}zjVvzD&een_s^Wwx zXlmOCAy~?DYB);Q?QqhYHeiS=G*3#e0EcVNP!5VPOJ+=;K zOd_F%X?Aw|!&Op<(>xjyJ^!mLRr8ooA8xx3bCO8EPgI$vUk)T8`E3&3AS9`%BnTi2 z<*pNR1&A#Si==kYscnV$Wl;+i#2tF^}N&{Ut^R$wkZz(>so;NOXUgw z_baH}J0UtYAFO?)r+8bQM_x5eZH~YX7x1O>vQiKAUTUijHb$c+MOP6o zuSOZQRBl{95lz-fr*@6kdsX$qD{A`}7NGah${cG0na^8xm3i`_YSY%pUMd+#-|`nF zoW{TcME*yFbq2Ld|K8qhBxHGRL}Z8&jJZT{`FZI`B1muthBt}tQa~iBSe#4S53@m{ zdPg`Eaa;;%_aD!g-muYqa1|haOqp+8wp1vc12qo5j2;}SLN+42Y^Cx{6)~$ikF5P8TnKumV=9L(`FWmSuXmVwctP7<;*prhy|>thhh2 zS}^CL7@u5)yHD;i4XG-xYK0tzex-2Vzj%ROI|uUb%?&5yH+B}|aT`zkFwG4ZU(ICq z#S$=`e(NB)BaruyaztO>esRIMY0MooU~rQdy|@op`kbfDhr&!M^<=2lZ5_r;$z2AZ zD=}au`IjelN)oC9lEQkhUnV*b<|RU~7SFc*>RA1x#rUq0IACfy^hi2gm}h#ZaaSSKw)&Ccf# zRX7Ne44Bc?tG|m2G<5U4eraad9Dx11f0a-7+SK|!D*NXVu_bN2J~J{YJtNg!Dt^r)RN&QhXs1bIohb=Uud0NmYO}g;xT)ysP>= zpe7wMA&|rf=pf0S#}S@ZW^G?L9$k?t*-&gGW+I#Ysf=OAGKwj zR`Zv^&FuidNuYk25FeBEQ=)>^e^|;0=F&X*o1t#tC9J@1o$x?>_Z-t%2Eeo%o!?bQ z`w{3zP_;7kQ~4&8u`y3vIf)$M@<7)C74&r~^&>@IMlpC;i-G`73TQ{25}P*(d&7sFP(~pugk4J8LetDszcl z7qZT2g$6uj(|WJ6X@oeMmNUrf=PGEsugq!(?NF_{@Mlm5)b5>8GAPI8hfh~vu#Ik# zpXM!wER^b&_59@P!LP z#L2g3{Ava-ONx(v6rap!U(tmWjy1d<921=FsPkx|#yh{jvlVr!%|E~v=ZyV`ipte^ zP(5Zhmk&AyQ}DQ59&i9b-M8T0_AK9xIvh<%i~z1O#8I0TY(&~FiBkDcR9L8?o#!-g zKRjXMf-|)tb!eI=ON0nqIJP#L-z>?XBqaA7PjGsLq;7ba87*^CypoGrVM4S0h!qot zKq%>ec>=~G%*W^;h<7m`joDVwahQ&whep2n}H(ORvo@Eu2pglhZO6V=X8JueAO+z3Sjf2cep6~fU>Q6ZY# zNXzuz{PpW|f#IoYzPV8EG-Cc&^^3;1dH1SGuGnOE1=GfO60j3Iki87vED%zMe362) zL+B}hwfs@MIBWYbL=qQ5@Zs^!rGX2)Dg)g z4uri+3A8Enw*L`4F#d{!HjPRNh!NgGFOD7tOn{!mDY<)q1svYRnst)u^ zHg22*sfRZCAHP+tFj*~h#B^C)Un4H3xCe9r4`SXzfuL>OR5BJM=B)E$X`#Aq^GbFA z&h3k+Qs=i#V|3D3h`|D)obwNgAo>*ysz5bwxLMMpVIhi?dd!|LHy7S2Da<4eTN|Rv z$auy6+Sk{4TFgOKAoYYby0I51vYNjA&a_;6J277iKi&E|$tz$esXhU~G|QFbT$*Fa zTkie9l>o=E1(otSolFuhb)hdtPs4|e-N+|AG;J#xYK!Ch!trP?O7ZNjhgJU=567s; zP*?5U&F~HBBy7R_o`wbbn87B-lhVDmd#lJazjz3j4A7Jeb-V6v3MnyyPMMU!oCo0& zPG;;Da{s@s-0O%=sETu0DGd`NUyB#hh>D1&q$yW5*ir=dXEu?x>)WBxCNvwXMN$Lv zVN;jMcO6|H^yYqh1)YUda`k0rNaj(jhZ*5{xhtwIpBhHZ$N{gYH{M-|mP6YxOHPo! zd^LDYKYaQuIr+C3Twgb)Vo-8AyvKZkuQZpMJZmS5Mhj4H_V&g8vW7g(Qyt5_fqe>0 zjg&?PjA-`s>cY&J5+~0&6b@j>Ca=SsAxwCoz<~Cb{BMGUKRfAESibwH|NTC~@i(QY zX<8Yz%Z!Y)?*(*eI2NS(n)Z!trw_qab{`}B{xJrY50;iX3#r-t9mOx@v&XM>o_!3h zi7_YpiQQ2$p9FfJ|2)ZCHlU0IXN_+0sNm0BV{5~U_+@)Hq<=`q@E#xr{d~Jw)_G6`uz}8pDHOIeeGr#=a0kk0Y$_YZ z*D6fKvu$uyl5G`onYEj(-4+msZIC=?XrW$zDqA0aH5tyF)?=7(A0CS->Le-;-%K{t zTL+9X7zMaTH1sTyz4&ieLC!xnqQSVk0lADj-J6suN5 zYIv3{h>UXjIa?=ryZS*Lr5`Q@&`wYRI_EMG{r9bX>ozkaAKEx#<=l8iD(g@|w>JY-PiIL~zY7-Ka_L=5$VR5C^l~Yby zsGkS)nxl0XTXhVqNR1I z67~DbB#b}2Vy8Cc%o+XfD1bqV>-zyd5HLYdy7iK{W&)mwdgClx`G7{*@w+`1?L6pY zXP>CZ?8{AFjT2|g(xwR~plhA*SU5oRB5brP*ZtM5Zx1>QgIa$=MtXGv=8ud6*(_%Y zA^L7DvT7H7hFTqOT=u<{4}?Dm!wUE67XVZ%wZl!xwYqx^13iW72vhWEX#brx zj7-2#a@dVl3(PttA;U+%)uWkqAXM47Ti;xwLyjQK#g8~RtZD|1iHzdU3&ENmtcpd4 zKwg6+;;3~^wwmXKXTCvVDFW$Q)V@9&^GIXtgCZVNZl2y>DI)6F0U7qjj>6vtb^)VQ z%(}4Jq$b+z1@0`Tzky%rK(??KHGg{i>nFJb$6pgT(Uy^r+qKU;`py;a>+<2Po;{7c z-4?;}SCbz`Rik|en*J5KN0%PAe@F7Wx~-2M%Q6O#bBYep^oO7Q2Qv6;?>INaeqOysFZ^(+(`x)!hw;=;*d}s@^2|@gGHdvUQGVSxY2jXSZf-b z4gQOtiLeZ?;b*A6fvoJ)ui^%!2Rk9Y4@=Az3a5}3s9?v2Op*u#+7;|luF$MYO;n|- z$Yd+lGFKQwfz|MI&BSEBoilIqWauGfGNWM(#b8)~eIc>J;DFKcc$&Q16yGu#0Cw?e z#rMudW|T#Qk|+g@Wjc}Fi6b>&d3$s8#J+-&ekiebv<6(00M^A=+){$K@IHRK=SyI6 zoC6Ow7!mw>y-HT_6tjycty-+m(4c^llo1G2in$w>H=%&-K%9rv1>L8+P6ihH)(Z(; zpDn&67lO)2zwEGAfL|Wdj>GJC(BtoQN|mH0RfltR^;hGqHyCfbYS!WG?w-^vV1(%&xT2hKJ^KqZ_J4By>baQ z>$N%Ae-q>7=x1qlE}Shc6?zL3l>92fP>zbycj;M)piH_H1#S&0TV{i6a9L|49_r(R zf*jU}I%4>}{xcUMb(MwwAxbK&n>htB{#K<)FYsjvnL=nH8_v`B5%;BMnjJq?p5ogP zC26>;R7NT?JEHQcNYje&9H=b_LDpqs9siidG%?~Gjwy0Tq#j6&wtzA&2j-^X3Z38< zWAA_^%H0`L^c9C0#a$>g^D=Pn#OB;Dk`%fhKx6^=^wdKOhERg1=GEJQFn%fSr)?KG zI5d4?nQYZF*InncnH~M$X#-#d30vn8fJoKono6VfQ2#s3p_^uW>$E^AKKUSsOp0r_ z7;=S;A)Nv{m>}-i%XNN8*#-guD7DNCmbO8|g0$n`av_wO`;aDB>)}o)&w7uCgbLRC z!+zK&*URj1tUdGaH$@L;o059~NpqH81Up?+d(2LXuEA$$u3PXQm6-kn=7z*cj##V4 zj(|l1L6e{oV|j)~W=8O*Q+%<+Rgk#o40I5l<)-dz;D=K!;o@P#@za7$Rj4JkGHs86 zbI=ta5bB6qm%J-xgCtCk3|J->v8o$PNbQmq(o_}_*XX5CGkN>=4VmnqJU0q6jR;Zvffn#`yS9O<^&$PqNJv zr%o zI2=END(dC8+|n41cXxOH0NKLSybTJ7nW9WpSAt=SkX!v9{F?#WAULZyj)y6~cq~2W zE~LA%d8MwK@S~8o+lp62tP}rYaL=_kADcAdNHV0+zktIQs9es9J#Hh$?52}}>+_g| z@m^sxt#bAnm}H{gi0rRYRI-Xt8u#we?cs0?R0*ZF%%U^dMGYYey+Zs;DrtkaC_|(c zi}BIiH4gWWrjT)di00~rmfD%zbjKZQlofN$JXUtSt2C>@A?Zb@h~_jhYulbiTXFq{pn^b!yWyh3`VAn+ykU4 zN;B59@-)6SDP1t}w;B?ZjWz|{S=bx5=}>>5UtxIdZuA+zRL*$ydU%ys{-BAaX{CwB z5c{IAKg-dv<6d?${h`no;CS)pKE}c0LkE24Su6l@9c#9_333E4TtPVX!L14sSJlFV z5y=iv&#)q>B}Flgj9&a!9=f8>+;*y{uV9K}A|9%ikN@DG!E7(AftC}{gS(Rc(1r^6 z>U0RzbH7X&(L~M(I%Dt0HOt680;nP*NB&8*X;k4!2ej|R0&CPIN`BsMj@Sy71m4LI zv-c&olhTOCgcJ> z(y@~asUWs?-L<#Tk)|vE1NAJSft9SpyP69S{S|KqZAm#g4US1$0sqW_dEVw#D3(95 z_EtQ8T;XiwcF^Ur5{?!u{Dr5=RYwV5@TQqQ!g2VUChmtSJSXuagy{oeX%-i~C1YHa zth+Y_IP_FgoYW2!eqy8ZxlVi*SZHqO?H&B4@YEY%UK28S)lY@-?iReYiR#eyiODFLZ)nj0j z`J|;@cO@h9+$Db!&bdJOmD3o6 z1vnYkUU~-$k2-liH?|zU5C{GBRrAC42fM^{M%`GOsevWG@-!D<4UnDhoUwU@ zR9GT$<6!-P6n~x{<_W20%~hn(KKt>CNhIJBde(^cg6hOFx$#UY&Dew3obvC6Ph4%5 z9y#$*8~gH8a;Gb6q+-gIpy#2uq8M+Nu~<8K+b!|Y!{avvwN}{=SH92WmZK{*m6$5H zWYcGcU6Z9~yscH+y|28$XrtpG0W1$caK^fFvMp~wYo=?EnM{aAZ3xlURl2030>ig0ExSc6+3>_^mUwlTU_Co5I(Nd#+rz#6;0-#>$Rx)2{^I8`G_b320Ik*I|0 z#+cc`^9l+e#G9mSQW8$)uDEwCW&>n;K=uGlTo!^xM;aeVDYF<4wn|iDk1oCH)pmz2 zxw_kpDLW$W?{~l9&l*g#1EI^}p26{IKF0u0>wO#PNJ4OX{XZbnpeo_nGJ`a$>9RTw zuajUKge_1;EN43FzXuL-jx0*FrxI!kxG|;b@j|{=a>`pOp5Ty{dhE2%O+0z&=x!?| zkam5Xbiccc9q%){&elp|Y|-jSt0G$J0!+92w8k*cr@~=fs>m&#y426BgUtcSDh8(F z77b?cVA*%!eo0Tv!Pmu}Nb?Hj>%c@rrVWfRY{ zl!3IaV?NoVCK@OlQHZVpN*bpY`Vz-{u}1hcF%0NPrL|4g|0krDER9l4s@2Qnlx?_Z z&pKu=#ZosHUr%?#S{l&Qo5Hck!gCWSz zfT%^Q>|lSCC(-9qHxYJXH07Zt-~O>5=8nn1-1M}u)Yz&Ki88OV5f94{;k(@#fc;%# zqwISj-EiqbY{=B$ZL9df+X$4e^I<(=Yne0r?VoBLFx|O48YU>*TbW9cSDzc_A@^TzlYvVBBM63r2bP>z2b#X|U3pH>ahAGs zUNBk(ljcepz)eDjP~^Mn6;s+x+_Du?7C&t#o6Q^@B{Mp`UIRXg+qf{idkT(L1f2V&9MWa3gPl>1!uWK-xbTKI&&r;i6L1cC3Epk*D%}d#vi8;<6GT} zApLxwPyn2J?MgwJ=PXo~K?F*Gzq5~^H39jY z1QYljJ&O0TSgE#qF{D&1N!QM6@~hznvGQm!Aois`oxob4mSL_Jk&scf?v6e%UMs

Un~&u9|1S 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 TW%7gWJ}?c70ssI200CKA9Ca+_ From d3b13f5a380522203d8071bcf82cde769effcc51 Mon Sep 17 00:00:00 2001 From: yuliasidi Date: Fri, 26 Apr 2024 17:07:23 -0400 Subject: [PATCH 3/5] toxicity grade added, label for USUBJID updated --- R/ae_listing.R | 18 ++++++++++++------ R/prepare_ae_forestly.R | 4 ++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/R/ae_listing.R b/R/ae_listing.R index 7e8355b..715ce6e 100644 --- a/R/ae_listing.R +++ b/R/ae_listing.R @@ -106,14 +106,14 @@ format_ae_listing <- function(outdata, display_unique_records = FALSE) { new_name <- c("SITEID", "SITENUM", "USUBJID", "SUBJID", "SEX", "RACE", "AGE", obs_group, "EPOCH", "ASTDY", par_var, "ADURN", "AESEV", "AESER", "AEREL", "AREL", "AEACN", - "AEOUT", "AEDOSDUR") - name_mapping <- c("Site_Number", "Site_Number", "Participant_ID", "Participant_ID", "Gender", "Race", "Age", "Treatment_Group", "Onset_Epoch", + "AEOUT", "AEDOSDUR", "ATOXGRN") + name_mapping <- c("Site_Number", "Site_Number", "Unique_Participant_ID", "Participant_ID", "Gender", "Race", "Age", "Treatment_Group", "Onset_Epoch", "Relative_Day_of_Onset", "Adverse_Event", "Duration", "Intensity", "Serious", "Related", "Related", "Action_Taken", - "Outcome", "Total_Dose_on_Day_of_AE_Onset") + "Outcome", "Total_Dose_on_Day_of_AE_Onset", "Maximum_Toxicity_Grade") names(name_mapping) <- new_name - res_columns <- lapply(toupper(names(res)), function(x) { - if (x %in% names(name_mapping)) {name_mapping[[x]]} + res_columns <- lapply(names(res), function(x) { + if (toupper(x) %in% names(name_mapping)) {name_mapping[[toupper(x)]]} else {x} }) |> unlist() @@ -128,7 +128,7 @@ format_ae_listing <- function(outdata, display_unique_records = FALSE) { # Participant ID if ("USUBJID" %in% toupper(names(res))) { - res$Participant_ID <- res$USUBJID + res$Unique_Participant_ID <- res$USUBJID } if ("SUBJID" %in% toupper(names(res))) { res$Participant_ID <- res$SUBJID @@ -140,6 +140,7 @@ format_ae_listing <- function(outdata, display_unique_records = FALSE) { res$Race <- tools::toTitleCase(tolower(res$RACE)) res$Age <- res$AGE + res$Treatment_Group <- res[[obs_group]] attr(res$Treatment_Group, "label") <- NULL @@ -176,6 +177,11 @@ format_ae_listing <- function(outdata, display_unique_records = FALSE) { res$Intensity <- propercase(res$AESEV) } + # Maximum toxicity grade + if ("ATOXGRN" %in% toupper(names(res))) { + res$Maximum_Toxicity_Grade <- res$ATOXGRN + } + # Serious if ("AESER" %in% toupper(names(res))) { res$Serious <- propercase(res$AESER) diff --git a/R/prepare_ae_forestly.R b/R/prepare_ae_forestly.R index fadc629..f1b2ff4 100644 --- a/R/prepare_ae_forestly.R +++ b/R/prepare_ae_forestly.R @@ -46,8 +46,8 @@ prepare_ae_forestly <- function( parameter = NULL, reference_group = NULL, ae_listing_display = c( - "USUBJID", "SEX", "RACE", "AGE", "ASTDY", "AESEV", "AESER", - "AEREL", "AEACN", "AEOUT", "SITEID", "ADURN", "ADURU" + "USUBJID", "SITEID", "SEX", "RACE", "AGE", "ASTDY", "AESER", + "AEREL", "AEACN", "AEOUT", "ADURN", "ADURU" ), ae_listing_unique = FALSE) { From faafb0930007262dfe946bbc38c5f59eb9f252e5 Mon Sep 17 00:00:00 2001 From: yuliasidi Date: Tue, 30 Apr 2024 09:08:11 -0400 Subject: [PATCH 4/5] meta_forestly vignette was removed from this branch. TBA later --- vignettes/meta_forestly.Rmd | 126 ------------------------------------ 1 file changed, 126 deletions(-) delete mode 100644 vignettes/meta_forestly.Rmd diff --git a/vignettes/meta_forestly.Rmd b/vignettes/meta_forestly.Rmd deleted file mode 100644 index 1f6532d..0000000 --- a/vignettes/meta_forestly.Rmd +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: "Closer look at `meta_forestly()`" -output: - rmarkdown::html_document: - self_contained: no - number_sections: yes - code_folding: hide -vignette: | - %\VignetteIndexEntry{Controlling Layout} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -editor_options: - chunk_output_type: console ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - message = FALSE, - warning = FALSE, - eval = TRUE, - echo = TRUE -) -``` - -```{r} -library(forestly) -library(metalite) -``` - -# Overview - -`meta_forestly()` is the first step in the Interactive Forest Plot generation workflow and is a wrapper of several functions from [metalite](https://merck.github.io/metalite/). In essence, it defines a metadata including adam datesets, population, observations and parameters to be used for a forest plot. Since the requirement for the parameters of interest might differ from deliverable to deliverable, `parameter_term` argument in `meta_forestly` includes several options as outlined in this [vignette](https://merck.github.io/forestly/articles/forestly.html#define-metadata) - -# `parameter_term` examples - -Prior to turning to the examples, just a reminder that the treatment group variable in the adam datasets should be set as a factor, otherwise a warning will be generated: -```{r} -forestly_adsl$TRTA <- factor( - forestly_adsl$TRT01A, - levels = c("Xanomeline Low Dose", "Placebo"), - labels = c("Low Dose", "Placebo") - ) - -forestly_adae$TRTA <- factor( - forestly_adae$TRTA, - levels = c("Xanomeline Low Dose", "Placebo"), - labels = c("Low Dose", "Placebo") - ) -``` - - -If the deliverable requires a forest plot of any adverse events and serious adverse events, the following code could be used: - -```{r} -meta_forestly( - dataset_adsl = forestly_adsl, - dataset_adae = forestly_adae, - population_term = "apat", - observation_term = "wk12", - parameter_term = "any;ser" -) |> - prepare_ae_forestly() |> - format_ae_forestly() |> - ae_forestly() -``` - -If, however, grade 3-5 adverse events need to be plotted as well, then this could be done using: - -```{r} -meta_forestly( - dataset_adsl = forestly_adsl, - dataset_adae = forestly_adae, - population_term = "apat", - observation_term = "wk12", - parameter_term = "any;ser;g35" -) |> - prepare_ae_forestly() |> - format_ae_forestly() |> - ae_forestly() -``` - -# Adding a new parameter - -Below we demonstrate how to add a new parameter to the `meta_forestly()`. Consider, for instance, that now we need to plot adverse events which resulted in dose reductions, a parameter that is currently not available in the predefined options of the `parameter_term`. - -```{r} -meta_new <- meta_adam( - population = forestly_adsl, - observation = forestly_adae - ) |> - define_plan(plan = metalite::plan( - analysis = "ae_forestly", - population = "apat", - observation = "wk12", - parameter = "any;ser;g35;reduc" - ) - ) |> - define_population( - name = "apat", - group = "TRTA", - ) |> - define_observation( - name = "wk12", - group = "TRTA", - label = "Weeks 0 to 24" - ) |> - define_parameter( - name = "reduc", - subset = AEACN == "DOSE REDUCED", - label = "adverse events resulting in dose reduction" - ) |> - define_analysis( - name = "ae_forestly", - label = "Interactive forest plot" - ) |> - meta_build() - -meta_new |> - prepare_ae_forestly(parameter = "any;ser;g35;reduc") |> - format_ae_forestly() |> - ae_forestly() -``` - - From d2f653fd2949cd06e908edb1feaf18d4849d9301 Mon Sep 17 00:00:00 2001 From: yuliasidi Date: Tue, 30 Apr 2024 13:41:07 -0400 Subject: [PATCH 5/5] doc updated --- man/prepare_ae_forestly.Rd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/man/prepare_ae_forestly.Rd b/man/prepare_ae_forestly.Rd index 3d43723..db6e851 100644 --- a/man/prepare_ae_forestly.Rd +++ b/man/prepare_ae_forestly.Rd @@ -10,8 +10,8 @@ prepare_ae_forestly( observation = NULL, parameter = NULL, reference_group = NULL, - ae_listing_display = c("USUBJID", "SEX", "RACE", "AGE", "ASTDY", "AESEV", "AESER", - "AEREL", "AEACN", "AEOUT", "SITEID", "ADURN", "ADURU"), + ae_listing_display = c("USUBJID", "SITEID", "SEX", "RACE", "AGE", "ASTDY", "AESER", + "AEREL", "AEACN", "AEOUT", "ADURN", "ADURU"), ae_listing_unique = FALSE ) }