From 879771ded2e50d0c1bc87cae86c3b9adb4c19560 Mon Sep 17 00:00:00 2001 From: dancho Date: Wed, 14 Aug 2024 08:17:38 -0700 Subject: [PATCH] Add an experimental flag for renderer dynamic scheduling Use ExoPlayer dynamic scheduling to reduce the render() interval for older API devices where `DefaultCodec.getMaxPendingFrameCount()` is set to 1 in order to prevent frame drops. Controlled via API on DefaultDecoderFactory. Add TransformerForegroundSpeedTest that mimics transcoding while the app is in foreground. PiperOrigin-RevId: 662925764 --- .../media/mp4/long_1080p_lowbitrate.mp4 | Bin 0 -> 816689 bytes .../media3/transformer/AndroidTestUtil.java | 12 ++ .../mh/TranscodeForegroundSpeedTest.java | 187 ++++++++++++++++++ .../transformer/DefaultDecoderFactory.java | 39 +++- .../ExoAssetLoaderVideoRenderer.java | 17 ++ .../transformer/ExoPlayerAssetLoader.java | 4 + 6 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 libraries/test_data/src/test/assets/media/mp4/long_1080p_lowbitrate.mp4 create mode 100644 libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeForegroundSpeedTest.java diff --git a/libraries/test_data/src/test/assets/media/mp4/long_1080p_lowbitrate.mp4 b/libraries/test_data/src/test/assets/media/mp4/long_1080p_lowbitrate.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..1eaf214dec0a3c4c394cc8d7b75eb2972829c88c GIT binary patch literal 816689 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 pX|LpUhoq!W?0#3jQH~}Z%1e|~q zZ~{)i2{-{K-~^n26L11fzzMYf1U|$0&!4`JtEFmXHnl1zD`=@x3e_*mnq6GQOT>}N zSwZ}`2AUH`EA!&V%7QprSQun;^+v8_>n(|BbBMG(6KU~QCSc_Ru;w4F-sYK zS^PLcB94sURBNnkI@O$Xi+i<_z%0F{^a|1|D`piWJ*o5z(8dksPBnI5v36fM)#^EX zR$j7-=@rD0t1@*?srn_Uk0X@D(aJ=8_o{m}CJk`0mx1 zKz*i~@u95}NovbpbP{PCZL}bMj58;WR@P_Cl7LgKzWw?K1GDtXir1Q6Q`$dzWyMOp zrnIsk*I=wHilddK48JUX93c@$M(_^?YIL-FnsMKl}V=C*TB}fD>>6PQVE` z0Vm)DoPZN>0#3jQH~}Z%1e|~qZ~}FZz-K=HS=PtexWXCNOmr1a$JDjBN@Z#lPAXGd zNn&MQR%W!akl`1_k0X@C(Gkkx$I3(;schr%c{)NtMy@>8LTxCImCC7ODsAKs@+ea2 zR8!mZooY-VU%Oj81Jqa{*DEWgm&-`csg@;~I4>pQEN~-NkV3~C!z)Q9I;k%>W~ub; zE43Hesm26y(pS;RizEG$I{j7sqSQN8r&>wCZ?$T?eaN`7{8p<*R-yH*lKT5)GXJE` zDOJBvHG9EQ_O+iTLqK58_CrKWuphsL|E=+TG$Aphi}DWyO0+E+ajsT9#zu zyp)I|^U@;w6tKV#aK(%VFNq&tQUzB`#s4f5tq+85|A&0Ek6+K|XW;~#fD>>6PQVE` z0Vm)DoPZN>0#3jQH~}Z%1e|~qZ~~tvfloOQT9+IKb@(tGKUJNAELW&s6hAIwl*G}> zviPww5l1Q)@mA=#WTKq#SS{x%+-C6ATb^Waot+KHqcGYR5odbtcgFTPWCsxg5=>#j)cBbC1T z!cQue$MOtNy<^1lYHE*e?B1euuk??5)$akSuOPp(s=Il0LHoEC@h^pt>8I{umgnwN zXXzVlO~!AvVj7xB$hd*$#E-Xnr&?~ENlPM*Q>6PQVE`0VmKt5}1Gf zv##XyT|H^|sIxk{=~;bU--s(7#f%k?lK8Q*ERK$u)b>+bpDQDzw&utPsdeL6S;!c( zD1NLgiKAndGyFvS_`HHRGD2$WbF9o~R2IaKl|^xM%#!%AvMi2PCbfO1T4Q^YQ_V@Y zxK}F)EaLq*UskFa8@Xhv@RZ;wp+*9p65=(YS4vr?N%a%)tl%8R3YRS-W` z7RAxZlKAdbr&>wC?*TI311!V`IK9+joO+ST#aHJs`xI!O0__BxfD>>6PQVE`0Vm)D zoPZN>0#3jQH~}Z%1e|~qZ~{)C{UfXW_;Dd8h$CaBwnE3sd`4wK{8(8ON5?E>_+|0q2#Gi{LQ4?8QkmNCq?P%q%7Qpr zSX7-i=!hX;z#}0#3jQH~}Z%1e|~qZ~{)i2{-{K-~^n26R3j(7TNjFx{gt-S_>_Sqm^ax z*5_E6&!{Y9_(k#K2qkg! zvC87d%0wKgbgHRMx=uAFkdtnSPQK#AuM6^ZQNAw8*Jb%S`R~{B`>it0{B5A|>%7zy zm~Wj-{lcA5C6?- z{)`v>y!ZwAx+q_lkgYzvDP9#Z4+-FFw1^*zw~J=d~I$_V7_7 z_^13??2n{kDt|8HfjuNDgpd(Cd1IP_5d;{nZwRvvRPDU74d zd)(H4T0Ks!$6c}*!s2}^-?(AZh~`OrwRY2(NzLX;^i4>bL0Gy-%<1y?XY}jTt>`O7AT;kN>gq z|D8Ynn1A-7YP*JSmpA?R)v(6F{PV>yrE!zjPYhwPu=u?Hdw)RT@f^X8dh$n4=Jf{VWuC&k*I?eCu4o?izxc;r`S0&B_@8*S z=7!MW_aQ9tdd=pSuS<&(%W@_%88tfqHoUzMuO#uZKRb_vh&Qxv%qjzXs~z`TKtE z>%1QNyxyOq@8`bG>-`$2hv)D6xv%qj=<|Aij=rD!I!Hu<{W-{cbh`#P_OKCk!Z z==-^^^LoDq>f!nOe(vkM9{RlApQG>RzRv6Y8mNco@B6v0^Lps>dVh|-pZhwm_iLaY zp1<$szRv5R&+Gj;`hM=~yxy;YdU*c6pZhwmhd!_O=ji*nuk(7p2I}GY`+n~0ydL_z z-k+oI=f2MC{Tir;=kNQuuk(87^Ll@dzMuO#ulH-99-hDN=f2MCq0j66Ir@I?>%88t zfqHoUzMuO#Z{6oVeP&Yg@bTorpKtc!|8@#t&EKKFgs|2Us0-?ec1HW5iRct`0lEb} zf?h`Nhp=`>v?l6}c0~uEW;7LDgl<5Op#=RogmsoiYopE4j_4pX0Zm6GbQ5|4!LtrL zUEt{gPnRtaJY5P1o-Xiofu{>RUEt{gPnW-iur567<`6vV!m}%z0{Y3L$!8-izD zc-Dm{2Tu;396Y(*(Lv~N1Wyj096ULAa&r(o>n)4AAb8e;XFYh*1HtJv)<3q z%LtzJ;aMM^_4^`t)*pu8Ss$MD;aMM^_2F3`p7lQrVFP$JSRcW&0X!SPvjIFC{20Nr z!5s*m4dx(tHiTzGcs7J*!|xz?Hk^Xs*$|!$;n@(L4PQg>Y_vRrXCrtvf@dRmHiBm( zcs9Bm!L!jX5j-2gvoSmyuaEj6cs3q^;Mo|Sjp5lCo{izzcn_{LIbJ=6#7h7LrN z(KK{1x*a`^UPb>)Z!d$^LEl1qpdsi8bTYaG-He_@zej%!VYB7Xx@b$Z3mS?hA$T^s z48gP6FAzMN!P6CNha-5po{r$@3Qt#fy28`-A0c#ur`rYyo^J4TgQpuj z-Qej4Pq#Y}Jl*CZc)G*W9iHy+bpI}br~8ozp6>8;ho?I{-QnpDPmdK4JUzBT@brME z2RuFC>2U>uXQ$`UpF-HV0j-QSLj%!XXe>G&os0elJ%FA@Z-ubSVrW&=4Q+$=L8H+L z=xlT~dI&v>-a#LSu@JiD!d;Mr|E1kY~p>;}(n z@a%Ryf@ilE5j?xYvpYPy!?Qa)yTh|PbK36k?0!CiXLopZhi7+q_UM4%*`o)7XAgMx zfM*YQ_JC&(c=mW0!L!GEA$$j(@4)jNc)l|TjX}qundqmejGjVoqJM|*-BnOmv^Clr zjY36q7Wx@_5Iuw5MjwUnz17gBD3A6;hoB##8R!~xA9@b`F@*02)ERvfeH+2^eR#eP z&-dZ^{!bA+-+uwYvu7iMXHR(cglA89_8f=c+4DRE&z|t?3D2JJ>;U2LMJo~&K!oKkA3(vmr>m-0rdR=^nEid&3_4DGAxt3pe@kOsDNOZdZOBltZu_ zzAJ*|@Md%xx(MBdU^zTNe-7b@rP11GbF@1;2px{5qY}CaJ%Q#Rc&03i;F+=of@cam zQzjyKrd*2PneuZ4&lGr$gy%?jj_ixzIdT|+=SX;tgy%?jj)dn(c#ixqgrnd&YJCLH zQScmf5Q68ZA0v2EIh~l zGlb*dIc`G)&vEb^2hVX+&>0AxVp5x&;9-iaj zIsOgwVF<-e2%aK5MRNcL(mcEWONC-6Tx%hTm;Wa@SFtCN${NXT?EfbMIw*+saqj zY4A*gXWG9)m=4eMjSxK3;h7H4baJ{Xfw1O+6#?E$D?!6_2>cgB6=%?%N9ecqHbs#v=17OPC)0Q ztI4a|JwCz;h)$SFVNNxpD^t&z1083D1@ATzMmc=gQwAc&>uyDtNAf=PG!vg6FEk z&-bNpV@UzuWca%r_qC?OR5j;PG=V!AKJU@Fk1fmUB!*ew}SHp8PJXgbW^@#|c ztFJ@wTn*3F@LU7WHESYxuGt>Ja}7M#z;g{e*T8cPJlDL0;JJ2j1kbhbTno>&@LW3q z!ExzIts4i9&sH!*S#OY_3&H|&-L(J z56|`RTt5y?MetmI1A^yzc&>-%26%4Z9&tl=v?GG&26%3O=LUFgfaeByZulK~H-sCP zK=9lM&yDch2+xh&BW{G}#tRTUH^OrxJU7B~6FfJ;b5m~w&rJs)cy5B{CU|aw=cdOH zJU9J0gqz{H8J?Trxf!0D;kg-}o2MgqZoUb@b2B_Q!*dHfw{$`9+_E!*=N5Qwf#()@ zZh_|(cy4(a!EsUnJ-%8)#O5fi~-``5#-%8)#M&IAYb$DAhMBm>= z-`_^x-$vixM&I8?v)o4C|8frcO9;PO7QynXEf6ffDj-;Xbqcx^-GY9OVENVGLijZ- zzs{k)Xje20HKWteMd&v47)sEGA^c`(v_9G#?T!vYhoc{(61oFDf#CVgUqX0lSp?5h z@I3V$1kY1b5Ij%8^VBT}o~K?z@I1Xdg6C;?o`&aXc%E)X@H~Avg6HX9B6yyL=NWjO zf#;ci2%cv~Ab6gE=NWjOf#(@`o`L6?e}?cZJkM^3;CU9FXW@Ako@dWM@H~4Lg6COy zp8Z=0&%yH?JkP=N-1iVX&mD!}c@CcEZbR@q_XdLJ`A!I)=izxCp6B6t{%{1(^H(Bx zp8qw1=XrQufae8xUKoJjd0`}i=LL9Pfae8xUV!HXcwYE-2rt6(;>HM`7vXsko)_VH z@hk+-i}xUSUWDgGcwU0%C3s$f=cPRnJTD!C;CTt2m*9B`o|pcJ;Q8$a=v!zHGz1-i zxPSik5_Bhe63s<_4dHjop>@%g=(}hrIuf0VE$>{ z6`oh&dG#s;&#S*d@VpAo9C+ryGY6hI@XR?F!87Mf1kW6J=D;%to;m*sVJEDg`n@GK3_((o)j9l^8oO$eT);aM7lE@GSS2(6Br_%fqugJj=tgJUq+8v-~V{EqWL| zkKPLnD>R@rP%pF{+8>QYC!urE_2>cgBBJj*(f6I``%d(IC;GnAK8U{WMBjI!?>o`= zo#^{b=O9?Vu`Gh+8(X07paPnLPC=KVThPzZYv^yG;hW2&9O{d9MZ-`tIt^WpZbQFB z3HmTJY_>F7AN51KqY>zE^kY;)cObIa44%#Y85+96({)1xPgi)l!qXL=u4f>4y55E0 z=?YI*c)G#U4W4fBbo(BHr`u5oo^J4TgQpuj-QGa(bnk@V=?+hKc)G*W9iHy+biWe8 z)BV>7p6>AUfTssMJq93ndW=Ny^nj-aJU!s)0Z$Kjdi*;y^n|D9#t5FC@brYICp}l z!P5_(e(>~zryo51?nUtQ`vZcfKRo^6=?_o;A0T-8AB*7W4^Mx1`oq&7p8oI*SQ)`H zU?75L06YWW8350K|3UB!cpAYo0G@&H41{MOJOkkwI2yq-@N5LnKzR0g9=#VD_FfXL zfqJ3s(EeyFItiVNu1Ale7tsfyVV}j&TBsY^0Ue0OqiN`TbR&8Q{T96w8usmg)c08as)LT?05;Q$0r z0iFUp1$YXNA$SUZ4h=)$84Ax(c!t6=6rQ2*44sbP8F~|fXDB>F;TZBG=k?~cn*f=V0aEb9KmyN3BhwPJO|VF zqv-olt0Ve;6n#I6z8^*3kD~8K(f6aSMfCkB`hFCBKbpQDP2Z2E??==3qv`w6V-bBn zn!X=R-;bv6N7MJC>H9+#Lu;WvXa{s48jq%-^U;myq0sQdIq09E;YZ7&4bc|pJE(xB zpfk{==q~hg^cwnGXgG0sL^db(Mc+fi&{60#bUC^W{Sv)_J`4>fbwcZ-erR_z0+G#0 zKSo!gJJ7EYJSV|36`rZ^OdWvWnK}}|GZmhx@JxkgDm+u+nfmY0Fb$q*8zXq8!7~k> zY4A)t3&At(9t6)cc&5QK9iHj%OowOso(P`l#~^s7!!sS8>F`YdBZBATl@L59!*en` zC&P0xJSW3*@=p;wCqISYIT@Z);5h}JQ?^F%oH7c*a|%4Cz;g;br@(UxJg0mV8cv1h z)J+jQr^0h8Jg35Q>I?+WsrMmxPKD=Gcus@oG6 zg6AxF&VuJGc+OrK!E^RN1kc&40vY1GvnjXa1K1@d;`IA4m{_;a}GS`z;g~f=iHCrIpgl8r^ zGxtL9%sd{!GZUVf@XUl~COk9YId@eA&$-(mc+Q3ATzJlf=iI9iJlFpoy%!p8SQ4#) zdZF#m{%8_930;V;M~|Wx(FdX7#--3&s1Mo!9f-!GY3O`(BYGVD7X5E%xTynL2lYTZ zp&{rnbTXQSZblCycy5B{W_WI17r}G$E(o5RPee1(b?6cF0(w6*+|r2FL|xJLXm2zQ zO-1LS8_V^xOH)~HtLRcMEjx%=!d8UU4v$$-=TLy!);5T&ZsB)HrfwOMDW~p z0fOf?cy5E|Hh6A_=XQ8*?~UNO{Qv~d?eN?V&+YKs{uqMi_CJS)JK(tko;%>V1D-qJ zxdWa%rXzUnxCy~?2RwJcb0<7^c0usmxif<2PI&Hw=T3O;gy&9p?tB@+b5}=U#a3 zh3DP`!E@iz2%h`kxeuQE;JJ@`#C`DGS3>aI2hV-*+y~G7@Z1m2{aYY-?k^yC?uX}o zcn@H{}@KS19H7!i`v>X!2kH9<>H7!i z`-kZJht@#!{X_KqL-hSalh8@%LUcWP6up8z2o1BBLTe#-X2UZZp4srshG+K02%g!G zhlbzHLH`U5zh4$@hz6kVppj?_Is;vb?m}eq``6IFL&M9~m}z>~m}{1m~HJcZy% z;CU6ESK)beYXr}$qYyl=!t*LTufp>xJg>s@>PMkr4m@)#5Il3?nG4Tcc;>!|;CXEo1kY>myavx}@Vo}kYw*1G zGX&3T&meeSgXeX4UWe!PJc8%-Ll8W#!}B^kufy{?Jg>vUkHj0^fai^GB6!|_=M8w? zfai^w2%a~}2%b0o6&n7){qqkSA?}}l_%1pa9f{6Fm!Z26_s>7Pj{XxG{}OHZ^QHU zHxN8;!}B&gZ^QF8Ja5DE_WcN+xBrCTc?X_%;CTn0cesDP1J66hBY56{=N)+7f#)4~ z-ht;`?w{|%^X@hXo_FDS7oKcC_u+XTp7-H-AD;K&dH(?f&--s7cs_vV19(1w=YxF^JRh8Z z;Q0Wa5AF?(OZ^_b7aEsd60M7Rp0{cmVob{Vt|`WD&=4MB&YlhG_R8~qNw8yc5e0(C|`(YMilXd*fhU4X7b zkDwRO`=N39MzkjCjkZSzpmAs_IuG4|9z!poKZnK@7DsEN?r2A}FPea+qZV`%f@cMI zR)D7yJe|5AcslKj;OPWUCwMx+(+QqV@N{|^!LwpV1kZ}_tO(DF@T}O3;92n^1kZ}_ ztO(DF@T>&SO7N_-If7@UgAhC`!Lt%PE5WnU69}G_{t_BjhG%7XR)%L~cvgmIWq4LT z1;MlOEeM{K;aM4;Rp41Ahu~RdR|L;0@T>yQD)6iV&nob&k|20iT^hl&Dm<&gvno8R z9**EywS?eV6`ob$Srwku;8_ix)wV$JtX4qqtOn0&@T>;UYClKttoFCixH>$m!?QX( ztHZN8JgdXA`e_KB)o(-atPaoW@N|Z!^ZE#$&buRcI>XZ$p3d-ehNm+;o#!BU)>sz7 zvj#kCz_SKCYfM4#tZ^xVXAOAPfM*SO)`VwGc-HKT;8}ARqVLzF@7KH@(f4c8_iNJk zYti>>(f4c7_iNGjYti>>jYstTTJ-%|^!-}&{aW<>TJ-(e9T0uLHhsS~eZMw+zczip zHhsS~eZTh2=wbAG^w-e1&XQR_{)qk=8n;{tZHNY-@1T*0Y_>cD{S@7Wog)T?;pkJal&_|(ht4?TB)DP{6MxbNR40I*B5B(a!vlTr3;OPfXKY02LLh$rE z4#Cq8o__H3gQwq{2%i3{Ab9%2(;uGx@brhLKRo?^hT!S{41%XWJOkhv0MCFtf@i=X z2%Z7(41i|is&1tKZ0jFc(#LQJ9xH(XS@3mJlp*V!LvO)+rzUxJlpSu z;Mx9o1kd*HY!A=&@N5sy_VDbmDuQQ+Z4f*=z_SB9JHWHU)d-#)o<;EN0MCx_>vokz9!?QCyJHxZf>Ij})wngyl0?#h+>;lg&*CKd!c^<*D zD?GcxvnxEi!m}$pyN*Th?0PPOXIFT3g=bfIc3TX=vs*U=&u;MS2G4Hr>;}(n@a*VVv2&|MKchr)9xJcq(_C_IP4 zb7+F#8M8EkXAC@J;28tYn8Oh~V@e2~G4PCmXAC@J;Ta3h*ewt|V+#nLvG9zAXDmEp zxnGTiXYAiX<2ZQ6!7~n?aqx_TXB<4^PDAjFyA8oJ4xVxFjE84D_s{Y0jNcu>GajDt z@QjCNJUrv!8PEN5JUkPYMet03X97GE;F-WZVgfu9xPMN7X97GE;F$o=VelLV&tcp@ z4}<40?w^Oja~M2_!E+cqhjEWM44%V242=`vnF!BBcqYO#5uSdJ zLnot4(9P&c1kd5{90AV}@Eoxvg6D{#2%aP0IRc&|;5h=GBj7pW@1b!DJX6*~@JxYc z3OrNbnQ}UUXA0Nh6nM_~Bl>4(JaZ*PHfIh%gV0EH96AI26y1fMLT{pfhsLv3K^vp3 z(f80ObQC%Z{S4iMo53C~P; zX2LTQo|*8>yavHD^Em_$+j1Juh38y&&iyum=iD&}o^#=;P4X zvLgBh;(pcg1H}Eapj2G3>iTn^9WYan z(avZ;G!dPGEc?_P%;CT$5 z$GCq!2G3(3hQ`O?c^sa{;dvaM$KiP#p2xX=J`T_0cOZBkhv#v4o`B~G?h#MG^91+L zC*XMko+sdW0-h(}c> zb9jE<55e>E5eT0DN7Y?GZ&|N--@fFIKiCaOcY{UQg@8qubcsqyceg>=NtiU)iYVAf zqhJwskro~A!JgUkoUdzrw)oYxpJSLGUVGN#oU@u|HP33E)$7Hx`cRTzs;#tqLo@YJJ`X9x!!LP#&JR5j6@ND4O zz_Wp8!?WVq;Md^>o(()3c{cKFtSO$29mTVeXCu!>o{cq5l9p?u{?L&m*UocQT34y5?$k(4*Id1$FSJv~l3csaS6N-7hPqor^^oT4U2PW6 zZl2vdyLonBC!XEi#Iu`cH_vXK-8{Q__T&=Jo{Hkx!?TBH56_;*#Ixsp@$BK*!?TxX zFV9|{z0Jk5ceHr+^6cf=%d>ZPlIu^NKl6#_Po6({{^a?S=TDwL7mDZ4uf+2g&tE)$ z@%(jzc>d}kp1*kh;`xi`FW=9?L|rsO(=#@JV$&#kMJCMTs%j3j_@4eIhqmA z(JJCO%5#+GD9=%zqdZ4H63@{+Nv>l&$9RtM9OF6GQas1TiRT#4F`i>Q$9RtO94{cA ztah~H#^g)u!`=kC%Qu$6(5mi@Rwbvlsr&sl{wrOvY%AZ?Bb+K+zEA`cQ zJ)_0?RNv{ZBz3{bDyU0!quQvyCTgZ$)@RzHf0C4&7b!O{QU$81j@qfW?$uM`DX>~R z1@Dacchr{MkKDfqg03i1@>Da2E#xOfWPBA!A#g?I|_6yhnwQ|Jfr z6h2ivg?S3|6y_;BP&|cai>EM8VV=S~MRtVn2ze`03&) z&QqMHI8X7x;wk=|c#88B=PAzP=0&OmPl?OKQ=*f2O7N86aq}WoV!e1u97<9pc}nt> zwIhO4S!nDV|b1rFcs5l;SD%i+D<(DW1|i zrFlyC(*v5JH?&gU>+d90<`flDRo$w#8lXvbBm8g1A9Bvmetim9e9f9{w?v8=W+8QRe{INi&O=k3iZTO!LLI%FH&w^q};qnRp6=cvv?|=A)bmnZeFC^ zyhyouk*dg3@ppC@7Hx1V#dP&Q*QGX<<8*}MgRn%2#syj7O zk7=&n*B9EUV@ay^`6{bx)LeIKv>wuYy{paIouumU)X68FIy`lF>hRRzsl!uep?KB&ax;%Ax>hj!_7SBzU#d8zSO*}X8-1LNaZu(F>H}Txe zb2HD)JU8>)e7ksV9xI-kd2Z&pndj!cN$M7!TPo;EHBlFh&@|1_3Vp5}I+~cDD!Bc4V)jd&XIH0mjyMvsf95lQ--@RhPcxooJk5BT@iglto@P&qrx{N(o@PAFbHvm9BJnim zY0lG}r#Vk^p5~v3r}>{rss&FAo)$bUcv`d;Pm2lSX~ENir`JD8s<-cF@4~94I%=oh zx>vrRySEm_-_JgMb-$j`>-tpR>8~W!_hc2(z3_4vr zgLnq<4B{E&do_q>&~xG$#50Iz5YJ$q!90U~uLkoB?j)YUJcD`MyhsgRFP_1NlGG5M zAv{BPhVTsG8NxGUs(6OHEuJAfZeFC^yhsi8{dDspHMG8XhVl&M8Ok%1XDH85-_M~u z!_E}XFrHyNZeFB@4HeI@7sNA+XBf{gp5Z)hUZjR!A)euPh-Wy@aGv2j!#9d&_>m+v zf@cKJ2%Zr&*-1UGv*BOjNuu>Glpjj&lsLD&x>cw zI`NF*aq}YO=0$4k<>DFJSv+HT#`28iaq}WImS^nYBsGp_Tq*Imd69DSBIV{qYTPvO zj9V(6aXfBbq{j1%=W+8QHNJs(#t#wCc%Jb*<9VLhoupZHj8IA&upIAJhORb z-!7inW5qL@XEx7lp4oeo)U!O#ULc-ld7kBYmgiZXXL+7oES_h-5zlix&+$CR^W2T% zdF~$ZJje4K&vQJ_@jS=#d{#WqUnrjEd7k(EeEwlA(0lq)zE>}tB;U^$D#-Wqg(m8* z5qeZ}v_ih0FYHKCFQ#;!D(Px9(_I=R-_IB4=>u)jE*(!&FXdG^U8@%AsxjhuiRUGr zmv~;{nZq+Dzj)?cFP=F(b9m_hBs3o2SJPUXh@GS7XTEMg5Tk$O9S;(`HXCco*o`t={v+zmrEaX|pvyf*|j(8Sb zB%Vb)i+C3CEaF+jv*;7?Ec!D^E#_IwvzTWw&tl)t#XO5Ah-Wd+VxGl3i+PstEGZUEQjrwb{X6j9SrXR$!j%Qs-@vOT|JnMMeyhyF% zaq}Xzj%VFZ;#q&Xc-Hf*=ULCQez17fKPR5`JnMPZ^K9VRz_Z~p@oeZMo(()3c-*{5 zZCEd!4TqA{MxKp48+kVJY~p1|3*XN#c)oZ+JYVp9!Qu}7pYCYpKe~H zHr*kfO+1@;Ht}ro{oKT}$@gAm;&JmLwVCHjo-fOa z=gWrT`I6^Lo-cXayhwe?^W|^i`RZ)(xOtKKipR~1)K|mB^VLh@`HIKQi`3Vrsfenp zp4w}W?$fh+O>6YC_9v-t&QLMc)XnOsetJO9>kX~b_d1xQzCA@Hbh&O-XARI4&C*+1 zr5|-TNp0cTQc65qc-*{5ZQ8f)k7oom=^1OeWRU8>Tp`;tFmrXbKRrSdP4K{p*D->NLD;YE)>rZo+CU* zc#b?Jo+BTN=LpYHo})ZRd5-cNZ6%(g3EVlo>#t~$FEfjb=4U8UL9Yc_w=QHPtvYfq?7!rpzGB{-8DjwYLQmx zYwbwVC#7_rD(Px9Q%{Z3=rv`M>?bgqo@s*0{v3w6~PJ*)-#NMCACl1}lYcv3tm zo>WWmq{fLS#gpPm@uYatJm~`BN!JojnkUVZ=1DIRPx@Q&WOy<>8J-MJh9}cYJeeoO zli|tmWO%YU;>lhlo-9w6C(D!N$?{}B5l{BdB%Q;P!;{04!;{lmJUJ7@lf#q4lf#q4 zlba`ZA@Ss{EuP#wxp{K)k>M4Qi?$8n4H+SnunbBwgyCBwhMcl~gs|rgj>r zdo^3HYPEjSz9e1dbQM(%-J}j0to!wxUe{WErvpj4?8z#w%XEu6slO&`rry+g{h&ih zx*ShAo^m|pc*^mV<0&^)JmuaNPdOepFVf|C%9j>T`TF81&*SDrx;#&L9yc%2<$n=R zg)_zD=0&;!PX(R|L&a0!1@Tniaq}YW=0&<9kDC|iidTrI;vM3t$WxK0B2UGQ;;DEf zNmt^j#8ZjK&5Lv;o=QBGri-W2JL0LtQ;EmTi*)6(;;GzFJe7GW^Hk=k%u|`C@^9j) za<+KfyhvB!slrobxOl3(B%UffRd}lKT*%|*Mf$?4#B<@D;<=FLLY@nGF8o3~7amK} z7x7%ga}kf57wL<5F5H9%7|OK)kFe$?S4eaUGm zrRu7u_8O#VdR9xdMn7wRlD_l|6;n+$P)7~X1A1O>Xq|r5!6aSvES1pZ;&JmL?dCZco*FzgcxwDEo|@-~rzVe^7il*y(r#X) z-MmQGoFkr^pNpp^&t*JrUZgMcjkt{Gvb)4{8IPM6X*Vy@m+>^*ounIOl}{JyI^C{r z8mp(YP#^0n?M>2+bLj$A)D3E-9vZL5v{>)!8~v4}o1|4xm35<<>mH5P6M9)6YKwT9 z@-*dX%G0!tc$)SWPg9NcO~f-8RbBQ5CrxQ;no=*M5(`klyI`MSk>BQ6d6!CPf zDxS_foq0O*bmr;I)7iW4?A_nt-QVHe-{IZg;n(3E-u)fk{T<%@9p3#N-u)fk{T<%@ z9o~HxzYe>2_g%dEF5Z0?@4kz7-^IJ{@|e8)F5Z0??|#IgBt6piYGg_IevZ6NzMmrp zYN}@IZLQW%^8Fljx=O2t>Z^kW>wY~a-_KEN^@|Q9>CtDZxGvKz>ZGBXtQYjA*6RoH zxOtHt!!zaz@r=1cJY#sq@VI%A9jW#`28i8Ot-4XY6$GjD1HuZeFCv z@{HpdS5`dZ8j5Ee&p4iOJmYxA@r?UTJmb$6kDC|i@jT;s#t#?I_?N^po@YGIc%BJ7 z6L=@Ju+Cq$l!B0n-}SczMm6$CcY~kH!sp| zUZf}SO!EDl#51X}cqZ{o;&JmL?dC;#63?VR#B=Yt;<=aSULH3u()W%O&%JZSb1%=m zJoob4$K&Qj`o3$#bKl+Kx$k+sp>_II2b1*uXQ_lP*RATT0h*#0^_Dj1M;%Vm51gh_ zx>EJjMT0a=&uXdG=w}^G(v#0n8P!w+b<_|&D4xm7#50*^GS3tqH!sptc&0QG&y-=} znZh%LX9~}h-^DZa9Pv!$aq}WQm1io?RGz7G#547C@l55J#xsp)+STHjc9(dj@l4~H z#^dHidK%BP<4Jlt&-8NQna(qvXFAVx-v~D^($n7)&vc&YJP-0b$nzl2gH6Qq;0W=Kk(}k*|+tpiR z^^_LsV|}H)NqS*!U7(9~gIcMF#_Jg^)~EVLeg6ZxzoQJa6#4!Se>s8$56H5ziY>i{}lVH+bIQc{7iA-n>LSZ}Pm!^Cr)m zJa6*6xl%lD{+*=X;(3ebEuOb{-fAnJwiCZ4Tli)Sm(RvtGm(p!g%XX{Ji*~;VQMcU1a^fn$hFVfqt63@0f#j}ma z&5QIlo^8HY+jzDeOVZnUw)1S~+0NtUMS45W_J_o?{ax{F=h@El9nW{ZpWpF(*H}E? z@qEYg9nW_>-|>9s`|0LI`ulUm^F7b^Jm2$t@B8^Z&-cEcZeFCn=lP!Jd!8S7e&G4R z_wxsyAACQ5;Q4{a&5QI8JU?s}&yR_Ce&liUBK;%Jk32u}{P>7?eq1h|A9>uoNdLt1 zQ$_Lo)Kok_@%+T|6VFdPKmDwuN&4qAR7N$`Kpizi59)a>(>ndCgGu_Avs6NttC2cu zn5O7Oy`>HMU5AtOuji5H=f^ke!E&czuhIC-*|rG`Hkl{ zp5J(WJD#L}=lQ*ycz)+`^CJB_&+iY5=lA!-^E=P)Jb&=~!Se^tA5Fyb#|ZKK!Q`&ki0pFVZ{aiD$N- zP98Te(r#X)cbz1jT@}RR=0$oJkDC|iUA_^!cy_H2&n})_JZ@g3ck}G#+1*S$yGMy< zH_vXK-J6n3_Maq^lT~3|s5-h`y){-(=~aEKZQ7e;a_80sx>z@oaW;&&fO|^PJ3cGSA8F#B=h!TA+{grS>G5Q*xAF7wLMn zRCkTjqgtd-^tJv>GN-0gK$TQWt<_T#^thJj1AVJqN#?YS3aN@}tA%=LjGojh;yG=r zcuwazo#%9((|JzkIlYf~PJdcFr}Lc7b2`r%dBk(ZCE_`Q=M0`Rc+TKCgXfHu;yL5* zBy%RunLKCmoXK-$Tk)JZNjzuroXK-0&zU@D@tjpeJZIGv&sjWY@tnnT)@$N9YrA;P z<~f_^Y@V}u&gMD0pLoumA)d2&&gMCr=bTf-b52$9oWpYt&pABj@SMYQ&MNVo^KX(l zm*-rbb9v6?Ik&xd&b?1O=klD(b1u)hJm>M8S4=$T-7KE-c+TTFkLSEM#B<*F;yIt^ ze4g`p&gVIw=llWUIe(UT&gVIw=X{>Lr->(Tb@Alo$;*?MCofN4p1fGM5}mGMApMlDa~-=?)FoRK29PwNXFmNRp{~x=QOR)z_UGtm%4A@8}EtqGL&> z+LO9r|5KoPB#Z!Z) z22Ty18Y9J1W3G5=@VI%Aslii|rzTI$Ys6FYZt>LQsmW85r{-qyT$YIEGM>wLF5|h3 z=Q5tl9ud!F%f)jUkDC{n%Xu!ZD4xrkisy13H!m`7USuxkxt!?WQod9LKSlIO~=#B)_H@mzJK>Zywc zX`1F}sXo`wI+|pzK0{@6wHoLy4bg*oUdyyjzv_6Bx#ldD)8%TU&KjnN^`hR>2K}zX zN#@#fR7yP8Hc=Oi5YM$d*YaG;bL|fCTz8(zi03+<>v*o?aq}W`-8}JJw@JT>$IXk( z^*q;KE1v7SisyPBH!m`7USzK4xt`~Slf-jF1@YX#&p=LQ}( zFEX`wYVp)+CZ1ZO#8Zo>7LS`3nOeRPwRmpKE1ny9ZsfU<=SChkFETeS5YLTYil;VD zZ5}r-GPQjp+`P!t?k=9%Jhgdh^VH_4%~K~Oo;sDpEtJcb@J%-Fdq6bRQs|?z649&5zYV}FwA$BZBFrx#DJLE`D<-S_hDdwKW0_9mI$-hFTHzPESZ+q>`W z-S_tHdwci2z5Cva<=yx8?t6RpeZ2cV-hChMzR!*F?)!N6eZ2cV-hChMzK?g`$Gh+I zPm<}IRbf?A9ko+$-K(d>(|5Ia`tD0I{doHE^yBHr(~qYgPrv)c)9-ch^y7KJ_jB^u zDz7WlSa)c+rs^g6eoo$~KXfF?OgUGjb(QMtPL0%b&DA^lLci!(l9_s@%IX?5)ZH4Y zhxCHp)n@&cWTqwJnZ`4XXBy8mo@qSO9ud#9<>Hyf9@gy)gU;(4UG zcpl+-gy#{SM|d9Ld1QBzd6ehTeBybO=TV+Vhv{LxsQ0u%zw2<4dF&jO(v@nWE*ha} znxm!qTsw3$$vl3Z%IIn}&|Mm$2Q^R2v`N3}c#?VIES1x>YNW2>d4k8yi;SBWnJ0Lj z;Cb>S@jO{UJWujG$@3)7laGq$$ra*xlIKYtH!m_z@wj=Bd8(Oso*E^dr+A*?d5Y($ zUE+Bd3uV?hSKGk z)>udPN^;tM(+B_i|K37pbmVs*lF$X}zXT zv|WEDndNy@K$nPTInVNb;#odJJj;2O^DO6Caf*0WR29z(o)tVRcvkSN;90RsJS+Z9 zGVk-e&+|Ud`#kTr7tj0miRXQu_j%sud7tM4o)3zN=YyNY^8wEXJRk6U@P>Fk_+C68 z@_fkiAS`AM$+2^U-PI`KY>hKH~X^=Odnvcs}C!XpMM2+Mi@T z=J}ZCW1f$BKJF-;z5CVP{c7)iwRgYTyI=iRl3C;3ukr5JT&i2tM*THWGxf4Q z(+~P5$*et9JZpK@@~q`qJ5W4pXNzYo&sv_fJnMMY@vN&Mo^>6>vyNvS&pMuUYsK?h zqO(%_C8n|OBcxOtJ;!L#El@$Aeco}D~9dEC6n?Bv#bMfrr*~PPqXBW>do?X75yLoo!6VGm*-8^ny zWOk1g&+did+0CO zv-b({?A@eabv()Zd6vrQS~XHv4b#JVQSWJkeor!gouqSAL077Yx@d$R)f}zR=h~s8 zNyg2K%->~nwVLTJjnadfr)A>#dzX0r$t#|Jc-*|mxOtKJhvy%je-?=6pD)GpFVDX` z|ML8My?FlZE}nmR{^j|X=U*N-FEaa5;@MY8Jo|X|@$BQ-_qcfWeITBFJo|XuyvXe5 z+0V1Tg?RRl5zl^}{XF}5_WMR0;5m?AJO_9V@VI%AIl$xQMdrXF@f`SCJO_CW@*Lzj z=o@j6=U`9q9OOC3bCAc)i_AfuLmBZLsv@34JcoGPyvQ8#jX1<}=p*qQ;yKK7nCCFh zVV=V+#dCO^cnbDt=II4w(HL%n>UXN=n~aZYxUCv&Cn99 z6ieQ}lWe|IR7h1-TW!@#lk}us(JF1#zezTKj*93a)m3}-(S72{&y$}gKTm$13wSOl zCY}p!7S9Dd7w}xbbHN+px!`;86yPbqQ-G%cPXV3+1H@BcmUs&A6yPbqQ}8tL6s#_u zf;DaccBjd%*~PqKx03h@-;Da2E#qj(BEAf7@zg?I|_6yhn&Q@Dh93g0T8 z!aRj}3iA|xOFV^t6i*SJB0NQSitrTSDKbbrMV=K;5uPGEMRtVm!roiggxGu_@vy##4-^7*8>t;ylGmiKloy@f7DN&QqMH z_)_r{|5-dGcuMe;;3>gVf~Uj~@sxO8JSBKa@RZ;wd6sxe-l8_@uZfzem-U%`kau6o zyD#P4m-6mQ)sc5!%DXS+-Iwz2OL_ODy!%q#eJSt0bZ&X~rM>&o-hFBBzO;8=`hGp5 z*R@vP=|GY#bFzx-Qt_1GDZ^7{vUtk8DV{PsWq8W+lr1TqvVI+wqxF#H>s@Wu?j&1_r&d1k)Z%gTBJ1Ww zw$@nj)LJN>T0FIQZsfU<$IXlEjW>wr#vbBv^CIi!MfOIX8@~}x?X-Am^VH_4%~PAF zHc#y*#8dl2@zmz2!&8T+&V}NsbGvxz@YLa{!&8UH&5LZEy-Bt%Pu&Z|B&a zy5q%Dcd>Zt^3>(I={%Lu)oP}@G)fO@o|b8ocIkMMy*aPS=~^{XR}Is{TA=szrG8Jc zx16MNR6*CPiMnfq9@QMJ(C6BbWN%H0=hjN%xs}Jwi|nmDw>~bOTR#xbtvqgCWN+iS zjpsI=+gga{wlU(ljpsI=+jwrc-*|m*5h&WB3o~fcr#?@8p87oXc^YKI)1ZoY8t}Mzk!`@!z&FCpi)@3B#M6MMAx}e| zhCB^<8nzTq!*Swi$kULgAx}f!h(Pa~d2JdJqVyvR0MBA!OyipR~1Y-1ib zFS3n&Biy{mHtr>!#ypLA8uPe$k#+MT+ayOkO)e5o6CO7&vQ2oJ_(nA0Y4VA9n(#E` zY0A@-$IXju)7Ii?Izc>5d7APx<>_%K$@V-|B~?wgshtMuUd`6q+Nyt(>^&^^6cNik zb=6*dbe~x6c}*<$Y!^$fJSwJ3bhB7`^%G048G1u2^}YU1vb|4HAyrjvwbcMk(k#8A zRpRN*)8{nt^rBG}!jd=R(PqKY^`ttPU>C4l%qj>s0AfCQFeR=xw z^yTTt)31bh`rRs?emwnn`tkI8OFaF46i#WR3s0M7uP0XzeE2CNg$fP+bPAkRRafjk3w26h(Dz$xMx$TN^ ziDytf@eJY_#50Iz&{FXX`dK`Kc?R@(kq}$}_Z!c!o|B&rqJBJVSYg@(kk{Rz^I-8i;2Y z&#-6oy4LDD9Z0gnPgZeVs$0}X{WV!L^`<`45Bev`j_~eBc=sc``w`y#2=9J`cR#|r zAK~4PcvY+QllCRqk*BMuYUn0)&|uxK=fpFTXC%)^o>4rbct%|&o>85|Gm2*v&nTWz z>%}w5ufx$iqj^U2jOH25Gn!}gRPl`V>u@yBXr9qLV|d1t7SEXa;u*s;hGz`V7@jda zV}41pPbJEy^14oq)lFmdh!$$OzS18__UT+YR~2=GnyQCJ>M_mL`}#&Zlk78Tov+He zM$L7%M(YX9*N57y-AUHXi>#X$*%=p#XU6T~nZe`cMb^!WteY3v89X!gCfS)hGcOR& zOrDuMGkIqEe!6*)ow-;%GkM&+$j;)K#WRa%){Wwsb&q&v@yz0x#WQP*cxGqCGn;2N z&upIAJZ@fOXFnyL*&mC?&5P`_JkRnxd$D+)?XD4eRCBaKpKC{weJ-W*R7qE>neNgk zJ+68BK%2Bn$CK>yc~wr=s)f30j2_kky{9j=C&{{bk$oY*D(HGO5zh-eFYvsuNIWlm zEuI&7UgUA}BKu-3@x0hmJTLOR$nzqPn-|#^d0xth=cOv*aq}Yk63WaskCEg+t`Jac*G^33I#%QJV0c;x&tB6SZP)%JyNYF1 zF|n+=Ssm3+4~S*e8)8}Yz5Y(Jt4~o0@vOd8Jga$D^Q`7s{g!xE|0td{JZpH?@T}ok z!?R|Pc-A~Co;5scc-HW&JwrTeYl>$r&sv_fJZpK@@~mAap0x*)>^h!xJnMMY@vQ4C zo^?~ivyNvS&pMuUJnMPZmlDtVdg58nvz})?&-$g}S^u+mHt=lV*}$`bX9LfMA>!Ha zym&V7Y~b0zv+*qPY`k1N8+kVJY~oMb=e`JCr-p3iwc?;@Vhr-|ot zp3iwc=lPuH3!X2^i06w2;`xH-3!X1{zE~!nFMbuzCZ0_^n|LN_1svR|F7 z;<`+?sFV6@vS#W{t=A9o?!Wf#zb>h2x=rmgP*XKqZ)>%9zUKLc=bO^v`KG>jzTx?X z=Nq1Hc)sEJ<`?mNd!~54<@uK9Tb^%+is#!G#PcoBw>;nSY~k6$v*il$Y`H@`TX?qc zY~k6mQ9N6YB-yPzTY0wfY~|U?vz2G-bn$F`M?713_9e=v3w51tS2vB-BU-5C`bv9~ z?EYN3Koxa^nyQD!>oG0X`}#&Zlk9=C&R1pKsOGvyqxFR5>qBkP?j(CKE1rWqZeC;$ z@*L!G^CEljDe)ZqSUd-L4)M5okv-)5d5GswEAbrSaq}YU=0)}pkDC|SLw_aN!#sxz zisvxTVV=W0hbM~X@XO*k%;V-o_6W}ro+CU*>WJq^Z}A*ip!f8p_9WS(Cn>)w=z29# zca6}aTBH^FT04^Lv6RkJCDl?h_0%Xmu6g=Eo3ty*9?vMRs_0s^P*;u7lj1r4k$8^p zNpg~tlwTEey;`cf#_3Tl(h7a8Ka-r3QYxTIs-;c@dKCuf3Yh$m;Icyf4h^W^5q&Ew`pPVTni$vsItxp{K)<%JP)u zDa%uqrz}s|A>t|fym-p;l;tVQQ|>JBl)GF!<#@{Rl;bJKQ;w(H2Jw_ToaB_}DbG`$ zr#w&jF5)RaO+4j!%JY=xDbG`Zr$QO=RA?Zc3Op5fD)3ZTCY}nvil-t^MV^X06?rQ1 zR2(LriZ6<%B2Pu0iaeFh5l^Kn#Z!r=5>F+bN<5W#Dt#`VN=K8N$~={MD)Ut4seG4s zDnBTm$~={MD)Ut4slrpGoOr4<5>FMLDm+zqs=OzjD!+^8LY@n&={B{~Kuy(by{*;y zN&AwVi%wT*)lhwP&|uxK=k&VP>K7eIaxOko#dVo(Q6~-6WWAs_wO&8yP?B@WsVb=} z#B<3V;<<$95}r$VF4-uaOO7Ntm-1Z7b1BcIJeTrZ%5&*-@m%_jcrN9+l&30B)w1HL z+E6@Id8+bM<*CY3m8a@&;;DAFc&hPKN?%7ZW^nnv``=GEA35k8syRix>z@;m3nBr9@ApIuW$5M zlG8A)f~u?=)m-;zqMp#p`cPZ6JIQIpC+VQk| zO+4+ki>EzLd!F_@?R_KK^R(|Lp7uQLdD`=|=V{N=;S}+7s4AWgJRNvC@N}3Zo(`+T z(}AZWPe-1PJRNyDwii#w`^3}HyYJ}NVMp)2lXu_AyYJ-Pce+8|eJAg}lXu_AuftB> zeJAg}lXu_AyC23ftb|yG-Kx$SpebS*_Lf+N{V0~T^xtDabf4-(7pXSGyo^t1LS zIU~+cG1b(~>Zl=lK+o$9t<(29nB!!w3w49^&z zF+5|2iD%4<;u*s;hGz`V*mJ})_Db=L$#7*Lvcs$9O#50L!63--_NkcVRFX&CJ z*AF_Buqh+Pdbw1+;_T4tA^^Ug9dB5p3^&8t6y{=$+`bb zmDOcxs7~U!pXYv_`+4r?x&JruJaD#n9^iR^=K-DvhKuKcm&Ee`&jUOU@J!~J%rp5a z@l3u`Jd=4Q^GxQM?E5*HXY#QmX9~|0o+&(2c&6}7;hFM~c&5B7o+&(2c&749Eiay_ zjm0ySXDZKBo~b-jd8Ym$o@wWbXBy8mo@qSOMv7nj}f9zFqI^;*gZ?tJ3UpZM*>e@UnI z>)oyBe}0_mHnLCO4&D5Cc%Qy~PW;52`0d1B)1&)6m!5#0`0d0W|Icr^k~2^IVCl&J z{9(1ueL9`^FE~k!967R7k}FC3eco%%J29Q~kAKPiL&lOhYiiS_ z{@=nXZG3=GXUODVl z!hT`cFADp`VZSu&Rl{B_?A60wBkVQ9etFoh2)qCN&;NT@SB3rRuwN7QYr}qB*l!5C ze+KCP{`-Do*lUN~KbP}=|L@if`^{m$CG59`{kE{z3w!;rHwb&fus05Sldv}pd$X`N z4||KSw+wr$u(u9-o3OVHd%Li=4||8OpZGh~iC_08>KyhHf0z63-X-jJhW)OvcMW^D zuy+spiNE#!_t$C9u-_B*USapQm)q zg#FR5KNj}K!~SI0p9=faVSgsxUeM#6~4*RQNe=Y2*xwENdtqN5_7!1&KkOfd z{iCpd9QIGb{%P1(hJ97oSBHH~*w==AUD(%$eM8tchW(4MZwmY7uzwl$ufqOy*uM?? zmauOP`?j!e5Bqmv|32(Lg#D+m{~Y#T!v1U6e+&EXVc!wx8{-*l!N|En&Yk?6-xzUfAo0y+PO;hP`pvn}oe-*qepDdDvToy=B;2g}rsy+l0Ms z*xQA@eb_sMy;Imbhy9MQcM1EQVZSTvUBlij?A^oOBkVoHeoxqYg}ry!`-Z(=*!zcl zK-dR{eNfnkgnek(hlPE3*hhqYWY|ZAeRSBzhJ9Sv$A^7F*e8a4QrPbc`~6{mAncRF zJ|*l^!#*wS)5HEy*dGr2BVm6u?2m>0@vuJ`_NT)Bbl9H>`;4&94EwCG&kp-@VShgC zFNFQYu)h@cIboj{_W5C75cY*(UljJmVP6vVm&5*Q*k23#>tTN*>~Dtst*|c*`#WJ@ z7WQ|;{$ALZhkZrZ-w*qTVgD%XABX*uuzwo%m0@2M_SIou6ZW-XUl;cEVc!t;jbZ;H z?3=>AIqYAC{j0El9rka-z9sBi!@e!-+r$1{*uM|^4`Kf)>_3P7m$3gD_TR$(d)Rk` zeP`Hrg?)F}_k?|K*#8XsUt#|z?Ei*+U)cAD{Xp0chW&8ZkA(eb*pG$%`2X8;`Qd;6 z^JlJ;!hYgUoXD0d9rjGvvtiE(d+xC33HvEwKQ-*9h5hufpAq&m!+uuS&kp;!VLvbI z=Z8IS*z<)wf7lCzyi&Ag#E&>UljI>!+vSltA@Q=*sF)VM%ZhH{qnG15%w#?epT474*NA>zc%dGh5d%G z*9!ZMVXqzbI$^IH_M5|gOW1D>`)y&b7xwyLZxHr|VQ(DvCSh+H_GV#k9`+VtZyEMh zVQ(GwHeqiY_I6=!ANCGm?-cgVVZS5nUBZ56*zXE^*RXdBd-t&S2z$@4-xKy;VecLG zzG3ed_WofX5cYv#9~AZ>VILayVPPL0_7Pzp8TL_OA076wVILRv@nN43_K9Ji6!!bV zet*~>2>ax)PYL_fuulv7^sqk^_J_m%NZ20@`(t5$JnT<~{i(1&9rkC!J|pZi!#*qQ zv%~&e*q;yk3t@jT>@S6VPT1##eSX*%gnePy7lnOs*q4O;<*>gR_SeGxdf49x`ux|_d_OO2!_V2^~L)d=``_EzjCG5Y3 z{kO3H9`+q!-x>B@Vc#A0Jz?J)_CLe^SJ?jv`@dn|7xw*OKM?kVVLu%9BVj)p_G4i` z{{Qy>{F4&7{^yVVpN;&#|NpGiiS568I_#OSXTzQo_S|956ZTWWerniH3;XF|KO^jC zhW)ItpB?sd!+u`a&kuXvu;&YV{;(Gad%>_53VY$O7YTdOuonw^@vxT+d#SLO4ttrf zmkoQluvZ9s#jsZjd*!fK3Hya%zbNb%hyBv9R}Fi$uvZUzjj-1Y`{iN3BJ5X&{i?8E z9rkO&er?#V3;PXWuNC$i!(Kb=b;4dZ>^Fz~mayL%_S?cWt z5%!*8zbEXy!rnXVeZ$@_?ES+&AnXIfJ}B%%!ag+Y!@@p1>?6WHGVG(mK054U!#*zT z=VO2DeU)!{r<2&5cbJopAz<|VV@TE>0y5;><@?ik+44+_Q%5hc-Wr|`%__m zI_%GceMZ=4hJ9ApXNUc{usZgYFADqOurCSw%VB>t z?5~CW^{~GY_BX@+R@j$@{hhEc3;Vlae=qFI!@eTy?}z=vuzwWxkHh{+*gp;X%CN5r z`|7Z-3H#cxuM7M7ux|+a#;|`8_Dx~m9QH56{#Dq&4*R!Z-xBt%Vc!<^?P32e?B9p| zhp_(?_MgN4OW1!6`)^_YJ?uNezBBB*!oEA~d&0gq?0<&+udx3U_J6~^FYNonejw}z z!+tpIN5XzI?8m}>{QvD~Km6~1&P<;a_FQ2<@fZE?pG#-Lo(+3W*mH+HPuNch`>A0+ zE$pX<{fw}m8TPZnes;=PKDC~v9UL@>A!(J@x#lv1Q z?4`n9I_zb_UN-FI!d@Zl6~kUB?3Ke_CF~c5{i3j69QI4YUN!91!d^Y>HNsvq?EfDV zcNyCC8@CM@#p!l$&TaR~XPb+ACAOH@Vq%MlEhe^@*kWRfi7h6!nAl=si-|2JwwPGY z27mE*cXI6az2bAdIbW>;UJO>Gg}27r;BE1Ccze79-VyJFcgDNmUGZ*scf1GQ6Yquh#{1xX@qT!J zd;mTWAA}Fahu}l;Vfb)-1U?cUg^$L^;A8P|_;`E*J`taUPsXRO3@p<@sd;z`?UxY8lm*7kBW%zP@1-=qrg|Eif;A`=9_<_a4mi60!+;|>5 z5D&tG@en*O9*XC~!|-rC0*}O_@Mt^+kHz!jad zi`T>J;|=hJcq6@Q!#VyffYf?}~TByW>6Z zo_H_3H{J*Di}%C(;{))4_#k{RJ_H|%55tG!Bk+;!`I^* z@QwH;d^5fU-->U;x8pnTo%k+%H@*koi|@nt;|K7A_#yl-egr>?AH$F1C-9T_Df~2k z20x3R!_VUv@Qe5*{4#z8zlvYOuj4oHoA@pKHhu@ci{HcV;}7tM_#^x={se!DKf|Bn zFYuT6EBrP727imc!{6f{@Q?T>{4@Rq|B8RZzvDmfpZG8QH~#0J=gx|M`(*AMcuqVQ z9)M?m{NFcO|8DNzI)Qi)9*l?JdGSy@A0CE>;}Liy9)(BaF?cMVACJT1@dUg8o`@&m z$#@E$il^b}cm|${7sLzUh4CVIQM?#l94~>F#7p6&@iKT>yc}L0uYgy?E8&&#DtJ}A z8eSc*f!D-q;kEHPcwM|6ULS9OH^dv^jqxUUQ@k189B+ZQ#9QI5@iur{ydB;i?|^s2 zJK>%2E_heG8{Qr7f%n9F;l1%bcwf99-X9-;55x!IgYhBwP<$9Z93O#?#7E(y@iF*V zd>lR=pMX!qC*hOvDfm=;8a^GLfzQNe;j{5M_*{G*J|ACzFT@w&i}5A+QhXV{9AAO2 z#8=^~@iq8bd>y_X-+*t#H{qM{E%;V^8@?Uif$zk3;k)rY_+ES;z8^n;AH)yghw&r$ zQT!Nw96y1d#82U;@iX{Y{2YEBzkpxFFX5N*EBICX8h#zWf#1Y$;kWTS_+9)Sejk5; zKg1v5kMSq?Q~VkJ9Djko#9!gB@i+Ke{2l%t|A2qQKjEM8FZfsd8~z>tf&avR;lJ@e z|2$7t{M$eCw@hChRkHKT{ z{CFH5k0;;-@I*WbPsUU5R6Gq&$20IuydYi(FN_z#i{i!b;&=(XBwh+HjhDg8;^px2 zcm=#7UJ0*^SHY{|)$rA-U;uFcfq^j-SF;s54}puAB+#dhvLKV z;rIxABt8lsjgP^{;^Xk~_yl|+J_(s55@E0VR$$m zfk)y|cr+e^$Kv_%I6NLtzzg7scoLqBr{Jl08lH}4;F)+qybxX(FM=1vi{Zub5_n0x z6kZxHgO|n2;pOoPctyMtUKy`~SH-L0)$tm5O}rLf8?S@c#p~hq@dkK9yb<0QZ-O_) zo8isz7I;g%72X;p6cM_(XgXJ{g~aPsOL<)A1SjOneqT8=r&E z#pmJk@dfxod=b7FUxF{im*LCt75GYg6}}o@gRjNc;p_1Y_(psaz8T+wZ^gIa+wmRv zPJ9=>8{dQP#rNU+@dNll{1AQ^KY|~{kKxDh6ZlE|6n+{%gP+CE;pg!S_(l8@ei^@l zU&XKC*YO+pP5c&q8^43!#qZ(w@dx-r{1N^be}X^7pW)B(7x+v375*B3gTKY!;qUPe z_(%K`{u%#*f5pGy-|-*#Py84D8~^jqgRi`T>J z;|=hJcq6@Q!#VyffYf?}~TByW>6Zo_H_3 zH{J*Di}%C(;{))4_#k{RJ_H|%55tG!Bk+;!`I^*@QwH; zd^5fU-->U;x8pnTo%k+%H@*koi|@nt;|K7A_#yl-egr>?AH$F1C-9T_Df~2k20x3R z!_VUv@Qe5*{4#z8zlvYOuj4oHoA@pKHhu@ci{HcV;}7tM_#^x={se!DKf|BnFYuT6 zEBrP727imc!{6f{@Q?T>{4@Rq|B8RZzvDmfpZG8QH~#0J|4&x@+YkRI2c8qpg$Lld z@jQ4S9)t(uA$VRq6wil;;o*1$9*IZc(Rd6Vi|5DV@OV4{FMucFNq91zf~VqXcsibe zXW|9%LU>`k2woH~h8M?6;3e@=cxk*0UKTHhm&YsM74b@VWxNVr6|aU@$7|p<@mhFo zybfL$uZP#i8{iG`MtEbq3EmWMhBwDs;4Sf1cx${3-WG3%x5qo+9q~?hXS@sE74L?3 z$9v#C@m_duybs_@mu(9{0@E>zlYz)AK(x1NBCp>3H}s+ zhCjz&;4kr4_-p(P{uY0SzsEn|AMsE4XZ#EP75|2R$A92I@n86F{LeoR&WeBgXK)TY zC!Pxrz;oky@IX8W&))36J%U5*D;;r!3cpJPe-VSe%cfdR1 zo$$_h7rZOp4eyTkz;}Liy9)(BaF?cMV zACJT1@dUg8o`@&m$#@E$il^b}cm|${7sLzUh4CVIQM?#l94~>F#7p6&@iKT>yc}L0 zuYgy?E8&&#DtJ}A8eSc*f!D-q;kEHPcwM|6ULS9OH^dv^jqxUUQ@k189B+ZQ#9QI5 z@iur{ydB;i?|^s2JK>%2E_heG8{Qr7f%n9F;l1%bcwf99-X9-;55x!IgYhBwP<$9Z z93O#?#7E(y@iF*Vd>lR=pMX!qC*hOvDfm=;8a^GLfzQNe;j{5M_*{G*J|ACzFT@w& zi}5A+QhXV{9AAO2#8=^~@iq8bd>y_X-+*t#H{qM{E%;V^8@?Uif$zk3;k)rY_+ES; zz8^n;AH)yghw&r$QT!Nw96y1d#82U;@iX{Y{2YEBzkpxFFX5N*EBICX8h#zWf#1Y$ z;kWTS_+9)Sejk5;Kg1v5kMSq?Q~VkJ9Djko#9!gB@i+Ke{2l%t|A2qQKjEM8FZfsd z8~z>tf&avR;lJ@e|2%J2{M!Tb=D>5}x$poyH=YL%#Dnl)JOs}^#D9C|4aM`}VR$$m zfk)y|cr+e^$Kv_%I6NLtzzg7scoLqBr{Jl08lH}4;F)+qybxX(FM=1vi{Zub5_n0x z6kZxHgO|n2;pOoPctyMtUKy`~SH-L0)$tm5O}rLf8?S@c#p~hq@dkK9yb<0QZ-O_) zo8isz7I;g%72X;p6cM_(XgXJ{g~aPsOL<)A1SjOneqT8=r&E z#pmJk@dfxod=b7FUxF{im*LCt75GYg6}}o@gRjNc;p_1Y_(psaz8T+wZ^gIa+wmRv zPJ9=>8{dQP#rNU+@dNll{1AQ^KY|~{kKxDh6ZlE|6n+{%gP+CE;pg!S_(l8@ei^@l zU&XKC*YO+pP5c&q8^43!#qZ(w@dx-r{1N^be}X^7pW)B(7x+v375*B3gTKY!;qUPe z_(%K`{u%#*f5pGy-|-*#Py84D8~^jqL$l)F{u!DB&xz;41Mu8<9y|~a!h`V;JTIPo zpzOV~&Jvmr55vRp2s{#x!lUsRJQmN7$KmmK0$u=5#FOx3JOxk1)9`dW1JA?@;)U?S zcoDoPUJNgem%vNnrSQ^t8N4iB4lj>az$@aF@XB} zk2k;@;*IdecoV!S-VAS!x4>KCt?<@(8@w&v4sVZlz&qld@XmM_yer-f?~eDtd*Z$D z-gqCpFWwLDj}O2H;)C$P_z-+3J`5j@kHAObqwvxA74M z4nL1yz%SyL@XPoW{3?D8zmDI)Z{oM`+xQ*)E`ATck3Ya4;*aph_!Imo{tSPPzrbJO zukhFS8~iQ)4u6k-z(3-j@Xz=c{44$q|BnB_f8xLJ-}s+@o-Zr@?R)uh;5qSJcmSRo z&w~fzL3l78g6G9U@$AF>ccy${csL$`N8(X*4kB26#if5#AVYf;YvR;mz?DcuTw$-WqR%x5eAx?ePwHN4yi>8SjF3 z#k=9%@g8_jycgaZ?}PWn`{DiZ0r)_C5Iz_mf)B-q;luF}_(*&dJ{li`kHyE~+ucvMtl>#8Q+3$#kb+x@g4Y1d>6hO--GYP_u>2T1NcGw5Pldxf*-|?;m7e4 z_(}W}ei}c6pT*DN=kW{pMf?(e8NY&G#joMl@f-L}{1$#2zk}b!@8S3H2lzw$5&jr| zfXeWt84hK1u1cqAT$N8>SgES?{a!{hM; zya1kvC*jF>3Z9Cm;pun=o{1O43*m+FB6v}}7+xGNftSQf;id61cv-w0ULLQ2SHvsf zmGLTgRlFKr9j}4c#B1TT@j7^2ydGX3Z-6(%8{v)dCU{f48QvUkfw#n4;jQsDcw4+3 z-X8COcf>p4o$)SsSG*hE9q)nn#Czer@jiH8ydT~lAAk?U2jPS9A^1>y7(N^yfse#T z;iK^}_*i@#J|3TdPsAtTlkq9|RD2pf9iM^E#Ao5N@j3Whd>%d@Uw|*f7vYQXCHPW& z8NM7}fv?0@;j8gA_*#4&z8>FzZ^Sp@oAE99R(u=29p8cP#CPGl@jdund>_6aKY$;^ z58;RLBluDL7=9c-fuF=r;ivI4_*wiMejdMoU&Jrrm+>q3Rs0%$9lwF!#BbrZ@jLik z{2qQEe}F&4AK{PjC-_tR8U7r9fxpCG;ji&G_*?uP{vQ8;f5boGpYbpFSNt3P9shy< z#DC$x@jw4OJS+a~b>TVioOmug0MCu*!2|IiJQxqb^Wvd+K0FN1KJA-U;uFcfq^j-SF;s54}puAB+#d zhvLKV;rIxABt8lsjgP^{;^Xk~_yl|+J_(s55@E0VR$&6 zeSz$=W}Q7E5|6^8@fbW7&yUC9@puAW08hk|@MJs%PsP*lbUXvk#0%nu@WOZzyeM7_ zFOHYMOX8*Q(s&uXEM5*Tk5|Ae;+62qcon=VUJb8~*T8GyweZ?_9lS1H53i3mz#HO? z@Wyx(yeZxcZ;rRXTjH(o)_5DdE#3}qk9WX3;+^o$co)1Y-VN`L_rQDNz3|?6AG|N# z5ATl;zz5=k@WJ>Hd?-E)AC8Z}N8+RK(fAmAEItk&k59lS;*;>n_!N99J`JCa&%kHm zv+&vY9DFW551)@Oz!&0+@WuENd?~&RUyiT9SK_Pi)%Y5GExrz4k8i*?;+ycz_!fLC zz75}w@4$EByYSuk9(*sp58sa;zz^bw@Wc2K{3w15KaQWkPvWQW)A$+uEPf6@k6*wq z;+OEt_!ayreht5l-@tF;xA5Ee9sDkS55JE;z#rm|@W=QQ{3-qne~!PvU*fOu*Z3R! zE&dLFkAJ{F;-B!(_!s;u{tf?*|G;}Liy9)(BaF?cMVACJT1@dUg8o`@&m$#@E$il^b}cm|${7sLzU zh4CVIQM?#l94~>F#7p6&@iKT>yc}L0uYgy?E8&&#DtJ}A8eSc*f!D-q;kEHPcwM|6 zULS9OH^dv^jqxUUQ@k189B+ZQ#9QI5@iur{ydB;i?|^s2JK>%2E_heG8{Qr7f%n9F z;l1%bcwf99-X9-;55x!IgYhBwP<$9Z93O#?#7E(y@iF*Vd>lR=pMX!qC*hOvDfm=; z8a^GLfzQNe;j{5M_*{G*J|ACzFT@w&i}5A+QhXV{9AAO2#8=^~@iq8bd>y_X-+*t# zH{qM{E%;V^8@?Uif$zk3;k)rY_+ES;z8^n;AH)yghw&r$QT!Nw96y1d#82U;@iX{Y z{2YEBzkpxFFX5N*EBICX8h#zWf#1Y$;kWTS_+9)Sejk5;Kg1v5kMSq?Q~VkJ9Djko z#9!gB@i+Ke{2l%t|A2qQKjEM8FZfsd8~z>tf&avR;lJ@e|2#4){_UTUIq;l#E<6Cw zjpxAw@gO`H55e=|p?E$#3=hX6@a)U{cZbL*JQ|O|WAXfW93GD+;05qRJPA+6Q}9$g z4Nu22@JzfQUI;IY7r~3-#qi>I3A`j;3NMY9!OP<1@bY*Cydqu+uZ&m0tK!x0>Ua&j zCSD7#jn~2J;`Q+Qcmup4-Ux4uH^H0Y&G6=U3%n)X3U7_K!Q0~P@b-8Iyd&NT?~HfB zyW-vO?syNpC*BM1jrYO(;{EXc_yBw$J_sL-55b4x!|>tw2z(?y3LlM+!N=m`@bUNr zd?G#xpNvnzr{dG_>G%wMCO!+FjnBd7;`8wN_yT+(z6f88FTt1M%kbs+3VbEL3SW({ z!PnyJ@b&lxd?UUI-;8g;x8mFI?f4FSC%y~cjqkzt;`{LZ_yPPNeh5E|AHk2}$MEC$ z3H&5}3O|jX!O!C7@bmZu{33n{zl>kOuj1G6>-Y`)CVmUQjo-oV;`i|T_yhbQ{s@1J zKf#~k&+zB?3;ZSi3V)5i!QbNV@b~x!{3HGe|BQdZzvAEU@Awb=C;kinjsN-QQCabC z|BT9k=frd20eEga4<3jI;lX$ao)-_r^WkB5I39sV;@KC=zC+fXqN4E_JQmN7$KmmK z0$u=5#FOx3JOxk1)9`dW1JA?@;)U?ScoDoPUJNgem%vNnrSQ^t8N4iB4lj>az$@aF z@XB}k2k;@;*IdecoV!S-VAS!x4>KCt?<@(8@w&v z4sVZlz&qld@XmM_yer-f?~eDtd*Z$D-gqCpFWwLDj}O2H;)C$P_z-+3J`5j@kHAOb zqwvxA74M4nL1yz%SyL@XPoW{3?D8zmDI)Z{oM`+xQ*) zE`ATck3Ya4;*aph_!Imo{tSPPzrbJOukhFS8~iQ)4u6k-z(3-j@Xz=c{44$q|BnB_ zf8xLJ-}s+@9-S5c_O$36cuqVQ9)Rb@^WcGa5FU(&;Cb;-JRcs0hvN}=Bp!ulU-G}Z zMaST=cz!$%kH-`60(c^xgeT)Ecq*QTr{fuTCSDLPgcrt(;6?FbcyYW0UJ@^bm&VKB zW$|)&dAtH%5wC<-#;f2}@oIQ=yarwquZ7pf>)>_qdU$=j0p1XAgg3^U;7##ncyqi3 z-V$$xx5nGxZSi(^d%OeQ5$}X|#=GEM@oso`ya(PB?}hiq``~@?et3U;06q{Ogb&7t z;6w3Y_;7p#J`x{=kH*K~WASnLczgmr5ub!l#;4#@@oD&UdmXdVB-E5#NMw#<$>G@oo5ad0pT^JNXYq6RdHe!?5x<0A#;@R4@oV^X z{04p#zlGn%@8Eawd-#3)0satwgg?fg;7{>q_;dUP{t|zMzsBF-Z}E5dd;A0b5&wjL z#=qcS@o)Hd{0IIM|Aqg?|NQfqtoXNo#^k_r;<@kuJU5;P55$A;U_1oRi-+R*@Gv|a zkH91GC_Ea^zHs*4vhErai|5DV@OV4{FMucFNq91zf~VqXcsibeXW|9%LU>`k2woH~ zh8M?6;3e@=cxk*0UKTHhm&YsM74b@VWxNVr6|aU@$7|p<@mhFoybfL$uZP#i8{iG` zMtEbq3EmWMhBwDs;4Sf1cx${3-WG3%x5qo+9q~?hXS@sE74L?3$9v#C@m_duybs_@mu(9{0@E>zlYz)AK(x1NBCp>3H}s+hCjz&;4kr4_-p(P z{uY0SzsEn|AMsE4XZ#EP75|2R$A92I@n86F{Lep+&5D2fSZoeFC!Pxrz;oky@IX8W z55`0Aym%;{4-dn`@d!K;kHVwz7(Dy(|J^w@KOTq2;|X{HJP}XAlkpTh6;H#{@eDi@ zFNhby3*$xbqIfa9I9>uTiI>7l<7M!&csaa0UIDL&SHdgfRq(2KHM}}r1FwnK!fWGo z@Va_&R(& zz5(BeZ^Ad@Tkx&;Hheq21K)}7!gu3)@V)pxd_R5wKZqZ~593GhqxdoWIDP^@iJ!tx z<7e=*_&NMMegVITU&1frSMaO&HT*h$1HXyi!f)eu@Vodu{678we~3TAALCE(r}#7c zIsO8FiNC^M<8Sb{_&fYP{sI4pf5JcGU+}N^H~c&P1OJKt!hhp`{(1ha__u%N&w=N} zbKwDaZafbjhzH@pcnF>s55@E0VR$$mfk)y|cr+e^$Ku(8$i8#d4D!d}@puAW08hk| z@MJs%PsP*lbUXvk#0%nu@WOZzyeM7_FOHYMOX8*Q(s&uXEM5*Tk5|Ae;+62qcon=V zUJb8~*T8GyweZ?_9lS1H53i3mz#HO?@Wyx(yeZxcZ;rRXTjH(o)_5DdE#3}qk9WX3 z;+^o$co)1Y-VN`L_rQDNz3|?6AG|N#5ATl;zz5=k@WJ>Hd?-E)AC8Z}N8+RK(fAmA zEItk&k59lS;*;>n_!N99J`JCa&%kHmv+&vY9DFW551)@Oz!&0+@WuENd?~&RUyiT9 zSK_Pi)%Y5GExrz4k8i*?;+ycz_!fLCz75}w@4$EByYSuk9(*sp58sa;zz^bw@Wc2K z{3w15KaQWkPvWQW)A$+uEPf6@k6*wq;+OEt_!ayreht5l-@tF;xA5Ee9sDkS55JE; zz#rm|@W=QQ{3-qne~!PvU*fOu*Z3R!E&dLFkAJ{F;-B!(_!s;u{tf?*|G?Pk@p5>1yaHYk zuY^~|tKe1fYIt?L23`}dh1bUG;C1nOczwJ9-VkquH^!UbP4Q-UbG!xK5^sgK#@pa+ z@pgE7yaV15?}T^8yWm~%Zg_XR2i_C!h4;q$;C=Cacz=8VJ`f*-55|Y!L-AqwaC`(l z5+8++#>e1e@p1Tgd;&fZpM+1wr{GiZY4~(}20jy?h0n(4;B)bL_Eh404q;Cu0X_i`T>J;|=hJcq6@Q!#VyffYf?}~TByW>6Zo_H_3H{J*Di}%C(;{))4_#k{R zJ_H|%55tG!Bk+;!`I^*@QwH;d^5fU-->U;x8pnTo%k+% zH@*koi|@nt;|K7A_#yl-egr>?AH$F1C-9T_Df~2k20x3R!_VUv@Qe5*{4#z8zlvYO zuj4oHoA@pKHhu@ci{HcV;}7tM_#^x={se!DKf|BnFYuT6EBrP727imc!{6f{@Q?T> z{4@Rq|B8RZzvDmfpZG8QH~#0J$7jXA{WCrXo)gc72jIE!Ja`};ga_jxcwRgd&xeQM z;dlfdiAUklcnltk=f~sl>;YxZB5OAB33vfK5l_OC@f182Ps7vk3_KGrh!?^O<3;eI zcrm;ZqW$?0iIlMex0k4Qx!Ykud@TzzfYvXnBx_CXjKHdOt zh&RF;<4y3Ucr&~?-U4rlx58WFZSb~uJG?#K0q=-+!aL(#@UD0_ygS|l?}_)qd*glZ zzIZ>pKRy5-h!4UC<3sSF_%M7pJ^~+!kHSaeWAL%~ID9-l0iTFZ!YAWX@TvGTd^$b@ zpNY@HXXA75x%fPMKE427h%dqy<4f?R_%eJsz5-u~ufkX3Yw)%BI($980pEyk!Z+hv z@U8eZd^^4a--++ScjJ5Tz4$(SKYjo|h#$fa<45qL_%ZxAegZ#SW{5pOEzlq<%Z{v6HyZAl)KK=lIh(E#~<4^FX_%r-D{sMoAzrtVR zZ}7MHJN!NV0sn}9!aw6*@UQqc{5$>w|B3&?f8&4tc|unF+piLG;5qSJcmSRo&w~fz zL3l78g6G9U@qBm~9*#%gk$4myjmO}zcz!$%kH@oz_1}yV3gC%&5}u5w;Hh{To{neW znRr3G5MCHBf)~Y$;l=S1cuBkzUK%fhm&MEB*4kB26#if5#AVYf;YvR;mz?DcuTw$-WqR%x5eAx?ePwHN4yi>8SjF3#k=9% z@g8_jycgaZ?}PWn`{DiZ0r)_C5Iz_mf)B-q;luF}_(*&dJ{li`kHyE~+ucvMtl>#8Q+3$#kb+x@g4Y1d>6hO--GYP_u>2T1NcGw5Pldxf*-|?;m7e4_(}W} zei}c6pT*DN=kW{pMf?(e8NY&G#joMl@f-L}{1$#2zk}b!@8S3H2lzw$5&jr|fO>Gg}27r;BE1Ccze79 z-VyJFcgDNmUGZ*scf1GQ6Yquh#{1xX@qT!Jd;mTWAA}Fahu}l;Vfb)-1U?cUg^$L^ z;A8P|_;`E*J`taUPsXRO3@p<@sd;z`?UxY8lm*7kBW%zP@ z1-=qrg|Eif;A`=9_w@hChRkHKT{{CFH5 zk0;;-@a!S}H@n0nJQ+{HQ}HxB9nZis@q&0Eyf9t_FNzn#i{mBml6Wb+G+qWTi@P>FJyfNMcZ;Cg=o8v9;mUt_? zHQokqi?_qu;~nshcqhCw-UaW9cf-5mJ@B4*FT6M22k(pb!~5d{@PYUsd@w!)ABqpd zhvOsgk@zTlG(H9&i;u&{;}h_S_#}KXJ_VnOPs692j7eD z!}sF{@Pqgv{4jn5KZ+m2kK-rsllUq8G=2s@i=V^K;}`IY_$B-@eg(gZU&F8CH}ISI zE&Miq2fvHo!|&q{@Q3&#{4xFne~LfDpW`p^m-s9EHU0*Fi@(F);~(&k_$T}`{ssSv zf5X4yKk%RUFZ?(D=btBK#lQVCDF>bt&xHrzx$!)BARdGV;~{unJQUA|hvDIP1RjY; z;n8>u9*gJ4`t zd?7r%$!#~h*!cZ<5lpgcs0B_UIVX**TQS#b?~})J-j~N0B?vl z!W-jF@TPb(ygA+iZ;7|UTjOo;wsCKDhN<5Tdd_%wVvJ_DbL z&%$TpbMU$NJbXUB0AGkN!WZL9@TK@Nd^x@XUx}~6SL18&wfH)GJ-z|oh;PC-<6H2p z_%?hyz60Nh@4|QEd+@#ZK72oZ06&Ny!Vlv|@T2%K{5XCBKZ&2hPvd9sv-mmuJbnSc zh+o1l<5%#j_%-}GegnUW-@cksLTJ^ViY0Dp)-!XM*L@Td4Q{5k#te~G`sU*m7^ zxA;5!J^lgzh=0OA<6rQv_&5AJ{saGs|H6OcfBtz&R{YyPQ*z)r@mzQSo*U1D2jW3^ zFdl;E#Y6FYco-gzN8pio6dsMo;IVjqJPwb?6Yv6fBA$dNGM%i|UBig+cwGF}C*idVy{<2CS_crCm( zUI(v>*Td`M4e*9|BfK%*1aFEr!<*wR@RoQhyfxkiZ;Q9X+v6SZj(8`$Gu{R7ig&}i z<2~@6crUy+-UsiC_rv?+1Mq?PAbc=B1RshI!-wM|@R9f^d^A1=AB&H}$Kw<5iTEUZ zGCl>LiciC*<1_G?_$+)jJ_nzR&%@{A3-E>bB78Bv1Ye3T!P@ z!=K|X@R#^2{5Adte~Z7v-{T+fkN7A2GyVntihsku<3I49_%Hl7{^y_nUsn9vi~cVM zo)gc72jIE!Ja`};ga_jxcwRgd&xeQM;dlfdiAUklcnltk=f~slcsv0wfG6Tfcru=X zr{ZaNI-Y@N;sxtX}k*x4n7y3htJ0s;0y6Z_+oqsz7$`EFUMElEAdtM zYJ3g87GH<2$2Z^`@lE(*zlLAOZ{RoaTlj7K4t^KEhu_B^;1BUf z_+$JD{uFZqW$?0iIlMex0k4Qx z!Ykud@TzzfYvXnBx_CXjKHdOth&RF;<4y3Ucr&~?-U4rlx58WFZSb~u zJG?#K0q=-+!aL(#@UD0_ygS|l?}_)qd*glZzIZ>pKRy5-h!4UC<3sSF_%M7pJ^~+! zkHSaeWAL%~ID9-l0iTFZ!YAWX@TvGTd^$b@pNY@HXXA75x%fPMKE427h%dqy<4f?R z_%eJsz5-u~ufkX3Yw)%BI($980pEyk!Z+hv@U8eZd^^4a--++ScjJ5Tz4$(SKYjo| zh#$fa<45qL_%ZxAegZ#SW{5pOEzlq<%Z{v6H zyZAl)KK=lIh(E#~<4^FX_%r-D{sMoAzrtVRZ}7MHJN!NV0sn}9!aw6*@UQqc{5$>w z|B3&?f8&4td0JNd+dtEC;5qSJcmSRo&w~fzL3l78g6G9U@qBm~9*#%gk$4myjmO}z zcz!$%kH-`60(c^xgeT)Ecq*R#0NJz7ntfV2o`GlL1@S_7VY~=l6fcGs$4lTP@ltqc zybN9zFNc@ME8rFJN_b_w3SJejhF8aH;5G4Dcx}86UKg*2*T);+4e>^JW4sC86mNz% z$6Men@m6?iybazKZ-=+XJK!DhPIza$3*Hs)hIhw%;63qPcyGK9-WTtO_s0j|1Mxxl zV0;KZ6d#5U$4B5J@lp6_d<;GoABT^}C*TwDN%&-Z3O*H|hEK<5;4|@A_-uR*J{O;d z&&LkFW?vPOZa8{3Vs#8 zhF`~T;5YGG_-*_Seiy%o-^U-|5AjF%WBdvJ6n}<4$6w$t@mKh3{0;sVe}})vKj0tn zPxxp23;q@VhJVL@;6L$S_;38rKTpq!fBR2*4m>BG3lG3^<9YBvJO~fQL-4$KD4q`w z!^80iJQ9z>qwyF#7SE5z;qiC^UI0(Tlkj9b1y9A(@a)II3A`j;3NMY9!OP<1@bY*Cydqu+uZ&m0tK!x0>Ua&jCSD7#jn~2J;`Q+Qcmup4 z-Ux4uH^H0Y&G6=U3%n)X3U7_K!Q0~P@b-8Iyd&NT?~HfByW-vO?syNpC*BM1jrYO( z;{EXc_yBw$J_sL-55b4x!|>tw2z(?y3LlM+!N=m`@bUNrd?G#xpNvnzr{dG_>G%wM zCO!+FjnBd7;`8wN_yT+(z6f88FTt1M%kbs+3VbEL3SW({!PnyJ@b&lxd?UUI-;8g; zx8mFI?f4FSC%y~cjqkzt;`{LZ_yPPNeh5E|AHk2}$MEC$3H&5}3O|jX!O!C7@bmZu z{33n{zl>kOuj1G6>-Y`)CVmUQjo-oV;`i|T_yhbQ{s@1JKf#~k&+zB?3;ZSi3V)5i z!QbNV@b~x!{3HGe|BQdZzvAEU@Awb=C;kinjsN-Q8Cmgf|IEmN=frd20eEga4<3jI z;lX$ao)-_r^WkB5I39sV;!$`s9)ri?`SCbB9#6mv;E8w=o{Xp9sdyTmj%Pni_8Vlq zNk%4K5HExm#*5%Z@nU#!yaZknFNK%J%iv}4a(H>X0$vfXgjdF^;8pQzcy+u6UK6i{ z*T(DMb@6(5eY^qQ5O0Jx#+%?x@n(2)yanD8Z-uwU+u&{Sc6fWd1Kttugm=cf;9c=< zcz3)9-V^VI_s09+eer&He|!Kw5FdmO#)sfT@nQIId;~rcABB&`$KYe}ark(A0zMI+ zgipq&;8XEw_;h>*J`T;9K!+_;!2;z7yYt@5cAwd+~kve*6G_5I=+;#*g4f@niUL`~-dy zKZT#h&){eAbNG4u0)7#{gkQ$5;8*c$_;vgSeiOfi-^TCYckz4pef$Cb5PyU}#-HF% z@n`sR{006Je}%us-{5cYcldk!1O5^Jgn!1r;9v1?_;>sV{uBR&|Hl9P^USRHx94Q$ zz;oic@BlnFo(B)agYaNH1ka0y;`#6}JRFa}Bk?Fa8jrza@%(rk9*-yB1@J^X2~WmT z@KihvPscOx>___VZ88huh48|75xgi~3@?tCz)Rw#@X~l0yewW0FOOHiE8>;#%6JvL zDqan*j@Q6z;jqt{J6TB(j3~!FNz+2+2@YZ-6ye-}iZ;yAt zJK~-2&UhERE8Y$7j`zTO;=S;3?GhE?(W8-u@DJ^?rv-mq)QqM8f;0G z?rsp9E|CsJ8kbGI$9IoC_j~^fd(3Bz@fnZn{OMTS=d~`^SdMF4Xg(n{e>*gPCp3RI zG=DENpBS1?3e6{n=2JuSX`%V_(0oQ{J~K3bKQ#X^H2)|x|2Q=NBsBjtH2*9#pB0+V z4$bF==JP`H`Jwseq4^h~`In*j!q9wCXudc!UlN)x4b7K@=F3C#6`}d6(0p}hz9uwZ z8=9{R&DV$K8$$*Fy8_q4|x_{AOr=D>VN-H2)(s z|1&iID>VN*H2)_w|2H(h9h%<>&F_Zh_d@gg|L?q{zfAo5&ysPWd3&6`GF>%}0giqeJsCq50U*d|YTgAvAwGG=C>Fe>XILFEpPRnokPNCx_-! zL-T2&`Sj3yMrb}WG=D!d|1dQFC^Y{#H2)+t|1>oJEHs}Ln$Hf+=Z5Cq4^J?`H!Lbp3r=6XudBr z-yfPE2+a?L=7&S`Bcb`x(EM0v{!?iFb7+1dG(Q=dp9;-ShvsKO^RuD(xzPMVXnrv? z|0Oj4H8j5zn*SD>UkS~xhUV8o^XsAcjnMpNXnrd+|2;JSBQ*arH2*6!|2s7QCp7;z zG`}61-wDm{hUWJ|^ZWnryp+F8{QH?waiMv9XdVsC6GHQ3p?UJqJVj`pGBi&enx_fP z(}w2hLi6;Yd4|wDV`!c!G|v*6XARA>h345q^Bkdh&d@w}Xr3oD&l{TO3(fO~<^@9Y zf}we#(7Z@!UNkf>7Md3i%}a#lB}4Plp?R6myliM*E;KJ6npX(TEB^oHamjbR(ff@7 z{{8>=UyuLa-v8g9+5dg(Sg}8Y*bXGU9f+O(r1#BZ=REe!6L%nX{$sn4xC^o0q_+#P z^Plv-dF-6WzIoyf#Lj zf71Krv2z~#=7~EHJO8m=NZf_kZ_?X^*!fR--#m8CW8XY+2V&^JG{LhSq} zy>A{n=do{|xC62CAKQh*U5NcAy8kkA3sR9f+O(*e)dQLhLu`?LzGQC%tbT zJLj=)p11?C^B>!V#9fH}CcRyVo&Tiw&12_0_RSM_Aa?#^yO6jGvEQV(3$gQ`^uBrQ zoX5U-;ts^le{2^LcOmwh^mZY3{*&G}kDc?_H&5Jw*!hp`LgFsOev{rV#Lj=x`{uE8 z9{c8rI}khnv0X^qh1hS>+lAQqPkP@xcFtqpJaGqN=RdX!iMtT{O?tZ!JO4@Vo5#+1 z?3*Xl>>3#FqIgfqw#2tv8|JW`h?n3N0>Fq-7{3pF{9y{l; zZ=SdVvGX6>g~VNm{U*I#h@JnW_swJHJoe2KcOZ8DW4n;J3$fp%w+pfJpY*S^Ja*1w-#l>#V&^}$3yHfB`%QYg5Ig@#@0-WYdF-1f z?m+DP$95rc7h=CjZx>?cKk0q**g21V^TZv9o&VS_B<@1&H|gy{?EELaZyr16v2UKZ z1F`cT+l9nki2WwLU5K6kr1#BZ=luU~zxfx3-ss)=)!_g0uTmBLR0x7x`*bM?a{ITr zGpUrStBJa4h^FfcZPNi=)}0{8lSRc;Q_a*v!!%h7v`L3_Rri7*Z#I?CV``)qG)Pmm zNLzG7Jo$L?@#N#l_k?)zy`&-H$;XqACm&Bfp8WCR$zMh_#gm^WKTrOd;>o{5Jo$O@ z-wT2QJOy|P@Dykvo&s-)rvOiZE#fI~JqQZ&6wD!>f=`I2AWuP_f;3$HDayOMKsmIk)FKUFQX|cBIsD2BA(s9bE(t1)& z^|FSFr}R?sl>SLPWq8W)l;J7EQ--IEb5(|?%=_Xg!&8Q*3{Tkv@suqup0Ye;dCKyX z(3yllUDgvNp;mx{WU>zv|2yvwEhl)y6II=Ra9S{)kp8>Q?1oroz=fV zP%pI#>tQ{suIj7zG)wEnQ;(+}Pko;HMa5J9dGXZesn1iNr~XFq)W0a6XLz3Bd4}g1 zo@aQT87Q7-=85MSo@aQT;dwTrc%H2$o@aTU<$0FpS)ONkp4~5=XKx3=b3D)SJje4~ z2ldl<&DJXYpi}xQ2%b-&0;;Tf>ZIO!Tc2o+_UMfM34#WxR7el$8MV`!dRL!moxamK z{SgEW)2N6Z(R1Qy$kULgAx}e|hCB@~h^J9H@igLT#M6kU(E#x@nk$}0JdJo7@igXX z%+t84cp7&RPh+0OJdJr8?-Nhs|AL?iPZORdkBFxUPZORd6UEbHgLsOYYekTZ8@U-A*!PA1L1y2i}7L&!(Vv~4U@U-A*$A$J39eA5Xs};^}uxJpFn4^YrKGUrRjwUlC9Lnd0fs)1Rk5&w!|S z29y)efEMBzz%$?j@eJ4{o&h}m>mnGKLp%d{2DTE(q^$TN^<;4$3{f16wfH0Q9Pq~Mzt2t zs8Qk>#WRX$6wfH0(LAGbi)Zvx;u*~|nrAf6X!qx6p3y&xXAI96o-sUQc*gLId0jkX zJ`~Rwo-sUQc*Z6d&)ACM8Ot-4XDrWHp0PY*zZTEfTR||6XB^Kso^d?m+KOk~81anb znf1NS>(3yVomNFvNzbdJ`fGybXrq4AMg1KFbJDAzs;Is?YoOlIJgwDUoz=fVFgK$L ztD2rwSM}9oAe@nN{MGx6Y;F#S;e!8XBE#Xo>iB{vpS1-R`aZO4p-az)%Je1yWnUT9QZv1xVVbE0+Mz?b8U*{J%BFI9OfB?+-qHtJq+R0K&*MLG zaDe9k&jFqTt;BO+q<9YS9N;;?bKqtW9OOBeOFRd84)Pr2ImmO6=ioB&96T>?W@*L$k%5#+GD9_Oq;yHRkJjZyB@f_nhR!2O? zdWq*4&oQ23JjZyB@%)rRJU=}ko}YMr;`xc^r%%N5(>LPziRU=aah~Hm$9ayo6VLIn z;yKQ9oaZ>t@jrs#XP%$S>v6Tziy9&K=g*7vm5%C05S)lpPLUHs)`cOQlcuw)0;yImMJf|y) z=QPi0p3^+1c~0}3{#rbzZw0{_o-;gWc+T*gaetoSIWtB)XL!!=oZ&gcbC&09Uh$lL zT0CcY&hnh)IlEFkXHSaf9M3tPb3EsG&heakLpwp65Kz zd7kq;=Xq}L*LmFzf;(wdRF(9+x~sn?X^uAPM_tt4L2x&{imQqmsb^i03}feV+R~_j&H~+&?Iu`*(x5AiavK ziW;h?25O4tX|wj~pCB$Sl?th3RQsdx36)@h&4>AxT@K8=d#5k034>ZggCtquA? z7xY&U7fGjLs;ma;qyc(cbG1f$^ow|+8N?IiiSk5wqJzW}oiCm!Pn0LhlfaX}lTcke z3Ejk#z>~m}z>{!5JPCJ#xMV!Zc#`oX<4MMoj3?P-@g&v8#g?Li%q~J-xlaePTPs*C&N!dd@DS1-z zq~u9?NIWU;1#zi(Qt_nXNyU?jClybssp3hsMLel^Qt_nbNnJ`jshfx=HBV}u)I6zq zQuCy~ES@x3#FK_64Nn@LG{eM`W`TIp@TB2M!;_XLEl=9V#FO>~@ucNR%afKT?Gf>$ z3&fL-Cml~Zo^(9vc+!2Y_1drVx*f!&PphJ;q36|I{WVE*v{66mqU?PJd!NDHXR!Af z?0tsLviBM6eFl4|N z;VH{gmZvOFS)Q_O#8Y;(c*^pWJxh*iJkZ$BL&SPeq=JJQe>4;vV36AfI?1;CX=O0iFkV9^iRkm3SUFC7uU)9^`qD z=fQg7d9b&59^`qD=Ruwac^>3>D3y2~dPqDEy{h4QU(2;qKkHf$_i%!;tGpgpOTDfU z`cRAYm5%C05cf!OUG6aou@iab)M?0#Z xv#};Hkk=gQo^hjXvV3@u_&4?$>$U4&s_+R#DZ^^Xjht znxr|}sDrwwyFpy@^eV0@YN(zXs41GK&DyJ9^=}Z@BBM&Gni{LC2J1b2uC3x}@tb&B z^0ee>$UvJy)K3#NTN`vh7j!3xYnx8R#M73iEl*pXwv)xvc9VG8 z^0eh?$J4Hac-l1*PdlD=JneYe@wDSA=&0r^6xfbhsD9b>!*D(~+kmPe-1PJRPTsr{fm!bmZyC(}|~( zJE9X$rzYa*#M6nV6Hh0ePCT71i>GrI@pR_t%+r~tvpb?QPv-^V>CDrar!!9%o-RCH z9urTO7sS(rrwdOPo-Xc)E-P{q~ zc)B$cPdA=!Jl%M@@pR+qc2zvxvx%oWPj{Z~Jl)?CPxnRQ>CV&L-uJNgJqpX-_ptXp z?0pY=-^1Sbu=hRI%ii~}_dV==PkZ0f-uJZkJ?(u@d*8Fa?0rvr-_zdrwD&#jeNTJ; zLV6X~qiU$08mK9nr_Dj!TP$x~58_57Qw~+o6KbWGG*TaFiFWIlZU%89lq2u~Jh#M7E9+gvVwa{zwXEW*pt^+p7A{6dB*dM=NZp4 zA(eP0JS3h8JQH{(@J#qjJQKbX&jg;gdEVxEo9Atww>yaE?eXGyo9Atww|U3>1oWS+@9lX)idOl~ip$>YQ`nP)Q3WS+@9Q+TH27tfTs;+euTg=Y%S6!+&8 zo++orGnHp5&s3hNJX3k5x<9A#O#M_mQ+cNHOy!xDT0GMp7SA-EX*|<-rtwVUnfASS zru`YjP3M`;Go5ET&-9MsnLa^0(|M-zOy`--GlOSFLGjF}FP<4ZGk9k3%vc-5E#0r* zbUTP!mRUtrL(i+bhH8?&)J7fDMcobJmSyQq|O0 zFKV!+>2qxr&kCLuJS%xtmKM*-rs7#SQM0u{2XsMqg1A-bR7{oCK%F!|lQmbHv`4?_ zpCE2^29;1%HBuK1(z}|kb=s#(`Y(uElSxHXUC*hThKOg)7vfpNvxa94&sv_fJZo!; zXKfGhtmRqDvzBM=A@Que7sRdOS;w=EXC2Qvo^?Fyriy3X7V)g(S;w=UXMHL0tZyQo z^*rl&*7L0ASv)LW7nP+n|@oeVV%(Izi zGtXw8%~!>1Vz29!{x7+*e zdu8vp+xs2%euur^Vefa?`yE|n?|0by9rk{Qz29N)ci8(K_I{_m-&s`ley6?PY43Lq z)g*nXjXJ0+x*Npp%Btex*~PPqXBW>do?Q#YbK-=q2XQBpDTgYkj#{agM(QIi(Qf&( zIe9aPJC#DY^nhxqjb71ceWGRhM#uGg5O+GNJSwN!YNyvURv&1Ec8TZoA3@w1o-_Hx zbB5;(&l#RGJZE^$tP;R+Rhm*VcMNqx7+s>T9__f4vpNT}r9kdQeZPtzOj_xj!#0*SGpv z{|n-NOHf{w*VAgR*ELQbYNfu?N!V6QPCc8@NaW&S98mwvhT>ErM{{``BGpUHG>p6AP5KYt<+MolvpgTc)x^yb0 znrfgP8lcIVt4%tjUvw{sPoF_0R8@`CMT0a|^R-1h>3P!gWZ=nAN<0~wh$jP22A&K& z8F(`AWVkGzj9J8!ktZWhMxKnr#FKG>crx;2_p*;>pC5i6_$$ z@%X3=E=g7rHpv8G!su2o-90Bc(U+h;mLAU zJXy1eCo4}@o~%4s-x5#OMdHcIlakCmT<;C&ZKOCGlkA$;Ok7C)+XcWRDk5 zcAo4!*?F?_War5~Q#{#sh$lNwcAgwOIm(GAM+@=f;K{+0gC_@14xSv>gZP|0Idh07 zCr?hEoIE*4iYMn1@#N&m$&-sG7f&vpT(!iL>lNAiT=qWKM%nvZ_CA-r&u#B>+xy)1 zKDWKkZSQjrl)cYw?{nMx-1a`Vz0Ym$^JJ90&tvcN*!w*8K99Z6WAF3W`#f8rBy>s)m=k1Lp*u6izhEnUY>kB`FQg2o@~MLA zsFixjpG~EYv`V{mN;iY}$|;mf52&8nsJBMz6D`v>IK`Jk<(_ry5T+o@zYRc&hPKTO*!o zXT(#Tr#eq{p6bttr}~@Xsm@cKr#eq{p6Wa`(uk+VBjTySQ-h}lPmS5)squq&YVg$L zsmW85rzTI$PU5Ngws>mt)a0qjQ}dr7{!yMs3yJ4Zo=15e<$09nQJzQFiRaOC;(3hc zF`mbG9&4}HHBKLDrM}Wh-3a0zPpz; zKGkx4tDp71ApXhJ%BzRDS(t&ZZUH9C_>hRRz zsl!u;r!G(3!s4m>ta$43)a9wmQ+K_1>Yf)*J)U|z^?2&>)Z?kwUp)2Zh^HP;J)U|z z_0x-|eiiZ5=c&(ApQk=geV)!o^;;0%B~F=DS~b*EFKeh~=u2(aL0!?^Aiir>mDQta zuAUmMDO#wVI;?BDAH;Vnp{i;m_h+|3nyUHQqJ6rg|AP4LnN&*E)kNJiL=*LeHt2vZ z>rN2gBa4curW&Y+hH0`EXp;`<7u^fudu9+%&&R~m^9AwrEd}|n|NN}d4cCeo)^oA=f!5?d6DNuo)>vuPwU*ma==QW^TUOc^cdhzt)>BZCQ1M&3QC7xb9Z}7aq^F{^nywOTLZ}7aq^9IiwJa5?h-uAw? zz3*-Bd)xco_P%#_+56u1zPG*aZSQ;A``-4xx4rLU@B0*&z3*f1``G(F_P&q3?_=-# zY?i(6WAFRe`!}cI* zP(8I#Z;jR`TBC1tM!yH~Q&K699?~;vr#CfLpJ|1@6VDW$scFPB^%3z*<(bMem1pW~ z@l5?eJX3k5@l4~H#xsp)S|{;Lds{ryc&718z~dLi*l=b6qkoo71Fbe`$! z#54VzcxLd-;F-ZQ<2mun=qH{TJTrJ^@XX+u!80?RcxF}>&rF_~JTrM_&K1whJ>r?k z^FGh}Jn!?o&+~p4@x1@3+@J4%EBEL7{|n+jNUgkjSnjJ2+ROdmizOglq#qPRbOq@M`OhE(OU6*bXGhc^L)(nG0(?5 zAM@GzcxLg; z;+f_CoW(P1j(BGA%;K5FGu!<+n`gHBb2iUxp4mLJd1mv>=9#@$JhT4|;^*+p;hDoT zhi6V#@yvNoJac&F@XXZc*{feO^3sdFJxW<(a!tJaaFKXCBWyo_Rd;c;@lU z8z`Q6^Tf0HsD2CLx5O!@O6y5A)yo>H8TwM&^^>jy@mnLxsS9^PU%Riq=J|Swc)sTOn&%syZ+O1p`KFe5zIjDF z-|&3H^9|28?$2*{zKx3KTb^%uzUBFr=Ubj{-Jjp`e7j3L-|~FN^BvE3?uhSrzH@(m z$MYS}cRb(me8=-0&v!S2`0shX&n2GkdA{fQp67da#P>YkFB8xAJm2&D!1Dvo4?I8A z7S9i_iRTBNA9#M?`Qe0keoUs4dR&e5q6TZ47Hg~Q{g3v3kG4o_##~T8d}i z2=VOW*~hbwXWxw=em~EC=WsvIexCh2`+4^B?C06PR6P5g!~Hx5cnY{#q&((nESi?ewO`>NBm=cRDAY>pa(auJc@fPCVE9iRU`cb)M@y*Lkk<+(;*$ z8&N z#dC}27SAo7TRgWmi09S?@%+y7JJ0Vtzc&!i?*qj1JJ0Vtzw`X={`_A`71V>OueRzV z_vimU)mnY4v-)2U|3_-&)x&as{?T52HBPg%Qs3*O{tV*(Oso8=q`K;;H#9*XYqfsV zY5g6<|Hbnc&tE)$@%+_UJb%3-p1*kh;`xi`FP^`7{w^$@zn>M)-#mZw{LS@ch$XJparQ&p$l>@chH`ulwp>o`0)|=U<+GdH&`3m*-!efA@;# z-+zPn|9Jl6`H$y6p8vXv=fC&F^B>QDJpb|h$8($Kc2V)%eqKDcd2aLE=DF?uyv=j_ zqImA`+~K*ybBE^+&mH&Y9iBV$#B+z|4$mE)yBWoEx0-nF^4#UQ%X63KF3;Wl;<-e-%vdFdG7Pv=efT*h-5#i8$l#T zoN}tPo>Wu4tWlbwZ91UKx)VflW>Fc{R5SI^FiqA1ZPFoK)x98+E1OE_F*VW)dP`Ha zNLzG7mx4&{K$%oZPpFAr(hyD87vjl%Ogwqw#gm684^JMRJUn@L^2`)Zo*m-J!;^<6 zFHhcb;>p`WJb8KY^5o^o%afNU@AV*(k0)Oa@#N#l$CHmI-$?P~TOyu(Jo$LMc@fFa zlbIMzPJaZEr_v~&9?^5^pne*! z*;=I^bV`2(k=p50K$TTbozz=zYp&L4kIv|yAo6r771Bd`MqTu#-qmMXr|-n`^nXF5 z4o{sT;;F+^ho=rt9iBQobvB5n&IR$*<*Cb4m#1z6@zfn4p1M4BdFt}i<*Cb4FN1jM zRTWP?o_aj>c?IMjd>dL zH0Ei{)0n66K=Cx5C!WSUjd>dLG|4EQCe_5#gr^Bl6P_kKO?aB@7f+MhL8K{9Q=Xm7*wB%{Y(~_qpPs^U- zX*oqaEqPu)8bo>pa)0(Jr6<%xFKLLT%l+AFn~v#n5P2hBSyV4Z7HEeK z>8kDpk>1%2kvDnX z=qG7f;`)c>416<>|}Qm&cnIk-i^@r|&ND^yTTt(~qZL z1@ZK2C7ymf{doHE^yBHr)9+>w>Ce+Ymw5W~^ylf%)8Bp7pQrya@$~2E&oh8$0M7uP z0q&~-JOf@6&j228UPK1)3^*a4fyu-(kY^yzK%Rj--n@tm{75_lcZ+8r&mbOeUPK1D zKfQSo8PrBRgLnq<4B{EYGl*x9`*SeQ;5_2-=0#*Mk2fzOgU5Ym^r05(E7|+uH-gApamuOEdQz?RvPNl!mWt;s zp0{oVkr6y2a*JmK&j_9oJl?#BjNlouTs$Lw7SBi?Z(c-3@{D|1JR@Hh&q$t;JR^C$ zc@gpEMPyWR@r4sByoikA8TGMvMtv=wQ9Pr0M)Qp38O<}gt$0R{5zlCz(LA4= z(|`a~3cxF!&&upIAJhORb-w7gfc;*xn&m5jPJac&F z@XXbDcjW&3e69BCto{um zU!+!HJ*;QdReklIc)sBIg69jKFL=J>`Ld{ZzIc$T_9m+~yFA)ci?OL>;^Eah3sv(){$lxOMPAhL{S8P77FWjxE= zpUZfbxj&cjEaO?mvy5jM&vKsSCB?J6v3QpAEazFyvwW*~mj5Q66+A0=R`9IgS;4bn zsCZUuM0$6IC{q(_?C(7xb1s&?4>95%KKh z*~_!Hf_V0}63<>9Z(c<9@_6$ivX^J?%^0M7xQ13U+K4tyk@1G~j@fXAB`k%K%3 z-B$;B4z>}`K^|{jM7((s@#aP3AkV?ygUBJCLwUq=h{u~35pP~Z4!J)M@f=zqovpUPQck z5jojbJSWG9=OoWb9&cVmPW~^5oZ>l^S3IY9PVt=LImL5|=hRB^oH{9<(>$knPV=0u zE1uJDi03rVX`a(Or+H5EoJlF3GY^W#n->vpUPR9DoN-5Z^CEKQ+aU7KIsF$z{!ODI zdPL8uoBC;@W^03f&;{KIBLAgRF;!LrbegO`!|T(Pp!gof8KvqUDa3b$$fQyy}s9Z{TW1q zv?{7fdR`sXUlTM(8}*|u>hB;LmtF-`MfKHL1NDyPX|49^to{w6@flTE)%2{os;}PD zEUnjmo!9Lk8sUlXM0g@Rk?!J&OcGCoC&ClqiSR^uqQ%7%Z77~7Pn0Lh6WuJH=&#~Q z;7Q;~;7Q;~;7J%Po`lcElfaX}lfaWKvv`u#5Kl6mWIV}ulJO+tNp?^?$?gWxNRaWt&dQ?2AcvA7C;z`AmiYL`!@ua#RL{sym=1I+ynkV&( z;z>PCJgIq7^Q7iU&69>FO=D+{DV|b1r5+GZsW##%#pBJ3 zXel0VUPQfl5iRw55G~D9I*)it^OWW(%~N`;cuKDjPidagJY{&w@ObkgTBeS8%JdRX z8J;pcWq8V*5>MF_;wj7H&5NivFQR36%JP)`L_B4`5l>m3ay;I=h?aXuJmuPnryNf? zo^m|pc*^mV`y+^!=P930Jmq=H^OWZ)KVCfLSBa-QPkEjSJQaAnc@eEpPdpWRi>Crl z1s-o+L@S&TPsLQ?smN22$D0??iaZs0Dt;!OirUE9Khgz(! zbW}Hj=!40XQx)~3TI*$v(#Kk=ul18|1<{8h%B`|`N^SM3#^`-5*G~Pc{{_*96O>ow z^|W}rc@g#IMf72whgXW{;gjNdgy#{SM|d8oE1pN*5YHn#-n@uD!t)5vBRrK-il@?p z;;F>r&5LLyo=TsJr_#6Lsl-#6r!r4vp2|Fx+l#02IPp~G@#aOeGEe0{gJ>0=D*44z zg~yv0QEy&Ey?GJ!=0&v1YVlM#EuN}8Re8L55v}TusLE5dk9ex`c=IA!m8a1;{TDN>TYoOlIJgwDUxj$R{8$?@XRAE)qv+An8dQa}pmg}`&=XE=Xwo0p_ zs-)-DUHvslbF@)E>Z1M*qOH@bxOiGO6i;iO);z6wT5lFl>tDswhNlfr8=f{iZFt%Y z7Ehbc#nXnT4Nn`MwwcA#wuX4x^0eh?%hQ&pEl=Bn;%R#~h_>Tt$J36d9Z$QS;%PTU zJneYe@wDS<$J3steM#}OZ!DhnJnebf^R(Y8p7y_qrvpz1o(?=6cslTO7%H9)Uy7## zPY0e3JRP%&r{kmI>B!TOrz1~Co{l^n4~wVc{UF+jrxQ;no=!ZS+@GCzI!zN#C!S6` zop?I&bmr;o{_M=txv6+M^K|Cv%+qB`fUrz=lao~}Gy?R{5!-_724v-jQXeK+T@o4xO5@4MOiZuY*Lz3*o4 zyV?70_P)Dw*xlZDxA)!ceRq4`-QIV%_uc2p-gme6L$3$XVaepa8dgE>&ta|P{v0+^ zA8Cnp>zHl^(c$jT;kopHYN?H0(P+)oGPys8AJ^|e^sT7!sGMr6g%;u+CPJR^9#c@Z7KGvbtZMy3$YNFHxqL`U+B2* zJQH}lc@drPjCdxzDV_<-wNpRqe?j!^1m#tEJ*}2{T_g0NR_ZIA)QuqePIBc`Mb%Yn zy`fS1SWES_e$uTV`ff_))`NOVZS|_g=u`2$`>lB1<#~_iJsxjfMBn3iuf2HQ8z-Lk zc)WQLeUIn8KZEE*o{9OzGm*!e7tx746L}``Ok6FViKoRgiDweeB%Vq2#WSgocqZ{o z;+e$b&5P(Hp2?}jGx=fhOy-%)&6Kd~MM_@hl6(v#gYO zmhmj(S;n)BXBp43ZQ@yWSv<>mmh&v9d!HA(KPo{huBvvHw#Hu7xb*~qiW{ke%})8pdV#IuQK6VE1|O+1^9if412csBEF=Gn}% z`DO8Jo*|yiJezqo^K9nX!n38Uc(ybb&la97JX?6S>=e(IYvS2z@3-3ft@eIv7uox* z_I|6q-)ir-+WW2ce(Qfhbep~3X79Jz`)&4qo4wy=@3-0eZT5cK2HE><_I{ha-)`@> z+xzYIetQG;&@fHb0&UWvAo`R0^LR43KaW>X9ko&~jnqeSe;(hhQ@R;Me@>xXdO)?* zM()p_N9z+U(>FS<--GChsPgC`)mA&brm^}!E3``|^hXdq$#XKFcuw-1F>mIn&%A98J;ul&oew{I*8{C&l#RGJZE^$@SJgfp5-}PKs;x8&hnh)IqUvB z%X8NK>CKDiS)Q{z-n@u<^CEhV=bZcV9M3uTr#CO6=Xkt%5k1Fq&i}?b$8$c7c+T^j z=Q+=Fp2wRP(ety#bN&bMc=IB9fybK{(F>KubD@)XF7RC7xxjOQ=fbTZdNHMP>p?xG zwt7`#^r@EXTm7v61<_v;lvm~TwA$-+jnju(sjqZWe+E%+UPOP*uZpUx)_Oyu^s!d! zYn>L)C7w$>mv}DK7tf_W;zoiz>Zx4&-Hy&?ZM1SM?ZI*a``(8Z1 z@m%J)%yXINGSB6X;<-FQJePSc^IYb+{C5z&!gHmdc&_kV;km-&&5NivFQQl0is#B% z@p$th>dlL&H!q@B-4Wirh+ge0o~t}pd9Lz!^CIfai|Dnq;<;8yJlA-x@m%A%=8m|= zbL~g*T;sXUbDifpk2f!(*E@^n`a9ye&U5|SAR*bMAR&36Oe&@7YNBo$qKW!K+jKye zbtgzjkwwK+Q_a*v!!%h7v`L5bi|z#pDYL1B9#bQ|ph23dMcSex;z`AmiYFCMDxOq4 zsa_IKs_9y<{W`DPK|<=xDykZKUftDSlQc&gbx;>|H%Lg6Ud2^K4b@WvHAVBZS$p-X z{tXh+W>iU4Q)6}2V7;f$wN*T6e-lqSo^(9vc+&Bt<4HGEJn6m^Pdc7-Jn4ASXBAKS zN5zw#Cp}Mkp7cEFdD0&iPx|{oLI$1;JQ;X0@ML&VJQ=2mCj(Cgo(w!0crx;2EG?dl zO~sRuCnHZro{ZbYlktjpGVx^M$;6Y1ClgPm;o`}(P&}DLz=i%iibuLfdpemvtvd$el%HR8!5=Lp-^8a`WWo z$<6cNA3?%H$&^nOR7b7UOXKyCR%y3R>1L4da0=zp1FEMs>aEfGM9cJz&gl0b;gM9z zqlZ*m?ev<)>NBm-cRC>+Z(byL^CF?rBjTylK|Gasym^sOiN~8436*#%{S_os=BZpj zJe7GW^Hk=k{I+;1uMtmW9&cVGRN<+@Q-!C>GvcZ8rg*CGRN<+@Q{|j^s-_W7Ri3Im zRe7rNc=IBm>TK~;{Xslcd8+Yv^CF>IW${$&B%W$K-n>Zg=0$=xFA}QpRQo4LsLoTp zka()|c=IB`n->Yy-xW{wb>gYcQ=P|~7YQ|Zym^sO<2mvCKTX{SY}a-E$MLVi_xl4q z_hfI{vXyn7qB09AdnkJq*|U_r+A@_@rpg9oFVFKl2g;tMWvh(yJhx0w8Ko%y$NiIk z@+W!HCX75n-pwZ=;YF+#fEC7ybR#Z!-`K2Lp~`aCu-!us9CQ-6kd>hsj+ zsn1j28)5SzY*0!(4R{*xG~ls$5jNmy@S%7bd?TJjoXdkr9#DdwR!jBJSk2NJ zeWs)ONx4DT;~|w%E%~$Q(Np7

