From 322a5aee69fd28cdd458990b14875d489f19eda9 Mon Sep 17 00:00:00 2001 From: Diego Vela Date: Tue, 21 Sep 2021 13:58:40 -0700 Subject: [PATCH] Update Reference implementation for window-extensions. Update reference implementation for window-extensions. Bug: 200716579 Test: manual Change-Id: Iabcab8b2aba45d24ebcde825c26681079999d81c --- .../extensions/WindowExtensionsImpl.java | 91 ++++++++++++++++++ .../extensions/WindowExtensionsProvider.java | 38 ++++++++ .../ActivityEmbeddingComponentProvider.java | 64 ------------ ...nt.java => WindowLayoutComponentImpl.java} | 20 +--- .../Jetpack/window-extensions-release.aar | Bin 19169 -> 18278 bytes 5 files changed, 131 insertions(+), 82 deletions(-) create mode 100644 libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java create mode 100644 libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsProvider.java delete mode 100644 libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/ActivityEmbeddingComponentProvider.java rename libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/{WindowLayoutComponent.java => WindowLayoutComponentImpl.java} (93%) diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java new file mode 100644 index 0000000000000..990d7b6a0101c --- /dev/null +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsImpl.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2021 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 + * + * http://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.window.extensions; + +import android.app.ActivityThread; +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.window.extensions.embedding.ActivityEmbeddingComponent; +import androidx.window.extensions.embedding.SplitController; +import androidx.window.extensions.layout.WindowLayoutComponent; +import androidx.window.extensions.layout.WindowLayoutComponentImpl; + +/** + * The reference implementation of {@link WindowExtensions} that implements the initial API version. + */ +public class WindowExtensionsImpl implements WindowExtensions { + + private final Object mLock = new Object(); + private volatile WindowLayoutComponent mWindowLayoutComponent; + private volatile SplitController mSplitController; + + @Override + public int getVendorApiLevel() { + return 1; + } + + @Override + public boolean isWindowLayoutComponentAvailable() { + return true; + } + + @Override + public WindowLayoutComponent getWindowLayoutComponent() { + if (mWindowLayoutComponent == null) { + synchronized (mLock) { + if (mWindowLayoutComponent == null) { + Context context = ActivityThread.currentApplication(); + mWindowLayoutComponent = new WindowLayoutComponentImpl(context); + } + } + } + return mWindowLayoutComponent; + } + + /** + * Returns {@code true} if {@link ActivityEmbeddingComponent} is present on the device, + * {@code false} otherwise. If the component is not available the developer will receive a + * single callback with empty data or default values where possible. + */ + @Override + public boolean isEmbeddingComponentAvailable() { + return true; + } + + /** + * Returns the OEM implementation of {@link ActivityEmbeddingComponent} if it is supported on + * the device. The implementation must match the API level reported in + * {@link androidx.window.extensions.WindowExtensions}. An + * {@link UnsupportedOperationException} will be thrown if the device does not support + * Activity Embedding. Use + * {@link WindowExtensions#isEmbeddingComponentAvailable()} to determine if + * {@link ActivityEmbeddingComponent} is present. + * @return the OEM implementation of {@link ActivityEmbeddingComponent} + */ + @NonNull + public ActivityEmbeddingComponent getActivityEmbeddingComponent() { + if (mSplitController == null) { + synchronized (mLock) { + if (mSplitController == null) { + mSplitController = new SplitController(); + } + } + } + return mSplitController; + } +} diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsProvider.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsProvider.java new file mode 100644 index 0000000000000..f9e1f077cffc0 --- /dev/null +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/WindowExtensionsProvider.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2021 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 + * + * http://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.window.extensions; + +import android.annotation.NonNull; + +/** + * Provides the OEM implementation of {@link WindowExtensions}. + */ +public class WindowExtensionsProvider { + + private static final WindowExtensions sWindowExtensions = new WindowExtensionsImpl(); + + /** + * Returns the OEM implementation of {@link WindowExtensions}. This method is implemented in + * the library provided on the device and overwrites one in the Jetpack library included in + * apps. + * @return the OEM implementation of {@link WindowExtensions} + */ + @NonNull + public static WindowExtensions getWindowExtensions() { + return sWindowExtensions; + } +} diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/ActivityEmbeddingComponentProvider.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/ActivityEmbeddingComponentProvider.java deleted file mode 100644 index 56da30cb43831..0000000000000 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/ActivityEmbeddingComponentProvider.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2021 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 - * - * http://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.window.extensions.embedding; - -import android.content.Context; - -import androidx.annotation.NonNull; - -/** - * Provider for the reference implementation of androidx.window.extensions.embedding OEM interface - * for use with WindowManager Jetpack. - */ -public class ActivityEmbeddingComponentProvider { - private static SplitController sInstance; - - private ActivityEmbeddingComponentProvider() { - } - - /** - * Returns {@code true} if {@link ActivityEmbeddingComponent} is present on the device, - * {@code false} otherwise. If the component is not available the developer will receive a - * single callback with empty data or default values where possible. - */ - public static boolean isEmbeddingComponentAvailable() { - return true; - } - - /** - * Returns the OEM implementation of {@link ActivityEmbeddingComponent} if it is supported on - * the device. The implementation must match the API level reported in - * {@link androidx.window.extensions.WindowLibraryInfo}. An - * {@link UnsupportedOperationException} will be thrown if the device does not support - * Activity Embedding. Use - * {@link ActivityEmbeddingComponentProvider#isEmbeddingComponentAvailable()} to determine if - * {@link ActivityEmbeddingComponent} is present. - * @return the OEM implementation of {@link ActivityEmbeddingComponent} - */ - @NonNull - public static ActivityEmbeddingComponent getActivityEmbeddingComponent( - @NonNull Context context) { - if (sInstance == null) { - synchronized (ActivityEmbeddingComponentProvider.class) { - if (sInstance == null) { - sInstance = new SplitController(); - } - } - } - return sInstance; - } -} diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponent.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java similarity index 93% rename from libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponent.java rename to libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java index df76894fb544a..383d91da6af80 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponent.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java @@ -27,7 +27,6 @@ import android.graphics.Rect; import android.util.Log; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.window.common.DeviceStateManagerPostureProducer; import androidx.window.common.DisplayFeature; import androidx.window.common.ResourceConfigDisplayFeatureProducer; @@ -52,7 +51,7 @@ import java.util.function.Consumer; * production builds since the interface can still change before reaching stable version. * Please refer to {@link androidx.window.sidecar.SampleSidecarImpl} instead. */ -public class WindowLayoutComponent { +public class WindowLayoutComponentImpl implements WindowLayoutComponent { private static final String TAG = "SampleExtension"; private static WindowLayoutComponent sInstance; @@ -65,7 +64,7 @@ public class WindowLayoutComponent { private final SettingsDisplayFeatureProducer mSettingsDisplayFeatureProducer; private final DataProducer> mDisplayFeatureProducer; - private WindowLayoutComponent(Context context) { + public WindowLayoutComponentImpl(Context context) { mSettingsDevicePostureProducer = new SettingsDevicePostureProducer(context); mDevicePostureProducer = new PriorityDataProducer<>(List.of( mSettingsDevicePostureProducer, @@ -82,21 +81,6 @@ public class WindowLayoutComponent { mDisplayFeatureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged); } - /** - * Returns a shared instance. - */ - @Nullable - public static WindowLayoutComponent getInstance(@NonNull Context context) { - if (sInstance == null) { - synchronized (WindowLayoutComponent.class) { - if (sInstance == null) { - sInstance = new WindowLayoutComponent(context); - } - } - } - return sInstance; - } - /** * Adds a listener interested in receiving updates to {@link WindowLayoutInfo} * @param activity hosting a {@link android.view.Window} diff --git a/libs/WindowManager/Jetpack/window-extensions-release.aar b/libs/WindowManager/Jetpack/window-extensions-release.aar index b61b5bdf160f015ba3894146a2ba169cf1221085..42e829e3e5ab739c631ff56e53fe8d1c2109e291 100644 GIT binary patch delta 15869 zcmVz3C0kBvGe{oHQiv>LZ0GUSs01E&B0Ap-nb8}^LE^1+Nt$PJ`)ft;2?&V)*So%rk%O(dksF<>f4Pm3tt*|eo0GAP zqq(h(Bb|twow0+twXuzpzLn~~eJb)F9}3u+(;8aoJ30nO)!1~)!H87lB1od&!{HWl zUMI;I8{{bDON!IecOXDx7Wfdj6FfD*c>&=ovkb*l&&63E9ZEi|`uJ7?tzV(&A#E~r zCeW|_B;>j*B9?N~e^#Y1y&gNZ{(&B;{j-wWl2+zMnKB~2O|AQ;K~A?wuuYs+zMD$< zpu$!m=qY)Q-4RK(-(}V6NlU!{iS#a)77|~(*vb>eRb(F@y1V>}K5Xv$k}w&sTld%K za}CcLHeh|Z3xqM4%gJ@b{yY2yZlHG{xj$Lx2hf3y?=R~he|-i5V)*YZ^t)C5Zj!{< z3CSLQg#M2Dnz`r3JG#(K`I@u{wzdR?Tm;Hua<>)Mh^YJ)lBM2f8D4*I{LT<0(-{i^ z%Pt(!mX6e?{gt(c=mj<)vPD|`+8`SL;kF-ak|Cs(4-|5#;UG{i;547A^aV+(kz!QN z>K5d$>Q9BGe@gw2h7U#ickhV~m%t@KqJT?!7UkG4vqP1$y;!Ox$&8$~H}> z$uXz-dDCZErK)V}rW>*(!U4ml`!agz-ZJGV>}z}}tSrMPZ((DndIyYiNgkyIOp>8w z^YyGM8Vgj_Tq;Q$tG3u{GT%d6Tq(@2=Yj~1UL^J>e+oG);hrh?rFpvs#`+dc5Sr`(ma zHBk^!{9jDmmHh_nlU!MvVCZ++nnDQ&3}h_G?X_@B7((1T4Qtf~KO)q&N3V-LNKDHz zuxlm9e@oS{YZ%MyGIylr9p@rt|Lo0aRid4cU*1dx1_I*v=e#NBVC!OTWbE*FuVyMp zTVgXHcwaX*+QhTl^Wgx?cogFb-pB0kDv*-|cN-)(J0Hof-R1o`SpV3dPKO9MM3 zOrF}b;jp{?=`nv!3nc#qrbUs_w-9sH=0f+8dgA>+2@7#bi~~KadU#!;1cr^OJrEY# zf46hZKQ53N#=4P7q2&H3aFCSqF@1FgGy4Xtw3wlF*o$q~;n*ip0&74L8w$X1l<{J4 zq?o}06G9X(Bg2`t9rH4)4&k_jD37Bc>_9^N-HIvWZ2+3l$~FjwjOiLysO-eLGj>W) z=B14RPQC&EizaBx8H!%<%3ytxx+ZTse^|@#OcW0l$6`N`C#wqRJa0oo6xrerW%V1x zaE=1U!0rc=E35)8?3xV>9Rts^i``TcpPqBNKYO=Q`4hkDFYng>@~+5#?_FbS17jm2 za~o4S0YfKq7jq|fk$?Y>kgc_yt<5i<`@5$j<)mf1`4KWj@&k1FTQR?b!+X@Af7>F! z5@1L`V5J?pufQ4EbFI|1`1y_n@^#`HugIUxq9e+#XaWr~H;-6oQC3&M(ri=Eao<-*8#)!7tT!==Q+ zqR@niDur~!gr-#4YaCB2 zl0w?djG6D4iE3j+ey+F6FUwOyjB6i0XJFT9H13P^Rlh}JAazM#PM+Xcf2Qh`p)OZ% z#5R9SCkpg958rJ#>&iCBp@P9k_~Kc>7)V3DV#PI*0~{48Ghh8#uZwaP%FY$EF1YP= zBjhtSRf7k_CFq|$ch-jPRrJeinqWXceE+QH6r8P$i3Od_t^OlA3zRHnkp)nAW|C-U z4RV3QLuF@O1XR9Z!RChwenwtPU`y@4nmu_uASt*i~K@o0q#hh03-GiW#fE9YFKVQb9u3XtwZ zR6Hm^SszXNSSEQw)(wRM$|hCOS+?<^W;}Lyh&+E+bPL!7>Q9Hyf4a?ZRdX3C6-&VW z-zr2Y6O?Q68;rG+cxrMI@EtOBO)+dq&N*A#E~sBDIIg*e@rr3nWc^61sQu35FILaf0Zeu0- zaUF-MO{&}evnTr|e}t^qr~$@8#O5Yw3(vMHRQsGC~xA z0Xilv^sVJWe0Q4zeKd!YCnkxceOxyl<1>A?1TIkOu7dejfAZqcWQ7wBw^fb`5y>6k z^P;H`B`i#9uvp`irwd6eQ^3|y30Kiq6S%P*l*`gq5=sIg?jqUUrPRt^kM z{?{@{9EKRke;>AkNyV3%0UjX{b&hSZfUg*zM^B*=O-xvA#I*{ZAR=LPo6oS#kXuE` z`F+cWs*P>FOUwN6mlZ8yx9JsFDi?e8*OmQ_U9Pr zWmz^}{k6u01_EOHD>3ko%%r02h^&m^BNJyb!#as{2;P7~Np7wX>PIO4WMCdp1a3C~9E%~HcSa_w{}e|v*G#h^yTWM{Kom;hkkdxWXfV@iWb z%W!FyjArCMe_7Tb1PdD<&4^hyrM7}&gZXDmqedO~+I5;)wxr%>wkZ(6vjV6lkUZC2CJIz694rI;GId?tR@o zMn$;sDz41h2Y0GiJs3ez8*oeE^G6}cCyQ{yKpJNg!; zYz9&m5~9ZU%r+3wMzn_Gs@(;PsPpF0e;l#wC>HZ)B@_B4S?FfNRmG6J17-7+t~-pi zny7<2IP;d%af7;hL z^97y$r)r9e&(u9GiB=mFC#tZhR=SRNSxW1`$Y;k{^^!GZ+_}uQ;AKoxdDG01h^x{& zK+n@|BB}Z~)0Yxh*#V11I?tl!kJOQ_olUCr6!eoGIfw4J*6VkBa8<*7%)A3}j0&lH z%I>6=o75+AG9Rj=I(dnm*pnbZY&)`ZjgCmTvG}?U!@D( z^A!<;!R}h0x~%J5@>9nx;WC()o+tZRsf4+y;s3^VF4)8#Jad{&alH`|upkWbfo5nO z5_tjR>5jhGXn#(kAHBm}e-WU(PU!-!k6hum0Nm-cMgW3x+yF@T&2RM3DROwan2KE- z{0QD{JPftn{Sdxx4rd>~;KET>_<_9=bPxMH3&{}+)N~6HLGn_ef zi}J=oo(wzwluA_WxHuL>F{M+);n)z2)}B_h1mz+q=@}dpc8KaYf5uBsa9uY5 zrX*~=M~LdDpS(p0gE(^&jWmq))CkDlApvN%ou!gP8wHgiK>><)5xq3KNYLJcR1G2G zHNr%~umB$^3LUTFYPp-XaakSSJ8q_HRvy(%TUcG*k1(FLXto+xWFEfy-9vlDD1gx8 zz9*)sQvHqw^9$a}f7@&G;>JKK4BR{Tp9!-wdJDKV^)Yzo1GR^4tBcBn5rp#e& zzw{IeU?k*0J8%|oG8ixvAum zIqk#jJ3IW(5w>6?n@maT6TvwdvREA3EZI^Dw^1d+e{JVfO^~^hn|k*8SG}`>!T28& zm?_^ytR&qD9YlUn&G}8U-FbM&sM^uWtcw#Y{(;P*MdkuA) z|J;zbJiciPmyN<#E|IM`mxk?mMY!yNcVGy8Y5IA`tlvf!zba(@{ohSAp# zMq&Gve@^m#nEV)%L)+6c7j+HLEk>AmZBNA;z!w9Yyv@?LxS>-g#RV zB}X#}IYmItQ$oCgS31}F*WQO>2xNyxpn^`oe}|H|eg$xdZb`iSmrR2A6d1igOD@-6 zo`f)n7H=@}i`s`tGI|j<->?hudnlf5W2%Ikc_`Dm%`*t_jd{UEwI-fmDq|MVVYIpL zAPGu8x>}ewYr!JDtD&qOMW{N7oZA@MNQ_v{S&dn)VwIkGx^vrZ;e$2^a8|$iiaoZ| ze=-Yn(1n6jtDdn4XakexrR3=pK|1wQc^3jJpScD(HEp6=i^Umy`lgtW|E-@~Qu8=I z1@uOIKv9PVNv|rmzKo@!&)cgoIbOy*$oQI*%_(%T_H!Na_KVq^*$X}A#`$+^{If`h zu?0Q2r<8g|P`jyG6BbU;SFk@v=*Psne--kthOFh&KM|q-(TM#~(?-Bep5@~ThFx|GyR7@;rm*-NcWXIuHAG*g& zf|UiGb}ANMzdBbeC?P~=SXh_W)z@_HR@La&D{wSgP}PQr!us|eh4=H~IDw3Rbo}J+ zSf?E%rfR$rB$?+BjNq&14WQ$4e>`V|VqcItxCPx#6@aE4un~f*>6!YV?4)fK-LTAy zezRWtbP4%qLu)>x0)zZoV?zP~G5=2ut!QUu?j&JjV*8K6QOVkNMG3_RhpRr_-Fh%B zsvi5~88~c)Rg(f+b9t)n>z5dp0!-|k&)w3rWf6wp14o<$?L=45i|{}Mf65TVX}QvZ zmx&ue2nXwK=E?cN%1PrqbPuh(2hUZ$S?_Rqcn?Gvf`$0{)OJ4xhon(2gsX$BKt|NI zc9Y`Xz~o{hz65*&aPw{K?ef5a!d^Juf0hZ)C@)ouN2sdwRGGWQGahNLH++hgY*&95 z?Dm>+qRg^XcA0^vDca_hf2!5a=5QWyJ~mfbGfE8K;}-AOOpK*(p0e{Q8-^N>Qf_3m zPIAUsVDmmF-Rc&QtF4f&`Z=!A(=ha6Ro^>Ysdz+tpj59^OXC~pDIRl;^o&M5aBVAD zjZ8*yN6h=Qs|`6EuBnd%7Ln95kL5JeVyKXfWFXRLwd^WAvF(tffAmTdfz|Q)F&%~n zJ$^ttW>7qjoV@jnh#Wo(4{P=V8Q?s_R5oh54(*oV-TAtHsVhw^+W>SxzAOJFYrjEA zc{q$1JkEQG-nx`Di`*ui%Ve3A;{0sPTIHT;NEX668NP9Z7-0E~q7tObV%arXPgC1I zCm6qukwX?>KZe zk1-a{(QdwhJg>EqQlXBCdtk3AhSS42ZqFDX4_Qmsh(kH=>=g=&N`gC+GQ|+W201#e zl7yY4t)CTC({Q57qx+H<#q}79ynGRRR70e*MJOGJy#fK%f8m+oRlY-6DG}57pL8nHn60%-iV^oA+jfQFVS?;> zAYC~Vzft}@ zB4gnL0k-0cf1D42Hw1bZoFc2g zT%RfUoI#qWiDG(n4!F-tBGRqhph312bvf8FWsz`M(4P-4a2V7;Rmy0}QC ziy`m0dfk_ZhXfT8@pA?}fo-z9f~Eu4L&7aXx2-k&PHxvaY4Qw#$z$taCE#lFqSRj|F$;G~}r4MKtl;8G#ZsjeAm$iS#Bz(x;RFbmYcA|RYx2ox@G4e`$VT_Vb-`caKEbAbdt=2Z46(l(<$7vxd9*S6kPSL^N0Ub4g!Uv6unn;d6)oMUX$^MknU;T`&_@|UP z|A^_uoxiPX-is!Jpc7w4=$9zGZ^%07dQIi8`b}x>X=X~1E*YH_p{=u30wYJpbFLKB znZo%)+{fDaC7^KQs^g;1;*xev!{)qG$guErw=$X>>nFZ`X7tmciI0}5`mwB8-^^czK|Af??O+YJSdfHmm7=8d!?Abfh}GuqwYx|6R(;Bt-KHD5sjAC90%+`- z1{^a8$&GR3xA$7&cGiYq909$j`E?w9@(PBUgnQ+zbongf1mr8$f4T7he<}aYC7P;=V!yb=)c^(LCnPx<9YJwPxN9AuAVHBbm?3{0 z9*(es?t*z8AAt9DiT74+18|u$O_?=*^DCnF;l*L;8q)!>Kf-qvRej@$EFRAZuNTIb z(OO?0ADA3$-H@rE6J>}Uz!${;JApz_39wiwA_!w-6MAf6e+{!T{Z*8F$VL!XDhQfy z7Dj@TeJQBK=-p=sFkNW@Y66P_qYNMuE2T*aFn~e7N-ELperZJpOf1GWiLaT86@7@6 zSVVw0h4@tk3>TR7T}N&k%~G`N8fS&!#nlY~#+GAwiE(noW5<$ZnfyJDK_P6Xr7*N=88_zf(P z<>^p9aED2GnwH$s?beq=<=lkl83`fTN2<)19!4LJh*g?+v8k zlvYq(#e;aD1=%ulj|TG%w8a3znph`4{THcVwdRPu9t=seJhh1tRUaZ>`GUIrCV@D} zqsbTpe@u&Mt=iRUUc88(UQ!-9HQoD4#=Pw|uJWAJw@~Un*siC(P2jdj5b_Z%U(-7w z*xW>GPz<%%ibw3IQdLIl+ad|@yfZ_crW4D@Ih^Cs!*P<8O%^ToPb!LA%Zjy5B_O$y znNVi(PmE$SeWNT{=fvZ!hIYbp$3yjEO!!n;f0nde6VI%_4_l|(1TUp4nq$*Vl;}Ly zF*7hHvtK0Dz;xv%2j>u*5<)~`b339z-b9RIERQ+O&nqN)WU*1Y=oYEHkK5QQ&EN7l zWLhR1JQpj!g;ZDtK#M0Bts-11m!@OGlM)A)MHP-zjlXIwOu|7q+rLrWc1J*S47&sJ`dNy$ z>Cn(bEQmr4cmq`GL@uMgwA7FVv;~~@;FY$(E-0u`gVbPjnKq5uJ>Fs4gAg_0^kzcz zGYEjn9oN64Ab@+1BWRj>7InLxOM$pve+7Tho&Id->lqBcj_FYnBglI&eO(4o>G#9) za*hWn6ho%X2f_s%PYQQxID7E@(^SfRVo5J!y+m3?q6;!=X^N67OF_dA#vyM02bC#B z81OvoGJ8Y+W*fQ822nC9x`#G5%$6^BS$_ESc_>?5aB1$<$Y;!8{LX@dQK{!~)Bt4jI9dR<`34x>^7Td--}3d2 zZ=Ii~Z}TD!;XG(Qhah$%TID|6vEqm@MIpBDI1NLd7R_0XkF)y)`t5GJB~L=0BP@9k zy9V91#hs9jll}bO`$XdU?G;-5f1KT3U?}qoZBTq~V@uNZYO9KvzzK>uM=VDq9@dH= z`8$VzhU~;)>!<|4J4LJs7v6y zNfCU3W{D?r+RK_|c}MkrjQsLWn`v&B(=`4#lqh?c$8^*!0g?sne>(_z?Z<<@6yF+B z6C19$?AI<-SAY4y$<5fa7A@y(jLK54scHn}MO9q3wtwl8>oRlNUq^;@s9e<6!3fbgD#Mp+M~A~FImB0y8*kQd6wk3cVNL5W0Sc!MIrQ~ItAWH9jv9S-OeZre>`AI;hcxgkqai@vI82G z!)@4R(G=5TVXtso;4uDXGQ-p{B@OMOgQ7s=2qBmK6+VLfT|u};S3Rh*5x z?#Gie^4HcOL1r%9;7Bh^Nx7EIkrO@ zhBmY|gU$f){W!`)yf@$i|Au#oSD>d)s7NoTzHn_@N1HFI-)CUJepY~YJmJ_Ts*z8^ z1GV)F@K$5%m?8-xGrSpTX6hqZW<+wDTs(^L#-!==k}q=UgmuXI`lKj;?8s1fQl#87 zHya(Ze}s(4Ic6r`MiID2P3nukA|!D=MrSa{_|ck3J`zSRLeF<1vb?Qi47BJmRBz8w zrJor%x;Cw3%@~B{JhUsg1HAEX+1a>K0w1%VczSUVLuoS#715t3ZR>8=&801Lup4Tv z8yuw@Zmd}?K+n>hwVNqS3fd>JNZ#m05xPh?f4zyl*(w6((dkcAP_^gJC<*7sDDzY( zHAEgve~8+tzaWrqA_VZ$t;>U@C#<05e*KoVVILSog#kW#o;DIUcy4x>Fffwq#V@3kc-dbFnAR02D-W&i^G07A=cVJb@Ao6DHvqD2 z1(b7+V3;boXz;T_ZiCX~8)%y^;XTF&JgG*WOCw%|Ge}`%YcxYVNt;u+6KcuEpF?=7 zR~%CY6bJ|m_Mez1_^(3vAM*q%nu?mre<<&8Kar*diR2V=*s1}O4&`&pXdbzBHS#&) zl=T(KHgVcNR^sE`XeXm~(lze-RutbpJ$DC=tEC)&`z|~Fn2s}0{~!TJ5CkKXIyAiO zS=Bb*IR88k_woAht9jK4Mic^eJcHP=rr0kSblwD857QIKTKl%8O@Y)zQm=`)e;Sqh z*)`8i)~AE64_v{Eyl)Lc4I~1KFj-q4rKx}*i$&T-8gsPaX9aNps__#eP*jr5&UHoE_Qe1 zxbU1qP7SGmBk)&fQ%CHcSst#O0|1vn^udk-J(3n&-=!LyQL_)6j0A-2O0{zGxr%~^ zOxLCf8*S(*3HKPa$C(WM)defd(gljhi%WN~m9-H~a$ECmLW1U#SQa=qe<)Cbe&!!g z0_=_{885JYoV`$LMxfLdoV8j-gV6~2!Q2<0a;gUPp;|4EO)EDfnq=nH1b#*}nHrY{ zwFYn{4X!v3w52n7DwP|q z7j7L>Gmz=-y1>=|j7r@pe~B7dgi~$jS5_r^Vj}}1&BuNwhWA;glT(I}){Vj>H_sL6 zWP{p-c{0-d7^T-Q9@rJ1Dak&-|0zu7`Gas!+D}>7PiKS|*0a=oc5t!7n#dSWU!LVe zXIm!Toi7H(k#gk6ave3M`v*(YL%xN?pcV_@;{d9qJ}gb=ru-P z=0Z@91;VZk0b+$^@43{@I3cmo-_c)oFk-g9z=_C(1{zBCENOQT+iUeJfjn$Cfem~5 z8V1a5P-13D##rocfA3UW+&!^}BPgsUZwuhq>TC2Yj_XSfV3E3JE>wRIaV1#1`I!E2 zPy^Rk5?{AVU!0s1r|3g(#w$eJH4*3un^lRjDv(B9bqn;4?4mgZS5RER-+_3Gh|95u zi6Jh{f%UGl5JCb!i zBm@^Y>`u6-`Y_Ks2AeJP8WxKodY<>|mYeUAe8 zxWF@(R)QS&e@J(V^%*9YwVYB`Xb$SrfiiDfR%*5^_?~;ShJ^arf&`x21w5-+fA7soo-_F;c8CiJuYGWKt48*4CPNdSpqD2JhIGB zNihjgSyR$Wv8lI*(GZ}jVjqH!;6cD;-+c+C(oaIUf4d~qXLfGYg>E5#{SND(ij|{< z`O9)NL<0B-Fx2kCoD;}Fy(CedVYDA{c-*A?+H=~yC4PDZn`^+o)TLaNF$GdJNg{aK z0ghe2@wewHK#AskY-@pReP#6ZfGRUrn`8Y}urS3t{xST`hTs#q5j#U zi$C}|Qu%NEjG@hy4EPF#At~vPCRql^x1RN&e?f;%FhejSp=mQ8AzkXsB_q4iGUJNk z<=UaEmgSv8@1Mf_+BVAmd~EB0v%t#{gup3p;&9*i;HrMoayq8_@%qf=$5umOC!j&n zVvvAmjE|*Ka!p@`_jB0cTlk)lvb%JmB%nT)MoGFy`(6q)5W#K7_i6M@f~BLHUzKMx zf0*Vc4Jav^hH#pvl5&H*N)pvrdb>+yWkw~|4lvosLcX-ObW5?;3OVP3l`>=av@&oJ z8ne{ABP>(Pxw=Sln&92;o)f9z?eajK`dFU? z3Y+qkK*flEZKqwSa)6;Lh|B^k*0aK8sj?==c!2&-VzjlSLNTzn+Crxc)Trg=e|_PR z3}&eb68iZ?paF1G+XjU``JY;IL&~fkp4(Y9=lP2G?>*kSz=R_eC!@g;2ML1a>#1& z5-l5Q`~fbv#?Q7pJTi7nHyHgpe_oP|xG9~)1F4r`Jx5PO#HpSug-)!dR3xaW?@*zJ zVCeM+s163wJc{W}iNH*?tRPVZ{a6NbGMFcBH%s44Q%H;lVlFzlJwW5`Fkf4@kYpP4 z{rP`rD62?pdL7$c_P7aHnfweY<9ubgCrY%mZYqa`25vhLO{?OTSe-?rD`zh6qA_beY8HTVIPpajpyW zpM&HBvUCyE>J>{Fd?3RuP1$qGKR`t7IKMpcN;{>D-^z-c_;fuXf4F#c)PIrva^NU2 zKYFaiY5z(6*qJ9vkxlYxR2u@^^ons$_1bMNBq|Ij4W3o!K()t07MDwM@%Y($H(zB(iW1S1KQZ2Dcbz+Vn)z zEeKIFDYwMA!7(;5e>0Zr=M6%%C%D+lsErSOn7wjbr!Q|ixV?QgulZ;U8j1bh@ zEmF+YZf4an+x-4qoiR+-ZAQ%dEpBVTp!{JY`DQB`v$>Mu*HIg9o+&2orquh?v5IqR zFcmVehqBm9(*r!REnd$?N#Ui*fhnM$xMYhPv>iFEHM8cef5!Ou;%|Vbm5D2P1ABCQ z%TsMF+49+4f9=)tCj<2C)9rP5X`V&1Ljg*Di&i!QjYHcypJ9tP=s)vf*-IkN_^%b@ zCm+a^bAAxuiQh3zpLxMhJ+q1nsynH@2_1Q;CL{jKa+xvuy ztO&EWw0hhx-^*((-1)qbN;^Q?T;pze$uo~|@g0fAQGebj>p!g(X1U&uUg79?SmQo! z4br>4Wl3t^N(CX!;FZ(>|6nl8{yMQh)o~S+?%l0Ye;27a&@!3^@G>2!F?z@*%7DqI zsduCsNqkdBgdlb6 z{K-OzDld-6ziN9{_&9(FLFI6{3<-cys`bu#kYpq3>jx59x`J;m(@&pd$y%8^ndEf6TDarzd>e)oi{Uz$EA-TFuf=!)rgg zwBPc=;kUUpu$jUY@~Uo>=AAx0KEVMY@i?Am}um?!w|YREEyU zu6009uAMiVt+}$!5glA6YrxBr`fl9ZA7_Jd_2k_{O$n{otY=!p1S}6&zU@0`gQE&_ zf3?7ss`)EZ^j2$h4I?)jqnQzYs|Txi(lFV5(qJw^5P;66bEEKg-VRJ&uGZ%I~3h`bc+~t~O&1!oKn1+)nh1EX>=QBUE2ma+Xd*Zbe6s z&~bo@TMY^7CmRb;Rj9#KhctxFOoXXbf4f#vDXD7K7V!Lj=#XTL;#@XCqcQ?GyUWI5 zA|*D5T6&CT^ci5DA`s_X*uqNxDq03369)k*J{Y z*w1^^h4d^JlC#(kwZNlP?n4LvsB6`}FQa_5q?4)YW z%^HdUR^Q!H)?5PP1_MHLrGs7$C4of6HCpy)O#(-`Mk1UQ_-h}KOPCSUZWa)%ZFL45 zsE4Y6Fjsug05!%yS+jDgY90$rG}1@6VK|c{emzV8hrfh*q9V1r>1}bqf9;%$8Vg)m zyp1ABo5J(Mr(WL376CF|Y^P4gcj8O#qVnxv{yRct>YdU)`ZxpEB1L*7?nqPOe$~|O zOdM(})QcP&WeLZT_tLXeV8rhGj7lEm>aZDi*C3^TF#W09>x{WjH)`OkeO?t&qU)d7`T^!DJLUTA^`hZ!7E1z4h`jMT1* zgPMSm`5QF{P}ivZe@5-@HNL4s?}OqFzsv(c?~cRZJM#4{Q|G>kHli-J*Jhlo{c&AhPzpnzMu<_6X9hZ zzhlPoC`|Iae}0HF1N)^%Ef=;8fWPc2Wv2IqlEnGys{

