From 31dd31559a07ad69f4fdc20e6fc1f5a740b2beae Mon Sep 17 00:00:00 2001 From: "Austin Songer,MIS,CEH,ESCA,Project+ (Navy Veteran)" Date: Fri, 7 Jun 2024 20:06:20 +0000 Subject: [PATCH] Update --- poam/2024/README.md | 0 poam/2025/README.md | 0 src/poam/README.md | 34 ----- src/poam/data/FedRAMP-POAM.xlsm | Bin 70239 -> 0 bytes src/poam/data/README.md | 1 - src/poam/dictionary/README.md | 1 - src/poam/dictionary/dictionary.json | 162 ------------------------ src/poam/dictionary/excel-settings.json | 35 ----- src/poam/dictionary/mapping.json | 1 - src/poam/poam-awsinspector.py | 30 ----- src/poam/poam.gs | 77 ----------- src/poam/update-fedrampPOAM.py | 19 --- 12 files changed, 360 deletions(-) delete mode 100644 poam/2024/README.md delete mode 100644 poam/2025/README.md delete mode 100644 src/poam/README.md delete mode 100644 src/poam/data/FedRAMP-POAM.xlsm delete mode 100644 src/poam/data/README.md delete mode 100644 src/poam/dictionary/README.md delete mode 100644 src/poam/dictionary/dictionary.json delete mode 100644 src/poam/dictionary/excel-settings.json delete mode 100644 src/poam/dictionary/mapping.json delete mode 100644 src/poam/poam-awsinspector.py delete mode 100644 src/poam/poam.gs delete mode 100644 src/poam/update-fedrampPOAM.py diff --git a/poam/2024/README.md b/poam/2024/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/poam/2025/README.md b/poam/2025/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/poam/README.md b/src/poam/README.md deleted file mode 100644 index 2bf222d..0000000 --- a/src/poam/README.md +++ /dev/null @@ -1,34 +0,0 @@ -> This is public project and can be used as inspiration for others or other can submit pull requests with their ideas. - -# Automate AWS Inspector Findings + POAM - -## Automate the Uploading of AWS Inspector Findings into Google Drive - -### Google Apps Script Project -- ~~Create Apps Script Project~~ -- ~~Enable Google Drive API: Enable the Google Drive API from the Services tab.~~ - -### Fetch AWS Inspector Results -- AWS API Gateway: Set up an AWS API Gateway that triggers a Lambda function to get AWS Inspector results. - -### Google Apps Script to Interact with AWS -- URL Fetch Service: Use the URL Fetch Service in Google Apps Script to make request to AWS API Gateway. -- Handle Response: Process the JSON response from AWS and prep for CSV conversion. - -### Create/Update CSV in Google Drive -- CSV Conversion: Convert the processed data into CSV format using Google Apps Script methods. -- Create/Update File: Check if a CSV file exists. If not, create a new one, else update the existing file. - - - ------------ -## [FUTURE TO-DO] Add data into POAM for FedRAMP Purposes - -### Data Manipulation for POAM Update - -### Updating of POAM - -### Schedule Schedule Execution - - - diff --git a/src/poam/data/FedRAMP-POAM.xlsm b/src/poam/data/FedRAMP-POAM.xlsm deleted file mode 100644 index 1a2eed895bd22f5c0d940c7164fd1f02e94e5bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70239 zcmeFY~-LBEhShyfP1e)5 ziL&w)AG3~1d&BxO0X`dkKToLpxpU9`Vq#zr8Q_x) zgO^tL1C&h8x5OMEBU)LPjYR%!PFYbj=8uUmCd{k5-=6e~?2~hQ>kw(Dc z+gvg}zn*f!BB4J%qk2JNk&WtjrY~=yB5dGWGp|cEkAY}?*C`>raufM_un&8 z-#&)@HoA_zk);DY-M`NN&*1-qUHyN2^~!i@*#QQ);488BkkO}wjaVc>Nf!aJ4k9IQ zU-5OsrlWbFVJjt;w5|Q~Ep*o~#Iu&f_A4Ryq=sanD>ci4% zoBGeyzzc$k7gfQvEo`}`3DX%qOUcD2@O+^hQs;ANXrm7LCM(sRqn1PuFW7$+O*zbJ z^|S3ciQRMzEqm{TGJ1Y|c>a{h991A@L3w7H79AnWeeh9lWVr!kxec;G4^)g^kNHOs zlx}{Jbj@vnIJ|9J-ZJ1Bl*|7Rba ziPACy3`jvwV(Ub=+3ezZgi0l_ND3}cg`f`;0;B_%veT5p$LK*0ht6@0)CU zISa3%OS8bZ)E1cHdx1i_fj<+=FkhCt*STY%c-X*es(?k*`Rk`@YLso{90*wRl;A}K zh6qXK-VWmwP*GS$mRWTLiyCDd2n1DTgClrqe2vBH3olgz_9@b5i**OB!nb>@GPd7k zHE4EdSLa6h&CLM{VT^y=mv2-|_ynE_2erVn5{Vqw-Ry?l3M=^DOlZ1UF!|opMm?*q?E;%AbMKY|rO28VPTy zkIwiHUslmMn|F$2@zDq*%gy0!cG4x(^E?HURui&!m-^c$)lc9^)t*QZesy&kBCxA0 z)6MJ*tIRCAiu8@hIpM}L-dT|>C9B-@M|*9hcr<1bUpk$J0bdhBM#meu1qMml93)V` z?G@8cREkZ~8v}m|Ka;&>3Ea%(u!wnDCois>26pjooWm7fU^?(q$!_h&C;2t|vLbfo z-WAYeC$)!`HBUw)JW^SHJO76dqa*;Zb|SE@|8c%L)2zZ6%BIB3Gplh=xk*%3B5pmT zR-I3XgbmDU5WAq{UF_yVic+#E(!&Hp&m)rR4~0{|?3wn{XTpiZnzi)bFd5U0vRmY< zUvhktNo(ZKJoY$SIwL@o;kG5$l2k~Y^m7jE2lV&AQ@H+GmXiH~c;$Chlfq)%JVObQ zuGznaR#~Om3Sf?;hZa8sM9L#rTmEQVH_aJs2dKonb(geT@OWsT)n{Tg8{iG| z)|>wUF=DEtpq>t_DxHkPNSupPfZ(f4$4Hzo$#jf@uzn3w&r-?B%Pjy*&k{7Ae0K7~ zj$u0svYRQXx*I`3>2Z@)t`vMUg=Dtti+Yrk=dC}`pL8zWhA6~(eh_S5Y-YIf`o zv_Ym+<7_T?PpP@lfofTDc5-Xq4brTRo4*dkCi#C0=>~0ouRo!2SeVOu({5SLvD z9c>IKnsFeV!k6nZs-$s9twZq5!je@L^ZDn*y>M3de1Qkr^-_R4E*LCnWvC+G3TY{AeMU$XVm}3Tzz?X#mbny*k)8zpbwP7HJuw=(W{*; zEl0K|=90?&J)sVK9ri4r!z~A_uS)GY3qyTKue#FN?#~u3E%kFnV|9tyXQ*5MH;ei& zZei|J#;Qm2Nt!k0SBT!f#MNsT&g~0WJfOXLQ0eMw<17|k59S^c4Pf+bXiIL1gPx@QHVF8ABg3)j=bF<=TtH=Elwafi;|9Pij zFN6<|&)xC;T2vCS(i+gv+Ie%(lJoKMFmfDIveoJN9z;M7c-HZG-cQNldjcg2I7I1s zz8$lf&hC6Zo!{#5IQO%G=B6BYVx5{{b4#LKCorkYX~Rsh zd&4Anb#<{lY;ES6$}^VyWv$(cDBP=MWdx+dEn`$t8=2~fcO0qIS zMT7HBt{f&i8W08rXsuS-K1pSWZby!rYdLBL@{*M4@ypY8+vo<6mqnn4M|-l^=uZJg zt$0sK*(bZ0=4q)6_+m+*ITEVV4t~Q(KDOeXdW13@ z+C_e-7VN2*>GSCpqz4>C)Bx@j;QqL8T4YRdX|1{Lf?%=KmSRA-Hhzv{R)TNn~L@u)UH85#(+&WK`E0-4;JN&7@o|Te!RLUrW zkmvoPrSG15>u{U9K?-af4(=G3!`U^E^eLd==Cp{ec_TFRFeeOz5y6cHmI~`%df&QeECoYr2?xgn*GKH#NT8VLWUn6MIfww@vFqpG~~II!v^pjU#hFIa9x`vV92 z@DDNwEptFuoKF*iaTg`HWnqsWs>K-+oKFU-uIN&eAv|ST*4y@r56fbqKf!r;Y|N2KA0y&~0Ea z4={#Fu`_>TFB*MkaIQa>`CSiT$g59=LvpaVMJnk6Z&X~aEq<90Qaz;6n9vs0VENFB zk$Am-Y*=Z0D^rU;;wX`xmli0_t0kfwNS<}MxI6^hrQv(qv@is`{>J{hA{Rl%#E})E zql>NvZO2z+mspk3y`-qXyvJi&wz)EbwnJ^sU1<}Vg}~mzYg)`IE?s==C*%|#wV*Md z>oI84^iy6l@w2zy8V#7d*BC3l7>1YzKI9DhiZG5;dZLwT_~m2&8fEJN9p?s?&gdN5 ziQ}}{xthaay@UPD!^Y7|q?YP(om1QVLn?Osqha{zqbcVo=13~N(Ls!wr!4_)7km!< zu$1^)+cvN!PJf~vA27j%JRHO9 zVu)yZIK@)O3naYw%>#rm=r?#XN&Z71Yg3Htek`%HTm@i>(*=Pn;>z|0Tfrs@3Pm$+ z!-lVeW20NH#TcUgc$V+3wA62sARTw!2o9AM`Mt(NP=|yiJ>F-j<+NW7*zTJQ;h*T2 zd=fc);R+ITPu0mjDiA?_kVSzvhK*3~k$fNrdAIo94*@pa;+Mcc{KEJdk@;8s4F~;b z5`!(=Az51?%l1@SkD3D|7|9_UcqDm$JFOwDkzg20sl|X2d548`@m{Jc5Fos?W}Uhy zp4!!I_`&Vqs?t~B0^&eS2**8Wn<(`c&3##RdLlxZH3d^4ClRC2r?{79M~>es*}(1(Kukka zWPZhU>)AaqGQEfuEYZ=AS?sjMexbCz$rPF?68No(A`iDW%K-0huk8GL7Xpf?1G)LP zwJ5M+SAZ?Yaej9(Vb|85gG+-DY%LhjHwTk5{!L&r$T8GaP`|lSEtJNZP(tK(ai7ka z8iv)x6#f1!!1egMIQ4H{kY>i9q5#hJS>hH09Pwb`08=6obFyt_V*&OMVk+rMCkB3J zGbZ~iVYqO--GlJ=n1El5{e;nZv8j=V%jyu_2Pg}&Tc$_Slz?0ioQNA3>QWXR8ZlF3 z(nfciT(k7*vGmGXU0FGbTzV3r5$O;wEWB6^>Sh2GQI)i3zaNETX&;%u!$hE}bRMu7sNp8zeoS2XK;S7#E@uf2+R4Z}Pkg!UAGS0G4!Quo_CNuvq z(sQiM-&C6&t|uM{8H;03<$s*1Jz=XJ5*mu;rD=C?KREg`Qk2P(_0edCmNc($CO_5U zy^C&U9>zIMoOPv!!X3Jq1#m;z^18UUHSB;h;X3G#fLGJ*nXsDm#j3zKt_zRA+A;$w z9V99U2e*hs;{SLk2!`&j$wyk*BVcv99{-WOR?oC&!52@sp7~DX?kR*Xq6+eoQ9N?h{&>Tf?6cR)}lU_-p?>+CBZr<1nDB zp=J#$^E2nFMgO$(cQX;dY5TX!CfU+Ka~B-F6d-E%pdoG8w?>t_k=l7CbxkFKsj2#A z*hHk({G~YDTLK!g3d+nGj0X;l>Bl0X#griPbI51atCxdP+n0 z3cYIB8|+*BoEI@t)WbOnQ^^N4Rp_1WY|iu{t6F-4QD)6|U4EtVDA{2x+$(r>j{8Z0 z+F6;2t%X|-ynee99d(AWcS}{0Fwij0b0k=^rl!q z>32Vu0(1M1+**4%X&vz5MYX~TQ=*(2&|0+QnT8r~yVA%mV&^wWnDAj%i5hU4B2UnR zG|wy+uToegRa*R$eHDM*ssPb-+_-PgeB|1o`T?vv@!1FX5lc#`OvOoW`PZmcPDML*9tGfu_tw=^aoD_9w{Rm?ZbVI@ z+3*v)#uRgI9FP=I3>dkLWoMI}ut9uNFsw}hJkUj+XI{p8Z2+|vJ8?J;*L1PixPwTw(sVA)XDlFnAN_7ntSqAX{u5X;<;e))hW?07C?6%o8YEw5SK zn+u%9!HJMsS-j@O!+J|o>)2G1P<7JDV4bXydKifjA4)n3KX+>U^Lx#P2n!v_3oSv< z_xb*7LK@A}kpKb>1ayG~1cds(gT1Mqy^*1!qrI86$v-iFQ0>ARrvv%JruT|r1{?-! zA%u*g&Fu79FezTUrEYIk#-Df;(LE*EwM+6+%f6}v<8PhcJYbEtdO1!6om zHky`cEfpu~_t{iwpEhMsmesDpWFwKOO0)6fOhv>@^f3Ebn!)hyy{SVJNy%F;sm+84?8zWU_{sdi9Urs^j)|Py&n_RqyFh%P|}RxqX|S zW!DHAg=M1)e7Y5QzyfpD_EepcBSk_A?Sc8pksU$K7VwQrtqK9-ts@ux^5^r&oOcHJ z5n!+3TuGD|fkQ_ZLskJ!HSr)fvPTUh=Bjz^U)Q-ARZnpA$TOnA*}z3{tfONSrWKbc zCm*@&vdcC_O^IX_=fCf+rO8R0dh$D`On(+V1!!WWQd8gJGBqz|<)O~9K>E6e1r(3+ zNwNwFLLgn2?%QAZd&0uhqf>4>Zbn6rN!i!f7b@WyFrE|PgH0wzJ^Lq3&$DI}3O4L2 zCZLw_a$nCOy8^LJX?0dY#1mfKhYRhNuh;U>IYvSWqyH9ukIY52gCptP1oNo?s-{gjCtDO=v^a6qf` z>nuibPRmc$Zy|)wV5@l|s%t=6EDPF~+FLT)yQU0`+y#mFB9PpUpxJitn_oJV#ssR^ z=(R-jUa_!2 z;LV@xyX7r#%s{Ly;3b5RNqZQ#?>=HNF=}=}=CNQe9OyqnKc#UK9fY z*bkKFRc#VO-~h4Z{@9+~E!u*7{*#h2Q8!XJwqU!7tdxYd4;%xVDk+zeEXYI%4LvWF zczTXdykn1qx=LhkZ#LrdrsDJXm!%V6!4gy?Q=m?25N4JDqt`HC4dirB{&GKbJ3OlK z2Yr+uXfKqKP#7w8oe^{|n@H|!{$auwzI`35q)z&wKvezm`yw8mTT}1|eaKz{Pu;;5 zP{H3tOdA`a*=5;rwzA(F6Z_Us1zbPUNK1ta2u1>KB2)rq0e#R;Is}L|B`TsJkbhhT zJM|dYVt(JVx5YnR=WfQ3@V$c4jc3d6@KW;A3*vGxs*n5{7pYc=Udg)r`8X<70>b&a5=svq-4(sFajOX+i%-Z{1hEe#n;MP zZM@zQf#Pf*m)6Xkv^WE52_vW7eR5k2rmO^DN^qtol-P9lf@3)-8lGzw%Q62zt735_ zC#Zl3G2>1+scqO-4_^lQu`{8Y-bs!mw)K;E^{!~iU7>iJHdP}R(?N|c1`#{@l{UpZK1jrZH z8)Vjijdh@T&X`OOopQQg{YRhnnOLP61bYJR1SHVq@CQ%1ldz*rm!1m|P$|AR2DqC; zx84WorBt7gs5Kq@sJI6uNIAQbM(M<+?|Ns2{lcc{jV27<-z(h(8QL8+=^_4aT99kDg6{vLJJuCW7blX(;S(I17!&HOtyS55`UCtM2a^JMD`dr48 z|C}888ls)4!4dZ=FOssUPG4J8%6<7bE2>%LdDS3_M-$wS=u}LfUwJqd$xjn>5aaf$ zORfW(oj|yad#$3fRA4sFUm6+tNTKk?4M0|0g3$ZW9$rd_py4yvA!Z2UCfe54XNJkM z#``1cND~M6`EH`XK0mUddjK5$A?~KTsaMDB3YNknfgSTULSo+*imyK75khh02*CXf zJrgkIY+kz&G%qS z@w&R)jvbLa?&GL9BU;-xP#h;0PwS|GwbMoh-co1gt^@~Xh!QCyiub{~9@fW>(Lu=- zVVD9;VO@N_*i2c9LrJ7YN<}jg94;M%E-_bo`96V-eQADzkn$h)_k~Q>`~uSfGpp@XTBk)s3sKOfBh+AGOSP>Wb&KpNSC{Xh`B3iBj2 z*WaaG!FAk{IJv1D-BT5+*A#D~{J6y98leMQt=08#y#AVud|28)F=bf^xEo*Oh$tvYV}&4@`|X9zV6ko@!z9cDO7rWrY3RYnGhKvtrjojr?cI6-~v41aP@RDG6( z%k4<_MJVu7Idgh8g-qwN{^?z4o?WC;vs3p?F_ot+B0yZ@o-+^JO~G8){MDGs?tEiw zT>QZzozEf@oH&|=xTu++wQoXncpQjHFF5sMD$I;8l++^-854MNJr_ zV5PRf*Ztv=9`fAcK~DM09C{>#Eq!f04k)w{y@|$Laki0$(^X!9;7itvoU&>BXp2Ll+Byq9Ov{ruj({Lgwnmlcy_ z-}iz9zjr@L{=>fi?m79##Q&7z{^>XgjOh#iUX$<>=;v=&kA%e_xZjFw#I1jhK=of& zA=Xl2pHM$M8gPwz4-Ran4_GtaxXW;i5#nh7wu1!i8(^5$UVE(m>=CGAKV3(K{>dGy zH&54{4k{xf5jGO5iUwO3Bv1N*Ip96GQWp(f7R!6MA|B?(F!mCGGgDb^Zgr~z*+?(b zbVa-Gr4qo&qoDSA9_>ZIZC%haC3ZU#Hwt=JJ?r;e`NJY&8M6 zd;CuA{*!?%>eV)>e`R|@KtRaT*JdrbI2{n!-cF$xn6ZF zypC*FTM}ZeKmM|MbGv9Yg%)cKC7D)Hd$HQ_=TB|3lnpc}1Kp2E95HrPkM}G)nLuQjb3P!M^DJgEfXAl|u7-B?Dns$&A)?6pwY01kOv&XX>WL^eqX>f ztZ>>Ky5P4!*moegNR;5`{K#@}w7?R+cR-MG5S3ubAUU97=*fM21gZ#?K-9hx+aTL_ zy#%(LL2o(G6BJ9JYpSR|;>EQVplO6cZa3^VAwd@ zJel$LCm!>?;eEspHI?WSbG_3`@(~Xep(Yo)I=$zP3J1)j>W}!E!p5^LJ`=nN@%Znu z9idKqnJ0bbFbY9YbhwyXp*B^m<`Vv3^;q{8-{x}9<1x^9Y@cY@ToQrb|Tn*F= z+{I5&i+2p^45R|$1EvX%#JAMjgWig;3=Ib)KnMnBj}8Axr<>}7IM9Pn7#0as(2I!# zuHOsKk1GZwu8Z4>+zOovWXgI4Yz_Pf(gM-~+yY9)udX~^_{G0{6zlKfXA>mbe^2+$ zDmEl5#uSPKrIN`fSjM6%>RW=8e2?dcnAh}Cxr@+YmyrBfl8%b=N0Lol zLEiqq8cKhh%Bm2#*38p>H!XWszWZvDS1B(HA8JHAHQGc9{q76Bm#F!Pj++?m3`PR2 zMg#M*tImMc7)*RXpg~9oovr1ljEAns|CVMz^A*Z z^2Y*KK9%|$^w2{x8zselYF;bEU*!~a0BXg6O7HjqZ0qK#N@vJfmAGiljK*T1@;#`Q z&5FOE4cSg6_6yx zEI!kD5mwMT0}e&xMir!^n4imI2zpD{eORW96oinEvc_)dh;Kg$U(vQiF9&5hF}R-b zpCe9y%X6kg9fQ+t-fAGMz>R#Fmt;*+gW880eV~%wT^GZ>37)2Ns`%!eZm;e>U!=}r z&N4N8ZcpAn*(=!`y?szd(6A?-Za$V~#;0fGv8UL3JajvxOJ3r5k6t#05l15Ah3`0e z9J<&%Ztj-&q8)bM5j+yKOg~{VpvG`U+xe>|czYtaQ1^g1{6AY;C&=zRK@$y58Q8i~ z7WLs`h~!l%JYqEmRk9RRPmP>Qf@mpsK%?BK_VTVd;26E+Y#9Zf;xvlA=yTimgwEMZz$CTclffJp=5(;x@`U;S;-a`mg8orMMOi63q(8u4D;C7*AyCXJM=dlnEvZ-n>~VgOi&x70S0_E*X%dU7K%EW@M$%jYiw1Gwpk^ zcX%cm1f+Q}(QJmhVxi9}s@?qkh!?8pvsr0a^mtZI39UBjsh@Ks`eJ!^(Y>!R4EH9U zOKfH3#)lq8vm!=cLJ6~VjFh_A=hdCw9#zH1?}V6~>BH(ZG&{5sLPp8KfKT)RBdiCD;M_53NqMgM~%v+WQ!%`xJb(O z*z+D1<%j9BeY6lyrx1~i=6$^A$LgIrQ_X}uYspRN?;`$9)Om z!N%I5)NA+jN(&jzolPTm1iJt#O>-C@(_;*tBkCU&0*bC=7!%^!Pqk9uZ~zvZ%b?31 zHd$kx6!EJZus6U8kNdOuiP;P2AdgL6qF&nN?5DKz_8kOl6*$fQ+rzz3Hn`EO)#@5k z*vrD=NtyCvr;N?tr*0|5L#l|XjZwVmg1NhyL$<;nOjSGi-At#zJcof&H1oB*;s*BI zLm9x}?71{l?c&U`LJ}AsR_?$1OMf+DH8F-{(qys6J-9#;3O)#I+B9Z2;v^+A0O&C% zJ$4c3n7jQ;+CHdWkR3ZU<-N(@q}*m(|@TIanW0^W%JD(ou*jcjG z$Vg7J1}LpW>)j(qDt~0C*N9KQ91>A?VIx;Q^XdE%mvu{;aS|x$4t$hGXqzxaH^OObZc$Q3po-xa<0sVDQ88V@O zudfFhKV!PDuX2gcW^Em8H{ed&?c3i zjnsO+v=tT^z~t|#{S2MO2F@dJK;6*X&t186a4g;4W5r&v>6lMZN>L^{-L%O)4;B8I zl_4WQfW=h6FBx=AE*Jne(?NCzCF9evKTXvJZ{oD11W!{()b{1#wUGxPp|iRPA8<_) zQdo&fh9ET9Gj&3};x9fF$2$ZUujLTsY2*-hK)tu~YL>%--p3QfRa+~=6K_WBZzEs_ z!UaPB4)LQ067}VS=!RMcUWfLCerCEx+orU|xTfgc=vDFK1HS~m1iu9Rgv;&fU)ufx zzfS4>=w0$N=w**Q&xElBZzIN$F^dkT+@l64)Pl{mniZ*(8;T)f_ z3bu@c$e_|P^&ECGHco`CDdM~y?yu<~z7g>FB|zbv8>l{^gmz85FYFFPHM~&`SvFje zAcB9@fA+&bq$#^#)j}!fH;ZCq_IOcIyAv}+l~!Xut)}cOwWJTqW1rD-N+Kx0)>#Wd z2?zs-rfyngTjeCVq0B2-Pd=>%YA#)-5#2NW$trEK*sO8@O*xa>*n>bVIu34vVWn{X z%yu{Rr!1%R^oXNqN6k{*JRwQa3p6R(T3o@hx*Mk!r!+msXdDr}s61V#sq#%Y{aR_F z%#tk4I5_&TLNe|Oh?_jwvTG_md0A~5I`uN?zU8=My5;%)sL+T^|D|qZG-+Jb)1Dl9 zzcYu1nu*0cw+bq@({_pU7Wr06j@wIkZ~fbq=U&ehj@ORpU*2@DjJYp4`RDUuzu)%K zw{e|Ii=odto1Kh5Rcze9!s?4IM>@xp>wo?DSl+Sed5<__b(cBEviCWd`|6aRNsu-9 zOr-O#C`zK$!S+)ls$pkfEEQJ3;7ToO-8y@D=;2h&b`o`+Sb5*I;$GgSZq0(sz@b2D zRBZu+?0E|eP^%i9dsqF1*u)(zm*x~P($dgTPyoPKULjasTwCaBav(W)vRs>6S7o}? zbuKTXz$bH>3&^Dh{-11a! zRNpAOwl3`#RXyq+I268br%D`j$0y#7zy9+0s1iE0aDRct10-~N+yr0SVxOh*fE;VJ z)+e=Vz70cMT#%(SX4;K6{9;|8^DPH)R4^R#GSAXH8);uZYqb?O2zim3DOU$rj4rSPZ`YlQ`O@`&yUcT%2<6 zCaLgO;xwg4PB?GglFA|d*y+%R!ue=7DeR6Q7IhvCR( zZRoL;{tiA#)gB-!3Wfy@3{GF|v@VON^<%g1GO%gHs3X`kuTQhynAEK-Jh7sW zh0ZJ4^lLTtfJYDxx}>#R01R2%gepn|eIlDx>;)k8Z?YIQsZ+`r4a&XP>M{_){Iy21 z=t>Y`?rypT=L1D7sJQ{CHp)t+awlm$fJ`Cn6D0mm$LU}5CTxldRaz8$xLsdtJjuT{ z(1`V}EXW&4N+6NODq0M|4W;y)$$y9AY2~+&5u?qQ2S!{dPCM8jQK#AQdB&5RItn{? zU#--MIq_ZK%)?$my{g;yJ>uk?%+nNXd7Urgk9uo)c@Pj>-d3tn@mQV^`MOE}yjCSP z+AJSj^-f7z-7m1Z)g6>OmCM*vwagQkO2B(?Q&ln2CmnI}u5+P8?%l6(;YSGXu|Ga; z;Layb>XD%$4iA)N6@^aD|@>Ki3XiC`t7gHac8OMlb(!aUMgXVqVT0~O+K3T?eHz(u5}L9&v`Im5-fSm#57gukDwb zHo7mp=}mgc_N0;8d(4%|o}9W~5uUYh$-i$>WI17vgCM3lY_k%g{^S{*6WSDa*e?Dp z^NR9V-ek`D*klF-=@L!#UY%>wYRrAxiL(|W^&yC&)t(hnzl=-nPMMl+^$qRd8Jbwa zQLRyo4u|9tiRmyS(HKlBB?rSR=(?$IcYj{Z%W`d#!^?1iwH+6^BNK6g;&Q^Ndz6*k z4H6hW;Cr|jcmAu0N*3pOG6>u9asjfqt#|8mJ;(Q3Us z^=xr+x^rsJ#ImLC=k8o%q2|{HMGa#@iliy>2L0>>KfO$|9jyQ(ZMIXpmKml=547je z&zYRSYeiXs=1*5)I{l(U0O5RPA@;U)&)~JBA%IHRyFAyIO>5U^*V?~Q%WxxVpc~MZ zGR`rg_1yF~)tYKv7m~cAviOQJw(`p`VD#0|0`tb^FC{kD*IN!#wvoiy;bM{yYX(Br zxCJtlc~Z*;`TgKu=cK1*=?R-|yDsVq@qDwp+mfx<^}?@iOCs<@`rS_>6f~(W zJ@tvIdDIZcFF_FD_5^n?-p(Gde368Fb-9oOLe`kamE@+>cN4`Px2m)S+khOlQ^*># zVr={qCgJv89v#Q}bBYGm3cyu$`_R=xGfO)*cN1PUzhc$={IcBHiK)XP>sv;r)uc3h z6~4||)gQ_8&*SZ9%H~CD=A{P=r`;pTc4m1@xaqjV^kie(i^B=}x;-|*CuwJ_#0tSgFZuc)LCrJ%kto6h!g<0H~;op{jAo)+{~`!16$LJ zdiuMuT!4G$CADnE$lBjsGb{67zRyv-E=fHDS1uf&pT;E(WmPLHQl{3wcTwIJvg9+( zKz^_r!qAckL;PLZ?H~CgDRo838@BRzQhxW}n@dCSOJ!^mfqAS!_WvQ4u-~AR154}K51O`Hp zx%d9g*CJKTT25S}Tlv>XMlDeeq-iFo5`*L8=A)Y}e~?ofqjT=pz9Ve1wltqldS#Pa zog|QGtlU~AU6#eLo#hY;YD=7Tu83?|)GoqTy09eAdY*SjVw9DcM5e#udS_*N_Ds3Jpr-Pi6=)&~*)U>+Iu36Q!zKKg zg8(Z;57lS=W2)|#ZG3#cX@w*P5yz(4C+4S-Cziu(9Ph9XO7MdLXw4kPwXeijoSXbZ2i~$cW+`mZt~(&iVQ`bY&LwKaUex?Ed=wHb>#58I8ogz zufBfn#K|w5t@Zl^mWS@^by;YOx65pH-W&n&eqeLm#7?s+V}F(FeVj%?4gabwwVW3a z{1@e#Oo{_XmfS&?cg-^l8#jIle_|YM(3L6d^Nh@0{E`e&%8j2&p`G{&{Xq#e*O6=X zoJ&(?2OoOHxakrFTe%4J0h|Q!CZ8=YE;xrNNZ#v1>{+;%Ypz!Vqk4yj>-|;L-edhg zy?hf<CBI5{Q93#<0^mCD*&&v+9E^qpwu?MF{ zgu;8G3aU_os^k~?+m%e&+{Y4B;ZTDS;SILfXvGKBg0(dU!Eo!62? z0(b&;3H@7cUe>m~K&^WXO<1_npAIh6V^(t$DxJ5B;PDWwwqyF`i6Uvd(MY;# znqa(+;4z3QiQ5pc)!1|>*7JOk!}s<62FdsNxd*`L`MkYq@%Fk}IbG4{`N$#oI%~QA z;@PsA_vw7H{5Y@5`Fv~H@_CtF>Un?7;rq;fdNFzBJDY51`MffJ+moIC`uyU3erd_^ z{;W~*dW!#$hXA!m2DS5YlNV z$htdvJ=`P4R@XOfK^Zf*xf?sXw{9GKwC$~5-u6wC+#H}$AIZH?D)AyD z$qE+HBrP1=zOtO(sg-)-Q|knd|6kWJ&}#3{Rn&M>)57Oj_aG{Zq2YcH7-H@EdwF&1 zy+U?ycpR@KP1jtn_{x`()!fq2iSMkY#e6d$cOpS%GBf#Oq2!UYU(t-UU*(DT{b2?~ zc`5UQL20T<`Y+Izsrs|4`m>?>@woibk|Zzplu6$0Gds`JUWJ?+pAs)rQcti1#|_Q2 z0mqFzS?03=``w7`Y0S<#0bnd9`rT}sih^(T=&p7eBk$Iz)Dw+bCuIDaL~^B1bn30( zahJSXuhMshs!o`ilZqP)cZZ^qY^JWc`6N!CGMjk~ji-!HQ!0?TueMHlmjr9(27vdR zm9aC26o{^I%H9Q?Pu7ajZQIGi1YL#r*_*9(jyP`C(PJ7*Pt4(C+Th-Z!<&@-MM9ew z`LrEd%k;kZr=xYwSi}3uI&VVB%iX`m?=YC(Dk-M#QofU6Zkz;K>JT94I-z@>( zSc{vV#MCzIjDvI0C7pd=p0d}fRNegzu>1xz4;R@}MM>0* z2Qkwn0SqZO8k6q57OZJ1_BOib2rj!!P6XQ$qMJES(z2!^$k5fcG$Z?#$aC-;4b$Id$Kvk_nW+#&+EN0 zeRSMXXFQo5GRMGgTGF)0Wj9;C@2P!$Wt`nPCf}X2V$^>-Fu}}xffO^qd*Tz*T`Y|w zK9#7 z%Ur9{7Uxn;+BcACv!avvn^GCf6kdYtxo^5ozUiv}=9BE3&vCqz@g&Y~KJ7KBmv+AS z?Dz(ld;_Y#`NaDdpGM4d3lXGzL2T0dNEu@8;l@2dS91^_3x#~DujWkMzRmMjpIst&v`wb&+EmPRUlEUgu6TIn@P}z-tpQ7 zRgu7a3=rOIWtGxCBY)0nFQX!#>~NJbVvRb=9Aq@Zl&=F*&j%0Y@k?&c%2 zs4xyeVJzh-4X8;b;`9tC}}@<}booM)_!ExSARSt5oV>!Fjy-bcY}9m>#FI7|9N_JLNLm#hy*WgnC$VBw-9^uGu(ij8I$h z0K<@hJzYe=J&5T`Huo; z#-0$-;3Q%%qPp!Y)qhk=q5o(^9h;vU)g>`H_=ZwB|9|$Y4ZY0F4}CLgSm$f=+Qlw&aBy@ zbZ%Ol#Y;TWpEoSVgM!|-gPk`R0`DO9v zV$D(wc{Y2iO!?^t8uQ_ES%S(|_((q16_LR-gf$7Y-tYK-{?bI_xd0a&c`XwKwS>}Aq_t(T|bsVKuilwo7 zGQ-1tZZ5w$p>VFUI3w>Nx7iaxH7Xk$vAwPIX@vYWUy^T$Cdo-HNXivA+vLT~&1=^V zksQvAb_v32b@&gQ5}g+6z|%0vVA$KdZ=Qnqo0A=$NE@TCO!@rj!gdF051u=GK^`Z{ z+J~kH!zeVo<&*ihzWzQJJ-=LpK462fRU)DmGLg(DSr zw9Mk9e#jypn|URM-smNYPx#n7%VQ}L2hP3RLem-+^NEvpzK!>O?1h{Rn@b9?I&AZ; zulHl^;l~*>gY`0RqcabiQ>+=l(ir>k1m8lYJ7UCT zPGD}lbhm~i$EL|94b#l*sl*e^uYcYJrBbmlX2gCB;U_j@j76j@*MZ49s}5?zg<}Z!&L6^rJUG3G5b#7TL*DV`HJR zFfnShH1^MT(}J;f#caO}dT?YgeZddUq|$~LmDrB1nL#@6#whouGZwOTf%h#BuBa-O zw2s3Lz_&GuG)_r$59-ZRtM&Laxh5@0oarv7&H`WNj}JM&z*S?j;wynSv0wh4lPliD zYQ^ViCheJ+36d$l76dtBG;d0};(M)oobTNp&h3c9cJem1i~abpT(--nlSE@UJ7+(O zxfXOT;S%;H72pKk(hSX9ZJr9?`gLg;XNi3ab$jU`dh5%Dp!Qc$=LPaoj*!`lNDI#N ze4!Fhh`wB*Pc0)5y*)OxSuw}8Bq8a_nWH(rWR>%JjjkgA;_(@<_$0LR-wB~e0vyi| z{ckrnQ26jpog_fme^L3v^uPt?3wqNTVrS;xf9t16_|8AEGxkFQ58+& z!P%2We+S(-zr+;o4@cip_@G^PO}l_cSVsDZ9$6BxNrBEo+#hV0q{zy(yM{cg472P} zMav!)hb7@%&i$el+-F!WVivoXi`ZJ-+IbA;Sx9?sKfAZ^l_gaIS~j5USgwc5xgoan z>E()n?no^cj>-MYWns;3HkCG&2eKPNS$~X+6~XGZ;muF(C;xz|Hp_h46P~eVDesd| zaSx8fljt2WsKnV_Xxom z@PuNY`Ebv%hH95EV|=yv0t&-Q7b3CaOzl8DLCpWv*={ryyOtdq$zFoDIf(g`+!ZEj;jSMgxv{R+xF%q)!#J z)J^mp8|%L!sPERT+4zx0$FzM1}o zBH807uM-5x?bB5kVA2+0GQn>nZ!(9&Ui?^b3XGs6YLot0%#-)1X3*~ z#%Tg%by}+hHCuDI<#+00vxf^FYX`@+Ue`=;uddaZBMjX*1V~NxxbbmdsQ= zGIQheMM4ED#pAjMYA$8D9}L>|rKjzMW{kLCOkbgleyn5oncX_$*NBtxWDT{F0e7&4 zGC_nCA#@RdZbmaE{a-N7)U7QFR#&hzIruHr<}_ilFNRCZl*9W*JWi8ofgcS;yE3Z=lmZ)H2 zJS8ah&6+E+>K>34&2sn5O&G0E`wTuJv8ziAl%;z~oMz`G*nZ2!aK zfq-Xmk*N+s(Mp11x%dyHTqi67Wda69Sp~?ty-Y^p6~b;N3rZ&3Br~%Z7p$E?y);NH7AgX7J81H*s@IO+-`{rB=aT=n^t+AJ zaaV!-cTu-$9M|5*VS?Y#*Gx?#F$rGQ?UBu^S2BrG6mRxyihIj$(tWb^^Et(`fkZEz z>pds+!g1?zDc=3nFJpKy>xv+cO{*|*q}wJQf&yvKBnO%(S}e&WDK=Y^I|$Xsw$|MS zI`ww?!9#YOAw~(sX1xQ1>5f44%awM6hu&DArn^NbL>16VO7qfW;Ilx3(;=qZ1l1yE zp~l!&c~h^7R^wLnFp%Y4={8P@ZFa2`g3JSL^dR2xF;LT^3#`uQEKDQr}kk7_7c8T zDDW5peD@;wlF)YjPE7g{Whie6s$JvXB4v*|A9_bNEMq8=Eu=MkYV+;BbebmWI7jgP zJPho%R1p#Net8@=9CJ%q4L5@tU#N{mS?@!po?0w7g>p#tO#M*y%WB=cyk}Sa{YG|n z&iu9iu9l9FnbO%lA1xhvvuDh^!-pM}lo|Fs&~lp1o;$p~a_Zu#cs08>OojT&-n$=Y zl{RM=AKG4d=yeElNu5!lyp6D}vNG1uT>WLiyZyU;UYo?e3M0KgQmpuevC{jsnIYxw zaE5!Mf?|h+Rkw7h`JMJI+*YoA`r7FyIR1o}-(EdJz#8vt`-X{pNHaEUVq0pp2!60v z4eg7-!`k~!{>4lFD&@tq`x#BXo0Y>s$C9nr=%v6oDb~n1yC$!~ab#QGz;WoK9)NKS zlu36y&=UUo=_W_NzOHu1(PxZi9Y=b65R=#M4RKGu1YJ zY-CE+>?!-gA=4aUo0l#Mg`{l*Uc*I#u0^D^qZMr~z1gX|CT?+<*0ErktfsHub}|g8 z(R_2&U;psV?R|#Y+ARnFGMay&W0bF?uJYWplvJF;vc*e=pV!kTdw+( zP+aAUd6t}iCB^{|zsK9uHWw@P=5F(u>S}7zo!jR;6H;Y*#o_0P(L+8@6(i(jHT9vL zcEVS+nRg+apniD&7{M2L!Sk=3JY6;MxU>cSM%t4ffcEsbx__|MQCHt@i|eJPv4agR zuMWZ95?ja5Jj2nU6@8A}#HF$JdA}|7;4X0tc!cK|{Z+mS8;dOpBe`&N*P#QTwJKi4 ze6!09^RH?*vv)nSGVbwwM3xrg^;r08Pb@v`9w#_+9k4NmKNmhiNJORv^pd`yJX7kl zzilEdHEgG&2Dw7!XN7u6Yh=JqrMWZDg6`4&CCkOwu5nc;Od7te;7j;SNd-va`63$5 zZ=$=^lmJ|vp$_zUcBU@ywdV|YDa>o>F~ylPPxgy`_0gIWQcV3Ps_6!mM~~WZg7i99 zM-}oj_h<_wxEOD2k+m=!W(0B@b~IW8Os$0NGJH@)@ZG}#_Wf+Ca`y0xmatzw-LCP~ zN_C4{bqhObUz7M#bM^Pz%8j^b0ky_Mi8t;zVeRHmaSE zYPR+fuN$Nz5VV?CKToBbB}_R^)N3mlU4#>6ZC_$r(Q(WUC#>ZhAh=fZ!B*0&fjxNt z?L1M+1FqN3<8Z}u5D13WWR&j!#T2?hf#Sz=%1yYh?Al%1mUyym3-3fa&EvDLpDK6N zjj$Im^O^@}m-K=ca7oG*{foD$>w~Li2{S^J`uZssozM%~)9q^em^BH6Sas$r` z3gA1IyJ~LT-E9&_8!y$qcz*K~N5?Dxy#Cja(KIj|LP~e_%)KP|)ty? zz$)}&&uK8-)NIk=YVw@&lnxVWz;-a`kHMsDUU}~F7XFIN0>_{1(?LM-(~#e8d5bJ? z?fB-Rng2%q>T8aEqF#;upmLu*TEw_Jw9V9CZ)>{3!x$fU`1Cy%Pm{>2@VYwq{$_$Z zs`D~g=(#f!J>OnDZ_m7YEH?j%8Zn$vZ1YLk(_b~dE?(01io*&1U^Wl|FdmS#L|jDH zz%zgjyyV@?D{oH(rC}`ss9@+LRvEK71=k)YtZc@e+N>^5?jfJ`7^M5^jG#?MdWXbf^x*&V>#td zRuIg;3x}U{z2oeMl9cd=2Q`ng+mx6J1j##C0@mceIieTxth%Kz5x1)3!ZJ?0eu^}% z;N_~Un%j*?!Qu(ke1zA_gl84bt}ZPrp0LIghLn0=2~!4~#boK`68Yp>4EEYqXfZMd z8`mk4yU+A{;e=Ioo(cY3qfhQ$kqVfe2V^D8++V!MG+mfdiR8Ms_z{x!Gr(j72vd3# z#R4lb39QSp!{qKCM>83N-KB+#FC=A`&sP!%whx-<(Lhz?Du+C%ZTsnBRLh&T+XNSw z8h!CMce(Vmf%XIMRSz_klkuucy*!ko*ZPMQAdkPMImJTmp1zmn2}A;DAh-=R4(TQQ z72HH*2)1s3>4;`6b@>ZeBE99tj;d!b9fU!-= z6z&x^pK-zzNyR9~>w7@U6(A?(-r~g^ptYB`9Vcw$A7Dxb%sGNDlcot%7Btcm2zs0p zqfF=uqi|1^E3hSZw|mg&ca)VA7>Y7#^6ix@rQ4yp16JKpPjnFAVuT!hPoe>>f1lxM z7vR$_8I2JIJ17Up=?BOE7psBD)k?3ie#S#*SiOpgSrmdl+ivbXNhf0STdtPq3l1hy z{@u8P1h;z2R`Q{8Xj8T!=L5UFUvt2bu5KBm0j}dNPIl5u-oH?ypKe062VD>Bo;rL- zO>mNJr6Y-K3?&}yJ>des|oNBkNpo;<0r(PVwgT1+BT#1p%mmPU=d7+qZp2DNum>AA zlnGN3n*yI-z{=3=MS9w zSzK0(3GGGGPf_Ozg4LbI;+Uqf`Pa^C<#B-&;NN$v&JA>@(}$7sf?(8-xgxlLcclxw9h$d7#*QR%#|l#b$c4gs|HtXS~+}Ga*-K zs}8&j^QWh}<&qp7M!XYjCH?M9pf0*yRDkz3d&vN}h)Eg)7ZdCygWw`5X`2|h!%;GH znJKh2BW*vpvTl2I6r9u($jk(foN=Trk*atqr=u0UK~ro zZIcFW`I<2@dRuq8Om%l7JJQevAw* zju6-(1d{ua35QU^37@|=z`LBZmh-Vk%Z~r4w&~jCT>FPmJ8fl4K zNqCl(sJJU<`Rc|+fvxJpZxRoX?eQ+yAtdXL5UHRyZPA-&4jvGxo2b_R*#7ny=}WTt zMD<6X#z+(WG{KWYFHQ?Sle4UmKT7V88zbUtP@G0HixVO3V<6bU+T!kD@|H?Joq6Beqfi8EM&XniF6U?V>>L-#Xxh6CvnI;s0f{ zfW>T6J6R{yqEPu?!Qod8#)voWh z=TT~{_j($&!47txdGS0+sI^{a{kx+C&x7ekTGBQNL`3#_FtxMb3GG8pCEx@E!8J1U zSf1GxPjE{5QgH$KycE%zmn6onK7N4+%zlI}8X>rK5h0)f&!S1y0iyywIwId+5TzAEhG@ou4SNt!y#yG3e=KArRH7S9=@Pe1*bal1r3zoI{b^pAL^fm~{`{EgyrO zS)%0r#ckC%5wB)V-bOv$O(6QstkK7yIFn+0zSfApMoet@MkADou0|Y+bG(@$J21r3 zfZ3xB5*L9zSl5O1=n$kvPCte?XfY58KaLSU@)0?r;m3h=>Iq%W$agor48MCu2=eam zsi4cZN+$jaVq)CtA*%UHnIZXad^KOwaGMWAnunq17n_r&zJWg5OIt(WIHw(50>Rj; z-Q0Pkf|v_*eX*H`khF5IVCB4@YBg7ImH>b?*mahky8hSFoqDpv9iKz!jT>IN}l_o23t(Q)!XiLC9XlyX-_qtmSidd(Ws+991=uX0j}{D;u;1J z*N_6Z1}nfd-a=d>0^k}35Z5q(xQ0K(HAEqj|n7T1}omHt_$Xh31$hav>*#jhvG?mtS%$EO3|K5a~dR*XrldC7DP$_v!(MHyQ` z@QYaHs1z(S0khJ=|0nzk`N<&stnc4#%_=f5tmR9fbr!^D-UnEpska%tA_r102CRuP z6?z8JPf}>>i(DeoK-KR>?mt3XV*OSNxCBWyQP!~QKnCi2ZKY;h*jwCt+i)VR6+jCS zV7Lk%fvA~1dyBEvBhHq~B%z|L1xor9{ylA;I1%ZyKw4beaVRFT$80O9dILWSe=>NL zCEGml0VhHVs!*=U*-v*H2ih}2dNMX=HGVMS|7%aTb08;B?z_#LqEI*A>vhdTPG>bX zHWSb5UK)zfDI=JU@dj$x)Dp^JUc5v5#pXOSf6zyX>1T7Y$m;J?`o-S-UKY5POcXMOrugg7ZY>E&o7$OM2)^R39c3C~&hDI=+|5-d>=~lQ-s;V;MOn5b1-aFEu|-+)9(C`DF_FCa zCB#{994oC6W=Gq0Eh;-jRA`T12`D_q?+mk3>UsV7+q02(m#tp1pJ7g$?Em<=W4Pq= z=Z3uWQW2%6BVRvb-)Z#>M~yww)E;a2Jny#k^5Y%4PXYs|%|2Ftn~rjY7s1E{TQqVJ z7JcWEh{^a@GjN$RKIntC#vmlM;G#?eBkKX?Y*859er~kZNQMm07ZaEQ?psb|OMiIK znWPa%O(LnJ#C2x?p-7TNDDn`B-7=7(>y;o0QxKP<^vLt+KC_p|pf`{~>0;oZNpc79 zqLSiBID-(1!?6g37D6F|P>jkWgVrL0HXws)q#=XmAzkKgN3VORD#)NbUkGgY7jIm7SN(duDQiYHtA|#c}2+1pCRCf{Nxw>%F!JB?2 zV?D-~LS$nsXOl>C*cJKWMeQ>_#Zoc@mM7mv<=sRCOxO=%fE@TL}qR#vLsPQC_Gr~PzgnQL55&o(pFVB1m zest?ImmzQFH6!7z*;;Yr0la9vIL_Y?Ag_^$@bELj!=J`<*dfg# z8~7W7RUW!x%z_8ee))Zpm2-Tavu=0??y2 zMm=bFI7bj`ayX}0L60wfCf4gyOm>E|^0-3lH|eI1Gv+2%q1VQuIjhyiZmJJ{_$F;N z$8OF%N)Ke^fYza$8B*3V4j^@X8MnOdGqW36nvdP|;F5JNIuh`V6Ic)U@l*LQkdJFz zNOMLqXN^EQYm?z$PwU~_0lb@K;dssEkzv2c$$FU&hlu0+qjVs$hmJX^8nKKIJa?$? zR7YmA9qk{8wfVr?Ia(*hLWbvq(G~;3af3Ua3&_LM>Ff!>@O9ioLm zVhKg4<_{v&g~~;|>HIh8!2SLF@uDVU)Vkh48mfT$H?^HH_gLr!hqMMKAPw{(vSvoa zIX!9bfP9pwjrGi2$_JL>Wy!ay(k8c0F*8#pV>dfh6#3(+D^8n_^BDM=^2Jxz8inx% z*o8FaFdLWy$q0awA#cJr@;vra5>V&5BV5`t!_TYx>b_sCxb@S8iW0)1#nTTpMnq_X zdcKU48fDZZpM8}qRxvXOtBn%W!GC+1oD7_wn2pCM=T7l2*kGsI;(4(1wF={+<$Cqa zA3i)#?G_cy44xhdsnNGtsH)em=nv>Opzp$vTFpmW%=Nhid+LRUa^;eo#bdd}-HmNC zCyl_G*37cz7a9|F&BTu=`3GBD5JYfla^9>xZSy(Na3FFp`_3dOy~lV zK5uTe!*MLHX@42YobO-bOnvNnxB7=|BQnp{WA59*054xrM`W%tiG+7O}9NbTqvU$h6ytvcn z?MInB9G}+ReGqcl<;4K@Nbk5n+yqG1R;cdmB=(Kk>lPHG5DA(m0gE?nb_3LJNh{aqQPWmMW5XSbIFzRM{k9pw<49ClFmJ>YtbC!(tdp` zZ;y_HSp8jIYoagv15!8J3wMYlXb~B_zudIn2fZ|0y!1dX85S>}p_jv&UTx2h^oMIE zBOlNaJOg~dPv{2(&jsu`Uk};Cpox5!ExO2e2|_;RwpI93ZOf1;#-p8>!Mmh(hJW!zMwCMcTW=zSmr=qfgm51-GI}67dL=UY6||E8 zoQ9^JLkL1B!GsXnp@bhHVeJ?rOD(3MlgKaU-}GFN{};J-o~jDweidOh7!(SO*ukO^ zSVru6=$2j^ijBW{ANUe>0$2}---PzfV6Gq#kfy9;tO-G;asgkk8diO#2g0*5b4F|H|i-pQP`*aCKN%s|Sj^Lix(0 zL#Ah~B)JOX-=6C)K$y1lz1JZbD_GR>e4@4bC(&6!u*yT1OIxIYxP>8<9;gtATr?*U zf>I#E0CM-+(}n6h!O6rTl*BcLAg!AV(z<@2sH14y1e6yVfFhr>%Af}1iHRp=RlaS- zoJ8f`ib{mz)D-TC5|2eF<*YkpKuR~nHNQLSOAZd%;|CMOh}tzLz%Td91)@C2M_qBt zn&=fIUpy_-_V3^Ohcdse4YuwyNVdapaD2ubb*{GM4Ie2VVeD|ch@8oAeTq5Y6mC!t zLZN#am7N5}Mu~p931tj)CBvPTGt=0JsKlyxEh;wTZ@_r3>yOW?u&TDN$ujUoa?+Ff zF0M(iwgo}EP#^uQ+#m-YI*ol9(CBcY)@PGS!PL!x@G&n}&tb(QyFo3p{?{F+o!(f_ zbNS3f^|ejxVFD>FcdeQ!W~ygqPC?p;tRF^Sc8NWxfQ!skeRp@d248wa}VP_ z3IJ0EJ!b9B2$>OnCx9WY(l{;((jMFdh80Hq<35kvn)VSS%%PCOLk*)mO?80La=9XuPv{50y|*=T zFU*F|1}D=fYdr4kZKiNn?we8Fnx#w_)GtUNSSfi~=EOO##wIIlL=AFzn{|{bbtlTx zpp|?C7&ztvDgw({4;jK11=wAz!Q=+zA%_SNj`cDIvLqCWPVCE#AKwbhmI^HA=URU+ z@)_mu_-z6BxSoq|1$qnMM_*g7exr4^Zq<%%(S-XbQW7_Q#G!~KM7X|+ymgq4x9S30 zPYTR@$D2;hVB@(npuUGkl#+OI5+}@Tnj2i%05#sl1NdApYg>_h$B*nt4Jo;M;2^u* zQ{_Q(CCk)PqLj23)z0FF&Xk@IhJV^K23;Q{ci;P~!a{`Vm&^&hvCGxRe8bx6mshg)^3rAY&!cZtTl)0ffe2m#NDNFI>@T$Pfa zjs)^S6>E7JsJ*)kcQg<=!BeErf`AS^{jRod6F&TqwNy6X?oXUX`ThGNl!lOvvl0~m z$WWJP?weL-t-88U_=K)H{kS|dJOpfiyrTm*yG!^q{~HNkuUk~(`DsY zoV7IP3N{v=EiKWDF+hy)RQEb<^`egJ{X6c1e9r&MRK&z@+_730aYtRk->ebI%GrIX*SEKw@stvYRJ^V55XkLVoN~4( zw^|m9!NYaWNT3Tooo}e7-I`&qMu_DVmb(} zMq70~H5F~V#m#ejJvyi3Y6>*6T5T&NFRPz87mhhfIvAgaod_Ckj>jIw&JV|97Z&QL zf_UbKy?9()IJiuOgFb)=Ocgp%z@cu&!@$UYZz}{*S*6Aq;LW|c-9S`UH0I;v7RV8f zx#2&i_ZnWv*Df6&0V7HQiEpZH{CFJrkwEy^C=Zbh9|c&uk}=tR6XE}=`d1Wpb&y_D zfy$%PME4;G#70SGStr|o+4oBmIs-4G2oD3#Q2W`@2@>^OECin6?D%nn1VnQ{SYV?- z?0-1E1AYLG5B%K5kNY%e7P_0OUYDBH?jbo0Fq*<3KMHrx9e$&>6`e-swP?76DW7P= z_{&Xcf{N-zzGYBEVWa<9F+0!us^W$2AzQE zw)o4VZ8RV&tzoTqNyKCiOklBDjA#GG1oQ$||JF$3t9LEWochDA^4C753IG8De=sE3 zOm*9uZr!TUq+1n1(6nc_zljV9k*!SbKx$7VPAsQEXQNDutqck4sGhb#F}Kld@Qm;b z_GMV4llALEtm?;!;L->LTkAc#Ee-Ncz-GORfaR{f#oelNqD?7idaxv^T=rbUmw!@5 z66<|A9w#av#TLa{-A@>^s|~P?CLA6FR%-P2hhdzz%>lm)yH5HiDmPe1qKiCe9D1!ZKCoyczh+YhWLF<3GU7T_b*JjhbN%WwnE+P6R)A1`y3XW$ccNv0xNly%2&K|NfbP&b*5HJdw5oY(W-Ne3Kvf)%W=(Hvk`gHG z?(>G>S;Lzry0sd5Jj>$oKdr!5tlS_=kWb9J)>`RL?Y2@AKJ|G2Jv3aJ{c6kqs(Las zo`y&BtdqYw?5{e&BqY{nH3Kw3tK$izahGX=%oRMPkFJ?nU<6)KOoXngp8$&iTm>Io z0xl;x>7T6J@IxrRqX6H<I!w_E!K6PrvOa zF7K%i*5;02sg^ioa$ZY0TLdy%?#1*BkOIQ2g+siTA1r$P3Lqs^)G@V~61_pa#tDGG zoCU_c#oMN2+Y+L(f}cM?7#KHa0D$Hvdx5Um*0Cyw@gd)znEwMhSxE_(3q%{0i4_ZR z$S1(`jUVCC3t{>1Y`~92!^-6ul!Bw9IKXwD|KrjPEZ2aS)&i@wdURbr1=i)hU|)@B zr4?Xmt{7!NIBMnPUi`tz^WDE3WOf%CeALRn-j8w(2FWbHUy84Q*icl>oaOlvcJlhL z{&}JZVH0(w+X{y2Ph?%ffL)I<5Ip5VxHGl@Ku%2u5)J}&n4)N}0g6L{{kKaV=t^7A zXGKSVJM$?DEu!@Uk^BUV3CKrfc4fx6k8;SKv1kpv5I=;AR0} zzuXi%@bpdO?w$p`G@mTzfv!6$+2~wDthd&AEx%lzQN(PC0+mh`lJJ>Nm4#nr4Q2k0 zy!>Fdn?VJ)Q4D1CZ_$`vS6*lf6s@%Nue?@L0yV)jK*;5fQNVH#b%lP%Zd|ibd$3u< ztJ=}4QD)9u7yY9J82m-#)D$)K9H^-eKux_UilasV^Gp?+Err0TpaWvFkwzP&KYW*E z#y$_hRI|#g1I6V@bjktv26Q=L>~t_wTqEFW2T=W~R&D^LLVryN?0HG6iKk}ng4Ox% zf;gVSy;aZ6a(hjNYvaJ?eg%i(nJQxWGzbvrJ;3kaU1y2p4VCf`OZG;j=P&qw}&@v#6 zt06Pr5f~&r zYo}w;=SD4;EOy?0k1E>=@PYGWS@QzL>*!Go{g0R`q8RW~ugr;|J{mRMtA)Nxa48bT zLB6dDfBvZ*+5_c{*Z`=2OIa|)LdGwPYQHbN|G3Hlln_79`Oika>nUpFN#>vCDuD$b z6y_b$^sOv0$s^|wgFgKnG3b_uN94v$K?u`=_+;|}QY0MZ?&lidLKE!!D!B7Bjvq=I|gn%1dXAAruO@pY}1BjQ+%Ry8QV2T?# zJ_6v(4k>#0q>Ues!@O)00>ZQvd5illqHW*@mWJCv(Zm$Udn1r*k;^)x^T1Eu+(wq! zz;h$tLoC76#R=xk0JaH}qQAnZ%b1IhJ%(9o1X)8dwO?@7<(TWQe?t@&5v2cu!s3^^ zPxydvsUbuROrloz05I|&#(d_=sAD;OfYb?|5`zF=MX?(SsRowTlR+%?21MOJ!WnWJ zO-++XivrlZR`^H` z`(5X{k^G1?Q2XVP@oIk~t^&!Z@F28{nA&lasb_0xEc}mMulctHn9iZwopVAjj2aj3SFxZZnBc9#x zJmmJXf2uSFlzH~EAxURbyo-AyI8B{}`ZIRIGsr)Sq2~+!BMoeD;ZtnXg(RRc0Z3LF zA^LGM>mF!@aTLr%qrvq?kN^KAT>lKJ!C+hhiKEQ4j@59=Dx2r`cx?h%)Ygb~$LBxg zU1yRu1m*maKVQs^*8#s?iK;g!dH9d&-3Ib#EEE7c1#ldiJ((D&-m}VTY&moW<1jNM z4c+C8tZz`HZ4pQ_-MVst{A*ehE}1#kwPappSq%-uD3rGitqGRWqf3eC*4nRBR$1+6 zQH5BvGE!6lYgT}{M~jW7L(!NDtvTX`8Yy@x2!&BW2WY-wk&MuceFHh-f!4N!^K5`dl`!h#5}`f7ezQLF*c4Uk?& z3y)xtAV@F6RXIp6!+JxIfkxNTLDE5pfj}BDn&nGO`qd7s)q=2dU5T|7wM^|!d`_x`J)Ab(=-`kA?0 ze;5BojQz_c#==^n6(0LfOKO$2KJH@k;mmq0))Zg$!N=m7#e{A+Rgu1oX2(6o!Cx}H zF$U*P;rW~7^%Jd`2{t#J8^Eg4f)$xGy(?G&oSxyDnKG`HH|yTR;h!P{LIhlmSP!r= z$d}XZ2xI9p0Jjd8bQ`D_#gB;IgmR#EUTe@fh9=iUZCYD%L5xKFPK zevj-SebNPhrGiZ89Un6JI2%84^ORn^I;0vI)Gu>{L&qyd4`5VMwIH*`{zeu4@4CGl zQ~@Oour6_hgC0Ypa1>;Rj0L$|OoJ7yNd9g`H}E%-+nxjo@{RfBCHl8iv!#vpD~l(8 z!1aqDDq7&SdTE zYgw4@5UpnjPL@Lu^DcT&$k-1|x|YS_k~^Xw)VgI4fgeV`k_|$1$27SYhV$3XcTdNu z{@p#ktjvkvW;BL#F+5Yx1UY)NczliQhybfvP{yn{TtNNEe*y=-LIQqQd;qe@+%O&U zSO=n{ayK!s>=Y#4K-dpb#faHAg9Yv2Cd{b93^NcDkUoZh_X-ji4?OvmrK>S>?IL6( zjs2f%)A*Jlpc^vk(2x_YL!3~fu9Xx7l3=$%5{%rPFKyzFP}?fjeHqjSliUc@W=+A& z-K1iJ?dNIBQ^B$=%(kgu=jYRgd2D9d=xsK5Evm^2g0^g{)QGg{eZ>x0UyD# zc6rl{KNdeVtiV|c&+8zOv0oGcbtu~bH2QqkhN6`&eg^dyq=9+uCoa(o1lat2W1 z2CB6-er(aHgk=*BDrI_=X+j|S0mXG@+C3K+)IDUHe9fOh*@jOI^GFLd#v|HSNkZvVQul(Oj+lZG++jK!`o3A)@@3VPkT*1jA%_v|6Ic_x9VZoM{ zf;Lq}AO(xW*2=V_wXN&}MN4UL-8}GnqmwQmO*+3={6IX3hVLLf{`>H~@k=zf(Jn^TC7_K+ z;k!Tov2h5(Aqp@WU$L2Jg+D;o;EOK)=ltjQ{&33?bcP!_ZYif*+>}rUQhez8*>rJJ zLIAopfJs}RLNI#=lgy}-fU7f*XM?p_VIDMoUbO7cf!o3CHe`U7c8JkJO)Q5rK zC`~#DiLD^SQk$*hnkR?2WwdcM?=4U7ENk+T^Q33ftC<5I9yQgph9cP8V#jrObwoUn zd^pAf$(*mRVg`j`^x!syS!A0+^6XmMjsCbzAq$i^S~p2sb>aq|2P!w^=|GzIQR(*05qpy`f+bnDjNXw|@-hA>y?GCagqX;F7vw zqxk7}bk$%2!SxH`Yv@$js%(o<0iQ(qJZ1D9P+t>qqxtkJpiZv03{am3Fk3TrdcVcw zeDjLjX|a(8NKMZfqvv;2m;jJ~-UqPO3An@>X{e3iM!<3Gz`PGO_s*Ew-V8CglSO-h zlnZ33;g*)-tb3pjsQxr#dG*IU=~6yaiaP`h4cx?!eTeHZ3g2_NzsuO7+g5%YzpvgP ziziny4n;)Pb3|DDon;#W%45)4m-S?FVRfnqr3l2-X#l3){E`$Dp^8+37@nyS1aKW- z&BnBmqKK`__L}{L?lprrNe05G6|wqnDOV2z|0bRO^(eAVaOmQ&AM1AoSv635 z#2uL?gr=p@l2X#eHNna(wK!6C#EllFl3vb1@EW9%=M>UogSC!Omhk=;S>nuI_omU+ ztoV+ljb`@WH=6M=<^&?Uh2hr1KbA$T@Z``t??Al!@)i7gl?*}Nkk#Ms)_7|r*PuyQ zu?ZOF>3$9$V9Qcj#EQ+q|I;Sm??UjO*LqOMR!hk&#%F^dK1)UlU!4E@76ha?)%FkY z>T4fVGx9j35H$6nR3Hb~8#e4GjhvxLCx;9+V>t~SEHK*0-ZQYh83~mF(HIHrQiIwp ziWq;rtN$S-3c2||B|`;PUzV>0qc3m&f4+ZsG3QMz3hJBE5jKnd_xdKVc@Qm9WOJwl z`--TLi1#gmnuC~hMWp>F!wsG4cRsEkKgFu{>&UdTR&1K0E~IE4E4f^Cz4ylMUAwl2 z5bkxnroSt7D0e|!4eJ!z?To8v`1IcZa-5rm&nl}_gu{L)J`{leX;Wel6vfp{PgUje z%?O#RZAPF0fmB`pYpV{jSVFNZVz8$_8(93jD`6glXi4ftq;$zl0`UgQXkzV`TQL3l z0w&^YWDpW$A+U~k9>wR7sDAlI2A*g_3@A^nPlJGKLI(K7A8@JKU0_>r2mCh(CNF@} zwUO4~gk=nM(0t0h<0J0t*d_O3eq5izeV}i~5N<23&k7{ehd&WeLPH$`GO&6sO{a7x zK|PEd*nBoib^C9y5C@-47Crq`=>`^YNDTMuUIaAwnn6L?)lBY^DTe;R@mExBeJv2l zC)~(#4@QFH#>kHX1kwTLl9L`8@rU1n_;rDXwm|nl_rJJl#q|KRq*aa}dp52mOc^^` z*a<-LK_#BKQ7=;K`F?wbi6rhEe{uPsIIvtB0lQ7C%t37oVXiOP5m?D?HGD>hN!bRZ z;Vfzx%leftj%je`ncU(|Q?JP?ds6HX8|8V6x#_k%?Cen6RBslK^^CRRz_P7{5J)53 z01%h8c_lo8U+z2M6VXT_Tm?ZUlj=Zwutgz09Mc{H*3`_flukw&!Z=|bvaq98M-{+k zR=EZDGsgWdfSw|J%F=$-vPv>oL}!+H5`t`EUI-ot&@iwia+Tu+um)3H4XIlT!CT(` z2uc~m-9UxihK~U4F*mfjOdkj^I2#sn_f#`gBd}|9lrxygQyJ_pt)U|jG@1sgzF-Jy z)px0sdfNEODTVm2!64dMVR3a#vHY>r5tcMUmb*2DAlq4ghU=ELtghY;!MvMm*GvA`fEu{8(bN=dG&TGVoI!gG zFuCQf{!f2{t&U5u+gBabDLiSQwaRSQO5+7m%mPYj2tg%lI8ttrjn-M{LpxDX?1vU) z{Co>p|3PEWfk8-Ct`|l^%!fIHlXJ}SKw5>!4_Ny8F1TIc`gyJF+rXli0Dcd;-E{7v_uN0mkkP{;Ywk%@)fQS4i~Zz6ulKa>Pc|9 zq^|F6bscO6T&oA_sFxqVkAarPRB#+xkJE7JDF9Wii3@EigDM!Y#z~woQx&k_?kxdj zjyd2zkCp%fuV%HDxo5C7wy7Cyja33Aa0fkV@w}rkmOEH30u&2j$e)6|RWfogq5fSW zerEN0Qmmug<+C*)tJ~E7X~&~S1oCEIy*awjb912sYp}snI|V-uLqwgS3_cG(Bgyp~w`ai6gqM#tiB3+1obZgxO( z#2?EEgu5%!16sMGDYxY4od*L#WaxSe?iqb9PGafHy#h!q@(~jKFN-8%J13gct=gY@ z=UlsO0@m{O@8;S=@~8b|tjD`-tg-W>m>_POnIW4^n>Jyw$f5MgF8x-%y$h#K#YFdg z#_^7*-Ga~m@3|I}uiBTZV%zg~U13meHdlH?H$51T!f?ou$)F|f;?8R_SsbHfEc96< zG&n7)d~803_U4+RwZ*Nvt(oA*>4hE(HyU(=$&worJ315YEv%2)Gc2f{-{>ah-FwGn zn948R)@>~6j+!a;b0_}oSB^y}6?NENd@(pDl5x%Iwt%rjoSe$O)PJ76(d6UB6V;Nu zd4S=J{w3Nyrc5}uyC&-W#t)C{@V`!N(6ja9Xxj3Z%8L_QiSd#x$L`Ilj|zOlf47;B z_c&3|vw!YBz)xfu4cx=-h(F@P>ysb!FZG*!EyW*GeDj|jb0NQ_KNH-1q^V@9lEk@t zZM8#E9t*A_waGRN2N=`O^vCVM(Ve3ak0d@AA-)-R z(ulR{>41O18D44qIv?SGy21mhL#-%EhDk1Z)L;C&KP18G=~w=;=&;!P##qys?Vk_w zxuwz6_gh4mnAc@iC{&Mk&(P+-^Q_bzp&YyGU4j?)mzs5vI1u!-W|qE=`-g zu_;qY?rg}FGab_ljanZk?*J0OF33|cDFsQ zac;b!OKDep3;#LGi+Qc_bEz}AeF4$Tjvlvy6Win;Z#v?0R!R>rHibij zC&leA6BBrA_rLy7R=ta_cif!3NoXtt*D|eTJyx-|&9D;C^S= z@@$gH%$Cg-$(Ne7rxt|YSDkpeE9LyT*%pQ@kv9yWCOT#B{EIhJA*?;x={Ds2DJTBL zw02pH6$(e(mFQ-wmd80X{4v1C&ew#L-0fb$!P7G*yh;l~7WQo0_CSJrx-5z`){|_^ z=a#7KbZXEF1g{L`_M=Jp_8IlNe)!X@{Y9VZb>?Ni1g4w#$CO& zpXxVhv`FyvX)^8f9Z&WiE3~F9Q2mx+JaI{9ICT?Ae}N9!SGBkgu~ZgL$}gF)o1vxI zx=CDU>$d%ywr~0y7@cFA5*%FqiQ2Jglhn~on+}1NJ392H`nR-=G}Y9Mjp&in8M-^V zI{xmu`gN!G7B!32nZB9}JSlot@7sK0` zkCSI`VCQ&d>D>GRWZDnBbPF%0a>N&WjvxNC>P!SrF3$v?J1ZvU{wb+*qLW|0m5q%? ze5n4CqOkeSecR#=;|?n>XH^QB=NXQ|dk&ZjsxnVb-SkR`p&feR6DsXb{^4}BqD(TG zQ$N{mDNo7Q5B3r5@z6hZaQ|dvbL@?NXC_*@H(Gi%ewh?bar+XU3eH$<4ZGktT$y;r zlYW0^j;a;i`|?)$0uBzk$}bq13dt*N!rdoM7R7dsj>Wh2dOJEB2VyTCs&=8xE;hJ3 z7&)fu`sKN5*x;+a2d}Q}*j2AqL?qWfCUz^`d3lQg5pRINexO#}p0zq7OcL;Gp^ahfQ)C zmN*zo{j=PqrQMqU3PcV*WazzWcD@luFxu>|8$9s|g0~zPnm%L1XDq}YWfM!jedrZ` zI{%eFozo=W4x7qzBqCwV`r^!I&TTHdzUAJu%Fv*yq{@{?PqO?)gIuP$&hD|BP5z2I z@MMN;SKdw>Ny&dduoMR!ihn^P*4L9G7Yy$`VtDLk7r9*E$#U$~`1ne%biSh1fP z&DYJ61ys6ND-E|OMsBt(Dfc6uyU`~ZvE}PkE3=eEzm%z>QJ}NtD~TGVyO}3z8arp= zO-`4oEYfJud@;{bvdZ2ouOvLyk7M5s3vQF7m$*E|`SIa&YzEIPD;+F({G5`etUU`- z&KRlj(aD5;ktinaxa46tB~8P2`!TM-3+_guFuG`)QIH-Nc=p!h zgGC-*ErI4o{+$OST->)EzI`d4Q){~X=t6wv8d}XYb4dVmc}JQ@Zng8&`Z;DMU^4W-30wnXsh(rfS63=nFH`uVT+Lb!S-` zmtA^uc^lg%seL!LDN+30*R<~(`8;LOw&AZsgif3B{7RJ~a`Zj9uc6Ts_^w3r-Zq>rObr`v$-Ua-H;6IHqY*!!l zVR(um1Q)r9na?rJhqjJpUe(y_*0s&|_3IHfzn)Eeo`mlA)w{^To{MC}#WX8>WW+^y z7!$>YmS~VQGN0nDoTMP#Pq%9 ze8ie?Lm?F8Msoi%;5>Wie33&!{LK9TzHY z9PK^yN%1|I1aYz1x3AQqllS@mzxKX79?Gu&pQNi0N|})@l{?u=iAIB>5-JpinoPDx zvdfaKRYmGfqmsDMqMIxslkM&b7S^Sqwt_461O5BQ9yk7g)ax zAGYFtDaWya@AfkUsWNv(42aPgN9ssR53gd)KGb&9vNniOD;>Dl{hkD?Ppu`%;e9Ud z<1s%Y;YP3>&Ou&otU0_Rh-_Ye`t?K3{Qd4)meEI~a%~I`|2QdrKAV2!qG3h9VeXGp zu}jRJ+;~DW4(WUIS;?VHL9Hq0>GRjCV(DCE(r?f7v+HZE{E!f~OU@!!o^hpy@cizZ zNIA#xi#sGDh=Y$kC1j~pEyjXdGspK|FLPac3a@s?;tw^&>ajyrMxi1X^{N~+s`fpz zrH0||E3Uu3Yq^~J#V1>2nvU>hjUPGcu4Le}o6UEqdtIK~y08F)&LhXCCCFC|8hO@j zXW=cl7}~&l?l8ywjY|$ov&G!BllD9^epk2Xbj?-#s==Q2lft=mUv9SRRg~YXA4_)i zui2Ws^!_J@v**3GB-&p-&#Lz3te>$}$RLM9*yT^DUxgwm^3pteN3W}u4JluB{PNVd z`bI}yOdMNGB7fknty+7ti9XZ(-wjN?Qs4D1XZIoeU7^-H9G`Zuyp&U2NrmNS8&{?O z-esOX0*@6B3;cYry8r2y(!)-N@nPN)CP#h#Pzi~@Jgwuf?UA`)Zpz_AQYGhkZ+2bl zq@AbQH91xhjCs@Fd>uYH0{)lz8?P?QMF{1PW9tkjiyXR-uQ81k$Prgq`{kk-ucJ~` zavz;9a6^m9*z-NSN5n?$E*&4Z zMlEKQ_=^QR@&EQGEcl>(-4?DZJ#0gwi$%|#?o?2hvv?68+wh5%bEWhtw;vWt{5ING z-Y+TgnY0#k?Q->xQuN7mAG~^Jpdu;0oR!VE=S!Pc$R3V|eHpIf@~`T=caE>xWadE7 z|7yDC;jO6H&dHr`mSyGU@M~VX94#+-|G{3N;7v(OLN)6&pY}#B36bwKr>v@Mx}kV; zyHe2R+bvrQ*GCu2sh(bvALB+A8hQRCLs3Swq36&I7OSyWrzB7NwT9Gu2yH6D#TlN6 zGuL@M<|%LV(_OkOFJmtQFCFn>&%0)Q`{nxSchiW`to+nKezde?oG-tT@_ zymc+6-?MC9Hz>IDSfaeruEZuImSe^dE{+wv{+)Muc=Xq8{b{t=JBjmMt)s2#NyeeI zx%$;>2G)MLx2{{7w7(}BlCd$i@)A0Atkg)y8tJxdUB)13 z`bPDMk+O7)SJsPAOtK%ukXu9tR_~}bzg5U9Ez&E#dvi$$Z|LyHww;O`Ww(wr=`O_UK#x0dS{BF5w!>5x5 zyWZ5stgvAJURoU-Uo)cd@~*APb^oR!huaD%OC1T@tg^xgePd&Kscp!P%{RWDc(q?{ zQOS*4V~M$GgR;h^Eo@~MQupOA8E)!x?HecxtqT)GsN49-x0>`eoQiOMo$Dr69mY%R z*(H~Kl|$J7hU4|iMz7eC0vnUrZdrzA{lT$_PkPH%7QUT)eJeJN1g7xB3$tF}v)+B4 zJNy&7xNiz;SpPH`ztKudT;0C;pvG&uZSK==aXtf1{AZ7+wY~VfZ$PK$ZvT%mcbj#C zw^k$MICk1aE}2z3c}3GK2Rk zbYEJsR$3Ht?V9fG+S#ic*p+dWt=o^i`B0;pL5Aq|r&GOY-H|#yr&Zx@kd1R zuxPumY{;hL;+qbJkhXhM%M?BKWpgW%J9&~0Eq8TcP`+=~{$gmkX)vP6LuP(GT`nVZ_0t6Q6%vV*|4ZJ>2; zd}nZ_PkH6=iIVX2*MGl$wWg+M-Abtt2iEmgS7mCN-tWy5W z$LHxZvC)32S5$R!q$1mQthJa&)pu$rfAn>8J_#&k4KpHqMkeU?suLaA6J@HMJQVNI z!DhOu_e39^7LhgC8xfJ^HIm;mJ=K#n+TDD!ak6jxrmEMJf}IQagWbb@l)Dp_Cy^mdt#ukYNCoVH39x%)QSF|&7i62pJfT4D}y_N1_yOU z5tWIl2R&J1t#v%pVbjkFDD2Vxo}x2hPd`E@wufmvWW+d&xRyqjdXy7xD$(_r7vr46T}zWoJt_$_CAu-4 z*b!#+kbzz#J!BZry($P4*V2D{ts*qKmbyJ;9H)ED{~BBBQ9(#hq8rdN+rvP`znx87 zOVNv}uBAE;8As?7<%EBHjd%X)TKc-wql(a@L_bc?><9y`qZjQTGLF$FDhb)HrE|Y> zK9ScCdh+435g}Ac<6^7z3!xh!(KSx;yNYQl(ucdUZ@ZS})TJ|vrZD9F$XTWd0jg7>WW7`7JS zB_ER`JruUn3V+np69vPpf*H0h;U%TX-#iqQX@&Hf38LU%R(u1tm%>XvC5w3~?4=d9 z)d(pIKC%iPu)Pyr@+H~SQ{f=3@MjHCSun;KI+{I{#U2~8y>57|_jl+?x= zpWA*q;bd1u+<)LAZEmxhiOz4;NkrGT<|JjeE+oOd|GGwk`_Og&g#Yk+|GlyFoa}0d zd-EXGEqTbU@@q-$YvXf@r~k_ryEA6J%RckxCDOy*cs`S}d3A?88=f_~<#Fn`H!n*d zZvSt0ZKFFW7D@+M&((BV(O&c zndGyIr`;Aj44tXWDydB~9#=Tsc(SW5&ig^Cee(Z>7rQcsF6S=d;M^g-Hp%bpqBWfE z(raJ%6{$&bW=OA1zEz^8#5pRxA?4O*H7!np%!X9Iitm1v->tjDkph0?BR^8kkJR%c zE&NC)KQh3NOz$AW9Ab+@TyTgN z4!MLw0&&P491?~@9^sHU9Fl@VGI2-&4*7^f%5g|N4r#$5oj7CwhfLs*#dw4ZkF3HY zLU?2Y9+Ac)@_2-ZNA}>619(IqkC5?*1s<`*BQAKv3y)mFBY}A24ju`^BaiS%93Dx* zBbj)l0FQjcBjtFc9*?x(kxo1^fJY|q$YKG6O8{9VfCvd78w3z(0YqK^AqpUS1dsy) zh`sTE4W2q^I{YN!z#gnP!hEB&c z?ZjVG2Mqg##Z-AxKUvd7yo{<(ayqVgR=ketLh3)R=`P+(y+d*` z(exDWpr(-eO*Fm48Psx;6GhWUe4IK!>ZP!YDo5n|QPcSq^3GG!4Hfb(P}4&c@-9-- zD;4rCt!|0r{zzvd`Y)H77HMapi4|zs)oqL{&=Q&mUa9+K*R{c07Z0!0GM0E8dB^|o zI<1fNPv)((<>^Us5&5^MO%JkYR#^vPB{zKSjCd4a32?ium;agG9w;YcTKV~48QkEt!N^&94mV3=|}Ii7st82mzGIQ zssD0EJ38Uf-4M#r3#SC0Jib>rdG>v}Q!I=3iJ z?&TZR6T@2M;nfo+*VKiZ2&*Wl9TL4-4Yxt$jKP^8`gcfW7=eMlf^Qv&UNKg&bkcUQ zui~PPNJ`Kr9gViM^#jc-+bXyp8%!+~QKGJ!wV-P%)MEs)=;O7%K9|x}R(F~il0C1|Viac(-_=QL9CoXa%Shr1TQsR!! zYAsbx0Nto0Vw47i^l51n;-79{?G+|vs`+K*d2#=Q_Pa;>CajHmM7cTU5#G`X8cm*{ zfkiKXIYIw+Lt_C~QxB<9`~)hPuEQ!=SYQ=yN+;ZPq2%s|7T8g=vdT3_D| zVBKbHa&5QpJ(}1?ZMztW z!=PtU#Zp?(J9R?<_<@Nku^y?DLr5`+BH#g8ZCU8-ZN+esytpqKoAl*P0cgp=9uocE z!IAe0NhU*RsoxxXtT9<0?bD&BI`p1$ZjbQT8;!}P^?)==`aOjqDSSMMji?^8Snq?@ zLDd1kDiWnw`^CmiN#M0&N|*u2RvxJm7&%}KnS@gYB|;Z#;52{-SI8tZ zMFHl$6@|^BNeT)c^&25%*u(12{ho5rbc;_Fy`2K&s&N#Z+(^yh4qCM+Fs&Bs^KhM* zHr98qQy$8KkZ1102Hd$%!{?g_1*d=oer^mK6f7NEVKsR@*{9GryZNK2Q=wciP}^YJnFF__1#ieEBcqIB_QQC*E*EelC;T` zgulQs0a<(+o%U}=#ZOmxH(a)qacm&<#zC%ql3Fn6ii=P6s{HKDUU&4nE|}$|Rao4h zA9d0Lr`A>d9vtYboyJV$C4=I;H=&gw0OO2AH5LN+Ut(P;2my==s6MH+Y%R1|8@LZq zv;G)rDlyCAr`m7`y)UpK*kJYYOG9*GKLOh;J_BrXp6-x>-44ZW+xL21qzf`em(Ud5 zv*aR}r-VCaM&p*l2vW&>dp$N$>2>`z$A?#Up1IcH&Fy;(Km%V7q2Yh*yJtlH_YfU+ zIJT?xx9i5)B-0882RXKaqvtMqNcvY%-dC-`@4BTV8UW1z$7~NlT z4RLOm7jfBRXl{{-2tkR4ff+#e4K{$6X!NidW*5dWl@64UCYXlJ z#_DmTdz}r0hT|k-hP%LY2ZvGVH4swBT@+I5;q4~EBL}n_zPSt>(N``ayJ?g&Jo_Gv z(mTOUYYe9`Mm?Tu1Q}3Tjk<0M#SXqtYL69)o&3{0RfJ&ZO*Kzdb&9K8AMr6d=!eI5 zT@41&F(%q0d`J0bqK;6zbvS*S@66YY+^z#&zwc-q^i%RwK_3Elz35U-Xrp#vtu})M1@hB>b#(bZ2iJV0ADWL8Uw2M2Ig10I*`4=a_L4(Me z3&wB4!!!kYBg+I{>qf`d!KzCB?&%AS)E&Eu?0a_u?>iV75O4SFjc>7acOtSHLc3 z_W>#Z2E$=SL;jwLnaRwzhLNMU4-&9_lC6qR@*nmRF%u4U{#L4+;jS zKpQaI$iE?oHZ9biGkF$*;ulVU!h-PQOd02Z9zF<A((-^CFa(L&auJP9qszk^@6qggCzjCcVWX`fDl?u0B@620@H$E-D6xPH z2qKGFw8|~RT(IcvAnJ-m>@c?jP$Ij5bdl$-#;zs|=RmcicxRSNCL9QrC^OE(NB`32 z<2FF@f>#420UV(U`Uhqyc%fDA1hfbiK2dVRnuXyLWgR&ti_R3Nk%(7NNrg@`#vD*| z0>8P3XL>*85iOYC+_*gIb)L>iq}-$7+_Q2RzfZsU7dN}lVMjD00{wDjCA(qt;?0fH z?o5jy$(u1CW>Tme0atY?0gjAagN?ESBEkF31#m_=}uE^8f6PtO>cx}?o&-ZJ0~2#oC&Ef#F!@2>M)@}9T7t@R9HUgnc>y5 zFkc0|f9w?}lPm=Vp&y}Q8rm%jS_yiMc>E}M&}2DwrDXR%V9~E6#q=m36H(6s%NDSN z@B?ueAOHxjSw;W#EkgthP*5JBF$2Xhsyo3f4_b9PWBrDS9BM`wk?O0VO|RuMP5mqI zq8JM$%n6vx$lJe$I7FDk%_wgEW#Gi(Wq$@MMu2t+2zVjLNSQoYOy>pq8yZG+K55!z zqL2sV!h{9p0hptYu3~3;z#LSM>MvQyF#x9tfw}nCa8Wr9v$uc3<<#n#7>vS)8F3U% zP%?HjVv_T(@@5v$l@&G-bR(!Ng$ah^>)+WZJH@rXPpTCq7ljFag+TKSy_t`J7V`*gH!)&c4sM zFV)^Q-ZdjFXNyj+(101uIwKaDik9wdhRNQx(K&(`oJQ=5o}*l6ge=5q|0XvEaF>GZ z(8lC>U%h;Sm;n_NRX}IJ9BsmZ54s~*zX5pNixn6tv<6RM%rXqYH0O!Wynmr;mdS{y zN{WCj=xqcyh^h|L$K3Q_#PfkVrL_@*{@!7~+3p0gJq!%-DCg)IpO_JyvMBN$-$1<- zV8d1ga(t*sQLbbvGTiE=b2SYn#jxOb=MRhkP~MysD6rVLx8%z_S+x=kzSd?;NikPN zVvgaW2v!=rP>KfYqSzBKlLM-_4X%GcP|pNA6ypJEO#RK2Q@>1w`3T_c1p~0w#+k@4 zM<#sOgsHFJt-#=I_e0EXQWz59jLM!(F}PIHY#Kl%<}W>s6Bb}n1z5iWRN)Qi4Aq_i zvd>X9fhzMIAWqVwj!bf?lBbl>n2GBW#Q4gescx`1G8zFf!v~odT{ed1K-&+{;$cbx zblgy4&6>=|%M+O%KPS=n@&r>wXg>ZcI^jyzEjZsP9YjQjFP|MM@Y` z{GhZ5S2BSm20^ejYWqc<^CYIkj2|%L7n95}A-&}W7C_*-1X$^XVf8W{IKV-eZ_QRl zGXhCRbivv74P8(qG832wz@zX?p*y=Mj`+Yd+f1T^vFg+vOfbXDLYs_6Pb{N?Y1bc6 zYIQg^d++!i?dl*(3ZuV5VZiN*hHPxT4o)fx{X!yKV1Zh+szDIb1!&;5`&Y1z-ZtYL zaFriK&T%w;V`?LV-EX1XaT$;?Ginz8sQ}0VOdMrAzrc*YOc4W@ZJ@O$AfFV=te??Z z9T<^dc?>$zg+!%OF@|_7L2nsCB{(zB0*bm`sS|S!Uui71W6GMTtQMMDw6AGr&}FpQ zw1Aq{ ztN%sRY(4oPr>=)7H?j67hHaD&s?aPO6<3%)i|B!MxnG(ZqtOJga)6F=&d6s{4B~f; zJOBj&r3VJ)%QMF*L?}`Jh!sGLgNc%Z%i^;%DmKYCFD;mN5?>TDwL|=CY`C+f1ar7( z+?bPZnTX}geh#Ghm_og--h(bWpoEB}-@g(t*taB;n>U!9L-`6tMb$pAh6ffv7VLLI z_Fq_@4}9XrjQ7KGA&8*)H+3D;ivqlZ(02{Fx|yRmuco_;as%BfdwKHw@HgPLV37iw z%4$*c4(1zhY4Ue?#r}ZAbGPaXlbW#wnwbd z87F4Oi5V(GL5)$~?5K+^iSpbfJ)FC4!(64vynX{)$6=l`x%`t zq?|G@6cg3R1%%kY&6?Pr-1rhUG_bKASNmXPc_w+kB-09kw}Lq-pi#?<*v?jK-hz z7<9hiwR7ZAV!%j{dU+qW()4YmHDpEIi`UYuUl>LU7&XVOD6?p=(6@@;X8$Se{`Sw3 zFYGM_4m2i8yEIEI-?lnqQt#f_=iN(-xfYdO4BlrNHq4N?_D#v8>5R)Fche9qw}3V3 zR*#~V)D~^g?6TmU3YyAluvy*q^NMoD_|H7+QE{or}kTJ#43l*e1zYu-IhuI%Hf zjO!DTbR%=b_EVEcqe{=8_V4YTS~mVs_G~qqzSYkcjWKpjQ8bBsk>Mj;OQ&#PQ(*Xt zx}wewy`-e$`XX$*K$M@vT8^uW7AQVO<;eVk0qY_emft&27nkH4CITSTE@5He z1JBI;981+d!(pmh}Um)&Z~)fOAgmpWw&;6emkt=gqS4 zIKQHAk!LLdyt!;K3(J~06}iEVSg;cos|)wTn%Uc*hVNdmox$SM&s0Gh<{T_6JagLd zU-oN9?Mw^vJ27td_>40c`cuLA!)Jh>cY{v2SX-X4#Ex=w2 z8nAK<*i8(#5C8t8i~kz>?9Ig67V5{&Gh4NDK~*&{8S8&H0lv9yn%@dGCuozXIToCe zM#vvANb37FtD>`reGhGjitE@B$fGda#bYeki#7omTgAM=8bAVWqyBt z_hf!6^S4(2?nY?Yf~}w%t>?EgcL&$+Hdt6Z>R4Fj@8_Cdd+s)v*|nX%&Z<4LDQ154 z`Fja|H(>h>9m1TQ1@mjqr}*Es`M6l&EX*VL`R6F%>uR$D?|{44cv&_>N96_}VfjC| C=POqL diff --git a/src/poam/data/README.md b/src/poam/data/README.md deleted file mode 100644 index 8b13789..0000000 --- a/src/poam/data/README.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/poam/dictionary/README.md b/src/poam/dictionary/README.md deleted file mode 100644 index 8dd5460..0000000 --- a/src/poam/dictionary/README.md +++ /dev/null @@ -1 +0,0 @@ -Using this repo for inspiration for part of this. diff --git a/src/poam/dictionary/dictionary.json b/src/poam/dictionary/dictionary.json deleted file mode 100644 index 9834aed..0000000 --- a/src/poam/dictionary/dictionary.json +++ /dev/null @@ -1,162 +0,0 @@ -[ - { - "field": "POAM ID", - "description": "Unique identifier for each POAM Item", - "type": "Text" - }, - { - "field": "Controls", - "description": "Applicable 800-53 Control(s)", - "type": "Text" - }, - { - "field": "Weakness Name", - "description": "Name of the weakness as provided by the scanner or otherwise summarizing the weakness", - "type": "Text" - }, - { - "field": "Weakness Desription", - "description": "Description of the weakness and other information", - "type": "Text" - }, - { - "field": "Weakness Detector Source", - "description": "The scanner name or other source that detected the vulnerability", - "type": "Text" - }, - { - "field": "Weakness Source Identifier", - "description": "", - "type": "Text" - }, - { - "field": "Asset Identifier", - "description": "", - "type": "Text" - }, - { - "field": "Point of Contact", - "description": "", - "type": "Text" - }, - { - "field": "Resources Required", - "description": "", - "type": "Text" - }, - { - "field": "Overall Remediation Plan", - "description": "", - "type": "Text" - }, - { - "field": "Original Detection Date", - "description": "", - "type": "Text" - }, - { - "field": "Scheduled Completion Date", - "description": "", - "type": "Text" - }, - { - "field": "Planned Milestones", - "description": "", - "type": "Text" - }, - { - "field": "Milestone Changes", - "description": "", - "type": "Text" - }, - { - "field": "Status Date", - "description": "", - "type": "Text" - }, - { - "field": "Vendor Dependency", - "description": "", - "type": "Text" - }, - { - "field": "Last Vendor Check-in Date", - "description": "", - "type": "Text" - }, - { - "field": "Vendor Dependent Product Name", - "description": "", - "type": "Text" - }, - { - "field": "Original Risk Rating", - "description": "", - "type": "Text" - }, - { - "field": "Adjusted Risk Rating", - "description": "", - "type": "Text" - }, - { - "field": "Risk Adjustment", - "description": "", - "type": "Text" - }, - { - "field": "False Positive", - "description": "", - "type": "Text" - }, - { - "field": "Operational Requirement", - "description": "", - "type": "Text" - }, - { - "field": "Deviation Rationale", - "description": "", - "type": "Text" - }, - { - "field": "Supporting Documents", - "description": "", - "type": "Text" - }, - { - "field": "Comments", - "description": "", - "type": "Text" - }, - { - "field": "Auto-Approve", - "description": "", - "type": "Text" - }, - { - "field": "Binding Operational Directive 22-01 tracking", - "description": "", - "type": "Text" - }, - { - "field": "Binding Operational Directive 22-01 Due Date", - "description": "If this vulnerability is listed among the CISA Known Exploited Vulnerability Catalog (https://www.cisa.gov/known-exploited-vulnerabilities-catalog) include the due date given by CISA for this vulnerability", - "type": "Text" - }, - { - "field": "CVE", - "description": "The associated CVE numbers for this vulnerability", - "type": "Text" - } -] - - - - - - - - - - diff --git a/src/poam/dictionary/excel-settings.json b/src/poam/dictionary/excel-settings.json deleted file mode 100644 index 30321bf..0000000 --- a/src/poam/dictionary/excel-settings.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "rows": { - "POAM ID":"A", - "Controls":"B", - "Weakness Name":"C", - "Weakness Description":"D", - "Weakness Detector Source":"E", - "Weakness Source Identifier":"", - "Asset Identifier":"", - "Point of Contact":"", - "Resources Required":"", - "Overall Remediation Plan":"", - "Original Detection Date":"", - "Scheduled Completion Date":"", - "Planned Milestones":"", - "Milestone Changes":"", - "Status Date":"", - "Vendor Dependency":"", - "Last Vendor Check-in Date":"", - "Vendor Dependent Product Name":"", - "Original Risk Rating":"", - "Adjusted Risk Rating":"", - "Risk Adjustment":"", - "False Positive":"", - "Operational Requirement":"", - "Deviation Rationale":"", - "Supporting Documents":"", - "Comments":"", - "Auto-Approve":"", - "Binding Operational Directive 22-01 tracking":"", - "Binding Operational Directive 22-01 Due Date":"", - "CVE":"", - }, - "rowsToSkip": 4 -} \ No newline at end of file diff --git a/src/poam/dictionary/mapping.json b/src/poam/dictionary/mapping.json deleted file mode 100644 index 8b13789..0000000 --- a/src/poam/dictionary/mapping.json +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/poam/poam-awsinspector.py b/src/poam/poam-awsinspector.py deleted file mode 100644 index d4e2c81..0000000 --- a/src/poam/poam-awsinspector.py +++ /dev/null @@ -1,30 +0,0 @@ -import json -import boto3 -import logging -from botocore.exceptions import ClientError -# TO-DO: -# 1. IAM Role and Permissions -# -- inspector:ListFindings - https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListFindings.html -# -- inspector:DescribeFindings - https://docs.aws.amazon.com/inspector/v1/APIReference/API_DescribeFindings.html - -def lambda_handler(event, context): - client = boto3.client('inspector') - - # Fetch AWS Inspector findings or reports - findings = client.list_findings() # TO-DO: Additional processing or filters??? - - # TO-DO: - # - Process and format the data - # - Extracting specific details from each finding - # - Converts the response to JSON - findings_data = json.dumps(findings) - - - # TO-DO: Log the processed data (or store/send it as needed) - - - # Return the processed data - return { - 'statusCode': 200, - 'body': findings_data - } diff --git a/src/poam/poam.gs b/src/poam/poam.gs deleted file mode 100644 index 9417767..0000000 --- a/src/poam/poam.gs +++ /dev/null @@ -1,77 +0,0 @@ -/* -PROJECT NAME: AWS Inspector Findings into Google Drive + POAM -GITHUB URL: https://github.com/CirrusMD/Automation-AWS-Inspector-Findings - -- Fetching AWS Data: fetchAwsInspectorResults fetches the data from AWS Lambda via an API Gateway endpoint. -- Processing Data: processLambdaData processes the fetched data. Customize this function based on our data processing needs. -- CSV Conversion: convertToCsv converts the processed data into CSV format. It creates a string representing the CSV data. -- Google Drive Update: updateGoogleDrive checks if a file with a given name exists in a specific Google Drive folder. If it exists, the script updates the file with new data; otherwise, it creates a new file. -- Main Function: main orchestrates the entire process by calling the above functions in sequence. -- Scheduling: setupTrigger sets up an automated trigger to run the main function periodically. -*/ - -// Fetch results from AWS Inspector via AWS Lambda and API Gateway -// TO-DO: Replace 'YOUR_AWS_API_GATEWAY_ENDPOINT' with your actual AWS -function fetchAwsInspectorResults() { - var url = '[AWS_API_GATEWAY_ENDPOINT]'; - var response = UrlFetchApp.fetch(url); - var data = JSON.parse(response.getContentText()); - return data; -} - -// TO-DO: Customize this function to process our data as required. -function processLambdaData(data) { - // TO-DO: Return data as is or apply transformations - return data; -} - -// Convert the processed data to CSV format -function convertToCsv(data) { - var csvData = ''; - var keys = Object.keys(data[0]); - - // Add header row - csvData += keys.join(',') + '\n'; - - // Add data rows - data.forEach(function(row) { - keys.forEach(function(key, index) { - if (index > 0) csvData += ','; - csvData += JSON.stringify(row[key]); - }); - csvData += '\n'; - }); - - return csvData; -} - -// TO-DO: Replace 'FolderName' with the actual name of the Google Drive folder. -function updateGoogleDrive(csvData) { - var fileName = 'AWS_Inspector_Results.csv'; - var folder = DriveApp.getFoldersByName('FolderName').next(); - var files = folder.getFilesByName(fileName); - var file; - - if (files.hasNext()) { - file = files.next(); - file.setContent(csvData); - } else { - file = folder.createFile(fileName, csvData, MimeType.PLAIN_TEXT); - } -} - -// Main function to orchestrate the workflow -function main() { - var awsData = fetchAwsInspectorResults(); - var processedData = processLambdaData(awsData); - var csvData = convertToCsv(processedData); - updateGoogleDrive(csvData); -} - -// Time-driven trigger -function setupTrigger() { - ScriptApp.newTrigger('main') - .timeBased() - .everyDays(25) // Adjust if Needed - .create(); -} diff --git a/src/poam/update-fedrampPOAM.py b/src/poam/update-fedrampPOAM.py deleted file mode 100644 index 52f8cd4..0000000 --- a/src/poam/update-fedrampPOAM.py +++ /dev/null @@ -1,19 +0,0 @@ -import pandas as pd -# -# pip install pandas openpyxl -# - -# Path to your Excel file -file_path = '/data/FedRAMP-POAM.xlsm' - -# For FedRAMP POAM the header starts at Row 5 -# Header is set to 4 because headers start from row 5 (Python index starts from 0) -# Python uses zero-based indexing, so row 5 is indexed as 4. -df = pd.read_excel(file_path, header=4, engine='openpyxl') - -# TO-DO: -# - Perform any data manipulation here -# - df['new_column'] = df['existing_column'] * 2 - -# Save the edited file -df.to_excel('/data/FedRAMP-POAM.xlsm', index=False, engine='openpyxl')