_IL$Mv0l55iX;QJkJrbM@9}&6Pi!SGVb;e$ee8 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 literal 0 HcmV?d00001 diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java index 1ef723df22..24792bd37c 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java @@ -377,6 +377,18 @@ public final class AndroidTestUtil { .build()) .build(); + public static final AssetInfo MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS = + new AssetInfo.Builder("asset:///media/mp4/long_1080p_lowbitrate.mp4") + .setVideoFormat( + new Format.Builder() + .setSampleMimeType(VIDEO_H264) + .setWidth(1920) + .setHeight(1080) + .setFrameRate(30.00f) + .setCodecs("avc1.42C028") + .build()) + .build(); + /** Baseline profile level 3.0 H.264 stream, which should be supported on all devices. */ public static final AssetInfo MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S = new AssetInfo.Builder("asset:///media/mp4/sample_with_increasing_timestamps_320w_240h.mp4") diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeForegroundSpeedTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeForegroundSpeedTest.java new file mode 100644 index 0000000000..6486abc4ab --- /dev/null +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeForegroundSpeedTest.java @@ -0,0 +1,187 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.media3.transformer.mh; + +import static androidx.media3.transformer.AndroidTestUtil.MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS; +import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported; +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assume.assumeTrue; + +import android.content.Context; +import android.net.Uri; +import androidx.media3.common.MediaItem; +import androidx.media3.common.MimeTypes; +import androidx.media3.common.audio.ChannelMixingAudioProcessor; +import androidx.media3.common.audio.ChannelMixingMatrix; +import androidx.media3.common.audio.SonicAudioProcessor; +import androidx.media3.common.util.Clock; +import androidx.media3.common.util.Util; +import androidx.media3.effect.Presentation; +import androidx.media3.transformer.AndroidTestUtil; +import androidx.media3.transformer.AssetLoader; +import androidx.media3.transformer.Codec; +import androidx.media3.transformer.DefaultAssetLoaderFactory; +import androidx.media3.transformer.DefaultDecoderFactory; +import androidx.media3.transformer.EditedMediaItem; +import androidx.media3.transformer.Effects; +import androidx.media3.transformer.ExportTestResult; +import androidx.media3.transformer.SurfaceTestActivity; +import androidx.media3.transformer.Transformer; +import androidx.media3.transformer.TransformerAndroidTestRunner; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.rules.ActivityScenarioRule; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.common.base.Ascii; +import com.google.common.collect.ImmutableList; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; +import org.junit.runner.RunWith; + +/** Checks transcoding speed when running in foreground. */ +@RunWith(AndroidJUnit4.class) +public class TranscodeForegroundSpeedTest { + private final Context context = ApplicationProvider.getApplicationContext(); + @Rule public final TestName testName = new TestName(); + + // Creating a SurfaceTestActivity rule turns the screen on and puts the test app in foreground. + // This affects transcoding performance as foreground apps are more likely to schedule on the + // faster CPU cores. + @Rule + public ActivityScenarioRule rule = + new ActivityScenarioRule<>(SurfaceTestActivity.class); + + private String testId; + + @Before + public void setUpTestId() { + testId = testName.getMethodName(); + } + + @Test + public void + export1080pWithAudioTo720p_onMediumPerformanceDeviceWithDynamicScheduling_completesWithAtLeast140Fps() + throws Exception { + assumeTrue( + Ascii.toLowerCase(Util.MODEL).contains("pixel 2") + || Ascii.toLowerCase(Util.MODEL).contains("dn2103") + || Ascii.toLowerCase(Util.MODEL).contains("sm-g960f") + || Ascii.toLowerCase(Util.MODEL).contains("g8441")); + assumeFormatsSupported( + context, + testId, + /* inputFormat= */ MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.videoFormat, + /* outputFormat= */ MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.videoFormat); + + ExportTestResult exportTestResult = + exportVideoAndAudioTo720pWithDynamicScheduling( + testId, + Uri.parse(MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.uri), + /* durationMs= */ 30_000); + + // Running this without dynamic scheduling runs at under 80 fps. + assertThat(exportTestResult.throughputFps).isAtLeast(140); + } + + @Test + public void + export1080pWithAudioTo720p_onLowerPerformanceDevicesWithDynamicScheduling_completesWithAtLeast60Fps() + throws Exception { + assumeTrue( + (Ascii.toLowerCase(Util.MODEL).contains("f-01l") + || Ascii.toLowerCase(Util.MODEL).contains("asus_x00td") + || Ascii.toLowerCase(Util.MODEL).contains("redmi note 5") + || Ascii.toLowerCase(Util.MODEL).contains("mha-l29") + || Ascii.toLowerCase(Util.MODEL).contains("oneplus a6013") + || Ascii.toLowerCase(Util.MODEL).contains("cph1803") + || Ascii.toLowerCase(Util.MODEL).contains("mi a2 lite"))); + assumeFormatsSupported( + context, + testId, + /* inputFormat= */ MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.videoFormat, + /* outputFormat= */ MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.videoFormat); + + ExportTestResult exportTestResult = + exportVideoAndAudioTo720pWithDynamicScheduling( + testId, + Uri.parse(MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.uri), + /* durationMs= */ 15_000); + + // Running this without dynamic scheduling runs at under 40 fps. + assertThat(exportTestResult.throughputFps).isAtLeast(60); + } + + @Test + public void export1080pWithAudioTo720p_withDynamicScheduling_completesWithCorrectNumberOfFrames() + throws Exception { + assumeFormatsSupported( + context, + testId, + /* inputFormat= */ MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.videoFormat, + /* outputFormat= */ MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.videoFormat); + + ExportTestResult exportTestResult = + exportVideoAndAudioTo720pWithDynamicScheduling( + testId, + Uri.parse(MP4_LONG_ASSET_WITH_AUDIO_AND_INCREASING_TIMESTAMPS.uri), + /* durationMs= */ 5_000); + + assertThat(exportTestResult.exportResult.videoFrameCount).isEqualTo(150); + } + + private static ExportTestResult exportVideoAndAudioTo720pWithDynamicScheduling( + String testId, Uri mediaUri, long durationMs) throws Exception { + Context context = ApplicationProvider.getApplicationContext(); + Codec.DecoderFactory decoderFactory = + new DefaultDecoderFactory.Builder(context) + .experimentalSetDynamicSchedulingEnabled(true) + .setShouldConfigureOperatingRate(true) + .build(); + AssetLoader.Factory assetLoaderFactory = + new DefaultAssetLoaderFactory(context, decoderFactory, Clock.DEFAULT); + Transformer transformer = + new Transformer.Builder(context) + .setVideoMimeType(MimeTypes.VIDEO_H264) + .setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context)) + .setAssetLoaderFactory(assetLoaderFactory) + .build(); + MediaItem mediaItem = + MediaItem.fromUri(mediaUri) + .buildUpon() + .setClippingConfiguration( + new MediaItem.ClippingConfiguration.Builder().setEndPositionMs(durationMs).build()) + .build(); + SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor(); + sonicAudioProcessor.setOutputSampleRateHz(44_100); + ChannelMixingAudioProcessor mixingAudioProcessor = new ChannelMixingAudioProcessor(); + mixingAudioProcessor.putChannelMixingMatrix( + ChannelMixingMatrix.create(/* inputChannelCount= */ 2, /* outputChannelCount= */ 1)); + EditedMediaItem editedMediaItem = + new EditedMediaItem.Builder(mediaItem) + .setEffects( + new Effects( + ImmutableList.of(sonicAudioProcessor, mixingAudioProcessor), + ImmutableList.of( + Presentation.createForWidthAndHeight( + 1280, 720, Presentation.LAYOUT_SCALE_TO_FIT)))) + .build(); + + return new TransformerAndroidTestRunner.Builder(context, transformer) + .build() + .run(testId, editedMediaItem); + } +} diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java index 06a8c75ba3..bd76ed662e 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java @@ -78,6 +78,7 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory { private @C.Priority int codecPriority; private boolean shouldConfigureOperatingRate; private MediaCodecSelector mediaCodecSelector; + private boolean dynamicSchedulingEnabled; /** Creates a new {@link Builder}. */ public Builder(Context context) { @@ -165,6 +166,28 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory { return this; } + /** + * Sets whether decoder dynamic scheduling is enabled. + * + *

If enabled, the {@link ExoPlayerAssetLoader} can change how often the rendering loop for + * {@linkplain DefaultCodec decoders} created by this factory is run. + * + *

On some devices, setting this to {@code true} will {@linkplain + * DefaultCodec#queueInputBuffer feed} and {@linkplain DefaultCodec#releaseOutputBuffer drain} + * decoders more frequently, and will lead to improved performance. + * + *

The default value is {@code false}. + * + *

This method is experimental, and will be renamed or removed in a future release. + * + * @param dynamicSchedulingEnabled Whether to enable dynamic scheduling. + */ + @CanIgnoreReturnValue + public Builder experimentalSetDynamicSchedulingEnabled(boolean dynamicSchedulingEnabled) { + this.dynamicSchedulingEnabled = dynamicSchedulingEnabled; + return this; + } + /** Creates an instance of {@link DefaultDecoderFactory}, using defaults if values are unset. */ public DefaultDecoderFactory build() { return new DefaultDecoderFactory(this); @@ -177,6 +200,7 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory { private final @C.Priority int codecPriority; private final boolean shouldConfigureOperatingRate; private final MediaCodecSelector mediaCodecSelector; + private final boolean dynamicSchedulingEnabled; /** * @deprecated Use {@link Builder} instead. @@ -210,6 +234,7 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory { this.codecPriority = builder.codecPriority; this.shouldConfigureOperatingRate = builder.shouldConfigureOperatingRate; this.mediaCodecSelector = builder.mediaCodecSelector; + this.dynamicSchedulingEnabled = builder.dynamicSchedulingEnabled; } @Override @@ -327,6 +352,15 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory { return codec; } + /** + * Returns whether decoder dynamic scheduling is enabled. + * + *

See {@link Builder#experimentalSetDynamicSchedulingEnabled}. + */ + public boolean isDynamicSchedulingEnabled() { + return dynamicSchedulingEnabled; + } + private static DefaultCodec createCodecFromDecoderInfos( Context context, List decoderInfos, @@ -354,7 +388,7 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory { } private static void configureOperatingRate(MediaFormat mediaFormat) { - if (Util.SDK_INT < 25) { + if (SDK_INT < 25) { // Not setting priority and operating rate achieves better decoding performance. return; } @@ -371,7 +405,8 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory { private static boolean deviceNeedsPriorityWorkaround() { // On these chipsets, decoder configuration fails if KEY_OPERATING_RATE is set but not // KEY_PRIORITY. See b/358519863. - return Util.SDK_INT >= 31 && Build.SOC_MODEL.equals("s5e8835"); + return SDK_INT >= 31 + && (Build.SOC_MODEL.equals("s5e8835") || Build.SOC_MODEL.equals("SA8155P")); } private static boolean deviceNeedsDisable8kWorkaround(Format format) { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java index 85f601e73b..c7cf809ef3 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java @@ -54,6 +54,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; this.decoderFactory = decoderFactory; this.hdrMode = hdrMode; decodeOnlyPresentationTimestamps = new ArrayList<>(); + maxDecoderPendingFrameCount = C.INDEX_UNSET; } @Override @@ -61,6 +62,22 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; return TAG; } + /** + * {@inheritDoc} + * + *

The duration is calculated based on the number of {@linkplain #maxDecoderPendingFrameCount + * allowed pending frames}. + */ + @Override + public long getDurationToProgressUs(long positionUs, long elapsedRealtimeUs) { + if (maxDecoderPendingFrameCount == C.INDEX_UNSET) { + return DEFAULT_DURATION_TO_PROGRESS_US; + } + // TODO: b/258809496 - Consider using async API and dynamic scheduling when decoder input + // slots are available. + return maxDecoderPendingFrameCount * 2_000L; + } + @Override protected Format overrideInputFormat(Format format) { if (hdrMode == Composition.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoPlayerAssetLoader.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoPlayerAssetLoader.java index 8c52968f45..cc23b27062 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoPlayerAssetLoader.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoPlayerAssetLoader.java @@ -189,6 +189,10 @@ public final class ExoPlayerAssetLoader implements AssetLoader { .setLooper(looper) .setUsePlatformDiagnostics(false) .setReleaseTimeoutMs(getReleaseTimeoutMs()); + if (decoderFactory instanceof DefaultDecoderFactory) { + playerBuilder.experimentalSetDynamicSchedulingEnabled( + ((DefaultDecoderFactory) decoderFactory).isDynamicSchedulingEnabled()); + } if (clock != Clock.DEFAULT) { // Transformer.Builder#setClock is also @VisibleForTesting, so if we're using a non-default // clock we must be in a test context.