4J7L00b%uAD~m` zP>hFG|@`!kF2+ts0Po(Z=niat+aGjQAG__w8BZVi4Ws@AT z)opGsAQth>C*{#i*5UloRxo8MFr~Y7@Q`807t@7rfB)I%da4`>1|Wh@)|~v7T3n4} zdFDy(v_cxB)o;l{hkf$Sx&H`lv9Ai(v_bwczWijERMkL#P5i*3d+}_G{PCNtkRsnX zmf=@sj|T<<;`txtuD|Qir2cL3n?$J~=2wzuKmd@{yI9vR*XFrh%F*o;dZ-~v3XoGP zQ_ngse`h8ooEi<0uH644&uiPE3W$sm483~Ae@t+9aPxlZ1g@(`@;Dl+%5v3SI7(vHJ;M;V zFFr1zW*X!F+(V>lOGDL8J!7x+B$aB)SUH^kf9iO8*<8o_)78j0;PbFCDH+s75F(@o zGY_G)$W}Z9yO%3M;&@0JK&B+7E4EAc;PK8Xs)bKR|CQ!Cny*20IhA5veD9#;1M&ET zcrM6j0?HIDx#OmI8PjR_P;xS3Lk5k#9u^G7LatmRvkPq2yIx&s(yuf7EDgNjwP2NJ ze>zAd*eY4PlhUXtVWsNNzQ~xqHAnij)`s~19!dWfzW7fAbjq5JGb#x0QO254@>T<3 z@q&WK3RqTD0-%DxyVLxF3g81;s}hCAoQfQ1LlVYAiN7p)8+{vll#tBbDTOVWs=u7f z*du#<+aRWbV-=E`1fI#$;yHfa*pi*Ef9m^j4ctj=BNE%Ggfi1K8HhnU+=L>6polmM z!Qlzwn1VhcCa4{{=>VeI>muJDSFM{^Ga6G&d*v}Ui%*T+{Hx92Ooifl*4DOcTAhVz zJs+pPO?XV&d%{fOT&)FND`jV`T3tA|FEiMf`Swz&Kljsmjs?n!O{;=uV3a!;f2Vz} zT1$uJdR|-Sz<8#~O1+`1WgDyKDlo@mq!QJ-Y>{5N88>SW&Gi8DnJLq(_5`L&q(x9} z2h;|$Pqf~OJ^L^rfIz*P&Dl}gwQ17ZaB^)w!SR|8<;NBWR90N$`6393&XLuoo@X3* z{hKgVrrt)WYhGu3=2}ZGm&cqPe{4}jUNb){LdkOLxC2>{>pQLh6EzHr)kA zI`jPm260O(k;&?w5yaAY!xsHFJQ-?(#6f~f+mpL9Qty1JBt6luEE zeV|gCgeLZo5&2cqf7!>R`)yFuPDRmPMa8~(jwe1eh#o{g1`&PcPEv2tpN&A4Qu&JO z?t#PheEc`!Q9xx5X7LfA&PzK8?r{aDE1#(hEc2q0#lLw9!tn~qEu%KrSGBtVwNyaK z$oU}5BP8*6D5c#(#hNA}=@NN?3aVJ;7CBXz%kI>%HK2$*f5upS!uJ-BdJPl6tN~3^ zwcIr2el)d@Qu*XNhwmnt^Nf3?vcpqMVcW7OV9sYL1Kub?cPor;T zXQofj044YJe-kj!=l{2u|KG0$f1v*bY5(tNzYF94KqLJ07i99kKmK>6_8*VG1pXIv z+rPv7E*bsyNkIHN?v>UPl*`FG?x`F+`JFN@XFvL;wJGVQh6}b1zU!1qJ{B T000UA3IJ>Z0087f00000VYj

f0DO*qR%;(Yl)37}>hge;T_v8QVCT+uAtN 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 ABme*a