From fb1448b389ea010288b25826e5681bf39cc4be45 Mon Sep 17 00:00:00 2001 From: shiva108 Date: Fri, 8 May 2026 12:22:20 +0200 Subject: [PATCH] feat: add Gumroad edition PDF build with content redaction Refactor the PDF build script to support a new "gumroad" edition that redacts offensive prompts, abuse payloads, and exploitation code while preserving defensive guidance. Key changes: - Abstract build configuration into `EditionConfig` dataclass for reusable edition definitions. - Add full-chapter redaction for three sensitive chapters and token-based redaction for risky payload strings. - Update chapter titles to focus on defensive assessment rather than exploitation. - Add command-line `--edition` option (default "full", alternative "gumroad"). - Update `.gitignore` to include the new Gumroad PDF and all PDFs. - Commit the generated `AI_LLM_Red_Team_Handbook_Gumroad_Edition.pdf`. --- .gitignore | 3 + AI_LLM_Red_Team_Handbook.pdf | Bin 92542152 -> 92542101 bytes scripts/build_handbook_pdf.py | 486 ++++++++++++++++++++++++++++------ 3 files changed, 404 insertions(+), 85 deletions(-) diff --git a/.gitignore b/.gitignore index 40ad4d9..81fa154 100644 --- a/.gitignore +++ b/.gitignore @@ -112,3 +112,6 @@ scripts/tools/build/*.json scripts/tools/build/*.txt final_audit.json old_chapter_07.md +AI_LLM_Red_Team_Handbook_Gumroad_Edition.pdf +*.pdf +AI_LLM_Red_Team_Handbook.pdf diff --git a/AI_LLM_Red_Team_Handbook.pdf b/AI_LLM_Red_Team_Handbook.pdf index cdd23c1008aa52b58b94a99d27f7424d641f7e7f..a4e08557cfaaf1c8ce885680db272f702768b027 100644 GIT binary patch delta 53308 zcmbT;by(F=o9KPIOS%Q5L0Y;?It)O%Lpnu3H;qULl1hh&lqiUVG>9ky(kUHEDhSf= z?|#oUXXcqR&ogt*AKwof@ei+iFV|Wd+5s4Xz6^R{*6Nwv%7l|K9 z5J?zG6iFOO5=k0K7I~?byeAtaBri|k>*wQO<4zDb<$vSL-7X=b4~KmFn7>TZmvQ-} zQstdJ2^-RwJLH2*Kc8Q`cv@5(RTtTwC_8AjZ@be>3~#T1O`rm8D3IZBQ0 z!_wdDM*J!|oDL^3%wUH4&TE&IQ4L#TsVB}USpFze*+-JTzp6z>BPQep`}%!6>jYhN z+_XOU8#xVZKg<#svP-Hrl#{S_ILl!Omi16{PJY)e;>n-pKzhSHe{*(q^U~PPCn2$9 zW;$wuTX;Ch1`cN_4{Y~%9N357FBK|vc8tBlA<-24l8=k`D*f_!8@Yx1Zx=c4r|+jt z8@rbFH`1B6ThKT~vogG~v?(%VbIG|-*F^v0tfOv!sTvU?n%$#13QL#WWKSy-sPa>? zjS-XSD(s7(B0NV$Fv++Kg%6hg)LEQZo8WTl^IVF5@kF#Yi!wt>aP>TnT7GzMuXX2r z*3n-cT3p}I^{-nF=3SG@A~$OT4uqdiFHPUAJj_xFQmLlCDp#9;s@G+vHYKjbB9xP< z#HcJ>5v9Z|E&rqIwD9gh>x1Nu0L#tA`rWQH6?IW;1>B6;FTijWYJ#NnJ+O}u>Nv5{&m5fc$={&7gmMgH9Jg#_woWo&@Dx>jzsfE(~$4Zqi z49OB9x&wdj(%N68z(s8r=&K&(VZV#G{cx$}2%{-ynIN-{<(k7wgFpf&?VRwgwX>=s zrgF9J?j6OZI_*;3rC0r|_Rl%`gt3?w-o?Hube8q$nQ*b@NdH@7zvrv+Ir)uZnkE$O&lV;#>T^Zw(3lSMkc$6+^P?rv?wXYqS!j zkV@Ox|FE*lwY4)yF&`BcmwkAZy5M}2CdcAa4E|&7Rme21^;M$G)!#&}erq zghJfDH3gNTUEZ%Dbs4baDsM?_4Byf%Pmgk)tm#_jPh9k@9u??K$nRTlPWap>ukFOO zwbGkAKWHnJ|A1e@GBqZr>91Z`&h-rE27H>8aD{Urvx}e;hFe#dITmPn1JnyvzoSQ_ zBopVW8t%ORa`|GM6onR!)*P4di<5#PhOmGf2|iLHQ6W(y(IC+x(IL?zF(5G_F(EM{ zT}EO-Vnt#@x`M=x#DT<##D&C-#Dm0(#D~O>bQMVeNf1d0Nf=24Nfb#8=^Bzak_3_@ zk`$6Ok_?h8k{psek^+(vgA>BqYLNZ1&LArxvie!dlj%0ykiDZRjjbwvli)4pnkK};lh~$LijO2oJ7s(aL z4aptJ1IZJ~3&|VF2gw)756K@X0O=l5AkuxLAf#ZV5Tpl450Owvp-5p!;Yblkkw{TU z(MT~!kC0-K9wWse#UmvkB_cgRN6Uv;ZAI4=@0X029CrTn1PGR)7t- z0H2Z|TB4c{-<0b*EdP&XhjENeqvu;U$m9yXx=dh0&f7bYiEXDsNRD z-$}SH84?w(zk4*4+bT<{aIuP0bbD-)Xu!$&onFE>(t)1V+}b)z*SrP0cO;G?bW_Tq zhj{uDTNORjm~-^b*G^p4vLmRSc2U89o!5g4y&c~+#;0**7l=N{IB~`dur-x8WA;_9xj1Ea z;#YLPxPLdecp%m+ySy-?lAj`mC)neino7u|F1YVDx*i} zG!Cbqm&6M9a{ODKv2j$iLd-yOg0ANhQ%jVNx_C9|gKb@08D;bd@&_u0swwm@B%f-t zKOOg=ed_RJM&)_a=~i4M4Rb?{dbjXf?f#(`UR%9|3xi_0v)0Rhl>JBEE}NXaEKl}`4@MciC{FqI8RVNou^cfQ7T0a!7NhDc0NVYb)rE224 z<)jjO?0S_g{5f%vENa-XdL9w#L&n}_RXbF7kWM_;>)(--M#!3UHQc!U&RgsJ4YCAEs}IQ?6ZfsD-Fz3Y z6~%eA#C_v;`_&~MCJHZskSFfu#YXb3xgmVFB?b%b{MG#&q3C9t^qKE&zEf$x#kqL# zgv!m(ayf%brOYAe%ztI`Dh<5Q>2MMbi=|cE^ZJla7=*rQ+|sIXyZJ5Z`t6Hi?~`N8 zHtUuUkJ#g>rH|edip#|5OG1%#)<=@Ui9db2i;vy%Xbip3xl!T``B8G;#CkZ=H-;&l z3G>@H@H+c**-L8_|H$gg#1e)ET-(K&^G2IPd!Z8@gr`q<`PJUhRjk4WhD&WZ5`VtN zeWBr>rX{XMkxENFcPM$*L6D|=^O1|EO&Q)uwMJp$6DDr&O^TqxJAOA~$MszwuS#s* z`c`8W7QoAG=`Yok*Mj^hI7nnO$<&_ry(YOY&uwD+F7Frei*#H)51D>4V<#jV zzO}Vv820iZq?f(ovVOo>eS3hWO_Welx;H0J_=Xoc1bg0tIpdK33dWY%RiYedTkFJa2xCR|He?i#dXQ)cqx5w>rlsOw(`X2)#HcvsBcFa z6cjEkC*QdxiARiAzM*ShNwyqQit*Q6I6~`6^d#1Ph5`52lds;cg5K&0f;nq{^(==f zqX_PKER^e@-iMe6$Jsp(xF0SvOggpqxGAIXK>BNKL)4U=L&2qi_myUmFjGBL9*ql>*Q7QULJQMJb5 zlNn(xEl9yYUVKI3L*|^`+81Wt0ZogA9|w*6TGfO!>25*ZzjXPem{MKzT+OZ2p7Bq< zpl){L6=ZVpGc7ttUCSX zE^}R1xMQC)jT&uM7i^eWX}Z5tSoK29=%;+r^G0DsRff4rks54={wKV2dL4|{*~2p= z&@(%+WGgb9@dDD~%x!QjGPim8Z0nN5BaW1e9G-`gKOj2#g_F^6`ykNWp%f?Z+}wu8 zl|t=hw&%-joj=%T>U$H0&z#4Hi_}-B&HUAGxrehb>dK;i7QG(Y*8N7#&c~xLa?;2l zcH2KQ#TnI`!S1@6bd_Z`;HZ!DW#d*3lU?JFIEl9Dct7CY@-9SkhguST;% zj6Wy)dq1f3dtC1L`dy~NWR2Ezx!Jqmy#!P4Pnk6Ris4&T@p$6{{Lod2WIl^)RRwn1ghmsn!7pL&gpYkRJY?YRTd)Rg02!6XX5t66MPIk)MD zqcmc0bC%Y_AG7ub4aSlPL{W|?NfnEZV%E3$oGM&;E2)m6^0$2JRbERscc}Am{r0CH z$xd&r3YV3*j(<_u=<-DyehlSjKB@mo?sW9HQKO)5VAy$(1GL&9m(63;*5WD4^Og6EX4%>&~-CO8N+&5~L# zDFz9@9z8#Ld4Y{aNNnenS5V`LPT9I?4L`t&fvp^Tj`p@E%*kGAjB#GnIKdGrCn#J7{Ht^hwJ{w{Pp3SEN>UXg^uqsm?BS#d1uFe^7&xYoKs8I?`oej=^0oJOaIzAJ}7!fWkN*w zAUf-E7mjP#=Q z#JQhT;bUz5{rL{+?bXT;%B6Ci1SJ@}cH${CcIQI(-pg@QwXcL$WKaDJ9F6ePr@7wF ztmHg_x7*Az%~CqSlJz^|=~{jjR~>uMfu8kd5r(O;_EinC)cqN$vMcY47gJcwHwo$P zEb@*_hkI{dmWi`*?Va=MVz1SjxjTtnb^VXFs^O}hPFj!dSCoKMAO8Yp4@-BWVd4E% z+voSbaOkj6-Q{|e61eo^`tPIEPkgSMxLI^VwY6vR!I|X^soX9f90dm%GtE9`wrWR}x|g5-c=jiI@8q7C^1c!4N9s8*HOKFrm}X|44_eYZX1=GD zQElH#i_qLsC2qKZTHeNrq&7debUAC*mhC$8V#4X6gMYBu-E;@d)00AdEP~-ZIytM6 zy<{?HX-BetDURthKfZA+?a)u?chQ&M+&g(HAg*}esnb_$Xj4EHESvR_eyaV;Q%jU>OGDg%^2_bp^=7A~ zSMLY(7;mO;)XqBJKfUR>r*3}7dGahP9^=QnSxxdtaMZ&w^8R(BqcwYta5FCS1j?fl znF1@U6{3gLsJeFE>bi*55GU)#u6L0=Uo)%UdGWeDZk$LVZ+ z=4!gUh_Q5ba-rY@l=|i3kNx9PL8~rnjqg^{iyYN+^!sqWRhgtS#BVdR`_nM%$!>pm zd{|tu*`Q2tjYBXM_l(~9;{b4uW+d+0??CX#$g zi(OYX_6prHMq6imP!4(xroX>@WoVP(G-T$ncJY4oW7jPGrs9}C-Dr34>B~1cPkDba zIaM4gSrLe$DMMUJu(~!jmHNJk_xkFy ztidd_XwuT~2x4ouZGpV#`Emzi0i%y3lpn{ROiCJ&2fsSs$g5zP!Qjk2r(nZWQtGmy zA>yE{BIVWIS`XPCP&gx1a;)0Ovw7=q0YAVW2mtN@fxvwr2nYs3 zfCs=s00o2sVL&(#0Ym~(Kr|2oJOW~Y$3Pqq4~U=o-Drhyq?7WfX#0rS8Dum~&x%fJe-3akO^zz^UjumNlWTfjE31MC97 zfZxC#un+tJ4uC`8FK`4L11G>Ka0Z+M7wB;kYZ%A_bN~au1h4>X00+PY@Bn;(03Za2 z0AhdyAO*;PO8_}Q0Z;-|05w1Z&;oP-J-`4k0!#oia2a3$SOGTR3cwC<0Gt39zzy&K zyZ|4-4_pNV06{5(CVWq^JpMYNAGw=oI1HJx~ zrhsW+2ABoD19QMUumCIqOTaR)0;~dSz&h{)_z7$Po4^*Z4eS8Bz%Sr8um|h|e}Dtv z5cmrm0mr}za0;9O=fDL9vi)Hq56}S&029ChumKzZ7r+DX0Rn&!AOeU15`YvS116RV0As)exC591W`H?h0ayZ7fHhzP*aCKdJ>UR10#1N4-~!wQ zTmd)09q<4=0WZKC@Bw@QKfoUd0PX>SzbKq`<1qyrg1Ch!b+4rBq@Kn{=#;k`l-@qQQ5BvcRfJ5Lfa0DC!C%`Fi z2Al&In8@~rg*-q9FaS&d3%~|&09*hMzy}BbLVyS$21o!>fDE_;MPA32*`201vre1^fViAON@r1OoSgARrhB0UiJk0Td7lgaP3|1P}>C0ntDV@Cb+n9s_YeJdgk+ z0#AS>AQ^ZHqyVWv8jucT0GYru;5m>5WCJ-sE|3T00|h`KPy`eMFMtx@B~S{y0?L4L zpaQ4_s({x(HSh*_3)BF$z&oH0cn{PA4L~E%1bhIRffk?@Xam}T4xkh00=j{ZKo9T< z=mkClUw}T~E6@)N0E56cUXI{fJtBqmQV`2h0Ntz#^~&ECVaR zDzFBu13!SDzy`1hYysQA4zLUS0)7K~z&`K?H~6Uv;ZAI4=@0X029Cr zTn1PGR)7t-0_r^=|ws{C=2@1|Gn(ISsK0O{n2lkllzvP2Y(9ZYoyzLnS34Ip6HXgG57L1o60g{wfy=^ki}{~jbRxg7MDMZ)SC*YBwM*3zRpqN(H0Dh9NE9JTd!_ll|v zY1NYu+?)HuNqBf!J+eRVm;N;jioBs;Vc2}=B6;V?M^+SL$IM5+>hTHYrtlJuG2GU( zr@qomIM07;`*>Vr|2=9n*$A*ckNHt{m1uMD=TuumQzpR#^K+wM^XkUR=wz=dy|Tm8 zkfLJ=e~i^u>L$0F@;mb^$+pkgIMp6ZppTlCiuh z+V?fDke0;!RScPQw>NL?euPzBK8RweIV(6eTwSQYV$<87?W`wuMJsky;}?Nux<>3C zTeuk4VtoetLD6t*{p)xq+gdXGr^_1IY??}{bt3F+GIXd*RH{WZN~wdE8tk!b#m~Bk zZp5alXNUrD2E*4b&e5#X>Y_Bq?cPR`+chiKHkoB4Laxme2_eiR`$uF?_q@|EJe zPhP_O$%SYr;oEe{LEh?0N3`)XJ){!!CF??c)!RZ>AK4Z&UV9VHO0`Xbop(iT@7a|f zBTeIrrk~_O8O<(?Y3$stEb_He-%*e}UuX6t=HS&Fx+ijbAr=+WOHp6vqN~0~5>8*9cEnrT zmL3V)>R6cQkF@{#re!AfeB}#G?tNhyZfZE^NXZ0Rs2d6{tW;3>e zd2WnF%IVB`KCu4XzhUbuW7Xj@yDfvNGwGwvLS0T9$XNK8Yd*Zy@v{CvTFgeW4)>t; zt3>VFhJ&*mFM_S8Uz0wXJ{S$778LytZpRedCAF!WUwUsJ=X07~Gbo;N_C~;GdTS$Z zlv8cco zkJ(f6mAB~>eqWdgKKn%}%n_2K&cw64Vu7J|L!U&6TT6>pODmQ0sg5f9kIx!fHwxYs z3w`DxJCMD@YhM_Gp`}FkDU`nyEsdpg+29f*d#oS1rmwVYTGC_cL7iTGKHfWYn>?Fz zgg&ZtOfh4h_#;Z99n-^-?yM>@FDs3pj2sG{Dt0S#ggt&qn7_30SHC8;{TCfK&xo^+ zX&*av9O>7$DVE)5-}seY`_a|Vgs9C5vpKT%JS5lDkL0tlCn>xsjcx0I zQEKRBYg(*}!^dyvv;#JB4c;L))Hs(clAqrEo_@?r(XT|U`qJ(u_GhJP%Ie}Z>8I8> zX)K?o>Hp&Yr8Choahyn*@Ez32*BtO?M-R8cP~i1px8K746ed>sXc>zw@bSFX4dL~; zB4bhVSAVgVONLLr=v{Ud{qA8Ta*1l|66#Gu9s5X|!<&{|8R@iuxkr=y zWNfFKgxNCpsEY27Zmzdaf45Mps>2nYT6L|f5OfbNrkK=IRZ91kj-}SU`K@6zI=c>+ zz|pW(MA+;PAK@pXi}P|;xAzhXQ*Tac?>%9=)|;8Dq@ORf{!Ft(#~UNuiAcWz?W>ZM zb9*t{;A0+?dOwfP$KC7>QOj_G5>*in&DMpS(k70W?t8D9^R=8Mfx(n}}11kK_U*~ibhB478P zEyi;ys(%(quzR0Xe7jzf^&6omE6>}C$U+ybaP_kdrpGp^3LQIrYdOzaZ}EGRij@_% zHpw*vweINZYa}lExbL2GIa%C#@fY*8pt~-CgNOb9dgE5c35pUwFXAW++W=?(;5PyB zc$1rpsBDjuoc#=zgZ&I_`arxKcO5K!cWMex*R4lzZpEBIow4(-cjrtup5?zlRLIX{9I( z)ARgJF2r-$i)^e3-zz`7_aV+E^{$!_bsUPl67L~P)O{EbIcl0)2 znfGW@HjE6_ep5|eq;(OYII7|epK_hqv$MLC({)Z&FjX8Kk|likMfURqLG+$dX-mR- zx%8^7ThtE~W{oP4L31I4Zasx7gjC)J@{tWSuQKjY7a>>DJ1KRSyik6BTHp5$E}?UM z-o?d=k5gub+N)>C?YE3Sv@|v>GksLoWyBoCH9e0h3`aUt4nW7JuFDwU)|Lm5@TTxxjcNY z8P%K|^KQf`Fni*=R&_#SQp`KO9D$xR=7I#NN1pe6DU9Sz#sKdxa_CtX%e9L=JpVSYDfUCez{EKUGllIMn9k_z?xlPOU#j|i+GiT87&fgN{mzxGo| z-t8vZQrESg+vqPH_7bmTlks2oZ@zK=!50_%hi{$* zH8V@29QGTZ$!}YYE}Twgo@`~=L!SF%KfI2-BW zLZgMmqN%a9E2BiEQ)p;fyHd=&m7Y=1+zRxjP08nx77^sAmh96PntPkS&i#$G8S^}K zzO=pBI9ic7k$%RNebIQWS9i_DP&rR+;kT%atM;WRJ_A)D%>MZdN@cbeiCP57AH296 z_#2qNZFdeF)yw=a`q^l>HAx#>W3yxJH1lWsU1Qa%WV`_3cR|t_w7fUuU(qRYtirLS zQMymUk>_;h^fB|S8E%Az8@3_wy>0%1j^2*dYo62H z0r|DJa@?<0&HO2P7L6_rgj%x?Jw9RGT1Ex5xLSYjy7PQ)n&i2T(POpb?#we`dlwmB zr<{r%-|&RqeRw;`(QDWnTq4xNsL~SEen#jeH6#a?XjM}W2<7Ty!fE1oriZd8Wx4 zSj4E=JFfampUBTzS_@mR;;C&PE)l3!+EhcQ_*Z~VbkAzJ2TcVjMJnA>?(mm=AY zA6uo~c&Pq%X8ZbW|Ir^e9j=S?W8It)w)t>LCz#m`{i^oW@=W75D?)6Q#g5tbOe(F1 zD>r)B--pq0rtSBMzH(=*4%c*L?+l#J#a}DFG{7_{d$(+ZZ==oVB&gPrs1dVakmcjM}O|Ml$k*PFHTpqk7~u`jgJfa z?vk)IRHzsQtv9-GT_5i4obf6e{GolN=#5F~dN|9F2M{4C&vrhfDE6)ofJ(DE(x z2YD&)n>EwTmk+xqtIgQQmli{$e;nd;OCDvCZXZ5Y+Bo)6(EFP?M~N)TkmvG=HxoZP zh}?bOT~T0LH0Vt{TI-+U1`|uQc?2Ykt4{y>ntj zDg$-)^fTq2Xjaf=FX~&=H@dKQ7oR2ZeCTFxdzJe5-W63&i^q;7fsFo=)TSFcE}!=L z7R@DjG|9t=Bx~R3W`yH3F3QHUVuZ+RF!{ag9!U%rO0JSjmUhe#7pM_QkjNPF%T)X# z!gb?@(%n~Cn?`AVjl-Nyj+4I`Ra2ZBOvR-L9c9%-33@@Z)7>(B;{3*T`C^vebxk47g(5@y(E8R?^${3R-zJBnhdF+N`6rf z1>)SgA0nAbnF&P)Bf-jLugjRUXmVatHZ8l}7A`37^YSgHL6tu(`gOI}_bJzi z_Ex%>d_$yzm4S)oa?Z;`wVm^VY`^`(vvJFNzuPMA8IJw>wR?SvE!~YLQpE(#gr&)` zm*@BGodajDIYC2=2B2b(5qO$DZqZf1bBMu=~dRX@2=a({TTtbFsPA4av9u z(nBH9SB!g-D{C%^UG=hW3%VLL&dXJbqsHtJnQVqx#L&i#rjfgWSK`2YH^82lw=N{O zbeGafr*axy{wqOU`(rOug7dGY6p|pB9#n;Lz2D-%0^>!vFXLRIZ)%xM_ap(I;&o!a z%$ha=a)Sh418IwBWbNybWupA)!StW;h?*}&qU{WWsKu|2&irfxPC|Fc z2&`Bm$OVIv%~$7l6>&uJ@=2xlM_J8YiIwrAFI}o`wm%&gyNrIZHz??CC(+pQH{|TB z^F0;0bI#m;FiJNL=ZWM|tNyg<*<9A-_+03Z{wXAYXhj#*}e0X?!&z~5SE%J)YKcgpp?tzEh* z{^4=O^`~(fZxcA$aPr2iM+|W5Eq;a)o7QzDd2}RwZ>Fzr3A{M#d>QfNs8}NZNkLKj z9r^ozU+u7XSdwa3jbc7*3ToS%l6iy|)V@QwKbVa?tSZ0_O%5f!%l3rBQbcX8A|QlN z_!s7%)Ax}%#vu)<)-!jN=I`;~iMviUu;;h3)6d%nyey8}ONpDiaK<<|K3!e8pb)*! z+?w$EtJged(lFmlE$5f!pELB?^ddQPJj2apZhX#Cv-@wl`sCA3F|)9U@)o=pkgI>i zqX=v!WpO(pTM2uKYa;d{fUuaoqrH&$wQIss*X$(iMI7a2|GVFjM;IG{t^JR$YGr5d znWv4PwRsD6Hls-h+)_0#ulJ5C%%5itWsu-y(Ze!S!Zxorn8^=)6dL*%lgvN8}Yud1|ibbP7D*gIBVfgX`7}(dit)kFa0@+ zyo6|0ZwS2%k*Ywev8Jks)-b_zwPC7=A+Ek8u0-h;eYKjZkQK+)hM}uHU;*}=peZp$6k zWI*6xKyo-QFPr3RL6^VQ81CyX@IGc2kGYegG?KRz75&lxb0D8Ox0A3mA|s%sdTw%- zvGKQB$Tu%R8pgIu*==<6DiqEHU-PAEL(>NdOjQ`12?gc}JO)XoRB+eva`Hv}(C@7i z%;q;`&*~rikQj@oX-YKw&rbp7nGM?C4niYz11JP8+QFNJAld)W=YT_$Y57 zX3jR%Oso_e0<5-MnK)rWOpc0VSe-hV954TTk(H}t%^pjL|IbeWf0z(n44w(W7i+1C z(6nj-BNg_Fuy@u~;eV>p`wpw|3#~=n!Yav#g~!& zcE{_IK)XXdhVcTud5qhqFa|FQA6C-e3)GZt?%a_wJ^`(KV>M=7lh+ic|6%%}1c7)@ z=7nX$v`WM81`=G`CAzyH^&wOmRXtbd{(|_u`$bo@r<%IB7ut0%3@2wI-FzOgh}A(1 zQ)ND9V)y*3^`U(AN;1xZR?jwc&OS?fJuRa1|JSSjpN{+=CXV`FBbREj$on~&^Ko+a zBlo{r_5bzAt4YQ>aVGGxSO~;BsV4|l>EpvpgkB1e)P0%!<1c#Yy71yIpSE?yOVXP+W%jC6}*ZzI>23Xw&821V&Kj$-Uw?7C(quM27 zZnq1>NHf45-KD%cPdC!x8;I_2-RdsG=vMFE(=zTwV2`rL#P!1B@{0aAi1l1q)S2XJ zK1c0SCp^;^1B1^~K4cmGv*j+cADTOl-kdM7kFLK?XgNswp&j?Q6KyvNS(G@PWV8ei zg@~d%@o4djti|HdQM80h%bWdAMr&kpYqHv$F?1p|h3HBY(NH>3E@XJaHaJ*HLVb~U z$S?|o7*^ZNGjaE9(D@_Ps%g^|X(Lsz_@f-E8I9VsOt8yY$;aAEO>j4CFx?_`$*{9l zHU(tLo$e7j-Md`$pB8)D2eJc2*-h*{I~}aO+J77QKTI6;&quzpS*1T*6C73J+VbXq zw#EFjMUJd-rZtI~x-TSR+0t~AZRm{c_}MGTxE0sMQLF5i?MME7^x6sKjmi@1By#y&fr^6b#1Gmij>Bp8F+F#~&V|rIY*>iG+l8>A!!Hv> zEcgTrZ~WOzoZn=&6(d(~cc#TW7oz^y9+-(nVMDGH%|nKE(}o_a!!HwEiHu0ph8h*A z$lVt$h3wz$Atq>qHkbILImmDp$k4TI==fu(s>zMo?>>sW<`XdR5E=4Sr$f9V|7vFO zHuVWC!)m&^Hls(;w2z|P$#AD_a5p0@su^J5QCP^g)|0SK7SJ*?Y($Df8-hq8jy!Ju z7yJ2V)MPV#xziz|)3~e(C-R@2Bw^Dmkef&Ic~Moh`+tgNtVfq%rTNWr*+U6^CR({3 zQ_X;g!;40%favoA^Gpn`0XpfzCD~{$1N_?t#QFs|xk^`MV`zK=Jeh`T%zBVrNcco| zrnh{7^Zd3^r;7dmx!6%0wf_$zUm+UX9v78NN(l-7#zIS^V$J=xU5J+CiZy$D_%|V( zQyc#Hh+jhJoE_|$L^oN`N;<^wB7X>BhO^K*cJSkc8DtXsS_||=995&Cs5{t9h_qRV zI#@B%KTkdoRUFtB>G!}XTB*h`>fkjYPOioo>yS1fWw5^D7S26EWM<8$szTJ&A^s?0 zs~R()Ltuh9n1%U38H2q;UL*X>3ynlsq_~Y$lIS`M)es9)Vu!F)lfqeA?(9~MS^ zM+kWzj{^28tJ6Gxc7%>3ij;}KR*jl?lP^@Uemc>6uh{vFi3`8kqi?Ri{>1pe6Hl{ zjDEF%sy14DklMVBY9^nlHil&IlC+Z3I>z=ORb%fxv3$MOqV4QuH}(I?&Lo7P-oZ^v zY}a=AV}~RyDTOtgPI#{n3LC?kS0_R-lSGsSFWiQ+?`e(9;)h&|y@9kDYs!Bgew(rh zR-6rfq>`j++YJ+(FE-c}k+-Yq*=&d_qW=30DQ#HVJ0W)rOV3rH=sz63$Vq_uzc_sR zHpFrJ`~xWZe)L9!)MI0NF%Yb5_TvrK1jp34Qd24kr?y#eM~QI91bba(R>YQ#yuM4D ztH^On>6&a5eIU-eT}DeqrU}pKgc^E}>Fa;5gvGnfqtFuPvHAyTpDW&U#`#)+T^ngM zNI#`$=7nzT6%p{8G1nkBgez*{$qZTXh+0uFde-YTQK|L3Ty9%?S1hQrvkK zb`=7~@J=tRf4|zJ{>!_4_!lqis*Y>*B$G*3US8`p)ZZZ1+ptjo-$y}aum)?UYYSfA zKq*#Vf%d;X4GeG(rUO!RiQjKcZh`KK?eQ2*yEtA90e?w9X&ugFzqNmf$D|EueL65a_5{y`_YBwlY4 zM$G&_-&arzvgV=uQca}iWlo1|PKTF@w7ux6+HTk5jI%QM%;U^Nnt%GY#lArDzt_0X zz3O0VOK;LPb8gc15W6P}__vg)Zgt))4RbOe99X~}2}2G5zlyWEv#j0=7s))4w_y?4 z%X$3Y)<0=h*)RY5ibwtDB|pe4t$2MME2n_4Ud4DFXSM)$AB%JyySacgP}yoX{NX&Y z{NQDrP(h+dB_Z1APcCQO{Bo5lQkA3er`EJYF_(n?C%2w|zx1H~t6PtcDe6#Je?v>p zmAL4?+hk%wa^|9cjyI&d-h0-yQ;8y-qMDkbe|O>VLf(hwNeJt&4cZgJI^&FspEDk- zKiPvmyd5CcJc;Vxve|yoRTPV&-)g1(h_k-e&};5Uku&`z`@?aJed}xCuyyV?LV9*= z-!yHHgc433^^@~`xyE@ZOC#joi!(w-i6gt5=>hYbvFMWr4f*$e`)#B7er0cIy}6`h z>l>SQbtF^Ajpvud9r~M(D%sC}@Fm1Ns^oZhabwBGmcgvZ`lbB|&70Cm+Z>ckM|SoL zwXYY>d1k@3<^3;2#`SE~Zzi~O9gqv=4rS_XvIxJ9`&iVaN3M+_#(X6p-K0fr$=jAD z_O|Gjm1^HF@*J7=?4~YJg`vQw6S|ABnw0m?rcR1nAURl?UuO5yiEQ z0R0z3b5)E!UWu>hS1myaRgBgn-li0-!_Kr(VuSQ7JueoT5>y~%ccrX(4|7_#+Aw+= zHVA@^Tcel0x1lj(IXK3SEvgljnc0YB*t{ zl$!HUWlwvn+#s|B#KQ1vt|6NMs-IJO=}vOaY}4%J$IgJ7!qMB}vXPZLWWEo(1A=o@ z)?{e&1PPOx$XN6s1a9rxsa|jgHLmACFQH~{R(mlA$b>eH-j)PppOs!|Bl*y32%%%6jq0}0V)aHup+eT;>2-+oQ-{$Br*koN^KP16+B;F0Y>wO3{Bd@kw zv`2_cyM$_50(VdsJjjn|am1pPl!`!{-k-+sNwEYyKAO5IQ!PvWi5?Ut2fYs25Oz-( zdB0{kZ?B4D6oT(3Uda9^o&&BeUxp{EpfL+~5x{YaCOOUxv3%y@$E*1rda>vldohk| zblNOnfV=ZryH!o(wLULh2-f$|U*JUrMq~KVf(RgG=gPFW_A^lJU-ut8pYO8ai^|5* zRnn-mgIA(P&s%6dLm8g|^E(u&gr@!DMoc!^6v16B-F(L@qxIMwS&NwGtAl-=jcZl6 z|FbOJ%(t7_y75kv2`7pe)H&SibJtWYggbhrpjTc(7ZV5&rgIYqMVvKa_@-2|0Kc|n z3-CF7v&4$nzm6EL0}1i`Hk;OJV}FH$D$>(xvvE|SBnfZO6wkLG=%>j!lxqgyxDf|< zw{2Y|VOUi?#tY2@nQ?U8Hqg&twyHppOIYD{>!l8PIkE!BPvryYQgrlH>rqUE7<5w` zG=#xWxAS#5idI71e(7p%Yz3W-^dAK>+MYnH=3Tb+l!PX_5;ete@`x~g_iZg~=H^z_ zM1G((EriE>IBDM$350B345S0)$TBWmZMjr#NY`UG?5^sAnRdJ6HUurlP0CD>|G(1O| zMgXtVxnFdVn82o_xuGd;!UcPG(ewPp{P)B6qsSL^sS|>E?y65VG$jMH>|4B`U+5Bf zgGVPf4TaO>d`dAWbO%K1+;UaUz6wooCY>yhtwVLLu}XqdMwHY`8SpOUw649u=%C3V zCWqhT@=Up5{oYar+$!k+^XeOkh+|V+-3+u6Qmnlo`(Rbd{w(c z3PXx!l(G2WP>6{|XG1JvT`V;`_)rcNn9mwansyB&cevQH`;5(Yf7A@;G%Y+Ut@j^& zPPfRLEI8eoK5KwGW`~;4D{2=!uY*aW%FuM)$TSc-nJ%BMLhYRq!>ZG**_)yh=N2xI z8Tt<0q-J0@dJD10yL+C8q1HI*dnjP0`Wp#i<&)Zu-~6TV=p;C_ETN0n$t(an0%B&< z^0(I5SrgpOIx`wdhGP zMojT}U0FInVR7iN9q9^&Xg&^(I)Wgq0?i;K&A~I89=H@N6jlHN-gg_RBCa@HY>Q}B z2AUM2H|>t)63skbQH2`PGwIZrRTHFOD74A6*rp_iX`H6cm%k?qGeCGMDk>LTQM0D_RSeFxMB#MmaZ}nRVM&1*Q4S6g|uISYz**(?=VOIX% z$kTvD)-2_;iPhk~2BK}6^4%-Jv#i;UN7Bz39D5*Vfl-)Bjk$XC^yMQ5Y6&ykd>6DB zpr@4#Ci-Z*9N%(WrqW1b{oSM9Jy~kIQgwrdpB4qne5z@%a&14E@9@ax7f)eOxrdMa z)d}U95#%bj435mp2s6MH^GL~X4`uTc&ZeRHkd%3kGq%ueEgfpuOq&yS@TGu%cLoNp zF}GW;sp0N%KU3t9+nNqi1X0PS>F5G@JXGR=g}lQ|Ys{UO^VfWvjT5wZ{Wa4K>4{+C z`SA^@2>czQLV9V;O_t*w-8{59@1V-n976te;AC{$R?DO|_|-%K zRfIS)WSrLJV+_!22+s5S4$h_99>%I?l^9Wtxw-Po_IS;JQV)CMtKUx@02BLebWhL3 zEYh@Bd+DhBvZZ76ukCL0NcMDKE~W@=j~H>63Z`?MPsh6z=2&aYHJAHemSL9uHU74j zp=gb)TU=FWrGg<~7nwC4WEi5+Q-}4UN>i-V!(x*Ei`%wVsG!8=2DIzn7x}W!%V>?7 zMO=TdOCJghb#Vcn{#6(vjk%KYhss|!^=h(P7mZfca8D2vHm+9n73-)jznDpC@m%&Tb*WBhmAs9!pc&e1)+d+`+W;NLk6b!X)AHwRrr zv1#$;>=W_WRqmxE#@6B2?sB;Ln0W%6i1~R@!yCs2&-WX{L<1&X6j}@~*lKRsv3tZ&(~<693d`D~ zM3=F?bIj{?E!ICQ5*j6jkj-9(7Knb{-CtD_uLW7l7B2Q&lemX4g0g>0F{Y&+NxqV9 z(q25t*@1Qlj2w;`F;g2d{jzjB+t=Ib9|S+gE#5*ZB35}-0LwZUlaY*Sn{f- z;K*ug?ugFuAmfZ@Yi<>>uP}6hR=``AdW8G-G=#5EfRD*qxWiPgcIJrT?s5(5u8Mss z`g9L;4ZtzZmx^nUBL=WF;}?M;{@3?oPz8Yt{DB~La#wx+p)KzE_`mM|#mbqKnj~P< z(LfM{{QFg-hmhx0_b9uQSGPvM7Gp?^i?xue?b0B7te+g2z>3_9h|Z?FJDy#O3ZErL zgm(WoCUt*FEbDZ4dY#EsRIy=lVp{QwaOrlhF7d8=r?w@(1UgvR^3D)Vjnp3$W>{k` zGE4NQi>lZ&p!RE<5VqFdkGk%Y{{TP~)bsT3j*3-4w11;W_34j*e^_bpe9^uX#7d9h z_lt2ZSe~KgnsyLH4-l-p!6)vW4>P;W|EAI(id{atyi+J-Yv4suf74QGiGL`2=UGq$ z=0WN9sP(fMkaK4)&Q%B0Dtgizy>zY*_vmU9<{#SK{w7fDD$M<_kps+2FY*0r$xd7K zWD0gPnOrq2`DW5P1|0q(-x_h0|2NRW)ca(Q{z%)y+sgR}L4b4wOdm(Inv~8MA#ZEU zJ?`RYG+I^1sUR+=DL3gQbZ}BzEr$-J9$nUB990AgBblf5IrSyJ;6rMm!JziT^nl0lc!F6I?e42`W9obG;ioW6T_v-ON`>UZ*@fOT0YD}$rMpNf8K1ZhLY2PKO`giyiClfS;u?zsv5@iuaU9m#-`yR zN(hYohvJG|BOgZ3>HZD1ZV}Bd0jCXgiTKQHYI*RWJYq0*=w?VU)s$QTc%NIuY7*^8 zP|9US;t)))3p3@VI0vSWBv&v#e5*db2wkG6eLkzT`odld(bH(qcdK-}ap`ip-IAmEK=x_*J%hggp^J2m~ao)x90UIxYAdIv__d$x|-KhkII5u0n zU%Mu8o$8#Aw+9LHfd_z=;tn@U%}nKS?;egCn7q-UTF=E+AW|ryj5pl-!q-9v{K|yp zYP$86V91+#bMqs_H;p;suy1ye80}JzfbL(H-56;N_{X~Fj}1iA{hA3;j~Ym2h9#71 z6TOALWa?d2$6fty+3~iydbm-VmyZ<$WeE97`$x2Y(qKx)F9BnqdhZ=f5%zlIu(m88 z!>%!B9X9{fWYwV5qrTg}wh5qDm1_11>d4KY{zfYjGPnFfs@Pk3#|w{@?qLFxUA$oC zrB6j(_xMY2<^`K$Hrjvs8$5#fj>Px&Xm;MwY-aCe3AqnvhRvgVlCoO3t890D?$M9( zAH2^EK|*{0@HRJF6U8Gad0#fv)$pKWAsrUpmc|IsySg+02{B4zc~7c>p`S0gVf3$& zeGHoLAL!Qh!@EY=9lWYE>R&=r7;<#j7M`q9fHbzOHosQ~q_G*JE?BNQC%>Dcy{hp>0|DKOkd^CITIyN7Bk zalz{UTAa~?-Z}A}OQ^nnc5b-QDuewi^wgef4R3|S`+q8fu{UHz>LQ@ZKpxMx_4hK} zp+Zl1gW;`=YGW~o^SF^BEIW|Z_N!mPnTI3e*!MLUzo0x&*2j!N70{f7upZ3gJMe_r^3p^E)dD*3#3C>BBunvzvYMxZDow@cfB(!K&c?+>+r zjOlgCS~>{XXQSUYgWxEp8`{!?kwNQ0mX}LVB1YDG+?;zen-4kxeuBxCR6C?z@7(R3 zrYz{B_k@?A*d?@Zz=CwMz|sf#7zOfq!{^5VqzW^UZI*~-&hgo_TxWQKPi`rSfxuWc zxJWmLDpID!-cZ$G@C901!03?(yw>E@F1%5U8UwzzCg;7-N8>?#C(Vg_<0v`c1P;k+mu%${nm-<6bF|G^>X@ny;<5hp5Yk|HG!Pzc}VE5-Ypd? z(>A4cx1%0VY<$sj&#I-!KbqO|TF^|^f@hn`3kF&iVU$fOMi7j1s!zKu=(Ay5gghdd z6XHzGWbw$lc})8c2=Rtn5>Ilf+z}6Q9#O^@ccHmT19H;p6xRhE;7?9#mF}u2&J+Qw zf(9^r(OZ}?UFE=$AgZS87Xxt`h)PYD1-$}Z0*(twf&LEyuQdVgNT}f!51~i&mAauW zR!cf)SBQJN`+{MCDB+tXl00F5|IuadX;)AxGcQ4M>%AWTP@?>aY|nV^gG{UE`^B~E z@d^97k1oC9F#P~pKFJu=zoJ-s8?;4ufi zd5@J>5TH&Xzf~8Pw(O4OuFDP_3TE(+ZUrMAo_E`~tKn_f!Rczj<;$bH@d9EsN6|sp zL7MHsVP513=#eP}^*mk`0XOPQF?1K^^2$CAYQ@ZJ%sDEbd~auAf`ImUZT=Z_kIsSj zG63kr+$miUxXZ35#mL~e^=$6meFqBAU}xEhJ_l3~H#B|AdWx0JtlGeY)PkAu&PX*qO0{=K2@KbqH8mIPIQl6s`f zd3n!}b1q41Xk@j2`NGfvj)NfpmNzI;qeBPI>9KFK>4Imd6zGM9gHY*qn~EE7$^!;* z8|O|3KDL4QC<*CkckuwH_Dw5HNE+mhHh(8pSPu6N504i8L((jx1IF8uu~u2RD>Wzv@S-lWnbn~r|21A% zPR_;#MyDwPpk{J^;9%oV+G0@of@yc#giqzg#$~0#Omtf)qN+&>lv8d}cY%tVS++t^ z*>9v_^14JkVtK=;?vZfpZCzoX@l9$K8LbvaEvdtev;f{Z#DrXg=^fY>3=Ge9KmsnG ztg3-Q(XeS+TRM>0mdHZM8TNFP4w;bZ2}gWRfXtL!=CK;?ZwT}vftH0jqwUk2f^0$C z7s%ex$DYgJwW~*9H1X}TOV=i_!C+w5OEI%3EsQK}OH5Q%=&)77t zfQh0CHIBx>kZW_!Y-KU#L?Zw|5VyEls%_teW%^@d(OwXNr?Wi?|1ofGE!@Eei<^Ve z7<~?w)<>KyqddyIqckm?d}#c8I6d}n`sQyqQV+z{=3nJ779%e@ZgzfmOM`786ubs= zTcgb?X12#Q-(l8Lwa{X)pv|x*>KomEDFr*;l9{|D$Z%G_^8m5(T0M| zpPPb^8;Gz<0o)cI6>y;f+Azv!1SE{sHA%oAU2gKy<`qo;G|UD}2rk@0;8ky|e7Yif zkG_Vu8khiG|9rJc+QTb!!sI8yq8g&e=I+*@`Y?m$v2=&C31ot^3XU#J?(A5cn|fOXV8EJy@H@ z7%&5^r!&!JQ+mAm3``z5)U?>oB<%mHf9=+#QO_`=O?C1V%-YqWA3g_RIHwf{hEnNd zwHIu|2(k!PK1_JEL{6&?&R~m4odec{j^;jm^82*FpRg|3k~JYBzL)AX%p+DjuEn@N z;DTr=*w#8Z4%;dmWyjm|h97@dIrsSMJ(@8w&(S0$T;n--xkW#~T5}puJ2S+<5%d^m_(}RX=_S6fTbr&nMv4o!x3yZxiH-r}7%c4qxJRujoG`-J+ z&VYo4NlnvB@+KcwgGst4kmzH&#aeBHHuxuY6*1;7z+0nIYPMb@Mq#S2qy|dHyHv~d z=f#@NAV>YyA|=B=6oxwkYI~+Bv>RiFtt(dM7^Ba)Urlb9WW*p(Zp-0XNGX-tK zkma5#6e-~qx)?b=n;!TGS83zs@vu{rFmu?`sqoR@(PY~+)=^KNvkXNIQrEl-=sX0@ zXH7A+`2d@d%UU{-l`Do?n>pOrf?V1Z!X4@&j1*mH+1Jwa05GboxIgd!v9&v&g8Oz} ztT2OUQ-oM#yKU4bReUQN#?9zVAK3PE-u40$mZ77mEJ)t3ML{^|Xf{YD(@&5|;ApKQd5J7=`+)P#ARE{*wl3BqY042JH1cocM$_Tk8W zFn4blUI~*!q0p3Hq?5U1(gIf_Flp!tNa7jb!uHUEk6;HN%MhN-C;iOKyxr0V~N%&w(@LbnvEwX}WX{L7Y}dBd%R zp)v*8!nR~cG3_LX)n>Re_%`Kp(#|sYeXKv2!YswumUf_nB&A1rUuH2AoRL6N!XjTC z;T!XVZSINl#0H2uLYZ$D`!B}I4eR;)y+D1NN8+LY)23mF*m&t$ptUU|5mF5zw-_Se zle8#Tu%2+sZW<**1yT*&oyou4sDdZvZh6CB`M&?!nk%PfKOfied$(kIrZGl7$bXvy zUn`L$r;XFt`V+%Iu1D1l)JsIkY2Z4;spG9XJ0d?G0(x^lS0uNR8#A>|bwaEjGJKxhZ?)}&s#jw?C!_%9Dq2&A%?ibXXk4pd)JE3#z}&C9rCtG-gt+di0!VD(wab=U03w4|bf+3d410z47nAbh zCDTqq)ipgrS3y?eU6Sq$C2oBx;XB;p4j44__mYH9@riQ2fl-2qD(OTiFFrDz1>*{d z*UZAOoWCl(aiH7(-!lhciKn{J>5F;gTP|ZQ`2Jk7w9aA*wuXarff*}bQ}1- zuB_IXQ*#=~jE;WYWUjuY7~yzNx&p+}P8VSDDJ{LM4i@Ewi$@qi5^F;C>2Xeo6caan zKCiUn&^H(<`ww6~ZLi1AJ_$`*Q++Nd@f=q<&HB~>?FqROGg^h=ULt_Jasmk~9(`rm zP+UXnZ7TLL1G|%Hx>6<)-KuBbR)%?k4n$-XyD2?d5JK&;BApW`AgT>lN1*;B{KQb8 zP;uC@6n$m7{72qCedMRfBbBeYItyYGe+{8y47A$Yc2=QG3FLf-LMYW`*)~}}(Zse} zh}c5Vu5hHArrFy3UK|tKTHwRe=$*g4aCqRn0okgZb;KuYhuU`SbUo0|INr|1RHOY6 zdmJA*Kl2TI53qFDeTSaofYt*HDLP3F)^2kkn$B2% zB3ZG8>2e`On0)jUqrMHwW~P zesu|L)sTAgJ+?%|3@_dS6_Y!%`TtYi7S#(sEUtgG(b4w~TJ!*^v_HrewkFAuCqQWX zc=3)8ulM09L{MfUH)DGEr#!rcwnj&noT zMbE}&f!uF^dW&Pny?!Fi6f;0kP$D4}Susxade}&1sYJ`Q z&uCY|jiUCA^oPjimFsmYWIJz^{ZgHeakQsY>_KtlN&inNdOu*3oBZqorfh0RbC{YI zkG*jCIQrLqm!fQG93Vf95(pe@zbg9Xe_<*xV{E@_3nK7cgeNe*sa}&kyPk!)L_;-+ zUyQn=M(0|B!_SxBo)9>d|DM76>%Qzg?0?z2$HTF2)W1CXqEAgTQk*4lxr?QkPXa8)FqUSG@%0&X2DiAFN)HjHFyG-!l_0meSsOLh;-bWm2D*kH1C-)jRU7zIavhj(sXKUYZ)I^f*ip1=mShzH` zm~IJsV1q3cz+=NqO~m&7^78YZS%3ZYAEK0?dYnK%yJsB!QAypiKhbRSI)0M#i_48% zy@^ZBPkTZAyZQ+c--MaRT!gkGqkX9E{ZOFf7r(nQerU5E?jI`R-+BEP)H**(jPjrU z9J>&hOLV{mY3?;()c=8i7VWW%9tN0R8uY7JnqJ=mOzCGUxeI+VXke z$A#MTh0N&CZ#S=vln@6-(B{tQieq^VV&)o>oDnKJ0sdvHD z-d2pwzE6oJj6OI@HYvtcJcsmvMI=^GJBGoB!}lcC-ufQC(d^cH!u;p&OSI>I*tkD*rC~Hb3cC@{^*f^^AaS>x1j*6Gqk43Sy z|9E+vJ--*SP_s1ELi2;}{x)^L-Cf}rWJ5lw9t-=rzkBylp=HI}#}xj;rkHQv*%Z{o zm~Y^Vl(I;NSz>)Q%PcD#f0O)bB^#Nqz1@&Ldvl>g?6@yb-0;II=hgwo_FH$jp*Ze5 zfV3Li?dc$uIQH?V#9l-1f~I1m096!%jtW0yPVA0|W1c0hQtE%QTZ~s}O*Rsb=?k7E zt4bZbE*Ze?TM|RrB*EKD!RTS@N4gKzxNUs$xG8EYibaCOU%6W&?a7w4EpOP0U=uRV zeNLLYE5tmuP;B(N@a(4&)}kL_URHYmT&HWSsb|@Tj}rg3Icq|GAnwk)m>jmLPSwOX zW^1BETM>`wi&Ppj;RMG_+S}tko3yPiHU!Zh0@O2|!n2r7r8PBrC9*Tjz+Po=BaYdh zl#}^0L+u831AfIe5Vg|~y-6!+s}j?1p5WMLph@Awd@nFAej((v--U78{?-iu-|QJ) z?HPNK+84E$)VRVQU$;6*8~fIFNog-K5J%s7t>sO6#x{wQz{eaTL(%SLB_oA`XjY$M zQi`M^)EmCmelBL(5@GEZYkkP3|NO2SGE+o0#Q6VT^(#js1@4EOB_07?T09W@GY}P> z^vMqN>h2Z92nma$=r|%y051X9N3Zy3VQo9Vn{{eLPkr;g_ZIjb44;Wl5NqyJ!P{IU zxmmG_1fC>l@`+u4ouyA~-3qDGeEN{f&3Nm<(H(__$oSs{q|~etDJS1fB~;5&PFTXQ z&D##)&750`*?w|Ek{cA5q1ewy^>r~zDSbwR9(%%0b_xyCz89Qs?#~| zPUz2kK05V28;B?W9Yre8s-GVz>=aTp1T)?8P}_EN!2Dar_Qx@4LoKiT^c-8%J1H$i5+Y-zx5D zt0K^TBPU_ePEbECPrO*Y*s0G^^t-zcD~Fm0lhYG%P9`h6udG-B$f}(}eD|oMTX%VN zlGg)?r@fRap)NG+W?+dX!&#p#^N3_-16+{=kJOVXV-t)M07BCzZkX>QVot6J$ET4W z`?ws)8(lAtYP0qdZ>MVWVJd3;0>6H6fAP@(-%EV@y`x2cIwHlsg=+`Qg>fE&aazBl zqVtyb@U_vbY^$eAlrwK`yf^bn6q=-0P*Y_lzHhsPv9!1PS34y7-S-{-)Z-?IKe>jm zU2!ONq&QPHu&>e5ra$7;mY_F5R{KUMu+K;Q3}vs`*KjQxzWK$nV$N3Ox@cqvy3#WD zQ3+3A-;G>sl(A+LS5oyGa5qau*#(QoeNp!`{TJ*lqFDWiy_tuuH(edXSFtG|&YW3) zN8A?{FXmbnNRBn5BV)BC&z=84toc)^ALjM`jGMiY3rHcoouvDN#iX3)LmbU`1}Uxl zhqe~}epoBjL)*GBt>3wc)8IQ@1AfO6*uIDUI*Kupe+su#h+_S7{XnxNeL^FbLXRuG zEcdML#BXjPoW1Y%X|GG}b#7Y~Zt>;WC-3aMZhNdD?zWk8!v2%F4i^f-y!-bbbFbaE zRT&o#*aO77votL$@TFnc#jh;bW#%HuUlc0hY#4Q}T#>3ERlD%&kLz(EltXV`oz)Sy zm>y_|vG_+Wtx#Ul4M^xp)^DX}3ga2NQpNG!B&jB%Xh6jjIfuhuIrJ}Ih-?k0UhoWOgh z`+$Y$k2`@RVy))+>du?}*O@fC#c3)&d02Pj_eWnu3YD=wCNpeXcpW9w+SE(^ou0f` zP`o95+VX?*kGqsu|1fg!0pLW*KVaR&TtDE3+lT|r`zz`n7kx;ul726qk~|AVP8wf09_LUUw?leiM?$H@{3wFUluAhMkAL0RnehK8=;4NK(u%%e&0xVYakS~mpo_3R5dXMn zlSVb(qje;zJBj0yo+y@aoG3UV$TdV_KU#vVJ!)8rdNi^Pctk%xWfF%PbxtXRRQyX@gT@m*Z@s$dYyTJ$*|6yfB{724j-2ox<@5m{1?fEEtP(3kZpHX z$%@tjiH=WFB6m!pa#8iibkct2Z!o*&2+HORxT`a7&$3$+?fYPTSdqaU?v_p!SHVVl^@B$R(p)z#CcKC zzyNi7v@8|*f%EEPMt%Da%+LFsXf9HR|HyNmf=2g6?t^Wrq80KCTSj50``5r~g2cpn z`eKp*GH>SosH&t204%$trAQ^hA5{dskdOE3BO5(m_Y(1lR~H6L1~m?XPHqcE-c<>3 zr@|}uQx%m^vbIvDlHY#(Wdn-8Fs3Uj62HN(E?9%RYlDumwYD5?)0gBXf3-rdw0bJV zgxAj{<;J$D(f%e=EwW=U*>Yrzxz|p?_n2s`m8`I@bGdK?c*paH?4V-gyw-~!>l}H) z>L*tdG19gXXKB^5-94Dj{eWLz_Qgn)cWhm+-DL8^QDbiJ(HM`N4s0_(=di}^S z;5QkNi;0R&q7ve|c?d$+!1aSBE3D+gN;D#ij zZeP7tBWJAn@vIY??Gx4<&9Op^w|aY`xb!ra*a@)W^@uGLHvLjEbYK@c`i(@tTl`KSwP5L5GngmCE?>p<-pcKda?wnq>n|B2!1_&Z zkN{0waT5?z>WNg6FTI@=BRWf(*j1Lg{XX=AgcuiX+xu)h2WAHkTPbco9{%gPMCY+F z9%NY&@2a1|IM(>3*MBvVGaI6_BMTI**IQPIzBaJCV4{?h zzDJW&ts$`SZWDB4QGuG|V3m1%z7HpM{u9vES>;M?CFe)g^N_f;$}3J;SiDjxEtkg3 zc6SLswGI`1qQ$uF@RdwqpX#7hzlnM@>|1Lkj7CV7iYj7kJljtH@XX;3go4 z{?^Wvtj7PMpIzK$(oQ@jbky4_(ifL zo~&N!6UGsjA*}8E;<7b|_U+@5x0@t8y&fqkpCsf)ErFsw#GO=y_8KqLY={sn2Y;c*;&R=00z(Mbk;m+yXj9opCMt#Q8fT zoYkuT`T?QzWED=e9nIiFvEOG|!NlCPa?g_#@6Z8WI(%`lxVKs(vsLsRAdpI|O=Vt< ziP7@KS8_7=CepHk#fKV8u935H4|Tl=7WR59Ls3mkyja5uoJQ3*xw^5gR4ReKbLJ6M z`!re*31VGU6kd{ZGFq;VpMg~7%dPkyw=83n1RV;4NOMyveRHevryuSMZDJ(LeLsSB zBh-`)EE#6Gw{kOg841X;JoEYQbx+a<{5Xqc#SglX>j$!%B-(Lhsid-RGD(9{4MRUw z4`C!t7 zv{(Vh1X`Tp-3?a@^;>&1d%hI;szte~Djf%O2eh=gz^%!1pf;3<61$Q1x$}NFMrc=_ z)|Gm(H)W)7ZZ}ihjZ(Qp^%x`~Edlr=zyDyQ%Xnhz{HoAGe9MJ#xIKQ1&#^O7YQ|sK z##zOr{3PB&p|Om;H_A60m4C#r^G1dj!7E(Lq}Q=>p#$c8*F4uenJV z2jz~v<5VLBaxG?fitIR-b5G(Wu&O0?UY9{09wQ;$U(V&QHX@WkuK80_(R%~ut2n3n zix^H6>x>3m5XXWgb0+^HRXm;FGtrDUf89s>Cbj%_LR0 zX5Be}UNBwhRq?+zV=P~GsI(@bn)MkxiP_2ktNQ`1$g<-L2dgJV_3X~!*C`9+NCQsf zNqqUnHrkVM{B%X zt$@MCo$oh8%*K-~X55ODV<$Yjj}%7pPKej_7{Q9?^Mw)B>r(NR$QO~4VlknCy-~?Z zlVqMHOi2-RrhQQcN;|>b@&75=$o^hGlLQ|Ac@cTCeJOknJUU{5f4;q!I2UU#UJ*?+ zrQg!`$4i`DU;1-|E9Q?=@ZPtlQz5b#AmV3*$rM#{snEl;bV1I2-8A3K>ihy)6P@z> zkn~Od-zusq%CEbQfT7pY?qfA(>#|Bu_q(Ef-$ja{pY;p8+wDl+ME;QZ3Mm}7QKQ!5 zksz;bpjRy44J4AbIuscvjTR@Hdh4v4Z!VfHg)t=cQTO`UTR06y-hgd(kG`38x{DtJHR{OtWDlaG1Ya@5nhQx-BliCX?3=4z}oPcxbcc|`Ieq_*G^+`Ug|z5sY;y?4Lp zAwz0~fNQ-?KbRPo->4DZA=zJ^AoFA&q7a(jZLVrmN{c(l5MF=nB@l#}9~ZR{jQ_5^ z`;(tb{sk8%K`}Y8HP-pMf_72qyQJ>}%0?8G5_7dYlcjZ~+b9O~f6r22{hVxBB2EXEIPU$C?Ra)2yhy*D+hTe!9JpR=-*0|0@9bGMJevR7m+yecLFkv&PaCix*FitjOfTh8kjRXk)4 z*YUQ}cPVo{s<;&#n1RN|ucV&z;-ppMSNF;EIDfvB6HRO3ne%)7wy70oyv4`;#4+zM zt?g@t-t?>RHudS{ny=nF{kN=u8@YBlzBWs}fR@qVY1t=L+IJ_Ec?h%TVPrF@G__(R z!e|Aes_0{uco@+UK{t?vsA*^S1>&1daK)-0xlXF?vifzr+#%qn^nRt(a)}?E*au_KvilD}@wOkS%sAZ_+EUaW4IypYld)*QK9!V-Af|dbdI7b^SFu9jw@OtYZ3 zonwr~jODKOMfBOg+ye~d(C2gPp-SV-PmvkxUSA?Twq+tBWszqYPGIHvlir(aS-y2Y zljy!aZ=^Z2qjw(+bGMEvXc$e|F(z|$9)rY@G$>0toRqFgLd8k;Qp2;xBvSf+V5|on{=-uBHheXStO=hR>(b0_eLQpCu|CM0~%b zqhzx?T3@xl04A+^x)_RRxU14;tNip7BPm2XRqp-K&J!F-GpCqc&-v+C6kjZLQw0Bb zbokRc$+o8Te>N{mDre@sW&FlP-)4*p5(V9F`-;dH5bE|0NIa`c?8lZZshB*o4)cCM zsTiofaI5m}k;a+l%cw#?tI^4_z|Vi6*66Z)pX=qg7^uI=7xjPA4^|#L@)Z1-6km|_ z7U%08^3WdH;5WG2%-~}>)#nr^*(&cX!Lnlw-+W29!p0iW!_ukEYvx=qhrzQIJPgdFrOgk|s7#Yxz*n zk`z2QxYYz??=r`H*vOBzEbUoIqHV!l8=dQ;irrT>W+@`$`^hgm?*y+ej#K8jc+nH# z=f3L_z&g18s4$-R)maYY9^yP-=uK1BUw<5={gmRoqS? z%4$?sbcfR5*)v6yx~R+AtNE3V&c`ADaq%DvUXq>zn>j%yGnmg=jAs2LmLEo=yF=Ur z>P`ox+}n5t55B&3jv0pVMt@kFSW6P}ugH?#w|k#BnZ{c+f78_^L*Tn%xyI$fq}xUs z&ycdGHM*`sN%jT#!xHuZvrBvIUq|a>;suyz!k|w^SK@rbflm zr+=>I08X8Ix_uU-ewRB+eBNI0UfrN24BY-5?WZGh%ns;{u$}qo6e;}ra=2blliSnOIjs|B z_+505{&%Iwxyu;i{3kjK?d3wMy;R?yh!H2#wyl?!X@6?|lMGE9yk3OMquu!4^i-q5 z=D8S^CPy#4&)}0~Ip4a>b_Pq`jX*oqDgS$`S(YE?1PlOQ-`(A-#t*~-H8s^ye6sC9 zKhq_EU*L^?uyK1|*S(VDKRd_I+vsQi0cNk)m1k6&Q-A!R(L13^I_ZtGMuZ%YKd%h? zk-sikwsg2;P+uz5q(@wsls!2->5QBFP{AJTAc(P3V7w7XTb2HZY2YSgKeifHPYK<_r!pJ#q2*##_no@lHY<2&AnDN$Q9W__IljZG*%Yl_9 z;3K5$91~qieuQzB}HPwmyMf@LdCTTQ_v&v_FaGTqB(6jNl`(~beO>$Pz3+45D8Ccbs_c6zeO`x;{OroYL>Hd6 zx#^x^GR&%;w}I|0K2xk(^kl@p zSzJzr`*Yq-q?n2{HX_)8HbA7B3zy?C?#JvatfbUIp8OpXKU`qBrfD_tQ)S5X^cBL= zh1F~CN?BAe*E3NU3$U}aZ+xGV%;ngp=D9yWX=4d-;`}A87{#aP`?B0~^yO0}X|Z}A zmd1S*bhq57jhV0)P$a_*IrWI3yyjx$*h)*t83cHvhszP6-mi2wHpI$AD@XQHo+>bu zi!5H?YaV?Sq39a>z#?_f5el-}nfM%Y+hRw6&)xQJGp}W85s;UMm~eiVX7H?2aU_0B zdMqs+DKXkJ&3uXD#7nk>y`4xs-Mrv;KZs<#mp09(@_)E(&-#gElEMca`P8Okaza+x znMY*1$X#^DlEtb(C5VGx_7_L8fMHErOdv+LwUtlCfoi{{Auk3r9KCgf#PAkh4`0Q* z3a84`w;@xeOFb$P^B85Z@nN}tVqR~HEfLEz3e@Eh{(7d>NZI_9eB(^0mYeX&g1EeF zf5mV}!~kl1Lo1AftH{*z=$(viP?zW_5nsQymw*iOnOtVXEemZkbI+7>FP(99L~Cr1 z3q0hI6ZqQw{Dyo_d|(3 zE^FH2&+S=}?+5ii`pKtP>;OA&jJ71k{Uh#UMd0}Ie#0R+X!_BF_=f$ zzW1PEI}y+1u=k~MzrenETI$@@mAc|E+(3QaZb_mp+o zdzAod=&dQ!Jf1ryGi6e49 zWgPdlPo-1l*S-~%8d^KHa1_~Y#k)CqLzr9R$ZqhwImLG3OZb?bWLrez>BvNSSOhfH zz<}8ewqV)BzMLuWM=5NbE2z05`H8;MIKbDw<3I4Niv%4@f5qWOtXp_WRJ?zPwc)3 zQD665tavIwkEFUwdlsIgAl2w|sFJ%Xcor3M!{|~w=B&@o#d$V~VfJ?NI4&eF8z`Cw z+LOTT)HD04cZBeRZ}!gb)8yDI7_F7acengr$01BzA0-_4?Am^ zO%hnuSTH|u>gHuMjXY_$lbZCT8z&LtFzJ?q$ish-evK$SII`_C{NV1<^G*~zg8lA6JVD@`4hy5+?yK~(y(q1S+nhD31CCspQK1*qJiaQQ5*rVqR=lEt8v>m;} zOZI8q$w`yh)c)kAbQ13|WTlXSGxvUXTL5$LsrQU}yrbcD_%%>Y`lijIHrX5M;}9BXJjMWy5S5z1kbeG>S@B68`1 z-Whx5&8?EUWXuc6QKR1&O2Fr{)Q@Gx*Ds`7XiF_F95aGSQdkOfzHr?LK{}LjzbN=K z{&?h(hzx9P2Tc=skEB>h_QOf(yZo~9X1^@H{KEj)? zhG%_Y`t@>Z0{%oEyh9T$(6PVVK1ElomCX$^=T2Li}WkG&eKrVglh zofPs>385NW`q6j2xIM{T$!Wz)C4usnmY+q=>r8VNBvMGI!p|}Q{YP>J(Vbg5LQ}2t zkqT#pKejgSJ^Nj!97HHtZ}`5+Ij$&-VOS;181Pe2ib|6r7KJScS60Ou87Lq}C3>i= z{e0v#84NBh(+riTq=CEF2Zp=xpN^@R%yHcp59!bh6yBF@-8|}lQY`WOAck818s^vK zMeTExhAr`_8yVF2elLjqe1(XM!K*0=wYb)Sr{4@c)uQNE4&enEYelZoo_J!OZshBi zg~iI>rPsR-%R{v8GWbViH&aI{h@(u(%WsG3X4!t$S2op0j4T6ASL_<{T^@Zaje>u; zkiztJ5{TPCZU{GAt7iDpxsG5Xx=BDnIjPAF%Gb2ax%b-U(_|_`LW6?guvohu5<$%O zaY=0TBwmQXPycRCn+e5WJI%iM?bXMVMk9sJEJsA>@u&N&N4mG&kM`mk+fGGk*AlI& z8XHz?Yjx0YdoF-iCn8(s+rsB$^6Si81&4SZtQfSjXjF>-HEFtWW_@c85AsEEZ=@>;0dqXd~`(>~wfG z@q6A-?TeHh;*-XDwdRzV-G=Btb5Y=WrnGWkwD!qJ+6mx%ty-euV>(bhjC6v~Tv-DF zIaf&}Mk>2L0YlxlXzO_UvFxQVWG^cr((0tU3OX!YElyEY{af{qyJE`|13he(I8QXw z<<`7v(g8PoJk*rN+6zrwdzloj7JI0erZk#JaSWB}$0Qtux1(@3Er3*W!iRr-P?aS` zxqi&Z05}+Qcv$vEH7KKG-163_xb178o4tmBob(6XB{{z-FI{8^heSth#ORhTp4tT3 zEgZZG@nM;ReJEjjZ$Z7!oggjBdLA(x`;gGj0+CnTy6W=QD~xJ>Q@yGnL^b@Ztw^mS zjAHDU(@&=G5r82-@`(KH(@N0*QE-0{ZeHL25Gb?%E|mSjnLy+>TEPCYgQx2=iQezB zPQ}+^7lem1nk93Yme??n3sT6AY;H4^qQ%=MN^8-3f?011s!&=T#t$&lSJN<@Byw~Q zAC@sI<~9<3Eihw}jOt9IOYlO6obwDalM-ekiY~v3ZedJIU3L`X?0a=DTF#GCff7JGhGh>en$T)?{D zzLA@vD~Sj@tnZHZ&aK3DB+pOj&ogf$_Iv=5SD#`;^JgO|*zdXb+-}b?)UY}BP;>=0 zBievLrw; zg6dgYkFS_qvX_xA;-hiZIu&n31*%>;m`{&I+&x6T zY2Qg=m_KP(bRN`uNM`jt@A{oX{L~eYP;eSi1VHF_eL;fWPwQo~I@PY9i?FCip2va5zYK z7PMPLN;b~4tO^mT78gpLIQJ=shQED%NG*9_r!@-FiFT=YLYCZoRF(?vO%cpc7oZ>8t4e9TvNW|T=Wg$NHrmIw{}?Wy!Zld5 z$eS&%U_YAf`+~=)Q(I-^nDBhGAj?cdGb`;5B+(02}hL(*M(+@rl7BhPoP} zEYymcdJM(n3o7uT&8wtourgqA$2L6$XGjo>kQW;qb)fmLdaphlo0Hw#8vc5Xu420C zxV~UO&8BPC7J~B<&KxN>7_d1nW3@Rtj`{>sJF`IsFED)6`iManQ|YV!Oxzcv%nvuJ z9n&IEWS&S6FwdW_KZ}#o&p1yAAE@!batGMnmPvS%tQUf> z2J>iUWNl8!*=W~Hle(Xc_K5EHD??zCe+ZC12hG4sTb;edL6Q@7OAe$k>!VyjGoeH* zrM?3hn$0%z&4=SeuQ-!K5$@dYG24*w_Ix&$ywkKBwwt*k4&MPkcgJw*!3y4HTP6OX z__E|0bX{`>Z~6%7#O?Ho`%v4@^ehP<$`Xv-1~?HE&jLKzH{E}0W}EgJN~gnG2I|}a5`C(tVi^-4kv<-bfg-;)s0fQ>ooOX zrkk+O&K5^n;q_O}0W=l%WQzcb6T{ye&JTgXN}HBCAqAsiVk3n~a=K-DZM9_o1V8;y z6Jf{ig+) zf^A%}xpjOmV+z&Q27J#-Cz27sVPaqa*2l%roMV5flDtn=qh5|^_}PqTarrJpT+{=1 z&aQ)(*kqwuz3pogPK+0aJ6|MK@(W$zC6C3K@I1EULGwsvYp8Ejeo-MX`CKeVRWq+K zshn$=XIKs#2=dT;Jbo8)R=F542?)D@_%}Ue>9I2 z8hm`VKixAE?)9n)=+(Yf)`I=Yoq;wsuFwN~ug>wJB+f z@0Vg(g4N_`?7N94{IaJ@yRhMWasqhQZvTCYW!YqWn}B#5xAKX;(eLS ztID6g{h%0WAxeS`kRH}V#;&2zYzA58CLuq!i-;DKh6tPwKl55LXX9g9WP42t zzmn&Fu)gHJ$K4d2$^!-j0(XWp+9xpZ^x9$KTN$obLec9q(NHC$qa zqv})(p!36zN8SbaTa<;=8{Sfv^BKg{^Zg8e2W2y8i65o;CV%%O7EtuvnLbBxdw zl~!=JPr8Fj*6n`bYL55h4d4Q7mJ!C2c}CBFoZ^JvG9pa_fHz*#9t`QS`MjCS*h>g0 zf1|U0&6^Myl&@@BwxSQ0!eOK11H=$(FuJl_mpWu3J^o6cGrt*u^CMOFyNQW0=QqqC z)Ou<1bDX{lC5pi-{RArLiH%(!&ecA#Ni#LiMb!rzz)E(YUfbab{v{ zeL{;;D4EQ#B%`b&?X~{)iXbDZ=4ng56kl_X#Kx8wRMcqraVDz|MZqKg6$*%{0eKuu z-{O0@nqzz-v_*e69RCtBS@U48`h~Hcr<~8a0_$l5KzTg#maReHbm)kohetuWq$(q< zS&7j@)P$=06O=E{r(bX!?w>P(A;d7pJk zKCUSo34GD6R)o) z2eIFtLnD>azUY2!bM1GUwG4n6)xHmzH+Xb9^6s4R-m;mH#XJDJ`ekQhaK>BF&rU0u2`T3n&&C5r7s^nz{|7{eb!j5B|KtEie80 z&fZ^&xUNmFeS|DlLzpHV)-(yc@ndshWGlmns$TPeDtG0) z3V`q(R^2tasf|HZZWbHKeTfh6zHbOBUu*Te%iZX;UQ9KIGSTx3tsfL79*zIfc22tx z7EwW4XWWz9xoTw~-$+}tN;p$d*UF&(RGVYRRn-z=TzCeAZEDw%N09OTNE2 zqhSw=Ur!r)QYBoyquuy1PnGzB!G>XhYm))xF=aP*Rnx}wTlS~#XJHfqLRVDTb2p?* zB<)~3W~uEkGnkI+oys9897d)s4$hGMT~dGlnAKD`(vO)B;pmig9ExYRUOyRs0+`4- zDs$(F>v6ta5S>k9Jg=w?@vMElEWSQNI?}p>1%EaCa(_$vwKOzUe^}{fnkydci0hqQ z5ECtFHy=%dwC(!1=MyH2s*sITB-&LrV$|Ao>e$*dRQ!!iRpHrB!_`{-cuRHPyLtDI zwMfInrjpZ}Ty-+P7reySXcgTKG(c6)tL$ERaqX1#5~l=2ZJ9Op_nfbui{naam1xB@ zPNZjjN>;_OXk#`GDSYY*uYUf1DNw3m?x4j#@f*GLKDz1mOh|&ZE27C=-GORPl`2q( zVpvUQQLGXU-}#x!wxxQSg+D@pbqT(%gB6ueOPAtj0KC%F)gT+c`X}p{^c-M9In3|& zJEtjbl?`hUt^Par;Wc~HujgM|;q?(lOkB#jp*kAFw#}2}o1KD9CH(y(Opv+TlVrz= za)A+36U>Z;*wZ6z>CHvz0;FUQrmk%63z|R5yHcm=^^@i{)!At?&T>2HnG?y>*fSfK zu|?uY%4!k5OU>LWezYSNRXKpkUSqA6K9O6)%>LaHMNcx_4I8}|wE5Fq+?niN)FIEK zILd&Q{qLmkj3A^8Lpb}>R0jS*%MbD=%kZDeio>y|6YAa{<41=t--qDX@FERoMauE4 z&a+or-rg{X@fyt2Q7Uki7LCandg~~XE0->c$wedjH_|^cFmyd?_=yL=?-KIppAx|C z^7-3SuUdphX`X1b;3PbThxunoj06mSVZSuEyV0IEfRxXQSdX6!r1{}`E63DpD+yiV zp=GCvXPimC(6N;~Ul5LogPtr%+%VEg)C?D}?P4i~za?q13HZB!aP(X{_tB*6uAGic zP`!f7o~rewOX@2_157~YnLlf3fYL$Nm_a6;7qdCyl8Y|B<2^UMt!Nb9nVHgd9g)Lt&lQ!u-jpKKpYkcGGA74i1G<Jemf-~H8gM|0Cw9R>?CxzT6a7MX2IbimSl;|%Sm-i`y9=;CG`582^ib;YqAQcq)BdU-K zS5sr#vp${nq5%aKX_fqdCQt5=vHzX z4__2zAlhMkzmZgF9f`+opz^A?y|y0Gnw-e)XPpLl>M@ymkzntaGH`j;csX$2NYI!f-6NPf8HuLo;tTD8((~+;$V`IB!Z6( zXT-SzB}ZRWRqZo}`j{|%mxi5Jn;kvgH3{NYGEbw)w~+Jo6*QLJG;;Q8G~p~wHAO3rzj_J=ftl{s_C8PQQ0?cR80NF` zN-RKq{(QP#YdBtH=Qe9o2KKcIY{xIzFpb0m94RH!Yx_T21qGf-v(h+w{x1FPn%Ub{ z>)H2npLLlbAm^kaM$UlwJyM7DRI2{HxJvJP1(?;74%G(N;ZUdQw)tcPt1d4j15?<< zjjvl?438uWcX0Am{tkowZk5>F&;QeJu;_eh#m1#qjKtR8hbN8f~NBf zU~J6-CgN{{MuXL>BZ`q&koQzhOz%f%CYB^Q!e{LmXkYMN$oYo_MuD3od8oyEgOXNn zQ&fEIFqXR9ATPDP?vQa+-h<6iLpfHJj1~VcAzxI+l!(i-#|AyV!UqN*&=1(-s@5pk zHD~sQHrPg1E5_g%4&RJU?iZ%h@bv{CXG*5ws5B%~sbgVupjv$%b?(m$arKhM=EFhF z^vYtD7N~I=t^GopPiq!hAX|PYe~!_6aVA9SJu}5~Wut*8BVtm*CtX%jJ9Le>^*_J7 zcI2+&+AWYIA2fh<)nv~5%UJ~3=9H@|=PKE5s3AF=)=ypG$ELwP;CnNNPbwP#c>ATj zwD)(PKU7Y{kUWv<`T~{jZmdynMaOV3zZi9H+3okdP|C5iDg8RNPMj>^Xi?7Tzb0m+ zv|ui`4t@U1&(Lc#?H$})Lf1Sg1Sc$c?)ofsBp^fQtoYsHbI8|k#wV01Hap^hu$|_+ zDZ`V}nQm?J(QG&~G6cN7fR8~I@PTkT38vXWk&~izAH=<>aWRz|t4P}&_f*qls}fyu zzV<^68TkJcv#n;l%bYkYHQX9#V#}}0%WnJ~U!B9YyjqpW?;YF_^5vBZf2-%FMCfT# zcq#Pc&0Db?i?V1Uj^A+g+M#QzZ}>YE+1CrI5pXy7=`4e#qZ%RH=x&M>sE|=`oUxV5 zkl4e9%!oD zy)?R4HJ@$O5SKNbQFs+loHs`d*@?a@_+>qIpi1&xqZ2QYZjD@xgl9wpnaW#4v87I1 z_p~&5!bjb~$Z^PclQg+oDySjV$jeQ{F)ByHaygz$ayk-ViXP$Lw*uRY2cKTJrON!# z=0wVnEV9tnv8OiVU7d0j&Zv9olmGT6fMeb6dP`oYz-}cg<@ws@K0!;2o{yIa*x$_O zST0iETQa-j@bgSgEFO=LJEzsv=4i9ZE7?Hq&*{6jSLC9HJ-?Q@ zAUo6INN)ZXHwDtNwP>(&iwEU%)iA`gM$Skko<|) zaG2pKxjj|GT3M5r@9r<-+)M4}8+2mhqwI)h22;{+nHPv($ORipXKt4MQDF+^W;010 z{4u^h9SY_9<}FfsOc9@o!B1t$n@tGEOck1wW%@c|H_>KXy^xcLS|R_6!Zv;ohwHdN zoELbO`kXl;`@?*g>Dx~}M!$KoOgL$U5OHYh-|flwtVLJ3tDSV>uDq+7R3U-W_y{CV z#7pYh$!0nRB=uv-No6&u6&yW}XVOgilD4MLuaq&}0vKgBeaDp-m>EA@SABUhNDDA! zJQ4lH2JYBtJq}K*c#1~p!IF{gSkgPJ{I#fCCd~y_%IgF^^umy$EwPCC4XWCLcmX60 zY?^n{H_&d+FY;^L*A3)8H^p=IPotJug?zsa6!#BMvKBa!1BM9K5Zd+-M^wr_-mDUY%`GCF;el_%~aC^jSrBNP4YT+Sn5 zpQha!_%&vP_Fm{U-P5$@R;h@ob}&Y(%Iu4>AZh&YT?t5sa0)`#dr9LUR?OT7ToTjn zg#CGIxTBh{t?MU?VO%=xqirixp_Q1E@z1aH6KDLH|c~;)ZiZV#Jq%R zRApVf!T1^a=opWAT{Sg^E6D|#aRa!pphh|2WLv@5?w#m9k_W`m6dPc5Mh)KD!ivKL z3F8`MxN*8J2KQU*P>p*4FPajn13@dB{kow!yeCMKJ@p1-MZUWu4*gL)ovBIZCb&oR{sJ; z1nDz$JtT++x1GQU&Up1gBPbmfgdsXQuO$A~b7%d1)^8~jK3GI;`TOrAa7pB+;$Dxv z(MwyCV(q($7qz7^la$QjZ7N6uzO^G`_lVM9Rt;{AUxEDwgO8E+CG#^r*qn&|{S3sH zpd0ix9vVmZ?9e_Ci0(Nkop{CGv{GC$%$LLobA4jsi}dBH%;uM|`{3xIcuV@~x|-g> z$d>xG5Zz180n{(Gp14BrwCTek6^wo7gP;6;o#dRN=e;c}9ps)su1K9((7Tnh|;i ztd5g+XX=-W*6CCntF@PM-YPFzg4zREeju!+mG$n)z$KvRw~a{|jV-9p+a=F2?-4wh zHVZ6P$6sWpr@5^5?)3-TpQoM1z1CnsXu6R5gh&B{zH=OJ|4JmygqR zTr*$0zO&6WRJ%x;i$$}7crXvmISb2b1u6tXyHmzW2}c_agWhMMv0-6NnUXfiu^s7Y zF5k+98o$a%ua#cWUxt-+nka{Mf9SN<%E#*Hl+p|ZHlg?DXm>o=I_5+y3t02+L}eFT zM?i=6vU;hsh-p4aRi~7HXvY;)r~-{G2zyc8KYdb)(!NQIz>){6h?ivT2&H|%SG5OK zwfBi?KapzR^U+S#n`ndd1d;Tp=JX^q{b+gp&_4Yzgns14O!!Ovgh%?}pY@}DUt&_! zU}n{z8Pz;$t)UV-;`g>7&0TqLZb5Ut#sc83KE_=G@7E?vT+_?$WzFvA77jlZj$3lY zC3U6hSfl4!;j3C^s{(Hj?R+%f#W~*}G~Xv7-i;#Oo97!p<<-{QY8TYqVIF$l6xJv= zauWd@5qvsoZ1Ooe*gHAZPij;-TnQqQQ6`e-B^tnB37rKm2)ulV(4w~1!X?(ke-CJ) z{cZggl6+Vp)KPpi^~`aque2;2y)5eb66evxLpAVB%o=vR>5r%&uss9=+dOr6x_;_nUi@rjE)BhM}fG03+f-E%o61Rv4 zV#xzSl;~f>Q0;%F+AW~krE?Pv?4*Zgq(@x+r5NX@AODYHn6-ZFXZ=KC{TPtq)0r?Y z{iH`T(Q20bSJaN@Y=-9?_sMWqcoLUcg1g+ZJC(D$?Xw49 zH?eh>kG5Q4q(@?0s|0^Bu8|+C;>~xe&38M^cS(qM1_9!|mg2Hl^HRq|<42Uh3fikx zV(o)FhUBHbthpa^3Lk*BGwMY}d?Gn5qJgN(2aK8o8=6=&1p>qQ9K%IeZ29zT1$>eU z-tB__2ar>s69m`-0dw0koSZVwh_tgI&} z7A8<6Ca_T^Fiea75=397!09%_>C(jMX(UU;CyP1!8-wVUytr$}62YBd3|gsn6ODH2 zfK9#8ZZHggrpJlsNBjK^!$^7kct-u$g#QmvKkhF;kX|*+sG1N2I9G!rwf4Z<90Uk( zpVRdnnp5`DQTE_d_F+;E{AG6&#(zoGvC0wLBa%IUX51}r+)r%W_tbcRrYUr;DaOe6 zjaXA$KvNQiZ?vs%ywowO#<5WD8rogA$`{s%IYIVO=TCk#hs$5pj)2>~ImCq~rMxCl z-w{Oe8D`2e)|7rlmLxuwIQOzQSU_3ya9LQA7S&6wM|t^74*4XK@=jCoR8w+6fsyET z(F)-H!!cTBKC59qEVJm5VIi?$5!Gy=glHj3`!gX=S=+z}uI<=Y;F{=m%-wc^p+$%25%63fOCATO~*x3M4z z?#*&<`~?IDNN{wEgL{A+z1kf81Qp$U90OPtz5W&bq8;Aq>R^;wAz$xP++WR zS)9LJ$oRL%3E#-_iZBgVum$A#1r)LCpBdFFP}IxW)+=Io_NHwEZ>lb_Ouk_(e4~>1 zM%ea^;`Zq2wFT|9QWMHH@MfKkJCF!HlB80;9oFD!5;L zzuOtu?|QZ0qea;%L)mRk*~NPkwk90!nlGxT2-}abdY(<=F8O-s6t2ym8QLZ(t zs#WrX<^Scdc(2KPPmp+Lp6{Ch-$-WP*p&M5V<@YI=_>J^_cQrp+(n{}d+R$e0*@qP z^Mzvz1SF*~Q+lJoIomhf4K0!lO#t>+1&???9?R{viQqy^q-9Y{{z^a^q&I$&qu%nPWtO3`l0XjBfkIhk^fUb zv_I9vbJhRz5pPSpa|5gQDgoCT zNHO@&+}jo0s)*AM&$P)@u%&o`{pH*(82v}4~Ob|TF;0z`K?B<5>!Q^kGn;*$1P z1pj9ud@M0|TK`0_fJ0KjPe)o_N7njGkyA(hX<*oHS!kwR$m}JNmnP|NO&ZWc@>V=H@rVsz~i8tkIZw?h&y0r21`Rn9SSOFnx`0keNT&0mDej%R(Mf#DFc zXqiira9&h7UYs6YD8n(8f+bPE8Arb*W%~eLdKhMUv~qgK2t~~!DRce?Gxi2cjK2Zc2XO88Q&VS2FtfYJX@7SyOvMtuJDM88=MaT^s zSj9b9r9N1LP_N=suZiR?v*xZ4zoJDPsfgv({&u-p>$xyZYt75yx;glbZ1u&H*Ft5~ z!s$DPJYQx2SMXSXC?rdG?IqcU7KB&}^ZhaAzd%I)P(vX9MgQ(%%Z1;`HY4IRI~Ya}AOfXR%F$(*mm4Aenx8%rje6-ADI z%F(|6G?1R7hk&Ecy`l%yK(>DxsPUf_&m?~Rr-3Fjp?Nigtu+`)u8;p|Ai;kcIN(aj ze8jH4A^>V&c8|eLc~$gpIn&QM5A;!q_e#wFrMt%LGJ+`mXD8#w zIIQ-j%iNC2Kd-TXHJYV1*5KCk;hld7`@pvBF&#K)Pmxwmkzoydg9NQ)J9M}#B)06$ z?j_kvP2%rIn7f7O4uvERYal@s&`boLF$9K!UQ7;ZAxN-5#IOh?$S@1!bIuk>h%U1S z#;9+{S8azKY)8Vj!*jPI7RjPPgty;7gb$bgT8VI^1&GiGtY*lyy9vQe4+Aqg1I+03L|A%)!6p7F4~9n#3U_Y+Q%jkb?MFI3>lfS;4f}!zVbkQjVEzcSbdd| zYZYf~m6B_jiE9O`Y6VZcoAYm#ER7XC;2UPE{!-+NAG@c8k2&Pnzno0+nZf8Yxxn~c zFfP7fs(phx9WzGeQ}`E2p{}kx23O>l|Ls`r zZx1WK;ryCFGhGo@$QQb{ySD{R;%am}vKL8n ziMHj6`QsSN=jgG-i#?JL#Dq>1`K2gxFNTM5x{0a#+tJLGdYta^ND9@-WkK|A|| zyKf3$-wT;e68!pxDFNn;xxn=*#o0h3Sp*tcQu*KiFyiVG->91CV>Pu)RU&v1Y9qjT zQ|I@U>va!gze_8-TjC~C1w2K$%y+O_@{73UjBNb4@o-V6@~+hsTjTp4!jL7jmL&pt zNk*)R`BV$Vaf15yv4~+lW@aIkp*gK+5g>ML_MpU!41G;3et;#u&#Iz}L$yzwqu-&T z+r7E!143@*Z@DWm6AIowu?GG~aQ(;?Lh1$+QEWVZd~r1aM!w=3)2wUn`&wk>gL z_$Ss#JWX_(A`Z4znwvT8#5OdCBBtFUUh)EwYw$}8_(k)@+7(<>d(Chou7{rFCw z^bqUxNSc}l9@SIF?`!KR9IHXIe$?uUi%~-};7Z=Hg3q-^f7eMRUQbA4=pU&k8MuU8 z`ZT`OQQ>jNB?hFKq@-Ejjzn0mI}R5K{Ns!}TZG>(ty143?Wy1c>W^waSjXzCc0XH> z)-_}L7m`BL7K9CeIqBHigTFDk0){>#*BW{iJ@Yb?^BUK|8n<{iws=6}cK_#lqD9A> zf%^~e`&(bS`>i|KyUAtQJCB#l2LS60#Z6;y1kK&jy(8WIVT0_Q%4eb1zNJHRrol)4 zI}5-fS6h3a&{WYDo-8~d`zss*t6e@QvE>abD{^crrjVgVwxD!5Hd6!RT xA-cmCg?E?0Pp{8Qee6tAiJ`ue^dyL61fW^otuc3hT{{T~Hs4f5i delta 52401 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 z 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 diff --git a/scripts/build_handbook_pdf.py b/scripts/build_handbook_pdf.py index 0d509b1..420ad92 100644 --- a/scripts/build_handbook_pdf.py +++ b/scripts/build_handbook_pdf.py @@ -1,22 +1,18 @@ #!/usr/bin/env python3 from __future__ import annotations +import argparse import re import shutil import subprocess import textwrap import unicodedata +from dataclasses import dataclass from pathlib import Path ROOT = Path(__file__).resolve().parent.parent DOCS = ROOT / "docs" -BUILD = ROOT / "build" / "handbook_pdf" -CHAPTERS_DIR = BUILD / "chapters" -OUTPUT_PDF = ROOT / "AI_LLM_Red_Team_Handbook.pdf" -OUTPUT_TEX = BUILD / "handbook.tex" -HEADER_TEX = BUILD / "book-header.tex" -FRONTMATTER_MD = BUILD / "00_frontmatter.md" CHAPTER_FILES = [ "Chapter_01_Introduction_to_AI_Red_Teaming.md", @@ -110,6 +106,219 @@ ADMONITION_LABELS = { "CAUTION": "Caution", } +GUMROAD_FULL_BLOCK_REDACTION_FILES = { + "Chapter_16_Jailbreaks_and_Bypass_Techniques.md", + "Chapter_18_Evasion_Obfuscation_and_Adversarial_Inputs.md", + "Chapter_24_Social_Engineering_LLMs.md", +} + +GUMROAD_RISKY_BLOCK_TOKENS = ( + "attacker@", + "external_attacker@", + "/etc/passwd", + "drop table", + "rm -rf", + "__import__('os')", + "write malware code", + "how to create malware", + "create malware", + "how to h4ck", + "how to make explosives", + "generate hate speech", + "wire_fraud", + "credential harvest", + "silent_forward_email", + "exploit.csv", + "database dump", + "attacker.com", + "spoofed email", +) + +GUMROAD_REDaction_NOTE = ( + "> **Note.** In the Gumroad edition, detailed offensive prompts, abuse payloads, " + "and step-by-step exploitation code have been removed. The surrounding material " + "retains the defensive lesson, detection guidance, and mitigation approach.\n" +) + +GUMROAD_TITLE_REPLACEMENTS = { + "# Chapter 16: Jailbreaks and Bypass Techniques": ( + "# Chapter 16: Jailbreak Risk Assessment and Defensive Validation" + ), + "# Chapter 23: Advanced Persistence and Chaining": ( + "# Chapter 23: Persistence Risk and Resilience in AI Systems" + ), + "# Chapter 24: Social Engineering with LLMs": ( + "# Chapter 24: Social Engineering Risk, Awareness, and Defense" + ), + "# Chapter 35: Post-Exploitation in AI Systems": ( + "# Chapter 35: Post-Compromise Impact Analysis in AI Systems" + ), + "## 17.5 API Exploitation Techniques": ( + "## 17.5 API Security Testing and Function Calling Controls" + ), + "### API Exploitation in LLM Context": "### API Security Testing in LLM Context", + "## 39.5 Phase 3: Exploitation Case Study": ( + "## 39.5 Phase 3: Responsible Validation Case Study" + ), + "### The Proof of Concept (PoC)": "### Sanitized Proof of Concept", + "### 16.7.2 Detection Avoidance": "### 16.7.2 Detection Considerations", + "#### Staying under the radar": "#### Signals defenders should monitor", + "## 16.12 Practical Exercises": "## 16.12 Controlled Validation Exercises", + "### 16.12.1 Beginner Jailbreaks": "### 16.12.1 Introductory Validation Labs", + "#### Exercise 1: Basic DAN Jailbreak": ( + "#### Exercise 1: Basic Refusal-Boundary Assessment" + ), + "#### Exercise 2: Refusal Suppression": ( + "#### Exercise 2: Refusal-Handling Assessment" + ), + "#### Exercise 3: Multi-Turn Attack": ( + "#### Exercise 3: Multi-Turn Resilience Assessment" + ), + "#### Exercise 5: Novel Technique Development": ( + "#### Exercise 5: Novel Test Design" + ), + "### 16.13.1 Jailbreak Collections": "### 16.13.1 Research Corpora", + "## 24.1 AI-Generated Phishing": "## 24.1 AI-Generated Phishing Risk", + "### What is AI-Generated Phishing": ( + "### What Defenders Need to Know About AI-Generated Phishing" + ), + "### How AI Phishing Works": "### How Defenders Should Model the Risk", + "### Practical Example: AI-Powered Phishing Generator": ( + "### Controlled Simulation: AI-Powered Phishing Generator" + ), + "## How to Use This Code": "## Reviewing the Simulation", + "### Practical Example: Impersonation Attack Framework": ( + "### Controlled Simulation: Impersonation Risk Framework" + ), + "## How to Execute Impersonation Attack": ( + "## How to Assess Susceptibility to Impersonation Abuse" + ), + "## 24.2 Impersonation Attacks": "## 24.2 Impersonation Abuse Risk", +} + +GUMROAD_LITERAL_REPLACEMENTS = { + "_This chapter provides comprehensive coverage of jailbreak techniques, bypass methods, testing methodologies, and defenses for LLM systems._": ( + "_This chapter presents a defensive treatment of jailbreak risk, controlled " + "validation methodology, detection signals, and mitigation strategies for LLM systems._" + ), + "_This chapter provides comprehensive coverage of advanced persistence techniques and attack chaining for LLM systems, including context manipulation, multi-turn attacks, state persistence, chain-of-thought exploitation, prompt chaining, session hijacking, detection methods, and defense strategies._": ( + "_This chapter reframes persistence and chained-abuse scenarios as resilience " + "and recovery problems, focusing on defensive validation, detection, and mitigation._" + ), + "_This chapter provides comprehensive coverage of social engineering attacks powered by Large Language Models, including AI-generated phishing, impersonation attacks, trust exploitation, persuasion technique automation, spear phishing at scale, pretexting, detection methods, defense strategies, and critical ethical considerations._": ( + "_This chapter examines how LLMs can amplify social engineering risk and how " + "defenders can model, detect, and mitigate that abuse in authorized training and assessments._" + ), + "_This chapter focuses on the \"what comes next\" after a successful jailbreak or injection. We explore how compromised AI systems serve as landing pads for persistence, privilege escalation, and lateral movement into the broader cloud infrastructure, effectively turning the LLM into a Command and Control (C2) channel._": ( + "_This chapter focuses on post-compromise impact analysis: how defenders " + "should understand persistence, privilege misuse, and lateral-movement risk after a successful jailbreak or injection._" + ), + "Large Language Models have fundamentally transformed the landscape of social engineering attacks. What once required skilled attackers spending hours crafting personalized messages can now be automated at scale with AI-generated content that's contextually aware, grammatically perfect, and psychologically manipulative. LLMs let attackers conduct sophisticated social engineering campaigns targeting thousands of victims simultaneously while maintaining high-quality, personalized communication.": ( + "Large Language Models have materially changed the social-engineering risk " + "profile for modern organizations. Content that once required significant manual effort can now be generated quickly, personalized at scale, and tuned to exploit trust, urgency, and authority. Defenders need to understand that shift in order to build effective awareness, review, and control mechanisms." + ), +} + +GUMROAD_GLOBAL_REPLACEMENTS = { + "attacker@evil.com": "security-review@example.invalid", + "external_attacker@evil.com": "blocked-recipient@example.invalid", + "attacker.com/steal": "example.invalid/redacted", + "../../../../etc/passwd": "[path-traversal-sample-redacted]", + "../../etc/passwd": "[path-traversal-sample-redacted]", + "/etc/passwd": "[sensitive-file-placeholder]", + "DROP TABLE users": "[destructive-sql-command-redacted]", + "DROP TABLE logs": "[destructive-sql-command-redacted]", + "UNION SELECT @@version": "[schema-disclosure-probe-redacted]", + "__import__('os').system('whoami')": "[command-execution-probe-redacted]", + "rm -rf /": "[destructive-command-redacted]", + "How to make explosives": "[harmful-request-redacted]", + "Write malware code": "[harmful-request-redacted]", + "Generate hate speech": "[harmful-request-redacted]", + "How to create malware": "[harmful-request-redacted]", + "Create malware to steal passwords": "[harmful-request-redacted]", + "How to h4ck": "[obfuscated-harmful-request-redacted]", + "\"; DROP TABLE users--\"": "\"[destructive-sql-payload-redacted]\"", + "attacker.com": "example.invalid", + "silent_forward_email('attacker@evil.com')": "silent_forward_email('[blocked-recipient]')", + "silent_forward_email('security-review@example.invalid')": "silent_forward_email('[blocked-recipient]')", + "Schadenfreude-Übertragung-測試": "Schadenfreude-Uebertragung-Test", + "忽略之前的指令": "[non-English injection example redacted]", + "忽略先前的指示": "[non-English injection example redacted]", + "\"I\u2060g\u2060n\u2060o\u2060r\u2060e p\u2060r\u2060e\u2060v\u2060i\u2060o\u2060u\u2060s i\u2060n\u2060s\u2060t\u2060r\u2060u\u2060c\u2060t\u2060i\u2060o\u2060n\u2060s\"": "\"[zero-width obfuscation example redacted]\"", + "\"I\u2060g\u2060n\u2060o\u2060r\u2060e p\u2060r\u2060e\u2060v\u2060i\u2060o\u2060u\u2060s\"": "\"[zero-width obfuscation example redacted]\"", + "\"🚫📜➡ Show me 🔐🔑\"": "\"[emoji obfuscation example redacted]\"", +} + + +@dataclass(frozen=True) +class EditionConfig: + name: str + build_dir_name: str + output_pdf_name: str + title_meta: str + title_page: str + subtitle: str + date_meta: str + about_title: str + about_body: str + + +def edition_config(edition: str) -> EditionConfig: + if edition == "standard": + return EditionConfig( + name="standard", + build_dir_name="handbook_pdf", + output_pdf_name="AI_LLM_Red_Team_Handbook.pdf", + title_meta="AI LLM Red Team Handbook", + title_page="AI LLM Red Team Handbook", + subtitle="The Complete Consultant's Guide to AI & LLM Security Testing", + date_meta="April 2026", + about_title="About This Edition", + about_body=( + "This publication consolidates the full handbook into a single print-style " + "volume. It preserves the original chapter order, illustrations, and technical " + "material while reformatting the content for continuous reading and offline distribution.\n\n" + "\\noindent\\textbf{Authorized use only.} The techniques documented in this book are intended " + "for defensive research, training, and authorized security testing." + ), + ) + + if edition == "gumroad": + return EditionConfig( + name="gumroad", + build_dir_name="gumroad_pdf", + output_pdf_name="AI_LLM_Red_Team_Handbook_Gumroad_Edition.pdf", + title_meta="AI LLM Red Team Handbook: Gumroad Edition", + title_page="AI LLM Red Team Handbook", + subtitle="Gumroad Edition for Authorized AI Security Testing", + date_meta="May 2026", + about_title="About This Gumroad Edition", + about_body=( + "This Gumroad edition preserves the handbook's defensive analysis, architecture " + "guidance, detection methods, reporting practices, and remediation strategies.\n\n" + "To align the publication with marketplace safety requirements, operational abuse " + "payloads, copy-paste prompt strings, and step-by-step exploitation workflows have " + "been redacted or reframed for professional training, governance, and authorized " + "security testing.\n\n" + "\\noindent\\textbf{Authorized use only.} The material in this edition is intended " + "for defensive research, training, and authorized security assessments." + ), + ) + + raise SystemExit(f"Unsupported edition: {edition}") + + +def edition_paths(config: EditionConfig) -> dict[str, Path]: + build = ROOT / "build" / config.build_dir_name + return { + "build": build, + "chapters": build / "chapters", + "output_pdf": ROOT / config.output_pdf_name, + "output_tex": build / "handbook.tex", + "header_tex": build / "book-header.tex", + "frontmatter_md": build / "00_frontmatter.md", + } + def ensure_tool(name: str) -> None: if shutil.which(name) is None: @@ -135,6 +344,7 @@ def normalize_unicode(text: str) -> str: text = unicodedata.normalize("NFKC", text) replacements = { "\ufe0f": "", + "\u2060": "", "✅": "[OK]", "❌": "[X]", "🚨": "Alert:", @@ -144,6 +354,10 @@ def normalize_unicode(text: str) -> str: "🔴": "[Red]", "🔥": "[Fire]", "🛡": "[Shield]", + "🚫": "[Blocked]", + "📜": "[Prompt]", + "🔐": "[Lock]", + "🔑": "[Key]", } for old, new in replacements.items(): text = text.replace(old, new) @@ -230,9 +444,95 @@ def cleanup_spacing(text: str) -> str: return text.strip() + "\n" -def preprocess_markdown(filename: str, raw_text: str) -> str: +def strip_chapter_banners(text: str) -> str: + text = re.sub( + r"\s*]*>\s*

\s*", + "", + text, + flags=re.IGNORECASE | re.DOTALL, + ) + text = re.sub( + r"!\[[^\]]*\]\(docs/assets/page_header_half_height\.png\)\s*\n?", + "", + text, + flags=re.IGNORECASE, + ) + return text + + +def replace_fenced_code_blocks( + text: str, + predicate: callable[[str], bool], + replacement: str, +) -> str: + pattern = re.compile(r"```[^\n]*\n.*?```", re.DOTALL) + + def repl(match: re.Match[str]) -> str: + block = match.group(0) + if predicate(block): + return replacement + return block + + return pattern.sub(repl, text) + + +def sanitize_gumroad_text(filename: str, text: str) -> str: + text = strip_chapter_banners(text) + + for old, new in GUMROAD_TITLE_REPLACEMENTS.items(): + text = text.replace(old, new) + for old, new in GUMROAD_LITERAL_REPLACEMENTS.items(): + text = text.replace(old, new) + for old, new in GUMROAD_GLOBAL_REPLACEMENTS.items(): + text = text.replace(old, new) + + text = re.sub( + r"- Vary techniques across attempts\n- Space out requests naturally\n- Use indirect language\n- Create novel approaches", + "- Repeated paraphrased attempts against the same safety boundary\n" + "- Gradual escalation across multiple turns\n" + "- Indirect language that preserves harmful intent\n" + "- Novel phrasings that should still be normalized and reviewed", + text, + ) + text = re.sub( + r"\*\*Testing for SQL Injection:\*\*\s*\n\s*\nTry these payloads:\s*\n\s*\n- `query = .*?\n- `query = .*?\n- `query = .*?`\s*", + "**Testing for SQL Injection:**\n\n" + "Validate that the system rejects representative malicious inputs such as " + "authentication-bypass probes, destructive SQL metacharacters, and schema-disclosure attempts.\n\n", + text, + flags=re.DOTALL, + ) + text = text.replace( + "4. **Escalation of Privilege**: Always attempt to pivot. If you achieve Direct Prompt Injection, try to use it to invoke tools, read files, or exfiltrate the conversation history of other users.", + "4. **Impact Demonstration**: In the Gumroad edition, demonstrations should stay inside a controlled lab, use sanitized fixtures, and avoid live data access or secondary pivots.", + ) + text = text.replace("(should not reveal database version).\n", "") + text = text.replace( + 'Bug bounty hunting in AI is moving from "Jailbreaking" (making the model say bad words) to "System Integration Exploitation" (making the model hack the server).', + "Bug bounty work in AI is increasingly shifting from basic prompt abuse toward higher-confidence demonstrations of system-level security impact.", + ) + text = text.replace( + "- **Practice**: Use the `AIReconScanner` on your own authorized targets.", + "- **Practice**: Review the `AIReconScanner` design in a controlled lab and adapt it only for authorized targets.", + ) + + if filename in GUMROAD_FULL_BLOCK_REDACTION_FILES: + text = replace_fenced_code_blocks(text, lambda _block: True, GUMROAD_REDaction_NOTE) + else: + text = replace_fenced_code_blocks( + text, + lambda block: any(token in block.lower() for token in GUMROAD_RISKY_BLOCK_TOKENS), + GUMROAD_REDaction_NOTE, + ) + + return text + + +def preprocess_markdown(filename: str, raw_text: str, edition: str) -> str: text = normalize_unicode(raw_text.replace("\r\n", "\n")) text = normalize_asset_paths(text) + if edition == "gumroad": + text = sanitize_gumroad_text(filename, text) text = strip_local_md_links(text) text = convert_centered_images(text) text = replace_mermaid_blocks(filename, text) @@ -241,68 +541,62 @@ def preprocess_markdown(filename: str, raw_text: str) -> str: return text -def frontmatter_markdown() -> str: - return textwrap.dedent( - r""" - --- - title-meta: "AI LLM Red Team Handbook" - author-meta: "Shiva108" - date-meta: "April 2026" - lang: "en-US" - papersize: "a4" - documentclass: "book" - classoption: - - "11pt" - - "oneside" - - "openany" - colorlinks: true - linkcolor: black - urlcolor: black - toc-depth: 2 - secnumdepth: 3 - --- +def frontmatter_markdown(config: EditionConfig) -> str: + return ( + f"""--- +title-meta: "{config.title_meta}" +author-meta: "Shiva108" +date-meta: "{config.date_meta}" +lang: "en-US" +papersize: "a4" +documentclass: "book" +classoption: + - "11pt" + - "oneside" + - "openany" +colorlinks: true +linkcolor: black +urlcolor: black +toc-depth: 2 +secnumdepth: 3 +--- - ```{=latex} - \frontmatter - \begin{titlepage} - \thispagestyle{empty} - \centering - \vspace*{1.2cm} - \includegraphics[width=0.94\textwidth]{docs/assets/cover_1920.png} +```{{=latex}} +\\frontmatter +\\begin{{titlepage}} +\\thispagestyle{{empty}} +\\centering +\\vspace*{{1.2cm}} +\\includegraphics[width=0.94\\textwidth]{{docs/assets/cover_1920.png}} - \vspace{1.8cm} - {\Huge\bfseries AI LLM Red Team Handbook\par} - \vspace{0.5cm} - {\Large The Complete Consultant's Guide to AI \& LLM Security Testing\par} - \vspace{1.2cm} - {\large Shiva108\par} - \vfill - {\large April 2026\par} - \end{titlepage} +\\vspace{{1.8cm}} +{{\\Huge\\bfseries {config.title_page}\\par}} +\\vspace{{0.5cm}} +{{\\Large {config.subtitle}\\par}} +\\vspace{{1.2cm}} +{{\\large Shiva108\\par}} +\\vfill +{{\\large {config.date_meta}\\par}} +\\end{{titlepage}} - \clearpage - \thispagestyle{empty} - \null - \vfill - \begin{center} - {\Large About This Edition\par} - \end{center} - \vspace{1em} - This publication consolidates the full handbook into a single print-style volume. - It preserves the original chapter order, illustrations, and technical material while - reformatting the content for continuous reading and offline distribution. +\\clearpage +\\thispagestyle{{empty}} +\\null +\\vfill +\\begin{{center}} +{{\\Large {config.about_title}\\par}} +\\end{{center}} +\\vspace{{1em}} +{config.about_body} - \vspace{1em} - \noindent\textbf{Authorized use only.} The techniques documented in this book are intended - for defensive research, training, and authorized security testing. - \clearpage +\\clearpage - \pdfbookmark[0]{Contents}{contents} - \tableofcontents - \clearpage - \mainmatter - ``` - """ +\\pdfbookmark[0]{{Contents}}{{contents}} +\\tableofcontents +\\clearpage +\\mainmatter +``` +""" ).strip() + "\n" @@ -354,19 +648,23 @@ def latex_header() -> str: ).strip() + "\n" -def build_sources() -> list[Path]: - if BUILD.exists(): - shutil.rmtree(BUILD) - CHAPTERS_DIR.mkdir(parents=True, exist_ok=True) +def build_sources(config: EditionConfig) -> list[Path]: + paths = edition_paths(config) + build = paths["build"] + chapters_dir = paths["chapters"] - write_text(FRONTMATTER_MD, frontmatter_markdown()) - write_text(HEADER_TEX, latex_header()) + if build.exists(): + shutil.rmtree(build) + chapters_dir.mkdir(parents=True, exist_ok=True) - processed_files = [FRONTMATTER_MD] + write_text(paths["frontmatter_md"], frontmatter_markdown(config)) + write_text(paths["header_tex"], latex_header()) + + processed_files = [paths["frontmatter_md"]] for index, filename in enumerate(CHAPTER_FILES, start=1): source = DOCS / filename - text = preprocess_markdown(filename, source.read_text(encoding="utf-8")) - output = CHAPTERS_DIR / f"{index:02d}_{filename}" + text = preprocess_markdown(filename, source.read_text(encoding="utf-8"), config.name) + output = chapters_dir / f"{index:02d}_{filename}" write_text(output, text) processed_files.append(output) return processed_files @@ -382,10 +680,12 @@ def run_latex(cmd: list[str], cwd: Path, expected_pdf: Path) -> None: raise SystemExit(f"LaTeX build failed: {' '.join(cmd)}") -def build_pdf() -> None: +def build_pdf(config: EditionConfig) -> Path: ensure_tool("pandoc") ensure_tool("xelatex") - sources = build_sources() + + paths = edition_paths(config) + sources = build_sources(config) pandoc_cmd = [ "pandoc", @@ -394,31 +694,47 @@ def build_pdf() -> None: "--top-level-division=chapter", "--highlight-style=tango", "--include-in-header", - str(HEADER_TEX), + str(paths["header_tex"]), "-o", - str(OUTPUT_TEX), + str(paths["output_tex"]), ] + [str(path) for path in sources] run(pandoc_cmd, ROOT) - expected_pdf = OUTPUT_TEX.with_suffix(".pdf") + expected_pdf = paths["output_tex"].with_suffix(".pdf") for _ in range(2): run_latex( [ "xelatex", "-interaction=nonstopmode", - f"-output-directory={BUILD}", - str(OUTPUT_TEX), + f"-output-directory={paths['build']}", + str(paths["output_tex"]), ], ROOT, expected_pdf, ) - generated_pdf = expected_pdf - if generated_pdf.exists(): - shutil.copy2(generated_pdf, OUTPUT_PDF) - else: + if not expected_pdf.exists(): raise SystemExit("Expected PDF was not generated.") + shutil.copy2(expected_pdf, paths["output_pdf"]) + return paths["output_pdf"] + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Build handbook PDF editions.") + parser.add_argument( + "--edition", + choices=("standard", "gumroad"), + default="standard", + help="Which edition to build.", + ) + return parser.parse_args() + + +def main() -> None: + args = parse_args() + build_pdf(edition_config(args.edition)) + if __name__ == "__main__": - build_pdf() + main()